Merge
authorkatleman
Tue, 02 Apr 2013 15:31:24 -0700
changeset 16513 9c96ead03162
parent 16510 311a0f72fc77 (diff)
parent 16512 024da1ae4667 (current diff)
child 16514 281a115a9f66
Merge
jdk/makefiles/CompileNativeLibraries.gmk
--- a/jdk/.hgtags	Tue Apr 02 14:13:13 2013 -0400
+++ b/jdk/.hgtags	Tue Apr 02 15:31:24 2013 -0700
@@ -204,3 +204,4 @@
 dfb40f066c6ce129822f0f5dc2ac89173808781a jdk8-b80
 c0f8022eba536dcdc8aae659005b33f3982b9368 jdk8-b81
 624bcb4800065c6656171948e31ebb2925f25c7a jdk8-b82
+ac519af51769e92c51b597a730974e8607357709 jdk8-b83
--- a/jdk/make/com/sun/Makefile	Tue Apr 02 14:13:13 2013 -0400
+++ b/jdk/make/com/sun/Makefile	Tue Apr 02 15:31:24 2013 -0700
@@ -45,7 +45,7 @@
 SUBDIRS_desktop    = image
 SUBDIRS_enterprise = crypto/provider jndi \
                      org rowset net/httpserver
-SUBDIRS_misc       = $(SCRIPT_SUBDIR) tracing servicetag nio demo
+SUBDIRS_misc       = $(SCRIPT_SUBDIR) tracing nio demo
 
 SUBDIRS_tools      = tools
 
--- a/jdk/make/com/sun/servicetag/Makefile	Tue Apr 02 14:13:13 2013 -0400
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,80 +0,0 @@
-# Copyright (c) 2008, 2011, 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.
-
-BUILDDIR = ../../..
-PACKAGE = com.sun.servicetag
-PRODUCT = sun
-include $(BUILDDIR)/common/Defs.gmk
-
-#
-# Files to compile
-#
-AUTO_FILES_JAVA_DIRS = com/sun/servicetag
-
-#
-# Rules
-#
-include $(BUILDDIR)/common/Classes.gmk
-
-SERVICETAG_LIBDIR = $(LIBDIR)/servicetag
-SERVICETAG_RESOURCES_DIR = $(CLASSDESTDIR)/com/sun/servicetag/resources
-FILES_copy = $(SERVICETAG_RESOURCES_DIR)/product_registration.xsd \
-             $(SERVICETAG_RESOURCES_DIR)/register.html \
-             $(SERVICETAG_RESOURCES_DIR)/register_ja.html \
-             $(SERVICETAG_RESOURCES_DIR)/register_zh_CN.html \
-             $(SERVICETAG_LIBDIR)/jdk_header.png
-
-# Add all properties files to the FILES_copy list
-SWORDFISH_properties := $(shell \
-       $(CD) $(SHARE_SRC)/classes/com/sun/servicetag/resources; \
-       $(FIND) . -name 'javase_*.properties' -print ; \
-    )
-FILES_copy += $(shell \
-   for f in $(SWORDFISH_properties) ; do \
-       echo $(SERVICETAG_RESOURCES_DIR)/$$f ; \
-   done \
-)
-
-
-#
-#OTHER_JAVACFLAGS += -Xlint:unchecked
-
-build: install-servicetag-lib copy-files
-
-copy-files: $(FILES_copy)
-
-$(CLASSBINDIR)/%: $(SHARE_SRC)/classes/%
-	$(install-file)
-
-$(SERVICETAG_LIBDIR)/jdk_header.png: $(SHARE_SRC)/classes/com/sun/servicetag/resources/jdk_header.png
-	$(install-file)
-	$(call chmod-file, 444)
-
-install-servicetag-lib:
-	@$(RM) -rf $(SERVICETAG_LIBDIR)
-	$(MKDIR) $(SERVICETAG_LIBDIR)
-
-clean clobber::
-	@$(RM) $(FILES_copy)
-
-.PHONY: copy-files
--- a/jdk/make/common/Release.gmk	Tue Apr 02 14:13:13 2013 -0400
+++ b/jdk/make/common/Release.gmk	Tue Apr 02 15:31:24 2013 -0700
@@ -59,8 +59,7 @@
 # This is an interim solution until the ct.sym is replaced
 # with a new module system (being discussed for JDK 8).
 #
-EXPORTED_PRIVATE_PKGS = com.sun.servicetag \
-                        com.oracle.net \
+EXPORTED_PRIVATE_PKGS = com.oracle.net \
                         com.oracle.nio
 
 # 64-bit solaris has a few special cases. We define the variable
--- a/jdk/make/java/java/FILES_java.gmk	Tue Apr 02 14:13:13 2013 -0400
+++ b/jdk/make/java/java/FILES_java.gmk	Tue Apr 02 15:31:24 2013 -0700
@@ -209,6 +209,7 @@
             sun/util/locale/provider/CalendarDataProviderImpl.java \
             sun/util/locale/provider/CalendarDataUtility.java \
             sun/util/locale/provider/CalendarNameProviderImpl.java \
+            sun/util/locale/provider/CalendarProviderImpl.java \
             sun/util/locale/provider/CollationRules.java \
             sun/util/locale/provider/CollatorProviderImpl.java \
             sun/util/locale/provider/CurrencyNameProviderImpl.java \
@@ -232,6 +233,7 @@
             sun/util/locale/provider/SPILocaleProviderAdapter.java \
             sun/util/locale/provider/TimeZoneNameProviderImpl.java \
             sun/util/locale/provider/TimeZoneNameUtility.java \
+	sun/util/spi/CalendarProvider.java \
     java/util/LocaleISOData.java \
         sun/util/cldr/CLDRLocaleProviderAdapter.java \
     java/util/MissingResourceException.java \
--- a/jdk/make/java/java/mapfile-vers	Tue Apr 02 14:13:13 2013 -0400
+++ b/jdk/make/java/java/mapfile-vers	Tue Apr 02 15:31:24 2013 -0700
@@ -133,6 +133,7 @@
 		Java_java_lang_ClassLoader_00024NativeLibrary_find;
 		Java_java_lang_ClassLoader_00024NativeLibrary_load;
 		Java_java_lang_ClassLoader_00024NativeLibrary_unload;
+		Java_java_lang_ClassLoader_00024NativeLibrary_findBuiltinLib;
 		Java_java_lang_ClassLoader_getCaller; 
 		Java_java_lang_ClassLoader_registerNatives;
 		Java_java_lang_Compiler_registerNatives;
--- a/jdk/make/java/nio/Makefile	Tue Apr 02 14:13:13 2013 -0400
+++ b/jdk/make/java/nio/Makefile	Tue Apr 02 15:31:24 2013 -0700
@@ -1,5 +1,5 @@
 #
-# Copyright (c) 2000, 2012, Oracle and/or its affiliates. All rights reserved.
+# Copyright (c) 2000, 2013, 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
@@ -384,9 +384,7 @@
 ifeq ($(PLATFORM),windows)
   OTHER_LDLIBS += $(JVMLIB) ws2_32.lib \
      -libpath:$(LIBDIR) java.lib \
-     $(OBJDIR)/../../../../sun/java.net/net/$(OBJDIRNAME)/net.lib \
-     $(OBJDIR)/../../../java.lang/java/$(OBJDIRNAME)/io_util.obj \
-     $(OBJDIR)/../../../java.lang/java/$(OBJDIRNAME)/FileDescriptor_md.obj
+     $(OBJDIR)/../../../../sun/java.net/net/$(OBJDIRNAME)/net.lib
 endif
 ifeq ($(PLATFORM), linux)
 OTHER_LDLIBS += -L$(LIBDIR)/$(LIBARCH) -ljava -lnet -lpthread $(LIBDL)
--- a/jdk/make/sun/xawt/FILES_c_unix.gmk	Tue Apr 02 14:13:13 2013 -0400
+++ b/jdk/make/sun/xawt/FILES_c_unix.gmk	Tue Apr 02 15:31:24 2013 -0700
@@ -1,5 +1,5 @@
 #
-# Copyright (c) 2002, 2010, Oracle and/or its affiliates. All rights reserved.
+# Copyright (c) 2002, 2013, 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
@@ -76,6 +76,7 @@
 	debug_trace.c \
 	debug_util.c \
 	awt_Plugin.c \
+        gnome_interface.c \
 	gtk2_interface.c \
         swing_GTKEngine.c \
         swing_GTKStyle.c \
--- a/jdk/makefiles/CompileNativeLibraries.gmk	Tue Apr 02 14:13:13 2013 -0400
+++ b/jdk/makefiles/CompileNativeLibraries.gmk	Tue Apr 02 15:31:24 2013 -0700
@@ -1,5 +1,5 @@
 #
-# Copyright (c) 2011, 2012, Oracle and/or its affiliates. All rights reserved.
+# Copyright (c) 2011, 2013, 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
@@ -843,6 +843,7 @@
 	debug_trace.c \
 	debug_util.c \
 	awt_Plugin.c \
+        gnome_interface.c \
 	gtk2_interface.c \
         swing_GTKEngine.c \
         swing_GTKStyle.c \
@@ -1959,8 +1960,6 @@
 				        -lsendfile -ljava -lnet -lc,\
 		LDFLAGS_SUFFIX_windows:=jvm.lib ws2_32.lib $(WIN_JAVA_LIB) \
 					$(JDK_OUTPUTDIR)/objs/libnet/net.lib \
-                                        $(JDK_OUTPUTDIR)/objs/libjava/io_util.obj \
-		                        $(JDK_OUTPUTDIR)/objs/libjava/FileDescriptor_md.obj \
 					advapi32.lib,\
 		LDFLAGS_SUFFIX_macosx:=-ljava -lnet -pthread -framework CoreFoundation,\
 		LDFLAGS_SUFFIX:=,\
--- a/jdk/makefiles/CopyFiles.gmk	Tue Apr 02 14:13:13 2013 -0400
+++ b/jdk/makefiles/CopyFiles.gmk	Tue Apr 02 15:31:24 2013 -0700
@@ -81,17 +81,6 @@
 ##########################################################################################
 
 LIBDIR = $(JDK_OUTPUTDIR)/lib
-SERVICETAG_LIBDIR = $(LIBDIR)/servicetag
-
-$(SERVICETAG_LIBDIR)/jdk_header.png: $(JDK_TOPDIR)/src/share/classes/com/sun/servicetag/resources/jdk_header.png
-	$(MKDIR) -p $(@D)
-	$(RM) $@
-	$(CP) $< $@
-	$(CHMOD) 444 $@
-
-COPY_FILES += $(SERVICETAG_LIBDIR)/jdk_header.png
-
-##########################################################################################
 
 MGMT_LIBDIR = $(LIBDIR)/management
 MGMT_LIB_SRC = $(JDK_TOPDIR)/src/share/lib/management
--- a/jdk/makefiles/CopyIntoClasses.gmk	Tue Apr 02 14:13:13 2013 -0400
+++ b/jdk/makefiles/CopyIntoClasses.gmk	Tue Apr 02 15:31:24 2013 -0700
@@ -59,15 +59,6 @@
 COPY_FILES += \
   $(JDK_TOPDIR)/src/share/classes/sun/jvmstat/perfdata/resources/aliasmap
 
-# Servicetag resources
-SERVICETAG_RESOURCES_DIR = $(JDK_TOPDIR)/src/share/classes/com/sun/servicetag/resources
-COPY_FILES += \
-  $(SERVICETAG_RESOURCES_DIR)/product_registration.xsd \
-  $(SERVICETAG_RESOURCES_DIR)/register.html \
-  $(SERVICETAG_RESOURCES_DIR)/register_ja.html \
-  $(SERVICETAG_RESOURCES_DIR)/register_zh_CN.html \
-  $(wildcard  $(SERVICETAG_RESOURCES_DIR)/javase_*.properties)
-
 # JConsole resources
 JCONSOLE_RESOURCES_DIR = $(JDK_TOPDIR)/src/share/classes/sun/tools/jconsole/resources
 COPY_FILES += \
--- a/jdk/makefiles/CreateJars.gmk	Tue Apr 02 14:13:13 2013 -0400
+++ b/jdk/makefiles/CreateJars.gmk	Tue Apr 02 15:31:24 2013 -0700
@@ -76,8 +76,6 @@
 $(IMAGES_OUTPUTDIR)/lib/tzdb.jar: $(JDK_OUTPUTDIR)/lib/tzdb.jar
 	$(install-file)
 
-JARS += $(IMAGES_OUTPUTDIR)/lib/tzdb.jar 
-
 ##########################################################################################
 
 LOCALEDATA_INCLUDE_LOCALES := ar be bg ca cs da de el es et fi fr ga hi hr hu in is it \
@@ -213,28 +211,28 @@
 	org/relaxng/datatype \
 	sun/awt/HKSCS.class \
 	sun/awt/motif/X11GB2312.class \
-	sun/awt/motif/X11GB2312\$$Decoder.class \
-	sun/awt/motif/X11GB2312\$$Encoder.class \
+	sun/awt/motif/X11GB2312\$$$$Decoder.class \
+	sun/awt/motif/X11GB2312\$$$$Encoder.class \
 	sun/awt/motif/X11GBK.class \
-	sun/awt/motif/X11GBK\$$Encoder.class \
+	sun/awt/motif/X11GBK\$$$$Encoder.class \
 	sun/awt/motif/X11KSC5601.class \
-	sun/awt/motif/X11KSC5601\$$Decoder.class \
-	sun/awt/motif/X11KSC5601\$$Encoder.class \
+	sun/awt/motif/X11KSC5601\$$$$Decoder.class \
+	sun/awt/motif/X11KSC5601\$$$$Encoder.class \
 	sun/jvmstat \
 	sun/net/spi/nameservice/dns \
 	sun/nio/cs/ext \
 	sun/rmi/rmic \
 	sun/security/ec/ECDHKeyAgreement.class \
 	sun/security/ec/ECDSASignature.class \
-	sun/security/ec/ECDSASignature\$$Raw.class \
-	sun/security/ec/ECDSASignature\$$SHA1.class \
-	sun/security/ec/ECDSASignature\$$SHA224.class \
-	sun/security/ec/ECDSASignature\$$SHA256.class \
-	sun/security/ec/ECDSASignature\$$SHA384.class \
-	sun/security/ec/ECDSASignature\$$SHA512.class \
+	sun/security/ec/ECDSASignature\$$$$Raw.class \
+	sun/security/ec/ECDSASignature\$$$$SHA1.class \
+	sun/security/ec/ECDSASignature\$$$$SHA224.class \
+	sun/security/ec/ECDSASignature\$$$$SHA256.class \
+	sun/security/ec/ECDSASignature\$$$$SHA384.class \
+	sun/security/ec/ECDSASignature\$$$$SHA512.class \
 	sun/security/ec/ECKeyFactory.class \
 	sun/security/ec/ECKeyPairGenerator.class \
-	sun/security/ec/SunEC\$$1.class \
+	sun/security/ec/SunEC\$$$$1.class \
 	sun/security/ec/SunEC.class \
 	sun/security/ec/SunECEntries.class \
 	sun/security/internal \
@@ -357,23 +355,25 @@
 
 
 # Support for removing the addPropertyChangeListener and removePropertyChangeListener
-# methods from classes that only go into the profile builds. For now the Pack200.Packer
-# and Packer200.Unpacker classes have special handling because of the $ in the file
-# name.
+# methods from classes that only go into the profile builds. 
 BEANLESS_CLASSES = $(IMAGES_OUTPUTDIR)/beanless
 
+# When there are $ characters in filenames we have some very subtle interactions between
+# make expansion and shell expansion. In this particular case $< will contain a single $ while
+# $@ will contain \$. So we have to pass $< in single-quotes to avoid shell expansion
 $(BEANLESS_CLASSES)/%: $(JDK_OUTPUTDIR)/classes/%
 	$(MKDIR) -p $(@D)
-	$(TOOL_REMOVEMETHODS) $< $@ addPropertyChangeListener removePropertyChangeListener
+	$(TOOL_REMOVEMETHODS) '$<' $@ addPropertyChangeListener removePropertyChangeListener
 
 CLASSES_TO_DEBEAN = \
     java/util/logging/LogManager.class \
+    java/util/jar/Pack200\$$Packer.class \
+    java/util/jar/Pack200\$$Unpacker.class \
     com/sun/java/util/jar/pack/PackerImpl.class \
-    com/sun/java/util/jar/pack/UnpackerImpl.class
+    com/sun/java/util/jar/pack/UnpackerImpl.class 
 
-BEANLESS_CLASSES_TARGETS =
 ifneq ($(PROFILE),)
-    BEANLESS_CLASSES_TARGETS := $(foreach c, $(CLASSES_TO_DEBEAN), $(BEANLESS_CLASSES)/$c)
+    BEANLESS_CLASSES_TARGETS := $(addprefix $(BEANLESS_CLASSES)/, $(CLASSES_TO_DEBEAN))
 endif
 
 
@@ -400,13 +400,8 @@
 	      $(ECHO)  Updating rt.jar $(PROFILE) && \
 	      $(CD) $(patsubst %$(VERSION_CLASS_PATH),%,$(CLASS_FILE)) && \
                 $(JAR) $(RT_JAR_UPDATE_OPTIONS) $@.tmp $(VERSION_CLASS_PATH); \
-	      $(MKDIR) -p $(BEANLESS_CLASSES)/java/util/jar; \
-	      $(TOOL_REMOVEMETHODS) $(JDK_OUTPUTDIR)/classes/java/util/jar/Pack200\$$Packer.class \
-		$(BEANLESS_CLASSES)/java/util/jar/Pack200\$$Packer.class addPropertyChangeListener removePropertyChangeListener; \
-	      $(TOOL_REMOVEMETHODS) $(JDK_OUTPUTDIR)/classes/java/util/jar/Pack200\$$Unpacker.class \
-		$(BEANLESS_CLASSES)/java/util/jar/Pack200\$$Unpacker.class addPropertyChangeListener removePropertyChangeListener; \
 	      $(CD) $(BEANLESS_CLASSES) && \
-		$(JAR) $(RT_JAR_UPDATE_OPTIONS) $@.tmp $(CLASSES_TO_DEBEAN) java/util/jar/* ; \
+		$(JAR) $(RT_JAR_UPDATE_OPTIONS) $@.tmp $(CLASSES_TO_DEBEAN); \
             fi
 	$(MV) $@.tmp $@
 
@@ -871,8 +866,7 @@
 # This is an interim solution until the ct.sym is replaced
 # with a new module system (being discussed for JDK 8).
 #
-EXPORTED_PRIVATE_PKGS = com.sun.servicetag \
-                        com.oracle.net \
+EXPORTED_PRIVATE_PKGS = com.oracle.net \
                         com.oracle.nio
 
 $(IMAGES_OUTPUTDIR)/symbols/_the.symbols: $(IMAGES_OUTPUTDIR)/lib/rt.jar
@@ -1123,8 +1117,6 @@
 $(IMAGES_OUTPUTDIR)/lib/ext/nashorn.jar: $(NASHORN_DIST)/nashorn.jar
 	$(install-file)
 
-JARS += $(IMAGES_OUTPUTDIR)/lib/ext/nashorn.jar
-
 ##########################################################################################
 
 -include $(CUSTOM_MAKE_DIR)/CreateJars.gmk
--- a/jdk/makefiles/GensrcProperties.gmk	Tue Apr 02 14:13:13 2013 -0400
+++ b/jdk/makefiles/GensrcProperties.gmk	Tue Apr 02 15:31:24 2013 -0700
@@ -194,7 +194,6 @@
 	$(call CacheFind,$(JDK_TOPDIR)/src/share/classes/com/sun/rowset)),\
 	%zh_TW,%zh_HK))
 
-#com/sun/servicetag/resources
 #com/sun/swing/internal/plaf/basic/resources
 $(eval $(call add_properties_to_compile,COM_SUN_SWING_PLAF_BASIC,\
 	$(filter %.properties,\
--- a/jdk/makefiles/ProfileNames.gmk	Tue Apr 02 14:13:13 2013 -0400
+++ b/jdk/makefiles/ProfileNames.gmk	Tue Apr 02 15:31:24 2013 -0700
@@ -30,9 +30,8 @@
 
 PROFILE_NAMES := compact1 compact2 compact3
 
-# The include files use 1,2,3,4 for simplicity and conciseness. Internally we
-# use profile_1, profile_2 and profile_3. Note that profile_4 is a full JRE so
-# we never have to use it directly.
+# The include files use 1,2,3 for simplicity and conciseness. Internally we
+# use profile_1, profile_2 and profile_3. 
 
 ALL_PROFILES := profile_1 profile_2 profile_3
 
--- a/jdk/makefiles/Profiles.gmk	Tue Apr 02 14:13:13 2013 -0400
+++ b/jdk/makefiles/Profiles.gmk	Tue Apr 02 15:31:24 2013 -0700
@@ -74,19 +74,19 @@
     $(PROFILE_2_JARS)
 
 ifdef OPENJDK
-  PROFILE_4_JRE_JAR_FILES := $(filter-out alt-rt.jar, $(PROFILE_4_JRE_JAR_FILES))
+  FULL_JRE_JAR_FILES := $(filter-out alt-rt.jar, $(FULL_JRE_JAR_FILES))
 endif
 
-PROFILE_4_JARS := \
-    $(addprefix $(IMAGES_OUTPUTDIR)/lib/, $(PROFILE_4_JRE_JAR_FILES)) \
+FULL_JRE_JARS := \
+    $(addprefix $(IMAGES_OUTPUTDIR)/lib/, $(FULL_JRE_JAR_FILES)) \
     $(PROFILE_3_JARS)
 
 # The full set of "jar" files needed for a complete JDK (ct.sym and src.zip
 # are also included.)
 # Note we need to add back the regular form of all the custom profile jars e.g.
-# rt.jar and resources.jar
+# rt.jar and resources.jar that we filtered out above
 
-ALL_JARS := $(PROFILE_4_JARS) \
+ALL_JARS := $(FULL_JRE_JARS) \
         $(IMAGES_OUTPUTDIR)/lib/rt.jar \
         $(IMAGES_OUTPUTDIR)/lib/resources.jar \
         $(IMAGES_OUTPUTDIR)/lib/jconsole.jar \
@@ -94,7 +94,6 @@
         $(IMAGES_OUTPUTDIR)/lib/tools.jar \
         $(IMAGES_OUTPUTDIR)/lib/ct.sym \
         $(IMAGES_OUTPUTDIR)/src.zip \
-        $(IMAGES_OUTPUTDIR)/lib/ext/cldrdata.jar \
         $(IMAGES_OUTPUTDIR)/lib/sa-jdi.jar
 
 ifeq ($(OPENJDK_TARGET_OS),solaris)
@@ -140,7 +139,7 @@
    $(PROFILE_1_JRE_BIN_FILES) \
    $(PROFILE_2_JRE_BIN_FILES) \
    $(PROFILE_3_JRE_BIN_FILES) \
-   $(PROFILE_4_JRE_BIN_FILES) 
+   $(FULL_JRE_BIN_FILES) 
 
 NOT_JRE_BIN_FILES := $(filter-out $(ALL_JRE_BIN_FILES), $(NEW_ALL_BIN_LIST))
 
@@ -149,18 +148,18 @@
     NOT_JRE_BIN_FILES += \
         $(PROFILE_2_JRE_BIN_FILES) \
         $(PROFILE_3_JRE_BIN_FILES) \
-        $(PROFILE_4_JRE_BIN_FILES) 
+        $(FULL_JRE_BIN_FILES) 
 endif
 
 ifeq ($(PROFILE), profile_2)
     NOT_JRE_BIN_FILES += \
         $(PROFILE_3_JRE_BIN_FILES) \
-        $(PROFILE_4_JRE_BIN_FILES) 
+        $(FULL_JRE_BIN_FILES) 
 endif
 
 ifeq ($(PROFILE), profile_3)
     NOT_JRE_BIN_FILES += \
-        $(PROFILE_4_JRE_BIN_FILES) 
+        $(FULL_JRE_BIN_FILES) 
 endif
 
 NOT_JRE_BIN_FILES := $(addprefix $(JDK_OUTPUTDIR)/bin/, $(NOT_JRE_BIN_FILES))
@@ -173,7 +172,7 @@
    $(PROFILE_1_JRE_LIB_FILES) \
    $(PROFILE_2_JRE_LIB_FILES) \
    $(PROFILE_3_JRE_LIB_FILES) \
-   $(PROFILE_4_JRE_LIB_FILES) 
+   $(FULL_JRE_LIB_FILES) 
 
 NOT_JRE_LIB_FILES := $(filter-out $(ALL_JRE_LIB_FILES), $(NEW_ALL_LIB_LIST))
 
@@ -189,18 +188,18 @@
     NOT_JRE_LIB_FILES += \
         $(PROFILE_2_JRE_LIB_FILES) \
         $(PROFILE_3_JRE_LIB_FILES) \
-        $(PROFILE_4_JRE_LIB_FILES) 
+        $(FULL_JRE_LIB_FILES) 
 endif
 
 ifeq ($(PROFILE), profile_2)
     NOT_JRE_LIB_FILES += \
         $(PROFILE_3_JRE_LIB_FILES) \
-        $(PROFILE_4_JRE_LIB_FILES) 
+        $(FULL_JRE_LIB_FILES) 
 endif
 
 ifeq ($(PROFILE), profile_3)
     NOT_JRE_LIB_FILES += \
-        $(PROFILE_4_JRE_LIB_FILES) 
+        $(FULL_JRE_LIB_FILES) 
 endif
 
 # Exclude the custom jar files as these will be added back via a special rule
@@ -279,13 +278,13 @@
 
 ifeq ($(PROFILE), profile_1)
   RT_JAR_EXCLUDES += \
-    $(PROFILE_1_RTJAR_EXCLUDE_TYPES) \
+    $(call class_list, $(PROFILE_1_RTJAR_EXCLUDE_TYPES)) \
     $(PROFILE_2_RTJAR_INCLUDE_PACKAGES) \
     $(call class_list, $(PROFILE_2_RTJAR_INCLUDE_TYPES)) \
     $(PROFILE_3_RTJAR_INCLUDE_PACKAGES) \
     $(call class_list, $(PROFILE_3_RTJAR_INCLUDE_TYPES)) \
-    $(PROFILE_4_RTJAR_INCLUDE_PACKAGES) \
-    $(call class_list, $(PROFILE_4_RTJAR_INCLUDE_TYPES))
+    $(FULL_JRE_RTJAR_INCLUDE_PACKAGES) \
+    $(call class_list, $(FULL_JRE_RTJAR_INCLUDE_TYPES))
   RT_JAR_INCLUDE_TYPES := \
 	$(call class_list, $(PROFILE_1_RTJAR_INCLUDE_TYPES))
   PROFILE_INCLUDE_METAINF_SERVICES := \
@@ -293,11 +292,11 @@
 endif
 ifeq ($(PROFILE), profile_2)
   RT_JAR_EXCLUDES += \
-    $(PROFILE_2_RTJAR_EXCLUDE_TYPES) \
+    $(call class_list, $(PROFILE_2_RTJAR_EXCLUDE_TYPES)) \
     $(PROFILE_3_RTJAR_INCLUDE_PACKAGES) \
     $(call class_list, $(PROFILE_3_RTJAR_INCLUDE_TYPES)) \
-    $(PROFILE_4_RTJAR_INCLUDE_PACKAGES) \
-    $(call class_list, $(PROFILE_4_RTJAR_INCLUDE_TYPES))
+    $(FULL_JRE_RTJAR_INCLUDE_PACKAGES) \
+    $(call class_list, $(FULL_JRE_RTJAR_INCLUDE_TYPES))
   RT_JAR_INCLUDE_TYPES := \
 	$(call class_list, $(PROFILE_1_RTJAR_INCLUDE_TYPES)) \
 	$(call class_list, $(PROFILE_2_RTJAR_INCLUDE_TYPES))
@@ -307,9 +306,9 @@
 endif
 ifeq ($(PROFILE), profile_3)
   RT_JAR_EXCLUDES += \
-    $(PROFILE_3_RTJAR_EXCLUDE_TYPES) \
-    $(PROFILE_4_RTJAR_INCLUDE_PACKAGES) \
-    $(call class_list, $(PROFILE_4_RTJAR_INCLUDE_TYPES))
+    $(call class_list, $(PROFILE_3_RTJAR_EXCLUDE_TYPES)) \
+    $(FULL_JRE_RTJAR_INCLUDE_PACKAGES) \
+    $(call class_list, $(FULL_JRE_RTJAR_INCLUDE_TYPES))
   RT_JAR_INCLUDE_TYPES := \
 	$(call class_list, $(PROFILE_1_RTJAR_INCLUDE_TYPES)) \
 	$(call class_list, $(PROFILE_2_RTJAR_INCLUDE_TYPES)) \
--- a/jdk/makefiles/mapfiles/libjava/mapfile-vers	Tue Apr 02 14:13:13 2013 -0400
+++ b/jdk/makefiles/mapfiles/libjava/mapfile-vers	Tue Apr 02 15:31:24 2013 -0700
@@ -133,6 +133,7 @@
 		Java_java_lang_ClassLoader_00024NativeLibrary_find;
 		Java_java_lang_ClassLoader_00024NativeLibrary_load;
 		Java_java_lang_ClassLoader_00024NativeLibrary_unload;
+		Java_java_lang_ClassLoader_00024NativeLibrary_findBuiltinLib;
 		Java_java_lang_ClassLoader_getCaller; 
 		Java_java_lang_ClassLoader_registerNatives;
 		Java_java_lang_Compiler_registerNatives;
--- a/jdk/makefiles/profile-includes.txt	Tue Apr 02 14:13:13 2013 -0400
+++ b/jdk/makefiles/profile-includes.txt	Tue Apr 02 15:31:24 2013 -0700
@@ -27,6 +27,7 @@
     keytool$(EXE_SUFFIX)
 
 PROFILE_1_JRE_LIB_FILES := \
+    $(OPENJDK_TARGET_CPU_LEGACY_LIB)/$(LIBRARY_PREFIX)j2pkcs11$(SHARED_LIBRARY_SUFFIX) \
     $(OPENJDK_TARGET_CPU_LEGACY_LIB)/$(LIBRARY_PREFIX)java$(SHARED_LIBRARY_SUFFIX) \
     $(OPENJDK_TARGET_CPU_LEGACY_LIB)/$(LIBRARY_PREFIX)jsig$(SHARED_LIBRARY_SUFFIX) \
     $(OPENJDK_TARGET_CPU_LEGACY_LIB)/$(LIBRARY_PREFIX)jsig.diz \
@@ -34,6 +35,7 @@
     $(OPENJDK_TARGET_CPU_LEGACY_LIB)/$(LIBRARY_PREFIX)nio$(SHARED_LIBRARY_SUFFIX) \
     $(OPENJDK_TARGET_CPU_LEGACY_LIB)/$(LIBRARY_PREFIX)npt$(SHARED_LIBRARY_SUFFIX) \
     $(OPENJDK_TARGET_CPU_LEGACY_LIB)/$(LIBRARY_PREFIX)npt.diz \
+    $(OPENJDK_TARGET_CPU_LEGACY_LIB)/$(LIBRARY_PREFIX)sunec$(SHARED_LIBRARY_SUFFIX) \
     $(OPENJDK_TARGET_CPU_LEGACY_LIB)/$(LIBRARY_PREFIX)unpack$(SHARED_LIBRARY_SUFFIX) \
     $(OPENJDK_TARGET_CPU_LEGACY_LIB)/$(LIBRARY_PREFIX)verify$(SHARED_LIBRARY_SUFFIX) \
     $(OPENJDK_TARGET_CPU_LEGACY_LIB)/$(LIBRARY_PREFIX)verify.diz \
@@ -61,7 +63,9 @@
     currency.data \
     ext/localedata.jar \
     ext/meta-index \
+    ext/sunec.jar \
     ext/sunjce_provider.jar \
+    ext/sunpkcs11.jar \
     jce.jar \
     jsse.jar \
     logging.properties \
@@ -88,7 +92,9 @@
 
 PROFILE_1_JRE_JAR_FILES := \
     ext/localedata.jar \
+    ext/sunec.jar \
     ext/sunjce_provider.jar \
+    ext/sunpkcs11.jar \
     jce.jar \
     jsse.jar \
     resources.jar \
@@ -142,7 +148,7 @@
     management-agent.jar
 
 
-PROFILE_4_JRE_BIN_FILES := \
+FULL_JRE_BIN_FILES := \
     orbd$(EXE_SUFFIX) \
     pack200$(EXE_SUFFIX) \
     policytool$(EXE_SUFFIX) \
@@ -150,7 +156,7 @@
     tnameserv$(EXE_SUFFIX) \
     unpack200$(EXE_SUFFIX)
 
-PROFILE_4_JRE_LIB_FILES := \
+FULL_JRE_LIB_FILES := \
     $(OPENJDK_TARGET_CPU_LEGACY_LIB)/$(LIBRARY_PREFIX)awt$(SHARED_LIBRARY_SUFFIX) \
     $(OPENJDK_TARGET_CPU_LEGACY_LIB)/$(LIBRARY_PREFIX)awt_headless$(SHARED_LIBRARY_SUFFIX) \
     $(OPENJDK_TARGET_CPU_LEGACY_LIB)/$(LIBRARY_PREFIX)awt_xawt$(SHARED_LIBRARY_SUFFIX) \
@@ -158,7 +164,6 @@
     $(OPENJDK_TARGET_CPU_LEGACY_LIB)/$(LIBRARY_PREFIX)dt_socket$(SHARED_LIBRARY_SUFFIX) \
     $(OPENJDK_TARGET_CPU_LEGACY_LIB)/$(LIBRARY_PREFIX)dt_socket.diz \
     $(OPENJDK_TARGET_CPU_LEGACY_LIB)/$(LIBRARY_PREFIX)fontmanager$(SHARED_LIBRARY_SUFFIX) \
-    $(OPENJDK_TARGET_CPU_LEGACY_LIB)/$(LIBRARY_PREFIX)j2pkcs11$(SHARED_LIBRARY_SUFFIX) \
     $(OPENJDK_TARGET_CPU_LEGACY_LIB)/$(LIBRARY_PREFIX)jawt$(SHARED_LIBRARY_SUFFIX) \
     $(OPENJDK_TARGET_CPU_LEGACY_LIB)/$(LIBRARY_PREFIX)jdwp$(SHARED_LIBRARY_SUFFIX) \
     $(OPENJDK_TARGET_CPU_LEGACY_LIB)/$(LIBRARY_PREFIX)jpeg$(SHARED_LIBRARY_SUFFIX) \
@@ -167,7 +172,6 @@
     $(OPENJDK_TARGET_CPU_LEGACY_LIB)/$(LIBRARY_PREFIX)kcms$(SHARED_LIBRARY_SUFFIX) \
     $(OPENJDK_TARGET_CPU_LEGACY_LIB)/$(LIBRARY_PREFIX)mlib_image$(SHARED_LIBRARY_SUFFIX) \
     $(OPENJDK_TARGET_CPU_LEGACY_LIB)/$(LIBRARY_PREFIX)splashscreen$(SHARED_LIBRARY_SUFFIX) \
-    $(OPENJDK_TARGET_CPU_LEGACY_LIB)/$(LIBRARY_PREFIX)sunec$(SHARED_LIBRARY_SUFFIX) \
     $(OPENJDK_TARGET_CPU_LEGACY_LIB)/$(LIBRARY_PREFIX)t2k$(SHARED_LIBRARY_SUFFIX) \
     alt-rt.jar \
     charsets.jar \
@@ -178,8 +182,7 @@
     cmm/sRGB.pf \
     ext/cldrdata.jar \
     ext/dnsns.jar \
-    ext/sunec.jar \
-    ext/sunpkcs11.jar \
+    ext/nashorn.jar \
     ext/zipfs.jar \
     flavormap.properties \
     fontconfig.RedHat.5.bfc \
@@ -219,10 +222,9 @@
     oblique-fonts/fonts.dir \
     psfont.properties.ja \
     psfontj2d.properties \
-    servicetag/jdk_header.png \
     sound.properties
 
-PROFILE_4_JRE_OTHER_FILES := \
+FULL_JRE_OTHER_FILES := \
     man/ja_JP.UTF-8/man1/java.1 \
     man/ja_JP.UTF-8/man1/javaws.1 \
     man/ja_JP.UTF-8/man1/keytool.1 \
@@ -246,13 +248,12 @@
     man/man1/tnameserv.1 \
     man/man1/unpack200.1
 
-PROFILE_4_JRE_JAR_FILES := \
+FULL_JRE_JAR_FILES := \
     alt-rt.jar \
     charsets.jar \
     ext/cldrdata.jar \
     ext/dnsns.jar \
-    ext/sunec.jar \
-    ext/sunpkcs11.jar \
+    ext/nashorn.jar \
     ext/zipfs.jar
 
 
--- a/jdk/makefiles/profile-rtjar-includes.txt	Tue Apr 02 14:13:13 2013 -0400
+++ b/jdk/makefiles/profile-rtjar-includes.txt	Tue Apr 02 15:31:24 2013 -0700
@@ -22,119 +22,55 @@
 # or visit www.oracle.com if you need additional information or have any
 # questions.
 #
+
+# Included or excluded types must take one of two forms
+# - *.class   to indicate all classes; or else
+# - a full single type name e.g.
+#      com/sun/security/auth/callback/DialogCallbackHandler$$1.class
+# You can not use arbitrary wildcards like DialogCallbackHandler*.class.
+#
+# Notes:
+#  -  Nested types must use $$ in place of $ as $ is the make meta-character
+#  -  If a package is not listed in any profile's inclusion list then it will
+#     not appear in any profile. But if a package is also missing from the
+#     full JRE's inclusion list then it will still be part of the full JRE.
+#     This is because the full JRE's inclusion lists are only used to define
+#     the exclusion lists for profiles; they are not used to define the full
+#     JRE contents - that is still done with the pre-profile legacy mechanism
+#     (all packagesthat can be found, less those not intended for rt.jar).
+#     This was done to minimize the impact of profiles on the regular
+#     non-profile build.
+#
 PROFILE_1_RTJAR_INCLUDE_PACKAGES := \
     com/sun/demo/jvmti/hprof \
     com/sun/java/util/jar/pack \
     com/sun/net/ssl \
-    com/sun/net/ssl/internal/www/protocol/https \
     com/sun/nio/file \
     com/sun/security/cert/internal/x509 \
     java/io \
     java/lang \
-    java/lang/annotation \
-    java/lang/invoke \
-    java/lang/ref \
-    java/lang/reflect \
     java/math \
     java/net \
     java/nio \
-    java/nio/channels \
-    java/nio/channels/spi \
-    java/nio/charset \
-    java/nio/charset/spi \
-    java/nio/file \
-    java/nio/file/attribute \
-    java/nio/file/spi \
     java/security \
-    java/security/cert \
-    java/security/interfaces \
-    java/security/spec \
     java/text \
-    java/text/spi \
     java/time \
     java/util \
-    java/util/concurrent \
-    java/util/concurrent/atomic \
-    java/util/concurrent/locks \
-    java/util/function \
-    java/util/jar \
-    java/util/logging \
-    java/util/regex \
-    java/util/spi \
-    java/util/zip \
     javax/net \
-    javax/net/ssl \
-    javax/security/auth \
-    javax/security/auth/callback \
-    javax/security/auth/login \
-    javax/security/auth/spi \
-    javax/security/auth/x500 \
-    javax/security/cert \
-    jdk/internal \
+    javax/security \
+    jdk \
     sun/invoke \
-    sun/invoke/anon \
-    sun/invoke/empty \
-    sun/invoke/util \
     sun/launcher \
-    sun/launcher/resources \
     sun/misc \
-    sun/misc/resources \
     sun/net/ \
-    sun/net/idn \
-    sun/net/sdp \
-    sun/net/spi \
-    sun/net/spi/nameservice \
-    sun/net/util \
-    sun/net/www \
-    sun/net/www/http \
-    sun/net/www/protocol/file \
-    sun/net/www/protocol/http/ \
-    sun/net/www/protocol/http/logging \
-    sun/net/www/protocol/https \
-    sun/net/www/protocol/jar \
     sun/nio \
-    sun/nio/ch \
-    sun/nio/cs \
-    sun/nio/fs \
     sun/reflect \
-    sun/reflect/annotation \
-    sun/reflect/generics/factory \
-    sun/reflect/generics/parser \
-    sun/reflect/generics/reflectiveObjects \
-    sun/reflect/generics/repository \
-    sun/reflect/generics/scope \
-    sun/reflect/generics/tree \
-    sun/reflect/generics/visitor \
-    sun/reflect/misc \
-    sun/security/action \
-    sun/security/ec \
-    sun/security/jca \
-    sun/security/pkcs \
-    sun/security/pkcs10 \
-    sun/security/pkcs12 \
-    sun/security/provider \
-    sun/security/provider/certpath \
-    sun/security/provider/certpath/ssl \
-    sun/security/rsa \
-    sun/security/timestamp \
-    sun/security/tools \
-    sun/security/tools/keytool \
-    sun/security/util \
-    sun/security/validator \
-    sun/security/x509 \
+    sun/security \
     sun/text \
-    sun/text/bidi \
-    sun/text/normalizer \
-    sun/text/resources \
     sun/usagetracker \
-    sun/util \
-    sun/util/calendar \
-    sun/util/locale \
-    sun/util/logging \
-    sun/util/logging/resources \
-    sun/util/resources
+    sun/util
 
-PROFILE_1_RTJAR_INCLUDE_TYPES :=
+PROFILE_1_RTJAR_INCLUDE_TYPES := 
 
 PROFILE_1_RTJAR_EXCLUDE_TYPES := 
 
@@ -144,139 +80,19 @@
 PROFILE_2_RTJAR_INCLUDE_PACKAGES := \
     com/sun/java_cup/internal/runtime \
     com/sun/net/httpserver \
-    com/sun/net/httpserver/spi \
-    com/sun/org/apache/bcel/internal \
-    com/sun/org/apache/bcel/internal/classfile \
-    com/sun/org/apache/bcel/internal/generic \
-    com/sun/org/apache/bcel/internal/util \
-    com/sun/org/apache/regexp/internal \
-    com/sun/org/apache/xalan/internal \
-    com/sun/org/apache/xalan/internal/extensions \
-    com/sun/org/apache/xalan/internal/lib \
-    com/sun/org/apache/xalan/internal/res \
-    com/sun/org/apache/xalan/internal/templates \
-    com/sun/org/apache/xalan/internal/utils \
-    com/sun/org/apache/xalan/internal/xslt \
-    com/sun/org/apache/xalan/internal/xsltc \
-    com/sun/org/apache/xalan/internal/xsltc/cmdline \
-    com/sun/org/apache/xalan/internal/xsltc/cmdline/getopt \
-    com/sun/org/apache/xalan/internal/xsltc/compiler \
-    com/sun/org/apache/xalan/internal/xsltc/compiler/util \
-    com/sun/org/apache/xalan/internal/xsltc/dom \
-    com/sun/org/apache/xalan/internal/xsltc/runtime \
-    com/sun/org/apache/xalan/internal/xsltc/runtime/output \
-    com/sun/org/apache/xalan/internal/xsltc/trax \
-    com/sun/org/apache/xalan/internal/xsltc/util \
-    com/sun/org/apache/xerces/internal/dom \
-    com/sun/org/apache/xerces/internal/dom/events \
-    com/sun/org/apache/xerces/internal/impl \
-    com/sun/org/apache/xerces/internal/impl/dtd \
-    com/sun/org/apache/xerces/internal/impl/dtd/models \
-    com/sun/org/apache/xerces/internal/impl/dv \
-    com/sun/org/apache/xerces/internal/impl/dv/dtd \
-    com/sun/org/apache/xerces/internal/impl/dv/util \
-    com/sun/org/apache/xerces/internal/impl/dv/xs \
-    com/sun/org/apache/xerces/internal/impl/io \
-    com/sun/org/apache/xerces/internal/impl/msg \
-    com/sun/org/apache/xerces/internal/impl/validation \
-    com/sun/org/apache/xerces/internal/impl/xpath \
-    com/sun/org/apache/xerces/internal/impl/xpath/regex \
-    com/sun/org/apache/xerces/internal/impl/xs \
-    com/sun/org/apache/xerces/internal/impl/xs/identity \
-    com/sun/org/apache/xerces/internal/impl/xs/models \
-    com/sun/org/apache/xerces/internal/impl/xs/opti \
-    com/sun/org/apache/xerces/internal/impl/xs/traversers \
-    com/sun/org/apache/xerces/internal/impl/xs/util \
-    com/sun/org/apache/xerces/internal/jaxp \
-    com/sun/org/apache/xerces/internal/jaxp/datatype \
-    com/sun/org/apache/xerces/internal/jaxp/validation \
-    com/sun/org/apache/xerces/internal/parsers \
-    com/sun/org/apache/xerces/internal/util \
-    com/sun/org/apache/xerces/internal/utils \
-    com/sun/org/apache/xerces/internal/xinclude \
-    com/sun/org/apache/xerces/internal/xni \
-    com/sun/org/apache/xerces/internal/xni/grammars \
-    com/sun/org/apache/xerces/internal/xni/parser \
-    com/sun/org/apache/xerces/internal/xpointer \
-    com/sun/org/apache/xerces/internal/xs \
-    com/sun/org/apache/xerces/internal/xs/datatypes \
-    com/sun/org/apache/xml/internal/dtm \
-    com/sun/org/apache/xml/internal/dtm/ref \
-    com/sun/org/apache/xml/internal/dtm/ref/dom2dtm \
-    com/sun/org/apache/xml/internal/dtm/ref/sax2dtm \
-    com/sun/org/apache/xml/internal/res \
-    com/sun/org/apache/xml/internal/resolver \
-    com/sun/org/apache/xml/internal/resolver/helpers \
-    com/sun/org/apache/xml/internal/resolver/readers \
-    com/sun/org/apache/xml/internal/resolver/tools \
-    com/sun/org/apache/xml/internal/serialize \
-    com/sun/org/apache/xml/internal/serializer \
-    com/sun/org/apache/xml/internal/serializer/utils \
-    com/sun/org/apache/xml/internal/utils \
-    com/sun/org/apache/xml/internal/utils/res \
-    com/sun/org/apache/xpath/internal \
-    com/sun/org/apache/xpath/internal/axes \
-    com/sun/org/apache/xpath/internal/compiler \
-    com/sun/org/apache/xpath/internal/domapi \
-    com/sun/org/apache/xpath/internal/functions \
-    com/sun/org/apache/xpath/internal/jaxp \
-    com/sun/org/apache/xpath/internal/objects \
-    com/sun/org/apache/xpath/internal/operations \
-    com/sun/org/apache/xpath/internal/patterns \
-    com/sun/org/apache/xpath/internal/res \
+    com/sun/org/apache \
     com/sun/rmi/rmid \
-    com/sun/xml/internal/stream/ \
-    com/sun/xml/internal/stream/dtd \
-    com/sun/xml/internal/stream/dtd/nonvalidating \
-    com/sun/xml/internal/stream/events \
-    com/sun/xml/internal/stream/util \
-    com/sun/xml/internal/stream/writers \
+    com/sun/xml/internal/stream \
     java/rmi \
-    java/rmi/activation \
-    java/rmi/dgc \
-    java/rmi/registry \
-    java/rmi/server \
     java/sql \
     javax/rmi/ssl \
     javax/sql \
     javax/transaction \
-    javax/transaction/xa \
     javax/xml \
-    javax/xml/datatype \
-    javax/xml/namespace \
-    javax/xml/parsers \
-    javax/xml/stream \
-    javax/xml/stream/events \
-    javax/xml/stream/util \
-    javax/xml/transform \
-    javax/xml/transform/dom \
-    javax/xml/transform/sax \
-    javax/xml/transform/stax \
-    javax/xml/transform/stream \
-    javax/xml/validation \
-    javax/xml/xpath \
-    org/w3c/dom \
-    org/w3c/dom/bootstrap \
-    org/w3c/dom/css \
-    org/w3c/dom/events \
-    org/w3c/dom/html \
-    org/w3c/dom/ls \
-    org/w3c/dom/ranges \
-    org/w3c/dom/stylesheets \
-    org/w3c/dom/traversal \
-    org/w3c/dom/views \
-    org/w3c/dom/xpath \
+    org/w3c \
     org/xml/sax \
-    org/xml/sax/ext \
-    org/xml/sax/helpers \
     sun/net/httpserver \
-    sun/rmi/log \
-    sun/rmi/registry \
-    sun/rmi/runtime \
-    sun/rmi/server \
-    sun/rmi/transport \
-    sun/rmi/transport/proxy \
-    sun/rmi/transport/tcp \
+    sun/rmi \
     sun/util/xml
 
 PROFILE_2_RTJAR_INCLUDE_TYPES := 
@@ -284,287 +100,83 @@
 PROFILE_2_RTJAR_EXCLUDE_TYPES := 
 
 PROFILE_2_INCLUDE_METAINF_SERVICES := \
-    META-INF/services/sun.util.spi.XmlPropertiesProvider
+    META-INF/services/sun.util.spi.XmlPropertiesProvider 
 
 
 PROFILE_3_RTJAR_INCLUDE_PACKAGES := \
-    com/sun/jmx/defaults \
-    com/sun/jmx/interceptor \
-    com/sun/jmx/mbeanserver \
-    com/sun/jmx/remote/internal \
-    com/sun/jmx/remote/protocol/rmi \
-    com/sun/jmx/remote/security \
-    com/sun/jmx/remote/util \
-    com/sun/jmx/snmp \
-    com/sun/jmx/snmp/IPAcl \
-    com/sun/jmx/snmp/agent \
-    com/sun/jmx/snmp/daemon \
-    com/sun/jmx/snmp/defaults \
-    com/sun/jmx/snmp/internal \
-    com/sun/jmx/snmp/mpm \
-    com/sun/jmx/snmp/tasks \
-    com/sun/jmx/trace \
-    com/sun/jndi/dns \
-    com/sun/jndi/ldap \
-    com/sun/jndi/ldap/ext \
-    com/sun/jndi/ldap/pool \
-    com/sun/jndi/ldap/sasl \
-    com/sun/jndi/rmi/registry \
-    com/sun/jndi/toolkit/ctx \
-    com/sun/jndi/toolkit/dir \
-    com/sun/jndi/toolkit/url \
-    com/sun/jndi/url/dns \
-    com/sun/jndi/url/ldap \
-    com/sun/jndi/url/ldaps \
-    com/sun/jndi/url/rmi \
+    com/sun/jmx \
+    com/sun/jndi \
     com/sun/management \
-    com/sun/management/jmx \
     com/sun/naming/internal \
     com/sun/nio/sctp \
     com/sun/org/apache/xml/internal/security \
-    com/sun/org/apache/xml/internal/security/algorithms \
-    com/sun/org/apache/xml/internal/security/algorithms/implementations \
-    com/sun/org/apache/xml/internal/security/c14n \
-    com/sun/org/apache/xml/internal/security/c14n/helper \
-    com/sun/org/apache/xml/internal/security/c14n/implementations \
-    com/sun/org/apache/xml/internal/security/encryption \
-    com/sun/org/apache/xml/internal/security/exceptions \
-    com/sun/org/apache/xml/internal/security/keys \
-    com/sun/org/apache/xml/internal/security/keys/content \
-    com/sun/org/apache/xml/internal/security/keys/content/keyvalues \
-    com/sun/org/apache/xml/internal/security/keys/content/x509 \
-    com/sun/org/apache/xml/internal/security/keys/keyresolver \
-    com/sun/org/apache/xml/internal/security/keys/keyresolver/implementations \
-    com/sun/org/apache/xml/internal/security/keys/storage \
-    com/sun/org/apache/xml/internal/security/keys/storage/implementations \
-    com/sun/org/apache/xml/internal/security/signature \
-    com/sun/org/apache/xml/internal/security/transforms \
-    com/sun/org/apache/xml/internal/security/transforms/implementations \
-    com/sun/org/apache/xml/internal/security/transforms/params \
-    com/sun/org/apache/xml/internal/security/utils \
-    com/sun/org/apache/xml/internal/security/utils/resolver \
-    com/sun/org/apache/xml/internal/security/utils/resolver/implementations \
     com/sun/rowset \
-    com/sun/rowset/internal \
-    com/sun/rowset/providers \
-    com/sun/script/javascript \
-    com/sun/script/util \
+    com/sun/script \
     com/sun/security/auth \
-    com/sun/security/auth/callback \
-    com/sun/security/auth/login \
-    com/sun/security/auth/module \
     com/sun/security/jgss \
     com/sun/security/ntlm \
     com/sun/security/sasl \
-    com/sun/security/sasl/digest \
-    com/sun/security/sasl/gsskerb \
-    com/sun/security/sasl/ntlm \
-    com/sun/security/sasl/util \
     com/sun/tracing \
-    com/sun/tracing/dtrace \
     java/lang/instrument \
     java/lang/management \
     java/security/acl \
     java/util/prefs \
     javax/annotation/processing \
     javax/lang/model \
-    javax/lang/model/element \
-    javax/lang/model/type \
-    javax/lang/model/util \
     javax/management \
-    javax/management/loading \
-    javax/management/modelmbean \
-    javax/management/monitor \
-    javax/management/openmbean \
-    javax/management/relation \
-    javax/management/remote \
-    javax/management/remote/rmi \
-    javax/management/timer \
     javax/naming \
-    javax/naming/directory \
-    javax/naming/event \
-    javax/naming/ldap \
-    javax/naming/spi \
     javax/script \
     javax/security/auth/kerberos \
     javax/security/sasl \
     javax/smartcardio \
     javax/sql/rowset \
-    javax/sql/rowset/serial \
-    javax/sql/rowset/spi \
     javax/tools \
-    javax/tools/annotation \
     javax/xml/crypto \
-    javax/xml/crypto/dom \
-    javax/xml/crypto/dsig \
-    javax/xml/crypto/dsig/dom \
-    javax/xml/crypto/dsig/keyinfo \
-    javax/xml/crypto/dsig/spec \
     org/ietf/jgss \
-    org/jcp/xml/dsig/internal \
-    org/jcp/xml/dsig/internal/dom \
+    org/jcp/xml \
     sun/instrument \
     sun/management \
-    sun/management/counter \
-    sun/management/counter/perf \
-    sun/management/jmxremote \
-    sun/management/resources \
-    sun/management/snmp \
-    sun/management/snmp/jvminstr \
-    sun/management/snmp/jvmmib \
-    sun/management/snmp/util \
     sun/net/dns \
     sun/net/www/protocol/http/ntlm \
     sun/net/www/protocol/http/spnego \
     sun/nio/ch/sctp \
-    sun/org/mozilla/classfile/internal \
-    sun/org/mozilla/javascript/internal \
-    sun/org/mozilla/javascript/internal/annotations \
-    sun/org/mozilla/javascript/internal/ast \
-    sun/org/mozilla/javascript/internal/debug \
-    sun/org/mozilla/javascript/internal/jdk13 \
-    sun/org/mozilla/javascript/internal/jdk15 \
-    sun/org/mozilla/javascript/internal/json \
-    sun/org/mozilla/javascript/internal/optimizer \
-    sun/org/mozilla/javascript/internal/regexp \
-    sun/org/mozilla/javascript/internal/serialize \
-    sun/org/mozilla/javascript/internal/xml \
-    sun/org/mozilla/javascript/internal/xmlimpl \
+    sun/org/mozilla \
     sun/security/acl \
     sun/security/jgss \
-    sun/security/jgss/krb5 \
-    sun/security/jgss/spi \
-    sun/security/jgss/spnego \
-    sun/security/jgss/wrapper \
     sun/security/krb5 \
-    sun/security/krb5/internal \
-    sun/security/krb5/internal/ccache \
-    sun/security/krb5/internal/crypto \
-    sun/security/krb5/internal/crypto/dk \
-    sun/security/krb5/internal/ktab \
-    sun/security/krb5/internal/rcache \
-    sun/security/krb5/internal/util \
     sun/security/provider/certpath/ldap \
     sun/security/smartcardio \
-    sun/tracing \
-    sun/tracing/dtrace
+    sun/tracing
 
-PROFILE_3_RTJAR_INCLUDE_TYPES :=
+PROFILE_3_RTJAR_INCLUDE_TYPES := 
 
 PROFILE_3_RTJAR_EXCLUDE_TYPES := \
+    com/sun/security/auth/callback/DialogCallbackHandler$$1.class \
+    com/sun/security/auth/callback/DialogCallbackHandler$$2.class \
+    com/sun/security/auth/callback/DialogCallbackHandler$$Action.class \
+    com/sun/security/auth/callback/DialogCallbackHandler$$ConfirmationInfo.class \
+    com/sun/security/auth/callback/DialogCallbackHandler.class \
     javax/management/remote/rmi/_RMIConnectionImpl_Tie.class \
     javax/management/remote/rmi/_RMIConnection_Stub.class \
     javax/management/remote/rmi/_RMIServerImpl_Tie.class \
-    javax/management/remote/rmi/_RMIServer_Stub.class \
-    com/sun/security/auth/callback/DialogCallbackHandler.class \
-    com/sun/security/auth/callback/DialogCallbackHandler\$$1.class \
-    com/sun/security/auth/callback/DialogCallbackHandler\$$2.class \
-    com/sun/security/auth/callback/DialogCallbackHandler\$$Action.class \
-    com/sun/security/auth/callback/DialogCallbackHandler\$$ConfirmationInfo.class
+    javax/management/remote/rmi/_RMIServer_Stub.class
 
 PROFILE_3_INCLUDE_METAINF_SERVICES := \
     META-INF/services/javax.script.ScriptEngineFactory 
 
 
-PROFILE_4_RTJAR_INCLUDE_PACKAGES := \
-    com/oracle/net \
-    com/oracle/nio \
-    com/oracle/util \
+FULL_JRE_RTJAR_INCLUDE_PACKAGES := \
+    com/oracle \
     com/sun/accessibility/internal/resources \
     com/sun/activation/registries \
     com/sun/awt \
     com/sun/beans \
-    com/sun/beans/decoder \
-    com/sun/beans/finder \
-    com/sun/corba/se/impl/activation \
-    com/sun/corba/se/impl/copyobject \
-    com/sun/corba/se/impl/corba \
-    com/sun/corba/se/impl/dynamicany \
-    com/sun/corba/se/impl/encoding \
-    com/sun/corba/se/impl/interceptors \
-    com/sun/corba/se/impl/io \
-    com/sun/corba/se/impl/ior \
-    com/sun/corba/se/impl/ior/iiop \
-    com/sun/corba/se/impl/javax/rmi \
-    com/sun/corba/se/impl/javax/rmi/CORBA \
-    com/sun/corba/se/impl/legacy/connection \
-    com/sun/corba/se/impl/logging \
-    com/sun/corba/se/impl/monitoring \
-    com/sun/corba/se/impl/naming/cosnaming \
-    com/sun/corba/se/impl/naming/namingutil \
-    com/sun/corba/se/impl/naming/pcosnaming \
-    com/sun/corba/se/impl/oa \
-    com/sun/corba/se/impl/oa/poa \
-    com/sun/corba/se/impl/oa/toa \
-    com/sun/corba/se/impl/orb \
-    com/sun/corba/se/impl/orbutil \
-    com/sun/corba/se/impl/orbutil/closure \
-    com/sun/corba/se/impl/orbutil/concurrent \
-    com/sun/corba/se/impl/orbutil/fsm \
-    com/sun/corba/se/impl/orbutil/graph \
-    com/sun/corba/se/impl/orbutil/threadpool \
-    com/sun/corba/se/impl/presentation/rmi \
-    com/sun/corba/se/impl/protocol \
-    com/sun/corba/se/impl/protocol/giopmsgheaders \
-    com/sun/corba/se/impl/resolver \
-    com/sun/corba/se/impl/transport \
-    com/sun/corba/se/impl/util \
-    com/sun/corba/se/internal/CosNaming \
-    com/sun/corba/se/internal/Interceptors \
-    com/sun/corba/se/internal/POA \
-    com/sun/corba/se/internal/corba \
-    com/sun/corba/se/internal/iiop \
-    com/sun/corba/se/org/omg/CORBA \
-    com/sun/corba/se/pept/broker \
-    com/sun/corba/se/pept/encoding \
-    com/sun/corba/se/pept/protocol \
-    com/sun/corba/se/pept/transport \
-    com/sun/corba/se/spi/activation \
-    com/sun/corba/se/spi/activation/InitialNameServicePackage \
-    com/sun/corba/se/spi/activation/LocatorPackage \
-    com/sun/corba/se/spi/activation/RepositoryPackage \
-    com/sun/corba/se/spi/copyobject \
-    com/sun/corba/se/spi/encoding \
-    com/sun/corba/se/spi/extension \
-    com/sun/corba/se/spi/ior \
-    com/sun/corba/se/spi/ior/iiop \
-    com/sun/corba/se/spi/legacy/connection \
-    com/sun/corba/se/spi/legacy/interceptor \
-    com/sun/corba/se/spi/logging \
-    com/sun/corba/se/spi/monitoring \
-    com/sun/corba/se/spi/oa \
-    com/sun/corba/se/spi/orb \
-    com/sun/corba/se/spi/orbutil/closure \
-    com/sun/corba/se/spi/orbutil/fsm \
-    com/sun/corba/se/spi/orbutil/proxy \
-    com/sun/corba/se/spi/orbutil/threadpool \
-    com/sun/corba/se/spi/presentation/rmi \
-    com/sun/corba/se/spi/protocol \
-    com/sun/corba/se/spi/resolver \
-    com/sun/corba/se/spi/servicecontext \
-    com/sun/corba/se/spi/transport \
+    com/sun/corba \
     com/sun/image/codec/jpeg \
-    com/sun/imageio/plugins/bmp \
-    com/sun/imageio/plugins/common \
-    com/sun/imageio/plugins/gif \
-    com/sun/imageio/plugins/jpeg \
-    com/sun/imageio/plugins/png \
-    com/sun/imageio/plugins/wbmp \
-    com/sun/imageio/spi \
-    com/sun/imageio/stream \
-    com/sun/istack/internal \
-    com/sun/istack/internal/localization \
-    com/sun/istack/internal/logging \
-    com/sun/java/browser/dom \
-    com/sun/java/browser/net \
+    com/sun/imageio \
+    com/sun/istack \
+    com/sun/java/browser \
     com/sun/java/swing \
-    com/sun/java/swing/plaf/gtk \
-    com/sun/java/swing/plaf/gtk/resources \
-    com/sun/java/swing/plaf/motif \
-    com/sun/java/swing/plaf/motif/resources \
-    com/sun/java/swing/plaf/nimbus \
-    com/sun/java/swing/plaf/windows \
-    com/sun/java/swing/plaf/windows/resources \
     com/sun/jmx/remote/protocol/iiop \
     com/sun/jndi/cosnaming \
     com/sun/jndi/toolkit/corba \
@@ -572,313 +184,40 @@
     com/sun/jndi/url/iiop \
     com/sun/jndi/url/iiopname \
     com/sun/media/sound \
-    com/sun/org/glassfish/external/amx \
-    com/sun/org/glassfish/external/arc \
-    com/sun/org/glassfish/external/probe/provider \
-    com/sun/org/glassfish/external/probe/provider/annotations \
-    com/sun/org/glassfish/external/statistics \
-    com/sun/org/glassfish/external/statistics/annotations \
-    com/sun/org/glassfish/external/statistics/impl \
-    com/sun/org/glassfish/gmbal \
-    com/sun/org/glassfish/gmbal/util \
-    com/sun/org/omg/CORBA \
-    com/sun/org/omg/CORBA/ValueDefPackage \
-    com/sun/org/omg/CORBA/portable \
-    com/sun/org/omg/SendingContext \
-    com/sun/org/omg/SendingContext/CodeBasePackage \
-    com/sun/servicetag \
-    com/sun/swing/internal/plaf/basic/resources \
-    com/sun/swing/internal/plaf/metal/resources \
-    com/sun/swing/internal/plaf/synth/resources \
+    com/sun/org/glassfish \
+    com/sun/org/omg \
+    com/sun/swing \
     com/sun/xml/internal/bind \
-    com/sun/xml/internal/bind/annotation \
-    com/sun/xml/internal/bind/api \
-    com/sun/xml/internal/bind/api/impl \
-    com/sun/xml/internal/bind/marshaller \
-    com/sun/xml/internal/bind/unmarshaller \
-    com/sun/xml/internal/bind/util \
-    com/sun/xml/internal/bind/v2 \
-    com/sun/xml/internal/bind/v2/bytecode \
-    com/sun/xml/internal/bind/v2/model/annotation \
-    com/sun/xml/internal/bind/v2/model/core \
-    com/sun/xml/internal/bind/v2/model/impl \
-    com/sun/xml/internal/bind/v2/model/nav \
-    com/sun/xml/internal/bind/v2/model/runtime \
-    com/sun/xml/internal/bind/v2/runtime \
-    com/sun/xml/internal/bind/v2/runtime/output \
-    com/sun/xml/internal/bind/v2/runtime/property \
-    com/sun/xml/internal/bind/v2/runtime/reflect \
-    com/sun/xml/internal/bind/v2/runtime/reflect/opt \
-    com/sun/xml/internal/bind/v2/runtime/unmarshaller \
-    com/sun/xml/internal/bind/v2/schemagen \
-    com/sun/xml/internal/bind/v2/schemagen/episode \
-    com/sun/xml/internal/bind/v2/schemagen/xmlschema \
-    com/sun/xml/internal/bind/v2/util \
     com/sun/xml/internal/fastinfoset \
-    com/sun/xml/internal/fastinfoset/algorithm \
-    com/sun/xml/internal/fastinfoset/alphabet \
-    com/sun/xml/internal/fastinfoset/dom \
-    com/sun/xml/internal/fastinfoset/org/apache/xerces/util \
-    com/sun/xml/internal/fastinfoset/sax \
-    com/sun/xml/internal/fastinfoset/stax \
-    com/sun/xml/internal/fastinfoset/stax/events \
-    com/sun/xml/internal/fastinfoset/stax/factory \
-    com/sun/xml/internal/fastinfoset/stax/util \
-    com/sun/xml/internal/fastinfoset/tools \
-    com/sun/xml/internal/fastinfoset/util \
-    com/sun/xml/internal/fastinfoset/vocab \
-    com/sun/xml/internal/messaging/saaj \
-    com/sun/xml/internal/messaging/saaj/client/p2p \
-    com/sun/xml/internal/messaging/saaj/packaging/mime \
-    com/sun/xml/internal/messaging/saaj/packaging/mime/internet \
-    com/sun/xml/internal/messaging/saaj/packaging/mime/util \
-    com/sun/xml/internal/messaging/saaj/soap \
-    com/sun/xml/internal/messaging/saaj/soap/dynamic \
-    com/sun/xml/internal/messaging/saaj/soap/impl \
-    com/sun/xml/internal/messaging/saaj/soap/name \
-    com/sun/xml/internal/messaging/saaj/soap/ver1_1 \
-    com/sun/xml/internal/messaging/saaj/soap/ver1_2 \
-    com/sun/xml/internal/messaging/saaj/util \
-    com/sun/xml/internal/messaging/saaj/util/transform \
-    com/sun/xml/internal/org/jvnet/fastinfoset \
-    com/sun/xml/internal/org/jvnet/fastinfoset/sax \
-    com/sun/xml/internal/org/jvnet/fastinfoset/sax/helpers \
-    com/sun/xml/internal/org/jvnet/fastinfoset/stax \
-    com/sun/xml/internal/org/jvnet/mimepull \
-    com/sun/xml/internal/org/jvnet/staxex \
-    com/sun/xml/internal/org/jvnet/ws \
-    com/sun/xml/internal/org/jvnet/ws/databinding \
-    com/sun/xml/internal/org/jvnet/ws/message \
+    com/sun/xml/internal/messaging \
+    com/sun/xml/internal/org \
     com/sun/xml/internal/stream/buffer \
-    com/sun/xml/internal/stream/buffer/sax \
-    com/sun/xml/internal/stream/buffer/stax \
     com/sun/xml/internal/txw2 \
-    com/sun/xml/internal/txw2/annotation \
-    com/sun/xml/internal/txw2/output \
-    com/sun/xml/internal/ws/addressing \
-    com/sun/xml/internal/ws/addressing/model \
-    com/sun/xml/internal/ws/addressing/policy \
-    com/sun/xml/internal/ws/addressing/v200408 \
-    com/sun/xml/internal/ws/api \
-    com/sun/xml/internal/ws/api/addressing \
-    com/sun/xml/internal/ws/api/client \
-    com/sun/xml/internal/ws/api/config/management \
-    com/sun/xml/internal/ws/api/config/management/policy \
-    com/sun/xml/internal/ws/api/databinding \
-    com/sun/xml/internal/ws/api/fastinfoset \
-    com/sun/xml/internal/ws/api/ha \
-    com/sun/xml/internal/ws/api/handler \
-    com/sun/xml/internal/ws/api/message \
-    com/sun/xml/internal/ws/api/message/saaj \
-    com/sun/xml/internal/ws/api/message/stream \
-    com/sun/xml/internal/ws/api/model \
-    com/sun/xml/internal/ws/api/model/soap \
-    com/sun/xml/internal/ws/api/model/wsdl \
-    com/sun/xml/internal/ws/api/pipe \
-    com/sun/xml/internal/ws/api/pipe/helper \
-    com/sun/xml/internal/ws/api/policy \
-    com/sun/xml/internal/ws/api/policy/subject \
-    com/sun/xml/internal/ws/api/server \
-    com/sun/xml/internal/ws/api/streaming \
-    com/sun/xml/internal/ws/api/wsdl/parser \
-    com/sun/xml/internal/ws/api/wsdl/writer \
-    com/sun/xml/internal/ws/binding \
-    com/sun/xml/internal/ws/client \
-    com/sun/xml/internal/ws/client/dispatch \
-    com/sun/xml/internal/ws/client/sei \
-    com/sun/xml/internal/ws/config/management/policy \
-    com/sun/xml/internal/ws/db \
-    com/sun/xml/internal/ws/db/glassfish \
-    com/sun/xml/internal/ws/developer \
-    com/sun/xml/internal/ws/encoding \
-    com/sun/xml/internal/ws/encoding/fastinfoset \
-    com/sun/xml/internal/ws/encoding/policy \
-    com/sun/xml/internal/ws/encoding/soap \
-    com/sun/xml/internal/ws/encoding/soap/streaming \
-    com/sun/xml/internal/ws/encoding/xml \
-    com/sun/xml/internal/ws/fault \
-    com/sun/xml/internal/ws/handler \
-    com/sun/xml/internal/ws/message \
-    com/sun/xml/internal/ws/message/jaxb \
-    com/sun/xml/internal/ws/message/saaj \
-    com/sun/xml/internal/ws/message/source \
-    com/sun/xml/internal/ws/message/stream \
-    com/sun/xml/internal/ws/model \
-    com/sun/xml/internal/ws/model/soap \
-    com/sun/xml/internal/ws/model/wsdl \
-    com/sun/xml/internal/ws/org/objectweb/asm \
-    com/sun/xml/internal/ws/policy \
-    com/sun/xml/internal/ws/policy/jaxws \
-    com/sun/xml/internal/ws/policy/jaxws/spi \
-    com/sun/xml/internal/ws/policy/privateutil \
-    com/sun/xml/internal/ws/policy/sourcemodel \
-    com/sun/xml/internal/ws/policy/sourcemodel/attach \
-    com/sun/xml/internal/ws/policy/sourcemodel/wspolicy \
-    com/sun/xml/internal/ws/policy/spi \
-    com/sun/xml/internal/ws/policy/subject \
-    com/sun/xml/internal/ws/protocol/soap \
-    com/sun/xml/internal/ws/protocol/xml \
-    com/sun/xml/internal/ws/resources \
-    com/sun/xml/internal/ws/server \
-    com/sun/xml/internal/ws/server/provider \
-    com/sun/xml/internal/ws/server/sei \
-    com/sun/xml/internal/ws/spi \
-    com/sun/xml/internal/ws/spi/db \
-    com/sun/xml/internal/ws/streaming \
-    com/sun/xml/internal/ws/transport \
-    com/sun/xml/internal/ws/transport/http \
-    com/sun/xml/internal/ws/transport/http/client \
-    com/sun/xml/internal/ws/transport/http/server \
-    com/sun/xml/internal/ws/util \
-    com/sun/xml/internal/ws/util/exception \
-    com/sun/xml/internal/ws/util/localization \
-    com/sun/xml/internal/ws/util/pipe \
-    com/sun/xml/internal/ws/util/xml \
-    com/sun/xml/internal/ws/wsdl \
-    com/sun/xml/internal/ws/wsdl/parser \
-    com/sun/xml/internal/ws/wsdl/writer \
-    com/sun/xml/internal/ws/wsdl/writer/document \
-    com/sun/xml/internal/ws/wsdl/writer/document/http \
-    com/sun/xml/internal/ws/wsdl/writer/document/soap \
-    com/sun/xml/internal/ws/wsdl/writer/document/soap12 \
-    com/sun/xml/internal/ws/wsdl/writer/document/xsd \
+    com/sun/xml/internal/ws \
     java/applet \
     java/awt \
-    java/awt/color \
-    java/awt/datatransfer \
-    java/awt/dnd \
-    java/awt/dnd/peer \
-    java/awt/event \
-    java/awt/font \
-    java/awt/geom \
-    java/awt/im \
-    java/awt/im/spi \
-    java/awt/image \
-    java/awt/image/renderable \
-    java/awt/peer \
-    java/awt/print \
     java/beans \
     javax/accessibility \
     javax/activation \
     javax/activity \
     javax/imageio \
-    javax/imageio/event \
-    javax/imageio/metadata \
-    javax/imageio/plugins/bmp \
-    javax/imageio/plugins/jpeg \
-    javax/imageio/spi \
-    javax/imageio/stream \
     javax/jws \
-    javax/jws/soap \
     javax/print \
-    javax/print/attribute \
-    javax/print/attribute/standard \
-    javax/print/event \
     javax/rmi/CORBA \
-    javax/sound/midi \
-    javax/sound/midi/spi \
-    javax/sound/sampled \
-    javax/sound/sampled/spi \
+    javax/sound \
     javax/swing \
-    javax/swing/border \
-    javax/swing/colorchooser \
-    javax/swing/event \
-    javax/swing/filechooser \
-    javax/swing/plaf \
-    javax/swing/plaf/basic \
-    javax/swing/plaf/metal \
-    javax/swing/plaf/multi \
-    javax/swing/plaf/nimbus \
-    javax/swing/plaf/synth \
-    javax/swing/table \
-    javax/swing/text \
-    javax/swing/text/html \
-    javax/swing/text/html/parser \
-    javax/swing/text/rtf \
-    javax/swing/tree \
-    javax/swing/undo \
     javax/xml/bind \
-    javax/xml/bind/annotation \
-    javax/xml/bind/annotation/adapters \
-    javax/xml/bind/attachment \
-    javax/xml/bind/helpers \
-    javax/xml/bind/util \
     javax/xml/soap \
     javax/xml/ws \
-    javax/xml/ws/handler \
-    javax/xml/ws/handler/soap \
-    javax/xml/ws/http \
-    javax/xml/ws/soap \
-    javax/xml/ws/spi \
-    javax/xml/ws/spi/http \
-    javax/xml/ws/wsaddressing \
-    org/omg/CORBA \
-    org/omg/CORBA/DynAnyPackage \
-    org/omg/CORBA/ORBPackage \
-    org/omg/CORBA/TypeCodePackage \
-    org/omg/CORBA/portable \
-    org/omg/CORBA_2_3 \
-    org/omg/CORBA_2_3/portable \
-    org/omg/CosNaming \
-    org/omg/CosNaming/NamingContextExtPackage \
-    org/omg/CosNaming/NamingContextPackage \
-    org/omg/Dynamic \
-    org/omg/DynamicAny \
-    org/omg/DynamicAny/DynAnyFactoryPackage \
-    org/omg/DynamicAny/DynAnyPackage \
-    org/omg/IOP \
-    org/omg/IOP/CodecFactoryPackage \
-    org/omg/IOP/CodecPackage \
-    org/omg/Messaging \
-    org/omg/PortableInterceptor \
-    org/omg/PortableInterceptor/ORBInitInfoPackage \
-    org/omg/PortableServer \
-    org/omg/PortableServer/CurrentPackage \
-    org/omg/PortableServer/POAManagerPackage \
-    org/omg/PortableServer/POAPackage \
-    org/omg/PortableServer/ServantLocatorPackage \
-    org/omg/PortableServer/portable \
-    org/omg/SendingContext \
-    org/omg/stub/java/rmi \
-    org/omg/stub/javax/management/remote/rmi \
+    org/omg \
     sun/applet \
-    sun/applet/resources \
     sun/audio \
     sun/awt \
-    sun/awt/X11 \
-    sun/awt/datatransfer \
-    sun/awt/dnd \
-    sun/awt/event \
-    sun/awt/geom \
-    sun/awt/im \
-    sun/awt/image \
-    sun/awt/image/codec \
-    sun/awt/motif \
-    sun/awt/resources \
-    sun/awt/shell \
-    sun/awt/util \
-    sun/awt/windows \
-    sun/beans/editors \
-    sun/beans/infos \
     sun/corba \
     sun/dc \
-    sun/dc/path \
-    sun/dc/pr \
     sun/font \
     sun/java2d \
-    sun/java2d/cmm \
-    sun/java2d/cmm/kcms \
-    sun/java2d/cmm/lcms \
-    sun/java2d/jules \
-    sun/java2d/loops \
-    sun/java2d/opengl \
-    sun/java2d/pipe \
-    sun/java2d/pipe/hw \
-    sun/java2d/pisces \
-    sun/java2d/x11 \
-    sun/java2d/xr \
     sun/net/ftp \
-    sun/net/ftp/impl \
     sun/net/smtp \
     sun/net/www/content/audio \
     sun/net/www/content/image \
@@ -887,27 +226,26 @@
     sun/net/www/protocol/mailto \
     sun/net/www/protocol/netdoc \
     sun/print \
-    sun/print/resources \
     sun/security/tools/policytool \
     sun/swing \
-    sun/swing/icon \
-    sun/swing/plaf \
-    sun/swing/plaf/synth \
-    sun/swing/plaf/windows \
-    sun/swing/table \
-    sun/swing/text \
-    sun/swing/text/html \
-    sun/tools/jar \
-    sun/tools/jar/resources
+    sun/tools/jar
 
-PROFILE_4_RTJAR_INCLUDE_TYPES := \
-    com/sun/xml/internal/ws/*.class \
+FULL_JRE_RTJAR_INCLUDE_TYPES := \
+    com/sun/security/auth/callback/DialogCallbackHandler$$1.class \
+    com/sun/security/auth/callback/DialogCallbackHandler$$2.class \
+    com/sun/security/auth/callback/DialogCallbackHandler$$Action.class \
+    com/sun/security/auth/callback/DialogCallbackHandler$$ConfirmationInfo.class \
+    com/sun/security/auth/callback/DialogCallbackHandler.class \
     javax/annotation/*.class \
+    javax/management/remote/rmi/_RMIConnectionImpl_Tie.class \
+    javax/management/remote/rmi/_RMIConnection_Stub.class \
+    javax/management/remote/rmi/_RMIServerImpl_Tie.class \
+    javax/management/remote/rmi/_RMIServer_Stub.class \
     javax/rmi/*.class
 
-PROFILE_4_RTJAR_EXCLUDE_TYPES := 
+FULL_JRE_RTJAR_EXCLUDE_TYPES := 
 
-PROFILE_4_INCLUDE_METAINF_SERVICES := \
+FULL_JRE_INCLUDE_METAINF_SERVICES := \
     META-INF/services/com.sun.tools.internal.ws.wscompile.Plugin  \
     META-INF/services/com.sun.tools.internal.xjc.Plugin  \
     META-INF/services/javax.print.PrintServiceLookup  \
--- a/jdk/src/macosx/classes/com/apple/laf/AquaButtonBorder.java	Tue Apr 02 14:13:13 2013 -0400
+++ b/jdk/src/macosx/classes/com/apple/laf/AquaButtonBorder.java	Tue Apr 02 15:31:24 2013 -0700
@@ -83,14 +83,19 @@
         painter.state.set(state);
         painter.state.set((state != State.DISABLED && state != State.INACTIVE) && b.isFocusPainted() && isFocused(b) ? Focused.YES : Focused.NO);
 
+        // Full border size of the component.
+        // g.setColor(new Color(0, 255, 0, 70));
+        // g.drawRect(x, y, width - 1, height - 1);
+
         final Insets subInsets = sizeVariant.insets;
         x += subInsets.left;
         y += subInsets.top;
         width -= (subInsets.left + subInsets.right);
         height -= (subInsets.top + subInsets.bottom);
 
-//        g.setColor(Color.magenta);
-//        g.drawRect(x, y, width - 1, height - 1);
+        // Where the native border should start to paint.
+        // g.setColor(new Color(255, 0, 255, 70));
+        // g.drawRect(x, y, width - 1, height - 1);
 
         doButtonPaint(b, model, g, x, y, width, height);
     }
--- a/jdk/src/macosx/classes/com/apple/laf/AquaButtonExtendedTypes.java	Tue Apr 02 14:13:13 2013 -0400
+++ b/jdk/src/macosx/classes/com/apple/laf/AquaButtonExtendedTypes.java	Tue Apr 02 15:31:24 2013 -0700
@@ -184,30 +184,30 @@
             new BorderDefinedTypeSpecifier("round", Widget.BUTTON_ROUND, new SizeVariant().alterInsets(2, 0, 0, 0).alterMinSize(28, 28), -3, -3, -3, -3),
             new BorderDefinedTypeSpecifier("texturedRound", Widget.BUTTON_ROUND_INSET, new SizeVariant().alterInsets(0, 0, 0, 0).alterMinSize(26, 26), -2, -2, 0, 0),
 
-            new SegmentedBorderDefinedTypeSpecifier("segmented-first", Widget.BUTTON_SEGMENTED, SegmentPosition.FIRST, new SizeVariant().alterMargins(6, 16, 6, 10).alterInsets(5, 3, 5, 0).alterMinSize(0, 28), 0, -3, 0, -3),
-            new SegmentedBorderDefinedTypeSpecifier("segmented-middle", Widget.BUTTON_SEGMENTED, SegmentPosition.MIDDLE, new SizeVariant().alterMargins(6, 9, 6, 10).alterInsets(5, 0, 5, 0).alterMinSize(0, 28), 0, -3, 0, -3),
-            new SegmentedBorderDefinedTypeSpecifier("segmented-last", Widget.BUTTON_SEGMENTED, SegmentPosition.LAST, new SizeVariant().alterMargins(6, 9, 6, 16).alterInsets(5, 0, 5, 3).alterMinSize(0, 28), 0, -3, 0, -3),
-            new SegmentedBorderDefinedTypeSpecifier("segmented-only", Widget.BUTTON_SEGMENTED, SegmentPosition.ONLY, new SizeVariant().alterMargins(6, 16, 6, 16).alterInsets(5, 3, 5, 3).alterMinSize(34, 28), 0, -3, 0, -3),
+            new SegmentedBorderDefinedTypeSpecifier("segmented-first", Widget.BUTTON_SEGMENTED, SegmentPosition.FIRST, new SizeVariant().alterMargins(6, 16, 6, 10).alterInsets(2, 3, 2, 0).alterMinSize(0, 28), 0, -3, 0, -3),
+            new SegmentedBorderDefinedTypeSpecifier("segmented-middle", Widget.BUTTON_SEGMENTED, SegmentPosition.MIDDLE, new SizeVariant().alterMargins(6, 9, 6, 10).alterInsets(2, 0, 2, 0).alterMinSize(0, 28), 0, -3, 0, -3),
+            new SegmentedBorderDefinedTypeSpecifier("segmented-last", Widget.BUTTON_SEGMENTED, SegmentPosition.LAST, new SizeVariant().alterMargins(6, 9, 6, 16).alterInsets(2, 0, 2, 3).alterMinSize(0, 28), 0, -3, 0, -3),
+            new SegmentedBorderDefinedTypeSpecifier("segmented-only", Widget.BUTTON_SEGMENTED, SegmentPosition.ONLY, new SizeVariant().alterMargins(6, 16, 6, 16).alterInsets(2, 3, 2, 3).alterMinSize(34, 28), 0, -3, 0, -3),
 
-            new SegmentedBorderDefinedTypeSpecifier("segmentedRoundRect-first", Widget.BUTTON_SEGMENTED_INSET, SegmentPosition.FIRST, new SizeVariant().alterMargins(6, 12, 6, 8).alterInsets(5, 2, 5, 0).alterMinSize(0, 28), 0, -3, 0, -3),
-            new SegmentedBorderDefinedTypeSpecifier("segmentedRoundRect-middle", Widget.BUTTON_SEGMENTED_INSET, SegmentPosition.MIDDLE, new SizeVariant().alterMargins(6, 8, 6, 8).alterInsets(5, 0, 5, 0).alterMinSize(0, 28), 0, -3, 0, -3),
-            new SegmentedBorderDefinedTypeSpecifier("segmentedRoundRect-last", Widget.BUTTON_SEGMENTED_INSET, SegmentPosition.LAST, new SizeVariant().alterMargins(6, 8, 6, 12).alterInsets(5, 0, 5, 2).alterMinSize(0, 28), 0, -3, 0, -3),
-            new SegmentedBorderDefinedTypeSpecifier("segmentedRoundRect-only", Widget.BUTTON_SEGMENTED_INSET, SegmentPosition.ONLY, new SizeVariant().alterMargins(6, 12, 6, 12).alterInsets(5, 2, 5, 2).alterMinSize(0, 28), 0, -3, 0, -3),
+            new SegmentedBorderDefinedTypeSpecifier("segmentedRoundRect-first", Widget.BUTTON_SEGMENTED_INSET, SegmentPosition.FIRST, new SizeVariant().alterMargins(6, 12, 6, 8).alterInsets(2, 2, 2, 0).alterMinSize(0, 28), 0, -3, 0, -3),
+            new SegmentedBorderDefinedTypeSpecifier("segmentedRoundRect-middle", Widget.BUTTON_SEGMENTED_INSET, SegmentPosition.MIDDLE, new SizeVariant().alterMargins(6, 8, 6, 8).alterInsets(2, 0, 2, 0).alterMinSize(0, 28), 0, -3, 0, -3),
+            new SegmentedBorderDefinedTypeSpecifier("segmentedRoundRect-last", Widget.BUTTON_SEGMENTED_INSET, SegmentPosition.LAST, new SizeVariant().alterMargins(6, 8, 6, 12).alterInsets(2, 0, 2, 2).alterMinSize(0, 28), 0, -3, 0, -3),
+            new SegmentedBorderDefinedTypeSpecifier("segmentedRoundRect-only", Widget.BUTTON_SEGMENTED_INSET, SegmentPosition.ONLY, new SizeVariant().alterMargins(6, 12, 6, 12).alterInsets(2, 2, 2, 2).alterMinSize(0, 28), 0, -3, 0, -3),
 
-            new SegmentedBorderDefinedTypeSpecifier("segmentedTexturedRounded-first", Widget.BUTTON_SEGMENTED_SCURVE, SegmentPosition.FIRST, new SizeVariant().alterMargins(6, 12, 6, 8).alterInsets(5, 2, 5, 0).alterMinSize(0, 28), 0, -3, 0, -3),
-            new SegmentedBorderDefinedTypeSpecifier("segmentedTexturedRounded-middle", Widget.BUTTON_SEGMENTED_SCURVE, SegmentPosition.MIDDLE, new SizeVariant().alterMargins(6, 8, 6, 8).alterInsets(5, 0, 5, 0).alterMinSize(0, 28), 0, -3, 0, -3),
-            new SegmentedBorderDefinedTypeSpecifier("segmentedTexturedRounded-last", Widget.BUTTON_SEGMENTED_SCURVE, SegmentPosition.LAST, new SizeVariant().alterMargins(6, 8, 6, 12).alterInsets(5, 0, 5, 2).alterMinSize(0, 28), 0, -3, 0, -3),
-            new SegmentedBorderDefinedTypeSpecifier("segmentedTexturedRounded-only", Widget.BUTTON_SEGMENTED_SCURVE, SegmentPosition.ONLY, new SizeVariant().alterMargins(6, 12, 6, 12).alterInsets(5, 2, 5, 2).alterMinSize(0, 28), 0, -3, 0, -3),
+            new SegmentedBorderDefinedTypeSpecifier("segmentedTexturedRounded-first", Widget.BUTTON_SEGMENTED_SCURVE, SegmentPosition.FIRST, new SizeVariant().alterMargins(6, 12, 6, 8).alterInsets(2, 2, 2, 0).alterMinSize(0, 28), 0, -3, 0, -3),
+            new SegmentedBorderDefinedTypeSpecifier("segmentedTexturedRounded-middle", Widget.BUTTON_SEGMENTED_SCURVE, SegmentPosition.MIDDLE, new SizeVariant().alterMargins(6, 8, 6, 8).alterInsets(2, 0, 2, 0).alterMinSize(0, 28), 0, -3, 0, -3),
+            new SegmentedBorderDefinedTypeSpecifier("segmentedTexturedRounded-last", Widget.BUTTON_SEGMENTED_SCURVE, SegmentPosition.LAST, new SizeVariant().alterMargins(6, 8, 6, 12).alterInsets(2, 0, 2, 2).alterMinSize(0, 28), 0, -3, 0, -3),
+            new SegmentedBorderDefinedTypeSpecifier("segmentedTexturedRounded-only", Widget.BUTTON_SEGMENTED_SCURVE, SegmentPosition.ONLY, new SizeVariant().alterMargins(6, 12, 6, 12).alterInsets(2, 2, 2, 2).alterMinSize(0, 28), 0, -3, 0, -3),
 
-            new SegmentedBorderDefinedTypeSpecifier("segmentedTextured-first", Widget.BUTTON_SEGMENTED_TEXTURED, SegmentPosition.FIRST, new SizeVariant().alterMargins(6, 12, 6, 8).alterInsets(6, 3, 6, 0).alterMinSize(0, 28), 0, -3, 0, -3),
-            new SegmentedBorderDefinedTypeSpecifier("segmentedTextured-middle", Widget.BUTTON_SEGMENTED_TEXTURED, SegmentPosition.MIDDLE, new SizeVariant().alterMargins(6, 8, 6, 8).alterInsets(6, 0, 6, 0).alterMinSize(0, 28), 0, -3, 0, -3),
-            new SegmentedBorderDefinedTypeSpecifier("segmentedTextured-last", Widget.BUTTON_SEGMENTED_TEXTURED, SegmentPosition.LAST, new SizeVariant().alterMargins(6, 8, 6, 12).alterInsets(6, 0, 6, 3).alterMinSize(0, 28), 0, -3, 0, -3),
-            new SegmentedBorderDefinedTypeSpecifier("segmentedTextured-only", Widget.BUTTON_SEGMENTED_TEXTURED, SegmentPosition.ONLY, new SizeVariant().alterMargins(6, 12, 6, 12).alterInsets(6, 3, 6, 3).alterMinSize(0, 28), 0, -3, 0, -3),
+            new SegmentedBorderDefinedTypeSpecifier("segmentedTextured-first", Widget.BUTTON_SEGMENTED_TEXTURED, SegmentPosition.FIRST, new SizeVariant().alterMargins(6, 12, 6, 8).alterInsets(2, 3, 2, 0).alterMinSize(0, 28), 0, -3, 0, -3),
+            new SegmentedBorderDefinedTypeSpecifier("segmentedTextured-middle", Widget.BUTTON_SEGMENTED_TEXTURED, SegmentPosition.MIDDLE, new SizeVariant().alterMargins(6, 8, 6, 8).alterInsets(2, 0, 2, 0).alterMinSize(0, 28), 0, -3, 0, -3),
+            new SegmentedBorderDefinedTypeSpecifier("segmentedTextured-last", Widget.BUTTON_SEGMENTED_TEXTURED, SegmentPosition.LAST, new SizeVariant().alterMargins(6, 8, 6, 12).alterInsets(2, 0, 2, 3).alterMinSize(0, 28), 0, -3, 0, -3),
+            new SegmentedBorderDefinedTypeSpecifier("segmentedTextured-only", Widget.BUTTON_SEGMENTED_TEXTURED, SegmentPosition.ONLY, new SizeVariant().alterMargins(6, 12, 6, 12).alterInsets(2, 3, 2, 3).alterMinSize(0, 28), 0, -3, 0, -3),
 
-            new SegmentedBorderDefinedTypeSpecifier("segmentedCapsule-first", Widget.BUTTON_SEGMENTED_TOOLBAR, SegmentPosition.FIRST, new SizeVariant().alterMargins(6, 12, 6, 8).alterInsets(5, 2, 5, 0).alterMinSize(0, 28), 0, 0, 0, 0),
-            new SegmentedBorderDefinedTypeSpecifier("segmentedCapsule-middle", Widget.BUTTON_SEGMENTED_TOOLBAR, SegmentPosition.MIDDLE, new SizeVariant().alterMargins(6, 8, 6, 8).alterInsets(5, 0, 5, 0).alterMinSize(0, 28), 0, 0, 0, 0),
-            new SegmentedBorderDefinedTypeSpecifier("segmentedCapsule-last", Widget.BUTTON_SEGMENTED_TOOLBAR, SegmentPosition.LAST, new SizeVariant().alterMargins(6, 8, 6, 12).alterInsets(5, 0, 5, 2).alterMinSize(0, 28), 0, 0, 0, 0),
-            new SegmentedBorderDefinedTypeSpecifier("segmentedCapsule-only", Widget.BUTTON_SEGMENTED_TOOLBAR, SegmentPosition.ONLY, new SizeVariant().alterMargins(6, 12, 6, 12).alterInsets(5, 2, 5, 2).alterMinSize(34, 28), 0, 0, 0, 0),
+            new SegmentedBorderDefinedTypeSpecifier("segmentedCapsule-first", Widget.BUTTON_SEGMENTED_TOOLBAR, SegmentPosition.FIRST, new SizeVariant().alterMargins(6, 12, 6, 8).alterInsets(2, 2, 2, 0).alterMinSize(0, 28), 0, 0, 0, 0),
+            new SegmentedBorderDefinedTypeSpecifier("segmentedCapsule-middle", Widget.BUTTON_SEGMENTED_TOOLBAR, SegmentPosition.MIDDLE, new SizeVariant().alterMargins(6, 8, 6, 8).alterInsets(2, 0, 2, 0).alterMinSize(0, 28), 0, 0, 0, 0),
+            new SegmentedBorderDefinedTypeSpecifier("segmentedCapsule-last", Widget.BUTTON_SEGMENTED_TOOLBAR, SegmentPosition.LAST, new SizeVariant().alterMargins(6, 8, 6, 12).alterInsets(2, 0, 2, 2).alterMinSize(0, 28), 0, 0, 0, 0),
+            new SegmentedBorderDefinedTypeSpecifier("segmentedCapsule-only", Widget.BUTTON_SEGMENTED_TOOLBAR, SegmentPosition.ONLY, new SizeVariant().alterMargins(6, 12, 6, 12).alterInsets(2, 2, 2, 2).alterMinSize(34, 28), 0, 0, 0, 0),
 
             new BorderDefinedTypeSpecifier("segmentedGradient-first", Widget.BUTTON_BEVEL_INSET, new SizeVariant(18, 18).alterMargins(4, 5, 4, 5).replaceInsets(new Insets(-2,-0,-2,-0))),
             new BorderDefinedTypeSpecifier("segmentedGradient-middle", Widget.BUTTON_BEVEL_INSET, new SizeVariant(18, 18).alterMargins(4, 5, 4, 5).replaceInsets(new Insets(-2,-1,-2,-0))),
--- a/jdk/src/macosx/classes/sun/util/locale/provider/HostLocaleProviderAdapterImpl.java	Tue Apr 02 14:13:13 2013 -0400
+++ b/jdk/src/macosx/classes/sun/util/locale/provider/HostLocaleProviderAdapterImpl.java	Tue Apr 02 15:31:24 2013 -0700
@@ -32,11 +32,13 @@
 import java.text.spi.DecimalFormatSymbolsProvider;
 import java.text.spi.NumberFormatProvider;
 import java.util.Collections;
+import java.util.Calendar;
 import java.util.HashSet;
 import java.util.Locale;
 import java.util.Map;
 import java.util.ResourceBundle.Control;
 import java.util.Set;
+import java.util.TimeZone;
 import java.util.concurrent.ConcurrentHashMap;
 import java.util.concurrent.ConcurrentMap;
 import java.util.concurrent.atomic.AtomicReferenceArray;
@@ -45,6 +47,7 @@
 import java.util.spi.CurrencyNameProvider;
 import java.util.spi.LocaleNameProvider;
 import java.util.spi.TimeZoneNameProvider;
+import sun.util.spi.CalendarProvider;
 
 /**
  * LocaleProviderAdapter implementation for the Mac OS X locale data
@@ -94,17 +97,56 @@
 
     private static final Set<Locale> supportedLocaleSet;
     static {
-        Set<Locale> tmpSet = new HashSet<Locale>();
+        Set<Locale> tmpSet = new HashSet<>();
         // Assuming the default locales do not include any extensions, so
         // no stripping is needed here.
-        Locale l = Locale.forLanguageTag(getDefaultLocale(CAT_FORMAT).replaceAll("_","-"));
+        Locale l = convertMacOSXLocaleToJavaLocale(getDefaultLocale(CAT_FORMAT));
         tmpSet.addAll(Control.getNoFallbackControl(Control.FORMAT_DEFAULT).getCandidateLocales("", l));
-        l = Locale.forLanguageTag(getDefaultLocale(CAT_DISPLAY).replaceAll("_","-"));
+        l = convertMacOSXLocaleToJavaLocale(getDefaultLocale(CAT_DISPLAY));
         tmpSet.addAll(Control.getNoFallbackControl(Control.FORMAT_DEFAULT).getCandidateLocales("", l));
         supportedLocaleSet = Collections.unmodifiableSet(tmpSet);
     }
     private final static Locale[] supportedLocale = supportedLocaleSet.toArray(new Locale[0]);
 
+    @SuppressWarnings("fallthrough")
+    private static Locale convertMacOSXLocaleToJavaLocale(String macosxloc) {
+        // MacOSX may return ICU notation, here is the quote from CFLocale doc:
+        // "The corresponding value is a CFString containing the POSIX locale
+        // identifier as used by ICU, such as "ja_JP". If you have a variant
+        // locale or a different currency or calendar, it can be as complex as
+        // "en_US_POSIX@calendar=japanese;currency=EUR" or
+        // "az_Cyrl_AZ@calendar=buddhist;currency=JPY".
+        String[] tmp = macosxloc.split("@");
+        String langTag = tmp[0].replace('_', '-');
+        if (tmp.length > 1) {
+            String[] ext = tmp[1].split(";");
+            for (String keyval : ext) {
+                // We are only interested in "calendar" value for now.
+                if (keyval.startsWith("calendar=")) {
+                    String calid = keyval.substring(keyval.indexOf('=')+1);
+                    switch (calid) {
+                        case "gregorian":
+                            langTag += "-u-ca-gregory";
+                            break;
+                        case "japanese":
+                            // Tweak for ja_JP_JP
+                            if (tmp[0].equals("ja_JP")) {
+                                return JRELocaleConstants.JA_JP_JP;
+                            }
+
+                            // fall through
+
+                        default:
+                            langTag += "-u-ca-" + calid;
+                            break;
+                    }
+                }
+            }
+        }
+
+        return Locale.forLanguageTag(langTag);
+    }
+
     public static DateFormatProvider getDateFormatProvider() {
         return new DateFormatProvider() {
 
@@ -170,9 +212,8 @@
                 if (isSupportedLocale(Locale.getDefault(Locale.Category.FORMAT))) {
                     return supportedLocale;
                 }
-
-                        return new Locale[0];
-                    }
+                return new Locale[0];
+            }
 
             @Override
             public boolean isSupportedLocale(Locale locale) {
@@ -362,6 +403,30 @@
         };
     }
 
+    public static CalendarProvider getCalendarProvider() {
+        return new CalendarProvider() {
+            @Override
+            public Locale[] getAvailableLocales() {
+                return getSupportedCalendarLocales();
+            }
+
+            @Override
+            public boolean isSupportedLocale(Locale locale) {
+                return isSupportedCalendarLocale(locale);
+            }
+
+            @Override
+            public Calendar getInstance(TimeZone zone, Locale locale) {
+                return new Calendar.Builder()
+                             .setLocale(locale)
+                             .setCalendarType(getCalendarID(locale.toLanguageTag()))
+                             .setTimeZone(zone)
+                             .setInstant(System.currentTimeMillis())
+                             .build();
+            }
+        };
+    }
+
     public static CurrencyNameProvider getCurrencyNameProvider() {
         return new CurrencyNameProvider() {
             @Override
@@ -455,23 +520,20 @@
     }
 
     private static boolean isSupportedCalendarLocale(Locale locale) {
-        // special case for ja_JP_JP
-        if (JRELocaleConstants.JA_JP_JP.equals(locale)) {
-            return isJapaneseCalendar();
-        }
-
         Locale base = locale.stripExtensions();
         if (!supportedLocaleSet.contains(base)) {
             return false;
         }
 
-        String caltype = locale.getUnicodeLocaleType("ca");
-        if (caltype == null) {
-            return true;
+        String requestedCalType = locale.getUnicodeLocaleType("ca");
+        String nativeCalType =
+            getCalendarID(locale.toLanguageTag()).replaceFirst("gregorian", "gregory");
+
+        if (requestedCalType == null) {
+            return Calendar.getAvailableCalendarTypes().contains(nativeCalType);
+        } else {
+            return requestedCalType.equals(nativeCalType);
         }
-
-        return caltype.replaceFirst("gregory", "gregorian").equals(
-                getCalendarID(locale.toLanguageTag()));
     }
 
     private static boolean isJapaneseCalendar() {
@@ -479,18 +541,15 @@
     }
 
     private static Locale getCalendarLocale(Locale locale) {
-        Locale.Builder lb = new Locale.Builder().setLocale(locale);
-        String calid = getCalendarID(locale.toLanguageTag());
-        switch (calid) {
-            case "gregorian":
-                calid = "gregory";
-                // FALL THROUGH!
-            case "japanese":
-            case "buddhist":
-                lb.setUnicodeLocaleKeyword("ca", calid);
-                return lb.build();
-            default:
-                return locale;
+        String nativeCalType = getCalendarID(locale.toLanguageTag())
+                     .replaceFirst("gregorian", "gregory");
+        if (Calendar.getAvailableCalendarTypes().contains(nativeCalType)) {
+            return new Locale.Builder()
+                           .setLocale(locale)
+                           .setUnicodeLocaleKeyword("ca", nativeCalType)
+                           .build();
+        } else {
+            return locale;
         }
     }
 
--- a/jdk/src/macosx/native/sun/awt/CGraphicsDevice.m	Tue Apr 02 14:13:13 2013 -0400
+++ b/jdk/src/macosx/native/sun/awt/CGraphicsDevice.m	Tue Apr 02 15:31:24 2013 -0700
@@ -49,6 +49,42 @@
     return 0;
 }
 
+static BOOL isValidDisplayMode(CGDisplayModeRef mode){
+    return (1 < CGDisplayModeGetWidth(mode) && 1 < CGDisplayModeGetHeight(mode));
+}
+
+static CFMutableArrayRef getAllValidDisplayModes(jint displayID){
+    CFArrayRef allModes = CGDisplayCopyAllDisplayModes(displayID, NULL);
+
+    CFIndex numModes = CFArrayGetCount(allModes);
+    CFMutableArrayRef validModes = CFArrayCreateMutable(kCFAllocatorDefault, numModes + 1, NULL);
+
+    CFIndex n;
+    for (n=0; n < numModes; n++) {
+        CGDisplayModeRef cRef = (CGDisplayModeRef) CFArrayGetValueAtIndex(allModes, n);
+        if (cRef != NULL && isValidDisplayMode(cRef)) {
+            CFArrayAppendValue(validModes, cRef);
+        }
+    }
+
+    CGDisplayModeRef currentMode = CGDisplayCopyDisplayMode(displayID);
+
+    BOOL containsCurrentMode = NO;
+    numModes = CFArrayGetCount(validModes);
+    for (n=0; n < numModes; n++) {
+        if(CFArrayGetValueAtIndex(validModes, n) == currentMode){
+            containsCurrentMode = YES;
+            break;
+        }
+    }
+
+    if (!containsCurrentMode) {
+        CFArrayAppendValue(validModes, currentMode);
+    }
+
+    return validModes;
+}
+
 /*
  * Find the best possible match in the list of display modes that we can switch to based on
  * the provided parameters.
@@ -198,28 +234,30 @@
 (JNIEnv *env, jclass class, jint displayID, jint w, jint h, jint bpp, jint refrate)
 {
     JNF_COCOA_ENTER(env);
-    CFArrayRef allModes = CGDisplayCopyAllDisplayModes(displayID, NULL);
+    CFArrayRef allModes = getAllValidDisplayModes(displayID);
+
     CGDisplayModeRef closestMatch = getBestModeForParameters(allModes, (int)w, (int)h, (int)bpp, (int)refrate);
+    __block CGError retCode = kCGErrorSuccess;
     if (closestMatch != NULL) {
         [JNFRunLoop performOnMainThreadWaiting:YES withBlock:^(){
             CGDisplayConfigRef config;
-            CGError retCode = CGBeginDisplayConfiguration(&config);
+            retCode = CGBeginDisplayConfiguration(&config);
             if (retCode == kCGErrorSuccess) {
                 CGConfigureDisplayWithDisplayMode(config, displayID, closestMatch, NULL);
-                CGCompleteDisplayConfiguration(config, kCGConfigureForAppOnly);
-                if (config != NULL) {
-                    CFRelease(config);
-                }
+                retCode = CGCompleteDisplayConfiguration(config, kCGConfigureForAppOnly);
             }
         }];
     } else {
         [JNFException raise:env as:kIllegalArgumentException reason:"Invalid display mode"];
     }
 
+    if (retCode != kCGErrorSuccess){
+        [JNFException raise:env as:kIllegalArgumentException reason:"Unable to set display mode!"];
+    }    
+
     CFRelease(allModes);
     JNF_COCOA_EXIT(env);
 }
-
 /*
  * Class:     sun_awt_CGraphicsDevice
  * Method:    nativeGetDisplayMode
@@ -247,7 +285,8 @@
 {
     jobjectArray jreturnArray = NULL;
     JNF_COCOA_ENTER(env);
-    CFArrayRef allModes = CGDisplayCopyAllDisplayModes(displayID, NULL);
+    CFArrayRef allModes = getAllValidDisplayModes(displayID);
+
     CFIndex numModes = CFArrayGetCount(allModes);
     static JNF_CLASS_CACHE(jc_DisplayMode, "java/awt/DisplayMode");
 
--- a/jdk/src/share/classes/com/sun/security/auth/module/JndiLoginModule.java	Tue Apr 02 14:13:13 2013 -0400
+++ b/jdk/src/share/classes/com/sun/security/auth/module/JndiLoginModule.java	Tue Apr 02 15:31:24 2013 -0700
@@ -32,8 +32,11 @@
 import javax.naming.*;
 import javax.naming.directory.*;
 
+import java.security.AccessController;
+import java.security.PrivilegedAction;
 import java.util.Map;
 import java.util.LinkedList;
+import java.util.ResourceBundle;
 
 import com.sun.security.auth.UnixPrincipal;
 import com.sun.security.auth.UnixNumericUserPrincipal;
@@ -150,8 +153,14 @@
  */
 public class JndiLoginModule implements LoginModule {
 
-    static final java.util.ResourceBundle rb =
-        java.util.ResourceBundle.getBundle("sun.security.util.AuthResources");
+    private static final ResourceBundle rb = AccessController.doPrivileged(
+            new PrivilegedAction<ResourceBundle>() {
+                public ResourceBundle run() {
+                    return ResourceBundle.getBundle(
+                            "sun.security.util.AuthResources");
+                }
+            }
+    );
 
     /** JNDI Provider */
     public final String USER_PROVIDER = "user.provider.url";
--- a/jdk/src/share/classes/com/sun/security/auth/module/KeyStoreLoginModule.java	Tue Apr 02 14:13:13 2013 -0400
+++ b/jdk/src/share/classes/com/sun/security/auth/module/KeyStoreLoginModule.java	Tue Apr 02 15:31:24 2013 -0700
@@ -30,22 +30,11 @@
 import java.io.InputStream;
 import java.net.MalformedURLException;
 import java.net.URL;
-import java.security.AuthProvider;
-import java.security.GeneralSecurityException;
-import java.security.Key;
-import java.security.KeyStore;
-import java.security.KeyStoreException;
-import java.security.NoSuchAlgorithmException;
-import java.security.NoSuchProviderException;
-import java.security.PrivateKey;
-import java.security.Provider;
-import java.security.UnrecoverableKeyException;
+import java.security.*;
 import java.security.cert.*;
+import java.security.cert.Certificate;
 import java.security.cert.X509Certificate;
-import java.util.Arrays;
-import java.util.Iterator;
-import java.util.LinkedList;
-import java.util.Map;
+import java.util.*;
 import javax.security.auth.Destroyable;
 import javax.security.auth.DestroyFailedException;
 import javax.security.auth.Subject;
@@ -123,8 +112,14 @@
  */
 public class KeyStoreLoginModule implements LoginModule {
 
-   static final java.util.ResourceBundle rb =
-        java.util.ResourceBundle.getBundle("sun.security.util.AuthResources");
+    private static final ResourceBundle rb = AccessController.doPrivileged(
+            new PrivilegedAction<ResourceBundle>() {
+                public ResourceBundle run() {
+                    return ResourceBundle.getBundle(
+                            "sun.security.util.AuthResources");
+                }
+            }
+    );
 
     /* -- Fields -- */
 
--- a/jdk/src/share/classes/com/sun/security/auth/module/Krb5LoginModule.java	Tue Apr 02 14:13:13 2013 -0400
+++ b/jdk/src/share/classes/com/sun/security/auth/module/Krb5LoginModule.java	Tue Apr 02 15:31:24 2013 -0700
@@ -27,6 +27,8 @@
 package com.sun.security.auth.module;
 
 import java.io.*;
+import java.security.AccessController;
+import java.security.PrivilegedAction;
 import java.text.MessageFormat;
 import java.util.*;
 
@@ -429,8 +431,14 @@
 
     private static final String NAME = "javax.security.auth.login.name";
     private static final String PWD = "javax.security.auth.login.password";
-    static final java.util.ResourceBundle rb =
-        java.util.ResourceBundle.getBundle("sun.security.util.AuthResources");
+    private static final ResourceBundle rb = AccessController.doPrivileged(
+            new PrivilegedAction<ResourceBundle>() {
+                public ResourceBundle run() {
+                    return ResourceBundle.getBundle(
+                            "sun.security.util.AuthResources");
+                }
+            }
+    );
 
     /**
      * Initialize this <code>LoginModule</code>.
--- a/jdk/src/share/classes/com/sun/servicetag/BrowserSupport.java	Tue Apr 02 14:13:13 2013 -0400
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,176 +0,0 @@
-/*
- * Copyright (c) 2008, 2011, 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 com.sun.servicetag;
-
-import java.lang.reflect.Field;
-import java.lang.reflect.Method;
-import java.lang.reflect.InvocationTargetException;
-import java.io.IOException;
-import java.net.URI;
-
-/**
- * BrowserSupport class.
- *
- * The implementation of the com.sun.servicetag API needs to be
- * compiled with JDK 5 as well since the consumer of this API
- * may require to support JDK 5 (e.g. NetBeans).
- *
- * The Desktop.browse() method can be backported in this class
- * if needed.  The current implementation only supports JDK 6.
- */
-class BrowserSupport {
-    private static boolean isBrowseSupported = false;
-    private static Method browseMethod = null;
-    private static Object desktop = null;
-    private static volatile Boolean result = false;
-
-
-    private static void initX() {
-        if  (desktop != null) {
-            return;
-        }
-        boolean supported = false;
-        Method browseM = null;
-        Object desktopObj = null;
-        try {
-            // Determine if java.awt.Desktop is supported
-            Class<?> desktopCls = Class.forName("java.awt.Desktop", true, null);
-            Method getDesktopM = desktopCls.getMethod("getDesktop");
-            browseM = desktopCls.getMethod("browse", URI.class);
-
-            Class<?> actionCls = Class.forName("java.awt.Desktop$Action", true, null);
-            final Method isDesktopSupportedMethod = desktopCls.getMethod("isDesktopSupported");
-            Method isSupportedMethod = desktopCls.getMethod("isSupported", actionCls);
-            Field browseField = actionCls.getField("BROWSE");
-            // isDesktopSupported calls getDefaultToolkit which can block
-            // infinitely, see 6636099 for details, to workaround we call
-            // in a  thread and time it out, noting that the issue is specific
-            // to X11, it does not hurt for Windows.
-            Thread xthread = new Thread() {
-                public void run() {
-                    try {
-                        // support only if Desktop.isDesktopSupported() and
-                        // Desktop.isSupported(Desktop.Action.BROWSE) return true.
-                        result = (Boolean) isDesktopSupportedMethod.invoke(null);
-                    } catch (IllegalAccessException e) {
-                        // should never reach here
-                        throw new InternalError("Desktop.getDesktop() method not found", e);
-                    } catch (InvocationTargetException e) {
-                        // browser not supported
-                        if (Util.isVerbose()) {
-                            e.printStackTrace();
-                        }
-                    }
-                }
-            };
-            // set it to daemon, so that the vm will exit.
-            xthread.setDaemon(true);
-            xthread.start();
-            try {
-                xthread.join(5 * 1000);
-            } catch (InterruptedException ie) {
-                // ignore the exception
-            }
-            if (result.booleanValue()) {
-                desktopObj = getDesktopM.invoke(null);
-                result = (Boolean) isSupportedMethod.invoke(desktopObj, browseField.get(null));
-                supported = result.booleanValue();
-            }
-        } catch (IllegalAccessException e) {
-            // should never reach here
-            throw new InternalError("Desktop.getDesktop() method not found", e);
-        } catch (ReflectiveOperationException e) {
-            // browser not supported
-            if (Util.isVerbose()) {
-                e.printStackTrace();
-            }
-        }
-        isBrowseSupported = supported;
-        browseMethod = browseM;
-        desktop = desktopObj;
-    }
-
-    static boolean isSupported() {
-        initX();
-        return isBrowseSupported;
-    }
-
-    /**
-     * Launches the default browser to display a {@code URI}.
-     * If the default browser is not able to handle the specified
-     * {@code URI}, the application registered for handling
-     * {@code URIs} of the specified type is invoked. The application
-     * is determined from the protocol and path of the {@code URI}, as
-     * defined by the {@code URI} class.
-     * <p>
-     * This method calls the Desktop.getDesktop().browse() method.
-     * <p>
-     * @param uri the URI to be displayed in the user default browser
-     *
-     * @throws NullPointerException if {@code uri} is {@code null}
-     * @throws UnsupportedOperationException if the current platform
-     * does not support the {@link Desktop.Action#BROWSE} action
-     * @throws IOException if the user default browser is not found,
-     * or it fails to be launched, or the default handler application
-     * failed to be launched
-     * @throws IllegalArgumentException if the necessary permissions
-     * are not available and the URI can not be converted to a {@code URL}
-     */
-    static void browse(URI uri) throws IOException {
-        if (uri == null) {
-            throw new NullPointerException("null uri");
-        }
-        if (!isSupported()) {
-            throw new UnsupportedOperationException("Browse operation is not supported");
-        }
-
-        // Call Desktop.browse() method
-        try {
-            if (Util.isVerbose()) {
-                System.out.println("desktop: " + desktop + ":browsing..." + uri);
-            }
-            browseMethod.invoke(desktop, uri);
-        } catch (IllegalAccessException e) {
-            // should never reach here
-            throw new InternalError("Desktop.getDesktop() method not found", e);
-        } catch (InvocationTargetException e) {
-            Throwable x = e.getCause();
-            if (x != null) {
-                if (x instanceof UnsupportedOperationException) {
-                    throw (UnsupportedOperationException) x;
-                } else if (x instanceof IllegalArgumentException) {
-                    throw (IllegalArgumentException) x;
-                } else if (x instanceof IOException) {
-                    throw (IOException) x;
-                } else if (x instanceof SecurityException) {
-                    throw (SecurityException) x;
-                } else {
-                    // ignore
-                }
-            }
-        }
-    }
-}
--- a/jdk/src/share/classes/com/sun/servicetag/Installer.java	Tue Apr 02 14:13:13 2013 -0400
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,937 +0,0 @@
-/*
- * Copyright (c) 2008, 2011, 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 com.sun.servicetag;
-
-import java.io.*;
-import java.util.HashSet;
-import java.util.Locale;
-import java.util.Properties;
-import java.util.Set;
-import java.util.List;
-import java.util.ArrayList;
-import static com.sun.servicetag.Util.*;
-
-/**
- * Service Tag Installer for Java SE.
- */
-public class Installer {
-    // System properties for testing
-    private static String SVCTAG_DIR_PATH =
-        "servicetag.dir.path";
-    private static String SVCTAG_ENABLE_REGISTRATION =
-        "servicetag.registration.enabled";
-    private final static String ORACLE = "Oracle";
-    private final static String SUN = "Sun Microsystems";
-    private final static String REGISTRATION_XML = "registration.xml";
-    private final static String SERVICE_TAG_FILE = "servicetag";
-    private final static String REGISTRATION_HTML_NAME = "register";
-
-    private final static Locale[] knownSupportedLocales =
-        new Locale[] { Locale.ENGLISH,
-                       Locale.JAPANESE,
-                       Locale.SIMPLIFIED_CHINESE};
-
-    private final static String javaHome = System.getProperty("java.home");
-    private static File svcTagDir;
-    private static File serviceTagFile;
-    private static File regXmlFile;
-    private static RegistrationData registration;
-    private static boolean supportRegistration;
-    private static String registerHtmlParent;
-    private static Set<Locale> supportedLocales = new HashSet<>();
-    private static Properties svcTagProps = null;
-    private static String[] jreArchs = null;
-    static {
-        String dir = System.getProperty(SVCTAG_DIR_PATH);
-        if (dir == null) {
-            svcTagDir = new File(getJrePath(), "lib" + File.separator + SERVICE_TAG_FILE);
-        } else {
-            svcTagDir = new File(dir);
-        }
-        serviceTagFile = new File(svcTagDir, SERVICE_TAG_FILE);
-        regXmlFile = new File(svcTagDir, REGISTRATION_XML);
-        if (System.getProperty(SVCTAG_ENABLE_REGISTRATION) == null) {
-            supportRegistration = isJdk();
-        } else {
-            supportRegistration = true;
-        }
-    }
-
-    private Installer() {
-    }
-
-    // Implementation of ServiceTag.getJavaServiceTag(String) method
-    static ServiceTag getJavaServiceTag(String source) throws IOException {
-        String vendor = System.getProperty("java.vendor", "");
-        if (!vendor.startsWith(SUN) && !vendor.startsWith(ORACLE)) {
-            // Products bundling this implementation may run on
-            // Mac OS which is not a Sun/Oracle JDK
-            return null;
-        }
-        boolean cleanup = false;
-        try {
-            // Check if we have the swordfish entries for this JRE version
-            if (loadServiceTagProps() == null) {
-                return null;
-            }
-
-            ServiceTag st = getJavaServiceTag();
-            // Check if the service tag created by this bundle owner
-            if (st != null && st.getSource().equals(source)) {
-                // Install the system service tag if supported
-                // stclient may be installed after the service tag creation
-                if (Registry.isSupported()) {
-                    installSystemServiceTag();
-                }
-                return st;
-            }
-
-            // in case any exception thrown during the cleanup
-            cleanup = true;
-
-            // re-create a new one for this bundle owner
-            // first delete the registration data
-            deleteRegistrationData();
-            cleanup = false;
-
-            // create service tag and generate new register.html pages
-            return createServiceTag(source);
-        } finally {
-            if (cleanup) {
-                if (regXmlFile.exists()) {
-                    regXmlFile.delete();
-                }
-                if (serviceTagFile.exists()) {
-                    serviceTagFile.delete();
-                }
-            }
-        }
-    }
-
-    /**
-     * Returns the Java SE registration data located in
-     * the <JRE>/lib/servicetag/registration.xml by default.
-     *
-     * @throws IllegalArgumentException if the registration data
-     *         is of invalid format.
-     */
-    private static synchronized RegistrationData getRegistrationData()
-            throws IOException {
-        if (registration != null) {
-            return registration;
-        }
-        if (regXmlFile.exists()) {
-            try (BufferedInputStream in =
-                    new BufferedInputStream(new FileInputStream(regXmlFile)))
-            {
-                registration = RegistrationData.loadFromXML(in);
-            } catch (IllegalArgumentException ex) {
-                System.err.println("Error: Bad registration data \"" +
-                                    regXmlFile + "\":" + ex.getMessage());
-                throw ex;
-            }
-        } else {
-            registration = new RegistrationData();
-        }
-        return registration;
-    }
-
-    /**
-     * Write the registration data to the registration.xml file.
-     *
-     * The offline registration page has to be regenerated with
-     * the new registration data.
-     *
-     * @throws java.io.IOException
-     */
-    private static synchronized void writeRegistrationXml()
-            throws IOException {
-        if (!svcTagDir.exists()) {
-            // This check is for NetBeans or other products that
-            // bundles this com.sun.servicetag implementation for
-            // pre-6u5 release.
-            if (!svcTagDir.mkdir()) {
-                throw new IOException("Failed to create directory: " + svcTagDir);
-            }
-        }
-
-        // regenerate the new offline registration page
-        deleteRegistrationHtmlPage();
-        getRegistrationHtmlPage();
-
-        try (BufferedOutputStream out =
-                new BufferedOutputStream(new FileOutputStream(regXmlFile)))
-        {
-            getRegistrationData().storeToXML(out);
-        } catch (IllegalArgumentException ex) {
-            System.err.println("Error: Bad registration data \"" +
-                                regXmlFile + "\":" + ex.getMessage());
-            throw ex;
-        }
-    }
-
-    /**
-     * Returns the instance urn(s) stored in the servicetag file
-     * or empty set if file not exists.
-     */
-    private static Set<String> getInstalledURNs() throws IOException {
-        Set<String> urnSet = new HashSet<>();
-        if (serviceTagFile.exists()) {
-            try (BufferedReader in = new BufferedReader(new FileReader(serviceTagFile))) {
-                String urn;
-                while ((urn = in.readLine()) != null) {
-                    urn = urn.trim();
-                    if (urn.length() > 0) {
-                        urnSet.add(urn);
-                    }
-                }
-            }
-        }
-        return urnSet;
-    }
-
-    /**
-     * Return the Java SE service tag(s) if it exists.
-     * Typically only one Java SE service tag but it could have two for
-     * Solaris 32-bit and 64-bit on the same install directory.
-     *
-     * @return the service tag(s) for Java SE
-     */
-    private static ServiceTag[] getJavaServiceTagArray() throws IOException {
-        RegistrationData regData = getRegistrationData();
-        Set<ServiceTag> svcTags = regData.getServiceTags();
-        Set<ServiceTag> result = new HashSet<>();
-
-        Properties props = loadServiceTagProps();
-        String jdkUrn = props.getProperty("servicetag.jdk.urn");
-        String jreUrn = props.getProperty("servicetag.jre.urn");
-        for (ServiceTag st : svcTags) {
-            if (st.getProductURN().equals(jdkUrn) ||
-                st.getProductURN().equals(jreUrn)) {
-                result.add(st);
-            }
-        }
-        return result.toArray(new ServiceTag[0]);
-    }
-
-    /**
-     * Returns the Java SE service tag for this running platform;
-     * or null if not exist.
-     * This method will return the 64-bit service tag if the JDK
-     * supports both 32-bit and 64-bit if already created.
-     */
-    private static ServiceTag getJavaServiceTag() throws IOException {
-        String definedId = getProductDefinedId();
-        for (ServiceTag st : getJavaServiceTagArray()) {
-            if (st.getProductDefinedInstanceID().equals(definedId)) {
-                return st;
-            }
-        }
-        return null;
-    }
-
-    /**
-     * Create a service tag for Java SE and install in the system
-     * service tag registry if supported.
-     *
-     * A registration data <JRE>/lib/servicetag/registration.xml
-     * will be created to storeToXML the XML entry for Java SE service tag.
-     * If the system supports service tags, this method will install
-     * the Java SE service tag in the system service tag registry and
-     * its <tt>instance_urn</tt> will be stored to <JRE>/lib/servicetag/servicetag.
-     *
-     * If <JRE>/lib/servicetag/registration.xml exists but is not installed
-     * in the system service tag registry (i.e. servicetag doesn't exist),
-     * this method will install it as described above.
-     *
-     * If the system supports service tag, stclient will be used
-     * to create the Java SE service tag.
-     *
-     * A Solaris 32-bit and 64-bit JDK will be installed in the same
-     * directory but the registration.xml will have 2 service tags.
-     * The servicetag file will also contain 2 instance_urns for that case.
-     */
-    private static ServiceTag createServiceTag(String svcTagSource)
-            throws IOException {
-        // determine if a new service tag is needed to be created
-        ServiceTag newSvcTag = null;
-        if (getJavaServiceTag() == null) {
-            newSvcTag = newServiceTag(svcTagSource);
-        }
-
-        // Add the new service tag in the registration data
-        if (newSvcTag != null) {
-            RegistrationData regData = getRegistrationData();
-
-            // Add the service tag to the registration data in JDK/JRE
-            newSvcTag = regData.addServiceTag(newSvcTag);
-
-            // add if there is a service tag for the OS
-            ServiceTag osTag = SolarisServiceTag.getServiceTag();
-            if (osTag != null && regData.getServiceTag(osTag.getInstanceURN()) == null) {
-                regData.addServiceTag(osTag);
-            }
-            // write to the registration.xml
-            writeRegistrationXml();
-        }
-
-        // Install the system service tag if supported
-        if (Registry.isSupported()) {
-            installSystemServiceTag();
-        }
-        return newSvcTag;
-    }
-
-    private static void installSystemServiceTag() throws IOException {
-        // only install the service tag in the registry if
-        // it has permission to write the servicetag file.
-        if ((!serviceTagFile.exists() && !svcTagDir.canWrite()) ||
-                (serviceTagFile.exists() && !serviceTagFile.canWrite())) {
-            return;
-        }
-
-        Set<String> urns = getInstalledURNs();
-        ServiceTag[] javaSvcTags = getJavaServiceTagArray();
-        if (urns.size() < javaSvcTags.length) {
-            for (ServiceTag st : javaSvcTags) {
-                // Add the service tag in the system service tag registry
-                // if not installed
-                String instanceURN = st.getInstanceURN();
-                if (!urns.contains(instanceURN)) {
-                    Registry.getSystemRegistry().addServiceTag(st);
-                }
-            }
-        }
-        writeInstalledUrns();
-    }
-
-    private static ServiceTag newServiceTag(String svcTagSource) throws IOException {
-        Properties props = loadServiceTagProps();
-
-        // Determine the product URN and name
-        String productURN;
-        String productName;
-
-        if (isJdk()) {
-            // <HOME>/jre exists which implies it's a JDK
-            productURN = props.getProperty("servicetag.jdk.urn");
-            productName = props.getProperty("servicetag.jdk.name");
-        } else {
-            // Otherwise, it's a JRE
-            productURN = props.getProperty("servicetag.jre.urn");
-            productName = props.getProperty("servicetag.jre.name");
-        }
-
-        return ServiceTag.newInstance(ServiceTag.generateInstanceURN(),
-                                      productName,
-                                      System.getProperty("java.version"),
-                                      productURN,
-                                      props.getProperty("servicetag.parent.name"),
-                                      props.getProperty("servicetag.parent.urn"),
-                                      getProductDefinedId(),
-                                      System.getProperty("java.vendor"),
-                                      System.getProperty("os.arch"),
-                                      getZoneName(),
-                                      svcTagSource);
-    }
-
-    /**
-     * Delete the registration data, the offline registration pages and
-     * the service tags in the system service tag registry if installed.
-     *
-     * The registration.xml and servicetag file will be removed.
-     */
-    private static synchronized void deleteRegistrationData()
-            throws IOException {
-        try {
-            // delete the offline registration page
-            deleteRegistrationHtmlPage();
-
-            // Remove the service tag from the system ST registry if exists
-            Set<String> urns = getInstalledURNs();
-            if (urns.size() > 0 && Registry.isSupported()) {
-                for (String u : urns) {
-                    Registry.getSystemRegistry().removeServiceTag(u);
-                }
-            }
-            registration = null;
-        } finally {
-            // Delete the registration.xml and servicetag files if exists
-            if (regXmlFile.exists()) {
-                if (!regXmlFile.delete()) {
-                    throw new IOException("Failed to delete " + regXmlFile);
-                }
-            }
-            if (serviceTagFile.exists()) {
-                if (!serviceTagFile.delete()) {
-                    throw new IOException("Failed to delete " + serviceTagFile);
-                }
-            }
-        }
-    }
-
-    /**
-     * Updates the registration data to contain one single service tag
-     * for the running Java runtime.
-     */
-    private static synchronized void updateRegistrationData(String svcTagSource)
-            throws IOException {
-        RegistrationData regData = getRegistrationData();
-        ServiceTag curSvcTag = newServiceTag(svcTagSource);
-
-        ServiceTag[] javaSvcTags = getJavaServiceTagArray();
-        Set<String> urns = getInstalledURNs();
-        for (ServiceTag st : javaSvcTags) {
-            if (!st.getProductDefinedInstanceID().equals(curSvcTag.getProductDefinedInstanceID())) {
-                String instanceURN = st.getInstanceURN();
-                regData.removeServiceTag(instanceURN);
-
-                // remove it from the system service tag registry if exists
-                if (urns.contains(instanceURN) && Registry.isSupported()) {
-                    Registry.getSystemRegistry().removeServiceTag(instanceURN);
-                }
-            }
-        }
-        writeRegistrationXml();
-        writeInstalledUrns();
-    }
-
-    private static void writeInstalledUrns() throws IOException {
-        // if the Registry is not supported,
-        // remove the servicetag file
-        if (!Registry.isSupported() && serviceTagFile.exists()) {
-            serviceTagFile.delete();
-            return;
-        }
-
-        try (PrintWriter out = new PrintWriter(serviceTagFile)) {
-            ServiceTag[] javaSvcTags = getJavaServiceTagArray();
-            for (ServiceTag st : javaSvcTags) {
-                // Write the instance_run to the servicetag file
-                String instanceURN = st.getInstanceURN();
-                out.println(instanceURN);
-            }
-        }
-    }
-
-    /**
-     * Load the properties for generating Java SE service tags.
-     *
-     * @param version Version of Java SE
-     */
-    private static synchronized Properties loadServiceTagProps() throws IOException {
-        if (svcTagProps != null) {
-            return svcTagProps;
-        }
-
-        // For Java SE 8 and later releases, JDK and JRE both use
-        // the same product number.  The sworRDFish metadata were
-        // for legacy Sun part number.
-        String filename = "/com/sun/servicetag/resources/javase_servicetag.properties";
-        try (InputStream in = Installer.class.getResourceAsStream(filename)) {
-            svcTagProps = new Properties();
-            svcTagProps.load(in);
-        }
-        return svcTagProps;
-    }
-
-    /**
-     * Returns the product defined instance ID for Java SE.
-     * It is a list of comma-separated name/value pairs:
-     *    "id=<full-version>  <arch> [<arch>]*"
-     *    "dir=<java.home system property value>"
-     *
-     * where <full-version> is the full version string of the JRE,
-     *       <arch> is the architecture that the runtime supports
-     *       (i.e. "sparc", "sparcv9", "i386", "amd64" (ISA list))
-     *
-     * For Solaris, it can be dual mode that can support both
-     * 32-bit and 64-bit. the "id" will be set to
-     *     "1.6.0_03-b02 sparc sparcv9"
-     *
-     * The "dir" property is included in the service tag to enable
-     * the Service Tag software to determine if a service tag for
-     * Java SE is invalid and perform appropriate service tag
-     * cleanup if necessary.  See RFE# 6574781 Service Tags Enhancement.
-     *
-     */
-    private static String getProductDefinedId() {
-        StringBuilder definedId = new StringBuilder();
-        definedId.append("id=");
-        definedId.append(System.getProperty("java.runtime.version"));
-
-        String[] archs = getJreArchs();
-        for (String name : archs) {
-            definedId.append(" " + name);
-        }
-
-        String location = ",dir=" + javaHome;
-        if ((definedId.length() + location.length()) < 256) {
-            definedId.append(",dir=");
-            definedId.append(javaHome);
-        } else {
-            // if it exceeds the limit, we will not include the location
-            if (isVerbose()) {
-                System.err.println("Warning: Product defined instance ID exceeds the field limit:");
-            }
-        }
-
-        return definedId.toString();
-    }
-
-    /**
-     * Returns the architectures that the runtime supports
-     *  (i.e. "sparc", "sparcv9", "i386", "amd64" (ISA list))
-     * The directory name where libjava.so is located.
-     *
-     * On Windows, returns the "os.arch" system property value.
-     */
-    private synchronized static String[] getJreArchs() {
-        if (jreArchs != null) {
-            return jreArchs;
-        }
-
-        Set<String> archs = new HashSet<>();
-
-        String os = System.getProperty("os.name");
-        if (os.equals("SunOS") || os.equals("Linux")) {
-            // Traverse the directories under <JRE>/lib.
-            // If <JRE>/lib/<arch>/libjava.so exists, add <arch>
-            // to the product defined ID
-            File dir = new File(getJrePath() + File.separator + "lib");
-            if (dir.isDirectory()) {
-                String[] children = dir.list();
-                for (String name : children) {
-                    File f = new File(dir, name + File.separator + "libjava.so");
-                    if (f.exists()) {
-                        archs.add(name);
-                    }
-                }
-            }
-        } else {
-            // Windows - append the os.arch
-            archs.add(System.getProperty("os.arch"));
-        }
-        jreArchs = archs.toArray(new String[0]);
-        return jreArchs;
-    }
-
-    /**
-     * Return the zonename if zone is supported; otherwise, return
-     * "global".
-     */
-    private static String getZoneName() throws IOException {
-        String zonename = "global";
-
-        String command = "/usr/bin/zonename";
-        File f = new File(command);
-        // com.sun.servicetag package has to be compiled with JDK 5 as well
-        // JDK 5 doesn't support the File.canExecute() method.
-        // Risk not checking isExecute() for the zonename command is very low.
-        if (f.exists()) {
-            ProcessBuilder pb = new ProcessBuilder(command);
-            Process p = pb.start();
-            String output = commandOutput(p);
-            if (p.exitValue() == 0) {
-                zonename = output.trim();
-            }
-
-        }
-        return zonename;
-    }
-
-    private synchronized static String getRegisterHtmlParent() throws IOException {
-        if (registerHtmlParent == null) {
-            File htmlDir;    // register.html is put under the JDK directory
-            if (getJrePath().endsWith(File.separator + "jre")) {
-                htmlDir = new File(getJrePath(), "..");
-            } else {
-                // j2se non-image build
-                htmlDir = new File(getJrePath());
-            }
-
-            // initialize the supported locales
-            initSupportedLocales(htmlDir);
-
-            // Determine the location of the offline registration page
-            String path = System.getProperty(SVCTAG_DIR_PATH);
-            if (path == null) {
-                // Default is <JDK>/register.html
-                registerHtmlParent = htmlDir.getCanonicalPath();
-            } else {
-                File f = new File(path);
-                registerHtmlParent = f.getCanonicalPath();
-                if (!f.isDirectory()) {
-                    throw new InternalError("Path " + path + " set in \"" +
-                            SVCTAG_DIR_PATH + "\" property is not a directory");
-                }
-            }
-        }
-        return registerHtmlParent;
-    }
-
-    /**
-     * Returns the File object of the offline registration page localized
-     * for the default locale in the JDK directory.
-     */
-    static synchronized File getRegistrationHtmlPage() throws IOException {
-        if (!supportRegistration) {
-            // No register.html page generated if JRE
-            return null;
-        }
-
-        String parent = getRegisterHtmlParent();
-
-        // check if the offline registration page is already generated
-        File f = new File(parent, REGISTRATION_HTML_NAME + ".html");
-        if (!f.exists()) {
-            // Generate the localized version of the offline registration Page
-            generateRegisterHtml(parent);
-        }
-
-        String name = REGISTRATION_HTML_NAME;
-        Locale locale = getDefaultLocale();
-        if (!locale.equals(Locale.ENGLISH) && supportedLocales.contains(locale)) {
-            // if the locale is not English and is supported by JDK
-            // set to the appropriate offline registration page;
-            // otherwise,set to register.html.
-            name = REGISTRATION_HTML_NAME + "_" + locale.toString();
-        }
-        File htmlFile = new File(parent, name + ".html");
-        if (isVerbose()) {
-            System.out.print("Offline registration page: " + htmlFile);
-            System.out.println((htmlFile.exists() ?
-                               "" : " not exist. Use register.html"));
-        }
-        if (htmlFile.exists()) {
-            return htmlFile;
-        } else {
-            return new File(parent,
-                            REGISTRATION_HTML_NAME + ".html");
-        }
-    }
-
-    private static Locale getDefaultLocale() {
-        List<Locale> candidateLocales = getCandidateLocales(Locale.getDefault());
-        for (Locale l : candidateLocales) {
-            if (supportedLocales.contains(l)) {
-                return l;
-            }
-        }
-        return Locale.getDefault();
-    }
-
-    private static List<Locale> getCandidateLocales(Locale locale) {
-        String language = locale.getLanguage();
-        String country = locale.getCountry();
-        String variant = locale.getVariant();
-
-        List<Locale> locales = new ArrayList<>(3);
-        if (variant.length() > 0) {
-            locales.add(locale);
-        }
-        if (country.length() > 0) {
-            locales.add((locales.isEmpty()) ?
-                        locale : new Locale(language, country, ""));
-        }
-        if (language.length() > 0) {
-            locales.add((locales.isEmpty()) ?
-                        locale : new Locale(language, "", ""));
-        }
-        return locales;
-    }
-
-    // Remove the offline registration pages
-    private static void deleteRegistrationHtmlPage() throws IOException {
-        String parent = getRegisterHtmlParent();
-        if (parent == null) {
-            return;
-        }
-
-        for (Locale locale : supportedLocales) {
-            String name = REGISTRATION_HTML_NAME;
-            if (!locale.equals(Locale.ENGLISH)) {
-                name += "_" + locale.toString();
-            }
-            File f = new File(parent, name + ".html");
-            if (f.exists()) {
-                if (!f.delete()) {
-                    throw new IOException("Failed to delete " + f);
-                }
-            }
-        }
-    }
-
-    private static void initSupportedLocales(File jdkDir) {
-        if (supportedLocales.isEmpty()) {
-            // initialize with the known supported locales
-            for (Locale l : knownSupportedLocales) {
-                supportedLocales.add(l);
-            }
-        }
-
-        // Determine unknown supported locales if any
-        // by finding the localized version of README.html
-        // This prepares if a new locale in JDK is supported in
-        // e.g. in the OpenSource world
-        FilenameFilter ff = new FilenameFilter() {
-            public boolean accept(File dir, String name) {
-                String fname = name.toLowerCase();
-                if (fname.startsWith("readme") && fname.endsWith(".html")) {
-                    return true;
-                }
-                return false;
-            }
-        };
-
-        String[] readmes = jdkDir.list(ff);
-        for (String name : readmes) {
-            String basename = name.substring(0, name.length() - ".html".length());
-            String[] ss = basename.split("_");
-            switch (ss.length) {
-                case 1:
-                    // English version
-                    break;
-                case 2:
-                    supportedLocales.add(new Locale(ss[1]));
-                    break;
-                case 3:
-                    supportedLocales.add(new Locale(ss[1], ss[2]));
-                    break;
-                default:
-                    // ignore
-                    break;
-            }
-        }
-        if (isVerbose()) {
-            System.out.println("Supported locales: ");
-            for (Locale l : supportedLocales) {
-                System.out.println(l);
-            }
-        }
-    }
-
-    private static final String JDK_HEADER_PNG_KEY = "@@JDK_HEADER_PNG@@";
-    private static final String JDK_VERSION_KEY = "@@JDK_VERSION@@";
-    private static final String REGISTRATION_URL_KEY = "@@REGISTRATION_URL@@";
-    private static final String REGISTRATION_PAYLOAD_KEY = "@@REGISTRATION_PAYLOAD@@";
-
-    @SuppressWarnings("unchecked")
-    private static void generateRegisterHtml(String parent) throws IOException {
-        int version = Util.getJdkVersion();
-        int update = Util.getUpdateVersion();
-        String jdkVersion = "Version " + version;
-        if (update > 0) {
-            // product name is not translated
-            jdkVersion += " Update " + update;
-        }
-        RegistrationData regData = getRegistrationData();
-        // Make sure it uses the canonical path before getting the URI.
-        File img = new File(svcTagDir.getCanonicalPath(), "jdk_header.png");
-        String headerImageSrc = img.toURI().toString();
-
-        // Format the registration data in one single line
-        StringBuilder payload = new StringBuilder();
-        String xml = regData.toString().replaceAll("\"", "%22");
-        try (BufferedReader reader = new BufferedReader(new StringReader(xml))) {
-            String line = null;
-            while ((line = reader.readLine()) != null) {
-                payload.append(line.trim());
-            }
-        }
-
-        String resourceFilename = "/com/sun/servicetag/resources/register";
-        for (Locale locale : supportedLocales) {
-            String name = REGISTRATION_HTML_NAME;
-            String resource = resourceFilename;
-            if (!locale.equals(Locale.ENGLISH)) {
-                name += "_" + locale.toString();
-                resource += "_" + locale.toString();
-            }
-            File f = new File(parent, name + ".html");
-            InputStream in = null;
-            BufferedReader br = null;
-            PrintWriter pw = null;
-            String registerURL = SunConnection.
-                getRegistrationURL(regData.getRegistrationURN(),
-                                   locale,
-                                   String.valueOf(version)).toString();
-            try {
-                in = Installer.class.getResourceAsStream(resource + ".html");
-                if (in == null) {
-                    // if the resource file is missing
-                    if (isVerbose()) {
-                        System.out.println("Missing resouce file: " + resource + ".html");
-                    }
-                    continue;
-                }
-                if (isVerbose()) {
-                    System.out.println("Generating " + f + " from " + resource + ".html");
-                }
-
-                try {
-                    br = new BufferedReader(new InputStreamReader(in, "UTF-8"));
-                    pw = new PrintWriter(f, "UTF-8");
-                    String line = null;
-                    while ((line = br.readLine()) != null) {
-                        String output = line;
-                        if (line.contains(JDK_VERSION_KEY)) {
-                            output = line.replace(JDK_VERSION_KEY, jdkVersion);
-                        } else if (line.contains(JDK_HEADER_PNG_KEY)) {
-                            output = line.replace(JDK_HEADER_PNG_KEY, headerImageSrc);
-                        } else if (line.contains(REGISTRATION_URL_KEY)) {
-                            output = line.replace(REGISTRATION_URL_KEY, registerURL);
-                        } else if (line.contains(REGISTRATION_PAYLOAD_KEY)) {
-                            output = line.replace(REGISTRATION_PAYLOAD_KEY, payload.toString());
-                        }
-                        pw.println(output);
-                    }
-                    f.setReadOnly();
-                    pw.flush();
-                } finally {
-                    // It's safe for this finally block to have two close statements
-                    // consecutively as PrintWriter.close doesn't throw IOException.
-                    if (pw != null) {
-                        pw.close();
-                    }
-                    if (br!= null) {
-                        br.close();
-                    }
-                }
-            } finally {
-                if (in != null) {
-                    in.close();
-                }
-            }
-        }
-    }
-
-    private static final int MAX_SOURCE_LEN = 63;
-
-    /**
-     * A utility class to create a service tag for Java SE.
-     * <p>
-     * <b>Usage:</b><br>
-     * <blockquote><tt>
-     * &lt;JAVA_HOME&gt;/bin/java com.sun.servicetag.Installer
-     * </tt></blockquote>
-     * <p>
-     */
-    public static void main(String[] args) {
-        String source = "Manual ";
-        String runtimeName = System.getProperty("java.runtime.name");
-        if (runtimeName.startsWith("OpenJDK")) {
-            source = "OpenJDK ";
-        }
-        source += System.getProperty("java.runtime.version");
-        if (source.length() > MAX_SOURCE_LEN) {
-            source = source.substring(0, MAX_SOURCE_LEN);
-        }
-
-        // Parse the options (arguments starting with "-" )
-        boolean delete = false;
-        boolean update = false;
-        boolean register = false;
-        int count = 0;
-        while (count < args.length) {
-            String arg = args[count];
-            if (arg.trim().length() == 0) {
-                // skip empty arguments
-                count++;
-                continue;
-            }
-
-            if (arg.equals("-source")) {
-                source = args[++count];
-            } else if (arg.equals("-delete")) {
-                delete = true;
-            } else if (arg.equals("-register")) {
-                register = true;
-            } else {
-                usage();
-                return;
-            }
-            count++;
-        }
-        try {
-            if (delete) {
-                deleteRegistrationData();
-            } else {
-                ServiceTag[] javaSvcTags = getJavaServiceTagArray();
-                String[] archs = getJreArchs();
-                if (javaSvcTags.length > archs.length) {
-                    // 64-bit has been uninstalled
-                    // so remove the service tag
-                    updateRegistrationData(source);
-                } else {
-                    // create the service tag
-                    createServiceTag(source);
-                }
-            }
-
-            if (register) {
-                // Registration is only supported by JDK
-                // For testing purpose, override with a "servicetag.enable.registration" property
-
-                RegistrationData regData = getRegistrationData();
-                if (supportRegistration && !regData.getServiceTags().isEmpty()) {
-                    SunConnection.register(regData,
-                                           getDefaultLocale(),
-                                           String.valueOf(Util.getJdkVersion()));
-                }
-            }
-            System.exit(0);
-        } catch (IOException e) {
-            System.err.println("I/O Error: " + e.getMessage());
-            if (isVerbose()) {
-                e.printStackTrace();
-            }
-        } catch (IllegalArgumentException ex) {
-            if (isVerbose()) {
-                ex.printStackTrace();
-            }
-        } catch (Exception e) {
-            System.err.println("Error: " + e.getMessage());
-            if (isVerbose()) {
-                e.printStackTrace();
-            }
-        }
-        System.exit(1);
-    }
-
-    private static void usage() {
-        System.out.println("Usage:");
-        System.out.print("    " + Installer.class.getName());
-        System.out.println(" [-delete|-source <source>|-register]");
-        System.out.println("       to create a service tag for the Java platform");
-        System.out.println("");
-        System.out.println("Internal Options:");
-        System.out.println("    -source: to specify the source of the service tag to be created");
-        System.out.println("    -delete: to delete the service tag ");
-        System.out.println("    -register: to register the JDK");
-        System.out.println("    -help:   to print this help message");
-    }
-}
--- a/jdk/src/share/classes/com/sun/servicetag/LinuxSystemEnvironment.java	Tue Apr 02 14:13:13 2013 -0400
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,193 +0,0 @@
-/*
- * Copyright (c) 2008, 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 com.sun.servicetag;
-
-// This class is a copy of the com.sun.scn.servicetags.LinuxSystemEnvironment
-// class from the Sun Connection source.
-//
-// The Service Tags team maintains the latest version of the implementation
-// for system environment data collection.  JDK will include a copy of
-// the most recent released version for a JDK release. We rename
-// the package to com.sun.servicetag so that the Sun Connection
-// product always uses the latest version from the com.sun.scn.servicetags
-// package. JDK and users of the com.sun.servicetag API
-// (e.g. NetBeans and SunStudio) will use the version in JDK.
-//
-// So we keep this class in src/share/classes instead of src/<os>/classes.
-
-import java.io.*;
-
-/**
- * Linux implementation of the SystemEnvironment class.
- */
-class LinuxSystemEnvironment extends SystemEnvironment {
-    LinuxSystemEnvironment() {
-        setHostId(getLinuxHostId());
-        setSystemModel(getCommandOutput("/bin/uname", "-i"));
-        setSystemManufacturer(getLinuxSystemManufacturer());
-        setCpuManufacturer(getLinuxCpuManufacturer());
-        setSerialNumber(getLinuxSN());
-    }
-    private String dmiInfo = null;
-
-    private static final int SN  = 1;
-    private static final int SYS = 2;
-    private static final int CPU = 3;
-
-    private String getLinuxHostId() {
-        String output = getCommandOutput("/usr/bin/hostid");
-        // trim off the leading 0x
-        if (output.startsWith("0x")) {
-            output = output.substring(2);
-        }
-        return output;
-    }
-
-    /**
-     * Tries to obtain and return the cpu manufacturer.
-     * @return The cpu manufacturer (an empty string if not found or an error occurred)
-     */
-    private String getLinuxCpuManufacturer() {
-        String tmp = getLinuxPSNInfo(CPU);
-        if (tmp.length() > 0) {
-            return tmp;
-        }
-
-        String contents = getFileContent("/proc/cpuinfo");
-        for (String line : contents.split("\n")) {
-            if (line.contains("vendor_id")) {
-                String[] ss = line.split(":", 2);
-                if (ss.length > 1) {
-                    return ss[1].trim();
-                }
-            }
-        }
-
-        // returns an empty string if it can't be found or an error happened
-        return getLinuxDMIInfo("dmi type 4", "manufacturer");
-    }
-
-
-    /**
-     * Tries to obtain and return the system manufacturer.
-     * @return The system manufacturer (an empty string if not found or an error occurred)
-     */
-    private String getLinuxSystemManufacturer() {
-        String tmp = getLinuxPSNInfo(SYS);
-        if (tmp.length() > 0) {
-            return tmp;
-        }
-
-        // returns an empty string if it can't be found or an error happened
-        return getLinuxDMIInfo("dmi type 1", "manufacturer");
-    }
-
-    /**
-     * Tries to obtain and return the serial number of the system.
-     * @return The serial number (an empty string if not found or an error occurred)
-     */
-    private String getLinuxSN() {
-        String tmp = getLinuxPSNInfo(SN);
-        if (tmp.length() > 0) {
-            return tmp;
-        }
-
-        // returns an empty string if it can't be found or an error happened
-        return getLinuxDMIInfo("dmi type 1", "serial number");
-    }
-
-    private String getLinuxPSNInfo(int target) {
-        // try to read from the psn file if it exists
-        String contents = getFileContent("/var/run/psn");
-        String[] ss = contents.split("\n");
-        if (target <= ss.length) {
-            return ss[target-1];
-        }
-
-        // default case is to return ""
-        return "";
-    }
-
-    // reads from dmidecode with the given type and target
-    // returns an empty string if nothing was found or an error occurred
-    //
-    // Sample output segment:
-    // Handle 0x0001
-    //         DMI type 1, 25 bytes.
-    //         System Information
-    //                 Manufacturer: System manufacturer
-    //                 Product Name: System Product Name
-    //                 Version: System Version
-    //                 Serial Number: System Serial Number
-    //                 UUID: 3091D719-B25B-D911-959D-6D1B12C7686E
-    //                 Wake-up Type: Power Switch
-
-    private synchronized String getLinuxDMIInfo(String dmiType, String target) {
-        // only try to get dmidecode information once, after that, we can
-        // reuse the output
-        if (dmiInfo == null) {
-            Thread dmidecodeThread = new Thread() {
-                public void run() {
-                    dmiInfo = getCommandOutput("/usr/sbin/dmidecode");
-                }
-            };
-            dmidecodeThread.start();
-
-            try {
-                dmidecodeThread.join(2000);
-                if (dmidecodeThread.isAlive()) {
-                    dmidecodeThread.interrupt();
-                    dmiInfo = "";
-                }
-            } catch (InterruptedException ie) {
-                dmidecodeThread.interrupt();
-            }
-        }
-
-        if (dmiInfo.length() == 0) {
-            return "";
-        }
-        boolean dmiFlag = false;
-        for (String s : dmiInfo.split("\n")) {
-            String line = s.toLowerCase();
-            if (dmiFlag) {
-                if (line.contains(target)) {
-                    String key = target + ":";
-                    int indx = line.indexOf(key) + key.length();
-                    if (line.contains(key) && indx < line.length()) {
-                        return line.substring(indx).trim();
-                    }
-                    String[] ss = line.split(":");
-                    return ss[ss.length-1];
-                }
-            } else if (line.contains(dmiType)) {
-                dmiFlag = true;
-            }
-        }
-        return "";
-    }
-
-}
--- a/jdk/src/share/classes/com/sun/servicetag/RegistrationData.java	Tue Apr 02 14:13:13 2013 -0400
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,475 +0,0 @@
-/*
- * Copyright (c) 2008, 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 com.sun.servicetag;
-
-import java.io.*;
-import java.net.UnknownHostException;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.HashSet;
-import java.util.LinkedHashMap;
-import java.util.Map;
-import java.util.Set;
-
-import static com.sun.servicetag.RegistrationDocument.*;
-
-/**
- * A {@code RegistrationData} object is a container of one or more
- * {@link #getServiceTags service tags} that identify the
- * components for product registration.
- * Each {@code RegistrationData} object has a {@link #getRegistrationURN
- * uniform resource name} (URN) as its identifier.
- * <a name="EnvMap"></a>
- * It also has an <i>environment map</i> with
- * the following elements:
- * <blockquote>
- *       <table border=0>
- *       <tr>
- *          <td><tt>hostname</tt></td>
- *          <td>Hostname of the system</td>
- *          <td>e.g. woody</td>
- *       </tr>
- *       <tr>
- *          <td><tt>hostId</tt></td>
- *          <td>Host ID of the system</td>
- *          <td>e.g. 83abc1ab</td>
- *       </tr>
- *       <tr>
- *          <td><tt>osName</tt></td>
- *          <td>Operating system name</td>
- *          <td> e.g. SunOS</td>
- *       </tr>
- *       <tr>
- *          <td><tt>osVersion</tt></td>
- *          <td>Operating system version</td>
- *          <td> e.g. 5.10</td>
- *       </tr>
- *       <tr>
- *          <td><tt>osArchitecture</tt></td>
- *          <td>Operating system architecture</td>
- *          <td> e.g. sparc</td>
- *       </tr>
- *       <tr>
- *          <td><tt>systemModel</tt></td>
- *          <td>System model</td>
- *          <td> e.g. SUNW,Sun-Fire-V440</td>
- *       </tr>
- *       <tr>
- *          <td><tt>systemManufacturer</tt></td>
- *          <td>System manufacturer</td>
- *          <td> e.g. Oracle Corporation</td>
- *       </tr>
- *       <tr>
- *          <td><tt>cpuManufacturer</tt></td>
- *          <td>CPU manufacturer</td>
- *          <td> e.g. Oracle Corporation</td>
- *       </tr>
- *       <tr>
- *          <td><tt>serialNumber</tt></td>
- *          <td>System serial number</td>
- *          <td> e.g. BEL078932</td>
- *       </tr>
- *       </table>
- *  </blockquote>
- * The <tt>hostname</tt> and <tt>osName</tt> element must have a non-empty value.
- * If an element is not available on a system and their value will be
- * empty.
- * <p>
- * <a name="XMLSchema">
- * <b>Registration XML Schema</b></a>
- * <p>
- * A {@code RegistrationData} object can be {@link #loadFromXML loaded} from
- * and {@link #storeToXML stored} into an XML file in the format described
- * by the
- * <a href="https://sn-tools.central.sun.com/twiki/pub/ServiceTags/RegistrationRelayService/product_registration.xsd">
- * registration data schema</a>.  The registration data schema is defined by the
- * Service Tags Technology.
- * <p>
- * Typically the registration data is constructed at installation time
- * and stored in an XML file for later service tag lookup or registration.
- *
- * <p>
- * <b>Example Usage</b>
- * <p>
- * The examples below show how the {@code RegistrationData} can be
- * used for product registration.
- * Exception handling is not shown in these examples for clarity.
- * <ol>
- * <li>This example shows how the JDK creates a JDK service tag, installs it
- * in the system service tag registry and adds it to the registration data.
- * <br>
- * <blockquote><pre>
- *   // create a service tag object with an instance_urn
- *   ServiceTag st = ServiceTag.newInstance(ServiceTag.generateInstanceURN(),
- *                                          ....);
- *   // Adds to the system service tag registry if supported
- *   if (Registry.isSupported()) {
- *       Registry.getSystemRegistry().addServiceTag(st);
- *   }
- *
- *   // add to the registration data
- *   RegistrationData registration  = new RegistrationData();
- *   registration.addServiceTag(st);
- * </pre></blockquote>
- * </li>
- * <li>At this point, the registration data is ready to
- * send to Sun Connection for registration. This example shows how to register
- * the JDK via the <i>Registration Relay Service</i>.
- * <p>
- * There are several registration services for Sun Connection. For example,
- * the <a href="https://sn-tools.central.sun.com/twiki/bin/view/ServiceTags/RegistrationRelayService">
- * Registration Relay Service</a> is a web application interface that
- * processes the registration data payload sent via HTTP post
- * and hosts the registration user interface for a specified
- * registration URL.  Refer to the
- * Registration Relay Service Specification for details.
- * <p>
- * <blockquote><pre>
- *   // Open the connection to the URL of the registration service
- *   HttpsURLConnection con = (HttpsURLConnection) url.openConnection();
- *   con.setDoInput(true);
- *   con.setDoOutput(true);
- *   con.setUseCaches(false);
- *   con.setAllowUserInteraction(false);
- *   con.setRequestMethod("POST");
- *   con.setRequestProperty("Content-Type", "text/xml;charset=\"utf-8\"");
- *   con.connect();
- *
- *   // send the registration data to the registration service
- *   OutputStream out = con.getOutputStream();
- *   registration.storeToXML(out);
- *   out.close();
- * </pre></blockquote>
- * </li>
- * <li>This example shows how to store the registration data in an XML file.
- *     for later service tag lookup or registration.
- * <br>
- * <blockquote><pre>
- *   BufferedOutputStream out = new BufferedOutputStream(
- *       new FileOutputStream(""&lt;JAVA_HOME&gt;/lib/servicetag/registration.xml"));
- *   registration.storeToXML(out);
- *   out.close();
- * </pre></blockquote>
- * </li>
- * <li>This example shows how to install service tags that are in the
- * registration data in the system service tag registry when determined
- * to be available.  The system service tag registry might not have existed
- * when the registration data was constructed.
- * <br>
- * <blockquote><pre>
- *   if (Registry.isSupported()) {
- *       Set&lt;ServiceTag&gt; svctags = registration.getServiceTags();
- *       for (ServiceTag st : svctags) {
- *           Registry.getSystemRegistry().addServiceTag(st);
- *       }
- *   }
- * </pre></blockquote>
- * </li>
- * </ol>
- *
- * @see <a href="https://sunconnection.sun.com/inventory">Sun Connection Inventory Channel</a>
- */
-public class RegistrationData {
-    private final Map<String, String> environment = initEnvironment();
-    private final Map<String, ServiceTag> svcTagMap =
-        new LinkedHashMap<String, ServiceTag>();
-    private final String urn;
-
-    /**
-     * Creates a {@code RegistrationData} object with a generated
-     * {@link #getRegistrationURN registration URN}.
-     * The following keys in the {@link #getEnvironmentMap environment map}
-     * will be initialized for the configuration of the
-     * running system:
-     * <blockquote>
-     * <tt>hostname</tt>, <tt>osName</tt>,  <tt>osVersion</tt> and
-     * <tt>osArchitecture</tt>
-     * </blockquote>
-     * and the value of other keys may be empty.
-     */
-    public RegistrationData() {
-        this(Util.generateURN());
-        SystemEnvironment sysEnv = SystemEnvironment.getSystemEnvironment();
-        setEnvironment(ST_NODE_HOSTNAME, sysEnv.getHostname());
-        setEnvironment(ST_NODE_HOST_ID, sysEnv.getHostId());
-        setEnvironment(ST_NODE_OS_NAME, sysEnv.getOsName());
-        setEnvironment(ST_NODE_OS_VERSION, sysEnv.getOsVersion());
-        setEnvironment(ST_NODE_OS_ARCH, sysEnv.getOsArchitecture());
-        setEnvironment(ST_NODE_SYSTEM_MODEL, sysEnv.getSystemModel());
-        setEnvironment(ST_NODE_SYSTEM_MANUFACTURER, sysEnv.getSystemManufacturer());
-        setEnvironment(ST_NODE_CPU_MANUFACTURER, sysEnv.getCpuManufacturer());
-        setEnvironment(ST_NODE_SERIAL_NUMBER, sysEnv.getSerialNumber());
-    }
-
-    // package private
-    RegistrationData(String urn) {
-        this.urn = urn;
-    }
-
-    private Map<String, String> initEnvironment() {
-        Map<String, String> map = new LinkedHashMap<String, String>();
-        map.put(ST_NODE_HOSTNAME, "");
-        map.put(ST_NODE_HOST_ID, "");
-        map.put(ST_NODE_OS_NAME, "");
-        map.put(ST_NODE_OS_VERSION, "");
-        map.put(ST_NODE_OS_ARCH, "");
-        map.put(ST_NODE_SYSTEM_MODEL, "");
-        map.put(ST_NODE_SYSTEM_MANUFACTURER, "");
-        map.put(ST_NODE_CPU_MANUFACTURER, "");
-        map.put(ST_NODE_SERIAL_NUMBER, "");
-        return map;
-    }
-
-    /**
-     * Returns the uniform resource name of this registration data
-     * in this format:
-     * <tt>urn:st:&lt;32-char {@link java.util.UUID uuid}&gt;</tt>
-     *
-     * @return the URN of this registration data.
-     */
-    public String getRegistrationURN() {
-        return urn;
-    }
-
-    /**
-     * Returns a map containing the environment information for this
-     * registration data.  See the set of <a href="#EnvMap">keys</a>
-     * in the environment map. Subsequent update to the environment
-     * map via the {@link #setEnvironment setEnvironment} method will not be reflected
-     * in the returned map.
-     *
-     * @return an environment map for this registration data.
-     */
-    public Map<String, String> getEnvironmentMap() {
-        return new LinkedHashMap<String,String>(environment);
-    }
-
-    /**
-     * Sets an element of the specified {@code name} in the environment map
-     * with the given {@code value}.
-     *
-     * @throws IllegalArgumentException if {@code name} is not a valid key
-     * in the environment map, or {@code value} is not valid.
-     */
-    public void setEnvironment(String name, String value) {
-        if (name == null) {
-            throw new NullPointerException("name is null");
-        }
-        if (value == null) {
-            throw new NullPointerException("value is null");
-        }
-        if (environment.containsKey(name)) {
-            if (name.equals(ST_NODE_HOSTNAME) || name.equals(ST_NODE_OS_NAME)) {
-                if (value.length() == 0) {
-                    throw new IllegalArgumentException("\"" +
-                        name + "\" requires non-empty value.");
-                }
-            }
-            environment.put(name, value);
-        } else {
-            throw new IllegalArgumentException("\"" +
-                 name + "\" is not an environment element.");
-        }
-    }
-
-    /**
-     * Returns all service tags in this registration data.
-     *
-     * @return  a {@link Set Set} of the service tags
-     * in this registration data.
-     */
-    public Set<ServiceTag> getServiceTags() {
-        return new HashSet<ServiceTag>(svcTagMap.values());
-    }
-
-    /**
-     * Adds a service tag to this registration data.
-     * If the given service tag has an empty <tt>instance_urn</tt>,
-     * this method will generate a URN and place it in the copy
-     * of the service tag in this registration data.
-     * This method will return the {@code ServiceTag} object
-     * added to this registration data.
-     *
-     * @param st {@code ServiceTag} object to be added.
-     * @return a {@code ServiceTag} object added to this registration data.
-     *
-     * @throws IllegalArgumentException if
-     *   a service tag of the same {@link ServiceTag#getInstanceURN
-     *   <tt>instance_urn</tt>} already exists in the registry.
-     */
-    public synchronized ServiceTag addServiceTag(ServiceTag st) {
-        ServiceTag svcTag = ServiceTag.newInstanceWithUrnTimestamp(st);
-
-        String instanceURN = svcTag.getInstanceURN();
-        if (svcTagMap.containsKey(instanceURN)) {
-            throw new IllegalArgumentException("Instance_urn = " + instanceURN +
-                    " already exists in the registration data.");
-        } else {
-            svcTagMap.put(instanceURN, svcTag);
-        }
-        return svcTag;
-    }
-
-    /**
-     * Returns a service tag of the given <tt>instance_urn</tt> in this registration
-     * data.
-     *
-     * @param instanceURN the <tt>instance_urn</tt> of the service tag
-     * @return the {@code ServiceTag} object of the given  <tt>instance_urn</tt>
-     *         if exists; otherwise return {@code null}.
-     */
-    public synchronized ServiceTag getServiceTag(String instanceURN) {
-        if (instanceURN == null) {
-            throw new NullPointerException("instanceURN is null");
-        }
-        return svcTagMap.get(instanceURN);
-    }
-
-    /**
-     * Removes a service tag of the given <tt>instance_urn</tt> from this
-     * registration data.
-     *
-     * @param instanceURN the <tt>instance_urn</tt> of
-     * the service tag to be removed.
-     *
-     * @return the removed {@code ServiceTag} object;
-     * or {@code null} if the service tag does not exist in this
-     * registration data.
-     */
-    public synchronized ServiceTag removeServiceTag(String instanceURN) {
-        if (instanceURN == null) {
-            throw new NullPointerException("instanceURN is null");
-        }
-
-        ServiceTag svcTag = null;
-        if (svcTagMap.containsKey(instanceURN)) {
-            svcTag = svcTagMap.remove(instanceURN);
-        }
-        return svcTag;
-    }
-
-     /**
-     * Updates the <tt>product_defined_instance_id</tt> in the service tag
-     * of the given <tt>instance_urn</tt> in this registration data.
-     *
-     * @param instanceURN the <tt>instance_urn</tt> of the service tag to be updated.
-     * @param productDefinedInstanceID the value of the
-     * <tt>product_defined_instance_id</tt> to be set.
-     *
-     * @return the updated {@code ServiceTag} object;
-     * or {@code null} if the service tag does not exist in this
-     * registration data.
-     */
-    public synchronized ServiceTag updateServiceTag(String instanceURN,
-                                                    String productDefinedInstanceID) {
-        ServiceTag svcTag = getServiceTag(instanceURN);
-        if (svcTag == null) {
-            return null;
-        }
-
-        svcTag = ServiceTag.newInstanceWithUrnTimestamp(svcTag);
-        // update the product defined instance ID field
-        svcTag.setProductDefinedInstanceID(productDefinedInstanceID);
-        svcTagMap.put(instanceURN, svcTag);
-        return svcTag;
-    }
-
-    /**
-     * Reads the registration data from the XML document on the
-     * specified input stream.  The XML document must be
-     * in the format described by the <a href="#XMLSchema">
-     * registration data schema</a>.
-     * The specified stream is closed after this method returns.
-     *
-     * @param in the input stream from which to read the XML document.
-     * @return a {@code RegistrationData} object read from the input
-     * stream.
-     *
-     * @throws IllegalArgumentException if the input stream
-     * contains an invalid registration data.
-     *
-     * @throws IOException if an error occurred when reading from the input stream.
-     */
-    public static RegistrationData loadFromXML(InputStream in) throws IOException {
-        try {
-            return RegistrationDocument.load(in);
-        } finally {
-            in.close();
-        }
-    }
-
-    /**
-     * Writes the registration data to the specified output stream
-     * in the format described by the <a href="#XMLSchema">
-     * registration data schema</a> with "UTF-8" encoding.
-     * The specified stream remains open after this method returns.
-     *
-     * @param os the output stream on which to write the XML document.
-     *
-     * @throws IOException if an error occurred when writing to the output stream.
-     */
-    public void storeToXML(OutputStream os) throws IOException {
-        RegistrationDocument.store(os, this);
-        os.flush();
-    }
-
-    /**
-     * Returns a newly allocated byte array containing the registration
-     * data in XML format.
-     *
-     * @return a newly allocated byte array containing the registration
-     * data in XML format.
-     */
-    public byte[] toXML() {
-        try {
-            ByteArrayOutputStream out = new ByteArrayOutputStream();
-            storeToXML(out);
-            return out.toByteArray();
-        } catch (IOException e) {
-            // should not reach here
-            return new byte[0];
-        }
-    }
-
-    /**
-     * Returns a string representation of this registration data in XML
-     * format.
-     *
-     * @return a string representation of this registration data in XML
-     *         format.
-     */
-    @Override
-    public String toString() {
-        try {
-            ByteArrayOutputStream out = new ByteArrayOutputStream();
-            storeToXML(out);
-            return out.toString("UTF-8");
-        } catch (IOException e) {
-            // should not reach here
-            return "Error creating the return string.";
-        }
-    }
-}
--- a/jdk/src/share/classes/com/sun/servicetag/RegistrationDocument.java	Tue Apr 02 14:13:13 2013 -0400
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,358 +0,0 @@
-/*
- * Copyright (c) 2008, 2011, 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 com.sun.servicetag;
-
-import java.io.*;
-import java.net.URL;
-import java.util.Collection;
-import java.util.Map;
-import java.util.Set;
-
-import org.w3c.dom.Document;
-import org.w3c.dom.Element;
-import org.w3c.dom.Node;
-import org.w3c.dom.NodeList;
-import org.xml.sax.SAXException;
-import org.xml.sax.InputSource;
-
-import javax.xml.XMLConstants;
-import javax.xml.parsers.DocumentBuilder;
-import javax.xml.parsers.DocumentBuilderFactory;
-
-import javax.xml.parsers.ParserConfigurationException;
-import javax.xml.validation.Schema;
-import javax.xml.validation.SchemaFactory;
-import javax.xml.validation.Validator;
-
-// For write operation
-import javax.xml.transform.OutputKeys;
-import javax.xml.transform.Transformer;
-import javax.xml.transform.TransformerException;
-import javax.xml.transform.TransformerFactory;
-import javax.xml.transform.TransformerConfigurationException;
-import javax.xml.transform.dom.DOMSource;
-import javax.xml.transform.stream.StreamResult;
-
-/**
- * XML Support Class for Product Registration.
- */
-class RegistrationDocument {
-
-    private static final String REGISTRATION_DATA_SCHEMA =
-            "/com/sun/servicetag/resources/product_registration.xsd";
-    private static final String REGISTRATION_DATA_VERSION = "1.0";
-    private static final String SERVICE_TAG_VERSION = "1.0";
-    final static String ST_NODE_REGISTRATION_DATA = "registration_data";
-    final static String ST_ATTR_REGISTRATION_VERSION = "version";
-    final static String ST_NODE_ENVIRONMENT = "environment";
-    final static String ST_NODE_HOSTNAME = "hostname";
-    final static String ST_NODE_HOST_ID = "hostId";
-    final static String ST_NODE_OS_NAME = "osName";
-    final static String ST_NODE_OS_VERSION = "osVersion";
-    final static String ST_NODE_OS_ARCH = "osArchitecture";
-    final static String ST_NODE_SYSTEM_MODEL = "systemModel";
-    final static String ST_NODE_SYSTEM_MANUFACTURER = "systemManufacturer";
-    final static String ST_NODE_CPU_MANUFACTURER = "cpuManufacturer";
-    final static String ST_NODE_SERIAL_NUMBER = "serialNumber";
-    final static String ST_NODE_REGISTRY = "registry";
-    final static String ST_ATTR_REGISTRY_URN = "urn";
-    final static String ST_ATTR_REGISTRY_VERSION = "version";
-    final static String ST_NODE_SERVICE_TAG = "service_tag";
-    final static String ST_NODE_INSTANCE_URN = "instance_urn";
-    final static String ST_NODE_PRODUCT_NAME = "product_name";
-    final static String ST_NODE_PRODUCT_VERSION = "product_version";
-    final static String ST_NODE_PRODUCT_URN = "product_urn";
-    final static String ST_NODE_PRODUCT_PARENT_URN = "product_parent_urn";
-    final static String ST_NODE_PRODUCT_PARENT = "product_parent";
-    final static String ST_NODE_PRODUCT_DEFINED_INST_ID = "product_defined_inst_id";
-    final static String ST_NODE_PRODUCT_VENDOR = "product_vendor";
-    final static String ST_NODE_PLATFORM_ARCH = "platform_arch";
-    final static String ST_NODE_TIMESTAMP = "timestamp";
-    final static String ST_NODE_CONTAINER = "container";
-    final static String ST_NODE_SOURCE = "source";
-    final static String ST_NODE_INSTALLER_UID = "installer_uid";
-
-    static RegistrationData load(InputStream in) throws IOException {
-        Document document = initializeDocument(in);
-
-        // Gets the registration URN
-        Element root = getRegistrationDataRoot(document);
-        Element registryRoot =
-                getSingletonElementFromRoot(root, ST_NODE_REGISTRY);
-        String urn = registryRoot.getAttribute(ST_ATTR_REGISTRY_URN);
-
-        // Construct a new RegistrationData object from the DOM tree
-        // Initialize the environment map and service tags
-        RegistrationData regData = new RegistrationData(urn);
-        addServiceTags(registryRoot, regData);
-
-        Element envRoot = getSingletonElementFromRoot(root, ST_NODE_ENVIRONMENT);
-        buildEnvironmentMap(envRoot, regData);
-        return regData;
-    }
-
-    static void store(OutputStream os, RegistrationData registration)
-            throws IOException {
-        // create a new document with the root node
-        Document document = initializeDocument();
-
-        // create the nodes for the environment map and the service tags
-        // in the registration data
-        addEnvironmentNodes(document,
-                            registration.getEnvironmentMap());
-        addServiceTagRegistry(document,
-                              registration.getRegistrationURN(),
-                              registration.getServiceTags());
-        transform(document, os);
-    }
-
-    // initialize a document from an input stream
-    private static Document initializeDocument(InputStream in) throws IOException {
-        DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
-        try {
-            // XML schema for validation
-            SchemaFactory sf = SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI);
-            URL xsdUrl = RegistrationDocument.class.getResource(REGISTRATION_DATA_SCHEMA);
-            Schema schema = sf.newSchema(xsdUrl);
-            Validator validator = schema.newValidator();
-
-            DocumentBuilder builder = factory.newDocumentBuilder();
-            Document doc = builder.parse(new InputSource(in));
-            validator.validate(new DOMSource(doc));
-            return doc;
-        } catch (SAXException sxe) {
-            IllegalArgumentException e = new IllegalArgumentException("Error generated in parsing");
-            e.initCause(sxe);
-            throw e;
-        } catch (ParserConfigurationException pce) {
-            // Parser with specific options can't be built
-            // should not reach here
-            throw new InternalError("Error in creating the new document", pce);
-        }
-    }
-
-    // initialize a new document for the registration data
-    private static Document initializeDocument() throws IOException {
-        DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
-        try {
-            DocumentBuilder builder = factory.newDocumentBuilder();
-            Document doc = builder.newDocument();
-
-            // initialize the document with the registration_data root
-            Element root = doc.createElement(ST_NODE_REGISTRATION_DATA);
-            doc.appendChild(root);
-            root.setAttribute(ST_ATTR_REGISTRATION_VERSION, REGISTRATION_DATA_VERSION);
-
-            return doc;
-        } catch (ParserConfigurationException pce) {
-            // Parser with specified options can't be built
-            // should not reach here
-            throw new InternalError("Error in creating the new document", pce);
-        }
-    }
-
-    // Transform the current DOM tree with the given output stream.
-    private static void transform(Document document, OutputStream os) {
-        try {
-            // Use a Transformer for output
-            TransformerFactory tFactory = TransformerFactory.newInstance();
-            tFactory.setAttribute("indent-number", new Integer(3));
-
-            Transformer transformer = tFactory.newTransformer();
-
-            transformer.setOutputProperty(OutputKeys.INDENT, "yes");
-            transformer.setOutputProperty(OutputKeys.METHOD, "xml");
-            transformer.setOutputProperty(OutputKeys.ENCODING, "UTF-8");
-            transformer.setOutputProperty(OutputKeys.STANDALONE, "yes");
-            transformer.transform(new DOMSource(document),
-                new StreamResult(new BufferedWriter(new OutputStreamWriter(os, "UTF-8"))));
-        } catch (UnsupportedEncodingException ue) {
-            // Should not reach here
-            throw new InternalError("Error generated during transformation", ue);
-        } catch (TransformerConfigurationException tce) {
-            // Error generated by the parser
-            // Should not reach here
-            throw new InternalError("Error in creating the new document", tce);
-        } catch (TransformerException te) {
-            // Error generated by the transformer
-            throw new InternalError("Error generated during transformation", te);
-        }
-    }
-
-    private static void addServiceTagRegistry(Document document,
-                                              String registryURN,
-                                              Set<ServiceTag> svcTags) {
-        // add service tag registry node and its attributes
-        Element reg = document.createElement(ST_NODE_REGISTRY);
-        reg.setAttribute(ST_ATTR_REGISTRY_URN, registryURN);
-        reg.setAttribute(ST_ATTR_REGISTRY_VERSION, SERVICE_TAG_VERSION);
-
-        Element root = getRegistrationDataRoot(document);
-        root.appendChild(reg);
-
-        // adds the elements for the service tags
-        for (ServiceTag st : svcTags) {
-            addServiceTagElement(document, reg, st);
-        }
-    }
-
-    private static void addServiceTagElement(Document document,
-                                             Element registryRoot,
-                                             ServiceTag st) {
-        Element svcTag = document.createElement(ST_NODE_SERVICE_TAG);
-        registryRoot.appendChild(svcTag);
-        addChildElement(document, svcTag,
-                        ST_NODE_INSTANCE_URN, st.getInstanceURN());
-        addChildElement(document, svcTag,
-                        ST_NODE_PRODUCT_NAME, st.getProductName());
-        addChildElement(document, svcTag,
-                        ST_NODE_PRODUCT_VERSION, st.getProductVersion());
-        addChildElement(document, svcTag,
-                        ST_NODE_PRODUCT_URN, st.getProductURN());
-        addChildElement(document, svcTag,
-                        ST_NODE_PRODUCT_PARENT_URN, st.getProductParentURN());
-        addChildElement(document, svcTag,
-                        ST_NODE_PRODUCT_PARENT, st.getProductParent());
-        addChildElement(document, svcTag,
-                        ST_NODE_PRODUCT_DEFINED_INST_ID,
-                        st.getProductDefinedInstanceID());
-        addChildElement(document, svcTag,
-                        ST_NODE_PRODUCT_VENDOR, st.getProductVendor());
-        addChildElement(document, svcTag,
-                        ST_NODE_PLATFORM_ARCH, st.getPlatformArch());
-        addChildElement(document, svcTag,
-                        ST_NODE_TIMESTAMP, Util.formatTimestamp(st.getTimestamp()));
-        addChildElement(document, svcTag,
-                        ST_NODE_CONTAINER, st.getContainer());
-        addChildElement(document, svcTag,
-                        ST_NODE_SOURCE, st.getSource());
-        addChildElement(document, svcTag,
-                        ST_NODE_INSTALLER_UID,
-                        String.valueOf(st.getInstallerUID()));
-    }
-
-    private static void addChildElement(Document document, Element root,
-                                        String element, String text) {
-        Element node = document.createElement(element);
-        node.appendChild(document.createTextNode(text));
-        root.appendChild(node);
-    }
-
-    // Constructs service tags from the document
-    private static void addServiceTags(Element registryRoot,
-                                       RegistrationData registration) {
-        NodeList children = registryRoot.getElementsByTagName(ST_NODE_SERVICE_TAG);
-        int length = (children == null ? 0 : children.getLength());
-        for (int i = 0; i < length; i++) {
-            Element svcTagElement = (Element) children.item(i);
-            ServiceTag st = getServiceTag(svcTagElement);
-            registration.addServiceTag(st);
-        }
-    }
-
-    // build environment map from the document
-    private static void buildEnvironmentMap(Element envRoot,
-                                         RegistrationData registration) {
-        registration.setEnvironment(ST_NODE_HOSTNAME, getTextValue(envRoot, ST_NODE_HOSTNAME));
-        registration.setEnvironment(ST_NODE_HOST_ID, getTextValue(envRoot, ST_NODE_HOST_ID));
-        registration.setEnvironment(ST_NODE_OS_NAME, getTextValue(envRoot, ST_NODE_OS_NAME));
-        registration.setEnvironment(ST_NODE_OS_VERSION, getTextValue(envRoot, ST_NODE_OS_VERSION));
-        registration.setEnvironment(ST_NODE_OS_ARCH, getTextValue(envRoot, ST_NODE_OS_ARCH));
-        registration.setEnvironment(ST_NODE_SYSTEM_MODEL, getTextValue(envRoot, ST_NODE_SYSTEM_MODEL));
-        registration.setEnvironment(ST_NODE_SYSTEM_MANUFACTURER, getTextValue(envRoot, ST_NODE_SYSTEM_MANUFACTURER));
-        registration.setEnvironment(ST_NODE_CPU_MANUFACTURER, getTextValue(envRoot, ST_NODE_CPU_MANUFACTURER));
-        registration.setEnvironment(ST_NODE_SERIAL_NUMBER, getTextValue(envRoot, ST_NODE_SERIAL_NUMBER));
-    }
-
-    // add the nodes representing the environment map in the document
-    private static void addEnvironmentNodes(Document document,
-                                            Map<String, String> envMap) {
-        Element root = getRegistrationDataRoot(document);
-        Element env = document.createElement(ST_NODE_ENVIRONMENT);
-        root.appendChild(env);
-        Set<Map.Entry<String, String>> keys = envMap.entrySet();
-        for (Map.Entry<String, String> entry : keys) {
-            addChildElement(document, env, entry.getKey(), entry.getValue());
-        }
-    }
-
-    private static Element getRegistrationDataRoot(Document doc) {
-        Element root = doc.getDocumentElement();
-        if (!root.getNodeName().equals(ST_NODE_REGISTRATION_DATA)) {
-            throw new IllegalArgumentException("Not a " +
-                    ST_NODE_REGISTRATION_DATA +
-                    " node \"" + root.getNodeName() + "\"");
-        }
-        return root;
-    }
-
-    private static Element getSingletonElementFromRoot(Element root, String name) {
-        NodeList children = root.getElementsByTagName(name);
-        int length = (children == null ? 0 : children.getLength());
-        if (length != 1) {
-            throw new IllegalArgumentException("Invalid number of " + name +
-                    " nodes = " + length);
-        }
-        Element e = (Element) children.item(0);
-        if (!e.getNodeName().equals(name)) {
-            throw new IllegalArgumentException("Not a  " + name +
-                    " node \"" + e.getNodeName() + "\"");
-        }
-        return e;
-    }
-
-    // Constructs one ServiceTag instance from a service tag element root
-    private static ServiceTag getServiceTag(Element svcTagElement) {
-        return new ServiceTag(
-            getTextValue(svcTagElement, ST_NODE_INSTANCE_URN),
-            getTextValue(svcTagElement, ST_NODE_PRODUCT_NAME),
-            getTextValue(svcTagElement, ST_NODE_PRODUCT_VERSION),
-            getTextValue(svcTagElement, ST_NODE_PRODUCT_URN),
-            getTextValue(svcTagElement, ST_NODE_PRODUCT_PARENT),
-            getTextValue(svcTagElement, ST_NODE_PRODUCT_PARENT_URN),
-            getTextValue(svcTagElement, ST_NODE_PRODUCT_DEFINED_INST_ID),
-            getTextValue(svcTagElement, ST_NODE_PRODUCT_VENDOR),
-            getTextValue(svcTagElement, ST_NODE_PLATFORM_ARCH),
-            getTextValue(svcTagElement, ST_NODE_CONTAINER),
-            getTextValue(svcTagElement, ST_NODE_SOURCE),
-            Util.getIntValue(getTextValue(svcTagElement, ST_NODE_INSTALLER_UID)),
-            Util.parseTimestamp(getTextValue(svcTagElement, ST_NODE_TIMESTAMP))
-        );
-    }
-
-    private static String getTextValue(Element e, String tagName) {
-        String value = "";
-        NodeList nl = e.getElementsByTagName(tagName);
-        if (nl != null && nl.getLength() > 0) {
-            Element el = (Element) nl.item(0);
-            Node node = el.getFirstChild();
-            if (node != null) {
-                value = node.getNodeValue();
-            }
-        }
-        return value;
-    }
-}
--- a/jdk/src/share/classes/com/sun/servicetag/Registry.java	Tue Apr 02 14:13:13 2013 -0400
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,556 +0,0 @@
-/*
- * Copyright (c) 2008, 2010, 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 com.sun.servicetag;
-
-import java.io.*;
-import java.util.ArrayList;
-import java.util.Date;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Properties;
-import java.util.Set;
-
-import static com.sun.servicetag.Util.*;
-import static com.sun.servicetag.RegistrationDocument.*;
-
-/**
- * A service tag registry is a XML-based registry containing
- * the list of {@link ServiceTag service tags} installed in the system.
- * The {@code Registry} class provides interfaces
- * to add, remove, update, and get a service tag from a service tag
- * registry.
- * This {@code Registry} class may not be supported
- * on all systems. The {@link #isSupported} method
- * can be called to determine if it is supported.
- * <p>
- * A registry may implement restrictions to only allow certain users
- * to {@link #updateServiceTag update} and
- * to {@link #removeServiceTag remove} a service tag record. Typically,
- * only the owner of the service tag, the owner of the registry
- * and superuser are authorized to update or remove a service tag in
- * the registry.
- *
- * @see <a href="https://sn-tools.central.sun.com/twiki/bin/view/ServiceTags/ServiceTagDevGuideHelper">
- * Service Tag User Guide</a>
- */
-public class Registry {
-
-    private static final String STCLIENT_SOLARIS = "/usr/bin/stclient";
-    private static final String STCLIENT_LINUX = "/opt/sun/servicetag/bin/stclient";
-    // stclient exit value (see sthelper.h)
-    private static final int ST_ERR_NOT_AUTH = 245;
-    private static final int ST_ERR_REC_NOT_FOUND = 225;
-
-    // The stclient output has to be an exported interface
-    private static final String INSTANCE_URN_DESC = "Product instance URN=";
-    private static boolean initialized = false;
-    private static File stclient = null;
-    private static String stclientPath = null;
-    private static Registry registry = new Registry();
-
-    // System properties for testing
-    private static String SVCTAG_STCLIENT_CMD = "servicetag.stclient.cmd";
-    private static String SVCTAG_STHELPER_SUPPORTED = "servicetag.sthelper.supported";
-
-    private Registry() {
-    }
-
-    private synchronized static String getSTclient() {
-        if (!initialized) {
-            // Initialization to determine the platform's stclient pathname
-            String os = System.getProperty("os.name");
-            if (os.equals("SunOS")) {
-                stclient = new File(STCLIENT_SOLARIS);
-            } else if (os.equals("Linux")) {
-                stclient = new File(STCLIENT_LINUX);
-            } else if (os.startsWith("Windows")) {
-                stclient = getWindowsStClientFile();
-            } else {
-                if (isVerbose()) {
-                    System.out.println("Running on unsupported platform");
-                }
-            }
-            initialized = true;
-        }
-
-        boolean supportsHelperClass = true; // default
-        if (System.getProperty(SVCTAG_STHELPER_SUPPORTED) != null) {
-            // the system property always overrides the default setting
-            supportsHelperClass = Boolean.getBoolean(SVCTAG_STHELPER_SUPPORTED);
-        }
-
-        if (!supportsHelperClass) {
-            // disable system registry
-            return null;
-        }
-
-        // This is only used for testing
-        String path = System.getProperty(SVCTAG_STCLIENT_CMD);
-        if (path != null) {
-            return path;
-        }
-
-        // com.sun.servicetag package has to be compiled with JDK 5 as well
-        // JDK 5 doesn't support the File.canExecute() method.
-        // Risk not checking isExecute() for the stclient command is very low.
-        if (stclientPath == null && stclient != null && stclient.exists()) {
-            stclientPath = stclient.getAbsolutePath();
-        }
-        return stclientPath;
-    }
-
-    /**
-     * Returns the system service tag registry. The {@code Registry} class
-     * may not be supported on some platforms; use the {@link #isSupported}
-     * method to determine if it is supported.
-     *
-     * @return the {@code Registry} object for the system service tag registry.
-     *
-     * @throws UnsupportedOperationException if the {@code Registry} class is
-     * not supported.
-     */
-    public static Registry getSystemRegistry() {
-        if (isSupported()) {
-            return registry;
-        } else {
-            throw new UnsupportedOperationException("Registry class is not supported");
-        }
-    }
-
-    /**
-     * Returns {@code true} if the {@code Registry} class is supported on this system.
-     *
-     * @return {@code true} if the {@code Registry} class is supported;
-     * otherwise, return {@code false}.
-     */
-    public static synchronized boolean isSupported() {
-        return getSTclient() != null;
-    }
-
-    private static List<String> getCommandList() {
-        // Set up the arguments to call stclient
-        List<String> command = new ArrayList<String>();
-        if (System.getProperty(SVCTAG_STCLIENT_CMD) != null) {
-            // This is for jtreg testing use. This will be set to something
-            // like:
-            // $JAVA_HOME/bin/java -cp $TEST_DIR \
-            //    -Dstclient.registry.path=$TEST_DIR/registry.xml \
-            //    SvcTagClient
-            //
-            // On Windows, the JAVA_HOME and TEST_DIR path could contain
-            // space e.g. c:\Program Files\Java\jdk1.6.0_05\bin\java.
-            // The SVCTAG_STCLIENT_CMD must be set with a list of
-            // space-separated parameters.  If a parameter contains spaces,
-            // it must be quoted with '"'.
-
-            String cmd = getSTclient();
-            int len = cmd.length();
-            int i = 0;
-            while (i < len) {
-                char separator = ' ';
-                if (cmd.charAt(i) == '"') {
-                    separator = '"';
-                    i++;
-                }
-                // look for the separator or matched the closing '"'
-                int j;
-                for (j = i+1; j < len; j++) {
-                    if (cmd.charAt(j) == separator) {
-                        break;
-                    }
-                }
-
-                if (i == j-1) {
-                    // add an empty parameter
-                    command.add("\"\"");
-                } else {
-                    // double quotes and space are not included
-                    command.add(cmd.substring(i,j));
-                }
-
-                // skip spaces
-                for (i = j+1; i < len; i++) {
-                    if (!Character.isSpaceChar(cmd.charAt(i))) {
-                        break;
-                    }
-                }
-            }
-            if (isVerbose()) {
-                System.out.println("Command list:");
-                for (String s : command) {
-                    System.out.println(s);
-                }
-            }
-        } else {
-            command.add(getSTclient());
-        }
-        return command;
-    }
-
-    // Returns null if the service tag record not found;
-    // or throw UnauthorizedAccessException or IOException
-    // based on the exitValue.
-    private static ServiceTag checkReturnError(int exitValue,
-                                               String output,
-                                               ServiceTag st) throws IOException {
-        switch (exitValue) {
-            case ST_ERR_REC_NOT_FOUND:
-                return null;
-            case ST_ERR_NOT_AUTH:
-                if (st != null) {
-                    throw new UnauthorizedAccessException(
-                        "Not authorized to access " + st.getInstanceURN() +
-                        " installer_uid=" + st.getInstallerUID());
-                } else  {
-                    throw new UnauthorizedAccessException(
-                        "Not authorized:" + output);
-                }
-            default:
-                throw new IOException("stclient exits with error" +
-                     " (" + exitValue + ")\n" + output);
-        }
-    }
-
-    /**
-     * Adds a service tag to this registry.
-     * If the given service tag has an empty <tt>instance_urn</tt>,
-     * this helper class will generate a URN and place it in the
-     * copy of the service tag in this registry.
-     * This method will return the {@code ServiceTag} representing
-     * the service tag entry to this registry.
-     *
-     * @param st {@code ServiceTag} object
-     * @return a {@code ServiceTag} object representing the service tag
-     *         entry to this registry.
-     *
-     * @throws IllegalArgumentException if a service tag of the same
-     * <tt>instance_urn</tt> already exists in this registry.
-     *
-     * @throws java.io.IOException if an I/O error occurs in this operation.
-     */
-    public ServiceTag addServiceTag(ServiceTag st) throws IOException {
-        List<String> command = getCommandList();
-        command.add("-a");
-        if (st.getInstanceURN().length() > 0) {
-            ServiceTag sysSvcTag = getServiceTag(st.getInstanceURN());
-            if (sysSvcTag != null) {
-                throw new IllegalArgumentException("Instance_urn = " +
-                    st.getInstanceURN() + " already exists");
-            }
-            command.add("-i");
-            command.add(st.getInstanceURN());
-        }
-        command.add("-p");
-        command.add(st.getProductName());
-        command.add("-e");
-        command.add(st.getProductVersion());
-        command.add("-t");
-        command.add(st.getProductURN());
-        if (st.getProductParentURN().length() > 0) {
-            command.add("-F");
-            command.add(st.getProductParentURN());
-        }
-        command.add("-P");
-        command.add(st.getProductParent());
-        if (st.getProductDefinedInstanceID().length() > 0) {
-            command.add("-I");
-            command.add(st.getProductDefinedInstanceID());
-        }
-        command.add("-m");
-        command.add(st.getProductVendor());
-        command.add("-A");
-        command.add(st.getPlatformArch());
-        command.add("-z");
-        command.add(st.getContainer());
-        command.add("-S");
-        command.add(st.getSource());
-
-        BufferedReader in = null;
-        try {
-            ProcessBuilder pb = new ProcessBuilder(command);
-            Process p = pb.start();
-            String output = commandOutput(p);
-            if (isVerbose()) {
-                System.out.println("Output from stclient -a command:");
-                System.out.println(output);
-            }
-            String urn = "";
-            if (p.exitValue() == 0) {
-                // Obtain the instance urn from the stclient output
-                in = new BufferedReader(new StringReader(output));
-                String line = null;
-                while ((line = in.readLine()) != null) {
-                    line = line.trim();
-                    if (line.startsWith(INSTANCE_URN_DESC)) {
-                        urn = line.substring(INSTANCE_URN_DESC.length());
-                        break;
-                    }
-                }
-                if (urn.length() == 0) {
-                    throw new IOException("Error in creating service tag:\n" +
-                        output);
-                }
-                return getServiceTag(urn);
-            } else {
-                return checkReturnError(p.exitValue(), output, st);
-            }
-        } finally {
-            if (in != null) {
-                in.close();
-            }
-        }
-    }
-
-    /**
-     * Removes a service tag of the given <tt>instance_urn</tt> from this
-     * registry.
-     *
-     * @param instanceURN the <tt>instance_urn</tt> of the service tag
-     *        to be removed.
-     *
-     * @return the {@code ServiceTag} object removed from this registry;
-     * or {@code null} if the service tag does not exist in this registry.
-     *
-     * @throws UnauthorizedAccessException if the user is not authorized to
-     * remove the service tag of the given <tt>instance_urn</tt>
-     * from this registry.
-     *
-     * @throws java.io.IOException if an I/O error occurs in this operation.
-     */
-    public ServiceTag removeServiceTag(String instanceURN) throws IOException {
-        ServiceTag st = getServiceTag(instanceURN);
-        if (st == null) {
-            return null;
-        }
-
-        List<String> command = getCommandList();
-        command.add("-d");
-        command.add("-i");
-        command.add(instanceURN);
-
-        ProcessBuilder pb = new ProcessBuilder(command);
-        Process p = pb.start();
-        String output = commandOutput(p);
-        if (isVerbose()) {
-            System.out.println("Output from stclient -d command:");
-            System.out.println(output);
-        }
-        if (p.exitValue() == 0) {
-            return st;
-        } else {
-            return checkReturnError(p.exitValue(), output, st);
-        }
-    }
-
-    /**
-     * Updates the <tt>product_defined_instance_id</tt> in the service tag
-     * of the specified <tt>instance_urn</tt> in this registry.
-     *
-     * @param instanceURN the <tt>instance_urn</tt> of the service tag to be updated.
-     * @param productDefinedInstanceID the value of the
-     * <tt>product_defined_instance_id</tt> to be set.
-     *
-     * @return the updated {@code ServiceTag} object;
-     * or {@code null} if the service tag does not exist in this
-     * registry.
-     *
-     * @throws UnauthorizedAccessException if the user is not authorized to
-     * update the service tag from this registry.
-     *
-     * @throws IOException if an I/O error occurs in this operation.
-     */
-    public ServiceTag updateServiceTag(String instanceURN,
-                                       String productDefinedInstanceID)
-            throws IOException {
-        ServiceTag svcTag = getServiceTag(instanceURN);
-        if (svcTag == null) {
-            return null;
-        }
-
-        List<String> command = getCommandList();
-        command.add("-u");
-        command.add("-i");
-        command.add(instanceURN);
-        command.add("-I");
-        if (productDefinedInstanceID.length() > 0) {
-            command.add(productDefinedInstanceID);
-        } else {
-            command.add("\"\"");
-        }
-
-        ProcessBuilder pb = new ProcessBuilder(command);
-        Process p = pb.start();
-        String output = commandOutput(p);
-        if (isVerbose()) {
-            System.out.println("Output from stclient -u command:");
-            System.out.println(output);
-        }
-
-        if (p.exitValue() == 0) {
-            return getServiceTag(instanceURN);
-        } else {
-            return checkReturnError(p.exitValue(), output, svcTag);
-        }
-    }
-
-    /**
-     * Returns a {@code ServiceTag} object of the given  <tt>instance_urn</tt>
-     * in this registry.
-     *
-     * @param instanceURN the  <tt>instance_urn</tt> of the service tag
-     * @return a {@code ServiceTag} object of the given <tt>instance_urn</tt>
-     * in this registry; or {@code null} if not found.
-     *
-     * @throws java.io.IOException if an I/O error occurs in this operation.
-     */
-    public ServiceTag getServiceTag(String instanceURN) throws IOException {
-        if (instanceURN == null) {
-            throw new NullPointerException("instanceURN is null");
-        }
-
-        List<String> command = getCommandList();
-        command.add("-g");
-        command.add("-i");
-        command.add(instanceURN);
-
-        ProcessBuilder pb = new ProcessBuilder(command);
-        Process p = pb.start();
-        String output = commandOutput(p);
-        if (isVerbose()) {
-            System.out.println("Output from stclient -g command:");
-            System.out.println(output);
-        }
-        if (p.exitValue() == 0) {
-            return parseServiceTag(output);
-        } else {
-            return checkReturnError(p.exitValue(), output, null);
-        }
-    }
-
-    private ServiceTag parseServiceTag(String output) throws IOException {
-        BufferedReader in = null;
-        try {
-            Properties props = new Properties();
-            // parse the service tag output from stclient
-            in = new BufferedReader(new StringReader(output));
-            String line = null;
-            while ((line = in.readLine()) != null) {
-                if ((line = line.trim()).length() > 0) {
-                    String[] ss = line.trim().split("=", 2);
-                    if (ss.length == 2) {
-                        props.setProperty(ss[0].trim(), ss[1].trim());
-                    } else {
-                        props.setProperty(ss[0].trim(), "");
-                    }
-                }
-            }
-
-            String urn = props.getProperty(ST_NODE_INSTANCE_URN);
-            String productName = props.getProperty(ST_NODE_PRODUCT_NAME);
-            String productVersion = props.getProperty(ST_NODE_PRODUCT_VERSION);
-            String productURN = props.getProperty(ST_NODE_PRODUCT_URN);
-            String productParent = props.getProperty(ST_NODE_PRODUCT_PARENT);
-            String productParentURN = props.getProperty(ST_NODE_PRODUCT_PARENT_URN);
-            String productDefinedInstanceID =
-                props.getProperty(ST_NODE_PRODUCT_DEFINED_INST_ID);
-            String productVendor = props.getProperty(ST_NODE_PRODUCT_VENDOR);
-            String platformArch = props.getProperty(ST_NODE_PLATFORM_ARCH);
-            String container = props.getProperty(ST_NODE_CONTAINER);
-            String source = props.getProperty(ST_NODE_SOURCE);
-            int installerUID =
-                Util.getIntValue(props.getProperty(ST_NODE_INSTALLER_UID));
-            Date timestamp =
-                Util.parseTimestamp(props.getProperty(ST_NODE_TIMESTAMP));
-
-            return new ServiceTag(urn,
-                                  productName,
-                                  productVersion,
-                                  productURN,
-                                  productParent,
-                                  productParentURN,
-                                  productDefinedInstanceID,
-                                  productVendor,
-                                  platformArch,
-                                  container,
-                                  source,
-                                  installerUID,
-                                  timestamp);
-        } finally {
-            if (in != null) {
-                in.close();
-            }
-        }
-
-    }
-
-    /**
-     * Returns the service tags of the specified
-     * <tt>product_urn</tt> in this registry.
-     *
-     * @param productURN the  <tt>product_urn</tt> to look up
-     * @return a {@code Set} of {@code ServiceTag} objects
-     * of the specified <tt>product_urn</tt> in this registry.
-     *
-     * @throws java.io.IOException if an I/O error occurs in this operation.
-     */
-    public Set<ServiceTag> findServiceTags(String productURN) throws IOException {
-        if (productURN == null) {
-            throw new NullPointerException("productURN is null");
-        }
-
-        List<String> command = getCommandList();
-        command.add("-f");
-        command.add("-t");
-        command.add(productURN);
-
-        BufferedReader in = null;
-        try {
-            ProcessBuilder pb = new ProcessBuilder(command);
-            Process p = pb.start();
-            String output = commandOutput(p);
-
-            Set<ServiceTag> instances = new HashSet<ServiceTag>();
-            if (p.exitValue() == 0) {
-                // parse the service tag output from stclient
-                in = new BufferedReader(new StringReader(output));
-                String line = null;
-                while ((line = in.readLine()) != null) {
-                    String s = line.trim();
-                    if (s.startsWith("urn:st:")) {
-                        instances.add(getServiceTag(s));
-                    }
-                }
-            } else {
-                checkReturnError(p.exitValue(), output, null);
-            }
-            return instances;
-        } finally {
-            if (in != null) {
-                in.close();
-            }
-        }
-    }
-}
--- a/jdk/src/share/classes/com/sun/servicetag/ServiceTag.java	Tue Apr 02 14:13:13 2013 -0400
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,634 +0,0 @@
-/*
- * Copyright (c) 2008, 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 com.sun.servicetag;
-
-import java.util.Date;
-import java.io.IOException;
-import static com.sun.servicetag.RegistrationDocument.*;
-
-/**
- * A service tag is an XML-based data structure that identifies a product or
- * a component on a system. The service tag schema is defined by the
- * Service Tags Technology. The location of the DTD file is platform dependent.
- * On Solaris, see <tt>/usr/share/lib/xml/dtd/servicetag.dtd</tt>.
- * <p>
- * A valid {@code ServiceTag} instance must comply to the service tag schema
- * and contain the following fields:
- * <ul>
- *   <li>{@link #getInstanceURN <tt>instance_urn</tt>}</li>
- *   <li>{@link #getProductName <tt>product_name</tt>}</li>
- *   <li>{@link #getProductVersion <tt>product_version</tt>}</li>
- *   <li>{@link #getProductURN <tt>product_urn</tt>}</li>
- *   <li>{@link #getProductParent <tt>product_parent</tt>}</li>
- *   <li>{@link #getProductParentURN <tt>product_parent_urn</tt>}</li>
- *   <li>{@link #getProductDefinedInstanceID <tt>product_defined_inst_id</tt>}</li>
- *   <li>{@link #getProductVendor <tt>product_vendor</tt>}</li>
- *   <li>{@link #getPlatformArch <tt>platform_arch</tt>}</li>
- *   <li>{@link #getContainer <tt>container</tt>}</li>
- *   <li>{@link #getSource <tt>source</tt>}</li>
- *   <li>{@link #getInstallerUID <tt>installer_uid</tt>}</li>
- *   <li>{@link #getTimestamp <tt>timestamp</tt>}</li>
- * </ul>
- *
- * The <tt>instance_urn</tt> can be specified when a {@code ServiceTag}
- * object is created, or it can be generated when it is added to
- * a {@link RegistrationData} object, or {@link Registry
- * system service tag registry}. The <tt>installer_uid</tt> and
- * <tt>timestamp</tt> are set when a {@code ServiceTag} object
- * is added to a {@link RegistrationData} object, or {@link Registry
- * system service tag registry}.
- *
- * @see <a href="https://sunconnection.sun.com/FAQ/sc_faq.html">Service Tags FAQ</a>
- */
-public class ServiceTag {
-
-    private String instanceURN;
-    private String productName;
-    private String productVersion;
-    private String productURN;
-    private String productParent;
-    private String productParentURN;
-    private String productDefinedInstanceID;
-    private String productVendor;
-    private String platformArch;
-    private String container;
-    private String source;
-    private int installerUID;
-    private Date timestamp;
-
-    // Service Tag Field Lengths (defined in sthelper.h)
-    // Since the constants defined in sthelper.h includes the null-terminated
-    // character, so minus 1 from the sthelper.h defined values.
-    private final int MAX_URN_LEN             = 256 - 1;
-    private final int MAX_PRODUCT_NAME_LEN    = 256 - 1;
-    private final int MAX_PRODUCT_VERSION_LEN = 64 - 1;
-    private final int MAX_PRODUCT_PARENT_LEN  = 256 - 1;
-    private final int MAX_PRODUCT_VENDOR_LEN  = 64 - 1;
-    private final int MAX_PLATFORM_ARCH_LEN   = 64 - 1;
-    private final int MAX_CONTAINER_LEN       = 64 - 1;
-    private final int MAX_SOURCE_LEN          = 64 - 1;
-
-    // private constructors
-    private ServiceTag() {
-    }
-    // package private
-    ServiceTag(String instanceURN,
-               String productName,
-               String productVersion,
-               String productURN,
-               String productParent,
-               String productParentURN,
-               String productDefinedInstanceID,
-               String productVendor,
-               String platformArch,
-               String container,
-               String source,
-               int installerUID,
-               Date timestamp) {
-        setInstanceURN(instanceURN);
-        setProductName(productName);
-        setProductVersion(productVersion);
-        setProductURN(productURN);
-        setProductParentURN(productParentURN);
-        setProductParent(productParent);
-        setProductDefinedInstanceID(productDefinedInstanceID);
-        setProductVendor(productVendor);
-        setPlatformArch(platformArch);
-        setContainer(container);
-        setSource(source);
-        setInstallerUID(installerUID);
-        setTimestamp(timestamp);
-    }
-
-    /**
-     * Creates a service tag object with no <tt>instance_urn</tt>.
-     *
-     * @param productName               the name of the product.
-     * @param productVersion            the version of the product.
-     * @param productURN                the uniform resource name of the product
-     * @param productParent             the name of the product's parent.
-     * @param productParentURN          the uniform resource name of the product's parent.
-     * @param productDefinedInstanceID  the instance identifier.
-     * @param productVendor             the vendor of the product.
-     * @param platformArch              the operating system architecture.
-     * @param container                 the container of the product.
-     * @param source                    the source of the product.
-     *
-     * @throws IllegalArgumentException if any value of the input fields
-     *    does not conform to the service tag XML schema.
-     */
-    public static ServiceTag newInstance(String productName,
-                                         String productVersion,
-                                         String productURN,
-                                         String productParent,
-                                         String productParentURN,
-                                         String productDefinedInstanceID,
-                                         String productVendor,
-                                         String platformArch,
-                                         String container,
-                                         String source) {
-          return new ServiceTag("", /* empty instance_urn */
-                                productName,
-                                productVersion,
-                                productURN,
-                                productParent,
-                                productParentURN,
-                                productDefinedInstanceID,
-                                productVendor,
-                                platformArch,
-                                container,
-                                source,
-                                -1,
-                                null);
-    }
-
-    /**
-     * Creates a service tag object with a specified <tt>instance_urn</tt>.
-     *
-     * @param instanceURN               the uniform resource name of this instance.
-     * @param productName               the name of the product.
-     * @param productVersion            the version of the product.
-     * @param productURN                the uniform resource name of the product
-     * @param productParent             the name of the product's parent.
-     * @param productParentURN          the uniform resource name of the product's parent.
-     * @param productDefinedInstanceID  the instance identifier.
-     * @param productVendor             the vendor of the product.
-     * @param platformArch              the operating system architecture.
-     * @param container                 the container of the product.
-     * @param source                    the source of the product.
-     *
-     * @throws IllegalArgumentException if any value of the input fields
-     *    does not conform to the service tag XML schema.
-     */
-    public static ServiceTag newInstance(String instanceURN,
-                                         String productName,
-                                         String productVersion,
-                                         String productURN,
-                                         String productParent,
-                                         String productParentURN,
-                                         String productDefinedInstanceID,
-                                         String productVendor,
-                                         String platformArch,
-                                         String container,
-                                         String source) {
-          return new ServiceTag(instanceURN,
-                                productName,
-                                productVersion,
-                                productURN,
-                                productParent,
-                                productParentURN,
-                                productDefinedInstanceID,
-                                productVendor,
-                                platformArch,
-                                container,
-                                source,
-                                -1,
-                                null);
-    }
-
-    // Creates a copy of the ServiceTag instance
-    // with instance_urn and timestamp initialized
-    static ServiceTag newInstanceWithUrnTimestamp(ServiceTag st) {
-        String instanceURN =
-            (st.getInstanceURN().length() == 0 ? Util.generateURN() :
-                                                 st.getInstanceURN());
-        ServiceTag svcTag = new ServiceTag(instanceURN,
-                                           st.getProductName(),
-                                           st.getProductVersion(),
-                                           st.getProductURN(),
-                                           st.getProductParent(),
-                                           st.getProductParentURN(),
-                                           st.getProductDefinedInstanceID(),
-                                           st.getProductVendor(),
-                                           st.getPlatformArch(),
-                                           st.getContainer(),
-                                           st.getSource(),
-                                           st.getInstallerUID(),
-                                           new Date());
-        return svcTag;
-    }
-
-    /**
-     * Returns a uniform resource name (URN) in this format:
-     * <blockquote>
-     * "<tt>urn:st:<32-char {@link java.util.UUID uuid}></tt>"
-     * </blockquote>
-     * @return a URN.
-     */
-    public static String generateInstanceURN() {
-        return Util.generateURN();
-    }
-
-    /**
-     * Returns the uniform resource name of this service tag instance.
-     *
-     * @return  the <tt>instance_urn</tt> of this service tag.
-     */
-    public String getInstanceURN() {
-        return instanceURN;
-    }
-
-    /**
-     * Returns the name of the product.
-     *
-     * @return the product name.
-     */
-    public String getProductName() {
-        return productName;
-    }
-
-    /**
-     * Returns the version of the product.
-     *
-     * @return the product version.
-     */
-    public String getProductVersion() {
-        return productVersion;
-    }
-
-    /**
-     * Returns the uniform resource name of the product.
-     *
-     * @return the product URN.
-     */
-    public String getProductURN() {
-        return productURN;
-    }
-
-    /**
-     * Returns the uniform resource name of the product's parent.
-     *
-     * @return the product's parent URN.
-     */
-    public String getProductParentURN() {
-        return productParentURN;
-    }
-
-    /**
-     * Returns the name of the product's parent.
-     *
-     * @return the product's parent name.
-     */
-    public String getProductParent() {
-        return productParent;
-    }
-
-    /**
-     * Returns the identifier defined for this product instance.
-     *
-     * @return  the identifier defined for this product instance.
-     */
-    public String getProductDefinedInstanceID() {
-        return productDefinedInstanceID;
-    }
-
-    /**
-     * Returns the vendor of the product.
-     *
-     * @return the product vendor.
-     */
-    public String getProductVendor() {
-        return productVendor;
-    }
-
-    /**
-     * Returns the platform architecture on which the product
-     * is running on.
-     *
-     * @return the platform architecture on which the product is running on.
-     */
-    public String getPlatformArch() {
-        return platformArch;
-    }
-
-    /**
-     * Returns the timestamp.  This timestamp is set when this service tag
-     * is added to or updated in a {@code RegistrationData} object or
-     * the system service tag registry.
-     * This method may return {@code null}.
-     *
-     * @return timestamp when this service tag
-     * is added to or updated in a {@code RegistrationData} object or
-     * the system service tag registry, or {@code null}.
-     */
-    public Date getTimestamp() {
-        if (timestamp != null) {
-            return (Date) timestamp.clone();
-        } else {
-            return null;
-        }
-    }
-
-
-    /**
-     * Returns the container of the product.
-     *
-     * @return the container of the product.
-     */
-    public String getContainer() {
-        return container;
-    }
-
-    /**
-     * Returns the source of this service tag.
-     *
-     * @return  source of this service tag.
-     */
-    public String getSource() {
-        return source;
-    }
-
-    /**
-     * Returns the UID. The UID is set when this service tag
-     * is added to or updated in the system service tag registry.
-     * This is platform dependent whose default value is {@code -1}.
-     * When this service tag is added to a {@code RegistrationData},
-     * the UID is not set.
-     *
-     * @return the UID of whom this service tag
-     * is added to or updated in the system service tag registry,
-     * or {@code -1}.
-     */
-    public int getInstallerUID() {
-        return installerUID;
-    }
-
-    // The following setter methods are used to validate the
-    // input field when constructing a ServiceTag instance
-
-    private void setInstanceURN(String instanceURN) {
-        if (instanceURN == null) {
-            throw new NullPointerException("Parameter instanceURN cannot be null");
-        }
-        if (instanceURN.length() > MAX_URN_LEN) {
-            throw new IllegalArgumentException("instanceURN \"" + instanceURN +
-                "\" exceeds maximum length " + MAX_URN_LEN);
-        }
-        this.instanceURN = instanceURN;
-    }
-
-    private void setProductName(String productName) {
-        if (productName == null) {
-            throw new NullPointerException("Parameter productName cannot be null");
-        }
-        if (productName.length() == 0) {
-            throw new IllegalArgumentException("product name cannot be empty");
-        }
-        if (productName.length() > MAX_PRODUCT_NAME_LEN) {
-            throw new IllegalArgumentException("productName \"" + productName +
-                "\" exceeds maximum length " + MAX_PRODUCT_NAME_LEN);
-        }
-        this.productName = productName;
-    }
-
-    private void setProductVersion(String productVersion) {
-        if (productVersion == null) {
-            throw new NullPointerException("Parameter productVersion cannot be null");
-        }
-
-        if (productVersion.length() == 0) {
-            throw new IllegalArgumentException("product version cannot be empty");
-        }
-        if (productVersion.length() > MAX_PRODUCT_VERSION_LEN) {
-            throw new IllegalArgumentException("productVersion \"" +
-                productVersion + "\" exceeds maximum length " +
-                MAX_PRODUCT_VERSION_LEN);
-        }
-        this.productVersion = productVersion;
-    }
-
-    private void setProductURN(String productURN) {
-        if (productURN == null) {
-            throw new NullPointerException("Parameter productURN cannot be null");
-        }
-        if (productURN.length() == 0) {
-            throw new IllegalArgumentException("product URN cannot be empty");
-        }
-        if (productURN.length() > MAX_URN_LEN) {
-            throw new IllegalArgumentException("productURN \"" + productURN +
-                "\" exceeds maximum length " + MAX_URN_LEN);
-        }
-        this.productURN = productURN;
-    }
-
-    private void setProductParentURN(String productParentURN) {
-        if (productParentURN == null) {
-            throw new NullPointerException("Parameter productParentURN cannot be null");
-        }
-        // optional field - can be empty
-        if (productParentURN.length() > MAX_URN_LEN) {
-            throw new IllegalArgumentException("productParentURN \"" +
-                productParentURN + "\" exceeds maximum length " +
-                MAX_URN_LEN);
-        }
-        this.productParentURN = productParentURN;
-    }
-
-    private void setProductParent(String productParent) {
-        if (productParent == null) {
-            throw new NullPointerException("Parameter productParent cannot be null");
-        }
-        if (productParent.length() == 0) {
-            throw new IllegalArgumentException("product parent cannot be empty");
-        }
-        if (productParent.length() > MAX_PRODUCT_PARENT_LEN) {
-            throw new IllegalArgumentException("productParent \"" +
-                productParent + "\" exceeds maximum length " +
-                MAX_PRODUCT_PARENT_LEN);
-        }
-        this.productParent = productParent;
-    }
-
-    void setProductDefinedInstanceID(String productDefinedInstanceID) {
-        if (productDefinedInstanceID == null) {
-            throw new NullPointerException("Parameter productDefinedInstanceID cannot be null");
-        }
-        if (productDefinedInstanceID.length() > MAX_URN_LEN) {
-            throw new IllegalArgumentException("productDefinedInstanceID \"" +
-                productDefinedInstanceID + "\" exceeds maximum length " +
-                MAX_URN_LEN);
-        }
-        // optional field - can be empty
-        this.productDefinedInstanceID = productDefinedInstanceID;
-    }
-
-    private void setProductVendor(String productVendor) {
-        if (productVendor == null) {
-            throw new NullPointerException("Parameter productVendor cannot be null");
-        }
-        if (productVendor.length() == 0) {
-            throw new IllegalArgumentException("product vendor cannot be empty");
-        }
-        if (productVendor.length() > MAX_PRODUCT_VENDOR_LEN) {
-            throw new IllegalArgumentException("productVendor \"" +
-                productVendor + "\" exceeds maximum length " +
-                MAX_PRODUCT_VENDOR_LEN);
-        }
-        this.productVendor = productVendor;
-    }
-
-    private void setPlatformArch(String platformArch) {
-        if (platformArch == null) {
-            throw new NullPointerException("Parameter platformArch cannot be null");
-        }
-        if (platformArch.length() == 0) {
-            throw new IllegalArgumentException("platform architecture cannot be empty");
-        }
-        if (platformArch.length() > MAX_PLATFORM_ARCH_LEN) {
-            throw new IllegalArgumentException("platformArch \"" +
-                platformArch + "\" exceeds maximum length " +
-                MAX_PLATFORM_ARCH_LEN);
-        }
-        this.platformArch = platformArch;
-    }
-
-    private void setTimestamp(Date timestamp) {
-        // can be null
-        this.timestamp = timestamp;
-    }
-
-    private void setContainer(String container) {
-        if (container == null) {
-            throw new NullPointerException("Parameter container cannot be null");
-        }
-        if (container.length() == 0) {
-            throw new IllegalArgumentException("container cannot be empty");
-        }
-        if (container.length() > MAX_CONTAINER_LEN) {
-            throw new IllegalArgumentException("container \"" +
-                container + "\" exceeds maximum length " +
-                MAX_CONTAINER_LEN);
-        }
-        this.container = container;
-    }
-
-    private void setSource(String source) {
-        if (source == null) {
-            throw new NullPointerException("Parameter source cannot be null");
-        }
-        if (source.length() == 0) {
-            throw new IllegalArgumentException("source cannot be empty");
-        }
-        if (source.length() > MAX_SOURCE_LEN) {
-            throw new IllegalArgumentException("source \"" + source +
-                "\" exceeds maximum length " + MAX_SOURCE_LEN);
-        }
-        this.source = source;
-    }
-
-    private void setInstallerUID(int installerUID) {
-        this.installerUID = installerUID;
-    }
-
-    /**
-     * Compares this service tag to the specified object.
-     * The result is {@code true} if and only if the argument is
-     * not {@code null} and is a {@code ServiceTag} object whose
-     * <tt>instance_urn</tt> is the same as the
-     * <tt>instance_urn</tt> of this service tag.
-     *
-     * @return {@code true} if this service tag is the same as
-     * the specified object.
-     */
-    @Override
-    public boolean equals(Object obj) {
-        if (obj == null || !(obj instanceof ServiceTag)) {
-            return false;
-        }
-        ServiceTag st = (ServiceTag) obj;
-        if (st == this) {
-            return true;
-        }
-        return st.getInstanceURN().equals(getInstanceURN());
-    }
-
-    /**
-     * Returns the hash code value for this service tag.
-     * @return the hash code value for this service tag.
-     */
-    @Override
-    public int hashCode() {
-        int hash = 7;
-        hash = 19 * hash + (this.instanceURN != null ? this.instanceURN.hashCode() : 0);
-        return hash;
-    }
-
-    /**
-     * Returns the string representation of this service tag.
-     * The format is implementation specific.
-     *
-     * @return the string representation of this service tag.
-     */
-    public String toString() {
-        StringBuilder sb = new StringBuilder();
-        sb.append(ST_NODE_INSTANCE_URN).append("=").append(instanceURN).append("\n");
-        sb.append(ST_NODE_PRODUCT_NAME).append("=").append(productName).append("\n");
-        sb.append(ST_NODE_PRODUCT_VERSION).append("=").append(productVersion).append("\n");
-        sb.append(ST_NODE_PRODUCT_URN).append("=").append(productURN).append("\n");
-        sb.append(ST_NODE_PRODUCT_PARENT_URN).append("=").append(productParentURN).append("\n");
-        sb.append(ST_NODE_PRODUCT_PARENT).append("=").append(productParent).append("\n");
-        sb.append(ST_NODE_PRODUCT_DEFINED_INST_ID).append("=").append(productDefinedInstanceID).append("\n");
-        sb.append(ST_NODE_PRODUCT_VENDOR).append("=").append(productVendor).append("\n");
-        sb.append(ST_NODE_PLATFORM_ARCH).append("=").append(platformArch).append("\n");
-        sb.append(ST_NODE_TIMESTAMP).append("=").append(Util.formatTimestamp(timestamp)).append("\n");
-        sb.append(ST_NODE_CONTAINER).append("=").append(container).append("\n");
-        sb.append(ST_NODE_SOURCE).append("=").append(source).append("\n");
-        sb.append(ST_NODE_INSTALLER_UID).append("=").append(String.valueOf(installerUID)).append("\n");
-        return sb.toString();
-    }
-
-
-    /**
-     * Returns the {@link ServiceTag} instance for the running Java
-     * platform. The {@link ServiceTag#setSource source} field
-     * of the {@code ServiceTag} will be set to the given {@code source}.
-     * This method will return {@code null} if there is no service tag
-     * for the running Java platform.
-     * <p>
-     * This method is designed for Sun software that bundles the JDK
-     * or the JRE to use. It is recommended that the {@code source}
-     * string contains information about the bundling software
-     * such as the name and the version of the software bundle,
-     * for example,
-     * <blockquote>
-     * <tt>NetBeans IDE 6.0 with JDK 6 Update 5 Bundle</tt>
-     * </blockquote>
-     * in a NetBeans/JDK bundle.
-     * <p>
-     * At the first time to call this method the application
-     * is required to have the write permission to the installed
-     * directory of this running JDK or JRE instance.
-     *
-     * @param source the source that bundles the JDK or the JRE.
-     * @return a {@code ServiceTag} object for the Java platform,
-     *         or {@code null} if not supported.
-     * @throws IOException if an error occurs in this operation.
-     */
-    public static ServiceTag getJavaServiceTag(String source) throws IOException {
-        return Installer.getJavaServiceTag(source);
-    }
-
-}
--- a/jdk/src/share/classes/com/sun/servicetag/SolarisServiceTag.java	Tue Apr 02 14:13:13 2013 -0400
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,62 +0,0 @@
-/*
- * Copyright (c) 2008, 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 com.sun.servicetag;
-
-import java.io.IOException;
-import java.util.Set;
-
-/**
- * Utility class to obtain the service tag for the Solaris Operating System.
- */
-class SolarisServiceTag {
-    private final static String[] SolarisProductURNs = new String[] {
-        "urn:uuid:a7a38948-2bd5-11d6-98ce-9d3ac1c0cfd7", /* Solaris 8 */
-        "urn:uuid:4f82caac-36f3-11d6-866b-85f428ef944e", /* Solaris 9 */
-        "urn:uuid:a19de03b-48bc-11d9-9607-080020a9ed93", /* Solaris 9 sparc */
-        "urn:uuid:4c35c45b-4955-11d9-9607-080020a9ed93", /* Solaris 9 x86 */
-        "urn:uuid:5005588c-36f3-11d6-9cec-fc96f718e113", /* Solaris 10 */
-        "urn:uuid:6df19e63-7ef5-11db-a4bd-080020a9ed93"  /* Solaris 11 */
-    };
-
-    /**
-     * Returns null if not found.
-     *
-     * There is only one service tag for the operating system.
-     */
-    static ServiceTag getServiceTag() throws IOException {
-        if (Registry.isSupported()) {
-            Registry streg = Registry.getSystemRegistry();
-            for (String parentURN : SolarisProductURNs) {
-                Set<ServiceTag> instances = streg.findServiceTags(parentURN);
-                for (ServiceTag st : instances) {
-                    // there should have only one service tag for the OS
-                    return st;
-                }
-            }
-        }
-        return null;
-    }
-}
--- a/jdk/src/share/classes/com/sun/servicetag/SolarisSystemEnvironment.java	Tue Apr 02 14:13:13 2013 -0400
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,159 +0,0 @@
-/*
- * Copyright (c) 2008, 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 com.sun.servicetag;
-
-// This class is a copy of the com.sun.scn.servicetags.SolarisSystemEnvironment
-// class from the Sun Connection source.
-//
-// The Service Tags team maintains the latest version of the implementation
-// for system environment data collection.  JDK will include a copy of
-// the most recent released version for a JDK release. We rename
-// the package to com.sun.servicetag so that the Sun Connection
-// product always uses the latest version from the com.sun.scn.servicetags
-// package. JDK and users of the com.sun.servicetag API
-// (e.g. NetBeans and SunStudio) will use the version in JDK.
-//
-// So we keep this class in src/share/classes instead of src/<os>/classes.
-
-import java.io.*;
-
-/**
- * Solaris implementation of the SystemEnvironment class.
- */
-class SolarisSystemEnvironment extends SystemEnvironment {
-    private static final String ORACLE = "Oracle Corporation";
-    SolarisSystemEnvironment() {
-        setHostId(getCommandOutput("/usr/bin/hostid"));
-        setSystemModel(getCommandOutput("/usr/bin/uname", "-i"));
-        setSystemManufacturer(getSolarisSystemManufacturer());
-        setCpuManufacturer(getSolarisCpuManufacturer());
-        setSerialNumber(getSolarisSN());
-    }
-
-    /**
-     * Tries to obtain the cpu manufacturer.
-     * @return The cpu manufacturer (an empty string if not found or an error occurred)
-     */
-    private String getSolarisCpuManufacturer() {
-        // not fully accurate, this could be another manufacturer (fujitsu for example)
-        if ("sparc".equalsIgnoreCase(System.getProperty("os.arch"))) {
-            return ORACLE;
-        }
-
-        // if we're here, then we'll try smbios (type 4)
-        return getSmbiosData("4", "Manufacturer: ");
-    }
-
-    /**
-     * Tries to obtain the system manufacturer.
-     * @return The system manufacturer (an empty string if not found or an error occurred)
-     */
-    private String getSolarisSystemManufacturer() {
-        // not fully accurate, this could be another manufacturer (fujitsu for example)
-        if ("sparc".equalsIgnoreCase(System.getProperty("os.arch"))) {
-            return ORACLE;
-        }
-
-        // if we're here, then we'll try smbios (type 1)
-        return getSmbiosData("1", "Manufacturer: ");
-    }
-
-    /**
-     * Tries to obtain the serial number.
-     * @return The serial number (empty string if not found or an error occurred)
-     */
-    private String getSolarisSN() {
-        // try to read from the psn file if it exists
-        String tmp = getFileContent("/var/run/psn");
-        if (tmp.length() > 0) {
-            return tmp.trim();
-        }
-
-        // if we're here, then we'll try sneep
-        String tmpSN = getSneepSN();
-        if (tmpSN.length() > 0) {
-            return tmpSN;
-        }
-
-        // if we're here, then we'll try smbios (type 1)
-        tmpSN = getSmbiosData("1", "Serial Number: ");
-        if (tmpSN.length() > 0) {
-            return tmpSN;
-        }
-
-        // if we're here, then we'll try smbios (type 3)
-        tmpSN = getSmbiosData("3", "Serial Number: ");
-        if (tmpSN.length() > 0) {
-            return tmpSN;
-        }
-
-        // give up and return
-        return "";
-    }
-
-    // Sample smbios output segment:
-    // ID    SIZE TYPE
-    // 1     150  SMB_TYPE_SYSTEM (system information)
-    //
-    //   Manufacturer: Oracle Corporation
-    //   Product: Sun Fire X4600
-    //   Version: To Be Filled By O.E.M.
-    //   Serial Number: 00:14:4F:45:0C:2A
-    private String getSmbiosData(String type, String target) {
-        String output = getCommandOutput("/usr/sbin/smbios", "-t", type);
-        for (String s : output.split("\n")) {
-            if (s.contains(target)) {
-                int indx = s.indexOf(target) + target.length();
-                if (indx < s.length()) {
-                    String tmp = s.substring(indx).trim();
-                    String lowerCaseStr = tmp.toLowerCase();
-                    if (!lowerCaseStr.startsWith("not available")
-                            && !lowerCaseStr.startsWith("to be filled by o.e.m")) {
-                        return tmp;
-                    }
-                }
-            }
-        }
-
-        return "";
-    }
-
-    private String getSneepSN() {
-        String basedir = getCommandOutput("pkgparam","SUNWsneep","BASEDIR");
-        File f = new File(basedir + "/bin/sneep");
-        if (f.exists()) {
-            String sneepSN = getCommandOutput(basedir + "/bin/sneep");
-            if (sneepSN.equalsIgnoreCase("unknown")) {
-                return "";
-            } else {
-                return sneepSN;
-            }
-        } else {
-            return "";
-        }
-    }
-
-}
--- a/jdk/src/share/classes/com/sun/servicetag/SunConnection.java	Tue Apr 02 14:13:13 2013 -0400
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,297 +0,0 @@
-/*
- * Copyright (c) 2008, 2011, 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 com.sun.servicetag;
-
-import java.io.*;
-import java.net.URISyntaxException;
-import java.net.URL;
-import java.net.HttpURLConnection;
-import java.net.MalformedURLException;
-import java.io.OutputStreamWriter;
-import java.util.Locale;
-import javax.net.ssl.HttpsURLConnection;
-
-/**
- * Sun Connection Class for Product Registration.
- *
- * Registration Web Application Interface
- * 1) POST the product registry to the output stream of the registration
- *    relay service.
- * 2) Open the webapp URL from a browser with the following parameters:
- *    registry-urn
- *    product=jdk
- *    locale=<default-locale>
- *    version=<version>
- *
- * @see https://sn-tools.central.sun.com/twiki/pub/ServiceTags/RegistrationRelayService/
- *
- */
-class SunConnection {
-
-    private static String JDK_REGISTRATION_URL = "https://hs-ws1.oracle.com/";
-    private static String SANDBOX_TESTING_URL = "https://hs-ws1-tst.oracle.com/";
-    private static String REGISTRATION_WEB_PATH = "RegistrationWeb/register";
-
-    // System properties for testing
-    private static String SVCTAG_REGISTER_TESTING = "servicetag.register.testing";
-    private static String SVCTAG_REGISTRATION_URL = "servicetag.registration.url";
-    private static String SVCTAG_CONNECTION_TIMEOUT = "servicetag.connection.timeout";
-
-    private SunConnection() {
-    }
-
-    /**
-     * Returns a URL for JDK registration interfacing with the Sun Connection
-     * registration relay service in this form:
-     *   <registration-url>/<registry_urn>?product=jdk&locale=<locale>
-     *
-     * The <registration-url> can be overridden by an environment
-     * variable or a system property.
-     *
-     * 1) "servicetag.register.testing" system property to switch to the
-     *    Sun Connection registration sandbox testing.
-     * 2) "servicetag.registration.url" system property to override
-     *    the URL
-     * 3) Default production URL
-     *
-     */
-    static URL getRegistrationURL(String registrationURN, Locale locale, String version) {
-        String url = System.getProperty(SVCTAG_REGISTRATION_URL);
-        if (url == null) {
-            if (System.getProperty(SVCTAG_REGISTER_TESTING) != null) {
-                url = SANDBOX_TESTING_URL;
-            } else {
-                url = JDK_REGISTRATION_URL;
-            }
-        }
-        url += REGISTRATION_WEB_PATH;
-
-        // trim whitespaces
-        url = url.trim();
-        if (url.length() == 0) {
-            throw new InternalError("Empty registration url set");
-        }
-
-        // Add the registry_urn in the URL's query
-        String registerURL = rewriteURL(url, registrationURN, locale, version);
-        try {
-            return new URL(registerURL);
-        } catch (MalformedURLException ex) {
-            // should never reach here
-            throw new InternalError(ex.getMessage(), ex);
-        }
-    }
-
-    private static String rewriteURL(String url, String registryURN, Locale locale, String version) {
-        StringBuilder sb = new StringBuilder(url.trim());
-        int len = sb.length();
-        if (sb.charAt(len-1) != '/') {
-            sb.append('/');
-        }
-        sb.append(registryURN);
-        sb.append("?");
-        sb.append("product=jdk");
-        sb.append("&");
-        sb.append("locale=").append(locale.toString());
-        sb.append("&");
-        sb.append("version=").append(version);
-        return sb.toString();
-    }
-
-    /**
-     * Registers all products in the given product registry.  If it fails
-     * to post the service tag registry, open the browser with the offline
-     * registration page.
-     *
-     * @param regData registration data to be posted to the Sun Connection
-     *             for registration.
-     * @param locale Locale
-     * @param version JDK version
-     *
-     * @throws IOException if I/O error occurs in this operation
-     */
-    public static void register(RegistrationData regData,
-                                Locale locale,
-                                String version) throws IOException {
-        // Gets the URL for SunConnection registration relay service
-        URL url = getRegistrationURL(regData.getRegistrationURN(),
-                                     locale,
-                                     version);
-
-        // Post the Product Registry to Sun Connection
-        boolean succeed = postRegistrationData(url, regData);
-        if (succeed) {
-            // service tags posted successfully
-            // now prompt for registration
-            openBrowser(url);
-        } else {
-            // open browser with the offline registration page
-            openOfflineRegisterPage();
-        }
-    }
-
-    /**
-     * Opens a browser for JDK product registration.
-     * @param url Registration Webapp URL
-     */
-    private static void openBrowser(URL url) throws IOException {
-        if (!BrowserSupport.isSupported()) {
-            if (Util.isVerbose()) {
-                System.out.println("Browser is not supported");
-            }
-            return;
-        }
-
-        try {
-            BrowserSupport.browse(url.toURI());
-        } catch (URISyntaxException ex) {
-            throw new InternalError("Error in registering: " + ex.getMessage(), ex);
-        } catch (IllegalArgumentException ex) {
-            if (Util.isVerbose()) {
-                ex.printStackTrace();
-            }
-        } catch (UnsupportedOperationException ex) {
-            // ignore if not supported
-            if (Util.isVerbose()) {
-                ex.printStackTrace();
-            }
-        }
-    }
-
-    /**
-     * POST service tag registry to Sun Connection
-     * @param loc the URL of the webapp to handle the POST request
-     * @param streg the Service Tag registry
-     * @return true if posting succeeds; otherwise, false.
-     */
-    private static boolean postRegistrationData(URL url,
-                                                RegistrationData registration) {
-        try {
-            HttpsURLConnection con = (HttpsURLConnection) url.openConnection();
-            con.setDoInput(true);
-            con.setDoOutput(true);
-            con.setUseCaches(false);
-            con.setAllowUserInteraction(false);
-
-            // default 10 seconds timeout
-            String timeout = System.getProperty(SVCTAG_CONNECTION_TIMEOUT, "10");
-            con.setConnectTimeout(Util.getIntValue(timeout) * 1000);
-
-            if (Util.isVerbose()) {
-                System.out.println("Connecting to post registration data at " + url);
-            }
-
-            con.setRequestMethod("POST");
-            con.setRequestProperty("Content-Type", "text/xml;charset=\"utf-8\"");
-            con.connect();
-
-            OutputStream out = null;
-            try {
-                out = con.getOutputStream();
-                registration.storeToXML(out);
-                out.flush();
-            } finally {
-                if (out != null) {
-                    out.close();
-                }
-            }
-
-            int returnCode = con.getResponseCode();
-            if (Util.isVerbose()) {
-                System.out.println("POST return status = " + returnCode);
-                printReturnData(con, returnCode);
-            }
-            return (returnCode == HttpURLConnection.HTTP_OK);
-        } catch (MalformedURLException me) {
-            // should never reach here
-            throw new InternalError("Error in registering: " + me.getMessage(), me);
-        } catch (Exception ioe) {
-            // SocketTimeoutException, IOException or UnknownHostException
-            if (Util.isVerbose()) {
-                ioe.printStackTrace();
-            }
-            return false;
-        }
-    }
-
-    /**
-     * Opens the offline registratioin page in the browser.
-     *
-     */
-    private static void openOfflineRegisterPage()
-            throws IOException {
-        if (!BrowserSupport.isSupported()) {
-            if (Util.isVerbose()) {
-                System.out.println("Browser is not supported");
-            }
-            return;
-        }
-
-        File registerPage = Installer.getRegistrationHtmlPage();
-        try {
-            BrowserSupport.browse(registerPage.toURI());
-        } catch (FileNotFoundException ex) {
-            // should never reach here
-            throw new InternalError(
-                    "Error in launching " + registerPage + ": " + ex.getMessage()
-                    , ex);
-        } catch (IllegalArgumentException ex) {
-            if (Util.isVerbose()) {
-                ex.printStackTrace();
-            }
-        } catch (UnsupportedOperationException ex) {
-            // ignore if not supported
-            if (Util.isVerbose()) {
-                ex.printStackTrace();
-            }
-        }
-    }
-
-    private static void printReturnData(HttpURLConnection con, int returnCode)
-            throws IOException {
-        BufferedReader reader = null;
-        try {
-            if (returnCode < 400) {
-                reader = new BufferedReader(
-                             new InputStreamReader(con.getInputStream()));
-            } else {
-                reader = new BufferedReader(
-                             new InputStreamReader(con.getErrorStream()));
-            }
-            StringBuilder sb = new StringBuilder();
-            String line;
-            while ((line = reader.readLine()) != null) {
-                sb.append(line).append("\n");
-            }
-            System.out.println("Response is : ");
-            System.out.println(sb.toString());
-        } finally {
-            if (reader != null) {
-                reader.close();
-            }
-        }
-    }
-}
--- a/jdk/src/share/classes/com/sun/servicetag/SystemEnvironment.java	Tue Apr 02 14:13:13 2013 -0400
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,338 +0,0 @@
-/*
- * Copyright (c) 2008, 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 com.sun.servicetag;
-
-// This class is a copy of the com.sun.scn.servicetags.SystemEnvironment
-// class from the Sun Connection source.
-//
-// The Service Tags team maintains the latest version of the implementation
-// for system environment data collection.  JDK will include a copy of
-// the most recent released version for a JDK release. We rename
-// the package to com.sun.servicetag so that the Sun Connection
-// product always uses the latest version from the com.sun.scn.servicetags
-// package. JDK and users of the com.sun.servicetag API
-// (e.g. NetBeans and SunStudio) will use the version in JDK.
-
-import java.io.*;
-import java.net.InetAddress;
-import java.net.UnknownHostException;
-
-/**
- * SystemEnvironment class collects the environment data with the
- * best effort from the underlying platform.
- */
-public class SystemEnvironment {
-    private String hostname;
-    private String hostId;
-    private String osName;
-    private String osVersion;
-    private String osArchitecture;
-    private String systemModel;
-    private String systemManufacturer;
-    private String cpuManufacturer;
-    private String serialNumber;
-    private static SystemEnvironment sysEnv = null;
-
-    public static synchronized SystemEnvironment getSystemEnvironment() {
-        if (sysEnv == null) {
-            String os = System.getProperty("os.name");
-            if (os.equals("SunOS")) {
-                sysEnv = new SolarisSystemEnvironment();
-            } else if (os.equals("Linux")) {
-                sysEnv = new LinuxSystemEnvironment();
-            } else if (os.startsWith("Windows")) {
-                sysEnv = new WindowsSystemEnvironment();
-            } else {
-                sysEnv = new SystemEnvironment();
-            }
-        }
-        return sysEnv;
-    }
-
-    // package-private
-    SystemEnvironment() {
-        try {
-            this.hostname = InetAddress.getLocalHost().getHostName();
-        } catch (UnknownHostException ex) {
-            this.hostname = "Unknown host";
-        }
-        this.hostId = "";
-        this.osName = System.getProperty("os.name");
-        this.osVersion = System.getProperty("os.version");
-        this.osArchitecture = System.getProperty("os.arch");
-        this.systemModel = "";
-        this.systemManufacturer = "";
-        this.cpuManufacturer = "";
-        this.serialNumber = "";
-    }
-
-
-    /**
-     * Sets the hostname.
-     * @param hostname The hostname to set.
-     */
-    public void setHostname(String hostname) {
-        this.hostname = hostname;
-    }
-
-    /**
-     * Sets the OS name.
-     * @param osName The osName to set.
-     */
-    public void setOsName(String osName) {
-        this.osName = osName;
-    }
-
-    /**
-     * Sets the OS version.
-     * @param osVersion The osVersion to set.
-     */
-    public void setOsVersion(String osVersion) {
-        this.osVersion = osVersion;
-    }
-
-    /**
-     * Sets the OS architecture.
-     * @param osArchitecture The osArchitecture to set.
-     */
-    public void setOsArchitecture(String osArchitecture) {
-        this.osArchitecture = osArchitecture;
-    }
-
-    /**
-     * Sets the system model.
-     * @param systemModel The systemModel to set.
-     */
-    public void setSystemModel(String systemModel) {
-        this.systemModel = systemModel;
-    }
-
-    /**
-     * Sets the system manufacturer.
-     * @param systemManufacturer The systemManufacturer to set.
-     */
-    public void setSystemManufacturer(String systemManufacturer) {
-        this.systemManufacturer = systemManufacturer;
-    }
-
-    /**
-     * Sets the cpu manufacturer.
-     * @param cpuManufacturer The cpuManufacturer to set.
-     */
-    public void setCpuManufacturer(String cpuManufacturer) {
-        this.cpuManufacturer = cpuManufacturer;
-    }
-
-    /**
-     * Sets the serial number.
-     * @param serialNumber The serialNumber to set.
-     */
-    public void setSerialNumber(String serialNumber) {
-        this.serialNumber = serialNumber;
-    }
-
-    /**
-     * Sets the hostid.  Truncates to a max length of 16 chars.
-     * @param hostId The hostid to set.
-     */
-    public void setHostId(String hostId) {
-        if (hostId == null || hostId.equals("null")) {
-            hostId = "";
-        }
-        if (hostId.length() > 16) {
-            hostId = hostId.substring(0,16);
-        }
-        this.hostId = hostId;
-    }
-
-    /**
-     * Returns the hostname.
-     * @return The hostname.
-     */
-    public String getHostname() {
-        return hostname;
-    }
-
-    /**
-     * Returns the osName.
-     * @return The osName.
-     */
-    public String getOsName() {
-        return osName;
-    }
-
-    /**
-     * Returns the osVersion.
-     * @return The osVersion.
-     */
-    public String getOsVersion() {
-        return osVersion;
-    }
-
-    /**
-     * Returns the osArchitecture.
-     * @return The osArchitecture.
-     */
-    public String getOsArchitecture() {
-        return osArchitecture;
-    }
-
-    /**
-     * Returns the systemModel.
-     * @return The systemModel.
-     */
-    public String getSystemModel() {
-        return systemModel;
-    }
-
-    /**
-     * Returns the systemManufacturer.
-     * @return The systemManufacturer.
-     */
-    public String getSystemManufacturer() {
-        return systemManufacturer;
-    }
-
-    /**
-     * Returns the serialNumber.
-     * @return The serialNumber.
-     */
-    public String getSerialNumber() {
-        return serialNumber;
-    }
-
-    /**
-     * Returns the hostId.
-     * @return The hostId.
-     */
-    public String getHostId() {
-        return hostId;
-    }
-
-    /**
-     * Returns the cpuManufacturer.
-     * @return The cpuManufacturer.
-     */
-    public String getCpuManufacturer() {
-        return cpuManufacturer;
-    }
-
-    protected String getCommandOutput(String... command) {
-        StringBuilder sb = new StringBuilder();
-        BufferedReader br = null;
-        Process p = null;
-        try {
-            ProcessBuilder pb = new ProcessBuilder(command);
-            p = pb.start();
-            p.waitFor();
-
-            if (p.exitValue() == 0) {
-                br = new BufferedReader(new InputStreamReader(p.getInputStream()));
-                String line = null;
-                while ((line = br.readLine()) != null) {
-                    line = line.trim();
-                    if (line.length() > 0) {
-                        if (sb.length() > 0) {
-                            sb.append("\n");
-                        }
-                        sb.append(line);
-                    }
-                }
-            }
-            return sb.toString();
-        } catch (InterruptedException ie) {
-            // in case the command hangs
-            if (p != null) {
-                p.destroy();
-            }
-            return "";
-        } catch (Exception e) {
-            // ignore exception
-            return "";
-        } finally {
-            if (p != null) {
-                try {
-                    p.getErrorStream().close();
-                } catch (IOException e) {
-                    // ignore
-                }
-                try {
-                    p.getInputStream().close();
-                } catch (IOException e) {
-                    // ignore
-                }
-                try {
-                    p.getOutputStream().close();
-                } catch (IOException e) {
-                    // ignore
-                }
-                p = null;
-            }
-            if (br != null) {
-                try {
-                    br.close();
-                } catch (IOException e) {
-                    // ignore
-                }
-            }
-        }
-    }
-
-    protected String getFileContent(String filename) {
-        File f = new File(filename);
-        if (!f.exists()) {
-            return "";
-        }
-
-        StringBuilder sb = new StringBuilder();
-        BufferedReader br = null;
-        try {
-            br = new BufferedReader(new FileReader(f));
-            String line = null;
-            while ((line = br.readLine()) != null) {
-                line = line.trim();
-                if (line.length() > 0) {
-                    if (sb.length() > 0) {
-                        sb.append("\n");
-                    }
-                    sb.append(line);
-                }
-            }
-            return sb.toString();
-        } catch (Exception e) {
-            // ignore exception
-            return "";
-        } finally {
-            if (br != null) {
-                try {
-                    br.close();
-                } catch (IOException e) {
-                    // ignore
-                }
-            }
-        }
-    }
-}
--- a/jdk/src/share/classes/com/sun/servicetag/UnauthorizedAccessException.java	Tue Apr 02 14:13:13 2013 -0400
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,53 +0,0 @@
-/*
- * Copyright (c) 2008, 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 com.sun.servicetag;
-
-/**
- * Thrown if the user is not authorized to
- * {@link Registry#updateServiceTag update} or
- * {@link Registry#removeServiceTag remove}
- * a service tag from a {@link Registry}.
- */
-public class UnauthorizedAccessException extends RuntimeException {
-
-    /**
-     * Constructs an <code>UnauthorizedAccessException</code> object
-     * without detail message.
-     */
-    public UnauthorizedAccessException() {
-    }
-
-
-    /**
-     * Constructs an <code>UnauthorizedAccessException</code> object
-     * with the specified detail message.
-     *
-     * @param msg the detail message.
-     */
-    public UnauthorizedAccessException(String msg) {
-        super(msg);
-    }
-}
--- a/jdk/src/share/classes/com/sun/servicetag/Util.java	Tue Apr 02 14:13:13 2013 -0400
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,339 +0,0 @@
-/*
- * Copyright (c) 2008, 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 com.sun.servicetag;
-
-import java.io.*;
-import java.util.Date;
-import java.text.SimpleDateFormat;
-import java.text.ParseException;
-import java.util.TimeZone;
-import java.util.UUID;
-import java.lang.reflect.Field;
-import java.lang.reflect.Method;
-
-// Utility class for com.sun.servicetag package
-class Util {
-    private static boolean verbose = (System.getProperty("servicetag.verbose") != null);
-    private static String jrepath = null;
-    private static final String REGKEY_TAIL =
-        "microsoft\\windows\\currentversion\\app paths\\stclient.exe";
-    private static final String STCLIENT_TAIL =  "sun\\servicetag\\stclient.exe";
-    private static final String WIN32_STCLIENT =
-        "c:\\Program Files (x86)\\" + STCLIENT_TAIL;
-
-    // for debugging and tracing
-    static boolean isVerbose() {
-        return verbose;
-    }
-
-    /**
-     * Gets the pathname of JRE in the running platform
-     * This can be a JDK or JRE.
-     */
-    static synchronized String getJrePath() {
-        if (jrepath == null) {
-            // Determine the JRE path by checking the existence of
-            // <HOME>/jre/lib and <HOME>/lib.
-            String javaHome = System.getProperty("java.home");
-            jrepath = javaHome + File.separator + "jre";
-            File f = new File(jrepath, "lib");
-            if (!f.exists()) {
-                // java.home usually points to the JRE path
-                jrepath = javaHome;
-            }
-        }
-        return jrepath;
-    }
-
-    /**
-     * Tests if the running platform is a JDK.
-     */
-    static boolean isJdk() {
-        // <HOME>/jre exists which implies it's a JDK
-        return getJrePath().endsWith(File.separator + "jre");
-    }
-
-    /**
-     * Generates the URN string of "urn:st" namespace
-     */
-    static String generateURN() {
-        return "urn:st:" + UUID.randomUUID().toString();
-    }
-
-    static int getIntValue(String value) {
-        try {
-            return Integer.parseInt(value);
-        } catch (NumberFormatException e) {
-            throw new IllegalArgumentException("\"" + value + "\"" +
-                " expected to be an integer");
-        }
-    }
-
-    /**
-     * Formats the Date into a timestamp string in YYYY-MM-dd HH:mm:ss GMT.
-     * @param timestamp Date
-     * @return a string representation of the timestamp
-     *         in the YYYY-MM-dd HH:mm:ss GMT format.
-     */
-    static String formatTimestamp(Date timestamp) {
-        if (timestamp == null) {
-            return "[No timestamp]";
-        }
-        SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss z");
-        df.setTimeZone(TimeZone.getTimeZone("GMT"));
-        return df.format(timestamp);
-    }
-
-    /**
-     * Parses a timestamp string in YYYY-MM-dd HH:mm:ss GMT format.
-     * @param timestamp Timestamp in the YYYY-MM-dd HH:mm:ss GMT format.
-     * @return Date
-     */
-    static Date parseTimestamp(String timestamp) {
-        SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss z");
-        df.setTimeZone(TimeZone.getTimeZone("GMT"));
-        try {
-            return df.parse(timestamp);
-        } catch (ParseException e) {
-            // should not reach here
-            e.printStackTrace();
-            return new Date();
-        }
-    }
-
-    static String commandOutput(Process p) throws IOException {
-        Reader r = null;
-        Reader err = null;
-        try {
-            r = new InputStreamReader(p.getInputStream());
-            err = new InputStreamReader(p.getErrorStream());
-            String output = commandOutput(r);
-            String errorMsg = commandOutput(err);
-            p.waitFor();
-            return output + errorMsg.trim();
-        } catch (InterruptedException e) {
-            if (isVerbose()) {
-                e.printStackTrace();
-            }
-            return e.getMessage();
-        } finally {
-            try {
-                if (r != null) {
-                    r.close();
-                }
-            } finally {
-                if (err != null) {
-                    err.close();
-                }
-            }
-        }
-    }
-
-    static String commandOutput(Reader r) throws IOException {
-        StringBuilder sb = new StringBuilder();
-        int c;
-        while ((c = r.read()) > 0) {
-            if (c != '\r') {
-                sb.append((char) c);
-            }
-        }
-        return sb.toString();
-    }
-
-    static int getJdkVersion() {
-        parseVersion();
-        return jdkVersion;
-    }
-
-    static int getUpdateVersion() {
-        parseVersion();
-        return jdkUpdate;
-    }
-
-    private static int jdkVersion = 0;
-    private static int jdkUpdate = 0;
-    private static synchronized void parseVersion() {
-        if (jdkVersion > 0) {
-            return;
-        }
-
-        // parse java.runtime.version
-        // valid format of the version string is:
-        // n.n.n[_uu[c]][-<identifer>]-bxx
-        String cs = System.getProperty("java.runtime.version");
-        if (cs.length() >= 5 &&
-            Character.isDigit(cs.charAt(0)) && cs.charAt(1) == '.' &&
-            Character.isDigit(cs.charAt(2)) && cs.charAt(3) == '.' &&
-            Character.isDigit(cs.charAt(4))) {
-            jdkVersion = Character.digit(cs.charAt(2), 10);
-            cs = cs.substring(5, cs.length());
-            if (cs.charAt(0) == '_' && cs.length() >= 3 &&
-                Character.isDigit(cs.charAt(1)) &&
-                Character.isDigit(cs.charAt(2))) {
-                int nextChar = 3;
-                try {
-                    String uu = cs.substring(1, 3);
-                    jdkUpdate = Integer.valueOf(uu).intValue();
-                } catch (NumberFormatException e) {
-                    // not conforming to the naming convention
-                    return;
-                }
-            }
-        } else {
-            throw new InternalError("Invalid java.runtime.version" + cs);
-        }
-    }
-
-    /**
-     * Returns this java string as a null-terminated byte array
-     */
-    private static byte[] stringToByteArray(String str) {
-        return (str + "\u0000").getBytes();
-    }
-
-    /**
-     * Converts a null-terminated byte array to java string
-     */
-    private static String byteArrayToString(byte[] array) {
-        return new String(array, 0, array.length -1);
-    }
-
-    /**
-     * Gets the stclient path using a well known location from
-     * the Windows platform Registry, ensuring the path returned
-     * by the registry is really the one we are looking for,
-     * otherwise it will return null.
-     */
-    private static File getWindowsStClientFile(boolean wow64) {
-        File out = null;
-        String regKey = (wow64 == true)
-            ? "software\\Wow6432Node\\" + REGKEY_TAIL
-            : "software\\" + REGKEY_TAIL;
-        String keyName = "" ; // use the default  key
-        String path = getRegistryKey(regKey, keyName);
-        if (path != null
-                && (new File(path)).exists()
-                && path.toLowerCase().endsWith(STCLIENT_TAIL.toLowerCase())) {
-            out = new File(path);
-        }
-        if (isVerbose()) {
-            System.out.println("stclient=" + out);
-        }
-        return out;
-    }
-
-    /**
-     * Finds a stclient in 32 and 64 bit environments, first by querying
-     * the windows registry, if not then get the well known paths for
-     * 64bit see http://support.microsoft.com/kb/896459
-     */
-
-    static File getWindowsStClientFile() {
-        File stclient = null;
-        if (System.getProperty("os.arch").equals("x86")) {
-            // try to get the default entry
-            stclient = getWindowsStClientFile(false);
-            if (stclient != null) {
-                return stclient;
-            }
-        } else { // we are on 64-bit system
-            // try the wow64 area
-            stclient = getWindowsStClientFile(true);
-            if (stclient != null) {
-                return stclient;
-            }
-            // try the default hard coded path, maybe wow64 registry is missing
-            stclient = new File(WIN32_STCLIENT);
-            if (stclient.canExecute()) {
-                if (isVerbose()) {
-                    System.out.println("stclient(default)=" + stclient);
-                }
-                return stclient;
-            }
-        }
-        if (isVerbose()) {
-            System.out.println("stclient not found");
-        }
-        return null;
-    }
-
-    /**
-     * This uses reflection to access a private java windows registry
-     * interface, any changes to that Class must be appropriately adjusted.
-     * Returns a null if unsuccessful.
-     */
-    private static String getRegistryKey(String regKey, String keyName) {
-        String out = null;
-        try {
-            Class<?> clazz = Class.forName("java.util.prefs.WindowsPreferences");
-
-            // Get the registry methods
-            Method winRegOpenKeyM = clazz.getDeclaredMethod("WindowsRegOpenKey",
-                    int.class, byte[].class, int.class);
-            winRegOpenKeyM.setAccessible(true);
-
-            Method winRegCloseKeyM = clazz.getDeclaredMethod("WindowsRegCloseKey",
-                    int.class);
-            winRegCloseKeyM.setAccessible(true);
-
-            Method winRegQueryValueM = clazz.getDeclaredMethod("WindowsRegQueryValueEx",
-                    int.class, byte[].class);
-            winRegQueryValueM.setAccessible(true);
-
-            // Get all the constants we need
-            int HKLM = getValueFromStaticField("HKEY_LOCAL_MACHINE", clazz);
-            int KEY_READ = getValueFromStaticField("KEY_READ", clazz);
-            int ERROR_CODE = getValueFromStaticField("ERROR_CODE", clazz);
-            int NATIVE_HANDLE = getValueFromStaticField("NATIVE_HANDLE", clazz);
-            int ERROR_SUCCESS = getValueFromStaticField("ERROR_SUCCESS", clazz);
-
-            // Convert keys
-            byte[] reg = stringToByteArray(regKey);
-            byte[] key = stringToByteArray(keyName);
-
-            // Open the registry
-            int[] result = (int[]) winRegOpenKeyM.invoke(null, HKLM, reg, KEY_READ);
-
-            if (result[ERROR_CODE] == ERROR_SUCCESS) {
-                byte[] stvalue = (byte[]) winRegQueryValueM.invoke(null,
-                    result[NATIVE_HANDLE], key);
-                out = byteArrayToString(stvalue);
-                winRegCloseKeyM.invoke(null, result[NATIVE_HANDLE]);
-            }
-        } catch (Exception ex) {
-            if (isVerbose()) {
-                ex.printStackTrace();
-            }
-        }
-        return out;
-    }
-
-    private static int getValueFromStaticField(String fldName, Class<?> klass) throws Exception {
-        Field f = klass.getDeclaredField(fldName);
-        f.setAccessible(true);
-        return f.getInt(null);
-    }
-}
--- a/jdk/src/share/classes/com/sun/servicetag/WindowsSystemEnvironment.java	Tue Apr 02 14:13:13 2013 -0400
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,150 +0,0 @@
-/*
- * Copyright (c) 2008, 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 com.sun.servicetag;
-
-// This class is a copy of the com.sun.scn.servicetags.WindowsSystemEnvironment
-// class from the Sun Connection source.
-//
-// The Service Tags team maintains the latest version of the implementation
-// for system environment data collection.  JDK will include a copy of
-// the most recent released version for a JDK release. We rename
-// the package to com.sun.servicetag so that the Sun Connection
-// product always uses the latest version from the com.sun.scn.servicetags
-// package. JDK and users of the com.sun.servicetag API
-// (e.g. NetBeans and SunStudio) will use the version in JDK.
-//
-// So we keep this class in src/share/classes instead of src/<os>/classes.
-
-import java.io.*;
-import java.util.ArrayList;
-import java.util.List;
-
-/**
- * Windows implementation of the SystemEnvironment class.
- */
-class WindowsSystemEnvironment extends SystemEnvironment {
-    WindowsSystemEnvironment() {
-        super();
-
-        // run a call to make sure things are initialized
-        // ignore the first call result as the system may
-        // give inconsistent data on the first invocation ever
-        getWmicResult("computersystem", "get", "model");
-
-        setSystemModel(getWmicResult("computersystem", "get", "model"));
-        setSystemManufacturer(getWmicResult("computersystem", "get", "manufacturer"));
-        setSerialNumber(getWmicResult("bios", "get", "serialnumber"));
-
-        String cpuMfr = getWmicResult("cpu", "get", "manufacturer");
-        // this isn't as good an option, but if we couldn't get anything
-        // from wmic, try the processor_identifier
-        if (cpuMfr.length() == 0) {
-            String procId = System.getenv("processor_identifer");
-            if (procId != null) {
-                String[] s = procId.split(",");
-                cpuMfr = s[s.length - 1].trim();
-            }
-        }
-        setCpuManufacturer(cpuMfr);
-
-        // try to remove the temp file that gets created from running wmic cmds
-        try {
-            // look in the current working directory
-            File f = new File("TempWmicBatchFile.bat");
-            if (f.exists()) {
-                f.delete();
-            }
-        } catch (Exception e) {
-            // ignore the exception
-        }
-    }
-
-
-    /**
-     * This method invokes wmic outside of the normal environment
-     * collection routines.
-     *
-     * An initial call to wmic can be costly in terms of time.
-     *
-     * <code>
-     * Details of why the first call is costly can be found at:
-     *
-     * http://support.microsoft.com/kb/290216/en-us
-     *
-     * "When you run the Wmic.exe utility for the first time, the utility
-     * compiles its .mof files into the repository. To save time during
-     * Windows installation, this operation takes place as necessary."
-     * </code>
-     */
-    private String getWmicResult(String alias, String verb, String property) {
-        String res = "";
-        BufferedReader in = null;
-        try {
-            ProcessBuilder pb = new ProcessBuilder("cmd", "/C", "WMIC", alias, verb, property);
-            Process p = pb.start();
-            // need this for executing windows commands (at least
-            // needed for executing wmic command)
-            BufferedWriter bw = null;
-            try {
-                bw = new BufferedWriter(
-                         new OutputStreamWriter(p.getOutputStream()));
-                bw.write(13);
-                bw.flush();
-            } finally {
-                if (bw != null) {
-                    bw.close();
-                }
-            }
-
-            p.waitFor();
-            if (p.exitValue() == 0) {
-                in = new BufferedReader(new InputStreamReader(p.getInputStream()));
-                String line = null;
-                while ((line = in.readLine()) != null) {
-                    line = line.trim();
-                    if (line.length() == 0) {
-                        continue;
-                    }
-                    res = line;
-                }
-                // return the *last* line read
-                return res;
-            }
-
-        } catch (Exception e) {
-            // ignore the exception
-        } finally {
-            if (in != null) {
-                try {
-                    in.close();
-                } catch (IOException e) {
-                    // ignore
-                }
-            }
-        }
-        return res.trim();
-    }
-}
--- a/jdk/src/share/classes/com/sun/servicetag/package.html	Tue Apr 02 14:13:13 2013 -0400
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,71 +0,0 @@
-CTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
-<html>
-<head>
-<!--
-Copyright (c) 2008, 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.
-
--->
-
-</head>
-<body bgcolor="white">
-
-This package contains classes that allow the creation
-and manipulation of service tags.
-This com.sun.servicetag package is intended for
-<b>Sun internal use</b> only.
-<p>
-<dl>
-<dt><b>Service Tag</b></dt>
-<dd>A service tag is an XML-based data structure that contains identifying
-information about an instance of a product or component on a system.
-</dd>
-</dl>
-<dl>
-<dt><b>Service Tag Registry</b></dt>
-<dd>A service tag registry is a XML-based registry that contains
-the service tags of all the tagged components on a system.  The
-service tag registry is present on systems that have the
-Service Tags software installed.
-</dd>
-</dl>
-<dl>
-<dt><b>Registration Data</b></dt>
-<dd>A registration data is a container of one or more
-service tags that identify the
-components for product registration and will be used to interface
-with the Sun Connection registration services.
-</dd>
-</dl>
-
-This package contains the methods to create service tags, set up the
-registration data for product registration, add service tags to and
-remove them from the system service tag registry.
-<p>
-All methods defined in this package will throw {@code NullPointerException}
-if {@code null} is passed in any input parameter unless it is stated otherwise.
-In addition, they are multi-thread safe.
-</body>
-</html>
-
-
--- a/jdk/src/share/classes/com/sun/servicetag/resources/Putback-Notes.txt	Tue Apr 02 14:13:13 2013 -0400
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,25 +0,0 @@
-README for auto-generating of the offline registration page.
-
-1. register.html is defined by the xDesign team.
-
-2. Before putback in the workspace, we need to modify the 
-   register.html to contain the following:
-
-   (a) replace the pathname of the jdk_header.png image to
-       <img src="@@JDK_HEADER_PNG@@" ....>
-
-   (b) replace the product name from:
-           Java Development Kit Version 6 Update 5 (e.g.)
-       to:
-           Java Development Kit @@JDK_VERSION@@ 
-
-   (c) replace the form action for the "Register My JDK" button with:
-
-       <form name="form1" method="post" action="@@REGISTRATION_URL@@" enctype="text/xml">
-
-   (d) Add this input in the form for posting data after 
-       the <form name=....> line:
- 
-       <input type="hidden" name="servicetag_payload" value="@@REGISTRATION_PAYLOAD@@">
-
-3. The jdk_header.png is located under <JRE>/lib/servicetag directory.
--- a/jdk/src/share/classes/com/sun/servicetag/resources/javase_5_swordfish.properties	Tue Apr 02 14:13:13 2013 -0400
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,29 +0,0 @@
-# Copyright (c) 2008, 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.
-
-servicetag.jdk.urn     = urn:uuid:d5bed446-05f2-42ed-ba0a-153105a52413
-servicetag.jdk.name    = J2SE 5.0 Development Kit
-servicetag.jre.urn     = urn:uuid:5c6686aa-fd05-46a6-ba3e-700e2d5f7043
-servicetag.jre.name    = J2SE 5.0 Runtime Environment
-servicetag.parent.urn  = urn:uuid:f3c20172-557a-11d7-93d0-d6a41ea318df
-servicetag.parent.name = Java 2 Platform, Standard Edition 5.0
--- a/jdk/src/share/classes/com/sun/servicetag/resources/javase_6_swordfish.properties	Tue Apr 02 14:13:13 2013 -0400
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,29 +0,0 @@
-# Copyright (c) 2008, 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.
-
-servicetag.jdk.urn     = urn:uuid:b58ef9a8-5ae8-11db-a023-080020a9ed93
-servicetag.jdk.name    = Java SE 6 Development Kit
-servicetag.jre.urn     = urn:uuid:92d1de8c-1e59-42c6-a280-1c379526bcbc
-servicetag.jre.name    = Java SE 6 Runtime Environment
-servicetag.parent.urn  = urn:uuid:fdc90b21-018d-4cab-b866-612c7c119ed3
-servicetag.parent.name = Java Platform Standard Edition 6 (Java SE 6)
--- a/jdk/src/share/classes/com/sun/servicetag/resources/javase_7_swordfish.properties	Tue Apr 02 14:13:13 2013 -0400
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,29 +0,0 @@
-# Copyright (c) 2008, 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.
-
-servicetag.jdk.urn     = JSEZ9-007-ZZZZ
-servicetag.jdk.name    = Java SE 7 Development Kit
-servicetag.jre.urn     = JSERE-007-ZZZZ
-servicetag.jre.name    = Java SE 7 Runtime Environment
-servicetag.parent.urn  = urn:uuid:dc1704fe-264f-11dc-9482-080020a9ed93
-servicetag.parent.name = Java Platform Standard Edition 7 (Java SE 7)
--- a/jdk/src/share/classes/com/sun/servicetag/resources/javase_servicetag.properties	Tue Apr 02 14:13:13 2013 -0400
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,29 +0,0 @@
-# Copyright (c) 2011, 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.
-
-servicetag.jdk.urn     = Q8549
-servicetag.jdk.name    = Java Development Kit
-servicetag.jre.urn     = Q8549
-servicetag.jre.name    = Java Runtime Environment
-servicetag.parent.urn  = Q8549
-servicetag.parent.name = Java Platform, Standard Edition
Binary file jdk/src/share/classes/com/sun/servicetag/resources/jdk_header.png has changed
--- a/jdk/src/share/classes/com/sun/servicetag/resources/product_registration.xsd	Tue Apr 02 14:13:13 2013 -0400
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,301 +0,0 @@
-<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
-
-<xs:element name="registration_data">
-  <xs:complexType>
-    <xs:sequence>
-      <xs:element name="environment"
-                  minOccurs="1"
-                  maxOccurs="1">
-        <xs:complexType>
-          <xs:sequence>
-            <xs:element ref="hostname"
-                        minOccurs='1'
-                        maxOccurs='1'/>
-            <xs:element ref="hostId"
-                        minOccurs='1'
-                        maxOccurs='1'/>
-            <xs:element ref="osName"
-                        minOccurs='1'
-                        maxOccurs='1'/>
-            <xs:element ref="osVersion"
-                        minOccurs='1'
-                        maxOccurs='1'/>
-            <xs:element ref="osArchitecture"
-                        minOccurs='1'
-                        maxOccurs='1'/>
-            <xs:element ref="systemModel"
-                        minOccurs='1'
-                        maxOccurs='1'/>
-            <xs:element ref="systemManufacturer"
-                        minOccurs='1'
-                        maxOccurs='1'/>
-            <xs:element ref="cpuManufacturer"
-                        minOccurs='1'
-                        maxOccurs='1'/>
-            <xs:element ref="serialNumber"
-                        minOccurs='1'
-                        maxOccurs='1'/>
-          </xs:sequence>
-        </xs:complexType>
-      </xs:element>
-      <xs:element name="registry"
-                  minOccurs="1"
-                  maxOccurs="1">
-        <xs:complexType>
-          <xs:sequence>
-            <xs:element name="service_tag"
-                        minOccurs="0"
-                        maxOccurs="1024">
-              <xs:complexType>
-                <xs:sequence>
-                  <xs:element ref="instance_urn"
-                              minOccurs='1'
-                              maxOccurs='1'/>
-                  <xs:element ref="product_name"
-                              minOccurs='1'
-                              maxOccurs='1'/>
-                  <xs:element ref="product_version"
-                              minOccurs='1'
-                              maxOccurs='1'/>
-                  <xs:element ref="product_urn"
-                              minOccurs='1'
-                              maxOccurs='1'/>
-                  <xs:element ref="product_parent_urn"
-                              minOccurs='1'
-                              maxOccurs='1'/>
-                  <xs:element ref="product_parent"
-                              minOccurs='1'
-                              maxOccurs='1'/>
-                  <xs:element ref="product_defined_inst_id"
-                              minOccurs='1'
-                              maxOccurs='1'/>
-                  <xs:element ref="product_vendor"
-                              minOccurs='1'
-                              maxOccurs='1'/>
-                  <xs:element ref="platform_arch"
-                              minOccurs='1'
-                              maxOccurs='1'/>
-                  <xs:element ref="timestamp"
-                              minOccurs='1'
-                              maxOccurs='1'/>
-                  <xs:element ref="container"
-                              minOccurs='1'
-                              maxOccurs='1'/>
-                  <xs:element ref="source"
-                              minOccurs='1'
-                              maxOccurs='1'/>
-                  <xs:element ref="installer_uid"
-                              minOccurs='1'
-                              maxOccurs='1'/>
-                </xs:sequence>
-              </xs:complexType>
-            </xs:element>
-          </xs:sequence>
-          <xs:attribute name="urn"
-                        type="xs:string"
-                        use="required"/>
-          <xs:attribute name="version"
-                        type="xs:string"
-                        use="required"/>
-        </xs:complexType>
-      </xs:element>
-    </xs:sequence>
-    <xs:attribute name="version"
-                  type="xs:string"
-                  use="required"/>
-  </xs:complexType>
-</xs:element>
-
-  <!-- definition of simple elements -->
-  <xs:element name="hostname">
-    <xs:simpleType>
-      <xs:restriction base="xs:string">
-        <xs:minLength value="1"/>
-        <xs:maxLength value="255"/>
-      </xs:restriction>
-    </xs:simpleType>
-   </xs:element>
-
-  <xs:element name="hostId">
-    <xs:simpleType>
-      <xs:restriction base="xs:string">
-        <xs:minLength value="0"/>
-        <xs:maxLength value="16"/>
-      </xs:restriction>
-    </xs:simpleType>
-   </xs:element>
-
-  <xs:element name="osName">
-    <xs:simpleType>
-      <xs:restriction base="xs:string">
-        <xs:minLength value="1"/>
-        <xs:maxLength value="256"/>
-      </xs:restriction>
-    </xs:simpleType>
-   </xs:element>
-
-  <xs:element name="osVersion">
-    <xs:simpleType>
-      <xs:restriction base="xs:string">
-        <xs:minLength value="0"/>
-        <xs:maxLength value="50"/>
-      </xs:restriction>
-    </xs:simpleType>
-   </xs:element>
-
-  <xs:element name="osArchitecture">
-    <xs:simpleType>
-      <xs:restriction base="xs:string">
-        <xs:minLength value="0"/>
-        <xs:maxLength value="256"/>
-      </xs:restriction>
-    </xs:simpleType>
-   </xs:element>
-
-  <xs:element name="systemModel">
-    <xs:simpleType>
-      <xs:restriction base="xs:string">
-        <xs:minLength value="0"/>
-        <xs:maxLength value="50"/>
-      </xs:restriction>
-    </xs:simpleType>
-   </xs:element>
-
-  <xs:element name="systemManufacturer">
-    <xs:simpleType>
-      <xs:restriction base="xs:string">
-        <xs:minLength value="0"/>
-        <xs:maxLength value="50"/>
-      </xs:restriction>
-    </xs:simpleType>
-   </xs:element>
-
-  <xs:element name="cpuManufacturer">
-    <xs:simpleType>
-      <xs:restriction base="xs:string">
-        <xs:minLength value="0"/>
-        <xs:maxLength value="50"/>
-      </xs:restriction>
-    </xs:simpleType>
-   </xs:element>
-
-  <xs:element name="serialNumber">
-    <xs:simpleType>
-      <xs:restriction base="xs:string">
-        <xs:minLength value="0"/>
-        <xs:maxLength value="256"/>
-      </xs:restriction>
-    </xs:simpleType>
-   </xs:element>
-
-  <xs:element name="instance_urn">
-    <xs:simpleType>
-      <xs:restriction base="xs:string">
-        <xs:minLength value="1"/>
-        <xs:maxLength value="255"/>
-      </xs:restriction>
-    </xs:simpleType>
-   </xs:element>
-
-  <xs:element name="product_name">
-    <xs:simpleType>
-      <xs:restriction base="xs:string">
-        <xs:maxLength value="255"/>
-      </xs:restriction>
-    </xs:simpleType>
-  </xs:element>
-
-  <xs:element name="product_version">
-    <xs:simpleType>
-      <xs:restriction base="xs:string">
-        <xs:maxLength value="63"/>
-      </xs:restriction>
-    </xs:simpleType>
-  </xs:element>
-
-  <xs:element name="product_urn">
-    <xs:simpleType>
-      <xs:restriction base="xs:string">
-        <xs:minLength value="1"/>
-        <xs:maxLength value="255"/>
-      </xs:restriction>
-    </xs:simpleType>
-  </xs:element>
-
-  <xs:element name="product_parent_urn">
-    <xs:simpleType>
-      <xs:restriction base="xs:string">
-        <xs:minLength value="0"/>
-        <xs:maxLength value="255"/>
-      </xs:restriction>
-    </xs:simpleType>
-  </xs:element>
-
-  <xs:element name="product_parent">
-    <xs:simpleType>
-      <xs:restriction base="xs:string">
-        <xs:minLength value="1"/>
-        <xs:maxLength value="255"/>
-      </xs:restriction>
-    </xs:simpleType>
-  </xs:element>
-
-  <xs:element name="product_defined_inst_id">
-      <xs:simpleType>
-          <xs:restriction base="xs:string">
-              <xs:minLength value="0"/>
-              <xs:maxLength value="255"/>
-          </xs:restriction>
-      </xs:simpleType>
-  </xs:element>
-
-  <xs:element name="product_vendor">
-    <xs:simpleType>
-      <xs:restriction base="xs:string">
-        <xs:minLength value="1"/>
-        <xs:maxLength value="63"/>
-      </xs:restriction>
-    </xs:simpleType>
-  </xs:element>
-
-  <xs:element name="platform_arch">
-    <xs:simpleType>
-      <xs:restriction base="xs:string">
-        <xs:minLength value="1"/>
-        <xs:maxLength value="63"/>
-      </xs:restriction>
-    </xs:simpleType>
-  </xs:element>
-
-  <xs:element name="timestamp">
-    <xs:simpleType>
-      <xs:restriction base="xs:string">
-        <xs:maxLength value="24"/>
-      </xs:restriction>
-    </xs:simpleType>
-  </xs:element>
-
-  <xs:element name="container">
-    <xs:simpleType>
-      <xs:restriction base="xs:string">
-        <xs:maxLength value="63"/>
-      </xs:restriction>
-    </xs:simpleType>
-  </xs:element>
-
-  <xs:element name="source">
-    <xs:simpleType>
-      <xs:restriction base="xs:string">
-        <xs:maxLength value="63"/>
-      </xs:restriction>
-    </xs:simpleType>
-  </xs:element>
-
-  <xs:element name="installer_uid">
-    <xs:simpleType>
-      <xs:restriction base="xs:integer">
-      </xs:restriction>
-    </xs:simpleType>
-  </xs:element>
-
-</xs:schema>
--- a/jdk/src/share/classes/com/sun/servicetag/resources/register.html	Tue Apr 02 14:13:13 2013 -0400
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,105 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
-"http://www.w3.org/TR/html4/loose.dtd">
-<html>
-<head>
-<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>Register your JDK</title>
-
-<!--
-Copyright (c) 2008, 2010, 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.
--->
-
-<style type="text/css">
-<!--
-.style1 {font-family: Arial, Helvetica, sans-serif}
-.style3 {font-family: Arial, Helvetica, sans-serif; font-size: small; }
-input.buttonblue,input.defbutton{ background: #3F6580;border-right:1px solid #304C60;border-bottom:1px solid #304C60;border-left:1px solid #BACDD9;border-top:1px solid #BACDD9; font-weight:bold; color:#FFFFFF; font-size:.8em; height:1.9em}
-input.buttonblue:hover{color:#fbe249;}
-a:link,a.named:visited{color:#3E6B8A}
-a:hover{text-decoration:underline}
-a{text-decoration:none}
-a:visited,a:visited code{color:#917E9C}
--->
-</style>
-</head>
-
-<body>
-<table width="813" border="0" cellpadding="3" cellspacing="0">
-  <tr>
-    <td width="7" height="78">&nbsp;</td>
-    <td width="794" align="left" valign="top">
-        <img src="@@JDK_HEADER_PNG@@" width="783" height="63"></td>
-  </tr>
-  <tr>
-    <td>&nbsp;</td>
-    <td><p class="style1">Thank you for installing the 
-        <strong> Java Development Kit @@JDK_VERSION@@ </strong>
-        from Oracle Corporation. </p>
-        <p class="style1">Registering your product will give you the following benefits:</p>
-        <ul class="style1">
-          <li> Notification of new versions, patches, and updates</li>
-          <li> Special offers on Oracle developer products, services and training </li>
-          <li> Access to early releases and documentation </li>
-        </ul>
-        <p class="style1">Product registration is FREE, quick and easy!</p>
-        <blockquote>
-          <p class="style1">All you need is an Oracle.com account. If you don't already have one, you will be prompted to create one. </p>
-          <table width="708" border="0" cellspacing="0" cellpadding="3">
-            <tr valign="top">
-              <td width="126" height="35">
-              <form name="form1" method="post" action="@@REGISTRATION_URL@@" enctype="text/xml">
-                <input type="hidden" name="servicetag_payload" value="@@REGISTRATION_PAYLOAD@@">
-                <input type="submit" name="Submit"border="0" class="buttonblue" onmouseover="this.style.color='#fbe249';" onmouseout="this.style.color='#FFF';"  value="Register My JDK">
-              </form></td>
-              <td width="570"><span class="style3">You need to be connected to the Internet to register this Oracle product. </span></td>
-            </tr>
-          </table>
-        </blockquote>
-        </td>
-        </tr>
-    <tr>
-       <td>&nbsp;</td>
-       <td bgcolor="#f1f7df">
-       <p class="style3">Oracle Corporation respects your privacy. 
-    We will use your personal information for communications 
-    and management of your Oracle.com account, the services 
-    and applications you access using your Oracle.com account, 
-    and the products and systems you register with your Oracle.com account.</p>
-                <p class="style3">For more information on the data that will be collected as 
-          part of the registration process and how it will be managed <br>
-          see <a href="http://java.sun.com/javase/registration/JDKRegistrationPrivacy.html">http://java.sun.com/javase/registration/JDKRegistrationPrivacy.html</a>. <br>      
-          <br>
-          For more information on Oracle's Privacy Policy see <a href="http://www.oracle.com/html/privacy.html">http://www.oracle.com/html/privacy.html</a> or contact <a class="moz-txt-link-rfc2396E" href="mailto:privacy_ww@oracle.com">privacy_ww@oracle.com.</a></p></td>
-  </tr>
-  <tr>
-    <td>&nbsp;</td>
-    <td>&nbsp;</td>
-  </tr>
-  <tr>
-    <td>&nbsp;</td>
-    <td>&nbsp;</td>
-  </tr>
-</table>
-</body>
-</html>
--- a/jdk/src/share/classes/com/sun/servicetag/resources/register_ja.html	Tue Apr 02 14:13:13 2013 -0400
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,91 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.or
-g/TR/html4/loose.dtd">
-<html><head>
-
-
-<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>JDK 製品登録</title>
-
-<!--
-Copyright (c) 2008, 2010, 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.
--->
-
-<style type="text/css">
-<!--
-.style1 {font-family: Arial, Helvetica, sans-serif}
-.style3 {font-family: Arial, Helvetica, sans-serif; font-size: small; }
-input.buttonblue,input.defbutton{ background: #3F6580;border-right:1px solid #304C60;border-bottom:1px solid #304C60;border-left:1px solid #BACDD9;border-top:1px solid #BACDD9; font-weight:bold; color:#FFFFFF; font-size:.8em; height:1.9em}
-input.buttonblue:hover{color:#fbe249;}
-a:link,a.named:visited{color:#3E6B8A}
-a:hover{text-decoration:underline}
-a{text-decoration:none}
-a:visited,a:visited code{color:#917E9C}
--->
-</style></head><body>
-<table border="0" cellpadding="3" cellspacing="0" width="813">
-  <tbody><tr>
-    <td height="78" width="7">&nbsp;</td>
-    <td align="left" valign="top" width="794"><img src="@@JDK_HEADER_PNG@@" height="63" width="783"></td>
-  </tr>
-  <tr>
-    <td>&nbsp;</td>
-
-    <td><p class="style1">Oracle Corporation の<strong> Java Development Kit @@JDK_VERSION@@ </strong>をインストールしていただき、ありがとうございます。 </p>
-        <p class="style1">製品登録をすると、次のような特典を受けることができます。</p>
-        <ul class="style1">
-          <li> 最新のバージョン、パッチ、および更新についての通知</li>
-          <li> Oracle の開発者向け製品、サービス、およびトレーニングの特別販売 </li>
-          <li> アーリーリリースおよびドキュメントへのアクセス </li>
-        </ul>
-        <p class="style1">製品登録は無料であり、迅速で簡単です。</p>
-        <blockquote>
-          <p class="style1">必要になるのは、Oracle.com アカウントだけです。 まだアカウントがない場合は、アカウントの作成が求められます。 </p>
-          <table width="708" border="0" cellspacing="0" cellpadding="3">
-            <tr valign="top">
-              <td width="126" height="35"><form name="form1" method="post" action="@@REGISTRATION_URL@@" enctype="text/xml">
-			  <input type="hidden" name="servicetag_payload" value="@@REGISTRATION_PAYLOAD@@">
-                <input type="submit" name="Submit"border="0" class="buttonblue" onmouseover="this.style.color='#fbe249';" onmouseout="this.style.color='#FFF';"  value="JDK 製品登録">
-              </form></td>
-              <td width="570"><span class="style3">この Oracle 製品を登録するには、インターネットに接続している必要があります。 </span></td>
-            </tr>
-	  </table>
-	</blockquote>
-	</td>
-	</tr>
-   <tr>
-       <td>&nbsp;</td>
-	<td bgcolor="#f1f7df">
-        <p class="style3">Oracle Corporation は、お客様のプライバシーを尊重します。 お客様の個人情報は、お客様の Oracle.com アカウント、お客様が Oracle.com アカウントを使用してアクセスするサービスとアプリケーション、およびお客様が Oracle.com アカウントで登録する製品とシステムの通信と管理に使用します。</p>
-                <p class="style3">登録の際に収集されるデータや、それらがどのように管理されるかについての詳細は、<br><a href="http://java.sun.com/javase/ja/registration/JDKRegistrationPrivacy.html">http://java.sun.com/javase/ja/registration/JDKRegistrationPrivacy.html</a> を参照してください。 <br> <br> Oracle のプライバシーポリシーについての詳細は、<a href="http://www.oracle.com/html/privacy.html">http://www.oracle.com/html/privacy.html</a> を参照するか、<a class="moz-txt-link-rfc2396E" href="mailto:privacy_ww@oracle.com">お問い合わせフォーム</a>からお問い合わせください。</p></td>
-  </tr>
-  <tr>
-    <td>&nbsp;</td>
-    <td>&nbsp;</td>
-  </tr>
-  <tr>
-    <td>&nbsp;</td>
-    <td>&nbsp;</td>
-  </tr>
-</table>
-</body>
-</html>
--- a/jdk/src/share/classes/com/sun/servicetag/resources/register_zh_CN.html	Tue Apr 02 14:13:13 2013 -0400
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,92 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
-"http://www.w3.org/TR/html4/loose.dtd">
-<html>
-<head>
-<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>注册您的 JDK</title>
-
-<!--
-Copyright (c) 2008, 2010, 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.
--->
-
-<style type="text/css">
-<!--
-.style1 {font-family: Arial, Helvetica, sans-serif}
-.style3 {font-family: Arial, Helvetica, sans-serif; font-size: small; }
-input.buttonblue,input.defbutton{ background: #3F6580;border-right:1px solid #304C60;border-bottom:1px solid #304C60;border-left:1px solid #BACDD9;border-top:1px solid #BACDD9; font-weight:bold; color:#FFFFFF; font-size:.8em; height:1.9em}
-input.buttonblue:hover{color:#fbe249;}
-a:link,a.named:visited{color:#3E6B8A}
-a:hover{text-decoration:underline}
-a{text-decoration:none}
-a:visited,a:visited code{color:#917E9C}
--->
-</style></head><body>
-<table border="0" cellpadding="3" cellspacing="0" width="813">
-  <tbody><tr>
-    <td height="78" width="7">&nbsp;</td>
-    <td align="left" valign="top" width="794"><img src="@@JDK_HEADER_PNG@@" height="63" width="783"></td>
-  </tr>
-
-  <tr>
-    <td>&nbsp;</td>
-
-<td><p class="style1">感谢您安装 Oracle Corporation 的 <strong>Java Development Kit @@JDK_VERSION@@</strong>。 </p>
-<p class="style1">注册产品后您将获得如下增值服务:</p>
-        <ul class="style1">
-<li> 获得新版本、修补程序和更新的通知服务</li>
-<li> 获得有关 Oracle 开发者产品、服务和培训的优惠 </li>
-<li> 获得对早期版本和文档的访问权限 </li>
-        </ul>
-<p class="style1">产品注册是免费的,即快速又轻松!</p>
-        <blockquote>
-<p class="style1">您需要具有 Oracle.com 帐户。如果您没有,系统将提示您创建一个。 </p>
-          <table width="708" border="0" cellspacing="0" cellpadding="3">
-            <tr valign="top">
-              <td width="126" height="35"><form name="form1" method="post" action="@@REGISTRATION_URL@@" enctype="text/xml">
-			  <input type="hidden" name="servicetag_payload" value="@@REGISTRATION_PAYLOAD@@">
-<input type="submit" name="Submit"border="0" class="buttonblue" onmouseover="this.style.color='#fbe249';" onmouseout="this.style.color='#FFF';"  value="注册我的 JDK">
-              </form></td>
-<td width="570"><span class="style3">您需要连接到 Internet 来注册此 Oracle 产品。 </span></td>
-            </tr>
-	  </table>
-	</blockquote>
-	</td>
-	</tr>
-    <tr>
-       <td>&nbsp;</td>
-	<td bgcolor="#f1f7df">
-        <p class="style3">Oracle 尊重您的隐私。我们会将您的个人信息用于通信和 Oracle.com 帐户的管理、Oracle.com 帐户访问的服务和应用程序以及用于使用 Oracle.com 帐户注册的产品和系统。</p>
-<p class="style3">有关注册过程中收集的数据以及这些数据的管理方式的更多信息,<br>请访问 <a href="http://java.sun.com/javase/registration/JDKRegistrationPrivacy.html">http://java.sun.com/javase/registration/JDKRegistrationPrivacy.html</a>。<br> <br>有关 Oracle 隐私政策的更多信息,请访问 <a href="http://www.oracle.com/html/privacy.html">http://www.oracle.com/html/privacy.html</a> 或与 <a class="moz-txt-link-rfc2396E" href="mailto:privacy_ww@oracle.com">privacy_ww@oracle.com</a> 联系。</p></td>
-  </tr>
-  <tr>
-    <td>&nbsp;</td>
-    <td>&nbsp;</td>
-  </tr>
-  <tr>
-    <td>&nbsp;</td>
-    <td>&nbsp;</td>
-  </tr>
-</table>
-</body>
-</html>
--- a/jdk/src/share/classes/com/sun/tools/script/shell/init.js	Tue Apr 02 14:13:13 2013 -0400
+++ b/jdk/src/share/classes/com/sun/tools/script/shell/init.js	Tue Apr 02 15:31:24 2013 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2005, 2013, 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
@@ -28,7 +28,7 @@
  */
 
 /**
- * Creates an object that delegates all method calls on 
+ * Creates an object that delegates all method calls on
  * it to the 'invoke' method on the given delegate object.<br>
  *
  * Example:
@@ -43,13 +43,13 @@
  * @constructor
  */
 function JSInvoker(obj) {
-	return new JSAdapter({
-			__get__ : function(name) {
-				return function() {
-					return obj.invoke(name, arguments);
-				}
-			}
-		});
+    return new JSAdapter({
+        __get__ : function(name) {
+            return function() {
+                return obj.invoke(name, arguments);
+            }
+        }
+    });
 }
 
 /**
@@ -58,24 +58,24 @@
  * example, env.PATH will return PATH value configured.
  */
 var env = new JSAdapter({
-	__get__ : function (name) {
-		return java.lang.System.getenv(name);
-	},
-	__has__ : function (name) {
-		return java.lang.System.getenv().containsKey(name);
-	},
-	__getIds__ : function() {
-		return java.lang.System.getenv().keySet().toArray();
-	},
-	__delete__ : function(name) {
-		println("can't delete env item");
-	},
-	__put__ : function (name, value) {
-		println("can't change env item");
-	},			
-	toString: function() {
-		return java.lang.System.getenv().toString();
-	}		
+    __get__ : function (name) {
+        return java.lang.System.getenv(name);
+    },
+    __has__ : function (name) {
+        return java.lang.System.getenv().containsKey(name);
+    },
+    __getIds__ : function() {
+        return java.lang.System.getenv().keySet().toArray();
+    },
+    __delete__ : function(name) {
+        println("can't delete env item");
+    },
+    __put__ : function (name, value) {
+        println("can't change env item");
+    },
+    toString: function() {
+        return java.lang.System.getenv().toString();
+    }
 });
 
 /**
@@ -91,36 +91,36 @@
  *     delete y['java.class.path']; // remove java.class.path System property
  * </code>
  * </pre>
- * 
+ *
  * @param map java.util.Map instance that will be wrapped
  * @constructor
  */
-function jmap(map) {	
-	return new JSAdapter({
-		__get__ : function(name) {
-			if (map.containsKey(name)) {
-				return map.get(name);
-			} else {
-				return undefined;
-			}
-   		  },
-		__has__ :  function(name) {
-				return map.containsKey(name);
-			},
+function jmap(map) {
+    return new JSAdapter({
+        __get__ : function(name) {
+            if (map.containsKey(name)) {
+                return map.get(name);
+            } else {
+                return undefined;
+            }
+        },
+        __has__ :  function(name) {
+            return map.containsKey(name);
+        },
 
-		__delete__ : function (name) {
-				return map.remove(name);
-			},
-		__put__ : function(name, value) {
-				map.put(name, value);
-			},
-		__getIds__ : function() {
-				return map.keySet().toArray();		
-			},
-		toString: function() {
-				return map.toString();
-		}
-	});
+        __delete__ : function (name) {
+            return map.remove(name);
+        },
+        __put__ : function(name, value) {
+            map.put(name, value);
+        },
+        __getIds__ : function() {
+            return map.keySet().toArray();
+        },
+        toString: function() {
+            return map.toString();
+        }
+    });
 }
 
 /**
@@ -146,52 +146,72 @@
  * @constructor
  */
 function jlist(list) {
-	function isValid(index) {
-		return typeof(index) == 'number' &&
-			index > -1 && index < list.size();
-	}
-	return new JSAdapter({
-		__get__ :  function(name) {
-			if (isValid(name)) {
-				return list.get(name);
-			} else if (name == 'length') {
-				return list.size();
-			} else {
-				return undefined;
-			}
-		},
-		__has__ : function (name) {
-			return isValid(name) || name == 'length';
-		},
-		__delete__ : function(name) {				
-			if (isValid(name)) {
-				list.remove(name);	
-			}
-		},
-		__put__ : function(name, value) {
-			if (isValid(name)) {
-				list.set(name, value);
-			}
-		},
-		__getIds__: function() {
-			var res = new Array(list.size());
-			for (var i = 0; i < res.length; i++) {
-				res[i] = i;
-			}
-			return res;
-		},
-		toString: function() {
-			return list.toString();
-		}				
-	});
+    function isValid(index) {
+        return typeof(index) == 'number' &&
+            index > -1 && index < list.size();
+    }
+    return new JSAdapter({
+        __get__ :  function(name) {
+            if (isValid(name)) {
+                return list.get(name);
+            } else if (name == 'length') {
+                return list.size();
+            } else {
+                return undefined;
+            }
+        },
+        __has__ : function (name) {
+            return isValid(name) || name == 'length';
+        },
+        __delete__ : function(name) {
+            if (isValid(name)) {
+                list.remove(name);
+            }
+        },
+        __put__ : function(name, value) {
+            if (isValid(name)) {
+                list.set(name, value);
+            }
+        },
+        __getIds__: function() {
+            var res = new Array(list.size());
+            for (var i = 0; i < res.length; i++) {
+                res[i] = i;
+            }
+            return res;
+        },
+        toString: function() {
+            return list.toString();
+        }
+    });
 }
 
 /**
- * This is java.lang.System properties wrapped by jmap.
+ * This is java.lang.System properties wrapped by JSAdapter.
  * For eg. to access java.class.path property, you can use
  * the syntax sysProps["java.class.path"]
  */
-var sysProps = jmap(java.lang.System.getProperties());
+var sysProps = new JSAdapter({
+    __get__ : function (name) {
+        return java.lang.System.getProperty(name);
+    },
+    __has__ : function (name) {
+        return java.lang.System.getProperty(name) != null;
+    },
+    __getIds__ : function() {
+        return java.lang.System.getProperties().keySet().toArray();
+    },
+    __delete__ : function(name) {
+        java.lang.System.clearProperty(name);
+        return true;
+    },
+    __put__ : function (name, value) {
+        java.lang.System.setProperty(name, value);
+    },
+    toString: function() {
+        return "<system properties>";
+    }
+});
 
 // stdout, stderr & stdin
 var out = java.lang.System.out;
@@ -199,76 +219,85 @@
 // can't use 'in' because it is a JavaScript keyword :-(
 var inp = java.lang.System["in"];
 
-// useful imports for often used io, net classes
-importPackage(java.io);
-importPackage(java.net);
+var BufferedInputStream = java.io.BufferedInputStream;
+var BufferedOutputStream = java.io.BufferedOutputStream;
+var BufferedReader = java.io.BufferedReader;
+var DataInputStream = java.io.DataInputStream;
+var File = java.io.File;
+var FileInputStream = java.io.FileInputStream;
+var FileOutputStream = java.io.FileOutputStream;
+var InputStream = java.io.InputStream;
+var InputStreamReader = java.io.InputStreamReader;
+var OutputStream = java.io.OutputStream;
+var Reader = java.io.Reader;
+var URL = java.net.URL;
 
 /**
  * Generic any object to input stream mapper
- * @param str input file name, URL or InputStream 
+ * @param str input file name, URL or InputStream
  * @return InputStream object
  * @private
  */
 function inStream(str) {
-	if (typeof(str) == "string") {
-		// '-' means standard input
-		if (str == '-') {
-			return java.lang.System["in"];
-		}
-		// try file first
-		var file = null;
-		try {
-			file = pathToFile(str);
-		} catch (e) {
-		}		
-		if (file && file.exists()) {
-			return new FileInputStream(file);
-		} else {
-			try {
-				// treat the string as URL
-				return new URL(str).openStream();
-			} catch (e) {
-				throw 'file or URL ' + str + ' not found';
-			}
-		}
-	} else {
-		if (str instanceof InputStream) {
-			return str;
-		} else if (str instanceof URL) {
-			return str.openStream();
-		} else if (str instanceof File) {
-			return new FileInputStream(str);
-		}
-	}
-	// everything failed, just give input stream
-	return java.lang.System["in"];
+    if (typeof(str) == "string") {
+        // '-' means standard input
+        if (str == '-') {
+            return java.lang.System["in"];
+        }
+        // try file first
+        var file = null;
+        try {
+            file = pathToFile(str);
+        } catch (e) {
+        }
+        if (file && file.exists()) {
+            return new FileInputStream(file);
+        } else {
+            try {
+                // treat the string as URL
+                return new URL(str).openStream();
+            } catch (e) {
+                throw 'file or URL ' + str + ' not found';
+            }
+        }
+    } else {
+        if (str instanceof InputStream) {
+            return str;
+        } else if (str instanceof URL) {
+            return str.openStream();
+        } else if (str instanceof File) {
+            return new FileInputStream(str);
+        }
+    }
+    // everything failed, just give input stream
+    return java.lang.System["in"];
 }
 
 /**
  * Generic any object to output stream mapper
- * 
+ *
  * @param out output file name or stream
  * @return OutputStream object
  * @private
  */
 function outStream(out) {
-	if (typeof(out) == "string") {
-		if (out == '>') {
-			return java.lang.System.out;
-		} else {
-			// treat it as file			
-			return new FileOutputStream(pathToFile(out));
-		}
-	} else {
-		if (out instanceof OutputStream) {
-			return out;
-		} else if (out instanceof File) {
-			return new FileOutputStream(out);
-		}
-	}
+    if (typeof(out) == "string") {
+        if (out == '>') {
+            return java.lang.System.out;
+        } else {
+            // treat it as file
+            return new FileOutputStream(pathToFile(out));
+        }
+    } else {
+        if (out instanceof OutputStream) {
+            return out;
+        } else if (out instanceof File) {
+            return new FileOutputStream(out);
+        }
+    }
 
-	// everything failed, just return System.out
-	return java.lang.System.out;
+    // everything failed, just return System.out
+    return java.lang.System.out;
 }
 
 /**
@@ -276,17 +305,17 @@
  * @private
  */
 function streamClose(stream) {
-	if (stream) {
-		if (stream != java.lang.System["in"] &&
-			stream != java.lang.System.out &&
-			stream != java.lang.System.err) {
-			try {
-				stream.close();
-			} catch (e) {
-				println(e);
-			}
-		}
-	}
+    if (stream) {
+        if (stream != java.lang.System["in"] &&
+            stream != java.lang.System.out &&
+            stream != java.lang.System.err) {
+            try {
+                stream.close();
+            } catch (e) {
+                println(e);
+            }
+        }
+    }
 }
 
 /**
@@ -302,18 +331,20 @@
  *
  * @param str input from which script is loaded and evaluated
  */
-function load(str) {
-	var stream = inStream(str);
-	var bstream = new BufferedInputStream(stream);
-	var reader = new BufferedReader(new InputStreamReader(bstream));
-	var oldFilename = engine.get(engine.FILENAME);
-	engine.put(engine.FILENAME, str);	
-	try {
-		engine.eval(reader);
-	} finally {
-		engine.put(engine.FILENAME, oldFilename);
-	        streamClose(stream);
-	}
+if (typeof(load) == 'undefined') {
+    var load = function(str) {
+        var stream = inStream(str);
+        var bstream = new BufferedInputStream(stream);
+        var reader = new BufferedReader(new InputStreamReader(bstream));
+        var oldFilename = engine.get(engine.FILENAME);
+        engine.put(engine.FILENAME, str);
+        try {
+            engine.eval(reader);
+        } finally {
+            engine.put(engine.FILENAME, oldFilename);
+            streamClose(stream);
+        }
+    }
 }
 
 // file system utilities
@@ -324,7 +355,7 @@
  * @private
  */
 function javaByteArray(len) {
-	return java.lang.reflect.Array.newInstance(java.lang.Byte.TYPE, len);
+    return java.lang.reflect.Array.newInstance(java.lang.Byte.TYPE, len);
 }
 
 var curDir = new File('.');
@@ -333,7 +364,7 @@
  * Print present working directory
  */
 function pwd() {
-	println(curDir.getAbsolutePath());
+    println(curDir.getAbsolutePath());
 }
 
 /**
@@ -341,17 +372,17 @@
  * @param target directory to change to. optional, defaults to user's HOME
  */
 function cd(target) {
-	if (target == undefined) {
-		target = sysProps["user.home"];
-	}
-	if (!(target instanceof File)) {
-		target = pathToFile(target);
-	}
-	if (target.exists() && target.isDirectory()) {
-		curDir = target;
-	} else {
-		println(target + " is not a directory");
-	}
+    if (target == undefined) {
+        target = sysProps["user.home"];
+    }
+    if (!(target instanceof File)) {
+        target = pathToFile(target);
+    }
+    if (target.exists() && target.isDirectory()) {
+        curDir = target;
+    } else {
+        println(target + " is not a directory");
+    }
 }
 
 /**
@@ -361,15 +392,15 @@
  * @private
  */
 function pathToFile(pathname) {
-	var tmp = pathname;
-	if (!(tmp instanceof File)) {
-		tmp = new File(tmp);
-	}
-	if (!tmp.isAbsolute()) {
-		return new File(curDir, pathname);
-	} else {
-		return tmp;
-	}
+    var tmp = pathname;
+    if (!(tmp instanceof File)) {
+        tmp = new File(tmp);
+    }
+    if (!tmp.isAbsolute()) {
+        return new File(curDir, pathname);
+    } else {
+        return tmp;
+    }
 }
 
 /**
@@ -379,22 +410,22 @@
  * @param to output stream or file
  */
 function cp(from, to) {
-	if (from == to) {
-		println("file " + from + " cannot be copied onto itself!");
-		return;
-	}
-	var inp = inStream(from);
-	var out = outStream(to);
-	var binp = new BufferedInputStream(inp);
-	var bout = new BufferedOutputStream(out);
-	var buff = javaByteArray(1024);
-	var len;
-	while ((len = binp.read(buff)) > 0 )
-		bout.write(buff, 0, len);
+    if (from == to) {
+        println("file " + from + " cannot be copied onto itself!");
+        return;
+    }
+    var inp = inStream(from);
+    var out = outStream(to);
+    var binp = new BufferedInputStream(inp);
+    var bout = new BufferedOutputStream(out);
+    var buff = javaByteArray(1024);
+    var len;
+    while ((len = binp.read(buff)) > 0 )
+        bout.write(buff, 0, len);
 
-	bout.flush();
-	streamClose(inp);
-	streamClose(out);	
+    bout.flush();
+    streamClose(inp);
+    streamClose(out);
 }
 
 /**
@@ -403,37 +434,37 @@
  * <pre>
  * <code>
  *    cat('test.txt'); // show test.txt file contents
- *    cat('http://java.net'); // show the contents from the URL http://java.net 
+ *    cat('http://java.net'); // show the contents from the URL http://java.net
  * </code>
  * </pre>
  * @param obj input to show
  * @param pattern optional. show only the lines matching the pattern
  */
 function cat(obj, pattern) {
-	if (obj instanceof File && obj.isDirectory()) {
-		ls(obj);
-		return;
-	}
-	
-	var inp = null;
-	if (!(obj instanceof Reader)) {
-		inp = inStream(obj);
-		obj = new BufferedReader(new InputStreamReader(inp));
-	}
-	var line;
-	if (pattern) {
-		var count = 1;
-		while ((line=obj.readLine()) != null) {
-			if (line.match(pattern)) {
-				println(count + "\t: " + line);
-			}
-			count++;
-		}
-	} else {
-		while ((line=obj.readLine()) != null) {
-			println(line);
-		}
-	}
+    if (obj instanceof File && obj.isDirectory()) {
+        ls(obj);
+        return;
+    }
+
+    var inp = null;
+    if (!(obj instanceof Reader)) {
+        inp = inStream(obj);
+        obj = new BufferedReader(new InputStreamReader(inp));
+    }
+    var line;
+    if (pattern) {
+        var count = 1;
+        while ((line=obj.readLine()) != null) {
+            if (line.match(pattern)) {
+                println(count + "\t: " + line);
+            }
+            count++;
+        }
+    } else {
+        while ((line=obj.readLine()) != null) {
+            println(line);
+        }
+    }
 }
 
 /**
@@ -443,13 +474,13 @@
  * @return directory part of the given file name
  */
 function dirname(pathname) {
-	var dirName = ".";
-	// Normalize '/' to local file separator before work.
-	var i = pathname.replace('/', File.separatorChar ).lastIndexOf( 
-		File.separator );
-	if ( i != -1 )
-		dirName = pathname.substring(0, i);
-	return dirName;
+    var dirName = ".";
+    // Normalize '/' to local file separator before work.
+    var i = pathname.replace('/', File.separatorChar ).lastIndexOf(
+        File.separator );
+    if ( i != -1 )
+        dirName = pathname.substring(0, i);
+    return dirName;
 }
 
 /**
@@ -458,34 +489,34 @@
  * @param dir name of the new directory
  */
 function mkdir(dir) {
-	var dir = pathToFile(dir);
-	println(dir.mkdir()? "created" : "can not create dir");
+    dir = pathToFile(dir);
+    println(dir.mkdir()? "created" : "can not create dir");
 }
 
 /**
- * Creates the directory named by given pathname, including 
+ * Creates the directory named by given pathname, including
  * any necessary but nonexistent parent directories.
  *
  * @param dir input path name
  */
 function mkdirs(dir) {
-	var dir = pathToFile(dir);
-	println(dir.mkdirs()? "created" : "can not create dirs");
+    dir = pathToFile(dir);
+    println(dir.mkdirs()? "created" : "can not create dirs");
 }
-	
+
 /**
- * Removes a given file 
+ * Removes a given file
  *
- * @param pathname name of the file 
+ * @param pathname name of the file
  */
 function rm(pathname) {
-    	file = pathToFile(pathname);
-	if (!file.exists()) {
-		println("file not found: " + pathname);
-		return false;
-	}
-	// note that delete is a keyword in JavaScript!
-	println(file["delete"]()? "deleted" : "can not delete");
+    var file = pathToFile(pathname);
+    if (!file.exists()) {
+        println("file not found: " + pathname);
+        return false;
+    }
+    // note that delete is a keyword in JavaScript!
+    println(file["delete"]()? "deleted" : "can not delete");
 }
 
 /**
@@ -494,14 +525,14 @@
  * @param pathname name of the directory
  */
 function rmdir(pathname) {
-	rm(pathname);
+    rm(pathname);
 }
 
 /**
  * Synonym for 'rm'
  */
 function del(pathname) {
-	rm(pathname);
+    rm(pathname);
 }
 
 /**
@@ -511,62 +542,62 @@
  * @param to new name for the file
  */
 function mv(from, to) {
-	println(pathToFile(from).renameTo(pathToFile(to))? 
-		"moved" : "can not move");
+    println(pathToFile(from).renameTo(pathToFile(to))?
+        "moved" : "can not move");
 }
 
 /**
  * Synonym for 'mv'.
  */
 function ren(from, to) {
-	mv(from, to);
+    mv(from, to);
 }
 
-var months = [ "Jan", "Feb", "Mar", "Apr", "May", "Jun", 
-		"Jul", "Aug", "Sep", "Oct", "Nov", "Dec" ];
+var months = [ "Jan", "Feb", "Mar", "Apr", "May", "Jun",
+        "Jul", "Aug", "Sep", "Oct", "Nov", "Dec" ];
 
 /**
  * Helper function called by ls
  * @private
- */	
+ */
 function printFile(f) {
-	var sb = new java.lang.StringBuffer();
-	sb.append(f.isDirectory()? "d" : "-");
-	sb.append(f.canRead() ? "r": "-" );
-	sb.append(f.canWrite() ? "w": "-" );		
-	sb.append(" ");
+    var sb = new java.lang.StringBuffer();
+    sb.append(f.isDirectory()? "d" : "-");
+    sb.append(f.canRead() ? "r": "-" );
+    sb.append(f.canWrite() ? "w": "-" );
+    sb.append(" ");
 
-	var d = new java.util.Date(f.lastModified());
-	var c = new java.util.GregorianCalendar();
-	c.setTime(d);
-	var day	= c.get(java.util.Calendar.DAY_OF_MONTH);
-	sb.append(months[c.get(java.util.Calendar.MONTH)]
-		 + " " + day );
-	if (day < 10) {
-		sb.append(" ");
-	}
+    var d = new java.util.Date(f.lastModified());
+    var c = new java.util.GregorianCalendar();
+    c.setTime(d);
+    var day    = c.get(java.util.Calendar.DAY_OF_MONTH);
+    sb.append(months[c.get(java.util.Calendar.MONTH)]
+         + " " + day );
+    if (day < 10) {
+        sb.append(" ");
+    }
 
-	// to get fixed length 'length' field
-	var fieldlen = 8;
-	var len = new java.lang.StringBuffer();
-	for(var j=0; j<fieldlen; j++)
-		len.append(" ");
-	len.insert(0, java.lang.Long.toString(f.length()));
-	len.setLength(fieldlen);
-	// move the spaces to the front
-	var si = len.toString().indexOf(" ");
-	if ( si != -1 ) {
-		var pad = len.toString().substring(si);
-		len.setLength(si);
-		len.insert(0, pad);
-	}
-	sb.append(len.toString());
-	sb.append(" ");
-	sb.append(f.getName());
-	if (f.isDirectory()) {
-		sb.append('/');
-	}
-	println(sb.toString());
+    // to get fixed length 'length' field
+    var fieldlen = 8;
+    var len = new java.lang.StringBuffer();
+    for(var j=0; j<fieldlen; j++)
+        len.append(" ");
+    len.insert(0, java.lang.Long.toString(f.length()));
+    len.setLength(fieldlen);
+    // move the spaces to the front
+    var si = len.toString().indexOf(" ");
+    if ( si != -1 ) {
+        var pad = len.toString().substring(si);
+        len.setLength(si);
+        len.insert(0, pad);
+    }
+    sb.append(len.toString());
+    sb.append(" ");
+    sb.append(f.getName());
+    if (f.isDirectory()) {
+        sb.append('/');
+    }
+    println(sb.toString());
 }
 
 /**
@@ -576,32 +607,32 @@
  * @param filter pattern to filter the files listed. optional, default is '.'.
  */
 function ls(dir, filter) {
-	if (dir) {
-		dir = pathToFile(dir);		
-	} else {
-		dir = curDir;
-	}
-	if (dir.isDirectory()) {
-		var files = dir.listFiles();
-		for (var i in files) {
-			var f = files[i];
-			if (filter) {			
-				if(!f.getName().match(filter)) {
-					continue;
-				}
-			}
-			printFile(f);
-		}
-	} else {
-		printFile(dir);
-	}
+    if (dir) {
+        dir = pathToFile(dir);
+    } else {
+        dir = curDir;
+    }
+    if (dir.isDirectory()) {
+        var files = dir.listFiles();
+        for (var i in files) {
+            var f = files[i];
+            if (filter) {
+                if(!f.getName().match(filter)) {
+                    continue;
+                }
+            }
+            printFile(f);
+        }
+    } else {
+        printFile(dir);
+    }
 }
 
 /**
  * Synonym for 'ls'.
  */
 function dir(d, filter) {
-	ls(d, filter);
+    ls(d, filter);
 }
 
 /**
@@ -611,24 +642,24 @@
  * @param files one or more files
  */
 function grep(pattern, files /*, one or more files */) {
-	if (arguments.length < 2) return;
-	for (var i = 1; i < arguments.length; i++) {
-		println(arguments[i] + ":");
-		cat(arguments[i], pattern);
-	}
+    if (arguments.length < 2) return;
+    for (var i = 1; i < arguments.length; i++) {
+        println(arguments[i] + ":");
+        cat(arguments[i], pattern);
+    }
 }
 
 /**
  * Find in files. Calls arbitrary callback function
  * for each matching file.<br>
  *
- * Examples: 
+ * Examples:
  * <pre>
  * <code>
- *    find('.') 
- *    find('.', '.*\.class', rm);  // remove all .class files 
- *    find('.', '.*\.java');       // print fullpath of each .java file 
- *    find('.', '.*\.java', cat);  // print all .java files 
+ *    find('.')
+ *    find('.', '.*\.class', rm);  // remove all .class files
+ *    find('.', '.*\.java');       // print fullpath of each .java file
+ *    find('.', '.*\.java', cat);  // print all .java files
  * </code>
  * </pre>
  *
@@ -637,23 +668,23 @@
  * @param callback function to call for matching files
  */
 function find(dir, pattern, callback) {
-	dir = pathToFile(dir);
-	if (!callback) callback = print;
-	var files = dir.listFiles();
-	for (var f in files) {
-		var file = files[f];
-		if (file.isDirectory()) {
-			find(file, pattern, callback);
-		} else {
-			if (pattern) {
-				if (file.getName().match(pattern)) {
-					callback(file);
-				}
-			} else {
-				callback(file);
-			}
-		}
-	}	
+    dir = pathToFile(dir);
+    if (!callback) callback = print;
+    var files = dir.listFiles();
+    for (var f in files) {
+        var file = files[f];
+        if (file.isDirectory()) {
+            find(file, pattern, callback);
+        } else {
+            if (pattern) {
+                if (file.getName().match(pattern)) {
+                    callback(file);
+                }
+            } else {
+                callback(file);
+            }
+        }
+    }
 }
 
 // process utilities
@@ -664,40 +695,44 @@
  * @param cmd command to execute in child process
  */
 function exec(cmd) {
-	var process = java.lang.Runtime.getRuntime().exec(cmd);
-	var inp = new DataInputStream(process.getInputStream());
-	var line = null;
-	while ((line = inp.readLine()) != null) {
-		println(line);
-	}
-	process.waitFor();
-	$exit = process.exitValue();
+    var process = java.lang.Runtime.getRuntime().exec(cmd);
+    var inp = new DataInputStream(process.getInputStream());
+    var line = null;
+    while ((line = inp.readLine()) != null) {
+        println(line);
+    }
+    process.waitFor();
+    $exit = process.exitValue();
 }
 
-/**
- * Exit the shell program.
- *
- * @param exitCode integer code returned to OS shell.
- * optional, defaults to 0
- */
-function exit(code) {
-	if (code) {
-		java.lang.System.exit(code + 0);		
-	} else {
-		java.lang.System.exit(0);		
-	}
+if (typeof(exit) == 'undefined') {
+    /**
+     * Exit the shell program.
+     *
+     * @param exitCode integer code returned to OS shell.
+     * optional, defaults to 0
+     */
+    var exit = function (code) {
+        if (code) {
+            java.lang.System.exit(code + 0);
+        } else {
+            java.lang.System.exit(0);
+        }
+    }
 }
 
-/**
- * synonym for exit
- */
-function quit(code) {
-	exit(code);
+if (typeof(quit) == 'undefined') {
+    /**
+     * synonym for exit
+     */
+    var quit = function (code) {
+        exit(code);
+    }
 }
 
 // XML utilities
 
-/** 
+/**
  * Converts input to DOM Document object
  *
  * @param inp file or reader. optional, without this param,
@@ -705,17 +740,17 @@
  * @return returns a DOM Document object
  */
 function XMLDocument(inp) {
-	var factory = javax.xml.parsers.DocumentBuilderFactory.newInstance();
-	var builder = factory.newDocumentBuilder();
-	if (inp) {
-		if (typeof(inp) == "string") {
-			return builder.parse(pathToFile(inp));
-		} else {
-			return builder.parse(inp);
-		}
-	} else {
-		return builder.newDocument();
-	}
+    var factory = javax.xml.parsers.DocumentBuilderFactory.newInstance();
+    var builder = factory.newDocumentBuilder();
+    if (inp) {
+        if (typeof(inp) == "string") {
+            return builder.parse(pathToFile(inp));
+        } else {
+            return builder.parse(inp);
+        }
+    } else {
+        return builder.newDocument();
+    }
 }
 
 /**
@@ -725,14 +760,14 @@
  * @return XMLSource object
  */
 function XMLSource(inp) {
-	if (inp instanceof javax.xml.transform.Source) {
-		return inp;
-	} else if (inp instanceof Packages.org.w3c.dom.Document) {
-		return new javax.xml.transform.dom.DOMSource(inp);
-	} else {
-		inp = new BufferedInputStream(inStream(inp));
-		return new javax.xml.transform.stream.StreamSource(inp);
-	}
+    if (inp instanceof javax.xml.transform.Source) {
+        return inp;
+    } else if (inp instanceof Packages.org.w3c.dom.Document) {
+        return new javax.xml.transform.dom.DOMSource(inp);
+    } else {
+        inp = new BufferedInputStream(inStream(inp));
+        return new javax.xml.transform.stream.StreamSource(inp);
+    }
 }
 
 /**
@@ -742,73 +777,73 @@
  * @return XMLResult object
  */
 function XMLResult(out) {
-	if (out instanceof javax.xml.transform.Result) {
-		return out;
-	} else if (out instanceof Packages.org.w3c.dom.Document) {
-		return new javax.xml.transform.dom.DOMResult(out);
-	} else {
-		out = new BufferedOutputStream(outStream(out));
-		return new javax.xml.transform.stream.StreamResult(out);
-	}
+    if (out instanceof javax.xml.transform.Result) {
+        return out;
+    } else if (out instanceof Packages.org.w3c.dom.Document) {
+        return new javax.xml.transform.dom.DOMResult(out);
+    } else {
+        out = new BufferedOutputStream(outStream(out));
+        return new javax.xml.transform.stream.StreamResult(out);
+    }
 }
 
 /**
- * Perform XSLT transform 
+ * Perform XSLT transform
  *
  * @param inp Input XML to transform (URL, File or InputStream)
  * @param style XSL Stylesheet to be used (URL, File or InputStream). optional.
  * @param out Output XML (File or OutputStream
  */
 function XSLTransform(inp, style, out) {
-	switch (arguments.length) {
-	case 2:
-		inp = arguments[0];
-		out = arguments[1];
-		break;
-	case 3:
-		inp = arguments[0];
-		style = arguments[1];
-		out = arguments[2];
-		break;
-	default:
-		println("XSL tranform requires 2 or 3 arguments");
-		return;
-	}
+    switch (arguments.length) {
+    case 2:
+        inp = arguments[0];
+        out = arguments[1];
+        break;
+    case 3:
+        inp = arguments[0];
+        style = arguments[1];
+        out = arguments[2];
+        break;
+    default:
+        println("XSL tranform requires 2 or 3 arguments");
+        return;
+    }
 
-	var factory = javax.xml.transform.TransformerFactory.newInstance();
-	var tranformer;
-	if (style) {		
-		transformer = factory.newTransformer(XMLSource(style));	
-	} else {
-		transformer = factory.newTransformer();
-	}
-	var source = XMLSource(inp);
-	var result = XMLResult(out);
-	transformer.transform(source, result);
-	if (source.getInputStream) {
-		streamClose(source.getInputStream());
-	}
-	if (result.getOutputStream) {
-		streamClose(result.getOutputStream());
-	}
+    var factory = javax.xml.transform.TransformerFactory.newInstance();
+    var transformer;
+    if (style) {
+        transformer = factory.newTransformer(XMLSource(style));
+    } else {
+        transformer = factory.newTransformer();
+    }
+    var source = XMLSource(inp);
+    var result = XMLResult(out);
+    transformer.transform(source, result);
+    if (source.getInputStream) {
+        streamClose(source.getInputStream());
+    }
+    if (result.getOutputStream) {
+        streamClose(result.getOutputStream());
+    }
 }
 
 // miscellaneous utilities
 
 /**
- * Prints which command is selected from PATH 
+ * Prints which command is selected from PATH
  *
  * @param cmd name of the command searched from PATH
  */
 function which(cmd) {
-	var st = new java.util.StringTokenizer(env.PATH, File.pathSeparator);
-	while (st.hasMoreTokens()) {
-		var file = new File(st.nextToken(), cmd);
-		if (file.exists()) {
-			println(file.getAbsolutePath());
-			return;
-		}
-	}
+    var st = new java.util.StringTokenizer(env.PATH, File.pathSeparator);
+    while (st.hasMoreTokens()) {
+        var file = new File(st.nextToken(), cmd);
+        if (file.exists()) {
+            println(file.getAbsolutePath());
+            return;
+        }
+    }
 }
 
 /**
@@ -817,41 +852,43 @@
  * @param name domain name
  */
 function ip(name) {
-	var addrs = InetAddress.getAllByName(name);	
-	for (var i in addrs) {
-		println(addrs[i]);
-	}
+    var addrs = InetAddress.getAllByName(name);
+    for (var i in addrs) {
+        println(addrs[i]);
+    }
 }
 
 /**
  * Prints current date in current locale
  */
 function date() {
-	println(new Date().toLocaleString());
+    println(new Date().toLocaleString());
 }
 
 /**
  * Echoes the given string arguments
  */
 function echo(x) {
-	for (var i = 0; i < arguments.length; i++) {
-		println(arguments[i]);
-	}
+    for (var i = 0; i < arguments.length; i++) {
+        println(arguments[i]);
+    }
 }
 
-/**
- * This is C-like printf 
- *
- * @param format string to format the rest of the print items
- * @param args variadic argument list
- */
-function printf(format, args/*, more args*/) {	
-	var array = java.lang.reflect.Array.newInstance(java.lang.Object, 
-			arguments.length - 1);
-	for (var i = 0; i < array.length; i++) {
-		array[i] = arguments[i+1];
-	}
-	return java.lang.System.out.printf(format, array);
+if (typeof(printf) == 'undefined') {
+    /**
+     * This is C-like printf 
+     *
+     * @param format string to format the rest of the print items
+     * @param args variadic argument list
+     */
+    var printf = function (format, args/*, more args*/) {  
+        var array = java.lang.reflect.Array.newInstance(java.lang.Object, 
+                    arguments.length - 1);
+        for (var i = 0; i < array.length; i++) {
+            array[i] = arguments[i+1];
+        }
+        java.lang.System.out.printf(format, array);
+    }
 }
 
 /**
@@ -861,24 +898,48 @@
  * @param multiline to tell whether to read single line or multiple lines
  */
 function read(prompt, multiline) {
-	if (!prompt) {
-		prompt = '>';
-	}	
-	var inp = java.lang.System["in"];
-	var reader = new BufferedReader(new InputStreamReader(inp));
-	if (multiline) {
-		var line = '';
-		while (true) {
-			java.lang.System.err.print(prompt);
-			java.lang.System.err.flush();
-			var tmp = reader.readLine();
-			if (tmp == '' || tmp == null) break;
-			line += tmp + '\n';
-		}
-		return line;
-	} else {
-		java.lang.System.err.print(prompt);
-		java.lang.System.err.flush();	
-		return reader.readLine();
-	}
+    if (!prompt) {
+        prompt = '>';
+    }
+    var inp = java.lang.System["in"];
+    var reader = new BufferedReader(new InputStreamReader(inp));
+    if (multiline) {
+        var line = '';
+        while (true) {
+            java.lang.System.err.print(prompt);
+            java.lang.System.err.flush();
+            var tmp = reader.readLine();
+            if (tmp == '' || tmp == null) break;
+            line += tmp + '\n';
+        }
+        return line;
+    } else {
+        java.lang.System.err.print(prompt);
+        java.lang.System.err.flush();
+        return reader.readLine();
+    }
 }
+
+if (typeof(println) == 'undefined') {
+    var print = function(str, newline) {
+        if (typeof(str) == 'undefined') {
+            str = 'undefined';
+        } else if (str == null) {
+            str = 'null';
+        }
+
+        if (!(out instanceof java.io.PrintWriter)) {
+            out = new java.io.PrintWriter(out);
+        }
+
+        out.print(String(str));
+        if (newline) {
+            out.print('\n');
+        }
+        out.flush();
+    }
+
+    var println = function(str) {
+        print(str, true);
+    };
+}
--- a/jdk/src/share/classes/java/lang/ClassLoader.java	Tue Apr 02 14:13:13 2013 -0400
+++ b/jdk/src/share/classes/java/lang/ClassLoader.java	Tue Apr 02 15:31:24 2013 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2013, 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
@@ -1683,22 +1683,29 @@
         private int jniVersion;
         // the class from which the library is loaded, also indicates
         // the loader this native library belongs.
-        private Class<?> fromClass;
+        private final Class<?> fromClass;
         // the canonicalized name of the native library.
+        // or static library name
         String name;
+        // Indicates if the native library is linked into the VM
+        boolean isBuiltin;
+        // Indicates if the native library is loaded
+        boolean loaded;
+        native void load(String name, boolean isBuiltin);
 
-        native void load(String name);
         native long find(String name);
-        native void unload();
+        native void unload(String name, boolean isBuiltin);
+        static native String findBuiltinLib(String name);
 
-        public NativeLibrary(Class<?> fromClass, String name) {
+        public NativeLibrary(Class<?> fromClass, String name, boolean isBuiltin) {
             this.name = name;
             this.fromClass = fromClass;
+            this.isBuiltin = isBuiltin;
         }
 
         protected void finalize() {
             synchronized (loadedLibraryNames) {
-                if (fromClass.getClassLoader() != null && handle != 0) {
+                if (fromClass.getClassLoader() != null && loaded) {
                     /* remove the native library name */
                     int size = loadedLibraryNames.size();
                     for (int i = 0; i < size; i++) {
@@ -1710,7 +1717,7 @@
                     /* unload the library. */
                     ClassLoader.nativeLibraryContext.push(this);
                     try {
-                        unload();
+                        unload(name, isBuiltin);
                     } finally {
                         ClassLoader.nativeLibraryContext.pop();
                     }
@@ -1830,20 +1837,24 @@
     }
 
     private static boolean loadLibrary0(Class<?> fromClass, final File file) {
-        boolean exists = AccessController.doPrivileged(
-            new PrivilegedAction<Object>() {
-                public Object run() {
-                    return file.exists() ? Boolean.TRUE : null;
-                }})
-            != null;
-        if (!exists) {
-            return false;
-        }
-        String name;
-        try {
-            name = file.getCanonicalPath();
-        } catch (IOException e) {
-            return false;
+        // Check to see if we're attempting to access a static library
+        String name = NativeLibrary.findBuiltinLib(file.getName());
+        boolean isBuiltin = (name != null);
+        if (!isBuiltin) {
+            boolean exists = AccessController.doPrivileged(
+                new PrivilegedAction<Object>() {
+                    public Object run() {
+                        return file.exists() ? Boolean.TRUE : null;
+                    }})
+                != null;
+            if (!exists) {
+                return false;
+            }
+            try {
+                name = file.getCanonicalPath();
+            } catch (IOException e) {
+                return false;
+            }
         }
         ClassLoader loader =
             (fromClass == null) ? null : fromClass.getClassLoader();
@@ -1891,14 +1902,14 @@
                         }
                     }
                 }
-                NativeLibrary lib = new NativeLibrary(fromClass, name);
+                NativeLibrary lib = new NativeLibrary(fromClass, name, isBuiltin);
                 nativeLibraryContext.push(lib);
                 try {
-                    lib.load(name);
+                    lib.load(name, isBuiltin);
                 } finally {
                     nativeLibraryContext.pop();
                 }
-                if (lib.handle != 0) {
+                if (lib.loaded) {
                     loadedLibraryNames.addElement(name);
                     libs.addElement(lib);
                     return true;
--- a/jdk/src/share/classes/java/lang/Runtime.java	Tue Apr 02 14:13:13 2013 -0400
+++ b/jdk/src/share/classes/java/lang/Runtime.java	Tue Apr 02 15:31:24 2013 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1995, 2011, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1995, 2013, 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
@@ -749,10 +749,21 @@
     public native void traceMethodCalls(boolean on);
 
     /**
-     * Loads the specified filename as a dynamic library. The filename
-     * argument must be a complete path name,
+     * Loads the native library specified by the filename argument.  The filename
+     * argument must be an absolute path name.
      * (for example
      * <code>Runtime.getRuntime().load("/home/avh/lib/libX11.so");</code>).
+     *
+     * If the filename argument, when stripped of any platform-specific library
+     * prefix, path, and file extension, indicates a library whose name is,
+     * for example, L, and a native library called L is statically linked
+     * with the VM, then the JNI_OnLoad_L function exported by the library
+     * is invoked rather than attempting to load a dynamic library.
+     * A filename matching the argument does not have to exist in the file
+     * system. See the JNI Specification for more details.
+     *
+     * Otherwise, the filename argument is mapped to a native library image in
+     * an implementation-dependent manner.
      * <p>
      * First, if there is a security manager, its <code>checkLink</code>
      * method is called with the <code>filename</code> as its argument.
@@ -769,7 +780,10 @@
      * @exception  SecurityException  if a security manager exists and its
      *             <code>checkLink</code> method doesn't allow
      *             loading of the specified dynamic library
-     * @exception  UnsatisfiedLinkError  if the file does not exist.
+     * @exception  UnsatisfiedLinkError  if either the filename is not an
+     *             absolute path name, the native library is not statically
+     *             linked with the VM, or the library cannot be mapped to
+     *             a native library image by the host system.
      * @exception  NullPointerException if <code>filename</code> is
      *             <code>null</code>
      * @see        java.lang.Runtime#getRuntime()
@@ -793,12 +807,16 @@
     }
 
     /**
-     * Loads the dynamic library with the specified library name.
-     * A file containing native code is loaded from the local file system
-     * from a place where library files are conventionally obtained. The
-     * details of this process are implementation-dependent. The
-     * mapping from a library name to a specific filename is done in a
-     * system-specific manner.
+     * Loads the native library specified by the <code>libname</code>
+     * argument.  The <code>libname</code> argument must not contain any platform
+     * specific prefix, file extension or path. If a native library
+     * called <code>libname</code> is statically linked with the VM, then the
+     * JNI_OnLoad_<code>libname</code> function exported by the library is invoked.
+     * See the JNI Specification for more details.
+     *
+     * Otherwise, the libname argument is loaded from a system library
+     * location and mapped to a native library image in an implementation-
+     * dependent manner.
      * <p>
      * First, if there is a security manager, its <code>checkLink</code>
      * method is called with the <code>libname</code> as its argument.
@@ -823,7 +841,10 @@
      * @exception  SecurityException  if a security manager exists and its
      *             <code>checkLink</code> method doesn't allow
      *             loading of the specified dynamic library
-     * @exception  UnsatisfiedLinkError  if the library does not exist.
+     * @exception  UnsatisfiedLinkError if either the libname argument
+     *             contains a file path, the native library is not statically
+     *             linked with the VM,  or the library cannot be mapped to a
+     *             native library image by the host system.
      * @exception  NullPointerException if <code>libname</code> is
      *             <code>null</code>
      * @see        java.lang.SecurityException
--- a/jdk/src/share/classes/java/lang/System.java	Tue Apr 02 14:13:13 2013 -0400
+++ b/jdk/src/share/classes/java/lang/System.java	Tue Apr 02 15:31:24 2013 -0700
@@ -1037,9 +1037,21 @@
     }
 
     /**
-     * Loads a code file with the specified filename from the local file
-     * system as a dynamic library. The filename
-     * argument must be a complete path name.
+     * Loads the native library specified by the filename argument.  The filename
+     * argument must be an absolute path name.
+     *
+     * If the filename argument, when stripped of any platform-specific library
+     * prefix, path, and file extension, indicates a library whose name is,
+     * for example, L, and a native library called L is statically linked
+     * with the VM, then the JNI_OnLoad_L function exported by the library
+     * is invoked rather than attempting to load a dynamic library.
+     * A filename matching the argument does not have to exist in the
+     * file system.
+     * See the JNI Specification for more details.
+     *
+     * Otherwise, the filename argument is mapped to a native library image in
+     * an implementation-dependent manner.
+     *
      * <p>
      * The call <code>System.load(name)</code> is effectively equivalent
      * to the call:
@@ -1051,7 +1063,10 @@
      * @exception  SecurityException  if a security manager exists and its
      *             <code>checkLink</code> method doesn't allow
      *             loading of the specified dynamic library
-     * @exception  UnsatisfiedLinkError  if the file does not exist.
+     * @exception  UnsatisfiedLinkError  if either the filename is not an
+     *             absolute path name, the native library is not statically
+     *             linked with the VM, or the library cannot be mapped to
+     *             a native library image by the host system.
      * @exception  NullPointerException if <code>filename</code> is
      *             <code>null</code>
      * @see        java.lang.Runtime#load(java.lang.String)
@@ -1062,9 +1077,16 @@
     }
 
     /**
-     * Loads the system library specified by the <code>libname</code>
-     * argument. The manner in which a library name is mapped to the
-     * actual system library is system dependent.
+     * Loads the native library specified by the <code>libname</code>
+     * argument.  The <code>libname</code> argument must not contain any platform
+     * specific prefix, file extension or path. If a native library
+     * called <code>libname</code> is statically linked with the VM, then the
+     * JNI_OnLoad_<code>libname</code> function exported by the library is invoked.
+     * See the JNI Specification for more details.
+     *
+     * Otherwise, the libname argument is loaded from a system library
+     * location and mapped to a native library image in an implementation-
+     * dependent manner.
      * <p>
      * The call <code>System.loadLibrary(name)</code> is effectively
      * equivalent to the call
@@ -1076,7 +1098,10 @@
      * @exception  SecurityException  if a security manager exists and its
      *             <code>checkLink</code> method doesn't allow
      *             loading of the specified dynamic library
-     * @exception  UnsatisfiedLinkError  if the library does not exist.
+     * @exception  UnsatisfiedLinkError if either the libname argument
+     *             contains a file path, the native library is not statically
+     *             linked with the VM,  or the library cannot be mapped to a
+     *             native library image by the host system.
      * @exception  NullPointerException if <code>libname</code> is
      *             <code>null</code>
      * @see        java.lang.Runtime#loadLibrary(java.lang.String)
--- a/jdk/src/share/classes/java/lang/invoke/DirectMethodHandle.java	Tue Apr 02 14:13:13 2013 -0400
+++ b/jdk/src/share/classes/java/lang/invoke/DirectMethodHandle.java	Tue Apr 02 15:31:24 2013 -0700
@@ -52,7 +52,8 @@
         super(mtype, form);
         if (!member.isResolved())  throw new InternalError();
 
-        if (member.getDeclaringClass().isInterface() && !member.isAbstract()) {
+        if (member.getDeclaringClass().isInterface() &&
+                member.isMethod() && !member.isAbstract()) {
             // Check for corner case: invokeinterface of Object method
             MemberName m = new MemberName(Object.class, member.getName(), member.getMethodType(), member.getReferenceKind());
             m = MemberName.getFactory().resolveOrNull(m.getReferenceKind(), m, null);
--- a/jdk/src/share/classes/java/lang/reflect/Method.java	Tue Apr 02 14:13:13 2013 -0400
+++ b/jdk/src/share/classes/java/lang/reflect/Method.java	Tue Apr 02 15:31:24 2013 -0700
@@ -522,16 +522,19 @@
      * Returns {@code true} if this method is a default
      * method; returns {@code false} otherwise.
      *
-     * A default method is a non-abstract method, that is, a method
-     * with a body, declared in an interface type.
+     * A default method is a public non-abstract instance method, that
+     * is, a non-static method with a body, declared in an interface
+     * type.
      *
      * @return true if and only if this method is a default
      * method as defined by the Java Language Specification.
      * @since 1.8
      */
     public boolean isDefault() {
-        return (getModifiers() & Modifier.ABSTRACT) == 0 &&
-            getDeclaringClass().isInterface();
+        // Default methods are public non-abstract instance methods
+        // declared in an interface.
+        return ((getModifiers() & (Modifier.ABSTRACT | Modifier.PUBLIC | Modifier.STATIC)) ==
+                Modifier.PUBLIC) && getDeclaringClass().isInterface();
     }
 
     // NOTE that there is no synchronization used here. It is correct
--- a/jdk/src/share/classes/java/util/Calendar.java	Tue Apr 02 14:13:13 2013 -0400
+++ b/jdk/src/share/classes/java/util/Calendar.java	Tue Apr 02 15:31:24 2013 -0700
@@ -57,6 +57,8 @@
 import sun.util.BuddhistCalendar;
 import sun.util.calendar.ZoneInfo;
 import sun.util.locale.provider.CalendarDataUtility;
+import sun.util.locale.provider.LocaleProviderAdapter;
+import sun.util.spi.CalendarProvider;
 
 /**
  * The <code>Calendar</code> class is an abstract class that provides methods
@@ -1608,9 +1610,7 @@
      */
     public static Calendar getInstance()
     {
-        Calendar cal = createCalendar(TimeZone.getDefaultRef(), Locale.getDefault(Locale.Category.FORMAT));
-        cal.sharedZone = true;
-        return cal;
+        return createCalendar(TimeZone.getDefault(), Locale.getDefault(Locale.Category.FORMAT));
     }
 
     /**
@@ -1637,9 +1637,7 @@
      */
     public static Calendar getInstance(Locale aLocale)
     {
-        Calendar cal = createCalendar(TimeZone.getDefaultRef(), aLocale);
-        cal.sharedZone = true;
-        return cal;
+        return createCalendar(TimeZone.getDefault(), aLocale);
     }
 
     /**
@@ -1660,6 +1658,17 @@
     private static Calendar createCalendar(TimeZone zone,
                                            Locale aLocale)
     {
+        CalendarProvider provider =
+            LocaleProviderAdapter.getAdapter(CalendarProvider.class, aLocale)
+                                 .getCalendarProvider();
+        if (provider != null) {
+            try {
+                return provider.getInstance(zone, aLocale);
+            } catch (IllegalArgumentException iae) {
+                // fall back to the default instantiation
+            }
+        }
+
         Calendar cal = null;
 
         if (aLocale.hasExtensions()) {
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/src/share/classes/java/util/Optional.java	Tue Apr 02 15:31:24 2013 -0700
@@ -0,0 +1,243 @@
+/*
+ * Copyright (c) 2012, 2013, 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 java.util;
+
+import java.util.function.Consumer;
+import java.util.function.Supplier;
+
+/**
+ * A container object which may or may not contain a non-null value.
+ * If a value is present, {@code isPresent()} will return {@code true} and
+ * {@code get()} will return the value.
+ *
+ * <p>Additional methods that depend on the presence or absence of a contained
+ * value are provided, such as {@link #orElse(java.lang.Object) orElse()}
+ * (return a default value if value not present) and
+ * {@link #ifPresent(java.util.function.Consumer) ifPresent()} (execute a block
+ * of code if the value is present).
+ *
+ * @since 1.8
+ */
+public final class Optional<T> {
+    /**
+     * Common instance for {@code empty()}.
+     */
+    private static final Optional<?> EMPTY = new Optional<>();
+
+    /**
+     * If non-null, the value; if null, indicates no value is present
+     */
+    private final T value;
+
+    /**
+     * Construct an empty instance.
+     *
+     * @implNote Generally only one empty instance, {@link Optional#EMPTY},
+     * should exist per VM.
+     */
+    private Optional() {
+        this.value = null;
+    }
+
+    /**
+     * Returns an empty {@code Optional} instance.  No value is present for this
+     * Optional.
+     *
+     * @apiNote Though it may be tempting to do so, avoid testing if an object
+     * is empty by comparing with {@code ==} against instances returned by
+     * {@code Option.empty()}. There is no guarantee that it is a singleton.
+     * Instead, use {@link #isPresent()}.
+     *
+     * @param <T> Type of the non-existent value
+     * @return an empty {@code Optional}
+     */
+    public static<T> Optional<T> empty() {
+        @SuppressWarnings("unchecked")
+        Optional<T> t = (Optional<T>) EMPTY;
+        return t;
+    }
+
+    /**
+     * Construct an instance with the value present.
+     *
+     * @param value the non-null value to be present
+     */
+    private Optional(T value) {
+        this.value = Objects.requireNonNull(value);
+    }
+
+    /**
+     * Return an {@code Optional} with the specified present value.
+     *
+     * @param value the value to be present, which must be non-null
+     * @return an {@code Optional} with the value present
+     */
+    public static <T> Optional<T> of(T value) {
+        return new Optional<>(value);
+    }
+
+    /**
+     * If a value is present in this {@code Optional}, returns the value,
+     * otherwise throws {@code NoSuchElementException}.
+     *
+     * @return the non-null value held by this {@code Optional}
+     * @throws NoSuchElementException if there is no value present
+     *
+     * @see Optional#isPresent()
+     */
+    public T get() {
+        if (value == null) {
+            throw new NoSuchElementException("No value present");
+        }
+        return value;
+    }
+
+    /**
+     * Return {@code true} if there is a value present, otherwise {@code false}.
+     *
+     * @return {@code true} if there is a value present, otherwise {@code false}
+     */
+    public boolean isPresent() {
+        return value != null;
+    }
+
+    /**
+     * Have the specified consumer accept the value if a value is present,
+     * otherwise do nothing.
+     *
+     * @param consumer block to be executed if a value is present
+     * @throws NullPointerException if value is present and {@code consumer} is
+     * null
+     */
+    public void ifPresent(Consumer<? super T> consumer) {
+        if (value != null)
+            consumer.accept(value);
+    }
+
+    /**
+     * Return the value if present, otherwise return {@code other}.
+     *
+     * @param other the value to be returned if there is no value present, may
+     * be null
+     * @return the value, if present, otherwise {@code other}
+     */
+    public T orElse(T other) {
+        return value != null ? value : other;
+    }
+
+    /**
+     * Return the value if present, otherwise invoke {@code other} and return
+     * the result of that invocation.
+     *
+     * @param other a {@code Supplier} whose result is returned if no value
+     * is present
+     * @return the value if present otherwise the result of {@code other.get()}
+     * @throws NullPointerException if value is not present and {@code other} is
+     * null
+     */
+    public T orElseGet(Supplier<? extends T> other) {
+        return value != null ? value : other.get();
+    }
+
+    /**
+     * Return the contained value, if present, otherwise throw an exception
+     * to be created by the provided supplier.
+     *
+     * @apiNote A method reference to the exception constructor with an empty
+     * argument list can be used as the supplier. For example,
+     * {@code IllegalStateException::new}
+     *
+     * @param <X> Type of the exception to be thrown
+     * @param exceptionSupplier The supplier which will return the exception to
+     * be thrown
+     * @return the present value
+     * @throws X if there is no value present
+     * @throws NullPointerException if no value is present and
+     * {@code exceptionSupplier} is null
+     */
+    public <X extends Throwable> T orElseThrow(Supplier<? extends X> exceptionSupplier) throws X {
+        if (value != null) {
+            return value;
+        } else {
+            throw exceptionSupplier.get();
+        }
+    }
+
+    /**
+     * Indicates whether some other object is "equal to" this Optional. The
+     * other object is considered equal if:
+     * <ul>
+     * <li>it is also an {@code Optional} and;
+     * <li>both instances have no value present or;
+     * <li>the present values are "equal to" each other via {@code equals()}.
+     * </ul>
+     *
+     * @param obj an object to be tested for equality
+     * @return {code true} if the other object is "equal to" this object
+     * otherwise {@code false}
+     */
+    @Override
+    public boolean equals(Object obj) {
+        if (this == obj) {
+            return true;
+        }
+
+        if (!(obj instanceof Optional)) {
+            return false;
+        }
+
+        Optional other = (Optional) obj;
+        return Objects.equals(value, other.value);
+    }
+
+    /**
+     * Returns the hash code value of the present value, if any, or 0 (zero) if
+     * no value is present.
+     *
+     * @return hash code value of the present value or 0 if no value is present
+     */
+    @Override
+    public int hashCode() {
+        return Objects.hashCode(value);
+    }
+
+    /**
+     * Returns a non-empty string representation of this Optional suitable for
+     * debugging. The exact presentation format is unspecified and may vary
+     * between implementations and versions.
+     *
+     * @implSpec If a value is present the result must include its string
+     * representation in the result. Empty and present Optionals must be
+     * unambiguously differentiable.
+     *
+     * @return the string representation of this instance
+     */
+    @Override
+    public String toString() {
+        return value != null
+            ? String.format("Optional[%s]", value)
+            : "Optional.empty";
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/src/share/classes/java/util/OptionalDouble.java	Tue Apr 02 15:31:24 2013 -0700
@@ -0,0 +1,245 @@
+/*
+ * Copyright (c) 2012, 2013, 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 java.util;
+
+import java.util.function.DoubleConsumer;
+import java.util.function.DoubleSupplier;
+import java.util.function.Supplier;
+
+/**
+ * A container object which may or may not contain a {@code double} value.
+ * If a value is present, {@code isPresent()} will return {@code true} and
+ * {@code get()} will return the value.
+ *
+ * <p>Additional methods that depend on the presence or absence of a contained
+ * value are provided, such as {@link #orElse(double) orElse()}
+ * (return a default value if value not present) and
+ * {@link #ifPresent(java.util.function.DoubleConsumer) ifPresent()} (execute a block
+ * of code if the value is present).
+ *
+ * @since 1.8
+ */
+public final class OptionalDouble {
+    /**
+     * Common instance for {@code empty()}.
+     */
+    private static final OptionalDouble EMPTY = new OptionalDouble();
+
+    /**
+     * If true then the value is present, otherwise indicates no value is present
+     */
+    private final boolean isPresent;
+    private final double value;
+
+    /**
+     * Construct an empty instance.
+     *
+     * @implNote generally only one empty instance, {@link OptionalDouble#EMPTY},
+     * should exist per VM.
+     */
+    private OptionalDouble() {
+        this.isPresent = false;
+        this.value = Double.NaN;
+    }
+
+    /**
+     * Returns an empty {@code OptionalDouble} instance.  No value is present for this
+     * OptionalDouble.
+     *
+     * @apiNote Though it may be tempting to do so, avoid testing if an object
+     * is empty by comparing with {@code ==} against instances returned by
+     * {@code Option.empty()}. There is no guarantee that it is a singleton.
+     * Instead, use {@link #isPresent()}.
+     *
+     *  @return an empty {@code OptionalDouble}.
+     */
+    public static OptionalDouble empty() {
+        return EMPTY;
+    }
+
+    /**
+     * Construct an instance with the value present.
+     *
+     * @param value the double value to be present.
+     */
+    private OptionalDouble(double value) {
+        this.isPresent = true;
+        this.value = value;
+    }
+
+    /**
+     * Return an {@code OptionalDouble} with the specified value present.
+     *
+     * @param value the value to be present
+     * @return an {@code OptionalDouble} with the value present
+     */
+    public static OptionalDouble of(double value) {
+        return new OptionalDouble(value);
+    }
+
+    /**
+     * If a value is present in this {@code OptionalDouble}, returns the value,
+     * otherwise throws {@code NoSuchElementException}.
+     *
+     * @return the value held by this {@code OptionalDouble}
+     * @throws NoSuchElementException if there is no value present
+     *
+     * @see OptionalDouble#isPresent()
+     */
+    public double getAsDouble() {
+        if (!isPresent) {
+            throw new NoSuchElementException("No value present");
+        }
+        return value;
+    }
+
+    /**
+     * Return {@code true} if there is a value present, otherwise {@code false}.
+     *
+     * @return {@code true} if there is a value present, otherwise {@code false}
+     */
+    public boolean isPresent() {
+        return isPresent;
+    }
+
+    /**
+     * Have the specified consumer accept the value if a value is present,
+     * otherwise do nothing.
+     *
+     * @param consumer block to be executed if a value is present
+     * @throws NullPointerException if value is present and {@code consumer} is
+     * null
+     */
+    public void ifPresent(DoubleConsumer consumer) {
+        if (isPresent)
+            consumer.accept(value);
+    }
+
+    /**
+     * Return the value if present, otherwise return {@code other}.
+     *
+     * @param other the value to be returned if there is no value present
+     * @return the value, if present, otherwise {@code other}
+     */
+    public double orElse(double other) {
+        return isPresent ? value : other;
+    }
+
+    /**
+     * Return the value if present, otherwise invoke {@code other} and return
+     * the result of that invocation.
+     *
+     * @param other a {@code DoubleSupplier} whose result is returned if no value
+     * is present
+     * @return the value if present otherwise the result of {@code other.getAsDouble()}
+     * @throws NullPointerException if value is not present and {@code other} is
+     * null
+     */
+    public double orElseGet(DoubleSupplier other) {
+        return isPresent ? value : other.getAsDouble();
+    }
+
+    /**
+     * Return the contained value, if present, otherwise throw an exception
+     * to be created by the provided supplier.
+     *
+     * @apiNote A method reference to the exception constructor with an empty
+     * argument list can be used as the supplier. For example,
+     * {@code IllegalStateException::new}
+     *
+     * @param <X> Type of the exception to be thrown
+     * @param exceptionSupplier The supplier which will return the exception to
+     * be thrown
+     * @return the present value
+     * @throws X if there is no value present
+     * @throws NullPointerException if no value is present and
+     * {@code exceptionSupplier} is null
+     */
+    public<X extends Throwable> double orElseThrow(Supplier<X> exceptionSupplier) throws X {
+        if (isPresent) {
+            return value;
+        } else {
+            throw exceptionSupplier.get();
+        }
+    }
+
+    /**
+     * Indicates whether some other object is "equal to" this Optional. The
+     * other object is considered equal if:
+     * <ul>
+     * <li>it is also an {@code OptionalInt} and;
+     * <li>both instances have no value present or;
+     * <li>the present values are "equal to" each other via {@code Double.compare() == 0}.
+     * </ul>
+     *
+     * @param obj an object to be tested for equality
+     * @return {code true} if the other object is "equal to" this object
+     * otherwise {@code false}
+     */
+    @Override
+    public boolean equals(Object obj) {
+        if (this == obj) {
+            return true;
+        }
+
+        if (!(obj instanceof OptionalDouble)) {
+            return false;
+        }
+
+        OptionalDouble other = (OptionalDouble) obj;
+        return (isPresent && other.isPresent)
+               ? Double.compare(value, other.value) == 0
+               : isPresent == other.isPresent;
+    }
+
+    /**
+     * Returns the hash code value of the present value, if any, or 0 (zero) if
+     * no value is present.
+     *
+     * @return hash code value of the present value or 0 if no value is present
+     */
+    @Override
+    public int hashCode() {
+        return isPresent ? Double.hashCode(value) : 0;
+    }
+
+    /**
+     * Returns a non-empty string representation of this OptionalDouble suitable for
+     * debugging. The exact presentation format is unspecified and may vary
+     * between implementations and versions.
+     *
+     * @implSpec If a value is present the result must include its string
+     * representation in the result. Empty and present OptionalDoubless must be
+     * unambiguously differentiable.
+     *
+     * @return the string representation of this instance
+     */
+    @Override
+    public String toString() {
+        return isPresent
+                ? String.format("OptionalDouble[%s]", value)
+                : "OptionalDouble.empty";
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/src/share/classes/java/util/OptionalInt.java	Tue Apr 02 15:31:24 2013 -0700
@@ -0,0 +1,245 @@
+/*
+ * Copyright (c) 2012, 2013, 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 java.util;
+
+import java.util.function.IntConsumer;
+import java.util.function.IntSupplier;
+import java.util.function.Supplier;
+
+/**
+ * A container object which may or may not contain a {@code int} value.
+ * If a value is present, {@code isPresent()} will return {@code true} and
+ * {@code get()} will return the value.
+ *
+ * <p>Additional methods that depend on the presence or absence of a contained
+ * value are provided, such as {@link #orElse(int) orElse()}
+ * (return a default value if value not present) and
+ * {@link #ifPresent(java.util.function.IntConsumer) ifPresent()} (execute a block
+ * of code if the value is present).
+ *
+ * @since 1.8
+ */
+public final class OptionalInt {
+    /**
+     * Common instance for {@code empty()}.
+     */
+    private static final OptionalInt EMPTY = new OptionalInt();
+
+    /**
+     * If true then the value is present, otherwise indicates no value is present
+     */
+    private final boolean isPresent;
+    private final int value;
+
+    /**
+     * Construct an empty instance.
+     *
+     * @implNote Generally only one empty instance, {@link OptionalInt#EMPTY},
+     * should exist per VM.
+     */
+    private OptionalInt() {
+        this.isPresent = false;
+        this.value = 0;
+    }
+
+    /**
+     * Returns an empty {@code OptionalInt} instance.  No value is present for this
+     * OptionalInt.
+     *
+     * @apiNote Though it may be tempting to do so, avoid testing if an object
+     * is empty by comparing with {@code ==} against instances returned by
+     * {@code Option.empty()}. There is no guarantee that it is a singleton.
+     * Instead, use {@link #isPresent()}.
+     *
+     *  @return an empty {@code OptionalInt}
+     */
+    public static OptionalInt empty() {
+        return EMPTY;
+    }
+
+    /**
+     * Construct an instance with the value present.
+     *
+     * @param value the int value to be present
+     */
+    private OptionalInt(int value) {
+        this.isPresent = true;
+        this.value = value;
+    }
+
+    /**
+     * Return an {@code OptionalInt} with the specified value present.
+     *
+     * @param value the value to be present
+     * @return an {@code OptionalInt} with the value present
+     */
+    public static OptionalInt of(int value) {
+        return new OptionalInt(value);
+    }
+
+    /**
+     * If a value is present in this {@code OptionalInt}, returns the value,
+     * otherwise throws {@code NoSuchElementException}.
+     *
+     * @return the value held by this {@code OptionalInt}
+     * @throws NoSuchElementException if there is no value present
+     *
+     * @see OptionalInt#isPresent()
+     */
+    public int getAsInt() {
+        if (!isPresent) {
+            throw new NoSuchElementException("No value present");
+        }
+        return value;
+    }
+
+    /**
+     * Return {@code true} if there is a value present, otherwise {@code false}.
+     *
+     * @return {@code true} if there is a value present, otherwise {@code false}
+     */
+    public boolean isPresent() {
+        return isPresent;
+    }
+
+    /**
+     * Have the specified consumer accept the value if a value is present,
+     * otherwise do nothing.
+     *
+     * @param consumer block to be executed if a value is present
+     * @throws NullPointerException if value is present and {@code consumer} is
+     * null
+     */
+    public void ifPresent(IntConsumer consumer) {
+        if (isPresent)
+            consumer.accept(value);
+    }
+
+    /**
+     * Return the value if present, otherwise return {@code other}.
+     *
+     * @param other the value to be returned if there is no value present
+     * @return the value, if present, otherwise {@code other}
+     */
+    public int orElse(int other) {
+        return isPresent ? value : other;
+    }
+
+    /**
+     * Return the value if present, otherwise invoke {@code other} and return
+     * the result of that invocation.
+     *
+     * @param other a {@code IntSupplier} whose result is returned if no value
+     * is present
+     * @return the value if present otherwise the result of {@code other.getAsInt()}
+     * @throws NullPointerException if value is not present and {@code other} is
+     * null
+     */
+    public int orElseGet(IntSupplier other) {
+        return isPresent ? value : other.getAsInt();
+    }
+
+    /**
+     * Return the contained value, if present, otherwise throw an exception
+     * to be created by the provided supplier.
+     *
+     * @apiNote A method reference to the exception constructor with an empty
+     * argument list can be used as the supplier. For example,
+     * {@code IllegalStateException::new}
+     *
+     * @param <X> Type of the exception to be thrown
+     * @param exceptionSupplier The supplier which will return the exception to
+     * be thrown
+     * @return the present value
+     * @throws X if there is no value present
+     * @throws NullPointerException if no value is present and
+     * {@code exceptionSupplier} is null
+     */
+    public<X extends Throwable> int orElseThrow(Supplier<X> exceptionSupplier) throws X {
+        if (isPresent) {
+            return value;
+        } else {
+            throw exceptionSupplier.get();
+        }
+    }
+
+    /**
+     * Indicates whether some other object is "equal to" this Optional. The
+     * other object is considered equal if:
+     * <ul>
+     * <li>it is also an {@code OptionalInt} and;
+     * <li>both instances have no value present or;
+     * <li>the present values are "equal to" each other via {@code ==}.
+     * </ul>
+     *
+     * @param obj an object to be tested for equality
+     * @return {code true} if the other object is "equal to" this object
+     * otherwise {@code false}
+     */
+    @Override
+    public boolean equals(Object obj) {
+        if (this == obj) {
+            return true;
+        }
+
+        if (!(obj instanceof OptionalInt)) {
+            return false;
+        }
+
+        OptionalInt other = (OptionalInt) obj;
+        return (isPresent && other.isPresent)
+                ? value == other.value
+                : isPresent == other.isPresent;
+    }
+
+    /**
+     * Returns the hash code value of the present value, if any, or 0 (zero) if
+     * no value is present.
+     *
+     * @return hash code value of the present value or 0 if no value is present
+     */
+    @Override
+    public int hashCode() {
+        return isPresent ? Integer.hashCode(value) : 0;
+    }
+
+    /**
+     * Returns a non-empty string representation of this OptionalInt suitable for
+     * debugging. The exact presentation format is unspecified and may vary
+     * between implementations and versions.
+     *
+     * @implSpec If a value is present the result must include its string
+     * representation in the result. Empty and present OptionalInts must be
+     * unambiguously differentiable.
+     *
+     * @return the string representation of this instance
+     */
+    @Override
+    public String toString() {
+        return isPresent
+                ? String.format("OptionalInt[%s]", value)
+                : "OptionalInt.empty";
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/src/share/classes/java/util/OptionalLong.java	Tue Apr 02 15:31:24 2013 -0700
@@ -0,0 +1,245 @@
+/*
+ * Copyright (c) 2012, 2013, 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 java.util;
+
+import java.util.function.LongConsumer;
+import java.util.function.LongSupplier;
+import java.util.function.Supplier;
+
+/**
+ * A container object which may or may not contain a {@code long} value.
+ * If a value is present, {@code isPresent()} will return {@code true} and
+ * {@code get()} will return the value.
+ *
+ * <p>Additional methods that depend on the presence or absence of a contained
+ * value are provided, such as {@link #orElse(long) orElse()}
+ * (return a default value if value not present) and
+ * {@link #ifPresent(java.util.function.LongConsumer) ifPresent()} (execute a block
+ * of code if the value is present).
+ *
+ * @since 1.8
+ */
+public final class OptionalLong {
+    /**
+     * Common instance for {@code empty()}.
+     */
+    private static final OptionalLong EMPTY = new OptionalLong();
+
+    /**
+     * If true then the value is present, otherwise indicates no value is present
+     */
+    private final boolean isPresent;
+    private final long value;
+
+    /**
+     * Construct an empty instance.
+     *
+     * @implNote generally only one empty instance, {@link OptionalLong#EMPTY},
+     * should exist per VM.
+     */
+    private OptionalLong() {
+        this.isPresent = false;
+        this.value = 0;
+    }
+
+    /**
+     * Returns an empty {@code OptionalLong} instance.  No value is present for this
+     * OptionalLong.
+     *
+     * @apiNote Though it may be tempting to do so, avoid testing if an object
+     * is empty by comparing with {@code ==} against instances returned by
+     * {@code Option.empty()}. There is no guarantee that it is a singleton.
+     * Instead, use {@link #isPresent()}.
+     *
+     *  @return an empty {@code OptionalLong}.
+     */
+    public static OptionalLong empty() {
+        return EMPTY;
+    }
+
+    /**
+     * Construct an instance with the value present.
+     *
+     * @param value the long value to be present
+     */
+    private OptionalLong(long value) {
+        this.isPresent = true;
+        this.value = value;
+    }
+
+    /**
+     * Return an {@code OptionalLong} with the specified value present.
+     *
+     * @param value the value to be present
+     * @return an {@code OptionalLong} with the value present
+     */
+    public static OptionalLong of(long value) {
+        return new OptionalLong(value);
+    }
+
+    /**
+     * If a value is present in this {@code OptionalLong}, returns the value,
+     * otherwise throws {@code NoSuchElementException}.
+     *
+     * @return the value held by this {@code OptionalLong}
+     * @throws NoSuchElementException if there is no value present
+     *
+     * @see OptionalLong#isPresent()
+     */
+    public long getAsLong() {
+        if (!isPresent) {
+            throw new NoSuchElementException("No value present");
+        }
+        return value;
+    }
+
+    /**
+     * Return {@code true} if there is a value present, otherwise {@code false}.
+     *
+     * @return {@code true} if there is a value present, otherwise {@code false}
+     */
+    public boolean isPresent() {
+        return isPresent;
+    }
+
+    /**
+     * Have the specified consumer accept the value if a value is present,
+     * otherwise do nothing.
+     *
+     * @param consumer block to be executed if a value is present
+     * @throws NullPointerException if value is present and {@code consumer} is
+     * null
+     */
+    public void ifPresent(LongConsumer consumer) {
+        if (isPresent)
+            consumer.accept(value);
+    }
+
+    /**
+     * Return the value if present, otherwise return {@code other}.
+     *
+     * @param other the value to be returned if there is no value present
+     * @return the value, if present, otherwise {@code other}
+     */
+    public long orElse(long other) {
+        return isPresent ? value : other;
+    }
+
+    /**
+     * Return the value if present, otherwise invoke {@code other} and return
+     * the result of that invocation.
+     *
+     * @param other a {@code LongSupplier} whose result is returned if no value
+     * is present
+     * @return the value if present otherwise the result of {@code other.getAsLong()}
+     * @throws NullPointerException if value is not present and {@code other} is
+     * null
+     */
+    public long orElseGet(LongSupplier other) {
+        return isPresent ? value : other.getAsLong();
+    }
+
+    /**
+     * Return the contained value, if present, otherwise throw an exception
+     * to be created by the provided supplier.
+     *
+     * @apiNote A method reference to the exception constructor with an empty
+     * argument list can be used as the supplier. For example,
+     * {@code IllegalStateException::new}
+     *
+     * @param <X> Type of the exception to be thrown
+     * @param exceptionSupplier The supplier which will return the exception to
+     * be thrown
+     * @return the present value
+     * @throws X if there is no value present
+     * @throws NullPointerException if no value is present and
+     * {@code exceptionSupplier} is null
+     */
+    public<X extends Throwable> long orElseThrow(Supplier<X> exceptionSupplier) throws X {
+        if (isPresent) {
+            return value;
+        } else {
+            throw exceptionSupplier.get();
+        }
+    }
+
+    /**
+     * Indicates whether some other object is "equal to" this Optional. The
+     * other object is considered equal if:
+     * <ul>
+     * <li>it is also an {@code OptionalInt} and;
+     * <li>both instances have no value present or;
+     * <li>the present values are "equal to" each other via {@code ==}.
+     * </ul>
+     *
+     * @param obj an object to be tested for equality
+     * @return {code true} if the other object is "equal to" this object
+     * otherwise {@code false}
+     */
+    @Override
+    public boolean equals(Object obj) {
+        if (this == obj) {
+            return true;
+        }
+
+        if (!(obj instanceof OptionalLong)) {
+            return false;
+        }
+
+        OptionalLong other = (OptionalLong) obj;
+        return (isPresent && other.isPresent)
+                ? value == other.value
+                : isPresent == other.isPresent;
+    }
+
+    /**
+     * Returns the hash code value of the present value, if any, or 0 (zero) if
+     * no value is present.
+     *
+     * @return hash code value of the present value or 0 if no value is present
+     */
+    @Override
+    public int hashCode() {
+        return isPresent ? Long.hashCode(value) : 0;
+    }
+
+    /**
+     * Returns a non-empty string representation of this OptionalLong suitable for
+     * debugging. The exact presentation format is unspecified and may vary
+     * between implementations and versions.
+     *
+     * @implSpec If a value is present the result must include its string
+     * representation in the result. Empty and present OptionalLongs must be
+     * unambiguously differentiable.
+     *
+     * @return the string representation of this instance
+     */
+    @Override
+    public String toString() {
+        return isPresent
+                ? String.format("OptionalLong[%s]", value)
+                : "OptionalLong.empty";
+    }
+}
--- a/jdk/src/share/classes/java/util/logging/Logger.java	Tue Apr 02 14:13:13 2013 -0400
+++ b/jdk/src/share/classes/java/util/logging/Logger.java	Tue Apr 02 15:31:24 2013 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2000, 2012, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2000, 2013, 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,10 +26,15 @@
 
 package java.util.logging;
 
-import java.util.*;
+import java.lang.ref.WeakReference;
+import java.security.AccessController;
+import java.security.PrivilegedAction;
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.Locale;
+import java.util.MissingResourceException;
+import java.util.ResourceBundle;
 import java.util.concurrent.CopyOnWriteArrayList;
-import java.security.*;
-import java.lang.ref.WeakReference;
 import java.util.function.Supplier;
 
 /**
@@ -104,7 +109,7 @@
  * unnecessary message construction. For example, if the developer wants to
  * log system health status for diagnosis, with the String-accepting version,
  * the code would look like:
- <code><pre>
+ <pre><code>
 
    class DiagnosisMessages {
      static String systemHealthStatus() {
@@ -114,26 +119,20 @@
    }
    ...
    logger.log(Level.FINER, DiagnosisMessages.systemHealthStatus());
- </pre></code>
+</code></pre>
  * With the above code, the health status is collected unnecessarily even when
  * the log level FINER is disabled. With the Supplier-accepting version as
  * below, the status will only be collected when the log level FINER is
  * enabled.
- <code><pre>
+ <pre><code>
 
    logger.log(Level.FINER, DiagnosisMessages::systemHealthStatus);
- </pre></code>
+</code></pre>
  * <p>
  * When mapping ResourceBundle names to ResourceBundles, the Logger
  * will first try to use the Thread's ContextClassLoader.  If that
- * is null it will try the SystemClassLoader instead.  As a temporary
- * transition feature in the initial implementation, if the Logger is
- * unable to locate a ResourceBundle from the ContextClassLoader or
- * SystemClassLoader the Logger will also search up the class stack
- * and use successive calling ClassLoaders to try to locate a ResourceBundle.
- * (This call stack search is to allow containers to transition to
- * using ContextClassLoaders and is likely to be removed in future
- * versions.)
+ * is null it will try the
+ * {@linkplain java.lang.ClassLoader#getSystemClassLoader() system ClassLoader} instead.
  * <p>
  * Formatting (including localization) is the responsibility of
  * the output Handler, which will typically call a Formatter.
@@ -1584,12 +1583,6 @@
         return useParentHandlers;
     }
 
-    // Private utility method to map a resource bundle name to an
-    // actual resource bundle, using a simple one-entry cache.
-    // Returns null for a null name.
-    // May also return null if we can't find the resource bundle and
-    // there is no suitable previous cached value.
-
     static final String SYSTEM_LOGGER_RB_NAME = "sun.util.logging.resources.logging";
 
     private static ResourceBundle findSystemResourceBundle(final Locale locale) {
@@ -1607,6 +1600,16 @@
         });
     }
 
+    /**
+     * Private utility method to map a resource bundle name to an
+     * actual resource bundle, using a simple one-entry cache.
+     * Returns null for a null name.
+     * May also return null if we can't find the resource bundle and
+     * there is no suitable previous cached value.
+     *
+     * @param name the ResourceBundle to locate
+     * @return ResourceBundle specified by name or null if not found
+     */
     private synchronized ResourceBundle findResourceBundle(String name) {
         // Return a null bundle for a null name.
         if (name == null) {
@@ -1616,8 +1619,8 @@
         Locale currentLocale = Locale.getDefault();
 
         // Normally we should hit on our simple one entry cache.
-        if (catalog != null && currentLocale == catalogLocale
-                                        && name == catalogName) {
+        if (catalog != null && currentLocale.equals(catalogLocale)
+                && name.equals(catalogName)) {
             return catalog;
         }
 
@@ -1628,8 +1631,8 @@
             return catalog;
         }
 
-        // Use the thread's context ClassLoader.  If there isn't one,
-        // use the SystemClassloader.
+        // Use the thread's context ClassLoader.  If there isn't one, use the
+        // {@linkplain java.lang.ClassLoader#getSystemClassLoader() system ClassLoader}.
         ClassLoader cl = Thread.currentThread().getContextClassLoader();
         if (cl == null) {
             cl = ClassLoader.getSystemClassLoader();
@@ -1640,44 +1643,8 @@
             catalogLocale = currentLocale;
             return catalog;
         } catch (MissingResourceException ex) {
-            // Woops.  We can't find the ResourceBundle in the default
-            // ClassLoader.  Drop through.
+            return null;
         }
-
-        // Fall back to searching up the call stack and trying each
-        // calling ClassLoader.
-        for (int ix = 0; ; ix++) {
-            Class clz = sun.reflect.Reflection.getCallerClass(ix);
-            if (clz == null) {
-                break;
-            }
-            ClassLoader cl2 = clz.getClassLoader();
-            if (cl2 == null) {
-                cl2 = ClassLoader.getSystemClassLoader();
-            }
-            if (cl == cl2) {
-                // We've already checked this classloader.
-                continue;
-            }
-            cl = cl2;
-            try {
-                catalog = ResourceBundle.getBundle(name, currentLocale, cl);
-                catalogName = name;
-                catalogLocale = currentLocale;
-                return catalog;
-            } catch (MissingResourceException ex) {
-                // Ok, this one didn't work either.
-                // Drop through, and try the next one.
-            }
-        }
-
-        if (name.equals(catalogName)) {
-            // Return the previous cached value for that name.
-            // This may be null.
-            return catalog;
-        }
-        // Sorry, we're out of luck.
-        return null;
     }
 
     // Private utility method to initialize our one entry
@@ -1704,8 +1671,7 @@
                 resourceBundleName + " != " + name);
         }
 
-        ResourceBundle rb = findResourceBundle(name);
-        if (rb == null) {
+        if (findResourceBundle(name) == null) {
             // We've failed to find an expected ResourceBundle.
             throw new MissingResourceException("Can't find " + name + " bundle", name, "");
         }
--- a/jdk/src/share/classes/javax/swing/plaf/synth/SynthScrollBarUI.java	Tue Apr 02 14:13:13 2013 -0400
+++ b/jdk/src/share/classes/javax/swing/plaf/synth/SynthScrollBarUI.java	Tue Apr 02 15:31:24 2013 -0700
@@ -57,6 +57,7 @@
      */
     @Override
     protected void installDefaults() {
+        super.installDefaults();
         trackHighlight = NO_HIGHLIGHT;
         if (scrollbar.getLayout() == null ||
                      (scrollbar.getLayout() instanceof UIResource)) {
--- a/jdk/src/share/classes/sun/net/www/http/HttpClient.java	Tue Apr 02 14:13:13 2013 -0400
+++ b/jdk/src/share/classes/sun/net/www/http/HttpClient.java	Tue Apr 02 15:31:24 2013 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1994, 2012, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1994, 2013, 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
@@ -46,7 +46,7 @@
     // whether this httpclient comes from the cache
     protected boolean cachedHttpClient = false;
 
-    private boolean inCache;
+    protected boolean inCache;
 
     // Http requests we send
     MessageHeader requests;
@@ -121,7 +121,14 @@
     public boolean reuse = false;
 
     // Traffic capture tool, if configured. See HttpCapture class for info
-     private HttpCapture capture = null;
+    private HttpCapture capture = null;
+
+    private static final PlatformLogger logger = HttpURLConnection.getHttpLogger();
+    private static void logFinest(String msg) {
+        if (logger.isLoggable(PlatformLogger.FINEST)) {
+            logger.finest(msg);
+        }
+    }
 
     /**
      * A NOP method kept for backwards binary compatibility
@@ -266,8 +273,11 @@
             if (ret != null && httpuc != null &&
                 httpuc.streaming() &&
                 httpuc.getRequestMethod() == "POST") {
-                if (!ret.available())
+                if (!ret.available()) {
+                    ret.inCache = false;
+                    ret.closeServer();
                     ret = null;
+                }
             }
 
             if (ret != null) {
@@ -279,10 +289,7 @@
                         ret.inCache = false;
                         if (httpuc != null && ret.needsTunneling())
                             httpuc.setTunnelState(TUNNELING);
-                        PlatformLogger logger = HttpURLConnection.getHttpLogger();
-                        if (logger.isLoggable(PlatformLogger.FINEST)) {
-                            logger.finest("KeepAlive stream retrieved from the cache, " + ret);
-                        }
+                        logFinest("KeepAlive stream retrieved from the cache, " + ret);
                     }
                 } else {
                     // We cannot return this connection to the cache as it's
@@ -360,30 +367,33 @@
         }
     }
 
-    protected synchronized boolean available() throws IOException {
+    protected synchronized boolean available() {
         boolean available = true;
-        int old = serverSocket.getSoTimeout();
-        serverSocket.setSoTimeout(1);
-        BufferedInputStream tmpbuf =
-            new BufferedInputStream(serverSocket.getInputStream());
+        int old = -1;
 
-        PlatformLogger logger = HttpURLConnection.getHttpLogger();
         try {
-            int r = tmpbuf.read();
-            if (r == -1) {
-                if (logger.isLoggable(PlatformLogger.FINEST)) {
-                    logger.finest("HttpClient.available(): " +
-                        "read returned -1: not available");
+            try {
+                old = serverSocket.getSoTimeout();
+                serverSocket.setSoTimeout(1);
+                BufferedInputStream tmpbuf =
+                        new BufferedInputStream(serverSocket.getInputStream());
+                int r = tmpbuf.read();
+                if (r == -1) {
+                    logFinest("HttpClient.available(): " +
+                            "read returned -1: not available");
+                    available = false;
                 }
-                available = false;
+            } catch (SocketTimeoutException e) {
+                logFinest("HttpClient.available(): " +
+                        "SocketTimeout: its available");
+            } finally {
+                if (old != -1)
+                    serverSocket.setSoTimeout(old);
             }
-        } catch (SocketTimeoutException e) {
-            if (logger.isLoggable(PlatformLogger.FINEST)) {
-                logger.finest("HttpClient.available(): " +
-                    "SocketTimeout: its available");
-            }
-        } finally {
-            serverSocket.setSoTimeout(old);
+        } catch (IOException e) {
+            logFinest("HttpClient.available(): " +
+                        "SocketException: not available");
+            available = false;
         }
         return available;
     }
@@ -865,10 +875,7 @@
 
             if (isKeepingAlive())   {
                 // Wrap KeepAliveStream if keep alive is enabled.
-                PlatformLogger logger = HttpURLConnection.getHttpLogger();
-                if (logger.isLoggable(PlatformLogger.FINEST)) {
-                    logger.finest("KeepAlive stream used: " + url);
-                }
+                logFinest("KeepAlive stream used: " + url);
                 serverInput = new KeepAliveStream(serverInput, pi, cl, this);
                 failedOnce = false;
             }
--- a/jdk/src/share/classes/sun/net/www/protocol/https/AbstractDelegateHttpsURLConnection.java	Tue Apr 02 14:13:13 2013 -0400
+++ b/jdk/src/share/classes/sun/net/www/protocol/https/AbstractDelegateHttpsURLConnection.java	Tue Apr 02 15:31:24 2013 -0700
@@ -96,7 +96,7 @@
         http = HttpsClient.New (getSSLSocketFactory(),
                                 url,
                                 getHostnameVerifier(),
-                                useCache);
+                                useCache, this);
         ((HttpsClient)http).afterConnect();
     }
 
@@ -149,7 +149,7 @@
         http = HttpsClient.New (getSSLSocketFactory(),
                                 url,
                                 getHostnameVerifier(),
-                                proxyHost, proxyPort, useCache);
+                                proxyHost, proxyPort, useCache, this);
         connected = true;
     }
 
@@ -189,7 +189,8 @@
     protected HttpClient getNewHttpClient(URL url, Proxy p, int connectTimeout)
         throws IOException {
         return HttpsClient.New(getSSLSocketFactory(), url,
-                               getHostnameVerifier(), p, true, connectTimeout);
+                               getHostnameVerifier(), p, true, connectTimeout,
+                               this);
     }
 
     // will open new connection
@@ -198,7 +199,7 @@
         throws IOException {
         return HttpsClient.New(getSSLSocketFactory(), url,
                                getHostnameVerifier(), p,
-                               useCache, connectTimeout);
+                               useCache, connectTimeout, this);
     }
 
     /**
--- a/jdk/src/share/classes/sun/net/www/protocol/https/HttpsClient.java	Tue Apr 02 14:13:13 2013 -0400
+++ b/jdk/src/share/classes/sun/net/www/protocol/https/HttpsClient.java	Tue Apr 02 15:31:24 2013 -0700
@@ -30,6 +30,7 @@
 import java.io.UnsupportedEncodingException;
 import java.io.PrintStream;
 import java.io.BufferedOutputStream;
+import java.net.InetAddress;
 import java.net.Socket;
 import java.net.SocketException;
 import java.net.URL;
@@ -46,11 +47,15 @@
 
 import javax.net.ssl.*;
 import sun.net.www.http.HttpClient;
+import sun.net.www.protocol.http.HttpURLConnection;
 import sun.security.action.*;
 
 import sun.security.util.HostnameChecker;
 import sun.security.ssl.SSLSocketImpl;
 
+import sun.util.logging.PlatformLogger;
+import static sun.net.www.protocol.http.HttpURLConnection.TunnelState.*;
+
 
 /**
  * This class provides HTTPS client URL support, building on the standard
@@ -274,15 +279,17 @@
     // This code largely ripped off from HttpClient.New, and
     // it uses the same keepalive cache.
 
-    static HttpClient New(SSLSocketFactory sf, URL url, HostnameVerifier hv)
+    static HttpClient New(SSLSocketFactory sf, URL url, HostnameVerifier hv,
+                          HttpURLConnection httpuc)
             throws IOException {
-        return HttpsClient.New(sf, url, hv, true);
+        return HttpsClient.New(sf, url, hv, true, httpuc);
     }
 
     /** See HttpClient for the model for this method. */
     static HttpClient New(SSLSocketFactory sf, URL url,
-            HostnameVerifier hv, boolean useCache) throws IOException {
-        return HttpsClient.New(sf, url, hv, (String)null, -1, useCache);
+            HostnameVerifier hv, boolean useCache,
+            HttpURLConnection httpuc) throws IOException {
+        return HttpsClient.New(sf, url, hv, (String)null, -1, useCache, httpuc);
     }
 
     /**
@@ -290,37 +297,74 @@
      * the specified proxy server.
      */
     static HttpClient New(SSLSocketFactory sf, URL url, HostnameVerifier hv,
-                           String proxyHost, int proxyPort) throws IOException {
-        return HttpsClient.New(sf, url, hv, proxyHost, proxyPort, true);
+                           String proxyHost, int proxyPort,
+                           HttpURLConnection httpuc) throws IOException {
+        return HttpsClient.New(sf, url, hv, proxyHost, proxyPort, true, httpuc);
     }
 
     static HttpClient New(SSLSocketFactory sf, URL url, HostnameVerifier hv,
-                           String proxyHost, int proxyPort, boolean useCache)
+                           String proxyHost, int proxyPort, boolean useCache,
+                           HttpURLConnection httpuc)
         throws IOException {
-        return HttpsClient.New(sf, url, hv, proxyHost, proxyPort, useCache, -1);
+        return HttpsClient.New(sf, url, hv, proxyHost, proxyPort, useCache, -1,
+                               httpuc);
     }
 
     static HttpClient New(SSLSocketFactory sf, URL url, HostnameVerifier hv,
                           String proxyHost, int proxyPort, boolean useCache,
-                          int connectTimeout)
+                          int connectTimeout, HttpURLConnection httpuc)
         throws IOException {
 
         return HttpsClient.New(sf, url, hv,
                                (proxyHost == null? null :
                                 HttpsClient.newHttpProxy(proxyHost, proxyPort)),
-                               useCache, connectTimeout);
+                               useCache, connectTimeout, httpuc);
     }
 
     static HttpClient New(SSLSocketFactory sf, URL url, HostnameVerifier hv,
                           Proxy p, boolean useCache,
-                          int connectTimeout)
-        throws IOException {
+                          int connectTimeout, HttpURLConnection httpuc)
+        throws IOException
+    {
+        if (p == null) {
+            p = Proxy.NO_PROXY;
+        }
         HttpsClient ret = null;
         if (useCache) {
             /* see if one's already around */
             ret = (HttpsClient) kac.get(url, sf);
+            if (ret != null && httpuc != null &&
+                httpuc.streaming() &&
+                httpuc.getRequestMethod() == "POST") {
+                if (!ret.available())
+                    ret = null;
+            }
+
             if (ret != null) {
-                ret.cachedHttpClient = true;
+                if ((ret.proxy != null && ret.proxy.equals(p)) ||
+                    (ret.proxy == null && p == null)) {
+                    synchronized (ret) {
+                        ret.cachedHttpClient = true;
+                        assert ret.inCache;
+                        ret.inCache = false;
+                        if (httpuc != null && ret.needsTunneling())
+                            httpuc.setTunnelState(TUNNELING);
+                        PlatformLogger logger = HttpURLConnection.getHttpLogger();
+                        if (logger.isLoggable(PlatformLogger.FINEST)) {
+                            logger.finest("KeepAlive stream retrieved from the cache, " + ret);
+                        }
+                    }
+                } else {
+                    // We cannot return this connection to the cache as it's
+                    // KeepAliveTimeout will get reset. We simply close the connection.
+                    // This should be fine as it is very rare that a connection
+                    // to the same host will not use the same proxy.
+                    synchronized(ret) {
+                        ret.inCache = false;
+                        ret.closeServer();
+                    }
+                    ret = null;
+                }
             }
         }
         if (ret == null) {
@@ -328,7 +372,11 @@
         } else {
             SecurityManager security = System.getSecurityManager();
             if (security != null) {
-                security.checkConnect(url.getHost(), url.getPort());
+                if (ret.proxy == Proxy.NO_PROXY || ret.proxy == null) {
+                    security.checkConnect(InetAddress.getByName(url.getHost()).getHostAddress(), url.getPort());
+                } else {
+                    security.checkConnect(url.getHost(), url.getPort());
+                }
             }
             ret.url = url;
         }
@@ -607,6 +655,11 @@
 
     @Override
     protected void putInKeepAliveCache() {
+        if (inCache) {
+            assert false : "Duplicate put to keep alive cache";
+            return;
+        }
+        inCache = true;
         kac.put(url, sslSocketFactory, this);
     }
 
--- a/jdk/src/share/classes/sun/net/www/protocol/jar/JarURLConnection.java	Tue Apr 02 14:13:13 2013 -0400
+++ b/jdk/src/share/classes/sun/net/www/protocol/jar/JarURLConnection.java	Tue Apr 02 15:31:24 2013 -0700
@@ -51,7 +51,7 @@
 
     /* the Jar file factory. It handles both retrieval and caching.
      */
-    private static JarFileFactory factory = new JarFileFactory();
+    private static final JarFileFactory factory = JarFileFactory.getInstance();
 
     /* the url for the Jar file */
     private URL jarFileURL;
--- a/jdk/src/share/classes/sun/security/krb5/KdcComm.java	Tue Apr 02 14:13:13 2013 -0400
+++ b/jdk/src/share/classes/sun/security/krb5/KdcComm.java	Tue Apr 02 15:31:24 2013 -0700
@@ -138,7 +138,7 @@
 
         int timeout = -1;
         int max_retries = -1;
-        int udf_pref_limit = -1;
+        int udp_pref_limit = -1;
 
         try {
             Config cfg = Config.getInstance();
@@ -147,7 +147,7 @@
             temp = cfg.get("libdefaults", "max_retries");
             max_retries = parsePositiveIntString(temp);
             temp = cfg.get("libdefaults", "udp_preference_limit");
-            udf_pref_limit = parsePositiveIntString(temp);
+            udp_pref_limit = parsePositiveIntString(temp);
         } catch (Exception exc) {
            // ignore any exceptions; use default values
            if (DEBUG) {
@@ -159,7 +159,14 @@
         defaultKdcTimeout = timeout > 0 ? timeout : 30*1000; // 30 seconds
         defaultKdcRetryLimit =
                 max_retries > 0 ? max_retries : Krb5.KDC_RETRY_LIMIT;
-        defaultUdpPrefLimit = udf_pref_limit;
+
+        if (udp_pref_limit < 0) {
+            defaultUdpPrefLimit = Krb5.KDC_DEFAULT_UDP_PREF_LIMIT;
+        } else if (udp_pref_limit > Krb5.KDC_HARD_UDP_LIMIT) {
+            defaultUdpPrefLimit = Krb5.KDC_HARD_UDP_LIMIT;
+        } else {
+            defaultUdpPrefLimit = udp_pref_limit;
+        }
 
         KdcAccessibility.reset();
     }
--- a/jdk/src/share/classes/sun/security/krb5/internal/Krb5.java	Tue Apr 02 14:13:13 2013 -0400
+++ b/jdk/src/share/classes/sun/security/krb5/internal/Krb5.java	Tue Apr 02 15:31:24 2013 -0700
@@ -130,6 +130,8 @@
     // number of retries before giving up
 
     public static final int KDC_RETRY_LIMIT = 3;
+    public static final int KDC_DEFAULT_UDP_PREF_LIMIT = 1465;
+    public static final int KDC_HARD_UDP_LIMIT = 32700;
 
     //OSI authentication mechanism OID
 
--- a/jdk/src/share/classes/sun/security/provider/certpath/CertId.java	Tue Apr 02 14:13:13 2013 -0400
+++ b/jdk/src/share/classes/sun/security/provider/certpath/CertId.java	Tue Apr 02 15:31:24 2013 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2003, 2010, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2003, 2013, 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
@@ -29,8 +29,10 @@
 import java.math.BigInteger;
 import java.security.MessageDigest;
 import java.security.NoSuchAlgorithmException;
+import java.security.PublicKey;
 import java.security.cert.X509Certificate;
 import java.util.Arrays;
+import javax.security.auth.x500.X500Principal;
 import sun.misc.HexDumpEncoder;
 import sun.security.x509.*;
 import sun.security.util.*;
@@ -70,6 +72,13 @@
     public CertId(X509Certificate issuerCert, SerialNumber serialNumber)
         throws IOException {
 
+        this(issuerCert.getSubjectX500Principal(),
+             issuerCert.getPublicKey(), serialNumber);
+    }
+
+    public CertId(X500Principal issuerName, PublicKey issuerKey,
+                  SerialNumber serialNumber) throws IOException {
+
         // compute issuerNameHash
         MessageDigest md = null;
         try {
@@ -78,11 +87,11 @@
             throw new IOException("Unable to create CertId", nsae);
         }
         hashAlgId = SHA1_ALGID;
-        md.update(issuerCert.getSubjectX500Principal().getEncoded());
+        md.update(issuerName.getEncoded());
         issuerNameHash = md.digest();
 
         // compute issuerKeyHash (remove the tag and length)
-        byte[] pubKey = issuerCert.getPublicKey().getEncoded();
+        byte[] pubKey = issuerKey.getEncoded();
         DerValue val = new DerValue(pubKey);
         DerValue[] seq = new DerValue[2];
         seq[0] = val.data.getDerValue(); // AlgorithmID
@@ -94,7 +103,7 @@
 
         if (debug) {
             HexDumpEncoder encoder = new HexDumpEncoder();
-            System.out.println("Issuer Certificate is " + issuerCert);
+            System.out.println("Issuer Name is " + issuerName);
             System.out.println("issuerNameHash is " +
                 encoder.encodeBuffer(issuerNameHash));
             System.out.println("issuerKeyHash is " +
--- a/jdk/src/share/classes/sun/security/provider/certpath/DistributionPointFetcher.java	Tue Apr 02 14:13:13 2013 -0400
+++ b/jdk/src/share/classes/sun/security/provider/certpath/DistributionPointFetcher.java	Tue Apr 02 15:31:24 2013 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2002, 2012, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2002, 2013, 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
@@ -345,10 +345,8 @@
             return false;
         } else {
             // in case of self-issued indirect CRL issuer.
-            byte[] certAKID = certImpl.getExtensionValue(
-                                AuthorityKey_Id.toString());
-            byte[] crlAKID = crlImpl.getExtensionValue(
-                                AuthorityKey_Id.toString());
+            KeyIdentifier certAKID = certImpl.getAuthKeyId();
+            KeyIdentifier crlAKID = crlImpl.getAuthKeyId();
 
             if (certAKID == null || crlAKID == null) {
                 // cannot recognize indirect CRL without AKID
@@ -359,7 +357,7 @@
                     // reset the public key used to verify the CRL's signature
                     prevKey = certImpl.getPublicKey();
                 }
-            } else if (!Arrays.equals(certAKID, crlAKID)) {
+            } else if (!certAKID.equals(crlAKID)) {
                 // we accept the case that a CRL issuer provide status
                 // information for itself.
                 if (issues(certImpl, crlImpl, provider)) {
--- a/jdk/src/share/classes/sun/security/provider/certpath/RevocationChecker.java	Tue Apr 02 14:13:13 2013 -0400
+++ b/jdk/src/share/classes/sun/security/provider/certpath/RevocationChecker.java	Tue Apr 02 15:31:24 2013 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2012, 2013, 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
@@ -643,7 +643,14 @@
         OCSPResponse response = null;
         CertId certId = null;
         try {
-            certId = new CertId(issuerCert, currCert.getSerialNumberObject());
+            if (issuerCert != null) {
+                certId = new CertId(issuerCert,
+                                    currCert.getSerialNumberObject());
+            } else {
+                // must be an anchor name and key
+                certId = new CertId(anchor.getCA(), anchor.getCAPublicKey(),
+                                    currCert.getSerialNumberObject());
+            }
 
             // check if there is a cached OCSP response available
             byte[] responseBytes = ocspResponses.get(cert);
--- a/jdk/src/share/classes/sun/security/x509/X509CertImpl.java	Tue Apr 02 14:13:13 2013 -0400
+++ b/jdk/src/share/classes/sun/security/x509/X509CertImpl.java	Tue Apr 02 15:31:24 2013 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1996, 2012, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1996, 2013, 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
@@ -1095,6 +1095,18 @@
         }
     }
 
+    public KeyIdentifier getAuthKeyId() {
+        AuthorityKeyIdentifierExtension aki
+            = getAuthorityKeyIdentifierExtension();
+        if (aki != null) {
+            try {
+                return (KeyIdentifier)aki.get(
+                    AuthorityKeyIdentifierExtension.KEY_ID);
+            } catch (IOException ioe) {} // not possible
+        }
+        return null;
+    }
+
     /**
      * Get AuthorityKeyIdentifier extension
      * @return AuthorityKeyIdentifier object or null (if no such object
--- a/jdk/src/share/classes/sun/tools/jmap/JMap.java	Tue Apr 02 14:13:13 2013 -0400
+++ b/jdk/src/share/classes/sun/tools/jmap/JMap.java	Tue Apr 02 15:31:24 2013 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2005, 2011, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2005, 2013, 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
@@ -50,7 +50,7 @@
 
     // These options imply the use of a SA tool
     private static String SA_TOOL_OPTIONS =
-      "-heap|-heap:format=b|-permstat|-finalizerinfo";
+      "-heap|-heap:format=b|-clstats|-finalizerinfo";
 
     // The -F (force) option is currently not passed through to SA
     private static String FORCE_SA_OPTION = "-F";
@@ -147,12 +147,12 @@
     // Invoke SA tool  with the given arguments
     private static void runTool(String option, String args[]) throws Exception {
         String[][] tools = {
-            { "-pmap",           "sun.jvm.hotspot.tools.PMap"     },
-            { "-heap",           "sun.jvm.hotspot.tools.HeapSummary"     },
-            { "-heap:format=b",  "sun.jvm.hotspot.tools.HeapDumper"      },
-            { "-histo",          "sun.jvm.hotspot.tools.ObjectHistogram" },
-            { "-permstat",       "sun.jvm.hotspot.tools.PermStat"        },
-            { "-finalizerinfo",  "sun.jvm.hotspot.tools.FinalizerInfo"   },
+            { "-pmap",          "sun.jvm.hotspot.tools.PMap"             },
+            { "-heap",          "sun.jvm.hotspot.tools.HeapSummary"      },
+            { "-heap:format=b", "sun.jvm.hotspot.tools.HeapDumper"       },
+            { "-histo",         "sun.jvm.hotspot.tools.ObjectHistogram"  },
+            { "-clstats",       "sun.jvm.hotspot.tools.ClassLoaderStats" },
+            { "-finalizerinfo", "sun.jvm.hotspot.tools.FinalizerInfo"    },
         };
 
         String tool = null;
@@ -356,7 +356,7 @@
             System.out.println("    -heap                to print java heap summary");
             System.out.println("    -histo[:live]        to print histogram of java object heap; if the \"live\"");
             System.out.println("                         suboption is specified, only count live objects");
-            System.out.println("    -permstat            to print permanent generation statistics");
+            System.out.println("    -clstats             to print class loader statistics");
             System.out.println("    -finalizerinfo       to print information on objects awaiting finalization");
             System.out.println("    -dump:<dump-options> to dump java heap in hprof binary format");
             System.out.println("                         dump-options:");
--- a/jdk/src/share/classes/sun/tools/jstat/resources/jstat_options	Tue Apr 02 14:13:13 2013 -0400
+++ b/jdk/src/share/classes/sun/tools/jstat/resources/jstat_options	Tue Apr 02 15:31:24 2013 -0700
@@ -192,16 +192,16 @@
     format "0.0"
   }
   column {
-    header "^PC^"	/* Perm Space Capacity - Current */
-    data sun.gc.generation.2.space.0.capacity
+    header "^MC^"	/* Metaspace Capacity - Current */
+    data sun.gc.metaspace.capacity
     align center
     width 6
     scale K
     format "0.0"
   }
   column {
-    header "^PU^"	/* Perm Space Used */
-    data sun.gc.generation.2.space.0.used
+    header "^MU^"	/* Metaspae Used */
+    data sun.gc.metaspace.used
     align center
     width 6
     scale K
@@ -330,32 +330,24 @@
     format "0.0"
   }
   column {
-    header "^PGCMN^"	/* Perm Generation Capacity - Minimum */
-    data sun.gc.generation.2.minCapacity
+    header "^MCMN^"	/* Metaspace Capacity - Minimum */
+    data sun.gc.metaspace.minCapacity
     scale K
     align right
     width 8
     format "0.0"
   }
   column {
-    header "^PGCMX^"	/* Perm Generation Capacity - Maximum */
-    data sun.gc.generation.2.maxCapacity
+    header "^MCMX^"	/* Metaspace Capacity - Maximum */
+    data sun.gc.metaspace.maxCapacity
     scale K
     align right
     width 8
     format "0.0"
   }
   column {
-    header "^PGC^"	/* Perm Generation Capacity - Current */
-    data sun.gc.generation.2.capacity
-    scale K
-    align right
-    width 8
-    format "0.0"
-  }
-  column {
-    header "^PC^"	/* Perm Space Capacity - Current */
-    data sun.gc.generation.2.space.0.capacity
+    header "^MC^"	/* Metaspace Capacity - Current */
+    data sun.gc.metaspace.capacity
     scale K
     align right
     width 8
@@ -412,8 +404,8 @@
     format "0.00"
   }
   column {
-    header "^P^"	/* Perm Space - Percent Used */
-    data (1-((sun.gc.generation.2.space.0.capacity - sun.gc.generation.2.space.0.used)/sun.gc.generation.2.space.0.capacity)) * 100
+    header "^M^"	/* Metaspace - Percent Used */
+    data (1-((sun.gc.metaspace.capacity - sun.gc.metaspace.used)/sun.gc.metaspace.capacity)) * 100
     align right
     width 6
     scale raw
@@ -654,16 +646,16 @@
 
 option gcold {
   column {
-    header "^PC^"	/* Perm Space Capacity - Current */
-    data sun.gc.generation.2.space.0.capacity
+    header "^MC^"	/* Metaspace Capacity - Current */
+    data sun.gc.metaspace.capacity
     width 8
     align right
     scale K
     format "0.0"
   }
   column {
-    header "^PU^"	/* Perm Space Used */
-    data sun.gc.generation.2.space.0.used
+    header "^MU^"	/* Metaspace Space Used */
+    data sun.gc.metaspace.used
     width 8
     align right
     scale K
@@ -784,34 +776,26 @@
   }
 }
 
-option gcpermcapacity {
+option gcmetacapacity {
   column {
-    header "^PGCMN^"	/* Perm Generation Capacity - Minumum */
-    data sun.gc.generation.2.minCapacity
+    header "^MCMN^"	/* Metaspace Capacity - Minimum */
+    data sun.gc.metaspace.minCapacity
     scale K
     align right
     width 10
     format "0.0"
   }
   column {
-    header "^PGCMX^"	/* Perm Generation Capacity - Maximum */
-    data sun.gc.generation.2.maxCapacity
+    header "^MCMX^"	/* Metaspace Capacity - Maximum */
+    data sun.gc.metaspace.maxCapacity
     scale K
     align right
     width 10
     format "0.0"
   }
   column {
-    header "^PGC^"	/* Perm Generation Capacity - Current */
-    data sun.gc.generation.2.capacity
-    scale K
-    align right
-    width 10
-    format "0.0"
-  }
-  column {
-    header "^PC^"	/* Perm Space Capacity - Current */
-    data sun.gc.generation.2.space.0.capacity
+    header "^MC^"	/* Metaspace Capacity - Current */
+    data sun.gc.metaspace.capacity
     scale K
     align right
     width 10
@@ -884,8 +868,8 @@
     format "0.00"
   }
   column {
-    header "^P^"	/* Perm Space - Percent Used */
-    data (1-((sun.gc.generation.2.space.0.capacity - sun.gc.generation.2.space.0.used)/sun.gc.generation.2.space.0.capacity)) * 100
+    header "^M^"	/* Metaspace Space - Percent Used */
+    data (1-((sun.gc.metaspace.capacity - sun.gc.metaspace.used)/sun.gc.metaspace.capacity)) * 100
     align right
     width 6
     scale raw
--- a/jdk/src/share/classes/sun/util/locale/LanguageTag.java	Tue Apr 02 14:13:13 2013 -0400
+++ b/jdk/src/share/classes/sun/util/locale/LanguageTag.java	Tue Apr 02 15:31:24 2013 -0700
@@ -134,7 +134,7 @@
     }
 
     /*
-     * BNF in RFC5464
+     * BNF in RFC5646
      *
      * Language-Tag  = langtag             ; normal language tags
      *               / privateuse          ; private use tag
--- a/jdk/src/share/classes/sun/util/locale/provider/AuxLocaleProviderAdapter.java	Tue Apr 02 14:13:13 2013 -0400
+++ b/jdk/src/share/classes/sun/util/locale/provider/AuxLocaleProviderAdapter.java	Tue Apr 02 15:31:24 2013 -0700
@@ -43,6 +43,7 @@
 import java.util.spi.LocaleNameProvider;
 import java.util.spi.LocaleServiceProvider;
 import java.util.spi.TimeZoneNameProvider;
+import sun.util.spi.CalendarProvider;
 
 /**
  * An abstract parent class for the
@@ -140,6 +141,14 @@
         return getLocaleServiceProvider(CalendarNameProvider.class);
     }
 
+    /**
+     * Getter methods for sun.util.spi.* providers
+     */
+    @Override
+    public CalendarProvider getCalendarProvider() {
+        return getLocaleServiceProvider(CalendarProvider.class);
+    }
+
     @Override
     public LocaleResources getLocaleResources(Locale locale) {
         return null;
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/src/share/classes/sun/util/locale/provider/CalendarProviderImpl.java	Tue Apr 02 15:31:24 2013 -0700
@@ -0,0 +1,95 @@
+/*
+ * Copyright (c) 2013, 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 sun.util.locale.provider;
+
+import java.util.Calendar;
+import java.util.Calendar.Builder;
+import java.util.Locale;
+import java.util.Set;
+import java.util.TimeZone;
+import sun.util.spi.CalendarProvider;
+
+/**
+ * Concrete implementation of the  {@link sun.util.spi.CalendarProvider
+ * CalendarProvider} class for the JRE LocaleProviderAdapter.
+ *
+ * @author Naoto Sato
+ */
+public class CalendarProviderImpl extends CalendarProvider implements AvailableLanguageTags {
+    private final LocaleProviderAdapter.Type type;
+    private final Set<String> langtags;
+
+    public CalendarProviderImpl(LocaleProviderAdapter.Type type, Set<String> langtags) {
+        this.type = type;
+        this.langtags = langtags;
+    }
+
+    /**
+     * Returns an array of all locales for which this locale service provider
+     * can provide localized objects or names.
+     *
+     * @return An array of all locales for which this locale service provider
+     * can provide localized objects or names.
+     */
+    @Override
+    public Locale[] getAvailableLocales() {
+        return LocaleProviderAdapter.toLocaleArray(langtags);
+    }
+
+    @Override
+    public boolean isSupportedLocale(Locale locale) {
+        // Support any locales.
+        return true;
+    }
+
+    /**
+     * Returns a new <code>Calendar</code> instance for the
+     * specified locale.
+     *
+     * @param zone the time zone
+     * @param locale the desired locale
+     * @exception NullPointerException if <code>locale</code> is null
+     * @exception IllegalArgumentException if <code>locale</code> isn't
+     *     one of the locales returned from
+     *     {@link java.util.spi.LocaleServiceProvider#getAvailableLocales()
+     *     getAvailableLocales()}.
+     * @return a <code>Calendar</code> instance.
+     * @see java.util.Calendar#getInstance(java.util.Locale)
+     */
+    @Override
+    public Calendar getInstance(TimeZone zone, Locale locale) {
+        return new Calendar.Builder()
+                     .setLocale(locale)
+                     .setTimeZone(zone)
+                     .setInstant(System.currentTimeMillis())
+                     .build();
+    }
+
+    @Override
+    public Set<String> getAvailableLanguageTags() {
+        return langtags;
+    }
+}
--- a/jdk/src/share/classes/sun/util/locale/provider/JRELocaleProviderAdapter.java	Tue Apr 02 14:13:13 2013 -0400
+++ b/jdk/src/share/classes/sun/util/locale/provider/JRELocaleProviderAdapter.java	Tue Apr 02 15:31:24 2013 -0700
@@ -34,10 +34,12 @@
 import java.text.spi.DateFormatSymbolsProvider;
 import java.text.spi.DecimalFormatSymbolsProvider;
 import java.text.spi.NumberFormatProvider;
+import java.util.Calendar;
 import java.util.HashSet;
 import java.util.Locale;
 import java.util.Set;
 import java.util.StringTokenizer;
+import java.util.TimeZone;
 import java.util.concurrent.ConcurrentHashMap;
 import java.util.concurrent.ConcurrentMap;
 import java.util.spi.CalendarDataProvider;
@@ -47,6 +49,7 @@
 import java.util.spi.LocaleServiceProvider;
 import java.util.spi.TimeZoneNameProvider;
 import sun.util.resources.LocaleData;
+import sun.util.spi.CalendarProvider;
 
 /**
  * LocaleProviderAdapter implementation for the legacy JRE locale data.
@@ -104,6 +107,8 @@
             return (P) getCalendarDataProvider();
         case "CalendarNameProvider":
             return (P) getCalendarNameProvider();
+        case "CalendarProvider":
+            return (P) getCalendarProvider();
         default:
             throw new InternalError("should not come down here");
         }
@@ -122,6 +127,8 @@
     private volatile CalendarDataProvider calendarDataProvider = null;
     private volatile CalendarNameProvider calendarNameProvider = null;
 
+    private volatile CalendarProvider calendarProvider = null;
+
     /*
      * Getter methods for java.text.spi.* providers
      */
@@ -283,6 +290,23 @@
         return calendarNameProvider;
     }
 
+    /**
+     * Getter methods for sun.util.spi.* providers
+     */
+    @Override
+    public CalendarProvider getCalendarProvider() {
+        if (calendarProvider == null) {
+            CalendarProvider provider = new CalendarProviderImpl(getAdapterType(),
+                                                    getLanguageTagSet("CalendarData"));
+            synchronized (this) {
+                if (calendarProvider == null) {
+                    calendarProvider = provider;
+                }
+            }
+        }
+        return calendarProvider;
+    }
+
     @Override
     public LocaleResources getLocaleResources(Locale locale) {
         LocaleResources lr = localeResourcesMap.get(locale);
--- a/jdk/src/share/classes/sun/util/locale/provider/LocaleProviderAdapter.java	Tue Apr 02 14:13:13 2013 -0400
+++ b/jdk/src/share/classes/sun/util/locale/provider/LocaleProviderAdapter.java	Tue Apr 02 15:31:24 2013 -0700
@@ -47,6 +47,7 @@
 import java.util.spi.LocaleServiceProvider;
 import java.util.spi.TimeZoneNameProvider;
 import sun.util.cldr.CLDRLocaleProviderAdapter;
+import sun.util.spi.CalendarProvider;
 
 /**
  * The LocaleProviderAdapter abstract class.
@@ -295,7 +296,10 @@
         }
         if (type == Type.JRE) {
             String oldname = locale.toString().replace('_', '-');
-            return langtags.contains(oldname);
+            return langtags.contains(oldname) ||
+                   "ja-JP-JP".equals(oldname) ||
+                   "th-TH-TH".equals(oldname) ||
+                   "no-NO-NY".equals(oldname);
         }
         return false;
     }
@@ -422,6 +426,14 @@
      */
     public abstract CalendarNameProvider getCalendarNameProvider();
 
+    /**
+     * Returns a CalendarProvider for this LocaleProviderAdapter, or null if no
+     * CalendarProvider is available.
+     *
+     * @return a CalendarProvider
+     */
+    public abstract CalendarProvider getCalendarProvider();
+
     public abstract LocaleResources getLocaleResources(Locale locale);
 
     public abstract Locale[] getAvailableLocales();
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/src/share/classes/sun/util/spi/CalendarProvider.java	Tue Apr 02 15:31:24 2013 -0700
@@ -0,0 +1,64 @@
+/*
+ * Copyright (c) 2013, 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 sun.util.spi;
+
+import java.util.Calendar;
+import java.util.Locale;
+import java.util.TimeZone;
+import java.util.spi.LocaleServiceProvider;
+
+/**
+ * An abstract class for service providers that
+ * provide instances of the
+ * {@link java.util.Calendar Calendar} class.
+ *
+ * @since        1.8
+ */
+public abstract class CalendarProvider extends LocaleServiceProvider {
+
+    /**
+     * Sole constructor.  (For invocation by subclass constructors, typically
+     * implicit.)
+     */
+    protected CalendarProvider() {
+    }
+
+    /**
+     * Returns a new <code>Calendar</code> instance for the
+     * specified locale.
+     *
+     * @param zone the time zone
+     * @param locale the desired locale
+     * @exception NullPointerException if <code>locale</code> is null
+     * @exception IllegalArgumentException if <code>locale</code> isn't
+     *     one of the locales returned from
+     *     {@link java.util.spi.LocaleServiceProvider#getAvailableLocales()
+     *     getAvailableLocales()}.
+     * @return a <code>Calendar</code> instance.
+     * @see java.util.Calendar#getInstance(java.util.Locale)
+     */
+    public abstract Calendar getInstance(TimeZone zone, Locale locale);
+}
--- a/jdk/src/share/javavm/export/jni.h	Tue Apr 02 14:13:13 2013 -0400
+++ b/jdk/src/share/javavm/export/jni.h	Tue Apr 02 15:31:24 2013 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1996, 2006, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1996, 2013, 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
@@ -1951,6 +1951,7 @@
 #define JNI_VERSION_1_2 0x00010002
 #define JNI_VERSION_1_4 0x00010004
 #define JNI_VERSION_1_6 0x00010006
+#define JNI_VERSION_1_8 0x00010008
 
 #ifdef __cplusplus
 } /* extern "C" */
--- a/jdk/src/share/lib/security/java.security-linux	Tue Apr 02 14:13:13 2013 -0400
+++ b/jdk/src/share/lib/security/java.security-linux	Tue Apr 02 15:31:24 2013 -0700
@@ -157,7 +157,9 @@
                com.sun.org.apache.xalan.internal.utils.,\
                com.sun.org.glassfish.external.,\
                com.sun.org.glassfish.gmbal.,\
-	       jdk.internal.
+	       jdk.internal.,\
+	       jdk.nashorn.internal.,\
+	       jdk.nashorn.tools.
 
 #
 # List of comma-separated packages that start with or equal this string
@@ -181,7 +183,9 @@
                    com.sun.org.apache.xalan.internal.utils.,\
                    com.sun.org.glassfish.external.,\
                    com.sun.org.glassfish.gmbal.,\
-		   jdk.internal.
+		   jdk.internal.,\
+		   jdk.nashorn.internal.,\
+		   jdk.nashorn.tools.
 
 #
 # Determines whether this properties file can be appended to
--- a/jdk/src/share/lib/security/java.security-macosx	Tue Apr 02 14:13:13 2013 -0400
+++ b/jdk/src/share/lib/security/java.security-macosx	Tue Apr 02 15:31:24 2013 -0700
@@ -159,6 +159,8 @@
                com.sun.org.glassfish.external.,\
                com.sun.org.glassfish.gmbal.,\
 	       jdk.internal.,\
+	       jdk.nashorn.internal.,\
+	       jdk.nashorn.tools.,\
                apple.
 
 #
@@ -184,6 +186,8 @@
                    com.sun.org.glassfish.external.,\
                    com.sun.org.glassfish.gmbal.,\
 		   jdk.internal.,\
+		   jdk.nashorn.internal.,\
+		   jdk.nashorn.tools.,\
                    apple.
 
 #
--- a/jdk/src/share/lib/security/java.security-solaris	Tue Apr 02 14:13:13 2013 -0400
+++ b/jdk/src/share/lib/security/java.security-solaris	Tue Apr 02 15:31:24 2013 -0700
@@ -159,7 +159,9 @@
                com.sun.org.apache.xalan.internal.utils.,\
                com.sun.org.glassfish.external.,\
                com.sun.org.glassfish.gmbal.,\
-	       jdk.internal.
+	       jdk.internal.,\
+	       jdk.nashorn.internal.,\
+	       jdk.nashorn.tools.
 
 #
 # List of comma-separated packages that start with or equal this string
@@ -183,7 +185,9 @@
                    com.sun.org.apache.xalan.internal.utils.,\
                    com.sun.org.glassfish.external.,\
                    com.sun.org.glassfish.gmbal.,\
-		   jdk.internal.
+		   jdk.internal.,\
+		   jdk.nashorn.internal.,\
+		   jdk.nashorn.tools.
 
 #
 # Determines whether this properties file can be appended to
--- a/jdk/src/share/lib/security/java.security-windows	Tue Apr 02 14:13:13 2013 -0400
+++ b/jdk/src/share/lib/security/java.security-windows	Tue Apr 02 15:31:24 2013 -0700
@@ -158,7 +158,9 @@
                com.sun.org.apache.xalan.internal.utils.,\
                com.sun.org.glassfish.external.,\
                com.sun.org.glassfish.gmbal.,\
-	       jdk.internal.
+	       jdk.internal.,\
+	       jdk.nashorn.internal.,\
+	       jdk.nashorn.tools.
 
 #
 # List of comma-separated packages that start with or equal this string
@@ -182,7 +184,9 @@
                    com.sun.org.apache.xalan.internal.utils.,\
                    com.sun.org.glassfish.external.,\
                    com.sun.org.glassfish.gmbal.,\
-		   jdk.internal.
+		   jdk.internal.,\
+		   jdk.nashorn.internal.,\
+		   jdk.nashorn.tools.
 
 #
 # Determines whether this properties file can be appended to
--- a/jdk/src/share/native/common/jni_util.h	Tue Apr 02 14:13:13 2013 -0400
+++ b/jdk/src/share/native/common/jni_util.h	Tue Apr 02 15:31:24 2013 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1997, 2004, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2013, 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
@@ -339,6 +339,10 @@
 
 void initializeEncoding();
 
+void* getProcessHandle();
+
+void buildJniFunctionName(const char *sym, const char *cname,
+                          char *jniEntryName);
 
 #ifdef __cplusplus
 } /* extern "C" */
--- a/jdk/src/share/native/java/io/ObjectOutputStream.c	Tue Apr 02 14:13:13 2013 -0400
+++ b/jdk/src/share/native/java/io/ObjectOutputStream.c	Tue Apr 02 15:31:24 2013 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1999, 2000, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1999, 2013, 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
@@ -23,10 +23,8 @@
  * questions.
  */
 
-#include "jni.h"
-#include "jvm.h"
 #include "jni_util.h"
-#include "jlong.h"
+#include "jdk_util.h"
 
 #include "java_lang_Float.h"
 #include "java_lang_Double.h"
@@ -88,7 +86,7 @@
     srcend = srcpos + nfloats;
     for ( ; srcpos < srcend; srcpos++) {
         fval = (float) floats[srcpos];
-        if (JVM_IsNaN(fval)) {          /* collapse NaNs */
+        if (ISNANF(fval)) {          /* collapse NaNs */
             ival = 0x7fc00000;
         } else {
             u.f = fval;
@@ -160,7 +158,7 @@
     srcend = srcpos + ndoubles;
     for ( ; srcpos < srcend; srcpos++) {
         dval = doubles[srcpos];
-        if (JVM_IsNaN((double) dval)) {         /* collapse NaNs */
+        if (ISNAND((double) dval)) {         /* collapse NaNs */
             lval = jint_to_jlong(0x7ff80000);
             lval = jlong_shl(lval, 32);
         } else {
--- a/jdk/src/share/native/java/io/io_util.c	Tue Apr 02 14:13:13 2013 -0400
+++ b/jdk/src/share/native/java/io/io_util.c	Tue Apr 02 15:31:24 2013 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1994, 2011, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1994, 2013, 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
@@ -47,10 +47,8 @@
     nread = IO_Read(fd, &ret, 1);
     if (nread == 0) { /* EOF */
         return -1;
-    } else if (nread == JVM_IO_ERR) { /* error */
+    } else if (nread == -1) { /* error */
         JNU_ThrowIOExceptionWithLastError(env, "Read error");
-    } else if (nread == JVM_IO_INTR) {
-        JNU_ThrowByName(env, "java/io/InterruptedIOException", NULL);
     }
     return ret & 0xFF;
 }
@@ -111,10 +109,8 @@
         nread = IO_Read(fd, buf, len);
         if (nread > 0) {
             (*env)->SetByteArrayRegion(env, bytes, off, nread, (jbyte *)buf);
-        } else if (nread == JVM_IO_ERR) {
+        } else if (nread == -1) {
             JNU_ThrowIOExceptionWithLastError(env, "Read error");
-        } else if (nread == JVM_IO_INTR) {
-            JNU_ThrowByName(env, "java/io/InterruptedIOException", NULL);
         } else { /* EOF */
             nread = -1;
         }
@@ -141,10 +137,8 @@
     } else {
         n = IO_Write(fd, &c, 1);
     }
-    if (n == JVM_IO_ERR) {
+    if (n == -1) {
         JNU_ThrowIOExceptionWithLastError(env, "Write error");
-    } else if (n == JVM_IO_INTR) {
-        JNU_ThrowByName(env, "java/io/InterruptedIOException", NULL);
     }
 }
 
@@ -194,12 +188,9 @@
             } else {
                 n = IO_Write(fd, buf+off, len);
             }
-            if (n == JVM_IO_ERR) {
+            if (n == -1) {
                 JNU_ThrowIOExceptionWithLastError(env, "Write error");
                 break;
-            } else if (n == JVM_IO_INTR) {
-                JNU_ThrowByName(env, "java/io/InterruptedIOException", NULL);
-                break;
             }
             off += n;
             len -= n;
@@ -214,11 +205,11 @@
 throwFileNotFoundException(JNIEnv *env, jstring path)
 {
     char buf[256];
-    jint n;
+    size_t n;
     jobject x;
     jstring why = NULL;
 
-    n = JVM_GetLastErrorString(buf, sizeof(buf));
+    n = getLastErrorString(buf, sizeof(buf));
     if (n > 0) {
         why = JNU_NewStringPlatform(env, buf);
     }
--- a/jdk/src/share/native/java/io/io_util.h	Tue Apr 02 14:13:13 2013 -0400
+++ b/jdk/src/share/native/java/io/io_util.h	Tue Apr 02 15:31:24 2013 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1997, 2012, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2013, 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
@@ -54,7 +54,7 @@
                 jint len, jboolean append, jfieldID fid);
 void fileOpen(JNIEnv *env, jobject this, jstring path, jfieldID fid, int flags);
 void throwFileNotFoundException(JNIEnv *env, jstring path);
-
+size_t getLastErrorString(char *buf, size_t len);
 
 /*
  * Macros for managing platform strings.  The typical usage pattern is:
--- a/jdk/src/share/native/java/lang/ClassLoader.c	Tue Apr 02 14:13:13 2013 -0400
+++ b/jdk/src/share/native/java/lang/ClassLoader.c	Tue Apr 02 15:31:24 2013 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1996, 2010, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1996, 2013, 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
@@ -32,6 +32,7 @@
 #include "jvm.h"
 #include "java_lang_ClassLoader.h"
 #include "java_lang_ClassLoader_NativeLibrary.h"
+#include <string.h>
 
 /* defined in libverify.so/verify.dll (src file common/check_format.c) */
 extern jboolean VerifyClassname(char *utf_name, jboolean arrayAllowed);
@@ -286,6 +287,8 @@
 
 static jfieldID handleID;
 static jfieldID jniVersionID;
+static jfieldID loadedID;
+static void *procHandle;
 
 static jboolean initIDs(JNIEnv *env)
 {
@@ -300,6 +303,10 @@
         jniVersionID = (*env)->GetFieldID(env, this, "jniVersion", "I");
         if (jniVersionID == 0)
             return JNI_FALSE;
+        loadedID = (*env)->GetFieldID(env, this, "loaded", "Z");
+        if (loadedID == 0)
+             return JNI_FALSE;
+        procHandle = getProcessHandle();
     }
     return JNI_TRUE;
 }
@@ -308,13 +315,59 @@
 typedef void (JNICALL *JNI_OnUnload_t)(JavaVM *, void *);
 
 /*
+ * Support for finding JNI_On(Un)Load_<lib_name> if it exists.
+ * If cname == NULL then just find normal JNI_On(Un)Load entry point
+ */
+static void *findJniFunction(JNIEnv *env, void *handle,
+                                    const char *cname, jboolean isLoad) {
+    const char *onLoadSymbols[] = JNI_ONLOAD_SYMBOLS;
+    const char *onUnloadSymbols[] = JNI_ONUNLOAD_SYMBOLS;
+    const char **syms;
+    int symsLen;
+    void *entryName = NULL;
+    char *jniFunctionName;
+    int i;
+    int len;
+
+    // Check for JNI_On(Un)Load<_libname> function
+    if (isLoad) {
+        syms = onLoadSymbols;
+        symsLen = sizeof(onLoadSymbols) / sizeof(char *);
+    } else {
+        syms = onUnloadSymbols;
+        symsLen = sizeof(onUnloadSymbols) / sizeof(char *);
+    }
+    for (i = 0; i < symsLen; i++) {
+        // cname + sym + '_' + '\0'
+        if ((len = (cname != NULL ? strlen(cname) : 0) + strlen(syms[i]) + 2) >
+            FILENAME_MAX) {
+            goto done;
+        }
+        jniFunctionName = malloc(len);
+        if (jniFunctionName == NULL) {
+            JNU_ThrowOutOfMemoryError(env, NULL);
+            goto done;
+        }
+        buildJniFunctionName(syms[i], cname, jniFunctionName);
+        entryName = JVM_FindLibraryEntry(handle, jniFunctionName);
+        free(jniFunctionName);
+        if(entryName) {
+            break;
+        }
+    }
+
+ done:
+    return entryName;
+}
+
+/*
  * Class:     java_lang_ClassLoader_NativeLibrary
  * Method:    load
- * Signature: (Ljava/lang/String;)J
+ * Signature: (Ljava/lang/String;Z)V
  */
 JNIEXPORT void JNICALL
 Java_java_lang_ClassLoader_00024NativeLibrary_load
-  (JNIEnv *env, jobject this, jstring name)
+  (JNIEnv *env, jobject this, jstring name, jboolean isBuiltin)
 {
     const char *cname;
     jint jniVersion;
@@ -327,18 +380,12 @@
     cname = JNU_GetStringPlatformChars(env, name, 0);
     if (cname == 0)
         return;
-    handle = JVM_LoadLibrary(cname);
+    handle = isBuiltin ? procHandle : JVM_LoadLibrary(cname);
     if (handle) {
-        const char *onLoadSymbols[] = JNI_ONLOAD_SYMBOLS;
         JNI_OnLoad_t JNI_OnLoad;
-        unsigned int i;
-        for (i = 0; i < sizeof(onLoadSymbols) / sizeof(char *); i++) {
-            JNI_OnLoad = (JNI_OnLoad_t)
-                JVM_FindLibraryEntry(handle, onLoadSymbols[i]);
-            if (JNI_OnLoad) {
-                break;
-            }
-        }
+        JNI_OnLoad = (JNI_OnLoad_t)findJniFunction(env, handle,
+                                               isBuiltin ? cname : NULL,
+                                               JNI_TRUE);
         if (JNI_OnLoad) {
             JavaVM *jvm;
             (*env)->GetJavaVM(env, &jvm);
@@ -351,17 +398,22 @@
         if (cause) {
             (*env)->ExceptionClear(env);
             (*env)->Throw(env, cause);
-            JVM_UnloadLibrary(handle);
+            if (!isBuiltin) {
+                JVM_UnloadLibrary(handle);
+            }
             goto done;
         }
 
-        if (!JVM_IsSupportedJNIVersion(jniVersion)) {
+        if (!JVM_IsSupportedJNIVersion(jniVersion) ||
+            (isBuiltin && jniVersion < JNI_VERSION_1_8)) {
             char msg[256];
             jio_snprintf(msg, sizeof(msg),
                          "unsupported JNI version 0x%08X required by %s",
                          jniVersion, cname);
             JNU_ThrowByName(env, "java/lang/UnsatisfiedLinkError", msg);
-            JVM_UnloadLibrary(handle);
+            if (!isBuiltin) {
+                JVM_UnloadLibrary(handle);
+            }
             goto done;
         }
         (*env)->SetIntField(env, this, jniVersionID, jniVersion);
@@ -375,6 +427,7 @@
         goto done;
     }
     (*env)->SetLongField(env, this, handleID, ptr_to_jlong(handle));
+    (*env)->SetBooleanField(env, this, loadedID, JNI_TRUE);
 
  done:
     JNU_ReleaseStringPlatformChars(env, name, cname);
@@ -383,41 +436,42 @@
 /*
  * Class:     java_lang_ClassLoader_NativeLibrary
  * Method:    unload
- * Signature: ()V
+ * Signature: (Z)V
  */
 JNIEXPORT void JNICALL
 Java_java_lang_ClassLoader_00024NativeLibrary_unload
-  (JNIEnv *env, jobject this)
+(JNIEnv *env, jobject this, jstring name, jboolean isBuiltin)
 {
     const char *onUnloadSymbols[] = JNI_ONUNLOAD_SYMBOLS;
     void *handle;
     JNI_OnUnload_t JNI_OnUnload;
-    unsigned int i;
+     const char *cname;
 
     if (!initIDs(env))
         return;
-
+    cname = JNU_GetStringPlatformChars(env, name, 0);
+    if (cname == NULL) {
+        return;
+    }
     handle = jlong_to_ptr((*env)->GetLongField(env, this, handleID));
-    for (i = 0; i < sizeof(onUnloadSymbols) / sizeof(char *); i++) {
-        JNI_OnUnload = (JNI_OnUnload_t )
-            JVM_FindLibraryEntry(handle, onUnloadSymbols[i]);
-        if (JNI_OnUnload) {
-            break;
-        }
-    }
-
+    JNI_OnUnload = (JNI_OnUnload_t )findJniFunction(env, handle,
+                                                isBuiltin ? cname : NULL,
+                                                JNI_FALSE);
     if (JNI_OnUnload) {
         JavaVM *jvm;
         (*env)->GetJavaVM(env, &jvm);
         (*JNI_OnUnload)(jvm, NULL);
     }
-    JVM_UnloadLibrary(handle);
+    if (!isBuiltin) {
+        JVM_UnloadLibrary(handle);
+    }
+    JNU_ReleaseStringPlatformChars(env, name, cname);
 }
 
 /*
  * Class:     java_lang_ClassLoader_NativeLibrary
  * Method:    find
- * Signature: (Ljava/lang/String;J)J
+ * Signature: (Ljava/lang/String;)J
  */
 JNIEXPORT jlong JNICALL
 Java_java_lang_ClassLoader_00024NativeLibrary_find
@@ -456,3 +510,63 @@
     return NULL;
 }
 
+/*
+ * Class:     java_lang_ClassLoader_NativeLibrary
+ * Method:    findBuiltinLib
+ * Signature: (Ljava/lang/String;)Ljava/lang/String;
+ */
+JNIEXPORT jstring JNICALL
+Java_java_lang_ClassLoader_00024NativeLibrary_findBuiltinLib
+  (JNIEnv *env, jclass cls, jstring name)
+{
+    const char *cname;
+    char *libName;
+    int prefixLen = (int) strlen(JNI_LIB_PREFIX);
+    int suffixLen = (int) strlen(JNI_LIB_SUFFIX);
+    int len;
+    jstring lib;
+    void *ret;
+    const char *onLoadSymbols[] = JNI_ONLOAD_SYMBOLS;
+
+    if (name == NULL) {
+        JNU_ThrowInternalError(env, "NULL filename for native library");
+        return NULL;
+    }
+    // Can't call initIDs because it will recurse into NativeLibrary via
+    // FindClass to check context so set prochandle here as well.
+    procHandle = getProcessHandle();
+    cname = JNU_GetStringPlatformChars(env, name, 0);
+    if (cname == NULL) {
+        JNU_ThrowOutOfMemoryError(env, NULL);
+        return NULL;
+    }
+    // Copy name Skipping PREFIX
+    len = strlen(cname);
+    if (len <= (prefixLen+suffixLen)) {
+        JNU_ReleaseStringPlatformChars(env, name, cname);
+        return NULL;
+    }
+    libName = malloc(len + 1); //+1 for null if prefix+suffix == 0
+    if (libName == NULL) {
+        JNU_ReleaseStringPlatformChars(env, name, cname);
+        JNU_ThrowOutOfMemoryError(env, NULL);
+        return NULL;
+    }
+    if (len > prefixLen) {
+        strcpy(libName, cname+prefixLen);
+    }
+    JNU_ReleaseStringPlatformChars(env, name, cname);
+
+    // Strip SUFFIX
+    libName[strlen(libName)-suffixLen] = '\0';
+
+    // Check for JNI_OnLoad_libname function
+    ret = findJniFunction(env, procHandle, libName, JNI_TRUE);
+    if (ret != NULL) {
+        lib = JNU_NewStringPlatform(env, libName);
+        free(libName);
+        return lib;
+    }
+    free(libName);
+    return NULL;
+}
--- a/jdk/src/share/native/sun/security/jgss/wrapper/GSSLibStub.c	Tue Apr 02 14:13:13 2013 -0400
+++ b/jdk/src/share/native/sun/security/jgss/wrapper/GSSLibStub.c	Tue Apr 02 15:31:24 2013 -0700
@@ -27,8 +27,22 @@
 #include "NativeUtil.h"
 #include "NativeFunc.h"
 #include "jlong.h"
+#include <jni.h>
 
-/* Constants for indicating what type of info is needed for inqueries */
+/* Throws a Java Exception by name */
+
+void throwByName(JNIEnv *env, const char *name, const char *msg) {
+    jclass cls = (*env)->FindClass(env, name);
+
+    if (cls != 0) /* Otherwise an exception has already been thrown */
+        (*env)->ThrowNew(env, cls, msg);
+}
+
+void throwOutOfMemoryError(JNIEnv *env, const char *message) {
+    throwByName(env, "java/lang/OutOfMemoryError", message);
+}
+
+/* Constants for indicating what type of info is needed for inquiries */
 const int TYPE_CRED_NAME = 10;
 const int TYPE_CRED_TIME = 11;
 const int TYPE_CRED_USAGE = 12;
@@ -117,7 +131,14 @@
   if (jcb == NULL) {
     return GSS_C_NO_CHANNEL_BINDINGS;
   }
+
   cb = malloc(sizeof(struct gss_channel_bindings_struct));
+
+  if (cb == NULL) {
+    throwOutOfMemoryError(env,NULL);
+    return NULL;
+  }
+
   /* set up initiator address */
   jinetAddr =
     (*env)->CallObjectMethod(env, jcb,
@@ -301,12 +322,15 @@
   gss_buffer_desc nameVal;
   gss_OID nameType;
   gss_name_t nameHdl;
+  nameHdl = GSS_C_NO_NAME;
 
   debug(env, "[GSSLibStub_importName]");
 
   initGSSBuffer(env, jnameVal, &nameVal);
   nameType = newGSSOID(env, jnameType);
-  nameHdl = GSS_C_NO_NAME;
+  if ((*env)->ExceptionCheck(env)) {
+    return jlong_zero;
+  }
 
   /* gss_import_name(...) => GSS_S_BAD_NAMETYPE, GSS_S_BAD_NAME,
      GSS_S_BAD_MECH */
@@ -509,15 +533,18 @@
   gss_cred_usage_t credUsage;
   gss_name_t nameHdl;
   gss_cred_id_t credHdl;
+  credHdl = GSS_C_NO_CREDENTIAL;
 
   debug(env, "[GSSLibStub_acquireCred]");
 
 
   mech = (gss_OID) jlong_to_ptr((*env)->GetLongField(env, jobj, FID_GSSLibStub_pMech));
   mechs = newGSSOIDSet(env, mech);
+  if ((*env)->ExceptionCheck(env)) {
+    return jlong_zero;
+  }
   credUsage = (gss_cred_usage_t) usage;
   nameHdl = (gss_name_t) jlong_to_ptr(pName);
-  credHdl = GSS_C_NO_CREDENTIAL;
 
   sprintf(debugBuf, "[GSSLibStub_acquireCred] pName=%ld, usage=%d",
     (long) pName, usage);
@@ -628,7 +655,7 @@
 
   /* return immediately if an exception has occurred */
   if ((*env)->ExceptionCheck(env)) {
-    return 0;
+    return jlong_zero;
   }
 
   sprintf(debugBuf, "[GSSLibStub_getCredName] pName=%ld", (long) nameHdl);
@@ -795,6 +822,10 @@
   time = getGSSTime((*env)->GetIntField(env, jcontextSpi,
                                         FID_NativeGSSContext_lifetime));
   cb = getGSSCB(env, jcb);
+  if ((*env)->ExceptionCheck(env)) {
+    return NULL;
+  }
+
   initGSSBuffer(env, jinToken, &inToken);
 
   sprintf(debugBuf,
@@ -895,6 +926,9 @@
   credHdl = (gss_cred_id_t) jlong_to_ptr(pCred);
   initGSSBuffer(env, jinToken, &inToken);
   cb = getGSSCB(env, jcb);
+  if ((*env)->ExceptionCheck(env)) {
+    return NULL;
+  }
   srcName = GSS_C_NO_NAME;
   delCred = GSS_C_NO_CREDENTIAL;
   setTarget = (credHdl == GSS_C_NO_CREDENTIAL);
@@ -1130,7 +1164,7 @@
   checkStatus(env, jobj, major, minor, "[GSSLibStub_inquireContextAll]");
   /* return immediately if an exception has occurred */
   if ((*env)->ExceptionCheck(env)) {
-    return ptr_to_jlong(NULL);
+    return jlong_zero;
   }
 
   sprintf(debugBuf, "[GSSLibStub_getContextName] pName=%ld", (long) nameHdl);
--- a/jdk/src/share/native/sun/security/jgss/wrapper/NativeUtil.c	Tue Apr 02 14:13:13 2013 -0400
+++ b/jdk/src/share/native/sun/security/jgss/wrapper/NativeUtil.c	Tue Apr 02 15:31:24 2013 -0700
@@ -26,6 +26,9 @@
 #include "NativeUtil.h"
 #include "NativeFunc.h"
 #include "jlong.h"
+#include <jni.h>
+
+extern void throwOutOfMemoryError(JNIEnv *env, const char *message);
 
 const int JAVA_DUPLICATE_TOKEN_CODE = 19; /* DUPLICATE_TOKEN */
 const int JAVA_OLD_TOKEN_CODE = 20; /* OLD_TOKEN */
@@ -615,8 +618,17 @@
       (*env)->Throw(env, gssEx);
     }
     cOid = malloc(sizeof(struct gss_OID_desc_struct));
+    if (cOid == NULL) {
+      throwOutOfMemoryError(env,NULL);
+      return GSS_C_NO_OID;
+    }
     cOid->length = (*env)->GetArrayLength(env, jbytes) - 2;
     cOid->elements = malloc(cOid->length);
+    if (cOid->elements == NULL) {
+      throwOutOfMemoryError(env,NULL);
+      free(cOid);
+      return GSS_C_NO_OID;
+    }
     (*env)->GetByteArrayRegion(env, jbytes, 2, cOid->length,
                                cOid->elements);
     (*env)->DeleteLocalRef(env, jbytes);
--- a/jdk/src/solaris/classes/sun/net/www/protocol/jar/JarFileFactory.java	Tue Apr 02 14:13:13 2013 -0400
+++ b/jdk/src/solaris/classes/sun/net/www/protocol/jar/JarFileFactory.java	Tue Apr 02 15:31:24 2013 -0700
@@ -43,13 +43,24 @@
 class JarFileFactory implements URLJarFile.URLJarFileCloseController {
 
     /* the url to file cache */
-    private static HashMap<String, JarFile> fileCache = new HashMap<String, JarFile>();
+    private static final HashMap<String, JarFile> fileCache = new HashMap<>();
 
     /* the file to url cache */
-    private static HashMap<JarFile, URL> urlCache = new HashMap<JarFile, URL>();
+    private static final HashMap<JarFile, URL> urlCache = new HashMap<>();
+
+    private static final JarFileFactory instance = new JarFileFactory();
+
+    private JarFileFactory() { }
+
+    public static JarFileFactory getInstance() {
+        return instance;
+    }
 
     URLConnection getConnection(JarFile jarFile) throws IOException {
-        URL u = urlCache.get(jarFile);
+        URL u;
+        synchronized (instance) {
+            u = urlCache.get(jarFile);
+        }
         if (u != null)
             return u.openConnection();
 
@@ -62,16 +73,16 @@
 
     JarFile get(URL url, boolean useCaches) throws IOException {
 
-        JarFile result = null;
-        JarFile local_result = null;
+        JarFile result;
+        JarFile local_result;
 
         if (useCaches) {
-            synchronized (this) {
+            synchronized (instance) {
                 result = getCachedJarFile(url);
             }
             if (result == null) {
                 local_result = URLJarFile.getJarFile(url, this);
-                synchronized (this) {
+                synchronized (instance) {
                     result = getCachedJarFile(url);
                     if (result == null) {
                         fileCache.put(URLUtil.urlNoFragString(url), local_result);
@@ -99,14 +110,15 @@
      * remove the JarFile from the cache
      */
     public void close(JarFile jarFile) {
-        URL urlRemoved = urlCache.remove(jarFile);
-        if( urlRemoved != null) {
+        synchronized (instance) {
+            URL urlRemoved = urlCache.remove(jarFile);
+            if (urlRemoved != null)
                 fileCache.remove(URLUtil.urlNoFragString(urlRemoved));
         }
     }
 
-
     private JarFile getCachedJarFile(URL url) {
+        assert Thread.holdsLock(instance);
         JarFile result = fileCache.get(URLUtil.urlNoFragString(url));
 
         /* if the JAR file is cached, the permission will always be there */
--- a/jdk/src/solaris/classes/sun/nio/ch/EPollArrayWrapper.java	Tue Apr 02 14:13:13 2013 -0400
+++ b/jdk/src/solaris/classes/sun/nio/ch/EPollArrayWrapper.java	Tue Apr 02 15:31:24 2013 -0700
@@ -26,9 +26,9 @@
 package sun.nio.ch;
 
 import java.io.IOException;
-import java.util.LinkedList;
-import java.util.HashSet;
-import java.util.Iterator;
+import java.util.BitSet;
+import java.util.HashMap;
+import java.util.Map;
 
 /**
  * Manipulates a native array of epoll_event structs on Linux:
@@ -52,37 +52,78 @@
  * this implementation we set data.fd to be the file descriptor that we
  * register. That way, we have the file descriptor available when we
  * process the events.
- *
- * All file descriptors registered with epoll have the POLLHUP and POLLERR
- * events enabled even when registered with an event set of 0. To ensure
- * that epoll_wait doesn't poll an idle file descriptor when the underlying
- * connection is closed or reset then its registration is deleted from
- * epoll (it will be re-added again if the event set is changed)
  */
 
 class EPollArrayWrapper {
     // EPOLL_EVENTS
-    static final int EPOLLIN      = 0x001;
+    private static final int EPOLLIN      = 0x001;
 
     // opcodes
-    static final int EPOLL_CTL_ADD      = 1;
-    static final int EPOLL_CTL_DEL      = 2;
-    static final int EPOLL_CTL_MOD      = 3;
+    private static final int EPOLL_CTL_ADD      = 1;
+    private static final int EPOLL_CTL_DEL      = 2;
+    private static final int EPOLL_CTL_MOD      = 3;
 
     // Miscellaneous constants
-    static final int SIZE_EPOLLEVENT  = sizeofEPollEvent();
-    static final int EVENT_OFFSET     = 0;
-    static final int DATA_OFFSET      = offsetofData();
-    static final int FD_OFFSET        = DATA_OFFSET;
-    static final int NUM_EPOLLEVENTS  = Math.min(IOUtil.fdLimit(), 8192);
+    private static final int SIZE_EPOLLEVENT  = sizeofEPollEvent();
+    private static final int EVENT_OFFSET     = 0;
+    private static final int DATA_OFFSET      = offsetofData();
+    private static final int FD_OFFSET        = DATA_OFFSET;
+    private static final int OPEN_MAX         = IOUtil.fdLimit();
+    private static final int NUM_EPOLLEVENTS  = Math.min(OPEN_MAX, 8192);
+
+    // Special value to indicate that an update should be ignored
+    private static final byte  KILLED = (byte)-1;
 
-    // Base address of the native pollArray
+    // Initial size of arrays for fd registration changes
+    private static final int INITIAL_PENDING_UPDATE_SIZE = 64;
+
+    // maximum size of updatesLow
+    private static final int MAX_UPDATE_ARRAY_SIZE = Math.min(OPEN_MAX, 64*1024);
+
+
+    // The fd of the epoll driver
+    private final int epfd;
+
+     // The epoll_event array for results from epoll_wait
+    private final AllocatedNativeObject pollArray;
+
+    // Base address of the epoll_event array
     private final long pollArrayAddress;
 
-    // Set of "idle" channels
-    private final HashSet<SelChImpl> idleSet;
+    // The fd of the interrupt line going out
+    private int outgoingInterruptFD;
+
+    // The fd of the interrupt line coming in
+    private int incomingInterruptFD;
+
+    // The index of the interrupt FD
+    private int interruptedIndex;
+
+    // Number of updated pollfd entries
+    int updated;
+
+    // object to synchronize fd registration changes
+    private final Object updateLock = new Object();
 
-    EPollArrayWrapper() {
+    // number of file descriptors with registration changes pending
+    private int updateCount;
+
+    // file descriptors with registration changes pending
+    private int[] updateDescriptors = new int[INITIAL_PENDING_UPDATE_SIZE];
+
+    // events for file descriptors with registration changes pending, indexed
+    // by file descriptor and stored as bytes for efficiency reasons. For
+    // file descriptors higher than MAX_UPDATE_ARRAY_SIZE (unlimited case at
+    // least) then the update is stored in a map.
+    private final byte[] eventsLow = new byte[MAX_UPDATE_ARRAY_SIZE];
+    private Map<Integer,Byte> eventsHigh;
+
+    // Used by release and updateRegistrations to track whether a file
+    // descriptor is registered with epoll.
+    private final BitSet registered = new BitSet();
+
+
+    EPollArrayWrapper() throws IOException {
         // creates the epoll file descriptor
         epfd = epollCreate();
 
@@ -91,50 +132,11 @@
         pollArray = new AllocatedNativeObject(allocationSize, true);
         pollArrayAddress = pollArray.address();
 
-        for (int i=0; i<NUM_EPOLLEVENTS; i++) {
-            putEventOps(i, 0);
-            putData(i, 0L);
-        }
-
-        // create idle set
-        idleSet = new HashSet<SelChImpl>();
+        // eventHigh needed when using file descriptors > 64k
+        if (OPEN_MAX > MAX_UPDATE_ARRAY_SIZE)
+            eventsHigh = new HashMap<>();
     }
 
-    // Used to update file description registrations
-    private static class Updator {
-        SelChImpl channel;
-        int opcode;
-        int events;
-        Updator(SelChImpl channel, int opcode, int events) {
-            this.channel = channel;
-            this.opcode = opcode;
-            this.events = events;
-        }
-        Updator(SelChImpl channel, int opcode) {
-            this(channel, opcode, 0);
-        }
-    }
-
-    private LinkedList<Updator> updateList = new LinkedList<Updator>();
-
-    // The epoll_event array for results from epoll_wait
-    private AllocatedNativeObject pollArray;
-
-    // The fd of the epoll driver
-    final int epfd;
-
-    // The fd of the interrupt line going out
-    int outgoingInterruptFD;
-
-    // The fd of the interrupt line coming in
-    int incomingInterruptFD;
-
-    // The index of the interrupt FD
-    int interruptedIndex;
-
-    // Number of updated pollfd entries
-    int updated;
-
     void initInterrupt(int fd0, int fd1) {
         outgoingInterruptFD = fd1;
         incomingInterruptFD = fd0;
@@ -146,11 +148,6 @@
         pollArray.putInt(offset, event);
     }
 
-    void putData(int i, long value) {
-        int offset = SIZE_EPOLLEVENT * i + DATA_OFFSET;
-        pollArray.putLong(offset, value);
-    }
-
     void putDescriptor(int i, int fd) {
         int offset = SIZE_EPOLLEVENT * i + FD_OFFSET;
         pollArray.putInt(offset, fd);
@@ -167,51 +164,83 @@
     }
 
     /**
-     * Update the events for a given channel.
+     * Sets the pending update events for the given file descriptor. This
+     * method has no effect if the update events is already set to KILLED,
+     * unless {@code force} is {@code true}.
      */
-    void setInterest(SelChImpl channel, int mask) {
-        synchronized (updateList) {
-            // if the previous pending operation is to add this file descriptor
-            // to epoll then update its event set
-            if (updateList.size() > 0) {
-                Updator last = updateList.getLast();
-                if (last.channel == channel && last.opcode == EPOLL_CTL_ADD) {
-                    last.events = mask;
-                    return;
-                }
+    private void setUpdateEvents(int fd, byte events, boolean force) {
+        if (fd < MAX_UPDATE_ARRAY_SIZE) {
+            if ((eventsLow[fd] != KILLED) || force) {
+                eventsLow[fd] = events;
+            }
+        } else {
+            Integer key = Integer.valueOf(fd);
+            if ((eventsHigh.get(key) != KILLED) || force) {
+                eventsHigh.put(key, Byte.valueOf(events));
             }
+        }
+    }
 
-            // update existing registration
-            updateList.add(new Updator(channel, EPOLL_CTL_MOD, mask));
+    /**
+     * Returns the pending update events for the given file descriptor.
+     */
+    private byte getUpdateEvents(int fd) {
+        if (fd < MAX_UPDATE_ARRAY_SIZE) {
+            return eventsLow[fd];
+        } else {
+            Byte result = eventsHigh.get(Integer.valueOf(fd));
+            // result should never be null
+            return result.byteValue();
         }
     }
 
     /**
-     * Add a channel's file descriptor to epoll
+     * Update the events for a given file descriptor
      */
-    void add(SelChImpl channel) {
-        synchronized (updateList) {
-            updateList.add(new Updator(channel, EPOLL_CTL_ADD));
+    void setInterest(int fd, int mask) {
+        synchronized (updateLock) {
+            // record the file descriptor and events
+            int oldCapacity = updateDescriptors.length;
+            if (updateCount == oldCapacity) {
+                int newCapacity = oldCapacity + INITIAL_PENDING_UPDATE_SIZE;
+                int[] newDescriptors = new int[newCapacity];
+                System.arraycopy(updateDescriptors, 0, newDescriptors, 0, oldCapacity);
+                updateDescriptors = newDescriptors;
+            }
+            updateDescriptors[updateCount++] = fd;
+
+            // events are stored as bytes for efficiency reasons
+            byte b = (byte)mask;
+            assert (b == mask) && (b != KILLED);
+            setUpdateEvents(fd, b, false);
         }
     }
 
     /**
-     * Remove a channel's file descriptor from epoll
+     * Add a file descriptor
      */
-    void release(SelChImpl channel) {
-        synchronized (updateList) {
-            // flush any pending updates
-            for (Iterator<Updator> it = updateList.iterator(); it.hasNext();) {
-                if (it.next().channel == channel) {
-                    it.remove();
-                }
+    void add(int fd) {
+        // force the initial update events to 0 as it may be KILLED by a
+        // previous registration.
+        synchronized (updateLock) {
+            assert !registered.get(fd);
+            setUpdateEvents(fd, (byte)0, true);
+        }
+    }
+
+    /**
+     * Remove a file descriptor
+     */
+    void remove(int fd) {
+        synchronized (updateLock) {
+            // kill pending and future update for this file descriptor
+            setUpdateEvents(fd, KILLED, false);
+
+            // remove from epoll
+            if (registered.get(fd)) {
+                epollCtl(epfd, EPOLL_CTL_DEL, fd, 0);
+                registered.clear(fd);
             }
-
-            // remove from the idle set (if present)
-            idleSet.remove(channel);
-
-            // remove from epoll (if registered)
-            epollCtl(epfd, EPOLL_CTL_DEL, channel.getFDVal(), 0);
         }
     }
 
@@ -239,36 +268,38 @@
     /**
      * Update the pending registrations.
      */
-    void updateRegistrations() {
-        synchronized (updateList) {
-            Updator u = null;
-            while ((u = updateList.poll()) != null) {
-                SelChImpl ch = u.channel;
-                if (!ch.isOpen())
-                    continue;
+    private void updateRegistrations() {
+        synchronized (updateLock) {
+            int j = 0;
+            while (j < updateCount) {
+                int fd = updateDescriptors[j];
+                short events = getUpdateEvents(fd);
+                boolean isRegistered = registered.get(fd);
+                int opcode = 0;
 
-                // if the events are 0 then file descriptor is put into "idle
-                // set" to prevent it being polled
-                if (u.events == 0) {
-                    boolean added = idleSet.add(u.channel);
-                    // if added to idle set then remove from epoll if registered
-                    if (added && (u.opcode == EPOLL_CTL_MOD))
-                        epollCtl(epfd, EPOLL_CTL_DEL, ch.getFDVal(), 0);
-                } else {
-                    // events are specified. If file descriptor was in idle set
-                    // it must be re-registered (by converting opcode to ADD)
-                    boolean idle = false;
-                    if (!idleSet.isEmpty())
-                        idle = idleSet.remove(u.channel);
-                    int opcode = (idle) ? EPOLL_CTL_ADD : u.opcode;
-                    epollCtl(epfd, opcode, ch.getFDVal(), u.events);
+                if (events != KILLED) {
+                    if (isRegistered) {
+                        opcode = (events != 0) ? EPOLL_CTL_MOD : EPOLL_CTL_DEL;
+                    } else {
+                        opcode = (events != 0) ? EPOLL_CTL_ADD : 0;
+                    }
+                    if (opcode != 0) {
+                        epollCtl(epfd, opcode, fd, events);
+                        if (opcode == EPOLL_CTL_ADD) {
+                            registered.set(fd);
+                        } else if (opcode == EPOLL_CTL_DEL) {
+                            registered.clear(fd);
+                        }
+                    }
                 }
+                j++;
             }
+            updateCount = 0;
         }
     }
 
     // interrupt support
-    boolean interrupted = false;
+    private boolean interrupted = false;
 
     public void interrupt() {
         interrupt(outgoingInterruptFD);
--- a/jdk/src/solaris/classes/sun/nio/ch/EPollSelectorImpl.java	Tue Apr 02 14:13:13 2013 -0400
+++ b/jdk/src/solaris/classes/sun/nio/ch/EPollSelectorImpl.java	Tue Apr 02 15:31:24 2013 -0700
@@ -53,26 +53,24 @@
     private volatile boolean closed = false;
 
     // Lock for interrupt triggering and clearing
-    private Object interruptLock = new Object();
+    private final Object interruptLock = new Object();
     private boolean interruptTriggered = false;
 
     /**
      * Package private constructor called by factory method in
      * the abstract superclass Selector.
      */
-    EPollSelectorImpl(SelectorProvider sp) {
+    EPollSelectorImpl(SelectorProvider sp) throws IOException {
         super(sp);
         long pipeFds = IOUtil.makePipe(false);
         fd0 = (int) (pipeFds >>> 32);
         fd1 = (int) pipeFds;
         pollWrapper = new EPollArrayWrapper();
         pollWrapper.initInterrupt(fd0, fd1);
-        fdToKey = new HashMap<Integer,SelectionKeyImpl>();
+        fdToKey = new HashMap<>();
     }
 
-    protected int doSelect(long timeout)
-        throws IOException
-    {
+    protected int doSelect(long timeout) throws IOException {
         if (closed)
             throw new ClosedSelectorException();
         processDeregisterQueue();
@@ -161,8 +159,9 @@
         if (closed)
             throw new ClosedSelectorException();
         SelChImpl ch = ski.channel;
-        fdToKey.put(Integer.valueOf(ch.getFDVal()), ski);
-        pollWrapper.add(ch);
+        int fd = Integer.valueOf(ch.getFDVal());
+        fdToKey.put(fd, ski);
+        pollWrapper.add(fd);
         keys.add(ski);
     }
 
@@ -171,7 +170,7 @@
         SelChImpl ch = ski.channel;
         int fd = ch.getFDVal();
         fdToKey.remove(Integer.valueOf(fd));
-        pollWrapper.release(ch);
+        pollWrapper.remove(fd);
         ski.setIndex(-1);
         keys.remove(ski);
         selectedKeys.remove(ski);
@@ -181,10 +180,11 @@
             ((SelChImpl)selch).kill();
     }
 
-    public void putEventOps(SelectionKeyImpl sk, int ops) {
+    public void putEventOps(SelectionKeyImpl ski, int ops) {
         if (closed)
             throw new ClosedSelectorException();
-        pollWrapper.setInterest(sk.channel, ops);
+        SelChImpl ch = ski.channel;
+        pollWrapper.setInterest(ch.getFDVal(), ops);
     }
 
     public Selector wakeup() {
@@ -200,5 +200,4 @@
     static {
         Util.load();
     }
-
 }
--- a/jdk/src/solaris/native/com/sun/security/auth/module/Solaris.c	Tue Apr 02 14:13:13 2013 -0400
+++ b/jdk/src/solaris/native/com/sun/security/auth/module/Solaris.c	Tue Apr 02 15:31:24 2013 -0700
@@ -31,6 +31,7 @@
 #include <stdlib.h>
 #include <string.h>
 #include <pwd.h>
+
 JNIEXPORT void JNICALL
 Java_com_sun_security_auth_module_SolarisSystem_getSolarisInfo
                                                 (JNIEnv *env, jobject obj) {
@@ -39,13 +40,23 @@
     char pwd_buf[1024];
     struct passwd pwd;
     jsize numSuppGroups = getgroups(0, NULL);
-    gid_t *groups = (gid_t *)calloc(numSuppGroups, sizeof(gid_t));
-
     jfieldID fid;
     jstring jstr;
     jlongArray jgroups;
     jlong *jgroupsAsArray;
-    jclass cls = (*env)->GetObjectClass(env, obj);
+    gid_t *groups;
+    jclass cls;
+
+    groups = (gid_t *)calloc(numSuppGroups, sizeof(gid_t));
+
+    if (groups == NULL) {
+        jclass cls = (*env)->FindClass(env,"java/lang/OutOfMemoryError");
+        if(cls != 0)
+            (*env)->ThrowNew(env, cls, NULL);
+        return;
+    }
+
+    cls = (*env)->GetObjectClass(env, obj);
 
     memset(pwd_buf, 0, sizeof(pwd_buf));
     if (getpwuid_r(getuid(), &pwd, pwd_buf, sizeof(pwd_buf)) != NULL &&
--- a/jdk/src/solaris/native/com/sun/security/auth/module/Unix.c	Tue Apr 02 14:13:13 2013 -0400
+++ b/jdk/src/solaris/native/com/sun/security/auth/module/Unix.c	Tue Apr 02 15:31:24 2013 -0700
@@ -44,9 +44,6 @@
     char pwd_buf[1024];
     struct passwd *pwd;
     struct passwd resbuf;
-    jsize numSuppGroups = getgroups(0, NULL);
-    gid_t *groups = (gid_t *)calloc(numSuppGroups, sizeof(gid_t));
-
     jfieldID userNameID;
     jfieldID userID;
     jfieldID groupID;
@@ -55,7 +52,20 @@
     jstring jstr;
     jlongArray jgroups;
     jlong *jgroupsAsArray;
-    jclass cls = (*env)->GetObjectClass(env, obj);
+    jsize numSuppGroups;
+    gid_t *groups;
+    jclass cls;
+
+    numSuppGroups = getgroups(0, NULL);
+    groups = (gid_t *)calloc(numSuppGroups, sizeof(gid_t));
+    if (groups == NULL) {
+        jclass cls = (*env)->FindClass(env,"java/lang/OutOfMemoryError");
+        if(cls != 0)
+            (*env)->ThrowNew(env, cls, NULL);
+        return;
+    }
+
+    cls = (*env)->GetObjectClass(env, obj);
 
     memset(pwd_buf, 0, sizeof(pwd_buf));
 
--- a/jdk/src/solaris/native/common/jdk_util_md.h	Tue Apr 02 14:13:13 2013 -0400
+++ b/jdk/src/solaris/native/common/jdk_util_md.h	Tue Apr 02 15:31:24 2013 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2011, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2011, 2013, 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
@@ -23,4 +23,24 @@
  * questions.
  */
 
-// Currently, there are no unix specific functions defined.
+#ifndef JDK_UTIL_MD_H
+#define JDK_UTIL_MD_H
+
+// checking for nanness
+#ifdef __solaris__
+#include <ieeefp.h>
+#define ISNANF(f) isnanf(f)
+#define ISNAND(d) isnand(d)
+#elif defined(MACOSX)
+#include <math.h>
+#define ISNANF(f) isnan(f)
+#define ISNAND(d) isnan(d)
+#elif defined(__linux__) || defined(_ALLBSD_SOURCE)
+#include <math.h>
+#define ISNANF(f) isnanf(f)
+#define ISNAND(d) isnan(d)
+#else
+#error "missing platform-specific definition here"
+#endif
+
+#endif /* JDK_UTIL_MD_H */
--- a/jdk/src/solaris/native/common/jni_util_md.c	Tue Apr 02 14:13:13 2013 -0400
+++ b/jdk/src/solaris/native/common/jni_util_md.c	Tue Apr 02 15:31:24 2013 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2008, 2009, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2008, 2013, 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
@@ -25,6 +25,7 @@
 
 #include "jni.h"
 #include "jni_util.h"
+#include "dlfcn.h"
 
 jstring nativeNewStringPlatform(JNIEnv *env, const char *str) {
     return NULL;
@@ -33,3 +34,22 @@
 char* nativeGetStringPlatformChars(JNIEnv *env, jstring jstr, jboolean *isCopy) {
     return NULL;
 }
+
+void* getProcessHandle() {
+    static void *procHandle = NULL;
+    if (procHandle != NULL) {
+        return procHandle;
+    }
+    procHandle = (void*)dlopen(NULL, RTLD_LAZY);
+    return procHandle;
+}
+
+void buildJniFunctionName(const char *sym, const char *cname,
+                          char *jniEntryName) {
+    strcpy(jniEntryName, sym);
+    if (cname != NULL) {
+        strcat(jniEntryName, "_");
+        strcat(jniEntryName, cname);
+    }
+}
+
--- a/jdk/src/solaris/native/java/io/FileDescriptor_md.c	Tue Apr 02 14:13:13 2013 -0400
+++ b/jdk/src/solaris/native/java/io/FileDescriptor_md.c	Tue Apr 02 15:31:24 2013 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1997, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2013, 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
@@ -23,9 +23,8 @@
  * questions.
  */
 
-#include "jni.h"
-#include "jni_util.h"
 #include "jvm.h"
+#include "io_util_md.h"
 
 #include "java_io_FileDescriptor.h"
 
@@ -51,8 +50,8 @@
 
 JNIEXPORT void JNICALL
 Java_java_io_FileDescriptor_sync(JNIEnv *env, jobject this) {
-    int fd = (*env)->GetIntField(env, this, IO_fd_fdID);
-    if (JVM_Sync(fd) == -1) {
+    FD fd = THIS_FD(this);
+    if (IO_Sync(fd) == -1) {
         JNU_ThrowByName(env, "java/io/SyncFailedException", "sync failed");
     }
 }
--- a/jdk/src/solaris/native/java/io/UnixFileSystem_md.c	Tue Apr 02 14:13:13 2013 -0400
+++ b/jdk/src/solaris/native/java/io/UnixFileSystem_md.c	Tue Apr 02 15:31:24 2013 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1998, 2012, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1998, 2013, 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
@@ -77,7 +77,7 @@
 
     WITH_PLATFORM_STRING(env, pathname, path) {
         char canonicalPath[JVM_MAXPATHLEN];
-        if (canonicalize(JVM_NativePath((char *)path),
+        if (canonicalize((char *)path,
                          canonicalPath, JVM_MAXPATHLEN) < 0) {
             JNU_ThrowIOExceptionWithLastError(env, "Bad pathname");
         } else {
@@ -241,19 +241,18 @@
     jboolean rv = JNI_FALSE;
 
     WITH_PLATFORM_STRING(env, pathname, path) {
-        int fd;
-        if (!strcmp (path, "/")) {
-            fd = JVM_EEXIST;    /* The root directory always exists */
-        } else {
-            fd = JVM_Open(path, JVM_O_RDWR | JVM_O_CREAT | JVM_O_EXCL, 0666);
-        }
-        if (fd < 0) {
-            if (fd != JVM_EEXIST) {
-                JNU_ThrowIOExceptionWithLastError(env, path);
+        FD fd;
+        /* The root directory always exists */
+        if (strcmp (path, "/")) {
+            fd = handleOpen(path, O_RDWR | O_CREAT | O_EXCL, 0666);
+            if (fd < 0) {
+                if (errno != EEXIST)
+                    JNU_ThrowIOExceptionWithLastError(env, path);
+            } else {
+                if (close(fd) == -1)
+                    JNU_ThrowIOExceptionWithLastError(env, path);
+                rv = JNI_TRUE;
             }
-        } else {
-            JVM_Close(fd);
-            rv = JNI_TRUE;
         }
     } END_PLATFORM_STRING(env, path);
     return rv;
--- a/jdk/src/solaris/native/java/io/io_util_md.c	Tue Apr 02 14:13:13 2013 -0400
+++ b/jdk/src/solaris/native/java/io/io_util_md.c	Tue Apr 02 15:31:24 2013 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2001, 2012, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2001, 2013, 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
@@ -29,6 +29,15 @@
 #include "io_util.h"
 #include "io_util_md.h"
 #include <string.h>
+#include <unistd.h>
+
+#ifdef __solaris__
+#include <sys/filio.h>
+#endif
+
+#if defined(__linux__) || defined(_ALLBSD_SOURCE)
+#include <sys/ioctl.h>
+#endif
 
 #ifdef MACOSX
 
@@ -62,6 +71,28 @@
 }
 #endif
 
+FD
+handleOpen(const char *path, int oflag, int mode) {
+    FD fd;
+    RESTARTABLE(open64(path, oflag, mode), fd);
+    if (fd != -1) {
+        struct stat64 buf64;
+        int result;
+        RESTARTABLE(fstat64(fd, &buf64), result);
+        if (result != -1) {
+            if (S_ISDIR(buf64.st_mode)) {
+                close(fd);
+                errno = EISDIR;
+                fd = -1;
+            }
+        } else {
+            close(fd);
+            fd = -1;
+        }
+    }
+    return fd;
+}
+
 void
 fileOpen(JNIEnv *env, jobject this, jstring path, jfieldID fid, int flags)
 {
@@ -74,8 +105,8 @@
         while ((p > ps) && (*p == '/'))
             *p-- = '\0';
 #endif
-        fd = JVM_Open(ps, flags, 0666);
-        if (fd >= 0) {
+        fd = handleOpen(ps, flags, 0666);
+        if (fd != -1) {
             SET_FD(this, fd, fid);
         } else {
             throwFileNotFoundException(env, path);
@@ -83,7 +114,6 @@
     } END_PLATFORM_STRING(env, ps);
 }
 
-
 void
 fileClose(JNIEnv *env, jobject this, jfieldID fid)
 {
@@ -114,7 +144,89 @@
             dup2(devnull, fd);
             close(devnull);
         }
-    } else if (JVM_Close(fd) == -1) {
+    } else if (close(fd) == -1) {
         JNU_ThrowIOExceptionWithLastError(env, "close failed");
     }
 }
+
+ssize_t
+handleRead(FD fd, void *buf, jint len)
+{
+    ssize_t result;
+    RESTARTABLE(read(fd, buf, len), result);
+    return result;
+}
+
+ssize_t
+handleWrite(FD fd, const void *buf, jint len)
+{
+    ssize_t result;
+    RESTARTABLE(write(fd, buf, len), result);
+    return result;
+}
+
+jint
+handleAvailable(FD fd, jlong *pbytes)
+{
+    int mode;
+    struct stat64 buf64;
+    jlong size = -1, current = -1;
+
+    int result;
+    RESTARTABLE(fstat64(fd, &buf64), result);
+    if (result != -1) {
+        mode = buf64.st_mode;
+        if (S_ISCHR(mode) || S_ISFIFO(mode) || S_ISSOCK(mode)) {
+            int n;
+            int result;
+            RESTARTABLE(ioctl(fd, FIONREAD, &n), result);
+            if (result >= 0) {
+                *pbytes = n;
+                return 1;
+            }
+        } else if (S_ISREG(mode)) {
+            size = buf64.st_size;
+        }
+    }
+
+    if ((current = lseek64(fd, 0, SEEK_CUR)) == -1) {
+        return 0;
+    }
+
+    if (size < current) {
+        if ((size = lseek64(fd, 0, SEEK_END)) == -1)
+            return 0;
+        else if (lseek64(fd, current, SEEK_SET) == -1)
+            return 0;
+    }
+
+    if (size >= current) {
+        *pbytes = size - current;
+        return 1;
+    } else {
+        return 0;
+    }
+}
+
+jint
+handleSetLength(FD fd, jlong length)
+{
+    int result;
+    RESTARTABLE(ftruncate64(fd, length), result);
+    return result;
+}
+
+size_t
+getLastErrorString(char *buf, size_t len)
+{
+    if (errno == 0 || len < 1) return 0;
+
+    const char *err = strerror(errno);
+    size_t n = strlen(err);
+    if (n >= len)
+        n = len - 1;
+
+    strncpy(buf, err, n);
+    buf[n] = '\0';
+    return n;
+}
--- a/jdk/src/solaris/native/java/io/io_util_md.h	Tue Apr 02 14:13:13 2013 -0400
+++ b/jdk/src/solaris/native/java/io/io_util_md.h	Tue Apr 02 15:31:24 2013 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2003, 2012, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2003, 2013, 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
@@ -23,7 +23,6 @@
  * questions.
  */
 
-#include "jni.h"
 #include "jni_util.h"
 
 /*
@@ -32,6 +31,18 @@
 #define FD jint
 
 /*
+ * Prototypes for functions in io_util_md.c called from io_util.c,
+ * FileDescriptor.c, FileInputStream.c, FileOutputStream.c,
+ * UnixFileSystem_md.c
+ */
+ssize_t handleWrite(FD fd, const void *buf, jint len);
+ssize_t handleRead(FD fd, void *buf, jint len);
+jint handleAvailable(FD fd, jlong *pbytes);
+jint handleSetLength(FD fd, jlong length);
+
+FD handleOpen(const char *path, int oflag, int mode);
+
+/*
  * Macros to set/get fd from the java.io.FileDescriptor.  These
  * macros rely on having an appropriately defined 'this' object
  * within the scope in which they're used.
@@ -53,15 +64,25 @@
 #define THIS_FD(obj) (*env)->GetIntField(env, obj, IO_fd_fdID)
 
 /*
- * Route the routines through VM
+ * Route the routines
  */
-#define IO_Append JVM_Write
-#define IO_Write JVM_Write
-#define IO_Sync JVM_Sync
-#define IO_Read JVM_Read
-#define IO_Lseek JVM_Lseek
-#define IO_Available JVM_Available
-#define IO_SetLength JVM_SetLength
+#define IO_Sync fsync
+#define IO_Read handleRead
+#define IO_Write handleWrite
+#define IO_Append handleWrite
+#define IO_Available handleAvailable
+#define IO_SetLength handleSetLength
+
+#ifdef _ALLBSD_SOURCE
+#define open64 open
+#define fstat64 fstat
+#define stat64 stat
+#define lseek64 lseek
+#define ftruncate64 ftruncate
+#define IO_Lseek lseek
+#else
+#define IO_Lseek lseek64
+#endif
 
 /*
  * On Solaris, the handle field is unused
@@ -69,6 +90,15 @@
 #define SET_HANDLE(fd) return (jlong)-1
 
 /*
+ * Retry the operation if it is interrupted
+ */
+#define RESTARTABLE(_cmd, _result) do { \
+    do { \
+        _result = _cmd; \
+    } while((_result == -1) && (errno == EINTR)); \
+} while(0)
+
+/*
  * IO helper function(s)
  */
 void fileClose(JNIEnv *env, jobject this, jfieldID fid);
--- a/jdk/src/solaris/native/sun/awt/gtk2_interface.c	Tue Apr 02 14:13:13 2013 -0400
+++ b/jdk/src/solaris/native/sun/awt/gtk2_interface.c	Tue Apr 02 15:31:24 2013 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2005, 2011, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2005, 2013, 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
@@ -438,6 +438,39 @@
 }
 
 /**
+ * Functions for awt_Desktop.c
+ */
+gboolean gtk2_show_uri_load() {
+     gboolean success = FALSE;
+     dlerror();
+     const char *gtk_version = fp_gtk_check_version(2, 14, 0);
+     if (gtk_version != NULL) {
+         // The gtk_show_uri is available from GTK+ 2.14
+#ifdef INTERNAL_BUILD
+         fprintf (stderr, "The version of GTK is %s. "
+             "The gtk_show_uri function is supported "
+             "since GTK+ 2.14.\n", gtk_version);
+#endif /* INTERNAL_BUILD */
+     } else {
+         // Loading symbols only if the GTK version is 2.14 and higher
+         fp_gtk_show_uri = dl_symbol("gtk_show_uri");
+         const char *dlsym_error = dlerror();
+         if (dlsym_error) {
+#ifdef INTERNAL_BUILD
+             fprintf (stderr, "Cannot load symbol: %s \n", dlsym_error);
+#endif /* INTERNAL_BUILD */
+         } else if (fp_gtk_show_uri == NULL) {
+#ifdef INTERNAL_BUILD
+             fprintf(stderr, "dlsym(gtk_show_uri) returned NULL\n");
+#endif /* INTERNAL_BUILD */
+         } else {
+             success = TRUE;
+         }
+     }
+     return success;
+}
+
+/**
  * Functions for sun_awt_X11_GtkFileDialogPeer.c
  */
 void gtk2_file_chooser_load()
--- a/jdk/src/solaris/native/sun/awt/gtk2_interface.h	Tue Apr 02 14:13:13 2013 -0400
+++ b/jdk/src/solaris/native/sun/awt/gtk2_interface.h	Tue Apr 02 15:31:24 2013 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2005, 2011, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2005, 2013, 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
@@ -42,6 +42,7 @@
 #define GTK_STOCK_CANCEL           "gtk-cancel"
 #define GTK_STOCK_SAVE             "gtk-save"
 #define GTK_STOCK_OPEN             "gtk-open"
+#define GDK_CURRENT_TIME           0L
 
 typedef enum _WidgetType
 {
@@ -280,6 +281,7 @@
 typedef void GdkColormap;
 typedef void GdkDrawable;
 typedef void GdkGC;
+typedef void GdkScreen;
 typedef void GdkPixbuf;
 typedef void GdkPixmap;
 typedef void GdkWindow;
@@ -664,6 +666,15 @@
 gboolean gtk2_load();
 
 /*
+ * Loads fp_gtk_show_uri function pointer. This initialization is
+ * separated because the function is required only
+ * for java.awt.Desktop API. The function relies on initialization in
+ * gtk2_load, so it must be invoked only after a successful gtk2_load
+ * invocation
+ */
+gboolean gtk2_show_uri_load();
+
+/*
  * Unload the gtk2 library.  If the library is already unloaded this method has
  * no effect and returns success.
  * Returns FALSE on failure and TRUE on success.
@@ -795,4 +806,7 @@
 void (*fp_gdk_threads_enter)(void);
 void (*fp_gdk_threads_leave)(void);
 
+gboolean (*fp_gtk_show_uri)(GdkScreen *screen, const gchar *uri,
+    guint32 timestamp, GError **error);
+
 #endif /* !_GTK2_INTERFACE_H */
--- a/jdk/src/solaris/native/sun/security/smartcardio/pcsc_md.c	Tue Apr 02 14:13:13 2013 -0400
+++ b/jdk/src/solaris/native/sun/security/smartcardio/pcsc_md.c	Tue Apr 02 15:31:24 2013 -0700
@@ -32,8 +32,6 @@
 
 #include <winscard.h>
 
-#include <jni_util.h>
-
 #include "sun_security_smartcardio_PlatformPCSC.h"
 
 #include "pcsc_md.h"
@@ -77,7 +75,6 @@
     throwByName(env, "java/io/IOException", msg);
 }
 
-
 void *findFunction(JNIEnv *env, void *hModule, char *functionName) {
     void *fAddress = dlsym(hModule, functionName);
     if (fAddress == NULL) {
--- a/jdk/src/solaris/native/sun/xawt/awt_Desktop.c	Tue Apr 02 14:13:13 2013 -0400
+++ b/jdk/src/solaris/native/sun/xawt/awt_Desktop.c	Tue Apr 02 15:31:24 2013 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2005, 2011, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2005, 2013, 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
@@ -23,71 +23,11 @@
  * questions.
  */
 
-#include <jni.h>
-#include <jvm_md.h>
-#include <dlfcn.h>
-
-typedef int gboolean;
-
-typedef gboolean (GNOME_URL_SHOW_TYPE)(const char *, void **);
-typedef gboolean (GNOME_VFS_INIT_TYPE)(void);
-
-GNOME_URL_SHOW_TYPE *gnome_url_show;
-GNOME_VFS_INIT_TYPE *gnome_vfs_init;
-
-int init(){
-    void *vfs_handle;
-    void *gnome_handle;
-    const char *errmsg;
+#include "gtk2_interface.h"
+#include "gnome_interface.h"
 
-    vfs_handle = dlopen(VERSIONED_JNI_LIB_NAME("gnomevfs-2", "0"), RTLD_LAZY);
-    if (vfs_handle == NULL) {
-        vfs_handle = dlopen(JNI_LIB_NAME("gnomevfs-2"), RTLD_LAZY);
-        if (vfs_handle == NULL) {
-#ifdef INTERNAL_BUILD
-            fprintf(stderr, "can not load libgnomevfs-2.so\n");
-#endif
-            return 0;
-        }
-    }
-    dlerror(); /* Clear errors */
-    gnome_vfs_init = (GNOME_VFS_INIT_TYPE*)dlsym(vfs_handle, "gnome_vfs_init");
-    if (gnome_vfs_init == NULL){
-#ifdef INTERNAL_BUILD
-        fprintf(stderr, "dlsym( gnome_vfs_init) returned NULL\n");
-#endif
-        return 0;
-    }
-    if ((errmsg = dlerror()) != NULL) {
-#ifdef INTERNAL_BUILD
-        fprintf(stderr, "can not find symbol gnome_vfs_init %s \n", errmsg);
-#endif
-        return 0;
-    }
-    // call gonme_vfs_init()
-    (*gnome_vfs_init)();
-
-    gnome_handle = dlopen(VERSIONED_JNI_LIB_NAME("gnome-2", "0"), RTLD_LAZY);
-    if (gnome_handle == NULL) {
-        gnome_handle = dlopen(JNI_LIB_NAME("gnome-2"), RTLD_LAZY);
-        if (gnome_handle == NULL) {
-#ifdef INTERNAL_BUILD
-            fprintf(stderr, "can not load libgnome-2.so\n");
-#endif
-            return 0;
-        }
-    }
-    dlerror(); /* Clear errors */
-    gnome_url_show = (GNOME_URL_SHOW_TYPE*)dlsym(gnome_handle, "gnome_url_show");
-    if ((errmsg = dlerror()) != NULL) {
-#ifdef INTERNAL_BUILD
-        fprintf(stderr, "can not find symble gnome_url_show\n");
-#endif
-        return 0;
-    }
-
-    return 1;
-}
+static gboolean gtk_has_been_loaded = FALSE;
+static gboolean gnome_has_been_loaded = FALSE;
 
 /*
  * Class:     sun_awt_X11_XDesktopPeer
@@ -97,8 +37,20 @@
 JNIEXPORT jboolean JNICALL Java_sun_awt_X11_XDesktopPeer_init
   (JNIEnv *env, jclass cls)
 {
-    int init_ok = init();
-    return init_ok ? JNI_TRUE : JNI_FALSE;
+
+    if (gtk_has_been_loaded || gnome_has_been_loaded) {
+        return JNI_TRUE;
+    }
+
+    if (gtk2_load() && gtk2_show_uri_load()) {
+        gtk_has_been_loaded = TRUE;
+        return JNI_TRUE;
+    } else if (gnome_load()) {
+        gnome_has_been_loaded = TRUE;
+        return JNI_TRUE;
+    }
+
+    return JNI_FALSE;
 }
 
 /*
@@ -109,16 +61,19 @@
 JNIEXPORT jboolean JNICALL Java_sun_awt_X11_XDesktopPeer_gnome_1url_1show
   (JNIEnv *env, jobject obj, jbyteArray url_j)
 {
-    gboolean success;
-    const char* url_c;
+    gboolean success = FALSE;
+    const gchar* url_c;
+
+    url_c = (char*)(*env)->GetByteArrayElements(env, url_j, NULL);
 
-    if (gnome_url_show == NULL) {
-        return JNI_FALSE;
+    if (gtk_has_been_loaded) {
+        fp_gdk_threads_enter();
+        success = fp_gtk_show_uri(NULL, url_c, GDK_CURRENT_TIME, NULL);
+        fp_gdk_threads_leave();
+    } else if (gnome_has_been_loaded) {
+        success = (*gnome_url_show)(url_c, NULL);
     }
 
-    url_c = (char*)(*env)->GetByteArrayElements(env, url_j, NULL);
-    // call gnome_url_show(const char* , GError**)
-    success = (*gnome_url_show)(url_c, NULL);
     (*env)->ReleaseByteArrayElements(env, url_j, (signed char*)url_c, 0);
 
     return success ? JNI_TRUE : JNI_FALSE;
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/src/solaris/native/sun/xawt/gnome_interface.c	Tue Apr 02 15:31:24 2013 -0700
@@ -0,0 +1,87 @@
+/*
+ * Copyright (c) 2013, 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.
+ */
+
+#include "gnome_interface.h"
+
+GNOME_URL_SHOW_TYPE *gnome_url_show = NULL;
+
+gboolean gnome_load() {
+     void *vfs_handle;
+     void *gnome_handle;
+     const char *errmsg;
+     GNOME_VFS_INIT_TYPE *gnome_vfs_init;
+
+     // trying to open the gnomevfs. VERSIONED_JNI_LIB_NAME
+     // macros formats the library name in a system specific manner
+     // see jdk/src/solaris/javavm/export/jvm_md.h for more details
+     vfs_handle = dlopen(VERSIONED_JNI_LIB_NAME("gnomevfs-2", "0"), RTLD_LAZY);
+     if (vfs_handle == NULL) {
+         // if we cannot load the library using a version assumed by JNI
+         // we are trying to load the library without a version suffix
+         vfs_handle = dlopen(JNI_LIB_NAME("gnomevfs-2"), RTLD_LAZY);
+         if (vfs_handle == NULL) {
+ #ifdef INTERNAL_BUILD
+             fprintf(stderr, "can not load libgnomevfs-2.so\n");
+ #endif
+             return FALSE;
+         }
+     }
+     dlerror(); /* Clear errors */
+     gnome_vfs_init = (GNOME_VFS_INIT_TYPE*)dlsym(vfs_handle, "gnome_vfs_init");
+     if (gnome_vfs_init == NULL){
+ #ifdef INTERNAL_BUILD
+         fprintf(stderr, "dlsym( gnome_vfs_init) returned NULL\n");
+ #endif
+         return FALSE;
+     }
+     if ((errmsg = dlerror()) != NULL) {
+ #ifdef INTERNAL_BUILD
+         fprintf(stderr, "can not find symbol gnome_vfs_init %s \n", errmsg);
+ #endif
+         return FALSE;
+     }
+     // call gonme_vfs_init()
+     (*gnome_vfs_init)();
+
+     gnome_handle = dlopen(VERSIONED_JNI_LIB_NAME("gnome-2", "0"), RTLD_LAZY);
+     if (gnome_handle == NULL) {
+         gnome_handle = dlopen(JNI_LIB_NAME("gnome-2"), RTLD_LAZY);
+         if (gnome_handle == NULL) {
+ #ifdef INTERNAL_BUILD
+             fprintf(stderr, "can not load libgnome-2.so\n");
+ #endif
+             return FALSE;
+         }
+     }
+     dlerror(); /* Clear errors */
+     gnome_url_show = (GNOME_URL_SHOW_TYPE*)dlsym(gnome_handle, "gnome_url_show");
+     if ((errmsg = dlerror()) != NULL) {
+ #ifdef INTERNAL_BUILD
+         fprintf(stderr, "can not find symble gnome_url_show\n");
+ #endif
+         return FALSE;
+     }
+     return TRUE;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/src/solaris/native/sun/xawt/gnome_interface.h	Tue Apr 02 15:31:24 2013 -0700
@@ -0,0 +1,39 @@
+/*
+ * Copyright (c) 2013, 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.
+ */
+
+#ifndef _GNOME_INTERFACE_H
+#define _GNOME_INTERFACE_H
+#include "gtk2_interface.h"
+#include <dlfcn.h>
+#include <jvm_md.h>
+#include <jni.h>
+
+typedef gboolean (GNOME_URL_SHOW_TYPE)(const char *, void **);
+typedef gboolean (GNOME_VFS_INIT_TYPE)(void);
+
+extern GNOME_URL_SHOW_TYPE *gnome_url_show;
+gboolean gnome_load();
+
+#endif /* !_GNOME_INTERFACE_H */
--- a/jdk/src/windows/classes/java/lang/ProcessImpl.java	Tue Apr 02 14:13:13 2013 -0400
+++ b/jdk/src/windows/classes/java/lang/ProcessImpl.java	Tue Apr 02 15:31:24 2013 -0700
@@ -234,7 +234,7 @@
         return stderr_stream;
     }
 
-    public void finalize() {
+    protected void finalize() {
         closeHandle(handle);
     }
 
--- a/jdk/src/windows/classes/sun/awt/windows/WDesktopPeer.java	Tue Apr 02 14:13:13 2013 -0400
+++ b/jdk/src/windows/classes/sun/awt/windows/WDesktopPeer.java	Tue Apr 02 15:31:24 2013 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2005, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2005, 2013, 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
@@ -51,15 +51,15 @@
     }
 
     public void open(File file) throws IOException {
-        this.ShellExecute(file.toURI(), ACTION_OPEN_VERB);
+        this.ShellExecute(file, ACTION_OPEN_VERB);
     }
 
     public void edit(File file) throws IOException {
-        this.ShellExecute(file.toURI(), ACTION_EDIT_VERB);
+        this.ShellExecute(file, ACTION_EDIT_VERB);
     }
 
     public void print(File file) throws IOException {
-        this.ShellExecute(file.toURI(), ACTION_PRINT_VERB);
+        this.ShellExecute(file, ACTION_PRINT_VERB);
     }
 
     public void mail(URI uri) throws IOException {
@@ -70,6 +70,13 @@
         this.ShellExecute(uri, ACTION_OPEN_VERB);
     }
 
+    private void ShellExecute(File file, String verb) throws IOException {
+        String errMsg = ShellExecute(file.getAbsolutePath(), verb);
+        if (errMsg != null) {
+            throw new IOException("Failed to " + verb + " " + file + ". Error message: " + errMsg);
+        }
+    }
+
     private void ShellExecute(URI uri, String verb) throws IOException {
         String errmsg = ShellExecute(uri.toString(), verb);
 
@@ -79,6 +86,6 @@
         }
     }
 
-    private static native String ShellExecute(String uri, String verb);
+    private static native String ShellExecute(String fileOrUri, String verb);
 
 }
--- a/jdk/src/windows/classes/sun/net/www/protocol/jar/JarFileFactory.java	Tue Apr 02 14:13:13 2013 -0400
+++ b/jdk/src/windows/classes/sun/net/www/protocol/jar/JarFileFactory.java	Tue Apr 02 15:31:24 2013 -0700
@@ -43,13 +43,24 @@
 class JarFileFactory implements URLJarFile.URLJarFileCloseController {
 
     /* the url to file cache */
-    private static HashMap<String, JarFile> fileCache = new HashMap<String, JarFile>();
+    private static final HashMap<String, JarFile> fileCache = new HashMap<>();
 
     /* the file to url cache */
-    private static HashMap<JarFile, URL> urlCache = new HashMap<JarFile, URL>();
+    private static final HashMap<JarFile, URL> urlCache = new HashMap<>();
+
+    private static final JarFileFactory instance = new JarFileFactory();
+
+    private JarFileFactory() { }
+
+    public static JarFileFactory getInstance() {
+        return instance;
+    }
 
     URLConnection getConnection(JarFile jarFile) throws IOException {
-        URL u = urlCache.get(jarFile);
+        URL u;
+        synchronized (instance) {
+            u = urlCache.get(jarFile);
+        }
         if (u != null)
             return u.openConnection();
 
@@ -72,16 +83,16 @@
             }
         }
 
-        JarFile result = null;
-        JarFile local_result = null;
+        JarFile result;
+        JarFile local_result;
 
         if (useCaches) {
-            synchronized (this) {
+            synchronized (instance) {
                 result = getCachedJarFile(url);
             }
             if (result == null) {
                 local_result = URLJarFile.getJarFile(url, this);
-                synchronized (this) {
+                synchronized (instance) {
                     result = getCachedJarFile(url);
                     if (result == null) {
                         fileCache.put(URLUtil.urlNoFragString(url), local_result);
@@ -109,13 +120,15 @@
      * remove the JarFile from the cache
      */
     public void close(JarFile jarFile) {
-        URL urlRemoved = urlCache.remove(jarFile);
-        if( urlRemoved != null) {
+        synchronized (instance) {
+            URL urlRemoved = urlCache.remove(jarFile);
+            if (urlRemoved != null)
                 fileCache.remove(URLUtil.urlNoFragString(urlRemoved));
         }
     }
 
     private JarFile getCachedJarFile(URL url) {
+        assert Thread.holdsLock(instance);
         JarFile result = fileCache.get(URLUtil.urlNoFragString(url));
 
         /* if the JAR file is cached, the permission will always be there */
--- a/jdk/src/windows/classes/sun/nio/fs/WindowsConstants.java	Tue Apr 02 14:13:13 2013 -0400
+++ b/jdk/src/windows/classes/sun/nio/fs/WindowsConstants.java	Tue Apr 02 15:31:24 2013 -0700
@@ -181,6 +181,11 @@
     public static final int FILE_READ_ATTRIBUTES        = 0x0080;
     public static final int FILE_WRITE_ATTRIBUTES       = 0x0100;
 
+    public static final int FILE_GENERIC_READ           = 0x00120089;
+    public static final int FILE_GENERIC_WRITE          = 0x00120116;
+    public static final int FILE_GENERIC_EXECUTE        = 0x001200a0;
+    public static final int FILE_ALL_ACCESS             = 0x001f01ff;
+
     // operating system security
     public static final int TOKEN_DUPLICATE             = 0x0002;
     public static final int TOKEN_IMPERSONATE           = 0x0004;
--- a/jdk/src/windows/classes/sun/nio/fs/WindowsFileSystemProvider.java	Tue Apr 02 14:13:13 2013 -0400
+++ b/jdk/src/windows/classes/sun/nio/fs/WindowsFileSystemProvider.java	Tue Apr 02 15:31:24 2013 -0700
@@ -38,6 +38,7 @@
 import sun.security.util.SecurityConstants;
 
 import static sun.nio.fs.WindowsNativeDispatcher.*;
+import static sun.nio.fs.WindowsSecurity.*;
 import static sun.nio.fs.WindowsConstants.*;
 
 public class WindowsFileSystemProvider
@@ -289,67 +290,29 @@
     }
 
     /**
-     * Returns buffer with SID_AND_ATTRIBUTES structure representing the user
-     * associated with the current thread access token.
-     * FIXME - this should be cached.
+     * Checks the file security against desired access.
      */
-    private static NativeBuffer getUserInfo(WindowsPath file) throws IOException {
-        try {
-            long hToken = WindowsSecurity.processTokenWithQueryAccess;
-            int size = GetTokenInformation(hToken, TokenUser, 0L, 0);
-            assert size > 0;
-
-            NativeBuffer buffer = NativeBuffers.getNativeBuffer(size);
-            try {
-                int newsize = GetTokenInformation(hToken, TokenUser,
-                                                  buffer.address(), size);
-                if (newsize != size)
-                    throw new AssertionError();
-                return buffer;
-            } catch (WindowsException x) {
-                buffer.release();
-                throw x;
-            }
-        } catch (WindowsException x) {
-            throw new IOException(x.getMessage());
-        }
-    }
-
-    /**
-     * Reads the file ACL and return the effective access as ACCESS_MASK
-     */
-    private static int getEffectiveAccess(WindowsPath file) throws IOException {
-        // read security descriptor continaing ACL (symlinks are followed)
+    private static boolean hasDesiredAccess(WindowsPath file, int rights) throws IOException {
+        // read security descriptor containing ACL (symlinks are followed)
+        boolean hasRights = false;
         String target = WindowsLinkSupport.getFinalPath(file, true);
         NativeBuffer aclBuffer = WindowsAclFileAttributeView
-            .getFileSecurity(target, DACL_SECURITY_INFORMATION);
-
-        // retrieves DACL from security descriptor
-        long pAcl = GetSecurityDescriptorDacl(aclBuffer.address());
-
-        // Use GetEffectiveRightsFromAcl to get effective access to file
+            .getFileSecurity(target,
+                DACL_SECURITY_INFORMATION
+                | OWNER_SECURITY_INFORMATION
+                | GROUP_SECURITY_INFORMATION);
         try {
-            NativeBuffer userBuffer = getUserInfo(file);
-            try {
-                try {
-                    // SID_AND_ATTRIBUTES->pSid
-                    long pSid = unsafe.getAddress(userBuffer.address());
-                    long pTrustee = BuildTrusteeWithSid(pSid);
-                    try {
-                        return GetEffectiveRightsFromAcl(pAcl, pTrustee);
-                    } finally {
-                        LocalFree(pTrustee);
-                    }
-                } catch (WindowsException x) {
-                    throw new IOException("Unable to get effective rights from ACL: " +
-                        x.getMessage());
-                }
-            } finally {
-                userBuffer.release();
-            }
+            hasRights = checkAccessMask(aclBuffer.address(), rights,
+                FILE_GENERIC_READ,
+                FILE_GENERIC_WRITE,
+                FILE_GENERIC_EXECUTE,
+                FILE_ALL_ACCESS);
+        } catch (WindowsException exc) {
+            exc.rethrowAsIOException(file);
         } finally {
             aclBuffer.release();
         }
+        return hasRights;
     }
 
     /**
@@ -416,10 +379,10 @@
             mask |= FILE_EXECUTE;
         }
 
-        if ((getEffectiveAccess(file) & mask) == 0)
+        if (!hasDesiredAccess(file, mask))
             throw new AccessDeniedException(
                 file.getPathForExceptionMessage(), null,
-                "Effective permissions does not allow requested access");
+                "Permissions does not allow requested access");
 
         // for write access we neeed to check if the DOS readonly attribute
         // and if the volume is read-only
@@ -438,7 +401,6 @@
                 throw new AccessDeniedException(
                     file.getPathForExceptionMessage(), null, "Read-only file system");
             }
-            return;
         }
     }
 
--- a/jdk/src/windows/classes/sun/nio/fs/WindowsNativeDispatcher.java	Tue Apr 02 14:13:13 2013 -0400
+++ b/jdk/src/windows/classes/sun/nio/fs/WindowsNativeDispatcher.java	Tue Apr 02 15:31:24 2013 -0700
@@ -844,6 +844,23 @@
     static native void AdjustTokenPrivileges(long token, long luid, int attributes)
         throws WindowsException;
 
+
+    /**
+     * AccessCheck(
+     *   PSECURITY_DESCRIPTOR pSecurityDescriptor,
+     *   HANDLE ClientToken,
+     *   DWORD DesiredAccess,
+     *   PGENERIC_MAPPING GenericMapping,
+     *   PPRIVILEGE_SET PrivilegeSet,
+     *   LPDWORD PrivilegeSetLength,
+     *   LPDWORD GrantedAccess,
+     *   LPBOOL AccessStatus
+     * )
+     */
+    static native boolean AccessCheck(long token, long securityInfo, int accessMask,
+        int genericRead, int genericWrite, int genericExecute, int genericAll)
+        throws WindowsException;
+
     /**
      */
     static long LookupPrivilegeValue(String name) throws WindowsException {
@@ -858,28 +875,6 @@
         throws WindowsException;
 
     /**
-     * BuildTrusteeWithSid(
-     *   PTRUSTEE pTrustee,
-     *   PSID pSid
-     * )
-     *
-     * @return  pTrustee
-     */
-    static native long BuildTrusteeWithSid(long pSid);
-
-    /**
-     * GetEffectiveRightsFromAcl(
-     *   PACL pacl,
-     *   PTRUSTEE pTrustee,
-     *   PACCESS_MASK pAccessRights
-     * )
-     *
-     * @return  AccessRights
-     */
-    static native int GetEffectiveRightsFromAcl(long pAcl, long pTrustee)
-        throws WindowsException;
-
-    /**
      * CreateSymbolicLink(
      *   LPCWSTR lpSymlinkFileName,
      *   LPCWSTR lpTargetFileName,
--- a/jdk/src/windows/classes/sun/nio/fs/WindowsSecurity.java	Tue Apr 02 14:13:13 2013 -0400
+++ b/jdk/src/windows/classes/sun/nio/fs/WindowsSecurity.java	Tue Apr 02 15:31:24 2013 -0700
@@ -105,19 +105,46 @@
         return new Privilege() {
             @Override
             public void drop() {
-                try {
-                    if (stopImpersontating) {
-                        SetThreadToken(0L, 0L);
-                    } else {
-                        if (needToRevert) {
+                if (token != 0L) {
+                    try {
+                        if (stopImpersontating)
+                            SetThreadToken(0L, 0L);
+                        else if (needToRevert)
                             AdjustTokenPrivileges(token, pLuid, 0);
-                        }
+                    } catch (WindowsException x) {
+                        // should not happen
+                        throw new AssertionError(x);
+                    } finally {
+                        CloseHandle(token);
                     }
-                } catch (WindowsException x) {
-                    // should not happen
-                    throw new AssertionError(x);
                 }
             }
         };
     }
+
+    /**
+     * Check the access right against the securityInfo in the current thread.
+     */
+    static boolean checkAccessMask(long securityInfo, int accessMask,
+        int genericRead, int genericWrite, int genericExecute, int genericAll)
+        throws WindowsException
+    {
+        int privilegies = TOKEN_QUERY;
+        long hToken = OpenThreadToken(GetCurrentThread(), privilegies, false);
+        if (hToken == 0L && processTokenWithDuplicateAccess != 0L)
+            hToken = DuplicateTokenEx(processTokenWithDuplicateAccess,
+                privilegies);
+
+        boolean hasRight = false;
+        if (hToken != 0L) {
+            try {
+                hasRight = AccessCheck(hToken, securityInfo, accessMask,
+                    genericRead, genericWrite, genericExecute, genericAll);
+            } finally {
+                CloseHandle(hToken);
+            }
+        }
+        return hasRight;
+    }
+
 }
--- a/jdk/src/windows/classes/sun/util/locale/provider/HostLocaleProviderAdapterImpl.java	Tue Apr 02 14:13:13 2013 -0400
+++ b/jdk/src/windows/classes/sun/util/locale/provider/HostLocaleProviderAdapterImpl.java	Tue Apr 02 15:31:24 2013 -0700
@@ -35,17 +35,20 @@
 import java.text.spi.DateFormatSymbolsProvider;
 import java.text.spi.DecimalFormatSymbolsProvider;
 import java.text.spi.NumberFormatProvider;
+import java.util.Calendar;
 import java.util.Collections;
 import java.util.HashSet;
 import java.util.Locale;
 import java.util.Map;
 import java.util.ResourceBundle.Control;
 import java.util.Set;
+import java.util.TimeZone;
 import java.util.concurrent.ConcurrentHashMap;
 import java.util.concurrent.ConcurrentMap;
 import java.util.concurrent.atomic.AtomicReferenceArray;
 import java.util.spi.CalendarDataProvider;
 import java.util.spi.CalendarNameProvider;
+import sun.util.spi.CalendarProvider;
 
 /**
  * LocaleProviderdapter implementation for the Windows locale data.
@@ -98,9 +101,9 @@
         if (initialize()) {
             // Assuming the default locales do not include any extensions, so
             // no stripping is needed here.
-            Locale l = Locale.forLanguageTag(getDefaultLocale(CAT_FORMAT).replaceAll("_","-"));
+            Locale l = Locale.forLanguageTag(getDefaultLocale(CAT_FORMAT).replace('_', '-'));
             tmpSet.addAll(Control.getNoFallbackControl(Control.FORMAT_DEFAULT).getCandidateLocales("", l));
-            l = Locale.forLanguageTag(getDefaultLocale(CAT_DISPLAY).replaceAll("_","-"));
+            l = Locale.forLanguageTag(getDefaultLocale(CAT_DISPLAY).replace('_', '-'));
             tmpSet.addAll(Control.getNoFallbackControl(Control.FORMAT_DEFAULT).getCandidateLocales("", l));
         }
         supportedLocaleSet = Collections.unmodifiableSet(tmpSet);
@@ -173,24 +176,12 @@
 
             @Override
             public Locale[] getAvailableLocales() {
-                if (isSupportedLocale(Locale.getDefault(Locale.Category.FORMAT))) {
-                    return supportedLocale;
-                }
-
-                return new Locale[0];
+                return getSupportedCalendarLocales();
             }
 
             @Override
             public boolean isSupportedLocale(Locale locale) {
-                // Only supports the locale with Gregorian calendar
-                if (supportedLocale.length != 0) {
-                    int calid = getCalendarID(locale.toLanguageTag());
-                    if (calid > 0 && calid < calIDToLDML.length) {
-                        return calIDToLDML[calid].startsWith("gregory");
-                    }
-                }
-
-                return false;
+                return isSupportedCalendarLocale(locale);
             }
 
             @Override
@@ -380,6 +371,29 @@
         };
     }
 
+    public static CalendarProvider getCalendarProvider() {
+        return new CalendarProvider() {
+            @Override
+            public Locale[] getAvailableLocales() {
+                return getSupportedCalendarLocales();
+            }
+
+            @Override
+            public boolean isSupportedLocale(Locale locale) {
+                return isSupportedCalendarLocale(locale);
+            }
+
+            @Override
+            public Calendar getInstance(TimeZone zone, Locale locale) {
+                return new Calendar.Builder()
+                             .setLocale(getCalendarLocale(locale))
+                             .setTimeZone(zone)
+                             .setInstant(System.currentTimeMillis())
+                             .build();
+            }
+        };
+    }
+
     private static String convertDateTimePattern(String winPattern) {
         String ret = winPattern.replaceAll("dddd", "EEEE");
         ret = ret.replaceAll("ddd", "EEE");
@@ -401,24 +415,21 @@
     }
 
     private static boolean isSupportedCalendarLocale(Locale locale) {
-        // special case for ja_JP_JP
-        if (JRELocaleConstants.JA_JP_JP.equals(locale)) {
-            return isJapaneseCalendar();
-        }
-
         Locale base = locale.stripExtensions();
         if (!supportedLocaleSet.contains(base)) {
             return false;
         }
 
-        String caltype = locale.getUnicodeLocaleType("ca");
-        if (caltype == null) {
-            return true;
+        String requestedCalType = locale.getUnicodeLocaleType("ca");
+        String nativeCalType =
+                calIDToLDML[getCalendarID(locale.toLanguageTag())]
+                .replaceFirst("_.*", ""); // remove locale part.
+
+        if (requestedCalType == null) {
+            return Calendar.getAvailableCalendarTypes().contains(nativeCalType);
+        } else {
+            return requestedCalType.equals(nativeCalType);
         }
-
-        return caltype.equals(
-            calIDToLDML[getCalendarID(locale.toLanguageTag())]
-            .replaceFirst("_.*", ""));
     }
 
     private static Locale[] getSupportedNativeDigitLocales() {
--- a/jdk/src/windows/native/common/jdk_util_md.h	Tue Apr 02 14:13:13 2013 -0400
+++ b/jdk/src/windows/native/common/jdk_util_md.h	Tue Apr 02 15:31:24 2013 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2011, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2011, 2013, 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
@@ -28,6 +28,11 @@
 #define JDK_UTIL_MD_H
 
 #include "jni.h"
+#include <float.h>
+
+// checking for nanness
+#define ISNANF(f) _isnan(f)
+#define ISNAND(d) _isnan(d)
 
 #ifdef __cplusplus
 extern "C" {
--- a/jdk/src/windows/native/common/jni_util_md.c	Tue Apr 02 14:13:13 2013 -0400
+++ b/jdk/src/windows/native/common/jni_util_md.c	Tue Apr 02 15:31:24 2013 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2004, 2010, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2004, 2013, 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
@@ -137,3 +137,35 @@
     else
         return NULL;
 }
+
+void* getProcessHandle() {
+    return (void*)GetModuleHandle(NULL);
+}
+
+/*
+ * Windows symbols can be simple like JNI_OnLoad or __stdcall format
+ * like _JNI_OnLoad@8. We need to handle both.
+ */
+void buildJniFunctionName(const char *sym, const char *cname,
+                          char *jniEntryName) {
+    if (cname != NULL) {
+        char *p = strrchr(sym, '@');
+        if (p != NULL && p != sym) {
+            // sym == _JNI_OnLoad@8
+            strncpy(jniEntryName, sym, (p - sym));
+            jniEntryName[(p-sym)] = '\0';
+            // jniEntryName == _JNI_OnLoad
+            strcat(jniEntryName, "_");
+            strcat(jniEntryName, cname);
+            strcat(jniEntryName, p);
+            //jniEntryName == _JNI_OnLoad_cname@8
+        } else {
+            strcpy(jniEntryName, sym);
+            strcat(jniEntryName, "_");
+            strcat(jniEntryName, cname);
+        }
+    } else {
+        strcpy(jniEntryName, sym);
+    }
+    return;
+}
--- a/jdk/src/windows/native/java/io/io_util_md.c	Tue Apr 02 14:13:13 2013 -0400
+++ b/jdk/src/windows/native/java/io/io_util_md.c	Tue Apr 02 15:31:24 2013 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2001, 2012, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2001, 2013, 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
@@ -208,7 +208,7 @@
     return pathbuf;
 }
 
-jlong
+FD
 winFileHandleOpen(JNIEnv *env, jstring path, int flags)
 {
     const DWORD access =
@@ -264,7 +264,7 @@
 void
 fileOpen(JNIEnv *env, jobject this, jstring path, jfieldID fid, int flags)
 {
-    jlong h = winFileHandleOpen(env, path, flags);
+    FD h = winFileHandleOpen(env, path, flags);
     if (h >= 0) {
         SET_FD(this, h, fid);
     }
@@ -274,12 +274,12 @@
    old C style int fd as is used in HPI layer */
 
 static int
-handleNonSeekAvailable(jlong, long *);
+handleNonSeekAvailable(FD, long *);
 static int
-handleStdinAvailable(jlong, long *);
+handleStdinAvailable(FD, long *);
 
 int
-handleAvailable(jlong fd, jlong *pbytes) {
+handleAvailable(FD fd, jlong *pbytes) {
     HANDLE h = (HANDLE)fd;
     DWORD type = 0;
 
@@ -317,7 +317,7 @@
 }
 
 static int
-handleNonSeekAvailable(jlong fd, long *pbytes) {
+handleNonSeekAvailable(FD fd, long *pbytes) {
     /* This is used for available on non-seekable devices
      * (like both named and anonymous pipes, such as pipes
      *  connected to an exec'd process).
@@ -346,7 +346,7 @@
 }
 
 static int
-handleStdinAvailable(jlong fd, long *pbytes) {
+handleStdinAvailable(FD fd, long *pbytes) {
     HANDLE han;
     DWORD numEventsRead = 0;    /* Number of events read from buffer */
     DWORD numEvents = 0;        /* Number of events in buffer */
@@ -412,8 +412,8 @@
  * denied".
  */
 
-JNIEXPORT int
-handleSync(jlong fd) {
+int
+handleSync(FD fd) {
     /*
      * From the documentation:
      *
@@ -443,7 +443,7 @@
 
 
 int
-handleSetLength(jlong fd, jlong length) {
+handleSetLength(FD fd, jlong length) {
     HANDLE h = (HANDLE)fd;
     long high = (long)(length >> 32);
     DWORD ret;
@@ -459,7 +459,7 @@
 
 JNIEXPORT
 jint
-handleRead(jlong fd, void *buf, jint len)
+handleRead(FD fd, void *buf, jint len)
 {
     DWORD read = 0;
     BOOL result = 0;
@@ -482,7 +482,7 @@
     return (jint)read;
 }
 
-static jint writeInternal(jlong fd, const void *buf, jint len, jboolean append)
+static jint writeInternal(FD fd, const void *buf, jint len, jboolean append)
 {
     BOOL result = 0;
     DWORD written = 0;
@@ -510,13 +510,11 @@
     return (jint)written;
 }
 
-JNIEXPORT
-jint handleWrite(jlong fd, const void *buf, jint len) {
+jint handleWrite(FD fd, const void *buf, jint len) {
     return writeInternal(fd, buf, len, JNI_FALSE);
 }
 
-JNIEXPORT
-jint handleAppend(jlong fd, const void *buf, jint len) {
+jint handleAppend(FD fd, const void *buf, jint len) {
     return writeInternal(fd, buf, len, JNI_TRUE);
 }
 
@@ -545,7 +543,7 @@
 }
 
 jlong
-handleLseek(jlong fd, jlong offset, jint whence)
+handleLseek(FD fd, jlong offset, jint whence)
 {
     LARGE_INTEGER pos, distance;
     DWORD lowPos = 0;
@@ -569,3 +567,44 @@
     }
     return long_to_jlong(pos.QuadPart);
 }
+
+size_t
+getLastErrorString(char *buf, size_t len)
+{
+    DWORD errval;
+    if (len > 0) {
+        if ((errval = GetLastError()) != 0) {
+            // DOS error
+            size_t n = (size_t)FormatMessage(
+                FORMAT_MESSAGE_FROM_SYSTEM|FORMAT_MESSAGE_IGNORE_INSERTS,
+                NULL,
+                errval,
+                0,
+                buf,
+                (DWORD)len,
+                NULL);
+            if (n > 3) {
+                // Drop final '.', CR, LF
+                if (buf[n - 1] == '\n') n--;
+                if (buf[n - 1] == '\r') n--;
+                if (buf[n - 1] == '.') n--;
+                buf[n] = '\0';
+            }
+            return n;
+        }
+
+        if (errno != 0) {
+            // C runtime error that has no corresponding DOS error code
+            const char *err = strerror(errno);
+            size_t n = strlen(err);
+            if (n >= len)
+                n = len - 1;
+
+            strncpy(buf, err, n);
+            buf[n] = '\0';
+            return n;
+        }
+    }
+
+    return 0;
+}
--- a/jdk/src/windows/native/java/io/io_util_md.h	Tue Apr 02 14:13:13 2013 -0400
+++ b/jdk/src/windows/native/java/io/io_util_md.h	Tue Apr 02 15:31:24 2013 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2003, 2011, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2003, 2013, 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
@@ -27,7 +27,12 @@
 #include "jni_util.h"
 
 /*
- * Prototypes for functions in io_util_md.c called from io_util,
+ * Macros to use the right data type for file descriptors
+ */
+#define FD jlong
+
+/*
+ * Prototypes for functions in io_util_md.c called from io_util.c,
  * FileDescriptor.c, FileInputStream.c, FileOutputStream.c
  */
 WCHAR* pathToNTPath(JNIEnv *env, jstring path, jboolean throwFNFE);
@@ -35,26 +40,20 @@
 WCHAR* getPrefixed(const WCHAR* path, int pathlen);
 WCHAR* currentDir(int di);
 int currentDirLength(const WCHAR* path, int pathlen);
-void fileOpen(JNIEnv *env, jobject this, jstring path, jfieldID fid, int flags);
-int handleAvailable(jlong fd, jlong *pbytes);
-JNIEXPORT int handleSync(jlong fd);
-int handleSetLength(jlong fd, jlong length);
-JNIEXPORT jint handleRead(jlong fd, void *buf, jint len);
-JNIEXPORT jint handleWrite(jlong fd, const void *buf, jint len);
-JNIEXPORT jint handleAppend(jlong fd, const void *buf, jint len);
+int handleAvailable(FD fd, jlong *pbytes);
+int handleSync(FD fd);
+int handleSetLength(FD fd, jlong length);
+JNIEXPORT jint handleRead(FD fd, void *buf, jint len);
+jint handleWrite(FD fd, const void *buf, jint len);
+jint handleAppend(FD fd, const void *buf, jint len);
 jint handleClose(JNIEnv *env, jobject this, jfieldID fid);
-jlong handleLseek(jlong fd, jlong offset, jint whence);
+jlong handleLseek(FD fd, jlong offset, jint whence);
 
 /*
  * Returns an opaque handle to file named by "path".  If an error occurs,
  * returns -1 and an exception is pending.
  */
-jlong winFileHandleOpen(JNIEnv *env, jstring path, int flags);
-
-/*
- * Macros to use the right data type for file descriptors
- */
-#define FD jlong
+FD winFileHandleOpen(JNIEnv *env, jstring path, int flags);
 
 /*
  * Macros to set/get fd from the java.io.FileDescriptor.
--- a/jdk/src/windows/native/sun/nio/fs/WindowsNativeDispatcher.c	Tue Apr 02 14:13:13 2013 -0400
+++ b/jdk/src/windows/native/sun/nio/fs/WindowsNativeDispatcher.c	Tue Apr 02 15:31:24 2013 -0700
@@ -1021,6 +1021,33 @@
         throwWindowsException(env, GetLastError());
 }
 
+JNIEXPORT jboolean JNICALL
+Java_sun_nio_fs_WindowsNativeDispatcher_AccessCheck(JNIEnv* env,
+    jclass this, jlong token, jlong securityInfo, jint accessMask,
+    jint genericRead, jint genericWrite, jint genericExecute, jint genericAll)
+{
+    HANDLE hImpersonatedToken = (HANDLE)jlong_to_ptr(token);
+    PSECURITY_DESCRIPTOR security = (PSECURITY_DESCRIPTOR)jlong_to_ptr(securityInfo);
+    DWORD checkAccessRights = (DWORD)accessMask;
+    GENERIC_MAPPING mapping = {
+        genericRead,
+        genericWrite,
+        genericExecute,
+        genericAll};
+    PRIVILEGE_SET privileges = {0};
+    DWORD privilegesLength = sizeof(privileges);
+    DWORD grantedAccess = 0;
+    BOOL result = FALSE;
+
+    /* checkAccessRights is in-out parameter */
+    MapGenericMask(&checkAccessRights, &mapping);
+    if (AccessCheck(security, hImpersonatedToken, checkAccessRights,
+            &mapping, &privileges, &privilegesLength, &grantedAccess, &result) == 0)
+        throwWindowsException(env, GetLastError());
+
+    return (result == FALSE) ? JNI_FALSE : JNI_TRUE;
+}
+
 JNIEXPORT jlong JNICALL
 Java_sun_nio_fs_WindowsNativeDispatcher_LookupPrivilegeValue0(JNIEnv* env,
     jclass this, jlong name)
@@ -1037,35 +1064,6 @@
     return ptr_to_jlong(pLuid);
 }
 
-JNIEXPORT jlong JNICALL
-Java_sun_nio_fs_WindowsNativeDispatcher_BuildTrusteeWithSid(JNIEnv* env,
-    jclass this, jlong sid)
-{
-    PSID pSid = (HANDLE)jlong_to_ptr(sid);
-    PTRUSTEE_W pTrustee = LocalAlloc(0, sizeof(TRUSTEE_W));
-
-    if (pTrustee == NULL) {
-        JNU_ThrowInternalError(env, "Unable to allocate TRUSTEE_W structure");
-    } else {
-        BuildTrusteeWithSidW(pTrustee, pSid);
-    }
-    return ptr_to_jlong(pTrustee);
-}
-
-JNIEXPORT jint JNICALL
-Java_sun_nio_fs_WindowsNativeDispatcher_GetEffectiveRightsFromAcl(JNIEnv* env,
-    jclass this, jlong acl, jlong trustee)
-{
-    ACCESS_MASK access;
-    PACL pAcl = (PACL)jlong_to_ptr(acl);
-    PTRUSTEE pTrustee = (PTRUSTEE)jlong_to_ptr(trustee);
-
-    if (GetEffectiveRightsFromAcl(pAcl, pTrustee, &access) != ERROR_SUCCESS) {
-        throwWindowsException(env, GetLastError());
-    }
-    return (jint)access;
-}
-
 JNIEXPORT void JNICALL
 Java_sun_nio_fs_WindowsNativeDispatcher_CreateSymbolicLink0(JNIEnv* env,
     jclass this, jlong linkAddress, jlong targetAddress, jint flags)
--- a/jdk/src/windows/native/sun/util/locale/provider/HostLocaleProviderAdapter_md.c	Tue Apr 02 14:13:13 2013 -0400
+++ b/jdk/src/windows/native/sun/util/locale/provider/HostLocaleProviderAdapter_md.c	Tue Apr 02 15:31:24 2013 -0700
@@ -611,7 +611,12 @@
 
 int getLocaleInfoWrapper(const jchar *langtag, LCTYPE type, LPWSTR data, int buflen) {
     if (pGetLocaleInfoEx) {
-        return pGetLocaleInfoEx((LPWSTR)langtag, type, data, buflen);
+        if (wcscmp(L"und", (LPWSTR)langtag) == 0) {
+            // defaults to "en"
+            return pGetLocaleInfoEx(L"en", type, data, buflen);
+        } else {
+            return pGetLocaleInfoEx((LPWSTR)langtag, type, data, buflen);
+        }
     } else {
         // If we ever wanted to support WinXP, we will need extra module from
         // MS...
@@ -622,7 +627,12 @@
 
 int getCalendarInfoWrapper(const jchar *langtag, CALID id, LPCWSTR reserved, CALTYPE type, LPWSTR data, int buflen, LPDWORD val) {
     if (pGetCalendarInfoEx) {
-        return pGetCalendarInfoEx((LPWSTR)langtag, id, reserved, type, data, buflen, val);
+        if (wcscmp(L"und", (LPWSTR)langtag) == 0) {
+            // defaults to "en"
+            return pGetCalendarInfoEx(L"en", id, reserved, type, data, buflen, val);
+        } else {
+            return pGetCalendarInfoEx((LPWSTR)langtag, id, reserved, type, data, buflen, val);
+        }
     } else {
         // If we ever wanted to support WinXP, we will need extra module from
         // MS...
--- a/jdk/src/windows/native/sun/windows/awt_Desktop.cpp	Tue Apr 02 14:13:13 2013 -0400
+++ b/jdk/src/windows/native/sun/windows/awt_Desktop.cpp	Tue Apr 02 15:31:24 2013 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2005, 2013, 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
@@ -38,17 +38,17 @@
  * Signature: (Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;
  */
 JNIEXPORT jstring JNICALL Java_sun_awt_windows_WDesktopPeer_ShellExecute
-  (JNIEnv *env, jclass cls, jstring uri_j, jstring verb_j)
+  (JNIEnv *env, jclass cls, jstring fileOrUri_j, jstring verb_j)
 {
-    LPCWSTR uri_c = JNU_GetStringPlatformChars(env, uri_j, JNI_FALSE);
+    LPCWSTR fileOrUri_c = JNU_GetStringPlatformChars(env, fileOrUri_j, JNI_FALSE);
     LPCWSTR verb_c = JNU_GetStringPlatformChars(env, verb_j, JNI_FALSE);
 
     // 6457572: ShellExecute possibly changes FPU control word - saving it here
     unsigned oldcontrol87 = _control87(0, 0);
-    HINSTANCE retval = ::ShellExecute(NULL, verb_c, uri_c, NULL, NULL, SW_SHOWNORMAL);
+    HINSTANCE retval = ::ShellExecute(NULL, verb_c, fileOrUri_c, NULL, NULL, SW_SHOWNORMAL);
     _control87(oldcontrol87, 0xffffffff);
 
-    JNU_ReleaseStringPlatformChars(env, uri_j, uri_c);
+    JNU_ReleaseStringPlatformChars(env, fileOrUri_j, fileOrUri_c);
     JNU_ReleaseStringPlatformChars(env, verb_j, verb_c);
 
     if ((int)retval <= 32) {
--- a/jdk/test/Makefile	Tue Apr 02 14:13:13 2013 -0400
+++ b/jdk/test/Makefile	Tue Apr 02 15:31:24 2013 -0700
@@ -518,7 +518,6 @@
 	  jdk/asm \
 	  com/sun/org/apache/xerces \
           com/sun/corba \
-	  com/sun/servicetag \
 	  com/sun/tracing \
 	  sun/usagetracker)
 	$(call RunAgentvmBatch)
--- a/jdk/test/ProblemList.txt	Tue Apr 02 14:13:13 2013 -0400
+++ b/jdk/test/ProblemList.txt	Tue Apr 02 15:31:24 2013 -0700
@@ -137,6 +137,9 @@
 # 8008200
 java/lang/Class/asSubclass/BasicUnit.java                       generic-all
 
+# 8009552
+vm/verifier/TestStaticIF.java                                   generic-all
+
 ############################################################################
 
 # jdk_management
@@ -285,6 +288,12 @@
 # 8000439: NPG: REGRESSION : sun/security/krb5/auto/MaxRetries.java fails with timeout
 sun/security/krb5/auto/MaxRetries.java                          solaris-sparcv9
 
+# 8006690: sun/security/krb5/auto/BadKdc1.java fails intermittently
+sun/security/krb5/auto/BadKdc1.java                             solaris-sparcv9
+sun/security/krb5/auto/BadKdc2.java                             solaris-sparcv9
+sun/security/krb5/auto/BadKdc3.java                             solaris-sparcv9
+sun/security/krb5/auto/BadKdc4.java                             solaris-sparcv9
+
 # 7194428
 sun/security/mscapi/ShortRSAKey1024.sh                          windows-all
 
--- a/jdk/test/com/sun/jdi/NativeInstanceFilter.java	Tue Apr 02 14:13:13 2013 -0400
+++ b/jdk/test/com/sun/jdi/NativeInstanceFilter.java	Tue Apr 02 15:31:24 2013 -0700
@@ -57,6 +57,7 @@
 
     static EventRequestManager requestManager = null;
     static MethodExitRequest request = null;
+    static ThreadReference mainThread = null;
 
     private void listen() {
         TargetAdapter adapter = new TargetAdapter() {
@@ -77,6 +78,7 @@
                     requestManager.deleteEventRequest(request);
                     request = requestManager.createMethodExitRequest();
                     request.addInstanceFilter(instance);
+                    request.addThreadFilter(mainThread);
                     request.enable();
                 } else if (instance != null && name.equals("intern")) {
                     // If not for the filter, this will be called twice
@@ -101,10 +103,12 @@
 
         // VM has started, but hasn't started running the test program yet.
         requestManager = vm().eventRequestManager();
-        ReferenceType referenceType =
-            resumeToPrepareOf("NativeInstanceFilterTarg").referenceType();
+        ClassPrepareEvent e = resumeToPrepareOf("NativeInstanceFilterTarg");
+        ReferenceType referenceType = e.referenceType();
+        mainThread = e.thread();
 
         request = requestManager.createMethodExitRequest();
+        request.addThreadFilter(mainThread);
         request.enable();
 
         listen();
--- a/jdk/test/com/sun/servicetag/DeleteServiceTag.java	Tue Apr 02 14:13:13 2013 -0400
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,129 +0,0 @@
-/*
- * Copyright (c) 2008, 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.
- */
-
-/*
- * @test
- * @bug     6622366
- * @summary Basic Test for deleting a service tag in a product registration
- * @author  Mandy Chung
- *
- * @run build DeleteServiceTag Util
- * @run main DeleteServiceTag
- */
-
-import com.sun.servicetag.*;
-import java.io.*;
-import java.util.*;
-
-public class DeleteServiceTag {
-    private static RegistrationData registration;
-    private static File regFile;
-    private static Map<String, ServiceTag> stMap =
-        new LinkedHashMap<String, ServiceTag>();
-    private static String[] files = new String[] {
-                                        "servicetag1.properties",
-                                        "servicetag2.properties",
-                                        "servicetag3.properties"
-                                    };
-
-    public static void main(String[] argv) throws Exception {
-        String registrationDir = System.getProperty("test.classes");
-        String servicetagDir = System.getProperty("test.src");
-
-        File original = new File(servicetagDir, "registration.xml");
-        regFile = new File(registrationDir, "registration.xml");
-        copyRegistrationXML(original, regFile);
-
-        // loads all the service tags
-        for (String f : files) {
-            File stfile = new File(servicetagDir, f);
-            ServiceTag svcTag = Util.newServiceTag(stfile);
-            stMap.put(svcTag.getInstanceURN(), svcTag);
-        }
-
-        // load the registration data with all service tags
-        BufferedInputStream in = new BufferedInputStream(new FileInputStream(regFile));
-        registration = RegistrationData.loadFromXML(in);
-
-        if (stMap.size() != files.length) {
-            throw new RuntimeException("Invalid service tag count= " +
-                stMap.size() + " expected=" + files.length);
-        }
-        // check the service tags
-        Util.checkRegistrationData(regFile.getCanonicalPath(), stMap);
-
-        // delete a service tag
-        deleteServiceTag(servicetagDir, files[0]);
-
-        System.out.println("Test passed: service tags deleted.");
-    }
-
-    private static void copyRegistrationXML(File from, File to) throws IOException {
-
-        to.delete();
-        BufferedReader reader = new BufferedReader(new FileReader(from));
-        PrintWriter writer = new PrintWriter(to);
-        try {
-            String line = null;
-            while ((line = reader.readLine()) != null) {
-                writer.println(line);
-            }
-            writer.flush();
-        } finally {
-            writer.close();
-        }
-    }
-
-    private static void deleteServiceTag(String parent, String filename) throws Exception {
-        File f = new File(parent, filename);
-        ServiceTag svcTag = Util.newServiceTag(f);
-
-        ServiceTag st = registration.removeServiceTag(svcTag.getInstanceURN());
-        if (st == null) {
-            throw new RuntimeException("RegistrationData.remove method" +
-                " returns null");
-        }
-        if (!Util.matches(st, svcTag)) {
-            throw new RuntimeException("ServiceTag added in the registration " +
-                " doesn't match.");
-        }
-        // check the service tags before storing the updated data
-        Util.checkRegistrationData(regFile.getCanonicalPath(), stMap);
-
-        ServiceTag st1 = registration.getServiceTag(svcTag.getInstanceURN());
-        if (st1 != null) {
-            throw new RuntimeException("RegistrationData.get method returns " +
-                "non-null.");
-        }
-        // Now remove the service tag from the map and store to the XML file
-        stMap.remove(svcTag.getInstanceURN());
-        BufferedOutputStream out = new BufferedOutputStream(new FileOutputStream(regFile));
-        try {
-            registration.storeToXML(out);
-        } finally {
-            out.close();
-        }
-    }
-}
--- a/jdk/test/com/sun/servicetag/DuplicateNotFound.java	Tue Apr 02 14:13:13 2013 -0400
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,97 +0,0 @@
-/*
- * Copyright (c) 2008, 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.
- */
-
-/*
- * @test
- * @bug     6622366
- * @summary Basic Test for RegistrationData.removeServiceTag and
- *          updateServiceTag.
- * @author  Mandy Chung
- *
- * @run build DuplicateNotFound Util
- * @run main DuplicateNotFound
- */
-
-import com.sun.servicetag.*;
-import java.io.*;
-import java.util.*;
-
-public class DuplicateNotFound {
-    private static String servicetagDir = System.getProperty("test.src");
-    private static String[] files = new String[] {
-                                        "servicetag1.properties",
-                                        "servicetag2.properties",
-                                        "servicetag3.properties"
-                                    };
-
-    private static RegistrationData registration = new RegistrationData();
-
-    public static void main(String[] argv) throws Exception {
-        ServiceTag svcTag;
-        registration.addServiceTag(loadServiceTag(files[0]));
-        registration.addServiceTag(loadServiceTag(files[1]));
-        testDuplicate(files[0]);
-        testDuplicate(files[1]);
-        testNotFound(files[2]);
-    }
-
-    private static void testDuplicate(String filename) throws Exception {
-        boolean dup = false;
-        try {
-           registration.addServiceTag(loadServiceTag(filename));
-        } catch (IllegalArgumentException e) {
-           dup = true;
-        }
-        if (!dup) {
-           throw new RuntimeException(filename +
-               " added successfully but expected to be a duplicated.");
-        }
-    }
-    private static void testNotFound(String filename) throws Exception {
-        ServiceTag st = loadServiceTag(filename);
-        ServiceTag svctag = registration.getServiceTag(st.getInstanceURN());
-        if (svctag != null) {
-           throw new RuntimeException(st.getInstanceURN() +
-               " exists but expected not found");
-        }
-
-        svctag = registration.removeServiceTag(st.getInstanceURN());
-        if (svctag != null) {
-           throw new RuntimeException(st.getInstanceURN() +
-               " exists but expected not found");
-        }
-
-        svctag = registration.updateServiceTag(st.getInstanceURN(), "testing");
-        if (svctag != null) {
-           throw new RuntimeException(st.getInstanceURN() +
-               " updated successfully but expected not found.");
-        }
-    }
-
-    private static ServiceTag loadServiceTag(String filename) throws Exception {
-        File f = new File(servicetagDir, filename);
-        return Util.newServiceTag(f);
-    }
-}
--- a/jdk/test/com/sun/servicetag/FindServiceTags.java	Tue Apr 02 14:13:13 2013 -0400
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,141 +0,0 @@
-/*
- * Copyright (c) 2008, 2010, 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.
- */
-
-/*
- * @test
- * @bug     6622366
- * @summary Basic Test for Registry.findServiceTags()
- * @author  Mandy Chung
- *
- * @run build FindServiceTags SvcTagClient Util
- * @run main FindServiceTags
- */
-
-import com.sun.servicetag.*;
-import java.io.*;
-import java.util.*;
-
-// This test creates a few service tags in the Registry.
-// Check if the findServiceTags method returns the expected ones.
-public class FindServiceTags {
-    private static String registryDir = System.getProperty("test.classes");
-    private static String servicetagDir = System.getProperty("test.src");
-    private static String[] files = new String[] {
-                                        "servicetag1.properties",
-                                        "servicetag2.properties",
-                                        "servicetag3.properties",
-                                        "servicetag4.properties",
-                                        "servicetag5.properties"
-                                    };
-
-    private static Registry registry;
-    private static Set<ServiceTag> set = new HashSet<ServiceTag>();
-    private static Set<String> productUrns = new HashSet<String>();
-    private static int expectedUrnCount = 3;
-
-    public static void main(String[] argv) throws Exception {
-        try {
-            registry = Util.getSvcTagClientRegistry();
-            runTest();
-        } finally {
-            // restore empty registry file
-            Util.emptyRegistryFile();
-        }
-        System.out.println("Test passed.");
-    }
-
-    public static void runTest() throws Exception {
-        for (String filename : files) {
-            File f = new File(servicetagDir, filename);
-            ServiceTag svcTag = Util.newServiceTag(f);
-            ServiceTag st = registry.addServiceTag(svcTag);
-
-            set.add(st);
-            productUrns.add(st.getProductURN());
-        }
-        if (productUrns.size() != expectedUrnCount) {
-            throw new RuntimeException("Unexpected number of product URNs = " +
-                productUrns.size() + " expected " + expectedUrnCount);
-        }
-        if (set.size() != files.length) {
-            throw new RuntimeException("Unexpected number of service tags = " +
-                set.size() + " expected " + files.length);
-        }
-        String purn = null;
-        for (String urn : productUrns) {
-            if (purn == null) {
-                // save the first product_urn for later use
-                purn = urn;
-            }
-            findServiceTags(urn);
-        }
-
-        // remove all service tags of purn
-        Set<ServiceTag> tags = registry.findServiceTags(purn);
-        for (ServiceTag st : tags) {
-            System.out.println("Removing service tag " + st.getInstanceURN());
-            registry.removeServiceTag(st.getInstanceURN());
-        }
-        tags = registry.findServiceTags(purn);
-        if (tags.size() != 0) {
-            throw new RuntimeException("Unexpected service tag count = " +
-                tags.size());
-        }
-
-    }
-
-    private static void findServiceTags(String productUrn) throws Exception {
-        Set<ServiceTag> found = registry.findServiceTags(productUrn);
-        Set<ServiceTag> matched = new HashSet<ServiceTag>();
-        System.out.println("Finding service tags of product_urn=" +
-            productUrn);
-        for (ServiceTag st : set) {
-            if (st.getProductURN().equals(productUrn)) {
-                System.out.println(st.getInstanceURN());
-                matched.add(st);
-            }
-        }
-        if (found.size() != matched.size()) {
-            throw new RuntimeException("Unmatched service tag count = " +
-                found.size() + " expected " + matched.size());
-        }
-
-        for (ServiceTag st0 : found) {
-            ServiceTag st = null;
-            for (ServiceTag st1 : matched) {
-                if (Util.matches(st0, st1)) {
-                    st = st1;
-                    break;
-                }
-            }
-            if (st == null) {
-                System.out.println("product_urn=" + st0.getProductURN());
-                System.out.println("instance_urn=" + st0.getInstanceURN() );
-                throw new RuntimeException(st0.getInstanceURN() +
-                    " not expected in the returned list");
-            }
-        }
-    }
-}
--- a/jdk/test/com/sun/servicetag/InstanceUrnCheck.java	Tue Apr 02 14:13:13 2013 -0400
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,76 +0,0 @@
-/*
- * Copyright (c) 2008, 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.
- */
-
-/*
- * @test
- * @bug     6622366
- * @summary Basic Test for checking instance_urn
- * @author  Mandy Chung
- *
- * @run build InstanceUrnCheck Util
- * @run main InstanceUrnCheck
- */
-
-import com.sun.servicetag.*;
-import java.io.*;
-import java.util.*;
-
-public class InstanceUrnCheck {
-    private static String servicetagDir = System.getProperty("test.src");
-    private static String[] files = new String[] {
-                                        "servicetag1.properties",
-                                        "servicetag2.properties",
-                                        "servicetag3.properties"
-                                    };
-    private static RegistrationData registration = new RegistrationData();
-
-    public static void main(String[] argv) throws Exception {
-        for (String f : files) {
-            addServiceTag(f);
-        }
-    }
-
-   private static void addServiceTag(String filename) throws Exception {
-        File f = new File(servicetagDir, filename);
-        ServiceTag svcTag = Util.newServiceTag(f, true /* no instance_urn */);
-        ServiceTag st = registration.addServiceTag(svcTag);
-        if (!Util.matchesNoInstanceUrn(svcTag, st)) {
-            throw new RuntimeException("ServiceTag " +
-                " doesn't match.");
-        }
-        System.out.println("New service tag instance_urn=" + st.getInstanceURN());
-        if (!st.getInstanceURN().startsWith("urn:st:")) {
-            throw new RuntimeException("Invalid generated instance_urn " +
-                st.getInstanceURN());
-        }
-        if (st.getInstallerUID() != -1) {
-            throw new RuntimeException("Invalid installer_uid " +
-                st.getInstallerUID());
-        }
-        if (st.getTimestamp() == null) {
-            throw new RuntimeException("null timestamp ");
-        }
-    }
-}
--- a/jdk/test/com/sun/servicetag/InvalidRegistrationData.java	Tue Apr 02 14:13:13 2013 -0400
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,65 +0,0 @@
-/*
- * Copyright (c) 2008, 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.
- */
-
-/*
- * @test
- * @bug     6622366
- * @summary Basic Test for invalid product registry
- * @author  Mandy Chung
- *
- * @run build InvalidRegistrationData
- * @run main InvalidRegistrationData
- */
-
-import com.sun.servicetag.*;
-import java.io.*;
-import java.util.*;
-
-public class InvalidRegistrationData {
-    public static void main(String[] argv) throws Exception {
-        String servicetagDir = System.getProperty("test.src");
-
-        checkRegistrationData(servicetagDir, "missing-environ-field.xml");
-        checkRegistrationData(servicetagDir, "newer-registry-version.xml");
-    }
-
-    private static void checkRegistrationData(String parent, String filename)
-           throws Exception {
-        boolean thrown = false;
-        File f = new File(parent, filename);
-        BufferedInputStream in = new BufferedInputStream(new FileInputStream(f));
-        try {
-            RegistrationData regData = RegistrationData.loadFromXML(in);
-        } catch (IllegalArgumentException e) {
-            System.out.println(e.getMessage() + " thrown expected");
-            thrown = true;
-        }
-
-        if (!thrown) {
-            throw new RuntimeException("ERROR: No IllegalArgumentException thrown");
-        }
-    }
-
-}
--- a/jdk/test/com/sun/servicetag/InvalidServiceTag.java	Tue Apr 02 14:13:13 2013 -0400
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,96 +0,0 @@
-/*
- * Copyright (c) 2008, 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.
- */
-
-/*
- * @test
- * @bug     6622366
- * @summary Basic Test for ServiceTag.newServiceTag() to test invalid fields.
- * @author  Mandy Chung
- *
- * @run build InvalidServiceTag
- * @run main InvalidServiceTag
- */
-
-import com.sun.servicetag.*;
-import java.io.*;
-import java.util.*;
-
-public class InvalidServiceTag {
-    private final static int MAX_CONTAINER_LEN = 64 - 1;
-    public static void main(String[] argv) throws Exception {
-        // all fields valid
-        ServiceTag st1 = ServiceTag.newInstance("product name",
-                                                "product version",
-                                                "product urn",
-                                                "product parent",
-                                                "product parent urn",
-                                                "product defined instance ID",
-                                                "product vendor",
-                                                "platform arch",
-                                                "container",
-                                                "source");
-        // empty optional field
-        ServiceTag st2 = ServiceTag.newInstance("product name",
-                                                "product version",
-                                                "product urn",
-                                                "product parent",
-                                                "",
-                                                "",
-                                                "product vendor",
-                                                "platform arch",
-                                                "container",
-                                                "source");
-        // Invalid - empty required field
-        setInvalidContainer("");
-        // Invalid - required field exceeds max length.
-        StringBuilder sb = new StringBuilder();
-        for (int i = 0; i <= MAX_CONTAINER_LEN; i++) {
-            sb.append('x');
-        }
-        setInvalidContainer(sb.toString());
-        System.out.println("Test passed.");
-    }
-    private static void setInvalidContainer(String container) {
-        boolean exceptionThrown = false;
-        try {
-            ServiceTag st2 = ServiceTag.newInstance("product name",
-                                                    "product version",
-                                                    "product urn",
-                                                    "product parent",
-                                                    "product parent urn",
-                                                    "product defined instance ID",
-                                                    "product vendor",
-                                                    "platform arch",
-                                                    container,
-                                                    "source");
-        } catch (IllegalArgumentException iae) {
-            iae.printStackTrace();
-            exceptionThrown = true;
-        }
-        if (!exceptionThrown) {
-            throw new RuntimeException("IllegalArgumentException not thrown");
-        }
-    }
-}
--- a/jdk/test/com/sun/servicetag/JavaServiceTagTest.java	Tue Apr 02 14:13:13 2013 -0400
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,191 +0,0 @@
-/*
- * Copyright (c) 2008, 2011, 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.
- */
-
-/*
- * @test
- * @bug     6622366 7078024
- * @summary Basic Test for ServiceTag.getJavaServiceTag()
- *          Disable creating the service tag in the system registry.
- *          Verify the existence of registration.xml file and the
- *          content of the service tag.
- * @author  Mandy Chung
- *
- * @run build JavaServiceTagTest
- * @run main JavaServiceTagTest
- */
-
-import com.sun.servicetag.*;
-import java.io.*;
-import java.util.*;
-
-public class JavaServiceTagTest {
-    public static void main(String[] argv) throws Exception {
-        String registrationDir = System.getProperty("test.classes");
-
-        // disable calling to stclient
-        System.setProperty("servicetag.sthelper.supported", "false");
-
-        if (Registry.isSupported()) {
-            throw new RuntimeException("Registry.isSupported() should " +
-                "return false");
-        }
-        // For debugging
-        // System.setProperty("servicetag.verbose", "");
-
-        // cleanup the registration.xml and servicetag file in the test directory
-        System.setProperty("servicetag.dir.path", registrationDir);
-        File regFile = new File(registrationDir, "registration.xml");
-        regFile.delete();
-        File svcTagFile = new File(registrationDir, "servicetag");
-        svcTagFile.delete();
-
-        ServiceTag svctag = ServiceTag.getJavaServiceTag("JavaServiceTagTest");
-        checkServiceTag(svctag);
-
-        if (svcTagFile.exists()) {
-            throw new RuntimeException(svcTagFile + " should not exist.");
-        }
-
-        // registration.xml should be created
-        if (!regFile.exists()) {
-            throw new RuntimeException(regFile + " not created.");
-        }
-        BufferedInputStream in = new BufferedInputStream(new FileInputStream(regFile));
-        RegistrationData registration = RegistrationData.loadFromXML(in);
-        Set<ServiceTag> c = registration.getServiceTags();
-        if (c.size() != 1) {
-            throw new RuntimeException(regFile + " has " + c.size() +
-                " service tags. Expected 1.");
-        }
-        ServiceTag st = registration.getServiceTag(svctag.getInstanceURN());
-        if (!Util.matches(st, svctag)) {
-            throw new RuntimeException("ServiceTag " +
-                " doesn't match.");
-        }
-    }
-
-    /**
-     * Tests if the running platform is a JDK.
-     */
-    static boolean isJDK() {
-        // Determine the JRE path by checking the existence of
-        // <HOME>/jre/lib and <HOME>/lib.
-        String javaHome = System.getProperty("java.home");
-        String jrepath = javaHome + File.separator + "jre";
-        File f = new File(jrepath, "lib");
-        if (!f.exists()) {
-            // java.home usually points to the JRE path
-            jrepath = javaHome;
-        }
-
-        return jrepath.endsWith(File.separator + "jre");
-    }
-
-    private static void checkServiceTag(ServiceTag st) throws IOException {
-        Properties props = loadServiceTagProps();
-        // jdk 8 and later, JDK and JRE have the same product URN.
-        String jdkUrn = props.getProperty("servicetag.jdk.urn");
-        String jreUrn = props.getProperty("servicetag.jre.urn");
-        boolean isJdk = isJDK();
-
-        if (isJdk) {
-            if (!st.getProductURN().equals(jdkUrn) ||
-                    !st.getProductName().equals(
-                         props.getProperty("servicetag.jdk.name"))) {
-                throw new RuntimeException("Product URN and name don't match.");
-            }
-        } else {
-            if (!st.getProductURN().equals(jreUrn) ||
-                    !st.getProductName().equals(
-                        props.getProperty("servicetag.jre.name"))) {
-                throw new RuntimeException("Product URN and name don't match.");
-            }
-        }
-        if (!st.getProductVersion().
-                equals(System.getProperty("java.version"))) {
-            throw new RuntimeException("Unexpected product_version: " +
-                st.getProductVersion());
-        }
-        if (!st.getProductParent().
-                equals(props.getProperty("servicetag.parent.name"))) {
-            throw new RuntimeException("Unexpected product_parent: " +
-                st.getProductParent());
-        }
-        if (!st.getProductParentURN().
-                equals(props.getProperty("servicetag.parent.urn"))) {
-            throw new RuntimeException("Unexpected product_parent_urn: " +
-                st.getProductParentURN());
-        }
-        if (!st.getPlatformArch().
-                equals(System.getProperty("os.arch"))) {
-            throw new RuntimeException("Unexpected platform_arch: " +
-                st.getPlatformArch());
-        }
-        String vendor = System.getProperty("java.vendor");
-        if (!st.getProductVendor().
-                equals(vendor)) {
-            throw new RuntimeException("Unexpected product_vendor: " +
-                st.getProductVendor());
-        }
-        if (!st.getSource().
-                equals("JavaServiceTagTest")) {
-            throw new RuntimeException("Unexpected source: " +
-                st.getSource());
-        }
-        String[] ss = st.getProductDefinedInstanceID().split(",");
-        boolean id = false;
-        boolean dir = false;
-        for (String s : ss) {
-            String[] values = s.split("=");
-            if (values[0].equals("id")) {
-                id = true;
-                String[] sss = values[1].split(" ");
-                if (!sss[0].equals(System.getProperty("java.runtime.version"))) {
-                    throw new RuntimeException("Unexpected version in id: " +
-                        sss[0]);
-                }
-                if (sss.length < 2) {
-                    throw new RuntimeException("Unexpected id=" + values[1]);
-                }
-            } else if (values[0].equals("dir")) {
-                dir = true;
-            }
-        }
-        if (!id || !dir) {
-            throw new RuntimeException("Unexpected product_defined_instance_id: " +
-                st.getProductDefinedInstanceID());
-        }
-    }
-
-    private static Properties loadServiceTagProps()
-           throws IOException {
-        String filename = "/com/sun/servicetag/resources/javase_servicetag.properties";
-        try (InputStream in = Installer.class.getClass().getResourceAsStream(filename)) {
-            Properties props = new Properties();
-            props.load(in);
-            return props;
-        }
-    }
-}
--- a/jdk/test/com/sun/servicetag/JavaServiceTagTest1.java	Tue Apr 02 14:13:13 2013 -0400
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,265 +0,0 @@
-/*
- * Copyright (c) 2008, 2011, 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.
- */
-
-/*
- * @test
- * @bug     6622366 7078024
- * @summary Basic Test for ServiceTag.getJavaServiceTag(String)
- *          to verify that the registration.xml and servicetag files
- *          are both created correctly.
- * @author  Mandy Chung
- *
- * @run build JavaServiceTagTest1 SvcTagClient Util
- * @run main JavaServiceTagTest1
- */
-
-import com.sun.servicetag.*;
-import java.io.*;
-import java.util.*;
-
-public class JavaServiceTagTest1 {
-    private static String registrationDir = System.getProperty("test.classes");
-    private static String servicetagDir = System.getProperty("test.src");
-    private static File regFile;
-    private static File svcTagFile;
-    private static Registry registry;
-    public static void main(String[] argv) throws Exception {
-        try {
-            registry = Util.getSvcTagClientRegistry();
-            runTest();
-        } finally {
-            // restore empty registry file
-            Util.emptyRegistryFile();
-        }
-    }
-
-    private static void runTest() throws Exception {
-        // cleanup the registration.xml and servicetag file in the test directory
-        System.setProperty("servicetag.dir.path", registrationDir);
-        regFile = new File(registrationDir, "registration.xml");
-        regFile.delete();
-
-        svcTagFile = new File(registrationDir, "servicetag");
-        svcTagFile.delete();
-
-        // verify that only one service tag is created
-        ServiceTag st1 = testJavaServiceTag("Test1");
-
-        // getJavaServiceTag method should create a new service tag
-        // and delete the old one
-        ServiceTag st2 = testJavaServiceTag("Test2");
-        if (registry.getServiceTag(st1.getInstanceURN()) != null) {
-            throw new RuntimeException("instance_urn: " + st1.getInstanceURN() +
-                " exists but expected to be removed");
-        }
-
-        // expected to have different instance_urn
-        if (st1.getInstanceURN().equals(st2.getInstanceURN())) {
-            throw new RuntimeException("instance_urn: " + st1.getInstanceURN() +
-                " == " + st2.getInstanceURN());
-        }
-
-        // Delete the service tag from the Registry and the servicetag file
-        if (registry.removeServiceTag(st2.getInstanceURN()) == null) {
-            throw new RuntimeException("Failed to remove " +
-                st1.getInstanceURN() + " from the registry");
-        }
-        svcTagFile.delete();
-
-        // call the getJavaServiceTag(String) method again
-        // should create the servicetag file.
-        ServiceTag st3 = testJavaServiceTag("Test2");
-        if (!Util.matches(st2, st3)) {
-            System.out.println(st2);
-            System.out.println(st3);
-            throw new RuntimeException("Test Failed: Expected to be the same");
-        }
-
-    }
-
-    private static ServiceTag testJavaServiceTag(String source) throws Exception {
-        ServiceTag svctag = ServiceTag.getJavaServiceTag(source);
-        checkServiceTag(svctag, source);
-
-        // verify if registration.xml is created
-        if (!regFile.exists()) {
-            throw new RuntimeException(regFile + " not created.");
-        }
-
-        // verify the registration.xml content is the expected service tag
-        BufferedInputStream in = new BufferedInputStream(new FileInputStream(regFile));
-        RegistrationData registration = RegistrationData.loadFromXML(in);
-        Set<ServiceTag> c = registration.getServiceTags();
-        if (c.size() != 1) {
-            throw new RuntimeException(regFile + " has " + c.size() +
-                " service tags. Expected 1.");
-        }
-        ServiceTag st = registration.getServiceTag(svctag.getInstanceURN());
-        if (!Util.matches(st, svctag)) {
-            throw new RuntimeException("RegistrationData ServiceTag " +
-                " doesn't match.");
-        }
-
-        // verify the service tag added in the registry
-        st = registry.getServiceTag(svctag.getInstanceURN());
-        if (!Util.matches(st, svctag)) {
-            throw new RuntimeException("Registry ServiceTag " +
-                " doesn't match.");
-        }
-
-        // verify if servicetag file is created
-        if (!svcTagFile.exists()) {
-            throw new RuntimeException(svcTagFile + " not created.");
-        }
-
-        // verify that the servicetag file only contains one instance_urn
-        BufferedReader reader = new BufferedReader(new FileReader(svcTagFile));
-        int count = 0;
-        try {
-            String line;
-            while ((line = reader.readLine()) != null) {
-                if (line.equals(svctag.getInstanceURN())) {
-                    count++;
-                } else {
-                    throw new RuntimeException("servicetag contains " +
-                        " unexpected instance_urn " + line);
-                }
-            }
-        } finally {
-            reader.close();
-        }
-        if (count != 1) {
-            throw new RuntimeException("servicetag contains unexpected " +
-                "number of instance_urn = " + count);
-        }
-        return svctag;
-    }
-
-    /**
-     * Tests if the running platform is a JDK.
-     */
-    static boolean isJDK() {
-        // Determine the JRE path by checking the existence of
-        // <HOME>/jre/lib and <HOME>/lib.
-        String javaHome = System.getProperty("java.home");
-        String jrepath = javaHome + File.separator + "jre";
-        File f = new File(jrepath, "lib");
-        if (!f.exists()) {
-            // java.home usually points to the JRE path
-            jrepath = javaHome;
-        }
-
-        return jrepath.endsWith(File.separator + "jre");
-    }
-
-    private static void checkServiceTag(ServiceTag st, String source)
-            throws IOException {
-        Properties props = loadServiceTagProps();
-        // jdk 8 and later, JDK and JRE have the same product URN.
-        String jdkUrn = props.getProperty("servicetag.jdk.urn");
-        String jreUrn = props.getProperty("servicetag.jre.urn");
-        boolean isJdk = isJDK();
-
-        if (isJdk) {
-            if (!st.getProductURN().equals(jdkUrn) ||
-                    !st.getProductName().equals(
-                         props.getProperty("servicetag.jdk.name"))) {
-                throw new RuntimeException("Product URN and name don't match.");
-            }
-        } else {
-            if (!st.getProductURN().equals(jreUrn) ||
-                    !st.getProductName().equals(
-                        props.getProperty("servicetag.jre.name"))) {
-                throw new RuntimeException("Product URN and name don't match.");
-            }
-        }
-
-        if (!st.getProductVersion().
-                equals(System.getProperty("java.version"))) {
-            throw new RuntimeException("Unexpected product_version: " +
-                st.getProductVersion());
-        }
-        if (!st.getProductParent().
-                equals(props.getProperty("servicetag.parent.name"))) {
-            throw new RuntimeException("Unexpected product_parent: " +
-                st.getProductParent());
-        }
-        if (!st.getProductParentURN().
-                equals(props.getProperty("servicetag.parent.urn"))) {
-            throw new RuntimeException("Unexpected product_parent_urn: " +
-                st.getProductParentURN());
-        }
-        if (!st.getPlatformArch().
-                equals(System.getProperty("os.arch"))) {
-            throw new RuntimeException("Unexpected platform_arch: " +
-                st.getPlatformArch());
-        }
-
-        String vendor = System.getProperty("java.vendor");
-        if (!st.getProductVendor().
-                equals(vendor)) {
-            throw new RuntimeException("Unexpected product_vendor: " +
-                st.getProductVendor());
-        }
-        if (!st.getSource().
-                equals(source)) {
-            throw new RuntimeException("Unexpected source: " +
-                st.getSource() + " expected: " + source);
-        }
-        String[] ss = st.getProductDefinedInstanceID().split(",");
-        boolean id = false;
-        boolean dir = false;
-        for (String s : ss) {
-            String[] values = s.split("=");
-            if (values[0].equals("id")) {
-                id = true;
-                String[] sss = values[1].split(" ");
-                if (!sss[0].equals(System.getProperty("java.runtime.version"))) {
-                    throw new RuntimeException("Unexpected version in id: " +
-                        sss[0]);
-                }
-                if (sss.length < 2) {
-                    throw new RuntimeException("Unexpected id=" + values[1]);
-                }
-            } else if (values[0].equals("dir")) {
-                dir = true;
-            }
-        }
-        if (!id || !dir) {
-            throw new RuntimeException("Unexpected product_defined_instance_id: " +
-                st.getProductDefinedInstanceID());
-        }
-    }
-
-    private static Properties loadServiceTagProps()
-           throws IOException {
-        String filename = "/com/sun/servicetag/resources/javase_servicetag.properties";
-        try (InputStream in = Installer.class.getClass().getResourceAsStream(filename)) {
-            Properties props = new Properties();
-            props.load(in);
-            return props;
-        }
-    }
-}
--- a/jdk/test/com/sun/servicetag/NewRegistrationData.java	Tue Apr 02 14:13:13 2013 -0400
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,105 +0,0 @@
-/*
- * Copyright (c) 2008, 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.
- */
-
-/*
- * @test
- * @bug     6622366
- * @summary Basic Test for Registration Data
- * @author  Mandy Chung
- *
- * @run build NewRegistrationData Util
- * @run main NewRegistrationData
- */
-
-import com.sun.servicetag.*;
-import java.io.*;
-import java.util.*;
-
-public class NewRegistrationData {
-    private static RegistrationData regData;
-    private static Map<String, ServiceTag> stMap = new LinkedHashMap<String, ServiceTag>();
-    private static String[] files = new String[] {
-                                        "servicetag1.properties",
-                                        "servicetag2.properties",
-                                        "servicetag3.properties"
-                                    };
-
-    public static void main(String[] argv) throws Exception {
-        String regDataDir = System.getProperty("test.classes");
-        String servicetagDir = System.getProperty("test.src");
-
-        File reg = new File(regDataDir, "registration.xml");
-        // Make sure a brand new file is created
-        reg.delete();
-
-        regData = new RegistrationData();
-        if (regData.getRegistrationURN().isEmpty()) {
-            throw new RuntimeException("Empty registration urn");
-        }
-
-        int count = 0;
-        for (String f : files) {
-            addServiceTag(servicetagDir, f, ++count);
-        }
-
-        // check if the registration data contains all service tags
-        Set<ServiceTag> c = regData.getServiceTags();
-        for (ServiceTag st : c) {
-            if (!Util.matches(st, regData.getServiceTag(st.getInstanceURN()))) {
-                throw new RuntimeException("ServiceTag added in the regData " +
-                    " doesn't match.");
-            }
-        }
-
-        // store the service tag to a file
-        BufferedOutputStream out = new BufferedOutputStream(new FileOutputStream(reg));
-        try {
-            regData.storeToXML(out);
-        } finally {
-            out.close();
-        }
-
-        Util.checkRegistrationData(reg.getCanonicalPath(), stMap);
-        System.out.println("Test passed: " + count + " service tags added");
-    }
-
-    private static void addServiceTag(String parent, String filename, int count) throws Exception {
-        File f = new File(parent, filename);
-        ServiceTag svcTag = Util.newServiceTag(f);
-        regData.addServiceTag(svcTag);
-        stMap.put(svcTag.getInstanceURN(), svcTag);
-
-        Set<ServiceTag> c = regData.getServiceTags();
-        if (c.size() != count) {
-            throw new RuntimeException("Invalid service tag count= " +
-                c.size() + " expected=" + count);
-        }
-        ServiceTag st = regData.getServiceTag(svcTag.getInstanceURN());
-        if (!Util.matches(st, svcTag)) {
-            throw new RuntimeException("ServiceTag added in the regData " +
-                " doesn't match.");
-        }
-    }
-}
--- a/jdk/test/com/sun/servicetag/SvcTagClient.java	Tue Apr 02 14:13:13 2013 -0400
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,200 +0,0 @@
-/*
- * Copyright (c) 2008, 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.
- */
-
-/*
- * @bug     6622366
- */
-
-import com.sun.servicetag.*;
-import java.io.*;
-import java.util.*;
-
-/**
- * A utility class simulating stclient for testing purpose.
- */
-public class SvcTagClient {
-    private static File xmlFile;
-    private static RegistrationData registration;
-    private static String instanceURN;
-    private static String productName;
-    private static String productVersion;
-    private static String productURN;
-    private static String productParent;
-    private static String productParentURN = ""; // optional
-    private static String productDefinedInstanceID = ""; //optional
-    private static String productVendor;
-    private static String platformArch;
-    private static String container;
-    private static String source;
-
-    // stclient exit value
-    private static final int ST_ERR_REC_NOT_FOUND = 225;
-
-    public static void main(String[] args) throws Exception {
-        String path = System.getProperty("stclient.registry.path");
-        if (path == null) {
-            System.err.println("stclient registry path missing");
-            System.exit(-1);
-        }
-        xmlFile = new File(path);
-        if (xmlFile.exists()) {
-            BufferedInputStream in = new BufferedInputStream(new FileInputStream(xmlFile));
-            registration = RegistrationData.loadFromXML(in);
-        } else {
-            registration = new RegistrationData();
-        }
-        boolean add = false;
-        boolean delete = false;
-        boolean update = false;
-        boolean get = false;
-        boolean find = false;
-
-        int count = 0;
-        while (count < args.length) {
-            String arg = args[count];
-            if (!arg.startsWith("-")) {
-                System.err.println("Invalid option:" + arg);
-                System.exit(-1);
-            }
-            if (arg.equals("-a")) {
-                add = true;
-            } else if (arg.equals("-d")) {
-                delete = true;
-            } else if (arg.equals("-u")) {
-                update = true;
-            } else if (arg.equals("-g")) {
-                get = true;
-            } else if (arg.equals("-f")) {
-                find = true;
-                productURN = "";
-            } else if (arg.equals("-t")) {
-                productURN = args[++count];
-            } else if (arg.equals("-i")) {
-                instanceURN = args[++count];
-            } else if (arg.equals("-p")) {
-                productName = args[++count];
-            } else if (arg.equals("-e")) {
-                productVersion = args[++count];
-            } else if (arg.equals("-t")) {
-                productURN = args[++count];
-            } else if (arg.equals("-F")) {
-                productParentURN = args[++count];
-            } else if (arg.equals("-P")) {
-                productParent = args[++count];
-            } else if (arg.equals("-I")) {
-                productDefinedInstanceID = args[++count];
-            } else if (arg.equals("-m")) {
-                productVendor = args[++count];
-            } else if (arg.equals("-A")) {
-                platformArch = args[++count];
-            } else if (arg.equals("-z")) {
-                container = args[++count];
-            } else if (arg.equals("-S")) {
-                source = args[++count];
-            } else {
-                System.err.println("Invalid option:" + arg);
-                System.exit(-1);
-            }
-            count++;
-        }
-
-        if (add) {
-            addServiceTag();
-        } else if (delete) {
-            deleteServiceTag();
-        } else if (update) {
-            updateServiceTag();
-        } else if (get) {
-            getServiceTag();
-        } else if (find) {
-            findServiceTags();
-        } else {
-            System.err.println("Error");
-            System.exit(-1);
-        }
-        updateXmlFile();
-    }
-    private static String OUTPUT = "Product instance URN=";
-
-    private static void addServiceTag() {
-        if (instanceURN == null) {
-            instanceURN = ServiceTag.generateInstanceURN();
-        }
-        ServiceTag st = ServiceTag.newInstance(instanceURN,
-                                               productName,
-                                               productVersion,
-                                               productURN,
-                                               productParent,
-                                               productParentURN,
-                                               productDefinedInstanceID,
-                                               productVendor,
-                                               platformArch,
-                                               container,
-                                               source);
-        registration.addServiceTag(st);
-        System.out.println(OUTPUT + st.getInstanceURN());
-    }
-
-    private static void deleteServiceTag() {
-        registration.removeServiceTag(instanceURN);
-        System.out.println("instance_urn=" + instanceURN + " deleted");
-    }
-
-    private static void updateServiceTag() {
-        registration.updateServiceTag(instanceURN, productDefinedInstanceID);
-        System.out.println("instance_urn=" + instanceURN + " updated");
-    }
-
-    private static void getServiceTag() {
-        ServiceTag st = registration.getServiceTag(instanceURN);
-        if (st == null) {
-            System.err.println("instance_urn=" + instanceURN + " not found");
-            System.exit(ST_ERR_REC_NOT_FOUND);
-        } else {
-            System.out.println(st);
-        }
-    }
-
-    private static void findServiceTags() {
-        Set<ServiceTag> set = registration.getServiceTags();
-        for (ServiceTag st : set) {
-            if (st.getProductURN().equals(productURN)) {
-                System.out.println(st.getInstanceURN());
-            }
-        }
-        if (set.size() == 0) {
-            System.out.println("No records found");
-            System.exit(ST_ERR_REC_NOT_FOUND);
-        }
-    }
-    private static void updateXmlFile() throws IOException {
-        BufferedOutputStream out = new BufferedOutputStream(new FileOutputStream(xmlFile));
-        try {
-            registration.storeToXML(out);
-        } finally {
-            out.close();
-        }
-    }
-}
--- a/jdk/test/com/sun/servicetag/SystemRegistryTest.java	Tue Apr 02 14:13:13 2013 -0400
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,139 +0,0 @@
-/*
- * Copyright (c) 2008, 2010, 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.
- */
-
-/*
- * @test
- * @bug     6622366
- * @summary Basic Test for registry class
- *          by replacing stclient with SvcTagClient utility
- * @author  Mandy Chung
- *
- * @run build SvcTagClient SystemRegistryTest Util
- * @run main SystemRegistryTest
- */
-
-import com.sun.servicetag.*;
-import java.io.*;
-import java.util.*;
-
-public class SystemRegistryTest {
-    private static String registryDir = System.getProperty("test.classes");
-    private static String servicetagDir = System.getProperty("test.src");
-    private static List<ServiceTag> list = new ArrayList<ServiceTag>();
-    private static String[] files = new String[] {
-                                        "servicetag1.properties",
-                                        "servicetag2.properties",
-                                        "servicetag3.properties"
-                                    };
-
-    private static Registry registry;
-    public static void main(String[] argv) throws Exception {
-        try {
-            registry = Util.getSvcTagClientRegistry();
-            runTest();
-        } finally {
-            // restore empty registry file
-            Util.emptyRegistryFile();
-        }
-    }
-
-    private static void runTest() throws Exception {
-        for (String filename : files) {
-            File f = new File(servicetagDir, filename);
-            ServiceTag svcTag = Util.newServiceTag(f);
-            ServiceTag st = registry.addServiceTag(svcTag);
-            list.add(st);
-            System.out.println(st);
-        }
-
-        testDuplicate(list.get(0));
-        testNotFound();
-
-        // remove a service tag
-        String urn = list.get(0).getInstanceURN();
-        ServiceTag svcTag = registry.removeServiceTag(urn);
-        if (!Util.matches(svcTag, list.get(0))) {
-           throw new RuntimeException(urn +
-               " deleted but does not match.");
-        }
-
-        // get a service tag
-        svcTag = list.get(1);
-        urn = svcTag.getInstanceURN();
-        ServiceTag st = registry.getServiceTag(urn);
-        if (!Util.matches(svcTag, st)) {
-           throw new RuntimeException(urn +
-               " returned from getServiceTag but does not match.");
-        }
-        // update the service tag
-        registry.updateServiceTag(urn, "My new defined ID");
-        st = registry.getServiceTag(urn);
-        if (Util.matches(svcTag, st)) {
-           throw new RuntimeException(urn +
-               " updated but expected to be different.");
-        }
-
-        if (!st.getProductDefinedInstanceID().equals("My new defined ID")) {
-            throw new RuntimeException("Invalid product_defined_instance_id " +
-                st.getProductDefinedInstanceID());
-        }
-        if (st.getInstallerUID() != -1) {
-            throw new RuntimeException("Invalid installer_uid " +
-                st.getInstallerUID());
-        }
-        if (st.getTimestamp().equals(svcTag.getTimestamp())) {
-            throw new RuntimeException("Timestamp " +
-                st.getTimestamp() + " == " + svcTag.getTimestamp());
-        }
-
-    }
-    private static void testDuplicate(ServiceTag st) throws IOException {
-        boolean dup = false;
-        try {
-           registry.addServiceTag(st);
-        } catch (IllegalArgumentException e) {
-           dup = true;
-        }
-        if (!dup) {
-           throw new RuntimeException(st.getInstanceURN() +
-               " added successfully but expected to be a duplicated.");
-        }
-    }
-
-    private static void testNotFound() throws Exception {
-        String instanceURN = "urn:st:721cf98a-f4d7-6231-bb1d-f2f5aa903ef7";
-        ServiceTag svctag = registry.removeServiceTag(instanceURN);
-        if (svctag != null) {
-           throw new RuntimeException(instanceURN +
-               " exists but expected not found");
-        }
-
-        svctag = registry.updateServiceTag(instanceURN, "testing");
-        if (svctag != null) {
-           throw new RuntimeException(instanceURN +
-               " exists but expected not found");
-        }
-    }
-}
--- a/jdk/test/com/sun/servicetag/TestLoadFromXML.java	Tue Apr 02 14:13:13 2013 -0400
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,69 +0,0 @@
-/*
- * Copyright (c) 2008, 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.
- */
-
-/*
- * @test
- * @bug     6622366
- * @summary Basic Test for RegistrationData.loadFromXML
- * @author  Mandy Chung
- *
- * @run build TestLoadFromXML
- * @run main TestLoadFromXML
- */
-
-import com.sun.servicetag.*;
-import java.io.*;
-import java.util.*;
-
-public class TestLoadFromXML {
-    public static void main(String[] argv) throws Exception {
-        String registrationDir = System.getProperty("test.classes");
-        String servicetagDir = System.getProperty("test.src");
-
-        File inFile = new File(servicetagDir, "registration.xml");
-        File outFile = new File(registrationDir, "out.xml");
-        BufferedInputStream in = new BufferedInputStream(new FileInputStream(inFile));
-        RegistrationData regData = RegistrationData.loadFromXML(in);
-        boolean closed = false;
-        try {
-           in.read();
-        } catch (IOException e) {
-           // expect the InputStream is closed
-           closed = true;
-           System.out.println("*** Expected IOException ***");
-           e.printStackTrace();
-        }
-        if (!closed) {
-           throw new RuntimeException("InputStream not closed after " +
-               "RegistrationData.loadFromXML() call");
-        }
-
-        BufferedOutputStream out =
-            new BufferedOutputStream(new FileOutputStream(outFile));
-        regData.storeToXML(out);
-        // should be able to write to the OutputStream
-        out.write(0);
-    }
-}
--- a/jdk/test/com/sun/servicetag/UpdateServiceTagTest.java	Tue Apr 02 14:13:13 2013 -0400
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,109 +0,0 @@
-/*
- * Copyright (c) 2008, 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.
- */
-
-/*
- * @test
- * @bug     6622366
- * @summary Basic Test for RegistrationData.updateServiceTag
- * @author  Mandy Chung
- *
- * @run build UpdateServiceTagTest Util
- * @run main UpdateServiceTagTest
- */
-
-import com.sun.servicetag.*;
-import java.io.*;
-import java.util.*;
-
-public class UpdateServiceTagTest {
-    private static String servicetagDir = System.getProperty("test.src");
-    private static String[] files = new String[] {
-                                        "servicetag1.properties",
-                                        "servicetag2.properties",
-                                        "servicetag3.properties"
-                                    };
-    private static RegistrationData registration = new RegistrationData();
-    private static Set<ServiceTag> set = new HashSet<ServiceTag>();
-
-    public static void main(String[] argv) throws Exception {
-        for (String f : files) {
-            ServiceTag st = addServiceTag(f);
-            set.add(st);
-        }
-        Thread.sleep(1000);
-        for (ServiceTag st : set) {
-            updateServiceTag(st);
-        }
-    }
-
-    private static ServiceTag addServiceTag(String filename) throws Exception {
-        File f = new File(servicetagDir, filename);
-        ServiceTag svcTag = Util.newServiceTag(f, true /* no instance_urn */);
-        ServiceTag st = registration.addServiceTag(svcTag);
-        if (!Util.matchesNoInstanceUrn(svcTag, st)) {
-            throw new RuntimeException("ServiceTag " +
-                " doesn't match.");
-        }
-        String urn = st.getInstanceURN();
-        if (!urn.startsWith("urn:st:")) {
-            throw new RuntimeException("Invalid generated instance_urn " +
-                urn);
-        }
-        if (st.getInstallerUID() != -1) {
-            throw new RuntimeException("Invalid installer_uid " +
-                st.getInstallerUID());
-        }
-        if (st.getTimestamp() == null) {
-            throw new RuntimeException("null timestamp ");
-        }
-        return st;
-    }
-
-    private static String newID = "New product defined instance ID";
-    private static void updateServiceTag(ServiceTag svcTag) throws Exception {
-        // update the service tag
-        String urn = svcTag.getInstanceURN();
-        registration.updateServiceTag(urn, newID);
-
-        // get the updated service tag
-        ServiceTag st = registration.getServiceTag(urn);
-        if (Util.matches(svcTag, st)) {
-            throw new RuntimeException("ServiceTag " +
-                " should not match.");
-        }
-        if (!st.getProductDefinedInstanceID().equals(newID)) {
-            throw new RuntimeException("Invalid product_defined_instance_id " +
-                st.getProductDefinedInstanceID());
-        }
-        if (st.getInstallerUID() != -1) {
-            throw new RuntimeException("Invalid installer_uid " +
-                st.getInstallerUID());
-        }
-        if (st.getTimestamp().equals(svcTag.getTimestamp())) {
-            throw new RuntimeException("Timestamp " +
-                st.getTimestamp() + " == " + svcTag.getTimestamp());
-        }
-    }
-}
--- a/jdk/test/com/sun/servicetag/Util.java	Tue Apr 02 14:13:13 2013 -0400
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,265 +0,0 @@
-/*
- * Copyright (c) 2008, 2010, 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.
- */
-
-/*
- * @bug     6622366
- * @summary Utility class used by other jtreg tests
- */
-
-import com.sun.servicetag.RegistrationData;
-import com.sun.servicetag.ServiceTag;
-import com.sun.servicetag.Registry;
-
-import java.util.Set;
-import java.util.Date;
-import java.util.Map;
-import java.util.Properties;
-import java.util.TimeZone;
-import java.text.ParseException;
-import java.text.SimpleDateFormat;
-import java.io.*;
-
-public class Util {
-    public static ServiceTag newServiceTag(File f)
-            throws FileNotFoundException, IOException, NumberFormatException {
-        return newServiceTag(f, false /* with instance_urn */);
-    }
-
-    public static ServiceTag newServiceTag(File f, boolean noInstanceURN)
-            throws FileNotFoundException, IOException, NumberFormatException {
-        Properties props = new Properties();
-        FileReader reader = new FileReader(f);
-        try {
-            props.load(reader);
-        } finally {
-            reader.close();
-        }
-        if (noInstanceURN) {
-            return ServiceTag.newInstance(
-                            props.getProperty("product_name"),
-                            props.getProperty("product_version"),
-                            props.getProperty("product_urn"),
-                            props.getProperty("product_parent"),
-                            props.getProperty("product_parent_urn"),
-                            props.getProperty("product_defined_inst_id"),
-                            props.getProperty("product_vendor"),
-                            props.getProperty("platform_arch"),
-                            props.getProperty("container"),
-                            props.getProperty("source"));
-        } else {
-            return ServiceTag.newInstance(
-                            props.getProperty("instance_urn"),
-                            props.getProperty("product_name"),
-                            props.getProperty("product_version"),
-                            props.getProperty("product_urn"),
-                            props.getProperty("product_parent"),
-                            props.getProperty("product_parent_urn"),
-                            props.getProperty("product_defined_inst_id"),
-                            props.getProperty("product_vendor"),
-                            props.getProperty("platform_arch"),
-                            props.getProperty("container"),
-                            props.getProperty("source"));
-        }
-    }
-
-    public static boolean matches(ServiceTag st1, ServiceTag st2) {
-        if (!st1.getInstanceURN().equals(st2.getInstanceURN())) {
-            System.out.println("instance_urn: " + st1.getInstanceURN() +
-                " != " + st2.getInstanceURN());
-            return false;
-        }
-        return matchesNoInstanceUrn(st1, st2);
-    }
-
-    public static boolean matchesNoInstanceUrn(ServiceTag st1, ServiceTag st2) {
-        if (!st1.getProductName().equals(st2.getProductName())) {
-            System.out.println("product_name: " + st1.getProductName() +
-                " != " + st2.getProductName());
-            return false;
-        }
-
-        if (!st1.getProductVersion().equals(st2.getProductVersion())) {
-            System.out.println("product_version: " + st1.getProductVersion() +
-                " != " + st2.getProductVersion());
-            return false;
-        }
-        if (!st1.getProductURN().equals(st2.getProductURN())) {
-            System.out.println("product_urn: " + st1.getProductURN() +
-                " != " + st2.getProductURN());
-            return false;
-        }
-        if (!st1.getProductParentURN().equals(st2.getProductParentURN())) {
-            System.out.println("product_parent_urn: " + st1.getProductParentURN() +
-                " != " + st2.getProductParentURN());
-            return false;
-        }
-        if (!st1.getProductParent().equals(st2.getProductParent())) {
-            System.out.println("product_parent: " + st1.getProductParent() +
-                " != " + st2.getProductParent());
-            return false;
-        }
-        if (!st1.getProductDefinedInstanceID().equals(st2.getProductDefinedInstanceID())) {
-            System.out.println("product_defined_inst_id: " +
-                st1.getProductDefinedInstanceID() +
-                " != " + st2.getProductDefinedInstanceID());
-            return false;
-        }
-        if (!st1.getProductVendor().equals(st2.getProductVendor())) {
-            System.out.println("product_vendor: " + st1.getProductVendor() +
-                " != " + st2.getProductVendor());
-            return false;
-        }
-        if (!st1.getPlatformArch().equals(st2.getPlatformArch())) {
-            System.out.println("platform_arch: " + st1.getPlatformArch() +
-                " != " + st2.getPlatformArch());
-            return false;
-        }
-        if (!st1.getContainer().equals(st2.getContainer())) {
-            System.out.println("container: " + st1.getContainer() +
-                " != " + st2.getContainer());
-            return false;
-        }
-        if (!st1.getSource().equals(st2.getSource())) {
-            System.out.println("source: " + st1.getSource() +
-                " != " + st2.getSource());
-            return false;
-        }
-        return true;
-    }
-
-    public static void checkRegistrationData(String regFile,
-                                             Map<String, ServiceTag> stMap)
-            throws IOException {
-        BufferedInputStream in = new BufferedInputStream(new FileInputStream(regFile));
-        RegistrationData registration = RegistrationData.loadFromXML(in);
-        Set<ServiceTag> svcTags = registration.getServiceTags();
-        if (svcTags.size() != stMap.size()) {
-            throw new RuntimeException("Invalid service tag count= " +
-                svcTags.size() + " expected=" + stMap.size());
-        }
-        for (ServiceTag st : svcTags) {
-            ServiceTag st1 = stMap.get(st.getInstanceURN());
-            if (!matches(st, st1)) {
-                System.err.println(st);
-                System.err.println(st1);
-                throw new RuntimeException("ServiceTag in the registry " +
-                    "does not match the one in the map");
-            }
-        }
-    }
-
-
-    /**
-     * Formats the Date into a timestamp string in YYYY-MM-dd HH:mm:ss GMT.
-     * @param timestamp Date
-     * @return a string representation of the timestamp in the YYYY-MM-dd HH:mm:ss GMT format.
-     */
-    static String formatTimestamp(Date timestamp) {
-        SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss z");
-        df.setTimeZone(TimeZone.getTimeZone("GMT"));
-        return df.format(timestamp);
-    }
-
-    /**
-     * Parses a timestamp string in YYYY-MM-dd HH:mm:ss GMT format.
-     * @param timestamp Timestamp in the YYYY-MM-dd HH:mm:ss GMT format.
-     * @return Date
-     */
-    static Date parseTimestamp(String timestamp) {
-        SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss z");
-        df.setTimeZone(TimeZone.getTimeZone("GMT"));
-        try {
-            return df.parse(timestamp);
-        } catch (ParseException e) {
-            // should not reach here
-            e.printStackTrace();
-            return new Date();
-        }
-    }
-
-    /**
-     * Returns the command simulating stclient behavior.
-     */
-    static String getSvcClientCommand(String stclientRegistry) {
-        String regDir = System.getProperty("test.classes");
-
-        StringBuilder sb = new StringBuilder();
-        // wrap each argument to the command with double quotes
-        sb.append("\"");
-        sb.append(System.getProperty("java.home"));
-        sb.append(File.separator).append("bin");
-        sb.append(File.separator).append("java");
-        sb.append("\"");
-        sb.append(" -cp ");
-        sb.append("\"").append(regDir).append("\"");
-        sb.append(" \"-Dstclient.registry.path=");
-        sb.append(stclientRegistry).append("\"");
-        sb.append(" SvcTagClient");
-        return sb.toString();
-    }
-
-    private static Registry registry = null;
-    private static File registryFile = null;
-    /**
-     * Returns the Registry processed by SvcTagClient that simulates
-     * stclient.
-     */
-    static synchronized Registry getSvcTagClientRegistry() throws IOException {
-        String regDir = System.getProperty("test.classes");
-        File f = new File(regDir, "registry.xml");
-        if (registry != null) {
-            if (!f.equals(registryFile) && f.length() != 0) {
-                throw new AssertionError("Has to be empty registry.xml to run in samevm");
-            }
-            return registry;
-        }
-
-        // System.setProperty("servicetag.verbose", "true");
-        // enable the helper class
-        System.setProperty("servicetag.sthelper.supported", "true");
-        registryFile = f;
-
-        String stclientCmd = Util.getSvcClientCommand(registryFile.getCanonicalPath());
-        System.out.println("stclient cmd: " + stclientCmd);
-        System.setProperty("servicetag.stclient.cmd", stclientCmd);
-
-        // get the Registry object after the system properties are set
-        registry = Registry.getSystemRegistry();
-        return registry;
-    }
-
-    static void emptyRegistryFile() throws IOException {
-        if (registryFile.exists()) {
-            BufferedOutputStream out = new BufferedOutputStream(
-                new FileOutputStream(registryFile));
-            try {
-                RegistrationData data = new RegistrationData();
-                data.storeToXML(out);
-            } finally {
-                out.close();
-            }
-        }
-    }
-}
--- a/jdk/test/com/sun/servicetag/ValidRegistrationData.java	Tue Apr 02 14:13:13 2013 -0400
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,112 +0,0 @@
-/*
- * Copyright (c) 2008, 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.
- */
-
-/*
- * @test
- * @bug     6622366
- * @summary Basic Test for reading a valid registration
- * @author  Mandy Chung
- *
- * @run build ValidRegistrationData
- * @run main ValidRegistrationData
- */
-
-import com.sun.servicetag.*;
-import java.io.*;
-import java.util.*;
-
-public class ValidRegistrationData {
-    private static String registrationDir = System.getProperty("test.classes");
-    private static String servicetagDir = System.getProperty("test.src");
-    private static RegistrationData registration;
-    private static Map<String, ServiceTag> stMap =
-        new LinkedHashMap<String, ServiceTag>();
-    private static String[] files = new String[] {
-                                        "servicetag1.properties",
-                                        "servicetag2.properties",
-                                        "servicetag3.properties"
-                                    };
-    private static String URN = "urn:st:9543ffaa-a4f1-4f77-b2d1-f561922d4e4a";
-
-    public static void main(String[] argv) throws Exception {
-        File f = new File(servicetagDir, "registration.xml");
-
-        // load the registration data with all service tags
-        BufferedInputStream in = new BufferedInputStream(new FileInputStream(f));
-        registration = RegistrationData.loadFromXML(in);
-        if (!registration.getRegistrationURN().equals(URN)){
-            throw new RuntimeException("Invalid URN=" +
-                registration.getRegistrationURN());
-        }
-        Map<String,String> environMap = registration.getEnvironmentMap();
-        checkEnvironmentMap(environMap);
-
-        // set environment
-        setInvalidEnvironment("hostname", "");
-        setInvalidEnvironment("osName", "");
-        setInvalidEnvironment("invalid", "");
-    }
-
-    private static void checkEnvironmentMap(Map<String,String> envMap)
-            throws Exception {
-        Properties props = new Properties();
-        File f = new File(servicetagDir, "environ.properties");
-        FileReader reader = new FileReader(f);
-        try {
-            props.load(reader);
-        } finally {
-            reader.close();
-        }
-        for (Map.Entry<String,String> entry : envMap.entrySet()) {
-            String name = entry.getKey();
-            String value = entry.getValue();
-            String expected = props.getProperty(name);
-            if (expected == null || !value.equals(expected)) {
-                throw new RuntimeException("Invalid environment " +
-                    name + "=" + value);
-            }
-            props.remove(name);
-        }
-        if (!props.isEmpty()) {
-            System.out.println("Environment missing: ");
-            for (String s : props.stringPropertyNames()) {
-                System.out.println("   " + s + "=" + props.getProperty(s));
-            }
-            throw new RuntimeException("Invalid environment read");
-        }
-    }
-    private static void setInvalidEnvironment(String name, String value) {
-        boolean invalid = false;
-        try {
-            registration.setEnvironment(name, value);
-        } catch (IllegalArgumentException e) {
-            invalid = true;
-        }
-        if (!invalid) {
-           throw new RuntimeException(name + "=" + value +
-               " set but expected to fail.");
-        }
-    }
-}
--- a/jdk/test/com/sun/servicetag/environ.properties	Tue Apr 02 14:13:13 2013 -0400
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,9 +0,0 @@
-hostname=ko
-hostId=83abc1ab
-osName=SunOS
-osVersion=5.10
-osArchitecture=sparc
-systemModel=Sun-Fire-V440
-systemManufacturer=Oracle Corporation
-cpuManufacturer=Oracle Corporation
-serialNumber=BEL078932
--- a/jdk/test/com/sun/servicetag/missing-environ-field.xml	Tue Apr 02 14:13:13 2013 -0400
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,45 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<registration_data version="1.0">
-<environment>
-<hostname>ko</hostname>
-<hostId/>
-<osName>SunOS</osName>
-<osVersion>5.10</osVersion>
-<osArchitecture>sparc</osArchitecture>
-<systemModel/>
-<systemManufacturer/>
-<cpuManufacturer/>
-</environment>
-<registry urn="urn:st:9b2c801f-89d5-431e-a930-1335a9049124" version="1.0">
-<service_tag>
-<instance_urn>urn:st:9efff93a-767c-4714-fcfa-c48988293110</instance_urn>
-<product_name>Java SE 6 Runtime Environment</product_name>
-<product_version>1.6.0-internal</product_version>
-<product_urn>urn:uuid:92d1de8c-1e59-42c6-a280-1c379526bcbc</product_urn>
-<product_parent_urn>urn:uuid:fdc90b21-018d-4cab-b866-612c7c119ed3</product_parent_urn>
-<product_parent>Java Platform Standard Edition 6 (Java SE 6)</product_parent>
-<product_defined_inst_id>id=1.6.0-internal-b00 sparc,dir=/myjdk/solaris-sparc</product_defined_inst_id>
-<product_vendor>Oracle Corporation</product_vendor>
-<platform_arch>sparc</platform_arch>
-<timestamp>2007-11-12 06:15:11 GMT</timestamp>
-<container>global</container>
-<source>servicetag1.properties</source>
-<installer_uid>121937</installer_uid>
-</service_tag>
-<service_tag>
-<instance_urn>urn:st:0e9712bf-4832-e315-8e40-c4b17ffac9a9</instance_urn>
-<product_name>Java SE 6 Development Kit</product_name>
-<product_version>1.6.0</product_version>
-<product_urn>urn:uuid:b58ef9a8-5ae8-11db-a023-080020a9ed93</product_urn>
-<product_parent_urn>urn:uuid:fdc90b21-018d-4cab-b866-612c7c119ed3</product_parent_urn>
-<product_parent>Java Platform Standard Edition 6 (Java SE 6)</product_parent>
-<product_defined_inst_id>id=1.6.0_05-b01 sparc,dir=/myjdk/solaris-i586</product_defined_inst_id>
-<product_vendor>Oracle Corporation</product_vendor>
-<platform_arch>i386</platform_arch>
-<timestamp>2007-11-12 06:15:11 GMT</timestamp>
-<container>global</container>
-<source>servicetag2.properties</source>
-<installer_uid>121937</installer_uid>
-</service_tag>
-</registry>
-</registration_data>
--- a/jdk/test/com/sun/servicetag/newer-registry-version.xml	Tue Apr 02 14:13:13 2013 -0400
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,32 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<registration_data version="1.0">
-<environment>
-<hostname>ko</hostname>
-<hostId/>
-<osName>SunOS</osName>
-<osVersion>5.10</osVersion>
-<osArchitecture>sparc</osArchitecture>
-<systemModel/>
-<systemManufacturer/>
-<cpuManufacturer/>
-<serialNumber/>
-</environment>
-<registry urn="urn:st:9543ffaa-a4f1-4f77-b2d1-f561922d4e4a" version="100.0">
-<service_tag>
-<instance_urn>urn:st:9efff93a-767c-4714-fcfa-c48988293110</instance_urn>
-<product_name>Java SE 6 Runtime Environment</product_name>
-<product_version>1.6.0-internal</product_version>
-<product_urn>urn:uuid:92d1de8c-1e59-42c6-a280-1c379526bcbc</product_urn>
-<product_parent_urn>urn:uuid:fdc90b21-018d-4cab-b866-612c7c119ed3</product_parent_urn>
-<product_parent>Java Platform Standard Edition 6 (Java SE 6)</product_parent>
-<product_defined_inst_id>id=1.6.0-internal-b00 sparc,dir=/myjdk/solaris-sparc</product_defined_inst_id>
-<product_vendor>Oracle Corporation</product_vendor>
-<platform_arch>sparc</platform_arch>
-<timestamp>2007-11-13 00:49:01 GMT</timestamp>
-<container>global</container>
-<source>servicetag1.properties</source>
-<installer_uid>121937</installer_uid>
-<NEW-FIELD/>
-</service_tag>
-</registry>
-</registration_data>
--- a/jdk/test/com/sun/servicetag/registration.xml	Tue Apr 02 14:13:13 2013 -0400
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,61 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<registration_data version="1.0">
-<environment>
-<hostname>ko</hostname>
-<hostId>83abc1ab</hostId>
-<osName>SunOS</osName>
-<osVersion>5.10</osVersion>
-<osArchitecture>sparc</osArchitecture>
-<systemModel>Sun-Fire-V440</systemModel>
-<systemManufacturer>Oracle Corporation</systemManufacturer>
-<cpuManufacturer>Oracle Corporation</cpuManufacturer>
-<serialNumber>BEL078932</serialNumber>
-</environment>
-<registry urn="urn:st:9543ffaa-a4f1-4f77-b2d1-f561922d4e4a" version="1.0">
-<service_tag>
-<instance_urn>urn:st:9efff93a-767c-4714-fcfa-c48988293110</instance_urn>
-<product_name>Java SE 6 Runtime Environment</product_name>
-<product_version>1.6.0-internal</product_version>
-<product_urn>urn:uuid:92d1de8c-1e59-42c6-a280-1c379526bcbc</product_urn>
-<product_parent_urn>urn:uuid:fdc90b21-018d-4cab-b866-612c7c119ed3</product_parent_urn>
-<product_parent>Java Platform Standard Edition 6 (Java SE 6)</product_parent>
-<product_defined_inst_id>id=1.6.0-internal-b00 sparc,dir=/myjdk/solaris-sparc</product_defined_inst_id>
-<product_vendor>Oracle Corporation</product_vendor>
-<platform_arch>sparc</platform_arch>
-<timestamp>2007-11-13 00:49:01 GMT</timestamp>
-<container>global</container>
-<source>servicetag1.properties</source>
-<installer_uid>121937</installer_uid>
-</service_tag>
-<service_tag>
-<instance_urn>urn:st:0e9712bf-4832-e315-8e40-c4b17ffac9a9</instance_urn>
-<product_name>Java SE 6 Development Kit</product_name>
-<product_version>1.6.0</product_version>
-<product_urn>urn:uuid:b58ef9a8-5ae8-11db-a023-080020a9ed93</product_urn>
-<product_parent_urn>urn:uuid:fdc90b21-018d-4cab-b866-612c7c119ed3</product_parent_urn>
-<product_parent>Java Platform Standard Edition 6 (Java SE 6)</product_parent>
-<product_defined_inst_id>id=1.6.0_05-b01 i386,dir=/myjdk/solaris-i586</product_defined_inst_id>
-<product_vendor>Oracle Corporation</product_vendor>
-<platform_arch>i386</platform_arch>
-<timestamp>2007-11-13 00:49:01 GMT</timestamp>
-<container>global</container>
-<source>servicetag2.properties</source>
-<installer_uid>121937</installer_uid>
-</service_tag>
-<service_tag>
-<instance_urn>urn:st:8a6ff75e-21a4-c8d7-bbda-de2c971bd67d</instance_urn>
-<product_name>Solaris 10 Operating System</product_name>
-<product_version>10</product_version>
-<product_urn>urn:uuid:5005588c-36f3-11d6-9cec-fc96f718e113</product_urn>
-<product_parent_urn>urn:uuid:596ffcfa-63d5-11d7-9886-ac816a682f92</product_parent_urn>
-<product_parent>Solaris Operating System</product_parent>
-<product_defined_inst_id/>
-<product_vendor>Oracle Corporation</product_vendor>
-<platform_arch>sparc</platform_arch>
-<timestamp>2007-11-13 00:49:01 GMT</timestamp>
-<container>global</container>
-<source>servicetag3.properties</source>
-<installer_uid>212883</installer_uid>
-</service_tag>
-</registry>
-</registration_data>
--- a/jdk/test/com/sun/servicetag/servicetag1.properties	Tue Apr 02 14:13:13 2013 -0400
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,13 +0,0 @@
-instance_urn=urn:st:9efff93a-767c-4714-fcfa-c48988293110
-product_name=Java SE 6 Runtime Environment
-product_version=1.6.0-internal
-product_urn=urn:uuid:92d1de8c-1e59-42c6-a280-1c379526bcbc
-product_parent_urn=urn:uuid:fdc90b21-018d-4cab-b866-612c7c119ed3
-product_parent=Java Platform Standard Edition 6 (Java SE 6)
-product_defined_inst_id=id=1.6.0-internal-b00 sparc,dir=/myjdk/solaris-sparc
-product_vendor=Oracle Corporation
-platform_arch=sparc
-timestamp=2007-11-12 05:19:40 GMT
-container=global
-source=servicetag1.properties
-installer_uid=121937
--- a/jdk/test/com/sun/servicetag/servicetag2.properties	Tue Apr 02 14:13:13 2013 -0400
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,13 +0,0 @@
-instance_urn=urn:st:0e9712bf-4832-e315-8e40-c4b17ffac9a9
-product_name=Java SE 6 Development Kit
-product_version=1.6.0
-product_urn=urn:uuid:b58ef9a8-5ae8-11db-a023-080020a9ed93
-product_parent_urn=urn:uuid:fdc90b21-018d-4cab-b866-612c7c119ed3
-product_parent=Java Platform Standard Edition 6 (Java SE 6)
-product_defined_inst_id=id=1.6.0_05-b01 i386,dir=/myjdk/solaris-i586
-product_vendor=Oracle Corporation
-platform_arch=i386
-timestamp=2007-11-12 06:12:21 GMT
-container=global
-source=servicetag2.properties
-installer_uid=121937
--- a/jdk/test/com/sun/servicetag/servicetag3.properties	Tue Apr 02 14:13:13 2013 -0400
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,13 +0,0 @@
-instance_urn=urn:st:8a6ff75e-21a4-c8d7-bbda-de2c971bd67d
-product_name=Solaris 10 Operating System
-product_version=10
-product_urn=urn:uuid:5005588c-36f3-11d6-9cec-fc96f718e113
-product_parent_urn=urn:uuid:596ffcfa-63d5-11d7-9886-ac816a682f92
-product_parent=Solaris Operating System
-product_defined_inst_id=
-product_vendor=Oracle Corporation
-platform_arch=sparc
-timestamp=2007-06-20 22:07:11 GMT
-container=global
-source=servicetag3.properties
-installer_uid=212883
--- a/jdk/test/com/sun/servicetag/servicetag4.properties	Tue Apr 02 14:13:13 2013 -0400
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,13 +0,0 @@
-instance_urn=urn:st:b8171b45-a087-47b3-92c8-f2d9fb34e8c2
-product_name=Java SE 6 Runtime Environment
-product_version=1.6.0_05
-product_urn=urn:uuid:92d1de8c-1e59-42c6-a280-1c379526bcbc
-product_parent_urn=urn:uuid:fdc90b21-018d-4cab-b866-612c7c119ed3
-product_parent=Java Platform Standard Edition 6 (Java SE 6)
-product_defined_inst_id=id=1.6.0_05-b01 amd64,dir=/myjdk/linux-amd64
-product_vendor=Oracle Corporation
-platform_arch=x64
-timestamp=2007-12-12 05:19:40 GMT
-container=global
-source=servicetag4.properties
-installer_uid=121937
--- a/jdk/test/com/sun/servicetag/servicetag5.properties	Tue Apr 02 14:13:13 2013 -0400
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,13 +0,0 @@
-instance_urn=urn:st:1d4269a1-71e3-4e44-bc8f-3793da7928ed
-product_name=Java SE 6 Runtime Environment
-product_version=1.6.0_06
-product_urn=urn:uuid:92d1de8c-1e59-42c6-a280-1c379526bcbc
-product_parent_urn=urn:uuid:fdc90b21-018d-4cab-b866-612c7c119ed3
-product_parent=Java Platform Standard Edition 6 (Java SE 6)
-product_defined_inst_id=id=1.6.0_06-b06 i386,dir=/w/mchung/bundles/jdk1.6.0_05/jre
-product_vendor=Oracle Corporation
-platform_arch=x86
-timestamp=2007-11-29 17:59:42 GMT
-container=global
-source=servicetag5.properties
-installer_uid=-1
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/java/awt/Desktop/OpenByUNCPathNameTest/OpenByUNCPathNameTest.java	Tue Apr 02 15:31:24 2013 -0700
@@ -0,0 +1,98 @@
+/*
+ * Copyright (c) 2013, 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 6550588
+   @summary java.awt.Desktop cannot open file with Windows UNC filename
+   @author Anton Litvinov
+*/
+
+import java.awt.*;
+import java.awt.event.*;
+import java.io.*;
+
+public class OpenByUNCPathNameTest {
+    private static boolean validatePlatform() {
+        String osName = System.getProperty("os.name");
+        if (osName == null) {
+            throw new RuntimeException("Name of the current OS could not be retrieved.");
+        }
+        return osName.startsWith("Windows");
+    }
+
+    private static void openFile() throws IOException {
+        if (!Desktop.isDesktopSupported()) {
+            System.out.println("java.awt.Desktop is not supported on this platform.");
+        } else {
+            Desktop desktop = Desktop.getDesktop();
+            File file = File.createTempFile("Read Me File", ".txt");
+            try {
+                // Test opening of the file with Windows local file path.
+                desktop.open(file);
+                Robot robot = null;
+                try {
+                    Thread.sleep(5000);
+                    robot = new Robot();
+                } catch (Exception e) {
+                    e.printStackTrace();
+                }
+                pressAltF4Keys(robot);
+
+                // Test opening of the file with Windows UNC pathname.
+                String uncFilePath = "\\\\127.0.0.1\\" + file.getAbsolutePath().replace(':', '$');
+                File uncFile = new File(uncFilePath);
+                if (!uncFile.exists()) {
+                    throw new RuntimeException(String.format(
+                        "File with UNC pathname '%s' does not exist.", uncFilePath));
+                }
+                desktop.open(uncFile);
+                try {
+                    Thread.sleep(5000);
+                } catch (InterruptedException ie) {
+                    ie.printStackTrace();
+                }
+                pressAltF4Keys(robot);
+            } finally {
+                file.delete();
+            }
+        }
+    }
+
+    private static void pressAltF4Keys(Robot robot) {
+        if (robot != null) {
+            robot.keyPress(KeyEvent.VK_ALT);
+            robot.keyPress(KeyEvent.VK_F4);
+            robot.delay(50);
+            robot.keyRelease(KeyEvent.VK_F4);
+            robot.keyRelease(KeyEvent.VK_ALT);
+        }
+    }
+
+    public static void main(String[] args) throws IOException {
+        if (!validatePlatform()) {
+            System.out.println("This test is only for MS Windows OS.");
+        } else {
+            openFile();
+        }
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/java/awt/GraphicsDevice/CheckDisplayModes.java	Tue Apr 02 15:31:24 2013 -0700
@@ -0,0 +1,64 @@
+/*
+ * Copyright (c) 2013, 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 8007146
+ * @summary [macosx] Setting a display mode crashes JDK under VNC
+ * @author Alexander Scherbatiy
+ * @run main CheckDisplayModes
+ */
+import java.awt.DisplayMode;
+import java.awt.GraphicsDevice;
+import java.awt.GraphicsEnvironment;
+
+public class CheckDisplayModes {
+
+    public static void main(String[] args) {
+        GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment();
+        GraphicsDevice graphicDevice = ge.getDefaultScreenDevice();
+        DisplayMode defaultDisplayMode = graphicDevice.getDisplayMode();
+        checkDisplayMode(defaultDisplayMode);
+        graphicDevice.setDisplayMode(defaultDisplayMode);
+
+        DisplayMode[] displayModes = graphicDevice.getDisplayModes();
+        boolean isDefaultDisplayModeIncluded = false;
+        for (DisplayMode displayMode : displayModes) {
+            checkDisplayMode(displayMode);
+            graphicDevice.setDisplayMode(displayMode);
+            if (defaultDisplayMode.equals(displayMode)) {
+                isDefaultDisplayModeIncluded = true;
+            }
+        }
+
+        if (!isDefaultDisplayModeIncluded) {
+            throw new RuntimeException("Default display mode is not included");
+        }
+    }
+
+    static void checkDisplayMode(DisplayMode displayMode) {
+        if (displayMode == null || displayMode.getWidth() <= 1 || displayMode.getHeight() <= 1) {
+            throw new RuntimeException("invalid display mode");
+        }
+    }
+}
--- a/jdk/test/java/beans/Introspector/TestTypeResolver.java	Tue Apr 02 14:13:13 2013 -0400
+++ b/jdk/test/java/beans/Introspector/TestTypeResolver.java	Tue Apr 02 15:31:24 2013 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2007, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2007, 2013, 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
@@ -30,6 +30,7 @@
 import com.sun.beans.TypeResolver;
 
 import java.lang.annotation.Annotation;
+import java.lang.reflect.AnnotatedType;
 import java.lang.reflect.Field;
 import java.lang.reflect.GenericDeclaration;
 import java.lang.reflect.Method;
@@ -199,6 +200,19 @@
         public Annotation[] getDeclaredAnnotations() {
             return null; // not used
         }
+
+        public AnnotatedType[] getAnnotatedBounds() {
+            return null; // not used
+        }
+
+        public <T extends Annotation> T[] getAnnotationsByType(Class<T> annotationClass) {
+            return null; // not used
+        }
+
+        public <T extends Annotation> T[] getDeclaredAnnotationsByType(Class<T> annotationClass) {
+            return null; // not used
+        }
+
     }
 
     private static class ClassTypeVariable extends TypeVariableImpl<Class<?>> {
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/java/lang/invoke/8009222/Test8009222.java	Tue Apr 02 15:31:24 2013 -0700
@@ -0,0 +1,49 @@
+/*
+ * Copyright (c) 2013, 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 8009222
+ * @summary java.lang.IllegalArgumentException: not invocable, no method type
+ * when attempting to get getter method handle for a static field
+ *
+ * @run main/othervm Test8009222
+ */
+
+import java.lang.invoke.MethodHandle;
+import java.lang.invoke.MethodHandles;
+
+interface Intf {
+    static int i = 0;
+}
+
+public class Test8009222 {
+    public static void main(String[] args) throws Exception {
+        MethodHandles.lookup()
+                .findStaticGetter(Intf.class, "i", int.class)
+                .getClass(); // null check
+
+        System.out.println("TEST PASSED");
+    }
+}
--- a/jdk/test/java/nio/channels/DatagramChannel/Connect.java	Tue Apr 02 14:13:13 2013 -0400
+++ b/jdk/test/java/nio/channels/DatagramChannel/Connect.java	Tue Apr 02 15:31:24 2013 -0700
@@ -22,6 +22,7 @@
  */
 
 /* @test
+ * @bug 4313882 7183800
  * @summary Test DatagramChannel's send and receive methods
  * @author Mike McCloskey
  */
@@ -88,6 +89,9 @@
                 bb.put("hello".getBytes());
                 bb.flip();
                 InetAddress address = InetAddress.getLocalHost();
+                if (address.isLoopbackAddress()) {
+                    address = InetAddress.getLoopbackAddress();
+                }
                 InetSocketAddress isa = new InetSocketAddress(address, port);
                 dc.connect(isa);
                 dc.write(bb);
--- a/jdk/test/java/nio/channels/DatagramChannel/ConnectedSend.java	Tue Apr 02 14:13:13 2013 -0400
+++ b/jdk/test/java/nio/channels/DatagramChannel/ConnectedSend.java	Tue Apr 02 15:31:24 2013 -0700
@@ -22,7 +22,7 @@
  */
 
 /* @test
- * @bug 4849277
+ * @bug 4849277 7183800
  * @summary Test DatagramChannel send while connected
  * @author Mike McCloskey
  */
@@ -46,14 +46,18 @@
 
         DatagramChannel sndChannel = DatagramChannel.open();
         sndChannel.socket().bind(null);
+        InetAddress address = InetAddress.getLocalHost();
+        if (address.isLoopbackAddress()) {
+            address = InetAddress.getLoopbackAddress();
+        }
         InetSocketAddress sender = new InetSocketAddress(
-            InetAddress.getLocalHost(),
+            address,
             sndChannel.socket().getLocalPort());
 
         DatagramChannel rcvChannel = DatagramChannel.open();
         rcvChannel.socket().bind(null);
         InetSocketAddress receiver = new InetSocketAddress(
-            InetAddress.getLocalHost(),
+            address,
             rcvChannel.socket().getLocalPort());
 
         rcvChannel.connect(sender);
@@ -80,14 +84,18 @@
     private static void test2() throws Exception {
         DatagramChannel sndChannel = DatagramChannel.open();
         sndChannel.socket().bind(null);
+        InetAddress address = InetAddress.getLocalHost();
+        if (address.isLoopbackAddress()) {
+            address = InetAddress.getLoopbackAddress();
+        }
         InetSocketAddress sender = new InetSocketAddress(
-            InetAddress.getLocalHost(),
+            address,
             sndChannel.socket().getLocalPort());
 
         DatagramChannel rcvChannel = DatagramChannel.open();
         rcvChannel.socket().bind(null);
         InetSocketAddress receiver = new InetSocketAddress(
-            InetAddress.getLocalHost(),
+            address,
             rcvChannel.socket().getLocalPort());
 
         rcvChannel.connect(sender);
--- a/jdk/test/java/nio/channels/spi/SelectorProvider/inheritedChannel/Launcher.java	Tue Apr 02 14:13:13 2013 -0400
+++ b/jdk/test/java/nio/channels/spi/SelectorProvider/inheritedChannel/Launcher.java	Tue Apr 02 15:31:24 2013 -0700
@@ -133,8 +133,11 @@
         dc.close();
 
         dc = DatagramChannel.open();
-
-        InetSocketAddress isa = new InetSocketAddress(InetAddress.getLocalHost(), port);
+        InetAddress address = InetAddress.getLocalHost();
+        if (address.isLoopbackAddress()) {
+            address = InetAddress.getLoopbackAddress();
+        }
+        InetSocketAddress isa = new InetSocketAddress(address, port);
 
         dc.connect(isa);
         return dc;
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/java/util/Optional/Basic.java	Tue Apr 02 15:31:24 2013 -0700
@@ -0,0 +1,122 @@
+/*
+ * Copyright (c) 2013, 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
+ * @summary Basic functional test of Optional
+ * @author Mike Duigou
+ * @run testng Basic
+ */
+
+import java.util.NoSuchElementException;
+import java.util.Optional;
+
+import static org.testng.Assert.*;
+import org.testng.annotations.Test;
+
+
+public class Basic {
+
+    @Test(groups = "unit")
+    public void testEmpty() {
+        Optional<Boolean> empty = Optional.empty();
+        Optional<String> presentEmptyString = Optional.of("");
+        Optional<Boolean> present = Optional.of(Boolean.TRUE);
+
+        // empty
+        assertTrue(empty.equals(empty));
+        assertTrue(empty.equals(Optional.empty()));
+        assertTrue(!empty.equals(present));
+        assertTrue(0 == empty.hashCode());
+        assertTrue(!empty.toString().isEmpty());
+        assertTrue(!empty.toString().equals(presentEmptyString.toString()));
+        assertTrue(!empty.isPresent());
+        empty.ifPresent(v -> { fail(); });
+        assertSame(null, empty.orElse(null));
+        RuntimeException orElse = new RuntimeException() { };
+        assertSame(Boolean.FALSE, empty.orElse(Boolean.FALSE));
+        assertSame(null, empty.orElseGet(()-> null));
+        assertSame(Boolean.FALSE, empty.orElseGet(()-> Boolean.FALSE));
+    }
+
+        @Test(expectedExceptions=NoSuchElementException.class)
+        public void testEmptyGet() {
+            Optional<Boolean> empty = Optional.empty();
+
+            Boolean got = empty.get();
+        }
+
+        @Test(expectedExceptions=NullPointerException.class)
+        public void testEmptyOrElseGetNull() {
+            Optional<Boolean> empty = Optional.empty();
+
+            Boolean got = empty.orElseGet(null);
+        }
+
+        @Test(expectedExceptions=NullPointerException.class)
+        public void testEmptyOrElseThrowNull() throws Throwable {
+            Optional<Boolean> empty = Optional.empty();
+
+            Boolean got = empty.orElseThrow(null);
+        }
+
+        @Test(expectedExceptions=ObscureException.class)
+        public void testEmptyOrElseThrow() throws Exception {
+            Optional<Boolean> empty = Optional.empty();
+
+            Boolean got = empty.orElseThrow(ObscureException::new);
+        }
+
+        @Test(groups = "unit")
+        public void testPresent() {
+        Optional<Boolean> empty = Optional.empty();
+        Optional<String> presentEmptyString = Optional.of("");
+        Optional<Boolean> present = Optional.of(Boolean.TRUE);
+
+        // present
+        assertTrue(present.equals(present));
+        assertTrue(present.equals(Optional.of(Boolean.TRUE)));
+        assertTrue(!present.equals(empty));
+        assertTrue(Boolean.TRUE.hashCode() == present.hashCode());
+        assertTrue(!present.toString().isEmpty());
+        assertTrue(!present.toString().equals(presentEmptyString.toString()));
+        assertTrue(-1 != present.toString().indexOf(Boolean.TRUE.toString()));
+        assertSame(Boolean.TRUE, present.get());
+        try {
+            present.ifPresent(v -> { throw new ObscureException(); });
+            fail();
+        } catch(ObscureException expected) {
+
+        }
+        assertSame(Boolean.TRUE, present.orElse(null));
+        assertSame(Boolean.TRUE, present.orElse(Boolean.FALSE));
+        assertSame(Boolean.TRUE, present.orElseGet(null));
+        assertSame(Boolean.TRUE, present.orElseGet(()-> null));
+        assertSame(Boolean.TRUE, present.orElseGet(()-> Boolean.FALSE));
+        assertSame(Boolean.TRUE, present.<RuntimeException>orElseThrow( null));
+        assertSame(Boolean.TRUE, present.<RuntimeException>orElseThrow(ObscureException::new));
+    }
+
+    private static class ObscureException extends RuntimeException {
+
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/java/util/Optional/BasicDouble.java	Tue Apr 02 15:31:24 2013 -0700
@@ -0,0 +1,115 @@
+/*
+ * Copyright (c) 2013, 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.0 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.0 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.0 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
+ * @summary Basic functional test of OptionalDouble
+ * @author Mike Duigou
+ * @run testng BasicDouble
+ */
+
+import java.util.NoSuchElementException;
+import java.util.OptionalDouble;
+
+import static org.testng.Assert.*;
+import org.testng.annotations.Test;
+
+
+public class BasicDouble {
+
+    @Test(groups = "unit")
+    public void testEmpty() {
+        OptionalDouble empty = OptionalDouble.empty();
+        OptionalDouble present = OptionalDouble.of(1.0);
+
+        // empty
+        assertTrue(empty.equals(empty));
+        assertTrue(empty.equals(OptionalDouble.empty()));
+        assertTrue(!empty.equals(present));
+        assertTrue(0 == empty.hashCode());
+        assertTrue(!empty.toString().isEmpty());
+        assertTrue(!empty.isPresent());
+        empty.ifPresent(v -> { fail(); });
+        assertEquals(2.0, empty.orElse(2.0));
+        assertEquals(2.0, empty.orElseGet(()-> 2.0));
+    }
+
+        @Test(expectedExceptions=NoSuchElementException.class)
+        public void testEmptyGet() {
+            OptionalDouble empty = OptionalDouble.empty();
+
+            double got = empty.getAsDouble();
+        }
+
+        @Test(expectedExceptions=NullPointerException.class)
+        public void testEmptyOrElseGetNull() {
+            OptionalDouble empty = OptionalDouble.empty();
+
+            double got = empty.orElseGet(null);
+        }
+
+        @Test(expectedExceptions=NullPointerException.class)
+        public void testEmptyOrElseThrowNull() throws Throwable {
+            OptionalDouble empty = OptionalDouble.empty();
+
+            double got = empty.orElseThrow(null);
+        }
+
+        @Test(expectedExceptions=ObscureException.class)
+        public void testEmptyOrElseThrow() throws Exception {
+            OptionalDouble empty = OptionalDouble.empty();
+
+            double got = empty.orElseThrow(ObscureException::new);
+        }
+
+        @Test(groups = "unit")
+        public void testPresent() {
+        OptionalDouble empty = OptionalDouble.empty();
+        OptionalDouble present = OptionalDouble.of(1.0);
+
+        // present
+        assertTrue(present.equals(present));
+        assertFalse(present.equals(OptionalDouble.of(0.0)));
+        assertTrue(present.equals(OptionalDouble.of(1.0)));
+        assertTrue(!present.equals(empty));
+        assertTrue(Double.hashCode(1.0) == present.hashCode());
+        assertFalse(present.toString().isEmpty());
+        assertTrue(-1 != present.toString().indexOf(Double.toString(present.getAsDouble()).toString()));
+        assertEquals(1.0, present.getAsDouble());
+        try {
+            present.ifPresent(v -> { throw new ObscureException(); });
+            fail();
+        } catch(ObscureException expected) {
+
+        }
+        assertEquals(1.0, present.orElse(2.0));
+        assertEquals(1.0, present.orElseGet(null));
+        assertEquals(1.0, present.orElseGet(()-> 2.0));
+        assertEquals(1.0, present.orElseGet(()-> 3.0));
+        assertEquals(1.0, present.<RuntimeException>orElseThrow(null));
+        assertEquals(1.0, present.<RuntimeException>orElseThrow(ObscureException::new));
+    }
+
+    private static class ObscureException extends RuntimeException {
+
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/java/util/Optional/BasicInt.java	Tue Apr 02 15:31:24 2013 -0700
@@ -0,0 +1,115 @@
+/*
+ * Copyright (c) 2013, 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
+ * @summary Basic functional test of OptionalInt
+ * @author Mike Duigou
+ * @run testng BasicInt
+ */
+
+import java.util.NoSuchElementException;
+import java.util.OptionalInt;
+
+import static org.testng.Assert.*;
+import org.testng.annotations.Test;
+
+
+public class BasicInt {
+
+    @Test(groups = "unit")
+    public void testEmpty() {
+        OptionalInt empty = OptionalInt.empty();
+        OptionalInt present = OptionalInt.of(1);
+
+        // empty
+        assertTrue(empty.equals(empty));
+        assertTrue(empty.equals(OptionalInt.empty()));
+        assertTrue(!empty.equals(present));
+        assertTrue(0 == empty.hashCode());
+        assertTrue(!empty.toString().isEmpty());
+        assertTrue(!empty.isPresent());
+        empty.ifPresent(v -> { fail(); });
+        assertEquals(2, empty.orElse(2));
+        assertEquals(2, empty.orElseGet(()-> 2));
+    }
+
+        @Test(expectedExceptions=NoSuchElementException.class)
+        public void testEmptyGet() {
+            OptionalInt empty = OptionalInt.empty();
+
+            int got = empty.getAsInt();
+        }
+
+        @Test(expectedExceptions=NullPointerException.class)
+        public void testEmptyOrElseGetNull() {
+            OptionalInt empty = OptionalInt.empty();
+
+            int got = empty.orElseGet(null);
+        }
+
+        @Test(expectedExceptions=NullPointerException.class)
+        public void testEmptyOrElseThrowNull() throws Throwable {
+            OptionalInt empty = OptionalInt.empty();
+
+            int got = empty.orElseThrow(null);
+        }
+
+        @Test(expectedExceptions=ObscureException.class)
+        public void testEmptyOrElseThrow() throws Exception {
+            OptionalInt empty = OptionalInt.empty();
+
+            int got = empty.orElseThrow(ObscureException::new);
+        }
+
+        @Test(groups = "unit")
+        public void testPresent() {
+        OptionalInt empty = OptionalInt.empty();
+        OptionalInt present = OptionalInt.of(1);
+
+        // present
+        assertTrue(present.equals(present));
+        assertFalse(present.equals(OptionalInt.of(0)));
+        assertTrue(present.equals(OptionalInt.of(1)));
+        assertFalse(present.equals(empty));
+        assertTrue(Integer.hashCode(1) == present.hashCode());
+        assertFalse(present.toString().isEmpty());
+        assertTrue(-1 != present.toString().indexOf(Integer.toString(present.getAsInt()).toString()));
+        assertEquals(1, present.getAsInt());
+        try {
+            present.ifPresent(v -> { throw new ObscureException(); });
+            fail();
+        } catch(ObscureException expected) {
+
+        }
+        assertEquals(1, present.orElse(2));
+        assertEquals(1, present.orElseGet(null));
+        assertEquals(1, present.orElseGet(()-> 2));
+        assertEquals(1, present.orElseGet(()-> 3));
+        assertEquals(1, present.<RuntimeException>orElseThrow(null));
+        assertEquals(1, present.<RuntimeException>orElseThrow(ObscureException::new));
+    }
+
+    private static class ObscureException extends RuntimeException {
+
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/java/util/Optional/BasicLong.java	Tue Apr 02 15:31:24 2013 -0700
@@ -0,0 +1,115 @@
+/*
+ * Copyright (c) 2013, 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
+ * @summary Basic functional test of OptionalLong
+ * @author Mike Duigou
+ * @run testng BasicLong
+ */
+
+import java.util.NoSuchElementException;
+import java.util.OptionalLong;
+
+import static org.testng.Assert.*;
+import org.testng.annotations.Test;
+
+
+public class BasicLong {
+
+    @Test(groups = "unit")
+    public void testEmpty() {
+        OptionalLong empty = OptionalLong.empty();
+        OptionalLong present = OptionalLong.of(1);
+
+        // empty
+        assertTrue(empty.equals(empty));
+        assertTrue(empty.equals(OptionalLong.empty()));
+        assertTrue(!empty.equals(present));
+        assertTrue(0 == empty.hashCode());
+        assertTrue(!empty.toString().isEmpty());
+        assertTrue(!empty.isPresent());
+        empty.ifPresent(v -> { fail(); });
+        assertEquals(2, empty.orElse(2));
+        assertEquals(2, empty.orElseGet(()-> 2));
+    }
+
+        @Test(expectedExceptions=NoSuchElementException.class)
+        public void testEmptyGet() {
+            OptionalLong empty = OptionalLong.empty();
+
+            long got = empty.getAsLong();
+        }
+
+        @Test(expectedExceptions=NullPointerException.class)
+        public void testEmptyOrElseGetNull() {
+            OptionalLong empty = OptionalLong.empty();
+
+            long got = empty.orElseGet(null);
+        }
+
+        @Test(expectedExceptions=NullPointerException.class)
+        public void testEmptyOrElseThrowNull() throws Throwable {
+            OptionalLong empty = OptionalLong.empty();
+
+            long got = empty.orElseThrow(null);
+        }
+
+        @Test(expectedExceptions=ObscureException.class)
+        public void testEmptyOrElseThrow() throws Exception {
+            OptionalLong empty = OptionalLong.empty();
+
+            long got = empty.orElseThrow(ObscureException::new);
+        }
+
+        @Test(groups = "unit")
+        public void testPresent() {
+        OptionalLong empty = OptionalLong.empty();
+        OptionalLong present = OptionalLong.of(1L);
+
+        // present
+        assertTrue(present.equals(present));
+        assertFalse(present.equals(OptionalLong.of(0L)));
+        assertTrue(present.equals(OptionalLong.of(1L)));
+        assertFalse(present.equals(empty));
+        assertTrue(Long.hashCode(1) == present.hashCode());
+        assertFalse(present.toString().isEmpty());
+        assertTrue(-1 != present.toString().indexOf(Long.toString(present.getAsLong()).toString()));
+        assertEquals(1L, present.getAsLong());
+        try {
+            present.ifPresent(v -> { throw new ObscureException(); });
+            fail();
+        } catch(ObscureException expected) {
+
+        }
+        assertEquals(1, present.orElse(2));
+        assertEquals(1, present.orElseGet(null));
+        assertEquals(1, present.orElseGet(()-> 2));
+        assertEquals(1, present.orElseGet(()-> 3));
+        assertEquals(1, present.<RuntimeException>orElseThrow(null));
+        assertEquals(1, present.<RuntimeException>orElseThrow(ObscureException::new));
+    }
+
+    private static class ObscureException extends RuntimeException {
+
+    }
+}
--- a/jdk/test/java/util/logging/CustomLogManager.java	Tue Apr 02 14:13:13 2013 -0400
+++ b/jdk/test/java/util/logging/CustomLogManager.java	Tue Apr 02 15:31:24 2013 -0700
@@ -43,6 +43,20 @@
         INSTANCE = this;
     }
 
+    private boolean useParentHandlers(String loggerName) {
+        String s = props.getProperty(loggerName + ".useParentHandlers");
+        if (s == null)
+            return true;   // default is true
+
+        s = s.toLowerCase();
+        if (s.equals("true") || s.equals("1")) {
+           return true;
+        } else if (s.equals("false") || s.equals("0")) {
+           return false;
+        }
+        return true;
+    }
+
     public synchronized boolean addLogger(Logger logger) {
         String name = logger.getName();
         if (namedLoggers.containsKey(name)) {
@@ -57,6 +71,9 @@
         if (props.get(name + ".handlers") != null && logger.getHandlers().length == 0) {
             logger.addHandler(new CustomHandler());
         }
+        if (!useParentHandlers(name)) {
+            logger.setUseParentHandlers(false);
+        }
         // add parent loggers
         int ix = 1;
         for (;;) {
@@ -72,7 +89,10 @@
                 //
                 // The test doesn't set the parent for simplicity.
                 if (!namedLoggers.containsKey(pname)) {
-                    Logger.getLogger(pname);
+                    Logger parent = Logger.getLogger(pname);
+                    if (!useParentHandlers(pname)) {
+                        parent.setUseParentHandlers(false);
+                    }
                 }
             }
             ix = ix2 + 1;
@@ -110,14 +130,16 @@
         props.put("CustomLogManager$CustomHandler.level", "WARNING");
         props.put(".handlers", "CustomLogManager$CustomHandler");
         props.put("org.foo.bar.level", "SEVERE");
+        props.put("org.foo.bar.useParentHandlers", "true");
         props.put("org.foo.handlers", "CustomLogManager$CustomHandler");
+        props.put("org.foo.useParentHandlers", "false");
         props.put("org.openjdk.level", "SEVERE");
         props.put("org.openjdk.handlers", "CustomLogManager$CustomHandler");
         props.put("org.openjdk.core.level", "INFO");
+        props.put("org.openjdk.core.useParentHandlers", "false");
 
         return props;
     }
-
     public static void checkLogger(String name) {
         checkLogger(name, null);
     }
@@ -127,10 +149,11 @@
         if (logger == null) {
             throw new RuntimeException("Logger \"" + name + "\" not exist");
         }
-        System.out.format("Logger \"%s\" level=%s handlers=%s resourcebundle=%s%n",
+        System.out.format("Logger \"%s\" level=%s handlers=%s resourcebundle=%s useParentHandlers=%s%n",
             name, logger.getLevel(),
             Arrays.toString(logger.getHandlers()),
-            logger.getResourceBundleName());
+            logger.getResourceBundleName(),
+            logger.getUseParentHandlers());
         String rb = logger.getResourceBundleName();
         if (rb != resourceBundleName && (rb == null || rb.equals(resourceBundleName))) {
             throw new RuntimeException("Logger \"" + name +
@@ -150,6 +173,13 @@
             throw new RuntimeException("Logger \"" + name + "\" unexpected handler: " +
                 Arrays.toString(handlers));
         }
+
+        String s = INSTANCE.getProperty(name + ".useParentHandlers");
+        boolean uph = (s != null && s.equals("false")) ? false : true;
+        if (logger.getUseParentHandlers() != uph) {
+            throw new RuntimeException("Logger \"" + name + "\" unexpected useParentHandlers: " +
+                logger.getUseParentHandlers());
+        }
         checkParents(name);
     }
 
--- a/jdk/test/java/util/logging/CustomLogManagerTest.java	Tue Apr 02 14:13:13 2013 -0400
+++ b/jdk/test/java/util/logging/CustomLogManagerTest.java	Tue Apr 02 15:31:24 2013 -0700
@@ -29,7 +29,7 @@
 
 /*
  * @test
- * @bug 8005615
+ * @bug 8005615 8006104
  * @summary Add loggers to custom log manager
  *
  * @compile -XDignore.symbol.file CustomLogManagerTest.java CustomLogManager.java
--- a/jdk/test/java/util/logging/LoggerResourceBundleRace.java	Tue Apr 02 14:13:13 2013 -0400
+++ b/jdk/test/java/util/logging/LoggerResourceBundleRace.java	Tue Apr 02 15:31:24 2013 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2011, 2012, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2011, 2013, 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
@@ -23,13 +23,14 @@
 
 /*
  * @test
- * @bug     7045594
+ * @bug     7045594 8002070
  * @summary ResourceBundle setting race in Logger.getLogger(name, rbName)
  * @author  Daniel D. Daugherty
  * @build RacingThreadsTest LoggerResourceBundleRace
- * @run main LoggerResourceBundleRace
+ * @run main/othervm LoggerResourceBundleRace
+ *
+ * (In samevm mode, the bundle classes don't end up in the classpath.)
  */
-
 import java.util.ListResourceBundle;
 import java.util.MissingResourceException;
 import java.util.concurrent.atomic.AtomicInteger;
--- a/jdk/test/javax/management/remote/mandatory/connection/RMIConnectionIdTest.java	Tue Apr 02 14:13:13 2013 -0400
+++ b/jdk/test/javax/management/remote/mandatory/connection/RMIConnectionIdTest.java	Tue Apr 02 15:31:24 2013 -0700
@@ -23,7 +23,7 @@
 
 /*
  * @test
- * @bug 4901808
+ * @bug 4901808 7183800
  * @summary Check that RMI connection ids include client host name
  * @author Eamonn McManus
  * @run clean RMIConnectionIdTest
@@ -60,7 +60,7 @@
         }
         String clientAddr = rest.substring(0, spaceIndex);
         InetAddress clientInetAddr = InetAddress.getByName(clientAddr);
-        InetAddress localAddr = InetAddress.getLocalHost();
+        InetAddress localAddr = clientInetAddr.isLoopbackAddress() ? InetAddress.getLoopbackAddress() : InetAddress.getLocalHost();
         System.out.println("InetAddresses: local=" + localAddr + "; " +
                            "connectionId=" + clientInetAddr);
         if (!localAddr.equals(clientInetAddr)) {
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/javax/swing/JMenu/4515762/bug4515762.java	Tue Apr 02 15:31:24 2013 -0700
@@ -0,0 +1,172 @@
+/*
+ * Copyright (c) 2013, 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.
+ */
+
+import java.awt.*;
+import java.awt.event.*;
+import javax.swing.*;
+import sun.awt.SunToolkit;
+
+/**
+ * @test
+ * @bug 4515762
+ * @author Mark Davidson
+ * @summary Tests the ability to support duplicate mnemonics
+ * @library ../../regtesthelpers
+ * @build Util
+ * @run main bug4515762
+ */
+public class bug4515762 {
+
+    private static volatile boolean actionExpected = false;
+    private static volatile boolean actionRecieved = false;
+
+    /**
+     * @param str name of Menu
+     */
+    private static JMenuBar createMenuBar() {
+        JMenuBar menubar = new JMenuBar();
+
+        // Duplicate menu item test for 4515762
+        JMenu menu = new JMenu("Duplicate Menu");
+        menu.setMnemonic('D');
+        menu.add(createMenuItem("Sunday", 'S'));
+        menu.add(createMenuItem("Monday", 'M'));
+
+        menu.add(createMenuItem("Tuesday", 'S'));
+        menu.add(createMenuItem("Wednesday", 'S'));
+        menu.add(createMenuItem("Thursday", 'S'));
+        menu.add(createMenuItem("Friday", 'F'));
+        menu.add(createMenuItem("Saturday", 'S'));
+
+        // Control with unique menu
+        JMenu menu2 = new JMenu("Unique Menu");
+        menu2.setMnemonic('U');
+        menu2.add(createMenuItem("Sunday", 'S'));
+        menu2.add(createMenuItem("Monday", 'M'));
+
+        menu2.add(createMenuItem("Tuesday", 'T'));
+        menu2.add(createMenuItem("Wednesday", 'W'));
+        menu2.add(createMenuItem("Thursday", 'U'));
+        menu2.add(createMenuItem("Friday", 'F'));
+        menu2.add(createMenuItem("Saturday", 'A'));
+
+        menubar.add(menu);
+        menubar.add(menu2);
+
+        return menubar;
+    }
+
+    /**
+     * Creates and returns the menu item.
+     */
+    private static JMenuItem createMenuItem(String name, char mnemonic) {
+        JMenuItem menuItem = new JMenuItem(name, mnemonic);
+        menuItem.addActionListener(new ActionListener() {
+
+            @Override
+            public void actionPerformed(ActionEvent evt) {
+                JMenuItem item = (JMenuItem) evt.getSource();
+                if (actionExpected == false) {
+                    throw new RuntimeException("Menu Action: "
+                            + item.getText() + " should not be called");
+                } else {
+                    actionRecieved = true;
+                }
+            }
+        });
+
+        return menuItem;
+    }
+
+    public static void checkAction() {
+        if (actionRecieved == true) {
+            actionRecieved = false;
+        } else {
+            throw new RuntimeException("Action has not been received");
+        }
+    }
+
+    public static void main(String[] args) throws Throwable {
+        SunToolkit toolkit = (SunToolkit) Toolkit.getDefaultToolkit();
+        Robot robot = new Robot();
+        robot.setAutoDelay(250);
+
+        SwingUtilities.invokeAndWait(new Runnable() {
+
+            @Override
+            public void run() {
+                JFrame frame = new JFrame("Test");
+                frame.setJMenuBar(createMenuBar());
+                frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
+                frame.pack();
+                frame.setVisible(true);
+            }
+        });
+
+        toolkit.realSync();
+
+        Util.hitMnemonics(robot, KeyEvent.VK_D);
+        toolkit.realSync();
+
+        // Press the S key many times (should not cause an action peformed)
+        int TIMES = 5;
+        for (int i = 0; i < TIMES; i++) {
+            Util.hitKeys(robot, KeyEvent.VK_S);
+        }
+        toolkit.realSync();
+
+        // Unique menu items.
+        actionExpected = true;
+        Util.hitMnemonics(robot, KeyEvent.VK_U);
+
+        robot.keyPress(KeyEvent.VK_S);
+        robot.keyRelease(KeyEvent.VK_S);
+        toolkit.realSync();
+
+        checkAction();
+
+        Util.hitMnemonics(robot, KeyEvent.VK_U);
+        robot.keyPress(KeyEvent.VK_M);
+        robot.keyRelease(KeyEvent.VK_M);
+        toolkit.realSync();
+
+        checkAction();
+
+        Util.hitMnemonics(robot, KeyEvent.VK_U);
+        Util.hitKeys(robot, KeyEvent.VK_T);
+        toolkit.realSync();
+
+        checkAction();
+        Util.hitMnemonics(robot, KeyEvent.VK_U);
+        Util.hitKeys(robot, KeyEvent.VK_W);
+        toolkit.realSync();
+
+        checkAction();
+
+        Util.hitMnemonics(robot, KeyEvent.VK_U);
+        Util.hitKeys(robot, KeyEvent.VK_U);
+        toolkit.realSync();
+
+        checkAction();
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/javax/swing/JRootPane/4670486/bug4670486.java	Tue Apr 02 15:31:24 2013 -0700
@@ -0,0 +1,145 @@
+/*
+ * Copyright (c) 2013, 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.
+ */
+
+import java.awt.*;
+import java.awt.event.*;
+import javax.swing.*;
+import sun.awt.SunToolkit;
+
+/**
+ * @test
+ * @bug 4670486
+ * @author Mark Davidson
+ * @summary Regression: Popup menu bindings doesn't work when a default button has been defined.
+ * @library ../../regtesthelpers
+ * @build Util
+ * @run main bug4670486
+ */
+public class bug4670486 {
+
+    public static volatile boolean actionExpected = false;
+    public static volatile boolean actionRecieved = false;
+
+    private static JMenuBar createMenuBar() {
+        JMenuBar menubar = new JMenuBar();
+
+        // Control with unique menu
+        JMenu menu = new JMenu("Unique Menu");
+        menu.setMnemonic('U');
+        menu.add(createMenuItem("Sunday", 'S'));
+        menu.add(createMenuItem("Monday", 'M'));
+
+        menu.add(createMenuItem("Tuesday", 'T'));
+        menu.add(createMenuItem("Wednesday", 'W'));
+        menu.add(createMenuItem("Thursday", 'U'));
+        menu.add(createMenuItem("Friday", 'F'));
+        menu.add(createMenuItem("Saturday", 'A'));
+
+        menubar.add(menu);
+
+        return menubar;
+    }
+
+    private static JPanel createPanel(JFrame frame) {
+        JPanel panel = new JPanel();
+        JButton button = new JButton("Button");
+        JButton button2 = new JButton("Button 2");
+        JButton button3 = new JButton("Button 3");
+
+        JRootPane root = frame.getRootPane();
+        root.setDefaultButton(button);
+
+        panel.add(button);
+        panel.add(button2);
+        panel.add(button3);
+
+        return panel;
+    }
+
+    /**
+     * Creates and returns the menu item.
+     */
+    private static JMenuItem createMenuItem(String name, char mnemonic) {
+        JMenuItem menuItem = new JMenuItem(name, mnemonic);
+        menuItem.addActionListener(new ActionListener() {
+
+            @Override
+            public void actionPerformed(ActionEvent evt) {
+                actionRecieved = true;
+            }
+        });
+
+        return menuItem;
+    }
+
+    public static void checkAction() {
+        if (actionRecieved == true) {
+            actionRecieved = false;
+        } else {
+            throw new RuntimeException("Action has not been received");
+        }
+    }
+
+    public static void main(String[] args) throws Throwable {
+        SunToolkit toolkit = (SunToolkit) Toolkit.getDefaultToolkit();
+        Robot robot = new Robot();
+        robot.setAutoDelay(250);
+
+        UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
+
+        SwingUtilities.invokeAndWait(new Runnable() {
+
+            @Override
+            public void run() {
+                JFrame frame = new JFrame("Test");
+                frame.setContentPane(createPanel(frame));
+                frame.setJMenuBar(createMenuBar());
+                frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
+                frame.pack();
+                frame.setVisible(true);
+            }
+        });
+
+        toolkit.realSync();
+
+        // Change the default button to
+        // force a call to BasicRootPaneUI.updateDefaultButtonBindings()
+        Util.hitKeys(robot, KeyEvent.VK_TAB);
+
+        // If the bug exists, then as soon as the menu appears,
+        // the VK_ENTER, VK_DOWN, VK_UP and VK_ESC will have no
+        // effect.
+        Util.hitMnemonics(robot, KeyEvent.VK_U);
+        Util.hitKeys(robot, KeyEvent.VK_ENTER);
+        toolkit.realSync();
+
+        checkAction();
+
+        Util.hitMnemonics(robot, KeyEvent.VK_U);
+        Util.hitKeys(robot, KeyEvent.VK_DOWN);
+        Util.hitKeys(robot, KeyEvent.VK_ENTER);
+        toolkit.realSync();
+
+        checkAction();
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/javax/swing/JScrollBar/7163696/Test7163696.java	Tue Apr 02 15:31:24 2013 -0700
@@ -0,0 +1,103 @@
+/*
+ * Copyright (c) 2013, 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 7163696
+ * @summary Tests that JScrollBar scrolls to the left
+ * @author Sergey Malenkov
+ */
+
+import sun.awt.SunToolkit;
+
+import java.awt.Dimension;
+import java.awt.Point;
+import java.awt.Robot;
+import java.awt.Toolkit;
+import java.awt.event.InputEvent;
+
+import javax.swing.JFrame;
+import javax.swing.JScrollBar;
+import javax.swing.SwingUtilities;
+import javax.swing.UIManager;
+import javax.swing.UIManager.LookAndFeelInfo;
+
+public class Test7163696 implements Runnable {
+
+    private static final boolean AUTO = null != System.getProperty("test.src", null);
+
+    public static void main(String[] args) throws Exception {
+        new Test7163696().test();
+    }
+
+    private JScrollBar bar;
+
+    private void test() throws Exception {
+        Robot robot = new Robot();
+        SunToolkit toolkit = (SunToolkit) Toolkit.getDefaultToolkit();
+        for (LookAndFeelInfo info : UIManager.getInstalledLookAndFeels()) {
+            UIManager.setLookAndFeel(info.getClassName());
+
+            SwingUtilities.invokeAndWait(this);
+            toolkit.realSync(500); // after creation
+
+            Point point = this.bar.getLocation();
+            SwingUtilities.convertPointToScreen(point, this.bar);
+            point.x += this.bar.getWidth() >> 2;
+            point.y += this.bar.getHeight() >> 1;
+            robot.mouseMove(point.x, point.y);
+            robot.mousePress(InputEvent.BUTTON1_MASK);
+            robot.mouseRelease(InputEvent.BUTTON1_MASK);
+
+            toolkit.realSync(500); // before validation
+            SwingUtilities.invokeAndWait(this);
+
+            if (this.bar != null) {
+                this.bar = null; // allows to reuse the instance
+                if (AUTO) { // error reporting only for automatic testing
+                    throw new Error("TEST FAILED");
+                }
+            }
+        }
+    }
+
+    public void run() {
+        if (this.bar == null) {
+            this.bar = new JScrollBar(JScrollBar.HORIZONTAL, 50, 10, 0, 100);
+            this.bar.setPreferredSize(new Dimension(400, 20));
+
+            JFrame frame = new JFrame();
+            frame.add(this.bar);
+            frame.pack();
+            frame.setVisible(true);
+        }
+        else if (40 != this.bar.getValue()) {
+            System.out.println("name = " + UIManager.getLookAndFeel().getName());
+            System.out.println("value = " + this.bar.getValue());
+        }
+        else {
+            SwingUtilities.getWindowAncestor(this.bar).dispose();
+            this.bar = null;
+        }
+    }
+}
--- a/jdk/test/javax/swing/JTree/8004298/bug8004298.java	Tue Apr 02 14:13:13 2013 -0400
+++ b/jdk/test/javax/swing/JTree/8004298/bug8004298.java	Tue Apr 02 15:31:24 2013 -0700
@@ -48,8 +48,13 @@
         Robot robot = new Robot();
         robot.setAutoDelay(50);
         SunToolkit toolkit = (SunToolkit) Toolkit.getDefaultToolkit();
-        UIManager.setLookAndFeel(new WindowsLookAndFeel());
-
+        try {
+            UIManager.setLookAndFeel(new WindowsLookAndFeel());
+        } catch (javax.swing.UnsupportedLookAndFeelException ulafe) {
+            System.out.println(ulafe.getMessage());
+            System.out.println("The test is considered PASSED");
+            return;
+        }
         SwingUtilities.invokeAndWait(new Runnable() {
 
             @Override
@@ -113,4 +118,4 @@
             return super.getPathBounds(tree, path);
         }
     }
-}
\ No newline at end of file
+}
--- a/jdk/test/javax/swing/regtesthelpers/Util.java	Tue Apr 02 14:13:13 2013 -0400
+++ b/jdk/test/javax/swing/regtesthelpers/Util.java	Tue Apr 02 15:31:24 2013 -0700
@@ -146,6 +146,23 @@
     }
 
      /**
+     * Hits mnemonics by robot.
+     */
+    public static void hitMnemonics(Robot robot, int... keys) {
+
+        ArrayList<Integer> mnemonicKeyCodes = getSystemMnemonicKeyCodes();
+        for (Integer mnemonic : mnemonicKeyCodes) {
+            robot.keyPress(mnemonic);
+        }
+
+        hitKeys(robot, keys);
+
+        for (Integer mnemonic : mnemonicKeyCodes) {
+            robot.keyRelease(mnemonic);
+        }
+    }
+
+     /**
      * Hits keys by robot.
      */
     public static void hitKeys(Robot robot, int... keys) {
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/sun/net/www/http/HttpClient/IsAvailable.java	Tue Apr 02 15:31:24 2013 -0700
@@ -0,0 +1,68 @@
+/*
+ * Copyright (c) 2013, 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 8009650
+ * @summary HttpClient available() check throws SocketException when connection
+ * has been closed
+ */
+
+import java.net.URL;
+import java.net.ServerSocket;
+import sun.net.www.http.HttpClient;
+import java.security.*;
+import java.lang.reflect.Method;
+
+public class IsAvailable {
+
+    public static void main(String[] args) throws Exception {
+        int readTimeout = 20;
+        ServerSocket ss = new ServerSocket(0);
+
+        URL url1 = new URL("http://localhost:" + ss.getLocalPort());
+        HttpClient c1 = HttpClient.New(url1);
+
+        Method available = HttpClient.class.
+                getDeclaredMethod("available", null);
+        available.setAccessible(true);
+
+        c1.setReadTimeout(readTimeout);
+        boolean a = (boolean) available.invoke(c1);
+        if (!a) {
+            throw new RuntimeException("connection should be available");
+        }
+        if (c1.getReadTimeout() != readTimeout) {
+            throw new RuntimeException("read timeout has been altered");
+        }
+
+        c1.closeServer();
+
+        a = (boolean) available.invoke(c1);
+        if (a) {
+            throw new RuntimeException("connection shouldn't be available");
+        }
+
+        ss.close();
+    }
+}
--- a/jdk/test/sun/security/krb5/auto/KDC.java	Tue Apr 02 14:13:13 2013 -0400
+++ b/jdk/test/sun/security/krb5/auto/KDC.java	Tue Apr 02 15:31:24 2013 -0700
@@ -923,29 +923,29 @@
                         pas2 = new DerValue[] {
                             new DerValue(new ETypeInfo2(1, null, null).asn1Encode()),
                             new DerValue(new ETypeInfo2(1, "", null).asn1Encode()),
-                            new DerValue(new ETypeInfo2(1, OneKDC.REALM, new byte[]{1}).asn1Encode()),
+                            new DerValue(new ETypeInfo2(1, realm, new byte[]{1}).asn1Encode()),
                         };
                         pas = new DerValue[] {
                             new DerValue(new ETypeInfo(1, null).asn1Encode()),
                             new DerValue(new ETypeInfo(1, "").asn1Encode()),
-                            new DerValue(new ETypeInfo(1, OneKDC.REALM).asn1Encode()),
+                            new DerValue(new ETypeInfo(1, realm).asn1Encode()),
                         };
                         break;
                     case 2:     // we still reject non-null s2kparams and prefer E2 over E
                         pas2 = new DerValue[] {
-                            new DerValue(new ETypeInfo2(1, OneKDC.REALM, new byte[]{1}).asn1Encode()),
+                            new DerValue(new ETypeInfo2(1, realm, new byte[]{1}).asn1Encode()),
                             new DerValue(new ETypeInfo2(1, null, null).asn1Encode()),
                             new DerValue(new ETypeInfo2(1, "", null).asn1Encode()),
                         };
                         pas = new DerValue[] {
-                            new DerValue(new ETypeInfo(1, OneKDC.REALM).asn1Encode()),
+                            new DerValue(new ETypeInfo(1, realm).asn1Encode()),
                             new DerValue(new ETypeInfo(1, null).asn1Encode()),
                             new DerValue(new ETypeInfo(1, "").asn1Encode()),
                         };
                         break;
                     case 3:     // but only E is wrong
                         pas = new DerValue[] {
-                            new DerValue(new ETypeInfo(1, OneKDC.REALM).asn1Encode()),
+                            new DerValue(new ETypeInfo(1, realm).asn1Encode()),
                             new DerValue(new ETypeInfo(1, null).asn1Encode()),
                             new DerValue(new ETypeInfo(1, "").asn1Encode()),
                         };
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/sun/security/krb5/config/DefUdpLimit.java	Tue Apr 02 15:31:24 2013 -0700
@@ -0,0 +1,67 @@
+/*
+ * Copyright (c) 2013, 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 8009875
+ * @summary Provide a default udp_preference_limit for krb5.conf
+ * @compile -XDignore.symbol.file DefUdpLimit.java
+ * @run main/othervm DefUdpLimit -1 1465
+ * @run main/othervm DefUdpLimit 0 0
+ * @run main/othervm DefUdpLimit 1234 1234
+ * @run main/othervm DefUdpLimit 12345 12345
+ * @run main/othervm DefUdpLimit 123456 32700
+ *
+ */
+
+import sun.security.krb5.KdcComm;
+
+import java.lang.reflect.Field;
+import java.nio.file.Files;
+import java.nio.file.Paths;
+
+public class DefUdpLimit {
+
+    public static void main(String[] args) throws Exception {
+        int set = Integer.valueOf(args[0]);
+        int expected = Integer.valueOf(args[1]);
+        Field f = KdcComm.class.getDeclaredField("defaultUdpPrefLimit");
+        f.setAccessible(true);
+        writeConf(set);
+        int actual = (Integer)f.get(null);
+        if (actual != expected) {
+            throw new Exception("Expected: " + expected + ", get " + actual);
+        }
+    }
+
+    static void writeConf(int i) throws Exception {
+        String file = "krb5.conf." + i;
+        String content = "[libdefaults]\n";
+        if (i >= 0) {
+            content += "udp_preference_limit = " + i;
+        }
+        Files.write(Paths.get(file), content.getBytes());
+        System.setProperty("java.security.krb5.conf", file);
+    }
+}
+
--- a/jdk/test/sun/tools/jstat/gcCapacityOutput1.awk	Tue Apr 02 14:13:13 2013 -0400
+++ b/jdk/test/sun/tools/jstat/gcCapacityOutput1.awk	Tue Apr 02 15:31:24 2013 -0700
@@ -3,19 +3,19 @@
 # that the numerical values conform to a specific pattern, rather than
 # specific values.
 #
-# NGCMN    NGCMX     NGC     S0C   S1C       EC      OGCMN      OGCMX       OGC         OC      PGCMN    PGCMX     PGC       PC     YGC    FGC 
-#  2176.0   7232.0   2176.0   64.0   64.0   2048.0     6016.0    58304.0     6016.0     6016.0   8192.0  65536.0   8192.0   8192.0      0     0
+# NGCMN    NGCMX     NGC     S0C   S1C       EC      OGCMN      OGCMX       OGC         OC      MCMN     MCMX      MC     YGC    FGC 
+#  2176.0   7232.0   2176.0   64.0   64.0   2048.0     6016.0    58304.0     6016.0     6016.0   8192.0  65536.0   8192.0   8192.0      0
 
 
 BEGIN	{
 	    headerlines=0; datalines=0; totallines=0
 	}
 
-/^ NGCMN    NGCMX     NGC     S0C   S1C       EC      OGCMN      OGCMX       OGC         OC      PGCMN    PGCMX     PGC       PC     YGC    FGC $/	{
+/^ NGCMN    NGCMX     NGC     S0C   S1C       EC      OGCMN      OGCMX       OGC         OC       MCMN     MCMX      MC     YGC    FGC $/	{
 	    headerlines++;
 	}
 
-/^[ ]*[0-9]+\.[0-9]+[ ]*[0-9]+\.[0-9]+[ ]*[0-9]+\.[0-9]+[ ]*[0-9]+\.[0-9]+[ ]*[0-9]+\.[0-9]+[ ]*[0-9]+\.[0-9]+[ ]*[0-9]+\.[0-9]+[ ]*[0-9]+\.[0-9]+[ ]*[0-9]+\.[0-9]+[ ]*[0-9]+\.[0-9]+[ ]*[0-9]+\.[0-9]+[ ]*[0-9]+\.[0-9]+[ ]*[0-9]+\.[0-9]+[ ]*[0-9]+\.[0-9]+[ ]*[0-9]+[ ]*[0-9]+$/	{
+/^[ ]*[0-9]+\.[0-9]+[ ]*[0-9]+\.[0-9]+[ ]*[0-9]+\.[0-9]+[ ]*[0-9]+\.[0-9]+[ ]*[0-9]+\.[0-9]+[ ]*[0-9]+\.[0-9]+[ ]*[0-9]+\.[0-9]+[ ]*[0-9]+\.[0-9]+[ ]*[0-9]+\.[0-9]+[ ]*[0-9]+\.[0-9]+[ ]*[0-9]+\.[0-9]+[ ]*[0-9]+\.[0-9]+[ ]*[0-9]+\.[0-9]+[ ]*[0-9]+[ ]*[0-9]+$/	{
 	    datalines++;
 	}
 
--- a/jdk/test/sun/tools/jstat/gcCauseOutput1.awk	Tue Apr 02 14:13:13 2013 -0400
+++ b/jdk/test/sun/tools/jstat/gcCauseOutput1.awk	Tue Apr 02 15:31:24 2013 -0700
@@ -11,7 +11,7 @@
 	    headerlines=0; datalines=0; totallines=0
 	}
 
-/^  S0     S1     E      O      P     YGC     YGCT    FGC    FGCT     GCT    LGCC                 GCC                 $/	{
+/^  S0     S1     E      O      M     YGC     YGCT    FGC    FGCT     GCT    LGCC                 GCC                 $/	{
 	    headerlines++;
 	}
 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/sun/tools/jstat/gcMetaCapacityOutput1.awk	Tue Apr 02 15:31:24 2013 -0700
@@ -0,0 +1,30 @@
+#
+# matching the following output specified as a pattern that verifies
+# that the numerical values conform to a specific pattern, rather than
+# specific values.
+#
+#   MCMN       MCMX        MC      YGC   FGC    FGCT     GCT   
+#    8192.0    65536.0     8192.0     8192.0     1     0    0.000    0.029
+
+BEGIN	{
+	    headerlines=0; datalines=0; totallines=0
+	}
+
+/^   MCMN       MCMX        MC      YGC   FGC    FGCT     GCT   $/	{
+	    headerlines++;
+	}
+
+/^[ ]*[0-9]+\.[0-9]+[ ]*[0-9]+\.[0-9]+[ ]*[0-9]+\.[0-9]+[ ]*[0-9]+[ ]*[0-9]+[ ]*[0-9]+\.[0-9]+[ ]*[0-9]+\.[0-9]+$/	{
+	    datalines++;
+	}
+
+	{ totallines++; print $0 }
+
+END	{
+	    if ((headerlines == 1) && (datalines == 1) && (totallines == 2)) {
+	        exit 0
+	    }
+	    else {
+	        exit 1
+	    }
+	}
--- a/jdk/test/sun/tools/jstat/gcOldOutput1.awk	Tue Apr 02 14:13:13 2013 -0400
+++ b/jdk/test/sun/tools/jstat/gcOldOutput1.awk	Tue Apr 02 15:31:24 2013 -0700
@@ -3,7 +3,7 @@
 # that the numerical values conform to a specific pattern, rather than
 # specific values.
 #
-#   PC       PU        OC          OU       YGC    FGC    FGCT     GCT   
+#   MC       MU        OC          OU       YGC    FGC    FGCT     GCT   
 #  8192.0   1877.3      6016.0       180.8      1     0    0.000    0.030
 
 
@@ -11,7 +11,7 @@
 	    headerlines=0; datalines=0; totallines=0
 	}
 
-/^   PC       PU        OC          OU       YGC    FGC    FGCT     GCT   $/	{
+/^   MC       MU        OC          OU       YGC    FGC    FGCT     GCT   $/	{
 	    headerlines++;
 	}
 
--- a/jdk/test/sun/tools/jstat/gcOutput1.awk	Tue Apr 02 14:13:13 2013 -0400
+++ b/jdk/test/sun/tools/jstat/gcOutput1.awk	Tue Apr 02 15:31:24 2013 -0700
@@ -3,7 +3,7 @@
 # that the numerical values conform to a specific pattern, rather than
 # specific values.
 #
-# S0C    S1C    S0U    S1U      EC       EU        OC         OU       PC     PU    YGC     YGCT    FGC    FGCT     GCT   
+# S0C    S1C    S0U    S1U      EC       EU        OC         OU       MC     MU    YGC     YGCT    FGC    FGCT     GCT   
 # 64.0   64.0   0.0    0.0    2048.0   1711.2    6016.0      0.0     8192.0 1948.6      0    0.000   0      0.000    0.000
 
 
@@ -11,7 +11,7 @@
 	    headerlines=0; datalines=0; totallines=0
 	}
 
-/^ S0C    S1C    S0U    S1U      EC       EU        OC         OU       PC     PU    YGC     YGCT    FGC    FGCT     GCT   $/	{
+/^ S0C    S1C    S0U    S1U      EC       EU        OC         OU       MC     MU    YGC     YGCT    FGC    FGCT     GCT   $/	{
 	    headerlines++;
 	}
 
--- a/jdk/test/sun/tools/jstat/gcPermCapacityOutput1.awk	Tue Apr 02 14:13:13 2013 -0400
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,30 +0,0 @@
-#
-# matching the following output specified as a pattern that verifies
-# that the numerical values conform to a specific pattern, rather than
-# specific values.
-#
-#  PGCMN      PGCMX       PGC         PC      YGC   FGC    FGCT     GCT   
-#    8192.0    65536.0     8192.0     8192.0     1     0    0.000    0.029
-
-BEGIN	{
-	    headerlines=0; datalines=0; totallines=0
-	}
-
-/^  PGCMN      PGCMX       PGC         PC      YGC   FGC    FGCT     GCT   $/	{
-	    headerlines++;
-	}
-
-/^[ ]*[0-9]+\.[0-9]+[ ]*[0-9]+\.[0-9]+[ ]*[0-9]+\.[0-9]+[ ]*[0-9]+\.[0-9]+[ ]*[0-9]+[ ]*[0-9]+[ ]*[0-9]+\.[0-9]+[ ]*[0-9]+\.[0-9]+$/	{
-	    datalines++;
-	}
-
-	{ totallines++; print $0 }
-
-END	{
-	    if ((headerlines == 1) && (datalines == 1) && (totallines == 2)) {
-	        exit 0
-	    }
-	    else {
-	        exit 1
-	    }
-	}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/sun/tools/jstat/jstatGcMetaCapacityOutput1.sh	Tue Apr 02 15:31:24 2013 -0700
@@ -0,0 +1,36 @@
+#
+# Copyright (c) 2013, 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 4990825
+# @run shell jstatGcMetaCapacityOutput1.sh
+# @summary Test that output of 'jstat -gcmetacapacity 0' has expected line counts
+
+. ${TESTSRC-.}/../../jvmstat/testlibrary/utils.sh
+
+setup
+verify_os
+
+JSTAT="${TESTJAVA}/bin/jstat"
+
+${JSTAT} -J-XX:+UsePerfData -J-Duser.language=en -gcmetacapacity 0 2>&1 | awk -f ${TESTSRC}/gcMetaCapacityOutput1.awk
--- a/jdk/test/sun/tools/jstat/jstatGcPermCapacityOutput1.sh	Tue Apr 02 14:13:13 2013 -0400
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,36 +0,0 @@
-#
-# Copyright (c) 2004, 2012, 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 4990825
-# @run shell jstatGcPermCapacityOutput1.sh
-# @summary Test that output of 'jstat -gcpermcapcaity 0' has expected line counts
-
-. ${TESTSRC-.}/../../jvmstat/testlibrary/utils.sh
-
-setup
-verify_os
-
-JSTAT="${TESTJAVA}/bin/jstat"
-
-${JSTAT} -J-XX:+UsePerfData -J-Duser.language=en -gcpermcapacity 0 2>&1 | awk -f ${TESTSRC}/gcPermCapacityOutput1.awk
--- a/jdk/test/sun/tools/jstat/lineCounts1.awk	Tue Apr 02 14:13:13 2013 -0400
+++ b/jdk/test/sun/tools/jstat/lineCounts1.awk	Tue Apr 02 15:31:24 2013 -0700
@@ -3,7 +3,7 @@
 # that the numerical values conform to a specific pattern, rather than
 # specific values.
 #
-#  S0     S1     E      O      P     YGC     YGCT    FGC    FGCT     GCT   
+#  S0     S1     E      O      M     YGC     YGCT    FGC    FGCT     GCT   
 #  0.00 100.00  68.87   1.24  27.75      1    0.044     0    0.000    0.044
 #  0.00 100.00  68.87   1.24  27.84      1    0.044     0    0.000    0.044
 #  0.00 100.00  68.87   1.24  27.84      1    0.044     0    0.000    0.044
@@ -14,7 +14,7 @@
 	    headerlines=0; datalines=0; totallines=0
 	}
 
-/^  S0     S1     E      O      P     YGC     YGCT    FGC    FGCT     GCT   $/	{
+/^  S0     S1     E      O      M     YGC     YGCT    FGC    FGCT     GCT   $/	{
 	    headerlines++;
 	}
 
--- a/jdk/test/sun/tools/jstat/lineCounts2.awk	Tue Apr 02 14:13:13 2013 -0400
+++ b/jdk/test/sun/tools/jstat/lineCounts2.awk	Tue Apr 02 15:31:24 2013 -0700
@@ -3,14 +3,14 @@
 # that the numerical values conform to a specific pattern, rather than
 # specific values.
 #
-#  S0     S1     E      O      P     YGC     YGCT    FGC    FGCT     GCT   
+#  S0     S1     E      O      M     YGC     YGCT    FGC    FGCT     GCT   
 #  0.00 100.00  68.87   1.24  27.75      1    0.044     0    0.000    0.044
 
 BEGIN	{
 	    headerlines=0; datalines=0; totallines=0
 	}
 
-/^  S0     S1     E      O      P     YGC     YGCT    FGC    FGCT     GCT   $/	{
+/^  S0     S1     E      O      M     YGC     YGCT    FGC    FGCT     GCT   $/	{
 	    headerlines++;
 	}
 
--- a/jdk/test/sun/tools/jstat/lineCounts3.awk	Tue Apr 02 14:13:13 2013 -0400
+++ b/jdk/test/sun/tools/jstat/lineCounts3.awk	Tue Apr 02 15:31:24 2013 -0700
@@ -3,7 +3,7 @@
 # that the numerical values conform to a specific pattern, rather than
 # specific values.
 #
-#  S0     S1     E      O      P     YGC     YGCT    FGC    FGCT     GCT   
+#  S0     S1     E      O      M     YGC     YGCT    FGC    FGCT     GCT   
 #  0.00  99.99  66.81   1.24  26.55      1    0.028     0    0.000    0.028
 #  0.00  99.99  68.81   1.24  27.84      1    0.028     0    0.000    0.028
 #  0.00  99.99  70.81   1.24  27.84      1    0.028     0    0.000    0.028
@@ -19,7 +19,7 @@
 	    headerlines=0; datalines=0; totallines=0
         }
 
-/^  S0     S1     E      O      P     YGC     YGCT    FGC    FGCT     GCT   $/	{
+/^  S0     S1     E      O      M     YGC     YGCT    FGC    FGCT     GCT   $/	{
 	    headerlines++;
 	}
 
--- a/jdk/test/sun/tools/jstat/lineCounts4.awk	Tue Apr 02 14:13:13 2013 -0400
+++ b/jdk/test/sun/tools/jstat/lineCounts4.awk	Tue Apr 02 15:31:24 2013 -0700
@@ -3,7 +3,7 @@
 # that the numerical values conform to a specific pattern, rather than
 # specific values.
 #
-#  S0     S1     E      O      P     YGC     YGCT    FGC    FGCT     GCT   
+#  S0     S1     E      O      M     YGC     YGCT    FGC    FGCT     GCT   
 #  0.00  99.99  66.81   1.24  26.55      1    0.028     0    0.000    0.028
 #  0.00  99.99  68.81   1.24  27.84      1    0.028     0    0.000    0.028
 #  0.00  99.99  70.81   1.24  27.84      1    0.028     0    0.000    0.028
@@ -22,7 +22,7 @@
 	    datalines2=0;
         }
 
-/^  S0     S1     E      O      P     YGC     YGCT    FGC    FGCT     GCT   $/	{
+/^  S0     S1     E      O      M     YGC     YGCT    FGC    FGCT     GCT   $/	{
 	    headerlines++;
 	}
 
--- a/jdk/test/sun/tools/jstat/options1.out	Tue Apr 02 14:13:13 2013 -0400
+++ b/jdk/test/sun/tools/jstat/options1.out	Tue Apr 02 15:31:24 2013 -0700
@@ -3,10 +3,10 @@
 -gc
 -gccapacity
 -gccause
+-gcmetacapacity
 -gcnew
 -gcnewcapacity
 -gcold
 -gcoldcapacity
--gcpermcapacity
 -gcutil
 -printcompilation
--- a/jdk/test/sun/tools/jstat/options2.out	Tue Apr 02 14:13:13 2013 -0400
+++ b/jdk/test/sun/tools/jstat/options2.out	Tue Apr 02 15:31:24 2013 -0700
@@ -4,10 +4,10 @@
 -gc
 -gccapacity
 -gccause
+-gcmetacapacity
 -gcnew
 -gcnewcapacity
 -gcold
 -gcoldcapacity
--gcpermcapacity
 -gcutil
 -printcompilation
--- a/jdk/test/sun/tools/jstat/timeStamp1.awk	Tue Apr 02 14:13:13 2013 -0400
+++ b/jdk/test/sun/tools/jstat/timeStamp1.awk	Tue Apr 02 15:31:24 2013 -0700
@@ -3,14 +3,14 @@
 # that the numerical values conform to a specific pattern, rather than
 # specific values.
 #
-#  S0     S1     E      O      P     YGC     YGCT    FGC    FGCT     GCT   
+#  S0     S1     E      O      M     YGC     YGCT    FGC    FGCT     GCT   
 #  0.00 100.00  68.87   1.24  27.75      1    0.044     0    0.000    0.044
 
 BEGIN	{
 	    headerlines=0; datalines=0; totallines=0
 	}
 
-/^Timestamp         S0     S1     E      O      P     YGC     YGCT    FGC    FGCT     GCT   $/	{
+/^Timestamp         S0     S1     E      O      M     YGC     YGCT    FGC    FGCT     GCT   $/	{
 	    headerlines++;
 	}
 
--- a/jdk/test/sun/tools/jstatd/jstatGcutilOutput1.awk	Tue Apr 02 14:13:13 2013 -0400
+++ b/jdk/test/sun/tools/jstatd/jstatGcutilOutput1.awk	Tue Apr 02 15:31:24 2013 -0700
@@ -3,7 +3,7 @@
 # that the numerical values conform to a specific pattern, rather than
 # specific values.
 #
-#  S0     S1     E      O      P     YGC     YGCT    FGC    FGCT     GCT   
+#  S0     S1     E      O      M     YGC     YGCT    FGC    FGCT     GCT   
 #  0.00 100.00  68.87   1.24  27.75      1    0.044     0    0.000    0.044
 #  0.00 100.00  68.87   1.24  27.84      1    0.044     0    0.000    0.044
 #  0.00 100.00  68.87   1.24  27.84      1    0.044     0    0.000    0.044
@@ -14,7 +14,7 @@
 	    headerlines=0; datalines=0; totallines=0
 	}
 
-/^  S0     S1     E      O      P     YGC     YGCT    FGC    FGCT     GCT   $/	{
+/^  S0     S1     E      O      M     YGC     YGCT    FGC    FGCT     GCT   $/	{
 	    headerlines++;
 	}