diff --git a/.hgtags b/.hgtags index bf173376ee4..5c56fcd1b39 100644 --- a/.hgtags +++ b/.hgtags @@ -183,3 +183,5 @@ ffe6bce5a521be40146af2ac03c509b7bac30595 jdk8-b56 3bd874584fc01aae92fbc8827e2bd04d8b6ace04 jdk8-b59 5e3adc681779037a2d33b7be6f75680619085492 jdk8-b60 cdaa6122185f9bf512dcd6600f56bfccc4824e8c jdk8-b61 +8d9d430b4244b95f5cf1ebe719f834a1ac5d6cd5 jdk8-b62 +21ee1dd7b809639284900a128b9b656a592ebc7a jdk8-b63 diff --git a/.hgtags-top-repo b/.hgtags-top-repo index 7e43143f19e..ecd625bae5a 100644 --- a/.hgtags-top-repo +++ b/.hgtags-top-repo @@ -183,3 +183,5 @@ b85b44cced2406792cfb9baab1377ff03e7001d8 jdk8-b55 dae9821589ccd2611bdf7084269b98e819091770 jdk8-b59 e07f499b9dccb529ecf74172cf6ac11a195ec57a jdk8-b60 20ff117b509075c3aec4ee3a57990ecd5db5df9c jdk8-b61 +8a3fe0ae06a8cc21347da5a18384b0aa6c2349f5 jdk8-b62 +3229597524cab4239325bc3602df6c486397a511 jdk8-b63 diff --git a/NewMakefile.gmk b/NewMakefile.gmk index 252f98b5bd3..f38d7396a7d 100644 --- a/NewMakefile.gmk +++ b/NewMakefile.gmk @@ -31,8 +31,9 @@ CMP=cmp CP=cp ECHO=echo MKDIR=mkdir +PRINTF=printf PWD=pwd -SH=sh +TAR=tar ifeq ($(PLATFORM),windows) ZIP=zip else @@ -63,10 +64,48 @@ all images clean: checks $(ECHO) "ERROR: No configurations to build"; exit 1; \ fi @for bdir in $(dir $(ALL_MAKEFILES)) ; do \ - $(ECHO) "$(CD) $${bdir} && $(MAKE) $(EXTRA_MAKE_ARGS) $@" ; \ - $(CD) $${bdir} && $(MAKE) $(EXTRA_MAKE_ARGS) $@ ; \ + $(ECHO) "$(CD) $${bdir} && $(MAKE) $@" ; \ + $(CD) $${bdir} && $(MAKE) $@ ; \ done +# TBD: Deploy input +$(BUILD_DIR_ROOT)/.deploy_input: + @if [ "$(ALL_MAKEFILES)" = "" ] ; then \ + $(ECHO) "ERROR: No configurations to build"; exit 1; \ + fi + @for bdir in $(dir $(ALL_MAKEFILES)) ; do \ + if [ deploy/make/Makefile ] ; then \ + echo "Attempting deploy build." ; \ + ( \ + $(RM) -r $${bdir}/deploy_input ; \ + $(MKDIR) -p $${bdir}/deploy_input ; \ + ( $(CD) $${bdir}/images && $(TAR) -cf - j2sdk-image j2re-image ) \ + | ( $(CD) $${bdir}/deploy_input && $(TAR) -xf - ) ; \ + ) ; \ + fi; \ + done + touch $@ + +# TBD: Deploy images +deploy: $(BUILD_DIR_ROOT)/.deploy_input + @if [ "$(ALL_MAKEFILES)" = "" ] ; then \ + $(ECHO) "ERROR: No configurations to build"; exit 1; \ + fi + @for bdir in $(dir $(ALL_MAKEFILES)) ; do \ + if [ deploy/make/Makefile ] ; then \ + echo "Attempting deploy build." ; \ + ( \ + $(CD) deploy/make && \ + $(MAKE) \ + ABS_OUTPUTDIR=$${bdir}/deploy_input \ + OUTPUTDIR=$${bdir}/deploy_input \ + ) ; \ + fi; \ + done + +# TBD: Install bundles +install: + # Bundle creation bundles: @if [ "$(ALL_IMAGE_DIRS)" = "" ] ; then \ @@ -91,8 +130,8 @@ clobber:: checks: @$(ECHO) "No checks yet" -# Keep track of phony targets -PHONY_LIST += all images clean clobber checks +# Keep track of user targets +USER_TARGETS += all deploy install images clean clobber checks ########################################################################### # To help in adoption of the new configure&&make build process, a bridge @@ -102,32 +141,18 @@ PHONY_LIST += all images clean clobber checks bridgeBuild: bridge2configure images # Bridge from old Makefile ALT settings to configure options -bridge2configure: .bridge2configureOpts - $(CD) common/makefiles && sh ../autoconf/configure $(strip $(shell $(CAT) $<)) +bridge2configure: $(BUILD_DIR_ROOT)/.bridge2configureOpts + bash ./configure $(strip $(shell $(CAT) $<)) # Create a file with configure options created from old Makefile mechanisms. -.bridge2configureOpts: .bridge2configureOptsLatest +$(BUILD_DIR_ROOT)/.bridge2configureOpts: $(BUILD_DIR_ROOT)/.bridge2configureOptsLatest $(RM) $@ $(CP) $< $@ -# In case make was invoked from a specific path -_MAKE_COMMAND_PATH:=$(firstword $(MAKE)) -ifneq ($(dir $(_MAKE_COMMAND_PATH)),./) - # This could be removed someday if JPRT was fixed and we could assume that - # the path to make was always in PATH. - MAKE_BINDIR:=$(call UnixPath,$(dir $(_MAKE_COMMAND_PATH))) - NEWPATH:=$(MAKE_BINDIR):${PATH} - PATH:=$(NEWPATH) - export PATH - MAKE_COMMAND=$(MAKE_BINDIR)/$(notdir $(_MAKE_COMMAND_PATH)) -else - MAKE_COMMAND=$(_MAKE_COMMAND_PATH) -endif - # Use this file to only change when obvious things have changed -.bridge2configureOptsLatest: FRC +$(BUILD_DIR_ROOT)/.bridge2configureOptsLatest: FRC $(RM) $@.tmp - @$(ECHO) " MAKE=$(MAKE_COMMAND) " >> $@.tmp + $(MKDIR) -p $(BUILD_DIR_ROOT) @$(ECHO) " --with-debug-level=$(if $(DEBUG_LEVEL),$(DEBUG_LEVEL),release) " >> $@.tmp ifdef ARCH_DATA_MODEL @$(ECHO) " --with-target-bits=$(ARCH_DATA_MODEL) " >> $@.tmp @@ -156,11 +181,21 @@ endif # Clobber all the built files clobber:: bridge2clobber bridge2clobber:: - $(RM) .bridge2* + $(RM) $(BUILD_DIR_ROOT)/.bridge2* + $(RM) $(BUILD_DIR_ROOT)/.deploy_input # Keep track of phony targets PHONY_LIST += bridge2configure bridgeBuild bridge2clobber +########################################################################### +# Sanity checks (history target) +# + +sanity: checks + +# Keep track of user targets +USER_TARGETS += sanity + ########################################################################### # Javadocs # @@ -168,8 +203,8 @@ PHONY_LIST += bridge2configure bridgeBuild bridge2clobber javadocs: cd common/makefiles && $(MAKE) -f MakefileJavadoc.gmk -# Keep track of phony targets -PHONY_LIST += javadocs +# Keep track of user targets +USER_TARGETS += javadocs ########################################################################### # JPRT targets @@ -190,7 +225,6 @@ jprt_build_debug: DEBUG_LEVEL=slowdebug jprt_build_debug: BUILD_DIRNAME=*-debug jprt_build_debug: jprt_build_generic -jprt_build_generic: EXTRA_MAKE_ARGS=LOG=nofile,info jprt_build_generic: $(JPRT_ARCHIVE_BUNDLE) $(JPRT_ARCHIVE_BUNDLE): bridgeBuild bundles @@ -202,10 +236,60 @@ $(JPRT_ARCHIVE_BUNDLE): bridgeBuild bundles PHONY_LIST += jprt_build_product jprt_build_fastdebug jprt_build_debug \ jprt_build_generic +########################################################################### +# Help target + +HELP_FORMAT=%12s%s\n + +help: + @$(PRINTF) "# JDK Makefile\n" + @$(PRINTF) "#\n" + @$(PRINTF) "# Usage: make [Target]\n" + @$(PRINTF) "#\n" + @$(PRINTF) "# $(HELP_FORMAT)" "Target " "Description" + @$(PRINTF) "# $(HELP_FORMAT)" "------ " "-----------" + @for i in $(USER_TARGETS) ; do \ + $(MAKE) help_$${i} ; \ + done + @$(PRINTF) "#\n" + +help_all: + @$(PRINTF) "# $(HELP_FORMAT)" "$(subst help_,,$@) - " \ + "Build the entire jdk but not the images" +help_images: + @$(PRINTF) "# $(HELP_FORMAT)" "$(subst help_,,$@) - " \ + "Create the jdk images for the builds" +help_deploy: + @$(PRINTF) "# $(HELP_FORMAT)" "$(subst help_,,$@) - " \ + "Create the jdk deploy images from the jdk images" +help_install: + @$(PRINTF) "# $(HELP_FORMAT)" "$(subst help_,,$@) - " \ + "Create the jdk install bundles from the deploy images" +help_clean: + @$(PRINTF) "# $(HELP_FORMAT)" "$(subst help_,,$@) - " \ + "Clean and prepare for a fresh build from scratch" +help_clobber: + @$(PRINTF) "# $(HELP_FORMAT)" "$(subst help_,,$@) - " \ + "Clean and also purge any hidden derived data" +help_checks: + @$(PRINTF) "# $(HELP_FORMAT)" "$(subst help_,,$@) - " \ + "Perform various checks to make sure we can build" +help_sanity: + @$(PRINTF) "# $(HELP_FORMAT)" "$(subst help_,,$@) - " \ + "Same as 'make checks'" +help_javadocs: + @$(PRINTF) "# $(HELP_FORMAT)" "$(subst help_,,$@) - " \ + "Build the javadocs" +help_help: + @$(PRINTF) "# $(HELP_FORMAT)" "$(subst help_,,$@) - " \ + "Print out the help messages" + +# Keep track of user targets +USER_TARGETS += help + ########################################################################### # Phony targets -.PHONY: $(PHONY_LIST) +.PHONY: $(PHONY_LIST) $(USER_TARGETS) # Force target FRC: - diff --git a/common/autoconf/Makefile.in b/common/autoconf/Makefile.in index 629fadf5e8a..d1f148604df 100644 --- a/common/autoconf/Makefile.in +++ b/common/autoconf/Makefile.in @@ -21,6 +21,7 @@ # questions. # -# Generated Makefile @DATE_WHEN_CONFIGURED@ +# This Makefile was generated by configure @DATE_WHEN_CONFIGURED@ +# GENERATED FILE, DO NOT EDIT SPEC:=@OUTPUT_ROOT@/spec.gmk include @SRC_ROOT@/common/makefiles/Makefile diff --git a/common/autoconf/autogen.sh b/common/autoconf/autogen.sh index 1ab55f77ff6..d4da90c77ee 100644 --- a/common/autoconf/autogen.sh +++ b/common/autoconf/autogen.sh @@ -1,4 +1,4 @@ -#!/bin/sh +#!/bin/bash # # Copyright (c) 2011, 2012, Oracle and/or its affiliates. All rights reserved. # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. @@ -29,14 +29,11 @@ if test "x`uname -s`" = "xSunOS"; then # date +%s is not available on Solaris, use this workaround # from http://solarisjedi.blogspot.co.uk/2006/06/solaris-date-command-and-epoch-time.html TIMESTAMP=`/usr/bin/truss /usr/bin/date 2>&1 | nawk -F= '/^time\(\)/ {gsub(/ /,"",$2);print $2}'` - # On Solaris /bin/sh doesn't support test -e but /usr/bin/test does. - TEST=`which test` else TIMESTAMP=`date +%s` - TEST="test" fi -if $TEST "$CUSTOM_CONFIG_DIR" = ""; then +if test "x$CUSTOM_CONFIG_DIR" = "x"; then custom_script_dir="$script_dir/../../jdk/make/closed/autoconf" else custom_script_dir=$CUSTOM_CONFIG_DIR @@ -44,16 +41,22 @@ fi custom_hook=$custom_script_dir/custom-hook.m4 +if test "x`which autoconf 2> /dev/null`" = x; then + echo You need autoconf installed to be able to regenerate the configure script + echo Error: Cannot find autoconf 1>&2 + exit 1 +fi + echo Generating generated-configure.sh cat $script_dir/configure.ac | sed -e "s|@DATE_WHEN_GENERATED@|$TIMESTAMP|" | autoconf -W all -I$script_dir - > $script_dir/generated-configure.sh rm -rf autom4te.cache -if $TEST -e $custom_hook; then +if test -e $custom_hook; then echo Generating custom generated-configure.sh # We have custom sources available; also generate configure script # with custom hooks compiled in. cat $script_dir/configure.ac | sed -e "s|@DATE_WHEN_GENERATED@|$TIMESTAMP|" | \ - sed -e "s|AC_DEFUN_ONCE(\[CUSTOM_HOOK\])|m4_include([$custom_hook])|" | autoconf -W all -I$script_dir - > $custom_script_dir/generated-configure.sh + sed -e "s|#CUSTOM_AUTOCONF_INCLUDE|m4_include([$custom_hook])|" | autoconf -W all -I$script_dir - > $custom_script_dir/generated-configure.sh rm -rf autom4te.cache else echo No custom hook found: $custom_hook diff --git a/common/autoconf/basics.m4 b/common/autoconf/basics.m4 index e0e7cf63d11..bd058af26e8 100644 --- a/common/autoconf/basics.m4 +++ b/common/autoconf/basics.m4 @@ -34,84 +34,102 @@ AC_DEFUN([ADD_JVM_ARG_IF_OK], fi ]) -AC_DEFUN([SET_FULL_PATH], +# This will make sure the given variable points to a full and proper +# path. This means: +# 1) There will be no spaces in the path. On posix platforms, +# spaces in the path will result in an error. On Windows, +# the path will be rewritten using short-style to be space-free. +# 2) The path will be absolute, and it will be in unix-style (on +# cygwin). +# $1: The name of the variable to fix +AC_DEFUN([BASIC_FIXUP_PATH], [ - # Translate "gcc -E" into "`which gcc` -E" ie - # extract the full path to the binary and at the - # same time maintain any arguments passed to it. - # The command MUST exist in the path, or else! - tmp="[$]$1" - car="${tmp%% *}" - tmp="[$]$1 EOL" - cdr="${tmp#* }" - # On windows we want paths without spaces. - if test "x$OPENJDK_BUILD_OS" = "xwindows"; then - SET_FULL_PATH_SPACESAFE(car) - else - # "which" is not portable, but is used here - # because we know that the command exists! - car=`which $car` - fi - if test "x$cdr" != xEOL; then - $1="$car ${cdr% *}" - else - $1="$car" - fi -]) - -AC_DEFUN([SPACESAFE], -[ - # Fail with message $2 if var $1 contains a path with no spaces in it. - # Unless on Windows, where we can rewrite the path. - HAS_SPACE=`echo "[$]$1" | grep " "` - if test "x$HAS_SPACE" != x; then - if test "x$OPENJDK_BUILD_OS" = "xwindows"; then - # First convert it to DOS-style, short mode (no spaces) - $1=`$CYGPATH -s -m -a "[$]$1"` - # Now it's case insensitive; let's make it lowercase to improve readability - $1=`$ECHO "[$]$1" | $TR 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvqxyz'` - # Now convert it back to Unix-stile (cygpath) - $1=`$CYGPATH -u "[$]$1"` - else - AC_MSG_ERROR([You cannot have spaces in $2! "[$]$1"]) - fi - fi -]) - -AC_DEFUN([SET_FULL_PATH_SPACESAFE], -[ - # Translate long cygdrive or C:\sdfsf path - # into a short mixed mode path that has no - # spaces in it. - tmp="[$]$1" + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then + BASIC_FIXUP_PATH_CYGWIN($1) + elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then + BASIC_FIXUP_PATH_MSYS($1) + else + # We're on a posix platform. Hooray! :) + path="[$]$1" - if test "x$OPENJDK_BUILD_OS" = "xwindows"; then - tmp=`$CYGPATH -u "[$]$1"` - tmp=`which "$tmp"` - # If file exists with .exe appended, that's the real filename - # and cygpath needs that to convert to short style path. - if test -f "${tmp}.exe"; then - tmp="${tmp}.exe" - elif test -f "${tmp}.cmd"; then - tmp="${tmp}.cmd" - fi - # Convert to C:/ mixed style path without spaces. - tmp=`$CYGPATH -s -m "$tmp"` + if test ! -f "$path" && test ! -d "$path"; then + AC_MSG_ERROR([The path of $1, which resolves as "$path", is not found.]) fi - $1="$tmp" + + has_space=`$ECHO "$path" | $GREP " "` + if test "x$has_space" != x; then + AC_MSG_NOTICE([The path of $1, which resolves as "$path", is invalid.]) + AC_MSG_ERROR([Spaces are not allowed in this path.]) + fi + fi ]) -AC_DEFUN([REMOVE_SYMBOLIC_LINKS], +# This will make sure the given variable points to a executable +# with a full and proper path. This means: +# 1) There will be no spaces in the path. On posix platforms, +# spaces in the path will result in an error. On Windows, +# the path will be rewritten using short-style to be space-free. +# 2) The path will be absolute, and it will be in unix-style (on +# cygwin). +# Any arguments given to the executable is preserved. +# If the input variable does not have a directory specification, then +# it need to be in the PATH. +# $1: The name of the variable to fix +AC_DEFUN([BASIC_FIXUP_EXECUTABLE], +[ + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then + BASIC_FIXUP_EXECUTABLE_CYGWIN($1) + elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then + BASIC_FIXUP_EXECUTABLE_MSYS($1) + else + # We're on a posix platform. Hooray! :) + # First separate the path from the arguments. This will split at the first + # space. + complete="[$]$1" + path="${complete%% *}" + tmp="$complete EOL" + arguments="${tmp#* }" + + new_path=`$WHICH $path 2> /dev/null` + if test "x$new_path" = x; then + is_absolute_path=`$ECHO "$path" | $GREP ^/` + if test "x$is_absolute_path" != x; then + AC_MSG_NOTICE([Resolving $1 (as $path) with 'which' failed, using $path directly.]) + new_path="$path" + else + AC_MSG_NOTICE([The path of $1, which resolves as "$complete", is not found.]) + has_space=`$ECHO "$complete" | $GREP " "` + if test "x$has_space" != x; then + AC_MSG_NOTICE([This might be caused by spaces in the path, which is not allowed.]) + fi + AC_MSG_ERROR([Cannot locate the the path of $1]) + fi + fi + fi + + # Now join together the path and the arguments once again + if test "x$arguments" != xEOL; then + new_complete="$new_path ${arguments% *}" + else + new_complete="$new_path" + fi + + if test "x$complete" != "x$new_complete"; then + $1="$new_complete" + AC_MSG_NOTICE([Rewriting $1 to "$new_complete"]) + fi +]) + +AC_DEFUN([BASIC_REMOVE_SYMBOLIC_LINKS], [ if test "x$OPENJDK_BUILD_OS" != xwindows; then # Follow a chain of symbolic links. Use readlink # where it exists, else fall back to horribly # complicated shell code. - AC_PATH_PROG(READLINK, readlink) if test "x$READLINK_TESTED" != yes; then # On MacOSX there is a readlink tool with a different # purpose than the GNU readlink tool. Check the found readlink. - ISGNU=`$READLINK --help 2>&1 | grep GNU` + ISGNU=`$READLINK --help 2>&1 | $GREP GNU` if test "x$ISGNU" = x; then # A readlink that we do not know how to use. # Are there other non-GNU readlinks out there? @@ -125,23 +143,25 @@ AC_DEFUN([REMOVE_SYMBOLIC_LINKS], else STARTDIR=$PWD COUNTER=0 - DIR=`dirname [$]$1` - FIL=`basename [$]$1` + sym_link_dir=`$DIRNAME [$]$1` + sym_link_file=`$BASENAME [$]$1` while test $COUNTER -lt 20; do - ISLINK=`ls -l $DIR/$FIL | grep '\->' | sed -e 's/.*-> \(.*\)/\1/'` + ISLINK=`$LS -l $sym_link_dir/$sym_link_file | $GREP '\->' | $SED -e 's/.*-> \(.*\)/\1/'` if test "x$ISLINK" == x; then # This is not a symbolic link! We are done! break fi # The link might be relative! We have to use cd to travel safely. - cd $DIR - cd `dirname $ISLINK` - DIR=`pwd` - FIL=`basename $ISLINK` + cd $sym_link_dir + # ... and we must get the to the absolute path, not one using symbolic links. + cd `pwd -P` + cd `$DIRNAME $ISLINK` + sym_link_dir=`$THEPWDCMD` + sym_link_file=`$BASENAME $ISLINK` let COUNTER=COUNTER+1 done cd $STARTDIR - $1=$DIR/$FIL + $1=$sym_link_dir/$sym_link_file fi fi ]) @@ -152,6 +172,107 @@ AC_DEFUN_ONCE([BASIC_INIT], AC_SUBST(CONFIGURE_COMMAND_LINE) DATE_WHEN_CONFIGURED=`LANG=C date` AC_SUBST(DATE_WHEN_CONFIGURED) +AC_MSG_NOTICE([Configuration created at $DATE_WHEN_CONFIGURED.]) +AC_MSG_NOTICE([configure script generated at timestamp $DATE_WHEN_GENERATED.]) +]) + +# Test that variable $1 denoting a program is not empty. If empty, exit with an error. +# $1: variable to check +# $2: executable name to print in warning (optional) +AC_DEFUN([BASIC_CHECK_NONEMPTY], +[ + if test "x[$]$1" = x; then + if test "x$2" = x; then + PROG_NAME=translit($1,A-Z,a-z) + else + PROG_NAME=$2 + fi + AC_MSG_NOTICE([Could not find $PROG_NAME!]) + AC_MSG_ERROR([Cannot continue]) + fi +]) + +# Does AC_PATH_PROG followed by BASIC_CHECK_NONEMPTY. +# Arguments as AC_PATH_PROG: +# $1: variable to set +# $2: executable name to look for +AC_DEFUN([BASIC_REQUIRE_PROG], +[ + AC_PATH_PROGS($1, $2) + BASIC_CHECK_NONEMPTY($1, $2) +]) + +# Setup the most fundamental tools that relies on not much else to set up, +# but is used by much of the early bootstrap code. +AC_DEFUN_ONCE([BASIC_SETUP_FUNDAMENTAL_TOOLS], +[ + +# Start with tools that do not need have cross compilation support +# and can be expected to be found in the default PATH. These tools are +# used by configure. Nor are these tools expected to be found in the +# devkit from the builddeps server either, since they are +# needed to download the devkit. + +# First are all the simple required tools. +BASIC_REQUIRE_PROG(BASENAME, basename) +BASIC_REQUIRE_PROG(BASH, bash) +BASIC_REQUIRE_PROG(CAT, cat) +BASIC_REQUIRE_PROG(CHMOD, chmod) +BASIC_REQUIRE_PROG(CMP, cmp) +BASIC_REQUIRE_PROG(CP, cp) +BASIC_REQUIRE_PROG(CUT, cut) +BASIC_REQUIRE_PROG(DATE, date) +BASIC_REQUIRE_PROG(DIFF, [gdiff diff]) +BASIC_REQUIRE_PROG(DIRNAME, dirname) +BASIC_REQUIRE_PROG(ECHO, echo) +BASIC_REQUIRE_PROG(EXPR, expr) +BASIC_REQUIRE_PROG(FILE, file) +BASIC_REQUIRE_PROG(FIND, find) +BASIC_REQUIRE_PROG(HEAD, head) +BASIC_REQUIRE_PROG(LN, ln) +BASIC_REQUIRE_PROG(LS, ls) +BASIC_REQUIRE_PROG(MKDIR, mkdir) +BASIC_REQUIRE_PROG(MKTEMP, mktemp) +BASIC_REQUIRE_PROG(MV, mv) +BASIC_REQUIRE_PROG(PRINTF, printf) +BASIC_REQUIRE_PROG(THEPWDCMD, pwd) +BASIC_REQUIRE_PROG(RM, rm) +BASIC_REQUIRE_PROG(SH, sh) +BASIC_REQUIRE_PROG(SORT, sort) +BASIC_REQUIRE_PROG(TAIL, tail) +BASIC_REQUIRE_PROG(TAR, tar) +BASIC_REQUIRE_PROG(TEE, tee) +BASIC_REQUIRE_PROG(TOUCH, touch) +BASIC_REQUIRE_PROG(TR, tr) +BASIC_REQUIRE_PROG(UNAME, uname) +BASIC_REQUIRE_PROG(UNIQ, uniq) +BASIC_REQUIRE_PROG(WC, wc) +BASIC_REQUIRE_PROG(WHICH, which) +BASIC_REQUIRE_PROG(XARGS, xargs) + +# Then required tools that require some special treatment. +AC_PROG_AWK +BASIC_CHECK_NONEMPTY(AWK) +AC_PROG_GREP +BASIC_CHECK_NONEMPTY(GREP) +AC_PROG_EGREP +BASIC_CHECK_NONEMPTY(EGREP) +AC_PROG_FGREP +BASIC_CHECK_NONEMPTY(FGREP) +AC_PROG_SED +BASIC_CHECK_NONEMPTY(SED) + +AC_PATH_PROGS(NAWK, [nawk gawk awk]) +BASIC_CHECK_NONEMPTY(NAWK) + +# Always force rm. +RM="$RM -f" + +# These are not required on all platforms +AC_PATH_PROG(CYGPATH, cygpath) +AC_PATH_PROG(READLINK, readlink) +AC_PATH_PROG(DF, df) +AC_PATH_PROG(SETFILE, SetFile) ]) # Setup basic configuration paths, and platform-specific stuff related to PATHs. @@ -159,46 +280,37 @@ AC_DEFUN_ONCE([BASIC_SETUP_PATHS], [ # Locate the directory of this script. SCRIPT="[$]0" -REMOVE_SYMBOLIC_LINKS(SCRIPT) -AUTOCONF_DIR=`dirname [$]0` +BASIC_REMOVE_SYMBOLIC_LINKS(SCRIPT) +AUTOCONF_DIR=`cd \`$DIRNAME $SCRIPT\`; $THEPWDCMD` # Where is the source? It is located two levels above the configure script. CURDIR="$PWD" cd "$AUTOCONF_DIR/../.." SRC_ROOT="`pwd`" -if test "x$OPENJDK_BUILD_OS" = "xwindows"; then - SRC_ROOT_LENGTH=`pwd|wc -m` - if test $SRC_ROOT_LENGTH -gt 100; then - AC_MSG_ERROR([Your base path is too long. It is $SRC_ROOT_LENGTH characters long, but only 100 is supported]) - fi + +if test "x$OPENJDK_TARGET_OS" = "xwindows"; then + PATH_SEP=";" + BASIC_CHECK_PATHS_WINDOWS +else + PATH_SEP=":" fi + AC_SUBST(SRC_ROOT) +AC_SUBST(PATH_SEP) cd "$CURDIR" -SPACESAFE(SRC_ROOT,[the path to the source root]) -SPACESAFE(CURDIR,[the path to the current directory]) +BASIC_FIXUP_PATH(SRC_ROOT) +BASIC_FIXUP_PATH(CURDIR) if test "x$OPENJDK_BUILD_OS" = "xsolaris"; then # Add extra search paths on solaris for utilities like ar and as etc... PATH="$PATH:/usr/ccs/bin:/usr/sfw/bin:/opt/csw/bin" fi -# For cygwin we need cygpath first, since it is used everywhere. -AC_PATH_PROG(CYGPATH, cygpath) -PATH_SEP=":" -if test "x$OPENJDK_BUILD_OS" = "xwindows"; then - if test "x$CYGPATH" = x; then - AC_MSG_ERROR([Something is wrong with your cygwin installation since I cannot find cygpath.exe in your path]) - fi - PATH_SEP=";" -fi -AC_SUBST(PATH_SEP) - # You can force the sys-root if the sys-root encoded into the cross compiler tools # is not correct. AC_ARG_WITH(sys-root, [AS_HELP_STRING([--with-sys-root], - [pass this sys-root to the compilers and linker (useful if the sys-root encoded in - the cross compiler tools is incorrect)])]) + [pass this sys-root to the compilers and tools (for cross-compiling)])]) if test "x$with_sys_root" != x; then SYS_ROOT=$with_sys_root @@ -208,7 +320,7 @@ fi AC_SUBST(SYS_ROOT) AC_ARG_WITH([tools-dir], [AS_HELP_STRING([--with-tools-dir], - [search this directory for (cross-compiling) compilers and tools])], [TOOLS_DIR=$with_tools_dir]) + [search this directory for compilers and tools (for cross-compiling)])], [TOOLS_DIR=$with_tools_dir]) AC_ARG_WITH([devkit], [AS_HELP_STRING([--with-devkit], [use this directory as base for tools-dir and sys-root (for cross-compiling)])], @@ -229,7 +341,7 @@ AC_DEFUN_ONCE([BASIC_SETUP_OUTPUT_DIR], [ AC_ARG_WITH(conf-name, [AS_HELP_STRING([--with-conf-name], - [use this as the name of the configuration, overriding the generated default])], + [use this as the name of the configuration @<:@generated from important configuration options@:>@])], [ CONF_NAME=${with_conf_name} ]) # Test from where we are running configure, in or outside of src root. @@ -240,7 +352,7 @@ if test "x$CURDIR" = "x$SRC_ROOT" || test "x$CURDIR" = "x$SRC_ROOT/common" || te CONF_NAME="${OPENJDK_TARGET_OS}-${OPENJDK_TARGET_CPU}-${JDK_VARIANT}-${ANDED_JVM_VARIANTS}-${DEBUG_LEVEL}" fi OUTPUT_ROOT="$SRC_ROOT/build/${CONF_NAME}" - mkdir -p "$OUTPUT_ROOT" + $MKDIR -p "$OUTPUT_ROOT" if test ! -d "$OUTPUT_ROOT"; then AC_MSG_ERROR([Could not create build directory $OUTPUT_ROOT]) fi @@ -253,9 +365,34 @@ else CONF_NAME=`$ECHO $CURDIR | $SED -e "s!^${SRC_ROOT}/build/!!"` fi OUTPUT_ROOT="$CURDIR" -fi -SPACESAFE(OUTPUT_ROOT,[the path to the output root]) + # WARNING: This might be a bad thing to do. You need to be sure you want to + # have a configuration in this directory. Do some sanity checks! + + if test ! -e "$OUTPUT_ROOT/spec.gmk"; then + # If we have a spec.gmk, we have run here before and we are OK. Otherwise, check for + # other files + files_present=`$LS $OUTPUT_ROOT` + # Configure has already touched config.log and confdefs.h in the current dir when this check + # is performed. + filtered_files=`$ECHO "$files_present" | $SED -e 's/config.log//g' -e 's/confdefs.h//g' -e 's/ //g' \ + | $TR -d '\n'` + if test "x$filtered_files" != x; then + AC_MSG_NOTICE([Current directory is $CURDIR.]) + AC_MSG_NOTICE([Since this is not the source root, configure will output the configuration here]) + AC_MSG_NOTICE([(as opposed to creating a configuration in /build/).]) + AC_MSG_NOTICE([However, this directory is not empty. This is not allowed, since it could]) + AC_MSG_NOTICE([seriously mess up just about everything.]) + AC_MSG_NOTICE([Try 'cd $SRC_ROOT' and restart configure]) + AC_MSG_NOTICE([(or create a new empty directory and cd to it).]) + AC_MSG_ERROR([Will not continue creating configuration in $CURDIR]) + fi + fi +fi +AC_MSG_CHECKING([what configuration name to use]) +AC_MSG_RESULT([$CONF_NAME]) + +BASIC_FIXUP_PATH(OUTPUT_ROOT) AC_SUBST(SPEC, $OUTPUT_ROOT/spec.gmk) AC_SUBST(CONF_NAME, $CONF_NAME) @@ -287,7 +424,7 @@ AC_DEFUN_ONCE([BASIC_SETUP_LOGGING], # Setup default logging of stdout and stderr to build.log in the output root. BUILD_LOG='$(OUTPUT_ROOT)/build.log' BUILD_LOG_PREVIOUS='$(OUTPUT_ROOT)/build.log.old' -BUILD_LOG_WRAPPER='$(SH) $(SRC_ROOT)/common/bin/logger.sh $(BUILD_LOG)' +BUILD_LOG_WRAPPER='$(BASH) $(SRC_ROOT)/common/bin/logger.sh $(BUILD_LOG)' AC_SUBST(BUILD_LOG) AC_SUBST(BUILD_LOG_PREVIOUS) AC_SUBST(BUILD_LOG_WRAPPER) @@ -305,7 +442,6 @@ AC_DEFUN([BASIC_CHECK_MAKE_VERSION], DESCRIPTION="$2" if test "x$MAKE_CANDIDATE" != x; then AC_MSG_NOTICE([Testing potential make at $MAKE_CANDIDATE, found using $DESCRIPTION]) - SET_FULL_PATH(MAKE_CANDIDATE) MAKE_VERSION_STRING=`$MAKE_CANDIDATE --version | $HEAD -n 1` IS_GNU_MAKE=`$ECHO $MAKE_VERSION_STRING | $GREP 'GNU Make'` if test "x$IS_GNU_MAKE" = x; then @@ -314,8 +450,27 @@ AC_DEFUN([BASIC_CHECK_MAKE_VERSION], IS_MODERN_MAKE=`$ECHO $MAKE_VERSION_STRING | $GREP '3.8[[12346789]]'` if test "x$IS_MODERN_MAKE" = x; then AC_MSG_NOTICE([Found GNU make at $MAKE_CANDIDATE, however this is not version 3.81 or later. (it is: $MAKE_VERSION_STRING). Ignoring.]) - else - FOUND_MAKE=$MAKE_CANDIDATE + else + if test "x$OPENJDK_BUILD_OS" = "xwindows"; then + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then + MAKE_EXPECTED_ENV='cygwin' + elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then + MAKE_EXPECTED_ENV='msys' + else + AC_MSG_ERROR([Unknown Windows environment]) + fi + MAKE_BUILT_FOR=`$MAKE_CANDIDATE --version | $GREP -i 'built for'` + IS_MAKE_CORRECT_ENV=`$ECHO $MAKE_BUILT_FOR | $GREP $MAKE_EXPECTED_ENV` + else + # Not relevant for non-Windows + IS_MAKE_CORRECT_ENV=true + fi + if test "x$IS_MAKE_CORRECT_ENV" = x; then + AC_MSG_NOTICE([Found GNU make version $MAKE_VERSION_STRING at $MAKE_CANDIDATE, but it is not for $MAKE_EXPECTED_ENV (it says: $MAKE_BUILT_FOR). Ignoring.]) + else + FOUND_MAKE=$MAKE_CANDIDATE + BASIC_FIXUP_EXECUTABLE(FOUND_MAKE) + fi fi fi fi @@ -330,7 +485,7 @@ AC_DEFUN([BASIC_CHECK_GNU_MAKE], if test ! -f "$MAKE"; then AC_MSG_ERROR([The specified make (by MAKE=$MAKE) is not found.]) fi - BASIC_CHECK_MAKE_VERSION("$MAKE", [user supplied MAKE=]) + BASIC_CHECK_MAKE_VERSION("$MAKE", [user supplied MAKE=$MAKE]) if test "x$FOUND_MAKE" = x; then AC_MSG_ERROR([The specified make (by MAKE=$MAKE) is not GNU make 3.81 or newer.]) fi @@ -375,7 +530,7 @@ AC_DEFUN([BASIC_CHECK_FIND_DELETE], AC_MSG_CHECKING([if find supports -delete]) FIND_DELETE="-delete" - DELETEDIR=`mktemp -d tmp.XXXXXXXXXX` || (echo Could not create temporary directory!; exit $?) + DELETEDIR=`$MKTEMP -d tmp.XXXXXXXXXX` || (echo Could not create temporary directory!; exit $?) echo Hejsan > $DELETEDIR/TestIfFindSupportsDelete @@ -389,102 +544,22 @@ AC_DEFUN([BASIC_CHECK_FIND_DELETE], AC_MSG_RESULT([yes]) fi rmdir $DELETEDIR + AC_SUBST(FIND_DELETE) ]) -# Test that variable $1 denoting a program is not empty. If empty, exit with an error. -# $1: variable to check -# $2: executable name to print in warning (optional) -AC_DEFUN([CHECK_NONEMPTY], +AC_DEFUN_ONCE([BASIC_SETUP_COMPLEX_TOOLS], [ - if test "x[$]$1" = x; then - if test "x$2" = x; then - PROG_NAME=translit($1,A-Z,a-z) - else - PROG_NAME=$2 - fi - AC_MSG_NOTICE([Could not find $PROG_NAME!]) - AC_MSG_ERROR([Cannot continue]) - fi -]) - -# Does AC_PATH_PROG followed by CHECK_NONEMPTY. -# Arguments as AC_PATH_PROG: -# $1: variable to set -# $2: executable name to look for -AC_DEFUN([BASIC_REQUIRE_PROG], -[ - AC_PATH_PROGS($1, $2) - CHECK_NONEMPTY($1, $2) -]) - -AC_DEFUN_ONCE([BASIC_SETUP_TOOLS], -[ -# Start with tools that do not need have cross compilation support -# and can be expected to be found in the default PATH. These tools are -# used by configure. Nor are these tools expected to be found in the -# devkit from the builddeps server either, since they are -# needed to download the devkit. - -# First are all the simple required tools. -BASIC_REQUIRE_PROG(BASENAME, basename) -BASIC_REQUIRE_PROG(CAT, cat) -BASIC_REQUIRE_PROG(CHMOD, chmod) -BASIC_REQUIRE_PROG(CMP, cmp) -BASIC_REQUIRE_PROG(CP, cp) -BASIC_REQUIRE_PROG(CPIO, cpio) -BASIC_REQUIRE_PROG(CUT, cut) -BASIC_REQUIRE_PROG(DATE, date) -BASIC_REQUIRE_PROG(DF, df) -BASIC_REQUIRE_PROG(DIFF, [gdiff diff]) -BASIC_REQUIRE_PROG(ECHO, echo) -BASIC_REQUIRE_PROG(EXPR, expr) -BASIC_REQUIRE_PROG(FILE, file) -BASIC_REQUIRE_PROG(FIND, find) -BASIC_REQUIRE_PROG(HEAD, head) -BASIC_REQUIRE_PROG(LN, ln) -BASIC_REQUIRE_PROG(LS, ls) -BASIC_REQUIRE_PROG(MKDIR, mkdir) -BASIC_REQUIRE_PROG(MV, mv) -BASIC_REQUIRE_PROG(PRINTF, printf) -BASIC_REQUIRE_PROG(SH, sh) -BASIC_REQUIRE_PROG(SORT, sort) -BASIC_REQUIRE_PROG(TAIL, tail) -BASIC_REQUIRE_PROG(TAR, tar) -BASIC_REQUIRE_PROG(TEE, tee) -BASIC_REQUIRE_PROG(TOUCH, touch) -BASIC_REQUIRE_PROG(TR, tr) -BASIC_REQUIRE_PROG(UNIQ, uniq) -BASIC_REQUIRE_PROG(UNZIP, unzip) -BASIC_REQUIRE_PROG(WC, wc) -BASIC_REQUIRE_PROG(XARGS, xargs) -BASIC_REQUIRE_PROG(ZIP, zip) - -# Then required tools that require some special treatment. -AC_PROG_AWK -CHECK_NONEMPTY(AWK) -AC_PROG_GREP -CHECK_NONEMPTY(GREP) -AC_PROG_EGREP -CHECK_NONEMPTY(EGREP) -AC_PROG_FGREP -CHECK_NONEMPTY(FGREP) -AC_PROG_SED -CHECK_NONEMPTY(SED) - -AC_PATH_PROGS(NAWK, [nawk gawk awk]) -CHECK_NONEMPTY(NAWK) - BASIC_CHECK_GNU_MAKE -BASIC_REQUIRE_PROG(RM, rm) -RM="$RM -f" - BASIC_CHECK_FIND_DELETE -AC_SUBST(FIND_DELETE) + +# These tools might not be installed by default, +# need hint on how to install them. +BASIC_REQUIRE_PROG(UNZIP, unzip) +BASIC_REQUIRE_PROG(ZIP, zip) # Non-required basic tools -AC_PATH_PROG(THEPWDCMD, pwd) AC_PATH_PROG(LDD, ldd) if test "x$LDD" = "x"; then # List shared lib dependencies is used for @@ -497,52 +572,17 @@ if test "x$OTOOL" = "x"; then OTOOL="true" fi AC_PATH_PROGS(READELF, [readelf greadelf]) -AC_PATH_PROGS(OBJDUMP, [objdump gobjdump]) AC_PATH_PROG(HG, hg) -]) +AC_PATH_PROG(STAT, stat) +AC_PATH_PROG(TIME, time) -AC_DEFUN_ONCE([BASIC_COMPILE_UNCYGDRIVE], -[ -# When using cygwin, we need a wrapper binary that renames -# /cygdrive/c/ arguments into c:/ arguments and peeks into -# @files and rewrites these too! This wrapper binary is -# called uncygdrive.exe. -UNCYGDRIVE= -if test "x$OPENJDK_BUILD_OS" = xwindows; then - AC_MSG_CHECKING([if uncygdrive can be created]) - UNCYGDRIVE_SRC=`$CYGPATH -m $SRC_ROOT/common/src/uncygdrive.c` - rm -f $OUTPUT_ROOT/uncygdrive* - UNCYGDRIVE=`$CYGPATH -m $OUTPUT_ROOT/uncygdrive.exe` - cd $OUTPUT_ROOT - $CC $UNCYGDRIVE_SRC /Fe$UNCYGDRIVE > $OUTPUT_ROOT/uncygdrive1.log 2>&1 - cd $CURDIR - - if test ! -x $OUTPUT_ROOT/uncygdrive.exe; then - AC_MSG_RESULT([no]) - cat $OUTPUT_ROOT/uncygdrive1.log - AC_MSG_ERROR([Could not create $OUTPUT_ROOT/uncygdrive.exe]) - fi - AC_MSG_RESULT([$UNCYGDRIVE]) - AC_MSG_CHECKING([if uncygdrive.exe works]) - cd $OUTPUT_ROOT - $UNCYGDRIVE $CC $SRC_ROOT/common/src/uncygdrive.c /Fe$OUTPUT_ROOT/uncygdrive2.exe > $OUTPUT_ROOT/uncygdrive2.log 2>&1 - cd $CURDIR - if test ! -x $OUTPUT_ROOT/uncygdrive2.exe; then - AC_MSG_RESULT([no]) - cat $OUTPUT_ROOT/uncygdrive2.log - AC_MSG_ERROR([Uncygdrive did not work!]) - fi - AC_MSG_RESULT([yes]) - rm -f $OUTPUT_ROOT/uncygdrive?.??? $OUTPUT_ROOT/uncygdrive.obj - # The path to uncygdrive to use should be Unix-style - UNCYGDRIVE="$OUTPUT_ROOT/uncygdrive.exe" +if test "x$OPENJDK_TARGET_OS" = "xwindows"; then + BASIC_REQUIRE_PROG(COMM, comm) fi - -AC_SUBST(UNCYGDRIVE) ]) - -# Check if build directory is on local disk. +# Check if build directory is on local disk. If not possible to determine, +# we prefer to claim it's local. # Argument 1: directory to test # Argument 2: what to do if it is on local disk # Argument 3: what to do otherwise (remote disk or failure) @@ -550,11 +590,26 @@ AC_DEFUN([BASIC_CHECK_DIR_ON_LOCAL_DISK], [ # df -l lists only local disks; if the given directory is not found then # a non-zero exit code is given - if $DF -l $1 > /dev/null 2>&1; then - $2 - else - $3 - fi + if test "x$DF" = x; then + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then + # msys does not have df; use Windows "net use" instead. + IS_NETWORK_DISK=`net use | grep \`pwd -W | cut -d ":" -f 1 | tr a-z A-Z\`:` + if test "x$IS_NETWORK_DISK" = x; then + $2 + else + $3 + fi + else + # No df here, say it's local + $2 + fi + else + if $DF -l $1 > /dev/null 2>&1; then + $2 + else + $3 + fi + fi ]) AC_DEFUN_ONCE([BASIC_TEST_USABILITY_ISSUES], diff --git a/common/autoconf/basics_windows.m4 b/common/autoconf/basics_windows.m4 new file mode 100644 index 00000000000..c7f3d5213ee --- /dev/null +++ b/common/autoconf/basics_windows.m4 @@ -0,0 +1,420 @@ +# +# Copyright (c) 2011, 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. 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. +# + +AC_DEFUN([BASIC_WINDOWS_REWRITE_AS_UNIX_PATH], +[ + windows_path="[$]$1" + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then + unix_path=`$CYGPATH -u "$windows_path"` + $1="$unix_path" + elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then + unix_path=`$ECHO "$windows_path" | $SED -e 's,^\\(.\\):,/\\1,g' -e 's,\\\\,/,g'` + $1="$unix_path" + fi +]) + +AC_DEFUN([BASIC_WINDOWS_REWRITE_AS_WINDOWS_MIXED_PATH], +[ + unix_path="[$]$1" + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then + windows_path=`$CYGPATH -m "$unix_path"` + $1="$windows_path" + elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then + windows_path=`cmd //c echo $unix_path` + $1="$windows_path" + fi +]) + +# Helper function which possibly converts a path using DOS-style short mode. +# If so, the updated path is stored in $new_path. +# $1: The path to check +AC_DEFUN([BASIC_MAKE_WINDOWS_SPACE_SAFE_CYGWIN], +[ + input_path="$1" + # Check if we need to convert this using DOS-style short mode. If the path + # contains just simple characters, use it. Otherwise (spaces, weird characters), + # take no chances and rewrite it. + # Note: m4 eats our [], so we need to use @<:@ and @:>@ instead. + has_forbidden_chars=`$ECHO "$input_path" | $GREP @<:@^-._/a-zA-Z0-9@:>@` + if test "x$has_forbidden_chars" != x; then + # Now convert it to mixed DOS-style, short mode (no spaces, and / instead of \) + shortmode_path=`$CYGPATH -s -m -a "$input_path"` + path_after_shortmode=`$CYGPATH -u "$shortmode_path"` + if test "x$path_after_shortmode" != "x$input_to_shortpath"; then + # Going to short mode and back again did indeed matter. Since short mode is + # case insensitive, let's make it lowercase to improve readability. + shortmode_path=`$ECHO "$shortmode_path" | $TR 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` + # Now convert it back to Unix-stile (cygpath) + input_path=`$CYGPATH -u "$shortmode_path"` + new_path="$input_path" + fi + fi + + test_cygdrive_prefix=`$ECHO $input_path | $GREP ^/cygdrive/` + if test "x$test_cygdrive_prefix" = x; then + # As a simple fix, exclude /usr/bin since it's not a real path. + if test "x`$ECHO $1 | $GREP ^/usr/bin/`" = x; then + # The path is in a Cygwin special directory (e.g. /home). We need this converted to + # a path prefixed by /cygdrive for fixpath to work. + new_path="$CYGWIN_ROOT_PATH$input_path" + fi + fi +]) + +# Helper function which possibly converts a path using DOS-style short mode. +# If so, the updated path is stored in $new_path. +# $1: The path to check +AC_DEFUN([BASIC_MAKE_WINDOWS_SPACE_SAFE_MSYS], +[ + input_path="$1" + # Check if we need to convert this using DOS-style short mode. If the path + # contains just simple characters, use it. Otherwise (spaces, weird characters), + # take no chances and rewrite it. + # Note: m4 eats our [], so we need to use @<:@ and @:>@ instead. + has_forbidden_chars=`$ECHO "$input_path" | $GREP @<:@^-_/:a-zA-Z0-9@:>@` + if test "x$has_forbidden_chars" != x; then + # Now convert it to mixed DOS-style, short mode (no spaces, and / instead of \) + new_path=`cmd /c "for %A in (\"$input_path\") do @echo %~sA"|$TR \\\\\\\\ / | $TR 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` + fi +]) + +# FIXME: The BASIC_FIXUP_*_CYGWIN/MSYS is most likely too convoluted +# and could probably be heavily simplified. However, all changes in this +# area tend to need lot of testing in different scenarios, and in lack of +# proper unit testing, cleaning this up has not been deemed worth the effort +# at the moment. + +AC_DEFUN([BASIC_FIXUP_PATH_CYGWIN], +[ + # Input might be given as Windows format, start by converting to + # unix format. + path="[$]$1" + new_path=`$CYGPATH -u "$path"` + + # Cygwin tries to hide some aspects of the Windows file system, such that binaries are + # named .exe but called without that suffix. Therefore, "foo" and "foo.exe" are considered + # the same file, most of the time (as in "test -f"). But not when running cygpath -s, then + # "foo.exe" is OK but "foo" is an error. + # + # This test is therefore slightly more accurate than "test -f" to check for file precense. + # It is also a way to make sure we got the proper file name for the real test later on. + test_shortpath=`$CYGPATH -s -m "$new_path" 2> /dev/null` + if test "x$test_shortpath" = x; then + AC_MSG_NOTICE([The path of $1, which resolves as "$path", is invalid.]) + AC_MSG_ERROR([Cannot locate the the path of $1]) + fi + + # Call helper function which possibly converts this using DOS-style short mode. + # If so, the updated path is stored in $new_path. + BASIC_MAKE_WINDOWS_SPACE_SAFE_CYGWIN([$new_path]) + + if test "x$path" != "x$new_path"; then + $1="$new_path" + AC_MSG_NOTICE([Rewriting $1 to "$new_path"]) + fi +]) + +AC_DEFUN([BASIC_FIXUP_PATH_MSYS], +[ + path="[$]$1" + has_colon=`$ECHO $path | $GREP ^.:` + new_path="$path" + if test "x$has_colon" = x; then + # Not in mixed or Windows style, start by that. + new_path=`cmd //c echo $path` + fi + + BASIC_MAKE_WINDOWS_SPACE_SAFE_MSYS([$new_path]) + BASIC_WINDOWS_REWRITE_AS_UNIX_PATH(new_path) + if test "x$path" != "x$new_path"; then + $1="$new_path" + AC_MSG_NOTICE([Rewriting $1 to "$new_path"]) + fi + + # Save the first 10 bytes of this path to the storage, so fixpath can work. + all_fixpath_prefixes=("${all_fixpath_prefixes@<:@@@:>@}" "${new_path:0:10}") +]) + +AC_DEFUN([BASIC_FIXUP_EXECUTABLE_CYGWIN], +[ + # First separate the path from the arguments. This will split at the first + # space. + complete="[$]$1" + path="${complete%% *}" + tmp="$complete EOL" + arguments="${tmp#* }" + + # Input might be given as Windows format, start by converting to + # unix format. + new_path=`$CYGPATH -u "$path"` + + # Now try to locate executable using which + new_path=`$WHICH "$new_path" 2> /dev/null` + # bat and cmd files are not always considered executable in cygwin causing which + # to not find them + if test "x$new_path" = x \ + && test "x`$ECHO \"$path\" | $GREP -e \"\\.bat$\" -e \"\\.cmd$\"`" != x \ + && test "x`$LS \"$path\" 2>/dev/null`" != x; then + new_path=`$CYGPATH -u "$path"` + fi + if test "x$new_path" = x; then + # Oops. Which didn't find the executable. + # The splitting of arguments from the executable at a space might have been incorrect, + # since paths with space are more likely in Windows. Give it another try with the whole + # argument. + path="$complete" + arguments="EOL" + new_path=`$CYGPATH -u "$path"` + new_path=`$WHICH "$new_path" 2> /dev/null` + # bat and cmd files are not always considered executable in cygwin causing which + # to not find them + if test "x$new_path" = x \ + && test "x`$ECHO \"$path\" | $GREP -e \"\\.bat$\" -e \"\\.cmd$\"`" != x \ + && test "x`$LS \"$path\" 2>/dev/null`" != x; then + new_path=`$CYGPATH -u "$path"` + fi + if test "x$new_path" = x; then + # It's still not found. Now this is an unrecoverable error. + AC_MSG_NOTICE([The path of $1, which resolves as "$complete", is not found.]) + has_space=`$ECHO "$complete" | $GREP " "` + if test "x$has_space" != x; then + AC_MSG_NOTICE([You might be mixing spaces in the path and extra arguments, which is not allowed.]) + fi + AC_MSG_ERROR([Cannot locate the the path of $1]) + fi + fi + + # Cygwin tries to hide some aspects of the Windows file system, such that binaries are + # named .exe but called without that suffix. Therefore, "foo" and "foo.exe" are considered + # the same file, most of the time (as in "test -f"). But not when running cygpath -s, then + # "foo.exe" is OK but "foo" is an error. + # + # This test is therefore slightly more accurate than "test -f" to check for file precense. + # It is also a way to make sure we got the proper file name for the real test later on. + test_shortpath=`$CYGPATH -s -m "$new_path" 2> /dev/null` + if test "x$test_shortpath" = x; then + # Short path failed, file does not exist as specified. + # Try adding .exe or .cmd + if test -f "${new_path}.exe"; then + input_to_shortpath="${new_path}.exe" + elif test -f "${new_path}.cmd"; then + input_to_shortpath="${new_path}.cmd" + else + AC_MSG_NOTICE([The path of $1, which resolves as "$new_path", is invalid.]) + AC_MSG_NOTICE([Neither "$new_path" nor "$new_path.exe/cmd" can be found]) + AC_MSG_ERROR([Cannot locate the the path of $1]) + fi + else + input_to_shortpath="$new_path" + fi + + # Call helper function which possibly converts this using DOS-style short mode. + # If so, the updated path is stored in $new_path. + new_path="$input_to_shortpath" + BASIC_MAKE_WINDOWS_SPACE_SAFE_CYGWIN([$input_to_shortpath]) + # remove trailing .exe if any + new_path="${new_path/%.exe/}" +]) + +AC_DEFUN([BASIC_FIXUP_EXECUTABLE_MSYS], +[ + # First separate the path from the arguments. This will split at the first + # space. + complete="[$]$1" + path="${complete%% *}" + tmp="$complete EOL" + arguments="${tmp#* }" + + # Input might be given as Windows format, start by converting to + # unix format. + new_path="$path" + BASIC_WINDOWS_REWRITE_AS_UNIX_PATH(new_path) + + # Now try to locate executable using which + new_path=`$WHICH "$new_path" 2> /dev/null` + + if test "x$new_path" = x; then + # Oops. Which didn't find the executable. + # The splitting of arguments from the executable at a space might have been incorrect, + # since paths with space are more likely in Windows. Give it another try with the whole + # argument. + path="$complete" + arguments="EOL" + new_path="$path" + BASIC_WINDOWS_REWRITE_AS_UNIX_PATH(new_path) + + new_path=`$WHICH "$new_path" 2> /dev/null` + + if test "x$new_path" = x; then + # It's still not found. Now this is an unrecoverable error. + AC_MSG_NOTICE([The path of $1, which resolves as "$complete", is not found.]) + has_space=`$ECHO "$complete" | $GREP " "` + if test "x$has_space" != x; then + AC_MSG_NOTICE([You might be mixing spaces in the path and extra arguments, which is not allowed.]) + fi + AC_MSG_ERROR([Cannot locate the the path of $1]) + fi + fi + + # Now new_path has a complete unix path to the binary + if test "x`$ECHO $new_path | $GREP ^/bin/`" != x; then + # Keep paths in /bin as-is, but remove trailing .exe if any + new_path="${new_path/%.exe/}" + # Do not save /bin paths to all_fixpath_prefixes! + else + # Not in mixed or Windows style, start by that. + new_path=`cmd //c echo $new_path` + BASIC_MAKE_WINDOWS_SPACE_SAFE_MSYS([$new_path]) + # Output is in $new_path + BASIC_WINDOWS_REWRITE_AS_UNIX_PATH(new_path) + # remove trailing .exe if any + new_path="${new_path/%.exe/}" + + # Save the first 10 bytes of this path to the storage, so fixpath can work. + all_fixpath_prefixes=("${all_fixpath_prefixes@<:@@@:>@}" "${new_path:0:10}") + fi +]) + +# Setup basic configuration paths, and platform-specific stuff related to PATHs. +AC_DEFUN([BASIC_CHECK_PATHS_WINDOWS], +[ + SRC_ROOT_LENGTH=`$THEPWDCMD|$WC -m` + if test $SRC_ROOT_LENGTH -gt 100; then + AC_MSG_ERROR([Your base path is too long. It is $SRC_ROOT_LENGTH characters long, but only 100 is supported]) + fi + + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then + AC_MSG_CHECKING([cygwin release]) + CYGWIN_VERSION=`$UNAME -r` + AC_MSG_RESULT([$CYGWIN_VERSION]) + WINDOWS_ENV_VENDOR='cygwin' + WINDOWS_ENV_VERSION="$CYGWIN_VERSION" + + CYGWIN_VERSION_OK=`$ECHO $CYGWIN_VERSION | $GREP ^1.7.` + if test "x$CYGWIN_VERSION_OK" = x; then + AC_MSG_NOTICE([Your cygwin is too old. You are running $CYGWIN_VERSION, but at least cygwin 1.7 is required. Please upgrade.]) + AC_MSG_ERROR([Cannot continue]) + fi + if test "x$CYGPATH" = x; then + AC_MSG_ERROR([Something is wrong with your cygwin installation since I cannot find cygpath.exe in your path]) + fi + AC_MSG_CHECKING([cygwin root directory as unix-style path]) + # The cmd output ends with Windows line endings (CR/LF), the grep command will strip that away + cygwin_winpath_root=`cd / ; cmd /c cd | grep ".*"` + # Force cygpath to report the proper root by including a trailing space, and then stripping it off again. + CYGWIN_ROOT_PATH=`$CYGPATH -u "$cygwin_winpath_root " | $CUT -f 1 -d " "` + AC_MSG_RESULT([$CYGWIN_ROOT_PATH]) + WINDOWS_ENV_ROOT_PATH="$CYGWIN_ROOT_PATH" + test_cygdrive_prefix=`$ECHO $CYGWIN_ROOT_PATH | $GREP ^/cygdrive/` + if test "x$test_cygdrive_prefix" = x; then + AC_MSG_ERROR([Your cygdrive prefix is not /cygdrive. This is currently not supported. Change with mount -c.]) + fi + elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then + AC_MSG_CHECKING([msys release]) + MSYS_VERSION=`$UNAME -r` + AC_MSG_RESULT([$MSYS_VERSION]) + + WINDOWS_ENV_VENDOR='msys' + WINDOWS_ENV_VERSION="$MSYS_VERSION" + + AC_MSG_CHECKING([msys root directory as unix-style path]) + # The cmd output ends with Windows line endings (CR/LF), the grep command will strip that away + MSYS_ROOT_PATH=`cd / ; cmd /c cd | grep ".*"` + BASIC_WINDOWS_REWRITE_AS_UNIX_PATH(MSYS_ROOT_PATH) + AC_MSG_RESULT([$MSYS_ROOT_PATH]) + WINDOWS_ENV_ROOT_PATH="$MSYS_ROOT_PATH" + else + AC_MSG_ERROR([Unknown Windows environment. Neither cygwin nor msys was detected.]) + fi + + # Test if windows or unix (cygwin/msys) find is first in path. + AC_MSG_CHECKING([what kind of 'find' is first on the PATH]) + FIND_BINARY_OUTPUT=`find --version 2>&1` + if test "x`echo $FIND_BINARY_OUTPUT | $GREP GNU`" != x; then + AC_MSG_RESULT([unix style]) + elif test "x`echo $FIND_BINARY_OUTPUT | $GREP FIND`" != x; then + AC_MSG_RESULT([Windows]) + AC_MSG_NOTICE([Your path contains Windows tools (C:\Windows\system32) before your unix (cygwin or msys) tools.]) + AC_MSG_NOTICE([This will not work. Please correct and make sure /usr/bin (or similar) is first in path.]) + AC_MSG_ERROR([Cannot continue]) + else + AC_MSG_RESULT([unknown]) + AC_MSG_WARN([It seems that your find utility is non-standard.]) + fi +]) + +AC_DEFUN_ONCE([BASIC_COMPILE_FIXPATH], +[ +# When using cygwin or msys, we need a wrapper binary that renames +# /cygdrive/c/ arguments into c:/ arguments and peeks into +# @files and rewrites these too! This wrapper binary is +# called fixpath. +FIXPATH= +if test "x$OPENJDK_BUILD_OS" = xwindows; then + AC_MSG_CHECKING([if fixpath can be created]) + FIXPATH_SRC="$SRC_ROOT/common/src/fixpath.c" + FIXPATH_BIN="$OUTPUT_ROOT/fixpath.exe" + if test "x$OPENJDK_BUILD_OS_ENV" = xwindows.cygwin; then + FIXPATH_SRC=`$CYGPATH -m $FIXPATH_SRC` + FIXPATH_BIN=`$CYGPATH -m $FIXPATH_BIN` + # Important to keep the .exe suffix on Cygwin for Hotspot makefiles + FIXPATH="$OUTPUT_ROOT/fixpath.exe -c" + elif test "x$OPENJDK_BUILD_OS_ENV" = xwindows.msys; then + FIXPATH_SRC=`cmd //c echo $FIXPATH_SRC` + FIXPATH_BIN=`cmd //c echo $FIXPATH_BIN` + + # Take all collected prefixes and turn them into a -m/c/foo@/c/bar@... command line + # @ was chosen as separator to minimize risk of other tools messing around with it + all_unique_prefixes=`echo "${all_fixpath_prefixes@<:@@@:>@}" | tr ' ' '\n' | grep '^/./' | sort | uniq` + fixpath_argument_list=`echo $all_unique_prefixes | tr ' ' '@'` + + FIXPATH="$OUTPUT_ROOT/fixpath -m$fixpath_argument_list" + fi + rm -f $OUTPUT_ROOT/fixpath* + cd $OUTPUT_ROOT + $CC $FIXPATH_SRC -Fe$FIXPATH_BIN > $OUTPUT_ROOT/fixpath1.log 2>&1 + cd $CURDIR + + if test ! -x $OUTPUT_ROOT/fixpath.exe; then + AC_MSG_RESULT([no]) + cat $OUTPUT_ROOT/fixpath1.log + AC_MSG_ERROR([Could not create $OUTPUT_ROOT/fixpath.exe]) + fi + AC_MSG_RESULT([yes]) + AC_MSG_CHECKING([if fixpath.exe works]) + cd $OUTPUT_ROOT + $FIXPATH $CC $SRC_ROOT/common/src/fixpath.c -Fe$OUTPUT_ROOT/fixpath2.exe > $OUTPUT_ROOT/fixpath2.log 2>&1 + cd $CURDIR + if test ! -x $OUTPUT_ROOT/fixpath2.exe; then + AC_MSG_RESULT([no]) + cat $OUTPUT_ROOT/fixpath2.log + AC_MSG_ERROR([fixpath did not work!]) + fi + AC_MSG_RESULT([yes]) + rm -f $OUTPUT_ROOT/fixpath?.??? $OUTPUT_ROOT/fixpath.obj +fi + +AC_SUBST(FIXPATH) +]) diff --git a/common/autoconf/boot-jdk.m4 b/common/autoconf/boot-jdk.m4 index c4ce883363a..4a4ea36b50d 100644 --- a/common/autoconf/boot-jdk.m4 +++ b/common/autoconf/boot-jdk.m4 @@ -62,9 +62,12 @@ AC_DEFUN([BOOTJDK_DO_CHECK], else # We're done! :-) BOOT_JDK_FOUND=yes - SPACESAFE(BOOT_JDK,[the path to the Boot JDK]) + BASIC_FIXUP_PATH(BOOT_JDK) AC_MSG_CHECKING([for Boot JDK]) - AC_MSG_RESULT([$BOOT_JDK ($BOOT_JDK_VERSION)]) + AC_MSG_RESULT([$BOOT_JDK]) + AC_MSG_CHECKING([Boot JDK version]) + BOOT_JDK_VERSION=`"$BOOT_JDK/bin/java" -version 2>&1 | $TR '\n\r' ' '` + AC_MSG_RESULT([$BOOT_JDK_VERSION]) fi # end check jdk version fi # end check rt.jar fi # end check javac @@ -93,12 +96,8 @@ AC_DEFUN([BOOTJDK_CHECK_BUILDDEPS], AC_DEFUN([BOOTJDK_CHECK_JAVA_HOME], [ if test "x$JAVA_HOME" != x; then - if test "x$OPENJDK_TARGET_OS" = xwindows; then - # On Windows, JAVA_HOME is likely in DOS-style - JAVA_HOME_PROCESSED="`$CYGPATH -u "$JAVA_HOME"`" - else - JAVA_HOME_PROCESSED="$JAVA_HOME" - fi + JAVA_HOME_PROCESSED="$JAVA_HOME" + BASIC_FIXUP_PATH(JAVA_HOME_PROCESSED) if test ! -d "$JAVA_HOME_PROCESSED"; then AC_MSG_NOTICE([Your JAVA_HOME points to a non-existing directory!]) else @@ -125,8 +124,7 @@ AC_DEFUN([BOOTJDK_CHECK_JAVA_IN_PATH_IS_SYMLINK], # Lets find the JDK/JRE directory by following symbolic links. # Linux/GNU systems often have links from /usr/bin/java to # /etc/alternatives/java to the real JDK binary. - SET_FULL_PATH_SPACESAFE(BINARY) - REMOVE_SYMBOLIC_LINKS(BINARY) + BASIC_REMOVE_SYMBOLIC_LINKS(BINARY) BOOT_JDK=`dirname "$BINARY"` BOOT_JDK=`cd "$BOOT_JDK/.."; pwd` if test -x "$BOOT_JDK/bin/javac" && test -x "$BOOT_JDK/bin/java"; then @@ -155,13 +153,17 @@ AC_DEFUN([BOOTJDK_FIND_BEST_JDK_IN_DIRECTORY], [ BOOT_JDK_PREFIX="$1" BOOT_JDK_SUFFIX="$2" - BEST_JDK_FOUND=`$LS "$BOOT_JDK_PREFIX" 2> /dev/null | $GREP jdk | $SORT -r | $HEAD -n 1 ` - if test "x$BEST_JDK_FOUND" != x; then - BOOT_JDK="${BOOT_JDK_PREFIX}/${BEST_JDK_FOUND}${BOOT_JDK_SUFFIX}" - if test -d "$BOOT_JDK"; then - BOOT_JDK_FOUND=maybe - AC_MSG_NOTICE([Found potential Boot JDK using well-known locations (in $BOOT_JDK_PREFIX)]) - fi + ALL_JDKS_FOUND=`$LS "$BOOT_JDK_PREFIX" 2> /dev/null | $SORT -r` + if test "x$ALL_JDKS_FOUND" != x; then + for JDK_TO_TRY in $ALL_JDKS_FOUND ; do + BOOTJDK_DO_CHECK([ + BOOT_JDK="${BOOT_JDK_PREFIX}/${JDK_TO_TRY}${BOOT_JDK_SUFFIX}" + if test -d "$BOOT_JDK"; then + BOOT_JDK_FOUND=maybe + AC_MSG_NOTICE([Found potential Boot JDK using well-known locations (in $BOOT_JDK_PREFIX/$JDK_TO_TRY)]) + fi + ]) + done fi ]) @@ -171,7 +173,9 @@ AC_DEFUN([BOOTJDK_FIND_BEST_JDK_IN_DIRECTORY], AC_DEFUN([BOOTJDK_FIND_BEST_JDK_IN_WINDOWS_VIRTUAL_DIRECTORY], [ if test "x[$]$1" != x; then - BOOTJDK_FIND_BEST_JDK_IN_DIRECTORY([`$CYGPATH -u "[$]$1"`/Java]) + VIRTUAL_DIR="[$]$1/Java" + BASIC_WINDOWS_REWRITE_AS_UNIX_PATH(VIRTUAL_DIR) + BOOTJDK_FIND_BEST_JDK_IN_DIRECTORY($VIRTUAL_DIR) fi ]) @@ -187,6 +191,8 @@ AC_DEFUN([BOOTJDK_CHECK_WELL_KNOWN_LOCATIONS], elif test "x$OPENJDK_TARGET_OS" = xmacosx; then BOOTJDK_DO_CHECK([BOOTJDK_FIND_BEST_JDK_IN_DIRECTORY([/Library/Java/JavaVirtualMachines],[/Contents/Home])]) BOOTJDK_DO_CHECK([BOOTJDK_FIND_BEST_JDK_IN_DIRECTORY([/System/Library/Java/JavaVirtualMachines],[/Contents/Home])]) + elif test "x$OPENJDK_TARGET_OS" = xlinux; then + BOOTJDK_DO_CHECK([BOOTJDK_FIND_BEST_JDK_IN_DIRECTORY([/usr/lib/jvm])]) fi ]) diff --git a/common/autoconf/build-aux/config.guess b/common/autoconf/build-aux/config.guess index 9d9d29b0b23..572ed2be3e8 100644 --- a/common/autoconf/build-aux/config.guess +++ b/common/autoconf/build-aux/config.guess @@ -48,6 +48,9 @@ fi # Test and fix cygwin on x86_64 echo $OUT | grep 86-pc-cygwin > /dev/null 2> /dev/null +if test $? != 0; then + echo $OUT | grep 86-pc-mingw > /dev/null 2> /dev/null +fi if test $? = 0; then case `echo $PROCESSOR_IDENTIFIER | cut -f1 -d' '` in intel64|Intel64|INTEL64|em64t|EM64T|amd64|AMD64|8664|x86_64) diff --git a/common/autoconf/build-performance.m4 b/common/autoconf/build-performance.m4 index 5ad5837eb78..0838e867028 100644 --- a/common/autoconf/build-performance.m4 +++ b/common/autoconf/build-performance.m4 @@ -41,6 +41,10 @@ AC_DEFUN([BPERF_CHECK_CORES], # Looks like a MacOSX system NUM_CORES=`/usr/sbin/system_profiler -detailLevel full SPHardwareDataType | grep 'Cores' | awk '{print [$]5}'` FOUND_CORES=yes + elif test -n "$NUMBER_OF_PROCESSORS"; then + # On windows, look in the env + NUM_CORES=$NUMBER_OF_PROCESSORS + FOUND_CORES=yes fi # For c/c++ code we run twice as many concurrent build @@ -50,7 +54,8 @@ AC_DEFUN([BPERF_CHECK_CORES], if test "x$FOUND_CORES" = xyes; then AC_MSG_RESULT([$NUM_CORES]) else - AC_MSG_RESULT([could not detect number of cores, defaulting to 1!]) + AC_MSG_RESULT([could not detect number of cores, defaulting to 1]) + AC_MSG_WARN([This will disable all parallelism from build!]) fi ]) @@ -76,16 +81,18 @@ AC_DEFUN([BPERF_CHECK_MEMORY_SIZE], MEMORY_SIZE=`/usr/sbin/system_profiler -detailLevel full SPHardwareDataType | grep 'Memory' | awk '{print [$]2}'` MEMORY_SIZE=`expr $MEMORY_SIZE \* 1024` FOUND_MEM=yes - elif test "x$build_os" = xwindows; then + elif test "x$OPENJDK_BUILD_OS" = xwindows; then # Windows, but without cygwin - MEMORY_SIZE=`systeminfo | grep 'Total Physical Memory:' | awk '{ print [$]4 }' | sed 's/,//'` + MEMORY_SIZE=`wmic computersystem get totalphysicalmemory -value | grep = | cut -d "=" -f 2-` + MEMORY_SIZE=`expr $MEMORY_SIZE / 1024 / 1024` FOUND_MEM=yes fi if test "x$FOUND_MEM" = xyes; then AC_MSG_RESULT([$MEMORY_SIZE MB]) else - AC_MSG_RESULT([could not detect memory size defaulting to 1024 MB!]) + AC_MSG_RESULT([could not detect memory size, defaulting to 1024 MB]) + AC_MSG_WARN([This might seriously impact build performance!]) fi ]) @@ -123,7 +130,7 @@ AC_DEFUN([BPERF_SETUP_CCACHE], [ AC_ARG_ENABLE([ccache], [AS_HELP_STRING([--disable-ccache], - [use ccache to speed up recompilations @<:@enabled@:>@])], + [disable using ccache to speed up recompilations @<:@enabled@:>@])], [ENABLE_CCACHE=${enable_ccache}], [ENABLE_CCACHE=yes]) if test "x$ENABLE_CCACHE" = xyes; then AC_PATH_PROG(CCACHE, ccache) @@ -196,7 +203,7 @@ AC_DEFUN_ONCE([BPERF_SETUP_PRECOMPILED_HEADERS], # Can the C/C++ compiler use precompiled headers? # AC_ARG_ENABLE([precompiled-headers], [AS_HELP_STRING([--disable-precompiled-headers], - [use precompiled headers when compiling C++ @<:@enabled@:>@])], + [disable using precompiled headers when compiling C++ @<:@enabled@:>@])], [ENABLE_PRECOMPH=${enable_precompiled-headers}], [ENABLE_PRECOMPH=yes]) USE_PRECOMPILED_HEADER=1 @@ -228,8 +235,7 @@ AC_SUBST(USE_PRECOMPILED_HEADER) AC_DEFUN_ONCE([BPERF_SETUP_SMART_JAVAC], [ AC_ARG_WITH(sjavac-server-java, [AS_HELP_STRING([--with-sjavac-server-java], - [use this java binary for running the sjavac background server and other long running java tasks in the build process, - e.g. ---with-sjavac-server-java="/opt/jrockit/bin/java -server"])]) + [use this java binary for running the sjavac background server @<:@Boot JDK java@:>@])]) if test "x$with_sjavac_server_java" != x; then SJAVAC_SERVER_JAVA="$with_sjavac_server_java" diff --git a/common/autoconf/builddeps.m4 b/common/autoconf/builddeps.m4 index 661001d7d24..207be33c88a 100644 --- a/common/autoconf/builddeps.m4 +++ b/common/autoconf/builddeps.m4 @@ -235,26 +235,13 @@ AC_ARG_WITH(builddeps-conf, [AS_HELP_STRING([--with-builddeps-conf], [use this configuration file for the builddeps])]) AC_ARG_WITH(builddeps-server, [AS_HELP_STRING([--with-builddeps-server], - [download and use build dependencies from this server url, e.g. --with-builddeps-server=ftp://example.com/dir])]) + [download and use build dependencies from this server url])]) AC_ARG_WITH(builddeps-dir, [AS_HELP_STRING([--with-builddeps-dir], - [store downloaded build dependencies here @<:@d/localhome/builddeps@:>@])], + [store downloaded build dependencies here @<:@/localhome/builddeps@:>@])], [], [with_builddeps_dir=/localhome/builddeps]) AC_ARG_WITH(builddeps-group, [AS_HELP_STRING([--with-builddeps-group], [chgrp the downloaded build dependencies to this group])]) - -AC_ARG_ENABLE([list-builddeps], [AS_HELP_STRING([--enable-list-builddeps], - [list all build dependencies known to the configure script])], - [LIST_BUILDDEPS="${enableval}"], [LIST_BUILDDEPS='no']) - -if test "x$LIST_BUILDDEPS" = xyes; then - echo - echo List of build dependencies known to the configure script, - echo that can be used in builddeps.conf files: - cat $AUTOCONF_DIR/*.ac $AUTOCONF_DIR/*.m4 | grep BDEPS_CHECK_MODUL[E]\( | cut -f 2 -d ',' | tr -d ' ' | sort - echo - exit 1 -fi ]) diff --git a/common/autoconf/closed.version.numbers b/common/autoconf/closed.version.numbers index b119cd9bd97..b22ad976cbc 100644 --- a/common/autoconf/closed.version.numbers +++ b/common/autoconf/closed.version.numbers @@ -26,3 +26,7 @@ PRODUCT_NAME="Java(TM)" PRODUCT_SUFFIX="SE Runtime Environment" JDK_RC_PLATFORM_NAME="Platform SE" COMPANY_NAME="Oracle Corporation" + +# Might need better names for these +MACOSX_BUNDLE_NAME_BASE="Java SE" +MACOSX_BUNDLE_ID_BASE="com.oracle.java" diff --git a/common/autoconf/compare.sh.in b/common/autoconf/compare.sh.in index 25c8c7e9fad..1a1b997da24 100644 --- a/common/autoconf/compare.sh.in +++ b/common/autoconf/compare.sh.in @@ -40,12 +40,12 @@ CMP="@CMP@" CP="@CP@" CUT="@CUT@" DIFF="@DIFF@" -DUMPBIN="@UNCYGDRIVE@ @DUMPBIN@" +DUMPBIN="@FIXPATH@ @DUMPBIN@" EXPR="@EXPR@" FILE="@FILE@" FIND="@FIND@" GREP="@GREP@" -JAVAP="@UNCYGDRIVE@ @BOOT_JDK@/bin/javap" +JAVAP="@FIXPATH@ @BOOT_JDK@/bin/javap" LDD="@LDD@" MKDIR="@MKDIR@" NM="@NM@" @@ -56,1614 +56,24 @@ READELF="@READELF@" RM="@RM@" SED="@SED@" SORT="@SORT@" +STAT="@STAT@" STRIP="@POST_STRIP_CMD@" TEE="@TEE@" UNIQ="@UNIQ@" +UNPACK200="@FIXPATH@ @BOOT_JDK@/bin/unpack200" UNZIP="@UNZIP@" SRC_ROOT="@SRC_ROOT@" -if [ "$OPENJDK_TARGET_OS" = "macosx" ]; then - READELF_CMD="otool -v -V -h -X -t -d" -elif [ -n "$READELF" ] && [ "$OPENJDK_TARGET_OS" != "windows" ]; then - READELF_CMD="$READELF -a" -fi - -if [ "$OPENJDK_TARGET_OS" = "macosx" ]; then - LDD_CMD="$OTOOL -L" -elif [ -n "$LDD" ]; then - LDD_CMD="$LDD" -fi - -########################################################################################## -# Diff exceptions - -if [ "$OPENJDK_TARGET_OS" = "linux" ] && [ "$OPENJDK_TARGET_CPU" = "x86_64" ]; then -STRIP_BEFORE_COMPARE=" -./demo/jvmti/compiledMethodLoad/lib/libcompiledMethodLoad.so -./demo/jvmti/gctest/lib/libgctest.so -./demo/jvmti/heapTracker/lib/libheapTracker.so -./demo/jvmti/heapViewer/lib/libheapViewer.so -./demo/jvmti/hprof/lib/libhprof.so -./demo/jvmti/minst/lib/libminst.so -./demo/jvmti/mtrace/lib/libmtrace.so -./demo/jvmti/versionCheck/lib/libversionCheck.so -./demo/jvmti/waiters/lib/libwaiters.so -" - -KNOWN_BIN_DIFF=" -" - -ACCEPTED_BIN_DIFF=" -./demo/jvmti/compiledMethodLoad/lib/libcompiledMethodLoad.so -./demo/jvmti/gctest/lib/libgctest.so -./demo/jvmti/heapTracker/lib/libheapTracker.so -./demo/jvmti/heapViewer/lib/libheapViewer.so -./demo/jvmti/hprof/lib/libhprof.so -./demo/jvmti/minst/lib/libminst.so -./demo/jvmti/mtrace/lib/libmtrace.so -./demo/jvmti/versionCheck/lib/libversionCheck.so -./demo/jvmti/waiters/lib/libwaiters.so -./jre/lib/amd64/libattach.so -./jre/lib/amd64/libdt_socket.so -./jre/lib/amd64/libhprof.so -./jre/lib/amd64/libinstrument.so -./jre/lib/amd64/libjava_crw_demo.so -./jre/lib/amd64/libjsdt.so -./jre/lib/amd64/libjsig.so -./jre/lib/amd64/libmanagement.so -./jre/lib/amd64/libnpt.so -./jre/lib/amd64/libsaproc.so -./jre/lib/amd64/libverify.so -./jre/lib/amd64/server/libjsig.so -./jre/lib/amd64/server/libjvm.so -./bin/appletviewer -./bin/extcheck -./bin/idlj -./bin/jar -./bin/jarsigner -./bin/java -./bin/javac -./bin/javadoc -./bin/javah -./bin/javap -./bin/jcmd -./bin/jconsole -./bin/jdb -./bin/jhat -./bin/jinfo -./bin/jmap -./bin/jps -./bin/jrunscript -./bin/jsadebugd -./bin/jstack -./bin/jstat -./bin/jstatd -./bin/keytool -./bin/native2ascii -./bin/orbd -./bin/pack200 -./bin/policytool -./bin/rmic -./bin/rmid -./bin/rmiregistry -./bin/schemagen -./bin/serialver -./bin/servertool -./bin/tnameserv -./bin/wsgen -./bin/wsimport -./bin/xjc -./jre/bin/java -./jre/bin/keytool -./jre/bin/orbd -./jre/bin/pack200 -./jre/bin/policytool -./jre/bin/rmid -./jre/bin/rmiregistry -./jre/bin/servertool -./jre/bin/tnameserv -" - -KNOWN_SIZE_DIFF=" -" - -KNOWN_SYM_DIFF=" -" - -KNOWN_ELF_DIFF=" -./demo/jvmti/heapTracker/lib/libheapTracker.so -./demo/jvmti/hprof/lib/libhprof.so -./demo/jvmti/waiters/lib/libwaiters.so -" -fi - -if [ "$OPENJDK_TARGET_OS" = "solaris" ] && [ "$OPENJDK_TARGET_CPU" = "x86" ]; then - -STRIP_BEFORE_COMPARE=" -./demo/jni/Poller/lib/libPoller.so -./demo/jvmti/compiledMethodLoad/lib/libcompiledMethodLoad.so -./demo/jvmti/gctest/lib/libgctest.so -./demo/jvmti/heapTracker/lib/libheapTracker.so -./demo/jvmti/heapViewer/lib/libheapViewer.so -./demo/jvmti/hprof/lib/libhprof.so -./demo/jvmti/minst/lib/libminst.so -./demo/jvmti/mtrace/lib/libmtrace.so -./demo/jvmti/versionCheck/lib/libversionCheck.so -./demo/jvmti/waiters/lib/libwaiters.so -./jre/lib/i386/jexec -" - -SORT_SYMBOLS=" -./jre/lib/i386/client/libjvm.so -./jre/lib/i386/server/libjvm.so -" - -SKIP_BIN_DIFF="true" - -ACCEPTED_SMALL_SIZE_DIFF=" -./demo/jni/Poller/lib/libPoller.so -./demo/jvmti/compiledMethodLoad/lib/libcompiledMethodLoad.so -./demo/jvmti/gctest/lib/libgctest.so -./demo/jvmti/heapTracker/lib/libheapTracker.so -./demo/jvmti/heapViewer/lib/libheapViewer.so -./demo/jvmti/hprof/lib/libhprof.so -./demo/jvmti/minst/lib/libminst.so -./demo/jvmti/mtrace/lib/libmtrace.so -./demo/jvmti/versionCheck/lib/libversionCheck.so -./demo/jvmti/waiters/lib/libwaiters.so -./jre/lib/i386/client/libjvm.so -./jre/lib/i386/jli/libjli.so -./jre/lib/i386/libJdbcOdbc.so -./jre/lib/i386/libattach.so -./jre/lib/i386/libawt.so -./jre/lib/i386/libawt_headless.so -./jre/lib/i386/libawt_xawt.so -./jre/lib/i386/libdcpr.so -./jre/lib/i386/libdt_socket.so -./jre/lib/i386/libfontmanager.so -./jre/lib/i386/libhprof.so -./jre/lib/i386/libinstrument.so -./jre/lib/i386/libj2gss.so -./jre/lib/i386/libj2pcsc.so -./jre/lib/i386/libj2pkcs11.so -./jre/lib/i386/libj2ucrypto.so -./jre/lib/i386/libjaas_unix.so -./jre/lib/i386/libjava.so -./jre/lib/i386/libjava_crw_demo.so -./jre/lib/i386/libjawt.so -./jre/lib/i386/libjdwp.so -./jre/lib/i386/libjfr.so -./jre/lib/i386/libjpeg.so -./jre/lib/i386/libjsdt.so -./jre/lib/i386/libjsound.so -./jre/lib/i386/libkcms.so -./jre/lib/i386/libmanagement.so -./jre/lib/i386/libmlib_image.so -./jre/lib/i386/libnet.so -./jre/lib/i386/libnio.so -./jre/lib/i386/libnpt.so -./jre/lib/i386/libsctp.so -./jre/lib/i386/libsplashscreen.so -./jre/lib/i386/libsunec.so -./jre/lib/i386/libsunwjdga.so -./jre/lib/i386/libt2k.so -./jre/lib/i386/libunpack.so -./jre/lib/i386/libverify.so -./jre/lib/i386/libzip.so -./jre/lib/i386/server/libjvm.so -./bin/appletviewer -./bin/extcheck -./bin/idlj -./bin/jar -./bin/jarsigner -./bin/java -./bin/javac -./bin/javadoc -./bin/javah -./bin/javap -./bin/jcmd -./bin/jconsole -./bin/jdb -./bin/jhat -./bin/jinfo -./bin/jmap -./bin/jps -./bin/jrunscript -./bin/jsadebugd -./bin/jstack -./bin/jstat -./bin/jstatd -./bin/keytool -./bin/native2ascii -./bin/orbd -./bin/pack200 -./bin/policytool -./bin/rmic -./bin/rmid -./bin/rmiregistry -./bin/schemagen -./bin/serialver -./bin/servertool -./bin/tnameserv -./bin/unpack200 -./bin/wsgen -./bin/wsimport -./bin/xjc -./jre/bin/java -./jre/bin/keytool -./jre/bin/orbd -./jre/bin/pack200 -./jre/bin/policytool -./jre/bin/rmid -./jre/bin/rmiregistry -./jre/bin/servertool -./jre/bin/tnameserv -./jre/bin/unpack200 -./jre/lib/i386/jexec -" - -SKIP_ELF_DIFF="true" - -# libjvm.so differs in the random 15 char prefix on some symbols. -ACCEPTED_DIS_DIFF=" -./jre/lib/i386/client/libjvm.so -./jre/lib/i386/server/libjvm.so -" - -fi - -if [ "$OPENJDK_TARGET_OS" = "solaris" ] && [ "$OPENJDK_TARGET_CPU" = "x86_64" ]; then - -STRIP_BEFORE_COMPARE=" -./demo/jni/Poller/lib/amd64/libPoller.so -./demo/jvmti/compiledMethodLoad/lib/amd64/libcompiledMethodLoad.so -./demo/jvmti/gctest/lib/amd64/libgctest.so -./demo/jvmti/heapTracker/lib/amd64/libheapTracker.so -./demo/jvmti/heapViewer/lib/amd64/libheapViewer.so -./demo/jvmti/hprof/lib/amd64/libhprof.so -./demo/jvmti/minst/lib/amd64/libminst.so -./demo/jvmti/mtrace/lib/amd64/libmtrace.so -./demo/jvmti/versionCheck/lib/amd64/libversionCheck.so -./demo/jvmti/waiters/lib/amd64/libwaiters.so -" - -SORT_SYMBOLS=" -./jre/lib/amd64/server/libjvm.so -" - -SKIP_BIN_DIFF="true" - -ACCEPTED_SMALL_SIZE_DIFF=" -./demo/jni/Poller/lib/amd64/libPoller.so -./demo/jvmti/compiledMethodLoad/lib/amd64/libcompiledMethodLoad.so -./demo/jvmti/gctest/lib/amd64/libgctest.so -./demo/jvmti/heapTracker/lib/amd64/libheapTracker.so -./demo/jvmti/heapViewer/lib/amd64/libheapViewer.so -./demo/jvmti/hprof/lib/amd64/libhprof.so -./demo/jvmti/minst/lib/amd64/libminst.so -./demo/jvmti/mtrace/lib/amd64/libmtrace.so -./demo/jvmti/versionCheck/lib/amd64/libversionCheck.so -./demo/jvmti/waiters/lib/amd64/libwaiters.so -./jre/lib/amd64/jli/libjli.so -./jre/lib/amd64/libJdbcOdbc.so -./jre/lib/amd64/libattach.so -./jre/lib/amd64/libawt.so -./jre/lib/amd64/libawt_headless.so -./jre/lib/amd64/libawt_xawt.so -./jre/lib/amd64/libdcpr.so -./jre/lib/amd64/libdt_socket.so -./jre/lib/amd64/libfontmanager.so -./jre/lib/amd64/libhprof.so -./jre/lib/amd64/libinstrument.so -./jre/lib/amd64/libj2gss.so -./jre/lib/amd64/libj2pcsc.so -./jre/lib/amd64/libj2pkcs11.so -./jre/lib/amd64/libj2ucrypto.so -./jre/lib/amd64/libjaas_unix.so -./jre/lib/amd64/libjava.so -./jre/lib/amd64/libjava_crw_demo.so -./jre/lib/amd64/libjawt.so -./jre/lib/amd64/libjdwp.so -./jre/lib/amd64/libjfr.so -./jre/lib/amd64/libjpeg.so -./jre/lib/amd64/libjsdt.so -./jre/lib/amd64/libjsound.so -./jre/lib/amd64/libkcms.so -./jre/lib/amd64/libmanagement.so -./jre/lib/amd64/libmlib_image.so -./jre/lib/amd64/libnet.so -./jre/lib/amd64/libnio.so -./jre/lib/amd64/libnpt.so -./jre/lib/amd64/libsctp.so -./jre/lib/amd64/libsplashscreen.so -./jre/lib/amd64/libsunec.so -./jre/lib/amd64/libsunwjdga.so -./jre/lib/amd64/libt2k.so -./jre/lib/amd64/libunpack.so -./jre/lib/amd64/libverify.so -./jre/lib/amd64/libzip.so -./jre/lib/amd64/server/64/libjvm_db.so -./jre/lib/amd64/server/64/libjvm_dtrace.so -./bin/amd64/appletviewer -./bin/amd64/extcheck -./bin/amd64/idlj -./bin/amd64/jar -./bin/amd64/jarsigner -./bin/amd64/java -./bin/amd64/javac -./bin/amd64/javadoc -./bin/amd64/javah -./bin/amd64/javap -./bin/amd64/jcmd -./bin/amd64/jconsole -./bin/amd64/jdb -./bin/amd64/jhat -./bin/amd64/jinfo -./bin/amd64/jmap -./bin/amd64/jps -./bin/amd64/jrunscript -./bin/amd64/jsadebugd -./bin/amd64/jstack -./bin/amd64/jstat -./bin/amd64/jstatd -./bin/amd64/keytool -./bin/amd64/native2ascii -./bin/amd64/orbd -./bin/amd64/pack200 -./bin/amd64/policytool -./bin/amd64/rmic -./bin/amd64/rmid -./bin/amd64/rmiregistry -./bin/amd64/schemagen -./bin/amd64/serialver -./bin/amd64/servertool -./bin/amd64/tnameserv -./bin/amd64/unpack200 -./bin/amd64/wsgen -./bin/amd64/wsimport -./bin/amd64/xjc -./jre/bin/amd64/java -./jre/bin/amd64/keytool -./jre/bin/amd64/orbd -./jre/bin/amd64/pack200 -./jre/bin/amd64/policytool -./jre/bin/amd64/rmid -./jre/bin/amd64/rmiregistry -./jre/bin/amd64/servertool -./jre/bin/amd64/tnameserv -./jre/bin/amd64/unpack200 -./jre/lib/amd64/jexec -" - -SKIP_ELF_DIFF="true" - -# Can't find an explaination for the diff in libmlib_image.so. -KNOWN_DIS_DIFF=" -./jre/lib/amd64/libmlib_image.so -" -# libjvm.so differs in the random 15 char prefix on some symbols. -ACCEPTED_DIS_DIFF=" -./jre/lib/amd64/server/libjvm.so -" - -fi - -if [ "$OPENJDK_TARGET_OS" = "windows" ] && [ "$OPENJDK_TARGET_CPU" = "x86_64" ]; then - -ACCEPTED_BIN_DIFF=" -./bin/jli.dll -./demo/jvmti/compiledMethodLoad/lib/compiledMethodLoad.dll -./demo/jvmti/gctest/lib/gctest.dll -./demo/jvmti/heapTracker/lib/heapTracker.dll -./demo/jvmti/heapViewer/lib/heapViewer.dll -./demo/jvmti/hprof/lib/hprof.dll -./demo/jvmti/minst/lib/minst.dll -./demo/jvmti/mtrace/lib/mtrace.dll -./demo/jvmti/versionCheck/lib/versionCheck.dll -./demo/jvmti/waiters/lib/waiters.dll -./jre/bin/attach.dll -./jre/bin/awt.dll -./jre/bin/dcpr.dll -./jre/bin/dt_shmem.dll -./jre/bin/dt_socket.dll -./jre/bin/fontmanager.dll -./jre/bin/hprof.dll -./jre/bin/instrument.dll -./jre/bin/j2pcsc.dll -./jre/bin/j2pkcs11.dll -./jre/bin/jaas_nt.dll -./jre/bin/java.dll -./jre/bin/java_crw_demo.dll -./jre/bin/jawt.dll -./jre/bin/JdbcOdbc.dll -./jre/bin/jdwp.dll -./jre/bin/jfr.dll -./jre/bin/jli.dll -./jre/bin/jpeg.dll -./jre/bin/jsdt.dll -./jre/bin/jsound.dll -./jre/bin/jsoundds.dll -./jre/bin/kcms.dll -./jre/bin/management.dll -./jre/bin/mlib_image.dll -./jre/bin/net.dll -./jre/bin/nio.dll -./jre/bin/npt.dll -./jre/bin/sawindbg.dll -./jre/bin/server/jvm.dll -./jre/bin/splashscreen.dll -./jre/bin/sunec.dll -./jre/bin/sunmscapi.dll -./jre/bin/t2k.dll -./jre/bin/unpack.dll -./jre/bin/verify.dll -./jre/bin/w2k_lsa_auth.dll -./jre/bin/zip.dll -./bin/appletviewer.exe -./bin/extcheck.exe -./bin/idlj.exe -./bin/jar.exe -./bin/jarsigner.exe -./bin/java.exe -./bin/javac.exe -./bin/javadoc.exe -./bin/javah.exe -./bin/javap.exe -./bin/java-rmi.exe -./bin/javaw.exe -./bin/jcmd.exe -./bin/jconsole.exe -./bin/jdb.exe -./bin/jhat.exe -./bin/jinfo.exe -./bin/jmap.exe -./bin/jps.exe -./bin/jrunscript.exe -./bin/jsadebugd.exe -./bin/jstack.exe -./bin/jstat.exe -./bin/jstatd.exe -./bin/keytool.exe -./bin/kinit.exe -./bin/klist.exe -./bin/ktab.exe -./bin/native2ascii.exe -./bin/orbd.exe -./bin/pack200.exe -./bin/policytool.exe -./bin/rmic.exe -./bin/rmid.exe -./bin/rmiregistry.exe -./bin/schemagen.exe -./bin/serialver.exe -./bin/servertool.exe -./bin/tnameserv.exe -./bin/unpack200.exe -./bin/wsgen.exe -./bin/wsimport.exe -./bin/xjc.exe -./jre/bin/java.exe -./jre/bin/java-rmi.exe -./jre/bin/javaw.exe -./jre/bin/keytool.exe -./jre/bin/kinit.exe -./jre/bin/klist.exe -./jre/bin/ktab.exe -./jre/bin/orbd.exe -./jre/bin/pack200.exe -./jre/bin/policytool.exe -./jre/bin/rmid.exe -./jre/bin/rmiregistry.exe -./jre/bin/servertool.exe -./jre/bin/tnameserv.exe -./jre/bin/unpack200.exe -" - -KNOWN_SIZE_DIFF=" -./demo/jvmti/heapTracker/lib/heapTracker.dll -./demo/jvmti/minst/lib/minst.dll -./jre/bin/awt.dll -./jre/bin/java_crw_demo.dll -./bin/java.exe -./bin/javaw.exe -./bin/unpack200.exe -./jre/bin/java.exe -./jre/bin/javaw.exe -./jre/bin/unpack200.exe -" - -KNOWN_SYM_DIFF=" -./jre/bin/awt.dll -./jre/bin/java_crw_demo.dll -" -fi - - - -if [ "$OPENJDK_TARGET_OS" = "macosx" ]; then -ACCEPTED_JARZIP_CONTENTS=" -/META-INF/INDEX.LIST -" - -KNOWN_BIN_DIFF=" -./jre/lib/libJObjC.dylib -./jre/lib/libsaproc.dylib -./jre/lib/server/libjvm.dylib -" - -ACCEPTED_BIN_DIFF=" -./bin/appletviewer -./bin/extcheck -./bin/idlj -./bin/jar -./bin/jarsigner -./bin/java -./bin/javac -./bin/javadoc -./bin/javah -./bin/javap -./bin/jcmd -./bin/jconsole -./bin/jdb -./bin/jhat -./bin/jinfo -./bin/jmap -./bin/jps -./bin/jrunscript -./bin/jsadebugd -./bin/jstack -./bin/jstat -./bin/jstatd -./bin/keytool -./bin/native2ascii -./bin/orbd -./bin/pack200 -./bin/policytool -./bin/rmic -./bin/rmid -./bin/rmiregistry -./bin/schemagen -./bin/serialver -./bin/servertool -./bin/tnameserv -./bin/wsgen -./bin/wsimport -./bin/xjc -./jre/bin/java -./jre/bin/keytool -./jre/bin/orbd -./jre/bin/pack200 -./jre/bin/policytool -./jre/bin/rmid -./jre/bin/rmiregistry -./jre/bin/servertool -./jre/bin/tnameserv -" - -KNOWN_SIZE_DIFF=" -./jre/lib/libJObjC.dylib -./jre/lib/server/libjvm.dylib -" - -KNOWN_SYM_DIFF=" -./jre/lib/libJObjC.dylib -./jre/lib/server/libjvm.dylib -" - -KNOWN_ELF_DIFF=" -./jre/lib/libJObjC.dylib -./jre/lib/server/libjvm.dylib -" - -SKIP_DIS_DIFF="true" - -fi - -########################################################################################## -# Compare text files and ignore specific differences: -# -# * Timestamps in Java sources generated by idl2java -# * Sorting order and cleanup style in .properties files - -diff_text() { - OTHER_FILE=$1 - THIS_FILE=$2 - - SUFFIX="${THIS_FILE##*.}" - - TMP=1 - - if [[ "$THIS_FILE" = *"META-INF/MANIFEST.MF" ]]; then - TMP=$(LANG=C $DIFF $OTHER_FILE $THIS_FILE | \ - $GREP '^[<>]' | \ - $SED -e '/[<>] Ant-Version: Apache Ant .*/d' \ - -e '/[<>] Created-By: .* (Oracle Corporation).*/d') - fi - if test "x$SUFFIX" = "xjava"; then - TMP=$(LANG=C $DIFF $OTHER_FILE $THIS_FILE | \ - $GREP '^[<>]' | \ - $SED -e '/[<>] \* from.*\.idl/d' \ - -e '/[<>] \*.*[0-9]\{4\}_[0-9]\{2\}_[0-9]\{2\}_[0-9]\{2\}_[0-9]\{2\}-b[0-9]\{2\}.*/d' \ - -e '/[<>] \*.*[0-9]\{4\} [0-9][0-9]*:[0-9]\{2\}:[0-9]\{2\}.*/d' \ - -e '/\/\/ Generated from input file.*/d' \ - -e '/\/\/ This file was generated AUTOMATICALLY from a template file.*/d' \ - -e '/\/\/ java GenerateCharacter.*/d') - fi - # Ignore date strings in class files. - # On Macosx the system sources for generated java classes produce different output on - # consequtive invokations seemingly randomly. - # For example a method parameter randomly named "thePoint" or "aPoint". Ignore this. - if test "x$SUFFIX" = "xclass"; then - $JAVAP -c -constants -l -p ${OTHER_FILE} > ${OTHER_FILE}.javap - $JAVAP -c -constants -l -p ${THIS_FILE} > ${THIS_FILE}.javap - TMP=$($DIFF ${OTHER_FILE}.javap ${THIS_FILE}.javap | \ - $GREP '^[<>]' | \ - $SED -e '/[<>].*[0-9]\{4\}_[0-9]\{2\}_[0-9]\{2\}_[0-9]\{2\}_[0-9]\{2\}-b[0-9]\{2\}.*/d' \ - -e '/[<>].*Point Lcom\/apple\/jobjc\/foundation\/NSPoint;/d' \ - -e '/[<>].*public com\.apple\.jobjc\.Pointer].*public void setItemsPtr(com\.apple\.jobjc\.Pointer $OTHER_FILE.cleaned - TMP=$(LANG=C $DIFF $OTHER_FILE.cleaned $THIS_FILE) - fi - if test -n "$TMP"; then - echo Files $OTHER_FILE and $THIS_FILE differ - return 1 - fi - - return 0 -} - -########################################################################################## -# Compare directory structure - -compare_dirs() { - THIS_DIR=$1 - OTHER_DIR=$2 - WORK_DIR=$3 - - mkdir -p $WORK_DIR - - (cd $OTHER_DIR && $FIND . -type d | $SORT > $WORK_DIR/other_dirs) - (cd $THIS_DIR && $FIND . -type d | $SORT > $WORK_DIR/this_dirs) - - echo -n Directory structure... - if $DIFF $WORK_DIR/other_dirs $WORK_DIR/this_dirs > /dev/null; then - echo Identical! - else - echo Differences found. - REGRESSIONS=true - # Differences in directories found. - ONLY_OTHER=$($DIFF $WORK_DIR/other_dirs $WORK_DIR/this_dirs | $GREP '<') - if [ "$ONLY_OTHER" ]; then - echo Only in $OTHER - echo $ONLY_OTHER | $SED 's|< ./|\t|g' | $SED 's/ /\n/g' - fi - # Differences in directories found. - ONLY_THIS=$($DIFF $WORK_DIR/other_dirs $WORK_DIR/this_dirs | $GREP '>') - if [ "$ONLY_THIS" ]; then - echo Only in $THIS - echo $ONLY_THIS | $SED 's|> ./|\t|g' | $SED 's/ /\n/g' - fi - fi -} - - -########################################################################################## -# Compare file structure - -compare_files() { - THIS_DIR=$1 - OTHER_DIR=$2 - WORK_DIR=$3 - - mkdir -p $WORK_DIR - - (cd $OTHER_DIR && $FIND . -type f | $SORT > $WORK_DIR/other_files) - (cd $THIS_DIR && $FIND . -type f | $SORT > $WORK_DIR/this_files) - - echo -n File names... - if diff $WORK_DIR/other_files $WORK_DIR/this_files > /dev/null; then - echo Identical! - else - echo Differences found. - REGRESSIONS=true - # Differences in directories found. - ONLY_OTHER=$(diff $WORK_DIR/other_files $WORK_DIR/this_files | $GREP '<') - if [ "$ONLY_OTHER" ]; then - echo Only in $OTHER - echo "$ONLY_OTHER" | sed 's|< ./| |g' - fi - # Differences in directories found. - ONLY_THIS=$(diff $WORK_DIR/other_files $WORK_DIR/this_files | $GREP '>') - if [ "$ONLY_THIS" ]; then - echo Only in $THIS - echo "$ONLY_THIS" | sed 's|> ./| |g' - fi - fi -} - - -########################################################################################## -# Compare permissions - -compare_permissions() { - THIS_DIR=$1 - OTHER_DIR=$2 - WORK_DIR=$3 - - mkdir -p $WORK_DIR - - echo -n Permissions... - found="" - for f in `cd $OTHER_DIR && $FIND . -type f` - do - if [ ! -f ${OTHER_DIR}/$f ]; then continue; fi - if [ ! -f ${THIS_DIR}/$f ]; then continue; fi - OP=`ls -l ${OTHER_DIR}/$f | awk '{printf("%.10s\n", $1);}'` - TP=`ls -l ${THIS_DIR}/$f | awk '{printf("%.10s\n", $1);}'` - if [ "$OP" != "$TP" ] - then - if [ -z "$found" ]; then echo ; found="yes"; fi - $PRINTF "\told: ${OP} new: ${TP}\t$f\n" - fi - done - if [ -z "$found" ]; then - echo "Identical!" - else - REGRESSIONS=true - fi -} - -########################################################################################## -# Compare file command output - -compare_file_types() { - THIS_DIR=$1 - OTHER_DIR=$2 - WORK_DIR=$3 - - $MKDIR -p $WORK_DIR - - echo -n File types... - found="" - for f in `cd $OTHER_DIR && $FIND . -type f` - do - if [ ! -f ${OTHER_DIR}/$f ]; then continue; fi - if [ ! -f ${THIS_DIR}/$f ]; then continue; fi - OF=`cd ${OTHER_DIR} && $FILE $f` - TF=`cd ${THIS_DIR} && $FILE $f` - if [ "$f" = "./src.zip" ] || [ "$f" = "./jre/lib/JObjC.jar" ] || [ "$f" = "./lib/JObjC.jar" ] - then - if [ "`echo $OF | $GREP -ic zip`" -gt 0 -a "`echo $TF | $GREP -ic zip`" -gt 0 ] - then - # the way we produces zip-files make it so that directories are stored in old file - # but not in new (only files with full-path) - # this makes file-5.09 report them as different - continue; - fi - fi - - if [ "$OF" != "$TF" ] - then - if [ -z "$found" ]; then echo ; found="yes"; fi - $PRINTF "\tother: ${OF}\n\tthis : ${TF}\n" - fi - done - if [ -z "$found" ]; then - echo "Identical!" - else - REGRESSIONS=true - fi -} - -########################################################################################## -# Compare the rest of the files - -compare_general_files() { - THIS_DIR=$1 - OTHER_DIR=$2 - WORK_DIR=$3 - - GENERAL_FILES=$(cd $THIS_DIR && $FIND . -type f ! -name "*.so" ! -name "*.jar" ! -name "*.zip" \ - ! -name "*.debuginfo" ! -name "*.dylib" ! -name "jexec" \ - ! -name "ct.sym" ! -name "*.diz" ! -name "*.dll" \ - ! -name "*.pdb" ! -name "*.exp" ! -name "*.ilk" \ - ! -name "*.lib" \ - | $GREP -v "./bin/" | $SORT | $FILTER) - - echo General files... - for f in $GENERAL_FILES - do - if [ -e $OTHER_DIR/$f ]; then - DIFF_OUT=$($DIFF $OTHER_DIR/$f $THIS_DIR/$f 2>&1) - if [ -n "$DIFF_OUT" ]; then - echo $f - REGRESSIONS=true - if [ "$SHOW_DIFFS" = "true" ]; then - echo "$DIFF_OUT" - fi - fi - fi - done - - -} - -########################################################################################## -# Compare zip file - -compare_zip_file() { - THIS_DIR=$1 - OTHER_DIR=$2 - WORK_DIR=$3 - ZIP_FILE=$4 - - THIS_ZIP=$THIS_DIR/$ZIP_FILE - OTHER_ZIP=$OTHER_DIR/$ZIP_FILE - - THIS_SUFFIX="${THIS_ZIP##*.}" - OTHER_SUFFIX="${OTHER_ZIP##*.}" - if [ "$THIS_SUFFIX" != "$OTHER_SUFFIX" ]; then - echo The files do not have the same suffix type! - return 2 - fi - - UNARCHIVE="$UNZIP -q" - - TYPE="$THIS_SUFFIX" - - if $CMP $OTHER_ZIP $THIS_ZIP > /dev/null - then - return 0 - fi - # Not quite identical, the might still contain the same data. - # Unpack the jar/zip files in temp dirs - - THIS_UNZIPDIR=$WORK_DIR/$ZIP_FILE.this - OTHER_UNZIPDIR=$WORK_DIR/$ZIP_FILE.other - $RM -rf $THIS_UNZIPDIR $OTHER_UNZIPDIR - $MKDIR -p $THIS_UNZIPDIR - $MKDIR -p $OTHER_UNZIPDIR - (cd $THIS_UNZIPDIR && $UNARCHIVE $THIS_ZIP) - (cd $OTHER_UNZIPDIR && $UNARCHIVE $OTHER_ZIP) - - CONTENTS_DIFF_FILE=$WORK_DIR/$ZIP_FILE.diff - LANG=C $DIFF -rq $OTHER_UNZIPDIR $THIS_UNZIPDIR > $CONTENTS_DIFF_FILE - - ONLY_OTHER=$($GREP "^Only in $OTHER_UNZIPDIR" $CONTENTS_DIFF_FILE) - ONLY_THIS=$($GREP "^Only in $THIS_UNZIPDIR" $CONTENTS_DIFF_FILE) - - return_value=0 - - if [ -n "$ONLY_OTHER" ]; then - echo " Only OTHER $ZIP_FILE contains:" - echo "$ONLY_OTHER" | sed "s|Only in $OTHER_UNZIPDIR| |"g | sed 's|: |/|g' - return_value=1 - fi - - if [ -n "$ONLY_THIS" ]; then - echo " Only THIS $ZIP_FILE contains:" - echo "$ONLY_THIS" | sed "s|Only in $THIS_UNZIPDIR| |"g | sed 's|: |/|g' - return_value=1 - fi - - DIFFING_FILES=$($GREP differ $CONTENTS_DIFF_FILE | $CUT -f 2 -d ' ' | $SED "s|$OTHER_UNZIPDIR/||g") - - $RM -f $WORK_DIR/$ZIP_FILE.diffs - for file in $DIFFING_FILES; do - if [[ "$ACCEPTED_JARZIP_CONTENTS" != *"$file"* ]]; then - diff_text $OTHER_UNZIPDIR/$file $THIS_UNZIPDIR/$file >> $WORK_DIR/$ZIP_FILE.diffs - fi - done - - if [ -s "$WORK_DIR/$ZIP_FILE.diffs" ]; then - return_value=1 - echo " Differing files in $ZIP_FILE" - $CAT $WORK_DIR/$ZIP_FILE.diffs | $GREP differ | cut -f 2 -d ' ' | \ - $SED "s|$OTHER_UNZIPDIR| |g" > $WORK_DIR/$ZIP_FILE.difflist - $CAT $WORK_DIR/$ZIP_FILE.difflist - - if [ -n "$SHOW_DIFFS" ]; then - for i in $(cat $WORK_DIR/$ZIP_FILE.difflist) ; do - if [ -f "${OTHER_UNZIPDIR}/$i.javap" ]; then - LANG=C $DIFF ${OTHER_UNZIPDIR}/$i.javap ${THIS_UNZIPDIR}/$i.javap - elif [ -f "${OTHER_UNZIPDIR}/$i.cleaned" ]; then - LANG=C $DIFF ${OTHER_UNZIPDIR}/$i.cleaned ${THIS_UNZIPDIR}/$i - else - LANG=C $DIFF ${OTHER_UNZIPDIR}/$i ${THIS_UNZIPDIR}/$i - fi - done - fi - fi - - return $return_value -} - - -########################################################################################## -# Compare all zip files - -compare_all_zip_files() { - THIS_DIR=$1 - OTHER_DIR=$2 - WORK_DIR=$3 - - ZIPS=$(cd $THIS_DIR && $FIND . -type f -name "*.zip" | $SORT | $FILTER ) - - if [ -n "$ZIPS" ]; then - echo Zip files... - - return_value=0 - for f in $ZIPS; do - if [ -f "$OTHER_DIR/$f" ]; then - compare_zip_file $THIS_DIR $OTHER_DIR $WORK_DIR $f - if [ "$?" != "0" ]; then - return_value=1 - REGRESSIONS=true - fi - fi - done - fi - - return $return_value -} - -########################################################################################## -# Compare all jar files - -compare_all_jar_files() { - THIS_DIR=$1 - OTHER_DIR=$2 - WORK_DIR=$3 - - # TODO filter? - ZIPS=$(cd $THIS_DIR && $FIND . -type f -name "*.jar" | $SORT | $FILTER) - - if [ -n "$ZIPS" ]; then - echo Jar files... - - return_value=0 - for f in $ZIPS; do - if [ -f "$OTHER_DIR/$f" ]; then - compare_zip_file $THIS_DIR $OTHER_DIR $WORK_DIR $f - if [ "$?" != "0" ]; then - return_value=1 - REGRESSIONS=true - fi - fi - done - fi - - return $return_value -} - -########################################################################################## -# Compare binary (executable/library) file - -compare_bin_file() { - THIS_DIR=$1 - OTHER_DIR=$2 - WORK_DIR=$3 - BIN_FILE=$4 - - THIS_FILE=$THIS_DIR/$BIN_FILE - OTHER_FILE=$OTHER_DIR/$BIN_FILE - NAME=$(basename $BIN_FILE) - WORK_FILE_BASE=$WORK_DIR/$BIN_FILE - FILE_WORK_DIR=$(dirname $WORK_FILE_BASE) - - $MKDIR -p $FILE_WORK_DIR - - ORIG_THIS_FILE="$THIS_FILE" - ORIG_OTHER_FILE="$OTHER_FILE" - - if [[ "$STRIP_BEFORE_COMPARE" = *"$BIN_FILE"* ]]; then - THIS_STRIPPED_FILE=$FILE_WORK_DIR/this/$NAME - OTHER_STRIPPED_FILE=$FILE_WORK_DIR/other/$NAME - $MKDIR -p $FILE_WORK_DIR/this $FILE_WORK_DIR/other - $CP $THIS_FILE $THIS_STRIPPED_FILE - $CP $OTHER_FILE $OTHER_STRIPPED_FILE - $STRIP $THIS_STRIPPED_FILE - $STRIP $OTHER_STRIPPED_FILE - THIS_FILE="$THIS_STRIPPED_FILE" - OTHER_FILE="$OTHER_STRIPPED_FILE" - fi - - if [ -z "$SKIP_BIN_DIFF" ]; then - if cmp $OTHER_FILE $THIS_FILE > /dev/null; then - # The files were bytewise identical. - if [ -n "$VERBOSE" ]; then - echo " : : : : : $BIN_FILE" - fi - return 0 - fi - BIN_MSG=" diff " - if [[ "$ACCEPTED_BIN_DIFF" != *"$BIN_FILE"* ]]; then - DIFF_BIN=true - if [[ "$KNOWN_BIN_DIFF" != *"$BIN_FILE"* ]]; then - BIN_MSG="*$BIN_MSG*" - REGRESSIONS=true - else - BIN_MSG=" $BIN_MSG " - fi - else - BIN_MSG="($BIN_MSG)" - DIFF_BIN= - fi - fi - - THIS_SIZE=$(ls -l "$THIS_FILE" | awk '{ print $5 }') - OTHER_SIZE=$(ls -l "$OTHER_FILE" | awk '{ print $5 }') - if [ $THIS_SIZE -ne $OTHER_SIZE ]; then - DIFF_SIZE_NUM=$($EXPR $THIS_SIZE - $OTHER_SIZE) - DIFF_SIZE_REL=$($EXPR $THIS_SIZE \* 100 / $OTHER_SIZE) - SIZE_MSG=$($PRINTF "%3d%% %4d" $DIFF_SIZE_REL $DIFF_SIZE_NUM) - if [[ "$ACCEPTED_SMALL_SIZE_DIFF" = *"$BIN_FILE"* ]] && [ "$DIFF_SIZE_REL" -gt 98 ] && [ "$DIFF_SIZE_REL" -lt 102 ]; then - SIZE_MSG="($SIZE_MSG)" - DIFF_SIZE= - else - if [[ "$ACCEPTED_SIZE_DIFF" != *"$BIN_FILE"* ]]; then - DIFF_SIZE=true - if [[ "$KNOWN_SIZE_DIFF" != *"$BIN_FILE"* ]]; then - SIZE_MSG="*$SIZE_MSG*" - REGRESSIONS=true - else - SIZE_MSG=" $SIZE_MSG " - fi - else - SIZE_MSG="($SIZE_MSG)" - DIFF_SIZE= - fi - fi - else - SIZE_MSG=" " - DIFF_SIZE= - if [[ "$KNOWN_SIZE_DIFF $ACCEPTED_SIZE_DIFF" = *"$BIN_FILE"* ]]; then - SIZE_MSG=" ! " - fi - fi - - if [[ "$SORT_SYMBOLS" = *"$BIN_FILE"* ]]; then - SYM_SORT_CMD="sort" - else - SYM_SORT_CMD="cat" - fi - - # Check symbols - if [ "$OPENJDK_TARGET_OS" = "windows" ]; then - $DUMPBIN -exports $OTHER_FILE | $GREP " = " | $SYM_SORT_CMD > $WORK_FILE_BASE.symbols.other - $DUMPBIN -exports $THIS_FILE | $GREP " = " | $SYM_SORT_CMD > $WORK_FILE_BASE.symbols.this - elif [ "$OPENJDK_TARGET_OS" = "solaris" ]; then - # Some symbols get seemingly random 15 character prefixes. Filter them out. - $NM -a $ORIG_OTHER_FILE | $GREP -v $NAME | $AWK '{print $2, $3, $4, $5}' | $SED 's/^\([a-zA-Z] \.\)[a-zA-Z0-9_\$]\{15,15\}\./\1./g' | $SYM_SORT_CMD > $WORK_FILE_BASE.symbols.other - $NM -a $ORIG_THIS_FILE | $GREP -v $NAME | $AWK '{print $2, $3, $4, $5}' | $SED 's/^\([a-zA-Z] \.\)[a-zA-Z0-9_\$]\{15,15\}\./\1./g' | $SYM_SORT_CMD > $WORK_FILE_BASE.symbols.this - else - $NM -a $ORIG_OTHER_FILE | $GREP -v $NAME | $AWK '{print $2, $3, $4, $5}' | $SYM_SORT_CMD > $WORK_FILE_BASE.symbols.other - $NM -a $ORIG_THIS_FILE | $GREP -v $NAME | $AWK '{print $2, $3, $4, $5}' | $SYM_SORT_CMD > $WORK_FILE_BASE.symbols.this - fi - - LANG=C $DIFF $WORK_FILE_BASE.symbols.other $WORK_FILE_BASE.symbols.this > $WORK_FILE_BASE.symbols.diff - if [ -s $WORK_FILE_BASE.symbols.diff ]; then - SYM_MSG=" diff " - if [[ "$ACCEPTED_SYM_DIFF" != *"$BIN_FILE"* ]]; then - DIFF_SYM=true - if [[ "$KNOWN_SYM_DIFF" != *"$BIN_FILE"* ]]; then - SYM_MSG="*$SYM_MSG*" - REGRESSIONS=true - else - SYM_MSG=" $SYM_MSG " - fi - else - SYM_MSG="($SYM_MSG)" - DIFF_SYM= - fi - else - SYM_MSG=" " - DIFF_SYM= - if [[ "$KNOWN_SYM_DIFF $ACCEPTED_SYM_DIFF" = *"$BIN_FILE"* ]]; then - SYM_MSG=" ! " - fi - fi - - # Check dependencies - if [ -n "$LDD_CMD" ];then - (cd $FILE_WORK_DIR && $CP $OTHER_FILE . && $LDD_CMD $NAME | $AWK '{ print $1;}' | $SORT | $TEE $WORK_FILE_BASE.deps.other | $UNIQ > $WORK_FILE_BASE.deps.other.uniq) - (cd $FILE_WORK_DIR && $CP $THIS_FILE . && $LDD_CMD $NAME | $AWK '{ print $1;}' | $SORT | $TEE $WORK_FILE_BASE.deps.this | $UNIQ > $WORK_FILE_BASE.deps.this.uniq) - (cd $FILE_WORK_DIR && $RM -f $NAME) - - LANG=C $DIFF $WORK_FILE_BASE.deps.other $WORK_FILE_BASE.deps.this > $WORK_FILE_BASE.deps.diff - LANG=C $DIFF $WORK_FILE_BASE.deps.other.uniq $WORK_FILE_BASE.deps.this.uniq > $WORK_FILE_BASE.deps.diff.uniq - - if [ -s $WORK_FILE_BASE.deps.diff ]; then - if [ -s $WORK_FILE_BASE.deps.diff.uniq ]; then - DEP_MSG=" diff " - else - DEP_MSG=" redun " - fi - if [[ "$ACCEPTED_DEP_DIFF" != *"$BIN_FILE"* ]]; then - DIFF_DEP=true - if [[ "$KNOWN_DEP_DIFF" != *"$BIN_FILE"* ]]; then - DEP_MSG="*$DEP_MSG*" - REGRESSIONS=true - else - DEP_MSG=" $DEP_MSG " - fi - else - DEP_MSG="($DEP_MSG)" - DIFF_DEP= - fi - else - DEP_MSG=" " - DIFF_DEP= - if [[ "$KNOWN_DEP_DIFF $ACCEPTED_DEP_DIFF" = *"$BIN_FILE"* ]]; then - DEP_MSG=" ! " - fi - fi - fi - - # Compare readelf output - if [ -n "$READELF_CMD" ] && [ -z "$SKIP_ELF_DIFF" ]; then - $READELF_CMD $OTHER_FILE > $WORK_FILE_BASE.readelf.other 2>&1 - $READELF_CMD $THIS_FILE > $WORK_FILE_BASE.readelf.this 2>&1 - - LANG=C $DIFF $WORK_FILE_BASE.readelf.other $WORK_FILE_BASE.readelf.this > $WORK_FILE_BASE.readelf.diff - - if [ -s $WORK_FILE_BASE.readelf.diff ]; then - ELF_DIFF_SIZE=$(ls -n $WORK_FILE_BASE.readelf.diff | awk '{print $5}') - ELF_MSG=$($PRINTF "%8d" $ELF_DIFF_SIZE) - if [[ "$ACCEPTED_ELF_DIFF" != *"$BIN_FILE"* ]]; then - DIFF_ELF=true - if [[ "$KNOWN_ELF_DIFF" != *"$BIN_FILE"* ]]; then - ELF_MSG="*$ELF_MSG*" - REGRESSIONS=true - else - ELF_MSG=" $ELF_MSG " - fi - else - ELF_MSG="($ELF_MSG)" - DIFF_ELF= - fi - else - ELF_MSG=" " - DIFF_ELF= - if [[ "$KNOWN_DEP_DIFF $ACCEPTED_DEP_DIFF" = *"$BIN_FILE"* ]]; then - ELF_MSG=" ! " - fi - fi - fi - - # Compare disassemble output - if [ -f "$OBJDUMP" ] && [ -z "$SKIP_DIS_DIFF" ]; then - $OBJDUMP -d $OTHER_FILE | $GREP -v $NAME > $WORK_FILE_BASE.dis.other 2>&1 - $OBJDUMP -d $THIS_FILE | $GREP -v $NAME > $WORK_FILE_BASE.dis.this 2>&1 - - LANG=C $DIFF $WORK_FILE_BASE.dis.other $WORK_FILE_BASE.dis.this > $WORK_FILE_BASE.dis.diff - - if [ -s $WORK_FILE_BASE.dis.diff ]; then - DIS_DIFF_SIZE=$(ls -n $WORK_FILE_BASE.dis.diff | awk '{print $5}') - DIS_MSG=$($PRINTF "%8d" $DIS_DIFF_SIZE) - if [[ "$ACCEPTED_DIS_DIFF" != *"$BIN_FILE"* ]]; then - DIFF_DIS=true - if [[ "$KNOWN_DIS_DIFF" != *"$BIN_FILE"* ]]; then - DIS_MSG="*$DIS_MSG*" - REGRESSIONS=true - else - DIS_MSG=" $DIS_MSG " - fi - else - DIS_MSG="($DIS_MSG)" - DIFF_DIS= - fi - else - DIS_MSG=" " - DIFF_DIS= - if [[ "$KNOWN_DEP_DIFF $ACCEPTED_DEP_DIFF" = *"$BIN_FILE"* ]]; then - DIS_MSG=" ! " - fi - fi - fi - - - if [ -n "$DIFF_BIN$DIFF_SIZE$DIFF_SYM$DIFF_DEP$DIFF_ELF$DIFF_DIS" ] || [ -n "$VERBOSE" ]; then - if [ -n "$BIN_MSG" ]; then echo -n "$BIN_MSG:"; fi - if [ -n "$SIZE_MSG" ]; then echo -n "$SIZE_MSG:"; fi - if [ -n "$SYM_MSG" ]; then echo -n "$SYM_MSG:"; fi - if [ -n "$DEP_MSG" ]; then echo -n "$DEP_MSG:"; fi - if [ -n "$ELF_MSG" ]; then echo -n "$ELF_MSG:"; fi - if [ -n "$DIS_MSG" ]; then echo -n "$DIS_MSG:"; fi - echo " $BIN_FILE" - if [ "$SHOW_DIFFS" = "true" ]; then - if [ -s "$WORK_FILE_BASE.symbols.diff" ]; then - echo "Symbols diff:" - $CAT $WORK_FILE_BASE.symbols.diff - fi - if [ -s "$WORK_FILE_BASE.deps.diff" ]; then - echo "Deps diff:" - $CAT $WORK_FILE_BASE.deps.diff - fi - if [ -s "$WORK_FILE_BASE.readelf.diff" ]; then - echo "Readelf diff:" - $CAT $WORK_FILE_BASE.readelf.diff - fi - if [ -s "$WORK_FILE_BASE.dis.diff" ]; then - echo "Disassembly diff:" - $CAT $WORK_FILE_BASE.dis.diff - fi - fi - return 1 - fi - return 0 -} - -########################################################################################## -# Print binary diff header - -print_binary_diff_header() { - if [ -z "$SKIP_BIN_DIFF" ]; then echo -n " Binary :"; fi - if [ -z "$SKIP_SIZE_DIFF" ]; then echo -n " Size :"; fi - if [ -z "$SKIP_SYM_DIFF" ]; then echo -n " Symbols :"; fi - if [ -z "$SKIP_DEP_DIFF" ]; then echo -n " Deps :"; fi - if [ -z "$SKIP_ELF_DIFF" ]; then echo -n " Readelf :"; fi - if [ -z "$SKIP_DIS_DIFF" ]; then echo -n " Disass :"; fi - echo -} - -########################################################################################## -# Compare all libraries - -compare_all_libs() { - THIS_DIR=$1 - OTHER_DIR=$2 - WORK_DIR=$3 - - LIBS=$(cd $THIS_DIR && $FIND . -name 'lib*.so' -o -name '*.dylib' -o -name '*.dll' | $SORT | $FILTER) - - if [ -n "$LIBS" ]; then - echo Libraries... - print_binary_diff_header - for l in $LIBS; do - if [ -f "$OTHER_DIR/$l" ]; then - compare_bin_file $THIS_DIR $OTHER_DIR $WORK_DIR $l - if [ "$?" != "0" ]; then - return_value=1 - fi - fi - done - fi - - return $return_value -} - -########################################################################################## -# Compare all executables - -compare_all_execs() { - THIS_DIR=$1 - OTHER_DIR=$2 - WORK_DIR=$3 - - if [ "$OPENJDK_TARGET_OS" = "windows" ]; then - EXECS=$(cd $THIS_DIR && $FIND . -type f -name '*.exe' | $SORT | $FILTER) - else - EXECS=$(cd $THIS_DIR && $FIND . -name db -prune -o -type f -perm -100 \! \( -name '*.so' -o -name '*.dylib' -o -name '*.dll' -o -name '*.cgi' \) | $SORT | $FILTER) - fi - - if [ -n "$EXECS" ]; then - echo Executables... - print_binary_diff_header - for e in $EXECS; do - if [ -f "$OTHER_DIR/$e" ]; then - compare_bin_file $THIS_DIR $OTHER_DIR $WORK_DIR $e - if [ "$?" != "0" ]; then - return_value=1 - fi - fi - done - fi - - return $return_value -} - -########################################################################################## -# Initiate configuration - -COMPARE_ROOT=/tmp/cimages.$USER -$MKDIR -p $COMPARE_ROOT if [ "$OPENJDK_TARGET_OS" = "windows" ]; then - if [ "$(uname -o)" = "Cygwin" ]; then - COMPARE_ROOT=$(cygpath -msa $COMPARE_ROOT) - fi + PATH="@VS_PATH@" fi -THIS="$( cd "$( dirname "$0" )" && pwd )" -echo "$THIS" -THIS_SCRIPT="$0" - -if [ -z "$1" ] || [ "$1" = "-h" ] || [ "$1" = "-?" ] || [ "$1" = "/h" ] || [ "$1" = "/?" ] || [ "$1" = "-help" ] || [ "$1" = "--help" ]; then - echo "bash ./compare.sh [OPTIONS] [FILTER]" - echo "" - echo "-all Compare all files in all known ways" - echo "-names Compare the file names and directory structure" - echo "-perms Compare the permission bits on all files and directories" - echo "-types Compare the output of the file command on all files" - echo "-general Compare the files not convered by the specialized comparisons" - echo "-zips Compare the contents of all zip files" - echo "-jars Compare the contents of all jar files" - echo "-libs Compare all native libraries" - echo "-execs Compare all executables" - echo "-v Verbose output, does not hide known differences" - echo "-vv More verbose output, shows diff output of all comparisons" - echo "-o [OTHER] Compare with build in other directory. Will default to the old build directory" - echo "" - echo "[FILTER] List filenames in the image to compare, works for jars, zips, libs and execs" - echo "Example:" - echo "bash ./common/bin/compareimages.sh CodePointIM.jar" - exit 10 -fi - -CMP_NAMES=false -CMP_PERMS=false -CMP_TYPES=false -CMP_GENERAL=false -CMP_ZIPS=false -CMP_JARS=false -CMP_LIBS=false -CMP_EXECS=false - -while [ -n "$1" ]; do - case "$1" in - -v) - VERBOSE=true - ;; - -vv) - VERBOSE=true - SHOW_DIFFS=true - ;; - -o) - OTHER=$2 - shift - ;; - -all) - CMP_NAMES=true - if [ "$OPENJDK_TARGET_OS" != "windows" ]; then - CMP_PERMS=true - fi - CMP_TYPES=true - CMP_GENERAL=true - CMP_ZIPS=true - CMP_JARS=true - CMP_LIBS=true - CMP_EXECS=true - ;; - -names) - CMP_NAMES=true - ;; - -perms) - CMP_PERMS=true - ;; - -types) - CMP_TYPES=true - ;; - -general) - CMP_GENERAL=true - ;; - -zips) - CMP_ZIPS=true - ;; - -jars) - CMP_JARS=true - ;; - -libs) - CMP_LIBS=true - ;; - -execs) - CMP_EXECS=true - ;; - *) - CMP_NAMES=false - CMP_PERMS=false - CMP_TYPES=false - CMP_ZIPS=true - CMP_JARS=true - CMP_LIBS=true - CMP_EXECS=true - - if [ -z "$FILTER" ]; then - FILTER="$GREP" - fi - FILTER="$FILTER -e $1" - ;; - esac - shift -done - -if [ "$CMP_NAMES" = "false" ] && [ "$CMP_TYPES" = "false" ] && [ "$CMP_PERMS" = "false" ] && [ "$CMP_GENERAL" = "false" ] && [ "$CMP_ZIPS" = "false" ] && [ "$CMP_JARS" = "false" ] && [ "$CMP_LIBS" = "false" ] && [ "$CMP_EXECS" = "false" ]; then - CMP_NAMES=true - CMP_PERMS=true - CMP_TYPES=true - CMP_GENERAL=true - CMP_ZIPS=true - CMP_JARS=true - CMP_LIBS=true - CMP_EXECS=true -fi - -if [ -z "$FILTER" ]; then - FILTER="$CAT" -fi - -if [ -z "$OTHER" ]; then - OTHER="$THIS/../$LEGACY_BUILD_DIR" - if [ -d "$OTHER" ]; then - OTHER="$( cd "$OTHER" && pwd )" - else - echo "Default old build directory does not exist:" - echo "$OTHER" - fi - echo "Comparing to default old build:" - echo "$OTHER" - echo -else - echo "Comparing to:" - echo "$OTHER" - echo -fi - -if [ ! -d "$OTHER" ]; then - echo "Other build directory does not exist:" - echo "$OTHER" - exit 1; -fi - -# Figure out the layout of the new build. Which kinds of images have been produced -if [ -d "$THIS/images/j2sdk-image" ]; then - THIS_J2SDK="$THIS/images/j2sdk-image" - THIS_J2RE="$THIS/images/j2re-image" -fi -if [ -d "$THIS/images/j2sdk-overlay-image" ]; then - THIS_J2SDK_OVERLAY="$THIS/images/j2sdk-overlay-image" - THIS_J2RE_OVERLAY="$THIS/images/j2re-overlay-image" -fi - -# Figure out the layout of the other build (old or new, normal or overlay image) -if [ -d "$OTHER/j2sdk-image" ]; then - if [ -f "$OTHER/j2sdk-image/LICENSE" ]; then - OTHER_J2SDK="$OTHER/j2sdk-image" - OTHER_J2RE="$OTHER/j2re-image" - else - OTHER_J2SDK_OVERLAY="$OTHER/j2sdk-image" - OTHER_J2RE_OVERLAY="$OTHER/j2re-image" - fi - -fi - -if [ -z "$OTHER_J2SDK" ] && [ -n "$OTHER_J2SDK_OVERLAY" ] && [ -z "$THIS_J2SDK_OVERLAY" ]; then - echo "OTHER build only has an overlay image while this build does not. Nothing to compare!" +# Now locate the main script and run it. +REAL_COMPARE_SCRIPT="$SRC_ROOT/common/bin/compare.sh" +if [ ! -e "$REAL_COMPARE_SCRIPT" ]; then + echo "Error: Cannot locate compare script, it should have been in $REAL_COMPARE_SCRIPT" exit 1 fi - -########################################################################################## -# Do the work - -if [ "$CMP_NAMES" = "true" ]; then - if [ -n "$THIS_J2SDK" ] && [ -n "$OTHER_J2SDK" ]; then - echo -n "J2SDK " - compare_dirs $THIS_J2SDK $OTHER_J2SDK $COMPARE_ROOT/j2sdk - echo -n "J2RE " - compare_dirs $THIS_J2RE $OTHER_J2RE $COMPARE_ROOT/j2re - - echo -n "J2SDK " - compare_files $THIS_J2SDK $OTHER_J2SDK $COMPARE_ROOT/j2sdk - echo -n "J2RE " - compare_files $THIS_J2RE $OTHER_J2RE $COMPARE_ROOT/j2re - fi - if [ -n "$THIS_J2SDK_OVERLAY" ] && [ -n "$OTHER_J2SDK_OVERLAY" ]; then - echo -n "J2SDK Overlay " - compare_dirs $THIS_J2SDK_OVERLAY $OTHER_J2SDK_OVERLAY $COMPARE_ROOT/j2sdk-overlay - echo -n "J2RE Overlay " - compare_dirs $THIS_J2RE_OVERLAY $OTHER_J2RE_OVERLAY $COMPARE_ROOT/j2re-overlay - - echo -n "J2SDK Overlay " - compare_files $THIS_J2SDK_OVERLAY $OTHER_J2SDK_OVERLAY $COMPARE_ROOT/j2sdk-overlay - echo -n "J2RE Overlay " - compare_files $THIS_J2RE_OVERLAY $OTHER_J2RE_OVERLAY $COMPARE_ROOT/j2re-overlay - fi -fi - -if [ "$CMP_PERMS" = "true" ]; then - if [ -n "$THIS_J2SDK" ] && [ -n "$OTHER_J2SDK" ]; then - echo -n "J2SDK " - compare_permissions $THIS_J2SDK $OTHER_J2SDK $COMPARE_ROOT/j2sdk - echo -n "J2RE " - compare_permissions $THIS_J2RE $OTHER_J2RE $COMPARE_ROOT/j2re - fi - if [ -n "$THIS_J2SDK_OVERLAY" ] && [ -n "$OTHER_J2SDK_OVERLAY" ]; then - echo -n "J2SDK Overlay " - compare_permissions $THIS_J2SDK_OVERLAY $OTHER_J2SDK_OVERLAY $COMPARE_ROOT/j2sdk-overlay - echo -n "J2RE Overlay " - compare_permissions $THIS_J2RE_OVERLAY $OTHER_J2RE_OVERLAY $COMPARE_ROOT/j2re-overlay - fi -fi - -if [ "$CMP_TYPES" = "true" ]; then - if [ -n "$THIS_J2SDK" ] && [ -n "$OTHER_J2SDK" ]; then - echo -n "J2SDK " - compare_file_types $THIS_J2SDK $OTHER_J2SDK $COMPARE_ROOT/j2sdk - echo -n "J2RE " - compare_file_types $THIS_J2RE $OTHER_J2RE $COMPARE_ROOT/j2re - fi - if [ -n "$THIS_J2SDK_OVERLAY" ] && [ -n "$OTHER_J2SDK_OVERLAY" ]; then - echo -n "J2SDK Overlay " - compare_file_types $THIS_J2SDK_OVERLAY $OTHER_J2SDK_OVERLAY $COMPARE_ROOT/j2sdk-overlay - echo -n "J2RE Overlay " - compare_file_types $THIS_J2RE_OVERLAY $OTHER_J2RE_OVERLAY $COMPARE_ROOT/j2re-overlay - fi -fi - -if [ "$CMP_GENERAL" = "true" ]; then - if [ -n "$THIS_J2SDK" ] && [ -n "$OTHER_J2SDK" ]; then - echo -n "J2SDK " - compare_general_files $THIS_J2SDK $OTHER_J2SDK $COMPARE_ROOT/j2sdk - echo -n "J2RE " - compare_general_files $THIS_J2RE $OTHER_J2RE $COMPARE_ROOT/j2re - fi - if [ -n "$THIS_J2SDK_OVERLAY" ] && [ -n "$OTHER_J2SDK_OVERLAY" ]; then - echo -n "J2SDK Overlay " - compare_general_files $THIS_J2SDK_OVERLAY $OTHER_J2SDK_OVERLAY $COMPARE_ROOT/j2sdk-overlay - echo -n "J2RE Overlay " - compare_general_files $THIS_J2RE_OVERLAY $OTHER_J2RE_OVERLAY $COMPARE_ROOT/j2re-overlay - fi -fi - -if [ "$CMP_ZIPS" = "true" ]; then - if [ -n "$THIS_J2SDK" ] && [ -n "$OTHER_J2SDK" ]; then - compare_all_zip_files $THIS_J2SDK $OTHER_J2SDK $COMPARE_ROOT/j2sdk - fi -fi - -if [ "$CMP_JARS" = "true" ]; then - if [ -n "$THIS_J2SDK" ] && [ -n "$OTHER_J2SDK" ]; then - compare_all_jar_files $THIS_J2SDK $OTHER_J2SDK $COMPARE_ROOT/j2sdk - fi -fi - -if [ "$CMP_LIBS" = "true" ]; then - if [ -n "$THIS_J2SDK" ] && [ -n "$OTHER_J2SDK" ]; then - compare_all_libs $THIS_J2SDK $OTHER_J2SDK $COMPARE_ROOT/j2sdk - fi - if [ -n "$THIS_J2SDK_OVERLAY" ] && [ -n "$OTHER_J2SDK_OVERLAY" ]; then - echo -n "Overlay " - compare_all_libs $THIS_J2SDK_OVERLAY $OTHER_J2SDK_OVERLAY $COMPARE_ROOT/j2sdk-overlay - fi -fi - -if [ "$CMP_EXECS" = "true" ]; then - if [ -n "$THIS_J2SDK" ] && [ -n "$OTHER_J2SDK" ]; then - compare_all_execs $THIS_J2SDK $OTHER_J2SDK $COMPARE_ROOT/j2sdk - fi - if [ -n "$THIS_J2SDK_OVERLAY" ] && [ -n "$OTHER_J2SDK_OVERLAY" ]; then - echo -n "Overlay " - compare_all_execs $THIS_J2SDK_OVERLAY $OTHER_J2SDK_OVERLAY $COMPARE_ROOT/j2sdk-overlay - fi -fi - -echo - -if [ -n "$REGRESSIONS" ]; then - echo "REGRESSIONS FOUND!" - echo - exit 1 -else - echo "No regressions found" - echo - exit 0 -fi +. "$REAL_COMPARE_SCRIPT" "$@" diff --git a/common/autoconf/configure b/common/autoconf/configure index 5007a617e8c..8e4560df114 100644 --- a/common/autoconf/configure +++ b/common/autoconf/configure @@ -1,4 +1,32 @@ -#!/bin/sh +#!/bin/bash +# +# Copyright (c) 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. +# + +if test "x$BASH_VERSION" = x; then + echo This script needs bash to run. + echo It is recommended to use the configure script in the source tree root instead. + exit 1 +fi CONFIGURE_COMMAND_LINE="$@" conf_script_dir=`dirname $0` @@ -13,58 +41,81 @@ fi ### Test that the generated configure is up-to-date ### -# On Solaris /bin/sh doesn't support test -nt but /usr/bin/test does. -TEST=`which test` - -print_error_not_up_to_date() { - echo "Error: The configure source files is newer than the generated files." - echo "Please run 'sh autogen.sh' to update the generated files." - echo "Note that this test might trigger incorrectly sometimes due to hg timestamps". +run_autogen_or_fail() { + if test "x`which autoconf 2> /dev/null`" = x; then + echo "Cannot locate autoconf, unable to correct situation." + echo "Please install autoconf and run 'bash autogen.sh' to update the generated files." + echo "Error: Cannot continue" 1>&2 + exit 1 + else + echo "Running autogen.sh to correct the situation" + bash $conf_script_dir/autogen.sh + fi } -# NOTE: This test can occasionally go wrong due to the way mercurial handles -# timestamps. It it supposed to aid during development of build-infra, but should -# go away before making this the default build system. -for file in configure.ac *.m4 ; do - if $TEST $file -nt generated-configure.sh; then - print_error_not_up_to_date - exit 1 - fi -done - -if $TEST -e $conf_custom_script_dir/generated-configure.sh; then - # If custom source configure is available, make sure it is up-to-date as well. - for file in configure.ac *.m4 $conf_custom_script_dir/*.m4; do - if $TEST $file -nt $conf_custom_script_dir/generated-configure.sh; then - print_error_not_up_to_date - exit 1 +check_autoconf_timestamps() { + for file in $conf_script_dir/configure.ac $conf_script_dir/*.m4 ; do + if test $file -nt $conf_script_dir/generated-configure.sh; then + echo "Warning: The configure source files is newer than the generated files." + run_autogen_or_fail fi done + if test -e $conf_custom_script_dir/generated-configure.sh; then + # If custom source configure is available, make sure it is up-to-date as well. + for file in $conf_script_dir/configure.ac $conf_script_dir/*.m4 $conf_custom_script_dir/*.m4; do + if test $file -nt $conf_custom_script_dir/generated-configure.sh; then + echo "Warning: The configure source files is newer than the custom generated files." + run_autogen_or_fail + fi + done + fi +} + +check_hg_updates() { + if test "x`which hg 2> /dev/null`" != x; then + conf_updated_autoconf_files=`cd $conf_script_dir && hg status -mard 2> /dev/null | grep autoconf` + if test "x$conf_updated_autoconf_files" != x; then + echo "Configure source code has been updated, checking time stamps" + check_autoconf_timestamps + fi + + if test -e $conf_custom_script_dir; then + # If custom source configure is available, make sure it is up-to-date as well. + conf_custom_updated_autoconf_files=`cd $conf_custom_script_dir && hg status -mard 2> /dev/null | grep autoconf` + if test "x$conf_custom_updated_autoconf_files" != x; then + echo "Configure custom source code has been updated, checking time stamps" + check_autoconf_timestamps + fi + fi + + fi +} + +# Check for local changes +check_hg_updates + +if test -e $conf_custom_script_dir/generated-configure.sh; then # Test if open configure is newer than custom configure, if so, custom needs to # be regenerated. This test is required to ensure consistency with custom source. - conf_open_configure_timestamp=`grep DATE_WHEN_GENERATED: $conf_script_dir/generated-configure.sh | cut -d" " -f 3` - conf_custom_configure_timestamp=`grep DATE_WHEN_GENERATED: $conf_custom_script_dir/generated-configure.sh | cut -d" " -f 3` - if $TEST $conf_open_configure_timestamp -gt $conf_custom_configure_timestamp; then - echo "Error: The generated configure file contains changes not present in the custom generated file." - echo "Please run 'sh autogen.sh' to update the generated files." - exit 1 + conf_open_configure_timestamp=`grep DATE_WHEN_GENERATED= $conf_script_dir/generated-configure.sh | cut -d"=" -f 2` + conf_custom_configure_timestamp=`grep DATE_WHEN_GENERATED= $conf_custom_script_dir/generated-configure.sh | cut -d"=" -f 2` + if test $conf_open_configure_timestamp -gt $conf_custom_configure_timestamp; then + echo "Warning: The generated configure file contains changes not present in the custom generated file." + run_autogen_or_fail fi - fi # Autoconf calls the configure script recursively sometimes. # Don't start logging twice in that case -if $TEST "x$conf_debug_configure" = xtrue; then +if test "x$conf_debug_configure" = xtrue; then conf_debug_configure=recursive fi ### ### Process command-line arguments ### -conf_processed_arguments= +conf_processed_arguments=() conf_openjdk_target= -conf_extra_cflags= -conf_extra_cxxflags= for conf_option do @@ -72,20 +123,14 @@ do --openjdk-target=*) conf_openjdk_target=`expr "X$conf_option" : '[^=]*=\(.*\)'` continue ;; - --with-extra-cflags=*) - conf_extra_cflags=`expr "X$conf_option" : '[^=]*=\(.*\)'` - continue ;; - --with-extra-cxxflags=*) - conf_extra_cxxflags=`expr "X$conf_option" : '[^=]*=\(.*\)'` - continue ;; --debug-configure) - if $TEST "x$conf_debug_configure" != xrecursive; then + if test "x$conf_debug_configure" != xrecursive; then conf_debug_configure=true export conf_debug_configure fi continue ;; *) - conf_processed_arguments="$conf_processed_arguments $conf_option" ;; + conf_processed_arguments=("${conf_processed_arguments[@]}" "$conf_option") ;; esac case $conf_option in @@ -95,11 +140,13 @@ do conf_legacy_crosscompile="$conf_legacy_crosscompile $conf_option" ;; -host | --host | --hos | --ho | -host=* | --host=* | --hos=* | --ho=*) conf_legacy_crosscompile="$conf_legacy_crosscompile $conf_option" ;; + -help | --help | --hel | --he | -h) + conf_print_help=true ;; esac done -if $TEST "x$conf_legacy_crosscompile" != "x"; then - if $TEST "x$conf_openjdk_target" != "x"; then +if test "x$conf_legacy_crosscompile" != "x"; then + if test "x$conf_openjdk_target" != "x"; then echo "Error: Specifying --openjdk-target together with autoconf" echo "legacy cross-compilation flags is not supported." echo "You specified: --openjdk-target=$conf_openjdk_target and $conf_legacy_crosscompile." @@ -112,20 +159,20 @@ if $TEST "x$conf_legacy_crosscompile" != "x"; then fi fi -if $TEST "x$conf_openjdk_target" != "x"; then +if test "x$conf_openjdk_target" != "x"; then conf_build_platform=`sh $conf_script_dir/build-aux/config.guess` - conf_processed_arguments="--build=$conf_build_platform --host=$conf_openjdk_target --target=$conf_openjdk_target $conf_processed_arguments" + conf_processed_arguments=("--build=$conf_build_platform" "--host=$conf_openjdk_target" "--target=$conf_openjdk_target" "${conf_processed_arguments[@]}") fi # Make configure exit with error on invalid options as default. # Can be overridden by --disable-option-checking, since we prepend our argument # and later options override earlier. -conf_processed_arguments="--enable-option-checking=fatal $conf_processed_arguments" +conf_processed_arguments=("--enable-option-checking=fatal" "${conf_processed_arguments[@]}") ### ### Call the configure script ### -if $TEST -e $conf_custom_script_dir/generated-configure.sh; then +if test -e $conf_custom_script_dir/generated-configure.sh; then # Custom source configure available; run that instead echo Running custom generated-configure.sh conf_script_to_run=$conf_custom_script_dir/generated-configure.sh @@ -134,17 +181,17 @@ else conf_script_to_run=$conf_script_dir/generated-configure.sh fi -if $TEST "x$conf_debug_configure" != x; then +if test "x$conf_debug_configure" != x; then # Turn on shell debug output if requested (initial or recursive) set -x fi -if $TEST "x$conf_debug_configure" = xtrue; then +if test "x$conf_debug_configure" = xtrue; then # Turn on logging, but don't turn on twice when called recursive conf_debug_logfile=./debug-configure.log - (exec 3>&1 ; (. $conf_script_to_run $conf_processed_arguments --with-extra-cflags="$conf_extra_cflags" --with-extra-cxxflags="$conf_extra_cxxflags" 2>&1 1>&3 ) | tee -a $conf_debug_logfile 1>&2 ; exec 3>&-) | tee -a $conf_debug_logfile + (exec 3>&1 ; (. $conf_script_to_run "${conf_processed_arguments[@]}" 2>&1 1>&3 ) | tee -a $conf_debug_logfile 1>&2 ; exec 3>&-) | tee -a $conf_debug_logfile else - . $conf_script_to_run $conf_processed_arguments --with-extra-cflags="$conf_extra_cflags" --with-extra-cxxflags="$conf_extra_cxxflags" + ( . $conf_script_to_run "${conf_processed_arguments[@]}" ) fi conf_result_code=$? @@ -152,8 +199,28 @@ conf_result_code=$? ### Post-processing ### +if test $conf_result_code -eq 0; then + if test "x$conf_print_help" = xtrue; then + cat < + --debug-configure Run the configure script with additional debug + logging enabled. + +Please be aware that, when cross-compiling, the OpenJDK configure script will +generally use 'target' where autoconf traditionally uses 'host'. +EOT + fi +else + echo configure exiting with result code $conf_result_code +fi + # Move the log file to the output root, if this was successfully created -if $TEST -d "$OUTPUT_ROOT"; then +if test -d "$OUTPUT_ROOT"; then mv -f config.log "$OUTPUT_ROOT" 2> /dev/null fi diff --git a/common/autoconf/configure.ac b/common/autoconf/configure.ac index d9b1f6b8757..0dc235535ea 100644 --- a/common/autoconf/configure.ac +++ b/common/autoconf/configure.ac @@ -31,16 +31,14 @@ AC_PREREQ([2.61]) -AC_INIT(openjdk, jdk8, build-dev@openjdk.java.net) - -# Do not change or remove the following line, it is needed for consistency checks: -# DATE_WHEN_GENERATED: @DATE_WHEN_GENERATED@ +AC_INIT(OpenJDK, jdk8, build-dev@openjdk.java.net,,http://openjdk.java.net) AC_CONFIG_AUX_DIR([build-aux]) m4_include([build-aux/pkg.m4]) # Include these first... m4_include([basics.m4]) +m4_include([basics_windows.m4]) m4_include([builddeps.m4]) # ... then the rest m4_include([boot-jdk.m4]) @@ -51,35 +49,57 @@ m4_include([libraries.m4]) m4_include([platform.m4]) m4_include([source-dirs.m4]) m4_include([toolchain.m4]) +m4_include([toolchain_windows.m4]) -# This line needs to be here, verbatim, after all includes. -# It is replaced with custom functionality when building +AC_DEFUN_ONCE([CUSTOM_EARLY_HOOK]) +AC_DEFUN_ONCE([CUSTOM_LATE_HOOK]) + +# This line needs to be here, verbatim, after all includes and the dummy hook +# definitions. It is replaced with custom functionality when building # custom sources. -AC_DEFUN_ONCE([CUSTOM_HOOK]) +#CUSTOM_AUTOCONF_INCLUDE + +# Do not change or remove the following line, it is needed for consistency checks: +DATE_WHEN_GENERATED=@DATE_WHEN_GENERATED@ ############################################################################### # -# Initialization +# Initialization / Boot-strapping +# +# The bootstrapping process needs to solve the "chicken or the egg" problem, +# thus it jumps back and forth, each time gaining something needed later on. # ############################################################################### # Basic initialization that must happen first of all BASIC_INIT +BASIC_SETUP_FUNDAMENTAL_TOOLS # Now we can determine OpenJDK build and target platforms. This is required to # have early on. PLATFORM_SETUP_OPENJDK_BUILD_AND_TARGET -# Continue setting up basic stuff. +# Continue setting up basic stuff. Most remaining code require fundamental tools. BASIC_SETUP_PATHS BASIC_SETUP_LOGGING +# These are needed to be able to create a configuration name (and thus the output directory) +JDKOPT_SETUP_JDK_VARIANT +JDKOPT_SETUP_JVM_VARIANTS +JDKOPT_SETUP_DEBUG_LEVEL + +# With basic setup done, call the custom early hook. +CUSTOM_EARLY_HOOK + +# To properly create a configuration name, we need to have the OpenJDK target +# and options (variants and debug level) parsed. +BASIC_SETUP_OUTPUT_DIR + # Must be done before we can call HELP_MSG_MISSING_DEPENDENCY. HELP_SETUP_DEPENDENCY_HELP -# Setup simple tools, that do not need have cross compilation support. -# Without these, we can't properly run the rest of the configure script. -BASIC_SETUP_TOOLS +# Setup tools that requires more complex handling, or that is not needed by the configure script. +BASIC_SETUP_COMPLEX_TOOLS # Check if pkg-config is available. PKG_PROG_PKG_CONFIG @@ -100,16 +120,9 @@ BDEPS_SCAN_FOR_BUILDDEPS ############################################################################### # We need build & target for this. -JDKOPT_SETUP_JDK_VARIANT -JDKOPT_SETUP_JVM_VARIANTS -JDKOPT_SETUP_DEBUG_LEVEL JDKOPT_SETUP_JDK_OPTIONS JDKOPT_SETUP_JDK_VERSION_NUMBERS -# To properly create a configuration name, we need to have the OpenJDK target -# and options (variants and debug level) parsed. -BASIC_SETUP_OUTPUT_DIR - ############################################################################### # # Setup BootJDK, used to bootstrap the build. @@ -137,7 +150,6 @@ SRCDIRS_SETUP_OUTPUT_DIRS ############################################################################### TOOLCHAIN_SETUP_SYSROOT_AND_OUT_OPTIONS -TOOLCHAIN_SETUP_VISUAL_STUDIO_ENV # Locate the actual tools TOOLCHAIN_SETUP_PATHS @@ -152,10 +164,6 @@ TOOLCHAIN_SETUP_COMPILER_FLAGS_FOR_LIBS TOOLCHAIN_SETUP_COMPILER_FLAGS_FOR_OPTIMIZATION TOOLCHAIN_SETUP_COMPILER_FLAGS_FOR_JDK -# After we have toolchain, we can compile the uncygdrive helper -BASIC_COMPILE_UNCYGDRIVE - - # Setup debug symbols (need objcopy from the toolchain for that) JDKOPT_SETUP_DEBUG_SYMBOLS @@ -173,6 +181,9 @@ LIB_SETUP_ALSA LIB_SETUP_MISC_LIBS LIB_SETUP_STATIC_LINK_LIBSTDCPP +# After we have toolchain and the paths to all libraries (needed by msys), we can compile the fixpath helper +BASIC_COMPILE_FIXPATH + ############################################################################### # # We need to do some final tweaking, when everything else is done. @@ -210,7 +221,7 @@ BPERF_SETUP_CCACHE BASIC_TEST_USABILITY_ISSUES # At the end, call the custom hook. (Dummy macro if no custom sources available) -CUSTOM_HOOK +CUSTOM_LATE_HOOK # We're messing a bit with internal autoconf variables to put the config.status # in the output directory instead of the current directory. diff --git a/common/autoconf/generated-configure.sh b/common/autoconf/generated-configure.sh index 9dc456112b3..160265d6e5a 100644 --- a/common/autoconf/generated-configure.sh +++ b/common/autoconf/generated-configure.sh @@ -1,6 +1,6 @@ #! /bin/sh # Guess values for system-dependent variables and create Makefiles. -# Generated by GNU Autoconf 2.67 for openjdk jdk8. +# Generated by GNU Autoconf 2.67 for OpenJDK jdk8. # # Report bugs to . # @@ -550,12 +550,12 @@ MFLAGS= MAKEFLAGS= # Identity of this package. -PACKAGE_NAME='openjdk' +PACKAGE_NAME='OpenJDK' PACKAGE_TARNAME='openjdk' PACKAGE_VERSION='jdk8' -PACKAGE_STRING='openjdk jdk8' +PACKAGE_STRING='OpenJDK jdk8' PACKAGE_BUGREPORT='build-dev@openjdk.java.net' -PACKAGE_URL='' +PACKAGE_URL='http://openjdk.java.net' # Factoring default headers for most tests. ac_includes_default="\ @@ -606,7 +606,9 @@ CONCURRENT_BUILD_JOBS NUM_CORES SALIB_NAME HOTSPOT_MAKE_ARGS +FIXPATH LIBCXX +STATIC_CXX_SETTING LIBDL LIBM LIBZIP_CAN_USE_MMAP @@ -619,7 +621,6 @@ FREETYPE2_LIB_PATH USING_SYSTEM_FT_LIB FREETYPE2_LIBS FREETYPE2_CFLAGS -CUPS_LIBS CUPS_CFLAGS OPENWIN_HOME X_EXTRA_LIBS @@ -631,7 +632,6 @@ CXXFLAGS_DEBUG_SYMBOLS CFLAGS_DEBUG_SYMBOLS ZIP_DEBUGINFO_FILES ENABLE_DEBUG_SYMBOLS -UNCYGDRIVE LDFLAGS_CXX_JDK LDFLAGS_JDKEXE_SUFFIX LDFLAGS_JDKLIB_SUFFIX @@ -672,6 +672,9 @@ STATIC_LIBRARY SHARED_LIBRARY OBJ_SUFFIX LIPO +ac_ct_OBJDUMP +OBJDUMP +ac_ct_OBJCOPY OBJCOPY MCS STRIP @@ -683,9 +686,13 @@ COMPILER_TYPE RC_FLAGS DUMPBIN WINAR +HOTSPOT_RC +HOTSPOT_MT RC MT WINLD +HOTSPOT_LD +HOTSPOT_CXX ARFLAGS AR LDEXECXX @@ -698,6 +705,9 @@ OBJC ac_ct_CXX CXXFLAGS CXX +ac_ct_PROPER_COMPILER_CXX +PROPER_COMPILER_CXX +POTENTIAL_CXX OBJEXT EXEEXT ac_ct_CC @@ -705,12 +715,16 @@ CPPFLAGS LDFLAGS CFLAGS CC +ac_ct_PROPER_COMPILER_CC +PROPER_COMPILER_CC +POTENTIAL_CC BUILD_LD BUILD_CXX BUILD_CC -MSVCR100DLL -CHECK_FOR_VCINSTALLDIR -SETUPDEVENV +MSVCR_DLL +VS_PATH +VS_LIB +VS_INCLUDE CYGWIN_LINK AR_OUT_OPTION LD_OUT_OPTION @@ -733,15 +747,14 @@ BOOT_TOOLSJAR BOOT_RTJAR JAVA_CHECK JAVAC_CHECK -OUTPUT_ROOT -CONF_NAME -SPEC COOKED_BUILD_NUMBER FULL_VERSION RELEASE JDK_VERSION RUNTIME_NAME COPYRIGHT_YEAR +MACOSX_BUNDLE_ID_BASE +MACOSX_BUNDLE_NAME_BASE COMPANY_NAME JDK_RC_PLATFORM_NAME PRODUCT_SUFFIX @@ -753,16 +766,39 @@ JDK_UPDATE_VERSION JDK_MICRO_VERSION JDK_MINOR_VERSION JDK_MAJOR_VERSION -ENABLE_JFR COMPRESS_JARS +UNLIMITED_CRYPTO CACERTS_FILE TEST_IN_BUILD -DISABLE_NIMBUS BUILD_HEADLESS SUPPORT_HEADFUL SUPPORT_HEADLESS -JIGSAW SET_OPENJDK +BDEPS_FTP +BDEPS_UNZIP +OS_VERSION_MICRO +OS_VERSION_MINOR +OS_VERSION_MAJOR +PKG_CONFIG +COMM +TIME +STAT +HG +READELF +OTOOL +LDD +ZIP +UNZIP +FIND_DELETE +MAKE +CHECK_TOOLSDIR_MAKE +CHECK_TOOLSDIR_GMAKE +CHECK_MAKE +CHECK_GMAKE +PKGHANDLER +OUTPUT_ROOT +CONF_NAME +SPEC BUILD_VARIANT_RELEASE DEBUG_CLASSFILES FASTDEBUG @@ -776,72 +812,12 @@ JVM_VARIANT_CLIENT JVM_VARIANT_SERVER JVM_VARIANTS JDK_VARIANT -BDEPS_FTP -BDEPS_UNZIP -OS_VERSION_MICRO -OS_VERSION_MINOR -OS_VERSION_MAJOR -PKG_CONFIG -HG -OBJDUMP -READELF -OTOOL -LDD -THEPWDCMD -FIND_DELETE -RM -MAKE -CHECK_TOOLSDIR_MAKE -CHECK_TOOLSDIR_GMAKE -CHECK_MAKE -CHECK_GMAKE -NAWK -SED -FGREP -EGREP -GREP -AWK -ZIP -XARGS -WC -UNZIP -UNIQ -TR -TOUCH -TEE -TAR -TAIL -SORT -SH -PRINTF -MV -MKDIR -LS -LN -HEAD -FIND -FILE -EXPR -ECHO -DIFF -DF -DATE -CUT -CPIO -CP -CMP -CHMOD -CAT -BASENAME -PKGHANDLER BUILD_LOG_WRAPPER BUILD_LOG_PREVIOUS BUILD_LOG SYS_ROOT PATH_SEP -CYGPATH SRC_ROOT -READLINK DEFINE_CROSS_COMPILE_ARCH LP64 OPENJDK_TARGET_OS_API_DIR @@ -854,18 +830,18 @@ OPENJDK_TARGET_CPU_LEGACY REQUIRED_OS_VERSION REQUIRED_OS_NAME COMPILE_TYPE -OPENJDK_BUILD_CPU_ENDIAN -OPENJDK_BUILD_CPU_BITS -OPENJDK_BUILD_CPU_ARCH -OPENJDK_BUILD_CPU -OPENJDK_BUILD_OS_API -OPENJDK_BUILD_OS OPENJDK_TARGET_CPU_ENDIAN OPENJDK_TARGET_CPU_BITS OPENJDK_TARGET_CPU_ARCH OPENJDK_TARGET_CPU OPENJDK_TARGET_OS_API OPENJDK_TARGET_OS +OPENJDK_BUILD_CPU_ENDIAN +OPENJDK_BUILD_CPU_BITS +OPENJDK_BUILD_CPU_ARCH +OPENJDK_BUILD_CPU +OPENJDK_BUILD_OS_API +OPENJDK_BUILD_OS OPENJDK_BUILD_AUTOCONF_NAME OPENJDK_TARGET_AUTOCONF_NAME target_os @@ -880,6 +856,51 @@ build_os build_vendor build_cpu build +SETFILE +DF +READLINK +CYGPATH +NAWK +SED +FGREP +EGREP +GREP +AWK +XARGS +WHICH +WC +UNIQ +UNAME +TR +TOUCH +TEE +TAR +TAIL +SORT +SH +RM +THEPWDCMD +PRINTF +MV +MKTEMP +MKDIR +LS +LN +HEAD +FIND +FILE +EXPR +ECHO +DIRNAME +DIFF +DATE +CUT +CP +CMP +CHMOD +CAT +BASH +BASENAME DATE_WHEN_CONFIGURED CONFIGURE_COMMAND_LINE CUSTOM_MAKE_DIR @@ -929,23 +950,20 @@ with_target_bits with_sys_root with_tools_dir with_devkit -with_builddeps_conf -with_builddeps_server -with_builddeps_dir -with_builddeps_group -enable_list_builddeps with_jdk_variant with_jvm_variants enable_debug with_debug_level +with_conf_name +with_builddeps_conf +with_builddeps_server +with_builddeps_dir +with_builddeps_group enable_openjdk_only -enable_jigsaw enable_headful -enable_nimbus enable_hotspot_test_in_build with_cacerts_file -enable_jfr -with_conf_name +enable_unlimited_crypto with_boot_jdk with_boot_jdk_jvmargs with_add_source_root @@ -957,7 +975,7 @@ with_override_jaxp with_override_jaxws with_override_hotspot with_override_jdk -with_msvcr100dll +with_msvcr_dll with_extra_cflags with_extra_cxxflags with_extra_ldflags @@ -967,7 +985,6 @@ enable_macosx_runtime_support with_x with_cups with_cups_include -with_cups_lib with_freetype with_alsa with_alsa_include @@ -1546,7 +1563,7 @@ if test "$ac_init_help" = "long"; then # Omit some internal or obsolete options to make the list less imposing. # This message is too long to be a string in the A/UX 3.1 sh. cat <<_ACEOF -\`configure' configures openjdk jdk8 to adapt to many kinds of systems. +\`configure' configures OpenJDK jdk8 to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... @@ -1616,7 +1633,7 @@ fi if test -n "$ac_init_help"; then case $ac_init_help in - short | recursive ) echo "Configuration of openjdk jdk8:";; + short | recursive ) echo "Configuration of OpenJDK jdk8:";; esac cat <<\_ACEOF @@ -1624,24 +1641,19 @@ Optional Features: --disable-option-checking ignore unrecognized --enable/--with options --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no) --enable-FEATURE[=ARG] include FEATURE [ARG=yes] - --enable-list-builddeps list all build dependencies known to the configure - script --enable-debug set the debug level to fastdebug (shorthand for --with-debug-level=fastdebug) [disabled] - --enable-openjdk-only build OpenJDK regardless of the presence of closed - repositories [disabled] - --enable-jigsaw build Jigsaw images (not yet available) [disabled] - --disable-headful build headful support (graphical UI support) - [enabled] - --disable-nimbus disable Nimbus L&F [enabled] + --enable-openjdk-only supress building closed source even if present + [disabled] + --disable-headful disable building headful support (graphical UI + support) [enabled] --enable-hotspot-test-in-build - enable running of Queens test after Hotspot build - (not yet available) [disabled] - --enable-jfr enable jfr (default is no) - ENABLE_JFR="${enableval}" - --disable-debug-symbols disable generation of debug symbols ([enabled]) + run the Queens test after Hotspot build [disabled] + --enable-unlimited-crypto + Enable unlimited crypto policy [disabled] + --disable-debug-symbols disable generation of debug symbols [enabled] --disable-zip-debug-info - don't zip debug-info files ([enabled@:@) + disable zipping of debug-info files [enabled] --disable-macosx-runtime-support disable the use of MacOSX Java runtime support framework [enabled] @@ -1651,38 +1663,38 @@ Optional Features: --enable-sjavac use sjavac to do fast incremental compiles [disabled] --disable-precompiled-headers - use precompiled headers when compiling C++ [enabled] - --disable-ccache use ccache to speed up recompilations [enabled] + disable using precompiled headers when compiling C++ + [enabled] + --disable-ccache disable using ccache to speed up recompilations + [enabled] Optional Packages: --with-PACKAGE[=ARG] use PACKAGE [ARG=yes] --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no) - --with-custom-make-dir directory containing custom build/make files + --with-custom-make-dir use this directory for custom build/make files --with-target-bits build 32-bit or 64-bit binaries (for platforms that support it), e.g. --with-target-bits=32 [guessed] - --with-sys-root pass this sys-root to the compilers and linker - (useful if the sys-root encoded in the cross - compiler tools is incorrect) - --with-tools-dir search this directory for (cross-compiling) - compilers and tools + --with-sys-root pass this sys-root to the compilers and tools (for + cross-compiling) + --with-tools-dir search this directory for compilers and tools (for + cross-compiling) --with-devkit use this directory as base for tools-dir and sys-root (for cross-compiling) - --with-builddeps-conf use this configuration file for the builddeps - --with-builddeps-server download and use build dependencies from this server - url, e.g. - --with-builddeps-server=ftp://example.com/dir - --with-builddeps-dir store downloaded build dependencies here - [d/localhome/builddeps] - --with-builddeps-group chgrp the downloaded build dependencies to this - group --with-jdk-variant JDK variant to build (normal) [normal] --with-jvm-variants JVM variants (separated by commas) to build (server, client, kernel, zero, zeroshark) [server] --with-debug-level set the debug level (release, fastdebug, slowdebug) [release] + --with-conf-name use this as the name of the configuration [generated + from important configuration options] + --with-builddeps-conf use this configuration file for the builddeps + --with-builddeps-server download and use build dependencies from this server + url + --with-builddeps-dir store downloaded build dependencies here + [/localhome/builddeps] + --with-builddeps-group chgrp the downloaded build dependencies to this + group --with-cacerts-file specify alternative cacerts file - --with-conf-name use this as the name of the configuration, - overriding the generated default --with-boot-jdk path to Boot JDK (used to bootstrap build) [probed] --with-boot-jdk-jvmargs specify JVM arguments to be passed to all invocations of the Boot JDK, overriding the default @@ -1707,16 +1719,15 @@ Optional Packages: --with-override-jaxws use this jaxws dir for the build --with-override-hotspot use this hotspot dir for the build --with-override-jdk use this jdk dir for the build - --with-msvcr100dll copy this msvcr100.dll into the built JDK + --with-msvcr-dll copy this msvcr100.dll into the built JDK (Windows + only) [probed] --with-extra-cflags extra flags to be used when compiling jdk c-files --with-extra-cxxflags extra flags to be used when compiling jdk c++-files --with-extra-ldflags extra flags to be used when linking jdk --with-x use the X Window System --with-cups specify prefix directory for the cups package - (expecting the libraries under PATH/lib and the - headers under PATH/include) + (expecting the headers under PATH/include) --with-cups-include specify directory for the cups include files - --with-cups-lib specify directory for the cups library --with-freetype specify prefix directory for the freetype2 package (expecting the libraries under PATH/lib and the headers under PATH/include) @@ -1733,10 +1744,7 @@ Optional Packages: --with-memory-size=1024 [probed] --with-sjavac-server-java use this java binary for running the sjavac - background server and other long running java tasks - in the build process, e.g. - ---with-sjavac-server-java="/opt/jrockit/bin/java - -server" + background server [Boot JDK java] --with-sjavac-server-cores use at most this number of concurrent threads on the sjavac server [probed] @@ -1769,6 +1777,7 @@ Use these variables to override the choices made by `configure' or to help it to find libraries and programs with nonstandard names/locations. Report bugs to . +OpenJDK home page: . _ACEOF ac_status=$? fi @@ -1831,7 +1840,7 @@ fi test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF -openjdk configure jdk8 +OpenJDK configure jdk8 generated by GNU Autoconf 2.67 Copyright (C) 2010 Free Software Foundation, Inc. @@ -2488,101 +2497,41 @@ $as_echo "$ac_res" >&6; } } # ac_fn_cxx_check_func -# ac_fn_c_check_header_mongrel LINENO HEADER VAR INCLUDES +# ac_fn_c_check_header_compile LINENO HEADER VAR INCLUDES # ------------------------------------------------------- -# Tests whether HEADER exists, giving a warning if it cannot be compiled using -# the include files in INCLUDES and setting the cache variable VAR -# accordingly. -ac_fn_c_check_header_mongrel () +# Tests whether HEADER exists and can be compiled using the include files in +# INCLUDES, setting the cache variable VAR accordingly. +ac_fn_c_check_header_compile () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - if eval "test \"\${$3+set}\"" = set; then : { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 $as_echo_n "checking for $2... " >&6; } if eval "test \"\${$3+set}\"" = set; then : $as_echo_n "(cached) " >&6 -fi -eval ac_res=\$$3 - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } else - # Is the header compilable? -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 usability" >&5 -$as_echo_n "checking $2 usability... " >&6; } -cat confdefs.h - <<_ACEOF >conftest.$ac_ext + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 #include <$2> _ACEOF if ac_fn_c_try_compile "$LINENO"; then : - ac_header_compiler=yes + eval "$3=yes" else - ac_header_compiler=no + eval "$3=no" fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_compiler" >&5 -$as_echo "$ac_header_compiler" >&6; } - -# Is the header present? -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 presence" >&5 -$as_echo_n "checking $2 presence... " >&6; } -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include <$2> -_ACEOF -if ac_fn_c_try_cpp "$LINENO"; then : - ac_header_preproc=yes -else - ac_header_preproc=no -fi -rm -f conftest.err conftest.i conftest.$ac_ext -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_preproc" >&5 -$as_echo "$ac_header_preproc" >&6; } - -# So? What about this header? -case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in #(( - yes:no: ) - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&5 -$as_echo "$as_me: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&2;} - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5 -$as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;} - ;; - no:yes:* ) - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: present but cannot be compiled" >&5 -$as_echo "$as_me: WARNING: $2: present but cannot be compiled" >&2;} - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: check for missing prerequisite headers?" >&5 -$as_echo "$as_me: WARNING: $2: check for missing prerequisite headers?" >&2;} - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: see the Autoconf documentation" >&5 -$as_echo "$as_me: WARNING: $2: see the Autoconf documentation" >&2;} - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&5 -$as_echo "$as_me: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&2;} - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5 -$as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;} -( $as_echo "## ----------------------------------------- ## -## Report this to build-dev@openjdk.java.net ## -## ----------------------------------------- ##" - ) | sed "s/^/$as_me: WARNING: /" >&2 - ;; -esac - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 -$as_echo_n "checking for $2... " >&6; } -if eval "test \"\${$3+set}\"" = set; then : - $as_echo_n "(cached) " >&6 -else - eval "$3=\$ac_header_compiler" fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } -fi eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} -} # ac_fn_c_check_header_mongrel +} # ac_fn_c_check_header_compile cat >config.log <<_ACEOF This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. -It was created by openjdk $as_me jdk8, which was +It was created by OpenJDK $as_me jdk8, which was generated by GNU Autoconf 2.67. Invocation command line was $ $0 $@ @@ -2931,9 +2880,6 @@ ac_compiler_gnu=$ac_cv_c_compiler_gnu -# Do not change or remove the following line, it is needed for consistency checks: -# DATE_WHEN_GENERATED: 1347963060 - ac_aux_dir= for ac_dir in build-aux "$srcdir"/build-aux; do if test -f "$ac_dir/install-sh"; then @@ -3053,14 +2999,46 @@ ac_configure="$SHELL $ac_aux_dir/configure" # Please don't use this var. +# This will make sure the given variable points to a full and proper +# path. This means: +# 1) There will be no spaces in the path. On posix platforms, +# spaces in the path will result in an error. On Windows, +# the path will be rewritten using short-style to be space-free. +# 2) The path will be absolute, and it will be in unix-style (on +# cygwin). +# $1: The name of the variable to fix + + +# This will make sure the given variable points to a executable +# with a full and proper path. This means: +# 1) There will be no spaces in the path. On posix platforms, +# spaces in the path will result in an error. On Windows, +# the path will be rewritten using short-style to be space-free. +# 2) The path will be absolute, and it will be in unix-style (on +# cygwin). +# Any arguments given to the executable is preserved. +# If the input variable does not have a directory specification, then +# it need to be in the PATH. +# $1: The name of the variable to fix +# Test that variable $1 denoting a program is not empty. If empty, exit with an error. +# $1: variable to check +# $2: executable name to print in warning (optional) +# Does AC_PATH_PROG followed by BASIC_CHECK_NONEMPTY. +# Arguments as AC_PATH_PROG: +# $1: variable to set +# $2: executable name to look for + + +# Setup the most fundamental tools that relies on not much else to set up, +# but is used by much of the early bootstrap code. # Setup basic configuration paths, and platform-specific stuff related to PATHs. @@ -3083,23 +3061,10 @@ ac_configure="$SHELL $ac_aux_dir/configure" # Please don't use this var. -# Test that variable $1 denoting a program is not empty. If empty, exit with an error. -# $1: variable to check -# $2: executable name to print in warning (optional) -# Does AC_PATH_PROG followed by CHECK_NONEMPTY. -# Arguments as AC_PATH_PROG: -# $1: variable to set -# $2: executable name to look for - - - - - - - -# Check if build directory is on local disk. +# Check if build directory is on local disk. If not possible to determine, +# we prefer to claim it's local. # Argument 1: directory to test # Argument 2: what to do if it is on local disk # Argument 3: what to do otherwise (remote disk or failure) @@ -3136,6 +3101,64 @@ ac_configure="$SHELL $ac_aux_dir/configure" # Please don't use this var. +# Helper function which possibly converts a path using DOS-style short mode. +# If so, the updated path is stored in $new_path. +# $1: The path to check + + +# Helper function which possibly converts a path using DOS-style short mode. +# If so, the updated path is stored in $new_path. +# $1: The path to check + + +# FIXME: The BASIC_FIXUP_*_CYGWIN/MSYS is most likely too convoluted +# and could probably be heavily simplified. However, all changes in this +# area tend to need lot of testing in different scenarios, and in lack of +# proper unit testing, cleaning this up has not been deemed worth the effort +# at the moment. + + + + + + + + + +# Setup basic configuration paths, and platform-specific stuff related to PATHs. + + + + +# +# Copyright (c) 2011, 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. 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. +# + + + + + @@ -3287,6 +3310,19 @@ ac_configure="$SHELL $ac_aux_dir/configure" # Please don't use this var. +cygwin_help() { + case $1 in + unzip) + PKGHANDLER_COMMAND="cd && cmd /c setup -q -P unzip" ;; + zip) + PKGHANDLER_COMMAND="cd && cmd /c setup -q -P zip" ;; + make) + PKGHANDLER_COMMAND="cd && cmd /c setup -q -P make" ;; + * ) + break ;; + esac +} + apt_help() { case $1 in devkit) @@ -3561,6 +3597,16 @@ fi # questions. # +# $1 = compiler to test (CC or CXX) +# $2 = human readable name of compiler (C or C++) + + + + + +# $1 = compiler to test (CC or CXX) +# $2 = human readable name of compiler (C or C++) +# $3 = list of compiler names to search for @@ -3573,16 +3619,60 @@ fi +# +# Copyright (c) 2011, 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. 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. +# -# This line needs to be here, verbatim, after all includes. -# It is replaced with custom functionality when building + + + + + +# Check if the VS env variables were setup prior to running configure. +# If not, then find vcvarsall.bat and run it automatically, and integrate +# the set env variables into the spec file. + + + + + + +# This line needs to be here, verbatim, after all includes and the dummy hook +# definitions. It is replaced with custom functionality when building # custom sources. +#CUSTOM_AUTOCONF_INCLUDE +# Do not change or remove the following line, it is needed for consistency checks: +DATE_WHEN_GENERATED=1351854415 ############################################################################### # -# Initialization +# Initialization / Boot-strapping +# +# The bootstrapping process needs to solve the "chicken or the egg" problem, +# thus it jumps back and forth, each time gaining something needed later on. # ############################################################################### @@ -3592,789 +3682,12 @@ fi DATE_WHEN_CONFIGURED=`LANG=C date` +{ $as_echo "$as_me:${as_lineno-$LINENO}: Configuration created at $DATE_WHEN_CONFIGURED." >&5 +$as_echo "$as_me: Configuration created at $DATE_WHEN_CONFIGURED." >&6;} +{ $as_echo "$as_me:${as_lineno-$LINENO}: configure script generated at timestamp $DATE_WHEN_GENERATED." >&5 +$as_echo "$as_me: configure script generated at timestamp $DATE_WHEN_GENERATED." >&6;} -# Now we can determine OpenJDK build and target platforms. This is required to -# have early on. -# Make sure we can run config.sub. -$SHELL "$ac_aux_dir/config.sub" sun4 >/dev/null 2>&1 || - as_fn_error $? "cannot run $SHELL $ac_aux_dir/config.sub" "$LINENO" 5 - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking build system type" >&5 -$as_echo_n "checking build system type... " >&6; } -if test "${ac_cv_build+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - ac_build_alias=$build_alias -test "x$ac_build_alias" = x && - ac_build_alias=`$SHELL "$ac_aux_dir/config.guess"` -test "x$ac_build_alias" = x && - as_fn_error $? "cannot guess build type; you must specify one" "$LINENO" 5 -ac_cv_build=`$SHELL "$ac_aux_dir/config.sub" $ac_build_alias` || - as_fn_error $? "$SHELL $ac_aux_dir/config.sub $ac_build_alias failed" "$LINENO" 5 - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_build" >&5 -$as_echo "$ac_cv_build" >&6; } -case $ac_cv_build in -*-*-*) ;; -*) as_fn_error $? "invalid value of canonical build" "$LINENO" 5 ;; -esac -build=$ac_cv_build -ac_save_IFS=$IFS; IFS='-' -set x $ac_cv_build -shift -build_cpu=$1 -build_vendor=$2 -shift; shift -# Remember, the first character of IFS is used to create $*, -# except with old shells: -build_os=$* -IFS=$ac_save_IFS -case $build_os in *\ *) build_os=`echo "$build_os" | sed 's/ /-/g'`;; esac - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking host system type" >&5 -$as_echo_n "checking host system type... " >&6; } -if test "${ac_cv_host+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test "x$host_alias" = x; then - ac_cv_host=$ac_cv_build -else - ac_cv_host=`$SHELL "$ac_aux_dir/config.sub" $host_alias` || - as_fn_error $? "$SHELL $ac_aux_dir/config.sub $host_alias failed" "$LINENO" 5 -fi - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_host" >&5 -$as_echo "$ac_cv_host" >&6; } -case $ac_cv_host in -*-*-*) ;; -*) as_fn_error $? "invalid value of canonical host" "$LINENO" 5 ;; -esac -host=$ac_cv_host -ac_save_IFS=$IFS; IFS='-' -set x $ac_cv_host -shift -host_cpu=$1 -host_vendor=$2 -shift; shift -# Remember, the first character of IFS is used to create $*, -# except with old shells: -host_os=$* -IFS=$ac_save_IFS -case $host_os in *\ *) host_os=`echo "$host_os" | sed 's/ /-/g'`;; esac - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking target system type" >&5 -$as_echo_n "checking target system type... " >&6; } -if test "${ac_cv_target+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test "x$target_alias" = x; then - ac_cv_target=$ac_cv_host -else - ac_cv_target=`$SHELL "$ac_aux_dir/config.sub" $target_alias` || - as_fn_error $? "$SHELL $ac_aux_dir/config.sub $target_alias failed" "$LINENO" 5 -fi - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_target" >&5 -$as_echo "$ac_cv_target" >&6; } -case $ac_cv_target in -*-*-*) ;; -*) as_fn_error $? "invalid value of canonical target" "$LINENO" 5 ;; -esac -target=$ac_cv_target -ac_save_IFS=$IFS; IFS='-' -set x $ac_cv_target -shift -target_cpu=$1 -target_vendor=$2 -shift; shift -# Remember, the first character of IFS is used to create $*, -# except with old shells: -target_os=$* -IFS=$ac_save_IFS -case $target_os in *\ *) target_os=`echo "$target_os" | sed 's/ /-/g'`;; esac - - -# The aliases save the names the user supplied, while $host etc. -# will get canonicalized. -test -n "$target_alias" && - test "$program_prefix$program_suffix$program_transform_name" = \ - NONENONEs,x,x, && - program_prefix=${target_alias}- - -# Figure out the build and target systems. # Note that in autoconf terminology, "build" is obvious, but "target" -# is confusing; it assumes you are cross-compiling a cross-compiler (!) and "target" is thus the target of the -# product you're building. The target of this build is called "host". Since this is confusing to most people, we -# have not adopted that system, but use "target" as the platform we are building for. In some places though we need -# to use the configure naming style. - - - - - - # Copy the autoconf trip/quadruplet verbatim to OPENJDK_TARGET_AUTOCONF_NAME - # (from the autoconf "host") and OPENJDK_BUILD_AUTOCONF_NAME - # Note that we might later on rewrite e.g. OPENJDK_TARGET_CPU due to reduced build, - # but this will not change the value of OPENJDK_TARGET_AUTOCONF_NAME. - OPENJDK_TARGET_AUTOCONF_NAME="$host" - OPENJDK_BUILD_AUTOCONF_NAME="$build" - - - - # Convert the autoconf OS/CPU value to our own data, into the VAR_OS/CPU variables. - - case "$host_os" in - *linux*) - VAR_OS=linux - VAR_OS_API=posix - ;; - *solaris*) - VAR_OS=solaris - VAR_OS_API=posix - ;; - *darwin*) - VAR_OS=macosx - VAR_OS_API=posix - ;; - *bsd*) - VAR_OS=bsd - VAR_OS_API=posix - ;; - *cygwin*|*windows*) - VAR_OS=windows - VAR_OS_API=winapi - ;; - *) - as_fn_error $? "unsupported operating system $host_os" "$LINENO" 5 - ;; - esac - - - # First argument is the cpu name from the trip/quad - case "$host_cpu" in - x86_64) - VAR_CPU=x86_64 - VAR_CPU_ARCH=x86 - VAR_CPU_BITS=64 - VAR_CPU_ENDIAN=little - ;; - i?86) - VAR_CPU=x86 - VAR_CPU_ARCH=x86 - VAR_CPU_BITS=32 - VAR_CPU_ENDIAN=little - ;; - arm*) - VAR_CPU=arm - VAR_CPU_ARCH=arm - VAR_CPU_BITS=32 - VAR_CPU_ENDIAN=little - ;; - powerpc) - VAR_CPU=ppc - VAR_CPU_ARCH=ppc - VAR_CPU_BITS=32 - VAR_CPU_ENDIAN=big - ;; - powerpc64) - VAR_CPU=ppc64 - VAR_CPU_ARCH=ppc - VAR_CPU_BITS=64 - VAR_CPU_ENDIAN=big - ;; - sparc) - VAR_CPU=sparc - VAR_CPU_ARCH=sparc - VAR_CPU_BITS=32 - VAR_CPU_ENDIAN=big - ;; - sparcv9) - VAR_CPU=sparcv9 - VAR_CPU_ARCH=sparc - VAR_CPU_BITS=64 - VAR_CPU_ENDIAN=big - ;; - *) - as_fn_error $? "unsupported cpu $host_cpu" "$LINENO" 5 - ;; - esac - - # ... and setup our own variables. (Do this explicitely to facilitate searching) - OPENJDK_TARGET_OS="$VAR_OS" - OPENJDK_TARGET_OS_API="$VAR_OS_API" - OPENJDK_TARGET_CPU="$VAR_CPU" - OPENJDK_TARGET_CPU_ARCH="$VAR_CPU_ARCH" - OPENJDK_TARGET_CPU_BITS="$VAR_CPU_BITS" - OPENJDK_TARGET_CPU_ENDIAN="$VAR_CPU_ENDIAN" - - - - - - - - # Convert the autoconf OS/CPU value to our own data, into the VAR_OS/CPU variables. - - case "$build_os" in - *linux*) - VAR_OS=linux - VAR_OS_API=posix - ;; - *solaris*) - VAR_OS=solaris - VAR_OS_API=posix - ;; - *darwin*) - VAR_OS=macosx - VAR_OS_API=posix - ;; - *bsd*) - VAR_OS=bsd - VAR_OS_API=posix - ;; - *cygwin*|*windows*) - VAR_OS=windows - VAR_OS_API=winapi - ;; - *) - as_fn_error $? "unsupported operating system $build_os" "$LINENO" 5 - ;; - esac - - - # First argument is the cpu name from the trip/quad - case "$build_cpu" in - x86_64) - VAR_CPU=x86_64 - VAR_CPU_ARCH=x86 - VAR_CPU_BITS=64 - VAR_CPU_ENDIAN=little - ;; - i?86) - VAR_CPU=x86 - VAR_CPU_ARCH=x86 - VAR_CPU_BITS=32 - VAR_CPU_ENDIAN=little - ;; - arm*) - VAR_CPU=arm - VAR_CPU_ARCH=arm - VAR_CPU_BITS=32 - VAR_CPU_ENDIAN=little - ;; - powerpc) - VAR_CPU=ppc - VAR_CPU_ARCH=ppc - VAR_CPU_BITS=32 - VAR_CPU_ENDIAN=big - ;; - powerpc64) - VAR_CPU=ppc64 - VAR_CPU_ARCH=ppc - VAR_CPU_BITS=64 - VAR_CPU_ENDIAN=big - ;; - sparc) - VAR_CPU=sparc - VAR_CPU_ARCH=sparc - VAR_CPU_BITS=32 - VAR_CPU_ENDIAN=big - ;; - sparcv9) - VAR_CPU=sparcv9 - VAR_CPU_ARCH=sparc - VAR_CPU_BITS=64 - VAR_CPU_ENDIAN=big - ;; - *) - as_fn_error $? "unsupported cpu $build_cpu" "$LINENO" 5 - ;; - esac - - # ..and setup our own variables. (Do this explicitely to facilitate searching) - OPENJDK_BUILD_OS="$VAR_OS" - OPENJDK_BUILD_OS_API="$VAR_OS_API" - OPENJDK_BUILD_CPU="$VAR_CPU" - OPENJDK_BUILD_CPU_ARCH="$VAR_CPU_ARCH" - OPENJDK_BUILD_CPU_BITS="$VAR_CPU_BITS" - OPENJDK_BUILD_CPU_ENDIAN="$VAR_CPU_ENDIAN" - - - - - - - - - -# Check whether --with-target-bits was given. -if test "${with_target_bits+set}" = set; then : - withval=$with_target_bits; -fi - - - # We have three types of compiles: - # native == normal compilation, target system == build system - # cross == traditional cross compilation, target system != build system; special toolchain needed - # reduced == using native compilers, but with special flags (e.g. -m32) to produce 32-bit builds on 64-bit machines - # - if test "x$OPENJDK_BUILD_AUTOCONF_NAME" != "x$OPENJDK_TARGET_AUTOCONF_NAME"; then - # We're doing a proper cross-compilation - COMPILE_TYPE="cross" - else - COMPILE_TYPE="native" - fi - - if test "x$with_target_bits" != x; then - if test "x$COMPILE_TYPE" = "xcross"; then - as_fn_error $? "It is not possible to combine --with-target-bits=X and proper cross-compilation. Choose either." "$LINENO" 5 - fi - - if test "x$with_target_bits" = x32 && test "x$OPENJDK_TARGET_CPU_BITS" = x64; then - # A reduced build is requested - COMPILE_TYPE="reduced" - OPENJDK_TARGET_CPU_BITS=32 - if test "x$OPENJDK_TARGET_CPU_ARCH" = "xx86"; then - OPENJDK_TARGET_CPU=x86 - elif test "x$OPENJDK_TARGET_CPU_ARCH" = "xsparc"; then - OPENJDK_TARGET_CPU=sparc - else - as_fn_error $? "Reduced build (--with-target-bits=32) is only supported on x86_64 and sparcv9" "$LINENO" 5 - fi - elif test "x$with_target_bits" = x64 && test "x$OPENJDK_TARGET_CPU_BITS" = x32; then - as_fn_error $? "It is not possible to use --with-target-bits=64 on a 32 bit system. Use proper cross-compilation instead." "$LINENO" 5 - elif test "x$with_target_bits" = "x$OPENJDK_TARGET_CPU_BITS"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: --with-target-bits are set to build platform address size; argument has no meaning" >&5 -$as_echo "$as_me: --with-target-bits are set to build platform address size; argument has no meaning" >&6;} - else - as_fn_error $? "--with-target-bits can only be 32 or 64, you specified $with_target_bits!" "$LINENO" 5 - fi - fi - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for compilation type" >&5 -$as_echo_n "checking for compilation type... " >&6; } -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $COMPILE_TYPE" >&5 -$as_echo "$COMPILE_TYPE" >&6; } - - - if test "x$OPENJDK_TARGET_OS" = "xsolaris"; then - REQUIRED_OS_NAME=SunOS - REQUIRED_OS_VERSION=5.10 - fi - if test "x$OPENJDK_TARGET_OS" = "xlinux"; then - REQUIRED_OS_NAME=Linux - REQUIRED_OS_VERSION=2.6 - fi - if test "x$OPENJDK_TARGET_OS" = "xwindows"; then - REQUIRED_OS_NAME=Windows - if test "x$OPENJDK_TARGET_CPU_BITS" = "x64"; then - REQUIRED_OS_VERSION=5.2 - else - REQUIRED_OS_VERSION=5.1 - fi - fi - if test "x$OPENJDK_TARGET_OS" = "xmacosx"; then - REQUIRED_OS_NAME=Darwin - REQUIRED_OS_VERSION=11.2 - fi - - - - - - # Also store the legacy naming of the cpu. - # Ie i586 and amd64 instead of x86 and x86_64 - OPENJDK_TARGET_CPU_LEGACY="$OPENJDK_TARGET_CPU" - if test "x$OPENJDK_TARGET_CPU" = xx86; then - OPENJDK_TARGET_CPU_LEGACY="i586" - elif test "x$OPENJDK_TARGET_OS" != xmacosx && test "x$OPENJDK_TARGET_CPU" = xx86_64; then - # On all platforms except MacOSX replace x86_64 with amd64. - OPENJDK_TARGET_CPU_LEGACY="amd64" - fi - - - # And the second legacy naming of the cpu. - # Ie i386 and amd64 instead of x86 and x86_64. - OPENJDK_TARGET_CPU_LEGACY_LIB="$OPENJDK_TARGET_CPU" - if test "x$OPENJDK_TARGET_CPU" = xx86; then - OPENJDK_TARGET_CPU_LEGACY_LIB="i386" - elif test "x$OPENJDK_TARGET_CPU" = xx86_64; then - OPENJDK_TARGET_CPU_LEGACY_LIB="amd64" - fi - - - # This is the name of the cpu (but using i386 and amd64 instead of - # x86 and x86_64, respectively), preceeded by a /, to be used when - # locating libraries. On macosx, it's empty, though. - OPENJDK_TARGET_CPU_LIBDIR="/$OPENJDK_TARGET_CPU_LEGACY_LIB" - if test "x$OPENJDK_TARGET_OS" = xmacosx; then - OPENJDK_TARGET_CPU_LIBDIR="" - fi - - - # OPENJDK_TARGET_CPU_ISADIR is normally empty. On 64-bit Solaris systems, it is set to - # /amd64 or /sparcv9. This string is appended to some library paths, like this: - # /usr/lib${OPENJDK_TARGET_CPU_ISADIR}/libexample.so - OPENJDK_TARGET_CPU_ISADIR="" - if test "x$OPENJDK_TARGET_OS" = xsolaris; then - if test "x$OPENJDK_TARGET_CPU" = xx86_64; then - OPENJDK_TARGET_CPU_ISADIR="/amd64" - elif test "x$OPENJDK_TARGET_CPU" = xsparcv9; then - OPENJDK_TARGET_CPU_ISADIR="/sparcv9" - fi - fi - - - # Setup OPENJDK_TARGET_CPU_OSARCH, which is used to set the os.arch Java system property - OPENJDK_TARGET_CPU_OSARCH="$OPENJDK_TARGET_CPU" - if test "x$OPENJDK_TARGET_OS" = xlinux && test "x$OPENJDK_TARGET_CPU" = xx86; then - # On linux only, we replace x86 with i386. - OPENJDK_TARGET_CPU_OSARCH="i386" - elif test "x$OPENJDK_TARGET_OS" != xmacosx && test "x$OPENJDK_TARGET_CPU" = xx86_64; then - # On all platforms except macosx, we replace x86_64 with amd64. - OPENJDK_TARGET_CPU_OSARCH="amd64" - fi - - - OPENJDK_TARGET_CPU_JLI="$OPENJDK_TARGET_CPU" - if test "x$OPENJDK_TARGET_CPU" = xx86; then - OPENJDK_TARGET_CPU_JLI="i386" - elif test "x$OPENJDK_TARGET_OS" != xmacosx && test "x$OPENJDK_TARGET_CPU" = xx86_64; then - # On all platforms except macosx, we replace x86_64 with amd64. - OPENJDK_TARGET_CPU_JLI="amd64" - fi - # Now setup the -D flags for building libjli. - OPENJDK_TARGET_CPU_JLI_CFLAGS="-DLIBARCHNAME='\"$OPENJDK_TARGET_CPU_JLI\"'" - if test "x$OPENJDK_TARGET_OS" = xsolaris; then - if test "x$OPENJDK_TARGET_CPU_ARCH" = xsparc; then - OPENJDK_TARGET_CPU_JLI_CFLAGS="$OPENJDK_TARGET_CPU_JLI_CFLAGS -DLIBARCH32NAME='\"sparc\"' -DLIBARCH64NAME='\"sparcv9\"'" - elif test "x$OPENJDK_TARGET_CPU_ARCH" = xx86; then - OPENJDK_TARGET_CPU_JLI_CFLAGS="$OPENJDK_TARGET_CPU_JLI_CFLAGS -DLIBARCH32NAME='\"i386\"' -DLIBARCH64NAME='\"amd64\"'" - fi - fi - - - # Setup OPENJDK_TARGET_OS_API_DIR, used in source paths. - if test "x$OPENJDK_TARGET_OS_API" = xposix; then - OPENJDK_TARGET_OS_API_DIR="solaris" - fi - if test "x$OPENJDK_TARGET_OS_API" = xwinapi; then - OPENJDK_TARGET_OS_API_DIR="windows" - fi - - - if test "x$OPENJDK_TARGET_CPU_BITS" = x64; then - A_LP64="LP64:=" - ADD_LP64="-D_LP64=1" - fi - LP64=$A_LP64 - - - if test "x$COMPILE_TYPE" = "xcross"; then - # FIXME: ... or should this include reduced builds..? - DEFINE_CROSS_COMPILE_ARCH="CROSS_COMPILE_ARCH:=$OPENJDK_TARGET_CPU_LEGACY" - else - DEFINE_CROSS_COMPILE_ARCH="" - fi - - - - -# Continue setting up basic stuff. - -# Locate the directory of this script. -SCRIPT="$0" - - if test "x$OPENJDK_BUILD_OS" != xwindows; then - # Follow a chain of symbolic links. Use readlink - # where it exists, else fall back to horribly - # complicated shell code. - # Extract the first word of "readlink", so it can be a program name with args. -set dummy readlink; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_path_READLINK+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - case $READLINK in - [\\/]* | ?:[\\/]*) - ac_cv_path_READLINK="$READLINK" # Let the user override the test with a path. - ;; - *) - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_path_READLINK="$as_dir/$ac_word$ac_exec_ext" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - - ;; -esac -fi -READLINK=$ac_cv_path_READLINK -if test -n "$READLINK"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $READLINK" >&5 -$as_echo "$READLINK" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - if test "x$READLINK_TESTED" != yes; then - # On MacOSX there is a readlink tool with a different - # purpose than the GNU readlink tool. Check the found readlink. - ISGNU=`$READLINK --help 2>&1 | grep GNU` - if test "x$ISGNU" = x; then - # A readlink that we do not know how to use. - # Are there other non-GNU readlinks out there? - READLINK_TESTED=yes - READLINK= - fi - fi - - if test "x$READLINK" != x; then - SCRIPT=`$READLINK -f $SCRIPT` - else - STARTDIR=$PWD - COUNTER=0 - DIR=`dirname $SCRIPT` - FIL=`basename $SCRIPT` - while test $COUNTER -lt 20; do - ISLINK=`ls -l $DIR/$FIL | grep '\->' | sed -e 's/.*-> \(.*\)/\1/'` - if test "x$ISLINK" == x; then - # This is not a symbolic link! We are done! - break - fi - # The link might be relative! We have to use cd to travel safely. - cd $DIR - cd `dirname $ISLINK` - DIR=`pwd` - FIL=`basename $ISLINK` - let COUNTER=COUNTER+1 - done - cd $STARTDIR - SCRIPT=$DIR/$FIL - fi - fi - -AUTOCONF_DIR=`dirname $0` - -# Where is the source? It is located two levels above the configure script. -CURDIR="$PWD" -cd "$AUTOCONF_DIR/../.." -SRC_ROOT="`pwd`" -if test "x$OPENJDK_BUILD_OS" = "xwindows"; then - SRC_ROOT_LENGTH=`pwd|wc -m` - if test $SRC_ROOT_LENGTH -gt 100; then - as_fn_error $? "Your base path is too long. It is $SRC_ROOT_LENGTH characters long, but only 100 is supported" "$LINENO" 5 - fi -fi - -cd "$CURDIR" - - - # Fail with message the path to the source root if var SRC_ROOT contains a path with no spaces in it. - # Unless on Windows, where we can rewrite the path. - HAS_SPACE=`echo "$SRC_ROOT" | grep " "` - if test "x$HAS_SPACE" != x; then - if test "x$OPENJDK_BUILD_OS" = "xwindows"; then - # First convert it to DOS-style, short mode (no spaces) - SRC_ROOT=`$CYGPATH -s -m -a "$SRC_ROOT"` - # Now it's case insensitive; let's make it lowercase to improve readability - SRC_ROOT=`$ECHO "$SRC_ROOT" | $TR 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvqxyz'` - # Now convert it back to Unix-stile (cygpath) - SRC_ROOT=`$CYGPATH -u "$SRC_ROOT"` - else - as_fn_error $? "You cannot have spaces in the path to the source root! \"$SRC_ROOT\"" "$LINENO" 5 - fi - fi - - - # Fail with message the path to the current directory if var CURDIR contains a path with no spaces in it. - # Unless on Windows, where we can rewrite the path. - HAS_SPACE=`echo "$CURDIR" | grep " "` - if test "x$HAS_SPACE" != x; then - if test "x$OPENJDK_BUILD_OS" = "xwindows"; then - # First convert it to DOS-style, short mode (no spaces) - CURDIR=`$CYGPATH -s -m -a "$CURDIR"` - # Now it's case insensitive; let's make it lowercase to improve readability - CURDIR=`$ECHO "$CURDIR" | $TR 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvqxyz'` - # Now convert it back to Unix-stile (cygpath) - CURDIR=`$CYGPATH -u "$CURDIR"` - else - as_fn_error $? "You cannot have spaces in the path to the current directory! \"$CURDIR\"" "$LINENO" 5 - fi - fi - - -if test "x$OPENJDK_BUILD_OS" = "xsolaris"; then - # Add extra search paths on solaris for utilities like ar and as etc... - PATH="$PATH:/usr/ccs/bin:/usr/sfw/bin:/opt/csw/bin" -fi - -# For cygwin we need cygpath first, since it is used everywhere. -# Extract the first word of "cygpath", so it can be a program name with args. -set dummy cygpath; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_path_CYGPATH+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - case $CYGPATH in - [\\/]* | ?:[\\/]*) - ac_cv_path_CYGPATH="$CYGPATH" # Let the user override the test with a path. - ;; - *) - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_path_CYGPATH="$as_dir/$ac_word$ac_exec_ext" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - - ;; -esac -fi -CYGPATH=$ac_cv_path_CYGPATH -if test -n "$CYGPATH"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CYGPATH" >&5 -$as_echo "$CYGPATH" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - -PATH_SEP=":" -if test "x$OPENJDK_BUILD_OS" = "xwindows"; then - if test "x$CYGPATH" = x; then - as_fn_error $? "Something is wrong with your cygwin installation since I cannot find cygpath.exe in your path" "$LINENO" 5 - fi - PATH_SEP=";" -fi - - -# You can force the sys-root if the sys-root encoded into the cross compiler tools -# is not correct. - -# Check whether --with-sys-root was given. -if test "${with_sys_root+set}" = set; then : - withval=$with_sys_root; -fi - - -if test "x$with_sys_root" != x; then - SYS_ROOT=$with_sys_root -else - SYS_ROOT=/ -fi - - - -# Check whether --with-tools-dir was given. -if test "${with_tools_dir+set}" = set; then : - withval=$with_tools_dir; TOOLS_DIR=$with_tools_dir -fi - - - -# Check whether --with-devkit was given. -if test "${with_devkit+set}" = set; then : - withval=$with_devkit; - if test "x$with_sys_root" != x; then - as_fn_error $? "Cannot specify both --with-devkit and --with-sys-root at the same time" "$LINENO" 5 - fi - if test "x$with_tools_dir" != x; then - as_fn_error $? "Cannot specify both --with-devkit and --with-tools-dir at the same time" "$LINENO" 5 - fi - TOOLS_DIR=$with_devkit/bin - SYS_ROOT=$with_devkit/$host_alias/libc - -fi - - - - -# Setup default logging of stdout and stderr to build.log in the output root. -BUILD_LOG='$(OUTPUT_ROOT)/build.log' -BUILD_LOG_PREVIOUS='$(OUTPUT_ROOT)/build.log.old' -BUILD_LOG_WRAPPER='$(SH) $(SRC_ROOT)/common/bin/logger.sh $(BUILD_LOG)' - - - - - -# Must be done before we can call HELP_MSG_MISSING_DEPENDENCY. - - for ac_prog in apt-get yum port pkgutil pkgadd -do - # Extract the first word of "$ac_prog", so it can be a program name with args. -set dummy $ac_prog; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_PKGHANDLER+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$PKGHANDLER"; then - ac_cv_prog_PKGHANDLER="$PKGHANDLER" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_PKGHANDLER="$ac_prog" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -PKGHANDLER=$ac_cv_prog_PKGHANDLER -if test -n "$PKGHANDLER"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PKGHANDLER" >&5 -$as_echo "$PKGHANDLER" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - test -n "$PKGHANDLER" && break -done - - - -# Setup simple tools, that do not need have cross compilation support. -# Without these, we can't properly run the rest of the configure script. # Start with tools that do not need have cross compilation support # and can be expected to be found in the default PATH. These tools are @@ -4443,6 +3756,65 @@ $as_echo "$as_me: Could not find $PROG_NAME!" >&6;} + for ac_prog in bash +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_path_BASH+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + case $BASH in + [\\/]* | ?:[\\/]*) + ac_cv_path_BASH="$BASH" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_path_BASH="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +BASH=$ac_cv_path_BASH +if test -n "$BASH"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $BASH" >&5 +$as_echo "$BASH" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$BASH" && break +done + + + if test "x$BASH" = x; then + if test "xbash" = x; then + PROG_NAME=bash + else + PROG_NAME=bash + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: Could not find $PROG_NAME!" >&5 +$as_echo "$as_me: Could not find $PROG_NAME!" >&6;} + as_fn_error $? "Cannot continue" "$LINENO" 5 + fi + + + for ac_prog in cat do # Extract the first word of "$ac_prog", so it can be a program name with args. @@ -4679,65 +4051,6 @@ $as_echo "$as_me: Could not find $PROG_NAME!" >&6;} - for ac_prog in cpio -do - # Extract the first word of "$ac_prog", so it can be a program name with args. -set dummy $ac_prog; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_path_CPIO+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - case $CPIO in - [\\/]* | ?:[\\/]*) - ac_cv_path_CPIO="$CPIO" # Let the user override the test with a path. - ;; - *) - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_path_CPIO="$as_dir/$ac_word$ac_exec_ext" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - - ;; -esac -fi -CPIO=$ac_cv_path_CPIO -if test -n "$CPIO"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CPIO" >&5 -$as_echo "$CPIO" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - test -n "$CPIO" && break -done - - - if test "x$CPIO" = x; then - if test "xcpio" = x; then - PROG_NAME=cpio - else - PROG_NAME=cpio - fi - { $as_echo "$as_me:${as_lineno-$LINENO}: Could not find $PROG_NAME!" >&5 -$as_echo "$as_me: Could not find $PROG_NAME!" >&6;} - as_fn_error $? "Cannot continue" "$LINENO" 5 - fi - - - for ac_prog in cut do # Extract the first word of "$ac_prog", so it can be a program name with args. @@ -4856,65 +4169,6 @@ $as_echo "$as_me: Could not find $PROG_NAME!" >&6;} - for ac_prog in df -do - # Extract the first word of "$ac_prog", so it can be a program name with args. -set dummy $ac_prog; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_path_DF+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - case $DF in - [\\/]* | ?:[\\/]*) - ac_cv_path_DF="$DF" # Let the user override the test with a path. - ;; - *) - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_path_DF="$as_dir/$ac_word$ac_exec_ext" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - - ;; -esac -fi -DF=$ac_cv_path_DF -if test -n "$DF"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DF" >&5 -$as_echo "$DF" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - test -n "$DF" && break -done - - - if test "x$DF" = x; then - if test "xdf" = x; then - PROG_NAME=df - else - PROG_NAME=df - fi - { $as_echo "$as_me:${as_lineno-$LINENO}: Could not find $PROG_NAME!" >&5 -$as_echo "$as_me: Could not find $PROG_NAME!" >&6;} - as_fn_error $? "Cannot continue" "$LINENO" 5 - fi - - - for ac_prog in gdiff diff do # Extract the first word of "$ac_prog", so it can be a program name with args. @@ -4974,6 +4228,65 @@ $as_echo "$as_me: Could not find $PROG_NAME!" >&6;} + for ac_prog in dirname +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_path_DIRNAME+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + case $DIRNAME in + [\\/]* | ?:[\\/]*) + ac_cv_path_DIRNAME="$DIRNAME" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_path_DIRNAME="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +DIRNAME=$ac_cv_path_DIRNAME +if test -n "$DIRNAME"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DIRNAME" >&5 +$as_echo "$DIRNAME" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$DIRNAME" && break +done + + + if test "x$DIRNAME" = x; then + if test "xdirname" = x; then + PROG_NAME=dirname + else + PROG_NAME=dirname + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: Could not find $PROG_NAME!" >&5 +$as_echo "$as_me: Could not find $PROG_NAME!" >&6;} + as_fn_error $? "Cannot continue" "$LINENO" 5 + fi + + + for ac_prog in echo do # Extract the first word of "$ac_prog", so it can be a program name with args. @@ -5446,6 +4759,65 @@ $as_echo "$as_me: Could not find $PROG_NAME!" >&6;} + for ac_prog in mktemp +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_path_MKTEMP+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + case $MKTEMP in + [\\/]* | ?:[\\/]*) + ac_cv_path_MKTEMP="$MKTEMP" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_path_MKTEMP="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +MKTEMP=$ac_cv_path_MKTEMP +if test -n "$MKTEMP"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MKTEMP" >&5 +$as_echo "$MKTEMP" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$MKTEMP" && break +done + + + if test "x$MKTEMP" = x; then + if test "xmktemp" = x; then + PROG_NAME=mktemp + else + PROG_NAME=mktemp + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: Could not find $PROG_NAME!" >&5 +$as_echo "$as_me: Could not find $PROG_NAME!" >&6;} + as_fn_error $? "Cannot continue" "$LINENO" 5 + fi + + + for ac_prog in mv do # Extract the first word of "$ac_prog", so it can be a program name with args. @@ -5564,6 +4936,124 @@ $as_echo "$as_me: Could not find $PROG_NAME!" >&6;} + for ac_prog in pwd +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_path_THEPWDCMD+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + case $THEPWDCMD in + [\\/]* | ?:[\\/]*) + ac_cv_path_THEPWDCMD="$THEPWDCMD" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_path_THEPWDCMD="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +THEPWDCMD=$ac_cv_path_THEPWDCMD +if test -n "$THEPWDCMD"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $THEPWDCMD" >&5 +$as_echo "$THEPWDCMD" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$THEPWDCMD" && break +done + + + if test "x$THEPWDCMD" = x; then + if test "xpwd" = x; then + PROG_NAME=thepwdcmd + else + PROG_NAME=pwd + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: Could not find $PROG_NAME!" >&5 +$as_echo "$as_me: Could not find $PROG_NAME!" >&6;} + as_fn_error $? "Cannot continue" "$LINENO" 5 + fi + + + + for ac_prog in rm +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_path_RM+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + case $RM in + [\\/]* | ?:[\\/]*) + ac_cv_path_RM="$RM" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_path_RM="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +RM=$ac_cv_path_RM +if test -n "$RM"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $RM" >&5 +$as_echo "$RM" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$RM" && break +done + + + if test "x$RM" = x; then + if test "xrm" = x; then + PROG_NAME=rm + else + PROG_NAME=rm + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: Could not find $PROG_NAME!" >&5 +$as_echo "$as_me: Could not find $PROG_NAME!" >&6;} + as_fn_error $? "Cannot continue" "$LINENO" 5 + fi + + + for ac_prog in sh do # Extract the first word of "$ac_prog", so it can be a program name with args. @@ -5977,6 +5467,65 @@ $as_echo "$as_me: Could not find $PROG_NAME!" >&6;} + for ac_prog in uname +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_path_UNAME+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + case $UNAME in + [\\/]* | ?:[\\/]*) + ac_cv_path_UNAME="$UNAME" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_path_UNAME="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +UNAME=$ac_cv_path_UNAME +if test -n "$UNAME"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $UNAME" >&5 +$as_echo "$UNAME" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$UNAME" && break +done + + + if test "x$UNAME" = x; then + if test "xuname" = x; then + PROG_NAME=uname + else + PROG_NAME=uname + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: Could not find $PROG_NAME!" >&5 +$as_echo "$as_me: Could not find $PROG_NAME!" >&6;} + as_fn_error $? "Cannot continue" "$LINENO" 5 + fi + + + for ac_prog in uniq do # Extract the first word of "$ac_prog", so it can be a program name with args. @@ -6036,65 +5585,6 @@ $as_echo "$as_me: Could not find $PROG_NAME!" >&6;} - for ac_prog in unzip -do - # Extract the first word of "$ac_prog", so it can be a program name with args. -set dummy $ac_prog; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_path_UNZIP+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - case $UNZIP in - [\\/]* | ?:[\\/]*) - ac_cv_path_UNZIP="$UNZIP" # Let the user override the test with a path. - ;; - *) - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_path_UNZIP="$as_dir/$ac_word$ac_exec_ext" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - - ;; -esac -fi -UNZIP=$ac_cv_path_UNZIP -if test -n "$UNZIP"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $UNZIP" >&5 -$as_echo "$UNZIP" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - test -n "$UNZIP" && break -done - - - if test "x$UNZIP" = x; then - if test "xunzip" = x; then - PROG_NAME=unzip - else - PROG_NAME=unzip - fi - { $as_echo "$as_me:${as_lineno-$LINENO}: Could not find $PROG_NAME!" >&5 -$as_echo "$as_me: Could not find $PROG_NAME!" >&6;} - as_fn_error $? "Cannot continue" "$LINENO" 5 - fi - - - for ac_prog in wc do # Extract the first word of "$ac_prog", so it can be a program name with args. @@ -6154,6 +5644,65 @@ $as_echo "$as_me: Could not find $PROG_NAME!" >&6;} + for ac_prog in which +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_path_WHICH+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + case $WHICH in + [\\/]* | ?:[\\/]*) + ac_cv_path_WHICH="$WHICH" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_path_WHICH="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +WHICH=$ac_cv_path_WHICH +if test -n "$WHICH"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $WHICH" >&5 +$as_echo "$WHICH" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$WHICH" && break +done + + + if test "x$WHICH" = x; then + if test "xwhich" = x; then + PROG_NAME=which + else + PROG_NAME=which + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: Could not find $PROG_NAME!" >&5 +$as_echo "$as_me: Could not find $PROG_NAME!" >&6;} + as_fn_error $? "Cannot continue" "$LINENO" 5 + fi + + + for ac_prog in xargs do # Extract the first word of "$ac_prog", so it can be a program name with args. @@ -6213,65 +5762,6 @@ $as_echo "$as_me: Could not find $PROG_NAME!" >&6;} - for ac_prog in zip -do - # Extract the first word of "$ac_prog", so it can be a program name with args. -set dummy $ac_prog; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_path_ZIP+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - case $ZIP in - [\\/]* | ?:[\\/]*) - ac_cv_path_ZIP="$ZIP" # Let the user override the test with a path. - ;; - *) - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_path_ZIP="$as_dir/$ac_word$ac_exec_ext" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - - ;; -esac -fi -ZIP=$ac_cv_path_ZIP -if test -n "$ZIP"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ZIP" >&5 -$as_echo "$ZIP" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - test -n "$ZIP" && break -done - - - if test "x$ZIP" = x; then - if test "xzip" = x; then - PROG_NAME=zip - else - PROG_NAME=zip - fi - { $as_echo "$as_me:${as_lineno-$LINENO}: Could not find $PROG_NAME!" >&5 -$as_echo "$as_me: Could not find $PROG_NAME!" >&6;} - as_fn_error $? "Cannot continue" "$LINENO" 5 - fi - - - # Then required tools that require some special treatment. for ac_prog in gawk mawk nawk awk do @@ -6700,647 +6190,20 @@ $as_echo "$as_me: Could not find $PROG_NAME!" >&6;} fi - - # We need to find a recent version of GNU make. Especially on Solaris, this can be tricky. - if test "x$MAKE" != x; then - # User has supplied a make, test it. - if test ! -f "$MAKE"; then - as_fn_error $? "The specified make (by MAKE=$MAKE) is not found." "$LINENO" 5 - fi - - MAKE_CANDIDATE=""$MAKE"" - DESCRIPTION="user supplied MAKE=" - if test "x$MAKE_CANDIDATE" != x; then - { $as_echo "$as_me:${as_lineno-$LINENO}: Testing potential make at $MAKE_CANDIDATE, found using $DESCRIPTION" >&5 -$as_echo "$as_me: Testing potential make at $MAKE_CANDIDATE, found using $DESCRIPTION" >&6;} - - # Translate "gcc -E" into "`which gcc` -E" ie - # extract the full path to the binary and at the - # same time maintain any arguments passed to it. - # The command MUST exist in the path, or else! - tmp="$MAKE_CANDIDATE" - car="${tmp%% *}" - tmp="$MAKE_CANDIDATE EOL" - cdr="${tmp#* }" - # On windows we want paths without spaces. - if test "x$OPENJDK_BUILD_OS" = "xwindows"; then - - # Translate long cygdrive or C:\sdfsf path - # into a short mixed mode path that has no - # spaces in it. - tmp="$car" - - if test "x$OPENJDK_BUILD_OS" = "xwindows"; then - tmp=`$CYGPATH -u "$car"` - tmp=`which "$tmp"` - # If file exists with .exe appended, that's the real filename - # and cygpath needs that to convert to short style path. - if test -f "${tmp}.exe"; then - tmp="${tmp}.exe" - elif test -f "${tmp}.cmd"; then - tmp="${tmp}.cmd" - fi - # Convert to C:/ mixed style path without spaces. - tmp=`$CYGPATH -s -m "$tmp"` - fi - car="$tmp" - - else - # "which" is not portable, but is used here - # because we know that the command exists! - car=`which $car` - fi - if test "x$cdr" != xEOL; then - MAKE_CANDIDATE="$car ${cdr% *}" - else - MAKE_CANDIDATE="$car" - fi - - MAKE_VERSION_STRING=`$MAKE_CANDIDATE --version | $HEAD -n 1` - IS_GNU_MAKE=`$ECHO $MAKE_VERSION_STRING | $GREP 'GNU Make'` - if test "x$IS_GNU_MAKE" = x; then - { $as_echo "$as_me:${as_lineno-$LINENO}: Found potential make at $MAKE_CANDIDATE, however, this is not GNU Make. Ignoring." >&5 -$as_echo "$as_me: Found potential make at $MAKE_CANDIDATE, however, this is not GNU Make. Ignoring." >&6;} - else - IS_MODERN_MAKE=`$ECHO $MAKE_VERSION_STRING | $GREP '3.8[12346789]'` - if test "x$IS_MODERN_MAKE" = x; then - { $as_echo "$as_me:${as_lineno-$LINENO}: Found GNU make at $MAKE_CANDIDATE, however this is not version 3.81 or later. (it is: $MAKE_VERSION_STRING). Ignoring." >&5 -$as_echo "$as_me: Found GNU make at $MAKE_CANDIDATE, however this is not version 3.81 or later. (it is: $MAKE_VERSION_STRING). Ignoring." >&6;} - else - FOUND_MAKE=$MAKE_CANDIDATE - fi - fi - fi - - if test "x$FOUND_MAKE" = x; then - as_fn_error $? "The specified make (by MAKE=$MAKE) is not GNU make 3.81 or newer." "$LINENO" 5 - fi - else - # Try our hardest to locate a correct version of GNU make - for ac_prog in gmake -do - # Extract the first word of "$ac_prog", so it can be a program name with args. -set dummy $ac_prog; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_path_CHECK_GMAKE+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - case $CHECK_GMAKE in - [\\/]* | ?:[\\/]*) - ac_cv_path_CHECK_GMAKE="$CHECK_GMAKE" # Let the user override the test with a path. - ;; - *) - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_path_CHECK_GMAKE="$as_dir/$ac_word$ac_exec_ext" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - - ;; -esac -fi -CHECK_GMAKE=$ac_cv_path_CHECK_GMAKE -if test -n "$CHECK_GMAKE"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CHECK_GMAKE" >&5 -$as_echo "$CHECK_GMAKE" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - test -n "$CHECK_GMAKE" && break -done - - - MAKE_CANDIDATE=""$CHECK_GMAKE"" - DESCRIPTION="gmake in PATH" - if test "x$MAKE_CANDIDATE" != x; then - { $as_echo "$as_me:${as_lineno-$LINENO}: Testing potential make at $MAKE_CANDIDATE, found using $DESCRIPTION" >&5 -$as_echo "$as_me: Testing potential make at $MAKE_CANDIDATE, found using $DESCRIPTION" >&6;} - - # Translate "gcc -E" into "`which gcc` -E" ie - # extract the full path to the binary and at the - # same time maintain any arguments passed to it. - # The command MUST exist in the path, or else! - tmp="$MAKE_CANDIDATE" - car="${tmp%% *}" - tmp="$MAKE_CANDIDATE EOL" - cdr="${tmp#* }" - # On windows we want paths without spaces. - if test "x$OPENJDK_BUILD_OS" = "xwindows"; then - - # Translate long cygdrive or C:\sdfsf path - # into a short mixed mode path that has no - # spaces in it. - tmp="$car" - - if test "x$OPENJDK_BUILD_OS" = "xwindows"; then - tmp=`$CYGPATH -u "$car"` - tmp=`which "$tmp"` - # If file exists with .exe appended, that's the real filename - # and cygpath needs that to convert to short style path. - if test -f "${tmp}.exe"; then - tmp="${tmp}.exe" - elif test -f "${tmp}.cmd"; then - tmp="${tmp}.cmd" - fi - # Convert to C:/ mixed style path without spaces. - tmp=`$CYGPATH -s -m "$tmp"` - fi - car="$tmp" - - else - # "which" is not portable, but is used here - # because we know that the command exists! - car=`which $car` - fi - if test "x$cdr" != xEOL; then - MAKE_CANDIDATE="$car ${cdr% *}" - else - MAKE_CANDIDATE="$car" - fi - - MAKE_VERSION_STRING=`$MAKE_CANDIDATE --version | $HEAD -n 1` - IS_GNU_MAKE=`$ECHO $MAKE_VERSION_STRING | $GREP 'GNU Make'` - if test "x$IS_GNU_MAKE" = x; then - { $as_echo "$as_me:${as_lineno-$LINENO}: Found potential make at $MAKE_CANDIDATE, however, this is not GNU Make. Ignoring." >&5 -$as_echo "$as_me: Found potential make at $MAKE_CANDIDATE, however, this is not GNU Make. Ignoring." >&6;} - else - IS_MODERN_MAKE=`$ECHO $MAKE_VERSION_STRING | $GREP '3.8[12346789]'` - if test "x$IS_MODERN_MAKE" = x; then - { $as_echo "$as_me:${as_lineno-$LINENO}: Found GNU make at $MAKE_CANDIDATE, however this is not version 3.81 or later. (it is: $MAKE_VERSION_STRING). Ignoring." >&5 -$as_echo "$as_me: Found GNU make at $MAKE_CANDIDATE, however this is not version 3.81 or later. (it is: $MAKE_VERSION_STRING). Ignoring." >&6;} - else - FOUND_MAKE=$MAKE_CANDIDATE - fi - fi - fi - - - if test "x$FOUND_MAKE" = x; then - for ac_prog in make -do - # Extract the first word of "$ac_prog", so it can be a program name with args. -set dummy $ac_prog; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_path_CHECK_MAKE+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - case $CHECK_MAKE in - [\\/]* | ?:[\\/]*) - ac_cv_path_CHECK_MAKE="$CHECK_MAKE" # Let the user override the test with a path. - ;; - *) - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_path_CHECK_MAKE="$as_dir/$ac_word$ac_exec_ext" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - - ;; -esac -fi -CHECK_MAKE=$ac_cv_path_CHECK_MAKE -if test -n "$CHECK_MAKE"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CHECK_MAKE" >&5 -$as_echo "$CHECK_MAKE" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - test -n "$CHECK_MAKE" && break -done - - - MAKE_CANDIDATE=""$CHECK_MAKE"" - DESCRIPTION="make in PATH" - if test "x$MAKE_CANDIDATE" != x; then - { $as_echo "$as_me:${as_lineno-$LINENO}: Testing potential make at $MAKE_CANDIDATE, found using $DESCRIPTION" >&5 -$as_echo "$as_me: Testing potential make at $MAKE_CANDIDATE, found using $DESCRIPTION" >&6;} - - # Translate "gcc -E" into "`which gcc` -E" ie - # extract the full path to the binary and at the - # same time maintain any arguments passed to it. - # The command MUST exist in the path, or else! - tmp="$MAKE_CANDIDATE" - car="${tmp%% *}" - tmp="$MAKE_CANDIDATE EOL" - cdr="${tmp#* }" - # On windows we want paths without spaces. - if test "x$OPENJDK_BUILD_OS" = "xwindows"; then - - # Translate long cygdrive or C:\sdfsf path - # into a short mixed mode path that has no - # spaces in it. - tmp="$car" - - if test "x$OPENJDK_BUILD_OS" = "xwindows"; then - tmp=`$CYGPATH -u "$car"` - tmp=`which "$tmp"` - # If file exists with .exe appended, that's the real filename - # and cygpath needs that to convert to short style path. - if test -f "${tmp}.exe"; then - tmp="${tmp}.exe" - elif test -f "${tmp}.cmd"; then - tmp="${tmp}.cmd" - fi - # Convert to C:/ mixed style path without spaces. - tmp=`$CYGPATH -s -m "$tmp"` - fi - car="$tmp" - - else - # "which" is not portable, but is used here - # because we know that the command exists! - car=`which $car` - fi - if test "x$cdr" != xEOL; then - MAKE_CANDIDATE="$car ${cdr% *}" - else - MAKE_CANDIDATE="$car" - fi - - MAKE_VERSION_STRING=`$MAKE_CANDIDATE --version | $HEAD -n 1` - IS_GNU_MAKE=`$ECHO $MAKE_VERSION_STRING | $GREP 'GNU Make'` - if test "x$IS_GNU_MAKE" = x; then - { $as_echo "$as_me:${as_lineno-$LINENO}: Found potential make at $MAKE_CANDIDATE, however, this is not GNU Make. Ignoring." >&5 -$as_echo "$as_me: Found potential make at $MAKE_CANDIDATE, however, this is not GNU Make. Ignoring." >&6;} - else - IS_MODERN_MAKE=`$ECHO $MAKE_VERSION_STRING | $GREP '3.8[12346789]'` - if test "x$IS_MODERN_MAKE" = x; then - { $as_echo "$as_me:${as_lineno-$LINENO}: Found GNU make at $MAKE_CANDIDATE, however this is not version 3.81 or later. (it is: $MAKE_VERSION_STRING). Ignoring." >&5 -$as_echo "$as_me: Found GNU make at $MAKE_CANDIDATE, however this is not version 3.81 or later. (it is: $MAKE_VERSION_STRING). Ignoring." >&6;} - else - FOUND_MAKE=$MAKE_CANDIDATE - fi - fi - fi - - fi - - if test "x$FOUND_MAKE" = x; then - if test "x$TOOLS_DIR" != x; then - # We have a tools-dir, check that as well before giving up. - OLD_PATH=$PATH - PATH=$TOOLS_DIR:$PATH - for ac_prog in gmake -do - # Extract the first word of "$ac_prog", so it can be a program name with args. -set dummy $ac_prog; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_path_CHECK_TOOLSDIR_GMAKE+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - case $CHECK_TOOLSDIR_GMAKE in - [\\/]* | ?:[\\/]*) - ac_cv_path_CHECK_TOOLSDIR_GMAKE="$CHECK_TOOLSDIR_GMAKE" # Let the user override the test with a path. - ;; - *) - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_path_CHECK_TOOLSDIR_GMAKE="$as_dir/$ac_word$ac_exec_ext" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - - ;; -esac -fi -CHECK_TOOLSDIR_GMAKE=$ac_cv_path_CHECK_TOOLSDIR_GMAKE -if test -n "$CHECK_TOOLSDIR_GMAKE"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CHECK_TOOLSDIR_GMAKE" >&5 -$as_echo "$CHECK_TOOLSDIR_GMAKE" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - test -n "$CHECK_TOOLSDIR_GMAKE" && break -done - - - MAKE_CANDIDATE=""$CHECK_TOOLSDIR_GMAKE"" - DESCRIPTION="gmake in tools-dir" - if test "x$MAKE_CANDIDATE" != x; then - { $as_echo "$as_me:${as_lineno-$LINENO}: Testing potential make at $MAKE_CANDIDATE, found using $DESCRIPTION" >&5 -$as_echo "$as_me: Testing potential make at $MAKE_CANDIDATE, found using $DESCRIPTION" >&6;} - - # Translate "gcc -E" into "`which gcc` -E" ie - # extract the full path to the binary and at the - # same time maintain any arguments passed to it. - # The command MUST exist in the path, or else! - tmp="$MAKE_CANDIDATE" - car="${tmp%% *}" - tmp="$MAKE_CANDIDATE EOL" - cdr="${tmp#* }" - # On windows we want paths without spaces. - if test "x$OPENJDK_BUILD_OS" = "xwindows"; then - - # Translate long cygdrive or C:\sdfsf path - # into a short mixed mode path that has no - # spaces in it. - tmp="$car" - - if test "x$OPENJDK_BUILD_OS" = "xwindows"; then - tmp=`$CYGPATH -u "$car"` - tmp=`which "$tmp"` - # If file exists with .exe appended, that's the real filename - # and cygpath needs that to convert to short style path. - if test -f "${tmp}.exe"; then - tmp="${tmp}.exe" - elif test -f "${tmp}.cmd"; then - tmp="${tmp}.cmd" - fi - # Convert to C:/ mixed style path without spaces. - tmp=`$CYGPATH -s -m "$tmp"` - fi - car="$tmp" - - else - # "which" is not portable, but is used here - # because we know that the command exists! - car=`which $car` - fi - if test "x$cdr" != xEOL; then - MAKE_CANDIDATE="$car ${cdr% *}" - else - MAKE_CANDIDATE="$car" - fi - - MAKE_VERSION_STRING=`$MAKE_CANDIDATE --version | $HEAD -n 1` - IS_GNU_MAKE=`$ECHO $MAKE_VERSION_STRING | $GREP 'GNU Make'` - if test "x$IS_GNU_MAKE" = x; then - { $as_echo "$as_me:${as_lineno-$LINENO}: Found potential make at $MAKE_CANDIDATE, however, this is not GNU Make. Ignoring." >&5 -$as_echo "$as_me: Found potential make at $MAKE_CANDIDATE, however, this is not GNU Make. Ignoring." >&6;} - else - IS_MODERN_MAKE=`$ECHO $MAKE_VERSION_STRING | $GREP '3.8[12346789]'` - if test "x$IS_MODERN_MAKE" = x; then - { $as_echo "$as_me:${as_lineno-$LINENO}: Found GNU make at $MAKE_CANDIDATE, however this is not version 3.81 or later. (it is: $MAKE_VERSION_STRING). Ignoring." >&5 -$as_echo "$as_me: Found GNU make at $MAKE_CANDIDATE, however this is not version 3.81 or later. (it is: $MAKE_VERSION_STRING). Ignoring." >&6;} - else - FOUND_MAKE=$MAKE_CANDIDATE - fi - fi - fi - - if test "x$FOUND_MAKE" = x; then - for ac_prog in make -do - # Extract the first word of "$ac_prog", so it can be a program name with args. -set dummy $ac_prog; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_path_CHECK_TOOLSDIR_MAKE+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - case $CHECK_TOOLSDIR_MAKE in - [\\/]* | ?:[\\/]*) - ac_cv_path_CHECK_TOOLSDIR_MAKE="$CHECK_TOOLSDIR_MAKE" # Let the user override the test with a path. - ;; - *) - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_path_CHECK_TOOLSDIR_MAKE="$as_dir/$ac_word$ac_exec_ext" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - - ;; -esac -fi -CHECK_TOOLSDIR_MAKE=$ac_cv_path_CHECK_TOOLSDIR_MAKE -if test -n "$CHECK_TOOLSDIR_MAKE"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CHECK_TOOLSDIR_MAKE" >&5 -$as_echo "$CHECK_TOOLSDIR_MAKE" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - test -n "$CHECK_TOOLSDIR_MAKE" && break -done - - - MAKE_CANDIDATE=""$CHECK_TOOLSDIR_MAKE"" - DESCRIPTION="make in tools-dir" - if test "x$MAKE_CANDIDATE" != x; then - { $as_echo "$as_me:${as_lineno-$LINENO}: Testing potential make at $MAKE_CANDIDATE, found using $DESCRIPTION" >&5 -$as_echo "$as_me: Testing potential make at $MAKE_CANDIDATE, found using $DESCRIPTION" >&6;} - - # Translate "gcc -E" into "`which gcc` -E" ie - # extract the full path to the binary and at the - # same time maintain any arguments passed to it. - # The command MUST exist in the path, or else! - tmp="$MAKE_CANDIDATE" - car="${tmp%% *}" - tmp="$MAKE_CANDIDATE EOL" - cdr="${tmp#* }" - # On windows we want paths without spaces. - if test "x$OPENJDK_BUILD_OS" = "xwindows"; then - - # Translate long cygdrive or C:\sdfsf path - # into a short mixed mode path that has no - # spaces in it. - tmp="$car" - - if test "x$OPENJDK_BUILD_OS" = "xwindows"; then - tmp=`$CYGPATH -u "$car"` - tmp=`which "$tmp"` - # If file exists with .exe appended, that's the real filename - # and cygpath needs that to convert to short style path. - if test -f "${tmp}.exe"; then - tmp="${tmp}.exe" - elif test -f "${tmp}.cmd"; then - tmp="${tmp}.cmd" - fi - # Convert to C:/ mixed style path without spaces. - tmp=`$CYGPATH -s -m "$tmp"` - fi - car="$tmp" - - else - # "which" is not portable, but is used here - # because we know that the command exists! - car=`which $car` - fi - if test "x$cdr" != xEOL; then - MAKE_CANDIDATE="$car ${cdr% *}" - else - MAKE_CANDIDATE="$car" - fi - - MAKE_VERSION_STRING=`$MAKE_CANDIDATE --version | $HEAD -n 1` - IS_GNU_MAKE=`$ECHO $MAKE_VERSION_STRING | $GREP 'GNU Make'` - if test "x$IS_GNU_MAKE" = x; then - { $as_echo "$as_me:${as_lineno-$LINENO}: Found potential make at $MAKE_CANDIDATE, however, this is not GNU Make. Ignoring." >&5 -$as_echo "$as_me: Found potential make at $MAKE_CANDIDATE, however, this is not GNU Make. Ignoring." >&6;} - else - IS_MODERN_MAKE=`$ECHO $MAKE_VERSION_STRING | $GREP '3.8[12346789]'` - if test "x$IS_MODERN_MAKE" = x; then - { $as_echo "$as_me:${as_lineno-$LINENO}: Found GNU make at $MAKE_CANDIDATE, however this is not version 3.81 or later. (it is: $MAKE_VERSION_STRING). Ignoring." >&5 -$as_echo "$as_me: Found GNU make at $MAKE_CANDIDATE, however this is not version 3.81 or later. (it is: $MAKE_VERSION_STRING). Ignoring." >&6;} - else - FOUND_MAKE=$MAKE_CANDIDATE - fi - fi - fi - - fi - PATH=$OLD_PATH - fi - fi - - if test "x$FOUND_MAKE" = x; then - as_fn_error $? "Cannot find GNU make 3.81 or newer! Please put it in the path, or add e.g. MAKE=/opt/gmake3.81/make as argument to configure." "$LINENO" 5 - fi - fi - - MAKE=$FOUND_MAKE - - { $as_echo "$as_me:${as_lineno-$LINENO}: Using GNU make 3.81 (or later) at $FOUND_MAKE (version: $MAKE_VERSION_STRING)" >&5 -$as_echo "$as_me: Using GNU make 3.81 (or later) at $FOUND_MAKE (version: $MAKE_VERSION_STRING)" >&6;} - - - - for ac_prog in rm -do - # Extract the first word of "$ac_prog", so it can be a program name with args. -set dummy $ac_prog; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_path_RM+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - case $RM in - [\\/]* | ?:[\\/]*) - ac_cv_path_RM="$RM" # Let the user override the test with a path. - ;; - *) - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_path_RM="$as_dir/$ac_word$ac_exec_ext" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - - ;; -esac -fi -RM=$ac_cv_path_RM -if test -n "$RM"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $RM" >&5 -$as_echo "$RM" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - test -n "$RM" && break -done - - - if test "x$RM" = x; then - if test "xrm" = x; then - PROG_NAME=rm - else - PROG_NAME=rm - fi - { $as_echo "$as_me:${as_lineno-$LINENO}: Could not find $PROG_NAME!" >&5 -$as_echo "$as_me: Could not find $PROG_NAME!" >&6;} - as_fn_error $? "Cannot continue" "$LINENO" 5 - fi - - +# Always force rm. RM="$RM -f" - - # Test if find supports -delete - { $as_echo "$as_me:${as_lineno-$LINENO}: checking if find supports -delete" >&5 -$as_echo_n "checking if find supports -delete... " >&6; } - FIND_DELETE="-delete" - - DELETEDIR=`mktemp -d tmp.XXXXXXXXXX` || (echo Could not create temporary directory!; exit $?) - - echo Hejsan > $DELETEDIR/TestIfFindSupportsDelete - - TEST_DELETE=`$FIND "$DELETEDIR" -name TestIfFindSupportsDelete $FIND_DELETE 2>&1` - if test -f $DELETEDIR/TestIfFindSupportsDelete; then - # No, it does not. - rm $DELETEDIR/TestIfFindSupportsDelete - FIND_DELETE="-exec rm \{\} \+" - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } - else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } - fi - rmdir $DELETEDIR - - - -# Non-required basic tools - -# Extract the first word of "pwd", so it can be a program name with args. -set dummy pwd; ac_word=$2 +# These are not required on all platforms +# Extract the first word of "cygpath", so it can be a program name with args. +set dummy cygpath; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_path_THEPWDCMD+set}" = set; then : +if test "${ac_cv_path_CYGPATH+set}" = set; then : $as_echo_n "(cached) " >&6 else - case $THEPWDCMD in + case $CYGPATH in [\\/]* | ?:[\\/]*) - ac_cv_path_THEPWDCMD="$THEPWDCMD" # Let the user override the test with a path. + ac_cv_path_CYGPATH="$CYGPATH" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR @@ -7350,7 +6213,7 @@ do test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_path_THEPWDCMD="$as_dir/$ac_word$ac_exec_ext" + ac_cv_path_CYGPATH="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi @@ -7361,26 +6224,26 @@ IFS=$as_save_IFS ;; esac fi -THEPWDCMD=$ac_cv_path_THEPWDCMD -if test -n "$THEPWDCMD"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $THEPWDCMD" >&5 -$as_echo "$THEPWDCMD" >&6; } +CYGPATH=$ac_cv_path_CYGPATH +if test -n "$CYGPATH"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CYGPATH" >&5 +$as_echo "$CYGPATH" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi -# Extract the first word of "ldd", so it can be a program name with args. -set dummy ldd; ac_word=$2 +# Extract the first word of "readlink", so it can be a program name with args. +set dummy readlink; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_path_LDD+set}" = set; then : +if test "${ac_cv_path_READLINK+set}" = set; then : $as_echo_n "(cached) " >&6 else - case $LDD in + case $READLINK in [\\/]* | ?:[\\/]*) - ac_cv_path_LDD="$LDD" # Let the user override the test with a path. + ac_cv_path_READLINK="$READLINK" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR @@ -7390,7 +6253,7 @@ do test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_path_LDD="$as_dir/$ac_word$ac_exec_ext" + ac_cv_path_READLINK="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi @@ -7401,32 +6264,26 @@ IFS=$as_save_IFS ;; esac fi -LDD=$ac_cv_path_LDD -if test -n "$LDD"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LDD" >&5 -$as_echo "$LDD" >&6; } +READLINK=$ac_cv_path_READLINK +if test -n "$READLINK"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $READLINK" >&5 +$as_echo "$READLINK" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi -if test "x$LDD" = "x"; then - # List shared lib dependencies is used for - # debug output and checking for forbidden dependencies. - # We can build without it. - LDD="true" -fi -# Extract the first word of "otool", so it can be a program name with args. -set dummy otool; ac_word=$2 +# Extract the first word of "df", so it can be a program name with args. +set dummy df; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_path_OTOOL+set}" = set; then : +if test "${ac_cv_path_DF+set}" = set; then : $as_echo_n "(cached) " >&6 else - case $OTOOL in + case $DF in [\\/]* | ?:[\\/]*) - ac_cv_path_OTOOL="$OTOOL" # Let the user override the test with a path. + ac_cv_path_DF="$DF" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR @@ -7436,7 +6293,7 @@ do test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_path_OTOOL="$as_dir/$ac_word$ac_exec_ext" + ac_cv_path_DF="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi @@ -7447,31 +6304,26 @@ IFS=$as_save_IFS ;; esac fi -OTOOL=$ac_cv_path_OTOOL -if test -n "$OTOOL"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OTOOL" >&5 -$as_echo "$OTOOL" >&6; } +DF=$ac_cv_path_DF +if test -n "$DF"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DF" >&5 +$as_echo "$DF" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi -if test "x$OTOOL" = "x"; then - OTOOL="true" -fi -for ac_prog in readelf greadelf -do - # Extract the first word of "$ac_prog", so it can be a program name with args. -set dummy $ac_prog; ac_word=$2 +# Extract the first word of "SetFile", so it can be a program name with args. +set dummy SetFile; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_path_READELF+set}" = set; then : +if test "${ac_cv_path_SETFILE+set}" = set; then : $as_echo_n "(cached) " >&6 else - case $READELF in + case $SETFILE in [\\/]* | ?:[\\/]*) - ac_cv_path_READELF="$READELF" # Let the user override the test with a path. + ac_cv_path_SETFILE="$SETFILE" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR @@ -7481,7 +6333,7 @@ do test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_path_READELF="$as_dir/$ac_word$ac_exec_ext" + ac_cv_path_SETFILE="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi @@ -7492,439 +6344,996 @@ IFS=$as_save_IFS ;; esac fi -READELF=$ac_cv_path_READELF -if test -n "$READELF"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $READELF" >&5 -$as_echo "$READELF" >&6; } +SETFILE=$ac_cv_path_SETFILE +if test -n "$SETFILE"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $SETFILE" >&5 +$as_echo "$SETFILE" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi - test -n "$READELF" && break -done -for ac_prog in objdump gobjdump -do - # Extract the first word of "$ac_prog", so it can be a program name with args. -set dummy $ac_prog; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_path_OBJDUMP+set}" = set; then : + +# Now we can determine OpenJDK build and target platforms. This is required to +# have early on. +# Make sure we can run config.sub. +$SHELL "$ac_aux_dir/config.sub" sun4 >/dev/null 2>&1 || + as_fn_error $? "cannot run $SHELL $ac_aux_dir/config.sub" "$LINENO" 5 + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking build system type" >&5 +$as_echo_n "checking build system type... " >&6; } +if test "${ac_cv_build+set}" = set; then : $as_echo_n "(cached) " >&6 else - case $OBJDUMP in - [\\/]* | ?:[\\/]*) - ac_cv_path_OBJDUMP="$OBJDUMP" # Let the user override the test with a path. - ;; - *) - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_path_OBJDUMP="$as_dir/$ac_word$ac_exec_ext" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS + ac_build_alias=$build_alias +test "x$ac_build_alias" = x && + ac_build_alias=`$SHELL "$ac_aux_dir/config.guess"` +test "x$ac_build_alias" = x && + as_fn_error $? "cannot guess build type; you must specify one" "$LINENO" 5 +ac_cv_build=`$SHELL "$ac_aux_dir/config.sub" $ac_build_alias` || + as_fn_error $? "$SHELL $ac_aux_dir/config.sub $ac_build_alias failed" "$LINENO" 5 - ;; +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_build" >&5 +$as_echo "$ac_cv_build" >&6; } +case $ac_cv_build in +*-*-*) ;; +*) as_fn_error $? "invalid value of canonical build" "$LINENO" 5 ;; esac -fi -OBJDUMP=$ac_cv_path_OBJDUMP -if test -n "$OBJDUMP"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OBJDUMP" >&5 -$as_echo "$OBJDUMP" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi +build=$ac_cv_build +ac_save_IFS=$IFS; IFS='-' +set x $ac_cv_build +shift +build_cpu=$1 +build_vendor=$2 +shift; shift +# Remember, the first character of IFS is used to create $*, +# except with old shells: +build_os=$* +IFS=$ac_save_IFS +case $build_os in *\ *) build_os=`echo "$build_os" | sed 's/ /-/g'`;; esac - test -n "$OBJDUMP" && break -done - -# Extract the first word of "hg", so it can be a program name with args. -set dummy hg; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_path_HG+set}" = set; then : +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking host system type" >&5 +$as_echo_n "checking host system type... " >&6; } +if test "${ac_cv_host+set}" = set; then : $as_echo_n "(cached) " >&6 else - case $HG in - [\\/]* | ?:[\\/]*) - ac_cv_path_HG="$HG" # Let the user override the test with a path. - ;; - *) - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_path_HG="$as_dir/$ac_word$ac_exec_ext" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - - ;; -esac -fi -HG=$ac_cv_path_HG -if test -n "$HG"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $HG" >&5 -$as_echo "$HG" >&6; } + if test "x$host_alias" = x; then + ac_cv_host=$ac_cv_build else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + ac_cv_host=`$SHELL "$ac_aux_dir/config.sub" $host_alias` || + as_fn_error $? "$SHELL $ac_aux_dir/config.sub $host_alias failed" "$LINENO" 5 fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_host" >&5 +$as_echo "$ac_cv_host" >&6; } +case $ac_cv_host in +*-*-*) ;; +*) as_fn_error $? "invalid value of canonical host" "$LINENO" 5 ;; +esac +host=$ac_cv_host +ac_save_IFS=$IFS; IFS='-' +set x $ac_cv_host +shift +host_cpu=$1 +host_vendor=$2 +shift; shift +# Remember, the first character of IFS is used to create $*, +# except with old shells: +host_os=$* +IFS=$ac_save_IFS +case $host_os in *\ *) host_os=`echo "$host_os" | sed 's/ /-/g'`;; esac - -# Check if pkg-config is available. - - -if test "x$ac_cv_env_PKG_CONFIG_set" != "xset"; then - if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}pkg-config", so it can be a program name with args. -set dummy ${ac_tool_prefix}pkg-config; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_path_PKG_CONFIG+set}" = set; then : +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking target system type" >&5 +$as_echo_n "checking target system type... " >&6; } +if test "${ac_cv_target+set}" = set; then : $as_echo_n "(cached) " >&6 else - case $PKG_CONFIG in - [\\/]* | ?:[\\/]*) - ac_cv_path_PKG_CONFIG="$PKG_CONFIG" # Let the user override the test with a path. - ;; - *) - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_path_PKG_CONFIG="$as_dir/$ac_word$ac_exec_ext" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS + if test "x$target_alias" = x; then + ac_cv_target=$ac_cv_host +else + ac_cv_target=`$SHELL "$ac_aux_dir/config.sub" $target_alias` || + as_fn_error $? "$SHELL $ac_aux_dir/config.sub $target_alias failed" "$LINENO" 5 +fi - ;; +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_target" >&5 +$as_echo "$ac_cv_target" >&6; } +case $ac_cv_target in +*-*-*) ;; +*) as_fn_error $? "invalid value of canonical target" "$LINENO" 5 ;; esac -fi -PKG_CONFIG=$ac_cv_path_PKG_CONFIG -if test -n "$PKG_CONFIG"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PKG_CONFIG" >&5 -$as_echo "$PKG_CONFIG" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } +target=$ac_cv_target +ac_save_IFS=$IFS; IFS='-' +set x $ac_cv_target +shift +target_cpu=$1 +target_vendor=$2 +shift; shift +# Remember, the first character of IFS is used to create $*, +# except with old shells: +target_os=$* +IFS=$ac_save_IFS +case $target_os in *\ *) target_os=`echo "$target_os" | sed 's/ /-/g'`;; esac + + +# The aliases save the names the user supplied, while $host etc. +# will get canonicalized. +test -n "$target_alias" && + test "$program_prefix$program_suffix$program_transform_name" = \ + NONENONEs,x,x, && + program_prefix=${target_alias}- + +# Figure out the build and target systems. # Note that in autoconf terminology, "build" is obvious, but "target" +# is confusing; it assumes you are cross-compiling a cross-compiler (!) and "target" is thus the target of the +# product you're building. The target of this build is called "host". Since this is confusing to most people, we +# have not adopted that system, but use "target" as the platform we are building for. In some places though we need +# to use the configure naming style. + + + + + + # Copy the autoconf trip/quadruplet verbatim to OPENJDK_TARGET_AUTOCONF_NAME + # (from the autoconf "host") and OPENJDK_BUILD_AUTOCONF_NAME + # Note that we might later on rewrite e.g. OPENJDK_TARGET_CPU due to reduced build, + # but this will not change the value of OPENJDK_TARGET_AUTOCONF_NAME. + OPENJDK_TARGET_AUTOCONF_NAME="$host" + OPENJDK_BUILD_AUTOCONF_NAME="$build" + + + + # Convert the autoconf OS/CPU value to our own data, into the VAR_OS/CPU variables. + + case "$build_os" in + *linux*) + VAR_OS=linux + VAR_OS_API=posix + VAR_OS_ENV=linux + ;; + *solaris*) + VAR_OS=solaris + VAR_OS_API=posix + VAR_OS_ENV=solaris + ;; + *darwin*) + VAR_OS=macosx + VAR_OS_API=posix + VAR_OS_ENV=macosx + ;; + *bsd*) + VAR_OS=bsd + VAR_OS_API=posix + VAR_OS_ENV=bsd + ;; + *cygwin*) + VAR_OS=windows + VAR_OS_API=winapi + VAR_OS_ENV=windows.cygwin + ;; + *mingw*) + VAR_OS=windows + VAR_OS_API=winapi + VAR_OS_ENV=windows.msys + ;; + *) + as_fn_error $? "unsupported operating system $build_os" "$LINENO" 5 + ;; + esac + + + # First argument is the cpu name from the trip/quad + case "$build_cpu" in + x86_64) + VAR_CPU=x86_64 + VAR_CPU_ARCH=x86 + VAR_CPU_BITS=64 + VAR_CPU_ENDIAN=little + ;; + i?86) + VAR_CPU=x86 + VAR_CPU_ARCH=x86 + VAR_CPU_BITS=32 + VAR_CPU_ENDIAN=little + ;; + arm*) + VAR_CPU=arm + VAR_CPU_ARCH=arm + VAR_CPU_BITS=32 + VAR_CPU_ENDIAN=little + ;; + powerpc) + VAR_CPU=ppc + VAR_CPU_ARCH=ppc + VAR_CPU_BITS=32 + VAR_CPU_ENDIAN=big + ;; + powerpc64) + VAR_CPU=ppc64 + VAR_CPU_ARCH=ppc + VAR_CPU_BITS=64 + VAR_CPU_ENDIAN=big + ;; + sparc) + VAR_CPU=sparc + VAR_CPU_ARCH=sparc + VAR_CPU_BITS=32 + VAR_CPU_ENDIAN=big + ;; + sparcv9) + VAR_CPU=sparcv9 + VAR_CPU_ARCH=sparc + VAR_CPU_BITS=64 + VAR_CPU_ENDIAN=big + ;; + *) + as_fn_error $? "unsupported cpu $build_cpu" "$LINENO" 5 + ;; + esac + + # ..and setup our own variables. (Do this explicitely to facilitate searching) + OPENJDK_BUILD_OS="$VAR_OS" + OPENJDK_BUILD_OS_API="$VAR_OS_API" + OPENJDK_BUILD_OS_ENV="$VAR_OS_ENV" + OPENJDK_BUILD_CPU="$VAR_CPU" + OPENJDK_BUILD_CPU_ARCH="$VAR_CPU_ARCH" + OPENJDK_BUILD_CPU_BITS="$VAR_CPU_BITS" + OPENJDK_BUILD_CPU_ENDIAN="$VAR_CPU_ENDIAN" + + + + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking openjdk-build os-cpu" >&5 +$as_echo_n "checking openjdk-build os-cpu... " >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OPENJDK_BUILD_OS-$OPENJDK_BUILD_CPU" >&5 +$as_echo "$OPENJDK_BUILD_OS-$OPENJDK_BUILD_CPU" >&6; } + + # Convert the autoconf OS/CPU value to our own data, into the VAR_OS/CPU variables. + + case "$host_os" in + *linux*) + VAR_OS=linux + VAR_OS_API=posix + VAR_OS_ENV=linux + ;; + *solaris*) + VAR_OS=solaris + VAR_OS_API=posix + VAR_OS_ENV=solaris + ;; + *darwin*) + VAR_OS=macosx + VAR_OS_API=posix + VAR_OS_ENV=macosx + ;; + *bsd*) + VAR_OS=bsd + VAR_OS_API=posix + VAR_OS_ENV=bsd + ;; + *cygwin*) + VAR_OS=windows + VAR_OS_API=winapi + VAR_OS_ENV=windows.cygwin + ;; + *mingw*) + VAR_OS=windows + VAR_OS_API=winapi + VAR_OS_ENV=windows.msys + ;; + *) + as_fn_error $? "unsupported operating system $host_os" "$LINENO" 5 + ;; + esac + + + # First argument is the cpu name from the trip/quad + case "$host_cpu" in + x86_64) + VAR_CPU=x86_64 + VAR_CPU_ARCH=x86 + VAR_CPU_BITS=64 + VAR_CPU_ENDIAN=little + ;; + i?86) + VAR_CPU=x86 + VAR_CPU_ARCH=x86 + VAR_CPU_BITS=32 + VAR_CPU_ENDIAN=little + ;; + arm*) + VAR_CPU=arm + VAR_CPU_ARCH=arm + VAR_CPU_BITS=32 + VAR_CPU_ENDIAN=little + ;; + powerpc) + VAR_CPU=ppc + VAR_CPU_ARCH=ppc + VAR_CPU_BITS=32 + VAR_CPU_ENDIAN=big + ;; + powerpc64) + VAR_CPU=ppc64 + VAR_CPU_ARCH=ppc + VAR_CPU_BITS=64 + VAR_CPU_ENDIAN=big + ;; + sparc) + VAR_CPU=sparc + VAR_CPU_ARCH=sparc + VAR_CPU_BITS=32 + VAR_CPU_ENDIAN=big + ;; + sparcv9) + VAR_CPU=sparcv9 + VAR_CPU_ARCH=sparc + VAR_CPU_BITS=64 + VAR_CPU_ENDIAN=big + ;; + *) + as_fn_error $? "unsupported cpu $host_cpu" "$LINENO" 5 + ;; + esac + + # ... and setup our own variables. (Do this explicitely to facilitate searching) + OPENJDK_TARGET_OS="$VAR_OS" + OPENJDK_TARGET_OS_API="$VAR_OS_API" + OPENJDK_TARGET_OS_ENV="$VAR_OS_ENV" + OPENJDK_TARGET_CPU="$VAR_CPU" + OPENJDK_TARGET_CPU_ARCH="$VAR_CPU_ARCH" + OPENJDK_TARGET_CPU_BITS="$VAR_CPU_BITS" + OPENJDK_TARGET_CPU_ENDIAN="$VAR_CPU_ENDIAN" + + + + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking openjdk-target os-cpu" >&5 +$as_echo_n "checking openjdk-target os-cpu... " >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OPENJDK_TARGET_OS-$OPENJDK_TARGET_CPU" >&5 +$as_echo "$OPENJDK_TARGET_OS-$OPENJDK_TARGET_CPU" >&6; } + + + +# Check whether --with-target-bits was given. +if test "${with_target_bits+set}" = set; then : + withval=$with_target_bits; fi -fi -if test -z "$ac_cv_path_PKG_CONFIG"; then - ac_pt_PKG_CONFIG=$PKG_CONFIG - # Extract the first word of "pkg-config", so it can be a program name with args. -set dummy pkg-config; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_path_ac_pt_PKG_CONFIG+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - case $ac_pt_PKG_CONFIG in - [\\/]* | ?:[\\/]*) - ac_cv_path_ac_pt_PKG_CONFIG="$ac_pt_PKG_CONFIG" # Let the user override the test with a path. - ;; - *) - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_path_ac_pt_PKG_CONFIG="$as_dir/$ac_word$ac_exec_ext" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - - ;; -esac -fi -ac_pt_PKG_CONFIG=$ac_cv_path_ac_pt_PKG_CONFIG -if test -n "$ac_pt_PKG_CONFIG"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_pt_PKG_CONFIG" >&5 -$as_echo "$ac_pt_PKG_CONFIG" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - if test "x$ac_pt_PKG_CONFIG" = x; then - PKG_CONFIG="" + # We have three types of compiles: + # native == normal compilation, target system == build system + # cross == traditional cross compilation, target system != build system; special toolchain needed + # reduced == using native compilers, but with special flags (e.g. -m32) to produce 32-bit builds on 64-bit machines + # + if test "x$OPENJDK_BUILD_AUTOCONF_NAME" != "x$OPENJDK_TARGET_AUTOCONF_NAME"; then + # We're doing a proper cross-compilation + COMPILE_TYPE="cross" else - case $cross_compiling:$ac_tool_warned in -yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} -ac_tool_warned=yes ;; -esac - PKG_CONFIG=$ac_pt_PKG_CONFIG + COMPILE_TYPE="native" fi -else - PKG_CONFIG="$ac_cv_path_PKG_CONFIG" -fi -fi -if test -n "$PKG_CONFIG"; then - _pkg_min_version=0.9.0 - { $as_echo "$as_me:${as_lineno-$LINENO}: checking pkg-config is at least version $_pkg_min_version" >&5 -$as_echo_n "checking pkg-config is at least version $_pkg_min_version... " >&6; } - if $PKG_CONFIG --atleast-pkgconfig-version $_pkg_min_version; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } - else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } - PKG_CONFIG="" - fi - -fi - -# After basic tools have been setup, we can check build os specific details. - -############################################################################### - -# Note that this is the build platform OS version! - -OS_VERSION="`uname -r | ${SED} 's!\.! !g' | ${SED} 's!-! !g'`" -OS_VERSION_MAJOR="`${ECHO} ${OS_VERSION} | ${CUT} -f 1 -d ' '`" -OS_VERSION_MINOR="`${ECHO} ${OS_VERSION} | ${CUT} -f 2 -d ' '`" -OS_VERSION_MICRO="`${ECHO} ${OS_VERSION} | ${CUT} -f 3 -d ' '`" - - - - - -# Setup builddeps, for automatic downloading of tools we need. -# This is needed before we can call BDEPS_CHECK_MODULE, which is done in -# boot-jdk setup, but we need to have basic tools setup first. - - -# Check whether --with-builddeps-conf was given. -if test "${with_builddeps_conf+set}" = set; then : - withval=$with_builddeps_conf; -fi - - - -# Check whether --with-builddeps-server was given. -if test "${with_builddeps_server+set}" = set; then : - withval=$with_builddeps_server; -fi - - - -# Check whether --with-builddeps-dir was given. -if test "${with_builddeps_dir+set}" = set; then : - withval=$with_builddeps_dir; -else - with_builddeps_dir=/localhome/builddeps -fi - - - -# Check whether --with-builddeps-group was given. -if test "${with_builddeps_group+set}" = set; then : - withval=$with_builddeps_group; -fi - - -# Check whether --enable-list-builddeps was given. -if test "${enable_list_builddeps+set}" = set; then : - enableval=$enable_list_builddeps; LIST_BUILDDEPS="${enableval}" -else - LIST_BUILDDEPS='no' -fi - - -if test "x$LIST_BUILDDEPS" = xyes; then - echo - echo List of build dependencies known to the configure script, - echo that can be used in builddeps.conf files: - cat $AUTOCONF_DIR/*.ac $AUTOCONF_DIR/*.m4 | grep BDEPS_CHECK_MODULE\( | cut -f 2 -d ',' | tr -d ' ' | sort - echo - exit 1 -fi - - - - if test "x$with_builddeps_server" != x || test "x$with_builddeps_conf" != x; then - if test "x$with_builddeps_conf" != x; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for supplied builddeps configuration file" >&5 -$as_echo_n "checking for supplied builddeps configuration file... " >&6; } - builddepsfile=$with_builddeps_conf - if test -s $builddepsfile; then - . $builddepsfile - { $as_echo "$as_me:${as_lineno-$LINENO}: result: loaded!" >&5 -$as_echo "loaded!" >&6; } - else - as_fn_error $? "The given builddeps conf file $with_builddeps_conf could not be loaded!" "$LINENO" 5 - fi - else - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for builddeps.conf files in sources..." >&5 -$as_echo_n "checking for builddeps.conf files in sources...... " >&6; } - builddepsfile=`mktemp` - touch $builddepsfile - # Put all found confs into a single file. - find ${SRC_ROOT} -name builddeps.conf -exec cat \{\} \; >> $builddepsfile - # Source the file to acquire the variables - if test -s $builddepsfile; then - . $builddepsfile - { $as_echo "$as_me:${as_lineno-$LINENO}: result: found at least one!" >&5 -$as_echo "found at least one!" >&6; } - else - as_fn_error $? "Could not find any builddeps.conf at all!" "$LINENO" 5 - fi - fi - # Create build and target names that use _ instead of "-" and ".". - # This is necessary to use them in variable names. - build_var=`echo ${OPENJDK_BUILD_AUTOCONF_NAME} | tr '-' '_' | tr '.' '_'` - target_var=`echo ${OPENJDK_TARGET_AUTOCONF_NAME} | tr '-' '_' | tr '.' '_'` - # Extract rewrite information for build and target - eval rewritten_build=\${REWRITE_${build_var}} - if test "x$rewritten_build" = x; then - rewritten_build=${OPENJDK_BUILD_AUTOCONF_NAME} - echo Build stays the same $rewritten_build - else - echo Rewriting build for builddeps into $rewritten_build - fi - eval rewritten_target=\${REWRITE_${target_var}} - if test "x$rewritten_target" = x; then - rewritten_target=${OPENJDK_TARGET_AUTOCONF_NAME} - echo Target stays the same $rewritten_target - else - echo Rewriting target for builddeps into $rewritten_target - fi - rewritten_build_var=`echo ${rewritten_build} | tr '-' '_' | tr '.' '_'` - rewritten_target_var=`echo ${rewritten_target} | tr '-' '_' | tr '.' '_'` - fi - for ac_prog in 7z unzip -do - # Extract the first word of "$ac_prog", so it can be a program name with args. -set dummy $ac_prog; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_BDEPS_UNZIP+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$BDEPS_UNZIP"; then - ac_cv_prog_BDEPS_UNZIP="$BDEPS_UNZIP" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_BDEPS_UNZIP="$ac_prog" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -BDEPS_UNZIP=$ac_cv_prog_BDEPS_UNZIP -if test -n "$BDEPS_UNZIP"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $BDEPS_UNZIP" >&5 -$as_echo "$BDEPS_UNZIP" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - test -n "$BDEPS_UNZIP" && break -done - - if test "x$BDEPS_UNZIP" = x7z; then - BDEPS_UNZIP="7z x" + if test "x$with_target_bits" != x; then + if test "x$COMPILE_TYPE" = "xcross"; then + as_fn_error $? "It is not possible to combine --with-target-bits=X and proper cross-compilation. Choose either." "$LINENO" 5 fi - for ac_prog in wget lftp ftp -do - # Extract the first word of "$ac_prog", so it can be a program name with args. -set dummy $ac_prog; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_BDEPS_FTP+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$BDEPS_FTP"; then - ac_cv_prog_BDEPS_FTP="$BDEPS_FTP" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_BDEPS_FTP="$ac_prog" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 + if test "x$with_target_bits" = x32 && test "x$OPENJDK_TARGET_CPU_BITS" = x64; then + # A reduced build is requested + COMPILE_TYPE="reduced" + OPENJDK_TARGET_CPU_BITS=32 + if test "x$OPENJDK_TARGET_CPU_ARCH" = "xx86"; then + OPENJDK_TARGET_CPU=x86 + elif test "x$OPENJDK_TARGET_CPU_ARCH" = "xsparc"; then + OPENJDK_TARGET_CPU=sparc + else + as_fn_error $? "Reduced build (--with-target-bits=32) is only supported on x86_64 and sparcv9" "$LINENO" 5 + fi + elif test "x$with_target_bits" = x64 && test "x$OPENJDK_TARGET_CPU_BITS" = x32; then + as_fn_error $? "It is not possible to use --with-target-bits=64 on a 32 bit system. Use proper cross-compilation instead." "$LINENO" 5 + elif test "x$with_target_bits" = "x$OPENJDK_TARGET_CPU_BITS"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: --with-target-bits are set to build platform address size; argument has no meaning" >&5 +$as_echo "$as_me: --with-target-bits are set to build platform address size; argument has no meaning" >&6;} + else + as_fn_error $? "--with-target-bits can only be 32 or 64, you specified $with_target_bits!" "$LINENO" 5 + fi + fi + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking compilation type" >&5 +$as_echo_n "checking compilation type... " >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $COMPILE_TYPE" >&5 +$as_echo "$COMPILE_TYPE" >&6; } + + + if test "x$OPENJDK_TARGET_OS" = "xsolaris"; then + REQUIRED_OS_NAME=SunOS + REQUIRED_OS_VERSION=5.10 + fi + if test "x$OPENJDK_TARGET_OS" = "xlinux"; then + REQUIRED_OS_NAME=Linux + REQUIRED_OS_VERSION=2.6 + fi + if test "x$OPENJDK_TARGET_OS" = "xwindows"; then + REQUIRED_OS_NAME=Windows + if test "x$OPENJDK_TARGET_CPU_BITS" = "x64"; then + REQUIRED_OS_VERSION=5.2 + else + REQUIRED_OS_VERSION=5.1 + fi + fi + if test "x$OPENJDK_TARGET_OS" = "xmacosx"; then + REQUIRED_OS_NAME=Darwin + REQUIRED_OS_VERSION=11.2 + fi + + + + + + # Also store the legacy naming of the cpu. + # Ie i586 and amd64 instead of x86 and x86_64 + OPENJDK_TARGET_CPU_LEGACY="$OPENJDK_TARGET_CPU" + if test "x$OPENJDK_TARGET_CPU" = xx86; then + OPENJDK_TARGET_CPU_LEGACY="i586" + elif test "x$OPENJDK_TARGET_OS" != xmacosx && test "x$OPENJDK_TARGET_CPU" = xx86_64; then + # On all platforms except MacOSX replace x86_64 with amd64. + OPENJDK_TARGET_CPU_LEGACY="amd64" + fi + + + # And the second legacy naming of the cpu. + # Ie i386 and amd64 instead of x86 and x86_64. + OPENJDK_TARGET_CPU_LEGACY_LIB="$OPENJDK_TARGET_CPU" + if test "x$OPENJDK_TARGET_CPU" = xx86; then + OPENJDK_TARGET_CPU_LEGACY_LIB="i386" + elif test "x$OPENJDK_TARGET_CPU" = xx86_64; then + OPENJDK_TARGET_CPU_LEGACY_LIB="amd64" + fi + + + # This is the name of the cpu (but using i386 and amd64 instead of + # x86 and x86_64, respectively), preceeded by a /, to be used when + # locating libraries. On macosx, it's empty, though. + OPENJDK_TARGET_CPU_LIBDIR="/$OPENJDK_TARGET_CPU_LEGACY_LIB" + if test "x$OPENJDK_TARGET_OS" = xmacosx; then + OPENJDK_TARGET_CPU_LIBDIR="" + fi + + + # OPENJDK_TARGET_CPU_ISADIR is normally empty. On 64-bit Solaris systems, it is set to + # /amd64 or /sparcv9. This string is appended to some library paths, like this: + # /usr/lib${OPENJDK_TARGET_CPU_ISADIR}/libexample.so + OPENJDK_TARGET_CPU_ISADIR="" + if test "x$OPENJDK_TARGET_OS" = xsolaris; then + if test "x$OPENJDK_TARGET_CPU" = xx86_64; then + OPENJDK_TARGET_CPU_ISADIR="/amd64" + elif test "x$OPENJDK_TARGET_CPU" = xsparcv9; then + OPENJDK_TARGET_CPU_ISADIR="/sparcv9" + fi + fi + + + # Setup OPENJDK_TARGET_CPU_OSARCH, which is used to set the os.arch Java system property + OPENJDK_TARGET_CPU_OSARCH="$OPENJDK_TARGET_CPU" + if test "x$OPENJDK_TARGET_OS" = xlinux && test "x$OPENJDK_TARGET_CPU" = xx86; then + # On linux only, we replace x86 with i386. + OPENJDK_TARGET_CPU_OSARCH="i386" + elif test "x$OPENJDK_TARGET_OS" != xmacosx && test "x$OPENJDK_TARGET_CPU" = xx86_64; then + # On all platforms except macosx, we replace x86_64 with amd64. + OPENJDK_TARGET_CPU_OSARCH="amd64" + fi + + + OPENJDK_TARGET_CPU_JLI="$OPENJDK_TARGET_CPU" + if test "x$OPENJDK_TARGET_CPU" = xx86; then + OPENJDK_TARGET_CPU_JLI="i386" + elif test "x$OPENJDK_TARGET_OS" != xmacosx && test "x$OPENJDK_TARGET_CPU" = xx86_64; then + # On all platforms except macosx, we replace x86_64 with amd64. + OPENJDK_TARGET_CPU_JLI="amd64" + fi + # Now setup the -D flags for building libjli. + OPENJDK_TARGET_CPU_JLI_CFLAGS="-DLIBARCHNAME='\"$OPENJDK_TARGET_CPU_JLI\"'" + if test "x$OPENJDK_TARGET_OS" = xsolaris; then + if test "x$OPENJDK_TARGET_CPU_ARCH" = xsparc; then + OPENJDK_TARGET_CPU_JLI_CFLAGS="$OPENJDK_TARGET_CPU_JLI_CFLAGS -DLIBARCH32NAME='\"sparc\"' -DLIBARCH64NAME='\"sparcv9\"'" + elif test "x$OPENJDK_TARGET_CPU_ARCH" = xx86; then + OPENJDK_TARGET_CPU_JLI_CFLAGS="$OPENJDK_TARGET_CPU_JLI_CFLAGS -DLIBARCH32NAME='\"i386\"' -DLIBARCH64NAME='\"amd64\"'" + fi + fi + + + # Setup OPENJDK_TARGET_OS_API_DIR, used in source paths. + if test "x$OPENJDK_TARGET_OS_API" = xposix; then + OPENJDK_TARGET_OS_API_DIR="solaris" + fi + if test "x$OPENJDK_TARGET_OS_API" = xwinapi; then + OPENJDK_TARGET_OS_API_DIR="windows" + fi + + + if test "x$OPENJDK_TARGET_CPU_BITS" = x64; then + A_LP64="LP64:=" + # -D_LP64=1 is only set on linux and mac. Setting on windows causes diff in + # unpack200.exe + if test "x$OPENJDK_TARGET_OS" = xlinux || test "x$OPENJDK_TARGET_OS" = xmacosx; then + ADD_LP64="-D_LP64=1" + fi + fi + LP64=$A_LP64 + + + if test "x$COMPILE_TYPE" = "xcross"; then + # FIXME: ... or should this include reduced builds..? + DEFINE_CROSS_COMPILE_ARCH="CROSS_COMPILE_ARCH:=$OPENJDK_TARGET_CPU_LEGACY" + else + DEFINE_CROSS_COMPILE_ARCH="" + fi + + + + +# Continue setting up basic stuff. Most remaining code require fundamental tools. + +# Locate the directory of this script. +SCRIPT="$0" + + if test "x$OPENJDK_BUILD_OS" != xwindows; then + # Follow a chain of symbolic links. Use readlink + # where it exists, else fall back to horribly + # complicated shell code. + if test "x$READLINK_TESTED" != yes; then + # On MacOSX there is a readlink tool with a different + # purpose than the GNU readlink tool. Check the found readlink. + ISGNU=`$READLINK --help 2>&1 | $GREP GNU` + if test "x$ISGNU" = x; then + # A readlink that we do not know how to use. + # Are there other non-GNU readlinks out there? + READLINK_TESTED=yes + READLINK= + fi + fi + + if test "x$READLINK" != x; then + SCRIPT=`$READLINK -f $SCRIPT` + else + STARTDIR=$PWD + COUNTER=0 + sym_link_dir=`$DIRNAME $SCRIPT` + sym_link_file=`$BASENAME $SCRIPT` + while test $COUNTER -lt 20; do + ISLINK=`$LS -l $sym_link_dir/$sym_link_file | $GREP '\->' | $SED -e 's/.*-> \(.*\)/\1/'` + if test "x$ISLINK" == x; then + # This is not a symbolic link! We are done! + break + fi + # The link might be relative! We have to use cd to travel safely. + cd $sym_link_dir + # ... and we must get the to the absolute path, not one using symbolic links. + cd `pwd -P` + cd `$DIRNAME $ISLINK` + sym_link_dir=`$THEPWDCMD` + sym_link_file=`$BASENAME $ISLINK` + let COUNTER=COUNTER+1 + done + cd $STARTDIR + SCRIPT=$sym_link_dir/$sym_link_file + fi + fi + +AUTOCONF_DIR=`cd \`$DIRNAME $SCRIPT\`; $THEPWDCMD` + +# Where is the source? It is located two levels above the configure script. +CURDIR="$PWD" +cd "$AUTOCONF_DIR/../.." +SRC_ROOT="`pwd`" + +if test "x$OPENJDK_TARGET_OS" = "xwindows"; then + PATH_SEP=";" + + SRC_ROOT_LENGTH=`$THEPWDCMD|$WC -m` + if test $SRC_ROOT_LENGTH -gt 100; then + as_fn_error $? "Your base path is too long. It is $SRC_ROOT_LENGTH characters long, but only 100 is supported" "$LINENO" 5 + fi + + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking cygwin release" >&5 +$as_echo_n "checking cygwin release... " >&6; } + CYGWIN_VERSION=`$UNAME -r` + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CYGWIN_VERSION" >&5 +$as_echo "$CYGWIN_VERSION" >&6; } + WINDOWS_ENV_VENDOR='cygwin' + WINDOWS_ENV_VERSION="$CYGWIN_VERSION" + + CYGWIN_VERSION_OK=`$ECHO $CYGWIN_VERSION | $GREP ^1.7.` + if test "x$CYGWIN_VERSION_OK" = x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: Your cygwin is too old. You are running $CYGWIN_VERSION, but at least cygwin 1.7 is required. Please upgrade." >&5 +$as_echo "$as_me: Your cygwin is too old. You are running $CYGWIN_VERSION, but at least cygwin 1.7 is required. Please upgrade." >&6;} + as_fn_error $? "Cannot continue" "$LINENO" 5 + fi + if test "x$CYGPATH" = x; then + as_fn_error $? "Something is wrong with your cygwin installation since I cannot find cygpath.exe in your path" "$LINENO" 5 + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: checking cygwin root directory as unix-style path" >&5 +$as_echo_n "checking cygwin root directory as unix-style path... " >&6; } + # The cmd output ends with Windows line endings (CR/LF), the grep command will strip that away + cygwin_winpath_root=`cd / ; cmd /c cd | grep ".*"` + # Force cygpath to report the proper root by including a trailing space, and then stripping it off again. + CYGWIN_ROOT_PATH=`$CYGPATH -u "$cygwin_winpath_root " | $CUT -f 1 -d " "` + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CYGWIN_ROOT_PATH" >&5 +$as_echo "$CYGWIN_ROOT_PATH" >&6; } + WINDOWS_ENV_ROOT_PATH="$CYGWIN_ROOT_PATH" + test_cygdrive_prefix=`$ECHO $CYGWIN_ROOT_PATH | $GREP ^/cygdrive/` + if test "x$test_cygdrive_prefix" = x; then + as_fn_error $? "Your cygdrive prefix is not /cygdrive. This is currently not supported. Change with mount -c." "$LINENO" 5 + fi + elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking msys release" >&5 +$as_echo_n "checking msys release... " >&6; } + MSYS_VERSION=`$UNAME -r` + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MSYS_VERSION" >&5 +$as_echo "$MSYS_VERSION" >&6; } + + WINDOWS_ENV_VENDOR='msys' + WINDOWS_ENV_VERSION="$MSYS_VERSION" + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking msys root directory as unix-style path" >&5 +$as_echo_n "checking msys root directory as unix-style path... " >&6; } + # The cmd output ends with Windows line endings (CR/LF), the grep command will strip that away + MSYS_ROOT_PATH=`cd / ; cmd /c cd | grep ".*"` + + windows_path="$MSYS_ROOT_PATH" + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then + unix_path=`$CYGPATH -u "$windows_path"` + MSYS_ROOT_PATH="$unix_path" + elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then + unix_path=`$ECHO "$windows_path" | $SED -e 's,^\\(.\\):,/\\1,g' -e 's,\\\\,/,g'` + MSYS_ROOT_PATH="$unix_path" + fi + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MSYS_ROOT_PATH" >&5 +$as_echo "$MSYS_ROOT_PATH" >&6; } + WINDOWS_ENV_ROOT_PATH="$MSYS_ROOT_PATH" + else + as_fn_error $? "Unknown Windows environment. Neither cygwin nor msys was detected." "$LINENO" 5 + fi + + # Test if windows or unix (cygwin/msys) find is first in path. + { $as_echo "$as_me:${as_lineno-$LINENO}: checking what kind of 'find' is first on the PATH" >&5 +$as_echo_n "checking what kind of 'find' is first on the PATH... " >&6; } + FIND_BINARY_OUTPUT=`find --version 2>&1` + if test "x`echo $FIND_BINARY_OUTPUT | $GREP GNU`" != x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: unix style" >&5 +$as_echo "unix style" >&6; } + elif test "x`echo $FIND_BINARY_OUTPUT | $GREP FIND`" != x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: Windows" >&5 +$as_echo "Windows" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: Your path contains Windows tools (C:\Windows\system32) before your unix (cygwin or msys) tools." >&5 +$as_echo "$as_me: Your path contains Windows tools (C:\Windows\system32) before your unix (cygwin or msys) tools." >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: This will not work. Please correct and make sure /usr/bin (or similar) is first in path." >&5 +$as_echo "$as_me: This will not work. Please correct and make sure /usr/bin (or similar) is first in path." >&6;} + as_fn_error $? "Cannot continue" "$LINENO" 5 + else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: unknown" >&5 +$as_echo "unknown" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: It seems that your find utility is non-standard." >&5 +$as_echo "$as_me: WARNING: It seems that your find utility is non-standard." >&2;} fi -done - done -IFS=$as_save_IFS -fi -fi -BDEPS_FTP=$ac_cv_prog_BDEPS_FTP -if test -n "$BDEPS_FTP"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $BDEPS_FTP" >&5 -$as_echo "$BDEPS_FTP" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + PATH_SEP=":" fi - test -n "$BDEPS_FTP" && break -done + +cd "$CURDIR" + + + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then + + # Input might be given as Windows format, start by converting to + # unix format. + path="$SRC_ROOT" + new_path=`$CYGPATH -u "$path"` + + # Cygwin tries to hide some aspects of the Windows file system, such that binaries are + # named .exe but called without that suffix. Therefore, "foo" and "foo.exe" are considered + # the same file, most of the time (as in "test -f"). But not when running cygpath -s, then + # "foo.exe" is OK but "foo" is an error. + # + # This test is therefore slightly more accurate than "test -f" to check for file precense. + # It is also a way to make sure we got the proper file name for the real test later on. + test_shortpath=`$CYGPATH -s -m "$new_path" 2> /dev/null` + if test "x$test_shortpath" = x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: The path of SRC_ROOT, which resolves as \"$path\", is invalid." >&5 +$as_echo "$as_me: The path of SRC_ROOT, which resolves as \"$path\", is invalid." >&6;} + as_fn_error $? "Cannot locate the the path of SRC_ROOT" "$LINENO" 5 + fi + + # Call helper function which possibly converts this using DOS-style short mode. + # If so, the updated path is stored in $new_path. + + input_path="$new_path" + # Check if we need to convert this using DOS-style short mode. If the path + # contains just simple characters, use it. Otherwise (spaces, weird characters), + # take no chances and rewrite it. + # Note: m4 eats our [], so we need to use [ and ] instead. + has_forbidden_chars=`$ECHO "$input_path" | $GREP [^-._/a-zA-Z0-9]` + if test "x$has_forbidden_chars" != x; then + # Now convert it to mixed DOS-style, short mode (no spaces, and / instead of \) + shortmode_path=`$CYGPATH -s -m -a "$input_path"` + path_after_shortmode=`$CYGPATH -u "$shortmode_path"` + if test "x$path_after_shortmode" != "x$input_to_shortpath"; then + # Going to short mode and back again did indeed matter. Since short mode is + # case insensitive, let's make it lowercase to improve readability. + shortmode_path=`$ECHO "$shortmode_path" | $TR 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` + # Now convert it back to Unix-stile (cygpath) + input_path=`$CYGPATH -u "$shortmode_path"` + new_path="$input_path" + fi + fi + + test_cygdrive_prefix=`$ECHO $input_path | $GREP ^/cygdrive/` + if test "x$test_cygdrive_prefix" = x; then + # As a simple fix, exclude /usr/bin since it's not a real path. + if test "x`$ECHO $new_path | $GREP ^/usr/bin/`" = x; then + # The path is in a Cygwin special directory (e.g. /home). We need this converted to + # a path prefixed by /cygdrive for fixpath to work. + new_path="$CYGWIN_ROOT_PATH$input_path" + fi + fi + + + if test "x$path" != "x$new_path"; then + SRC_ROOT="$new_path" + { $as_echo "$as_me:${as_lineno-$LINENO}: Rewriting SRC_ROOT to \"$new_path\"" >&5 +$as_echo "$as_me: Rewriting SRC_ROOT to \"$new_path\"" >&6;} + fi + + elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then + + path="$SRC_ROOT" + has_colon=`$ECHO $path | $GREP ^.:` + new_path="$path" + if test "x$has_colon" = x; then + # Not in mixed or Windows style, start by that. + new_path=`cmd //c echo $path` + fi + + + input_path="$new_path" + # Check if we need to convert this using DOS-style short mode. If the path + # contains just simple characters, use it. Otherwise (spaces, weird characters), + # take no chances and rewrite it. + # Note: m4 eats our [], so we need to use [ and ] instead. + has_forbidden_chars=`$ECHO "$input_path" | $GREP [^-_/:a-zA-Z0-9]` + if test "x$has_forbidden_chars" != x; then + # Now convert it to mixed DOS-style, short mode (no spaces, and / instead of \) + new_path=`cmd /c "for %A in (\"$input_path\") do @echo %~sA"|$TR \\\\\\\\ / | $TR 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` + fi + + + windows_path="$new_path" + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then + unix_path=`$CYGPATH -u "$windows_path"` + new_path="$unix_path" + elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then + unix_path=`$ECHO "$windows_path" | $SED -e 's,^\\(.\\):,/\\1,g' -e 's,\\\\,/,g'` + new_path="$unix_path" + fi + + if test "x$path" != "x$new_path"; then + SRC_ROOT="$new_path" + { $as_echo "$as_me:${as_lineno-$LINENO}: Rewriting SRC_ROOT to \"$new_path\"" >&5 +$as_echo "$as_me: Rewriting SRC_ROOT to \"$new_path\"" >&6;} + fi + + # Save the first 10 bytes of this path to the storage, so fixpath can work. + all_fixpath_prefixes=("${all_fixpath_prefixes[@]}" "${new_path:0:10}") + + else + # We're on a posix platform. Hooray! :) + path="$SRC_ROOT" + + if test ! -f "$path" && test ! -d "$path"; then + as_fn_error $? "The path of SRC_ROOT, which resolves as \"$path\", is not found." "$LINENO" 5 + fi + + has_space=`$ECHO "$path" | $GREP " "` + if test "x$has_space" != x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: The path of SRC_ROOT, which resolves as \"$path\", is invalid." >&5 +$as_echo "$as_me: The path of SRC_ROOT, which resolves as \"$path\", is invalid." >&6;} + as_fn_error $? "Spaces are not allowed in this path." "$LINENO" 5 + fi + fi + + + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then + + # Input might be given as Windows format, start by converting to + # unix format. + path="$CURDIR" + new_path=`$CYGPATH -u "$path"` + + # Cygwin tries to hide some aspects of the Windows file system, such that binaries are + # named .exe but called without that suffix. Therefore, "foo" and "foo.exe" are considered + # the same file, most of the time (as in "test -f"). But not when running cygpath -s, then + # "foo.exe" is OK but "foo" is an error. + # + # This test is therefore slightly more accurate than "test -f" to check for file precense. + # It is also a way to make sure we got the proper file name for the real test later on. + test_shortpath=`$CYGPATH -s -m "$new_path" 2> /dev/null` + if test "x$test_shortpath" = x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: The path of CURDIR, which resolves as \"$path\", is invalid." >&5 +$as_echo "$as_me: The path of CURDIR, which resolves as \"$path\", is invalid." >&6;} + as_fn_error $? "Cannot locate the the path of CURDIR" "$LINENO" 5 + fi + + # Call helper function which possibly converts this using DOS-style short mode. + # If so, the updated path is stored in $new_path. + + input_path="$new_path" + # Check if we need to convert this using DOS-style short mode. If the path + # contains just simple characters, use it. Otherwise (spaces, weird characters), + # take no chances and rewrite it. + # Note: m4 eats our [], so we need to use [ and ] instead. + has_forbidden_chars=`$ECHO "$input_path" | $GREP [^-._/a-zA-Z0-9]` + if test "x$has_forbidden_chars" != x; then + # Now convert it to mixed DOS-style, short mode (no spaces, and / instead of \) + shortmode_path=`$CYGPATH -s -m -a "$input_path"` + path_after_shortmode=`$CYGPATH -u "$shortmode_path"` + if test "x$path_after_shortmode" != "x$input_to_shortpath"; then + # Going to short mode and back again did indeed matter. Since short mode is + # case insensitive, let's make it lowercase to improve readability. + shortmode_path=`$ECHO "$shortmode_path" | $TR 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` + # Now convert it back to Unix-stile (cygpath) + input_path=`$CYGPATH -u "$shortmode_path"` + new_path="$input_path" + fi + fi + + test_cygdrive_prefix=`$ECHO $input_path | $GREP ^/cygdrive/` + if test "x$test_cygdrive_prefix" = x; then + # As a simple fix, exclude /usr/bin since it's not a real path. + if test "x`$ECHO $new_path | $GREP ^/usr/bin/`" = x; then + # The path is in a Cygwin special directory (e.g. /home). We need this converted to + # a path prefixed by /cygdrive for fixpath to work. + new_path="$CYGWIN_ROOT_PATH$input_path" + fi + fi + + + if test "x$path" != "x$new_path"; then + CURDIR="$new_path" + { $as_echo "$as_me:${as_lineno-$LINENO}: Rewriting CURDIR to \"$new_path\"" >&5 +$as_echo "$as_me: Rewriting CURDIR to \"$new_path\"" >&6;} + fi + + elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then + + path="$CURDIR" + has_colon=`$ECHO $path | $GREP ^.:` + new_path="$path" + if test "x$has_colon" = x; then + # Not in mixed or Windows style, start by that. + new_path=`cmd //c echo $path` + fi + + + input_path="$new_path" + # Check if we need to convert this using DOS-style short mode. If the path + # contains just simple characters, use it. Otherwise (spaces, weird characters), + # take no chances and rewrite it. + # Note: m4 eats our [], so we need to use [ and ] instead. + has_forbidden_chars=`$ECHO "$input_path" | $GREP [^-_/:a-zA-Z0-9]` + if test "x$has_forbidden_chars" != x; then + # Now convert it to mixed DOS-style, short mode (no spaces, and / instead of \) + new_path=`cmd /c "for %A in (\"$input_path\") do @echo %~sA"|$TR \\\\\\\\ / | $TR 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` + fi + + + windows_path="$new_path" + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then + unix_path=`$CYGPATH -u "$windows_path"` + new_path="$unix_path" + elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then + unix_path=`$ECHO "$windows_path" | $SED -e 's,^\\(.\\):,/\\1,g' -e 's,\\\\,/,g'` + new_path="$unix_path" + fi + + if test "x$path" != "x$new_path"; then + CURDIR="$new_path" + { $as_echo "$as_me:${as_lineno-$LINENO}: Rewriting CURDIR to \"$new_path\"" >&5 +$as_echo "$as_me: Rewriting CURDIR to \"$new_path\"" >&6;} + fi + + # Save the first 10 bytes of this path to the storage, so fixpath can work. + all_fixpath_prefixes=("${all_fixpath_prefixes[@]}" "${new_path:0:10}") + + else + # We're on a posix platform. Hooray! :) + path="$CURDIR" + + if test ! -f "$path" && test ! -d "$path"; then + as_fn_error $? "The path of CURDIR, which resolves as \"$path\", is not found." "$LINENO" 5 + fi + + has_space=`$ECHO "$path" | $GREP " "` + if test "x$has_space" != x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: The path of CURDIR, which resolves as \"$path\", is invalid." >&5 +$as_echo "$as_me: The path of CURDIR, which resolves as \"$path\", is invalid." >&6;} + as_fn_error $? "Spaces are not allowed in this path." "$LINENO" 5 + fi + fi + + +if test "x$OPENJDK_BUILD_OS" = "xsolaris"; then + # Add extra search paths on solaris for utilities like ar and as etc... + PATH="$PATH:/usr/ccs/bin:/usr/sfw/bin:/opt/csw/bin" +fi + +# You can force the sys-root if the sys-root encoded into the cross compiler tools +# is not correct. + +# Check whether --with-sys-root was given. +if test "${with_sys_root+set}" = set; then : + withval=$with_sys_root; +fi + + +if test "x$with_sys_root" != x; then + SYS_ROOT=$with_sys_root +else + SYS_ROOT=/ +fi -############################################################################### -# -# Determine OpenJDK variants, options and version numbers. -# -############################################################################### +# Check whether --with-tools-dir was given. +if test "${with_tools_dir+set}" = set; then : + withval=$with_tools_dir; TOOLS_DIR=$with_tools_dir +fi -# We need build & target for this. + + +# Check whether --with-devkit was given. +if test "${with_devkit+set}" = set; then : + withval=$with_devkit; + if test "x$with_sys_root" != x; then + as_fn_error $? "Cannot specify both --with-devkit and --with-sys-root at the same time" "$LINENO" 5 + fi + if test "x$with_tools_dir" != x; then + as_fn_error $? "Cannot specify both --with-devkit and --with-tools-dir at the same time" "$LINENO" 5 + fi + TOOLS_DIR=$with_devkit/bin + SYS_ROOT=$with_devkit/$host_alias/libc + +fi + + + + +# Setup default logging of stdout and stderr to build.log in the output root. +BUILD_LOG='$(OUTPUT_ROOT)/build.log' +BUILD_LOG_PREVIOUS='$(OUTPUT_ROOT)/build.log.old' +BUILD_LOG_WRAPPER='$(BASH) $(SRC_ROOT)/common/bin/logger.sh $(BUILD_LOG)' + + + + + +# These are needed to be able to create a configuration name (and thus the output directory) ############################################################################### # @@ -7969,8 +7378,8 @@ $as_echo "$JDK_VARIANT" >&6; } # ie normal interpreter and C1, only the serial GC, kernel jvmti etc # zero: no machine code interpreter, no compiler # zeroshark: zero interpreter and shark/llvm compiler backend -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking which variants of the JVM that should be built" >&5 -$as_echo_n "checking which variants of the JVM that should be built... " >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking which variants of the JVM to build" >&5 +$as_echo_n "checking which variants of the JVM to build... " >&6; } # Check whether --with-jvm-variants was given. if test "${with_jvm_variants+set}" = set; then : @@ -8151,6 +7560,2761 @@ fi +# With basic setup done, call the custom early hook. + + +# To properly create a configuration name, we need to have the OpenJDK target +# and options (variants and debug level) parsed. + + + +# Check whether --with-conf-name was given. +if test "${with_conf_name+set}" = set; then : + withval=$with_conf_name; CONF_NAME=${with_conf_name} +fi + + +# Test from where we are running configure, in or outside of src root. +if test "x$CURDIR" = "x$SRC_ROOT" || test "x$CURDIR" = "x$SRC_ROOT/common" || test "x$CURDIR" = "x$SRC_ROOT/common/autoconf" || test "x$CURDIR" = "x$SRC_ROOT/common/makefiles" ; then + # We are running configure from the src root. + # Create a default ./build/target-variant-debuglevel output root. + if test "x${CONF_NAME}" = x; then + CONF_NAME="${OPENJDK_TARGET_OS}-${OPENJDK_TARGET_CPU}-${JDK_VARIANT}-${ANDED_JVM_VARIANTS}-${DEBUG_LEVEL}" + fi + OUTPUT_ROOT="$SRC_ROOT/build/${CONF_NAME}" + $MKDIR -p "$OUTPUT_ROOT" + if test ! -d "$OUTPUT_ROOT"; then + as_fn_error $? "Could not create build directory $OUTPUT_ROOT" "$LINENO" 5 + fi +else + # We are running configure from outside of the src dir. + # Then use the current directory as output dir! + # If configuration is situated in normal build directory, just use the build + # directory name as configuration name, otherwise use the complete path. + if test "x${CONF_NAME}" = x; then + CONF_NAME=`$ECHO $CURDIR | $SED -e "s!^${SRC_ROOT}/build/!!"` + fi + OUTPUT_ROOT="$CURDIR" + + # WARNING: This might be a bad thing to do. You need to be sure you want to + # have a configuration in this directory. Do some sanity checks! + + if test ! -e "$OUTPUT_ROOT/spec.gmk"; then + # If we have a spec.gmk, we have run here before and we are OK. Otherwise, check for + # other files + files_present=`$LS $OUTPUT_ROOT` + # Configure has already touched config.log and confdefs.h in the current dir when this check + # is performed. + filtered_files=`$ECHO "$files_present" | $SED -e 's/config.log//g' -e 's/confdefs.h//g' -e 's/ //g' \ + | $TR -d '\n'` + if test "x$filtered_files" != x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: Current directory is $CURDIR." >&5 +$as_echo "$as_me: Current directory is $CURDIR." >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: Since this is not the source root, configure will output the configuration here" >&5 +$as_echo "$as_me: Since this is not the source root, configure will output the configuration here" >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: (as opposed to creating a configuration in /build/)." >&5 +$as_echo "$as_me: (as opposed to creating a configuration in /build/)." >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: However, this directory is not empty. This is not allowed, since it could" >&5 +$as_echo "$as_me: However, this directory is not empty. This is not allowed, since it could" >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: seriously mess up just about everything." >&5 +$as_echo "$as_me: seriously mess up just about everything." >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: Try 'cd $SRC_ROOT' and restart configure" >&5 +$as_echo "$as_me: Try 'cd $SRC_ROOT' and restart configure" >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: (or create a new empty directory and cd to it)." >&5 +$as_echo "$as_me: (or create a new empty directory and cd to it)." >&6;} + as_fn_error $? "Will not continue creating configuration in $CURDIR" "$LINENO" 5 + fi + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking what configuration name to use" >&5 +$as_echo_n "checking what configuration name to use... " >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $CONF_NAME" >&5 +$as_echo "$CONF_NAME" >&6; } + + + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then + + # Input might be given as Windows format, start by converting to + # unix format. + path="$OUTPUT_ROOT" + new_path=`$CYGPATH -u "$path"` + + # Cygwin tries to hide some aspects of the Windows file system, such that binaries are + # named .exe but called without that suffix. Therefore, "foo" and "foo.exe" are considered + # the same file, most of the time (as in "test -f"). But not when running cygpath -s, then + # "foo.exe" is OK but "foo" is an error. + # + # This test is therefore slightly more accurate than "test -f" to check for file precense. + # It is also a way to make sure we got the proper file name for the real test later on. + test_shortpath=`$CYGPATH -s -m "$new_path" 2> /dev/null` + if test "x$test_shortpath" = x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: The path of OUTPUT_ROOT, which resolves as \"$path\", is invalid." >&5 +$as_echo "$as_me: The path of OUTPUT_ROOT, which resolves as \"$path\", is invalid." >&6;} + as_fn_error $? "Cannot locate the the path of OUTPUT_ROOT" "$LINENO" 5 + fi + + # Call helper function which possibly converts this using DOS-style short mode. + # If so, the updated path is stored in $new_path. + + input_path="$new_path" + # Check if we need to convert this using DOS-style short mode. If the path + # contains just simple characters, use it. Otherwise (spaces, weird characters), + # take no chances and rewrite it. + # Note: m4 eats our [], so we need to use [ and ] instead. + has_forbidden_chars=`$ECHO "$input_path" | $GREP [^-._/a-zA-Z0-9]` + if test "x$has_forbidden_chars" != x; then + # Now convert it to mixed DOS-style, short mode (no spaces, and / instead of \) + shortmode_path=`$CYGPATH -s -m -a "$input_path"` + path_after_shortmode=`$CYGPATH -u "$shortmode_path"` + if test "x$path_after_shortmode" != "x$input_to_shortpath"; then + # Going to short mode and back again did indeed matter. Since short mode is + # case insensitive, let's make it lowercase to improve readability. + shortmode_path=`$ECHO "$shortmode_path" | $TR 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` + # Now convert it back to Unix-stile (cygpath) + input_path=`$CYGPATH -u "$shortmode_path"` + new_path="$input_path" + fi + fi + + test_cygdrive_prefix=`$ECHO $input_path | $GREP ^/cygdrive/` + if test "x$test_cygdrive_prefix" = x; then + # As a simple fix, exclude /usr/bin since it's not a real path. + if test "x`$ECHO $new_path | $GREP ^/usr/bin/`" = x; then + # The path is in a Cygwin special directory (e.g. /home). We need this converted to + # a path prefixed by /cygdrive for fixpath to work. + new_path="$CYGWIN_ROOT_PATH$input_path" + fi + fi + + + if test "x$path" != "x$new_path"; then + OUTPUT_ROOT="$new_path" + { $as_echo "$as_me:${as_lineno-$LINENO}: Rewriting OUTPUT_ROOT to \"$new_path\"" >&5 +$as_echo "$as_me: Rewriting OUTPUT_ROOT to \"$new_path\"" >&6;} + fi + + elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then + + path="$OUTPUT_ROOT" + has_colon=`$ECHO $path | $GREP ^.:` + new_path="$path" + if test "x$has_colon" = x; then + # Not in mixed or Windows style, start by that. + new_path=`cmd //c echo $path` + fi + + + input_path="$new_path" + # Check if we need to convert this using DOS-style short mode. If the path + # contains just simple characters, use it. Otherwise (spaces, weird characters), + # take no chances and rewrite it. + # Note: m4 eats our [], so we need to use [ and ] instead. + has_forbidden_chars=`$ECHO "$input_path" | $GREP [^-_/:a-zA-Z0-9]` + if test "x$has_forbidden_chars" != x; then + # Now convert it to mixed DOS-style, short mode (no spaces, and / instead of \) + new_path=`cmd /c "for %A in (\"$input_path\") do @echo %~sA"|$TR \\\\\\\\ / | $TR 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` + fi + + + windows_path="$new_path" + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then + unix_path=`$CYGPATH -u "$windows_path"` + new_path="$unix_path" + elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then + unix_path=`$ECHO "$windows_path" | $SED -e 's,^\\(.\\):,/\\1,g' -e 's,\\\\,/,g'` + new_path="$unix_path" + fi + + if test "x$path" != "x$new_path"; then + OUTPUT_ROOT="$new_path" + { $as_echo "$as_me:${as_lineno-$LINENO}: Rewriting OUTPUT_ROOT to \"$new_path\"" >&5 +$as_echo "$as_me: Rewriting OUTPUT_ROOT to \"$new_path\"" >&6;} + fi + + # Save the first 10 bytes of this path to the storage, so fixpath can work. + all_fixpath_prefixes=("${all_fixpath_prefixes[@]}" "${new_path:0:10}") + + else + # We're on a posix platform. Hooray! :) + path="$OUTPUT_ROOT" + + if test ! -f "$path" && test ! -d "$path"; then + as_fn_error $? "The path of OUTPUT_ROOT, which resolves as \"$path\", is not found." "$LINENO" 5 + fi + + has_space=`$ECHO "$path" | $GREP " "` + if test "x$has_space" != x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: The path of OUTPUT_ROOT, which resolves as \"$path\", is invalid." >&5 +$as_echo "$as_me: The path of OUTPUT_ROOT, which resolves as \"$path\", is invalid." >&6;} + as_fn_error $? "Spaces are not allowed in this path." "$LINENO" 5 + fi + fi + + +SPEC=$OUTPUT_ROOT/spec.gmk + +CONF_NAME=$CONF_NAME + +OUTPUT_ROOT=$OUTPUT_ROOT + + +# Most of the probed defines are put into config.h +ac_config_headers="$ac_config_headers $OUTPUT_ROOT/config.h:$AUTOCONF_DIR/config.h.in" + +# The spec.gmk file contains all variables for the make system. +ac_config_files="$ac_config_files $OUTPUT_ROOT/spec.gmk:$AUTOCONF_DIR/spec.gmk.in" + +# The hotspot-spec.gmk file contains legacy variables for the hotspot make system. +ac_config_files="$ac_config_files $OUTPUT_ROOT/hotspot-spec.gmk:$AUTOCONF_DIR/hotspot-spec.gmk.in" + +# The bootcycle-spec.gmk file contains support for boot cycle builds. +ac_config_files="$ac_config_files $OUTPUT_ROOT/bootcycle-spec.gmk:$AUTOCONF_DIR/bootcycle-spec.gmk.in" + +# The compare.sh is used to compare the build output to other builds. +ac_config_files="$ac_config_files $OUTPUT_ROOT/compare.sh:$AUTOCONF_DIR/compare.sh.in" + +# Spec.sh is currently used by compare-objects.sh +ac_config_files="$ac_config_files $OUTPUT_ROOT/spec.sh:$AUTOCONF_DIR/spec.sh.in" + +# The generated Makefile knows where the spec.gmk is and where the source is. +# You can run make from the OUTPUT_ROOT, or from the top-level Makefile +# which will look for generated configurations +ac_config_files="$ac_config_files $OUTPUT_ROOT/Makefile:$AUTOCONF_DIR/Makefile.in" + + +# Save the arguments given to us +echo "$CONFIGURE_COMMAND_LINE" > $OUTPUT_ROOT/configure-arguments + + +# Must be done before we can call HELP_MSG_MISSING_DEPENDENCY. + + for ac_prog in apt-get yum port pkgutil pkgadd +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_PKGHANDLER+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$PKGHANDLER"; then + ac_cv_prog_PKGHANDLER="$PKGHANDLER" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_PKGHANDLER="$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +PKGHANDLER=$ac_cv_prog_PKGHANDLER +if test -n "$PKGHANDLER"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PKGHANDLER" >&5 +$as_echo "$PKGHANDLER" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$PKGHANDLER" && break +done + + + +# Setup tools that requires more complex handling, or that is not needed by the configure script. + + + # We need to find a recent version of GNU make. Especially on Solaris, this can be tricky. + if test "x$MAKE" != x; then + # User has supplied a make, test it. + if test ! -f "$MAKE"; then + as_fn_error $? "The specified make (by MAKE=$MAKE) is not found." "$LINENO" 5 + fi + + MAKE_CANDIDATE=""$MAKE"" + DESCRIPTION="user supplied MAKE=$MAKE" + if test "x$MAKE_CANDIDATE" != x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: Testing potential make at $MAKE_CANDIDATE, found using $DESCRIPTION" >&5 +$as_echo "$as_me: Testing potential make at $MAKE_CANDIDATE, found using $DESCRIPTION" >&6;} + MAKE_VERSION_STRING=`$MAKE_CANDIDATE --version | $HEAD -n 1` + IS_GNU_MAKE=`$ECHO $MAKE_VERSION_STRING | $GREP 'GNU Make'` + if test "x$IS_GNU_MAKE" = x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: Found potential make at $MAKE_CANDIDATE, however, this is not GNU Make. Ignoring." >&5 +$as_echo "$as_me: Found potential make at $MAKE_CANDIDATE, however, this is not GNU Make. Ignoring." >&6;} + else + IS_MODERN_MAKE=`$ECHO $MAKE_VERSION_STRING | $GREP '3.8[12346789]'` + if test "x$IS_MODERN_MAKE" = x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: Found GNU make at $MAKE_CANDIDATE, however this is not version 3.81 or later. (it is: $MAKE_VERSION_STRING). Ignoring." >&5 +$as_echo "$as_me: Found GNU make at $MAKE_CANDIDATE, however this is not version 3.81 or later. (it is: $MAKE_VERSION_STRING). Ignoring." >&6;} + else + if test "x$OPENJDK_BUILD_OS" = "xwindows"; then + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then + MAKE_EXPECTED_ENV='cygwin' + elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then + MAKE_EXPECTED_ENV='msys' + else + as_fn_error $? "Unknown Windows environment" "$LINENO" 5 + fi + MAKE_BUILT_FOR=`$MAKE_CANDIDATE --version | $GREP -i 'built for'` + IS_MAKE_CORRECT_ENV=`$ECHO $MAKE_BUILT_FOR | $GREP $MAKE_EXPECTED_ENV` + else + # Not relevant for non-Windows + IS_MAKE_CORRECT_ENV=true + fi + if test "x$IS_MAKE_CORRECT_ENV" = x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: Found GNU make version $MAKE_VERSION_STRING at $MAKE_CANDIDATE, but it is not for $MAKE_EXPECTED_ENV (it says: $MAKE_BUILT_FOR). Ignoring." >&5 +$as_echo "$as_me: Found GNU make version $MAKE_VERSION_STRING at $MAKE_CANDIDATE, but it is not for $MAKE_EXPECTED_ENV (it says: $MAKE_BUILT_FOR). Ignoring." >&6;} + else + FOUND_MAKE=$MAKE_CANDIDATE + + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then + + # First separate the path from the arguments. This will split at the first + # space. + complete="$FOUND_MAKE" + path="${complete%% *}" + tmp="$complete EOL" + arguments="${tmp#* }" + + # Input might be given as Windows format, start by converting to + # unix format. + new_path=`$CYGPATH -u "$path"` + + # Now try to locate executable using which + new_path=`$WHICH "$new_path" 2> /dev/null` + # bat and cmd files are not always considered executable in cygwin causing which + # to not find them + if test "x$new_path" = x \ + && test "x`$ECHO \"$path\" | $GREP -e \"\\.bat$\" -e \"\\.cmd$\"`" != x \ + && test "x`$LS \"$path\" 2>/dev/null`" != x; then + new_path=`$CYGPATH -u "$path"` + fi + if test "x$new_path" = x; then + # Oops. Which didn't find the executable. + # The splitting of arguments from the executable at a space might have been incorrect, + # since paths with space are more likely in Windows. Give it another try with the whole + # argument. + path="$complete" + arguments="EOL" + new_path=`$CYGPATH -u "$path"` + new_path=`$WHICH "$new_path" 2> /dev/null` + # bat and cmd files are not always considered executable in cygwin causing which + # to not find them + if test "x$new_path" = x \ + && test "x`$ECHO \"$path\" | $GREP -e \"\\.bat$\" -e \"\\.cmd$\"`" != x \ + && test "x`$LS \"$path\" 2>/dev/null`" != x; then + new_path=`$CYGPATH -u "$path"` + fi + if test "x$new_path" = x; then + # It's still not found. Now this is an unrecoverable error. + { $as_echo "$as_me:${as_lineno-$LINENO}: The path of FOUND_MAKE, which resolves as \"$complete\", is not found." >&5 +$as_echo "$as_me: The path of FOUND_MAKE, which resolves as \"$complete\", is not found." >&6;} + has_space=`$ECHO "$complete" | $GREP " "` + if test "x$has_space" != x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: You might be mixing spaces in the path and extra arguments, which is not allowed." >&5 +$as_echo "$as_me: You might be mixing spaces in the path and extra arguments, which is not allowed." >&6;} + fi + as_fn_error $? "Cannot locate the the path of FOUND_MAKE" "$LINENO" 5 + fi + fi + + # Cygwin tries to hide some aspects of the Windows file system, such that binaries are + # named .exe but called without that suffix. Therefore, "foo" and "foo.exe" are considered + # the same file, most of the time (as in "test -f"). But not when running cygpath -s, then + # "foo.exe" is OK but "foo" is an error. + # + # This test is therefore slightly more accurate than "test -f" to check for file precense. + # It is also a way to make sure we got the proper file name for the real test later on. + test_shortpath=`$CYGPATH -s -m "$new_path" 2> /dev/null` + if test "x$test_shortpath" = x; then + # Short path failed, file does not exist as specified. + # Try adding .exe or .cmd + if test -f "${new_path}.exe"; then + input_to_shortpath="${new_path}.exe" + elif test -f "${new_path}.cmd"; then + input_to_shortpath="${new_path}.cmd" + else + { $as_echo "$as_me:${as_lineno-$LINENO}: The path of FOUND_MAKE, which resolves as \"$new_path\", is invalid." >&5 +$as_echo "$as_me: The path of FOUND_MAKE, which resolves as \"$new_path\", is invalid." >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: Neither \"$new_path\" nor \"$new_path.exe/cmd\" can be found" >&5 +$as_echo "$as_me: Neither \"$new_path\" nor \"$new_path.exe/cmd\" can be found" >&6;} + as_fn_error $? "Cannot locate the the path of FOUND_MAKE" "$LINENO" 5 + fi + else + input_to_shortpath="$new_path" + fi + + # Call helper function which possibly converts this using DOS-style short mode. + # If so, the updated path is stored in $new_path. + new_path="$input_to_shortpath" + + input_path="$input_to_shortpath" + # Check if we need to convert this using DOS-style short mode. If the path + # contains just simple characters, use it. Otherwise (spaces, weird characters), + # take no chances and rewrite it. + # Note: m4 eats our [], so we need to use [ and ] instead. + has_forbidden_chars=`$ECHO "$input_path" | $GREP [^-._/a-zA-Z0-9]` + if test "x$has_forbidden_chars" != x; then + # Now convert it to mixed DOS-style, short mode (no spaces, and / instead of \) + shortmode_path=`$CYGPATH -s -m -a "$input_path"` + path_after_shortmode=`$CYGPATH -u "$shortmode_path"` + if test "x$path_after_shortmode" != "x$input_to_shortpath"; then + # Going to short mode and back again did indeed matter. Since short mode is + # case insensitive, let's make it lowercase to improve readability. + shortmode_path=`$ECHO "$shortmode_path" | $TR 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` + # Now convert it back to Unix-stile (cygpath) + input_path=`$CYGPATH -u "$shortmode_path"` + new_path="$input_path" + fi + fi + + test_cygdrive_prefix=`$ECHO $input_path | $GREP ^/cygdrive/` + if test "x$test_cygdrive_prefix" = x; then + # As a simple fix, exclude /usr/bin since it's not a real path. + if test "x`$ECHO $input_to_shortpath | $GREP ^/usr/bin/`" = x; then + # The path is in a Cygwin special directory (e.g. /home). We need this converted to + # a path prefixed by /cygdrive for fixpath to work. + new_path="$CYGWIN_ROOT_PATH$input_path" + fi + fi + + # remove trailing .exe if any + new_path="${new_path/%.exe/}" + + elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then + + # First separate the path from the arguments. This will split at the first + # space. + complete="$FOUND_MAKE" + path="${complete%% *}" + tmp="$complete EOL" + arguments="${tmp#* }" + + # Input might be given as Windows format, start by converting to + # unix format. + new_path="$path" + + windows_path="$new_path" + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then + unix_path=`$CYGPATH -u "$windows_path"` + new_path="$unix_path" + elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then + unix_path=`$ECHO "$windows_path" | $SED -e 's,^\\(.\\):,/\\1,g' -e 's,\\\\,/,g'` + new_path="$unix_path" + fi + + + # Now try to locate executable using which + new_path=`$WHICH "$new_path" 2> /dev/null` + + if test "x$new_path" = x; then + # Oops. Which didn't find the executable. + # The splitting of arguments from the executable at a space might have been incorrect, + # since paths with space are more likely in Windows. Give it another try with the whole + # argument. + path="$complete" + arguments="EOL" + new_path="$path" + + windows_path="$new_path" + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then + unix_path=`$CYGPATH -u "$windows_path"` + new_path="$unix_path" + elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then + unix_path=`$ECHO "$windows_path" | $SED -e 's,^\\(.\\):,/\\1,g' -e 's,\\\\,/,g'` + new_path="$unix_path" + fi + + + new_path=`$WHICH "$new_path" 2> /dev/null` + + if test "x$new_path" = x; then + # It's still not found. Now this is an unrecoverable error. + { $as_echo "$as_me:${as_lineno-$LINENO}: The path of FOUND_MAKE, which resolves as \"$complete\", is not found." >&5 +$as_echo "$as_me: The path of FOUND_MAKE, which resolves as \"$complete\", is not found." >&6;} + has_space=`$ECHO "$complete" | $GREP " "` + if test "x$has_space" != x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: You might be mixing spaces in the path and extra arguments, which is not allowed." >&5 +$as_echo "$as_me: You might be mixing spaces in the path and extra arguments, which is not allowed." >&6;} + fi + as_fn_error $? "Cannot locate the the path of FOUND_MAKE" "$LINENO" 5 + fi + fi + + # Now new_path has a complete unix path to the binary + if test "x`$ECHO $new_path | $GREP ^/bin/`" != x; then + # Keep paths in /bin as-is, but remove trailing .exe if any + new_path="${new_path/%.exe/}" + # Do not save /bin paths to all_fixpath_prefixes! + else + # Not in mixed or Windows style, start by that. + new_path=`cmd //c echo $new_path` + + input_path="$new_path" + # Check if we need to convert this using DOS-style short mode. If the path + # contains just simple characters, use it. Otherwise (spaces, weird characters), + # take no chances and rewrite it. + # Note: m4 eats our [], so we need to use [ and ] instead. + has_forbidden_chars=`$ECHO "$input_path" | $GREP [^-_/:a-zA-Z0-9]` + if test "x$has_forbidden_chars" != x; then + # Now convert it to mixed DOS-style, short mode (no spaces, and / instead of \) + new_path=`cmd /c "for %A in (\"$input_path\") do @echo %~sA"|$TR \\\\\\\\ / | $TR 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` + fi + + # Output is in $new_path + + windows_path="$new_path" + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then + unix_path=`$CYGPATH -u "$windows_path"` + new_path="$unix_path" + elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then + unix_path=`$ECHO "$windows_path" | $SED -e 's,^\\(.\\):,/\\1,g' -e 's,\\\\,/,g'` + new_path="$unix_path" + fi + + # remove trailing .exe if any + new_path="${new_path/%.exe/}" + + # Save the first 10 bytes of this path to the storage, so fixpath can work. + all_fixpath_prefixes=("${all_fixpath_prefixes[@]}" "${new_path:0:10}") + fi + + else + # We're on a posix platform. Hooray! :) + # First separate the path from the arguments. This will split at the first + # space. + complete="$FOUND_MAKE" + path="${complete%% *}" + tmp="$complete EOL" + arguments="${tmp#* }" + + new_path=`$WHICH $path 2> /dev/null` + if test "x$new_path" = x; then + is_absolute_path=`$ECHO "$path" | $GREP ^/` + if test "x$is_absolute_path" != x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: Resolving FOUND_MAKE (as $path) with 'which' failed, using $path directly." >&5 +$as_echo "$as_me: Resolving FOUND_MAKE (as $path) with 'which' failed, using $path directly." >&6;} + new_path="$path" + else + { $as_echo "$as_me:${as_lineno-$LINENO}: The path of FOUND_MAKE, which resolves as \"$complete\", is not found." >&5 +$as_echo "$as_me: The path of FOUND_MAKE, which resolves as \"$complete\", is not found." >&6;} + has_space=`$ECHO "$complete" | $GREP " "` + if test "x$has_space" != x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: This might be caused by spaces in the path, which is not allowed." >&5 +$as_echo "$as_me: This might be caused by spaces in the path, which is not allowed." >&6;} + fi + as_fn_error $? "Cannot locate the the path of FOUND_MAKE" "$LINENO" 5 + fi + fi + fi + + # Now join together the path and the arguments once again + if test "x$arguments" != xEOL; then + new_complete="$new_path ${arguments% *}" + else + new_complete="$new_path" + fi + + if test "x$complete" != "x$new_complete"; then + FOUND_MAKE="$new_complete" + { $as_echo "$as_me:${as_lineno-$LINENO}: Rewriting FOUND_MAKE to \"$new_complete\"" >&5 +$as_echo "$as_me: Rewriting FOUND_MAKE to \"$new_complete\"" >&6;} + fi + + fi + fi + fi + fi + + if test "x$FOUND_MAKE" = x; then + as_fn_error $? "The specified make (by MAKE=$MAKE) is not GNU make 3.81 or newer." "$LINENO" 5 + fi + else + # Try our hardest to locate a correct version of GNU make + for ac_prog in gmake +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_path_CHECK_GMAKE+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + case $CHECK_GMAKE in + [\\/]* | ?:[\\/]*) + ac_cv_path_CHECK_GMAKE="$CHECK_GMAKE" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_path_CHECK_GMAKE="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +CHECK_GMAKE=$ac_cv_path_CHECK_GMAKE +if test -n "$CHECK_GMAKE"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CHECK_GMAKE" >&5 +$as_echo "$CHECK_GMAKE" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$CHECK_GMAKE" && break +done + + + MAKE_CANDIDATE=""$CHECK_GMAKE"" + DESCRIPTION="gmake in PATH" + if test "x$MAKE_CANDIDATE" != x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: Testing potential make at $MAKE_CANDIDATE, found using $DESCRIPTION" >&5 +$as_echo "$as_me: Testing potential make at $MAKE_CANDIDATE, found using $DESCRIPTION" >&6;} + MAKE_VERSION_STRING=`$MAKE_CANDIDATE --version | $HEAD -n 1` + IS_GNU_MAKE=`$ECHO $MAKE_VERSION_STRING | $GREP 'GNU Make'` + if test "x$IS_GNU_MAKE" = x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: Found potential make at $MAKE_CANDIDATE, however, this is not GNU Make. Ignoring." >&5 +$as_echo "$as_me: Found potential make at $MAKE_CANDIDATE, however, this is not GNU Make. Ignoring." >&6;} + else + IS_MODERN_MAKE=`$ECHO $MAKE_VERSION_STRING | $GREP '3.8[12346789]'` + if test "x$IS_MODERN_MAKE" = x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: Found GNU make at $MAKE_CANDIDATE, however this is not version 3.81 or later. (it is: $MAKE_VERSION_STRING). Ignoring." >&5 +$as_echo "$as_me: Found GNU make at $MAKE_CANDIDATE, however this is not version 3.81 or later. (it is: $MAKE_VERSION_STRING). Ignoring." >&6;} + else + if test "x$OPENJDK_BUILD_OS" = "xwindows"; then + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then + MAKE_EXPECTED_ENV='cygwin' + elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then + MAKE_EXPECTED_ENV='msys' + else + as_fn_error $? "Unknown Windows environment" "$LINENO" 5 + fi + MAKE_BUILT_FOR=`$MAKE_CANDIDATE --version | $GREP -i 'built for'` + IS_MAKE_CORRECT_ENV=`$ECHO $MAKE_BUILT_FOR | $GREP $MAKE_EXPECTED_ENV` + else + # Not relevant for non-Windows + IS_MAKE_CORRECT_ENV=true + fi + if test "x$IS_MAKE_CORRECT_ENV" = x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: Found GNU make version $MAKE_VERSION_STRING at $MAKE_CANDIDATE, but it is not for $MAKE_EXPECTED_ENV (it says: $MAKE_BUILT_FOR). Ignoring." >&5 +$as_echo "$as_me: Found GNU make version $MAKE_VERSION_STRING at $MAKE_CANDIDATE, but it is not for $MAKE_EXPECTED_ENV (it says: $MAKE_BUILT_FOR). Ignoring." >&6;} + else + FOUND_MAKE=$MAKE_CANDIDATE + + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then + + # First separate the path from the arguments. This will split at the first + # space. + complete="$FOUND_MAKE" + path="${complete%% *}" + tmp="$complete EOL" + arguments="${tmp#* }" + + # Input might be given as Windows format, start by converting to + # unix format. + new_path=`$CYGPATH -u "$path"` + + # Now try to locate executable using which + new_path=`$WHICH "$new_path" 2> /dev/null` + # bat and cmd files are not always considered executable in cygwin causing which + # to not find them + if test "x$new_path" = x \ + && test "x`$ECHO \"$path\" | $GREP -e \"\\.bat$\" -e \"\\.cmd$\"`" != x \ + && test "x`$LS \"$path\" 2>/dev/null`" != x; then + new_path=`$CYGPATH -u "$path"` + fi + if test "x$new_path" = x; then + # Oops. Which didn't find the executable. + # The splitting of arguments from the executable at a space might have been incorrect, + # since paths with space are more likely in Windows. Give it another try with the whole + # argument. + path="$complete" + arguments="EOL" + new_path=`$CYGPATH -u "$path"` + new_path=`$WHICH "$new_path" 2> /dev/null` + # bat and cmd files are not always considered executable in cygwin causing which + # to not find them + if test "x$new_path" = x \ + && test "x`$ECHO \"$path\" | $GREP -e \"\\.bat$\" -e \"\\.cmd$\"`" != x \ + && test "x`$LS \"$path\" 2>/dev/null`" != x; then + new_path=`$CYGPATH -u "$path"` + fi + if test "x$new_path" = x; then + # It's still not found. Now this is an unrecoverable error. + { $as_echo "$as_me:${as_lineno-$LINENO}: The path of FOUND_MAKE, which resolves as \"$complete\", is not found." >&5 +$as_echo "$as_me: The path of FOUND_MAKE, which resolves as \"$complete\", is not found." >&6;} + has_space=`$ECHO "$complete" | $GREP " "` + if test "x$has_space" != x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: You might be mixing spaces in the path and extra arguments, which is not allowed." >&5 +$as_echo "$as_me: You might be mixing spaces in the path and extra arguments, which is not allowed." >&6;} + fi + as_fn_error $? "Cannot locate the the path of FOUND_MAKE" "$LINENO" 5 + fi + fi + + # Cygwin tries to hide some aspects of the Windows file system, such that binaries are + # named .exe but called without that suffix. Therefore, "foo" and "foo.exe" are considered + # the same file, most of the time (as in "test -f"). But not when running cygpath -s, then + # "foo.exe" is OK but "foo" is an error. + # + # This test is therefore slightly more accurate than "test -f" to check for file precense. + # It is also a way to make sure we got the proper file name for the real test later on. + test_shortpath=`$CYGPATH -s -m "$new_path" 2> /dev/null` + if test "x$test_shortpath" = x; then + # Short path failed, file does not exist as specified. + # Try adding .exe or .cmd + if test -f "${new_path}.exe"; then + input_to_shortpath="${new_path}.exe" + elif test -f "${new_path}.cmd"; then + input_to_shortpath="${new_path}.cmd" + else + { $as_echo "$as_me:${as_lineno-$LINENO}: The path of FOUND_MAKE, which resolves as \"$new_path\", is invalid." >&5 +$as_echo "$as_me: The path of FOUND_MAKE, which resolves as \"$new_path\", is invalid." >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: Neither \"$new_path\" nor \"$new_path.exe/cmd\" can be found" >&5 +$as_echo "$as_me: Neither \"$new_path\" nor \"$new_path.exe/cmd\" can be found" >&6;} + as_fn_error $? "Cannot locate the the path of FOUND_MAKE" "$LINENO" 5 + fi + else + input_to_shortpath="$new_path" + fi + + # Call helper function which possibly converts this using DOS-style short mode. + # If so, the updated path is stored in $new_path. + new_path="$input_to_shortpath" + + input_path="$input_to_shortpath" + # Check if we need to convert this using DOS-style short mode. If the path + # contains just simple characters, use it. Otherwise (spaces, weird characters), + # take no chances and rewrite it. + # Note: m4 eats our [], so we need to use [ and ] instead. + has_forbidden_chars=`$ECHO "$input_path" | $GREP [^-._/a-zA-Z0-9]` + if test "x$has_forbidden_chars" != x; then + # Now convert it to mixed DOS-style, short mode (no spaces, and / instead of \) + shortmode_path=`$CYGPATH -s -m -a "$input_path"` + path_after_shortmode=`$CYGPATH -u "$shortmode_path"` + if test "x$path_after_shortmode" != "x$input_to_shortpath"; then + # Going to short mode and back again did indeed matter. Since short mode is + # case insensitive, let's make it lowercase to improve readability. + shortmode_path=`$ECHO "$shortmode_path" | $TR 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` + # Now convert it back to Unix-stile (cygpath) + input_path=`$CYGPATH -u "$shortmode_path"` + new_path="$input_path" + fi + fi + + test_cygdrive_prefix=`$ECHO $input_path | $GREP ^/cygdrive/` + if test "x$test_cygdrive_prefix" = x; then + # As a simple fix, exclude /usr/bin since it's not a real path. + if test "x`$ECHO $input_to_shortpath | $GREP ^/usr/bin/`" = x; then + # The path is in a Cygwin special directory (e.g. /home). We need this converted to + # a path prefixed by /cygdrive for fixpath to work. + new_path="$CYGWIN_ROOT_PATH$input_path" + fi + fi + + # remove trailing .exe if any + new_path="${new_path/%.exe/}" + + elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then + + # First separate the path from the arguments. This will split at the first + # space. + complete="$FOUND_MAKE" + path="${complete%% *}" + tmp="$complete EOL" + arguments="${tmp#* }" + + # Input might be given as Windows format, start by converting to + # unix format. + new_path="$path" + + windows_path="$new_path" + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then + unix_path=`$CYGPATH -u "$windows_path"` + new_path="$unix_path" + elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then + unix_path=`$ECHO "$windows_path" | $SED -e 's,^\\(.\\):,/\\1,g' -e 's,\\\\,/,g'` + new_path="$unix_path" + fi + + + # Now try to locate executable using which + new_path=`$WHICH "$new_path" 2> /dev/null` + + if test "x$new_path" = x; then + # Oops. Which didn't find the executable. + # The splitting of arguments from the executable at a space might have been incorrect, + # since paths with space are more likely in Windows. Give it another try with the whole + # argument. + path="$complete" + arguments="EOL" + new_path="$path" + + windows_path="$new_path" + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then + unix_path=`$CYGPATH -u "$windows_path"` + new_path="$unix_path" + elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then + unix_path=`$ECHO "$windows_path" | $SED -e 's,^\\(.\\):,/\\1,g' -e 's,\\\\,/,g'` + new_path="$unix_path" + fi + + + new_path=`$WHICH "$new_path" 2> /dev/null` + + if test "x$new_path" = x; then + # It's still not found. Now this is an unrecoverable error. + { $as_echo "$as_me:${as_lineno-$LINENO}: The path of FOUND_MAKE, which resolves as \"$complete\", is not found." >&5 +$as_echo "$as_me: The path of FOUND_MAKE, which resolves as \"$complete\", is not found." >&6;} + has_space=`$ECHO "$complete" | $GREP " "` + if test "x$has_space" != x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: You might be mixing spaces in the path and extra arguments, which is not allowed." >&5 +$as_echo "$as_me: You might be mixing spaces in the path and extra arguments, which is not allowed." >&6;} + fi + as_fn_error $? "Cannot locate the the path of FOUND_MAKE" "$LINENO" 5 + fi + fi + + # Now new_path has a complete unix path to the binary + if test "x`$ECHO $new_path | $GREP ^/bin/`" != x; then + # Keep paths in /bin as-is, but remove trailing .exe if any + new_path="${new_path/%.exe/}" + # Do not save /bin paths to all_fixpath_prefixes! + else + # Not in mixed or Windows style, start by that. + new_path=`cmd //c echo $new_path` + + input_path="$new_path" + # Check if we need to convert this using DOS-style short mode. If the path + # contains just simple characters, use it. Otherwise (spaces, weird characters), + # take no chances and rewrite it. + # Note: m4 eats our [], so we need to use [ and ] instead. + has_forbidden_chars=`$ECHO "$input_path" | $GREP [^-_/:a-zA-Z0-9]` + if test "x$has_forbidden_chars" != x; then + # Now convert it to mixed DOS-style, short mode (no spaces, and / instead of \) + new_path=`cmd /c "for %A in (\"$input_path\") do @echo %~sA"|$TR \\\\\\\\ / | $TR 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` + fi + + # Output is in $new_path + + windows_path="$new_path" + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then + unix_path=`$CYGPATH -u "$windows_path"` + new_path="$unix_path" + elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then + unix_path=`$ECHO "$windows_path" | $SED -e 's,^\\(.\\):,/\\1,g' -e 's,\\\\,/,g'` + new_path="$unix_path" + fi + + # remove trailing .exe if any + new_path="${new_path/%.exe/}" + + # Save the first 10 bytes of this path to the storage, so fixpath can work. + all_fixpath_prefixes=("${all_fixpath_prefixes[@]}" "${new_path:0:10}") + fi + + else + # We're on a posix platform. Hooray! :) + # First separate the path from the arguments. This will split at the first + # space. + complete="$FOUND_MAKE" + path="${complete%% *}" + tmp="$complete EOL" + arguments="${tmp#* }" + + new_path=`$WHICH $path 2> /dev/null` + if test "x$new_path" = x; then + is_absolute_path=`$ECHO "$path" | $GREP ^/` + if test "x$is_absolute_path" != x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: Resolving FOUND_MAKE (as $path) with 'which' failed, using $path directly." >&5 +$as_echo "$as_me: Resolving FOUND_MAKE (as $path) with 'which' failed, using $path directly." >&6;} + new_path="$path" + else + { $as_echo "$as_me:${as_lineno-$LINENO}: The path of FOUND_MAKE, which resolves as \"$complete\", is not found." >&5 +$as_echo "$as_me: The path of FOUND_MAKE, which resolves as \"$complete\", is not found." >&6;} + has_space=`$ECHO "$complete" | $GREP " "` + if test "x$has_space" != x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: This might be caused by spaces in the path, which is not allowed." >&5 +$as_echo "$as_me: This might be caused by spaces in the path, which is not allowed." >&6;} + fi + as_fn_error $? "Cannot locate the the path of FOUND_MAKE" "$LINENO" 5 + fi + fi + fi + + # Now join together the path and the arguments once again + if test "x$arguments" != xEOL; then + new_complete="$new_path ${arguments% *}" + else + new_complete="$new_path" + fi + + if test "x$complete" != "x$new_complete"; then + FOUND_MAKE="$new_complete" + { $as_echo "$as_me:${as_lineno-$LINENO}: Rewriting FOUND_MAKE to \"$new_complete\"" >&5 +$as_echo "$as_me: Rewriting FOUND_MAKE to \"$new_complete\"" >&6;} + fi + + fi + fi + fi + fi + + + if test "x$FOUND_MAKE" = x; then + for ac_prog in make +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_path_CHECK_MAKE+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + case $CHECK_MAKE in + [\\/]* | ?:[\\/]*) + ac_cv_path_CHECK_MAKE="$CHECK_MAKE" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_path_CHECK_MAKE="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +CHECK_MAKE=$ac_cv_path_CHECK_MAKE +if test -n "$CHECK_MAKE"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CHECK_MAKE" >&5 +$as_echo "$CHECK_MAKE" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$CHECK_MAKE" && break +done + + + MAKE_CANDIDATE=""$CHECK_MAKE"" + DESCRIPTION="make in PATH" + if test "x$MAKE_CANDIDATE" != x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: Testing potential make at $MAKE_CANDIDATE, found using $DESCRIPTION" >&5 +$as_echo "$as_me: Testing potential make at $MAKE_CANDIDATE, found using $DESCRIPTION" >&6;} + MAKE_VERSION_STRING=`$MAKE_CANDIDATE --version | $HEAD -n 1` + IS_GNU_MAKE=`$ECHO $MAKE_VERSION_STRING | $GREP 'GNU Make'` + if test "x$IS_GNU_MAKE" = x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: Found potential make at $MAKE_CANDIDATE, however, this is not GNU Make. Ignoring." >&5 +$as_echo "$as_me: Found potential make at $MAKE_CANDIDATE, however, this is not GNU Make. Ignoring." >&6;} + else + IS_MODERN_MAKE=`$ECHO $MAKE_VERSION_STRING | $GREP '3.8[12346789]'` + if test "x$IS_MODERN_MAKE" = x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: Found GNU make at $MAKE_CANDIDATE, however this is not version 3.81 or later. (it is: $MAKE_VERSION_STRING). Ignoring." >&5 +$as_echo "$as_me: Found GNU make at $MAKE_CANDIDATE, however this is not version 3.81 or later. (it is: $MAKE_VERSION_STRING). Ignoring." >&6;} + else + if test "x$OPENJDK_BUILD_OS" = "xwindows"; then + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then + MAKE_EXPECTED_ENV='cygwin' + elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then + MAKE_EXPECTED_ENV='msys' + else + as_fn_error $? "Unknown Windows environment" "$LINENO" 5 + fi + MAKE_BUILT_FOR=`$MAKE_CANDIDATE --version | $GREP -i 'built for'` + IS_MAKE_CORRECT_ENV=`$ECHO $MAKE_BUILT_FOR | $GREP $MAKE_EXPECTED_ENV` + else + # Not relevant for non-Windows + IS_MAKE_CORRECT_ENV=true + fi + if test "x$IS_MAKE_CORRECT_ENV" = x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: Found GNU make version $MAKE_VERSION_STRING at $MAKE_CANDIDATE, but it is not for $MAKE_EXPECTED_ENV (it says: $MAKE_BUILT_FOR). Ignoring." >&5 +$as_echo "$as_me: Found GNU make version $MAKE_VERSION_STRING at $MAKE_CANDIDATE, but it is not for $MAKE_EXPECTED_ENV (it says: $MAKE_BUILT_FOR). Ignoring." >&6;} + else + FOUND_MAKE=$MAKE_CANDIDATE + + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then + + # First separate the path from the arguments. This will split at the first + # space. + complete="$FOUND_MAKE" + path="${complete%% *}" + tmp="$complete EOL" + arguments="${tmp#* }" + + # Input might be given as Windows format, start by converting to + # unix format. + new_path=`$CYGPATH -u "$path"` + + # Now try to locate executable using which + new_path=`$WHICH "$new_path" 2> /dev/null` + # bat and cmd files are not always considered executable in cygwin causing which + # to not find them + if test "x$new_path" = x \ + && test "x`$ECHO \"$path\" | $GREP -e \"\\.bat$\" -e \"\\.cmd$\"`" != x \ + && test "x`$LS \"$path\" 2>/dev/null`" != x; then + new_path=`$CYGPATH -u "$path"` + fi + if test "x$new_path" = x; then + # Oops. Which didn't find the executable. + # The splitting of arguments from the executable at a space might have been incorrect, + # since paths with space are more likely in Windows. Give it another try with the whole + # argument. + path="$complete" + arguments="EOL" + new_path=`$CYGPATH -u "$path"` + new_path=`$WHICH "$new_path" 2> /dev/null` + # bat and cmd files are not always considered executable in cygwin causing which + # to not find them + if test "x$new_path" = x \ + && test "x`$ECHO \"$path\" | $GREP -e \"\\.bat$\" -e \"\\.cmd$\"`" != x \ + && test "x`$LS \"$path\" 2>/dev/null`" != x; then + new_path=`$CYGPATH -u "$path"` + fi + if test "x$new_path" = x; then + # It's still not found. Now this is an unrecoverable error. + { $as_echo "$as_me:${as_lineno-$LINENO}: The path of FOUND_MAKE, which resolves as \"$complete\", is not found." >&5 +$as_echo "$as_me: The path of FOUND_MAKE, which resolves as \"$complete\", is not found." >&6;} + has_space=`$ECHO "$complete" | $GREP " "` + if test "x$has_space" != x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: You might be mixing spaces in the path and extra arguments, which is not allowed." >&5 +$as_echo "$as_me: You might be mixing spaces in the path and extra arguments, which is not allowed." >&6;} + fi + as_fn_error $? "Cannot locate the the path of FOUND_MAKE" "$LINENO" 5 + fi + fi + + # Cygwin tries to hide some aspects of the Windows file system, such that binaries are + # named .exe but called without that suffix. Therefore, "foo" and "foo.exe" are considered + # the same file, most of the time (as in "test -f"). But not when running cygpath -s, then + # "foo.exe" is OK but "foo" is an error. + # + # This test is therefore slightly more accurate than "test -f" to check for file precense. + # It is also a way to make sure we got the proper file name for the real test later on. + test_shortpath=`$CYGPATH -s -m "$new_path" 2> /dev/null` + if test "x$test_shortpath" = x; then + # Short path failed, file does not exist as specified. + # Try adding .exe or .cmd + if test -f "${new_path}.exe"; then + input_to_shortpath="${new_path}.exe" + elif test -f "${new_path}.cmd"; then + input_to_shortpath="${new_path}.cmd" + else + { $as_echo "$as_me:${as_lineno-$LINENO}: The path of FOUND_MAKE, which resolves as \"$new_path\", is invalid." >&5 +$as_echo "$as_me: The path of FOUND_MAKE, which resolves as \"$new_path\", is invalid." >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: Neither \"$new_path\" nor \"$new_path.exe/cmd\" can be found" >&5 +$as_echo "$as_me: Neither \"$new_path\" nor \"$new_path.exe/cmd\" can be found" >&6;} + as_fn_error $? "Cannot locate the the path of FOUND_MAKE" "$LINENO" 5 + fi + else + input_to_shortpath="$new_path" + fi + + # Call helper function which possibly converts this using DOS-style short mode. + # If so, the updated path is stored in $new_path. + new_path="$input_to_shortpath" + + input_path="$input_to_shortpath" + # Check if we need to convert this using DOS-style short mode. If the path + # contains just simple characters, use it. Otherwise (spaces, weird characters), + # take no chances and rewrite it. + # Note: m4 eats our [], so we need to use [ and ] instead. + has_forbidden_chars=`$ECHO "$input_path" | $GREP [^-._/a-zA-Z0-9]` + if test "x$has_forbidden_chars" != x; then + # Now convert it to mixed DOS-style, short mode (no spaces, and / instead of \) + shortmode_path=`$CYGPATH -s -m -a "$input_path"` + path_after_shortmode=`$CYGPATH -u "$shortmode_path"` + if test "x$path_after_shortmode" != "x$input_to_shortpath"; then + # Going to short mode and back again did indeed matter. Since short mode is + # case insensitive, let's make it lowercase to improve readability. + shortmode_path=`$ECHO "$shortmode_path" | $TR 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` + # Now convert it back to Unix-stile (cygpath) + input_path=`$CYGPATH -u "$shortmode_path"` + new_path="$input_path" + fi + fi + + test_cygdrive_prefix=`$ECHO $input_path | $GREP ^/cygdrive/` + if test "x$test_cygdrive_prefix" = x; then + # As a simple fix, exclude /usr/bin since it's not a real path. + if test "x`$ECHO $input_to_shortpath | $GREP ^/usr/bin/`" = x; then + # The path is in a Cygwin special directory (e.g. /home). We need this converted to + # a path prefixed by /cygdrive for fixpath to work. + new_path="$CYGWIN_ROOT_PATH$input_path" + fi + fi + + # remove trailing .exe if any + new_path="${new_path/%.exe/}" + + elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then + + # First separate the path from the arguments. This will split at the first + # space. + complete="$FOUND_MAKE" + path="${complete%% *}" + tmp="$complete EOL" + arguments="${tmp#* }" + + # Input might be given as Windows format, start by converting to + # unix format. + new_path="$path" + + windows_path="$new_path" + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then + unix_path=`$CYGPATH -u "$windows_path"` + new_path="$unix_path" + elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then + unix_path=`$ECHO "$windows_path" | $SED -e 's,^\\(.\\):,/\\1,g' -e 's,\\\\,/,g'` + new_path="$unix_path" + fi + + + # Now try to locate executable using which + new_path=`$WHICH "$new_path" 2> /dev/null` + + if test "x$new_path" = x; then + # Oops. Which didn't find the executable. + # The splitting of arguments from the executable at a space might have been incorrect, + # since paths with space are more likely in Windows. Give it another try with the whole + # argument. + path="$complete" + arguments="EOL" + new_path="$path" + + windows_path="$new_path" + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then + unix_path=`$CYGPATH -u "$windows_path"` + new_path="$unix_path" + elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then + unix_path=`$ECHO "$windows_path" | $SED -e 's,^\\(.\\):,/\\1,g' -e 's,\\\\,/,g'` + new_path="$unix_path" + fi + + + new_path=`$WHICH "$new_path" 2> /dev/null` + + if test "x$new_path" = x; then + # It's still not found. Now this is an unrecoverable error. + { $as_echo "$as_me:${as_lineno-$LINENO}: The path of FOUND_MAKE, which resolves as \"$complete\", is not found." >&5 +$as_echo "$as_me: The path of FOUND_MAKE, which resolves as \"$complete\", is not found." >&6;} + has_space=`$ECHO "$complete" | $GREP " "` + if test "x$has_space" != x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: You might be mixing spaces in the path and extra arguments, which is not allowed." >&5 +$as_echo "$as_me: You might be mixing spaces in the path and extra arguments, which is not allowed." >&6;} + fi + as_fn_error $? "Cannot locate the the path of FOUND_MAKE" "$LINENO" 5 + fi + fi + + # Now new_path has a complete unix path to the binary + if test "x`$ECHO $new_path | $GREP ^/bin/`" != x; then + # Keep paths in /bin as-is, but remove trailing .exe if any + new_path="${new_path/%.exe/}" + # Do not save /bin paths to all_fixpath_prefixes! + else + # Not in mixed or Windows style, start by that. + new_path=`cmd //c echo $new_path` + + input_path="$new_path" + # Check if we need to convert this using DOS-style short mode. If the path + # contains just simple characters, use it. Otherwise (spaces, weird characters), + # take no chances and rewrite it. + # Note: m4 eats our [], so we need to use [ and ] instead. + has_forbidden_chars=`$ECHO "$input_path" | $GREP [^-_/:a-zA-Z0-9]` + if test "x$has_forbidden_chars" != x; then + # Now convert it to mixed DOS-style, short mode (no spaces, and / instead of \) + new_path=`cmd /c "for %A in (\"$input_path\") do @echo %~sA"|$TR \\\\\\\\ / | $TR 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` + fi + + # Output is in $new_path + + windows_path="$new_path" + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then + unix_path=`$CYGPATH -u "$windows_path"` + new_path="$unix_path" + elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then + unix_path=`$ECHO "$windows_path" | $SED -e 's,^\\(.\\):,/\\1,g' -e 's,\\\\,/,g'` + new_path="$unix_path" + fi + + # remove trailing .exe if any + new_path="${new_path/%.exe/}" + + # Save the first 10 bytes of this path to the storage, so fixpath can work. + all_fixpath_prefixes=("${all_fixpath_prefixes[@]}" "${new_path:0:10}") + fi + + else + # We're on a posix platform. Hooray! :) + # First separate the path from the arguments. This will split at the first + # space. + complete="$FOUND_MAKE" + path="${complete%% *}" + tmp="$complete EOL" + arguments="${tmp#* }" + + new_path=`$WHICH $path 2> /dev/null` + if test "x$new_path" = x; then + is_absolute_path=`$ECHO "$path" | $GREP ^/` + if test "x$is_absolute_path" != x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: Resolving FOUND_MAKE (as $path) with 'which' failed, using $path directly." >&5 +$as_echo "$as_me: Resolving FOUND_MAKE (as $path) with 'which' failed, using $path directly." >&6;} + new_path="$path" + else + { $as_echo "$as_me:${as_lineno-$LINENO}: The path of FOUND_MAKE, which resolves as \"$complete\", is not found." >&5 +$as_echo "$as_me: The path of FOUND_MAKE, which resolves as \"$complete\", is not found." >&6;} + has_space=`$ECHO "$complete" | $GREP " "` + if test "x$has_space" != x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: This might be caused by spaces in the path, which is not allowed." >&5 +$as_echo "$as_me: This might be caused by spaces in the path, which is not allowed." >&6;} + fi + as_fn_error $? "Cannot locate the the path of FOUND_MAKE" "$LINENO" 5 + fi + fi + fi + + # Now join together the path and the arguments once again + if test "x$arguments" != xEOL; then + new_complete="$new_path ${arguments% *}" + else + new_complete="$new_path" + fi + + if test "x$complete" != "x$new_complete"; then + FOUND_MAKE="$new_complete" + { $as_echo "$as_me:${as_lineno-$LINENO}: Rewriting FOUND_MAKE to \"$new_complete\"" >&5 +$as_echo "$as_me: Rewriting FOUND_MAKE to \"$new_complete\"" >&6;} + fi + + fi + fi + fi + fi + + fi + + if test "x$FOUND_MAKE" = x; then + if test "x$TOOLS_DIR" != x; then + # We have a tools-dir, check that as well before giving up. + OLD_PATH=$PATH + PATH=$TOOLS_DIR:$PATH + for ac_prog in gmake +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_path_CHECK_TOOLSDIR_GMAKE+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + case $CHECK_TOOLSDIR_GMAKE in + [\\/]* | ?:[\\/]*) + ac_cv_path_CHECK_TOOLSDIR_GMAKE="$CHECK_TOOLSDIR_GMAKE" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_path_CHECK_TOOLSDIR_GMAKE="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +CHECK_TOOLSDIR_GMAKE=$ac_cv_path_CHECK_TOOLSDIR_GMAKE +if test -n "$CHECK_TOOLSDIR_GMAKE"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CHECK_TOOLSDIR_GMAKE" >&5 +$as_echo "$CHECK_TOOLSDIR_GMAKE" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$CHECK_TOOLSDIR_GMAKE" && break +done + + + MAKE_CANDIDATE=""$CHECK_TOOLSDIR_GMAKE"" + DESCRIPTION="gmake in tools-dir" + if test "x$MAKE_CANDIDATE" != x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: Testing potential make at $MAKE_CANDIDATE, found using $DESCRIPTION" >&5 +$as_echo "$as_me: Testing potential make at $MAKE_CANDIDATE, found using $DESCRIPTION" >&6;} + MAKE_VERSION_STRING=`$MAKE_CANDIDATE --version | $HEAD -n 1` + IS_GNU_MAKE=`$ECHO $MAKE_VERSION_STRING | $GREP 'GNU Make'` + if test "x$IS_GNU_MAKE" = x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: Found potential make at $MAKE_CANDIDATE, however, this is not GNU Make. Ignoring." >&5 +$as_echo "$as_me: Found potential make at $MAKE_CANDIDATE, however, this is not GNU Make. Ignoring." >&6;} + else + IS_MODERN_MAKE=`$ECHO $MAKE_VERSION_STRING | $GREP '3.8[12346789]'` + if test "x$IS_MODERN_MAKE" = x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: Found GNU make at $MAKE_CANDIDATE, however this is not version 3.81 or later. (it is: $MAKE_VERSION_STRING). Ignoring." >&5 +$as_echo "$as_me: Found GNU make at $MAKE_CANDIDATE, however this is not version 3.81 or later. (it is: $MAKE_VERSION_STRING). Ignoring." >&6;} + else + if test "x$OPENJDK_BUILD_OS" = "xwindows"; then + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then + MAKE_EXPECTED_ENV='cygwin' + elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then + MAKE_EXPECTED_ENV='msys' + else + as_fn_error $? "Unknown Windows environment" "$LINENO" 5 + fi + MAKE_BUILT_FOR=`$MAKE_CANDIDATE --version | $GREP -i 'built for'` + IS_MAKE_CORRECT_ENV=`$ECHO $MAKE_BUILT_FOR | $GREP $MAKE_EXPECTED_ENV` + else + # Not relevant for non-Windows + IS_MAKE_CORRECT_ENV=true + fi + if test "x$IS_MAKE_CORRECT_ENV" = x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: Found GNU make version $MAKE_VERSION_STRING at $MAKE_CANDIDATE, but it is not for $MAKE_EXPECTED_ENV (it says: $MAKE_BUILT_FOR). Ignoring." >&5 +$as_echo "$as_me: Found GNU make version $MAKE_VERSION_STRING at $MAKE_CANDIDATE, but it is not for $MAKE_EXPECTED_ENV (it says: $MAKE_BUILT_FOR). Ignoring." >&6;} + else + FOUND_MAKE=$MAKE_CANDIDATE + + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then + + # First separate the path from the arguments. This will split at the first + # space. + complete="$FOUND_MAKE" + path="${complete%% *}" + tmp="$complete EOL" + arguments="${tmp#* }" + + # Input might be given as Windows format, start by converting to + # unix format. + new_path=`$CYGPATH -u "$path"` + + # Now try to locate executable using which + new_path=`$WHICH "$new_path" 2> /dev/null` + # bat and cmd files are not always considered executable in cygwin causing which + # to not find them + if test "x$new_path" = x \ + && test "x`$ECHO \"$path\" | $GREP -e \"\\.bat$\" -e \"\\.cmd$\"`" != x \ + && test "x`$LS \"$path\" 2>/dev/null`" != x; then + new_path=`$CYGPATH -u "$path"` + fi + if test "x$new_path" = x; then + # Oops. Which didn't find the executable. + # The splitting of arguments from the executable at a space might have been incorrect, + # since paths with space are more likely in Windows. Give it another try with the whole + # argument. + path="$complete" + arguments="EOL" + new_path=`$CYGPATH -u "$path"` + new_path=`$WHICH "$new_path" 2> /dev/null` + # bat and cmd files are not always considered executable in cygwin causing which + # to not find them + if test "x$new_path" = x \ + && test "x`$ECHO \"$path\" | $GREP -e \"\\.bat$\" -e \"\\.cmd$\"`" != x \ + && test "x`$LS \"$path\" 2>/dev/null`" != x; then + new_path=`$CYGPATH -u "$path"` + fi + if test "x$new_path" = x; then + # It's still not found. Now this is an unrecoverable error. + { $as_echo "$as_me:${as_lineno-$LINENO}: The path of FOUND_MAKE, which resolves as \"$complete\", is not found." >&5 +$as_echo "$as_me: The path of FOUND_MAKE, which resolves as \"$complete\", is not found." >&6;} + has_space=`$ECHO "$complete" | $GREP " "` + if test "x$has_space" != x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: You might be mixing spaces in the path and extra arguments, which is not allowed." >&5 +$as_echo "$as_me: You might be mixing spaces in the path and extra arguments, which is not allowed." >&6;} + fi + as_fn_error $? "Cannot locate the the path of FOUND_MAKE" "$LINENO" 5 + fi + fi + + # Cygwin tries to hide some aspects of the Windows file system, such that binaries are + # named .exe but called without that suffix. Therefore, "foo" and "foo.exe" are considered + # the same file, most of the time (as in "test -f"). But not when running cygpath -s, then + # "foo.exe" is OK but "foo" is an error. + # + # This test is therefore slightly more accurate than "test -f" to check for file precense. + # It is also a way to make sure we got the proper file name for the real test later on. + test_shortpath=`$CYGPATH -s -m "$new_path" 2> /dev/null` + if test "x$test_shortpath" = x; then + # Short path failed, file does not exist as specified. + # Try adding .exe or .cmd + if test -f "${new_path}.exe"; then + input_to_shortpath="${new_path}.exe" + elif test -f "${new_path}.cmd"; then + input_to_shortpath="${new_path}.cmd" + else + { $as_echo "$as_me:${as_lineno-$LINENO}: The path of FOUND_MAKE, which resolves as \"$new_path\", is invalid." >&5 +$as_echo "$as_me: The path of FOUND_MAKE, which resolves as \"$new_path\", is invalid." >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: Neither \"$new_path\" nor \"$new_path.exe/cmd\" can be found" >&5 +$as_echo "$as_me: Neither \"$new_path\" nor \"$new_path.exe/cmd\" can be found" >&6;} + as_fn_error $? "Cannot locate the the path of FOUND_MAKE" "$LINENO" 5 + fi + else + input_to_shortpath="$new_path" + fi + + # Call helper function which possibly converts this using DOS-style short mode. + # If so, the updated path is stored in $new_path. + new_path="$input_to_shortpath" + + input_path="$input_to_shortpath" + # Check if we need to convert this using DOS-style short mode. If the path + # contains just simple characters, use it. Otherwise (spaces, weird characters), + # take no chances and rewrite it. + # Note: m4 eats our [], so we need to use [ and ] instead. + has_forbidden_chars=`$ECHO "$input_path" | $GREP [^-._/a-zA-Z0-9]` + if test "x$has_forbidden_chars" != x; then + # Now convert it to mixed DOS-style, short mode (no spaces, and / instead of \) + shortmode_path=`$CYGPATH -s -m -a "$input_path"` + path_after_shortmode=`$CYGPATH -u "$shortmode_path"` + if test "x$path_after_shortmode" != "x$input_to_shortpath"; then + # Going to short mode and back again did indeed matter. Since short mode is + # case insensitive, let's make it lowercase to improve readability. + shortmode_path=`$ECHO "$shortmode_path" | $TR 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` + # Now convert it back to Unix-stile (cygpath) + input_path=`$CYGPATH -u "$shortmode_path"` + new_path="$input_path" + fi + fi + + test_cygdrive_prefix=`$ECHO $input_path | $GREP ^/cygdrive/` + if test "x$test_cygdrive_prefix" = x; then + # As a simple fix, exclude /usr/bin since it's not a real path. + if test "x`$ECHO $input_to_shortpath | $GREP ^/usr/bin/`" = x; then + # The path is in a Cygwin special directory (e.g. /home). We need this converted to + # a path prefixed by /cygdrive for fixpath to work. + new_path="$CYGWIN_ROOT_PATH$input_path" + fi + fi + + # remove trailing .exe if any + new_path="${new_path/%.exe/}" + + elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then + + # First separate the path from the arguments. This will split at the first + # space. + complete="$FOUND_MAKE" + path="${complete%% *}" + tmp="$complete EOL" + arguments="${tmp#* }" + + # Input might be given as Windows format, start by converting to + # unix format. + new_path="$path" + + windows_path="$new_path" + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then + unix_path=`$CYGPATH -u "$windows_path"` + new_path="$unix_path" + elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then + unix_path=`$ECHO "$windows_path" | $SED -e 's,^\\(.\\):,/\\1,g' -e 's,\\\\,/,g'` + new_path="$unix_path" + fi + + + # Now try to locate executable using which + new_path=`$WHICH "$new_path" 2> /dev/null` + + if test "x$new_path" = x; then + # Oops. Which didn't find the executable. + # The splitting of arguments from the executable at a space might have been incorrect, + # since paths with space are more likely in Windows. Give it another try with the whole + # argument. + path="$complete" + arguments="EOL" + new_path="$path" + + windows_path="$new_path" + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then + unix_path=`$CYGPATH -u "$windows_path"` + new_path="$unix_path" + elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then + unix_path=`$ECHO "$windows_path" | $SED -e 's,^\\(.\\):,/\\1,g' -e 's,\\\\,/,g'` + new_path="$unix_path" + fi + + + new_path=`$WHICH "$new_path" 2> /dev/null` + + if test "x$new_path" = x; then + # It's still not found. Now this is an unrecoverable error. + { $as_echo "$as_me:${as_lineno-$LINENO}: The path of FOUND_MAKE, which resolves as \"$complete\", is not found." >&5 +$as_echo "$as_me: The path of FOUND_MAKE, which resolves as \"$complete\", is not found." >&6;} + has_space=`$ECHO "$complete" | $GREP " "` + if test "x$has_space" != x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: You might be mixing spaces in the path and extra arguments, which is not allowed." >&5 +$as_echo "$as_me: You might be mixing spaces in the path and extra arguments, which is not allowed." >&6;} + fi + as_fn_error $? "Cannot locate the the path of FOUND_MAKE" "$LINENO" 5 + fi + fi + + # Now new_path has a complete unix path to the binary + if test "x`$ECHO $new_path | $GREP ^/bin/`" != x; then + # Keep paths in /bin as-is, but remove trailing .exe if any + new_path="${new_path/%.exe/}" + # Do not save /bin paths to all_fixpath_prefixes! + else + # Not in mixed or Windows style, start by that. + new_path=`cmd //c echo $new_path` + + input_path="$new_path" + # Check if we need to convert this using DOS-style short mode. If the path + # contains just simple characters, use it. Otherwise (spaces, weird characters), + # take no chances and rewrite it. + # Note: m4 eats our [], so we need to use [ and ] instead. + has_forbidden_chars=`$ECHO "$input_path" | $GREP [^-_/:a-zA-Z0-9]` + if test "x$has_forbidden_chars" != x; then + # Now convert it to mixed DOS-style, short mode (no spaces, and / instead of \) + new_path=`cmd /c "for %A in (\"$input_path\") do @echo %~sA"|$TR \\\\\\\\ / | $TR 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` + fi + + # Output is in $new_path + + windows_path="$new_path" + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then + unix_path=`$CYGPATH -u "$windows_path"` + new_path="$unix_path" + elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then + unix_path=`$ECHO "$windows_path" | $SED -e 's,^\\(.\\):,/\\1,g' -e 's,\\\\,/,g'` + new_path="$unix_path" + fi + + # remove trailing .exe if any + new_path="${new_path/%.exe/}" + + # Save the first 10 bytes of this path to the storage, so fixpath can work. + all_fixpath_prefixes=("${all_fixpath_prefixes[@]}" "${new_path:0:10}") + fi + + else + # We're on a posix platform. Hooray! :) + # First separate the path from the arguments. This will split at the first + # space. + complete="$FOUND_MAKE" + path="${complete%% *}" + tmp="$complete EOL" + arguments="${tmp#* }" + + new_path=`$WHICH $path 2> /dev/null` + if test "x$new_path" = x; then + is_absolute_path=`$ECHO "$path" | $GREP ^/` + if test "x$is_absolute_path" != x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: Resolving FOUND_MAKE (as $path) with 'which' failed, using $path directly." >&5 +$as_echo "$as_me: Resolving FOUND_MAKE (as $path) with 'which' failed, using $path directly." >&6;} + new_path="$path" + else + { $as_echo "$as_me:${as_lineno-$LINENO}: The path of FOUND_MAKE, which resolves as \"$complete\", is not found." >&5 +$as_echo "$as_me: The path of FOUND_MAKE, which resolves as \"$complete\", is not found." >&6;} + has_space=`$ECHO "$complete" | $GREP " "` + if test "x$has_space" != x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: This might be caused by spaces in the path, which is not allowed." >&5 +$as_echo "$as_me: This might be caused by spaces in the path, which is not allowed." >&6;} + fi + as_fn_error $? "Cannot locate the the path of FOUND_MAKE" "$LINENO" 5 + fi + fi + fi + + # Now join together the path and the arguments once again + if test "x$arguments" != xEOL; then + new_complete="$new_path ${arguments% *}" + else + new_complete="$new_path" + fi + + if test "x$complete" != "x$new_complete"; then + FOUND_MAKE="$new_complete" + { $as_echo "$as_me:${as_lineno-$LINENO}: Rewriting FOUND_MAKE to \"$new_complete\"" >&5 +$as_echo "$as_me: Rewriting FOUND_MAKE to \"$new_complete\"" >&6;} + fi + + fi + fi + fi + fi + + if test "x$FOUND_MAKE" = x; then + for ac_prog in make +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_path_CHECK_TOOLSDIR_MAKE+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + case $CHECK_TOOLSDIR_MAKE in + [\\/]* | ?:[\\/]*) + ac_cv_path_CHECK_TOOLSDIR_MAKE="$CHECK_TOOLSDIR_MAKE" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_path_CHECK_TOOLSDIR_MAKE="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +CHECK_TOOLSDIR_MAKE=$ac_cv_path_CHECK_TOOLSDIR_MAKE +if test -n "$CHECK_TOOLSDIR_MAKE"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CHECK_TOOLSDIR_MAKE" >&5 +$as_echo "$CHECK_TOOLSDIR_MAKE" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$CHECK_TOOLSDIR_MAKE" && break +done + + + MAKE_CANDIDATE=""$CHECK_TOOLSDIR_MAKE"" + DESCRIPTION="make in tools-dir" + if test "x$MAKE_CANDIDATE" != x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: Testing potential make at $MAKE_CANDIDATE, found using $DESCRIPTION" >&5 +$as_echo "$as_me: Testing potential make at $MAKE_CANDIDATE, found using $DESCRIPTION" >&6;} + MAKE_VERSION_STRING=`$MAKE_CANDIDATE --version | $HEAD -n 1` + IS_GNU_MAKE=`$ECHO $MAKE_VERSION_STRING | $GREP 'GNU Make'` + if test "x$IS_GNU_MAKE" = x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: Found potential make at $MAKE_CANDIDATE, however, this is not GNU Make. Ignoring." >&5 +$as_echo "$as_me: Found potential make at $MAKE_CANDIDATE, however, this is not GNU Make. Ignoring." >&6;} + else + IS_MODERN_MAKE=`$ECHO $MAKE_VERSION_STRING | $GREP '3.8[12346789]'` + if test "x$IS_MODERN_MAKE" = x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: Found GNU make at $MAKE_CANDIDATE, however this is not version 3.81 or later. (it is: $MAKE_VERSION_STRING). Ignoring." >&5 +$as_echo "$as_me: Found GNU make at $MAKE_CANDIDATE, however this is not version 3.81 or later. (it is: $MAKE_VERSION_STRING). Ignoring." >&6;} + else + if test "x$OPENJDK_BUILD_OS" = "xwindows"; then + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then + MAKE_EXPECTED_ENV='cygwin' + elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then + MAKE_EXPECTED_ENV='msys' + else + as_fn_error $? "Unknown Windows environment" "$LINENO" 5 + fi + MAKE_BUILT_FOR=`$MAKE_CANDIDATE --version | $GREP -i 'built for'` + IS_MAKE_CORRECT_ENV=`$ECHO $MAKE_BUILT_FOR | $GREP $MAKE_EXPECTED_ENV` + else + # Not relevant for non-Windows + IS_MAKE_CORRECT_ENV=true + fi + if test "x$IS_MAKE_CORRECT_ENV" = x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: Found GNU make version $MAKE_VERSION_STRING at $MAKE_CANDIDATE, but it is not for $MAKE_EXPECTED_ENV (it says: $MAKE_BUILT_FOR). Ignoring." >&5 +$as_echo "$as_me: Found GNU make version $MAKE_VERSION_STRING at $MAKE_CANDIDATE, but it is not for $MAKE_EXPECTED_ENV (it says: $MAKE_BUILT_FOR). Ignoring." >&6;} + else + FOUND_MAKE=$MAKE_CANDIDATE + + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then + + # First separate the path from the arguments. This will split at the first + # space. + complete="$FOUND_MAKE" + path="${complete%% *}" + tmp="$complete EOL" + arguments="${tmp#* }" + + # Input might be given as Windows format, start by converting to + # unix format. + new_path=`$CYGPATH -u "$path"` + + # Now try to locate executable using which + new_path=`$WHICH "$new_path" 2> /dev/null` + # bat and cmd files are not always considered executable in cygwin causing which + # to not find them + if test "x$new_path" = x \ + && test "x`$ECHO \"$path\" | $GREP -e \"\\.bat$\" -e \"\\.cmd$\"`" != x \ + && test "x`$LS \"$path\" 2>/dev/null`" != x; then + new_path=`$CYGPATH -u "$path"` + fi + if test "x$new_path" = x; then + # Oops. Which didn't find the executable. + # The splitting of arguments from the executable at a space might have been incorrect, + # since paths with space are more likely in Windows. Give it another try with the whole + # argument. + path="$complete" + arguments="EOL" + new_path=`$CYGPATH -u "$path"` + new_path=`$WHICH "$new_path" 2> /dev/null` + # bat and cmd files are not always considered executable in cygwin causing which + # to not find them + if test "x$new_path" = x \ + && test "x`$ECHO \"$path\" | $GREP -e \"\\.bat$\" -e \"\\.cmd$\"`" != x \ + && test "x`$LS \"$path\" 2>/dev/null`" != x; then + new_path=`$CYGPATH -u "$path"` + fi + if test "x$new_path" = x; then + # It's still not found. Now this is an unrecoverable error. + { $as_echo "$as_me:${as_lineno-$LINENO}: The path of FOUND_MAKE, which resolves as \"$complete\", is not found." >&5 +$as_echo "$as_me: The path of FOUND_MAKE, which resolves as \"$complete\", is not found." >&6;} + has_space=`$ECHO "$complete" | $GREP " "` + if test "x$has_space" != x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: You might be mixing spaces in the path and extra arguments, which is not allowed." >&5 +$as_echo "$as_me: You might be mixing spaces in the path and extra arguments, which is not allowed." >&6;} + fi + as_fn_error $? "Cannot locate the the path of FOUND_MAKE" "$LINENO" 5 + fi + fi + + # Cygwin tries to hide some aspects of the Windows file system, such that binaries are + # named .exe but called without that suffix. Therefore, "foo" and "foo.exe" are considered + # the same file, most of the time (as in "test -f"). But not when running cygpath -s, then + # "foo.exe" is OK but "foo" is an error. + # + # This test is therefore slightly more accurate than "test -f" to check for file precense. + # It is also a way to make sure we got the proper file name for the real test later on. + test_shortpath=`$CYGPATH -s -m "$new_path" 2> /dev/null` + if test "x$test_shortpath" = x; then + # Short path failed, file does not exist as specified. + # Try adding .exe or .cmd + if test -f "${new_path}.exe"; then + input_to_shortpath="${new_path}.exe" + elif test -f "${new_path}.cmd"; then + input_to_shortpath="${new_path}.cmd" + else + { $as_echo "$as_me:${as_lineno-$LINENO}: The path of FOUND_MAKE, which resolves as \"$new_path\", is invalid." >&5 +$as_echo "$as_me: The path of FOUND_MAKE, which resolves as \"$new_path\", is invalid." >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: Neither \"$new_path\" nor \"$new_path.exe/cmd\" can be found" >&5 +$as_echo "$as_me: Neither \"$new_path\" nor \"$new_path.exe/cmd\" can be found" >&6;} + as_fn_error $? "Cannot locate the the path of FOUND_MAKE" "$LINENO" 5 + fi + else + input_to_shortpath="$new_path" + fi + + # Call helper function which possibly converts this using DOS-style short mode. + # If so, the updated path is stored in $new_path. + new_path="$input_to_shortpath" + + input_path="$input_to_shortpath" + # Check if we need to convert this using DOS-style short mode. If the path + # contains just simple characters, use it. Otherwise (spaces, weird characters), + # take no chances and rewrite it. + # Note: m4 eats our [], so we need to use [ and ] instead. + has_forbidden_chars=`$ECHO "$input_path" | $GREP [^-._/a-zA-Z0-9]` + if test "x$has_forbidden_chars" != x; then + # Now convert it to mixed DOS-style, short mode (no spaces, and / instead of \) + shortmode_path=`$CYGPATH -s -m -a "$input_path"` + path_after_shortmode=`$CYGPATH -u "$shortmode_path"` + if test "x$path_after_shortmode" != "x$input_to_shortpath"; then + # Going to short mode and back again did indeed matter. Since short mode is + # case insensitive, let's make it lowercase to improve readability. + shortmode_path=`$ECHO "$shortmode_path" | $TR 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` + # Now convert it back to Unix-stile (cygpath) + input_path=`$CYGPATH -u "$shortmode_path"` + new_path="$input_path" + fi + fi + + test_cygdrive_prefix=`$ECHO $input_path | $GREP ^/cygdrive/` + if test "x$test_cygdrive_prefix" = x; then + # As a simple fix, exclude /usr/bin since it's not a real path. + if test "x`$ECHO $input_to_shortpath | $GREP ^/usr/bin/`" = x; then + # The path is in a Cygwin special directory (e.g. /home). We need this converted to + # a path prefixed by /cygdrive for fixpath to work. + new_path="$CYGWIN_ROOT_PATH$input_path" + fi + fi + + # remove trailing .exe if any + new_path="${new_path/%.exe/}" + + elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then + + # First separate the path from the arguments. This will split at the first + # space. + complete="$FOUND_MAKE" + path="${complete%% *}" + tmp="$complete EOL" + arguments="${tmp#* }" + + # Input might be given as Windows format, start by converting to + # unix format. + new_path="$path" + + windows_path="$new_path" + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then + unix_path=`$CYGPATH -u "$windows_path"` + new_path="$unix_path" + elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then + unix_path=`$ECHO "$windows_path" | $SED -e 's,^\\(.\\):,/\\1,g' -e 's,\\\\,/,g'` + new_path="$unix_path" + fi + + + # Now try to locate executable using which + new_path=`$WHICH "$new_path" 2> /dev/null` + + if test "x$new_path" = x; then + # Oops. Which didn't find the executable. + # The splitting of arguments from the executable at a space might have been incorrect, + # since paths with space are more likely in Windows. Give it another try with the whole + # argument. + path="$complete" + arguments="EOL" + new_path="$path" + + windows_path="$new_path" + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then + unix_path=`$CYGPATH -u "$windows_path"` + new_path="$unix_path" + elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then + unix_path=`$ECHO "$windows_path" | $SED -e 's,^\\(.\\):,/\\1,g' -e 's,\\\\,/,g'` + new_path="$unix_path" + fi + + + new_path=`$WHICH "$new_path" 2> /dev/null` + + if test "x$new_path" = x; then + # It's still not found. Now this is an unrecoverable error. + { $as_echo "$as_me:${as_lineno-$LINENO}: The path of FOUND_MAKE, which resolves as \"$complete\", is not found." >&5 +$as_echo "$as_me: The path of FOUND_MAKE, which resolves as \"$complete\", is not found." >&6;} + has_space=`$ECHO "$complete" | $GREP " "` + if test "x$has_space" != x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: You might be mixing spaces in the path and extra arguments, which is not allowed." >&5 +$as_echo "$as_me: You might be mixing spaces in the path and extra arguments, which is not allowed." >&6;} + fi + as_fn_error $? "Cannot locate the the path of FOUND_MAKE" "$LINENO" 5 + fi + fi + + # Now new_path has a complete unix path to the binary + if test "x`$ECHO $new_path | $GREP ^/bin/`" != x; then + # Keep paths in /bin as-is, but remove trailing .exe if any + new_path="${new_path/%.exe/}" + # Do not save /bin paths to all_fixpath_prefixes! + else + # Not in mixed or Windows style, start by that. + new_path=`cmd //c echo $new_path` + + input_path="$new_path" + # Check if we need to convert this using DOS-style short mode. If the path + # contains just simple characters, use it. Otherwise (spaces, weird characters), + # take no chances and rewrite it. + # Note: m4 eats our [], so we need to use [ and ] instead. + has_forbidden_chars=`$ECHO "$input_path" | $GREP [^-_/:a-zA-Z0-9]` + if test "x$has_forbidden_chars" != x; then + # Now convert it to mixed DOS-style, short mode (no spaces, and / instead of \) + new_path=`cmd /c "for %A in (\"$input_path\") do @echo %~sA"|$TR \\\\\\\\ / | $TR 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` + fi + + # Output is in $new_path + + windows_path="$new_path" + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then + unix_path=`$CYGPATH -u "$windows_path"` + new_path="$unix_path" + elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then + unix_path=`$ECHO "$windows_path" | $SED -e 's,^\\(.\\):,/\\1,g' -e 's,\\\\,/,g'` + new_path="$unix_path" + fi + + # remove trailing .exe if any + new_path="${new_path/%.exe/}" + + # Save the first 10 bytes of this path to the storage, so fixpath can work. + all_fixpath_prefixes=("${all_fixpath_prefixes[@]}" "${new_path:0:10}") + fi + + else + # We're on a posix platform. Hooray! :) + # First separate the path from the arguments. This will split at the first + # space. + complete="$FOUND_MAKE" + path="${complete%% *}" + tmp="$complete EOL" + arguments="${tmp#* }" + + new_path=`$WHICH $path 2> /dev/null` + if test "x$new_path" = x; then + is_absolute_path=`$ECHO "$path" | $GREP ^/` + if test "x$is_absolute_path" != x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: Resolving FOUND_MAKE (as $path) with 'which' failed, using $path directly." >&5 +$as_echo "$as_me: Resolving FOUND_MAKE (as $path) with 'which' failed, using $path directly." >&6;} + new_path="$path" + else + { $as_echo "$as_me:${as_lineno-$LINENO}: The path of FOUND_MAKE, which resolves as \"$complete\", is not found." >&5 +$as_echo "$as_me: The path of FOUND_MAKE, which resolves as \"$complete\", is not found." >&6;} + has_space=`$ECHO "$complete" | $GREP " "` + if test "x$has_space" != x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: This might be caused by spaces in the path, which is not allowed." >&5 +$as_echo "$as_me: This might be caused by spaces in the path, which is not allowed." >&6;} + fi + as_fn_error $? "Cannot locate the the path of FOUND_MAKE" "$LINENO" 5 + fi + fi + fi + + # Now join together the path and the arguments once again + if test "x$arguments" != xEOL; then + new_complete="$new_path ${arguments% *}" + else + new_complete="$new_path" + fi + + if test "x$complete" != "x$new_complete"; then + FOUND_MAKE="$new_complete" + { $as_echo "$as_me:${as_lineno-$LINENO}: Rewriting FOUND_MAKE to \"$new_complete\"" >&5 +$as_echo "$as_me: Rewriting FOUND_MAKE to \"$new_complete\"" >&6;} + fi + + fi + fi + fi + fi + + fi + PATH=$OLD_PATH + fi + fi + + if test "x$FOUND_MAKE" = x; then + as_fn_error $? "Cannot find GNU make 3.81 or newer! Please put it in the path, or add e.g. MAKE=/opt/gmake3.81/make as argument to configure." "$LINENO" 5 + fi + fi + + MAKE=$FOUND_MAKE + + { $as_echo "$as_me:${as_lineno-$LINENO}: Using GNU make 3.81 (or later) at $FOUND_MAKE (version: $MAKE_VERSION_STRING)" >&5 +$as_echo "$as_me: Using GNU make 3.81 (or later) at $FOUND_MAKE (version: $MAKE_VERSION_STRING)" >&6;} + + + + # Test if find supports -delete + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if find supports -delete" >&5 +$as_echo_n "checking if find supports -delete... " >&6; } + FIND_DELETE="-delete" + + DELETEDIR=`$MKTEMP -d tmp.XXXXXXXXXX` || (echo Could not create temporary directory!; exit $?) + + echo Hejsan > $DELETEDIR/TestIfFindSupportsDelete + + TEST_DELETE=`$FIND "$DELETEDIR" -name TestIfFindSupportsDelete $FIND_DELETE 2>&1` + if test -f $DELETEDIR/TestIfFindSupportsDelete; then + # No, it does not. + rm $DELETEDIR/TestIfFindSupportsDelete + FIND_DELETE="-exec rm \{\} \+" + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + fi + rmdir $DELETEDIR + + + +# These tools might not be installed by default, +# need hint on how to install them. + + for ac_prog in unzip +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_path_UNZIP+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + case $UNZIP in + [\\/]* | ?:[\\/]*) + ac_cv_path_UNZIP="$UNZIP" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_path_UNZIP="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +UNZIP=$ac_cv_path_UNZIP +if test -n "$UNZIP"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $UNZIP" >&5 +$as_echo "$UNZIP" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$UNZIP" && break +done + + + if test "x$UNZIP" = x; then + if test "xunzip" = x; then + PROG_NAME=unzip + else + PROG_NAME=unzip + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: Could not find $PROG_NAME!" >&5 +$as_echo "$as_me: Could not find $PROG_NAME!" >&6;} + as_fn_error $? "Cannot continue" "$LINENO" 5 + fi + + + + for ac_prog in zip +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_path_ZIP+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + case $ZIP in + [\\/]* | ?:[\\/]*) + ac_cv_path_ZIP="$ZIP" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_path_ZIP="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +ZIP=$ac_cv_path_ZIP +if test -n "$ZIP"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ZIP" >&5 +$as_echo "$ZIP" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$ZIP" && break +done + + + if test "x$ZIP" = x; then + if test "xzip" = x; then + PROG_NAME=zip + else + PROG_NAME=zip + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: Could not find $PROG_NAME!" >&5 +$as_echo "$as_me: Could not find $PROG_NAME!" >&6;} + as_fn_error $? "Cannot continue" "$LINENO" 5 + fi + + + +# Non-required basic tools + +# Extract the first word of "ldd", so it can be a program name with args. +set dummy ldd; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_path_LDD+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + case $LDD in + [\\/]* | ?:[\\/]*) + ac_cv_path_LDD="$LDD" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_path_LDD="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +LDD=$ac_cv_path_LDD +if test -n "$LDD"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LDD" >&5 +$as_echo "$LDD" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +if test "x$LDD" = "x"; then + # List shared lib dependencies is used for + # debug output and checking for forbidden dependencies. + # We can build without it. + LDD="true" +fi +# Extract the first word of "otool", so it can be a program name with args. +set dummy otool; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_path_OTOOL+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + case $OTOOL in + [\\/]* | ?:[\\/]*) + ac_cv_path_OTOOL="$OTOOL" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_path_OTOOL="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +OTOOL=$ac_cv_path_OTOOL +if test -n "$OTOOL"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OTOOL" >&5 +$as_echo "$OTOOL" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +if test "x$OTOOL" = "x"; then + OTOOL="true" +fi +for ac_prog in readelf greadelf +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_path_READELF+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + case $READELF in + [\\/]* | ?:[\\/]*) + ac_cv_path_READELF="$READELF" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_path_READELF="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +READELF=$ac_cv_path_READELF +if test -n "$READELF"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $READELF" >&5 +$as_echo "$READELF" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$READELF" && break +done + +# Extract the first word of "hg", so it can be a program name with args. +set dummy hg; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_path_HG+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + case $HG in + [\\/]* | ?:[\\/]*) + ac_cv_path_HG="$HG" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_path_HG="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +HG=$ac_cv_path_HG +if test -n "$HG"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $HG" >&5 +$as_echo "$HG" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +# Extract the first word of "stat", so it can be a program name with args. +set dummy stat; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_path_STAT+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + case $STAT in + [\\/]* | ?:[\\/]*) + ac_cv_path_STAT="$STAT" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_path_STAT="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +STAT=$ac_cv_path_STAT +if test -n "$STAT"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $STAT" >&5 +$as_echo "$STAT" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +# Extract the first word of "time", so it can be a program name with args. +set dummy time; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_path_TIME+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + case $TIME in + [\\/]* | ?:[\\/]*) + ac_cv_path_TIME="$TIME" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_path_TIME="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +TIME=$ac_cv_path_TIME +if test -n "$TIME"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $TIME" >&5 +$as_echo "$TIME" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + +if test "x$OPENJDK_TARGET_OS" = "xwindows"; then + + for ac_prog in comm +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_path_COMM+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + case $COMM in + [\\/]* | ?:[\\/]*) + ac_cv_path_COMM="$COMM" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_path_COMM="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +COMM=$ac_cv_path_COMM +if test -n "$COMM"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $COMM" >&5 +$as_echo "$COMM" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$COMM" && break +done + + + if test "x$COMM" = x; then + if test "xcomm" = x; then + PROG_NAME=comm + else + PROG_NAME=comm + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: Could not find $PROG_NAME!" >&5 +$as_echo "$as_me: Could not find $PROG_NAME!" >&6;} + as_fn_error $? "Cannot continue" "$LINENO" 5 + fi + + +fi + + +# Check if pkg-config is available. + + +if test "x$ac_cv_env_PKG_CONFIG_set" != "xset"; then + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}pkg-config", so it can be a program name with args. +set dummy ${ac_tool_prefix}pkg-config; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_path_PKG_CONFIG+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + case $PKG_CONFIG in + [\\/]* | ?:[\\/]*) + ac_cv_path_PKG_CONFIG="$PKG_CONFIG" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_path_PKG_CONFIG="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +PKG_CONFIG=$ac_cv_path_PKG_CONFIG +if test -n "$PKG_CONFIG"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PKG_CONFIG" >&5 +$as_echo "$PKG_CONFIG" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_path_PKG_CONFIG"; then + ac_pt_PKG_CONFIG=$PKG_CONFIG + # Extract the first word of "pkg-config", so it can be a program name with args. +set dummy pkg-config; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_path_ac_pt_PKG_CONFIG+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + case $ac_pt_PKG_CONFIG in + [\\/]* | ?:[\\/]*) + ac_cv_path_ac_pt_PKG_CONFIG="$ac_pt_PKG_CONFIG" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_path_ac_pt_PKG_CONFIG="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +ac_pt_PKG_CONFIG=$ac_cv_path_ac_pt_PKG_CONFIG +if test -n "$ac_pt_PKG_CONFIG"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_pt_PKG_CONFIG" >&5 +$as_echo "$ac_pt_PKG_CONFIG" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_pt_PKG_CONFIG" = x; then + PKG_CONFIG="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + PKG_CONFIG=$ac_pt_PKG_CONFIG + fi +else + PKG_CONFIG="$ac_cv_path_PKG_CONFIG" +fi + +fi +if test -n "$PKG_CONFIG"; then + _pkg_min_version=0.9.0 + { $as_echo "$as_me:${as_lineno-$LINENO}: checking pkg-config is at least version $_pkg_min_version" >&5 +$as_echo_n "checking pkg-config is at least version $_pkg_min_version... " >&6; } + if $PKG_CONFIG --atleast-pkgconfig-version $_pkg_min_version; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + PKG_CONFIG="" + fi + +fi + +# After basic tools have been setup, we can check build os specific details. + +############################################################################### + +# Note that this is the build platform OS version! + +OS_VERSION="`uname -r | ${SED} 's!\.! !g' | ${SED} 's!-! !g'`" +OS_VERSION_MAJOR="`${ECHO} ${OS_VERSION} | ${CUT} -f 1 -d ' '`" +OS_VERSION_MINOR="`${ECHO} ${OS_VERSION} | ${CUT} -f 2 -d ' '`" +OS_VERSION_MICRO="`${ECHO} ${OS_VERSION} | ${CUT} -f 3 -d ' '`" + + + + + +# Setup builddeps, for automatic downloading of tools we need. +# This is needed before we can call BDEPS_CHECK_MODULE, which is done in +# boot-jdk setup, but we need to have basic tools setup first. + + +# Check whether --with-builddeps-conf was given. +if test "${with_builddeps_conf+set}" = set; then : + withval=$with_builddeps_conf; +fi + + + +# Check whether --with-builddeps-server was given. +if test "${with_builddeps_server+set}" = set; then : + withval=$with_builddeps_server; +fi + + + +# Check whether --with-builddeps-dir was given. +if test "${with_builddeps_dir+set}" = set; then : + withval=$with_builddeps_dir; +else + with_builddeps_dir=/localhome/builddeps +fi + + + +# Check whether --with-builddeps-group was given. +if test "${with_builddeps_group+set}" = set; then : + withval=$with_builddeps_group; +fi + + + + + if test "x$with_builddeps_server" != x || test "x$with_builddeps_conf" != x; then + if test "x$with_builddeps_conf" != x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for supplied builddeps configuration file" >&5 +$as_echo_n "checking for supplied builddeps configuration file... " >&6; } + builddepsfile=$with_builddeps_conf + if test -s $builddepsfile; then + . $builddepsfile + { $as_echo "$as_me:${as_lineno-$LINENO}: result: loaded!" >&5 +$as_echo "loaded!" >&6; } + else + as_fn_error $? "The given builddeps conf file $with_builddeps_conf could not be loaded!" "$LINENO" 5 + fi + else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for builddeps.conf files in sources..." >&5 +$as_echo_n "checking for builddeps.conf files in sources...... " >&6; } + builddepsfile=`mktemp` + touch $builddepsfile + # Put all found confs into a single file. + find ${SRC_ROOT} -name builddeps.conf -exec cat \{\} \; >> $builddepsfile + # Source the file to acquire the variables + if test -s $builddepsfile; then + . $builddepsfile + { $as_echo "$as_me:${as_lineno-$LINENO}: result: found at least one!" >&5 +$as_echo "found at least one!" >&6; } + else + as_fn_error $? "Could not find any builddeps.conf at all!" "$LINENO" 5 + fi + fi + # Create build and target names that use _ instead of "-" and ".". + # This is necessary to use them in variable names. + build_var=`echo ${OPENJDK_BUILD_AUTOCONF_NAME} | tr '-' '_' | tr '.' '_'` + target_var=`echo ${OPENJDK_TARGET_AUTOCONF_NAME} | tr '-' '_' | tr '.' '_'` + # Extract rewrite information for build and target + eval rewritten_build=\${REWRITE_${build_var}} + if test "x$rewritten_build" = x; then + rewritten_build=${OPENJDK_BUILD_AUTOCONF_NAME} + echo Build stays the same $rewritten_build + else + echo Rewriting build for builddeps into $rewritten_build + fi + eval rewritten_target=\${REWRITE_${target_var}} + if test "x$rewritten_target" = x; then + rewritten_target=${OPENJDK_TARGET_AUTOCONF_NAME} + echo Target stays the same $rewritten_target + else + echo Rewriting target for builddeps into $rewritten_target + fi + rewritten_build_var=`echo ${rewritten_build} | tr '-' '_' | tr '.' '_'` + rewritten_target_var=`echo ${rewritten_target} | tr '-' '_' | tr '.' '_'` + fi + for ac_prog in 7z unzip +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_BDEPS_UNZIP+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$BDEPS_UNZIP"; then + ac_cv_prog_BDEPS_UNZIP="$BDEPS_UNZIP" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_BDEPS_UNZIP="$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +BDEPS_UNZIP=$ac_cv_prog_BDEPS_UNZIP +if test -n "$BDEPS_UNZIP"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $BDEPS_UNZIP" >&5 +$as_echo "$BDEPS_UNZIP" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$BDEPS_UNZIP" && break +done + + if test "x$BDEPS_UNZIP" = x7z; then + BDEPS_UNZIP="7z x" + fi + + for ac_prog in wget lftp ftp +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_BDEPS_FTP+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$BDEPS_FTP"; then + ac_cv_prog_BDEPS_FTP="$BDEPS_FTP" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_BDEPS_FTP="$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +BDEPS_FTP=$ac_cv_prog_BDEPS_FTP +if test -n "$BDEPS_FTP"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $BDEPS_FTP" >&5 +$as_echo "$BDEPS_FTP" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$BDEPS_FTP" && break +done + + + +############################################################################### +# +# Determine OpenJDK variants, options and version numbers. +# +############################################################################### + +# We need build & target for this. + ############################################################################### # @@ -8159,44 +10323,47 @@ fi # Check whether --enable-openjdk-only was given. if test "${enable_openjdk_only+set}" = set; then : enableval=$enable_openjdk_only; +else + enable_openjdk_only="no" fi -if test "x$enable_openjdk_only" = "xyes"; then - OPENJDK=true -elif test "x$enable_openjdk_only" = "xno"; then - OPENJDK=false -elif test -d "$SRC_ROOT/jdk/src/closed"; then - OPENJDK=false +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for presence of closed sources" >&5 +$as_echo_n "checking for presence of closed sources... " >&6; } +if test -d "$SRC_ROOT/jdk/src/closed"; then + CLOSED_SOURCE_PRESENT=yes else + CLOSED_SOURCE_PRESENT=no +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $CLOSED_SOURCE_PRESENT" >&5 +$as_echo "$CLOSED_SOURCE_PRESENT" >&6; } + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if closed source is supressed (openjdk-only)" >&5 +$as_echo_n "checking if closed source is supressed (openjdk-only)... " >&6; } +SUPRESS_CLOSED_SOURCE="$enable_openjdk_only" +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $SUPRESS_CLOSED_SOURCE" >&5 +$as_echo "$SUPRESS_CLOSED_SOURCE" >&6; } + +if test "x$CLOSED_SOURCE_PRESENT" = xno; then + OPENJDK=true + if test "x$SUPRESS_CLOSED_SOURCE" = "xyes"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: No closed source present, --enable-openjdk-only makes no sense" >&5 +$as_echo "$as_me: WARNING: No closed source present, --enable-openjdk-only makes no sense" >&2;} + fi +else + if test "x$SUPRESS_CLOSED_SOURCE" = "xyes"; then OPENJDK=true + else + OPENJDK=false + fi fi if test "x$OPENJDK" = "xtrue"; then - SET_OPENJDK=OPENJDK=true + SET_OPENJDK="OPENJDK=true" fi -############################################################################### -# -# JIGSAW or not. The JIGSAW variable is used during the intermediate -# stage when we are building both the old style JDK and the new style modularized JDK. -# When the modularized JDK is finalized, this option will go away. -# -# Check whether --enable-jigsaw was given. -if test "${enable_jigsaw+set}" = set; then : - enableval=$enable_jigsaw; -fi - - -if test "x$enable_jigsaw" = "xyes"; then - JIGSAW=true -else - JIGSAW=false -fi - - ############################################################################### # # Should we build a JDK/JVM with headful support (ie a graphical ui)? @@ -8233,28 +10400,6 @@ $as_echo "$headful_msg" >&6; } -############################################################################### -# -# Should we compile nimbus swing L&F? We can probably remove this option -# since nimbus is officially part of javax now. -# -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to build nimbus L&F" >&5 -$as_echo_n "checking whether to build nimbus L&F... " >&6; } -# Check whether --enable-nimbus was given. -if test "${enable_nimbus+set}" = set; then : - enableval=$enable_nimbus; ENABLE_NIMBUS="${enableval}" -else - ENABLE_NIMBUS='yes' -fi - -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ENABLE_NIMBUS" >&5 -$as_echo "$ENABLE_NIMBUS" >&6; } -DISABLE_NIMBUS= -if test "x$ENABLE_NIMBUS" = xno; then - DISABLE_NIMBUS=true -fi - - # Control wether Hotspot runs Queens test after build. # Check whether --enable-hotspot-test-in-build was given. if test "${enable_hotspot_test_in_build+set}" = set; then : @@ -8293,45 +10438,27 @@ fi ############################################################################### # -# Compress jars +# Enable or disable unlimited crypto # -COMPRESS_JARS=false +# Check whether --enable-unlimited-crypto was given. +if test "${enable_unlimited_crypto+set}" = set; then : + enableval=$enable_unlimited_crypto; +else + enable_unlimited_crypto=no +fi +if test "x$enable_unlimited_crypto" = "xyes"; then + UNLIMITED_CRYPTO=true +else + UNLIMITED_CRYPTO=false +fi ############################################################################### # -# Should we compile JFR -# default no, except for on closed-jdk +# Compress jars # -ENABLE_JFR=no - -# Is the JFR source present - -# -# For closed default is yes -# -if test "x${OPENJDK}" != "xtrue"; then - ENABLE_JFR=yes -fi - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to build jfr" >&5 -$as_echo_n "checking whether to build jfr... " >&6; } -# Check whether --enable-jfr was given. -if test "${enable_jfr+set}" = set; then : - enableval=$enable_jfr; -fi - -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: ${ENABLE_JFR}" >&5 -$as_echo "${ENABLE_JFR}" >&6; } - -if test "x$ENABLE_JFR" = "xyes"; then - ENABLE_JFR=true -elif test "x$ENABLE_JFR" = "xno"; then - ENABLE_JFR=false -else - as_fn_error $? "Invalid argument to --enable-jfr" "$LINENO" 5 -fi +COMPRESS_JARS=false @@ -8354,6 +10481,8 @@ fi + + COPYRIGHT_YEAR=`date +'%Y'` @@ -8381,7 +10510,7 @@ else BUILD_DATE=`date '+%Y_%m_%d_%H_%M'` # Avoid [:alnum:] since it depends on the locale. CLEAN_USERNAME=`echo "$USER" | $TR -d -c 'abcdefghijklmnopqrstuvqxyz0123456789'` - USER_RELEASE_SUFFIX=`echo "${CLEAN_USERNAME}_${BUILD_DATE}" | $TR 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvqxyz'` + USER_RELEASE_SUFFIX=`echo "${CLEAN_USERNAME}_${BUILD_DATE}" | $TR 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` FULL_VERSION="${RELEASE}-${USER_RELEASE_SUFFIX}-${JDK_BUILD_NUMBER}" fi @@ -8389,93 +10518,6 @@ COOKED_BUILD_NUMBER=`$ECHO $JDK_BUILD_NUMBER | $SED -e 's/^b//' -e 's/^0//'` -# To properly create a configuration name, we need to have the OpenJDK target -# and options (variants and debug level) parsed. - - - -# Check whether --with-conf-name was given. -if test "${with_conf_name+set}" = set; then : - withval=$with_conf_name; CONF_NAME=${with_conf_name} -fi - - -# Test from where we are running configure, in or outside of src root. -if test "x$CURDIR" = "x$SRC_ROOT" || test "x$CURDIR" = "x$SRC_ROOT/common" || test "x$CURDIR" = "x$SRC_ROOT/common/autoconf" || test "x$CURDIR" = "x$SRC_ROOT/common/makefiles" ; then - # We are running configure from the src root. - # Create a default ./build/target-variant-debuglevel output root. - if test "x${CONF_NAME}" = x; then - CONF_NAME="${OPENJDK_TARGET_OS}-${OPENJDK_TARGET_CPU}-${JDK_VARIANT}-${ANDED_JVM_VARIANTS}-${DEBUG_LEVEL}" - fi - OUTPUT_ROOT="$SRC_ROOT/build/${CONF_NAME}" - mkdir -p "$OUTPUT_ROOT" - if test ! -d "$OUTPUT_ROOT"; then - as_fn_error $? "Could not create build directory $OUTPUT_ROOT" "$LINENO" 5 - fi -else - # We are running configure from outside of the src dir. - # Then use the current directory as output dir! - # If configuration is situated in normal build directory, just use the build - # directory name as configuration name, otherwise use the complete path. - if test "x${CONF_NAME}" = x; then - CONF_NAME=`$ECHO $CURDIR | $SED -e "s!^${SRC_ROOT}/build/!!"` - fi - OUTPUT_ROOT="$CURDIR" -fi - - - # Fail with message the path to the output root if var OUTPUT_ROOT contains a path with no spaces in it. - # Unless on Windows, where we can rewrite the path. - HAS_SPACE=`echo "$OUTPUT_ROOT" | grep " "` - if test "x$HAS_SPACE" != x; then - if test "x$OPENJDK_BUILD_OS" = "xwindows"; then - # First convert it to DOS-style, short mode (no spaces) - OUTPUT_ROOT=`$CYGPATH -s -m -a "$OUTPUT_ROOT"` - # Now it's case insensitive; let's make it lowercase to improve readability - OUTPUT_ROOT=`$ECHO "$OUTPUT_ROOT" | $TR 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvqxyz'` - # Now convert it back to Unix-stile (cygpath) - OUTPUT_ROOT=`$CYGPATH -u "$OUTPUT_ROOT"` - else - as_fn_error $? "You cannot have spaces in the path to the output root! \"$OUTPUT_ROOT\"" "$LINENO" 5 - fi - fi - - -SPEC=$OUTPUT_ROOT/spec.gmk - -CONF_NAME=$CONF_NAME - -OUTPUT_ROOT=$OUTPUT_ROOT - - -# Most of the probed defines are put into config.h -ac_config_headers="$ac_config_headers $OUTPUT_ROOT/config.h:$AUTOCONF_DIR/config.h.in" - -# The spec.gmk file contains all variables for the make system. -ac_config_files="$ac_config_files $OUTPUT_ROOT/spec.gmk:$AUTOCONF_DIR/spec.gmk.in" - -# The hotspot-spec.gmk file contains legacy variables for the hotspot make system. -ac_config_files="$ac_config_files $OUTPUT_ROOT/hotspot-spec.gmk:$AUTOCONF_DIR/hotspot-spec.gmk.in" - -# The bootcycle-spec.gmk file contains support for boot cycle builds. -ac_config_files="$ac_config_files $OUTPUT_ROOT/bootcycle-spec.gmk:$AUTOCONF_DIR/bootcycle-spec.gmk.in" - -# The compare.sh is used to compare the build output to other builds. -ac_config_files="$ac_config_files $OUTPUT_ROOT/compare.sh:$AUTOCONF_DIR/compare.sh.in" - -# Spec.sh is currently used by compare-objects.sh -ac_config_files="$ac_config_files $OUTPUT_ROOT/spec.sh:$AUTOCONF_DIR/spec.sh.in" - -# The generated Makefile knows where the spec.gmk is and where the source is. -# You can run make from the OUTPUT_ROOT, or from the top-level Makefile -# which will look for generated configurations -ac_config_files="$ac_config_files $OUTPUT_ROOT/Makefile:$AUTOCONF_DIR/Makefile.in" - - -# Save the arguments given to us -echo "$CONFIGURE_COMMAND_LINE" > $OUTPUT_ROOT/configure-arguments - - ############################################################################### # # Setup BootJDK, used to bootstrap the build. @@ -8546,26 +10588,133 @@ $as_echo "$as_me: (Your Boot JDK must be version 7 or 8)" >&6;} # We're done! :-) BOOT_JDK_FOUND=yes - # Fail with message the path to the Boot JDK if var BOOT_JDK contains a path with no spaces in it. - # Unless on Windows, where we can rewrite the path. - HAS_SPACE=`echo "$BOOT_JDK" | grep " "` - if test "x$HAS_SPACE" != x; then - if test "x$OPENJDK_BUILD_OS" = "xwindows"; then - # First convert it to DOS-style, short mode (no spaces) - BOOT_JDK=`$CYGPATH -s -m -a "$BOOT_JDK"` - # Now it's case insensitive; let's make it lowercase to improve readability - BOOT_JDK=`$ECHO "$BOOT_JDK" | $TR 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvqxyz'` - # Now convert it back to Unix-stile (cygpath) - BOOT_JDK=`$CYGPATH -u "$BOOT_JDK"` - else - as_fn_error $? "You cannot have spaces in the path to the Boot JDK! \"$BOOT_JDK\"" "$LINENO" 5 - fi + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then + + # Input might be given as Windows format, start by converting to + # unix format. + path="$BOOT_JDK" + new_path=`$CYGPATH -u "$path"` + + # Cygwin tries to hide some aspects of the Windows file system, such that binaries are + # named .exe but called without that suffix. Therefore, "foo" and "foo.exe" are considered + # the same file, most of the time (as in "test -f"). But not when running cygpath -s, then + # "foo.exe" is OK but "foo" is an error. + # + # This test is therefore slightly more accurate than "test -f" to check for file precense. + # It is also a way to make sure we got the proper file name for the real test later on. + test_shortpath=`$CYGPATH -s -m "$new_path" 2> /dev/null` + if test "x$test_shortpath" = x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: The path of BOOT_JDK, which resolves as \"$path\", is invalid." >&5 +$as_echo "$as_me: The path of BOOT_JDK, which resolves as \"$path\", is invalid." >&6;} + as_fn_error $? "Cannot locate the the path of BOOT_JDK" "$LINENO" 5 + fi + + # Call helper function which possibly converts this using DOS-style short mode. + # If so, the updated path is stored in $new_path. + + input_path="$new_path" + # Check if we need to convert this using DOS-style short mode. If the path + # contains just simple characters, use it. Otherwise (spaces, weird characters), + # take no chances and rewrite it. + # Note: m4 eats our [], so we need to use [ and ] instead. + has_forbidden_chars=`$ECHO "$input_path" | $GREP [^-._/a-zA-Z0-9]` + if test "x$has_forbidden_chars" != x; then + # Now convert it to mixed DOS-style, short mode (no spaces, and / instead of \) + shortmode_path=`$CYGPATH -s -m -a "$input_path"` + path_after_shortmode=`$CYGPATH -u "$shortmode_path"` + if test "x$path_after_shortmode" != "x$input_to_shortpath"; then + # Going to short mode and back again did indeed matter. Since short mode is + # case insensitive, let's make it lowercase to improve readability. + shortmode_path=`$ECHO "$shortmode_path" | $TR 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` + # Now convert it back to Unix-stile (cygpath) + input_path=`$CYGPATH -u "$shortmode_path"` + new_path="$input_path" fi + fi + + test_cygdrive_prefix=`$ECHO $input_path | $GREP ^/cygdrive/` + if test "x$test_cygdrive_prefix" = x; then + # As a simple fix, exclude /usr/bin since it's not a real path. + if test "x`$ECHO $new_path | $GREP ^/usr/bin/`" = x; then + # The path is in a Cygwin special directory (e.g. /home). We need this converted to + # a path prefixed by /cygdrive for fixpath to work. + new_path="$CYGWIN_ROOT_PATH$input_path" + fi + fi + + + if test "x$path" != "x$new_path"; then + BOOT_JDK="$new_path" + { $as_echo "$as_me:${as_lineno-$LINENO}: Rewriting BOOT_JDK to \"$new_path\"" >&5 +$as_echo "$as_me: Rewriting BOOT_JDK to \"$new_path\"" >&6;} + fi + + elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then + + path="$BOOT_JDK" + has_colon=`$ECHO $path | $GREP ^.:` + new_path="$path" + if test "x$has_colon" = x; then + # Not in mixed or Windows style, start by that. + new_path=`cmd //c echo $path` + fi + + + input_path="$new_path" + # Check if we need to convert this using DOS-style short mode. If the path + # contains just simple characters, use it. Otherwise (spaces, weird characters), + # take no chances and rewrite it. + # Note: m4 eats our [], so we need to use [ and ] instead. + has_forbidden_chars=`$ECHO "$input_path" | $GREP [^-_/:a-zA-Z0-9]` + if test "x$has_forbidden_chars" != x; then + # Now convert it to mixed DOS-style, short mode (no spaces, and / instead of \) + new_path=`cmd /c "for %A in (\"$input_path\") do @echo %~sA"|$TR \\\\\\\\ / | $TR 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` + fi + + + windows_path="$new_path" + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then + unix_path=`$CYGPATH -u "$windows_path"` + new_path="$unix_path" + elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then + unix_path=`$ECHO "$windows_path" | $SED -e 's,^\\(.\\):,/\\1,g' -e 's,\\\\,/,g'` + new_path="$unix_path" + fi + + if test "x$path" != "x$new_path"; then + BOOT_JDK="$new_path" + { $as_echo "$as_me:${as_lineno-$LINENO}: Rewriting BOOT_JDK to \"$new_path\"" >&5 +$as_echo "$as_me: Rewriting BOOT_JDK to \"$new_path\"" >&6;} + fi + + # Save the first 10 bytes of this path to the storage, so fixpath can work. + all_fixpath_prefixes=("${all_fixpath_prefixes[@]}" "${new_path:0:10}") + + else + # We're on a posix platform. Hooray! :) + path="$BOOT_JDK" + + if test ! -f "$path" && test ! -d "$path"; then + as_fn_error $? "The path of BOOT_JDK, which resolves as \"$path\", is not found." "$LINENO" 5 + fi + + has_space=`$ECHO "$path" | $GREP " "` + if test "x$has_space" != x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: The path of BOOT_JDK, which resolves as \"$path\", is invalid." >&5 +$as_echo "$as_me: The path of BOOT_JDK, which resolves as \"$path\", is invalid." >&6;} + as_fn_error $? "Spaces are not allowed in this path." "$LINENO" 5 + fi + fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for Boot JDK" >&5 $as_echo_n "checking for Boot JDK... " >&6; } - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $BOOT_JDK ($BOOT_JDK_VERSION)" >&5 -$as_echo "$BOOT_JDK ($BOOT_JDK_VERSION)" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $BOOT_JDK" >&5 +$as_echo "$BOOT_JDK" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: checking Boot JDK version" >&5 +$as_echo_n "checking Boot JDK version... " >&6; } + BOOT_JDK_VERSION=`"$BOOT_JDK/bin/java" -version 2>&1 | $TR '\n\r' ' '` + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $BOOT_JDK_VERSION" >&5 +$as_echo "$BOOT_JDK_VERSION" >&6; } fi # end check jdk version fi # end check rt.jar fi # end check javac @@ -8768,26 +10917,133 @@ $as_echo "$as_me: (Your Boot JDK must be version 7 or 8)" >&6;} # We're done! :-) BOOT_JDK_FOUND=yes - # Fail with message the path to the Boot JDK if var BOOT_JDK contains a path with no spaces in it. - # Unless on Windows, where we can rewrite the path. - HAS_SPACE=`echo "$BOOT_JDK" | grep " "` - if test "x$HAS_SPACE" != x; then - if test "x$OPENJDK_BUILD_OS" = "xwindows"; then - # First convert it to DOS-style, short mode (no spaces) - BOOT_JDK=`$CYGPATH -s -m -a "$BOOT_JDK"` - # Now it's case insensitive; let's make it lowercase to improve readability - BOOT_JDK=`$ECHO "$BOOT_JDK" | $TR 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvqxyz'` - # Now convert it back to Unix-stile (cygpath) - BOOT_JDK=`$CYGPATH -u "$BOOT_JDK"` - else - as_fn_error $? "You cannot have spaces in the path to the Boot JDK! \"$BOOT_JDK\"" "$LINENO" 5 - fi + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then + + # Input might be given as Windows format, start by converting to + # unix format. + path="$BOOT_JDK" + new_path=`$CYGPATH -u "$path"` + + # Cygwin tries to hide some aspects of the Windows file system, such that binaries are + # named .exe but called without that suffix. Therefore, "foo" and "foo.exe" are considered + # the same file, most of the time (as in "test -f"). But not when running cygpath -s, then + # "foo.exe" is OK but "foo" is an error. + # + # This test is therefore slightly more accurate than "test -f" to check for file precense. + # It is also a way to make sure we got the proper file name for the real test later on. + test_shortpath=`$CYGPATH -s -m "$new_path" 2> /dev/null` + if test "x$test_shortpath" = x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: The path of BOOT_JDK, which resolves as \"$path\", is invalid." >&5 +$as_echo "$as_me: The path of BOOT_JDK, which resolves as \"$path\", is invalid." >&6;} + as_fn_error $? "Cannot locate the the path of BOOT_JDK" "$LINENO" 5 + fi + + # Call helper function which possibly converts this using DOS-style short mode. + # If so, the updated path is stored in $new_path. + + input_path="$new_path" + # Check if we need to convert this using DOS-style short mode. If the path + # contains just simple characters, use it. Otherwise (spaces, weird characters), + # take no chances and rewrite it. + # Note: m4 eats our [], so we need to use [ and ] instead. + has_forbidden_chars=`$ECHO "$input_path" | $GREP [^-._/a-zA-Z0-9]` + if test "x$has_forbidden_chars" != x; then + # Now convert it to mixed DOS-style, short mode (no spaces, and / instead of \) + shortmode_path=`$CYGPATH -s -m -a "$input_path"` + path_after_shortmode=`$CYGPATH -u "$shortmode_path"` + if test "x$path_after_shortmode" != "x$input_to_shortpath"; then + # Going to short mode and back again did indeed matter. Since short mode is + # case insensitive, let's make it lowercase to improve readability. + shortmode_path=`$ECHO "$shortmode_path" | $TR 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` + # Now convert it back to Unix-stile (cygpath) + input_path=`$CYGPATH -u "$shortmode_path"` + new_path="$input_path" fi + fi + + test_cygdrive_prefix=`$ECHO $input_path | $GREP ^/cygdrive/` + if test "x$test_cygdrive_prefix" = x; then + # As a simple fix, exclude /usr/bin since it's not a real path. + if test "x`$ECHO $new_path | $GREP ^/usr/bin/`" = x; then + # The path is in a Cygwin special directory (e.g. /home). We need this converted to + # a path prefixed by /cygdrive for fixpath to work. + new_path="$CYGWIN_ROOT_PATH$input_path" + fi + fi + + + if test "x$path" != "x$new_path"; then + BOOT_JDK="$new_path" + { $as_echo "$as_me:${as_lineno-$LINENO}: Rewriting BOOT_JDK to \"$new_path\"" >&5 +$as_echo "$as_me: Rewriting BOOT_JDK to \"$new_path\"" >&6;} + fi + + elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then + + path="$BOOT_JDK" + has_colon=`$ECHO $path | $GREP ^.:` + new_path="$path" + if test "x$has_colon" = x; then + # Not in mixed or Windows style, start by that. + new_path=`cmd //c echo $path` + fi + + + input_path="$new_path" + # Check if we need to convert this using DOS-style short mode. If the path + # contains just simple characters, use it. Otherwise (spaces, weird characters), + # take no chances and rewrite it. + # Note: m4 eats our [], so we need to use [ and ] instead. + has_forbidden_chars=`$ECHO "$input_path" | $GREP [^-_/:a-zA-Z0-9]` + if test "x$has_forbidden_chars" != x; then + # Now convert it to mixed DOS-style, short mode (no spaces, and / instead of \) + new_path=`cmd /c "for %A in (\"$input_path\") do @echo %~sA"|$TR \\\\\\\\ / | $TR 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` + fi + + + windows_path="$new_path" + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then + unix_path=`$CYGPATH -u "$windows_path"` + new_path="$unix_path" + elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then + unix_path=`$ECHO "$windows_path" | $SED -e 's,^\\(.\\):,/\\1,g' -e 's,\\\\,/,g'` + new_path="$unix_path" + fi + + if test "x$path" != "x$new_path"; then + BOOT_JDK="$new_path" + { $as_echo "$as_me:${as_lineno-$LINENO}: Rewriting BOOT_JDK to \"$new_path\"" >&5 +$as_echo "$as_me: Rewriting BOOT_JDK to \"$new_path\"" >&6;} + fi + + # Save the first 10 bytes of this path to the storage, so fixpath can work. + all_fixpath_prefixes=("${all_fixpath_prefixes[@]}" "${new_path:0:10}") + + else + # We're on a posix platform. Hooray! :) + path="$BOOT_JDK" + + if test ! -f "$path" && test ! -d "$path"; then + as_fn_error $? "The path of BOOT_JDK, which resolves as \"$path\", is not found." "$LINENO" 5 + fi + + has_space=`$ECHO "$path" | $GREP " "` + if test "x$has_space" != x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: The path of BOOT_JDK, which resolves as \"$path\", is invalid." >&5 +$as_echo "$as_me: The path of BOOT_JDK, which resolves as \"$path\", is invalid." >&6;} + as_fn_error $? "Spaces are not allowed in this path." "$LINENO" 5 + fi + fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for Boot JDK" >&5 $as_echo_n "checking for Boot JDK... " >&6; } - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $BOOT_JDK ($BOOT_JDK_VERSION)" >&5 -$as_echo "$BOOT_JDK ($BOOT_JDK_VERSION)" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $BOOT_JDK" >&5 +$as_echo "$BOOT_JDK" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: checking Boot JDK version" >&5 +$as_echo_n "checking Boot JDK version... " >&6; } + BOOT_JDK_VERSION=`"$BOOT_JDK/bin/java" -version 2>&1 | $TR '\n\r' ' '` + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $BOOT_JDK_VERSION" >&5 +$as_echo "$BOOT_JDK_VERSION" >&6; } fi # end check jdk version fi # end check rt.jar fi # end check javac @@ -8802,12 +11058,126 @@ $as_echo "$BOOT_JDK ($BOOT_JDK_VERSION)" >&6; } # Now execute the test if test "x$JAVA_HOME" != x; then - if test "x$OPENJDK_TARGET_OS" = xwindows; then - # On Windows, JAVA_HOME is likely in DOS-style - JAVA_HOME_PROCESSED="`$CYGPATH -u "$JAVA_HOME"`" - else - JAVA_HOME_PROCESSED="$JAVA_HOME" - fi + JAVA_HOME_PROCESSED="$JAVA_HOME" + + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then + + # Input might be given as Windows format, start by converting to + # unix format. + path="$JAVA_HOME_PROCESSED" + new_path=`$CYGPATH -u "$path"` + + # Cygwin tries to hide some aspects of the Windows file system, such that binaries are + # named .exe but called without that suffix. Therefore, "foo" and "foo.exe" are considered + # the same file, most of the time (as in "test -f"). But not when running cygpath -s, then + # "foo.exe" is OK but "foo" is an error. + # + # This test is therefore slightly more accurate than "test -f" to check for file precense. + # It is also a way to make sure we got the proper file name for the real test later on. + test_shortpath=`$CYGPATH -s -m "$new_path" 2> /dev/null` + if test "x$test_shortpath" = x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: The path of JAVA_HOME_PROCESSED, which resolves as \"$path\", is invalid." >&5 +$as_echo "$as_me: The path of JAVA_HOME_PROCESSED, which resolves as \"$path\", is invalid." >&6;} + as_fn_error $? "Cannot locate the the path of JAVA_HOME_PROCESSED" "$LINENO" 5 + fi + + # Call helper function which possibly converts this using DOS-style short mode. + # If so, the updated path is stored in $new_path. + + input_path="$new_path" + # Check if we need to convert this using DOS-style short mode. If the path + # contains just simple characters, use it. Otherwise (spaces, weird characters), + # take no chances and rewrite it. + # Note: m4 eats our [], so we need to use [ and ] instead. + has_forbidden_chars=`$ECHO "$input_path" | $GREP [^-._/a-zA-Z0-9]` + if test "x$has_forbidden_chars" != x; then + # Now convert it to mixed DOS-style, short mode (no spaces, and / instead of \) + shortmode_path=`$CYGPATH -s -m -a "$input_path"` + path_after_shortmode=`$CYGPATH -u "$shortmode_path"` + if test "x$path_after_shortmode" != "x$input_to_shortpath"; then + # Going to short mode and back again did indeed matter. Since short mode is + # case insensitive, let's make it lowercase to improve readability. + shortmode_path=`$ECHO "$shortmode_path" | $TR 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` + # Now convert it back to Unix-stile (cygpath) + input_path=`$CYGPATH -u "$shortmode_path"` + new_path="$input_path" + fi + fi + + test_cygdrive_prefix=`$ECHO $input_path | $GREP ^/cygdrive/` + if test "x$test_cygdrive_prefix" = x; then + # As a simple fix, exclude /usr/bin since it's not a real path. + if test "x`$ECHO $new_path | $GREP ^/usr/bin/`" = x; then + # The path is in a Cygwin special directory (e.g. /home). We need this converted to + # a path prefixed by /cygdrive for fixpath to work. + new_path="$CYGWIN_ROOT_PATH$input_path" + fi + fi + + + if test "x$path" != "x$new_path"; then + JAVA_HOME_PROCESSED="$new_path" + { $as_echo "$as_me:${as_lineno-$LINENO}: Rewriting JAVA_HOME_PROCESSED to \"$new_path\"" >&5 +$as_echo "$as_me: Rewriting JAVA_HOME_PROCESSED to \"$new_path\"" >&6;} + fi + + elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then + + path="$JAVA_HOME_PROCESSED" + has_colon=`$ECHO $path | $GREP ^.:` + new_path="$path" + if test "x$has_colon" = x; then + # Not in mixed or Windows style, start by that. + new_path=`cmd //c echo $path` + fi + + + input_path="$new_path" + # Check if we need to convert this using DOS-style short mode. If the path + # contains just simple characters, use it. Otherwise (spaces, weird characters), + # take no chances and rewrite it. + # Note: m4 eats our [], so we need to use [ and ] instead. + has_forbidden_chars=`$ECHO "$input_path" | $GREP [^-_/:a-zA-Z0-9]` + if test "x$has_forbidden_chars" != x; then + # Now convert it to mixed DOS-style, short mode (no spaces, and / instead of \) + new_path=`cmd /c "for %A in (\"$input_path\") do @echo %~sA"|$TR \\\\\\\\ / | $TR 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` + fi + + + windows_path="$new_path" + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then + unix_path=`$CYGPATH -u "$windows_path"` + new_path="$unix_path" + elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then + unix_path=`$ECHO "$windows_path" | $SED -e 's,^\\(.\\):,/\\1,g' -e 's,\\\\,/,g'` + new_path="$unix_path" + fi + + if test "x$path" != "x$new_path"; then + JAVA_HOME_PROCESSED="$new_path" + { $as_echo "$as_me:${as_lineno-$LINENO}: Rewriting JAVA_HOME_PROCESSED to \"$new_path\"" >&5 +$as_echo "$as_me: Rewriting JAVA_HOME_PROCESSED to \"$new_path\"" >&6;} + fi + + # Save the first 10 bytes of this path to the storage, so fixpath can work. + all_fixpath_prefixes=("${all_fixpath_prefixes[@]}" "${new_path:0:10}") + + else + # We're on a posix platform. Hooray! :) + path="$JAVA_HOME_PROCESSED" + + if test ! -f "$path" && test ! -d "$path"; then + as_fn_error $? "The path of JAVA_HOME_PROCESSED, which resolves as \"$path\", is not found." "$LINENO" 5 + fi + + has_space=`$ECHO "$path" | $GREP " "` + if test "x$has_space" != x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: The path of JAVA_HOME_PROCESSED, which resolves as \"$path\", is invalid." >&5 +$as_echo "$as_me: The path of JAVA_HOME_PROCESSED, which resolves as \"$path\", is invalid." >&6;} + as_fn_error $? "Spaces are not allowed in this path." "$LINENO" 5 + fi + fi + if test ! -d "$JAVA_HOME_PROCESSED"; then { $as_echo "$as_me:${as_lineno-$LINENO}: Your JAVA_HOME points to a non-existing directory!" >&5 $as_echo "$as_me: Your JAVA_HOME points to a non-existing directory!" >&6;} @@ -8859,26 +11229,133 @@ $as_echo "$as_me: (Your Boot JDK must be version 7 or 8)" >&6;} # We're done! :-) BOOT_JDK_FOUND=yes - # Fail with message the path to the Boot JDK if var BOOT_JDK contains a path with no spaces in it. - # Unless on Windows, where we can rewrite the path. - HAS_SPACE=`echo "$BOOT_JDK" | grep " "` - if test "x$HAS_SPACE" != x; then - if test "x$OPENJDK_BUILD_OS" = "xwindows"; then - # First convert it to DOS-style, short mode (no spaces) - BOOT_JDK=`$CYGPATH -s -m -a "$BOOT_JDK"` - # Now it's case insensitive; let's make it lowercase to improve readability - BOOT_JDK=`$ECHO "$BOOT_JDK" | $TR 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvqxyz'` - # Now convert it back to Unix-stile (cygpath) - BOOT_JDK=`$CYGPATH -u "$BOOT_JDK"` - else - as_fn_error $? "You cannot have spaces in the path to the Boot JDK! \"$BOOT_JDK\"" "$LINENO" 5 - fi + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then + + # Input might be given as Windows format, start by converting to + # unix format. + path="$BOOT_JDK" + new_path=`$CYGPATH -u "$path"` + + # Cygwin tries to hide some aspects of the Windows file system, such that binaries are + # named .exe but called without that suffix. Therefore, "foo" and "foo.exe" are considered + # the same file, most of the time (as in "test -f"). But not when running cygpath -s, then + # "foo.exe" is OK but "foo" is an error. + # + # This test is therefore slightly more accurate than "test -f" to check for file precense. + # It is also a way to make sure we got the proper file name for the real test later on. + test_shortpath=`$CYGPATH -s -m "$new_path" 2> /dev/null` + if test "x$test_shortpath" = x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: The path of BOOT_JDK, which resolves as \"$path\", is invalid." >&5 +$as_echo "$as_me: The path of BOOT_JDK, which resolves as \"$path\", is invalid." >&6;} + as_fn_error $? "Cannot locate the the path of BOOT_JDK" "$LINENO" 5 + fi + + # Call helper function which possibly converts this using DOS-style short mode. + # If so, the updated path is stored in $new_path. + + input_path="$new_path" + # Check if we need to convert this using DOS-style short mode. If the path + # contains just simple characters, use it. Otherwise (spaces, weird characters), + # take no chances and rewrite it. + # Note: m4 eats our [], so we need to use [ and ] instead. + has_forbidden_chars=`$ECHO "$input_path" | $GREP [^-._/a-zA-Z0-9]` + if test "x$has_forbidden_chars" != x; then + # Now convert it to mixed DOS-style, short mode (no spaces, and / instead of \) + shortmode_path=`$CYGPATH -s -m -a "$input_path"` + path_after_shortmode=`$CYGPATH -u "$shortmode_path"` + if test "x$path_after_shortmode" != "x$input_to_shortpath"; then + # Going to short mode and back again did indeed matter. Since short mode is + # case insensitive, let's make it lowercase to improve readability. + shortmode_path=`$ECHO "$shortmode_path" | $TR 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` + # Now convert it back to Unix-stile (cygpath) + input_path=`$CYGPATH -u "$shortmode_path"` + new_path="$input_path" fi + fi + + test_cygdrive_prefix=`$ECHO $input_path | $GREP ^/cygdrive/` + if test "x$test_cygdrive_prefix" = x; then + # As a simple fix, exclude /usr/bin since it's not a real path. + if test "x`$ECHO $new_path | $GREP ^/usr/bin/`" = x; then + # The path is in a Cygwin special directory (e.g. /home). We need this converted to + # a path prefixed by /cygdrive for fixpath to work. + new_path="$CYGWIN_ROOT_PATH$input_path" + fi + fi + + + if test "x$path" != "x$new_path"; then + BOOT_JDK="$new_path" + { $as_echo "$as_me:${as_lineno-$LINENO}: Rewriting BOOT_JDK to \"$new_path\"" >&5 +$as_echo "$as_me: Rewriting BOOT_JDK to \"$new_path\"" >&6;} + fi + + elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then + + path="$BOOT_JDK" + has_colon=`$ECHO $path | $GREP ^.:` + new_path="$path" + if test "x$has_colon" = x; then + # Not in mixed or Windows style, start by that. + new_path=`cmd //c echo $path` + fi + + + input_path="$new_path" + # Check if we need to convert this using DOS-style short mode. If the path + # contains just simple characters, use it. Otherwise (spaces, weird characters), + # take no chances and rewrite it. + # Note: m4 eats our [], so we need to use [ and ] instead. + has_forbidden_chars=`$ECHO "$input_path" | $GREP [^-_/:a-zA-Z0-9]` + if test "x$has_forbidden_chars" != x; then + # Now convert it to mixed DOS-style, short mode (no spaces, and / instead of \) + new_path=`cmd /c "for %A in (\"$input_path\") do @echo %~sA"|$TR \\\\\\\\ / | $TR 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` + fi + + + windows_path="$new_path" + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then + unix_path=`$CYGPATH -u "$windows_path"` + new_path="$unix_path" + elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then + unix_path=`$ECHO "$windows_path" | $SED -e 's,^\\(.\\):,/\\1,g' -e 's,\\\\,/,g'` + new_path="$unix_path" + fi + + if test "x$path" != "x$new_path"; then + BOOT_JDK="$new_path" + { $as_echo "$as_me:${as_lineno-$LINENO}: Rewriting BOOT_JDK to \"$new_path\"" >&5 +$as_echo "$as_me: Rewriting BOOT_JDK to \"$new_path\"" >&6;} + fi + + # Save the first 10 bytes of this path to the storage, so fixpath can work. + all_fixpath_prefixes=("${all_fixpath_prefixes[@]}" "${new_path:0:10}") + + else + # We're on a posix platform. Hooray! :) + path="$BOOT_JDK" + + if test ! -f "$path" && test ! -d "$path"; then + as_fn_error $? "The path of BOOT_JDK, which resolves as \"$path\", is not found." "$LINENO" 5 + fi + + has_space=`$ECHO "$path" | $GREP " "` + if test "x$has_space" != x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: The path of BOOT_JDK, which resolves as \"$path\", is invalid." >&5 +$as_echo "$as_me: The path of BOOT_JDK, which resolves as \"$path\", is invalid." >&6;} + as_fn_error $? "Spaces are not allowed in this path." "$LINENO" 5 + fi + fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for Boot JDK" >&5 $as_echo_n "checking for Boot JDK... " >&6; } - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $BOOT_JDK ($BOOT_JDK_VERSION)" >&5 -$as_echo "$BOOT_JDK ($BOOT_JDK_VERSION)" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $BOOT_JDK" >&5 +$as_echo "$BOOT_JDK" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: checking Boot JDK version" >&5 +$as_echo_n "checking Boot JDK version... " >&6; } + BOOT_JDK_VERSION=`"$BOOT_JDK/bin/java" -version 2>&1 | $TR '\n\r' ' '` + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $BOOT_JDK_VERSION" >&5 +$as_echo "$BOOT_JDK_VERSION" >&6; } fi # end check jdk version fi # end check rt.jar fi # end check javac @@ -8937,26 +11414,133 @@ $as_echo "$as_me: (Your Boot JDK must be version 7 or 8)" >&6;} # We're done! :-) BOOT_JDK_FOUND=yes - # Fail with message the path to the Boot JDK if var BOOT_JDK contains a path with no spaces in it. - # Unless on Windows, where we can rewrite the path. - HAS_SPACE=`echo "$BOOT_JDK" | grep " "` - if test "x$HAS_SPACE" != x; then - if test "x$OPENJDK_BUILD_OS" = "xwindows"; then - # First convert it to DOS-style, short mode (no spaces) - BOOT_JDK=`$CYGPATH -s -m -a "$BOOT_JDK"` - # Now it's case insensitive; let's make it lowercase to improve readability - BOOT_JDK=`$ECHO "$BOOT_JDK" | $TR 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvqxyz'` - # Now convert it back to Unix-stile (cygpath) - BOOT_JDK=`$CYGPATH -u "$BOOT_JDK"` - else - as_fn_error $? "You cannot have spaces in the path to the Boot JDK! \"$BOOT_JDK\"" "$LINENO" 5 - fi + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then + + # Input might be given as Windows format, start by converting to + # unix format. + path="$BOOT_JDK" + new_path=`$CYGPATH -u "$path"` + + # Cygwin tries to hide some aspects of the Windows file system, such that binaries are + # named .exe but called without that suffix. Therefore, "foo" and "foo.exe" are considered + # the same file, most of the time (as in "test -f"). But not when running cygpath -s, then + # "foo.exe" is OK but "foo" is an error. + # + # This test is therefore slightly more accurate than "test -f" to check for file precense. + # It is also a way to make sure we got the proper file name for the real test later on. + test_shortpath=`$CYGPATH -s -m "$new_path" 2> /dev/null` + if test "x$test_shortpath" = x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: The path of BOOT_JDK, which resolves as \"$path\", is invalid." >&5 +$as_echo "$as_me: The path of BOOT_JDK, which resolves as \"$path\", is invalid." >&6;} + as_fn_error $? "Cannot locate the the path of BOOT_JDK" "$LINENO" 5 + fi + + # Call helper function which possibly converts this using DOS-style short mode. + # If so, the updated path is stored in $new_path. + + input_path="$new_path" + # Check if we need to convert this using DOS-style short mode. If the path + # contains just simple characters, use it. Otherwise (spaces, weird characters), + # take no chances and rewrite it. + # Note: m4 eats our [], so we need to use [ and ] instead. + has_forbidden_chars=`$ECHO "$input_path" | $GREP [^-._/a-zA-Z0-9]` + if test "x$has_forbidden_chars" != x; then + # Now convert it to mixed DOS-style, short mode (no spaces, and / instead of \) + shortmode_path=`$CYGPATH -s -m -a "$input_path"` + path_after_shortmode=`$CYGPATH -u "$shortmode_path"` + if test "x$path_after_shortmode" != "x$input_to_shortpath"; then + # Going to short mode and back again did indeed matter. Since short mode is + # case insensitive, let's make it lowercase to improve readability. + shortmode_path=`$ECHO "$shortmode_path" | $TR 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` + # Now convert it back to Unix-stile (cygpath) + input_path=`$CYGPATH -u "$shortmode_path"` + new_path="$input_path" fi + fi + + test_cygdrive_prefix=`$ECHO $input_path | $GREP ^/cygdrive/` + if test "x$test_cygdrive_prefix" = x; then + # As a simple fix, exclude /usr/bin since it's not a real path. + if test "x`$ECHO $new_path | $GREP ^/usr/bin/`" = x; then + # The path is in a Cygwin special directory (e.g. /home). We need this converted to + # a path prefixed by /cygdrive for fixpath to work. + new_path="$CYGWIN_ROOT_PATH$input_path" + fi + fi + + + if test "x$path" != "x$new_path"; then + BOOT_JDK="$new_path" + { $as_echo "$as_me:${as_lineno-$LINENO}: Rewriting BOOT_JDK to \"$new_path\"" >&5 +$as_echo "$as_me: Rewriting BOOT_JDK to \"$new_path\"" >&6;} + fi + + elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then + + path="$BOOT_JDK" + has_colon=`$ECHO $path | $GREP ^.:` + new_path="$path" + if test "x$has_colon" = x; then + # Not in mixed or Windows style, start by that. + new_path=`cmd //c echo $path` + fi + + + input_path="$new_path" + # Check if we need to convert this using DOS-style short mode. If the path + # contains just simple characters, use it. Otherwise (spaces, weird characters), + # take no chances and rewrite it. + # Note: m4 eats our [], so we need to use [ and ] instead. + has_forbidden_chars=`$ECHO "$input_path" | $GREP [^-_/:a-zA-Z0-9]` + if test "x$has_forbidden_chars" != x; then + # Now convert it to mixed DOS-style, short mode (no spaces, and / instead of \) + new_path=`cmd /c "for %A in (\"$input_path\") do @echo %~sA"|$TR \\\\\\\\ / | $TR 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` + fi + + + windows_path="$new_path" + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then + unix_path=`$CYGPATH -u "$windows_path"` + new_path="$unix_path" + elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then + unix_path=`$ECHO "$windows_path" | $SED -e 's,^\\(.\\):,/\\1,g' -e 's,\\\\,/,g'` + new_path="$unix_path" + fi + + if test "x$path" != "x$new_path"; then + BOOT_JDK="$new_path" + { $as_echo "$as_me:${as_lineno-$LINENO}: Rewriting BOOT_JDK to \"$new_path\"" >&5 +$as_echo "$as_me: Rewriting BOOT_JDK to \"$new_path\"" >&6;} + fi + + # Save the first 10 bytes of this path to the storage, so fixpath can work. + all_fixpath_prefixes=("${all_fixpath_prefixes[@]}" "${new_path:0:10}") + + else + # We're on a posix platform. Hooray! :) + path="$BOOT_JDK" + + if test ! -f "$path" && test ! -d "$path"; then + as_fn_error $? "The path of BOOT_JDK, which resolves as \"$path\", is not found." "$LINENO" 5 + fi + + has_space=`$ECHO "$path" | $GREP " "` + if test "x$has_space" != x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: The path of BOOT_JDK, which resolves as \"$path\", is invalid." >&5 +$as_echo "$as_me: The path of BOOT_JDK, which resolves as \"$path\", is invalid." >&6;} + as_fn_error $? "Spaces are not allowed in this path." "$LINENO" 5 + fi + fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for Boot JDK" >&5 $as_echo_n "checking for Boot JDK... " >&6; } - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $BOOT_JDK ($BOOT_JDK_VERSION)" >&5 -$as_echo "$BOOT_JDK ($BOOT_JDK_VERSION)" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $BOOT_JDK" >&5 +$as_echo "$BOOT_JDK" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: checking Boot JDK version" >&5 +$as_echo_n "checking Boot JDK version... " >&6; } + BOOT_JDK_VERSION=`"$BOOT_JDK/bin/java" -version 2>&1 | $TR '\n\r' ' '` + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $BOOT_JDK_VERSION" >&5 +$as_echo "$BOOT_JDK_VERSION" >&6; } fi # end check jdk version fi # end check rt.jar fi # end check javac @@ -9060,75 +11644,14 @@ fi # Linux/GNU systems often have links from /usr/bin/java to # /etc/alternatives/java to the real JDK binary. - # Translate long cygdrive or C:\sdfsf path - # into a short mixed mode path that has no - # spaces in it. - tmp="$BINARY" - - if test "x$OPENJDK_BUILD_OS" = "xwindows"; then - tmp=`$CYGPATH -u "$BINARY"` - tmp=`which "$tmp"` - # If file exists with .exe appended, that's the real filename - # and cygpath needs that to convert to short style path. - if test -f "${tmp}.exe"; then - tmp="${tmp}.exe" - elif test -f "${tmp}.cmd"; then - tmp="${tmp}.cmd" - fi - # Convert to C:/ mixed style path without spaces. - tmp=`$CYGPATH -s -m "$tmp"` - fi - BINARY="$tmp" - - if test "x$OPENJDK_BUILD_OS" != xwindows; then # Follow a chain of symbolic links. Use readlink # where it exists, else fall back to horribly # complicated shell code. - # Extract the first word of "readlink", so it can be a program name with args. -set dummy readlink; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_path_READLINK+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - case $READLINK in - [\\/]* | ?:[\\/]*) - ac_cv_path_READLINK="$READLINK" # Let the user override the test with a path. - ;; - *) - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_path_READLINK="$as_dir/$ac_word$ac_exec_ext" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - - ;; -esac -fi -READLINK=$ac_cv_path_READLINK -if test -n "$READLINK"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $READLINK" >&5 -$as_echo "$READLINK" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - if test "x$READLINK_TESTED" != yes; then # On MacOSX there is a readlink tool with a different # purpose than the GNU readlink tool. Check the found readlink. - ISGNU=`$READLINK --help 2>&1 | grep GNU` + ISGNU=`$READLINK --help 2>&1 | $GREP GNU` if test "x$ISGNU" = x; then # A readlink that we do not know how to use. # Are there other non-GNU readlinks out there? @@ -9142,23 +11665,25 @@ fi else STARTDIR=$PWD COUNTER=0 - DIR=`dirname $BINARY` - FIL=`basename $BINARY` + sym_link_dir=`$DIRNAME $BINARY` + sym_link_file=`$BASENAME $BINARY` while test $COUNTER -lt 20; do - ISLINK=`ls -l $DIR/$FIL | grep '\->' | sed -e 's/.*-> \(.*\)/\1/'` + ISLINK=`$LS -l $sym_link_dir/$sym_link_file | $GREP '\->' | $SED -e 's/.*-> \(.*\)/\1/'` if test "x$ISLINK" == x; then # This is not a symbolic link! We are done! break fi # The link might be relative! We have to use cd to travel safely. - cd $DIR - cd `dirname $ISLINK` - DIR=`pwd` - FIL=`basename $ISLINK` + cd $sym_link_dir + # ... and we must get the to the absolute path, not one using symbolic links. + cd `pwd -P` + cd `$DIRNAME $ISLINK` + sym_link_dir=`$THEPWDCMD` + sym_link_file=`$BASENAME $ISLINK` let COUNTER=COUNTER+1 done cd $STARTDIR - BINARY=$DIR/$FIL + BINARY=$sym_link_dir/$sym_link_file fi fi @@ -9210,26 +11735,133 @@ $as_echo "$as_me: (Your Boot JDK must be version 7 or 8)" >&6;} # We're done! :-) BOOT_JDK_FOUND=yes - # Fail with message the path to the Boot JDK if var BOOT_JDK contains a path with no spaces in it. - # Unless on Windows, where we can rewrite the path. - HAS_SPACE=`echo "$BOOT_JDK" | grep " "` - if test "x$HAS_SPACE" != x; then - if test "x$OPENJDK_BUILD_OS" = "xwindows"; then - # First convert it to DOS-style, short mode (no spaces) - BOOT_JDK=`$CYGPATH -s -m -a "$BOOT_JDK"` - # Now it's case insensitive; let's make it lowercase to improve readability - BOOT_JDK=`$ECHO "$BOOT_JDK" | $TR 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvqxyz'` - # Now convert it back to Unix-stile (cygpath) - BOOT_JDK=`$CYGPATH -u "$BOOT_JDK"` - else - as_fn_error $? "You cannot have spaces in the path to the Boot JDK! \"$BOOT_JDK\"" "$LINENO" 5 - fi + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then + + # Input might be given as Windows format, start by converting to + # unix format. + path="$BOOT_JDK" + new_path=`$CYGPATH -u "$path"` + + # Cygwin tries to hide some aspects of the Windows file system, such that binaries are + # named .exe but called without that suffix. Therefore, "foo" and "foo.exe" are considered + # the same file, most of the time (as in "test -f"). But not when running cygpath -s, then + # "foo.exe" is OK but "foo" is an error. + # + # This test is therefore slightly more accurate than "test -f" to check for file precense. + # It is also a way to make sure we got the proper file name for the real test later on. + test_shortpath=`$CYGPATH -s -m "$new_path" 2> /dev/null` + if test "x$test_shortpath" = x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: The path of BOOT_JDK, which resolves as \"$path\", is invalid." >&5 +$as_echo "$as_me: The path of BOOT_JDK, which resolves as \"$path\", is invalid." >&6;} + as_fn_error $? "Cannot locate the the path of BOOT_JDK" "$LINENO" 5 + fi + + # Call helper function which possibly converts this using DOS-style short mode. + # If so, the updated path is stored in $new_path. + + input_path="$new_path" + # Check if we need to convert this using DOS-style short mode. If the path + # contains just simple characters, use it. Otherwise (spaces, weird characters), + # take no chances and rewrite it. + # Note: m4 eats our [], so we need to use [ and ] instead. + has_forbidden_chars=`$ECHO "$input_path" | $GREP [^-._/a-zA-Z0-9]` + if test "x$has_forbidden_chars" != x; then + # Now convert it to mixed DOS-style, short mode (no spaces, and / instead of \) + shortmode_path=`$CYGPATH -s -m -a "$input_path"` + path_after_shortmode=`$CYGPATH -u "$shortmode_path"` + if test "x$path_after_shortmode" != "x$input_to_shortpath"; then + # Going to short mode and back again did indeed matter. Since short mode is + # case insensitive, let's make it lowercase to improve readability. + shortmode_path=`$ECHO "$shortmode_path" | $TR 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` + # Now convert it back to Unix-stile (cygpath) + input_path=`$CYGPATH -u "$shortmode_path"` + new_path="$input_path" fi + fi + + test_cygdrive_prefix=`$ECHO $input_path | $GREP ^/cygdrive/` + if test "x$test_cygdrive_prefix" = x; then + # As a simple fix, exclude /usr/bin since it's not a real path. + if test "x`$ECHO $new_path | $GREP ^/usr/bin/`" = x; then + # The path is in a Cygwin special directory (e.g. /home). We need this converted to + # a path prefixed by /cygdrive for fixpath to work. + new_path="$CYGWIN_ROOT_PATH$input_path" + fi + fi + + + if test "x$path" != "x$new_path"; then + BOOT_JDK="$new_path" + { $as_echo "$as_me:${as_lineno-$LINENO}: Rewriting BOOT_JDK to \"$new_path\"" >&5 +$as_echo "$as_me: Rewriting BOOT_JDK to \"$new_path\"" >&6;} + fi + + elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then + + path="$BOOT_JDK" + has_colon=`$ECHO $path | $GREP ^.:` + new_path="$path" + if test "x$has_colon" = x; then + # Not in mixed or Windows style, start by that. + new_path=`cmd //c echo $path` + fi + + + input_path="$new_path" + # Check if we need to convert this using DOS-style short mode. If the path + # contains just simple characters, use it. Otherwise (spaces, weird characters), + # take no chances and rewrite it. + # Note: m4 eats our [], so we need to use [ and ] instead. + has_forbidden_chars=`$ECHO "$input_path" | $GREP [^-_/:a-zA-Z0-9]` + if test "x$has_forbidden_chars" != x; then + # Now convert it to mixed DOS-style, short mode (no spaces, and / instead of \) + new_path=`cmd /c "for %A in (\"$input_path\") do @echo %~sA"|$TR \\\\\\\\ / | $TR 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` + fi + + + windows_path="$new_path" + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then + unix_path=`$CYGPATH -u "$windows_path"` + new_path="$unix_path" + elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then + unix_path=`$ECHO "$windows_path" | $SED -e 's,^\\(.\\):,/\\1,g' -e 's,\\\\,/,g'` + new_path="$unix_path" + fi + + if test "x$path" != "x$new_path"; then + BOOT_JDK="$new_path" + { $as_echo "$as_me:${as_lineno-$LINENO}: Rewriting BOOT_JDK to \"$new_path\"" >&5 +$as_echo "$as_me: Rewriting BOOT_JDK to \"$new_path\"" >&6;} + fi + + # Save the first 10 bytes of this path to the storage, so fixpath can work. + all_fixpath_prefixes=("${all_fixpath_prefixes[@]}" "${new_path:0:10}") + + else + # We're on a posix platform. Hooray! :) + path="$BOOT_JDK" + + if test ! -f "$path" && test ! -d "$path"; then + as_fn_error $? "The path of BOOT_JDK, which resolves as \"$path\", is not found." "$LINENO" 5 + fi + + has_space=`$ECHO "$path" | $GREP " "` + if test "x$has_space" != x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: The path of BOOT_JDK, which resolves as \"$path\", is invalid." >&5 +$as_echo "$as_me: The path of BOOT_JDK, which resolves as \"$path\", is invalid." >&6;} + as_fn_error $? "Spaces are not allowed in this path." "$LINENO" 5 + fi + fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for Boot JDK" >&5 $as_echo_n "checking for Boot JDK... " >&6; } - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $BOOT_JDK ($BOOT_JDK_VERSION)" >&5 -$as_echo "$BOOT_JDK ($BOOT_JDK_VERSION)" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $BOOT_JDK" >&5 +$as_echo "$BOOT_JDK" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: checking Boot JDK version" >&5 +$as_echo_n "checking Boot JDK version... " >&6; } + BOOT_JDK_VERSION=`"$BOOT_JDK/bin/java" -version 2>&1 | $TR '\n\r' ' '` + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $BOOT_JDK_VERSION" >&5 +$as_echo "$BOOT_JDK_VERSION" >&6; } fi # end check jdk version fi # end check rt.jar fi # end check javac @@ -9249,19 +11881,209 @@ $as_echo "$BOOT_JDK ($BOOT_JDK_VERSION)" >&6; } # Now execute the test if test "x$ProgramW6432" != x; then + VIRTUAL_DIR="$ProgramW6432/Java" - BOOT_JDK_PREFIX="`$CYGPATH -u "$ProgramW6432"`/Java" + windows_path="$VIRTUAL_DIR" + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then + unix_path=`$CYGPATH -u "$windows_path"` + VIRTUAL_DIR="$unix_path" + elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then + unix_path=`$ECHO "$windows_path" | $SED -e 's,^\\(.\\):,/\\1,g' -e 's,\\\\,/,g'` + VIRTUAL_DIR="$unix_path" + fi + + + BOOT_JDK_PREFIX="$VIRTUAL_DIR" BOOT_JDK_SUFFIX="" - BEST_JDK_FOUND=`$LS "$BOOT_JDK_PREFIX" 2> /dev/null | $GREP jdk | $SORT -r | $HEAD -n 1 ` - if test "x$BEST_JDK_FOUND" != x; then - BOOT_JDK="${BOOT_JDK_PREFIX}/${BEST_JDK_FOUND}${BOOT_JDK_SUFFIX}" - if test -d "$BOOT_JDK"; then - BOOT_JDK_FOUND=maybe - { $as_echo "$as_me:${as_lineno-$LINENO}: Found potential Boot JDK using well-known locations (in $BOOT_JDK_PREFIX)" >&5 -$as_echo "$as_me: Found potential Boot JDK using well-known locations (in $BOOT_JDK_PREFIX)" >&6;} + ALL_JDKS_FOUND=`$LS "$BOOT_JDK_PREFIX" 2> /dev/null | $SORT -r` + if test "x$ALL_JDKS_FOUND" != x; then + for JDK_TO_TRY in $ALL_JDKS_FOUND ; do + + if test "x$BOOT_JDK_FOUND" = xno; then + # Now execute the test + + BOOT_JDK="${BOOT_JDK_PREFIX}/${JDK_TO_TRY}${BOOT_JDK_SUFFIX}" + if test -d "$BOOT_JDK"; then + BOOT_JDK_FOUND=maybe + { $as_echo "$as_me:${as_lineno-$LINENO}: Found potential Boot JDK using well-known locations (in $BOOT_JDK_PREFIX/$JDK_TO_TRY)" >&5 +$as_echo "$as_me: Found potential Boot JDK using well-known locations (in $BOOT_JDK_PREFIX/$JDK_TO_TRY)" >&6;} + fi + + + # If previous step claimed to have found a JDK, check it to see if it seems to be valid. + if test "x$BOOT_JDK_FOUND" = xmaybe; then + # Do we have a bin/java? + if test ! -x "$BOOT_JDK/bin/java"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: Potential Boot JDK found at $BOOT_JDK did not contain bin/java; ignoring" >&5 +$as_echo "$as_me: Potential Boot JDK found at $BOOT_JDK did not contain bin/java; ignoring" >&6;} + BOOT_JDK_FOUND=no + else + # Do we have a bin/javac? + if test ! -x "$BOOT_JDK/bin/javac"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: Potential Boot JDK found at $BOOT_JDK did not contain bin/javac; ignoring" >&5 +$as_echo "$as_me: Potential Boot JDK found at $BOOT_JDK did not contain bin/javac; ignoring" >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: (This might be an JRE instead of an JDK)" >&5 +$as_echo "$as_me: (This might be an JRE instead of an JDK)" >&6;} + BOOT_JDK_FOUND=no + else + # Do we have an rt.jar? (On MacOSX it is called classes.jar) + if test ! -f "$BOOT_JDK/jre/lib/rt.jar" && test ! -f "$BOOT_JDK/../Classes/classes.jar"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: Potential Boot JDK found at $BOOT_JDK did not contain an rt.jar; ignoring" >&5 +$as_echo "$as_me: Potential Boot JDK found at $BOOT_JDK did not contain an rt.jar; ignoring" >&6;} + BOOT_JDK_FOUND=no + else + # Oh, this is looking good! We probably have found a proper JDK. Is it the correct version? + BOOT_JDK_VERSION=`"$BOOT_JDK/bin/java" -version 2>&1 | head -n 1` + + # Extra M4 quote needed to protect [] in grep expression. + FOUND_VERSION_78=`echo $BOOT_JDK_VERSION | grep '\"1\.[78]\.'` + if test "x$FOUND_VERSION_78" = x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: Potential Boot JDK found at $BOOT_JDK is incorrect JDK version ($BOOT_JDK_VERSION); ignoring" >&5 +$as_echo "$as_me: Potential Boot JDK found at $BOOT_JDK is incorrect JDK version ($BOOT_JDK_VERSION); ignoring" >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: (Your Boot JDK must be version 7 or 8)" >&5 +$as_echo "$as_me: (Your Boot JDK must be version 7 or 8)" >&6;} + BOOT_JDK_FOUND=no + else + # We're done! :-) + BOOT_JDK_FOUND=yes + + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then + + # Input might be given as Windows format, start by converting to + # unix format. + path="$BOOT_JDK" + new_path=`$CYGPATH -u "$path"` + + # Cygwin tries to hide some aspects of the Windows file system, such that binaries are + # named .exe but called without that suffix. Therefore, "foo" and "foo.exe" are considered + # the same file, most of the time (as in "test -f"). But not when running cygpath -s, then + # "foo.exe" is OK but "foo" is an error. + # + # This test is therefore slightly more accurate than "test -f" to check for file precense. + # It is also a way to make sure we got the proper file name for the real test later on. + test_shortpath=`$CYGPATH -s -m "$new_path" 2> /dev/null` + if test "x$test_shortpath" = x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: The path of BOOT_JDK, which resolves as \"$path\", is invalid." >&5 +$as_echo "$as_me: The path of BOOT_JDK, which resolves as \"$path\", is invalid." >&6;} + as_fn_error $? "Cannot locate the the path of BOOT_JDK" "$LINENO" 5 + fi + + # Call helper function which possibly converts this using DOS-style short mode. + # If so, the updated path is stored in $new_path. + + input_path="$new_path" + # Check if we need to convert this using DOS-style short mode. If the path + # contains just simple characters, use it. Otherwise (spaces, weird characters), + # take no chances and rewrite it. + # Note: m4 eats our [], so we need to use [ and ] instead. + has_forbidden_chars=`$ECHO "$input_path" | $GREP [^-._/a-zA-Z0-9]` + if test "x$has_forbidden_chars" != x; then + # Now convert it to mixed DOS-style, short mode (no spaces, and / instead of \) + shortmode_path=`$CYGPATH -s -m -a "$input_path"` + path_after_shortmode=`$CYGPATH -u "$shortmode_path"` + if test "x$path_after_shortmode" != "x$input_to_shortpath"; then + # Going to short mode and back again did indeed matter. Since short mode is + # case insensitive, let's make it lowercase to improve readability. + shortmode_path=`$ECHO "$shortmode_path" | $TR 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` + # Now convert it back to Unix-stile (cygpath) + input_path=`$CYGPATH -u "$shortmode_path"` + new_path="$input_path" fi fi + test_cygdrive_prefix=`$ECHO $input_path | $GREP ^/cygdrive/` + if test "x$test_cygdrive_prefix" = x; then + # As a simple fix, exclude /usr/bin since it's not a real path. + if test "x`$ECHO $new_path | $GREP ^/usr/bin/`" = x; then + # The path is in a Cygwin special directory (e.g. /home). We need this converted to + # a path prefixed by /cygdrive for fixpath to work. + new_path="$CYGWIN_ROOT_PATH$input_path" + fi + fi + + + if test "x$path" != "x$new_path"; then + BOOT_JDK="$new_path" + { $as_echo "$as_me:${as_lineno-$LINENO}: Rewriting BOOT_JDK to \"$new_path\"" >&5 +$as_echo "$as_me: Rewriting BOOT_JDK to \"$new_path\"" >&6;} + fi + + elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then + + path="$BOOT_JDK" + has_colon=`$ECHO $path | $GREP ^.:` + new_path="$path" + if test "x$has_colon" = x; then + # Not in mixed or Windows style, start by that. + new_path=`cmd //c echo $path` + fi + + + input_path="$new_path" + # Check if we need to convert this using DOS-style short mode. If the path + # contains just simple characters, use it. Otherwise (spaces, weird characters), + # take no chances and rewrite it. + # Note: m4 eats our [], so we need to use [ and ] instead. + has_forbidden_chars=`$ECHO "$input_path" | $GREP [^-_/:a-zA-Z0-9]` + if test "x$has_forbidden_chars" != x; then + # Now convert it to mixed DOS-style, short mode (no spaces, and / instead of \) + new_path=`cmd /c "for %A in (\"$input_path\") do @echo %~sA"|$TR \\\\\\\\ / | $TR 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` + fi + + + windows_path="$new_path" + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then + unix_path=`$CYGPATH -u "$windows_path"` + new_path="$unix_path" + elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then + unix_path=`$ECHO "$windows_path" | $SED -e 's,^\\(.\\):,/\\1,g' -e 's,\\\\,/,g'` + new_path="$unix_path" + fi + + if test "x$path" != "x$new_path"; then + BOOT_JDK="$new_path" + { $as_echo "$as_me:${as_lineno-$LINENO}: Rewriting BOOT_JDK to \"$new_path\"" >&5 +$as_echo "$as_me: Rewriting BOOT_JDK to \"$new_path\"" >&6;} + fi + + # Save the first 10 bytes of this path to the storage, so fixpath can work. + all_fixpath_prefixes=("${all_fixpath_prefixes[@]}" "${new_path:0:10}") + + else + # We're on a posix platform. Hooray! :) + path="$BOOT_JDK" + + if test ! -f "$path" && test ! -d "$path"; then + as_fn_error $? "The path of BOOT_JDK, which resolves as \"$path\", is not found." "$LINENO" 5 + fi + + has_space=`$ECHO "$path" | $GREP " "` + if test "x$has_space" != x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: The path of BOOT_JDK, which resolves as \"$path\", is invalid." >&5 +$as_echo "$as_me: The path of BOOT_JDK, which resolves as \"$path\", is invalid." >&6;} + as_fn_error $? "Spaces are not allowed in this path." "$LINENO" 5 + fi + fi + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for Boot JDK" >&5 +$as_echo_n "checking for Boot JDK... " >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $BOOT_JDK" >&5 +$as_echo "$BOOT_JDK" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: checking Boot JDK version" >&5 +$as_echo_n "checking Boot JDK version... " >&6; } + BOOT_JDK_VERSION=`"$BOOT_JDK/bin/java" -version 2>&1 | $TR '\n\r' ' '` + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $BOOT_JDK_VERSION" >&5 +$as_echo "$BOOT_JDK_VERSION" >&6; } + fi # end check jdk version + fi # end check rt.jar + fi # end check javac + fi # end check java + fi # end check boot jdk found + fi + + done + fi + fi @@ -9302,26 +12124,133 @@ $as_echo "$as_me: (Your Boot JDK must be version 7 or 8)" >&6;} # We're done! :-) BOOT_JDK_FOUND=yes - # Fail with message the path to the Boot JDK if var BOOT_JDK contains a path with no spaces in it. - # Unless on Windows, where we can rewrite the path. - HAS_SPACE=`echo "$BOOT_JDK" | grep " "` - if test "x$HAS_SPACE" != x; then - if test "x$OPENJDK_BUILD_OS" = "xwindows"; then - # First convert it to DOS-style, short mode (no spaces) - BOOT_JDK=`$CYGPATH -s -m -a "$BOOT_JDK"` - # Now it's case insensitive; let's make it lowercase to improve readability - BOOT_JDK=`$ECHO "$BOOT_JDK" | $TR 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvqxyz'` - # Now convert it back to Unix-stile (cygpath) - BOOT_JDK=`$CYGPATH -u "$BOOT_JDK"` - else - as_fn_error $? "You cannot have spaces in the path to the Boot JDK! \"$BOOT_JDK\"" "$LINENO" 5 - fi + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then + + # Input might be given as Windows format, start by converting to + # unix format. + path="$BOOT_JDK" + new_path=`$CYGPATH -u "$path"` + + # Cygwin tries to hide some aspects of the Windows file system, such that binaries are + # named .exe but called without that suffix. Therefore, "foo" and "foo.exe" are considered + # the same file, most of the time (as in "test -f"). But not when running cygpath -s, then + # "foo.exe" is OK but "foo" is an error. + # + # This test is therefore slightly more accurate than "test -f" to check for file precense. + # It is also a way to make sure we got the proper file name for the real test later on. + test_shortpath=`$CYGPATH -s -m "$new_path" 2> /dev/null` + if test "x$test_shortpath" = x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: The path of BOOT_JDK, which resolves as \"$path\", is invalid." >&5 +$as_echo "$as_me: The path of BOOT_JDK, which resolves as \"$path\", is invalid." >&6;} + as_fn_error $? "Cannot locate the the path of BOOT_JDK" "$LINENO" 5 + fi + + # Call helper function which possibly converts this using DOS-style short mode. + # If so, the updated path is stored in $new_path. + + input_path="$new_path" + # Check if we need to convert this using DOS-style short mode. If the path + # contains just simple characters, use it. Otherwise (spaces, weird characters), + # take no chances and rewrite it. + # Note: m4 eats our [], so we need to use [ and ] instead. + has_forbidden_chars=`$ECHO "$input_path" | $GREP [^-._/a-zA-Z0-9]` + if test "x$has_forbidden_chars" != x; then + # Now convert it to mixed DOS-style, short mode (no spaces, and / instead of \) + shortmode_path=`$CYGPATH -s -m -a "$input_path"` + path_after_shortmode=`$CYGPATH -u "$shortmode_path"` + if test "x$path_after_shortmode" != "x$input_to_shortpath"; then + # Going to short mode and back again did indeed matter. Since short mode is + # case insensitive, let's make it lowercase to improve readability. + shortmode_path=`$ECHO "$shortmode_path" | $TR 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` + # Now convert it back to Unix-stile (cygpath) + input_path=`$CYGPATH -u "$shortmode_path"` + new_path="$input_path" fi + fi + + test_cygdrive_prefix=`$ECHO $input_path | $GREP ^/cygdrive/` + if test "x$test_cygdrive_prefix" = x; then + # As a simple fix, exclude /usr/bin since it's not a real path. + if test "x`$ECHO $new_path | $GREP ^/usr/bin/`" = x; then + # The path is in a Cygwin special directory (e.g. /home). We need this converted to + # a path prefixed by /cygdrive for fixpath to work. + new_path="$CYGWIN_ROOT_PATH$input_path" + fi + fi + + + if test "x$path" != "x$new_path"; then + BOOT_JDK="$new_path" + { $as_echo "$as_me:${as_lineno-$LINENO}: Rewriting BOOT_JDK to \"$new_path\"" >&5 +$as_echo "$as_me: Rewriting BOOT_JDK to \"$new_path\"" >&6;} + fi + + elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then + + path="$BOOT_JDK" + has_colon=`$ECHO $path | $GREP ^.:` + new_path="$path" + if test "x$has_colon" = x; then + # Not in mixed or Windows style, start by that. + new_path=`cmd //c echo $path` + fi + + + input_path="$new_path" + # Check if we need to convert this using DOS-style short mode. If the path + # contains just simple characters, use it. Otherwise (spaces, weird characters), + # take no chances and rewrite it. + # Note: m4 eats our [], so we need to use [ and ] instead. + has_forbidden_chars=`$ECHO "$input_path" | $GREP [^-_/:a-zA-Z0-9]` + if test "x$has_forbidden_chars" != x; then + # Now convert it to mixed DOS-style, short mode (no spaces, and / instead of \) + new_path=`cmd /c "for %A in (\"$input_path\") do @echo %~sA"|$TR \\\\\\\\ / | $TR 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` + fi + + + windows_path="$new_path" + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then + unix_path=`$CYGPATH -u "$windows_path"` + new_path="$unix_path" + elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then + unix_path=`$ECHO "$windows_path" | $SED -e 's,^\\(.\\):,/\\1,g' -e 's,\\\\,/,g'` + new_path="$unix_path" + fi + + if test "x$path" != "x$new_path"; then + BOOT_JDK="$new_path" + { $as_echo "$as_me:${as_lineno-$LINENO}: Rewriting BOOT_JDK to \"$new_path\"" >&5 +$as_echo "$as_me: Rewriting BOOT_JDK to \"$new_path\"" >&6;} + fi + + # Save the first 10 bytes of this path to the storage, so fixpath can work. + all_fixpath_prefixes=("${all_fixpath_prefixes[@]}" "${new_path:0:10}") + + else + # We're on a posix platform. Hooray! :) + path="$BOOT_JDK" + + if test ! -f "$path" && test ! -d "$path"; then + as_fn_error $? "The path of BOOT_JDK, which resolves as \"$path\", is not found." "$LINENO" 5 + fi + + has_space=`$ECHO "$path" | $GREP " "` + if test "x$has_space" != x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: The path of BOOT_JDK, which resolves as \"$path\", is invalid." >&5 +$as_echo "$as_me: The path of BOOT_JDK, which resolves as \"$path\", is invalid." >&6;} + as_fn_error $? "Spaces are not allowed in this path." "$LINENO" 5 + fi + fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for Boot JDK" >&5 $as_echo_n "checking for Boot JDK... " >&6; } - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $BOOT_JDK ($BOOT_JDK_VERSION)" >&5 -$as_echo "$BOOT_JDK ($BOOT_JDK_VERSION)" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $BOOT_JDK" >&5 +$as_echo "$BOOT_JDK" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: checking Boot JDK version" >&5 +$as_echo_n "checking Boot JDK version... " >&6; } + BOOT_JDK_VERSION=`"$BOOT_JDK/bin/java" -version 2>&1 | $TR '\n\r' ' '` + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $BOOT_JDK_VERSION" >&5 +$as_echo "$BOOT_JDK_VERSION" >&6; } fi # end check jdk version fi # end check rt.jar fi # end check javac @@ -9334,19 +12263,209 @@ $as_echo "$BOOT_JDK ($BOOT_JDK_VERSION)" >&6; } # Now execute the test if test "x$PROGRAMW6432" != x; then + VIRTUAL_DIR="$PROGRAMW6432/Java" - BOOT_JDK_PREFIX="`$CYGPATH -u "$PROGRAMW6432"`/Java" + windows_path="$VIRTUAL_DIR" + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then + unix_path=`$CYGPATH -u "$windows_path"` + VIRTUAL_DIR="$unix_path" + elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then + unix_path=`$ECHO "$windows_path" | $SED -e 's,^\\(.\\):,/\\1,g' -e 's,\\\\,/,g'` + VIRTUAL_DIR="$unix_path" + fi + + + BOOT_JDK_PREFIX="$VIRTUAL_DIR" BOOT_JDK_SUFFIX="" - BEST_JDK_FOUND=`$LS "$BOOT_JDK_PREFIX" 2> /dev/null | $GREP jdk | $SORT -r | $HEAD -n 1 ` - if test "x$BEST_JDK_FOUND" != x; then - BOOT_JDK="${BOOT_JDK_PREFIX}/${BEST_JDK_FOUND}${BOOT_JDK_SUFFIX}" - if test -d "$BOOT_JDK"; then - BOOT_JDK_FOUND=maybe - { $as_echo "$as_me:${as_lineno-$LINENO}: Found potential Boot JDK using well-known locations (in $BOOT_JDK_PREFIX)" >&5 -$as_echo "$as_me: Found potential Boot JDK using well-known locations (in $BOOT_JDK_PREFIX)" >&6;} + ALL_JDKS_FOUND=`$LS "$BOOT_JDK_PREFIX" 2> /dev/null | $SORT -r` + if test "x$ALL_JDKS_FOUND" != x; then + for JDK_TO_TRY in $ALL_JDKS_FOUND ; do + + if test "x$BOOT_JDK_FOUND" = xno; then + # Now execute the test + + BOOT_JDK="${BOOT_JDK_PREFIX}/${JDK_TO_TRY}${BOOT_JDK_SUFFIX}" + if test -d "$BOOT_JDK"; then + BOOT_JDK_FOUND=maybe + { $as_echo "$as_me:${as_lineno-$LINENO}: Found potential Boot JDK using well-known locations (in $BOOT_JDK_PREFIX/$JDK_TO_TRY)" >&5 +$as_echo "$as_me: Found potential Boot JDK using well-known locations (in $BOOT_JDK_PREFIX/$JDK_TO_TRY)" >&6;} + fi + + + # If previous step claimed to have found a JDK, check it to see if it seems to be valid. + if test "x$BOOT_JDK_FOUND" = xmaybe; then + # Do we have a bin/java? + if test ! -x "$BOOT_JDK/bin/java"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: Potential Boot JDK found at $BOOT_JDK did not contain bin/java; ignoring" >&5 +$as_echo "$as_me: Potential Boot JDK found at $BOOT_JDK did not contain bin/java; ignoring" >&6;} + BOOT_JDK_FOUND=no + else + # Do we have a bin/javac? + if test ! -x "$BOOT_JDK/bin/javac"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: Potential Boot JDK found at $BOOT_JDK did not contain bin/javac; ignoring" >&5 +$as_echo "$as_me: Potential Boot JDK found at $BOOT_JDK did not contain bin/javac; ignoring" >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: (This might be an JRE instead of an JDK)" >&5 +$as_echo "$as_me: (This might be an JRE instead of an JDK)" >&6;} + BOOT_JDK_FOUND=no + else + # Do we have an rt.jar? (On MacOSX it is called classes.jar) + if test ! -f "$BOOT_JDK/jre/lib/rt.jar" && test ! -f "$BOOT_JDK/../Classes/classes.jar"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: Potential Boot JDK found at $BOOT_JDK did not contain an rt.jar; ignoring" >&5 +$as_echo "$as_me: Potential Boot JDK found at $BOOT_JDK did not contain an rt.jar; ignoring" >&6;} + BOOT_JDK_FOUND=no + else + # Oh, this is looking good! We probably have found a proper JDK. Is it the correct version? + BOOT_JDK_VERSION=`"$BOOT_JDK/bin/java" -version 2>&1 | head -n 1` + + # Extra M4 quote needed to protect [] in grep expression. + FOUND_VERSION_78=`echo $BOOT_JDK_VERSION | grep '\"1\.[78]\.'` + if test "x$FOUND_VERSION_78" = x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: Potential Boot JDK found at $BOOT_JDK is incorrect JDK version ($BOOT_JDK_VERSION); ignoring" >&5 +$as_echo "$as_me: Potential Boot JDK found at $BOOT_JDK is incorrect JDK version ($BOOT_JDK_VERSION); ignoring" >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: (Your Boot JDK must be version 7 or 8)" >&5 +$as_echo "$as_me: (Your Boot JDK must be version 7 or 8)" >&6;} + BOOT_JDK_FOUND=no + else + # We're done! :-) + BOOT_JDK_FOUND=yes + + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then + + # Input might be given as Windows format, start by converting to + # unix format. + path="$BOOT_JDK" + new_path=`$CYGPATH -u "$path"` + + # Cygwin tries to hide some aspects of the Windows file system, such that binaries are + # named .exe but called without that suffix. Therefore, "foo" and "foo.exe" are considered + # the same file, most of the time (as in "test -f"). But not when running cygpath -s, then + # "foo.exe" is OK but "foo" is an error. + # + # This test is therefore slightly more accurate than "test -f" to check for file precense. + # It is also a way to make sure we got the proper file name for the real test later on. + test_shortpath=`$CYGPATH -s -m "$new_path" 2> /dev/null` + if test "x$test_shortpath" = x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: The path of BOOT_JDK, which resolves as \"$path\", is invalid." >&5 +$as_echo "$as_me: The path of BOOT_JDK, which resolves as \"$path\", is invalid." >&6;} + as_fn_error $? "Cannot locate the the path of BOOT_JDK" "$LINENO" 5 + fi + + # Call helper function which possibly converts this using DOS-style short mode. + # If so, the updated path is stored in $new_path. + + input_path="$new_path" + # Check if we need to convert this using DOS-style short mode. If the path + # contains just simple characters, use it. Otherwise (spaces, weird characters), + # take no chances and rewrite it. + # Note: m4 eats our [], so we need to use [ and ] instead. + has_forbidden_chars=`$ECHO "$input_path" | $GREP [^-._/a-zA-Z0-9]` + if test "x$has_forbidden_chars" != x; then + # Now convert it to mixed DOS-style, short mode (no spaces, and / instead of \) + shortmode_path=`$CYGPATH -s -m -a "$input_path"` + path_after_shortmode=`$CYGPATH -u "$shortmode_path"` + if test "x$path_after_shortmode" != "x$input_to_shortpath"; then + # Going to short mode and back again did indeed matter. Since short mode is + # case insensitive, let's make it lowercase to improve readability. + shortmode_path=`$ECHO "$shortmode_path" | $TR 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` + # Now convert it back to Unix-stile (cygpath) + input_path=`$CYGPATH -u "$shortmode_path"` + new_path="$input_path" fi fi + test_cygdrive_prefix=`$ECHO $input_path | $GREP ^/cygdrive/` + if test "x$test_cygdrive_prefix" = x; then + # As a simple fix, exclude /usr/bin since it's not a real path. + if test "x`$ECHO $new_path | $GREP ^/usr/bin/`" = x; then + # The path is in a Cygwin special directory (e.g. /home). We need this converted to + # a path prefixed by /cygdrive for fixpath to work. + new_path="$CYGWIN_ROOT_PATH$input_path" + fi + fi + + + if test "x$path" != "x$new_path"; then + BOOT_JDK="$new_path" + { $as_echo "$as_me:${as_lineno-$LINENO}: Rewriting BOOT_JDK to \"$new_path\"" >&5 +$as_echo "$as_me: Rewriting BOOT_JDK to \"$new_path\"" >&6;} + fi + + elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then + + path="$BOOT_JDK" + has_colon=`$ECHO $path | $GREP ^.:` + new_path="$path" + if test "x$has_colon" = x; then + # Not in mixed or Windows style, start by that. + new_path=`cmd //c echo $path` + fi + + + input_path="$new_path" + # Check if we need to convert this using DOS-style short mode. If the path + # contains just simple characters, use it. Otherwise (spaces, weird characters), + # take no chances and rewrite it. + # Note: m4 eats our [], so we need to use [ and ] instead. + has_forbidden_chars=`$ECHO "$input_path" | $GREP [^-_/:a-zA-Z0-9]` + if test "x$has_forbidden_chars" != x; then + # Now convert it to mixed DOS-style, short mode (no spaces, and / instead of \) + new_path=`cmd /c "for %A in (\"$input_path\") do @echo %~sA"|$TR \\\\\\\\ / | $TR 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` + fi + + + windows_path="$new_path" + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then + unix_path=`$CYGPATH -u "$windows_path"` + new_path="$unix_path" + elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then + unix_path=`$ECHO "$windows_path" | $SED -e 's,^\\(.\\):,/\\1,g' -e 's,\\\\,/,g'` + new_path="$unix_path" + fi + + if test "x$path" != "x$new_path"; then + BOOT_JDK="$new_path" + { $as_echo "$as_me:${as_lineno-$LINENO}: Rewriting BOOT_JDK to \"$new_path\"" >&5 +$as_echo "$as_me: Rewriting BOOT_JDK to \"$new_path\"" >&6;} + fi + + # Save the first 10 bytes of this path to the storage, so fixpath can work. + all_fixpath_prefixes=("${all_fixpath_prefixes[@]}" "${new_path:0:10}") + + else + # We're on a posix platform. Hooray! :) + path="$BOOT_JDK" + + if test ! -f "$path" && test ! -d "$path"; then + as_fn_error $? "The path of BOOT_JDK, which resolves as \"$path\", is not found." "$LINENO" 5 + fi + + has_space=`$ECHO "$path" | $GREP " "` + if test "x$has_space" != x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: The path of BOOT_JDK, which resolves as \"$path\", is invalid." >&5 +$as_echo "$as_me: The path of BOOT_JDK, which resolves as \"$path\", is invalid." >&6;} + as_fn_error $? "Spaces are not allowed in this path." "$LINENO" 5 + fi + fi + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for Boot JDK" >&5 +$as_echo_n "checking for Boot JDK... " >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $BOOT_JDK" >&5 +$as_echo "$BOOT_JDK" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: checking Boot JDK version" >&5 +$as_echo_n "checking Boot JDK version... " >&6; } + BOOT_JDK_VERSION=`"$BOOT_JDK/bin/java" -version 2>&1 | $TR '\n\r' ' '` + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $BOOT_JDK_VERSION" >&5 +$as_echo "$BOOT_JDK_VERSION" >&6; } + fi # end check jdk version + fi # end check rt.jar + fi # end check javac + fi # end check java + fi # end check boot jdk found + fi + + done + fi + fi @@ -9387,26 +12506,133 @@ $as_echo "$as_me: (Your Boot JDK must be version 7 or 8)" >&6;} # We're done! :-) BOOT_JDK_FOUND=yes - # Fail with message the path to the Boot JDK if var BOOT_JDK contains a path with no spaces in it. - # Unless on Windows, where we can rewrite the path. - HAS_SPACE=`echo "$BOOT_JDK" | grep " "` - if test "x$HAS_SPACE" != x; then - if test "x$OPENJDK_BUILD_OS" = "xwindows"; then - # First convert it to DOS-style, short mode (no spaces) - BOOT_JDK=`$CYGPATH -s -m -a "$BOOT_JDK"` - # Now it's case insensitive; let's make it lowercase to improve readability - BOOT_JDK=`$ECHO "$BOOT_JDK" | $TR 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvqxyz'` - # Now convert it back to Unix-stile (cygpath) - BOOT_JDK=`$CYGPATH -u "$BOOT_JDK"` - else - as_fn_error $? "You cannot have spaces in the path to the Boot JDK! \"$BOOT_JDK\"" "$LINENO" 5 - fi + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then + + # Input might be given as Windows format, start by converting to + # unix format. + path="$BOOT_JDK" + new_path=`$CYGPATH -u "$path"` + + # Cygwin tries to hide some aspects of the Windows file system, such that binaries are + # named .exe but called without that suffix. Therefore, "foo" and "foo.exe" are considered + # the same file, most of the time (as in "test -f"). But not when running cygpath -s, then + # "foo.exe" is OK but "foo" is an error. + # + # This test is therefore slightly more accurate than "test -f" to check for file precense. + # It is also a way to make sure we got the proper file name for the real test later on. + test_shortpath=`$CYGPATH -s -m "$new_path" 2> /dev/null` + if test "x$test_shortpath" = x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: The path of BOOT_JDK, which resolves as \"$path\", is invalid." >&5 +$as_echo "$as_me: The path of BOOT_JDK, which resolves as \"$path\", is invalid." >&6;} + as_fn_error $? "Cannot locate the the path of BOOT_JDK" "$LINENO" 5 + fi + + # Call helper function which possibly converts this using DOS-style short mode. + # If so, the updated path is stored in $new_path. + + input_path="$new_path" + # Check if we need to convert this using DOS-style short mode. If the path + # contains just simple characters, use it. Otherwise (spaces, weird characters), + # take no chances and rewrite it. + # Note: m4 eats our [], so we need to use [ and ] instead. + has_forbidden_chars=`$ECHO "$input_path" | $GREP [^-._/a-zA-Z0-9]` + if test "x$has_forbidden_chars" != x; then + # Now convert it to mixed DOS-style, short mode (no spaces, and / instead of \) + shortmode_path=`$CYGPATH -s -m -a "$input_path"` + path_after_shortmode=`$CYGPATH -u "$shortmode_path"` + if test "x$path_after_shortmode" != "x$input_to_shortpath"; then + # Going to short mode and back again did indeed matter. Since short mode is + # case insensitive, let's make it lowercase to improve readability. + shortmode_path=`$ECHO "$shortmode_path" | $TR 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` + # Now convert it back to Unix-stile (cygpath) + input_path=`$CYGPATH -u "$shortmode_path"` + new_path="$input_path" fi + fi + + test_cygdrive_prefix=`$ECHO $input_path | $GREP ^/cygdrive/` + if test "x$test_cygdrive_prefix" = x; then + # As a simple fix, exclude /usr/bin since it's not a real path. + if test "x`$ECHO $new_path | $GREP ^/usr/bin/`" = x; then + # The path is in a Cygwin special directory (e.g. /home). We need this converted to + # a path prefixed by /cygdrive for fixpath to work. + new_path="$CYGWIN_ROOT_PATH$input_path" + fi + fi + + + if test "x$path" != "x$new_path"; then + BOOT_JDK="$new_path" + { $as_echo "$as_me:${as_lineno-$LINENO}: Rewriting BOOT_JDK to \"$new_path\"" >&5 +$as_echo "$as_me: Rewriting BOOT_JDK to \"$new_path\"" >&6;} + fi + + elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then + + path="$BOOT_JDK" + has_colon=`$ECHO $path | $GREP ^.:` + new_path="$path" + if test "x$has_colon" = x; then + # Not in mixed or Windows style, start by that. + new_path=`cmd //c echo $path` + fi + + + input_path="$new_path" + # Check if we need to convert this using DOS-style short mode. If the path + # contains just simple characters, use it. Otherwise (spaces, weird characters), + # take no chances and rewrite it. + # Note: m4 eats our [], so we need to use [ and ] instead. + has_forbidden_chars=`$ECHO "$input_path" | $GREP [^-_/:a-zA-Z0-9]` + if test "x$has_forbidden_chars" != x; then + # Now convert it to mixed DOS-style, short mode (no spaces, and / instead of \) + new_path=`cmd /c "for %A in (\"$input_path\") do @echo %~sA"|$TR \\\\\\\\ / | $TR 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` + fi + + + windows_path="$new_path" + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then + unix_path=`$CYGPATH -u "$windows_path"` + new_path="$unix_path" + elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then + unix_path=`$ECHO "$windows_path" | $SED -e 's,^\\(.\\):,/\\1,g' -e 's,\\\\,/,g'` + new_path="$unix_path" + fi + + if test "x$path" != "x$new_path"; then + BOOT_JDK="$new_path" + { $as_echo "$as_me:${as_lineno-$LINENO}: Rewriting BOOT_JDK to \"$new_path\"" >&5 +$as_echo "$as_me: Rewriting BOOT_JDK to \"$new_path\"" >&6;} + fi + + # Save the first 10 bytes of this path to the storage, so fixpath can work. + all_fixpath_prefixes=("${all_fixpath_prefixes[@]}" "${new_path:0:10}") + + else + # We're on a posix platform. Hooray! :) + path="$BOOT_JDK" + + if test ! -f "$path" && test ! -d "$path"; then + as_fn_error $? "The path of BOOT_JDK, which resolves as \"$path\", is not found." "$LINENO" 5 + fi + + has_space=`$ECHO "$path" | $GREP " "` + if test "x$has_space" != x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: The path of BOOT_JDK, which resolves as \"$path\", is invalid." >&5 +$as_echo "$as_me: The path of BOOT_JDK, which resolves as \"$path\", is invalid." >&6;} + as_fn_error $? "Spaces are not allowed in this path." "$LINENO" 5 + fi + fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for Boot JDK" >&5 $as_echo_n "checking for Boot JDK... " >&6; } - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $BOOT_JDK ($BOOT_JDK_VERSION)" >&5 -$as_echo "$BOOT_JDK ($BOOT_JDK_VERSION)" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $BOOT_JDK" >&5 +$as_echo "$BOOT_JDK" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: checking Boot JDK version" >&5 +$as_echo_n "checking Boot JDK version... " >&6; } + BOOT_JDK_VERSION=`"$BOOT_JDK/bin/java" -version 2>&1 | $TR '\n\r' ' '` + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $BOOT_JDK_VERSION" >&5 +$as_echo "$BOOT_JDK_VERSION" >&6; } fi # end check jdk version fi # end check rt.jar fi # end check javac @@ -9419,19 +12645,209 @@ $as_echo "$BOOT_JDK ($BOOT_JDK_VERSION)" >&6; } # Now execute the test if test "x$PROGRAMFILES" != x; then + VIRTUAL_DIR="$PROGRAMFILES/Java" - BOOT_JDK_PREFIX="`$CYGPATH -u "$PROGRAMFILES"`/Java" + windows_path="$VIRTUAL_DIR" + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then + unix_path=`$CYGPATH -u "$windows_path"` + VIRTUAL_DIR="$unix_path" + elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then + unix_path=`$ECHO "$windows_path" | $SED -e 's,^\\(.\\):,/\\1,g' -e 's,\\\\,/,g'` + VIRTUAL_DIR="$unix_path" + fi + + + BOOT_JDK_PREFIX="$VIRTUAL_DIR" BOOT_JDK_SUFFIX="" - BEST_JDK_FOUND=`$LS "$BOOT_JDK_PREFIX" 2> /dev/null | $GREP jdk | $SORT -r | $HEAD -n 1 ` - if test "x$BEST_JDK_FOUND" != x; then - BOOT_JDK="${BOOT_JDK_PREFIX}/${BEST_JDK_FOUND}${BOOT_JDK_SUFFIX}" - if test -d "$BOOT_JDK"; then - BOOT_JDK_FOUND=maybe - { $as_echo "$as_me:${as_lineno-$LINENO}: Found potential Boot JDK using well-known locations (in $BOOT_JDK_PREFIX)" >&5 -$as_echo "$as_me: Found potential Boot JDK using well-known locations (in $BOOT_JDK_PREFIX)" >&6;} + ALL_JDKS_FOUND=`$LS "$BOOT_JDK_PREFIX" 2> /dev/null | $SORT -r` + if test "x$ALL_JDKS_FOUND" != x; then + for JDK_TO_TRY in $ALL_JDKS_FOUND ; do + + if test "x$BOOT_JDK_FOUND" = xno; then + # Now execute the test + + BOOT_JDK="${BOOT_JDK_PREFIX}/${JDK_TO_TRY}${BOOT_JDK_SUFFIX}" + if test -d "$BOOT_JDK"; then + BOOT_JDK_FOUND=maybe + { $as_echo "$as_me:${as_lineno-$LINENO}: Found potential Boot JDK using well-known locations (in $BOOT_JDK_PREFIX/$JDK_TO_TRY)" >&5 +$as_echo "$as_me: Found potential Boot JDK using well-known locations (in $BOOT_JDK_PREFIX/$JDK_TO_TRY)" >&6;} + fi + + + # If previous step claimed to have found a JDK, check it to see if it seems to be valid. + if test "x$BOOT_JDK_FOUND" = xmaybe; then + # Do we have a bin/java? + if test ! -x "$BOOT_JDK/bin/java"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: Potential Boot JDK found at $BOOT_JDK did not contain bin/java; ignoring" >&5 +$as_echo "$as_me: Potential Boot JDK found at $BOOT_JDK did not contain bin/java; ignoring" >&6;} + BOOT_JDK_FOUND=no + else + # Do we have a bin/javac? + if test ! -x "$BOOT_JDK/bin/javac"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: Potential Boot JDK found at $BOOT_JDK did not contain bin/javac; ignoring" >&5 +$as_echo "$as_me: Potential Boot JDK found at $BOOT_JDK did not contain bin/javac; ignoring" >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: (This might be an JRE instead of an JDK)" >&5 +$as_echo "$as_me: (This might be an JRE instead of an JDK)" >&6;} + BOOT_JDK_FOUND=no + else + # Do we have an rt.jar? (On MacOSX it is called classes.jar) + if test ! -f "$BOOT_JDK/jre/lib/rt.jar" && test ! -f "$BOOT_JDK/../Classes/classes.jar"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: Potential Boot JDK found at $BOOT_JDK did not contain an rt.jar; ignoring" >&5 +$as_echo "$as_me: Potential Boot JDK found at $BOOT_JDK did not contain an rt.jar; ignoring" >&6;} + BOOT_JDK_FOUND=no + else + # Oh, this is looking good! We probably have found a proper JDK. Is it the correct version? + BOOT_JDK_VERSION=`"$BOOT_JDK/bin/java" -version 2>&1 | head -n 1` + + # Extra M4 quote needed to protect [] in grep expression. + FOUND_VERSION_78=`echo $BOOT_JDK_VERSION | grep '\"1\.[78]\.'` + if test "x$FOUND_VERSION_78" = x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: Potential Boot JDK found at $BOOT_JDK is incorrect JDK version ($BOOT_JDK_VERSION); ignoring" >&5 +$as_echo "$as_me: Potential Boot JDK found at $BOOT_JDK is incorrect JDK version ($BOOT_JDK_VERSION); ignoring" >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: (Your Boot JDK must be version 7 or 8)" >&5 +$as_echo "$as_me: (Your Boot JDK must be version 7 or 8)" >&6;} + BOOT_JDK_FOUND=no + else + # We're done! :-) + BOOT_JDK_FOUND=yes + + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then + + # Input might be given as Windows format, start by converting to + # unix format. + path="$BOOT_JDK" + new_path=`$CYGPATH -u "$path"` + + # Cygwin tries to hide some aspects of the Windows file system, such that binaries are + # named .exe but called without that suffix. Therefore, "foo" and "foo.exe" are considered + # the same file, most of the time (as in "test -f"). But not when running cygpath -s, then + # "foo.exe" is OK but "foo" is an error. + # + # This test is therefore slightly more accurate than "test -f" to check for file precense. + # It is also a way to make sure we got the proper file name for the real test later on. + test_shortpath=`$CYGPATH -s -m "$new_path" 2> /dev/null` + if test "x$test_shortpath" = x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: The path of BOOT_JDK, which resolves as \"$path\", is invalid." >&5 +$as_echo "$as_me: The path of BOOT_JDK, which resolves as \"$path\", is invalid." >&6;} + as_fn_error $? "Cannot locate the the path of BOOT_JDK" "$LINENO" 5 + fi + + # Call helper function which possibly converts this using DOS-style short mode. + # If so, the updated path is stored in $new_path. + + input_path="$new_path" + # Check if we need to convert this using DOS-style short mode. If the path + # contains just simple characters, use it. Otherwise (spaces, weird characters), + # take no chances and rewrite it. + # Note: m4 eats our [], so we need to use [ and ] instead. + has_forbidden_chars=`$ECHO "$input_path" | $GREP [^-._/a-zA-Z0-9]` + if test "x$has_forbidden_chars" != x; then + # Now convert it to mixed DOS-style, short mode (no spaces, and / instead of \) + shortmode_path=`$CYGPATH -s -m -a "$input_path"` + path_after_shortmode=`$CYGPATH -u "$shortmode_path"` + if test "x$path_after_shortmode" != "x$input_to_shortpath"; then + # Going to short mode and back again did indeed matter. Since short mode is + # case insensitive, let's make it lowercase to improve readability. + shortmode_path=`$ECHO "$shortmode_path" | $TR 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` + # Now convert it back to Unix-stile (cygpath) + input_path=`$CYGPATH -u "$shortmode_path"` + new_path="$input_path" fi fi + test_cygdrive_prefix=`$ECHO $input_path | $GREP ^/cygdrive/` + if test "x$test_cygdrive_prefix" = x; then + # As a simple fix, exclude /usr/bin since it's not a real path. + if test "x`$ECHO $new_path | $GREP ^/usr/bin/`" = x; then + # The path is in a Cygwin special directory (e.g. /home). We need this converted to + # a path prefixed by /cygdrive for fixpath to work. + new_path="$CYGWIN_ROOT_PATH$input_path" + fi + fi + + + if test "x$path" != "x$new_path"; then + BOOT_JDK="$new_path" + { $as_echo "$as_me:${as_lineno-$LINENO}: Rewriting BOOT_JDK to \"$new_path\"" >&5 +$as_echo "$as_me: Rewriting BOOT_JDK to \"$new_path\"" >&6;} + fi + + elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then + + path="$BOOT_JDK" + has_colon=`$ECHO $path | $GREP ^.:` + new_path="$path" + if test "x$has_colon" = x; then + # Not in mixed or Windows style, start by that. + new_path=`cmd //c echo $path` + fi + + + input_path="$new_path" + # Check if we need to convert this using DOS-style short mode. If the path + # contains just simple characters, use it. Otherwise (spaces, weird characters), + # take no chances and rewrite it. + # Note: m4 eats our [], so we need to use [ and ] instead. + has_forbidden_chars=`$ECHO "$input_path" | $GREP [^-_/:a-zA-Z0-9]` + if test "x$has_forbidden_chars" != x; then + # Now convert it to mixed DOS-style, short mode (no spaces, and / instead of \) + new_path=`cmd /c "for %A in (\"$input_path\") do @echo %~sA"|$TR \\\\\\\\ / | $TR 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` + fi + + + windows_path="$new_path" + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then + unix_path=`$CYGPATH -u "$windows_path"` + new_path="$unix_path" + elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then + unix_path=`$ECHO "$windows_path" | $SED -e 's,^\\(.\\):,/\\1,g' -e 's,\\\\,/,g'` + new_path="$unix_path" + fi + + if test "x$path" != "x$new_path"; then + BOOT_JDK="$new_path" + { $as_echo "$as_me:${as_lineno-$LINENO}: Rewriting BOOT_JDK to \"$new_path\"" >&5 +$as_echo "$as_me: Rewriting BOOT_JDK to \"$new_path\"" >&6;} + fi + + # Save the first 10 bytes of this path to the storage, so fixpath can work. + all_fixpath_prefixes=("${all_fixpath_prefixes[@]}" "${new_path:0:10}") + + else + # We're on a posix platform. Hooray! :) + path="$BOOT_JDK" + + if test ! -f "$path" && test ! -d "$path"; then + as_fn_error $? "The path of BOOT_JDK, which resolves as \"$path\", is not found." "$LINENO" 5 + fi + + has_space=`$ECHO "$path" | $GREP " "` + if test "x$has_space" != x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: The path of BOOT_JDK, which resolves as \"$path\", is invalid." >&5 +$as_echo "$as_me: The path of BOOT_JDK, which resolves as \"$path\", is invalid." >&6;} + as_fn_error $? "Spaces are not allowed in this path." "$LINENO" 5 + fi + fi + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for Boot JDK" >&5 +$as_echo_n "checking for Boot JDK... " >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $BOOT_JDK" >&5 +$as_echo "$BOOT_JDK" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: checking Boot JDK version" >&5 +$as_echo_n "checking Boot JDK version... " >&6; } + BOOT_JDK_VERSION=`"$BOOT_JDK/bin/java" -version 2>&1 | $TR '\n\r' ' '` + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $BOOT_JDK_VERSION" >&5 +$as_echo "$BOOT_JDK_VERSION" >&6; } + fi # end check jdk version + fi # end check rt.jar + fi # end check javac + fi # end check java + fi # end check boot jdk found + fi + + done + fi + fi @@ -9472,26 +12888,133 @@ $as_echo "$as_me: (Your Boot JDK must be version 7 or 8)" >&6;} # We're done! :-) BOOT_JDK_FOUND=yes - # Fail with message the path to the Boot JDK if var BOOT_JDK contains a path with no spaces in it. - # Unless on Windows, where we can rewrite the path. - HAS_SPACE=`echo "$BOOT_JDK" | grep " "` - if test "x$HAS_SPACE" != x; then - if test "x$OPENJDK_BUILD_OS" = "xwindows"; then - # First convert it to DOS-style, short mode (no spaces) - BOOT_JDK=`$CYGPATH -s -m -a "$BOOT_JDK"` - # Now it's case insensitive; let's make it lowercase to improve readability - BOOT_JDK=`$ECHO "$BOOT_JDK" | $TR 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvqxyz'` - # Now convert it back to Unix-stile (cygpath) - BOOT_JDK=`$CYGPATH -u "$BOOT_JDK"` - else - as_fn_error $? "You cannot have spaces in the path to the Boot JDK! \"$BOOT_JDK\"" "$LINENO" 5 - fi + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then + + # Input might be given as Windows format, start by converting to + # unix format. + path="$BOOT_JDK" + new_path=`$CYGPATH -u "$path"` + + # Cygwin tries to hide some aspects of the Windows file system, such that binaries are + # named .exe but called without that suffix. Therefore, "foo" and "foo.exe" are considered + # the same file, most of the time (as in "test -f"). But not when running cygpath -s, then + # "foo.exe" is OK but "foo" is an error. + # + # This test is therefore slightly more accurate than "test -f" to check for file precense. + # It is also a way to make sure we got the proper file name for the real test later on. + test_shortpath=`$CYGPATH -s -m "$new_path" 2> /dev/null` + if test "x$test_shortpath" = x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: The path of BOOT_JDK, which resolves as \"$path\", is invalid." >&5 +$as_echo "$as_me: The path of BOOT_JDK, which resolves as \"$path\", is invalid." >&6;} + as_fn_error $? "Cannot locate the the path of BOOT_JDK" "$LINENO" 5 + fi + + # Call helper function which possibly converts this using DOS-style short mode. + # If so, the updated path is stored in $new_path. + + input_path="$new_path" + # Check if we need to convert this using DOS-style short mode. If the path + # contains just simple characters, use it. Otherwise (spaces, weird characters), + # take no chances and rewrite it. + # Note: m4 eats our [], so we need to use [ and ] instead. + has_forbidden_chars=`$ECHO "$input_path" | $GREP [^-._/a-zA-Z0-9]` + if test "x$has_forbidden_chars" != x; then + # Now convert it to mixed DOS-style, short mode (no spaces, and / instead of \) + shortmode_path=`$CYGPATH -s -m -a "$input_path"` + path_after_shortmode=`$CYGPATH -u "$shortmode_path"` + if test "x$path_after_shortmode" != "x$input_to_shortpath"; then + # Going to short mode and back again did indeed matter. Since short mode is + # case insensitive, let's make it lowercase to improve readability. + shortmode_path=`$ECHO "$shortmode_path" | $TR 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` + # Now convert it back to Unix-stile (cygpath) + input_path=`$CYGPATH -u "$shortmode_path"` + new_path="$input_path" fi + fi + + test_cygdrive_prefix=`$ECHO $input_path | $GREP ^/cygdrive/` + if test "x$test_cygdrive_prefix" = x; then + # As a simple fix, exclude /usr/bin since it's not a real path. + if test "x`$ECHO $new_path | $GREP ^/usr/bin/`" = x; then + # The path is in a Cygwin special directory (e.g. /home). We need this converted to + # a path prefixed by /cygdrive for fixpath to work. + new_path="$CYGWIN_ROOT_PATH$input_path" + fi + fi + + + if test "x$path" != "x$new_path"; then + BOOT_JDK="$new_path" + { $as_echo "$as_me:${as_lineno-$LINENO}: Rewriting BOOT_JDK to \"$new_path\"" >&5 +$as_echo "$as_me: Rewriting BOOT_JDK to \"$new_path\"" >&6;} + fi + + elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then + + path="$BOOT_JDK" + has_colon=`$ECHO $path | $GREP ^.:` + new_path="$path" + if test "x$has_colon" = x; then + # Not in mixed or Windows style, start by that. + new_path=`cmd //c echo $path` + fi + + + input_path="$new_path" + # Check if we need to convert this using DOS-style short mode. If the path + # contains just simple characters, use it. Otherwise (spaces, weird characters), + # take no chances and rewrite it. + # Note: m4 eats our [], so we need to use [ and ] instead. + has_forbidden_chars=`$ECHO "$input_path" | $GREP [^-_/:a-zA-Z0-9]` + if test "x$has_forbidden_chars" != x; then + # Now convert it to mixed DOS-style, short mode (no spaces, and / instead of \) + new_path=`cmd /c "for %A in (\"$input_path\") do @echo %~sA"|$TR \\\\\\\\ / | $TR 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` + fi + + + windows_path="$new_path" + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then + unix_path=`$CYGPATH -u "$windows_path"` + new_path="$unix_path" + elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then + unix_path=`$ECHO "$windows_path" | $SED -e 's,^\\(.\\):,/\\1,g' -e 's,\\\\,/,g'` + new_path="$unix_path" + fi + + if test "x$path" != "x$new_path"; then + BOOT_JDK="$new_path" + { $as_echo "$as_me:${as_lineno-$LINENO}: Rewriting BOOT_JDK to \"$new_path\"" >&5 +$as_echo "$as_me: Rewriting BOOT_JDK to \"$new_path\"" >&6;} + fi + + # Save the first 10 bytes of this path to the storage, so fixpath can work. + all_fixpath_prefixes=("${all_fixpath_prefixes[@]}" "${new_path:0:10}") + + else + # We're on a posix platform. Hooray! :) + path="$BOOT_JDK" + + if test ! -f "$path" && test ! -d "$path"; then + as_fn_error $? "The path of BOOT_JDK, which resolves as \"$path\", is not found." "$LINENO" 5 + fi + + has_space=`$ECHO "$path" | $GREP " "` + if test "x$has_space" != x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: The path of BOOT_JDK, which resolves as \"$path\", is invalid." >&5 +$as_echo "$as_me: The path of BOOT_JDK, which resolves as \"$path\", is invalid." >&6;} + as_fn_error $? "Spaces are not allowed in this path." "$LINENO" 5 + fi + fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for Boot JDK" >&5 $as_echo_n "checking for Boot JDK... " >&6; } - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $BOOT_JDK ($BOOT_JDK_VERSION)" >&5 -$as_echo "$BOOT_JDK ($BOOT_JDK_VERSION)" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $BOOT_JDK" >&5 +$as_echo "$BOOT_JDK" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: checking Boot JDK version" >&5 +$as_echo_n "checking Boot JDK version... " >&6; } + BOOT_JDK_VERSION=`"$BOOT_JDK/bin/java" -version 2>&1 | $TR '\n\r' ' '` + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $BOOT_JDK_VERSION" >&5 +$as_echo "$BOOT_JDK_VERSION" >&6; } fi # end check jdk version fi # end check rt.jar fi # end check javac @@ -9504,19 +13027,209 @@ $as_echo "$BOOT_JDK ($BOOT_JDK_VERSION)" >&6; } # Now execute the test if test "x$ProgramFiles" != x; then + VIRTUAL_DIR="$ProgramFiles/Java" - BOOT_JDK_PREFIX="`$CYGPATH -u "$ProgramFiles"`/Java" + windows_path="$VIRTUAL_DIR" + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then + unix_path=`$CYGPATH -u "$windows_path"` + VIRTUAL_DIR="$unix_path" + elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then + unix_path=`$ECHO "$windows_path" | $SED -e 's,^\\(.\\):,/\\1,g' -e 's,\\\\,/,g'` + VIRTUAL_DIR="$unix_path" + fi + + + BOOT_JDK_PREFIX="$VIRTUAL_DIR" BOOT_JDK_SUFFIX="" - BEST_JDK_FOUND=`$LS "$BOOT_JDK_PREFIX" 2> /dev/null | $GREP jdk | $SORT -r | $HEAD -n 1 ` - if test "x$BEST_JDK_FOUND" != x; then - BOOT_JDK="${BOOT_JDK_PREFIX}/${BEST_JDK_FOUND}${BOOT_JDK_SUFFIX}" - if test -d "$BOOT_JDK"; then - BOOT_JDK_FOUND=maybe - { $as_echo "$as_me:${as_lineno-$LINENO}: Found potential Boot JDK using well-known locations (in $BOOT_JDK_PREFIX)" >&5 -$as_echo "$as_me: Found potential Boot JDK using well-known locations (in $BOOT_JDK_PREFIX)" >&6;} + ALL_JDKS_FOUND=`$LS "$BOOT_JDK_PREFIX" 2> /dev/null | $SORT -r` + if test "x$ALL_JDKS_FOUND" != x; then + for JDK_TO_TRY in $ALL_JDKS_FOUND ; do + + if test "x$BOOT_JDK_FOUND" = xno; then + # Now execute the test + + BOOT_JDK="${BOOT_JDK_PREFIX}/${JDK_TO_TRY}${BOOT_JDK_SUFFIX}" + if test -d "$BOOT_JDK"; then + BOOT_JDK_FOUND=maybe + { $as_echo "$as_me:${as_lineno-$LINENO}: Found potential Boot JDK using well-known locations (in $BOOT_JDK_PREFIX/$JDK_TO_TRY)" >&5 +$as_echo "$as_me: Found potential Boot JDK using well-known locations (in $BOOT_JDK_PREFIX/$JDK_TO_TRY)" >&6;} + fi + + + # If previous step claimed to have found a JDK, check it to see if it seems to be valid. + if test "x$BOOT_JDK_FOUND" = xmaybe; then + # Do we have a bin/java? + if test ! -x "$BOOT_JDK/bin/java"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: Potential Boot JDK found at $BOOT_JDK did not contain bin/java; ignoring" >&5 +$as_echo "$as_me: Potential Boot JDK found at $BOOT_JDK did not contain bin/java; ignoring" >&6;} + BOOT_JDK_FOUND=no + else + # Do we have a bin/javac? + if test ! -x "$BOOT_JDK/bin/javac"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: Potential Boot JDK found at $BOOT_JDK did not contain bin/javac; ignoring" >&5 +$as_echo "$as_me: Potential Boot JDK found at $BOOT_JDK did not contain bin/javac; ignoring" >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: (This might be an JRE instead of an JDK)" >&5 +$as_echo "$as_me: (This might be an JRE instead of an JDK)" >&6;} + BOOT_JDK_FOUND=no + else + # Do we have an rt.jar? (On MacOSX it is called classes.jar) + if test ! -f "$BOOT_JDK/jre/lib/rt.jar" && test ! -f "$BOOT_JDK/../Classes/classes.jar"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: Potential Boot JDK found at $BOOT_JDK did not contain an rt.jar; ignoring" >&5 +$as_echo "$as_me: Potential Boot JDK found at $BOOT_JDK did not contain an rt.jar; ignoring" >&6;} + BOOT_JDK_FOUND=no + else + # Oh, this is looking good! We probably have found a proper JDK. Is it the correct version? + BOOT_JDK_VERSION=`"$BOOT_JDK/bin/java" -version 2>&1 | head -n 1` + + # Extra M4 quote needed to protect [] in grep expression. + FOUND_VERSION_78=`echo $BOOT_JDK_VERSION | grep '\"1\.[78]\.'` + if test "x$FOUND_VERSION_78" = x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: Potential Boot JDK found at $BOOT_JDK is incorrect JDK version ($BOOT_JDK_VERSION); ignoring" >&5 +$as_echo "$as_me: Potential Boot JDK found at $BOOT_JDK is incorrect JDK version ($BOOT_JDK_VERSION); ignoring" >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: (Your Boot JDK must be version 7 or 8)" >&5 +$as_echo "$as_me: (Your Boot JDK must be version 7 or 8)" >&6;} + BOOT_JDK_FOUND=no + else + # We're done! :-) + BOOT_JDK_FOUND=yes + + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then + + # Input might be given as Windows format, start by converting to + # unix format. + path="$BOOT_JDK" + new_path=`$CYGPATH -u "$path"` + + # Cygwin tries to hide some aspects of the Windows file system, such that binaries are + # named .exe but called without that suffix. Therefore, "foo" and "foo.exe" are considered + # the same file, most of the time (as in "test -f"). But not when running cygpath -s, then + # "foo.exe" is OK but "foo" is an error. + # + # This test is therefore slightly more accurate than "test -f" to check for file precense. + # It is also a way to make sure we got the proper file name for the real test later on. + test_shortpath=`$CYGPATH -s -m "$new_path" 2> /dev/null` + if test "x$test_shortpath" = x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: The path of BOOT_JDK, which resolves as \"$path\", is invalid." >&5 +$as_echo "$as_me: The path of BOOT_JDK, which resolves as \"$path\", is invalid." >&6;} + as_fn_error $? "Cannot locate the the path of BOOT_JDK" "$LINENO" 5 + fi + + # Call helper function which possibly converts this using DOS-style short mode. + # If so, the updated path is stored in $new_path. + + input_path="$new_path" + # Check if we need to convert this using DOS-style short mode. If the path + # contains just simple characters, use it. Otherwise (spaces, weird characters), + # take no chances and rewrite it. + # Note: m4 eats our [], so we need to use [ and ] instead. + has_forbidden_chars=`$ECHO "$input_path" | $GREP [^-._/a-zA-Z0-9]` + if test "x$has_forbidden_chars" != x; then + # Now convert it to mixed DOS-style, short mode (no spaces, and / instead of \) + shortmode_path=`$CYGPATH -s -m -a "$input_path"` + path_after_shortmode=`$CYGPATH -u "$shortmode_path"` + if test "x$path_after_shortmode" != "x$input_to_shortpath"; then + # Going to short mode and back again did indeed matter. Since short mode is + # case insensitive, let's make it lowercase to improve readability. + shortmode_path=`$ECHO "$shortmode_path" | $TR 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` + # Now convert it back to Unix-stile (cygpath) + input_path=`$CYGPATH -u "$shortmode_path"` + new_path="$input_path" fi fi + test_cygdrive_prefix=`$ECHO $input_path | $GREP ^/cygdrive/` + if test "x$test_cygdrive_prefix" = x; then + # As a simple fix, exclude /usr/bin since it's not a real path. + if test "x`$ECHO $new_path | $GREP ^/usr/bin/`" = x; then + # The path is in a Cygwin special directory (e.g. /home). We need this converted to + # a path prefixed by /cygdrive for fixpath to work. + new_path="$CYGWIN_ROOT_PATH$input_path" + fi + fi + + + if test "x$path" != "x$new_path"; then + BOOT_JDK="$new_path" + { $as_echo "$as_me:${as_lineno-$LINENO}: Rewriting BOOT_JDK to \"$new_path\"" >&5 +$as_echo "$as_me: Rewriting BOOT_JDK to \"$new_path\"" >&6;} + fi + + elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then + + path="$BOOT_JDK" + has_colon=`$ECHO $path | $GREP ^.:` + new_path="$path" + if test "x$has_colon" = x; then + # Not in mixed or Windows style, start by that. + new_path=`cmd //c echo $path` + fi + + + input_path="$new_path" + # Check if we need to convert this using DOS-style short mode. If the path + # contains just simple characters, use it. Otherwise (spaces, weird characters), + # take no chances and rewrite it. + # Note: m4 eats our [], so we need to use [ and ] instead. + has_forbidden_chars=`$ECHO "$input_path" | $GREP [^-_/:a-zA-Z0-9]` + if test "x$has_forbidden_chars" != x; then + # Now convert it to mixed DOS-style, short mode (no spaces, and / instead of \) + new_path=`cmd /c "for %A in (\"$input_path\") do @echo %~sA"|$TR \\\\\\\\ / | $TR 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` + fi + + + windows_path="$new_path" + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then + unix_path=`$CYGPATH -u "$windows_path"` + new_path="$unix_path" + elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then + unix_path=`$ECHO "$windows_path" | $SED -e 's,^\\(.\\):,/\\1,g' -e 's,\\\\,/,g'` + new_path="$unix_path" + fi + + if test "x$path" != "x$new_path"; then + BOOT_JDK="$new_path" + { $as_echo "$as_me:${as_lineno-$LINENO}: Rewriting BOOT_JDK to \"$new_path\"" >&5 +$as_echo "$as_me: Rewriting BOOT_JDK to \"$new_path\"" >&6;} + fi + + # Save the first 10 bytes of this path to the storage, so fixpath can work. + all_fixpath_prefixes=("${all_fixpath_prefixes[@]}" "${new_path:0:10}") + + else + # We're on a posix platform. Hooray! :) + path="$BOOT_JDK" + + if test ! -f "$path" && test ! -d "$path"; then + as_fn_error $? "The path of BOOT_JDK, which resolves as \"$path\", is not found." "$LINENO" 5 + fi + + has_space=`$ECHO "$path" | $GREP " "` + if test "x$has_space" != x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: The path of BOOT_JDK, which resolves as \"$path\", is invalid." >&5 +$as_echo "$as_me: The path of BOOT_JDK, which resolves as \"$path\", is invalid." >&6;} + as_fn_error $? "Spaces are not allowed in this path." "$LINENO" 5 + fi + fi + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for Boot JDK" >&5 +$as_echo_n "checking for Boot JDK... " >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $BOOT_JDK" >&5 +$as_echo "$BOOT_JDK" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: checking Boot JDK version" >&5 +$as_echo_n "checking Boot JDK version... " >&6; } + BOOT_JDK_VERSION=`"$BOOT_JDK/bin/java" -version 2>&1 | $TR '\n\r' ' '` + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $BOOT_JDK_VERSION" >&5 +$as_echo "$BOOT_JDK_VERSION" >&6; } + fi # end check jdk version + fi # end check rt.jar + fi # end check javac + fi # end check java + fi # end check boot jdk found + fi + + done + fi + fi @@ -9557,26 +13270,133 @@ $as_echo "$as_me: (Your Boot JDK must be version 7 or 8)" >&6;} # We're done! :-) BOOT_JDK_FOUND=yes - # Fail with message the path to the Boot JDK if var BOOT_JDK contains a path with no spaces in it. - # Unless on Windows, where we can rewrite the path. - HAS_SPACE=`echo "$BOOT_JDK" | grep " "` - if test "x$HAS_SPACE" != x; then - if test "x$OPENJDK_BUILD_OS" = "xwindows"; then - # First convert it to DOS-style, short mode (no spaces) - BOOT_JDK=`$CYGPATH -s -m -a "$BOOT_JDK"` - # Now it's case insensitive; let's make it lowercase to improve readability - BOOT_JDK=`$ECHO "$BOOT_JDK" | $TR 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvqxyz'` - # Now convert it back to Unix-stile (cygpath) - BOOT_JDK=`$CYGPATH -u "$BOOT_JDK"` - else - as_fn_error $? "You cannot have spaces in the path to the Boot JDK! \"$BOOT_JDK\"" "$LINENO" 5 - fi + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then + + # Input might be given as Windows format, start by converting to + # unix format. + path="$BOOT_JDK" + new_path=`$CYGPATH -u "$path"` + + # Cygwin tries to hide some aspects of the Windows file system, such that binaries are + # named .exe but called without that suffix. Therefore, "foo" and "foo.exe" are considered + # the same file, most of the time (as in "test -f"). But not when running cygpath -s, then + # "foo.exe" is OK but "foo" is an error. + # + # This test is therefore slightly more accurate than "test -f" to check for file precense. + # It is also a way to make sure we got the proper file name for the real test later on. + test_shortpath=`$CYGPATH -s -m "$new_path" 2> /dev/null` + if test "x$test_shortpath" = x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: The path of BOOT_JDK, which resolves as \"$path\", is invalid." >&5 +$as_echo "$as_me: The path of BOOT_JDK, which resolves as \"$path\", is invalid." >&6;} + as_fn_error $? "Cannot locate the the path of BOOT_JDK" "$LINENO" 5 + fi + + # Call helper function which possibly converts this using DOS-style short mode. + # If so, the updated path is stored in $new_path. + + input_path="$new_path" + # Check if we need to convert this using DOS-style short mode. If the path + # contains just simple characters, use it. Otherwise (spaces, weird characters), + # take no chances and rewrite it. + # Note: m4 eats our [], so we need to use [ and ] instead. + has_forbidden_chars=`$ECHO "$input_path" | $GREP [^-._/a-zA-Z0-9]` + if test "x$has_forbidden_chars" != x; then + # Now convert it to mixed DOS-style, short mode (no spaces, and / instead of \) + shortmode_path=`$CYGPATH -s -m -a "$input_path"` + path_after_shortmode=`$CYGPATH -u "$shortmode_path"` + if test "x$path_after_shortmode" != "x$input_to_shortpath"; then + # Going to short mode and back again did indeed matter. Since short mode is + # case insensitive, let's make it lowercase to improve readability. + shortmode_path=`$ECHO "$shortmode_path" | $TR 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` + # Now convert it back to Unix-stile (cygpath) + input_path=`$CYGPATH -u "$shortmode_path"` + new_path="$input_path" fi + fi + + test_cygdrive_prefix=`$ECHO $input_path | $GREP ^/cygdrive/` + if test "x$test_cygdrive_prefix" = x; then + # As a simple fix, exclude /usr/bin since it's not a real path. + if test "x`$ECHO $new_path | $GREP ^/usr/bin/`" = x; then + # The path is in a Cygwin special directory (e.g. /home). We need this converted to + # a path prefixed by /cygdrive for fixpath to work. + new_path="$CYGWIN_ROOT_PATH$input_path" + fi + fi + + + if test "x$path" != "x$new_path"; then + BOOT_JDK="$new_path" + { $as_echo "$as_me:${as_lineno-$LINENO}: Rewriting BOOT_JDK to \"$new_path\"" >&5 +$as_echo "$as_me: Rewriting BOOT_JDK to \"$new_path\"" >&6;} + fi + + elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then + + path="$BOOT_JDK" + has_colon=`$ECHO $path | $GREP ^.:` + new_path="$path" + if test "x$has_colon" = x; then + # Not in mixed or Windows style, start by that. + new_path=`cmd //c echo $path` + fi + + + input_path="$new_path" + # Check if we need to convert this using DOS-style short mode. If the path + # contains just simple characters, use it. Otherwise (spaces, weird characters), + # take no chances and rewrite it. + # Note: m4 eats our [], so we need to use [ and ] instead. + has_forbidden_chars=`$ECHO "$input_path" | $GREP [^-_/:a-zA-Z0-9]` + if test "x$has_forbidden_chars" != x; then + # Now convert it to mixed DOS-style, short mode (no spaces, and / instead of \) + new_path=`cmd /c "for %A in (\"$input_path\") do @echo %~sA"|$TR \\\\\\\\ / | $TR 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` + fi + + + windows_path="$new_path" + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then + unix_path=`$CYGPATH -u "$windows_path"` + new_path="$unix_path" + elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then + unix_path=`$ECHO "$windows_path" | $SED -e 's,^\\(.\\):,/\\1,g' -e 's,\\\\,/,g'` + new_path="$unix_path" + fi + + if test "x$path" != "x$new_path"; then + BOOT_JDK="$new_path" + { $as_echo "$as_me:${as_lineno-$LINENO}: Rewriting BOOT_JDK to \"$new_path\"" >&5 +$as_echo "$as_me: Rewriting BOOT_JDK to \"$new_path\"" >&6;} + fi + + # Save the first 10 bytes of this path to the storage, so fixpath can work. + all_fixpath_prefixes=("${all_fixpath_prefixes[@]}" "${new_path:0:10}") + + else + # We're on a posix platform. Hooray! :) + path="$BOOT_JDK" + + if test ! -f "$path" && test ! -d "$path"; then + as_fn_error $? "The path of BOOT_JDK, which resolves as \"$path\", is not found." "$LINENO" 5 + fi + + has_space=`$ECHO "$path" | $GREP " "` + if test "x$has_space" != x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: The path of BOOT_JDK, which resolves as \"$path\", is invalid." >&5 +$as_echo "$as_me: The path of BOOT_JDK, which resolves as \"$path\", is invalid." >&6;} + as_fn_error $? "Spaces are not allowed in this path." "$LINENO" 5 + fi + fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for Boot JDK" >&5 $as_echo_n "checking for Boot JDK... " >&6; } - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $BOOT_JDK ($BOOT_JDK_VERSION)" >&5 -$as_echo "$BOOT_JDK ($BOOT_JDK_VERSION)" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $BOOT_JDK" >&5 +$as_echo "$BOOT_JDK" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: checking Boot JDK version" >&5 +$as_echo_n "checking Boot JDK version... " >&6; } + BOOT_JDK_VERSION=`"$BOOT_JDK/bin/java" -version 2>&1 | $TR '\n\r' ' '` + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $BOOT_JDK_VERSION" >&5 +$as_echo "$BOOT_JDK_VERSION" >&6; } fi # end check jdk version fi # end check rt.jar fi # end check javac @@ -9590,16 +13410,195 @@ $as_echo "$BOOT_JDK ($BOOT_JDK_VERSION)" >&6; } BOOT_JDK_PREFIX="/cygdrive/c/Program Files/Java" BOOT_JDK_SUFFIX="" - BEST_JDK_FOUND=`$LS "$BOOT_JDK_PREFIX" 2> /dev/null | $GREP jdk | $SORT -r | $HEAD -n 1 ` - if test "x$BEST_JDK_FOUND" != x; then - BOOT_JDK="${BOOT_JDK_PREFIX}/${BEST_JDK_FOUND}${BOOT_JDK_SUFFIX}" - if test -d "$BOOT_JDK"; then - BOOT_JDK_FOUND=maybe - { $as_echo "$as_me:${as_lineno-$LINENO}: Found potential Boot JDK using well-known locations (in $BOOT_JDK_PREFIX)" >&5 -$as_echo "$as_me: Found potential Boot JDK using well-known locations (in $BOOT_JDK_PREFIX)" >&6;} + ALL_JDKS_FOUND=`$LS "$BOOT_JDK_PREFIX" 2> /dev/null | $SORT -r` + if test "x$ALL_JDKS_FOUND" != x; then + for JDK_TO_TRY in $ALL_JDKS_FOUND ; do + + if test "x$BOOT_JDK_FOUND" = xno; then + # Now execute the test + + BOOT_JDK="${BOOT_JDK_PREFIX}/${JDK_TO_TRY}${BOOT_JDK_SUFFIX}" + if test -d "$BOOT_JDK"; then + BOOT_JDK_FOUND=maybe + { $as_echo "$as_me:${as_lineno-$LINENO}: Found potential Boot JDK using well-known locations (in $BOOT_JDK_PREFIX/$JDK_TO_TRY)" >&5 +$as_echo "$as_me: Found potential Boot JDK using well-known locations (in $BOOT_JDK_PREFIX/$JDK_TO_TRY)" >&6;} + fi + + + # If previous step claimed to have found a JDK, check it to see if it seems to be valid. + if test "x$BOOT_JDK_FOUND" = xmaybe; then + # Do we have a bin/java? + if test ! -x "$BOOT_JDK/bin/java"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: Potential Boot JDK found at $BOOT_JDK did not contain bin/java; ignoring" >&5 +$as_echo "$as_me: Potential Boot JDK found at $BOOT_JDK did not contain bin/java; ignoring" >&6;} + BOOT_JDK_FOUND=no + else + # Do we have a bin/javac? + if test ! -x "$BOOT_JDK/bin/javac"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: Potential Boot JDK found at $BOOT_JDK did not contain bin/javac; ignoring" >&5 +$as_echo "$as_me: Potential Boot JDK found at $BOOT_JDK did not contain bin/javac; ignoring" >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: (This might be an JRE instead of an JDK)" >&5 +$as_echo "$as_me: (This might be an JRE instead of an JDK)" >&6;} + BOOT_JDK_FOUND=no + else + # Do we have an rt.jar? (On MacOSX it is called classes.jar) + if test ! -f "$BOOT_JDK/jre/lib/rt.jar" && test ! -f "$BOOT_JDK/../Classes/classes.jar"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: Potential Boot JDK found at $BOOT_JDK did not contain an rt.jar; ignoring" >&5 +$as_echo "$as_me: Potential Boot JDK found at $BOOT_JDK did not contain an rt.jar; ignoring" >&6;} + BOOT_JDK_FOUND=no + else + # Oh, this is looking good! We probably have found a proper JDK. Is it the correct version? + BOOT_JDK_VERSION=`"$BOOT_JDK/bin/java" -version 2>&1 | head -n 1` + + # Extra M4 quote needed to protect [] in grep expression. + FOUND_VERSION_78=`echo $BOOT_JDK_VERSION | grep '\"1\.[78]\.'` + if test "x$FOUND_VERSION_78" = x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: Potential Boot JDK found at $BOOT_JDK is incorrect JDK version ($BOOT_JDK_VERSION); ignoring" >&5 +$as_echo "$as_me: Potential Boot JDK found at $BOOT_JDK is incorrect JDK version ($BOOT_JDK_VERSION); ignoring" >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: (Your Boot JDK must be version 7 or 8)" >&5 +$as_echo "$as_me: (Your Boot JDK must be version 7 or 8)" >&6;} + BOOT_JDK_FOUND=no + else + # We're done! :-) + BOOT_JDK_FOUND=yes + + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then + + # Input might be given as Windows format, start by converting to + # unix format. + path="$BOOT_JDK" + new_path=`$CYGPATH -u "$path"` + + # Cygwin tries to hide some aspects of the Windows file system, such that binaries are + # named .exe but called without that suffix. Therefore, "foo" and "foo.exe" are considered + # the same file, most of the time (as in "test -f"). But not when running cygpath -s, then + # "foo.exe" is OK but "foo" is an error. + # + # This test is therefore slightly more accurate than "test -f" to check for file precense. + # It is also a way to make sure we got the proper file name for the real test later on. + test_shortpath=`$CYGPATH -s -m "$new_path" 2> /dev/null` + if test "x$test_shortpath" = x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: The path of BOOT_JDK, which resolves as \"$path\", is invalid." >&5 +$as_echo "$as_me: The path of BOOT_JDK, which resolves as \"$path\", is invalid." >&6;} + as_fn_error $? "Cannot locate the the path of BOOT_JDK" "$LINENO" 5 + fi + + # Call helper function which possibly converts this using DOS-style short mode. + # If so, the updated path is stored in $new_path. + + input_path="$new_path" + # Check if we need to convert this using DOS-style short mode. If the path + # contains just simple characters, use it. Otherwise (spaces, weird characters), + # take no chances and rewrite it. + # Note: m4 eats our [], so we need to use [ and ] instead. + has_forbidden_chars=`$ECHO "$input_path" | $GREP [^-._/a-zA-Z0-9]` + if test "x$has_forbidden_chars" != x; then + # Now convert it to mixed DOS-style, short mode (no spaces, and / instead of \) + shortmode_path=`$CYGPATH -s -m -a "$input_path"` + path_after_shortmode=`$CYGPATH -u "$shortmode_path"` + if test "x$path_after_shortmode" != "x$input_to_shortpath"; then + # Going to short mode and back again did indeed matter. Since short mode is + # case insensitive, let's make it lowercase to improve readability. + shortmode_path=`$ECHO "$shortmode_path" | $TR 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` + # Now convert it back to Unix-stile (cygpath) + input_path=`$CYGPATH -u "$shortmode_path"` + new_path="$input_path" fi fi + test_cygdrive_prefix=`$ECHO $input_path | $GREP ^/cygdrive/` + if test "x$test_cygdrive_prefix" = x; then + # As a simple fix, exclude /usr/bin since it's not a real path. + if test "x`$ECHO $new_path | $GREP ^/usr/bin/`" = x; then + # The path is in a Cygwin special directory (e.g. /home). We need this converted to + # a path prefixed by /cygdrive for fixpath to work. + new_path="$CYGWIN_ROOT_PATH$input_path" + fi + fi + + + if test "x$path" != "x$new_path"; then + BOOT_JDK="$new_path" + { $as_echo "$as_me:${as_lineno-$LINENO}: Rewriting BOOT_JDK to \"$new_path\"" >&5 +$as_echo "$as_me: Rewriting BOOT_JDK to \"$new_path\"" >&6;} + fi + + elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then + + path="$BOOT_JDK" + has_colon=`$ECHO $path | $GREP ^.:` + new_path="$path" + if test "x$has_colon" = x; then + # Not in mixed or Windows style, start by that. + new_path=`cmd //c echo $path` + fi + + + input_path="$new_path" + # Check if we need to convert this using DOS-style short mode. If the path + # contains just simple characters, use it. Otherwise (spaces, weird characters), + # take no chances and rewrite it. + # Note: m4 eats our [], so we need to use [ and ] instead. + has_forbidden_chars=`$ECHO "$input_path" | $GREP [^-_/:a-zA-Z0-9]` + if test "x$has_forbidden_chars" != x; then + # Now convert it to mixed DOS-style, short mode (no spaces, and / instead of \) + new_path=`cmd /c "for %A in (\"$input_path\") do @echo %~sA"|$TR \\\\\\\\ / | $TR 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` + fi + + + windows_path="$new_path" + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then + unix_path=`$CYGPATH -u "$windows_path"` + new_path="$unix_path" + elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then + unix_path=`$ECHO "$windows_path" | $SED -e 's,^\\(.\\):,/\\1,g' -e 's,\\\\,/,g'` + new_path="$unix_path" + fi + + if test "x$path" != "x$new_path"; then + BOOT_JDK="$new_path" + { $as_echo "$as_me:${as_lineno-$LINENO}: Rewriting BOOT_JDK to \"$new_path\"" >&5 +$as_echo "$as_me: Rewriting BOOT_JDK to \"$new_path\"" >&6;} + fi + + # Save the first 10 bytes of this path to the storage, so fixpath can work. + all_fixpath_prefixes=("${all_fixpath_prefixes[@]}" "${new_path:0:10}") + + else + # We're on a posix platform. Hooray! :) + path="$BOOT_JDK" + + if test ! -f "$path" && test ! -d "$path"; then + as_fn_error $? "The path of BOOT_JDK, which resolves as \"$path\", is not found." "$LINENO" 5 + fi + + has_space=`$ECHO "$path" | $GREP " "` + if test "x$has_space" != x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: The path of BOOT_JDK, which resolves as \"$path\", is invalid." >&5 +$as_echo "$as_me: The path of BOOT_JDK, which resolves as \"$path\", is invalid." >&6;} + as_fn_error $? "Spaces are not allowed in this path." "$LINENO" 5 + fi + fi + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for Boot JDK" >&5 +$as_echo_n "checking for Boot JDK... " >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $BOOT_JDK" >&5 +$as_echo "$BOOT_JDK" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: checking Boot JDK version" >&5 +$as_echo_n "checking Boot JDK version... " >&6; } + BOOT_JDK_VERSION=`"$BOOT_JDK/bin/java" -version 2>&1 | $TR '\n\r' ' '` + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $BOOT_JDK_VERSION" >&5 +$as_echo "$BOOT_JDK_VERSION" >&6; } + fi # end check jdk version + fi # end check rt.jar + fi # end check javac + fi # end check java + fi # end check boot jdk found + fi + + done + fi + # If previous step claimed to have found a JDK, check it to see if it seems to be valid. if test "x$BOOT_JDK_FOUND" = xmaybe; then @@ -9638,26 +13637,133 @@ $as_echo "$as_me: (Your Boot JDK must be version 7 or 8)" >&6;} # We're done! :-) BOOT_JDK_FOUND=yes - # Fail with message the path to the Boot JDK if var BOOT_JDK contains a path with no spaces in it. - # Unless on Windows, where we can rewrite the path. - HAS_SPACE=`echo "$BOOT_JDK" | grep " "` - if test "x$HAS_SPACE" != x; then - if test "x$OPENJDK_BUILD_OS" = "xwindows"; then - # First convert it to DOS-style, short mode (no spaces) - BOOT_JDK=`$CYGPATH -s -m -a "$BOOT_JDK"` - # Now it's case insensitive; let's make it lowercase to improve readability - BOOT_JDK=`$ECHO "$BOOT_JDK" | $TR 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvqxyz'` - # Now convert it back to Unix-stile (cygpath) - BOOT_JDK=`$CYGPATH -u "$BOOT_JDK"` - else - as_fn_error $? "You cannot have spaces in the path to the Boot JDK! \"$BOOT_JDK\"" "$LINENO" 5 - fi + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then + + # Input might be given as Windows format, start by converting to + # unix format. + path="$BOOT_JDK" + new_path=`$CYGPATH -u "$path"` + + # Cygwin tries to hide some aspects of the Windows file system, such that binaries are + # named .exe but called without that suffix. Therefore, "foo" and "foo.exe" are considered + # the same file, most of the time (as in "test -f"). But not when running cygpath -s, then + # "foo.exe" is OK but "foo" is an error. + # + # This test is therefore slightly more accurate than "test -f" to check for file precense. + # It is also a way to make sure we got the proper file name for the real test later on. + test_shortpath=`$CYGPATH -s -m "$new_path" 2> /dev/null` + if test "x$test_shortpath" = x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: The path of BOOT_JDK, which resolves as \"$path\", is invalid." >&5 +$as_echo "$as_me: The path of BOOT_JDK, which resolves as \"$path\", is invalid." >&6;} + as_fn_error $? "Cannot locate the the path of BOOT_JDK" "$LINENO" 5 + fi + + # Call helper function which possibly converts this using DOS-style short mode. + # If so, the updated path is stored in $new_path. + + input_path="$new_path" + # Check if we need to convert this using DOS-style short mode. If the path + # contains just simple characters, use it. Otherwise (spaces, weird characters), + # take no chances and rewrite it. + # Note: m4 eats our [], so we need to use [ and ] instead. + has_forbidden_chars=`$ECHO "$input_path" | $GREP [^-._/a-zA-Z0-9]` + if test "x$has_forbidden_chars" != x; then + # Now convert it to mixed DOS-style, short mode (no spaces, and / instead of \) + shortmode_path=`$CYGPATH -s -m -a "$input_path"` + path_after_shortmode=`$CYGPATH -u "$shortmode_path"` + if test "x$path_after_shortmode" != "x$input_to_shortpath"; then + # Going to short mode and back again did indeed matter. Since short mode is + # case insensitive, let's make it lowercase to improve readability. + shortmode_path=`$ECHO "$shortmode_path" | $TR 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` + # Now convert it back to Unix-stile (cygpath) + input_path=`$CYGPATH -u "$shortmode_path"` + new_path="$input_path" fi + fi + + test_cygdrive_prefix=`$ECHO $input_path | $GREP ^/cygdrive/` + if test "x$test_cygdrive_prefix" = x; then + # As a simple fix, exclude /usr/bin since it's not a real path. + if test "x`$ECHO $new_path | $GREP ^/usr/bin/`" = x; then + # The path is in a Cygwin special directory (e.g. /home). We need this converted to + # a path prefixed by /cygdrive for fixpath to work. + new_path="$CYGWIN_ROOT_PATH$input_path" + fi + fi + + + if test "x$path" != "x$new_path"; then + BOOT_JDK="$new_path" + { $as_echo "$as_me:${as_lineno-$LINENO}: Rewriting BOOT_JDK to \"$new_path\"" >&5 +$as_echo "$as_me: Rewriting BOOT_JDK to \"$new_path\"" >&6;} + fi + + elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then + + path="$BOOT_JDK" + has_colon=`$ECHO $path | $GREP ^.:` + new_path="$path" + if test "x$has_colon" = x; then + # Not in mixed or Windows style, start by that. + new_path=`cmd //c echo $path` + fi + + + input_path="$new_path" + # Check if we need to convert this using DOS-style short mode. If the path + # contains just simple characters, use it. Otherwise (spaces, weird characters), + # take no chances and rewrite it. + # Note: m4 eats our [], so we need to use [ and ] instead. + has_forbidden_chars=`$ECHO "$input_path" | $GREP [^-_/:a-zA-Z0-9]` + if test "x$has_forbidden_chars" != x; then + # Now convert it to mixed DOS-style, short mode (no spaces, and / instead of \) + new_path=`cmd /c "for %A in (\"$input_path\") do @echo %~sA"|$TR \\\\\\\\ / | $TR 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` + fi + + + windows_path="$new_path" + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then + unix_path=`$CYGPATH -u "$windows_path"` + new_path="$unix_path" + elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then + unix_path=`$ECHO "$windows_path" | $SED -e 's,^\\(.\\):,/\\1,g' -e 's,\\\\,/,g'` + new_path="$unix_path" + fi + + if test "x$path" != "x$new_path"; then + BOOT_JDK="$new_path" + { $as_echo "$as_me:${as_lineno-$LINENO}: Rewriting BOOT_JDK to \"$new_path\"" >&5 +$as_echo "$as_me: Rewriting BOOT_JDK to \"$new_path\"" >&6;} + fi + + # Save the first 10 bytes of this path to the storage, so fixpath can work. + all_fixpath_prefixes=("${all_fixpath_prefixes[@]}" "${new_path:0:10}") + + else + # We're on a posix platform. Hooray! :) + path="$BOOT_JDK" + + if test ! -f "$path" && test ! -d "$path"; then + as_fn_error $? "The path of BOOT_JDK, which resolves as \"$path\", is not found." "$LINENO" 5 + fi + + has_space=`$ECHO "$path" | $GREP " "` + if test "x$has_space" != x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: The path of BOOT_JDK, which resolves as \"$path\", is invalid." >&5 +$as_echo "$as_me: The path of BOOT_JDK, which resolves as \"$path\", is invalid." >&6;} + as_fn_error $? "Spaces are not allowed in this path." "$LINENO" 5 + fi + fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for Boot JDK" >&5 $as_echo_n "checking for Boot JDK... " >&6; } - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $BOOT_JDK ($BOOT_JDK_VERSION)" >&5 -$as_echo "$BOOT_JDK ($BOOT_JDK_VERSION)" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $BOOT_JDK" >&5 +$as_echo "$BOOT_JDK" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: checking Boot JDK version" >&5 +$as_echo_n "checking Boot JDK version... " >&6; } + BOOT_JDK_VERSION=`"$BOOT_JDK/bin/java" -version 2>&1 | $TR '\n\r' ' '` + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $BOOT_JDK_VERSION" >&5 +$as_echo "$BOOT_JDK_VERSION" >&6; } fi # end check jdk version fi # end check rt.jar fi # end check javac @@ -9672,16 +13778,195 @@ $as_echo "$BOOT_JDK ($BOOT_JDK_VERSION)" >&6; } BOOT_JDK_PREFIX="/Library/Java/JavaVirtualMachines" BOOT_JDK_SUFFIX="/Contents/Home" - BEST_JDK_FOUND=`$LS "$BOOT_JDK_PREFIX" 2> /dev/null | $GREP jdk | $SORT -r | $HEAD -n 1 ` - if test "x$BEST_JDK_FOUND" != x; then - BOOT_JDK="${BOOT_JDK_PREFIX}/${BEST_JDK_FOUND}${BOOT_JDK_SUFFIX}" - if test -d "$BOOT_JDK"; then - BOOT_JDK_FOUND=maybe - { $as_echo "$as_me:${as_lineno-$LINENO}: Found potential Boot JDK using well-known locations (in $BOOT_JDK_PREFIX)" >&5 -$as_echo "$as_me: Found potential Boot JDK using well-known locations (in $BOOT_JDK_PREFIX)" >&6;} + ALL_JDKS_FOUND=`$LS "$BOOT_JDK_PREFIX" 2> /dev/null | $SORT -r` + if test "x$ALL_JDKS_FOUND" != x; then + for JDK_TO_TRY in $ALL_JDKS_FOUND ; do + + if test "x$BOOT_JDK_FOUND" = xno; then + # Now execute the test + + BOOT_JDK="${BOOT_JDK_PREFIX}/${JDK_TO_TRY}${BOOT_JDK_SUFFIX}" + if test -d "$BOOT_JDK"; then + BOOT_JDK_FOUND=maybe + { $as_echo "$as_me:${as_lineno-$LINENO}: Found potential Boot JDK using well-known locations (in $BOOT_JDK_PREFIX/$JDK_TO_TRY)" >&5 +$as_echo "$as_me: Found potential Boot JDK using well-known locations (in $BOOT_JDK_PREFIX/$JDK_TO_TRY)" >&6;} + fi + + + # If previous step claimed to have found a JDK, check it to see if it seems to be valid. + if test "x$BOOT_JDK_FOUND" = xmaybe; then + # Do we have a bin/java? + if test ! -x "$BOOT_JDK/bin/java"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: Potential Boot JDK found at $BOOT_JDK did not contain bin/java; ignoring" >&5 +$as_echo "$as_me: Potential Boot JDK found at $BOOT_JDK did not contain bin/java; ignoring" >&6;} + BOOT_JDK_FOUND=no + else + # Do we have a bin/javac? + if test ! -x "$BOOT_JDK/bin/javac"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: Potential Boot JDK found at $BOOT_JDK did not contain bin/javac; ignoring" >&5 +$as_echo "$as_me: Potential Boot JDK found at $BOOT_JDK did not contain bin/javac; ignoring" >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: (This might be an JRE instead of an JDK)" >&5 +$as_echo "$as_me: (This might be an JRE instead of an JDK)" >&6;} + BOOT_JDK_FOUND=no + else + # Do we have an rt.jar? (On MacOSX it is called classes.jar) + if test ! -f "$BOOT_JDK/jre/lib/rt.jar" && test ! -f "$BOOT_JDK/../Classes/classes.jar"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: Potential Boot JDK found at $BOOT_JDK did not contain an rt.jar; ignoring" >&5 +$as_echo "$as_me: Potential Boot JDK found at $BOOT_JDK did not contain an rt.jar; ignoring" >&6;} + BOOT_JDK_FOUND=no + else + # Oh, this is looking good! We probably have found a proper JDK. Is it the correct version? + BOOT_JDK_VERSION=`"$BOOT_JDK/bin/java" -version 2>&1 | head -n 1` + + # Extra M4 quote needed to protect [] in grep expression. + FOUND_VERSION_78=`echo $BOOT_JDK_VERSION | grep '\"1\.[78]\.'` + if test "x$FOUND_VERSION_78" = x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: Potential Boot JDK found at $BOOT_JDK is incorrect JDK version ($BOOT_JDK_VERSION); ignoring" >&5 +$as_echo "$as_me: Potential Boot JDK found at $BOOT_JDK is incorrect JDK version ($BOOT_JDK_VERSION); ignoring" >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: (Your Boot JDK must be version 7 or 8)" >&5 +$as_echo "$as_me: (Your Boot JDK must be version 7 or 8)" >&6;} + BOOT_JDK_FOUND=no + else + # We're done! :-) + BOOT_JDK_FOUND=yes + + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then + + # Input might be given as Windows format, start by converting to + # unix format. + path="$BOOT_JDK" + new_path=`$CYGPATH -u "$path"` + + # Cygwin tries to hide some aspects of the Windows file system, such that binaries are + # named .exe but called without that suffix. Therefore, "foo" and "foo.exe" are considered + # the same file, most of the time (as in "test -f"). But not when running cygpath -s, then + # "foo.exe" is OK but "foo" is an error. + # + # This test is therefore slightly more accurate than "test -f" to check for file precense. + # It is also a way to make sure we got the proper file name for the real test later on. + test_shortpath=`$CYGPATH -s -m "$new_path" 2> /dev/null` + if test "x$test_shortpath" = x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: The path of BOOT_JDK, which resolves as \"$path\", is invalid." >&5 +$as_echo "$as_me: The path of BOOT_JDK, which resolves as \"$path\", is invalid." >&6;} + as_fn_error $? "Cannot locate the the path of BOOT_JDK" "$LINENO" 5 + fi + + # Call helper function which possibly converts this using DOS-style short mode. + # If so, the updated path is stored in $new_path. + + input_path="$new_path" + # Check if we need to convert this using DOS-style short mode. If the path + # contains just simple characters, use it. Otherwise (spaces, weird characters), + # take no chances and rewrite it. + # Note: m4 eats our [], so we need to use [ and ] instead. + has_forbidden_chars=`$ECHO "$input_path" | $GREP [^-._/a-zA-Z0-9]` + if test "x$has_forbidden_chars" != x; then + # Now convert it to mixed DOS-style, short mode (no spaces, and / instead of \) + shortmode_path=`$CYGPATH -s -m -a "$input_path"` + path_after_shortmode=`$CYGPATH -u "$shortmode_path"` + if test "x$path_after_shortmode" != "x$input_to_shortpath"; then + # Going to short mode and back again did indeed matter. Since short mode is + # case insensitive, let's make it lowercase to improve readability. + shortmode_path=`$ECHO "$shortmode_path" | $TR 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` + # Now convert it back to Unix-stile (cygpath) + input_path=`$CYGPATH -u "$shortmode_path"` + new_path="$input_path" fi fi + test_cygdrive_prefix=`$ECHO $input_path | $GREP ^/cygdrive/` + if test "x$test_cygdrive_prefix" = x; then + # As a simple fix, exclude /usr/bin since it's not a real path. + if test "x`$ECHO $new_path | $GREP ^/usr/bin/`" = x; then + # The path is in a Cygwin special directory (e.g. /home). We need this converted to + # a path prefixed by /cygdrive for fixpath to work. + new_path="$CYGWIN_ROOT_PATH$input_path" + fi + fi + + + if test "x$path" != "x$new_path"; then + BOOT_JDK="$new_path" + { $as_echo "$as_me:${as_lineno-$LINENO}: Rewriting BOOT_JDK to \"$new_path\"" >&5 +$as_echo "$as_me: Rewriting BOOT_JDK to \"$new_path\"" >&6;} + fi + + elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then + + path="$BOOT_JDK" + has_colon=`$ECHO $path | $GREP ^.:` + new_path="$path" + if test "x$has_colon" = x; then + # Not in mixed or Windows style, start by that. + new_path=`cmd //c echo $path` + fi + + + input_path="$new_path" + # Check if we need to convert this using DOS-style short mode. If the path + # contains just simple characters, use it. Otherwise (spaces, weird characters), + # take no chances and rewrite it. + # Note: m4 eats our [], so we need to use [ and ] instead. + has_forbidden_chars=`$ECHO "$input_path" | $GREP [^-_/:a-zA-Z0-9]` + if test "x$has_forbidden_chars" != x; then + # Now convert it to mixed DOS-style, short mode (no spaces, and / instead of \) + new_path=`cmd /c "for %A in (\"$input_path\") do @echo %~sA"|$TR \\\\\\\\ / | $TR 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` + fi + + + windows_path="$new_path" + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then + unix_path=`$CYGPATH -u "$windows_path"` + new_path="$unix_path" + elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then + unix_path=`$ECHO "$windows_path" | $SED -e 's,^\\(.\\):,/\\1,g' -e 's,\\\\,/,g'` + new_path="$unix_path" + fi + + if test "x$path" != "x$new_path"; then + BOOT_JDK="$new_path" + { $as_echo "$as_me:${as_lineno-$LINENO}: Rewriting BOOT_JDK to \"$new_path\"" >&5 +$as_echo "$as_me: Rewriting BOOT_JDK to \"$new_path\"" >&6;} + fi + + # Save the first 10 bytes of this path to the storage, so fixpath can work. + all_fixpath_prefixes=("${all_fixpath_prefixes[@]}" "${new_path:0:10}") + + else + # We're on a posix platform. Hooray! :) + path="$BOOT_JDK" + + if test ! -f "$path" && test ! -d "$path"; then + as_fn_error $? "The path of BOOT_JDK, which resolves as \"$path\", is not found." "$LINENO" 5 + fi + + has_space=`$ECHO "$path" | $GREP " "` + if test "x$has_space" != x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: The path of BOOT_JDK, which resolves as \"$path\", is invalid." >&5 +$as_echo "$as_me: The path of BOOT_JDK, which resolves as \"$path\", is invalid." >&6;} + as_fn_error $? "Spaces are not allowed in this path." "$LINENO" 5 + fi + fi + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for Boot JDK" >&5 +$as_echo_n "checking for Boot JDK... " >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $BOOT_JDK" >&5 +$as_echo "$BOOT_JDK" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: checking Boot JDK version" >&5 +$as_echo_n "checking Boot JDK version... " >&6; } + BOOT_JDK_VERSION=`"$BOOT_JDK/bin/java" -version 2>&1 | $TR '\n\r' ' '` + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $BOOT_JDK_VERSION" >&5 +$as_echo "$BOOT_JDK_VERSION" >&6; } + fi # end check jdk version + fi # end check rt.jar + fi # end check javac + fi # end check java + fi # end check boot jdk found + fi + + done + fi + # If previous step claimed to have found a JDK, check it to see if it seems to be valid. if test "x$BOOT_JDK_FOUND" = xmaybe; then @@ -9720,26 +14005,133 @@ $as_echo "$as_me: (Your Boot JDK must be version 7 or 8)" >&6;} # We're done! :-) BOOT_JDK_FOUND=yes - # Fail with message the path to the Boot JDK if var BOOT_JDK contains a path with no spaces in it. - # Unless on Windows, where we can rewrite the path. - HAS_SPACE=`echo "$BOOT_JDK" | grep " "` - if test "x$HAS_SPACE" != x; then - if test "x$OPENJDK_BUILD_OS" = "xwindows"; then - # First convert it to DOS-style, short mode (no spaces) - BOOT_JDK=`$CYGPATH -s -m -a "$BOOT_JDK"` - # Now it's case insensitive; let's make it lowercase to improve readability - BOOT_JDK=`$ECHO "$BOOT_JDK" | $TR 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvqxyz'` - # Now convert it back to Unix-stile (cygpath) - BOOT_JDK=`$CYGPATH -u "$BOOT_JDK"` - else - as_fn_error $? "You cannot have spaces in the path to the Boot JDK! \"$BOOT_JDK\"" "$LINENO" 5 - fi + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then + + # Input might be given as Windows format, start by converting to + # unix format. + path="$BOOT_JDK" + new_path=`$CYGPATH -u "$path"` + + # Cygwin tries to hide some aspects of the Windows file system, such that binaries are + # named .exe but called without that suffix. Therefore, "foo" and "foo.exe" are considered + # the same file, most of the time (as in "test -f"). But not when running cygpath -s, then + # "foo.exe" is OK but "foo" is an error. + # + # This test is therefore slightly more accurate than "test -f" to check for file precense. + # It is also a way to make sure we got the proper file name for the real test later on. + test_shortpath=`$CYGPATH -s -m "$new_path" 2> /dev/null` + if test "x$test_shortpath" = x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: The path of BOOT_JDK, which resolves as \"$path\", is invalid." >&5 +$as_echo "$as_me: The path of BOOT_JDK, which resolves as \"$path\", is invalid." >&6;} + as_fn_error $? "Cannot locate the the path of BOOT_JDK" "$LINENO" 5 + fi + + # Call helper function which possibly converts this using DOS-style short mode. + # If so, the updated path is stored in $new_path. + + input_path="$new_path" + # Check if we need to convert this using DOS-style short mode. If the path + # contains just simple characters, use it. Otherwise (spaces, weird characters), + # take no chances and rewrite it. + # Note: m4 eats our [], so we need to use [ and ] instead. + has_forbidden_chars=`$ECHO "$input_path" | $GREP [^-._/a-zA-Z0-9]` + if test "x$has_forbidden_chars" != x; then + # Now convert it to mixed DOS-style, short mode (no spaces, and / instead of \) + shortmode_path=`$CYGPATH -s -m -a "$input_path"` + path_after_shortmode=`$CYGPATH -u "$shortmode_path"` + if test "x$path_after_shortmode" != "x$input_to_shortpath"; then + # Going to short mode and back again did indeed matter. Since short mode is + # case insensitive, let's make it lowercase to improve readability. + shortmode_path=`$ECHO "$shortmode_path" | $TR 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` + # Now convert it back to Unix-stile (cygpath) + input_path=`$CYGPATH -u "$shortmode_path"` + new_path="$input_path" fi + fi + + test_cygdrive_prefix=`$ECHO $input_path | $GREP ^/cygdrive/` + if test "x$test_cygdrive_prefix" = x; then + # As a simple fix, exclude /usr/bin since it's not a real path. + if test "x`$ECHO $new_path | $GREP ^/usr/bin/`" = x; then + # The path is in a Cygwin special directory (e.g. /home). We need this converted to + # a path prefixed by /cygdrive for fixpath to work. + new_path="$CYGWIN_ROOT_PATH$input_path" + fi + fi + + + if test "x$path" != "x$new_path"; then + BOOT_JDK="$new_path" + { $as_echo "$as_me:${as_lineno-$LINENO}: Rewriting BOOT_JDK to \"$new_path\"" >&5 +$as_echo "$as_me: Rewriting BOOT_JDK to \"$new_path\"" >&6;} + fi + + elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then + + path="$BOOT_JDK" + has_colon=`$ECHO $path | $GREP ^.:` + new_path="$path" + if test "x$has_colon" = x; then + # Not in mixed or Windows style, start by that. + new_path=`cmd //c echo $path` + fi + + + input_path="$new_path" + # Check if we need to convert this using DOS-style short mode. If the path + # contains just simple characters, use it. Otherwise (spaces, weird characters), + # take no chances and rewrite it. + # Note: m4 eats our [], so we need to use [ and ] instead. + has_forbidden_chars=`$ECHO "$input_path" | $GREP [^-_/:a-zA-Z0-9]` + if test "x$has_forbidden_chars" != x; then + # Now convert it to mixed DOS-style, short mode (no spaces, and / instead of \) + new_path=`cmd /c "for %A in (\"$input_path\") do @echo %~sA"|$TR \\\\\\\\ / | $TR 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` + fi + + + windows_path="$new_path" + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then + unix_path=`$CYGPATH -u "$windows_path"` + new_path="$unix_path" + elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then + unix_path=`$ECHO "$windows_path" | $SED -e 's,^\\(.\\):,/\\1,g' -e 's,\\\\,/,g'` + new_path="$unix_path" + fi + + if test "x$path" != "x$new_path"; then + BOOT_JDK="$new_path" + { $as_echo "$as_me:${as_lineno-$LINENO}: Rewriting BOOT_JDK to \"$new_path\"" >&5 +$as_echo "$as_me: Rewriting BOOT_JDK to \"$new_path\"" >&6;} + fi + + # Save the first 10 bytes of this path to the storage, so fixpath can work. + all_fixpath_prefixes=("${all_fixpath_prefixes[@]}" "${new_path:0:10}") + + else + # We're on a posix platform. Hooray! :) + path="$BOOT_JDK" + + if test ! -f "$path" && test ! -d "$path"; then + as_fn_error $? "The path of BOOT_JDK, which resolves as \"$path\", is not found." "$LINENO" 5 + fi + + has_space=`$ECHO "$path" | $GREP " "` + if test "x$has_space" != x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: The path of BOOT_JDK, which resolves as \"$path\", is invalid." >&5 +$as_echo "$as_me: The path of BOOT_JDK, which resolves as \"$path\", is invalid." >&6;} + as_fn_error $? "Spaces are not allowed in this path." "$LINENO" 5 + fi + fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for Boot JDK" >&5 $as_echo_n "checking for Boot JDK... " >&6; } - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $BOOT_JDK ($BOOT_JDK_VERSION)" >&5 -$as_echo "$BOOT_JDK ($BOOT_JDK_VERSION)" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $BOOT_JDK" >&5 +$as_echo "$BOOT_JDK" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: checking Boot JDK version" >&5 +$as_echo_n "checking Boot JDK version... " >&6; } + BOOT_JDK_VERSION=`"$BOOT_JDK/bin/java" -version 2>&1 | $TR '\n\r' ' '` + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $BOOT_JDK_VERSION" >&5 +$as_echo "$BOOT_JDK_VERSION" >&6; } fi # end check jdk version fi # end check rt.jar fi # end check javac @@ -9753,16 +14145,195 @@ $as_echo "$BOOT_JDK ($BOOT_JDK_VERSION)" >&6; } BOOT_JDK_PREFIX="/System/Library/Java/JavaVirtualMachines" BOOT_JDK_SUFFIX="/Contents/Home" - BEST_JDK_FOUND=`$LS "$BOOT_JDK_PREFIX" 2> /dev/null | $GREP jdk | $SORT -r | $HEAD -n 1 ` - if test "x$BEST_JDK_FOUND" != x; then - BOOT_JDK="${BOOT_JDK_PREFIX}/${BEST_JDK_FOUND}${BOOT_JDK_SUFFIX}" - if test -d "$BOOT_JDK"; then - BOOT_JDK_FOUND=maybe - { $as_echo "$as_me:${as_lineno-$LINENO}: Found potential Boot JDK using well-known locations (in $BOOT_JDK_PREFIX)" >&5 -$as_echo "$as_me: Found potential Boot JDK using well-known locations (in $BOOT_JDK_PREFIX)" >&6;} + ALL_JDKS_FOUND=`$LS "$BOOT_JDK_PREFIX" 2> /dev/null | $SORT -r` + if test "x$ALL_JDKS_FOUND" != x; then + for JDK_TO_TRY in $ALL_JDKS_FOUND ; do + + if test "x$BOOT_JDK_FOUND" = xno; then + # Now execute the test + + BOOT_JDK="${BOOT_JDK_PREFIX}/${JDK_TO_TRY}${BOOT_JDK_SUFFIX}" + if test -d "$BOOT_JDK"; then + BOOT_JDK_FOUND=maybe + { $as_echo "$as_me:${as_lineno-$LINENO}: Found potential Boot JDK using well-known locations (in $BOOT_JDK_PREFIX/$JDK_TO_TRY)" >&5 +$as_echo "$as_me: Found potential Boot JDK using well-known locations (in $BOOT_JDK_PREFIX/$JDK_TO_TRY)" >&6;} + fi + + + # If previous step claimed to have found a JDK, check it to see if it seems to be valid. + if test "x$BOOT_JDK_FOUND" = xmaybe; then + # Do we have a bin/java? + if test ! -x "$BOOT_JDK/bin/java"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: Potential Boot JDK found at $BOOT_JDK did not contain bin/java; ignoring" >&5 +$as_echo "$as_me: Potential Boot JDK found at $BOOT_JDK did not contain bin/java; ignoring" >&6;} + BOOT_JDK_FOUND=no + else + # Do we have a bin/javac? + if test ! -x "$BOOT_JDK/bin/javac"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: Potential Boot JDK found at $BOOT_JDK did not contain bin/javac; ignoring" >&5 +$as_echo "$as_me: Potential Boot JDK found at $BOOT_JDK did not contain bin/javac; ignoring" >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: (This might be an JRE instead of an JDK)" >&5 +$as_echo "$as_me: (This might be an JRE instead of an JDK)" >&6;} + BOOT_JDK_FOUND=no + else + # Do we have an rt.jar? (On MacOSX it is called classes.jar) + if test ! -f "$BOOT_JDK/jre/lib/rt.jar" && test ! -f "$BOOT_JDK/../Classes/classes.jar"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: Potential Boot JDK found at $BOOT_JDK did not contain an rt.jar; ignoring" >&5 +$as_echo "$as_me: Potential Boot JDK found at $BOOT_JDK did not contain an rt.jar; ignoring" >&6;} + BOOT_JDK_FOUND=no + else + # Oh, this is looking good! We probably have found a proper JDK. Is it the correct version? + BOOT_JDK_VERSION=`"$BOOT_JDK/bin/java" -version 2>&1 | head -n 1` + + # Extra M4 quote needed to protect [] in grep expression. + FOUND_VERSION_78=`echo $BOOT_JDK_VERSION | grep '\"1\.[78]\.'` + if test "x$FOUND_VERSION_78" = x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: Potential Boot JDK found at $BOOT_JDK is incorrect JDK version ($BOOT_JDK_VERSION); ignoring" >&5 +$as_echo "$as_me: Potential Boot JDK found at $BOOT_JDK is incorrect JDK version ($BOOT_JDK_VERSION); ignoring" >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: (Your Boot JDK must be version 7 or 8)" >&5 +$as_echo "$as_me: (Your Boot JDK must be version 7 or 8)" >&6;} + BOOT_JDK_FOUND=no + else + # We're done! :-) + BOOT_JDK_FOUND=yes + + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then + + # Input might be given as Windows format, start by converting to + # unix format. + path="$BOOT_JDK" + new_path=`$CYGPATH -u "$path"` + + # Cygwin tries to hide some aspects of the Windows file system, such that binaries are + # named .exe but called without that suffix. Therefore, "foo" and "foo.exe" are considered + # the same file, most of the time (as in "test -f"). But not when running cygpath -s, then + # "foo.exe" is OK but "foo" is an error. + # + # This test is therefore slightly more accurate than "test -f" to check for file precense. + # It is also a way to make sure we got the proper file name for the real test later on. + test_shortpath=`$CYGPATH -s -m "$new_path" 2> /dev/null` + if test "x$test_shortpath" = x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: The path of BOOT_JDK, which resolves as \"$path\", is invalid." >&5 +$as_echo "$as_me: The path of BOOT_JDK, which resolves as \"$path\", is invalid." >&6;} + as_fn_error $? "Cannot locate the the path of BOOT_JDK" "$LINENO" 5 + fi + + # Call helper function which possibly converts this using DOS-style short mode. + # If so, the updated path is stored in $new_path. + + input_path="$new_path" + # Check if we need to convert this using DOS-style short mode. If the path + # contains just simple characters, use it. Otherwise (spaces, weird characters), + # take no chances and rewrite it. + # Note: m4 eats our [], so we need to use [ and ] instead. + has_forbidden_chars=`$ECHO "$input_path" | $GREP [^-._/a-zA-Z0-9]` + if test "x$has_forbidden_chars" != x; then + # Now convert it to mixed DOS-style, short mode (no spaces, and / instead of \) + shortmode_path=`$CYGPATH -s -m -a "$input_path"` + path_after_shortmode=`$CYGPATH -u "$shortmode_path"` + if test "x$path_after_shortmode" != "x$input_to_shortpath"; then + # Going to short mode and back again did indeed matter. Since short mode is + # case insensitive, let's make it lowercase to improve readability. + shortmode_path=`$ECHO "$shortmode_path" | $TR 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` + # Now convert it back to Unix-stile (cygpath) + input_path=`$CYGPATH -u "$shortmode_path"` + new_path="$input_path" fi fi + test_cygdrive_prefix=`$ECHO $input_path | $GREP ^/cygdrive/` + if test "x$test_cygdrive_prefix" = x; then + # As a simple fix, exclude /usr/bin since it's not a real path. + if test "x`$ECHO $new_path | $GREP ^/usr/bin/`" = x; then + # The path is in a Cygwin special directory (e.g. /home). We need this converted to + # a path prefixed by /cygdrive for fixpath to work. + new_path="$CYGWIN_ROOT_PATH$input_path" + fi + fi + + + if test "x$path" != "x$new_path"; then + BOOT_JDK="$new_path" + { $as_echo "$as_me:${as_lineno-$LINENO}: Rewriting BOOT_JDK to \"$new_path\"" >&5 +$as_echo "$as_me: Rewriting BOOT_JDK to \"$new_path\"" >&6;} + fi + + elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then + + path="$BOOT_JDK" + has_colon=`$ECHO $path | $GREP ^.:` + new_path="$path" + if test "x$has_colon" = x; then + # Not in mixed or Windows style, start by that. + new_path=`cmd //c echo $path` + fi + + + input_path="$new_path" + # Check if we need to convert this using DOS-style short mode. If the path + # contains just simple characters, use it. Otherwise (spaces, weird characters), + # take no chances and rewrite it. + # Note: m4 eats our [], so we need to use [ and ] instead. + has_forbidden_chars=`$ECHO "$input_path" | $GREP [^-_/:a-zA-Z0-9]` + if test "x$has_forbidden_chars" != x; then + # Now convert it to mixed DOS-style, short mode (no spaces, and / instead of \) + new_path=`cmd /c "for %A in (\"$input_path\") do @echo %~sA"|$TR \\\\\\\\ / | $TR 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` + fi + + + windows_path="$new_path" + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then + unix_path=`$CYGPATH -u "$windows_path"` + new_path="$unix_path" + elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then + unix_path=`$ECHO "$windows_path" | $SED -e 's,^\\(.\\):,/\\1,g' -e 's,\\\\,/,g'` + new_path="$unix_path" + fi + + if test "x$path" != "x$new_path"; then + BOOT_JDK="$new_path" + { $as_echo "$as_me:${as_lineno-$LINENO}: Rewriting BOOT_JDK to \"$new_path\"" >&5 +$as_echo "$as_me: Rewriting BOOT_JDK to \"$new_path\"" >&6;} + fi + + # Save the first 10 bytes of this path to the storage, so fixpath can work. + all_fixpath_prefixes=("${all_fixpath_prefixes[@]}" "${new_path:0:10}") + + else + # We're on a posix platform. Hooray! :) + path="$BOOT_JDK" + + if test ! -f "$path" && test ! -d "$path"; then + as_fn_error $? "The path of BOOT_JDK, which resolves as \"$path\", is not found." "$LINENO" 5 + fi + + has_space=`$ECHO "$path" | $GREP " "` + if test "x$has_space" != x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: The path of BOOT_JDK, which resolves as \"$path\", is invalid." >&5 +$as_echo "$as_me: The path of BOOT_JDK, which resolves as \"$path\", is invalid." >&6;} + as_fn_error $? "Spaces are not allowed in this path." "$LINENO" 5 + fi + fi + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for Boot JDK" >&5 +$as_echo_n "checking for Boot JDK... " >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $BOOT_JDK" >&5 +$as_echo "$BOOT_JDK" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: checking Boot JDK version" >&5 +$as_echo_n "checking Boot JDK version... " >&6; } + BOOT_JDK_VERSION=`"$BOOT_JDK/bin/java" -version 2>&1 | $TR '\n\r' ' '` + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $BOOT_JDK_VERSION" >&5 +$as_echo "$BOOT_JDK_VERSION" >&6; } + fi # end check jdk version + fi # end check rt.jar + fi # end check javac + fi # end check java + fi # end check boot jdk found + fi + + done + fi + # If previous step claimed to have found a JDK, check it to see if it seems to be valid. if test "x$BOOT_JDK_FOUND" = xmaybe; then @@ -9801,26 +14372,501 @@ $as_echo "$as_me: (Your Boot JDK must be version 7 or 8)" >&6;} # We're done! :-) BOOT_JDK_FOUND=yes - # Fail with message the path to the Boot JDK if var BOOT_JDK contains a path with no spaces in it. - # Unless on Windows, where we can rewrite the path. - HAS_SPACE=`echo "$BOOT_JDK" | grep " "` - if test "x$HAS_SPACE" != x; then - if test "x$OPENJDK_BUILD_OS" = "xwindows"; then - # First convert it to DOS-style, short mode (no spaces) - BOOT_JDK=`$CYGPATH -s -m -a "$BOOT_JDK"` - # Now it's case insensitive; let's make it lowercase to improve readability - BOOT_JDK=`$ECHO "$BOOT_JDK" | $TR 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvqxyz'` - # Now convert it back to Unix-stile (cygpath) - BOOT_JDK=`$CYGPATH -u "$BOOT_JDK"` - else - as_fn_error $? "You cannot have spaces in the path to the Boot JDK! \"$BOOT_JDK\"" "$LINENO" 5 - fi + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then + + # Input might be given as Windows format, start by converting to + # unix format. + path="$BOOT_JDK" + new_path=`$CYGPATH -u "$path"` + + # Cygwin tries to hide some aspects of the Windows file system, such that binaries are + # named .exe but called without that suffix. Therefore, "foo" and "foo.exe" are considered + # the same file, most of the time (as in "test -f"). But not when running cygpath -s, then + # "foo.exe" is OK but "foo" is an error. + # + # This test is therefore slightly more accurate than "test -f" to check for file precense. + # It is also a way to make sure we got the proper file name for the real test later on. + test_shortpath=`$CYGPATH -s -m "$new_path" 2> /dev/null` + if test "x$test_shortpath" = x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: The path of BOOT_JDK, which resolves as \"$path\", is invalid." >&5 +$as_echo "$as_me: The path of BOOT_JDK, which resolves as \"$path\", is invalid." >&6;} + as_fn_error $? "Cannot locate the the path of BOOT_JDK" "$LINENO" 5 + fi + + # Call helper function which possibly converts this using DOS-style short mode. + # If so, the updated path is stored in $new_path. + + input_path="$new_path" + # Check if we need to convert this using DOS-style short mode. If the path + # contains just simple characters, use it. Otherwise (spaces, weird characters), + # take no chances and rewrite it. + # Note: m4 eats our [], so we need to use [ and ] instead. + has_forbidden_chars=`$ECHO "$input_path" | $GREP [^-._/a-zA-Z0-9]` + if test "x$has_forbidden_chars" != x; then + # Now convert it to mixed DOS-style, short mode (no spaces, and / instead of \) + shortmode_path=`$CYGPATH -s -m -a "$input_path"` + path_after_shortmode=`$CYGPATH -u "$shortmode_path"` + if test "x$path_after_shortmode" != "x$input_to_shortpath"; then + # Going to short mode and back again did indeed matter. Since short mode is + # case insensitive, let's make it lowercase to improve readability. + shortmode_path=`$ECHO "$shortmode_path" | $TR 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` + # Now convert it back to Unix-stile (cygpath) + input_path=`$CYGPATH -u "$shortmode_path"` + new_path="$input_path" fi + fi + + test_cygdrive_prefix=`$ECHO $input_path | $GREP ^/cygdrive/` + if test "x$test_cygdrive_prefix" = x; then + # As a simple fix, exclude /usr/bin since it's not a real path. + if test "x`$ECHO $new_path | $GREP ^/usr/bin/`" = x; then + # The path is in a Cygwin special directory (e.g. /home). We need this converted to + # a path prefixed by /cygdrive for fixpath to work. + new_path="$CYGWIN_ROOT_PATH$input_path" + fi + fi + + + if test "x$path" != "x$new_path"; then + BOOT_JDK="$new_path" + { $as_echo "$as_me:${as_lineno-$LINENO}: Rewriting BOOT_JDK to \"$new_path\"" >&5 +$as_echo "$as_me: Rewriting BOOT_JDK to \"$new_path\"" >&6;} + fi + + elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then + + path="$BOOT_JDK" + has_colon=`$ECHO $path | $GREP ^.:` + new_path="$path" + if test "x$has_colon" = x; then + # Not in mixed or Windows style, start by that. + new_path=`cmd //c echo $path` + fi + + + input_path="$new_path" + # Check if we need to convert this using DOS-style short mode. If the path + # contains just simple characters, use it. Otherwise (spaces, weird characters), + # take no chances and rewrite it. + # Note: m4 eats our [], so we need to use [ and ] instead. + has_forbidden_chars=`$ECHO "$input_path" | $GREP [^-_/:a-zA-Z0-9]` + if test "x$has_forbidden_chars" != x; then + # Now convert it to mixed DOS-style, short mode (no spaces, and / instead of \) + new_path=`cmd /c "for %A in (\"$input_path\") do @echo %~sA"|$TR \\\\\\\\ / | $TR 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` + fi + + + windows_path="$new_path" + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then + unix_path=`$CYGPATH -u "$windows_path"` + new_path="$unix_path" + elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then + unix_path=`$ECHO "$windows_path" | $SED -e 's,^\\(.\\):,/\\1,g' -e 's,\\\\,/,g'` + new_path="$unix_path" + fi + + if test "x$path" != "x$new_path"; then + BOOT_JDK="$new_path" + { $as_echo "$as_me:${as_lineno-$LINENO}: Rewriting BOOT_JDK to \"$new_path\"" >&5 +$as_echo "$as_me: Rewriting BOOT_JDK to \"$new_path\"" >&6;} + fi + + # Save the first 10 bytes of this path to the storage, so fixpath can work. + all_fixpath_prefixes=("${all_fixpath_prefixes[@]}" "${new_path:0:10}") + + else + # We're on a posix platform. Hooray! :) + path="$BOOT_JDK" + + if test ! -f "$path" && test ! -d "$path"; then + as_fn_error $? "The path of BOOT_JDK, which resolves as \"$path\", is not found." "$LINENO" 5 + fi + + has_space=`$ECHO "$path" | $GREP " "` + if test "x$has_space" != x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: The path of BOOT_JDK, which resolves as \"$path\", is invalid." >&5 +$as_echo "$as_me: The path of BOOT_JDK, which resolves as \"$path\", is invalid." >&6;} + as_fn_error $? "Spaces are not allowed in this path." "$LINENO" 5 + fi + fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for Boot JDK" >&5 $as_echo_n "checking for Boot JDK... " >&6; } - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $BOOT_JDK ($BOOT_JDK_VERSION)" >&5 -$as_echo "$BOOT_JDK ($BOOT_JDK_VERSION)" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $BOOT_JDK" >&5 +$as_echo "$BOOT_JDK" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: checking Boot JDK version" >&5 +$as_echo_n "checking Boot JDK version... " >&6; } + BOOT_JDK_VERSION=`"$BOOT_JDK/bin/java" -version 2>&1 | $TR '\n\r' ' '` + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $BOOT_JDK_VERSION" >&5 +$as_echo "$BOOT_JDK_VERSION" >&6; } + fi # end check jdk version + fi # end check rt.jar + fi # end check javac + fi # end check java + fi # end check boot jdk found + fi + + elif test "x$OPENJDK_TARGET_OS" = xlinux; then + + if test "x$BOOT_JDK_FOUND" = xno; then + # Now execute the test + + BOOT_JDK_PREFIX="/usr/lib/jvm" + BOOT_JDK_SUFFIX="" + ALL_JDKS_FOUND=`$LS "$BOOT_JDK_PREFIX" 2> /dev/null | $SORT -r` + if test "x$ALL_JDKS_FOUND" != x; then + for JDK_TO_TRY in $ALL_JDKS_FOUND ; do + + if test "x$BOOT_JDK_FOUND" = xno; then + # Now execute the test + + BOOT_JDK="${BOOT_JDK_PREFIX}/${JDK_TO_TRY}${BOOT_JDK_SUFFIX}" + if test -d "$BOOT_JDK"; then + BOOT_JDK_FOUND=maybe + { $as_echo "$as_me:${as_lineno-$LINENO}: Found potential Boot JDK using well-known locations (in $BOOT_JDK_PREFIX/$JDK_TO_TRY)" >&5 +$as_echo "$as_me: Found potential Boot JDK using well-known locations (in $BOOT_JDK_PREFIX/$JDK_TO_TRY)" >&6;} + fi + + + # If previous step claimed to have found a JDK, check it to see if it seems to be valid. + if test "x$BOOT_JDK_FOUND" = xmaybe; then + # Do we have a bin/java? + if test ! -x "$BOOT_JDK/bin/java"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: Potential Boot JDK found at $BOOT_JDK did not contain bin/java; ignoring" >&5 +$as_echo "$as_me: Potential Boot JDK found at $BOOT_JDK did not contain bin/java; ignoring" >&6;} + BOOT_JDK_FOUND=no + else + # Do we have a bin/javac? + if test ! -x "$BOOT_JDK/bin/javac"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: Potential Boot JDK found at $BOOT_JDK did not contain bin/javac; ignoring" >&5 +$as_echo "$as_me: Potential Boot JDK found at $BOOT_JDK did not contain bin/javac; ignoring" >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: (This might be an JRE instead of an JDK)" >&5 +$as_echo "$as_me: (This might be an JRE instead of an JDK)" >&6;} + BOOT_JDK_FOUND=no + else + # Do we have an rt.jar? (On MacOSX it is called classes.jar) + if test ! -f "$BOOT_JDK/jre/lib/rt.jar" && test ! -f "$BOOT_JDK/../Classes/classes.jar"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: Potential Boot JDK found at $BOOT_JDK did not contain an rt.jar; ignoring" >&5 +$as_echo "$as_me: Potential Boot JDK found at $BOOT_JDK did not contain an rt.jar; ignoring" >&6;} + BOOT_JDK_FOUND=no + else + # Oh, this is looking good! We probably have found a proper JDK. Is it the correct version? + BOOT_JDK_VERSION=`"$BOOT_JDK/bin/java" -version 2>&1 | head -n 1` + + # Extra M4 quote needed to protect [] in grep expression. + FOUND_VERSION_78=`echo $BOOT_JDK_VERSION | grep '\"1\.[78]\.'` + if test "x$FOUND_VERSION_78" = x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: Potential Boot JDK found at $BOOT_JDK is incorrect JDK version ($BOOT_JDK_VERSION); ignoring" >&5 +$as_echo "$as_me: Potential Boot JDK found at $BOOT_JDK is incorrect JDK version ($BOOT_JDK_VERSION); ignoring" >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: (Your Boot JDK must be version 7 or 8)" >&5 +$as_echo "$as_me: (Your Boot JDK must be version 7 or 8)" >&6;} + BOOT_JDK_FOUND=no + else + # We're done! :-) + BOOT_JDK_FOUND=yes + + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then + + # Input might be given as Windows format, start by converting to + # unix format. + path="$BOOT_JDK" + new_path=`$CYGPATH -u "$path"` + + # Cygwin tries to hide some aspects of the Windows file system, such that binaries are + # named .exe but called without that suffix. Therefore, "foo" and "foo.exe" are considered + # the same file, most of the time (as in "test -f"). But not when running cygpath -s, then + # "foo.exe" is OK but "foo" is an error. + # + # This test is therefore slightly more accurate than "test -f" to check for file precense. + # It is also a way to make sure we got the proper file name for the real test later on. + test_shortpath=`$CYGPATH -s -m "$new_path" 2> /dev/null` + if test "x$test_shortpath" = x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: The path of BOOT_JDK, which resolves as \"$path\", is invalid." >&5 +$as_echo "$as_me: The path of BOOT_JDK, which resolves as \"$path\", is invalid." >&6;} + as_fn_error $? "Cannot locate the the path of BOOT_JDK" "$LINENO" 5 + fi + + # Call helper function which possibly converts this using DOS-style short mode. + # If so, the updated path is stored in $new_path. + + input_path="$new_path" + # Check if we need to convert this using DOS-style short mode. If the path + # contains just simple characters, use it. Otherwise (spaces, weird characters), + # take no chances and rewrite it. + # Note: m4 eats our [], so we need to use [ and ] instead. + has_forbidden_chars=`$ECHO "$input_path" | $GREP [^-._/a-zA-Z0-9]` + if test "x$has_forbidden_chars" != x; then + # Now convert it to mixed DOS-style, short mode (no spaces, and / instead of \) + shortmode_path=`$CYGPATH -s -m -a "$input_path"` + path_after_shortmode=`$CYGPATH -u "$shortmode_path"` + if test "x$path_after_shortmode" != "x$input_to_shortpath"; then + # Going to short mode and back again did indeed matter. Since short mode is + # case insensitive, let's make it lowercase to improve readability. + shortmode_path=`$ECHO "$shortmode_path" | $TR 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` + # Now convert it back to Unix-stile (cygpath) + input_path=`$CYGPATH -u "$shortmode_path"` + new_path="$input_path" + fi + fi + + test_cygdrive_prefix=`$ECHO $input_path | $GREP ^/cygdrive/` + if test "x$test_cygdrive_prefix" = x; then + # As a simple fix, exclude /usr/bin since it's not a real path. + if test "x`$ECHO $new_path | $GREP ^/usr/bin/`" = x; then + # The path is in a Cygwin special directory (e.g. /home). We need this converted to + # a path prefixed by /cygdrive for fixpath to work. + new_path="$CYGWIN_ROOT_PATH$input_path" + fi + fi + + + if test "x$path" != "x$new_path"; then + BOOT_JDK="$new_path" + { $as_echo "$as_me:${as_lineno-$LINENO}: Rewriting BOOT_JDK to \"$new_path\"" >&5 +$as_echo "$as_me: Rewriting BOOT_JDK to \"$new_path\"" >&6;} + fi + + elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then + + path="$BOOT_JDK" + has_colon=`$ECHO $path | $GREP ^.:` + new_path="$path" + if test "x$has_colon" = x; then + # Not in mixed or Windows style, start by that. + new_path=`cmd //c echo $path` + fi + + + input_path="$new_path" + # Check if we need to convert this using DOS-style short mode. If the path + # contains just simple characters, use it. Otherwise (spaces, weird characters), + # take no chances and rewrite it. + # Note: m4 eats our [], so we need to use [ and ] instead. + has_forbidden_chars=`$ECHO "$input_path" | $GREP [^-_/:a-zA-Z0-9]` + if test "x$has_forbidden_chars" != x; then + # Now convert it to mixed DOS-style, short mode (no spaces, and / instead of \) + new_path=`cmd /c "for %A in (\"$input_path\") do @echo %~sA"|$TR \\\\\\\\ / | $TR 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` + fi + + + windows_path="$new_path" + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then + unix_path=`$CYGPATH -u "$windows_path"` + new_path="$unix_path" + elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then + unix_path=`$ECHO "$windows_path" | $SED -e 's,^\\(.\\):,/\\1,g' -e 's,\\\\,/,g'` + new_path="$unix_path" + fi + + if test "x$path" != "x$new_path"; then + BOOT_JDK="$new_path" + { $as_echo "$as_me:${as_lineno-$LINENO}: Rewriting BOOT_JDK to \"$new_path\"" >&5 +$as_echo "$as_me: Rewriting BOOT_JDK to \"$new_path\"" >&6;} + fi + + # Save the first 10 bytes of this path to the storage, so fixpath can work. + all_fixpath_prefixes=("${all_fixpath_prefixes[@]}" "${new_path:0:10}") + + else + # We're on a posix platform. Hooray! :) + path="$BOOT_JDK" + + if test ! -f "$path" && test ! -d "$path"; then + as_fn_error $? "The path of BOOT_JDK, which resolves as \"$path\", is not found." "$LINENO" 5 + fi + + has_space=`$ECHO "$path" | $GREP " "` + if test "x$has_space" != x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: The path of BOOT_JDK, which resolves as \"$path\", is invalid." >&5 +$as_echo "$as_me: The path of BOOT_JDK, which resolves as \"$path\", is invalid." >&6;} + as_fn_error $? "Spaces are not allowed in this path." "$LINENO" 5 + fi + fi + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for Boot JDK" >&5 +$as_echo_n "checking for Boot JDK... " >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $BOOT_JDK" >&5 +$as_echo "$BOOT_JDK" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: checking Boot JDK version" >&5 +$as_echo_n "checking Boot JDK version... " >&6; } + BOOT_JDK_VERSION=`"$BOOT_JDK/bin/java" -version 2>&1 | $TR '\n\r' ' '` + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $BOOT_JDK_VERSION" >&5 +$as_echo "$BOOT_JDK_VERSION" >&6; } + fi # end check jdk version + fi # end check rt.jar + fi # end check javac + fi # end check java + fi # end check boot jdk found + fi + + done + fi + + + # If previous step claimed to have found a JDK, check it to see if it seems to be valid. + if test "x$BOOT_JDK_FOUND" = xmaybe; then + # Do we have a bin/java? + if test ! -x "$BOOT_JDK/bin/java"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: Potential Boot JDK found at $BOOT_JDK did not contain bin/java; ignoring" >&5 +$as_echo "$as_me: Potential Boot JDK found at $BOOT_JDK did not contain bin/java; ignoring" >&6;} + BOOT_JDK_FOUND=no + else + # Do we have a bin/javac? + if test ! -x "$BOOT_JDK/bin/javac"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: Potential Boot JDK found at $BOOT_JDK did not contain bin/javac; ignoring" >&5 +$as_echo "$as_me: Potential Boot JDK found at $BOOT_JDK did not contain bin/javac; ignoring" >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: (This might be an JRE instead of an JDK)" >&5 +$as_echo "$as_me: (This might be an JRE instead of an JDK)" >&6;} + BOOT_JDK_FOUND=no + else + # Do we have an rt.jar? (On MacOSX it is called classes.jar) + if test ! -f "$BOOT_JDK/jre/lib/rt.jar" && test ! -f "$BOOT_JDK/../Classes/classes.jar"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: Potential Boot JDK found at $BOOT_JDK did not contain an rt.jar; ignoring" >&5 +$as_echo "$as_me: Potential Boot JDK found at $BOOT_JDK did not contain an rt.jar; ignoring" >&6;} + BOOT_JDK_FOUND=no + else + # Oh, this is looking good! We probably have found a proper JDK. Is it the correct version? + BOOT_JDK_VERSION=`"$BOOT_JDK/bin/java" -version 2>&1 | head -n 1` + + # Extra M4 quote needed to protect [] in grep expression. + FOUND_VERSION_78=`echo $BOOT_JDK_VERSION | grep '\"1\.[78]\.'` + if test "x$FOUND_VERSION_78" = x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: Potential Boot JDK found at $BOOT_JDK is incorrect JDK version ($BOOT_JDK_VERSION); ignoring" >&5 +$as_echo "$as_me: Potential Boot JDK found at $BOOT_JDK is incorrect JDK version ($BOOT_JDK_VERSION); ignoring" >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: (Your Boot JDK must be version 7 or 8)" >&5 +$as_echo "$as_me: (Your Boot JDK must be version 7 or 8)" >&6;} + BOOT_JDK_FOUND=no + else + # We're done! :-) + BOOT_JDK_FOUND=yes + + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then + + # Input might be given as Windows format, start by converting to + # unix format. + path="$BOOT_JDK" + new_path=`$CYGPATH -u "$path"` + + # Cygwin tries to hide some aspects of the Windows file system, such that binaries are + # named .exe but called without that suffix. Therefore, "foo" and "foo.exe" are considered + # the same file, most of the time (as in "test -f"). But not when running cygpath -s, then + # "foo.exe" is OK but "foo" is an error. + # + # This test is therefore slightly more accurate than "test -f" to check for file precense. + # It is also a way to make sure we got the proper file name for the real test later on. + test_shortpath=`$CYGPATH -s -m "$new_path" 2> /dev/null` + if test "x$test_shortpath" = x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: The path of BOOT_JDK, which resolves as \"$path\", is invalid." >&5 +$as_echo "$as_me: The path of BOOT_JDK, which resolves as \"$path\", is invalid." >&6;} + as_fn_error $? "Cannot locate the the path of BOOT_JDK" "$LINENO" 5 + fi + + # Call helper function which possibly converts this using DOS-style short mode. + # If so, the updated path is stored in $new_path. + + input_path="$new_path" + # Check if we need to convert this using DOS-style short mode. If the path + # contains just simple characters, use it. Otherwise (spaces, weird characters), + # take no chances and rewrite it. + # Note: m4 eats our [], so we need to use [ and ] instead. + has_forbidden_chars=`$ECHO "$input_path" | $GREP [^-._/a-zA-Z0-9]` + if test "x$has_forbidden_chars" != x; then + # Now convert it to mixed DOS-style, short mode (no spaces, and / instead of \) + shortmode_path=`$CYGPATH -s -m -a "$input_path"` + path_after_shortmode=`$CYGPATH -u "$shortmode_path"` + if test "x$path_after_shortmode" != "x$input_to_shortpath"; then + # Going to short mode and back again did indeed matter. Since short mode is + # case insensitive, let's make it lowercase to improve readability. + shortmode_path=`$ECHO "$shortmode_path" | $TR 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` + # Now convert it back to Unix-stile (cygpath) + input_path=`$CYGPATH -u "$shortmode_path"` + new_path="$input_path" + fi + fi + + test_cygdrive_prefix=`$ECHO $input_path | $GREP ^/cygdrive/` + if test "x$test_cygdrive_prefix" = x; then + # As a simple fix, exclude /usr/bin since it's not a real path. + if test "x`$ECHO $new_path | $GREP ^/usr/bin/`" = x; then + # The path is in a Cygwin special directory (e.g. /home). We need this converted to + # a path prefixed by /cygdrive for fixpath to work. + new_path="$CYGWIN_ROOT_PATH$input_path" + fi + fi + + + if test "x$path" != "x$new_path"; then + BOOT_JDK="$new_path" + { $as_echo "$as_me:${as_lineno-$LINENO}: Rewriting BOOT_JDK to \"$new_path\"" >&5 +$as_echo "$as_me: Rewriting BOOT_JDK to \"$new_path\"" >&6;} + fi + + elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then + + path="$BOOT_JDK" + has_colon=`$ECHO $path | $GREP ^.:` + new_path="$path" + if test "x$has_colon" = x; then + # Not in mixed or Windows style, start by that. + new_path=`cmd //c echo $path` + fi + + + input_path="$new_path" + # Check if we need to convert this using DOS-style short mode. If the path + # contains just simple characters, use it. Otherwise (spaces, weird characters), + # take no chances and rewrite it. + # Note: m4 eats our [], so we need to use [ and ] instead. + has_forbidden_chars=`$ECHO "$input_path" | $GREP [^-_/:a-zA-Z0-9]` + if test "x$has_forbidden_chars" != x; then + # Now convert it to mixed DOS-style, short mode (no spaces, and / instead of \) + new_path=`cmd /c "for %A in (\"$input_path\") do @echo %~sA"|$TR \\\\\\\\ / | $TR 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` + fi + + + windows_path="$new_path" + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then + unix_path=`$CYGPATH -u "$windows_path"` + new_path="$unix_path" + elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then + unix_path=`$ECHO "$windows_path" | $SED -e 's,^\\(.\\):,/\\1,g' -e 's,\\\\,/,g'` + new_path="$unix_path" + fi + + if test "x$path" != "x$new_path"; then + BOOT_JDK="$new_path" + { $as_echo "$as_me:${as_lineno-$LINENO}: Rewriting BOOT_JDK to \"$new_path\"" >&5 +$as_echo "$as_me: Rewriting BOOT_JDK to \"$new_path\"" >&6;} + fi + + # Save the first 10 bytes of this path to the storage, so fixpath can work. + all_fixpath_prefixes=("${all_fixpath_prefixes[@]}" "${new_path:0:10}") + + else + # We're on a posix platform. Hooray! :) + path="$BOOT_JDK" + + if test ! -f "$path" && test ! -d "$path"; then + as_fn_error $? "The path of BOOT_JDK, which resolves as \"$path\", is not found." "$LINENO" 5 + fi + + has_space=`$ECHO "$path" | $GREP " "` + if test "x$has_space" != x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: The path of BOOT_JDK, which resolves as \"$path\", is invalid." >&5 +$as_echo "$as_me: The path of BOOT_JDK, which resolves as \"$path\", is invalid." >&6;} + as_fn_error $? "Spaces are not allowed in this path." "$LINENO" 5 + fi + fi + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for Boot JDK" >&5 +$as_echo_n "checking for Boot JDK... " >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $BOOT_JDK" >&5 +$as_echo "$BOOT_JDK" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: checking Boot JDK version" >&5 +$as_echo_n "checking Boot JDK version... " >&6; } + BOOT_JDK_VERSION=`"$BOOT_JDK/bin/java" -version 2>&1 | $TR '\n\r' ' '` + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $BOOT_JDK_VERSION" >&5 +$as_echo "$BOOT_JDK_VERSION" >&6; } fi # end check jdk version fi # end check rt.jar fi # end check javac @@ -9868,26 +14914,133 @@ $as_echo "$as_me: (Your Boot JDK must be version 7 or 8)" >&6;} # We're done! :-) BOOT_JDK_FOUND=yes - # Fail with message the path to the Boot JDK if var BOOT_JDK contains a path with no spaces in it. - # Unless on Windows, where we can rewrite the path. - HAS_SPACE=`echo "$BOOT_JDK" | grep " "` - if test "x$HAS_SPACE" != x; then - if test "x$OPENJDK_BUILD_OS" = "xwindows"; then - # First convert it to DOS-style, short mode (no spaces) - BOOT_JDK=`$CYGPATH -s -m -a "$BOOT_JDK"` - # Now it's case insensitive; let's make it lowercase to improve readability - BOOT_JDK=`$ECHO "$BOOT_JDK" | $TR 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvqxyz'` - # Now convert it back to Unix-stile (cygpath) - BOOT_JDK=`$CYGPATH -u "$BOOT_JDK"` - else - as_fn_error $? "You cannot have spaces in the path to the Boot JDK! \"$BOOT_JDK\"" "$LINENO" 5 - fi + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then + + # Input might be given as Windows format, start by converting to + # unix format. + path="$BOOT_JDK" + new_path=`$CYGPATH -u "$path"` + + # Cygwin tries to hide some aspects of the Windows file system, such that binaries are + # named .exe but called without that suffix. Therefore, "foo" and "foo.exe" are considered + # the same file, most of the time (as in "test -f"). But not when running cygpath -s, then + # "foo.exe" is OK but "foo" is an error. + # + # This test is therefore slightly more accurate than "test -f" to check for file precense. + # It is also a way to make sure we got the proper file name for the real test later on. + test_shortpath=`$CYGPATH -s -m "$new_path" 2> /dev/null` + if test "x$test_shortpath" = x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: The path of BOOT_JDK, which resolves as \"$path\", is invalid." >&5 +$as_echo "$as_me: The path of BOOT_JDK, which resolves as \"$path\", is invalid." >&6;} + as_fn_error $? "Cannot locate the the path of BOOT_JDK" "$LINENO" 5 + fi + + # Call helper function which possibly converts this using DOS-style short mode. + # If so, the updated path is stored in $new_path. + + input_path="$new_path" + # Check if we need to convert this using DOS-style short mode. If the path + # contains just simple characters, use it. Otherwise (spaces, weird characters), + # take no chances and rewrite it. + # Note: m4 eats our [], so we need to use [ and ] instead. + has_forbidden_chars=`$ECHO "$input_path" | $GREP [^-._/a-zA-Z0-9]` + if test "x$has_forbidden_chars" != x; then + # Now convert it to mixed DOS-style, short mode (no spaces, and / instead of \) + shortmode_path=`$CYGPATH -s -m -a "$input_path"` + path_after_shortmode=`$CYGPATH -u "$shortmode_path"` + if test "x$path_after_shortmode" != "x$input_to_shortpath"; then + # Going to short mode and back again did indeed matter. Since short mode is + # case insensitive, let's make it lowercase to improve readability. + shortmode_path=`$ECHO "$shortmode_path" | $TR 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` + # Now convert it back to Unix-stile (cygpath) + input_path=`$CYGPATH -u "$shortmode_path"` + new_path="$input_path" fi + fi + + test_cygdrive_prefix=`$ECHO $input_path | $GREP ^/cygdrive/` + if test "x$test_cygdrive_prefix" = x; then + # As a simple fix, exclude /usr/bin since it's not a real path. + if test "x`$ECHO $new_path | $GREP ^/usr/bin/`" = x; then + # The path is in a Cygwin special directory (e.g. /home). We need this converted to + # a path prefixed by /cygdrive for fixpath to work. + new_path="$CYGWIN_ROOT_PATH$input_path" + fi + fi + + + if test "x$path" != "x$new_path"; then + BOOT_JDK="$new_path" + { $as_echo "$as_me:${as_lineno-$LINENO}: Rewriting BOOT_JDK to \"$new_path\"" >&5 +$as_echo "$as_me: Rewriting BOOT_JDK to \"$new_path\"" >&6;} + fi + + elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then + + path="$BOOT_JDK" + has_colon=`$ECHO $path | $GREP ^.:` + new_path="$path" + if test "x$has_colon" = x; then + # Not in mixed or Windows style, start by that. + new_path=`cmd //c echo $path` + fi + + + input_path="$new_path" + # Check if we need to convert this using DOS-style short mode. If the path + # contains just simple characters, use it. Otherwise (spaces, weird characters), + # take no chances and rewrite it. + # Note: m4 eats our [], so we need to use [ and ] instead. + has_forbidden_chars=`$ECHO "$input_path" | $GREP [^-_/:a-zA-Z0-9]` + if test "x$has_forbidden_chars" != x; then + # Now convert it to mixed DOS-style, short mode (no spaces, and / instead of \) + new_path=`cmd /c "for %A in (\"$input_path\") do @echo %~sA"|$TR \\\\\\\\ / | $TR 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` + fi + + + windows_path="$new_path" + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then + unix_path=`$CYGPATH -u "$windows_path"` + new_path="$unix_path" + elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then + unix_path=`$ECHO "$windows_path" | $SED -e 's,^\\(.\\):,/\\1,g' -e 's,\\\\,/,g'` + new_path="$unix_path" + fi + + if test "x$path" != "x$new_path"; then + BOOT_JDK="$new_path" + { $as_echo "$as_me:${as_lineno-$LINENO}: Rewriting BOOT_JDK to \"$new_path\"" >&5 +$as_echo "$as_me: Rewriting BOOT_JDK to \"$new_path\"" >&6;} + fi + + # Save the first 10 bytes of this path to the storage, so fixpath can work. + all_fixpath_prefixes=("${all_fixpath_prefixes[@]}" "${new_path:0:10}") + + else + # We're on a posix platform. Hooray! :) + path="$BOOT_JDK" + + if test ! -f "$path" && test ! -d "$path"; then + as_fn_error $? "The path of BOOT_JDK, which resolves as \"$path\", is not found." "$LINENO" 5 + fi + + has_space=`$ECHO "$path" | $GREP " "` + if test "x$has_space" != x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: The path of BOOT_JDK, which resolves as \"$path\", is invalid." >&5 +$as_echo "$as_me: The path of BOOT_JDK, which resolves as \"$path\", is invalid." >&6;} + as_fn_error $? "Spaces are not allowed in this path." "$LINENO" 5 + fi + fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for Boot JDK" >&5 $as_echo_n "checking for Boot JDK... " >&6; } - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $BOOT_JDK ($BOOT_JDK_VERSION)" >&5 -$as_echo "$BOOT_JDK ($BOOT_JDK_VERSION)" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $BOOT_JDK" >&5 +$as_echo "$BOOT_JDK" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: checking Boot JDK version" >&5 +$as_echo_n "checking Boot JDK version... " >&6; } + BOOT_JDK_VERSION=`"$BOOT_JDK/bin/java" -version 2>&1 | $TR '\n\r' ' '` + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $BOOT_JDK_VERSION" >&5 +$as_echo "$BOOT_JDK_VERSION" >&6; } fi # end check jdk version fi # end check rt.jar fi # end check javac @@ -10465,16 +15618,13 @@ AR_OUT_OPTION='rcs$(SPACE)' +# Locate the actual tools +if test "x$OPENJDK_TARGET_OS" = "xwindows"; then -# Check if the VS env variables were setup prior to running configure. -# If not, then find vcvarsall.bat and run it automatically, and integrate -# the set env variables into the spec file. -SETUPDEVENV="# No special vars" -if test "x$OPENJDK_BUILD_OS" = "xwindows"; then - # Store path to cygwin link.exe to help excluding it when searching for - # VS linker. - # Extract the first word of "link", so it can be a program name with args. + # Store path to cygwin link.exe to help excluding it when searching for + # VS linker. This must be done before changing the PATH when looking for VS. + # Extract the first word of "link", so it can be a program name with args. set dummy link; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } @@ -10514,6 +15664,7 @@ $as_echo "no" >&6; } fi + if test "x$CYGWIN_LINK" != x; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking if the first found link.exe is actually the Cygwin link tool" >&5 $as_echo_n "checking if the first found link.exe is actually the Cygwin link tool... " >&6; } "$CYGWIN_LINK" --version > /dev/null @@ -10526,124 +15677,876 @@ $as_echo "no" >&6; } # This might be the VS linker. Don't exclude it later on. CYGWIN_LINK="" fi + fi - # If vcvarsall.bat has been run, then VCINSTALLDIR is set. - if test "x$VCINSTALLDIR" != x; then - # No further setup is needed. The build will happen from this kind - # of shell. - SETUPDEVENV="# This spec file expects that you are running bash from within a VS command prompt." - # Make sure to remind you, if you forget to run make from a cygwin bash shell - # that is spawned "bash -l" from a VS command prompt. - CHECK_FOR_VCINSTALLDIR=yes - { $as_echo "$as_me:${as_lineno-$LINENO}: checking if you are running from within a VS command prompt" >&5 -$as_echo_n "checking if you are running from within a VS command prompt... " >&6; } - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } + # First-hand choice is to locate and run the vsvars bat file. + + if test "x$OPENJDK_TARGET_CPU_BITS" = x32; then + VCVARSFILE="vc/bin/vcvars32.bat" + else + VCVARSFILE="vc/bin/amd64/vcvars64.bat" + fi + + VS_ENV_CMD="" + VS_ENV_ARGS="" + if test "x$with_toolsdir" != x; then + + if test "x$VS_ENV_CMD" = x; then + VS100BASE="$with_toolsdir/../.." + METHOD="--with-tools-dir" + + windows_path="$VS100BASE" + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then + unix_path=`$CYGPATH -u "$windows_path"` + VS100BASE="$unix_path" + elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then + unix_path=`$ECHO "$windows_path" | $SED -e 's,^\\(.\\):,/\\1,g' -e 's,\\\\,/,g'` + VS100BASE="$unix_path" + fi + + if test -d "$VS100BASE"; then + if test -f "$VS100BASE/$VCVARSFILE"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: Found Visual Studio installation at $VS100BASE using $METHOD" >&5 +$as_echo "$as_me: Found Visual Studio installation at $VS100BASE using $METHOD" >&6;} + VS_ENV_CMD="$VS100BASE/$VCVARSFILE" + else + { $as_echo "$as_me:${as_lineno-$LINENO}: Found Visual Studio installation at $VS100BASE using $METHOD" >&5 +$as_echo "$as_me: Found Visual Studio installation at $VS100BASE using $METHOD" >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: Warning: $VCVARSFILE is missing, this is probably Visual Studio Express. Ignoring" >&5 +$as_echo "$as_me: Warning: $VCVARSFILE is missing, this is probably Visual Studio Express. Ignoring" >&6;} + fi + fi + fi + + fi + + if test "x$with_toolsdir" != x && test "x$VS_ENV_CMD" = x; then + # Having specified an argument which is incorrect will produce an instant failure; + # we should not go on looking + { $as_echo "$as_me:${as_lineno-$LINENO}: The path given by --with-tools-dir does not contain a valid Visual Studio installation" >&5 +$as_echo "$as_me: The path given by --with-tools-dir does not contain a valid Visual Studio installation" >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: Please point to the VC/bin directory within the Visual Studio installation" >&5 +$as_echo "$as_me: Please point to the VC/bin directory within the Visual Studio installation" >&6;} + as_fn_error $? "Cannot locate a valid Visual Studio installation" "$LINENO" 5 + fi + + if test "x$ProgramW6432" != x; then + + if test "x$VS_ENV_CMD" = x; then + WIN_SDK_BASE="$ProgramW6432/Microsoft SDKs/Windows/v7.1/Bin" + METHOD="well-known name" + + windows_path="$WIN_SDK_BASE" + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then + unix_path=`$CYGPATH -u "$windows_path"` + WIN_SDK_BASE="$unix_path" + elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then + unix_path=`$ECHO "$windows_path" | $SED -e 's,^\\(.\\):,/\\1,g' -e 's,\\\\,/,g'` + WIN_SDK_BASE="$unix_path" + fi + + if test -d "$WIN_SDK_BASE"; then + if test -f "$WIN_SDK_BASE/SetEnv.Cmd"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: Found Windows SDK installation at $WIN_SDK_BASE using $METHOD" >&5 +$as_echo "$as_me: Found Windows SDK installation at $WIN_SDK_BASE using $METHOD" >&6;} + VS_ENV_CMD="$WIN_SDK_BASE/SetEnv.Cmd" + if test "x$OPENJDK_TARGET_CPU_BITS" = x32; then + VS_ENV_ARGS="/x86" + else + VS_ENV_ARGS="/x64" + fi + else + { $as_echo "$as_me:${as_lineno-$LINENO}: Found Windows SDK installation at $WIN_SDK_BASE using $METHOD" >&5 +$as_echo "$as_me: Found Windows SDK installation at $WIN_SDK_BASE using $METHOD" >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: Warning: Installation is broken, SetEnv.Cmd is missing. Ignoring" >&5 +$as_echo "$as_me: Warning: Installation is broken, SetEnv.Cmd is missing. Ignoring" >&6;} + fi + fi + fi + + fi + if test "x$PROGRAMW6432" != x; then + + if test "x$VS_ENV_CMD" = x; then + WIN_SDK_BASE="$PROGRAMW6432/Microsoft SDKs/Windows/v7.1/Bin" + METHOD="well-known name" + + windows_path="$WIN_SDK_BASE" + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then + unix_path=`$CYGPATH -u "$windows_path"` + WIN_SDK_BASE="$unix_path" + elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then + unix_path=`$ECHO "$windows_path" | $SED -e 's,^\\(.\\):,/\\1,g' -e 's,\\\\,/,g'` + WIN_SDK_BASE="$unix_path" + fi + + if test -d "$WIN_SDK_BASE"; then + if test -f "$WIN_SDK_BASE/SetEnv.Cmd"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: Found Windows SDK installation at $WIN_SDK_BASE using $METHOD" >&5 +$as_echo "$as_me: Found Windows SDK installation at $WIN_SDK_BASE using $METHOD" >&6;} + VS_ENV_CMD="$WIN_SDK_BASE/SetEnv.Cmd" + if test "x$OPENJDK_TARGET_CPU_BITS" = x32; then + VS_ENV_ARGS="/x86" + else + VS_ENV_ARGS="/x64" + fi + else + { $as_echo "$as_me:${as_lineno-$LINENO}: Found Windows SDK installation at $WIN_SDK_BASE using $METHOD" >&5 +$as_echo "$as_me: Found Windows SDK installation at $WIN_SDK_BASE using $METHOD" >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: Warning: Installation is broken, SetEnv.Cmd is missing. Ignoring" >&5 +$as_echo "$as_me: Warning: Installation is broken, SetEnv.Cmd is missing. Ignoring" >&6;} + fi + fi + fi + + fi + if test "x$PROGRAMFILES" != x; then + + if test "x$VS_ENV_CMD" = x; then + WIN_SDK_BASE="$PROGRAMFILES/Microsoft SDKs/Windows/v7.1/Bin" + METHOD="well-known name" + + windows_path="$WIN_SDK_BASE" + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then + unix_path=`$CYGPATH -u "$windows_path"` + WIN_SDK_BASE="$unix_path" + elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then + unix_path=`$ECHO "$windows_path" | $SED -e 's,^\\(.\\):,/\\1,g' -e 's,\\\\,/,g'` + WIN_SDK_BASE="$unix_path" + fi + + if test -d "$WIN_SDK_BASE"; then + if test -f "$WIN_SDK_BASE/SetEnv.Cmd"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: Found Windows SDK installation at $WIN_SDK_BASE using $METHOD" >&5 +$as_echo "$as_me: Found Windows SDK installation at $WIN_SDK_BASE using $METHOD" >&6;} + VS_ENV_CMD="$WIN_SDK_BASE/SetEnv.Cmd" + if test "x$OPENJDK_TARGET_CPU_BITS" = x32; then + VS_ENV_ARGS="/x86" + else + VS_ENV_ARGS="/x64" + fi + else + { $as_echo "$as_me:${as_lineno-$LINENO}: Found Windows SDK installation at $WIN_SDK_BASE using $METHOD" >&5 +$as_echo "$as_me: Found Windows SDK installation at $WIN_SDK_BASE using $METHOD" >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: Warning: Installation is broken, SetEnv.Cmd is missing. Ignoring" >&5 +$as_echo "$as_me: Warning: Installation is broken, SetEnv.Cmd is missing. Ignoring" >&6;} + fi + fi + fi + + fi + + if test "x$VS_ENV_CMD" = x; then + WIN_SDK_BASE="C:/Program Files/Microsoft SDKs/Windows/v7.1/Bin" + METHOD="well-known name" + + windows_path="$WIN_SDK_BASE" + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then + unix_path=`$CYGPATH -u "$windows_path"` + WIN_SDK_BASE="$unix_path" + elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then + unix_path=`$ECHO "$windows_path" | $SED -e 's,^\\(.\\):,/\\1,g' -e 's,\\\\,/,g'` + WIN_SDK_BASE="$unix_path" + fi + + if test -d "$WIN_SDK_BASE"; then + if test -f "$WIN_SDK_BASE/SetEnv.Cmd"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: Found Windows SDK installation at $WIN_SDK_BASE using $METHOD" >&5 +$as_echo "$as_me: Found Windows SDK installation at $WIN_SDK_BASE using $METHOD" >&6;} + VS_ENV_CMD="$WIN_SDK_BASE/SetEnv.Cmd" + if test "x$OPENJDK_TARGET_CPU_BITS" = x32; then + VS_ENV_ARGS="/x86" + else + VS_ENV_ARGS="/x64" + fi + else + { $as_echo "$as_me:${as_lineno-$LINENO}: Found Windows SDK installation at $WIN_SDK_BASE using $METHOD" >&5 +$as_echo "$as_me: Found Windows SDK installation at $WIN_SDK_BASE using $METHOD" >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: Warning: Installation is broken, SetEnv.Cmd is missing. Ignoring" >&5 +$as_echo "$as_me: Warning: Installation is broken, SetEnv.Cmd is missing. Ignoring" >&6;} + fi + fi + fi + + + if test "x$VS_ENV_CMD" = x; then + WIN_SDK_BASE="C:/Program Files (x86)/Microsoft SDKs/Windows/v7.1/Bin" + METHOD="well-known name" + + windows_path="$WIN_SDK_BASE" + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then + unix_path=`$CYGPATH -u "$windows_path"` + WIN_SDK_BASE="$unix_path" + elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then + unix_path=`$ECHO "$windows_path" | $SED -e 's,^\\(.\\):,/\\1,g' -e 's,\\\\,/,g'` + WIN_SDK_BASE="$unix_path" + fi + + if test -d "$WIN_SDK_BASE"; then + if test -f "$WIN_SDK_BASE/SetEnv.Cmd"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: Found Windows SDK installation at $WIN_SDK_BASE using $METHOD" >&5 +$as_echo "$as_me: Found Windows SDK installation at $WIN_SDK_BASE using $METHOD" >&6;} + VS_ENV_CMD="$WIN_SDK_BASE/SetEnv.Cmd" + if test "x$OPENJDK_TARGET_CPU_BITS" = x32; then + VS_ENV_ARGS="/x86" + else + VS_ENV_ARGS="/x64" + fi + else + { $as_echo "$as_me:${as_lineno-$LINENO}: Found Windows SDK installation at $WIN_SDK_BASE using $METHOD" >&5 +$as_echo "$as_me: Found Windows SDK installation at $WIN_SDK_BASE using $METHOD" >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: Warning: Installation is broken, SetEnv.Cmd is missing. Ignoring" >&5 +$as_echo "$as_me: Warning: Installation is broken, SetEnv.Cmd is missing. Ignoring" >&6;} + fi + fi + fi + + + if test "x$VS100COMNTOOLS" != x; then + + if test "x$VS_ENV_CMD" = x; then + VS100BASE="$VS100COMNTOOLS/../.." + METHOD="VS100COMNTOOLS variable" + + windows_path="$VS100BASE" + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then + unix_path=`$CYGPATH -u "$windows_path"` + VS100BASE="$unix_path" + elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then + unix_path=`$ECHO "$windows_path" | $SED -e 's,^\\(.\\):,/\\1,g' -e 's,\\\\,/,g'` + VS100BASE="$unix_path" + fi + + if test -d "$VS100BASE"; then + if test -f "$VS100BASE/$VCVARSFILE"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: Found Visual Studio installation at $VS100BASE using $METHOD" >&5 +$as_echo "$as_me: Found Visual Studio installation at $VS100BASE using $METHOD" >&6;} + VS_ENV_CMD="$VS100BASE/$VCVARSFILE" + else + { $as_echo "$as_me:${as_lineno-$LINENO}: Found Visual Studio installation at $VS100BASE using $METHOD" >&5 +$as_echo "$as_me: Found Visual Studio installation at $VS100BASE using $METHOD" >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: Warning: $VCVARSFILE is missing, this is probably Visual Studio Express. Ignoring" >&5 +$as_echo "$as_me: Warning: $VCVARSFILE is missing, this is probably Visual Studio Express. Ignoring" >&6;} + fi + fi + fi + + fi + if test "x$PROGRAMFILES" != x; then + + if test "x$VS_ENV_CMD" = x; then + VS100BASE="$PROGRAMFILES/Microsoft Visual Studio 10.0" + METHOD="well-known name" + + windows_path="$VS100BASE" + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then + unix_path=`$CYGPATH -u "$windows_path"` + VS100BASE="$unix_path" + elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then + unix_path=`$ECHO "$windows_path" | $SED -e 's,^\\(.\\):,/\\1,g' -e 's,\\\\,/,g'` + VS100BASE="$unix_path" + fi + + if test -d "$VS100BASE"; then + if test -f "$VS100BASE/$VCVARSFILE"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: Found Visual Studio installation at $VS100BASE using $METHOD" >&5 +$as_echo "$as_me: Found Visual Studio installation at $VS100BASE using $METHOD" >&6;} + VS_ENV_CMD="$VS100BASE/$VCVARSFILE" + else + { $as_echo "$as_me:${as_lineno-$LINENO}: Found Visual Studio installation at $VS100BASE using $METHOD" >&5 +$as_echo "$as_me: Found Visual Studio installation at $VS100BASE using $METHOD" >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: Warning: $VCVARSFILE is missing, this is probably Visual Studio Express. Ignoring" >&5 +$as_echo "$as_me: Warning: $VCVARSFILE is missing, this is probably Visual Studio Express. Ignoring" >&6;} + fi + fi + fi + + fi + + if test "x$VS_ENV_CMD" = x; then + VS100BASE="C:/Program Files/Microsoft Visual Studio 10.0" + METHOD="well-known name" + + windows_path="$VS100BASE" + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then + unix_path=`$CYGPATH -u "$windows_path"` + VS100BASE="$unix_path" + elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then + unix_path=`$ECHO "$windows_path" | $SED -e 's,^\\(.\\):,/\\1,g' -e 's,\\\\,/,g'` + VS100BASE="$unix_path" + fi + + if test -d "$VS100BASE"; then + if test -f "$VS100BASE/$VCVARSFILE"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: Found Visual Studio installation at $VS100BASE using $METHOD" >&5 +$as_echo "$as_me: Found Visual Studio installation at $VS100BASE using $METHOD" >&6;} + VS_ENV_CMD="$VS100BASE/$VCVARSFILE" + else + { $as_echo "$as_me:${as_lineno-$LINENO}: Found Visual Studio installation at $VS100BASE using $METHOD" >&5 +$as_echo "$as_me: Found Visual Studio installation at $VS100BASE using $METHOD" >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: Warning: $VCVARSFILE is missing, this is probably Visual Studio Express. Ignoring" >&5 +$as_echo "$as_me: Warning: $VCVARSFILE is missing, this is probably Visual Studio Express. Ignoring" >&6;} + fi + fi + fi + + + if test "x$VS_ENV_CMD" = x; then + VS100BASE="C:/Program Files (x86)/Microsoft Visual Studio 10.0" + METHOD="well-known name" + + windows_path="$VS100BASE" + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then + unix_path=`$CYGPATH -u "$windows_path"` + VS100BASE="$unix_path" + elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then + unix_path=`$ECHO "$windows_path" | $SED -e 's,^\\(.\\):,/\\1,g' -e 's,\\\\,/,g'` + VS100BASE="$unix_path" + fi + + if test -d "$VS100BASE"; then + if test -f "$VS100BASE/$VCVARSFILE"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: Found Visual Studio installation at $VS100BASE using $METHOD" >&5 +$as_echo "$as_me: Found Visual Studio installation at $VS100BASE using $METHOD" >&6;} + VS_ENV_CMD="$VS100BASE/$VCVARSFILE" + else + { $as_echo "$as_me:${as_lineno-$LINENO}: Found Visual Studio installation at $VS100BASE using $METHOD" >&5 +$as_echo "$as_me: Found Visual Studio installation at $VS100BASE using $METHOD" >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: Warning: $VCVARSFILE is missing, this is probably Visual Studio Express. Ignoring" >&5 +$as_echo "$as_me: Warning: $VCVARSFILE is missing, this is probably Visual Studio Express. Ignoring" >&6;} + fi + fi + fi + + + if test "x$VS_ENV_CMD" != x; then + # We have found a Visual Studio environment on disk, let's extract variables from the vsvars bat file. + + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then + + # First separate the path from the arguments. This will split at the first + # space. + complete="$VS_ENV_CMD" + path="${complete%% *}" + tmp="$complete EOL" + arguments="${tmp#* }" + + # Input might be given as Windows format, start by converting to + # unix format. + new_path=`$CYGPATH -u "$path"` + + # Now try to locate executable using which + new_path=`$WHICH "$new_path" 2> /dev/null` + # bat and cmd files are not always considered executable in cygwin causing which + # to not find them + if test "x$new_path" = x \ + && test "x`$ECHO \"$path\" | $GREP -e \"\\.bat$\" -e \"\\.cmd$\"`" != x \ + && test "x`$LS \"$path\" 2>/dev/null`" != x; then + new_path=`$CYGPATH -u "$path"` + fi + if test "x$new_path" = x; then + # Oops. Which didn't find the executable. + # The splitting of arguments from the executable at a space might have been incorrect, + # since paths with space are more likely in Windows. Give it another try with the whole + # argument. + path="$complete" + arguments="EOL" + new_path=`$CYGPATH -u "$path"` + new_path=`$WHICH "$new_path" 2> /dev/null` + # bat and cmd files are not always considered executable in cygwin causing which + # to not find them + if test "x$new_path" = x \ + && test "x`$ECHO \"$path\" | $GREP -e \"\\.bat$\" -e \"\\.cmd$\"`" != x \ + && test "x`$LS \"$path\" 2>/dev/null`" != x; then + new_path=`$CYGPATH -u "$path"` + fi + if test "x$new_path" = x; then + # It's still not found. Now this is an unrecoverable error. + { $as_echo "$as_me:${as_lineno-$LINENO}: The path of VS_ENV_CMD, which resolves as \"$complete\", is not found." >&5 +$as_echo "$as_me: The path of VS_ENV_CMD, which resolves as \"$complete\", is not found." >&6;} + has_space=`$ECHO "$complete" | $GREP " "` + if test "x$has_space" != x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: You might be mixing spaces in the path and extra arguments, which is not allowed." >&5 +$as_echo "$as_me: You might be mixing spaces in the path and extra arguments, which is not allowed." >&6;} + fi + as_fn_error $? "Cannot locate the the path of VS_ENV_CMD" "$LINENO" 5 + fi + fi + + # Cygwin tries to hide some aspects of the Windows file system, such that binaries are + # named .exe but called without that suffix. Therefore, "foo" and "foo.exe" are considered + # the same file, most of the time (as in "test -f"). But not when running cygpath -s, then + # "foo.exe" is OK but "foo" is an error. + # + # This test is therefore slightly more accurate than "test -f" to check for file precense. + # It is also a way to make sure we got the proper file name for the real test later on. + test_shortpath=`$CYGPATH -s -m "$new_path" 2> /dev/null` + if test "x$test_shortpath" = x; then + # Short path failed, file does not exist as specified. + # Try adding .exe or .cmd + if test -f "${new_path}.exe"; then + input_to_shortpath="${new_path}.exe" + elif test -f "${new_path}.cmd"; then + input_to_shortpath="${new_path}.cmd" else - # Ah, we have not yet run vcvarsall.bat/vsvars32.bat/vsvars64.bat. Lets do that. First find it. - if test "x$VS100COMNTOOLS" != x; then - VARSBAT=`find "$VS100COMNTOOLS/../.." -name vcvarsall.bat` - SEARCH_ROOT="$VS100COMNTOOLS" - else - VARSBAT=`find "$PROGRAMFILES" -name vcvarsall.bat` - SEARCH_ROOT="$PROGRAMFILES" - fi - VCPATH=`dirname "$VARSBAT"` - VCPATH=`cygpath -w "$VCPATH"` - if test "x$VARSBAT" = x || test ! -d "$VCPATH"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking if we can find the VS installation" >&5 -$as_echo_n "checking if we can find the VS installation... " >&6; } - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } - as_fn_error $? "Tried to find a VS installation using both $SEARCH_ROOT but failed. Please run \"c:\\cygwin\\bin\\bash.exe -l\" from a VS command prompt and then run configure/make from there." "$LINENO" 5 - fi - case "$OPENJDK_TARGET_CPU" in - x86) - VARSBAT_ARCH=x86 - ;; - x86_64) - VARSBAT_ARCH=amd64 - ;; - esac - # Lets extract the variables that are set by vcvarsall.bat/vsvars32.bat/vsvars64.bat - cd $OUTPUT_ROOT - bash $SRC_ROOT/common/bin/extractvcvars.sh "$VARSBAT" "$VARSBAT_ARCH" - cd $CURDIR - if test ! -s $OUTPUT_ROOT/localdevenv.sh || test ! -s $OUTPUT_ROOT/localdevenv.gmk; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking if we can extract the needed env variables" >&5 -$as_echo_n "checking if we can extract the needed env variables... " >&6; } - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } - as_fn_error $? "Could not succesfully extract the env variables needed for the VS setup. Please run \"c:\\cygwin\\bin\\bash.exe -l\" from a VS command prompt and then run configure/make from there." "$LINENO" 5 - fi - # Now set all paths and other env variables. This will allow the rest of - # the configure script to find and run the compiler in the proper way. - . $OUTPUT_ROOT/localdevenv.sh - { $as_echo "$as_me:${as_lineno-$LINENO}: checking if we can find the VS installation" >&5 -$as_echo_n "checking if we can find the VS installation... " >&6; } - if test "x$VCINSTALLDIR" != x; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $VCINSTALLDIR" >&5 -$as_echo "$VCINSTALLDIR" >&6; } - else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } - as_fn_error $? "Could not find VS installation. Please install. If you are sure you have installed VS, then please run \"c:\\cygwin\\bin\\bash.exe -l\" from a VS command prompt and then run configure/make from there." "$LINENO" 5 - fi - CHECK_FOR_VCINSTALLDIR=no - SETUPDEVENV="include $OUTPUT_ROOT/localdevenv.gmk" + { $as_echo "$as_me:${as_lineno-$LINENO}: The path of VS_ENV_CMD, which resolves as \"$new_path\", is invalid." >&5 +$as_echo "$as_me: The path of VS_ENV_CMD, which resolves as \"$new_path\", is invalid." >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: Neither \"$new_path\" nor \"$new_path.exe/cmd\" can be found" >&5 +$as_echo "$as_me: Neither \"$new_path\" nor \"$new_path.exe/cmd\" can be found" >&6;} + as_fn_error $? "Cannot locate the the path of VS_ENV_CMD" "$LINENO" 5 + fi + else + input_to_shortpath="$new_path" + fi - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for msvcr100.dll" >&5 + # Call helper function which possibly converts this using DOS-style short mode. + # If so, the updated path is stored in $new_path. + new_path="$input_to_shortpath" + + input_path="$input_to_shortpath" + # Check if we need to convert this using DOS-style short mode. If the path + # contains just simple characters, use it. Otherwise (spaces, weird characters), + # take no chances and rewrite it. + # Note: m4 eats our [], so we need to use [ and ] instead. + has_forbidden_chars=`$ECHO "$input_path" | $GREP [^-._/a-zA-Z0-9]` + if test "x$has_forbidden_chars" != x; then + # Now convert it to mixed DOS-style, short mode (no spaces, and / instead of \) + shortmode_path=`$CYGPATH -s -m -a "$input_path"` + path_after_shortmode=`$CYGPATH -u "$shortmode_path"` + if test "x$path_after_shortmode" != "x$input_to_shortpath"; then + # Going to short mode and back again did indeed matter. Since short mode is + # case insensitive, let's make it lowercase to improve readability. + shortmode_path=`$ECHO "$shortmode_path" | $TR 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` + # Now convert it back to Unix-stile (cygpath) + input_path=`$CYGPATH -u "$shortmode_path"` + new_path="$input_path" + fi + fi + + test_cygdrive_prefix=`$ECHO $input_path | $GREP ^/cygdrive/` + if test "x$test_cygdrive_prefix" = x; then + # As a simple fix, exclude /usr/bin since it's not a real path. + if test "x`$ECHO $input_to_shortpath | $GREP ^/usr/bin/`" = x; then + # The path is in a Cygwin special directory (e.g. /home). We need this converted to + # a path prefixed by /cygdrive for fixpath to work. + new_path="$CYGWIN_ROOT_PATH$input_path" + fi + fi + + # remove trailing .exe if any + new_path="${new_path/%.exe/}" + + elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then + + # First separate the path from the arguments. This will split at the first + # space. + complete="$VS_ENV_CMD" + path="${complete%% *}" + tmp="$complete EOL" + arguments="${tmp#* }" + + # Input might be given as Windows format, start by converting to + # unix format. + new_path="$path" + + windows_path="$new_path" + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then + unix_path=`$CYGPATH -u "$windows_path"` + new_path="$unix_path" + elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then + unix_path=`$ECHO "$windows_path" | $SED -e 's,^\\(.\\):,/\\1,g' -e 's,\\\\,/,g'` + new_path="$unix_path" + fi + + + # Now try to locate executable using which + new_path=`$WHICH "$new_path" 2> /dev/null` + + if test "x$new_path" = x; then + # Oops. Which didn't find the executable. + # The splitting of arguments from the executable at a space might have been incorrect, + # since paths with space are more likely in Windows. Give it another try with the whole + # argument. + path="$complete" + arguments="EOL" + new_path="$path" + + windows_path="$new_path" + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then + unix_path=`$CYGPATH -u "$windows_path"` + new_path="$unix_path" + elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then + unix_path=`$ECHO "$windows_path" | $SED -e 's,^\\(.\\):,/\\1,g' -e 's,\\\\,/,g'` + new_path="$unix_path" + fi + + + new_path=`$WHICH "$new_path" 2> /dev/null` + + if test "x$new_path" = x; then + # It's still not found. Now this is an unrecoverable error. + { $as_echo "$as_me:${as_lineno-$LINENO}: The path of VS_ENV_CMD, which resolves as \"$complete\", is not found." >&5 +$as_echo "$as_me: The path of VS_ENV_CMD, which resolves as \"$complete\", is not found." >&6;} + has_space=`$ECHO "$complete" | $GREP " "` + if test "x$has_space" != x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: You might be mixing spaces in the path and extra arguments, which is not allowed." >&5 +$as_echo "$as_me: You might be mixing spaces in the path and extra arguments, which is not allowed." >&6;} + fi + as_fn_error $? "Cannot locate the the path of VS_ENV_CMD" "$LINENO" 5 + fi + fi + + # Now new_path has a complete unix path to the binary + if test "x`$ECHO $new_path | $GREP ^/bin/`" != x; then + # Keep paths in /bin as-is, but remove trailing .exe if any + new_path="${new_path/%.exe/}" + # Do not save /bin paths to all_fixpath_prefixes! + else + # Not in mixed or Windows style, start by that. + new_path=`cmd //c echo $new_path` + + input_path="$new_path" + # Check if we need to convert this using DOS-style short mode. If the path + # contains just simple characters, use it. Otherwise (spaces, weird characters), + # take no chances and rewrite it. + # Note: m4 eats our [], so we need to use [ and ] instead. + has_forbidden_chars=`$ECHO "$input_path" | $GREP [^-_/:a-zA-Z0-9]` + if test "x$has_forbidden_chars" != x; then + # Now convert it to mixed DOS-style, short mode (no spaces, and / instead of \) + new_path=`cmd /c "for %A in (\"$input_path\") do @echo %~sA"|$TR \\\\\\\\ / | $TR 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` + fi + + # Output is in $new_path + + windows_path="$new_path" + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then + unix_path=`$CYGPATH -u "$windows_path"` + new_path="$unix_path" + elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then + unix_path=`$ECHO "$windows_path" | $SED -e 's,^\\(.\\):,/\\1,g' -e 's,\\\\,/,g'` + new_path="$unix_path" + fi + + # remove trailing .exe if any + new_path="${new_path/%.exe/}" + + # Save the first 10 bytes of this path to the storage, so fixpath can work. + all_fixpath_prefixes=("${all_fixpath_prefixes[@]}" "${new_path:0:10}") + fi + + else + # We're on a posix platform. Hooray! :) + # First separate the path from the arguments. This will split at the first + # space. + complete="$VS_ENV_CMD" + path="${complete%% *}" + tmp="$complete EOL" + arguments="${tmp#* }" + + new_path=`$WHICH $path 2> /dev/null` + if test "x$new_path" = x; then + is_absolute_path=`$ECHO "$path" | $GREP ^/` + if test "x$is_absolute_path" != x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: Resolving VS_ENV_CMD (as $path) with 'which' failed, using $path directly." >&5 +$as_echo "$as_me: Resolving VS_ENV_CMD (as $path) with 'which' failed, using $path directly." >&6;} + new_path="$path" + else + { $as_echo "$as_me:${as_lineno-$LINENO}: The path of VS_ENV_CMD, which resolves as \"$complete\", is not found." >&5 +$as_echo "$as_me: The path of VS_ENV_CMD, which resolves as \"$complete\", is not found." >&6;} + has_space=`$ECHO "$complete" | $GREP " "` + if test "x$has_space" != x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: This might be caused by spaces in the path, which is not allowed." >&5 +$as_echo "$as_me: This might be caused by spaces in the path, which is not allowed." >&6;} + fi + as_fn_error $? "Cannot locate the the path of VS_ENV_CMD" "$LINENO" 5 + fi + fi + fi + + # Now join together the path and the arguments once again + if test "x$arguments" != xEOL; then + new_complete="$new_path ${arguments% *}" + else + new_complete="$new_path" + fi + + if test "x$complete" != "x$new_complete"; then + VS_ENV_CMD="$new_complete" + { $as_echo "$as_me:${as_lineno-$LINENO}: Rewriting VS_ENV_CMD to \"$new_complete\"" >&5 +$as_echo "$as_me: Rewriting VS_ENV_CMD to \"$new_complete\"" >&6;} + fi + + + # Lets extract the variables that are set by vcvarsall.bat/vsvars32.bat/vsvars64.bat + { $as_echo "$as_me:${as_lineno-$LINENO}: Trying to extract Visual Studio environment variables" >&5 +$as_echo "$as_me: Trying to extract Visual Studio environment variables" >&6;} + cd $OUTPUT_ROOT + # FIXME: The code betweeen ---- was inlined from a separate script and is not properly adapted + # to autoconf standards. + + #---- + + # Cannot use the VS10 setup script directly (since it only updates the DOS subshell environment) + # but calculate the difference in Cygwin environment before/after running it and then + # apply the diff. + + if test "x$OPENJDK_BUILD_OS_ENV" = xwindows.cygwin; then + _vs10varsall=`cygpath -a -m -s "$VS_ENV_CMD"` + _dosvs10varsall=`cygpath -a -w -s $_vs10varsall` + _dosbash=`cygpath -a -w -s \`which bash\`.*` + else + _dosvs10varsall=`cmd //c echo $VS_ENV_CMD` + _dosbash=`cmd //c echo \`which bash\`` + fi + + # generate the set of exported vars before/after the vs10 setup + $ECHO "@echo off" > localdevenvtmp.bat + $ECHO "$_dosbash -c \"export -p\" > localdevenvtmp.export0" >> localdevenvtmp.bat + $ECHO "call $_dosvs10varsall $VS_ENV_ARGS" >> localdevenvtmp.bat + $ECHO "$_dosbash -c \"export -p\" > localdevenvtmp.export1" >> localdevenvtmp.bat + + # Now execute the newly created bat file. + # The | cat is to stop SetEnv.Cmd to mess with system colors on msys + cmd /c localdevenvtmp.bat | cat + + # apply the diff (less some non-vs10 vars named by "!") + $SORT localdevenvtmp.export0 | $GREP -v "!" > localdevenvtmp.export0.sort + $SORT localdevenvtmp.export1 | $GREP -v "!" > localdevenvtmp.export1.sort + $COMM -1 -3 localdevenvtmp.export0.sort localdevenvtmp.export1.sort > localdevenv.sh + + # cleanup + $RM localdevenvtmp* + #---- + cd $CURDIR + if test ! -s $OUTPUT_ROOT/localdevenv.sh; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: Could not succesfully extract the envionment variables needed for the VS setup." >&5 +$as_echo "$as_me: Could not succesfully extract the envionment variables needed for the VS setup." >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: Try setting --with-tools-dir to the VC/bin directory within the VS installation" >&5 +$as_echo "$as_me: Try setting --with-tools-dir to the VC/bin directory within the VS installation" >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: or run \"bash.exe -l\" from a VS command prompt and then run configure from there." >&5 +$as_echo "$as_me: or run \"bash.exe -l\" from a VS command prompt and then run configure from there." >&6;} + as_fn_error $? "Cannot continue" "$LINENO" 5 + fi + + # Now set all paths and other env variables. This will allow the rest of + # the configure script to find and run the compiler in the proper way. + { $as_echo "$as_me:${as_lineno-$LINENO}: Setting extracted environment variables" >&5 +$as_echo "$as_me: Setting extracted environment variables" >&6;} + . $OUTPUT_ROOT/localdevenv.sh + else + # We did not find a vsvars bat file, let's hope we are run from a VS command prompt. + { $as_echo "$as_me:${as_lineno-$LINENO}: Cannot locate a valid Visual Studio installation, checking current environment" >&5 +$as_echo "$as_me: Cannot locate a valid Visual Studio installation, checking current environment" >&6;} + fi + + # At this point, we should have corrent variables in the environment, or we can't continue. + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for Visual Studio variables" >&5 +$as_echo_n "checking for Visual Studio variables... " >&6; } + + if test "x$VCINSTALLDIR" != x || test "x$WindowsSDKDir" != x || test "x$WINDOWSSDKDIR" != x; then + if test "x$INCLUDE" = x || test "x$LIB" = x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: present but broken" >&5 +$as_echo "present but broken" >&6; } + as_fn_error $? "Your VC command prompt seems broken, INCLUDE and/or LIB is missing." "$LINENO" 5 + else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: ok" >&5 +$as_echo "ok" >&6; } + VS_INCLUDE="$INCLUDE" + VS_LIB="$LIB" + VS_PATH="$PATH" + + + + fi + else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found" >&5 +$as_echo "not found" >&6; } + + if test "x$VS_ENV_CMD" = x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: Cannot locate a valid Visual Studio or Windows SDK installation on disk," >&5 +$as_echo "$as_me: Cannot locate a valid Visual Studio or Windows SDK installation on disk," >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: nor is this script run from a Visual Studio command prompt." >&5 +$as_echo "$as_me: nor is this script run from a Visual Studio command prompt." >&6;} + else + { $as_echo "$as_me:${as_lineno-$LINENO}: Running the extraction script failed." >&5 +$as_echo "$as_me: Running the extraction script failed." >&6;} + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: Try setting --with-tools-dir to the VC/bin directory within the VS installation" >&5 +$as_echo "$as_me: Try setting --with-tools-dir to the VC/bin directory within the VS installation" >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: or run \"bash.exe -l\" from a VS command prompt and then run configure from there." >&5 +$as_echo "$as_me: or run \"bash.exe -l\" from a VS command prompt and then run configure from there." >&6;} + as_fn_error $? "Cannot continue" "$LINENO" 5 + fi + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for msvcr100.dll" >&5 $as_echo_n "checking for msvcr100.dll... " >&6; } -# Check whether --with-msvcr100dll was given. -if test "${with_msvcr100dll+set}" = set; then : - withval=$with_msvcr100dll; +# Check whether --with-msvcr-dll was given. +if test "${with_msvcr_dll+set}" = set; then : + withval=$with_msvcr_dll; fi - if test "x$with_msvcr100dll" != x; then - MSVCR100DLL="$with_msvcr100dll" - else - if test "x$OPENJDK_TARGET_CPU_BITS" = x64; then - MSVCR100DLL=`find "$VCINSTALLDIR/.." -name msvcr100.dll | grep x64 | head --lines 1` - else - MSVCR100DLL=`find "$VCINSTALLDIR/.." -name msvcr100.dll | grep x86 | grep -v ia64 | grep -v x64 | head --lines 1` - if test "x$MSVCR100DLL" = x; then - MSVCR100DLL=`find "$VCINSTALLDIR/.." -name msvcr100.dll | head --lines 1` - fi - fi + if test "x$with_msvcr_dll" != x; then + MSVCR_DLL="$with_msvcr_dll" + else + if test "x$VCINSTALLDIR" != x; then + if test "x$OPENJDK_TARGET_CPU_BITS" = x64; then + MSVCR_DLL=`find "$VCINSTALLDIR" -name msvcr100.dll | grep x64 | head --lines 1` + else + MSVCR_DLL=`find "$VCINSTALLDIR" -name msvcr100.dll | grep x86 | grep -v ia64 | grep -v x64 | head --lines 1` + if test "x$MSVCR_DLL" = x; then + MSVCR_DLL=`find "$VCINSTALLDIR" -name msvcr100.dll | head --lines 1` fi - if test "x$MSVCR100DLL" = x; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 + fi + if test "x$MSVCR_DLL" != x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: msvcr100.dll found in VCINSTALLDIR: $VCINSTALLDIR" >&5 +$as_echo "$as_me: msvcr100.dll found in VCINSTALLDIR: $VCINSTALLDIR" >&6;} + else + { $as_echo "$as_me:${as_lineno-$LINENO}: Warning: msvcr100.dll not found in VCINSTALLDIR: $VCINSTALLDIR" >&5 +$as_echo "$as_me: Warning: msvcr100.dll not found in VCINSTALLDIR: $VCINSTALLDIR" >&6;} + fi + fi + if test "x$MSVCR_DLL" = x; then + if test -f "$SYSTEMROOT/system32/msvcr100.dll"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: msvcr100.dll found in $SYSTEMROOT/system32" >&5 +$as_echo "$as_me: msvcr100.dll found in $SYSTEMROOT/system32" >&6;} + MSVCR_DLL="$SYSTEMROOT/system32/msvcr100.dll" + fi + fi + fi + if test "x$MSVCR_DLL" = x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } - as_fn_error $? "Could not find msvcr100.dll !" "$LINENO" 5 - fi - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MSVCR100DLL" >&5 -$as_echo "$MSVCR100DLL" >&6; } + as_fn_error $? "Could not find msvcr100.dll !" "$LINENO" 5 + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MSVCR_DLL" >&5 +$as_echo "$MSVCR_DLL" >&6; } - # Fail with message the path to msvcr100.dll if var MSVCR100DLL contains a path with no spaces in it. - # Unless on Windows, where we can rewrite the path. - HAS_SPACE=`echo "$MSVCR100DLL" | grep " "` - if test "x$HAS_SPACE" != x; then - if test "x$OPENJDK_BUILD_OS" = "xwindows"; then - # First convert it to DOS-style, short mode (no spaces) - MSVCR100DLL=`$CYGPATH -s -m -a "$MSVCR100DLL"` - # Now it's case insensitive; let's make it lowercase to improve readability - MSVCR100DLL=`$ECHO "$MSVCR100DLL" | $TR 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvqxyz'` - # Now convert it back to Unix-stile (cygpath) - MSVCR100DLL=`$CYGPATH -u "$MSVCR100DLL"` - else - as_fn_error $? "You cannot have spaces in the path to msvcr100.dll! \"$MSVCR100DLL\"" "$LINENO" 5 - fi + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then + + # Input might be given as Windows format, start by converting to + # unix format. + path="$MSVCR_DLL" + new_path=`$CYGPATH -u "$path"` + + # Cygwin tries to hide some aspects of the Windows file system, such that binaries are + # named .exe but called without that suffix. Therefore, "foo" and "foo.exe" are considered + # the same file, most of the time (as in "test -f"). But not when running cygpath -s, then + # "foo.exe" is OK but "foo" is an error. + # + # This test is therefore slightly more accurate than "test -f" to check for file precense. + # It is also a way to make sure we got the proper file name for the real test later on. + test_shortpath=`$CYGPATH -s -m "$new_path" 2> /dev/null` + if test "x$test_shortpath" = x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: The path of MSVCR_DLL, which resolves as \"$path\", is invalid." >&5 +$as_echo "$as_me: The path of MSVCR_DLL, which resolves as \"$path\", is invalid." >&6;} + as_fn_error $? "Cannot locate the the path of MSVCR_DLL" "$LINENO" 5 + fi + + # Call helper function which possibly converts this using DOS-style short mode. + # If so, the updated path is stored in $new_path. + + input_path="$new_path" + # Check if we need to convert this using DOS-style short mode. If the path + # contains just simple characters, use it. Otherwise (spaces, weird characters), + # take no chances and rewrite it. + # Note: m4 eats our [], so we need to use [ and ] instead. + has_forbidden_chars=`$ECHO "$input_path" | $GREP [^-._/a-zA-Z0-9]` + if test "x$has_forbidden_chars" != x; then + # Now convert it to mixed DOS-style, short mode (no spaces, and / instead of \) + shortmode_path=`$CYGPATH -s -m -a "$input_path"` + path_after_shortmode=`$CYGPATH -u "$shortmode_path"` + if test "x$path_after_shortmode" != "x$input_to_shortpath"; then + # Going to short mode and back again did indeed matter. Since short mode is + # case insensitive, let's make it lowercase to improve readability. + shortmode_path=`$ECHO "$shortmode_path" | $TR 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` + # Now convert it back to Unix-stile (cygpath) + input_path=`$CYGPATH -u "$shortmode_path"` + new_path="$input_path" + fi + fi + + test_cygdrive_prefix=`$ECHO $input_path | $GREP ^/cygdrive/` + if test "x$test_cygdrive_prefix" = x; then + # As a simple fix, exclude /usr/bin since it's not a real path. + if test "x`$ECHO $new_path | $GREP ^/usr/bin/`" = x; then + # The path is in a Cygwin special directory (e.g. /home). We need this converted to + # a path prefixed by /cygdrive for fixpath to work. + new_path="$CYGWIN_ROOT_PATH$input_path" + fi + fi + + + if test "x$path" != "x$new_path"; then + MSVCR_DLL="$new_path" + { $as_echo "$as_me:${as_lineno-$LINENO}: Rewriting MSVCR_DLL to \"$new_path\"" >&5 +$as_echo "$as_me: Rewriting MSVCR_DLL to \"$new_path\"" >&6;} + fi + + elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then + + path="$MSVCR_DLL" + has_colon=`$ECHO $path | $GREP ^.:` + new_path="$path" + if test "x$has_colon" = x; then + # Not in mixed or Windows style, start by that. + new_path=`cmd //c echo $path` + fi + + + input_path="$new_path" + # Check if we need to convert this using DOS-style short mode. If the path + # contains just simple characters, use it. Otherwise (spaces, weird characters), + # take no chances and rewrite it. + # Note: m4 eats our [], so we need to use [ and ] instead. + has_forbidden_chars=`$ECHO "$input_path" | $GREP [^-_/:a-zA-Z0-9]` + if test "x$has_forbidden_chars" != x; then + # Now convert it to mixed DOS-style, short mode (no spaces, and / instead of \) + new_path=`cmd /c "for %A in (\"$input_path\") do @echo %~sA"|$TR \\\\\\\\ / | $TR 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` + fi + + + windows_path="$new_path" + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then + unix_path=`$CYGPATH -u "$windows_path"` + new_path="$unix_path" + elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then + unix_path=`$ECHO "$windows_path" | $SED -e 's,^\\(.\\):,/\\1,g' -e 's,\\\\,/,g'` + new_path="$unix_path" + fi + + if test "x$path" != "x$new_path"; then + MSVCR_DLL="$new_path" + { $as_echo "$as_me:${as_lineno-$LINENO}: Rewriting MSVCR_DLL to \"$new_path\"" >&5 +$as_echo "$as_me: Rewriting MSVCR_DLL to \"$new_path\"" >&6;} + fi + + # Save the first 10 bytes of this path to the storage, so fixpath can work. + all_fixpath_prefixes=("${all_fixpath_prefixes[@]}" "${new_path:0:10}") + + else + # We're on a posix platform. Hooray! :) + path="$MSVCR_DLL" + + if test ! -f "$path" && test ! -d "$path"; then + as_fn_error $? "The path of MSVCR_DLL, which resolves as \"$path\", is not found." "$LINENO" 5 fi + has_space=`$ECHO "$path" | $GREP " "` + if test "x$has_space" != x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: The path of MSVCR_DLL, which resolves as \"$path\", is invalid." >&5 +$as_echo "$as_me: The path of MSVCR_DLL, which resolves as \"$path\", is invalid." >&6;} + as_fn_error $? "Spaces are not allowed in this path." "$LINENO" 5 fi + fi + + fi - -# Locate the actual tools - # If --build AND --host is set, then the configure script will find any # cross compilation tools in the PATH. Cross compilation tools # follows the cross compilation standard where they are prefixed with ${host}. @@ -10707,47 +16610,259 @@ fi done - # Translate "gcc -E" into "`which gcc` -E" ie - # extract the full path to the binary and at the - # same time maintain any arguments passed to it. - # The command MUST exist in the path, or else! - tmp="$BUILD_CC" - car="${tmp%% *}" - tmp="$BUILD_CC EOL" - cdr="${tmp#* }" - # On windows we want paths without spaces. - if test "x$OPENJDK_BUILD_OS" = "xwindows"; then + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then - # Translate long cygdrive or C:\sdfsf path - # into a short mixed mode path that has no - # spaces in it. - tmp="$car" + # First separate the path from the arguments. This will split at the first + # space. + complete="$BUILD_CC" + path="${complete%% *}" + tmp="$complete EOL" + arguments="${tmp#* }" - if test "x$OPENJDK_BUILD_OS" = "xwindows"; then - tmp=`$CYGPATH -u "$car"` - tmp=`which "$tmp"` - # If file exists with .exe appended, that's the real filename - # and cygpath needs that to convert to short style path. - if test -f "${tmp}.exe"; then - tmp="${tmp}.exe" - elif test -f "${tmp}.cmd"; then - tmp="${tmp}.cmd" + # Input might be given as Windows format, start by converting to + # unix format. + new_path=`$CYGPATH -u "$path"` + + # Now try to locate executable using which + new_path=`$WHICH "$new_path" 2> /dev/null` + # bat and cmd files are not always considered executable in cygwin causing which + # to not find them + if test "x$new_path" = x \ + && test "x`$ECHO \"$path\" | $GREP -e \"\\.bat$\" -e \"\\.cmd$\"`" != x \ + && test "x`$LS \"$path\" 2>/dev/null`" != x; then + new_path=`$CYGPATH -u "$path"` + fi + if test "x$new_path" = x; then + # Oops. Which didn't find the executable. + # The splitting of arguments from the executable at a space might have been incorrect, + # since paths with space are more likely in Windows. Give it another try with the whole + # argument. + path="$complete" + arguments="EOL" + new_path=`$CYGPATH -u "$path"` + new_path=`$WHICH "$new_path" 2> /dev/null` + # bat and cmd files are not always considered executable in cygwin causing which + # to not find them + if test "x$new_path" = x \ + && test "x`$ECHO \"$path\" | $GREP -e \"\\.bat$\" -e \"\\.cmd$\"`" != x \ + && test "x`$LS \"$path\" 2>/dev/null`" != x; then + new_path=`$CYGPATH -u "$path"` + fi + if test "x$new_path" = x; then + # It's still not found. Now this is an unrecoverable error. + { $as_echo "$as_me:${as_lineno-$LINENO}: The path of BUILD_CC, which resolves as \"$complete\", is not found." >&5 +$as_echo "$as_me: The path of BUILD_CC, which resolves as \"$complete\", is not found." >&6;} + has_space=`$ECHO "$complete" | $GREP " "` + if test "x$has_space" != x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: You might be mixing spaces in the path and extra arguments, which is not allowed." >&5 +$as_echo "$as_me: You might be mixing spaces in the path and extra arguments, which is not allowed." >&6;} + fi + as_fn_error $? "Cannot locate the the path of BUILD_CC" "$LINENO" 5 + fi + fi + + # Cygwin tries to hide some aspects of the Windows file system, such that binaries are + # named .exe but called without that suffix. Therefore, "foo" and "foo.exe" are considered + # the same file, most of the time (as in "test -f"). But not when running cygpath -s, then + # "foo.exe" is OK but "foo" is an error. + # + # This test is therefore slightly more accurate than "test -f" to check for file precense. + # It is also a way to make sure we got the proper file name for the real test later on. + test_shortpath=`$CYGPATH -s -m "$new_path" 2> /dev/null` + if test "x$test_shortpath" = x; then + # Short path failed, file does not exist as specified. + # Try adding .exe or .cmd + if test -f "${new_path}.exe"; then + input_to_shortpath="${new_path}.exe" + elif test -f "${new_path}.cmd"; then + input_to_shortpath="${new_path}.cmd" + else + { $as_echo "$as_me:${as_lineno-$LINENO}: The path of BUILD_CC, which resolves as \"$new_path\", is invalid." >&5 +$as_echo "$as_me: The path of BUILD_CC, which resolves as \"$new_path\", is invalid." >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: Neither \"$new_path\" nor \"$new_path.exe/cmd\" can be found" >&5 +$as_echo "$as_me: Neither \"$new_path\" nor \"$new_path.exe/cmd\" can be found" >&6;} + as_fn_error $? "Cannot locate the the path of BUILD_CC" "$LINENO" 5 + fi + else + input_to_shortpath="$new_path" + fi + + # Call helper function which possibly converts this using DOS-style short mode. + # If so, the updated path is stored in $new_path. + new_path="$input_to_shortpath" + + input_path="$input_to_shortpath" + # Check if we need to convert this using DOS-style short mode. If the path + # contains just simple characters, use it. Otherwise (spaces, weird characters), + # take no chances and rewrite it. + # Note: m4 eats our [], so we need to use [ and ] instead. + has_forbidden_chars=`$ECHO "$input_path" | $GREP [^-._/a-zA-Z0-9]` + if test "x$has_forbidden_chars" != x; then + # Now convert it to mixed DOS-style, short mode (no spaces, and / instead of \) + shortmode_path=`$CYGPATH -s -m -a "$input_path"` + path_after_shortmode=`$CYGPATH -u "$shortmode_path"` + if test "x$path_after_shortmode" != "x$input_to_shortpath"; then + # Going to short mode and back again did indeed matter. Since short mode is + # case insensitive, let's make it lowercase to improve readability. + shortmode_path=`$ECHO "$shortmode_path" | $TR 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` + # Now convert it back to Unix-stile (cygpath) + input_path=`$CYGPATH -u "$shortmode_path"` + new_path="$input_path" + fi + fi + + test_cygdrive_prefix=`$ECHO $input_path | $GREP ^/cygdrive/` + if test "x$test_cygdrive_prefix" = x; then + # As a simple fix, exclude /usr/bin since it's not a real path. + if test "x`$ECHO $input_to_shortpath | $GREP ^/usr/bin/`" = x; then + # The path is in a Cygwin special directory (e.g. /home). We need this converted to + # a path prefixed by /cygdrive for fixpath to work. + new_path="$CYGWIN_ROOT_PATH$input_path" + fi + fi + + # remove trailing .exe if any + new_path="${new_path/%.exe/}" + + elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then + + # First separate the path from the arguments. This will split at the first + # space. + complete="$BUILD_CC" + path="${complete%% *}" + tmp="$complete EOL" + arguments="${tmp#* }" + + # Input might be given as Windows format, start by converting to + # unix format. + new_path="$path" + + windows_path="$new_path" + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then + unix_path=`$CYGPATH -u "$windows_path"` + new_path="$unix_path" + elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then + unix_path=`$ECHO "$windows_path" | $SED -e 's,^\\(.\\):,/\\1,g' -e 's,\\\\,/,g'` + new_path="$unix_path" + fi + + + # Now try to locate executable using which + new_path=`$WHICH "$new_path" 2> /dev/null` + + if test "x$new_path" = x; then + # Oops. Which didn't find the executable. + # The splitting of arguments from the executable at a space might have been incorrect, + # since paths with space are more likely in Windows. Give it another try with the whole + # argument. + path="$complete" + arguments="EOL" + new_path="$path" + + windows_path="$new_path" + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then + unix_path=`$CYGPATH -u "$windows_path"` + new_path="$unix_path" + elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then + unix_path=`$ECHO "$windows_path" | $SED -e 's,^\\(.\\):,/\\1,g' -e 's,\\\\,/,g'` + new_path="$unix_path" + fi + + + new_path=`$WHICH "$new_path" 2> /dev/null` + + if test "x$new_path" = x; then + # It's still not found. Now this is an unrecoverable error. + { $as_echo "$as_me:${as_lineno-$LINENO}: The path of BUILD_CC, which resolves as \"$complete\", is not found." >&5 +$as_echo "$as_me: The path of BUILD_CC, which resolves as \"$complete\", is not found." >&6;} + has_space=`$ECHO "$complete" | $GREP " "` + if test "x$has_space" != x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: You might be mixing spaces in the path and extra arguments, which is not allowed." >&5 +$as_echo "$as_me: You might be mixing spaces in the path and extra arguments, which is not allowed." >&6;} + fi + as_fn_error $? "Cannot locate the the path of BUILD_CC" "$LINENO" 5 + fi + fi + + # Now new_path has a complete unix path to the binary + if test "x`$ECHO $new_path | $GREP ^/bin/`" != x; then + # Keep paths in /bin as-is, but remove trailing .exe if any + new_path="${new_path/%.exe/}" + # Do not save /bin paths to all_fixpath_prefixes! + else + # Not in mixed or Windows style, start by that. + new_path=`cmd //c echo $new_path` + + input_path="$new_path" + # Check if we need to convert this using DOS-style short mode. If the path + # contains just simple characters, use it. Otherwise (spaces, weird characters), + # take no chances and rewrite it. + # Note: m4 eats our [], so we need to use [ and ] instead. + has_forbidden_chars=`$ECHO "$input_path" | $GREP [^-_/:a-zA-Z0-9]` + if test "x$has_forbidden_chars" != x; then + # Now convert it to mixed DOS-style, short mode (no spaces, and / instead of \) + new_path=`cmd /c "for %A in (\"$input_path\") do @echo %~sA"|$TR \\\\\\\\ / | $TR 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` + fi + + # Output is in $new_path + + windows_path="$new_path" + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then + unix_path=`$CYGPATH -u "$windows_path"` + new_path="$unix_path" + elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then + unix_path=`$ECHO "$windows_path" | $SED -e 's,^\\(.\\):,/\\1,g' -e 's,\\\\,/,g'` + new_path="$unix_path" + fi + + # remove trailing .exe if any + new_path="${new_path/%.exe/}" + + # Save the first 10 bytes of this path to the storage, so fixpath can work. + all_fixpath_prefixes=("${all_fixpath_prefixes[@]}" "${new_path:0:10}") + fi + + else + # We're on a posix platform. Hooray! :) + # First separate the path from the arguments. This will split at the first + # space. + complete="$BUILD_CC" + path="${complete%% *}" + tmp="$complete EOL" + arguments="${tmp#* }" + + new_path=`$WHICH $path 2> /dev/null` + if test "x$new_path" = x; then + is_absolute_path=`$ECHO "$path" | $GREP ^/` + if test "x$is_absolute_path" != x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: Resolving BUILD_CC (as $path) with 'which' failed, using $path directly." >&5 +$as_echo "$as_me: Resolving BUILD_CC (as $path) with 'which' failed, using $path directly." >&6;} + new_path="$path" + else + { $as_echo "$as_me:${as_lineno-$LINENO}: The path of BUILD_CC, which resolves as \"$complete\", is not found." >&5 +$as_echo "$as_me: The path of BUILD_CC, which resolves as \"$complete\", is not found." >&6;} + has_space=`$ECHO "$complete" | $GREP " "` + if test "x$has_space" != x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: This might be caused by spaces in the path, which is not allowed." >&5 +$as_echo "$as_me: This might be caused by spaces in the path, which is not allowed." >&6;} fi - # Convert to C:/ mixed style path without spaces. - tmp=`$CYGPATH -s -m "$tmp"` + as_fn_error $? "Cannot locate the the path of BUILD_CC" "$LINENO" 5 + fi fi - car="$tmp" + fi - else - # "which" is not portable, but is used here - # because we know that the command exists! - car=`which $car` - fi - if test "x$cdr" != xEOL; then - BUILD_CC="$car ${cdr% *}" - else - BUILD_CC="$car" - fi + # Now join together the path and the arguments once again + if test "x$arguments" != xEOL; then + new_complete="$new_path ${arguments% *}" + else + new_complete="$new_path" + fi + + if test "x$complete" != "x$new_complete"; then + BUILD_CC="$new_complete" + { $as_echo "$as_me:${as_lineno-$LINENO}: Rewriting BUILD_CC to \"$new_complete\"" >&5 +$as_echo "$as_me: Rewriting BUILD_CC to \"$new_complete\"" >&6;} + fi for ac_prog in cl CC g++ do @@ -10795,47 +16910,259 @@ fi done - # Translate "gcc -E" into "`which gcc` -E" ie - # extract the full path to the binary and at the - # same time maintain any arguments passed to it. - # The command MUST exist in the path, or else! - tmp="$BUILD_CXX" - car="${tmp%% *}" - tmp="$BUILD_CXX EOL" - cdr="${tmp#* }" - # On windows we want paths without spaces. - if test "x$OPENJDK_BUILD_OS" = "xwindows"; then + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then - # Translate long cygdrive or C:\sdfsf path - # into a short mixed mode path that has no - # spaces in it. - tmp="$car" + # First separate the path from the arguments. This will split at the first + # space. + complete="$BUILD_CXX" + path="${complete%% *}" + tmp="$complete EOL" + arguments="${tmp#* }" - if test "x$OPENJDK_BUILD_OS" = "xwindows"; then - tmp=`$CYGPATH -u "$car"` - tmp=`which "$tmp"` - # If file exists with .exe appended, that's the real filename - # and cygpath needs that to convert to short style path. - if test -f "${tmp}.exe"; then - tmp="${tmp}.exe" - elif test -f "${tmp}.cmd"; then - tmp="${tmp}.cmd" + # Input might be given as Windows format, start by converting to + # unix format. + new_path=`$CYGPATH -u "$path"` + + # Now try to locate executable using which + new_path=`$WHICH "$new_path" 2> /dev/null` + # bat and cmd files are not always considered executable in cygwin causing which + # to not find them + if test "x$new_path" = x \ + && test "x`$ECHO \"$path\" | $GREP -e \"\\.bat$\" -e \"\\.cmd$\"`" != x \ + && test "x`$LS \"$path\" 2>/dev/null`" != x; then + new_path=`$CYGPATH -u "$path"` + fi + if test "x$new_path" = x; then + # Oops. Which didn't find the executable. + # The splitting of arguments from the executable at a space might have been incorrect, + # since paths with space are more likely in Windows. Give it another try with the whole + # argument. + path="$complete" + arguments="EOL" + new_path=`$CYGPATH -u "$path"` + new_path=`$WHICH "$new_path" 2> /dev/null` + # bat and cmd files are not always considered executable in cygwin causing which + # to not find them + if test "x$new_path" = x \ + && test "x`$ECHO \"$path\" | $GREP -e \"\\.bat$\" -e \"\\.cmd$\"`" != x \ + && test "x`$LS \"$path\" 2>/dev/null`" != x; then + new_path=`$CYGPATH -u "$path"` + fi + if test "x$new_path" = x; then + # It's still not found. Now this is an unrecoverable error. + { $as_echo "$as_me:${as_lineno-$LINENO}: The path of BUILD_CXX, which resolves as \"$complete\", is not found." >&5 +$as_echo "$as_me: The path of BUILD_CXX, which resolves as \"$complete\", is not found." >&6;} + has_space=`$ECHO "$complete" | $GREP " "` + if test "x$has_space" != x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: You might be mixing spaces in the path and extra arguments, which is not allowed." >&5 +$as_echo "$as_me: You might be mixing spaces in the path and extra arguments, which is not allowed." >&6;} + fi + as_fn_error $? "Cannot locate the the path of BUILD_CXX" "$LINENO" 5 + fi + fi + + # Cygwin tries to hide some aspects of the Windows file system, such that binaries are + # named .exe but called without that suffix. Therefore, "foo" and "foo.exe" are considered + # the same file, most of the time (as in "test -f"). But not when running cygpath -s, then + # "foo.exe" is OK but "foo" is an error. + # + # This test is therefore slightly more accurate than "test -f" to check for file precense. + # It is also a way to make sure we got the proper file name for the real test later on. + test_shortpath=`$CYGPATH -s -m "$new_path" 2> /dev/null` + if test "x$test_shortpath" = x; then + # Short path failed, file does not exist as specified. + # Try adding .exe or .cmd + if test -f "${new_path}.exe"; then + input_to_shortpath="${new_path}.exe" + elif test -f "${new_path}.cmd"; then + input_to_shortpath="${new_path}.cmd" + else + { $as_echo "$as_me:${as_lineno-$LINENO}: The path of BUILD_CXX, which resolves as \"$new_path\", is invalid." >&5 +$as_echo "$as_me: The path of BUILD_CXX, which resolves as \"$new_path\", is invalid." >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: Neither \"$new_path\" nor \"$new_path.exe/cmd\" can be found" >&5 +$as_echo "$as_me: Neither \"$new_path\" nor \"$new_path.exe/cmd\" can be found" >&6;} + as_fn_error $? "Cannot locate the the path of BUILD_CXX" "$LINENO" 5 + fi + else + input_to_shortpath="$new_path" + fi + + # Call helper function which possibly converts this using DOS-style short mode. + # If so, the updated path is stored in $new_path. + new_path="$input_to_shortpath" + + input_path="$input_to_shortpath" + # Check if we need to convert this using DOS-style short mode. If the path + # contains just simple characters, use it. Otherwise (spaces, weird characters), + # take no chances and rewrite it. + # Note: m4 eats our [], so we need to use [ and ] instead. + has_forbidden_chars=`$ECHO "$input_path" | $GREP [^-._/a-zA-Z0-9]` + if test "x$has_forbidden_chars" != x; then + # Now convert it to mixed DOS-style, short mode (no spaces, and / instead of \) + shortmode_path=`$CYGPATH -s -m -a "$input_path"` + path_after_shortmode=`$CYGPATH -u "$shortmode_path"` + if test "x$path_after_shortmode" != "x$input_to_shortpath"; then + # Going to short mode and back again did indeed matter. Since short mode is + # case insensitive, let's make it lowercase to improve readability. + shortmode_path=`$ECHO "$shortmode_path" | $TR 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` + # Now convert it back to Unix-stile (cygpath) + input_path=`$CYGPATH -u "$shortmode_path"` + new_path="$input_path" + fi + fi + + test_cygdrive_prefix=`$ECHO $input_path | $GREP ^/cygdrive/` + if test "x$test_cygdrive_prefix" = x; then + # As a simple fix, exclude /usr/bin since it's not a real path. + if test "x`$ECHO $input_to_shortpath | $GREP ^/usr/bin/`" = x; then + # The path is in a Cygwin special directory (e.g. /home). We need this converted to + # a path prefixed by /cygdrive for fixpath to work. + new_path="$CYGWIN_ROOT_PATH$input_path" + fi + fi + + # remove trailing .exe if any + new_path="${new_path/%.exe/}" + + elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then + + # First separate the path from the arguments. This will split at the first + # space. + complete="$BUILD_CXX" + path="${complete%% *}" + tmp="$complete EOL" + arguments="${tmp#* }" + + # Input might be given as Windows format, start by converting to + # unix format. + new_path="$path" + + windows_path="$new_path" + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then + unix_path=`$CYGPATH -u "$windows_path"` + new_path="$unix_path" + elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then + unix_path=`$ECHO "$windows_path" | $SED -e 's,^\\(.\\):,/\\1,g' -e 's,\\\\,/,g'` + new_path="$unix_path" + fi + + + # Now try to locate executable using which + new_path=`$WHICH "$new_path" 2> /dev/null` + + if test "x$new_path" = x; then + # Oops. Which didn't find the executable. + # The splitting of arguments from the executable at a space might have been incorrect, + # since paths with space are more likely in Windows. Give it another try with the whole + # argument. + path="$complete" + arguments="EOL" + new_path="$path" + + windows_path="$new_path" + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then + unix_path=`$CYGPATH -u "$windows_path"` + new_path="$unix_path" + elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then + unix_path=`$ECHO "$windows_path" | $SED -e 's,^\\(.\\):,/\\1,g' -e 's,\\\\,/,g'` + new_path="$unix_path" + fi + + + new_path=`$WHICH "$new_path" 2> /dev/null` + + if test "x$new_path" = x; then + # It's still not found. Now this is an unrecoverable error. + { $as_echo "$as_me:${as_lineno-$LINENO}: The path of BUILD_CXX, which resolves as \"$complete\", is not found." >&5 +$as_echo "$as_me: The path of BUILD_CXX, which resolves as \"$complete\", is not found." >&6;} + has_space=`$ECHO "$complete" | $GREP " "` + if test "x$has_space" != x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: You might be mixing spaces in the path and extra arguments, which is not allowed." >&5 +$as_echo "$as_me: You might be mixing spaces in the path and extra arguments, which is not allowed." >&6;} + fi + as_fn_error $? "Cannot locate the the path of BUILD_CXX" "$LINENO" 5 + fi + fi + + # Now new_path has a complete unix path to the binary + if test "x`$ECHO $new_path | $GREP ^/bin/`" != x; then + # Keep paths in /bin as-is, but remove trailing .exe if any + new_path="${new_path/%.exe/}" + # Do not save /bin paths to all_fixpath_prefixes! + else + # Not in mixed or Windows style, start by that. + new_path=`cmd //c echo $new_path` + + input_path="$new_path" + # Check if we need to convert this using DOS-style short mode. If the path + # contains just simple characters, use it. Otherwise (spaces, weird characters), + # take no chances and rewrite it. + # Note: m4 eats our [], so we need to use [ and ] instead. + has_forbidden_chars=`$ECHO "$input_path" | $GREP [^-_/:a-zA-Z0-9]` + if test "x$has_forbidden_chars" != x; then + # Now convert it to mixed DOS-style, short mode (no spaces, and / instead of \) + new_path=`cmd /c "for %A in (\"$input_path\") do @echo %~sA"|$TR \\\\\\\\ / | $TR 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` + fi + + # Output is in $new_path + + windows_path="$new_path" + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then + unix_path=`$CYGPATH -u "$windows_path"` + new_path="$unix_path" + elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then + unix_path=`$ECHO "$windows_path" | $SED -e 's,^\\(.\\):,/\\1,g' -e 's,\\\\,/,g'` + new_path="$unix_path" + fi + + # remove trailing .exe if any + new_path="${new_path/%.exe/}" + + # Save the first 10 bytes of this path to the storage, so fixpath can work. + all_fixpath_prefixes=("${all_fixpath_prefixes[@]}" "${new_path:0:10}") + fi + + else + # We're on a posix platform. Hooray! :) + # First separate the path from the arguments. This will split at the first + # space. + complete="$BUILD_CXX" + path="${complete%% *}" + tmp="$complete EOL" + arguments="${tmp#* }" + + new_path=`$WHICH $path 2> /dev/null` + if test "x$new_path" = x; then + is_absolute_path=`$ECHO "$path" | $GREP ^/` + if test "x$is_absolute_path" != x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: Resolving BUILD_CXX (as $path) with 'which' failed, using $path directly." >&5 +$as_echo "$as_me: Resolving BUILD_CXX (as $path) with 'which' failed, using $path directly." >&6;} + new_path="$path" + else + { $as_echo "$as_me:${as_lineno-$LINENO}: The path of BUILD_CXX, which resolves as \"$complete\", is not found." >&5 +$as_echo "$as_me: The path of BUILD_CXX, which resolves as \"$complete\", is not found." >&6;} + has_space=`$ECHO "$complete" | $GREP " "` + if test "x$has_space" != x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: This might be caused by spaces in the path, which is not allowed." >&5 +$as_echo "$as_me: This might be caused by spaces in the path, which is not allowed." >&6;} fi - # Convert to C:/ mixed style path without spaces. - tmp=`$CYGPATH -s -m "$tmp"` + as_fn_error $? "Cannot locate the the path of BUILD_CXX" "$LINENO" 5 + fi fi - car="$tmp" + fi - else - # "which" is not portable, but is used here - # because we know that the command exists! - car=`which $car` - fi - if test "x$cdr" != xEOL; then - BUILD_CXX="$car ${cdr% *}" - else - BUILD_CXX="$car" - fi + # Now join together the path and the arguments once again + if test "x$arguments" != xEOL; then + new_complete="$new_path ${arguments% *}" + else + new_complete="$new_path" + fi + + if test "x$complete" != "x$new_complete"; then + BUILD_CXX="$new_complete" + { $as_echo "$as_me:${as_lineno-$LINENO}: Rewriting BUILD_CXX to \"$new_complete\"" >&5 +$as_echo "$as_me: Rewriting BUILD_CXX to \"$new_complete\"" >&6;} + fi # Extract the first word of "ld", so it can be a program name with args. set dummy ld; ac_word=$2 @@ -10878,47 +17205,259 @@ fi - # Translate "gcc -E" into "`which gcc` -E" ie - # extract the full path to the binary and at the - # same time maintain any arguments passed to it. - # The command MUST exist in the path, or else! - tmp="$BUILD_LD" - car="${tmp%% *}" - tmp="$BUILD_LD EOL" - cdr="${tmp#* }" - # On windows we want paths without spaces. - if test "x$OPENJDK_BUILD_OS" = "xwindows"; then + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then - # Translate long cygdrive or C:\sdfsf path - # into a short mixed mode path that has no - # spaces in it. - tmp="$car" + # First separate the path from the arguments. This will split at the first + # space. + complete="$BUILD_LD" + path="${complete%% *}" + tmp="$complete EOL" + arguments="${tmp#* }" - if test "x$OPENJDK_BUILD_OS" = "xwindows"; then - tmp=`$CYGPATH -u "$car"` - tmp=`which "$tmp"` - # If file exists with .exe appended, that's the real filename - # and cygpath needs that to convert to short style path. - if test -f "${tmp}.exe"; then - tmp="${tmp}.exe" - elif test -f "${tmp}.cmd"; then - tmp="${tmp}.cmd" + # Input might be given as Windows format, start by converting to + # unix format. + new_path=`$CYGPATH -u "$path"` + + # Now try to locate executable using which + new_path=`$WHICH "$new_path" 2> /dev/null` + # bat and cmd files are not always considered executable in cygwin causing which + # to not find them + if test "x$new_path" = x \ + && test "x`$ECHO \"$path\" | $GREP -e \"\\.bat$\" -e \"\\.cmd$\"`" != x \ + && test "x`$LS \"$path\" 2>/dev/null`" != x; then + new_path=`$CYGPATH -u "$path"` + fi + if test "x$new_path" = x; then + # Oops. Which didn't find the executable. + # The splitting of arguments from the executable at a space might have been incorrect, + # since paths with space are more likely in Windows. Give it another try with the whole + # argument. + path="$complete" + arguments="EOL" + new_path=`$CYGPATH -u "$path"` + new_path=`$WHICH "$new_path" 2> /dev/null` + # bat and cmd files are not always considered executable in cygwin causing which + # to not find them + if test "x$new_path" = x \ + && test "x`$ECHO \"$path\" | $GREP -e \"\\.bat$\" -e \"\\.cmd$\"`" != x \ + && test "x`$LS \"$path\" 2>/dev/null`" != x; then + new_path=`$CYGPATH -u "$path"` + fi + if test "x$new_path" = x; then + # It's still not found. Now this is an unrecoverable error. + { $as_echo "$as_me:${as_lineno-$LINENO}: The path of BUILD_LD, which resolves as \"$complete\", is not found." >&5 +$as_echo "$as_me: The path of BUILD_LD, which resolves as \"$complete\", is not found." >&6;} + has_space=`$ECHO "$complete" | $GREP " "` + if test "x$has_space" != x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: You might be mixing spaces in the path and extra arguments, which is not allowed." >&5 +$as_echo "$as_me: You might be mixing spaces in the path and extra arguments, which is not allowed." >&6;} + fi + as_fn_error $? "Cannot locate the the path of BUILD_LD" "$LINENO" 5 + fi + fi + + # Cygwin tries to hide some aspects of the Windows file system, such that binaries are + # named .exe but called without that suffix. Therefore, "foo" and "foo.exe" are considered + # the same file, most of the time (as in "test -f"). But not when running cygpath -s, then + # "foo.exe" is OK but "foo" is an error. + # + # This test is therefore slightly more accurate than "test -f" to check for file precense. + # It is also a way to make sure we got the proper file name for the real test later on. + test_shortpath=`$CYGPATH -s -m "$new_path" 2> /dev/null` + if test "x$test_shortpath" = x; then + # Short path failed, file does not exist as specified. + # Try adding .exe or .cmd + if test -f "${new_path}.exe"; then + input_to_shortpath="${new_path}.exe" + elif test -f "${new_path}.cmd"; then + input_to_shortpath="${new_path}.cmd" + else + { $as_echo "$as_me:${as_lineno-$LINENO}: The path of BUILD_LD, which resolves as \"$new_path\", is invalid." >&5 +$as_echo "$as_me: The path of BUILD_LD, which resolves as \"$new_path\", is invalid." >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: Neither \"$new_path\" nor \"$new_path.exe/cmd\" can be found" >&5 +$as_echo "$as_me: Neither \"$new_path\" nor \"$new_path.exe/cmd\" can be found" >&6;} + as_fn_error $? "Cannot locate the the path of BUILD_LD" "$LINENO" 5 + fi + else + input_to_shortpath="$new_path" + fi + + # Call helper function which possibly converts this using DOS-style short mode. + # If so, the updated path is stored in $new_path. + new_path="$input_to_shortpath" + + input_path="$input_to_shortpath" + # Check if we need to convert this using DOS-style short mode. If the path + # contains just simple characters, use it. Otherwise (spaces, weird characters), + # take no chances and rewrite it. + # Note: m4 eats our [], so we need to use [ and ] instead. + has_forbidden_chars=`$ECHO "$input_path" | $GREP [^-._/a-zA-Z0-9]` + if test "x$has_forbidden_chars" != x; then + # Now convert it to mixed DOS-style, short mode (no spaces, and / instead of \) + shortmode_path=`$CYGPATH -s -m -a "$input_path"` + path_after_shortmode=`$CYGPATH -u "$shortmode_path"` + if test "x$path_after_shortmode" != "x$input_to_shortpath"; then + # Going to short mode and back again did indeed matter. Since short mode is + # case insensitive, let's make it lowercase to improve readability. + shortmode_path=`$ECHO "$shortmode_path" | $TR 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` + # Now convert it back to Unix-stile (cygpath) + input_path=`$CYGPATH -u "$shortmode_path"` + new_path="$input_path" + fi + fi + + test_cygdrive_prefix=`$ECHO $input_path | $GREP ^/cygdrive/` + if test "x$test_cygdrive_prefix" = x; then + # As a simple fix, exclude /usr/bin since it's not a real path. + if test "x`$ECHO $input_to_shortpath | $GREP ^/usr/bin/`" = x; then + # The path is in a Cygwin special directory (e.g. /home). We need this converted to + # a path prefixed by /cygdrive for fixpath to work. + new_path="$CYGWIN_ROOT_PATH$input_path" + fi + fi + + # remove trailing .exe if any + new_path="${new_path/%.exe/}" + + elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then + + # First separate the path from the arguments. This will split at the first + # space. + complete="$BUILD_LD" + path="${complete%% *}" + tmp="$complete EOL" + arguments="${tmp#* }" + + # Input might be given as Windows format, start by converting to + # unix format. + new_path="$path" + + windows_path="$new_path" + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then + unix_path=`$CYGPATH -u "$windows_path"` + new_path="$unix_path" + elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then + unix_path=`$ECHO "$windows_path" | $SED -e 's,^\\(.\\):,/\\1,g' -e 's,\\\\,/,g'` + new_path="$unix_path" + fi + + + # Now try to locate executable using which + new_path=`$WHICH "$new_path" 2> /dev/null` + + if test "x$new_path" = x; then + # Oops. Which didn't find the executable. + # The splitting of arguments from the executable at a space might have been incorrect, + # since paths with space are more likely in Windows. Give it another try with the whole + # argument. + path="$complete" + arguments="EOL" + new_path="$path" + + windows_path="$new_path" + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then + unix_path=`$CYGPATH -u "$windows_path"` + new_path="$unix_path" + elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then + unix_path=`$ECHO "$windows_path" | $SED -e 's,^\\(.\\):,/\\1,g' -e 's,\\\\,/,g'` + new_path="$unix_path" + fi + + + new_path=`$WHICH "$new_path" 2> /dev/null` + + if test "x$new_path" = x; then + # It's still not found. Now this is an unrecoverable error. + { $as_echo "$as_me:${as_lineno-$LINENO}: The path of BUILD_LD, which resolves as \"$complete\", is not found." >&5 +$as_echo "$as_me: The path of BUILD_LD, which resolves as \"$complete\", is not found." >&6;} + has_space=`$ECHO "$complete" | $GREP " "` + if test "x$has_space" != x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: You might be mixing spaces in the path and extra arguments, which is not allowed." >&5 +$as_echo "$as_me: You might be mixing spaces in the path and extra arguments, which is not allowed." >&6;} + fi + as_fn_error $? "Cannot locate the the path of BUILD_LD" "$LINENO" 5 + fi + fi + + # Now new_path has a complete unix path to the binary + if test "x`$ECHO $new_path | $GREP ^/bin/`" != x; then + # Keep paths in /bin as-is, but remove trailing .exe if any + new_path="${new_path/%.exe/}" + # Do not save /bin paths to all_fixpath_prefixes! + else + # Not in mixed or Windows style, start by that. + new_path=`cmd //c echo $new_path` + + input_path="$new_path" + # Check if we need to convert this using DOS-style short mode. If the path + # contains just simple characters, use it. Otherwise (spaces, weird characters), + # take no chances and rewrite it. + # Note: m4 eats our [], so we need to use [ and ] instead. + has_forbidden_chars=`$ECHO "$input_path" | $GREP [^-_/:a-zA-Z0-9]` + if test "x$has_forbidden_chars" != x; then + # Now convert it to mixed DOS-style, short mode (no spaces, and / instead of \) + new_path=`cmd /c "for %A in (\"$input_path\") do @echo %~sA"|$TR \\\\\\\\ / | $TR 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` + fi + + # Output is in $new_path + + windows_path="$new_path" + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then + unix_path=`$CYGPATH -u "$windows_path"` + new_path="$unix_path" + elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then + unix_path=`$ECHO "$windows_path" | $SED -e 's,^\\(.\\):,/\\1,g' -e 's,\\\\,/,g'` + new_path="$unix_path" + fi + + # remove trailing .exe if any + new_path="${new_path/%.exe/}" + + # Save the first 10 bytes of this path to the storage, so fixpath can work. + all_fixpath_prefixes=("${all_fixpath_prefixes[@]}" "${new_path:0:10}") + fi + + else + # We're on a posix platform. Hooray! :) + # First separate the path from the arguments. This will split at the first + # space. + complete="$BUILD_LD" + path="${complete%% *}" + tmp="$complete EOL" + arguments="${tmp#* }" + + new_path=`$WHICH $path 2> /dev/null` + if test "x$new_path" = x; then + is_absolute_path=`$ECHO "$path" | $GREP ^/` + if test "x$is_absolute_path" != x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: Resolving BUILD_LD (as $path) with 'which' failed, using $path directly." >&5 +$as_echo "$as_me: Resolving BUILD_LD (as $path) with 'which' failed, using $path directly." >&6;} + new_path="$path" + else + { $as_echo "$as_me:${as_lineno-$LINENO}: The path of BUILD_LD, which resolves as \"$complete\", is not found." >&5 +$as_echo "$as_me: The path of BUILD_LD, which resolves as \"$complete\", is not found." >&6;} + has_space=`$ECHO "$complete" | $GREP " "` + if test "x$has_space" != x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: This might be caused by spaces in the path, which is not allowed." >&5 +$as_echo "$as_me: This might be caused by spaces in the path, which is not allowed." >&6;} fi - # Convert to C:/ mixed style path without spaces. - tmp=`$CYGPATH -s -m "$tmp"` + as_fn_error $? "Cannot locate the the path of BUILD_LD" "$LINENO" 5 + fi fi - car="$tmp" + fi - else - # "which" is not portable, but is used here - # because we know that the command exists! - car=`which $car` - fi - if test "x$cdr" != xEOL; then - BUILD_LD="$car ${cdr% *}" - else - BUILD_LD="$car" - fi + # Now join together the path and the arguments once again + if test "x$arguments" != xEOL; then + new_complete="$new_path ${arguments% *}" + else + new_complete="$new_path" + fi + + if test "x$complete" != "x$new_complete"; then + BUILD_LD="$new_complete" + { $as_echo "$as_me:${as_lineno-$LINENO}: Rewriting BUILD_LD to \"$new_complete\"" >&5 +$as_echo "$as_me: Rewriting BUILD_LD to \"$new_complete\"" >&6;} + fi fi @@ -11102,16 +17641,902 @@ if test "x$TOOLS_DIR" != x; then PATH=$TOOLS_DIR:$PATH fi + +### Locate C compiler (CC) + # gcc is almost always present, but on Windows we # prefer cl.exe and on Solaris we prefer CC. # Thus test for them in this order. +if test "x$OPENJDK_TARGET_OS" = xmacosx; then + # Do not probe for cc on MacOSX. + COMPILER_CHECK_LIST="cl gcc" +else + COMPILER_CHECK_LIST="cl cc gcc" +fi + + + COMPILER_NAME=C + + # Do a first initial attempt at searching the list of compiler names. + # AC_PATH_PROGS can't be run multiple times with the same variable, + # so create a new name for this run. + for ac_prog in $COMPILER_CHECK_LIST +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_path_POTENTIAL_CC+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + case $POTENTIAL_CC in + [\\/]* | ?:[\\/]*) + ac_cv_path_POTENTIAL_CC="$POTENTIAL_CC" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_path_POTENTIAL_CC="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +POTENTIAL_CC=$ac_cv_path_POTENTIAL_CC +if test -n "$POTENTIAL_CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $POTENTIAL_CC" >&5 +$as_echo "$POTENTIAL_CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$POTENTIAL_CC" && break +done + + CC=$POTENTIAL_CC + + if test "x$$CC" = x; then + + # Print a helpful message on how to acquire the necessary build dependency. + # devkit is the help tag: freetyp2, cups, pulse, alsa etc + MISSING_DEPENDENCY=devkit + PKGHANDLER_COMMAND= + + case $PKGHANDLER in + apt-get) + apt_help $MISSING_DEPENDENCY ;; + yum) + yum_help $MISSING_DEPENDENCY ;; + port) + port_help $MISSING_DEPENDENCY ;; + pkgutil) + pkgutil_help $MISSING_DEPENDENCY ;; + pkgadd) + pkgadd_help $MISSING_DEPENDENCY ;; + * ) + break ;; + esac + + if test "x$PKGHANDLER_COMMAND" != x; then + HELP_MSG="You might be able to fix this by running '$PKGHANDLER_COMMAND'." + fi + + as_fn_error $? "Could not find a $COMPILER_NAME compiler. $HELP_MSG" "$LINENO" 5 + fi + + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then + + # First separate the path from the arguments. This will split at the first + # space. + complete="$CC" + path="${complete%% *}" + tmp="$complete EOL" + arguments="${tmp#* }" + + # Input might be given as Windows format, start by converting to + # unix format. + new_path=`$CYGPATH -u "$path"` + + # Now try to locate executable using which + new_path=`$WHICH "$new_path" 2> /dev/null` + # bat and cmd files are not always considered executable in cygwin causing which + # to not find them + if test "x$new_path" = x \ + && test "x`$ECHO \"$path\" | $GREP -e \"\\.bat$\" -e \"\\.cmd$\"`" != x \ + && test "x`$LS \"$path\" 2>/dev/null`" != x; then + new_path=`$CYGPATH -u "$path"` + fi + if test "x$new_path" = x; then + # Oops. Which didn't find the executable. + # The splitting of arguments from the executable at a space might have been incorrect, + # since paths with space are more likely in Windows. Give it another try with the whole + # argument. + path="$complete" + arguments="EOL" + new_path=`$CYGPATH -u "$path"` + new_path=`$WHICH "$new_path" 2> /dev/null` + # bat and cmd files are not always considered executable in cygwin causing which + # to not find them + if test "x$new_path" = x \ + && test "x`$ECHO \"$path\" | $GREP -e \"\\.bat$\" -e \"\\.cmd$\"`" != x \ + && test "x`$LS \"$path\" 2>/dev/null`" != x; then + new_path=`$CYGPATH -u "$path"` + fi + if test "x$new_path" = x; then + # It's still not found. Now this is an unrecoverable error. + { $as_echo "$as_me:${as_lineno-$LINENO}: The path of CC, which resolves as \"$complete\", is not found." >&5 +$as_echo "$as_me: The path of CC, which resolves as \"$complete\", is not found." >&6;} + has_space=`$ECHO "$complete" | $GREP " "` + if test "x$has_space" != x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: You might be mixing spaces in the path and extra arguments, which is not allowed." >&5 +$as_echo "$as_me: You might be mixing spaces in the path and extra arguments, which is not allowed." >&6;} + fi + as_fn_error $? "Cannot locate the the path of CC" "$LINENO" 5 + fi + fi + + # Cygwin tries to hide some aspects of the Windows file system, such that binaries are + # named .exe but called without that suffix. Therefore, "foo" and "foo.exe" are considered + # the same file, most of the time (as in "test -f"). But not when running cygpath -s, then + # "foo.exe" is OK but "foo" is an error. + # + # This test is therefore slightly more accurate than "test -f" to check for file precense. + # It is also a way to make sure we got the proper file name for the real test later on. + test_shortpath=`$CYGPATH -s -m "$new_path" 2> /dev/null` + if test "x$test_shortpath" = x; then + # Short path failed, file does not exist as specified. + # Try adding .exe or .cmd + if test -f "${new_path}.exe"; then + input_to_shortpath="${new_path}.exe" + elif test -f "${new_path}.cmd"; then + input_to_shortpath="${new_path}.cmd" + else + { $as_echo "$as_me:${as_lineno-$LINENO}: The path of CC, which resolves as \"$new_path\", is invalid." >&5 +$as_echo "$as_me: The path of CC, which resolves as \"$new_path\", is invalid." >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: Neither \"$new_path\" nor \"$new_path.exe/cmd\" can be found" >&5 +$as_echo "$as_me: Neither \"$new_path\" nor \"$new_path.exe/cmd\" can be found" >&6;} + as_fn_error $? "Cannot locate the the path of CC" "$LINENO" 5 + fi + else + input_to_shortpath="$new_path" + fi + + # Call helper function which possibly converts this using DOS-style short mode. + # If so, the updated path is stored in $new_path. + new_path="$input_to_shortpath" + + input_path="$input_to_shortpath" + # Check if we need to convert this using DOS-style short mode. If the path + # contains just simple characters, use it. Otherwise (spaces, weird characters), + # take no chances and rewrite it. + # Note: m4 eats our [], so we need to use [ and ] instead. + has_forbidden_chars=`$ECHO "$input_path" | $GREP [^-._/a-zA-Z0-9]` + if test "x$has_forbidden_chars" != x; then + # Now convert it to mixed DOS-style, short mode (no spaces, and / instead of \) + shortmode_path=`$CYGPATH -s -m -a "$input_path"` + path_after_shortmode=`$CYGPATH -u "$shortmode_path"` + if test "x$path_after_shortmode" != "x$input_to_shortpath"; then + # Going to short mode and back again did indeed matter. Since short mode is + # case insensitive, let's make it lowercase to improve readability. + shortmode_path=`$ECHO "$shortmode_path" | $TR 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` + # Now convert it back to Unix-stile (cygpath) + input_path=`$CYGPATH -u "$shortmode_path"` + new_path="$input_path" + fi + fi + + test_cygdrive_prefix=`$ECHO $input_path | $GREP ^/cygdrive/` + if test "x$test_cygdrive_prefix" = x; then + # As a simple fix, exclude /usr/bin since it's not a real path. + if test "x`$ECHO $input_to_shortpath | $GREP ^/usr/bin/`" = x; then + # The path is in a Cygwin special directory (e.g. /home). We need this converted to + # a path prefixed by /cygdrive for fixpath to work. + new_path="$CYGWIN_ROOT_PATH$input_path" + fi + fi + + # remove trailing .exe if any + new_path="${new_path/%.exe/}" + + elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then + + # First separate the path from the arguments. This will split at the first + # space. + complete="$CC" + path="${complete%% *}" + tmp="$complete EOL" + arguments="${tmp#* }" + + # Input might be given as Windows format, start by converting to + # unix format. + new_path="$path" + + windows_path="$new_path" + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then + unix_path=`$CYGPATH -u "$windows_path"` + new_path="$unix_path" + elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then + unix_path=`$ECHO "$windows_path" | $SED -e 's,^\\(.\\):,/\\1,g' -e 's,\\\\,/,g'` + new_path="$unix_path" + fi + + + # Now try to locate executable using which + new_path=`$WHICH "$new_path" 2> /dev/null` + + if test "x$new_path" = x; then + # Oops. Which didn't find the executable. + # The splitting of arguments from the executable at a space might have been incorrect, + # since paths with space are more likely in Windows. Give it another try with the whole + # argument. + path="$complete" + arguments="EOL" + new_path="$path" + + windows_path="$new_path" + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then + unix_path=`$CYGPATH -u "$windows_path"` + new_path="$unix_path" + elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then + unix_path=`$ECHO "$windows_path" | $SED -e 's,^\\(.\\):,/\\1,g' -e 's,\\\\,/,g'` + new_path="$unix_path" + fi + + + new_path=`$WHICH "$new_path" 2> /dev/null` + + if test "x$new_path" = x; then + # It's still not found. Now this is an unrecoverable error. + { $as_echo "$as_me:${as_lineno-$LINENO}: The path of CC, which resolves as \"$complete\", is not found." >&5 +$as_echo "$as_me: The path of CC, which resolves as \"$complete\", is not found." >&6;} + has_space=`$ECHO "$complete" | $GREP " "` + if test "x$has_space" != x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: You might be mixing spaces in the path and extra arguments, which is not allowed." >&5 +$as_echo "$as_me: You might be mixing spaces in the path and extra arguments, which is not allowed." >&6;} + fi + as_fn_error $? "Cannot locate the the path of CC" "$LINENO" 5 + fi + fi + + # Now new_path has a complete unix path to the binary + if test "x`$ECHO $new_path | $GREP ^/bin/`" != x; then + # Keep paths in /bin as-is, but remove trailing .exe if any + new_path="${new_path/%.exe/}" + # Do not save /bin paths to all_fixpath_prefixes! + else + # Not in mixed or Windows style, start by that. + new_path=`cmd //c echo $new_path` + + input_path="$new_path" + # Check if we need to convert this using DOS-style short mode. If the path + # contains just simple characters, use it. Otherwise (spaces, weird characters), + # take no chances and rewrite it. + # Note: m4 eats our [], so we need to use [ and ] instead. + has_forbidden_chars=`$ECHO "$input_path" | $GREP [^-_/:a-zA-Z0-9]` + if test "x$has_forbidden_chars" != x; then + # Now convert it to mixed DOS-style, short mode (no spaces, and / instead of \) + new_path=`cmd /c "for %A in (\"$input_path\") do @echo %~sA"|$TR \\\\\\\\ / | $TR 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` + fi + + # Output is in $new_path + + windows_path="$new_path" + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then + unix_path=`$CYGPATH -u "$windows_path"` + new_path="$unix_path" + elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then + unix_path=`$ECHO "$windows_path" | $SED -e 's,^\\(.\\):,/\\1,g' -e 's,\\\\,/,g'` + new_path="$unix_path" + fi + + # remove trailing .exe if any + new_path="${new_path/%.exe/}" + + # Save the first 10 bytes of this path to the storage, so fixpath can work. + all_fixpath_prefixes=("${all_fixpath_prefixes[@]}" "${new_path:0:10}") + fi + + else + # We're on a posix platform. Hooray! :) + # First separate the path from the arguments. This will split at the first + # space. + complete="$CC" + path="${complete%% *}" + tmp="$complete EOL" + arguments="${tmp#* }" + + new_path=`$WHICH $path 2> /dev/null` + if test "x$new_path" = x; then + is_absolute_path=`$ECHO "$path" | $GREP ^/` + if test "x$is_absolute_path" != x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: Resolving CC (as $path) with 'which' failed, using $path directly." >&5 +$as_echo "$as_me: Resolving CC (as $path) with 'which' failed, using $path directly." >&6;} + new_path="$path" + else + { $as_echo "$as_me:${as_lineno-$LINENO}: The path of CC, which resolves as \"$complete\", is not found." >&5 +$as_echo "$as_me: The path of CC, which resolves as \"$complete\", is not found." >&6;} + has_space=`$ECHO "$complete" | $GREP " "` + if test "x$has_space" != x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: This might be caused by spaces in the path, which is not allowed." >&5 +$as_echo "$as_me: This might be caused by spaces in the path, which is not allowed." >&6;} + fi + as_fn_error $? "Cannot locate the the path of CC" "$LINENO" 5 + fi + fi + fi + + # Now join together the path and the arguments once again + if test "x$arguments" != xEOL; then + new_complete="$new_path ${arguments% *}" + else + new_complete="$new_path" + fi + + if test "x$complete" != "x$new_complete"; then + CC="$new_complete" + { $as_echo "$as_me:${as_lineno-$LINENO}: Rewriting CC to \"$new_complete\"" >&5 +$as_echo "$as_me: Rewriting CC to \"$new_complete\"" >&6;} + fi + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking resolved symbolic links for CC" >&5 +$as_echo_n "checking resolved symbolic links for CC... " >&6; } + TEST_COMPILER="$CC" + + if test "x$OPENJDK_BUILD_OS" != xwindows; then + # Follow a chain of symbolic links. Use readlink + # where it exists, else fall back to horribly + # complicated shell code. + if test "x$READLINK_TESTED" != yes; then + # On MacOSX there is a readlink tool with a different + # purpose than the GNU readlink tool. Check the found readlink. + ISGNU=`$READLINK --help 2>&1 | $GREP GNU` + if test "x$ISGNU" = x; then + # A readlink that we do not know how to use. + # Are there other non-GNU readlinks out there? + READLINK_TESTED=yes + READLINK= + fi + fi + + if test "x$READLINK" != x; then + TEST_COMPILER=`$READLINK -f $TEST_COMPILER` + else + STARTDIR=$PWD + COUNTER=0 + sym_link_dir=`$DIRNAME $TEST_COMPILER` + sym_link_file=`$BASENAME $TEST_COMPILER` + while test $COUNTER -lt 20; do + ISLINK=`$LS -l $sym_link_dir/$sym_link_file | $GREP '\->' | $SED -e 's/.*-> \(.*\)/\1/'` + if test "x$ISLINK" == x; then + # This is not a symbolic link! We are done! + break + fi + # The link might be relative! We have to use cd to travel safely. + cd $sym_link_dir + # ... and we must get the to the absolute path, not one using symbolic links. + cd `pwd -P` + cd `$DIRNAME $ISLINK` + sym_link_dir=`$THEPWDCMD` + sym_link_file=`$BASENAME $ISLINK` + let COUNTER=COUNTER+1 + done + cd $STARTDIR + TEST_COMPILER=$sym_link_dir/$sym_link_file + fi + fi + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $TEST_COMPILER" >&5 +$as_echo "$TEST_COMPILER" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if CC is disguised ccache" >&5 +$as_echo_n "checking if CC is disguised ccache... " >&6; } + + COMPILER_BASENAME=`$BASENAME "$TEST_COMPILER"` + if test "x$COMPILER_BASENAME" = "xccache"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes, trying to find proper $COMPILER_NAME compiler" >&5 +$as_echo "yes, trying to find proper $COMPILER_NAME compiler" >&6; } + # We /usr/lib/ccache in the path, so cc is a symlink to /usr/bin/ccache. + # We want to control ccache invocation ourselves, so ignore this cc and try + # searching again. + + # Remove the path to the fake ccache cc from the PATH + RETRY_COMPILER_SAVED_PATH="$PATH" + COMPILER_DIRNAME=`$DIRNAME $CC` + PATH="`$ECHO $PATH | $SED -e "s,$COMPILER_DIRNAME,,g" -e "s,::,:,g" -e "s,^:,,g"`" + + # Try again looking for our compiler + if test -n "$ac_tool_prefix"; then + for ac_prog in $COMPILER_CHECK_LIST + do + # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. +set dummy $ac_tool_prefix$ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_PROPER_COMPILER_CC+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$PROPER_COMPILER_CC"; then + ac_cv_prog_PROPER_COMPILER_CC="$PROPER_COMPILER_CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_PROPER_COMPILER_CC="$ac_tool_prefix$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +PROPER_COMPILER_CC=$ac_cv_prog_PROPER_COMPILER_CC +if test -n "$PROPER_COMPILER_CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PROPER_COMPILER_CC" >&5 +$as_echo "$PROPER_COMPILER_CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$PROPER_COMPILER_CC" && break + done +fi +if test -z "$PROPER_COMPILER_CC"; then + ac_ct_PROPER_COMPILER_CC=$PROPER_COMPILER_CC + for ac_prog in $COMPILER_CHECK_LIST +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_ac_ct_PROPER_COMPILER_CC+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_PROPER_COMPILER_CC"; then + ac_cv_prog_ac_ct_PROPER_COMPILER_CC="$ac_ct_PROPER_COMPILER_CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_PROPER_COMPILER_CC="$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_PROPER_COMPILER_CC=$ac_cv_prog_ac_ct_PROPER_COMPILER_CC +if test -n "$ac_ct_PROPER_COMPILER_CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_PROPER_COMPILER_CC" >&5 +$as_echo "$ac_ct_PROPER_COMPILER_CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$ac_ct_PROPER_COMPILER_CC" && break +done + + if test "x$ac_ct_PROPER_COMPILER_CC" = x; then + PROPER_COMPILER_CC="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + PROPER_COMPILER_CC=$ac_ct_PROPER_COMPILER_CC + fi +fi + + + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then + + # First separate the path from the arguments. This will split at the first + # space. + complete="$PROPER_COMPILER_CC" + path="${complete%% *}" + tmp="$complete EOL" + arguments="${tmp#* }" + + # Input might be given as Windows format, start by converting to + # unix format. + new_path=`$CYGPATH -u "$path"` + + # Now try to locate executable using which + new_path=`$WHICH "$new_path" 2> /dev/null` + # bat and cmd files are not always considered executable in cygwin causing which + # to not find them + if test "x$new_path" = x \ + && test "x`$ECHO \"$path\" | $GREP -e \"\\.bat$\" -e \"\\.cmd$\"`" != x \ + && test "x`$LS \"$path\" 2>/dev/null`" != x; then + new_path=`$CYGPATH -u "$path"` + fi + if test "x$new_path" = x; then + # Oops. Which didn't find the executable. + # The splitting of arguments from the executable at a space might have been incorrect, + # since paths with space are more likely in Windows. Give it another try with the whole + # argument. + path="$complete" + arguments="EOL" + new_path=`$CYGPATH -u "$path"` + new_path=`$WHICH "$new_path" 2> /dev/null` + # bat and cmd files are not always considered executable in cygwin causing which + # to not find them + if test "x$new_path" = x \ + && test "x`$ECHO \"$path\" | $GREP -e \"\\.bat$\" -e \"\\.cmd$\"`" != x \ + && test "x`$LS \"$path\" 2>/dev/null`" != x; then + new_path=`$CYGPATH -u "$path"` + fi + if test "x$new_path" = x; then + # It's still not found. Now this is an unrecoverable error. + { $as_echo "$as_me:${as_lineno-$LINENO}: The path of PROPER_COMPILER_CC, which resolves as \"$complete\", is not found." >&5 +$as_echo "$as_me: The path of PROPER_COMPILER_CC, which resolves as \"$complete\", is not found." >&6;} + has_space=`$ECHO "$complete" | $GREP " "` + if test "x$has_space" != x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: You might be mixing spaces in the path and extra arguments, which is not allowed." >&5 +$as_echo "$as_me: You might be mixing spaces in the path and extra arguments, which is not allowed." >&6;} + fi + as_fn_error $? "Cannot locate the the path of PROPER_COMPILER_CC" "$LINENO" 5 + fi + fi + + # Cygwin tries to hide some aspects of the Windows file system, such that binaries are + # named .exe but called without that suffix. Therefore, "foo" and "foo.exe" are considered + # the same file, most of the time (as in "test -f"). But not when running cygpath -s, then + # "foo.exe" is OK but "foo" is an error. + # + # This test is therefore slightly more accurate than "test -f" to check for file precense. + # It is also a way to make sure we got the proper file name for the real test later on. + test_shortpath=`$CYGPATH -s -m "$new_path" 2> /dev/null` + if test "x$test_shortpath" = x; then + # Short path failed, file does not exist as specified. + # Try adding .exe or .cmd + if test -f "${new_path}.exe"; then + input_to_shortpath="${new_path}.exe" + elif test -f "${new_path}.cmd"; then + input_to_shortpath="${new_path}.cmd" + else + { $as_echo "$as_me:${as_lineno-$LINENO}: The path of PROPER_COMPILER_CC, which resolves as \"$new_path\", is invalid." >&5 +$as_echo "$as_me: The path of PROPER_COMPILER_CC, which resolves as \"$new_path\", is invalid." >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: Neither \"$new_path\" nor \"$new_path.exe/cmd\" can be found" >&5 +$as_echo "$as_me: Neither \"$new_path\" nor \"$new_path.exe/cmd\" can be found" >&6;} + as_fn_error $? "Cannot locate the the path of PROPER_COMPILER_CC" "$LINENO" 5 + fi + else + input_to_shortpath="$new_path" + fi + + # Call helper function which possibly converts this using DOS-style short mode. + # If so, the updated path is stored in $new_path. + new_path="$input_to_shortpath" + + input_path="$input_to_shortpath" + # Check if we need to convert this using DOS-style short mode. If the path + # contains just simple characters, use it. Otherwise (spaces, weird characters), + # take no chances and rewrite it. + # Note: m4 eats our [], so we need to use [ and ] instead. + has_forbidden_chars=`$ECHO "$input_path" | $GREP [^-._/a-zA-Z0-9]` + if test "x$has_forbidden_chars" != x; then + # Now convert it to mixed DOS-style, short mode (no spaces, and / instead of \) + shortmode_path=`$CYGPATH -s -m -a "$input_path"` + path_after_shortmode=`$CYGPATH -u "$shortmode_path"` + if test "x$path_after_shortmode" != "x$input_to_shortpath"; then + # Going to short mode and back again did indeed matter. Since short mode is + # case insensitive, let's make it lowercase to improve readability. + shortmode_path=`$ECHO "$shortmode_path" | $TR 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` + # Now convert it back to Unix-stile (cygpath) + input_path=`$CYGPATH -u "$shortmode_path"` + new_path="$input_path" + fi + fi + + test_cygdrive_prefix=`$ECHO $input_path | $GREP ^/cygdrive/` + if test "x$test_cygdrive_prefix" = x; then + # As a simple fix, exclude /usr/bin since it's not a real path. + if test "x`$ECHO $input_to_shortpath | $GREP ^/usr/bin/`" = x; then + # The path is in a Cygwin special directory (e.g. /home). We need this converted to + # a path prefixed by /cygdrive for fixpath to work. + new_path="$CYGWIN_ROOT_PATH$input_path" + fi + fi + + # remove trailing .exe if any + new_path="${new_path/%.exe/}" + + elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then + + # First separate the path from the arguments. This will split at the first + # space. + complete="$PROPER_COMPILER_CC" + path="${complete%% *}" + tmp="$complete EOL" + arguments="${tmp#* }" + + # Input might be given as Windows format, start by converting to + # unix format. + new_path="$path" + + windows_path="$new_path" + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then + unix_path=`$CYGPATH -u "$windows_path"` + new_path="$unix_path" + elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then + unix_path=`$ECHO "$windows_path" | $SED -e 's,^\\(.\\):,/\\1,g' -e 's,\\\\,/,g'` + new_path="$unix_path" + fi + + + # Now try to locate executable using which + new_path=`$WHICH "$new_path" 2> /dev/null` + + if test "x$new_path" = x; then + # Oops. Which didn't find the executable. + # The splitting of arguments from the executable at a space might have been incorrect, + # since paths with space are more likely in Windows. Give it another try with the whole + # argument. + path="$complete" + arguments="EOL" + new_path="$path" + + windows_path="$new_path" + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then + unix_path=`$CYGPATH -u "$windows_path"` + new_path="$unix_path" + elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then + unix_path=`$ECHO "$windows_path" | $SED -e 's,^\\(.\\):,/\\1,g' -e 's,\\\\,/,g'` + new_path="$unix_path" + fi + + + new_path=`$WHICH "$new_path" 2> /dev/null` + + if test "x$new_path" = x; then + # It's still not found. Now this is an unrecoverable error. + { $as_echo "$as_me:${as_lineno-$LINENO}: The path of PROPER_COMPILER_CC, which resolves as \"$complete\", is not found." >&5 +$as_echo "$as_me: The path of PROPER_COMPILER_CC, which resolves as \"$complete\", is not found." >&6;} + has_space=`$ECHO "$complete" | $GREP " "` + if test "x$has_space" != x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: You might be mixing spaces in the path and extra arguments, which is not allowed." >&5 +$as_echo "$as_me: You might be mixing spaces in the path and extra arguments, which is not allowed." >&6;} + fi + as_fn_error $? "Cannot locate the the path of PROPER_COMPILER_CC" "$LINENO" 5 + fi + fi + + # Now new_path has a complete unix path to the binary + if test "x`$ECHO $new_path | $GREP ^/bin/`" != x; then + # Keep paths in /bin as-is, but remove trailing .exe if any + new_path="${new_path/%.exe/}" + # Do not save /bin paths to all_fixpath_prefixes! + else + # Not in mixed or Windows style, start by that. + new_path=`cmd //c echo $new_path` + + input_path="$new_path" + # Check if we need to convert this using DOS-style short mode. If the path + # contains just simple characters, use it. Otherwise (spaces, weird characters), + # take no chances and rewrite it. + # Note: m4 eats our [], so we need to use [ and ] instead. + has_forbidden_chars=`$ECHO "$input_path" | $GREP [^-_/:a-zA-Z0-9]` + if test "x$has_forbidden_chars" != x; then + # Now convert it to mixed DOS-style, short mode (no spaces, and / instead of \) + new_path=`cmd /c "for %A in (\"$input_path\") do @echo %~sA"|$TR \\\\\\\\ / | $TR 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` + fi + + # Output is in $new_path + + windows_path="$new_path" + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then + unix_path=`$CYGPATH -u "$windows_path"` + new_path="$unix_path" + elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then + unix_path=`$ECHO "$windows_path" | $SED -e 's,^\\(.\\):,/\\1,g' -e 's,\\\\,/,g'` + new_path="$unix_path" + fi + + # remove trailing .exe if any + new_path="${new_path/%.exe/}" + + # Save the first 10 bytes of this path to the storage, so fixpath can work. + all_fixpath_prefixes=("${all_fixpath_prefixes[@]}" "${new_path:0:10}") + fi + + else + # We're on a posix platform. Hooray! :) + # First separate the path from the arguments. This will split at the first + # space. + complete="$PROPER_COMPILER_CC" + path="${complete%% *}" + tmp="$complete EOL" + arguments="${tmp#* }" + + new_path=`$WHICH $path 2> /dev/null` + if test "x$new_path" = x; then + is_absolute_path=`$ECHO "$path" | $GREP ^/` + if test "x$is_absolute_path" != x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: Resolving PROPER_COMPILER_CC (as $path) with 'which' failed, using $path directly." >&5 +$as_echo "$as_me: Resolving PROPER_COMPILER_CC (as $path) with 'which' failed, using $path directly." >&6;} + new_path="$path" + else + { $as_echo "$as_me:${as_lineno-$LINENO}: The path of PROPER_COMPILER_CC, which resolves as \"$complete\", is not found." >&5 +$as_echo "$as_me: The path of PROPER_COMPILER_CC, which resolves as \"$complete\", is not found." >&6;} + has_space=`$ECHO "$complete" | $GREP " "` + if test "x$has_space" != x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: This might be caused by spaces in the path, which is not allowed." >&5 +$as_echo "$as_me: This might be caused by spaces in the path, which is not allowed." >&6;} + fi + as_fn_error $? "Cannot locate the the path of PROPER_COMPILER_CC" "$LINENO" 5 + fi + fi + fi + + # Now join together the path and the arguments once again + if test "x$arguments" != xEOL; then + new_complete="$new_path ${arguments% *}" + else + new_complete="$new_path" + fi + + if test "x$complete" != "x$new_complete"; then + PROPER_COMPILER_CC="$new_complete" + { $as_echo "$as_me:${as_lineno-$LINENO}: Rewriting PROPER_COMPILER_CC to \"$new_complete\"" >&5 +$as_echo "$as_me: Rewriting PROPER_COMPILER_CC to \"$new_complete\"" >&6;} + fi + + PATH="$RETRY_COMPILER_SAVED_PATH" + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for resolved symbolic links for CC" >&5 +$as_echo_n "checking for resolved symbolic links for CC... " >&6; } + + if test "x$OPENJDK_BUILD_OS" != xwindows; then + # Follow a chain of symbolic links. Use readlink + # where it exists, else fall back to horribly + # complicated shell code. + if test "x$READLINK_TESTED" != yes; then + # On MacOSX there is a readlink tool with a different + # purpose than the GNU readlink tool. Check the found readlink. + ISGNU=`$READLINK --help 2>&1 | $GREP GNU` + if test "x$ISGNU" = x; then + # A readlink that we do not know how to use. + # Are there other non-GNU readlinks out there? + READLINK_TESTED=yes + READLINK= + fi + fi + + if test "x$READLINK" != x; then + PROPER_COMPILER_CC=`$READLINK -f $PROPER_COMPILER_CC` + else + STARTDIR=$PWD + COUNTER=0 + sym_link_dir=`$DIRNAME $PROPER_COMPILER_CC` + sym_link_file=`$BASENAME $PROPER_COMPILER_CC` + while test $COUNTER -lt 20; do + ISLINK=`$LS -l $sym_link_dir/$sym_link_file | $GREP '\->' | $SED -e 's/.*-> \(.*\)/\1/'` + if test "x$ISLINK" == x; then + # This is not a symbolic link! We are done! + break + fi + # The link might be relative! We have to use cd to travel safely. + cd $sym_link_dir + # ... and we must get the to the absolute path, not one using symbolic links. + cd `pwd -P` + cd `$DIRNAME $ISLINK` + sym_link_dir=`$THEPWDCMD` + sym_link_file=`$BASENAME $ISLINK` + let COUNTER=COUNTER+1 + done + cd $STARTDIR + PROPER_COMPILER_CC=$sym_link_dir/$sym_link_file + fi + fi + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PROPER_COMPILER_CC" >&5 +$as_echo "$PROPER_COMPILER_CC" >&6; } + CC="$PROPER_COMPILER_CC" + else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no, keeping CC" >&5 +$as_echo "no, keeping CC" >&6; } + CC="$TEST_COMPILER" + fi + + COMPILER=$CC + COMPILER_NAME=$COMPILER_NAME + + if test "x$OPENJDK_TARGET_OS" = xsolaris; then + # Make sure we use the Sun Studio compiler and not gcc on Solaris, which won't work + COMPILER_VERSION_TEST=`$COMPILER -V 2>&1 | $HEAD -n 1` + $ECHO $COMPILER_VERSION_TEST | $GREP "^.*: Sun $COMPILER_NAME" > /dev/null + if test $? -ne 0; then + GCC_VERSION_TEST=`$COMPILER --version 2>&1 | $HEAD -n 1` + + { $as_echo "$as_me:${as_lineno-$LINENO}: The $COMPILER_NAME compiler (located as $COMPILER) does not seem to be the required Sun Studio compiler." >&5 +$as_echo "$as_me: The $COMPILER_NAME compiler (located as $COMPILER) does not seem to be the required Sun Studio compiler." >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: The result from running with -V was: \"$COMPILER_VERSION_TEST\" and with --version: \"$GCC_VERSION_TEST\"" >&5 +$as_echo "$as_me: The result from running with -V was: \"$COMPILER_VERSION_TEST\" and with --version: \"$GCC_VERSION_TEST\"" >&6;} + as_fn_error $? "Sun Studio compiler is required. Try setting --with-tools-dir." "$LINENO" 5 + else + COMPILER_VERSION=`$ECHO $COMPILER_VERSION_TEST | $SED -n "s/^.*[ ,\t]$COMPILER_NAME[ ,\t]\([1-9]\.[0-9][0-9]*\).*/\1/p"` + COMPILER_VENDOR="Sun Studio" + fi + elif test "x$OPENJDK_TARGET_OS" = xwindows; then + # First line typically looks something like: + # Microsoft (R) 32-bit C/C++ Optimizing Compiler Version 16.00.30319.01 for 80x86 + COMPILER_VERSION_TEST=`$COMPILER 2>&1 | $HEAD -n 1` + COMPILER_VERSION=`$ECHO $COMPILER_VERSION_TEST | $SED -n "s/^.*Version \([1-9][0-9.]*\) .*/\1/p"` + COMPILER_VENDOR="Microsoft CL.EXE" + COMPILER_CPU_TEST=`$ECHO $COMPILER_VERSION_TEST | $SED -n "s/^.* for \(.*\)$/\1/p"` + if test "x$OPENJDK_TARGET_CPU" = "xx86"; then + if test "x$COMPILER_CPU_TEST" != "x80x86"; then + as_fn_error $? "Target CPU mismatch. We are building for $OPENJDK_TARGET_CPU but CL is for \"$COMPILER_CPU_TEST\"; expected \"80x86\"." "$LINENO" 5 + fi + elif test "x$OPENJDK_TARGET_CPU" = "xx86_64"; then + if test "x$COMPILER_CPU_TEST" != "xx64"; then + as_fn_error $? "Target CPU mismatch. We are building for $OPENJDK_TARGET_CPU but CL is for \"$COMPILER_CPU_TEST\"; expected \"x64\"." "$LINENO" 5 + fi + fi + else + COMPILER_VERSION_TEST=`$COMPILER --version 2>&1 | $HEAD -n 1` + # Check that this is likely to be GCC. + $COMPILER --version 2>&1 | $GREP "Free Software Foundation" > /dev/null + if test $? -ne 0; then + { $as_echo "$as_me:${as_lineno-$LINENO}: The $COMPILER_NAME compiler (located as $COMPILER) does not seem to be the required GCC compiler." >&5 +$as_echo "$as_me: The $COMPILER_NAME compiler (located as $COMPILER) does not seem to be the required GCC compiler." >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: The result from running with --version was: \"$COMPILER_VERSION_TEST\"" >&5 +$as_echo "$as_me: The result from running with --version was: \"$COMPILER_VERSION_TEST\"" >&6;} + as_fn_error $? "GCC compiler is required. Try setting --with-tools-dir." "$LINENO" 5 + fi + + # First line typically looks something like: + # gcc (Ubuntu/Linaro 4.5.2-8ubuntu4) 4.5.2 + COMPILER_VERSION=`$ECHO $COMPILER_VERSION_TEST | $SED -n "s/^.* \([1-9][0-9.]*\)/\1/p"` + COMPILER_VENDOR=`$ECHO $COMPILER_VERSION_TEST | $SED -n "s/^\(.*\) [1-9][0-9.]*/\1/p"` + fi + # This sets CC_VERSION or CXX_VERSION. (This comment is a grep marker) + CC_VERSION="$COMPILER_VERSION" + # This sets CC_VENDOR or CXX_VENDOR. (This comment is a grep marker) + CC_VENDOR="$COMPILER_VENDOR" + + { $as_echo "$as_me:${as_lineno-$LINENO}: Using $COMPILER_VENDOR $COMPILER_NAME compiler version $COMPILER_VERSION (located at $COMPILER)" >&5 +$as_echo "$as_me: Using $COMPILER_VENDOR $COMPILER_NAME compiler version $COMPILER_VERSION (located at $COMPILER)" >&6;} + + +# Now that we have resolved CC ourself, let autoconf have it's go at it ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu if test -n "$ac_tool_prefix"; then - for ac_prog in cl cc gcc + for ac_prog in $CC do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 @@ -11155,7 +18580,7 @@ fi fi if test -z "$CC"; then ac_ct_CC=$CC - for ac_prog in cl cc gcc + for ac_prog in $CC do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 @@ -11703,7 +19128,69 @@ ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_cxx_compiler_gnu -if test "x$CC" = x; then + +### Locate C++ compiler (CXX) + +if test "x$OPENJDK_TARGET_OS" = xmacosx; then + # Do not probe for CC on MacOSX. + COMPILER_CHECK_LIST="cl g++" +else + COMPILER_CHECK_LIST="cl CC g++" +fi + + COMPILER_NAME=C++ + + # Do a first initial attempt at searching the list of compiler names. + # AC_PATH_PROGS can't be run multiple times with the same variable, + # so create a new name for this run. + for ac_prog in $COMPILER_CHECK_LIST +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_path_POTENTIAL_CXX+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + case $POTENTIAL_CXX in + [\\/]* | ?:[\\/]*) + ac_cv_path_POTENTIAL_CXX="$POTENTIAL_CXX" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_path_POTENTIAL_CXX="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +POTENTIAL_CXX=$ac_cv_path_POTENTIAL_CXX +if test -n "$POTENTIAL_CXX"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $POTENTIAL_CXX" >&5 +$as_echo "$POTENTIAL_CXX" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$POTENTIAL_CXX" && break +done + + CXX=$POTENTIAL_CXX + + if test "x$$CXX" = x; then # Print a helpful message on how to acquire the necessary build dependency. # devkit is the help tag: freetyp2, cups, pulse, alsa etc @@ -11729,56 +19216,803 @@ if test "x$CC" = x; then HELP_MSG="You might be able to fix this by running '$PKGHANDLER_COMMAND'." fi - as_fn_error $? "Could not find a compiler. $HELP_MSG" "$LINENO" 5 -fi -if test "x$CC" = xcc && test "x$OPENJDK_BUILD_OS" = xmacosx; then - # Do not use cc on MacOSX use gcc instead. - CC="gcc" -fi + as_fn_error $? "Could not find a $COMPILER_NAME compiler. $HELP_MSG" "$LINENO" 5 + fi - # Translate "gcc -E" into "`which gcc` -E" ie - # extract the full path to the binary and at the - # same time maintain any arguments passed to it. - # The command MUST exist in the path, or else! - tmp="$CC" - car="${tmp%% *}" - tmp="$CC EOL" - cdr="${tmp#* }" - # On windows we want paths without spaces. - if test "x$OPENJDK_BUILD_OS" = "xwindows"; then + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then - # Translate long cygdrive or C:\sdfsf path - # into a short mixed mode path that has no - # spaces in it. - tmp="$car" + # First separate the path from the arguments. This will split at the first + # space. + complete="$CXX" + path="${complete%% *}" + tmp="$complete EOL" + arguments="${tmp#* }" - if test "x$OPENJDK_BUILD_OS" = "xwindows"; then - tmp=`$CYGPATH -u "$car"` - tmp=`which "$tmp"` - # If file exists with .exe appended, that's the real filename - # and cygpath needs that to convert to short style path. - if test -f "${tmp}.exe"; then - tmp="${tmp}.exe" - elif test -f "${tmp}.cmd"; then - tmp="${tmp}.cmd" + # Input might be given as Windows format, start by converting to + # unix format. + new_path=`$CYGPATH -u "$path"` + + # Now try to locate executable using which + new_path=`$WHICH "$new_path" 2> /dev/null` + # bat and cmd files are not always considered executable in cygwin causing which + # to not find them + if test "x$new_path" = x \ + && test "x`$ECHO \"$path\" | $GREP -e \"\\.bat$\" -e \"\\.cmd$\"`" != x \ + && test "x`$LS \"$path\" 2>/dev/null`" != x; then + new_path=`$CYGPATH -u "$path"` + fi + if test "x$new_path" = x; then + # Oops. Which didn't find the executable. + # The splitting of arguments from the executable at a space might have been incorrect, + # since paths with space are more likely in Windows. Give it another try with the whole + # argument. + path="$complete" + arguments="EOL" + new_path=`$CYGPATH -u "$path"` + new_path=`$WHICH "$new_path" 2> /dev/null` + # bat and cmd files are not always considered executable in cygwin causing which + # to not find them + if test "x$new_path" = x \ + && test "x`$ECHO \"$path\" | $GREP -e \"\\.bat$\" -e \"\\.cmd$\"`" != x \ + && test "x`$LS \"$path\" 2>/dev/null`" != x; then + new_path=`$CYGPATH -u "$path"` + fi + if test "x$new_path" = x; then + # It's still not found. Now this is an unrecoverable error. + { $as_echo "$as_me:${as_lineno-$LINENO}: The path of CXX, which resolves as \"$complete\", is not found." >&5 +$as_echo "$as_me: The path of CXX, which resolves as \"$complete\", is not found." >&6;} + has_space=`$ECHO "$complete" | $GREP " "` + if test "x$has_space" != x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: You might be mixing spaces in the path and extra arguments, which is not allowed." >&5 +$as_echo "$as_me: You might be mixing spaces in the path and extra arguments, which is not allowed." >&6;} + fi + as_fn_error $? "Cannot locate the the path of CXX" "$LINENO" 5 + fi + fi + + # Cygwin tries to hide some aspects of the Windows file system, such that binaries are + # named .exe but called without that suffix. Therefore, "foo" and "foo.exe" are considered + # the same file, most of the time (as in "test -f"). But not when running cygpath -s, then + # "foo.exe" is OK but "foo" is an error. + # + # This test is therefore slightly more accurate than "test -f" to check for file precense. + # It is also a way to make sure we got the proper file name for the real test later on. + test_shortpath=`$CYGPATH -s -m "$new_path" 2> /dev/null` + if test "x$test_shortpath" = x; then + # Short path failed, file does not exist as specified. + # Try adding .exe or .cmd + if test -f "${new_path}.exe"; then + input_to_shortpath="${new_path}.exe" + elif test -f "${new_path}.cmd"; then + input_to_shortpath="${new_path}.cmd" + else + { $as_echo "$as_me:${as_lineno-$LINENO}: The path of CXX, which resolves as \"$new_path\", is invalid." >&5 +$as_echo "$as_me: The path of CXX, which resolves as \"$new_path\", is invalid." >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: Neither \"$new_path\" nor \"$new_path.exe/cmd\" can be found" >&5 +$as_echo "$as_me: Neither \"$new_path\" nor \"$new_path.exe/cmd\" can be found" >&6;} + as_fn_error $? "Cannot locate the the path of CXX" "$LINENO" 5 + fi + else + input_to_shortpath="$new_path" + fi + + # Call helper function which possibly converts this using DOS-style short mode. + # If so, the updated path is stored in $new_path. + new_path="$input_to_shortpath" + + input_path="$input_to_shortpath" + # Check if we need to convert this using DOS-style short mode. If the path + # contains just simple characters, use it. Otherwise (spaces, weird characters), + # take no chances and rewrite it. + # Note: m4 eats our [], so we need to use [ and ] instead. + has_forbidden_chars=`$ECHO "$input_path" | $GREP [^-._/a-zA-Z0-9]` + if test "x$has_forbidden_chars" != x; then + # Now convert it to mixed DOS-style, short mode (no spaces, and / instead of \) + shortmode_path=`$CYGPATH -s -m -a "$input_path"` + path_after_shortmode=`$CYGPATH -u "$shortmode_path"` + if test "x$path_after_shortmode" != "x$input_to_shortpath"; then + # Going to short mode and back again did indeed matter. Since short mode is + # case insensitive, let's make it lowercase to improve readability. + shortmode_path=`$ECHO "$shortmode_path" | $TR 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` + # Now convert it back to Unix-stile (cygpath) + input_path=`$CYGPATH -u "$shortmode_path"` + new_path="$input_path" + fi + fi + + test_cygdrive_prefix=`$ECHO $input_path | $GREP ^/cygdrive/` + if test "x$test_cygdrive_prefix" = x; then + # As a simple fix, exclude /usr/bin since it's not a real path. + if test "x`$ECHO $input_to_shortpath | $GREP ^/usr/bin/`" = x; then + # The path is in a Cygwin special directory (e.g. /home). We need this converted to + # a path prefixed by /cygdrive for fixpath to work. + new_path="$CYGWIN_ROOT_PATH$input_path" + fi + fi + + # remove trailing .exe if any + new_path="${new_path/%.exe/}" + + elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then + + # First separate the path from the arguments. This will split at the first + # space. + complete="$CXX" + path="${complete%% *}" + tmp="$complete EOL" + arguments="${tmp#* }" + + # Input might be given as Windows format, start by converting to + # unix format. + new_path="$path" + + windows_path="$new_path" + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then + unix_path=`$CYGPATH -u "$windows_path"` + new_path="$unix_path" + elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then + unix_path=`$ECHO "$windows_path" | $SED -e 's,^\\(.\\):,/\\1,g' -e 's,\\\\,/,g'` + new_path="$unix_path" + fi + + + # Now try to locate executable using which + new_path=`$WHICH "$new_path" 2> /dev/null` + + if test "x$new_path" = x; then + # Oops. Which didn't find the executable. + # The splitting of arguments from the executable at a space might have been incorrect, + # since paths with space are more likely in Windows. Give it another try with the whole + # argument. + path="$complete" + arguments="EOL" + new_path="$path" + + windows_path="$new_path" + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then + unix_path=`$CYGPATH -u "$windows_path"` + new_path="$unix_path" + elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then + unix_path=`$ECHO "$windows_path" | $SED -e 's,^\\(.\\):,/\\1,g' -e 's,\\\\,/,g'` + new_path="$unix_path" + fi + + + new_path=`$WHICH "$new_path" 2> /dev/null` + + if test "x$new_path" = x; then + # It's still not found. Now this is an unrecoverable error. + { $as_echo "$as_me:${as_lineno-$LINENO}: The path of CXX, which resolves as \"$complete\", is not found." >&5 +$as_echo "$as_me: The path of CXX, which resolves as \"$complete\", is not found." >&6;} + has_space=`$ECHO "$complete" | $GREP " "` + if test "x$has_space" != x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: You might be mixing spaces in the path and extra arguments, which is not allowed." >&5 +$as_echo "$as_me: You might be mixing spaces in the path and extra arguments, which is not allowed." >&6;} + fi + as_fn_error $? "Cannot locate the the path of CXX" "$LINENO" 5 + fi + fi + + # Now new_path has a complete unix path to the binary + if test "x`$ECHO $new_path | $GREP ^/bin/`" != x; then + # Keep paths in /bin as-is, but remove trailing .exe if any + new_path="${new_path/%.exe/}" + # Do not save /bin paths to all_fixpath_prefixes! + else + # Not in mixed or Windows style, start by that. + new_path=`cmd //c echo $new_path` + + input_path="$new_path" + # Check if we need to convert this using DOS-style short mode. If the path + # contains just simple characters, use it. Otherwise (spaces, weird characters), + # take no chances and rewrite it. + # Note: m4 eats our [], so we need to use [ and ] instead. + has_forbidden_chars=`$ECHO "$input_path" | $GREP [^-_/:a-zA-Z0-9]` + if test "x$has_forbidden_chars" != x; then + # Now convert it to mixed DOS-style, short mode (no spaces, and / instead of \) + new_path=`cmd /c "for %A in (\"$input_path\") do @echo %~sA"|$TR \\\\\\\\ / | $TR 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` + fi + + # Output is in $new_path + + windows_path="$new_path" + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then + unix_path=`$CYGPATH -u "$windows_path"` + new_path="$unix_path" + elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then + unix_path=`$ECHO "$windows_path" | $SED -e 's,^\\(.\\):,/\\1,g' -e 's,\\\\,/,g'` + new_path="$unix_path" + fi + + # remove trailing .exe if any + new_path="${new_path/%.exe/}" + + # Save the first 10 bytes of this path to the storage, so fixpath can work. + all_fixpath_prefixes=("${all_fixpath_prefixes[@]}" "${new_path:0:10}") + fi + + else + # We're on a posix platform. Hooray! :) + # First separate the path from the arguments. This will split at the first + # space. + complete="$CXX" + path="${complete%% *}" + tmp="$complete EOL" + arguments="${tmp#* }" + + new_path=`$WHICH $path 2> /dev/null` + if test "x$new_path" = x; then + is_absolute_path=`$ECHO "$path" | $GREP ^/` + if test "x$is_absolute_path" != x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: Resolving CXX (as $path) with 'which' failed, using $path directly." >&5 +$as_echo "$as_me: Resolving CXX (as $path) with 'which' failed, using $path directly." >&6;} + new_path="$path" + else + { $as_echo "$as_me:${as_lineno-$LINENO}: The path of CXX, which resolves as \"$complete\", is not found." >&5 +$as_echo "$as_me: The path of CXX, which resolves as \"$complete\", is not found." >&6;} + has_space=`$ECHO "$complete" | $GREP " "` + if test "x$has_space" != x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: This might be caused by spaces in the path, which is not allowed." >&5 +$as_echo "$as_me: This might be caused by spaces in the path, which is not allowed." >&6;} fi - # Convert to C:/ mixed style path without spaces. - tmp=`$CYGPATH -s -m "$tmp"` + as_fn_error $? "Cannot locate the the path of CXX" "$LINENO" 5 + fi fi - car="$tmp" + fi + # Now join together the path and the arguments once again + if test "x$arguments" != xEOL; then + new_complete="$new_path ${arguments% *}" + else + new_complete="$new_path" + fi + + if test "x$complete" != "x$new_complete"; then + CXX="$new_complete" + { $as_echo "$as_me:${as_lineno-$LINENO}: Rewriting CXX to \"$new_complete\"" >&5 +$as_echo "$as_me: Rewriting CXX to \"$new_complete\"" >&6;} + fi + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking resolved symbolic links for CXX" >&5 +$as_echo_n "checking resolved symbolic links for CXX... " >&6; } + TEST_COMPILER="$CXX" + + if test "x$OPENJDK_BUILD_OS" != xwindows; then + # Follow a chain of symbolic links. Use readlink + # where it exists, else fall back to horribly + # complicated shell code. + if test "x$READLINK_TESTED" != yes; then + # On MacOSX there is a readlink tool with a different + # purpose than the GNU readlink tool. Check the found readlink. + ISGNU=`$READLINK --help 2>&1 | $GREP GNU` + if test "x$ISGNU" = x; then + # A readlink that we do not know how to use. + # Are there other non-GNU readlinks out there? + READLINK_TESTED=yes + READLINK= + fi + fi + + if test "x$READLINK" != x; then + TEST_COMPILER=`$READLINK -f $TEST_COMPILER` + else + STARTDIR=$PWD + COUNTER=0 + sym_link_dir=`$DIRNAME $TEST_COMPILER` + sym_link_file=`$BASENAME $TEST_COMPILER` + while test $COUNTER -lt 20; do + ISLINK=`$LS -l $sym_link_dir/$sym_link_file | $GREP '\->' | $SED -e 's/.*-> \(.*\)/\1/'` + if test "x$ISLINK" == x; then + # This is not a symbolic link! We are done! + break + fi + # The link might be relative! We have to use cd to travel safely. + cd $sym_link_dir + # ... and we must get the to the absolute path, not one using symbolic links. + cd `pwd -P` + cd `$DIRNAME $ISLINK` + sym_link_dir=`$THEPWDCMD` + sym_link_file=`$BASENAME $ISLINK` + let COUNTER=COUNTER+1 + done + cd $STARTDIR + TEST_COMPILER=$sym_link_dir/$sym_link_file + fi + fi + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $TEST_COMPILER" >&5 +$as_echo "$TEST_COMPILER" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if CXX is disguised ccache" >&5 +$as_echo_n "checking if CXX is disguised ccache... " >&6; } + + COMPILER_BASENAME=`$BASENAME "$TEST_COMPILER"` + if test "x$COMPILER_BASENAME" = "xccache"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes, trying to find proper $COMPILER_NAME compiler" >&5 +$as_echo "yes, trying to find proper $COMPILER_NAME compiler" >&6; } + # We /usr/lib/ccache in the path, so cc is a symlink to /usr/bin/ccache. + # We want to control ccache invocation ourselves, so ignore this cc and try + # searching again. + + # Remove the path to the fake ccache cc from the PATH + RETRY_COMPILER_SAVED_PATH="$PATH" + COMPILER_DIRNAME=`$DIRNAME $CXX` + PATH="`$ECHO $PATH | $SED -e "s,$COMPILER_DIRNAME,,g" -e "s,::,:,g" -e "s,^:,,g"`" + + # Try again looking for our compiler + if test -n "$ac_tool_prefix"; then + for ac_prog in $COMPILER_CHECK_LIST + do + # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. +set dummy $ac_tool_prefix$ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_PROPER_COMPILER_CXX+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$PROPER_COMPILER_CXX"; then + ac_cv_prog_PROPER_COMPILER_CXX="$PROPER_COMPILER_CXX" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_PROPER_COMPILER_CXX="$ac_tool_prefix$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +PROPER_COMPILER_CXX=$ac_cv_prog_PROPER_COMPILER_CXX +if test -n "$PROPER_COMPILER_CXX"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PROPER_COMPILER_CXX" >&5 +$as_echo "$PROPER_COMPILER_CXX" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$PROPER_COMPILER_CXX" && break + done +fi +if test -z "$PROPER_COMPILER_CXX"; then + ac_ct_PROPER_COMPILER_CXX=$PROPER_COMPILER_CXX + for ac_prog in $COMPILER_CHECK_LIST +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_ac_ct_PROPER_COMPILER_CXX+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_PROPER_COMPILER_CXX"; then + ac_cv_prog_ac_ct_PROPER_COMPILER_CXX="$ac_ct_PROPER_COMPILER_CXX" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_PROPER_COMPILER_CXX="$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_PROPER_COMPILER_CXX=$ac_cv_prog_ac_ct_PROPER_COMPILER_CXX +if test -n "$ac_ct_PROPER_COMPILER_CXX"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_PROPER_COMPILER_CXX" >&5 +$as_echo "$ac_ct_PROPER_COMPILER_CXX" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$ac_ct_PROPER_COMPILER_CXX" && break +done + + if test "x$ac_ct_PROPER_COMPILER_CXX" = x; then + PROPER_COMPILER_CXX="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + PROPER_COMPILER_CXX=$ac_ct_PROPER_COMPILER_CXX + fi +fi + + + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then + + # First separate the path from the arguments. This will split at the first + # space. + complete="$PROPER_COMPILER_CXX" + path="${complete%% *}" + tmp="$complete EOL" + arguments="${tmp#* }" + + # Input might be given as Windows format, start by converting to + # unix format. + new_path=`$CYGPATH -u "$path"` + + # Now try to locate executable using which + new_path=`$WHICH "$new_path" 2> /dev/null` + # bat and cmd files are not always considered executable in cygwin causing which + # to not find them + if test "x$new_path" = x \ + && test "x`$ECHO \"$path\" | $GREP -e \"\\.bat$\" -e \"\\.cmd$\"`" != x \ + && test "x`$LS \"$path\" 2>/dev/null`" != x; then + new_path=`$CYGPATH -u "$path"` + fi + if test "x$new_path" = x; then + # Oops. Which didn't find the executable. + # The splitting of arguments from the executable at a space might have been incorrect, + # since paths with space are more likely in Windows. Give it another try with the whole + # argument. + path="$complete" + arguments="EOL" + new_path=`$CYGPATH -u "$path"` + new_path=`$WHICH "$new_path" 2> /dev/null` + # bat and cmd files are not always considered executable in cygwin causing which + # to not find them + if test "x$new_path" = x \ + && test "x`$ECHO \"$path\" | $GREP -e \"\\.bat$\" -e \"\\.cmd$\"`" != x \ + && test "x`$LS \"$path\" 2>/dev/null`" != x; then + new_path=`$CYGPATH -u "$path"` + fi + if test "x$new_path" = x; then + # It's still not found. Now this is an unrecoverable error. + { $as_echo "$as_me:${as_lineno-$LINENO}: The path of PROPER_COMPILER_CXX, which resolves as \"$complete\", is not found." >&5 +$as_echo "$as_me: The path of PROPER_COMPILER_CXX, which resolves as \"$complete\", is not found." >&6;} + has_space=`$ECHO "$complete" | $GREP " "` + if test "x$has_space" != x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: You might be mixing spaces in the path and extra arguments, which is not allowed." >&5 +$as_echo "$as_me: You might be mixing spaces in the path and extra arguments, which is not allowed." >&6;} + fi + as_fn_error $? "Cannot locate the the path of PROPER_COMPILER_CXX" "$LINENO" 5 + fi + fi + + # Cygwin tries to hide some aspects of the Windows file system, such that binaries are + # named .exe but called without that suffix. Therefore, "foo" and "foo.exe" are considered + # the same file, most of the time (as in "test -f"). But not when running cygpath -s, then + # "foo.exe" is OK but "foo" is an error. + # + # This test is therefore slightly more accurate than "test -f" to check for file precense. + # It is also a way to make sure we got the proper file name for the real test later on. + test_shortpath=`$CYGPATH -s -m "$new_path" 2> /dev/null` + if test "x$test_shortpath" = x; then + # Short path failed, file does not exist as specified. + # Try adding .exe or .cmd + if test -f "${new_path}.exe"; then + input_to_shortpath="${new_path}.exe" + elif test -f "${new_path}.cmd"; then + input_to_shortpath="${new_path}.cmd" else - # "which" is not portable, but is used here - # because we know that the command exists! - car=`which $car` + { $as_echo "$as_me:${as_lineno-$LINENO}: The path of PROPER_COMPILER_CXX, which resolves as \"$new_path\", is invalid." >&5 +$as_echo "$as_me: The path of PROPER_COMPILER_CXX, which resolves as \"$new_path\", is invalid." >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: Neither \"$new_path\" nor \"$new_path.exe/cmd\" can be found" >&5 +$as_echo "$as_me: Neither \"$new_path\" nor \"$new_path.exe/cmd\" can be found" >&6;} + as_fn_error $? "Cannot locate the the path of PROPER_COMPILER_CXX" "$LINENO" 5 fi - if test "x$cdr" != xEOL; then - CC="$car ${cdr% *}" + else + input_to_shortpath="$new_path" + fi + + # Call helper function which possibly converts this using DOS-style short mode. + # If so, the updated path is stored in $new_path. + new_path="$input_to_shortpath" + + input_path="$input_to_shortpath" + # Check if we need to convert this using DOS-style short mode. If the path + # contains just simple characters, use it. Otherwise (spaces, weird characters), + # take no chances and rewrite it. + # Note: m4 eats our [], so we need to use [ and ] instead. + has_forbidden_chars=`$ECHO "$input_path" | $GREP [^-._/a-zA-Z0-9]` + if test "x$has_forbidden_chars" != x; then + # Now convert it to mixed DOS-style, short mode (no spaces, and / instead of \) + shortmode_path=`$CYGPATH -s -m -a "$input_path"` + path_after_shortmode=`$CYGPATH -u "$shortmode_path"` + if test "x$path_after_shortmode" != "x$input_to_shortpath"; then + # Going to short mode and back again did indeed matter. Since short mode is + # case insensitive, let's make it lowercase to improve readability. + shortmode_path=`$ECHO "$shortmode_path" | $TR 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` + # Now convert it back to Unix-stile (cygpath) + input_path=`$CYGPATH -u "$shortmode_path"` + new_path="$input_path" + fi + fi + + test_cygdrive_prefix=`$ECHO $input_path | $GREP ^/cygdrive/` + if test "x$test_cygdrive_prefix" = x; then + # As a simple fix, exclude /usr/bin since it's not a real path. + if test "x`$ECHO $input_to_shortpath | $GREP ^/usr/bin/`" = x; then + # The path is in a Cygwin special directory (e.g. /home). We need this converted to + # a path prefixed by /cygdrive for fixpath to work. + new_path="$CYGWIN_ROOT_PATH$input_path" + fi + fi + + # remove trailing .exe if any + new_path="${new_path/%.exe/}" + + elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then + + # First separate the path from the arguments. This will split at the first + # space. + complete="$PROPER_COMPILER_CXX" + path="${complete%% *}" + tmp="$complete EOL" + arguments="${tmp#* }" + + # Input might be given as Windows format, start by converting to + # unix format. + new_path="$path" + + windows_path="$new_path" + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then + unix_path=`$CYGPATH -u "$windows_path"` + new_path="$unix_path" + elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then + unix_path=`$ECHO "$windows_path" | $SED -e 's,^\\(.\\):,/\\1,g' -e 's,\\\\,/,g'` + new_path="$unix_path" + fi + + + # Now try to locate executable using which + new_path=`$WHICH "$new_path" 2> /dev/null` + + if test "x$new_path" = x; then + # Oops. Which didn't find the executable. + # The splitting of arguments from the executable at a space might have been incorrect, + # since paths with space are more likely in Windows. Give it another try with the whole + # argument. + path="$complete" + arguments="EOL" + new_path="$path" + + windows_path="$new_path" + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then + unix_path=`$CYGPATH -u "$windows_path"` + new_path="$unix_path" + elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then + unix_path=`$ECHO "$windows_path" | $SED -e 's,^\\(.\\):,/\\1,g' -e 's,\\\\,/,g'` + new_path="$unix_path" + fi + + + new_path=`$WHICH "$new_path" 2> /dev/null` + + if test "x$new_path" = x; then + # It's still not found. Now this is an unrecoverable error. + { $as_echo "$as_me:${as_lineno-$LINENO}: The path of PROPER_COMPILER_CXX, which resolves as \"$complete\", is not found." >&5 +$as_echo "$as_me: The path of PROPER_COMPILER_CXX, which resolves as \"$complete\", is not found." >&6;} + has_space=`$ECHO "$complete" | $GREP " "` + if test "x$has_space" != x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: You might be mixing spaces in the path and extra arguments, which is not allowed." >&5 +$as_echo "$as_me: You might be mixing spaces in the path and extra arguments, which is not allowed." >&6;} + fi + as_fn_error $? "Cannot locate the the path of PROPER_COMPILER_CXX" "$LINENO" 5 + fi + fi + + # Now new_path has a complete unix path to the binary + if test "x`$ECHO $new_path | $GREP ^/bin/`" != x; then + # Keep paths in /bin as-is, but remove trailing .exe if any + new_path="${new_path/%.exe/}" + # Do not save /bin paths to all_fixpath_prefixes! + else + # Not in mixed or Windows style, start by that. + new_path=`cmd //c echo $new_path` + + input_path="$new_path" + # Check if we need to convert this using DOS-style short mode. If the path + # contains just simple characters, use it. Otherwise (spaces, weird characters), + # take no chances and rewrite it. + # Note: m4 eats our [], so we need to use [ and ] instead. + has_forbidden_chars=`$ECHO "$input_path" | $GREP [^-_/:a-zA-Z0-9]` + if test "x$has_forbidden_chars" != x; then + # Now convert it to mixed DOS-style, short mode (no spaces, and / instead of \) + new_path=`cmd /c "for %A in (\"$input_path\") do @echo %~sA"|$TR \\\\\\\\ / | $TR 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` + fi + + # Output is in $new_path + + windows_path="$new_path" + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then + unix_path=`$CYGPATH -u "$windows_path"` + new_path="$unix_path" + elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then + unix_path=`$ECHO "$windows_path" | $SED -e 's,^\\(.\\):,/\\1,g' -e 's,\\\\,/,g'` + new_path="$unix_path" + fi + + # remove trailing .exe if any + new_path="${new_path/%.exe/}" + + # Save the first 10 bytes of this path to the storage, so fixpath can work. + all_fixpath_prefixes=("${all_fixpath_prefixes[@]}" "${new_path:0:10}") + fi + + else + # We're on a posix platform. Hooray! :) + # First separate the path from the arguments. This will split at the first + # space. + complete="$PROPER_COMPILER_CXX" + path="${complete%% *}" + tmp="$complete EOL" + arguments="${tmp#* }" + + new_path=`$WHICH $path 2> /dev/null` + if test "x$new_path" = x; then + is_absolute_path=`$ECHO "$path" | $GREP ^/` + if test "x$is_absolute_path" != x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: Resolving PROPER_COMPILER_CXX (as $path) with 'which' failed, using $path directly." >&5 +$as_echo "$as_me: Resolving PROPER_COMPILER_CXX (as $path) with 'which' failed, using $path directly." >&6;} + new_path="$path" + else + { $as_echo "$as_me:${as_lineno-$LINENO}: The path of PROPER_COMPILER_CXX, which resolves as \"$complete\", is not found." >&5 +$as_echo "$as_me: The path of PROPER_COMPILER_CXX, which resolves as \"$complete\", is not found." >&6;} + has_space=`$ECHO "$complete" | $GREP " "` + if test "x$has_space" != x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: This might be caused by spaces in the path, which is not allowed." >&5 +$as_echo "$as_me: This might be caused by spaces in the path, which is not allowed." >&6;} + fi + as_fn_error $? "Cannot locate the the path of PROPER_COMPILER_CXX" "$LINENO" 5 + fi + fi + fi + + # Now join together the path and the arguments once again + if test "x$arguments" != xEOL; then + new_complete="$new_path ${arguments% *}" + else + new_complete="$new_path" + fi + + if test "x$complete" != "x$new_complete"; then + PROPER_COMPILER_CXX="$new_complete" + { $as_echo "$as_me:${as_lineno-$LINENO}: Rewriting PROPER_COMPILER_CXX to \"$new_complete\"" >&5 +$as_echo "$as_me: Rewriting PROPER_COMPILER_CXX to \"$new_complete\"" >&6;} + fi + + PATH="$RETRY_COMPILER_SAVED_PATH" + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for resolved symbolic links for CXX" >&5 +$as_echo_n "checking for resolved symbolic links for CXX... " >&6; } + + if test "x$OPENJDK_BUILD_OS" != xwindows; then + # Follow a chain of symbolic links. Use readlink + # where it exists, else fall back to horribly + # complicated shell code. + if test "x$READLINK_TESTED" != yes; then + # On MacOSX there is a readlink tool with a different + # purpose than the GNU readlink tool. Check the found readlink. + ISGNU=`$READLINK --help 2>&1 | $GREP GNU` + if test "x$ISGNU" = x; then + # A readlink that we do not know how to use. + # Are there other non-GNU readlinks out there? + READLINK_TESTED=yes + READLINK= + fi + fi + + if test "x$READLINK" != x; then + PROPER_COMPILER_CXX=`$READLINK -f $PROPER_COMPILER_CXX` + else + STARTDIR=$PWD + COUNTER=0 + sym_link_dir=`$DIRNAME $PROPER_COMPILER_CXX` + sym_link_file=`$BASENAME $PROPER_COMPILER_CXX` + while test $COUNTER -lt 20; do + ISLINK=`$LS -l $sym_link_dir/$sym_link_file | $GREP '\->' | $SED -e 's/.*-> \(.*\)/\1/'` + if test "x$ISLINK" == x; then + # This is not a symbolic link! We are done! + break + fi + # The link might be relative! We have to use cd to travel safely. + cd $sym_link_dir + # ... and we must get the to the absolute path, not one using symbolic links. + cd `pwd -P` + cd `$DIRNAME $ISLINK` + sym_link_dir=`$THEPWDCMD` + sym_link_file=`$BASENAME $ISLINK` + let COUNTER=COUNTER+1 + done + cd $STARTDIR + PROPER_COMPILER_CXX=$sym_link_dir/$sym_link_file + fi + fi + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PROPER_COMPILER_CXX" >&5 +$as_echo "$PROPER_COMPILER_CXX" >&6; } + CXX="$PROPER_COMPILER_CXX" + else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no, keeping CXX" >&5 +$as_echo "no, keeping CXX" >&6; } + CXX="$TEST_COMPILER" + fi + + COMPILER=$CXX + COMPILER_NAME=$COMPILER_NAME + + if test "x$OPENJDK_TARGET_OS" = xsolaris; then + # Make sure we use the Sun Studio compiler and not gcc on Solaris, which won't work + COMPILER_VERSION_TEST=`$COMPILER -V 2>&1 | $HEAD -n 1` + $ECHO $COMPILER_VERSION_TEST | $GREP "^.*: Sun $COMPILER_NAME" > /dev/null + if test $? -ne 0; then + GCC_VERSION_TEST=`$COMPILER --version 2>&1 | $HEAD -n 1` + + { $as_echo "$as_me:${as_lineno-$LINENO}: The $COMPILER_NAME compiler (located as $COMPILER) does not seem to be the required Sun Studio compiler." >&5 +$as_echo "$as_me: The $COMPILER_NAME compiler (located as $COMPILER) does not seem to be the required Sun Studio compiler." >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: The result from running with -V was: \"$COMPILER_VERSION_TEST\" and with --version: \"$GCC_VERSION_TEST\"" >&5 +$as_echo "$as_me: The result from running with -V was: \"$COMPILER_VERSION_TEST\" and with --version: \"$GCC_VERSION_TEST\"" >&6;} + as_fn_error $? "Sun Studio compiler is required. Try setting --with-tools-dir." "$LINENO" 5 else - CC="$car" + COMPILER_VERSION=`$ECHO $COMPILER_VERSION_TEST | $SED -n "s/^.*[ ,\t]$COMPILER_NAME[ ,\t]\([1-9]\.[0-9][0-9]*\).*/\1/p"` + COMPILER_VENDOR="Sun Studio" + fi + elif test "x$OPENJDK_TARGET_OS" = xwindows; then + # First line typically looks something like: + # Microsoft (R) 32-bit C/C++ Optimizing Compiler Version 16.00.30319.01 for 80x86 + COMPILER_VERSION_TEST=`$COMPILER 2>&1 | $HEAD -n 1` + COMPILER_VERSION=`$ECHO $COMPILER_VERSION_TEST | $SED -n "s/^.*Version \([1-9][0-9.]*\) .*/\1/p"` + COMPILER_VENDOR="Microsoft CL.EXE" + COMPILER_CPU_TEST=`$ECHO $COMPILER_VERSION_TEST | $SED -n "s/^.* for \(.*\)$/\1/p"` + if test "x$OPENJDK_TARGET_CPU" = "xx86"; then + if test "x$COMPILER_CPU_TEST" != "x80x86"; then + as_fn_error $? "Target CPU mismatch. We are building for $OPENJDK_TARGET_CPU but CL is for \"$COMPILER_CPU_TEST\"; expected \"80x86\"." "$LINENO" 5 + fi + elif test "x$OPENJDK_TARGET_CPU" = "xx86_64"; then + if test "x$COMPILER_CPU_TEST" != "xx64"; then + as_fn_error $? "Target CPU mismatch. We are building for $OPENJDK_TARGET_CPU but CL is for \"$COMPILER_CPU_TEST\"; expected \"x64\"." "$LINENO" 5 + fi + fi + else + COMPILER_VERSION_TEST=`$COMPILER --version 2>&1 | $HEAD -n 1` + # Check that this is likely to be GCC. + $COMPILER --version 2>&1 | $GREP "Free Software Foundation" > /dev/null + if test $? -ne 0; then + { $as_echo "$as_me:${as_lineno-$LINENO}: The $COMPILER_NAME compiler (located as $COMPILER) does not seem to be the required GCC compiler." >&5 +$as_echo "$as_me: The $COMPILER_NAME compiler (located as $COMPILER) does not seem to be the required GCC compiler." >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: The result from running with --version was: \"$COMPILER_VERSION_TEST\"" >&5 +$as_echo "$as_me: The result from running with --version was: \"$COMPILER_VERSION_TEST\"" >&6;} + as_fn_error $? "GCC compiler is required. Try setting --with-tools-dir." "$LINENO" 5 fi + # First line typically looks something like: + # gcc (Ubuntu/Linaro 4.5.2-8ubuntu4) 4.5.2 + COMPILER_VERSION=`$ECHO $COMPILER_VERSION_TEST | $SED -n "s/^.* \([1-9][0-9.]*\)/\1/p"` + COMPILER_VENDOR=`$ECHO $COMPILER_VERSION_TEST | $SED -n "s/^\(.*\) [1-9][0-9.]*/\1/p"` + fi + # This sets CC_VERSION or CXX_VERSION. (This comment is a grep marker) + CXX_VERSION="$COMPILER_VERSION" + # This sets CC_VENDOR or CXX_VENDOR. (This comment is a grep marker) + CXX_VENDOR="$COMPILER_VENDOR" + { $as_echo "$as_me:${as_lineno-$LINENO}: Using $COMPILER_VENDOR $COMPILER_NAME compiler version $COMPILER_VERSION (located at $COMPILER)" >&5 +$as_echo "$as_me: Using $COMPILER_VENDOR $COMPILER_NAME compiler version $COMPILER_VERSION (located at $COMPILER)" >&6;} + + +# Now that we have resolved CXX ourself, let autoconf have it's go at it ac_ext=cpp ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' @@ -11789,7 +20023,7 @@ if test -z "$CXX"; then CXX=$CCC else if test -n "$ac_tool_prefix"; then - for ac_prog in cl CC g++ + for ac_prog in $CXX do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 @@ -11833,7 +20067,7 @@ fi fi if test -z "$CXX"; then ac_ct_CXX=$CXX - for ac_prog in cl CC g++ + for ac_prog in $CXX do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 @@ -12036,85 +20270,10 @@ ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_cxx_compiler_gnu -if test "x$CXX" = xCC && test "x$OPENJDK_BUILD_OS" = xmacosx; then - # The found CC, even though it seems to be a g++ derivate, cannot compile - # c++ code. Override. - CXX="g++" -fi - # Translate "gcc -E" into "`which gcc` -E" ie - # extract the full path to the binary and at the - # same time maintain any arguments passed to it. - # The command MUST exist in the path, or else! - tmp="$CXX" - car="${tmp%% *}" - tmp="$CXX EOL" - cdr="${tmp#* }" - # On windows we want paths without spaces. - if test "x$OPENJDK_BUILD_OS" = "xwindows"; then +### Locate other tools - # Translate long cygdrive or C:\sdfsf path - # into a short mixed mode path that has no - # spaces in it. - tmp="$car" - - if test "x$OPENJDK_BUILD_OS" = "xwindows"; then - tmp=`$CYGPATH -u "$car"` - tmp=`which "$tmp"` - # If file exists with .exe appended, that's the real filename - # and cygpath needs that to convert to short style path. - if test -f "${tmp}.exe"; then - tmp="${tmp}.exe" - elif test -f "${tmp}.cmd"; then - tmp="${tmp}.cmd" - fi - # Convert to C:/ mixed style path without spaces. - tmp=`$CYGPATH -s -m "$tmp"` - fi - car="$tmp" - - else - # "which" is not portable, but is used here - # because we know that the command exists! - car=`which $car` - fi - if test "x$cdr" != xEOL; then - CXX="$car ${cdr% *}" - else - CXX="$car" - fi - - -if test "x$CXX" = x || test "x$CC" = x; then - - # Print a helpful message on how to acquire the necessary build dependency. - # devkit is the help tag: freetyp2, cups, pulse, alsa etc - MISSING_DEPENDENCY=devkit - PKGHANDLER_COMMAND= - - case $PKGHANDLER in - apt-get) - apt_help $MISSING_DEPENDENCY ;; - yum) - yum_help $MISSING_DEPENDENCY ;; - port) - port_help $MISSING_DEPENDENCY ;; - pkgutil) - pkgutil_help $MISSING_DEPENDENCY ;; - pkgadd) - pkgadd_help $MISSING_DEPENDENCY ;; - * ) - break ;; - esac - - if test "x$PKGHANDLER_COMMAND" != x; then - HELP_MSG="You might be able to fix this by running '$PKGHANDLER_COMMAND'." - fi - - as_fn_error $? "Could not find the needed compilers! $HELP_MSG " "$LINENO" 5 -fi - -if test "x$OPENJDK_BUILD_OS" != xwindows; then +if test "x$OPENJDK_TARGET_OS" = xmacosx; then ac_ext=m ac_cpp='$OBJCPP $CPPFLAGS' ac_compile='$OBJC -c $OBJCFLAGS $CPPFLAGS conftest.$ac_ext >&5' @@ -12367,47 +20526,259 @@ ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ex ac_compiler_gnu=$ac_cv_cxx_compiler_gnu - # Translate "gcc -E" into "`which gcc` -E" ie - # extract the full path to the binary and at the - # same time maintain any arguments passed to it. - # The command MUST exist in the path, or else! - tmp="$OBJC" - car="${tmp%% *}" - tmp="$OBJC EOL" - cdr="${tmp#* }" - # On windows we want paths without spaces. - if test "x$OPENJDK_BUILD_OS" = "xwindows"; then + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then - # Translate long cygdrive or C:\sdfsf path - # into a short mixed mode path that has no - # spaces in it. - tmp="$car" + # First separate the path from the arguments. This will split at the first + # space. + complete="$OBJC" + path="${complete%% *}" + tmp="$complete EOL" + arguments="${tmp#* }" - if test "x$OPENJDK_BUILD_OS" = "xwindows"; then - tmp=`$CYGPATH -u "$car"` - tmp=`which "$tmp"` - # If file exists with .exe appended, that's the real filename - # and cygpath needs that to convert to short style path. - if test -f "${tmp}.exe"; then - tmp="${tmp}.exe" - elif test -f "${tmp}.cmd"; then - tmp="${tmp}.cmd" + # Input might be given as Windows format, start by converting to + # unix format. + new_path=`$CYGPATH -u "$path"` + + # Now try to locate executable using which + new_path=`$WHICH "$new_path" 2> /dev/null` + # bat and cmd files are not always considered executable in cygwin causing which + # to not find them + if test "x$new_path" = x \ + && test "x`$ECHO \"$path\" | $GREP -e \"\\.bat$\" -e \"\\.cmd$\"`" != x \ + && test "x`$LS \"$path\" 2>/dev/null`" != x; then + new_path=`$CYGPATH -u "$path"` + fi + if test "x$new_path" = x; then + # Oops. Which didn't find the executable. + # The splitting of arguments from the executable at a space might have been incorrect, + # since paths with space are more likely in Windows. Give it another try with the whole + # argument. + path="$complete" + arguments="EOL" + new_path=`$CYGPATH -u "$path"` + new_path=`$WHICH "$new_path" 2> /dev/null` + # bat and cmd files are not always considered executable in cygwin causing which + # to not find them + if test "x$new_path" = x \ + && test "x`$ECHO \"$path\" | $GREP -e \"\\.bat$\" -e \"\\.cmd$\"`" != x \ + && test "x`$LS \"$path\" 2>/dev/null`" != x; then + new_path=`$CYGPATH -u "$path"` + fi + if test "x$new_path" = x; then + # It's still not found. Now this is an unrecoverable error. + { $as_echo "$as_me:${as_lineno-$LINENO}: The path of OBJC, which resolves as \"$complete\", is not found." >&5 +$as_echo "$as_me: The path of OBJC, which resolves as \"$complete\", is not found." >&6;} + has_space=`$ECHO "$complete" | $GREP " "` + if test "x$has_space" != x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: You might be mixing spaces in the path and extra arguments, which is not allowed." >&5 +$as_echo "$as_me: You might be mixing spaces in the path and extra arguments, which is not allowed." >&6;} + fi + as_fn_error $? "Cannot locate the the path of OBJC" "$LINENO" 5 + fi + fi + + # Cygwin tries to hide some aspects of the Windows file system, such that binaries are + # named .exe but called without that suffix. Therefore, "foo" and "foo.exe" are considered + # the same file, most of the time (as in "test -f"). But not when running cygpath -s, then + # "foo.exe" is OK but "foo" is an error. + # + # This test is therefore slightly more accurate than "test -f" to check for file precense. + # It is also a way to make sure we got the proper file name for the real test later on. + test_shortpath=`$CYGPATH -s -m "$new_path" 2> /dev/null` + if test "x$test_shortpath" = x; then + # Short path failed, file does not exist as specified. + # Try adding .exe or .cmd + if test -f "${new_path}.exe"; then + input_to_shortpath="${new_path}.exe" + elif test -f "${new_path}.cmd"; then + input_to_shortpath="${new_path}.cmd" + else + { $as_echo "$as_me:${as_lineno-$LINENO}: The path of OBJC, which resolves as \"$new_path\", is invalid." >&5 +$as_echo "$as_me: The path of OBJC, which resolves as \"$new_path\", is invalid." >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: Neither \"$new_path\" nor \"$new_path.exe/cmd\" can be found" >&5 +$as_echo "$as_me: Neither \"$new_path\" nor \"$new_path.exe/cmd\" can be found" >&6;} + as_fn_error $? "Cannot locate the the path of OBJC" "$LINENO" 5 + fi + else + input_to_shortpath="$new_path" + fi + + # Call helper function which possibly converts this using DOS-style short mode. + # If so, the updated path is stored in $new_path. + new_path="$input_to_shortpath" + + input_path="$input_to_shortpath" + # Check if we need to convert this using DOS-style short mode. If the path + # contains just simple characters, use it. Otherwise (spaces, weird characters), + # take no chances and rewrite it. + # Note: m4 eats our [], so we need to use [ and ] instead. + has_forbidden_chars=`$ECHO "$input_path" | $GREP [^-._/a-zA-Z0-9]` + if test "x$has_forbidden_chars" != x; then + # Now convert it to mixed DOS-style, short mode (no spaces, and / instead of \) + shortmode_path=`$CYGPATH -s -m -a "$input_path"` + path_after_shortmode=`$CYGPATH -u "$shortmode_path"` + if test "x$path_after_shortmode" != "x$input_to_shortpath"; then + # Going to short mode and back again did indeed matter. Since short mode is + # case insensitive, let's make it lowercase to improve readability. + shortmode_path=`$ECHO "$shortmode_path" | $TR 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` + # Now convert it back to Unix-stile (cygpath) + input_path=`$CYGPATH -u "$shortmode_path"` + new_path="$input_path" + fi + fi + + test_cygdrive_prefix=`$ECHO $input_path | $GREP ^/cygdrive/` + if test "x$test_cygdrive_prefix" = x; then + # As a simple fix, exclude /usr/bin since it's not a real path. + if test "x`$ECHO $input_to_shortpath | $GREP ^/usr/bin/`" = x; then + # The path is in a Cygwin special directory (e.g. /home). We need this converted to + # a path prefixed by /cygdrive for fixpath to work. + new_path="$CYGWIN_ROOT_PATH$input_path" + fi + fi + + # remove trailing .exe if any + new_path="${new_path/%.exe/}" + + elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then + + # First separate the path from the arguments. This will split at the first + # space. + complete="$OBJC" + path="${complete%% *}" + tmp="$complete EOL" + arguments="${tmp#* }" + + # Input might be given as Windows format, start by converting to + # unix format. + new_path="$path" + + windows_path="$new_path" + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then + unix_path=`$CYGPATH -u "$windows_path"` + new_path="$unix_path" + elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then + unix_path=`$ECHO "$windows_path" | $SED -e 's,^\\(.\\):,/\\1,g' -e 's,\\\\,/,g'` + new_path="$unix_path" + fi + + + # Now try to locate executable using which + new_path=`$WHICH "$new_path" 2> /dev/null` + + if test "x$new_path" = x; then + # Oops. Which didn't find the executable. + # The splitting of arguments from the executable at a space might have been incorrect, + # since paths with space are more likely in Windows. Give it another try with the whole + # argument. + path="$complete" + arguments="EOL" + new_path="$path" + + windows_path="$new_path" + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then + unix_path=`$CYGPATH -u "$windows_path"` + new_path="$unix_path" + elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then + unix_path=`$ECHO "$windows_path" | $SED -e 's,^\\(.\\):,/\\1,g' -e 's,\\\\,/,g'` + new_path="$unix_path" + fi + + + new_path=`$WHICH "$new_path" 2> /dev/null` + + if test "x$new_path" = x; then + # It's still not found. Now this is an unrecoverable error. + { $as_echo "$as_me:${as_lineno-$LINENO}: The path of OBJC, which resolves as \"$complete\", is not found." >&5 +$as_echo "$as_me: The path of OBJC, which resolves as \"$complete\", is not found." >&6;} + has_space=`$ECHO "$complete" | $GREP " "` + if test "x$has_space" != x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: You might be mixing spaces in the path and extra arguments, which is not allowed." >&5 +$as_echo "$as_me: You might be mixing spaces in the path and extra arguments, which is not allowed." >&6;} + fi + as_fn_error $? "Cannot locate the the path of OBJC" "$LINENO" 5 + fi + fi + + # Now new_path has a complete unix path to the binary + if test "x`$ECHO $new_path | $GREP ^/bin/`" != x; then + # Keep paths in /bin as-is, but remove trailing .exe if any + new_path="${new_path/%.exe/}" + # Do not save /bin paths to all_fixpath_prefixes! + else + # Not in mixed or Windows style, start by that. + new_path=`cmd //c echo $new_path` + + input_path="$new_path" + # Check if we need to convert this using DOS-style short mode. If the path + # contains just simple characters, use it. Otherwise (spaces, weird characters), + # take no chances and rewrite it. + # Note: m4 eats our [], so we need to use [ and ] instead. + has_forbidden_chars=`$ECHO "$input_path" | $GREP [^-_/:a-zA-Z0-9]` + if test "x$has_forbidden_chars" != x; then + # Now convert it to mixed DOS-style, short mode (no spaces, and / instead of \) + new_path=`cmd /c "for %A in (\"$input_path\") do @echo %~sA"|$TR \\\\\\\\ / | $TR 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` + fi + + # Output is in $new_path + + windows_path="$new_path" + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then + unix_path=`$CYGPATH -u "$windows_path"` + new_path="$unix_path" + elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then + unix_path=`$ECHO "$windows_path" | $SED -e 's,^\\(.\\):,/\\1,g' -e 's,\\\\,/,g'` + new_path="$unix_path" + fi + + # remove trailing .exe if any + new_path="${new_path/%.exe/}" + + # Save the first 10 bytes of this path to the storage, so fixpath can work. + all_fixpath_prefixes=("${all_fixpath_prefixes[@]}" "${new_path:0:10}") + fi + + else + # We're on a posix platform. Hooray! :) + # First separate the path from the arguments. This will split at the first + # space. + complete="$OBJC" + path="${complete%% *}" + tmp="$complete EOL" + arguments="${tmp#* }" + + new_path=`$WHICH $path 2> /dev/null` + if test "x$new_path" = x; then + is_absolute_path=`$ECHO "$path" | $GREP ^/` + if test "x$is_absolute_path" != x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: Resolving OBJC (as $path) with 'which' failed, using $path directly." >&5 +$as_echo "$as_me: Resolving OBJC (as $path) with 'which' failed, using $path directly." >&6;} + new_path="$path" + else + { $as_echo "$as_me:${as_lineno-$LINENO}: The path of OBJC, which resolves as \"$complete\", is not found." >&5 +$as_echo "$as_me: The path of OBJC, which resolves as \"$complete\", is not found." >&6;} + has_space=`$ECHO "$complete" | $GREP " "` + if test "x$has_space" != x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: This might be caused by spaces in the path, which is not allowed." >&5 +$as_echo "$as_me: This might be caused by spaces in the path, which is not allowed." >&6;} fi - # Convert to C:/ mixed style path without spaces. - tmp=`$CYGPATH -s -m "$tmp"` + as_fn_error $? "Cannot locate the the path of OBJC" "$LINENO" 5 + fi fi - car="$tmp" + fi - else - # "which" is not portable, but is used here - # because we know that the command exists! - car=`which $car` - fi - if test "x$cdr" != xEOL; then - OBJC="$car ${cdr% *}" - else - OBJC="$car" - fi + # Now join together the path and the arguments once again + if test "x$arguments" != xEOL; then + new_complete="$new_path ${arguments% *}" + else + new_complete="$new_path" + fi + + if test "x$complete" != "x$new_complete"; then + OBJC="$new_complete" + { $as_echo "$as_me:${as_lineno-$LINENO}: Rewriting OBJC to \"$new_complete\"" >&5 +$as_echo "$as_me: Rewriting OBJC to \"$new_complete\"" >&6;} + fi else OBJC= @@ -12431,7 +20802,7 @@ LDEXECXX="$CXX" # Linking C++ executables. -if test "x$OPENJDK_BUILD_OS" != xwindows; then +if test "x$OPENJDK_TARGET_OS" != xwindows; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args. set dummy ${ac_tool_prefix}ar; ac_word=$2 @@ -12525,59 +20896,277 @@ else fi - # Translate "gcc -E" into "`which gcc` -E" ie - # extract the full path to the binary and at the - # same time maintain any arguments passed to it. - # The command MUST exist in the path, or else! - tmp="$AR" - car="${tmp%% *}" - tmp="$AR EOL" - cdr="${tmp#* }" - # On windows we want paths without spaces. - if test "x$OPENJDK_BUILD_OS" = "xwindows"; then + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then - # Translate long cygdrive or C:\sdfsf path - # into a short mixed mode path that has no - # spaces in it. - tmp="$car" + # First separate the path from the arguments. This will split at the first + # space. + complete="$AR" + path="${complete%% *}" + tmp="$complete EOL" + arguments="${tmp#* }" - if test "x$OPENJDK_BUILD_OS" = "xwindows"; then - tmp=`$CYGPATH -u "$car"` - tmp=`which "$tmp"` - # If file exists with .exe appended, that's the real filename - # and cygpath needs that to convert to short style path. - if test -f "${tmp}.exe"; then - tmp="${tmp}.exe" - elif test -f "${tmp}.cmd"; then - tmp="${tmp}.cmd" + # Input might be given as Windows format, start by converting to + # unix format. + new_path=`$CYGPATH -u "$path"` + + # Now try to locate executable using which + new_path=`$WHICH "$new_path" 2> /dev/null` + # bat and cmd files are not always considered executable in cygwin causing which + # to not find them + if test "x$new_path" = x \ + && test "x`$ECHO \"$path\" | $GREP -e \"\\.bat$\" -e \"\\.cmd$\"`" != x \ + && test "x`$LS \"$path\" 2>/dev/null`" != x; then + new_path=`$CYGPATH -u "$path"` + fi + if test "x$new_path" = x; then + # Oops. Which didn't find the executable. + # The splitting of arguments from the executable at a space might have been incorrect, + # since paths with space are more likely in Windows. Give it another try with the whole + # argument. + path="$complete" + arguments="EOL" + new_path=`$CYGPATH -u "$path"` + new_path=`$WHICH "$new_path" 2> /dev/null` + # bat and cmd files are not always considered executable in cygwin causing which + # to not find them + if test "x$new_path" = x \ + && test "x`$ECHO \"$path\" | $GREP -e \"\\.bat$\" -e \"\\.cmd$\"`" != x \ + && test "x`$LS \"$path\" 2>/dev/null`" != x; then + new_path=`$CYGPATH -u "$path"` + fi + if test "x$new_path" = x; then + # It's still not found. Now this is an unrecoverable error. + { $as_echo "$as_me:${as_lineno-$LINENO}: The path of AR, which resolves as \"$complete\", is not found." >&5 +$as_echo "$as_me: The path of AR, which resolves as \"$complete\", is not found." >&6;} + has_space=`$ECHO "$complete" | $GREP " "` + if test "x$has_space" != x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: You might be mixing spaces in the path and extra arguments, which is not allowed." >&5 +$as_echo "$as_me: You might be mixing spaces in the path and extra arguments, which is not allowed." >&6;} + fi + as_fn_error $? "Cannot locate the the path of AR" "$LINENO" 5 + fi + fi + + # Cygwin tries to hide some aspects of the Windows file system, such that binaries are + # named .exe but called without that suffix. Therefore, "foo" and "foo.exe" are considered + # the same file, most of the time (as in "test -f"). But not when running cygpath -s, then + # "foo.exe" is OK but "foo" is an error. + # + # This test is therefore slightly more accurate than "test -f" to check for file precense. + # It is also a way to make sure we got the proper file name for the real test later on. + test_shortpath=`$CYGPATH -s -m "$new_path" 2> /dev/null` + if test "x$test_shortpath" = x; then + # Short path failed, file does not exist as specified. + # Try adding .exe or .cmd + if test -f "${new_path}.exe"; then + input_to_shortpath="${new_path}.exe" + elif test -f "${new_path}.cmd"; then + input_to_shortpath="${new_path}.cmd" + else + { $as_echo "$as_me:${as_lineno-$LINENO}: The path of AR, which resolves as \"$new_path\", is invalid." >&5 +$as_echo "$as_me: The path of AR, which resolves as \"$new_path\", is invalid." >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: Neither \"$new_path\" nor \"$new_path.exe/cmd\" can be found" >&5 +$as_echo "$as_me: Neither \"$new_path\" nor \"$new_path.exe/cmd\" can be found" >&6;} + as_fn_error $? "Cannot locate the the path of AR" "$LINENO" 5 + fi + else + input_to_shortpath="$new_path" + fi + + # Call helper function which possibly converts this using DOS-style short mode. + # If so, the updated path is stored in $new_path. + new_path="$input_to_shortpath" + + input_path="$input_to_shortpath" + # Check if we need to convert this using DOS-style short mode. If the path + # contains just simple characters, use it. Otherwise (spaces, weird characters), + # take no chances and rewrite it. + # Note: m4 eats our [], so we need to use [ and ] instead. + has_forbidden_chars=`$ECHO "$input_path" | $GREP [^-._/a-zA-Z0-9]` + if test "x$has_forbidden_chars" != x; then + # Now convert it to mixed DOS-style, short mode (no spaces, and / instead of \) + shortmode_path=`$CYGPATH -s -m -a "$input_path"` + path_after_shortmode=`$CYGPATH -u "$shortmode_path"` + if test "x$path_after_shortmode" != "x$input_to_shortpath"; then + # Going to short mode and back again did indeed matter. Since short mode is + # case insensitive, let's make it lowercase to improve readability. + shortmode_path=`$ECHO "$shortmode_path" | $TR 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` + # Now convert it back to Unix-stile (cygpath) + input_path=`$CYGPATH -u "$shortmode_path"` + new_path="$input_path" + fi + fi + + test_cygdrive_prefix=`$ECHO $input_path | $GREP ^/cygdrive/` + if test "x$test_cygdrive_prefix" = x; then + # As a simple fix, exclude /usr/bin since it's not a real path. + if test "x`$ECHO $input_to_shortpath | $GREP ^/usr/bin/`" = x; then + # The path is in a Cygwin special directory (e.g. /home). We need this converted to + # a path prefixed by /cygdrive for fixpath to work. + new_path="$CYGWIN_ROOT_PATH$input_path" + fi + fi + + # remove trailing .exe if any + new_path="${new_path/%.exe/}" + + elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then + + # First separate the path from the arguments. This will split at the first + # space. + complete="$AR" + path="${complete%% *}" + tmp="$complete EOL" + arguments="${tmp#* }" + + # Input might be given as Windows format, start by converting to + # unix format. + new_path="$path" + + windows_path="$new_path" + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then + unix_path=`$CYGPATH -u "$windows_path"` + new_path="$unix_path" + elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then + unix_path=`$ECHO "$windows_path" | $SED -e 's,^\\(.\\):,/\\1,g' -e 's,\\\\,/,g'` + new_path="$unix_path" + fi + + + # Now try to locate executable using which + new_path=`$WHICH "$new_path" 2> /dev/null` + + if test "x$new_path" = x; then + # Oops. Which didn't find the executable. + # The splitting of arguments from the executable at a space might have been incorrect, + # since paths with space are more likely in Windows. Give it another try with the whole + # argument. + path="$complete" + arguments="EOL" + new_path="$path" + + windows_path="$new_path" + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then + unix_path=`$CYGPATH -u "$windows_path"` + new_path="$unix_path" + elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then + unix_path=`$ECHO "$windows_path" | $SED -e 's,^\\(.\\):,/\\1,g' -e 's,\\\\,/,g'` + new_path="$unix_path" + fi + + + new_path=`$WHICH "$new_path" 2> /dev/null` + + if test "x$new_path" = x; then + # It's still not found. Now this is an unrecoverable error. + { $as_echo "$as_me:${as_lineno-$LINENO}: The path of AR, which resolves as \"$complete\", is not found." >&5 +$as_echo "$as_me: The path of AR, which resolves as \"$complete\", is not found." >&6;} + has_space=`$ECHO "$complete" | $GREP " "` + if test "x$has_space" != x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: You might be mixing spaces in the path and extra arguments, which is not allowed." >&5 +$as_echo "$as_me: You might be mixing spaces in the path and extra arguments, which is not allowed." >&6;} + fi + as_fn_error $? "Cannot locate the the path of AR" "$LINENO" 5 + fi + fi + + # Now new_path has a complete unix path to the binary + if test "x`$ECHO $new_path | $GREP ^/bin/`" != x; then + # Keep paths in /bin as-is, but remove trailing .exe if any + new_path="${new_path/%.exe/}" + # Do not save /bin paths to all_fixpath_prefixes! + else + # Not in mixed or Windows style, start by that. + new_path=`cmd //c echo $new_path` + + input_path="$new_path" + # Check if we need to convert this using DOS-style short mode. If the path + # contains just simple characters, use it. Otherwise (spaces, weird characters), + # take no chances and rewrite it. + # Note: m4 eats our [], so we need to use [ and ] instead. + has_forbidden_chars=`$ECHO "$input_path" | $GREP [^-_/:a-zA-Z0-9]` + if test "x$has_forbidden_chars" != x; then + # Now convert it to mixed DOS-style, short mode (no spaces, and / instead of \) + new_path=`cmd /c "for %A in (\"$input_path\") do @echo %~sA"|$TR \\\\\\\\ / | $TR 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` + fi + + # Output is in $new_path + + windows_path="$new_path" + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then + unix_path=`$CYGPATH -u "$windows_path"` + new_path="$unix_path" + elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then + unix_path=`$ECHO "$windows_path" | $SED -e 's,^\\(.\\):,/\\1,g' -e 's,\\\\,/,g'` + new_path="$unix_path" + fi + + # remove trailing .exe if any + new_path="${new_path/%.exe/}" + + # Save the first 10 bytes of this path to the storage, so fixpath can work. + all_fixpath_prefixes=("${all_fixpath_prefixes[@]}" "${new_path:0:10}") + fi + + else + # We're on a posix platform. Hooray! :) + # First separate the path from the arguments. This will split at the first + # space. + complete="$AR" + path="${complete%% *}" + tmp="$complete EOL" + arguments="${tmp#* }" + + new_path=`$WHICH $path 2> /dev/null` + if test "x$new_path" = x; then + is_absolute_path=`$ECHO "$path" | $GREP ^/` + if test "x$is_absolute_path" != x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: Resolving AR (as $path) with 'which' failed, using $path directly." >&5 +$as_echo "$as_me: Resolving AR (as $path) with 'which' failed, using $path directly." >&6;} + new_path="$path" + else + { $as_echo "$as_me:${as_lineno-$LINENO}: The path of AR, which resolves as \"$complete\", is not found." >&5 +$as_echo "$as_me: The path of AR, which resolves as \"$complete\", is not found." >&6;} + has_space=`$ECHO "$complete" | $GREP " "` + if test "x$has_space" != x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: This might be caused by spaces in the path, which is not allowed." >&5 +$as_echo "$as_me: This might be caused by spaces in the path, which is not allowed." >&6;} fi - # Convert to C:/ mixed style path without spaces. - tmp=`$CYGPATH -s -m "$tmp"` + as_fn_error $? "Cannot locate the the path of AR" "$LINENO" 5 + fi fi - car="$tmp" + fi - else - # "which" is not portable, but is used here - # because we know that the command exists! - car=`which $car` - fi - if test "x$cdr" != xEOL; then - AR="$car ${cdr% *}" - else - AR="$car" - fi + # Now join together the path and the arguments once again + if test "x$arguments" != xEOL; then + new_complete="$new_path ${arguments% *}" + else + new_complete="$new_path" + fi + + if test "x$complete" != "x$new_complete"; then + AR="$new_complete" + { $as_echo "$as_me:${as_lineno-$LINENO}: Rewriting AR to \"$new_complete\"" >&5 +$as_echo "$as_me: Rewriting AR to \"$new_complete\"" >&6;} + fi fi -if test "x$OPENJDK_BUILD_OS" = xmacosx; then +if test "x$OPENJDK_TARGET_OS" = xmacosx; then ARFLAGS="-r" else ARFLAGS="" fi +# For hotspot, we need these in Windows mixed path; other platforms keep them the same +HOTSPOT_CXX="$CXX" +HOTSPOT_LD="$LD" + + + COMPILER_NAME=gcc COMPILER_TYPE=CC -if test "x$OPENJDK_BUILD_OS" = xwindows; then : +if test "x$OPENJDK_TARGET_OS" = xwindows; then : # For now, assume that we are always compiling using cl.exe. CC_OUT_OPTION=-Fo @@ -12643,25 +21232,259 @@ fi # Since we must ignore the first found link, WINLD will contain # the full path to the link.exe program. - # Translate long cygdrive or C:\sdfsf path - # into a short mixed mode path that has no - # spaces in it. - tmp="$WINLD" + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then - if test "x$OPENJDK_BUILD_OS" = "xwindows"; then - tmp=`$CYGPATH -u "$WINLD"` - tmp=`which "$tmp"` - # If file exists with .exe appended, that's the real filename - # and cygpath needs that to convert to short style path. - if test -f "${tmp}.exe"; then - tmp="${tmp}.exe" - elif test -f "${tmp}.cmd"; then - tmp="${tmp}.cmd" - fi - # Convert to C:/ mixed style path without spaces. - tmp=`$CYGPATH -s -m "$tmp"` + # First separate the path from the arguments. This will split at the first + # space. + complete="$WINLD" + path="${complete%% *}" + tmp="$complete EOL" + arguments="${tmp#* }" + + # Input might be given as Windows format, start by converting to + # unix format. + new_path=`$CYGPATH -u "$path"` + + # Now try to locate executable using which + new_path=`$WHICH "$new_path" 2> /dev/null` + # bat and cmd files are not always considered executable in cygwin causing which + # to not find them + if test "x$new_path" = x \ + && test "x`$ECHO \"$path\" | $GREP -e \"\\.bat$\" -e \"\\.cmd$\"`" != x \ + && test "x`$LS \"$path\" 2>/dev/null`" != x; then + new_path=`$CYGPATH -u "$path"` + fi + if test "x$new_path" = x; then + # Oops. Which didn't find the executable. + # The splitting of arguments from the executable at a space might have been incorrect, + # since paths with space are more likely in Windows. Give it another try with the whole + # argument. + path="$complete" + arguments="EOL" + new_path=`$CYGPATH -u "$path"` + new_path=`$WHICH "$new_path" 2> /dev/null` + # bat and cmd files are not always considered executable in cygwin causing which + # to not find them + if test "x$new_path" = x \ + && test "x`$ECHO \"$path\" | $GREP -e \"\\.bat$\" -e \"\\.cmd$\"`" != x \ + && test "x`$LS \"$path\" 2>/dev/null`" != x; then + new_path=`$CYGPATH -u "$path"` fi - WINLD="$tmp" + if test "x$new_path" = x; then + # It's still not found. Now this is an unrecoverable error. + { $as_echo "$as_me:${as_lineno-$LINENO}: The path of WINLD, which resolves as \"$complete\", is not found." >&5 +$as_echo "$as_me: The path of WINLD, which resolves as \"$complete\", is not found." >&6;} + has_space=`$ECHO "$complete" | $GREP " "` + if test "x$has_space" != x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: You might be mixing spaces in the path and extra arguments, which is not allowed." >&5 +$as_echo "$as_me: You might be mixing spaces in the path and extra arguments, which is not allowed." >&6;} + fi + as_fn_error $? "Cannot locate the the path of WINLD" "$LINENO" 5 + fi + fi + + # Cygwin tries to hide some aspects of the Windows file system, such that binaries are + # named .exe but called without that suffix. Therefore, "foo" and "foo.exe" are considered + # the same file, most of the time (as in "test -f"). But not when running cygpath -s, then + # "foo.exe" is OK but "foo" is an error. + # + # This test is therefore slightly more accurate than "test -f" to check for file precense. + # It is also a way to make sure we got the proper file name for the real test later on. + test_shortpath=`$CYGPATH -s -m "$new_path" 2> /dev/null` + if test "x$test_shortpath" = x; then + # Short path failed, file does not exist as specified. + # Try adding .exe or .cmd + if test -f "${new_path}.exe"; then + input_to_shortpath="${new_path}.exe" + elif test -f "${new_path}.cmd"; then + input_to_shortpath="${new_path}.cmd" + else + { $as_echo "$as_me:${as_lineno-$LINENO}: The path of WINLD, which resolves as \"$new_path\", is invalid." >&5 +$as_echo "$as_me: The path of WINLD, which resolves as \"$new_path\", is invalid." >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: Neither \"$new_path\" nor \"$new_path.exe/cmd\" can be found" >&5 +$as_echo "$as_me: Neither \"$new_path\" nor \"$new_path.exe/cmd\" can be found" >&6;} + as_fn_error $? "Cannot locate the the path of WINLD" "$LINENO" 5 + fi + else + input_to_shortpath="$new_path" + fi + + # Call helper function which possibly converts this using DOS-style short mode. + # If so, the updated path is stored in $new_path. + new_path="$input_to_shortpath" + + input_path="$input_to_shortpath" + # Check if we need to convert this using DOS-style short mode. If the path + # contains just simple characters, use it. Otherwise (spaces, weird characters), + # take no chances and rewrite it. + # Note: m4 eats our [], so we need to use [ and ] instead. + has_forbidden_chars=`$ECHO "$input_path" | $GREP [^-._/a-zA-Z0-9]` + if test "x$has_forbidden_chars" != x; then + # Now convert it to mixed DOS-style, short mode (no spaces, and / instead of \) + shortmode_path=`$CYGPATH -s -m -a "$input_path"` + path_after_shortmode=`$CYGPATH -u "$shortmode_path"` + if test "x$path_after_shortmode" != "x$input_to_shortpath"; then + # Going to short mode and back again did indeed matter. Since short mode is + # case insensitive, let's make it lowercase to improve readability. + shortmode_path=`$ECHO "$shortmode_path" | $TR 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` + # Now convert it back to Unix-stile (cygpath) + input_path=`$CYGPATH -u "$shortmode_path"` + new_path="$input_path" + fi + fi + + test_cygdrive_prefix=`$ECHO $input_path | $GREP ^/cygdrive/` + if test "x$test_cygdrive_prefix" = x; then + # As a simple fix, exclude /usr/bin since it's not a real path. + if test "x`$ECHO $input_to_shortpath | $GREP ^/usr/bin/`" = x; then + # The path is in a Cygwin special directory (e.g. /home). We need this converted to + # a path prefixed by /cygdrive for fixpath to work. + new_path="$CYGWIN_ROOT_PATH$input_path" + fi + fi + + # remove trailing .exe if any + new_path="${new_path/%.exe/}" + + elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then + + # First separate the path from the arguments. This will split at the first + # space. + complete="$WINLD" + path="${complete%% *}" + tmp="$complete EOL" + arguments="${tmp#* }" + + # Input might be given as Windows format, start by converting to + # unix format. + new_path="$path" + + windows_path="$new_path" + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then + unix_path=`$CYGPATH -u "$windows_path"` + new_path="$unix_path" + elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then + unix_path=`$ECHO "$windows_path" | $SED -e 's,^\\(.\\):,/\\1,g' -e 's,\\\\,/,g'` + new_path="$unix_path" + fi + + + # Now try to locate executable using which + new_path=`$WHICH "$new_path" 2> /dev/null` + + if test "x$new_path" = x; then + # Oops. Which didn't find the executable. + # The splitting of arguments from the executable at a space might have been incorrect, + # since paths with space are more likely in Windows. Give it another try with the whole + # argument. + path="$complete" + arguments="EOL" + new_path="$path" + + windows_path="$new_path" + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then + unix_path=`$CYGPATH -u "$windows_path"` + new_path="$unix_path" + elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then + unix_path=`$ECHO "$windows_path" | $SED -e 's,^\\(.\\):,/\\1,g' -e 's,\\\\,/,g'` + new_path="$unix_path" + fi + + + new_path=`$WHICH "$new_path" 2> /dev/null` + + if test "x$new_path" = x; then + # It's still not found. Now this is an unrecoverable error. + { $as_echo "$as_me:${as_lineno-$LINENO}: The path of WINLD, which resolves as \"$complete\", is not found." >&5 +$as_echo "$as_me: The path of WINLD, which resolves as \"$complete\", is not found." >&6;} + has_space=`$ECHO "$complete" | $GREP " "` + if test "x$has_space" != x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: You might be mixing spaces in the path and extra arguments, which is not allowed." >&5 +$as_echo "$as_me: You might be mixing spaces in the path and extra arguments, which is not allowed." >&6;} + fi + as_fn_error $? "Cannot locate the the path of WINLD" "$LINENO" 5 + fi + fi + + # Now new_path has a complete unix path to the binary + if test "x`$ECHO $new_path | $GREP ^/bin/`" != x; then + # Keep paths in /bin as-is, but remove trailing .exe if any + new_path="${new_path/%.exe/}" + # Do not save /bin paths to all_fixpath_prefixes! + else + # Not in mixed or Windows style, start by that. + new_path=`cmd //c echo $new_path` + + input_path="$new_path" + # Check if we need to convert this using DOS-style short mode. If the path + # contains just simple characters, use it. Otherwise (spaces, weird characters), + # take no chances and rewrite it. + # Note: m4 eats our [], so we need to use [ and ] instead. + has_forbidden_chars=`$ECHO "$input_path" | $GREP [^-_/:a-zA-Z0-9]` + if test "x$has_forbidden_chars" != x; then + # Now convert it to mixed DOS-style, short mode (no spaces, and / instead of \) + new_path=`cmd /c "for %A in (\"$input_path\") do @echo %~sA"|$TR \\\\\\\\ / | $TR 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` + fi + + # Output is in $new_path + + windows_path="$new_path" + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then + unix_path=`$CYGPATH -u "$windows_path"` + new_path="$unix_path" + elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then + unix_path=`$ECHO "$windows_path" | $SED -e 's,^\\(.\\):,/\\1,g' -e 's,\\\\,/,g'` + new_path="$unix_path" + fi + + # remove trailing .exe if any + new_path="${new_path/%.exe/}" + + # Save the first 10 bytes of this path to the storage, so fixpath can work. + all_fixpath_prefixes=("${all_fixpath_prefixes[@]}" "${new_path:0:10}") + fi + + else + # We're on a posix platform. Hooray! :) + # First separate the path from the arguments. This will split at the first + # space. + complete="$WINLD" + path="${complete%% *}" + tmp="$complete EOL" + arguments="${tmp#* }" + + new_path=`$WHICH $path 2> /dev/null` + if test "x$new_path" = x; then + is_absolute_path=`$ECHO "$path" | $GREP ^/` + if test "x$is_absolute_path" != x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: Resolving WINLD (as $path) with 'which' failed, using $path directly." >&5 +$as_echo "$as_me: Resolving WINLD (as $path) with 'which' failed, using $path directly." >&6;} + new_path="$path" + else + { $as_echo "$as_me:${as_lineno-$LINENO}: The path of WINLD, which resolves as \"$complete\", is not found." >&5 +$as_echo "$as_me: The path of WINLD, which resolves as \"$complete\", is not found." >&6;} + has_space=`$ECHO "$complete" | $GREP " "` + if test "x$has_space" != x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: This might be caused by spaces in the path, which is not allowed." >&5 +$as_echo "$as_me: This might be caused by spaces in the path, which is not allowed." >&6;} + fi + as_fn_error $? "Cannot locate the the path of WINLD" "$LINENO" 5 + fi + fi + fi + + # Now join together the path and the arguments once again + if test "x$arguments" != xEOL; then + new_complete="$new_path ${arguments% *}" + else + new_complete="$new_path" + fi + + if test "x$complete" != "x$new_complete"; then + WINLD="$new_complete" + { $as_echo "$as_me:${as_lineno-$LINENO}: Rewriting WINLD to \"$new_complete\"" >&5 +$as_echo "$as_me: Rewriting WINLD to \"$new_complete\"" >&6;} + fi printf "Windows linker was found at $WINLD\n" { $as_echo "$as_me:${as_lineno-$LINENO}: checking if the found link.exe is actually the Visual Studio linker" >&5 @@ -12735,25 +21558,259 @@ fi - # Translate long cygdrive or C:\sdfsf path - # into a short mixed mode path that has no - # spaces in it. - tmp="$MT" + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then - if test "x$OPENJDK_BUILD_OS" = "xwindows"; then - tmp=`$CYGPATH -u "$MT"` - tmp=`which "$tmp"` - # If file exists with .exe appended, that's the real filename - # and cygpath needs that to convert to short style path. - if test -f "${tmp}.exe"; then - tmp="${tmp}.exe" - elif test -f "${tmp}.cmd"; then - tmp="${tmp}.cmd" - fi - # Convert to C:/ mixed style path without spaces. - tmp=`$CYGPATH -s -m "$tmp"` + # First separate the path from the arguments. This will split at the first + # space. + complete="$MT" + path="${complete%% *}" + tmp="$complete EOL" + arguments="${tmp#* }" + + # Input might be given as Windows format, start by converting to + # unix format. + new_path=`$CYGPATH -u "$path"` + + # Now try to locate executable using which + new_path=`$WHICH "$new_path" 2> /dev/null` + # bat and cmd files are not always considered executable in cygwin causing which + # to not find them + if test "x$new_path" = x \ + && test "x`$ECHO \"$path\" | $GREP -e \"\\.bat$\" -e \"\\.cmd$\"`" != x \ + && test "x`$LS \"$path\" 2>/dev/null`" != x; then + new_path=`$CYGPATH -u "$path"` + fi + if test "x$new_path" = x; then + # Oops. Which didn't find the executable. + # The splitting of arguments from the executable at a space might have been incorrect, + # since paths with space are more likely in Windows. Give it another try with the whole + # argument. + path="$complete" + arguments="EOL" + new_path=`$CYGPATH -u "$path"` + new_path=`$WHICH "$new_path" 2> /dev/null` + # bat and cmd files are not always considered executable in cygwin causing which + # to not find them + if test "x$new_path" = x \ + && test "x`$ECHO \"$path\" | $GREP -e \"\\.bat$\" -e \"\\.cmd$\"`" != x \ + && test "x`$LS \"$path\" 2>/dev/null`" != x; then + new_path=`$CYGPATH -u "$path"` fi - MT="$tmp" + if test "x$new_path" = x; then + # It's still not found. Now this is an unrecoverable error. + { $as_echo "$as_me:${as_lineno-$LINENO}: The path of MT, which resolves as \"$complete\", is not found." >&5 +$as_echo "$as_me: The path of MT, which resolves as \"$complete\", is not found." >&6;} + has_space=`$ECHO "$complete" | $GREP " "` + if test "x$has_space" != x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: You might be mixing spaces in the path and extra arguments, which is not allowed." >&5 +$as_echo "$as_me: You might be mixing spaces in the path and extra arguments, which is not allowed." >&6;} + fi + as_fn_error $? "Cannot locate the the path of MT" "$LINENO" 5 + fi + fi + + # Cygwin tries to hide some aspects of the Windows file system, such that binaries are + # named .exe but called without that suffix. Therefore, "foo" and "foo.exe" are considered + # the same file, most of the time (as in "test -f"). But not when running cygpath -s, then + # "foo.exe" is OK but "foo" is an error. + # + # This test is therefore slightly more accurate than "test -f" to check for file precense. + # It is also a way to make sure we got the proper file name for the real test later on. + test_shortpath=`$CYGPATH -s -m "$new_path" 2> /dev/null` + if test "x$test_shortpath" = x; then + # Short path failed, file does not exist as specified. + # Try adding .exe or .cmd + if test -f "${new_path}.exe"; then + input_to_shortpath="${new_path}.exe" + elif test -f "${new_path}.cmd"; then + input_to_shortpath="${new_path}.cmd" + else + { $as_echo "$as_me:${as_lineno-$LINENO}: The path of MT, which resolves as \"$new_path\", is invalid." >&5 +$as_echo "$as_me: The path of MT, which resolves as \"$new_path\", is invalid." >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: Neither \"$new_path\" nor \"$new_path.exe/cmd\" can be found" >&5 +$as_echo "$as_me: Neither \"$new_path\" nor \"$new_path.exe/cmd\" can be found" >&6;} + as_fn_error $? "Cannot locate the the path of MT" "$LINENO" 5 + fi + else + input_to_shortpath="$new_path" + fi + + # Call helper function which possibly converts this using DOS-style short mode. + # If so, the updated path is stored in $new_path. + new_path="$input_to_shortpath" + + input_path="$input_to_shortpath" + # Check if we need to convert this using DOS-style short mode. If the path + # contains just simple characters, use it. Otherwise (spaces, weird characters), + # take no chances and rewrite it. + # Note: m4 eats our [], so we need to use [ and ] instead. + has_forbidden_chars=`$ECHO "$input_path" | $GREP [^-._/a-zA-Z0-9]` + if test "x$has_forbidden_chars" != x; then + # Now convert it to mixed DOS-style, short mode (no spaces, and / instead of \) + shortmode_path=`$CYGPATH -s -m -a "$input_path"` + path_after_shortmode=`$CYGPATH -u "$shortmode_path"` + if test "x$path_after_shortmode" != "x$input_to_shortpath"; then + # Going to short mode and back again did indeed matter. Since short mode is + # case insensitive, let's make it lowercase to improve readability. + shortmode_path=`$ECHO "$shortmode_path" | $TR 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` + # Now convert it back to Unix-stile (cygpath) + input_path=`$CYGPATH -u "$shortmode_path"` + new_path="$input_path" + fi + fi + + test_cygdrive_prefix=`$ECHO $input_path | $GREP ^/cygdrive/` + if test "x$test_cygdrive_prefix" = x; then + # As a simple fix, exclude /usr/bin since it's not a real path. + if test "x`$ECHO $input_to_shortpath | $GREP ^/usr/bin/`" = x; then + # The path is in a Cygwin special directory (e.g. /home). We need this converted to + # a path prefixed by /cygdrive for fixpath to work. + new_path="$CYGWIN_ROOT_PATH$input_path" + fi + fi + + # remove trailing .exe if any + new_path="${new_path/%.exe/}" + + elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then + + # First separate the path from the arguments. This will split at the first + # space. + complete="$MT" + path="${complete%% *}" + tmp="$complete EOL" + arguments="${tmp#* }" + + # Input might be given as Windows format, start by converting to + # unix format. + new_path="$path" + + windows_path="$new_path" + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then + unix_path=`$CYGPATH -u "$windows_path"` + new_path="$unix_path" + elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then + unix_path=`$ECHO "$windows_path" | $SED -e 's,^\\(.\\):,/\\1,g' -e 's,\\\\,/,g'` + new_path="$unix_path" + fi + + + # Now try to locate executable using which + new_path=`$WHICH "$new_path" 2> /dev/null` + + if test "x$new_path" = x; then + # Oops. Which didn't find the executable. + # The splitting of arguments from the executable at a space might have been incorrect, + # since paths with space are more likely in Windows. Give it another try with the whole + # argument. + path="$complete" + arguments="EOL" + new_path="$path" + + windows_path="$new_path" + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then + unix_path=`$CYGPATH -u "$windows_path"` + new_path="$unix_path" + elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then + unix_path=`$ECHO "$windows_path" | $SED -e 's,^\\(.\\):,/\\1,g' -e 's,\\\\,/,g'` + new_path="$unix_path" + fi + + + new_path=`$WHICH "$new_path" 2> /dev/null` + + if test "x$new_path" = x; then + # It's still not found. Now this is an unrecoverable error. + { $as_echo "$as_me:${as_lineno-$LINENO}: The path of MT, which resolves as \"$complete\", is not found." >&5 +$as_echo "$as_me: The path of MT, which resolves as \"$complete\", is not found." >&6;} + has_space=`$ECHO "$complete" | $GREP " "` + if test "x$has_space" != x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: You might be mixing spaces in the path and extra arguments, which is not allowed." >&5 +$as_echo "$as_me: You might be mixing spaces in the path and extra arguments, which is not allowed." >&6;} + fi + as_fn_error $? "Cannot locate the the path of MT" "$LINENO" 5 + fi + fi + + # Now new_path has a complete unix path to the binary + if test "x`$ECHO $new_path | $GREP ^/bin/`" != x; then + # Keep paths in /bin as-is, but remove trailing .exe if any + new_path="${new_path/%.exe/}" + # Do not save /bin paths to all_fixpath_prefixes! + else + # Not in mixed or Windows style, start by that. + new_path=`cmd //c echo $new_path` + + input_path="$new_path" + # Check if we need to convert this using DOS-style short mode. If the path + # contains just simple characters, use it. Otherwise (spaces, weird characters), + # take no chances and rewrite it. + # Note: m4 eats our [], so we need to use [ and ] instead. + has_forbidden_chars=`$ECHO "$input_path" | $GREP [^-_/:a-zA-Z0-9]` + if test "x$has_forbidden_chars" != x; then + # Now convert it to mixed DOS-style, short mode (no spaces, and / instead of \) + new_path=`cmd /c "for %A in (\"$input_path\") do @echo %~sA"|$TR \\\\\\\\ / | $TR 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` + fi + + # Output is in $new_path + + windows_path="$new_path" + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then + unix_path=`$CYGPATH -u "$windows_path"` + new_path="$unix_path" + elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then + unix_path=`$ECHO "$windows_path" | $SED -e 's,^\\(.\\):,/\\1,g' -e 's,\\\\,/,g'` + new_path="$unix_path" + fi + + # remove trailing .exe if any + new_path="${new_path/%.exe/}" + + # Save the first 10 bytes of this path to the storage, so fixpath can work. + all_fixpath_prefixes=("${all_fixpath_prefixes[@]}" "${new_path:0:10}") + fi + + else + # We're on a posix platform. Hooray! :) + # First separate the path from the arguments. This will split at the first + # space. + complete="$MT" + path="${complete%% *}" + tmp="$complete EOL" + arguments="${tmp#* }" + + new_path=`$WHICH $path 2> /dev/null` + if test "x$new_path" = x; then + is_absolute_path=`$ECHO "$path" | $GREP ^/` + if test "x$is_absolute_path" != x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: Resolving MT (as $path) with 'which' failed, using $path directly." >&5 +$as_echo "$as_me: Resolving MT (as $path) with 'which' failed, using $path directly." >&6;} + new_path="$path" + else + { $as_echo "$as_me:${as_lineno-$LINENO}: The path of MT, which resolves as \"$complete\", is not found." >&5 +$as_echo "$as_me: The path of MT, which resolves as \"$complete\", is not found." >&6;} + has_space=`$ECHO "$complete" | $GREP " "` + if test "x$has_space" != x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: This might be caused by spaces in the path, which is not allowed." >&5 +$as_echo "$as_me: This might be caused by spaces in the path, which is not allowed." >&6;} + fi + as_fn_error $? "Cannot locate the the path of MT" "$LINENO" 5 + fi + fi + fi + + # Now join together the path and the arguments once again + if test "x$arguments" != xEOL; then + new_complete="$new_path ${arguments% *}" + else + new_complete="$new_path" + fi + + if test "x$complete" != "x$new_complete"; then + MT="$new_complete" + { $as_echo "$as_me:${as_lineno-$LINENO}: Rewriting MT to \"$new_complete\"" >&5 +$as_echo "$as_me: Rewriting MT to \"$new_complete\"" >&6;} + fi # The resource compiler # Extract the first word of "rc", so it can be a program name with args. @@ -12811,28 +21868,311 @@ fi - # Translate long cygdrive or C:\sdfsf path - # into a short mixed mode path that has no - # spaces in it. - tmp="$RC" + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then - if test "x$OPENJDK_BUILD_OS" = "xwindows"; then - tmp=`$CYGPATH -u "$RC"` - tmp=`which "$tmp"` - # If file exists with .exe appended, that's the real filename - # and cygpath needs that to convert to short style path. - if test -f "${tmp}.exe"; then - tmp="${tmp}.exe" - elif test -f "${tmp}.cmd"; then - tmp="${tmp}.cmd" - fi - # Convert to C:/ mixed style path without spaces. - tmp=`$CYGPATH -s -m "$tmp"` + # First separate the path from the arguments. This will split at the first + # space. + complete="$RC" + path="${complete%% *}" + tmp="$complete EOL" + arguments="${tmp#* }" + + # Input might be given as Windows format, start by converting to + # unix format. + new_path=`$CYGPATH -u "$path"` + + # Now try to locate executable using which + new_path=`$WHICH "$new_path" 2> /dev/null` + # bat and cmd files are not always considered executable in cygwin causing which + # to not find them + if test "x$new_path" = x \ + && test "x`$ECHO \"$path\" | $GREP -e \"\\.bat$\" -e \"\\.cmd$\"`" != x \ + && test "x`$LS \"$path\" 2>/dev/null`" != x; then + new_path=`$CYGPATH -u "$path"` + fi + if test "x$new_path" = x; then + # Oops. Which didn't find the executable. + # The splitting of arguments from the executable at a space might have been incorrect, + # since paths with space are more likely in Windows. Give it another try with the whole + # argument. + path="$complete" + arguments="EOL" + new_path=`$CYGPATH -u "$path"` + new_path=`$WHICH "$new_path" 2> /dev/null` + # bat and cmd files are not always considered executable in cygwin causing which + # to not find them + if test "x$new_path" = x \ + && test "x`$ECHO \"$path\" | $GREP -e \"\\.bat$\" -e \"\\.cmd$\"`" != x \ + && test "x`$LS \"$path\" 2>/dev/null`" != x; then + new_path=`$CYGPATH -u "$path"` fi - RC="$tmp" + if test "x$new_path" = x; then + # It's still not found. Now this is an unrecoverable error. + { $as_echo "$as_me:${as_lineno-$LINENO}: The path of RC, which resolves as \"$complete\", is not found." >&5 +$as_echo "$as_me: The path of RC, which resolves as \"$complete\", is not found." >&6;} + has_space=`$ECHO "$complete" | $GREP " "` + if test "x$has_space" != x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: You might be mixing spaces in the path and extra arguments, which is not allowed." >&5 +$as_echo "$as_me: You might be mixing spaces in the path and extra arguments, which is not allowed." >&6;} + fi + as_fn_error $? "Cannot locate the the path of RC" "$LINENO" 5 + fi + fi + + # Cygwin tries to hide some aspects of the Windows file system, such that binaries are + # named .exe but called without that suffix. Therefore, "foo" and "foo.exe" are considered + # the same file, most of the time (as in "test -f"). But not when running cygpath -s, then + # "foo.exe" is OK but "foo" is an error. + # + # This test is therefore slightly more accurate than "test -f" to check for file precense. + # It is also a way to make sure we got the proper file name for the real test later on. + test_shortpath=`$CYGPATH -s -m "$new_path" 2> /dev/null` + if test "x$test_shortpath" = x; then + # Short path failed, file does not exist as specified. + # Try adding .exe or .cmd + if test -f "${new_path}.exe"; then + input_to_shortpath="${new_path}.exe" + elif test -f "${new_path}.cmd"; then + input_to_shortpath="${new_path}.cmd" + else + { $as_echo "$as_me:${as_lineno-$LINENO}: The path of RC, which resolves as \"$new_path\", is invalid." >&5 +$as_echo "$as_me: The path of RC, which resolves as \"$new_path\", is invalid." >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: Neither \"$new_path\" nor \"$new_path.exe/cmd\" can be found" >&5 +$as_echo "$as_me: Neither \"$new_path\" nor \"$new_path.exe/cmd\" can be found" >&6;} + as_fn_error $? "Cannot locate the the path of RC" "$LINENO" 5 + fi + else + input_to_shortpath="$new_path" + fi + + # Call helper function which possibly converts this using DOS-style short mode. + # If so, the updated path is stored in $new_path. + new_path="$input_to_shortpath" + + input_path="$input_to_shortpath" + # Check if we need to convert this using DOS-style short mode. If the path + # contains just simple characters, use it. Otherwise (spaces, weird characters), + # take no chances and rewrite it. + # Note: m4 eats our [], so we need to use [ and ] instead. + has_forbidden_chars=`$ECHO "$input_path" | $GREP [^-._/a-zA-Z0-9]` + if test "x$has_forbidden_chars" != x; then + # Now convert it to mixed DOS-style, short mode (no spaces, and / instead of \) + shortmode_path=`$CYGPATH -s -m -a "$input_path"` + path_after_shortmode=`$CYGPATH -u "$shortmode_path"` + if test "x$path_after_shortmode" != "x$input_to_shortpath"; then + # Going to short mode and back again did indeed matter. Since short mode is + # case insensitive, let's make it lowercase to improve readability. + shortmode_path=`$ECHO "$shortmode_path" | $TR 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` + # Now convert it back to Unix-stile (cygpath) + input_path=`$CYGPATH -u "$shortmode_path"` + new_path="$input_path" + fi + fi + + test_cygdrive_prefix=`$ECHO $input_path | $GREP ^/cygdrive/` + if test "x$test_cygdrive_prefix" = x; then + # As a simple fix, exclude /usr/bin since it's not a real path. + if test "x`$ECHO $input_to_shortpath | $GREP ^/usr/bin/`" = x; then + # The path is in a Cygwin special directory (e.g. /home). We need this converted to + # a path prefixed by /cygdrive for fixpath to work. + new_path="$CYGWIN_ROOT_PATH$input_path" + fi + fi + + # remove trailing .exe if any + new_path="${new_path/%.exe/}" + + elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then + + # First separate the path from the arguments. This will split at the first + # space. + complete="$RC" + path="${complete%% *}" + tmp="$complete EOL" + arguments="${tmp#* }" + + # Input might be given as Windows format, start by converting to + # unix format. + new_path="$path" + + windows_path="$new_path" + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then + unix_path=`$CYGPATH -u "$windows_path"` + new_path="$unix_path" + elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then + unix_path=`$ECHO "$windows_path" | $SED -e 's,^\\(.\\):,/\\1,g' -e 's,\\\\,/,g'` + new_path="$unix_path" + fi - RC_FLAGS="-nologo /l 0x409 /r" + # Now try to locate executable using which + new_path=`$WHICH "$new_path" 2> /dev/null` + + if test "x$new_path" = x; then + # Oops. Which didn't find the executable. + # The splitting of arguments from the executable at a space might have been incorrect, + # since paths with space are more likely in Windows. Give it another try with the whole + # argument. + path="$complete" + arguments="EOL" + new_path="$path" + + windows_path="$new_path" + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then + unix_path=`$CYGPATH -u "$windows_path"` + new_path="$unix_path" + elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then + unix_path=`$ECHO "$windows_path" | $SED -e 's,^\\(.\\):,/\\1,g' -e 's,\\\\,/,g'` + new_path="$unix_path" + fi + + + new_path=`$WHICH "$new_path" 2> /dev/null` + + if test "x$new_path" = x; then + # It's still not found. Now this is an unrecoverable error. + { $as_echo "$as_me:${as_lineno-$LINENO}: The path of RC, which resolves as \"$complete\", is not found." >&5 +$as_echo "$as_me: The path of RC, which resolves as \"$complete\", is not found." >&6;} + has_space=`$ECHO "$complete" | $GREP " "` + if test "x$has_space" != x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: You might be mixing spaces in the path and extra arguments, which is not allowed." >&5 +$as_echo "$as_me: You might be mixing spaces in the path and extra arguments, which is not allowed." >&6;} + fi + as_fn_error $? "Cannot locate the the path of RC" "$LINENO" 5 + fi + fi + + # Now new_path has a complete unix path to the binary + if test "x`$ECHO $new_path | $GREP ^/bin/`" != x; then + # Keep paths in /bin as-is, but remove trailing .exe if any + new_path="${new_path/%.exe/}" + # Do not save /bin paths to all_fixpath_prefixes! + else + # Not in mixed or Windows style, start by that. + new_path=`cmd //c echo $new_path` + + input_path="$new_path" + # Check if we need to convert this using DOS-style short mode. If the path + # contains just simple characters, use it. Otherwise (spaces, weird characters), + # take no chances and rewrite it. + # Note: m4 eats our [], so we need to use [ and ] instead. + has_forbidden_chars=`$ECHO "$input_path" | $GREP [^-_/:a-zA-Z0-9]` + if test "x$has_forbidden_chars" != x; then + # Now convert it to mixed DOS-style, short mode (no spaces, and / instead of \) + new_path=`cmd /c "for %A in (\"$input_path\") do @echo %~sA"|$TR \\\\\\\\ / | $TR 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` + fi + + # Output is in $new_path + + windows_path="$new_path" + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then + unix_path=`$CYGPATH -u "$windows_path"` + new_path="$unix_path" + elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then + unix_path=`$ECHO "$windows_path" | $SED -e 's,^\\(.\\):,/\\1,g' -e 's,\\\\,/,g'` + new_path="$unix_path" + fi + + # remove trailing .exe if any + new_path="${new_path/%.exe/}" + + # Save the first 10 bytes of this path to the storage, so fixpath can work. + all_fixpath_prefixes=("${all_fixpath_prefixes[@]}" "${new_path:0:10}") + fi + + else + # We're on a posix platform. Hooray! :) + # First separate the path from the arguments. This will split at the first + # space. + complete="$RC" + path="${complete%% *}" + tmp="$complete EOL" + arguments="${tmp#* }" + + new_path=`$WHICH $path 2> /dev/null` + if test "x$new_path" = x; then + is_absolute_path=`$ECHO "$path" | $GREP ^/` + if test "x$is_absolute_path" != x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: Resolving RC (as $path) with 'which' failed, using $path directly." >&5 +$as_echo "$as_me: Resolving RC (as $path) with 'which' failed, using $path directly." >&6;} + new_path="$path" + else + { $as_echo "$as_me:${as_lineno-$LINENO}: The path of RC, which resolves as \"$complete\", is not found." >&5 +$as_echo "$as_me: The path of RC, which resolves as \"$complete\", is not found." >&6;} + has_space=`$ECHO "$complete" | $GREP " "` + if test "x$has_space" != x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: This might be caused by spaces in the path, which is not allowed." >&5 +$as_echo "$as_me: This might be caused by spaces in the path, which is not allowed." >&6;} + fi + as_fn_error $? "Cannot locate the the path of RC" "$LINENO" 5 + fi + fi + fi + + # Now join together the path and the arguments once again + if test "x$arguments" != xEOL; then + new_complete="$new_path ${arguments% *}" + else + new_complete="$new_path" + fi + + if test "x$complete" != "x$new_complete"; then + RC="$new_complete" + { $as_echo "$as_me:${as_lineno-$LINENO}: Rewriting RC to \"$new_complete\"" >&5 +$as_echo "$as_me: Rewriting RC to \"$new_complete\"" >&6;} + fi + + + # For hotspot, we need these in Windows mixed path, + # so rewrite them all. Need added .exe suffix. + HOTSPOT_CXX="$CXX.exe" + HOTSPOT_LD="$LD.exe" + HOTSPOT_MT="$MT.exe" + HOTSPOT_RC="$RC.exe" + + unix_path="$HOTSPOT_CXX" + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then + windows_path=`$CYGPATH -m "$unix_path"` + HOTSPOT_CXX="$windows_path" + elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then + windows_path=`cmd //c echo $unix_path` + HOTSPOT_CXX="$windows_path" + fi + + + unix_path="$HOTSPOT_LD" + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then + windows_path=`$CYGPATH -m "$unix_path"` + HOTSPOT_LD="$windows_path" + elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then + windows_path=`cmd //c echo $unix_path` + HOTSPOT_LD="$windows_path" + fi + + + unix_path="$HOTSPOT_MT" + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then + windows_path=`$CYGPATH -m "$unix_path"` + HOTSPOT_MT="$windows_path" + elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then + windows_path=`cmd //c echo $unix_path` + HOTSPOT_MT="$windows_path" + fi + + + unix_path="$HOTSPOT_RC" + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then + windows_path=`$CYGPATH -m "$unix_path"` + HOTSPOT_RC="$windows_path" + elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then + windows_path=`cmd //c echo $unix_path` + HOTSPOT_RC="$windows_path" + fi + + + + + RC_FLAGS="-nologo -l 0x409 -r" if test "x$VARIANT" = xOPT; then : RC_FLAGS="$RC_FLAGS -d NDEBUG" @@ -12891,25 +22231,259 @@ fi - # Translate long cygdrive or C:\sdfsf path - # into a short mixed mode path that has no - # spaces in it. - tmp="$WINAR" + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then - if test "x$OPENJDK_BUILD_OS" = "xwindows"; then - tmp=`$CYGPATH -u "$WINAR"` - tmp=`which "$tmp"` - # If file exists with .exe appended, that's the real filename - # and cygpath needs that to convert to short style path. - if test -f "${tmp}.exe"; then - tmp="${tmp}.exe" - elif test -f "${tmp}.cmd"; then - tmp="${tmp}.cmd" - fi - # Convert to C:/ mixed style path without spaces. - tmp=`$CYGPATH -s -m "$tmp"` + # First separate the path from the arguments. This will split at the first + # space. + complete="$WINAR" + path="${complete%% *}" + tmp="$complete EOL" + arguments="${tmp#* }" + + # Input might be given as Windows format, start by converting to + # unix format. + new_path=`$CYGPATH -u "$path"` + + # Now try to locate executable using which + new_path=`$WHICH "$new_path" 2> /dev/null` + # bat and cmd files are not always considered executable in cygwin causing which + # to not find them + if test "x$new_path" = x \ + && test "x`$ECHO \"$path\" | $GREP -e \"\\.bat$\" -e \"\\.cmd$\"`" != x \ + && test "x`$LS \"$path\" 2>/dev/null`" != x; then + new_path=`$CYGPATH -u "$path"` + fi + if test "x$new_path" = x; then + # Oops. Which didn't find the executable. + # The splitting of arguments from the executable at a space might have been incorrect, + # since paths with space are more likely in Windows. Give it another try with the whole + # argument. + path="$complete" + arguments="EOL" + new_path=`$CYGPATH -u "$path"` + new_path=`$WHICH "$new_path" 2> /dev/null` + # bat and cmd files are not always considered executable in cygwin causing which + # to not find them + if test "x$new_path" = x \ + && test "x`$ECHO \"$path\" | $GREP -e \"\\.bat$\" -e \"\\.cmd$\"`" != x \ + && test "x`$LS \"$path\" 2>/dev/null`" != x; then + new_path=`$CYGPATH -u "$path"` fi - WINAR="$tmp" + if test "x$new_path" = x; then + # It's still not found. Now this is an unrecoverable error. + { $as_echo "$as_me:${as_lineno-$LINENO}: The path of WINAR, which resolves as \"$complete\", is not found." >&5 +$as_echo "$as_me: The path of WINAR, which resolves as \"$complete\", is not found." >&6;} + has_space=`$ECHO "$complete" | $GREP " "` + if test "x$has_space" != x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: You might be mixing spaces in the path and extra arguments, which is not allowed." >&5 +$as_echo "$as_me: You might be mixing spaces in the path and extra arguments, which is not allowed." >&6;} + fi + as_fn_error $? "Cannot locate the the path of WINAR" "$LINENO" 5 + fi + fi + + # Cygwin tries to hide some aspects of the Windows file system, such that binaries are + # named .exe but called without that suffix. Therefore, "foo" and "foo.exe" are considered + # the same file, most of the time (as in "test -f"). But not when running cygpath -s, then + # "foo.exe" is OK but "foo" is an error. + # + # This test is therefore slightly more accurate than "test -f" to check for file precense. + # It is also a way to make sure we got the proper file name for the real test later on. + test_shortpath=`$CYGPATH -s -m "$new_path" 2> /dev/null` + if test "x$test_shortpath" = x; then + # Short path failed, file does not exist as specified. + # Try adding .exe or .cmd + if test -f "${new_path}.exe"; then + input_to_shortpath="${new_path}.exe" + elif test -f "${new_path}.cmd"; then + input_to_shortpath="${new_path}.cmd" + else + { $as_echo "$as_me:${as_lineno-$LINENO}: The path of WINAR, which resolves as \"$new_path\", is invalid." >&5 +$as_echo "$as_me: The path of WINAR, which resolves as \"$new_path\", is invalid." >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: Neither \"$new_path\" nor \"$new_path.exe/cmd\" can be found" >&5 +$as_echo "$as_me: Neither \"$new_path\" nor \"$new_path.exe/cmd\" can be found" >&6;} + as_fn_error $? "Cannot locate the the path of WINAR" "$LINENO" 5 + fi + else + input_to_shortpath="$new_path" + fi + + # Call helper function which possibly converts this using DOS-style short mode. + # If so, the updated path is stored in $new_path. + new_path="$input_to_shortpath" + + input_path="$input_to_shortpath" + # Check if we need to convert this using DOS-style short mode. If the path + # contains just simple characters, use it. Otherwise (spaces, weird characters), + # take no chances and rewrite it. + # Note: m4 eats our [], so we need to use [ and ] instead. + has_forbidden_chars=`$ECHO "$input_path" | $GREP [^-._/a-zA-Z0-9]` + if test "x$has_forbidden_chars" != x; then + # Now convert it to mixed DOS-style, short mode (no spaces, and / instead of \) + shortmode_path=`$CYGPATH -s -m -a "$input_path"` + path_after_shortmode=`$CYGPATH -u "$shortmode_path"` + if test "x$path_after_shortmode" != "x$input_to_shortpath"; then + # Going to short mode and back again did indeed matter. Since short mode is + # case insensitive, let's make it lowercase to improve readability. + shortmode_path=`$ECHO "$shortmode_path" | $TR 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` + # Now convert it back to Unix-stile (cygpath) + input_path=`$CYGPATH -u "$shortmode_path"` + new_path="$input_path" + fi + fi + + test_cygdrive_prefix=`$ECHO $input_path | $GREP ^/cygdrive/` + if test "x$test_cygdrive_prefix" = x; then + # As a simple fix, exclude /usr/bin since it's not a real path. + if test "x`$ECHO $input_to_shortpath | $GREP ^/usr/bin/`" = x; then + # The path is in a Cygwin special directory (e.g. /home). We need this converted to + # a path prefixed by /cygdrive for fixpath to work. + new_path="$CYGWIN_ROOT_PATH$input_path" + fi + fi + + # remove trailing .exe if any + new_path="${new_path/%.exe/}" + + elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then + + # First separate the path from the arguments. This will split at the first + # space. + complete="$WINAR" + path="${complete%% *}" + tmp="$complete EOL" + arguments="${tmp#* }" + + # Input might be given as Windows format, start by converting to + # unix format. + new_path="$path" + + windows_path="$new_path" + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then + unix_path=`$CYGPATH -u "$windows_path"` + new_path="$unix_path" + elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then + unix_path=`$ECHO "$windows_path" | $SED -e 's,^\\(.\\):,/\\1,g' -e 's,\\\\,/,g'` + new_path="$unix_path" + fi + + + # Now try to locate executable using which + new_path=`$WHICH "$new_path" 2> /dev/null` + + if test "x$new_path" = x; then + # Oops. Which didn't find the executable. + # The splitting of arguments from the executable at a space might have been incorrect, + # since paths with space are more likely in Windows. Give it another try with the whole + # argument. + path="$complete" + arguments="EOL" + new_path="$path" + + windows_path="$new_path" + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then + unix_path=`$CYGPATH -u "$windows_path"` + new_path="$unix_path" + elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then + unix_path=`$ECHO "$windows_path" | $SED -e 's,^\\(.\\):,/\\1,g' -e 's,\\\\,/,g'` + new_path="$unix_path" + fi + + + new_path=`$WHICH "$new_path" 2> /dev/null` + + if test "x$new_path" = x; then + # It's still not found. Now this is an unrecoverable error. + { $as_echo "$as_me:${as_lineno-$LINENO}: The path of WINAR, which resolves as \"$complete\", is not found." >&5 +$as_echo "$as_me: The path of WINAR, which resolves as \"$complete\", is not found." >&6;} + has_space=`$ECHO "$complete" | $GREP " "` + if test "x$has_space" != x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: You might be mixing spaces in the path and extra arguments, which is not allowed." >&5 +$as_echo "$as_me: You might be mixing spaces in the path and extra arguments, which is not allowed." >&6;} + fi + as_fn_error $? "Cannot locate the the path of WINAR" "$LINENO" 5 + fi + fi + + # Now new_path has a complete unix path to the binary + if test "x`$ECHO $new_path | $GREP ^/bin/`" != x; then + # Keep paths in /bin as-is, but remove trailing .exe if any + new_path="${new_path/%.exe/}" + # Do not save /bin paths to all_fixpath_prefixes! + else + # Not in mixed or Windows style, start by that. + new_path=`cmd //c echo $new_path` + + input_path="$new_path" + # Check if we need to convert this using DOS-style short mode. If the path + # contains just simple characters, use it. Otherwise (spaces, weird characters), + # take no chances and rewrite it. + # Note: m4 eats our [], so we need to use [ and ] instead. + has_forbidden_chars=`$ECHO "$input_path" | $GREP [^-_/:a-zA-Z0-9]` + if test "x$has_forbidden_chars" != x; then + # Now convert it to mixed DOS-style, short mode (no spaces, and / instead of \) + new_path=`cmd /c "for %A in (\"$input_path\") do @echo %~sA"|$TR \\\\\\\\ / | $TR 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` + fi + + # Output is in $new_path + + windows_path="$new_path" + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then + unix_path=`$CYGPATH -u "$windows_path"` + new_path="$unix_path" + elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then + unix_path=`$ECHO "$windows_path" | $SED -e 's,^\\(.\\):,/\\1,g' -e 's,\\\\,/,g'` + new_path="$unix_path" + fi + + # remove trailing .exe if any + new_path="${new_path/%.exe/}" + + # Save the first 10 bytes of this path to the storage, so fixpath can work. + all_fixpath_prefixes=("${all_fixpath_prefixes[@]}" "${new_path:0:10}") + fi + + else + # We're on a posix platform. Hooray! :) + # First separate the path from the arguments. This will split at the first + # space. + complete="$WINAR" + path="${complete%% *}" + tmp="$complete EOL" + arguments="${tmp#* }" + + new_path=`$WHICH $path 2> /dev/null` + if test "x$new_path" = x; then + is_absolute_path=`$ECHO "$path" | $GREP ^/` + if test "x$is_absolute_path" != x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: Resolving WINAR (as $path) with 'which' failed, using $path directly." >&5 +$as_echo "$as_me: Resolving WINAR (as $path) with 'which' failed, using $path directly." >&6;} + new_path="$path" + else + { $as_echo "$as_me:${as_lineno-$LINENO}: The path of WINAR, which resolves as \"$complete\", is not found." >&5 +$as_echo "$as_me: The path of WINAR, which resolves as \"$complete\", is not found." >&6;} + has_space=`$ECHO "$complete" | $GREP " "` + if test "x$has_space" != x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: This might be caused by spaces in the path, which is not allowed." >&5 +$as_echo "$as_me: This might be caused by spaces in the path, which is not allowed." >&6;} + fi + as_fn_error $? "Cannot locate the the path of WINAR" "$LINENO" 5 + fi + fi + fi + + # Now join together the path and the arguments once again + if test "x$arguments" != xEOL; then + new_complete="$new_path ${arguments% *}" + else + new_complete="$new_path" + fi + + if test "x$complete" != "x$new_complete"; then + WINAR="$new_complete" + { $as_echo "$as_me:${as_lineno-$LINENO}: Rewriting WINAR to \"$new_complete\"" >&5 +$as_echo "$as_me: Rewriting WINAR to \"$new_complete\"" >&6;} + fi AR="$WINAR" ARFLAGS="-nologo -NODEFAULTLIB:MSVCRT" @@ -12952,25 +22526,259 @@ fi - # Translate long cygdrive or C:\sdfsf path - # into a short mixed mode path that has no - # spaces in it. - tmp="$DUMPBIN" + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then - if test "x$OPENJDK_BUILD_OS" = "xwindows"; then - tmp=`$CYGPATH -u "$DUMPBIN"` - tmp=`which "$tmp"` - # If file exists with .exe appended, that's the real filename - # and cygpath needs that to convert to short style path. - if test -f "${tmp}.exe"; then - tmp="${tmp}.exe" - elif test -f "${tmp}.cmd"; then - tmp="${tmp}.cmd" - fi - # Convert to C:/ mixed style path without spaces. - tmp=`$CYGPATH -s -m "$tmp"` + # First separate the path from the arguments. This will split at the first + # space. + complete="$DUMPBIN" + path="${complete%% *}" + tmp="$complete EOL" + arguments="${tmp#* }" + + # Input might be given as Windows format, start by converting to + # unix format. + new_path=`$CYGPATH -u "$path"` + + # Now try to locate executable using which + new_path=`$WHICH "$new_path" 2> /dev/null` + # bat and cmd files are not always considered executable in cygwin causing which + # to not find them + if test "x$new_path" = x \ + && test "x`$ECHO \"$path\" | $GREP -e \"\\.bat$\" -e \"\\.cmd$\"`" != x \ + && test "x`$LS \"$path\" 2>/dev/null`" != x; then + new_path=`$CYGPATH -u "$path"` + fi + if test "x$new_path" = x; then + # Oops. Which didn't find the executable. + # The splitting of arguments from the executable at a space might have been incorrect, + # since paths with space are more likely in Windows. Give it another try with the whole + # argument. + path="$complete" + arguments="EOL" + new_path=`$CYGPATH -u "$path"` + new_path=`$WHICH "$new_path" 2> /dev/null` + # bat and cmd files are not always considered executable in cygwin causing which + # to not find them + if test "x$new_path" = x \ + && test "x`$ECHO \"$path\" | $GREP -e \"\\.bat$\" -e \"\\.cmd$\"`" != x \ + && test "x`$LS \"$path\" 2>/dev/null`" != x; then + new_path=`$CYGPATH -u "$path"` fi - DUMPBIN="$tmp" + if test "x$new_path" = x; then + # It's still not found. Now this is an unrecoverable error. + { $as_echo "$as_me:${as_lineno-$LINENO}: The path of DUMPBIN, which resolves as \"$complete\", is not found." >&5 +$as_echo "$as_me: The path of DUMPBIN, which resolves as \"$complete\", is not found." >&6;} + has_space=`$ECHO "$complete" | $GREP " "` + if test "x$has_space" != x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: You might be mixing spaces in the path and extra arguments, which is not allowed." >&5 +$as_echo "$as_me: You might be mixing spaces in the path and extra arguments, which is not allowed." >&6;} + fi + as_fn_error $? "Cannot locate the the path of DUMPBIN" "$LINENO" 5 + fi + fi + + # Cygwin tries to hide some aspects of the Windows file system, such that binaries are + # named .exe but called without that suffix. Therefore, "foo" and "foo.exe" are considered + # the same file, most of the time (as in "test -f"). But not when running cygpath -s, then + # "foo.exe" is OK but "foo" is an error. + # + # This test is therefore slightly more accurate than "test -f" to check for file precense. + # It is also a way to make sure we got the proper file name for the real test later on. + test_shortpath=`$CYGPATH -s -m "$new_path" 2> /dev/null` + if test "x$test_shortpath" = x; then + # Short path failed, file does not exist as specified. + # Try adding .exe or .cmd + if test -f "${new_path}.exe"; then + input_to_shortpath="${new_path}.exe" + elif test -f "${new_path}.cmd"; then + input_to_shortpath="${new_path}.cmd" + else + { $as_echo "$as_me:${as_lineno-$LINENO}: The path of DUMPBIN, which resolves as \"$new_path\", is invalid." >&5 +$as_echo "$as_me: The path of DUMPBIN, which resolves as \"$new_path\", is invalid." >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: Neither \"$new_path\" nor \"$new_path.exe/cmd\" can be found" >&5 +$as_echo "$as_me: Neither \"$new_path\" nor \"$new_path.exe/cmd\" can be found" >&6;} + as_fn_error $? "Cannot locate the the path of DUMPBIN" "$LINENO" 5 + fi + else + input_to_shortpath="$new_path" + fi + + # Call helper function which possibly converts this using DOS-style short mode. + # If so, the updated path is stored in $new_path. + new_path="$input_to_shortpath" + + input_path="$input_to_shortpath" + # Check if we need to convert this using DOS-style short mode. If the path + # contains just simple characters, use it. Otherwise (spaces, weird characters), + # take no chances and rewrite it. + # Note: m4 eats our [], so we need to use [ and ] instead. + has_forbidden_chars=`$ECHO "$input_path" | $GREP [^-._/a-zA-Z0-9]` + if test "x$has_forbidden_chars" != x; then + # Now convert it to mixed DOS-style, short mode (no spaces, and / instead of \) + shortmode_path=`$CYGPATH -s -m -a "$input_path"` + path_after_shortmode=`$CYGPATH -u "$shortmode_path"` + if test "x$path_after_shortmode" != "x$input_to_shortpath"; then + # Going to short mode and back again did indeed matter. Since short mode is + # case insensitive, let's make it lowercase to improve readability. + shortmode_path=`$ECHO "$shortmode_path" | $TR 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` + # Now convert it back to Unix-stile (cygpath) + input_path=`$CYGPATH -u "$shortmode_path"` + new_path="$input_path" + fi + fi + + test_cygdrive_prefix=`$ECHO $input_path | $GREP ^/cygdrive/` + if test "x$test_cygdrive_prefix" = x; then + # As a simple fix, exclude /usr/bin since it's not a real path. + if test "x`$ECHO $input_to_shortpath | $GREP ^/usr/bin/`" = x; then + # The path is in a Cygwin special directory (e.g. /home). We need this converted to + # a path prefixed by /cygdrive for fixpath to work. + new_path="$CYGWIN_ROOT_PATH$input_path" + fi + fi + + # remove trailing .exe if any + new_path="${new_path/%.exe/}" + + elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then + + # First separate the path from the arguments. This will split at the first + # space. + complete="$DUMPBIN" + path="${complete%% *}" + tmp="$complete EOL" + arguments="${tmp#* }" + + # Input might be given as Windows format, start by converting to + # unix format. + new_path="$path" + + windows_path="$new_path" + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then + unix_path=`$CYGPATH -u "$windows_path"` + new_path="$unix_path" + elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then + unix_path=`$ECHO "$windows_path" | $SED -e 's,^\\(.\\):,/\\1,g' -e 's,\\\\,/,g'` + new_path="$unix_path" + fi + + + # Now try to locate executable using which + new_path=`$WHICH "$new_path" 2> /dev/null` + + if test "x$new_path" = x; then + # Oops. Which didn't find the executable. + # The splitting of arguments from the executable at a space might have been incorrect, + # since paths with space are more likely in Windows. Give it another try with the whole + # argument. + path="$complete" + arguments="EOL" + new_path="$path" + + windows_path="$new_path" + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then + unix_path=`$CYGPATH -u "$windows_path"` + new_path="$unix_path" + elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then + unix_path=`$ECHO "$windows_path" | $SED -e 's,^\\(.\\):,/\\1,g' -e 's,\\\\,/,g'` + new_path="$unix_path" + fi + + + new_path=`$WHICH "$new_path" 2> /dev/null` + + if test "x$new_path" = x; then + # It's still not found. Now this is an unrecoverable error. + { $as_echo "$as_me:${as_lineno-$LINENO}: The path of DUMPBIN, which resolves as \"$complete\", is not found." >&5 +$as_echo "$as_me: The path of DUMPBIN, which resolves as \"$complete\", is not found." >&6;} + has_space=`$ECHO "$complete" | $GREP " "` + if test "x$has_space" != x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: You might be mixing spaces in the path and extra arguments, which is not allowed." >&5 +$as_echo "$as_me: You might be mixing spaces in the path and extra arguments, which is not allowed." >&6;} + fi + as_fn_error $? "Cannot locate the the path of DUMPBIN" "$LINENO" 5 + fi + fi + + # Now new_path has a complete unix path to the binary + if test "x`$ECHO $new_path | $GREP ^/bin/`" != x; then + # Keep paths in /bin as-is, but remove trailing .exe if any + new_path="${new_path/%.exe/}" + # Do not save /bin paths to all_fixpath_prefixes! + else + # Not in mixed or Windows style, start by that. + new_path=`cmd //c echo $new_path` + + input_path="$new_path" + # Check if we need to convert this using DOS-style short mode. If the path + # contains just simple characters, use it. Otherwise (spaces, weird characters), + # take no chances and rewrite it. + # Note: m4 eats our [], so we need to use [ and ] instead. + has_forbidden_chars=`$ECHO "$input_path" | $GREP [^-_/:a-zA-Z0-9]` + if test "x$has_forbidden_chars" != x; then + # Now convert it to mixed DOS-style, short mode (no spaces, and / instead of \) + new_path=`cmd /c "for %A in (\"$input_path\") do @echo %~sA"|$TR \\\\\\\\ / | $TR 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` + fi + + # Output is in $new_path + + windows_path="$new_path" + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then + unix_path=`$CYGPATH -u "$windows_path"` + new_path="$unix_path" + elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then + unix_path=`$ECHO "$windows_path" | $SED -e 's,^\\(.\\):,/\\1,g' -e 's,\\\\,/,g'` + new_path="$unix_path" + fi + + # remove trailing .exe if any + new_path="${new_path/%.exe/}" + + # Save the first 10 bytes of this path to the storage, so fixpath can work. + all_fixpath_prefixes=("${all_fixpath_prefixes[@]}" "${new_path:0:10}") + fi + + else + # We're on a posix platform. Hooray! :) + # First separate the path from the arguments. This will split at the first + # space. + complete="$DUMPBIN" + path="${complete%% *}" + tmp="$complete EOL" + arguments="${tmp#* }" + + new_path=`$WHICH $path 2> /dev/null` + if test "x$new_path" = x; then + is_absolute_path=`$ECHO "$path" | $GREP ^/` + if test "x$is_absolute_path" != x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: Resolving DUMPBIN (as $path) with 'which' failed, using $path directly." >&5 +$as_echo "$as_me: Resolving DUMPBIN (as $path) with 'which' failed, using $path directly." >&6;} + new_path="$path" + else + { $as_echo "$as_me:${as_lineno-$LINENO}: The path of DUMPBIN, which resolves as \"$complete\", is not found." >&5 +$as_echo "$as_me: The path of DUMPBIN, which resolves as \"$complete\", is not found." >&6;} + has_space=`$ECHO "$complete" | $GREP " "` + if test "x$has_space" != x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: This might be caused by spaces in the path, which is not allowed." >&5 +$as_echo "$as_me: This might be caused by spaces in the path, which is not allowed." >&6;} + fi + as_fn_error $? "Cannot locate the the path of DUMPBIN" "$LINENO" 5 + fi + fi + fi + + # Now join together the path and the arguments once again + if test "x$arguments" != xEOL; then + new_complete="$new_path ${arguments% *}" + else + new_complete="$new_path" + fi + + if test "x$complete" != "x$new_complete"; then + DUMPBIN="$new_complete" + { $as_echo "$as_me:${as_lineno-$LINENO}: Rewriting DUMPBIN to \"$new_complete\"" >&5 +$as_echo "$as_me: Rewriting DUMPBIN to \"$new_complete\"" >&6;} + fi COMPILER_TYPE=CL @@ -13118,47 +22926,259 @@ ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ex ac_compiler_gnu=$ac_cv_cxx_compiler_gnu - # Translate "gcc -E" into "`which gcc` -E" ie - # extract the full path to the binary and at the - # same time maintain any arguments passed to it. - # The command MUST exist in the path, or else! - tmp="$CPP" - car="${tmp%% *}" - tmp="$CPP EOL" - cdr="${tmp#* }" - # On windows we want paths without spaces. - if test "x$OPENJDK_BUILD_OS" = "xwindows"; then + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then - # Translate long cygdrive or C:\sdfsf path - # into a short mixed mode path that has no - # spaces in it. - tmp="$car" + # First separate the path from the arguments. This will split at the first + # space. + complete="$CPP" + path="${complete%% *}" + tmp="$complete EOL" + arguments="${tmp#* }" - if test "x$OPENJDK_BUILD_OS" = "xwindows"; then - tmp=`$CYGPATH -u "$car"` - tmp=`which "$tmp"` - # If file exists with .exe appended, that's the real filename - # and cygpath needs that to convert to short style path. - if test -f "${tmp}.exe"; then - tmp="${tmp}.exe" - elif test -f "${tmp}.cmd"; then - tmp="${tmp}.cmd" + # Input might be given as Windows format, start by converting to + # unix format. + new_path=`$CYGPATH -u "$path"` + + # Now try to locate executable using which + new_path=`$WHICH "$new_path" 2> /dev/null` + # bat and cmd files are not always considered executable in cygwin causing which + # to not find them + if test "x$new_path" = x \ + && test "x`$ECHO \"$path\" | $GREP -e \"\\.bat$\" -e \"\\.cmd$\"`" != x \ + && test "x`$LS \"$path\" 2>/dev/null`" != x; then + new_path=`$CYGPATH -u "$path"` + fi + if test "x$new_path" = x; then + # Oops. Which didn't find the executable. + # The splitting of arguments from the executable at a space might have been incorrect, + # since paths with space are more likely in Windows. Give it another try with the whole + # argument. + path="$complete" + arguments="EOL" + new_path=`$CYGPATH -u "$path"` + new_path=`$WHICH "$new_path" 2> /dev/null` + # bat and cmd files are not always considered executable in cygwin causing which + # to not find them + if test "x$new_path" = x \ + && test "x`$ECHO \"$path\" | $GREP -e \"\\.bat$\" -e \"\\.cmd$\"`" != x \ + && test "x`$LS \"$path\" 2>/dev/null`" != x; then + new_path=`$CYGPATH -u "$path"` + fi + if test "x$new_path" = x; then + # It's still not found. Now this is an unrecoverable error. + { $as_echo "$as_me:${as_lineno-$LINENO}: The path of CPP, which resolves as \"$complete\", is not found." >&5 +$as_echo "$as_me: The path of CPP, which resolves as \"$complete\", is not found." >&6;} + has_space=`$ECHO "$complete" | $GREP " "` + if test "x$has_space" != x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: You might be mixing spaces in the path and extra arguments, which is not allowed." >&5 +$as_echo "$as_me: You might be mixing spaces in the path and extra arguments, which is not allowed." >&6;} + fi + as_fn_error $? "Cannot locate the the path of CPP" "$LINENO" 5 + fi + fi + + # Cygwin tries to hide some aspects of the Windows file system, such that binaries are + # named .exe but called without that suffix. Therefore, "foo" and "foo.exe" are considered + # the same file, most of the time (as in "test -f"). But not when running cygpath -s, then + # "foo.exe" is OK but "foo" is an error. + # + # This test is therefore slightly more accurate than "test -f" to check for file precense. + # It is also a way to make sure we got the proper file name for the real test later on. + test_shortpath=`$CYGPATH -s -m "$new_path" 2> /dev/null` + if test "x$test_shortpath" = x; then + # Short path failed, file does not exist as specified. + # Try adding .exe or .cmd + if test -f "${new_path}.exe"; then + input_to_shortpath="${new_path}.exe" + elif test -f "${new_path}.cmd"; then + input_to_shortpath="${new_path}.cmd" + else + { $as_echo "$as_me:${as_lineno-$LINENO}: The path of CPP, which resolves as \"$new_path\", is invalid." >&5 +$as_echo "$as_me: The path of CPP, which resolves as \"$new_path\", is invalid." >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: Neither \"$new_path\" nor \"$new_path.exe/cmd\" can be found" >&5 +$as_echo "$as_me: Neither \"$new_path\" nor \"$new_path.exe/cmd\" can be found" >&6;} + as_fn_error $? "Cannot locate the the path of CPP" "$LINENO" 5 + fi + else + input_to_shortpath="$new_path" + fi + + # Call helper function which possibly converts this using DOS-style short mode. + # If so, the updated path is stored in $new_path. + new_path="$input_to_shortpath" + + input_path="$input_to_shortpath" + # Check if we need to convert this using DOS-style short mode. If the path + # contains just simple characters, use it. Otherwise (spaces, weird characters), + # take no chances and rewrite it. + # Note: m4 eats our [], so we need to use [ and ] instead. + has_forbidden_chars=`$ECHO "$input_path" | $GREP [^-._/a-zA-Z0-9]` + if test "x$has_forbidden_chars" != x; then + # Now convert it to mixed DOS-style, short mode (no spaces, and / instead of \) + shortmode_path=`$CYGPATH -s -m -a "$input_path"` + path_after_shortmode=`$CYGPATH -u "$shortmode_path"` + if test "x$path_after_shortmode" != "x$input_to_shortpath"; then + # Going to short mode and back again did indeed matter. Since short mode is + # case insensitive, let's make it lowercase to improve readability. + shortmode_path=`$ECHO "$shortmode_path" | $TR 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` + # Now convert it back to Unix-stile (cygpath) + input_path=`$CYGPATH -u "$shortmode_path"` + new_path="$input_path" + fi + fi + + test_cygdrive_prefix=`$ECHO $input_path | $GREP ^/cygdrive/` + if test "x$test_cygdrive_prefix" = x; then + # As a simple fix, exclude /usr/bin since it's not a real path. + if test "x`$ECHO $input_to_shortpath | $GREP ^/usr/bin/`" = x; then + # The path is in a Cygwin special directory (e.g. /home). We need this converted to + # a path prefixed by /cygdrive for fixpath to work. + new_path="$CYGWIN_ROOT_PATH$input_path" + fi + fi + + # remove trailing .exe if any + new_path="${new_path/%.exe/}" + + elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then + + # First separate the path from the arguments. This will split at the first + # space. + complete="$CPP" + path="${complete%% *}" + tmp="$complete EOL" + arguments="${tmp#* }" + + # Input might be given as Windows format, start by converting to + # unix format. + new_path="$path" + + windows_path="$new_path" + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then + unix_path=`$CYGPATH -u "$windows_path"` + new_path="$unix_path" + elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then + unix_path=`$ECHO "$windows_path" | $SED -e 's,^\\(.\\):,/\\1,g' -e 's,\\\\,/,g'` + new_path="$unix_path" + fi + + + # Now try to locate executable using which + new_path=`$WHICH "$new_path" 2> /dev/null` + + if test "x$new_path" = x; then + # Oops. Which didn't find the executable. + # The splitting of arguments from the executable at a space might have been incorrect, + # since paths with space are more likely in Windows. Give it another try with the whole + # argument. + path="$complete" + arguments="EOL" + new_path="$path" + + windows_path="$new_path" + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then + unix_path=`$CYGPATH -u "$windows_path"` + new_path="$unix_path" + elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then + unix_path=`$ECHO "$windows_path" | $SED -e 's,^\\(.\\):,/\\1,g' -e 's,\\\\,/,g'` + new_path="$unix_path" + fi + + + new_path=`$WHICH "$new_path" 2> /dev/null` + + if test "x$new_path" = x; then + # It's still not found. Now this is an unrecoverable error. + { $as_echo "$as_me:${as_lineno-$LINENO}: The path of CPP, which resolves as \"$complete\", is not found." >&5 +$as_echo "$as_me: The path of CPP, which resolves as \"$complete\", is not found." >&6;} + has_space=`$ECHO "$complete" | $GREP " "` + if test "x$has_space" != x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: You might be mixing spaces in the path and extra arguments, which is not allowed." >&5 +$as_echo "$as_me: You might be mixing spaces in the path and extra arguments, which is not allowed." >&6;} + fi + as_fn_error $? "Cannot locate the the path of CPP" "$LINENO" 5 + fi + fi + + # Now new_path has a complete unix path to the binary + if test "x`$ECHO $new_path | $GREP ^/bin/`" != x; then + # Keep paths in /bin as-is, but remove trailing .exe if any + new_path="${new_path/%.exe/}" + # Do not save /bin paths to all_fixpath_prefixes! + else + # Not in mixed or Windows style, start by that. + new_path=`cmd //c echo $new_path` + + input_path="$new_path" + # Check if we need to convert this using DOS-style short mode. If the path + # contains just simple characters, use it. Otherwise (spaces, weird characters), + # take no chances and rewrite it. + # Note: m4 eats our [], so we need to use [ and ] instead. + has_forbidden_chars=`$ECHO "$input_path" | $GREP [^-_/:a-zA-Z0-9]` + if test "x$has_forbidden_chars" != x; then + # Now convert it to mixed DOS-style, short mode (no spaces, and / instead of \) + new_path=`cmd /c "for %A in (\"$input_path\") do @echo %~sA"|$TR \\\\\\\\ / | $TR 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` + fi + + # Output is in $new_path + + windows_path="$new_path" + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then + unix_path=`$CYGPATH -u "$windows_path"` + new_path="$unix_path" + elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then + unix_path=`$ECHO "$windows_path" | $SED -e 's,^\\(.\\):,/\\1,g' -e 's,\\\\,/,g'` + new_path="$unix_path" + fi + + # remove trailing .exe if any + new_path="${new_path/%.exe/}" + + # Save the first 10 bytes of this path to the storage, so fixpath can work. + all_fixpath_prefixes=("${all_fixpath_prefixes[@]}" "${new_path:0:10}") + fi + + else + # We're on a posix platform. Hooray! :) + # First separate the path from the arguments. This will split at the first + # space. + complete="$CPP" + path="${complete%% *}" + tmp="$complete EOL" + arguments="${tmp#* }" + + new_path=`$WHICH $path 2> /dev/null` + if test "x$new_path" = x; then + is_absolute_path=`$ECHO "$path" | $GREP ^/` + if test "x$is_absolute_path" != x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: Resolving CPP (as $path) with 'which' failed, using $path directly." >&5 +$as_echo "$as_me: Resolving CPP (as $path) with 'which' failed, using $path directly." >&6;} + new_path="$path" + else + { $as_echo "$as_me:${as_lineno-$LINENO}: The path of CPP, which resolves as \"$complete\", is not found." >&5 +$as_echo "$as_me: The path of CPP, which resolves as \"$complete\", is not found." >&6;} + has_space=`$ECHO "$complete" | $GREP " "` + if test "x$has_space" != x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: This might be caused by spaces in the path, which is not allowed." >&5 +$as_echo "$as_me: This might be caused by spaces in the path, which is not allowed." >&6;} fi - # Convert to C:/ mixed style path without spaces. - tmp=`$CYGPATH -s -m "$tmp"` + as_fn_error $? "Cannot locate the the path of CPP" "$LINENO" 5 + fi fi - car="$tmp" + fi - else - # "which" is not portable, but is used here - # because we know that the command exists! - car=`which $car` - fi - if test "x$cdr" != xEOL; then - CPP="$car ${cdr% *}" - else - CPP="$car" - fi + # Now join together the path and the arguments once again + if test "x$arguments" != xEOL; then + new_complete="$new_path ${arguments% *}" + else + new_complete="$new_path" + fi + + if test "x$complete" != "x$new_complete"; then + CPP="$new_complete" + { $as_echo "$as_me:${as_lineno-$LINENO}: Rewriting CPP to \"$new_complete\"" >&5 +$as_echo "$as_me: Rewriting CPP to \"$new_complete\"" >&6;} + fi ac_ext=cpp @@ -13295,47 +23315,259 @@ ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ex ac_compiler_gnu=$ac_cv_cxx_compiler_gnu - # Translate "gcc -E" into "`which gcc` -E" ie - # extract the full path to the binary and at the - # same time maintain any arguments passed to it. - # The command MUST exist in the path, or else! - tmp="$CXXCPP" - car="${tmp%% *}" - tmp="$CXXCPP EOL" - cdr="${tmp#* }" - # On windows we want paths without spaces. - if test "x$OPENJDK_BUILD_OS" = "xwindows"; then + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then - # Translate long cygdrive or C:\sdfsf path - # into a short mixed mode path that has no - # spaces in it. - tmp="$car" + # First separate the path from the arguments. This will split at the first + # space. + complete="$CXXCPP" + path="${complete%% *}" + tmp="$complete EOL" + arguments="${tmp#* }" - if test "x$OPENJDK_BUILD_OS" = "xwindows"; then - tmp=`$CYGPATH -u "$car"` - tmp=`which "$tmp"` - # If file exists with .exe appended, that's the real filename - # and cygpath needs that to convert to short style path. - if test -f "${tmp}.exe"; then - tmp="${tmp}.exe" - elif test -f "${tmp}.cmd"; then - tmp="${tmp}.cmd" + # Input might be given as Windows format, start by converting to + # unix format. + new_path=`$CYGPATH -u "$path"` + + # Now try to locate executable using which + new_path=`$WHICH "$new_path" 2> /dev/null` + # bat and cmd files are not always considered executable in cygwin causing which + # to not find them + if test "x$new_path" = x \ + && test "x`$ECHO \"$path\" | $GREP -e \"\\.bat$\" -e \"\\.cmd$\"`" != x \ + && test "x`$LS \"$path\" 2>/dev/null`" != x; then + new_path=`$CYGPATH -u "$path"` + fi + if test "x$new_path" = x; then + # Oops. Which didn't find the executable. + # The splitting of arguments from the executable at a space might have been incorrect, + # since paths with space are more likely in Windows. Give it another try with the whole + # argument. + path="$complete" + arguments="EOL" + new_path=`$CYGPATH -u "$path"` + new_path=`$WHICH "$new_path" 2> /dev/null` + # bat and cmd files are not always considered executable in cygwin causing which + # to not find them + if test "x$new_path" = x \ + && test "x`$ECHO \"$path\" | $GREP -e \"\\.bat$\" -e \"\\.cmd$\"`" != x \ + && test "x`$LS \"$path\" 2>/dev/null`" != x; then + new_path=`$CYGPATH -u "$path"` + fi + if test "x$new_path" = x; then + # It's still not found. Now this is an unrecoverable error. + { $as_echo "$as_me:${as_lineno-$LINENO}: The path of CXXCPP, which resolves as \"$complete\", is not found." >&5 +$as_echo "$as_me: The path of CXXCPP, which resolves as \"$complete\", is not found." >&6;} + has_space=`$ECHO "$complete" | $GREP " "` + if test "x$has_space" != x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: You might be mixing spaces in the path and extra arguments, which is not allowed." >&5 +$as_echo "$as_me: You might be mixing spaces in the path and extra arguments, which is not allowed." >&6;} + fi + as_fn_error $? "Cannot locate the the path of CXXCPP" "$LINENO" 5 + fi + fi + + # Cygwin tries to hide some aspects of the Windows file system, such that binaries are + # named .exe but called without that suffix. Therefore, "foo" and "foo.exe" are considered + # the same file, most of the time (as in "test -f"). But not when running cygpath -s, then + # "foo.exe" is OK but "foo" is an error. + # + # This test is therefore slightly more accurate than "test -f" to check for file precense. + # It is also a way to make sure we got the proper file name for the real test later on. + test_shortpath=`$CYGPATH -s -m "$new_path" 2> /dev/null` + if test "x$test_shortpath" = x; then + # Short path failed, file does not exist as specified. + # Try adding .exe or .cmd + if test -f "${new_path}.exe"; then + input_to_shortpath="${new_path}.exe" + elif test -f "${new_path}.cmd"; then + input_to_shortpath="${new_path}.cmd" + else + { $as_echo "$as_me:${as_lineno-$LINENO}: The path of CXXCPP, which resolves as \"$new_path\", is invalid." >&5 +$as_echo "$as_me: The path of CXXCPP, which resolves as \"$new_path\", is invalid." >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: Neither \"$new_path\" nor \"$new_path.exe/cmd\" can be found" >&5 +$as_echo "$as_me: Neither \"$new_path\" nor \"$new_path.exe/cmd\" can be found" >&6;} + as_fn_error $? "Cannot locate the the path of CXXCPP" "$LINENO" 5 + fi + else + input_to_shortpath="$new_path" + fi + + # Call helper function which possibly converts this using DOS-style short mode. + # If so, the updated path is stored in $new_path. + new_path="$input_to_shortpath" + + input_path="$input_to_shortpath" + # Check if we need to convert this using DOS-style short mode. If the path + # contains just simple characters, use it. Otherwise (spaces, weird characters), + # take no chances and rewrite it. + # Note: m4 eats our [], so we need to use [ and ] instead. + has_forbidden_chars=`$ECHO "$input_path" | $GREP [^-._/a-zA-Z0-9]` + if test "x$has_forbidden_chars" != x; then + # Now convert it to mixed DOS-style, short mode (no spaces, and / instead of \) + shortmode_path=`$CYGPATH -s -m -a "$input_path"` + path_after_shortmode=`$CYGPATH -u "$shortmode_path"` + if test "x$path_after_shortmode" != "x$input_to_shortpath"; then + # Going to short mode and back again did indeed matter. Since short mode is + # case insensitive, let's make it lowercase to improve readability. + shortmode_path=`$ECHO "$shortmode_path" | $TR 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` + # Now convert it back to Unix-stile (cygpath) + input_path=`$CYGPATH -u "$shortmode_path"` + new_path="$input_path" + fi + fi + + test_cygdrive_prefix=`$ECHO $input_path | $GREP ^/cygdrive/` + if test "x$test_cygdrive_prefix" = x; then + # As a simple fix, exclude /usr/bin since it's not a real path. + if test "x`$ECHO $input_to_shortpath | $GREP ^/usr/bin/`" = x; then + # The path is in a Cygwin special directory (e.g. /home). We need this converted to + # a path prefixed by /cygdrive for fixpath to work. + new_path="$CYGWIN_ROOT_PATH$input_path" + fi + fi + + # remove trailing .exe if any + new_path="${new_path/%.exe/}" + + elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then + + # First separate the path from the arguments. This will split at the first + # space. + complete="$CXXCPP" + path="${complete%% *}" + tmp="$complete EOL" + arguments="${tmp#* }" + + # Input might be given as Windows format, start by converting to + # unix format. + new_path="$path" + + windows_path="$new_path" + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then + unix_path=`$CYGPATH -u "$windows_path"` + new_path="$unix_path" + elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then + unix_path=`$ECHO "$windows_path" | $SED -e 's,^\\(.\\):,/\\1,g' -e 's,\\\\,/,g'` + new_path="$unix_path" + fi + + + # Now try to locate executable using which + new_path=`$WHICH "$new_path" 2> /dev/null` + + if test "x$new_path" = x; then + # Oops. Which didn't find the executable. + # The splitting of arguments from the executable at a space might have been incorrect, + # since paths with space are more likely in Windows. Give it another try with the whole + # argument. + path="$complete" + arguments="EOL" + new_path="$path" + + windows_path="$new_path" + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then + unix_path=`$CYGPATH -u "$windows_path"` + new_path="$unix_path" + elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then + unix_path=`$ECHO "$windows_path" | $SED -e 's,^\\(.\\):,/\\1,g' -e 's,\\\\,/,g'` + new_path="$unix_path" + fi + + + new_path=`$WHICH "$new_path" 2> /dev/null` + + if test "x$new_path" = x; then + # It's still not found. Now this is an unrecoverable error. + { $as_echo "$as_me:${as_lineno-$LINENO}: The path of CXXCPP, which resolves as \"$complete\", is not found." >&5 +$as_echo "$as_me: The path of CXXCPP, which resolves as \"$complete\", is not found." >&6;} + has_space=`$ECHO "$complete" | $GREP " "` + if test "x$has_space" != x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: You might be mixing spaces in the path and extra arguments, which is not allowed." >&5 +$as_echo "$as_me: You might be mixing spaces in the path and extra arguments, which is not allowed." >&6;} + fi + as_fn_error $? "Cannot locate the the path of CXXCPP" "$LINENO" 5 + fi + fi + + # Now new_path has a complete unix path to the binary + if test "x`$ECHO $new_path | $GREP ^/bin/`" != x; then + # Keep paths in /bin as-is, but remove trailing .exe if any + new_path="${new_path/%.exe/}" + # Do not save /bin paths to all_fixpath_prefixes! + else + # Not in mixed or Windows style, start by that. + new_path=`cmd //c echo $new_path` + + input_path="$new_path" + # Check if we need to convert this using DOS-style short mode. If the path + # contains just simple characters, use it. Otherwise (spaces, weird characters), + # take no chances and rewrite it. + # Note: m4 eats our [], so we need to use [ and ] instead. + has_forbidden_chars=`$ECHO "$input_path" | $GREP [^-_/:a-zA-Z0-9]` + if test "x$has_forbidden_chars" != x; then + # Now convert it to mixed DOS-style, short mode (no spaces, and / instead of \) + new_path=`cmd /c "for %A in (\"$input_path\") do @echo %~sA"|$TR \\\\\\\\ / | $TR 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` + fi + + # Output is in $new_path + + windows_path="$new_path" + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then + unix_path=`$CYGPATH -u "$windows_path"` + new_path="$unix_path" + elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then + unix_path=`$ECHO "$windows_path" | $SED -e 's,^\\(.\\):,/\\1,g' -e 's,\\\\,/,g'` + new_path="$unix_path" + fi + + # remove trailing .exe if any + new_path="${new_path/%.exe/}" + + # Save the first 10 bytes of this path to the storage, so fixpath can work. + all_fixpath_prefixes=("${all_fixpath_prefixes[@]}" "${new_path:0:10}") + fi + + else + # We're on a posix platform. Hooray! :) + # First separate the path from the arguments. This will split at the first + # space. + complete="$CXXCPP" + path="${complete%% *}" + tmp="$complete EOL" + arguments="${tmp#* }" + + new_path=`$WHICH $path 2> /dev/null` + if test "x$new_path" = x; then + is_absolute_path=`$ECHO "$path" | $GREP ^/` + if test "x$is_absolute_path" != x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: Resolving CXXCPP (as $path) with 'which' failed, using $path directly." >&5 +$as_echo "$as_me: Resolving CXXCPP (as $path) with 'which' failed, using $path directly." >&6;} + new_path="$path" + else + { $as_echo "$as_me:${as_lineno-$LINENO}: The path of CXXCPP, which resolves as \"$complete\", is not found." >&5 +$as_echo "$as_me: The path of CXXCPP, which resolves as \"$complete\", is not found." >&6;} + has_space=`$ECHO "$complete" | $GREP " "` + if test "x$has_space" != x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: This might be caused by spaces in the path, which is not allowed." >&5 +$as_echo "$as_me: This might be caused by spaces in the path, which is not allowed." >&6;} fi - # Convert to C:/ mixed style path without spaces. - tmp=`$CYGPATH -s -m "$tmp"` + as_fn_error $? "Cannot locate the the path of CXXCPP" "$LINENO" 5 + fi fi - car="$tmp" + fi - else - # "which" is not portable, but is used here - # because we know that the command exists! - car=`which $car` - fi - if test "x$cdr" != xEOL; then - CXXCPP="$car ${cdr% *}" - else - CXXCPP="$car" - fi + # Now join together the path and the arguments once again + if test "x$arguments" != xEOL; then + new_complete="$new_path ${arguments% *}" + else + new_complete="$new_path" + fi + + if test "x$complete" != "x$new_complete"; then + CXXCPP="$new_complete" + { $as_echo "$as_me:${as_lineno-$LINENO}: Rewriting CXXCPP to \"$new_complete\"" >&5 +$as_echo "$as_me: Rewriting CXXCPP to \"$new_complete\"" >&6;} + fi if test "x$COMPILE_TYPE" != "xcross"; then @@ -13359,7 +23591,7 @@ if test "x$OPENJDK_BUILD_OS" = xsolaris; then fi # Find the right assembler. -if test "x$OPENJDK_BUILD_OS" = xsolaris; then +if test "x$OPENJDK_TARGET_OS" = xsolaris; then # Extract the first word of "as", so it can be a program name with args. set dummy as; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 @@ -13401,54 +23633,266 @@ fi - # Translate "gcc -E" into "`which gcc` -E" ie - # extract the full path to the binary and at the - # same time maintain any arguments passed to it. - # The command MUST exist in the path, or else! - tmp="$AS" - car="${tmp%% *}" - tmp="$AS EOL" - cdr="${tmp#* }" - # On windows we want paths without spaces. - if test "x$OPENJDK_BUILD_OS" = "xwindows"; then + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then - # Translate long cygdrive or C:\sdfsf path - # into a short mixed mode path that has no - # spaces in it. - tmp="$car" + # First separate the path from the arguments. This will split at the first + # space. + complete="$AS" + path="${complete%% *}" + tmp="$complete EOL" + arguments="${tmp#* }" - if test "x$OPENJDK_BUILD_OS" = "xwindows"; then - tmp=`$CYGPATH -u "$car"` - tmp=`which "$tmp"` - # If file exists with .exe appended, that's the real filename - # and cygpath needs that to convert to short style path. - if test -f "${tmp}.exe"; then - tmp="${tmp}.exe" - elif test -f "${tmp}.cmd"; then - tmp="${tmp}.cmd" + # Input might be given as Windows format, start by converting to + # unix format. + new_path=`$CYGPATH -u "$path"` + + # Now try to locate executable using which + new_path=`$WHICH "$new_path" 2> /dev/null` + # bat and cmd files are not always considered executable in cygwin causing which + # to not find them + if test "x$new_path" = x \ + && test "x`$ECHO \"$path\" | $GREP -e \"\\.bat$\" -e \"\\.cmd$\"`" != x \ + && test "x`$LS \"$path\" 2>/dev/null`" != x; then + new_path=`$CYGPATH -u "$path"` + fi + if test "x$new_path" = x; then + # Oops. Which didn't find the executable. + # The splitting of arguments from the executable at a space might have been incorrect, + # since paths with space are more likely in Windows. Give it another try with the whole + # argument. + path="$complete" + arguments="EOL" + new_path=`$CYGPATH -u "$path"` + new_path=`$WHICH "$new_path" 2> /dev/null` + # bat and cmd files are not always considered executable in cygwin causing which + # to not find them + if test "x$new_path" = x \ + && test "x`$ECHO \"$path\" | $GREP -e \"\\.bat$\" -e \"\\.cmd$\"`" != x \ + && test "x`$LS \"$path\" 2>/dev/null`" != x; then + new_path=`$CYGPATH -u "$path"` + fi + if test "x$new_path" = x; then + # It's still not found. Now this is an unrecoverable error. + { $as_echo "$as_me:${as_lineno-$LINENO}: The path of AS, which resolves as \"$complete\", is not found." >&5 +$as_echo "$as_me: The path of AS, which resolves as \"$complete\", is not found." >&6;} + has_space=`$ECHO "$complete" | $GREP " "` + if test "x$has_space" != x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: You might be mixing spaces in the path and extra arguments, which is not allowed." >&5 +$as_echo "$as_me: You might be mixing spaces in the path and extra arguments, which is not allowed." >&6;} + fi + as_fn_error $? "Cannot locate the the path of AS" "$LINENO" 5 + fi + fi + + # Cygwin tries to hide some aspects of the Windows file system, such that binaries are + # named .exe but called without that suffix. Therefore, "foo" and "foo.exe" are considered + # the same file, most of the time (as in "test -f"). But not when running cygpath -s, then + # "foo.exe" is OK but "foo" is an error. + # + # This test is therefore slightly more accurate than "test -f" to check for file precense. + # It is also a way to make sure we got the proper file name for the real test later on. + test_shortpath=`$CYGPATH -s -m "$new_path" 2> /dev/null` + if test "x$test_shortpath" = x; then + # Short path failed, file does not exist as specified. + # Try adding .exe or .cmd + if test -f "${new_path}.exe"; then + input_to_shortpath="${new_path}.exe" + elif test -f "${new_path}.cmd"; then + input_to_shortpath="${new_path}.cmd" + else + { $as_echo "$as_me:${as_lineno-$LINENO}: The path of AS, which resolves as \"$new_path\", is invalid." >&5 +$as_echo "$as_me: The path of AS, which resolves as \"$new_path\", is invalid." >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: Neither \"$new_path\" nor \"$new_path.exe/cmd\" can be found" >&5 +$as_echo "$as_me: Neither \"$new_path\" nor \"$new_path.exe/cmd\" can be found" >&6;} + as_fn_error $? "Cannot locate the the path of AS" "$LINENO" 5 + fi + else + input_to_shortpath="$new_path" + fi + + # Call helper function which possibly converts this using DOS-style short mode. + # If so, the updated path is stored in $new_path. + new_path="$input_to_shortpath" + + input_path="$input_to_shortpath" + # Check if we need to convert this using DOS-style short mode. If the path + # contains just simple characters, use it. Otherwise (spaces, weird characters), + # take no chances and rewrite it. + # Note: m4 eats our [], so we need to use [ and ] instead. + has_forbidden_chars=`$ECHO "$input_path" | $GREP [^-._/a-zA-Z0-9]` + if test "x$has_forbidden_chars" != x; then + # Now convert it to mixed DOS-style, short mode (no spaces, and / instead of \) + shortmode_path=`$CYGPATH -s -m -a "$input_path"` + path_after_shortmode=`$CYGPATH -u "$shortmode_path"` + if test "x$path_after_shortmode" != "x$input_to_shortpath"; then + # Going to short mode and back again did indeed matter. Since short mode is + # case insensitive, let's make it lowercase to improve readability. + shortmode_path=`$ECHO "$shortmode_path" | $TR 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` + # Now convert it back to Unix-stile (cygpath) + input_path=`$CYGPATH -u "$shortmode_path"` + new_path="$input_path" + fi + fi + + test_cygdrive_prefix=`$ECHO $input_path | $GREP ^/cygdrive/` + if test "x$test_cygdrive_prefix" = x; then + # As a simple fix, exclude /usr/bin since it's not a real path. + if test "x`$ECHO $input_to_shortpath | $GREP ^/usr/bin/`" = x; then + # The path is in a Cygwin special directory (e.g. /home). We need this converted to + # a path prefixed by /cygdrive for fixpath to work. + new_path="$CYGWIN_ROOT_PATH$input_path" + fi + fi + + # remove trailing .exe if any + new_path="${new_path/%.exe/}" + + elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then + + # First separate the path from the arguments. This will split at the first + # space. + complete="$AS" + path="${complete%% *}" + tmp="$complete EOL" + arguments="${tmp#* }" + + # Input might be given as Windows format, start by converting to + # unix format. + new_path="$path" + + windows_path="$new_path" + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then + unix_path=`$CYGPATH -u "$windows_path"` + new_path="$unix_path" + elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then + unix_path=`$ECHO "$windows_path" | $SED -e 's,^\\(.\\):,/\\1,g' -e 's,\\\\,/,g'` + new_path="$unix_path" + fi + + + # Now try to locate executable using which + new_path=`$WHICH "$new_path" 2> /dev/null` + + if test "x$new_path" = x; then + # Oops. Which didn't find the executable. + # The splitting of arguments from the executable at a space might have been incorrect, + # since paths with space are more likely in Windows. Give it another try with the whole + # argument. + path="$complete" + arguments="EOL" + new_path="$path" + + windows_path="$new_path" + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then + unix_path=`$CYGPATH -u "$windows_path"` + new_path="$unix_path" + elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then + unix_path=`$ECHO "$windows_path" | $SED -e 's,^\\(.\\):,/\\1,g' -e 's,\\\\,/,g'` + new_path="$unix_path" + fi + + + new_path=`$WHICH "$new_path" 2> /dev/null` + + if test "x$new_path" = x; then + # It's still not found. Now this is an unrecoverable error. + { $as_echo "$as_me:${as_lineno-$LINENO}: The path of AS, which resolves as \"$complete\", is not found." >&5 +$as_echo "$as_me: The path of AS, which resolves as \"$complete\", is not found." >&6;} + has_space=`$ECHO "$complete" | $GREP " "` + if test "x$has_space" != x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: You might be mixing spaces in the path and extra arguments, which is not allowed." >&5 +$as_echo "$as_me: You might be mixing spaces in the path and extra arguments, which is not allowed." >&6;} + fi + as_fn_error $? "Cannot locate the the path of AS" "$LINENO" 5 + fi + fi + + # Now new_path has a complete unix path to the binary + if test "x`$ECHO $new_path | $GREP ^/bin/`" != x; then + # Keep paths in /bin as-is, but remove trailing .exe if any + new_path="${new_path/%.exe/}" + # Do not save /bin paths to all_fixpath_prefixes! + else + # Not in mixed or Windows style, start by that. + new_path=`cmd //c echo $new_path` + + input_path="$new_path" + # Check if we need to convert this using DOS-style short mode. If the path + # contains just simple characters, use it. Otherwise (spaces, weird characters), + # take no chances and rewrite it. + # Note: m4 eats our [], so we need to use [ and ] instead. + has_forbidden_chars=`$ECHO "$input_path" | $GREP [^-_/:a-zA-Z0-9]` + if test "x$has_forbidden_chars" != x; then + # Now convert it to mixed DOS-style, short mode (no spaces, and / instead of \) + new_path=`cmd /c "for %A in (\"$input_path\") do @echo %~sA"|$TR \\\\\\\\ / | $TR 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` + fi + + # Output is in $new_path + + windows_path="$new_path" + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then + unix_path=`$CYGPATH -u "$windows_path"` + new_path="$unix_path" + elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then + unix_path=`$ECHO "$windows_path" | $SED -e 's,^\\(.\\):,/\\1,g' -e 's,\\\\,/,g'` + new_path="$unix_path" + fi + + # remove trailing .exe if any + new_path="${new_path/%.exe/}" + + # Save the first 10 bytes of this path to the storage, so fixpath can work. + all_fixpath_prefixes=("${all_fixpath_prefixes[@]}" "${new_path:0:10}") + fi + + else + # We're on a posix platform. Hooray! :) + # First separate the path from the arguments. This will split at the first + # space. + complete="$AS" + path="${complete%% *}" + tmp="$complete EOL" + arguments="${tmp#* }" + + new_path=`$WHICH $path 2> /dev/null` + if test "x$new_path" = x; then + is_absolute_path=`$ECHO "$path" | $GREP ^/` + if test "x$is_absolute_path" != x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: Resolving AS (as $path) with 'which' failed, using $path directly." >&5 +$as_echo "$as_me: Resolving AS (as $path) with 'which' failed, using $path directly." >&6;} + new_path="$path" + else + { $as_echo "$as_me:${as_lineno-$LINENO}: The path of AS, which resolves as \"$complete\", is not found." >&5 +$as_echo "$as_me: The path of AS, which resolves as \"$complete\", is not found." >&6;} + has_space=`$ECHO "$complete" | $GREP " "` + if test "x$has_space" != x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: This might be caused by spaces in the path, which is not allowed." >&5 +$as_echo "$as_me: This might be caused by spaces in the path, which is not allowed." >&6;} fi - # Convert to C:/ mixed style path without spaces. - tmp=`$CYGPATH -s -m "$tmp"` + as_fn_error $? "Cannot locate the the path of AS" "$LINENO" 5 + fi fi - car="$tmp" + fi - else - # "which" is not portable, but is used here - # because we know that the command exists! - car=`which $car` - fi - if test "x$cdr" != xEOL; then - AS="$car ${cdr% *}" - else - AS="$car" - fi + # Now join together the path and the arguments once again + if test "x$arguments" != xEOL; then + new_complete="$new_path ${arguments% *}" + else + new_complete="$new_path" + fi + + if test "x$complete" != "x$new_complete"; then + AS="$new_complete" + { $as_echo "$as_me:${as_lineno-$LINENO}: Rewriting AS to \"$new_complete\"" >&5 +$as_echo "$as_me: Rewriting AS to \"$new_complete\"" >&6;} + fi else AS="$CC -c" fi -if test "x$OPENJDK_BUILD_OS" = xsolaris; then +if test "x$OPENJDK_TARGET_OS" = xsolaris; then for ac_prog in gnm nm do # Extract the first word of "$ac_prog", so it can be a program name with args. @@ -13495,47 +23939,259 @@ fi done - # Translate "gcc -E" into "`which gcc` -E" ie - # extract the full path to the binary and at the - # same time maintain any arguments passed to it. - # The command MUST exist in the path, or else! - tmp="$NM" - car="${tmp%% *}" - tmp="$NM EOL" - cdr="${tmp#* }" - # On windows we want paths without spaces. - if test "x$OPENJDK_BUILD_OS" = "xwindows"; then + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then - # Translate long cygdrive or C:\sdfsf path - # into a short mixed mode path that has no - # spaces in it. - tmp="$car" + # First separate the path from the arguments. This will split at the first + # space. + complete="$NM" + path="${complete%% *}" + tmp="$complete EOL" + arguments="${tmp#* }" - if test "x$OPENJDK_BUILD_OS" = "xwindows"; then - tmp=`$CYGPATH -u "$car"` - tmp=`which "$tmp"` - # If file exists with .exe appended, that's the real filename - # and cygpath needs that to convert to short style path. - if test -f "${tmp}.exe"; then - tmp="${tmp}.exe" - elif test -f "${tmp}.cmd"; then - tmp="${tmp}.cmd" + # Input might be given as Windows format, start by converting to + # unix format. + new_path=`$CYGPATH -u "$path"` + + # Now try to locate executable using which + new_path=`$WHICH "$new_path" 2> /dev/null` + # bat and cmd files are not always considered executable in cygwin causing which + # to not find them + if test "x$new_path" = x \ + && test "x`$ECHO \"$path\" | $GREP -e \"\\.bat$\" -e \"\\.cmd$\"`" != x \ + && test "x`$LS \"$path\" 2>/dev/null`" != x; then + new_path=`$CYGPATH -u "$path"` + fi + if test "x$new_path" = x; then + # Oops. Which didn't find the executable. + # The splitting of arguments from the executable at a space might have been incorrect, + # since paths with space are more likely in Windows. Give it another try with the whole + # argument. + path="$complete" + arguments="EOL" + new_path=`$CYGPATH -u "$path"` + new_path=`$WHICH "$new_path" 2> /dev/null` + # bat and cmd files are not always considered executable in cygwin causing which + # to not find them + if test "x$new_path" = x \ + && test "x`$ECHO \"$path\" | $GREP -e \"\\.bat$\" -e \"\\.cmd$\"`" != x \ + && test "x`$LS \"$path\" 2>/dev/null`" != x; then + new_path=`$CYGPATH -u "$path"` + fi + if test "x$new_path" = x; then + # It's still not found. Now this is an unrecoverable error. + { $as_echo "$as_me:${as_lineno-$LINENO}: The path of NM, which resolves as \"$complete\", is not found." >&5 +$as_echo "$as_me: The path of NM, which resolves as \"$complete\", is not found." >&6;} + has_space=`$ECHO "$complete" | $GREP " "` + if test "x$has_space" != x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: You might be mixing spaces in the path and extra arguments, which is not allowed." >&5 +$as_echo "$as_me: You might be mixing spaces in the path and extra arguments, which is not allowed." >&6;} + fi + as_fn_error $? "Cannot locate the the path of NM" "$LINENO" 5 + fi + fi + + # Cygwin tries to hide some aspects of the Windows file system, such that binaries are + # named .exe but called without that suffix. Therefore, "foo" and "foo.exe" are considered + # the same file, most of the time (as in "test -f"). But not when running cygpath -s, then + # "foo.exe" is OK but "foo" is an error. + # + # This test is therefore slightly more accurate than "test -f" to check for file precense. + # It is also a way to make sure we got the proper file name for the real test later on. + test_shortpath=`$CYGPATH -s -m "$new_path" 2> /dev/null` + if test "x$test_shortpath" = x; then + # Short path failed, file does not exist as specified. + # Try adding .exe or .cmd + if test -f "${new_path}.exe"; then + input_to_shortpath="${new_path}.exe" + elif test -f "${new_path}.cmd"; then + input_to_shortpath="${new_path}.cmd" + else + { $as_echo "$as_me:${as_lineno-$LINENO}: The path of NM, which resolves as \"$new_path\", is invalid." >&5 +$as_echo "$as_me: The path of NM, which resolves as \"$new_path\", is invalid." >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: Neither \"$new_path\" nor \"$new_path.exe/cmd\" can be found" >&5 +$as_echo "$as_me: Neither \"$new_path\" nor \"$new_path.exe/cmd\" can be found" >&6;} + as_fn_error $? "Cannot locate the the path of NM" "$LINENO" 5 + fi + else + input_to_shortpath="$new_path" + fi + + # Call helper function which possibly converts this using DOS-style short mode. + # If so, the updated path is stored in $new_path. + new_path="$input_to_shortpath" + + input_path="$input_to_shortpath" + # Check if we need to convert this using DOS-style short mode. If the path + # contains just simple characters, use it. Otherwise (spaces, weird characters), + # take no chances and rewrite it. + # Note: m4 eats our [], so we need to use [ and ] instead. + has_forbidden_chars=`$ECHO "$input_path" | $GREP [^-._/a-zA-Z0-9]` + if test "x$has_forbidden_chars" != x; then + # Now convert it to mixed DOS-style, short mode (no spaces, and / instead of \) + shortmode_path=`$CYGPATH -s -m -a "$input_path"` + path_after_shortmode=`$CYGPATH -u "$shortmode_path"` + if test "x$path_after_shortmode" != "x$input_to_shortpath"; then + # Going to short mode and back again did indeed matter. Since short mode is + # case insensitive, let's make it lowercase to improve readability. + shortmode_path=`$ECHO "$shortmode_path" | $TR 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` + # Now convert it back to Unix-stile (cygpath) + input_path=`$CYGPATH -u "$shortmode_path"` + new_path="$input_path" + fi + fi + + test_cygdrive_prefix=`$ECHO $input_path | $GREP ^/cygdrive/` + if test "x$test_cygdrive_prefix" = x; then + # As a simple fix, exclude /usr/bin since it's not a real path. + if test "x`$ECHO $input_to_shortpath | $GREP ^/usr/bin/`" = x; then + # The path is in a Cygwin special directory (e.g. /home). We need this converted to + # a path prefixed by /cygdrive for fixpath to work. + new_path="$CYGWIN_ROOT_PATH$input_path" + fi + fi + + # remove trailing .exe if any + new_path="${new_path/%.exe/}" + + elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then + + # First separate the path from the arguments. This will split at the first + # space. + complete="$NM" + path="${complete%% *}" + tmp="$complete EOL" + arguments="${tmp#* }" + + # Input might be given as Windows format, start by converting to + # unix format. + new_path="$path" + + windows_path="$new_path" + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then + unix_path=`$CYGPATH -u "$windows_path"` + new_path="$unix_path" + elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then + unix_path=`$ECHO "$windows_path" | $SED -e 's,^\\(.\\):,/\\1,g' -e 's,\\\\,/,g'` + new_path="$unix_path" + fi + + + # Now try to locate executable using which + new_path=`$WHICH "$new_path" 2> /dev/null` + + if test "x$new_path" = x; then + # Oops. Which didn't find the executable. + # The splitting of arguments from the executable at a space might have been incorrect, + # since paths with space are more likely in Windows. Give it another try with the whole + # argument. + path="$complete" + arguments="EOL" + new_path="$path" + + windows_path="$new_path" + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then + unix_path=`$CYGPATH -u "$windows_path"` + new_path="$unix_path" + elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then + unix_path=`$ECHO "$windows_path" | $SED -e 's,^\\(.\\):,/\\1,g' -e 's,\\\\,/,g'` + new_path="$unix_path" + fi + + + new_path=`$WHICH "$new_path" 2> /dev/null` + + if test "x$new_path" = x; then + # It's still not found. Now this is an unrecoverable error. + { $as_echo "$as_me:${as_lineno-$LINENO}: The path of NM, which resolves as \"$complete\", is not found." >&5 +$as_echo "$as_me: The path of NM, which resolves as \"$complete\", is not found." >&6;} + has_space=`$ECHO "$complete" | $GREP " "` + if test "x$has_space" != x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: You might be mixing spaces in the path and extra arguments, which is not allowed." >&5 +$as_echo "$as_me: You might be mixing spaces in the path and extra arguments, which is not allowed." >&6;} + fi + as_fn_error $? "Cannot locate the the path of NM" "$LINENO" 5 + fi + fi + + # Now new_path has a complete unix path to the binary + if test "x`$ECHO $new_path | $GREP ^/bin/`" != x; then + # Keep paths in /bin as-is, but remove trailing .exe if any + new_path="${new_path/%.exe/}" + # Do not save /bin paths to all_fixpath_prefixes! + else + # Not in mixed or Windows style, start by that. + new_path=`cmd //c echo $new_path` + + input_path="$new_path" + # Check if we need to convert this using DOS-style short mode. If the path + # contains just simple characters, use it. Otherwise (spaces, weird characters), + # take no chances and rewrite it. + # Note: m4 eats our [], so we need to use [ and ] instead. + has_forbidden_chars=`$ECHO "$input_path" | $GREP [^-_/:a-zA-Z0-9]` + if test "x$has_forbidden_chars" != x; then + # Now convert it to mixed DOS-style, short mode (no spaces, and / instead of \) + new_path=`cmd /c "for %A in (\"$input_path\") do @echo %~sA"|$TR \\\\\\\\ / | $TR 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` + fi + + # Output is in $new_path + + windows_path="$new_path" + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then + unix_path=`$CYGPATH -u "$windows_path"` + new_path="$unix_path" + elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then + unix_path=`$ECHO "$windows_path" | $SED -e 's,^\\(.\\):,/\\1,g' -e 's,\\\\,/,g'` + new_path="$unix_path" + fi + + # remove trailing .exe if any + new_path="${new_path/%.exe/}" + + # Save the first 10 bytes of this path to the storage, so fixpath can work. + all_fixpath_prefixes=("${all_fixpath_prefixes[@]}" "${new_path:0:10}") + fi + + else + # We're on a posix platform. Hooray! :) + # First separate the path from the arguments. This will split at the first + # space. + complete="$NM" + path="${complete%% *}" + tmp="$complete EOL" + arguments="${tmp#* }" + + new_path=`$WHICH $path 2> /dev/null` + if test "x$new_path" = x; then + is_absolute_path=`$ECHO "$path" | $GREP ^/` + if test "x$is_absolute_path" != x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: Resolving NM (as $path) with 'which' failed, using $path directly." >&5 +$as_echo "$as_me: Resolving NM (as $path) with 'which' failed, using $path directly." >&6;} + new_path="$path" + else + { $as_echo "$as_me:${as_lineno-$LINENO}: The path of NM, which resolves as \"$complete\", is not found." >&5 +$as_echo "$as_me: The path of NM, which resolves as \"$complete\", is not found." >&6;} + has_space=`$ECHO "$complete" | $GREP " "` + if test "x$has_space" != x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: This might be caused by spaces in the path, which is not allowed." >&5 +$as_echo "$as_me: This might be caused by spaces in the path, which is not allowed." >&6;} fi - # Convert to C:/ mixed style path without spaces. - tmp=`$CYGPATH -s -m "$tmp"` + as_fn_error $? "Cannot locate the the path of NM" "$LINENO" 5 + fi fi - car="$tmp" + fi - else - # "which" is not portable, but is used here - # because we know that the command exists! - car=`which $car` - fi - if test "x$cdr" != xEOL; then - NM="$car ${cdr% *}" - else - NM="$car" - fi + # Now join together the path and the arguments once again + if test "x$arguments" != xEOL; then + new_complete="$new_path ${arguments% *}" + else + new_complete="$new_path" + fi + + if test "x$complete" != "x$new_complete"; then + NM="$new_complete" + { $as_echo "$as_me:${as_lineno-$LINENO}: Rewriting NM to \"$new_complete\"" >&5 +$as_echo "$as_me: Rewriting NM to \"$new_complete\"" >&6;} + fi # Extract the first word of "strip", so it can be a program name with args. set dummy strip; ac_word=$2 @@ -13578,47 +24234,259 @@ fi - # Translate "gcc -E" into "`which gcc` -E" ie - # extract the full path to the binary and at the - # same time maintain any arguments passed to it. - # The command MUST exist in the path, or else! - tmp="$STRIP" - car="${tmp%% *}" - tmp="$STRIP EOL" - cdr="${tmp#* }" - # On windows we want paths without spaces. - if test "x$OPENJDK_BUILD_OS" = "xwindows"; then + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then - # Translate long cygdrive or C:\sdfsf path - # into a short mixed mode path that has no - # spaces in it. - tmp="$car" + # First separate the path from the arguments. This will split at the first + # space. + complete="$STRIP" + path="${complete%% *}" + tmp="$complete EOL" + arguments="${tmp#* }" - if test "x$OPENJDK_BUILD_OS" = "xwindows"; then - tmp=`$CYGPATH -u "$car"` - tmp=`which "$tmp"` - # If file exists with .exe appended, that's the real filename - # and cygpath needs that to convert to short style path. - if test -f "${tmp}.exe"; then - tmp="${tmp}.exe" - elif test -f "${tmp}.cmd"; then - tmp="${tmp}.cmd" + # Input might be given as Windows format, start by converting to + # unix format. + new_path=`$CYGPATH -u "$path"` + + # Now try to locate executable using which + new_path=`$WHICH "$new_path" 2> /dev/null` + # bat and cmd files are not always considered executable in cygwin causing which + # to not find them + if test "x$new_path" = x \ + && test "x`$ECHO \"$path\" | $GREP -e \"\\.bat$\" -e \"\\.cmd$\"`" != x \ + && test "x`$LS \"$path\" 2>/dev/null`" != x; then + new_path=`$CYGPATH -u "$path"` + fi + if test "x$new_path" = x; then + # Oops. Which didn't find the executable. + # The splitting of arguments from the executable at a space might have been incorrect, + # since paths with space are more likely in Windows. Give it another try with the whole + # argument. + path="$complete" + arguments="EOL" + new_path=`$CYGPATH -u "$path"` + new_path=`$WHICH "$new_path" 2> /dev/null` + # bat and cmd files are not always considered executable in cygwin causing which + # to not find them + if test "x$new_path" = x \ + && test "x`$ECHO \"$path\" | $GREP -e \"\\.bat$\" -e \"\\.cmd$\"`" != x \ + && test "x`$LS \"$path\" 2>/dev/null`" != x; then + new_path=`$CYGPATH -u "$path"` + fi + if test "x$new_path" = x; then + # It's still not found. Now this is an unrecoverable error. + { $as_echo "$as_me:${as_lineno-$LINENO}: The path of STRIP, which resolves as \"$complete\", is not found." >&5 +$as_echo "$as_me: The path of STRIP, which resolves as \"$complete\", is not found." >&6;} + has_space=`$ECHO "$complete" | $GREP " "` + if test "x$has_space" != x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: You might be mixing spaces in the path and extra arguments, which is not allowed." >&5 +$as_echo "$as_me: You might be mixing spaces in the path and extra arguments, which is not allowed." >&6;} + fi + as_fn_error $? "Cannot locate the the path of STRIP" "$LINENO" 5 + fi + fi + + # Cygwin tries to hide some aspects of the Windows file system, such that binaries are + # named .exe but called without that suffix. Therefore, "foo" and "foo.exe" are considered + # the same file, most of the time (as in "test -f"). But not when running cygpath -s, then + # "foo.exe" is OK but "foo" is an error. + # + # This test is therefore slightly more accurate than "test -f" to check for file precense. + # It is also a way to make sure we got the proper file name for the real test later on. + test_shortpath=`$CYGPATH -s -m "$new_path" 2> /dev/null` + if test "x$test_shortpath" = x; then + # Short path failed, file does not exist as specified. + # Try adding .exe or .cmd + if test -f "${new_path}.exe"; then + input_to_shortpath="${new_path}.exe" + elif test -f "${new_path}.cmd"; then + input_to_shortpath="${new_path}.cmd" + else + { $as_echo "$as_me:${as_lineno-$LINENO}: The path of STRIP, which resolves as \"$new_path\", is invalid." >&5 +$as_echo "$as_me: The path of STRIP, which resolves as \"$new_path\", is invalid." >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: Neither \"$new_path\" nor \"$new_path.exe/cmd\" can be found" >&5 +$as_echo "$as_me: Neither \"$new_path\" nor \"$new_path.exe/cmd\" can be found" >&6;} + as_fn_error $? "Cannot locate the the path of STRIP" "$LINENO" 5 + fi + else + input_to_shortpath="$new_path" + fi + + # Call helper function which possibly converts this using DOS-style short mode. + # If so, the updated path is stored in $new_path. + new_path="$input_to_shortpath" + + input_path="$input_to_shortpath" + # Check if we need to convert this using DOS-style short mode. If the path + # contains just simple characters, use it. Otherwise (spaces, weird characters), + # take no chances and rewrite it. + # Note: m4 eats our [], so we need to use [ and ] instead. + has_forbidden_chars=`$ECHO "$input_path" | $GREP [^-._/a-zA-Z0-9]` + if test "x$has_forbidden_chars" != x; then + # Now convert it to mixed DOS-style, short mode (no spaces, and / instead of \) + shortmode_path=`$CYGPATH -s -m -a "$input_path"` + path_after_shortmode=`$CYGPATH -u "$shortmode_path"` + if test "x$path_after_shortmode" != "x$input_to_shortpath"; then + # Going to short mode and back again did indeed matter. Since short mode is + # case insensitive, let's make it lowercase to improve readability. + shortmode_path=`$ECHO "$shortmode_path" | $TR 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` + # Now convert it back to Unix-stile (cygpath) + input_path=`$CYGPATH -u "$shortmode_path"` + new_path="$input_path" + fi + fi + + test_cygdrive_prefix=`$ECHO $input_path | $GREP ^/cygdrive/` + if test "x$test_cygdrive_prefix" = x; then + # As a simple fix, exclude /usr/bin since it's not a real path. + if test "x`$ECHO $input_to_shortpath | $GREP ^/usr/bin/`" = x; then + # The path is in a Cygwin special directory (e.g. /home). We need this converted to + # a path prefixed by /cygdrive for fixpath to work. + new_path="$CYGWIN_ROOT_PATH$input_path" + fi + fi + + # remove trailing .exe if any + new_path="${new_path/%.exe/}" + + elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then + + # First separate the path from the arguments. This will split at the first + # space. + complete="$STRIP" + path="${complete%% *}" + tmp="$complete EOL" + arguments="${tmp#* }" + + # Input might be given as Windows format, start by converting to + # unix format. + new_path="$path" + + windows_path="$new_path" + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then + unix_path=`$CYGPATH -u "$windows_path"` + new_path="$unix_path" + elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then + unix_path=`$ECHO "$windows_path" | $SED -e 's,^\\(.\\):,/\\1,g' -e 's,\\\\,/,g'` + new_path="$unix_path" + fi + + + # Now try to locate executable using which + new_path=`$WHICH "$new_path" 2> /dev/null` + + if test "x$new_path" = x; then + # Oops. Which didn't find the executable. + # The splitting of arguments from the executable at a space might have been incorrect, + # since paths with space are more likely in Windows. Give it another try with the whole + # argument. + path="$complete" + arguments="EOL" + new_path="$path" + + windows_path="$new_path" + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then + unix_path=`$CYGPATH -u "$windows_path"` + new_path="$unix_path" + elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then + unix_path=`$ECHO "$windows_path" | $SED -e 's,^\\(.\\):,/\\1,g' -e 's,\\\\,/,g'` + new_path="$unix_path" + fi + + + new_path=`$WHICH "$new_path" 2> /dev/null` + + if test "x$new_path" = x; then + # It's still not found. Now this is an unrecoverable error. + { $as_echo "$as_me:${as_lineno-$LINENO}: The path of STRIP, which resolves as \"$complete\", is not found." >&5 +$as_echo "$as_me: The path of STRIP, which resolves as \"$complete\", is not found." >&6;} + has_space=`$ECHO "$complete" | $GREP " "` + if test "x$has_space" != x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: You might be mixing spaces in the path and extra arguments, which is not allowed." >&5 +$as_echo "$as_me: You might be mixing spaces in the path and extra arguments, which is not allowed." >&6;} + fi + as_fn_error $? "Cannot locate the the path of STRIP" "$LINENO" 5 + fi + fi + + # Now new_path has a complete unix path to the binary + if test "x`$ECHO $new_path | $GREP ^/bin/`" != x; then + # Keep paths in /bin as-is, but remove trailing .exe if any + new_path="${new_path/%.exe/}" + # Do not save /bin paths to all_fixpath_prefixes! + else + # Not in mixed or Windows style, start by that. + new_path=`cmd //c echo $new_path` + + input_path="$new_path" + # Check if we need to convert this using DOS-style short mode. If the path + # contains just simple characters, use it. Otherwise (spaces, weird characters), + # take no chances and rewrite it. + # Note: m4 eats our [], so we need to use [ and ] instead. + has_forbidden_chars=`$ECHO "$input_path" | $GREP [^-_/:a-zA-Z0-9]` + if test "x$has_forbidden_chars" != x; then + # Now convert it to mixed DOS-style, short mode (no spaces, and / instead of \) + new_path=`cmd /c "for %A in (\"$input_path\") do @echo %~sA"|$TR \\\\\\\\ / | $TR 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` + fi + + # Output is in $new_path + + windows_path="$new_path" + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then + unix_path=`$CYGPATH -u "$windows_path"` + new_path="$unix_path" + elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then + unix_path=`$ECHO "$windows_path" | $SED -e 's,^\\(.\\):,/\\1,g' -e 's,\\\\,/,g'` + new_path="$unix_path" + fi + + # remove trailing .exe if any + new_path="${new_path/%.exe/}" + + # Save the first 10 bytes of this path to the storage, so fixpath can work. + all_fixpath_prefixes=("${all_fixpath_prefixes[@]}" "${new_path:0:10}") + fi + + else + # We're on a posix platform. Hooray! :) + # First separate the path from the arguments. This will split at the first + # space. + complete="$STRIP" + path="${complete%% *}" + tmp="$complete EOL" + arguments="${tmp#* }" + + new_path=`$WHICH $path 2> /dev/null` + if test "x$new_path" = x; then + is_absolute_path=`$ECHO "$path" | $GREP ^/` + if test "x$is_absolute_path" != x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: Resolving STRIP (as $path) with 'which' failed, using $path directly." >&5 +$as_echo "$as_me: Resolving STRIP (as $path) with 'which' failed, using $path directly." >&6;} + new_path="$path" + else + { $as_echo "$as_me:${as_lineno-$LINENO}: The path of STRIP, which resolves as \"$complete\", is not found." >&5 +$as_echo "$as_me: The path of STRIP, which resolves as \"$complete\", is not found." >&6;} + has_space=`$ECHO "$complete" | $GREP " "` + if test "x$has_space" != x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: This might be caused by spaces in the path, which is not allowed." >&5 +$as_echo "$as_me: This might be caused by spaces in the path, which is not allowed." >&6;} fi - # Convert to C:/ mixed style path without spaces. - tmp=`$CYGPATH -s -m "$tmp"` + as_fn_error $? "Cannot locate the the path of STRIP" "$LINENO" 5 + fi fi - car="$tmp" + fi - else - # "which" is not portable, but is used here - # because we know that the command exists! - car=`which $car` - fi - if test "x$cdr" != xEOL; then - STRIP="$car ${cdr% *}" - else - STRIP="$car" - fi + # Now join together the path and the arguments once again + if test "x$arguments" != xEOL; then + new_complete="$new_path ${arguments% *}" + else + new_complete="$new_path" + fi + + if test "x$complete" != "x$new_complete"; then + STRIP="$new_complete" + { $as_echo "$as_me:${as_lineno-$LINENO}: Rewriting STRIP to \"$new_complete\"" >&5 +$as_echo "$as_me: Rewriting STRIP to \"$new_complete\"" >&6;} + fi # Extract the first word of "mcs", so it can be a program name with args. set dummy mcs; ac_word=$2 @@ -13661,49 +24529,261 @@ fi - # Translate "gcc -E" into "`which gcc` -E" ie - # extract the full path to the binary and at the - # same time maintain any arguments passed to it. - # The command MUST exist in the path, or else! - tmp="$MCS" - car="${tmp%% *}" - tmp="$MCS EOL" - cdr="${tmp#* }" - # On windows we want paths without spaces. - if test "x$OPENJDK_BUILD_OS" = "xwindows"; then + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then - # Translate long cygdrive or C:\sdfsf path - # into a short mixed mode path that has no - # spaces in it. - tmp="$car" + # First separate the path from the arguments. This will split at the first + # space. + complete="$MCS" + path="${complete%% *}" + tmp="$complete EOL" + arguments="${tmp#* }" - if test "x$OPENJDK_BUILD_OS" = "xwindows"; then - tmp=`$CYGPATH -u "$car"` - tmp=`which "$tmp"` - # If file exists with .exe appended, that's the real filename - # and cygpath needs that to convert to short style path. - if test -f "${tmp}.exe"; then - tmp="${tmp}.exe" - elif test -f "${tmp}.cmd"; then - tmp="${tmp}.cmd" + # Input might be given as Windows format, start by converting to + # unix format. + new_path=`$CYGPATH -u "$path"` + + # Now try to locate executable using which + new_path=`$WHICH "$new_path" 2> /dev/null` + # bat and cmd files are not always considered executable in cygwin causing which + # to not find them + if test "x$new_path" = x \ + && test "x`$ECHO \"$path\" | $GREP -e \"\\.bat$\" -e \"\\.cmd$\"`" != x \ + && test "x`$LS \"$path\" 2>/dev/null`" != x; then + new_path=`$CYGPATH -u "$path"` + fi + if test "x$new_path" = x; then + # Oops. Which didn't find the executable. + # The splitting of arguments from the executable at a space might have been incorrect, + # since paths with space are more likely in Windows. Give it another try with the whole + # argument. + path="$complete" + arguments="EOL" + new_path=`$CYGPATH -u "$path"` + new_path=`$WHICH "$new_path" 2> /dev/null` + # bat and cmd files are not always considered executable in cygwin causing which + # to not find them + if test "x$new_path" = x \ + && test "x`$ECHO \"$path\" | $GREP -e \"\\.bat$\" -e \"\\.cmd$\"`" != x \ + && test "x`$LS \"$path\" 2>/dev/null`" != x; then + new_path=`$CYGPATH -u "$path"` + fi + if test "x$new_path" = x; then + # It's still not found. Now this is an unrecoverable error. + { $as_echo "$as_me:${as_lineno-$LINENO}: The path of MCS, which resolves as \"$complete\", is not found." >&5 +$as_echo "$as_me: The path of MCS, which resolves as \"$complete\", is not found." >&6;} + has_space=`$ECHO "$complete" | $GREP " "` + if test "x$has_space" != x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: You might be mixing spaces in the path and extra arguments, which is not allowed." >&5 +$as_echo "$as_me: You might be mixing spaces in the path and extra arguments, which is not allowed." >&6;} + fi + as_fn_error $? "Cannot locate the the path of MCS" "$LINENO" 5 + fi + fi + + # Cygwin tries to hide some aspects of the Windows file system, such that binaries are + # named .exe but called without that suffix. Therefore, "foo" and "foo.exe" are considered + # the same file, most of the time (as in "test -f"). But not when running cygpath -s, then + # "foo.exe" is OK but "foo" is an error. + # + # This test is therefore slightly more accurate than "test -f" to check for file precense. + # It is also a way to make sure we got the proper file name for the real test later on. + test_shortpath=`$CYGPATH -s -m "$new_path" 2> /dev/null` + if test "x$test_shortpath" = x; then + # Short path failed, file does not exist as specified. + # Try adding .exe or .cmd + if test -f "${new_path}.exe"; then + input_to_shortpath="${new_path}.exe" + elif test -f "${new_path}.cmd"; then + input_to_shortpath="${new_path}.cmd" + else + { $as_echo "$as_me:${as_lineno-$LINENO}: The path of MCS, which resolves as \"$new_path\", is invalid." >&5 +$as_echo "$as_me: The path of MCS, which resolves as \"$new_path\", is invalid." >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: Neither \"$new_path\" nor \"$new_path.exe/cmd\" can be found" >&5 +$as_echo "$as_me: Neither \"$new_path\" nor \"$new_path.exe/cmd\" can be found" >&6;} + as_fn_error $? "Cannot locate the the path of MCS" "$LINENO" 5 + fi + else + input_to_shortpath="$new_path" + fi + + # Call helper function which possibly converts this using DOS-style short mode. + # If so, the updated path is stored in $new_path. + new_path="$input_to_shortpath" + + input_path="$input_to_shortpath" + # Check if we need to convert this using DOS-style short mode. If the path + # contains just simple characters, use it. Otherwise (spaces, weird characters), + # take no chances and rewrite it. + # Note: m4 eats our [], so we need to use [ and ] instead. + has_forbidden_chars=`$ECHO "$input_path" | $GREP [^-._/a-zA-Z0-9]` + if test "x$has_forbidden_chars" != x; then + # Now convert it to mixed DOS-style, short mode (no spaces, and / instead of \) + shortmode_path=`$CYGPATH -s -m -a "$input_path"` + path_after_shortmode=`$CYGPATH -u "$shortmode_path"` + if test "x$path_after_shortmode" != "x$input_to_shortpath"; then + # Going to short mode and back again did indeed matter. Since short mode is + # case insensitive, let's make it lowercase to improve readability. + shortmode_path=`$ECHO "$shortmode_path" | $TR 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` + # Now convert it back to Unix-stile (cygpath) + input_path=`$CYGPATH -u "$shortmode_path"` + new_path="$input_path" + fi + fi + + test_cygdrive_prefix=`$ECHO $input_path | $GREP ^/cygdrive/` + if test "x$test_cygdrive_prefix" = x; then + # As a simple fix, exclude /usr/bin since it's not a real path. + if test "x`$ECHO $input_to_shortpath | $GREP ^/usr/bin/`" = x; then + # The path is in a Cygwin special directory (e.g. /home). We need this converted to + # a path prefixed by /cygdrive for fixpath to work. + new_path="$CYGWIN_ROOT_PATH$input_path" + fi + fi + + # remove trailing .exe if any + new_path="${new_path/%.exe/}" + + elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then + + # First separate the path from the arguments. This will split at the first + # space. + complete="$MCS" + path="${complete%% *}" + tmp="$complete EOL" + arguments="${tmp#* }" + + # Input might be given as Windows format, start by converting to + # unix format. + new_path="$path" + + windows_path="$new_path" + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then + unix_path=`$CYGPATH -u "$windows_path"` + new_path="$unix_path" + elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then + unix_path=`$ECHO "$windows_path" | $SED -e 's,^\\(.\\):,/\\1,g' -e 's,\\\\,/,g'` + new_path="$unix_path" + fi + + + # Now try to locate executable using which + new_path=`$WHICH "$new_path" 2> /dev/null` + + if test "x$new_path" = x; then + # Oops. Which didn't find the executable. + # The splitting of arguments from the executable at a space might have been incorrect, + # since paths with space are more likely in Windows. Give it another try with the whole + # argument. + path="$complete" + arguments="EOL" + new_path="$path" + + windows_path="$new_path" + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then + unix_path=`$CYGPATH -u "$windows_path"` + new_path="$unix_path" + elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then + unix_path=`$ECHO "$windows_path" | $SED -e 's,^\\(.\\):,/\\1,g' -e 's,\\\\,/,g'` + new_path="$unix_path" + fi + + + new_path=`$WHICH "$new_path" 2> /dev/null` + + if test "x$new_path" = x; then + # It's still not found. Now this is an unrecoverable error. + { $as_echo "$as_me:${as_lineno-$LINENO}: The path of MCS, which resolves as \"$complete\", is not found." >&5 +$as_echo "$as_me: The path of MCS, which resolves as \"$complete\", is not found." >&6;} + has_space=`$ECHO "$complete" | $GREP " "` + if test "x$has_space" != x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: You might be mixing spaces in the path and extra arguments, which is not allowed." >&5 +$as_echo "$as_me: You might be mixing spaces in the path and extra arguments, which is not allowed." >&6;} + fi + as_fn_error $? "Cannot locate the the path of MCS" "$LINENO" 5 + fi + fi + + # Now new_path has a complete unix path to the binary + if test "x`$ECHO $new_path | $GREP ^/bin/`" != x; then + # Keep paths in /bin as-is, but remove trailing .exe if any + new_path="${new_path/%.exe/}" + # Do not save /bin paths to all_fixpath_prefixes! + else + # Not in mixed or Windows style, start by that. + new_path=`cmd //c echo $new_path` + + input_path="$new_path" + # Check if we need to convert this using DOS-style short mode. If the path + # contains just simple characters, use it. Otherwise (spaces, weird characters), + # take no chances and rewrite it. + # Note: m4 eats our [], so we need to use [ and ] instead. + has_forbidden_chars=`$ECHO "$input_path" | $GREP [^-_/:a-zA-Z0-9]` + if test "x$has_forbidden_chars" != x; then + # Now convert it to mixed DOS-style, short mode (no spaces, and / instead of \) + new_path=`cmd /c "for %A in (\"$input_path\") do @echo %~sA"|$TR \\\\\\\\ / | $TR 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` + fi + + # Output is in $new_path + + windows_path="$new_path" + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then + unix_path=`$CYGPATH -u "$windows_path"` + new_path="$unix_path" + elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then + unix_path=`$ECHO "$windows_path" | $SED -e 's,^\\(.\\):,/\\1,g' -e 's,\\\\,/,g'` + new_path="$unix_path" + fi + + # remove trailing .exe if any + new_path="${new_path/%.exe/}" + + # Save the first 10 bytes of this path to the storage, so fixpath can work. + all_fixpath_prefixes=("${all_fixpath_prefixes[@]}" "${new_path:0:10}") + fi + + else + # We're on a posix platform. Hooray! :) + # First separate the path from the arguments. This will split at the first + # space. + complete="$MCS" + path="${complete%% *}" + tmp="$complete EOL" + arguments="${tmp#* }" + + new_path=`$WHICH $path 2> /dev/null` + if test "x$new_path" = x; then + is_absolute_path=`$ECHO "$path" | $GREP ^/` + if test "x$is_absolute_path" != x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: Resolving MCS (as $path) with 'which' failed, using $path directly." >&5 +$as_echo "$as_me: Resolving MCS (as $path) with 'which' failed, using $path directly." >&6;} + new_path="$path" + else + { $as_echo "$as_me:${as_lineno-$LINENO}: The path of MCS, which resolves as \"$complete\", is not found." >&5 +$as_echo "$as_me: The path of MCS, which resolves as \"$complete\", is not found." >&6;} + has_space=`$ECHO "$complete" | $GREP " "` + if test "x$has_space" != x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: This might be caused by spaces in the path, which is not allowed." >&5 +$as_echo "$as_me: This might be caused by spaces in the path, which is not allowed." >&6;} fi - # Convert to C:/ mixed style path without spaces. - tmp=`$CYGPATH -s -m "$tmp"` + as_fn_error $? "Cannot locate the the path of MCS" "$LINENO" 5 + fi fi - car="$tmp" + fi - else - # "which" is not portable, but is used here - # because we know that the command exists! - car=`which $car` - fi - if test "x$cdr" != xEOL; then - MCS="$car ${cdr% *}" - else - MCS="$car" - fi + # Now join together the path and the arguments once again + if test "x$arguments" != xEOL; then + new_complete="$new_path ${arguments% *}" + else + new_complete="$new_path" + fi -elif test "x$OPENJDK_BUILD_OS" != xwindows; then + if test "x$complete" != "x$new_complete"; then + MCS="$new_complete" + { $as_echo "$as_me:${as_lineno-$LINENO}: Rewriting MCS to \"$new_complete\"" >&5 +$as_echo "$as_me: Rewriting MCS to \"$new_complete\"" >&6;} + fi + +elif test "x$OPENJDK_TARGET_OS" != xwindows; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}nm", so it can be a program name with args. set dummy ${ac_tool_prefix}nm; ac_word=$2 @@ -13797,47 +24877,259 @@ else fi - # Translate "gcc -E" into "`which gcc` -E" ie - # extract the full path to the binary and at the - # same time maintain any arguments passed to it. - # The command MUST exist in the path, or else! - tmp="$NM" - car="${tmp%% *}" - tmp="$NM EOL" - cdr="${tmp#* }" - # On windows we want paths without spaces. - if test "x$OPENJDK_BUILD_OS" = "xwindows"; then + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then - # Translate long cygdrive or C:\sdfsf path - # into a short mixed mode path that has no - # spaces in it. - tmp="$car" + # First separate the path from the arguments. This will split at the first + # space. + complete="$NM" + path="${complete%% *}" + tmp="$complete EOL" + arguments="${tmp#* }" - if test "x$OPENJDK_BUILD_OS" = "xwindows"; then - tmp=`$CYGPATH -u "$car"` - tmp=`which "$tmp"` - # If file exists with .exe appended, that's the real filename - # and cygpath needs that to convert to short style path. - if test -f "${tmp}.exe"; then - tmp="${tmp}.exe" - elif test -f "${tmp}.cmd"; then - tmp="${tmp}.cmd" + # Input might be given as Windows format, start by converting to + # unix format. + new_path=`$CYGPATH -u "$path"` + + # Now try to locate executable using which + new_path=`$WHICH "$new_path" 2> /dev/null` + # bat and cmd files are not always considered executable in cygwin causing which + # to not find them + if test "x$new_path" = x \ + && test "x`$ECHO \"$path\" | $GREP -e \"\\.bat$\" -e \"\\.cmd$\"`" != x \ + && test "x`$LS \"$path\" 2>/dev/null`" != x; then + new_path=`$CYGPATH -u "$path"` + fi + if test "x$new_path" = x; then + # Oops. Which didn't find the executable. + # The splitting of arguments from the executable at a space might have been incorrect, + # since paths with space are more likely in Windows. Give it another try with the whole + # argument. + path="$complete" + arguments="EOL" + new_path=`$CYGPATH -u "$path"` + new_path=`$WHICH "$new_path" 2> /dev/null` + # bat and cmd files are not always considered executable in cygwin causing which + # to not find them + if test "x$new_path" = x \ + && test "x`$ECHO \"$path\" | $GREP -e \"\\.bat$\" -e \"\\.cmd$\"`" != x \ + && test "x`$LS \"$path\" 2>/dev/null`" != x; then + new_path=`$CYGPATH -u "$path"` + fi + if test "x$new_path" = x; then + # It's still not found. Now this is an unrecoverable error. + { $as_echo "$as_me:${as_lineno-$LINENO}: The path of NM, which resolves as \"$complete\", is not found." >&5 +$as_echo "$as_me: The path of NM, which resolves as \"$complete\", is not found." >&6;} + has_space=`$ECHO "$complete" | $GREP " "` + if test "x$has_space" != x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: You might be mixing spaces in the path and extra arguments, which is not allowed." >&5 +$as_echo "$as_me: You might be mixing spaces in the path and extra arguments, which is not allowed." >&6;} + fi + as_fn_error $? "Cannot locate the the path of NM" "$LINENO" 5 + fi + fi + + # Cygwin tries to hide some aspects of the Windows file system, such that binaries are + # named .exe but called without that suffix. Therefore, "foo" and "foo.exe" are considered + # the same file, most of the time (as in "test -f"). But not when running cygpath -s, then + # "foo.exe" is OK but "foo" is an error. + # + # This test is therefore slightly more accurate than "test -f" to check for file precense. + # It is also a way to make sure we got the proper file name for the real test later on. + test_shortpath=`$CYGPATH -s -m "$new_path" 2> /dev/null` + if test "x$test_shortpath" = x; then + # Short path failed, file does not exist as specified. + # Try adding .exe or .cmd + if test -f "${new_path}.exe"; then + input_to_shortpath="${new_path}.exe" + elif test -f "${new_path}.cmd"; then + input_to_shortpath="${new_path}.cmd" + else + { $as_echo "$as_me:${as_lineno-$LINENO}: The path of NM, which resolves as \"$new_path\", is invalid." >&5 +$as_echo "$as_me: The path of NM, which resolves as \"$new_path\", is invalid." >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: Neither \"$new_path\" nor \"$new_path.exe/cmd\" can be found" >&5 +$as_echo "$as_me: Neither \"$new_path\" nor \"$new_path.exe/cmd\" can be found" >&6;} + as_fn_error $? "Cannot locate the the path of NM" "$LINENO" 5 + fi + else + input_to_shortpath="$new_path" + fi + + # Call helper function which possibly converts this using DOS-style short mode. + # If so, the updated path is stored in $new_path. + new_path="$input_to_shortpath" + + input_path="$input_to_shortpath" + # Check if we need to convert this using DOS-style short mode. If the path + # contains just simple characters, use it. Otherwise (spaces, weird characters), + # take no chances and rewrite it. + # Note: m4 eats our [], so we need to use [ and ] instead. + has_forbidden_chars=`$ECHO "$input_path" | $GREP [^-._/a-zA-Z0-9]` + if test "x$has_forbidden_chars" != x; then + # Now convert it to mixed DOS-style, short mode (no spaces, and / instead of \) + shortmode_path=`$CYGPATH -s -m -a "$input_path"` + path_after_shortmode=`$CYGPATH -u "$shortmode_path"` + if test "x$path_after_shortmode" != "x$input_to_shortpath"; then + # Going to short mode and back again did indeed matter. Since short mode is + # case insensitive, let's make it lowercase to improve readability. + shortmode_path=`$ECHO "$shortmode_path" | $TR 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` + # Now convert it back to Unix-stile (cygpath) + input_path=`$CYGPATH -u "$shortmode_path"` + new_path="$input_path" + fi + fi + + test_cygdrive_prefix=`$ECHO $input_path | $GREP ^/cygdrive/` + if test "x$test_cygdrive_prefix" = x; then + # As a simple fix, exclude /usr/bin since it's not a real path. + if test "x`$ECHO $input_to_shortpath | $GREP ^/usr/bin/`" = x; then + # The path is in a Cygwin special directory (e.g. /home). We need this converted to + # a path prefixed by /cygdrive for fixpath to work. + new_path="$CYGWIN_ROOT_PATH$input_path" + fi + fi + + # remove trailing .exe if any + new_path="${new_path/%.exe/}" + + elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then + + # First separate the path from the arguments. This will split at the first + # space. + complete="$NM" + path="${complete%% *}" + tmp="$complete EOL" + arguments="${tmp#* }" + + # Input might be given as Windows format, start by converting to + # unix format. + new_path="$path" + + windows_path="$new_path" + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then + unix_path=`$CYGPATH -u "$windows_path"` + new_path="$unix_path" + elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then + unix_path=`$ECHO "$windows_path" | $SED -e 's,^\\(.\\):,/\\1,g' -e 's,\\\\,/,g'` + new_path="$unix_path" + fi + + + # Now try to locate executable using which + new_path=`$WHICH "$new_path" 2> /dev/null` + + if test "x$new_path" = x; then + # Oops. Which didn't find the executable. + # The splitting of arguments from the executable at a space might have been incorrect, + # since paths with space are more likely in Windows. Give it another try with the whole + # argument. + path="$complete" + arguments="EOL" + new_path="$path" + + windows_path="$new_path" + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then + unix_path=`$CYGPATH -u "$windows_path"` + new_path="$unix_path" + elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then + unix_path=`$ECHO "$windows_path" | $SED -e 's,^\\(.\\):,/\\1,g' -e 's,\\\\,/,g'` + new_path="$unix_path" + fi + + + new_path=`$WHICH "$new_path" 2> /dev/null` + + if test "x$new_path" = x; then + # It's still not found. Now this is an unrecoverable error. + { $as_echo "$as_me:${as_lineno-$LINENO}: The path of NM, which resolves as \"$complete\", is not found." >&5 +$as_echo "$as_me: The path of NM, which resolves as \"$complete\", is not found." >&6;} + has_space=`$ECHO "$complete" | $GREP " "` + if test "x$has_space" != x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: You might be mixing spaces in the path and extra arguments, which is not allowed." >&5 +$as_echo "$as_me: You might be mixing spaces in the path and extra arguments, which is not allowed." >&6;} + fi + as_fn_error $? "Cannot locate the the path of NM" "$LINENO" 5 + fi + fi + + # Now new_path has a complete unix path to the binary + if test "x`$ECHO $new_path | $GREP ^/bin/`" != x; then + # Keep paths in /bin as-is, but remove trailing .exe if any + new_path="${new_path/%.exe/}" + # Do not save /bin paths to all_fixpath_prefixes! + else + # Not in mixed or Windows style, start by that. + new_path=`cmd //c echo $new_path` + + input_path="$new_path" + # Check if we need to convert this using DOS-style short mode. If the path + # contains just simple characters, use it. Otherwise (spaces, weird characters), + # take no chances and rewrite it. + # Note: m4 eats our [], so we need to use [ and ] instead. + has_forbidden_chars=`$ECHO "$input_path" | $GREP [^-_/:a-zA-Z0-9]` + if test "x$has_forbidden_chars" != x; then + # Now convert it to mixed DOS-style, short mode (no spaces, and / instead of \) + new_path=`cmd /c "for %A in (\"$input_path\") do @echo %~sA"|$TR \\\\\\\\ / | $TR 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` + fi + + # Output is in $new_path + + windows_path="$new_path" + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then + unix_path=`$CYGPATH -u "$windows_path"` + new_path="$unix_path" + elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then + unix_path=`$ECHO "$windows_path" | $SED -e 's,^\\(.\\):,/\\1,g' -e 's,\\\\,/,g'` + new_path="$unix_path" + fi + + # remove trailing .exe if any + new_path="${new_path/%.exe/}" + + # Save the first 10 bytes of this path to the storage, so fixpath can work. + all_fixpath_prefixes=("${all_fixpath_prefixes[@]}" "${new_path:0:10}") + fi + + else + # We're on a posix platform. Hooray! :) + # First separate the path from the arguments. This will split at the first + # space. + complete="$NM" + path="${complete%% *}" + tmp="$complete EOL" + arguments="${tmp#* }" + + new_path=`$WHICH $path 2> /dev/null` + if test "x$new_path" = x; then + is_absolute_path=`$ECHO "$path" | $GREP ^/` + if test "x$is_absolute_path" != x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: Resolving NM (as $path) with 'which' failed, using $path directly." >&5 +$as_echo "$as_me: Resolving NM (as $path) with 'which' failed, using $path directly." >&6;} + new_path="$path" + else + { $as_echo "$as_me:${as_lineno-$LINENO}: The path of NM, which resolves as \"$complete\", is not found." >&5 +$as_echo "$as_me: The path of NM, which resolves as \"$complete\", is not found." >&6;} + has_space=`$ECHO "$complete" | $GREP " "` + if test "x$has_space" != x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: This might be caused by spaces in the path, which is not allowed." >&5 +$as_echo "$as_me: This might be caused by spaces in the path, which is not allowed." >&6;} fi - # Convert to C:/ mixed style path without spaces. - tmp=`$CYGPATH -s -m "$tmp"` + as_fn_error $? "Cannot locate the the path of NM" "$LINENO" 5 + fi fi - car="$tmp" + fi - else - # "which" is not portable, but is used here - # because we know that the command exists! - car=`which $car` - fi - if test "x$cdr" != xEOL; then - NM="$car ${cdr% *}" - else - NM="$car" - fi + # Now join together the path and the arguments once again + if test "x$arguments" != xEOL; then + new_complete="$new_path ${arguments% *}" + else + new_complete="$new_path" + fi + + if test "x$complete" != "x$new_complete"; then + NM="$new_complete" + { $as_echo "$as_me:${as_lineno-$LINENO}: Rewriting NM to \"$new_complete\"" >&5 +$as_echo "$as_me: Rewriting NM to \"$new_complete\"" >&6;} + fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args. @@ -13932,78 +25224,643 @@ else fi - # Translate "gcc -E" into "`which gcc` -E" ie - # extract the full path to the binary and at the - # same time maintain any arguments passed to it. - # The command MUST exist in the path, or else! - tmp="$STRIP" - car="${tmp%% *}" - tmp="$STRIP EOL" - cdr="${tmp#* }" - # On windows we want paths without spaces. - if test "x$OPENJDK_BUILD_OS" = "xwindows"; then + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then - # Translate long cygdrive or C:\sdfsf path - # into a short mixed mode path that has no - # spaces in it. - tmp="$car" + # First separate the path from the arguments. This will split at the first + # space. + complete="$STRIP" + path="${complete%% *}" + tmp="$complete EOL" + arguments="${tmp#* }" - if test "x$OPENJDK_BUILD_OS" = "xwindows"; then - tmp=`$CYGPATH -u "$car"` - tmp=`which "$tmp"` - # If file exists with .exe appended, that's the real filename - # and cygpath needs that to convert to short style path. - if test -f "${tmp}.exe"; then - tmp="${tmp}.exe" - elif test -f "${tmp}.cmd"; then - tmp="${tmp}.cmd" + # Input might be given as Windows format, start by converting to + # unix format. + new_path=`$CYGPATH -u "$path"` + + # Now try to locate executable using which + new_path=`$WHICH "$new_path" 2> /dev/null` + # bat and cmd files are not always considered executable in cygwin causing which + # to not find them + if test "x$new_path" = x \ + && test "x`$ECHO \"$path\" | $GREP -e \"\\.bat$\" -e \"\\.cmd$\"`" != x \ + && test "x`$LS \"$path\" 2>/dev/null`" != x; then + new_path=`$CYGPATH -u "$path"` + fi + if test "x$new_path" = x; then + # Oops. Which didn't find the executable. + # The splitting of arguments from the executable at a space might have been incorrect, + # since paths with space are more likely in Windows. Give it another try with the whole + # argument. + path="$complete" + arguments="EOL" + new_path=`$CYGPATH -u "$path"` + new_path=`$WHICH "$new_path" 2> /dev/null` + # bat and cmd files are not always considered executable in cygwin causing which + # to not find them + if test "x$new_path" = x \ + && test "x`$ECHO \"$path\" | $GREP -e \"\\.bat$\" -e \"\\.cmd$\"`" != x \ + && test "x`$LS \"$path\" 2>/dev/null`" != x; then + new_path=`$CYGPATH -u "$path"` + fi + if test "x$new_path" = x; then + # It's still not found. Now this is an unrecoverable error. + { $as_echo "$as_me:${as_lineno-$LINENO}: The path of STRIP, which resolves as \"$complete\", is not found." >&5 +$as_echo "$as_me: The path of STRIP, which resolves as \"$complete\", is not found." >&6;} + has_space=`$ECHO "$complete" | $GREP " "` + if test "x$has_space" != x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: You might be mixing spaces in the path and extra arguments, which is not allowed." >&5 +$as_echo "$as_me: You might be mixing spaces in the path and extra arguments, which is not allowed." >&6;} + fi + as_fn_error $? "Cannot locate the the path of STRIP" "$LINENO" 5 + fi + fi + + # Cygwin tries to hide some aspects of the Windows file system, such that binaries are + # named .exe but called without that suffix. Therefore, "foo" and "foo.exe" are considered + # the same file, most of the time (as in "test -f"). But not when running cygpath -s, then + # "foo.exe" is OK but "foo" is an error. + # + # This test is therefore slightly more accurate than "test -f" to check for file precense. + # It is also a way to make sure we got the proper file name for the real test later on. + test_shortpath=`$CYGPATH -s -m "$new_path" 2> /dev/null` + if test "x$test_shortpath" = x; then + # Short path failed, file does not exist as specified. + # Try adding .exe or .cmd + if test -f "${new_path}.exe"; then + input_to_shortpath="${new_path}.exe" + elif test -f "${new_path}.cmd"; then + input_to_shortpath="${new_path}.cmd" + else + { $as_echo "$as_me:${as_lineno-$LINENO}: The path of STRIP, which resolves as \"$new_path\", is invalid." >&5 +$as_echo "$as_me: The path of STRIP, which resolves as \"$new_path\", is invalid." >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: Neither \"$new_path\" nor \"$new_path.exe/cmd\" can be found" >&5 +$as_echo "$as_me: Neither \"$new_path\" nor \"$new_path.exe/cmd\" can be found" >&6;} + as_fn_error $? "Cannot locate the the path of STRIP" "$LINENO" 5 + fi + else + input_to_shortpath="$new_path" + fi + + # Call helper function which possibly converts this using DOS-style short mode. + # If so, the updated path is stored in $new_path. + new_path="$input_to_shortpath" + + input_path="$input_to_shortpath" + # Check if we need to convert this using DOS-style short mode. If the path + # contains just simple characters, use it. Otherwise (spaces, weird characters), + # take no chances and rewrite it. + # Note: m4 eats our [], so we need to use [ and ] instead. + has_forbidden_chars=`$ECHO "$input_path" | $GREP [^-._/a-zA-Z0-9]` + if test "x$has_forbidden_chars" != x; then + # Now convert it to mixed DOS-style, short mode (no spaces, and / instead of \) + shortmode_path=`$CYGPATH -s -m -a "$input_path"` + path_after_shortmode=`$CYGPATH -u "$shortmode_path"` + if test "x$path_after_shortmode" != "x$input_to_shortpath"; then + # Going to short mode and back again did indeed matter. Since short mode is + # case insensitive, let's make it lowercase to improve readability. + shortmode_path=`$ECHO "$shortmode_path" | $TR 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` + # Now convert it back to Unix-stile (cygpath) + input_path=`$CYGPATH -u "$shortmode_path"` + new_path="$input_path" + fi + fi + + test_cygdrive_prefix=`$ECHO $input_path | $GREP ^/cygdrive/` + if test "x$test_cygdrive_prefix" = x; then + # As a simple fix, exclude /usr/bin since it's not a real path. + if test "x`$ECHO $input_to_shortpath | $GREP ^/usr/bin/`" = x; then + # The path is in a Cygwin special directory (e.g. /home). We need this converted to + # a path prefixed by /cygdrive for fixpath to work. + new_path="$CYGWIN_ROOT_PATH$input_path" + fi + fi + + # remove trailing .exe if any + new_path="${new_path/%.exe/}" + + elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then + + # First separate the path from the arguments. This will split at the first + # space. + complete="$STRIP" + path="${complete%% *}" + tmp="$complete EOL" + arguments="${tmp#* }" + + # Input might be given as Windows format, start by converting to + # unix format. + new_path="$path" + + windows_path="$new_path" + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then + unix_path=`$CYGPATH -u "$windows_path"` + new_path="$unix_path" + elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then + unix_path=`$ECHO "$windows_path" | $SED -e 's,^\\(.\\):,/\\1,g' -e 's,\\\\,/,g'` + new_path="$unix_path" + fi + + + # Now try to locate executable using which + new_path=`$WHICH "$new_path" 2> /dev/null` + + if test "x$new_path" = x; then + # Oops. Which didn't find the executable. + # The splitting of arguments from the executable at a space might have been incorrect, + # since paths with space are more likely in Windows. Give it another try with the whole + # argument. + path="$complete" + arguments="EOL" + new_path="$path" + + windows_path="$new_path" + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then + unix_path=`$CYGPATH -u "$windows_path"` + new_path="$unix_path" + elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then + unix_path=`$ECHO "$windows_path" | $SED -e 's,^\\(.\\):,/\\1,g' -e 's,\\\\,/,g'` + new_path="$unix_path" + fi + + + new_path=`$WHICH "$new_path" 2> /dev/null` + + if test "x$new_path" = x; then + # It's still not found. Now this is an unrecoverable error. + { $as_echo "$as_me:${as_lineno-$LINENO}: The path of STRIP, which resolves as \"$complete\", is not found." >&5 +$as_echo "$as_me: The path of STRIP, which resolves as \"$complete\", is not found." >&6;} + has_space=`$ECHO "$complete" | $GREP " "` + if test "x$has_space" != x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: You might be mixing spaces in the path and extra arguments, which is not allowed." >&5 +$as_echo "$as_me: You might be mixing spaces in the path and extra arguments, which is not allowed." >&6;} + fi + as_fn_error $? "Cannot locate the the path of STRIP" "$LINENO" 5 + fi + fi + + # Now new_path has a complete unix path to the binary + if test "x`$ECHO $new_path | $GREP ^/bin/`" != x; then + # Keep paths in /bin as-is, but remove trailing .exe if any + new_path="${new_path/%.exe/}" + # Do not save /bin paths to all_fixpath_prefixes! + else + # Not in mixed or Windows style, start by that. + new_path=`cmd //c echo $new_path` + + input_path="$new_path" + # Check if we need to convert this using DOS-style short mode. If the path + # contains just simple characters, use it. Otherwise (spaces, weird characters), + # take no chances and rewrite it. + # Note: m4 eats our [], so we need to use [ and ] instead. + has_forbidden_chars=`$ECHO "$input_path" | $GREP [^-_/:a-zA-Z0-9]` + if test "x$has_forbidden_chars" != x; then + # Now convert it to mixed DOS-style, short mode (no spaces, and / instead of \) + new_path=`cmd /c "for %A in (\"$input_path\") do @echo %~sA"|$TR \\\\\\\\ / | $TR 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` + fi + + # Output is in $new_path + + windows_path="$new_path" + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then + unix_path=`$CYGPATH -u "$windows_path"` + new_path="$unix_path" + elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then + unix_path=`$ECHO "$windows_path" | $SED -e 's,^\\(.\\):,/\\1,g' -e 's,\\\\,/,g'` + new_path="$unix_path" + fi + + # remove trailing .exe if any + new_path="${new_path/%.exe/}" + + # Save the first 10 bytes of this path to the storage, so fixpath can work. + all_fixpath_prefixes=("${all_fixpath_prefixes[@]}" "${new_path:0:10}") + fi + + else + # We're on a posix platform. Hooray! :) + # First separate the path from the arguments. This will split at the first + # space. + complete="$STRIP" + path="${complete%% *}" + tmp="$complete EOL" + arguments="${tmp#* }" + + new_path=`$WHICH $path 2> /dev/null` + if test "x$new_path" = x; then + is_absolute_path=`$ECHO "$path" | $GREP ^/` + if test "x$is_absolute_path" != x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: Resolving STRIP (as $path) with 'which' failed, using $path directly." >&5 +$as_echo "$as_me: Resolving STRIP (as $path) with 'which' failed, using $path directly." >&6;} + new_path="$path" + else + { $as_echo "$as_me:${as_lineno-$LINENO}: The path of STRIP, which resolves as \"$complete\", is not found." >&5 +$as_echo "$as_me: The path of STRIP, which resolves as \"$complete\", is not found." >&6;} + has_space=`$ECHO "$complete" | $GREP " "` + if test "x$has_space" != x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: This might be caused by spaces in the path, which is not allowed." >&5 +$as_echo "$as_me: This might be caused by spaces in the path, which is not allowed." >&6;} fi - # Convert to C:/ mixed style path without spaces. - tmp=`$CYGPATH -s -m "$tmp"` + as_fn_error $? "Cannot locate the the path of STRIP" "$LINENO" 5 + fi fi - car="$tmp" + fi - else - # "which" is not portable, but is used here - # because we know that the command exists! - car=`which $car` - fi - if test "x$cdr" != xEOL; then - STRIP="$car ${cdr% *}" - else - STRIP="$car" - fi + # Now join together the path and the arguments once again + if test "x$arguments" != xEOL; then + new_complete="$new_path ${arguments% *}" + else + new_complete="$new_path" + fi + + if test "x$complete" != "x$new_complete"; then + STRIP="$new_complete" + { $as_echo "$as_me:${as_lineno-$LINENO}: Rewriting STRIP to \"$new_complete\"" >&5 +$as_echo "$as_me: Rewriting STRIP to \"$new_complete\"" >&6;} + fi + +fi + +# objcopy is used for moving debug symbols to separate files when +# full debug symbols are enabled. +if test "x$OPENJDK_TARGET_OS" = xsolaris || test "x$OPENJDK_TARGET_OS" = xlinux; then + if test -n "$ac_tool_prefix"; then + for ac_prog in gobjcopy objcopy + do + # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. +set dummy $ac_tool_prefix$ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_OBJCOPY+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$OBJCOPY"; then + ac_cv_prog_OBJCOPY="$OBJCOPY" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_OBJCOPY="$ac_tool_prefix$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +OBJCOPY=$ac_cv_prog_OBJCOPY +if test -n "$OBJCOPY"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OBJCOPY" >&5 +$as_echo "$OBJCOPY" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$OBJCOPY" && break + done +fi +if test -z "$OBJCOPY"; then + ac_ct_OBJCOPY=$OBJCOPY + for ac_prog in gobjcopy objcopy +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_ac_ct_OBJCOPY+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_OBJCOPY"; then + ac_cv_prog_ac_ct_OBJCOPY="$ac_ct_OBJCOPY" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_OBJCOPY="$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_OBJCOPY=$ac_cv_prog_ac_ct_OBJCOPY +if test -n "$ac_ct_OBJCOPY"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OBJCOPY" >&5 +$as_echo "$ac_ct_OBJCOPY" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$ac_ct_OBJCOPY" && break +done + + if test "x$ac_ct_OBJCOPY" = x; then + OBJCOPY="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + OBJCOPY=$ac_ct_OBJCOPY + fi +fi + + + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then + + # First separate the path from the arguments. This will split at the first + # space. + complete="$OBJCOPY" + path="${complete%% *}" + tmp="$complete EOL" + arguments="${tmp#* }" + + # Input might be given as Windows format, start by converting to + # unix format. + new_path=`$CYGPATH -u "$path"` + + # Now try to locate executable using which + new_path=`$WHICH "$new_path" 2> /dev/null` + # bat and cmd files are not always considered executable in cygwin causing which + # to not find them + if test "x$new_path" = x \ + && test "x`$ECHO \"$path\" | $GREP -e \"\\.bat$\" -e \"\\.cmd$\"`" != x \ + && test "x`$LS \"$path\" 2>/dev/null`" != x; then + new_path=`$CYGPATH -u "$path"` + fi + if test "x$new_path" = x; then + # Oops. Which didn't find the executable. + # The splitting of arguments from the executable at a space might have been incorrect, + # since paths with space are more likely in Windows. Give it another try with the whole + # argument. + path="$complete" + arguments="EOL" + new_path=`$CYGPATH -u "$path"` + new_path=`$WHICH "$new_path" 2> /dev/null` + # bat and cmd files are not always considered executable in cygwin causing which + # to not find them + if test "x$new_path" = x \ + && test "x`$ECHO \"$path\" | $GREP -e \"\\.bat$\" -e \"\\.cmd$\"`" != x \ + && test "x`$LS \"$path\" 2>/dev/null`" != x; then + new_path=`$CYGPATH -u "$path"` + fi + if test "x$new_path" = x; then + # It's still not found. Now this is an unrecoverable error. + { $as_echo "$as_me:${as_lineno-$LINENO}: The path of OBJCOPY, which resolves as \"$complete\", is not found." >&5 +$as_echo "$as_me: The path of OBJCOPY, which resolves as \"$complete\", is not found." >&6;} + has_space=`$ECHO "$complete" | $GREP " "` + if test "x$has_space" != x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: You might be mixing spaces in the path and extra arguments, which is not allowed." >&5 +$as_echo "$as_me: You might be mixing spaces in the path and extra arguments, which is not allowed." >&6;} + fi + as_fn_error $? "Cannot locate the the path of OBJCOPY" "$LINENO" 5 + fi + fi + + # Cygwin tries to hide some aspects of the Windows file system, such that binaries are + # named .exe but called without that suffix. Therefore, "foo" and "foo.exe" are considered + # the same file, most of the time (as in "test -f"). But not when running cygpath -s, then + # "foo.exe" is OK but "foo" is an error. + # + # This test is therefore slightly more accurate than "test -f" to check for file precense. + # It is also a way to make sure we got the proper file name for the real test later on. + test_shortpath=`$CYGPATH -s -m "$new_path" 2> /dev/null` + if test "x$test_shortpath" = x; then + # Short path failed, file does not exist as specified. + # Try adding .exe or .cmd + if test -f "${new_path}.exe"; then + input_to_shortpath="${new_path}.exe" + elif test -f "${new_path}.cmd"; then + input_to_shortpath="${new_path}.cmd" + else + { $as_echo "$as_me:${as_lineno-$LINENO}: The path of OBJCOPY, which resolves as \"$new_path\", is invalid." >&5 +$as_echo "$as_me: The path of OBJCOPY, which resolves as \"$new_path\", is invalid." >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: Neither \"$new_path\" nor \"$new_path.exe/cmd\" can be found" >&5 +$as_echo "$as_me: Neither \"$new_path\" nor \"$new_path.exe/cmd\" can be found" >&6;} + as_fn_error $? "Cannot locate the the path of OBJCOPY" "$LINENO" 5 + fi + else + input_to_shortpath="$new_path" + fi + + # Call helper function which possibly converts this using DOS-style short mode. + # If so, the updated path is stored in $new_path. + new_path="$input_to_shortpath" + + input_path="$input_to_shortpath" + # Check if we need to convert this using DOS-style short mode. If the path + # contains just simple characters, use it. Otherwise (spaces, weird characters), + # take no chances and rewrite it. + # Note: m4 eats our [], so we need to use [ and ] instead. + has_forbidden_chars=`$ECHO "$input_path" | $GREP [^-._/a-zA-Z0-9]` + if test "x$has_forbidden_chars" != x; then + # Now convert it to mixed DOS-style, short mode (no spaces, and / instead of \) + shortmode_path=`$CYGPATH -s -m -a "$input_path"` + path_after_shortmode=`$CYGPATH -u "$shortmode_path"` + if test "x$path_after_shortmode" != "x$input_to_shortpath"; then + # Going to short mode and back again did indeed matter. Since short mode is + # case insensitive, let's make it lowercase to improve readability. + shortmode_path=`$ECHO "$shortmode_path" | $TR 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` + # Now convert it back to Unix-stile (cygpath) + input_path=`$CYGPATH -u "$shortmode_path"` + new_path="$input_path" + fi + fi + + test_cygdrive_prefix=`$ECHO $input_path | $GREP ^/cygdrive/` + if test "x$test_cygdrive_prefix" = x; then + # As a simple fix, exclude /usr/bin since it's not a real path. + if test "x`$ECHO $input_to_shortpath | $GREP ^/usr/bin/`" = x; then + # The path is in a Cygwin special directory (e.g. /home). We need this converted to + # a path prefixed by /cygdrive for fixpath to work. + new_path="$CYGWIN_ROOT_PATH$input_path" + fi + fi + + # remove trailing .exe if any + new_path="${new_path/%.exe/}" + + elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then + + # First separate the path from the arguments. This will split at the first + # space. + complete="$OBJCOPY" + path="${complete%% *}" + tmp="$complete EOL" + arguments="${tmp#* }" + + # Input might be given as Windows format, start by converting to + # unix format. + new_path="$path" + + windows_path="$new_path" + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then + unix_path=`$CYGPATH -u "$windows_path"` + new_path="$unix_path" + elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then + unix_path=`$ECHO "$windows_path" | $SED -e 's,^\\(.\\):,/\\1,g' -e 's,\\\\,/,g'` + new_path="$unix_path" + fi + + + # Now try to locate executable using which + new_path=`$WHICH "$new_path" 2> /dev/null` + + if test "x$new_path" = x; then + # Oops. Which didn't find the executable. + # The splitting of arguments from the executable at a space might have been incorrect, + # since paths with space are more likely in Windows. Give it another try with the whole + # argument. + path="$complete" + arguments="EOL" + new_path="$path" + + windows_path="$new_path" + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then + unix_path=`$CYGPATH -u "$windows_path"` + new_path="$unix_path" + elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then + unix_path=`$ECHO "$windows_path" | $SED -e 's,^\\(.\\):,/\\1,g' -e 's,\\\\,/,g'` + new_path="$unix_path" + fi + + + new_path=`$WHICH "$new_path" 2> /dev/null` + + if test "x$new_path" = x; then + # It's still not found. Now this is an unrecoverable error. + { $as_echo "$as_me:${as_lineno-$LINENO}: The path of OBJCOPY, which resolves as \"$complete\", is not found." >&5 +$as_echo "$as_me: The path of OBJCOPY, which resolves as \"$complete\", is not found." >&6;} + has_space=`$ECHO "$complete" | $GREP " "` + if test "x$has_space" != x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: You might be mixing spaces in the path and extra arguments, which is not allowed." >&5 +$as_echo "$as_me: You might be mixing spaces in the path and extra arguments, which is not allowed." >&6;} + fi + as_fn_error $? "Cannot locate the the path of OBJCOPY" "$LINENO" 5 + fi + fi + + # Now new_path has a complete unix path to the binary + if test "x`$ECHO $new_path | $GREP ^/bin/`" != x; then + # Keep paths in /bin as-is, but remove trailing .exe if any + new_path="${new_path/%.exe/}" + # Do not save /bin paths to all_fixpath_prefixes! + else + # Not in mixed or Windows style, start by that. + new_path=`cmd //c echo $new_path` + + input_path="$new_path" + # Check if we need to convert this using DOS-style short mode. If the path + # contains just simple characters, use it. Otherwise (spaces, weird characters), + # take no chances and rewrite it. + # Note: m4 eats our [], so we need to use [ and ] instead. + has_forbidden_chars=`$ECHO "$input_path" | $GREP [^-_/:a-zA-Z0-9]` + if test "x$has_forbidden_chars" != x; then + # Now convert it to mixed DOS-style, short mode (no spaces, and / instead of \) + new_path=`cmd /c "for %A in (\"$input_path\") do @echo %~sA"|$TR \\\\\\\\ / | $TR 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` + fi + + # Output is in $new_path + + windows_path="$new_path" + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then + unix_path=`$CYGPATH -u "$windows_path"` + new_path="$unix_path" + elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then + unix_path=`$ECHO "$windows_path" | $SED -e 's,^\\(.\\):,/\\1,g' -e 's,\\\\,/,g'` + new_path="$unix_path" + fi + + # remove trailing .exe if any + new_path="${new_path/%.exe/}" + + # Save the first 10 bytes of this path to the storage, so fixpath can work. + all_fixpath_prefixes=("${all_fixpath_prefixes[@]}" "${new_path:0:10}") + fi + + else + # We're on a posix platform. Hooray! :) + # First separate the path from the arguments. This will split at the first + # space. + complete="$OBJCOPY" + path="${complete%% *}" + tmp="$complete EOL" + arguments="${tmp#* }" + + new_path=`$WHICH $path 2> /dev/null` + if test "x$new_path" = x; then + is_absolute_path=`$ECHO "$path" | $GREP ^/` + if test "x$is_absolute_path" != x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: Resolving OBJCOPY (as $path) with 'which' failed, using $path directly." >&5 +$as_echo "$as_me: Resolving OBJCOPY (as $path) with 'which' failed, using $path directly." >&6;} + new_path="$path" + else + { $as_echo "$as_me:${as_lineno-$LINENO}: The path of OBJCOPY, which resolves as \"$complete\", is not found." >&5 +$as_echo "$as_me: The path of OBJCOPY, which resolves as \"$complete\", is not found." >&6;} + has_space=`$ECHO "$complete" | $GREP " "` + if test "x$has_space" != x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: This might be caused by spaces in the path, which is not allowed." >&5 +$as_echo "$as_me: This might be caused by spaces in the path, which is not allowed." >&6;} + fi + as_fn_error $? "Cannot locate the the path of OBJCOPY" "$LINENO" 5 + fi + fi + fi + + # Now join together the path and the arguments once again + if test "x$arguments" != xEOL; then + new_complete="$new_path ${arguments% *}" + else + new_complete="$new_path" + fi + + if test "x$complete" != "x$new_complete"; then + OBJCOPY="$new_complete" + { $as_echo "$as_me:${as_lineno-$LINENO}: Rewriting OBJCOPY to \"$new_complete\"" >&5 +$as_echo "$as_me: Rewriting OBJCOPY to \"$new_complete\"" >&6;} + fi fi -### -# -# Check for objcopy -# -# but search for gobjcopy first... -# since I on solaris found a broken objcopy...buhh -# if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}gobjcopy", so it can be a program name with args. -set dummy ${ac_tool_prefix}gobjcopy; ac_word=$2 + for ac_prog in gobjdump objdump + do + # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. +set dummy $ac_tool_prefix$ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_path_OBJCOPY+set}" = set; then : +if test "${ac_cv_prog_OBJDUMP+set}" = set; then : $as_echo_n "(cached) " >&6 else - case $OBJCOPY in - [\\/]* | ?:[\\/]*) - ac_cv_path_OBJCOPY="$OBJCOPY" # Let the user override the test with a path. - ;; - *) - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR + if test -n "$OBJDUMP"; then + ac_cv_prog_OBJDUMP="$OBJDUMP" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_path_OBJCOPY="$as_dir/$ac_word$ac_exec_ext" + ac_cv_prog_OBJDUMP="$ac_tool_prefix$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi @@ -14011,42 +25868,43 @@ done done IFS=$as_save_IFS - ;; -esac fi -OBJCOPY=$ac_cv_path_OBJCOPY -if test -n "$OBJCOPY"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OBJCOPY" >&5 -$as_echo "$OBJCOPY" >&6; } +fi +OBJDUMP=$ac_cv_prog_OBJDUMP +if test -n "$OBJDUMP"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OBJDUMP" >&5 +$as_echo "$OBJDUMP" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi + test -n "$OBJDUMP" && break + done fi -if test -z "$ac_cv_path_OBJCOPY"; then - ac_pt_OBJCOPY=$OBJCOPY - # Extract the first word of "gobjcopy", so it can be a program name with args. -set dummy gobjcopy; ac_word=$2 +if test -z "$OBJDUMP"; then + ac_ct_OBJDUMP=$OBJDUMP + for ac_prog in gobjdump objdump +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_path_ac_pt_OBJCOPY+set}" = set; then : +if test "${ac_cv_prog_ac_ct_OBJDUMP+set}" = set; then : $as_echo_n "(cached) " >&6 else - case $ac_pt_OBJCOPY in - [\\/]* | ?:[\\/]*) - ac_cv_path_ac_pt_OBJCOPY="$ac_pt_OBJCOPY" # Let the user override the test with a path. - ;; - *) - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR + if test -n "$ac_ct_OBJDUMP"; then + ac_cv_prog_ac_ct_OBJDUMP="$ac_ct_OBJDUMP" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_path_ac_pt_OBJCOPY="$as_dir/$ac_word$ac_exec_ext" + ac_cv_prog_ac_ct_OBJDUMP="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi @@ -14054,20 +25912,23 @@ done done IFS=$as_save_IFS - ;; -esac fi -ac_pt_OBJCOPY=$ac_cv_path_ac_pt_OBJCOPY -if test -n "$ac_pt_OBJCOPY"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_pt_OBJCOPY" >&5 -$as_echo "$ac_pt_OBJCOPY" >&6; } +fi +ac_ct_OBJDUMP=$ac_cv_prog_ac_ct_OBJDUMP +if test -n "$ac_ct_OBJDUMP"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OBJDUMP" >&5 +$as_echo "$ac_ct_OBJDUMP" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi - if test "x$ac_pt_OBJCOPY" = x; then - OBJCOPY="" + + test -n "$ac_ct_OBJDUMP" && break +done + + if test "x$ac_ct_OBJDUMP" = x; then + OBJDUMP="" else case $cross_compiling:$ac_tool_warned in yes:) @@ -14075,110 +25936,266 @@ yes:) $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac - OBJCOPY=$ac_pt_OBJCOPY + OBJDUMP=$ac_ct_OBJDUMP fi -else - OBJCOPY="$ac_cv_path_OBJCOPY" fi -if test "x$OBJCOPY" = x; then - if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}objcopy", so it can be a program name with args. -set dummy ${ac_tool_prefix}objcopy; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_path_OBJCOPY+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - case $OBJCOPY in - [\\/]* | ?:[\\/]*) - ac_cv_path_OBJCOPY="$OBJCOPY" # Let the user override the test with a path. - ;; - *) - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_path_OBJCOPY="$as_dir/$ac_word$ac_exec_ext" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 +if test "x$OBJDUMP" != x; then + # Only used for compare.sh; we can live without it. BASIC_FIXUP_EXECUTABLE bails if argument is missing. + + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then + + # First separate the path from the arguments. This will split at the first + # space. + complete="$OBJDUMP" + path="${complete%% *}" + tmp="$complete EOL" + arguments="${tmp#* }" + + # Input might be given as Windows format, start by converting to + # unix format. + new_path=`$CYGPATH -u "$path"` + + # Now try to locate executable using which + new_path=`$WHICH "$new_path" 2> /dev/null` + # bat and cmd files are not always considered executable in cygwin causing which + # to not find them + if test "x$new_path" = x \ + && test "x`$ECHO \"$path\" | $GREP -e \"\\.bat$\" -e \"\\.cmd$\"`" != x \ + && test "x`$LS \"$path\" 2>/dev/null`" != x; then + new_path=`$CYGPATH -u "$path"` fi -done - done -IFS=$as_save_IFS - - ;; -esac -fi -OBJCOPY=$ac_cv_path_OBJCOPY -if test -n "$OBJCOPY"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OBJCOPY" >&5 -$as_echo "$OBJCOPY" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - -fi -if test -z "$ac_cv_path_OBJCOPY"; then - ac_pt_OBJCOPY=$OBJCOPY - # Extract the first word of "objcopy", so it can be a program name with args. -set dummy objcopy; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_path_ac_pt_OBJCOPY+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - case $ac_pt_OBJCOPY in - [\\/]* | ?:[\\/]*) - ac_cv_path_ac_pt_OBJCOPY="$ac_pt_OBJCOPY" # Let the user override the test with a path. - ;; - *) - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_path_ac_pt_OBJCOPY="$as_dir/$ac_word$ac_exec_ext" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 + if test "x$new_path" = x; then + # Oops. Which didn't find the executable. + # The splitting of arguments from the executable at a space might have been incorrect, + # since paths with space are more likely in Windows. Give it another try with the whole + # argument. + path="$complete" + arguments="EOL" + new_path=`$CYGPATH -u "$path"` + new_path=`$WHICH "$new_path" 2> /dev/null` + # bat and cmd files are not always considered executable in cygwin causing which + # to not find them + if test "x$new_path" = x \ + && test "x`$ECHO \"$path\" | $GREP -e \"\\.bat$\" -e \"\\.cmd$\"`" != x \ + && test "x`$LS \"$path\" 2>/dev/null`" != x; then + new_path=`$CYGPATH -u "$path"` + fi + if test "x$new_path" = x; then + # It's still not found. Now this is an unrecoverable error. + { $as_echo "$as_me:${as_lineno-$LINENO}: The path of OBJDUMP, which resolves as \"$complete\", is not found." >&5 +$as_echo "$as_me: The path of OBJDUMP, which resolves as \"$complete\", is not found." >&6;} + has_space=`$ECHO "$complete" | $GREP " "` + if test "x$has_space" != x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: You might be mixing spaces in the path and extra arguments, which is not allowed." >&5 +$as_echo "$as_me: You might be mixing spaces in the path and extra arguments, which is not allowed." >&6;} + fi + as_fn_error $? "Cannot locate the the path of OBJDUMP" "$LINENO" 5 + fi fi -done - done -IFS=$as_save_IFS - ;; -esac -fi -ac_pt_OBJCOPY=$ac_cv_path_ac_pt_OBJCOPY -if test -n "$ac_pt_OBJCOPY"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_pt_OBJCOPY" >&5 -$as_echo "$ac_pt_OBJCOPY" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - if test "x$ac_pt_OBJCOPY" = x; then - OBJCOPY="" + # Cygwin tries to hide some aspects of the Windows file system, such that binaries are + # named .exe but called without that suffix. Therefore, "foo" and "foo.exe" are considered + # the same file, most of the time (as in "test -f"). But not when running cygpath -s, then + # "foo.exe" is OK but "foo" is an error. + # + # This test is therefore slightly more accurate than "test -f" to check for file precense. + # It is also a way to make sure we got the proper file name for the real test later on. + test_shortpath=`$CYGPATH -s -m "$new_path" 2> /dev/null` + if test "x$test_shortpath" = x; then + # Short path failed, file does not exist as specified. + # Try adding .exe or .cmd + if test -f "${new_path}.exe"; then + input_to_shortpath="${new_path}.exe" + elif test -f "${new_path}.cmd"; then + input_to_shortpath="${new_path}.cmd" + else + { $as_echo "$as_me:${as_lineno-$LINENO}: The path of OBJDUMP, which resolves as \"$new_path\", is invalid." >&5 +$as_echo "$as_me: The path of OBJDUMP, which resolves as \"$new_path\", is invalid." >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: Neither \"$new_path\" nor \"$new_path.exe/cmd\" can be found" >&5 +$as_echo "$as_me: Neither \"$new_path\" nor \"$new_path.exe/cmd\" can be found" >&6;} + as_fn_error $? "Cannot locate the the path of OBJDUMP" "$LINENO" 5 + fi else - case $cross_compiling:$ac_tool_warned in -yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} -ac_tool_warned=yes ;; -esac - OBJCOPY=$ac_pt_OBJCOPY + input_to_shortpath="$new_path" + fi + + # Call helper function which possibly converts this using DOS-style short mode. + # If so, the updated path is stored in $new_path. + new_path="$input_to_shortpath" + + input_path="$input_to_shortpath" + # Check if we need to convert this using DOS-style short mode. If the path + # contains just simple characters, use it. Otherwise (spaces, weird characters), + # take no chances and rewrite it. + # Note: m4 eats our [], so we need to use [ and ] instead. + has_forbidden_chars=`$ECHO "$input_path" | $GREP [^-._/a-zA-Z0-9]` + if test "x$has_forbidden_chars" != x; then + # Now convert it to mixed DOS-style, short mode (no spaces, and / instead of \) + shortmode_path=`$CYGPATH -s -m -a "$input_path"` + path_after_shortmode=`$CYGPATH -u "$shortmode_path"` + if test "x$path_after_shortmode" != "x$input_to_shortpath"; then + # Going to short mode and back again did indeed matter. Since short mode is + # case insensitive, let's make it lowercase to improve readability. + shortmode_path=`$ECHO "$shortmode_path" | $TR 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` + # Now convert it back to Unix-stile (cygpath) + input_path=`$CYGPATH -u "$shortmode_path"` + new_path="$input_path" + fi + fi + + test_cygdrive_prefix=`$ECHO $input_path | $GREP ^/cygdrive/` + if test "x$test_cygdrive_prefix" = x; then + # As a simple fix, exclude /usr/bin since it's not a real path. + if test "x`$ECHO $input_to_shortpath | $GREP ^/usr/bin/`" = x; then + # The path is in a Cygwin special directory (e.g. /home). We need this converted to + # a path prefixed by /cygdrive for fixpath to work. + new_path="$CYGWIN_ROOT_PATH$input_path" + fi + fi + + # remove trailing .exe if any + new_path="${new_path/%.exe/}" + + elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then + + # First separate the path from the arguments. This will split at the first + # space. + complete="$OBJDUMP" + path="${complete%% *}" + tmp="$complete EOL" + arguments="${tmp#* }" + + # Input might be given as Windows format, start by converting to + # unix format. + new_path="$path" + + windows_path="$new_path" + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then + unix_path=`$CYGPATH -u "$windows_path"` + new_path="$unix_path" + elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then + unix_path=`$ECHO "$windows_path" | $SED -e 's,^\\(.\\):,/\\1,g' -e 's,\\\\,/,g'` + new_path="$unix_path" + fi + + + # Now try to locate executable using which + new_path=`$WHICH "$new_path" 2> /dev/null` + + if test "x$new_path" = x; then + # Oops. Which didn't find the executable. + # The splitting of arguments from the executable at a space might have been incorrect, + # since paths with space are more likely in Windows. Give it another try with the whole + # argument. + path="$complete" + arguments="EOL" + new_path="$path" + + windows_path="$new_path" + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then + unix_path=`$CYGPATH -u "$windows_path"` + new_path="$unix_path" + elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then + unix_path=`$ECHO "$windows_path" | $SED -e 's,^\\(.\\):,/\\1,g' -e 's,\\\\,/,g'` + new_path="$unix_path" + fi + + + new_path=`$WHICH "$new_path" 2> /dev/null` + + if test "x$new_path" = x; then + # It's still not found. Now this is an unrecoverable error. + { $as_echo "$as_me:${as_lineno-$LINENO}: The path of OBJDUMP, which resolves as \"$complete\", is not found." >&5 +$as_echo "$as_me: The path of OBJDUMP, which resolves as \"$complete\", is not found." >&6;} + has_space=`$ECHO "$complete" | $GREP " "` + if test "x$has_space" != x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: You might be mixing spaces in the path and extra arguments, which is not allowed." >&5 +$as_echo "$as_me: You might be mixing spaces in the path and extra arguments, which is not allowed." >&6;} + fi + as_fn_error $? "Cannot locate the the path of OBJDUMP" "$LINENO" 5 + fi + fi + + # Now new_path has a complete unix path to the binary + if test "x`$ECHO $new_path | $GREP ^/bin/`" != x; then + # Keep paths in /bin as-is, but remove trailing .exe if any + new_path="${new_path/%.exe/}" + # Do not save /bin paths to all_fixpath_prefixes! + else + # Not in mixed or Windows style, start by that. + new_path=`cmd //c echo $new_path` + + input_path="$new_path" + # Check if we need to convert this using DOS-style short mode. If the path + # contains just simple characters, use it. Otherwise (spaces, weird characters), + # take no chances and rewrite it. + # Note: m4 eats our [], so we need to use [ and ] instead. + has_forbidden_chars=`$ECHO "$input_path" | $GREP [^-_/:a-zA-Z0-9]` + if test "x$has_forbidden_chars" != x; then + # Now convert it to mixed DOS-style, short mode (no spaces, and / instead of \) + new_path=`cmd /c "for %A in (\"$input_path\") do @echo %~sA"|$TR \\\\\\\\ / | $TR 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` + fi + + # Output is in $new_path + + windows_path="$new_path" + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then + unix_path=`$CYGPATH -u "$windows_path"` + new_path="$unix_path" + elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then + unix_path=`$ECHO "$windows_path" | $SED -e 's,^\\(.\\):,/\\1,g' -e 's,\\\\,/,g'` + new_path="$unix_path" + fi + + # remove trailing .exe if any + new_path="${new_path/%.exe/}" + + # Save the first 10 bytes of this path to the storage, so fixpath can work. + all_fixpath_prefixes=("${all_fixpath_prefixes[@]}" "${new_path:0:10}") + fi + + else + # We're on a posix platform. Hooray! :) + # First separate the path from the arguments. This will split at the first + # space. + complete="$OBJDUMP" + path="${complete%% *}" + tmp="$complete EOL" + arguments="${tmp#* }" + + new_path=`$WHICH $path 2> /dev/null` + if test "x$new_path" = x; then + is_absolute_path=`$ECHO "$path" | $GREP ^/` + if test "x$is_absolute_path" != x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: Resolving OBJDUMP (as $path) with 'which' failed, using $path directly." >&5 +$as_echo "$as_me: Resolving OBJDUMP (as $path) with 'which' failed, using $path directly." >&6;} + new_path="$path" + else + { $as_echo "$as_me:${as_lineno-$LINENO}: The path of OBJDUMP, which resolves as \"$complete\", is not found." >&5 +$as_echo "$as_me: The path of OBJDUMP, which resolves as \"$complete\", is not found." >&6;} + has_space=`$ECHO "$complete" | $GREP " "` + if test "x$has_space" != x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: This might be caused by spaces in the path, which is not allowed." >&5 +$as_echo "$as_me: This might be caused by spaces in the path, which is not allowed." >&6;} + fi + as_fn_error $? "Cannot locate the the path of OBJDUMP" "$LINENO" 5 + fi + fi + fi + + # Now join together the path and the arguments once again + if test "x$arguments" != xEOL; then + new_complete="$new_path ${arguments% *}" + else + new_complete="$new_path" + fi + + if test "x$complete" != "x$new_complete"; then + OBJDUMP="$new_complete" + { $as_echo "$as_me:${as_lineno-$LINENO}: Rewriting OBJDUMP to \"$new_complete\"" >&5 +$as_echo "$as_me: Rewriting OBJDUMP to \"$new_complete\"" >&6;} fi -else - OBJCOPY="$ac_cv_path_OBJCOPY" -fi fi @@ -14224,47 +26241,259 @@ fi - # Translate "gcc -E" into "`which gcc` -E" ie - # extract the full path to the binary and at the - # same time maintain any arguments passed to it. - # The command MUST exist in the path, or else! - tmp="$LIPO" - car="${tmp%% *}" - tmp="$LIPO EOL" - cdr="${tmp#* }" - # On windows we want paths without spaces. - if test "x$OPENJDK_BUILD_OS" = "xwindows"; then + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then - # Translate long cygdrive or C:\sdfsf path - # into a short mixed mode path that has no - # spaces in it. - tmp="$car" + # First separate the path from the arguments. This will split at the first + # space. + complete="$LIPO" + path="${complete%% *}" + tmp="$complete EOL" + arguments="${tmp#* }" - if test "x$OPENJDK_BUILD_OS" = "xwindows"; then - tmp=`$CYGPATH -u "$car"` - tmp=`which "$tmp"` - # If file exists with .exe appended, that's the real filename - # and cygpath needs that to convert to short style path. - if test -f "${tmp}.exe"; then - tmp="${tmp}.exe" - elif test -f "${tmp}.cmd"; then - tmp="${tmp}.cmd" + # Input might be given as Windows format, start by converting to + # unix format. + new_path=`$CYGPATH -u "$path"` + + # Now try to locate executable using which + new_path=`$WHICH "$new_path" 2> /dev/null` + # bat and cmd files are not always considered executable in cygwin causing which + # to not find them + if test "x$new_path" = x \ + && test "x`$ECHO \"$path\" | $GREP -e \"\\.bat$\" -e \"\\.cmd$\"`" != x \ + && test "x`$LS \"$path\" 2>/dev/null`" != x; then + new_path=`$CYGPATH -u "$path"` + fi + if test "x$new_path" = x; then + # Oops. Which didn't find the executable. + # The splitting of arguments from the executable at a space might have been incorrect, + # since paths with space are more likely in Windows. Give it another try with the whole + # argument. + path="$complete" + arguments="EOL" + new_path=`$CYGPATH -u "$path"` + new_path=`$WHICH "$new_path" 2> /dev/null` + # bat and cmd files are not always considered executable in cygwin causing which + # to not find them + if test "x$new_path" = x \ + && test "x`$ECHO \"$path\" | $GREP -e \"\\.bat$\" -e \"\\.cmd$\"`" != x \ + && test "x`$LS \"$path\" 2>/dev/null`" != x; then + new_path=`$CYGPATH -u "$path"` + fi + if test "x$new_path" = x; then + # It's still not found. Now this is an unrecoverable error. + { $as_echo "$as_me:${as_lineno-$LINENO}: The path of LIPO, which resolves as \"$complete\", is not found." >&5 +$as_echo "$as_me: The path of LIPO, which resolves as \"$complete\", is not found." >&6;} + has_space=`$ECHO "$complete" | $GREP " "` + if test "x$has_space" != x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: You might be mixing spaces in the path and extra arguments, which is not allowed." >&5 +$as_echo "$as_me: You might be mixing spaces in the path and extra arguments, which is not allowed." >&6;} + fi + as_fn_error $? "Cannot locate the the path of LIPO" "$LINENO" 5 + fi + fi + + # Cygwin tries to hide some aspects of the Windows file system, such that binaries are + # named .exe but called without that suffix. Therefore, "foo" and "foo.exe" are considered + # the same file, most of the time (as in "test -f"). But not when running cygpath -s, then + # "foo.exe" is OK but "foo" is an error. + # + # This test is therefore slightly more accurate than "test -f" to check for file precense. + # It is also a way to make sure we got the proper file name for the real test later on. + test_shortpath=`$CYGPATH -s -m "$new_path" 2> /dev/null` + if test "x$test_shortpath" = x; then + # Short path failed, file does not exist as specified. + # Try adding .exe or .cmd + if test -f "${new_path}.exe"; then + input_to_shortpath="${new_path}.exe" + elif test -f "${new_path}.cmd"; then + input_to_shortpath="${new_path}.cmd" + else + { $as_echo "$as_me:${as_lineno-$LINENO}: The path of LIPO, which resolves as \"$new_path\", is invalid." >&5 +$as_echo "$as_me: The path of LIPO, which resolves as \"$new_path\", is invalid." >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: Neither \"$new_path\" nor \"$new_path.exe/cmd\" can be found" >&5 +$as_echo "$as_me: Neither \"$new_path\" nor \"$new_path.exe/cmd\" can be found" >&6;} + as_fn_error $? "Cannot locate the the path of LIPO" "$LINENO" 5 + fi + else + input_to_shortpath="$new_path" + fi + + # Call helper function which possibly converts this using DOS-style short mode. + # If so, the updated path is stored in $new_path. + new_path="$input_to_shortpath" + + input_path="$input_to_shortpath" + # Check if we need to convert this using DOS-style short mode. If the path + # contains just simple characters, use it. Otherwise (spaces, weird characters), + # take no chances and rewrite it. + # Note: m4 eats our [], so we need to use [ and ] instead. + has_forbidden_chars=`$ECHO "$input_path" | $GREP [^-._/a-zA-Z0-9]` + if test "x$has_forbidden_chars" != x; then + # Now convert it to mixed DOS-style, short mode (no spaces, and / instead of \) + shortmode_path=`$CYGPATH -s -m -a "$input_path"` + path_after_shortmode=`$CYGPATH -u "$shortmode_path"` + if test "x$path_after_shortmode" != "x$input_to_shortpath"; then + # Going to short mode and back again did indeed matter. Since short mode is + # case insensitive, let's make it lowercase to improve readability. + shortmode_path=`$ECHO "$shortmode_path" | $TR 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` + # Now convert it back to Unix-stile (cygpath) + input_path=`$CYGPATH -u "$shortmode_path"` + new_path="$input_path" + fi + fi + + test_cygdrive_prefix=`$ECHO $input_path | $GREP ^/cygdrive/` + if test "x$test_cygdrive_prefix" = x; then + # As a simple fix, exclude /usr/bin since it's not a real path. + if test "x`$ECHO $input_to_shortpath | $GREP ^/usr/bin/`" = x; then + # The path is in a Cygwin special directory (e.g. /home). We need this converted to + # a path prefixed by /cygdrive for fixpath to work. + new_path="$CYGWIN_ROOT_PATH$input_path" + fi + fi + + # remove trailing .exe if any + new_path="${new_path/%.exe/}" + + elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then + + # First separate the path from the arguments. This will split at the first + # space. + complete="$LIPO" + path="${complete%% *}" + tmp="$complete EOL" + arguments="${tmp#* }" + + # Input might be given as Windows format, start by converting to + # unix format. + new_path="$path" + + windows_path="$new_path" + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then + unix_path=`$CYGPATH -u "$windows_path"` + new_path="$unix_path" + elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then + unix_path=`$ECHO "$windows_path" | $SED -e 's,^\\(.\\):,/\\1,g' -e 's,\\\\,/,g'` + new_path="$unix_path" + fi + + + # Now try to locate executable using which + new_path=`$WHICH "$new_path" 2> /dev/null` + + if test "x$new_path" = x; then + # Oops. Which didn't find the executable. + # The splitting of arguments from the executable at a space might have been incorrect, + # since paths with space are more likely in Windows. Give it another try with the whole + # argument. + path="$complete" + arguments="EOL" + new_path="$path" + + windows_path="$new_path" + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then + unix_path=`$CYGPATH -u "$windows_path"` + new_path="$unix_path" + elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then + unix_path=`$ECHO "$windows_path" | $SED -e 's,^\\(.\\):,/\\1,g' -e 's,\\\\,/,g'` + new_path="$unix_path" + fi + + + new_path=`$WHICH "$new_path" 2> /dev/null` + + if test "x$new_path" = x; then + # It's still not found. Now this is an unrecoverable error. + { $as_echo "$as_me:${as_lineno-$LINENO}: The path of LIPO, which resolves as \"$complete\", is not found." >&5 +$as_echo "$as_me: The path of LIPO, which resolves as \"$complete\", is not found." >&6;} + has_space=`$ECHO "$complete" | $GREP " "` + if test "x$has_space" != x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: You might be mixing spaces in the path and extra arguments, which is not allowed." >&5 +$as_echo "$as_me: You might be mixing spaces in the path and extra arguments, which is not allowed." >&6;} + fi + as_fn_error $? "Cannot locate the the path of LIPO" "$LINENO" 5 + fi + fi + + # Now new_path has a complete unix path to the binary + if test "x`$ECHO $new_path | $GREP ^/bin/`" != x; then + # Keep paths in /bin as-is, but remove trailing .exe if any + new_path="${new_path/%.exe/}" + # Do not save /bin paths to all_fixpath_prefixes! + else + # Not in mixed or Windows style, start by that. + new_path=`cmd //c echo $new_path` + + input_path="$new_path" + # Check if we need to convert this using DOS-style short mode. If the path + # contains just simple characters, use it. Otherwise (spaces, weird characters), + # take no chances and rewrite it. + # Note: m4 eats our [], so we need to use [ and ] instead. + has_forbidden_chars=`$ECHO "$input_path" | $GREP [^-_/:a-zA-Z0-9]` + if test "x$has_forbidden_chars" != x; then + # Now convert it to mixed DOS-style, short mode (no spaces, and / instead of \) + new_path=`cmd /c "for %A in (\"$input_path\") do @echo %~sA"|$TR \\\\\\\\ / | $TR 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` + fi + + # Output is in $new_path + + windows_path="$new_path" + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then + unix_path=`$CYGPATH -u "$windows_path"` + new_path="$unix_path" + elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then + unix_path=`$ECHO "$windows_path" | $SED -e 's,^\\(.\\):,/\\1,g' -e 's,\\\\,/,g'` + new_path="$unix_path" + fi + + # remove trailing .exe if any + new_path="${new_path/%.exe/}" + + # Save the first 10 bytes of this path to the storage, so fixpath can work. + all_fixpath_prefixes=("${all_fixpath_prefixes[@]}" "${new_path:0:10}") + fi + + else + # We're on a posix platform. Hooray! :) + # First separate the path from the arguments. This will split at the first + # space. + complete="$LIPO" + path="${complete%% *}" + tmp="$complete EOL" + arguments="${tmp#* }" + + new_path=`$WHICH $path 2> /dev/null` + if test "x$new_path" = x; then + is_absolute_path=`$ECHO "$path" | $GREP ^/` + if test "x$is_absolute_path" != x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: Resolving LIPO (as $path) with 'which' failed, using $path directly." >&5 +$as_echo "$as_me: Resolving LIPO (as $path) with 'which' failed, using $path directly." >&6;} + new_path="$path" + else + { $as_echo "$as_me:${as_lineno-$LINENO}: The path of LIPO, which resolves as \"$complete\", is not found." >&5 +$as_echo "$as_me: The path of LIPO, which resolves as \"$complete\", is not found." >&6;} + has_space=`$ECHO "$complete" | $GREP " "` + if test "x$has_space" != x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: This might be caused by spaces in the path, which is not allowed." >&5 +$as_echo "$as_me: This might be caused by spaces in the path, which is not allowed." >&6;} fi - # Convert to C:/ mixed style path without spaces. - tmp=`$CYGPATH -s -m "$tmp"` + as_fn_error $? "Cannot locate the the path of LIPO" "$LINENO" 5 + fi fi - car="$tmp" + fi - else - # "which" is not portable, but is used here - # because we know that the command exists! - car=`which $car` - fi - if test "x$cdr" != xEOL; then - LIPO="$car ${cdr% *}" - else - LIPO="$car" - fi + # Now join together the path and the arguments once again + if test "x$arguments" != xEOL; then + new_complete="$new_path ${arguments% *}" + else + new_complete="$new_path" + fi + + if test "x$complete" != "x$new_complete"; then + LIPO="$new_complete" + { $as_echo "$as_me:${as_lineno-$LINENO}: Rewriting LIPO to \"$new_complete\"" >&5 +$as_echo "$as_me: Rewriting LIPO to \"$new_complete\"" >&6;} + fi fi @@ -14800,7 +27029,7 @@ if test "x$GCC" = xyes; then POST_STRIP_CMD="$STRIP -g" # Linking is different on MacOSX - if test "x$OPENJDK_BUILD_OS" = xmacosx; then + if test "x$OPENJDK_TARGET_OS" = xmacosx; then # Might change in the future to clang. COMPILER_NAME=gcc SHARED_LIBRARY='lib$1.dylib' @@ -14814,7 +27043,7 @@ if test "x$GCC" = xyes; then POST_STRIP_CMD="$STRIP -S" fi else - if test "x$OPENJDK_BUILD_OS" = xsolaris; then + if test "x$OPENJDK_TARGET_OS" = xsolaris; then # If it is not gcc, then assume it is the Oracle Solaris Studio Compiler COMPILER_NAME=ossc PICFLAG="-KPIC" @@ -14838,7 +27067,7 @@ else POST_STRIP_CMD="$STRIP -x" POST_MCS_CMD="$MCS -d -a \"JDK $FULL_VERSION\"" fi - if test "x$OPENJDK_BUILD_OS" = xwindows; then + if test "x$OPENJDK_TARGET_OS" = xwindows; then # If it is not gcc, then assume it is the MS Visual Studio compiler COMPILER_NAME=cl PICFLAG="" @@ -14986,6 +27215,11 @@ case $COMPILER_TYPE in # Can cause undefined external on Solaris 8 X86 on __sincos, removing for now #CC_HIGHEST="$CC_HIGHEST -xlibmopt" + if test "x$OPENJDK_TARGET_CPU" = xsparc; then + CFLAGS_JDK="${CFLAGS_JDK} -xmemalign=4s" + CXXFLAGS_JDK="${CXXFLAGS_JDK} -xmemalign=4s" + fi + case $OPENJDK_TARGET_CPU_ARCH in x86) C_O_FLAG_HIGHEST="-xO4 -Wu,-O4~yz $CC_HIGHEST -xregs=no%frameptr" @@ -15002,8 +27236,6 @@ case $COMPILER_TYPE in fi ;; sparc) - CFLAGS_JDK="${CFLAGS_JDK} -xmemalign=4s" - CXXFLAGS_JDK="${CXXFLAGS_JDK} -xmemalign=4s" CFLAGS_JDKLIB_EXTRA="${CFLAGS_JDKLIB_EXTRA} -xregs=no%appl" CXXFLAGS_JDKLIB_EXTRA="${CXXFLAGS_JDKLIB_EXTRA} -xregs=no%appl" C_O_FLAG_HIGHEST="-xO4 -Wc,-Qrm-s -Wc,-Qiselect-T0 $CC_HIGHEST -xprefetch=auto,explicit -xchip=ultra" @@ -15132,7 +27364,7 @@ case $COMPILER_NAME in CCXXFLAGS_JDK="$CCXXFLAGS $CCXXFLAGS_JDK -DTRACING -DMACRO_MEMSYS_OPS -DBREAKPTS" case $OPENJDK_TARGET_CPU_ARCH in x86 ) - CCXXFLAGS_JDK="$CCXXFLAGS_JDK -DcpuIntel -Di586 -Di386" + CCXXFLAGS_JDK="$CCXXFLAGS_JDK -DcpuIntel -Di586 -D$OPENJDK_TARGET_CPU_LEGACY_LIB" CFLAGS_JDK="$CFLAGS_JDK -erroff=E_BAD_PRAGMA_PACK_VALUE" ;; esac @@ -15232,7 +27464,7 @@ CXXFLAGS_JDKEXE="$CCXXFLAGS_JDK $CXXFLAGS_JDK" # libraries will link to whatever is in memory. Yuck. # # Thus we offer the compiler to find libjvm.so first in server then in client. It works. Ugh. -if test "x$COMPILER_TYPE" = xCL; then +if test "x$COMPILER_NAME" = xcl; then LDFLAGS_JDK="$LDFLAGS_JDK -nologo -opt:ref -incremental:no" if test "x$OPENJDK_TARGET_CPU" = xx86; then LDFLAGS_JDK="$LDFLAGS_JDK -safeseh" @@ -15248,19 +27480,23 @@ if test "x$COMPILER_TYPE" = xCL; then fi LDFLAGS_JDKEXE="${LDFLAGS_JDK} /STACK:$LDFLAGS_STACK_SIZE" else - # If this is a --hash-style=gnu system, use --hash-style=both, why? - HAS_GNU_HASH=`$CC -dumpspecs 2>/dev/null | $GREP 'hash-style=gnu'` - if test -n "$HAS_GNU_HASH"; then - # And since we now know that the linker is gnu, then add -z defs, to forbid - # undefined symbols in object files. - LDFLAGS_JDK="${LDFLAGS_JDK} -Xlinker --hash-style=both -Xlinker -z -Xlinker defs" - if test "x$DEBUG_LEVEL" == "xrelease"; then - # When building release libraries, tell the linker optimize them. - # Should this be supplied to the OSS linker as well? - LDFLAGS_JDK="${LDFLAGS_JDK} -Xlinker -O1" + if test "x$COMPILER_NAME" = xgcc; then + # If this is a --hash-style=gnu system, use --hash-style=both, why? + HAS_GNU_HASH=`$CC -dumpspecs 2>/dev/null | $GREP 'hash-style=gnu'` + if test -n "$HAS_GNU_HASH"; then + LDFLAGS_JDK="${LDFLAGS_JDK} -Xlinker --hash-style=both " + fi + if test "x$OPENJDK_TARGET_OS" = xlinux; then + # And since we now know that the linker is gnu, then add -z defs, to forbid + # undefined symbols in object files. + LDFLAGS_JDK="${LDFLAGS_JDK} -Xlinker -z -Xlinker defs" + if test "x$DEBUG_LEVEL" = "xrelease"; then + # When building release libraries, tell the linker optimize them. + # Should this be supplied to the OSS linker as well? + LDFLAGS_JDK="${LDFLAGS_JDK} -Xlinker -O1" + fi fi fi - LDFLAGS_JDKLIB="${LDFLAGS_JDK} $SHARED_LIBRARY_FLAGS \ -L${JDK_OUTPUTDIR}/lib${OPENJDK_TARGET_CPU_LIBDIR}/server \ -L${JDK_OUTPUTDIR}/lib${OPENJDK_TARGET_CPU_LIBDIR}/client \ @@ -15307,53 +27543,6 @@ esac -# After we have toolchain, we can compile the uncygdrive helper - -# When using cygwin, we need a wrapper binary that renames -# /cygdrive/c/ arguments into c:/ arguments and peeks into -# @files and rewrites these too! This wrapper binary is -# called uncygdrive.exe. -UNCYGDRIVE= -if test "x$OPENJDK_BUILD_OS" = xwindows; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking if uncygdrive can be created" >&5 -$as_echo_n "checking if uncygdrive can be created... " >&6; } - UNCYGDRIVE_SRC=`$CYGPATH -m $SRC_ROOT/common/src/uncygdrive.c` - rm -f $OUTPUT_ROOT/uncygdrive* - UNCYGDRIVE=`$CYGPATH -m $OUTPUT_ROOT/uncygdrive.exe` - cd $OUTPUT_ROOT - $CC $UNCYGDRIVE_SRC /Fe$UNCYGDRIVE > $OUTPUT_ROOT/uncygdrive1.log 2>&1 - cd $CURDIR - - if test ! -x $OUTPUT_ROOT/uncygdrive.exe; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } - cat $OUTPUT_ROOT/uncygdrive1.log - as_fn_error $? "Could not create $OUTPUT_ROOT/uncygdrive.exe" "$LINENO" 5 - fi - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $UNCYGDRIVE" >&5 -$as_echo "$UNCYGDRIVE" >&6; } - { $as_echo "$as_me:${as_lineno-$LINENO}: checking if uncygdrive.exe works" >&5 -$as_echo_n "checking if uncygdrive.exe works... " >&6; } - cd $OUTPUT_ROOT - $UNCYGDRIVE $CC $SRC_ROOT/common/src/uncygdrive.c /Fe$OUTPUT_ROOT/uncygdrive2.exe > $OUTPUT_ROOT/uncygdrive2.log 2>&1 - cd $CURDIR - if test ! -x $OUTPUT_ROOT/uncygdrive2.exe; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } - cat $OUTPUT_ROOT/uncygdrive2.log - as_fn_error $? "Uncygdrive did not work!" "$LINENO" 5 - fi - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } - rm -f $OUTPUT_ROOT/uncygdrive?.??? $OUTPUT_ROOT/uncygdrive.obj - # The path to uncygdrive to use should be Unix-style - UNCYGDRIVE="$OUTPUT_ROOT/uncygdrive.exe" -fi - - - - - # Setup debug symbols (need objcopy from the toolchain for that) # @@ -15384,7 +27573,7 @@ fi if test "x$ENABLE_DEBUG_SYMBOLS" = "xdefault"; then # Default is on if objcopy is found, otherwise off - if test "x$OBJCOPY" != x; then + if test "x$OBJCOPY" != x || test "x$OPENJDK_TARGET_OS" = xwindows; then ENABLE_DEBUG_SYMBOLS=yes else ENABLE_DEBUG_SYMBOLS=no @@ -15536,7 +27725,6 @@ fi - ############################################################################### # # Check for X Windows @@ -16308,10 +28496,15 @@ ac_compiler_gnu=$ac_cv_c_compiler_gnu OLD_CFLAGS="$CFLAGS" CFLAGS="$CFLAGS $X_CFLAGS" + +# Need to include Xlib.h and Xutil.h to avoid "present but cannot be compiled" warnings on Solaris 10 for ac_header in X11/extensions/shape.h X11/extensions/Xrender.h X11/extensions/XTest.h do : as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` -ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default" +ac_fn_c_check_header_compile "$LINENO" "$ac_header" "$as_ac_Header" " # include + # include + +" if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 @@ -16323,6 +28516,7 @@ fi done + CFLAGS="$OLD_CFLAGS" ac_ext=cpp ac_cpp='$CXXCPP $CPPFLAGS' @@ -16382,28 +28576,20 @@ if test "${with_cups_include+set}" = set; then : fi -# Check whether --with-cups-lib was given. -if test "${with_cups_lib+set}" = set; then : - withval=$with_cups_lib; -fi - - if test "x$CUPS_NOT_NEEDED" = xyes; then - if test "x${with_cups}" != x || test "x${with_cups_include}" != x || test "x${with_cups_lib}" != x; then + if test "x${with_cups}" != x || test "x${with_cups_include}" != x; then { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cups not used, so --with-cups is ignored" >&5 $as_echo "$as_me: WARNING: cups not used, so --with-cups is ignored" >&2;} fi CUPS_CFLAGS= - CUPS_LIBS= else CUPS_FOUND=no - if test "x${with_cups}" = xno || test "x${with_cups_include}" = xno || test "x${with_cups_lib}" = xno; then + if test "x${with_cups}" = xno || test "x${with_cups_include}" = xno; then as_fn_error $? "It is not possible to disable the use of cups. Remove the --without-cups option." "$LINENO" 5 fi if test "x${with_cups}" != x; then - CUPS_LIBS="-L${with_cups}/lib -lcups" CUPS_CFLAGS="-I${with_cups}/include" CUPS_FOUND=yes fi @@ -16411,10 +28597,6 @@ else CUPS_CFLAGS="-I${with_cups_include}" CUPS_FOUND=yes fi - if test "x${with_cups_lib}" != x; then - CUPS_LIBS="-L${with_cups_lib} -lcups" - CUPS_FOUND=yes - fi if test "x$CUPS_FOUND" = xno; then @@ -16572,7 +28754,6 @@ if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : _ACEOF CUPS_FOUND=yes CUPS_CFLAGS= - CUPS_LIBS="-lcups" DEFAULT_CUPS=yes fi @@ -16582,18 +28763,16 @@ done if test "x$CUPS_FOUND" = xno; then # Getting nervous now? Lets poke around for standard Solaris third-party # package installation locations. - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for cups headers and libs" >&5 -$as_echo_n "checking for cups headers and libs... " >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for cups headers" >&5 +$as_echo_n "checking for cups headers... " >&6; } if test -s /opt/sfw/cups/include/cups/cups.h; then # An SFW package seems to be installed! CUPS_FOUND=yes CUPS_CFLAGS="-I/opt/sfw/cups/include" - CUPS_LIBS="-L/opt/sfw/cups/lib -lcups" elif test -s /opt/csw/include/cups/cups.h; then # A CSW package seems to be installed! CUPS_FOUND=yes CUPS_CFLAGS="-I/opt/csw/include" - CUPS_LIBS="-L/opt/csw/lib -lcups" fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CUPS_FOUND" >&5 $as_echo "$CUPS_FOUND" >&6; } @@ -16633,7 +28812,6 @@ fi - ############################################################################### # # The ubiquitous freetype2 library is used to render fonts. @@ -16661,32 +28839,138 @@ else if test "x$with_freetype" != x; then - # Fail with message the path to freetype if var with_freetype contains a path with no spaces in it. - # Unless on Windows, where we can rewrite the path. - HAS_SPACE=`echo "$with_freetype" | grep " "` - if test "x$HAS_SPACE" != x; then - if test "x$OPENJDK_BUILD_OS" = "xwindows"; then - # First convert it to DOS-style, short mode (no spaces) - with_freetype=`$CYGPATH -s -m -a "$with_freetype"` - # Now it's case insensitive; let's make it lowercase to improve readability - with_freetype=`$ECHO "$with_freetype" | $TR 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvqxyz'` - # Now convert it back to Unix-stile (cygpath) - with_freetype=`$CYGPATH -u "$with_freetype"` - else - as_fn_error $? "You cannot have spaces in the path to freetype! \"$with_freetype\"" "$LINENO" 5 - fi + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then + + # Input might be given as Windows format, start by converting to + # unix format. + path="$with_freetype" + new_path=`$CYGPATH -u "$path"` + + # Cygwin tries to hide some aspects of the Windows file system, such that binaries are + # named .exe but called without that suffix. Therefore, "foo" and "foo.exe" are considered + # the same file, most of the time (as in "test -f"). But not when running cygpath -s, then + # "foo.exe" is OK but "foo" is an error. + # + # This test is therefore slightly more accurate than "test -f" to check for file precense. + # It is also a way to make sure we got the proper file name for the real test later on. + test_shortpath=`$CYGPATH -s -m "$new_path" 2> /dev/null` + if test "x$test_shortpath" = x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: The path of with_freetype, which resolves as \"$path\", is invalid." >&5 +$as_echo "$as_me: The path of with_freetype, which resolves as \"$path\", is invalid." >&6;} + as_fn_error $? "Cannot locate the the path of with_freetype" "$LINENO" 5 + fi + + # Call helper function which possibly converts this using DOS-style short mode. + # If so, the updated path is stored in $new_path. + + input_path="$new_path" + # Check if we need to convert this using DOS-style short mode. If the path + # contains just simple characters, use it. Otherwise (spaces, weird characters), + # take no chances and rewrite it. + # Note: m4 eats our [], so we need to use [ and ] instead. + has_forbidden_chars=`$ECHO "$input_path" | $GREP [^-._/a-zA-Z0-9]` + if test "x$has_forbidden_chars" != x; then + # Now convert it to mixed DOS-style, short mode (no spaces, and / instead of \) + shortmode_path=`$CYGPATH -s -m -a "$input_path"` + path_after_shortmode=`$CYGPATH -u "$shortmode_path"` + if test "x$path_after_shortmode" != "x$input_to_shortpath"; then + # Going to short mode and back again did indeed matter. Since short mode is + # case insensitive, let's make it lowercase to improve readability. + shortmode_path=`$ECHO "$shortmode_path" | $TR 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` + # Now convert it back to Unix-stile (cygpath) + input_path=`$CYGPATH -u "$shortmode_path"` + new_path="$input_path" + fi + fi + + test_cygdrive_prefix=`$ECHO $input_path | $GREP ^/cygdrive/` + if test "x$test_cygdrive_prefix" = x; then + # As a simple fix, exclude /usr/bin since it's not a real path. + if test "x`$ECHO $new_path | $GREP ^/usr/bin/`" = x; then + # The path is in a Cygwin special directory (e.g. /home). We need this converted to + # a path prefixed by /cygdrive for fixpath to work. + new_path="$CYGWIN_ROOT_PATH$input_path" + fi + fi + + + if test "x$path" != "x$new_path"; then + with_freetype="$new_path" + { $as_echo "$as_me:${as_lineno-$LINENO}: Rewriting with_freetype to \"$new_path\"" >&5 +$as_echo "$as_me: Rewriting with_freetype to \"$new_path\"" >&6;} + fi + + elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then + + path="$with_freetype" + has_colon=`$ECHO $path | $GREP ^.:` + new_path="$path" + if test "x$has_colon" = x; then + # Not in mixed or Windows style, start by that. + new_path=`cmd //c echo $path` + fi + + + input_path="$new_path" + # Check if we need to convert this using DOS-style short mode. If the path + # contains just simple characters, use it. Otherwise (spaces, weird characters), + # take no chances and rewrite it. + # Note: m4 eats our [], so we need to use [ and ] instead. + has_forbidden_chars=`$ECHO "$input_path" | $GREP [^-_/:a-zA-Z0-9]` + if test "x$has_forbidden_chars" != x; then + # Now convert it to mixed DOS-style, short mode (no spaces, and / instead of \) + new_path=`cmd /c "for %A in (\"$input_path\") do @echo %~sA"|$TR \\\\\\\\ / | $TR 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` + fi + + + windows_path="$new_path" + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then + unix_path=`$CYGPATH -u "$windows_path"` + new_path="$unix_path" + elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then + unix_path=`$ECHO "$windows_path" | $SED -e 's,^\\(.\\):,/\\1,g' -e 's,\\\\,/,g'` + new_path="$unix_path" + fi + + if test "x$path" != "x$new_path"; then + with_freetype="$new_path" + { $as_echo "$as_me:${as_lineno-$LINENO}: Rewriting with_freetype to \"$new_path\"" >&5 +$as_echo "$as_me: Rewriting with_freetype to \"$new_path\"" >&6;} + fi + + # Save the first 10 bytes of this path to the storage, so fixpath can work. + all_fixpath_prefixes=("${all_fixpath_prefixes[@]}" "${new_path:0:10}") + + else + # We're on a posix platform. Hooray! :) + path="$with_freetype" + + if test ! -f "$path" && test ! -d "$path"; then + as_fn_error $? "The path of with_freetype, which resolves as \"$path\", is not found." "$LINENO" 5 fi + has_space=`$ECHO "$path" | $GREP " "` + if test "x$has_space" != x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: The path of with_freetype, which resolves as \"$path\", is invalid." >&5 +$as_echo "$as_me: The path of with_freetype, which resolves as \"$path\", is invalid." >&6;} + as_fn_error $? "Spaces are not allowed in this path." "$LINENO" 5 + fi + fi + FREETYPE2_LIBS="-L$with_freetype/lib -lfreetype" + FREETYPE2_LIB_PATH="$with_freetype/lib" + if test "x$OPENJDK_TARGET_OS" = xsolaris && test "x$OPENJDK_TARGET_CPU" = xx86_64 && test -d "$with_freetype/lib/amd64"; then + FREETYPE2_LIBS="-L$with_freetype/lib/amd64 -lfreetype" + FREETYPE2_LIB_PATH="$with_freetype/lib/amd64" + fi if test "x$OPENJDK_TARGET_OS" = xwindows; then FREETYPE2_LIBS="$with_freetype/lib/freetype.lib" fi - FREETYPE2_LIB_PATH="$with_freetype/lib" FREETYPE2_CFLAGS="-I$with_freetype/include" if test -s $with_freetype/include/ft2build.h && test -d $with_freetype/include/freetype2/freetype; then FREETYPE2_CFLAGS="-I$with_freetype/include/freetype2 -I$with_freetype/include" fi - FREETYPE2_FOUND=yes + FREETYPE2_FOUND=yes if test "x$FREETYPE2_FOUND" = xyes; then # Verify that the directories exist if ! test -d "$with_freetype/lib" || ! test -d "$with_freetype/include"; then @@ -16695,7 +28979,7 @@ else # List the contents of the lib. FREETYPELIB=`ls $with_freetype/lib/libfreetype.so $with_freetype/lib/freetype.dll 2> /dev/null` if test "x$FREETYPELIB" = x; then - as_fn_error $? "Could not find libfreetype.se nor freetype.dll in $with_freetype/lib" "$LINENO" 5 + as_fn_error $? "Could not find libfreetype.so nor freetype.dll in $with_freetype/lib" "$LINENO" 5 fi # Check one h-file if ! test -s "$with_freetype/include/ft2build.h"; then @@ -16851,6 +29135,145 @@ $as_echo "$as_me: Downloading build dependency freetype2 from $with_builddeps_se USING_SYSTEM_FT_LIB=true fi + if test "x$FREETYPE2_FOUND" = xno && test "x$OPENJDK_TARGET_OS" = xwindows; then + FREETYPELOCATION="$PROGRAMFILES/GnuWin32" + + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then + + # Input might be given as Windows format, start by converting to + # unix format. + path="$FREETYPELOCATION" + new_path=`$CYGPATH -u "$path"` + + # Cygwin tries to hide some aspects of the Windows file system, such that binaries are + # named .exe but called without that suffix. Therefore, "foo" and "foo.exe" are considered + # the same file, most of the time (as in "test -f"). But not when running cygpath -s, then + # "foo.exe" is OK but "foo" is an error. + # + # This test is therefore slightly more accurate than "test -f" to check for file precense. + # It is also a way to make sure we got the proper file name for the real test later on. + test_shortpath=`$CYGPATH -s -m "$new_path" 2> /dev/null` + if test "x$test_shortpath" = x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: The path of FREETYPELOCATION, which resolves as \"$path\", is invalid." >&5 +$as_echo "$as_me: The path of FREETYPELOCATION, which resolves as \"$path\", is invalid." >&6;} + as_fn_error $? "Cannot locate the the path of FREETYPELOCATION" "$LINENO" 5 + fi + + # Call helper function which possibly converts this using DOS-style short mode. + # If so, the updated path is stored in $new_path. + + input_path="$new_path" + # Check if we need to convert this using DOS-style short mode. If the path + # contains just simple characters, use it. Otherwise (spaces, weird characters), + # take no chances and rewrite it. + # Note: m4 eats our [], so we need to use [ and ] instead. + has_forbidden_chars=`$ECHO "$input_path" | $GREP [^-._/a-zA-Z0-9]` + if test "x$has_forbidden_chars" != x; then + # Now convert it to mixed DOS-style, short mode (no spaces, and / instead of \) + shortmode_path=`$CYGPATH -s -m -a "$input_path"` + path_after_shortmode=`$CYGPATH -u "$shortmode_path"` + if test "x$path_after_shortmode" != "x$input_to_shortpath"; then + # Going to short mode and back again did indeed matter. Since short mode is + # case insensitive, let's make it lowercase to improve readability. + shortmode_path=`$ECHO "$shortmode_path" | $TR 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` + # Now convert it back to Unix-stile (cygpath) + input_path=`$CYGPATH -u "$shortmode_path"` + new_path="$input_path" + fi + fi + + test_cygdrive_prefix=`$ECHO $input_path | $GREP ^/cygdrive/` + if test "x$test_cygdrive_prefix" = x; then + # As a simple fix, exclude /usr/bin since it's not a real path. + if test "x`$ECHO $new_path | $GREP ^/usr/bin/`" = x; then + # The path is in a Cygwin special directory (e.g. /home). We need this converted to + # a path prefixed by /cygdrive for fixpath to work. + new_path="$CYGWIN_ROOT_PATH$input_path" + fi + fi + + + if test "x$path" != "x$new_path"; then + FREETYPELOCATION="$new_path" + { $as_echo "$as_me:${as_lineno-$LINENO}: Rewriting FREETYPELOCATION to \"$new_path\"" >&5 +$as_echo "$as_me: Rewriting FREETYPELOCATION to \"$new_path\"" >&6;} + fi + + elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then + + path="$FREETYPELOCATION" + has_colon=`$ECHO $path | $GREP ^.:` + new_path="$path" + if test "x$has_colon" = x; then + # Not in mixed or Windows style, start by that. + new_path=`cmd //c echo $path` + fi + + + input_path="$new_path" + # Check if we need to convert this using DOS-style short mode. If the path + # contains just simple characters, use it. Otherwise (spaces, weird characters), + # take no chances and rewrite it. + # Note: m4 eats our [], so we need to use [ and ] instead. + has_forbidden_chars=`$ECHO "$input_path" | $GREP [^-_/:a-zA-Z0-9]` + if test "x$has_forbidden_chars" != x; then + # Now convert it to mixed DOS-style, short mode (no spaces, and / instead of \) + new_path=`cmd /c "for %A in (\"$input_path\") do @echo %~sA"|$TR \\\\\\\\ / | $TR 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` + fi + + + windows_path="$new_path" + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then + unix_path=`$CYGPATH -u "$windows_path"` + new_path="$unix_path" + elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then + unix_path=`$ECHO "$windows_path" | $SED -e 's,^\\(.\\):,/\\1,g' -e 's,\\\\,/,g'` + new_path="$unix_path" + fi + + if test "x$path" != "x$new_path"; then + FREETYPELOCATION="$new_path" + { $as_echo "$as_me:${as_lineno-$LINENO}: Rewriting FREETYPELOCATION to \"$new_path\"" >&5 +$as_echo "$as_me: Rewriting FREETYPELOCATION to \"$new_path\"" >&6;} + fi + + # Save the first 10 bytes of this path to the storage, so fixpath can work. + all_fixpath_prefixes=("${all_fixpath_prefixes[@]}" "${new_path:0:10}") + + else + # We're on a posix platform. Hooray! :) + path="$FREETYPELOCATION" + + if test ! -f "$path" && test ! -d "$path"; then + as_fn_error $? "The path of FREETYPELOCATION, which resolves as \"$path\", is not found." "$LINENO" 5 + fi + + has_space=`$ECHO "$path" | $GREP " "` + if test "x$has_space" != x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: The path of FREETYPELOCATION, which resolves as \"$path\", is invalid." >&5 +$as_echo "$as_me: The path of FREETYPELOCATION, which resolves as \"$path\", is invalid." >&6;} + as_fn_error $? "Spaces are not allowed in this path." "$LINENO" 5 + fi + fi + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for freetype in some standard windows locations" >&5 +$as_echo_n "checking for freetype in some standard windows locations... " >&6; } + if test -s "$FREETYPELOCATION/include/ft2build.h" && test -d "$FREETYPELOCATION/include/freetype2/freetype"; then + FREETYPE2_CFLAGS="-I$FREETYPELOCATION/include/freetype2 -I$FREETYPELOCATION/include" + FREETYPE2_LIBS="$FREETYPELOCATION/lib/freetype.lib" + FREETYPE2_LIB_PATH="$FREETYPELOCATION/lib" + if ! test -s "$FREETYPE2_LIBS"; then + as_fn_error $? "Could not find $FREETYPE2_LIBS" "$LINENO" 5 + fi + if ! test -s "$FREETYPE2_LIB_PATH/freetype.dll"; then + as_fn_error $? "Could not find $FREETYPE2_LIB_PATH/freetype.dll" "$LINENO" 5 + fi + USING_SYSTEM_FT_LIB=true + FREETYPE2_FOUND=yes + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $FREETYPE2_FOUND" >&5 +$as_echo "$FREETYPE2_FOUND" >&6; } + fi if test "x$FREETYPE2_FOUND" = xno; then pkg_failed=no @@ -16919,7 +29342,13 @@ else $as_echo "yes" >&6; } FREETYPE2_FOUND=yes fi + # On solaris, pkg_check adds -lz to freetype libs, which isn't necessary for us. + FREETYPE2_LIBS=`$ECHO $FREETYPE2_LIBS | $SED 's/-lz//g'` USING_SYSTEM_FT_LIB=true + # 64-bit libs for Solaris x86 are installed in the amd64 subdirectory, change lib to lib/amd64 + if test "x$FREETYPE2_FOUND" = xyes && test "x$OPENJDK_TARGET_OS" = xsolaris && test "x$OPENJDK_TARGET_CPU" = xx86_64; then + FREETYPE2_LIBS=`$ECHO $FREETYPE2_LIBS | $SED 's?/lib?/lib/amd64?g'` + fi fi if test "x$FREETYPE2_FOUND" = xno; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for freetype in some standard locations" >&5 @@ -16993,6 +29422,55 @@ $as_echo "$FREETYPE2_FOUND" >&6; } as_fn_error $? "Could not find freetype2! $HELP_MSG " "$LINENO" 5 fi + + if test "x$OPENJDK_TARGET_OS" != xwindows; then + # AC_CHECK_LIB does not support use of cl.exe + PREV_LDFLAGS="$LDFLAGS" + LDFLAGS="$FREETYPE2_LIBS" + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for FT_Init_FreeType in -lfreetype" >&5 +$as_echo_n "checking for FT_Init_FreeType in -lfreetype... " >&6; } +if test "${ac_cv_lib_freetype_FT_Init_FreeType+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lfreetype $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char FT_Init_FreeType (); +int +main () +{ +return FT_Init_FreeType (); + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_link "$LINENO"; then : + ac_cv_lib_freetype_FT_Init_FreeType=yes +else + ac_cv_lib_freetype_FT_Init_FreeType=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_freetype_FT_Init_FreeType" >&5 +$as_echo "$ac_cv_lib_freetype_FT_Init_FreeType" >&6; } +if test "x$ac_cv_lib_freetype_FT_Init_FreeType" = x""yes; then : + FREETYPE2_FOUND=true +else + as_fn_error $? "Could not find freetype2! $HELP_MSG " "$LINENO" 5 +fi + + LDFLAGS="$PREV_LDFLAGS" + fi fi @@ -17795,16 +30273,19 @@ $as_echo_n "checking how to link with libstdc++... " >&6; } if test "x$enable_static_link_stdc__" = xyes; then LIBCXX="$LIBCXX $STATIC_STDCXX_FLAGS" LDCXX="$CC" + STATIC_CXX_SETTING="STATIC_CXX=true" { $as_echo "$as_me:${as_lineno-$LINENO}: result: static" >&5 $as_echo "static" >&6; } else LIBCXX="$LIBCXX -lstdc++" LDCXX="$CXX" + STATIC_CXX_SETTING="STATIC_CXX=false" { $as_echo "$as_me:${as_lineno-$LINENO}: result: dynamic" >&5 $as_echo "dynamic" >&6; } fi fi + # libCrun is the c++ runtime-library with SunStudio (roughly the equivalent of gcc's libstdc++.so) if test "x$OPENJDK_TARGET_OS" = xsolaris && test "x$LIBCXX" = x; then LIBCXX="/usr/lib${OPENJDK_TARGET_CPU_ISADIR}/libCrun.so.1" @@ -17819,6 +30300,66 @@ fi +# After we have toolchain and the paths to all libraries (needed by msys), we can compile the fixpath helper + +# When using cygwin or msys, we need a wrapper binary that renames +# /cygdrive/c/ arguments into c:/ arguments and peeks into +# @files and rewrites these too! This wrapper binary is +# called fixpath. +FIXPATH= +if test "x$OPENJDK_BUILD_OS" = xwindows; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if fixpath can be created" >&5 +$as_echo_n "checking if fixpath can be created... " >&6; } + FIXPATH_SRC="$SRC_ROOT/common/src/fixpath.c" + FIXPATH_BIN="$OUTPUT_ROOT/fixpath.exe" + if test "x$OPENJDK_BUILD_OS_ENV" = xwindows.cygwin; then + FIXPATH_SRC=`$CYGPATH -m $FIXPATH_SRC` + FIXPATH_BIN=`$CYGPATH -m $FIXPATH_BIN` + # Important to keep the .exe suffix on Cygwin for Hotspot makefiles + FIXPATH="$OUTPUT_ROOT/fixpath.exe -c" + elif test "x$OPENJDK_BUILD_OS_ENV" = xwindows.msys; then + FIXPATH_SRC=`cmd //c echo $FIXPATH_SRC` + FIXPATH_BIN=`cmd //c echo $FIXPATH_BIN` + + # Take all collected prefixes and turn them into a -m/c/foo@/c/bar@... command line + # @ was chosen as separator to minimize risk of other tools messing around with it + all_unique_prefixes=`echo "${all_fixpath_prefixes[@]}" | tr ' ' '\n' | grep '^/./' | sort | uniq` + fixpath_argument_list=`echo $all_unique_prefixes | tr ' ' '@'` + + FIXPATH="$OUTPUT_ROOT/fixpath -m$fixpath_argument_list" + fi + rm -f $OUTPUT_ROOT/fixpath* + cd $OUTPUT_ROOT + $CC $FIXPATH_SRC -Fe$FIXPATH_BIN > $OUTPUT_ROOT/fixpath1.log 2>&1 + cd $CURDIR + + if test ! -x $OUTPUT_ROOT/fixpath.exe; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + cat $OUTPUT_ROOT/fixpath1.log + as_fn_error $? "Could not create $OUTPUT_ROOT/fixpath.exe" "$LINENO" 5 + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if fixpath.exe works" >&5 +$as_echo_n "checking if fixpath.exe works... " >&6; } + cd $OUTPUT_ROOT + $FIXPATH $CC $SRC_ROOT/common/src/fixpath.c -Fe$OUTPUT_ROOT/fixpath2.exe > $OUTPUT_ROOT/fixpath2.log 2>&1 + cd $CURDIR + if test ! -x $OUTPUT_ROOT/fixpath2.exe; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + cat $OUTPUT_ROOT/fixpath2.log + as_fn_error $? "fixpath did not work!" "$LINENO" 5 + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + rm -f $OUTPUT_ROOT/fixpath?.??? $OUTPUT_ROOT/fixpath.obj +fi + + + + ############################################################################### # # We need to do some final tweaking, when everything else is done. @@ -17873,6 +30414,10 @@ $as_echo_n "checking for number of cores... " >&6; } # Looks like a MacOSX system NUM_CORES=`/usr/sbin/system_profiler -detailLevel full SPHardwareDataType | grep 'Cores' | awk '{print $5}'` FOUND_CORES=yes + elif test -n "$NUMBER_OF_PROCESSORS"; then + # On windows, look in the env + NUM_CORES=$NUMBER_OF_PROCESSORS + FOUND_CORES=yes fi # For c/c++ code we run twice as many concurrent build @@ -17883,8 +30428,10 @@ $as_echo_n "checking for number of cores... " >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: result: $NUM_CORES" >&5 $as_echo "$NUM_CORES" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: could not detect number of cores, defaulting to 1!" >&5 -$as_echo "could not detect number of cores, defaulting to 1!" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: could not detect number of cores, defaulting to 1" >&5 +$as_echo "could not detect number of cores, defaulting to 1" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: This will disable all parallelism from build!" >&5 +$as_echo "$as_me: WARNING: This will disable all parallelism from build!" >&2;} fi @@ -17926,9 +30473,10 @@ $as_echo_n "checking for memory size... " >&6; } MEMORY_SIZE=`/usr/sbin/system_profiler -detailLevel full SPHardwareDataType | grep 'Memory' | awk '{print $2}'` MEMORY_SIZE=`expr $MEMORY_SIZE \* 1024` FOUND_MEM=yes - elif test "x$build_os" = xwindows; then + elif test "x$OPENJDK_BUILD_OS" = xwindows; then # Windows, but without cygwin - MEMORY_SIZE=`systeminfo | grep 'Total Physical Memory:' | awk '{ print $4 }' | sed 's/,//'` + MEMORY_SIZE=`wmic computersystem get totalphysicalmemory -value | grep = | cut -d "=" -f 2-` + MEMORY_SIZE=`expr $MEMORY_SIZE / 1024 / 1024` FOUND_MEM=yes fi @@ -17936,8 +30484,10 @@ $as_echo_n "checking for memory size... " >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MEMORY_SIZE MB" >&5 $as_echo "$MEMORY_SIZE MB" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: could not detect memory size defaulting to 1024 MB!" >&5 -$as_echo "could not detect memory size defaulting to 1024 MB!" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: could not detect memory size, defaulting to 1024 MB" >&5 +$as_echo "could not detect memory size, defaulting to 1024 MB" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: This might seriously impact build performance!" >&5 +$as_echo "$as_me: WARNING: This might seriously impact build performance!" >&2;} fi else @@ -18366,11 +30916,26 @@ $as_echo_n "checking if build directory is on local disk... " >&6; } # df -l lists only local disks; if the given directory is not found then # a non-zero exit code is given - if $DF -l $OUTPUT_ROOT > /dev/null 2>&1; then - OUTPUT_DIR_IS_LOCAL="yes" - else - OUTPUT_DIR_IS_LOCAL="no" - fi + if test "x$DF" = x; then + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then + # msys does not have df; use Windows "net use" instead. + IS_NETWORK_DISK=`net use | grep \`pwd -W | cut -d ":" -f 1 | tr a-z A-Z\`:` + if test "x$IS_NETWORK_DISK" = x; then + OUTPUT_DIR_IS_LOCAL="yes" + else + OUTPUT_DIR_IS_LOCAL="no" + fi + else + # No df here, say it's local + OUTPUT_DIR_IS_LOCAL="yes" + fi + else + if $DF -l $OUTPUT_ROOT > /dev/null 2>&1; then + OUTPUT_DIR_IS_LOCAL="yes" + else + OUTPUT_DIR_IS_LOCAL="no" + fi + fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OUTPUT_DIR_IS_LOCAL" >&5 $as_echo "$OUTPUT_DIR_IS_LOCAL" >&6; } @@ -18909,7 +31474,7 @@ cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # report actual input values of CONFIG_FILES etc. instead of their # values after options handling. ac_log=" -This file was extended by openjdk $as_me jdk8, which was +This file was extended by OpenJDK $as_me jdk8, which was generated by GNU Autoconf 2.67. Invocation command line was CONFIG_FILES = $CONFIG_FILES @@ -18965,13 +31530,14 @@ $config_files Configuration headers: $config_headers -Report bugs to ." +Report bugs to . +OpenJDK home page: ." _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`" ac_cs_version="\\ -openjdk config.status jdk8 +OpenJDK config.status jdk8 configured by $0, generated by GNU Autoconf 2.67, with options \\"\$ac_cs_config\\" @@ -19718,7 +32284,15 @@ printf "* Debug level: $DEBUG_LEVEL\n" printf "* JDK variant: $JDK_VARIANT\n" printf "* JVM variants: $with_jvm_variants\n" printf "* OpenJDK target: OS: $OPENJDK_TARGET_OS, CPU architecture: $OPENJDK_TARGET_CPU_ARCH, address length: $OPENJDK_TARGET_CPU_BITS\n" -printf "* Boot JDK: $BOOT_JDK\n" + +printf "\n" +printf "Tools summary:\n" +if test "x$OPENJDK_BUILD_OS" = "xwindows"; then + printf "* Environment: $WINDOWS_ENV_VENDOR version $WINDOWS_ENV_VERSION (root at $WINDOWS_ENV_ROOT_PATH)\n" +fi +printf "* Boot JDK: $BOOT_JDK_VERSION (at $BOOT_JDK)\n" +printf "* C Compiler: $CC_VENDOR version $CC_VERSION (at $CC)\n" +printf "* C++ Compiler: $CXX_VENDOR version $CXX_VERSION (at $CXX)\n" printf "\n" printf "Build performance summary:\n" diff --git a/common/autoconf/help.m4 b/common/autoconf/help.m4 index 01b48172dae..12ff371dd20 100644 --- a/common/autoconf/help.m4 +++ b/common/autoconf/help.m4 @@ -55,6 +55,19 @@ AC_DEFUN([HELP_MSG_MISSING_DEPENDENCY], fi ]) +cygwin_help() { + case $1 in + unzip) + PKGHANDLER_COMMAND="cd && cmd /c setup -q -P unzip" ;; + zip) + PKGHANDLER_COMMAND="cd && cmd /c setup -q -P zip" ;; + make) + PKGHANDLER_COMMAND="cd && cmd /c setup -q -P make" ;; + * ) + break ;; + esac +} + apt_help() { case $1 in devkit) @@ -149,7 +162,15 @@ printf "* Debug level: $DEBUG_LEVEL\n" printf "* JDK variant: $JDK_VARIANT\n" printf "* JVM variants: $with_jvm_variants\n" printf "* OpenJDK target: OS: $OPENJDK_TARGET_OS, CPU architecture: $OPENJDK_TARGET_CPU_ARCH, address length: $OPENJDK_TARGET_CPU_BITS\n" -printf "* Boot JDK: $BOOT_JDK\n" + +printf "\n" +printf "Tools summary:\n" +if test "x$OPENJDK_BUILD_OS" = "xwindows"; then + printf "* Environment: $WINDOWS_ENV_VENDOR version $WINDOWS_ENV_VERSION (root at $WINDOWS_ENV_ROOT_PATH)\n" +fi +printf "* Boot JDK: $BOOT_JDK_VERSION (at $BOOT_JDK)\n" +printf "* C Compiler: $CC_VENDOR version $CC_VERSION (at $CC)\n" +printf "* C++ Compiler: $CXX_VENDOR version $CXX_VERSION (at $CXX)\n" printf "\n" printf "Build performance summary:\n" diff --git a/common/autoconf/hotspot-spec.gmk.in b/common/autoconf/hotspot-spec.gmk.in index b4e9d5c95e7..68cc8e4eea7 100644 --- a/common/autoconf/hotspot-spec.gmk.in +++ b/common/autoconf/hotspot-spec.gmk.in @@ -48,8 +48,8 @@ ALT_CUPS_HEADERS_PATH:=$(patsubst -I%,%,$(filter -I%,@CUPS_CFLAGS@)) # The HOSTCC/HOSTCXX is Hotspot terminology for the BUILD_CC/BUILD_CXX, i.e. the # compiler that produces code that can be run on the build platform. -HOSTCC:=@UNCYGDRIVE@ @BUILD_CC@ -HOSTCXX:=@UNCYGDRIVE@ @BUILD_CXX@ +HOSTCC:=@FIXPATH@ @BUILD_CC@ +HOSTCXX:=@FIXPATH@ @BUILD_CXX@ #################################################### # @@ -78,13 +78,23 @@ ARCH=$(OPENJDK_TARGET_CPU_LEGACY) ALT_OUTPUTDIR=$(HOTSPOT_OUTPUTDIR) ALT_EXPORT_PATH=$(HOTSPOT_DIST) -HOTSPOT_MAKE_ARGS:=@HOTSPOT_MAKE_ARGS@ +HOTSPOT_MAKE_ARGS:=@HOTSPOT_MAKE_ARGS@ @STATIC_CXX_SETTING@ # This is used from the libjvm build for C/C++ code. HOTSPOT_BUILD_JOBS:=@CONCURRENT_BUILD_JOBS@ # Control wether Hotspot runs Queens test after building TEST_IN_BUILD=@TEST_IN_BUILD@ +# For hotspot, override compiler/tools definition to not include FIXPATH prefix. +# Hotspot has its own handling on the Windows path situation. +CXX:=@CCACHE@ @HOTSPOT_CXX@ +LD:=@HOTSPOT_LD@ +MT:=@HOTSPOT_MT@ +RC:=@HOTSPOT_RC@ EXTRA_CFLAGS=@LEGACY_EXTRA_CFLAGS@ EXTRA_CXXFLAGS=@LEGACY_EXTRA_CXXFLAGS@ EXTRA_LDFLAGS=@LEGACY_EXTRA_LDFLAGS@ + +# Sneak this in via the spec.gmk file, since we don't want to mess around too much with the Hotspot make files. +# This is needed to get the LOG setting to work properly. +include $(SRC_ROOT)/common/makefiles/MakeBase.gmk diff --git a/common/autoconf/jdk-options.m4 b/common/autoconf/jdk-options.m4 index 92d97e21cf2..39e003fd9f0 100644 --- a/common/autoconf/jdk-options.m4 +++ b/common/autoconf/jdk-options.m4 @@ -64,7 +64,7 @@ AC_DEFUN_ONCE([JDKOPT_SETUP_JVM_VARIANTS], # ie normal interpreter and C1, only the serial GC, kernel jvmti etc # zero: no machine code interpreter, no compiler # zeroshark: zero interpreter and shark/llvm compiler backend -AC_MSG_CHECKING([which variants of the JVM that should be built]) +AC_MSG_CHECKING([which variants of the JVM to build]) AC_ARG_WITH([jvm-variants], [AS_HELP_STRING([--with-jvm-variants], [JVM variants (separated by commas) to build (server, client, kernel, zero, zeroshark) @<:@server@:>@])]) @@ -241,40 +241,39 @@ AC_DEFUN_ONCE([JDKOPT_SETUP_JDK_OPTIONS], # Should we build only OpenJDK even if closed sources are present? # AC_ARG_ENABLE([openjdk-only], [AS_HELP_STRING([--enable-openjdk-only], - [build OpenJDK regardless of the presence of closed repositories @<:@disabled@:>@])],,) + [supress building closed source even if present @<:@disabled@:>@])],,[enable_openjdk_only="no"]) -if test "x$enable_openjdk_only" = "xyes"; then - OPENJDK=true -elif test "x$enable_openjdk_only" = "xno"; then - OPENJDK=false -elif test -d "$SRC_ROOT/jdk/src/closed"; then - OPENJDK=false +AC_MSG_CHECKING([for presence of closed sources]) +if test -d "$SRC_ROOT/jdk/src/closed"; then + CLOSED_SOURCE_PRESENT=yes else + CLOSED_SOURCE_PRESENT=no +fi +AC_MSG_RESULT([$CLOSED_SOURCE_PRESENT]) + +AC_MSG_CHECKING([if closed source is supressed (openjdk-only)]) +SUPRESS_CLOSED_SOURCE="$enable_openjdk_only" +AC_MSG_RESULT([$SUPRESS_CLOSED_SOURCE]) + +if test "x$CLOSED_SOURCE_PRESENT" = xno; then + OPENJDK=true + if test "x$SUPRESS_CLOSED_SOURCE" = "xyes"; then + AC_MSG_WARN([No closed source present, --enable-openjdk-only makes no sense]) + fi +else + if test "x$SUPRESS_CLOSED_SOURCE" = "xyes"; then OPENJDK=true + else + OPENJDK=false + fi fi if test "x$OPENJDK" = "xtrue"; then - SET_OPENJDK=OPENJDK=true + SET_OPENJDK="OPENJDK=true" fi AC_SUBST(SET_OPENJDK) -############################################################################### -# -# JIGSAW or not. The JIGSAW variable is used during the intermediate -# stage when we are building both the old style JDK and the new style modularized JDK. -# When the modularized JDK is finalized, this option will go away. -# -AC_ARG_ENABLE([jigsaw], [AS_HELP_STRING([--enable-jigsaw], - [build Jigsaw images (not yet available) @<:@disabled@:>@])],,) - -if test "x$enable_jigsaw" = "xyes"; then - JIGSAW=true -else - JIGSAW=false -fi -AC_SUBST(JIGSAW) - ############################################################################### # # Should we build a JDK/JVM with headful support (ie a graphical ui)? @@ -282,7 +281,7 @@ AC_SUBST(JIGSAW) # AC_MSG_CHECKING([headful support]) AC_ARG_ENABLE([headful], [AS_HELP_STRING([--disable-headful], - [build headful support (graphical UI support) @<:@enabled@:>@])], + [disable building headful support (graphical UI support) @<:@enabled@:>@])], [SUPPORT_HEADFUL=${enable_headful}], [SUPPORT_HEADFUL=yes]) SUPPORT_HEADLESS=yes @@ -305,25 +304,9 @@ AC_SUBST(SUPPORT_HEADLESS) AC_SUBST(SUPPORT_HEADFUL) AC_SUBST(BUILD_HEADLESS) -############################################################################### -# -# Should we compile nimbus swing L&F? We can probably remove this option -# since nimbus is officially part of javax now. -# -AC_MSG_CHECKING([whether to build nimbus L&F]) -AC_ARG_ENABLE([nimbus], [AS_HELP_STRING([--disable-nimbus], - [disable Nimbus L&F @<:@enabled@:>@])], - [ENABLE_NIMBUS="${enableval}"], [ENABLE_NIMBUS='yes']) -AC_MSG_RESULT([$ENABLE_NIMBUS]) -DISABLE_NIMBUS= -if test "x$ENABLE_NIMBUS" = xno; then - DISABLE_NIMBUS=true -fi -AC_SUBST(DISABLE_NIMBUS) - # Control wether Hotspot runs Queens test after build. AC_ARG_ENABLE([hotspot-test-in-build], [AS_HELP_STRING([--enable-hotspot-test-in-build], - [enable running of Queens test after Hotspot build (not yet available) @<:@disabled@:>@])],, + [run the Queens test after Hotspot build @<:@disabled@:>@])],, [enable_hotspot_test_in_build=no]) if test "x$enable_hotspot_test_in_build" = "xyes"; then TEST_IN_BUILD=true @@ -349,6 +332,20 @@ else fi AC_SUBST(CACERTS_FILE) +############################################################################### +# +# Enable or disable unlimited crypto +# +AC_ARG_ENABLE(unlimited-crypto, [AS_HELP_STRING([--enable-unlimited-crypto], + [Enable unlimited crypto policy @<:@disabled@:>@])],, + [enable_unlimited_crypto=no]) +if test "x$enable_unlimited_crypto" = "xyes"; then + UNLIMITED_CRYPTO=true +else + UNLIMITED_CRYPTO=false +fi +AC_SUBST(UNLIMITED_CRYPTO) + ############################################################################### # # Compress jars @@ -356,38 +353,6 @@ AC_SUBST(CACERTS_FILE) COMPRESS_JARS=false AC_SUBST(COMPRESS_JARS) - -############################################################################### -# -# Should we compile JFR -# default no, except for on closed-jdk -# -ENABLE_JFR=no - -# Is the JFR source present - -# -# For closed default is yes -# -if test "x${OPENJDK}" != "xtrue"; then - ENABLE_JFR=yes -fi - -AC_MSG_CHECKING([whether to build jfr]) -AC_ARG_ENABLE([jfr], [AS_HELP_STRING([--enable-jfr], - [enable jfr (default is no)])] - [ENABLE_JFR="${enableval}"]) -AC_MSG_RESULT([${ENABLE_JFR}]) - -if test "x$ENABLE_JFR" = "xyes"; then - ENABLE_JFR=true -elif test "x$ENABLE_JFR" = "xno"; then - ENABLE_JFR=false -else - AC_MSG_ERROR([Invalid argument to --enable-jfr]) -fi - -AC_SUBST(ENABLE_JFR) ]) AC_DEFUN_ONCE([JDKOPT_SETUP_JDK_VERSION_NUMBERS], @@ -409,6 +374,8 @@ AC_SUBST(PRODUCT_NAME) AC_SUBST(PRODUCT_SUFFIX) AC_SUBST(JDK_RC_PLATFORM_NAME) AC_SUBST(COMPANY_NAME) +AC_SUBST(MACOSX_BUNDLE_NAME_BASE) +AC_SUBST(MACOSX_BUNDLE_ID_BASE) COPYRIGHT_YEAR=`date +'%Y'` AC_SUBST(COPYRIGHT_YEAR) @@ -437,7 +404,7 @@ else BUILD_DATE=`date '+%Y_%m_%d_%H_%M'` # Avoid [:alnum:] since it depends on the locale. CLEAN_USERNAME=`echo "$USER" | $TR -d -c 'abcdefghijklmnopqrstuvqxyz0123456789'` - USER_RELEASE_SUFFIX=`echo "${CLEAN_USERNAME}_${BUILD_DATE}" | $TR 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvqxyz'` + USER_RELEASE_SUFFIX=`echo "${CLEAN_USERNAME}_${BUILD_DATE}" | $TR 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` FULL_VERSION="${RELEASE}-${USER_RELEASE_SUFFIX}-${JDK_BUILD_NUMBER}" fi AC_SUBST(FULL_VERSION) @@ -473,7 +440,7 @@ if test "x$OPENJDK_TARGET_OS" = xmacosx; then fi AC_ARG_ENABLE([debug-symbols], - [AS_HELP_STRING([--disable-debug-symbols],[disable generation of debug symbols (@<:@enabled@:>@)])], + [AS_HELP_STRING([--disable-debug-symbols],[disable generation of debug symbols @<:@enabled@:>@])], [ENABLE_DEBUG_SYMBOLS=${enable_debug_symbols}], ) @@ -487,7 +454,7 @@ fi if test "x$ENABLE_DEBUG_SYMBOLS" = "xdefault"; then # Default is on if objcopy is found, otherwise off - if test "x$OBJCOPY" != x; then + if test "x$OBJCOPY" != x || test "x$OPENJDK_TARGET_OS" = xwindows; then ENABLE_DEBUG_SYMBOLS=yes else ENABLE_DEBUG_SYMBOLS=no @@ -502,7 +469,7 @@ AC_MSG_RESULT([$ENABLE_DEBUG_SYMBOLS]) ZIP_DEBUGINFO_FILES=yes AC_ARG_ENABLE([zip-debug-info], - [AS_HELP_STRING([--disable-zip-debug-info],[don't zip debug-info files (@<:@enabled@:@)])], + [AS_HELP_STRING([--disable-zip-debug-info],[disable zipping of debug-info files @<:@enabled@:>@])], [ZIP_DEBUGINFO_FILES=${enable_zip_debug_info}], ) @@ -528,5 +495,5 @@ AC_SUBST(CXXFLAGS_DEBUG_SYMBOLS) # for a degree of customization of the build targets and the rules/recipes # to create them AC_ARG_WITH([custom-make-dir], [AS_HELP_STRING([--with-custom-make-dir], - [directory containing custom build/make files])], [CUSTOM_MAKE_DIR=$with_custom_make_dir]) + [use this directory for custom build/make files])], [CUSTOM_MAKE_DIR=$with_custom_make_dir]) AC_SUBST(CUSTOM_MAKE_DIR) diff --git a/common/autoconf/libraries.m4 b/common/autoconf/libraries.m4 index 8c09744c555..aebdf8b93fb 100644 --- a/common/autoconf/libraries.m4 +++ b/common/autoconf/libraries.m4 @@ -172,9 +172,15 @@ fi AC_LANG_PUSH(C) OLD_CFLAGS="$CFLAGS" CFLAGS="$CFLAGS $X_CFLAGS" + +# Need to include Xlib.h and Xutil.h to avoid "present but cannot be compiled" warnings on Solaris 10 AC_CHECK_HEADERS([X11/extensions/shape.h X11/extensions/Xrender.h X11/extensions/XTest.h], - [X11_A_OK=yes], - [X11_A_OK=no]) + [X11_A_OK=yes], + [X11_A_OK=no], + [ # include + # include + ]) + CFLAGS="$OLD_CFLAGS" AC_LANG_POP(C) @@ -196,27 +202,23 @@ AC_DEFUN_ONCE([LIB_SETUP_CUPS], # AC_ARG_WITH(cups, [AS_HELP_STRING([--with-cups], [specify prefix directory for the cups package - (expecting the libraries under PATH/lib and the headers under PATH/include)])]) + (expecting the headers under PATH/include)])]) AC_ARG_WITH(cups-include, [AS_HELP_STRING([--with-cups-include], [specify directory for the cups include files])]) -AC_ARG_WITH(cups-lib, [AS_HELP_STRING([--with-cups-lib], - [specify directory for the cups library])]) if test "x$CUPS_NOT_NEEDED" = xyes; then - if test "x${with_cups}" != x || test "x${with_cups_include}" != x || test "x${with_cups_lib}" != x; then + if test "x${with_cups}" != x || test "x${with_cups_include}" != x; then AC_MSG_WARN([cups not used, so --with-cups is ignored]) fi CUPS_CFLAGS= - CUPS_LIBS= else CUPS_FOUND=no - if test "x${with_cups}" = xno || test "x${with_cups_include}" = xno || test "x${with_cups_lib}" = xno; then + if test "x${with_cups}" = xno || test "x${with_cups_include}" = xno; then AC_MSG_ERROR([It is not possible to disable the use of cups. Remove the --without-cups option.]) fi if test "x${with_cups}" != x; then - CUPS_LIBS="-L${with_cups}/lib -lcups" CUPS_CFLAGS="-I${with_cups}/include" CUPS_FOUND=yes fi @@ -224,10 +226,6 @@ else CUPS_CFLAGS="-I${with_cups_include}" CUPS_FOUND=yes fi - if test "x${with_cups_lib}" != x; then - CUPS_LIBS="-L${with_cups_lib} -lcups" - CUPS_FOUND=yes - fi if test "x$CUPS_FOUND" = xno; then BDEPS_CHECK_MODULE(CUPS, cups, xxx, [CUPS_FOUND=yes]) fi @@ -236,23 +234,20 @@ else AC_CHECK_HEADERS([cups/cups.h cups/ppd.h], [CUPS_FOUND=yes CUPS_CFLAGS= - CUPS_LIBS="-lcups" DEFAULT_CUPS=yes]) fi if test "x$CUPS_FOUND" = xno; then # Getting nervous now? Lets poke around for standard Solaris third-party # package installation locations. - AC_MSG_CHECKING([for cups headers and libs]) + AC_MSG_CHECKING([for cups headers]) if test -s /opt/sfw/cups/include/cups/cups.h; then # An SFW package seems to be installed! CUPS_FOUND=yes CUPS_CFLAGS="-I/opt/sfw/cups/include" - CUPS_LIBS="-L/opt/sfw/cups/lib -lcups" elif test -s /opt/csw/include/cups/cups.h; then # A CSW package seems to be installed! CUPS_FOUND=yes CUPS_CFLAGS="-I/opt/csw/include" - CUPS_LIBS="-L/opt/csw/lib -lcups" fi AC_MSG_RESULT([$CUPS_FOUND]) fi @@ -263,7 +258,6 @@ else fi AC_SUBST(CUPS_CFLAGS) -AC_SUBST(CUPS_LIBS) ]) @@ -292,17 +286,21 @@ else FREETYPE2_FOUND=no if test "x$with_freetype" != x; then - SPACESAFE(with_freetype,[the path to freetype]) + BASIC_FIXUP_PATH(with_freetype) FREETYPE2_LIBS="-L$with_freetype/lib -lfreetype" + FREETYPE2_LIB_PATH="$with_freetype/lib" + if test "x$OPENJDK_TARGET_OS" = xsolaris && test "x$OPENJDK_TARGET_CPU" = xx86_64 && test -d "$with_freetype/lib/amd64"; then + FREETYPE2_LIBS="-L$with_freetype/lib/amd64 -lfreetype" + FREETYPE2_LIB_PATH="$with_freetype/lib/amd64" + fi if test "x$OPENJDK_TARGET_OS" = xwindows; then FREETYPE2_LIBS="$with_freetype/lib/freetype.lib" fi - FREETYPE2_LIB_PATH="$with_freetype/lib" FREETYPE2_CFLAGS="-I$with_freetype/include" if test -s $with_freetype/include/ft2build.h && test -d $with_freetype/include/freetype2/freetype; then FREETYPE2_CFLAGS="-I$with_freetype/include/freetype2 -I$with_freetype/include" fi - FREETYPE2_FOUND=yes + FREETYPE2_FOUND=yes if test "x$FREETYPE2_FOUND" = xyes; then # Verify that the directories exist if ! test -d "$with_freetype/lib" || ! test -d "$with_freetype/include"; then @@ -311,7 +309,7 @@ else # List the contents of the lib. FREETYPELIB=`ls $with_freetype/lib/libfreetype.so $with_freetype/lib/freetype.dll 2> /dev/null` if test "x$FREETYPELIB" = x; then - AC_MSG_ERROR([Could not find libfreetype.se nor freetype.dll in $with_freetype/lib]) + AC_MSG_ERROR([Could not find libfreetype.so nor freetype.dll in $with_freetype/lib]) fi # Check one h-file if ! test -s "$with_freetype/include/ft2build.h"; then @@ -323,9 +321,34 @@ else BDEPS_CHECK_MODULE(FREETYPE2, freetype2, xxx, [FREETYPE2_FOUND=yes], [FREETYPE2_FOUND=no]) USING_SYSTEM_FT_LIB=true fi + if test "x$FREETYPE2_FOUND" = xno && test "x$OPENJDK_TARGET_OS" = xwindows; then + FREETYPELOCATION="$PROGRAMFILES/GnuWin32" + BASIC_FIXUP_PATH(FREETYPELOCATION) + AC_MSG_CHECKING([for freetype in some standard windows locations]) + if test -s "$FREETYPELOCATION/include/ft2build.h" && test -d "$FREETYPELOCATION/include/freetype2/freetype"; then + FREETYPE2_CFLAGS="-I$FREETYPELOCATION/include/freetype2 -I$FREETYPELOCATION/include" + FREETYPE2_LIBS="$FREETYPELOCATION/lib/freetype.lib" + FREETYPE2_LIB_PATH="$FREETYPELOCATION/lib" + if ! test -s "$FREETYPE2_LIBS"; then + AC_MSG_ERROR([Could not find $FREETYPE2_LIBS]) + fi + if ! test -s "$FREETYPE2_LIB_PATH/freetype.dll"; then + AC_MSG_ERROR([Could not find $FREETYPE2_LIB_PATH/freetype.dll]) + fi + USING_SYSTEM_FT_LIB=true + FREETYPE2_FOUND=yes + fi + AC_MSG_RESULT([$FREETYPE2_FOUND]) + fi if test "x$FREETYPE2_FOUND" = xno; then PKG_CHECK_MODULES(FREETYPE2, freetype2, [FREETYPE2_FOUND=yes], [FREETYPE2_FOUND=no]) + # On solaris, pkg_check adds -lz to freetype libs, which isn't necessary for us. + FREETYPE2_LIBS=`$ECHO $FREETYPE2_LIBS | $SED 's/-lz//g'` USING_SYSTEM_FT_LIB=true + # 64-bit libs for Solaris x86 are installed in the amd64 subdirectory, change lib to lib/amd64 + if test "x$FREETYPE2_FOUND" = xyes && test "x$OPENJDK_TARGET_OS" = xsolaris && test "x$OPENJDK_TARGET_CPU" = xx86_64; then + FREETYPE2_LIBS=`$ECHO $FREETYPE2_LIBS | $SED 's?/lib?/lib/amd64?g'` + fi fi if test "x$FREETYPE2_FOUND" = xno; then AC_MSG_CHECKING([for freetype in some standard locations]) @@ -364,7 +387,17 @@ else if test "x$FREETYPE2_FOUND" = xno; then HELP_MSG_MISSING_DEPENDENCY([freetype2]) AC_MSG_ERROR([Could not find freetype2! $HELP_MSG ]) - fi + fi + + if test "x$OPENJDK_TARGET_OS" != xwindows; then + # AC_CHECK_LIB does not support use of cl.exe + PREV_LDFLAGS="$LDFLAGS" + LDFLAGS="$FREETYPE2_LIBS" + AC_CHECK_LIB(freetype, FT_Init_FreeType, + FREETYPE2_FOUND=true, + AC_MSG_ERROR([Could not find freetype2! $HELP_MSG ])) + LDFLAGS="$PREV_LDFLAGS" + fi fi AC_SUBST(USING_SYSTEM_FT_LIB) @@ -621,13 +654,16 @@ if test "x$OPENJDK_TARGET_OS" = xlinux; then if test "x$enable_static_link_stdc__" = xyes; then LIBCXX="$LIBCXX $STATIC_STDCXX_FLAGS" LDCXX="$CC" + STATIC_CXX_SETTING="STATIC_CXX=true" AC_MSG_RESULT([static]) else LIBCXX="$LIBCXX -lstdc++" LDCXX="$CXX" + STATIC_CXX_SETTING="STATIC_CXX=false" AC_MSG_RESULT([dynamic]) fi fi +AC_SUBST(STATIC_CXX_SETTING) # libCrun is the c++ runtime-library with SunStudio (roughly the equivalent of gcc's libstdc++.so) if test "x$OPENJDK_TARGET_OS" = xsolaris && test "x$LIBCXX" = x; then diff --git a/common/autoconf/platform.m4 b/common/autoconf/platform.m4 index afa32ade726..2977606ba79 100644 --- a/common/autoconf/platform.m4 +++ b/common/autoconf/platform.m4 @@ -87,22 +87,32 @@ AC_DEFUN([PLATFORM_EXTRACT_VARS_FROM_OS], *linux*) VAR_OS=linux VAR_OS_API=posix + VAR_OS_ENV=linux ;; *solaris*) VAR_OS=solaris VAR_OS_API=posix + VAR_OS_ENV=solaris ;; *darwin*) VAR_OS=macosx VAR_OS_API=posix + VAR_OS_ENV=macosx ;; *bsd*) VAR_OS=bsd VAR_OS_API=posix + VAR_OS_ENV=bsd ;; - *cygwin*|*windows*) + *cygwin*) VAR_OS=windows VAR_OS_API=winapi + VAR_OS_ENV=windows.cygwin + ;; + *mingw*) + VAR_OS=windows + VAR_OS_API=winapi + VAR_OS_ENV=windows.msys ;; *) AC_MSG_ERROR([unsupported operating system $1]) @@ -127,12 +137,34 @@ AC_DEFUN([PLATFORM_EXTRACT_TARGET_AND_BUILD], AC_SUBST(OPENJDK_TARGET_AUTOCONF_NAME) AC_SUBST(OPENJDK_BUILD_AUTOCONF_NAME) + # Convert the autoconf OS/CPU value to our own data, into the VAR_OS/CPU variables. + PLATFORM_EXTRACT_VARS_FROM_OS($build_os) + PLATFORM_EXTRACT_VARS_FROM_CPU($build_cpu) + # ..and setup our own variables. (Do this explicitely to facilitate searching) + OPENJDK_BUILD_OS="$VAR_OS" + OPENJDK_BUILD_OS_API="$VAR_OS_API" + OPENJDK_BUILD_OS_ENV="$VAR_OS_ENV" + OPENJDK_BUILD_CPU="$VAR_CPU" + OPENJDK_BUILD_CPU_ARCH="$VAR_CPU_ARCH" + OPENJDK_BUILD_CPU_BITS="$VAR_CPU_BITS" + OPENJDK_BUILD_CPU_ENDIAN="$VAR_CPU_ENDIAN" + AC_SUBST(OPENJDK_BUILD_OS) + AC_SUBST(OPENJDK_BUILD_OS_API) + AC_SUBST(OPENJDK_BUILD_CPU) + AC_SUBST(OPENJDK_BUILD_CPU_ARCH) + AC_SUBST(OPENJDK_BUILD_CPU_BITS) + AC_SUBST(OPENJDK_BUILD_CPU_ENDIAN) + + AC_MSG_CHECKING([openjdk-build os-cpu]) + AC_MSG_RESULT([$OPENJDK_BUILD_OS-$OPENJDK_BUILD_CPU]) + # Convert the autoconf OS/CPU value to our own data, into the VAR_OS/CPU variables. PLATFORM_EXTRACT_VARS_FROM_OS($host_os) PLATFORM_EXTRACT_VARS_FROM_CPU($host_cpu) # ... and setup our own variables. (Do this explicitely to facilitate searching) OPENJDK_TARGET_OS="$VAR_OS" OPENJDK_TARGET_OS_API="$VAR_OS_API" + OPENJDK_TARGET_OS_ENV="$VAR_OS_ENV" OPENJDK_TARGET_CPU="$VAR_CPU" OPENJDK_TARGET_CPU_ARCH="$VAR_CPU_ARCH" OPENJDK_TARGET_CPU_BITS="$VAR_CPU_BITS" @@ -144,22 +176,8 @@ AC_DEFUN([PLATFORM_EXTRACT_TARGET_AND_BUILD], AC_SUBST(OPENJDK_TARGET_CPU_BITS) AC_SUBST(OPENJDK_TARGET_CPU_ENDIAN) - # Convert the autoconf OS/CPU value to our own data, into the VAR_OS/CPU variables. - PLATFORM_EXTRACT_VARS_FROM_OS($build_os) - PLATFORM_EXTRACT_VARS_FROM_CPU($build_cpu) - # ..and setup our own variables. (Do this explicitely to facilitate searching) - OPENJDK_BUILD_OS="$VAR_OS" - OPENJDK_BUILD_OS_API="$VAR_OS_API" - OPENJDK_BUILD_CPU="$VAR_CPU" - OPENJDK_BUILD_CPU_ARCH="$VAR_CPU_ARCH" - OPENJDK_BUILD_CPU_BITS="$VAR_CPU_BITS" - OPENJDK_BUILD_CPU_ENDIAN="$VAR_CPU_ENDIAN" - AC_SUBST(OPENJDK_BUILD_OS) - AC_SUBST(OPENJDK_BUILD_OS_API) - AC_SUBST(OPENJDK_BUILD_CPU) - AC_SUBST(OPENJDK_BUILD_CPU_ARCH) - AC_SUBST(OPENJDK_BUILD_CPU_BITS) - AC_SUBST(OPENJDK_BUILD_CPU_ENDIAN) + AC_MSG_CHECKING([openjdk-target os-cpu]) + AC_MSG_RESULT([$OPENJDK_TARGET_OS-$OPENJDK_TARGET_CPU]) ]) # Check if a reduced build (32-bit on 64-bit platforms) is requested, and modify behaviour @@ -208,7 +226,7 @@ AC_DEFUN([PLATFORM_SETUP_TARGET_CPU_BITS], fi AC_SUBST(COMPILE_TYPE) -AC_MSG_CHECKING([for compilation type]) +AC_MSG_CHECKING([compilation type]) AC_MSG_RESULT([$COMPILE_TYPE]) ]) @@ -299,7 +317,11 @@ AC_DEFUN([PLATFORM_SETUP_LEGACY_VARS], if test "x$OPENJDK_TARGET_CPU_BITS" = x64; then A_LP64="LP64:=" - ADD_LP64="-D_LP64=1" + # -D_LP64=1 is only set on linux and mac. Setting on windows causes diff in + # unpack200.exe + if test "x$OPENJDK_TARGET_OS" = xlinux || test "x$OPENJDK_TARGET_OS" = xmacosx; then + ADD_LP64="-D_LP64=1" + fi fi AC_SUBST(LP64,$A_LP64) diff --git a/common/autoconf/spec.gmk.in b/common/autoconf/spec.gmk.in index 21502341237..b8d3e104b79 100644 --- a/common/autoconf/spec.gmk.in +++ b/common/autoconf/spec.gmk.in @@ -41,7 +41,9 @@ SQUOTE:=' #' DQUOTE:=" #" -define NEWLINE:= +define NEWLINE + + endef # A self-referential reference to this file. @@ -50,11 +52,7 @@ SPEC:=@SPEC@ # Specify where the spec file is. MAKE_ARGS="SPEC=$(SPEC)" -# TODO The logic for finding and setting MAKE is currently not working -# well on windows. Disable it TEMPORARILY there for now. -ifneq (@OPENJDK_TARGET_OS@,windows) - MAKE:=@MAKE@ -endif +MAKE:=@MAKE@ # Pass along the verbosity setting. ifeq (,$(findstring VERBOSE=,$(MAKE))) @@ -77,6 +75,7 @@ CONF_NAME:=@CONF_NAME@ # The built jdk will run in this target system. OPENJDK_TARGET_OS:=@OPENJDK_TARGET_OS@ OPENJDK_TARGET_OS_API:=@OPENJDK_TARGET_OS_API@ +OPENJDK_TARGET_OS_ENV:=@OPENJDK_TARGET_OS_ENV@ OPENJDK_TARGET_CPU:=@OPENJDK_TARGET_CPU@ OPENJDK_TARGET_CPU_ARCH:=@OPENJDK_TARGET_CPU_ARCH@ @@ -109,16 +108,21 @@ REQUIRED_OS_NAME:=@REQUIRED_OS_NAME@ REQUIRED_OS_VERSION:=@REQUIRED_OS_VERSION@ @SET_OPENJDK@ -JIGSAW:=@JIGSAW@ LIBM:=-lm LIBDL:=@LIBDL@ # colon or semicolon PATH_SEP:=@PATH_SEP@ -# Set special env variables, to be passed to external tools. -# Used for cygwin setups. -@SETUPDEVENV@ +ifeq ($(OPENJDK_TARGET_OS), windows) + # On Windows, the Visual Studio toolchain needs the LIB and INCLUDE + # environment variables (in Windows path style), and the PATH needs to + # be adjusted to include Visual Studio tools (but this needs to be in + # cygwin/msys style). + export PATH:=@VS_PATH@ + export INCLUDE:=@VS_INCLUDE@ + export LIB:=@VS_LIB@ +endif # The sys root where standard headers and libraries are found. # Usually not needed since the configure script should have @@ -131,7 +135,6 @@ ADD_SRC_ROOT:=@ADD_SRC_ROOT@ OVERRIDE_SRC_ROOT:=@OVERRIDE_SRC_ROOT@ TOPDIR:=@SRC_ROOT@ OUTPUT_ROOT:=@OUTPUT_ROOT@ -JDK_MAKE_SHARED_DIR:=@JDK_TOPDIR@/makefiles/common/shared JDK_TOPDIR:=@JDK_TOPDIR@ LANGTOOLS_TOPDIR:=@LANGTOOLS_TOPDIR@ CORBA_TOPDIR:=@CORBA_TOPDIR@ @@ -155,6 +158,8 @@ PRODUCT_NAME:=@PRODUCT_NAME@ PRODUCT_SUFFIX:=@PRODUCT_SUFFIX@ JDK_RC_PLATFORM_NAME:=@JDK_RC_PLATFORM_NAME@ COMPANY_NAME:=@COMPANY_NAME@ +MACOSX_BUNDLE_NAME_BASE=@MACOSX_BUNDLE_NAME_BASE@ +MACOSX_BUNDLE_ID_BASE=@MACOSX_BUNDLE_ID_BASE@ # Different version strings generated from the above information. JDK_VERSION:=@JDK_VERSION@ @@ -260,6 +265,9 @@ PACKAGE_PATH=@PACKAGE_PATH@ # Source file for cacerts CACERTS_FILE=@CACERTS_FILE@ +# Enable unlimited crypto policy +UNLIMITED_CRYPTO=@UNLIMITED_CRYPTO@ + # Necessary additional compiler flags to compile X11 X_CFLAGS:=@X_CFLAGS@ X_LIBS:=@X_LIBS@ @@ -289,7 +297,7 @@ C_FLAG_DEPS:=@C_FLAG_DEPS@ CXX_FLAG_DEPS:=@CXX_FLAG_DEPS@ # Tools that potentially need to be cross compilation aware. -CC:=@UNCYGDRIVE@ @CCACHE@ @CC@ +CC:=@FIXPATH@ @CCACHE@ @CC@ # CFLAGS used to compile the jdk native libraries (C-code) CFLAGS_JDKLIB:=@CFLAGS_JDKLIB@ @@ -299,17 +307,17 @@ CXXFLAGS_JDKLIB:=@CXXFLAGS_JDKLIB@ CFLAGS_JDKEXE:=@CFLAGS_JDKEXE@ CXXFLAGS_JDKEXE:=@CXXFLAGS_JDKEXE@ -CXX:=@UNCYGDRIVE@ @CCACHE@ @CXX@ +CXX:=@FIXPATH@ @CCACHE@ @CXX@ #CXXFLAGS:=@CXXFLAGS@ OBJC:=@CCACHE@ @OBJC@ #OBJCFLAGS:=@OBJCFLAGS@ -CPP:=@UNCYGDRIVE@ @CPP@ +CPP:=@FIXPATH@ @CPP@ #CPPFLAGS:=@CPPFLAGS@ # The linker can be gcc or ld on posix systems, or link.exe on windows systems. -LD:=@UNCYGDRIVE@ @LD@ +LD:=@FIXPATH@ @LD@ # LDFLAGS used to link the jdk native libraries (C-code) LDFLAGS_JDKLIB:=@LDFLAGS_JDKLIB@ @@ -317,7 +325,7 @@ LDFLAGS_JDKLIB_SUFFIX:=@LDFLAGS_JDKLIB_SUFFIX@ # On some platforms the linker cannot be used to create executables, thus # the need for a separate LDEXE command. -LDEXE:=@UNCYGDRIVE@ @LDEXE@ +LDEXE:=@FIXPATH@ @LDEXE@ # LDFLAGS used to link the jdk native launchers (C-code) LDFLAGS_JDKEXE:=@LDFLAGS_JDKEXE@ @@ -327,22 +335,22 @@ LDFLAGS_JDKEXE_SUFFIX:=@LDFLAGS_JDKEXE_SUFFIX@ LDFLAGS_CXX_JDK:=@LDFLAGS_CXX_JDK@ # Sometimes a different linker is needed for c++ libs -LDCXX:=@UNCYGDRIVE@ @LDCXX@ +LDCXX:=@FIXPATH@ @LDCXX@ # The flags for linking libstdc++ linker. LIBCXX:=@LIBCXX@ # Sometimes a different linker is needed for c++ executables -LDEXECXX:=@UNCYGDRIVE@ @LDEXECXX@ +LDEXECXX:=@FIXPATH@ @LDEXECXX@ # BUILD_CC/BUILD_LD is a compiler/linker that generates code that is runnable on the # build platform. -BUILD_CC:=@UNCYGDRIVE@ @BUILD_CC@ -BUILD_LD:=@UNCYGDRIVE@ @BUILD_LD@ +BUILD_CC:=@FIXPATH@ @BUILD_CC@ +BUILD_LD:=@FIXPATH@ @BUILD_LD@ -AS:=@UNCYGDRIVE@ @AS@ +AS:=@FIXPATH@ @AS@ # AR is used to create a static library (is ar in posix, lib.exe in windows) -AR:=@UNCYGDRIVE@ @AR@ +AR:=@FIXPATH@ @AR@ ARFLAGS:=@ARFLAGS@ NM:=@NM@ @@ -400,20 +408,20 @@ POST_MCS_CMD:=@POST_MCS_CMD@ JAVA_FLAGS:=@BOOT_JDK_JVMARGS@ -JAVA=@UNCYGDRIVE@ $(BOOT_JDK)/bin/java $(JAVA_FLAGS) +JAVA=@FIXPATH@ $(BOOT_JDK)/bin/java $(JAVA_FLAGS) -JAVAC=@UNCYGDRIVE@ $(BOOT_JDK)/bin/javac +JAVAC=@FIXPATH@ $(BOOT_JDK)/bin/javac # Hotspot sets this variable before reading the SPEC when compiling sa-jdi.jar. Avoid # overriding that value by using ?=. JAVAC_FLAGS?=@JAVAC_FLAGS@ -JAVAH=@UNCYGDRIVE@ $(BOOT_JDK)/bin/javah +JAVAH=@FIXPATH@ $(BOOT_JDK)/bin/javah -JAR=@UNCYGDRIVE@ $(BOOT_JDK)/bin/jar +JAR=@FIXPATH@ $(BOOT_JDK)/bin/jar -RMIC=@UNCYGDRIVE@ $(BOOT_JDK)/bin/rmic +RMIC=@FIXPATH@ $(BOOT_JDK)/bin/rmic -NATIVE2ASCII=@UNCYGDRIVE@ $(BOOT_JDK)/bin/native2ascii +NATIVE2ASCII=@FIXPATH@ $(BOOT_JDK)/bin/native2ascii # Base flags for RC # Guarding this against resetting value. Legacy make files include spec multiple @@ -424,21 +432,20 @@ endif # A specific java binary with specific options can be used to run # the long running background sjavac servers and other long running tasks. -SJAVAC_SERVER_JAVA:=@UNCYGDRIVE@ @SJAVAC_SERVER_JAVA@ +SJAVAC_SERVER_JAVA:=@FIXPATH@ @SJAVAC_SERVER_JAVA@ # Tools adhering to a minimal and common standard of posix compliance. AWK:=@AWK@ BASENAME:=@BASENAME@ +BASH:=@BASH@ CAT:=@CAT@ CCACHE:=@CCACHE@ # CD is going away, but remains to cater for legacy makefiles. CD:=cd CHMOD:=@CHMOD@ CP:=@CP@ -CPIO:=@CPIO@ CUT:=@CUT@ DATE:=@DATE@ -DF:=@DF@ DIFF:=@DIFF@ FIND:=@FIND@ FIND_DELETE:=@FIND_DELETE@ @@ -461,6 +468,7 @@ SORT:=@SORT@ TAR:=@TAR@ TAIL:=@TAIL@ TEE:=@TEE@ +TIME:=@TIME@ TR:=@TR@ TOUCH:=@TOUCH@ WC:=@WC@ @@ -468,9 +476,9 @@ XARGS:=@XARGS@ ZIPEXE:=@ZIP@ ZIP:=@ZIP@ UNZIP:=@UNZIP@ -MT:=@UNCYGDRIVE@ @MT@ -RC:=@UNCYGDRIVE@ @RC@ -DUMPBIN:=@UNCYGDRIVE@ @DUMPBIN@ +MT:=@FIXPATH@ @MT@ +RC:=@FIXPATH@ @RC@ +DUMPBIN:=@FIXPATH@ @DUMPBIN@ CYGPATH:=@CYGPATH@ LDD:=@LDD@ OTOOL:=@OTOOL@ @@ -479,8 +487,9 @@ EXPR:=@EXPR@ FILE:=@FILE@ HG:=@HG@ OBJCOPY:=@OBJCOPY@ +SETFILE:=@SETFILE@ -UNCYGDRIVE:=@UNCYGDRIVE@ +FIXPATH:=@FIXPATH@ # Where the build output is stored for your convenience. BUILD_LOG:=@BUILD_LOG@ @@ -488,14 +497,12 @@ BUILD_LOG_PREVIOUS:=@BUILD_LOG_PREVIOUS@ BUILD_LOG_WRAPPER:=@BUILD_LOG_WRAPPER@ # Build setup -DISABLE_NIMBUS:=@DISABLE_NIMBUS@ ENABLE_JFR=@ENABLE_JFR@ USE_EXTERNAL_LIBJPEG:=@USE_EXTERNAL_LIBJPEG@ USE_EXTERNAL_LIBGIF:=@USE_EXTERNAL_LIBGIF@ USE_EXTERNAL_LIBZ:=@USE_EXTERNAL_LIBZ@ LIBZIP_CAN_USE_MMAP:=@LIBZIP_CAN_USE_MMAP@ -CHECK_FOR_VCINSTALLDIR=@CHECK_FOR_VCINSTALLDIR@ -MSVCRNN_DLL:=@MSVCR100DLL@ +MSVCR_DLL:=@MSVCR_DLL@ # ADD_SRCS takes a single argument with source roots diff --git a/common/autoconf/toolchain.m4 b/common/autoconf/toolchain.m4 index 45c376fb074..eb8d2b1ccc5 100644 --- a/common/autoconf/toolchain.m4 +++ b/common/autoconf/toolchain.m4 @@ -23,111 +23,67 @@ # questions. # -AC_DEFUN_ONCE([TOOLCHAIN_SETUP_VISUAL_STUDIO_ENV], +# $1 = compiler to test (CC or CXX) +# $2 = human readable name of compiler (C or C++) +AC_DEFUN([TOOLCHAIN_CHECK_COMPILER_VERSION], [ + COMPILER=[$]$1 + COMPILER_NAME=$2 -# Check if the VS env variables were setup prior to running configure. -# If not, then find vcvarsall.bat and run it automatically, and integrate -# the set env variables into the spec file. -SETUPDEVENV="# No special vars" -if test "x$OPENJDK_BUILD_OS" = "xwindows"; then - # Store path to cygwin link.exe to help excluding it when searching for - # VS linker. - AC_PATH_PROG(CYGWIN_LINK, link) - AC_MSG_CHECKING([if the first found link.exe is actually the Cygwin link tool]) - "$CYGWIN_LINK" --version > /dev/null - if test $? -eq 0 ; then - AC_MSG_RESULT([yes]) + if test "x$OPENJDK_TARGET_OS" = xsolaris; then + # Make sure we use the Sun Studio compiler and not gcc on Solaris, which won't work + COMPILER_VERSION_TEST=`$COMPILER -V 2>&1 | $HEAD -n 1` + $ECHO $COMPILER_VERSION_TEST | $GREP "^.*: Sun $COMPILER_NAME" > /dev/null + if test $? -ne 0; then + GCC_VERSION_TEST=`$COMPILER --version 2>&1 | $HEAD -n 1` + + AC_MSG_NOTICE([The $COMPILER_NAME compiler (located as $COMPILER) does not seem to be the required Sun Studio compiler.]) + AC_MSG_NOTICE([The result from running with -V was: "$COMPILER_VERSION_TEST" and with --version: "$GCC_VERSION_TEST"]) + AC_MSG_ERROR([Sun Studio compiler is required. Try setting --with-tools-dir.]) else - AC_MSG_RESULT([no]) - # This might be the VS linker. Don't exclude it later on. - CYGWIN_LINK="" + COMPILER_VERSION=`$ECHO $COMPILER_VERSION_TEST | $SED -n "s/^.*@<:@ ,\t@:>@$COMPILER_NAME@<:@ ,\t@:>@\(@<:@1-9@:>@\.@<:@0-9@:>@@<:@0-9@:>@*\).*/\1/p"` + COMPILER_VENDOR="Sun Studio" + fi + elif test "x$OPENJDK_TARGET_OS" = xwindows; then + # First line typically looks something like: + # Microsoft (R) 32-bit C/C++ Optimizing Compiler Version 16.00.30319.01 for 80x86 + COMPILER_VERSION_TEST=`$COMPILER 2>&1 | $HEAD -n 1` + COMPILER_VERSION=`$ECHO $COMPILER_VERSION_TEST | $SED -n "s/^.*Version \(@<:@1-9@:>@@<:@0-9.@:>@*\) .*/\1/p"` + COMPILER_VENDOR="Microsoft CL.EXE" + COMPILER_CPU_TEST=`$ECHO $COMPILER_VERSION_TEST | $SED -n "s/^.* for \(.*\)$/\1/p"` + if test "x$OPENJDK_TARGET_CPU" = "xx86"; then + if test "x$COMPILER_CPU_TEST" != "x80x86"; then + AC_MSG_ERROR([Target CPU mismatch. We are building for $OPENJDK_TARGET_CPU but CL is for "$COMPILER_CPU_TEST"; expected "80x86".]) + fi + elif test "x$OPENJDK_TARGET_CPU" = "xx86_64"; then + if test "x$COMPILER_CPU_TEST" != "xx64"; then + AC_MSG_ERROR([Target CPU mismatch. We are building for $OPENJDK_TARGET_CPU but CL is for "$COMPILER_CPU_TEST"; expected "x64".]) + fi + fi + else + COMPILER_VERSION_TEST=`$COMPILER --version 2>&1 | $HEAD -n 1` + # Check that this is likely to be GCC. + $COMPILER --version 2>&1 | $GREP "Free Software Foundation" > /dev/null + if test $? -ne 0; then + AC_MSG_NOTICE([The $COMPILER_NAME compiler (located as $COMPILER) does not seem to be the required GCC compiler.]) + AC_MSG_NOTICE([The result from running with --version was: "$COMPILER_VERSION_TEST"]) + AC_MSG_ERROR([GCC compiler is required. Try setting --with-tools-dir.]) fi - # If vcvarsall.bat has been run, then VCINSTALLDIR is set. - if test "x$VCINSTALLDIR" != x; then - # No further setup is needed. The build will happen from this kind - # of shell. - SETUPDEVENV="# This spec file expects that you are running bash from within a VS command prompt." - # Make sure to remind you, if you forget to run make from a cygwin bash shell - # that is spawned "bash -l" from a VS command prompt. - CHECK_FOR_VCINSTALLDIR=yes - AC_MSG_CHECKING([if you are running from within a VS command prompt]) - AC_MSG_RESULT([yes]) - else - # Ah, we have not yet run vcvarsall.bat/vsvars32.bat/vsvars64.bat. Lets do that. First find it. - if test "x$VS100COMNTOOLS" != x; then - VARSBAT=`find "$VS100COMNTOOLS/../.." -name vcvarsall.bat` - SEARCH_ROOT="$VS100COMNTOOLS" - else - VARSBAT=`find "$PROGRAMFILES" -name vcvarsall.bat` - SEARCH_ROOT="$PROGRAMFILES" - fi - VCPATH=`dirname "$VARSBAT"` - VCPATH=`cygpath -w "$VCPATH"` - if test "x$VARSBAT" = x || test ! -d "$VCPATH"; then - AC_MSG_CHECKING([if we can find the VS installation]) - AC_MSG_RESULT([no]) - AC_MSG_ERROR([Tried to find a VS installation using both $SEARCH_ROOT but failed. Please run "c:\\cygwin\\bin\\bash.exe -l" from a VS command prompt and then run configure/make from there.]) - fi - case "$OPENJDK_TARGET_CPU" in - x86) - VARSBAT_ARCH=x86 - ;; - x86_64) - VARSBAT_ARCH=amd64 - ;; - esac - # Lets extract the variables that are set by vcvarsall.bat/vsvars32.bat/vsvars64.bat - cd $OUTPUT_ROOT - bash $SRC_ROOT/common/bin/extractvcvars.sh "$VARSBAT" "$VARSBAT_ARCH" - cd $CURDIR - if test ! -s $OUTPUT_ROOT/localdevenv.sh || test ! -s $OUTPUT_ROOT/localdevenv.gmk; then - AC_MSG_CHECKING([if we can extract the needed env variables]) - AC_MSG_RESULT([no]) - AC_MSG_ERROR([Could not succesfully extract the env variables needed for the VS setup. Please run "c:\\cygwin\\bin\\bash.exe -l" from a VS command prompt and then run configure/make from there.]) - fi - # Now set all paths and other env variables. This will allow the rest of - # the configure script to find and run the compiler in the proper way. - . $OUTPUT_ROOT/localdevenv.sh - AC_MSG_CHECKING([if we can find the VS installation]) - if test "x$VCINSTALLDIR" != x; then - AC_MSG_RESULT([$VCINSTALLDIR]) - else - AC_MSG_RESULT([no]) - AC_MSG_ERROR([Could not find VS installation. Please install. If you are sure you have installed VS, then please run "c:\\cygwin\\bin\\bash.exe -l" from a VS command prompt and then run configure/make from there.]) - fi - CHECK_FOR_VCINSTALLDIR=no - SETUPDEVENV="include $OUTPUT_ROOT/localdevenv.gmk" + # First line typically looks something like: + # gcc (Ubuntu/Linaro 4.5.2-8ubuntu4) 4.5.2 + COMPILER_VERSION=`$ECHO $COMPILER_VERSION_TEST | $SED -n "s/^.* \(@<:@1-9@:>@@<:@0-9.@:>@*\)/\1/p"` + COMPILER_VENDOR=`$ECHO $COMPILER_VERSION_TEST | $SED -n "s/^\(.*\) @<:@1-9@:>@@<:@0-9.@:>@*/\1/p"` + fi + # This sets CC_VERSION or CXX_VERSION. (This comment is a grep marker) + $1_VERSION="$COMPILER_VERSION" + # This sets CC_VENDOR or CXX_VENDOR. (This comment is a grep marker) + $1_VENDOR="$COMPILER_VENDOR" - AC_MSG_CHECKING([for msvcr100.dll]) - AC_ARG_WITH(msvcr100dll, [AS_HELP_STRING([--with-msvcr100dll], - [copy this msvcr100.dll into the built JDK])]) - if test "x$with_msvcr100dll" != x; then - MSVCR100DLL="$with_msvcr100dll" - else - if test "x$OPENJDK_TARGET_CPU_BITS" = x64; then - MSVCR100DLL=`find "$VCINSTALLDIR/.." -name msvcr100.dll | grep x64 | head --lines 1` - else - MSVCR100DLL=`find "$VCINSTALLDIR/.." -name msvcr100.dll | grep x86 | grep -v ia64 | grep -v x64 | head --lines 1` - if test "x$MSVCR100DLL" = x; then - MSVCR100DLL=`find "$VCINSTALLDIR/.." -name msvcr100.dll | head --lines 1` - fi - fi - fi - if test "x$MSVCR100DLL" = x; then - AC_MSG_RESULT([no]) - AC_MSG_ERROR([Could not find msvcr100.dll !]) - fi - AC_MSG_RESULT([$MSVCR100DLL]) - SPACESAFE(MSVCR100DLL,[the path to msvcr100.dll]) - fi -fi -AC_SUBST(SETUPDEVENV) -AC_SUBST(CHECK_FOR_VCINSTALLDIR) -AC_SUBST(MSVCR100DLL) + AC_MSG_NOTICE([Using $COMPILER_VENDOR $COMPILER_NAME compiler version $COMPILER_VERSION (located at $COMPILER)]) ]) + AC_DEFUN_ONCE([TOOLCHAIN_SETUP_SYSROOT_AND_OUT_OPTIONS], [ ############################################################################### @@ -151,8 +107,67 @@ AC_SUBST(LD_OUT_OPTION) AC_SUBST(AR_OUT_OPTION) ]) -AC_DEFUN_ONCE([TOOLCHAIN_SETUP_PATHS], +# $1 = compiler to test (CC or CXX) +# $2 = human readable name of compiler (C or C++) +# $3 = list of compiler names to search for +AC_DEFUN([TOOLCHAIN_FIND_COMPILER], [ + COMPILER_NAME=$2 + + # Do a first initial attempt at searching the list of compiler names. + # AC_PATH_PROGS can't be run multiple times with the same variable, + # so create a new name for this run. + AC_PATH_PROGS(POTENTIAL_$1, $3) + $1=$POTENTIAL_$1 + + if test "x$[$]$1" = x; then + HELP_MSG_MISSING_DEPENDENCY([devkit]) + AC_MSG_ERROR([Could not find a $COMPILER_NAME compiler. $HELP_MSG]) + fi + BASIC_FIXUP_EXECUTABLE($1) + AC_MSG_CHECKING([resolved symbolic links for $1]) + TEST_COMPILER="[$]$1" + BASIC_REMOVE_SYMBOLIC_LINKS(TEST_COMPILER) + AC_MSG_RESULT([$TEST_COMPILER]) + AC_MSG_CHECKING([if $1 is disguised ccache]) + + COMPILER_BASENAME=`$BASENAME "$TEST_COMPILER"` + if test "x$COMPILER_BASENAME" = "xccache"; then + AC_MSG_RESULT([yes, trying to find proper $COMPILER_NAME compiler]) + # We /usr/lib/ccache in the path, so cc is a symlink to /usr/bin/ccache. + # We want to control ccache invocation ourselves, so ignore this cc and try + # searching again. + + # Remove the path to the fake ccache cc from the PATH + RETRY_COMPILER_SAVED_PATH="$PATH" + COMPILER_DIRNAME=`$DIRNAME [$]$1` + PATH="`$ECHO $PATH | $SED -e "s,$COMPILER_DIRNAME,,g" -e "s,::,:,g" -e "s,^:,,g"`" + + # Try again looking for our compiler + AC_CHECK_TOOLS(PROPER_COMPILER_$1, $3) + BASIC_FIXUP_EXECUTABLE(PROPER_COMPILER_$1) + PATH="$RETRY_COMPILER_SAVED_PATH" + + AC_MSG_CHECKING([for resolved symbolic links for $1]) + BASIC_REMOVE_SYMBOLIC_LINKS(PROPER_COMPILER_$1) + AC_MSG_RESULT([$PROPER_COMPILER_$1]) + $1="$PROPER_COMPILER_$1" + else + AC_MSG_RESULT([no, keeping $1]) + $1="$TEST_COMPILER" + fi + TOOLCHAIN_CHECK_COMPILER_VERSION([$1], [$COMPILER_NAME]) +]) + + +AC_DEFUN([TOOLCHAIN_SETUP_PATHS], +[ +if test "x$OPENJDK_TARGET_OS" = "xwindows"; then + TOOLCHAIN_SETUP_VISUAL_STUDIO_ENV +fi + +AC_SUBST(MSVCR_DLL) + # If --build AND --host is set, then the configure script will find any # cross compilation tools in the PATH. Cross compilation tools # follows the cross compilation standard where they are prefixed with ${host}. @@ -171,11 +186,11 @@ if test "x$COMPILE_TYPE" = "xcross"; then # Otherwise, we'll set the BUILD_tools to the native tools, but that'll have # to wait until they are properly discovered. AC_PATH_PROGS(BUILD_CC, [cl cc gcc]) - SET_FULL_PATH(BUILD_CC) + BASIC_FIXUP_EXECUTABLE(BUILD_CC) AC_PATH_PROGS(BUILD_CXX, [cl CC g++]) - SET_FULL_PATH(BUILD_CXX) + BASIC_FIXUP_EXECUTABLE(BUILD_CXX) AC_PATH_PROG(BUILD_LD, ld) - SET_FULL_PATH(BUILD_LD) + BASIC_FIXUP_EXECUTABLE(BUILD_LD) fi AC_SUBST(BUILD_CC) AC_SUBST(BUILD_CXX) @@ -218,36 +233,40 @@ if test "x$TOOLS_DIR" != x; then PATH=$TOOLS_DIR:$PATH fi + +### Locate C compiler (CC) + # gcc is almost always present, but on Windows we # prefer cl.exe and on Solaris we prefer CC. # Thus test for them in this order. -AC_PROG_CC([cl cc gcc]) -if test "x$CC" = x; then - HELP_MSG_MISSING_DEPENDENCY([devkit]) - AC_MSG_ERROR([Could not find a compiler. $HELP_MSG]) -fi -if test "x$CC" = xcc && test "x$OPENJDK_BUILD_OS" = xmacosx; then - # Do not use cc on MacOSX use gcc instead. - CC="gcc" -fi -SET_FULL_PATH(CC) - -AC_PROG_CXX([cl CC g++]) -if test "x$CXX" = xCC && test "x$OPENJDK_BUILD_OS" = xmacosx; then - # The found CC, even though it seems to be a g++ derivate, cannot compile - # c++ code. Override. - CXX="g++" -fi -SET_FULL_PATH(CXX) - -if test "x$CXX" = x || test "x$CC" = x; then - HELP_MSG_MISSING_DEPENDENCY([devkit]) - AC_MSG_ERROR([Could not find the needed compilers! $HELP_MSG ]) +if test "x$OPENJDK_TARGET_OS" = xmacosx; then + # Do not probe for cc on MacOSX. + COMPILER_CHECK_LIST="cl gcc" +else + COMPILER_CHECK_LIST="cl cc gcc" fi -if test "x$OPENJDK_BUILD_OS" != xwindows; then +TOOLCHAIN_FIND_COMPILER([CC],[C],[$COMPILER_CHECK_LIST]) +# Now that we have resolved CC ourself, let autoconf have it's go at it +AC_PROG_CC([$CC]) + +### Locate C++ compiler (CXX) + +if test "x$OPENJDK_TARGET_OS" = xmacosx; then + # Do not probe for CC on MacOSX. + COMPILER_CHECK_LIST="cl g++" +else + COMPILER_CHECK_LIST="cl CC g++" +fi +TOOLCHAIN_FIND_COMPILER([CXX],[C++],[$COMPILER_CHECK_LIST]) +# Now that we have resolved CXX ourself, let autoconf have it's go at it +AC_PROG_CXX([$CXX]) + +### Locate other tools + +if test "x$OPENJDK_TARGET_OS" = xmacosx; then AC_PROG_OBJC - SET_FULL_PATH(OBJC) + BASIC_FIXUP_EXECUTABLE(OBJC) else OBJC= fi @@ -270,20 +289,26 @@ AC_SUBST(LDCXX) # Linking C++ executables. AC_SUBST(LDEXECXX) -if test "x$OPENJDK_BUILD_OS" != xwindows; then +if test "x$OPENJDK_TARGET_OS" != xwindows; then AC_CHECK_TOOL(AR, ar) - SET_FULL_PATH(AR) + BASIC_FIXUP_EXECUTABLE(AR) fi -if test "x$OPENJDK_BUILD_OS" = xmacosx; then +if test "x$OPENJDK_TARGET_OS" = xmacosx; then ARFLAGS="-r" else ARFLAGS="" fi AC_SUBST(ARFLAGS) +# For hotspot, we need these in Windows mixed path; other platforms keep them the same +HOTSPOT_CXX="$CXX" +HOTSPOT_LD="$LD" +AC_SUBST(HOTSPOT_CXX) +AC_SUBST(HOTSPOT_LD) + COMPILER_NAME=gcc COMPILER_TYPE=CC -AS_IF([test "x$OPENJDK_BUILD_OS" = xwindows], [ +AS_IF([test "x$OPENJDK_TARGET_OS" = xwindows], [ # For now, assume that we are always compiling using cl.exe. CC_OUT_OPTION=-Fo EXE_OUT_OPTION=-out: @@ -294,7 +319,7 @@ AS_IF([test "x$OPENJDK_BUILD_OS" = xwindows], [ AC_CHECK_PROG([WINLD], [link],[link],,, [$CYGWIN_LINK]) # Since we must ignore the first found link, WINLD will contain # the full path to the link.exe program. - SET_FULL_PATH_SPACESAFE([WINLD]) + BASIC_FIXUP_EXECUTABLE(WINLD) printf "Windows linker was found at $WINLD\n" AC_MSG_CHECKING([if the found link.exe is actually the Visual Studio linker]) "$WINLD" --version > /dev/null @@ -310,12 +335,25 @@ AS_IF([test "x$OPENJDK_BUILD_OS" = xwindows], [ LDEXECXX="$WINLD" AC_CHECK_PROG([MT], [mt], [mt],,, [/usr/bin/mt]) - SET_FULL_PATH_SPACESAFE([MT]) + BASIC_FIXUP_EXECUTABLE(MT) # The resource compiler AC_CHECK_PROG([RC], [rc], [rc],,, [/usr/bin/rc]) - SET_FULL_PATH_SPACESAFE([RC]) + BASIC_FIXUP_EXECUTABLE(RC) - RC_FLAGS="-nologo /l 0x409 /r" + # For hotspot, we need these in Windows mixed path, + # so rewrite them all. Need added .exe suffix. + HOTSPOT_CXX="$CXX.exe" + HOTSPOT_LD="$LD.exe" + HOTSPOT_MT="$MT.exe" + HOTSPOT_RC="$RC.exe" + BASIC_WINDOWS_REWRITE_AS_WINDOWS_MIXED_PATH(HOTSPOT_CXX) + BASIC_WINDOWS_REWRITE_AS_WINDOWS_MIXED_PATH(HOTSPOT_LD) + BASIC_WINDOWS_REWRITE_AS_WINDOWS_MIXED_PATH(HOTSPOT_MT) + BASIC_WINDOWS_REWRITE_AS_WINDOWS_MIXED_PATH(HOTSPOT_RC) + AC_SUBST(HOTSPOT_MT) + AC_SUBST(HOTSPOT_RC) + + RC_FLAGS="-nologo -l 0x409 -r" AS_IF([test "x$VARIANT" = xOPT], [ RC_FLAGS="$RC_FLAGS -d NDEBUG" ]) @@ -333,12 +371,12 @@ AS_IF([test "x$OPENJDK_BUILD_OS" = xwindows], [ # lib.exe is used to create static libraries. AC_CHECK_PROG([WINAR], [lib],[lib],,,) - SET_FULL_PATH_SPACESAFE([WINAR]) + BASIC_FIXUP_EXECUTABLE(WINAR) AR="$WINAR" ARFLAGS="-nologo -NODEFAULTLIB:MSVCRT" AC_CHECK_PROG([DUMPBIN], [dumpbin], [dumpbin],,,) - SET_FULL_PATH_SPACESAFE([DUMPBIN]) + BASIC_FIXUP_EXECUTABLE(DUMPBIN) COMPILER_TYPE=CL CCXXFLAGS="$CCXXFLAGS -nologo" @@ -347,10 +385,10 @@ AC_SUBST(RC_FLAGS) AC_SUBST(COMPILER_TYPE) AC_PROG_CPP -SET_FULL_PATH(CPP) +BASIC_FIXUP_EXECUTABLE(CPP) AC_PROG_CXXCPP -SET_FULL_PATH(CXXCPP) +BASIC_FIXUP_EXECUTABLE(CXXCPP) if test "x$COMPILE_TYPE" != "xcross"; then # If we are not cross compiling, use the same compilers for @@ -373,43 +411,44 @@ if test "x$OPENJDK_BUILD_OS" = xsolaris; then fi # Find the right assembler. -if test "x$OPENJDK_BUILD_OS" = xsolaris; then +if test "x$OPENJDK_TARGET_OS" = xsolaris; then AC_PATH_PROG(AS, as) - SET_FULL_PATH(AS) + BASIC_FIXUP_EXECUTABLE(AS) else AS="$CC -c" fi AC_SUBST(AS) -if test "x$OPENJDK_BUILD_OS" = xsolaris; then +if test "x$OPENJDK_TARGET_OS" = xsolaris; then AC_PATH_PROGS(NM, [gnm nm]) - SET_FULL_PATH(NM) + BASIC_FIXUP_EXECUTABLE(NM) AC_PATH_PROG(STRIP, strip) - SET_FULL_PATH(STRIP) + BASIC_FIXUP_EXECUTABLE(STRIP) AC_PATH_PROG(MCS, mcs) - SET_FULL_PATH(MCS) -elif test "x$OPENJDK_BUILD_OS" != xwindows; then + BASIC_FIXUP_EXECUTABLE(MCS) +elif test "x$OPENJDK_TARGET_OS" != xwindows; then AC_CHECK_TOOL(NM, nm) - SET_FULL_PATH(NM) + BASIC_FIXUP_EXECUTABLE(NM) AC_CHECK_TOOL(STRIP, strip) - SET_FULL_PATH(STRIP) + BASIC_FIXUP_EXECUTABLE(STRIP) fi -### -# -# Check for objcopy -# -# but search for gobjcopy first... -# since I on solaris found a broken objcopy...buhh -# -AC_PATH_TOOL(OBJCOPY, gobjcopy) -if test "x$OBJCOPY" = x; then - AC_PATH_TOOL(OBJCOPY, objcopy) +# objcopy is used for moving debug symbols to separate files when +# full debug symbols are enabled. +if test "x$OPENJDK_TARGET_OS" = xsolaris || test "x$OPENJDK_TARGET_OS" = xlinux; then + AC_CHECK_TOOLS(OBJCOPY, [gobjcopy objcopy]) + BASIC_FIXUP_EXECUTABLE(OBJCOPY) +fi + +AC_CHECK_TOOLS(OBJDUMP, [gobjdump objdump]) +if test "x$OBJDUMP" != x; then + # Only used for compare.sh; we can live without it. BASIC_FIXUP_EXECUTABLE bails if argument is missing. + BASIC_FIXUP_EXECUTABLE(OBJDUMP) fi if test "x$OPENJDK_TARGET_OS" = "xmacosx"; then AC_PATH_PROG(LIPO, lipo) - SET_FULL_PATH(LIPO) + BASIC_FIXUP_EXECUTABLE(LIPO) fi # Restore old path without tools dir @@ -449,7 +488,7 @@ if test "x$GCC" = xyes; then POST_STRIP_CMD="$STRIP -g" # Linking is different on MacOSX - if test "x$OPENJDK_BUILD_OS" = xmacosx; then + if test "x$OPENJDK_TARGET_OS" = xmacosx; then # Might change in the future to clang. COMPILER_NAME=gcc SHARED_LIBRARY='lib[$]1.dylib' @@ -463,7 +502,7 @@ if test "x$GCC" = xyes; then POST_STRIP_CMD="$STRIP -S" fi else - if test "x$OPENJDK_BUILD_OS" = xsolaris; then + if test "x$OPENJDK_TARGET_OS" = xsolaris; then # If it is not gcc, then assume it is the Oracle Solaris Studio Compiler COMPILER_NAME=ossc PICFLAG="-KPIC" @@ -487,7 +526,7 @@ else POST_STRIP_CMD="$STRIP -x" POST_MCS_CMD="$MCS -d -a \"JDK $FULL_VERSION\"" fi - if test "x$OPENJDK_BUILD_OS" = xwindows; then + if test "x$OPENJDK_TARGET_OS" = xwindows; then # If it is not gcc, then assume it is the MS Visual Studio compiler COMPILER_NAME=cl PICFLAG="" @@ -626,6 +665,11 @@ case $COMPILER_TYPE in # Can cause undefined external on Solaris 8 X86 on __sincos, removing for now #CC_HIGHEST="$CC_HIGHEST -xlibmopt" + if test "x$OPENJDK_TARGET_CPU" = xsparc; then + CFLAGS_JDK="${CFLAGS_JDK} -xmemalign=4s" + CXXFLAGS_JDK="${CXXFLAGS_JDK} -xmemalign=4s" + fi + case $OPENJDK_TARGET_CPU_ARCH in x86) C_O_FLAG_HIGHEST="-xO4 -Wu,-O4~yz $CC_HIGHEST -xregs=no%frameptr" @@ -642,8 +686,6 @@ case $COMPILER_TYPE in fi ;; sparc) - CFLAGS_JDK="${CFLAGS_JDK} -xmemalign=4s" - CXXFLAGS_JDK="${CXXFLAGS_JDK} -xmemalign=4s" CFLAGS_JDKLIB_EXTRA="${CFLAGS_JDKLIB_EXTRA} -xregs=no%appl" CXXFLAGS_JDKLIB_EXTRA="${CXXFLAGS_JDKLIB_EXTRA} -xregs=no%appl" C_O_FLAG_HIGHEST="-xO4 -Wc,-Qrm-s -Wc,-Qiselect-T0 $CC_HIGHEST -xprefetch=auto,explicit -xchip=ultra" @@ -759,7 +801,7 @@ case $COMPILER_NAME in CCXXFLAGS_JDK="$CCXXFLAGS $CCXXFLAGS_JDK -DTRACING -DMACRO_MEMSYS_OPS -DBREAKPTS" case $OPENJDK_TARGET_CPU_ARCH in x86 ) - CCXXFLAGS_JDK="$CCXXFLAGS_JDK -DcpuIntel -Di586 -Di386" + CCXXFLAGS_JDK="$CCXXFLAGS_JDK -DcpuIntel -Di586 -D$OPENJDK_TARGET_CPU_LEGACY_LIB" CFLAGS_JDK="$CFLAGS_JDK -erroff=E_BAD_PRAGMA_PACK_VALUE" ;; esac @@ -859,7 +901,7 @@ CXXFLAGS_JDKEXE="$CCXXFLAGS_JDK $CXXFLAGS_JDK" # libraries will link to whatever is in memory. Yuck. # # Thus we offer the compiler to find libjvm.so first in server then in client. It works. Ugh. -if test "x$COMPILER_TYPE" = xCL; then +if test "x$COMPILER_NAME" = xcl; then LDFLAGS_JDK="$LDFLAGS_JDK -nologo -opt:ref -incremental:no" if test "x$OPENJDK_TARGET_CPU" = xx86; then LDFLAGS_JDK="$LDFLAGS_JDK -safeseh" @@ -875,19 +917,23 @@ if test "x$COMPILER_TYPE" = xCL; then fi LDFLAGS_JDKEXE="${LDFLAGS_JDK} /STACK:$LDFLAGS_STACK_SIZE" else - # If this is a --hash-style=gnu system, use --hash-style=both, why? - HAS_GNU_HASH=`$CC -dumpspecs 2>/dev/null | $GREP 'hash-style=gnu'` - if test -n "$HAS_GNU_HASH"; then - # And since we now know that the linker is gnu, then add -z defs, to forbid - # undefined symbols in object files. - LDFLAGS_JDK="${LDFLAGS_JDK} -Xlinker --hash-style=both -Xlinker -z -Xlinker defs" - if test "x$DEBUG_LEVEL" == "xrelease"; then - # When building release libraries, tell the linker optimize them. - # Should this be supplied to the OSS linker as well? - LDFLAGS_JDK="${LDFLAGS_JDK} -Xlinker -O1" + if test "x$COMPILER_NAME" = xgcc; then + # If this is a --hash-style=gnu system, use --hash-style=both, why? + HAS_GNU_HASH=`$CC -dumpspecs 2>/dev/null | $GREP 'hash-style=gnu'` + if test -n "$HAS_GNU_HASH"; then + LDFLAGS_JDK="${LDFLAGS_JDK} -Xlinker --hash-style=both " + fi + if test "x$OPENJDK_TARGET_OS" = xlinux; then + # And since we now know that the linker is gnu, then add -z defs, to forbid + # undefined symbols in object files. + LDFLAGS_JDK="${LDFLAGS_JDK} -Xlinker -z -Xlinker defs" + if test "x$DEBUG_LEVEL" = "xrelease"; then + # When building release libraries, tell the linker optimize them. + # Should this be supplied to the OSS linker as well? + LDFLAGS_JDK="${LDFLAGS_JDK} -Xlinker -O1" + fi fi fi - LDFLAGS_JDKLIB="${LDFLAGS_JDK} $SHARED_LIBRARY_FLAGS \ -L${JDK_OUTPUTDIR}/lib${OPENJDK_TARGET_CPU_LIBDIR}/server \ -L${JDK_OUTPUTDIR}/lib${OPENJDK_TARGET_CPU_LIBDIR}/client \ diff --git a/common/autoconf/toolchain_windows.m4 b/common/autoconf/toolchain_windows.m4 new file mode 100644 index 00000000000..f034ded638c --- /dev/null +++ b/common/autoconf/toolchain_windows.m4 @@ -0,0 +1,258 @@ +# +# Copyright (c) 2011, 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. 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. +# + +AC_DEFUN([TOOLCHAIN_CHECK_POSSIBLE_VISUAL_STUDIO_ROOT], +[ + if test "x$VS_ENV_CMD" = x; then + VS100BASE="$1" + METHOD="$2" + BASIC_WINDOWS_REWRITE_AS_UNIX_PATH(VS100BASE) + if test -d "$VS100BASE"; then + if test -f "$VS100BASE/$VCVARSFILE"; then + AC_MSG_NOTICE([Found Visual Studio installation at $VS100BASE using $METHOD]) + VS_ENV_CMD="$VS100BASE/$VCVARSFILE" + else + AC_MSG_NOTICE([Found Visual Studio installation at $VS100BASE using $METHOD]) + AC_MSG_NOTICE([Warning: $VCVARSFILE is missing, this is probably Visual Studio Express. Ignoring]) + fi + fi + fi +]) + +AC_DEFUN([TOOLCHAIN_CHECK_POSSIBLE_WIN_SDK_ROOT], +[ + if test "x$VS_ENV_CMD" = x; then + WIN_SDK_BASE="$1" + METHOD="$2" + BASIC_WINDOWS_REWRITE_AS_UNIX_PATH(WIN_SDK_BASE) + if test -d "$WIN_SDK_BASE"; then + if test -f "$WIN_SDK_BASE/SetEnv.Cmd"; then + AC_MSG_NOTICE([Found Windows SDK installation at $WIN_SDK_BASE using $METHOD]) + VS_ENV_CMD="$WIN_SDK_BASE/SetEnv.Cmd" + if test "x$OPENJDK_TARGET_CPU_BITS" = x32; then + VS_ENV_ARGS="/x86" + else + VS_ENV_ARGS="/x64" + fi + else + AC_MSG_NOTICE([Found Windows SDK installation at $WIN_SDK_BASE using $METHOD]) + AC_MSG_NOTICE([Warning: Installation is broken, SetEnv.Cmd is missing. Ignoring]) + fi + fi + fi +]) + +AC_DEFUN([TOOLCHAIN_FIND_VISUAL_STUDIO_BAT_FILE], +[ + if test "x$OPENJDK_TARGET_CPU_BITS" = x32; then + VCVARSFILE="vc/bin/vcvars32.bat" + else + VCVARSFILE="vc/bin/amd64/vcvars64.bat" + fi + + VS_ENV_CMD="" + VS_ENV_ARGS="" + if test "x$with_toolsdir" != x; then + TOOLCHAIN_CHECK_POSSIBLE_VISUAL_STUDIO_ROOT([$with_toolsdir/../..], [--with-tools-dir]) + fi + + if test "x$with_toolsdir" != x && test "x$VS_ENV_CMD" = x; then + # Having specified an argument which is incorrect will produce an instant failure; + # we should not go on looking + AC_MSG_NOTICE([The path given by --with-tools-dir does not contain a valid Visual Studio installation]) + AC_MSG_NOTICE([Please point to the VC/bin directory within the Visual Studio installation]) + AC_MSG_ERROR([Cannot locate a valid Visual Studio installation]) + fi + + if test "x$ProgramW6432" != x; then + TOOLCHAIN_CHECK_POSSIBLE_WIN_SDK_ROOT([$ProgramW6432/Microsoft SDKs/Windows/v7.1/Bin], [well-known name]) + fi + if test "x$PROGRAMW6432" != x; then + TOOLCHAIN_CHECK_POSSIBLE_WIN_SDK_ROOT([$PROGRAMW6432/Microsoft SDKs/Windows/v7.1/Bin], [well-known name]) + fi + if test "x$PROGRAMFILES" != x; then + TOOLCHAIN_CHECK_POSSIBLE_WIN_SDK_ROOT([$PROGRAMFILES/Microsoft SDKs/Windows/v7.1/Bin], [well-known name]) + fi + TOOLCHAIN_CHECK_POSSIBLE_WIN_SDK_ROOT([C:/Program Files/Microsoft SDKs/Windows/v7.1/Bin], [well-known name]) + TOOLCHAIN_CHECK_POSSIBLE_WIN_SDK_ROOT([C:/Program Files (x86)/Microsoft SDKs/Windows/v7.1/Bin], [well-known name]) + + if test "x$VS100COMNTOOLS" != x; then + TOOLCHAIN_CHECK_POSSIBLE_VISUAL_STUDIO_ROOT([$VS100COMNTOOLS/../..], [VS100COMNTOOLS variable]) + fi + if test "x$PROGRAMFILES" != x; then + TOOLCHAIN_CHECK_POSSIBLE_VISUAL_STUDIO_ROOT([$PROGRAMFILES/Microsoft Visual Studio 10.0], [well-known name]) + fi + TOOLCHAIN_CHECK_POSSIBLE_VISUAL_STUDIO_ROOT([C:/Program Files/Microsoft Visual Studio 10.0], [well-known name]) + TOOLCHAIN_CHECK_POSSIBLE_VISUAL_STUDIO_ROOT([C:/Program Files (x86)/Microsoft Visual Studio 10.0], [well-known name]) +]) + +# Check if the VS env variables were setup prior to running configure. +# If not, then find vcvarsall.bat and run it automatically, and integrate +# the set env variables into the spec file. +AC_DEFUN([TOOLCHAIN_SETUP_VISUAL_STUDIO_ENV], +[ + # Store path to cygwin link.exe to help excluding it when searching for + # VS linker. This must be done before changing the PATH when looking for VS. + AC_PATH_PROG(CYGWIN_LINK, link) + if test "x$CYGWIN_LINK" != x; then + AC_MSG_CHECKING([if the first found link.exe is actually the Cygwin link tool]) + "$CYGWIN_LINK" --version > /dev/null + if test $? -eq 0 ; then + AC_MSG_RESULT([yes]) + else + AC_MSG_RESULT([no]) + # This might be the VS linker. Don't exclude it later on. + CYGWIN_LINK="" + fi + fi + + # First-hand choice is to locate and run the vsvars bat file. + TOOLCHAIN_FIND_VISUAL_STUDIO_BAT_FILE + if test "x$VS_ENV_CMD" != x; then + # We have found a Visual Studio environment on disk, let's extract variables from the vsvars bat file. + BASIC_FIXUP_EXECUTABLE(VS_ENV_CMD) + + # Lets extract the variables that are set by vcvarsall.bat/vsvars32.bat/vsvars64.bat + AC_MSG_NOTICE([Trying to extract Visual Studio environment variables]) + cd $OUTPUT_ROOT + # FIXME: The code betweeen ---- was inlined from a separate script and is not properly adapted + # to autoconf standards. + + #---- + + # Cannot use the VS10 setup script directly (since it only updates the DOS subshell environment) + # but calculate the difference in Cygwin environment before/after running it and then + # apply the diff. + + if test "x$OPENJDK_BUILD_OS_ENV" = xwindows.cygwin; then + _vs10varsall=`cygpath -a -m -s "$VS_ENV_CMD"` + _dosvs10varsall=`cygpath -a -w -s $_vs10varsall` + _dosbash=`cygpath -a -w -s \`which bash\`.*` + else + _dosvs10varsall=`cmd //c echo $VS_ENV_CMD` + _dosbash=`cmd //c echo \`which bash\`` + fi + + # generate the set of exported vars before/after the vs10 setup + $ECHO "@echo off" > localdevenvtmp.bat + $ECHO "$_dosbash -c \"export -p\" > localdevenvtmp.export0" >> localdevenvtmp.bat + $ECHO "call $_dosvs10varsall $VS_ENV_ARGS" >> localdevenvtmp.bat + $ECHO "$_dosbash -c \"export -p\" > localdevenvtmp.export1" >> localdevenvtmp.bat + + # Now execute the newly created bat file. + # The | cat is to stop SetEnv.Cmd to mess with system colors on msys + cmd /c localdevenvtmp.bat | cat + + # apply the diff (less some non-vs10 vars named by "!") + $SORT localdevenvtmp.export0 | $GREP -v "!" > localdevenvtmp.export0.sort + $SORT localdevenvtmp.export1 | $GREP -v "!" > localdevenvtmp.export1.sort + $COMM -1 -3 localdevenvtmp.export0.sort localdevenvtmp.export1.sort > localdevenv.sh + + # cleanup + $RM localdevenvtmp* + #---- + cd $CURDIR + if test ! -s $OUTPUT_ROOT/localdevenv.sh; then + AC_MSG_RESULT([no]) + AC_MSG_NOTICE([Could not succesfully extract the envionment variables needed for the VS setup.]) + AC_MSG_NOTICE([Try setting --with-tools-dir to the VC/bin directory within the VS installation]) + AC_MSG_NOTICE([or run "bash.exe -l" from a VS command prompt and then run configure from there.]) + AC_MSG_ERROR([Cannot continue]) + fi + + # Now set all paths and other env variables. This will allow the rest of + # the configure script to find and run the compiler in the proper way. + AC_MSG_NOTICE([Setting extracted environment variables]) + . $OUTPUT_ROOT/localdevenv.sh + else + # We did not find a vsvars bat file, let's hope we are run from a VS command prompt. + AC_MSG_NOTICE([Cannot locate a valid Visual Studio installation, checking current environment]) + fi + + # At this point, we should have corrent variables in the environment, or we can't continue. + AC_MSG_CHECKING([for Visual Studio variables]) + + if test "x$VCINSTALLDIR" != x || test "x$WindowsSDKDir" != x || test "x$WINDOWSSDKDIR" != x; then + if test "x$INCLUDE" = x || test "x$LIB" = x; then + AC_MSG_RESULT([present but broken]) + AC_MSG_ERROR([Your VC command prompt seems broken, INCLUDE and/or LIB is missing.]) + else + AC_MSG_RESULT([ok]) + VS_INCLUDE="$INCLUDE" + VS_LIB="$LIB" + VS_PATH="$PATH" + AC_SUBST(VS_INCLUDE) + AC_SUBST(VS_LIB) + AC_SUBST(VS_PATH) + fi + else + AC_MSG_RESULT([not found]) + + if test "x$VS_ENV_CMD" = x; then + AC_MSG_NOTICE([Cannot locate a valid Visual Studio or Windows SDK installation on disk,]) + AC_MSG_NOTICE([nor is this script run from a Visual Studio command prompt.]) + else + AC_MSG_NOTICE([Running the extraction script failed.]) + fi + AC_MSG_NOTICE([Try setting --with-tools-dir to the VC/bin directory within the VS installation]) + AC_MSG_NOTICE([or run "bash.exe -l" from a VS command prompt and then run configure from there.]) + AC_MSG_ERROR([Cannot continue]) + fi + + AC_MSG_CHECKING([for msvcr100.dll]) + AC_ARG_WITH(msvcr-dll, [AS_HELP_STRING([--with-msvcr-dll], + [copy this msvcr100.dll into the built JDK (Windows only) @<:@probed@:>@])]) + if test "x$with_msvcr_dll" != x; then + MSVCR_DLL="$with_msvcr_dll" + else + if test "x$VCINSTALLDIR" != x; then + if test "x$OPENJDK_TARGET_CPU_BITS" = x64; then + MSVCR_DLL=`find "$VCINSTALLDIR" -name msvcr100.dll | grep x64 | head --lines 1` + else + MSVCR_DLL=`find "$VCINSTALLDIR" -name msvcr100.dll | grep x86 | grep -v ia64 | grep -v x64 | head --lines 1` + if test "x$MSVCR_DLL" = x; then + MSVCR_DLL=`find "$VCINSTALLDIR" -name msvcr100.dll | head --lines 1` + fi + fi + if test "x$MSVCR_DLL" != x; then + AC_MSG_NOTICE([msvcr100.dll found in VCINSTALLDIR: $VCINSTALLDIR]) + else + AC_MSG_NOTICE([Warning: msvcr100.dll not found in VCINSTALLDIR: $VCINSTALLDIR]) + fi + fi + if test "x$MSVCR_DLL" = x; then + if test -f "$SYSTEMROOT/system32/msvcr100.dll"; then + AC_MSG_NOTICE([msvcr100.dll found in $SYSTEMROOT/system32]) + MSVCR_DLL="$SYSTEMROOT/system32/msvcr100.dll" + fi + fi + fi + if test "x$MSVCR_DLL" = x; then + AC_MSG_RESULT([no]) + AC_MSG_ERROR([Could not find msvcr100.dll !]) + fi + AC_MSG_RESULT([$MSVCR_DLL]) + BASIC_FIXUP_PATH(MSVCR_DLL) +]) diff --git a/common/autoconf/version.numbers b/common/autoconf/version.numbers index fc558c22818..f174ed4228f 100644 --- a/common/autoconf/version.numbers +++ b/common/autoconf/version.numbers @@ -34,3 +34,7 @@ PRODUCT_NAME=OpenJDK PRODUCT_SUFFIX="Runtime Environment" JDK_RC_PLATFORM_NAME=Platform COMPANY_NAME=N/A + +# Might need better names for these +MACOSX_BUNDLE_NAME_BASE="OpenJDK" +MACOSX_BUNDLE_ID_BASE="net.java.openjdk" diff --git a/common/bin/compare.sh b/common/bin/compare.sh new file mode 100644 index 00000000000..5816f838900 --- /dev/null +++ b/common/bin/compare.sh @@ -0,0 +1,1249 @@ +#!/bin/bash +# +# Copyright (c) 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. +# + +# This script is processed by configure before it's usable. It is run from +# the root of the build directory. + + +########################################################################################## + +# Check that we are run via the wrapper generated by configure +if [ -z "$SRC_ROOT" ]; then + echo "Error: You must run this script using build/[conf]/compare.sh" + exit 1 +fi + +if [ "$OPENJDK_TARGET_OS" = "macosx" ]; then + FULLDUMP_CMD="$OTOOL -v -V -h -X -t -d" + LDD_CMD="$OTOOL -L" + DIS_CMD="$OTOOL -v -t" + STAT_PRINT_SIZE="-f %z" +elif [ "$OPENJDK_TARGET_OS" = "windows" ]; then + FULLDUMP_CMD="$DUMPBIN -all" + LDD_CMD="$DUMPBIN -dependants | $GREP .dll" + DIS_CMD="$DUMPBIN -disasm:nobytes" + STAT_PRINT_SIZE="-c %s" +else + FULLDUMP_CMD="$READELF -a" + LDD_CMD="$LDD" + DIS_CMD="$OBJDUMP -d" + STAT_PRINT_SIZE="-c %s" +fi + +UNARCHIVE="$UNZIP -q" + +COMPARE_EXCEPTIONS_INCLUDE="$SRC_ROOT/common/bin/compare_exceptions.sh.incl" +if [ ! -e "$COMPARE_EXCEPTIONS_INCLUDE" ]; then + echo "Error: Cannot locate the exceptions file, it should have been here: $COMPARE_EXCEPTIONS_INCLUDE" + exit 1 +fi +# Include exception definitions +. "$COMPARE_EXCEPTIONS_INCLUDE" + +########################################################################################## +# Compare text files and ignore specific differences: +# +# * Timestamps in Java sources generated by idl2java +# * Sorting order and cleanup style in .properties files + +diff_text() { + OTHER_FILE=$1 + THIS_FILE=$2 + + SUFFIX="${THIS_FILE##*.}" + + TMP=1 + + if [[ "$THIS_FILE" = *"META-INF/MANIFEST.MF" ]]; then + TMP=$(LANG=C $DIFF $OTHER_FILE $THIS_FILE | \ + $GREP '^[<>]' | \ + $SED -e '/[<>] Ant-Version: Apache Ant .*/d' \ + -e '/[<>] Created-By: .* (Oracle Corporation).*/d') + fi + if test "x$SUFFIX" = "xjava"; then + TMP=$(LANG=C $DIFF $OTHER_FILE $THIS_FILE | \ + $GREP '^[<>]' | \ + $SED -e '/[<>] \* from.*\.idl/d' \ + -e '/[<>] \*.*[0-9]\{4\}_[0-9]\{2\}_[0-9]\{2\}_[0-9]\{2\}_[0-9]\{2\}-b[0-9]\{2\}.*/d' \ + -e '/[<>] \*.*[0-9]\{4\} [0-9][0-9]*:[0-9]\{2\}:[0-9]\{2\}.*/d' \ + -e '/\/\/ Generated from input file.*/d' \ + -e '/\/\/ This file was generated AUTOMATICALLY from a template file.*/d' \ + -e '/\/\/ java GenerateCharacter.*/d') + fi + # Ignore date strings in class files. + # On Macosx the system sources for generated java classes produce different output on + # consequtive invokations seemingly randomly. + # For example a method parameter randomly named "thePoint" or "aPoint". Ignore this. + if test "x$SUFFIX" = "xclass"; then + # To improve performance when large diffs are found, do a rough filtering of classes + # elibeble for these exceptions + if $GREP -R -e '[0-9]\{4\}_[0-9]\{2\}_[0-9]\{2\}_[0-9]\{2\}_[0-9]\{2\}-b[0-9]\{2\}' -e thePoint -e aPoint -e setItemsPtr ${THIS_FILE} > /dev/null; then + $JAVAP -c -constants -l -p ${OTHER_FILE} > ${OTHER_FILE}.javap + $JAVAP -c -constants -l -p ${THIS_FILE} > ${THIS_FILE}.javap + TMP=$($DIFF ${OTHER_FILE}.javap ${THIS_FILE}.javap | \ + $GREP '^[<>]' | \ + $SED -e '/[<>].*[0-9]\{4\}_[0-9]\{2\}_[0-9]\{2\}_[0-9]\{2\}_[0-9]\{2\}-b[0-9]\{2\}.*/d' \ + -e '/[<>].*Point Lcom\/apple\/jobjc\/foundation\/NSPoint;/d' \ + -e '/[<>].*public com\.apple\.jobjc\.Pointer].*public void setItemsPtr(com\.apple\.jobjc\.Pointer $OTHER_FILE.cleaned + TMP=$(LANG=C $DIFF $OTHER_FILE.cleaned $THIS_FILE) + fi + if test -n "$TMP"; then + echo Files $OTHER_FILE and $THIS_FILE differ + return 1 + fi + + return 0 +} + +########################################################################################## +# Compare directory structure + +compare_dirs() { + THIS_DIR=$1 + OTHER_DIR=$2 + WORK_DIR=$3 + + mkdir -p $WORK_DIR + + (cd $OTHER_DIR && $FIND . -type d | $SORT > $WORK_DIR/dirs_other) + (cd $THIS_DIR && $FIND . -type d | $SORT > $WORK_DIR/dirs_this) + + $DIFF $WORK_DIR/dirs_other $WORK_DIR/dirs_other > $WORK_DIR/dirs_diff + + echo -n Directory structure... + if [ -s $WORK_DIR/dirs_diff ]; then + echo Differences found. + REGRESSIONS=true + # Differences in directories found. + ONLY_OTHER=$($GREP '<' $WORK_DIR/dirs_diff) + if [ "$ONLY_OTHER" ]; then + echo Only in $OTHER + $GREP '<' $WORK_DIR/dirs_diff | $SED 's|< ./| |g' + fi + ONLY_THIS=$($GREP '>' $WORK_DIR/dirs_diff) + if [ "$ONLY_THIS" ]; then + echo Only in $THIS + $GREP '>' $WORK_DIR/dirs_diff | $SED 's|> ./| |g' + fi + else + echo Identical! + fi +} + + +########################################################################################## +# Compare file structure + +compare_files() { + THIS_DIR=$1 + OTHER_DIR=$2 + WORK_DIR=$3 + + $MKDIR -p $WORK_DIR + + (cd $OTHER_DIR && $FIND . ! -type d | $SORT > $WORK_DIR/files_other) + (cd $THIS_DIR && $FIND . ! -type d | $SORT > $WORK_DIR/files_this) + + $DIFF $WORK_DIR/files_other $WORK_DIR/files_this > $WORK_DIR/files_diff + + echo -n File names... + if [ -s $WORK_DIR/files_diff ]; then + echo Differences found. + REGRESSIONS=true + # Differences in files found. + ONLY_OTHER=$($GREP '<' $WORK_DIR/files_diff) + if [ "$ONLY_OTHER" ]; then + echo Only in $OTHER + $GREP '<' $WORK_DIR/files_diff | $SED 's|< ./| |g' + fi + ONLY_THIS=$($GREP '>' $WORK_DIR/files_diff) + if [ "$ONLY_THIS" ]; then + echo Only in $THIS + $GREP '>' $WORK_DIR/files_diff | $SED 's|> ./| |g' + fi + else + echo Identical! + fi +} + + +########################################################################################## +# Compare permissions + +compare_permissions() { + THIS_DIR=$1 + OTHER_DIR=$2 + WORK_DIR=$3 + + mkdir -p $WORK_DIR + + echo -n Permissions... + found="" + for f in `cd $OTHER_DIR && $FIND . -type f` + do + if [ ! -f ${OTHER_DIR}/$f ]; then continue; fi + if [ ! -f ${THIS_DIR}/$f ]; then continue; fi + OP=`ls -l ${OTHER_DIR}/$f | awk '{printf("%.10s\n", $1);}'` + TP=`ls -l ${THIS_DIR}/$f | awk '{printf("%.10s\n", $1);}'` + if [ "$OP" != "$TP" ] + then + if [ -z "$found" ]; then echo ; found="yes"; fi + $PRINTF "\told: ${OP} new: ${TP}\t$f\n" + fi + done + if [ -z "$found" ]; then + echo "Identical!" + else + REGRESSIONS=true + fi +} + +########################################################################################## +# Compare file command output + +compare_file_types() { + THIS_DIR=$1 + OTHER_DIR=$2 + WORK_DIR=$3 + + $MKDIR -p $WORK_DIR + + echo -n File types... + found="" + for f in `cd $OTHER_DIR && $FIND . ! -type d` + do + if [ ! -f ${OTHER_DIR}/$f ]; then continue; fi + if [ ! -f ${THIS_DIR}/$f ]; then continue; fi + OF=`cd ${OTHER_DIR} && $FILE -h $f` + TF=`cd ${THIS_DIR} && $FILE -h $f` + if [ "$f" = "./src.zip" ] || [[ "$f" = *"/Home/src.zip" ]] || [[ "$f" = *"/lib/JObjC.jar" ]] + then + if [ "`echo $OF | $GREP -ic zip`" -gt 0 -a "`echo $TF | $GREP -ic zip`" -gt 0 ] + then + # the way we produces zip-files make it so that directories are stored in old file + # but not in new (only files with full-path) + # this makes file-5.09 report them as different + continue; + fi + fi + + if [ "$OF" != "$TF" ] + then + if [ -z "$found" ]; then echo ; found="yes"; fi + $PRINTF "\tother: ${OF}\n\tthis : ${TF}\n" + fi + done + if [ -z "$found" ]; then + echo "Identical!" + else + REGRESSIONS=true + fi +} + +########################################################################################## +# Compare the rest of the files + +compare_general_files() { + THIS_DIR=$1 + OTHER_DIR=$2 + WORK_DIR=$3 + + GENERAL_FILES=$(cd $THIS_DIR && $FIND . -type f ! -name "*.so" ! -name "*.jar" ! -name "*.zip" \ + ! -name "*.debuginfo" ! -name "*.dylib" ! -name "jexec" \ + ! -name "ct.sym" ! -name "*.diz" ! -name "*.dll" \ + ! -name "*.pdb" ! -name "*.exp" ! -name "*.ilk" \ + ! -name "*.lib" ! -name "*.war" \ + | $GREP -v "./bin/" | $SORT | $FILTER) + + echo General files... + for f in $GENERAL_FILES + do + if [ -e $OTHER_DIR/$f ]; then + if [ "$(basename $f)" = "release" ]; then + # Ignore differences in change numbers in release file. + OTHER_FILE=$WORK_DIR/$f.other + THIS_FILE=$WORK_DIR/$f.this + $MKDIR -p $(dirname $OTHER_FILE) + $MKDIR -p $(dirname $THIS_FILE) + $CAT $OTHER_DIR/$f | $SED 's/\:[0-9a-f]\{12,12\}/:CHANGE/g' > $OTHER_FILE + $CAT $THIS_DIR/$f | $SED 's/\:[0-9a-f]\{12,12\}/:CHANGE/g' > $THIS_FILE + else + OTHER_FILE=$OTHER_DIR/$f + THIS_FILE=$THIS_DIR/$f + fi + DIFF_OUT=$($DIFF $OTHER_FILE $THIS_FILE 2>&1) + if [ -n "$DIFF_OUT" ]; then + echo $f + REGRESSIONS=true + if [ "$SHOW_DIFFS" = "true" ]; then + echo "$DIFF_OUT" + fi + fi + fi + done + + +} + +########################################################################################## +# Compare zip file + +compare_zip_file() { + THIS_DIR=$1 + OTHER_DIR=$2 + WORK_DIR=$3 + ZIP_FILE=$4 + + THIS_ZIP=$THIS_DIR/$ZIP_FILE + OTHER_ZIP=$OTHER_DIR/$ZIP_FILE + + THIS_SUFFIX="${THIS_ZIP##*.}" + OTHER_SUFFIX="${OTHER_ZIP##*.}" + if [ "$THIS_SUFFIX" != "$OTHER_SUFFIX" ]; then + echo The files do not have the same suffix type! + return 2 + fi + + TYPE="$THIS_SUFFIX" + + if $CMP $OTHER_ZIP $THIS_ZIP > /dev/null + then + return 0 + fi + # Not quite identical, the might still contain the same data. + # Unpack the jar/zip files in temp dirs + + THIS_UNZIPDIR=$WORK_DIR/$ZIP_FILE.this + OTHER_UNZIPDIR=$WORK_DIR/$ZIP_FILE.other + $RM -rf $THIS_UNZIPDIR $OTHER_UNZIPDIR + $MKDIR -p $THIS_UNZIPDIR + $MKDIR -p $OTHER_UNZIPDIR + (cd $THIS_UNZIPDIR && $UNARCHIVE $THIS_ZIP) + (cd $OTHER_UNZIPDIR && $UNARCHIVE $OTHER_ZIP) + + # Find all archives inside and unzip them as well to compare the contents rather than + # the archives. + EXCEPTIONS="" + for pack in $($FIND $THIS_UNZIPDIR -name "*.pack" -o -name "*.pack.gz"); do + ($UNPACK200 $pack $pack.jar) + # Filter out the unzipped archives from the diff below. + EXCEPTIONS="$EXCEPTIONS $pack $pack.jar" + done + for pack in $($FIND $OTHER_UNZIPDIR -name "*.pack" -o -name "*.pack.gz"); do + ($UNPACK200 $pack $pack.jar) + EXCEPTIONS="$EXCEPTIONS $pack $pack.jar" + done + for zip in $($FIND $THIS_UNZIPDIR -name "*.jar" -o -name "*.zip"); do + $MKDIR $zip.unzip + (cd $zip.unzip && $UNARCHIVE $zip) + EXCEPTIONS="$EXCEPTIONS $zip" + done + for zip in $($FIND $OTHER_UNZIPDIR -name "*.jar" -o -name "*.zip"); do + $MKDIR $zip.unzip + (cd $zip.unzip && $UNARCHIVE $zip) + EXCEPTIONS="$EXCEPTIONS $zip" + done + + CONTENTS_DIFF_FILE=$WORK_DIR/$ZIP_FILE.diff + # On solaris, there is no -q option. + if [ "$OPENJDK_TARGET_OS" = "solaris" ]; then + LANG=C $DIFF -r $OTHER_UNZIPDIR $THIS_UNZIPDIR \ + | $GREP -v -e "^<" -e "^>" -e "^Common subdirectories:" \ + > $CONTENTS_DIFF_FILE + else + LANG=C $DIFF -rq $OTHER_UNZIPDIR $THIS_UNZIPDIR > $CONTENTS_DIFF_FILE + fi + + ONLY_OTHER=$($GREP "^Only in $OTHER_UNZIPDIR" $CONTENTS_DIFF_FILE) + ONLY_THIS=$($GREP "^Only in $THIS_UNZIPDIR" $CONTENTS_DIFF_FILE) + + return_value=0 + + if [ -n "$ONLY_OTHER" ]; then + echo " Only OTHER $ZIP_FILE contains:" + echo "$ONLY_OTHER" | sed "s|Only in $OTHER_UNZIPDIR| |"g | sed 's|: |/|g' + return_value=1 + fi + + if [ -n "$ONLY_THIS" ]; then + echo " Only THIS $ZIP_FILE contains:" + echo "$ONLY_THIS" | sed "s|Only in $THIS_UNZIPDIR| |"g | sed 's|: |/|g' + return_value=1 + fi + + if [ "$OPENJDK_TARGET_OS" = "solaris" ]; then + DIFFING_FILES=$($GREP -e "differ$" -e "^diff " $CONTENTS_DIFF_FILE \ + | $CUT -f 3 -d ' ' | $SED "s|$OTHER_UNZIPDIR/||g") + else + DIFFING_FILES=$($GREP -e "differ$" $CONTENTS_DIFF_FILE \ + | $CUT -f 2 -d ' ' | $SED "s|$OTHER_UNZIPDIR/||g") + fi + + $RM -f $WORK_DIR/$ZIP_FILE.diffs + for file in $DIFFING_FILES; do + if [[ "$ACCEPTED_JARZIP_CONTENTS $EXCEPTIONS" != *"$file"* ]]; then + diff_text $OTHER_UNZIPDIR/$file $THIS_UNZIPDIR/$file >> $WORK_DIR/$ZIP_FILE.diffs + fi + done + + if [ -s "$WORK_DIR/$ZIP_FILE.diffs" ]; then + return_value=1 + echo " Differing files in $ZIP_FILE" + $CAT $WORK_DIR/$ZIP_FILE.diffs | $GREP differ | cut -f 2 -d ' ' | \ + $SED "s|$OTHER_UNZIPDIR| |g" > $WORK_DIR/$ZIP_FILE.difflist + $CAT $WORK_DIR/$ZIP_FILE.difflist + + if [ -n "$SHOW_DIFFS" ]; then + for i in $(cat $WORK_DIR/$ZIP_FILE.difflist) ; do + if [ -f "${OTHER_UNZIPDIR}/$i.javap" ]; then + LANG=C $DIFF ${OTHER_UNZIPDIR}/$i.javap ${THIS_UNZIPDIR}/$i.javap + elif [ -f "${OTHER_UNZIPDIR}/$i.cleaned" ]; then + LANG=C $DIFF ${OTHER_UNZIPDIR}/$i.cleaned ${THIS_UNZIPDIR}/$i + else + LANG=C $DIFF ${OTHER_UNZIPDIR}/$i ${THIS_UNZIPDIR}/$i + fi + done + fi + fi + + return $return_value +} + + +########################################################################################## +# Compare all zip files + +compare_all_zip_files() { + THIS_DIR=$1 + OTHER_DIR=$2 + WORK_DIR=$3 + + ZIPS=$(cd $THIS_DIR && $FIND . -type f -name "*.zip" | $SORT | $FILTER ) + + if [ -n "$ZIPS" ]; then + echo Zip files... + + return_value=0 + for f in $ZIPS; do + if [ -f "$OTHER_DIR/$f" ]; then + compare_zip_file $THIS_DIR $OTHER_DIR $WORK_DIR $f + if [ "$?" != "0" ]; then + return_value=1 + REGRESSIONS=true + fi + fi + done + fi + + return $return_value +} + +########################################################################################## +# Compare all jar files + +compare_all_jar_files() { + THIS_DIR=$1 + OTHER_DIR=$2 + WORK_DIR=$3 + + # TODO filter? + ZIPS=$(cd $THIS_DIR && $FIND . -type f -name "*.jar" -o -name "*.war" | $SORT | $FILTER) + + if [ -n "$ZIPS" ]; then + echo Jar files... + + return_value=0 + for f in $ZIPS; do + if [ -f "$OTHER_DIR/$f" ]; then + compare_zip_file $THIS_DIR $OTHER_DIR $WORK_DIR $f + if [ "$?" != "0" ]; then + return_value=1 + REGRESSIONS=true + fi + fi + done + fi + + return $return_value +} + +########################################################################################## +# Compare binary (executable/library) file + +compare_bin_file() { + THIS_DIR=$1 + OTHER_DIR=$2 + WORK_DIR=$3 + BIN_FILE=$4 + + THIS_FILE=$THIS_DIR/$BIN_FILE + OTHER_FILE=$OTHER_DIR/$BIN_FILE + NAME=$(basename $BIN_FILE) + WORK_FILE_BASE=$WORK_DIR/$BIN_FILE + FILE_WORK_DIR=$(dirname $WORK_FILE_BASE) + + $MKDIR -p $FILE_WORK_DIR + + ORIG_THIS_FILE="$THIS_FILE" + ORIG_OTHER_FILE="$OTHER_FILE" + + if [[ "$STRIP_BEFORE_COMPARE" = *"$BIN_FILE"* ]]; then + THIS_STRIPPED_FILE=$FILE_WORK_DIR/this/$NAME + OTHER_STRIPPED_FILE=$FILE_WORK_DIR/other/$NAME + $MKDIR -p $FILE_WORK_DIR/this $FILE_WORK_DIR/other + $CP $THIS_FILE $THIS_STRIPPED_FILE + $CP $OTHER_FILE $OTHER_STRIPPED_FILE + $STRIP $THIS_STRIPPED_FILE + $STRIP $OTHER_STRIPPED_FILE + THIS_FILE="$THIS_STRIPPED_FILE" + OTHER_FILE="$OTHER_STRIPPED_FILE" + fi + + if [ "$OPENJDK_TARGET_OS" = "windows" ]; then + unset _NT_SYMBOL_PATH + # On windows we need to unzip the debug symbols, if present + OTHER_FILE_BASE=${OTHER_FILE/.dll/} + OTHER_FILE_BASE=${OTHER_FILE_BASE/.exe/} + DIZ_NAME=$(basename $OTHER_FILE_BASE).diz + # java.exe and java.dll diz files will have the same name. Have to + # make sure java.exe gets the right one. This is only needed for + # OTHER since in the new build, all pdb files are left around. + if [ "$NAME" = "java.exe" ] && [ -f "$OTHER/tmp/java/java/obj64/java.diz" ]; then + OTHER_DIZ_FILE="$OTHER/tmp/java/java/obj64/java.diz" + elif [ -f "${OTHER_FILE_BASE}.diz" ]; then + OTHER_DIZ_FILE=${OTHER_FILE_BASE}.diz + else + # Some files, jli.dll, appears twice in the image but only one of + # thme has a diz file next to it. + OTHER_DIZ_FILE="$($FIND $OTHER_DIR -name $DIZ_NAME | $SED 1q)" + if [ ! -f "$OTHER_DIZ_FILE" ]; then + # As a last resort, look for diz file in the whole build output + # dir. + OTHER_DIZ_FILE="$($FIND $OTHER -name $DIZ_NAME | $SED 1q)" + fi + fi + if [ -n "$OTHER_DIZ_FILE" ]; then + $MKDIR -p $FILE_WORK_DIR/other + (cd $FILE_WORK_DIR/other ; $UNARCHIVE -o $OTHER_DIZ_FILE) + export _NT_SYMBOL_PATH="$FILE_WORK_DIR/other" + fi + THIS_FILE_BASE=${THIS_FILE/.dll/} + THIS_FILE_BASE=${THIS_FILE_BASE/.exe/} + if [ -f "${THIS_FILE/.dll/}.diz" ]; then + THIS_DIZ_FILE=${THIS_FILE/.dll/}.diz + else + THIS_DIZ_FILE="$($FIND $THIS_DIR -name $DIZ_NAME | $SED 1q)" + if [ ! -f "$THIS_DIZ_FILE" ]; then + # As a last resort, look for diz file in the whole build output + # dir. + THIS_DIZ_FILE="$($FIND $THIS -name $DIZ_NAME | $SED 1q)" + fi + fi + if [ -n "$THIS_DIZ_FILE" ]; then + $MKDIR -p $FILE_WORK_DIR/this + (cd $FILE_WORK_DIR/this ; $UNARCHIVE -o $THIS_DIZ_FILE) + export _NT_SYMBOL_PATH="$_NT_SYMBOL_PATH;$FILE_WORK_DIR/this" + fi + fi + + if [ -z "$SKIP_BIN_DIFF" ]; then + if cmp $OTHER_FILE $THIS_FILE > /dev/null; then + # The files were bytewise identical. + if [ -n "$VERBOSE" ]; then + echo " : : : : : $BIN_FILE" + fi + return 0 + fi + BIN_MSG=" diff " + if [[ "$ACCEPTED_BIN_DIFF" != *"$BIN_FILE"* ]]; then + DIFF_BIN=true + if [[ "$KNOWN_BIN_DIFF" != *"$BIN_FILE"* ]]; then + BIN_MSG="*$BIN_MSG*" + REGRESSIONS=true + else + BIN_MSG=" $BIN_MSG " + fi + else + BIN_MSG="($BIN_MSG)" + DIFF_BIN= + fi + fi + + if [ -n "$STAT" ]; then + THIS_SIZE=$($STAT $STAT_PRINT_SIZE "$THIS_FILE") + OTHER_SIZE=$($STAT $STAT_PRINT_SIZE "$OTHER_FILE") + else + THIS_SIZE=$(ls -l "$THIS_FILE" | awk '{ print $5 }') + OTHER_SIZE=$(ls -l "$OTHER_FILE" | awk '{ print $5 }') + fi + if [ $THIS_SIZE -ne $OTHER_SIZE ]; then + DIFF_SIZE_NUM=$($EXPR $THIS_SIZE - $OTHER_SIZE) + DIFF_SIZE_REL=$($EXPR $THIS_SIZE \* 100 / $OTHER_SIZE) + SIZE_MSG=$($PRINTF "%3d%% %4d" $DIFF_SIZE_REL $DIFF_SIZE_NUM) + if [[ "$ACCEPTED_SMALL_SIZE_DIFF" = *"$BIN_FILE"* ]] && [ "$DIFF_SIZE_REL" -gt 98 ] && [ "$DIFF_SIZE_REL" -lt 102 ]; then + SIZE_MSG="($SIZE_MSG)" + DIFF_SIZE= + elif [[ "$ACCEPTED_SMALL_SIZE_DIFF" = *"$BIN_FILE"* ]] && [ "$DIFF_SIZE_NUM" = 512 ]; then + # On windows, size of binaries increase in 512 increments. + SIZE_MSG="($SIZE_MSG)" + DIFF_SIZE= + else + if [[ "$ACCEPTED_SIZE_DIFF" != *"$BIN_FILE"* ]]; then + DIFF_SIZE=true + if [[ "$KNOWN_SIZE_DIFF" != *"$BIN_FILE"* ]]; then + SIZE_MSG="*$SIZE_MSG*" + REGRESSIONS=true + else + SIZE_MSG=" $SIZE_MSG " + fi + else + SIZE_MSG="($SIZE_MSG)" + DIFF_SIZE= + fi + fi + else + SIZE_MSG=" " + DIFF_SIZE= + if [[ "$KNOWN_SIZE_DIFF $ACCEPTED_SIZE_DIFF" = *"$BIN_FILE"* ]]; then + SIZE_MSG=" ! " + fi + fi + + if [[ "$SORT_SYMBOLS" = *"$BIN_FILE"* ]]; then + SYM_SORT_CMD="sort" + else + SYM_SORT_CMD="cat" + fi + + # Check symbols + if [ "$OPENJDK_TARGET_OS" = "windows" ]; then + # The output from dumpbin on windows differs depending on if the debug symbol + # files are still around at the location the binary is pointing too. Need + # to filter out that extra information. + $DUMPBIN -exports $OTHER_FILE | $GREP -E '^ +[0-9A-F]+ +[0-9A-F]+ [0-9A-F]+' | sed 's/ = .*//g' | cut -c27- | $SYM_SORT_CMD > $WORK_FILE_BASE.symbols.other + $DUMPBIN -exports $THIS_FILE | $GREP -E '^ +[0-9A-F]+ +[0-9A-F]+ [0-9A-F]+' | sed 's/ = .*//g' | cut -c27- | $SYM_SORT_CMD > $WORK_FILE_BASE.symbols.this + elif [ "$OPENJDK_TARGET_OS" = "solaris" ]; then + # Some symbols get seemingly random 15 character prefixes. Filter them out. + $NM -a $ORIG_OTHER_FILE 2> /dev/null | $GREP -v $NAME | $AWK '{print $2, $3, $4, $5}' | $SED 's/^\([a-zA-Z] [\.\$]\)[a-zA-Z0-9_\$]\{15,15\}\./\1./g' | $SYM_SORT_CMD > $WORK_FILE_BASE.symbols.other + $NM -a $ORIG_THIS_FILE 2> /dev/null | $GREP -v $NAME | $AWK '{print $2, $3, $4, $5}' | $SED 's/^\([a-zA-Z] [\.\$]\)[a-zA-Z0-9_\$]\{15,15\}\./\1./g' | $SYM_SORT_CMD > $WORK_FILE_BASE.symbols.this + else + $NM -a $ORIG_OTHER_FILE 2> /dev/null | $GREP -v $NAME | $AWK '{print $2, $3, $4, $5}' | $SYM_SORT_CMD > $WORK_FILE_BASE.symbols.other + $NM -a $ORIG_THIS_FILE 2> /dev/null | $GREP -v $NAME | $AWK '{print $2, $3, $4, $5}' | $SYM_SORT_CMD > $WORK_FILE_BASE.symbols.this + fi + + LANG=C $DIFF $WORK_FILE_BASE.symbols.other $WORK_FILE_BASE.symbols.this > $WORK_FILE_BASE.symbols.diff + if [ -s $WORK_FILE_BASE.symbols.diff ]; then + SYM_MSG=" diff " + if [[ "$ACCEPTED_SYM_DIFF" != *"$BIN_FILE"* ]]; then + DIFF_SYM=true + if [[ "$KNOWN_SYM_DIFF" != *"$BIN_FILE"* ]]; then + SYM_MSG="*$SYM_MSG*" + REGRESSIONS=true + else + SYM_MSG=" $SYM_MSG " + fi + else + SYM_MSG="($SYM_MSG)" + DIFF_SYM= + fi + else + SYM_MSG=" " + DIFF_SYM= + if [[ "$KNOWN_SYM_DIFF $ACCEPTED_SYM_DIFF" = *"$BIN_FILE"* ]]; then + SYM_MSG=" ! " + fi + fi + + # Check dependencies + if [ -n "$LDD_CMD" ]; then + (cd $FILE_WORK_DIR && $CP $OTHER_FILE . && $LDD_CMD $NAME 2>/dev/null | $AWK '{ print $1;}' | $SORT | $TEE $WORK_FILE_BASE.deps.other | $UNIQ > $WORK_FILE_BASE.deps.other.uniq) + (cd $FILE_WORK_DIR && $CP $THIS_FILE . && $LDD_CMD $NAME 2 $WORK_FILE_BASE.deps.this.uniq) + (cd $FILE_WORK_DIR && $RM -f $NAME) + + LANG=C $DIFF $WORK_FILE_BASE.deps.other $WORK_FILE_BASE.deps.this > $WORK_FILE_BASE.deps.diff + LANG=C $DIFF $WORK_FILE_BASE.deps.other.uniq $WORK_FILE_BASE.deps.this.uniq > $WORK_FILE_BASE.deps.diff.uniq + + if [ -s $WORK_FILE_BASE.deps.diff ]; then + if [ -s $WORK_FILE_BASE.deps.diff.uniq ]; then + DEP_MSG=" diff " + else + DEP_MSG=" redun " + fi + if [[ "$ACCEPTED_DEP_DIFF" != *"$BIN_FILE"* ]]; then + DIFF_DEP=true + if [[ "$KNOWN_DEP_DIFF" != *"$BIN_FILE"* ]]; then + DEP_MSG="*$DEP_MSG*" + REGRESSIONS=true + else + DEP_MSG=" $DEP_MSG " + fi + else + DEP_MSG="($DEP_MSG)" + DIFF_DEP= + fi + else + DEP_MSG=" " + DIFF_DEP= + if [[ "$KNOWN_DEP_DIFF $ACCEPTED_DEP_DIFF" = *"$BIN_FILE"* ]]; then + DEP_MSG=" ! " + fi + fi + else + DEP_MSG=" - " + fi + + # Compare fulldump output + if [ -n "$FULLDUMP_CMD" ] && [ -z "$SKIP_FULLDUMP_DIFF" ]; then + $FULLDUMP_CMD $OTHER_FILE > $WORK_FILE_BASE.fulldump.other 2>&1 + $FULLDUMP_CMD $THIS_FILE > $WORK_FILE_BASE.fulldump.this 2>&1 + LANG=C $DIFF $WORK_FILE_BASE.fulldump.other $WORK_FILE_BASE.fulldump.this > $WORK_FILE_BASE.fulldump.diff + + if [ -s $WORK_FILE_BASE.fulldump.diff ]; then + ELF_DIFF_SIZE=$(ls -n $WORK_FILE_BASE.fulldump.diff | awk '{print $5}') + ELF_MSG=$($PRINTF "%8d" $ELF_DIFF_SIZE) + if [[ "$ACCEPTED_ELF_DIFF" != *"$BIN_FILE"* ]]; then + DIFF_ELF=true + if [[ "$KNOWN_ELF_DIFF" != *"$BIN_FILE"* ]]; then + ELF_MSG="*$ELF_MSG*" + REGRESSIONS=true + else + ELF_MSG=" $ELF_MSG " + fi + else + ELF_MSG="($ELF_MSG)" + DIFF_ELF= + fi + else + ELF_MSG=" " + DIFF_ELF= + if [[ "$KNOWN_DEP_DIFF $ACCEPTED_DEP_DIFF" = *"$BIN_FILE"* ]]; then + ELF_MSG=" ! " + fi + fi + fi + + # Compare disassemble output + if [ -n "$DIS_CMD" ] && [ -z "$SKIP_DIS_DIFF" ]; then + if [ -z "$DIS_DIFF_FILTER" ]; then + DIS_DIFF_FILTER="$CAT" + fi + $DIS_CMD $OTHER_FILE | $GREP -v $NAME | $DIS_DIFF_FILTER > $WORK_FILE_BASE.dis.other 2>&1 + $DIS_CMD $THIS_FILE | $GREP -v $NAME | $DIS_DIFF_FILTER > $WORK_FILE_BASE.dis.this 2>&1 + + LANG=C $DIFF $WORK_FILE_BASE.dis.other $WORK_FILE_BASE.dis.this > $WORK_FILE_BASE.dis.diff + + if [ -s $WORK_FILE_BASE.dis.diff ]; then + DIS_DIFF_SIZE=$(ls -n $WORK_FILE_BASE.dis.diff | awk '{print $5}') + DIS_MSG=$($PRINTF "%8d" $DIS_DIFF_SIZE) + if [[ "$ACCEPTED_DIS_DIFF" != *"$BIN_FILE"* ]]; then + DIFF_DIS=true + if [[ "$KNOWN_DIS_DIFF" != *"$BIN_FILE"* ]]; then + DIS_MSG="*$DIS_MSG*" + REGRESSIONS=true + else + DIS_MSG=" $DIS_MSG " + fi + else + DIS_MSG="($DIS_MSG)" + DIFF_DIS= + fi + else + DIS_MSG=" " + DIFF_DIS= + if [[ "$KNOWN_DEP_DIFF $ACCEPTED_DEP_DIFF" = *"$BIN_FILE"* ]]; then + DIS_MSG=" ! " + fi + fi + fi + + + if [ -n "$DIFF_BIN$DIFF_SIZE$DIFF_SYM$DIFF_DEP$DIFF_ELF$DIFF_DIS" ] || [ -n "$VERBOSE" ]; then + if [ -n "$BIN_MSG" ]; then echo -n "$BIN_MSG:"; fi + if [ -n "$SIZE_MSG" ]; then echo -n "$SIZE_MSG:"; fi + if [ -n "$SYM_MSG" ]; then echo -n "$SYM_MSG:"; fi + if [ -n "$DEP_MSG" ]; then echo -n "$DEP_MSG:"; fi + if [ -n "$ELF_MSG" ]; then echo -n "$ELF_MSG:"; fi + if [ -n "$DIS_MSG" ]; then echo -n "$DIS_MSG:"; fi + echo " $BIN_FILE" + if [ "$SHOW_DIFFS" = "true" ]; then + if [ -s "$WORK_FILE_BASE.symbols.diff" ]; then + echo "Symbols diff:" + $CAT $WORK_FILE_BASE.symbols.diff + fi + if [ -s "$WORK_FILE_BASE.deps.diff" ]; then + echo "Deps diff:" + $CAT $WORK_FILE_BASE.deps.diff + fi + if [ -s "$WORK_FILE_BASE.fulldump.diff" ]; then + echo "Fulldump diff:" + $CAT $WORK_FILE_BASE.fulldump.diff + fi + if [ -s "$WORK_FILE_BASE.dis.diff" ]; then + echo "Disassembly diff:" + $CAT $WORK_FILE_BASE.dis.diff + fi + fi + return 1 + fi + return 0 +} + +########################################################################################## +# Print binary diff header + +print_binary_diff_header() { + if [ -z "$SKIP_BIN_DIFF" ]; then echo -n " Binary :"; fi + if [ -z "$SKIP_SIZE_DIFF" ]; then echo -n " Size :"; fi + if [ -z "$SKIP_SYM_DIFF" ]; then echo -n " Symbols :"; fi + if [ -z "$SKIP_DEP_DIFF" ]; then echo -n " Deps :"; fi + if [ -z "$SKIP_FULLDUMP_DIFF" ]; then echo -n " Fulldump :"; fi + if [ -z "$SKIP_DIS_DIFF" ]; then echo -n " Disass :"; fi + echo +} + +########################################################################################## +# Compare all libraries + +compare_all_libs() { + THIS_DIR=$1 + OTHER_DIR=$2 + WORK_DIR=$3 + + LIBS=$(cd $THIS_DIR && $FIND . -type f \( -name 'lib*.so' -o -name '*.dylib' -o -name '*.dll' \) | $SORT | $FILTER) + + if [ -n "$LIBS" ]; then + echo Libraries... + print_binary_diff_header + for l in $LIBS; do + if [ -f "$OTHER_DIR/$l" ]; then + compare_bin_file $THIS_DIR $OTHER_DIR $WORK_DIR $l + if [ "$?" != "0" ]; then + return_value=1 + fi + fi + done + fi + + return $return_value +} + +########################################################################################## +# Compare all executables + +compare_all_execs() { + THIS_DIR=$1 + OTHER_DIR=$2 + WORK_DIR=$3 + + if [ "$OPENJDK_TARGET_OS" = "windows" ]; then + EXECS=$(cd $THIS_DIR && $FIND . -type f -name '*.exe' | $SORT | $FILTER) + else + EXECS=$(cd $THIS_DIR && $FIND . -name db -prune -o -type f -perm -100 \! \ + \( -name '*.so' -o -name '*.dylib' -o -name '*.dll' -o -name '*.cgi' \ + -o -name '*.jar' -o -name '*.diz' -o -name 'jcontrol' -o -name '*.properties' \ + -o -name '*.data' -o -name '*.bfc' -o -name '*.src' -o -name '*.txt' \ + -o -name '*.cfg' -o -name 'meta-index' -o -name '*.properties.ja' \ + -o -name 'classlist' \) | $SORT | $FILTER) + fi + + if [ -n "$EXECS" ]; then + echo Executables... + print_binary_diff_header + for e in $EXECS; do + if [ -f "$OTHER_DIR/$e" ]; then + compare_bin_file $THIS_DIR $OTHER_DIR $WORK_DIR $e + if [ "$?" != "0" ]; then + return_value=1 + fi + fi + done + fi + + return $return_value +} + +########################################################################################## +# Initiate configuration + +COMPARE_ROOT=/tmp/cimages.$USER +$MKDIR -p $COMPARE_ROOT +if [ "$OPENJDK_TARGET_OS" = "windows" ]; then + if [ "$(uname -o)" = "Cygwin" ]; then + COMPARE_ROOT=$(cygpath -msa $COMPARE_ROOT) + fi +fi + +THIS="$( cd "$( dirname "$0" )" && pwd )" +echo "$THIS" +THIS_SCRIPT="$0" + +if [ -z "$1" ] || [ "$1" = "-h" ] || [ "$1" = "-?" ] || [ "$1" = "/h" ] || [ "$1" = "/?" ] || [ "$1" = "-help" ] || [ "$1" = "--help" ]; then + echo "bash ./compare.sh [OPTIONS] [FILTER]" + echo "" + echo "-all Compare all files in all known ways" + echo "-names Compare the file names and directory structure" + echo "-perms Compare the permission bits on all files and directories" + echo "-types Compare the output of the file command on all files" + echo "-general Compare the files not convered by the specialized comparisons" + echo "-zips Compare the contents of all zip files" + echo "-jars Compare the contents of all jar files" + echo "-libs Compare all native libraries" + echo "-execs Compare all executables" + echo "-v Verbose output, does not hide known differences" + echo "-vv More verbose output, shows diff output of all comparisons" + echo "-o [OTHER] Compare with build in other directory. Will default to the old build directory" + echo "" + echo "[FILTER] List filenames in the image to compare, works for jars, zips, libs and execs" + echo "Example:" + echo "bash ./common/bin/compareimages.sh CodePointIM.jar" + exit 10 +fi + +CMP_NAMES=false +CMP_PERMS=false +CMP_TYPES=false +CMP_GENERAL=false +CMP_ZIPS=false +CMP_JARS=false +CMP_LIBS=false +CMP_EXECS=false + +while [ -n "$1" ]; do + case "$1" in + -v) + VERBOSE=true + ;; + -vv) + VERBOSE=true + SHOW_DIFFS=true + ;; + -o) + OTHER="$2" + shift + ;; + -all) + CMP_NAMES=true + if [ "$OPENJDK_TARGET_OS" != "windows" ]; then + CMP_PERMS=true + fi + CMP_TYPES=true + CMP_GENERAL=true + CMP_ZIPS=true + CMP_JARS=true + CMP_LIBS=true + CMP_EXECS=true + ;; + -names) + CMP_NAMES=true + ;; + -perms) + CMP_PERMS=true + ;; + -types) + CMP_TYPES=true + ;; + -general) + CMP_GENERAL=true + ;; + -zips) + CMP_ZIPS=true + ;; + -jars) + CMP_JARS=true + ;; + -libs) + CMP_LIBS=true + ;; + -execs) + CMP_EXECS=true + ;; + *) + CMP_NAMES=false + CMP_PERMS=false + CMP_TYPES=false + CMP_ZIPS=true + CMP_JARS=true + CMP_LIBS=true + CMP_EXECS=true + + if [ -z "$FILTER" ]; then + FILTER="$GREP" + fi + FILTER="$FILTER -e $1" + ;; + esac + shift +done + +if [ "$CMP_NAMES" = "false" ] && [ "$CMP_TYPES" = "false" ] && [ "$CMP_PERMS" = "false" ] && [ "$CMP_GENERAL" = "false" ] && [ "$CMP_ZIPS" = "false" ] && [ "$CMP_JARS" = "false" ] && [ "$CMP_LIBS" = "false" ] && [ "$CMP_EXECS" = "false" ]; then + CMP_NAMES=true + CMP_PERMS=true + CMP_TYPES=true + CMP_GENERAL=true + CMP_ZIPS=true + CMP_JARS=true + CMP_LIBS=true + CMP_EXECS=true +fi + +if [ -z "$FILTER" ]; then + FILTER="$CAT" +fi + +if [ -z "$OTHER" ]; then + OTHER="$THIS/../$LEGACY_BUILD_DIR" + if [ -d "$OTHER" ]; then + OTHER="$( cd "$OTHER" && pwd )" + else + echo "Default old build directory does not exist:" + echo "$OTHER" + exit 1 + fi + echo "Comparing to default old build:" + echo "$OTHER" + echo +else + if [ ! -d "$OTHER" ]; then + echo "Other build directory does not exist:" + echo "$OTHER" + exit 1 + fi + OTHER="$( cd "$OTHER" && pwd )" + echo "Comparing to:" + echo "$OTHER" + echo +fi + + +# Figure out the layout of the this build. Which kinds of images have been produced +if [ -d "$THIS/deploy/j2sdk-image" ]; then + THIS_J2SDK="$THIS/deploy/j2sdk-image" + THIS_J2RE="$THIS/deploy/j2re-image" + echo "Comparing deploy images" +elif [ -d "$THIS/images/j2sdk-image" ]; then + THIS_J2SDK="$THIS/images/j2sdk-image" + THIS_J2RE="$THIS/images/j2re-image" +fi +if [ -d "$THIS/images/j2sdk-overlay-image" ]; then + THIS_J2SDK_OVERLAY="$THIS/images/j2sdk-overlay-image" + THIS_J2RE_OVERLAY="$THIS/images/j2re-overlay-image" +fi + +if [ -d "$THIS/images/j2sdk-bundle" ]; then + THIS_J2SDK_BUNDLE="$THIS/images/j2sdk-bundle" + THIS_J2RE_BUNDLE="$THIS/images/j2re-bundle" +fi + +# Figure out the layout of the other build (old or new, normal or overlay image) +if [ -d "$OTHER/j2sdk-image" ]; then + if [ -f "$OTHER/j2sdk-image/LICENSE" ]; then + OTHER_J2SDK="$OTHER/j2sdk-image" + OTHER_J2RE="$OTHER/j2re-image" + else + OTHER_J2SDK_OVERLAY="$OTHER/j2sdk-image" + OTHER_J2RE_OVERLAY="$OTHER/j2re-image" + fi + +fi + +if [ -d "$OTHER/j2sdk-bundle" ]; then + OTHER_J2SDK_BUNDLE="$OTHER/j2sdk-bundle" + OTHER_J2RE_BUNDLE="$OTHER/j2re-bundle" +elif [ -d "$OTHER/images/j2sdk-bundle" ]; then + OTHER_J2SDK_BUNDLE="$OTHER/images/j2sdk-bundle" + OTHER_J2RE_BUNDLE="$OTHER/images/j2re-bundle" +fi + +if [ -z "$THIS_J2SDK" ] || [ -z "$THIS_J2RE" ]; then + if [ -z "$THIS_J2SDK_OVERLAY" ]; then + echo "Cannot locate images for this build. Are you sure you have run 'make images'?" + exit 1 + fi +fi + +if [ -z "$OTHER_J2SDK" ] && [ -n "$OTHER_J2SDK_OVERLAY" ] && [ -z "$THIS_J2SDK_OVERLAY" ]; then + echo "OTHER build only has an overlay image while this build does not. Nothing to compare!" + exit 1 +fi + +if [ -z "$THIS_J2SDK_BUNDLE" ] && [ -n "$OTHER_J2SDK_BUNDLE" ]; then + echo "WARNING! OTHER build has bundles built while this build does not." + echo "Skipping bundle compare!" +fi + +########################################################################################## +# Do the work + +if [ "$CMP_NAMES" = "true" ]; then + if [ -n "$THIS_J2SDK" ] && [ -n "$OTHER_J2SDK" ]; then + echo -n "J2SDK " + compare_dirs $THIS_J2SDK $OTHER_J2SDK $COMPARE_ROOT/j2sdk + echo -n "J2RE " + compare_dirs $THIS_J2RE $OTHER_J2RE $COMPARE_ROOT/j2re + + echo -n "J2SDK " + compare_files $THIS_J2SDK $OTHER_J2SDK $COMPARE_ROOT/j2sdk + echo -n "J2RE " + compare_files $THIS_J2RE $OTHER_J2RE $COMPARE_ROOT/j2re + fi + if [ -n "$THIS_J2SDK_OVERLAY" ] && [ -n "$OTHER_J2SDK_OVERLAY" ]; then + echo -n "J2SDK Overlay " + compare_dirs $THIS_J2SDK_OVERLAY $OTHER_J2SDK_OVERLAY $COMPARE_ROOT/j2sdk-overlay + echo -n "J2RE Overlay " + compare_dirs $THIS_J2RE_OVERLAY $OTHER_J2RE_OVERLAY $COMPARE_ROOT/j2re-overlay + + echo -n "J2SDK Overlay " + compare_files $THIS_J2SDK_OVERLAY $OTHER_J2SDK_OVERLAY $COMPARE_ROOT/j2sdk-overlay + echo -n "J2RE Overlay " + compare_files $THIS_J2RE_OVERLAY $OTHER_J2RE_OVERLAY $COMPARE_ROOT/j2re-overlay + fi + if [ -n "$THIS_J2SDK_BUNDLE" ] && [ -n "$OTHER_J2SDK_BUNDLE" ]; then + echo -n "J2SDK Bundle " + compare_dirs $THIS_J2SDK_BUNDLE $OTHER_J2SDK_BUNDLE $COMPARE_ROOT/j2sdk-bundle + echo -n "J2RE Bundle " + compare_dirs $THIS_J2RE_BUNDLE $OTHER_J2RE_BUNDLE $COMPARE_ROOT/j2re-bundle + + echo -n "J2SDK Bundle " + compare_files $THIS_J2SDK_BUNDLE $OTHER_J2SDK_BUNDLE $COMPARE_ROOT/j2sdk-bundle + echo -n "J2RE Bundle " + compare_files $THIS_J2RE_BUNDLE $OTHER_J2RE_BUNDLE $COMPARE_ROOT/j2re-bundle + fi +fi + +if [ "$CMP_PERMS" = "true" ]; then + if [ -n "$THIS_J2SDK" ] && [ -n "$OTHER_J2SDK" ]; then + echo -n "J2SDK " + compare_permissions $THIS_J2SDK $OTHER_J2SDK $COMPARE_ROOT/j2sdk + echo -n "J2RE " + compare_permissions $THIS_J2RE $OTHER_J2RE $COMPARE_ROOT/j2re + fi + if [ -n "$THIS_J2SDK_OVERLAY" ] && [ -n "$OTHER_J2SDK_OVERLAY" ]; then + echo -n "J2SDK Overlay " + compare_permissions $THIS_J2SDK_OVERLAY $OTHER_J2SDK_OVERLAY $COMPARE_ROOT/j2sdk-overlay + echo -n "J2RE Overlay " + compare_permissions $THIS_J2RE_OVERLAY $OTHER_J2RE_OVERLAY $COMPARE_ROOT/j2re-overlay + fi + if [ -n "$THIS_J2SDK_BUNDLE" ] && [ -n "$OTHER_J2SDK_BUNDLE" ]; then + echo -n "J2SDK Bundle " + compare_permissions $THIS_J2SDK_BUNDLE $OTHER_J2SDK_BUNDLE $COMPARE_ROOT/j2sdk-bundle + echo -n "J2RE Bundle " + compare_permissions $THIS_J2RE_BUNDLE $OTHER_J2RE_BUNDLE $COMPARE_ROOT/j2re-bundle + fi +fi + +if [ "$CMP_TYPES" = "true" ]; then + if [ -n "$THIS_J2SDK" ] && [ -n "$OTHER_J2SDK" ]; then + echo -n "J2SDK " + compare_file_types $THIS_J2SDK $OTHER_J2SDK $COMPARE_ROOT/j2sdk + echo -n "J2RE " + compare_file_types $THIS_J2RE $OTHER_J2RE $COMPARE_ROOT/j2re + fi + if [ -n "$THIS_J2SDK_OVERLAY" ] && [ -n "$OTHER_J2SDK_OVERLAY" ]; then + echo -n "J2SDK Overlay " + compare_file_types $THIS_J2SDK_OVERLAY $OTHER_J2SDK_OVERLAY $COMPARE_ROOT/j2sdk-overlay + echo -n "J2RE Overlay " + compare_file_types $THIS_J2RE_OVERLAY $OTHER_J2RE_OVERLAY $COMPARE_ROOT/j2re-overlay + fi + if [ -n "$THIS_J2SDK_BUNDLE" ] && [ -n "$OTHER_J2SDK_BUNDLE" ]; then + echo -n "J2SDK Bundle " + compare_file_types $THIS_J2SDK_BUNDLE $OTHER_J2SDK_BUNDLE $COMPARE_ROOT/j2sdk-bundle + echo -n "J2RE Bundle " + compare_file_types $THIS_J2RE_BUNDLE $OTHER_J2RE_BUNDLE $COMPARE_ROOT/j2re-bundle + fi +fi + +if [ "$CMP_GENERAL" = "true" ]; then + if [ -n "$THIS_J2SDK" ] && [ -n "$OTHER_J2SDK" ]; then + echo -n "J2SDK " + compare_general_files $THIS_J2SDK $OTHER_J2SDK $COMPARE_ROOT/j2sdk + echo -n "J2RE " + compare_general_files $THIS_J2RE $OTHER_J2RE $COMPARE_ROOT/j2re + fi + if [ -n "$THIS_J2SDK_OVERLAY" ] && [ -n "$OTHER_J2SDK_OVERLAY" ]; then + echo -n "J2SDK Overlay " + compare_general_files $THIS_J2SDK_OVERLAY $OTHER_J2SDK_OVERLAY $COMPARE_ROOT/j2sdk-overlay + echo -n "J2RE Overlay " + compare_general_files $THIS_J2RE_OVERLAY $OTHER_J2RE_OVERLAY $COMPARE_ROOT/j2re-overlay + fi + if [ -n "$THIS_J2SDK_BUNDLE" ] && [ -n "$OTHER_J2SDK_BUNDLE" ]; then + echo -n "J2SDK Bundle " + compare_general_files $THIS_J2SDK_BUNDLE $OTHER_J2SDK_BUNDLE $COMPARE_ROOT/j2sdk-bundle + echo -n "J2RE Bundle " + compare_general_files $THIS_J2RE_BUNDLE $OTHER_J2RE_BUNDLE $COMPARE_ROOT/j2re-bundle + fi +fi + +if [ "$CMP_ZIPS" = "true" ]; then + if [ -n "$THIS_J2SDK" ] && [ -n "$OTHER_J2SDK" ]; then + compare_all_zip_files $THIS_J2SDK $OTHER_J2SDK $COMPARE_ROOT/j2sdk + fi +fi + +if [ "$CMP_JARS" = "true" ]; then + if [ -n "$THIS_J2SDK" ] && [ -n "$OTHER_J2SDK" ]; then + compare_all_jar_files $THIS_J2SDK $OTHER_J2SDK $COMPARE_ROOT/j2sdk + fi +fi + +if [ "$CMP_LIBS" = "true" ]; then + if [ -n "$THIS_J2SDK" ] && [ -n "$OTHER_J2SDK" ]; then + compare_all_libs $THIS_J2SDK $OTHER_J2SDK $COMPARE_ROOT/j2sdk + fi + if [ -n "$THIS_J2SDK_OVERLAY" ] && [ -n "$OTHER_J2SDK_OVERLAY" ]; then + echo -n "Bundle " + compare_all_libs $THIS_J2SDK_OVERLAY $OTHER_J2SDK_OVERLAY $COMPARE_ROOT/j2sdk-overlay + fi +fi + +if [ "$CMP_EXECS" = "true" ]; then + if [ -n "$THIS_J2SDK" ] && [ -n "$OTHER_J2SDK" ]; then + compare_all_execs $THIS_J2SDK $OTHER_J2SDK $COMPARE_ROOT/j2sdk + fi + if [ -n "$THIS_J2SDK_OVERLAY" ] && [ -n "$OTHER_J2SDK_OVERLAY" ]; then + echo -n "Overlay " + compare_all_execs $THIS_J2SDK_OVERLAY $OTHER_J2SDK_OVERLAY $COMPARE_ROOT/j2sdk-overlay + fi +fi + +echo + +if [ -n "$REGRESSIONS" ]; then + echo "REGRESSIONS FOUND!" + echo + exit 1 +else + echo "No regressions found" + echo + exit 0 +fi diff --git a/common/bin/compare_exceptions.sh.incl b/common/bin/compare_exceptions.sh.incl new file mode 100644 index 00000000000..c9fc3cc6c86 --- /dev/null +++ b/common/bin/compare_exceptions.sh.incl @@ -0,0 +1,957 @@ +#!/bin/bash +# +# Copyright (c) 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. +# + +# This script is not to be run as stand-alone, it should be included from +# compare.sh. + +########################################################################################## +# Check that we are run via inclusion from compare.sh and not as stand-alone. +if [ -z "$COMPARE_EXCEPTIONS_INCLUDE" ]; then + echo "Error: This script should not be run as stand-alone. It is included by compare.sh" + exit 1 +fi + +########################################################################################## +# Diff exceptions + +if [ "$OPENJDK_TARGET_OS" = "linux" ] && [ "$OPENJDK_TARGET_CPU" = "x86" ]; then + +STRIP_BEFORE_COMPARE=" +./demo/jvmti/compiledMethodLoad/lib/libcompiledMethodLoad.so +./demo/jvmti/gctest/lib/libgctest.so +./demo/jvmti/heapTracker/lib/libheapTracker.so +./demo/jvmti/heapViewer/lib/libheapViewer.so +./demo/jvmti/hprof/lib/libhprof.so +./demo/jvmti/minst/lib/libminst.so +./demo/jvmti/mtrace/lib/libmtrace.so +./demo/jvmti/versionCheck/lib/libversionCheck.so +./demo/jvmti/waiters/lib/libwaiters.so +" + +ACCEPTED_BIN_DIFF=" +./demo/jvmti/compiledMethodLoad/lib/libcompiledMethodLoad.so +./demo/jvmti/gctest/lib/libgctest.so +./demo/jvmti/heapTracker/lib/libheapTracker.so +./demo/jvmti/heapViewer/lib/libheapViewer.so +./demo/jvmti/hprof/lib/libhprof.so +./demo/jvmti/minst/lib/libminst.so +./demo/jvmti/mtrace/lib/libmtrace.so +./demo/jvmti/versionCheck/lib/libversionCheck.so +./demo/jvmti/waiters/lib/libwaiters.so +./jre/lib/i386/client/libjvm.so +./jre/lib/i386/libattach.so +./jre/lib/i386/libdt_socket.so +./jre/lib/i386/libhprof.so +./jre/lib/i386/libinstrument.so +./jre/lib/i386/libjava_crw_demo.so +./jre/lib/i386/libjsdt.so +./jre/lib/i386/libmanagement.so +./jre/lib/i386/libnpt.so +./jre/lib/i386/libverify.so +./jre/lib/i386/server/libjvm.so +./bin/appletviewer +./bin/extcheck +./bin/idlj +./bin/jar +./bin/jarsigner +./bin/java +./bin/javac +./bin/javadoc +./bin/javah +./bin/javap +./bin/jcmd +./bin/jconsole +./bin/jdb +./bin/jhat +./bin/jinfo +./bin/jmap +./bin/jps +./bin/jrunscript +./bin/jsadebugd +./bin/jstack +./bin/jstat +./bin/jstatd +./bin/keytool +./bin/native2ascii +./bin/orbd +./bin/pack200 +./bin/policytool +./bin/rmic +./bin/rmid +./bin/rmiregistry +./bin/schemagen +./bin/serialver +./bin/servertool +./bin/tnameserv +./bin/wsgen +./bin/wsimport +./bin/xjc +./jre/bin/java +./jre/bin/keytool +./jre/bin/orbd +./jre/bin/pack200 +./jre/bin/policytool +./jre/bin/rmid +./jre/bin/rmiregistry +./jre/bin/servertool +./jre/bin/tnameserv +" + +fi + +if [ "$OPENJDK_TARGET_OS" = "linux" ] && [ "$OPENJDK_TARGET_CPU" = "x86_64" ]; then + +STRIP_BEFORE_COMPARE=" +./demo/jvmti/compiledMethodLoad/lib/libcompiledMethodLoad.so +./demo/jvmti/gctest/lib/libgctest.so +./demo/jvmti/heapTracker/lib/libheapTracker.so +./demo/jvmti/heapViewer/lib/libheapViewer.so +./demo/jvmti/hprof/lib/libhprof.so +./demo/jvmti/minst/lib/libminst.so +./demo/jvmti/mtrace/lib/libmtrace.so +./demo/jvmti/versionCheck/lib/libversionCheck.so +./demo/jvmti/waiters/lib/libwaiters.so +" + +ACCEPTED_BIN_DIFF=" +./demo/jvmti/compiledMethodLoad/lib/libcompiledMethodLoad.so +./demo/jvmti/gctest/lib/libgctest.so +./demo/jvmti/heapTracker/lib/libheapTracker.so +./demo/jvmti/heapViewer/lib/libheapViewer.so +./demo/jvmti/hprof/lib/libhprof.so +./demo/jvmti/minst/lib/libminst.so +./demo/jvmti/mtrace/lib/libmtrace.so +./demo/jvmti/versionCheck/lib/libversionCheck.so +./demo/jvmti/waiters/lib/libwaiters.so +./jre/lib/amd64/libattach.so +./jre/lib/amd64/libdt_socket.so +./jre/lib/amd64/libhprof.so +./jre/lib/amd64/libinstrument.so +./jre/lib/amd64/libjava_crw_demo.so +./jre/lib/amd64/libjsdt.so +./jre/lib/amd64/libjsig.so +./jre/lib/amd64/libmanagement.so +./jre/lib/amd64/libnpt.so +./jre/lib/amd64/libsaproc.so +./jre/lib/amd64/libverify.so +./jre/lib/amd64/server/libjsig.so +./jre/lib/amd64/server/libjvm.so +./bin/appletviewer +./bin/extcheck +./bin/idlj +./bin/jar +./bin/jarsigner +./bin/java +./bin/javac +./bin/javadoc +./bin/javah +./bin/javap +./bin/jcmd +./bin/jconsole +./bin/jdb +./bin/jhat +./bin/jinfo +./bin/jmap +./bin/jps +./bin/jrunscript +./bin/jsadebugd +./bin/jstack +./bin/jstat +./bin/jstatd +./bin/keytool +./bin/native2ascii +./bin/orbd +./bin/pack200 +./bin/policytool +./bin/rmic +./bin/rmid +./bin/rmiregistry +./bin/schemagen +./bin/serialver +./bin/servertool +./bin/tnameserv +./bin/wsgen +./bin/wsimport +./bin/xjc +./jre/bin/java +./jre/bin/keytool +./jre/bin/orbd +./jre/bin/pack200 +./jre/bin/policytool +./jre/bin/rmid +./jre/bin/rmiregistry +./jre/bin/servertool +./jre/bin/tnameserv +" + +fi + +if [ "$OPENJDK_TARGET_OS" = "solaris" ] && [ "$OPENJDK_TARGET_CPU" = "x86" ]; then + +STRIP_BEFORE_COMPARE=" +./demo/jni/Poller/lib/libPoller.so +./demo/jvmti/compiledMethodLoad/lib/libcompiledMethodLoad.so +./demo/jvmti/gctest/lib/libgctest.so +./demo/jvmti/heapTracker/lib/libheapTracker.so +./demo/jvmti/heapViewer/lib/libheapViewer.so +./demo/jvmti/hprof/lib/libhprof.so +./demo/jvmti/minst/lib/libminst.so +./demo/jvmti/mtrace/lib/libmtrace.so +./demo/jvmti/versionCheck/lib/libversionCheck.so +./demo/jvmti/waiters/lib/libwaiters.so +./jre/lib/i386/jexec +" + +SORT_SYMBOLS=" +./jre/lib/i386/client/libjvm.so +./jre/lib/i386/libsaproc.so +./jre/lib/i386/server/libjvm.so +" + +SKIP_BIN_DIFF="true" + +ACCEPTED_SMALL_SIZE_DIFF=" +./demo/jni/Poller/lib/libPoller.so +./demo/jvmti/compiledMethodLoad/lib/libcompiledMethodLoad.so +./demo/jvmti/gctest/lib/libgctest.so +./demo/jvmti/heapTracker/lib/libheapTracker.so +./demo/jvmti/heapViewer/lib/libheapViewer.so +./demo/jvmti/hprof/lib/libhprof.so +./demo/jvmti/minst/lib/libminst.so +./demo/jvmti/mtrace/lib/libmtrace.so +./demo/jvmti/versionCheck/lib/libversionCheck.so +./demo/jvmti/waiters/lib/libwaiters.so +./jre/lib/i386/client/libjvm.so +./jre/lib/i386/jli/libjli.so +./jre/lib/i386/libJdbcOdbc.so +./jre/lib/i386/libattach.so +./jre/lib/i386/libawt.so +./jre/lib/i386/libawt_headless.so +./jre/lib/i386/libawt_xawt.so +./jre/lib/i386/libdcpr.so +./jre/lib/i386/libdt_socket.so +./jre/lib/i386/libfontmanager.so +./jre/lib/i386/libhprof.so +./jre/lib/i386/libinstrument.so +./jre/lib/i386/libj2gss.so +./jre/lib/i386/libj2pcsc.so +./jre/lib/i386/libj2pkcs11.so +./jre/lib/i386/libj2ucrypto.so +./jre/lib/i386/libjaas_unix.so +./jre/lib/i386/libjava.so +./jre/lib/i386/libjava_crw_demo.so +./jre/lib/i386/libjawt.so +./jre/lib/i386/libjdwp.so +./jre/lib/i386/libjfr.so +./jre/lib/i386/libjpeg.so +./jre/lib/i386/libjsdt.so +./jre/lib/i386/libjsound.so +./jre/lib/i386/libkcms.so +./jre/lib/i386/liblcms.so +./jre/lib/i386/libmanagement.so +./jre/lib/i386/libmlib_image.so +./jre/lib/i386/libnet.so +./jre/lib/i386/libnio.so +./jre/lib/i386/libnpt.so +./jre/lib/i386/libsctp.so +./jre/lib/i386/libsplashscreen.so +./jre/lib/i386/libsunec.so +./jre/lib/i386/libsunwjdga.so +./jre/lib/i386/libt2k.so +./jre/lib/i386/libunpack.so +./jre/lib/i386/libverify.so +./jre/lib/i386/libzip.so +./jre/lib/i386/libdeploy.so +./jre/lib/i386/libjavaplugin.so +./jre/lib/i386/libjavaplugin_jni.so +./jre/lib/i386/libjavaplugin_nscp.so +./jre/lib/i386/libjavaplugin_oji.so +./jre/lib/i386/libnpjp2.so +./jre/plugin/i386/ns4/libjavaplugin.so +./jre/plugin/i386/ns7/libjavaplugin_oji.so +./jre/lib/i386/server/libjvm.so +./bin/appletviewer +./bin/extcheck +./bin/idlj +./bin/jar +./bin/jarsigner +./bin/java +./bin/javac +./bin/javadoc +./bin/javah +./bin/javap +./bin/javaws +./bin/jcmd +./bin/jconsole +./bin/jdb +./bin/jhat +./bin/jinfo +./bin/jmap +./bin/jps +./bin/jrunscript +./bin/jsadebugd +./bin/jstack +./bin/jstat +./bin/jstatd +./bin/keytool +./bin/native2ascii +./bin/orbd +./bin/pack200 +./bin/policytool +./bin/rmic +./bin/rmid +./bin/rmiregistry +./bin/schemagen +./bin/serialver +./bin/servertool +./bin/tnameserv +./bin/unpack200 +./bin/wsgen +./bin/wsimport +./bin/xjc +./jre/bin/java +./jre/bin/java_vm +./jre/bin/javaws +./jre/bin/keytool +./jre/bin/orbd +./jre/bin/pack200 +./jre/bin/policytool +./jre/bin/rmid +./jre/bin/rmiregistry +./jre/bin/servertool +./jre/bin/tnameserv +./jre/bin/unpack200 +./jre/lib/i386/jexec +" + +SKIP_FULLDUMP_DIFF="true" + +# Filter random C++ symbol strings. +DIS_DIFF_FILTER="$SED -e s/\.[a-zA-Z0-9_\$]\{15,15\}//g" + +fi + +if [ "$OPENJDK_TARGET_OS" = "solaris" ] && [ "$OPENJDK_TARGET_CPU" = "x86_64" ]; then + +STRIP_BEFORE_COMPARE=" +./demo/jni/Poller/lib/amd64/libPoller.so +./demo/jvmti/compiledMethodLoad/lib/amd64/libcompiledMethodLoad.so +./demo/jvmti/gctest/lib/amd64/libgctest.so +./demo/jvmti/heapTracker/lib/amd64/libheapTracker.so +./demo/jvmti/heapViewer/lib/amd64/libheapViewer.so +./demo/jvmti/hprof/lib/amd64/libhprof.so +./demo/jvmti/minst/lib/amd64/libminst.so +./demo/jvmti/mtrace/lib/amd64/libmtrace.so +./demo/jvmti/versionCheck/lib/amd64/libversionCheck.so +./demo/jvmti/waiters/lib/amd64/libwaiters.so +" + +SORT_SYMBOLS=" +./jre/lib/amd64/server/libjvm.so +./jre/lib/amd64/libsaproc.so +" + +SKIP_BIN_DIFF="true" + +ACCEPTED_SMALL_SIZE_DIFF=" +./demo/jni/Poller/lib/amd64/libPoller.so +./demo/jvmti/compiledMethodLoad/lib/amd64/libcompiledMethodLoad.so +./demo/jvmti/gctest/lib/amd64/libgctest.so +./demo/jvmti/heapTracker/lib/amd64/libheapTracker.so +./demo/jvmti/heapViewer/lib/amd64/libheapViewer.so +./demo/jvmti/hprof/lib/amd64/libhprof.so +./demo/jvmti/minst/lib/amd64/libminst.so +./demo/jvmti/mtrace/lib/amd64/libmtrace.so +./demo/jvmti/versionCheck/lib/amd64/libversionCheck.so +./demo/jvmti/waiters/lib/amd64/libwaiters.so +./jre/lib/amd64/jli/libjli.so +./jre/lib/amd64/libJdbcOdbc.so +./jre/lib/amd64/libattach.so +./jre/lib/amd64/libawt.so +./jre/lib/amd64/libawt_headless.so +./jre/lib/amd64/libawt_xawt.so +./jre/lib/amd64/libdcpr.so +./jre/lib/amd64/libdt_socket.so +./jre/lib/amd64/libfontmanager.so +./jre/lib/amd64/libhprof.so +./jre/lib/amd64/libinstrument.so +./jre/lib/amd64/libj2gss.so +./jre/lib/amd64/libj2pcsc.so +./jre/lib/amd64/libj2pkcs11.so +./jre/lib/amd64/libj2ucrypto.so +./jre/lib/amd64/libjaas_unix.so +./jre/lib/amd64/libjava.so +./jre/lib/amd64/libjava_crw_demo.so +./jre/lib/amd64/libjawt.so +./jre/lib/amd64/libjdwp.so +./jre/lib/amd64/libjfr.so +./jre/lib/amd64/libjpeg.so +./jre/lib/amd64/libjsdt.so +./jre/lib/amd64/libjsound.so +./jre/lib/amd64/libkcms.so +./jre/lib/amd64/liblcms.so +./jre/lib/amd64/libmanagement.so +./jre/lib/amd64/libmlib_image.so +./jre/lib/amd64/libnet.so +./jre/lib/amd64/libnio.so +./jre/lib/amd64/libnpt.so +./jre/lib/amd64/libsctp.so +./jre/lib/amd64/libsplashscreen.so +./jre/lib/amd64/libsunec.so +./jre/lib/amd64/libsunwjdga.so +./jre/lib/amd64/libt2k.so +./jre/lib/amd64/libunpack.so +./jre/lib/amd64/libverify.so +./jre/lib/amd64/libzip.so +./jre/lib/amd64/server/64/libjvm_db.so +./jre/lib/amd64/server/64/libjvm_dtrace.so +./bin/amd64/appletviewer +./bin/amd64/extcheck +./bin/amd64/idlj +./bin/amd64/jar +./bin/amd64/jarsigner +./bin/amd64/java +./bin/amd64/javac +./bin/amd64/javadoc +./bin/amd64/javah +./bin/amd64/javap +./bin/amd64/jcmd +./bin/amd64/jconsole +./bin/amd64/jdb +./bin/amd64/jhat +./bin/amd64/jinfo +./bin/amd64/jmap +./bin/amd64/jps +./bin/amd64/jrunscript +./bin/amd64/jsadebugd +./bin/amd64/jstack +./bin/amd64/jstat +./bin/amd64/jstatd +./bin/amd64/keytool +./bin/amd64/native2ascii +./bin/amd64/orbd +./bin/amd64/pack200 +./bin/amd64/policytool +./bin/amd64/rmic +./bin/amd64/rmid +./bin/amd64/rmiregistry +./bin/amd64/schemagen +./bin/amd64/serialver +./bin/amd64/servertool +./bin/amd64/tnameserv +./bin/amd64/unpack200 +./bin/amd64/wsgen +./bin/amd64/wsimport +./bin/amd64/xjc +./jre/bin/amd64/java +./jre/bin/amd64/keytool +./jre/bin/amd64/orbd +./jre/bin/amd64/pack200 +./jre/bin/amd64/policytool +./jre/bin/amd64/rmid +./jre/bin/amd64/rmiregistry +./jre/bin/amd64/servertool +./jre/bin/amd64/tnameserv +./jre/bin/amd64/unpack200 +./jre/lib/amd64/jexec +" + +SKIP_FULLDUMP_DIFF="true" + +# Filter random C++ symbol strings. +DIS_DIFF_FILTER="$SED -e s/\.[a-zA-Z0-9_\$]\{15,15\}//g" + +fi + +if [ "$OPENJDK_TARGET_OS" = "solaris" ] && [ "$OPENJDK_TARGET_CPU" = "sparc" ]; then + +STRIP_BEFORE_COMPARE=" +./demo/jni/Poller/lib/libPoller.so +./demo/jvmti/compiledMethodLoad/lib/libcompiledMethodLoad.so +./demo/jvmti/gctest/lib/libgctest.so +./demo/jvmti/heapTracker/lib/libheapTracker.so +./demo/jvmti/heapViewer/lib/libheapViewer.so +./demo/jvmti/hprof/lib/libhprof.so +./demo/jvmti/minst/lib/libminst.so +./demo/jvmti/mtrace/lib/libmtrace.so +./demo/jvmti/versionCheck/lib/libversionCheck.so +./demo/jvmti/waiters/lib/libwaiters.so +./jre/lib/sparc/jexec +" + +SORT_SYMBOLS=" +./demo/jvmti/waiters/lib/libwaiters.so +./jre/lib/sparc/client/64/libjvm_db.so +./jre/lib/sparc/client/64/libjvm_dtrace.so +./jre/lib/sparc/client/libjsig.so +./jre/lib/sparc/client/libjvm.so +./jre/lib/sparc/client/libjvm_db.so +./jre/lib/sparc/client/libjvm_dtrace.so +./jre/lib/sparc/libjsig.so +./jre/lib/sparc/libsaproc.so +./jre/lib/sparc/server/64/libjvm_db.so +./jre/lib/sparc/server/64/libjvm_dtrace.so +./jre/lib/sparc/server/libjsig.so +./jre/lib/sparc/server/libjvm.so +./jre/lib/sparc/server/libjvm_db.so +./jre/lib/sparc/server/libjvm_dtrace.so +" + +SKIP_BIN_DIFF="true" + +ACCEPTED_SMALL_SIZE_DIFF=" +./demo/jni/Poller/lib/libPoller.so +./demo/jvmti/compiledMethodLoad/lib/libcompiledMethodLoad.so +./demo/jvmti/gctest/lib/libgctest.so +./demo/jvmti/heapTracker/lib/libheapTracker.so +./demo/jvmti/heapViewer/lib/libheapViewer.so +./demo/jvmti/hprof/lib/libhprof.so +./demo/jvmti/minst/lib/libminst.so +./demo/jvmti/mtrace/lib/libmtrace.so +./demo/jvmti/versionCheck/lib/libversionCheck.so +./demo/jvmti/waiters/lib/libwaiters.so +./jre/lib/sparc/client/libjvm.so +./jre/lib/sparc/jli/libjli.so +./jre/lib/sparc/libJdbcOdbc.so +./jre/lib/sparc/libattach.so +./jre/lib/sparc/libawt.so +./jre/lib/sparc/libawt_headless.so +./jre/lib/sparc/libawt_xawt.so +./jre/lib/sparc/libdcpr.so +./jre/lib/sparc/libdt_socket.so +./jre/lib/sparc/libfontmanager.so +./jre/lib/sparc/libhprof.so +./jre/lib/sparc/libinstrument.so +./jre/lib/sparc/libj2gss.so +./jre/lib/sparc/libj2pcsc.so +./jre/lib/sparc/libj2pkcs11.so +./jre/lib/sparc/libj2ucrypto.so +./jre/lib/sparc/libjaas_unix.so +./jre/lib/sparc/libjava.so +./jre/lib/sparc/libjava_crw_demo.so +./jre/lib/sparc/libjawt.so +./jre/lib/sparc/libjdwp.so +./jre/lib/sparc/libjfr.so +./jre/lib/sparc/libjpeg.so +./jre/lib/sparc/libjsdt.so +./jre/lib/sparc/libjsound.so +./jre/lib/sparc/libkcms.so +./jre/lib/sparc/liblcms.so +./jre/lib/sparc/libmanagement.so +./jre/lib/sparc/libmlib_image.so +./jre/lib/sparc/libmlib_image_v.so +./jre/lib/sparc/libnet.so +./jre/lib/sparc/libnio.so +./jre/lib/sparc/libnpt.so +./jre/lib/sparc/libsctp.so +./jre/lib/sparc/libsplashscreen.so +./jre/lib/sparc/libsunec.so +./jre/lib/sparc/libsunwjdga.so +./jre/lib/sparc/libt2k.so +./jre/lib/sparc/libunpack.so +./jre/lib/sparc/libverify.so +./jre/lib/sparc/libzip.so +./jre/lib/sparc/libdeploy.so +./jre/lib/sparc/libjavaplugin.so +./jre/lib/sparc/libjavaplugin_jni.so +./jre/lib/sparc/libjavaplugin_nscp.so +./jre/lib/sparc/libjavaplugin_oji.so +./jre/lib/sparc/libnpjp2.so +./jre/plugin/sparc/ns4/libjavaplugin.so +./jre/plugin/sparc/ns7/libjavaplugin_oji.so +./jre/lib/sparc/server/libjvm.so +./bin/appletviewer +./bin/extcheck +./bin/idlj +./bin/jar +./bin/jarsigner +./bin/java +./bin/javac +./bin/javadoc +./bin/javah +./bin/javap +./bin/javaws +./bin/jcmd +./bin/jconsole +./bin/jdb +./bin/jhat +./bin/jinfo +./bin/jmap +./bin/jps +./bin/jrunscript +./bin/jsadebugd +./bin/jstack +./bin/jstat +./bin/jstatd +./bin/keytool +./bin/native2ascii +./bin/orbd +./bin/pack200 +./bin/policytool +./bin/rmic +./bin/rmid +./bin/rmiregistry +./bin/schemagen +./bin/serialver +./bin/servertool +./bin/tnameserv +./bin/unpack200 +./bin/wsgen +./bin/wsimport +./bin/xjc +./jre/bin/java +./jre/bin/java_vm +./jre/bin/javaws +./jre/bin/keytool +./jre/bin/orbd +./jre/bin/pack200 +./jre/bin/policytool +./jre/bin/rmid +./jre/bin/rmiregistry +./jre/bin/servertool +./jre/bin/tnameserv +./jre/bin/unpack200 +./jre/lib/sparc/jexec +" + +# Filter random C++ symbol strings. +# Some numbers differ randomly. +DIS_DIFF_FILTER="$SED -e s/\$[a-zA-Z0-9_\$]\{15,15\}//g -e s/\([0-9a-f][0-9a-f].[0-9a-f][0-9a-f].[0-9a-f][0-9a-f].\)[0-9a-f][0-9a-f]/\1/g -e s/\(%g1,.0x\)[0-9a-f]*\(,.%g1\)/\1\2/g -e s/\(!.\)[0-9a-f]*\(.\2/g" + +# Some xor instructions end up with different args in the lib but not in the object files. +ACCEPTED_DIS_DIFF=" +./demo/jvmti/waiters/lib/libwaiters.so +" + +SKIP_FULLDUMP_DIFF="true" + +fi + +if [ "$OPENJDK_TARGET_OS" = "solaris" ] && [ "$OPENJDK_TARGET_CPU" = "sparcv9" ]; then + +STRIP_BEFORE_COMPARE=" +./demo/jni/Poller/lib/sparcv9/libPoller.so +./demo/jvmti/compiledMethodLoad/lib/sparcv9/libcompiledMethodLoad.so +./demo/jvmti/gctest/lib/sparcv9/libgctest.so +./demo/jvmti/heapTracker/lib/sparcv9/libheapTracker.so +./demo/jvmti/heapViewer/lib/sparcv9/libheapViewer.so +./demo/jvmti/hprof/lib/sparcv9/libhprof.so +./demo/jvmti/minst/lib/sparcv9/libminst.so +./demo/jvmti/mtrace/lib/sparcv9/libmtrace.so +./demo/jvmti/versionCheck/lib/sparcv9/libversionCheck.so +./demo/jvmti/waiters/lib/sparcv9/libwaiters.so +" + +SORT_SYMBOLS=" +./demo/jvmti/waiters/lib/sparcv9/libwaiters.so +./jre/lib/sparcv9/libjsig.so +./jre/lib/sparcv9/libsaproc.so +./jre/lib/sparcv9/server/libjvm.so +./jre/lib/sparcv9/server/libjvm_dtrace.so +" + +SKIP_BIN_DIFF="true" + +ACCEPTED_SMALL_SIZE_DIFF=" +./demo/jni/Poller/lib/sparcv9/libPoller.so +./demo/jvmti/compiledMethodLoad/lib/sparcv9/libcompiledMethodLoad.so +./demo/jvmti/gctest/lib/sparcv9/libgctest.so +./demo/jvmti/heapTracker/lib/sparcv9/libheapTracker.so +./demo/jvmti/heapViewer/lib/sparcv9/libheapViewer.so +./demo/jvmti/hprof/lib/sparcv9/libhprof.so +./demo/jvmti/minst/lib/sparcv9/libminst.so +./demo/jvmti/mtrace/lib/sparcv9/libmtrace.so +./demo/jvmti/versionCheck/lib/sparcv9/libversionCheck.so +./demo/jvmti/waiters/lib/sparcv9/libwaiters.so +./jre/lib/sparcv9/client/libjvm.so +./jre/lib/sparcv9/jli/libjli.so +./jre/lib/sparcv9/libJdbcOdbc.so +./jre/lib/sparcv9/libattach.so +./jre/lib/sparcv9/libawt.so +./jre/lib/sparcv9/libawt_headless.so +./jre/lib/sparcv9/libawt_xawt.so +./jre/lib/sparcv9/libdcpr.so +./jre/lib/sparcv9/libdt_socket.so +./jre/lib/sparcv9/libfontmanager.so +./jre/lib/sparcv9/libhprof.so +./jre/lib/sparcv9/libinstrument.so +./jre/lib/sparcv9/libj2gss.so +./jre/lib/sparcv9/libj2pcsc.so +./jre/lib/sparcv9/libj2pkcs11.so +./jre/lib/sparcv9/libj2ucrypto.so +./jre/lib/sparcv9/libjaas_unix.so +./jre/lib/sparcv9/libjava.so +./jre/lib/sparcv9/libjava_crw_demo.so +./jre/lib/sparcv9/libjawt.so +./jre/lib/sparcv9/libjdwp.so +./jre/lib/sparcv9/libjfr.so +./jre/lib/sparcv9/libjpeg.so +./jre/lib/sparcv9/libjsdt.so +./jre/lib/sparcv9/libjsound.so +./jre/lib/sparcv9/libkcms.so +./jre/lib/sparcv9/liblcms.so +./jre/lib/sparcv9/libmanagement.so +./jre/lib/sparcv9/libmlib_image.so +./jre/lib/sparcv9/libmlib_image_v.so +./jre/lib/sparcv9/libnet.so +./jre/lib/sparcv9/libnio.so +./jre/lib/sparcv9/libnpt.so +./jre/lib/sparcv9/libsctp.so +./jre/lib/sparcv9/libsplashscreen.so +./jre/lib/sparcv9/libsunec.so +./jre/lib/sparcv9/libsunwjdga.so +./jre/lib/sparcv9/libt2k.so +./jre/lib/sparcv9/libunpack.so +./jre/lib/sparcv9/libverify.so +./jre/lib/sparcv9/libzip.so +./jre/lib/sparcv9/server/libjvm.so +./bin/sparcv9/appletviewer +./bin/sparcv9/extcheck +./bin/sparcv9/idlj +./bin/sparcv9/jar +./bin/sparcv9/jarsigner +./bin/sparcv9/java +./bin/sparcv9/javac +./bin/sparcv9/javadoc +./bin/sparcv9/javah +./bin/sparcv9/javap +./bin/sparcv9/jcmd +./bin/sparcv9/jconsole +./bin/sparcv9/jdb +./bin/sparcv9/jhat +./bin/sparcv9/jinfo +./bin/sparcv9/jmap +./bin/sparcv9/jps +./bin/sparcv9/jrunscript +./bin/sparcv9/jsadebugd +./bin/sparcv9/jstack +./bin/sparcv9/jstat +./bin/sparcv9/jstatd +./bin/sparcv9/keytool +./bin/sparcv9/native2ascii +./bin/sparcv9/orbd +./bin/sparcv9/pack200 +./bin/sparcv9/policytool +./bin/sparcv9/rmic +./bin/sparcv9/rmid +./bin/sparcv9/rmiregistry +./bin/sparcv9/schemagen +./bin/sparcv9/serialver +./bin/sparcv9/servertool +./bin/sparcv9/tnameserv +./bin/sparcv9/unpack200 +./bin/sparcv9/wsgen +./bin/sparcv9/wsimport +./bin/sparcv9/xjc +./jre/bin/sparcv9/java +./jre/bin/sparcv9/keytool +./jre/bin/sparcv9/orbd +./jre/bin/sparcv9/pack200 +./jre/bin/sparcv9/policytool +./jre/bin/sparcv9/rmid +./jre/bin/sparcv9/rmiregistry +./jre/bin/sparcv9/servertool +./jre/bin/sparcv9/tnameserv +./jre/bin/sparcv9/unpack200 +" + +# Filter random C++ symbol strings. +# Some numbers differ randomly. +DIS_DIFF_FILTER="$SED -e s/\$[a-zA-Z0-9_\$]\{15,15\}//g -e s/[0-9a-f][0-9a-f].[0-9a-f][0-9a-f].[0-9a-f][0-9a-f].[0-9a-f][0-9a-f]//g -e s/\(%g1,.0x\)[0-9a-f]*\(,.%g1\)/\1\2/g -e s/\(!.\)[0-9a-f]*\(.\2/g" + +# Some xor instructions end up with different args in the lib but not in the object files. +ACCEPTED_DIS_DIFF=" +./demo/jvmti/waiters/lib/sparcv9/libwaiters.so +" + +SKIP_FULLDUMP_DIFF="true" + +fi + + +if [ "$OPENJDK_TARGET_OS" = "windows" ]; then + +# Probably should add all libs here +ACCEPTED_SMALL_SIZE_DIFF=" +./demo/jvmti/gctest/lib/gctest.dll +./demo/jvmti/heapTracker/lib/heapTracker.dll +./demo/jvmti/minst/lib/minst.dll +./jre/bin/attach.dll +./jre/bin/java_crw_demo.dll +./jre/bin/jsoundds.dll +./bin/appletviewer.exe +./bin/extcheck.exe +./bin/idlj.exe +./bin/jar.exe +./bin/jarsigner.exe +./bin/java-rmi.exe +./bin/java.exe +./bin/javac.exe +./bin/javadoc.exe +./bin/javah.exe +./bin/javap.exe +./bin/javaw.exe +./bin/jcmd.exe +./bin/jconsole.exe +./bin/jdb.exe +./bin/jhat.exe +./bin/jinfo.exe +./bin/jmap.exe +./bin/jps.exe +./bin/jrunscript.exe +./bin/jsadebugd.exe +./bin/jstack.exe +./bin/jstat.exe +./bin/jstatd.exe +./bin/keytool.exe +./bin/kinit.exe +./bin/klist.exe +./bin/ktab.exe +./bin/native2ascii.exe +./bin/orbd.exe +./bin/pack200.exe +./bin/policytool.exe +./bin/rmic.exe +./bin/rmid.exe +./bin/rmiregistry.exe +./bin/schemagen.exe +./bin/serialver.exe +./bin/servertool.exe +./bin/tnameserv.exe +./bin/unpack200.exe +./bin/wsgen.exe +./bin/wsimport.exe +./bin/xjc.exe +./jre/bin/java-rmi.exe +./jre/bin/java.exe +./jre/bin/javaw.exe +./jre/bin/keytool.exe +./jre/bin/kinit.exe +./jre/bin/klist.exe +./jre/bin/ktab.exe +./jre/bin/orbd.exe +./jre/bin/pack200.exe +./jre/bin/policytool.exe +./jre/bin/rmid.exe +./jre/bin/rmiregistry.exe +./jre/bin/servertool.exe +./jre/bin/tnameserv.exe +./jre/bin/unpack200.exe +" + +# On windows, there are unavoidable allignment issues making +# a perfect disasm diff impossible. Filter out the following: +# * Random parts of C++ symbols (this is a bit greedy, but does the trick) +# @XXXXX +# * Hexadecimal addresses that are sometimes alligned differently. +# * Dates in version strings XXXX_XX_XX. +DIS_DIFF_FILTER="$SED -e s/[@?][A-Z0-9_]\{1,25\}//g -e s/^.\{2,2\}[0-9A-F]\{16,16\}.\{2,2\}//g -e s/[0-9A-F]\{4,16\}h//g -e s/_[0-9]\{4,4\}_[0-9][0-9]_[0-9][0-9]//g" + +SKIP_BIN_DIFF="true" +SKIP_FULLDUMP_DIFF="true" + +fi + + +if [ "$OPENJDK_TARGET_OS" = "macosx" ]; then +ACCEPTED_JARZIP_CONTENTS=" +/META-INF/INDEX.LIST +" + +KNOWN_BIN_DIFF=" +./jre/lib/libJObjC.dylib +" + +ACCEPTED_BIN_DIFF=" +./bin/appletviewer +./bin/extcheck +./bin/idlj +./bin/jar +./bin/jarsigner +./bin/java +./bin/javac +./bin/javadoc +./bin/javah +./bin/javap +./bin/jcmd +./bin/jconsole +./bin/jdb +./bin/jhat +./bin/jinfo +./bin/jmap +./bin/jps +./bin/jrunscript +./bin/jsadebugd +./bin/jstack +./bin/jstat +./bin/jstatd +./bin/keytool +./bin/native2ascii +./bin/orbd +./bin/pack200 +./bin/policytool +./bin/rmic +./bin/rmid +./bin/rmiregistry +./bin/schemagen +./bin/serialver +./bin/servertool +./bin/tnameserv +./bin/wsgen +./bin/wsimport +./bin/xjc +./jre/bin/java +./jre/bin/keytool +./jre/bin/orbd +./jre/bin/pack200 +./jre/bin/policytool +./jre/bin/rmid +./jre/bin/rmiregistry +./jre/bin/servertool +./jre/bin/tnameserv +./jre/lib/libsaproc.dylib +./jre/lib/server/libjvm.dylib +" + +KNOWN_SIZE_DIFF=" +./jre/lib/libJObjC.dylib +" + +SORT_SYMBOLS=" +./jre/lib/libJObjC.dylib +" + +KNOWN_SYM_DIFF=" +./jre/lib/libJObjC.dylib +" + +KNOWN_ELF_DIFF=" +./jre/lib/libJObjC.dylib +" + +KNOWN_DIS_DIFF=" +./jre/lib/libJObjC.dylib +" + +fi diff --git a/common/bin/compareimage.sh b/common/bin/compareimage.sh deleted file mode 100644 index 0e5d1f031dd..00000000000 --- a/common/bin/compareimage.sh +++ /dev/null @@ -1,335 +0,0 @@ -#!/bin/bash -# -# Copyright (c) 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. -# - -# MANUAL -# -# ./common/bin/compareimages.sh old_jdk_image new_jdk_image -# -# Compare the directory structure. -# Compare the filenames in the directories. -# Compare the contents of the zip archives -# Compare the contents of the jar archives -# Compare the native libraries -# Compare the native executables -# Compare the remaining files -# -# ./common/bin/compareimages.sh old_jdk_image new_jdk_image [zips jars libs execs other] -# -# Compare only the selected subset of the images. -# -# ./common/bin/compareimages.sh old_jdk_image new_jdk_image CodePointIM.jar -# -# Compare only the CodePointIM.jar file -# Can be used to compare zips, libraries and executables. -# - -if [ "x$1" = "x-h" ] || [ "x$1" = "x--help" ] || [ "x$1" == "x" ]; then - echo "bash ./common/bin/compareimages.sh old_jdk_image new_jdk_image" - echo "" - echo "Compare the directory structure." - echo "Compare the filenames in the directories." - echo "Compare the contents of the zip archives" - echo "Compare the contents of the jar archives" - echo "Compare the native libraries" - echo "Compare the native executables" - echo "Compare the remaining files" - echo "" - echo "bash ./common/bin/compareimages.sh old_jdk_image new_jdk_image [zips jars libs execs other]" - echo "" - echo "Compare only the selected subset of the images." - echo "" - echo "bash ./common/bin/compareimages.sh old_jdk_image new_jdk_image CodePointIM.jar" - echo "" - echo "Compare only the CodePointIM.jar file" - echo "Can be used to compare zips, libraries and executables." - exit 10 -fi - -OLD="$1" -NEW="$2" -CMD="$3" - -DIFF_RESULT=0 - -CMP_ZIPS=false -CMP_JARS=false -CMP_LIBS=false -CMP_EXECS=false -CMP_OTHER=false - -FILTER="cat" - -if [ -n "$CMD" ]; then - case "$CMD" in - zips) - CMP_ZIPS=true - ;; - jars) - CMP_JARS=true - ;; - libs) - CMP_LIBS=true - ;; - execs) - CMP_EXECS=true - ;; - other) - CMP_OTHER=true - ;; - *) - CMP_ZIPS=true - CMP_JARS=true - CMP_LIBS=true - CMP_EXECS=true - CMP_OTHER=true - FILTER="grep $3" - ;; - esac -else - CMP_ZIPS=true - CMP_JARS=true - CMP_LIBS=true - CMP_EXECS=true - CMP_OTHER=true -fi - -DIFFJARZIP="/bin/bash `dirname $0`/diffjarzip.sh" -DIFFLIB="/bin/bash `dirname $0`/difflib.sh" -DIFFEXEC="/bin/bash `dirname $0`/diffexec.sh" -export COMPARE_ROOT=/tmp/cimages.$USER -mkdir -p $COMPARE_ROOT - -# Load the correct exception list. -case "`uname -s`" in - Linux) - . `dirname $0`/exception_list_linux - ;; -esac - -echo -echo Comparing $OLD to $NEW -echo - -(cd $OLD && find . -type d | sort > $COMPARE_ROOT/from_dirs) -(cd $NEW && find . -type d | sort > $COMPARE_ROOT/to_dirs) - -echo -n Directory structure... -if diff $COMPARE_ROOT/from_dirs $COMPARE_ROOT/to_dirs > /dev/null; then - echo Identical! -else - echo Differences found. - DIFF_RESULT=1 - # Differences in directories found. - ONLY_OLD=$(diff $COMPARE_ROOT/from_dirs $COMPARE_ROOT/to_dirs | grep '<') - if [ "$ONLY_OLD" ]; then - echo Only in $OLD - echo $ONLY_OLD | sed 's|< ./|\t|g' | sed 's/ /\n/g' - fi - # Differences in directories found. - ONLY_NEW=$(diff $COMPARE_ROOT/from_dirs $COMPARE_ROOT/to_dirs | grep '>') - if [ "$ONLY_NEW" ]; then - echo Only in $NEW - echo $ONLY_NEW | sed 's|> ./|\t|g' | sed 's/ /\n/g' - fi -fi - -(cd $OLD && find . -type f | sort > $COMPARE_ROOT/from_files) -(cd $NEW && find . -type f | sort > $COMPARE_ROOT/to_files) - -echo -n File names... -if diff $COMPARE_ROOT/from_files $COMPARE_ROOT/to_files > /dev/null; then - echo Identical! -else - echo Differences found. - DIFF_RESULT=1 - # Differences in directories found. - ONLY_OLD=$(diff $COMPARE_ROOT/from_files $COMPARE_ROOT/to_files | grep '<') - if [ "$ONLY_OLD" ]; then - echo Only in $OLD - echo "$ONLY_OLD" | sed 's|< ./| |g' - fi - # Differences in directories found. - ONLY_NEW=$(diff $COMPARE_ROOT/from_files $COMPARE_ROOT/to_files | grep '>') - if [ "$ONLY_NEW" ]; then - echo Only in $NEW - echo "$ONLY_NEW" | sed 's|> ./| |g' - fi -fi - -echo -n Permissions... -found="" -for f in `cd $OLD && find . -type f` -do - if [ ! -f ${OLD}/$f ]; then continue; fi - if [ ! -f ${NEW}/$f ]; then continue; fi - OP=`ls -l ${OLD}/$f | awk '{printf("%.10s\n", $1);}'` - NP=`ls -l ${NEW}/$f | awk '{printf("%.10s\n", $1);}'` - if [ "$OP" != "$NP" ] - then - if [ -z "$found" ]; then echo ; found="yes"; fi - printf "\told: ${OP} new: ${NP}\t$f\n" - fi - - OF=`cd ${OLD} && file $f` - NF=`cd ${NEW} && file $f` - if [ "$f" = "./src.zip" ] - then - if [ "`echo $OF | grep -ic zip`" -gt 0 -a "`echo $NF | grep -ic zip`" -gt 0 ] - then - # the way we produces zip-files make it so that directories are stored in old file - # but not in new (only files with full-path) - # this makes file-5.09 report them as different - continue; - fi - fi - - if [ "$OF" != "$NF" ] - then - if [ -z "$found" ]; then echo ; found="yes"; fi - printf "\tFILE: old: ${OF} new: ${NF}\t$f\n" - fi -done -if [ -z "$found" ]; then echo ; found="yes"; fi - -GENERAL_FILES=$(cd $OLD && find . -type f ! -name "*.so" ! -name "*.jar" ! -name "*.zip" \ - ! -name "*.debuginfo" ! -name "*.dylib" ! -name "jexec" \ - ! -name "ct.sym" ! -name "*.diz" \ - | grep -v "./bin/" | sort | $FILTER) -echo General files... -for f in $GENERAL_FILES -do - if [ -e $NEW/$f ]; then - DIFF_OUT=$(diff $OLD/$f $NEW/$f 2>&1) - if [ -n "$DIFF_OUT" ]; then - echo $f - echo "$DIFF_OUT" - fi - fi -done - - -if [ "x$CMP_ZIPS" == "xtrue" ]; then - ZIPS=$(cd $OLD && find . -type f -name "*.zip" | sort | $FILTER) - - if [ -n "$ZIPS" ]; then - echo Zip files... - - for f in $ZIPS - do - $DIFFJARZIP $OLD/$f $NEW/$f $OLD $NEW - if [ "$?" != "0" ]; then - DIFF_RESULT=1 - fi - done - fi -fi - -if [ "x$CMP_JARS" == "xtrue" ]; then - JARS=$(cd $OLD && find . -type f -name "*.jar" -o -name "ct.sym" | sort | $FILTER) - - if [ -n "$JARS" ]; then - echo Jar files... - - for f in $JARS - do - DIFFJAR_OUTPUT=`$DIFFJARZIP $OLD/$f $NEW/$f $OLD $NEW` - DIFFJAR_RESULT=$? - if [ "$DIFFJAR_RESULT" != "0" ]; then - for diff in $LIST_DIFF_JAR; do - DIFFJAR_OUTPUT=`echo "$DIFFJAR_OUTPUT" | grep -v "$diff"` - done - if [ "`echo "$DIFFJAR_OUTPUT" | grep -v "Differing files in"`" != "" ]; then - DIFF_RESULT=1 - echo "$DIFFJAR_OUTPUT" - fi - fi - done - fi -fi - -if [ "x$FILTER" != "xcat" ]; then - VIEW=view -else - VIEW= -fi - -if [ "x$CMP_LIBS" == "xtrue" ]; then - LIBS=$(cd $OLD && find . -name 'lib*.so' -o -name '*.dylib' -o -name '*.dll' | sort | $FILTER) - - if [ -n "$LIBS" ]; then - echo Libraries... - for f in $LIBS - do - DIFFLIB_OUTPUT=`$DIFFLIB $OLD/$f $NEW/$f $OLD $NEW $VIEW` - DIFFLIB_RESULT=$? - if [ "$DIFFLIB_RESULT" = "0" ]; then - : - #echo "OK: $DIFFLIB_OUTPUT" - elif [ "$DIFFLIB_RESULT" = "2" ] && [[ "$LIST_DIFF_SIZE $LIST_DIFF_BYTE" == *"${f:2}"* ]]; then - : - #echo "OK: $DIFFLIB_OUTPUT" - elif [ "$DIFFLIB_RESULT" = "1" ] && [[ "$LIST_DIFF_BYTE" == *"${f:2}"* ]]; then - : - #echo "OK: $DIFFLIB_OUTPUT" - else - echo "$DIFFLIB_OUTPUT" - DIFF_RESULT=1 - fi - done - fi -fi - -if [ "x$CMP_EXECS" == "xtrue" ]; then - if [ $OSTYPE == "cygwin" ]; then - EXECS=$(cd $OLD && find . -type f -name '*.exe' | sort | $FILTER) - else - EXECS=$(cd $OLD && find . -type f -perm -100 \! \( -name '*.so' -o -name '*.dylib' -o -name '*.dll' \) | sort | $FILTER) - fi - - - if [ -n "$EXECS" ]; then - echo Executables... - - for f in $EXECS - do - DIFFEXEC_OUTPUT=`$DIFFEXEC $OLD/$f $NEW/$f $OLD $NEW $VIEW` - DIFFEXEC_RESULT=$? - if [ "$DIFFEXEC_RESULT" = "0" ]; then - : - #echo "OK: $DIFFEXEC_OUTPUT" - elif [ "$DIFFEXEC_RESULT" = "2" ] && [[ "$LIST_DIFF_SIZE $LIST_DIFF_BYTE" == *"${f:2}"* ]]; then - : - #echo "OK: $DIFFEXEC_OUTPUT" - elif [ "$DIFFEXEC_RESULT" = "1" ] && [[ "$LIST_DIFF_BYTE" == *"${f:2}"* ]]; then - : - #echo "OK: $DIFFEXEC_OUTPUT" - else - echo "$DIFFEXEC_OUTPUT" - DIFF_RESULT=1 - fi - done - fi -fi - -exit $DIFF_RESULT diff --git a/common/bin/diffexec.sh b/common/bin/diffexec.sh deleted file mode 100644 index 85f7b67c69f..00000000000 --- a/common/bin/diffexec.sh +++ /dev/null @@ -1,186 +0,0 @@ -#!/bin/bash -# -# Copyright (c) 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. -# - -if [ $# -lt 2 ] -then - echo "Diff two executables. Return codes:" - echo "0 - no diff" - echo "1 - Identical symbols AND size, BUT not bytewise identical" - echo "2 - Identical symbols BUT NEW size" - echo "3 - Differences, content BUT SAME size" - echo "4 - Differences, content AND size" - echo "10 - Could not perform diff" - echo "Use 'quiet' to disable any output." - echo "Syntax: $0 file1 file2 [quiet]" - exit 10 -fi - -if [ ! -f $1 ] -then - echo $1 does not exist - exit 10 -fi - -if [ ! -f $2 ] -then - echo $2 does not exist - exit 10 -fi - -if [ "`uname`" == "SunOS" ]; then - if [ -f "`which nm`" ]; then - NM=nm - elif [ -f "`which gnm`" ]; then - NM=gnm - else - echo "No nm command found" - exit 10 - fi - LDD=ldd -elif [ $OSTYPE == "cygwin" ]; then - NM="$VS100COMNTOOLS/../../VC/bin/amd64/dumpbin.exe" - NM_ARGS=/exports - LDD= -elif [ "`uname`" == "Darwin" ]; then - NM=nm - LDD="otool -L" -else - NM=nm - LDD=ldd -fi - -# Should the differences be viewed? -VIEW= -# You can do export DIFF=meld to view -# any differences using meld instead. -if [ -n "$DIFF" ]; then - DIFF="$DIFF" -else - DIFF=diff -fi -OLD=$(cd $(dirname $1) && pwd)/$(basename $1) -NEW=$(cd $(dirname $2) && pwd)/$(basename $2) - -OLD_SIZE=$(ls -l "$OLD" | awk '{ print $5 }') -NEW_SIZE=$(ls -l "$NEW" | awk '{ print $5 }') - -if [ $# -gt 3 ] -then - ROOT1=$(cd $3 && pwd) - ROOT2=$(cd $4 && pwd) - OLD_NAME=$(echo $OLD | sed "s|$ROOT1/||") - NEW_NAME=$(echo $NEW | sed "s|$ROOT2/||") - if [ "x$5" == "xview" ]; then VIEW=view; fi -else - ROOT1=$(dirname $OLD)/ - ROOT2=$(dirname $NEW)/ - OLD_NAME=$OLD - NEW_NAME=$NEW - if [ "x$3" == "xview" ]; then VIEW=view; fi -fi - -if cmp $OLD $NEW > /dev/null -then - # The files were bytewise identical. - echo Identical: $OLD_NAME - exit 0 -fi - -OLD_SYMBOLS=$COMPARE_ROOT/$OLD_NAME.old -NEW_SYMBOLS=$COMPARE_ROOT/$NEW_NAME.new - -mkdir -p $(dirname $OLD_SYMBOLS) -mkdir -p $(dirname $NEW_SYMBOLS) - -if [ $OSTYPE == "cygwin" ]; then - "$NM" $NM_ARGS $OLD | grep " = " > $OLD_SYMBOLS - "$NM" $NM_ARGS $NEW | grep " = " > $NEW_SYMBOLS - "$NM" $NM_ARGS $OLD > $OLD_SYMBOLS.full - "$NM" $NM_ARGS $NEW > $NEW_SYMBOLS.full -else - # Strip the addresses, just compare the ordering of the symbols. - $NM $OLD | cut -f 2- -d ' ' > $OLD_SYMBOLS - $NM $NEW | cut -f 2- -d ' ' > $NEW_SYMBOLS - # But store the full information for easy diff access. - $NM $OLD > $OLD_SYMBOLS.full - $NM $NEW > $NEW_SYMBOLS.full -fi - -DIFFS=$(LANG=C diff $OLD_SYMBOLS $NEW_SYMBOLS) - -if [ "${LDD}" ] -then - NAME=`basename $OLD` - TMP=$COMPARE_ROOT/ldd/ldd.${NAME} - rm -rf "${TMP}" - mkdir -p "${TMP}" - - (cd "${TMP}" && cp $OLD . && ${LDD} ${NAME} | awk '{ print $1;}' | sort | tee dep.old | uniq > dep.uniq.old) - (cd "${TMP}" && cp $NEW . && ${LDD} ${NAME} | awk '{ print $1;}' | sort | tee dep.new | uniq > dep.uniq.new) - (cd "${TMP}" && rm -f ${NAME}) - - DIFFS_DEP=$(LANG=C diff "${TMP}/dep.old" "${TMP}/dep.new") - DIFFS_UNIQ_DEP=$(LANG=C diff "${TMP}/dep.uniq.old" "${TMP}/dep.uniq.new") - - DEP_MSG= - if [ -z "${DIFFS_UNIQ_DEP}" -a -z "${DIFFS_DEP}" ]; then - DEP_MSG="Identical dependencies" - elif [ -z "${DIFFS_UNIQ_DEP}" ]; then - DEP_MSG="Redundant duplicate dependencies added" - RES=1 - else - DEP_MSG="DIFFERENT dependencies" - RES=1 - fi -fi - -RESULT=0 - -if [ -n "$DIFFS" ]; then - if [ $OLD_SIZE -ne $NEW_SIZE ] - then - echo Differences, content AND size : $DEP_MSG : $OLD_NAME - RESULT=4 - else - echo Differences, content BUT SAME size: $DEP_MSG : $OLD_NAME - RESULT=3 - fi - if [ "x$VIEW" == "xview" ]; then - LANG=C $DIFF $OLD_SYMBOLS $NEW_SYMBOLS - fi -else - if [ $OLD_SIZE -ne $NEW_SIZE ] - then - echo Identical symbols BUT NEW size : $DEP_MSG : $OLD_NAME - RESULT=2 - else - echo Identical symbols AND size, BUT not bytewise identical: $DEP_MSG : $OLD_NAME - RESULT=1 - fi -fi - -exit $RESULT - - - diff --git a/common/bin/diffjarzip.sh b/common/bin/diffjarzip.sh deleted file mode 100644 index 6ad0a42c2f6..00000000000 --- a/common/bin/diffjarzip.sh +++ /dev/null @@ -1,155 +0,0 @@ -#!/bin/bash -# -# Copyright (c) 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. -# - -# Simple tool to diff two jar or zip files. It unpacks the jar/zip files and -# reports if files differs and if files are new or missing. -# Assumes gnu diff. - -# There are a few source files that have DOS line endings in the -# jaxp/jaxws source drops, when the sources were added to the repository -# the source files were converted to UNIX line endings. -# For now we ignore these differences. -DIFF_FLAGS="--strip-trailing-cr" -#set -x - -if [ $# -lt 2 ] -then - echo "Diff two jar/zip files. Return codes: 0 - no diff, 1 - diff, 2 - couldn't perform diff" - echo "Syntax: $0 old_archive new_archive [old_root new_root]" - exit 2 -fi - -if [ ! -f $1 ] -then - echo $1 does not exist - exit 2 -fi - -if [ ! -f $2 ] -then - echo $2 does not exist - exit 2 -fi - -IGNORES="cat" -OLD=$(cd $(dirname $1) && pwd)/$(basename $1) -NEW=$(cd $(dirname $2) && pwd)/$(basename $2) - -if [ $# -gt 3 ] -then - ROOT1=$(cd $3 && pwd) - ROOT2=$(cd $4 && pwd) - OLD_NAME=$(echo $OLD | sed "s|$ROOT1/||") - NEW_NAME=$(echo $NEW | sed "s|$ROOT2/||") - if [ $# == 5 ]; then IGNORES="$5"; fi -else - ROOT1=$(dirname $OLD)/ - ROOT2=$(dirname $NEW)/ - OLD_NAME=$OLD - NEW_NAME=$NEW - if [ $# == 3 ]; then IGNORES="$3"; fi -fi - -if [ "`uname`" == "SunOS" ]; then - if [ -f "`which gdiff`" ]; then - DIFF=gdiff - else - DIFF=diff - fi -else - DIFF=diff -fi - -OLD_SUFFIX="${OLD##*.}" -NEW_SUFFIX="${NEW##*.}" -if [ "$OLD_SUFFIX" != "$NEW_SUFFIX" ]; then - echo The files do not have the same suffix type! - exit 2 -fi - -if [ "$OLD_SUFFIX" != "zip" ] && [ "$OLD_SUFFIX" != "jar" ] && [ "$OLD_SUFFIX" != "sym" ]; then - echo The files have to be zip, jar or sym! They are $OLD_SUFFIX - exit 2 -fi - -UNARCHIVE="unzip -q" - -TYPE="$OLD_SUFFIX" - -if cmp $OLD $NEW > /dev/null -then - # The files were bytewise identical. - exit 0 -fi - -# Not quite identical, the might still contain the same data. -# Unpack the jar/zip files in temp dirs -if test "x$COMPARE_ROOT" == "x"; then - COMPARE_ROOT=/tmp/compare_root.$$ - REMOVE_COMPARE_ROOT=true -fi -OLD_TEMPDIR=$COMPARE_ROOT/$OLD_NAME.old -NEW_TEMPDIR=$COMPARE_ROOT/$NEW_NAME.new -mkdir -p $OLD_TEMPDIR -mkdir -p $NEW_TEMPDIR -(cd $OLD_TEMPDIR && rm -rf * ; $UNARCHIVE $OLD) -(cd $NEW_TEMPDIR && rm -rf * ; $UNARCHIVE $NEW) - -ONLY1=$(LANG=C $DIFF -rq $OLD_TEMPDIR $NEW_TEMPDIR | grep "^Only in $OLD_TEMPDIR") - -if [ -n "$ONLY1" ]; then - echo " Only the OLD $OLD_NAME contains:" - LANG=C $DIFF -rq $DIFF_FLAGS $OLD_TEMPDIR $NEW_TEMPDIR | grep "^Only in $OLD_TEMPDIR" \ - | sed "s|Only in $OLD_TEMPDIR| |"g | sed 's|: |/|g' -fi - -ONLY2=$(LANG=C $DIFF -rq $OLD_TEMPDIR $NEW_TEMPDIR | grep "^Only in $NEW_TEMPDIR") - -if [ -n "$ONLY2" ]; then - echo " Only the NEW $NEW_NAME contains:" - LANG=C $DIFF -rq $DIFF_FLAGS $OLD_TEMPDIR $NEW_TEMPDIR | grep "^Only in $NEW_TEMPDIR" \ - | sed "s|Only in $NEW_TEMPDIR| |"g | sed 's|: |/|g' -fi - -DIFFTEXT="/bin/bash `dirname $0`/difftext.sh" - -LANG=C $DIFF -rq $DIFF_FLAGS $OLD_TEMPDIR $NEW_TEMPDIR | grep differ | cut -f 2,4 -d ' ' | \ - awk "{ print \"$DIFFTEXT \"\$1\" \"\$2 }" > $COMPARE_ROOT/diffing - -/bin/bash $COMPARE_ROOT/diffing > $COMPARE_ROOT/diffs - -if [ -s "$COMPARE_ROOT/diffs" ]; then - echo " Differing files in $OLD_NAME" - cat $COMPARE_ROOT/diffs | grep differ | $IGNORES | cut -f 2 -d ' ' | \ - sed "s|$OLD_TEMPDIR| |g" -fi - -# Clean up - -if [ "x$REMOVE_COMPARE_ROOT" == xtrue ]; then - rm -rf $REMOVE_COMPARE_ROOT -fi - -exit 1 - diff --git a/common/bin/difflib.sh b/common/bin/difflib.sh deleted file mode 100644 index dc5eed14877..00000000000 --- a/common/bin/difflib.sh +++ /dev/null @@ -1,207 +0,0 @@ -#!/bin/bash -# -# Copyright (c) 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. -# - -# Simple tool to diff two shared libraries. -# Criterias: two shared libraries are considered equal if: -# the file sizes are the same AND the symbols outputs from the nm command are equal - -if [ $# -lt 2 ] -then - echo "Diff two shared libs. Return codes:" - echo "0 - no diff" - echo "1 - Identical symbols AND size, BUT not bytewise identical" - echo "2 - Identical symbols BUT NEW size" - echo "3 - Differences, content BUT SAME size" - echo "4 - Differences, content AND size" - echo "10 - Could not perform diff" - echo "Use 'quiet' to disable any output." - echo "Syntax: $0 file1 file2 [quiet]" - exit 10 -fi - -if [ ! -f $1 ] -then - echo $1 does not exist - exit 10 -fi - -if [ ! -f $2 ] -then - echo $2 does not exist - exit 10 -fi - -if [ "`uname`" == "SunOS" ]; then - if [ -f "`which gnm`" ]; then - NM=gnm -# Jonas 2012-05-29: solaris native nm produces radically different output than gnm -# so if using that...we need different filter than "cut -f 2-" -# - elif [ -f "`which nm`" ]; then - NM=nm - else - echo "No nm command found" - exit 10 - fi - LDD=ldd -elif [ $OSTYPE == "cygwin" ]; then - NM="$VS100COMNTOOLS/../../VC/bin/amd64/dumpbin.exe" - NM_ARGS=/exports - LDD= -elif [ "`uname`" == "Darwin" ]; then - NM=nm - LDD="otool -L" -else - NM=nm - LDD=ldd -fi - -# Should the differences be viewed? -VIEW= -# You can do export DIFF=meld to view -# any differences using meld instead. -if [ -n "$DIFF" ]; then - DIFF="$DIFF" -else - DIFF=diff -fi -OLD=$(cd $(dirname $1) && pwd)/$(basename $1) -NEW=$(cd $(dirname $2) && pwd)/$(basename $2) - -OLD_SIZE=$(ls -l "$OLD" | awk '{ print $5 }') -NEW_SIZE=$(ls -l "$NEW" | awk '{ print $5 }') - -if [ $# -gt 3 ] -then - ROOT1=$(cd $3 && pwd) - ROOT2=$(cd $4 && pwd) - OLD_NAME=$(echo $OLD | sed "s|$ROOT1/||") - NEW_NAME=$(echo $NEW | sed "s|$ROOT2/||") - if [ "x$5" == "xview" ]; then VIEW=view; fi -else - ROOT1=$(dirname $OLD)/ - ROOT2=$(dirname $NEW)/ - OLD_NAME=$OLD - NEW_NAME=$NEW - if [ "x$3" == "xview" ]; then VIEW=view; fi -fi - -OLD_SUFFIX="${OLD##*.}" -NEW_SUFFIX="${NEW##*.}" -if [ "$OLD_SUFFIX" != "$NEW_SUFFIX" ]; then - echo The files do not have the same suffix type! - exit 10 -fi - -if [ "$OLD_SUFFIX" != "so" ] && [ "$OLD_SUFFIX" != "dylib" ] && [ "$OLD_SUFFIX" != "dll" ]; then - echo The files have to be .so, .dylib or .dll! They are $OLD_SUFFIX - exit 10 -fi - -TYPE="$OLD_SUFFIX" - -if cmp $OLD $NEW > /dev/null -then - # The files were bytewise identical. - echo Identical: $OLD_NAME - exit 0 -fi - -OLD_SYMBOLS=$COMPARE_ROOT/nm.$OLD_NAME.old -NEW_SYMBOLS=$COMPARE_ROOT/nm.$NEW_NAME.new - -mkdir -p $(dirname $OLD_SYMBOLS) -mkdir -p $(dirname $NEW_SYMBOLS) - -if [ $OSTYPE == "cygwin" ]; then - "$NM" $NM_ARGS $OLD | grep " = " > $OLD_SYMBOLS - "$NM" $NM_ARGS $NEW | grep " = " > $NEW_SYMBOLS - "$NM" $NM_ARGS $OLD > $OLD_SYMBOLS.full - "$NM" $NM_ARGS $NEW > $NEW_SYMBOLS.full -else - # Strip the addresses, just compare the ordering of the symbols. - $NM $OLD | cut -f 2- -d ' ' > $OLD_SYMBOLS - $NM $NEW | cut -f 2- -d ' ' > $NEW_SYMBOLS - # But store the full information for easy diff access. - $NM $OLD > $OLD_SYMBOLS.full - $NM $NEW > $NEW_SYMBOLS.full -fi - -DIFFS=$(LANG=C diff $OLD_SYMBOLS $NEW_SYMBOLS) - -RESULT=0 - -if [ "${LDD}" ] -then - NAME=`basename $OLD` - TMP=$COMPARE_ROOT/ldd/ldd.${NAME} - rm -rf "${TMP}" - mkdir -p "${TMP}" - - (cd "${TMP}" && cp $OLD . && ${LDD} ${NAME} | awk '{ print $1;}' | sort | tee dep.old | uniq > dep.uniq.old) - (cd "${TMP}" && cp $NEW . && ${LDD} ${NAME} | awk '{ print $1;}' | sort | tee dep.new | uniq > dep.uniq.new) - (cd "${TMP}" && rm -f ${NAME}) - - DIFFS_DEP=$(LANG=C diff "${TMP}/dep.old" "${TMP}/dep.new") - DIFFS_UNIQ_DEP=$(LANG=C diff "${TMP}/dep.uniq.old" "${TMP}/dep.uniq.new") - - DEP_MSG= - if [ -z "${DIFFS_UNIQ_DEP}" -a -z "${DIFFS_DEP}" ]; then - DEP_MSG="Identical dependencies" - elif [ -z "${DIFFS_UNIQ_DEP}" ]; then - DEP_MSG="Redundant duplicate dependencies added" - RES=1 - else - DEP_MSG="DIFFERENT dependencies" - RES=1 - fi -fi - -if [ -n "$DIFFS" ]; then - if [ $OLD_SIZE -ne $NEW_SIZE ] - then - echo Differences, content AND size : $DEP_MSG : $OLD_NAME - RESULT=4 - else - echo Differences, content BUT SAME size: $DEP_MSG : $OLD_NAME - RESULT=3 - fi - if [ "x$VIEW" == "xview" ]; then - LANG=C $DIFF $OLD_SYMBOLS $NEW_SYMBOLS - fi -else - if [ $OLD_SIZE -ne $NEW_SIZE ] - then - echo Identical symbols BUT NEW size : $DEP_MSG : $OLD_NAME - RESULT=2 - else - echo Identical symbols AND size, BUT not bytewise identical: $DEP_MSG : $OLD_NAME - RESULT=1 - fi -fi - -exit $RESULT - - - diff --git a/common/bin/difftext.sh b/common/bin/difftext.sh deleted file mode 100644 index ae903731f59..00000000000 --- a/common/bin/difftext.sh +++ /dev/null @@ -1,157 +0,0 @@ -#!/bin/bash -# -# Copyright (c) 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. -# - -# The difftext.sh knows how to compare text files and -# ignore some specific differences. -# When difftext.sh is called, we already know that the -# files differ. But if the tests below trigger, then -# we ignore differences caused by: -# -# Timestamps in Java sources generated by idl2java -# Sorting order and cleanup style in .properties files. - -OLD="$1" -NEW="$2" -SUF="${OLD##*.}" -TMP=1 -if test "x$SUF" == "xjava"; then - TMP=$(LANG=C diff $OLD $NEW | \ - grep '^[<>]' | \ - sed '/[<>] \* from.*\.idl/d' | \ - sed '/[<>] \*.*201[12].*/d' | \ - sed '/\/\/ Generated from input file.*/d' | \ - sed '/\/\/ This file was generated AUTOMATICALLY from a template file.*/d' | \ - sed '/\/\/ java GenerateCharacter.*/d') -fi -if test "x$SUF" == "xproperties"; then - cat $OLD | sed -e 's/\([^\\]\):/\1\\:/g' -e 's/\([^\\]\)=/\1\\=/g' -e 's/#.*/#/g' \ --e 's/\\u0020/\x20/g' \ --e 's/\\u003A/\x3A/g' \ --e 's/\\u006B/\x6B/g' \ --e 's/\\u0075/\x75/g' \ --e 's/\\u00A0/\xA0/g' \ --e 's/\\u00A3/\xA3/g' \ --e 's/\\u00B0/\xB0/g' \ --e 's/\\u00B7/\xB7/g' \ --e 's/\\u00BA/\xBA/g' \ --e 's/\\u00BF/\xBF/g' \ --e 's/\\u00C0/\xC0/g' \ --e 's/\\u00C1/\xC1/g' \ --e 's/\\u00C2/\xC2/g' \ --e 's/\\u00C4/\xC4/g' \ --e 's/\\u00C5/\xC5/g' \ --e 's/\\u00C8/\xC8/g' \ --e 's/\\u00C9/\xC9/g' \ --e 's/\\u00CA/\xCA/g' \ --e 's/\\u00CD/\xCD/g' \ --e 's/\\u00CE/\xCE/g' \ --e 's/\\u00D3/\xD3/g' \ --e 's/\\u00D4/\xD4/g' \ --e 's/\\u00D6/\xD6/g' \ --e 's/\\u00DA/\xDA/g' \ --e 's/\\u00DC/\xDC/g' \ --e 's/\\u00DD/\xDD/g' \ --e 's/\\u00DF/\xDF/g' \ --e 's/\\u00E0/\xE0/g' \ --e 's/\\u00E1/\xE1/g' \ --e 's/\\u00E2/\xE2/g' \ --e 's/\\u00E3/\xE3/g' \ --e 's/\\u00E4/\xE4/g' \ --e 's/\\u00E5/\xE5/g' \ --e 's/\\u00E6/\xE6/g' \ --e 's/\\u00E7/\xE7/g' \ --e 's/\\u00E8/\xE8/g' \ --e 's/\\u00E9/\xE9/g' \ --e 's/\\u00EA/\xEA/g' \ --e 's/\\u00EB/\xEB/g' \ --e 's/\\u00EC/\xEC/g' \ --e 's/\\u00ED/\xED/g' \ --e 's/\\u00EE/\xEE/g' \ --e 's/\\u00EF/\xEF/g' \ --e 's/\\u00F1/\xF1/g' \ --e 's/\\u00F2/\xF2/g' \ --e 's/\\u00F3/\xF3/g' \ --e 's/\\u00F4/\xF4/g' \ --e 's/\\u00F5/\xF5/g' \ --e 's/\\u00F6/\xF6/g' \ --e 's/\\u00F9/\xF9/g' \ --e 's/\\u00FA/\xFA/g' \ --e 's/\\u00FC/\xFC/g' \ --e 's/\\u0020/\x20/g' \ --e 's/\\u003f/\x3f/g' \ --e 's/\\u006f/\x6f/g' \ --e 's/\\u0075/\x75/g' \ --e 's/\\u00a0/\xa0/g' \ --e 's/\\u00a3/\xa3/g' \ --e 's/\\u00b0/\xb0/g' \ --e 's/\\u00ba/\xba/g' \ --e 's/\\u00bf/\xbf/g' \ --e 's/\\u00c1/\xc1/g' \ --e 's/\\u00c4/\xc4/g' \ --e 's/\\u00c5/\xc5/g' \ --e 's/\\u00c8/\xc8/g' \ --e 's/\\u00c9/\xc9/g' \ --e 's/\\u00ca/\xca/g' \ --e 's/\\u00cd/\xcd/g' \ --e 's/\\u00d6/\xd6/g' \ --e 's/\\u00dc/\xdc/g' \ --e 's/\\u00dd/\xdd/g' \ --e 's/\\u00df/\xdf/g' \ --e 's/\\u00e0/\xe0/g' \ --e 's/\\u00e1/\xe1/g' \ --e 's/\\u00e2/\xe2/g' \ --e 's/\\u00e3/\xe3/g' \ --e 's/\\u00e4/\xe4/g' \ --e 's/\\u00e5/\xe5/g' \ --e 's/\\u00e7/\xe7/g' \ --e 's/\\u00e8/\xe8/g' \ --e 's/\\u00e9/\xe9/g' \ --e 's/\\u00ea/\xea/g' \ --e 's/\\u00eb/\xeb/g' \ --e 's/\\u00ec/\xec/g' \ --e 's/\\u00ed/\xed/g' \ --e 's/\\u00ee/\xee/g' \ --e 's/\\u00ef/\xef/g' \ --e 's/\\u00f0/\xf0/g' \ --e 's/\\u00f1/\xf1/g' \ --e 's/\\u00f2/\xf2/g' \ --e 's/\\u00f3/\xf3/g' \ --e 's/\\u00f4/\xf4/g' \ --e 's/\\u00f5/\xf5/g' \ --e 's/\\u00f6/\xf6/g' \ --e 's/\\u00f7/\xf7/g' \ --e 's/\\u00f8/\xf8/g' \ --e 's/\\u00f9/\xf9/g' \ --e 's/\\u00fa/\xfa/g' \ --e 's/\\u00fc/\xfc/g' \ --e 's/\\u00ff/\xff/g' \ - | sed -e '/^#/d' -e '/^$/d' \ - -e :a -e '/\\$/N; s/\\\n//; ta' \ - -e 's/^[ \t]*//;s/[ \t]*$//' \ - -e 's/\\=/=/' | LANG=C sort > $OLD.cleaned - TMP=$(LANG=C diff $OLD.cleaned $NEW) -fi -if test -n "$TMP"; then - echo Files $OLD and $NEW differ -fi diff --git a/common/bin/exception_list_linux b/common/bin/exception_list_linux deleted file mode 100644 index 4dcf2724cbf..00000000000 --- a/common/bin/exception_list_linux +++ /dev/null @@ -1,114 +0,0 @@ -# -# Copyright (c) 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. -# - -# List of files inside jar archives that are ok if they differ. -LIST_DIFF_JAR=" -/sun/misc/Version.class -/sun/tools/jconsole/Version.class -/com/sun/tools/javac/resources/version.class -/com/sun/tools/javah/resources/version.class -/com/sun/tools/javap/resources/version.class -" - -# List of binaries that only need to match symbols -LIST_DIFF_SIZE=" -jre/lib/amd64/libfontmanager.so -jre/lib/amd64/libjdwp.so -jre/lib/amd64/libt2k.so -bin/unpack200 -jre/bin/unpack200 -jre/lib/amd64/libjsig.debuginfo -jre/lib/amd64/libsaproc.debuginfo -jre/lib/amd64/server/libjvm.debuginfo -" - -# List of binares that need to match both symbols and size -LIST_DIFF_BYTE=" -jre/lib/amd64/libdt_socket.so -jre/lib/amd64/libattach.so -jre/lib/amd64/libjaas_unix.so -jre/lib/amd64/libjawt.so -jre/lib/amd64/libjpeg.so -jre/lib/amd64/libjsdt.so -jre/lib/amd64/libjsig.so -jre/lib/amd64/libsaproc.so -jre/lib/amd64/libsctp.so -jre/lib/amd64/libsunec.so -jre/lib/amd64/libunpack.so -jre/lib/amd64/libverify.so -jre/lib/amd64/libzip.so -jre/lib/amd64/server/libjsig.so -jre/lib/amd64/server/libjvm.so -jre/lib/amd64/liblcms.so -demo/jvmti/heapTracker/lib/libheapTracker.so -demo/jvmti/hprof/lib/libhprof.so -demo/jvmti/minst/lib/libminst.so -demo/jvmti/mtrace/lib/libmtrace.so -demo/jvmti/waiters/lib/libwaiters.so -bin/appletviewer -bin/extcheck -bin/idlj -bin/jar -bin/jarsigner -bin/java -bin/javac -bin/javadoc -bin/javah -bin/javap -bin/jcmd -bin/jconsole -bin/jdb -bin/jhat -bin/jinfo -bin/jmap -bin/jps -bin/jrunscript -bin/jsadebugd -bin/jstack -bin/jstat -bin/jstatd -bin/keytool -bin/native2ascii -bin/orbd -bin/pack200 -bin/policytool -bin/rmic -bin/rmid -bin/rmiregistry -bin/schemagen -bin/serialver -bin/servertool -bin/tnameserv -bin/wsgen -bin/wsimport -bin/xjc -jre/bin/java -jre/bin/keytool -jre/bin/orbd -jre/bin/pack200 -jre/bin/policytool -jre/bin/rmid -jre/bin/rmiregistry -jre/bin/servertool -jre/bin/tnameserv -" diff --git a/common/bin/extractvcvars.sh b/common/bin/extractvcvars.sh deleted file mode 100644 index 32e7d6993bd..00000000000 --- a/common/bin/extractvcvars.sh +++ /dev/null @@ -1,53 +0,0 @@ -#!/bin/bash -# -# Copyright (c) 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. -# - -# Must be bash, but that is ok since we are running from cygwin. -# The first argument is the vcvarsall.bat file to run. -# The second argument is the arch arg to give to vcvars. -VCVARSALL="$1" -ARCH_ARG="$2" - -# Cannot use the VS10 setup script directly (since it only updates the DOS subshell environment) -# but calculate the difference in Cygwin environment before/after running it and then -# apply the diff. -_vs10varsall=`cygpath -a -m -s "$VCVARSALL"` -_dosvs10varsall=`cygpath -a -w -s $_vs10varsall` -_dosbash=`cygpath -a -w -s \`which bash\`.*` - -# generate the set of exported vars before/after the vs10 setup -echo "@echo off" > localdevenvtmp.bat -echo "$_dosbash -c \"export -p\" > localdevenvtmp.export0" >> localdevenvtmp.bat -echo "call $_dosvs10varsall $ARCH_ARG" >> localdevenvtmp.bat -echo "$_dosbash -c \"export -p\" > localdevenvtmp.export1" >> localdevenvtmp.bat -cmd /c localdevenvtmp.bat - -# apply the diff (less some non-vs10 vars named by "!") -sort localdevenvtmp.export0 |grep -v "!" > localdevenvtmp.export0.sort -sort localdevenvtmp.export1 |grep -v "!" > localdevenvtmp.export1.sort -comm -1 -3 localdevenvtmp.export0.sort localdevenvtmp.export1.sort > localdevenv.sh -cat localdevenv.sh | sed 's/declare -x /export /g' | sed 's/="/:="/g' | sed 's/\\\\/\\/g' | sed 's/"//g' | \ - sed 's/#/\$\(HASH\)/g' > localdevenv.gmk - -# cleanup -rm -f localdevenvtmp* diff --git a/common/bin/hide_important_warnings_from_javac.sh b/common/bin/hide_important_warnings_from_javac.sh index 412c71aa3ba..04336350a74 100644 --- a/common/bin/hide_important_warnings_from_javac.sh +++ b/common/bin/hide_important_warnings_from_javac.sh @@ -1,4 +1,4 @@ -#!/bin/sh +#!/bin/bash # # Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved. # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. diff --git a/common/bin/logger.sh b/common/bin/logger.sh index 70c3dab047c..46ab48ae47b 100644 --- a/common/bin/logger.sh +++ b/common/bin/logger.sh @@ -1,4 +1,4 @@ -#!/bin/sh +#!/bin/bash # # Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved. # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. diff --git a/common/bin/shell-tracer.sh b/common/bin/shell-tracer.sh new file mode 100644 index 00000000000..27a964c977e --- /dev/null +++ b/common/bin/shell-tracer.sh @@ -0,0 +1,47 @@ +#!/bin/bash +# +# Copyright (c) 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. +# + +# Usage: sh shell-tracer.sh +# +# This shell script is supposed to be set as a replacement for SHELL in make, +# causing it to be called whenever make wants to execute shell commands. +# The is suitable for passing on to the old shell, +# typically beginning with -c. +# +# This script will make sure the shell command line is executed with +# OLD_SHELL -x, and it will also store a simple log of the the time it takes to +# execute the command in the OUTPUT_FILE, using the "time" utility as pointed +# to by TIME_CMD. If TIME_CMD is "-", no timestamp will be stored. + +TIME_CMD="$1" +OUTPUT_FILE="$2" +OLD_SHELL="$3" +shift +shift +shift +if [ "$TIME_CMD" != "-" ]; then +"$TIME_CMD" -f "[TIME:%E] $*" -a -o "$OUTPUT_FILE" "$OLD_SHELL" -x "$@" +else +"$OLD_SHELL" -x "$@" +fi diff --git a/common/makefiles/HotspotWrapper.gmk b/common/makefiles/HotspotWrapper.gmk index 48f1c3854d9..8a1ae6447e6 100644 --- a/common/makefiles/HotspotWrapper.gmk +++ b/common/makefiles/HotspotWrapper.gmk @@ -36,9 +36,12 @@ include MakeBase.gmk default: all # Get all files except .hg in the hotspot directory. -HOTSPOT_FILES := $(shell $(FIND) $(HOTSPOT_TOPDIR) -name ".hg" -prune -o -print) +HOTSPOT_FILES := $(shell $(FIND) -L $(HOTSPOT_TOPDIR) -name ".hg" -prune -o -print) +# The old build creates hotspot output dir before calling hotspot and +# not doing it breaks builds on msys. $(HOTSPOT_OUTPUTDIR)/_hotspot.timestamp: $(HOTSPOT_FILES) + @$(MKDIR) -p $(HOTSPOT_OUTPUTDIR) @($(CD) $(HOTSPOT_TOPDIR)/make && $(MAKE) -j1 $(HOTSPOT_MAKE_ARGS) SPEC=$(HOTSPOT_SPEC) BASE_SPEC=$(BASE_SPEC)) $(TOUCH) $@ diff --git a/common/makefiles/IdlCompilation.gmk b/common/makefiles/IdlCompilation.gmk index 799c7d6fbf9..11f661a4622 100644 --- a/common/makefiles/IdlCompilation.gmk +++ b/common/makefiles/IdlCompilation.gmk @@ -59,7 +59,7 @@ define add_idl_package $(MKDIR) -p $3/$$($4_TMPDIR) $(RM) -rf $3/$$($4_TMPDIR) $(MKDIR) -p $(dir $5) - $(ECHO) Compiling IDL $(patsubst $2/%,%,$4) + $(ECHO) $(LOG_INFO) Compiling IDL $(patsubst $2/%,%,$4) $8 -td $3/$$($4_TMPDIR) \ -i $2/org/omg/CORBA \ -i $2/org/omg/PortableInterceptor \ @@ -79,15 +79,9 @@ define SetupIdlCompilation # param 1 is for example BUILD_IDLS # param 2,3,4,5,6,7,8 are named args. # IDLJ,SRC,BIN,INCLUDES,EXCLUDES,OLDIMPLBASES,DELETES -$(if $2,$1_$(strip $2)) -$(if $3,$1_$(strip $3)) -$(if $4,$1_$(strip $4)) -$(if $5,$1_$(strip $5)) -$(if $6,$1_$(strip $6)) -$(if $7,$1_$(strip $7)) -$(if $8,$1_$(strip $8)) -$(if $9,$1_$(strip $9)) -$(if $(10),$(error Internal makefile error: Too many arguments to SetupIdlCompilation, please update IdlCompilation.gmk)) +$(foreach i,2 3 4 5 6 7 8 9 10 11 12 13 14 15, $(if $($i),$1_$(strip $($i)))$(NEWLINE)) +$(call LogSetupMacroEntry,SetupIdlCompilation($1),$2,$3,$4,$5,$6,$7,$8,$9,$(10),$(11),$(12),$(13),$(14),$(15)) +$(if $(16),$(error Internal makefile error: Too many arguments to SetupIdlCompilation, please update IdlCompilation.gmk)) # Remove any relative addressing in the paths. $1_SRC := $$(abspath $$($1_SRC)) diff --git a/common/makefiles/JavaCompilation.gmk b/common/makefiles/JavaCompilation.gmk index 1e8593f9d54..06726629533 100644 --- a/common/makefiles/JavaCompilation.gmk +++ b/common/makefiles/JavaCompilation.gmk @@ -50,27 +50,17 @@ define SetupJavaCompiler # FLAGS:=Flags to be supplied to javac # SERVER_DIR:=Use a javac server (-XDserver) and store the server related files here # SERVER_JVM:=Use this JVM for the server. Defaults to the JVM above. - $(if $2,$1_$(strip $2)) - $(if $3,$1_$(strip $3)) - $(if $4,$1_$(strip $4)) - $(if $5,$1_$(strip $5)) - $(if $6,$1_$(strip $6)) - $(if $7,$1_$(strip $7)) - $(if $8,$1_$(strip $8)) - $(if $9,$1_$(strip $9)) - $(if $(10),$(error Internal makefile error: Too many arguments to SetupJavaCompiler, please update JavaCompilation.gmk)) + $(foreach i,2 3 4 5 6 7 8 9 10 11 12 13 14 15, $(if $($i),$1_$(strip $($i)))$(NEWLINE)) + $(call LogSetupMacroEntry,SetupJavaCompiler($1),$2,$3,$4,$5,$6,$7,$8,$9,$(10),$(11),$(12),$(13),$(14),$(15)) + $(if $(16),$(error Internal makefile error: Too many arguments to SetupJavaCompiler, please update JavaCompilation.gmk)) - ifeq ($$(ENABLE_SJAVAC),yes) - # The port file contains the tcp/ip on which the server listens - # and the cookie necessary to talk to the server. - $1_JAVAC_PORTFILE:=$$($1_SERVER_DIR)/server.port - # You can use a different JVM to run the background javac server. - ifeq ($$($1_SERVER_JVM),) - # It defaults to the same JVM that is used to start the javac command. - $1_SERVER_JVM:=$$($1_JVM) - endif - # Set the $1_REMOTE to spawn a background javac server. - $1_REMOTE:=-XDserver:portfile=$$($1_JAVAC_PORTFILE),poolsize=$(SJAVAC_SERVER_CORES),id=$1,javac=$$(subst $$(SPACE),%20,$$(subst $$(COMMA),%2C,$$(strip $$($1_SERVER_JVM) $$($1_JAVAC)))) + # The port file contains the tcp/ip on which the server listens + # and the cookie necessary to talk to the server. + $1_SJAVAC_PORTFILE:=$$($1_SERVER_DIR)/server.port + # You can use a different JVM to run the background javac server. + ifeq ($$($1_SERVER_JVM),) + # It defaults to the same JVM that is used to start the javac command. + $1_SERVER_JVM:=$$($1_JVM) endif endef @@ -92,19 +82,11 @@ define SetupArchive # added to the archive. # EXTRA_MANIFEST_ATTR:=Extra attribute to add to manifest. # CHECK_COMPRESS_JAR Check the COMPRESS_JAR variable - $(if $3,$1_$(strip $3)) - $(if $4,$1_$(strip $4)) - $(if $5,$1_$(strip $5)) - $(if $6,$1_$(strip $6)) - $(if $7,$1_$(strip $7)) - $(if $8,$1_$(strip $8)) - $(if $9,$1_$(strip $9)) - $(if $(10),$1_$(strip $(10))) - $(if $(11),$1_$(strip $(11))) - $(if $(12),$1_$(strip $(12))) - $(if $(13),$1_$(strip $(13))) - $(if $(14),$1_$(strip $(14))) - $(if $(15),$1_$(strip $(15))) + + # NOTE: $2 is dependencies, not a named argument! + $(foreach i,3 4 5 6 7 8 9 10 11 12 13 14 15, $(if $($i),$1_$(strip $($i)))$(NEWLINE)) + $(call LogSetupMacroEntry,SetupArchive($1),,$3,$4,$5,$6,$7,$8,$9,$(10),$(11),$(12),$(13),$(14),$(15)) + $(if $(findstring $(LOG),debug trace), $(info *[2] = $(strip $2))) $(if $(16),$(error Internal makefile error: Too many arguments to SetupArchive, please update JavaCompilation.gmk)) $1_JARMAIN:=$(strip $$($1_JARMAIN)) @@ -125,16 +107,28 @@ define SetupArchive ifneq (,$$($1_INCLUDES)) $1_GREP_INCLUDE_PATTERNS:=$$(foreach src,$$($1_SRCS),\ $$(addprefix $$(src)/,$$($1_INCLUDES))) - $$(eval $$(call ListPathsSafelyNow,$1_GREP_INCLUDE_PATTERNS,\n, \ + # If there are a lot of include patterns, output to file to shorten command lines + ifeq ($$(word 20,$$($1_GREP_INCLUDE_PATTERNS)),) + $1_GREP_INCLUDES:=| $(GREP) $$(patsubst %,$(SPACE)-e$(SPACE)$(DQUOTE)%$(DQUOTE),$$($1_GREP_INCLUDE_PATTERNS)) + else + $$(shell $(RM) $$($1_BIN)/_the.$$($1_JARNAME)_include) + $$(eval $$(call ListPathsSafelyNow,$1_GREP_INCLUDE_PATTERNS,\n, \ >> $$($1_BIN)/_the.$$($1_JARNAME)_include)) - $1_GREP_INCLUDES:=| $(GREP) -f $$($1_BIN)/_the.$$($1_JARNAME)_include + $1_GREP_INCLUDES:=| $(GREP) -f $$($1_BIN)/_the.$$($1_JARNAME)_include + endif endif ifneq (,$$($1_EXCLUDES)$$($1_EXCLUDE_FILES)) $1_GREP_EXCLUDE_PATTERNS:=$$(foreach src,$$($1_SRCS),$$(addprefix $$(src)/,\ $$($1_EXCLUDES) $$($1_EXCLUDE_FILES))) - $$(eval $$(call ListPathsSafelyNow,$1_GREP_EXCLUDE_PATTERNS,\n, \ + # If there are a lot of include patterns, output to file to shorten command lines + ifeq ($$(word 20,$$($1_GREP_EXCLUDE_PATTERNS)),) + $1_GREP_EXCLUDES:=| $(GREP) -v $$(patsubst %,$(SPACE)-e$(SPACE)$(DQUOTE)%$(DQUOTE),$$($1_GREP_EXCLUDE_PATTERNS)) + else + $$(shell $(RM) $$($1_BIN)/_the.$$($1_JARNAME)_exclude) + $$(eval $$(call ListPathsSafelyNow,$1_GREP_EXCLUDE_PATTERNS,\n, \ >> $$($1_BIN)/_the.$$($1_JARNAME)_exclude)) - $1_GREP_EXCLUDES:=| $(GREP) -v -f $$($1_BIN)/_the.$$($1_JARNAME)_exclude + $1_GREP_EXCLUDES:=| $(GREP) -v -f $$($1_BIN)/_the.$$($1_JARNAME)_exclude + endif endif # Check if this jar needs to have its index generated. @@ -149,11 +143,13 @@ define SetupArchive ifneq (,$2) $1_DEPS:=$2 else - $1_DEPS:=$$(foreach src,$$($1_SRCS),$$(shell ($(FIND) $$(src) -type f \ - -a \( $$($1_FIND_PATTERNS) \) $$($1_GREP_INCLUDES) \ - $$($1_GREP_EXCLUDES) && $(ECHO) $$(addprefix $$(src)/,$$($1_EXTRA_FILES))))) + # The subst of \ is needed because $ has to be escaped with \ in EXTRA_FILES for the command + # lines, but not here for use in make dependencies. + $1_DEPS:=$$(shell $(FIND) $$($1_SRCS) -type f -a \( $$($1_FIND_PATTERNS) \) \ + $$($1_GREP_INCLUDES) $$($1_GREP_EXCLUDES)) \ + $$(subst \,,$$(foreach src,$$($1_SRCS),$$(addprefix $$(src)/,$$($1_EXTRA_FILES)))) ifeq (,$$($1_SKIP_METAINF)) - $1_DEPS+=$$(foreach src,$$($1_SRCS),$$(shell $(FIND) $$(src)/META-INF -type f 2> /dev/null)) + $1_DEPS+=$$(shell $(FIND) $$(addsuffix /META-INF,$$($1_SRCS)) -type f 2> /dev/null)) endif endif @@ -161,34 +157,39 @@ define SetupArchive # The capture contents macro finds all files (matching the patterns, typically # .class and .prp) that are newer than the jar-file, ie the new content to be put into the jar. - $1_CAPTURE_CONTENTS=$$(foreach src,$$($1_SRCS),(($(FIND) $$(src) -type f -a \( $$($1_FIND_PATTERNS) \) -a -newer $$@ $$($1_GREP_INCLUDES) $$($1_GREP_EXCLUDES) && $(ECHO) $$($1_EXTRA_FILES)) | $(SED) 's|$$(src)/||g' > $$(src)/_the.$$($1_JARNAME)_contents) && ) + $1_CAPTURE_CONTENTS=$$(foreach src,$$($1_SRCS),\ + (($(FIND) $$(src) -type f -a \( $$($1_FIND_PATTERNS) \) -a -newer $$@ $$($1_GREP_INCLUDES) \ + $$($1_GREP_EXCLUDES) | $(SED) 's|$$(src)/||g' &&\ + $(ECHO) $$(subst $$(src)/,,$$($1_EXTRA_FILES))) > \ + $$(src)/_the.$$($1_JARNAME)_contents) $$(NEWLINE)) # The capture metainf macro finds all files below the META-INF directory that are newer than the jar-file. ifeq (,$$($1_SKIP_METAINF)) - $1_CAPTURE_METAINF =$$(foreach src,$$($1_SRCS),($(FIND) $$(src)/META-INF -type f -a -newer $$@ 2> /dev/null | $(SED) 's|$$(src)/||g' >> $$(src)/_the.$$($1_JARNAME)_contents ) && ) + $1_CAPTURE_METAINF =$$(foreach src,$$($1_SRCS),($(FIND) $$(src)/META-INF -type f -a -newer $$@ 2> /dev/null | $(SED) 's|$$(src)/||g' >> $$(src)/_the.$$($1_JARNAME)_contents ) $$(NEWLINE)) endif # The capture deletes macro finds all deleted files and concatenates them. The resulting file # tells us what to remove from the jar-file. - $1_CAPTURE_DELETES=$$(foreach src,$$($1_SRCS),($(FIND) $$(src) -name _the.package.deleted -newer $$@ -exec $(SED) 's|$$(src)||g' \{\} >> $$($1_DELETES_FILE) \;) &&) + $1_CAPTURE_DELETES=$$(foreach src,$$($1_SRCS),($(FIND) $$(src) -name _the.package.deleted -newer $$@ -exec $(SED) 's|$$(src)||g' \{\} >> $$($1_DELETES_FILE) \;) $$(NEWLINE)) # The update contents macro updates the jar file with the previously capture contents. $1_UPDATE_CONTENTS=$$(foreach src,$$($1_SRCS),\ (cd $$(src) && \ if [ -s _the.$$($1_JARNAME)_contents ]; then \ $(ECHO) " updating" `$(WC) -l _the.$$($1_JARNAME)_contents | $(AWK) '{ print $$$$1 }'` files && \ $(JAR) $$($1_JAR_UPDATE_OPTIONS) $$@ @_the.$$($1_JARNAME)_contents; \ - fi) &&) + fi) $$(NEWLINE)) # The s-variants of the above macros are used when the jar is created from scratch. $1_SCAPTURE_CONTENTS=$$(foreach src,$$($1_SRCS),\ (($(FIND) $$(src) -type f -a \( $$($1_FIND_PATTERNS) \) $$($1_GREP_INCLUDES) \ - $$($1_GREP_EXCLUDES) && $(ECHO) $$($1_EXTRA_FILES)) | $(SED) 's|$$(src)/||g' > \ - $$(src)/_the.$$($1_JARNAME)_contents) && ) + $$($1_GREP_EXCLUDES) | $(SED) 's|$$(src)/||g' &&\ + $$(subst $$(src)/,,$(ECHO) $$($1_EXTRA_FILES))) > \ + $$(src)/_the.$$($1_JARNAME)_contents) $$(NEWLINE)) ifeq (,$$($1_SKIP_METAINF)) $1_SCAPTURE_METAINF=$$(foreach src,$$($1_SRCS),\ ($(FIND) $$(src)/META-INF -type f 2> /dev/null | $(SED) 's|$$(src)/||g' >> \ - $$(src)/_the.$$($1_JARNAME)_contents) && ) + $$(src)/_the.$$($1_JARNAME)_contents) $$(NEWLINE)) endif $1_SUPDATE_CONTENTS=$$(foreach src,$$($1_SRCS),\ - (cd $$(src) && $(JAR) $$($1_JAR_UPDATE_OPTIONS) $$@ @$$(src)/_the.$$($1_JARNAME)_contents) &&) + (cd $$(src) && $(JAR) $$($1_JAR_UPDATE_OPTIONS) $$@ @$$(src)/_the.$$($1_JARNAME)_contents) $$(NEWLINE)) # Use a slightly shorter name for logging, but with enough path to identify this jar. $1_NAME:=$$(subst $$(OUTPUT_ROOT)/,,$$($1_JAR)) @@ -208,38 +209,32 @@ define SetupArchive # Here is the rule that creates/updates the jar file. $$($1_JAR) : $$($1_DEPS) $(MKDIR) -p $$($1_BIN) - if [ -n "$$($1_MANIFEST)" ]; then \ + $$(if $$($1_MANIFEST),\ $(SED) -e "s#@@RELEASE@@#$(RELEASE)#" \ - -e "s#@@COMPANY_NAME@@#$(COMPANY_NAME)#" $$($1_MANIFEST) > $$($1_MANIFEST_FILE); \ - else \ - $(RM) $$($1_MANIFEST_FILE) && $(TOUCH) $$($1_MANIFEST_FILE); \ - fi - if [ -n "$$(strip $$($1_JARMAIN))" ]; then \ - $(ECHO) "Main-Class: $$(strip $$($1_JARMAIN))" >> $$($1_MANIFEST_FILE); \ - fi - if [ -n "$$($1_EXTRA_MANIFEST_ATTR)" ]; then \ - $(PRINTF) "$$($1_EXTRA_MANIFEST_ATTR)\n" >> $$($1_MANIFEST_FILE); \ - fi - +if [ -s $$@ ]; then \ - $(ECHO) Modifying $$($1_NAME) && \ + -e "s#@@COMPANY_NAME@@#$(COMPANY_NAME)#" $$($1_MANIFEST) > $$($1_MANIFEST_FILE) \ + ,\ + $(RM) $$($1_MANIFEST_FILE) && $(TOUCH) $$($1_MANIFEST_FILE)) + $$(if $$($1_JARMAIN),$(ECHO) "Main-Class: $$(strip $$($1_JARMAIN))" >> $$($1_MANIFEST_FILE)) + $$(if $$($1_EXTRA_MANIFEST_ATTR),$(PRINTF) "$$($1_EXTRA_MANIFEST_ATTR)\n" >> $$($1_MANIFEST_FILE)) + $$(if $$(wildcard $$@),\ + $(ECHO) Modifying $$($1_NAME) $$(NEWLINE)\ $$($1_CAPTURE_CONTENTS) \ $$($1_CAPTURE_METAINF) \ - $(RM) $$($1_DELETES_FILE) && \ + $(RM) $$($1_DELETES_FILE) $$(NEWLINE)\ $$($1_CAPTURE_DELETES) \ - $(CAT) $$($1_DELETES_FILE) > $$($1_DELETESS_FILE) && \ + $(CAT) $$($1_DELETES_FILE) > $$($1_DELETESS_FILE) $$(NEWLINE)\ if [ -s $$($1_DELETESS_FILE) ]; then \ $(ECHO) " deleting" `$(WC) -l $$($1_DELETESS_FILE) | $(AWK) '{ print $$$$1 }'` files && \ $(ZIP) -q -d $$@ `$(CAT) $$($1_DELETESS_FILE)` ; \ - fi && \ - $$($1_UPDATE_CONTENTS) true && \ - $$($1_JARINDEX) && true ; \ - else \ - $(ECHO) Creating $$($1_NAME) && $(JAR) $$($1_JAR_CREATE_OPTIONS) $$@ $$($1_MANIFEST_FILE) && \ + fi $$(NEWLINE) \ + $$($1_UPDATE_CONTENTS) true $$(NEWLINE) \ + $$($1_JARINDEX) && true \ + ,\ + $(ECHO) Creating $$($1_NAME) && $(JAR) $$($1_JAR_CREATE_OPTIONS) $$@ $$($1_MANIFEST_FILE) $$(NEWLINE) \ $$($1_SCAPTURE_CONTENTS) \ $$($1_SCAPTURE_METAINF) \ $$($1_SUPDATE_CONTENTS) \ - $$($1_JARINDEX) && true ; \ - fi; + $$($1_JARINDEX) && true ) endef @@ -247,15 +242,9 @@ define SetupZipArchive # param 1 is for example ZIP_MYSOURCE # param 2,3,4,5,6,7,8,9 are named args. # SRC,ZIP,INCLUDES,EXCLUDES,EXCLUDE_FILES,SUFFIXES,EXTRA_DEPS - $(if $2,$1_$(strip $2)) - $(if $3,$1_$(strip $3)) - $(if $4,$1_$(strip $4)) - $(if $5,$1_$(strip $5)) - $(if $6,$1_$(strip $6)) - $(if $7,$1_$(strip $7)) - $(if $8,$1_$(strip $8)) - $(if $9,$1_$(strip $9)) - $(if $(10),$(error Internal makefile error: Too many arguments to SetupZipArchive, please update JavaCompilation.gmk)) + $(foreach i,2 3 4 5 6 7 8 9 10 11 12 13 14 15, $(if $($i),$1_$(strip $($i)))$(NEWLINE)) + $(call LogSetupMacroEntry,SetupZipArchive($1),$2,$3,$4,$5,$6,$7,$8,$9,$(10),$(11),$(12),$(13),$(14),$(15)) + $(if $(16),$(error Internal makefile error: Too many arguments to SetupZipArchive, please update JavaCompilation.gmk)) # Find all files in the source tree. $1_SUFFIX_FILTER := $$(patsubst %,-o -name $(DQUOTE)*%$(DQUOTE),$$($1_SUFFIXES)) @@ -274,7 +263,7 @@ define SetupZipArchive ifneq ($$($1_EXCLUDES),) $1_SRC_EXCLUDES := $$(foreach i,$$($1_SRC),$$(addprefix $$i/,$$(addsuffix /%,$$($1_EXCLUDES)))) $1_ZIP_EXCLUDES := $$(addprefix -x$(SPACE)$(DQUOTE),$$(addsuffix /*$(DQUOTE),$$($1_EXCLUDES))) - $1_ALL_SRCS := $$(filter-out $$($1_SRC_EXCLUDES),$$($1_SRC)) + $1_ALL_SRCS := $$(filter-out $$($1_SRC_EXCLUDES),$$($1_ALL_SRCS)) endif # Use a slightly shorter name for logging, but with enough path to identify this zip. @@ -288,7 +277,7 @@ define SetupZipArchive $$($1_ZIP) : $$($1_ALL_SRCS) $$($1_EXTRA_DEPS) $(MKDIR) -p $$(@D) $(ECHO) Updating $$($1_NAME) - $$(foreach i,$$($1_SRC),(cd $$i && $(ZIP) -qru $$@ . $$($1_ZIP_INCLUDES) $$($1_ZIP_EXCLUDES) -x \*_the.\* $$(addprefix -x$(SPACE),$$(patsubst $$i/%,%,$$($1_EXCLUDE_FILES)))) ;) true + $$(foreach i,$$($1_SRC),(cd $$i && $(ZIP) -qru $$@ . $$($1_ZIP_INCLUDES) $$($1_ZIP_EXCLUDES) -x \*_the.\* $$(addprefix -x$(SPACE),$$(patsubst $$i/%,%,$$($1_EXCLUDE_FILES))))$$(NEWLINE)) true $(TOUCH) $$@ endef @@ -324,7 +313,7 @@ define add_file_to_copy_and_clean $$($1_BIN)$$($2_TARGET) : $2 $(MKDIR) -p $$(@D) $(CAT) $$< | $(SED) -e 's/\([^\\]\):/\1\\:/g' -e 's/\([^\\]\)=/\1\\=/g' -e 's/#.*/#/g' \ - | $(SED) -f "$(SRC_ROOT)/common/bin/unicode2x.sed" \ + | $(SED) -f "$(SRC_ROOT)/common/makefiles/support/unicode2x.sed" \ | $(SED) -e '/^#/d' -e '/^$$$$/d' \ -e :a -e '/\\$$$$/N; s/\\\n//; ta' \ -e 's/^[ \t]*//;s/[ \t]*$$$$//' \ @@ -364,36 +353,27 @@ define SetupJavaCompilation # Its only here until we cleanup some nasty source code pasta in the jdk. # HEADERS:=path to directory where all generated c-headers are written. # DEPENDS:=Extra dependecy - $(if $2,$1_$(strip $2)) - $(if $3,$1_$(strip $3)) - $(if $4,$1_$(strip $4)) - $(if $5,$1_$(strip $5)) - $(if $6,$1_$(strip $6)) - $(if $7,$1_$(strip $7)) - $(if $8,$1_$(strip $8)) - $(if $9,$1_$(strip $9)) - $(if $(10),$1_$(strip $(10))) - $(if $(11),$1_$(strip $(11))) - $(if $(12),$1_$(strip $(12))) - $(if $(13),$1_$(strip $(13))) - $(if $(14),$1_$(strip $(14))) - $(if $(15),$(error Internal makefile error: Too many arguments to SetupJavaCompilation, please update JavaCompilation.gmk)) + $(foreach i,2 3 4 5 6 7 8 9 10 11 12 13 14 15, $(if $($i),$1_$(strip $($i)))$(NEWLINE)) + $(call LogSetupMacroEntry,SetupJavaCompilation($1),$2,$3,$4,$5,$6,$7,$8,$9,$(10),$(11),$(12),$(13),$(14),$(15)) + $(if $(16),$(error Internal makefile error: Too many arguments to SetupJavaCompilation, please update JavaCompilation.gmk)) # Extract the info from the java compiler setup. - $1_REMOTE := $$($$($1_SETUP)_REMOTE) $1_JVM := $$($$($1_SETUP)_JVM) $1_JAVAC := $$($$($1_SETUP)_JAVAC) $1_FLAGS := $$($$($1_SETUP)_FLAGS) $(JAVAC_FLAGS) $$($1_ADD_JAVAC_FLAGS) ifeq ($$($1_JAVAC),) $$(error The Java compilation $1 refers to a non-existant java compiler setup $$($1_SETUP)) endif + $1_SJAVAC_PORTFILE := $$($$($1_SETUP)_SJAVAC_PORTFILE) + $1_SERVER_JVM := $$($$($1_SETUP)_SERVER_JVM) # Handle addons and overrides. $1_SRC:=$$(call ADD_SRCS,$$($1_SRC)) # Make sure the dirs exist. - $$(shell $(MKDIR) -p $$($1_SRC) $$($1_BIN)) + $$(foreach d,$$($1_SRC), $$(if $$(wildcard $$d),,$$(error SRC specified to SetupJavaCompilation $1 contains missing directory $$d))) + $$(eval $$(call MakeDir,$$($1_BIN))) # Find all files in the source trees. - $1_ALL_SRCS := $$(filter-out $(OVR_SRCS),$$(foreach i,$$($1_SRC),$$(shell $(FIND) $$i -type f))) + $1_ALL_SRCS := $$(filter-out $(OVR_SRCS),$$(shell $(FIND) $$($1_SRC) -type f)) # Extract the java files. ifneq ($$($1_EXCLUDE_FILES),) $1_EXCLUDE_FILES_PATTERN:=$$(addprefix %,$$($1_EXCLUDE_FILES)) @@ -428,7 +408,7 @@ define SetupJavaCompilation # Rewrite list of patterns into a find statement. $1_COPY_PATTERN:=$(FALSE_FIND_PATTERN) $$(patsubst %,$(SPACE)-o$(SPACE)-name$(SPACE)$(DQUOTE)*%$(DQUOTE),$$($1_COPY)) # Search for all files to be copied. - $1_ALL_COPIES := $$(foreach i,$$($1_SRC), $$(shell $(FIND) $$i \( $$($1_COPY_PATTERN) \) -a -type f)) + $1_ALL_COPIES := $$(filter $$(addprefix %,$$($1_COPY)),$$($1_ALL_SRCS)) # Copy these explicitly $1_ALL_COPIES += $$($1_COPY_FILES) # Copy must also respect filters. @@ -442,7 +422,7 @@ define SetupJavaCompilation $1_ALL_COPIES := $$(filter-out $$($1_EXCLUDE_FILES_PATTERN),$$($1_ALL_COPIES)) endif # All files below META-INF are always copied. - $1_ALL_COPIES += $$(foreach i,$$($1_SRC), $$(shell $(FIND) $$i/META-INF -type f 2> /dev/null)) + $1_ALL_COPIES += $$(filter $$(addsuffix /META-INF%,$$($1_SRC)),$$($1_ALL_SRCS)) ifneq (,$$($1_ALL_COPIES)) # Yep, there are files to be copied! $1_ALL_COPY_TARGETS:= @@ -456,7 +436,7 @@ define SetupJavaCompilation # Rewrite list of patterns into a find statement. $1_CLEAN_PATTERN:=$(FALSE_FIND_PATTERN) $$(patsubst %,$(SPACE)-o$(SPACE)-name$(SPACE)$(DQUOTE)*%$(DQUOTE),$$($1_CLEAN)) # Search for all files to be copied. - $1_ALL_CLEANS := $$(foreach i,$$($1_SRC), $$(shell $(FIND) $$i \( $$($1_CLEAN_PATTERN) \) -a -type f)) + $1_ALL_CLEANS := $$(filter $$(addprefix %,$$($1_CLEAN)),$$($1_ALL_SRCS)) # Copy and clean must also respect filters. ifneq (,$$($1_INCLUDES)) $1_ALL_CLEANS := $$(filter $$($1_SRC_INCLUDES),$$($1_ALL_CLEANS)) @@ -482,30 +462,64 @@ define SetupJavaCompilation $$(eval $$(call replace_space_with_pathsep,$1_SRCROOTSC,$$($1_SRC))) endif - ifneq (,$$($1_HEADERS)) - $1_HEADERS_ARG := -h $$($1_HEADERS) - endif - # Create a sed expression to remove the source roots and to replace / with . # and remove .java at the end. $1_REWRITE_INTO_CLASSES:=$$(foreach i,$$($1_SRC),-e 's|$$i/||g') -e 's|/|.|g' -e 's|.java$$$$||g' ifeq ($$($1_DISABLE_SJAVAC)x$$(ENABLE_SJAVAC),xyes) + ifneq (,$$($1_HEADERS)) + $1_HEADERS_ARG := -h $$($1_HEADERS) + endif + # Using sjavac to compile. $1 := $$($1_ALL_COPY_TARGETS) $$($1_ALL_COPY_CLEAN_TARGETS) $$($1_BIN)/javac_state + # Create SJAVAC variable, + # expects $1_JAVAC to be "bootclasspathprepend -jar ...javac.jar" + # and it is rewritten into "bootclasspathprepend com.sun.tools.sjavac.Main" + $1_SJAVAC:=$$(word 1,$$($1_JAVAC)) -cp $$(word 3,$$($1_JAVAC)) com.sun.tools.sjavac.Main + + # Set the $1_REMOTE to spawn a background javac server. + $1_REMOTE:=--server:portfile=$$($1_SJAVAC_PORTFILE),id=$1,sjavac=$$(subst $$(SPACE),%20,$$(subst $$(COMMA),%2C,$$(strip $$($1_SERVER_JVM) $$($1_SJAVAC)))) + $$($1_BIN)/javac_state: $$($1_SRCS) $$($1_DEPENDS) $(MKDIR) -p $$(@D) $$(call ListPathsSafely,$1_SRCS,\n, >> $$($1_BIN)/_the.batch.tmp) $(ECHO) Compiling $1 - $$($1_JVM) $$(word 1,$$($1_JAVAC)) com.sun.tools.sjavac.Main \ - $$($1_REMOTE) $$($1_SJAVAC_ARGS) --permit-unidentified-artifacts -mfl $$($1_BIN)/_the.batch.tmp \ + ($$($1_JVM) $$($1_SJAVAC) \ + $$($1_REMOTE) \ + -j $(NUM_CORES) \ + --permit-unidentified-artifacts \ + --permit-sources-without-package \ + --compare-found-sources $$($1_BIN)/_the.batch.tmp \ + --log=$(LOG) \ + $$($1_SJAVAC_ARGS) \ $$($1_FLAGS) \ - -implicit:none -d $$($1_BIN) $$($1_HEADERS_ARG) + $$($1_HEADERS_ARG) \ + -d $$($1_BIN) && \ + $(MV) $$($1_BIN)/_the.batch.tmp $$($1_BIN)/_the.batch) else # Using plain javac to batch compile everything. $1 := $$($1_ALL_COPY_TARGETS) $$($1_ALL_COPY_CLEAN_TARGETS) $$($1_BIN)/_the.batch + # When buliding in batch, put headers in a temp dir to filter out those that actually + # changed before copying them to the real header dir. + ifneq (,$$($1_HEADERS)) + $1_HEADERS_ARG := -h $$($1_HEADERS).tmp + + $$($1_HEADERS)/_the.headers: $$($1_BIN)/_the.batch + $(MKDIR) -p $$(@D) + for f in `ls $$($1_HEADERS).tmp`; do \ + if [ ! -f "$$($1_HEADERS)/$$$$f" ] || [ "`$(DIFF) $$($1_HEADERS)/$$$$f $$($1_HEADERS).tmp/$$$$f`" != "" ]; then \ + $(CP) -f $$($1_HEADERS).tmp/$$$$f $$($1_HEADERS)/$$$$f; \ + fi; \ + done + $(RM) -r $$($1_HEADERS).tmp + $(TOUCH) $$@ + + $1 += $$($1_HEADERS)/_the.headers + endif + # When not using sjavac, pass along all sources to javac using an @file. $$($1_BIN)/_the.batch: $$($1_SRCS) $$($1_DEPENDS) $(MKDIR) -p $$(@D) @@ -516,6 +530,7 @@ define SetupJavaCompilation -implicit:none -sourcepath "$$($1_SRCROOTSC)" \ -d $$($1_BIN) $$($1_HEADERS_ARG) @$$($1_BIN)/_the.batch.tmp && \ $(MV) $$($1_BIN)/_the.batch.tmp $$($1_BIN)/_the.batch) + endif # Check if a jar file was specified, then setup the rules for the jar. diff --git a/common/makefiles/Main.gmk b/common/makefiles/Main.gmk new file mode 100644 index 00000000000..b9322aba81a --- /dev/null +++ b/common/makefiles/Main.gmk @@ -0,0 +1,208 @@ +# +# Copyright (c) 2011, 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. 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. +# + +### This is the main part of the Makefile, for the normal case with SPEC specifying a single existing spec.gmk file. + +# Now load the spec +include $(SPEC) + +# Load the vital tools for all the makefiles. +include $(SRC_ROOT)/common/makefiles/MakeBase.gmk + +# Include the corresponding custom file, if present. +-include $(CUSTOM_MAKE_DIR)/Main.gmk + +### Clean up from previous run + +# Remove any build.log from a previous run, if they exist +ifneq (,$(BUILD_LOG)) + ifneq (,$(BUILD_LOG_PREVIOUS)) + # Rotate old log + $(shell $(RM) $(BUILD_LOG_PREVIOUS) 2> /dev/null) + $(shell $(MV) $(BUILD_LOG) $(BUILD_LOG_PREVIOUS) 2> /dev/null) + else + $(shell $(RM) $(BUILD_LOG) 2> /dev/null) + endif + $(shell $(RM) $(OUTPUT_ROOT)/build-trace-time.log 2> /dev/null) +endif +# Remove any javac server logs and port files. This +# prevents a new make run to reuse the previous servers. +ifneq (,$(SJAVAC_SERVER_DIR)) + $(shell $(MKDIR) -p $(SJAVAC_SERVER_DIR) && $(RM) -rf $(SJAVAC_SERVER_DIR)/*) +endif + +# Reset the build timers. +$(eval $(call ResetAllTimers)) + +# Setup number of jobs to use. -jN is unfortunately not available for us to parse from the command line, +# hence this workaround. +ifeq ($(JOBS),) + JOBS=$(NUM_CORES) +endif +MAKE_ARGS:=$(MAKE_ARGS) -j$(JOBS) + +### Main targets + +all: jdk + +start-make: + @$(call AtMakeStart) + +langtools: langtools-only +langtools-only: start-make + @$(call TargetEnter) + @($(CD) $(LANGTOOLS_TOPDIR)/makefiles && $(BUILD_LOG_WRAPPER) $(MAKE) $(MAKE_ARGS) -f BuildLangtools.gmk) + @$(call TargetExit) + +corba: langtools corba-only +corba-only: start-make + @$(call TargetEnter) + @($(CD) $(CORBA_TOPDIR)/makefiles && $(BUILD_LOG_WRAPPER) $(MAKE) $(MAKE_ARGS) -f BuildCorba.gmk) + @$(call TargetExit) + +jaxp: langtools jaxp-only +jaxp-only: start-make + @$(call TargetEnter) + @($(CD) $(JAXP_TOPDIR)/makefiles && $(BUILD_LOG_WRAPPER) $(MAKE) $(MAKE_ARGS) -f BuildJaxp.gmk) + @$(call TargetExit) + +jaxws: langtools jaxp jaxws-only +jaxws-only: start-make + @$(call TargetEnter) + @($(CD) $(JAXWS_TOPDIR)/makefiles && $(BUILD_LOG_WRAPPER) $(MAKE) $(MAKE_ARGS) -f BuildJaxws.gmk) + @$(call TargetExit) + +hotspot: hotspot-only +hotspot-only: start-make + @$(call TargetEnter) + @($(CD) $(SRC_ROOT)/common/makefiles && $(BUILD_LOG_WRAPPER) $(MAKE) $(MAKE_ARGS) -f HotspotWrapper.gmk) + @$(call TargetExit) + +jdk: langtools hotspot corba jaxp jaxws jdk-only +jdk-only: start-make + @$(call TargetEnter) + @($(CD) $(JDK_TOPDIR)/makefiles && $(BUILD_LOG_WRAPPER) $(MAKE) $(MAKE_ARGS) -f BuildJdk.gmk $(JDK_TARGET)) + @$(call TargetExit) + +demos: jdk demos-only +demos-only: start-make + @$(call TargetEnter) + @($(CD) $(JDK_TOPDIR)/makefiles && $(BUILD_LOG_WRAPPER) $(MAKE) $(MAKE_ARGS) -f BuildJdk.gmk demos) + @$(call TargetExit) + +images: source-tips demos images-only +images-only: start-make + @$(call TargetEnter) + @($(CD) $(JDK_TOPDIR)/makefiles && $(BUILD_LOG_WRAPPER) $(MAKE) $(MAKE_ARGS) -f BuildJdk.gmk images) + @$(call TargetExit) + +overlay-images: source-tips demos overlay-images-only +overlay-images-only: start-make + @$(call TargetEnter) + @($(CD) $(JDK_TOPDIR)/makefiles && $(BUILD_LOG_WRAPPER) $(MAKE) $(MAKE_ARGS) -f BuildJdk.gmk overlay-images) + @$(call TargetExit) + +bundles: images bundles-only +bundles-only: start-make + @$(call TargetEnter) + @($(CD) $(JDK_TOPDIR)/makefiles && $(BUILD_LOG_WRAPPER) $(MAKE) $(MAKE_ARGS) -f BuildJdk.gmk bundles) + @$(call TargetExit) + +install: images install-only +install-only: start-make + @$(call TargetEnter) + @($(CD) $(JDK_TOPDIR)/makefiles && $(BUILD_LOG_WRAPPER) $(MAKE) $(MAKE_ARGS) -f BuildJdk.gmk install) + @$(call TargetExit) + +docs: jdk docs-only +docs-only: start-make + @$(call TargetEnter) + @($(CD) $(SRC_ROOT)/common/makefiles/javadoc && $(BUILD_LOG_WRAPPER) $(MAKE) $(MAKE_ARGS) -f Javadoc.gmk docs) + @$(call TargetExit) + +bootcycle-images: + @$(ECHO) Boot cycle build step 1: Building the JDK image normally + @($(CD) $(SRC_ROOT)/common/makefiles && $(BUILD_LOG_WRAPPER) $(MAKE) SPEC=$(SPEC) images) + @$(ECHO) Boot cycle build step 2: Building a new JDK image using previously built image + @($(CD) $(SRC_ROOT)/common/makefiles && $(BUILD_LOG_WRAPPER) $(MAKE) SPEC=$(dir $(SPEC))bootcycle-spec.gmk images) + +test: start-make + @$(call TargetEnter) + @($(CD) $(SRC_ROOT)/test && $(BUILD_LOG_WRAPPER) $(MAKE) MAKEFLAGS= -j1 PRODUCT_HOME=$(OUTPUT_ROOT)/jdk JPRT_JAVA_HOME=$(OUTPUT_ROOT)/jdk ALT_OUTPUTDIR=$(OUTPUT_ROOT) $(TEST)) || true + @$(call TargetExit) + +# Stores the tips for each repository. This file is be used when constructing the jdk image and can be +# used to track the exact sources used to build that image. +source-tips: $(OUTPUT_ROOT)/source_tips +$(OUTPUT_ROOT)/source_tips: FRC + @$(MKDIR) -p $(@D) + @$(RM) $@ + @$(if $(HG),$(call GetSourceTips),$(ECHO) "hg not installed" > $@) + + +# Remove everything, except the output from configure. +clean: clean-langtools clean-corba clean-jaxp clean-jaxws clean-hotspot clean-jdk clean-images clean-overlay-images clean-bootcycle-build + @($(CD) $(OUTPUT_ROOT) && $(RM) -r tmp source_tips build.log* build-trace*.log*) + @$(ECHO) Cleaned all build artifacts. + +# Remove everything, including configure configuration. +# If the output directory was created by configure and now becomes empty, remove it as well. +# FIXME: tmp should not be here, fix ResetTimers instead. And remove spec.sh! +dist-clean: clean + @($(CD) $(OUTPUT_ROOT) && $(RM) -r *spec.gmk config.* configure-arguments Makefile compare.sh spec.sh tmp) + @$(if $(filter $(CONF_NAME),$(notdir $(OUTPUT_ROOT))), \ + if test "x`$(LS) $(OUTPUT_ROOT)`" != x; then \ + $(ECHO) "Warning: Not removing non-empty configuration directory for '$(CONF_NAME)'" ;\ + else \ + ($(CD) $(SRC_ROOT) && $(ECHO) "Removing configuration directory for '$(CONF_NAME)'" && $(RM) -r $(OUTPUT_ROOT)) \ + fi \ + ) + @$(ECHO) Cleaned everything, you will have to re-run configure. + +clean-langtools: + $(call CleanComponent,langtools) +clean-corba: + $(call CleanComponent,corba) +clean-jaxp: + $(call CleanComponent,jaxp) +clean-jaxws: + $(call CleanComponent,jaxws) +clean-hotspot: + $(call CleanComponent,hotspot) +clean-jdk: + $(call CleanComponent,jdk) +clean-images: + $(call CleanComponent,images) +clean-overlay-images: + $(call CleanComponent,overlay-images) +clean-bootcycle-build: + $(call CleanComponent,bootcycle-build) + +.PHONY: langtools corba jaxp jaxws hotspot jdk images overlay-images install +.PHONY: langtools-only corba-only jaxp-only jaxws-only hotspot-only jdk-only images-only overlay-images-only install-only +.PHONY: all test clean dist-clean bootcycle-images start-make +.PHONY: clean-langtools clean-corba clean-jaxp clean-jaxws clean-hotspot clean-jdk clean-images clean-overlay-images clean-bootcycle-build + +FRC: # Force target diff --git a/common/makefiles/MakeBase.gmk b/common/makefiles/MakeBase.gmk index e9caaa89f87..5f334462195 100644 --- a/common/makefiles/MakeBase.gmk +++ b/common/makefiles/MakeBase.gmk @@ -33,129 +33,13 @@ ifndef _MAKEBASE_GMK _MAKEBASE_GMK := 1 -ifeq (,$(findstring 3.81,$(MAKE_VERSION))) - ifeq (,$(findstring 3.82,$(MAKE_VERSION))) - $(error This version of GNU Make is too low ($(MAKE_VERSION)). Please upgrade to 3.81 or newer.) - endif -endif - -ifneq (,$(CYGPATH)) - # Cygwin styff, if needed but most is going to be - # done in configure! - ifeq (yes,$(CHECK_FOR_VCINSTALLDIR)) - ifeq (,$(VCINSTALLDIR)) - $(info Could not find compiler paths!) - $(info You probably configured the build from within a) - $(info VS command prompt, but you are not using such a) - $(info prompt right now.) - $(info If you instead run configure from a plain cygwin shell, it) - $(info will attempt to setup VS for you! Please try that.) - $(error Giving up for now.) - endif - endif -endif - -# The build times report is turned off by setting REPORT_BUILD_TIMES to nothing. -# This is necessary for the target clean which will erase the -# directories where the buildtimes are stored. -REPORT_BUILD_TIMES=1 -# Store the build times in this directory. -BUILDTIMESDIR=$(OUTPUT_ROOT)/tmp/buildtimes - -# Record starting time for build of a sub repository. -define RecordStartTime -$(MKDIR) -p $(BUILDTIMESDIR) -$(DATE) '+%Y %m %d %H %M %S' | $(NAWK) '{ print $$1,$$2,$$3,$$4,$$5,$$6,($$4*3600+$$5*60+$$6) }' > $(BUILDTIMESDIR)/build_time_start_$1 -$(DATE) '+%Y-%m-%d %H:%M:%S' > $(BUILDTIMESDIR)/build_time_start_$1_human_readable -endef - -# Indicate that we started to build a sub repository and record starting time. -define MakeStart -$(call RecordStartTime,$1) -$(BUILD_LOG_WRAPPER) $(PRINTF) "\n\n%s\n%s\n##### %-60.60s #####\n%s\n\n" \ -"########################################################################" \ -"########################################################################" \ -"Entering $1 for target(s) $2" \ -"########################################################################" -endef - -# Record ending time and calculate the difference and store it in a -# easy to read format. Handles builds that cross midnight. Expects -# that a build will never take 24 hours or more. -define RecordEndTime -$(DATE) '+%Y %m %d %H %M %S' | $(NAWK) '{ print $$1,$$2,$$3,$$4,$$5,$$6,($$4*3600+$$5*60+$$6) }' > $(BUILDTIMESDIR)/build_time_end_$1 -$(DATE) '+%Y-%m-%d %H:%M:%S' > $(BUILDTIMESDIR)/build_time_end_$1_human_readable -$(ECHO) `$(CAT) $(BUILDTIMESDIR)/build_time_start_$1` `$(CAT) $(BUILDTIMESDIR)/build_time_end_$1` $1 | \ - $(NAWK) '{ F=$$7; T=$$14; if (F > T) { T+=3600*24 }; D=T-F; H=int(D/3600); \ - M=int((D-H*3600)/60); S=D-H*3600-M*60; printf("%02d:%02d:%02d %s\n",H,M,S,$$15); }' \ - > $(BUILDTIMESDIR)/build_time_diff_$1 -endef - -# Check if the current target is the final target, as specified by -# the user on the command line. If so, call PrintEndMessage. -define CheckIfFinished -$(if $(filter $@,$(MAKECMDGOALS)),$(call PrintEndMessage)) -# If no taget is given, "all" is default. Check for that, too. -# At most one of the tests can be true. -$(if $(MAKECMDGOALS),,$(if $(filter $@,all),$(call PrintEndMessage))) -endef - -# Indicate that we are done. -# Record ending time and print out the total time it took to build. -define MakeFinish -$(if $(REPORT_BUILD_TIMES),$(call RecordEndTime,$1),) -$(BUILD_LOG_WRAPPER) $(PRINTF) "%s\n##### %-60.60s #####\n%s\n##### %-60.60s #####\n%s\n\n" \ -"########################################################################" \ -"Leaving $1 for target(s) $2" \ -"########################################################################" \ -$(if $(REPORT_BUILD_TIMES),"Build time `$(CAT) $(BUILDTIMESDIR)/build_time_diff_$1` for target(s) $2","") \ -"########################################################################" -$(call CheckIfFinished) -endef - -# Find all build_time_* files and print their contents in a list sorted -# on the name of the sub repository. -define ReportBuildTimes -$(BUILD_LOG_WRAPPER) $(PRINTF) -- "-- Build times ----------\nTarget %s\nStart %s\nEnd %s\n%s\n%s\n-------------------------\n" \ -"$1" \ -"`$(CAT) $(BUILDTIMESDIR)/build_time_start_TOTAL_human_readable`" \ -"`$(CAT) $(BUILDTIMESDIR)/build_time_end_TOTAL_human_readable`" \ -"`$(LS) $(BUILDTIMESDIR)/build_time_diff_* | $(GREP) -v _TOTAL | $(XARGS) $(CAT) | $(SORT) -k 2`" \ -"`$(CAT) $(BUILDTIMESDIR)/build_time_diff_TOTAL`" -endef - -define ResetTimers -$$(shell $(MKDIR) -p $(BUILDTIMESDIR) && $(RM) $(BUILDTIMESDIR)/build_time_*) -endef - -define StartTimer - $(call RecordStartTime,TOTAL) -endef - -define StopTimer - $(if $(REPORT_BUILD_TIMES),$(call RecordEndTime,TOTAL) && $(call ReportBuildTimes,$1),) -endef - -# Hook to be called as the very first thing when running a normal build -define AtRootMakeStart - $(if $(findstring --jobserver,$(MAKEFLAGS)), $(error make -j is not supported, use make JOBS=n)) - $(call PrintStartMessage) - $(call StartTimer) -endef - -# Hook to be called as the very last thing for targets that are "top level" targets -define AtRootMakeEnd - $(call StopTimer) - $(call CheckIfFinished) -endef - # If the variable that you want to send to stdout for piping into a file or otherwise, # is potentially long, for example the a list of file paths, eg a list of all package directories. # Then you need to use ListPathsSafely, which optimistically splits the output into several shell # calls as well as use compression on recurrent file paths segments, to get around the potential # command line length problem that exists in cygwin and other shells. -compress_pre:=$(strip $(shell cat $(SRC_ROOT)/common/makefiles/compress.pre)) -compress_post:=$(strip $(shell cat $(SRC_ROOT)/common/makefiles/compress.post)) +compress_pre:=$(strip $(shell $(CAT) $(SRC_ROOT)/common/makefiles/support/ListPathsSafely-pre-compress.incl)) +compress_post:=$(strip $(shell $(CAT) $(SRC_ROOT)/common/makefiles/support/ListPathsSafely-post-compress.incl)) compress_paths=$(compress_pre)\ $(subst $(SRC_ROOT),X97,\ $(subst $(OUTPUT_ROOT),X98,\ @@ -163,7 +47,7 @@ $(subst X,X00,\ $(subst $(SPACE),\n,$(strip $1)))))\ $(compress_post) -decompress_paths=sed -f $(SRC_ROOT)/common/makefiles/uncompress.sed -e 's|X99|\\n|g' \ +decompress_paths=$(SED) -f $(SRC_ROOT)/common/makefiles/support/ListPathsSafely-uncompress.sed -e 's|X99|\\n|g' \ -e 's|X98|$(OUTPUT_ROOT)|g' -e 's|X97|$(SRC_ROOT)|g' \ -e 's|X00|X|g' | tr '\n' '$2' @@ -181,7 +65,7 @@ endef # The \n argument means translate spaces into \n # if instead , , (a space) is supplied, then spaces remain spaces. define ListPathsSafely - $(if $(word 10001,$($1)),$(error Cannot list safely more than 10000 paths. $1 has $(words $($1)) paths!)) + $(if $(word 16001,$($1)),$(error Cannot list safely more than 16000 paths. $1 has $(words $($1)) paths!)) $(call ListPathsSafely_If,$1,$2,1,250) $(call ListPathsSafely_If,$1,$2,251,500) $(call ListPathsSafely_If,$1,$2,501,750) @@ -232,6 +116,36 @@ define ListPathsSafely $(call ListPathsSafely_If,$1,$2,9501,9750) $(call ListPathsSafely_If,$1,$2,9751,10000) + $(call ListPathsSafely_If,$1,$2,10001,10250) + $(call ListPathsSafely_If,$1,$2,10251,10500) + $(call ListPathsSafely_If,$1,$2,10501,10750) + $(call ListPathsSafely_If,$1,$2,10751,11000) + + $(call ListPathsSafely_If,$1,$2,11001,11250) + $(call ListPathsSafely_If,$1,$2,11251,11500) + $(call ListPathsSafely_If,$1,$2,11501,11750) + $(call ListPathsSafely_If,$1,$2,11751,12000) + + $(call ListPathsSafely_If,$1,$2,12001,12250) + $(call ListPathsSafely_If,$1,$2,12251,12500) + $(call ListPathsSafely_If,$1,$2,12501,12750) + $(call ListPathsSafely_If,$1,$2,12751,13000) + + $(call ListPathsSafely_If,$1,$2,13001,13250) + $(call ListPathsSafely_If,$1,$2,13251,13500) + $(call ListPathsSafely_If,$1,$2,13501,13750) + $(call ListPathsSafely_If,$1,$2,13751,14000) + + $(call ListPathsSafely_If,$1,$2,14001,14250) + $(call ListPathsSafely_If,$1,$2,14251,14500) + $(call ListPathsSafely_If,$1,$2,14501,14750) + $(call ListPathsSafely_If,$1,$2,14751,15000) + + $(call ListPathsSafely_If,$1,$2,15001,15250) + $(call ListPathsSafely_If,$1,$2,15251,15500) + $(call ListPathsSafely_If,$1,$2,15501,15750) + $(call ListPathsSafely_If,$1,$2,15751,16000) + $(call ListPathsSafely_Printf,$1,$2,$3,1) $(call ListPathsSafely_Printf,$1,$2,$3,251) $(call ListPathsSafely_Printf,$1,$2,$3,501) @@ -281,6 +195,36 @@ define ListPathsSafely $(call ListPathsSafely_Printf,$1,$2,$3,9251) $(call ListPathsSafely_Printf,$1,$2,$3,9501) $(call ListPathsSafely_Printf,$1,$2,$3,9751) + + $(call ListPathsSafely_Printf,$1,$2,$3,10001) + $(call ListPathsSafely_Printf,$1,$2,$3,10251) + $(call ListPathsSafely_Printf,$1,$2,$3,10501) + $(call ListPathsSafely_Printf,$1,$2,$3,10751) + + $(call ListPathsSafely_Printf,$1,$2,$3,11001) + $(call ListPathsSafely_Printf,$1,$2,$3,11251) + $(call ListPathsSafely_Printf,$1,$2,$3,11501) + $(call ListPathsSafely_Printf,$1,$2,$3,11751) + + $(call ListPathsSafely_Printf,$1,$2,$3,12001) + $(call ListPathsSafely_Printf,$1,$2,$3,12251) + $(call ListPathsSafely_Printf,$1,$2,$3,12501) + $(call ListPathsSafely_Printf,$1,$2,$3,12751) + + $(call ListPathsSafely_Printf,$1,$2,$3,13001) + $(call ListPathsSafely_Printf,$1,$2,$3,13251) + $(call ListPathsSafely_Printf,$1,$2,$3,13501) + $(call ListPathsSafely_Printf,$1,$2,$3,13751) + + $(call ListPathsSafely_Printf,$1,$2,$3,14001) + $(call ListPathsSafely_Printf,$1,$2,$3,14251) + $(call ListPathsSafely_Printf,$1,$2,$3,14501) + $(call ListPathsSafely_Printf,$1,$2,$3,14751) + + $(call ListPathsSafely_Printf,$1,$2,$3,15001) + $(call ListPathsSafely_Printf,$1,$2,$3,15251) + $(call ListPathsSafely_Printf,$1,$2,$3,15501) + $(call ListPathsSafely_Printf,$1,$2,$3,15751) endef define ListPathsSafelyNow_IfPrintf @@ -384,14 +328,67 @@ $(ECHO) $1/$(HGTIP_FILENAME) endef define SetupLogging - ifneq ($(findstring $(LOG),debug trace),) + ifeq ($$(LOG), trace) # Shell redefinition trick inspired by http://www.cmcrossroads.com/ask-mr-make/6535-tracing-rule-execution-in-gnu-make + # For each target executed, will print + # Building (from ) ( newer) + # but with a limit of 20 on , to avoid cluttering logs too much (and causing a crash on Cygwin). OLD_SHELL:=$$(SHELL) - SHELL = $$(warning Building $$@$$(if $$<, (from $$<))$(if $$?, ($$? newer)))$$(OLD_SHELL) -x + WRAPPER_SHELL:=$$(OLD_SHELL) $$(SRC_ROOT)/common/bin/shell-tracer.sh $$(if $$(TIME),$$(TIME),-) $$(OUTPUT_ROOT)/build-trace-time.log $$(OLD_SHELL) + SHELL=$$(warning $$(if $$@,Building $$@,Running shell command) $$(if $$<, (from $$<))$$(if $$?, ($$(wordlist 1, 20, $$?) $$(if $$(wordlist 21, 22, $$?), ... [in total $$(words $$?) files]) newer)))$$(WRAPPER_SHELL) + endif + # Never remove warning messages; this is just for completeness + LOG_WARN= + ifneq ($$(findstring $$(LOG),info debug trace),) + LOG_INFO= + else + LOG_INFO=> /dev/null + endif + ifneq ($$(findstring $$(LOG),debug trace),) + LOG_DEBUG= + else + LOG_DEBUG=> /dev/null + endif + ifneq ($$(findstring $$(LOG),trace),) + LOG_TRACE= + else + LOG_TRACE=> /dev/null endif endef # Make sure logging is setup for everyone that includes MakeBase.gmk. $(eval $(call SetupLogging)) +# This is to be called by all SetupFoo macros +define LogSetupMacroEntry + $(if $(26),$(error Internal makefile error: Too many arguments to LogSetupMacroEntry, please update MakeBase.gmk)) + $(if $(findstring $(LOG),debug trace), $(info $1 $(foreach i,2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25,$(if $($i),$(NEWLINE) $(strip [$i] $($i)))))) +endef + +# Make directory without forking mkdir if not needed +define MakeDir + ifneq ($$(wildcard $1 $2 $3 $4 $5 $6 $7 $8 $9),$$(strip $1 $2 $3 $4 $5 $6 $7 $8 $9)) + $$(shell $(MKDIR) -p $1 $2 $3 $4 $5 $6 $7 $8 $9) + endif +endef + +ifeq ($(OPENJDK_TARGET_OS),solaris) +# On Solaris, if the target is a symlink and exists, cp won't overwrite. +define install-file + $(MKDIR) -p $(@D) + $(RM) '$@' + $(CP) -f -r -P '$<' '$(@D)' +endef +else ifeq ($(OPENJDK_TARGET_OS),macosx) +define install-file + $(MKDIR) -p $(@D) + $(CP) -fpRP '$<' '$@' +endef +else +define install-file + $(MKDIR) -p $(@D) + $(CP) -fP '$<' '$@' +endef +endif + endif # _MAKEBASE_GMK diff --git a/common/makefiles/MakeHelpers.gmk b/common/makefiles/MakeHelpers.gmk index ef84463be97..99103116311 100644 --- a/common/makefiles/MakeHelpers.gmk +++ b/common/makefiles/MakeHelpers.gmk @@ -45,13 +45,130 @@ MAKE_ARGS=$(foreach var,$(subst =command,,$(filter %=command,$(foreach var,$(.VA list_alt_overrides_with_origins=$(filter ALT_%=environment ALT_%=command,$(foreach var,$(.VARIABLES),$(var)=$(firstword $(origin $(var))))) list_alt_overrides=$(subst =command,,$(subst =environment,,$(list_alt_overrides_with_origins))) +# Store the build times in this directory. +BUILDTIMESDIR=$(OUTPUT_ROOT)/tmp/buildtimes + +# Global targets are possible to run either with or without a SPEC. The prototypical +# global target is "help". +global_targets=help configure + ############################## # Functions ############################## -define fatal-error +define CheckEnvironment + # Find all environment or command line variables that begin with ALT. + $(if $(list_alt_overrides), + @$(PRINTF) "\nWARNING: You have the following ALT_ variables set:\n" + @$(PRINTF) "$(foreach var,$(list_alt_overrides),$(var)=$$$(var))\n" + @$(PRINTF) "ALT_ variables are deprecated and will be ignored. Please clean your environment.\n\n" + ) +endef + +### Functions for timers + +# Record starting time for build of a sub repository. +define RecordStartTime + $(MKDIR) -p $(BUILDTIMESDIR) + $(DATE) '+%Y %m %d %H %M %S' | $(NAWK) '{ print $$1,$$2,$$3,$$4,$$5,$$6,($$4*3600+$$5*60+$$6) }' > $(BUILDTIMESDIR)/build_time_start_$1 + $(DATE) '+%Y-%m-%d %H:%M:%S' > $(BUILDTIMESDIR)/build_time_start_$1_human_readable +endef + +# Record ending time and calculate the difference and store it in a +# easy to read format. Handles builds that cross midnight. Expects +# that a build will never take 24 hours or more. +define RecordEndTime + $(DATE) '+%Y %m %d %H %M %S' | $(NAWK) '{ print $$1,$$2,$$3,$$4,$$5,$$6,($$4*3600+$$5*60+$$6) }' > $(BUILDTIMESDIR)/build_time_end_$1 + $(DATE) '+%Y-%m-%d %H:%M:%S' > $(BUILDTIMESDIR)/build_time_end_$1_human_readable + $(ECHO) `$(CAT) $(BUILDTIMESDIR)/build_time_start_$1` `$(CAT) $(BUILDTIMESDIR)/build_time_end_$1` $1 | \ + $(NAWK) '{ F=$$7; T=$$14; if (F > T) { T+=3600*24 }; D=T-F; H=int(D/3600); \ + M=int((D-H*3600)/60); S=D-H*3600-M*60; printf("%02d:%02d:%02d %s\n",H,M,S,$$15); }' \ + > $(BUILDTIMESDIR)/build_time_diff_$1 +endef + +# Find all build_time_* files and print their contents in a list sorted +# on the name of the sub repository. +define ReportBuildTimes + $(BUILD_LOG_WRAPPER) $(PRINTF) -- "----- Build times -------\nStart %s\nEnd %s\n%s\n%s\n-------------------------\n" \ + "`$(CAT) $(BUILDTIMESDIR)/build_time_start_TOTAL_human_readable`" \ + "`$(CAT) $(BUILDTIMESDIR)/build_time_end_TOTAL_human_readable`" \ + "`$(LS) $(BUILDTIMESDIR)/build_time_diff_* | $(GREP) -v _TOTAL | $(XARGS) $(CAT) | $(SORT) -k 2`" \ + "`$(CAT) $(BUILDTIMESDIR)/build_time_diff_TOTAL`" +endef + +define ResetAllTimers + $$(shell $(MKDIR) -p $(BUILDTIMESDIR) && $(RM) $(BUILDTIMESDIR)/build_time_*) +endef + +define StartGlobalTimer + $(call RecordStartTime,TOTAL) +endef + +define StopGlobalTimer + $(call RecordEndTime,TOTAL) +endef + +### Functions for managing makefile structure (start/end of makefile and individual targets) + +# Do not indent this function, this will add whitespace at the start which the caller won't handle +define GetRealTarget +$(strip $(if $(MAKECMDGOALS),$(MAKECMDGOALS),all)) +endef + +# Do not indent this function, this will add whitespace at the start which the caller won't handle +define LastGoal +$(strip $(lastword $(call GetRealTarget))) +endef + +# Check if the current target is the final target, as specified by +# the user on the command line. If so, call AtRootMakeEnd. +define CheckIfMakeAtEnd + # Check if the current target is the last goal + $(if $(filter $@,$(call LastGoal)),$(call AtMakeEnd)) + # If the target is 'foo-only', check if our goal was stated as 'foo' + $(if $(filter $(patsubst %-only,%,$@),$(call LastGoal)),$(call AtMakeEnd)) + # If no goal is given, 'all' is default, but the last target executed for all is 'jdk-only'. Check for that, too. + # At most one of the tests can be true. + $(if $(subst all,,$(call LastGoal)),,$(if $(filter $@,jdk-only),$(call AtMakeEnd))) +endef + +# Hook to be called when starting to execute a top-level target +define TargetEnter + $(BUILD_LOG_WRAPPER) $(PRINTF) "## Starting $(patsubst %-only,%,$@)\n" + $(call RecordStartTime,$(patsubst %-only,%,$@)) +endef + +# Hook to be called when finish executing a top-level target +define TargetExit + $(call RecordEndTime,$(patsubst %-only,%,$@)) + $(BUILD_LOG_WRAPPER) $(PRINTF) "## Finished $(patsubst %-only,%,$@) (build time %s)\n\n" \ + "`$(CAT) $(BUILDTIMESDIR)/build_time_diff_$(patsubst %-only,%,$@) | $(CUT) -f 1 -d " "`" + $(call CheckIfMakeAtEnd) +endef + +# Hook to be called as the very first thing when running a normal build +define AtMakeStart + $(if $(findstring --jobserver,$(MAKEFLAGS)),$(error make -j is not supported, use make JOBS=n)) + $(call CheckEnvironment) + @$(PRINTF) $(LOG_INFO) "Running make as '$(MAKE) $(MFLAGS) $(MAKE_ARGS)'\n" + @$(PRINTF) "Building $(PRODUCT_NAME) for target '$(call GetRealTarget)' in configuration '$(CONF_NAME)'\n\n" + $(call StartGlobalTimer) +endef + +# Hook to be called as the very last thing for targets that are "top level" targets +define AtMakeEnd + $(if $(SJAVAC_SERVER_DIR),@$(RM) -rf $(SJAVAC_SERVER_DIR)/*.port) + $(call StopGlobalTimer) + $(call ReportBuildTimes) + @$(PRINTF) "Finished building $(PRODUCT_NAME) for target '$(call GetRealTarget)'\n" + $(call CheckEnvironment) +endef + +### Functions for parsing and setting up make options from command-line + +define FatalError # If the user specificed a "global" target (e.g. 'help'), do not exit but continue running - $$(if $$(findstring help,$$(MAKECMDGOALS)),,$$(error Cannot continue)) + $$(if $$(filter-out $(global_targets),$$(call GetRealTarget)),$$(error Cannot continue)) endef define ParseLogLevel @@ -80,14 +197,14 @@ define ParseLogLevel ifeq ($$(LOG),warn) VERBOSE=-s else ifeq ($$(LOG),info) - VERBOSE= + VERBOSE=-s else ifeq ($$(LOG),debug) VERBOSE= else ifeq ($$(LOG),trace) - VERBOSE=-d -p + VERBOSE= else $$(info Error: LOG must be one of: warn, info, debug or trace.) - $$(eval $$(call fatal-error)) + $$(eval $$(call FatalError)) endif else ifneq ($$(LOG),) @@ -95,108 +212,84 @@ define ParseLogLevel # but complain if this is the top-level make call. ifeq ($$(MAKELEVEL),0) $$(info Cannot use LOG=$$(LOG) and VERBOSE=$$(VERBOSE) at the same time. Choose one.) - $$(eval $$(call fatal-error)) + $$(eval $$(call FatalError)) endif endif endif endef -# TODO: Fix duplication in MakeBase.gmk -define SetupLogging - ifneq ($(findstring $(LOG),debug trace),) - # Shell redefinition trick inspired by http://www.cmcrossroads.com/ask-mr-make/6535-tracing-rule-execution-in-gnu-make - OLD_SHELL:=$$(SHELL) - SHELL = $$(warning Building $$@$$(if $$<, (from $$<))$(if $$?, ($$? newer)))$$(OLD_SHELL) -x - endif -endef - define ParseConfAndSpec - ifneq ($$(origin SPEC),undefined) - # We have been given a SPEC, check that it works out properly - ifeq ($$(wildcard $$(SPEC)),) - $$(info Cannot locate spec.gmk, given by SPEC=$$(SPEC)) - $$(eval $$(call fatal-error)) - endif - ifneq ($$(origin CONF),undefined) - # We also have a CONF argument. This is OK only if this is a repeated call by ourselves, - # but complain if this is the top-level make call. - ifeq ($$(MAKELEVEL),0) - $$(info Cannot use CONF=$$(CONF) and SPEC=$$(SPEC) at the same time. Choose one.) - $$(eval $$(call fatal-error)) + ifneq ($$(filter-out $(global_targets),$$(call GetRealTarget)),) + # If we only have global targets, no need to bother with SPEC or CONF + ifneq ($$(origin SPEC),undefined) + # We have been given a SPEC, check that it works out properly + ifeq ($$(wildcard $$(SPEC)),) + $$(info Cannot locate spec.gmk, given by SPEC=$$(SPEC)) + $$(eval $$(call FatalError)) endif - endif - # ... OK, we're satisfied, we'll use this SPEC later on - else - # Find all spec.gmk files in the build output directory - output_dir=$$(root_dir)/build - all_spec_files=$$(wildcard $$(output_dir)/*/spec.gmk) - ifeq ($$(all_spec_files),) - $$(info No configurations found for $$(root_dir)! Please run configure to create a configuration.) - $$(eval $$(call fatal-error)) - endif - # Extract the configuration names from the path - all_confs=$$(patsubst %/spec.gmk,%,$$(patsubst $$(output_dir)/%,%,$$(all_spec_files))) - - ifneq ($$(origin CONF),undefined) - # User have given a CONF= argument. - ifeq ($$(CONF),) - # If given CONF=, match all configurations - matching_confs=$$(strip $$(all_confs)) - else - # Otherwise select those that contain the given CONF string - matching_confs=$$(strip $$(foreach var,$$(all_confs),$$(if $$(findstring $$(CONF),$$(var)),$$(var)))) - endif - ifeq ($$(matching_confs),) - $$(info No configurations found matching CONF=$$(CONF)) - $$(info Available configurations:) - $$(foreach var,$$(all_confs),$$(info * $$(var))) - $$(eval $$(call fatal-error)) - else - ifeq ($$(words $$(matching_confs)),1) - $$(info Building '$$(matching_confs)' (matching CONF=$$(CONF))) - else - $$(info Building the following configurations (matching CONF=$$(CONF)):) - $$(foreach var,$$(matching_confs),$$(info * $$(var))) + ifneq ($$(origin CONF),undefined) + # We also have a CONF argument. This is OK only if this is a repeated call by ourselves, + # but complain if this is the top-level make call. + ifeq ($$(MAKELEVEL),0) + $$(info Cannot use CONF=$$(CONF) and SPEC=$$(SPEC) at the same time. Choose one.) + $$(eval $$(call FatalError)) endif endif - - # Create a SPEC definition. This will contain the path to one or more spec.gmk files. - SPEC=$$(addsuffix /spec.gmk,$$(addprefix $$(output_dir)/,$$(matching_confs))) + # ... OK, we're satisfied, we'll use this SPEC later on else - # No CONF or SPEC given, check the available configurations - ifneq ($$(words $$(all_spec_files)),1) - $$(info No CONF or SPEC given, but more than one spec.gmk found in $$(output_dir).) - $$(info Available configurations:) - $$(foreach var,$$(all_confs),$$(info * $$(var))) - $$(info Please retry building with CONF= or SPEC=) - $$(eval $$(call fatal-error)) + # Find all spec.gmk files in the build output directory + output_dir=$$(root_dir)/build + all_spec_files=$$(wildcard $$(output_dir)/*/spec.gmk) + ifeq ($$(all_spec_files),) + $$(info No configurations found for $$(root_dir)! Please run configure to create a configuration.) + $$(eval $$(call FatalError)) endif + # Extract the configuration names from the path + all_confs=$$(patsubst %/spec.gmk,%,$$(patsubst $$(output_dir)/%,%,$$(all_spec_files))) - # We found exactly one configuration, use it - SPEC=$$(strip $$(all_spec_files)) + ifneq ($$(origin CONF),undefined) + # User have given a CONF= argument. + ifeq ($$(CONF),) + # If given CONF=, match all configurations + matching_confs=$$(strip $$(all_confs)) + else + # Otherwise select those that contain the given CONF string + matching_confs=$$(strip $$(foreach var,$$(all_confs),$$(if $$(findstring $$(CONF),$$(var)),$$(var)))) + endif + ifeq ($$(matching_confs),) + $$(info No configurations found matching CONF=$$(CONF)) + $$(info Available configurations:) + $$(foreach var,$$(all_confs),$$(info * $$(var))) + $$(eval $$(call FatalError)) + else + ifeq ($$(words $$(matching_confs)),1) + $$(info Building '$$(matching_confs)' (matching CONF=$$(CONF))) + else + $$(info Building target '$(call GetRealTarget)' in the following configurations (matching CONF=$$(CONF)):) + $$(foreach var,$$(matching_confs),$$(info * $$(var))) + endif + endif + + # Create a SPEC definition. This will contain the path to one or more spec.gmk files. + SPEC=$$(addsuffix /spec.gmk,$$(addprefix $$(output_dir)/,$$(matching_confs))) + else + # No CONF or SPEC given, check the available configurations + ifneq ($$(words $$(all_spec_files)),1) + $$(info No CONF given, but more than one configuration found in $$(output_dir).) + $$(info Available configurations:) + $$(foreach var,$$(all_confs),$$(info * $$(var))) + $$(info Please retry building with CONF= (or SPEC=)) + $$(eval $$(call FatalError)) + endif + + # We found exactly one configuration, use it + SPEC=$$(strip $$(all_spec_files)) + endif endif endif endef -define CheckEnvironment - # Find all environment or command line variables that begin with ALT. - $(if $(list_alt_overrides), - @$(PRINTF) "\nWARNING: You have the following ALT_ variables set:\n" - @$(PRINTF) "$(foreach var,$(list_alt_overrides),$(var)=$$$(var))\n" - @$(PRINTF) "ALT_ variables are deprecated and will be ignored. Please clean your environment.\n\n" - ) -endef - -define PrintStartMessage - $(if $(VERBOSE),,@$(ECHO) Running make as $(MAKE) $(MFLAGS) $(MAKE_ARGS)) - $(call CheckEnvironment) - @$(ECHO) "Building OpenJDK for target $(if $(MAKECMDGOALS),'$(MAKECMDGOALS)','all') in configuration '$(CONF_NAME)'" -endef - -define PrintEndMessage - @$(ECHO) "Finished building OpenJDK for target '$@'" - $(call CheckEnvironment) -endef +### Convenience functions from Main.gmk # Cleans the component given as $1 define CleanComponent diff --git a/common/makefiles/Makefile b/common/makefiles/Makefile index 9672bb4848f..cd5a9bfae34 100644 --- a/common/makefiles/Makefile +++ b/common/makefiles/Makefile @@ -24,13 +24,24 @@ # # This must be the first rule -default: all +all: # Inclusion of this pseudo-target will cause make to execute this file # serially, regardless of -j. Recursively called makefiles will not be # affected, however. This is required for correct dependency management. .NOTPARALLEL: +# The shell code below will be executed on /usr/ccs/bin/make on Solaris, but not in GNU make. +# /usr/ccs/bin/make lacks basically every other flow control mechanism. +TEST_FOR_NON_GNUMAKE:sh=echo You are not using GNU make/gmake, this is a requirement. Check your path. 1>&2 && exit 1 + +# Assume we have GNU make, but check version. +ifeq (,$(findstring 3.81,$(MAKE_VERSION))) + ifeq (,$(findstring 3.82,$(MAKE_VERSION))) + $(error This version of GNU Make is too low ($(MAKE_VERSION)). Check your path, or upgrade to 3.81 or newer.) + endif +endif + # Locate this Makefile ifeq ($(filter /%,$(lastword $(MAKEFILE_LIST))),) makefile_path:=$(CURDIR)/$(lastword $(MAKEFILE_LIST)) @@ -43,202 +54,32 @@ root_dir:=$(patsubst %/common/makefiles/Makefile,%,$(makefile_path)) include $(dir $(makefile_path))/MakeHelpers.gmk $(eval $(call ParseLogLevel)) -$(eval $(call SetupLogging)) $(eval $(call ParseConfAndSpec)) -ifneq ($(words $(SPEC)),1) -### We have multiple configurations to build, call make repeatedly -all clean dist-clean: -langtools corba jaxp jaxws hotspot jdk images overlay-images install: -langtools-only corba-only jaxp-only jaxws-only hotspot-only jdk-only images-only overlay-images-only install-only: -clean-langtools clean-corba clean-jaxp clean-jaxws clean-hotspot clean-jdk clean-images: +# Now determine if we have zero, one or several configurations to build. +ifeq ($(SPEC),) + # Since we got past ParseConfAndSpec, we must be building a global target. Do nothing. +else + ifeq ($(words $(SPEC)),1) + # We are building a single configuration. This is the normal case. Execute the Main.gmk file. + include $(dir $(makefile_path))/Main.gmk + else + # We are building multiple configurations. + # First, find out the valid targets + # Run the makefile with an arbitraty SPEC using -p -q (quiet dry-run and dump rules) to find + # available PHONY targets. Use this list as valid targets to pass on to the repeated calls. + all_phony_targets=$(filter-out $(global_targets), $(strip $(shell \ + $(MAKE) -p -q -f $(makefile_path) SPEC=$(firstword $(SPEC)) | \ + grep ^.PHONY: | head -n 1 | cut -d " " -f 2-))) + +$(all_phony_targets): @$(foreach spec,$(SPEC),($(MAKE) -f $(makefile_path) SPEC=$(spec) $(VERBOSE) VERBOSE=$(VERBOSE) $@) &&) true -.PHONY: all clean dist-clean -.PHONY: langtools corba jaxp jaxws hotspot jdk images overlay-images install -.PHONY: langtools-only corba-only jaxp-only jaxws-only hotspot-only jdk-only images-only overlay-images-only install-only -.PHONY: clean-langtools clean-corba clean-jaxp clean-jaxws clean-hotspot clean-jdk clean-images - -else -### This is the main part of the Makefile, for the normal case with SPEC specifying a single existing spec.gmk file. - -# Now load the spec -include $(SPEC) - -# Load the vital tools for all the makefiles. -include $(SRC_ROOT)/common/makefiles/MakeBase.gmk - -### Clean up from previous run - -# Remove any build.log from a previous run, if they exist -ifneq (,$(BUILD_LOG)) - ifneq (,$(BUILD_LOG_PREVIOUS)) - # Rotate old log - $(shell $(RM) $(BUILD_LOG_PREVIOUS) 2> /dev/null) - $(shell $(MV) $(BUILD_LOG) $(BUILD_LOG_PREVIOUS) 2> /dev/null) - else - $(shell $(RM) $(BUILD_LOG) 2> /dev/null) endif endif -# Remove any javac server logs and port files. This -# prevents a new make run to reuse the previous servers. -ifneq (,$(SJAVAC_SERVER_DIR)) - $(shell $(MKDIR) -p $(SJAVAC_SERVER_DIR) && $(RM) -rf $(SJAVAC_SERVER_DIR)/*) -endif -# Clean out any notifications from the previous build. -$(shell $(FIND) $(OUTPUT_ROOT) -name "_the.*.notify" $(FIND_DELETE)) - -# Reset the build timers. -$(eval $(call ResetTimers)) - -# Setup number of jobs to use. -jN is unfortunately not available for us to parse from the command line, -# hence this workaround. -ifeq ($(JOBS),) - JOBS=$(NUM_CORES) -endif -MAKE_ARGS:=$(MAKE_ARGS) -j$(JOBS) - -### Main targets - -all: jdk - @$(if $(SJAVAC_SERVER_DIR),$(RM) -rf $(SJAVAC_SERVER_DIR)/*.port) - @$(call AtRootMakeEnd) -.PHONY: all - -langtools: start-make langtools-only -langtools-only: - @$(call MakeStart,langtools,all) - @($(CD) $(LANGTOOLS_TOPDIR)/makefiles && $(BUILD_LOG_WRAPPER) $(MAKE) $(MAKE_ARGS)) - @$(call MakeFinish,langtools,all) - -corba: langtools corba-only -corba-only: - @$(call MakeStart,corba,all) - @($(CD) $(CORBA_TOPDIR)/makefiles && $(BUILD_LOG_WRAPPER) $(MAKE) $(MAKE_ARGS)) - @$(call MakeFinish,corba,all) - -jaxp: langtools jaxp-only -jaxp-only: - @$(call MakeStart,jaxp,all) - @($(CD) $(JAXP_TOPDIR)/makefiles && $(BUILD_LOG_WRAPPER) $(MAKE) $(MAKE_ARGS)) - @$(call MakeFinish,jaxp,all) - -jaxws: langtools jaxp jaxws-only -jaxws-only: - @$(call MakeStart,jaxws,all) - @($(CD) $(JAXWS_TOPDIR)/makefiles && $(BUILD_LOG_WRAPPER) $(MAKE) $(MAKE_ARGS)) - @$(call MakeFinish,jaxws,all) - -hotspot: langtools hotspot-only -hotspot-only: - @$(call MakeStart,hotspot,all) - @($(CD) $(SRC_ROOT)/common/makefiles && $(BUILD_LOG_WRAPPER) $(MAKE) $(MAKE_ARGS) -f HotspotWrapper.gmk) - @$(call MakeFinish,hotspot,all) - -jdk: langtools corba jaxp jaxws hotspot jdk-only -jdk-only: - @$(call MakeStart,jdk,all) - @($(CD) $(JDK_TOPDIR)/makefiles && $(BUILD_LOG_WRAPPER) $(MAKE) $(MAKE_ARGS) $(JDK_TARGET)) - @$(call MakeFinish,jdk,all) - -images: source-tips start-make jdk langtools corba jaxp jaxws hotspot images-only -images-only: - @$(call MakeStart,jdk-images,$@) - @($(CD) $(JDK_TOPDIR)/makefiles && $(BUILD_LOG_WRAPPER) $(MAKE) $(MAKE_ARGS) images) - @$(call MakeFinish,jdk-images,$@) - @$(if $(SJAVAC_SERVER_DIR),$(RM) -rf $(SJAVAC_SERVER_DIR)/*.port) - @$(call AtRootMakeEnd) - -overlay-images: source-tips start-make jdk langtools corba jaxp jaxws hotspot overlay-images-only -overlay-images-only: - @$(call MakeStart,jdk-overlay-images,$@) - @($(CD) $(JDK_TOPDIR)/makefiles && $(BUILD_LOG_WRAPPER) $(MAKE) $(MAKE_ARGS) overlay-images) - @$(call MakeFinish,jdk-overlay-images,$@) - @$(if $(SJAVAC_SERVER_DIR),$(RM) -rf $(SJAVAC_SERVER_DIR)/*.port) - @$(call AtRootMakeEnd) - -install: source-tips start-make jdk langtools corba jaxp jaxws hotspot install-only -install-only: - @$(call MakeStart,jdk-images,$@) - @($(CD) $(JDK_TOPDIR)/makefiles && $(BUILD_LOG_WRAPPER) $(MAKE) $(MAKE_ARGS) install) - @$(call MakeFinish,jdk-images,$@) - @$(if $(SJAVAC_SERVER_DIR),$(RM) -rf $(SJAVAC_SERVER_DIR)/*.port) - @$(call AtRootMakeEnd) - -docs: start-make jdk docs-only -docs-only: - @$(call MakeStart,docs,$@) - @($(CD) $(SRC_ROOT)/common/makefiles/javadoc && $(BUILD_LOG_WRAPPER) $(MAKE) $(MAKE_ARGS) -f Javadoc.gmk docs) - @$(call MakeFinish,docs,$@) - @$(if $(SJAVAC_SERVER_DIR),$(RM) -rf $(SJAVAC_SERVER_DIR)/*.port) - @$(call AtRootMakeEnd) - - -.PHONY: langtools corba jaxp jaxws hotspot jdk images install -.PHONY: langtools-only corba-only jaxp-only jaxws-only hotspot-only jdk-only images-only install-only - -start-make: - @$(call AtRootMakeStart) -.PHONY: start-make - -bootcycle-images: - @$(ECHO) Boot cycle build step 1: Building the JDK image normally - @($(CD) $(SRC_ROOT)/common/makefiles && $(BUILD_LOG_WRAPPER) $(MAKE) SPEC=$(SPEC) images) - @$(ECHO) Boot cycle build step 2: Building a new JDK image using previously built image - @($(CD) $(SRC_ROOT)/common/makefiles && $(BUILD_LOG_WRAPPER) $(MAKE) SPEC=$(dir $(SPEC))bootcycle-spec.gmk images) - -test: start-make - @$(call MakeStart,test,$(if $(TEST),$(TEST),all)) - @($(CD) $(SRC_ROOT)/test && $(BUILD_LOG_WRAPPER) $(MAKE) MAKEFLAGS= -j1 PRODUCT_HOME=$(OUTPUT_ROOT)/jdk JPRT_JAVA_HOME=$(OUTPUT_ROOT)/jdk ALT_OUTPUTDIR=$(OUTPUT_ROOT) $(TEST)) || true - @$(call MakeFinish,test,$(if $(TEST),$(TEST),all)) - @$(call AtRootMakeEnd) -.PHONY: test - - -# Stores the tips for each repository. This file is be used when constructing the jdk image and can be -# used to track the exact sources used to build that image. -source-tips: $(OUTPUT_ROOT)/source_tips -$(OUTPUT_ROOT)/source_tips: FRC - @$(MKDIR) -p $(@D) - @$(RM) $@ - @$(call GetSourceTips) - - -# Remove everything, except the output from configure. -clean: clean-langtools clean-corba clean-jaxp clean-jaxws clean-hotspot clean-jdk clean-images clean-bootcycle-build - @($(CD) $(OUTPUT_ROOT) && $(RM) -r tmp source_tips build.log*) - @$(ECHO) Cleaned everything except the build configuration. -.PHONY: clean - -# Remove everything, you have to rerun configure. -dist-clean: - @$(RM) -r $(OUTPUT_ROOT) - @$(ECHO) Cleaned everything, you will have to re-run configure. -.PHONY: dist-clean - -clean-langtools: - $(call CleanComponent,langtools) -clean-corba: - $(call CleanComponent,corba) -clean-jaxp: - $(call CleanComponent,jaxp) -clean-jaxws: - $(call CleanComponent,jaxws) -clean-hotspot: - $(call CleanComponent,hotspot) -clean-jdk: - $(call CleanComponent,jdk) -clean-images: - $(call CleanComponent,images) -clean-bootcycle-build: - $(call CleanComponent,bootcycle-build) - -.PHONY: clean-langtools clean-corba clean-jaxp clean-jaxws clean-hotspot clean-jdk clean-images - -endif # Here are "global" targets, i.e. targets that can be executed without specifying a single configuration. -# If you addd more global targets, please update the fatal-error macro. +# If you addd more global targets, please update the variable global_targets in MakeHelpers. help: $(info ) @@ -258,7 +99,7 @@ help: $(info . make test # Run tests, default is all tests (see TEST below)) $(info ) $(info Targets for specific components) - $(info (Component is any of langtools, corba, jaxp, jaxws, hotspot, jdk or images)) + $(info (Component is any of langtools, corba, jaxp, jaxws, hotspot, jdk, images or overlay-images)) $(info . make # Build and everything it depends on. ) $(info . make -only # Build only, without dependencies. This) $(info . # is faster but can result in incorrect build results!) @@ -272,7 +113,7 @@ help: $(info . make LOG= # Change the log level from warn to ) $(info . # Available log levels are:) $(info . # 'warn' (default), 'info', 'debug' and 'trace') - $(info . # To see executed command lines, use LOG=info) + $(info . # To see executed command lines, use LOG=debug) $(info ) $(info . make JOBS= # Run parallel make jobs) $(info . # Note that -jN does not work as expected!) @@ -280,5 +121,11 @@ help: $(info . make test TEST= # Only run the given test or tests, e.g.) $(info . # make test TEST="jdk_lang jdk_net") $(info ) -.PHONY: help -FRC: # Force target + +configure: + @$(SHELL) $(root_dir)/configure $(CONFIGURE_ARGS) + @echo ==================================================== + @echo "Note: This is a non-recommended way of running configure." + @echo "Instead, run 'sh configure' in the top-level directory" + +.PHONY: help configure diff --git a/common/makefiles/NativeCompilation.gmk b/common/makefiles/NativeCompilation.gmk index d93af0beb32..441dfafa502 100644 --- a/common/makefiles/NativeCompilation.gmk +++ b/common/makefiles/NativeCompilation.gmk @@ -32,10 +32,10 @@ ifeq (,$(_MAKEBASE_GMK)) endif ifeq ($(COMPILER_TYPE),CC) - COMPILING_MSG=echo Compiling $1 - LINKING_MSG=echo Linking $1 - LINKING_EXE_MSG=echo Linking executable $1 - ARCHIVING_MSG=echo Archiving $1 + COMPILING_MSG=echo $(LOG_INFO) "Compiling $(notdir $1) (for $(notdir $2))" + LINKING_MSG=echo $(LOG_INFO) "Linking $1" + LINKING_EXE_MSG=echo $(LOG_INFO) "Linking executable $1" + ARCHIVING_MSG=echo $(LOG_INFO) "Archiving $1" else COMPILING_MSG= LINKING_MSG= @@ -94,7 +94,7 @@ define add_native_source $$($1_$2_OBJ) : $2 ifeq ($(COMPILER_TYPE),CC) - $$(call COMPILING_MSG,$$(notdir $2)) + $$(call COMPILING_MSG,$2,$$($1_TARGET)) $$($1_$2_COMP) $$($1_$2_FLAGS) $$($1_$2_DEP_FLAG) $$($1_$2_DEP) $(CC_OUT_OPTION)$$($1_$2_OBJ) $2 endif ifeq ($(COMPILER_TYPE),CL) @@ -129,30 +129,8 @@ define SetupNativeCompilation # CC the compiler to use, default is $(CC) # LDEXE the linker to use for linking executables, default is $(LDEXE) # OPTIMIZATION sets optimization level to NONE, LOW, HIGH, HIGHEST - $(if $2,$1_$(strip $2)) - $(if $3,$1_$(strip $3)) - $(if $4,$1_$(strip $4)) - $(if $5,$1_$(strip $5)) - $(if $6,$1_$(strip $6)) - $(if $7,$1_$(strip $7)) - $(if $8,$1_$(strip $8)) - $(if $9,$1_$(strip $9)) - $(if $(10),$1_$(strip $(10))) - $(if $(11),$1_$(strip $(11))) - $(if $(12),$1_$(strip $(12))) - $(if $(13),$1_$(strip $(13))) - $(if $(14),$1_$(strip $(14))) - $(if $(15),$1_$(strip $(15))) - $(if $(16),$1_$(strip $(16))) - $(if $(17),$1_$(strip $(17))) - $(if $(18),$1_$(strip $(18))) - $(if $(19),$1_$(strip $(19))) - $(if $(20),$1_$(strip $(20))) - $(if $(21),$1_$(strip $(21))) - $(if $(22),$1_$(strip $(22))) - $(if $(23),$1_$(strip $(23))) - $(if $(24),$1_$(strip $(24))) - $(if $(25),$1_$(strip $(25))) + $(foreach i,2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25, $(if $($i),$1_$(strip $($i)))$(NEWLINE)) + $(call LogSetupMacroEntry,SetupNativeCompilation($1),$2,$3,$4,$5,$6,$7,$8,$9,$(10),$(11),$(12),$(13),$(14),$(15),$(16),$(17),$(18),$(19),$(20),$(21),$(22),$(23),$(24),$(25)) $(if $(26),$(error Internal makefile error: Too many arguments to SetupNativeCompilation, please update NativeCompilation.gmk)) ifneq (,$$($1_BIN)) @@ -236,9 +214,9 @@ define SetupNativeCompilation $$(error You have to specify LANG for native compilation $1) endif ifeq (C,$$($1_LANG)) - ifeq ($$($1_LDEXE),) + ifeq ($$($1_LDEXE),) $1_LDEXE:=$(LDEXE) - endif + endif $1_LD:=$(LD) else ifeq (C++,$$($1_LANG)) @@ -254,9 +232,11 @@ define SetupNativeCompilation endif # Make sure the dirs exist. - $$(shell $(MKDIR) -p $$($1_SRC) $$($1_OBJECT_DIR) $$($1_OUTPUT_DIR)) + $$(eval $$(call MakeDir,$$($1_OBJECT_DIR) $$($1_OUTPUT_DIR))) + $$(foreach d,$$($1_SRC), $$(if $$(wildcard $$d),,$$(error SRC specified to SetupNativeCompilation $1 contains missing directory $$d))) + # Find all files in the source trees. Sort to remove duplicates. - $1_ALL_SRCS := $$(sort $$(foreach i,$$($1_SRC), $$(shell $(FIND) $$i -type f))) + $1_ALL_SRCS := $$(sort $$(shell $(FIND) $$($1_SRC) -type f)) # Extract the C/C++ files. $1_EXCLUDE_FILES:=$$(foreach i,$$($1_SRC),$$(addprefix $$i/,$$($1_EXCLUDE_FILES))) $1_INCLUDE_FILES:=$$(foreach i,$$($1_SRC),$$(addprefix $$i/,$$($1_INCLUDE_FILES))) @@ -291,7 +271,9 @@ define SetupNativeCompilation # Are there too many object files on disk? Perhaps because some source file was removed? $1_SUPERFLOUS_OBJS:=$$(sort $$(filter-out $$($1_EXPECTED_OBJS),$$($1_BINS))) # Clean out the superfluous object files. - $$(shell $(RM) -f $$($1_SUPERFLUOUS_OBJS)) + ifneq ($$($1_SUPERFLUOUS_OBJS),) + $$(shell $(RM) -f $$($1_SUPERFLUOUS_OBJS)) + endif # Pickup extra OPENJDK_TARGET_OS_API and/or OPENJDK_TARGET_OS dependent variables for CFLAGS. $1_EXTRA_CFLAGS:=$$($1_CFLAGS_$(OPENJDK_TARGET_OS_API)) $$($1_CFLAGS_$(OPENJDK_TARGET_OS)) @@ -358,11 +340,6 @@ define SetupNativeCompilation $$(error Unknown value for OPTIMIZATION: $$($1_OPTIMIZATION)) endif - # Now create a list of the packages that are about to compile. Used when sending source - # in a batch to the compiler. - $$(shell $(RM) $$($1_OBJECT_DIR)/_the.list_of_sources) - $$(eval $$(call ListPathsSafelyNow,$1_SRCS,\n, >> $$($1_OBJECT_DIR)/_the.list_of_sources)) - # Now call add_native_source for each source file we are going to compile. $$(foreach p,$$($1_SRCS),\ $$(eval $$(call add_native_source,$1,$$p,$$($1_OBJECT_DIR),\ @@ -385,8 +362,6 @@ define SetupNativeCompilation endif # mapfile doesnt seem to be implemented on macosx (yet??) - ifneq ($(OPENJDK_TARGET_CPU),ppc) - ifneq ($(OPENJDK_TARGET_CPU),arm) ifneq ($(OPENJDK_TARGET_OS),macosx) ifneq ($(OPENJDK_TARGET_OS),windows) $1_REAL_MAPFILE:=$$($1_MAPFILE) @@ -401,8 +376,6 @@ define SetupNativeCompilation endif endif endif - endif - endif # Pickup extra OPENJDK_TARGET_OS_API and/or OPENJDK_TARGET_OS dependent variables # for LDFLAGS and LDFLAGS_SUFFIX @@ -445,9 +418,9 @@ define SetupNativeCompilation $$($1_OBJECT_DIR)/$$(LIBRARY_PREFIX)$$($1_LIBRARY).debuginfo : $$($1_TARGET) \ $(FIX_EMPTY_SEC_HDR_FLAGS) $(ADD_GNU_DEBUGLINK) $(RM) $$@ - $(FIX_EMPTY_SEC_HDR_FLAGS) $$< + $(FIX_EMPTY_SEC_HDR_FLAGS) $(LOG_INFO) $$< $(OBJCOPY) --only-keep-debug $$< $$@ - $(CD) $$(@D) && $(ADD_GNU_DEBUGLINK) $$(@F) $$< + $(CD) $$(@D) && $(ADD_GNU_DEBUGLINK) $(LOG_INFO) $$(@F) $$< else # not solaris $$($1_OBJECT_DIR)/$$(LIBRARY_PREFIX)$$($1_LIBRARY).debuginfo : $$($1_TARGET) $(RM) $$@ @@ -523,9 +496,9 @@ define SetupNativeCompilation $$($1_OBJECT_DIR)/$$($1_PROGRAM).debuginfo : $$($1_TARGET) \ $(FIX_EMPTY_SEC_HDR_FLAGS) $(ADD_GNU_DEBUGLINK) $(RM) $$@ - $(FIX_EMPTY_SEC_HDR_FLAGS) $$< + $(FIX_EMPTY_SEC_HDR_FLAGS) $(LOG_INFO) $$< $(OBJCOPY) --only-keep-debug $$< $$@ - $(CD) $$(@D) && $(ADD_GNU_DEBUGLINK) $$(@F) $$< + $(CD) $$(@D) && $(ADD_GNU_DEBUGLINK) $(LOG_INFO) $$(@F) $$< else # not solaris $$($1_OBJECT_DIR)/$$($1_PROGRAM).debuginfo : $$($1_TARGET) $(RM) $$@ @@ -564,7 +537,7 @@ define SetupNativeCompilation $$($1_EXPECTED_OBJS) $$($1_RES) $$($1_LDFLAGS_SUFFIX) \ $$($1_EXTRA_LDFLAGS_SUFFIX) ifneq (,$$($1_GEN_MANIFEST)) - $(MT) -nologo /manifest $$($1_GEN_MANIFEST) /outputresource:$$@;#1 + $(MT) -nologo -manifest $$($1_GEN_MANIFEST) -outputresource:$$@;#1 endif endif diff --git a/common/makefiles/RMICompilation.gmk b/common/makefiles/RMICompilation.gmk index 65ba9e621f9..fd332b4dbb5 100644 --- a/common/makefiles/RMICompilation.gmk +++ b/common/makefiles/RMICompilation.gmk @@ -34,16 +34,9 @@ define SetupRMICompilation # RUN_IIOP:=Set to run rmic with -iiop # RUN_IIOP_STDPKG:=Set to run rmic with -iiop -standardPackage # KEEP_GENERATED:=Set to keep generated sources around - $(if $2,$1_$(strip $2)) - $(if $3,$1_$(strip $3)) - $(if $4,$1_$(strip $4)) - $(if $5,$1_$(strip $5)) - $(if $6,$1_$(strip $6)) - $(if $7,$1_$(strip $7)) - $(if $8,$1_$(strip $8)) - $(if $9,$1_$(strip $9)) - $(if $(10),$(error Internal makefile error: Too many arguments to SetupRMICompilation, please update RMICompilation.gmk)) - + $(foreach i,2 3 4 5 6 7 8 9 10 11 12 13 14 15, $(if $($i),$1_$(strip $($i)))$(NEWLINE)) + $(call LogSetupMacroEntry,SetupRMICompilation($1),$2,$3,$4,$5,$6,$7,$8,$9,$(10),$(11),$(12),$(13),$(14),$(15)) + $(if $(16),$(error Internal makefile error: Too many arguments to SetupRMICompilation, please update RMICompilation.gmk)) $1_DEP_FILE := $$($1_STUB_CLASSES_DIR)/$1_rmic @@ -86,12 +79,12 @@ define SetupRMICompilation $$($1_DEP_FILE): $$($1_CLASS_FILES) $(MKDIR) -p $$($1_STUB_CLASSES_DIR) if [ "x$$($1_ARGS)" != "x" ]; then \ - $(ECHO) Running rmic $$($1_ARGS) for $$($1_DOLLAR_SAFE_CLASSES) &&\ + $(ECHO) $(LOG_INFO) Running rmic $$($1_ARGS) for $$($1_DOLLAR_SAFE_CLASSES) &&\ $(RMIC) $$($1_ARGS) -classpath "$$($1_CLASSES_DIR)" \ -d $$($1_STUB_CLASSES_DIR) $$($1_DOLLAR_SAFE_CLASSES);\ fi; if [ "x$$($1_ARGS2)" != "x" ]; then \ - $(ECHO) Running rmic $$($1_ARGS2) for $$($1_DOLLAR_SAFE_CLASSES) &&\ + $(ECHO) $(LOG_INFO) Running rmic $$($1_ARGS2) for $$($1_DOLLAR_SAFE_CLASSES) &&\ $(RMIC) $$($1_ARGS2) -classpath "$$($1_CLASSES_DIR)" \ -d $$($1_STUB_CLASSES_DIR) $$($1_DOLLAR_SAFE_CLASSES);\ fi; diff --git a/common/makefiles/compress.post b/common/makefiles/support/ListPathsSafely-post-compress.incl similarity index 87% rename from common/makefiles/compress.post rename to common/makefiles/support/ListPathsSafely-post-compress.incl index 06b44c43461..d8ccf22445c 100644 --- a/common/makefiles/compress.post +++ b/common/makefiles/support/ListPathsSafely-post-compress.incl @@ -1 +1 @@ -)))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))) \ No newline at end of file +)))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))) diff --git a/common/makefiles/compress.pre b/common/makefiles/support/ListPathsSafely-pre-compress.incl similarity index 98% rename from common/makefiles/compress.pre rename to common/makefiles/support/ListPathsSafely-pre-compress.incl index ff41134e1e2..7230c6cc737 100644 --- a/common/makefiles/compress.pre +++ b/common/makefiles/support/ListPathsSafely-pre-compress.incl @@ -1 +1 @@ -$(subst com,X01,$(subst org,X02,$(subst sun,X03,$(subst java,X04,$(subst javax,X05,$(subst sun/io,X06,$(subst com/sun,X07,$(subst java/io,X08,$(subst org/omg,X09,$(subst org/w3c,X10,$(subst org/xml,X11,$(subst sun/awt,X12,$(subst sun/net,X13,$(subst sun/nio,X14,$(subst sun/rmi,X15,$(subst java/awt,X16,$(subst java/net,X17,$(subst java/nio,X18,$(subst java/rmi,X19,$(subst META-INF,X20,$(subst sun/font,X21,$(subst sun/misc,X22,$(subst sun/text,X23,$(subst sun/util,X24,$(subst java/lang,X25,$(subst java/math,X26,$(subst java/text,X27,$(subst java/util,X28,$(subst javax/jws,X29,$(subst javax/net,X30,$(subst javax/rmi,X31,$(subst javax/xml,X32,$(subst sun/corba,X33,$(subst sun/print,X34,$(subst sun/swing,X35,$(subst java/beans,X36,$(subst javax/lang,X37,$(subst sun/applet,X38,$(subst sun/java2d,X39,$(subst java/applet,X40,$(subst javax/print,X41,$(subst javax/sound,X42,$(subst javax/swing,X43,$(subst javax/tools,X44,$(subst jdk/classes,X45,$(subst org/relaxng,X46,$(subst sun/reflect,X47,$(subst javax/crypto,X48,$(subst javax/naming,X49,$(subst jaxp/classes,X50,$(subst sun/security,X51,$(subst corba/classes,X52,$(subst java/security,X53,$(subst javax/imageio,X54,$(subst jdk/btclasses,X55,$(subst javax/activity,X56,$(subst javax/security,X57,$(subst jdk/newclasses,X58,$(subst sun/instrument,X59,$(subst sun/management,X60,$(subst corba/btclasses,X61,$(subst jdk/democlasses,X62,$(subst javax/activation,X63,$(subst javax/annotation,X64,$(subst javax/management,X65,$(subst javax/transaction,X66,$(subst jaxws/jaf_classes,X67,$(subst langtools/classes,X68,$(subst META-INF/services,X69,$(subst jdk/newdemoclasses,X70,$(subst javax/accessibility,X71,$(subst jaxws/jaxws_classes,X72, \ No newline at end of file +$(subst com,X01,$(subst org,X02,$(subst sun,X03,$(subst java,X04,$(subst javax,X05,$(subst sun/io,X06,$(subst com/sun,X07,$(subst java/io,X08,$(subst org/omg,X09,$(subst org/w3c,X10,$(subst org/xml,X11,$(subst sun/awt,X12,$(subst sun/net,X13,$(subst sun/nio,X14,$(subst sun/rmi,X15,$(subst java/awt,X16,$(subst java/net,X17,$(subst java/nio,X18,$(subst java/rmi,X19,$(subst META-INF,X20,$(subst sun/font,X21,$(subst sun/misc,X22,$(subst sun/text,X23,$(subst sun/util,X24,$(subst java/lang,X25,$(subst java/math,X26,$(subst java/text,X27,$(subst java/util,X28,$(subst javax/jws,X29,$(subst javax/net,X30,$(subst javax/rmi,X31,$(subst javax/xml,X32,$(subst sun/corba,X33,$(subst sun/print,X34,$(subst sun/swing,X35,$(subst java/beans,X36,$(subst javax/lang,X37,$(subst sun/applet,X38,$(subst sun/java2d,X39,$(subst java/applet,X40,$(subst javax/print,X41,$(subst javax/sound,X42,$(subst javax/swing,X43,$(subst javax/tools,X44,$(subst jdk/classes,X45,$(subst org/relaxng,X46,$(subst sun/reflect,X47,$(subst javax/crypto,X48,$(subst javax/naming,X49,$(subst jaxp/classes,X50,$(subst sun/security,X51,$(subst corba/classes,X52,$(subst java/security,X53,$(subst javax/imageio,X54,$(subst jdk/btclasses,X55,$(subst javax/activity,X56,$(subst javax/security,X57,$(subst jdk/newclasses,X58,$(subst sun/instrument,X59,$(subst sun/management,X60,$(subst corba/btclasses,X61,$(subst jdk/democlasses,X62,$(subst javax/activation,X63,$(subst javax/annotation,X64,$(subst javax/management,X65,$(subst javax/transaction,X66,$(subst jaxws/jaf_classes,X67,$(subst langtools/classes,X68,$(subst META-INF/services,X69,$(subst jdk/newdemoclasses,X70,$(subst javax/accessibility,X71,$(subst jaxws/jaxws_classes,X72, diff --git a/common/makefiles/uncompress.sed b/common/makefiles/support/ListPathsSafely-uncompress.sed similarity index 100% rename from common/makefiles/uncompress.sed rename to common/makefiles/support/ListPathsSafely-uncompress.sed diff --git a/common/bin/unicode2x.sed b/common/makefiles/support/unicode2x.sed similarity index 100% rename from common/bin/unicode2x.sed rename to common/makefiles/support/unicode2x.sed diff --git a/common/src/uncygdrive.c b/common/src/fixpath.c similarity index 66% rename from common/src/uncygdrive.c rename to common/src/fixpath.c index 438e21434b9..835f6b7da6a 100644 --- a/common/src/uncygdrive.c +++ b/common/src/fixpath.c @@ -58,7 +58,7 @@ int is_cygdrive_here(int pos, char *in, int len) * Works in place since drive letter is always * shorter than /cygdrive/ */ -char *replace_cygdrive(char *in) +char *replace_cygdrive_cygwin(char *in) { int len = strlen(in); char *out = malloc(len+1); @@ -119,6 +119,61 @@ char *replace_substring(char *in, char *sub, char *rep) return out; } +char* msys_path_list; // @-separated list of paths prefix to look for +char* msys_path_list_end; // Points to last \0 in msys_path_list. + +void setup_msys_path_list(char* argument) +{ + char* p; + char* drive_letter_pos; + + msys_path_list = strdup(&argument[2]); + msys_path_list_end = &msys_path_list[strlen(msys_path_list)]; + + // Convert all at-sign (@) in path list to \0. + // @ was chosen as separator to minimize risk of other tools messing around with it + p = msys_path_list; + do { + if (p[1] == ':') { + // msys has mangled our path list, restore it from c:/... to /c/... + drive_letter_pos = p+1; + *drive_letter_pos = *p; + *p = '/'; + } + + // Look for an @ in the list + p = strchr(p, '@'); + if (p != NULL) { + *p = '\0'; + p++; + } + } while (p != NULL); +} + +char *replace_cygdrive_msys(char *in) +{ + char* str; + char* prefix; + char* p; + + str = strdup(in); + + // For each prefix in the path list, search for it and replace /c/... with c:/... + for (prefix = msys_path_list; prefix < msys_path_list_end && prefix != NULL; prefix += strlen(prefix)+1) { + p=str; + while ((p = strstr(p, prefix))) { + char* drive_letter = p+1; + *p = *drive_letter; + *drive_letter = ':'; + p++; + } + } + + return str; +} + +char*(*replace_cygdrive)(char *in) = NULL; + char *files_to_delete[1024]; int num_files_to_delete = 0; @@ -158,7 +213,7 @@ char *fix_at_file(char *in) atout = fopen(name, "w"); if (atout == NULL) { - fprintf(stderr, "Could open temporary file for writing! %s\n", name); + fprintf(stderr, "Could not open temporary file for writing! %s\n", name); exit(-1); } @@ -167,7 +222,13 @@ char *fix_at_file(char *in) append(&buffer, &buflen, &used, block, blocklen); } buffer[used] = 0; + if (getenv("DEBUG_FIXPATH") != NULL) { + fprintf(stderr, "fixpath input from @-file %s: %s\n", &in[1], buffer); + } fixed = replace_cygdrive(buffer); + if (getenv("DEBUG_FIXPATH") != NULL) { + fprintf(stderr, "fixpath converted to @-file %s is: %s\n", name, fixed); + } fwrite(fixed, strlen(fixed), 1, atout); fclose(atin); fclose(atout); @@ -194,12 +255,31 @@ int main(int argc, char **argv) int i; DWORD exitCode; - if (argc<2) { - fprintf(stderr, "Usage: uncygdrive.exe /cygdrive/c/WINDOWS/notepad.exe /cygdrive/c/x/test.txt"); + if (argc<3 || argv[1][0] != '-' || (argv[1][1] != 'c' && argv[1][1] != 'm')) { + fprintf(stderr, "Usage: fixpath -c|m /cygdrive/c/WINDOWS/notepad.exe /cygdrive/c/x/test.txt"); exit(0); } - line = replace_cygdrive(strstr(GetCommandLine(), argv[1])); + if (getenv("DEBUG_FIXPATH") != NULL) { + fprintf(stderr, "fixpath input line >%s<\n", strstr(GetCommandLine(), argv[1])); + } + + if (argv[1][1] == 'c' && argv[1][2] == '\0') { + if (getenv("DEBUG_FIXPATH") != NULL) { + fprintf(stderr, "using cygwin mode\n"); + } + replace_cygdrive = replace_cygdrive_cygwin; + } else if (argv[1][1] == 'm') { + if (getenv("DEBUG_FIXPATH") != NULL) { + fprintf(stderr, "using msys mode, with path list: %s\n", &argv[1][2]); + } + setup_msys_path_list(argv[1]); + replace_cygdrive = replace_cygdrive_msys; + } else { + fprintf(stderr, "Unknown mode: %s\n", argv[1]); + exit(-1); + } + line = replace_cygdrive(strstr(GetCommandLine(), argv[2])); for (i=1; i%s<\n", line); + if (getenv("DEBUG_FIXPATH") != NULL) { + fprintf(stderr, "fixpath converted line >%s<\n", line); } ZeroMemory(&si,sizeof(si)); @@ -238,9 +318,9 @@ int main(int argc, char **argv) WaitForSingleObject(pi.hProcess,INFINITE); GetExitCodeProcess(pi.hProcess,&exitCode); - if (getenv("DEBUG_UNCYGDRIVE") != NULL) { + if (getenv("DEBUG_FIXPATH") != NULL) { for (i=0; i $@ + +# The resources files are generated from lisp-like .mc files. +$(CORBA_OUTPUTDIR)/logwrappers/%SystemException.resource : $(CORBA_TOPDIR)/src/share/classes/com/sun/corba/se/spi/logging/data/%.mc $(CORBA_OUTPUTDIR)/btjars/logutil.jar + $(MKDIR) -p $(@D) + $(RM) -f $(@D)/_the_wrappers.d + $(ECHO) $(LOG_INFO) Generating resource file from $*.mc + $(JAVA) -jar $(CORBA_OUTPUTDIR)/btjars/logutil.jar make-resource $< $(@D) + + +$(CORBA_OUTPUTDIR)/logwrappers/_the_wrappers.d : $(CORBA_OUTPUTDIR)/btjars/logutil.jar \ + $(CORBA_OUTPUTDIR)/logwrappers/com/sun/corba/se/impl/logging/ActivationSystemException.java \ + $(CORBA_OUTPUTDIR)/logwrappers/com/sun/corba/se/impl/logging/IORSystemException.java \ + $(CORBA_OUTPUTDIR)/logwrappers/com/sun/corba/se/impl/logging/InterceptorsSystemException.java \ + $(CORBA_OUTPUTDIR)/logwrappers/com/sun/corba/se/impl/logging/NamingSystemException.java \ + $(CORBA_OUTPUTDIR)/logwrappers/com/sun/corba/se/impl/logging/OMGSystemException.java \ + $(CORBA_OUTPUTDIR)/logwrappers/com/sun/corba/se/impl/logging/ORBUtilSystemException.java \ + $(CORBA_OUTPUTDIR)/logwrappers/com/sun/corba/se/impl/logging/POASystemException.java \ + $(CORBA_OUTPUTDIR)/logwrappers/com/sun/corba/se/impl/logging/UtilSystemException.java \ + $(CORBA_OUTPUTDIR)/logwrappers/com/sun/corba/se/impl/logging/LogStrings.properties + $(MKDIR) -p $(@D) + $(ECHO) LOGWRAPPERS_ARE_CREATED=yes > $@ + +# Trigger the generation of the logwrappers. After the logwrapper classes and +# resources have been created, then the makefile will restart and the newly +# created java files will become part of the build further along in the makefile. +-include $(CORBA_OUTPUTDIR)/logwrappers/_the_wrappers.d + +ifeq ($(LOGWRAPPERS_ARE_CREATED),yes) + $(eval $(call SetupIdlCompilation,BUILD_IDLS,\ + IDLJ:=$(JAVA) -jar $(CORBA_OUTPUTDIR)/btjars/idlj.jar,\ + SRC:=$(CORBA_TOPDIR)/src/share/classes,\ + BIN:=$(CORBA_OUTPUTDIR)/gensrc,\ + EXCLUDES:=com/sun/tools/corba/se/idl/% \ + org/omg/CORBA/% \ + com/sun/corba/se/GiopIDL/% \ + org/omg/PortableServer/corba.idl,\ + INCLUDES:=%,\ + OLDIMPLBASES:=com/sun/corba/se/PortableActivationIDL/activation.idl \ + com/sun/corba/se/spi/activation/activation.idl,\ + DELETES:=DYNANYDELETEFILES org/omg/DynamicAny/*POA* org/omg/DynamicAny/*Holder* org/omg/DynamicAny/DynValueBoxHelper.java org/omg/DynamicAny/DynValueCommonHelper.java org/omg/DynamicAny/_DynValueCommonStub.java org/omg/DynamicAny/_DynValueBoxStub.java org/omg/DynamicAny/DynAnyPackage/TypeMismatchHolder.java org/omg/DynamicAny/DynAnyPackage/InvalidValueHolder.java org/omg/DynamicAny/DynAnyFactoryPackage/InconsistentTypeCodeHolder.java IOPDELETEFILES org/omg/IOP/BI_DIR_IIOP.java org/omg/IOP/ChainBypassCheck.java org/omg/IOP/ChainBypassInfo.java org/omg/IOP/FORWARDED_IDENTITY.java org/omg/IOP/INVOCATION_POLICIES.java org/omg/IOP/LogicalThreadId.java org/omg/IOP/SendingContextRunTime.java org/omg/IOP/UnknownExceptionInfo.java org/omg/IOP/TaggedComponentSeqHolder.java POAHELHOLFILES org/omg/PortableServer/CurrentPackage/NoContextHolder.java org/omg/PortableServer/ForwardRequestHolder.java org/omg/PortableServer/IdAssignmentPolicyValueHelper.java org/omg/PortableServer/IdAssignmentPolicyValueHolder.java org/omg/PortableServer/IdUniquenessPolicyValueHelper.java org/omg/PortableServer/IdUniquenessPolicyValueHolder.java org/omg/PortableServer/ImplicitActivationPolicyValueHelper.java org/omg/PortableServer/ImplicitActivationPolicyValueHolder.java org/omg/PortableServer/LifespanPolicyValueHelper.java org/omg/PortableServer/LifespanPolicyValueHolder.java org/omg/PortableServer/ServantRetentionPolicyValueHelper.java org/omg/PortableServer/ServantRetentionPolicyValueHolder.java org/omg/PortableServer/ObjectIdHelper.java org/omg/PortableServer/ObjectIdHolder.java org/omg/PortableServer/POAListHelper.java org/omg/PortableServer/POAListHolder.java org/omg/PortableServer/POAManagerPackage/AdapterInactiveHolder.java org/omg/PortableServer/POAManagerPackage/StateHelper.java org/omg/PortableServer/POAManagerPackage/StateHolder.java org/omg/PortableServer/POAPackage/AdapterAlreadyExistsHolder.java org/omg/PortableServer/POAPackage/AdapterNonExistentHolder.java org/omg/PortableServer/POAPackage/InvalidPolicyHolder.java org/omg/PortableServer/POAPackage/NoServantHolder.java org/omg/PortableServer/POAPackage/ObjectAlreadyActiveHolder.java org/omg/PortableServer/POAPackage/ObjectNotActiveHolder.java org/omg/PortableServer/POAPackage/ServantAlreadyActiveHolder.java org/omg/PortableServer/POAPackage/ServantNotActiveHolder.java org/omg/PortableServer/POAPackage/WrongAdapterHolder.java org/omg/PortableServer/POAPackage/WrongPolicyHolder.java org/omg/PortableServer/RequestProcessingPolicyValueHelper.java org/omg/PortableServer/RequestProcessingPolicyValueHolder.java org/omg/PortableServer/ServantActivatorHolder.java org/omg/PortableServer/ServantLocatorHolder.java org/omg/PortableServer/ThreadPolicyValueHelper.java org/omg/PortableServer/ThreadPolicyValueHolder.java PIHELHOLFILES org/omg/PortableInterceptor/ClientRequestInfoHelper.java org/omg/PortableInterceptor/ClientRequestInterceptorHelper.java org/omg/PortableInterceptor/IORInfoHelper.java org/omg/PortableInterceptor/IORInterceptorHelper.java org/omg/PortableInterceptor/InterceptorHelper.java org/omg/PortableInterceptor/ORBInitInfoHelper.java org/omg/PortableInterceptor/ORBInitializerHelper.java org/omg/PortableInterceptor/PolicyFactoryHelper.java org/omg/PortableInterceptor/ReplyStatusHelper.java org/omg/PortableInterceptor/RequestInfoHelper.java org/omg/PortableInterceptor/ServerRequestInfoHelper.java org/omg/PortableInterceptor/ServerRequestInterceptorHelper.java org/omg/PortableInterceptor/SlotIdHelper.java org/omg/PortableInterceptor/ClientRequestInfoHolder.java org/omg/PortableInterceptor/ClientRequestInterceptorHolder.java org/omg/PortableInterceptor/CurrentHolder.java org/omg/PortableInterceptor/ForwardRequestHolder.java org/omg/PortableInterceptor/IORInfoHolder.java org/omg/PortableInterceptor/IORInterceptorHolder.java org/omg/PortableInterceptor/InterceptorHolder.java org/omg/PortableInterceptor/InvalidSlotHolder.java org/omg/PortableInterceptor/ORBInitInfoHolder.java org/omg/PortableInterceptor/ORBInitializerHolder.java org/omg/PortableInterceptor/PolicyFactoryHolder.java org/omg/PortableInterceptor/RequestInfoHolder.java org/omg/PortableInterceptor/ServerRequestInfoHolder.java org/omg/PortableInterceptor/ServerRequestInterceptorHolder.java org/omg/PortableInterceptor/TaggedComponentSeqHolder.java org/omg/PortableInterceptor/ORBInitInfoPackage/DuplicateNameHolder.java org/omg/PortableInterceptor/ORBInitInfoPackage/InvalidNameHolder.java org/omg/IOP/CodecPackage/FormatMismatchHolder.java org/omg/IOP/CodecPackage/InvalidTypeForEncodingHolder.java org/omg/IOP/CodecPackage/TypeMismatchHolder.java org/omg/IOP/CodecHelper.java org/omg/IOP/EncodingFormatHelper.java org/omg/IOP/EncodingHelper.java org/omg/IOP/CodecFactoryPackage/UnknownEncodingHolder.java org/omg/IOP/CodecFactoryHolder.java org/omg/IOP/CodecHolder.java org/omg/IOP/EncodingHolder.java org/omg/IOP/TaggedComponentSeqHelper.java org/omg/Dynamic/ContextListHelper.java org/omg/Dynamic/ExceptionListHelper.java org/omg/Dynamic/ParameterHolder.java org/omg/Dynamic/ParameterListHolder.java org/omg/Dynamic/ExceptionListHolder.java org/omg/Dynamic/ParameterHelper.java org/omg/Dynamic/ParameterListHelper.java org/omg/Dynamic/RequestContextHelper.java CORBAX org/omg/CORBA/OctetSeqHelper.java org/omg/CORBA/OctetSeqHolder.java org/omg/CORBA/PolicyError.java org/omg/CORBA/RepositoryIdHelper.java)) + + $(BUILD_IDLS) : $(CORBA_OUTPUTDIR)/btjars/idlj.jar + + $(CORBA_OUTPUTDIR)/gensrc/_the_idls.d : $(BUILD_IDLS) $(CORBA_OUTPUTDIR)/btjars/idlj.jar + $(MKDIR) -p $(@D) + $(ECHO) IDLS_ARE_CREATED=yes > $@ + + -include $(CORBA_OUTPUTDIR)/gensrc/_the_idls.d + + ifeq ($(IDLS_ARE_CREATED),yes) + $(eval $(call SetupJavaCompilation,BUILD_CORBA,\ + SETUP:=GENERATE_NEWBYTECODE,\ + SRC:=$(CORBA_TOPDIR)/src/share/classes $(CORBA_OUTPUTDIR)/gensrc $(CORBA_OUTPUTDIR)/logwrappers,\ + EXCLUDES:=com/sun/corba/se/PortableActivationIDL\ + com/sun/tools/corba/se/logutil,\ + EXCLUDE_FILES:=com/sun/corba/se/impl/presentation/rmi/JNDIStateFactoryImpl.java \ + com/sun/corba/se/spi/presentation/rmi/StubWrapper.java \ + com/sun/org/omg/CORBA/IDLTypeOperations.java \ + com/sun/org/omg/CORBA/IRObjectOperations.java \ + org/omg/PortableInterceptor/UNKNOWN.java \ + com/sun/tools/corba/se/idl/ResourceBundleUtil.java\ + com/sun/corba/se/impl/presentation/rmi/jndi.properties,\ + COPY:=.prp LogStrings.properties,\ + BIN:=$(CORBA_OUTPUTDIR)/classes)) + + # Separate src.zip call to include sources that were excluded in the build to + # mimic behavior in old build system. + $(eval $(call SetupZipArchive,ARCHIVE_BUILD_CORBA,\ + SRC:=$(CORBA_TOPDIR)/src/share/classes $(CORBA_OUTPUTDIR)/gensrc $(CORBA_OUTPUTDIR)/logwrappers,\ + ZIP:=$(CORBA_OUTPUTDIR)/dist/lib/src.zip)) + + $(BUILD_CORBA) : $(BUILD_IDLS) $(LOGWRAPPER_DEPENDENCIES) + + # Run stripproperties on all sunorb resource files. + STRIP_PROP_SRC_FILES:=$(shell $(FIND) $(CORBA_TOPDIR)/src/share/classes -name "sunorb*.properties") + STRIP_PROP_FILES:=$(patsubst $(CORBA_TOPDIR)/src/share/classes/%,$(CORBA_OUTPUTDIR)/classes/%,\ + $(STRIP_PROP_SRC_FILES)) + # Simple delivery of zh_HK properties files just copies zh_TW properties files + STRIP_PROP_FILES+=$(patsubst $(CORBA_TOPDIR)/src/share/classes/%_zh_TW.properties,\ + $(CORBA_OUTPUTDIR)/classes/%_zh_HK.properties,\ + $(shell $(FIND) $(CORBA_TOPDIR)/src/share/classes -name "sunorb_zh_TW.properties")) + STRIP_PROP_SRC_FILES+=$(shell $(FIND) $(CORBA_TOPDIR)/src/share/classes -name "sunorb_zh_TW.properties") + STRIP_PROP_CMDLINE:=$(subst _SPACE_,$(SPACE),\ + $(join $(addprefix -clean_SPACE_,$(STRIP_PROP_SRC_FILES)), \ + $(addprefix _SPACE_,$(STRIP_PROP_FILES)))) + + $(CORBA_OUTPUTDIR)/_the.stripped_properties: $(STRIP_PROP_SRC_FILES) \ + $(CORBA_OUTPUTDIR)/btjars/stripproperties.jar + $(MKDIR) -p $(sort $(dir $(STRIP_PROP_FILES))) + $(call ListPathsSafely,STRIP_PROP_CMDLINE,\n, >> $(CORBA_OUTPUTDIR)/_the.strip_prop.cmdline) + $(JAVA) -jar $(CORBA_OUTPUTDIR)/btjars/stripproperties.jar \ + @$(CORBA_OUTPUTDIR)/_the.strip_prop.cmdline + $(TOUCH) $@ + + $(eval $(call SetupArchive,ARCHIVE_CORBA,\ + $(BUILD_CORBA) $(CORBA_OUTPUTDIR)/_the.stripped_properties,\ + SRCS:=$(CORBA_OUTPUTDIR)/classes,\ + SUFFIXES:=.class .prp .properties,\ + JAR:=$(CORBA_OUTPUTDIR)/dist/lib/classes.jar)) + + # The created classes.jar now contains Corba compiled to run on the target JDK + # and is ready for inclusion in jdk rt.jar. + + # The created src.zip now contains .java and .properties files used to create the classes in classes.jar + # and is ready for inclusion into the jdk src.zip + + BIN_FILES:=$(CORBA_TOPDIR)/src/share/classes/com/sun/tools/corba/se/idl/orb.idl \ + $(CORBA_TOPDIR)/src/share/classes/com/sun/tools/corba/se/idl/ir.idl + + $(CORBA_OUTPUTDIR)/dist/lib/bin.zip : $(BIN_FILES) $(CORBA_OUTPUTDIR)/dist/lib/classes.jar + $(MKDIR) -p $(CORBA_OUTPUTDIR)/dist/lib + $(MKDIR) -p $(CORBA_OUTPUTDIR)/lib + $(RM) -f $@ + $(ECHO) Creating `basename $@` + $(CP) $(BIN_FILES) $(CORBA_OUTPUTDIR)/lib + $(CHMOD) ug+w $(CORBA_OUTPUTDIR)/lib/* + (cd $(CORBA_OUTPUTDIR); $(ZIP) -q $@ lib/orb.idl lib/ir.idl) + + # The created bin.zip now contains the corba specific binaries: orb.idl, ir.idl + + all: $(CORBA_OUTPUTDIR)/btjars/stripproperties.jar \ + $(CORBA_OUTPUTDIR)/btjars/idlj.jar \ + $(CORBA_OUTPUTDIR)/btjars/logutil.jar \ + $(CORBA_OUTPUTDIR)/dist/lib/classes.jar \ + $(CORBA_OUTPUTDIR)/dist/lib/src.zip \ + $(CORBA_OUTPUTDIR)/dist/lib/bin.zip + endif +endif + +clean: + $(RM) -rf $(CORBA_OUTPUTDIR) + +.PHONY: default all clean clobber diff --git a/corba/makefiles/Makefile b/corba/makefiles/Makefile index ee07dedc49c..9539fe0e255 100644 --- a/corba/makefiles/Makefile +++ b/corba/makefiles/Makefile @@ -1,5 +1,5 @@ # -# Copyright (c) 2007, 2012, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 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 @@ -23,231 +23,27 @@ # questions. # -# -# Makefile for building the corba workspace. -# +# Locate this Makefile +ifeq ($(filter /%,$(lastword $(MAKEFILE_LIST))),) + makefile_path:=$(CURDIR)/$(lastword $(MAKEFILE_LIST)) +else + makefile_path:=$(lastword $(MAKEFILE_LIST)) +endif +repo_dir:=$(patsubst %/makefiles/Makefile,%,$(makefile_path)) -# This must be the first rule -default: all +# What is the name of this subsystem (langtools, corba, etc)? +subsystem_name:=$(notdir $(repo_dir)) -include $(SPEC) -include MakeBase.gmk -include JavaCompilation.gmk -include IdlCompilation.gmk - -JAVAC_JARS ?= "-Xbootclasspath/p:$(LANGTOOLS_OUTPUTDIR)/dist/bootstrap/lib/javac.jar" \ - -jar $(LANGTOOLS_OUTPUTDIR)/dist/bootstrap/lib/javac.jar -# The Corba sources are old and generates a LOT of warnings. -# Disable these using Xlint, until someone cares to fix them. -DISABLE_CORBA_WARNINGS:=-Xlint:all,-deprecation,-unchecked,-serial,-fallthrough,-cast,-rawtypes,-static,-dep-ann - -# The "generate old bytecode" javac setup uses the new compiler to compile for the -# boot jdk to generate tools that need to be run with the boot jdk. -# Thus we force the target bytecode to the boot jdk bytecode. -$(eval $(call SetupJavaCompiler,GENERATE_OLDBYTECODE,\ - JVM:=$(JAVA),\ - JAVAC:=$(JAVAC_JARS),\ - FLAGS:=$(BOOT_JDK_SOURCETARGET) -bootclasspath $(BOOT_RTJAR) $(DISABLE_CORBA_WARNINGS),\ - SERVER_DIR:=$(SJAVAC_SERVER_DIR),\ - SERVER_JVM:=$(SJAVAC_SERVER_JAVA))) - -# The "generate new bytecode" uses the new compiler to generate bytecode -# for the new jdk that is being built. The code compiled by this setup -# cannot necessarily be run with the boot jdk. -$(eval $(call SetupJavaCompiler,GENERATE_NEWBYTECODE,\ - JVM:=$(JAVA),\ - JAVAC:=$(JAVAC_JARS),\ - FLAGS:=-cp $(BOOT_TOOLSJAR) -XDignore.symbol.file=true $(DISABLE_CORBA_WARNINGS),\ - SERVER_DIR:=$(SJAVAC_SERVER_DIR),\ - SERVER_JVM:=$(SJAVAC_SERVER_JAVA))) - -$(eval $(call SetupJavaCompilation,BUILD_STRIPPROP,\ - SETUP:=GENERATE_OLDBYTECODE,\ - SRC:=$(CORBA_TOPDIR)/make/tools/src,\ - BIN:=$(CORBA_OUTPUTDIR)/btclasses/stripprop_classes)) - -$(eval $(call SetupArchive,ARCHIVE_STRIPPROP,$(BUILD_STRIPPROP),\ - SRCS:=$(CORBA_OUTPUTDIR)/btclasses/stripprop_classes,\ - JAR:=$(CORBA_OUTPUTDIR)/btjars/stripproperties.jar,\ - JARMAIN:=build.tools.stripproperties.StripPropertiesCorba)) - -$(eval $(call SetupJavaCompilation,BUILD_IDLJ,\ - SETUP:=GENERATE_OLDBYTECODE,\ - SRC:=$(CORBA_TOPDIR)/src/share/classes,\ - BIN:=$(CORBA_OUTPUTDIR)/btclasses/idlj_classes,\ - COPY:=.prp,\ - INCLUDES:=com/sun/tools/corba/se/idl,\ - EXCLUDE_FILES:=ResourceBundleUtil.java)) - -$(eval $(call SetupArchive,ARCHIVE_IDLJ,$(BUILD_IDLJ),\ - SRCS:=$(CORBA_OUTPUTDIR)/btclasses/idlj_classes,\ - SUFFIXES:=.class .prp,\ - JAR:=$(CORBA_OUTPUTDIR)/btjars/idlj.jar,\ - JARMAIN:=com.sun.tools.corba.se.idl.toJavaPortable.Compile)) - -$(eval $(call SetupJavaCompilation,BUILD_LOGUTIL,\ - SETUP:=GENERATE_OLDBYTECODE,\ - SRC:=$(CORBA_TOPDIR)/src/share/classes,\ - BIN:=$(CORBA_OUTPUTDIR)/btclasses/logutil_classes,\ - INCLUDES:=com/sun/tools/corba/se/logutil)) - -$(eval $(call SetupArchive,ARCHIVE_LOGUTIL,$(BUILD_LOGUTIL),\ - SRCS:=$(CORBA_OUTPUTDIR)/btclasses/logutil_classes,\ - JAR:=$(CORBA_OUTPUTDIR)/btjars/logutil.jar,\ - JARMAIN:=com.sun.tools.corba.se.logutil.MC)) - -# Generate LogWrapper classes -$(CORBA_OUTPUTDIR)/logwrappers/com/sun/corba/se/impl/logging/%SystemException.java : \ - $(CORBA_TOPDIR)/src/share/classes/com/sun/corba/se/spi/logging/data/%.mc \ - $(CORBA_OUTPUTDIR)/btjars/logutil.jar - $(MKDIR) -p $(@D) - $(RM) -f $(@D)/_the_wrappers.d - $(ECHO) Generating class file from $*.mc - $(JAVA) -jar $(CORBA_OUTPUTDIR)/btjars/logutil.jar make-class $< $(@D) - -# Generate LogWrapper properties file by concatening resource files -$(CORBA_OUTPUTDIR)/logwrappers/com/sun/corba/se/impl/logging/LogStrings.properties: \ - $(CORBA_OUTPUTDIR)/logwrappers/ActivationSystemException.resource \ - $(CORBA_OUTPUTDIR)/logwrappers/IORSystemException.resource \ - $(CORBA_OUTPUTDIR)/logwrappers/InterceptorsSystemException.resource \ - $(CORBA_OUTPUTDIR)/logwrappers/NamingSystemException.resource \ - $(CORBA_OUTPUTDIR)/logwrappers/OMGSystemException.resource \ - $(CORBA_OUTPUTDIR)/logwrappers/ORBUtilSystemException.resource \ - $(CORBA_OUTPUTDIR)/logwrappers/POASystemException.resource \ - $(CORBA_OUTPUTDIR)/logwrappers/UtilSystemException.resource - $(MKDIR) -p $(@D) - $(ECHO) Concatenating 8 resource files into $(@F) - $(CAT) $^ > $@ - -# The resources files are generated from lisp-like .mc files. -$(CORBA_OUTPUTDIR)/logwrappers/%SystemException.resource : $(CORBA_TOPDIR)/src/share/classes/com/sun/corba/se/spi/logging/data/%.mc $(CORBA_OUTPUTDIR)/btjars/logutil.jar - $(MKDIR) -p $(@D) - $(RM) -f $(@D)/_the_wrappers.d - $(ECHO) Generating resource file from $*.mc - $(JAVA) -jar $(CORBA_OUTPUTDIR)/btjars/logutil.jar make-resource $< $(@D) - - -$(CORBA_OUTPUTDIR)/logwrappers/_the_wrappers.d : $(CORBA_OUTPUTDIR)/btjars/logutil.jar \ - $(CORBA_OUTPUTDIR)/logwrappers/com/sun/corba/se/impl/logging/ActivationSystemException.java \ - $(CORBA_OUTPUTDIR)/logwrappers/com/sun/corba/se/impl/logging/IORSystemException.java \ - $(CORBA_OUTPUTDIR)/logwrappers/com/sun/corba/se/impl/logging/InterceptorsSystemException.java \ - $(CORBA_OUTPUTDIR)/logwrappers/com/sun/corba/se/impl/logging/NamingSystemException.java \ - $(CORBA_OUTPUTDIR)/logwrappers/com/sun/corba/se/impl/logging/OMGSystemException.java \ - $(CORBA_OUTPUTDIR)/logwrappers/com/sun/corba/se/impl/logging/ORBUtilSystemException.java \ - $(CORBA_OUTPUTDIR)/logwrappers/com/sun/corba/se/impl/logging/POASystemException.java \ - $(CORBA_OUTPUTDIR)/logwrappers/com/sun/corba/se/impl/logging/UtilSystemException.java \ - $(CORBA_OUTPUTDIR)/logwrappers/com/sun/corba/se/impl/logging/LogStrings.properties - $(MKDIR) -p $(@D) - $(ECHO) LOGWRAPPERS_ARE_CREATED=yes > $@ - -# Trigger the generation of the logwrappers. After the logwrapper classes and -# resources have been created, then the makefile will restart and the newly -# created java files will become part of the build further along in the makefile. --include $(CORBA_OUTPUTDIR)/logwrappers/_the_wrappers.d - -ifeq ($(LOGWRAPPERS_ARE_CREATED),yes) - $(eval $(call SetupIdlCompilation,BUILD_IDLS,\ - IDLJ:=$(JAVA) -jar $(CORBA_OUTPUTDIR)/btjars/idlj.jar,\ - SRC:=$(CORBA_TOPDIR)/src/share/classes,\ - BIN:=$(CORBA_OUTPUTDIR)/gensrc,\ - EXCLUDES:=com/sun/tools/corba/se/idl/% \ - org/omg/CORBA/% \ - com/sun/corba/se/GiopIDL/% \ - org/omg/PortableServer/corba.idl,\ - INCLUDES:=%,\ - OLDIMPLBASES:=com/sun/corba/se/PortableActivationIDL/activation.idl \ - com/sun/corba/se/spi/activation/activation.idl,\ - DELETES:=DYNANYDELETEFILES org/omg/DynamicAny/*POA* org/omg/DynamicAny/*Holder* org/omg/DynamicAny/DynValueBoxHelper.java org/omg/DynamicAny/DynValueCommonHelper.java org/omg/DynamicAny/_DynValueCommonStub.java org/omg/DynamicAny/_DynValueBoxStub.java org/omg/DynamicAny/DynAnyPackage/TypeMismatchHolder.java org/omg/DynamicAny/DynAnyPackage/InvalidValueHolder.java org/omg/DynamicAny/DynAnyFactoryPackage/InconsistentTypeCodeHolder.java IOPDELETEFILES org/omg/IOP/BI_DIR_IIOP.java org/omg/IOP/ChainBypassCheck.java org/omg/IOP/ChainBypassInfo.java org/omg/IOP/FORWARDED_IDENTITY.java org/omg/IOP/INVOCATION_POLICIES.java org/omg/IOP/LogicalThreadId.java org/omg/IOP/SendingContextRunTime.java org/omg/IOP/UnknownExceptionInfo.java org/omg/IOP/TaggedComponentSeqHolder.java POAHELHOLFILES org/omg/PortableServer/CurrentPackage/NoContextHolder.java org/omg/PortableServer/ForwardRequestHolder.java org/omg/PortableServer/IdAssignmentPolicyValueHelper.java org/omg/PortableServer/IdAssignmentPolicyValueHolder.java org/omg/PortableServer/IdUniquenessPolicyValueHelper.java org/omg/PortableServer/IdUniquenessPolicyValueHolder.java org/omg/PortableServer/ImplicitActivationPolicyValueHelper.java org/omg/PortableServer/ImplicitActivationPolicyValueHolder.java org/omg/PortableServer/LifespanPolicyValueHelper.java org/omg/PortableServer/LifespanPolicyValueHolder.java org/omg/PortableServer/ServantRetentionPolicyValueHelper.java org/omg/PortableServer/ServantRetentionPolicyValueHolder.java org/omg/PortableServer/ObjectIdHelper.java org/omg/PortableServer/ObjectIdHolder.java org/omg/PortableServer/POAListHelper.java org/omg/PortableServer/POAListHolder.java org/omg/PortableServer/POAManagerPackage/AdapterInactiveHolder.java org/omg/PortableServer/POAManagerPackage/StateHelper.java org/omg/PortableServer/POAManagerPackage/StateHolder.java org/omg/PortableServer/POAPackage/AdapterAlreadyExistsHolder.java org/omg/PortableServer/POAPackage/AdapterNonExistentHolder.java org/omg/PortableServer/POAPackage/InvalidPolicyHolder.java org/omg/PortableServer/POAPackage/NoServantHolder.java org/omg/PortableServer/POAPackage/ObjectAlreadyActiveHolder.java org/omg/PortableServer/POAPackage/ObjectNotActiveHolder.java org/omg/PortableServer/POAPackage/ServantAlreadyActiveHolder.java org/omg/PortableServer/POAPackage/ServantNotActiveHolder.java org/omg/PortableServer/POAPackage/WrongAdapterHolder.java org/omg/PortableServer/POAPackage/WrongPolicyHolder.java org/omg/PortableServer/RequestProcessingPolicyValueHelper.java org/omg/PortableServer/RequestProcessingPolicyValueHolder.java org/omg/PortableServer/ServantActivatorHolder.java org/omg/PortableServer/ServantLocatorHolder.java org/omg/PortableServer/ThreadPolicyValueHelper.java org/omg/PortableServer/ThreadPolicyValueHolder.java PIHELHOLFILES org/omg/PortableInterceptor/ClientRequestInfoHelper.java org/omg/PortableInterceptor/ClientRequestInterceptorHelper.java org/omg/PortableInterceptor/IORInfoHelper.java org/omg/PortableInterceptor/IORInterceptorHelper.java org/omg/PortableInterceptor/InterceptorHelper.java org/omg/PortableInterceptor/ORBInitInfoHelper.java org/omg/PortableInterceptor/ORBInitializerHelper.java org/omg/PortableInterceptor/PolicyFactoryHelper.java org/omg/PortableInterceptor/ReplyStatusHelper.java org/omg/PortableInterceptor/RequestInfoHelper.java org/omg/PortableInterceptor/ServerRequestInfoHelper.java org/omg/PortableInterceptor/ServerRequestInterceptorHelper.java org/omg/PortableInterceptor/SlotIdHelper.java org/omg/PortableInterceptor/ClientRequestInfoHolder.java org/omg/PortableInterceptor/ClientRequestInterceptorHolder.java org/omg/PortableInterceptor/CurrentHolder.java org/omg/PortableInterceptor/ForwardRequestHolder.java org/omg/PortableInterceptor/IORInfoHolder.java org/omg/PortableInterceptor/IORInterceptorHolder.java org/omg/PortableInterceptor/InterceptorHolder.java org/omg/PortableInterceptor/InvalidSlotHolder.java org/omg/PortableInterceptor/ORBInitInfoHolder.java org/omg/PortableInterceptor/ORBInitializerHolder.java org/omg/PortableInterceptor/PolicyFactoryHolder.java org/omg/PortableInterceptor/RequestInfoHolder.java org/omg/PortableInterceptor/ServerRequestInfoHolder.java org/omg/PortableInterceptor/ServerRequestInterceptorHolder.java org/omg/PortableInterceptor/TaggedComponentSeqHolder.java org/omg/PortableInterceptor/ORBInitInfoPackage/DuplicateNameHolder.java org/omg/PortableInterceptor/ORBInitInfoPackage/InvalidNameHolder.java org/omg/IOP/CodecPackage/FormatMismatchHolder.java org/omg/IOP/CodecPackage/InvalidTypeForEncodingHolder.java org/omg/IOP/CodecPackage/TypeMismatchHolder.java org/omg/IOP/CodecHelper.java org/omg/IOP/EncodingFormatHelper.java org/omg/IOP/EncodingHelper.java org/omg/IOP/CodecFactoryPackage/UnknownEncodingHolder.java org/omg/IOP/CodecFactoryHolder.java org/omg/IOP/CodecHolder.java org/omg/IOP/EncodingHolder.java org/omg/IOP/TaggedComponentSeqHelper.java org/omg/Dynamic/ContextListHelper.java org/omg/Dynamic/ExceptionListHelper.java org/omg/Dynamic/ParameterHolder.java org/omg/Dynamic/ParameterListHolder.java org/omg/Dynamic/ExceptionListHolder.java org/omg/Dynamic/ParameterHelper.java org/omg/Dynamic/ParameterListHelper.java org/omg/Dynamic/RequestContextHelper.java CORBAX org/omg/CORBA/OctetSeqHelper.java org/omg/CORBA/OctetSeqHolder.java org/omg/CORBA/PolicyError.java org/omg/CORBA/RepositoryIdHelper.java)) - - $(BUILD_IDLS) : $(CORBA_OUTPUTDIR)/btjars/idlj.jar - - $(CORBA_OUTPUTDIR)/gensrc/_the_idls.d : $(BUILD_IDLS) $(CORBA_OUTPUTDIR)/btjars/idlj.jar - $(MKDIR) -p $(@D) - $(ECHO) IDLS_ARE_CREATED=yes > $@ - - -include $(CORBA_OUTPUTDIR)/gensrc/_the_idls.d - - ifeq ($(IDLS_ARE_CREATED),yes) - $(eval $(call SetupJavaCompilation,BUILD_CORBA,\ - SETUP:=GENERATE_NEWBYTECODE,\ - SRC:=$(CORBA_TOPDIR)/src/share/classes $(CORBA_OUTPUTDIR)/gensrc $(CORBA_OUTPUTDIR)/logwrappers,\ - EXCLUDES:=com/sun/corba/se/PortableActivationIDL\ - com/sun/tools/corba/se/logutil,\ - EXCLUDE_FILES:=com/sun/corba/se/impl/presentation/rmi/JNDIStateFactoryImpl.java \ - com/sun/corba/se/spi/presentation/rmi/StubWrapper.java \ - com/sun/org/omg/CORBA/IDLTypeOperations.java \ - com/sun/org/omg/CORBA/IRObjectOperations.java \ - org/omg/PortableInterceptor/UNKNOWN.java \ - com/sun/tools/corba/se/idl/ResourceBundleUtil.java\ - com/sun/corba/se/impl/presentation/rmi/jndi.properties,\ - COPY:=.prp LogStrings.properties,\ - BIN:=$(CORBA_OUTPUTDIR)/classes)) - - # Separate src.zip call to include sources that were excluded in the build to - # mimic behavior in old build system. - $(eval $(call SetupZipArchive,ARCHIVE_BUILD_CORBA,\ - SRC:=$(CORBA_TOPDIR)/src/share/classes $(CORBA_OUTPUTDIR)/gensrc $(CORBA_OUTPUTDIR)/logwrappers,\ - ZIP:=$(CORBA_OUTPUTDIR)/dist/lib/src.zip)) - - $(BUILD_CORBA) : $(BUILD_IDLS) $(LOGWRAPPER_DEPENDENCIES) - - # Run stripproperties on all sunorb resource files. - STRIP_PROP_SRC_FILES:=$(shell $(FIND) $(CORBA_TOPDIR)/src/share/classes -name "sunorb*.properties") - STRIP_PROP_FILES:=$(patsubst $(CORBA_TOPDIR)/src/share/classes/%,$(CORBA_OUTPUTDIR)/classes/%,\ - $(STRIP_PROP_SRC_FILES)) - # Simple delivery of zh_HK properties files just copies zh_TW properties files - STRIP_PROP_FILES+=$(patsubst $(CORBA_TOPDIR)/src/share/classes/%_zh_TW.properties,\ - $(CORBA_OUTPUTDIR)/classes/%_zh_HK.properties,\ - $(shell $(FIND) $(CORBA_TOPDIR)/src/share/classes -name "sunorb_zh_TW.properties")) - STRIP_PROP_SRC_FILES+=$(shell $(FIND) $(CORBA_TOPDIR)/src/share/classes -name "sunorb_zh_TW.properties") - STRIP_PROP_CMDLINE:=$(subst _SPACE_,$(SPACE),\ - $(join $(addprefix -clean_SPACE_,$(STRIP_PROP_SRC_FILES)), \ - $(addprefix _SPACE_,$(STRIP_PROP_FILES)))) - - $(CORBA_OUTPUTDIR)/_the.stripped_properties: $(STRIP_PROP_SRC_FILES) \ - $(CORBA_OUTPUTDIR)/btjars/stripproperties.jar - $(MKDIR) -p $(sort $(dir $(STRIP_PROP_FILES))) - $(call ListPathsSafely,STRIP_PROP_CMDLINE,\n, >> $(CORBA_OUTPUTDIR)/_the.strip_prop.cmdline) - $(JAVA) -jar $(CORBA_OUTPUTDIR)/btjars/stripproperties.jar \ - @$(CORBA_OUTPUTDIR)/_the.strip_prop.cmdline - $(TOUCH) $@ - - $(eval $(call SetupArchive,ARCHIVE_CORBA,\ - $(BUILD_CORBA) $(CORBA_OUTPUTDIR)/_the.stripped_properties,\ - SRCS:=$(CORBA_OUTPUTDIR)/classes,\ - SUFFIXES:=.class .prp .properties,\ - JAR:=$(CORBA_OUTPUTDIR)/dist/lib/classes.jar)) - - # The created classes.jar now contains Corba compiled to run on the target JDK - # and is ready for inclusion in jdk rt.jar. - - # The created src.zip now contains .java and .properties files used to create the classes in classes.jar - # and is ready for inclusion into the jdk src.zip - - BIN_FILES:=$(CORBA_TOPDIR)/src/share/classes/com/sun/tools/corba/se/idl/orb.idl \ - $(CORBA_TOPDIR)/src/share/classes/com/sun/tools/corba/se/idl/ir.idl - - $(CORBA_OUTPUTDIR)/dist/lib/bin.zip : $(BIN_FILES) $(CORBA_OUTPUTDIR)/dist/lib/classes.jar - $(MKDIR) -p $(CORBA_OUTPUTDIR)/dist/lib - $(MKDIR) -p $(CORBA_OUTPUTDIR)/lib - $(RM) -f $@ - $(ECHO) Creating `basename $@` - $(CP) $(BIN_FILES) $(CORBA_OUTPUTDIR)/lib - $(CHMOD) ug+w $(CORBA_OUTPUTDIR)/lib/* - (cd $(CORBA_OUTPUTDIR); $(ZIP) -q $@ lib/orb.idl lib/ir.idl) - - # The created bin.zip now contains the corba specific binaries: orb.idl, ir.idl - - all: $(CORBA_OUTPUTDIR)/btjars/stripproperties.jar \ - $(CORBA_OUTPUTDIR)/btjars/idlj.jar \ - $(CORBA_OUTPUTDIR)/btjars/logutil.jar \ - $(CORBA_OUTPUTDIR)/dist/lib/classes.jar \ - $(CORBA_OUTPUTDIR)/dist/lib/src.zip \ - $(CORBA_OUTPUTDIR)/dist/lib/bin.zip - endif +# Try to locate top-level makefile +top_level_makefile:=$(repo_dir)/../common/makefiles/Makefile +ifneq ($(wildcard $(top_level_makefile)),) + $(info Will run $(subsystem_name) target on top-level Makefile) + $(info WARNING: This is a non-recommended way of building!) + $(info ===================================================) +else + $(info Cannot locate top-level Makefile. Is this repo not checked out as part of a complete forest?) + $(error Build from top-level Makefile instead) endif -clean: - $(RM) -rf $(CORBA_OUTPUTDIR) - -.PHONY: default all clean clobber +all: + @$(MAKE) -f $(top_level_makefile) $(subsystem_name) diff --git a/corba/src/share/classes/com/sun/corba/se/impl/util/IdentityHashtable.java b/corba/src/share/classes/com/sun/corba/se/impl/util/IdentityHashtable.java index 1e65abe073b..c4ff3971fa4 100644 --- a/corba/src/share/classes/com/sun/corba/se/impl/util/IdentityHashtable.java +++ b/corba/src/share/classes/com/sun/corba/se/impl/util/IdentityHashtable.java @@ -42,16 +42,6 @@ import java.util.NoSuchElementException; * instead, it uses the System.identityHashcode() method and pointer comparison. * In addition, all synchronization has been removed. */ -/** - * IdentityHashtable collision list. - */ -class IdentityHashtableEntry { - int hash; - Object key; - Object value; - IdentityHashtableEntry next; -} - public final class IdentityHashtable extends Dictionary { /** * The hash table data. diff --git a/corba/src/share/classes/com/sun/corba/se/impl/util/IdentityHashtableEntry.java b/corba/src/share/classes/com/sun/corba/se/impl/util/IdentityHashtableEntry.java new file mode 100644 index 00000000000..cb4198de96e --- /dev/null +++ b/corba/src/share/classes/com/sun/corba/se/impl/util/IdentityHashtableEntry.java @@ -0,0 +1,43 @@ +/* + * Copyright (c) 1999, 2004, 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. + */ + +/* + * Licensed Materials - Property of IBM + * RMI-IIOP v1.0 + * Copyright IBM Corp. 1998 1999 All Rights Reserved + * + */ + +package com.sun.corba.se.impl.util; + +/** + * IdentityHashtable collision list. + */ +class IdentityHashtableEntry { + int hash; + Object key; + Object value; + IdentityHashtableEntry next; +} diff --git a/hotspot/.hgtags b/hotspot/.hgtags index 0da4f9dddd5..8ea3ed76521 100644 --- a/hotspot/.hgtags +++ b/hotspot/.hgtags @@ -287,3 +287,7 @@ f2e12eb74117c917c0bb264694c02de4a6a15a10 hs25-b03 b261523fe66c40a02968f0aa7e73602491bb3386 hs25-b05 4547dc71db765276e027b0c2780b724bae0a07d3 jdk8-b61 d0337c31c8be7716369b4e7c3bd5f352983c6a06 hs25-b06 +dccd40de8db1fa96f186e6179907818d75320440 jdk8-b62 +dc16fe422c535ecd4e9f80fb814a1bb9704da6f5 hs25-b07 +acabb5c282f59be7e3238920b2ea06b684ab68f7 jdk8-b63 +8cb93eadfb6dcab88d91b8e2cd3e0e07d0ac4048 hs25-b08 diff --git a/hotspot/agent/src/share/classes/sun/jvm/hotspot/interpreter/Bytecodes.java b/hotspot/agent/src/share/classes/sun/jvm/hotspot/interpreter/Bytecodes.java index 1ba20f79fed..3f09ee30c19 100644 --- a/hotspot/agent/src/share/classes/sun/jvm/hotspot/interpreter/Bytecodes.java +++ b/hotspot/agent/src/share/classes/sun/jvm/hotspot/interpreter/Bytecodes.java @@ -272,9 +272,10 @@ public class Bytecodes { public static final int _fast_aldc = 229; public static final int _fast_aldc_w = 230; public static final int _return_register_finalizer = 231; - public static final int _shouldnotreachhere = 232; // For debugging + public static final int _invokehandle = 232; + public static final int _shouldnotreachhere = 233; // For debugging - public static final int number_of_codes = 233; + public static final int number_of_codes = 234; // Flag bits derived from format strings, can_trap, can_rewrite, etc.: // semantic flags: @@ -787,20 +788,22 @@ public class Bytecodes { def(_fast_aaccess_0 , "fast_aaccess_0" , "b_JJ" , null , BasicType.getTObject() , 1, true , _aload_0 ); def(_fast_faccess_0 , "fast_faccess_0" , "b_JJ" , null , BasicType.getTObject() , 1, true , _aload_0 ); - def(_fast_iload , "fast_iload" , "bi" , null , BasicType.getTInt() , 1, false, _iload); - def(_fast_iload2 , "fast_iload2" , "bi_i" , null , BasicType.getTInt() , 2, false, _iload); - def(_fast_icaload , "fast_icaload" , "bi_" , null , BasicType.getTInt() , 0, false, _iload); + def(_fast_iload , "fast_iload" , "bi" , null , BasicType.getTInt() , 1, false, _iload ); + def(_fast_iload2 , "fast_iload2" , "bi_i" , null , BasicType.getTInt() , 2, false, _iload ); + def(_fast_icaload , "fast_icaload" , "bi_" , null , BasicType.getTInt() , 0, false, _iload ); // Faster method invocation. - def(_fast_invokevfinal , "fast_invokevfinal" , "bJJ" , null , BasicType.getTIllegal(), -1, true, _invokevirtual); + def(_fast_invokevfinal , "fast_invokevfinal" , "bJJ" , null , BasicType.getTIllegal(), -1, true, _invokevirtual ); def(_fast_linearswitch , "fast_linearswitch" , "" , null , BasicType.getTVoid() , -1, false, _lookupswitch ); def(_fast_binaryswitch , "fast_binaryswitch" , "" , null , BasicType.getTVoid() , -1, false, _lookupswitch ); + def(_fast_aldc , "fast_aldc" , "bj" , null , BasicType.getTObject(), 1, true, _ldc ); + def(_fast_aldc_w , "fast_aldc_w" , "bJJ" , null , BasicType.getTObject(), 1, true, _ldc_w ); def(_return_register_finalizer, "return_register_finalizer", "b" , null , BasicType.getTVoid() , 0, true, _return ); - def(_fast_aldc , "fast_aldc" , "bj" , null , BasicType.getTObject(), 1, true, _ldc ); - def(_fast_aldc_w , "fast_aldc_w" , "bJJ" , null , BasicType.getTObject(), 1, true, _ldc_w ); + // special handling of signature-polymorphic methods + def(_invokehandle , "invokehandle" , "bJJ" , null , BasicType.getTIllegal(), -1, true, _invokevirtual ); def(_shouldnotreachhere , "_shouldnotreachhere" , "b" , null , BasicType.getTVoid() , 0, false); diff --git a/hotspot/agent/src/share/classes/sun/jvm/hotspot/runtime/Bytes.java b/hotspot/agent/src/share/classes/sun/jvm/hotspot/runtime/Bytes.java index a8df4418454..b0cc278b812 100644 --- a/hotspot/agent/src/share/classes/sun/jvm/hotspot/runtime/Bytes.java +++ b/hotspot/agent/src/share/classes/sun/jvm/hotspot/runtime/Bytes.java @@ -30,24 +30,10 @@ import sun.jvm.hotspot.utilities.PlatformInfo; /** Encapsulates some byte-swapping operations defined in the VM */ public class Bytes { - // swap if client platform is different from server's. private boolean swap; public Bytes(MachineDescription machDesc) { - String cpu = PlatformInfo.getCPU(); - if (cpu.equals("sparc")) { - if (machDesc.isBigEndian()) { - swap = false; - } else { - swap = true; - } - } else { // intel - if (machDesc.isBigEndian()) { - swap = true; - } else { - swap = false; - } - } + swap = !machDesc.isBigEndian(); } /** Should only swap if the hardware's underlying byte order is diff --git a/hotspot/agent/src/share/classes/sun/jvm/hotspot/tools/jcore/ByteCodeRewriter.java b/hotspot/agent/src/share/classes/sun/jvm/hotspot/tools/jcore/ByteCodeRewriter.java index 2a3fa023699..40dc912fd8e 100644 --- a/hotspot/agent/src/share/classes/sun/jvm/hotspot/tools/jcore/ByteCodeRewriter.java +++ b/hotspot/agent/src/share/classes/sun/jvm/hotspot/tools/jcore/ByteCodeRewriter.java @@ -29,6 +29,11 @@ import sun.jvm.hotspot.interpreter.*; import sun.jvm.hotspot.utilities.*; import sun.jvm.hotspot.debugger.*; import sun.jvm.hotspot.runtime.*; +import java.security.AccessController; +import java.security.PrivilegedAction; +import java.security.AccessControlContext; +import java.security.PrivilegedExceptionAction; +import java.security.PrivilegedActionException; public class ByteCodeRewriter { @@ -38,8 +43,20 @@ public class ByteCodeRewriter private byte[] code; private Bytes bytes; - public static final boolean DEBUG = false; private static final int jintSize = 4; + public static final boolean DEBUG; + + static { + String debug = (String) AccessController.doPrivileged( + new PrivilegedAction() { + public Object run() { + return System.getProperty("sun.jvm.hotspot.tools.jcore.ByteCodeRewriter.DEBUG"); + } + } + ); + DEBUG = (debug != null ? debug.equalsIgnoreCase("true") : false); + } + protected void debugMessage(String message) { System.out.println(message); @@ -54,6 +71,18 @@ public class ByteCodeRewriter } + protected short getConstantPoolIndexFromRefMap(int rawcode, int bci) { + int refIndex; + String fmt = Bytecodes.format(rawcode); + switch (fmt.length()) { + case 2: refIndex = 0xFF & method.getBytecodeByteArg(bci); break; + case 3: refIndex = 0xFFFF & bytes.swapShort(method.getBytecodeShortArg(bci)); break; + default: throw new IllegalArgumentException(); + } + + return (short)cpool.objectToCPIndex(refIndex); + } + protected short getConstantPoolIndex(int rawcode, int bci) { // get ConstantPool index from ConstantPoolCacheIndex at given bci String fmt = Bytecodes.format(rawcode); @@ -95,6 +124,12 @@ public class ByteCodeRewriter int hotspotcode = Bytecodes._illegal; int len = 0; + if (DEBUG) { + String msg = method.getMethodHolder().getName().asString() + "." + + method.getName().asString() + + method.getSignature().asString(); + debugMessage(msg); + } for (int bci = 0; bci < code.length;) { hotspotcode = Bytecodes.codeAt(method, bci); bytecode = Bytecodes.javaCode(hotspotcode); @@ -133,15 +168,15 @@ public class ByteCodeRewriter case Bytecodes._ldc_w: if (hotspotcode != bytecode) { - // fast_aldc_w puts constant in CP cache - cpoolIndex = getConstantPoolIndex(hotspotcode, bci + 1); + // fast_aldc_w puts constant in reference map + cpoolIndex = getConstantPoolIndexFromRefMap(hotspotcode, bci + 1); writeShort(code, bci + 1, cpoolIndex); } break; case Bytecodes._ldc: if (hotspotcode != bytecode) { - // fast_aldc puts constant in CP cache - cpoolIndex = getConstantPoolIndex(hotspotcode, bci + 1); + // fast_aldc puts constant in reference map + cpoolIndex = getConstantPoolIndexFromRefMap(hotspotcode, bci + 1); code[bci + 1] = (byte)(cpoolIndex); } break; diff --git a/hotspot/make/Makefile b/hotspot/make/Makefile index a0b7ba7687c..fe5a6b684d6 100644 --- a/hotspot/make/Makefile +++ b/hotspot/make/Makefile @@ -453,14 +453,30 @@ ifneq ($(OSNAME),windows) ifeq ($(JVM_VARIANT_ZEROSHARK), true) $(EXPORT_JRE_LIB_ARCH_DIR)/%.$(LIBRARY_SUFFIX): $(SHARK_DIR)/%.$(LIBRARY_SUFFIX) $(install-file) + $(EXPORT_JRE_LIB_ARCH_DIR)/%.debuginfo): $(SHARK_DIR)/%.debuginfo + $(install-file) + $(EXPORT_JRE_LIB_ARCH_DIR)/%.diz: $(SHARK_DIR)/%.diz + $(install-file) $(EXPORT_SERVER_DIR)/%.$(LIBRARY_SUFFIX): $(SHARK_DIR)/%.$(LIBRARY_SUFFIX) $(install-file) + $(EXPORT_SERVER_DIR)/%.debuginfo: $(SHARK_DIR)/%.debuginfo + $(install-file) + $(EXPORT_SERVER_DIR)/%.diz: $(SHARK_DIR)/%.diz + $(install-file) endif ifeq ($(JVM_VARIANT_ZERO), true) $(EXPORT_JRE_LIB_ARCH_DIR)/%.$(LIBRARY_SUFFIX): $(ZERO_DIR)/%.$(LIBRARY_SUFFIX) $(install-file) + $(EXPORT_JRE_LIB_ARCH_DIR)/%.debuginfo: $(ZERO_DIR)/%.debuginfo + $(install-file) + $(EXPORT_JRE_LIB_ARCH_DIR)/%.diz: $(ZERO_DIR)/%.diz + $(install-file) $(EXPORT_SERVER_DIR)/%.$(LIBRARY_SUFFIX): $(ZERO_DIR)/%.$(LIBRARY_SUFFIX) $(install-file) + $(EXPORT_SERVER_DIR)/%.debuginfo: $(ZERO_DIR)/%.debuginfo + $(install-file) + $(EXPORT_SERVER_DIR)/%.diz: $(ZERO_DIR)/%.diz + $(install-file) endif ifeq ($(JVM_VARIANT_MINIMAL1), true) $(EXPORT_JRE_LIB_ARCH_DIR)/%.$(LIBRARY_SUFFIX): $(MINIMAL1_DIR)/%.$(LIBRARY_SUFFIX) diff --git a/hotspot/make/excludeSrc.make b/hotspot/make/excludeSrc.make index 00a1e3a706e..721aea5c7e5 100644 --- a/hotspot/make/excludeSrc.make +++ b/hotspot/make/excludeSrc.make @@ -79,10 +79,10 @@ ifeq ($(INCLUDE_ALTERNATE_GCS), false) CXXFLAGS += -DSERIALGC CFLAGS += -DSERIALGC Src_Files_EXCLUDE += \ - binaryTreeDictionary.cpp cmsAdaptiveSizePolicy.cpp cmsCollectorPolicy.cpp \ + cmsAdaptiveSizePolicy.cpp cmsCollectorPolicy.cpp \ cmsGCAdaptivePolicyCounters.cpp cmsLockVerifier.cpp cmsPermGen.cpp compactibleFreeListSpace.cpp \ - concurrentMarkSweepGeneration.cpp concurrentMarkSweepThread.cpp freeBlockDictionary.cpp \ - freeChunk.cpp freeList.cpp promotionInfo.cpp vmCMSOperations.cpp collectionSetChooser.cpp \ + concurrentMarkSweepGeneration.cpp concurrentMarkSweepThread.cpp \ + freeChunk.cpp adaptiveFreeList.cpp promotionInfo.cpp vmCMSOperations.cpp collectionSetChooser.cpp \ concurrentG1Refine.cpp concurrentG1RefineThread.cpp concurrentMark.cpp concurrentMarkThread.cpp \ dirtyCardQueue.cpp g1AllocRegion.cpp g1BlockOffsetTable.cpp g1CollectedHeap.cpp g1GCPhaseTimes.cpp \ g1CollectorPolicy.cpp g1ErgoVerbose.cpp g1_globals.cpp g1HRPrinter.cpp g1MarkSweep.cpp \ diff --git a/hotspot/make/hotspot_version b/hotspot/make/hotspot_version index 14577a1280c..59320dbec54 100644 --- a/hotspot/make/hotspot_version +++ b/hotspot/make/hotspot_version @@ -35,7 +35,7 @@ HOTSPOT_VM_COPYRIGHT=Copyright 2012 HS_MAJOR_VER=25 HS_MINOR_VER=0 -HS_BUILD_NUMBER=06 +HS_BUILD_NUMBER=08 JDK_MAJOR_VER=1 JDK_MINOR_VER=8 diff --git a/hotspot/src/cpu/x86/vm/assembler_x86.cpp b/hotspot/src/cpu/x86/vm/assembler_x86.cpp index 378c1f8c6e7..6b9677d30c5 100644 --- a/hotspot/src/cpu/x86/vm/assembler_x86.cpp +++ b/hotspot/src/cpu/x86/vm/assembler_x86.cpp @@ -1007,6 +1007,67 @@ void Assembler::addss(XMMRegister dst, Address src) { emit_simd_arith(0x58, dst, src, VEX_SIMD_F3); } +void Assembler::aesdec(XMMRegister dst, Address src) { + assert(VM_Version::supports_aes(), ""); + InstructionMark im(this); + simd_prefix(dst, dst, src, VEX_SIMD_66, VEX_OPCODE_0F_38); + emit_byte(0xde); + emit_operand(dst, src); +} + +void Assembler::aesdec(XMMRegister dst, XMMRegister src) { + assert(VM_Version::supports_aes(), ""); + int encode = simd_prefix_and_encode(dst, dst, src, VEX_SIMD_66, VEX_OPCODE_0F_38); + emit_byte(0xde); + emit_byte(0xC0 | encode); +} + +void Assembler::aesdeclast(XMMRegister dst, Address src) { + assert(VM_Version::supports_aes(), ""); + InstructionMark im(this); + simd_prefix(dst, dst, src, VEX_SIMD_66, VEX_OPCODE_0F_38); + emit_byte(0xdf); + emit_operand(dst, src); +} + +void Assembler::aesdeclast(XMMRegister dst, XMMRegister src) { + assert(VM_Version::supports_aes(), ""); + int encode = simd_prefix_and_encode(dst, dst, src, VEX_SIMD_66, VEX_OPCODE_0F_38); + emit_byte(0xdf); + emit_byte(0xC0 | encode); +} + +void Assembler::aesenc(XMMRegister dst, Address src) { + assert(VM_Version::supports_aes(), ""); + InstructionMark im(this); + simd_prefix(dst, dst, src, VEX_SIMD_66, VEX_OPCODE_0F_38); + emit_byte(0xdc); + emit_operand(dst, src); +} + +void Assembler::aesenc(XMMRegister dst, XMMRegister src) { + assert(VM_Version::supports_aes(), ""); + int encode = simd_prefix_and_encode(dst, dst, src, VEX_SIMD_66, VEX_OPCODE_0F_38); + emit_byte(0xdc); + emit_byte(0xC0 | encode); +} + +void Assembler::aesenclast(XMMRegister dst, Address src) { + assert(VM_Version::supports_aes(), ""); + InstructionMark im(this); + simd_prefix(dst, dst, src, VEX_SIMD_66, VEX_OPCODE_0F_38); + emit_byte(0xdd); + emit_operand(dst, src); +} + +void Assembler::aesenclast(XMMRegister dst, XMMRegister src) { + assert(VM_Version::supports_aes(), ""); + int encode = simd_prefix_and_encode(dst, dst, src, VEX_SIMD_66, VEX_OPCODE_0F_38); + emit_byte(0xdd); + emit_byte(0xC0 | encode); +} + + void Assembler::andl(Address dst, int32_t imm32) { InstructionMark im(this); prefix(dst); @@ -2307,6 +2368,22 @@ void Assembler::prefix(Prefix p) { a_byte(p); } +void Assembler::pshufb(XMMRegister dst, XMMRegister src) { + assert(VM_Version::supports_ssse3(), ""); + int encode = simd_prefix_and_encode(dst, dst, src, VEX_SIMD_66, VEX_OPCODE_0F_38); + emit_byte(0x00); + emit_byte(0xC0 | encode); +} + +void Assembler::pshufb(XMMRegister dst, Address src) { + assert(VM_Version::supports_ssse3(), ""); + assert((UseAVX > 0), "SSE mode requires address alignment 16 bytes"); + InstructionMark im(this); + simd_prefix(dst, dst, src, VEX_SIMD_66, VEX_OPCODE_0F_38); + emit_byte(0x00); + emit_operand(dst, src); +} + void Assembler::pshufd(XMMRegister dst, XMMRegister src, int mode) { assert(isByte(mode), "invalid value"); NOT_LP64(assert(VM_Version::supports_sse2(), "")); @@ -8067,6 +8144,15 @@ void MacroAssembler::movptr(Address dst, Register src) { LP64_ONLY(movq(dst, src)) NOT_LP64(movl(dst, src)); } +void MacroAssembler::movdqu(XMMRegister dst, AddressLiteral src) { + if (reachable(src)) { + Assembler::movdqu(dst, as_Address(src)); + } else { + lea(rscratch1, src); + Assembler::movdqu(dst, Address(rscratch1, 0)); + } +} + void MacroAssembler::movsd(XMMRegister dst, AddressLiteral src) { if (reachable(src)) { Assembler::movsd(dst, as_Address(src)); @@ -8357,6 +8443,17 @@ void MacroAssembler::xorps(XMMRegister dst, AddressLiteral src) { } } +void MacroAssembler::pshufb(XMMRegister dst, AddressLiteral src) { + // Used in sign-bit flipping with aligned address. + assert((UseAVX > 0) || (((intptr_t)src.target() & 15) == 0), "SSE mode requires address alignment 16 bytes"); + if (reachable(src)) { + Assembler::pshufb(dst, as_Address(src)); + } else { + lea(rscratch1, src); + Assembler::pshufb(dst, Address(rscratch1, 0)); + } +} + // AVX 3-operands instructions void MacroAssembler::vaddsd(XMMRegister dst, XMMRegister nds, AddressLiteral src) { diff --git a/hotspot/src/cpu/x86/vm/assembler_x86.hpp b/hotspot/src/cpu/x86/vm/assembler_x86.hpp index c936e13f5d8..8a9bbaf424e 100644 --- a/hotspot/src/cpu/x86/vm/assembler_x86.hpp +++ b/hotspot/src/cpu/x86/vm/assembler_x86.hpp @@ -875,6 +875,17 @@ private: void addss(XMMRegister dst, Address src); void addss(XMMRegister dst, XMMRegister src); + // AES instructions + void aesdec(XMMRegister dst, Address src); + void aesdec(XMMRegister dst, XMMRegister src); + void aesdeclast(XMMRegister dst, Address src); + void aesdeclast(XMMRegister dst, XMMRegister src); + void aesenc(XMMRegister dst, Address src); + void aesenc(XMMRegister dst, XMMRegister src); + void aesenclast(XMMRegister dst, Address src); + void aesenclast(XMMRegister dst, XMMRegister src); + + void andl(Address dst, int32_t imm32); void andl(Register dst, int32_t imm32); void andl(Register dst, Address src); @@ -1424,6 +1435,10 @@ private: void prefetcht2(Address src); void prefetchw(Address src); + // Shuffle Bytes + void pshufb(XMMRegister dst, XMMRegister src); + void pshufb(XMMRegister dst, Address src); + // Shuffle Packed Doublewords void pshufd(XMMRegister dst, XMMRegister src, int mode); void pshufd(XMMRegister dst, Address src, int mode); @@ -2611,6 +2626,12 @@ public: void divss(XMMRegister dst, Address src) { Assembler::divss(dst, src); } void divss(XMMRegister dst, AddressLiteral src); + // Move Unaligned Double Quadword + void movdqu(Address dst, XMMRegister src) { Assembler::movdqu(dst, src); } + void movdqu(XMMRegister dst, Address src) { Assembler::movdqu(dst, src); } + void movdqu(XMMRegister dst, XMMRegister src) { Assembler::movdqu(dst, src); } + void movdqu(XMMRegister dst, AddressLiteral src); + void movsd(XMMRegister dst, XMMRegister src) { Assembler::movsd(dst, src); } void movsd(Address dst, XMMRegister src) { Assembler::movsd(dst, src); } void movsd(XMMRegister dst, Address src) { Assembler::movsd(dst, src); } @@ -2658,6 +2679,10 @@ public: void xorps(XMMRegister dst, Address src) { Assembler::xorps(dst, src); } void xorps(XMMRegister dst, AddressLiteral src); + // Shuffle Bytes + void pshufb(XMMRegister dst, XMMRegister src) { Assembler::pshufb(dst, src); } + void pshufb(XMMRegister dst, Address src) { Assembler::pshufb(dst, src); } + void pshufb(XMMRegister dst, AddressLiteral src); // AVX 3-operands instructions void vaddsd(XMMRegister dst, XMMRegister nds, XMMRegister src) { Assembler::vaddsd(dst, nds, src); } diff --git a/hotspot/src/cpu/x86/vm/stubGenerator_x86_32.cpp b/hotspot/src/cpu/x86/vm/stubGenerator_x86_32.cpp index f149fde83ab..d8b61e0b2fd 100644 --- a/hotspot/src/cpu/x86/vm/stubGenerator_x86_32.cpp +++ b/hotspot/src/cpu/x86/vm/stubGenerator_x86_32.cpp @@ -2137,6 +2137,529 @@ class StubGenerator: public StubCodeGenerator { } } + // AES intrinsic stubs + enum {AESBlockSize = 16}; + + address generate_key_shuffle_mask() { + __ align(16); + StubCodeMark mark(this, "StubRoutines", "key_shuffle_mask"); + address start = __ pc(); + __ emit_data(0x00010203, relocInfo::none, 0 ); + __ emit_data(0x04050607, relocInfo::none, 0 ); + __ emit_data(0x08090a0b, relocInfo::none, 0 ); + __ emit_data(0x0c0d0e0f, relocInfo::none, 0 ); + return start; + } + + // Utility routine for loading a 128-bit key word in little endian format + // can optionally specify that the shuffle mask is already in an xmmregister + void load_key(XMMRegister xmmdst, Register key, int offset, XMMRegister xmm_shuf_mask=NULL) { + __ movdqu(xmmdst, Address(key, offset)); + if (xmm_shuf_mask != NULL) { + __ pshufb(xmmdst, xmm_shuf_mask); + } else { + __ pshufb(xmmdst, ExternalAddress(StubRoutines::x86::key_shuffle_mask_addr())); + } + } + + // aesenc using specified key+offset + // can optionally specify that the shuffle mask is already in an xmmregister + void aes_enc_key(XMMRegister xmmdst, XMMRegister xmmtmp, Register key, int offset, XMMRegister xmm_shuf_mask=NULL) { + load_key(xmmtmp, key, offset, xmm_shuf_mask); + __ aesenc(xmmdst, xmmtmp); + } + + // aesdec using specified key+offset + // can optionally specify that the shuffle mask is already in an xmmregister + void aes_dec_key(XMMRegister xmmdst, XMMRegister xmmtmp, Register key, int offset, XMMRegister xmm_shuf_mask=NULL) { + load_key(xmmtmp, key, offset, xmm_shuf_mask); + __ aesdec(xmmdst, xmmtmp); + } + + + // Arguments: + // + // Inputs: + // c_rarg0 - source byte array address + // c_rarg1 - destination byte array address + // c_rarg2 - K (key) in little endian int array + // + address generate_aescrypt_encryptBlock() { + assert(UseAES && (UseAVX > 0), "need AES instructions and misaligned SSE support"); + __ align(CodeEntryAlignment); + StubCodeMark mark(this, "StubRoutines", "aescrypt_encryptBlock"); + Label L_doLast; + address start = __ pc(); + + const Register from = rsi; // source array address + const Register to = rdx; // destination array address + const Register key = rcx; // key array address + const Register keylen = rax; + const Address from_param(rbp, 8+0); + const Address to_param (rbp, 8+4); + const Address key_param (rbp, 8+8); + + const XMMRegister xmm_result = xmm0; + const XMMRegister xmm_temp = xmm1; + const XMMRegister xmm_key_shuf_mask = xmm2; + + __ enter(); // required for proper stackwalking of RuntimeStub frame + __ push(rsi); + __ movptr(from , from_param); + __ movptr(to , to_param); + __ movptr(key , key_param); + + __ movl(keylen, Address(key, arrayOopDesc::length_offset_in_bytes() - arrayOopDesc::base_offset_in_bytes(T_INT))); + // keylen = # of 32-bit words, convert to 128-bit words + __ shrl(keylen, 2); + __ subl(keylen, 11); // every key has at least 11 128-bit words, some have more + + __ movdqu(xmm_key_shuf_mask, ExternalAddress(StubRoutines::x86::key_shuffle_mask_addr())); + __ movdqu(xmm_result, Address(from, 0)); // get 16 bytes of input + + // For encryption, the java expanded key ordering is just what we need + + load_key(xmm_temp, key, 0x00, xmm_key_shuf_mask); + __ pxor(xmm_result, xmm_temp); + for (int offset = 0x10; offset <= 0x90; offset += 0x10) { + aes_enc_key(xmm_result, xmm_temp, key, offset, xmm_key_shuf_mask); + } + load_key (xmm_temp, key, 0xa0, xmm_key_shuf_mask); + __ cmpl(keylen, 0); + __ jcc(Assembler::equal, L_doLast); + __ aesenc(xmm_result, xmm_temp); // only in 192 and 256 bit keys + aes_enc_key(xmm_result, xmm_temp, key, 0xb0, xmm_key_shuf_mask); + load_key(xmm_temp, key, 0xc0, xmm_key_shuf_mask); + __ subl(keylen, 2); + __ jcc(Assembler::equal, L_doLast); + __ aesenc(xmm_result, xmm_temp); // only in 256 bit keys + aes_enc_key(xmm_result, xmm_temp, key, 0xd0, xmm_key_shuf_mask); + load_key(xmm_temp, key, 0xe0, xmm_key_shuf_mask); + + __ BIND(L_doLast); + __ aesenclast(xmm_result, xmm_temp); + __ movdqu(Address(to, 0), xmm_result); // store the result + __ xorptr(rax, rax); // return 0 + __ pop(rsi); + __ leave(); // required for proper stackwalking of RuntimeStub frame + __ ret(0); + + return start; + } + + + // Arguments: + // + // Inputs: + // c_rarg0 - source byte array address + // c_rarg1 - destination byte array address + // c_rarg2 - K (key) in little endian int array + // + address generate_aescrypt_decryptBlock() { + assert(UseAES && (UseAVX > 0), "need AES instructions and misaligned SSE support"); + __ align(CodeEntryAlignment); + StubCodeMark mark(this, "StubRoutines", "aescrypt_decryptBlock"); + Label L_doLast; + address start = __ pc(); + + const Register from = rsi; // source array address + const Register to = rdx; // destination array address + const Register key = rcx; // key array address + const Register keylen = rax; + const Address from_param(rbp, 8+0); + const Address to_param (rbp, 8+4); + const Address key_param (rbp, 8+8); + + const XMMRegister xmm_result = xmm0; + const XMMRegister xmm_temp = xmm1; + const XMMRegister xmm_key_shuf_mask = xmm2; + + __ enter(); // required for proper stackwalking of RuntimeStub frame + __ push(rsi); + __ movptr(from , from_param); + __ movptr(to , to_param); + __ movptr(key , key_param); + + __ movl(keylen, Address(key, arrayOopDesc::length_offset_in_bytes() - arrayOopDesc::base_offset_in_bytes(T_INT))); + // keylen = # of 32-bit words, convert to 128-bit words + __ shrl(keylen, 2); + __ subl(keylen, 11); // every key has at least 11 128-bit words, some have more + + __ movdqu(xmm_key_shuf_mask, ExternalAddress(StubRoutines::x86::key_shuffle_mask_addr())); + __ movdqu(xmm_result, Address(from, 0)); + + // for decryption java expanded key ordering is rotated one position from what we want + // so we start from 0x10 here and hit 0x00 last + // we don't know if the key is aligned, hence not using load-execute form + load_key(xmm_temp, key, 0x10, xmm_key_shuf_mask); + __ pxor (xmm_result, xmm_temp); + for (int offset = 0x20; offset <= 0xa0; offset += 0x10) { + aes_dec_key(xmm_result, xmm_temp, key, offset, xmm_key_shuf_mask); + } + __ cmpl(keylen, 0); + __ jcc(Assembler::equal, L_doLast); + // only in 192 and 256 bit keys + aes_dec_key(xmm_result, xmm_temp, key, 0xb0, xmm_key_shuf_mask); + aes_dec_key(xmm_result, xmm_temp, key, 0xc0, xmm_key_shuf_mask); + __ subl(keylen, 2); + __ jcc(Assembler::equal, L_doLast); + // only in 256 bit keys + aes_dec_key(xmm_result, xmm_temp, key, 0xd0, xmm_key_shuf_mask); + aes_dec_key(xmm_result, xmm_temp, key, 0xe0, xmm_key_shuf_mask); + + __ BIND(L_doLast); + // for decryption the aesdeclast operation is always on key+0x00 + load_key(xmm_temp, key, 0x00, xmm_key_shuf_mask); + __ aesdeclast(xmm_result, xmm_temp); + + __ movdqu(Address(to, 0), xmm_result); // store the result + + __ xorptr(rax, rax); // return 0 + __ pop(rsi); + __ leave(); // required for proper stackwalking of RuntimeStub frame + __ ret(0); + + return start; + } + + void handleSOERegisters(bool saving) { + const int saveFrameSizeInBytes = 4 * wordSize; + const Address saved_rbx (rbp, -3 * wordSize); + const Address saved_rsi (rbp, -2 * wordSize); + const Address saved_rdi (rbp, -1 * wordSize); + + if (saving) { + __ subptr(rsp, saveFrameSizeInBytes); + __ movptr(saved_rsi, rsi); + __ movptr(saved_rdi, rdi); + __ movptr(saved_rbx, rbx); + } else { + // restoring + __ movptr(rsi, saved_rsi); + __ movptr(rdi, saved_rdi); + __ movptr(rbx, saved_rbx); + } + } + + // Arguments: + // + // Inputs: + // c_rarg0 - source byte array address + // c_rarg1 - destination byte array address + // c_rarg2 - K (key) in little endian int array + // c_rarg3 - r vector byte array address + // c_rarg4 - input length + // + address generate_cipherBlockChaining_encryptAESCrypt() { + assert(UseAES && (UseAVX > 0), "need AES instructions and misaligned SSE support"); + __ align(CodeEntryAlignment); + StubCodeMark mark(this, "StubRoutines", "cipherBlockChaining_encryptAESCrypt"); + address start = __ pc(); + + Label L_exit, L_key_192_256, L_key_256, L_loopTop_128, L_loopTop_192, L_loopTop_256; + const Register from = rsi; // source array address + const Register to = rdx; // destination array address + const Register key = rcx; // key array address + const Register rvec = rdi; // r byte array initialized from initvector array address + // and left with the results of the last encryption block + const Register len_reg = rbx; // src len (must be multiple of blocksize 16) + const Register pos = rax; + + // xmm register assignments for the loops below + const XMMRegister xmm_result = xmm0; + const XMMRegister xmm_temp = xmm1; + // first 6 keys preloaded into xmm2-xmm7 + const int XMM_REG_NUM_KEY_FIRST = 2; + const int XMM_REG_NUM_KEY_LAST = 7; + const XMMRegister xmm_key0 = as_XMMRegister(XMM_REG_NUM_KEY_FIRST); + + __ enter(); // required for proper stackwalking of RuntimeStub frame + handleSOERegisters(true /*saving*/); + + // load registers from incoming parameters + const Address from_param(rbp, 8+0); + const Address to_param (rbp, 8+4); + const Address key_param (rbp, 8+8); + const Address rvec_param (rbp, 8+12); + const Address len_param (rbp, 8+16); + __ movptr(from , from_param); + __ movptr(to , to_param); + __ movptr(key , key_param); + __ movptr(rvec , rvec_param); + __ movptr(len_reg , len_param); + + const XMMRegister xmm_key_shuf_mask = xmm_temp; // used temporarily to swap key bytes up front + __ movdqu(xmm_key_shuf_mask, ExternalAddress(StubRoutines::x86::key_shuffle_mask_addr())); + // load up xmm regs 2 thru 7 with keys 0-5 + for (int rnum = XMM_REG_NUM_KEY_FIRST, offset = 0x00; rnum <= XMM_REG_NUM_KEY_LAST; rnum++) { + load_key(as_XMMRegister(rnum), key, offset, xmm_key_shuf_mask); + offset += 0x10; + } + + __ movdqu(xmm_result, Address(rvec, 0x00)); // initialize xmm_result with r vec + + // now split to different paths depending on the keylen (len in ints of AESCrypt.KLE array (52=192, or 60=256)) + __ movl(rax, Address(key, arrayOopDesc::length_offset_in_bytes() - arrayOopDesc::base_offset_in_bytes(T_INT))); + __ cmpl(rax, 44); + __ jcc(Assembler::notEqual, L_key_192_256); + + // 128 bit code follows here + __ movptr(pos, 0); + __ align(OptoLoopAlignment); + __ BIND(L_loopTop_128); + __ movdqu(xmm_temp, Address(from, pos, Address::times_1, 0)); // get next 16 bytes of input + __ pxor (xmm_result, xmm_temp); // xor with the current r vector + + __ pxor (xmm_result, xmm_key0); // do the aes rounds + for (int rnum = XMM_REG_NUM_KEY_FIRST + 1; rnum <= XMM_REG_NUM_KEY_LAST; rnum++) { + __ aesenc(xmm_result, as_XMMRegister(rnum)); + } + for (int key_offset = 0x60; key_offset <= 0x90; key_offset += 0x10) { + aes_enc_key(xmm_result, xmm_temp, key, key_offset); + } + load_key(xmm_temp, key, 0xa0); + __ aesenclast(xmm_result, xmm_temp); + + __ movdqu(Address(to, pos, Address::times_1, 0), xmm_result); // store into the next 16 bytes of output + // no need to store r to memory until we exit + __ addptr(pos, AESBlockSize); + __ subptr(len_reg, AESBlockSize); + __ jcc(Assembler::notEqual, L_loopTop_128); + + __ BIND(L_exit); + __ movdqu(Address(rvec, 0), xmm_result); // final value of r stored in rvec of CipherBlockChaining object + + handleSOERegisters(false /*restoring*/); + __ movl(rax, 0); // return 0 (why?) + __ leave(); // required for proper stackwalking of RuntimeStub frame + __ ret(0); + + __ BIND(L_key_192_256); + // here rax = len in ints of AESCrypt.KLE array (52=192, or 60=256) + __ cmpl(rax, 52); + __ jcc(Assembler::notEqual, L_key_256); + + // 192-bit code follows here (could be changed to use more xmm registers) + __ movptr(pos, 0); + __ align(OptoLoopAlignment); + __ BIND(L_loopTop_192); + __ movdqu(xmm_temp, Address(from, pos, Address::times_1, 0)); // get next 16 bytes of input + __ pxor (xmm_result, xmm_temp); // xor with the current r vector + + __ pxor (xmm_result, xmm_key0); // do the aes rounds + for (int rnum = XMM_REG_NUM_KEY_FIRST + 1; rnum <= XMM_REG_NUM_KEY_LAST; rnum++) { + __ aesenc(xmm_result, as_XMMRegister(rnum)); + } + for (int key_offset = 0x60; key_offset <= 0xb0; key_offset += 0x10) { + aes_enc_key(xmm_result, xmm_temp, key, key_offset); + } + load_key(xmm_temp, key, 0xc0); + __ aesenclast(xmm_result, xmm_temp); + + __ movdqu(Address(to, pos, Address::times_1, 0), xmm_result); // store into the next 16 bytes of output + // no need to store r to memory until we exit + __ addptr(pos, AESBlockSize); + __ subptr(len_reg, AESBlockSize); + __ jcc(Assembler::notEqual, L_loopTop_192); + __ jmp(L_exit); + + __ BIND(L_key_256); + // 256-bit code follows here (could be changed to use more xmm registers) + __ movptr(pos, 0); + __ align(OptoLoopAlignment); + __ BIND(L_loopTop_256); + __ movdqu(xmm_temp, Address(from, pos, Address::times_1, 0)); // get next 16 bytes of input + __ pxor (xmm_result, xmm_temp); // xor with the current r vector + + __ pxor (xmm_result, xmm_key0); // do the aes rounds + for (int rnum = XMM_REG_NUM_KEY_FIRST + 1; rnum <= XMM_REG_NUM_KEY_LAST; rnum++) { + __ aesenc(xmm_result, as_XMMRegister(rnum)); + } + for (int key_offset = 0x60; key_offset <= 0xd0; key_offset += 0x10) { + aes_enc_key(xmm_result, xmm_temp, key, key_offset); + } + load_key(xmm_temp, key, 0xe0); + __ aesenclast(xmm_result, xmm_temp); + + __ movdqu(Address(to, pos, Address::times_1, 0), xmm_result); // store into the next 16 bytes of output + // no need to store r to memory until we exit + __ addptr(pos, AESBlockSize); + __ subptr(len_reg, AESBlockSize); + __ jcc(Assembler::notEqual, L_loopTop_256); + __ jmp(L_exit); + + return start; + } + + + // CBC AES Decryption. + // In 32-bit stub, because of lack of registers we do not try to parallelize 4 blocks at a time. + // + // Arguments: + // + // Inputs: + // c_rarg0 - source byte array address + // c_rarg1 - destination byte array address + // c_rarg2 - K (key) in little endian int array + // c_rarg3 - r vector byte array address + // c_rarg4 - input length + // + + address generate_cipherBlockChaining_decryptAESCrypt() { + assert(UseAES && (UseAVX > 0), "need AES instructions and misaligned SSE support"); + __ align(CodeEntryAlignment); + StubCodeMark mark(this, "StubRoutines", "cipherBlockChaining_decryptAESCrypt"); + address start = __ pc(); + + Label L_exit, L_key_192_256, L_key_256; + Label L_singleBlock_loopTop_128; + Label L_singleBlock_loopTop_192, L_singleBlock_loopTop_256; + const Register from = rsi; // source array address + const Register to = rdx; // destination array address + const Register key = rcx; // key array address + const Register rvec = rdi; // r byte array initialized from initvector array address + // and left with the results of the last encryption block + const Register len_reg = rbx; // src len (must be multiple of blocksize 16) + const Register pos = rax; + + // xmm register assignments for the loops below + const XMMRegister xmm_result = xmm0; + const XMMRegister xmm_temp = xmm1; + // first 6 keys preloaded into xmm2-xmm7 + const int XMM_REG_NUM_KEY_FIRST = 2; + const int XMM_REG_NUM_KEY_LAST = 7; + const int FIRST_NON_REG_KEY_offset = 0x70; + const XMMRegister xmm_key_first = as_XMMRegister(XMM_REG_NUM_KEY_FIRST); + + __ enter(); // required for proper stackwalking of RuntimeStub frame + handleSOERegisters(true /*saving*/); + + // load registers from incoming parameters + const Address from_param(rbp, 8+0); + const Address to_param (rbp, 8+4); + const Address key_param (rbp, 8+8); + const Address rvec_param (rbp, 8+12); + const Address len_param (rbp, 8+16); + __ movptr(from , from_param); + __ movptr(to , to_param); + __ movptr(key , key_param); + __ movptr(rvec , rvec_param); + __ movptr(len_reg , len_param); + + // the java expanded key ordering is rotated one position from what we want + // so we start from 0x10 here and hit 0x00 last + const XMMRegister xmm_key_shuf_mask = xmm1; // used temporarily to swap key bytes up front + __ movdqu(xmm_key_shuf_mask, ExternalAddress(StubRoutines::x86::key_shuffle_mask_addr())); + // load up xmm regs 2 thru 6 with first 5 keys + for (int rnum = XMM_REG_NUM_KEY_FIRST, offset = 0x10; rnum <= XMM_REG_NUM_KEY_LAST; rnum++) { + load_key(as_XMMRegister(rnum), key, offset, xmm_key_shuf_mask); + offset += 0x10; + } + + // inside here, use the rvec register to point to previous block cipher + // with which we xor at the end of each newly decrypted block + const Register prev_block_cipher_ptr = rvec; + + // now split to different paths depending on the keylen (len in ints of AESCrypt.KLE array (52=192, or 60=256)) + __ movl(rax, Address(key, arrayOopDesc::length_offset_in_bytes() - arrayOopDesc::base_offset_in_bytes(T_INT))); + __ cmpl(rax, 44); + __ jcc(Assembler::notEqual, L_key_192_256); + + + // 128-bit code follows here, parallelized + __ movptr(pos, 0); + __ align(OptoLoopAlignment); + __ BIND(L_singleBlock_loopTop_128); + __ cmpptr(len_reg, 0); // any blocks left?? + __ jcc(Assembler::equal, L_exit); + __ movdqu(xmm_result, Address(from, pos, Address::times_1, 0)); // get next 16 bytes of cipher input + __ pxor (xmm_result, xmm_key_first); // do the aes dec rounds + for (int rnum = XMM_REG_NUM_KEY_FIRST + 1; rnum <= XMM_REG_NUM_KEY_LAST; rnum++) { + __ aesdec(xmm_result, as_XMMRegister(rnum)); + } + for (int key_offset = FIRST_NON_REG_KEY_offset; key_offset <= 0xa0; key_offset += 0x10) { // 128-bit runs up to key offset a0 + aes_dec_key(xmm_result, xmm_temp, key, key_offset); + } + load_key(xmm_temp, key, 0x00); // final key is stored in java expanded array at offset 0 + __ aesdeclast(xmm_result, xmm_temp); + __ movdqu(xmm_temp, Address(prev_block_cipher_ptr, 0x00)); + __ pxor (xmm_result, xmm_temp); // xor with the current r vector + __ movdqu(Address(to, pos, Address::times_1, 0), xmm_result); // store into the next 16 bytes of output + // no need to store r to memory until we exit + __ lea(prev_block_cipher_ptr, Address(from, pos, Address::times_1, 0)); // set up new ptr + __ addptr(pos, AESBlockSize); + __ subptr(len_reg, AESBlockSize); + __ jmp(L_singleBlock_loopTop_128); + + + __ BIND(L_exit); + __ movdqu(xmm_temp, Address(prev_block_cipher_ptr, 0x00)); + __ movptr(rvec , rvec_param); // restore this since used in loop + __ movdqu(Address(rvec, 0), xmm_temp); // final value of r stored in rvec of CipherBlockChaining object + handleSOERegisters(false /*restoring*/); + __ movl(rax, 0); // return 0 (why?) + __ leave(); // required for proper stackwalking of RuntimeStub frame + __ ret(0); + + + __ BIND(L_key_192_256); + // here rax = len in ints of AESCrypt.KLE array (52=192, or 60=256) + __ cmpl(rax, 52); + __ jcc(Assembler::notEqual, L_key_256); + + // 192-bit code follows here (could be optimized to use parallelism) + __ movptr(pos, 0); + __ align(OptoLoopAlignment); + __ BIND(L_singleBlock_loopTop_192); + __ movdqu(xmm_result, Address(from, pos, Address::times_1, 0)); // get next 16 bytes of cipher input + __ pxor (xmm_result, xmm_key_first); // do the aes dec rounds + for (int rnum = XMM_REG_NUM_KEY_FIRST + 1; rnum <= XMM_REG_NUM_KEY_LAST; rnum++) { + __ aesdec(xmm_result, as_XMMRegister(rnum)); + } + for (int key_offset = FIRST_NON_REG_KEY_offset; key_offset <= 0xc0; key_offset += 0x10) { // 192-bit runs up to key offset c0 + aes_dec_key(xmm_result, xmm_temp, key, key_offset); + } + load_key(xmm_temp, key, 0x00); // final key is stored in java expanded array at offset 0 + __ aesdeclast(xmm_result, xmm_temp); + __ movdqu(xmm_temp, Address(prev_block_cipher_ptr, 0x00)); + __ pxor (xmm_result, xmm_temp); // xor with the current r vector + __ movdqu(Address(to, pos, Address::times_1, 0), xmm_result); // store into the next 16 bytes of output + // no need to store r to memory until we exit + __ lea(prev_block_cipher_ptr, Address(from, pos, Address::times_1, 0)); // set up new ptr + __ addptr(pos, AESBlockSize); + __ subptr(len_reg, AESBlockSize); + __ jcc(Assembler::notEqual,L_singleBlock_loopTop_192); + __ jmp(L_exit); + + __ BIND(L_key_256); + // 256-bit code follows here (could be optimized to use parallelism) + __ movptr(pos, 0); + __ align(OptoLoopAlignment); + __ BIND(L_singleBlock_loopTop_256); + __ movdqu(xmm_result, Address(from, pos, Address::times_1, 0)); // get next 16 bytes of cipher input + __ pxor (xmm_result, xmm_key_first); // do the aes dec rounds + for (int rnum = XMM_REG_NUM_KEY_FIRST + 1; rnum <= XMM_REG_NUM_KEY_LAST; rnum++) { + __ aesdec(xmm_result, as_XMMRegister(rnum)); + } + for (int key_offset = FIRST_NON_REG_KEY_offset; key_offset <= 0xe0; key_offset += 0x10) { // 256-bit runs up to key offset e0 + aes_dec_key(xmm_result, xmm_temp, key, key_offset); + } + load_key(xmm_temp, key, 0x00); // final key is stored in java expanded array at offset 0 + __ aesdeclast(xmm_result, xmm_temp); + __ movdqu(xmm_temp, Address(prev_block_cipher_ptr, 0x00)); + __ pxor (xmm_result, xmm_temp); // xor with the current r vector + __ movdqu(Address(to, pos, Address::times_1, 0), xmm_result); // store into the next 16 bytes of output + // no need to store r to memory until we exit + __ lea(prev_block_cipher_ptr, Address(from, pos, Address::times_1, 0)); // set up new ptr + __ addptr(pos, AESBlockSize); + __ subptr(len_reg, AESBlockSize); + __ jcc(Assembler::notEqual,L_singleBlock_loopTop_256); + __ jmp(L_exit); + + return start; + } + + public: // Information about frame layout at time of blocking runtime call. // Note that we only have to preserve callee-saved registers since @@ -2332,6 +2855,16 @@ class StubGenerator: public StubCodeGenerator { generate_arraycopy_stubs(); generate_math_stubs(); + + // don't bother generating these AES intrinsic stubs unless global flag is set + if (UseAESIntrinsics) { + StubRoutines::x86::_key_shuffle_mask_addr = generate_key_shuffle_mask(); // might be needed by the others + + StubRoutines::_aescrypt_encryptBlock = generate_aescrypt_encryptBlock(); + StubRoutines::_aescrypt_decryptBlock = generate_aescrypt_decryptBlock(); + StubRoutines::_cipherBlockChaining_encryptAESCrypt = generate_cipherBlockChaining_encryptAESCrypt(); + StubRoutines::_cipherBlockChaining_decryptAESCrypt = generate_cipherBlockChaining_decryptAESCrypt(); + } } diff --git a/hotspot/src/cpu/x86/vm/stubGenerator_x86_64.cpp b/hotspot/src/cpu/x86/vm/stubGenerator_x86_64.cpp index 8ae595a56da..3e223387c94 100644 --- a/hotspot/src/cpu/x86/vm/stubGenerator_x86_64.cpp +++ b/hotspot/src/cpu/x86/vm/stubGenerator_x86_64.cpp @@ -2941,6 +2941,548 @@ class StubGenerator: public StubCodeGenerator { } } + // AES intrinsic stubs + enum {AESBlockSize = 16}; + + address generate_key_shuffle_mask() { + __ align(16); + StubCodeMark mark(this, "StubRoutines", "key_shuffle_mask"); + address start = __ pc(); + __ emit_data64( 0x0405060700010203, relocInfo::none ); + __ emit_data64( 0x0c0d0e0f08090a0b, relocInfo::none ); + return start; + } + + // Utility routine for loading a 128-bit key word in little endian format + // can optionally specify that the shuffle mask is already in an xmmregister + void load_key(XMMRegister xmmdst, Register key, int offset, XMMRegister xmm_shuf_mask=NULL) { + __ movdqu(xmmdst, Address(key, offset)); + if (xmm_shuf_mask != NULL) { + __ pshufb(xmmdst, xmm_shuf_mask); + } else { + __ pshufb(xmmdst, ExternalAddress(StubRoutines::x86::key_shuffle_mask_addr())); + } + } + + // aesenc using specified key+offset + // can optionally specify that the shuffle mask is already in an xmmregister + void aes_enc_key(XMMRegister xmmdst, XMMRegister xmmtmp, Register key, int offset, XMMRegister xmm_shuf_mask=NULL) { + load_key(xmmtmp, key, offset, xmm_shuf_mask); + __ aesenc(xmmdst, xmmtmp); + } + + // aesdec using specified key+offset + // can optionally specify that the shuffle mask is already in an xmmregister + void aes_dec_key(XMMRegister xmmdst, XMMRegister xmmtmp, Register key, int offset, XMMRegister xmm_shuf_mask=NULL) { + load_key(xmmtmp, key, offset, xmm_shuf_mask); + __ aesdec(xmmdst, xmmtmp); + } + + + // Arguments: + // + // Inputs: + // c_rarg0 - source byte array address + // c_rarg1 - destination byte array address + // c_rarg2 - K (key) in little endian int array + // + address generate_aescrypt_encryptBlock() { + assert(UseAES && (UseAVX > 0), "need AES instructions and misaligned SSE support"); + __ align(CodeEntryAlignment); + StubCodeMark mark(this, "StubRoutines", "aescrypt_encryptBlock"); + Label L_doLast; + address start = __ pc(); + + const Register from = c_rarg0; // source array address + const Register to = c_rarg1; // destination array address + const Register key = c_rarg2; // key array address + const Register keylen = rax; + + const XMMRegister xmm_result = xmm0; + const XMMRegister xmm_temp = xmm1; + const XMMRegister xmm_key_shuf_mask = xmm2; + + __ enter(); // required for proper stackwalking of RuntimeStub frame + + __ movl(keylen, Address(key, arrayOopDesc::length_offset_in_bytes() - arrayOopDesc::base_offset_in_bytes(T_INT))); + // keylen = # of 32-bit words, convert to 128-bit words + __ shrl(keylen, 2); + __ subl(keylen, 11); // every key has at least 11 128-bit words, some have more + + __ movdqu(xmm_key_shuf_mask, ExternalAddress(StubRoutines::x86::key_shuffle_mask_addr())); + __ movdqu(xmm_result, Address(from, 0)); // get 16 bytes of input + + // For encryption, the java expanded key ordering is just what we need + // we don't know if the key is aligned, hence not using load-execute form + + load_key(xmm_temp, key, 0x00, xmm_key_shuf_mask); + __ pxor(xmm_result, xmm_temp); + for (int offset = 0x10; offset <= 0x90; offset += 0x10) { + aes_enc_key(xmm_result, xmm_temp, key, offset, xmm_key_shuf_mask); + } + load_key (xmm_temp, key, 0xa0, xmm_key_shuf_mask); + __ cmpl(keylen, 0); + __ jcc(Assembler::equal, L_doLast); + __ aesenc(xmm_result, xmm_temp); // only in 192 and 256 bit keys + aes_enc_key(xmm_result, xmm_temp, key, 0xb0, xmm_key_shuf_mask); + load_key(xmm_temp, key, 0xc0, xmm_key_shuf_mask); + __ subl(keylen, 2); + __ jcc(Assembler::equal, L_doLast); + __ aesenc(xmm_result, xmm_temp); // only in 256 bit keys + aes_enc_key(xmm_result, xmm_temp, key, 0xd0, xmm_key_shuf_mask); + load_key(xmm_temp, key, 0xe0, xmm_key_shuf_mask); + + __ BIND(L_doLast); + __ aesenclast(xmm_result, xmm_temp); + __ movdqu(Address(to, 0), xmm_result); // store the result + __ xorptr(rax, rax); // return 0 + __ leave(); // required for proper stackwalking of RuntimeStub frame + __ ret(0); + + return start; + } + + + // Arguments: + // + // Inputs: + // c_rarg0 - source byte array address + // c_rarg1 - destination byte array address + // c_rarg2 - K (key) in little endian int array + // + address generate_aescrypt_decryptBlock() { + assert(UseAES && (UseAVX > 0), "need AES instructions and misaligned SSE support"); + __ align(CodeEntryAlignment); + StubCodeMark mark(this, "StubRoutines", "aescrypt_decryptBlock"); + Label L_doLast; + address start = __ pc(); + + const Register from = c_rarg0; // source array address + const Register to = c_rarg1; // destination array address + const Register key = c_rarg2; // key array address + const Register keylen = rax; + + const XMMRegister xmm_result = xmm0; + const XMMRegister xmm_temp = xmm1; + const XMMRegister xmm_key_shuf_mask = xmm2; + + __ enter(); // required for proper stackwalking of RuntimeStub frame + + __ movl(keylen, Address(key, arrayOopDesc::length_offset_in_bytes() - arrayOopDesc::base_offset_in_bytes(T_INT))); + // keylen = # of 32-bit words, convert to 128-bit words + __ shrl(keylen, 2); + __ subl(keylen, 11); // every key has at least 11 128-bit words, some have more + + __ movdqu(xmm_key_shuf_mask, ExternalAddress(StubRoutines::x86::key_shuffle_mask_addr())); + __ movdqu(xmm_result, Address(from, 0)); + + // for decryption java expanded key ordering is rotated one position from what we want + // so we start from 0x10 here and hit 0x00 last + // we don't know if the key is aligned, hence not using load-execute form + load_key(xmm_temp, key, 0x10, xmm_key_shuf_mask); + __ pxor (xmm_result, xmm_temp); + for (int offset = 0x20; offset <= 0xa0; offset += 0x10) { + aes_dec_key(xmm_result, xmm_temp, key, offset, xmm_key_shuf_mask); + } + __ cmpl(keylen, 0); + __ jcc(Assembler::equal, L_doLast); + // only in 192 and 256 bit keys + aes_dec_key(xmm_result, xmm_temp, key, 0xb0, xmm_key_shuf_mask); + aes_dec_key(xmm_result, xmm_temp, key, 0xc0, xmm_key_shuf_mask); + __ subl(keylen, 2); + __ jcc(Assembler::equal, L_doLast); + // only in 256 bit keys + aes_dec_key(xmm_result, xmm_temp, key, 0xd0, xmm_key_shuf_mask); + aes_dec_key(xmm_result, xmm_temp, key, 0xe0, xmm_key_shuf_mask); + + __ BIND(L_doLast); + // for decryption the aesdeclast operation is always on key+0x00 + load_key(xmm_temp, key, 0x00, xmm_key_shuf_mask); + __ aesdeclast(xmm_result, xmm_temp); + + __ movdqu(Address(to, 0), xmm_result); // store the result + + __ xorptr(rax, rax); // return 0 + __ leave(); // required for proper stackwalking of RuntimeStub frame + __ ret(0); + + return start; + } + + + // Arguments: + // + // Inputs: + // c_rarg0 - source byte array address + // c_rarg1 - destination byte array address + // c_rarg2 - K (key) in little endian int array + // c_rarg3 - r vector byte array address + // c_rarg4 - input length + // + address generate_cipherBlockChaining_encryptAESCrypt() { + assert(UseAES && (UseAVX > 0), "need AES instructions and misaligned SSE support"); + __ align(CodeEntryAlignment); + StubCodeMark mark(this, "StubRoutines", "cipherBlockChaining_encryptAESCrypt"); + address start = __ pc(); + + Label L_exit, L_key_192_256, L_key_256, L_loopTop_128, L_loopTop_192, L_loopTop_256; + const Register from = c_rarg0; // source array address + const Register to = c_rarg1; // destination array address + const Register key = c_rarg2; // key array address + const Register rvec = c_rarg3; // r byte array initialized from initvector array address + // and left with the results of the last encryption block +#ifndef _WIN64 + const Register len_reg = c_rarg4; // src len (must be multiple of blocksize 16) +#else + const Address len_mem(rsp, 6 * wordSize); // length is on stack on Win64 + const Register len_reg = r10; // pick the first volatile windows register +#endif + const Register pos = rax; + + // xmm register assignments for the loops below + const XMMRegister xmm_result = xmm0; + const XMMRegister xmm_temp = xmm1; + // keys 0-10 preloaded into xmm2-xmm12 + const int XMM_REG_NUM_KEY_FIRST = 2; + const int XMM_REG_NUM_KEY_LAST = 12; + const XMMRegister xmm_key0 = as_XMMRegister(XMM_REG_NUM_KEY_FIRST); + const XMMRegister xmm_key10 = as_XMMRegister(XMM_REG_NUM_KEY_LAST); + + __ enter(); // required for proper stackwalking of RuntimeStub frame + +#ifdef _WIN64 + // on win64, fill len_reg from stack position + __ movl(len_reg, len_mem); + // save the xmm registers which must be preserved 6-12 + __ subptr(rsp, -rsp_after_call_off * wordSize); + for (int i = 6; i <= XMM_REG_NUM_KEY_LAST; i++) { + __ movdqu(xmm_save(i), as_XMMRegister(i)); + } +#endif + + const XMMRegister xmm_key_shuf_mask = xmm_temp; // used temporarily to swap key bytes up front + __ movdqu(xmm_key_shuf_mask, ExternalAddress(StubRoutines::x86::key_shuffle_mask_addr())); + // load up xmm regs 2 thru 12 with key 0x00 - 0xa0 + for (int rnum = XMM_REG_NUM_KEY_FIRST, offset = 0x00; rnum <= XMM_REG_NUM_KEY_LAST; rnum++) { + load_key(as_XMMRegister(rnum), key, offset, xmm_key_shuf_mask); + offset += 0x10; + } + + __ movdqu(xmm_result, Address(rvec, 0x00)); // initialize xmm_result with r vec + + // now split to different paths depending on the keylen (len in ints of AESCrypt.KLE array (52=192, or 60=256)) + __ movl(rax, Address(key, arrayOopDesc::length_offset_in_bytes() - arrayOopDesc::base_offset_in_bytes(T_INT))); + __ cmpl(rax, 44); + __ jcc(Assembler::notEqual, L_key_192_256); + + // 128 bit code follows here + __ movptr(pos, 0); + __ align(OptoLoopAlignment); + __ BIND(L_loopTop_128); + __ movdqu(xmm_temp, Address(from, pos, Address::times_1, 0)); // get next 16 bytes of input + __ pxor (xmm_result, xmm_temp); // xor with the current r vector + + __ pxor (xmm_result, xmm_key0); // do the aes rounds + for (int rnum = XMM_REG_NUM_KEY_FIRST + 1; rnum <= XMM_REG_NUM_KEY_LAST - 1; rnum++) { + __ aesenc(xmm_result, as_XMMRegister(rnum)); + } + __ aesenclast(xmm_result, xmm_key10); + + __ movdqu(Address(to, pos, Address::times_1, 0), xmm_result); // store into the next 16 bytes of output + // no need to store r to memory until we exit + __ addptr(pos, AESBlockSize); + __ subptr(len_reg, AESBlockSize); + __ jcc(Assembler::notEqual, L_loopTop_128); + + __ BIND(L_exit); + __ movdqu(Address(rvec, 0), xmm_result); // final value of r stored in rvec of CipherBlockChaining object + +#ifdef _WIN64 + // restore xmm regs belonging to calling function + for (int i = 6; i <= XMM_REG_NUM_KEY_LAST; i++) { + __ movdqu(as_XMMRegister(i), xmm_save(i)); + } +#endif + __ movl(rax, 0); // return 0 (why?) + __ leave(); // required for proper stackwalking of RuntimeStub frame + __ ret(0); + + __ BIND(L_key_192_256); + // here rax = len in ints of AESCrypt.KLE array (52=192, or 60=256) + __ cmpl(rax, 52); + __ jcc(Assembler::notEqual, L_key_256); + + // 192-bit code follows here (could be changed to use more xmm registers) + __ movptr(pos, 0); + __ align(OptoLoopAlignment); + __ BIND(L_loopTop_192); + __ movdqu(xmm_temp, Address(from, pos, Address::times_1, 0)); // get next 16 bytes of input + __ pxor (xmm_result, xmm_temp); // xor with the current r vector + + __ pxor (xmm_result, xmm_key0); // do the aes rounds + for (int rnum = XMM_REG_NUM_KEY_FIRST + 1; rnum <= XMM_REG_NUM_KEY_LAST; rnum++) { + __ aesenc(xmm_result, as_XMMRegister(rnum)); + } + aes_enc_key(xmm_result, xmm_temp, key, 0xb0); + load_key(xmm_temp, key, 0xc0); + __ aesenclast(xmm_result, xmm_temp); + + __ movdqu(Address(to, pos, Address::times_1, 0), xmm_result); // store into the next 16 bytes of output + // no need to store r to memory until we exit + __ addptr(pos, AESBlockSize); + __ subptr(len_reg, AESBlockSize); + __ jcc(Assembler::notEqual, L_loopTop_192); + __ jmp(L_exit); + + __ BIND(L_key_256); + // 256-bit code follows here (could be changed to use more xmm registers) + __ movptr(pos, 0); + __ align(OptoLoopAlignment); + __ BIND(L_loopTop_256); + __ movdqu(xmm_temp, Address(from, pos, Address::times_1, 0)); // get next 16 bytes of input + __ pxor (xmm_result, xmm_temp); // xor with the current r vector + + __ pxor (xmm_result, xmm_key0); // do the aes rounds + for (int rnum = XMM_REG_NUM_KEY_FIRST + 1; rnum <= XMM_REG_NUM_KEY_LAST; rnum++) { + __ aesenc(xmm_result, as_XMMRegister(rnum)); + } + aes_enc_key(xmm_result, xmm_temp, key, 0xb0); + aes_enc_key(xmm_result, xmm_temp, key, 0xc0); + aes_enc_key(xmm_result, xmm_temp, key, 0xd0); + load_key(xmm_temp, key, 0xe0); + __ aesenclast(xmm_result, xmm_temp); + + __ movdqu(Address(to, pos, Address::times_1, 0), xmm_result); // store into the next 16 bytes of output + // no need to store r to memory until we exit + __ addptr(pos, AESBlockSize); + __ subptr(len_reg, AESBlockSize); + __ jcc(Assembler::notEqual, L_loopTop_256); + __ jmp(L_exit); + + return start; + } + + + + // This is a version of CBC/AES Decrypt which does 4 blocks in a loop at a time + // to hide instruction latency + // + // Arguments: + // + // Inputs: + // c_rarg0 - source byte array address + // c_rarg1 - destination byte array address + // c_rarg2 - K (key) in little endian int array + // c_rarg3 - r vector byte array address + // c_rarg4 - input length + // + + address generate_cipherBlockChaining_decryptAESCrypt_Parallel() { + assert(UseAES && (UseAVX > 0), "need AES instructions and misaligned SSE support"); + __ align(CodeEntryAlignment); + StubCodeMark mark(this, "StubRoutines", "cipherBlockChaining_decryptAESCrypt"); + address start = __ pc(); + + Label L_exit, L_key_192_256, L_key_256; + Label L_singleBlock_loopTop_128, L_multiBlock_loopTop_128; + Label L_singleBlock_loopTop_192, L_singleBlock_loopTop_256; + const Register from = c_rarg0; // source array address + const Register to = c_rarg1; // destination array address + const Register key = c_rarg2; // key array address + const Register rvec = c_rarg3; // r byte array initialized from initvector array address + // and left with the results of the last encryption block +#ifndef _WIN64 + const Register len_reg = c_rarg4; // src len (must be multiple of blocksize 16) +#else + const Address len_mem(rsp, 6 * wordSize); // length is on stack on Win64 + const Register len_reg = r10; // pick the first volatile windows register +#endif + const Register pos = rax; + + // xmm register assignments for the loops below + const XMMRegister xmm_result = xmm0; + // keys 0-10 preloaded into xmm2-xmm12 + const int XMM_REG_NUM_KEY_FIRST = 5; + const int XMM_REG_NUM_KEY_LAST = 15; + const XMMRegister xmm_key_first = as_XMMRegister(XMM_REG_NUM_KEY_FIRST); + const XMMRegister xmm_key_last = as_XMMRegister(XMM_REG_NUM_KEY_LAST); + + __ enter(); // required for proper stackwalking of RuntimeStub frame + +#ifdef _WIN64 + // on win64, fill len_reg from stack position + __ movl(len_reg, len_mem); + // save the xmm registers which must be preserved 6-15 + __ subptr(rsp, -rsp_after_call_off * wordSize); + for (int i = 6; i <= XMM_REG_NUM_KEY_LAST; i++) { + __ movdqu(xmm_save(i), as_XMMRegister(i)); + } +#endif + // the java expanded key ordering is rotated one position from what we want + // so we start from 0x10 here and hit 0x00 last + const XMMRegister xmm_key_shuf_mask = xmm1; // used temporarily to swap key bytes up front + __ movdqu(xmm_key_shuf_mask, ExternalAddress(StubRoutines::x86::key_shuffle_mask_addr())); + // load up xmm regs 5 thru 15 with key 0x10 - 0xa0 - 0x00 + for (int rnum = XMM_REG_NUM_KEY_FIRST, offset = 0x10; rnum <= XMM_REG_NUM_KEY_LAST; rnum++) { + if (rnum == XMM_REG_NUM_KEY_LAST) offset = 0x00; + load_key(as_XMMRegister(rnum), key, offset, xmm_key_shuf_mask); + offset += 0x10; + } + + const XMMRegister xmm_prev_block_cipher = xmm1; // holds cipher of previous block + // registers holding the four results in the parallelized loop + const XMMRegister xmm_result0 = xmm0; + const XMMRegister xmm_result1 = xmm2; + const XMMRegister xmm_result2 = xmm3; + const XMMRegister xmm_result3 = xmm4; + + __ movdqu(xmm_prev_block_cipher, Address(rvec, 0x00)); // initialize with initial rvec + + // now split to different paths depending on the keylen (len in ints of AESCrypt.KLE array (52=192, or 60=256)) + __ movl(rax, Address(key, arrayOopDesc::length_offset_in_bytes() - arrayOopDesc::base_offset_in_bytes(T_INT))); + __ cmpl(rax, 44); + __ jcc(Assembler::notEqual, L_key_192_256); + + + // 128-bit code follows here, parallelized + __ movptr(pos, 0); + __ align(OptoLoopAlignment); + __ BIND(L_multiBlock_loopTop_128); + __ cmpptr(len_reg, 4*AESBlockSize); // see if at least 4 blocks left + __ jcc(Assembler::less, L_singleBlock_loopTop_128); + + __ movdqu(xmm_result0, Address(from, pos, Address::times_1, 0*AESBlockSize)); // get next 4 blocks into xmmresult registers + __ movdqu(xmm_result1, Address(from, pos, Address::times_1, 1*AESBlockSize)); + __ movdqu(xmm_result2, Address(from, pos, Address::times_1, 2*AESBlockSize)); + __ movdqu(xmm_result3, Address(from, pos, Address::times_1, 3*AESBlockSize)); + +#define DoFour(opc, src_reg) \ + __ opc(xmm_result0, src_reg); \ + __ opc(xmm_result1, src_reg); \ + __ opc(xmm_result2, src_reg); \ + __ opc(xmm_result3, src_reg); + + DoFour(pxor, xmm_key_first); + for (int rnum = XMM_REG_NUM_KEY_FIRST + 1; rnum <= XMM_REG_NUM_KEY_LAST - 1; rnum++) { + DoFour(aesdec, as_XMMRegister(rnum)); + } + DoFour(aesdeclast, xmm_key_last); + // for each result, xor with the r vector of previous cipher block + __ pxor(xmm_result0, xmm_prev_block_cipher); + __ movdqu(xmm_prev_block_cipher, Address(from, pos, Address::times_1, 0*AESBlockSize)); + __ pxor(xmm_result1, xmm_prev_block_cipher); + __ movdqu(xmm_prev_block_cipher, Address(from, pos, Address::times_1, 1*AESBlockSize)); + __ pxor(xmm_result2, xmm_prev_block_cipher); + __ movdqu(xmm_prev_block_cipher, Address(from, pos, Address::times_1, 2*AESBlockSize)); + __ pxor(xmm_result3, xmm_prev_block_cipher); + __ movdqu(xmm_prev_block_cipher, Address(from, pos, Address::times_1, 3*AESBlockSize)); // this will carry over to next set of blocks + + __ movdqu(Address(to, pos, Address::times_1, 0*AESBlockSize), xmm_result0); // store 4 results into the next 64 bytes of output + __ movdqu(Address(to, pos, Address::times_1, 1*AESBlockSize), xmm_result1); + __ movdqu(Address(to, pos, Address::times_1, 2*AESBlockSize), xmm_result2); + __ movdqu(Address(to, pos, Address::times_1, 3*AESBlockSize), xmm_result3); + + __ addptr(pos, 4*AESBlockSize); + __ subptr(len_reg, 4*AESBlockSize); + __ jmp(L_multiBlock_loopTop_128); + + // registers used in the non-parallelized loops + const XMMRegister xmm_prev_block_cipher_save = xmm2; + const XMMRegister xmm_temp = xmm3; + + __ align(OptoLoopAlignment); + __ BIND(L_singleBlock_loopTop_128); + __ cmpptr(len_reg, 0); // any blocks left?? + __ jcc(Assembler::equal, L_exit); + __ movdqu(xmm_result, Address(from, pos, Address::times_1, 0)); // get next 16 bytes of cipher input + __ movdqa(xmm_prev_block_cipher_save, xmm_result); // save for next r vector + __ pxor (xmm_result, xmm_key_first); // do the aes dec rounds + for (int rnum = XMM_REG_NUM_KEY_FIRST + 1; rnum <= XMM_REG_NUM_KEY_LAST - 1; rnum++) { + __ aesdec(xmm_result, as_XMMRegister(rnum)); + } + __ aesdeclast(xmm_result, xmm_key_last); + __ pxor (xmm_result, xmm_prev_block_cipher); // xor with the current r vector + __ movdqu(Address(to, pos, Address::times_1, 0), xmm_result); // store into the next 16 bytes of output + // no need to store r to memory until we exit + __ movdqa(xmm_prev_block_cipher, xmm_prev_block_cipher_save); // set up next r vector with cipher input from this block + + __ addptr(pos, AESBlockSize); + __ subptr(len_reg, AESBlockSize); + __ jmp(L_singleBlock_loopTop_128); + + + __ BIND(L_exit); + __ movdqu(Address(rvec, 0), xmm_prev_block_cipher); // final value of r stored in rvec of CipherBlockChaining object +#ifdef _WIN64 + // restore regs belonging to calling function + for (int i = 6; i <= XMM_REG_NUM_KEY_LAST; i++) { + __ movdqu(as_XMMRegister(i), xmm_save(i)); + } +#endif + __ movl(rax, 0); // return 0 (why?) + __ leave(); // required for proper stackwalking of RuntimeStub frame + __ ret(0); + + + __ BIND(L_key_192_256); + // here rax = len in ints of AESCrypt.KLE array (52=192, or 60=256) + __ cmpl(rax, 52); + __ jcc(Assembler::notEqual, L_key_256); + + // 192-bit code follows here (could be optimized to use parallelism) + __ movptr(pos, 0); + __ align(OptoLoopAlignment); + __ BIND(L_singleBlock_loopTop_192); + __ movdqu(xmm_result, Address(from, pos, Address::times_1, 0)); // get next 16 bytes of cipher input + __ movdqa(xmm_prev_block_cipher_save, xmm_result); // save for next r vector + __ pxor (xmm_result, xmm_key_first); // do the aes dec rounds + for (int rnum = XMM_REG_NUM_KEY_FIRST + 1; rnum <= XMM_REG_NUM_KEY_LAST - 1; rnum++) { + __ aesdec(xmm_result, as_XMMRegister(rnum)); + } + aes_dec_key(xmm_result, xmm_temp, key, 0xb0); // 192-bit key goes up to c0 + aes_dec_key(xmm_result, xmm_temp, key, 0xc0); + __ aesdeclast(xmm_result, xmm_key_last); // xmm15 always came from key+0 + __ pxor (xmm_result, xmm_prev_block_cipher); // xor with the current r vector + __ movdqu(Address(to, pos, Address::times_1, 0), xmm_result); // store into the next 16 bytes of output + // no need to store r to memory until we exit + __ movdqa(xmm_prev_block_cipher, xmm_prev_block_cipher_save); // set up next r vector with cipher input from this block + + __ addptr(pos, AESBlockSize); + __ subptr(len_reg, AESBlockSize); + __ jcc(Assembler::notEqual,L_singleBlock_loopTop_192); + __ jmp(L_exit); + + __ BIND(L_key_256); + // 256-bit code follows here (could be optimized to use parallelism) + __ movptr(pos, 0); + __ align(OptoLoopAlignment); + __ BIND(L_singleBlock_loopTop_256); + __ movdqu(xmm_result, Address(from, pos, Address::times_1, 0)); // get next 16 bytes of cipher input + __ movdqa(xmm_prev_block_cipher_save, xmm_result); // save for next r vector + __ pxor (xmm_result, xmm_key_first); // do the aes dec rounds + for (int rnum = XMM_REG_NUM_KEY_FIRST + 1; rnum <= XMM_REG_NUM_KEY_LAST - 1; rnum++) { + __ aesdec(xmm_result, as_XMMRegister(rnum)); + } + aes_dec_key(xmm_result, xmm_temp, key, 0xb0); // 256-bit key goes up to e0 + aes_dec_key(xmm_result, xmm_temp, key, 0xc0); + aes_dec_key(xmm_result, xmm_temp, key, 0xd0); + aes_dec_key(xmm_result, xmm_temp, key, 0xe0); + __ aesdeclast(xmm_result, xmm_key_last); // xmm15 came from key+0 + __ pxor (xmm_result, xmm_prev_block_cipher); // xor with the current r vector + __ movdqu(Address(to, pos, Address::times_1, 0), xmm_result); // store into the next 16 bytes of output + // no need to store r to memory until we exit + __ movdqa(xmm_prev_block_cipher, xmm_prev_block_cipher_save); // set up next r vector with cipher input from this block + + __ addptr(pos, AESBlockSize); + __ subptr(len_reg, AESBlockSize); + __ jcc(Assembler::notEqual,L_singleBlock_loopTop_256); + __ jmp(L_exit); + + return start; + } + + + #undef __ #define __ masm-> @@ -3135,6 +3677,16 @@ class StubGenerator: public StubCodeGenerator { generate_arraycopy_stubs(); generate_math_stubs(); + + // don't bother generating these AES intrinsic stubs unless global flag is set + if (UseAESIntrinsics) { + StubRoutines::x86::_key_shuffle_mask_addr = generate_key_shuffle_mask(); // needed by the others + + StubRoutines::_aescrypt_encryptBlock = generate_aescrypt_encryptBlock(); + StubRoutines::_aescrypt_decryptBlock = generate_aescrypt_decryptBlock(); + StubRoutines::_cipherBlockChaining_encryptAESCrypt = generate_cipherBlockChaining_encryptAESCrypt(); + StubRoutines::_cipherBlockChaining_decryptAESCrypt = generate_cipherBlockChaining_decryptAESCrypt_Parallel(); + } } public: diff --git a/hotspot/src/cpu/x86/vm/stubRoutines_x86_32.cpp b/hotspot/src/cpu/x86/vm/stubRoutines_x86_32.cpp index 6ec4121b9e8..cfd4f33a6ca 100644 --- a/hotspot/src/cpu/x86/vm/stubRoutines_x86_32.cpp +++ b/hotspot/src/cpu/x86/vm/stubRoutines_x86_32.cpp @@ -44,3 +44,4 @@ address StubRoutines::x86::_verify_mxcsr_entry = NULL; address StubRoutines::x86::_verify_fpu_cntrl_wrd_entry = NULL; +address StubRoutines::x86::_key_shuffle_mask_addr = NULL; diff --git a/hotspot/src/cpu/x86/vm/stubRoutines_x86_32.hpp b/hotspot/src/cpu/x86/vm/stubRoutines_x86_32.hpp index 64767c8ad40..d53124fc6c8 100644 --- a/hotspot/src/cpu/x86/vm/stubRoutines_x86_32.hpp +++ b/hotspot/src/cpu/x86/vm/stubRoutines_x86_32.hpp @@ -41,10 +41,14 @@ class x86 { private: static address _verify_mxcsr_entry; static address _verify_fpu_cntrl_wrd_entry; + // shuffle mask for fixing up 128-bit words consisting of big-endian 32-bit integers + static address _key_shuffle_mask_addr; public: static address verify_mxcsr_entry() { return _verify_mxcsr_entry; } static address verify_fpu_cntrl_wrd_entry() { return _verify_fpu_cntrl_wrd_entry; } + static address key_shuffle_mask_addr() { return _key_shuffle_mask_addr; } + }; static bool returns_to_call_stub(address return_pc) { return return_pc == _call_stub_return_address; } diff --git a/hotspot/src/cpu/x86/vm/stubRoutines_x86_64.cpp b/hotspot/src/cpu/x86/vm/stubRoutines_x86_64.cpp index 084bbf8fb82..cf8ec5d7b4c 100644 --- a/hotspot/src/cpu/x86/vm/stubRoutines_x86_64.cpp +++ b/hotspot/src/cpu/x86/vm/stubRoutines_x86_64.cpp @@ -56,3 +56,4 @@ address StubRoutines::x86::_float_sign_flip = NULL; address StubRoutines::x86::_double_sign_mask = NULL; address StubRoutines::x86::_double_sign_flip = NULL; address StubRoutines::x86::_mxcsr_std = NULL; +address StubRoutines::x86::_key_shuffle_mask_addr = NULL; diff --git a/hotspot/src/cpu/x86/vm/stubRoutines_x86_64.hpp b/hotspot/src/cpu/x86/vm/stubRoutines_x86_64.hpp index 9b9cede4f2d..c3efeecb759 100644 --- a/hotspot/src/cpu/x86/vm/stubRoutines_x86_64.hpp +++ b/hotspot/src/cpu/x86/vm/stubRoutines_x86_64.hpp @@ -54,6 +54,8 @@ class x86 { static address _double_sign_mask; static address _double_sign_flip; static address _mxcsr_std; + // shuffle mask for fixing up 128-bit words consisting of big-endian 32-bit integers + static address _key_shuffle_mask_addr; public: @@ -116,6 +118,9 @@ class x86 { { return _mxcsr_std; } + + static address key_shuffle_mask_addr() { return _key_shuffle_mask_addr; } + }; #endif // CPU_X86_VM_STUBROUTINES_X86_64_HPP diff --git a/hotspot/src/cpu/x86/vm/vm_version_x86.cpp b/hotspot/src/cpu/x86/vm/vm_version_x86.cpp index bf7b3c213f1..182b0ab1a5f 100644 --- a/hotspot/src/cpu/x86/vm/vm_version_x86.cpp +++ b/hotspot/src/cpu/x86/vm/vm_version_x86.cpp @@ -419,13 +419,16 @@ void VM_Version::get_processor_features() { if (UseAVX < 1) _cpuFeatures &= ~CPU_AVX; + if (!UseAES && !FLAG_IS_DEFAULT(UseAES)) + _cpuFeatures &= ~CPU_AES; + if (logical_processors_per_package() == 1) { // HT processor could be installed on a system which doesn't support HT. _cpuFeatures &= ~CPU_HT; } char buf[256]; - jio_snprintf(buf, sizeof(buf), "(%u cores per cpu, %u threads per core) family %d model %d stepping %d%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s", + jio_snprintf(buf, sizeof(buf), "(%u cores per cpu, %u threads per core) family %d model %d stepping %d%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s", cores_per_cpu(), threads_per_core(), cpu_family(), _model, _stepping, (supports_cmov() ? ", cmov" : ""), @@ -441,6 +444,7 @@ void VM_Version::get_processor_features() { (supports_popcnt() ? ", popcnt" : ""), (supports_avx() ? ", avx" : ""), (supports_avx2() ? ", avx2" : ""), + (supports_aes() ? ", aes" : ""), (supports_mmx_ext() ? ", mmxext" : ""), (supports_3dnow_prefetch() ? ", 3dnowpref" : ""), (supports_lzcnt() ? ", lzcnt": ""), @@ -472,6 +476,29 @@ void VM_Version::get_processor_features() { if (!supports_avx ()) // Drop to 0 if no AVX support UseAVX = 0; + // Use AES instructions if available. + if (supports_aes()) { + if (FLAG_IS_DEFAULT(UseAES)) { + UseAES = true; + } + } else if (UseAES) { + if (!FLAG_IS_DEFAULT(UseAES)) + warning("AES instructions not available on this CPU"); + FLAG_SET_DEFAULT(UseAES, false); + } + + // The AES intrinsic stubs require AES instruction support (of course) + // but also require AVX mode for misaligned SSE access + if (UseAES && (UseAVX > 0)) { + if (FLAG_IS_DEFAULT(UseAESIntrinsics)) { + UseAESIntrinsics = true; + } + } else if (UseAESIntrinsics) { + if (!FLAG_IS_DEFAULT(UseAESIntrinsics)) + warning("AES intrinsics not available on this CPU"); + FLAG_SET_DEFAULT(UseAESIntrinsics, false); + } + #ifdef COMPILER2 if (UseFPUForSpilling) { if (UseSSE < 2) { @@ -714,6 +741,9 @@ void VM_Version::get_processor_features() { if (UseAVX > 0) { tty->print(" UseAVX=%d",UseAVX); } + if (UseAES) { + tty->print(" UseAES=1"); + } tty->cr(); tty->print("Allocation"); if (AllocatePrefetchStyle <= 0 || UseSSE == 0 && !supports_3dnow_prefetch()) { diff --git a/hotspot/src/cpu/x86/vm/vm_version_x86.hpp b/hotspot/src/cpu/x86/vm/vm_version_x86.hpp index 92cdbd3fd03..12bd3b770d5 100644 --- a/hotspot/src/cpu/x86/vm/vm_version_x86.hpp +++ b/hotspot/src/cpu/x86/vm/vm_version_x86.hpp @@ -78,7 +78,9 @@ public: sse4_2 : 1, : 2, popcnt : 1, - : 3, + : 1, + aes : 1, + : 1, osxsave : 1, avx : 1, : 3; @@ -244,7 +246,8 @@ protected: CPU_TSC = (1 << 15), CPU_TSCINV = (1 << 16), CPU_AVX = (1 << 17), - CPU_AVX2 = (1 << 18) + CPU_AVX2 = (1 << 18), + CPU_AES = (1 << 19) } cpuFeatureFlags; enum { @@ -420,6 +423,8 @@ protected: result |= CPU_TSC; if (_cpuid_info.ext_cpuid7_edx.bits.tsc_invariance != 0) result |= CPU_TSCINV; + if (_cpuid_info.std_cpuid1_ecx.bits.aes != 0) + result |= CPU_AES; // AMD features. if (is_amd()) { @@ -544,6 +549,7 @@ public: static bool supports_avx() { return (_cpuFeatures & CPU_AVX) != 0; } static bool supports_avx2() { return (_cpuFeatures & CPU_AVX2) != 0; } static bool supports_tsc() { return (_cpuFeatures & CPU_TSC) != 0; } + static bool supports_aes() { return (_cpuFeatures & CPU_AES) != 0; } // Intel features static bool is_intel_family_core() { return is_intel() && diff --git a/hotspot/src/cpu/x86/vm/x86.ad b/hotspot/src/cpu/x86/vm/x86.ad index a2cf6f7945d..c49d0e6c31c 100644 --- a/hotspot/src/cpu/x86/vm/x86.ad +++ b/hotspot/src/cpu/x86/vm/x86.ad @@ -4102,9 +4102,158 @@ instruct vsll4L_reg_imm(vecY dst, vecY src, immI8 shift) %{ // ----------------------- LogicalRightShift ----------------------------------- -// Shorts/Chars vector logical right shift produces incorrect Java result +// Shorts vector logical right shift produces incorrect Java result // for negative data because java code convert short value into int with -// sign extension before a shift. +// sign extension before a shift. But char vectors are fine since chars are +// unsigned values. + +instruct vsrl2S(vecS dst, vecS shift) %{ + predicate(n->as_Vector()->length() == 2); + match(Set dst (URShiftVS dst shift)); + format %{ "psrlw $dst,$shift\t! logical right shift packed2S" %} + ins_encode %{ + __ psrlw($dst$$XMMRegister, $shift$$XMMRegister); + %} + ins_pipe( pipe_slow ); +%} + +instruct vsrl2S_imm(vecS dst, immI8 shift) %{ + predicate(n->as_Vector()->length() == 2); + match(Set dst (URShiftVS dst shift)); + format %{ "psrlw $dst,$shift\t! logical right shift packed2S" %} + ins_encode %{ + __ psrlw($dst$$XMMRegister, (int)$shift$$constant); + %} + ins_pipe( pipe_slow ); +%} + +instruct vsrl2S_reg(vecS dst, vecS src, vecS shift) %{ + predicate(UseAVX > 0 && n->as_Vector()->length() == 2); + match(Set dst (URShiftVS src shift)); + format %{ "vpsrlw $dst,$src,$shift\t! logical right shift packed2S" %} + ins_encode %{ + bool vector256 = false; + __ vpsrlw($dst$$XMMRegister, $src$$XMMRegister, $shift$$XMMRegister, vector256); + %} + ins_pipe( pipe_slow ); +%} + +instruct vsrl2S_reg_imm(vecS dst, vecS src, immI8 shift) %{ + predicate(UseAVX > 0 && n->as_Vector()->length() == 2); + match(Set dst (URShiftVS src shift)); + format %{ "vpsrlw $dst,$src,$shift\t! logical right shift packed2S" %} + ins_encode %{ + bool vector256 = false; + __ vpsrlw($dst$$XMMRegister, $src$$XMMRegister, (int)$shift$$constant, vector256); + %} + ins_pipe( pipe_slow ); +%} + +instruct vsrl4S(vecD dst, vecS shift) %{ + predicate(n->as_Vector()->length() == 4); + match(Set dst (URShiftVS dst shift)); + format %{ "psrlw $dst,$shift\t! logical right shift packed4S" %} + ins_encode %{ + __ psrlw($dst$$XMMRegister, $shift$$XMMRegister); + %} + ins_pipe( pipe_slow ); +%} + +instruct vsrl4S_imm(vecD dst, immI8 shift) %{ + predicate(n->as_Vector()->length() == 4); + match(Set dst (URShiftVS dst shift)); + format %{ "psrlw $dst,$shift\t! logical right shift packed4S" %} + ins_encode %{ + __ psrlw($dst$$XMMRegister, (int)$shift$$constant); + %} + ins_pipe( pipe_slow ); +%} + +instruct vsrl4S_reg(vecD dst, vecD src, vecS shift) %{ + predicate(UseAVX > 0 && n->as_Vector()->length() == 4); + match(Set dst (URShiftVS src shift)); + format %{ "vpsrlw $dst,$src,$shift\t! logical right shift packed4S" %} + ins_encode %{ + bool vector256 = false; + __ vpsrlw($dst$$XMMRegister, $src$$XMMRegister, $shift$$XMMRegister, vector256); + %} + ins_pipe( pipe_slow ); +%} + +instruct vsrl4S_reg_imm(vecD dst, vecD src, immI8 shift) %{ + predicate(UseAVX > 0 && n->as_Vector()->length() == 4); + match(Set dst (URShiftVS src shift)); + format %{ "vpsrlw $dst,$src,$shift\t! logical right shift packed4S" %} + ins_encode %{ + bool vector256 = false; + __ vpsrlw($dst$$XMMRegister, $src$$XMMRegister, (int)$shift$$constant, vector256); + %} + ins_pipe( pipe_slow ); +%} + +instruct vsrl8S(vecX dst, vecS shift) %{ + predicate(n->as_Vector()->length() == 8); + match(Set dst (URShiftVS dst shift)); + format %{ "psrlw $dst,$shift\t! logical right shift packed8S" %} + ins_encode %{ + __ psrlw($dst$$XMMRegister, $shift$$XMMRegister); + %} + ins_pipe( pipe_slow ); +%} + +instruct vsrl8S_imm(vecX dst, immI8 shift) %{ + predicate(n->as_Vector()->length() == 8); + match(Set dst (URShiftVS dst shift)); + format %{ "psrlw $dst,$shift\t! logical right shift packed8S" %} + ins_encode %{ + __ psrlw($dst$$XMMRegister, (int)$shift$$constant); + %} + ins_pipe( pipe_slow ); +%} + +instruct vsrl8S_reg(vecX dst, vecX src, vecS shift) %{ + predicate(UseAVX > 0 && n->as_Vector()->length() == 8); + match(Set dst (URShiftVS src shift)); + format %{ "vpsrlw $dst,$src,$shift\t! logical right shift packed8S" %} + ins_encode %{ + bool vector256 = false; + __ vpsrlw($dst$$XMMRegister, $src$$XMMRegister, $shift$$XMMRegister, vector256); + %} + ins_pipe( pipe_slow ); +%} + +instruct vsrl8S_reg_imm(vecX dst, vecX src, immI8 shift) %{ + predicate(UseAVX > 0 && n->as_Vector()->length() == 8); + match(Set dst (URShiftVS src shift)); + format %{ "vpsrlw $dst,$src,$shift\t! logical right shift packed8S" %} + ins_encode %{ + bool vector256 = false; + __ vpsrlw($dst$$XMMRegister, $src$$XMMRegister, (int)$shift$$constant, vector256); + %} + ins_pipe( pipe_slow ); +%} + +instruct vsrl16S_reg(vecY dst, vecY src, vecS shift) %{ + predicate(UseAVX > 1 && n->as_Vector()->length() == 16); + match(Set dst (URShiftVS src shift)); + format %{ "vpsrlw $dst,$src,$shift\t! logical right shift packed16S" %} + ins_encode %{ + bool vector256 = true; + __ vpsrlw($dst$$XMMRegister, $src$$XMMRegister, $shift$$XMMRegister, vector256); + %} + ins_pipe( pipe_slow ); +%} + +instruct vsrl16S_reg_imm(vecY dst, vecY src, immI8 shift) %{ + predicate(UseAVX > 1 && n->as_Vector()->length() == 16); + match(Set dst (URShiftVS src shift)); + format %{ "vpsrlw $dst,$src,$shift\t! logical right shift packed16S" %} + ins_encode %{ + bool vector256 = true; + __ vpsrlw($dst$$XMMRegister, $src$$XMMRegister, (int)$shift$$constant, vector256); + %} + ins_pipe( pipe_slow ); +%} // Integers vector logical right shift instruct vsrl2I(vecD dst, vecS shift) %{ diff --git a/hotspot/src/cpu/zero/vm/cppInterpreterGenerator_zero.hpp b/hotspot/src/cpu/zero/vm/cppInterpreterGenerator_zero.hpp index ff61306c760..6b2cacf5ae2 100644 --- a/hotspot/src/cpu/zero/vm/cppInterpreterGenerator_zero.hpp +++ b/hotspot/src/cpu/zero/vm/cppInterpreterGenerator_zero.hpp @@ -31,12 +31,17 @@ return _masm; } - protected: - address generate_entry(address entry_point) { - ZeroEntry *entry = (ZeroEntry *) assembler()->pc(); - assembler()->advance(sizeof(ZeroEntry)); + public: + static address generate_entry_impl(MacroAssembler* masm, address entry_point) { + ZeroEntry *entry = (ZeroEntry *) masm->pc(); + masm->advance(sizeof(ZeroEntry)); entry->set_entry_point(entry_point); return (address) entry; } + protected: + address generate_entry(address entry_point) { + return generate_entry_impl(assembler(), entry_point); + } + #endif // CPU_ZERO_VM_CPPINTERPRETERGENERATOR_ZERO_HPP diff --git a/hotspot/src/cpu/zero/vm/cppInterpreter_zero.cpp b/hotspot/src/cpu/zero/vm/cppInterpreter_zero.cpp index 1b2da5a5d15..ee855a9efbc 100644 --- a/hotspot/src/cpu/zero/vm/cppInterpreter_zero.cpp +++ b/hotspot/src/cpu/zero/vm/cppInterpreter_zero.cpp @@ -180,25 +180,6 @@ void CppInterpreter::main_loop(int recurse, TRAPS) { method, istate->osr_entry(), istate->osr_buf(), THREAD); return; } - else if (istate->msg() == BytecodeInterpreter::call_method_handle) { - oop method_handle = istate->callee(); - - // Trim back the stack to put the parameters at the top - stack->set_sp(istate->stack() + 1); - - // Make the call - process_method_handle(method_handle, THREAD); - fixup_after_potential_safepoint(); - - // Convert the result - istate->set_stack(stack->sp() - 1); - - // Restore the stack - stack->set_sp(istate->stack_limit() + 1); - - // Resume the interpreter - istate->set_msg(BytecodeInterpreter::method_resume); - } else { ShouldNotReachHere(); } @@ -535,35 +516,35 @@ int CppInterpreter::accessor_entry(Method* method, intptr_t UNUSED, TRAPS) { if (entry->is_volatile()) { switch (entry->flag_state()) { case ctos: - SET_LOCALS_INT(object->char_field_acquire(entry->f2()), 0); + SET_LOCALS_INT(object->char_field_acquire(entry->f2_as_index()), 0); break; case btos: - SET_LOCALS_INT(object->byte_field_acquire(entry->f2()), 0); + SET_LOCALS_INT(object->byte_field_acquire(entry->f2_as_index()), 0); break; case stos: - SET_LOCALS_INT(object->short_field_acquire(entry->f2()), 0); + SET_LOCALS_INT(object->short_field_acquire(entry->f2_as_index()), 0); break; case itos: - SET_LOCALS_INT(object->int_field_acquire(entry->f2()), 0); + SET_LOCALS_INT(object->int_field_acquire(entry->f2_as_index()), 0); break; case ltos: - SET_LOCALS_LONG(object->long_field_acquire(entry->f2()), 0); + SET_LOCALS_LONG(object->long_field_acquire(entry->f2_as_index()), 0); break; case ftos: - SET_LOCALS_FLOAT(object->float_field_acquire(entry->f2()), 0); + SET_LOCALS_FLOAT(object->float_field_acquire(entry->f2_as_index()), 0); break; case dtos: - SET_LOCALS_DOUBLE(object->double_field_acquire(entry->f2()), 0); + SET_LOCALS_DOUBLE(object->double_field_acquire(entry->f2_as_index()), 0); break; case atos: - SET_LOCALS_OBJECT(object->obj_field_acquire(entry->f2()), 0); + SET_LOCALS_OBJECT(object->obj_field_acquire(entry->f2_as_index()), 0); break; default: @@ -573,35 +554,35 @@ int CppInterpreter::accessor_entry(Method* method, intptr_t UNUSED, TRAPS) { else { switch (entry->flag_state()) { case ctos: - SET_LOCALS_INT(object->char_field(entry->f2()), 0); + SET_LOCALS_INT(object->char_field(entry->f2_as_index()), 0); break; case btos: - SET_LOCALS_INT(object->byte_field(entry->f2()), 0); + SET_LOCALS_INT(object->byte_field(entry->f2_as_index()), 0); break; case stos: - SET_LOCALS_INT(object->short_field(entry->f2()), 0); + SET_LOCALS_INT(object->short_field(entry->f2_as_index()), 0); break; case itos: - SET_LOCALS_INT(object->int_field(entry->f2()), 0); + SET_LOCALS_INT(object->int_field(entry->f2_as_index()), 0); break; case ltos: - SET_LOCALS_LONG(object->long_field(entry->f2()), 0); + SET_LOCALS_LONG(object->long_field(entry->f2_as_index()), 0); break; case ftos: - SET_LOCALS_FLOAT(object->float_field(entry->f2()), 0); + SET_LOCALS_FLOAT(object->float_field(entry->f2_as_index()), 0); break; case dtos: - SET_LOCALS_DOUBLE(object->double_field(entry->f2()), 0); + SET_LOCALS_DOUBLE(object->double_field(entry->f2_as_index()), 0); break; case atos: - SET_LOCALS_OBJECT(object->obj_field(entry->f2()), 0); + SET_LOCALS_OBJECT(object->obj_field(entry->f2_as_index()), 0); break; default: @@ -629,516 +610,6 @@ int CppInterpreter::empty_entry(Method* method, intptr_t UNUSED, TRAPS) { return 0; } -int CppInterpreter::method_handle_entry(Method* method, - intptr_t UNUSED, TRAPS) { - JavaThread *thread = (JavaThread *) THREAD; - ZeroStack *stack = thread->zero_stack(); - int argument_slots = method->size_of_parameters(); - int result_slots = type2size[result_type_of(method)]; - intptr_t *vmslots = stack->sp(); - intptr_t *unwind_sp = vmslots + argument_slots; - - // Find the MethodType - address p = (address) method; - for (jint* pc = method->method_type_offsets_chain(); (*pc) != -1; pc++) { - p = *(address*)(p + (*pc)); - } - oop method_type = (oop) p; - - // The MethodHandle is in the slot after the arguments - int num_vmslots = argument_slots - 1; - oop method_handle = VMSLOTS_OBJECT(num_vmslots); - - // InvokeGeneric requires some extra shuffling - oop mhtype = java_lang_invoke_MethodHandle::type(method_handle); - bool is_exact = mhtype == method_type; - if (!is_exact) { - if (true || // FIXME - method->intrinsic_id() == vmIntrinsics::_invokeExact) { - CALL_VM_NOCHECK_NOFIX( - SharedRuntime::throw_WrongMethodTypeException( - thread, method_type, mhtype)); - // NB all oops trashed! - assert(HAS_PENDING_EXCEPTION, "should do"); - stack->set_sp(unwind_sp); - return 0; - } - assert(method->intrinsic_id() == vmIntrinsics::_invokeGeneric, "should be"); - - // Load up an adapter from the calling type - // NB the x86 code for this (in methodHandles_x86.cpp, search for - // "genericInvoker") is really really odd. I'm hoping it's trying - // to accomodate odd VM/class library combinations I can ignore. - oop adapter = NULL; //FIXME: load the adapter from the CP cache - IF (adapter == NULL) { - CALL_VM_NOCHECK_NOFIX( - SharedRuntime::throw_WrongMethodTypeException( - thread, method_type, mhtype)); - // NB all oops trashed! - assert(HAS_PENDING_EXCEPTION, "should do"); - stack->set_sp(unwind_sp); - return 0; - } - - // Adapters are shared among form-families of method-type. The - // type being called is passed as a trusted first argument so that - // the adapter knows the actual types of its arguments and return - // values. - insert_vmslots(num_vmslots + 1, 1, THREAD); - if (HAS_PENDING_EXCEPTION) { - // NB all oops trashed! - stack->set_sp(unwind_sp); - return 0; - } - - vmslots = stack->sp(); - num_vmslots++; - SET_VMSLOTS_OBJECT(method_type, num_vmslots); - - method_handle = adapter; - } - - // Start processing - process_method_handle(method_handle, THREAD); - if (HAS_PENDING_EXCEPTION) - result_slots = 0; - - // If this is an invokeExact then the eventual callee will not - // have unwound the method handle argument so we have to do it. - // If a result is being returned the it will be above the method - // handle argument we're unwinding. - if (is_exact) { - intptr_t result[2]; - for (int i = 0; i < result_slots; i++) - result[i] = stack->pop(); - stack->pop(); - for (int i = result_slots - 1; i >= 0; i--) - stack->push(result[i]); - } - - // Check - assert(stack->sp() == unwind_sp - result_slots, "should be"); - - // No deoptimized frames on the stack - return 0; -} - -void CppInterpreter::process_method_handle(oop method_handle, TRAPS) { - JavaThread *thread = (JavaThread *) THREAD; - ZeroStack *stack = thread->zero_stack(); - intptr_t *vmslots = stack->sp(); - - bool direct_to_method = false; - BasicType src_rtype = T_ILLEGAL; - BasicType dst_rtype = T_ILLEGAL; - - MethodHandleEntry *entry = - java_lang_invoke_MethodHandle::vmentry(method_handle); - MethodHandles::EntryKind entry_kind = - (MethodHandles::EntryKind) (((intptr_t) entry) & 0xffffffff); - - Method* method = NULL; - switch (entry_kind) { - case MethodHandles::_invokestatic_mh: - direct_to_method = true; - break; - - case MethodHandles::_invokespecial_mh: - case MethodHandles::_invokevirtual_mh: - case MethodHandles::_invokeinterface_mh: - { - oop receiver = - VMSLOTS_OBJECT( - java_lang_invoke_MethodHandle::vmslots(method_handle) - 1); - if (receiver == NULL) { - stack->set_sp(calculate_unwind_sp(stack, method_handle)); - CALL_VM_NOCHECK_NOFIX( - throw_exception( - thread, vmSymbols::java_lang_NullPointerException())); - // NB all oops trashed! - assert(HAS_PENDING_EXCEPTION, "should do"); - return; - } - if (entry_kind != MethodHandles::_invokespecial_mh) { - intptr_t index = java_lang_invoke_DirectMethodHandle::vmindex(method_handle); - InstanceKlass* rcvrKlass = - (InstanceKlass *) receiver->klass(); - if (entry_kind == MethodHandles::_invokevirtual_mh) { - method = (Method*) rcvrKlass->start_of_vtable()[index]; - } - else { - oop iclass = java_lang_invoke_MethodHandle::next_target(method_handle); - itableOffsetEntry* ki = - (itableOffsetEntry *) rcvrKlass->start_of_itable(); - int i, length = rcvrKlass->itable_length(); - for (i = 0; i < length; i++, ki++ ) { - if (ki->interface_klass() == iclass) - break; - } - if (i == length) { - stack->set_sp(calculate_unwind_sp(stack, method_handle)); - CALL_VM_NOCHECK_NOFIX( - throw_exception( - thread, vmSymbols::java_lang_IncompatibleClassChangeError())); - // NB all oops trashed! - assert(HAS_PENDING_EXCEPTION, "should do"); - return; - } - itableMethodEntry* im = ki->first_method_entry(receiver->klass()); - method = im[index].method(); - if (method == NULL) { - stack->set_sp(calculate_unwind_sp(stack, method_handle)); - CALL_VM_NOCHECK_NOFIX( - throw_exception( - thread, vmSymbols::java_lang_AbstractMethodError())); - // NB all oops trashed! - assert(HAS_PENDING_EXCEPTION, "should do"); - return; - } - } - } - } - direct_to_method = true; - break; - - case MethodHandles::_bound_ref_direct_mh: - case MethodHandles::_bound_int_direct_mh: - case MethodHandles::_bound_long_direct_mh: - direct_to_method = true; - // fall through - case MethodHandles::_bound_ref_mh: - case MethodHandles::_bound_int_mh: - case MethodHandles::_bound_long_mh: - { - BasicType arg_type = T_ILLEGAL; - int arg_mask = -1; - int arg_slots = -1; - MethodHandles::get_ek_bound_mh_info( - entry_kind, arg_type, arg_mask, arg_slots); - int arg_slot = - java_lang_invoke_BoundMethodHandle::vmargslot(method_handle); - - // Create the new slot(s) - intptr_t *unwind_sp = calculate_unwind_sp(stack, method_handle); - insert_vmslots(arg_slot, arg_slots, THREAD); - if (HAS_PENDING_EXCEPTION) { - // all oops trashed - stack->set_sp(unwind_sp); - return; - } - vmslots = stack->sp(); - - // Store bound argument into new stack slot - oop arg = java_lang_invoke_BoundMethodHandle::argument(method_handle); - if (arg_type == T_OBJECT) { - assert(arg_slots == 1, "should be"); - SET_VMSLOTS_OBJECT(arg, arg_slot); - } - else { - jvalue arg_value; - arg_type = java_lang_boxing_object::get_value(arg, &arg_value); - switch (arg_type) { - case T_BOOLEAN: - SET_VMSLOTS_INT(arg_value.z, arg_slot); - break; - case T_CHAR: - SET_VMSLOTS_INT(arg_value.c, arg_slot); - break; - case T_BYTE: - SET_VMSLOTS_INT(arg_value.b, arg_slot); - break; - case T_SHORT: - SET_VMSLOTS_INT(arg_value.s, arg_slot); - break; - case T_INT: - SET_VMSLOTS_INT(arg_value.i, arg_slot); - break; - case T_FLOAT: - SET_VMSLOTS_FLOAT(arg_value.f, arg_slot); - break; - case T_LONG: - SET_VMSLOTS_LONG(arg_value.j, arg_slot + 1); - break; - case T_DOUBLE: - SET_VMSLOTS_DOUBLE(arg_value.d, arg_slot + 1); - break; - default: - tty->print_cr("unhandled type %s", type2name(arg_type)); - ShouldNotReachHere(); - } - } - } - break; - - case MethodHandles::_adapter_retype_only: - case MethodHandles::_adapter_retype_raw: - src_rtype = result_type_of_handle( - java_lang_invoke_MethodHandle::next_target(method_handle)); - dst_rtype = result_type_of_handle(method_handle); - break; - - case MethodHandles::_adapter_check_cast: - { - int arg_slot = - java_lang_invoke_AdapterMethodHandle::vmargslot(method_handle); - oop arg = VMSLOTS_OBJECT(arg_slot); - if (arg != NULL) { - Klass* objKlassOop = arg->klass(); - Klass* klassOf = java_lang_Class::as_Klass( - java_lang_invoke_AdapterMethodHandle::argument(method_handle)); - - if (objKlassOop != klassOf && - !objKlassOop->is_subtype_of(klassOf)) { - ResourceMark rm(THREAD); - const char* objName = Klass::cast(objKlassOop)->external_name(); - const char* klassName = Klass::cast(klassOf)->external_name(); - char* message = SharedRuntime::generate_class_cast_message( - objName, klassName); - - stack->set_sp(calculate_unwind_sp(stack, method_handle)); - CALL_VM_NOCHECK_NOFIX( - throw_exception( - thread, vmSymbols::java_lang_ClassCastException(), message)); - // NB all oops trashed! - assert(HAS_PENDING_EXCEPTION, "should do"); - return; - } - } - } - break; - - case MethodHandles::_adapter_dup_args: - { - int arg_slot = - java_lang_invoke_AdapterMethodHandle::vmargslot(method_handle); - int conv = - java_lang_invoke_AdapterMethodHandle::conversion(method_handle); - int num_slots = -MethodHandles::adapter_conversion_stack_move(conv); - assert(num_slots > 0, "should be"); - - // Create the new slot(s) - intptr_t *unwind_sp = calculate_unwind_sp(stack, method_handle); - stack->overflow_check(num_slots, THREAD); - if (HAS_PENDING_EXCEPTION) { - // all oops trashed - stack->set_sp(unwind_sp); - return; - } - - // Duplicate the arguments - for (int i = num_slots - 1; i >= 0; i--) - stack->push(*VMSLOTS_SLOT(arg_slot + i)); - - vmslots = stack->sp(); // unused, but let the compiler figure that out - } - break; - - case MethodHandles::_adapter_drop_args: - { - int arg_slot = - java_lang_invoke_AdapterMethodHandle::vmargslot(method_handle); - int conv = - java_lang_invoke_AdapterMethodHandle::conversion(method_handle); - int num_slots = MethodHandles::adapter_conversion_stack_move(conv); - assert(num_slots > 0, "should be"); - - remove_vmslots(arg_slot, num_slots, THREAD); // doesn't trap - vmslots = stack->sp(); // unused, but let the compiler figure that out - } - break; - - case MethodHandles::_adapter_opt_swap_1: - case MethodHandles::_adapter_opt_swap_2: - case MethodHandles::_adapter_opt_rot_1_up: - case MethodHandles::_adapter_opt_rot_1_down: - case MethodHandles::_adapter_opt_rot_2_up: - case MethodHandles::_adapter_opt_rot_2_down: - { - int arg1 = - java_lang_invoke_AdapterMethodHandle::vmargslot(method_handle); - int conv = - java_lang_invoke_AdapterMethodHandle::conversion(method_handle); - int arg2 = MethodHandles::adapter_conversion_vminfo(conv); - - int swap_bytes = 0, rotate = 0; - MethodHandles::get_ek_adapter_opt_swap_rot_info( - entry_kind, swap_bytes, rotate); - int swap_slots = swap_bytes >> LogBytesPerWord; - - intptr_t tmp; - switch (rotate) { - case 0: // swap - for (int i = 0; i < swap_slots; i++) { - tmp = *VMSLOTS_SLOT(arg1 + i); - SET_VMSLOTS_SLOT(VMSLOTS_SLOT(arg2 + i), arg1 + i); - SET_VMSLOTS_SLOT(&tmp, arg2 + i); - } - break; - - case 1: // up - assert(arg1 - swap_slots > arg2, "should be"); - - tmp = *VMSLOTS_SLOT(arg1); - for (int i = arg1 - swap_slots; i >= arg2; i--) - SET_VMSLOTS_SLOT(VMSLOTS_SLOT(i), i + swap_slots); - SET_VMSLOTS_SLOT(&tmp, arg2); - - break; - - case -1: // down - assert(arg2 - swap_slots > arg1, "should be"); - - tmp = *VMSLOTS_SLOT(arg1); - for (int i = arg1 + swap_slots; i <= arg2; i++) - SET_VMSLOTS_SLOT(VMSLOTS_SLOT(i), i - swap_slots); - SET_VMSLOTS_SLOT(&tmp, arg2); - break; - - default: - ShouldNotReachHere(); - } - } - break; - - case MethodHandles::_adapter_opt_i2l: - { - int arg_slot = - java_lang_invoke_AdapterMethodHandle::vmargslot(method_handle); - int arg = VMSLOTS_INT(arg_slot); - intptr_t *unwind_sp = calculate_unwind_sp(stack, method_handle); - insert_vmslots(arg_slot, 1, THREAD); - if (HAS_PENDING_EXCEPTION) { - // all oops trashed - stack->set_sp(unwind_sp); - return; - } - vmslots = stack->sp(); - arg_slot++; - SET_VMSLOTS_LONG(arg, arg_slot); - } - break; - - case MethodHandles::_adapter_opt_unboxi: - case MethodHandles::_adapter_opt_unboxl: - { - int arg_slot = - java_lang_invoke_AdapterMethodHandle::vmargslot(method_handle); - oop arg = VMSLOTS_OBJECT(arg_slot); - jvalue arg_value; - if (arg == NULL) { - // queue a nullpointer exception for the caller - stack->set_sp(calculate_unwind_sp(stack, method_handle)); - CALL_VM_NOCHECK_NOFIX( - throw_exception( - thread, vmSymbols::java_lang_NullPointerException())); - // NB all oops trashed! - assert(HAS_PENDING_EXCEPTION, "should do"); - return; - } - BasicType arg_type = java_lang_boxing_object::get_value(arg, &arg_value); - if (arg_type == T_LONG || arg_type == T_DOUBLE) { - intptr_t *unwind_sp = calculate_unwind_sp(stack, method_handle); - insert_vmslots(arg_slot, 1, THREAD); - if (HAS_PENDING_EXCEPTION) { - // all oops trashed - stack->set_sp(unwind_sp); - return; - } - vmslots = stack->sp(); - arg_slot++; - } - switch (arg_type) { - case T_BOOLEAN: - SET_VMSLOTS_INT(arg_value.z, arg_slot); - break; - case T_CHAR: - SET_VMSLOTS_INT(arg_value.c, arg_slot); - break; - case T_BYTE: - SET_VMSLOTS_INT(arg_value.b, arg_slot); - break; - case T_SHORT: - SET_VMSLOTS_INT(arg_value.s, arg_slot); - break; - case T_INT: - SET_VMSLOTS_INT(arg_value.i, arg_slot); - break; - case T_FLOAT: - SET_VMSLOTS_FLOAT(arg_value.f, arg_slot); - break; - case T_LONG: - SET_VMSLOTS_LONG(arg_value.j, arg_slot); - break; - case T_DOUBLE: - SET_VMSLOTS_DOUBLE(arg_value.d, arg_slot); - break; - default: - tty->print_cr("unhandled type %s", type2name(arg_type)); - ShouldNotReachHere(); - } - } - break; - - default: - tty->print_cr("unhandled entry_kind %s", - MethodHandles::entry_name(entry_kind)); - ShouldNotReachHere(); - } - - // Continue along the chain - if (direct_to_method) { - if (method == NULL) { - method = - (Method*) java_lang_invoke_MethodHandle::vmtarget(method_handle); - } - address entry_point = method->from_interpreted_entry(); - Interpreter::invoke_method(method, entry_point, THREAD); - } - else { - process_method_handle( - java_lang_invoke_MethodHandle::next_target(method_handle), THREAD); - } - // NB all oops now trashed - - // Adapt the result type, if necessary - if (src_rtype != dst_rtype && !HAS_PENDING_EXCEPTION) { - switch (dst_rtype) { - case T_VOID: - for (int i = 0; i < type2size[src_rtype]; i++) - stack->pop(); - return; - - case T_INT: - switch (src_rtype) { - case T_VOID: - stack->overflow_check(1, CHECK); - stack->push(0); - return; - - case T_BOOLEAN: - case T_CHAR: - case T_BYTE: - case T_SHORT: - return; - } - // INT results sometimes need narrowing - case T_BOOLEAN: - case T_CHAR: - case T_BYTE: - case T_SHORT: - switch (src_rtype) { - case T_INT: - return; - } - } - - tty->print_cr("unhandled conversion:"); - tty->print_cr("src_rtype = %s", type2name(src_rtype)); - tty->print_cr("dst_rtype = %s", type2name(dst_rtype)); - ShouldNotReachHere(); - } -} - // The new slots will be inserted before slot insert_before. // Slots < insert_before will have the same slot number after the insert. // Slots >= insert_before will become old_slot + num_slots. @@ -1380,10 +851,6 @@ address AbstractInterpreterGenerator::generate_method_entry( entry_point = ((InterpreterGenerator*) this)->generate_abstract_entry(); break; - case Interpreter::method_handle: - entry_point = ((InterpreterGenerator*) this)->generate_method_handle_entry(); - break; - case Interpreter::java_lang_math_sin: case Interpreter::java_lang_math_cos: case Interpreter::java_lang_math_tan: @@ -1391,6 +858,8 @@ address AbstractInterpreterGenerator::generate_method_entry( case Interpreter::java_lang_math_log: case Interpreter::java_lang_math_log10: case Interpreter::java_lang_math_sqrt: + case Interpreter::java_lang_math_pow: + case Interpreter::java_lang_math_exp: entry_point = ((InterpreterGenerator*) this)->generate_math_entry(kind); break; diff --git a/hotspot/src/cpu/zero/vm/cppInterpreter_zero.hpp b/hotspot/src/cpu/zero/vm/cppInterpreter_zero.hpp index 2faae7169ab..3a6bd52f2cb 100644 --- a/hotspot/src/cpu/zero/vm/cppInterpreter_zero.hpp +++ b/hotspot/src/cpu/zero/vm/cppInterpreter_zero.hpp @@ -36,7 +36,6 @@ static int native_entry(Method* method, intptr_t UNUSED, TRAPS); static int accessor_entry(Method* method, intptr_t UNUSED, TRAPS); static int empty_entry(Method* method, intptr_t UNUSED, TRAPS); - static int method_handle_entry(Method* method, intptr_t UNUSED, TRAPS); public: // Main loop of normal_entry @@ -44,7 +43,6 @@ private: // Helpers for method_handle_entry - static void process_method_handle(oop method_handle, TRAPS); static void insert_vmslots(int insert_before, int num_slots, TRAPS); static void remove_vmslots(int first_slot, int num_slots, TRAPS); static BasicType result_type_of_handle(oop method_handle); diff --git a/hotspot/src/cpu/zero/vm/frame_zero.cpp b/hotspot/src/cpu/zero/vm/frame_zero.cpp index 6ce4b23bc6b..8643af5953f 100644 --- a/hotspot/src/cpu/zero/vm/frame_zero.cpp +++ b/hotspot/src/cpu/zero/vm/frame_zero.cpp @@ -351,7 +351,7 @@ void SharkFrame::identify_word(int frame_index, switch (offset) { case pc_off: strncpy(fieldbuf, "pc", buflen); - if (method()->is_oop()) { + if (method()->is_method()) { nmethod *code = method()->code(); if (code && code->pc_desc_at(pc())) { SimpleScopeDesc ssd(code, pc()); @@ -367,7 +367,7 @@ void SharkFrame::identify_word(int frame_index, case method_off: strncpy(fieldbuf, "method", buflen); - if (method()->is_oop()) { + if (method()->is_method()) { method()->name_and_sig_as_C_string(valuebuf, buflen); } return; @@ -378,7 +378,7 @@ void SharkFrame::identify_word(int frame_index, } // Variable part - if (method()->is_oop()) { + if (method()->is_method()) { identify_vp_word(frame_index, addr_of_word(offset), addr_of_word(header_words + 1), unextended_sp() + method()->max_stack(), @@ -430,4 +430,3 @@ intptr_t *frame::initial_deoptimization_info() { // unused... but returns fp() to minimize changes introduced by 7087445 return fp(); } - diff --git a/hotspot/src/cpu/zero/vm/frame_zero.inline.hpp b/hotspot/src/cpu/zero/vm/frame_zero.inline.hpp index e41ec13798a..2bc703ae032 100644 --- a/hotspot/src/cpu/zero/vm/frame_zero.inline.hpp +++ b/hotspot/src/cpu/zero/vm/frame_zero.inline.hpp @@ -36,6 +36,8 @@ inline frame::frame() { _deopt_state = unknown; } +inline address frame::sender_pc() const { ShouldNotCallThis(); } + inline frame::frame(ZeroFrame* zf, intptr_t* sp) { _zeroframe = zf; _sp = sp; diff --git a/hotspot/src/cpu/zero/vm/icBuffer_zero.cpp b/hotspot/src/cpu/zero/vm/icBuffer_zero.cpp index af2f8bec5c1..95d0e115a66 100644 --- a/hotspot/src/cpu/zero/vm/icBuffer_zero.cpp +++ b/hotspot/src/cpu/zero/vm/icBuffer_zero.cpp @@ -40,7 +40,7 @@ int InlineCacheBuffer::ic_stub_code_size() { } void InlineCacheBuffer::assemble_ic_buffer_code(address code_begin, - Metadata* cached_oop, + void* cached_oop, address entry_point) { // NB ic_stub_code_size() must return the size of the code we generate ShouldNotCallThis(); @@ -51,7 +51,6 @@ address InlineCacheBuffer::ic_buffer_entry_point(address code_begin) { ShouldNotCallThis(); } -Metadata* InlineCacheBuffer::ic_buffer_cached_oop(address code_begin) { - // NB ic_stub_code_size() must return the size of the code we generate +void* InlineCacheBuffer::ic_buffer_cached_value(address code_begin) { ShouldNotCallThis(); } diff --git a/hotspot/src/cpu/zero/vm/methodHandles_zero.cpp b/hotspot/src/cpu/zero/vm/methodHandles_zero.cpp index 35f4b11f5d3..ea1bc0eedc1 100644 --- a/hotspot/src/cpu/zero/vm/methodHandles_zero.cpp +++ b/hotspot/src/cpu/zero/vm/methodHandles_zero.cpp @@ -24,26 +24,159 @@ */ #include "precompiled.hpp" +#include "interpreter/interpreterGenerator.hpp" #include "interpreter/interpreter.hpp" #include "memory/allocation.inline.hpp" #include "prims/methodHandles.hpp" -int MethodHandles::adapter_conversion_ops_supported_mask() { - return ((1<zero_stack(); + InterpreterFrame *frame = thread->top_zero_frame()->as_interpreter_frame(); + interpreterState istate = frame->interpreter_state(); + + // Trim back the stack to put the parameters at the top + stack->set_sp(istate->stack() + 1); + + Interpreter::invoke_method(method, method->from_interpreted_entry(), THREAD); + + // Convert the result + istate->set_stack(stack->sp() - 1); + } -void MethodHandles::generate_method_handle_stub(MacroAssembler* masm, - MethodHandles::EntryKind ek) { - init_entry(ek, (MethodHandleEntry *) ek); +oop MethodHandles::popFromStack(TRAPS) { + + JavaThread *thread = (JavaThread *) THREAD; + InterpreterFrame *frame = thread->top_zero_frame()->as_interpreter_frame(); + interpreterState istate = frame->interpreter_state(); + intptr_t* topOfStack = istate->stack(); + + oop top = STACK_OBJECT(-1); + MORE_STACK(-1); + istate->set_stack(topOfStack); + + return top; + +} + +int MethodHandles::method_handle_entry_invokeBasic(Method* method, intptr_t UNUSED, TRAPS) { + + JavaThread *thread = (JavaThread *) THREAD; + InterpreterFrame *frame = thread->top_zero_frame()->as_interpreter_frame(); + interpreterState istate = frame->interpreter_state(); + intptr_t* topOfStack = istate->stack(); + + // 'this' is a MethodHandle. We resolve the target method by accessing this.form.vmentry.vmtarget. + int numArgs = method->size_of_parameters(); + oop lform1 = java_lang_invoke_MethodHandle::form(STACK_OBJECT(-numArgs)); // this.form + oop vmEntry1 = java_lang_invoke_LambdaForm::vmentry(lform1); + Method* vmtarget = (Method*) java_lang_invoke_MemberName::vmtarget(vmEntry1); + + invoke_target(vmtarget, THREAD); + + // No deoptimized frames on the stack + return 0; +} + +int MethodHandles::method_handle_entry_linkToStaticOrSpecial(Method* method, intptr_t UNUSED, TRAPS) { + + // Pop appendix argument from stack. This is a MemberName which we resolve to the + // target method. + oop vmentry = popFromStack(THREAD); + + Method* vmtarget = (Method*) java_lang_invoke_MemberName::vmtarget(vmentry); + + invoke_target(vmtarget, THREAD); + + return 0; +} + +int MethodHandles::method_handle_entry_linkToInterface(Method* method, intptr_t UNUSED, TRAPS) { + JavaThread *thread = (JavaThread *) THREAD; + InterpreterFrame *frame = thread->top_zero_frame()->as_interpreter_frame(); + interpreterState istate = frame->interpreter_state(); + + // Pop appendix argument from stack. This is a MemberName which we resolve to the + // target method. + oop vmentry = popFromStack(THREAD); + intptr_t* topOfStack = istate->stack(); + + // Resolve target method by looking up in the receiver object's itable. + Klass* clazz = java_lang_Class::as_Klass(java_lang_invoke_MemberName::clazz(vmentry)); + intptr_t vmindex = java_lang_invoke_MemberName::vmindex(vmentry); + Method* target = (Method*) java_lang_invoke_MemberName::vmtarget(vmentry); + + int numArgs = target->size_of_parameters(); + oop recv = STACK_OBJECT(-numArgs); + + InstanceKlass* klass_part = InstanceKlass::cast(recv->klass()); + itableOffsetEntry* ki = (itableOffsetEntry*) klass_part->start_of_itable(); + int i; + for ( i = 0 ; i < klass_part->itable_length() ; i++, ki++ ) { + if (ki->interface_klass() == clazz) break; + } + + itableMethodEntry* im = ki->first_method_entry(recv->klass()); + Method* vmtarget = im[vmindex].method(); + + invoke_target(vmtarget, THREAD); + + return 0; +} + +int MethodHandles::method_handle_entry_linkToVirtual(Method* method, intptr_t UNUSED, TRAPS) { + JavaThread *thread = (JavaThread *) THREAD; + + InterpreterFrame *frame = thread->top_zero_frame()->as_interpreter_frame(); + interpreterState istate = frame->interpreter_state(); + + // Pop appendix argument from stack. This is a MemberName which we resolve to the + // target method. + oop vmentry = popFromStack(THREAD); + intptr_t* topOfStack = istate->stack(); + + // Resolve target method by looking up in the receiver object's vtable. + intptr_t vmindex = java_lang_invoke_MemberName::vmindex(vmentry); + Method* target = (Method*) java_lang_invoke_MemberName::vmtarget(vmentry); + int numArgs = target->size_of_parameters(); + oop recv = STACK_OBJECT(-numArgs); + Klass* clazz = recv->klass(); + Klass* klass_part = InstanceKlass::cast(clazz); + klassVtable* vtable = klass_part->vtable(); + Method* vmtarget = vtable->method_at(vmindex); + + invoke_target(vmtarget, THREAD); + + return 0; +} + +int MethodHandles::method_handle_entry_invalid(Method* method, intptr_t UNUSED, TRAPS) { + ShouldNotReachHere(); + return 0; +} + +address MethodHandles::generate_method_handle_interpreter_entry(MacroAssembler* masm, + vmIntrinsics::ID iid) { + switch (iid) { + case vmIntrinsics::_invokeGeneric: + case vmIntrinsics::_compiledLambdaForm: + // Perhaps surprisingly, the symbolic references visible to Java are not directly used. + // They are linked to Java-generated adapters via MethodHandleNatives.linkMethod. + // They all allow an appendix argument. + return InterpreterGenerator::generate_entry_impl(masm, (address) MethodHandles::method_handle_entry_invalid); + case vmIntrinsics::_invokeBasic: + return InterpreterGenerator::generate_entry_impl(masm, (address) MethodHandles::method_handle_entry_invokeBasic); + case vmIntrinsics::_linkToStatic: + case vmIntrinsics::_linkToSpecial: + return InterpreterGenerator::generate_entry_impl(masm, (address) MethodHandles::method_handle_entry_linkToStaticOrSpecial); + case vmIntrinsics::_linkToInterface: + return InterpreterGenerator::generate_entry_impl(masm, (address) MethodHandles::method_handle_entry_linkToInterface); + case vmIntrinsics::_linkToVirtual: + return InterpreterGenerator::generate_entry_impl(masm, (address) MethodHandles::method_handle_entry_linkToVirtual); + default: + ShouldNotReachHere(); + return NULL; + } } diff --git a/hotspot/src/cpu/zero/vm/methodHandles_zero.hpp b/hotspot/src/cpu/zero/vm/methodHandles_zero.hpp index a71fce34f12..f4eec005c4d 100644 --- a/hotspot/src/cpu/zero/vm/methodHandles_zero.hpp +++ b/hotspot/src/cpu/zero/vm/methodHandles_zero.hpp @@ -26,6 +26,14 @@ // Adapters enum /* platform_dependent_constants */ { - adapter_code_size = 0 + adapter_code_size = sizeof(ZeroEntry) * (Interpreter::method_handle_invoke_LAST - Interpreter::method_handle_invoke_FIRST + 1) }; +private: + static oop popFromStack(TRAPS); + static void invoke_target(Method* method, TRAPS); + static int method_handle_entry_invokeBasic(Method* method, intptr_t UNUSED, TRAPS); + static int method_handle_entry_linkToStaticOrSpecial(Method* method, intptr_t UNUSED, TRAPS); + static int method_handle_entry_linkToVirtual(Method* method, intptr_t UNUSED, TRAPS); + static int method_handle_entry_linkToInterface(Method* method, intptr_t UNUSED, TRAPS); + static int method_handle_entry_invalid(Method* method, intptr_t UNUSED, TRAPS); diff --git a/hotspot/src/cpu/zero/vm/register_zero.hpp b/hotspot/src/cpu/zero/vm/register_zero.hpp index 0bcc7638248..1ce7141adaf 100644 --- a/hotspot/src/cpu/zero/vm/register_zero.hpp +++ b/hotspot/src/cpu/zero/vm/register_zero.hpp @@ -114,5 +114,8 @@ class ConcreteRegisterImpl : public AbstractRegisterImpl { }; CONSTANT_REGISTER_DECLARATION(Register, noreg, (-1)); +#ifndef DONT_USE_REGISTER_DEFINES +#define noreg ((Register)(noreg_RegisterEnumValue)) +#endif #endif // CPU_ZERO_VM_REGISTER_ZERO_HPP diff --git a/hotspot/src/cpu/zero/vm/relocInfo_zero.cpp b/hotspot/src/cpu/zero/vm/relocInfo_zero.cpp index 13f095e4746..ed7ee7bca6a 100644 --- a/hotspot/src/cpu/zero/vm/relocInfo_zero.cpp +++ b/hotspot/src/cpu/zero/vm/relocInfo_zero.cpp @@ -77,3 +77,7 @@ void poll_return_Relocation::fix_relocation_after_move(const CodeBuffer* src, CodeBuffer* dst) { ShouldNotCallThis(); } + +void metadata_Relocation::pd_fix_value(address x) { + ShouldNotCallThis(); +} diff --git a/hotspot/src/cpu/zero/vm/sharedRuntime_zero.cpp b/hotspot/src/cpu/zero/vm/sharedRuntime_zero.cpp index 3cb8cd7e46a..123d71ec044 100644 --- a/hotspot/src/cpu/zero/vm/sharedRuntime_zero.cpp +++ b/hotspot/src/cpu/zero/vm/sharedRuntime_zero.cpp @@ -35,6 +35,7 @@ #include "runtime/sharedRuntime.hpp" #include "runtime/vframeArray.hpp" #include "vmreg_zero.inline.hpp" + #ifdef COMPILER1 #include "c1/c1_Runtime1.hpp" #endif @@ -47,6 +48,12 @@ #endif + +static address zero_null_code_stub() { + address start = ShouldNotCallThisStub(); + return start; +} + int SharedRuntime::java_calling_convention(const BasicType *sig_bt, VMRegPair *regs, int total_args_passed, @@ -63,16 +70,14 @@ AdapterHandlerEntry* SharedRuntime::generate_i2c2i_adapters( AdapterFingerPrint *fingerprint) { return AdapterHandlerLibrary::new_entry( fingerprint, - ShouldNotCallThisStub(), - ShouldNotCallThisStub(), - ShouldNotCallThisStub()); + CAST_FROM_FN_PTR(address,zero_null_code_stub), + CAST_FROM_FN_PTR(address,zero_null_code_stub), + CAST_FROM_FN_PTR(address,zero_null_code_stub)); } nmethod *SharedRuntime::generate_native_wrapper(MacroAssembler *masm, methodHandle method, int compile_id, - int total_args_passed, - int max_arg, BasicType *sig_bt, VMRegPair *regs, BasicType ret_type) { @@ -96,19 +101,20 @@ uint SharedRuntime::out_preserve_stack_slots() { ShouldNotCallThis(); } +JRT_LEAF(void, zero_stub()) + ShouldNotCallThis(); +JRT_END + static RuntimeStub* generate_empty_runtime_stub(const char* name) { - CodeBuffer buffer(name, 0, 0); - return RuntimeStub::new_runtime_stub(name, &buffer, 0, 0, NULL, false); + return CAST_FROM_FN_PTR(RuntimeStub*,zero_stub); } static SafepointBlob* generate_empty_safepoint_blob() { - CodeBuffer buffer("handler_blob", 0, 0); - return SafepointBlob::create(&buffer, NULL, 0); + return CAST_FROM_FN_PTR(SafepointBlob*,zero_stub); } static DeoptimizationBlob* generate_empty_deopt_blob() { - CodeBuffer buffer("handler_blob", 0, 0); - return DeoptimizationBlob::create(&buffer, NULL, 0, 0, 0, 0); + return CAST_FROM_FN_PTR(DeoptimizationBlob*,zero_stub); } @@ -116,7 +122,7 @@ void SharedRuntime::generate_deopt_blob() { _deopt_blob = generate_empty_deopt_blob(); } -SafepointBlob* SharedRuntime::generate_handler_blob(address call_ptr, bool cause_return) { +SafepointBlob* SharedRuntime::generate_handler_blob(address call_ptr, int poll_type) { return generate_empty_safepoint_blob(); } @@ -124,6 +130,7 @@ RuntimeStub* SharedRuntime::generate_resolve_blob(address destination, const cha return generate_empty_runtime_stub("resolve_blob"); } + int SharedRuntime::c_calling_convention(const BasicType *sig_bt, VMRegPair *regs, int total_args_passed) { diff --git a/hotspot/src/os/bsd/vm/attachListener_bsd.cpp b/hotspot/src/os/bsd/vm/attachListener_bsd.cpp index 53fa2e26e65..81fba25efd8 100644 --- a/hotspot/src/os/bsd/vm/attachListener_bsd.cpp +++ b/hotspot/src/os/bsd/vm/attachListener_bsd.cpp @@ -342,7 +342,6 @@ BsdAttachOperation* BsdAttachListener::dequeue() { // get the credentials of the peer and check the effective uid/guid // - check with jeff on this. -#ifdef _ALLBSD_SOURCE uid_t puid; gid_t pgid; if (::getpeereid(s, &puid, &pgid) != 0) { @@ -350,17 +349,6 @@ BsdAttachOperation* BsdAttachListener::dequeue() { RESTARTABLE(::close(s), res); continue; } -#else - struct ucred cred_info; - socklen_t optlen = sizeof(cred_info); - if (::getsockopt(s, SOL_SOCKET, SO_PEERCRED, (void*)&cred_info, &optlen) == -1) { - int res; - RESTARTABLE(::close(s), res); - continue; - } - uid_t puid = cred_info.uid; - gid_t pgid = cred_info.gid; -#endif uid_t euid = geteuid(); gid_t egid = getegid(); diff --git a/hotspot/src/os/bsd/vm/osThread_bsd.hpp b/hotspot/src/os/bsd/vm/osThread_bsd.hpp index c72b36025f6..a5d5039f42d 100644 --- a/hotspot/src/os/bsd/vm/osThread_bsd.hpp +++ b/hotspot/src/os/bsd/vm/osThread_bsd.hpp @@ -39,18 +39,12 @@ private: -#ifdef _ALLBSD_SOURCE - #ifdef __APPLE__ typedef thread_t thread_id_t; #else typedef pthread_t thread_id_t; #endif -#else - typedef pid_t thread_id_t; -#endif - // _pthread_id is the pthread id, which is used by library calls // (e.g. pthread_kill). pthread_t _pthread_id; diff --git a/hotspot/src/os/bsd/vm/os_bsd.cpp b/hotspot/src/os/bsd/vm/os_bsd.cpp index 984e25cb942..9a845fc9ec8 100644 --- a/hotspot/src/os/bsd/vm/os_bsd.cpp +++ b/hotspot/src/os/bsd/vm/os_bsd.cpp @@ -108,14 +108,8 @@ # include # include # include -#ifdef _ALLBSD_SOURCE # include # include -#else -# include -# include -# include -#endif # include # include #ifndef __APPLE__ @@ -150,25 +144,10 @@ // global variables julong os::Bsd::_physical_memory = 0; -#ifndef _ALLBSD_SOURCE -address os::Bsd::_initial_thread_stack_bottom = NULL; -uintptr_t os::Bsd::_initial_thread_stack_size = 0; -#endif int (*os::Bsd::_clock_gettime)(clockid_t, struct timespec *) = NULL; -#ifndef _ALLBSD_SOURCE -int (*os::Bsd::_pthread_getcpuclockid)(pthread_t, clockid_t *) = NULL; -Mutex* os::Bsd::_createThread_lock = NULL; -#endif pthread_t os::Bsd::_main_thread; int os::Bsd::_page_size = -1; -#ifndef _ALLBSD_SOURCE -bool os::Bsd::_is_floating_stack = false; -bool os::Bsd::_is_NPTL = false; -bool os::Bsd::_supports_fast_thread_cpu_time = false; -const char * os::Bsd::_glibc_version = NULL; -const char * os::Bsd::_libpthread_version = NULL; -#endif static jlong initial_time_count=0; @@ -176,7 +155,7 @@ static int clock_tics_per_sec = 100; // For diagnostics to print a message once. see run_periodic_checks static sigset_t check_signal_done; -static bool check_signals = true;; +static bool check_signals = true; static pid_t _initial_pid = 0; @@ -198,16 +177,8 @@ julong os::available_memory() { } julong os::Bsd::available_memory() { -#ifdef _ALLBSD_SOURCE // XXXBSD: this is just a stopgap implementation return physical_memory() >> 2; -#else - // values in struct sysinfo are "unsigned long" - struct sysinfo si; - sysinfo(&si); - - return (julong)si.freeram * si.mem_unit; -#endif } julong os::physical_memory() { @@ -255,22 +226,6 @@ bool os::have_special_privileges() { } -#ifndef _ALLBSD_SOURCE -#ifndef SYS_gettid -// i386: 224, ia64: 1105, amd64: 186, sparc 143 -#ifdef __ia64__ -#define SYS_gettid 1105 -#elif __i386__ -#define SYS_gettid 224 -#elif __amd64__ -#define SYS_gettid 186 -#elif __sparc__ -#define SYS_gettid 143 -#else -#error define gettid for the arch -#endif -#endif -#endif // Cpu architecture string #if defined(ZERO) @@ -302,36 +257,7 @@ static char cpu_arch[] = "sparc"; #define COMPILER_VARIANT "client" #endif -#ifndef _ALLBSD_SOURCE -// pid_t gettid() -// -// Returns the kernel thread id of the currently running thread. Kernel -// thread id is used to access /proc. -// -// (Note that getpid() on BsdThreads returns kernel thread id too; but -// on NPTL, it returns the same pid for all threads, as required by POSIX.) -// -pid_t os::Bsd::gettid() { - int rslt = syscall(SYS_gettid); - if (rslt == -1) { - // old kernel, no NPTL support - return getpid(); - } else { - return (pid_t)rslt; - } -} -// Most versions of bsd have a bug where the number of processors are -// determined by looking at the /proc file system. In a chroot environment, -// the system call returns 1. This causes the VM to act as if it is -// a single processor and elide locking (see is_MP() call). -static bool unsafe_chroot_detected = false; -static const char *unstable_chroot_error = "/proc file system not found.\n" - "Java may be unstable running multithreaded in a chroot " - "environment on Bsd when /proc filesystem is not mounted."; -#endif - -#ifdef _ALLBSD_SOURCE void os::Bsd::initialize_system_info() { int mib[2]; size_t len; @@ -370,24 +296,6 @@ void os::Bsd::initialize_system_info() { } #endif } -#else -void os::Bsd::initialize_system_info() { - set_processor_count(sysconf(_SC_NPROCESSORS_CONF)); - if (processor_count() == 1) { - pid_t pid = os::Bsd::gettid(); - char fname[32]; - jio_snprintf(fname, sizeof(fname), "/proc/%d", pid); - FILE *fp = fopen(fname, "r"); - if (fp == NULL) { - unsafe_chroot_detected = true; - } else { - fclose(fp); - } - } - _physical_memory = (julong)sysconf(_SC_PHYS_PAGES) * (julong)sysconf(_SC_PAGESIZE); - assert(processor_count() > 0, "bsd error"); -} -#endif #ifdef __APPLE__ static const char *get_home() { @@ -744,171 +652,6 @@ void os::Bsd::hotspot_sigmask(Thread* thread) { } } -#ifndef _ALLBSD_SOURCE -////////////////////////////////////////////////////////////////////////////// -// detecting pthread library - -void os::Bsd::libpthread_init() { - // Save glibc and pthread version strings. Note that _CS_GNU_LIBC_VERSION - // and _CS_GNU_LIBPTHREAD_VERSION are supported in glibc >= 2.3.2. Use a - // generic name for earlier versions. - // Define macros here so we can build HotSpot on old systems. -# ifndef _CS_GNU_LIBC_VERSION -# define _CS_GNU_LIBC_VERSION 2 -# endif -# ifndef _CS_GNU_LIBPTHREAD_VERSION -# define _CS_GNU_LIBPTHREAD_VERSION 3 -# endif - - size_t n = confstr(_CS_GNU_LIBC_VERSION, NULL, 0); - if (n > 0) { - char *str = (char *)malloc(n); - confstr(_CS_GNU_LIBC_VERSION, str, n); - os::Bsd::set_glibc_version(str); - } else { - // _CS_GNU_LIBC_VERSION is not supported, try gnu_get_libc_version() - static char _gnu_libc_version[32]; - jio_snprintf(_gnu_libc_version, sizeof(_gnu_libc_version), - "glibc %s %s", gnu_get_libc_version(), gnu_get_libc_release()); - os::Bsd::set_glibc_version(_gnu_libc_version); - } - - n = confstr(_CS_GNU_LIBPTHREAD_VERSION, NULL, 0); - if (n > 0) { - char *str = (char *)malloc(n); - confstr(_CS_GNU_LIBPTHREAD_VERSION, str, n); - // Vanilla RH-9 (glibc 2.3.2) has a bug that confstr() always tells - // us "NPTL-0.29" even we are running with BsdThreads. Check if this - // is the case. BsdThreads has a hard limit on max number of threads. - // So sysconf(_SC_THREAD_THREADS_MAX) will return a positive value. - // On the other hand, NPTL does not have such a limit, sysconf() - // will return -1 and errno is not changed. Check if it is really NPTL. - if (strcmp(os::Bsd::glibc_version(), "glibc 2.3.2") == 0 && - strstr(str, "NPTL") && - sysconf(_SC_THREAD_THREADS_MAX) > 0) { - free(str); - os::Bsd::set_libpthread_version("bsdthreads"); - } else { - os::Bsd::set_libpthread_version(str); - } - } else { - // glibc before 2.3.2 only has BsdThreads. - os::Bsd::set_libpthread_version("bsdthreads"); - } - - if (strstr(libpthread_version(), "NPTL")) { - os::Bsd::set_is_NPTL(); - } else { - os::Bsd::set_is_BsdThreads(); - } - - // BsdThreads have two flavors: floating-stack mode, which allows variable - // stack size; and fixed-stack mode. NPTL is always floating-stack. - if (os::Bsd::is_NPTL() || os::Bsd::supports_variable_stack_size()) { - os::Bsd::set_is_floating_stack(); - } -} - -///////////////////////////////////////////////////////////////////////////// -// thread stack - -// Force Bsd kernel to expand current thread stack. If "bottom" is close -// to the stack guard, caller should block all signals. -// -// MAP_GROWSDOWN: -// A special mmap() flag that is used to implement thread stacks. It tells -// kernel that the memory region should extend downwards when needed. This -// allows early versions of BsdThreads to only mmap the first few pages -// when creating a new thread. Bsd kernel will automatically expand thread -// stack as needed (on page faults). -// -// However, because the memory region of a MAP_GROWSDOWN stack can grow on -// demand, if a page fault happens outside an already mapped MAP_GROWSDOWN -// region, it's hard to tell if the fault is due to a legitimate stack -// access or because of reading/writing non-exist memory (e.g. buffer -// overrun). As a rule, if the fault happens below current stack pointer, -// Bsd kernel does not expand stack, instead a SIGSEGV is sent to the -// application (see Bsd kernel fault.c). -// -// This Bsd feature can cause SIGSEGV when VM bangs thread stack for -// stack overflow detection. -// -// Newer version of BsdThreads (since glibc-2.2, or, RH-7.x) and NPTL do -// not use this flag. However, the stack of initial thread is not created -// by pthread, it is still MAP_GROWSDOWN. Also it's possible (though -// unlikely) that user code can create a thread with MAP_GROWSDOWN stack -// and then attach the thread to JVM. -// -// To get around the problem and allow stack banging on Bsd, we need to -// manually expand thread stack after receiving the SIGSEGV. -// -// There are two ways to expand thread stack to address "bottom", we used -// both of them in JVM before 1.5: -// 1. adjust stack pointer first so that it is below "bottom", and then -// touch "bottom" -// 2. mmap() the page in question -// -// Now alternate signal stack is gone, it's harder to use 2. For instance, -// if current sp is already near the lower end of page 101, and we need to -// call mmap() to map page 100, it is possible that part of the mmap() frame -// will be placed in page 100. When page 100 is mapped, it is zero-filled. -// That will destroy the mmap() frame and cause VM to crash. -// -// The following code works by adjusting sp first, then accessing the "bottom" -// page to force a page fault. Bsd kernel will then automatically expand the -// stack mapping. -// -// _expand_stack_to() assumes its frame size is less than page size, which -// should always be true if the function is not inlined. - -#if __GNUC__ < 3 // gcc 2.x does not support noinline attribute -#define NOINLINE -#else -#define NOINLINE __attribute__ ((noinline)) -#endif - -static void _expand_stack_to(address bottom) NOINLINE; - -static void _expand_stack_to(address bottom) { - address sp; - size_t size; - volatile char *p; - - // Adjust bottom to point to the largest address within the same page, it - // gives us a one-page buffer if alloca() allocates slightly more memory. - bottom = (address)align_size_down((uintptr_t)bottom, os::Bsd::page_size()); - bottom += os::Bsd::page_size() - 1; - - // sp might be slightly above current stack pointer; if that's the case, we - // will alloca() a little more space than necessary, which is OK. Don't use - // os::current_stack_pointer(), as its result can be slightly below current - // stack pointer, causing us to not alloca enough to reach "bottom". - sp = (address)&sp; - - if (sp > bottom) { - size = sp - bottom; - p = (volatile char *)alloca(size); - assert(p != NULL && p <= (volatile char *)bottom, "alloca problem?"); - p[0] = '\0'; - } -} - -bool os::Bsd::manually_expand_stack(JavaThread * t, address addr) { - assert(t!=NULL, "just checking"); - assert(t->osthread()->expanding_stack(), "expand should be set"); - assert(t->stack_base() != NULL, "stack_base was not initialized"); - - if (addr < t->stack_base() && addr >= t->stack_yellow_zone_base()) { - sigset_t mask_all, old_sigset; - sigfillset(&mask_all); - pthread_sigmask(SIG_SETMASK, &mask_all, &old_sigset); - _expand_stack_to(addr); - pthread_sigmask(SIG_SETMASK, &old_sigset, NULL); - return true; - } - return false; -} -#endif ////////////////////////////////////////////////////////////////////////////// // create new thread @@ -917,43 +660,7 @@ static address highest_vm_reserved_address(); // check if it's safe to start a new thread static bool _thread_safety_check(Thread* thread) { -#ifdef _ALLBSD_SOURCE - return true; -#else - if (os::Bsd::is_BsdThreads() && !os::Bsd::is_floating_stack()) { - // Fixed stack BsdThreads (SuSE Bsd/x86, and some versions of Redhat) - // Heap is mmap'ed at lower end of memory space. Thread stacks are - // allocated (MAP_FIXED) from high address space. Every thread stack - // occupies a fixed size slot (usually 2Mbytes, but user can change - // it to other values if they rebuild BsdThreads). - // - // Problem with MAP_FIXED is that mmap() can still succeed even part of - // the memory region has already been mmap'ed. That means if we have too - // many threads and/or very large heap, eventually thread stack will - // collide with heap. - // - // Here we try to prevent heap/stack collision by comparing current - // stack bottom with the highest address that has been mmap'ed by JVM - // plus a safety margin for memory maps created by native code. - // - // This feature can be disabled by setting ThreadSafetyMargin to 0 - // - if (ThreadSafetyMargin > 0) { - address stack_bottom = os::current_stack_base() - os::current_stack_size(); - - // not safe if our stack extends below the safety margin - return stack_bottom - ThreadSafetyMargin >= highest_vm_reserved_address(); - } else { - return true; - } - } else { - // Floating stack BsdThreads or NPTL: - // Unlike fixed stack BsdThreads, thread stacks are not MAP_FIXED. When - // there's not enough space left, pthread_create() will fail. If we come - // here, that means enough space has been reserved for stack. - return true; - } -#endif + return true; } #ifdef __APPLE__ @@ -991,24 +698,12 @@ static void *java_start(Thread *thread) { return NULL; } -#ifdef _ALLBSD_SOURCE #ifdef __APPLE__ // thread_id is mach thread on macos osthread->set_thread_id(::mach_thread_self()); #else // thread_id is pthread_id on BSD osthread->set_thread_id(::pthread_self()); -#endif -#else - // thread_id is kernel thread id (similar to Solaris LWP id) - osthread->set_thread_id(os::Bsd::gettid()); - - if (UseNUMA) { - int lgrp_id = os::numa_get_group_id(); - if (lgrp_id != -1) { - thread->set_lgrp_id(lgrp_id); - } - } #endif // initialize signal mask for this thread os::Bsd::hotspot_sigmask(thread); @@ -1099,23 +794,9 @@ bool os::create_thread(Thread* thread, ThreadType thr_type, size_t stack_size) { // let pthread_create() pick the default value. } -#ifndef _ALLBSD_SOURCE - // glibc guard page - pthread_attr_setguardsize(&attr, os::Bsd::default_guard_size(thr_type)); -#endif - ThreadState state; { - -#ifndef _ALLBSD_SOURCE - // Serialize thread creation if we are running with fixed stack BsdThreads - bool lock = os::Bsd::is_BsdThreads() && !os::Bsd::is_floating_stack(); - if (lock) { - os::Bsd::createThread_lock()->lock_without_safepoint_check(); - } -#endif - pthread_t tid; int ret = pthread_create(&tid, &attr, (void* (*)(void*)) java_start, thread); @@ -1128,9 +809,6 @@ bool os::create_thread(Thread* thread, ThreadType thr_type, size_t stack_size) { // Need to clean up stuff we've allocated so far thread->set_osthread(NULL); delete osthread; -#ifndef _ALLBSD_SOURCE - if (lock) os::Bsd::createThread_lock()->unlock(); -#endif return false; } @@ -1146,11 +824,6 @@ bool os::create_thread(Thread* thread, ThreadType thr_type, size_t stack_size) { } } -#ifndef _ALLBSD_SOURCE - if (lock) { - os::Bsd::createThread_lock()->unlock(); - } -#endif } // Aborted due to thread limit being reached @@ -1188,14 +861,10 @@ bool os::create_attached_thread(JavaThread* thread) { } // Store pthread info into the OSThread -#ifdef _ALLBSD_SOURCE #ifdef __APPLE__ osthread->set_thread_id(::mach_thread_self()); #else osthread->set_thread_id(::pthread_self()); -#endif -#else - osthread->set_thread_id(os::Bsd::gettid()); #endif osthread->set_pthread_id(::pthread_self()); @@ -1207,35 +876,6 @@ bool os::create_attached_thread(JavaThread* thread) { thread->set_osthread(osthread); -#ifndef _ALLBSD_SOURCE - if (UseNUMA) { - int lgrp_id = os::numa_get_group_id(); - if (lgrp_id != -1) { - thread->set_lgrp_id(lgrp_id); - } - } - - if (os::Bsd::is_initial_thread()) { - // If current thread is initial thread, its stack is mapped on demand, - // see notes about MAP_GROWSDOWN. Here we try to force kernel to map - // the entire stack region to avoid SEGV in stack banging. - // It is also useful to get around the heap-stack-gap problem on SuSE - // kernel (see 4821821 for details). We first expand stack to the top - // of yellow zone, then enable stack yellow zone (order is significant, - // enabling yellow zone first will crash JVM on SuSE Bsd), so there - // is no gap between the last two virtual memory regions. - - JavaThread *jt = (JavaThread *)thread; - address addr = jt->stack_yellow_zone_base(); - assert(addr != NULL, "initialization problem?"); - assert(jt->stack_available(addr) > 0, "stack guard should not be enabled"); - - osthread->set_expanding_stack(); - os::Bsd::manually_expand_stack(jt, addr); - osthread->clear_expanding_stack(); - } -#endif - // initialize signal mask for this thread // and save the caller's signal mask os::Bsd::hotspot_sigmask(thread); @@ -1290,247 +930,6 @@ extern "C" Thread* get_thread() { return ThreadLocalStorage::thread(); } -////////////////////////////////////////////////////////////////////////////// -// initial thread - -#ifndef _ALLBSD_SOURCE -// Check if current thread is the initial thread, similar to Solaris thr_main. -bool os::Bsd::is_initial_thread(void) { - char dummy; - // If called before init complete, thread stack bottom will be null. - // Can be called if fatal error occurs before initialization. - if (initial_thread_stack_bottom() == NULL) return false; - assert(initial_thread_stack_bottom() != NULL && - initial_thread_stack_size() != 0, - "os::init did not locate initial thread's stack region"); - if ((address)&dummy >= initial_thread_stack_bottom() && - (address)&dummy < initial_thread_stack_bottom() + initial_thread_stack_size()) - return true; - else return false; -} - -// Find the virtual memory area that contains addr -static bool find_vma(address addr, address* vma_low, address* vma_high) { - FILE *fp = fopen("/proc/self/maps", "r"); - if (fp) { - address low, high; - while (!feof(fp)) { - if (fscanf(fp, "%p-%p", &low, &high) == 2) { - if (low <= addr && addr < high) { - if (vma_low) *vma_low = low; - if (vma_high) *vma_high = high; - fclose (fp); - return true; - } - } - for (;;) { - int ch = fgetc(fp); - if (ch == EOF || ch == (int)'\n') break; - } - } - fclose(fp); - } - return false; -} - -// Locate initial thread stack. This special handling of initial thread stack -// is needed because pthread_getattr_np() on most (all?) Bsd distros returns -// bogus value for initial thread. -void os::Bsd::capture_initial_stack(size_t max_size) { - // stack size is the easy part, get it from RLIMIT_STACK - size_t stack_size; - struct rlimit rlim; - getrlimit(RLIMIT_STACK, &rlim); - stack_size = rlim.rlim_cur; - - // 6308388: a bug in ld.so will relocate its own .data section to the - // lower end of primordial stack; reduce ulimit -s value a little bit - // so we won't install guard page on ld.so's data section. - stack_size -= 2 * page_size(); - - // 4441425: avoid crash with "unlimited" stack size on SuSE 7.1 or Redhat - // 7.1, in both cases we will get 2G in return value. - // 4466587: glibc 2.2.x compiled w/o "--enable-kernel=2.4.0" (RH 7.0, - // SuSE 7.2, Debian) can not handle alternate signal stack correctly - // for initial thread if its stack size exceeds 6M. Cap it at 2M, - // in case other parts in glibc still assumes 2M max stack size. - // FIXME: alt signal stack is gone, maybe we can relax this constraint? -#ifndef IA64 - if (stack_size > 2 * K * K) stack_size = 2 * K * K; -#else - // Problem still exists RH7.2 (IA64 anyway) but 2MB is a little small - if (stack_size > 4 * K * K) stack_size = 4 * K * K; -#endif - - // Try to figure out where the stack base (top) is. This is harder. - // - // When an application is started, glibc saves the initial stack pointer in - // a global variable "__libc_stack_end", which is then used by system - // libraries. __libc_stack_end should be pretty close to stack top. The - // variable is available since the very early days. However, because it is - // a private interface, it could disappear in the future. - // - // Bsd kernel saves start_stack information in /proc//stat. Similar - // to __libc_stack_end, it is very close to stack top, but isn't the real - // stack top. Note that /proc may not exist if VM is running as a chroot - // program, so reading /proc//stat could fail. Also the contents of - // /proc//stat could change in the future (though unlikely). - // - // We try __libc_stack_end first. If that doesn't work, look for - // /proc//stat. If neither of them works, we use current stack pointer - // as a hint, which should work well in most cases. - - uintptr_t stack_start; - - // try __libc_stack_end first - uintptr_t *p = (uintptr_t *)dlsym(RTLD_DEFAULT, "__libc_stack_end"); - if (p && *p) { - stack_start = *p; - } else { - // see if we can get the start_stack field from /proc/self/stat - FILE *fp; - int pid; - char state; - int ppid; - int pgrp; - int session; - int nr; - int tpgrp; - unsigned long flags; - unsigned long minflt; - unsigned long cminflt; - unsigned long majflt; - unsigned long cmajflt; - unsigned long utime; - unsigned long stime; - long cutime; - long cstime; - long prio; - long nice; - long junk; - long it_real; - uintptr_t start; - uintptr_t vsize; - intptr_t rss; - uintptr_t rsslim; - uintptr_t scodes; - uintptr_t ecode; - int i; - - // Figure what the primordial thread stack base is. Code is inspired - // by email from Hans Boehm. /proc/self/stat begins with current pid, - // followed by command name surrounded by parentheses, state, etc. - char stat[2048]; - int statlen; - - fp = fopen("/proc/self/stat", "r"); - if (fp) { - statlen = fread(stat, 1, 2047, fp); - stat[statlen] = '\0'; - fclose(fp); - - // Skip pid and the command string. Note that we could be dealing with - // weird command names, e.g. user could decide to rename java launcher - // to "java 1.4.2 :)", then the stat file would look like - // 1234 (java 1.4.2 :)) R ... ... - // We don't really need to know the command string, just find the last - // occurrence of ")" and then start parsing from there. See bug 4726580. - char * s = strrchr(stat, ')'); - - i = 0; - if (s) { - // Skip blank chars - do s++; while (isspace(*s)); - -#define _UFM UINTX_FORMAT -#define _DFM INTX_FORMAT - - /* 1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 */ - /* 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 */ - i = sscanf(s, "%c %d %d %d %d %d %lu %lu %lu %lu %lu %lu %lu %ld %ld %ld %ld %ld %ld " _UFM _UFM _DFM _UFM _UFM _UFM _UFM, - &state, /* 3 %c */ - &ppid, /* 4 %d */ - &pgrp, /* 5 %d */ - &session, /* 6 %d */ - &nr, /* 7 %d */ - &tpgrp, /* 8 %d */ - &flags, /* 9 %lu */ - &minflt, /* 10 %lu */ - &cminflt, /* 11 %lu */ - &majflt, /* 12 %lu */ - &cmajflt, /* 13 %lu */ - &utime, /* 14 %lu */ - &stime, /* 15 %lu */ - &cutime, /* 16 %ld */ - &cstime, /* 17 %ld */ - &prio, /* 18 %ld */ - &nice, /* 19 %ld */ - &junk, /* 20 %ld */ - &it_real, /* 21 %ld */ - &start, /* 22 UINTX_FORMAT */ - &vsize, /* 23 UINTX_FORMAT */ - &rss, /* 24 INTX_FORMAT */ - &rsslim, /* 25 UINTX_FORMAT */ - &scodes, /* 26 UINTX_FORMAT */ - &ecode, /* 27 UINTX_FORMAT */ - &stack_start); /* 28 UINTX_FORMAT */ - } - -#undef _UFM -#undef _DFM - - if (i != 28 - 2) { - assert(false, "Bad conversion from /proc/self/stat"); - // product mode - assume we are the initial thread, good luck in the - // embedded case. - warning("Can't detect initial thread stack location - bad conversion"); - stack_start = (uintptr_t) &rlim; - } - } else { - // For some reason we can't open /proc/self/stat (for example, running on - // FreeBSD with a Bsd emulator, or inside chroot), this should work for - // most cases, so don't abort: - warning("Can't detect initial thread stack location - no /proc/self/stat"); - stack_start = (uintptr_t) &rlim; - } - } - - // Now we have a pointer (stack_start) very close to the stack top, the - // next thing to do is to figure out the exact location of stack top. We - // can find out the virtual memory area that contains stack_start by - // reading /proc/self/maps, it should be the last vma in /proc/self/maps, - // and its upper limit is the real stack top. (again, this would fail if - // running inside chroot, because /proc may not exist.) - - uintptr_t stack_top; - address low, high; - if (find_vma((address)stack_start, &low, &high)) { - // success, "high" is the true stack top. (ignore "low", because initial - // thread stack grows on demand, its real bottom is high - RLIMIT_STACK.) - stack_top = (uintptr_t)high; - } else { - // failed, likely because /proc/self/maps does not exist - warning("Can't detect initial thread stack location - find_vma failed"); - // best effort: stack_start is normally within a few pages below the real - // stack top, use it as stack top, and reduce stack size so we won't put - // guard page outside stack. - stack_top = stack_start; - stack_size -= 16 * page_size(); - } - - // stack_top could be partially down the page so align it - stack_top = align_size_up(stack_top, page_size()); - - if (max_size && stack_size > max_size) { - _initial_thread_stack_size = max_size; - } else { - _initial_thread_stack_size = stack_size; - } - - _initial_thread_stack_size = align_size_down(_initial_thread_stack_size, page_size()); - _initial_thread_stack_bottom = (address)stack_top - _initial_thread_stack_size; -} -#endif //////////////////////////////////////////////////////////////////////////////// // time support @@ -1576,7 +975,7 @@ jlong os::javaTimeMillis() { void os::Bsd::clock_init() { // XXXDARWIN: Investigate replacement monotonic clock } -#elif defined(_ALLBSD_SOURCE) +#else void os::Bsd::clock_init() { struct timespec res; struct timespec tp; @@ -1586,86 +985,8 @@ void os::Bsd::clock_init() { _clock_gettime = ::clock_gettime; } } -#else -void os::Bsd::clock_init() { - // we do dlopen's in this particular order due to bug in bsd - // dynamical loader (see 6348968) leading to crash on exit - void* handle = dlopen("librt.so.1", RTLD_LAZY); - if (handle == NULL) { - handle = dlopen("librt.so", RTLD_LAZY); - } - - if (handle) { - int (*clock_getres_func)(clockid_t, struct timespec*) = - (int(*)(clockid_t, struct timespec*))dlsym(handle, "clock_getres"); - int (*clock_gettime_func)(clockid_t, struct timespec*) = - (int(*)(clockid_t, struct timespec*))dlsym(handle, "clock_gettime"); - if (clock_getres_func && clock_gettime_func) { - // See if monotonic clock is supported by the kernel. Note that some - // early implementations simply return kernel jiffies (updated every - // 1/100 or 1/1000 second). It would be bad to use such a low res clock - // for nano time (though the monotonic property is still nice to have). - // It's fixed in newer kernels, however clock_getres() still returns - // 1/HZ. We check if clock_getres() works, but will ignore its reported - // resolution for now. Hopefully as people move to new kernels, this - // won't be a problem. - struct timespec res; - struct timespec tp; - if (clock_getres_func (CLOCK_MONOTONIC, &res) == 0 && - clock_gettime_func(CLOCK_MONOTONIC, &tp) == 0) { - // yes, monotonic clock is supported - _clock_gettime = clock_gettime_func; - } else { - // close librt if there is no monotonic clock - dlclose(handle); - } - } - } -} #endif -#ifndef _ALLBSD_SOURCE -#ifndef SYS_clock_getres - -#if defined(IA32) || defined(AMD64) -#define SYS_clock_getres IA32_ONLY(266) AMD64_ONLY(229) -#define sys_clock_getres(x,y) ::syscall(SYS_clock_getres, x, y) -#else -#warning "SYS_clock_getres not defined for this platform, disabling fast_thread_cpu_time" -#define sys_clock_getres(x,y) -1 -#endif - -#else -#define sys_clock_getres(x,y) ::syscall(SYS_clock_getres, x, y) -#endif - -void os::Bsd::fast_thread_clock_init() { - if (!UseBsdPosixThreadCPUClocks) { - return; - } - clockid_t clockid; - struct timespec tp; - int (*pthread_getcpuclockid_func)(pthread_t, clockid_t *) = - (int(*)(pthread_t, clockid_t *)) dlsym(RTLD_DEFAULT, "pthread_getcpuclockid"); - - // Switch to using fast clocks for thread cpu time if - // the sys_clock_getres() returns 0 error code. - // Note, that some kernels may support the current thread - // clock (CLOCK_THREAD_CPUTIME_ID) but not the clocks - // returned by the pthread_getcpuclockid(). - // If the fast Posix clocks are supported then the sys_clock_getres() - // must return at least tp.tv_sec == 0 which means a resolution - // better than 1 sec. This is extra check for reliability. - - if(pthread_getcpuclockid_func && - pthread_getcpuclockid_func(_main_thread, &clockid) == 0 && - sys_clock_getres(clockid, &tp) == 0 && tp.tv_sec == 0) { - - _supports_fast_thread_cpu_time = true; - _pthread_getcpuclockid = pthread_getcpuclockid_func; - } -} -#endif jlong os::javaTimeNanos() { if (Bsd::supports_monotonic_clock()) { @@ -1978,7 +1299,6 @@ bool os::dll_address_to_function_name(address addr, char *buf, return false; } -#ifdef _ALLBSD_SOURCE // ported from solaris version bool os::dll_address_to_library_name(address addr, char* buf, int buflen, int* offset) { @@ -1994,86 +1314,10 @@ bool os::dll_address_to_library_name(address addr, char* buf, return false; } } -#else -struct _address_to_library_name { - address addr; // input : memory address - size_t buflen; // size of fname - char* fname; // output: library name - address base; // library base addr -}; -static int address_to_library_name_callback(struct dl_phdr_info *info, - size_t size, void *data) { - int i; - bool found = false; - address libbase = NULL; - struct _address_to_library_name * d = (struct _address_to_library_name *)data; - - // iterate through all loadable segments - for (i = 0; i < info->dlpi_phnum; i++) { - address segbase = (address)(info->dlpi_addr + info->dlpi_phdr[i].p_vaddr); - if (info->dlpi_phdr[i].p_type == PT_LOAD) { - // base address of a library is the lowest address of its loaded - // segments. - if (libbase == NULL || libbase > segbase) { - libbase = segbase; - } - // see if 'addr' is within current segment - if (segbase <= d->addr && - d->addr < segbase + info->dlpi_phdr[i].p_memsz) { - found = true; - } - } - } - - // dlpi_name is NULL or empty if the ELF file is executable, return 0 - // so dll_address_to_library_name() can fall through to use dladdr() which - // can figure out executable name from argv[0]. - if (found && info->dlpi_name && info->dlpi_name[0]) { - d->base = libbase; - if (d->fname) { - jio_snprintf(d->fname, d->buflen, "%s", info->dlpi_name); - } - return 1; - } - return 0; -} - -bool os::dll_address_to_library_name(address addr, char* buf, - int buflen, int* offset) { - Dl_info dlinfo; - struct _address_to_library_name data; - - // There is a bug in old glibc dladdr() implementation that it could resolve - // to wrong library name if the .so file has a base address != NULL. Here - // we iterate through the program headers of all loaded libraries to find - // out which library 'addr' really belongs to. This workaround can be - // removed once the minimum requirement for glibc is moved to 2.3.x. - data.addr = addr; - data.fname = buf; - data.buflen = buflen; - data.base = NULL; - int rslt = dl_iterate_phdr(address_to_library_name_callback, (void *)&data); - - if (rslt) { - // buf already contains library name - if (offset) *offset = addr - data.base; - return true; - } else if (dladdr((void*)addr, &dlinfo)){ - if (buf) jio_snprintf(buf, buflen, "%s", dlinfo.dli_fname); - if (offset) *offset = addr - (address)dlinfo.dli_fbase; - return true; - } else { - if (buf) buf[0] = '\0'; - if (offset) *offset = -1; - return false; - } -} -#endif - - // Loads .dll/.so and - // in case of error it checks if .dll/.so was built for the - // same architecture as Hotspot is running on +// Loads .dll/.so and +// in case of error it checks if .dll/.so was built for the +// same architecture as Hotspot is running on #ifdef __APPLE__ void * os::dll_load(const char *filename, char *ebuf, int ebuflen) { @@ -2292,7 +1536,6 @@ static bool _print_ascii_file(const char* filename, outputStream* st) { void os::print_dll_info(outputStream *st) { st->print_cr("Dynamic libraries:"); -#ifdef _ALLBSD_SOURCE #ifdef RTLD_DI_LINKMAP Dl_info dli; void *handle; @@ -2336,16 +1579,6 @@ void os::print_dll_info(outputStream *st) { #else st->print_cr("Error: Cannot print dynamic libraries."); #endif -#else - char fname[32]; - pid_t pid = os::Bsd::gettid(); - - jio_snprintf(fname, sizeof(fname), "/proc/%d/maps", pid); - - if (!_print_ascii_file(fname, st)) { - st->print("Can not get library information for pid = %d\n", pid); - } -#endif } void os::print_os_info_brief(outputStream* st) { @@ -2374,22 +1607,10 @@ void os::print_memory_info(outputStream* st) { st->print("Memory:"); st->print(" %dk page", os::vm_page_size()>>10); -#ifndef _ALLBSD_SOURCE - // values in struct sysinfo are "unsigned long" - struct sysinfo si; - sysinfo(&si); -#endif - st->print(", physical " UINT64_FORMAT "k", os::physical_memory() >> 10); st->print("(" UINT64_FORMAT "k free)", os::available_memory() >> 10); -#ifndef _ALLBSD_SOURCE - st->print(", swap " UINT64_FORMAT "k", - ((jlong)si.totalswap * si.mem_unit) >> 10); - st->print("(" UINT64_FORMAT "k free)", - ((jlong)si.freeswap * si.mem_unit) >> 10); -#endif st->cr(); // meminfo @@ -2786,42 +2007,13 @@ bool os::pd_commit_memory(char* addr, size_t size, bool exec) { #endif } -#ifndef _ALLBSD_SOURCE -// Define MAP_HUGETLB here so we can build HotSpot on old systems. -#ifndef MAP_HUGETLB -#define MAP_HUGETLB 0x40000 -#endif - -// Define MADV_HUGEPAGE here so we can build HotSpot on old systems. -#ifndef MADV_HUGEPAGE -#define MADV_HUGEPAGE 14 -#endif -#endif bool os::pd_commit_memory(char* addr, size_t size, size_t alignment_hint, bool exec) { -#ifndef _ALLBSD_SOURCE - if (UseHugeTLBFS && alignment_hint > (size_t)vm_page_size()) { - int prot = exec ? PROT_READ|PROT_WRITE|PROT_EXEC : PROT_READ|PROT_WRITE; - uintptr_t res = - (uintptr_t) ::mmap(addr, size, prot, - MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS|MAP_HUGETLB, - -1, 0); - return res != (uintptr_t) MAP_FAILED; - } -#endif - return commit_memory(addr, size, exec); } void os::pd_realign_memory(char *addr, size_t bytes, size_t alignment_hint) { -#ifndef _ALLBSD_SOURCE - if (UseHugeTLBFS && alignment_hint > (size_t)vm_page_size()) { - // We don't check the return value: madvise(MADV_HUGEPAGE) may not - // be supported or the memory may already be backed by huge pages. - ::madvise(addr, bytes, MADV_HUGEPAGE); - } -#endif } void os::pd_free_memory(char *addr, size_t bytes, size_t alignment_hint) { @@ -2860,111 +2052,6 @@ char *os::scan_pages(char *start, char* end, page_info* page_expected, page_info return end; } -#ifndef _ALLBSD_SOURCE -// Something to do with the numa-aware allocator needs these symbols -extern "C" JNIEXPORT void numa_warn(int number, char *where, ...) { } -extern "C" JNIEXPORT void numa_error(char *where) { } -extern "C" JNIEXPORT int fork1() { return fork(); } - - -// If we are running with libnuma version > 2, then we should -// be trying to use symbols with versions 1.1 -// If we are running with earlier version, which did not have symbol versions, -// we should use the base version. -void* os::Bsd::libnuma_dlsym(void* handle, const char *name) { - void *f = dlvsym(handle, name, "libnuma_1.1"); - if (f == NULL) { - f = dlsym(handle, name); - } - return f; -} - -bool os::Bsd::libnuma_init() { - // sched_getcpu() should be in libc. - set_sched_getcpu(CAST_TO_FN_PTR(sched_getcpu_func_t, - dlsym(RTLD_DEFAULT, "sched_getcpu"))); - - if (sched_getcpu() != -1) { // Does it work? - void *handle = dlopen("libnuma.so.1", RTLD_LAZY); - if (handle != NULL) { - set_numa_node_to_cpus(CAST_TO_FN_PTR(numa_node_to_cpus_func_t, - libnuma_dlsym(handle, "numa_node_to_cpus"))); - set_numa_max_node(CAST_TO_FN_PTR(numa_max_node_func_t, - libnuma_dlsym(handle, "numa_max_node"))); - set_numa_available(CAST_TO_FN_PTR(numa_available_func_t, - libnuma_dlsym(handle, "numa_available"))); - set_numa_tonode_memory(CAST_TO_FN_PTR(numa_tonode_memory_func_t, - libnuma_dlsym(handle, "numa_tonode_memory"))); - set_numa_interleave_memory(CAST_TO_FN_PTR(numa_interleave_memory_func_t, - libnuma_dlsym(handle, "numa_interleave_memory"))); - - - if (numa_available() != -1) { - set_numa_all_nodes((unsigned long*)libnuma_dlsym(handle, "numa_all_nodes")); - // Create a cpu -> node mapping - _cpu_to_node = new (ResourceObj::C_HEAP) GrowableArray(0, true); - rebuild_cpu_to_node_map(); - return true; - } - } - } - return false; -} - -// rebuild_cpu_to_node_map() constructs a table mapping cpud id to node id. -// The table is later used in get_node_by_cpu(). -void os::Bsd::rebuild_cpu_to_node_map() { - const size_t NCPUS = 32768; // Since the buffer size computation is very obscure - // in libnuma (possible values are starting from 16, - // and continuing up with every other power of 2, but less - // than the maximum number of CPUs supported by kernel), and - // is a subject to change (in libnuma version 2 the requirements - // are more reasonable) we'll just hardcode the number they use - // in the library. - const size_t BitsPerCLong = sizeof(long) * CHAR_BIT; - - size_t cpu_num = os::active_processor_count(); - size_t cpu_map_size = NCPUS / BitsPerCLong; - size_t cpu_map_valid_size = - MIN2((cpu_num + BitsPerCLong - 1) / BitsPerCLong, cpu_map_size); - - cpu_to_node()->clear(); - cpu_to_node()->at_grow(cpu_num - 1); - size_t node_num = numa_get_groups_num(); - - unsigned long *cpu_map = NEW_C_HEAP_ARRAY(unsigned long, cpu_map_size); - for (size_t i = 0; i < node_num; i++) { - if (numa_node_to_cpus(i, cpu_map, cpu_map_size * sizeof(unsigned long)) != -1) { - for (size_t j = 0; j < cpu_map_valid_size; j++) { - if (cpu_map[j] != 0) { - for (size_t k = 0; k < BitsPerCLong; k++) { - if (cpu_map[j] & (1UL << k)) { - cpu_to_node()->at_put(j * BitsPerCLong + k, i); - } - } - } - } - } - } - FREE_C_HEAP_ARRAY(unsigned long, cpu_map); -} - -int os::Bsd::get_node_by_cpu(int cpu_id) { - if (cpu_to_node() != NULL && cpu_id >= 0 && cpu_id < cpu_to_node()->length()) { - return cpu_to_node()->at(cpu_id); - } - return -1; -} - -GrowableArray* os::Bsd::_cpu_to_node; -os::Bsd::sched_getcpu_func_t os::Bsd::_sched_getcpu; -os::Bsd::numa_node_to_cpus_func_t os::Bsd::_numa_node_to_cpus; -os::Bsd::numa_max_node_func_t os::Bsd::_numa_max_node; -os::Bsd::numa_available_func_t os::Bsd::_numa_available; -os::Bsd::numa_tonode_memory_func_t os::Bsd::_numa_tonode_memory; -os::Bsd::numa_interleave_memory_func_t os::Bsd::_numa_interleave_memory; -unsigned long* os::Bsd::_numa_all_nodes; -#endif bool os::pd_uncommit_memory(char* addr, size_t size) { #ifdef __OpenBSD__ @@ -3084,42 +2171,7 @@ bool os::unguard_memory(char* addr, size_t size) { } bool os::Bsd::hugetlbfs_sanity_check(bool warn, size_t page_size) { - bool result = false; -#ifndef _ALLBSD_SOURCE - void *p = mmap (NULL, page_size, PROT_READ|PROT_WRITE, - MAP_ANONYMOUS|MAP_PRIVATE|MAP_HUGETLB, - -1, 0); - - if (p != (void *) -1) { - // We don't know if this really is a huge page or not. - FILE *fp = fopen("/proc/self/maps", "r"); - if (fp) { - while (!feof(fp)) { - char chars[257]; - long x = 0; - if (fgets(chars, sizeof(chars), fp)) { - if (sscanf(chars, "%lx-%*x", &x) == 1 - && x == (long)p) { - if (strstr (chars, "hugepage")) { - result = true; - break; - } - } - } - } - fclose(fp); - } - munmap (p, page_size); - if (result) - return true; - } - - if (warn) { - warning("HugeTLBFS is not supported by the operating system."); - } -#endif - - return result; + return false; } /* @@ -3164,92 +2216,8 @@ static void set_coredump_filter(void) { static size_t _large_page_size = 0; void os::large_page_init() { -#ifndef _ALLBSD_SOURCE - if (!UseLargePages) { - UseHugeTLBFS = false; - UseSHM = false; - return; - } - - if (FLAG_IS_DEFAULT(UseHugeTLBFS) && FLAG_IS_DEFAULT(UseSHM)) { - // If UseLargePages is specified on the command line try both methods, - // if it's default, then try only HugeTLBFS. - if (FLAG_IS_DEFAULT(UseLargePages)) { - UseHugeTLBFS = true; - } else { - UseHugeTLBFS = UseSHM = true; - } - } - - if (LargePageSizeInBytes) { - _large_page_size = LargePageSizeInBytes; - } else { - // large_page_size on Bsd is used to round up heap size. x86 uses either - // 2M or 4M page, depending on whether PAE (Physical Address Extensions) - // mode is enabled. AMD64/EM64T uses 2M page in 64bit mode. IA64 can use - // page as large as 256M. - // - // Here we try to figure out page size by parsing /proc/meminfo and looking - // for a line with the following format: - // Hugepagesize: 2048 kB - // - // If we can't determine the value (e.g. /proc is not mounted, or the text - // format has been changed), we'll use the largest page size supported by - // the processor. - -#ifndef ZERO - _large_page_size = IA32_ONLY(4 * M) AMD64_ONLY(2 * M) IA64_ONLY(256 * M) SPARC_ONLY(4 * M) - ARM_ONLY(2 * M) PPC_ONLY(4 * M); -#endif // ZERO - - FILE *fp = fopen("/proc/meminfo", "r"); - if (fp) { - while (!feof(fp)) { - int x = 0; - char buf[16]; - if (fscanf(fp, "Hugepagesize: %d", &x) == 1) { - if (x && fgets(buf, sizeof(buf), fp) && strcmp(buf, " kB\n") == 0) { - _large_page_size = x * K; - break; - } - } else { - // skip to next line - for (;;) { - int ch = fgetc(fp); - if (ch == EOF || ch == (int)'\n') break; - } - } - } - fclose(fp); - } - } - - // print a warning if any large page related flag is specified on command line - bool warn_on_failure = !FLAG_IS_DEFAULT(UseHugeTLBFS); - - const size_t default_page_size = (size_t)Bsd::page_size(); - if (_large_page_size > default_page_size) { - _page_sizes[0] = _large_page_size; - _page_sizes[1] = default_page_size; - _page_sizes[2] = 0; - } - UseHugeTLBFS = UseHugeTLBFS && - Bsd::hugetlbfs_sanity_check(warn_on_failure, _large_page_size); - - if (UseHugeTLBFS) - UseSHM = false; - - UseLargePages = UseHugeTLBFS || UseSHM; - - set_coredump_filter(); -#endif } -#ifndef _ALLBSD_SOURCE -#ifndef SHM_HUGETLB -#define SHM_HUGETLB 04000 -#endif -#endif char* os::reserve_memory_special(size_t bytes, char* req_addr, bool exec) { // "exec" is passed in but not used. Creating the shared image for @@ -3267,11 +2235,7 @@ char* os::reserve_memory_special(size_t bytes, char* req_addr, bool exec) { // Create a large shared memory region to attach to based on size. // Currently, size is the total size of the heap -#ifndef _ALLBSD_SOURCE - int shmid = shmget(key, bytes, SHM_HUGETLB|IPC_CREAT|SHM_R|SHM_W); -#else int shmid = shmget(key, bytes, IPC_CREAT|SHM_R|SHM_W); -#endif if (shmid == -1) { // Possible reasons for shmget failure: // 1. shmmax is too small for Java heap. @@ -3558,7 +2522,7 @@ void os::loop_breaker(int attempts) { // this reason, the code should not be used as default (ThreadPriorityPolicy=0). // It is only used when ThreadPriorityPolicy=1 and requires root privilege. -#if defined(_ALLBSD_SOURCE) && !defined(__APPLE__) +#if !defined(__APPLE__) int os::java_to_os_priority[CriticalPriority + 1] = { 19, // 0 Entry should never be used @@ -3578,7 +2542,7 @@ int os::java_to_os_priority[CriticalPriority + 1] = { 31 // 11 CriticalPriority }; -#elif defined(__APPLE__) +#else /* Using Mach high-level priority assignments */ int os::java_to_os_priority[CriticalPriority + 1] = { 0, // 0 Entry should never be used (MINPRI_USER) @@ -3599,26 +2563,6 @@ int os::java_to_os_priority[CriticalPriority + 1] = { 36 // 11 CriticalPriority }; -#else -int os::java_to_os_priority[CriticalPriority + 1] = { - 19, // 0 Entry should never be used - - 4, // 1 MinPriority - 3, // 2 - 2, // 3 - - 1, // 4 - 0, // 5 NormPriority - -1, // 6 - - -2, // 7 - -3, // 8 - -4, // 9 NearMaxPriority - - -5, // 10 MaxPriority - - -5 // 11 CriticalPriority -}; #endif static int prio_init() { @@ -4179,22 +3123,6 @@ void os::Bsd::install_signal_handlers() { } } -#ifndef _ALLBSD_SOURCE -// This is the fastest way to get thread cpu time on Bsd. -// Returns cpu time (user+sys) for any thread, not only for current. -// POSIX compliant clocks are implemented in the kernels 2.6.16+. -// It might work on 2.6.10+ with a special kernel/glibc patch. -// For reference, please, see IEEE Std 1003.1-2004: -// http://www.unix.org/single_unix_specification - -jlong os::Bsd::fast_thread_cpu_time(clockid_t clockid) { - struct timespec tp; - int rc = os::Bsd::clock_gettime(clockid, &tp); - assert(rc == 0, "clock_gettime is expected to return 0 code"); - - return (tp.tv_sec * NANOSECS_PER_SEC) + tp.tv_nsec; -} -#endif ///// // glibc on Bsd platform uses non-documented flag @@ -4458,10 +3386,6 @@ extern "C" { // this is called _after_ the global arguments have been parsed jint os::init_2(void) { -#ifndef _ALLBSD_SOURCE - Bsd::fast_thread_clock_init(); -#endif - // Allocate a single page and mark it as readable for safepoint polling address polling_page = (address) ::mmap(NULL, Bsd::page_size(), PROT_READ, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0); guarantee( polling_page != MAP_FAILED, "os::init_2: failed to allocate polling page" ); @@ -4518,48 +3442,6 @@ jint os::init_2(void) JavaThread::set_stack_size_at_create(round_to(threadStackSizeInBytes, vm_page_size())); -#ifndef _ALLBSD_SOURCE - Bsd::capture_initial_stack(JavaThread::stack_size_at_create()); - - Bsd::libpthread_init(); - if (PrintMiscellaneous && (Verbose || WizardMode)) { - tty->print_cr("[HotSpot is running with %s, %s(%s)]\n", - Bsd::glibc_version(), Bsd::libpthread_version(), - Bsd::is_floating_stack() ? "floating stack" : "fixed stack"); - } - - if (UseNUMA) { - if (!Bsd::libnuma_init()) { - UseNUMA = false; - } else { - if ((Bsd::numa_max_node() < 1)) { - // There's only one node(they start from 0), disable NUMA. - UseNUMA = false; - } - } - // With SHM large pages we cannot uncommit a page, so there's not way - // we can make the adaptive lgrp chunk resizing work. If the user specified - // both UseNUMA and UseLargePages (or UseSHM) on the command line - warn and - // disable adaptive resizing. - if (UseNUMA && UseLargePages && UseSHM) { - if (!FLAG_IS_DEFAULT(UseNUMA)) { - if (FLAG_IS_DEFAULT(UseLargePages) && FLAG_IS_DEFAULT(UseSHM)) { - UseLargePages = false; - } else { - warning("UseNUMA is not fully compatible with SHM large pages, disabling adaptive resizing"); - UseAdaptiveSizePolicy = false; - UseAdaptiveNUMAChunkSizing = false; - } - } else { - UseNUMA = false; - } - } - if (!UseNUMA && ForceNUMA) { - UseNUMA = true; - } - } -#endif - if (MaxFDLimit) { // set the number of file descriptors to max. print out error // if getrlimit/setrlimit fails but continue regardless. @@ -4586,11 +3468,6 @@ jint os::init_2(void) } } -#ifndef _ALLBSD_SOURCE - // Initialize lock used to serialize thread creation (see os::create_thread) - Bsd::set_createThread_lock(new Mutex(Mutex::leaf, "createThread_lock", false)); -#endif - // at-exit methods are called in the reverse order of their registration. // atexit functions are called on return from main or as a result of a // call to exit(3C). There can be only 32 of these functions registered @@ -4641,15 +3518,7 @@ void os::make_polling_page_readable(void) { }; int os::active_processor_count() { -#ifdef _ALLBSD_SOURCE return _processor_count; -#else - // Bsd doesn't yet have a (official) notion of processor sets, - // so just return the number of online processors. - int online_cpus = ::sysconf(_SC_NPROCESSORS_ONLN); - assert(online_cpus > 0 && online_cpus <= processor_count(), "sanity check"); - return online_cpus; -#endif } void os::set_native_thread_name(const char *name) { @@ -4703,25 +3572,7 @@ ExtendedPC os::get_thread_pc(Thread* thread) { int os::Bsd::safe_cond_timedwait(pthread_cond_t *_cond, pthread_mutex_t *_mutex, const struct timespec *_abstime) { -#ifdef _ALLBSD_SOURCE return pthread_cond_timedwait(_cond, _mutex, _abstime); -#else - if (is_NPTL()) { - return pthread_cond_timedwait(_cond, _mutex, _abstime); - } else { -#ifndef IA64 - // 6292965: BsdThreads pthread_cond_timedwait() resets FPU control - // word back to default 64bit precision if condvar is signaled. Java - // wants 53bit precision. Save and restore current value. - int fpu = get_fpu_control_word(); -#endif // IA64 - int status = pthread_cond_timedwait(_cond, _mutex, _abstime); -#ifndef IA64 - set_fpu_control_word(fpu); -#endif // IA64 - return status; - } -#endif } //////////////////////////////////////////////////////////////////////////////// @@ -5041,20 +3892,6 @@ bool os::pd_unmap_memory(char* addr, size_t bytes) { return munmap(addr, bytes) == 0; } -#ifndef _ALLBSD_SOURCE -static jlong slow_thread_cpu_time(Thread *thread, bool user_sys_cpu_time); - -static clockid_t thread_cpu_clockid(Thread* thread) { - pthread_t tid = thread->osthread()->pthread_id(); - clockid_t clockid; - - // Get thread clockid - int rc = os::Bsd::pthread_getcpuclockid(tid, &clockid); - assert(rc == 0, "pthread_getcpuclockid is expected to return 0 code"); - return clockid; -} -#endif - // current_thread_cpu_time(bool) and thread_cpu_time(Thread*, bool) // are used by JVM M&M and JVMTI to get user+sys or user CPU time // of a thread. @@ -5065,36 +3902,15 @@ static clockid_t thread_cpu_clockid(Thread* thread) { jlong os::current_thread_cpu_time() { #ifdef __APPLE__ return os::thread_cpu_time(Thread::current(), true /* user + sys */); -#elif !defined(_ALLBSD_SOURCE) - if (os::Bsd::supports_fast_thread_cpu_time()) { - return os::Bsd::fast_thread_cpu_time(CLOCK_THREAD_CPUTIME_ID); - } else { - // return user + sys since the cost is the same - return slow_thread_cpu_time(Thread::current(), true /* user + sys */); - } #endif } jlong os::thread_cpu_time(Thread* thread) { -#ifndef _ALLBSD_SOURCE - // consistent with what current_thread_cpu_time() returns - if (os::Bsd::supports_fast_thread_cpu_time()) { - return os::Bsd::fast_thread_cpu_time(thread_cpu_clockid(thread)); - } else { - return slow_thread_cpu_time(thread, true /* user + sys */); - } -#endif } jlong os::current_thread_cpu_time(bool user_sys_cpu_time) { #ifdef __APPLE__ return os::thread_cpu_time(Thread::current(), user_sys_cpu_time); -#elif !defined(_ALLBSD_SOURCE) - if (user_sys_cpu_time && os::Bsd::supports_fast_thread_cpu_time()) { - return os::Bsd::fast_thread_cpu_time(CLOCK_THREAD_CPUTIME_ID); - } else { - return slow_thread_cpu_time(Thread::current(), user_sys_cpu_time); - } #endif } @@ -5118,106 +3934,9 @@ jlong os::thread_cpu_time(Thread *thread, bool user_sys_cpu_time) { } else { return ((jlong)tinfo.user_time.seconds * 1000000000) + ((jlong)tinfo.user_time.microseconds * (jlong)1000); } -#elif !defined(_ALLBSD_SOURCE) - if (user_sys_cpu_time && os::Bsd::supports_fast_thread_cpu_time()) { - return os::Bsd::fast_thread_cpu_time(thread_cpu_clockid(thread)); - } else { - return slow_thread_cpu_time(thread, user_sys_cpu_time); - } #endif } -#ifndef _ALLBSD_SOURCE -// -// -1 on error. -// - -static jlong slow_thread_cpu_time(Thread *thread, bool user_sys_cpu_time) { - static bool proc_pid_cpu_avail = true; - static bool proc_task_unchecked = true; - static const char *proc_stat_path = "/proc/%d/stat"; - pid_t tid = thread->osthread()->thread_id(); - int i; - char *s; - char stat[2048]; - int statlen; - char proc_name[64]; - int count; - long sys_time, user_time; - char string[64]; - char cdummy; - int idummy; - long ldummy; - FILE *fp; - - // We first try accessing /proc//cpu since this is faster to - // process. If this file is not present (bsd kernels 2.5 and above) - // then we open /proc//stat. - if ( proc_pid_cpu_avail ) { - sprintf(proc_name, "/proc/%d/cpu", tid); - fp = fopen(proc_name, "r"); - if ( fp != NULL ) { - count = fscanf( fp, "%s %lu %lu\n", string, &user_time, &sys_time); - fclose(fp); - if ( count != 3 ) return -1; - - if (user_sys_cpu_time) { - return ((jlong)sys_time + (jlong)user_time) * (1000000000 / clock_tics_per_sec); - } else { - return (jlong)user_time * (1000000000 / clock_tics_per_sec); - } - } - else proc_pid_cpu_avail = false; - } - - // The /proc//stat aggregates per-process usage on - // new Bsd kernels 2.6+ where NPTL is supported. - // The /proc/self/task//stat still has the per-thread usage. - // See bug 6328462. - // There can be no directory /proc/self/task on kernels 2.4 with NPTL - // and possibly in some other cases, so we check its availability. - if (proc_task_unchecked && os::Bsd::is_NPTL()) { - // This is executed only once - proc_task_unchecked = false; - fp = fopen("/proc/self/task", "r"); - if (fp != NULL) { - proc_stat_path = "/proc/self/task/%d/stat"; - fclose(fp); - } - } - - sprintf(proc_name, proc_stat_path, tid); - fp = fopen(proc_name, "r"); - if ( fp == NULL ) return -1; - statlen = fread(stat, 1, 2047, fp); - stat[statlen] = '\0'; - fclose(fp); - - // Skip pid and the command string. Note that we could be dealing with - // weird command names, e.g. user could decide to rename java launcher - // to "java 1.4.2 :)", then the stat file would look like - // 1234 (java 1.4.2 :)) R ... ... - // We don't really need to know the command string, just find the last - // occurrence of ")" and then start parsing from there. See bug 4726580. - s = strrchr(stat, ')'); - i = 0; - if (s == NULL ) return -1; - - // Skip blank chars - do s++; while (isspace(*s)); - - count = sscanf(s,"%c %d %d %d %d %d %lu %lu %lu %lu %lu %lu %lu", - &cdummy, &idummy, &idummy, &idummy, &idummy, &idummy, - &ldummy, &ldummy, &ldummy, &ldummy, &ldummy, - &user_time, &sys_time); - if ( count != 13 ) return -1; - if (user_sys_cpu_time) { - return ((jlong)sys_time + (jlong)user_time) * (1000000000 / clock_tics_per_sec); - } else { - return (jlong)user_time * (1000000000 / clock_tics_per_sec); - } -} -#endif void os::current_thread_cpu_time_info(jvmtiTimerInfo *info_ptr) { info_ptr->max_value = ALL_64_BITS; // will not wrap in less than 64 bits @@ -5236,10 +3955,8 @@ void os::thread_cpu_time_info(jvmtiTimerInfo *info_ptr) { bool os::is_thread_cpu_time_supported() { #ifdef __APPLE__ return true; -#elif defined(_ALLBSD_SOURCE) - return false; #else - return true; + return false; #endif } diff --git a/hotspot/src/os/bsd/vm/os_bsd.hpp b/hotspot/src/os/bsd/vm/os_bsd.hpp index d9ab28afcc4..ebdbdc22a03 100644 --- a/hotspot/src/os/bsd/vm/os_bsd.hpp +++ b/hotspot/src/os/bsd/vm/os_bsd.hpp @@ -56,19 +56,6 @@ class Bsd { static int sigflags[MAXSIGNUM]; static int (*_clock_gettime)(clockid_t, struct timespec *); -#ifndef _ALLBSD_SOURCE - static int (*_pthread_getcpuclockid)(pthread_t, clockid_t *); - - static address _initial_thread_stack_bottom; - static uintptr_t _initial_thread_stack_size; - - static const char *_glibc_version; - static const char *_libpthread_version; - - static bool _is_floating_stack; - static bool _is_NPTL; - static bool _supports_fast_thread_cpu_time; -#endif static GrowableArray* _cpu_to_node; @@ -76,28 +63,14 @@ class Bsd { static julong _physical_memory; static pthread_t _main_thread; -#ifndef _ALLBSD_SOURCE - static Mutex* _createThread_lock; -#endif static int _page_size; static julong available_memory(); static julong physical_memory() { return _physical_memory; } static void initialize_system_info(); -#ifndef _ALLBSD_SOURCE - static void set_glibc_version(const char *s) { _glibc_version = s; } - static void set_libpthread_version(const char *s) { _libpthread_version = s; } -#endif - static bool supports_variable_stack_size(); -#ifndef _ALLBSD_SOURCE - static void set_is_NPTL() { _is_NPTL = true; } - static void set_is_BsdThreads() { _is_NPTL = false; } - static void set_is_floating_stack() { _is_floating_stack = true; } -#endif - static void rebuild_cpu_to_node_map(); static GrowableArray* cpu_to_node() { return _cpu_to_node; } @@ -106,25 +79,10 @@ class Bsd { public: static void init_thread_fpu_state(); -#ifndef _ALLBSD_SOURCE - static int get_fpu_control_word(); - static void set_fpu_control_word(int fpu_control); -#endif static pthread_t main_thread(void) { return _main_thread; } -#ifndef _ALLBSD_SOURCE - // returns kernel thread id (similar to LWP id on Solaris), which can be - // used to access /proc - static pid_t gettid(); - static void set_createThread_lock(Mutex* lk) { _createThread_lock = lk; } - static Mutex* createThread_lock(void) { return _createThread_lock; } -#endif static void hotspot_sigmask(Thread* thread); -#ifndef _ALLBSD_SOURCE - static address initial_thread_stack_bottom(void) { return _initial_thread_stack_bottom; } - static uintptr_t initial_thread_stack_size(void) { return _initial_thread_stack_size; } -#endif static bool is_initial_thread(void); static int page_size(void) { return _page_size; } @@ -161,23 +119,6 @@ class Bsd { static struct sigaction *get_chained_signal_action(int sig); static bool chained_handler(int sig, siginfo_t* siginfo, void* context); -#ifndef _ALLBSD_SOURCE - // GNU libc and libpthread version strings - static const char *glibc_version() { return _glibc_version; } - static const char *libpthread_version() { return _libpthread_version; } - - // NPTL or BsdThreads? - static bool is_BsdThreads() { return !_is_NPTL; } - static bool is_NPTL() { return _is_NPTL; } - - // NPTL is always floating stack. BsdThreads could be using floating - // stack or fixed stack. - static bool is_floating_stack() { return _is_floating_stack; } - - static void libpthread_init(); - static bool libnuma_init(); - static void* libnuma_dlsym(void* handle, const char* name); -#endif // Minimum stack size a thread can be created with (allowing // the VM to completely create the thread and enter user code) static size_t min_stack_allowed; @@ -186,22 +127,9 @@ class Bsd { static size_t default_stack_size(os::ThreadType thr_type); static size_t default_guard_size(os::ThreadType thr_type); -#ifndef _ALLBSD_SOURCE - static void capture_initial_stack(size_t max_size); - - // Stack overflow handling - static bool manually_expand_stack(JavaThread * t, address addr); - static int max_register_window_saves_before_flushing(); -#endif - // Real-time clock functions static void clock_init(void); -#ifndef _ALLBSD_SOURCE - // fast POSIX clocks support - static void fast_thread_clock_init(void); -#endif - static inline bool supports_monotonic_clock() { return _clock_gettime != NULL; } @@ -210,18 +138,6 @@ class Bsd { return _clock_gettime ? _clock_gettime(clock_id, tp) : -1; } -#ifndef _ALLBSD_SOURCE - static int pthread_getcpuclockid(pthread_t tid, clockid_t *clock_id) { - return _pthread_getcpuclockid ? _pthread_getcpuclockid(tid, clock_id) : -1; - } - - static bool supports_fast_thread_cpu_time() { - return _supports_fast_thread_cpu_time; - } - - static jlong fast_thread_cpu_time(clockid_t clockid); -#endif - // Stack repair handling // none present diff --git a/hotspot/src/os/bsd/vm/perfMemory_bsd.cpp b/hotspot/src/os/bsd/vm/perfMemory_bsd.cpp index 123e6e289bf..cb9dada906b 100644 --- a/hotspot/src/os/bsd/vm/perfMemory_bsd.cpp +++ b/hotspot/src/os/bsd/vm/perfMemory_bsd.cpp @@ -30,6 +30,7 @@ #include "os_bsd.inline.hpp" #include "runtime/handles.inline.hpp" #include "runtime/perfMemory.hpp" +#include "services/memTracker.hpp" #include "utilities/exceptions.hpp" // put OS-includes here @@ -753,6 +754,10 @@ static char* mmap_create_shared(size_t size) { // clear the shared memory region (void)::memset((void*) mapAddress, 0, size); + // it does not go through os api, the operation has to record from here + MemTracker::record_virtual_memory_reserve((address)mapAddress, size, CURRENT_PC); + MemTracker::record_virtual_memory_type((address)mapAddress, mtInternal); + return mapAddress; } @@ -912,6 +917,10 @@ static void mmap_attach_shared(const char* user, int vmid, PerfMemory::PerfMemor "Could not map PerfMemory"); } + // it does not go through os api, the operation has to record from here + MemTracker::record_virtual_memory_reserve((address)mapAddress, size, CURRENT_PC); + MemTracker::record_virtual_memory_type((address)mapAddress, mtInternal); + *addr = mapAddress; *sizep = size; diff --git a/hotspot/src/os/linux/vm/perfMemory_linux.cpp b/hotspot/src/os/linux/vm/perfMemory_linux.cpp index 2adae8d18af..b54c5db14a5 100644 --- a/hotspot/src/os/linux/vm/perfMemory_linux.cpp +++ b/hotspot/src/os/linux/vm/perfMemory_linux.cpp @@ -30,6 +30,7 @@ #include "os_linux.inline.hpp" #include "runtime/handles.inline.hpp" #include "runtime/perfMemory.hpp" +#include "services/memTracker.hpp" #include "utilities/exceptions.hpp" // put OS-includes here @@ -753,6 +754,10 @@ static char* mmap_create_shared(size_t size) { // clear the shared memory region (void)::memset((void*) mapAddress, 0, size); + // it does not go through os api, the operation has to record from here + MemTracker::record_virtual_memory_reserve((address)mapAddress, size, CURRENT_PC); + MemTracker::record_virtual_memory_type((address)mapAddress, mtInternal); + return mapAddress; } @@ -912,6 +917,10 @@ static void mmap_attach_shared(const char* user, int vmid, PerfMemory::PerfMemor "Could not map PerfMemory"); } + // it does not go through os api, the operation has to record from here + MemTracker::record_virtual_memory_reserve((address)mapAddress, size, CURRENT_PC); + MemTracker::record_virtual_memory_type((address)mapAddress, mtInternal); + *addr = mapAddress; *sizep = size; diff --git a/hotspot/src/os/solaris/vm/os_solaris.cpp b/hotspot/src/os/solaris/vm/os_solaris.cpp index 0483dcbfb34..e3415b8d802 100644 --- a/hotspot/src/os/solaris/vm/os_solaris.cpp +++ b/hotspot/src/os/solaris/vm/os_solaris.cpp @@ -55,6 +55,7 @@ #include "runtime/threadCritical.hpp" #include "runtime/timer.hpp" #include "services/attachListener.hpp" +#include "services/memTracker.hpp" #include "services/runtimeService.hpp" #include "thread_solaris.inline.hpp" #include "utilities/decoder.hpp" @@ -3072,11 +3073,12 @@ char* os::pd_attempt_reserve_memory_at(size_t bytes, char* requested_addr) { // Since snv_84, Solaris attempts to honor the address hint - see 5003415. // Give it a try, if the kernel honors the hint we can return immediately. char* addr = Solaris::anon_mmap(requested_addr, bytes, 0, false); + volatile int err = errno; if (addr == requested_addr) { return addr; } else if (addr != NULL) { - unmap_memory(addr, bytes); + pd_unmap_memory(addr, bytes); } if (PrintMiscellaneous && Verbose) { diff --git a/hotspot/src/os/solaris/vm/perfMemory_solaris.cpp b/hotspot/src/os/solaris/vm/perfMemory_solaris.cpp index c24789cbb17..ebbc00b3015 100644 --- a/hotspot/src/os/solaris/vm/perfMemory_solaris.cpp +++ b/hotspot/src/os/solaris/vm/perfMemory_solaris.cpp @@ -30,6 +30,7 @@ #include "os_solaris.inline.hpp" #include "runtime/handles.inline.hpp" #include "runtime/perfMemory.hpp" +#include "services/memTracker.hpp" #include "utilities/exceptions.hpp" // put OS-includes here @@ -768,6 +769,10 @@ static char* mmap_create_shared(size_t size) { // clear the shared memory region (void)::memset((void*) mapAddress, 0, size); + // it does not go through os api, the operation has to record from here + MemTracker::record_virtual_memory_reserve((address)mapAddress, size, CURRENT_PC); + MemTracker::record_virtual_memory_type((address)mapAddress, mtInternal); + return mapAddress; } @@ -927,6 +932,10 @@ static void mmap_attach_shared(const char* user, int vmid, PerfMemory::PerfMemor "Could not map PerfMemory"); } + // it does not go through os api, the operation has to record from here + MemTracker::record_virtual_memory_reserve((address)mapAddress, size, CURRENT_PC); + MemTracker::record_virtual_memory_type((address)mapAddress, mtInternal); + *addr = mapAddress; *sizep = size; diff --git a/hotspot/src/os/windows/vm/os_windows.cpp b/hotspot/src/os/windows/vm/os_windows.cpp index dc31e27a6b7..420368f1010 100644 --- a/hotspot/src/os/windows/vm/os_windows.cpp +++ b/hotspot/src/os/windows/vm/os_windows.cpp @@ -22,7 +22,7 @@ * */ -// Must be at least Windows 2000 or XP to use VectoredExceptions and IsDebuggerPresent +// Must be at least Windows 2000 or XP to use IsDebuggerPresent #define _WIN32_WINNT 0x500 // no precompiled headers @@ -110,10 +110,6 @@ static FILETIME process_exit_time; static FILETIME process_user_time; static FILETIME process_kernel_time; -#ifdef _WIN64 -PVOID topLevelVectoredExceptionHandler = NULL; -#endif - #ifdef _M_IA64 #define __CPU__ ia64 #elif _M_AMD64 @@ -136,12 +132,6 @@ BOOL WINAPI DllMain(HINSTANCE hinst, DWORD reason, LPVOID reserved) { case DLL_PROCESS_DETACH: if(ForceTimeHighResolution) timeEndPeriod(1L); -#ifdef _WIN64 - if (topLevelVectoredExceptionHandler != NULL) { - RemoveVectoredExceptionHandler(topLevelVectoredExceptionHandler); - topLevelVectoredExceptionHandler = NULL; - } -#endif break; default: break; @@ -408,20 +398,14 @@ static unsigned __stdcall java_start(Thread* thread) { } - if (UseVectoredExceptions) { - // If we are using vectored exception we don't need to set a SEH - thread->run(); - } - else { - // Install a win32 structured exception handler around every thread created - // by VM, so VM can genrate error dump when an exception occurred in non- - // Java thread (e.g. VM thread). - __try { - thread->run(); - } __except(topLevelExceptionFilter( - (_EXCEPTION_POINTERS*)_exception_info())) { - // Nothing to do. - } + // Install a win32 structured exception handler around every thread created + // by VM, so VM can genrate error dump when an exception occurred in non- + // Java thread (e.g. VM thread). + __try { + thread->run(); + } __except(topLevelExceptionFilter( + (_EXCEPTION_POINTERS*)_exception_info())) { + // Nothing to do. } // One less thread is executing @@ -2489,16 +2473,6 @@ LONG WINAPI topLevelExceptionFilter(struct _EXCEPTION_POINTERS* exceptionInfo) { } #endif -#ifdef _WIN64 - // Windows will sometimes generate an access violation - // when we call malloc. Since we use VectoredExceptions - // on 64 bit platforms, we see this exception. We must - // pass this exception on so Windows can recover. - // We check to see if the pc of the fault is in NTDLL.DLL - // if so, we pass control on to Windows for handling. - if (UseVectoredExceptions && _addr_in_ntdll(pc)) return EXCEPTION_CONTINUE_SEARCH; -#endif - // Stack overflow or null pointer exception in native code. report_error(t, exception_code, pc, exceptionInfo->ExceptionRecord, exceptionInfo->ContextRecord); @@ -2527,30 +2501,8 @@ LONG WINAPI topLevelExceptionFilter(struct _EXCEPTION_POINTERS* exceptionInfo) { } if (exception_code != EXCEPTION_BREAKPOINT) { -#ifndef _WIN64 report_error(t, exception_code, pc, exceptionInfo->ExceptionRecord, exceptionInfo->ContextRecord); -#else - // Itanium Windows uses a VectoredExceptionHandler - // Which means that C++ programatic exception handlers (try/except) - // will get here. Continue the search for the right except block if - // the exception code is not a fatal code. - switch ( exception_code ) { - case EXCEPTION_ACCESS_VIOLATION: - case EXCEPTION_STACK_OVERFLOW: - case EXCEPTION_ILLEGAL_INSTRUCTION: - case EXCEPTION_ILLEGAL_INSTRUCTION_2: - case EXCEPTION_INT_OVERFLOW: - case EXCEPTION_INT_DIVIDE_BY_ZERO: - case EXCEPTION_UNCAUGHT_CXX_EXCEPTION: - { report_error(t, exception_code, pc, exceptionInfo->ExceptionRecord, - exceptionInfo->ContextRecord); - } - break; - default: - break; - } -#endif } return EXCEPTION_CONTINUE_SEARCH; } @@ -3706,18 +3658,6 @@ jint os::init_2(void) { // Setup Windows Exceptions - // On Itanium systems, Structured Exception Handling does not - // work since stack frames must be walkable by the OS. Since - // much of our code is dynamically generated, and we do not have - // proper unwind .xdata sections, the system simply exits - // rather than delivering the exception. To work around - // this we use VectorExceptions instead. -#ifdef _WIN64 - if (UseVectoredExceptions) { - topLevelVectoredExceptionHandler = AddVectoredExceptionHandler( 1, topLevelExceptionFilter); - } -#endif - // for debugging float code generation bugs if (ForceFloatExceptions) { #ifndef _WIN64 diff --git a/hotspot/src/os/windows/vm/perfMemory_windows.cpp b/hotspot/src/os/windows/vm/perfMemory_windows.cpp index 2c75539d86a..061c9d84a82 100644 --- a/hotspot/src/os/windows/vm/perfMemory_windows.cpp +++ b/hotspot/src/os/windows/vm/perfMemory_windows.cpp @@ -30,6 +30,7 @@ #include "os_windows.inline.hpp" #include "runtime/handles.inline.hpp" #include "runtime/perfMemory.hpp" +#include "services/memTracker.hpp" #include "utilities/exceptions.hpp" #include @@ -1496,6 +1497,10 @@ static char* mapping_create_shared(size_t size) { // clear the shared memory region (void)memset(mapAddress, '\0', size); + // it does not go through os api, the operation has to record from here + MemTracker::record_virtual_memory_reserve((address)mapAddress, size, CURRENT_PC); + MemTracker::record_virtual_memory_type((address)mapAddress, mtInternal); + return (char*) mapAddress; } @@ -1672,6 +1677,11 @@ static void open_file_mapping(const char* user, int vmid, "Could not map PerfMemory"); } + // it does not go through os api, the operation has to record from here + MemTracker::record_virtual_memory_reserve((address)mapAddress, size, CURRENT_PC); + MemTracker::record_virtual_memory_type((address)mapAddress, mtInternal); + + *addrp = (char*)mapAddress; *sizep = size; @@ -1824,6 +1834,8 @@ void PerfMemory::detach(char* addr, size_t bytes, TRAPS) { } remove_file_mapping(addr); + // it does not go through os api, the operation has to record from here + MemTracker::record_virtual_memory_release((address)addr, bytes); } char* PerfMemory::backing_store_filename() { diff --git a/hotspot/src/os_cpu/bsd_x86/vm/bytes_bsd_x86.inline.hpp b/hotspot/src/os_cpu/bsd_x86/vm/bytes_bsd_x86.inline.hpp index 4fe770a0e6e..c2256d56fd8 100644 --- a/hotspot/src/os_cpu/bsd_x86/vm/bytes_bsd_x86.inline.hpp +++ b/hotspot/src/os_cpu/bsd_x86/vm/bytes_bsd_x86.inline.hpp @@ -25,10 +25,6 @@ #ifndef OS_CPU_BSD_X86_VM_BYTES_BSD_X86_INLINE_HPP #define OS_CPU_BSD_X86_VM_BYTES_BSD_X86_INLINE_HPP -#ifndef _ALLBSD_SOURCE -#include -#endif - #ifdef __APPLE__ #include #endif diff --git a/hotspot/src/os_cpu/bsd_x86/vm/globals_bsd_x86.hpp b/hotspot/src/os_cpu/bsd_x86/vm/globals_bsd_x86.hpp index 5a19fed3f58..3a8d42ab68e 100644 --- a/hotspot/src/os_cpu/bsd_x86/vm/globals_bsd_x86.hpp +++ b/hotspot/src/os_cpu/bsd_x86/vm/globals_bsd_x86.hpp @@ -48,7 +48,5 @@ define_pd_global(uintx, JVMInvokeMethodSlack, 8192); // Used on 64 bit platforms for UseCompressedOops base address or CDS define_pd_global(uintx, HeapBaseMinAddress, 2*G); -// Only used on 64 bit Windows platforms -define_pd_global(bool, UseVectoredExceptions, false); #endif // OS_CPU_BSD_X86_VM_GLOBALS_BSD_X86_HPP diff --git a/hotspot/src/os_cpu/bsd_x86/vm/os_bsd_x86.cpp b/hotspot/src/os_cpu/bsd_x86/vm/os_bsd_x86.cpp index b7b3e4c726f..49ea265bac8 100644 --- a/hotspot/src/os_cpu/bsd_x86/vm/os_bsd_x86.cpp +++ b/hotspot/src/os_cpu/bsd_x86/vm/os_bsd_x86.cpp @@ -76,7 +76,7 @@ # include #endif -#if defined(_ALLBSD_SOURCE) && !defined(__APPLE__) && !defined(__NetBSD__) +#if !defined(__APPLE__) && !defined(__NetBSD__) # include #endif @@ -489,23 +489,6 @@ JVM_handle_bsd_signal(int sig, // to handle_unexpected_exception way down below. thread->disable_stack_red_zone(); tty->print_raw_cr("An irrecoverable stack overflow has occurred."); -#ifndef _ALLBSD_SOURCE - } else { - // Accessing stack address below sp may cause SEGV if current - // thread has MAP_GROWSDOWN stack. This should only happen when - // current thread was created by user code with MAP_GROWSDOWN flag - // and then attached to VM. See notes in os_bsd.cpp. - if (thread->osthread()->expanding_stack() == 0) { - thread->osthread()->set_expanding_stack(); - if (os::Bsd::manually_expand_stack(thread, addr)) { - thread->osthread()->clear_expanding_stack(); - return 1; - } - thread->osthread()->clear_expanding_stack(); - } else { - fatal("recursive segv. expanding stack."); - } -#endif } } } @@ -744,61 +727,21 @@ JVM_handle_bsd_signal(int sig, ShouldNotReachHere(); } -#ifdef _ALLBSD_SOURCE // From solaris_i486.s ported to bsd_i486.s extern "C" void fixcw(); -#endif void os::Bsd::init_thread_fpu_state(void) { #ifndef AMD64 -# ifdef _ALLBSD_SOURCE // Set fpu to 53 bit precision. This happens too early to use a stub. fixcw(); -# else - // set fpu to 53 bit precision - set_fpu_control_word(0x27f); -# endif #endif // !AMD64 } -#ifndef _ALLBSD_SOURCE -int os::Bsd::get_fpu_control_word(void) { -#ifdef AMD64 - return 0; -#else - int fpu_control; - _FPU_GETCW(fpu_control); - return fpu_control & 0xffff; -#endif // AMD64 -} - -void os::Bsd::set_fpu_control_word(int fpu_control) { -#ifndef AMD64 - _FPU_SETCW(fpu_control); -#endif // !AMD64 -} -#endif // Check that the bsd kernel version is 2.4 or higher since earlier // versions do not support SSE without patches. bool os::supports_sse() { -#if defined(AMD64) || defined(_ALLBSD_SOURCE) return true; -#else - struct utsname uts; - if( uname(&uts) != 0 ) return false; // uname fails? - char *minor_string; - int major = strtol(uts.release,&minor_string,10); - int minor = strtol(minor_string+1,NULL,10); - bool result = (major > 2 || (major==2 && minor >= 4)); -#ifndef PRODUCT - if (PrintMiscellaneous && Verbose) { - tty->print("OS version is %d.%d, which %s support SSE/SSE2\n", - major,minor, result ? "DOES" : "does NOT"); - } -#endif - return result; -#endif // AMD64 } bool os::is_allocatable(size_t bytes) { @@ -836,46 +779,7 @@ size_t os::Bsd::min_stack_allowed = (48 DEBUG_ONLY(+4))*K; #define GET_GS() ({int gs; __asm__ volatile("movw %%gs, %w0":"=q"(gs)); gs&0xffff;}) #endif -#ifdef _ALLBSD_SOURCE bool os::Bsd::supports_variable_stack_size() { return true; } -#else -// Test if pthread library can support variable thread stack size. BsdThreads -// in fixed stack mode allocates 2M fixed slot for each thread. BsdThreads -// in floating stack mode and NPTL support variable stack size. -bool os::Bsd::supports_variable_stack_size() { - if (os::Bsd::is_NPTL()) { - // NPTL, yes - return true; - - } else { - // Note: We can't control default stack size when creating a thread. - // If we use non-default stack size (pthread_attr_setstacksize), both - // floating stack and non-floating stack BsdThreads will return the - // same value. This makes it impossible to implement this function by - // detecting thread stack size directly. - // - // An alternative approach is to check %gs. Fixed-stack BsdThreads - // do not use %gs, so its value is 0. Floating-stack BsdThreads use - // %gs (either as LDT selector or GDT selector, depending on kernel) - // to access thread specific data. - // - // Note that %gs is a reserved glibc register since early 2001, so - // applications are not allowed to change its value (Ulrich Drepper from - // Redhat confirmed that all known offenders have been modified to use - // either %fs or TSD). In the worst case scenario, when VM is embedded in - // a native application that plays with %gs, we might see non-zero %gs - // even BsdThreads is running in fixed stack mode. As the result, we'll - // return true and skip _thread_safety_check(), so we may not be able to - // detect stack-heap collisions. But otherwise it's harmless. - // -#ifdef __GNUC__ - return (GET_GS() != 0); -#else - return false; -#endif - } -} -#endif #endif // AMD64 // return default stack size for thr_type @@ -943,7 +847,7 @@ static void current_stack_region(address * bottom, size_t * size) { *bottom = (address)((char *)ss.ss_sp - ss.ss_size); *size = ss.ss_size; -#elif defined(_ALLBSD_SOURCE) +#else pthread_attr_t attr; int rslt = pthread_attr_init(&attr); @@ -963,33 +867,6 @@ static void current_stack_region(address * bottom, size_t * size) { } pthread_attr_destroy(&attr); -#else - if (os::Bsd::is_initial_thread()) { - // initial thread needs special handling because pthread_getattr_np() - // may return bogus value. - *bottom = os::Bsd::initial_thread_stack_bottom(); - *size = os::Bsd::initial_thread_stack_size(); - } else { - pthread_attr_t attr; - - int rslt = pthread_getattr_np(pthread_self(), &attr); - - // JVM needs to know exact stack location, abort if it fails - if (rslt != 0) { - if (rslt == ENOMEM) { - vm_exit_out_of_memory(0, "pthread_getattr_np"); - } else { - fatal(err_msg("pthread_getattr_np failed with errno = %d", rslt)); - } - } - - if (pthread_attr_getstack(&attr, (void **)bottom, size) != 0) { - fatal("Can not locate current stack attributes!"); - } - - pthread_attr_destroy(&attr); - - } #endif assert(os::current_stack_pointer() >= *bottom && os::current_stack_pointer() < *bottom + *size, "just checking"); diff --git a/hotspot/src/os_cpu/bsd_zero/vm/globals_bsd_zero.hpp b/hotspot/src/os_cpu/bsd_zero/vm/globals_bsd_zero.hpp index 6b1f6af5efc..9c988eb743b 100644 --- a/hotspot/src/os_cpu/bsd_zero/vm/globals_bsd_zero.hpp +++ b/hotspot/src/os_cpu/bsd_zero/vm/globals_bsd_zero.hpp @@ -41,7 +41,6 @@ define_pd_global(intx, VMThreadStackSize, 512); define_pd_global(intx, CompilerThreadStackSize, 0); define_pd_global(uintx, JVMInvokeMethodSlack, 8192); -define_pd_global(bool, UseVectoredExceptions, false); // Used on 64 bit platforms for UseCompressedOops base address or CDS define_pd_global(uintx, HeapBaseMinAddress, 2*G); diff --git a/hotspot/src/os_cpu/bsd_zero/vm/os_bsd_zero.cpp b/hotspot/src/os_cpu/bsd_zero/vm/os_bsd_zero.cpp index 51ea6e3f24e..2262ee2079b 100644 --- a/hotspot/src/os_cpu/bsd_zero/vm/os_bsd_zero.cpp +++ b/hotspot/src/os_cpu/bsd_zero/vm/os_bsd_zero.cpp @@ -23,7 +23,7 @@ * */ -#if defined(_ALLBSD_SOURCE) && !defined(__APPLE__) && !defined(__NetBSD__) +#if !defined(__APPLE__) && !defined(__NetBSD__) #include # include /* For pthread_attr_get_np */ #endif @@ -178,26 +178,6 @@ JVM_handle_bsd_signal(int sig, thread->disable_stack_red_zone(); ShouldNotCallThis(); } -#ifndef _ALLBSD_SOURCE - else { - // Accessing stack address below sp may cause SEGV if - // current thread has MAP_GROWSDOWN stack. This should - // only happen when current thread was created by user - // code with MAP_GROWSDOWN flag and then attached to VM. - // See notes in os_bsd.cpp. - if (thread->osthread()->expanding_stack() == 0) { - thread->osthread()->set_expanding_stack(); - if (os::Bsd::manually_expand_stack(thread, addr)) { - thread->osthread()->clear_expanding_stack(); - return true; - } - thread->osthread()->clear_expanding_stack(); - } - else { - fatal("recursive segv. expanding stack."); - } - } -#endif } } @@ -266,16 +246,6 @@ void os::Bsd::init_thread_fpu_state(void) { // Nothing to do } -#ifndef _ALLBSD_SOURCE -int os::Bsd::get_fpu_control_word() { - ShouldNotCallThis(); -} - -void os::Bsd::set_fpu_control_word(int fpu) { - ShouldNotCallThis(); -} -#endif - bool os::is_allocatable(size_t bytes) { #ifdef _LP64 return true; @@ -339,7 +309,7 @@ static void current_stack_region(address *bottom, size_t *size) { stack_top = (address) ss.ss_sp; stack_bytes = ss.ss_size; stack_bottom = stack_top - stack_bytes; -#elif defined(_ALLBSD_SOURCE) +#else pthread_attr_t attr; int rslt = pthread_attr_init(&attr); @@ -362,67 +332,6 @@ static void current_stack_region(address *bottom, size_t *size) { pthread_attr_destroy(&attr); stack_top = stack_bottom + stack_bytes; -#else /* Linux */ - pthread_attr_t attr; - int res = pthread_getattr_np(pthread_self(), &attr); - if (res != 0) { - if (res == ENOMEM) { - vm_exit_out_of_memory(0, "pthread_getattr_np"); - } - else { - fatal(err_msg("pthread_getattr_np failed with errno = " INT32_FORMAT, - res)); - } - } - - res = pthread_attr_getstack(&attr, (void **) &stack_bottom, &stack_bytes); - if (res != 0) { - fatal(err_msg("pthread_attr_getstack failed with errno = " INT32_FORMAT, - res)); - } - stack_top = stack_bottom + stack_bytes; - - // The block of memory returned by pthread_attr_getstack() includes - // guard pages where present. We need to trim these off. - size_t page_bytes = os::Bsd::page_size(); - assert(((intptr_t) stack_bottom & (page_bytes - 1)) == 0, "unaligned stack"); - - size_t guard_bytes; - res = pthread_attr_getguardsize(&attr, &guard_bytes); - if (res != 0) { - fatal(err_msg( - "pthread_attr_getguardsize failed with errno = " INT32_FORMAT, res)); - } - int guard_pages = align_size_up(guard_bytes, page_bytes) / page_bytes; - assert(guard_bytes == guard_pages * page_bytes, "unaligned guard"); - -#ifdef IA64 - // IA64 has two stacks sharing the same area of memory, a normal - // stack growing downwards and a register stack growing upwards. - // Guard pages, if present, are in the centre. This code splits - // the stack in two even without guard pages, though in theory - // there's nothing to stop us allocating more to the normal stack - // or more to the register stack if one or the other were found - // to grow faster. - int total_pages = align_size_down(stack_bytes, page_bytes) / page_bytes; - stack_bottom += (total_pages - guard_pages) / 2 * page_bytes; -#endif // IA64 - - stack_bottom += guard_bytes; - - pthread_attr_destroy(&attr); - - // The initial thread has a growable stack, and the size reported - // by pthread_attr_getstack is the maximum size it could possibly - // be given what currently mapped. This can be huge, so we cap it. - if (os::Bsd::is_initial_thread()) { - stack_bytes = stack_top - stack_bottom; - - if (stack_bytes > JavaThread::stack_size_at_create()) - stack_bytes = JavaThread::stack_size_at_create(); - - stack_bottom = stack_top - stack_bytes; - } #endif assert(os::current_stack_pointer() >= stack_bottom, "should do"); diff --git a/hotspot/src/os_cpu/linux_sparc/vm/globals_linux_sparc.hpp b/hotspot/src/os_cpu/linux_sparc/vm/globals_linux_sparc.hpp index ab9d8cdeb25..4ac5ead1946 100644 --- a/hotspot/src/os_cpu/linux_sparc/vm/globals_linux_sparc.hpp +++ b/hotspot/src/os_cpu/linux_sparc/vm/globals_linux_sparc.hpp @@ -35,7 +35,5 @@ define_pd_global(intx, CompilerThreadStackSize, 0); // Used on 64 bit platforms for UseCompressedOops base address or CDS define_pd_global(uintx, HeapBaseMinAddress, CONST64(4)*G); -// Only used on 64 bit Windows platforms -define_pd_global(bool, UseVectoredExceptions, false); #endif // OS_CPU_LINUX_SPARC_VM_GLOBALS_LINUX_SPARC_HPP diff --git a/hotspot/src/os_cpu/linux_x86/vm/globals_linux_x86.hpp b/hotspot/src/os_cpu/linux_x86/vm/globals_linux_x86.hpp index a7c94c00f82..b11a6f3aa27 100644 --- a/hotspot/src/os_cpu/linux_x86/vm/globals_linux_x86.hpp +++ b/hotspot/src/os_cpu/linux_x86/vm/globals_linux_x86.hpp @@ -46,7 +46,5 @@ define_pd_global(uintx,JVMInvokeMethodSlack, 8192); // Used on 64 bit platforms for UseCompressedOops base address or CDS define_pd_global(uintx,HeapBaseMinAddress, 2*G); -// Only used on 64 bit Windows platforms -define_pd_global(bool, UseVectoredExceptions, false); #endif // OS_CPU_LINUX_X86_VM_GLOBALS_LINUX_X86_HPP diff --git a/hotspot/src/os_cpu/linux_zero/vm/globals_linux_zero.hpp b/hotspot/src/os_cpu/linux_zero/vm/globals_linux_zero.hpp index 14003011d3e..56495d176d1 100644 --- a/hotspot/src/os_cpu/linux_zero/vm/globals_linux_zero.hpp +++ b/hotspot/src/os_cpu/linux_zero/vm/globals_linux_zero.hpp @@ -41,7 +41,6 @@ define_pd_global(intx, VMThreadStackSize, 512); define_pd_global(intx, CompilerThreadStackSize, 0); define_pd_global(uintx, JVMInvokeMethodSlack, 8192); -define_pd_global(bool, UseVectoredExceptions, false); // Used on 64 bit platforms for UseCompressedOops base address or CDS define_pd_global(uintx, HeapBaseMinAddress, 2*G); diff --git a/hotspot/src/os_cpu/solaris_sparc/vm/globals_solaris_sparc.hpp b/hotspot/src/os_cpu/solaris_sparc/vm/globals_solaris_sparc.hpp index 76695e9442c..e6cb0dddb01 100644 --- a/hotspot/src/os_cpu/solaris_sparc/vm/globals_solaris_sparc.hpp +++ b/hotspot/src/os_cpu/solaris_sparc/vm/globals_solaris_sparc.hpp @@ -39,8 +39,6 @@ define_pd_global(uintx, HeapBaseMinAddress, CONST64(4)*G); #else define_pd_global(uintx, HeapBaseMinAddress, 2*G); #endif -// Only used on 64 bit Windows platforms -define_pd_global(bool, UseVectoredExceptions, false); diff --git a/hotspot/src/os_cpu/solaris_x86/vm/globals_solaris_x86.hpp b/hotspot/src/os_cpu/solaris_x86/vm/globals_solaris_x86.hpp index 780df544cc4..5d99a09c447 100644 --- a/hotspot/src/os_cpu/solaris_x86/vm/globals_solaris_x86.hpp +++ b/hotspot/src/os_cpu/solaris_x86/vm/globals_solaris_x86.hpp @@ -45,7 +45,5 @@ define_pd_global(intx, CompilerThreadStackSize, 0); // Used on 64 bit platforms for UseCompressedOops base address or CDS define_pd_global(uintx,HeapBaseMinAddress, 256*M); -// Only used on 64 bit Windows platforms -define_pd_global(bool, UseVectoredExceptions, false); #endif // OS_CPU_SOLARIS_X86_VM_GLOBALS_SOLARIS_X86_HPP diff --git a/hotspot/src/os_cpu/windows_x86/vm/globals_windows_x86.hpp b/hotspot/src/os_cpu/windows_x86/vm/globals_windows_x86.hpp index 57e0ac34c75..f4167f5eb5c 100644 --- a/hotspot/src/os_cpu/windows_x86/vm/globals_windows_x86.hpp +++ b/hotspot/src/os_cpu/windows_x86/vm/globals_windows_x86.hpp @@ -47,7 +47,5 @@ define_pd_global(uintx, JVMInvokeMethodSlack, 8192); // Used on 64 bit platforms for UseCompressedOops base address or CDS define_pd_global(uintx, HeapBaseMinAddress, 2*G); -// Only used on 64 bit Windows platforms -define_pd_global(bool, UseVectoredExceptions, false); #endif // OS_CPU_WINDOWS_X86_VM_GLOBALS_WINDOWS_X86_HPP diff --git a/hotspot/src/os_cpu/windows_x86/vm/os_windows_x86.cpp b/hotspot/src/os_cpu/windows_x86/vm/os_windows_x86.cpp index 434929f30d2..d0fad7da799 100644 --- a/hotspot/src/os_cpu/windows_x86/vm/os_windows_x86.cpp +++ b/hotspot/src/os_cpu/windows_x86/vm/os_windows_x86.cpp @@ -175,9 +175,6 @@ bool os::register_code_area(char *low, char *high) { PRUNTIME_FUNCTION prt; PUNWIND_INFO_EH_ONLY punwind; - // If we are using Vectored Exceptions we don't need this registration - if (UseVectoredExceptions) return true; - BufferBlob* blob = BufferBlob::create("CodeCache Exception Handler", sizeof(DynamicCodeData)); CodeBuffer cb(blob); MacroAssembler* masm = new MacroAssembler(&cb); diff --git a/hotspot/src/share/vm/asm/codeBuffer.cpp b/hotspot/src/share/vm/asm/codeBuffer.cpp index bb1ae18fcb5..a3fc112f54f 100644 --- a/hotspot/src/share/vm/asm/codeBuffer.cpp +++ b/hotspot/src/share/vm/asm/codeBuffer.cpp @@ -758,7 +758,7 @@ void CodeBuffer::relocate_code_to(CodeBuffer* dest) const { } } - if (dest->blob() == NULL) { + if (dest->blob() == NULL && dest_filled != NULL) { // Destination is a final resting place, not just another buffer. // Normalize uninitialized bytes in the final padding. Copy::fill_to_bytes(dest_filled, dest_end - dest_filled, diff --git a/hotspot/src/share/vm/c1/c1_GraphBuilder.cpp b/hotspot/src/share/vm/c1/c1_GraphBuilder.cpp index 1bbdc5afbca..941dd120a01 100644 --- a/hotspot/src/share/vm/c1/c1_GraphBuilder.cpp +++ b/hotspot/src/share/vm/c1/c1_GraphBuilder.cpp @@ -1844,17 +1844,12 @@ void GraphBuilder::invoke(Bytecodes::Code code) { code == Bytecodes::_invokevirtual && target->is_final_method() || code == Bytecodes::_invokedynamic) { ciMethod* inline_target = (cha_monomorphic_target != NULL) ? cha_monomorphic_target : target; - bool success = false; - if (target->is_method_handle_intrinsic()) { - // method handle invokes - success = try_method_handle_inline(target); - } else { - // static binding => check if callee is ok - success = try_inline(inline_target, (cha_monomorphic_target != NULL) || (exact_target != NULL), code, better_receiver); - } - CHECK_BAILOUT(); + // static binding => check if callee is ok + bool success = try_inline(inline_target, (cha_monomorphic_target != NULL) || (exact_target != NULL), code, better_receiver); + CHECK_BAILOUT(); clear_inline_bailout(); + if (success) { // Register dependence if JVMTI has either breakpoint // setting or hotswapping of methods capabilities since they may @@ -3201,6 +3196,11 @@ bool GraphBuilder::try_inline(ciMethod* callee, bool holder_known, Bytecodes::Co return false; } + // method handle invokes + if (callee->is_method_handle_intrinsic()) { + return try_method_handle_inline(callee); + } + // handle intrinsics if (callee->intrinsic_id() != vmIntrinsics::_none) { if (try_inline_intrinsics(callee)) { @@ -3885,10 +3885,14 @@ bool GraphBuilder::try_method_handle_inline(ciMethod* callee) { ValueType* type = state()->stack_at(args_base)->type(); if (type->is_constant()) { ciMethod* target = type->as_ObjectType()->constant_value()->as_method_handle()->get_vmtarget(); - guarantee(!target->is_method_handle_intrinsic(), "should not happen"); // XXX remove - Bytecodes::Code bc = target->is_static() ? Bytecodes::_invokestatic : Bytecodes::_invokevirtual; - if (try_inline(target, /*holder_known*/ true, bc)) { - return true; + // We don't do CHA here so only inline static and statically bindable methods. + if (target->is_static() || target->can_be_statically_bound()) { + Bytecodes::Code bc = target->is_static() ? Bytecodes::_invokestatic : Bytecodes::_invokevirtual; + if (try_inline(target, /*holder_known*/ true, bc)) { + return true; + } + } else { + print_inlining(target, "not static or statically bindable", /*success*/ false); } } else { print_inlining(callee, "receiver not constant", /*success*/ false); @@ -3941,9 +3945,14 @@ bool GraphBuilder::try_method_handle_inline(ciMethod* callee) { } j += t->size(); // long and double take two slots } - Bytecodes::Code bc = target->is_static() ? Bytecodes::_invokestatic : Bytecodes::_invokevirtual; - if (try_inline(target, /*holder_known*/ true, bc)) { - return true; + // We don't do CHA here so only inline static and statically bindable methods. + if (target->is_static() || target->can_be_statically_bound()) { + Bytecodes::Code bc = target->is_static() ? Bytecodes::_invokestatic : Bytecodes::_invokevirtual; + if (try_inline(target, /*holder_known*/ true, bc)) { + return true; + } + } else { + print_inlining(target, "not static or statically bindable", /*success*/ false); } } } else { diff --git a/hotspot/src/share/vm/classfile/vmSymbols.hpp b/hotspot/src/share/vm/classfile/vmSymbols.hpp index 06fdb35be19..b29efcb0fa4 100644 --- a/hotspot/src/share/vm/classfile/vmSymbols.hpp +++ b/hotspot/src/share/vm/classfile/vmSymbols.hpp @@ -110,10 +110,12 @@ template(sun_jkernel_DownloadManager, "sun/jkernel/DownloadManager") \ template(getBootClassPathEntryForClass_name, "getBootClassPathEntryForClass") \ template(sun_misc_PostVMInitHook, "sun/misc/PostVMInitHook") \ + template(sun_misc_Launcher_ExtClassLoader, "sun/misc/Launcher$ExtClassLoader") \ \ /* Java runtime version access */ \ template(sun_misc_Version, "sun/misc/Version") \ template(java_runtime_name_name, "java_runtime_name") \ + template(java_runtime_version_name, "java_runtime_version") \ \ /* class file format tags */ \ template(tag_source_file, "SourceFile") \ @@ -723,6 +725,21 @@ /* java/lang/ref/Reference */ \ do_intrinsic(_Reference_get, java_lang_ref_Reference, get_name, void_object_signature, F_R) \ \ + /* support for com.sum.crypto.provider.AESCrypt and some of its callers */ \ + do_class(com_sun_crypto_provider_aescrypt, "com/sun/crypto/provider/AESCrypt") \ + do_intrinsic(_aescrypt_encryptBlock, com_sun_crypto_provider_aescrypt, encryptBlock_name, byteArray_int_byteArray_int_signature, F_R) \ + do_intrinsic(_aescrypt_decryptBlock, com_sun_crypto_provider_aescrypt, decryptBlock_name, byteArray_int_byteArray_int_signature, F_R) \ + do_name( encryptBlock_name, "encryptBlock") \ + do_name( decryptBlock_name, "decryptBlock") \ + do_signature(byteArray_int_byteArray_int_signature, "([BI[BI)V") \ + \ + do_class(com_sun_crypto_provider_cipherBlockChaining, "com/sun/crypto/provider/CipherBlockChaining") \ + do_intrinsic(_cipherBlockChaining_encryptAESCrypt, com_sun_crypto_provider_cipherBlockChaining, encrypt_name, byteArray_int_int_byteArray_int_signature, F_R) \ + do_intrinsic(_cipherBlockChaining_decryptAESCrypt, com_sun_crypto_provider_cipherBlockChaining, decrypt_name, byteArray_int_int_byteArray_int_signature, F_R) \ + do_name( encrypt_name, "encrypt") \ + do_name( decrypt_name, "decrypt") \ + do_signature(byteArray_int_int_byteArray_int_signature, "([BII[BI)V") \ + \ /* support for sun.misc.Unsafe */ \ do_class(sun_misc_Unsafe, "sun/misc/Unsafe") \ \ diff --git a/hotspot/src/share/vm/compiler/compilerOracle.cpp b/hotspot/src/share/vm/compiler/compilerOracle.cpp index bdd34917f22..bf691bc0b8d 100644 --- a/hotspot/src/share/vm/compiler/compilerOracle.cpp +++ b/hotspot/src/share/vm/compiler/compilerOracle.cpp @@ -574,7 +574,7 @@ void CompilerOracle::parse_from_file() { char token[1024]; int pos = 0; int c = getc(stream); - while(c != EOF) { + while(c != EOF && pos < (int)(sizeof(token)-1)) { if (c == '\n') { token[pos++] = '\0'; parse_from_line(token); @@ -595,7 +595,7 @@ void CompilerOracle::parse_from_string(const char* str, void (*parse_line)(char* int pos = 0; const char* sp = str; int c = *sp++; - while (c != '\0') { + while (c != '\0' && pos < (int)(sizeof(token)-1)) { if (c == '\n') { token[pos++] = '\0'; parse_line(token); diff --git a/hotspot/src/share/vm/gc_implementation/concurrentMarkSweep/adaptiveFreeList.cpp b/hotspot/src/share/vm/gc_implementation/concurrentMarkSweep/adaptiveFreeList.cpp new file mode 100644 index 00000000000..01e0e8745a1 --- /dev/null +++ b/hotspot/src/share/vm/gc_implementation/concurrentMarkSweep/adaptiveFreeList.cpp @@ -0,0 +1,175 @@ +/* + * Copyright (c) 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. + * + */ + +#include "precompiled.hpp" +#include "gc_implementation/concurrentMarkSweep/adaptiveFreeList.hpp" +#include "gc_implementation/concurrentMarkSweep/freeChunk.hpp" +#include "memory/freeBlockDictionary.hpp" +#include "memory/sharedHeap.hpp" +#include "runtime/globals.hpp" +#include "runtime/mutex.hpp" +#include "runtime/vmThread.hpp" + +template <> +void AdaptiveFreeList::print_on(outputStream* st, const char* c) const { + if (c != NULL) { + st->print("%16s", c); + } else { + st->print(SIZE_FORMAT_W(16), size()); + } + st->print("\t" + SSIZE_FORMAT_W(14) "\t" SSIZE_FORMAT_W(14) "\t" SSIZE_FORMAT_W(14) "\t" SSIZE_FORMAT_W(14) "\t" SSIZE_FORMAT_W(14) "\t" + SSIZE_FORMAT_W(14) "\t" SSIZE_FORMAT_W(14) "\t" SSIZE_FORMAT_W(14) "\t" SSIZE_FORMAT_W(14) "\t" SSIZE_FORMAT_W(14) "\n", + bfr_surp(), surplus(), desired(), prev_sweep(), before_sweep(), + count(), coal_births(), coal_deaths(), split_births(), split_deaths()); +} + +template +AdaptiveFreeList::AdaptiveFreeList() : FreeList(), _hint(0) { + init_statistics(); +} + +template +AdaptiveFreeList::AdaptiveFreeList(Chunk* fc) : FreeList(fc), _hint(0) { + init_statistics(); +#ifndef PRODUCT + _allocation_stats.set_returned_bytes(size() * HeapWordSize); +#endif +} + +template +void AdaptiveFreeList::initialize() { + FreeList::initialize(); + set_hint(0); + init_statistics(true /* split_birth */); +} + +template +void AdaptiveFreeList::reset(size_t hint) { + FreeList::reset(); + set_hint(hint); +} + +#ifndef PRODUCT +template +void AdaptiveFreeList::assert_proper_lock_protection_work() const { + assert(protecting_lock() != NULL, "Don't call this directly"); + assert(ParallelGCThreads > 0, "Don't call this directly"); + Thread* thr = Thread::current(); + if (thr->is_VM_thread() || thr->is_ConcurrentGC_thread()) { + // assert that we are holding the freelist lock + } else if (thr->is_GC_task_thread()) { + assert(protecting_lock()->owned_by_self(), "FreeList RACE DETECTED"); + } else if (thr->is_Java_thread()) { + assert(!SafepointSynchronize::is_at_safepoint(), "Should not be executing"); + } else { + ShouldNotReachHere(); // unaccounted thread type? + } +} +#endif +template +void AdaptiveFreeList::init_statistics(bool split_birth) { + _allocation_stats.initialize(split_birth); +} + +template +size_t AdaptiveFreeList::get_better_size() { + + // A candidate chunk has been found. If it is already under + // populated and there is a hinT, REturn the hint(). Else + // return the size of this chunk. + if (surplus() <= 0) { + if (hint() != 0) { + return hint(); + } else { + return size(); + } + } else { + // This list has a surplus so use it. + return size(); + } +} + + +template +void AdaptiveFreeList::return_chunk_at_head(Chunk* chunk) { + assert_proper_lock_protection(); + return_chunk_at_head(chunk, true); +} + +template +void AdaptiveFreeList::return_chunk_at_head(Chunk* chunk, bool record_return) { + FreeList::return_chunk_at_head(chunk, record_return); +#ifdef ASSERT + if (record_return) { + increment_returned_bytes_by(size()*HeapWordSize); + } +#endif +} + +template +void AdaptiveFreeList::return_chunk_at_tail(Chunk* chunk) { + return_chunk_at_tail(chunk, true); +} + +template +void AdaptiveFreeList::return_chunk_at_tail(Chunk* chunk, bool record_return) { + FreeList::return_chunk_at_tail(chunk, record_return); +#ifdef ASSERT + if (record_return) { + increment_returned_bytes_by(size()*HeapWordSize); + } +#endif +} + +#ifndef PRODUCT +template +void AdaptiveFreeList::verify_stats() const { + // The +1 of the LH comparand is to allow some "looseness" in + // checking: we usually call this interface when adding a block + // and we'll subsequently update the stats; we cannot update the + // stats beforehand because in the case of the large-block BT + // dictionary for example, this might be the first block and + // in that case there would be no place that we could record + // the stats (which are kept in the block itself). + assert((_allocation_stats.prev_sweep() + _allocation_stats.split_births() + + _allocation_stats.coal_births() + 1) // Total Production Stock + 1 + >= (_allocation_stats.split_deaths() + _allocation_stats.coal_deaths() + + (ssize_t)count()), // Total Current Stock + depletion + err_msg("FreeList " PTR_FORMAT " of size " SIZE_FORMAT + " violates Conservation Principle: " + "prev_sweep(" SIZE_FORMAT ")" + " + split_births(" SIZE_FORMAT ")" + " + coal_births(" SIZE_FORMAT ") + 1 >= " + " split_deaths(" SIZE_FORMAT ")" + " coal_deaths(" SIZE_FORMAT ")" + " + count(" SSIZE_FORMAT ")", + this, size(), _allocation_stats.prev_sweep(), _allocation_stats.split_births(), + _allocation_stats.split_births(), _allocation_stats.split_deaths(), + _allocation_stats.coal_deaths(), count())); +} +#endif + +// Needs to be after the definitions have been seen. +template class AdaptiveFreeList; diff --git a/hotspot/src/share/vm/gc_implementation/concurrentMarkSweep/adaptiveFreeList.hpp b/hotspot/src/share/vm/gc_implementation/concurrentMarkSweep/adaptiveFreeList.hpp new file mode 100644 index 00000000000..8b56bb11d76 --- /dev/null +++ b/hotspot/src/share/vm/gc_implementation/concurrentMarkSweep/adaptiveFreeList.hpp @@ -0,0 +1,232 @@ +/* + * Copyright (c) 2001, 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. + * + * 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 SHARE_VM_MEMORY_ADAPTIVEFREELIST_HPP +#define SHARE_VM_MEMORY_ADAPTIVEFREELIST_HPP + +#include "memory/freeList.hpp" +#include "gc_implementation/shared/allocationStats.hpp" + +class CompactibleFreeListSpace; + +// A class for maintaining a free list of Chunk's. The FreeList +// maintains a the structure of the list (head, tail, etc.) plus +// statistics for allocations from the list. The links between items +// are not part of FreeList. The statistics are +// used to make decisions about coalescing Chunk's when they +// are swept during collection. +// +// See the corresponding .cpp file for a description of the specifics +// for that implementation. + +class Mutex; + +template +class AdaptiveFreeList : public FreeList { + friend class CompactibleFreeListSpace; + friend class VMStructs; + // friend class PrintTreeCensusClosure; + + size_t _hint; // next larger size list with a positive surplus + + AllocationStats _allocation_stats; // allocation-related statistics + + public: + + AdaptiveFreeList(); + AdaptiveFreeList(Chunk* fc); + + using FreeList::assert_proper_lock_protection; +#ifdef ASSERT + using FreeList::protecting_lock; +#endif + using FreeList::count; + using FreeList::size; + using FreeList::verify_chunk_in_free_list; + using FreeList::getFirstNChunksFromList; + using FreeList::print_on; + void return_chunk_at_head(Chunk* fc, bool record_return); + void return_chunk_at_head(Chunk* fc); + void return_chunk_at_tail(Chunk* fc, bool record_return); + void return_chunk_at_tail(Chunk* fc); + using FreeList::return_chunk_at_tail; + using FreeList::remove_chunk; + using FreeList::prepend; + using FreeList::print_labels_on; + using FreeList::get_chunk_at_head; + + // Initialize. + void initialize(); + + // Reset the head, tail, hint, and count of a free list. + void reset(size_t hint); + + void assert_proper_lock_protection_work() const PRODUCT_RETURN; + + void print_on(outputStream* st, const char* c = NULL) const; + + size_t hint() const { + return _hint; + } + void set_hint(size_t v) { + assert_proper_lock_protection(); + assert(v == 0 || size() < v, "Bad hint"); + _hint = v; + } + + size_t get_better_size(); + + // Accessors for statistics + void init_statistics(bool split_birth = false); + + AllocationStats* allocation_stats() { + assert_proper_lock_protection(); + return &_allocation_stats; + } + + ssize_t desired() const { + return _allocation_stats.desired(); + } + void set_desired(ssize_t v) { + assert_proper_lock_protection(); + _allocation_stats.set_desired(v); + } + void compute_desired(float inter_sweep_current, + float inter_sweep_estimate, + float intra_sweep_estimate) { + assert_proper_lock_protection(); + _allocation_stats.compute_desired(count(), + inter_sweep_current, + inter_sweep_estimate, + intra_sweep_estimate); + } + ssize_t coal_desired() const { + return _allocation_stats.coal_desired(); + } + void set_coal_desired(ssize_t v) { + assert_proper_lock_protection(); + _allocation_stats.set_coal_desired(v); + } + + ssize_t surplus() const { + return _allocation_stats.surplus(); + } + void set_surplus(ssize_t v) { + assert_proper_lock_protection(); + _allocation_stats.set_surplus(v); + } + void increment_surplus() { + assert_proper_lock_protection(); + _allocation_stats.increment_surplus(); + } + void decrement_surplus() { + assert_proper_lock_protection(); + _allocation_stats.decrement_surplus(); + } + + ssize_t bfr_surp() const { + return _allocation_stats.bfr_surp(); + } + void set_bfr_surp(ssize_t v) { + assert_proper_lock_protection(); + _allocation_stats.set_bfr_surp(v); + } + ssize_t prev_sweep() const { + return _allocation_stats.prev_sweep(); + } + void set_prev_sweep(ssize_t v) { + assert_proper_lock_protection(); + _allocation_stats.set_prev_sweep(v); + } + ssize_t before_sweep() const { + return _allocation_stats.before_sweep(); + } + void set_before_sweep(ssize_t v) { + assert_proper_lock_protection(); + _allocation_stats.set_before_sweep(v); + } + + ssize_t coal_births() const { + return _allocation_stats.coal_births(); + } + void set_coal_births(ssize_t v) { + assert_proper_lock_protection(); + _allocation_stats.set_coal_births(v); + } + void increment_coal_births() { + assert_proper_lock_protection(); + _allocation_stats.increment_coal_births(); + } + + ssize_t coal_deaths() const { + return _allocation_stats.coal_deaths(); + } + void set_coal_deaths(ssize_t v) { + assert_proper_lock_protection(); + _allocation_stats.set_coal_deaths(v); + } + void increment_coal_deaths() { + assert_proper_lock_protection(); + _allocation_stats.increment_coal_deaths(); + } + + ssize_t split_births() const { + return _allocation_stats.split_births(); + } + void set_split_births(ssize_t v) { + assert_proper_lock_protection(); + _allocation_stats.set_split_births(v); + } + void increment_split_births() { + assert_proper_lock_protection(); + _allocation_stats.increment_split_births(); + } + + ssize_t split_deaths() const { + return _allocation_stats.split_deaths(); + } + void set_split_deaths(ssize_t v) { + assert_proper_lock_protection(); + _allocation_stats.set_split_deaths(v); + } + void increment_split_deaths() { + assert_proper_lock_protection(); + _allocation_stats.increment_split_deaths(); + } + +#ifndef PRODUCT + // For debugging. The "_returned_bytes" in all the lists are summed + // and compared with the total number of bytes swept during a + // collection. + size_t returned_bytes() const { return _allocation_stats.returned_bytes(); } + void set_returned_bytes(size_t v) { _allocation_stats.set_returned_bytes(v); } + void increment_returned_bytes_by(size_t v) { + _allocation_stats.set_returned_bytes(_allocation_stats.returned_bytes() + v); + } + // Stats verification + void verify_stats() const; +#endif // NOT PRODUCT +}; + +#endif // SHARE_VM_MEMORY_ADAPTIVEFREELIST_HPP diff --git a/hotspot/src/share/vm/gc_implementation/concurrentMarkSweep/compactibleFreeListSpace.cpp b/hotspot/src/share/vm/gc_implementation/concurrentMarkSweep/compactibleFreeListSpace.cpp index eac32b1eaea..2f43c987669 100644 --- a/hotspot/src/share/vm/gc_implementation/concurrentMarkSweep/compactibleFreeListSpace.cpp +++ b/hotspot/src/share/vm/gc_implementation/concurrentMarkSweep/compactibleFreeListSpace.cpp @@ -91,7 +91,7 @@ CompactibleFreeListSpace::CompactibleFreeListSpace(BlockOffsetSharedArray* bs, _collector(NULL) { assert(sizeof(FreeChunk) / BytesPerWord <= MinChunkSize, - "FreeChunk is larger than expected"); + "FreeChunk is larger than expected"); _bt.set_space(this); initialize(mr, SpaceDecorator::Clear, SpaceDecorator::Mangle); // We have all of "mr", all of which we place in the dictionary @@ -101,14 +101,14 @@ CompactibleFreeListSpace::CompactibleFreeListSpace(BlockOffsetSharedArray* bs, // implementation, namely, the simple binary tree (splaying // temporarily disabled). switch (dictionaryChoice) { + case FreeBlockDictionary::dictionaryBinaryTree: + _dictionary = new BinaryTreeDictionary(mr); + break; case FreeBlockDictionary::dictionarySplayTree: case FreeBlockDictionary::dictionarySkipList: default: warning("dictionaryChoice: selected option not understood; using" " default BinaryTreeDictionary implementation instead."); - case FreeBlockDictionary::dictionaryBinaryTree: - _dictionary = new BinaryTreeDictionary(mr, use_adaptive_freelists); - break; } assert(_dictionary != NULL, "CMS dictionary initialization"); // The indexed free lists are initially all empty and are lazily @@ -453,7 +453,7 @@ const { reportIndexedFreeListStatistics(); gclog_or_tty->print_cr("Layout of Indexed Freelists"); gclog_or_tty->print_cr("---------------------------"); - FreeList::print_labels_on(st, "size"); + AdaptiveFreeList::print_labels_on(st, "size"); for (size_t i = IndexSetStart; i < IndexSetSize; i += IndexSetStride) { _indexedFreeList[i].print_on(gclog_or_tty); for (FreeChunk* fc = _indexedFreeList[i].head(); fc != NULL; @@ -1319,7 +1319,7 @@ FreeChunk* CompactibleFreeListSpace::getChunkFromGreater(size_t numWords) { size_t currSize = numWords + MinChunkSize; assert(currSize % MinObjAlignment == 0, "currSize should be aligned"); for (i = currSize; i < IndexSetSize; i += IndexSetStride) { - FreeList* fl = &_indexedFreeList[i]; + AdaptiveFreeList* fl = &_indexedFreeList[i]; if (fl->head()) { ret = getFromListGreater(fl, numWords); assert(ret == NULL || ret->is_free(), "Should be returning a free chunk"); @@ -1702,7 +1702,9 @@ CompactibleFreeListSpace::returnChunkToDictionary(FreeChunk* chunk) { _dictionary->return_chunk(chunk); #ifndef PRODUCT if (CMSCollector::abstract_state() != CMSCollector::Sweeping) { - TreeChunk::as_TreeChunk(chunk)->list()->verify_stats(); + TreeChunk* tc = TreeChunk::as_TreeChunk(chunk); + TreeList* tl = tc->list(); + tl->verify_stats(); } #endif // PRODUCT } @@ -1745,7 +1747,7 @@ CompactibleFreeListSpace::addChunkToFreeListsAtEndRecordingStats( { MutexLockerEx x(lock, Mutex::_no_safepoint_check_flag); ec = dictionary()->find_largest_dict(); // get largest block - if (ec != NULL && ec->end() == chunk) { + if (ec != NULL && ec->end() == (uintptr_t*) chunk) { // It's a coterminal block - we can coalesce. size_t old_size = ec->size(); coalDeath(old_size); @@ -1850,11 +1852,11 @@ FreeChunk* CompactibleFreeListSpace::bestFitSmall(size_t numWords) { the excess is >= MIN_CHUNK. */ size_t start = align_object_size(numWords + MinChunkSize); if (start < IndexSetSize) { - FreeList* it = _indexedFreeList; + AdaptiveFreeList* it = _indexedFreeList; size_t hint = _indexedFreeList[start].hint(); while (hint < IndexSetSize) { assert(hint % MinObjAlignment == 0, "hint should be aligned"); - FreeList *fl = &_indexedFreeList[hint]; + AdaptiveFreeList *fl = &_indexedFreeList[hint]; if (fl->surplus() > 0 && fl->head() != NULL) { // Found a list with surplus, reset original hint // and split out a free chunk which is returned. @@ -1873,7 +1875,7 @@ FreeChunk* CompactibleFreeListSpace::bestFitSmall(size_t numWords) { } /* Requires fl->size >= numWords + MinChunkSize */ -FreeChunk* CompactibleFreeListSpace::getFromListGreater(FreeList* fl, +FreeChunk* CompactibleFreeListSpace::getFromListGreater(AdaptiveFreeList* fl, size_t numWords) { FreeChunk *curr = fl->head(); size_t oldNumWords = curr->size(); @@ -2155,7 +2157,7 @@ void CompactibleFreeListSpace::beginSweepFLCensus( assert_locked(); size_t i; for (i = IndexSetStart; i < IndexSetSize; i += IndexSetStride) { - FreeList* fl = &_indexedFreeList[i]; + AdaptiveFreeList* fl = &_indexedFreeList[i]; if (PrintFLSStatistics > 1) { gclog_or_tty->print("size[%d] : ", i); } @@ -2174,7 +2176,7 @@ void CompactibleFreeListSpace::setFLSurplus() { assert_locked(); size_t i; for (i = IndexSetStart; i < IndexSetSize; i += IndexSetStride) { - FreeList *fl = &_indexedFreeList[i]; + AdaptiveFreeList *fl = &_indexedFreeList[i]; fl->set_surplus(fl->count() - (ssize_t)((double)fl->desired() * CMSSmallSplitSurplusPercent)); } @@ -2185,7 +2187,7 @@ void CompactibleFreeListSpace::setFLHints() { size_t i; size_t h = IndexSetSize; for (i = IndexSetSize - 1; i != 0; i -= IndexSetStride) { - FreeList *fl = &_indexedFreeList[i]; + AdaptiveFreeList *fl = &_indexedFreeList[i]; fl->set_hint(h); if (fl->surplus() > 0) { h = i; @@ -2197,7 +2199,7 @@ void CompactibleFreeListSpace::clearFLCensus() { assert_locked(); size_t i; for (i = IndexSetStart; i < IndexSetSize; i += IndexSetStride) { - FreeList *fl = &_indexedFreeList[i]; + AdaptiveFreeList *fl = &_indexedFreeList[i]; fl->set_prev_sweep(fl->count()); fl->set_coal_births(0); fl->set_coal_deaths(0); @@ -2224,7 +2226,7 @@ void CompactibleFreeListSpace::endSweepFLCensus(size_t sweep_count) { bool CompactibleFreeListSpace::coalOverPopulated(size_t size) { if (size < SmallForDictionary) { - FreeList *fl = &_indexedFreeList[size]; + AdaptiveFreeList *fl = &_indexedFreeList[size]; return (fl->coal_desired() < 0) || ((int)fl->count() > fl->coal_desired()); } else { @@ -2234,14 +2236,14 @@ bool CompactibleFreeListSpace::coalOverPopulated(size_t size) { void CompactibleFreeListSpace::smallCoalBirth(size_t size) { assert(size < SmallForDictionary, "Size too large for indexed list"); - FreeList *fl = &_indexedFreeList[size]; + AdaptiveFreeList *fl = &_indexedFreeList[size]; fl->increment_coal_births(); fl->increment_surplus(); } void CompactibleFreeListSpace::smallCoalDeath(size_t size) { assert(size < SmallForDictionary, "Size too large for indexed list"); - FreeList *fl = &_indexedFreeList[size]; + AdaptiveFreeList *fl = &_indexedFreeList[size]; fl->increment_coal_deaths(); fl->decrement_surplus(); } @@ -2250,7 +2252,7 @@ void CompactibleFreeListSpace::coalBirth(size_t size) { if (size < SmallForDictionary) { smallCoalBirth(size); } else { - dictionary()->dict_census_udpate(size, + dictionary()->dict_census_update(size, false /* split */, true /* birth */); } @@ -2260,7 +2262,7 @@ void CompactibleFreeListSpace::coalDeath(size_t size) { if(size < SmallForDictionary) { smallCoalDeath(size); } else { - dictionary()->dict_census_udpate(size, + dictionary()->dict_census_update(size, false /* split */, false /* birth */); } @@ -2268,14 +2270,14 @@ void CompactibleFreeListSpace::coalDeath(size_t size) { void CompactibleFreeListSpace::smallSplitBirth(size_t size) { assert(size < SmallForDictionary, "Size too large for indexed list"); - FreeList *fl = &_indexedFreeList[size]; + AdaptiveFreeList *fl = &_indexedFreeList[size]; fl->increment_split_births(); fl->increment_surplus(); } void CompactibleFreeListSpace::smallSplitDeath(size_t size) { assert(size < SmallForDictionary, "Size too large for indexed list"); - FreeList *fl = &_indexedFreeList[size]; + AdaptiveFreeList *fl = &_indexedFreeList[size]; fl->increment_split_deaths(); fl->decrement_surplus(); } @@ -2284,7 +2286,7 @@ void CompactibleFreeListSpace::split_birth(size_t size) { if (size < SmallForDictionary) { smallSplitBirth(size); } else { - dictionary()->dict_census_udpate(size, + dictionary()->dict_census_update(size, true /* split */, true /* birth */); } @@ -2294,7 +2296,7 @@ void CompactibleFreeListSpace::splitDeath(size_t size) { if (size < SmallForDictionary) { smallSplitDeath(size); } else { - dictionary()->dict_census_udpate(size, + dictionary()->dict_census_update(size, true /* split */, false /* birth */); } @@ -2517,10 +2519,10 @@ void CompactibleFreeListSpace::verifyIndexedFreeList(size_t size) const { #ifndef PRODUCT void CompactibleFreeListSpace::check_free_list_consistency() const { - assert(_dictionary->min_size() <= IndexSetSize, + assert((TreeChunk::min_size() <= IndexSetSize), "Some sizes can't be allocated without recourse to" " linear allocation buffers"); - assert(BinaryTreeDictionary::min_tree_chunk_size*HeapWordSize == sizeof(TreeChunk), + assert((TreeChunk::min_size()*HeapWordSize == sizeof(TreeChunk)), "else MIN_TREE_CHUNK_SIZE is wrong"); assert(IndexSetStart != 0, "IndexSetStart not initialized"); assert(IndexSetStride != 0, "IndexSetStride not initialized"); @@ -2529,15 +2531,15 @@ void CompactibleFreeListSpace::check_free_list_consistency() const { void CompactibleFreeListSpace::printFLCensus(size_t sweep_count) const { assert_lock_strong(&_freelistLock); - FreeList total; + AdaptiveFreeList total; gclog_or_tty->print("end sweep# " SIZE_FORMAT "\n", sweep_count); - FreeList::print_labels_on(gclog_or_tty, "size"); + AdaptiveFreeList::print_labels_on(gclog_or_tty, "size"); size_t total_free = 0; for (size_t i = IndexSetStart; i < IndexSetSize; i += IndexSetStride) { - const FreeList *fl = &_indexedFreeList[i]; + const AdaptiveFreeList *fl = &_indexedFreeList[i]; total_free += fl->count() * fl->size(); if (i % (40*IndexSetStride) == 0) { - FreeList::print_labels_on(gclog_or_tty, "size"); + AdaptiveFreeList::print_labels_on(gclog_or_tty, "size"); } fl->print_on(gclog_or_tty); total.set_bfr_surp( total.bfr_surp() + fl->bfr_surp() ); @@ -2620,7 +2622,7 @@ HeapWord* CFLS_LAB::alloc(size_t word_sz) { res = _cfls->getChunkFromDictionaryExact(word_sz); if (res == NULL) return NULL; } else { - FreeList* fl = &_indexedFreeList[word_sz]; + AdaptiveFreeList* fl = &_indexedFreeList[word_sz]; if (fl->count() == 0) { // Attempt to refill this local free list. get_from_global_pool(word_sz, fl); @@ -2640,7 +2642,7 @@ HeapWord* CFLS_LAB::alloc(size_t word_sz) { // Get a chunk of blocks of the right size and update related // book-keeping stats -void CFLS_LAB::get_from_global_pool(size_t word_sz, FreeList* fl) { +void CFLS_LAB::get_from_global_pool(size_t word_sz, AdaptiveFreeList* fl) { // Get the #blocks we want to claim size_t n_blks = (size_t)_blocks_to_claim[word_sz].average(); assert(n_blks > 0, "Error"); @@ -2722,7 +2724,7 @@ void CFLS_LAB::retire(int tid) { if (num_retire > 0) { _cfls->_indexedFreeList[i].prepend(&_indexedFreeList[i]); // Reset this list. - _indexedFreeList[i] = FreeList(); + _indexedFreeList[i] = AdaptiveFreeList(); _indexedFreeList[i].set_size(i); } } @@ -2736,7 +2738,7 @@ void CFLS_LAB::retire(int tid) { } } -void CompactibleFreeListSpace:: par_get_chunk_of_blocks(size_t word_sz, size_t n, FreeList* fl) { +void CompactibleFreeListSpace:: par_get_chunk_of_blocks(size_t word_sz, size_t n, AdaptiveFreeList* fl) { assert(fl->count() == 0, "Precondition."); assert(word_sz < CompactibleFreeListSpace::IndexSetSize, "Precondition"); @@ -2752,12 +2754,12 @@ void CompactibleFreeListSpace:: par_get_chunk_of_blocks(size_t word_sz, size_t n (cur_sz < CompactibleFreeListSpace::IndexSetSize) && (CMSSplitIndexedFreeListBlocks || k <= 1); k++, cur_sz = k * word_sz) { - FreeList fl_for_cur_sz; // Empty. + AdaptiveFreeList fl_for_cur_sz; // Empty. fl_for_cur_sz.set_size(cur_sz); { MutexLockerEx x(_indexedFreeListParLocks[cur_sz], Mutex::_no_safepoint_check_flag); - FreeList* gfl = &_indexedFreeList[cur_sz]; + AdaptiveFreeList* gfl = &_indexedFreeList[cur_sz]; if (gfl->count() != 0) { // nn is the number of chunks of size cur_sz that // we'd need to split k-ways each, in order to create @@ -2832,12 +2834,11 @@ void CompactibleFreeListSpace:: par_get_chunk_of_blocks(size_t word_sz, size_t n MutexLockerEx x(parDictionaryAllocLock(), Mutex::_no_safepoint_check_flag); while (n > 0) { - fc = dictionary()->get_chunk(MAX2(n * word_sz, - _dictionary->min_size()), + fc = dictionary()->get_chunk(MAX2(n * word_sz, _dictionary->min_size()), FreeBlockDictionary::atLeast); if (fc != NULL) { _bt.allocated((HeapWord*)fc, fc->size(), true /* reducing */); // update _unallocated_blk - dictionary()->dict_census_udpate(fc->size(), + dictionary()->dict_census_update(fc->size(), true /*split*/, false /*birth*/); break; @@ -2890,7 +2891,7 @@ void CompactibleFreeListSpace:: par_get_chunk_of_blocks(size_t word_sz, size_t n fc->set_size(prefix_size); if (rem >= IndexSetSize) { returnChunkToDictionary(rem_fc); - dictionary()->dict_census_udpate(rem, true /*split*/, true /*birth*/); + dictionary()->dict_census_update(rem, true /*split*/, true /*birth*/); rem_fc = NULL; } // Otherwise, return it to the small list below. diff --git a/hotspot/src/share/vm/gc_implementation/concurrentMarkSweep/compactibleFreeListSpace.hpp b/hotspot/src/share/vm/gc_implementation/concurrentMarkSweep/compactibleFreeListSpace.hpp index 4d247356d50..1b3d93ed248 100644 --- a/hotspot/src/share/vm/gc_implementation/concurrentMarkSweep/compactibleFreeListSpace.hpp +++ b/hotspot/src/share/vm/gc_implementation/concurrentMarkSweep/compactibleFreeListSpace.hpp @@ -25,6 +25,7 @@ #ifndef SHARE_VM_GC_IMPLEMENTATION_CONCURRENTMARKSWEEP_COMPACTIBLEFREELISTSPACE_HPP #define SHARE_VM_GC_IMPLEMENTATION_CONCURRENTMARKSWEEP_COMPACTIBLEFREELISTSPACE_HPP +#include "gc_implementation/concurrentMarkSweep/adaptiveFreeList.hpp" #include "gc_implementation/concurrentMarkSweep/promotionInfo.hpp" #include "memory/binaryTreeDictionary.hpp" #include "memory/blockOffsetTable.inline.hpp" @@ -38,6 +39,7 @@ class CompactibleFreeListSpace; class BlkClosure; class BlkClosureCareful; +class FreeChunk; class UpwardsObjectClosure; class ObjectClosureCareful; class Klass; @@ -131,7 +133,7 @@ class CompactibleFreeListSpace: public CompactibleSpace { FreeBlockDictionary::DictionaryChoice _dictionaryChoice; FreeBlockDictionary* _dictionary; // ptr to dictionary for large size blocks - FreeList _indexedFreeList[IndexSetSize]; + AdaptiveFreeList _indexedFreeList[IndexSetSize]; // indexed array for small size blocks // allocation stategy bool _fitStrategy; // Use best fit strategy. @@ -168,7 +170,7 @@ class CompactibleFreeListSpace: public CompactibleSpace { // If the count of "fl" is negative, it's absolute value indicates a // number of free chunks that had been previously "borrowed" from global // list of size "word_sz", and must now be decremented. - void par_get_chunk_of_blocks(size_t word_sz, size_t n, FreeList* fl); + void par_get_chunk_of_blocks(size_t word_sz, size_t n, AdaptiveFreeList* fl); // Allocation helper functions // Allocate using a strategy that takes from the indexed free lists @@ -214,7 +216,7 @@ class CompactibleFreeListSpace: public CompactibleSpace { // and return it. The split off remainder is returned to // the free lists. The old name for getFromListGreater // was lookInListGreater. - FreeChunk* getFromListGreater(FreeList* fl, size_t numWords); + FreeChunk* getFromListGreater(AdaptiveFreeList* fl, size_t numWords); // Get a chunk in the indexed free list or dictionary, // by considering a larger chunk and splitting it. FreeChunk* getChunkFromGreater(size_t numWords); @@ -621,7 +623,7 @@ class CFLS_LAB : public CHeapObj { CompactibleFreeListSpace* _cfls; // Our local free lists. - FreeList _indexedFreeList[CompactibleFreeListSpace::IndexSetSize]; + AdaptiveFreeList _indexedFreeList[CompactibleFreeListSpace::IndexSetSize]; // Initialized from a command-line arg. @@ -634,7 +636,7 @@ class CFLS_LAB : public CHeapObj { size_t _num_blocks [CompactibleFreeListSpace::IndexSetSize]; // Internal work method - void get_from_global_pool(size_t word_sz, FreeList* fl); + void get_from_global_pool(size_t word_sz, AdaptiveFreeList* fl); public: CFLS_LAB(CompactibleFreeListSpace* cfls); diff --git a/hotspot/src/share/vm/gc_implementation/concurrentMarkSweep/concurrentMarkSweepGeneration.cpp b/hotspot/src/share/vm/gc_implementation/concurrentMarkSweep/concurrentMarkSweepGeneration.cpp index ac8b70017e0..475f2b8fee1 100644 --- a/hotspot/src/share/vm/gc_implementation/concurrentMarkSweep/concurrentMarkSweepGeneration.cpp +++ b/hotspot/src/share/vm/gc_implementation/concurrentMarkSweep/concurrentMarkSweepGeneration.cpp @@ -9143,7 +9143,7 @@ void ASConcurrentMarkSweepGeneration::shrink_by(size_t desired_bytes) { size_t shrinkable_size_in_bytes = chunk_at_end->size(); size_t aligned_shrinkable_size_in_bytes = align_size_down(shrinkable_size_in_bytes, os::vm_page_size()); - assert(unallocated_start <= chunk_at_end->end(), + assert(unallocated_start <= (HeapWord*) chunk_at_end->end(), "Inconsistent chunk at end of space"); size_t bytes = MIN2(desired_bytes, aligned_shrinkable_size_in_bytes); size_t word_size_before = heap_word_size(_virtual_space.committed_size()); @@ -9210,7 +9210,7 @@ void ASConcurrentMarkSweepGeneration::shrink_by(size_t desired_bytes) { assert(_cmsSpace->unallocated_block() <= _cmsSpace->end(), "Inconsistency at end of space"); - assert(chunk_at_end->end() == _cmsSpace->end(), + assert(chunk_at_end->end() == (uintptr_t*) _cmsSpace->end(), "Shrinking is inconsistent"); return; } diff --git a/hotspot/src/share/vm/gc_implementation/concurrentMarkSweep/freeChunk.hpp b/hotspot/src/share/vm/gc_implementation/concurrentMarkSweep/freeChunk.hpp index 21934bca81c..8376e8798d8 100644 --- a/hotspot/src/share/vm/gc_implementation/concurrentMarkSweep/freeChunk.hpp +++ b/hotspot/src/share/vm/gc_implementation/concurrentMarkSweep/freeChunk.hpp @@ -133,7 +133,7 @@ class FreeChunk VALUE_OBJ_CLASS_SPEC { } // Return the address past the end of this chunk - HeapWord* end() const { return ((HeapWord*) this) + size(); } + uintptr_t* end() const { return ((uintptr_t*) this) + size(); } // debugging void verify() const PRODUCT_RETURN; diff --git a/hotspot/src/share/vm/gc_implementation/concurrentMarkSweep/vmStructs_cms.hpp b/hotspot/src/share/vm/gc_implementation/concurrentMarkSweep/vmStructs_cms.hpp index c393a55285c..b722779b897 100644 --- a/hotspot/src/share/vm/gc_implementation/concurrentMarkSweep/vmStructs_cms.hpp +++ b/hotspot/src/share/vm/gc_implementation/concurrentMarkSweep/vmStructs_cms.hpp @@ -25,6 +25,8 @@ #ifndef SHARE_VM_GC_IMPLEMENTATION_CONCURRENTMARKSWEEP_VMSTRUCTS_CMS_HPP #define SHARE_VM_GC_IMPLEMENTATION_CONCURRENTMARKSWEEP_VMSTRUCTS_CMS_HPP +typedef BinaryTreeDictionary AFLBinaryTreeDictionary; + #define VM_STRUCTS_CMS(nonstatic_field, \ volatile_nonstatic_field, \ static_field) \ @@ -38,14 +40,8 @@ nonstatic_field(CMSCollector, _markBitMap, CMSBitMap) \ nonstatic_field(ConcurrentMarkSweepGeneration, _cmsSpace, CompactibleFreeListSpace*) \ static_field(ConcurrentMarkSweepThread, _collector, CMSCollector*) \ - volatile_nonstatic_field(FreeChunk, _size, size_t) \ - nonstatic_field(FreeChunk, _next, FreeChunk*) \ - nonstatic_field(FreeChunk, _prev, FreeChunk*) \ nonstatic_field(LinearAllocBlock, _word_size, size_t) \ - nonstatic_field(FreeList, _size, size_t) \ - nonstatic_field(FreeList, _count, ssize_t) \ - nonstatic_field(BinaryTreeDictionary,_total_size, size_t) \ - nonstatic_field(CompactibleFreeListSpace, _dictionary, FreeBlockDictionary*) \ + nonstatic_field(AFLBinaryTreeDictionary, _total_size, size_t) \ nonstatic_field(CompactibleFreeListSpace, _indexedFreeList[0], FreeList) \ nonstatic_field(CompactibleFreeListSpace, _smallLinearAllocBlock, LinearAllocBlock) @@ -60,19 +56,17 @@ declare_toplevel_type(CMSCollector) \ declare_toplevel_type(CMSBitMap) \ declare_toplevel_type(FreeChunk) \ + declare_toplevel_type(Metablock) \ declare_toplevel_type(ConcurrentMarkSweepThread*) \ declare_toplevel_type(ConcurrentMarkSweepGeneration*) \ declare_toplevel_type(SurrogateLockerThread*) \ declare_toplevel_type(CompactibleFreeListSpace*) \ declare_toplevel_type(CMSCollector*) \ - declare_toplevel_type(FreeChunk*) \ - declare_toplevel_type(BinaryTreeDictionary*) \ - declare_toplevel_type(FreeBlockDictionary*) \ - declare_toplevel_type(FreeList*) \ - declare_toplevel_type(FreeList) \ + declare_toplevel_type(AFLBinaryTreeDictionary*) \ declare_toplevel_type(LinearAllocBlock) \ declare_toplevel_type(FreeBlockDictionary) \ - declare_type(BinaryTreeDictionary, FreeBlockDictionary) + declare_type(AFLBinaryTreeDictionary, FreeBlockDictionary) \ + declare_type(AFLBinaryTreeDictionary, FreeBlockDictionary) \ #define VM_INT_CONSTANTS_CMS(declare_constant) \ declare_constant(Generation::ConcurrentMarkSweep) \ diff --git a/hotspot/src/share/vm/gc_implementation/shared/vmGCOperations.hpp b/hotspot/src/share/vm/gc_implementation/shared/vmGCOperations.hpp index 3966877e489..285ef97e378 100644 --- a/hotspot/src/share/vm/gc_implementation/shared/vmGCOperations.hpp +++ b/hotspot/src/share/vm/gc_implementation/shared/vmGCOperations.hpp @@ -191,7 +191,7 @@ class VM_GenCollectFull: public VM_GC_Operation { class VM_CollectForMetadataAllocation: public VM_GC_Operation { private: MetaWord* _result; - size_t _size; // size of object to be allocated + size_t _size; // size of object to be allocated Metaspace::MetadataType _mdtype; ClassLoaderData* _loader_data; public: diff --git a/hotspot/src/share/vm/interpreter/abstractInterpreter.hpp b/hotspot/src/share/vm/interpreter/abstractInterpreter.hpp index b0870c0f1e2..4dc2ef451c2 100644 --- a/hotspot/src/share/vm/interpreter/abstractInterpreter.hpp +++ b/hotspot/src/share/vm/interpreter/abstractInterpreter.hpp @@ -320,6 +320,7 @@ class AbstractInterpreterGenerator: public StackObj { void bang_stack_shadow_pages(bool native_call); void generate_all(); + void initialize_method_handle_entries(); public: AbstractInterpreterGenerator(StubQueue* _code); diff --git a/hotspot/src/share/vm/interpreter/bytecodeInterpreter.cpp b/hotspot/src/share/vm/interpreter/bytecodeInterpreter.cpp index 6c18761dba2..a9d6cc9a981 100644 --- a/hotspot/src/share/vm/interpreter/bytecodeInterpreter.cpp +++ b/hotspot/src/share/vm/interpreter/bytecodeInterpreter.cpp @@ -235,10 +235,6 @@ #endif #endif -// JavaStack Implementation -#define MORE_STACK(count) \ - (topOfStack -= ((count) * Interpreter::stackElementWords)) - #define UPDATE_PC(opsize) {pc += opsize; } /* @@ -575,7 +571,7 @@ BytecodeInterpreter::run(interpreterState istate) { /* 0xE0 */ &&opc_default, &&opc_default, &&opc_default, &&opc_default, /* 0xE4 */ &&opc_default, &&opc_fast_aldc, &&opc_fast_aldc_w, &&opc_return_register_finalizer, -/* 0xE8 */ &&opc_default, &&opc_default, &&opc_default, &&opc_default, +/* 0xE8 */ &&opc_invokehandle,&&opc_default, &&opc_default, &&opc_default, /* 0xEC */ &&opc_default, &&opc_default, &&opc_default, &&opc_default, /* 0xF0 */ &&opc_default, &&opc_default, &&opc_default, &&opc_default, @@ -1773,7 +1769,7 @@ run: oop obj; if ((Bytecodes::Code)opcode == Bytecodes::_getstatic) { - Klass* k = (Klass*) cache->f1(); + Klass* k = cache->f1_as_klass(); obj = k->java_mirror(); MORE_STACK(1); // Assume single slot push } else { @@ -1885,7 +1881,7 @@ run: --count; } if ((Bytecodes::Code)opcode == Bytecodes::_putstatic) { - Klass* k = (Klass*) cache->f1(); + Klass* k = cache->f1_as_klass(); obj = k->java_mirror(); } else { --count; @@ -2190,6 +2186,7 @@ run: } CASE(_invokedynamic): { + if (!EnableInvokeDynamic) { // We should not encounter this bytecode if !EnableInvokeDynamic. // The verifier will stop it. However, if we get past the verifier, @@ -2199,30 +2196,68 @@ run: ShouldNotReachHere(); } - int index = Bytes::get_native_u4(pc+1); + u4 index = Bytes::get_native_u4(pc+1); + ConstantPoolCacheEntry* cache = cp->constant_pool()->invokedynamic_cp_cache_entry_at(index); // We are resolved if the resolved_references field contains a non-null object (CallSite, etc.) // This kind of CP cache entry does not need to match the flags byte, because // there is a 1-1 relation between bytecode type and CP entry type. - ConstantPool* constants = METHOD->constants(); - oop result = constants->resolved_references()->obj_at(index); - if (result == NULL) { + if (! cache->is_resolved((Bytecodes::Code) opcode)) { CALL_VM(InterpreterRuntime::resolve_invokedynamic(THREAD), handle_exception); - result = THREAD->vm_result(); + cache = cp->constant_pool()->invokedynamic_cp_cache_entry_at(index); } - VERIFY_OOP(result); - oop method_handle = java_lang_invoke_CallSite::target(result); - CHECK_NULL(method_handle); + Method* method = cache->f1_as_method(); + VERIFY_OOP(method); - istate->set_msg(call_method_handle); - istate->set_callee((Method*) method_handle); + if (cache->has_appendix()) { + ConstantPool* constants = METHOD->constants(); + SET_STACK_OBJECT(cache->appendix_if_resolved(constants), 0); + MORE_STACK(1); + } + + istate->set_msg(call_method); + istate->set_callee(method); + istate->set_callee_entry_point(method->from_interpreted_entry()); istate->set_bcp_advance(5); UPDATE_PC_AND_RETURN(0); // I'll be back... } + CASE(_invokehandle): { + + if (!EnableInvokeDynamic) { + ShouldNotReachHere(); + } + + u2 index = Bytes::get_native_u2(pc+1); + ConstantPoolCacheEntry* cache = cp->entry_at(index); + + if (! cache->is_resolved((Bytecodes::Code) opcode)) { + CALL_VM(InterpreterRuntime::resolve_invokehandle(THREAD), + handle_exception); + cache = cp->entry_at(index); + } + + Method* method = cache->f1_as_method(); + + VERIFY_OOP(method); + + if (cache->has_appendix()) { + ConstantPool* constants = METHOD->constants(); + SET_STACK_OBJECT(cache->appendix_if_resolved(constants), 0); + MORE_STACK(1); + } + + istate->set_msg(call_method); + istate->set_callee(method); + istate->set_callee_entry_point(method->from_interpreted_entry()); + istate->set_bcp_advance(3); + + UPDATE_PC_AND_RETURN(0); // I'll be back... + } + CASE(_invokeinterface): { u2 index = Bytes::get_native_u2(pc+1); diff --git a/hotspot/src/share/vm/interpreter/bytecodeInterpreter.hpp b/hotspot/src/share/vm/interpreter/bytecodeInterpreter.hpp index c1614cdf8e5..d528034d3f0 100644 --- a/hotspot/src/share/vm/interpreter/bytecodeInterpreter.hpp +++ b/hotspot/src/share/vm/interpreter/bytecodeInterpreter.hpp @@ -50,6 +50,10 @@ #ifdef CC_INTERP +// JavaStack Implementation +#define MORE_STACK(count) \ + (topOfStack -= ((count) * Interpreter::stackElementWords)) + // CVM definitions find hotspot equivalents... union VMJavaVal64 { @@ -107,7 +111,6 @@ public: rethrow_exception, // unwinding and throwing exception // requests to frame manager from C++ interpreter call_method, // request for new frame from interpreter, manager responds with method_entry - call_method_handle, // like the above, except the callee is a method handle return_from_method, // request from interpreter to unwind, manager responds with method_continue more_monitors, // need a new monitor throwing_exception, // unwind stack and rethrow diff --git a/hotspot/src/share/vm/interpreter/cppInterpreter.cpp b/hotspot/src/share/vm/interpreter/cppInterpreter.cpp index 9a6669519f6..0007aa8be25 100644 --- a/hotspot/src/share/vm/interpreter/cppInterpreter.cpp +++ b/hotspot/src/share/vm/interpreter/cppInterpreter.cpp @@ -117,7 +117,6 @@ void CppInterpreterGenerator::generate_all() { method_entry(empty); method_entry(accessor); method_entry(abstract); - method_entry(method_handle); method_entry(java_lang_math_sin ); method_entry(java_lang_math_cos ); method_entry(java_lang_math_tan ); @@ -125,7 +124,12 @@ void CppInterpreterGenerator::generate_all() { method_entry(java_lang_math_sqrt ); method_entry(java_lang_math_log ); method_entry(java_lang_math_log10 ); + method_entry(java_lang_math_pow ); + method_entry(java_lang_math_exp ); method_entry(java_lang_ref_reference_get); + + initialize_method_handle_entries(); + Interpreter::_native_entry_begin = Interpreter::code()->code_end(); method_entry(native); method_entry(native_synchronized); diff --git a/hotspot/src/share/vm/interpreter/interpreter.cpp b/hotspot/src/share/vm/interpreter/interpreter.cpp index dad8f9ec751..4513eebb79c 100644 --- a/hotspot/src/share/vm/interpreter/interpreter.cpp +++ b/hotspot/src/share/vm/interpreter/interpreter.cpp @@ -464,3 +464,11 @@ void AbstractInterpreterGenerator::bang_stack_shadow_pages(bool native_call) { } } } + +void AbstractInterpreterGenerator::initialize_method_handle_entries() { + // method handle entry kinds are generated later in MethodHandlesAdapterGenerator::generate: + for (int i = Interpreter::method_handle_invoke_FIRST; i <= Interpreter::method_handle_invoke_LAST; i++) { + Interpreter::MethodKind kind = (Interpreter::MethodKind) i; + Interpreter::_entry_table[kind] = Interpreter::_entry_table[Interpreter::abstract]; + } +} diff --git a/hotspot/src/share/vm/interpreter/templateInterpreter.cpp b/hotspot/src/share/vm/interpreter/templateInterpreter.cpp index beb99fa15e4..53e50b1c7fe 100644 --- a/hotspot/src/share/vm/interpreter/templateInterpreter.cpp +++ b/hotspot/src/share/vm/interpreter/templateInterpreter.cpp @@ -373,11 +373,7 @@ void TemplateInterpreterGenerator::generate_all() { method_entry(java_lang_math_pow ) method_entry(java_lang_ref_reference_get) - // method handle entry kinds are generated later in MethodHandlesAdapterGenerator::generate: - for (int i = Interpreter::method_handle_invoke_FIRST; i <= Interpreter::method_handle_invoke_LAST; i++) { - Interpreter::MethodKind kind = (Interpreter::MethodKind) i; - Interpreter::_entry_table[kind] = Interpreter::_entry_table[Interpreter::abstract]; - } + initialize_method_handle_entries(); // all native method kinds (must be one contiguous block) Interpreter::_native_entry_begin = Interpreter::code()->code_end(); diff --git a/hotspot/src/share/vm/memory/allocation.cpp b/hotspot/src/share/vm/memory/allocation.cpp index 56c7b63fbe5..92b335b105a 100644 --- a/hotspot/src/share/vm/memory/allocation.cpp +++ b/hotspot/src/share/vm/memory/allocation.cpp @@ -433,19 +433,18 @@ Arena::Arena() { NOT_PRODUCT(Atomic::inc(&_instance_count);) } -Arena::Arena(Arena *a) : _chunk(a->_chunk), _hwm(a->_hwm), _max(a->_max), _first(a->_first) { - set_size_in_bytes(a->size_in_bytes()); - NOT_PRODUCT(Atomic::inc(&_instance_count);) -} - - Arena *Arena::move_contents(Arena *copy) { copy->destruct_contents(); copy->_chunk = _chunk; copy->_hwm = _hwm; copy->_max = _max; copy->_first = _first; - copy->set_size_in_bytes(size_in_bytes()); + + // workaround rare racing condition, which could double count + // the arena size by native memory tracking + size_t size = size_in_bytes(); + set_size_in_bytes(0); + copy->set_size_in_bytes(size); // Destroy original arena reset(); return copy; // Return Arena with contents @@ -497,6 +496,9 @@ void Arena::destruct_contents() { char* end = _first->next() ? _first->top() : _hwm; free_malloced_objects(_first, _first->bottom(), end, _hwm); } + // reset size before chop to avoid a rare racing condition + // that can have total arena memory exceed total chunk memory + set_size_in_bytes(0); _first->chop(); reset(); } diff --git a/hotspot/src/share/vm/memory/allocation.hpp b/hotspot/src/share/vm/memory/allocation.hpp index 30662b8e5da..892e50ddc0a 100644 --- a/hotspot/src/share/vm/memory/allocation.hpp +++ b/hotspot/src/share/vm/memory/allocation.hpp @@ -144,8 +144,10 @@ enum MemoryType { mtNMT = 0x0A00, // memory used by native memory tracking mtChunk = 0x0B00, // chunk that holds content of arenas mtJavaHeap = 0x0C00, // Java heap - mtDontTrack = 0x0D00, // memory we donot or cannot track - mt_number_of_types = 0x000C, // number of memory types + mtClassShared = 0x0D00, // class data sharing + mt_number_of_types = 0x000D, // number of memory types (mtDontTrack + // is not included as validate type) + mtDontTrack = 0x0E00, // memory we do not or cannot track mt_masks = 0x7F00, // object type mask @@ -342,7 +344,6 @@ protected: public: Arena(); Arena(size_t init_size); - Arena(Arena *old); ~Arena(); void destruct_contents(); char* hwm() const { return _hwm; } diff --git a/hotspot/src/share/vm/memory/binaryTreeDictionary.cpp b/hotspot/src/share/vm/memory/binaryTreeDictionary.cpp index 08a9b033432..f79d149f1e5 100644 --- a/hotspot/src/share/vm/memory/binaryTreeDictionary.cpp +++ b/hotspot/src/share/vm/memory/binaryTreeDictionary.cpp @@ -25,9 +25,15 @@ #include "precompiled.hpp" #include "gc_implementation/shared/allocationStats.hpp" #include "memory/binaryTreeDictionary.hpp" +#include "memory/freeList.hpp" +#include "memory/freeBlockDictionary.hpp" +#include "memory/metablock.hpp" +#include "memory/metachunk.hpp" #include "runtime/globals.hpp" #include "utilities/ostream.hpp" #ifndef SERIALGC +#include "gc_implementation/concurrentMarkSweep/adaptiveFreeList.hpp" +#include "gc_implementation/concurrentMarkSweep/freeChunk.hpp" #include "gc_implementation/shared/spaceDecorator.hpp" #include "gc_implementation/concurrentMarkSweep/freeChunk.hpp" #endif // SERIALGC @@ -37,15 +43,18 @@ // This is currently used in the Concurrent Mark&Sweep implementation. //////////////////////////////////////////////////////////////////////////////// -template -TreeChunk* TreeChunk::as_TreeChunk(Chunk* fc) { +template class FreeList_t> +size_t TreeChunk::_min_tree_chunk_size = sizeof(TreeChunk)/HeapWordSize; + +template class FreeList_t> +TreeChunk* TreeChunk::as_TreeChunk(Chunk_t* fc) { // Do some assertion checking here. - return (TreeChunk*) fc; + return (TreeChunk*) fc; } -template -void TreeChunk::verify_tree_chunk_list() const { - TreeChunk* nextTC = (TreeChunk*)next(); +template class FreeList_t> +void TreeChunk::verify_tree_chunk_list() const { + TreeChunk* nextTC = (TreeChunk*)next(); if (prev() != NULL) { // interior list node shouldn'r have tree fields guarantee(embedded_list()->parent() == NULL && embedded_list()->left() == NULL && embedded_list()->right() == NULL, "should be clear"); @@ -57,53 +66,113 @@ void TreeChunk::verify_tree_chunk_list() const { } } +template class FreeList_t> +TreeList::TreeList() {} -template -TreeList* TreeList::as_TreeList(TreeChunk* tc) { +template class FreeList_t> +TreeList* +TreeList::as_TreeList(TreeChunk* tc) { // This first free chunk in the list will be the tree list. - assert(tc->size() >= BinaryTreeDictionary::min_tree_chunk_size, "Chunk is too small for a TreeChunk"); - TreeList* tl = tc->embedded_list(); + assert((tc->size() >= (TreeChunk::min_size())), + "Chunk is too small for a TreeChunk"); + TreeList* tl = tc->embedded_list(); + tl->initialize(); tc->set_list(tl); -#ifdef ASSERT - tl->set_protecting_lock(NULL); -#endif - tl->set_hint(0); tl->set_size(tc->size()); tl->link_head(tc); tl->link_tail(tc); tl->set_count(1); - tl->init_statistics(true /* split_birth */); - tl->set_parent(NULL); - tl->set_left(NULL); - tl->set_right(NULL); + return tl; } -template -TreeList* TreeList::as_TreeList(HeapWord* addr, size_t size) { - TreeChunk* tc = (TreeChunk*) addr; - assert(size >= BinaryTreeDictionary::min_tree_chunk_size, "Chunk is too small for a TreeChunk"); - // The space in the heap will have been mangled initially but - // is not remangled when a free chunk is returned to the free list + +template class FreeList_t> +TreeList* +get_chunk(size_t size, enum FreeBlockDictionary::Dither dither) { + FreeBlockDictionary::verify_par_locked(); + Chunk_t* res = get_chunk_from_tree(size, dither); + assert(res == NULL || res->is_free(), + "Should be returning a free chunk"); + assert(dither != FreeBlockDictionary::exactly || + res->size() == size, "Not correct size"); + return res; +} + +template class FreeList_t> +TreeList* +TreeList::as_TreeList(HeapWord* addr, size_t size) { + TreeChunk* tc = (TreeChunk*) addr; + assert((size >= TreeChunk::min_size()), + "Chunk is too small for a TreeChunk"); + // The space will have been mangled initially but + // is not remangled when a Chunk_t is returned to the free list // (since it is used to maintain the chunk on the free list). - assert((ZapUnusedHeapArea && - SpaceMangler::is_mangled((HeapWord*) tc->size_addr()) && - SpaceMangler::is_mangled((HeapWord*) tc->prev_addr()) && - SpaceMangler::is_mangled((HeapWord*) tc->next_addr())) || - (tc->size() == 0 && tc->prev() == NULL && tc->next() == NULL), - "Space should be clear or mangled"); + tc->assert_is_mangled(); tc->set_size(size); tc->link_prev(NULL); tc->link_next(NULL); - TreeList* tl = TreeList::as_TreeList(tc); + TreeList* tl = TreeList::as_TreeList(tc); return tl; } -template -TreeList* TreeList::remove_chunk_replace_if_needed(TreeChunk* tc) { - TreeList* retTL = this; - Chunk* list = head(); +#ifndef SERIALGC +// Specialize for AdaptiveFreeList which tries to avoid +// splitting a chunk of a size that is under populated in favor of +// an over populated size. The general get_better_list() just returns +// the current list. +template <> +TreeList* +TreeList::get_better_list( + BinaryTreeDictionary* dictionary) { + // A candidate chunk has been found. If it is already under + // populated, get a chunk associated with the hint for this + // chunk. + + TreeList* curTL = this; + if (surplus() <= 0) { + /* Use the hint to find a size with a surplus, and reset the hint. */ + TreeList* hintTL = this; + while (hintTL->hint() != 0) { + assert(hintTL->hint() > hintTL->size(), + "hint points in the wrong direction"); + hintTL = dictionary->find_list(hintTL->hint()); + assert(curTL != hintTL, "Infinite loop"); + if (hintTL == NULL || + hintTL == curTL /* Should not happen but protect against it */ ) { + // No useful hint. Set the hint to NULL and go on. + curTL->set_hint(0); + break; + } + assert(hintTL->size() > curTL->size(), "hint is inconsistent"); + if (hintTL->surplus() > 0) { + // The hint led to a list that has a surplus. Use it. + // Set the hint for the candidate to an overpopulated + // size. + curTL->set_hint(hintTL->size()); + // Change the candidate. + curTL = hintTL; + break; + } + } + } + return curTL; +} +#endif // SERIALGC + +template class FreeList_t> +TreeList* +TreeList::get_better_list( + BinaryTreeDictionary* dictionary) { + return this; +} + +template class FreeList_t> +TreeList* TreeList::remove_chunk_replace_if_needed(TreeChunk* tc) { + + TreeList* retTL = this; + Chunk_t* list = head(); assert(!list || list != list->next(), "Chunk on list twice"); assert(tc != NULL, "Chunk being removed is NULL"); assert(parent() == NULL || this == parent()->left() || @@ -112,13 +181,13 @@ TreeList* TreeList::remove_chunk_replace_if_needed(TreeChunkprev() == NULL, "list invariant"); assert(tail() == NULL || tail()->next() == NULL, "list invariant"); - Chunk* prevFC = tc->prev(); - TreeChunk* nextTC = TreeChunk::as_TreeChunk(tc->next()); + Chunk_t* prevFC = tc->prev(); + TreeChunk* nextTC = TreeChunk::as_TreeChunk(tc->next()); assert(list != NULL, "should have at least the target chunk"); // Is this the first item on the list? if (tc == list) { - // The "getChunk..." functions for a TreeList will not return the + // The "getChunk..." functions for a TreeList will not return the // first chunk in the list unless it is the last chunk in the list // because the first chunk is also acting as the tree node. // When coalescing happens, however, the first chunk in the a tree @@ -127,8 +196,8 @@ TreeList* TreeList::remove_chunk_replace_if_needed(TreeChunk from the first chunk to the next chunk and update all - // the TreeList pointers in the chunks in the list. + // TreeList from the first chunk to the next chunk and update all + // the TreeList pointers in the chunks in the list. if (nextTC == NULL) { assert(prevFC == NULL, "Not last chunk in the list"); set_tail(NULL); @@ -141,11 +210,11 @@ TreeList* TreeList::remove_chunk_replace_if_needed(TreeChunk* curTC = nextTC; curTC != NULL; - curTC = TreeChunk::as_TreeChunk(curTC->next())) { + for (TreeChunk* curTC = nextTC; curTC != NULL; + curTC = TreeChunk::as_TreeChunk(curTC->next())) { curTC->set_list(retTL); } - // Fix the parent to point to the new TreeList. + // Fix the parent to point to the new TreeList. if (retTL->parent() != NULL) { if (this == retTL->parent()->left()) { retTL->parent()->set_left(retTL); @@ -176,9 +245,9 @@ TreeList* TreeList::remove_chunk_replace_if_needed(TreeChunklink_after(nextTC); } - // Below this point the embeded TreeList being used for the + // Below this point the embeded TreeList being used for the // tree node may have changed. Don't use "this" - // TreeList*. + // TreeList*. // chunk should still be a free chunk (bit set in _prev) assert(!retTL->head() || retTL->size() == retTL->head()->size(), "Wrong sized chunk in list"); @@ -188,7 +257,7 @@ TreeList* TreeList::remove_chunk_replace_if_needed(TreeChunkset_list(NULL); bool prev_found = false; bool next_found = false; - for (Chunk* curFC = retTL->head(); + for (Chunk_t* curFC = retTL->head(); curFC != NULL; curFC = curFC->next()) { assert(curFC != tc, "Chunk is still in list"); if (curFC == prevFC) { @@ -215,8 +284,8 @@ TreeList* TreeList::remove_chunk_replace_if_needed(TreeChunk -void TreeList::return_chunk_at_tail(TreeChunk* chunk) { +template class FreeList_t> +void TreeList::return_chunk_at_tail(TreeChunk* chunk) { assert(chunk != NULL, "returning NULL chunk"); assert(chunk->list() == this, "list should be set for chunk"); assert(tail() != NULL, "The tree list is embedded in the first chunk"); @@ -225,12 +294,12 @@ void TreeList::return_chunk_at_tail(TreeChunk* chunk) { assert(head() == NULL || head()->prev() == NULL, "list invariant"); assert(tail() == NULL || tail()->next() == NULL, "list invariant"); - Chunk* fc = tail(); + Chunk_t* fc = tail(); fc->link_after(chunk); link_tail(chunk); assert(!tail() || size() == tail()->size(), "Wrong sized chunk in list"); - increment_count(); + FreeList_t::increment_count(); debug_only(increment_returned_bytes_by(chunk->size()*sizeof(HeapWord));) assert(head() == NULL || head()->prev() == NULL, "list invariant"); assert(tail() == NULL || tail()->next() == NULL, "list invariant"); @@ -238,10 +307,10 @@ void TreeList::return_chunk_at_tail(TreeChunk* chunk) { // Add this chunk at the head of the list. "At the head of the list" // is defined to be after the chunk pointer to by head(). This is -// because the TreeList is embedded in the first TreeChunk in the -// list. See the definition of TreeChunk. -template -void TreeList::return_chunk_at_head(TreeChunk* chunk) { +// because the TreeList is embedded in the first TreeChunk in the +// list. See the definition of TreeChunk. +template class FreeList_t> +void TreeList::return_chunk_at_head(TreeChunk* chunk) { assert(chunk->list() == this, "list should be set for chunk"); assert(head() != NULL, "The tree list is embedded in the first chunk"); assert(chunk != NULL, "returning NULL chunk"); @@ -249,7 +318,7 @@ void TreeList::return_chunk_at_head(TreeChunk* chunk) { assert(head() == NULL || head()->prev() == NULL, "list invariant"); assert(tail() == NULL || tail()->next() == NULL, "list invariant"); - Chunk* fc = head()->next(); + Chunk_t* fc = head()->next(); if (fc != NULL) { chunk->link_after(fc); } else { @@ -258,28 +327,38 @@ void TreeList::return_chunk_at_head(TreeChunk* chunk) { } head()->link_after(chunk); assert(!head() || size() == head()->size(), "Wrong sized chunk in list"); - increment_count(); + FreeList_t::increment_count(); debug_only(increment_returned_bytes_by(chunk->size()*sizeof(HeapWord));) assert(head() == NULL || head()->prev() == NULL, "list invariant"); assert(tail() == NULL || tail()->next() == NULL, "list invariant"); } -template -TreeChunk* TreeList::head_as_TreeChunk() { - assert(head() == NULL || TreeChunk::as_TreeChunk(head())->list() == this, - "Wrong type of chunk?"); - return TreeChunk::as_TreeChunk(head()); +template class FreeList_t> +void TreeChunk::assert_is_mangled() const { + assert((ZapUnusedHeapArea && + SpaceMangler::is_mangled((HeapWord*) Chunk_t::size_addr()) && + SpaceMangler::is_mangled((HeapWord*) Chunk_t::prev_addr()) && + SpaceMangler::is_mangled((HeapWord*) Chunk_t::next_addr())) || + (size() == 0 && prev() == NULL && next() == NULL), + "Space should be clear or mangled"); } -template -TreeChunk* TreeList::first_available() { +template class FreeList_t> +TreeChunk* TreeList::head_as_TreeChunk() { + assert(head() == NULL || (TreeChunk::as_TreeChunk(head())->list() == this), + "Wrong type of chunk?"); + return TreeChunk::as_TreeChunk(head()); +} + +template class FreeList_t> +TreeChunk* TreeList::first_available() { assert(head() != NULL, "The head of the list cannot be NULL"); - Chunk* fc = head()->next(); - TreeChunk* retTC; + Chunk_t* fc = head()->next(); + TreeChunk* retTC; if (fc == NULL) { retTC = head_as_TreeChunk(); } else { - retTC = TreeChunk::as_TreeChunk(fc); + retTC = TreeChunk::as_TreeChunk(fc); } assert(retTC->list() == this, "Wrong type of chunk."); return retTC; @@ -288,41 +367,32 @@ TreeChunk* TreeList::first_available() { // Returns the block with the largest heap address amongst // those in the list for this size; potentially slow and expensive, // use with caution! -template -TreeChunk* TreeList::largest_address() { +template class FreeList_t> +TreeChunk* TreeList::largest_address() { assert(head() != NULL, "The head of the list cannot be NULL"); - Chunk* fc = head()->next(); - TreeChunk* retTC; + Chunk_t* fc = head()->next(); + TreeChunk* retTC; if (fc == NULL) { retTC = head_as_TreeChunk(); } else { // walk down the list and return the one with the highest // heap address among chunks of this size. - Chunk* last = fc; + Chunk_t* last = fc; while (fc->next() != NULL) { if ((HeapWord*)last < (HeapWord*)fc) { last = fc; } fc = fc->next(); } - retTC = TreeChunk::as_TreeChunk(last); + retTC = TreeChunk::as_TreeChunk(last); } assert(retTC->list() == this, "Wrong type of chunk."); return retTC; } -template -BinaryTreeDictionary::BinaryTreeDictionary(bool adaptive_freelists, bool splay) : - _splay(splay), _adaptive_freelists(adaptive_freelists), - _total_size(0), _total_free_blocks(0), _root(0) {} - -template -BinaryTreeDictionary::BinaryTreeDictionary(MemRegion mr, - bool adaptive_freelists, - bool splay): - _adaptive_freelists(adaptive_freelists), _splay(splay) -{ - assert(mr.word_size() >= BinaryTreeDictionary::min_tree_chunk_size, "minimum chunk size"); +template class FreeList_t> +BinaryTreeDictionary::BinaryTreeDictionary(MemRegion mr) { + assert((mr.byte_size() > min_size()), "minimum chunk size"); reset(mr); assert(root()->left() == NULL, "reset check failed"); @@ -333,52 +403,48 @@ BinaryTreeDictionary::BinaryTreeDictionary(MemRegion mr, assert(total_free_blocks() == 1, "reset check failed"); } -template -void BinaryTreeDictionary::inc_total_size(size_t inc) { +template class FreeList_t> +void BinaryTreeDictionary::inc_total_size(size_t inc) { _total_size = _total_size + inc; } -template -void BinaryTreeDictionary::dec_total_size(size_t dec) { +template class FreeList_t> +void BinaryTreeDictionary::dec_total_size(size_t dec) { _total_size = _total_size - dec; } -template -void BinaryTreeDictionary::reset(MemRegion mr) { - assert(mr.word_size() >= BinaryTreeDictionary::min_tree_chunk_size, "minimum chunk size"); - set_root(TreeList::as_TreeList(mr.start(), mr.word_size())); +template class FreeList_t> +void BinaryTreeDictionary::reset(MemRegion mr) { + assert((mr.byte_size() > min_size()), "minimum chunk size"); + set_root(TreeList::as_TreeList(mr.start(), mr.word_size())); set_total_size(mr.word_size()); set_total_free_blocks(1); } -template -void BinaryTreeDictionary::reset(HeapWord* addr, size_t byte_size) { +template class FreeList_t> +void BinaryTreeDictionary::reset(HeapWord* addr, size_t byte_size) { MemRegion mr(addr, heap_word_size(byte_size)); reset(mr); } -template -void BinaryTreeDictionary::reset() { +template class FreeList_t> +void BinaryTreeDictionary::reset() { set_root(NULL); set_total_size(0); set_total_free_blocks(0); } // Get a free block of size at least size from tree, or NULL. -// If a splay step is requested, the removal algorithm (only) incorporates -// a splay step as follows: -// . the search proceeds down the tree looking for a possible -// match. At the (closest) matching location, an appropriate splay step is applied -// (zig, zig-zig or zig-zag). A chunk of the appropriate size is then returned -// if available, and if it's the last chunk, the node is deleted. A deteleted -// node is replaced in place by its tree successor. -template -TreeChunk* -BinaryTreeDictionary::get_chunk_from_tree(size_t size, enum FreeBlockDictionary::Dither dither, bool splay) +template class FreeList_t> +TreeChunk* +BinaryTreeDictionary::get_chunk_from_tree( + size_t size, + enum FreeBlockDictionary::Dither dither) { - TreeList *curTL, *prevTL; - TreeChunk* retTC = NULL; - assert(size >= BinaryTreeDictionary::min_tree_chunk_size, "minimum chunk size"); + TreeList *curTL, *prevTL; + TreeChunk* retTC = NULL; + + assert((size >= min_size()), "minimum chunk size"); if (FLSVerifyDictionary) { verify_tree(); } @@ -398,7 +464,7 @@ BinaryTreeDictionary::get_chunk_from_tree(size_t size, enum FreeBlockDict } if (curTL == NULL) { // couldn't find exact match - if (dither == FreeBlockDictionary::exactly) return NULL; + if (dither == FreeBlockDictionary::exactly) return NULL; // try and find the next larger size by walking back up the search path for (curTL = prevTL; curTL != NULL;) { @@ -410,46 +476,9 @@ BinaryTreeDictionary::get_chunk_from_tree(size_t size, enum FreeBlockDict } if (curTL != NULL) { assert(curTL->size() >= size, "size inconsistency"); - if (adaptive_freelists()) { - // A candidate chunk has been found. If it is already under - // populated, get a chunk associated with the hint for this - // chunk. - if (curTL->surplus() <= 0) { - /* Use the hint to find a size with a surplus, and reset the hint. */ - TreeList* hintTL = curTL; - while (hintTL->hint() != 0) { - assert(hintTL->hint() == 0 || hintTL->hint() > hintTL->size(), - "hint points in the wrong direction"); - hintTL = find_list(hintTL->hint()); - assert(curTL != hintTL, "Infinite loop"); - if (hintTL == NULL || - hintTL == curTL /* Should not happen but protect against it */ ) { - // No useful hint. Set the hint to NULL and go on. - curTL->set_hint(0); - break; - } - assert(hintTL->size() > size, "hint is inconsistent"); - if (hintTL->surplus() > 0) { - // The hint led to a list that has a surplus. Use it. - // Set the hint for the candidate to an overpopulated - // size. - curTL->set_hint(hintTL->size()); - // Change the candidate. - curTL = hintTL; - break; - } - // The evm code reset the hint of the candidate as - // at an interim point. Why? Seems like this leaves - // the hint pointing to a list that didn't work. - // curTL->set_hint(hintTL->size()); - } - } - } - // don't waste time splaying if chunk's singleton - if (splay && curTL->head()->next() != NULL) { - semi_splay_step(curTL); - } + curTL = curTL->get_better_list(this); + retTC = curTL->first_available(); assert((retTC != NULL) && (curTL->count() > 0), "A list in the binary tree should not be NULL"); @@ -465,9 +494,9 @@ BinaryTreeDictionary::get_chunk_from_tree(size_t size, enum FreeBlockDict return retTC; } -template -TreeList* BinaryTreeDictionary::find_list(size_t size) const { - TreeList* curTL; +template class FreeList_t> +TreeList* BinaryTreeDictionary::find_list(size_t size) const { + TreeList* curTL; for (curTL = root(); curTL != NULL;) { if (curTL->size() == size) { // exact match break; @@ -484,10 +513,10 @@ TreeList* BinaryTreeDictionary::find_list(size_t size) const { } -template -bool BinaryTreeDictionary::verify_chunk_in_free_list(Chunk* tc) const { +template class FreeList_t> +bool BinaryTreeDictionary::verify_chunk_in_free_list(Chunk_t* tc) const { size_t size = tc->size(); - TreeList* tl = find_list(size); + TreeList* tl = find_list(size); if (tl == NULL) { return false; } else { @@ -495,9 +524,9 @@ bool BinaryTreeDictionary::verify_chunk_in_free_list(Chunk* tc) const { } } -template -Chunk* BinaryTreeDictionary::find_largest_dict() const { - TreeList *curTL = root(); +template class FreeList_t> +Chunk_t* BinaryTreeDictionary::find_largest_dict() const { + TreeList *curTL = root(); if (curTL != NULL) { while(curTL->right() != NULL) curTL = curTL->right(); return curTL->largest_address(); @@ -510,15 +539,15 @@ Chunk* BinaryTreeDictionary::find_largest_dict() const { // chunk in a list on a tree node, just unlink it. // If it is the last chunk in the list (the next link is NULL), // remove the node and repair the tree. -template -TreeChunk* -BinaryTreeDictionary::remove_chunk_from_tree(TreeChunk* tc) { +template class FreeList_t> +TreeChunk* +BinaryTreeDictionary::remove_chunk_from_tree(TreeChunk* tc) { assert(tc != NULL, "Should not call with a NULL chunk"); assert(tc->is_free(), "Header is not marked correctly"); - TreeList *newTL, *parentTL; - TreeChunk* retTC; - TreeList* tl = tc->list(); + TreeList *newTL, *parentTL; + TreeChunk* retTC; + TreeList* tl = tc->list(); debug_only( bool removing_only_chunk = false; if (tl == _root) { @@ -538,8 +567,8 @@ BinaryTreeDictionary::remove_chunk_from_tree(TreeChunk* tc) { retTC = tc; // Removing this chunk can have the side effect of changing the node - // (TreeList*) in the tree. If the node is the root, update it. - TreeList* replacementTL = tl->remove_chunk_replace_if_needed(tc); + // (TreeList*) in the tree. If the node is the root, update it. + TreeList* replacementTL = tl->remove_chunk_replace_if_needed(tc); assert(tc->is_free(), "Chunk should still be free"); assert(replacementTL->parent() == NULL || replacementTL == replacementTL->parent()->left() || @@ -549,17 +578,18 @@ BinaryTreeDictionary::remove_chunk_from_tree(TreeChunk* tc) { assert(replacementTL->parent() == NULL, "Incorrectly replacing root"); set_root(replacementTL); } - debug_only( +#ifdef ASSERT if (tl != replacementTL) { assert(replacementTL->head() != NULL, "If the tree list was replaced, it should not be a NULL list"); - TreeList* rhl = replacementTL->head_as_TreeChunk()->list(); - TreeList* rtl = TreeChunk::as_TreeChunk(replacementTL->tail())->list(); + TreeList* rhl = replacementTL->head_as_TreeChunk()->list(); + TreeList* rtl = + TreeChunk::as_TreeChunk(replacementTL->tail())->list(); assert(rhl == replacementTL, "Broken head"); assert(rtl == replacementTL, "Broken tail"); assert(replacementTL->size() == tc->size(), "Broken size"); } - ) +#endif // Does the tree need to be repaired? if (replacementTL->count() == 0) { @@ -574,7 +604,7 @@ BinaryTreeDictionary::remove_chunk_from_tree(TreeChunk* tc) { } else if (replacementTL->right() == NULL) { // right is NULL newTL = replacementTL->left(); - debug_only(replacementTL->clearLeft();) + debug_only(replacementTL->clear_left();) } else { // we have both children, so, by patriarchal convention, // my replacement is least node in right sub-tree complicated_splice = true; @@ -623,7 +653,7 @@ BinaryTreeDictionary::remove_chunk_from_tree(TreeChunk* tc) { newTL->set_right(replacementTL->right()); debug_only( replacementTL->clear_right(); - replacementTL->clearLeft(); + replacementTL->clear_left(); ) } assert(replacementTL->right() == NULL && @@ -644,21 +674,21 @@ BinaryTreeDictionary::remove_chunk_from_tree(TreeChunk* tc) { verify_tree(); } assert(!removing_only_chunk || _root == NULL, "root should be NULL"); - return TreeChunk::as_TreeChunk(retTC); + return TreeChunk::as_TreeChunk(retTC); } // Remove the leftmost node (lm) in the tree and return it. // If lm has a right child, link it to the left node of // the parent of lm. -template -TreeList* BinaryTreeDictionary::remove_tree_minimum(TreeList* tl) { +template class FreeList_t> +TreeList* BinaryTreeDictionary::remove_tree_minimum(TreeList* tl) { assert(tl != NULL && tl->parent() != NULL, "really need a proper sub-tree"); // locate the subtree minimum by walking down left branches - TreeList* curTL = tl; + TreeList* curTL = tl; for (; curTL->left() != NULL; curTL = curTL->left()); // obviously curTL now has at most one child, a right child if (curTL != root()) { // Should this test just be removed? - TreeList* parentTL = curTL->parent(); + TreeList* parentTL = curTL->parent(); if (parentTL->left() == curTL) { // curTL is a left child parentTL->set_left(curTL->right()); } else { @@ -685,31 +715,14 @@ TreeList* BinaryTreeDictionary::remove_tree_minimum(TreeList -void BinaryTreeDictionary::semi_splay_step(TreeList* tc) { - // apply a semi-splay step at the given node: - // . if root, norting needs to be done - // . if child of root, splay once - // . else zig-zig or sig-zag depending on path from grandparent - if (root() == tc) return; - warning("*** Splaying not yet implemented; " - "tree operations may be inefficient ***"); -} - -template -void BinaryTreeDictionary::insert_chunk_in_tree(Chunk* fc) { - TreeList *curTL, *prevTL; +template class FreeList_t> +void BinaryTreeDictionary::insert_chunk_in_tree(Chunk_t* fc) { + TreeList *curTL, *prevTL; size_t size = fc->size(); - assert(size >= BinaryTreeDictionary::min_tree_chunk_size, "too small to be a TreeList"); + assert((size >= min_size()), + err_msg(SIZE_FORMAT " is too small to be a TreeChunk " SIZE_FORMAT, + size, min_size())); if (FLSVerifyDictionary) { verify_tree(); } @@ -729,9 +742,9 @@ void BinaryTreeDictionary::insert_chunk_in_tree(Chunk* fc) { curTL = curTL->right(); } } - TreeChunk* tc = TreeChunk::as_TreeChunk(fc); + TreeChunk* tc = TreeChunk::as_TreeChunk(fc); // This chunk is being returned to the binary tree. Its embedded - // TreeList should be unused at this point. + // TreeList should be unused at this point. tc->initialize(); if (curTL != NULL) { // exact match tc->set_list(curTL); @@ -739,8 +752,8 @@ void BinaryTreeDictionary::insert_chunk_in_tree(Chunk* fc) { } else { // need a new node in tree tc->clear_next(); tc->link_prev(NULL); - TreeList* newTL = TreeList::as_TreeList(tc); - assert(((TreeChunk*)tc)->list() == newTL, + TreeList* newTL = TreeList::as_TreeList(tc); + assert(((TreeChunk*)tc)->list() == newTL, "List was not initialized correctly"); if (prevTL == NULL) { // we are the only tree node assert(root() == NULL, "control point invariant"); @@ -768,30 +781,30 @@ void BinaryTreeDictionary::insert_chunk_in_tree(Chunk* fc) { } } -template -size_t BinaryTreeDictionary::max_chunk_size() const { - FreeBlockDictionary::verify_par_locked(); - TreeList* tc = root(); +template class FreeList_t> +size_t BinaryTreeDictionary::max_chunk_size() const { + FreeBlockDictionary::verify_par_locked(); + TreeList* tc = root(); if (tc == NULL) return 0; for (; tc->right() != NULL; tc = tc->right()); return tc->size(); } -template -size_t BinaryTreeDictionary::total_list_length(TreeList* tl) const { +template class FreeList_t> +size_t BinaryTreeDictionary::total_list_length(TreeList* tl) const { size_t res; res = tl->count(); #ifdef ASSERT size_t cnt; - Chunk* tc = tl->head(); + Chunk_t* tc = tl->head(); for (cnt = 0; tc != NULL; tc = tc->next(), cnt++); assert(res == cnt, "The count is not being maintained correctly"); #endif return res; } -template -size_t BinaryTreeDictionary::total_size_in_tree(TreeList* tl) const { +template class FreeList_t> +size_t BinaryTreeDictionary::total_size_in_tree(TreeList* tl) const { if (tl == NULL) return 0; return (tl->size() * total_list_length(tl)) + @@ -799,8 +812,8 @@ size_t BinaryTreeDictionary::total_size_in_tree(TreeList* tl) cons total_size_in_tree(tl->right()); } -template -double BinaryTreeDictionary::sum_of_squared_block_sizes(TreeList* const tl) const { +template class FreeList_t> +double BinaryTreeDictionary::sum_of_squared_block_sizes(TreeList* const tl) const { if (tl == NULL) { return 0.0; } @@ -811,8 +824,8 @@ double BinaryTreeDictionary::sum_of_squared_block_sizes(TreeList* return curr; } -template -size_t BinaryTreeDictionary::total_free_blocks_in_tree(TreeList* tl) const { +template class FreeList_t> +size_t BinaryTreeDictionary::total_free_blocks_in_tree(TreeList* tl) const { if (tl == NULL) return 0; return total_list_length(tl) + @@ -820,28 +833,28 @@ size_t BinaryTreeDictionary::total_free_blocks_in_tree(TreeList* t total_free_blocks_in_tree(tl->right()); } -template -size_t BinaryTreeDictionary::num_free_blocks() const { +template class FreeList_t> +size_t BinaryTreeDictionary::num_free_blocks() const { assert(total_free_blocks_in_tree(root()) == total_free_blocks(), "_total_free_blocks inconsistency"); return total_free_blocks(); } -template -size_t BinaryTreeDictionary::tree_height_helper(TreeList* tl) const { +template class FreeList_t> +size_t BinaryTreeDictionary::tree_height_helper(TreeList* tl) const { if (tl == NULL) return 0; return 1 + MAX2(tree_height_helper(tl->left()), tree_height_helper(tl->right())); } -template -size_t BinaryTreeDictionary::treeHeight() const { +template class FreeList_t> +size_t BinaryTreeDictionary::tree_height() const { return tree_height_helper(root()); } -template -size_t BinaryTreeDictionary::total_nodes_helper(TreeList* tl) const { +template class FreeList_t> +size_t BinaryTreeDictionary::total_nodes_helper(TreeList* tl) const { if (tl == NULL) { return 0; } @@ -849,14 +862,18 @@ size_t BinaryTreeDictionary::total_nodes_helper(TreeList* tl) cons total_nodes_helper(tl->right()); } -template -size_t BinaryTreeDictionary::total_nodes_in_tree(TreeList* tl) const { +template class FreeList_t> +size_t BinaryTreeDictionary::total_nodes_in_tree(TreeList* tl) const { return total_nodes_helper(root()); } -template -void BinaryTreeDictionary::dict_census_udpate(size_t size, bool split, bool birth){ - TreeList* nd = find_list(size); +template class FreeList_t> +void BinaryTreeDictionary::dict_census_update(size_t size, bool split, bool birth){} + +#ifndef SERIALGC +template <> +void BinaryTreeDictionary::dict_census_update(size_t size, bool split, bool birth){ + TreeList* nd = find_list(size); if (nd) { if (split) { if (birth) { @@ -882,16 +899,26 @@ void BinaryTreeDictionary::dict_census_udpate(size_t size, bool split, bo // This is a birth associated with a LinAB. The chunk // for the LinAB is not in the dictionary. } +#endif // SERIALGC -template -bool BinaryTreeDictionary::coal_dict_over_populated(size_t size) { +template class FreeList_t> +bool BinaryTreeDictionary::coal_dict_over_populated(size_t size) { + // For the general type of freelists, encourage coalescing by + // returning true. + return true; +} + +#ifndef SERIALGC +template <> +bool BinaryTreeDictionary::coal_dict_over_populated(size_t size) { if (FLSAlwaysCoalesceLarge) return true; - TreeList* list_of_size = find_list(size); + TreeList* list_of_size = find_list(size); // None of requested size implies overpopulated. return list_of_size == NULL || list_of_size->coal_desired() <= 0 || list_of_size->count() > list_of_size->coal_desired(); } +#endif // SERIALGC // Closures for walking the binary tree. // do_list() walks the free list in a node applying the closure @@ -899,19 +926,18 @@ bool BinaryTreeDictionary::coal_dict_over_populated(size_t size) { // do_tree() walks the nodes in the binary tree applying do_list() // to each list at each node. -template +template class FreeList_t> class TreeCensusClosure : public StackObj { protected: - virtual void do_list(FreeList* fl) = 0; + virtual void do_list(FreeList_t* fl) = 0; public: - virtual void do_tree(TreeList* tl) = 0; + virtual void do_tree(TreeList* tl) = 0; }; -template -class AscendTreeCensusClosure : public TreeCensusClosure { - using TreeCensusClosure::do_list; +template class FreeList_t> +class AscendTreeCensusClosure : public TreeCensusClosure { public: - void do_tree(TreeList* tl) { + void do_tree(TreeList* tl) { if (tl != NULL) { do_tree(tl->left()); do_list(tl); @@ -920,11 +946,10 @@ class AscendTreeCensusClosure : public TreeCensusClosure { } }; -template -class DescendTreeCensusClosure : public TreeCensusClosure { - using TreeCensusClosure::do_list; +template class FreeList_t> +class DescendTreeCensusClosure : public TreeCensusClosure { public: - void do_tree(TreeList* tl) { + void do_tree(TreeList* tl) { if (tl != NULL) { do_tree(tl->right()); do_list(tl); @@ -935,8 +960,8 @@ class DescendTreeCensusClosure : public TreeCensusClosure { // For each list in the tree, calculate the desired, desired // coalesce, count before sweep, and surplus before sweep. -template -class BeginSweepClosure : public AscendTreeCensusClosure { +template class FreeList_t> +class BeginSweepClosure : public AscendTreeCensusClosure { double _percentage; float _inter_sweep_current; float _inter_sweep_estimate; @@ -951,32 +976,36 @@ class BeginSweepClosure : public AscendTreeCensusClosure { _inter_sweep_estimate(inter_sweep_estimate), _intra_sweep_estimate(intra_sweep_estimate) { } - void do_list(FreeList* fl) { + void do_list(FreeList* fl) {} + +#ifndef SERIALGC + void do_list(AdaptiveFreeList* fl) { double coalSurplusPercent = _percentage; fl->compute_desired(_inter_sweep_current, _inter_sweep_estimate, _intra_sweep_estimate); fl->set_coal_desired((ssize_t)((double)fl->desired() * coalSurplusPercent)); fl->set_before_sweep(fl->count()); fl->set_bfr_surp(fl->surplus()); } +#endif // SERIALGC }; // Used to search the tree until a condition is met. // Similar to TreeCensusClosure but searches the // tree and returns promptly when found. -template +template class FreeList_t> class TreeSearchClosure : public StackObj { protected: - virtual bool do_list(FreeList* fl) = 0; + virtual bool do_list(FreeList_t* fl) = 0; public: - virtual bool do_tree(TreeList* tl) = 0; + virtual bool do_tree(TreeList* tl) = 0; }; #if 0 // Don't need this yet but here for symmetry. -template -class AscendTreeSearchClosure : public TreeSearchClosure { +template class FreeList_t> +class AscendTreeSearchClosure : public TreeSearchClosure { public: - bool do_tree(TreeList* tl) { + bool do_tree(TreeList* tl) { if (tl != NULL) { if (do_tree(tl->left())) return true; if (do_list(tl)) return true; @@ -987,11 +1016,10 @@ class AscendTreeSearchClosure : public TreeSearchClosure { }; #endif -template -class DescendTreeSearchClosure : public TreeSearchClosure { - using TreeSearchClosure::do_list; +template class FreeList_t> +class DescendTreeSearchClosure : public TreeSearchClosure { public: - bool do_tree(TreeList* tl) { + bool do_tree(TreeList* tl) { if (tl != NULL) { if (do_tree(tl->right())) return true; if (do_list(tl)) return true; @@ -1003,17 +1031,17 @@ class DescendTreeSearchClosure : public TreeSearchClosure { // Searches the tree for a chunk that ends at the // specified address. -template -class EndTreeSearchClosure : public DescendTreeSearchClosure { +template class FreeList_t> +class EndTreeSearchClosure : public DescendTreeSearchClosure { HeapWord* _target; - Chunk* _found; + Chunk_t* _found; public: EndTreeSearchClosure(HeapWord* target) : _target(target), _found(NULL) {} - bool do_list(FreeList* fl) { - Chunk* item = fl->head(); + bool do_list(FreeList_t* fl) { + Chunk_t* item = fl->head(); while (item != NULL) { - if (item->end() == _target) { + if (item->end() == (uintptr_t*) _target) { _found = item; return true; } @@ -1021,22 +1049,22 @@ class EndTreeSearchClosure : public DescendTreeSearchClosure { } return false; } - Chunk* found() { return _found; } + Chunk_t* found() { return _found; } }; -template -Chunk* BinaryTreeDictionary::find_chunk_ends_at(HeapWord* target) const { - EndTreeSearchClosure etsc(target); +template class FreeList_t> +Chunk_t* BinaryTreeDictionary::find_chunk_ends_at(HeapWord* target) const { + EndTreeSearchClosure etsc(target); bool found_target = etsc.do_tree(root()); assert(found_target || etsc.found() == NULL, "Consistency check"); assert(!found_target || etsc.found() != NULL, "Consistency check"); return etsc.found(); } -template -void BinaryTreeDictionary::begin_sweep_dict_census(double coalSurplusPercent, +template class FreeList_t> +void BinaryTreeDictionary::begin_sweep_dict_census(double coalSurplusPercent, float inter_sweep_current, float inter_sweep_estimate, float intra_sweep_estimate) { - BeginSweepClosure bsc(coalSurplusPercent, inter_sweep_current, + BeginSweepClosure bsc(coalSurplusPercent, inter_sweep_current, inter_sweep_estimate, intra_sweep_estimate); bsc.do_tree(root()); @@ -1045,84 +1073,91 @@ void BinaryTreeDictionary::begin_sweep_dict_census(double coalSurplusPerc // Closures and methods for calculating total bytes returned to the // free lists in the tree. #ifndef PRODUCT -template -class InitializeDictReturnedBytesClosure : public AscendTreeCensusClosure { +template class FreeList_t> +class InitializeDictReturnedBytesClosure : public AscendTreeCensusClosure { public: - void do_list(FreeList* fl) { + void do_list(FreeList_t* fl) { fl->set_returned_bytes(0); } }; -template -void BinaryTreeDictionary::initialize_dict_returned_bytes() { - InitializeDictReturnedBytesClosure idrb; +template class FreeList_t> +void BinaryTreeDictionary::initialize_dict_returned_bytes() { + InitializeDictReturnedBytesClosure idrb; idrb.do_tree(root()); } -template -class ReturnedBytesClosure : public AscendTreeCensusClosure { +template class FreeList_t> +class ReturnedBytesClosure : public AscendTreeCensusClosure { size_t _dict_returned_bytes; public: ReturnedBytesClosure() { _dict_returned_bytes = 0; } - void do_list(FreeList* fl) { + void do_list(FreeList_t* fl) { _dict_returned_bytes += fl->returned_bytes(); } size_t dict_returned_bytes() { return _dict_returned_bytes; } }; -template -size_t BinaryTreeDictionary::sum_dict_returned_bytes() { - ReturnedBytesClosure rbc; +template class FreeList_t> +size_t BinaryTreeDictionary::sum_dict_returned_bytes() { + ReturnedBytesClosure rbc; rbc.do_tree(root()); return rbc.dict_returned_bytes(); } // Count the number of entries in the tree. -template -class treeCountClosure : public DescendTreeCensusClosure { +template class FreeList_t> +class treeCountClosure : public DescendTreeCensusClosure { public: uint count; treeCountClosure(uint c) { count = c; } - void do_list(FreeList* fl) { + void do_list(FreeList_t* fl) { count++; } }; -template -size_t BinaryTreeDictionary::total_count() { - treeCountClosure ctc(0); +template class FreeList_t> +size_t BinaryTreeDictionary::total_count() { + treeCountClosure ctc(0); ctc.do_tree(root()); return ctc.count; } #endif // PRODUCT // Calculate surpluses for the lists in the tree. -template -class setTreeSurplusClosure : public AscendTreeCensusClosure { +template class FreeList_t> +class setTreeSurplusClosure : public AscendTreeCensusClosure { double percentage; public: setTreeSurplusClosure(double v) { percentage = v; } - void do_list(FreeList* fl) { + void do_list(FreeList* fl) {} + +#ifndef SERIALGC + void do_list(AdaptiveFreeList* fl) { double splitSurplusPercent = percentage; fl->set_surplus(fl->count() - (ssize_t)((double)fl->desired() * splitSurplusPercent)); } +#endif // SERIALGC }; -template -void BinaryTreeDictionary::set_tree_surplus(double splitSurplusPercent) { - setTreeSurplusClosure sts(splitSurplusPercent); +template class FreeList_t> +void BinaryTreeDictionary::set_tree_surplus(double splitSurplusPercent) { + setTreeSurplusClosure sts(splitSurplusPercent); sts.do_tree(root()); } // Set hints for the lists in the tree. -template -class setTreeHintsClosure : public DescendTreeCensusClosure { +template class FreeList_t> +class setTreeHintsClosure : public DescendTreeCensusClosure { size_t hint; public: setTreeHintsClosure(size_t v) { hint = v; } - void do_list(FreeList* fl) { + void do_list(FreeList* fl) {} + +#ifndef SERIALGC + void do_list(AdaptiveFreeList* fl) { fl->set_hint(hint); assert(fl->hint() == 0 || fl->hint() > fl->size(), "Current hint is inconsistent"); @@ -1130,35 +1165,40 @@ class setTreeHintsClosure : public DescendTreeCensusClosure { hint = fl->size(); } } +#endif // SERIALGC }; -template -void BinaryTreeDictionary::set_tree_hints(void) { - setTreeHintsClosure sth(0); +template class FreeList_t> +void BinaryTreeDictionary::set_tree_hints(void) { + setTreeHintsClosure sth(0); sth.do_tree(root()); } // Save count before previous sweep and splits and coalesces. -template -class clearTreeCensusClosure : public AscendTreeCensusClosure { - void do_list(FreeList* fl) { +template class FreeList_t> +class clearTreeCensusClosure : public AscendTreeCensusClosure { + void do_list(FreeList* fl) {} + +#ifndef SERIALGC + void do_list(AdaptiveFreeList* fl) { fl->set_prev_sweep(fl->count()); fl->set_coal_births(0); fl->set_coal_deaths(0); fl->set_split_births(0); fl->set_split_deaths(0); } +#endif // SERIALGC }; -template -void BinaryTreeDictionary::clear_tree_census(void) { - clearTreeCensusClosure ctc; +template class FreeList_t> +void BinaryTreeDictionary::clear_tree_census(void) { + clearTreeCensusClosure ctc; ctc.do_tree(root()); } // Do reporting and post sweep clean up. -template -void BinaryTreeDictionary::end_sweep_dict_census(double splitSurplusPercent) { +template class FreeList_t> +void BinaryTreeDictionary::end_sweep_dict_census(double splitSurplusPercent) { // Does walking the tree 3 times hurt? set_tree_surplus(splitSurplusPercent); set_tree_hints(); @@ -1169,9 +1209,9 @@ void BinaryTreeDictionary::end_sweep_dict_census(double splitSurplusPerce } // Print summary statistics -template -void BinaryTreeDictionary::report_statistics() const { - FreeBlockDictionary::verify_par_locked(); +template class FreeList_t> +void BinaryTreeDictionary::report_statistics() const { + FreeBlockDictionary::verify_par_locked(); gclog_or_tty->print("Statistics for BinaryTreeDictionary:\n" "------------------------------------\n"); size_t total_size = total_chunk_size(debug_only(NULL)); @@ -1182,36 +1222,47 @@ void BinaryTreeDictionary::report_statistics() const { if (free_blocks > 0) { gclog_or_tty->print("Av. Block Size: %d\n", total_size/free_blocks); } - gclog_or_tty->print("Tree Height: %d\n", treeHeight()); + gclog_or_tty->print("Tree Height: %d\n", tree_height()); } // Print census information - counts, births, deaths, etc. // for each list in the tree. Also print some summary // information. -template -class PrintTreeCensusClosure : public AscendTreeCensusClosure { +template class FreeList_t> +class PrintTreeCensusClosure : public AscendTreeCensusClosure { int _print_line; size_t _total_free; - FreeList _total; + FreeList_t _total; public: PrintTreeCensusClosure() { _print_line = 0; _total_free = 0; } - FreeList* total() { return &_total; } + FreeList_t* total() { return &_total; } size_t total_free() { return _total_free; } - void do_list(FreeList* fl) { + void do_list(FreeList* fl) { if (++_print_line >= 40) { - FreeList::print_labels_on(gclog_or_tty, "size"); + FreeList_t::print_labels_on(gclog_or_tty, "size"); _print_line = 0; } fl->print_on(gclog_or_tty); _total_free += fl->count() * fl->size() ; total()->set_count( total()->count() + fl->count() ); - total()->set_bfr_surp( total()->bfr_surp() + fl->bfr_surp() ); + } + +#ifndef SERIALGC + void do_list(AdaptiveFreeList* fl) { + if (++_print_line >= 40) { + FreeList_t::print_labels_on(gclog_or_tty, "size"); + _print_line = 0; + } + fl->print_on(gclog_or_tty); + _total_free += fl->count() * fl->size() ; + total()->set_count( total()->count() + fl->count() ); + total()->set_bfr_surp( total()->bfr_surp() + fl->bfr_surp() ); total()->set_surplus( total()->split_deaths() + fl->surplus() ); - total()->set_desired( total()->desired() + fl->desired() ); + total()->set_desired( total()->desired() + fl->desired() ); total()->set_prev_sweep( total()->prev_sweep() + fl->prev_sweep() ); total()->set_before_sweep(total()->before_sweep() + fl->before_sweep()); total()->set_coal_births( total()->coal_births() + fl->coal_births() ); @@ -1219,18 +1270,32 @@ class PrintTreeCensusClosure : public AscendTreeCensusClosure { total()->set_split_births(total()->split_births() + fl->split_births()); total()->set_split_deaths(total()->split_deaths() + fl->split_deaths()); } +#endif // SERIALGC }; -template -void BinaryTreeDictionary::print_dict_census(void) const { +template class FreeList_t> +void BinaryTreeDictionary::print_dict_census(void) const { gclog_or_tty->print("\nBinaryTree\n"); - FreeList::print_labels_on(gclog_or_tty, "size"); - PrintTreeCensusClosure ptc; + FreeList_t::print_labels_on(gclog_or_tty, "size"); + PrintTreeCensusClosure ptc; ptc.do_tree(root()); - FreeList* total = ptc.total(); - FreeList::print_labels_on(gclog_or_tty, " "); + FreeList_t* total = ptc.total(); + FreeList_t::print_labels_on(gclog_or_tty, " "); +} + +#ifndef SERIALGC +template <> +void BinaryTreeDictionary::print_dict_census(void) const { + + gclog_or_tty->print("\nBinaryTree\n"); + AdaptiveFreeList::print_labels_on(gclog_or_tty, "size"); + PrintTreeCensusClosure ptc; + ptc.do_tree(root()); + + AdaptiveFreeList* total = ptc.total(); + AdaptiveFreeList::print_labels_on(gclog_or_tty, " "); total->print_on(gclog_or_tty, "TOTAL\t"); gclog_or_tty->print( "total_free(words): " SIZE_FORMAT_W(16) @@ -1242,9 +1307,10 @@ void BinaryTreeDictionary::print_dict_census(void) const { (double)(total->desired() - total->count()) /(total->desired() != 0 ? (double)total->desired() : 1.0)); } +#endif // SERIALGC -template -class PrintFreeListsClosure : public AscendTreeCensusClosure { +template class FreeList_t> +class PrintFreeListsClosure : public AscendTreeCensusClosure { outputStream* _st; int _print_line; @@ -1253,14 +1319,14 @@ class PrintFreeListsClosure : public AscendTreeCensusClosure { _st = st; _print_line = 0; } - void do_list(FreeList* fl) { + void do_list(FreeList_t* fl) { if (++_print_line >= 40) { - FreeList::print_labels_on(_st, "size"); + FreeList_t::print_labels_on(_st, "size"); _print_line = 0; } fl->print_on(gclog_or_tty); size_t sz = fl->size(); - for (Chunk* fc = fl->head(); fc != NULL; + for (Chunk_t* fc = fl->head(); fc != NULL; fc = fc->next()) { _st->print_cr("\t[" PTR_FORMAT "," PTR_FORMAT ") %s", fc, (HeapWord*)fc + sz, @@ -1269,11 +1335,11 @@ class PrintFreeListsClosure : public AscendTreeCensusClosure { } }; -template -void BinaryTreeDictionary::print_free_lists(outputStream* st) const { +template class FreeList_t> +void BinaryTreeDictionary::print_free_lists(outputStream* st) const { - FreeList::print_labels_on(st, "size"); - PrintFreeListsClosure pflc(st); + FreeList_t::print_labels_on(st, "size"); + PrintFreeListsClosure pflc(st); pflc.do_tree(root()); } @@ -1281,18 +1347,18 @@ void BinaryTreeDictionary::print_free_lists(outputStream* st) const { // . _root has no parent // . parent and child point to each other // . each node's key correctly related to that of its child(ren) -template -void BinaryTreeDictionary::verify_tree() const { +template class FreeList_t> +void BinaryTreeDictionary::verify_tree() const { guarantee(root() == NULL || total_free_blocks() == 0 || total_size() != 0, "_total_size should't be 0?"); guarantee(root() == NULL || root()->parent() == NULL, "_root shouldn't have parent"); verify_tree_helper(root()); } -template -size_t BinaryTreeDictionary::verify_prev_free_ptrs(TreeList* tl) { +template class FreeList_t> +size_t BinaryTreeDictionary::verify_prev_free_ptrs(TreeList* tl) { size_t ct = 0; - for (Chunk* curFC = tl->head(); curFC != NULL; curFC = curFC->next()) { + for (Chunk_t* curFC = tl->head(); curFC != NULL; curFC = curFC->next()) { ct++; assert(curFC->prev() == NULL || curFC->prev()->is_free(), "Chunk should be free"); @@ -1303,8 +1369,8 @@ size_t BinaryTreeDictionary::verify_prev_free_ptrs(TreeList* tl) { // Note: this helper is recursive rather than iterative, so use with // caution on very deep trees; and watch out for stack overflow errors; // In general, to be used only for debugging. -template -void BinaryTreeDictionary::verify_tree_helper(TreeList* tl) const { +template class FreeList_t> +void BinaryTreeDictionary::verify_tree_helper(TreeList* tl) const { if (tl == NULL) return; guarantee(tl->size() != 0, "A list must has a size"); @@ -1332,15 +1398,25 @@ void BinaryTreeDictionary::verify_tree_helper(TreeList* tl) const verify_tree_helper(tl->right()); } -template -void BinaryTreeDictionary::verify() const { +template class FreeList_t> +void BinaryTreeDictionary::verify() const { verify_tree(); guarantee(total_size() == total_size_in_tree(root()), "Total Size inconsistency"); } +template class TreeList; +template class BinaryTreeDictionary; +template class TreeChunk; + +template class TreeList; +template class BinaryTreeDictionary; +template class TreeChunk; + + #ifndef SERIALGC // Explicitly instantiate these types for FreeChunk. -template class BinaryTreeDictionary; -template class TreeChunk; -template class TreeList; +template class TreeList; +template class BinaryTreeDictionary; +template class TreeChunk; + #endif // SERIALGC diff --git a/hotspot/src/share/vm/memory/binaryTreeDictionary.hpp b/hotspot/src/share/vm/memory/binaryTreeDictionary.hpp index 4ab60c2dcc1..757eb4fdac9 100644 --- a/hotspot/src/share/vm/memory/binaryTreeDictionary.hpp +++ b/hotspot/src/share/vm/memory/binaryTreeDictionary.hpp @@ -37,77 +37,78 @@ // A TreeList is a FreeList which can be used to maintain a // binary tree of free lists. -template class TreeChunk; -template class BinaryTreeDictionary; -template class AscendTreeCensusClosure; -template class DescendTreeCensusClosure; -template class DescendTreeSearchClosure; +template class FreeList_t> class TreeChunk; +template class FreeList_t> class BinaryTreeDictionary; +template class FreeList_t> class AscendTreeCensusClosure; +template class FreeList_t> class DescendTreeCensusClosure; +template class FreeList_t> class DescendTreeSearchClosure; -template -class TreeList: public FreeList { - friend class TreeChunk; - friend class BinaryTreeDictionary; - friend class AscendTreeCensusClosure; - friend class DescendTreeCensusClosure; - friend class DescendTreeSearchClosure; +template class FreeList_t> +class TreeList : public FreeList_t { + friend class TreeChunk; + friend class BinaryTreeDictionary; + friend class AscendTreeCensusClosure; + friend class DescendTreeCensusClosure; + friend class DescendTreeSearchClosure; - TreeList* _parent; - TreeList* _left; - TreeList* _right; + TreeList* _parent; + TreeList* _left; + TreeList* _right; protected: - TreeList* parent() const { return _parent; } - TreeList* left() const { return _left; } - TreeList* right() const { return _right; } - // Explicitly import these names into our namespace to fix name lookup with templates - using FreeList::head; - using FreeList::set_head; + TreeList* parent() const { return _parent; } + TreeList* left() const { return _left; } + TreeList* right() const { return _right; } - using FreeList::tail; - using FreeList::set_tail; - using FreeList::link_tail; + // Wrapper on call to base class, to get the template to compile. + Chunk_t* head() const { return FreeList_t::head(); } + Chunk_t* tail() const { return FreeList_t::tail(); } + void set_head(Chunk_t* head) { FreeList_t::set_head(head); } + void set_tail(Chunk_t* tail) { FreeList_t::set_tail(tail); } - using FreeList::increment_count; - NOT_PRODUCT(using FreeList::increment_returned_bytes_by;) - using FreeList::verify_chunk_in_free_list; - using FreeList::size; + size_t size() const { return FreeList_t::size(); } // Accessors for links in tree. - void set_left(TreeList* tl) { + void set_left(TreeList* tl) { _left = tl; if (tl != NULL) tl->set_parent(this); } - void set_right(TreeList* tl) { + void set_right(TreeList* tl) { _right = tl; if (tl != NULL) tl->set_parent(this); } - void set_parent(TreeList* tl) { _parent = tl; } + void set_parent(TreeList* tl) { _parent = tl; } - void clearLeft() { _left = NULL; } + void clear_left() { _left = NULL; } void clear_right() { _right = NULL; } void clear_parent() { _parent = NULL; } - void initialize() { clearLeft(); clear_right(), clear_parent(); } + void initialize() { clear_left(); clear_right(), clear_parent(); FreeList_t::initialize(); } // For constructing a TreeList from a Tree chunk or // address and size. - static TreeList* as_TreeList(TreeChunk* tc); - static TreeList* as_TreeList(HeapWord* addr, size_t size); + TreeList(); + static TreeList* + as_TreeList(TreeChunk* tc); + static TreeList* as_TreeList(HeapWord* addr, size_t size); // Returns the head of the free list as a pointer to a TreeChunk. - TreeChunk* head_as_TreeChunk(); + TreeChunk* head_as_TreeChunk(); // Returns the first available chunk in the free list as a pointer // to a TreeChunk. - TreeChunk* first_available(); + TreeChunk* first_available(); // Returns the block with the largest heap address amongst // those in the list for this size; potentially slow and expensive, // use with caution! - TreeChunk* largest_address(); + TreeChunk* largest_address(); + + TreeList* get_better_list( + BinaryTreeDictionary* dictionary); // remove_chunk_replace_if_needed() removes the given "tc" from the TreeList. // If "tc" is the first chunk in the list, it is also the @@ -115,10 +116,10 @@ class TreeList: public FreeList { // returns the possibly replaced TreeList* for the node in // the tree. It also updates the parent of the original // node to point to the new node. - TreeList* remove_chunk_replace_if_needed(TreeChunk* tc); + TreeList* remove_chunk_replace_if_needed(TreeChunk* tc); // See FreeList. - void return_chunk_at_head(TreeChunk* tc); - void return_chunk_at_tail(TreeChunk* tc); + void return_chunk_at_head(TreeChunk* tc); + void return_chunk_at_tail(TreeChunk* tc); }; // A TreeChunk is a subclass of a Chunk that additionally @@ -134,52 +135,54 @@ class TreeList: public FreeList { // on the free list for a node in the tree and is only removed if // it is the last chunk on the free list. -template -class TreeChunk : public Chunk { - friend class TreeList; - TreeList* _list; - TreeList _embedded_list; // if non-null, this chunk is on _list +template class FreeList_t> +class TreeChunk : public Chunk_t { + friend class TreeList; + TreeList* _list; + TreeList _embedded_list; // if non-null, this chunk is on _list + + static size_t _min_tree_chunk_size; + protected: - TreeList* embedded_list() const { return (TreeList*) &_embedded_list; } - void set_embedded_list(TreeList* v) { _embedded_list = *v; } + TreeList* embedded_list() const { return (TreeList*) &_embedded_list; } + void set_embedded_list(TreeList* v) { _embedded_list = *v; } public: - TreeList* list() { return _list; } - void set_list(TreeList* v) { _list = v; } - static TreeChunk* as_TreeChunk(Chunk* fc); + TreeList* list() { return _list; } + void set_list(TreeList* v) { _list = v; } + static TreeChunk* as_TreeChunk(Chunk_t* fc); // Initialize fields in a TreeChunk that should be // initialized when the TreeChunk is being added to // a free list in the tree. void initialize() { embedded_list()->initialize(); } - Chunk* next() const { return Chunk::next(); } - Chunk* prev() const { return Chunk::prev(); } - size_t size() const volatile { return Chunk::size(); } + Chunk_t* next() const { return Chunk_t::next(); } + Chunk_t* prev() const { return Chunk_t::prev(); } + size_t size() const volatile { return Chunk_t::size(); } + + static size_t min_size() { + return _min_tree_chunk_size; + } // debugging void verify_tree_chunk_list() const; + void assert_is_mangled() const; }; -template -class BinaryTreeDictionary: public FreeBlockDictionary { +template class FreeList_t> +class BinaryTreeDictionary: public FreeBlockDictionary { friend class VMStructs; - bool _splay; - bool _adaptive_freelists; size_t _total_size; size_t _total_free_blocks; - TreeList* _root; + TreeList* _root; // private accessors - bool splay() const { return _splay; } - void set_splay(bool v) { _splay = v; } void set_total_size(size_t v) { _total_size = v; } virtual void inc_total_size(size_t v); virtual void dec_total_size(size_t v); - size_t total_free_blocks() const { return _total_free_blocks; } void set_total_free_blocks(size_t v) { _total_free_blocks = v; } - TreeList* root() const { return _root; } - void set_root(TreeList* v) { _root = v; } - bool adaptive_freelists() { return _adaptive_freelists; } + TreeList* root() const { return _root; } + void set_root(TreeList* v) { _root = v; } // This field is added and can be set to point to the // the Mutex used to synchronize access to the @@ -191,54 +194,55 @@ class BinaryTreeDictionary: public FreeBlockDictionary { // return it. If the chunk // is the last chunk of that size, remove the node for that size // from the tree. - TreeChunk* get_chunk_from_tree(size_t size, enum FreeBlockDictionary::Dither dither, bool splay); - // Return a list of the specified size or NULL from the tree. - // The list is not removed from the tree. - TreeList* find_list (size_t size) const; + TreeChunk* get_chunk_from_tree(size_t size, enum FreeBlockDictionary::Dither dither); // Remove this chunk from the tree. If the removal results // in an empty list in the tree, remove the empty list. - TreeChunk* remove_chunk_from_tree(TreeChunk* tc); + TreeChunk* remove_chunk_from_tree(TreeChunk* tc); // Remove the node in the trees starting at tl that has the // minimum value and return it. Repair the tree as needed. - TreeList* remove_tree_minimum(TreeList* tl); - void semi_splay_step(TreeList* tl); + TreeList* remove_tree_minimum(TreeList* tl); // Add this free chunk to the tree. - void insert_chunk_in_tree(Chunk* freeChunk); + void insert_chunk_in_tree(Chunk_t* freeChunk); public: - static const size_t min_tree_chunk_size = sizeof(TreeChunk)/HeapWordSize; + // Return a list of the specified size or NULL from the tree. + // The list is not removed from the tree. + TreeList* find_list (size_t size) const; void verify_tree() const; // verify that the given chunk is in the tree. - bool verify_chunk_in_free_list(Chunk* tc) const; + bool verify_chunk_in_free_list(Chunk_t* tc) const; private: - void verify_tree_helper(TreeList* tl) const; - static size_t verify_prev_free_ptrs(TreeList* tl); + void verify_tree_helper(TreeList* tl) const; + static size_t verify_prev_free_ptrs(TreeList* tl); // Returns the total number of chunks in the list. - size_t total_list_length(TreeList* tl) const; + size_t total_list_length(TreeList* tl) const; // Returns the total number of words in the chunks in the tree // starting at "tl". - size_t total_size_in_tree(TreeList* tl) const; + size_t total_size_in_tree(TreeList* tl) const; // Returns the sum of the square of the size of each block // in the tree starting at "tl". - double sum_of_squared_block_sizes(TreeList* const tl) const; + double sum_of_squared_block_sizes(TreeList* const tl) const; // Returns the total number of free blocks in the tree starting // at "tl". - size_t total_free_blocks_in_tree(TreeList* tl) const; - size_t num_free_blocks() const; - size_t treeHeight() const; - size_t tree_height_helper(TreeList* tl) const; - size_t total_nodes_in_tree(TreeList* tl) const; - size_t total_nodes_helper(TreeList* tl) const; + size_t total_free_blocks_in_tree(TreeList* tl) const; + size_t num_free_blocks() const; + size_t tree_height() const; + size_t tree_height_helper(TreeList* tl) const; + size_t total_nodes_in_tree(TreeList* tl) const; + size_t total_nodes_helper(TreeList* tl) const; public: // Constructor - BinaryTreeDictionary(bool adaptive_freelists, bool splay = false); - BinaryTreeDictionary(MemRegion mr, bool adaptive_freelists, bool splay = false); + BinaryTreeDictionary() : + _total_size(0), _total_free_blocks(0), _root(0) {} + + BinaryTreeDictionary(MemRegion mr); // Public accessors size_t total_size() const { return _total_size; } + size_t total_free_blocks() const { return _total_free_blocks; } // Reset the dictionary to the initial conditions with // a single free chunk. @@ -249,23 +253,24 @@ class BinaryTreeDictionary: public FreeBlockDictionary { // Return a chunk of size "size" or greater from // the tree. - // want a better dynamic splay strategy for the future. - Chunk* get_chunk(size_t size, enum FreeBlockDictionary::Dither dither) { - FreeBlockDictionary::verify_par_locked(); - Chunk* res = get_chunk_from_tree(size, dither, splay()); + Chunk_t* get_chunk(size_t size, enum FreeBlockDictionary::Dither dither) { + FreeBlockDictionary::verify_par_locked(); + Chunk_t* res = get_chunk_from_tree(size, dither); assert(res == NULL || res->is_free(), "Should be returning a free chunk"); + assert(dither != FreeBlockDictionary::exactly || + res == NULL || res->size() == size, "Not correct size"); return res; } - void return_chunk(Chunk* chunk) { - FreeBlockDictionary::verify_par_locked(); + void return_chunk(Chunk_t* chunk) { + FreeBlockDictionary::verify_par_locked(); insert_chunk_in_tree(chunk); } - void remove_chunk(Chunk* chunk) { - FreeBlockDictionary::verify_par_locked(); - remove_chunk_from_tree((TreeChunk*)chunk); + void remove_chunk(Chunk_t* chunk) { + FreeBlockDictionary::verify_par_locked(); + remove_chunk_from_tree((TreeChunk*)chunk); assert(chunk->is_free(), "Should still be a free chunk"); } @@ -281,19 +286,19 @@ class BinaryTreeDictionary: public FreeBlockDictionary { } size_t min_size() const { - return min_tree_chunk_size; + return TreeChunk::min_size(); } double sum_of_squared_block_sizes() const { return sum_of_squared_block_sizes(root()); } - Chunk* find_chunk_ends_at(HeapWord* target) const; + Chunk_t* find_chunk_ends_at(HeapWord* target) const; // Find the list with size "size" in the binary tree and update // the statistics in the list according to "split" (chunk was // split or coalesce) and "birth" (chunk was added or removed). - void dict_census_udpate(size_t size, bool split, bool birth); + void dict_census_update(size_t size, bool split, bool birth); // Return true if the dictionary is overpopulated (more chunks of // this size than desired) for size "size". bool coal_dict_over_populated(size_t size); @@ -307,7 +312,7 @@ class BinaryTreeDictionary: public FreeBlockDictionary { // statistics for the sweep. void end_sweep_dict_census(double splitSurplusPercent); // Return the largest free chunk in the tree. - Chunk* find_largest_dict() const; + Chunk_t* find_largest_dict() const; // Accessors for statistics void set_tree_surplus(double splitSurplusPercent); void set_tree_hints(void); diff --git a/hotspot/src/share/vm/memory/collectorPolicy.cpp b/hotspot/src/share/vm/memory/collectorPolicy.cpp index 4d427230206..6c0b1bd82c4 100644 --- a/hotspot/src/share/vm/memory/collectorPolicy.cpp +++ b/hotspot/src/share/vm/memory/collectorPolicy.cpp @@ -742,6 +742,8 @@ MetaWord* CollectorPolicy::satisfy_failed_metadata_allocation( uint gc_count = 0; uint full_gc_count = 0; + assert(!Heap_lock->owned_by_self(), "Should not be holding the Heap_lock"); + do { MetaWord* result = NULL; if (GC_locker::is_active_and_needs_gc()) { @@ -756,7 +758,6 @@ MetaWord* CollectorPolicy::satisfy_failed_metadata_allocation( } JavaThread* jthr = JavaThread::current(); if (!jthr->in_critical()) { - MutexUnlocker mul(Heap_lock); // Wait for JNI critical section to be exited GC_locker::stall_until_clear(); // The GC invoked by the last thread leaving the critical diff --git a/hotspot/src/share/vm/memory/filemap.cpp b/hotspot/src/share/vm/memory/filemap.cpp index d4a11f4080e..c3d1bf5f9e3 100644 --- a/hotspot/src/share/vm/memory/filemap.cpp +++ b/hotspot/src/share/vm/memory/filemap.cpp @@ -29,6 +29,7 @@ #include "runtime/arguments.hpp" #include "runtime/java.hpp" #include "runtime/os.hpp" +#include "services/memTracker.hpp" #include "utilities/defaultStream.hpp" # include @@ -344,24 +345,13 @@ ReservedSpace FileMapInfo::reserve_shared_memory() { fail_continue(err_msg("Unable to reserved shared space at required address " INTPTR_FORMAT, requested_addr)); return rs; } + // the reserved virtual memory is for mapping class data sharing archive + if (MemTracker::is_on()) { + MemTracker::record_virtual_memory_type((address)rs.base(), mtClassShared); + } return rs; } -// Memory map a region in the address space. - -char* FileMapInfo::map_region(int i, ReservedSpace rs) { - struct FileMapInfo::FileMapHeader::space_info* si = &_header._space[i]; - size_t used = si->_used; - size_t size = align_size_up(used, os::vm_allocation_granularity()); - - ReservedSpace mapped_rs = rs.first_part(size, true, true); - ReservedSpace unmapped_rs = rs.last_part(size); - mapped_rs.release(); - - return map_region(i); -} - - // Memory map a region in the address space. static const char* shared_region_name[] = { "ReadOnly", "ReadWrite", "MiscData", "MiscCode"}; diff --git a/hotspot/src/share/vm/memory/filemap.hpp b/hotspot/src/share/vm/memory/filemap.hpp index 760ddfe1795..7cdd9616cbe 100644 --- a/hotspot/src/share/vm/memory/filemap.hpp +++ b/hotspot/src/share/vm/memory/filemap.hpp @@ -125,7 +125,6 @@ public: size_t capacity, bool read_only, bool allow_exec); void write_bytes(const void* buffer, int count); void write_bytes_aligned(const void* buffer, int count); - char* map_region(int i, ReservedSpace rs); char* map_region(int i); void unmap_region(int i); void close(); diff --git a/hotspot/src/share/vm/memory/freeBlockDictionary.cpp b/hotspot/src/share/vm/memory/freeBlockDictionary.cpp index 13b4daa89ad..9b22212817b 100644 --- a/hotspot/src/share/vm/memory/freeBlockDictionary.cpp +++ b/hotspot/src/share/vm/memory/freeBlockDictionary.cpp @@ -27,6 +27,8 @@ #include "gc_implementation/concurrentMarkSweep/freeChunk.hpp" #endif // SERIALGC #include "memory/freeBlockDictionary.hpp" +#include "memory/metablock.hpp" +#include "memory/metachunk.hpp" #ifdef TARGET_OS_FAMILY_linux # include "thread_linux.inline.hpp" #endif @@ -62,6 +64,9 @@ template void FreeBlockDictionary::verify_par_locked() cons } #endif +template class FreeBlockDictionary; +template class FreeBlockDictionary; + #ifndef SERIALGC // Explicitly instantiate for FreeChunk template class FreeBlockDictionary; diff --git a/hotspot/src/share/vm/memory/freeBlockDictionary.hpp b/hotspot/src/share/vm/memory/freeBlockDictionary.hpp index 573cfed3a4b..2502e362d9c 100644 --- a/hotspot/src/share/vm/memory/freeBlockDictionary.hpp +++ b/hotspot/src/share/vm/memory/freeBlockDictionary.hpp @@ -66,7 +66,7 @@ class FreeBlockDictionary: public CHeapObj { virtual void reset(HeapWord* addr, size_t size) = 0; virtual void reset() = 0; - virtual void dict_census_udpate(size_t size, bool split, bool birth) = 0; + virtual void dict_census_update(size_t size, bool split, bool birth) = 0; virtual bool coal_dict_over_populated(size_t size) = 0; virtual void begin_sweep_dict_census(double coalSurplusPercent, float inter_sweep_current, float inter_sweep_estimate, diff --git a/hotspot/src/share/vm/memory/freeList.cpp b/hotspot/src/share/vm/memory/freeList.cpp index a5fbc06ee0a..f5cd80545c0 100644 --- a/hotspot/src/share/vm/memory/freeList.cpp +++ b/hotspot/src/share/vm/memory/freeList.cpp @@ -25,6 +25,8 @@ #include "precompiled.hpp" #include "memory/freeBlockDictionary.hpp" #include "memory/freeList.hpp" +#include "memory/metablock.hpp" +#include "memory/metachunk.hpp" #include "memory/sharedHeap.hpp" #include "runtime/globals.hpp" #include "runtime/mutex.hpp" @@ -49,8 +51,6 @@ FreeList::FreeList() : { _size = 0; _count = 0; - _hint = 0; - init_statistics(); } template @@ -62,34 +62,50 @@ FreeList::FreeList(Chunk* fc) : { _size = fc->size(); _count = 1; - _hint = 0; - init_statistics(); -#ifndef PRODUCT - _allocation_stats.set_returned_bytes(size() * HeapWordSize); -#endif } template -void FreeList::reset(size_t hint) { +void FreeList::link_head(Chunk* v) { + assert_proper_lock_protection(); + set_head(v); + // If this method is not used (just set the head instead), + // this check can be avoided. + if (v != NULL) { + v->link_prev(NULL); + } +} + + + +template +void FreeList::reset() { + // Don't set the _size to 0 because this method is + // used with a existing list that has a size but which has + // been emptied. + // Don't clear the _protecting_lock of an existing list. set_count(0); set_head(NULL); set_tail(NULL); - set_hint(hint); } template -void FreeList::init_statistics(bool split_birth) { - _allocation_stats.initialize(split_birth); +void FreeList::initialize() { +#ifdef ASSERT + // Needed early because it might be checked in other initializing code. + set_protecting_lock(NULL); +#endif + reset(); + set_size(0); } -template -Chunk* FreeList::get_chunk_at_head() { +template +Chunk_t* FreeList::get_chunk_at_head() { assert_proper_lock_protection(); assert(head() == NULL || head()->prev() == NULL, "list invariant"); assert(tail() == NULL || tail()->next() == NULL, "list invariant"); - Chunk* fc = head(); + Chunk_t* fc = head(); if (fc != NULL) { - Chunk* nextFC = fc->next(); + Chunk_t* nextFC = fc->next(); if (nextFC != NULL) { // The chunk fc being removed has a "next". Set the "next" to the // "prev" of fc. @@ -197,11 +213,6 @@ void FreeList::return_chunk_at_head(Chunk* chunk, bool record_return) { link_tail(chunk); } increment_count(); // of # of chunks in list - DEBUG_ONLY( - if (record_return) { - increment_returned_bytes_by(size()*HeapWordSize); - } - ) assert(head() == NULL || head()->prev() == NULL, "list invariant"); assert(tail() == NULL || tail()->next() == NULL, "list invariant"); assert(head() == NULL || head()->size() == size(), "wrong item on list"); @@ -233,11 +244,6 @@ void FreeList::return_chunk_at_tail(Chunk* chunk, bool record_return) { } link_tail(chunk); increment_count(); // of # of chunks in list - DEBUG_ONLY( - if (record_return) { - increment_returned_bytes_by(size()*HeapWordSize); - } - ) assert(head() == NULL || head()->prev() == NULL, "list invariant"); assert(tail() == NULL || tail()->next() == NULL, "list invariant"); assert(head() == NULL || head()->size() == size(), "wrong item on list"); @@ -273,7 +279,7 @@ void FreeList::prepend(FreeList* fl) { } } -// verify_chunk_in_free_list() is used to verify that an item is in this free list. +// verify_chunk_in_free_lists() is used to verify that an item is in this free list. // It is used as a debugging aid. template bool FreeList::verify_chunk_in_free_list(Chunk* fc) const { @@ -293,41 +299,15 @@ bool FreeList::verify_chunk_in_free_list(Chunk* fc) const { } #ifndef PRODUCT -template -void FreeList::verify_stats() const { - // The +1 of the LH comparand is to allow some "looseness" in - // checking: we usually call this interface when adding a block - // and we'll subsequently update the stats; we cannot update the - // stats beforehand because in the case of the large-block BT - // dictionary for example, this might be the first block and - // in that case there would be no place that we could record - // the stats (which are kept in the block itself). - assert((_allocation_stats.prev_sweep() + _allocation_stats.split_births() - + _allocation_stats.coal_births() + 1) // Total Production Stock + 1 - >= (_allocation_stats.split_deaths() + _allocation_stats.coal_deaths() - + (ssize_t)count()), // Total Current Stock + depletion - err_msg("FreeList " PTR_FORMAT " of size " SIZE_FORMAT - " violates Conservation Principle: " - "prev_sweep(" SIZE_FORMAT ")" - " + split_births(" SIZE_FORMAT ")" - " + coal_births(" SIZE_FORMAT ") + 1 >= " - " split_deaths(" SIZE_FORMAT ")" - " coal_deaths(" SIZE_FORMAT ")" - " + count(" SSIZE_FORMAT ")", - this, _size, _allocation_stats.prev_sweep(), _allocation_stats.split_births(), - _allocation_stats.split_births(), _allocation_stats.split_deaths(), - _allocation_stats.coal_deaths(), count())); -} - template void FreeList::assert_proper_lock_protection_work() const { - assert(_protecting_lock != NULL, "Don't call this directly"); + assert(protecting_lock() != NULL, "Don't call this directly"); assert(ParallelGCThreads > 0, "Don't call this directly"); Thread* thr = Thread::current(); if (thr->is_VM_thread() || thr->is_ConcurrentGC_thread()) { // assert that we are holding the freelist lock } else if (thr->is_GC_task_thread()) { - assert(_protecting_lock->owned_by_self(), "FreeList RACE DETECTED"); + assert(protecting_lock()->owned_by_self(), "FreeList RACE DETECTED"); } else if (thr->is_Java_thread()) { assert(!SafepointSynchronize::is_at_safepoint(), "Should not be executing"); } else { @@ -350,21 +330,17 @@ void FreeList::print_labels_on(outputStream* st, const char* c) { // to the call is a non-null string, it is printed in the first column; // otherwise, if the argument is null (the default), then the size of the // (free list) block is printed in the first column. -template -void FreeList::print_on(outputStream* st, const char* c) const { +template +void FreeList::print_on(outputStream* st, const char* c) const { if (c != NULL) { st->print("%16s", c); } else { st->print(SIZE_FORMAT_W(16), size()); } - st->print("\t" - SSIZE_FORMAT_W(14) "\t" SSIZE_FORMAT_W(14) "\t" SSIZE_FORMAT_W(14) "\t" SSIZE_FORMAT_W(14) "\t" SSIZE_FORMAT_W(14) "\t" - SSIZE_FORMAT_W(14) "\t" SSIZE_FORMAT_W(14) "\t" SSIZE_FORMAT_W(14) "\t" SSIZE_FORMAT_W(14) "\t" SSIZE_FORMAT_W(14) "\n", - bfr_surp(), surplus(), desired(), prev_sweep(), before_sweep(), - count(), coal_births(), coal_deaths(), split_births(), split_deaths()); } +template class FreeList; +template class FreeList; #ifndef SERIALGC -// Needs to be after the definitions have been seen. template class FreeList; #endif // SERIALGC diff --git a/hotspot/src/share/vm/memory/freeList.hpp b/hotspot/src/share/vm/memory/freeList.hpp index a982cfbda97..37438cc3888 100644 --- a/hotspot/src/share/vm/memory/freeList.hpp +++ b/hotspot/src/share/vm/memory/freeList.hpp @@ -40,23 +40,19 @@ class CompactibleFreeListSpace; // for that implementation. class Mutex; -template class TreeList; -template class PrintTreeCensusClosure; -template +template class FreeList VALUE_OBJ_CLASS_SPEC { friend class CompactibleFreeListSpace; friend class VMStructs; - friend class PrintTreeCensusClosure; private: - Chunk* _head; // Head of list of free chunks - Chunk* _tail; // Tail of list of free chunks + Chunk_t* _head; // Head of list of free chunks + Chunk_t* _tail; // Tail of list of free chunks size_t _size; // Size in Heap words of each chunk ssize_t _count; // Number of entries in list - size_t _hint; // next larger size list with a positive surplus - AllocationStats _allocation_stats; // allocation-related statistics + protected: #ifdef ASSERT Mutex* _protecting_lock; @@ -71,10 +67,6 @@ class FreeList VALUE_OBJ_CLASS_SPEC { #endif } - // Initialize the allocation statistics. - protected: - void init_statistics(bool split_birth = false); - void set_count(ssize_t v) { _count = v;} void increment_count() { _count++; } @@ -89,52 +81,48 @@ class FreeList VALUE_OBJ_CLASS_SPEC { // Construct a list without any entries. FreeList(); // Construct a list with "fc" as the first (and lone) entry in the list. - FreeList(Chunk* fc); + FreeList(Chunk_t* fc); - // Reset the head, tail, hint, and count of a free list. - void reset(size_t hint); + // Do initialization + void initialize(); + + // Reset the head, tail, and count of a free list. + void reset(); // Declare the current free list to be protected by the given lock. #ifdef ASSERT - void set_protecting_lock(Mutex* protecting_lock) { - _protecting_lock = protecting_lock; + Mutex* protecting_lock() const { return _protecting_lock; } + void set_protecting_lock(Mutex* v) { + _protecting_lock = v; } #endif // Accessors. - Chunk* head() const { + Chunk_t* head() const { assert_proper_lock_protection(); return _head; } - void set_head(Chunk* v) { + void set_head(Chunk_t* v) { assert_proper_lock_protection(); _head = v; assert(!_head || _head->size() == _size, "bad chunk size"); } // Set the head of the list and set the prev field of non-null // values to NULL. - void link_head(Chunk* v) { - assert_proper_lock_protection(); - set_head(v); - // If this method is not used (just set the head instead), - // this check can be avoided. - if (v != NULL) { - v->link_prev(NULL); - } - } + void link_head(Chunk_t* v); - Chunk* tail() const { + Chunk_t* tail() const { assert_proper_lock_protection(); return _tail; } - void set_tail(Chunk* v) { + void set_tail(Chunk_t* v) { assert_proper_lock_protection(); _tail = v; assert(!_tail || _tail->size() == _size, "bad chunk size"); } // Set the tail of the list and set the next field of non-null // values to NULL. - void link_tail(Chunk* v) { + void link_tail(Chunk_t* v) { assert_proper_lock_protection(); set_tail(v); if (v != NULL) { @@ -152,174 +140,45 @@ class FreeList VALUE_OBJ_CLASS_SPEC { assert_proper_lock_protection(); _size = v; } - ssize_t count() const { - return _count; - } - size_t hint() const { - return _hint; - } - void set_hint(size_t v) { - assert_proper_lock_protection(); - assert(v == 0 || _size < v, "Bad hint"); _hint = v; - } + ssize_t count() const { return _count; } + void set_count(ssize_t v) { _count = v;} - // Accessors for statistics - AllocationStats* allocation_stats() { - assert_proper_lock_protection(); - return &_allocation_stats; - } + size_t get_better_size() { return size(); } - ssize_t desired() const { - return _allocation_stats.desired(); - } - void set_desired(ssize_t v) { - assert_proper_lock_protection(); - _allocation_stats.set_desired(v); - } - void compute_desired(float inter_sweep_current, - float inter_sweep_estimate, - float intra_sweep_estimate) { - assert_proper_lock_protection(); - _allocation_stats.compute_desired(_count, - inter_sweep_current, - inter_sweep_estimate, - intra_sweep_estimate); - } - ssize_t coal_desired() const { - return _allocation_stats.coal_desired(); - } - void set_coal_desired(ssize_t v) { - assert_proper_lock_protection(); - _allocation_stats.set_coal_desired(v); - } - - ssize_t surplus() const { - return _allocation_stats.surplus(); - } - void set_surplus(ssize_t v) { - assert_proper_lock_protection(); - _allocation_stats.set_surplus(v); - } - void increment_surplus() { - assert_proper_lock_protection(); - _allocation_stats.increment_surplus(); - } - void decrement_surplus() { - assert_proper_lock_protection(); - _allocation_stats.decrement_surplus(); - } - - ssize_t bfr_surp() const { - return _allocation_stats.bfr_surp(); - } - void set_bfr_surp(ssize_t v) { - assert_proper_lock_protection(); - _allocation_stats.set_bfr_surp(v); - } - ssize_t prev_sweep() const { - return _allocation_stats.prev_sweep(); - } - void set_prev_sweep(ssize_t v) { - assert_proper_lock_protection(); - _allocation_stats.set_prev_sweep(v); - } - ssize_t before_sweep() const { - return _allocation_stats.before_sweep(); - } - void set_before_sweep(ssize_t v) { - assert_proper_lock_protection(); - _allocation_stats.set_before_sweep(v); - } - - ssize_t coal_births() const { - return _allocation_stats.coal_births(); - } - void set_coal_births(ssize_t v) { - assert_proper_lock_protection(); - _allocation_stats.set_coal_births(v); - } - void increment_coal_births() { - assert_proper_lock_protection(); - _allocation_stats.increment_coal_births(); - } - - ssize_t coal_deaths() const { - return _allocation_stats.coal_deaths(); - } - void set_coal_deaths(ssize_t v) { - assert_proper_lock_protection(); - _allocation_stats.set_coal_deaths(v); - } - void increment_coal_deaths() { - assert_proper_lock_protection(); - _allocation_stats.increment_coal_deaths(); - } - - ssize_t split_births() const { - return _allocation_stats.split_births(); - } - void set_split_births(ssize_t v) { - assert_proper_lock_protection(); - _allocation_stats.set_split_births(v); - } - void increment_split_births() { - assert_proper_lock_protection(); - _allocation_stats.increment_split_births(); - } - - ssize_t split_deaths() const { - return _allocation_stats.split_deaths(); - } - void set_split_deaths(ssize_t v) { - assert_proper_lock_protection(); - _allocation_stats.set_split_deaths(v); - } - void increment_split_deaths() { - assert_proper_lock_protection(); - _allocation_stats.increment_split_deaths(); - } - - NOT_PRODUCT( - // For debugging. The "_returned_bytes" in all the lists are summed - // and compared with the total number of bytes swept during a - // collection. - size_t returned_bytes() const { return _allocation_stats.returned_bytes(); } - void set_returned_bytes(size_t v) { _allocation_stats.set_returned_bytes(v); } - void increment_returned_bytes_by(size_t v) { - _allocation_stats.set_returned_bytes(_allocation_stats.returned_bytes() + v); - } - ) + size_t returned_bytes() const { ShouldNotReachHere(); return 0; } + void set_returned_bytes(size_t v) {} + void increment_returned_bytes_by(size_t v) {} // Unlink head of list and return it. Returns NULL if // the list is empty. - Chunk* get_chunk_at_head(); + Chunk_t* get_chunk_at_head(); // Remove the first "n" or "count", whichever is smaller, chunks from the // list, setting "fl", which is required to be empty, to point to them. - void getFirstNChunksFromList(size_t n, FreeList* fl); + void getFirstNChunksFromList(size_t n, FreeList* fl); // Unlink this chunk from it's free list - void remove_chunk(Chunk* fc); + void remove_chunk(Chunk_t* fc); // Add this chunk to this free list. - void return_chunk_at_head(Chunk* fc); - void return_chunk_at_tail(Chunk* fc); + void return_chunk_at_head(Chunk_t* fc); + void return_chunk_at_tail(Chunk_t* fc); // Similar to returnChunk* but also records some diagnostic // information. - void return_chunk_at_head(Chunk* fc, bool record_return); - void return_chunk_at_tail(Chunk* fc, bool record_return); + void return_chunk_at_head(Chunk_t* fc, bool record_return); + void return_chunk_at_tail(Chunk_t* fc, bool record_return); // Prepend "fl" (whose size is required to be the same as that of "this") // to the front of "this" list. - void prepend(FreeList* fl); + void prepend(FreeList* fl); // Verify that the chunk is in the list. // found. Return NULL if "fc" is not found. - bool verify_chunk_in_free_list(Chunk* fc) const; + bool verify_chunk_in_free_list(Chunk_t* fc) const; // Stats verification - void verify_stats() const PRODUCT_RETURN; +// void verify_stats() const { ShouldNotReachHere(); }; // Printing support static void print_labels_on(outputStream* st, const char* c); diff --git a/hotspot/src/share/vm/memory/metablock.hpp b/hotspot/src/share/vm/memory/metablock.hpp new file mode 100644 index 00000000000..220d3614818 --- /dev/null +++ b/hotspot/src/share/vm/memory/metablock.hpp @@ -0,0 +1,103 @@ +/* + * Copyright (c) 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. + * + */ +#ifndef SHARE_VM_MEMORY_METABLOCK_HPP +#define SHARE_VM_MEMORY_METABLOCK_HPP + +// Metablock are the unit of allocation from a Chunk. It is initialized +// with the size of the requested allocation. That size is overwritten +// once the allocation returns. +// +// A Metablock may be reused by its SpaceManager but are never moved between +// SpaceManagers. There is no explicit link to the Metachunk +// from which it was allocated. Metablock may be deallocated and +// put on a freelist but the space is never freed, rather +// the Metachunk it is a part of will be deallocated when it's +// associated class loader is collected. + +class Metablock VALUE_OBJ_CLASS_SPEC { + friend class VMStructs; + private: + // Used to align the allocation (see below). + union block_t { + void* _data[3]; + struct header_t { + size_t _word_size; + Metablock* _next; + Metablock* _prev; + } _header; + } _block; + static size_t _min_block_byte_size; + static size_t _overhead; + + typedef union block_t Block; + typedef struct header_t Header; + const Block* block() const { return &_block; } + const Block::header_t* header() const { return &(block()->_header); } + public: + + static Metablock* initialize(MetaWord* p, size_t word_size); + + // This places the body of the block at a 2 word boundary + // because every block starts on a 2 word boundary. Work out + // how to make the body on a 2 word boundary if the block + // starts on a arbitrary boundary. JJJ + + size_t word_size() const { return header()->_word_size; } + void set_word_size(size_t v) { _block._header._word_size = v; } + size_t size() const volatile { return _block._header._word_size; } + void set_size(size_t v) { _block._header._word_size = v; } + Metablock* next() const { return header()->_next; } + void set_next(Metablock* v) { _block._header._next = v; } + Metablock* prev() const { return header()->_prev; } + void set_prev(Metablock* v) { _block._header._prev = v; } + + static size_t min_block_byte_size() { return _min_block_byte_size; } + static size_t overhead() { return _overhead; } + + bool is_free() { return header()->_word_size != 0; } + void clear_next() { set_next(NULL); } + void link_prev(Metablock* ptr) { set_prev(ptr); } + uintptr_t* end() { return ((uintptr_t*) this) + size(); } + bool cantCoalesce() const { return false; } + void link_next(Metablock* ptr) { set_next(ptr); } + void link_after(Metablock* ptr){ + link_next(ptr); + if (ptr != NULL) ptr->link_prev(this); + } + + // Should not be needed in a free list of Metablocks + void markNotFree() { ShouldNotReachHere(); } + + // Debug support +#ifdef ASSERT + void* prev_addr() const { return (void*)&_block._header._prev; } + void* next_addr() const { return (void*)&_block._header._next; } + void* size_addr() const { return (void*)&_block._header._word_size; } +#endif + bool verify_chunk_in_free_list(Metablock* tc) const { return true; } + bool verify_par_locked() { return true; } + + void assert_is_mangled() const {/* Don't check "\*/} +}; +#endif // SHARE_VM_MEMORY_METABLOCK_HPP diff --git a/hotspot/src/share/vm/memory/metachunk.hpp b/hotspot/src/share/vm/memory/metachunk.hpp new file mode 100644 index 00000000000..dd461972a14 --- /dev/null +++ b/hotspot/src/share/vm/memory/metachunk.hpp @@ -0,0 +1,133 @@ +/* + * Copyright (c) 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. + * + */ +#ifndef SHARE_VM_MEMORY_METACHUNK_HPP +#define SHARE_VM_MEMORY_METACHUNK_HPP + +// Metachunk - Quantum of allocation from a Virtualspace +// Metachunks are reused (when freed are put on a global freelist) and +// have no permanent association to a SpaceManager. + +// +--------------+ <- end +// | | --+ ---+ +// | | | free | +// | | | | +// | | | | capacity +// | | | | +// | | <- top --+ | +// | | ---+ | +// | | | used | +// | | | | +// | | | | +// +--------------+ <- bottom ---+ ---+ + +class Metachunk VALUE_OBJ_CLASS_SPEC { + // link to support lists of chunks + Metachunk* _next; + Metachunk* _prev; + + MetaWord* _bottom; + MetaWord* _end; + MetaWord* _top; + size_t _word_size; + // Used in a guarantee() so included in the Product builds + // even through it is only for debugging. + bool _is_free; + + // Metachunks are allocated out of a MetadataVirtualSpace and + // and use some of its space to describe itself (plus alignment + // considerations). Metadata is allocated in the rest of the chunk. + // This size is the overhead of maintaining the Metachunk within + // the space. + static size_t _overhead; + + void set_bottom(MetaWord* v) { _bottom = v; } + void set_end(MetaWord* v) { _end = v; } + void set_top(MetaWord* v) { _top = v; } + void set_word_size(size_t v) { _word_size = v; } + public: +#ifdef ASSERT + Metachunk() : _bottom(NULL), _end(NULL), _top(NULL), _is_free(false) {} +#else + Metachunk() : _bottom(NULL), _end(NULL), _top(NULL) {} +#endif + + // Used to add a Metachunk to a list of Metachunks + void set_next(Metachunk* v) { _next = v; assert(v != this, "Boom");} + void set_prev(Metachunk* v) { _prev = v; assert(v != this, "Boom");} + + MetaWord* allocate(size_t word_size); + static Metachunk* initialize(MetaWord* ptr, size_t word_size); + + // Accessors + Metachunk* next() const { return _next; } + Metachunk* prev() const { return _prev; } + MetaWord* bottom() const { return _bottom; } + MetaWord* end() const { return _end; } + MetaWord* top() const { return _top; } + size_t word_size() const { return _word_size; } + size_t size() const volatile { return _word_size; } + void set_size(size_t v) { _word_size = v; } + bool is_free() { return _is_free; } + void set_is_free(bool v) { _is_free = v; } + static size_t overhead() { return _overhead; } + void clear_next() { set_next(NULL); } + void link_prev(Metachunk* ptr) { set_prev(ptr); } + uintptr_t* end() { return ((uintptr_t*) this) + size(); } + bool cantCoalesce() const { return false; } + void link_next(Metachunk* ptr) { set_next(ptr); } + void link_after(Metachunk* ptr){ + link_next(ptr); + if (ptr != NULL) ptr->link_prev(this); + } + + // Reset top to bottom so chunk can be reused. + void reset_empty() { _top = (_bottom + _overhead); } + bool is_empty() { return _top == (_bottom + _overhead); } + + // used (has been allocated) + // free (available for future allocations) + // capacity (total size of chunk) + size_t used_word_size(); + size_t free_word_size(); + size_t capacity_word_size(); + + // Debug support +#ifdef ASSERT + void* prev_addr() const { return (void*)&_prev; } + void* next_addr() const { return (void*)&_next; } + void* size_addr() const { return (void*)&_word_size; } +#endif + bool verify_chunk_in_free_list(Metachunk* tc) const { return true; } + bool verify_par_locked() { return true; } + + void assert_is_mangled() const {/* Don't check "\*/} + +#ifdef ASSERT + void mangle(); +#endif // ASSERT + + void print_on(outputStream* st) const; + void verify(); +}; +#endif // SHARE_VM_MEMORY_METACHUNK_HPP diff --git a/hotspot/src/share/vm/memory/metaspace.cpp b/hotspot/src/share/vm/memory/metaspace.cpp index 0396eef2def..fc2609f2a99 100644 --- a/hotspot/src/share/vm/memory/metaspace.cpp +++ b/hotspot/src/share/vm/memory/metaspace.cpp @@ -24,9 +24,12 @@ #include "precompiled.hpp" #include "gc_interface/collectedHeap.hpp" #include "memory/binaryTreeDictionary.hpp" +#include "memory/freeList.hpp" #include "memory/collectorPolicy.hpp" #include "memory/filemap.hpp" #include "memory/freeList.hpp" +#include "memory/metablock.hpp" +#include "memory/metachunk.hpp" #include "memory/metaspace.hpp" #include "memory/metaspaceShared.hpp" #include "memory/resourceArea.hpp" @@ -37,15 +40,8 @@ #include "utilities/copy.hpp" #include "utilities/debug.hpp" -// Define this macro to deallocate Metablock. If not defined, -// blocks are not yet deallocated and are only mangled. -#undef DEALLOCATE_BLOCKS - -// Easily recognizable patterns -// These patterns can be the same in 32bit or 64bit since -// they only have to be easily recognizable. -const void* metaspace_allocation_leader = (void*) 0X11111111; -const void* metaspace_allocation_trailer = (void*) 0X77777777; +typedef BinaryTreeDictionary BlockTreeDictionary; +typedef BinaryTreeDictionary ChunkTreeDictionary; // Parameters for stress mode testing const uint metadata_deallocate_a_lot_block = 10; @@ -53,7 +49,6 @@ const uint metadata_deallocate_a_lock_chunk = 3; size_t const allocation_from_dictionary_limit = 64 * K; const size_t metadata_chunk_initialize = 0xf7f7f7f7; const size_t metadata_deallocate = 0xf5f5f5f5; -const size_t metadata_space_manager_allocate = 0xf3f3f3f3; MetaWord* last_allocated = 0; @@ -62,11 +57,12 @@ enum ChunkIndex { SmallIndex = 0, MediumIndex = 1, HumongousIndex = 2, - NumberOfFreeLists = 3 + NumberOfFreeLists = 2, + NumberOfInUseLists = 3 }; static ChunkIndex next_chunk_index(ChunkIndex i) { - assert(i < NumberOfFreeLists, "Out of bound"); + assert(i < NumberOfInUseLists, "Out of bound"); return (ChunkIndex) (i+1); } @@ -100,164 +96,13 @@ bool MetaspaceGC::_should_concurrent_collect = false; // the Chunk after the header for the Chunk) where as Metachunks // point to space in a VirtualSpace. To replace Metachunks with // Chunks, change Chunks so that they can be allocated out of a VirtualSpace. -// - -// Metablock are the unit of allocation from a Chunk. It contains -// the size of the requested allocation in a debug build. -// Also in a debug build it has a marker before and after the -// body of the block. The address of the body is the address returned -// by the allocation. -// -// Layout in a debug build. In a product build only the body is present. -// -// +-----------+-----------+------------+ +-----------+ -// | word size | leader | body | ... | trailer | -// +-----------+-----------+------------+ +-----------+ -// -// A Metablock may be reused by its SpaceManager but are never moved between -// SpaceManagers. There is no explicit link to the Metachunk -// from which it was allocated. Metablock are not deallocated, rather -// the Metachunk it is a part of will be deallocated when it's -// associated class loader is collected. -// -// When the word size of a block is passed in to the deallocation -// call the word size no longer needs to be part of a Metablock. - -class Metablock { - friend class VMStructs; - private: - // Used to align the allocation (see below) and for debugging. +size_t Metablock::_min_block_byte_size = sizeof(Metablock); #ifdef ASSERT - struct { - size_t _word_size; - void* _leader; - } _header; - void* _data[1]; -#endif - static size_t _overhead; - -#ifdef ASSERT - void set_word_size(size_t v) { _header._word_size = v; } - void* leader() { return _header._leader; } - void* trailer() { - jlong index = (jlong) _header._word_size - sizeof(_header)/BytesPerWord - 1; - assert(index > 0, err_msg("Bad indexling of trailer %d", index)); - void** ptr = &_data[index]; - return *ptr; - } - void set_leader(void* v) { _header._leader = v; } - void set_trailer(void* v) { - void** ptr = &_data[_header._word_size - sizeof(_header)/BytesPerWord - 1]; - *ptr = v; - } - public: - size_t word_size() { return _header._word_size; } -#endif - public: - - static Metablock* initialize(MetaWord* p, size_t word_size); - - // This places the body of the block at a 2 word boundary - // because every block starts on a 2 word boundary. Work out - // how to make the body on a 2 word boundary if the block - // starts on a arbitrary boundary. JJJ - -#ifdef ASSERT - MetaWord* data() { return (MetaWord*) &_data[0]; } + size_t Metablock::_overhead = + Chunk::aligned_overhead_size(sizeof(Metablock)) / BytesPerWord; #else - MetaWord* data() { return (MetaWord*) this; } + size_t Metablock::_overhead = 0; #endif - static Metablock* metablock_from_data(MetaWord* p) { -#ifdef ASSERT - size_t word_offset = offset_of(Metablock, _data)/BytesPerWord; - Metablock* result = (Metablock*) (p - word_offset); - return result; -#else - return (Metablock*) p; -#endif - } - - static size_t overhead() { return _overhead; } - void verify(); -}; - -// Metachunk - Quantum of allocation from a Virtualspace -// Metachunks are reused (when freed are put on a global freelist) and -// have no permanent association to a SpaceManager. - -// +--------------+ <- end -// | | --+ ---+ -// | | | free | -// | | | | -// | | | | capacity -// | | | | -// | | <- top --+ | -// | | ---+ | -// | | | used | -// | | | | -// | | | | -// +--------------+ <- bottom ---+ ---+ - -class Metachunk VALUE_OBJ_CLASS_SPEC { - // link to support lists of chunks - Metachunk* _next; - - MetaWord* _bottom; - MetaWord* _end; - MetaWord* _top; - size_t _word_size; - - // Metachunks are allocated out of a MetadataVirtualSpace and - // and use some of its space to describe itself (plus alignment - // considerations). Metadata is allocated in the rest of the chunk. - // This size is the overhead of maintaining the Metachunk within - // the space. - static size_t _overhead; - - void set_bottom(MetaWord* v) { _bottom = v; } - void set_end(MetaWord* v) { _end = v; } - void set_top(MetaWord* v) { _top = v; } - void set_word_size(size_t v) { _word_size = v; } - public: - - // Used to add a Metachunk to a list of Metachunks - void set_next(Metachunk* v) { _next = v; assert(v != this, "Boom");} - - Metablock* allocate(size_t word_size); - static Metachunk* initialize(MetaWord* ptr, size_t word_size); - - // Accessors - Metachunk* next() const { return _next; } - MetaWord* bottom() const { return _bottom; } - MetaWord* end() const { return _end; } - MetaWord* top() const { return _top; } - size_t word_size() const { return _word_size; } - static size_t overhead() { return _overhead; } - - // Reset top to bottom so chunk can be reused. - void reset_empty() { _top = (_bottom + _overhead); } - bool is_empty() { return _top == (_bottom + _overhead); } - - // used (has been allocated) - // free (available for future allocations) - // capacity (total size of chunk) - size_t used_word_size(); - size_t free_word_size(); - size_t capacity_word_size(); - -#ifdef ASSERT - void mangle() { - // Mangle the payload of the chunk and not the links that - // maintain list of chunks. - HeapWord* start = (HeapWord*)(bottom() + overhead()); - size_t word_size = capacity_word_size() - overhead(); - Copy::fill_to_words(start, word_size, metadata_chunk_initialize); - } -#endif // ASSERT - - void print_on(outputStream* st) const; - void verify(); -}; // Pointer to list of Metachunks. @@ -292,7 +137,10 @@ class ChunkManager VALUE_OBJ_CLASS_SPEC { // SmallChunk // MediumChunk // HumongousChunk - ChunkList _free_chunks[3]; + ChunkList _free_chunks[NumberOfFreeLists]; + + // HumongousChunk + ChunkTreeDictionary _humongous_dictionary; // ChunkManager in all lists of this type size_t _free_chunks_total; @@ -337,7 +185,9 @@ class ChunkManager VALUE_OBJ_CLASS_SPEC { } ChunkList* free_medium_chunks() { return &_free_chunks[1]; } ChunkList* free_small_chunks() { return &_free_chunks[0]; } - ChunkList* free_humongous_chunks() { return &_free_chunks[2]; } + ChunkTreeDictionary* humongous_dictionary() { + return &_humongous_dictionary; + } ChunkList* free_chunks(ChunkIndex index); @@ -356,41 +206,35 @@ class ChunkManager VALUE_OBJ_CLASS_SPEC { void locked_print_free_chunks(outputStream* st); void locked_print_sum_free_chunks(outputStream* st); + + void print_on(outputStream* st); }; // Used to manage the free list of Metablocks (a block corresponds // to the allocation of a quantum of metadata). class BlockFreelist VALUE_OBJ_CLASS_SPEC { -#ifdef DEALLOCATE_BLOCKS - BinaryTreeDictionary* _dictionary; -#endif - static Metablock* initialize_free_chunk(Metablock* block, size_t word_size); + BlockTreeDictionary* _dictionary; + static Metablock* initialize_free_chunk(MetaWord* p, size_t word_size); -#ifdef DEALLOCATE_BLOCKS // Accessors - BinaryTreeDictionary* dictionary() const { return _dictionary; } -#endif + BlockTreeDictionary* dictionary() const { return _dictionary; } public: BlockFreelist(); ~BlockFreelist(); // Get and return a block to the free list - Metablock* get_block(size_t word_size); - void return_block(Metablock* block, size_t word_size); + MetaWord* get_block(size_t word_size); + void return_block(MetaWord* p, size_t word_size); - size_t totalSize() { -#ifdef DEALLOCATE_BLOCKS - if (dictionary() == NULL) { - return 0; - } else { - return dictionary()->totalSize(); - } -#else + size_t total_size() { + if (dictionary() == NULL) { return 0; -#endif + } else { + return dictionary()->total_size(); } +} void print_on(outputStream* st) const; }; @@ -600,7 +444,6 @@ class VirtualSpaceList : public CHeapObj { }; }; - class Metadebug : AllStatic { // Debugging support for Metaspaces static int _deallocate_block_a_lot_count; @@ -655,7 +498,7 @@ class SpaceManager : public CHeapObj { // List of chunks in use by this SpaceManager. Allocations // are done from the current chunk. The list is used for deallocating // chunks when the SpaceManager is freed. - Metachunk* _chunks_in_use[NumberOfFreeLists]; + Metachunk* _chunks_in_use[NumberOfInUseLists]; Metachunk* _current_chunk; // Virtual space where allocation comes from. @@ -700,24 +543,6 @@ class SpaceManager : public CHeapObj { // Add chunk to the list of chunks in use void add_chunk(Metachunk* v, bool make_current); - // Debugging support - void verify_chunks_in_use_index(ChunkIndex index, Metachunk* v) { - switch (index) { - case 0: - assert(v->word_size() == SmallChunk, "Not a SmallChunk"); - break; - case 1: - assert(v->word_size() == MediumChunk, "Not a MediumChunk"); - break; - case 2: - assert(v->word_size() > MediumChunk, "Not a HumongousChunk"); - break; - default: - assert(false, "Wrong list."); - } - } - - protected: Mutex* lock() const { return _lock; } public: @@ -751,10 +576,10 @@ class SpaceManager : public CHeapObj { MetaWord* allocate(size_t word_size); // Helper for allocations - Metablock* allocate_work(size_t word_size); + MetaWord* allocate_work(size_t word_size); // Returns a block to the per manager freelist - void deallocate(MetaWord* p); + void deallocate(MetaWord* p, size_t word_size); // Based on the allocation size and a minimum chunk size, // returned chunk size (for expanding space for chunk allocation). @@ -763,7 +588,7 @@ class SpaceManager : public CHeapObj { // Called when an allocation from the current chunk fails. // Gets a new chunk (may require getting a new virtual space), // and allocates from that chunk. - Metablock* grow_and_allocate(size_t word_size); + MetaWord* grow_and_allocate(size_t word_size); // debugging support. @@ -780,6 +605,8 @@ class SpaceManager : public CHeapObj { uint const SpaceManager::_small_chunk_limit = 4; + + const char* SpaceManager::_expand_lock_name = "SpaceManager chunk allocation lock"; const int SpaceManager::_expand_lock_rank = Monitor::leaf - 1; @@ -788,39 +615,26 @@ Mutex* const SpaceManager::_expand_lock = SpaceManager::_expand_lock_name, Mutex::_allow_vm_block_flag); -#ifdef ASSERT -size_t Metablock::_overhead = - Chunk::aligned_overhead_size(sizeof(Metablock)) / BytesPerWord; -#else -size_t Metablock::_overhead = 0; -#endif size_t Metachunk::_overhead = Chunk::aligned_overhead_size(sizeof(Metachunk)) / BytesPerWord; // New blocks returned by the Metaspace are zero initialized. // We should fix the constructors to not assume this instead. Metablock* Metablock::initialize(MetaWord* p, size_t word_size) { + if (p == NULL) { + return NULL; + } + Metablock* result = (Metablock*) p; // Clear the memory Copy::fill_to_aligned_words((HeapWord*)result, word_size); #ifdef ASSERT result->set_word_size(word_size); - // Check after work size is set. - result->set_leader((void*) metaspace_allocation_leader); - result->set_trailer((void*) metaspace_allocation_trailer); #endif return result; } -void Metablock::verify() { -#ifdef ASSERT - assert(leader() == metaspace_allocation_leader && - trailer() == metaspace_allocation_trailer, - "block has been corrupted"); -#endif -} - // Metachunk methods Metachunk* Metachunk::initialize(MetaWord* ptr, size_t word_size) { @@ -843,18 +657,13 @@ Metachunk* Metachunk::initialize(MetaWord* ptr, size_t word_size) { } -Metablock* Metachunk::allocate(size_t word_size) { - Metablock* result = NULL; +MetaWord* Metachunk::allocate(size_t word_size) { + MetaWord* result = NULL; // If available, bump the pointer to allocate. if (free_word_size() >= word_size) { - result = Metablock::initialize(_top, word_size); + result = _top; _top = _top + word_size; } -#ifdef ASSERT - assert(result == NULL || - result->word_size() == word_size, - "Block size is not set correctly"); -#endif return result; } @@ -878,103 +687,85 @@ void Metachunk::print_on(outputStream* st) const { bottom(), top(), end(), word_size()); } +#ifdef ASSERT +void Metachunk::mangle() { + // Mangle the payload of the chunk and not the links that + // maintain list of chunks. + HeapWord* start = (HeapWord*)(bottom() + overhead()); + size_t word_size = capacity_word_size() - overhead(); + Copy::fill_to_words(start, word_size, metadata_chunk_initialize); +} +#endif // ASSERT void Metachunk::verify() { #ifdef ASSERT // Cannot walk through the blocks unless the blocks have // headers with sizes. - MetaWord* curr = bottom() + overhead(); - while (curr < top()) { - Metablock* block = (Metablock*) curr; - size_t word_size = block->word_size(); - block->verify(); - curr = curr + word_size; - } + assert(_bottom <= _top && + _top <= _end, + "Chunk has been smashed"); + assert(SpaceManager::is_humongous(_word_size) || + _word_size == SpaceManager::MediumChunk || + _word_size == SpaceManager::SmallChunk, + "Chunk size is wrong"); #endif return; } // BlockFreelist methods -#ifdef DEALLOCATE_BLOCKS BlockFreelist::BlockFreelist() : _dictionary(NULL) {} -#else -BlockFreelist::BlockFreelist() {} -#endif BlockFreelist::~BlockFreelist() { -#ifdef DEALLOCATE_BLOCKS if (_dictionary != NULL) { if (Verbose && TraceMetadataChunkAllocation) { _dictionary->print_free_lists(gclog_or_tty); } delete _dictionary; } -#endif } -Metablock* BlockFreelist::initialize_free_chunk(Metablock* block, size_t word_size) { -#ifdef DEALLOCATE_BLOCKS -#ifdef ASSERT - assert(word_size = block->word_size(), "Wrong chunk size"); -#endif - Metablock* result = block; - result->setSize(word_size); - result->linkPrev(NULL); - result->linkNext(NULL); +Metablock* BlockFreelist::initialize_free_chunk(MetaWord* p, size_t word_size) { + Metablock* block = (Metablock*) p; + block->set_word_size(word_size); + block->set_prev(NULL); + block->set_next(NULL); - return result; -#else - ShouldNotReachHere(); return block; -#endif } -void BlockFreelist::return_block(Metablock* block, size_t word_size) { -#ifdef ASSERT - assert(word_size = block->word_size(), "Block size is wrong");; -#endif - Metablock* free_chunk = initialize_free_chunk(block, word_size); -#ifdef DEALLOCATE_BLOCKS +void BlockFreelist::return_block(MetaWord* p, size_t word_size) { + Metablock* free_chunk = initialize_free_chunk(p, word_size); if (dictionary() == NULL) { - _dictionary = new BinaryTreeDictionary(false /* adaptive_freelists */); + _dictionary = new BlockTreeDictionary(); } - dictionary()->returnChunk(free_chunk); -#endif + dictionary()->return_chunk(free_chunk); } -Metablock* BlockFreelist::get_block(size_t word_size) { -#ifdef DEALLOCATE_BLOCKS +MetaWord* BlockFreelist::get_block(size_t word_size) { if (dictionary() == NULL) { return NULL; } - Metablock* free_chunk = - dictionary()->getChunk(word_size, FreeBlockDictionary::exactly); -#else - Metablock* free_chunk = NULL; -#endif - if (free_chunk == NULL) { + if (word_size < TreeChunk::min_size()) { + // Dark matter. Too small for dictionary. return NULL; } - assert(free_chunk->word_size() == word_size, "Size of chunk is incorrect"); - Metablock* block = Metablock::initialize((MetaWord*) free_chunk, word_size); -#ifdef ASSERT - assert(block->word_size() == word_size, "Block size is not set correctly"); -#endif - return block; + Metablock* free_block = + dictionary()->get_chunk(word_size, FreeBlockDictionary::exactly); + if (free_block == NULL) { + return NULL; + } + + return (MetaWord*) free_block; } void BlockFreelist::print_on(outputStream* st) const { -#ifdef DEALLOCATE_BLOCKS if (dictionary() == NULL) { return; } dictionary()->print_free_lists(st); -#else - return; -#endif } // VirtualSpaceNode methods @@ -1597,14 +1388,11 @@ void Metadebug::deallocate_block_a_lot(SpaceManager* sm, Metadebug::deallocate_block_a_lot_count() % MetaDataDeallocateALotInterval == 0 ) { Metadebug::set_deallocate_block_a_lot_count(0); for (uint i = 0; i < metadata_deallocate_a_lot_block; i++) { - Metablock* dummy_block = sm->allocate_work(raw_word_size); + MetaWord* dummy_block = sm->allocate_work(raw_word_size); if (dummy_block == 0) { break; } -#ifdef ASSERT - assert(dummy_block->word_size() == raw_word_size, "Block size is not set correctly"); -#endif - sm->deallocate(dummy_block->data()); + sm->deallocate(dummy_block, raw_word_size); } } else { Metadebug::inc_deallocate_block_a_lot_count(); @@ -1784,8 +1572,8 @@ void ChunkManager::verify() { } void ChunkManager::locked_verify() { - locked_verify_free_chunks_total(); locked_verify_free_chunks_count(); + locked_verify_free_chunks_total(); } void ChunkManager::locked_print_free_chunks(outputStream* st) { @@ -1803,7 +1591,6 @@ ChunkList* ChunkManager::free_chunks(ChunkIndex index) { return &_free_chunks[index]; } - // These methods that sum the free chunk lists are used in printing // methods that are used in product builds. size_t ChunkManager::sum_free_chunks() { @@ -1818,6 +1605,7 @@ size_t ChunkManager::sum_free_chunks() { result = result + list->sum_list_capacity(); } + result = result + humongous_dictionary()->total_size(); return result; } @@ -1831,6 +1619,7 @@ size_t ChunkManager::sum_free_chunks_count() { } count = count + list->sum_list_count(); } + count = count + humongous_dictionary()->total_free_blocks(); return count; } @@ -1875,23 +1664,24 @@ Metachunk* ChunkManager::free_chunks_get(size_t word_size) { assert_lock_strong(SpaceManager::expand_lock()); locked_verify(); - ChunkList* free_list = find_free_chunks_list(word_size); - assert(free_list != NULL, "Sanity check"); - Metachunk* chunk = free_list->head(); - debug_only(Metachunk* debug_head = chunk;) + Metachunk* chunk = NULL; + if (!SpaceManager::is_humongous(word_size)) { + ChunkList* free_list = find_free_chunks_list(word_size); + assert(free_list != NULL, "Sanity check"); - if (chunk == NULL) { - return NULL; - } + chunk = free_list->head(); + debug_only(Metachunk* debug_head = chunk;) + + if (chunk == NULL) { + return NULL; + } - Metachunk* prev_chunk = chunk; - if (chunk->word_size() == word_size) { - // Chunk is being removed from the chunks free list. - dec_free_chunks_total(chunk->capacity_word_size()); // Remove the chunk as the head of the list. free_list->set_head(chunk->next()); chunk->set_next(NULL); + // Chunk has been removed from the chunks free list. + dec_free_chunks_total(chunk->capacity_word_size()); if (TraceMetadataChunkAllocation && Verbose) { tty->print_cr("ChunkManager::free_chunks_get: free_list " @@ -1899,79 +1689,24 @@ Metachunk* ChunkManager::free_chunks_get(size_t word_size) { free_list, chunk, chunk->word_size()); } } else { - assert(SpaceManager::is_humongous(word_size), - "Should only need to check humongous"); - // This code to find the best fit is just for purposes of - // investigating the loss due to fragmentation on a humongous - // chunk. It will be replace by a binaryTreeDictionary for - // the humongous chunks. - uint count = 0; - Metachunk* best_fit = NULL; - Metachunk* best_fit_prev = NULL; - while (chunk != NULL) { - count++; - if (chunk->word_size() < word_size) { - prev_chunk = chunk; - chunk = chunk->next(); - } else if (chunk->word_size() == word_size) { - break; - } else { - if (best_fit == NULL || - best_fit->word_size() > chunk->word_size()) { - best_fit_prev = prev_chunk; - best_fit = chunk; - } - prev_chunk = chunk; - chunk = chunk->next(); + chunk = humongous_dictionary()->get_chunk( + word_size, + FreeBlockDictionary::atLeast); + + if (chunk != NULL) { + if (TraceMetadataHumongousAllocation) { + size_t waste = chunk->word_size() - word_size; + tty->print_cr("Free list allocate humongous chunk size " SIZE_FORMAT + " for requested size " SIZE_FORMAT + " waste " SIZE_FORMAT, + chunk->word_size(), word_size, waste); } + // Chunk is being removed from the chunks free list. + dec_free_chunks_total(chunk->capacity_word_size()); +#ifdef ASSERT + chunk->set_is_free(false); +#endif } - if (chunk == NULL) { - prev_chunk = best_fit_prev; - chunk = best_fit; - } - if (chunk != NULL) { - if (TraceMetadataHumongousAllocation) { - size_t waste = chunk->word_size() - word_size; - tty->print_cr("Free list allocate humongous chunk size " SIZE_FORMAT - " for requested size " SIZE_FORMAT - " waste " SIZE_FORMAT - " found at " SIZE_FORMAT " of " SIZE_FORMAT, - chunk->word_size(), word_size, waste, - count, free_list->sum_list_count()); - } - // Chunk is being removed from the chunks free list. - dec_free_chunks_total(chunk->capacity_word_size()); - // Remove the chunk if it is at the head of the list. - if (chunk == free_list->head()) { - free_list->set_head(chunk->next()); - - if (TraceMetadataHumongousAllocation) { - tty->print_cr("ChunkManager::free_chunks_get: humongous free_list " - PTR_FORMAT " chunk " PTR_FORMAT " size " SIZE_FORMAT - " new head " PTR_FORMAT, - free_list, chunk, chunk->word_size(), - free_list->head()); - } - } else { - // Remove a chunk in the interior of the list - prev_chunk->set_next(chunk->next()); - - if (TraceMetadataHumongousAllocation) { - tty->print_cr("ChunkManager::free_chunks_get: humongous free_list " - PTR_FORMAT " chunk " PTR_FORMAT " size " SIZE_FORMAT - PTR_FORMAT " prev " PTR_FORMAT " next " PTR_FORMAT, - free_list, chunk, chunk->word_size(), - prev_chunk, chunk->next()); - } - } - chunk->set_next(NULL); - } else { - if (TraceMetadataHumongousAllocation) { - tty->print_cr("ChunkManager::free_chunks_get: New humongous chunk of size " - SIZE_FORMAT, - word_size); - } - } } locked_verify(); return chunk; @@ -2000,12 +1735,18 @@ Metachunk* ChunkManager::chunk_freelist_allocate(size_t word_size) { return chunk; } +void ChunkManager::print_on(outputStream* out) { + if (PrintFLSStatistics != 0) { + humongous_dictionary()->report_statistics(); + } +} + // SpaceManager methods size_t SpaceManager::sum_free_in_chunks_in_use() const { MutexLockerEx cl(lock(), Mutex::_no_safepoint_check_flag); size_t free = 0; - for (ChunkIndex i = SmallIndex; i < NumberOfFreeLists; i = next_chunk_index(i)) { + for (ChunkIndex i = SmallIndex; i < NumberOfInUseLists; i = next_chunk_index(i)) { Metachunk* chunk = chunks_in_use(i); while (chunk != NULL) { free += chunk->free_word_size(); @@ -2018,11 +1759,12 @@ size_t SpaceManager::sum_free_in_chunks_in_use() const { size_t SpaceManager::sum_waste_in_chunks_in_use() const { MutexLockerEx cl(lock(), Mutex::_no_safepoint_check_flag); size_t result = 0; - for (ChunkIndex i = SmallIndex; i < NumberOfFreeLists; i = next_chunk_index(i)) { - // Count the free space in all the chunk but not the - // current chunk from which allocations are still being done. + for (ChunkIndex i = SmallIndex; i < NumberOfInUseLists; i = next_chunk_index(i)) { + + result += sum_waste_in_chunks_in_use(i); } + return result; } @@ -2033,10 +1775,10 @@ size_t SpaceManager::sum_waste_in_chunks_in_use(ChunkIndex index) const { // Count the free space in all the chunk but not the // current chunk from which allocations are still being done. if (chunk != NULL) { - while (chunk != NULL) { - if (chunk != current_chunk()) { - result += chunk->free_word_size(); - } + Metachunk* prev = chunk; + while (chunk != NULL && chunk != current_chunk()) { + result += chunk->free_word_size(); + prev = chunk; chunk = chunk->next(); count++; } @@ -2047,7 +1789,7 @@ size_t SpaceManager::sum_waste_in_chunks_in_use(ChunkIndex index) const { size_t SpaceManager::sum_capacity_in_chunks_in_use() const { MutexLockerEx cl(lock(), Mutex::_no_safepoint_check_flag); size_t sum = 0; - for (ChunkIndex i = SmallIndex; i < NumberOfFreeLists; i = next_chunk_index(i)) { + for (ChunkIndex i = SmallIndex; i < NumberOfInUseLists; i = next_chunk_index(i)) { Metachunk* chunk = chunks_in_use(i); while (chunk != NULL) { // Just changed this sum += chunk->capacity_word_size(); @@ -2061,9 +1803,10 @@ size_t SpaceManager::sum_capacity_in_chunks_in_use() const { size_t SpaceManager::sum_count_in_chunks_in_use() { size_t count = 0; - for (ChunkIndex i = SmallIndex; i < NumberOfFreeLists; i = next_chunk_index(i)) { + for (ChunkIndex i = SmallIndex; i < NumberOfInUseLists; i = next_chunk_index(i)) { count = count + sum_count_in_chunks_in_use(i); } + return count; } @@ -2081,7 +1824,7 @@ size_t SpaceManager::sum_count_in_chunks_in_use(ChunkIndex i) { size_t SpaceManager::sum_used_in_chunks_in_use() const { MutexLockerEx cl(lock(), Mutex::_no_safepoint_check_flag); size_t used = 0; - for (ChunkIndex i = SmallIndex; i < NumberOfFreeLists; i = next_chunk_index(i)) { + for (ChunkIndex i = SmallIndex; i < NumberOfInUseLists; i = next_chunk_index(i)) { Metachunk* chunk = chunks_in_use(i); while (chunk != NULL) { used += chunk->used_word_size(); @@ -2139,15 +1882,13 @@ size_t SpaceManager::calc_chunk_size(size_t word_size) { gclog_or_tty->print_cr(" word_size " PTR_FORMAT, word_size); gclog_or_tty->print_cr(" chunk_word_size " PTR_FORMAT, chunk_word_size); - gclog_or_tty->print_cr(" block overhead " PTR_FORMAT - " chunk overhead " PTR_FORMAT, - Metablock::overhead(), + gclog_or_tty->print_cr(" chunk overhead " PTR_FORMAT, Metachunk::overhead()); } return chunk_word_size; } -Metablock* SpaceManager::grow_and_allocate(size_t word_size) { +MetaWord* SpaceManager::grow_and_allocate(size_t word_size) { assert(vs_list()->current_virtual_space() != NULL, "Should have been set"); assert(current_chunk() == NULL || @@ -2180,7 +1921,7 @@ Metablock* SpaceManager::grow_and_allocate(size_t word_size) { void SpaceManager::print_on(outputStream* st) const { for (ChunkIndex i = SmallIndex; - i < NumberOfFreeLists ; + i < NumberOfInUseLists ; i = next_chunk_index(i) ) { st->print_cr(" chunks_in_use " PTR_FORMAT " chunk size " PTR_FORMAT, chunks_in_use(i), @@ -2191,8 +1932,11 @@ void SpaceManager::print_on(outputStream* st) const { sum_waste_in_chunks_in_use(SmallIndex), sum_waste_in_chunks_in_use(MediumIndex), sum_waste_in_chunks_in_use(HumongousIndex)); - // Nothing in them yet - // block_freelists()->print_on(st); + // block free lists + if (block_freelists() != NULL) { + st->print_cr("total in block free lists " SIZE_FORMAT, + block_freelists()->total_size()); + } } SpaceManager::SpaceManager(Mutex* lock, VirtualSpaceList* vs_list) : @@ -2200,7 +1944,7 @@ SpaceManager::SpaceManager(Mutex* lock, VirtualSpaceList* vs_list) : _allocation_total(0), _lock(lock) { Metadebug::init_allocation_fail_alot_count(); - for (ChunkIndex i = SmallIndex; i < NumberOfFreeLists; i = next_chunk_index(i)) { + for (ChunkIndex i = SmallIndex; i < NumberOfInUseLists; i = next_chunk_index(i)) { _chunks_in_use[i] = NULL; } _current_chunk = NULL; @@ -2262,22 +2006,24 @@ SpaceManager::~SpaceManager() { // Humongous chunks are never the current chunk. Metachunk* humongous_chunks = chunks_in_use(HumongousIndex); - if (humongous_chunks != NULL) { - chunk_manager->free_humongous_chunks()->add_at_head(humongous_chunks); - set_chunks_in_use(HumongousIndex, NULL); + while (humongous_chunks != NULL) { +#ifdef ASSERT + humongous_chunks->set_is_free(true); +#endif + Metachunk* next_humongous_chunks = humongous_chunks->next(); + chunk_manager->humongous_dictionary()->return_chunk(humongous_chunks); + humongous_chunks = next_humongous_chunks; } + set_chunks_in_use(HumongousIndex, NULL); chunk_manager->locked_verify(); } -void SpaceManager::deallocate(MetaWord* p) { +void SpaceManager::deallocate(MetaWord* p, size_t word_size) { assert_lock_strong(_lock); - ShouldNotReachHere(); // Where is this needed. -#ifdef DEALLOCATE_BLOCKS - Metablock* block = Metablock::metablock_from_data(p); - // This is expense but kept it until integration JJJ - assert(contains((address)block), "Block does not belong to this metaspace"); - block_freelists()->return_block(block, word_size); -#endif + size_t min_size = TreeChunk::min_size(); + assert(word_size >= min_size, + err_msg("Should not deallocate dark matter " SIZE_FORMAT, word_size)); + block_freelists()->return_block(p, word_size); } // Adds a chunk to the list of chunks in use. @@ -2366,50 +2112,40 @@ void SpaceManager::add_chunk(Metachunk* new_chunk, bool make_current) { MetaWord* SpaceManager::allocate(size_t word_size) { MutexLockerEx cl(lock(), Mutex::_no_safepoint_check_flag); - size_t block_overhead = Metablock::overhead(); // If only the dictionary is going to be used (i.e., no // indexed free list), then there is a minimum size requirement. // MinChunkSize is a placeholder for the real minimum size JJJ - size_t byte_size_with_overhead = (word_size + block_overhead) * BytesPerWord; -#ifdef DEALLOCATE_BLOCKS - size_t raw_bytes_size = MAX2(ARENA_ALIGN(byte_size_with_overhead), - MinChunkSize * BytesPerWord); -#else - size_t raw_bytes_size = ARENA_ALIGN(byte_size_with_overhead); -#endif + size_t byte_size = word_size * BytesPerWord; + + size_t byte_size_with_overhead = byte_size + Metablock::overhead(); + + size_t raw_bytes_size = MAX2(byte_size_with_overhead, + Metablock::min_block_byte_size()); + raw_bytes_size = ARENA_ALIGN(raw_bytes_size); size_t raw_word_size = raw_bytes_size / BytesPerWord; assert(raw_word_size * BytesPerWord == raw_bytes_size, "Size problem"); BlockFreelist* fl = block_freelists(); - Metablock* block = NULL; + MetaWord* p = NULL; // Allocation from the dictionary is expensive in the sense that // the dictionary has to be searched for a size. Don't allocate // from the dictionary until it starts to get fat. Is this // a reasonable policy? Maybe an skinny dictionary is fast enough // for allocations. Do some profiling. JJJ - if (fl->totalSize() > allocation_from_dictionary_limit) { - block = fl->get_block(raw_word_size); + if (fl->total_size() > allocation_from_dictionary_limit) { + p = fl->get_block(raw_word_size); } - if (block == NULL) { - block = allocate_work(raw_word_size); - if (block == NULL) { - return NULL; - } + if (p == NULL) { + p = allocate_work(raw_word_size); } Metadebug::deallocate_block_a_lot(this, raw_word_size); - // Push the allocation past the word containing the size and leader. -#ifdef ASSERT - MetaWord* result = block->data(); - return result; -#else - return (MetaWord*) block; -#endif + return p; } // Returns the address of spaced allocated for "word_size". // This methods does not know about blocks (Metablocks) -Metablock* SpaceManager::allocate_work(size_t word_size) { +MetaWord* SpaceManager::allocate_work(size_t word_size) { assert_lock_strong(_lock); #ifdef ASSERT if (Metadebug::test_metadata_failure()) { @@ -2417,7 +2153,7 @@ Metablock* SpaceManager::allocate_work(size_t word_size) { } #endif // Is there space in the current chunk? - Metablock* result = NULL; + MetaWord* result = NULL; // For DumpSharedSpaces, only allocate out of the current chunk which is // never null because we gave it the size we wanted. Caller reports out @@ -2436,8 +2172,8 @@ Metablock* SpaceManager::allocate_work(size_t word_size) { } if (result > 0) { inc_allocation_total(word_size); - assert(result != (Metablock*) chunks_in_use(MediumIndex), "Head of the list is being allocated"); - assert(result->word_size() == word_size, "Size not set correctly"); + assert(result != (MetaWord*) chunks_in_use(MediumIndex), + "Head of the list is being allocated"); } return result; @@ -2447,13 +2183,13 @@ void SpaceManager::verify() { // If there are blocks in the dictionary, then // verfication of chunks does not work since // being in the dictionary alters a chunk. - if (block_freelists()->totalSize() == 0) { + if (block_freelists()->total_size() == 0) { // Skip the small chunks because their next link points to // medium chunks. This is because the small chunk is the // current chunk (for allocations) until it is full and the // the addition of the next chunk does not NULL the next // like of the small chunk. - for (ChunkIndex i = MediumIndex; i < NumberOfFreeLists; i = next_chunk_index(i)) { + for (ChunkIndex i = MediumIndex; i < NumberOfInUseLists; i = next_chunk_index(i)) { Metachunk* curr = chunks_in_use(i); while (curr != NULL) { curr->verify(); @@ -2492,7 +2228,7 @@ void SpaceManager::dump(outputStream* const out) const { // Add up statistics for all chunks in this SpaceManager. for (ChunkIndex index = SmallIndex; - index < NumberOfFreeLists; + index < NumberOfInUseLists; index = next_chunk_index(index)) { for (Metachunk* curr = chunks_in_use(index); curr != NULL; @@ -2521,7 +2257,7 @@ void SpaceManager::dump(outputStream* const out) const { #ifdef ASSERT void SpaceManager::mangle_freed_chunks() { for (ChunkIndex index = SmallIndex; - index < NumberOfFreeLists; + index < NumberOfInUseLists; index = next_chunk_index(index)) { for (Metachunk* curr = chunks_in_use(index); curr != NULL; @@ -2833,13 +2569,12 @@ void Metaspace::initialize(Mutex* lock, size_t initial_size) { } } - MetaWord* Metaspace::allocate(size_t word_size, MetadataType mdtype) { // DumpSharedSpaces doesn't use class metadata area (yet) if (mdtype == ClassType && !DumpSharedSpaces) { - return class_vsm()->allocate(word_size); + return class_vsm()->allocate(word_size); } else { - return vsm()->allocate(word_size); + return vsm()->allocate(word_size); } } @@ -2853,6 +2588,7 @@ MetaWord* Metaspace::expand_and_allocate(size_t word_size, MetadataType mdtype) gclog_or_tty->print_cr("Increase capacity to GC from " SIZE_FORMAT " to " SIZE_FORMAT, before_inc, MetaspaceGC::capacity_until_GC()); } + result = allocate(word_size, mdtype); return result; @@ -2889,37 +2625,39 @@ size_t Metaspace::capacity_words(MetadataType mdtype) const { void Metaspace::deallocate(MetaWord* ptr, size_t word_size, bool is_class) { if (SafepointSynchronize::is_at_safepoint()) { assert(Thread::current()->is_VM_thread(), "should be the VM thread"); - // Don't take lock -#ifdef DEALLOCATE_BLOCKS - if (is_class) { - class_vsm()->deallocate(ptr); - } else { - vsm()->deallocate(ptr); - } -#else + // Don't take Heap_lock + MutexLocker ml(vsm()->lock()); + if (word_size < TreeChunk::min_size()) { + // Dark matter. Too small for dictionary. #ifdef ASSERT - Copy::fill_to_words((HeapWord*)ptr, word_size, metadata_deallocate); + Copy::fill_to_words((HeapWord*)ptr, word_size, 0xf5f5f5f5); #endif -#endif - + return; + } + if (is_class) { + class_vsm()->deallocate(ptr, word_size); + } else { + vsm()->deallocate(ptr, word_size); + } } else { MutexLocker ml(vsm()->lock()); -#ifdef DEALLOCATE_BLOCKS - if (is_class) { - class_vsm()->deallocate(ptr); - } else { - vsm()->deallocate(ptr); - } -#else + if (word_size < TreeChunk::min_size()) { + // Dark matter. Too small for dictionary. #ifdef ASSERT - Copy::fill_to_words((HeapWord*)ptr, word_size, metadata_deallocate); -#endif + Copy::fill_to_words((HeapWord*)ptr, word_size, 0xf5f5f5f5); #endif + return; + } + if (is_class) { + class_vsm()->deallocate(ptr, word_size); + } else { + vsm()->deallocate(ptr, word_size); + } } } -MetaWord* Metaspace::allocate(ClassLoaderData* loader_data, size_t word_size, +Metablock* Metaspace::allocate(ClassLoaderData* loader_data, size_t word_size, bool read_only, MetadataType mdtype, TRAPS) { if (HAS_PENDING_EXCEPTION) { assert(false, "Should not allocate with exception pending"); @@ -2943,7 +2681,7 @@ MetaWord* Metaspace::allocate(ClassLoaderData* loader_data, size_t word_size, if (result == NULL) { report_out_of_shared_space(read_only ? SharedReadOnly : SharedReadWrite); } - return result; + return Metablock::initialize(result, word_size); } result = loader_data->metaspace_non_null()->allocate(word_size, mdtype); @@ -2951,7 +2689,7 @@ MetaWord* Metaspace::allocate(ClassLoaderData* loader_data, size_t word_size, if (result == NULL) { // Try to clean out some memory and retry. result = - Universe::heap()->collector_policy()->satisfy_failed_metadata_allocation( + Universe::heap()->collector_policy()->satisfy_failed_metadata_allocation( loader_data, word_size, mdtype); // If result is still null, we are out of memory. @@ -2967,7 +2705,7 @@ MetaWord* Metaspace::allocate(ClassLoaderData* loader_data, size_t word_size, THROW_OOP_0(Universe::out_of_memory_error_perm_gen()); } } - return result; + return Metablock::initialize(result, word_size); } void Metaspace::print_on(outputStream* out) const { diff --git a/hotspot/src/share/vm/memory/metaspace.hpp b/hotspot/src/share/vm/memory/metaspace.hpp index 169a3b71d29..c42a979cb1d 100644 --- a/hotspot/src/share/vm/memory/metaspace.hpp +++ b/hotspot/src/share/vm/memory/metaspace.hpp @@ -57,12 +57,10 @@ // class ClassLoaderData; +class Metablock; class MetaWord; class Mutex; class outputStream; -class FreeChunk; -template class FreeList; -template class BinaryTreeDictionary; class SpaceManager; // Metaspaces each have a SpaceManager and allocations @@ -128,7 +126,7 @@ class Metaspace : public CHeapObj { size_t capacity_words(MetadataType mdtype) const; size_t waste_words(MetadataType mdtype) const; - static MetaWord* allocate(ClassLoaderData* loader_data, size_t size, + static Metablock* allocate(ClassLoaderData* loader_data, size_t size, bool read_only, MetadataType mdtype, TRAPS); void deallocate(MetaWord* ptr, size_t byte_size, bool is_class); diff --git a/hotspot/src/share/vm/memory/metaspaceShared.cpp b/hotspot/src/share/vm/memory/metaspaceShared.cpp index f69e7586e08..dde26b5f8c5 100644 --- a/hotspot/src/share/vm/memory/metaspaceShared.cpp +++ b/hotspot/src/share/vm/memory/metaspaceShared.cpp @@ -663,8 +663,8 @@ bool MetaspaceShared::is_in_shared_space(const void* p) { if (_ro_base == NULL || _rw_base == NULL) { return false; } else { - return ((p > _ro_base && p < (_ro_base + SharedReadOnlySize)) || - (p > _rw_base && p < (_rw_base + SharedReadWriteSize))); + return ((p >= _ro_base && p < (_ro_base + SharedReadOnlySize)) || + (p >= _rw_base && p < (_rw_base + SharedReadWriteSize))); } } @@ -693,14 +693,6 @@ bool MetaspaceShared::map_shared_spaces(FileMapInfo* mapinfo) { ReservedSpace shared_rs = mapinfo->reserve_shared_memory(); if (!shared_rs.is_reserved()) return false; - // Split reserved memory into pieces (windows needs this) - ReservedSpace ro_rs = shared_rs.first_part(SharedReadOnlySize); - ReservedSpace tmp_rs1 = shared_rs.last_part(SharedReadOnlySize); - ReservedSpace rw_rs = tmp_rs1.first_part(SharedReadWriteSize); - ReservedSpace tmp_rs2 = tmp_rs1.last_part(SharedReadWriteSize); - ReservedSpace md_rs = tmp_rs2.first_part(SharedMiscDataSize); - ReservedSpace mc_rs = tmp_rs2.last_part(SharedMiscDataSize); - // Map each shared region if ((_ro_base = mapinfo->map_region(ro)) != NULL && (_rw_base = mapinfo->map_region(rw)) != NULL && diff --git a/hotspot/src/share/vm/memory/resourceArea.hpp b/hotspot/src/share/vm/memory/resourceArea.hpp index f42c0f62457..f1418ce19c3 100644 --- a/hotspot/src/share/vm/memory/resourceArea.hpp +++ b/hotspot/src/share/vm/memory/resourceArea.hpp @@ -127,15 +127,21 @@ protected: void reset_to_mark() { if (UseMallocOnly) free_malloced_objects(); - if( _chunk->next() ) // Delete later chunks + if( _chunk->next() ) { // Delete later chunks + // reset arena size before delete chunks. Otherwise, the total + // arena size could exceed total chunk size + assert(_area->size_in_bytes() > size_in_bytes(), "Sanity check"); + _area->set_size_in_bytes(size_in_bytes()); _chunk->next_chop(); + } else { + assert(_area->size_in_bytes() == size_in_bytes(), "Sanity check"); + } _area->_chunk = _chunk; // Roll back arena to saved chunk _area->_hwm = _hwm; _area->_max = _max; // clear out this chunk (to detect allocation bugs) if (ZapResourceArea) memset(_hwm, badResourceValue, _max - _hwm); - _area->set_size_in_bytes(size_in_bytes()); } ~ResourceMark() { @@ -219,15 +225,21 @@ protected: void reset_to_mark() { if (UseMallocOnly) free_malloced_objects(); - if( _chunk->next() ) // Delete later chunks + if( _chunk->next() ) { // Delete later chunks + // reset arena size before delete chunks. Otherwise, the total + // arena size could exceed total chunk size + assert(_area->size_in_bytes() > size_in_bytes(), "Sanity check"); + _area->set_size_in_bytes(size_in_bytes()); _chunk->next_chop(); + } else { + assert(_area->size_in_bytes() == size_in_bytes(), "Sanity check"); + } _area->_chunk = _chunk; // Roll back arena to saved chunk _area->_hwm = _hwm; _area->_max = _max; // clear out this chunk (to detect allocation bugs) if (ZapResourceArea) memset(_hwm, badResourceValue, _max - _hwm); - _area->set_size_in_bytes(size_in_bytes()); } ~DeoptResourceMark() { diff --git a/hotspot/src/share/vm/oops/method.cpp b/hotspot/src/share/vm/oops/method.cpp index 5a1032f771e..9849829ea29 100644 --- a/hotspot/src/share/vm/oops/method.cpp +++ b/hotspot/src/share/vm/oops/method.cpp @@ -1155,8 +1155,12 @@ methodHandle Method::clone_with_new_data(methodHandle m, u_char* new_code, int n vmSymbols::SID Method::klass_id_for_intrinsics(Klass* holder) { // if loader is not the default loader (i.e., != NULL), we can't know the intrinsics // because we are not loading from core libraries - if (InstanceKlass::cast(holder)->class_loader() != NULL) + // exception: the AES intrinsics come from lib/ext/sunjce_provider.jar + // which does not use the class default class loader so we check for its loader here + if ((InstanceKlass::cast(holder)->class_loader() != NULL) && + InstanceKlass::cast(holder)->class_loader()->klass()->name() != vmSymbols::sun_misc_Launcher_ExtClassLoader()) { return vmSymbols::NO_SID; // regardless of name, no intrinsics here + } // see if the klass name is well-known: Symbol* klass_name = InstanceKlass::cast(holder)->name(); diff --git a/hotspot/src/share/vm/opto/c2_globals.hpp b/hotspot/src/share/vm/opto/c2_globals.hpp index 80996a5d713..4fdebf526cb 100644 --- a/hotspot/src/share/vm/opto/c2_globals.hpp +++ b/hotspot/src/share/vm/opto/c2_globals.hpp @@ -439,6 +439,9 @@ product(bool, DoEscapeAnalysis, true, \ "Perform escape analysis") \ \ + develop(bool, ExitEscapeAnalysisOnTimeout, true, \ + "Exit or throw assert in EA when it reaches time limit") \ + \ notproduct(bool, PrintEscapeAnalysis, false, \ "Print the results of escape analysis") \ \ diff --git a/hotspot/src/share/vm/opto/callGenerator.cpp b/hotspot/src/share/vm/opto/callGenerator.cpp index 547096b3dfc..93f2b859ba0 100644 --- a/hotspot/src/share/vm/opto/callGenerator.cpp +++ b/hotspot/src/share/vm/opto/callGenerator.cpp @@ -670,6 +670,129 @@ CallGenerator* CallGenerator::for_method_handle_inline(JVMState* jvms, ciMethod* } +//------------------------PredictedIntrinsicGenerator------------------------------ +// Internal class which handles all predicted Intrinsic calls. +class PredictedIntrinsicGenerator : public CallGenerator { + CallGenerator* _intrinsic; + CallGenerator* _cg; + +public: + PredictedIntrinsicGenerator(CallGenerator* intrinsic, + CallGenerator* cg) + : CallGenerator(cg->method()) + { + _intrinsic = intrinsic; + _cg = cg; + } + + virtual bool is_virtual() const { return true; } + virtual bool is_inlined() const { return true; } + virtual bool is_intrinsic() const { return true; } + + virtual JVMState* generate(JVMState* jvms); +}; + + +CallGenerator* CallGenerator::for_predicted_intrinsic(CallGenerator* intrinsic, + CallGenerator* cg) { + return new PredictedIntrinsicGenerator(intrinsic, cg); +} + + +JVMState* PredictedIntrinsicGenerator::generate(JVMState* jvms) { + GraphKit kit(jvms); + PhaseGVN& gvn = kit.gvn(); + + CompileLog* log = kit.C->log(); + if (log != NULL) { + log->elem("predicted_intrinsic bci='%d' method='%d'", + jvms->bci(), log->identify(method())); + } + + Node* slow_ctl = _intrinsic->generate_predicate(kit.sync_jvms()); + if (kit.failing()) + return NULL; // might happen because of NodeCountInliningCutoff + + SafePointNode* slow_map = NULL; + JVMState* slow_jvms; + if (slow_ctl != NULL) { + PreserveJVMState pjvms(&kit); + kit.set_control(slow_ctl); + if (!kit.stopped()) { + slow_jvms = _cg->generate(kit.sync_jvms()); + if (kit.failing()) + return NULL; // might happen because of NodeCountInliningCutoff + assert(slow_jvms != NULL, "must be"); + kit.add_exception_states_from(slow_jvms); + kit.set_map(slow_jvms->map()); + if (!kit.stopped()) + slow_map = kit.stop(); + } + } + + if (kit.stopped()) { + // Predicate is always false. + kit.set_jvms(slow_jvms); + return kit.transfer_exceptions_into_jvms(); + } + + // Generate intrinsic code: + JVMState* new_jvms = _intrinsic->generate(kit.sync_jvms()); + if (new_jvms == NULL) { + // Intrinsic failed, so use slow code or make a direct call. + if (slow_map == NULL) { + CallGenerator* cg = CallGenerator::for_direct_call(method()); + new_jvms = cg->generate(kit.sync_jvms()); + } else { + kit.set_jvms(slow_jvms); + return kit.transfer_exceptions_into_jvms(); + } + } + kit.add_exception_states_from(new_jvms); + kit.set_jvms(new_jvms); + + // Need to merge slow and fast? + if (slow_map == NULL) { + // The fast path is the only path remaining. + return kit.transfer_exceptions_into_jvms(); + } + + if (kit.stopped()) { + // Intrinsic method threw an exception, so it's just the slow path after all. + kit.set_jvms(slow_jvms); + return kit.transfer_exceptions_into_jvms(); + } + + // Finish the diamond. + kit.C->set_has_split_ifs(true); // Has chance for split-if optimization + RegionNode* region = new (kit.C) RegionNode(3); + region->init_req(1, kit.control()); + region->init_req(2, slow_map->control()); + kit.set_control(gvn.transform(region)); + Node* iophi = PhiNode::make(region, kit.i_o(), Type::ABIO); + iophi->set_req(2, slow_map->i_o()); + kit.set_i_o(gvn.transform(iophi)); + kit.merge_memory(slow_map->merged_memory(), region, 2); + uint tos = kit.jvms()->stkoff() + kit.sp(); + uint limit = slow_map->req(); + for (uint i = TypeFunc::Parms; i < limit; i++) { + // Skip unused stack slots; fast forward to monoff(); + if (i == tos) { + i = kit.jvms()->monoff(); + if( i >= limit ) break; + } + Node* m = kit.map()->in(i); + Node* n = slow_map->in(i); + if (m != n) { + const Type* t = gvn.type(m)->meet(gvn.type(n)); + Node* phi = PhiNode::make(region, m, t); + phi->set_req(2, n); + kit.map()->set_req(i, gvn.transform(phi)); + } + } + return kit.transfer_exceptions_into_jvms(); +} + //-------------------------UncommonTrapCallGenerator----------------------------- // Internal class which handles all out-of-line calls checking receiver type. class UncommonTrapCallGenerator : public CallGenerator { diff --git a/hotspot/src/share/vm/opto/callGenerator.hpp b/hotspot/src/share/vm/opto/callGenerator.hpp index 3cfd39df63e..ae59173bf7d 100644 --- a/hotspot/src/share/vm/opto/callGenerator.hpp +++ b/hotspot/src/share/vm/opto/callGenerator.hpp @@ -143,6 +143,9 @@ class CallGenerator : public ResourceObj { // Registry for intrinsics: static CallGenerator* for_intrinsic(ciMethod* m); static void register_intrinsic(ciMethod* m, CallGenerator* cg); + static CallGenerator* for_predicted_intrinsic(CallGenerator* intrinsic, + CallGenerator* cg); + virtual Node* generate_predicate(JVMState* jvms) { return NULL; }; static void print_inlining(ciMethod* callee, int inline_level, int bci, const char* msg) { if (PrintInlining) diff --git a/hotspot/src/share/vm/opto/compile.cpp b/hotspot/src/share/vm/opto/compile.cpp index d870872a9d4..c4da70ee32c 100644 --- a/hotspot/src/share/vm/opto/compile.cpp +++ b/hotspot/src/share/vm/opto/compile.cpp @@ -3047,9 +3047,9 @@ bool Compile::Constant::operator==(const Constant& other) { case T_LONG: case T_DOUBLE: return (_v._value.j == other._v._value.j); case T_OBJECT: - case T_METADATA: return (_v._metadata == other._v._metadata); case T_ADDRESS: return (_v._value.l == other._v._value.l); case T_VOID: return (_v._value.l == other._v._value.l); // jump-table entries + case T_METADATA: return (_v._metadata == other._v._metadata); default: ShouldNotReachHere(); } return false; diff --git a/hotspot/src/share/vm/opto/compile.hpp b/hotspot/src/share/vm/opto/compile.hpp index 6bcf3d3da20..44bf277689c 100644 --- a/hotspot/src/share/vm/opto/compile.hpp +++ b/hotspot/src/share/vm/opto/compile.hpp @@ -149,7 +149,7 @@ class Compile : public Phase { private: BasicType _type; union { - jvalue _value; + jvalue _value; Metadata* _metadata; } _v; int _offset; // offset of this constant (in bytes) relative to the constant table base. diff --git a/hotspot/src/share/vm/opto/doCall.cpp b/hotspot/src/share/vm/opto/doCall.cpp index 30a01f34b3a..95d14884163 100644 --- a/hotspot/src/share/vm/opto/doCall.cpp +++ b/hotspot/src/share/vm/opto/doCall.cpp @@ -107,7 +107,17 @@ CallGenerator* Compile::call_generator(ciMethod* callee, int vtable_index, bool // intrinsics handle strict f.p. correctly. if (allow_inline && allow_intrinsics) { CallGenerator* cg = find_intrinsic(callee, call_is_virtual); - if (cg != NULL) return cg; + if (cg != NULL) { + if (cg->is_predicted()) { + // Code without intrinsic but, hopefully, inlined. + CallGenerator* inline_cg = this->call_generator(callee, + vtable_index, call_is_virtual, jvms, allow_inline, prof_factor, false); + if (inline_cg != NULL) { + cg = CallGenerator::for_predicted_intrinsic(cg, inline_cg); + } + } + return cg; + } } // Do method handle calls. diff --git a/hotspot/src/share/vm/opto/escape.cpp b/hotspot/src/share/vm/opto/escape.cpp index 9fd3180505d..a5aa47119da 100644 --- a/hotspot/src/share/vm/opto/escape.cpp +++ b/hotspot/src/share/vm/opto/escape.cpp @@ -893,12 +893,16 @@ void ConnectionGraph::process_call_arguments(CallNode *call) { arg_has_oops && (i > TypeFunc::Parms); #ifdef ASSERT if (!(is_arraycopy || - call->as_CallLeaf()->_name != NULL && - (strcmp(call->as_CallLeaf()->_name, "g1_wb_pre") == 0 || - strcmp(call->as_CallLeaf()->_name, "g1_wb_post") == 0 )) - ) { + (call->as_CallLeaf()->_name != NULL && + (strcmp(call->as_CallLeaf()->_name, "g1_wb_pre") == 0 || + strcmp(call->as_CallLeaf()->_name, "g1_wb_post") == 0 || + strcmp(call->as_CallLeaf()->_name, "aescrypt_encryptBlock") == 0 || + strcmp(call->as_CallLeaf()->_name, "aescrypt_decryptBlock") == 0 || + strcmp(call->as_CallLeaf()->_name, "cipherBlockChaining_encryptAESCrypt") == 0 || + strcmp(call->as_CallLeaf()->_name, "cipherBlockChaining_decryptAESCrypt") == 0) + ))) { call->dump(); - assert(false, "EA: unexpected CallLeaf"); + fatal(err_msg_res("EA unexpected CallLeaf %s", call->as_CallLeaf()->_name)); } #endif // Always process arraycopy's destination object since @@ -1080,7 +1084,7 @@ bool ConnectionGraph::complete_connection_graph( C->log()->text("%s", (iterations >= CG_BUILD_ITER_LIMIT) ? "iterations" : "time"); C->log()->end_elem(" limit'"); } - assert(false, err_msg_res("infinite EA connection graph build (%f sec, %d iterations) with %d nodes and worklist size %d", + assert(ExitEscapeAnalysisOnTimeout, err_msg_res("infinite EA connection graph build (%f sec, %d iterations) with %d nodes and worklist size %d", time.seconds(), iterations, nodes_size(), ptnodes_worklist.length())); // Possible infinite build_connection_graph loop, // bailout (no changes to ideal graph were made). diff --git a/hotspot/src/share/vm/opto/library_call.cpp b/hotspot/src/share/vm/opto/library_call.cpp index f34df79b476..6b90061ff4f 100644 --- a/hotspot/src/share/vm/opto/library_call.cpp +++ b/hotspot/src/share/vm/opto/library_call.cpp @@ -44,18 +44,22 @@ class LibraryIntrinsic : public InlineCallGenerator { public: private: bool _is_virtual; + bool _is_predicted; vmIntrinsics::ID _intrinsic_id; public: - LibraryIntrinsic(ciMethod* m, bool is_virtual, vmIntrinsics::ID id) + LibraryIntrinsic(ciMethod* m, bool is_virtual, bool is_predicted, vmIntrinsics::ID id) : InlineCallGenerator(m), _is_virtual(is_virtual), + _is_predicted(is_predicted), _intrinsic_id(id) { } virtual bool is_intrinsic() const { return true; } virtual bool is_virtual() const { return _is_virtual; } + virtual bool is_predicted() const { return _is_predicted; } virtual JVMState* generate(JVMState* jvms); + virtual Node* generate_predicate(JVMState* jvms); vmIntrinsics::ID intrinsic_id() const { return _intrinsic_id; } }; @@ -83,6 +87,7 @@ class LibraryCallKit : public GraphKit { int arg_size() const { return callee()->arg_size(); } bool try_to_inline(); + Node* try_to_predicate(); // Helper functions to inline natives void push_result(RegionNode* region, PhiNode* value); @@ -148,6 +153,7 @@ class LibraryCallKit : public GraphKit { CallJavaNode* generate_method_call_virtual(vmIntrinsics::ID method_id) { return generate_method_call(method_id, true, false); } + Node * load_field_from_object(Node * fromObj, const char * fieldName, const char * fieldTypeString, bool is_exact, bool is_static); Node* make_string_method_node(int opcode, Node* str1_start, Node* cnt1, Node* str2_start, Node* cnt2); Node* make_string_method_node(int opcode, Node* str1, Node* str2); @@ -253,6 +259,10 @@ class LibraryCallKit : public GraphKit { bool inline_reverseBytes(vmIntrinsics::ID id); bool inline_reference_get(); + bool inline_aescrypt_Block(vmIntrinsics::ID id); + bool inline_cipherBlockChaining_AESCrypt(vmIntrinsics::ID id); + Node* inline_cipherBlockChaining_AESCrypt_predicate(bool decrypting); + Node* get_key_start_from_aescrypt_object(Node* aescrypt_object); }; @@ -306,6 +316,8 @@ CallGenerator* Compile::make_vm_intrinsic(ciMethod* m, bool is_virtual) { } } + bool is_predicted = false; + switch (id) { case vmIntrinsics::_compareTo: if (!SpecialStringCompareTo) return NULL; @@ -413,6 +425,18 @@ CallGenerator* Compile::make_vm_intrinsic(ciMethod* m, bool is_virtual) { break; #endif + case vmIntrinsics::_aescrypt_encryptBlock: + case vmIntrinsics::_aescrypt_decryptBlock: + if (!UseAESIntrinsics) return NULL; + break; + + case vmIntrinsics::_cipherBlockChaining_encryptAESCrypt: + case vmIntrinsics::_cipherBlockChaining_decryptAESCrypt: + if (!UseAESIntrinsics) return NULL; + // these two require the predicated logic + is_predicted = true; + break; + default: assert(id <= vmIntrinsics::LAST_COMPILER_INLINE, "caller responsibility"); assert(id != vmIntrinsics::_Object_init && id != vmIntrinsics::_invoke, "enum out of order?"); @@ -444,7 +468,7 @@ CallGenerator* Compile::make_vm_intrinsic(ciMethod* m, bool is_virtual) { if (!InlineUnsafeOps) return NULL; } - return new LibraryIntrinsic(m, is_virtual, (vmIntrinsics::ID) id); + return new LibraryIntrinsic(m, is_virtual, is_predicted, (vmIntrinsics::ID) id); } //----------------------register_library_intrinsics----------------------- @@ -496,6 +520,47 @@ JVMState* LibraryIntrinsic::generate(JVMState* jvms) { return NULL; } +Node* LibraryIntrinsic::generate_predicate(JVMState* jvms) { + LibraryCallKit kit(jvms, this); + Compile* C = kit.C; + int nodes = C->unique(); +#ifndef PRODUCT + assert(is_predicted(), "sanity"); + if ((PrintIntrinsics || PrintInlining NOT_PRODUCT( || PrintOptoInlining) ) && Verbose) { + char buf[1000]; + const char* str = vmIntrinsics::short_name_as_C_string(intrinsic_id(), buf, sizeof(buf)); + tty->print_cr("Predicate for intrinsic %s", str); + } +#endif + + Node* slow_ctl = kit.try_to_predicate(); + if (!kit.failing()) { + if (C->log()) { + C->log()->elem("predicate_intrinsic id='%s'%s nodes='%d'", + vmIntrinsics::name_at(intrinsic_id()), + (is_virtual() ? " virtual='1'" : ""), + C->unique() - nodes); + } + return slow_ctl; // Could be NULL if the check folds. + } + + // The intrinsic bailed out + if (PrintIntrinsics || PrintInlining NOT_PRODUCT( || PrintOptoInlining) ) { + if (jvms->has_method()) { + // Not a root compile. + const char* msg = "failed to generate predicate for intrinsic"; + CompileTask::print_inlining(kit.callee(), jvms->depth() - 1, kit.bci(), msg); + } else { + // Root compile + tty->print("Did not generate predicate for intrinsic %s%s at bci:%d in", + vmIntrinsics::name_at(intrinsic_id()), + (is_virtual() ? " (virtual)" : ""), kit.bci()); + } + } + C->gather_intrinsic_statistics(intrinsic_id(), is_virtual(), Compile::_intrinsic_failed); + return NULL; +} + bool LibraryCallKit::try_to_inline() { // Handle symbolic names for otherwise undistinguished boolean switches: const bool is_store = true; @@ -767,6 +832,14 @@ bool LibraryCallKit::try_to_inline() { case vmIntrinsics::_Reference_get: return inline_reference_get(); + case vmIntrinsics::_aescrypt_encryptBlock: + case vmIntrinsics::_aescrypt_decryptBlock: + return inline_aescrypt_Block(intrinsic_id()); + + case vmIntrinsics::_cipherBlockChaining_encryptAESCrypt: + case vmIntrinsics::_cipherBlockChaining_decryptAESCrypt: + return inline_cipherBlockChaining_AESCrypt(intrinsic_id()); + default: // If you get here, it may be that someone has added a new intrinsic // to the list in vmSymbols.hpp without implementing it here. @@ -780,6 +853,36 @@ bool LibraryCallKit::try_to_inline() { } } +Node* LibraryCallKit::try_to_predicate() { + if (!jvms()->has_method()) { + // Root JVMState has a null method. + assert(map()->memory()->Opcode() == Op_Parm, ""); + // Insert the memory aliasing node + set_all_memory(reset_memory()); + } + assert(merged_memory(), ""); + + switch (intrinsic_id()) { + case vmIntrinsics::_cipherBlockChaining_encryptAESCrypt: + return inline_cipherBlockChaining_AESCrypt_predicate(false); + case vmIntrinsics::_cipherBlockChaining_decryptAESCrypt: + return inline_cipherBlockChaining_AESCrypt_predicate(true); + + default: + // If you get here, it may be that someone has added a new intrinsic + // to the list in vmSymbols.hpp without implementing it here. +#ifndef PRODUCT + if ((PrintMiscellaneous && (Verbose || WizardMode)) || PrintOpto) { + tty->print_cr("*** Warning: Unimplemented predicate for intrinsic %s(%d)", + vmIntrinsics::name_at(intrinsic_id()), intrinsic_id()); + } +#endif + Node* slow_ctl = control(); + set_control(top()); // No fast path instrinsic + return slow_ctl; + } +} + //------------------------------push_result------------------------------ // Helper function for finishing intrinsics. void LibraryCallKit::push_result(RegionNode* region, PhiNode* value) { @@ -3830,7 +3933,7 @@ Node* LibraryCallKit::generate_virtual_guard(Node* obj_klass, vtable_index*vtableEntry::size()) * wordSize + vtableEntry::method_offset_in_bytes(); Node* entry_addr = basic_plus_adr(obj_klass, entry_offset); - Node* target_call = make_load(NULL, entry_addr, TypeInstPtr::NOTNULL, T_OBJECT); + Node* target_call = make_load(NULL, entry_addr, TypePtr::NOTNULL, T_ADDRESS); // Compare the target method with the expected method (e.g., Object.hashCode). const TypePtr* native_call_addr = TypeMetadataPtr::make(method); @@ -5613,3 +5716,265 @@ bool LibraryCallKit::inline_reference_get() { push(result); return true; } + + +Node * LibraryCallKit::load_field_from_object(Node * fromObj, const char * fieldName, const char * fieldTypeString, + bool is_exact=true, bool is_static=false) { + + const TypeInstPtr* tinst = _gvn.type(fromObj)->isa_instptr(); + assert(tinst != NULL, "obj is null"); + assert(tinst->klass()->is_loaded(), "obj is not loaded"); + assert(!is_exact || tinst->klass_is_exact(), "klass not exact"); + + ciField* field = tinst->klass()->as_instance_klass()->get_field_by_name(ciSymbol::make(fieldName), + ciSymbol::make(fieldTypeString), + is_static); + if (field == NULL) return (Node *) NULL; + assert (field != NULL, "undefined field"); + + // Next code copied from Parse::do_get_xxx(): + + // Compute address and memory type. + int offset = field->offset_in_bytes(); + bool is_vol = field->is_volatile(); + ciType* field_klass = field->type(); + assert(field_klass->is_loaded(), "should be loaded"); + const TypePtr* adr_type = C->alias_type(field)->adr_type(); + Node *adr = basic_plus_adr(fromObj, fromObj, offset); + BasicType bt = field->layout_type(); + + // Build the resultant type of the load + const Type *type = TypeOopPtr::make_from_klass(field_klass->as_klass()); + + // Build the load. + Node* loadedField = make_load(NULL, adr, type, bt, adr_type, is_vol); + return loadedField; +} + + +//------------------------------inline_aescrypt_Block----------------------- +bool LibraryCallKit::inline_aescrypt_Block(vmIntrinsics::ID id) { + address stubAddr; + const char *stubName; + assert(UseAES, "need AES instruction support"); + + switch(id) { + case vmIntrinsics::_aescrypt_encryptBlock: + stubAddr = StubRoutines::aescrypt_encryptBlock(); + stubName = "aescrypt_encryptBlock"; + break; + case vmIntrinsics::_aescrypt_decryptBlock: + stubAddr = StubRoutines::aescrypt_decryptBlock(); + stubName = "aescrypt_decryptBlock"; + break; + } + if (stubAddr == NULL) return false; + + // Restore the stack and pop off the arguments. + int nargs = 5; // this + 2 oop/offset combos + assert(callee()->signature()->size() == nargs-1, "encryptBlock has 4 arguments"); + + Node *aescrypt_object = argument(0); + Node *src = argument(1); + Node *src_offset = argument(2); + Node *dest = argument(3); + Node *dest_offset = argument(4); + + // (1) src and dest are arrays. + const Type* src_type = src->Value(&_gvn); + const Type* dest_type = dest->Value(&_gvn); + const TypeAryPtr* top_src = src_type->isa_aryptr(); + const TypeAryPtr* top_dest = dest_type->isa_aryptr(); + assert (top_src != NULL && top_src->klass() != NULL && top_dest != NULL && top_dest->klass() != NULL, "args are strange"); + + // for the quick and dirty code we will skip all the checks. + // we are just trying to get the call to be generated. + Node* src_start = src; + Node* dest_start = dest; + if (src_offset != NULL || dest_offset != NULL) { + assert(src_offset != NULL && dest_offset != NULL, ""); + src_start = array_element_address(src, src_offset, T_BYTE); + dest_start = array_element_address(dest, dest_offset, T_BYTE); + } + + // now need to get the start of its expanded key array + // this requires a newer class file that has this array as littleEndian ints, otherwise we revert to java + Node* k_start = get_key_start_from_aescrypt_object(aescrypt_object); + if (k_start == NULL) return false; + + // Call the stub. + make_runtime_call(RC_LEAF|RC_NO_FP, OptoRuntime::aescrypt_block_Type(), + stubAddr, stubName, TypePtr::BOTTOM, + src_start, dest_start, k_start); + + return true; +} + +//------------------------------inline_cipherBlockChaining_AESCrypt----------------------- +bool LibraryCallKit::inline_cipherBlockChaining_AESCrypt(vmIntrinsics::ID id) { + address stubAddr; + const char *stubName; + + assert(UseAES, "need AES instruction support"); + + switch(id) { + case vmIntrinsics::_cipherBlockChaining_encryptAESCrypt: + stubAddr = StubRoutines::cipherBlockChaining_encryptAESCrypt(); + stubName = "cipherBlockChaining_encryptAESCrypt"; + break; + case vmIntrinsics::_cipherBlockChaining_decryptAESCrypt: + stubAddr = StubRoutines::cipherBlockChaining_decryptAESCrypt(); + stubName = "cipherBlockChaining_decryptAESCrypt"; + break; + } + if (stubAddr == NULL) return false; + + + // Restore the stack and pop off the arguments. + int nargs = 6; // this + oop/offset + len + oop/offset + assert(callee()->signature()->size() == nargs-1, "wrong number of arguments"); + Node *cipherBlockChaining_object = argument(0); + Node *src = argument(1); + Node *src_offset = argument(2); + Node *len = argument(3); + Node *dest = argument(4); + Node *dest_offset = argument(5); + + // (1) src and dest are arrays. + const Type* src_type = src->Value(&_gvn); + const Type* dest_type = dest->Value(&_gvn); + const TypeAryPtr* top_src = src_type->isa_aryptr(); + const TypeAryPtr* top_dest = dest_type->isa_aryptr(); + assert (top_src != NULL && top_src->klass() != NULL + && top_dest != NULL && top_dest->klass() != NULL, "args are strange"); + + // checks are the responsibility of the caller + Node* src_start = src; + Node* dest_start = dest; + if (src_offset != NULL || dest_offset != NULL) { + assert(src_offset != NULL && dest_offset != NULL, ""); + src_start = array_element_address(src, src_offset, T_BYTE); + dest_start = array_element_address(dest, dest_offset, T_BYTE); + } + + // if we are in this set of code, we "know" the embeddedCipher is an AESCrypt object + // (because of the predicated logic executed earlier). + // so we cast it here safely. + // this requires a newer class file that has this array as littleEndian ints, otherwise we revert to java + + Node* embeddedCipherObj = load_field_from_object(cipherBlockChaining_object, "embeddedCipher", "Lcom/sun/crypto/provider/SymmetricCipher;", /*is_exact*/ false); + if (embeddedCipherObj == NULL) return false; + + // cast it to what we know it will be at runtime + const TypeInstPtr* tinst = _gvn.type(cipherBlockChaining_object)->isa_instptr(); + assert(tinst != NULL, "CBC obj is null"); + assert(tinst->klass()->is_loaded(), "CBC obj is not loaded"); + ciKlass* klass_AESCrypt = tinst->klass()->as_instance_klass()->find_klass(ciSymbol::make("com/sun/crypto/provider/AESCrypt")); + if (!klass_AESCrypt->is_loaded()) return false; + + ciInstanceKlass* instklass_AESCrypt = klass_AESCrypt->as_instance_klass(); + const TypeKlassPtr* aklass = TypeKlassPtr::make(instklass_AESCrypt); + const TypeOopPtr* xtype = aklass->as_instance_type(); + Node* aescrypt_object = new(C) CheckCastPPNode(control(), embeddedCipherObj, xtype); + aescrypt_object = _gvn.transform(aescrypt_object); + + // we need to get the start of the aescrypt_object's expanded key array + Node* k_start = get_key_start_from_aescrypt_object(aescrypt_object); + if (k_start == NULL) return false; + + // similarly, get the start address of the r vector + Node* objRvec = load_field_from_object(cipherBlockChaining_object, "r", "[B", /*is_exact*/ false); + if (objRvec == NULL) return false; + Node* r_start = array_element_address(objRvec, intcon(0), T_BYTE); + + // Call the stub, passing src_start, dest_start, k_start, r_start and src_len + make_runtime_call(RC_LEAF|RC_NO_FP, + OptoRuntime::cipherBlockChaining_aescrypt_Type(), + stubAddr, stubName, TypePtr::BOTTOM, + src_start, dest_start, k_start, r_start, len); + + // return is void so no result needs to be pushed + + return true; +} + +//------------------------------get_key_start_from_aescrypt_object----------------------- +Node * LibraryCallKit::get_key_start_from_aescrypt_object(Node *aescrypt_object) { + Node* objAESCryptKey = load_field_from_object(aescrypt_object, "K", "[I", /*is_exact*/ false); + assert (objAESCryptKey != NULL, "wrong version of com.sun.crypto.provider.AESCrypt"); + if (objAESCryptKey == NULL) return (Node *) NULL; + + // now have the array, need to get the start address of the K array + Node* k_start = array_element_address(objAESCryptKey, intcon(0), T_INT); + return k_start; +} + +//----------------------------inline_cipherBlockChaining_AESCrypt_predicate---------------------------- +// Return node representing slow path of predicate check. +// the pseudo code we want to emulate with this predicate is: +// for encryption: +// if (embeddedCipherObj instanceof AESCrypt) do_intrinsic, else do_javapath +// for decryption: +// if ((embeddedCipherObj instanceof AESCrypt) && (cipher!=plain)) do_intrinsic, else do_javapath +// note cipher==plain is more conservative than the original java code but that's OK +// +Node* LibraryCallKit::inline_cipherBlockChaining_AESCrypt_predicate(bool decrypting) { + // First, check receiver for NULL since it is virtual method. + int nargs = arg_size(); + Node* objCBC = argument(0); + _sp += nargs; + objCBC = do_null_check(objCBC, T_OBJECT); + _sp -= nargs; + + if (stopped()) return NULL; // Always NULL + + // Load embeddedCipher field of CipherBlockChaining object. + Node* embeddedCipherObj = load_field_from_object(objCBC, "embeddedCipher", "Lcom/sun/crypto/provider/SymmetricCipher;", /*is_exact*/ false); + + // get AESCrypt klass for instanceOf check + // AESCrypt might not be loaded yet if some other SymmetricCipher got us to this compile point + // will have same classloader as CipherBlockChaining object + const TypeInstPtr* tinst = _gvn.type(objCBC)->isa_instptr(); + assert(tinst != NULL, "CBCobj is null"); + assert(tinst->klass()->is_loaded(), "CBCobj is not loaded"); + + // we want to do an instanceof comparison against the AESCrypt class + ciKlass* klass_AESCrypt = tinst->klass()->as_instance_klass()->find_klass(ciSymbol::make("com/sun/crypto/provider/AESCrypt")); + if (!klass_AESCrypt->is_loaded()) { + // if AESCrypt is not even loaded, we never take the intrinsic fast path + Node* ctrl = control(); + set_control(top()); // no regular fast path + return ctrl; + } + ciInstanceKlass* instklass_AESCrypt = klass_AESCrypt->as_instance_klass(); + + _sp += nargs; // gen_instanceof might do an uncommon trap + Node* instof = gen_instanceof(embeddedCipherObj, makecon(TypeKlassPtr::make(instklass_AESCrypt))); + _sp -= nargs; + Node* cmp_instof = _gvn.transform(new (C) CmpINode(instof, intcon(1))); + Node* bool_instof = _gvn.transform(new (C) BoolNode(cmp_instof, BoolTest::ne)); + + Node* instof_false = generate_guard(bool_instof, NULL, PROB_MIN); + + // for encryption, we are done + if (!decrypting) + return instof_false; // even if it is NULL + + // for decryption, we need to add a further check to avoid + // taking the intrinsic path when cipher and plain are the same + // see the original java code for why. + RegionNode* region = new(C) RegionNode(3); + region->init_req(1, instof_false); + Node* src = argument(1); + Node *dest = argument(4); + Node* cmp_src_dest = _gvn.transform(new (C) CmpPNode(src, dest)); + Node* bool_src_dest = _gvn.transform(new (C) BoolNode(cmp_src_dest, BoolTest::eq)); + Node* src_dest_conjoint = generate_guard(bool_src_dest, NULL, PROB_MIN); + region->init_req(2, src_dest_conjoint); + + record_for_igvn(region); + return _gvn.transform(region); + +} + + diff --git a/hotspot/src/share/vm/opto/loopTransform.cpp b/hotspot/src/share/vm/opto/loopTransform.cpp index b8b1a57a9fc..53d0fffdc31 100644 --- a/hotspot/src/share/vm/opto/loopTransform.cpp +++ b/hotspot/src/share/vm/opto/loopTransform.cpp @@ -2715,6 +2715,8 @@ bool PhaseIdealLoop::intrinsify_fill(IdealLoopTree* lpt) { result_mem = new (C) ProjNode(call,TypeFunc::Memory); _igvn.register_new_node_with_optimizer(result_mem); +/* Disable following optimization until proper fix (add missing checks). + // If this fill is tightly coupled to an allocation and overwrites // the whole body, allow it to take over the zeroing. AllocateNode* alloc = AllocateNode::Ideal_allocation(base, this); @@ -2738,6 +2740,7 @@ bool PhaseIdealLoop::intrinsify_fill(IdealLoopTree* lpt) { #endif } } +*/ // Redirect the old control and memory edges that are outside the loop. Node* exit = head->loopexit()->proj_out(0); diff --git a/hotspot/src/share/vm/opto/mulnode.cpp b/hotspot/src/share/vm/opto/mulnode.cpp index 4572a265e57..4047b933fbd 100644 --- a/hotspot/src/share/vm/opto/mulnode.cpp +++ b/hotspot/src/share/vm/opto/mulnode.cpp @@ -479,24 +479,27 @@ Node *AndINode::Ideal(PhaseGVN *phase, bool can_reshape) { return new (phase->C) AndINode(load,phase->intcon(mask&0xFFFF)); // Masking bits off of a Short? Loading a Character does some masking - if (lop == Op_LoadS && (mask & 0xFFFF0000) == 0 ) { - Node *ldus = new (phase->C) LoadUSNode(load->in(MemNode::Control), - load->in(MemNode::Memory), - load->in(MemNode::Address), - load->adr_type()); - ldus = phase->transform(ldus); - return new (phase->C) AndINode(ldus, phase->intcon(mask & 0xFFFF)); - } + if (can_reshape && + load->outcnt() == 1 && load->unique_out() == this) { + if (lop == Op_LoadS && (mask & 0xFFFF0000) == 0 ) { + Node *ldus = new (phase->C) LoadUSNode(load->in(MemNode::Control), + load->in(MemNode::Memory), + load->in(MemNode::Address), + load->adr_type()); + ldus = phase->transform(ldus); + return new (phase->C) AndINode(ldus, phase->intcon(mask & 0xFFFF)); + } - // Masking sign bits off of a Byte? Do an unsigned byte load plus - // an and. - if (lop == Op_LoadB && (mask & 0xFFFFFF00) == 0) { - Node* ldub = new (phase->C) LoadUBNode(load->in(MemNode::Control), - load->in(MemNode::Memory), - load->in(MemNode::Address), - load->adr_type()); - ldub = phase->transform(ldub); - return new (phase->C) AndINode(ldub, phase->intcon(mask)); + // Masking sign bits off of a Byte? Do an unsigned byte load plus + // an and. + if (lop == Op_LoadB && (mask & 0xFFFFFF00) == 0) { + Node* ldub = new (phase->C) LoadUBNode(load->in(MemNode::Control), + load->in(MemNode::Memory), + load->in(MemNode::Address), + load->adr_type()); + ldub = phase->transform(ldub); + return new (phase->C) AndINode(ldub, phase->intcon(mask)); + } } // Masking off sign bits? Dont make them! @@ -923,7 +926,9 @@ Node *RShiftINode::Ideal(PhaseGVN *phase, bool can_reshape) { set_req(2, phase->intcon(0)); return this; } - else if( ld->Opcode() == Op_LoadUS ) + else if( can_reshape && + ld->Opcode() == Op_LoadUS && + ld->outcnt() == 1 && ld->unique_out() == shl) // Replace zero-extension-load with sign-extension-load return new (phase->C) LoadSNode( ld->in(MemNode::Control), ld->in(MemNode::Memory), diff --git a/hotspot/src/share/vm/opto/runtime.cpp b/hotspot/src/share/vm/opto/runtime.cpp index bb050533d22..51987e25e32 100644 --- a/hotspot/src/share/vm/opto/runtime.cpp +++ b/hotspot/src/share/vm/opto/runtime.cpp @@ -811,6 +811,48 @@ const TypeFunc* OptoRuntime::array_fill_Type() { return TypeFunc::make(domain, range); } +// for aescrypt encrypt/decrypt operations, just three pointers returning void (length is constant) +const TypeFunc* OptoRuntime::aescrypt_block_Type() { + // create input type (domain) + int num_args = 3; + int argcnt = num_args; + const Type** fields = TypeTuple::fields(argcnt); + int argp = TypeFunc::Parms; + fields[argp++] = TypePtr::NOTNULL; // src + fields[argp++] = TypePtr::NOTNULL; // dest + fields[argp++] = TypePtr::NOTNULL; // k array + assert(argp == TypeFunc::Parms+argcnt, "correct decoding"); + const TypeTuple* domain = TypeTuple::make(TypeFunc::Parms+argcnt, fields); + + // no result type needed + fields = TypeTuple::fields(1); + fields[TypeFunc::Parms+0] = NULL; // void + const TypeTuple* range = TypeTuple::make(TypeFunc::Parms, fields); + return TypeFunc::make(domain, range); +} + +// for cipherBlockChaining calls of aescrypt encrypt/decrypt, four pointers and a length, returning void +const TypeFunc* OptoRuntime::cipherBlockChaining_aescrypt_Type() { + // create input type (domain) + int num_args = 5; + int argcnt = num_args; + const Type** fields = TypeTuple::fields(argcnt); + int argp = TypeFunc::Parms; + fields[argp++] = TypePtr::NOTNULL; // src + fields[argp++] = TypePtr::NOTNULL; // dest + fields[argp++] = TypePtr::NOTNULL; // k array + fields[argp++] = TypePtr::NOTNULL; // r array + fields[argp++] = TypeInt::INT; // src len + assert(argp == TypeFunc::Parms+argcnt, "correct decoding"); + const TypeTuple* domain = TypeTuple::make(TypeFunc::Parms+argcnt, fields); + + // no result type needed + fields = TypeTuple::fields(1); + fields[TypeFunc::Parms+0] = NULL; // void + const TypeTuple* range = TypeTuple::make(TypeFunc::Parms, fields); + return TypeFunc::make(domain, range); +} + //------------- Interpreter state access for on stack replacement const TypeFunc* OptoRuntime::osr_end_Type() { // create input type (domain) diff --git a/hotspot/src/share/vm/opto/runtime.hpp b/hotspot/src/share/vm/opto/runtime.hpp index c7077726761..13da255b742 100644 --- a/hotspot/src/share/vm/opto/runtime.hpp +++ b/hotspot/src/share/vm/opto/runtime.hpp @@ -280,6 +280,9 @@ private: static const TypeFunc* array_fill_Type(); + static const TypeFunc* aescrypt_block_Type(); + static const TypeFunc* cipherBlockChaining_aescrypt_Type(); + // leaf on stack replacement interpreter accessor types static const TypeFunc* osr_end_Type(); diff --git a/hotspot/src/share/vm/opto/superword.cpp b/hotspot/src/share/vm/opto/superword.cpp index ffc5394bb09..f53c6483750 100644 --- a/hotspot/src/share/vm/opto/superword.cpp +++ b/hotspot/src/share/vm/opto/superword.cpp @@ -1776,16 +1776,15 @@ void SuperWord::compute_vector_element_type() { set_velt_type(n, container_type(n)); } - // Propagate narrowed type backwards through operations + // Propagate integer narrowed type backwards through operations // that don't depend on higher order bits for (int i = _block.length() - 1; i >= 0; i--) { Node* n = _block.at(i); // Only integer types need be examined - const Type* vt = velt_type(n); - if (vt->basic_type() == T_INT) { + const Type* vtn = velt_type(n); + if (vtn->basic_type() == T_INT) { uint start, end; VectorNode::vector_operands(n, &start, &end); - const Type* vt = velt_type(n); for (uint j = start; j < end; j++) { Node* in = n->in(j); @@ -1801,6 +1800,24 @@ void SuperWord::compute_vector_element_type() { } } if (same_type) { + // For right shifts of small integer types (bool, byte, char, short) + // we need precise information about sign-ness. Only Load nodes have + // this information because Store nodes are the same for signed and + // unsigned values. And any arithmetic operation after a load may + // expand a value to signed Int so such right shifts can't be used + // because vector elements do not have upper bits of Int. + const Type* vt = vtn; + if (VectorNode::is_shift(in)) { + Node* load = in->in(1); + if (load->is_Load() && in_bb(load) && (velt_type(load)->basic_type() == T_INT)) { + vt = velt_type(load); + } else if (in->Opcode() != Op_LShiftI) { + // Widen type to Int to avoid creation of right shift vector + // (align + data_size(s1) check in stmts_can_pack() will fail). + // Note, left shifts work regardless type. + vt = TypeInt::INT; + } + } set_velt_type(in, vt); } } @@ -1841,7 +1858,20 @@ int SuperWord::memory_alignment(MemNode* s, int iv_adjust) { // Smallest type containing range of values const Type* SuperWord::container_type(Node* n) { if (n->is_Mem()) { - return Type::get_const_basic_type(n->as_Mem()->memory_type()); + BasicType bt = n->as_Mem()->memory_type(); + if (n->is_Store() && (bt == T_CHAR)) { + // Use T_SHORT type instead of T_CHAR for stored values because any + // preceding arithmetic operation extends values to signed Int. + bt = T_SHORT; + } + if (n->Opcode() == Op_LoadUB) { + // Adjust type for unsigned byte loads, it is important for right shifts. + // T_BOOLEAN is used because there is no basic type representing type + // TypeInt::UBYTE. Use of T_BOOLEAN for vectors is fine because only + // size (one byte) and sign is important. + bt = T_BOOLEAN; + } + return Type::get_const_basic_type(bt); } const Type* t = _igvn.type(n); if (t->basic_type() == T_INT) { diff --git a/hotspot/src/share/vm/opto/type.cpp b/hotspot/src/share/vm/opto/type.cpp index f982799f634..1a8ee2597dd 100644 --- a/hotspot/src/share/vm/opto/type.cpp +++ b/hotspot/src/share/vm/opto/type.cpp @@ -61,7 +61,7 @@ Type::TypeInfo Type::_type_info[Type::lastype] = { { Bad, T_ILLEGAL, "tuple:", false, Node::NotAMachineReg, relocInfo::none }, // Tuple { Bad, T_ARRAY, "array:", false, Node::NotAMachineReg, relocInfo::none }, // Array -#if defined(IA32) || defined(AMD64) +#ifndef SPARC { Bad, T_ILLEGAL, "vectors:", false, Op_VecS, relocInfo::none }, // VectorS { Bad, T_ILLEGAL, "vectord:", false, Op_VecD, relocInfo::none }, // VectorD { Bad, T_ILLEGAL, "vectorx:", false, Op_VecX, relocInfo::none }, // VectorX diff --git a/hotspot/src/share/vm/opto/vectornode.cpp b/hotspot/src/share/vm/opto/vectornode.cpp index d0955a819e1..9660d4ed818 100644 --- a/hotspot/src/share/vm/opto/vectornode.cpp +++ b/hotspot/src/share/vm/opto/vectornode.cpp @@ -29,8 +29,7 @@ //------------------------------VectorNode-------------------------------------- // Return the vector operator for the specified scalar operation -// and vector length. Also used to check if the code generator -// supports the vector operation. +// and vector length. int VectorNode::opcode(int sopc, BasicType bt) { switch (sopc) { case Op_AddI: @@ -75,7 +74,7 @@ int VectorNode::opcode(int sopc, BasicType bt) { case T_BYTE: return 0; // Unimplemented case T_CHAR: case T_SHORT: return Op_MulVS; - case T_INT: return Matcher::match_rule_supported(Op_MulVI) ? Op_MulVI : 0; // SSE4_1 + case T_INT: return Op_MulVI; } ShouldNotReachHere(); case Op_MulF: @@ -104,9 +103,9 @@ int VectorNode::opcode(int sopc, BasicType bt) { return Op_LShiftVL; case Op_RShiftI: switch (bt) { - case T_BOOLEAN: + case T_BOOLEAN:return Op_URShiftVB; // boolean is unsigned value + case T_CHAR: return Op_URShiftVS; // char is unsigned value case T_BYTE: return Op_RShiftVB; - case T_CHAR: case T_SHORT: return Op_RShiftVS; case T_INT: return Op_RShiftVI; } @@ -116,10 +115,14 @@ int VectorNode::opcode(int sopc, BasicType bt) { return Op_RShiftVL; case Op_URShiftI: switch (bt) { - case T_BOOLEAN: - case T_BYTE: return Op_URShiftVB; - case T_CHAR: - case T_SHORT: return Op_URShiftVS; + case T_BOOLEAN:return Op_URShiftVB; + case T_CHAR: return Op_URShiftVS; + case T_BYTE: + case T_SHORT: return 0; // Vector logical right shift for signed short + // values produces incorrect Java result for + // negative data because java code should convert + // a short value into int value with sign + // extension before a shift. case T_INT: return Op_URShiftVI; } ShouldNotReachHere(); @@ -157,12 +160,14 @@ int VectorNode::opcode(int sopc, BasicType bt) { return 0; // Unimplemented } +// Also used to check if the code generator +// supports the vector operation. bool VectorNode::implemented(int opc, uint vlen, BasicType bt) { if (is_java_primitive(bt) && (vlen > 1) && is_power_of_2(vlen) && Matcher::vector_size_supported(bt, vlen)) { int vopc = VectorNode::opcode(opc, bt); - return vopc > 0 && Matcher::has_match_rule(vopc); + return vopc > 0 && Matcher::match_rule_supported(vopc); } return false; } diff --git a/hotspot/src/share/vm/prims/jvmti.xml b/hotspot/src/share/vm/prims/jvmti.xml index 512e3cb0033..517083f20e3 100644 --- a/hotspot/src/share/vm/prims/jvmti.xml +++ b/hotspot/src/share/vm/prims/jvmti.xml @@ -1,7 +1,7 @@ " PTR_FORMAT, size, memblock); // we do not track MallocCushion memory - if (MemTracker::is_on()) { MemTracker::record_malloc((address)memblock, size, memflags, caller == 0 ? CALLER_PC : caller); - } return memblock; } @@ -613,7 +611,7 @@ void* os::realloc(void *memblock, size_t size, MEMFLAGS memflags, address caller NOT_PRODUCT(inc_stat_counter(&num_mallocs, 1)); NOT_PRODUCT(inc_stat_counter(&alloc_bytes, size)); void* ptr = ::realloc(memblock, size); - if (ptr != NULL && MemTracker::is_on()) { + if (ptr != NULL) { MemTracker::record_realloc((address)memblock, (address)ptr, size, memflags, caller == 0 ? CALLER_PC : caller); } @@ -1401,7 +1399,7 @@ bool os::create_stack_guard_pages(char* addr, size_t bytes) { char* os::reserve_memory(size_t bytes, char* addr, size_t alignment_hint) { char* result = pd_reserve_memory(bytes, addr, alignment_hint); - if (result != NULL && MemTracker::is_on()) { + if (result != NULL) { MemTracker::record_virtual_memory_reserve((address)result, bytes, CALLER_PC); } @@ -1409,7 +1407,7 @@ char* os::reserve_memory(size_t bytes, char* addr, size_t alignment_hint) { } char* os::attempt_reserve_memory_at(size_t bytes, char* addr) { char* result = pd_attempt_reserve_memory_at(bytes, addr); - if (result != NULL && MemTracker::is_on()) { + if (result != NULL) { MemTracker::record_virtual_memory_reserve((address)result, bytes, CALLER_PC); } return result; @@ -1422,7 +1420,7 @@ void os::split_reserved_memory(char *base, size_t size, bool os::commit_memory(char* addr, size_t bytes, bool executable) { bool res = pd_commit_memory(addr, bytes, executable); - if (res && MemTracker::is_on()) { + if (res) { MemTracker::record_virtual_memory_commit((address)addr, bytes, CALLER_PC); } return res; @@ -1431,7 +1429,7 @@ bool os::commit_memory(char* addr, size_t bytes, bool executable) { bool os::commit_memory(char* addr, size_t size, size_t alignment_hint, bool executable) { bool res = os::pd_commit_memory(addr, size, alignment_hint, executable); - if (res && MemTracker::is_on()) { + if (res) { MemTracker::record_virtual_memory_commit((address)addr, size, CALLER_PC); } return res; @@ -1458,8 +1456,9 @@ char* os::map_memory(int fd, const char* file_name, size_t file_offset, char *addr, size_t bytes, bool read_only, bool allow_exec) { char* result = pd_map_memory(fd, file_name, file_offset, addr, bytes, read_only, allow_exec); - if (result != NULL && MemTracker::is_on()) { + if (result != NULL) { MemTracker::record_virtual_memory_reserve((address)result, bytes, CALLER_PC); + MemTracker::record_virtual_memory_commit((address)result, bytes, CALLER_PC); } return result; } @@ -1474,6 +1473,7 @@ char* os::remap_memory(int fd, const char* file_name, size_t file_offset, bool os::unmap_memory(char *addr, size_t bytes) { bool result = pd_unmap_memory(addr, bytes); if (result) { + MemTracker::record_virtual_memory_uncommit((address)addr, bytes); MemTracker::record_virtual_memory_release((address)addr, bytes); } return result; diff --git a/hotspot/src/share/vm/runtime/stubRoutines.cpp b/hotspot/src/share/vm/runtime/stubRoutines.cpp index 5ca4ba59916..98d428abdab 100644 --- a/hotspot/src/share/vm/runtime/stubRoutines.cpp +++ b/hotspot/src/share/vm/runtime/stubRoutines.cpp @@ -120,6 +120,10 @@ address StubRoutines::_arrayof_jbyte_fill; address StubRoutines::_arrayof_jshort_fill; address StubRoutines::_arrayof_jint_fill; +address StubRoutines::_aescrypt_encryptBlock = NULL; +address StubRoutines::_aescrypt_decryptBlock = NULL; +address StubRoutines::_cipherBlockChaining_encryptAESCrypt = NULL; +address StubRoutines::_cipherBlockChaining_decryptAESCrypt = NULL; double (* StubRoutines::_intrinsic_log )(double) = NULL; double (* StubRoutines::_intrinsic_log10 )(double) = NULL; diff --git a/hotspot/src/share/vm/runtime/stubRoutines.hpp b/hotspot/src/share/vm/runtime/stubRoutines.hpp index 0e583aea0b1..91f273e6515 100644 --- a/hotspot/src/share/vm/runtime/stubRoutines.hpp +++ b/hotspot/src/share/vm/runtime/stubRoutines.hpp @@ -199,6 +199,11 @@ class StubRoutines: AllStatic { // zero heap space aligned to jlong (8 bytes) static address _zero_aligned_words; + static address _aescrypt_encryptBlock; + static address _aescrypt_decryptBlock; + static address _cipherBlockChaining_encryptAESCrypt; + static address _cipherBlockChaining_decryptAESCrypt; + // These are versions of the java.lang.Math methods which perform // the same operations as the intrinsic version. They are used for // constant folding in the compiler to ensure equivalence. If the @@ -330,6 +335,11 @@ class StubRoutines: AllStatic { static address arrayof_jshort_fill() { return _arrayof_jshort_fill; } static address arrayof_jint_fill() { return _arrayof_jint_fill; } + static address aescrypt_encryptBlock() { return _aescrypt_encryptBlock; } + static address aescrypt_decryptBlock() { return _aescrypt_decryptBlock; } + static address cipherBlockChaining_encryptAESCrypt() { return _cipherBlockChaining_encryptAESCrypt; } + static address cipherBlockChaining_decryptAESCrypt() { return _cipherBlockChaining_decryptAESCrypt; } + static address select_fill_function(BasicType t, bool aligned, const char* &name); static address zero_aligned_words() { return _zero_aligned_words; } diff --git a/hotspot/src/share/vm/runtime/thread.cpp b/hotspot/src/share/vm/runtime/thread.cpp index 0ed9a4b1fee..615ca40ab6e 100644 --- a/hotspot/src/share/vm/runtime/thread.cpp +++ b/hotspot/src/share/vm/runtime/thread.cpp @@ -323,12 +323,10 @@ void Thread::record_stack_base_and_size() { os::initialize_thread(this); #if INCLUDE_NMT - // record thread's native stack, stack grows downward - if (MemTracker::is_on()) { - address stack_low_addr = stack_base() - stack_size(); - MemTracker::record_thread_stack(stack_low_addr, stack_size(), this, + // record thread's native stack, stack grows downward + address stack_low_addr = stack_base() - stack_size(); + MemTracker::record_thread_stack(stack_low_addr, stack_size(), this, CURRENT_PC); - } #endif // INCLUDE_NMT } @@ -345,6 +343,9 @@ Thread::~Thread() { if (_stack_base != NULL) { address low_stack_addr = stack_base() - stack_size(); MemTracker::release_thread_stack(low_stack_addr, stack_size(), this); +#ifdef ASSERT + set_stack_base(NULL); +#endif } #endif // INCLUDE_NMT @@ -1041,6 +1042,7 @@ static void call_initializeSystemClass(TRAPS) { } char java_runtime_name[128] = ""; +char java_runtime_version[128] = ""; // extract the JRE name from sun.misc.Version.java_runtime_name static const char* get_java_runtime_name(TRAPS) { @@ -1063,6 +1065,27 @@ static const char* get_java_runtime_name(TRAPS) { } } +// extract the JRE version from sun.misc.Version.java_runtime_version +static const char* get_java_runtime_version(TRAPS) { + Klass* k = SystemDictionary::find(vmSymbols::sun_misc_Version(), + Handle(), Handle(), CHECK_AND_CLEAR_NULL); + fieldDescriptor fd; + bool found = k != NULL && + InstanceKlass::cast(k)->find_local_field(vmSymbols::java_runtime_version_name(), + vmSymbols::string_signature(), &fd); + if (found) { + oop name_oop = k->java_mirror()->obj_field(fd.offset()); + if (name_oop == NULL) + return NULL; + const char* name = java_lang_String::as_utf8_string(name_oop, + java_runtime_version, + sizeof(java_runtime_version)); + return name; + } else { + return NULL; + } +} + // General purpose hook into Java code, run once when the VM is initialized. // The Java library method itself may be changed independently from the VM. static void call_postVMInitHook(TRAPS) { @@ -1521,10 +1544,12 @@ JavaThread::~JavaThread() { tty->print_cr("terminate thread %p", this); } - // Info NMT that this JavaThread is exiting, its memory - // recorder should be collected + // By now, this thread should already be invisible to safepoint, + // and its per-thread recorder also collected. assert(!is_safepoint_visible(), "wrong state"); - MemTracker::thread_exiting(this); +#if INCLUDE_NMT + assert(get_recorder() == NULL, "Already collected"); +#endif // INCLUDE_NMT // JSR166 -- return the parker to the free list Parker::Release(_parker); @@ -2425,6 +2450,7 @@ void JavaThread::create_stack_guard_pages() { } void JavaThread::remove_stack_guard_pages() { + assert(Thread::current() == this, "from different thread"); if (_stack_guard_state == stack_guard_unused) return; address low_addr = stack_base() - stack_size(); size_t len = (StackYellowPages + StackRedPages) * os::vm_page_size(); @@ -3469,6 +3495,7 @@ jint Threads::create_vm(JavaVMInitArgs* args, bool* canTryAgain) { // get the Java runtime name after java.lang.System is initialized JDK_Version::set_runtime_name(get_java_runtime_name(THREAD)); + JDK_Version::set_runtime_version(get_java_runtime_version(THREAD)); } else { warning("java.lang.System not initialized"); } @@ -4093,7 +4120,10 @@ void Threads::remove(JavaThread* p) { // Now, this thread is not visible to safepoint p->set_safepoint_visible(false); - + // once the thread becomes safepoint invisible, we can not use its per-thread + // recorder. And Threads::do_threads() no longer walks this thread, so we have + // to release its per-thread recorder here. + MemTracker::thread_exiting(p); } // unlock Threads_lock // Since Events::log uses a lock, we grab it outside the Threads_lock diff --git a/hotspot/src/share/vm/runtime/vmStructs.cpp b/hotspot/src/share/vm/runtime/vmStructs.cpp index 51e3ab5f753..367f3f8e009 100644 --- a/hotspot/src/share/vm/runtime/vmStructs.cpp +++ b/hotspot/src/share/vm/runtime/vmStructs.cpp @@ -59,6 +59,7 @@ #include "memory/generation.hpp" #include "memory/generationSpec.hpp" #include "memory/heap.hpp" +#include "memory/metablock.hpp" #include "memory/space.hpp" #include "memory/tenuredGeneration.hpp" #include "memory/universe.hpp" @@ -249,6 +250,7 @@ typedef TwoOopHashtable KlassTwoOopHashtable; typedef Hashtable KlassHashtable; typedef HashtableEntry KlassHashtableEntry; typedef TwoOopHashtable SymbolTwoOopHashtable; +typedef BinaryTreeDictionary MetablockTreeDictionary; //-------------------------------------------------------------------------------- // VM_STRUCTS @@ -1237,7 +1239,15 @@ typedef TwoOopHashtable SymbolTwoOopHashtable; nonstatic_field(AccessFlags, _flags, jint) \ nonstatic_field(elapsedTimer, _counter, jlong) \ nonstatic_field(elapsedTimer, _active, bool) \ - nonstatic_field(InvocationCounter, _counter, unsigned int) + nonstatic_field(InvocationCounter, _counter, unsigned int) \ + volatile_nonstatic_field(FreeChunk, _size, size_t) \ + nonstatic_field(FreeChunk, _next, FreeChunk*) \ + nonstatic_field(FreeChunk, _prev, FreeChunk*) \ + nonstatic_field(FreeList, _size, size_t) \ + nonstatic_field(FreeList, _size, size_t) \ + nonstatic_field(FreeList, _count, ssize_t) \ + nonstatic_field(FreeList, _count, ssize_t) \ + nonstatic_field(MetablockTreeDictionary, _total_size, size_t) /* NOTE that we do not use the last_entry() macro here; it is used */ /* in vmStructs__.hpp's VM_STRUCTS_OS_CPU macro (and must */ @@ -2080,7 +2090,24 @@ typedef TwoOopHashtable SymbolTwoOopHashtable; declare_toplevel_type(Universe) \ declare_toplevel_type(vframeArray) \ declare_toplevel_type(vframeArrayElement) \ - declare_toplevel_type(Annotations*) + declare_toplevel_type(Annotations*) \ + \ + /***************/ \ + /* Miscellaneous types */ \ + /***************/ \ + \ + /* freelist */ \ + declare_toplevel_type(FreeChunk*) \ + declare_toplevel_type(Metablock*) \ + declare_toplevel_type(FreeBlockDictionary*) \ + declare_toplevel_type(FreeList*) \ + declare_toplevel_type(FreeList) \ + declare_toplevel_type(FreeBlockDictionary*) \ + declare_toplevel_type(FreeList*) \ + declare_toplevel_type(FreeList) \ + declare_toplevel_type(MetablockTreeDictionary*) \ + declare_type(MetablockTreeDictionary, FreeBlockDictionary) \ + declare_type(MetablockTreeDictionary, FreeBlockDictionary) /* NOTE that we do not use the last_entry() macro here; it is used */ @@ -2447,7 +2474,7 @@ typedef TwoOopHashtable SymbolTwoOopHashtable; /* frame */ \ /**********************/ \ \ - X86_ONLY(declare_constant(frame::entry_frame_call_wrapper_offset)) \ + NOT_ZERO(X86_ONLY(declare_constant(frame::entry_frame_call_wrapper_offset))) \ declare_constant(frame::pc_return_offset) \ \ /*************/ \ diff --git a/hotspot/src/share/vm/services/attachListener.cpp b/hotspot/src/share/vm/services/attachListener.cpp index 983f3f95fe1..80dfd7effd4 100644 --- a/hotspot/src/share/vm/services/attachListener.cpp +++ b/hotspot/src/share/vm/services/attachListener.cpp @@ -404,6 +404,8 @@ static AttachOperationFunctionInfo funcs[] = { static void attach_listener_thread_entry(JavaThread* thread, TRAPS) { os::set_priority(thread, NearMaxPriority); + thread->record_stack_base_and_size(); + if (AttachListener::pd_init() != 0) { return; } diff --git a/hotspot/src/share/vm/services/memBaseline.cpp b/hotspot/src/share/vm/services/memBaseline.cpp index 5b829751649..57bdb013874 100644 --- a/hotspot/src/share/vm/services/memBaseline.cpp +++ b/hotspot/src/share/vm/services/memBaseline.cpp @@ -40,6 +40,7 @@ MemType2Name MemBaseline::MemType2NameMap[NUMBER_OF_MEMORY_TYPE] = { {mtSymbol, "Symbol"}, {mtNMT, "Memory Tracking"}, {mtChunk, "Pooled Free Chunks"}, + {mtClassShared,"Shared spaces for classes"}, {mtNone, "Unknown"} // It can happen when type tagging records are lagging // behind }; @@ -55,6 +56,7 @@ MemBaseline::MemBaseline() { _malloc_cs = NULL; _vm_cs = NULL; + _vm_map = NULL; _number_of_classes = 0; _number_of_threads = 0; @@ -72,6 +74,11 @@ void MemBaseline::clear() { _vm_cs = NULL; } + if (_vm_map != NULL) { + delete _vm_map; + _vm_map = NULL; + } + reset(); } @@ -85,6 +92,7 @@ void MemBaseline::reset() { if (_malloc_cs != NULL) _malloc_cs->clear(); if (_vm_cs != NULL) _vm_cs->clear(); + if (_vm_map != NULL) _vm_map->clear(); for (int index = 0; index < NUMBER_OF_MEMORY_TYPE; index ++) { _malloc_data[index].clear(); @@ -94,39 +102,33 @@ void MemBaseline::reset() { } MemBaseline::~MemBaseline() { - if (_malloc_cs != NULL) { - delete _malloc_cs; - } - - if (_vm_cs != NULL) { - delete _vm_cs; - } + clear(); } // baseline malloc'd memory records, generate overall summary and summaries by // memory types bool MemBaseline::baseline_malloc_summary(const MemPointerArray* malloc_records) { - MemPointerArrayIteratorImpl mItr((MemPointerArray*)malloc_records); - MemPointerRecord* mptr = (MemPointerRecord*)mItr.current(); + MemPointerArrayIteratorImpl malloc_itr((MemPointerArray*)malloc_records); + MemPointerRecord* malloc_ptr = (MemPointerRecord*)malloc_itr.current(); size_t used_arena_size = 0; int index; - while (mptr != NULL) { - index = flag2index(FLAGS_TO_MEMORY_TYPE(mptr->flags())); - size_t size = mptr->size(); + while (malloc_ptr != NULL) { + index = flag2index(FLAGS_TO_MEMORY_TYPE(malloc_ptr->flags())); + size_t size = malloc_ptr->size(); _total_malloced += size; _malloc_data[index].inc(size); - if (MemPointerRecord::is_arena_record(mptr->flags())) { + if (MemPointerRecord::is_arena_record(malloc_ptr->flags())) { // see if arena size record present - MemPointerRecord* next_p = (MemPointerRecordEx*)mItr.peek_next(); - if (MemPointerRecord::is_arena_size_record(next_p->flags())) { - assert(next_p->is_size_record_of_arena(mptr), "arena records do not match"); - size = next_p->size(); + MemPointerRecord* next_malloc_ptr = (MemPointerRecordEx*)malloc_itr.peek_next(); + if (MemPointerRecord::is_arena_size_record(next_malloc_ptr->flags())) { + assert(next_malloc_ptr->is_size_record_of_arena(malloc_ptr), "arena records do not match"); + size = next_malloc_ptr->size(); _arena_data[index].inc(size); used_arena_size += size; - mItr.next(); + malloc_itr.next(); } } - mptr = (MemPointerRecordEx*)mItr.next(); + malloc_ptr = (MemPointerRecordEx*)malloc_itr.next(); } // substract used arena size to get size of arena chunk in free list @@ -142,20 +144,23 @@ bool MemBaseline::baseline_malloc_summary(const MemPointerArray* malloc_records) // baseline mmap'd memory records, generate overall summary and summaries by // memory types bool MemBaseline::baseline_vm_summary(const MemPointerArray* vm_records) { - MemPointerArrayIteratorImpl vItr((MemPointerArray*)vm_records); - VMMemRegion* vptr = (VMMemRegion*)vItr.current(); + MemPointerArrayIteratorImpl vm_itr((MemPointerArray*)vm_records); + VMMemRegion* vm_ptr = (VMMemRegion*)vm_itr.current(); int index; - while (vptr != NULL) { - index = flag2index(FLAGS_TO_MEMORY_TYPE(vptr->flags())); - + while (vm_ptr != NULL) { + if (vm_ptr->is_reserved_region()) { + index = flag2index(FLAGS_TO_MEMORY_TYPE(vm_ptr->flags())); // we use the number of thread stack to count threads - if (IS_MEMORY_TYPE(vptr->flags(), mtThreadStack)) { + if (IS_MEMORY_TYPE(vm_ptr->flags(), mtThreadStack)) { _number_of_threads ++; } - _total_vm_reserved += vptr->reserved_size(); - _total_vm_committed += vptr->committed_size(); - _vm_data[index].inc(vptr->reserved_size(), vptr->committed_size()); - vptr = (VMMemRegion*)vItr.next(); + _total_vm_reserved += vm_ptr->size(); + _vm_data[index].inc(vm_ptr->size(), 0); + } else { + _total_vm_committed += vm_ptr->size(); + _vm_data[index].inc(0, vm_ptr->size()); + } + vm_ptr = (VMMemRegion*)vm_itr.next(); } return true; } @@ -165,41 +170,57 @@ bool MemBaseline::baseline_vm_summary(const MemPointerArray* vm_records) { bool MemBaseline::baseline_malloc_details(const MemPointerArray* malloc_records) { assert(MemTracker::track_callsite(), "detail tracking is off"); - MemPointerArrayIteratorImpl mItr((MemPointerArray*)malloc_records); - MemPointerRecordEx* mptr = (MemPointerRecordEx*)mItr.current(); - MallocCallsitePointer mp; + MemPointerArrayIteratorImpl malloc_itr(const_cast(malloc_records)); + MemPointerRecordEx* malloc_ptr = (MemPointerRecordEx*)malloc_itr.current(); + MallocCallsitePointer malloc_callsite; + // initailize malloc callsite array if (_malloc_cs == NULL) { _malloc_cs = new (std::nothrow) MemPointerArrayImpl(64); // out of native memory - if (_malloc_cs == NULL) { + if (_malloc_cs == NULL || _malloc_cs->out_of_memory()) { return false; } } else { _malloc_cs->clear(); } + MemPointerArray* malloc_data = const_cast(malloc_records); + + // sort into callsite pc order. Details are aggregated by callsites + malloc_data->sort((FN_SORT)malloc_sort_by_pc); + bool ret = true; + // baseline memory that is totaled over 1 KB - while (mptr != NULL) { - if (!MemPointerRecord::is_arena_size_record(mptr->flags())) { + while (malloc_ptr != NULL) { + if (!MemPointerRecord::is_arena_size_record(malloc_ptr->flags())) { // skip thread stacks - if (!IS_MEMORY_TYPE(mptr->flags(), mtThreadStack)) { - if (mp.addr() != mptr->pc()) { - if ((mp.amount()/K) > 0) { - if (!_malloc_cs->append(&mp)) { - return false; + if (!IS_MEMORY_TYPE(malloc_ptr->flags(), mtThreadStack)) { + if (malloc_callsite.addr() != malloc_ptr->pc()) { + if ((malloc_callsite.amount()/K) > 0) { + if (!_malloc_cs->append(&malloc_callsite)) { + ret = false; + break; } } - mp = MallocCallsitePointer(mptr->pc()); + malloc_callsite = MallocCallsitePointer(malloc_ptr->pc()); } - mp.inc(mptr->size()); + malloc_callsite.inc(malloc_ptr->size()); } } - mptr = (MemPointerRecordEx*)mItr.next(); + malloc_ptr = (MemPointerRecordEx*)malloc_itr.next(); } - if (mp.addr() != 0 && (mp.amount()/K) > 0) { - if (!_malloc_cs->append(&mp)) { + // restore to address order. Snapshot malloc data is maintained in memory + // address order. + malloc_data->sort((FN_SORT)malloc_sort_by_addr); + + if (!ret) { + return false; + } + // deal with last record + if (malloc_callsite.addr() != 0 && (malloc_callsite.amount()/K) > 0) { + if (!_malloc_cs->append(&malloc_callsite)) { return false; } } @@ -210,34 +231,106 @@ bool MemBaseline::baseline_malloc_details(const MemPointerArray* malloc_records) bool MemBaseline::baseline_vm_details(const MemPointerArray* vm_records) { assert(MemTracker::track_callsite(), "detail tracking is off"); - VMCallsitePointer vp; - MemPointerArrayIteratorImpl vItr((MemPointerArray*)vm_records); - VMMemRegionEx* vptr = (VMMemRegionEx*)vItr.current(); + VMCallsitePointer vm_callsite; + VMCallsitePointer* cur_callsite = NULL; + MemPointerArrayIteratorImpl vm_itr((MemPointerArray*)vm_records); + VMMemRegionEx* vm_ptr = (VMMemRegionEx*)vm_itr.current(); + // initialize virtual memory map array + if (_vm_map == NULL) { + _vm_map = new (std::nothrow) MemPointerArrayImpl(vm_records->length()); + if (_vm_map == NULL || _vm_map->out_of_memory()) { + return false; + } + } else { + _vm_map->clear(); + } + + // initialize virtual memory callsite array if (_vm_cs == NULL) { _vm_cs = new (std::nothrow) MemPointerArrayImpl(64); - if (_vm_cs == NULL) { + if (_vm_cs == NULL || _vm_cs->out_of_memory()) { return false; } } else { _vm_cs->clear(); } - while (vptr != NULL) { - if (vp.addr() != vptr->pc()) { - if (!_vm_cs->append(&vp)) { + // consolidate virtual memory data + VMMemRegionEx* reserved_rec = NULL; + VMMemRegionEx* committed_rec = NULL; + + // vm_ptr is coming in increasing base address order + while (vm_ptr != NULL) { + if (vm_ptr->is_reserved_region()) { + // consolidate reserved memory regions for virtual memory map. + // The criteria for consolidation is: + // 1. two adjacent reserved memory regions + // 2. belong to the same memory type + // 3. reserved from the same callsite + if (reserved_rec == NULL || + reserved_rec->base() + reserved_rec->size() != vm_ptr->addr() || + FLAGS_TO_MEMORY_TYPE(reserved_rec->flags()) != FLAGS_TO_MEMORY_TYPE(vm_ptr->flags()) || + reserved_rec->pc() != vm_ptr->pc()) { + if (!_vm_map->append(vm_ptr)) { return false; } - vp = VMCallsitePointer(vptr->pc()); + // inserted reserved region, we need the pointer to the element in virtual + // memory map array. + reserved_rec = (VMMemRegionEx*)_vm_map->at(_vm_map->length() - 1); + } else { + reserved_rec->expand_region(vm_ptr->addr(), vm_ptr->size()); } - vp.inc(vptr->size(), vptr->committed_size()); - vptr = (VMMemRegionEx*)vItr.next(); - } - if (vp.addr() != 0) { - if (!_vm_cs->append(&vp)) { + + if (cur_callsite != NULL && !_vm_cs->append(cur_callsite)) { return false; } + vm_callsite = VMCallsitePointer(vm_ptr->pc()); + cur_callsite = &vm_callsite; + vm_callsite.inc(vm_ptr->size(), 0); + } else { + // consolidate committed memory regions for virtual memory map + // The criterial is: + // 1. two adjacent committed memory regions + // 2. committed from the same callsite + if (committed_rec == NULL || + committed_rec->base() + committed_rec->size() != vm_ptr->addr() || + committed_rec->pc() != vm_ptr->pc()) { + if (!_vm_map->append(vm_ptr)) { + return false; } + committed_rec = (VMMemRegionEx*)_vm_map->at(_vm_map->length() - 1); + } else { + committed_rec->expand_region(vm_ptr->addr(), vm_ptr->size()); + } + vm_callsite.inc(0, vm_ptr->size()); + } + vm_ptr = (VMMemRegionEx*)vm_itr.next(); + } + // deal with last record + if (cur_callsite != NULL && !_vm_cs->append(cur_callsite)) { + return false; + } + + // sort it into callsite pc order. Details are aggregated by callsites + _vm_cs->sort((FN_SORT)bl_vm_sort_by_pc); + + // walk the array to consolidate record by pc + MemPointerArrayIteratorImpl itr(_vm_cs); + VMCallsitePointer* callsite_rec = (VMCallsitePointer*)itr.current(); + VMCallsitePointer* next_rec = (VMCallsitePointer*)itr.next(); + while (next_rec != NULL) { + assert(callsite_rec != NULL, "Sanity check"); + if (next_rec->addr() == callsite_rec->addr()) { + callsite_rec->inc(next_rec->reserved_amount(), next_rec->committed_amount()); + itr.remove(); + next_rec = (VMCallsitePointer*)itr.current(); + } else { + callsite_rec = next_rec; + next_rec = (VMCallsitePointer*)itr.next(); + } + } + return true; } @@ -251,12 +344,8 @@ bool MemBaseline::baseline(MemSnapshot& snapshot, bool summary_only) { _number_of_classes = SystemDictionary::number_of_classes(); if (!summary_only && MemTracker::track_callsite() && _baselined) { - ((MemPointerArray*)snapshot._alloc_ptrs)->sort((FN_SORT)malloc_sort_by_pc); - ((MemPointerArray*)snapshot._vm_ptrs)->sort((FN_SORT)vm_sort_by_pc); _baselined = baseline_malloc_details(snapshot._alloc_ptrs) && baseline_vm_details(snapshot._vm_ptrs); - ((MemPointerArray*)snapshot._alloc_ptrs)->sort((FN_SORT)malloc_sort_by_addr); - ((MemPointerArray*)snapshot._vm_ptrs)->sort((FN_SORT)vm_sort_by_addr); } return _baselined; } @@ -278,7 +367,7 @@ const char* MemBaseline::type2name(MEMFLAGS type) { return MemType2NameMap[index]._name; } } - assert(false, "no type"); + assert(false, err_msg("bad type %x", type)); return NULL; } @@ -341,13 +430,6 @@ int MemBaseline::bl_malloc_sort_by_pc(const void* p1, const void* p2) { return UNSIGNED_COMPARE(mp1->addr(), mp2->addr()); } -// sort snapshot mmap'd records in callsite pc order -int MemBaseline::vm_sort_by_pc(const void* p1, const void* p2) { - assert(MemTracker::track_callsite(),"Just check"); - const VMMemRegionEx* mp1 = (const VMMemRegionEx*)p1; - const VMMemRegionEx* mp2 = (const VMMemRegionEx*)p2; - return UNSIGNED_COMPARE(mp1->pc(), mp2->pc()); -} // sort baselined mmap'd records in size (reserved size) order int MemBaseline::bl_vm_sort_by_size(const void* p1, const void* p2) { @@ -376,12 +458,3 @@ int MemBaseline::malloc_sort_by_addr(const void* p1, const void* p2) { return delta; } -// sort snapshot mmap'd records in memory block address order -int MemBaseline::vm_sort_by_addr(const void* p1, const void* p2) { - assert(MemTracker::is_on(), "Just check"); - const VMMemRegion* mp1 = (const VMMemRegion*)p1; - const VMMemRegion* mp2 = (const VMMemRegion*)p2; - int delta = UNSIGNED_COMPARE(mp1->addr(), mp2->addr()); - assert(delta != 0, "dup pointer"); - return delta; -} diff --git a/hotspot/src/share/vm/services/memBaseline.hpp b/hotspot/src/share/vm/services/memBaseline.hpp index 2affa2b96ca..5f98e30d451 100644 --- a/hotspot/src/share/vm/services/memBaseline.hpp +++ b/hotspot/src/share/vm/services/memBaseline.hpp @@ -320,6 +320,8 @@ class MemBaseline : public _ValueObj { // only available when detail tracking is on. MemPointerArray* _malloc_cs; MemPointerArray* _vm_cs; + // virtual memory map + MemPointerArray* _vm_map; private: static MemType2Name MemType2NameMap[NUMBER_OF_MEMORY_TYPE]; @@ -432,9 +434,6 @@ class MemBaseline : public _ValueObj { static int malloc_sort_by_pc(const void* p1, const void* p2); static int malloc_sort_by_addr(const void* p1, const void* p2); - static int vm_sort_by_pc(const void* p1, const void* p2); - static int vm_sort_by_addr(const void* p1, const void* p2); - private: // sorting functions for baselined records static int bl_malloc_sort_by_size(const void* p1, const void* p2); diff --git a/hotspot/src/share/vm/services/memPtr.cpp b/hotspot/src/share/vm/services/memPtr.cpp index d2a18765a4f..5d0fbf5bf57 100644 --- a/hotspot/src/share/vm/services/memPtr.cpp +++ b/hotspot/src/share/vm/services/memPtr.cpp @@ -40,35 +40,3 @@ jint SequenceGenerator::next() { return seq; } - - -bool VMMemRegion::contains(const VMMemRegion* mr) const { - assert(base() != 0, "Sanity check"); - assert(size() != 0 || committed_size() != 0, - "Sanity check"); - address base_addr = base(); - address end_addr = base_addr + - (is_reserve_record()? reserved_size(): committed_size()); - if (mr->is_reserve_record()) { - if (mr->base() == base_addr && mr->size() == size()) { - // the same range - return true; - } - return false; - } else if (mr->is_commit_record() || mr->is_uncommit_record()) { - assert(mr->base() != 0 && mr->committed_size() > 0, - "bad record"); - return (mr->base() >= base_addr && - (mr->base() + mr->committed_size()) <= end_addr); - } else if (mr->is_type_tagging_record()) { - assert(mr->base() != NULL, "Sanity check"); - return (mr->base() >= base_addr && mr->base() < end_addr); - } else if (mr->is_release_record()) { - assert(mr->base() != 0 && mr->size() > 0, - "bad record"); - return (mr->base() == base_addr && mr->size() == size()); - } else { - ShouldNotReachHere(); - return false; - } -} diff --git a/hotspot/src/share/vm/services/memPtr.hpp b/hotspot/src/share/vm/services/memPtr.hpp index bef49b2b47a..0618a3c806a 100644 --- a/hotspot/src/share/vm/services/memPtr.hpp +++ b/hotspot/src/share/vm/services/memPtr.hpp @@ -291,6 +291,26 @@ public: inline bool is_type_tagging_record() const { return is_virtual_memory_type_record(_flags); } + + // if the two memory pointer records actually represent the same + // memory block + inline bool is_same_region(const MemPointerRecord* other) const { + return (addr() == other->addr() && size() == other->size()); + } + + // if this memory region fully contains another one + inline bool contains_region(const MemPointerRecord* other) const { + return contains_region(other->addr(), other->size()); + } + + // if this memory region fully contains specified memory range + inline bool contains_region(address add, size_t sz) const { + return (addr() <= add && addr() + size() >= add + sz); + } + + inline bool contains_address(address add) const { + return (addr() <= add && addr() + size() > add); + } }; // MemPointerRecordEx also records callsite pc, from where @@ -321,66 +341,32 @@ class MemPointerRecordEx : public MemPointerRecord { } }; -// a virtual memory region +// a virtual memory region. The region can represent a reserved +// virtual memory region or a committed memory region class VMMemRegion : public MemPointerRecord { - private: - // committed size - size_t _committed_size; - public: - VMMemRegion(): _committed_size(0) { } + VMMemRegion() { } void init(const MemPointerRecord* mp) { - assert(mp->is_vm_pointer(), "not virtual memory pointer"); + assert(mp->is_vm_pointer(), "Sanity check"); _addr = mp->addr(); - if (mp->is_commit_record() || mp->is_uncommit_record()) { - _committed_size = mp->size(); - set_size(_committed_size); - } else { set_size(mp->size()); - _committed_size = 0; - } set_flags(mp->flags()); } VMMemRegion& operator=(const VMMemRegion& other) { MemPointerRecord::operator=(other); - _committed_size = other.committed_size(); return *this; } - inline bool is_reserve_record() const { - return is_virtual_memory_reserve_record(flags()); + inline bool is_reserved_region() const { + return is_allocation_record(); } - inline bool is_release_record() const { - return is_virtual_memory_release_record(flags()); + inline bool is_committed_region() const { + return is_commit_record(); } - // resize reserved VM range - inline void set_reserved_size(size_t new_size) { - assert(new_size >= committed_size(), "resize"); - set_size(new_size); - } - - inline void commit(size_t size) { - _committed_size += size; - } - - inline void uncommit(size_t size) { - if (_committed_size >= size) { - _committed_size -= size; - } else { - _committed_size = 0; - } - } - - /* - * if this virtual memory range covers whole range of - * the other VMMemRegion - */ - bool contains(const VMMemRegion* mr) const; - /* base address of this virtual memory range */ inline address base() const { return addr(); @@ -391,13 +377,28 @@ public: set_flags(flags() | (f & mt_masks)); } - // release part of memory range - inline void partial_release(address add, size_t sz) { - assert(add >= addr() && add < addr() + size(), "not valid address"); - // for now, it can partially release from the both ends, - // but not in the middle + // expand this region to also cover specified range. + // The range has to be on either end of the memory region. + void expand_region(address addr, size_t sz) { + if (addr < base()) { + assert(addr + sz == base(), "Sanity check"); + _addr = addr; + set_size(size() + sz); + } else { + assert(base() + size() == addr, "Sanity check"); + set_size(size() + sz); + } + } + + // exclude the specified address range from this region. + // The excluded memory range has to be on either end of this memory + // region. + inline void exclude_region(address add, size_t sz) { + assert(is_reserved_region() || is_committed_region(), "Sanity check"); + assert(addr() != NULL && size() != 0, "Sanity check"); + assert(add >= addr() && add < addr() + size(), "Sanity check"); assert(add == addr() || (add + sz) == (addr() + size()), - "release in the middle"); + "exclude in the middle"); if (add == addr()) { set_addr(add + sz); set_size(size() - sz); @@ -405,16 +406,6 @@ public: set_size(size() - sz); } } - - // the committed size of the virtual memory block - inline size_t committed_size() const { - return _committed_size; - } - - // the reserved size of the virtual memory block - inline size_t reserved_size() const { - return size(); - } }; class VMMemRegionEx : public VMMemRegion { diff --git a/hotspot/src/share/vm/services/memRecorder.cpp b/hotspot/src/share/vm/services/memRecorder.cpp index 33db875af31..5ec865af323 100644 --- a/hotspot/src/share/vm/services/memRecorder.cpp +++ b/hotspot/src/share/vm/services/memRecorder.cpp @@ -31,14 +31,19 @@ #include "services/memTracker.hpp" MemPointer* SequencedRecordIterator::next_record() { - MemPointer* itr_cur = _itr.current(); - if (itr_cur == NULL) return NULL; - MemPointer* itr_next = _itr.next(); + MemPointerRecord* itr_cur = (MemPointerRecord*)_itr.current(); + if (itr_cur == NULL) { + return itr_cur; + } - while (itr_next != NULL && - same_kind((MemPointerRecord*)itr_cur, (MemPointerRecord*)itr_next)) { + MemPointerRecord* itr_next = (MemPointerRecord*)_itr.next(); + + // don't collapse virtual memory records + while (itr_next != NULL && !itr_cur->is_vm_pointer() && + !itr_next->is_vm_pointer() && + same_kind(itr_cur, itr_next)) { itr_cur = itr_next; - itr_next = _itr.next(); + itr_next = (MemPointerRecord*)_itr.next(); } return itr_cur; diff --git a/hotspot/src/share/vm/services/memRecorder.hpp b/hotspot/src/share/vm/services/memRecorder.hpp index 754cbd6c346..2afeeb09b52 100644 --- a/hotspot/src/share/vm/services/memRecorder.hpp +++ b/hotspot/src/share/vm/services/memRecorder.hpp @@ -188,6 +188,7 @@ class SequencedRecordIterator : public MemPointerArrayIterator { // Test if the two records are the same kind: the same memory block and allocation // type. inline bool same_kind(const MemPointerRecord* p1, const MemPointerRecord* p2) const { + assert(!p1->is_vm_pointer() && !p2->is_vm_pointer(), "malloc pointer only"); return (p1->addr() == p2->addr() && (p1->flags() &MemPointerRecord::tag_masks) == (p2->flags() & MemPointerRecord::tag_masks)); diff --git a/hotspot/src/share/vm/services/memReporter.cpp b/hotspot/src/share/vm/services/memReporter.cpp index 783d951de14..602ac1c08ed 100644 --- a/hotspot/src/share/vm/services/memReporter.cpp +++ b/hotspot/src/share/vm/services/memReporter.cpp @@ -51,6 +51,7 @@ void BaselineReporter::report_baseline(const MemBaseline& baseline, bool summary report_summaries(baseline); if (!summary_only && MemTracker::track_callsite()) { + report_virtual_memory_map(baseline); report_callsites(baseline); } _outputer.done(); @@ -74,6 +75,25 @@ void BaselineReporter::report_summaries(const MemBaseline& baseline) { _outputer.done_category_summary(); } +void BaselineReporter::report_virtual_memory_map(const MemBaseline& baseline) { + _outputer.start_virtual_memory_map(); + MemBaseline* pBL = const_cast(&baseline); + MemPointerArrayIteratorImpl itr = MemPointerArrayIteratorImpl(pBL->_vm_map); + VMMemRegionEx* rgn = (VMMemRegionEx*)itr.current(); + while (rgn != NULL) { + if (rgn->is_reserved_region()) { + _outputer.reserved_memory_region(FLAGS_TO_MEMORY_TYPE(rgn->flags()), + rgn->base(), rgn->base() + rgn->size(), amount_in_current_scale(rgn->size()), rgn->pc()); + } else { + _outputer.committed_memory_region(rgn->base(), rgn->base() + rgn->size(), + amount_in_current_scale(rgn->size()), rgn->pc()); + } + rgn = (VMMemRegionEx*)itr.next(); + } + + _outputer.done_virtual_memory_map(); +} + void BaselineReporter::report_callsites(const MemBaseline& baseline) { _outputer.start_callsite(); MemBaseline* pBL = const_cast(&baseline); @@ -324,6 +344,40 @@ void BaselineTTYOutputer::done_category_summary() { _output->print_cr(" "); } + +void BaselineTTYOutputer::start_virtual_memory_map() { + _output->print_cr("Virtual memory map:"); +} + +void BaselineTTYOutputer::reserved_memory_region(MEMFLAGS type, address base, address end, + size_t size, address pc) { + const char* unit = memory_unit(_scale); + char buf[128]; + int offset; + _output->print_cr(" "); + _output->print_cr("[" PTR_FORMAT " - " PTR_FORMAT "] reserved %d%s for %s", base, end, size, unit, + MemBaseline::type2name(type)); + if (os::dll_address_to_function_name(pc, buf, sizeof(buf), &offset)) { + _output->print_cr("\t\tfrom [%s+0x%x]", buf, offset); + } +} + +void BaselineTTYOutputer::committed_memory_region(address base, address end, size_t size, address pc) { + const char* unit = memory_unit(_scale); + char buf[128]; + int offset; + _output->print("\t[" PTR_FORMAT " - " PTR_FORMAT "] committed %d%s", base, end, size, unit); + if (os::dll_address_to_function_name(pc, buf, sizeof(buf), &offset)) { + _output->print_cr(" from [%s+0x%x]", buf, offset); + } +} + +void BaselineTTYOutputer::done_virtual_memory_map() { + _output->print_cr(" "); +} + + + void BaselineTTYOutputer::start_callsite() { _output->print_cr("Details:"); _output->print_cr(" "); @@ -337,7 +391,7 @@ void BaselineTTYOutputer::malloc_callsite(address pc, size_t malloc_amt, size_t malloc_count) { if (malloc_amt > 0) { const char* unit = memory_unit(_scale); - char buf[64]; + char buf[128]; int offset; if (pc == 0) { _output->print("[BOOTSTRAP]%18s", " "); @@ -357,7 +411,7 @@ void BaselineTTYOutputer::virtual_memory_callsite(address pc, size_t reserved_am size_t committed_amt) { if (reserved_amt > 0) { const char* unit = memory_unit(_scale); - char buf[64]; + char buf[128]; int offset; if (pc == 0) { _output->print("[BOOTSTRAP]%18s", " "); @@ -502,7 +556,7 @@ void BaselineTTYOutputer::diff_malloc_callsite(address pc, int malloc_diff, int malloc_count_diff) { if (malloc_diff != 0) { const char* unit = memory_unit(_scale); - char buf[64]; + char buf[128]; int offset; if (pc == 0) { _output->print_cr("[BOOTSTRAP]%18s", " "); diff --git a/hotspot/src/share/vm/services/memReporter.hpp b/hotspot/src/share/vm/services/memReporter.hpp index 4595b2797b3..7a5372d49a0 100644 --- a/hotspot/src/share/vm/services/memReporter.hpp +++ b/hotspot/src/share/vm/services/memReporter.hpp @@ -93,6 +93,11 @@ class BaselineOutputer : public StackObj { virtual void done_category_summary() = 0; + virtual void start_virtual_memory_map() = 0; + virtual void reserved_memory_region(MEMFLAGS type, address base, address end, size_t size, address pc) = 0; + virtual void committed_memory_region(address base, address end, size_t size, address pc) = 0; + virtual void done_virtual_memory_map() = 0; + /* * Report callsite information */ @@ -136,6 +141,7 @@ class BaselineReporter : public StackObj { private: void report_summaries(const MemBaseline& baseline); + void report_virtual_memory_map(const MemBaseline& baseline); void report_callsites(const MemBaseline& baseline); void diff_summaries(const MemBaseline& cur, const MemBaseline& prev); @@ -251,6 +257,13 @@ class BaselineTTYOutputer : public BaselineOutputer { void done_category_summary(); + // virtual memory map + void start_virtual_memory_map(); + void reserved_memory_region(MEMFLAGS type, address base, address end, size_t size, address pc); + void committed_memory_region(address base, address end, size_t size, address pc); + void done_virtual_memory_map(); + + /* * Report callsite information */ diff --git a/hotspot/src/share/vm/services/memSnapshot.cpp b/hotspot/src/share/vm/services/memSnapshot.cpp index f860576941e..20e1ce61fa4 100644 --- a/hotspot/src/share/vm/services/memSnapshot.cpp +++ b/hotspot/src/share/vm/services/memSnapshot.cpp @@ -31,6 +31,220 @@ #include "services/memSnapshot.hpp" #include "services/memTracker.hpp" + +bool VMMemPointerIterator::insert_record(MemPointerRecord* rec) { + VMMemRegionEx new_rec; + assert(rec->is_allocation_record() || rec->is_commit_record(), + "Sanity check"); + if (MemTracker::track_callsite()) { + new_rec.init((MemPointerRecordEx*)rec); + } else { + new_rec.init(rec); + } + return insert(&new_rec); +} + +bool VMMemPointerIterator::insert_record_after(MemPointerRecord* rec) { + VMMemRegionEx new_rec; + assert(rec->is_allocation_record() || rec->is_commit_record(), + "Sanity check"); + if (MemTracker::track_callsite()) { + new_rec.init((MemPointerRecordEx*)rec); + } else { + new_rec.init(rec); + } + return insert_after(&new_rec); +} + +// we don't consolidate reserved regions, since they may be categorized +// in different types. +bool VMMemPointerIterator::add_reserved_region(MemPointerRecord* rec) { + assert(rec->is_allocation_record(), "Sanity check"); + VMMemRegion* cur = (VMMemRegion*)current(); + + // we don't have anything yet + if (cur == NULL) { + return insert_record(rec); + } + + assert(cur->is_reserved_region(), "Sanity check"); + // duplicated records + if (cur->is_same_region(rec)) { + return true; + } + assert(cur->base() > rec->addr(), "Just check: locate()"); + assert(rec->addr() + rec->size() <= cur->base(), "Can not overlap"); + return insert_record(rec); +} + +// we do consolidate committed regions +bool VMMemPointerIterator::add_committed_region(MemPointerRecord* rec) { + assert(rec->is_commit_record(), "Sanity check"); + VMMemRegion* cur; + cur = (VMMemRegion*)current(); + assert(cur->is_reserved_region() && cur->contains_region(rec), + "Sanity check"); + + // thread's native stack is always marked as "committed", ignore + // the "commit" operation for creating stack guard pages + if (FLAGS_TO_MEMORY_TYPE(cur->flags()) == mtThreadStack && + FLAGS_TO_MEMORY_TYPE(rec->flags()) != mtThreadStack) { + return true; + } + + cur = (VMMemRegion*)next(); + while (cur != NULL && cur->is_committed_region()) { + // duplicated commit records + if(cur->contains_region(rec)) { + return true; + } + if (cur->base() > rec->addr()) { + // committed regions can not overlap + assert(rec->addr() + rec->size() <= cur->base(), "Can not overlap"); + if (rec->addr() + rec->size() == cur->base()) { + cur->expand_region(rec->addr(), rec->size()); + return true; + } else { + return insert_record(rec); + } + } else if (cur->base() + cur->size() == rec->addr()) { + cur->expand_region(rec->addr(), rec->size()); + VMMemRegion* next_reg = (VMMemRegion*)next(); + // see if we can consolidate next committed region + if (next_reg != NULL && next_reg->is_committed_region() && + next_reg->base() == cur->base() + cur->size()) { + cur->expand_region(next_reg->base(), next_reg->size()); + remove(); + } + return true; + } + cur = (VMMemRegion*)next(); + } + return insert_record(rec); +} + +bool VMMemPointerIterator::remove_uncommitted_region(MemPointerRecord* rec) { + assert(rec->is_uncommit_record(), "sanity check"); + VMMemRegion* cur; + cur = (VMMemRegion*)current(); + assert(cur->is_reserved_region() && cur->contains_region(rec), + "Sanity check"); + // thread's native stack is always marked as "committed", ignore + // the "commit" operation for creating stack guard pages + if (FLAGS_TO_MEMORY_TYPE(cur->flags()) == mtThreadStack && + FLAGS_TO_MEMORY_TYPE(rec->flags()) != mtThreadStack) { + return true; + } + + cur = (VMMemRegion*)next(); + while (cur != NULL && cur->is_committed_region()) { + // region already uncommitted, must be due to duplicated record + if (cur->addr() >= rec->addr() + rec->size()) { + break; + } else if (cur->contains_region(rec)) { + // uncommit whole region + if (cur->is_same_region(rec)) { + remove(); + break; + } else if (rec->addr() == cur->addr() || + rec->addr() + rec->size() == cur->addr() + cur->size()) { + // uncommitted from either end of current memory region. + cur->exclude_region(rec->addr(), rec->size()); + break; + } else { // split the committed region and release the middle + address high_addr = cur->addr() + cur->size(); + size_t sz = high_addr - rec->addr(); + cur->exclude_region(rec->addr(), sz); + sz = high_addr - (rec->addr() + rec->size()); + if (MemTracker::track_callsite()) { + MemPointerRecordEx tmp(rec->addr() + rec->size(), cur->flags(), sz, + ((VMMemRegionEx*)cur)->pc()); + return insert_record_after(&tmp); + } else { + MemPointerRecord tmp(rec->addr() + rec->size(), cur->flags(), sz); + return insert_record_after(&tmp); + } + } + } + cur = (VMMemRegion*)next(); + } + + // we may not find committed record due to duplicated records + return true; +} + +bool VMMemPointerIterator::remove_released_region(MemPointerRecord* rec) { + assert(rec->is_deallocation_record(), "Sanity check"); + VMMemRegion* cur = (VMMemRegion*)current(); + assert(cur->is_reserved_region() && cur->contains_region(rec), + "Sanity check"); +#ifdef ASSERT + VMMemRegion* next_reg = (VMMemRegion*)peek_next(); + // should not have any committed memory in this reserved region + assert(next_reg == NULL || !next_reg->is_committed_region(), "Sanity check"); +#endif + if (rec->is_same_region(cur)) { + remove(); + } else if (rec->addr() == cur->addr() || + rec->addr() + rec->size() == cur->addr() + cur->size()) { + // released region is at either end of this region + cur->exclude_region(rec->addr(), rec->size()); + } else { // split the reserved region and release the middle + address high_addr = cur->addr() + cur->size(); + size_t sz = high_addr - rec->addr(); + cur->exclude_region(rec->addr(), sz); + sz = high_addr - rec->addr() - rec->size(); + if (MemTracker::track_callsite()) { + MemPointerRecordEx tmp(rec->addr() + rec->size(), cur->flags(), sz, + ((VMMemRegionEx*)cur)->pc()); + return insert_reserved_region(&tmp); + } else { + MemPointerRecord tmp(rec->addr() + rec->size(), cur->flags(), sz); + return insert_reserved_region(&tmp); + } + } + return true; +} + +bool VMMemPointerIterator::insert_reserved_region(MemPointerRecord* rec) { + // skip all 'commit' records associated with previous reserved region + VMMemRegion* p = (VMMemRegion*)next(); + while (p != NULL && p->is_committed_region() && + p->base() + p->size() < rec->addr()) { + p = (VMMemRegion*)next(); + } + return insert_record(rec); +} + +bool VMMemPointerIterator::split_reserved_region(VMMemRegion* rgn, address new_rgn_addr, size_t new_rgn_size) { + assert(rgn->contains_region(new_rgn_addr, new_rgn_size), "Not fully contained"); + address pc = (MemTracker::track_callsite() ? ((VMMemRegionEx*)rgn)->pc() : NULL); + if (rgn->base() == new_rgn_addr) { // new region is at the beginning of the region + size_t sz = rgn->size() - new_rgn_size; + // the original region becomes 'new' region + rgn->exclude_region(new_rgn_addr + new_rgn_size, sz); + // remaining becomes next region + MemPointerRecordEx next_rgn(new_rgn_addr + new_rgn_size, rgn->flags(), sz, pc); + return insert_reserved_region(&next_rgn); + } else if (rgn->base() + rgn->size() == new_rgn_addr + new_rgn_size) { + rgn->exclude_region(new_rgn_addr, new_rgn_size); + MemPointerRecordEx next_rgn(new_rgn_addr, rgn->flags(), new_rgn_size, pc); + return insert_reserved_region(&next_rgn); + } else { + // the orginal region will be split into three + address rgn_high_addr = rgn->base() + rgn->size(); + // first region + rgn->exclude_region(new_rgn_addr, (rgn_high_addr - new_rgn_addr)); + // the second region is the new region + MemPointerRecordEx new_rgn(new_rgn_addr, rgn->flags(), new_rgn_size, pc); + if (!insert_reserved_region(&new_rgn)) return false; + // the remaining region + MemPointerRecordEx rem_rgn(new_rgn_addr + new_rgn_size, rgn->flags(), + rgn_high_addr - (new_rgn_addr + new_rgn_size), pc); + return insert_reserved_region(&rem_rgn); + } +} + static int sort_in_seq_order(const void* p1, const void* p2) { assert(p1 != NULL && p2 != NULL, "Sanity check"); const MemPointerRecord* mp1 = (MemPointerRecord*)p1; @@ -61,11 +275,11 @@ bool StagingArea::init() { } -MemPointerArrayIteratorImpl StagingArea::virtual_memory_record_walker() { +VMRecordIterator StagingArea::virtual_memory_record_walker() { MemPointerArray* arr = vm_data(); // sort into seq number order arr->sort((FN_SORT)sort_in_seq_order); - return MemPointerArrayIteratorImpl(arr); + return VMRecordIterator(arr); } @@ -135,6 +349,8 @@ bool MemSnapshot::merge(MemRecorder* rec) { return false; } } else { + // locate matched record and/or also position the iterator to proper + // location for this incoming record. p2 = (MemPointerRecord*)malloc_staging_itr.locate(p1->addr()); // we have not seen this memory block, so just add to staging area if (p2 == NULL) { @@ -199,7 +415,7 @@ bool MemSnapshot::promote() { MallocRecordIterator malloc_itr = _staging_area.malloc_record_walker(); bool promoted = false; if (promote_malloc_records(&malloc_itr)) { - MemPointerArrayIteratorImpl vm_itr = _staging_area.virtual_memory_record_walker(); + VMRecordIterator vm_itr = _staging_area.virtual_memory_record_walker(); if (promote_virtual_memory_records(&vm_itr)) { promoted = true; } @@ -218,7 +434,7 @@ bool MemSnapshot::promote_malloc_records(MemPointerArrayIterator* itr) { matched_rec = (MemPointerRecord*)malloc_snapshot_itr.locate(new_rec->addr()); // found matched memory block if (matched_rec != NULL && new_rec->addr() == matched_rec->addr()) { - // snapshot already contains 'lived' records + // snapshot already contains 'live' records assert(matched_rec->is_allocation_record() || matched_rec->is_arena_size_record(), "Sanity check"); // update block states @@ -277,87 +493,60 @@ bool MemSnapshot::promote_malloc_records(MemPointerArrayIterator* itr) { bool MemSnapshot::promote_virtual_memory_records(MemPointerArrayIterator* itr) { VMMemPointerIterator vm_snapshot_itr(_vm_ptrs); MemPointerRecord* new_rec = (MemPointerRecord*)itr->current(); - VMMemRegionEx new_vm_rec; - VMMemRegion* matched_rec; + VMMemRegion* reserved_rec; while (new_rec != NULL) { assert(new_rec->is_vm_pointer(), "Sanity check"); - if (MemTracker::track_callsite()) { - new_vm_rec.init((MemPointerRecordEx*)new_rec); - } else { - new_vm_rec.init(new_rec); - } - matched_rec = (VMMemRegion*)vm_snapshot_itr.locate(new_rec->addr()); - if (matched_rec != NULL && - (matched_rec->contains(&new_vm_rec) || matched_rec->base() == new_vm_rec.base())) { + + // locate a reserved region that contains the specified address, or + // the nearest reserved region has base address just above the specified + // address + reserved_rec = (VMMemRegion*)vm_snapshot_itr.locate(new_rec->addr()); + if (reserved_rec != NULL && reserved_rec->contains_region(new_rec)) { // snapshot can only have 'live' records - assert(matched_rec->is_reserve_record(), "Sanity check"); - if (new_vm_rec.is_reserve_record() && matched_rec->base() == new_vm_rec.base()) { - // resize reserved virtual memory range - // resize has to cover committed area - assert(new_vm_rec.size() >= matched_rec->committed_size(), "Sanity check"); - matched_rec->set_reserved_size(new_vm_rec.size()); - } else if (new_vm_rec.is_commit_record()) { - // commit memory inside reserved memory range - assert(new_vm_rec.committed_size() <= matched_rec->reserved_size(), "Sanity check"); - // thread stacks are marked committed, so we ignore 'commit' record for creating - // stack guard pages - if (FLAGS_TO_MEMORY_TYPE(matched_rec->flags()) != mtThreadStack) { - matched_rec->commit(new_vm_rec.committed_size()); - } - } else if (new_vm_rec.is_uncommit_record()) { - if (FLAGS_TO_MEMORY_TYPE(matched_rec->flags()) == mtThreadStack) { - // ignore 'uncommit' record from removing stack guard pages, uncommit - // thread stack as whole - if (matched_rec->committed_size() == new_vm_rec.committed_size()) { - matched_rec->uncommit(new_vm_rec.committed_size()); + assert(reserved_rec->is_reserved_region(), "Sanity check"); + if (new_rec->is_allocation_record()) { + if (!reserved_rec->is_same_region(new_rec)) { + // only deal with split a bigger reserved region into smaller regions. + // So far, CDS is the only use case. + if (!vm_snapshot_itr.split_reserved_region(reserved_rec, new_rec->addr(), new_rec->size())) { + return false; } - } else { - // uncommit memory inside reserved memory range - assert(new_vm_rec.committed_size() <= matched_rec->committed_size(), - "Sanity check"); - matched_rec->uncommit(new_vm_rec.committed_size()); } - } else if (new_vm_rec.is_type_tagging_record()) { - // tag this virtual memory range to a memory type - // can not re-tag a memory range to different type - assert(FLAGS_TO_MEMORY_TYPE(matched_rec->flags()) == mtNone || - FLAGS_TO_MEMORY_TYPE(matched_rec->flags()) == FLAGS_TO_MEMORY_TYPE(new_vm_rec.flags()), + } else if (new_rec->is_uncommit_record()) { + if (!vm_snapshot_itr.remove_uncommitted_region(new_rec)) { + return false; + } + } else if (new_rec->is_commit_record()) { + // insert or expand existing committed region to cover this + // newly committed region + if (!vm_snapshot_itr.add_committed_region(new_rec)) { + return false; + } + } else if (new_rec->is_deallocation_record()) { + // release part or all memory region + if (!vm_snapshot_itr.remove_released_region(new_rec)) { + return false; + } + } else if (new_rec->is_type_tagging_record()) { + // tag this reserved virtual memory range to a memory type. Can not re-tag a memory range + // to different type. + assert(FLAGS_TO_MEMORY_TYPE(reserved_rec->flags()) == mtNone || + FLAGS_TO_MEMORY_TYPE(reserved_rec->flags()) == FLAGS_TO_MEMORY_TYPE(new_rec->flags()), "Sanity check"); - matched_rec->tag(new_vm_rec.flags()); - } else if (new_vm_rec.is_release_record()) { - // release part or whole memory range - if (new_vm_rec.base() == matched_rec->base() && - new_vm_rec.size() == matched_rec->size()) { - // release whole virtual memory range - assert(matched_rec->committed_size() == 0, "Sanity check"); - vm_snapshot_itr.remove(); - } else { - // partial release - matched_rec->partial_release(new_vm_rec.base(), new_vm_rec.size()); - } - } else { - // multiple reserve/commit on the same virtual memory range - assert((new_vm_rec.is_reserve_record() || new_vm_rec.is_commit_record()) && - (new_vm_rec.base() == matched_rec->base() && new_vm_rec.size() == matched_rec->size()), - "Sanity check"); - matched_rec->tag(new_vm_rec.flags()); - } + reserved_rec->tag(new_rec->flags()); } else { - // no matched record - if (new_vm_rec.is_reserve_record()) { - if (matched_rec == NULL || matched_rec->base() > new_vm_rec.base()) { - if (!vm_snapshot_itr.insert(&new_vm_rec)) { - return false; + ShouldNotReachHere(); } } else { - if (!vm_snapshot_itr.insert_after(&new_vm_rec)) { + /* + * The assertion failure indicates mis-matched virtual memory records. The likely + * scenario is, that some virtual memory operations are not going through os::xxxx_memory() + * api, which have to be tracked manually. (perfMemory is an example). + */ + assert(new_rec->is_allocation_record(), "Sanity check"); + if (!vm_snapshot_itr.add_reserved_region(new_rec)) { return false; } - } - } else { - // throw out obsolete records, which are the commit/uncommit/release/tag records - // on memory regions that are already released. - } } new_rec = (MemPointerRecord*)itr->next(); } @@ -433,5 +622,33 @@ void MemSnapshot::check_staging_data() { cur = (MemPointerRecord*)vm_itr.next(); } } + +void MemSnapshot::dump_all_vm_pointers() { + MemPointerArrayIteratorImpl itr(_vm_ptrs); + VMMemRegion* ptr = (VMMemRegion*)itr.current(); + tty->print_cr("dump virtual memory pointers:"); + while (ptr != NULL) { + if (ptr->is_committed_region()) { + tty->print("\t"); + } + tty->print("[" PTR_FORMAT " - " PTR_FORMAT "] [%x]", ptr->addr(), + (ptr->addr() + ptr->size()), ptr->flags()); + + if (MemTracker::track_callsite()) { + VMMemRegionEx* ex = (VMMemRegionEx*)ptr; + if (ex->pc() != NULL) { + char buf[1024]; + if (os::dll_address_to_function_name(ex->pc(), buf, sizeof(buf), NULL)) { + tty->print_cr("\t%s", buf); + } else { + tty->print_cr(""); + } + } + } + + ptr = (VMMemRegion*)itr.next(); + } + tty->flush(); +} #endif // ASSERT diff --git a/hotspot/src/share/vm/services/memSnapshot.hpp b/hotspot/src/share/vm/services/memSnapshot.hpp index 9ac6e4cf368..dd52f4cd7f7 100644 --- a/hotspot/src/share/vm/services/memSnapshot.hpp +++ b/hotspot/src/share/vm/services/memSnapshot.hpp @@ -111,33 +111,41 @@ class VMMemPointerIterator : public MemPointerIterator { MemPointerIterator(arr) { } - // locate an existing record that contains specified address, or - // the record, where the record with specified address, should - // be inserted. - // virtual memory record array is sorted in address order, so - // binary search is performed + // locate an existing reserved memory region that contains specified address, + // or the reserved region just above this address, where the incoming + // reserved region should be inserted. virtual MemPointer* locate(address addr) { - int index_low = 0; - int index_high = _array->length(); - int index_mid = (index_high + index_low) / 2; - int r = 1; - while (index_low < index_high && (r = compare(index_mid, addr)) != 0) { - if (r > 0) { - index_high = index_mid; - } else { - index_low = index_mid; + reset(); + VMMemRegion* reg = (VMMemRegion*)current(); + while (reg != NULL) { + if (reg->is_reserved_region()) { + if (reg->contains_address(addr) || addr < reg->base()) { + return reg; } - index_mid = (index_high + index_low) / 2; } - if (r == 0) { - // update current location - _pos = index_mid; - return _array->at(index_mid); - } else { + reg = (VMMemRegion*)next(); + } return NULL; } - } + // following methods update virtual memory in the context + // of 'current' position, which is properly positioned by + // callers via locate method. + bool add_reserved_region(MemPointerRecord* rec); + bool add_committed_region(MemPointerRecord* rec); + bool remove_uncommitted_region(MemPointerRecord* rec); + bool remove_released_region(MemPointerRecord* rec); + + // split a reserved region to create a new memory region with specified base and size + bool split_reserved_region(VMMemRegion* rgn, address new_rgn_addr, size_t new_rgn_size); + private: + bool insert_record(MemPointerRecord* rec); + bool insert_record_after(MemPointerRecord* rec); + + bool insert_reserved_region(MemPointerRecord* rec); + + // reset current position + inline void reset() { _pos = 0; } #ifdef ASSERT virtual bool is_dup_pointer(const MemPointer* ptr1, const MemPointer* ptr2) const { @@ -154,32 +162,17 @@ class VMMemPointerIterator : public MemPointerIterator { (p1->flags() & MemPointerRecord::tag_masks) == MemPointerRecord::tag_release; } #endif - // compare if an address falls into a memory region, - // return 0, if the address falls into a memory region at specified index - // return 1, if memory region pointed by specified index is higher than the address - // return -1, if memory region pointed by specified index is lower than the address - int compare(int index, address addr) const { - VMMemRegion* r = (VMMemRegion*)_array->at(index); - assert(r->is_reserve_record(), "Sanity check"); - if (r->addr() > addr) { - return 1; - } else if (r->addr() + r->reserved_size() <= addr) { - return -1; - } else { - return 0; - } - } }; class MallocRecordIterator : public MemPointerArrayIterator { - private: + protected: MemPointerArrayIteratorImpl _itr; public: MallocRecordIterator(MemPointerArray* arr) : _itr(arr) { } - MemPointer* current() const { + virtual MemPointer* current() const { MemPointerRecord* cur = (MemPointerRecord*)_itr.current(); assert(cur == NULL || !cur->is_vm_pointer(), "seek error"); MemPointerRecord* next = (MemPointerRecord*)_itr.peek_next(); @@ -194,7 +187,7 @@ class MallocRecordIterator : public MemPointerArrayIterator { } } - MemPointer* next() { + virtual MemPointer* next() { MemPointerRecord* cur = (MemPointerRecord*)_itr.current(); assert(cur == NULL || !cur->is_vm_pointer(), "Sanity check"); MemPointerRecord* next = (MemPointerRecord*)_itr.next(); @@ -214,6 +207,63 @@ class MallocRecordIterator : public MemPointerArrayIterator { bool insert_after(MemPointer* ptr) { ShouldNotReachHere(); return false; } }; +// collapse duplicated records. Eliminating duplicated records here, is much +// cheaper than during promotion phase. However, it does have limitation - it +// can only eliminate duplicated records within the generation, there are +// still chances seeing duplicated records during promotion. +// We want to use the record with higher sequence number, because it has +// more accurate callsite pc. +class VMRecordIterator : public MallocRecordIterator { + public: + VMRecordIterator(MemPointerArray* arr) : MallocRecordIterator(arr) { + MemPointerRecord* cur = (MemPointerRecord*)_itr.current(); + MemPointerRecord* next = (MemPointerRecord*)_itr.peek_next(); + while (next != NULL) { + assert(cur != NULL, "Sanity check"); + assert(((SeqMemPointerRecord*)next)->seq() > ((SeqMemPointerRecord*)cur)->seq(), + "pre-sort order"); + + if (is_duplicated_record(cur, next)) { + _itr.next(); + next = (MemPointerRecord*)_itr.peek_next(); + } else { + break; + } + } + } + + virtual MemPointer* current() const { + return _itr.current(); + } + + // get next record, but skip the duplicated records + virtual MemPointer* next() { + MemPointerRecord* cur = (MemPointerRecord*)_itr.next(); + MemPointerRecord* next = (MemPointerRecord*)_itr.peek_next(); + while (next != NULL) { + assert(cur != NULL, "Sanity check"); + assert(((SeqMemPointerRecord*)next)->seq() > ((SeqMemPointerRecord*)cur)->seq(), + "pre-sort order"); + + if (is_duplicated_record(cur, next)) { + _itr.next(); + cur = next; + next = (MemPointerRecord*)_itr.peek_next(); + } else { + break; + } + } + return cur; + } + + private: + bool is_duplicated_record(MemPointerRecord* p1, MemPointerRecord* p2) const { + bool ret = (p1->addr() == p2->addr() && p1->size() == p2->size() && p1->flags() == p2->flags()); + assert(!(ret && FLAGS_TO_MEMORY_TYPE(p1->flags()) == mtThreadStack), "dup on stack record"); + return ret; + } +}; + class StagingArea : public _ValueObj { private: MemPointerArray* _malloc_data; @@ -233,7 +283,8 @@ class StagingArea : public _ValueObj { return MallocRecordIterator(malloc_data()); } - MemPointerArrayIteratorImpl virtual_memory_record_walker(); + VMRecordIterator virtual_memory_record_walker(); + bool init(); void clear() { assert(_malloc_data != NULL && _vm_data != NULL, "Just check"); @@ -293,6 +344,8 @@ class MemSnapshot : public CHeapObj { NOT_PRODUCT(void check_staging_data();) NOT_PRODUCT(void check_malloc_pointers();) NOT_PRODUCT(bool has_allocation_record(address addr);) + // dump all virtual memory pointers in snapshot + DEBUG_ONLY( void dump_all_vm_pointers();) private: // copy pointer data from src to dest @@ -302,5 +355,4 @@ class MemSnapshot : public CHeapObj { bool promote_virtual_memory_records(MemPointerArrayIterator* itr); }; - #endif // SHARE_VM_SERVICES_MEM_SNAPSHOT_HPP diff --git a/hotspot/src/share/vm/services/memTracker.cpp b/hotspot/src/share/vm/services/memTracker.cpp index 2af6e10d627..3cec67868ad 100644 --- a/hotspot/src/share/vm/services/memTracker.cpp +++ b/hotspot/src/share/vm/services/memTracker.cpp @@ -364,7 +364,7 @@ void MemTracker::create_memory_record(address addr, MEMFLAGS flags, if (thread != NULL) { if (thread->is_Java_thread() && ((JavaThread*)thread)->is_safepoint_visible()) { - JavaThread* java_thread = static_cast(thread); + JavaThread* java_thread = (JavaThread*)thread; JavaThreadState state = java_thread->thread_state(); if (SafepointSynchronize::safepoint_safe(java_thread, state)) { // JavaThreads that are safepoint safe, can run through safepoint, @@ -472,6 +472,8 @@ void MemTracker::sync() { // it should guarantee that NMT is fully sync-ed. ThreadCritical tc; + SequenceGenerator::reset(); + // walk all JavaThreads to collect recorders SyncThreadRecorderClosure stc; Threads::threads_do(&stc); @@ -484,11 +486,12 @@ void MemTracker::sync() { pending_recorders = _global_recorder; _global_recorder = NULL; } - SequenceGenerator::reset(); // check _worker_thread with lock to avoid racing condition if (_worker_thread != NULL) { _worker_thread->at_sync_point(pending_recorders); } + + assert(SequenceGenerator::peek() == 1, "Should not have memory activities during sync-point"); } } diff --git a/hotspot/src/share/vm/services/memTracker.hpp b/hotspot/src/share/vm/services/memTracker.hpp index 62637d8a8a5..c42f01bf668 100644 --- a/hotspot/src/share/vm/services/memTracker.hpp +++ b/hotspot/src/share/vm/services/memTracker.hpp @@ -113,8 +113,10 @@ class MemTracker : AllStatic { #include "thread_solaris.inline.hpp" #endif -#ifdef _DEBUG - #define DEBUG_CALLER_PC os::get_caller_pc(3) +extern bool NMT_track_callsite; + +#ifdef ASSERT + #define DEBUG_CALLER_PC (NMT_track_callsite ? os::get_caller_pc(2) : 0) #else #define DEBUG_CALLER_PC 0 #endif @@ -261,7 +263,7 @@ class MemTracker : AllStatic { // record a 'malloc' call static inline void record_malloc(address addr, size_t size, MEMFLAGS flags, address pc = 0, Thread* thread = NULL) { - if (NMT_CAN_TRACK(flags)) { + if (is_on() && NMT_CAN_TRACK(flags)) { assert(size > 0, "Sanity check"); create_memory_record(addr, (flags|MemPointerRecord::malloc_tag()), size, pc, thread); } @@ -275,7 +277,7 @@ class MemTracker : AllStatic { // record a 'realloc' call static inline void record_realloc(address old_addr, address new_addr, size_t size, MEMFLAGS flags, address pc = 0, Thread* thread = NULL) { - if (is_on()) { + if (is_on() && NMT_CAN_TRACK(flags)) { assert(size > 0, "Sanity check"); record_free(old_addr, flags, thread); record_malloc(new_addr, size, flags, pc, thread); @@ -317,6 +319,7 @@ class MemTracker : AllStatic { static inline void release_thread_stack(address addr, size_t size, Thread* thr) { if (is_on()) { assert(size > 0 && thr != NULL, "Sanity check"); + assert(!thr->is_Java_thread(), "too early"); create_memory_record(addr, MemPointerRecord::virtual_memory_uncommit_tag() | mtThreadStack, size, DEBUG_CALLER_PC, thr); create_memory_record(addr, MemPointerRecord::virtual_memory_release_tag() | mtThreadStack, @@ -326,11 +329,11 @@ class MemTracker : AllStatic { // record a virtual memory 'commit' call static inline void record_virtual_memory_commit(address addr, size_t size, - address pc = 0, Thread* thread = NULL) { + address pc, Thread* thread = NULL) { if (is_on()) { assert(size > 0, "Sanity check"); create_memory_record(addr, MemPointerRecord::virtual_memory_commit_tag(), - size, DEBUG_CALLER_PC, thread); + size, pc, thread); } } diff --git a/hotspot/src/share/vm/utilities/macros.hpp b/hotspot/src/share/vm/utilities/macros.hpp index e0e853c3c13..64e331d90b0 100644 --- a/hotspot/src/share/vm/utilities/macros.hpp +++ b/hotspot/src/share/vm/utilities/macros.hpp @@ -282,6 +282,22 @@ #define NOT_WIN64(code) code #endif +#if defined(ZERO) +#define ZERO_ONLY(code) code +#define NOT_ZERO(code) +#else +#define ZERO_ONLY(code) +#define NOT_ZERO(code) code +#endif + +#if defined(SHARK) +#define SHARK_ONLY(code) code +#define NOT_SHARK(code) +#else +#define SHARK_ONLY(code) +#define NOT_SHARK(code) code +#endif + #if defined(IA32) || defined(AMD64) #define X86 #define X86_ONLY(code) code diff --git a/hotspot/src/share/vm/utilities/taskqueue.hpp b/hotspot/src/share/vm/utilities/taskqueue.hpp index 4dde2c4bcde..dd98186bb36 100644 --- a/hotspot/src/share/vm/utilities/taskqueue.hpp +++ b/hotspot/src/share/vm/utilities/taskqueue.hpp @@ -496,9 +496,7 @@ public: } } - bool steal_1_random(uint queue_num, int* seed, E& t); bool steal_best_of_2(uint queue_num, int* seed, E& t); - bool steal_best_of_all(uint queue_num, int* seed, E& t); void register_queue(uint i, T* q); @@ -537,46 +535,6 @@ GenericTaskQueueSet::steal(uint queue_num, int* seed, E& t) { return false; } -template bool -GenericTaskQueueSet::steal_best_of_all(uint queue_num, int* seed, E& t) { - if (_n > 2) { - int best_k; - uint best_sz = 0; - for (uint k = 0; k < _n; k++) { - if (k == queue_num) continue; - uint sz = _queues[k]->size(); - if (sz > best_sz) { - best_sz = sz; - best_k = k; - } - } - return best_sz > 0 && _queues[best_k]->pop_global(t); - } else if (_n == 2) { - // Just try the other one. - int k = (queue_num + 1) % 2; - return _queues[k]->pop_global(t); - } else { - assert(_n == 1, "can't be zero."); - return false; - } -} - -template bool -GenericTaskQueueSet::steal_1_random(uint queue_num, int* seed, E& t) { - if (_n > 2) { - uint k = queue_num; - while (k == queue_num) k = TaskQueueSetSuper::randomParkAndMiller(seed) % _n; - return _queues[2]->pop_global(t); - } else if (_n == 2) { - // Just try the other one. - int k = (queue_num + 1) % 2; - return _queues[k]->pop_global(t); - } else { - assert(_n == 1, "can't be zero."); - return false; - } -} - template bool GenericTaskQueueSet::steal_best_of_2(uint queue_num, int* seed, E& t) { if (_n > 2) { diff --git a/hotspot/src/share/vm/utilities/vmError.cpp b/hotspot/src/share/vm/utilities/vmError.cpp index 175848b79de..175fe382fd7 100644 --- a/hotspot/src/share/vm/utilities/vmError.cpp +++ b/hotspot/src/share/vm/utilities/vmError.cpp @@ -453,7 +453,9 @@ void VMError::report(outputStream* st) { JDK_Version::current().to_string(buf, sizeof(buf)); const char* runtime_name = JDK_Version::runtime_name() != NULL ? JDK_Version::runtime_name() : ""; - st->print_cr("# JRE version: %s (%s)", runtime_name, buf); + const char* runtime_version = JDK_Version::runtime_version() != NULL ? + JDK_Version::runtime_version() : ""; + st->print_cr("# JRE version: %s (%s) (build %s)", runtime_name, buf, runtime_version); st->print_cr("# Java VM: %s (%s %s %s %s)", Abstract_VM_Version::vm_name(), Abstract_VM_Version::vm_release(), diff --git a/hotspot/test/compiler/6340864/TestByteVect.java b/hotspot/test/compiler/6340864/TestByteVect.java index ec4ba9fcd0f..5db3687e67c 100644 --- a/hotspot/test/compiler/6340864/TestByteVect.java +++ b/hotspot/test/compiler/6340864/TestByteVect.java @@ -33,7 +33,7 @@ public class TestByteVect { private static final int ARRLEN = 997; private static final int ITERS = 11000; - private static final int ADD_INIT = 0; + private static final int ADD_INIT = 63; private static final int BIT_MASK = 0xB7; private static final int VALUE = 3; private static final int SHIFT = 8; @@ -76,6 +76,7 @@ public class TestByteVect { test_subc(a0, a1); test_subv(a0, a1, (byte)VALUE); test_suba(a0, a1, a2); + test_mulc(a0, a1); test_mulv(a0, a1, (byte)VALUE); test_mula(a0, a1, a2); @@ -88,6 +89,7 @@ public class TestByteVect { test_divc_n(a0, a1); test_divv(a0, a1, (byte)-VALUE); test_diva(a0, a1, a3); + test_andc(a0, a1); test_andv(a0, a1, (byte)BIT_MASK); test_anda(a0, a1, a4); @@ -97,30 +99,49 @@ public class TestByteVect { test_xorc(a0, a1); test_xorv(a0, a1, (byte)BIT_MASK); test_xora(a0, a1, a4); + test_sllc(a0, a1); test_sllv(a0, a1, VALUE); test_srlc(a0, a1); test_srlv(a0, a1, VALUE); test_srac(a0, a1); test_srav(a0, a1, VALUE); + test_sllc_n(a0, a1); test_sllv(a0, a1, -VALUE); test_srlc_n(a0, a1); test_srlv(a0, a1, -VALUE); test_srac_n(a0, a1); test_srav(a0, a1, -VALUE); + test_sllc_o(a0, a1); test_sllv(a0, a1, SHIFT); test_srlc_o(a0, a1); test_srlv(a0, a1, SHIFT); test_srac_o(a0, a1); test_srav(a0, a1, SHIFT); + test_sllc_on(a0, a1); test_sllv(a0, a1, -SHIFT); test_srlc_on(a0, a1); test_srlv(a0, a1, -SHIFT); test_srac_on(a0, a1); test_srav(a0, a1, -SHIFT); + + test_sllc_add(a0, a1); + test_sllv_add(a0, a1, ADD_INIT); + test_srlc_add(a0, a1); + test_srlv_add(a0, a1, ADD_INIT); + test_srac_add(a0, a1); + test_srav_add(a0, a1, ADD_INIT); + + test_sllc_and(a0, a1); + test_sllv_and(a0, a1, BIT_MASK); + test_srlc_and(a0, a1); + test_srlv_and(a0, a1, BIT_MASK); + test_srac_and(a0, a1); + test_srav_and(a0, a1, BIT_MASK); + test_pack2(p2, a1); test_unpack2(a0, p2); test_pack2_swap(p2, a1); @@ -369,6 +390,60 @@ public class TestByteVect { errn += verify("test_srav_on: ", i, a0[i], (byte)((byte)(ADD_INIT+i)>>(-SHIFT))); } + test_sllc_add(a0, a1); + for (int i=0; i>>VALUE)); + } + test_srlv_add(a0, a1, ADD_INIT); + for (int i=0; i>>VALUE)); + } + + test_srac_add(a0, a1); + for (int i=0; i>VALUE)); + } + test_srav_add(a0, a1, ADD_INIT); + for (int i=0; i>VALUE)); + } + + test_sllc_and(a0, a1); + for (int i=0; i>>VALUE)); + } + test_srlv_and(a0, a1, BIT_MASK); + for (int i=0; i>>VALUE)); + } + + test_srac_and(a0, a1); + for (int i=0; i>VALUE)); + } + test_srav_and(a0, a1, BIT_MASK); + for (int i=0; i>VALUE)); + } + test_pack2(p2, a1); for (int i=0; i>>b); } } + static void test_srlc_add(byte[] a0, byte[] a1) { + for (int i = 0; i < a0.length; i+=1) { + a0[i] = (byte)((a1[i] + ADD_INIT)>>>VALUE); + } + } + static void test_srlv_add(byte[] a0, byte[] a1, int b) { + for (int i = 0; i < a0.length; i+=1) { + a0[i] = (byte)((a1[i] + b)>>>VALUE); + } + } + static void test_srlc_and(byte[] a0, byte[] a1) { + for (int i = 0; i < a0.length; i+=1) { + a0[i] = (byte)((a1[i] & BIT_MASK)>>>VALUE); + } + } + static void test_srlv_and(byte[] a0, byte[] a1, int b) { + for (int i = 0; i < a0.length; i+=1) { + a0[i] = (byte)((a1[i] & b)>>>VALUE); + } + } static void test_srac(byte[] a0, byte[] a1) { for (int i = 0; i < a0.length; i+=1) { @@ -1088,6 +1281,26 @@ public class TestByteVect { a0[i] = (byte)(a1[i]>>b); } } + static void test_srac_add(byte[] a0, byte[] a1) { + for (int i = 0; i < a0.length; i+=1) { + a0[i] = (byte)((a1[i] + ADD_INIT)>>VALUE); + } + } + static void test_srav_add(byte[] a0, byte[] a1, int b) { + for (int i = 0; i < a0.length; i+=1) { + a0[i] = (byte)((a1[i] + b)>>VALUE); + } + } + static void test_srac_and(byte[] a0, byte[] a1) { + for (int i = 0; i < a0.length; i+=1) { + a0[i] = (byte)((a1[i] & BIT_MASK)>>VALUE); + } + } + static void test_srav_and(byte[] a0, byte[] a1, int b) { + for (int i = 0; i < a0.length; i+=1) { + a0[i] = (byte)((a1[i] & b)>>VALUE); + } + } static void test_pack2(short[] p2, byte[] a1) { if (p2.length*2 > a1.length) return; diff --git a/hotspot/test/compiler/6340864/TestIntVect.java b/hotspot/test/compiler/6340864/TestIntVect.java index 36e277f731b..5866b34a5af 100644 --- a/hotspot/test/compiler/6340864/TestIntVect.java +++ b/hotspot/test/compiler/6340864/TestIntVect.java @@ -74,6 +74,7 @@ public class TestIntVect { test_subc(a0, a1); test_subv(a0, a1, (int)VALUE); test_suba(a0, a1, a2); + test_mulc(a0, a1); test_mulv(a0, a1, (int)VALUE); test_mula(a0, a1, a2); @@ -86,6 +87,7 @@ public class TestIntVect { test_divc_n(a0, a1); test_divv(a0, a1, (int)-VALUE); test_diva(a0, a1, a3); + test_andc(a0, a1); test_andv(a0, a1, (int)BIT_MASK); test_anda(a0, a1, a4); @@ -95,30 +97,49 @@ public class TestIntVect { test_xorc(a0, a1); test_xorv(a0, a1, (int)BIT_MASK); test_xora(a0, a1, a4); + test_sllc(a0, a1); test_sllv(a0, a1, VALUE); test_srlc(a0, a1); test_srlv(a0, a1, VALUE); test_srac(a0, a1); test_srav(a0, a1, VALUE); + test_sllc_n(a0, a1); test_sllv(a0, a1, -VALUE); test_srlc_n(a0, a1); test_srlv(a0, a1, -VALUE); test_srac_n(a0, a1); test_srav(a0, a1, -VALUE); + test_sllc_o(a0, a1); test_sllv(a0, a1, SHIFT); test_srlc_o(a0, a1); test_srlv(a0, a1, SHIFT); test_srac_o(a0, a1); test_srav(a0, a1, SHIFT); + test_sllc_on(a0, a1); test_sllv(a0, a1, -SHIFT); test_srlc_on(a0, a1); test_srlv(a0, a1, -SHIFT); test_srac_on(a0, a1); test_srav(a0, a1, -SHIFT); + + test_sllc_add(a0, a1); + test_sllv_add(a0, a1, ADD_INIT); + test_srlc_add(a0, a1); + test_srlv_add(a0, a1, ADD_INIT); + test_srac_add(a0, a1); + test_srav_add(a0, a1, ADD_INIT); + + test_sllc_and(a0, a1); + test_sllv_and(a0, a1, BIT_MASK); + test_srlc_and(a0, a1); + test_srlv_and(a0, a1, BIT_MASK); + test_srac_and(a0, a1); + test_srav_and(a0, a1, BIT_MASK); + test_pack2(p2, a1); test_unpack2(a0, p2); test_pack2_swap(p2, a1); @@ -359,6 +380,60 @@ public class TestIntVect { errn += verify("test_srav_on: ", i, a0[i], (int)((int)(ADD_INIT+i)>>(-SHIFT))); } + test_sllc_add(a0, a1); + for (int i=0; i>>VALUE)); + } + test_srlv_add(a0, a1, ADD_INIT); + for (int i=0; i>>VALUE)); + } + + test_srac_add(a0, a1); + for (int i=0; i>VALUE)); + } + test_srav_add(a0, a1, ADD_INIT); + for (int i=0; i>VALUE)); + } + + test_sllc_and(a0, a1); + for (int i=0; i>>VALUE)); + } + test_srlv_and(a0, a1, BIT_MASK); + for (int i=0; i>>VALUE)); + } + + test_srac_and(a0, a1); + for (int i=0; i>VALUE)); + } + test_srav_and(a0, a1, BIT_MASK); + for (int i=0; i>VALUE)); + } + test_pack2(p2, a1); for (int i=0; i>>b); } } + static void test_srlc_add(int[] a0, int[] a1) { + for (int i = 0; i < a0.length; i+=1) { + a0[i] = (int)((a1[i] + ADD_INIT)>>>VALUE); + } + } + static void test_srlv_add(int[] a0, int[] a1, int b) { + for (int i = 0; i < a0.length; i+=1) { + a0[i] = (int)((a1[i] + b)>>>VALUE); + } + } + static void test_srlc_and(int[] a0, int[] a1) { + for (int i = 0; i < a0.length; i+=1) { + a0[i] = (int)((a1[i] & BIT_MASK)>>>VALUE); + } + } + static void test_srlv_and(int[] a0, int[] a1, int b) { + for (int i = 0; i < a0.length; i+=1) { + a0[i] = (int)((a1[i] & b)>>>VALUE); + } + } static void test_srac(int[] a0, int[] a1) { for (int i = 0; i < a0.length; i+=1) { @@ -960,6 +1153,26 @@ public class TestIntVect { a0[i] = (int)(a1[i]>>b); } } + static void test_srac_add(int[] a0, int[] a1) { + for (int i = 0; i < a0.length; i+=1) { + a0[i] = (int)((a1[i] + ADD_INIT)>>VALUE); + } + } + static void test_srav_add(int[] a0, int[] a1, int b) { + for (int i = 0; i < a0.length; i+=1) { + a0[i] = (int)((a1[i] + b)>>VALUE); + } + } + static void test_srac_and(int[] a0, int[] a1) { + for (int i = 0; i < a0.length; i+=1) { + a0[i] = (int)((a1[i] & BIT_MASK)>>VALUE); + } + } + static void test_srav_and(int[] a0, int[] a1, int b) { + for (int i = 0; i < a0.length; i+=1) { + a0[i] = (int)((a1[i] & b)>>VALUE); + } + } static void test_pack2(long[] p2, int[] a1) { if (p2.length*2 > a1.length) return; diff --git a/hotspot/test/compiler/6340864/TestLongVect.java b/hotspot/test/compiler/6340864/TestLongVect.java index 70b41f4b4cb..436a8472df8 100644 --- a/hotspot/test/compiler/6340864/TestLongVect.java +++ b/hotspot/test/compiler/6340864/TestLongVect.java @@ -73,6 +73,7 @@ public class TestLongVect { test_subc(a0, a1); test_subv(a0, a1, (long)VALUE); test_suba(a0, a1, a2); + test_mulc(a0, a1); test_mulv(a0, a1, (long)VALUE); test_mula(a0, a1, a2); @@ -85,6 +86,7 @@ public class TestLongVect { test_divc_n(a0, a1); test_divv(a0, a1, (long)-VALUE); test_diva(a0, a1, a3); + test_andc(a0, a1); test_andv(a0, a1, (long)BIT_MASK); test_anda(a0, a1, a4); @@ -94,30 +96,48 @@ public class TestLongVect { test_xorc(a0, a1); test_xorv(a0, a1, (long)BIT_MASK); test_xora(a0, a1, a4); + test_sllc(a0, a1); test_sllv(a0, a1, VALUE); test_srlc(a0, a1); test_srlv(a0, a1, VALUE); test_srac(a0, a1); test_srav(a0, a1, VALUE); + test_sllc_n(a0, a1); test_sllv(a0, a1, -VALUE); test_srlc_n(a0, a1); test_srlv(a0, a1, -VALUE); test_srac_n(a0, a1); test_srav(a0, a1, -VALUE); + test_sllc_o(a0, a1); test_sllv(a0, a1, SHIFT); test_srlc_o(a0, a1); test_srlv(a0, a1, SHIFT); test_srac_o(a0, a1); test_srav(a0, a1, SHIFT); + test_sllc_on(a0, a1); test_sllv(a0, a1, -SHIFT); test_srlc_on(a0, a1); test_srlv(a0, a1, -SHIFT); test_srac_on(a0, a1); test_srav(a0, a1, -SHIFT); + + test_sllc_add(a0, a1); + test_sllv_add(a0, a1, ADD_INIT); + test_srlc_add(a0, a1); + test_srlv_add(a0, a1, ADD_INIT); + test_srac_add(a0, a1); + test_srav_add(a0, a1, ADD_INIT); + + test_sllc_and(a0, a1); + test_sllv_and(a0, a1, BIT_MASK); + test_srlc_and(a0, a1); + test_srlv_and(a0, a1, BIT_MASK); + test_srac_and(a0, a1); + test_srav_and(a0, a1, BIT_MASK); } // Test and verify results System.out.println("Verification"); @@ -354,6 +374,60 @@ public class TestLongVect { errn += verify("test_srav_on: ", i, a0[i], (long)((long)(ADD_INIT+i)>>(-SHIFT))); } + test_sllc_add(a0, a1); + for (int i=0; i>>VALUE)); + } + test_srlv_add(a0, a1, ADD_INIT); + for (int i=0; i>>VALUE)); + } + + test_srac_add(a0, a1); + for (int i=0; i>VALUE)); + } + test_srav_add(a0, a1, ADD_INIT); + for (int i=0; i>VALUE)); + } + + test_sllc_and(a0, a1); + for (int i=0; i>>VALUE)); + } + test_srlv_and(a0, a1, BIT_MASK); + for (int i=0; i>>VALUE)); + } + + test_srac_and(a0, a1); + for (int i=0; i>VALUE)); + } + test_srav_and(a0, a1, BIT_MASK); + for (int i=0; i>VALUE)); + } + } if (errn > 0) @@ -696,6 +770,84 @@ public class TestLongVect { end = System.currentTimeMillis(); System.out.println("test_srav_on: " + (end - start)); + start = System.currentTimeMillis(); + for (int i=0; i>>b); } } + static void test_srlc_add(long[] a0, long[] a1) { + for (int i = 0; i < a0.length; i+=1) { + a0[i] = (long)((a1[i] + ADD_INIT)>>>VALUE); + } + } + static void test_srlv_add(long[] a0, long[] a1, long b) { + for (int i = 0; i < a0.length; i+=1) { + a0[i] = (long)((a1[i] + b)>>>VALUE); + } + } + static void test_srlc_and(long[] a0, long[] a1) { + for (int i = 0; i < a0.length; i+=1) { + a0[i] = (long)((a1[i] & BIT_MASK)>>>VALUE); + } + } + static void test_srlv_and(long[] a0, long[] a1, long b) { + for (int i = 0; i < a0.length; i+=1) { + a0[i] = (long)((a1[i] & b)>>>VALUE); + } + } static void test_srac(long[] a0, long[] a1) { for (int i = 0; i < a0.length; i+=1) { @@ -906,6 +1098,26 @@ public class TestLongVect { a0[i] = (long)(a1[i]>>b); } } + static void test_srac_add(long[] a0, long[] a1) { + for (int i = 0; i < a0.length; i+=1) { + a0[i] = (long)((a1[i] + ADD_INIT)>>VALUE); + } + } + static void test_srav_add(long[] a0, long[] a1, long b) { + for (int i = 0; i < a0.length; i+=1) { + a0[i] = (long)((a1[i] + b)>>VALUE); + } + } + static void test_srac_and(long[] a0, long[] a1) { + for (int i = 0; i < a0.length; i+=1) { + a0[i] = (long)((a1[i] & BIT_MASK)>>VALUE); + } + } + static void test_srav_and(long[] a0, long[] a1, long b) { + for (int i = 0; i < a0.length; i+=1) { + a0[i] = (long)((a1[i] & b)>>VALUE); + } + } static int verify(String text, int i, long elem, long val) { if (elem != val) { diff --git a/hotspot/test/compiler/6340864/TestShortVect.java b/hotspot/test/compiler/6340864/TestShortVect.java index a688e0de0e0..9f59c8f22cd 100644 --- a/hotspot/test/compiler/6340864/TestShortVect.java +++ b/hotspot/test/compiler/6340864/TestShortVect.java @@ -75,6 +75,7 @@ public class TestShortVect { test_subc(a0, a1); test_subv(a0, a1, (short)VALUE); test_suba(a0, a1, a2); + test_mulc(a0, a1); test_mulv(a0, a1, (short)VALUE); test_mula(a0, a1, a2); @@ -87,6 +88,7 @@ public class TestShortVect { test_divc_n(a0, a1); test_divv(a0, a1, (short)-VALUE); test_diva(a0, a1, a3); + test_andc(a0, a1); test_andv(a0, a1, (short)BIT_MASK); test_anda(a0, a1, a4); @@ -96,30 +98,49 @@ public class TestShortVect { test_xorc(a0, a1); test_xorv(a0, a1, (short)BIT_MASK); test_xora(a0, a1, a4); + test_sllc(a0, a1); test_sllv(a0, a1, VALUE); test_srlc(a0, a1); test_srlv(a0, a1, VALUE); test_srac(a0, a1); test_srav(a0, a1, VALUE); + test_sllc_n(a0, a1); test_sllv(a0, a1, -VALUE); test_srlc_n(a0, a1); test_srlv(a0, a1, -VALUE); test_srac_n(a0, a1); test_srav(a0, a1, -VALUE); + test_sllc_o(a0, a1); test_sllv(a0, a1, SHIFT); test_srlc_o(a0, a1); test_srlv(a0, a1, SHIFT); test_srac_o(a0, a1); test_srav(a0, a1, SHIFT); + test_sllc_on(a0, a1); test_sllv(a0, a1, -SHIFT); test_srlc_on(a0, a1); test_srlv(a0, a1, -SHIFT); test_srac_on(a0, a1); test_srav(a0, a1, -SHIFT); + + test_sllc_add(a0, a1); + test_sllv_add(a0, a1, ADD_INIT); + test_srlc_add(a0, a1); + test_srlv_add(a0, a1, ADD_INIT); + test_srac_add(a0, a1); + test_srav_add(a0, a1, ADD_INIT); + + test_sllc_and(a0, a1); + test_sllv_and(a0, a1, BIT_MASK); + test_srlc_and(a0, a1); + test_srlv_and(a0, a1, BIT_MASK); + test_srac_and(a0, a1); + test_srav_and(a0, a1, BIT_MASK); + test_pack2(p2, a1); test_unpack2(a0, p2); test_pack2_swap(p2, a1); @@ -364,6 +385,60 @@ public class TestShortVect { errn += verify("test_srav_on: ", i, a0[i], (short)((short)(ADD_INIT+i)>>(-SHIFT))); } + test_sllc_add(a0, a1); + for (int i=0; i>>VALUE)); + } + test_srlv_add(a0, a1, ADD_INIT); + for (int i=0; i>>VALUE)); + } + + test_srac_add(a0, a1); + for (int i=0; i>VALUE)); + } + test_srav_add(a0, a1, ADD_INIT); + for (int i=0; i>VALUE)); + } + + test_sllc_and(a0, a1); + for (int i=0; i>>VALUE)); + } + test_srlv_and(a0, a1, BIT_MASK); + for (int i=0; i>>VALUE)); + } + + test_srac_and(a0, a1); + for (int i=0; i>VALUE)); + } + test_srav_and(a0, a1, BIT_MASK); + for (int i=0; i>VALUE)); + } + test_pack2(p2, a1); for (int i=0; i>>b); } } + static void test_srlc_add(short[] a0, short[] a1) { + for (int i = 0; i < a0.length; i+=1) { + a0[i] = (short)((a1[i] + ADD_INIT)>>>VALUE); + } + } + static void test_srlv_add(short[] a0, short[] a1, int b) { + for (int i = 0; i < a0.length; i+=1) { + a0[i] = (short)((a1[i] + b)>>>VALUE); + } + } + static void test_srlc_and(short[] a0, short[] a1) { + for (int i = 0; i < a0.length; i+=1) { + a0[i] = (short)((a1[i] & BIT_MASK)>>>VALUE); + } + } + static void test_srlv_and(short[] a0, short[] a1, int b) { + for (int i = 0; i < a0.length; i+=1) { + a0[i] = (short)((a1[i] & b)>>>VALUE); + } + } static void test_srac(short[] a0, short[] a1) { for (int i = 0; i < a0.length; i+=1) { @@ -1020,6 +1213,26 @@ public class TestShortVect { a0[i] = (short)(a1[i]>>b); } } + static void test_srac_add(short[] a0, short[] a1) { + for (int i = 0; i < a0.length; i+=1) { + a0[i] = (short)((a1[i] + ADD_INIT)>>VALUE); + } + } + static void test_srav_add(short[] a0, short[] a1, int b) { + for (int i = 0; i < a0.length; i+=1) { + a0[i] = (short)((a1[i] + b)>>VALUE); + } + } + static void test_srac_and(short[] a0, short[] a1) { + for (int i = 0; i < a0.length; i+=1) { + a0[i] = (short)((a1[i] & BIT_MASK)>>VALUE); + } + } + static void test_srav_and(short[] a0, short[] a1, int b) { + for (int i = 0; i < a0.length; i+=1) { + a0[i] = (short)((a1[i] & b)>>VALUE); + } + } static void test_pack2(int[] p2, short[] a1) { if (p2.length*2 > a1.length) return; diff --git a/hotspot/test/compiler/7184394/TestAESBase.java b/hotspot/test/compiler/7184394/TestAESBase.java new file mode 100644 index 00000000000..ad6c835cc84 --- /dev/null +++ b/hotspot/test/compiler/7184394/TestAESBase.java @@ -0,0 +1,154 @@ +/* + * Copyright (c) 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. + * + */ + +/** + * @author Tom Deneau + */ + +import javax.crypto.Cipher; +import javax.crypto.KeyGenerator; +import javax.crypto.SecretKey; +import javax.crypto.spec.IvParameterSpec; +import javax.crypto.spec.SecretKeySpec; +import java.security.AlgorithmParameters; + +import java.util.Random; +import java.util.Arrays; + +abstract public class TestAESBase { + int msgSize = Integer.getInteger("msgSize", 646); + boolean checkOutput = Boolean.getBoolean("checkOutput"); + boolean noReinit = Boolean.getBoolean("noReinit"); + int keySize = Integer.getInteger("keySize", 128); + String algorithm = System.getProperty("algorithm", "AES"); + String mode = System.getProperty("mode", "CBC"); + byte[] input; + byte[] encode; + byte[] expectedEncode; + byte[] decode; + byte[] expectedDecode; + Random random = new Random(0); + Cipher cipher; + Cipher dCipher; + String paddingStr = "PKCS5Padding"; + AlgorithmParameters algParams; + SecretKey key; + int ivLen; + + static int numThreads = 0; + int threadId; + static synchronized int getThreadId() { + int id = numThreads; + numThreads++; + return id; + } + + abstract public void run(); + + public void prepare() { + try { + System.out.println("\nmsgSize=" + msgSize + ", key size=" + keySize + ", reInit=" + !noReinit + ", checkOutput=" + checkOutput); + + int keyLenBytes = (keySize == 0 ? 16 : keySize/8); + byte keyBytes[] = new byte[keyLenBytes]; + if (keySize == 128) + keyBytes = new byte[] {-8, -7, -6, -5, -4, -3, -2, -1, 0, 1, 2, 3, 4, 5, 6, 7}; + else + random.nextBytes(keyBytes); + + key = new SecretKeySpec(keyBytes, algorithm); + if (threadId == 0) { + System.out.println("Algorithm: " + key.getAlgorithm() + "(" + + key.getEncoded().length * 8 + "bit)"); + } + input = new byte[msgSize]; + for (int i=0; i 0 ? Integer.valueOf(args[0]) : 1000000); + System.out.println(iters + " iterations"); + TestAESEncode etest = new TestAESEncode(); + etest.prepare(); + long start = System.nanoTime(); + for (int i=0; i> 16; } + static int loadUS_signExt_1 (char[] ca) { return (ca[0] << 16) >> 16; } + + static long loadB2L_mask8 (byte[] ba) { return ba[0] & 0x55; } + static long loadB2L_mask8_1 (byte[] ba) { return ba[0] & 0x55; } + + public static void main(String[] args) { + for (int i = Byte.MIN_VALUE; i < Byte.MAX_VALUE; i++) { + byte[] ba = new byte[] { (byte) i}; + + { long v1 = loadB2L_mask8(ba); + long v2 = loadB2L_mask8_1(ba); + if (v1 != v2) + throw new InternalError(String.format("loadB2L_mask8 failed: %x != %x", v1, v2)); } + } + + for (int i = Short.MIN_VALUE; i < Short.MAX_VALUE; i++) { + short[] sa = new short[] { (short)i }; + char[] ca = new char[] { (char)i }; + + { long v1 = loadS2LmaskFF(sa); + long v2 = loadS2LmaskFF_1(sa); + if (v1 != v2) + throw new InternalError(String.format("loadS2LmaskFF failed: %x != %x", v1, v2)); } + + { long v1 = loadS2Lmask16(sa); + long v2 = loadS2Lmask16_1(sa); + if (v1 != v2) + throw new InternalError(String.format("loadS2Lmask16 failed: %x != %x", v1, v2)); } + + { long v1 = loadS2Lmask13(sa); + long v2 = loadS2Lmask13_1(sa); + if (v1 != v2) + throw new InternalError(String.format("loadS2Lmask13 failed: %x != %x", v1, v2)); } + + { int v1 = loadUS_signExt(ca); + int v2 = loadUS_signExt_1(ca); + if (v1 != v2) + throw new InternalError(String.format("loadUS_signExt failed: %x != %x", v1, v2)); } + } + + System.out.println("TEST PASSED."); + } +} diff --git a/hotspot/test/compiler/8001183/TestCharVect.java b/hotspot/test/compiler/8001183/TestCharVect.java new file mode 100644 index 00000000000..a6ff1e2b961 --- /dev/null +++ b/hotspot/test/compiler/8001183/TestCharVect.java @@ -0,0 +1,1332 @@ +/* + * Copyright (c) 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 8001183 + * @summary incorrect results of char vectors right shift operaiton + * + * @run main/othervm/timeout=400 -Xbatch -Xmx64m TestCharVect + */ + +public class TestCharVect { + private static final int ARRLEN = 997; + private static final int ITERS = 11000; + private static final int ADD_INIT = Character.MAX_VALUE-500; + private static final int BIT_MASK = 0xB731; + private static final int VALUE = 7; + private static final int SHIFT = 16; + + public static void main(String args[]) { + System.out.println("Testing Char vectors"); + int errn = test(); + if (errn > 0) { + System.err.println("FAILED: " + errn + " errors"); + System.exit(97); + } + System.out.println("PASSED"); + } + + static int test() { + char[] a0 = new char[ARRLEN]; + char[] a1 = new char[ARRLEN]; + short[] a2 = new short[ARRLEN]; + short[] a3 = new short[ARRLEN]; + short[] a4 = new short[ARRLEN]; + int[] p2 = new int[ARRLEN/2]; + long[] p4 = new long[ARRLEN/4]; + // Initialize + int gold_sum = 0; + for (int i=0; i>>VALUE)); + } + test_srlv(a0, a1, VALUE); + for (int i=0; i>>VALUE)); + } + + test_srac(a0, a1); + for (int i=0; i>VALUE)); + } + test_srav(a0, a1, VALUE); + for (int i=0; i>VALUE)); + } + + test_sllc_n(a0, a1); + for (int i=0; i>>(-VALUE))); + } + test_srlv(a0, a1, -VALUE); + for (int i=0; i>>(-VALUE))); + } + + test_srac_n(a0, a1); + for (int i=0; i>(-VALUE))); + } + test_srav(a0, a1, -VALUE); + for (int i=0; i>(-VALUE))); + } + + test_sllc_o(a0, a1); + for (int i=0; i>>SHIFT)); + } + test_srlv(a0, a1, SHIFT); + for (int i=0; i>>SHIFT)); + } + + test_srac_o(a0, a1); + for (int i=0; i>SHIFT)); + } + test_srav(a0, a1, SHIFT); + for (int i=0; i>SHIFT)); + } + + test_sllc_on(a0, a1); + for (int i=0; i>>(-SHIFT))); + } + test_srlv(a0, a1, -SHIFT); + for (int i=0; i>>(-SHIFT))); + } + + test_srac_on(a0, a1); + for (int i=0; i>(-SHIFT))); + } + test_srav(a0, a1, -SHIFT); + for (int i=0; i>(-SHIFT))); + } + + test_sllc_add(a0, a1); + for (int i=0; i>>VALUE)); + } + test_srlv_add(a0, a1, ADD_INIT); + for (int i=0; i>>VALUE)); + } + + test_srac_add(a0, a1); + for (int i=0; i>VALUE)); + } + test_srav_add(a0, a1, ADD_INIT); + for (int i=0; i>VALUE)); + } + + test_sllc_and(a0, a1); + for (int i=0; i>>VALUE)); + } + test_srlv_and(a0, a1, BIT_MASK); + for (int i=0; i>>VALUE)); + } + + test_srac_and(a0, a1); + for (int i=0; i>VALUE)); + } + test_srav_and(a0, a1, BIT_MASK); + for (int i=0; i>VALUE)); + } + + test_pack2(p2, a1); + for (int i=0; i 0) + return errn; + + System.out.println("Time"); + long start, end; + + start = System.currentTimeMillis(); + for (int i=0; i>>VALUE); + } + } + static void test_srlc_n(char[] a0, char[] a1) { + for (int i = 0; i < a0.length; i+=1) { + a0[i] = (char)(a1[i]>>>(-VALUE)); + } + } + static void test_srlc_o(char[] a0, char[] a1) { + for (int i = 0; i < a0.length; i+=1) { + a0[i] = (char)(a1[i]>>>SHIFT); + } + } + static void test_srlc_on(char[] a0, char[] a1) { + for (int i = 0; i < a0.length; i+=1) { + a0[i] = (char)(a1[i]>>>(-SHIFT)); + } + } + static void test_srlv(char[] a0, char[] a1, int b) { + for (int i = 0; i < a0.length; i+=1) { + a0[i] = (char)(a1[i]>>>b); + } + } + static void test_srlc_add(char[] a0, char[] a1) { + for (int i = 0; i < a0.length; i+=1) { + a0[i] = (char)((a1[i] + ADD_INIT)>>>VALUE); + } + } + static void test_srlv_add(char[] a0, char[] a1, int b) { + for (int i = 0; i < a0.length; i+=1) { + a0[i] = (char)((a1[i] + b)>>>VALUE); + } + } + static void test_srlc_and(char[] a0, char[] a1) { + for (int i = 0; i < a0.length; i+=1) { + a0[i] = (char)((a1[i] & BIT_MASK)>>>VALUE); + } + } + static void test_srlv_and(char[] a0, char[] a1, int b) { + for (int i = 0; i < a0.length; i+=1) { + a0[i] = (char)((a1[i] & b)>>>VALUE); + } + } + + static void test_srac(char[] a0, char[] a1) { + for (int i = 0; i < a0.length; i+=1) { + a0[i] = (char)(a1[i]>>VALUE); + } + } + static void test_srac_n(char[] a0, char[] a1) { + for (int i = 0; i < a0.length; i+=1) { + a0[i] = (char)(a1[i]>>(-VALUE)); + } + } + static void test_srac_o(char[] a0, char[] a1) { + for (int i = 0; i < a0.length; i+=1) { + a0[i] = (char)(a1[i]>>SHIFT); + } + } + static void test_srac_on(char[] a0, char[] a1) { + for (int i = 0; i < a0.length; i+=1) { + a0[i] = (char)(a1[i]>>(-SHIFT)); + } + } + static void test_srav(char[] a0, char[] a1, int b) { + for (int i = 0; i < a0.length; i+=1) { + a0[i] = (char)(a1[i]>>b); + } + } + static void test_srac_add(char[] a0, char[] a1) { + for (int i = 0; i < a0.length; i+=1) { + a0[i] = (char)((a1[i] + ADD_INIT)>>VALUE); + } + } + static void test_srav_add(char[] a0, char[] a1, int b) { + for (int i = 0; i < a0.length; i+=1) { + a0[i] = (char)((a1[i] + b)>>VALUE); + } + } + static void test_srac_and(char[] a0, char[] a1) { + for (int i = 0; i < a0.length; i+=1) { + a0[i] = (char)((a1[i] & BIT_MASK)>>VALUE); + } + } + static void test_srav_and(char[] a0, char[] a1, int b) { + for (int i = 0; i < a0.length; i+=1) { + a0[i] = (char)((a1[i] & b)>>VALUE); + } + } + + static void test_pack2(int[] p2, char[] a1) { + if (p2.length*2 > a1.length) return; + for (int i = 0; i < p2.length; i+=1) { + int l0 = (int)a1[i*2+0]; + int l1 = (int)a1[i*2+1]; + p2[i] = (l1 << 16) | (l0 & 0xFFFF); + } + } + static void test_unpack2(char[] a0, int[] p2) { + if (p2.length*2 > a0.length) return; + for (int i = 0; i < p2.length; i+=1) { + int l = p2[i]; + a0[i*2+0] = (char)(l & 0xFFFF); + a0[i*2+1] = (char)(l >> 16); + } + } + static void test_pack2_swap(int[] p2, char[] a1) { + if (p2.length*2 > a1.length) return; + for (int i = 0; i < p2.length; i+=1) { + int l0 = (int)a1[i*2+0]; + int l1 = (int)a1[i*2+1]; + p2[i] = (l0 << 16) | (l1 & 0xFFFF); + } + } + static void test_unpack2_swap(char[] a0, int[] p2) { + if (p2.length*2 > a0.length) return; + for (int i = 0; i < p2.length; i+=1) { + int l = p2[i]; + a0[i*2+0] = (char)(l >> 16); + a0[i*2+1] = (char)(l & 0xFFFF); + } + } + + static void test_pack4(long[] p4, char[] a1) { + if (p4.length*4 > a1.length) return; + for (int i = 0; i < p4.length; i+=1) { + long l0 = (long)a1[i*4+0]; + long l1 = (long)a1[i*4+1]; + long l2 = (long)a1[i*4+2]; + long l3 = (long)a1[i*4+3]; + p4[i] = (l0 & 0xFFFFl) | + ((l1 & 0xFFFFl) << 16) | + ((l2 & 0xFFFFl) << 32) | + ((l3 & 0xFFFFl) << 48); + } + } + static void test_unpack4(char[] a0, long[] p4) { + if (p4.length*4 > a0.length) return; + for (int i = 0; i < p4.length; i+=1) { + long l = p4[i]; + a0[i*4+0] = (char)(l & 0xFFFFl); + a0[i*4+1] = (char)(l >> 16); + a0[i*4+2] = (char)(l >> 32); + a0[i*4+3] = (char)(l >> 48); + } + } + static void test_pack4_swap(long[] p4, char[] a1) { + if (p4.length*4 > a1.length) return; + for (int i = 0; i < p4.length; i+=1) { + long l0 = (long)a1[i*4+0]; + long l1 = (long)a1[i*4+1]; + long l2 = (long)a1[i*4+2]; + long l3 = (long)a1[i*4+3]; + p4[i] = (l3 & 0xFFFFl) | + ((l2 & 0xFFFFl) << 16) | + ((l1 & 0xFFFFl) << 32) | + ((l0 & 0xFFFFl) << 48); + } + } + static void test_unpack4_swap(char[] a0, long[] p4) { + if (p4.length*4 > a0.length) return; + for (int i = 0; i < p4.length; i+=1) { + long l = p4[i]; + a0[i*4+0] = (char)(l >> 48); + a0[i*4+1] = (char)(l >> 32); + a0[i*4+2] = (char)(l >> 16); + a0[i*4+3] = (char)(l & 0xFFFFl); + } + } + + static int verify(String text, int i, int elem, int val) { + if (elem != val) { + System.err.println(text + "[" + i + "] = " + elem + " != " + val); + return 1; + } + return 0; + } + + static int verify(String text, int i, long elem, long val) { + if (elem != val) { + System.err.println(text + "[" + i + "] = " + Long.toHexString(elem) + " != " + Long.toHexString(val)); + return 1; + } + return 0; + } +} diff --git a/hotspot/test/runtime/7158800/BadUtf8.java b/hotspot/test/runtime/7158800/BadUtf8.java deleted file mode 100644 index 8b79762a365..00000000000 --- a/hotspot/test/runtime/7158800/BadUtf8.java +++ /dev/null @@ -1,1254 +0,0 @@ -/* - * Copyright (c) 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 7158800 - * @summary Test that 1200 symbols that hash to the same value triggers - * the symbol table alternate hashing mechanism. There isn't actually a - * way to verify this. - */ -// -// Generate large number of strings that hash to the same value -// to slow down symbol table lookup. - -import java.io.BufferedOutputStream; -import java.io.FileOutputStream; - -public class BadUtf8 { -static String[] strings = { - "EOcLKvbddZyPxYpb", - "DncLKvbdPxmAGrqj", - "DoCjjvbdpxoIHQdY", - "EPCkKvbdqYoHfqEY", - "DnbkKvbdezvYdiUX", - "DnbjjvbdeEoRbXCj", - "EObkKvbdbsCkUEKB", - "EOcLKvbdnUtyjiqf", - "DncLKvbdRWnDcMHc", - "DoCkKvbdrSUkOLAm", - "DncLKvbdfNFwGmJk", - "EPDLKvbdvAdYroFI", - "DoDLKvbdiGibyViu", - "DncLKvbdYqNEhmFR", - "DoCkKvbdEARhlzXX", - "DncLKvbdSZjHsCvA", - "DncKjvbdqTsgRqkU", - "DnbjjvbdqAiFAXHd", - "EPDKjvbdGcjvJaij", - "DnbkKvbdwtldpxkn", - "DoDKjvbdYkrETnMN", - "EPCjjvbdbBWEfQQX", - "EPCjjvbduMXwAtBX", - "DncLKvbdbsCkTcia", - "DoCjjvbdczYpYZRC", - "EOcKjvbdFeiqmhsq", - "DoCkKvbdKCicQibx", - "EOcKjvbdZLrEUOLm", - "DoCjjvbdaNKbStmH", - "DoDKjvbdJbjDQjDY", - "EPCkKvbdemFwGmKL", - "EPDKjvbdZQleImEq", - "DncKjvbdZjShPfbG", - "DnbjjvbdqYnhHREY", - "DoCkKvbdaRfDIUGL", - "DoDKjvbdLrWlyuQz", - "DnbjjvbdZisHofaf", - "EObjjvbdhtydvrUb", - "DnbjjvbdRotHKGEX", - "EObjjvbdNeEThhkE", - "EPCjjvbdZtJJZESn", - "DoDKjvbdnPyxvLYb", - "EPDKjvbdeEoRbWbj", - "EOcLKvbdFxttaEXb", - "EObjjvbddwystRez", - "EPCjjvbdJpzEnenF", - "DnbkKvbdTppntuIN", - "EPCkKvbdTukpKUBR", - "DnbkKvbdhlFEOUcZ", - "EObkKvbdlhdUQuRa", - "DnbjjvbdkClKqHUg", - "EOcKjvbdqTtGqqkU", - "DncKjvbdtkwvaUBX", - "DoDKjvbdsQWOjCuf", - "DncLKvbdEKIJuwjA", - "DncKjvbdGLErcIMu", - "EOcLKvbdNPwpumfs", - "EObkKvbdnVUzLJrG", - "DoCkKvbdcTDKsdKB", - "DncKjvbdKRZdoFme", - "EOcLKvbdemFvgNKL", - "EPCkKvbdznopdblY", - "EPDLKvbdOYPVzdOU", - "DnbjjvbdsZlPsAhO", - "DoDLKvbdKCjDRKDY", - "DoCkKvbdhuZeXSVC", - "EPDKjvbdOStVgEtp", - "DncLKvbdvwMAvBWV", - "EPDKjvbdBcoaWJlf", - "EOcKjvbdZxdKODMS", - "DoCjjvbdbsCkTcjB", - "EOcLKvbdwWlAuaWV", - "DnbjjvbdFejRnJUR", - "DnbjjvbdmIdTqVSB", - "DnbkKvbdqBIeAWhE", - "DncKjvbdrMzJyMIJ", - "DoCkKvbdZGvdAOsJ", - "DncLKvbdjggLfFnL", - "DoCjjvbdYqNFJMdq", - "DoCkKvbdqZPHfqDx", - "DncLKvbdOEdThiLE", - "DoCkKvbdZirgpGaf", - "EPDLKvbdziuQPdSt", - "EObkKvbdKQyeOenF", - "DoDLKvbduaDySndh", - "DoCjjvbdVUNUGLvK", - "DncKjvbdAMhYrvzY", - "DnbkKvbdnQZxvKxb", - "EPCjjvbdBhjakJFj", - "DncLKvbdmfeYNNfy", - "DoDLKvbdjlbLydfo", - "DoDLKvbdpyPIGpcx", - "EOcLKvbdnVUzLJqf", - "DoCjjvbdmJETqVSB", - "DoDLKvbdJTZAsMxM", - "DoCkKvbdnQZxvLZC", - "DoDKjvbdACqwizJQ", - "DncKjvbdvBEZSoFI", - "DncKjvbdGckVjCJj", - "DncLKvbdiMFENtcZ", - "Dnbjjvbdjuvmcaww", - "DnbkKvbdZyEKNblS", - "DoCjjvbduMYXBUBX", - "DnbjjvbdFWYopNJe", - "DoDKjvbdelfXGljL", - "DnbjjvbdakLenmcA", - "EPDKjvbdfILWRmpg", - "EObjjvbdSLYeuHLT", - "DoCjjvbdMfbolotk", - "EPDLKvbdrRuKnKaN", - "EOcKjvbdyzdnRhIh", - "DoDLKvbdGAoRZJzm", - "DoCjjvbdhlFDnUcZ", - "EPDLKvbdmpZyVkYb", - "DncKjvbdTpqPUuIN", - "DncLKvbdHDjvJaij", - "EPDLKvbdYlRcsmkm", - "EPDLKvbdvlvAMdFN", - "DncKjvbdIsZArmYM", - "EOcLKvbdegjuqnQg", - "EOcLKvbdZQmFJNFR", - "DoCjjvbdZxdJmcMS", - "EPCkKvbdlZTSTYgU", - "DoDKjvbdqceJPnWB", - "DncLKvbdVgwuxGxz", - "DncKjvbdDnbkLXDE", - "EPDLKvbdatbHYKsh", - "DncKjvbdEzsqFLbi", - "EPDLKvbdnVVZkKRf", - "EOcKjvbdKeegbBQu", - "EPCkKvbdKfGHaaRV", - "EPDKjvbdmIctRVRa", - "EPCjjvbdRMxBxnUz", - "DnbjjvbdJYTbILpp", - "EPCkKvbdTAEiHbPE", - "EOcLKvbdfelZnGgA", - "DoCjjvbdOStWGeUp", - "EOcLKvbdemGXHNJk", - "DoDKjvbdYTMAmUOx", - "EPCkKvbdpyOhGpcx", - "EPCkKvbdAMgxsWzY", - "DnbjjvbdYkrETnMN", - "EPDLKvbdUQqPUtgm", - "DncKjvbdehKurNqH", - "DoCjjvbdZMSETnLm", - "DoDKjvbdIHGyyXwg", - "EObjjvbdXGYzUAPT", - "DoCjjvbdhbPCeWqR", - "DoCkKvbdKNADzGuB", - "DnbjjvbdFeirOJTq", - "DncLKvbdaRecHtFk", - "DnbkKvbdzoPpeClY", - "EObkKvbdZRMeJMeR", - "DnbjjvbdYfvdAPSi", - "DncLKvbdJcKCqJcY", - "EOcLKvbdqvokbhyR", - "DoDLKvbdrRuLNjaN", - "DoCjjvbdTlWPBWOi", - "DoCkKvbdjvWnEBxX", - "DoDLKvbdTkunaVoJ", - "DoCkKvbdQZNAHTSK", - "EObjjvbdqwPkbhyR", - "EOcLKvbdNHDPlpUk", - "DncLKvbdIHHZxxYH", - "DncLKvbdtkxXAtAw", - "DncLKvbdSCEFMJZL", - "DnbjjvbdZQmEhldq", - "DoCjjvbdNGbolotk", - "DnbjjvbdnCKWwnmu", - "DncLKvbdzHZMANEw", - "DoDKjvbdmttykJrG", - "DnbkKvbdlrZUzSci", - "EPDKjvbdSKyGVHKs", - "DoCjjvbdKVuGEFGi", - "EPCjjvbdCIkBkIej", - "DncLKvbdzHZMAMeX", - "DnbkKvbdaSFbgsek", - "DncLKvbdHDjujBij", - "DoDKjvbdGZVUaDwb", - "DnbjjvbdZnnJFEzK", - "DoCkKvbdtcDUwWOo", - "DoCkKvbdlBMoNALA", - "EOcKjvbdNsUWHFUp", - "DoDLKvbdVUNUFlVj", - "DnbkKvbdhkdcnUcZ", - "DncLKvbdLiBkqYAS", - "EOcKjvbdzoPpdcLx", - "EPDKjvbdijGIJmXr", - "EOcKjvbdZisHofaf", - "DoDLKvbdeOdrkUUS", - "DoDLKvbdnPyxvKxb", - "EPDKjvbdIxUBhMRQ", - "DncLKvbdlhctRUqa", - "DoDLKvbdmgFXlnGy", - "DncKjvbdCJKbKiGK", - "EOcLKvbddndrjtUS", - "DnbjjvbdkDLjqGuH", - "DncKjvbdmIcsptqa", - "DoCkKvbdvvlAvBWV", - "EObjjvbdjblLQftg", - "DnbjjvbdCEQBWKMf", - "DnbjjvbdBdPaVilf", - "DoCkKvbdZxcjODLr", - "DoCkKvbdEObjjwCd", - "EPDKjvbdyTNhlqbH", - "EPCkKvbdUMVoAvPJ", - "DncKjvbdUxhUZjoO", - "DncKjvbdqqtjmkAm", - "DncKjvbdKfGICBRV", - "EPCjjvbdVrOXaeLc", - "EPDLKvbdwXLaWBWV", - "EPCkKvbdjblKqHUg", - "DnbjjvbduDCuWuoP", - "EPDKjvbdNGbpMouL", - "EObjjvbdBcoaVjNG", - "DncLKvbdrWpMDIxq", - "DncLKvbdhaoCdwRR", - "DnbkKvbdFxtuBDwb", - "DncKjvbdIjEAKPgE", - "EOcLKvbduCbuXVoP", - "DoDKjvbdZtIiZDsO", - "DnbjjvbdEztRElCi", - "DncLKvbdxmsHwsJD", - "DnbjjvbdRbEElIxk", - "DoDKjvbdWHwvXgYz", - "EOcKjvbdQlwbYnUz", - "EOcLKvbdVTltFkuj", - "DncKjvbdliETptqa", - "DnbkKvbddoErjtTr", - "DoCkKvbdgPazvdXh", - "DncKjvbdySmhlqag", - "DoCjjvbdbPgHDkzd", - "DoCkKvbdFWZPomKF", - "EObjjvbdssSSxydc", - "EObjjvbdzQnliJwA", - "EObkKvbdKCjCpibx", - "EPCjjvbdpyOhHREY", - "DncLKvbddjJqutzn", - "EObkKvbdBdQAujMf", - "EPCkKvbdLAjflbXq", - "DncLKvbdLBLGlaxR", - "DoDLKvbdrpWPJbuf", - "DoCjjvbdEKHiuxKA", - "DoCjjvbdXsMAlsnx", - "EObkKvbdptTgSSLU", - "DoDKjvbdnHFXmNfy", - "DncKjvbdCJKbKhej", - "EPCjjvbdhlEdOUby", - "EOcKjvbdKWUfEFGi", - "DoDKjvbdZQmFJMdq", - "EPCjjvbdiGjDZWKV", - "EObkKvbdVAbQrprZ", - "DoDKjvbdfekzNgHA", - "DoDLKvbdnHEwlmgZ", - "DncKjvbdwzHeexEr", - "DoCjjvbdmpZxujyC", - "EPDKjvbdwMvAMcdm", - "DoCjjvbdfHkVrNqH", - "EPCkKvbdYzbfRiuy", - "EPCkKvbdZtIiZDrn", - "DnbjjvbdjvWnDbYX", - "DoCjjvbdOStVgEtp", - "EPDLKvbdZMSETmlN", - "EPDKjvbdBhjajhej", - "EPCjjvbddoFTLUUS", - "DnbkKvbdsQVoJcWG", - "EPCjjvbdrEFJQNvB", - "DoCjjvbdMpYRWOGs", - "EOcLKvbdZirgpHBf", - "EPDLKvbdyOTIXsJD", - "DoCkKvbdKRZdnfNe", - "DnbjjvbdbBWFFoow", - "EPCjjvbdgFlZnHHA", - "DnbkKvbdGGJrOIsq", - "DoDLKvbduDCtwWPP", - "EObjjvbdNddUIhjd", - "DnbjjvbdxsNiMqag", - "EObjjvbddeOrCWbj", - "EObjjvbdPxmAGsRj", - "EOcLKvbddeOrCXDK", - "DoDLKvbddeOrBwCj", - "DoCjjvbdVqnYCElD", - "DnbkKvbdUyIUZjoO", - "EObjjvbdeFOrCXDK", - "EObkKvbdVrNxCFLc", - "EObjjvbdTfzmkwWF", - "EOcKjvbdIHGzZYYH", - "EPDKjvbdtbbuXWPP", - "DoCjjvbdZisIQHBf", - "EObjjvbdbsCkUDjB", - "EPCkKvbdVwJXudFH", - "EPDKjvbdrouoKDVf", - "EPCkKvbdFyVVBEYC", - "DncLKvbdZnnIeEzK", - "EPDLKvbdxVNFQxkn", - "DoDKjvbdpxnggRDx", - "DoDLKvbdqZOgfpcx", - "DncKjvbdCIjakJGK", - "EPCkKvbdCJLBjhej", - "DoDLKvbdnPzYvKxb", - "EOcKjvbdqTsgSRkU", - "EOcLKvbdLBLGlaxR", - "DoDLKvbdcbTMrAUN", - "DncLKvbdzitoodSt", - "DoDKjvbdJvUfDdfi", - "EOcLKvbdHDjvKCJj", - "EPCkKvbdeOeTKssr", - "DnbkKvbdlYrqsYft", - "DncLKvbdiiehKMxS", - "DncKjvbdURQoVUhN", - "DnbkKvbduMYXBUAw", - "DoDLKvbdSPtHJfEX", - "EObkKvbdqBJFAWgd", - "EOcKjvbdFpATWgFy", - "DoDLKvbdBsBDTfXS", - "DncKjvbdjhHLfFmk", - "DoCjjvbdCJKakIfK", - "DnbkKvbddoFSjtTr", - "EObkKvbdANIYsWzY", - "EObjjvbdCTAbtFvr", - "EObjjvbdrRtkOLAm", - "DnbkKvbdkxsSTYgU", - "DoCjjvbdnBiwXnmu", - "EObjjvbdwtmEqYlO", - "EPDKjvbdrylQTAhO", - "DoDLKvbdtbbtvvOo", - "EPCjjvbdZLrETmlN", - "EPDLKvbdWXJYWDdg", - "DoCkKvbdKQzFOfOF", - "EPCjjvbdwzIFfXeS", - "DncKjvbdRjyFuHLT", - "EPDLKvbdULunaWPJ", - "DncKjvbdUxhTykOn", - "DnbkKvbdJcKCqKDY", - "EPDLKvbdcbSmSATm", - "DnbkKvbdegjurNqH", - "EPDKjvbdZjTIQGbG", - "EPCjjvbdiLddNuCy", - "DoCjjvbdZQldiNEq", - "EOcLKvbdakMGPODA", - "EObjjvbdnHEwlmgZ", - "EOcLKvbdBsAcUGXS", - "EPCkKvbdiVZdwSUb", - "EOcLKvbddCTNSAUN", - "DnbkKvbdEXxMUUUM", - "DncKjvbdYpldiMeR", - "DoDKjvbdNddTiIjd", - "DoDLKvbdZLqdUNlN", - "EPCkKvbdiBncFWpq", - "DncLKvbdiCPDEvqR", - "EOcKjvbdUyHszKoO", - "DncKjvbdhtydvqtb", - "EPCjjvbdpxoHgQcx", - "EObkKvbdkWWnDaxX", - "DnbjjvbdBhkBkJFj", - "DoCkKvbdRacdkhyL", - "EOcLKvbdZjTHpHCG", - "EPCkKvbdMowqWOGs", - "DncLKvbdegjurNpg", - "EObjjvbdfMfWfmKL", - "EPDLKvbdZirgpGaf", - "DoDLKvbdiZuFlQnG", - "DncLKvbdFxuVAcxC", - "EObkKvbdZisHofaf", - "EOcKjvbdJSyBSmYM", - "EPDLKvbdVYgtZkPO", - "EOcKjvbdRbEFMJYk", - "DncLKvbdrEFIonWB", - "DncKjvbdKDJbqJcY", - "EOcLKvbdhfjCxuiu", - "EObjjvbdLLAhWAKZ", - "DoCkKvbdRXNcblID", - "DoDLKvbdcbSmSATm", - "EOcLKvbdwWlAvAuu", - "EObkKvbdiBnbdvpq", - "DoCkKvbdNQXpumgT", - "DncLKvbdkVwOECYX", - "DnbkKvbdfoazwDxI", - "DoDLKvbdbBWFFpPw", - "DoDLKvbdvBDxsPEh", - "EPDKjvbdJqZdoFme", - "DoDLKvbdIryArmXl", - "EPCjjvbdANIZSwZx", - "EPCkKvbdVhYVxGxz", - "DncKjvbdLAjgNCYR", - "DncKjvbdxxIjCQZk", - "DncKjvbdbiNKKewY", - "EPCjjvbdlrZVZsEJ", - "EPDKjvbdIryAsMwl", - "DoCkKvbdtAHRIAAr", - "EPDKjvbdJmAEZfuB", - "EPCkKvbdZjSgogBf", - "DoDLKvbdOXnuzcnU", - "DnbkKvbdehKvRnQg", - "EObjjvbdZyDimbkr", - "DoDKjvbdmajWwoOV", - "EOcKjvbdkMalZeHP", - "EOcKjvbdIjEAJpHE", - "EPCkKvbdDihKVxKA", - "DncKjvbdNddUIiKd", - "EObjjvbdqdFIpOWB", - "DoCkKvbdxnShXsJD", - "DoDLKvbdjmBkzEfo", - "EOcLKvbdatagYLTh", - "DoCjjvbdVhYVxHYz", - "DnbjjvbdJbjDRKDY", - "EPCjjvbdLBLHNCYR", - "DnbjjvbdnGeYNOGy", - "EOcLKvbdUsmTekvK", - "EPCjjvbdtkxXBTaX", - "EPCjjvbdzoPqFCkx", - "DncKjvbdCIjbKhej", - "DncKjvbdZLqdTmkm", - "DoDKjvbdsPunicVf", - "EOcKjvbdmgFXmNgZ", - "EObkKvbdiMFENuCy", - "DoDKjvbdhanbeXRR", - "EObkKvbdACqwiyhp", - "DncKjvbdZisIQHBf", - "EPCjjvbdgQBzwDwh", - "DnbjjvbdyYJJaoyk", - "DoDKjvbdxUldqZMO", - "EObkKvbdkClLQgVH", - "EPCjjvbdZQldiMeR", - "EPDLKvbdZyEKOClS", - "EPDLKvbdcIlikFvx", - "DoDKjvbdrzMQTBHn", - "DnbjjvbdVYgtZkPO", - "DoDLKvbdHEKuiajK", - "EPCkKvbdczZQXxqC", - "DoDKjvbdrDdiQNua", - "DncLKvbdcImKLGWx", - "DoCjjvbdVYgtZkPO", - "EPDLKvbdZnnIeFZj", - "EPDKjvbdMIakqYAS", - "DoCkKvbdSLYfUgLT", - "EPDLKvbdiCObdvpq", - "DnbjjvbdRpUHKFcw", - "DoDLKvbdIHHZyYXg", - "EPCjjvbdypoMhiwA", - "DnbkKvbdCEPaVjMf", - "DnbkKvbderAvzlDP", - "DnbkKvbdZQleImFR", - "EOcKjvbdKRZdneme", - "DoDLKvbdiBnbeXQq", - "DncLKvbdEPDKjvcE", - "EOcLKvbdauCGwkTh", - "DncLKvbdEvZQPmJe", - "EPCkKvbdURQnuVIN", - "DncLKvbdegjvSOQg", - "EPCjjvbdKaKgMawq", - "DnbkKvbdRzKISbvA", - "DncLKvbdiLdcnUcZ", - "EPDLKvbdkDMKpfuH", - "DoDLKvbdRbDdkhyL", - "DnbjjvbdDwxMUUTl", - "DnbkKvbdrpWPKCuf", - "DnbkKvbdNVSqjmAX", - "DoDKjvbdRbDeMIxk", - "EOcLKvbdcyxpXyRC", - "DncLKvbdRMwbYnUz", - "EObjjvbdqlzJxlHi", - "DoCkKvbdJYUCIMQp", - "DncLKvbdLZQjSzuG", - "EOcKjvbdxVNEqYkn", - "DnbkKvbdZoOIeFZj", - "DoCjjvbdBraCtFwS", - "EOcLKvbdliDsqVSB", - "EPCkKvbdeATqNXif", - "DncLKvbdkMbLydgP", - "EObjjvbdZxdJmbkr", - "DoCjjvbdraellHLZ", - "EObkKvbduDCuWvPP", - "DoCkKvbdpstGrSLU", - "DoCjjvbdLGFgbBQu", - "DnbkKvbdhtzFWquC", - "EObjjvbdoAKztHdO", - "EPDLKvbdatafxKtI", - "EPDKjvbdkWXNcaww", - "DoCkKvbdwkXEHzzG", - "EObkKvbdmgEwmNgZ", - "DncKjvbdBiLCLJFj", - "DoCjjvbdeOdsKssr", - "EOcLKvbdfILWSORH", - "EObkKvbdCDpAujMf", - "EPDKjvbdKDKDQibx", - "DoDKjvbdVUMtGLuj", - "EObkKvbdrXQMCiYq", - "DncKjvbdePEsLTtS", - "DncLKvbdDxYLtUTl", - "EPCkKvbdGYuVBEYC", - "DncLKvbdNeEUIiKd", - "EPCkKvbdpxoIHRDx", - "EObjjvbdFkEsDHlu", - "EObjjvbdssSSxzFD", - "DoCkKvbdUtNTfMVj", - "DnbjjvbdJcKDRKDY", - "DncKjvbdqiAKEmOe", - "DoDKjvbdtlXwAtBX", - "DnbkKvbdxmsIYTIc", - "EObkKvbdLrXMzUpz", - "DoCjjvbdkxsSSxft", - "DncKjvbdQlwaxnUz", - "EObkKvbdjhGlFfNk", - "EPCkKvbdxsNhmRag", - "DoDLKvbdMfcPmQUk", - "DoDKjvbdQvnEDLhD", - "EObjjvbdVgxVxHYz", - "DoDLKvbdlrYtyrdJ", - "DoCjjvbdezvYeIsw", - "DncLKvbdNddTiIjd", - "EPDLKvbdGGJrNiUR", - "EPDLKvbdRzJhTDWA", - "EPCjjvbdvvkaWBVu", - "EOcKjvbdRXNdCkgc", - "EOcKjvbdQZNAHTSK", - "EPCkKvbdsCGNLfkZ", - "EOcLKvbdDwwktTsl", - "EOcLKvbdqlzJyLgi", - "EOcLKvbdxsNiMqag", - "EOcLKvbdhzVFlROG", - "EOcKjvbdEztRFMCi", - "DnbkKvbdqiAJdmPF", - "EPDLKvbdjcMKqGtg", - "EObkKvbdTlWOaWOi", - "EPDLKvbdURRPUuHm", - "DoDKjvbdelfWgNKL", - "EOcLKvbdGAnqZJzm", - "EObjjvbdGZUuAdXb", - "DoDLKvbduLwwAtAw", - "DoCjjvbdZjTIQGbG", - "EPCjjvbdRNXbYnUz", - "EPDLKvbdiLeENtby", - "EObjjvbdMowpunGs", - "EOcKjvbdbiNJjevx", - "DoDKjvbdEYYLstTl", - "DoDLKvbdqUTfrRjt", - "DoDKjvbdbsCkUEJa", - "DoDKjvbdXsMBNUPY", - "EPCjjvbdRNXaxnUz", - "DoDLKvbdNGcQNQUk", - "DnbjjvbdEARiMywX", - "EPDKjvbdSKxfUfkT", - "DncKjvbdhtyeXRtb", - "DncKjvbdZLqcsnLm", - "EObkKvbdZnmheEzK", - "EObjjvbdtbcUvuno", - "DnbjjvbdrzMQTBHn", - "DnbjjvbdDwwktTsl", - "EPDKjvbdkxsSTYgU", - "DoDKjvbdIryArlxM", - "DoDKjvbdnBivxOnV", - "DoDKjvbdeATplwif", - "EOcLKvbdKeegbApu", - "EPCjjvbdMgDQMotk", - "DoCjjvbduCbtwWOo", - "DnbkKvbdyNsHwrhc", - "DnbkKvbdtvNxJpsA", - "EOcLKvbdqAheAWgd", - "DoCkKvbdURQoUtgm", - "EOcKjvbdqceIpOWB", - "DoCkKvbdVwIwudFH", - "DnbkKvbdbLMFnmcA", - "EOcLKvbdZjTHpHBf", - "EOcKjvbdRXNdCkhD", - "EPDLKvbdiHJcZViu", - "DoCjjvbdxxIjCPzL", - "DnbkKvbdBcpBWJmG", - "EPCkKvbdZyEKOCkr", - "EPDKjvbdOTUWHFVQ", - "DoCjjvbdIGgZxwwg", - "EPDLKvbdFjeSbhMu", - "EPDLKvbdhgKCxvJu", - "EOcLKvbdNsUWGdtp", - "EPDKjvbduVnXipsA", - "DncLKvbdGYuVBEXb", - "EPDLKvbdZtIhyESn", - "DoDKjvbdZxdJmcLr", - "DoCjjvbdUsltGLuj", - "DoDKjvbdDoDLKvbd", - "DncLKvbdrDdhpNvB", - "EPDLKvbdKCjDRJbx", - "DoDLKvbdxLWdHzyf", - "EObkKvbdrzMQTAhO", - "EOcLKvbdOFDtJJKd", - "EPCkKvbdrSVKmjaN", - "EOcKjvbdWWiYVdEg", - "EOcKjvbdWWhwvDdg", - "DncKjvbdpstHRqjt", - "EPCkKvbdKWVFceGi", - "DoCkKvbdZjShPfbG", - "DoCkKvbdSxKlNzkY", - "EPDLKvbdIwtCHkqQ", - "EOcKjvbdsCGNLgLZ", - "DncKjvbdzaAOfgCM", - "DoDLKvbdxmrhYSiD", - "DncLKvbdfMfWgMjL", - "EPDKjvbdqFdEsuaI", - "EOcLKvbdiLeDnUcZ", - "DoCjjvbdKVuFceHJ", - "DoCjjvbdfekzNgHA", - "EOcKjvbdOFEThiLE", - "EPDLKvbdqceJPnWB", - "DoDLKvbduCbtwWOo", - "DncKjvbdTqROtuIN", - "DncKjvbdpedFUWBI", - "DoDLKvbdrEFJQNua", - "DoDLKvbdyXhjCPyk", - "EPCkKvbdJYUBhLqQ", - "EPCkKvbdtcCuXVno", - "DoDLKvbdZLrEUOLm", - "EPCkKvbdpstGrRjt", - "DncLKvbddePSCXCj", - "EObkKvbdauCHXjsh", - "DoDLKvbdkHfkefNk", - "EObjjvbdMRwMzUpz", - "EObjjvbdaMkCTVNH", - "DoCkKvbdGGJrNhtR", - "EPDLKvbdvBDxrneI", - "EPDLKvbdIHHZxwxH", - "EOcLKvbdrJAJdmPF", - "EOcKjvbdGZUuAdXb", - "EOcLKvbdbUbHYLUI", - "DnbjjvbdJzofYEAN", - "EPDKjvbdFxtuBDxC", - "DnbkKvbdQvnDbkgc", - "EPDKjvbdJmADzGta", - "DoDKjvbdZRMdhleR", - "DnbkKvbdsrqsZZeD", - "EObkKvbdrovPJbuf", - "EPCjjvbddeOqbXCj", - "EObjjvbdtcDVXVoP", - "DncKjvbdMfbpNQVL", - "DoCkKvbdhbPCeXQq", - "DoCkKvbdNHComQVL", - "EObjjvbdvBDxroFI", - "EPCjjvbdnBivwoNu", - "EObjjvbdbhljKewY", - "EPDKjvbdZyDimcMS", - "EObkKvbdWSOXbElD", - "EOcKjvbdTfznMXVe", - "EPCjjvbdZtJJYcsO", - "DoCjjvbdRjxfVHLT", - "DoCkKvbdVTltGMVj", - "DncKjvbdYfwEAOri", - "DncKjvbdYkrEUOMN", - "EObkKvbdqGEEsuaI", - "DncLKvbdjJfHimXr", - "EPDLKvbddndsLUTr", - "DnbkKvbdqBJFAWhE", - "EPDLKvbdEOcKjwDE", - "EPCkKvbdtvOYJqTA", - "DncLKvbdkyTRsZHU", - "DoCjjvbdTppnuVIN", - "DncLKvbdwyhFeweS", - "DncKjvbdsBelkgKy", - "DoCjjvbdKDKCqJcY", - "DoCjjvbdkClKqHVH", - "DoCjjvbdcTCjtDia", - "EPDLKvbdUVkpJtAq", - "EPDLKvbdRyjITCvA", - "DnbjjvbdJuuFcdgJ", - "DoDKjvbdrJAJdmOe", - "DncKjvbdJcJbqKCx", - "DoDLKvbdJcJbqJcY", - "DoDKjvbdeEoSCXDK", - "DoDLKvbdSwjlNzkY", - "EObjjvbdzitopDrt", - "DoCkKvbdKWVGEEgJ", - "DncKjvbdpssfqrKt", - "EOcLKvbdUMWPBVoJ", - "DncKjvbdyzdmrIIh", - "EPCjjvbdxUldqZLn", - "DoDLKvbdySnImRbH", - "DoCjjvbdGdKvJaij", - "DoCkKvbdxZgeewdr", - "EObkKvbdiLddNuDZ", - "DnbjjvbdSCDdkiZL", - "DncKjvbdznpREcMY", - "EOcLKvbdaRebhTfL", - "DnbjjvbdZQldiMdq", - "EPCjjvbdbrbjtEKB", - "EOcKjvbdEARiMzXX", - "DoDLKvbdXrkaNTnx", - "EPCkKvbdQZNAHTRj", - "DoDLKvbdEzspeLcJ", - "EPCjjvbduVnYKRTA", - "EObjjvbdJXtBhMQp", - "EPDKjvbdeOdrjssr", - "EPCjjvbdLqwMytpz", - "EPDKjvbdUMVoBVoJ", - "DncKjvbdRpUGifDw", - "EPDLKvbdZyDinDLr", - "DnbkKvbdNrsufeVQ", - "EPCkKvbdZMSDtNlN", - "EPCkKvbdySnJNSCH", - "EPCjjvbdfMevfljL", - "DncLKvbdXsMBNTnx", - "DnbkKvbdpxoHfqDx", - "DncLKvbdUQpntthN", - "DncKjvbdIsZArlwl", - "DoDLKvbdZGwEAOsJ", - "EOcKjvbdVvhwvDdg", - "EOcLKvbduWNxJqTA", - "EPCjjvbdHEKvJaij", - "DoDKjvbdrpWOjCuf", - "DncLKvbdrpWOjDVf", - "DoCjjvbdIHGzYwwg", - "DoDLKvbdpxoIGqEY", - "DoDLKvbdJcJbqKDY", - "DoCjjvbdRWmdClHc", - "EPCjjvbdFWYopNJe", - "DncKjvbdmfdwlmfy", - "DoCkKvbdxUleQxlO", - "EObjjvbdnGdxMnGy", - "EPCjjvbdvvlAvBVu", - "DncLKvbddndsKssr", - "EObjjvbdZMRcsnLm", - "EOcKjvbdFxttaEXb", - "DncKjvbdVUNTfMVj", - "EOcLKvbdNrtWHFUp", - "DoDKjvbdwuMdqYlO", - "EPDLKvbdrXPkbhxq", - "EObjjvbdrEFIpNua", - "EObjjvbdziuQQDrt", - "EOcLKvbdqYoIGpcx", - "DnbjjvbdsQVoJcVf", - "EObkKvbdkDMKpgUg", - "EObjjvbdvBDyTPFI", - "DncKjvbduCbuWvOo", - "EPCjjvbdkVvnECYX", - "DncLKvbdZGvdAOri", - "DoCkKvbdrXPlDJZR", - "EOcLKvbduCcVWvOo", - "DoDKjvbdCEPaWJlf", - "EPDKjvbddoErjssr", - "DncKjvbdACqxKZiQ", - "EPCjjvbdUVlPitAq", - "EPDKjvbdjJfHjMxS", - "EObkKvbdAMhYsWzY", - "DoDKjvbdnBivxOmu", - "EOcLKvbdbiNKKfXY", - "EPDKjvbdYqMeIleR", - "EObkKvbdJmADygUa", - "EObjjvbdEPDLLWcE", - "EPCjjvbdrXPkcIxq", - "EOcLKvbdliDtQtqa", - "DoCjjvbdmoyxujyC", - "EPDLKvbddoFTLTsr", - "EOcLKvbdCWzdJEpW", - "DnbjjvbdrEEhpOWB", - "DoDKjvbdZLrDtNkm", - "EOcLKvbdLFfHbAqV", - "EOcKjvbdmttzLKSG", - "EOcLKvbdmbJvwoOV", - "EOcKjvbdUaCQrqSZ", - "DnbjjvbdmgExMnGy", - "EPDKjvbddndrkUUS", - "EObkKvbdDwwkstTl", - "DoCkKvbdcJMjLFwY", - "DnbjjvbdaNLBruMg", - "DoDLKvbdQYmAHTRj", - "DnbkKvbdsQWOicWG", - "EObkKvbdMRwMzUpz", - "DoDLKvbdZshiZDrn", - "EPDLKvbdnPzYujxb", - "EOcKjvbdCEQAujMf", - "EPDLKvbdKefHbApu", - "DoDLKvbdYpldiNFR", - "DoCkKvbdFWZQQNJe", - "DncLKvbdznpQeCkx", - "EOcKjvbdnQZxvKxb", - "DoCkKvbdVBBprpqy", - "DnbkKvbdZirhPfaf", - "DnbkKvbdegjvSNqH", - "EOcLKvbdqdEiPnWB", - "EObjjvbdBhkCKiGK", - "EObjjvbdxZgfGYFS", - "DnbjjvbdNQYQumgT", - "EPCjjvbdxsNhlrBg", - "DoCkKvbdQdDApRDr", - "DoCkKvbdxxIiaoyk", - "EPDKjvbdFeirNhtR", - "DoCjjvbdegjvSOQg", - "EObkKvbdqcdiQNvB", - "DncLKvbdiMEdNtcZ", - "DncLKvbdTqRPUthN", - "EPCkKvbdwygeexFS", - "DoDKjvbdyTOJMrBg", - "DncLKvbdeEoRavbj", - "EPCjjvbdtbcUvvOo", - "EObjjvbdKCicRJcY", - "EObjjvbdZyEKODMS", - "DnbjjvbdmJDtQtrB", - "DncLKvbdEARhlyvw", - "DnbjjvbdIxTbILqQ", - "EOcLKvbdwygefYFS", - "DoCjjvbdznoqFCkx", - "DoCjjvbdRpUGjGDw", - "DncKjvbdhzVGMQnG", - "EPCjjvbdhkeDnVCy", - "EObkKvbdOEdUIiKd", - "DncKjvbdrDeIomua", - "DncLKvbdiHJbxuiu", - "EPDKjvbddxZstRez", - "EPDLKvbdmSYuZrdJ", - "EObkKvbdVUNUFkvK", - "EPDLKvbdNeEUJIjd", - "DoCkKvbdiMEdNuCy", - "DoDLKvbdRDcApQcr", - "EPCjjvbdTlVoBVoJ", - "EObjjvbdLBKgNBwq", - "EPCkKvbdsCFllHKy", - "EObjjvbdnVUzLJqf", - "DoDKjvbdqrVLNkBN", - "DoCkKvbdqFcdtWBI", - "DncLKvbdbVCGxLTh", - "EOcLKvbdeFPSCXCj", - "EOcLKvbdRpTgKFdX", - "EObjjvbdznpQeDLx", - "EOcKjvbdjvXNcaxX", - "DnbjjvbdHDkWJbJj", - "DncKjvbdhkeENuDZ", - "DnbkKvbdnUtyjjSG", - "DoDKjvbdSQUHJfDw", - "DncKjvbdbUbHYLUI", - "EOcLKvbdNsTvGduQ", - "EPDLKvbdSZigsCvA", - "DncKjvbdMfcPlpUk", - "DoDLKvbdxrnIlrBg", - "DncKjvbdiLdcnVCy", - "EPCjjvbdmfeYNOHZ", - "DoCkKvbdjvWmcaxX", - "DoDKjvbdbUbHXkUI", - "DncKjvbdBhkBjiFj", - "DoDLKvbdNHColpVL", - "EOcKjvbdrykosAhO", - "DncLKvbdqGDeUVaI", - "DnbkKvbdhgJcZViu", - "DnbjjvbduLxXAtBX", - "EPCjjvbdYpleJNFR", - "EPDLKvbdQvmdClHc", - "DnbjjvbdJYTbIMRQ", - "DncLKvbdznpRFDMY", - "EOcLKvbdZnmiFEyj", - "DnbkKvbdrRuLOLAm", - "EObkKvbdhkeEOUby", - "DncLKvbdYlSEUOLm", - "DoCjjvbdhkdcmtby", - "DncLKvbdddnrCXDK", - "DoDLKvbdKaLHNCYR", - "EOcKjvbdcyxpYZQb", - "EPDLKvbdACqwjZhp", - "DoCkKvbdBsBDTevr", - "EObkKvbdeKJqvUzn", - "EObkKvbdcImJkGWx", - "DncLKvbdYSlAltOx", - "DncLKvbdlrYtyrdJ", - "EObkKvbdKxqJrztf", - "EOcKjvbdsQWPJcVf", - "DoDKjvbdkySqrxgU", - "EObjjvbdeEoRbXCj", - "EOcKjvbdHDkVjBij", - "DoDLKvbdCTBCsfXS", - "DoCjjvbdKCjDQibx", - "DoCjjvbdlhdTqUrB", - "DoDKjvbdTulQKTaR", - "DoCkKvbdRjxetfkT", - "EPCjjvbdEuyQQNKF", - "EPCjjvbdDoDKkXDE", - "DoCjjvbdsQWPJbuf", - "DoDKjvbdhuZdvqtb", - "EPDLKvbdiHKCyWJu", - "EPDLKvbdLFegaaQu", - "DoCjjvbdqZPHgRDx", - "DncKjvbdUWMPjUAq", - "DoDLKvbdTYKkmzjx", - "DoDKjvbdegjvSOQg", - "DnbkKvbdUtNTekvK", - "EObkKvbdNsTvGeVQ", - "DoDLKvbdfNFvgMjL", - "EOcLKvbdZQmEiNEq", - "EPDKjvbdBraDTfWr", - "EPDKjvbdNGcQNQVL", - "EPDLKvbdZyEKODMS", - "EOcKjvbdBvzdIdpW", - "EPCjjvbdACqwiyiQ", - "DoCjjvbddePRawCj", - "EPDKjvbdWWiXucdg", - "DoDKjvbdWexzUAPT", - "DnbjjvbdwXMBWBWV", - "EOcLKvbdUyHszLOn", - "EPCkKvbdOYOuzcnU", - "EPCkKvbdhancEwQq", - "DnbkKvbdjggLefOL", - "EPCkKvbdFjdsDIMu", - "DoDKjvbdrSUjmkBN", - "DoDLKvbdZjTIQGaf", - "DoDKjvbdMgDPmPtk", - "EPDLKvbdWRmwbFMD", - "DoCkKvbdzROmJKXA", - "DnbkKvbdrDdiQNvB", - "DnbjjvbduDCtwVoP", - "EOcLKvbdCIjbLJFj", - "EPDKjvbdXrkaMsnx", - "EPDKjvbdVhXvXfxz", - "DncKjvbdhbPDEwRR", - "DoCkKvbdpxoHgQcx", - "DoCkKvbduMXwBUBX", - "EObjjvbdNeEThhjd", - "DoCjjvbdirzhrkJz", - "DoDLKvbdaMkCTUlg", - "DncLKvbdWRnYBeLc", - "DnbjjvbdGBPRZJzm", - "EOcLKvbdeOeSjstS", - "DoDLKvbdmIctRVSB", - "DoCjjvbdZxdJnDMS", - "DoCkKvbdRpTgKFcw", - "DncLKvbdTukojTaR", - "DnbjjvbdKRZdoFme", - "DnbkKvbdURQoVUhN", - "DoDLKvbdyYJKBozL", - "EObkKvbdfNFwHMjL", - "DoDLKvbdZisIQHBf", - "EObkKvbdqFcdsuaI", - "DncLKvbdzoPqFDLx", - "DoDKjvbdSKxeuHLT", - "EPDKjvbdsBemLfjy", - "DoCjjvbdJbjCqJcY", - "DoCjjvbdNPxRVnGs", - "DncLKvbdGcjvJbKK", - "EOcKjvbdrWpMDIxq", - "EOcLKvbdQdDApQcr", - "DoDKjvbdZMRdTnLm", - "EOcLKvbddxZssrFz", - "EObjjvbdUtNTfLuj", - "EPCjjvbdLLBIWAKZ", - "DoCkKvbdgFlZmfgA", - "EPCjjvbdUVkoitAq", - "DoDKjvbdDncKjvcE", - "DoDLKvbdRpUHJfEX", - "EPDKjvbdLqvlzVQz", - "EPDKjvbdZMRdUOLm", - "EOcLKvbdCJLBkIfK", - "DncKjvbdaSFbhUFk", - "EPDLKvbdZoNheEzK", - "DncKjvbdUVlPjUAq", - "DnbkKvbdKNADyfuB", - "EObkKvbdZdwfzghb", - "EPDLKvbdZtIhxcrn", - "EObkKvbdGckViajK", - "DncLKvbdFfJqmiUR", - "DncKjvbdKWUfDdgJ", - "DoDKjvbdMtrqjmAX", - "EOcLKvbdsQWPKDVf", - "DoCjjvbdwtleRZMO", - "EObjjvbduaDxsPEh", - "EPDLKvbdKxqJrzuG", - "EOcKjvbdVAaprprZ", - "EObjjvbdEuxopMjF", - "DnbjjvbdyOTHwriD", - "EPDLKvbdrpVnibvG", - "EPDKjvbdkWWnDaww", - "DncLKvbdrXPkbiYq", - "DoDLKvbddxZssqez", - "EOcLKvbdHDkWJbJj", - "DncLKvbdEPCkLWcE", - "DnbkKvbdEXwkstTl", - "EObjjvbdqiAKEmOe", - "DncLKvbdjAQGaQGj", - "EPCjjvbdNeDtJJKd", - "EPCjjvbdvwMBWBVu", - "EPDKjvbdFejSOItR", - "EOcLKvbdNPwqWOHT", - "EPDKjvbdbsCjscia", - "EObkKvbdyYIiaoyk", - "DoDKjvbdLZQirzuG", - "EObjjvbdSLZGVGjs", - "DoCjjvbdAMgxsWzY", - "DoDLKvbdEObjjwCd", - "DnbkKvbdsPvOicWG", - "EPCkKvbdrJAKElne", - "EPCkKvbdauCGwjsh", - "DncLKvbdegkWRnQg", - "EPCkKvbdYpmEiNFR", - "DoDKjvbduaDxsPFI", - "DoCjjvbdcyxoxYqC", - "DoCkKvbdkMakzFHP", - "DnbjjvbdJbibqJbx", - "DnbkKvbdWWhxWDeH", - "DoCjjvbdssRsYzFD", - "DoDKjvbdpyPIHRDx", - "DncLKvbdwNWANDeN", - "DoDKjvbdJYUBglRQ", - "EObkKvbdXnRAYVVt", - "DoCjjvbdUWLpKTaR", - "DoDKjvbdTqROttgm", - "EPCkKvbdVqnXaeMD", - "EObjjvbdADRwiyiQ", - "DoDKjvbdlrZUyrci", - "EPDKjvbdvAdZSndh", - "DoCkKvbdzoQQeDLx", - "DnbkKvbdSQUGjFdX", - "EOcLKvbdqBJFAXIE", - "EObkKvbdSCEFLiZL", - "DnbjjvbdzoQQdcMY", - "DnbkKvbdpxngfqEY", - "DncLKvbdbsDLUEKB", - "DoCjjvbdXrlBMtOx", - "EObjjvbdKCjDQicY", - "DncLKvbdLrWlzUpz", - "EObjjvbdaaWEfQQX", - "EObjjvbdtlYWaTaX", - "DnbkKvbdMowpunGs", - "EObkKvbdSLYeuHKs", - "EObkKvbdTAEhhCOd", - "EPCkKvbdmSYtyrci", - "DncLKvbdYkqcsnLm", - "DoDLKvbdrylQTAgn", - "DncLKvbdJXtCIMRQ", - "EObkKvbdSBdElIyL", - "DoDLKvbdwygefYFS", - "DncKjvbdyXhibPzL", - "EPCjjvbduaDxsPFI", - "EObjjvbdZoNiFEzK", - "EPCjjvbdkNBkyeHP", - "EPCkKvbdWRnXadlD", - "DncLKvbdRWmdDLhD", - "DnbkKvbdmSYtzTDi", - "EOcKjvbdkVwODbXw", - "DncLKvbdQlxCZOUz", - "EObjjvbdbhlijfXY", - "EOcLKvbdXmqAXtut", - "EOcLKvbdmbKXXnnV", - "DoDKjvbdkHgMFfOL", - "EPCkKvbdfekymgHA", - "DoCjjvbdeKKRvUzn", - "DoDKjvbdkHfkefNk", - "DoCjjvbdyqPMiKXA", - "DnbjjvbdUQqOtuIN", - "EOcKjvbdEPCkKwDE", - "DoDLKvbdZRNFIleR", - "DnbjjvbdRacdlJZL", - "EOcLKvbdTukoitAq", - "EOcLKvbdZLrDtOMN", - "EOcLKvbdgKfzcGAE", - "EObjjvbdzjVQQESt", - "EOcLKvbdcIlijevx", - "EOcKjvbdGKdsDHmV", - "DncLKvbdKkBHvAJy", - "EOcKjvbdZMRctOLm", - "EPCkKvbdADRxKZiQ", - "EObjjvbdDwxLsssl", - "EPDLKvbdUxgszLPO", - "EPCkKvbdSQTfiedX", - "EPCjjvbdNeEUJIkE", - "DoDLKvbdpyPHfqDx", - "DnbkKvbdyOShXsJD", - "DncLKvbdLiBkpxAS", - "DoDKjvbdaaWEepQX", - "DoCjjvbdWSOYBeLc", - "EOcKjvbdLFegbAqV", - "EPDKjvbdffLzOGgA", - "EObkKvbdFkErbglu", - "DncLKvbdiZuFlROG", - "DncKjvbdegkWRnQg", - "DoDLKvbdQdDApRDr", - "EOcLKvbdeYZtURez", - "EObjjvbdrXQLcIxq", - "DoDLKvbdxZhGGXeS", - "DoDLKvbdGGKSOItR", - "EObjjvbdjhHLfFnL", - "EOcLKvbdUQpoUuHm", - "DoCkKvbdXrlBNUPY", - "DoDKjvbdJXtCIMRQ", - "DnbkKvbdZMSDsnLm", - "DncKjvbdCTBDUGWr", - "DncKjvbdbhlikGXY", - "DoDKjvbdXmqAYVWU", - "DnbjjvbdliDsqVRa", - "DnbkKvbdmajXYOnV", - "EObjjvbdJpyePGNe", - "DnbkKvbdCTAcUGXS", - "DoDLKvbdCDpBVjNG", - "EOcLKvbdxwhiaoyk", - "DoDKjvbdxVNFQyMO", - "EPCkKvbdVvhwvEEg", - "DnbkKvbdFWYoomJe", - "EOcKjvbdlrZUysEJ", - "EPDKjvbdqquKnKaN", - "DoCkKvbdTkunaVoJ", - "EOcLKvbdfHkVrOQg", - "EPDLKvbdiUzFWrUb", - "DoDLKvbdtAGqIABS", - "DoCkKvbdZRMdhmEq", - "DnbkKvbdNsUVfeVQ", - "EPDLKvbdqwPkbiZR", - "DoCkKvbdNUsSLNAX", - "DncKjvbdmpZxvKyC", - "EPCkKvbdLYqKSztf", - "EPDKjvbdZyEKODMS", - "EPDKjvbdNGbomPuL", - "DncKjvbdZMSDtNlN", - "EPCjjvbdTXjkmzjx", - "EObkKvbdBdQAvKMf", - "EOcLKvbdkySrTYgU", - "DnbkKvbdZoOIddzK", - "DoCkKvbdZMSDsmkm", - "EPCkKvbdCWzdIdpW", - "DncLKvbdBvzdIdov", - "DoCjjvbdaRfDHtFk", - "DnbkKvbdWeyZtAOs", - "DoDLKvbdnCJwYPOV", - "DoCjjvbdEYYLstUM", - "EOcLKvbdwtldqZMO", - "EPCjjvbdFVxoomKF", - "EObkKvbdyqPMhiwA", - "DoDLKvbdkxrrSxgU", - "DoCjjvbdeATqNYKG", - "DncLKvbdJKEAJpHE", - "DoCkKvbddndsLUTr", - "DnbjjvbdqFceUWBI", - "DoDLKvbdhkddOUby", - "DncKjvbdGKdrcIMu", - "EPCkKvbdelevflik", - "DoDKjvbdhaoDFWqR", - "DoCjjvbdYlSDsmlN", - "EPCjjvbdiZuGLpmf", - "EObkKvbdnCJvxPNu", - "DnbkKvbdhzUelRNf", - "DnbkKvbdZeYGzgiC", - "DoCkKvbdDnbkLWbd", - "DnbkKvbdnHFYMmfy", - "DoCjjvbdePEsKtTr", - "DnbjjvbdZQmEhleR", - "DnbkKvbdTkunaVoJ", - "DnbkKvbdFWZPpMjF", - "DoDKjvbdSwkMNzkY", - "EOcLKvbdwtldpyMO", - "EOcKjvbdhkdcmtby", - "DoCjjvbdNQXqWNfs", - "EPDKjvbdzjUpPdTU", - "DnbjjvbdqceJPnWB", - "EPDKjvbdUyHsyjoO", - "EPCkKvbdZshhxcsO", - "DncKjvbdqAiFAWgd", - "EObkKvbdgFkzOGgA", - "DncKjvbdmgFYNNgZ", - "DoDLKvbdDjHjWYKA", - "DnbjjvbdJbicRKCx", - "DnbkKvbdfNFwHMjL", - "EPCkKvbdWSNxBdlD", - "EPDLKvbdCJKbLJFj", - "EPDKjvbdEOcKkXDE", - "EPCkKvbdVrOYCElD", - "DnbjjvbdCIkBjhej", - "DoDLKvbddoFTKstS", - "DnbjjvbduDDVXVoP", - "EObkKvbdxwiKCPzL", - "DnbkKvbdZGvdAPTJ", - "DoDLKvbdBdPaVjNG", - "EOcKjvbdIHGzYwxH", - "DoCjjvbdGFjSNhsq", - "DnbjjvbdlYsSSxgU", - "EPCjjvbdqrUjnKaN", - "EOcLKvbdtvOXipsA", - "DoDLKvbdrounjCuf", - "DoCkKvbdFVyPomKF", - "EOcKjvbdNHCpNPtk", - "EPDLKvbdWeyZtAPT", - "EPDKjvbdjcLkQfuH", - "EOcLKvbdzHZMAMeX", - "DoCjjvbdUMWPBVni", - "EOcKjvbdHELWKBjK", - "DoDKjvbdMgComQUk", - "DnbkKvbdiGjDZWJu", - "DncKjvbdyqOmJKXA", - "DoDKjvbdVZITyjoO", - "DoCjjvbdzQoNJJwA", - "EOcLKvbdGAoQxizm", - "DoDKjvbdatagYKsh", - "EPDKjvbdSBceMJYk", - "DoDLKvbdMpYQvOHT", - "DncKjvbdiCOcFWpq", - "DoCjjvbdUGznLvvF", - "EPDLKvbdANIYrvyx", - "EPCjjvbdIwtCHkpp", - "EObkKvbdJSyBSmYM", - "EObkKvbdwuMdqYlO", - "EObjjvbdmuVZkKSG", - "DncLKvbdSPsfjFdX", - "DoDLKvbdSQUHJedX", - "DoDKjvbdiVZdwSUb", - "EPDLKvbdRjxfVGkT", - "EObjjvbdmpZyVkZC", - "DncLKvbdhzUelROG", - "EPCkKvbdxVMeRZMO", - "EOcKjvbdxxIiapZk", - "EOcKjvbdJSyBTNYM", - "EPDKjvbdMSXMzUpz", - "EObkKvbdJmADzHVB" }; - - public static void main(java.lang.String[] unused) { - try { - BufferedOutputStream out = new BufferedOutputStream(new FileOutputStream("bad.out")); - for (int i = 0; i < strings.length; i++) { - out.write(strings[i].getBytes()); - out.write("\n".getBytes()); - } - out.close(); - } catch (Exception e) { - System.out.println("Some exception occurred"); - } - } -} diff --git a/hotspot/test/runtime/7158800/InternTest.java b/hotspot/test/runtime/7158800/InternTest.java deleted file mode 100644 index d0cd1c024f2..00000000000 --- a/hotspot/test/runtime/7158800/InternTest.java +++ /dev/null @@ -1,80 +0,0 @@ -/* - * Copyright (c) 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 7158800 - * @run shell/timeout=400 Test7158800.sh - * @summary This test performs poorly if alternate hashing isn't used for - * string table. - * The timeout is handled by the shell file (which kills the process) - */ -import java.util.*; -import java.io.*; - -public class InternTest { - public static void main (String args[]) throws Exception { - final String badStringsFilename = "badstrings.txt"; - - if (args.length == 0 || (!args[0].equals("bad") && !args[0].equals("normal"))) { - System.out.println("Usage: java InternTest [normal|bad]"); - System.exit(1); - } - - FileInputStream fstream = new FileInputStream(badStringsFilename); - DataInputStream in = new DataInputStream(fstream); - BufferedReader br = new BufferedReader(new InputStreamReader(in)); - String toIntern, toDiscard; - int count = 0; - long current = 0L; - long last = System.currentTimeMillis(); - - if (args[0].equals("bad")) { - while ((toIntern = br.readLine()) != null) { - toDiscard = new String((new Integer((int)(Math.random() * Integer.MAX_VALUE))).toString()); - toIntern.intern(); - count++; - if (count % 10000 == 0 && count != 0) { - current = System.currentTimeMillis(); - System.out.println(new Date(current) + ": interned " + count + " 0-hash strings - last 10000 took " + ((float)(current - last))/1000 + "s (" + ((float)(current - last))/10000000 + "s per String)"); - last = current; - } - } - } - if (args[0].equals("normal")) { - while ((toDiscard = br.readLine()) != null) { // do the same read from the file to try and make the test fair - toIntern = new String((new Integer((int)(Math.random() * Integer.MAX_VALUE))).toString()); - toIntern.intern(); - count++; - if (count % 10000 == 0 && count != 0) { - current = System.currentTimeMillis(); - System.out.println(new Date(current) + ": interned " + count + " normal strings - last 10000 took " + ((float)(current - last))/1000 + "s (" + ((float)(current - last))/10000000 + "s per String)"); - last = current; - } - } - } - in.close(); - } -} - - diff --git a/hotspot/test/runtime/7158800/Test7158800.sh b/hotspot/test/runtime/7158800/Test7158800.sh deleted file mode 100644 index 81fa7aca8a8..00000000000 --- a/hotspot/test/runtime/7158800/Test7158800.sh +++ /dev/null @@ -1,96 +0,0 @@ -#!/bin/sh -# -# Copyright (c) 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. -# -# -# Run test for InternTest.java -# - -if [ "${TESTSRC}" = "" ] -then TESTSRC=. -fi - -if [ "${TESTJAVA}" = "" ] -then - PARENT=`dirname \`which java\`` - TESTJAVA=`dirname ${PARENT}` - echo "TESTJAVA not set, selecting " ${TESTJAVA} - echo "If this is incorrect, try setting the variable manually." -fi - -if [ "${TESTCLASSES}" = "" ] -then - echo "TESTCLASSES not set. Test cannot execute. Failed." - exit 1 -fi - -# set platform-dependent variables -OS=`uname -s` -case "$OS" in - SunOS | Linux | Darwin ) - NULL=/dev/null - PS=":" - FS="/" - ;; - Windows_* ) - NULL=NUL - PS=";" - FS="\\" - ;; - CYGWIN_* ) - NULL=/dev/null - PS=";" - FS="/" - ;; - * ) - echo "Unrecognized system!" - exit 1; - ;; -esac - -JEMMYPATH=${CPAPPEND} -CLASSPATH=.${PS}${TESTCLASSES}${PS}${JEMMYPATH} ; export CLASSPATH - -THIS_DIR=`pwd` - -${TESTJAVA}${FS}bin${FS}java ${TESTVMOPTS} -fullversion - -${TESTJAVA}${FS}bin${FS}javac -d . ${TESTSRC}${FS}InternTest.java - -cp ${TESTSRC}${FS}badstrings.txt . - -${TESTJAVA}${FS}bin${FS}java ${TESTVMOPTS} -XX:+PrintStringTableStatistics -XX:+TraceSafepointCleanupTime InternTest bad > test.out 2>&1 & -C_PID=$! - -sleep 60 - -ps | grep ${C_PID} | grep -v grep - -if [ $? = 0 ] -then - kill -9 ${C_PID} - echo "Test Failed" - exit 1 -else - echo "Test Passed" - exit 0 -fi diff --git a/hotspot/test/runtime/7158800/badstrings.txt b/hotspot/test/runtime/7158800/badstrings.txt deleted file mode 100644 index d7f76fb838e..00000000000 --- a/hotspot/test/runtime/7158800/badstrings.txt +++ /dev/null @@ -1,30001 +0,0 @@ -EOcLKvbddZyPxYpb -DncLKvbdPxmAGrqj -DoCjjvbdpxoIHQdY -EPCkKvbdqYoHfqEY -DnbkKvbdezvYdiUX -DnbjjvbdeEoRbXCj -EObkKvbdbsCkUEKB -EOcLKvbdnUtyjiqf -DncLKvbdRWnDcMHc -DoCkKvbdrSUkOLAm -DncLKvbdfNFwGmJk -EPDLKvbdvAdYroFI -DoDLKvbdiGibyViu -DncLKvbdYqNEhmFR -DoCkKvbdEARhlzXX -DncLKvbdSZjHsCvA -DncKjvbdqTsgRqkU -DnbjjvbdqAiFAXHd -EPDKjvbdGcjvJaij -DnbkKvbdwtldpxkn -DoDKjvbdYkrETnMN -EPCjjvbdbBWEfQQX -EPCjjvbduMXwAtBX -DncLKvbdbsCkTcia -DoCjjvbdczYpYZRC -EOcKjvbdFeiqmhsq -DoCkKvbdKCicQibx -EOcKjvbdZLrEUOLm -DoCjjvbdaNKbStmH -DoDKjvbdJbjDQjDY -EPCkKvbdemFwGmKL -EPDKjvbdZQleImEq -DncKjvbdZjShPfbG -DnbjjvbdqYnhHREY -DoCkKvbdaRfDIUGL -DoDKjvbdLrWlyuQz -DnbjjvbdZisHofaf -EObjjvbdhtydvrUb -DnbjjvbdRotHKGEX -EObjjvbdNeEThhkE -EPCjjvbdZtJJZESn -DoDKjvbdnPyxvLYb -EPDKjvbdeEoRbWbj -EOcLKvbdFxttaEXb -EObjjvbddwystRez -EPCjjvbdJpzEnenF -DnbkKvbdTppntuIN -EPCkKvbdTukpKUBR -DnbkKvbdhlFEOUcZ -EObkKvbdlhdUQuRa -DnbjjvbdkClKqHUg -EOcKjvbdqTtGqqkU -DncKjvbdtkwvaUBX -DoDKjvbdsQWOjCuf -DncLKvbdEKIJuwjA -DncKjvbdGLErcIMu -EOcLKvbdNPwpumfs -EObkKvbdnVUzLJrG -DoCkKvbdcTDKsdKB -DncKjvbdKRZdoFme -EOcLKvbdemFvgNKL -EPCkKvbdznopdblY -EPDLKvbdOYPVzdOU -DnbjjvbdsZlPsAhO -DoDLKvbdKCjDRKDY -DoCkKvbdhuZeXSVC -EPDKjvbdOStVgEtp -DncLKvbdvwMAvBWV -EPDKjvbdBcoaWJlf -EOcKjvbdZxdKODMS -DoCjjvbdbsCkTcjB -EOcLKvbdwWlAuaWV -DnbjjvbdFejRnJUR -DnbjjvbdmIdTqVSB -DnbkKvbdqBIeAWhE -DncKjvbdrMzJyMIJ -DoCkKvbdZGvdAOsJ -DncLKvbdjggLfFnL -DoCjjvbdYqNFJMdq -DoCkKvbdqZPHfqDx -DncLKvbdOEdThiLE -DoCkKvbdZirgpGaf -EPDLKvbdziuQPdSt -EObkKvbdKQyeOenF -DoDLKvbduaDySndh -DoCjjvbdVUNUGLvK -DncKjvbdAMhYrvzY -DnbkKvbdnQZxvKxb -EPCjjvbdBhjakJFj -DncLKvbdmfeYNNfy -DoDLKvbdjlbLydfo -DoDLKvbdpyPIGpcx -EOcLKvbdnVUzLJqf -DoCjjvbdmJETqVSB -DoDLKvbdJTZAsMxM -DoCkKvbdnQZxvLZC -DoDKjvbdACqwizJQ -DncKjvbdvBEZSoFI -DncKjvbdGckVjCJj -DncLKvbdiMFENtcZ -Dnbjjvbdjuvmcaww -DnbkKvbdZyEKNblS -DoCjjvbduMYXBUBX -DnbjjvbdFWYopNJe -DoDKjvbdelfXGljL -DnbjjvbdakLenmcA -EPDKjvbdfILWRmpg -EObjjvbdSLYeuHLT -DoCjjvbdMfbolotk -EPDLKvbdrRuKnKaN -EOcKjvbdyzdnRhIh -DoDLKvbdGAoRZJzm -DoCjjvbdhlFDnUcZ -EPDLKvbdmpZyVkYb -DncKjvbdTpqPUuIN -DncLKvbdHDjvJaij -EPDLKvbdYlRcsmkm -EPDLKvbdvlvAMdFN -DncKjvbdIsZArmYM -EOcLKvbdegjuqnQg -EOcLKvbdZQmFJNFR -DoCjjvbdZxdJmcMS -EPCkKvbdlZTSTYgU -DoDKjvbdqceJPnWB -DncLKvbdVgwuxGxz -DncKjvbdDnbkLXDE -EPDLKvbdatbHYKsh -DncKjvbdEzsqFLbi -EPDLKvbdnVVZkKRf -EOcKjvbdKeegbBQu -EPCkKvbdKfGHaaRV -EPDKjvbdmIctRVRa -EPCjjvbdRMxBxnUz -DnbjjvbdJYTbILpp -EPCkKvbdTAEiHbPE -EOcLKvbdfelZnGgA -DoCjjvbdOStWGeUp -EOcLKvbdemGXHNJk -DoDKjvbdYTMAmUOx -EPCkKvbdpyOhGpcx -EPCkKvbdAMgxsWzY -DnbjjvbdYkrETnMN -EPDLKvbdUQqPUtgm -DncKjvbdehKurNqH -DoCjjvbdZMSETnLm -DoDKjvbdIHGyyXwg -EObjjvbdXGYzUAPT -DoCjjvbdhbPCeWqR -DoCkKvbdKNADzGuB -DnbjjvbdFeirOJTq -DncLKvbdaRecHtFk -DnbkKvbdzoPpeClY -EObkKvbdZRMeJMeR -DnbjjvbdYfvdAPSi -DncLKvbdJcKCqJcY -EOcLKvbdqvokbhyR -DoDLKvbdrRuLNjaN -DoCjjvbdTlWPBWOi -DoCkKvbdjvWnEBxX -DoDLKvbdTkunaVoJ -DoCkKvbdQZNAHTSK -EObjjvbdqwPkbhyR -EOcLKvbdNHDPlpUk -DncLKvbdIHHZxxYH -DncLKvbdtkxXAtAw -DncLKvbdSCEFMJZL -DnbjjvbdZQmEhldq -DoCjjvbdNGbolotk -DnbjjvbdnCKWwnmu -DncLKvbdzHZMANEw -DoDKjvbdmttykJrG -DnbkKvbdlrZUzSci -EPDKjvbdSKyGVHKs -DoCjjvbdKVuGEFGi -EPCjjvbdCIkBkIej -DncLKvbdzHZMAMeX -DnbkKvbdaSFbgsek -DncLKvbdHDjujBij -DoDKjvbdGZVUaDwb -DnbjjvbdZnnJFEzK -DoCkKvbdtcDUwWOo -DoCkKvbdlBMoNALA -EOcKjvbdNsUWHFUp -DoDLKvbdVUNUFlVj -DnbkKvbdhkdcnUcZ -DncLKvbdLiBkqYAS -EOcKjvbdzoPpdcLx -EPDKjvbdijGIJmXr -EOcKjvbdZisHofaf -DoDLKvbdeOdrkUUS -DoDLKvbdnPyxvKxb -EPDKjvbdIxUBhMRQ -DncLKvbdlhctRUqa -DoDLKvbdmgFXlnGy -DncKjvbdCJKbKiGK -EOcLKvbddndrjtUS -DnbjjvbdkDLjqGuH -DncKjvbdmIcsptqa -DoCkKvbdvvlAvBWV -EObjjvbdjblLQftg -DnbjjvbdCEQBWKMf -DnbjjvbdBdPaVilf -DoCkKvbdZxcjODLr -DoCkKvbdEObjjwCd -EPDKjvbdyTNhlqbH -EPCkKvbdUMVoAvPJ -DncKjvbdUxhUZjoO -DncKjvbdqqtjmkAm -DncKjvbdKfGICBRV -EPCjjvbdVrOXaeLc -EPDLKvbdwXLaWBWV -EPCkKvbdjblKqHUg -DnbjjvbduDCuWuoP -EPDKjvbdNGbpMouL -EObjjvbdBcoaVjNG -DncLKvbdrWpMDIxq -DncLKvbdhaoCdwRR -DnbkKvbdFxtuBDwb -DncKjvbdIjEAKPgE -EOcLKvbduCbuXVoP -DoDKjvbdZtIiZDsO -DnbjjvbdEztRElCi -DncLKvbdxmsHwsJD -DnbjjvbdRbEElIxk -DoDKjvbdWHwvXgYz -EOcKjvbdQlwbYnUz -EOcLKvbdVTltFkuj -DncKjvbdliETptqa -DnbkKvbddoErjtTr -DoCkKvbdgPazvdXh -DncKjvbdySmhlqag -DoCjjvbdbPgHDkzd -DoCkKvbdFWZPomKF -EObjjvbdssSSxydc -EObjjvbdzQnliJwA -EObkKvbdKCjCpibx -EPCjjvbdpyOhHREY -DncLKvbddjJqutzn -EObkKvbdBdQAujMf -EPCkKvbdLAjflbXq -DncLKvbdLBLGlaxR -DoDLKvbdrpWPJbuf -DoCjjvbdEKHiuxKA -DoCjjvbdXsMAlsnx -EObkKvbdptTgSSLU -DoDKjvbdnHFXmNfy -DncKjvbdCJKbKhej -EPCjjvbdhlEdOUby -EOcKjvbdKWUfEFGi -DoDKjvbdZQmFJMdq -EPCjjvbdiGjDZWKV -EObkKvbdVAbQrprZ -DoDKjvbdfekzNgHA -DoDLKvbdnHEwlmgZ -DncKjvbdwzHeexEr -DoCjjvbdmpZxujyC -EPDKjvbdwMvAMcdm -DoCjjvbdfHkVrNqH -EPCkKvbdYzbfRiuy -EPCkKvbdZtIiZDrn -DnbjjvbdjvWnDbYX -DoCjjvbdOStVgEtp -EPDLKvbdZMSETmlN -EPDKjvbdBhjajhej -EPCjjvbddoFTLUUS -DnbkKvbdsQVoJcWG -EPCjjvbdrEFJQNvB -DoCjjvbdMpYRWOGs -EOcLKvbdZirgpHBf -EPDLKvbdyOTIXsJD -DoCkKvbdKRZdnfNe -DnbjjvbdbBWFFoow -EPCjjvbdgFlZnHHA -DnbkKvbdGGJrOIsq -DoDLKvbduDCtwWPP -EObjjvbdNddUIhjd -DnbjjvbdxsNiMqag -EObjjvbddeOrCWbj -EObjjvbdPxmAGsRj -EOcLKvbddeOrCXDK -DoDLKvbddeOrBwCj -DoCjjvbdVqnYCElD -DnbkKvbdUyIUZjoO -EObjjvbdeFOrCXDK -EObkKvbdVrNxCFLc -EObjjvbdTfzmkwWF -EOcKjvbdIHGzZYYH -EPDKjvbdtbbuXWPP -DoCjjvbdZisIQHBf -EObjjvbdbsCkUDjB -EPCkKvbdVwJXudFH -EPDKjvbdrouoKDVf -EPCkKvbdFyVVBEYC -DncLKvbdZnnIeEzK -EPDLKvbdxVNFQxkn -DoDKjvbdpxnggRDx -DoDLKvbdqZOgfpcx -DncKjvbdCIjakJGK -EPCkKvbdCJLBjhej -DoDLKvbdnPzYvKxb -EOcKjvbdqTsgSRkU -EOcLKvbdLBLGlaxR -DoDLKvbdcbTMrAUN -DncLKvbdzitoodSt -DoDKjvbdJvUfDdfi -EOcLKvbdHDjvKCJj -EPCkKvbdeOeTKssr -DnbkKvbdlYrqsYft -DncLKvbdiiehKMxS -DncKjvbdURQoVUhN -DnbkKvbduMYXBUAw -DoDLKvbdSPtHJfEX -EObkKvbdqBJFAWgd -EOcKjvbdFpATWgFy -DoDLKvbdBsBDTfXS -DncKjvbdjhHLfFmk -DoCjjvbdCJKakIfK -DnbkKvbddoFSjtTr -EObkKvbdANIYsWzY -EObjjvbdCTAbtFvr -EObjjvbdrRtkOLAm -DnbkKvbdkxsSTYgU -DoCjjvbdnBiwXnmu -EObjjvbdwtmEqYlO -EPDKjvbdrylQTAhO -DoDLKvbdtbbtvvOo -EPCjjvbdZLrETmlN -EPDLKvbdWXJYWDdg -DoCkKvbdKQzFOfOF -EPCjjvbdwzIFfXeS -DncKjvbdRjyFuHLT -EPDLKvbdULunaWPJ -DncKjvbdUxhTykOn -DnbkKvbdJcKCqKDY -EPDLKvbdcbSmSATm -DnbkKvbdegjurNqH -EPDKjvbdZjTIQGbG -EPCjjvbdiLddNuCy -DoCjjvbdZQldiNEq -EOcLKvbdakMGPODA -EObjjvbdnHEwlmgZ -EOcLKvbdBsAcUGXS -EPCkKvbdiVZdwSUb -EOcLKvbddCTNSAUN -DnbkKvbdEXxMUUUM -DncKjvbdYpldiMeR -DoDKjvbdNddTiIjd -DoDLKvbdZLqdUNlN -EPCkKvbdiBncFWpq -DncLKvbdiCPDEvqR -EOcKjvbdUyHszKoO -DncKjvbdhtydvqtb -EPCjjvbdpxoHgQcx -EObkKvbdkWWnDaxX -DnbjjvbdBhkBkJFj -DoCkKvbdRacdkhyL -EOcLKvbdZjTHpHCG -EPCkKvbdMowqWOGs -DncLKvbdegjurNpg -EObjjvbdfMfWfmKL -EPDLKvbdZirgpGaf -DoDLKvbdiZuFlQnG -DncLKvbdFxuVAcxC -EObkKvbdZisHofaf -EOcKjvbdJSyBSmYM -EPDLKvbdVYgtZkPO -EOcKjvbdRbEFMJYk -DncLKvbdrEFIonWB -DncKjvbdKDJbqJcY -EOcLKvbdhfjCxuiu -EObjjvbdLLAhWAKZ -DoCkKvbdRXNcblID -DoDLKvbdcbSmSATm -EOcLKvbdwWlAvAuu -EObkKvbdiBnbdvpq -DoCkKvbdNQXpumgT -DncLKvbdkVwOECYX -DnbkKvbdfoazwDxI -DoDLKvbdbBWFFpPw -DoDLKvbdvBDxsPEh -EPDKjvbdJqZdoFme -DoDLKvbdIryArmXl -EPCjjvbdANIZSwZx -EPCkKvbdVhYVxGxz -DncKjvbdLAjgNCYR -DncKjvbdxxIjCQZk -DncKjvbdbiNKKewY -EPCjjvbdlrZVZsEJ -EPDKjvbdIryAsMwl -DoCkKvbdtAHRIAAr -EPDKjvbdJmAEZfuB -EPCkKvbdZjSgogBf -DoDLKvbdOXnuzcnU -DnbkKvbdehKvRnQg -EObjjvbdZyDimbkr -DoDKjvbdmajWwoOV -EOcKjvbdkMalZeHP -EOcKjvbdIjEAJpHE -EPCkKvbdDihKVxKA -DncKjvbdNddUIiKd -EObjjvbdqdFIpOWB -DoCkKvbdxnShXsJD -DoDLKvbdjmBkzEfo -EOcLKvbdatagYLTh -DoCjjvbdVhYVxHYz -DnbjjvbdJbjDRKDY -EPCjjvbdLBLHNCYR -DnbjjvbdnGeYNOGy -EOcLKvbdUsmTekvK -EPCjjvbdtkxXBTaX -EPCjjvbdzoPqFCkx -DncKjvbdCIjbKhej -DncKjvbdZLqdTmkm -DoDKjvbdsPunicVf -EOcKjvbdmgFXmNgZ -EObkKvbdiMFENuCy -DoDKjvbdhanbeXRR -EObkKvbdACqwiyhp -DncKjvbdZisIQHBf -EPCjjvbdgQBzwDwh -DnbjjvbdyYJJaoyk -DoDKjvbdxUldqZMO -EObkKvbdkClLQgVH -EPCjjvbdZQldiMeR -EPDLKvbdZyEKOClS -EPDLKvbdcIlikFvx -DoDKjvbdrzMQTBHn -DnbjjvbdVYgtZkPO -DoDLKvbdHEKuiajK -EPCkKvbdczZQXxqC -DoDKjvbdrDdiQNua -DncLKvbdcImKLGWx -DoCjjvbdVYgtZkPO -EPDLKvbdZnnIeFZj -EPDKjvbdMIakqYAS -DoCkKvbdSLYfUgLT -EPDLKvbdiCObdvpq -DnbjjvbdRpUHKFcw -DoDLKvbdIHHZyYXg -EPCjjvbdypoMhiwA -DnbkKvbdCEPaVjMf -DnbkKvbderAvzlDP -DnbkKvbdZQleImFR -EOcKjvbdKRZdneme -DoDLKvbdiBnbeXQq -DncLKvbdEPDKjvcE -EOcLKvbdauCGwkTh -DncLKvbdEvZQPmJe -EPCkKvbdURQnuVIN -DncLKvbdegjvSOQg -EPCjjvbdKaKgMawq -DnbkKvbdRzKISbvA -DncLKvbdiLdcnUcZ -EPDLKvbdkDMKpfuH -DoDLKvbdRbDdkhyL -DnbjjvbdDwxMUUTl -DnbkKvbdrpWPKCuf -DnbkKvbdNVSqjmAX -DoDKjvbdRbDeMIxk -EOcLKvbdcyxpXyRC -DncLKvbdRMwbYnUz -EObjjvbdqlzJxlHi -DoCkKvbdJYUCIMQp -DncLKvbdLZQjSzuG -EOcKjvbdxVNEqYkn -DnbkKvbdZoOIeFZj -DoCjjvbdBraCtFwS -EOcLKvbdliDsqVSB -EPCkKvbdeATqNXif -DncLKvbdkMbLydgP -EObjjvbdZxdJmbkr -DoCjjvbdraellHLZ -EObkKvbduDCuWvPP -DoCkKvbdpstGrSLU -DoCjjvbdLGFgbBQu -DnbkKvbdhtzFWquC -EObjjvbdoAKztHdO -EPDLKvbdatafxKtI -EPDKjvbdkWXNcaww -DoCkKvbdwkXEHzzG -EObkKvbdmgEwmNgZ -DncKjvbdBiLCLJFj -DoCjjvbdeOdsKssr -EOcLKvbdfILWSORH -EObkKvbdCDpAujMf -EPDKjvbdKDKDQibx -DoDKjvbdVUMtGLuj -EObkKvbdrXQMCiYq -DncKjvbdePEsLTtS -DncLKvbdDxYLtUTl -EPCkKvbdGYuVBEYC -DncLKvbdNeEUIiKd -EPCkKvbdpxoIHRDx -EObjjvbdFkEsDHlu -EObjjvbdssSSxzFD -DoCkKvbdUtNTfMVj -DnbjjvbdJcKDRKDY -DncKjvbdqiAKEmOe -DoDKjvbdtlXwAtBX -DnbkKvbdxmsIYTIc -EObkKvbdLrXMzUpz -DoCjjvbdkxsSSxft -DncKjvbdQlwaxnUz -EObkKvbdjhGlFfNk -EPCkKvbdxsNhmRag -DoDLKvbdMfcPmQUk -DoDKjvbdQvnEDLhD -EObjjvbdVgxVxHYz -DoDLKvbdlrYtyrdJ -DoCjjvbdezvYeIsw -DncLKvbdNddTiIjd -EPDLKvbdGGJrNiUR -EPDLKvbdRzJhTDWA -EPCjjvbdvvkaWBVu -EOcKjvbdRXNdCkgc -EOcKjvbdQZNAHTSK -EPCkKvbdsCGNLfkZ -EOcLKvbdDwwktTsl -EOcLKvbdqlzJyLgi -EOcLKvbdxsNiMqag -EOcLKvbdhzVFlROG -EOcKjvbdEztRFMCi -DnbkKvbdqiAJdmPF -EPDLKvbdjcMKqGtg -EObkKvbdTlWOaWOi -EPDLKvbdURRPUuHm -DoDKjvbdelfWgNKL -EOcLKvbdGAnqZJzm -EObjjvbdGZUuAdXb -DoDLKvbduLwwAtAw -DoCjjvbdZjTIQGbG -EPCjjvbdRNXbYnUz -EPDLKvbdiLeENtby -EObjjvbdMowpunGs -EOcKjvbdbiNJjevx -DoDKjvbdEYYLstTl -DoDLKvbdqUTfrRjt -DoDKjvbdbsCkUEJa -DoDKjvbdXsMBNUPY -EPCjjvbdRNXaxnUz -DoDLKvbdNGcQNQUk -DnbjjvbdEARiMywX -EPDKjvbdSKxfUfkT -DncKjvbdhtyeXRtb -DncKjvbdZLqcsnLm -EObkKvbdZnmheEzK -EObjjvbdtbcUvuno -DnbjjvbdrzMQTBHn -DnbjjvbdDwwktTsl -EPDKjvbdkxsSTYgU -DoDKjvbdIryArlxM -DoDKjvbdnBivxOnV -DoDKjvbdeATplwif -EOcLKvbdKeegbApu -EPCjjvbdMgDQMotk -DoCjjvbduCbtwWOo -DnbkKvbdyNsHwrhc -DnbkKvbdtvNxJpsA -EOcLKvbdqAheAWgd -DoCkKvbdURQoUtgm -EOcKjvbdqceIpOWB -DoCkKvbdVwIwudFH -DnbkKvbdbLMFnmcA -EOcLKvbdZjTHpHBf -EOcKjvbdRXNdCkhD -EPDLKvbdiHJcZViu -DoCjjvbdxxIjCPzL -DnbkKvbdBcpBWJmG -EPCkKvbdZyEKOCkr -EPDKjvbdOTUWHFVQ -DoCjjvbdIGgZxwwg -EPDLKvbdFjeSbhMu -EPDLKvbdhgKCxvJu -EOcLKvbdNsUWGdtp -EPDKjvbduVnXipsA -DncLKvbdGYuVBEXb -EPDLKvbdZtIhyESn -DoDKjvbdZxdJmcLr -DoCjjvbdUsltGLuj -DoDKjvbdDoDLKvbd -DncLKvbdrDdhpNvB -EPDLKvbdKCjDRJbx -DoDLKvbdxLWdHzyf -EObkKvbdrzMQTAhO -EOcLKvbdOFDtJJKd -EPCkKvbdrSVKmjaN -EOcKjvbdWWiYVdEg -EOcKjvbdWWhwvDdg -DncKjvbdpstHRqjt -EPCkKvbdKWVFceGi -DoCkKvbdZjShPfbG -DoCkKvbdSxKlNzkY -EPDLKvbdIwtCHkqQ -EOcKjvbdsCGNLgLZ -DncKjvbdzaAOfgCM -DoDLKvbdxmrhYSiD -DncLKvbdfMfWgMjL -EPDKjvbdqFdEsuaI -EOcLKvbdiLeDnUcZ -DoCjjvbdKVuFceHJ -DoCjjvbdfekzNgHA -EOcKjvbdOFEThiLE -EPDLKvbdqceJPnWB -DoDLKvbduCbtwWOo -DncKjvbdTqROtuIN -DncKjvbdpedFUWBI -DoDLKvbdrEFJQNua -DoDLKvbdyXhjCPyk -EPCkKvbdJYUBhLqQ -EPCkKvbdtcCuXVno -DoDLKvbdZLrEUOLm -EPCkKvbdpstGrRjt -DncLKvbddePSCXCj -EObkKvbdauCHXjsh -DoDLKvbdkHfkefNk -EObjjvbdMRwMzUpz -EObjjvbdaMkCTVNH -DoCkKvbdGGJrNhtR -EPDLKvbdvBDxrneI -EPDLKvbdIHHZxwxH -EOcLKvbdrJAJdmPF -EOcKjvbdGZUuAdXb -EOcLKvbdbUbHYLUI -DnbjjvbdJzofYEAN -EPDKjvbdFxtuBDxC -DnbkKvbdQvnDbkgc -EPDKjvbdJmADzGta -DoDKjvbdZRMdhleR -DnbkKvbdsrqsZZeD -EObkKvbdrovPJbuf -EPCjjvbddeOqbXCj -EObjjvbdtcDVXVoP -DncKjvbdMfbpNQVL -DoCkKvbdhbPCeXQq -DoCkKvbdNHComQVL -EObjjvbdvBDxroFI -EPCjjvbdnBivwoNu -EObjjvbdbhljKewY -EPDKjvbdZyDimcMS -EObkKvbdWSOXbElD -EOcKjvbdTfznMXVe -EPCjjvbdZtJJYcsO -DoCjjvbdRjxfVHLT -DoCkKvbdVTltGMVj -DncKjvbdYfwEAOri -DncKjvbdYkrEUOMN -EObkKvbdqGEEsuaI -DncLKvbdjJfHimXr -EPDLKvbddndsLUTr -DnbkKvbdqBJFAWhE -EPDLKvbdEOcKjwDE -EPCkKvbdtvOYJqTA -DncLKvbdkyTRsZHU -DoCjjvbdTppnuVIN -DncLKvbdwyhFeweS -DncKjvbdsBelkgKy -DoCjjvbdKDKCqJcY -DoCjjvbdkClKqHVH -DoCjjvbdcTCjtDia -EPDLKvbdUVkpJtAq -EPDLKvbdRyjITCvA -DnbjjvbdJuuFcdgJ -DoDKjvbdrJAJdmOe -DncKjvbdJcJbqKCx -DoDLKvbdJcJbqJcY -DoDKjvbdeEoSCXDK -DoDLKvbdSwjlNzkY -EObjjvbdzitopDrt -DoCkKvbdKWVGEEgJ -DncKjvbdpssfqrKt -EOcLKvbdUMWPBVoJ -DncKjvbdyzdmrIIh -EPCjjvbdxUldqZLn -DoDLKvbdySnImRbH -DoCjjvbdGdKvJaij -DoCkKvbdxZgeewdr -EObkKvbdiLddNuDZ -DnbjjvbdSCDdkiZL -DncKjvbdznpREcMY -EOcLKvbdaRebhTfL -DnbjjvbdZQldiMdq -EPCjjvbdbrbjtEKB -EOcKjvbdEARiMzXX -DoDLKvbdXrkaNTnx -EPCkKvbdQZNAHTRj -DoDLKvbdEzspeLcJ -EPCjjvbduVnYKRTA -EObjjvbdJXtBhMQp -EPDKjvbdeOdrjssr -EPCjjvbdLqwMytpz -EPDKjvbdUMVoBVoJ -DncKjvbdRpUGifDw -EPDLKvbdZyDinDLr -DnbkKvbdNrsufeVQ -EPCkKvbdZMSDtNlN -EPCkKvbdySnJNSCH -EPCjjvbdfMevfljL -DncLKvbdXsMBNTnx -DnbkKvbdpxoHfqDx -DncLKvbdUQpntthN -DncKjvbdIsZArlwl -DoDLKvbdZGwEAOsJ -EOcKjvbdVvhwvDdg -EOcLKvbduWNxJqTA -EPCjjvbdHEKvJaij -DoDKjvbdrpWOjCuf -DncLKvbdrpWOjDVf -DoCjjvbdIHGzYwwg -DoDLKvbdpxoIGqEY -DoDLKvbdJcJbqKDY -DoCjjvbdRWmdClHc -EPCjjvbdFWYopNJe -DncKjvbdmfdwlmfy -DoCkKvbdxUleQxlO -EObjjvbdnGdxMnGy -EPCjjvbdvvlAvBVu -DncLKvbddndsKssr -EObjjvbdZMRcsnLm -EOcKjvbdFxttaEXb -DncKjvbdVUNTfMVj -EOcLKvbdNrtWHFUp -DoDKjvbdwuMdqYlO -EPDLKvbdrXPkbhxq -EObjjvbdrEFIpNua -EObjjvbdziuQQDrt -EOcLKvbdqYoIGpcx -DnbjjvbdsQVoJcVf -EObkKvbdkDMKpgUg -EObjjvbdvBDyTPFI -DncKjvbduCbuWvOo -EPCjjvbdkVvnECYX -DncLKvbdZGvdAOri -DoCkKvbdrXPlDJZR -EOcLKvbduCcVWvOo -DoDKjvbdCEPaWJlf -EPDKjvbddoErjssr -DncKjvbdACqxKZiQ -EPCjjvbdUVlPitAq -EPDKjvbdjJfHjMxS -EObkKvbdAMhYsWzY -DoDKjvbdnBivxOmu -EOcLKvbdbiNKKfXY -EPDKjvbdYqMeIleR -EObkKvbdJmADygUa -EObjjvbdEPDLLWcE -EPCjjvbdrXPkcIxq -EOcLKvbdliDtQtqa -DoCjjvbdmoyxujyC -EPDLKvbddoFTLTsr -EOcLKvbdCWzdJEpW -DnbjjvbdrEEhpOWB -DoDKjvbdZLrDtNkm -EOcLKvbdLFfHbAqV -EOcKjvbdmttzLKSG -EOcLKvbdmbJvwoOV -EOcKjvbdUaCQrqSZ -DnbjjvbdmgExMnGy -EPDKjvbddndrkUUS -EObkKvbdDwwkstTl -DoCkKvbdcJMjLFwY -DnbjjvbdaNLBruMg -DoDLKvbdQYmAHTRj -DnbkKvbdsQWOicWG -EObkKvbdMRwMzUpz -DoDLKvbdZshiZDrn -EPDLKvbdnPzYujxb -EOcKjvbdCEQAujMf -EPDLKvbdKefHbApu -DoDLKvbdYpldiNFR -DoCkKvbdFWZQQNJe -DncLKvbdznpQeCkx -EOcKjvbdnQZxvKxb -DoCkKvbdVBBprpqy -DnbkKvbdZirhPfaf -DnbkKvbdegjvSNqH -EOcLKvbdqdEiPnWB -EObjjvbdBhkCKiGK -EObjjvbdxZgfGYFS -DnbjjvbdNQYQumgT -EPCjjvbdxsNhlrBg -DoCkKvbdQdDApRDr -DoCkKvbdxxIiaoyk -EPDKjvbdFeirNhtR -DoCjjvbdegjvSOQg -EObkKvbdqcdiQNvB -DncLKvbdiMEdNtcZ -DncLKvbdTqRPUthN -EPCkKvbdwygeexFS -DoDKjvbdyTOJMrBg -DncLKvbdeEoRavbj -EPCjjvbdtbcUvvOo -EObjjvbdKCicRJcY -EObjjvbdZyEKODMS -DnbjjvbdmJDtQtrB -DncLKvbdEARhlyvw -DnbjjvbdIxTbILqQ -EOcLKvbdwygefYFS -DoCjjvbdznoqFCkx -DoCjjvbdRpUGjGDw -DncKjvbdhzVGMQnG -EPCjjvbdhkeDnVCy -EObkKvbdOEdUIiKd -DncKjvbdrDeIomua -DncLKvbdiHJbxuiu -EPDKjvbddxZstRez -EPDLKvbdmSYuZrdJ -EObkKvbdVUNUFkvK -EPDLKvbdNeEUJIjd -DoCkKvbdiMEdNuCy -DoDLKvbdRDcApQcr -EPCjjvbdTlVoBVoJ -EObjjvbdLBKgNBwq -EPCkKvbdsCFllHKy -EObjjvbdnVUzLJqf -DoDKjvbdqrVLNkBN -DoCkKvbdqFcdtWBI -DncLKvbdbVCGxLTh -EOcLKvbdeFPSCXCj -EOcLKvbdRpTgKFdX -EObjjvbdznpQeDLx -EOcKjvbdjvXNcaxX -DnbjjvbdHDkWJbJj -DncKjvbdhkeENuDZ -DnbkKvbdnUtyjjSG -DoDKjvbdSQUHJfDw -DncKjvbdbUbHYLUI -EOcLKvbdNsTvGduQ -EPDLKvbdSZigsCvA -DncKjvbdMfcPlpUk -DoDLKvbdxrnIlrBg -DncKjvbdiLdcnVCy -EPCjjvbdmfeYNOHZ -DoCkKvbdjvWmcaxX -DoDKjvbdbUbHXkUI -DncKjvbdBhkBjiFj -DoDLKvbdNHColpVL -EOcKjvbdrykosAhO -DncLKvbdqGDeUVaI -DnbkKvbdhgJcZViu -DnbjjvbduLxXAtBX -EPCjjvbdYpleJNFR -EPDLKvbdQvmdClHc -DnbjjvbdJYTbIMRQ -DncLKvbdznpRFDMY -EOcLKvbdZnmiFEyj -DnbkKvbdrRuLOLAm -EObkKvbdhkeEOUby -DncLKvbdYlSEUOLm -DoCjjvbdhkdcmtby -DncLKvbdddnrCXDK -DoDLKvbdKaLHNCYR -EOcKjvbdcyxpYZQb -EPDLKvbdACqwjZhp -DoCkKvbdBsBDTevr -EObkKvbdeKJqvUzn -EObkKvbdcImJkGWx -DncLKvbdYSlAltOx -DncLKvbdlrYtyrdJ -EObkKvbdKxqJrztf -EOcKjvbdsQWPJcVf -DoDKjvbdkySqrxgU -EObjjvbdeEoRbXCj -EOcKjvbdHDkVjBij -DoDLKvbdCTBCsfXS -DoCjjvbdKCjDQibx -DoCjjvbdlhdTqUrB -DoDKjvbdTulQKTaR -DoCkKvbdRjxetfkT -EPCjjvbdEuyQQNKF -EPCjjvbdDoDKkXDE -DoCjjvbdsQWPJbuf -DoDKjvbdhuZdvqtb -EPDLKvbdiHKCyWJu -EPDLKvbdLFegaaQu -DoCjjvbdqZPHgRDx -DncKjvbdUWMPjUAq -DoDLKvbdTYKkmzjx -DoDKjvbdegjvSOQg -DnbkKvbdUtNTekvK -EObkKvbdNsTvGeVQ -DoDLKvbdfNFvgMjL -EOcLKvbdZQmEiNEq -EPDKjvbdBraDTfWr -EPDKjvbdNGcQNQVL -EPDLKvbdZyEKODMS -EOcKjvbdBvzdIdpW -EPCjjvbdACqwiyiQ -DoCjjvbddePRawCj -EPDKjvbdWWiXucdg -DoDKjvbdWexzUAPT -DnbjjvbdwXMBWBWV -EOcLKvbdUyHszLOn -EPCkKvbdOYOuzcnU -EPCkKvbdhancEwQq -DnbkKvbdjggLefOL -EPCkKvbdFjdsDIMu -DoDKjvbdrSUjmkBN -DoDLKvbdZjTIQGaf -DoDKjvbdMgDPmPtk -EPDLKvbdWRmwbFMD -DoCkKvbdzROmJKXA -DnbkKvbdrDdiQNvB -DnbjjvbduDCtwVoP -EOcLKvbdCIjbLJFj -EPDKjvbdXrkaMsnx -EPDKjvbdVhXvXfxz -DncKjvbdhbPDEwRR -DoCkKvbdpxoHgQcx -DoCkKvbduMXwBUBX -EObjjvbdNeEThhjd -DoCjjvbdirzhrkJz -DoDLKvbdaMkCTUlg -DncLKvbdWRnYBeLc -DnbjjvbdGBPRZJzm -EOcLKvbdeOeSjstS -DoDLKvbdmIctRVSB -DoCjjvbdZxdJnDMS -DoCkKvbdRpTgKFcw -DncLKvbdTukojTaR -DnbjjvbdKRZdoFme -DnbkKvbdURQoVUhN -DoDLKvbdyYJKBozL -EObkKvbdfNFwHMjL -DoDLKvbdZisIQHBf -EObkKvbdqFcdsuaI -DncLKvbdzoPqFDLx -DoDKjvbdSKxeuHLT -EPDKjvbdsBemLfjy -DoCjjvbdJbjCqJcY -DoCjjvbdNPxRVnGs -DncLKvbdGcjvJbKK -EOcKjvbdrWpMDIxq -EOcLKvbdQdDApQcr -DoDKjvbdZMRdTnLm -EOcLKvbddxZssrFz -EObjjvbdUtNTfLuj -EPCjjvbdLLBIWAKZ -DoCkKvbdgFlZmfgA -EPCjjvbdUVkoitAq -DoDKjvbdDncKjvcE -DoDLKvbdRpUHJfEX -EPDKjvbdLqvlzVQz -EPDKjvbdZMRdUOLm -EOcLKvbdCJLBkIfK -DncKjvbdaSFbhUFk -EPDLKvbdZoNheEzK -DncKjvbdUVlPjUAq -DnbkKvbdKNADyfuB -EObkKvbdZdwfzghb -EPDLKvbdZtIhxcrn -EObkKvbdGckViajK -DncLKvbdFfJqmiUR -DncKjvbdKWUfDdgJ -DoDKjvbdMtrqjmAX -EOcLKvbdsQWPKDVf -DoCjjvbdwtleRZMO -EObjjvbduaDxsPEh -EPDLKvbdKxqJrzuG -EOcKjvbdVAaprprZ -EObjjvbdEuxopMjF -DnbjjvbdyOTHwriD -EPDLKvbdrpVnibvG -EPDKjvbdkWWnDaww -DncLKvbdrXPkbiYq -DoDLKvbddxZssqez -EOcLKvbdHDkWJbJj -DncLKvbdEPCkLWcE -DnbkKvbdEXwkstTl -EObjjvbdqiAKEmOe -DncLKvbdjAQGaQGj -EPCjjvbdNeDtJJKd -EPCjjvbdvwMBWBVu -EPDKjvbdFejSOItR -EOcLKvbdNPwqWOHT -EPDKjvbdbsCjscia -EObkKvbdyYIiaoyk -DoDKjvbdLZQirzuG -EObjjvbdSLZGVGjs -DoCjjvbdAMgxsWzY -DoDLKvbdEObjjwCd -DnbkKvbdsPvOicWG -EPCkKvbdrJAKElne -EPCkKvbdauCGwjsh -DncLKvbdegkWRnQg -EPCkKvbdYpmEiNFR -DoDKjvbduaDxsPFI -DoCjjvbdcyxoxYqC -DoCkKvbdkMakzFHP -DnbjjvbdJbibqJbx -DnbkKvbdWWhxWDeH -DoCjjvbdssRsYzFD -DoDKjvbdpyPIHRDx -DncLKvbdwNWANDeN -DoDKjvbdJYUBglRQ -EObkKvbdXnRAYVVt -DoCjjvbdUWLpKTaR -DoDKjvbdTqROttgm -EPCkKvbdVqnXaeMD -EObjjvbdADRwiyiQ -DoDKjvbdlrZUyrci -EPDKjvbdvAdZSndh -DoCkKvbdzoQQeDLx -DnbkKvbdSQUGjFdX -EOcLKvbdqBJFAXIE -EObkKvbdSCEFLiZL -DnbjjvbdzoQQdcMY -DnbkKvbdpxngfqEY -DncLKvbdbsDLUEKB -DoCjjvbdXrlBMtOx -EObjjvbdKCjDQicY -DncLKvbdLrWlzUpz -EObjjvbdaaWEfQQX -EObjjvbdtlYWaTaX -DnbkKvbdMowpunGs -EObkKvbdSLYeuHKs -EObkKvbdTAEhhCOd -EPCkKvbdmSYtyrci -DncLKvbdYkqcsnLm -DoDLKvbdrylQTAgn -DncLKvbdJXtCIMRQ -EObkKvbdSBdElIyL -DoDLKvbdwygefYFS -DncKjvbdyXhibPzL -EPCjjvbduaDxsPFI -EObjjvbdZoNiFEzK -EPCjjvbdkNBkyeHP -EPCkKvbdWRnXadlD -DncLKvbdRWmdDLhD -DnbkKvbdmSYtzTDi -EOcKjvbdkVwODbXw -DncLKvbdQlxCZOUz -EObjjvbdbhlijfXY -EOcLKvbdXmqAXtut -EOcLKvbdmbKXXnnV -DoDKjvbdkHgMFfOL -EPCkKvbdfekymgHA -DoCjjvbdeKKRvUzn -DoDKjvbdkHfkefNk -DoCjjvbdyqPMiKXA -DnbjjvbdUQqOtuIN -EOcKjvbdEPCkKwDE -DoDLKvbdZRNFIleR -DnbjjvbdRacdlJZL -EOcLKvbdTukoitAq -EOcLKvbdZLrDtOMN -EOcLKvbdgKfzcGAE -EObjjvbdzjVQQESt -EOcLKvbdcIlijevx -EOcKjvbdGKdsDHmV -DncLKvbdKkBHvAJy -EOcKjvbdZMRctOLm -EPCkKvbdADRxKZiQ -EObjjvbdDwxLsssl -EPDLKvbdUxgszLPO -EPCkKvbdSQTfiedX -EPCjjvbdNeEUJIkE -DoDLKvbdpyPHfqDx -DnbkKvbdyOShXsJD -DncLKvbdLiBkpxAS -DoDKjvbdaaWEepQX -DoCjjvbdWSOYBeLc -EOcKjvbdLFegbAqV -EPDKjvbdffLzOGgA -EObkKvbdFkErbglu -DncLKvbdiZuFlROG -DncKjvbdegkWRnQg -DoDLKvbdQdDApRDr -EOcLKvbdeYZtURez -EObjjvbdrXQLcIxq -DoDLKvbdxZhGGXeS -DoDLKvbdGGKSOItR -EObjjvbdjhHLfFnL -EOcLKvbdUQpoUuHm -DoCkKvbdXrlBNUPY -DoDKjvbdJXtCIMRQ -DnbkKvbdZMSDsnLm -DncKjvbdCTBDUGWr -DncKjvbdbhlikGXY -DoDKjvbdXmqAYVWU -DnbjjvbdliDsqVRa -DnbkKvbdmajXYOnV -EObjjvbdJpyePGNe -DnbkKvbdCTAcUGXS -DoDLKvbdCDpBVjNG -EOcLKvbdxwhiaoyk -DoDKjvbdxVNFQyMO -EPCkKvbdVvhwvEEg -DnbkKvbdFWYoomJe -EOcKjvbdlrZUysEJ -EPDKjvbdqquKnKaN -DoCkKvbdTkunaVoJ -EOcLKvbdfHkVrOQg -EPDLKvbdiUzFWrUb -DoDLKvbdtAGqIABS -DoCkKvbdZRMdhmEq -DnbkKvbdNsUVfeVQ -EPDLKvbdqwPkbiZR -DoCkKvbdNUsSLNAX -DncKjvbdmpZxvKyC -EPCkKvbdLYqKSztf -EPDKjvbdZyEKODMS -EPDKjvbdNGbomPuL -DncKjvbdZMSDtNlN -EPCjjvbdTXjkmzjx -EObkKvbdBdQAvKMf -EOcLKvbdkySrTYgU -DnbkKvbdZoOIddzK -DoCkKvbdZMSDsmkm -EPCkKvbdCWzdIdpW -DncLKvbdBvzdIdov -DoCjjvbdaRfDHtFk -DnbkKvbdWeyZtAOs -DoDLKvbdnCJwYPOV -DoCjjvbdEYYLstUM -EOcLKvbdwtldqZMO -EPCjjvbdFVxoomKF -EObkKvbdyqPMhiwA -DoDLKvbdkxrrSxgU -DoCjjvbdeATqNYKG -DncLKvbdJKEAJpHE -DoCkKvbddndsLUTr -DnbjjvbdqFceUWBI -DoDLKvbdhkddOUby -DncKjvbdGKdrcIMu -EPCkKvbdelevflik -DoDKjvbdhaoDFWqR -DoCjjvbdYlSDsmlN -EPCjjvbdiZuGLpmf -EObkKvbdnCJvxPNu -DnbkKvbdhzUelRNf -DnbkKvbdZeYGzgiC -DoCkKvbdDnbkLWbd -DnbkKvbdnHFYMmfy -DoCjjvbdePEsKtTr -DnbjjvbdZQmEhleR -DnbkKvbdTkunaVoJ -DnbkKvbdFWZPpMjF -DoDKjvbdSwkMNzkY -EOcLKvbdwtldpyMO -EOcKjvbdhkdcmtby -DoCjjvbdNQXqWNfs -EPDKjvbdzjUpPdTU -DnbjjvbdqceJPnWB -EPDKjvbdUyHsyjoO -EPCkKvbdZshhxcsO -DncKjvbdqAiFAWgd -EObkKvbdgFkzOGgA -DncKjvbdmgFYNNgZ -DoDLKvbdDjHjWYKA -DnbjjvbdJbicRKCx -DnbkKvbdfNFwHMjL -EPCkKvbdWSNxBdlD -EPDLKvbdCJKbLJFj -EPDKjvbdEOcKkXDE -EPCkKvbdVrOYCElD -DnbjjvbdCIkBjhej -DoDLKvbddoFTKstS -DnbjjvbduDDVXVoP -EObkKvbdxwiKCPzL -DnbkKvbdZGvdAPTJ -DoDLKvbdBdPaVjNG -EOcKjvbdIHGzYwxH -DoCjjvbdGFjSNhsq -DnbjjvbdlYsSSxgU -EPCjjvbdqrUjnKaN -EOcLKvbdtvOXipsA -DoDLKvbdrounjCuf -DoCkKvbdFVyPomKF -EOcKjvbdNHCpNPtk -EPDLKvbdWeyZtAPT -EPDKjvbdjcLkQfuH -EOcLKvbdzHZMAMeX -DoCjjvbdUMWPBVni -EOcKjvbdHELWKBjK -DoDKjvbdMgComQUk -DnbkKvbdiGjDZWJu -DncKjvbdyqOmJKXA -DoDKjvbdVZITyjoO -DoCjjvbdzQoNJJwA -EOcLKvbdGAoQxizm -DoDKjvbdatagYKsh -EPDKjvbdSBceMJYk -DoDLKvbdMpYQvOHT -DncKjvbdiCOcFWpq -DoCjjvbdUGznLvvF -EPDLKvbdANIYrvyx -EPCjjvbdIwtCHkpp -EObkKvbdJSyBSmYM -EObkKvbdwuMdqYlO -EObjjvbdmuVZkKSG -DncLKvbdSPsfjFdX -DoDLKvbdSQUHJedX -DoDKjvbdiVZdwSUb -EPDLKvbdRjxfVGkT -EObjjvbdmpZyVkZC -DncLKvbdhzUelROG -EPCkKvbdxVMeRZMO -EOcKjvbdxxIiapZk -EOcKjvbdJSyBTNYM -EPDKjvbdMSXMzUpz -EPCkKvbdNddThhjd -DoDKjvbdznpREcLx -DncLKvbdqYoHgREY -DnbjjvbdiCPCdvqR -DoCjjvbdsQVoKDVf -DoCjjvbdqFcdtWBI -EPCkKvbdFkFTDIMu -DnbkKvbdQvmdCkgc -DnbjjvbduCbtwWOo -DoCjjvbdaNKaruNH -EOcLKvbdrpWPKCvG -DoCjjvbdEKHiuwjA -DoDLKvbdsBfMlHKy -EObjjvbduCcVWuno -DoCkKvbdNddUIiLE -DoDLKvbdVrNwbElD -EPCkKvbdTqQoUuHm -DoCjjvbdcJMikFvx -EOcKjvbdijGIJmYS -DncKjvbdtvNwipsA -EPDKjvbdGQASwGey -DoCkKvbdmJEUQtqa -DncKjvbdpxnggQcx -EOcLKvbdDnbjjwDE -DnbjjvbdxVMdqZLn -EPCkKvbdTkvPAvOi -DnbkKvbddijRvUzn -DnbjjvbdJuuFceGi -DoDLKvbdeATplxJf -EObjjvbdiLeDmuDZ -EObkKvbdzHYlANFX -EObkKvbdSBdFLiYk -DncLKvbdMgCpNPuL -DncLKvbdNsTufeVQ -EPCjjvbdUQqOtuIN -EPCkKvbdKDJcQicY -DnbkKvbdsCFmLfjy -DnbjjvbdNdctJIjd -DoDLKvbdzjUpPdSt -EPDLKvbdMoxRVmgT -EOcKjvbdbsCjscia -DoCjjvbdrDeIpOWB -EPDKjvbdOTUVgFVQ -EOcLKvbduWNwipsA -DoDKjvbdJcJcRKCx -DncKjvbdGZUtaDwb -EPCjjvbdZtJJYdSn -DoDLKvbdtcDVWuoP -EObjjvbdKaLGmCXq -DoCjjvbddZxoxYpb -DnbkKvbdWRmxCEkc -EOcLKvbdNrsufduQ -DoDLKvbdqlzJxlIJ -DoCkKvbdFVyPoljF -DnbkKvbdjggMGGOL -DoDLKvbdLAkHMawq -DncLKvbdwuMdpxlO -DoDKjvbdtSqrxydc -DoCjjvbdSLZGVHKs -DnbjjvbdrMzKYlIJ -DnbjjvbdTAFIhBnd -EPDLKvbdIxTbIMRQ -DoDLKvbdbBVeGQPw -DnbkKvbdvlvANEEm -EPDLKvbdEOcKkXCd -DoCkKvbdYqMdhmFR -EObjjvbdnUtzKiqf -EPCkKvbdtunXjQsA -DnbkKvbdddoSBwDK -DnbjjvbdTqROttgm -EPCkKvbdzQnmJJwA -EObjjvbdfpBzwDwh -DncKjvbdRotHJecw -EPCjjvbdhtzFWrVC -DncLKvbdqdEhpNvB -DnbjjvbdkWWmcbYX -EOcLKvbdYSkaMsoY -EObjjvbdDjIKVxKA -DnbkKvbdrounjDVf -EObkKvbdJzpFwdAN -DoDLKvbdsBelkgLZ -DoDLKvbdwtmEqZMO -DncKjvbdxmrgwriD -EOcKjvbdDoDLLWbd -EPDKjvbdIwtBhLpp -EPDLKvbdUaBqTRRy -DoCjjvbdjKFhJlwr -DoCkKvbdGLFTDIMu -EPCjjvbdrbFmMHKy -DoDLKvbdehKurOQg -DncKjvbdijFhJlwr -DoCjjvbdjvXOEBww -EPCjjvbdTXjkmzkY -EOcKjvbdaSFcHtGL -EPDLKvbdpyPIHQcx -EOcKjvbdmaiwXoNu -DoDKjvbdSBdFMJZL -DoDKjvbdjKGIKMwr -DncLKvbdyXiKBozL -DoCkKvbdqlzJxkhJ -EObkKvbdrNZiyLhJ -DoCkKvbdrpWPKCvG -DncLKvbdVrOXbEkc -DnbkKvbdOAIrtJrA -DnbkKvbdrXQMChyR -EOcLKvbdDnbjjwCd -EPCjjvbdjvXOECXw -EPCkKvbdMgDPmPtk -DoDLKvbdYfwEAPSi -EPCjjvbdzGxlANEw -DoDKjvbdmbKWwoNu -EOcLKvbddZxpXxqC -DoDLKvbdLGGHbApu -DoCjjvbdVTltGLuj -EPCjjvbdOEdThiKd -DoCjjvbdUyHtZkPO -DncLKvbdHELWJajK -EOcKjvbdcarmSAUN -EObjjvbdqiAJdmOe -EObkKvbdZQleImFR -EObkKvbdQccBQRDr -DoCkKvbdLAjfmBwq -DncKjvbdSKxeuHKs -DncLKvbdmJDsqUrB -EOcLKvbdGFirNhtR -DncLKvbdEARiMywX -DnbjjvbdZxcjNblS -DncLKvbdWXIwudEg -DoDLKvbdhkeDmuCy -EObkKvbdUslselWK -DoCkKvbdLhakqYAS -DoCjjvbdIMBzmvpk -EPCjjvbdKaKgMbXq -EPCjjvbdiLeDmtcZ -DnbjjvbdsPvPKCvG -DncLKvbdnVUzLKRf -DoDLKvbdiUyeWrVC -EOcLKvbdjblLRGuH -DnbkKvbdhtydvqtb -EOcKjvbdTqQnuVIN -DoCjjvbdMtsRkNAX -EPCjjvbdGKdrbglu -DncKjvbdMoxQvOGs -DoDKjvbdiHKDZWKV -DoDKjvbdULvPAvPJ -DnbkKvbdEvZQPmKF -EObjjvbdkxrrTZGt -EObjjvbdKCicQibx -DoCjjvbdKkAgvAKZ -EOcKjvbdNxOuzcmt -EPDLKvbdbsCjsdJa -EObjjvbdHDkVjBjK -EPCjjvbdYqMdiMeR -EPCkKvbdczYoxZRC -DncKjvbdnPzYujxb -DnbjjvbdMpYRWOHT -DncLKvbdLFegbBRV -DncKjvbdxVMdqYlO -DoDKjvbdFkErbhNV -DncKjvbdLLBHvAJy -DoDKjvbdTfzmkwWF -EPCjjvbdyXiKCQZk -DoDKjvbdqUUGrSLU -EObjjvbdGcjuiaij -EOcLKvbdZRMdhmFR -DoCjjvbdZoNiEdzK -DoCjjvbdEARiNZwX -DoCkKvbdwXMBVaWV -EPCjjvbdVZHsyjoO -DoDKjvbdyXhjBpZk -EObkKvbdtkxWaUAw -DnbkKvbdLrWmZuQz -DncLKvbdySnJNRbH -EPCjjvbdezvYdhsw -DoDLKvbdhancFWqR -EObjjvbdyzeORgiI -EPCjjvbdyXiJbPyk -EObjjvbduVnXiqTA -DnbjjvbdZjTHofaf -EPDLKvbdLrXMyuQz -DnbjjvbdHffyxxXg -DoDLKvbdOStWGdtp -DnbjjvbddijRvUzn -DoCjjvbdYNqAXtut -EPCjjvbdUQpntuHm -DoDKjvbduWOXjQsA -DoDLKvbdtTRsYydc -DncKjvbdpfDeUVaI -DoDLKvbdULuoAvOi -DnbjjvbdqmZjYkhJ -EPDKjvbdZMSETmkm -DoDLKvbdZshhyETO -DncLKvbdQdCaQQcr -DncKjvbdQccBQRES -EOcKjvbdrNZjYlIJ -EPDKjvbdjAQHBPgK -DoCjjvbdnUuZkJqf -DoDKjvbdLAjfmBxR -EObjjvbdUsltFkuj -DoDLKvbdZQleJMeR -DnbjjvbdBraCtGXS -DoDLKvbdaSFbhUGL -EObjjvbdrbGMkgLZ -EPCkKvbdJYUCHlRQ -EOcKjvbdgFkzNfgA -DoCjjvbdaRecHtFk -EPDKjvbdnUuZkKSG -EPDLKvbdkWWmdBww -EObkKvbdypoNJKXA -EOcKjvbdZxdJmblS -DncLKvbdZirhPgCG -DoDLKvbddeOrCXCj -DoCjjvbdOXoVzcnU -DncLKvbdSBdFMJZL -DncKjvbdrzMPraHn -DncLKvbdqZPHfpcx -DncKjvbdVAbQsQqy -DoDKjvbdySnJNSCH -EPDLKvbdtSqsZZeD -DncLKvbdtvOYKRTA -DncLKvbdLGGICBQu -DoDLKvbdDncLKwDE -EObjjvbdNrtVgEtp -EOcKjvbdUQqOtthN -EObjjvbdZtIiYcrn -EOcKjvbdmuVZjjRf -DnbjjvbdcJNKKevx -DoCkKvbdDxXlTtUM -DncLKvbdqZOhHQcx -EPDKjvbdIsZBSlwl -EOcKjvbdNUsRkNAX -DoDLKvbdRbEFMJYk -DnbjjvbdiBncFWqR -EOcLKvbdRzKIScWA -EOcKjvbdRbEFMIyL -EPDKjvbdsPunjDVf -DoCjjvbdhzVFkpmf -EOcKjvbddxZtUSFz -DncKjvbdnVUykJrG -EOcLKvbdEPCkKvbd -EPCjjvbdnUuZkKSG -DnbjjvbdnCKWxOmu -DnbkKvbdYzcFrKVy -DoDKjvbdvmWAMcdm -EObkKvbdhkdcmuDZ -DncKjvbdNsUVgFVQ -EPDLKvbdYzbeqiuy -EOcLKvbdUxgszLOn -DnbjjvbdZQmEiMeR -DoCjjvbdkHflFemk -EPDLKvbdhbPCdwRR -DoDLKvbdWXIwucdg -DoCjjvbdOYOuzcnU -DoDLKvbdcSbkTdJa -EOcKjvbdEvYpQMjF -EPDLKvbdrykosAhO -EObkKvbdrovPJbvG -DoDLKvbdkHflGGNk -DoCjjvbdZtIiYcsO -DoDLKvbdZnmiEdzK -EObjjvbdZMSDsnLm -EPCjjvbdLAjfmBxR -DncLKvbdptUGrRjt -EOcLKvbdNQXqVmgT -DoDLKvbdCIkCLIfK -EPDLKvbduVmxKRTA -EPDKjvbdHbLzEzAD -EPCjjvbdbUbGxKsh -DoCkKvbdjlbLzEgP -EPCkKvbdXGYzUAPT -DnbkKvbduLxXAsaX -EObkKvbdJvUfEFHJ -EOcKjvbdmbKXXoNu -EPDKjvbdQvnDbkgc -DoDLKvbdiUzFWrVC -EObkKvbdZyEKNcLr -DoDKjvbdrEEhpNua -DnbkKvbdzitoocsU -EPCjjvbdmbJvxOnV -EOcLKvbdNddTiIjd -DncKjvbdfpBzvdYI -EObkKvbdBhjbLIfK -DoCjjvbdFjeTDHmV -EOcKjvbdRjyGVGkT -DoCkKvbdZQldhmFR -EPDKjvbdqlzKZLhJ -DnbkKvbdZoOIeEyj -DncKjvbdBdPaVjNG -EPCkKvbdTulPjUBR -EPDLKvbdGGJqmiTq -DoDLKvbdGGJqmhsq -EOcKjvbdIryBTNXl -EPDLKvbdIsYaSmXl -DoCjjvbdVwJXudEg -EPCkKvbduDCtvuoP -EOcLKvbddBsMrAUN -DncLKvbdrouoJcWG -DoDKjvbdCgLfHAzc -DncLKvbdhtzEvqtb -DoDKjvbdZtIiYcsO -DncKjvbdMfbomPtk -DncKjvbdYqNEiMdq -DnbkKvbdCTBCtFvr -DncLKvbdhtzEvquC -DoCjjvbdAMhZSvyx -DoDKjvbdjlbLzEfo -EOcKjvbdZLrETmkm -DncKjvbdULvPAuni -DoCjjvbdtcCtvuoP -EPCkKvbdOTTugEtp -EObjjvbdhtzEvquC -DoCjjvbdkHgLfFmk -DncKjvbdmoyyVkZC -DnbkKvbdsBemLgKy -DoDKjvbddCTMrAUN -DoCjjvbdmuUykJqf -DnbjjvbdbQHGckzd -DoDLKvbdyOShXriD -EPDLKvbdZRNFImFR -EOcLKvbdDoDKkWcE -EPCkKvbdwMvAMcdm -DnbjjvbdbKlFoNcA -DoCkKvbdMfbpMpVL -DncLKvbdhkeDnUby -DoDKjvbdMSWmZtpz -EPCjjvbdmfeYMmgZ -DnbjjvbdqiAKFMoF -DoCkKvbdSBdElIxk -EOcLKvbduoTzpkPU -DncLKvbdDoCjjwCd -EObjjvbdLGGHbBQu -DnbkKvbdQcbaQRDr -EPDLKvbdyNrgxTJD -EObjjvbdtSqryZdc -DoDLKvbdegkWSNpg -EOcKjvbdZLrDsnLm -EObjjvbdFkEsCgmV -DoDKjvbdatagXjtI -DncLKvbdGZUuBDwb -DoDLKvbduDDUvuno -EObjjvbdURROtuIN -DnbkKvbdyXhjBpZk -DoDLKvbdKaLGlaxR -DoCkKvbdlZTRrxgU -EPDLKvbdUsltFlWK -DncLKvbdGGKRnIsq -DnbkKvbdijFhKNXr -DoDKjvbdrWokbiYq -EObjjvbdUaCRSqRy -EObjjvbdRkYfVHKs -DnbkKvbdQvnDcMID -EObjjvbdvBEYrneI -DnbkKvbdySmiNRbH -EPDKjvbdjuvmcaxX -DoCjjvbdVTmUGLuj -EPDLKvbdxVMeRYlO -DnbjjvbdNPwpvNgT -DoDKjvbdJTZArlxM -EPDLKvbdjbkkRHUg -DnbkKvbdSBdFMIyL -EPDKjvbdMgColpUk -DncLKvbdVAbQsQrZ -DncLKvbdyTOJNRag -DnbjjvbdmgFYMmgZ -EPDKjvbdTAFIgbOd -EObkKvbdFWYoomJe -DoDKjvbdIxUBhMRQ -DoCjjvbdFWYopNKF -DoDKjvbdNdcshiLE -EOcLKvbdwWlBWAuu -EPCkKvbdYpldiNFR -EPDLKvbdQwODbkgc -EPCkKvbdqZOhHQcx -EObjjvbdHDjujCKK -DoDLKvbdnBjWwnmu -EPDLKvbdUQqPUuHm -DnbkKvbdIryBSlxM -DnbkKvbdjhGlFfNk -DnbkKvbdqlyiyMHi -EPDLKvbdxmsIYTIc -EPCjjvbdNrsufduQ -DncLKvbdaaWEepPw -DnbjjvbdkVvnDaxX -EOcKjvbdUQpntuIN -EOcKjvbdQdDAopcr -DoCkKvbduMXvaUAw -DnbkKvbdMRwNZuQz -DoCkKvbdNGcQMotk -EPDLKvbduWOYJpsA -DncKjvbdZtJIxcrn -DnbjjvbdwyhFfXeS -EOcLKvbdIryAsNYM -EObjjvbdyTNiNRag -EPCkKvbdiZuGLqOG -DncKjvbdHELWJbKK -DoDKjvbdIGfyxwxH -EPCkKvbdeOdrkTsr -DoDKjvbdpstGrRjt -EOcKjvbdZtJIxdSn -EObjjvbdZtIiZDrn -DnbjjvbdOEctIhkE -DncLKvbdKDJbqJbx -DncKjvbdEOcLKvcE -EOcLKvbdgLGzcGAE -DoCjjvbdGBPQxizm -EPCjjvbdeFOqbXDK -EObkKvbdehKuqnQg -DncKjvbdRosgKFcw -EOcLKvbdUsmUGLuj -EOcLKvbdrXQMCiZR -DoDKjvbdjcMLQftg -EPDLKvbdHEKvKBjK -EPDKjvbdbVCHYLUI -DncKjvbdFfKSOItR -DncKjvbdYSkaNToY -DncLKvbdQvmccLhD -EOcKjvbdnVUykKSG -DoCkKvbdbsDKsdJa -EObkKvbdGLFTChMu -DoCkKvbdqGEFTuaI -EPCkKvbdddoRbXCj -EPCjjvbdMfbpNQVL -DoDKjvbdFjdrbgmV -EPCkKvbdmRxuZsDi -DncKjvbdaRfChUGL -DncLKvbdMJBkqYAS -EObkKvbdxUmEqYlO -EPDLKvbdtbbtvuoP -DoDKjvbdxsOJNSBg -EPDKjvbdZtIhyDrn -DncLKvbdKCicRKDY -EPDLKvbdUtNUFlVj -EPCjjvbdeATqMxJf -EOcLKvbdaNLBsUmH -DoDKjvbdJcJcQjDY -EPCkKvbdiMEdNtby -DoCjjvbdiGibyWJu -DncKjvbdeEnrCXDK -EPCjjvbdUVlPisaR -DncLKvbdXGZZtAPT -DoDKjvbdddoRbXDK -DoDLKvbdSBdElIyL -DoCjjvbdRNXbZOUz -DnbjjvbdTAEhhCPE -EObjjvbdUMVoBWOi -DnbkKvbdFjdrcHmV -DoCjjvbdfIKurORH -DoDLKvbdVBCRTQrZ -EOcLKvbdZoNhddzK -DoCkKvbdULvOaVoJ -DnbjjvbdZirhPgCG -EOcKjvbdVBBprqSZ -DoDLKvbdaSFcIUGL -DoDLKvbdfIKuqnRH -DncKjvbdijGIKNXr -EPDLKvbdrzMPsAgn -EPDKjvbdNUsSKmAX -EPCkKvbdLLAhWAKZ -DncKjvbdkWWnDaww -DnbkKvbdJYUCHlQp -EPDLKvbdNwoVzdNt -DoCjjvbdSLYetfjs -DoDLKvbdptTgSSLU -DncKjvbdxVMdqZLn -DncKjvbdZyDinDMS -DnbkKvbdnPyxujxb -EPCkKvbdSiZjRABM -EPDKjvbdPyNAHSqj -DncLKvbdqwPlChyR -EPDKjvbdGckWJbKK -DoDLKvbdbBWFFoow -DoCkKvbdkCkkRGuH -DncLKvbdmJDtQuSB -EObkKvbdQdCaQQdS -DncKjvbdKfFhBaQu -DncKjvbdaNKaruMg -EOcKjvbdnPzZWLYb -EObjjvbdxUldqZMO -DnbkKvbdGckWJaij -DncKjvbdkVwODaww -EObjjvbdGKdsDHlu -EObkKvbdKQyeOfOF -EPCkKvbdGdKvKCJj -DnbkKvbdGdKuibKK -DoDKjvbdOFDtJJKd -DoCkKvbdwuMdpxkn -EObjjvbdZjShPgBf -DoDKjvbdcyxpYZQb -DnbjjvbdrbGMkgLZ -DnbjjvbdxsNiMqbH -DoDKjvbdWSOXbFLc -EPCjjvbdrDeIomvB -EOcKjvbdEuxopNJe -DoDKjvbdKDKCqKCx -DoCkKvbdkIHLfGNk -EOcKjvbdnUuZjirG -DncKjvbdIryArmXl -DoDKjvbdraemMGkZ -DncKjvbdEJgivYKA -DoDLKvbdbhmJkGWx -DnbjjvbdZyDimcMS -EOcKjvbdhuZeWrVC -DnbkKvbdRbEFMJZL -EPCkKvbdeOdrkUTr -DoCkKvbdlhdUQuRa -DnbjjvbdZtIiZDsO -EPCjjvbdZyEJmcMS -DnbjjvbdFpATWgGZ -EOcLKvbduaDxroEh -DnbkKvbdpeceUWBI -EOcKjvbdjcMLQftg -DncLKvbdnPzZWLZC -DnbjjvbdZyEKNcMS -DoDKjvbdZMSDsnLm -DnbjjvbdOAIsTjSA -DoCjjvbdWSNxCFLc -DoDKjvbdkClLRHVH -DncKjvbdZxdJmcLr -EPCjjvbdOYOuzdOU -DncKjvbdWHxVxHYz -DoDLKvbdwXMBWBVu -EObjjvbdZxdJmcMS -EOcKjvbdrEFJPmvB -EOcKjvbdQcbaQQcr -EPCkKvbdfHkWRnRH -EOcKjvbdrEEiQNvB -EObkKvbdcTCjtDia -DoCkKvbdnCJvwoOV -DoDLKvbdxnTIYSiD -EOcKjvbdGQASvfey -DoDKjvbdUtNTekvK -DoDLKvbdbUbHXkTh -DncKjvbdaNLBsVNH -EPCkKvbdmtuZjirG -EPDKjvbdvlvANEEm -DnbkKvbdcIljLGWx -EOcKjvbdJSyArmYM -EObjjvbdVTltFlVj -DncKjvbdTAFIgbOd -EOcLKvbdUsltGLuj -EObjjvbdZRNEhmFR -EOcKjvbdUGznMXVe -DnbjjvbdTqQoUthN -DncLKvbdZRNEhmEq -EObkKvbdKxpirzuG -EOcKjvbdiVZdvqtb -EOcLKvbdatbGxKtI -DnbkKvbdpfDdsvBI -DnbjjvbdpyPIGqDx -DoCkKvbdqUUGrRjt -DoCjjvbdfHjuqmqH -EPDKjvbdqlzJyLgi -DoCjjvbdznpREcMY -EObjjvbdjuvnEBww -DoCkKvbdQwNdCkgc -DoCjjvbdxsNhlqag -EOcKjvbdbsDKtEJa -EPDLKvbdfIKuqnQg -DncLKvbdJXsbILqQ -DoDLKvbdiUydwRuC -EOcLKvbdUtMsfMVj -DnbkKvbdfNGWflik -DoDLKvbdqwQLcJZR -DncLKvbdYqMeIleR -DoCjjvbdzaAPGgBl -EPCkKvbdauBgYLUI -EPDLKvbdiUydvqtb -DnbjjvbdRyjITCvA -DncLKvbdIwsahLqQ -EPCjjvbdRacdkiYk -EOcKjvbdRbEFMJZL -DoCjjvbdrzLoraHn -EObkKvbdxxIiaozL -EOcLKvbdJcJbqJbx -EPCjjvbdZisHogBf -EOcKjvbdVTmUGMWK -EPDKjvbdrylQSaIO -DncLKvbdSCEEkiYk -DoDLKvbdhtyeXRuC -EObjjvbdQvmcblID -DoDKjvbdauCGwjtI -DnbkKvbdGYtuBEYC -DoCkKvbdkyTSSxft -EPDLKvbdIGfyyYYH -EObjjvbdjlbLzEgP -EPCjjvbdIwsbHkpp -EPDKjvbdmuUyjjSG -DoCkKvbdUQpoUtgm -EObkKvbdUQqPVVIN -DncLKvbdXrkaMsnx -DncLKvbdaMjbTUlg -DncLKvbdhgJbyVjV -DnbkKvbdURQoUuIN -DnbjjvbdFWZQQMie -EPCjjvbdnCJwYPNu -EOcLKvbdBcpBVimG -DoCkKvbdyqPMiKXA -EObkKvbdnVUzKjRf -DnbkKvbdVgwvXgYz -EObkKvbdZsiJZDsO -EPDKjvbdiCPCdwRR -EObkKvbdGYuUaEYC -DnbkKvbdpyPIHREY -DnbjjvbdiZtfLpnG -EPCkKvbdVUNTelWK -DnbkKvbdTppoVUhN -DnbjjvbdxrnIlrBg -EPDKjvbdmIdUQtrB -EObjjvbdkNBkzFGo -DncKjvbdhbOcFXQq -DoDLKvbdNGcPmQVL -EPDKjvbdZoNheEyj -DnbkKvbdjlbLzEfo -DoCjjvbdZRMdiNEq -EObjjvbdczYoxYqC -EPDKjvbdLAkHMaxR -DoDLKvbdsPunibuf -DoDLKvbdNdcshhkE -EPDKjvbdhkdcnVCy -EPCkKvbdVZHtZkOn -DnbjjvbdsrrTYzFD -DoCjjvbdatbGxKtI -EOcLKvbdnGdxMnHZ -EPDLKvbdmaivwoOV -EObkKvbdjJegjMwr -EPDKjvbdYfwEAOri -EOcKjvbdpxngfpcx -DnbjjvbdEPCjkXCd -EPDKjvbdxsOImRag -EObjjvbdEPDKjwDE -DnbjjvbdYlSETnLm -DncLKvbdBiLBjhej -DoDKjvbdrpWPJcVf -DncKjvbdRpTfiedX -DoDKjvbdakMGOnDA -DnbjjvbduVmxKQsA -DncKjvbdKfFhCBRV -DnbkKvbdpfEFTvBI -DncLKvbdqwQLcIyR -EOcKjvbdlhdTpuSB -DncKjvbdqwQLbhxq -DnbkKvbdnHEwlmgZ -EPDKjvbdDoCjkWbd -EObkKvbdANIYsWyx -EObjjvbdpfEEsvBI -EPDKjvbdCJLCKiFj -DoDKjvbdqcdhonVa -EPCjjvbdzjUpQESt -DncLKvbdZQleImEq -EPCjjvbdEPCkLXCd -EPDKjvbdYlRdUNlN -EObkKvbdxwiKBozL -DnbjjvbdFjdsChNV -EObjjvbdwtleRYlO -DoDLKvbdeOdsLUUS -EPDKjvbdZLqctOLm -DoDLKvbdjlbLyeHP -DoCkKvbdaNLCTVMg -DnbkKvbdEKHjWXjA -DnbkKvbdZshhyDsO -DnbjjvbdsPunibuf -EPCkKvbdwWkaWBVu -EPDLKvbdFpATWfey -EObjjvbdzoQQdcMY -EPDLKvbdpxngfpcx -DnbjjvbdgPazwDwh -EPDKjvbdKVtfEEfi -EOcLKvbdhkeENuDZ -EObkKvbdIwtCILqQ -EPCjjvbdyNrhXsJD -DnbkKvbdMSWmZuQz -EOcLKvbdsPunicWG -DncLKvbdULvPBWPJ -DoCkKvbdKfFhCApu -EOcLKvbdTAEhhCOd -DnbkKvbdSKxetfjs -DoCjjvbdUtNTfLuj -EObjjvbdhzVGMROG -DoCkKvbdxsNhmRag -DnbjjvbddZyPwxpb -EObjjvbdEuxooljF -DncLKvbdVTlsfLuj -DoCkKvbdZjShQGaf -EPDKjvbdrSVKnKaN -DnbkKvbdFxuVBDwb -DoCkKvbdJXtBhLpp -EPCjjvbdHffzZXxH -DoCjjvbdqZOgfqDx -DncLKvbdqwQMChyR -EObjjvbdaSGDIUFk -EPDLKvbdZxdKNcMS -EObjjvbdhuZdwSUb -EPDLKvbdfMfWgMik -DncLKvbdZRNFJMdq -EOcKjvbdJKEAKPfd -EPCkKvbdcyxoxYqC -EOcKjvbdCSaCsevr -DoDLKvbdKQzEoGNe -DoDLKvbdjhHLefOL -DoCjjvbdRjxeuGjs -DncKjvbdyOTIXsIc -DnbkKvbdBdQBWKMf -EOcKjvbduLxXBUBX -EObkKvbdrSUkNkAm -DoDKjvbdKfFhBaRV -EPCjjvbdddoSBvcK -DncKjvbdyOTHxTJD -EOcLKvbdiLeENuDZ -DoCjjvbdJbjDRKCx -EPDKjvbddoErkUUS -DoCkKvbdBiKakJGK -DnbkKvbdCIjbKiFj -DoCjjvbdIsZBSmXl -EOcLKvbdBhjajiFj -DnbjjvbdrzMQTBIO -EObjjvbdrWolChyR -EPCkKvbdEARiMzXX -DoDLKvbdrWpMDJYq -EOcLKvbdKRZdoGOF -DoCjjvbdBsAcUFvr -DoCjjvbdBraDUGXS -DoCkKvbdIwtBhMQp -EObjjvbdeATqMxKG -EPDKjvbdYzbfRjWZ -EOcLKvbdsCGNLgKy -DoDKjvbdhficZWKV -EObjjvbdZQldhldq -EPDKjvbdsQVoJbvG -EPDKjvbdsQVnicWG -DoDLKvbdVZITyjoO -EPCjjvbdILazmvpk -EPCkKvbdZMSDsmlN -DoCjjvbdZGvdAOri -DoDKjvbdwuMeRYkn -DnbjjvbdZyEJmblS -EPDKjvbdhkeENuDZ -EPDLKvbdGdKvKCKK -EPCjjvbdjuwOECXw -EObkKvbdZeXfzghb -EObjjvbdJmAEZgUa -EOcLKvbdtcCuWvOo -EPCkKvbdiiehJlwr -DoDLKvbdwtldpyMO -DoCjjvbdjblLQfuH -DncKjvbdNPwpunGs -DnbjjvbdSLZFtgLT -EPDKjvbdyXhjCPyk -EObjjvbdliETpuSB -Dnbjjvbdqlyixkgi -DoDLKvbdmbJvxOnV -DoCjjvbdZjSgpGaf -DoCjjvbdqdEhpNua -DoDLKvbdelfXGmKL -EPDKjvbdIGgZyYYH -DncLKvbdfMfXHMik -DoCjjvbdZoNheEyj -EPCkKvbdsZlPsBIO -EOcKjvbdLAjgMbXq -DncKjvbdVZITykOn -DnbjjvbdpyOgfqEY -EPDKjvbdbUagYKtI -EObkKvbdrSUjnLBN -DncKjvbdQwNdDLhD -EOcLKvbdrykosBIO -EPDKjvbdsPunicWG -EPCjjvbdliDtQuRa -EOcKjvbdcSbkTdKB -EOcLKvbdKaKgNCXq -DnbjjvbdZshhxcrn -DnbkKvbdcbTMrAUN -EPCkKvbdsQWPKDVf -DncKjvbdijGHjMwr -EOcLKvbdULvPBVni -EPCjjvbdffLynHHA -DoCjjvbdTqQntuHm -DoDLKvbdjuwNdCXw -DoCkKvbdVZITzLOn -EPDLKvbdqrUkOLAm -EPDLKvbdZQmEhmFR -DoDKjvbdwjvdHzyf -EPDKjvbdePErjtTr -EObjjvbdmozYvLZC -DnbjjvbdACrXizIp -EOcLKvbdTvMQJtAq -DncLKvbdssSTZZeD -DnbjjvbdmozZVjxb -EOcLKvbdtSrSxzFD -EPDLKvbdZyDjOCkr -DnbkKvbdbBWEeopX -EOcLKvbdkWWmcbXw -DoCkKvbdkVwNdBww -DncKjvbdEzsqFMCi -DncLKvbdACqxJyhp -DoDKjvbdYpmFIleR -DncKjvbdGKdsCglu -DoCkKvbdZnnJFEzK -DoDKjvbdBsBCtGWr -EPDKjvbdBcpAuimG -DnbjjvbdIGfzYxXg -DnbkKvbdGLEsCgmV -EPCkKvbdySnJNSBg -DoCkKvbdPyNAGrqj -EPDKjvbdmaivxPNu -DnbjjvbddoFSkUUS -DoCkKvbdySmiNRag -DoDLKvbdEYXlUUUM -EObkKvbdCTBCtFwS -DoDLKvbdoznDkXoA -EOcLKvbdBvzciEov -DoCjjvbdSPtHJfEX -EPDLKvbdtvOYJqTA -EPDKjvbdZisHpHBf -EPDKjvbdILazmvqL -EOcKjvbdRpUHKGDw -DncKjvbdWXJYWDdg -EPDLKvbdIwtCHlQp -EPDKjvbdUtNTfLvK -DncLKvbddZxpXxqC -EOcLKvbdkNBlZdgP -EObkKvbdqYnhGqEY -EPDLKvbdfpBzwDwh -DncLKvbdTkuoBVoJ -DnbkKvbdvvlBWAvV -DoCjjvbdrXQMCiYq -EPCjjvbdFeiqmiUR -DncLKvbdzjUopDsU -DncKjvbdhkeDmuCy -EPCjjvbdVqnYBdlD -EOcLKvbdSCDeLiYk -DoCjjvbdJvUeceHJ -EPCjjvbdjgfkfFnL -DnbjjvbdkVwNdBww -EObkKvbdczYowyRC -EPCjjvbdZoNhddyj -EPCjjvbdOSsugEuQ -EObkKvbdZMRcsnLm -EObjjvbdrMzJyLgi -EPDKjvbdrSUjnKaN -EPDKjvbdSLYfUfkT -EPDKjvbdUVlQKUAq -DoDLKvbdJcKCqJbx -DnbjjvbdeFPRbWcK -DoCkKvbdVAbQsQqy -DncLKvbdpeceTvBI -DoDLKvbdcIlikFwY -DoDLKvbdbsDLTdJa -EPCkKvbdRXOEClHc -DnbjjvbdbKkennDA -DncLKvbdEzsqEkcJ -EPCjjvbdJvUedEgJ -EOcLKvbdzitpQDsU -DncLKvbdQvnDblHc -EOcKjvbdbQGgDkzd -DnbkKvbddZyPxYpb -EPDLKvbdLrXNZuQz -DoDKjvbdDjIJvYKA -EPCjjvbdbVCHXjsh -EOcLKvbdsPunicVf -EOcLKvbdEzspdlCi -DoDLKvbdmRxtzSdJ -DnbjjvbdsBfNLfjy -DoCjjvbdcTDLUDia -EPDLKvbdidjgVPAO -DoCkKvbduVmxKQsA -EObjjvbdxLXDgzzG -EPCkKvbduaEZSoFI -EOcLKvbddneSjssr -DoCkKvbdWXJYVdFH -DncLKvbdHkaznWqL -DncKjvbdbVCGxKsh -DnbjjvbdiMEcmtcZ -DoDKjvbdqAheAXHd -EPCkKvbdMIalQxAS -DnbjjvbdVviXucdg -DnbjjvbdMpXpumgT -EObkKvbdMJCLqYAS -EObjjvbdczZQYYqC -DncLKvbdUxgtZjoO -EOcLKvbdjuwNdCYX -DncKjvbdSwjlNzkY -EPDLKvbdrWpLbhxq -DoDKjvbdnBjWwoOV -EPCjjvbdmSYtyrdJ -DoDLKvbdzeZnzdzQ -DncLKvbdMowqWOGs -EPCkKvbdqTsfqrLU -EObkKvbdraemMHKy -EOcLKvbdJcJbpjCx -DnbjjvbdmuUzKjRf -DncKjvbdNeEThhkE -DoDKjvbdHakydzAD -EOcKjvbdXsLaNUPY -EObjjvbdLFfHbBQu -DncLKvbdbKlFoODA -DoCjjvbdRpTfiecw -DnbkKvbdRkYetgLT -DoCjjvbdegkVrOQg -DoDLKvbdhlFEOUby -DoCkKvbdFyUtaEXb -DnbjjvbdAMgxsXZx -EOcLKvbdUQqOtuHm -EPDKjvbdxrmiMrCH -EOcLKvbdREDApQdS -DoDLKvbdWRmxBdlD -DnbjjvbdiHKCyVjV -EPCkKvbdxwhjCPyk -EObjjvbdLKaHvAJy -EPDLKvbdZtJJYcsO -DoCjjvbdbPfgDkzd -EObkKvbdUaBqTRRy -EPDKjvbdGYtuAcwb -DnbjjvbdQcbaQRDr -EPCjjvbdsBfNMHKy -EPDKjvbdZyDimblS -DoDKjvbdJXtBglRQ -EObkKvbdpssfrSLU -EOcLKvbdMRwMytpz -DoCjjvbdEYYMUTtM -DoCkKvbdeAUQmXif -DncLKvbdUaBqSpqy -EObkKvbdVAbQrqRy -EObkKvbdwXMAuaWV -DncLKvbdCIjakIfK -DncLKvbdjmBkzEfo -EOcLKvbdKVtfDeGi -EObkKvbdnQZyVjxb -DncLKvbdzRPMhiwA -DncKjvbdJpydnfOF -EPDKjvbdqTsfrRkU -EPDLKvbdEuyQPlie -DnbjjvbdfSBWzlCo -DnbkKvbdqiAKFMne -EPCjjvbdatbHYLUI -EOcKjvbdNsTugEtp -EPCkKvbdmgFXmNgZ -EPDLKvbdMSXNZtpz -DoDKjvbdUaBprqRy -DnbjjvbdXmqAXtvU -EOcKjvbdHlBznWpk -EOcKjvbdVqmwbElD -DoCkKvbdqrVLOLAm -DnbkKvbdZshiYcrn -DoCkKvbdZoNhddyj -EOcLKvbdEuxooljF -DnbkKvbduCcVXVoP -EPCkKvbdmuVZjirG -DncKjvbdRzKHrbvA -EObkKvbdeKJqutzn -EObkKvbdyOShXsIc -EPCjjvbdRbDdlJZL -DoDKjvbdSBdFMIxk -DncLKvbdKaKgMawq -EObkKvbdCDpAuilf -DnbkKvbdRWnDcLgc -DncLKvbdqlzJxkhJ -EPCjjvbdNHDQMpUk -EOcLKvbdRMwbZNtz -EPDKjvbdOEdThiLE -DoDLKvbdUyHszKoO -DnbkKvbdZisIPgCG -DncKjvbdwzHeeweS -DncKjvbdQwODcLhD -DoDLKvbdqdFJPmua -EOcLKvbdvwMAvBVu -EPDLKvbdbVBfwjsh -DoCkKvbdRyjHrcWA -DoDLKvbdWIYVxGxz -DnbkKvbdbiMjLGXY -EOcLKvbdBhjbKiFj -EObjjvbdCDpAvJmG -EPDKjvbdLBKfmCYR -DoCkKvbdbiMijevx -DnbkKvbdyOSgwriD -EPDLKvbdlYrqsZHU -EOcLKvbdwyhGFxFS -EPDLKvbdRyjHsCvA -EPCkKvbdHgGzYxYH -DoDLKvbdGFjRmhtR -EPDKjvbdFyUtaEYC -DncLKvbdeFOrCWbj -DoDLKvbdJSyArlwl -EOcKjvbdZyEKODLr -EOcLKvbdemGXGmJk -DnbjjvbdSCDeLhyL -DoDLKvbdYTLaMsnx -DoCjjvbdxKwEHzyf -EOcLKvbdiVZdvquC -DnbkKvbdUaBqTQqy -EPCjjvbdGZVVBEXb -DoDLKvbdCEQAvKMf -DoDLKvbdRWmdCkhD -EPDKjvbdRotHJecw -DoCjjvbdZxcimblS -EOcLKvbdtbcUvvOo -DnbjjvbdZsiJZDsO -EOcKjvbdRyjHsCvA -EOcKjvbdxLWdHzzG -DoCjjvbdFjdrbhMu -EPCkKvbdxVNFRYlO -DoCkKvbdmIcsqUqa -EPDLKvbdfMfWgMjL -EPDKjvbdTqQoUthN -EOcKjvbdtkwvaUAw -DoDKjvbdBdPaVilf -DoDLKvbdZMRdTmkm -EPDLKvbdelewGlik -DoCkKvbdwzHfFxEr -EPCkKvbdvAcyTPFI -EObjjvbdQdDBPqES -DoDKjvbdZtIiYcrn -EOcKjvbdypnlhiwA -DoCkKvbdNrtWGduQ -DncKjvbdxsOIlqbH -EPCjjvbdANIYrvyx -DnbjjvbdNwnuzdOU -EPCkKvbdFyUuBEXb -EOcLKvbdaaWFGQQX -DncLKvbdraelkfkZ -EPCjjvbdTpqPVUhN -DncKjvbdySmiNSBg -EPDKjvbdrpWPJbvG -EObjjvbdwNWANEFN -EObjjvbdZeYGzhJC -DoCjjvbddndsKstS -EPDLKvbdegkWSORH -EPCjjvbdvwMAvBVu -EPCjjvbdkySqrxgU -EPCkKvbdHkaznWqL -EPCjjvbdqlzKYkhJ -DncLKvbdZxdJmcMS -EPCjjvbdqGEFTvAh -EObjjvbdTYKkmzkY -EPCkKvbdZisHofbG -EOcLKvbdzoPpdcLx -EPDKjvbdZjTHpHCG -EOcKjvbdKWVGEFHJ -EPCjjvbdhyuFlROG -EPCkKvbdFjeTDIMu -DncLKvbdOYPVzcnU -DoCjjvbdSZjISbvA -DoCkKvbdZoNiEdyj -EPCjjvbdrWpMDJZR -EObkKvbdkVvnDaxX -EObjjvbdcSbjtDia -DnbjjvbdLGGICBRV -EPDLKvbdkWWmcbXw -EObjjvbdnHExNOHZ -DncKjvbdUtNUFlVj -EObkKvbdEvZPomKF -DoCkKvbduoTzpjnt -EOcLKvbdURQoVVHm -DnbkKvbdTAEiIBnd -DncKjvbdQwOECkgc -DnbjjvbdRbDdkiZL -DoCjjvbdEPCkLWcE -EPDKjvbdzjUpPdSt -EPDKjvbdZMSDsmkm -DoDLKvbdBdPaWJmG -EPCkKvbdwjwEHzyf -DnbjjvbdhuZeXSUb -DoCkKvbdlYrqsYft -DoCjjvbdEXxMTssl -DoDKjvbdzoPpdbkx -DncKjvbdWRnXbFMD -DoDLKvbddijRutzn -DncKjvbdnCKWwnmu -EOcLKvbdZMSDsmkm -EOcLKvbdUaCRTRSZ -EObkKvbdkCkjpgVH -DnbkKvbdirziTKiz -DoDLKvbdJpyeOenF -EObkKvbdGKdsDHmV -EObjjvbdoAKzshDn -EPDLKvbdlrZVZrci -DncLKvbdRzKHsDWA -EObkKvbdKkAhWAKZ -EPDLKvbdVAaqSqRy -DoCkKvbdjAPgApHK -EPCkKvbdBcpBWJmG -DncKjvbduCbuXWOo -EOcLKvbdqiAKEmOe -EPDKjvbdYpldhleR -DnbjjvbdEPCjjwCd -DnbjjvbdbsDKtEJa -EObjjvbdKfGICBRV -DoDLKvbdRadFMIxk -DoDKjvbdGGJqmhsq -EPCjjvbdJbicQjDY -DncKjvbdbiNKKfWx -EOcLKvbduLxXAsaX -EPCjjvbdEKIJuwjA -EPCjjvbdWRmwadlD -DnbjjvbdfMewGmJk -EOcLKvbdNxOuzdOU -DnbkKvbdfIKvSOQg -DncLKvbdQZNAHSqj -DnbjjvbdZLqdUNlN -EPCjjvbdSLYetgLT -DncKjvbdeEoSCWbj -EPDLKvbdsCFmMGjy -EPDLKvbdLGGHaaRV -DncLKvbdEuxpQMjF -EObjjvbdVYhTzLPO -EPCkKvbdaSFbhTek -DnbkKvbdDihJuwjA -EObjjvbdFjeTDIMu -EObjjvbdhkeDnUby -DoDKjvbdxUmEpyLn -DncLKvbdiVZdvqtb -DoCkKvbdunszqLPU -DnbkKvbdSBcdkiYk -EObjjvbdbhmKKevx -DnbjjvbdVZHtZkOn -DoDLKvbdZirgogCG -DoDLKvbdqBIeAWhE -EPCjjvbdwtmEqYkn -DncKjvbdKCjDRJbx -EOcKjvbdTvLpJsaR -DoDKjvbdyXhjBozL -DnbjjvbduDDUwVoP -DoDKjvbdzaAOfgBl -DoCjjvbdWSOYCElD -EOcLKvbdqwQMDJYq -DoCkKvbdNHColpUk -EPCkKvbdCEPaVimG -EOcKjvbdjKFhJlxS -EOcLKvbdxUleRYkn -DnbkKvbdrNZjZMHi -DoDKjvbdmuUzLKSG -EObjjvbdfIKurOQg -EPDKjvbdQlwbZNtz -DncKjvbdhkeDnUby -EObjjvbdwuMdqZMO -DncKjvbdliDtQtrB -EPCjjvbdNPwqWNgT -DncKjvbdjAPgApGj -EObkKvbdMpYRVmfs -DnbkKvbdGKeTChNV -DoDLKvbdHbMZdzAD -EObjjvbdQlwayOUz -EPDKjvbdVqnYCFLc -DoCkKvbdmpZyVjyC -EObkKvbdUslsfLuj -DoDLKvbdlhdURVSB -EOcLKvbdmSZVZrci -DoCjjvbdYzberJuy -EPDLKvbdhzVGLpnG -EPCjjvbdsPvOicVf -EObkKvbdeOeTLUUS -DncLKvbdmfdxMnHZ -EPDKjvbdHffzYwxH -EPDLKvbdrylPsAgn -EOcKjvbdwWlBWAvV -EPDKjvbdVAbQsQqy -DnbkKvbdsZlPsBIO -DncLKvbdEzspdkbi -DncLKvbdhyuGMROG -DoCkKvbdFaOpxizm -DoCkKvbdZsiIxcrn -DoCkKvbdijGHjMwr -DnbkKvbdcyxpYZQb -DnbjjvbdEzspdkbi -DncLKvbdNQYRVnGs -EObkKvbdkClKpgVH -EOcLKvbdkClKqHVH -EOcKjvbdhanbdvqR -EPCkKvbdmfdwmNfy -EObkKvbdYTMAmUPY -DoCkKvbdIGgZxxXg -EOcKjvbdnHEwlnHZ -DncLKvbdCDpAuilf -EPCjjvbdmbKXXoOV -EObkKvbdapGfdLzd -EPCkKvbdRjyGVHLT -DoCkKvbddoFTLTtS -EPCjjvbdGLFTCglu -DoCjjvbdiLeENtcZ -DoCkKvbdKCicQjCx -EPCkKvbduoTzqLPU -EPCjjvbduVmwiqTA -EPCjjvbdWIXuxGxz -EPCjjvbdpxngfqDx -EOcKjvbdeOdrkTsr -DoDLKvbdNrsufduQ -EOcKjvbdIHHZyXwg -DoCjjvbdpfEEsvBI -EOcKjvbdhgKDYvKV -DnbjjvbdmbJvxOmu -EPDKjvbdGdKujCKK -DoDLKvbdfkGzcGAE -EPCkKvbdZoNiEeZj -EPDLKvbdaMjbTUlg -EPCkKvbdSPsgJfEX -EPDKjvbdDxYLstUM -EPCjjvbdKVtfDeGi -EOcLKvbdpeceTvAh -EObjjvbdHffzYwxH -DnbjjvbdffMZnHHA -EOcLKvbdsQVnibvG -EOcKjvbdZirgpGbG -EObjjvbdJSxaTMxM -EOcLKvbdbrcLUEKB -EPCjjvbdGZUuAcwb -DnbkKvbdpssgRrLU -DnbkKvbdKVteceHJ -EPDKjvbdmajXYOmu -EPDKjvbdNwoVzdOU -DnbjjvbdrpVnicWG -DoDKjvbdjhGlFfNk -EObjjvbdEXwlTtTl -DoDLKvbdkCkkQftg -DncKjvbdDxYLtUTl -DncKjvbdNQYQunGs -DoDLKvbdZQleImFR -DoDKjvbduVmxKRTA -DoDLKvbdsrqsZZdc -DoDLKvbdZLqctNlN -EPDLKvbdNsUVfeVQ -DncLKvbdhuZeXRuC -EPCkKvbdiCObdwRR -DoDKjvbdIwsbIMQp -EObjjvbdtcCtvvPP -EOcLKvbdpyOhHRDx -EObjjvbdmgEwmOHZ -DoCkKvbdelevgNJk -DoCjjvbduLwwBTaX -DoCkKvbdXrlBNTnx -EPDLKvbduCcUvuoP -EPDKjvbdURRPVUgm -EObkKvbdBsBCsfXS -DoDLKvbdZjSgogCG -EObkKvbdhgKDZViu -EPCkKvbdEYXkstUM -DncLKvbdrMzJyLgi -DnbjjvbdaSFcIUFk -EPDLKvbdnBjWxOnV -EPDLKvbdssRryZeD -EOcKjvbderAvzkbo -DoCjjvbdZirhQHCG -DnbkKvbdBraCtFvr -EOcLKvbdxZgfFxFS -DoDKjvbdJuuFdFGi -EPDKjvbdUQqPUtgm -EPDLKvbdNHCpMpUk -EPDKjvbdnCKXYOnV -DoCkKvbddZyQXyQb -DnbjjvbdpxoHgREY -EPCkKvbdfNFwHNJk -DncLKvbdVBCQsQqy -EPCkKvbdUxhTzLOn -EObjjvbdSQTgJfEX -DoCkKvbdrWpLbiZR -DoDLKvbdtcDUwWOo -DoCkKvbdwzHfGXeS -EPDLKvbdrzMPraHn -EPCkKvbdDoCjjvcE -DoDLKvbdbhlijewY -EObkKvbdUxgsyjoO -DoDLKvbdbUafxKsh -DoCjjvbdULuoBWOi -EPCkKvbdVBBqSqRy -DoCjjvbdhkeENtcZ -EPCjjvbdqYnggRDx -DncLKvbdjhHMFfOL -EOcKjvbdZxcinDMS -DoDLKvbdvBDySndh -DncKjvbdirziTKiz -DncKjvbdJXsaglRQ -DncKjvbdhfjDYvJu -DncLKvbdjuvnDbYX -EOcKjvbdKaLHMaxR -DoCjjvbdiGjDZWKV -DnbjjvbdEObjkWbd -DnbkKvbdJmADygVB -EPDKjvbdJvVFdEfi -EPDLKvbdnGeXmOGy -DoCjjvbdpssgSSKt -EPDKjvbdwtldqYlO -EPDKjvbdmfeXmNgZ -DoCjjvbdqvokbiZR -DoDLKvbdqUUHSRjt -EObkKvbdmbKXYOnV -EOcKjvbdaSGChTfL -EPCkKvbdWWiYWDdg -DoCjjvbduoTzqKnt -DnbjjvbdHDkVjBjK -EOcKjvbdbVBfwjtI -EOcKjvbdjvXOEBxX -DncKjvbdZLrETnMN -EObkKvbdfNGXHMjL -EPCkKvbdkDLkRHUg -EObjjvbdZjTIQGbG -DoDKjvbdZsiIyDsO -DnbkKvbdbrbjscjB -EPCjjvbdmbJwYPOV -DoCkKvbdKDJcQicY -DoDLKvbdZxcinCkr -DoDKjvbduoTzqLPU -EOcKjvbddndsKstS -DnbjjvbdNQXqWNfs -EOcKjvbdIidAKQGd -DoDLKvbdTkvOaVni -DoCjjvbdsPvPJcVf -DoDKjvbdVqnXbElD -EOcKjvbdIHGyyXxH -DnbkKvbdUxgszLOn -EPDLKvbdwuMdpxkn -DnbkKvbdqrVLNkBN -DncKjvbdijFgjMwr -EPCkKvbdSQUGjFcw -EObjjvbdRWmdCkgc -DnbkKvbdVTltFkvK -EOcLKvbdJbjCqKDY -EObkKvbdfMfXGmKL -EObjjvbdzRPNJKXA -EPCjjvbdBsAbtGWr -DoDKjvbdJXsahLqQ -DnbkKvbdlBNOmALA -DoDLKvbdlrYtzTDi -EPDLKvbdZtJIxdTO -DncKjvbdmbJvxPOV -EPDLKvbdaMkBsUmH -EPCkKvbdNsUVgFUp -DoCjjvbdWfYytAPT -EObjjvbdNHCpMpVL -EPCjjvbdMgComPtk -EOcLKvbdeqaWzlDP -DoCkKvbdFVxopNKF -EOcKjvbdYkrDsmlN -DncKjvbdWWiYWEFH -DoDKjvbdSLYfUfkT -DnbjjvbdhkeEOVCy -DoDKjvbdJXsagkpp -DoDLKvbdZoOIdeZj -DncLKvbdLiCMRYAS -DncKjvbdyOTHwsJD -DncKjvbdvmWANDeN -DoDLKvbdtTSTYydc -DoCkKvbddneSjtTr -EObkKvbdkDMKpftg -DnbjjvbdbhljKewY -EPCkKvbdIsZBSlwl -EPCjjvbdlqxuZsDi -DnbjjvbdNrtWGeVQ -EOcLKvbdvBEZSndh -EOcKjvbdrJAJdmOe -DoCjjvbdyOTHxTIc -DoCjjvbdmfdwlnGy -EOcLKvbdkDMKpgVH -DoCkKvbdRECaQQdS -DncKjvbdaMjartlg -EPCjjvbdVviXuceH -DnbkKvbdNsUVgFVQ -DoDKjvbdFkEsDIMu -EOcKjvbddZyPwyQb -DoDKjvbdqmZixlIJ -DoDKjvbdrEEhomvB -EOcLKvbdlZSqsZHU -EPCkKvbdehKuqmqH -DoDLKvbdFxtuBDwb -EPCjjvbdKjaHvAJy -DncLKvbdBcpAujMf -DoCjjvbdNQYRWOHT -DoCjjvbdHakzEzAD -EPCkKvbdJTYaSlwl -DoCjjvbdzitpQETU -DoDKjvbdvBEZSoFI -DncLKvbdnBjXXoOV -DoDLKvbdiZuGMROG -DoDKjvbdKVtecdfi -DnbjjvbddjJqvUzn -EPCkKvbdaMjbStlg -EOcKjvbdSZjHsDWA -DnbkKvbdUaCRSqSZ -DoDLKvbdxZgefXeS -DncKjvbdjhGkfFnL -DncKjvbdIjEAJogE -EPCkKvbdNGcPlpVL -DncKjvbdUMWPAvOi -DnbkKvbdatafxKsh -EObkKvbdjcMLQgUg -DoDKjvbddeOqavcK -EOcLKvbdoznELXoA -EPDLKvbdeOdrjtUS -DnbkKvbdjKFhJmXr -EPCkKvbdpxoHfpdY -DoCjjvbdZLrDsnMN -EPCkKvbdwyhFexFS -EOcKjvbdkClKpftg -DoDKjvbdxnTIYSiD -DncKjvbdxnShYSiD -DoCkKvbdFxtuBDwb -EObjjvbdYkrEUNkm -DnbjjvbdNQYQvNfs -EPCkKvbdhlFDnUby -EOcLKvbdiCObdwRR -DoCjjvbdVwJXvEFH -DnbkKvbdBvzchePv -EObkKvbdZHWdAPSi -DncKjvbdHgGzYxXg -DoCkKvbdMJCMQxAS -EPCkKvbdZLqdTmkm -DoDLKvbdnCJwYPNu -EPCjjvbdOSsvGdtp -DncKjvbdlYrqsZGt -EOcLKvbdJYUBhLqQ -DoCjjvbdZisHpGaf -DnbjjvbdVgxWXfxz -EPDKjvbdkWXNdBxX -DoCkKvbdlZTSSyHU -DncKjvbdjggLeenL -DnbjjvbdKNAEZfuB -DoCjjvbdLAkHMaxR -EOcLKvbdZRNFJNFR -DoDLKvbdjAQGaPfj -EObjjvbdjggMGFmk -DoDLKvbdyfyMAMeX -DncLKvbdjbkkRHVH -EOcLKvbdOTTugFVQ -EOcKjvbdWHxWXfxz -EPCkKvbdvwMBWBVu -EPCjjvbdnHEwlnHZ -DoDKjvbdHEKuiaij -DoCjjvbdVwIwvEEg -EPDLKvbdehKvRnRH -DncLKvbdnVUyjirG -EObjjvbdfMevgNJk -EPDKjvbdjbkjqHVH -DncLKvbdrJAKEloF -DoCkKvbdGckWJaij -DnbjjvbdTvMQJtAq -EPCkKvbdhkddNtcZ -DnbkKvbdrzMQTBIO -DncKjvbdsZlQTAgn -EPDLKvbdOFDtJIjd -EOcLKvbdnBivwoOV -DncKjvbdJXtBhLpp -EPCkKvbdJTYaSmXl -EOcLKvbdLGFgbBQu -DncKjvbdnHEwlmgZ -DoCjjvbdACrYJzJQ -EPCkKvbdiZuGLqNf -DnbjjvbdnGdxMmfy -DnbkKvbdRkZGUgKs -DoDLKvbdZisHofaf -EPDLKvbdJKEAJpGd -DnbkKvbdBsBDUFwS -EObjjvbdtcDVWuno -EOcKjvbdBsAbsfWr -EPDKjvbdrWpMChyR -DoDLKvbdVTltFkuj -EPDKjvbdGFjSOJUR -EOcKjvbdBsAcUGXS -EPCkKvbdcJNKKfWx -EPDLKvbdnQZyWKxb -EPCkKvbdqTtGrSKt -EObkKvbdjJfIKNXr -EOcLKvbdVqmxBdkc -EOcKjvbdFWYopMjF -DnbjjvbdqdFJPnWB -DoCjjvbdehKvRnRH -EPDKjvbdkyTRsZGt -EObjjvbdozmckYPA -DnbjjvbdbrcLUDjB -DoDLKvbdrMyixkhJ -DoDLKvbdrpWOjCvG -DoDKjvbdLFehCAqV -DncKjvbdrWpMCiYq -EOcKjvbdVTmUFkvK -EObkKvbdhficZVjV -EPCkKvbdIsZAsNXl -DoCjjvbdmfdxNOHZ -EPDKjvbdznopdblY -DnbjjvbdLiCMRYAS -DncLKvbdePEsKstS -DoDLKvbdUMVoBVni -DncKjvbdWRnXaeLc -EObjjvbdrDdiPmvB -DoDKjvbdDoDKkXDE -DncKjvbdOAIrtJrA -EPCkKvbdwzIGGXdr -EOcLKvbdUQqPUtgm -EPDLKvbdhlFEOUby -DncKjvbdZirhPfbG -EOcLKvbdKVuGEEgJ -DoDKjvbddePSBvbj -EPDLKvbdfHjuqmqH -EPDKjvbdZjSgpHBf -DncLKvbdunszpjoU -EPCkKvbdqTtHRrKt -EObjjvbdfNGXGljL -EObjjvbdUGznMWue -DnbkKvbdsPuoJbvG -EObjjvbdnQZxujxb -EPDLKvbdczZPwyQb -DoCkKvbdWXIwvDdg -EOcKjvbdQvmdDLhD -DncLKvbdCIkBjiFj -EObjjvbdjJegjNXr -DncLKvbdcIlikFvx -EPDLKvbdRkZFtfjs -DoCjjvbdczYoxZRC -EOcLKvbdatagXjsh -DncLKvbdjcLjqGuH -DoCjjvbdMSWlyuQz -DoCkKvbdjuvnDbYX -DnbjjvbdiMEdOUcZ -EPCjjvbdcTDKtEKB -DnbjjvbdwzHeexEr -EPDLKvbdemGWgNJk -EObjjvbdakLfOnDA -EPDLKvbdTfznLvvF -DoDKjvbdaNLBsUmH -EOcLKvbdhzVFkqNf -DoDKjvbdZRNFIldq -DoDKjvbdlrZVZsEJ -EObkKvbdbUagXjtI -DoDLKvbdUyHsykPO -EObjjvbdkVwNdCYX -EPDLKvbdUVkpJtBR -EPDKjvbdrMzJxkgi -EOcKjvbdSLYfUgLT -DoCjjvbdMRwNZtpz -EPDLKvbdIxTaglRQ -EPDLKvbdJqZdnenF -DoDLKvbdZMRdTmkm -DnbkKvbdANHxrvyx -EPCjjvbdFkErbhNV -EOcLKvbdWSNxCEkc -EPCjjvbdiCPCdwQq -DnbkKvbdbAvEeoow -EOcKjvbdeFOrBvcK -DnbkKvbdaRecHtGL -DnbkKvbdZshhxcrn -EOcKjvbdqTtHRrKt -EObjjvbdauBgXjtI -EOcKjvbdQdCaQRDr -DoCjjvbdFVxopMjF -EPDLKvbdIGgZyXwg -DoDLKvbdRpTfjFdX -DnbkKvbdSQUGifEX -DnbjjvbdpxoIHREY -DoDLKvbdqiAJeMne -EOcLKvbdCIkBkJFj -DncLKvbdFfKSNhsq -DoDKjvbdwWkaVaVu -EPDLKvbdNeETiJKd -DnbjjvbdhbOcEvpq -DoCkKvbdrbGMlHLZ -DnbjjvbdLAjgMawq -DncLKvbdlqyUzSdJ -DncLKvbdYkqdTnLm -EOcKjvbdYkrDsnMN -EOcLKvbdnCKXXnnV -DoCjjvbdDncLLWbd -DoDKjvbdYpmFJMdq -EPDLKvbdFpATXHFy -DoDKjvbdJvUfEEfi -EPDLKvbdmJEURVSB -DncLKvbdtbcVWuno -EOcLKvbdbUagYKtI -EObkKvbdcJMjKevx -DnbjjvbdKVuGEFGi -DoCkKvbdZMRctNkm -EOcLKvbdYpmEiMdq -DoDKjvbdYpmEhmEq -DncKjvbdzjVQQDrt -EPCjjvbdzHYlAMdw -EPDLKvbdYkqcsnMN -EObkKvbdiiehJmYS -DnbjjvbdDwwktUUM -EObkKvbdrounjCuf -DnbjjvbdGGKRmiUR -EOcLKvbdwzIGFxEr -EPDKjvbdOEdUJJLE -DoCkKvbdfNFvgMjL -DoDLKvbdOEdThhjd -DnbkKvbdyTOImSCH -EOcLKvbdzitpQESt -DoDKjvbduDCuWvPP -DoCjjvbdTppnuUhN -DoCkKvbdIBlZdzAD -DoCjjvbdZQmFJMeR -DnbkKvbdJXsaglQp -DoCkKvbdSZigrcWA -EObjjvbdZsiIyETO -EPDKjvbdZLqctOLm -DncKjvbdwyhGFxFS -DncLKvbdqwPkcIyR -EPDKjvbdRkYfUgLT -DoCkKvbdxxIjBpZk -DncLKvbdqlyjYlIJ -EPCjjvbdRaceLiYk -EPDKjvbdjlbLyeHP -EPDKjvbdrbFmLfkZ -EPCkKvbdvBEYsPFI -DncKjvbdSBdElJYk -EPDKjvbdpxoIHREY -EPCkKvbdjhHMFfNk -EPCkKvbdANIYsXZx -EObjjvbdnGdxNOHZ -EObjjvbdKQzFPGOF -DoCjjvbdtunYKRTA -DnbjjvbdLFfHbBRV -EOcKjvbdpedEsuaI -DnbjjvbdYkqcsmkm -EPCkKvbdbrcLUEKB -DnbkKvbdNQYQunGs -DoDLKvbdJcJbqKCx -EPDLKvbdIxTbHlRQ -DnbkKvbdvwMAvBWV -EOcKjvbdfHkVqnQg -EOcLKvbdbKkfPNcA -EPDLKvbdVAbQrpqy -DncLKvbdWRnXaeLc -EPCkKvbdFpATXGey -DoDLKvbdyfxlANFX -DoCkKvbdFVyQQMjF -EOcLKvbdxnShXrhc -DoCjjvbdmaivwoOV -DnbkKvbdbsDLTdJa -DoCkKvbdUtMtGMVj -DnbjjvbdNVSqkNAX -EPDLKvbdWfYytAOs -EPCkKvbdZyEJnDLr -EObkKvbdyXhjCQZk -EObkKvbddoFSkUTr -EOcKjvbdeATqMxKG -DnbkKvbdnPyyWKyC -DncKjvbdkySrTZHU -DnbjjvbdmfdxNNfy -EPCkKvbdHlBznXQk -EPDKjvbdZisIPgCG -DncLKvbdrEEhonVa -DoDLKvbdrykosBHn -EObkKvbdqvpLbiZR -DoCjjvbdhkeDnUcZ -DoCkKvbdVwIwudEg -DncLKvbdyXiJaozL -DoCkKvbdyzeOSIIh -EPCjjvbdkVwNcbYX -DncLKvbdTkuoAuoJ -EPCjjvbdijFgimYS -DncLKvbdliEURUrB -DoDKjvbdURQoUuIN -DoDKjvbdrMzJxkhJ -EPCkKvbdqYngfqEY -EPDLKvbddwzUTrFz -DoCkKvbdyYIjBpZk -EPCjjvbdssSSxzEc -EObkKvbdFejSNiUR -EPCkKvbdrEFJPmua -DnbkKvbdiifIJmXr -EPDLKvbdZLrEUOLm -EObjjvbdGFiqnItR -DoCkKvbdjuwNcaww -DncKjvbdmpZxukYb -DoDLKvbdqdFJQNua -EPDKjvbdNQYRWOGs -DoCjjvbdZeYGzhIb -EObjjvbdZjSgpHCG -EObjjvbdhfjDYvKV -EPCkKvbdJpzFOeme -DnbkKvbdlhcsptrB -DncLKvbdFeiqnJTq -EObjjvbdZxcinCkr -EPDLKvbdFVyQPmKF -EObkKvbdelfWfljL -EOcKjvbdJpydnenF -DnbkKvbdbVCGwkUI -EObkKvbdemFwGmJk -DoCkKvbdBsAbsfWr -EPDLKvbdJYTbHkqQ -DncKjvbdyNrgxTIc -DoDKjvbdGQASvfey -EOcLKvbdRNYCZOUz -EOcKjvbdyzeORgiI -EOcLKvbdZQmEhleR -EPCjjvbdmttyjjRf -DnbjjvbdLBLGmBwq -EOcLKvbdKVuFdFGi -EPCkKvbdxmsHwsJD -DoDLKvbdyOTIXriD -EPDLKvbdZsiJYcsO -EPCjjvbdjvXOEBxX -DoCkKvbdlZSqsZGt -DoDKjvbdADRxKZiQ -EOcKjvbdzoQREcMY -EObkKvbdGGKRmhsq -EObjjvbdJutfDdgJ -DoDLKvbdUsltFkvK -EObkKvbdHDkWKBjK -DncKjvbdLqwMzVQz -EObjjvbdaRecITfL -DoDKjvbdakMGPNcA -DnbjjvbdwXMBWAvV -EOcKjvbdQwOEDLhD -EOcKjvbdAMgxrwZx -DnbjjvbdqqtkNkAm -DoDLKvbdbhmKKewY -DoCjjvbdQmYBxnUz -DnbkKvbdvPTzqKnt -EPCkKvbdJqZePGOF -DoDLKvbdTfznMXVe -DoCkKvbdFyVUaDwb -DncLKvbdFxuUaDwb -EObkKvbdhlEcnUby -DnbjjvbdCJLCKhfK -DoCkKvbdPyNAGrrK -EOcKjvbdVgxVxGxz -EObkKvbdSxKkmzjx -EOcLKvbdemFwHMjL -EObjjvbdrEEiPnVa -DoCkKvbdDjIJvXjA -EPCjjvbdYTMAmToY -DoCjjvbdbLMFnmcA -DoCkKvbdrounjCuf -EPDKjvbdrJAJeNOe -DncLKvbdJbicQjDY -EPCjjvbdmpZxvLZC -DncLKvbdVrNxCElD -DnbkKvbdDoDLKwCd -DoDKjvbdsZkpSaIO -EPCjjvbdNQYRVnGs -DoCkKvbdVrOXbFMD -DoCjjvbdlYrqryHU -DoDLKvbdVTltGMVj -DncLKvbdwzHfGXeS -EPCkKvbdmajXYOnV -EOcLKvbdZLqdTmlN -DoDLKvbdqdFJQOWB -EObkKvbdVgwvXgYz -EPDKjvbdkMakzFHP -DoDKjvbdakLfPNcA -EObjjvbdyYJJbQZk -DoDLKvbdDigivXjA -DoDLKvbdHELWJajK -EObjjvbdZGvdAPTJ -EOcKjvbdUGzmkvue -DncLKvbdSZigsCvA -DoDLKvbddBsMrATm -EObkKvbdmSZUzSdJ -DncKjvbdjAPfaQGj -DoDKjvbdlBMoNALA -DnbkKvbdJTZArlxM -EObjjvbdHgHZyXwg -EPDLKvbdhzUekpnG -EPDKjvbdEOcKjvbd -DoCkKvbdjcLkRHUg -EObjjvbdBiLBkIej -DnbjjvbdZMSEUNkm -DoCkKvbdzRPNJJwA -EPCjjvbdGdKuiajK -EPDLKvbdrEFIpOVa -EPCkKvbdKfGHbApu -EPDKjvbdUtMsfMVj -DoDLKvbdbVCHYKsh -EPDLKvbdEztRFMCi -EOcLKvbdJmADzGta -DnbjjvbdtSrSxydc -DoCjjvbdACrYKZiQ -EPDKjvbdsrqsYzEc -DoCjjvbduLxXAtAw -DoCjjvbdEztQdkbi -DoDLKvbdkClKpgVH -DoDLKvbdSCDeMJYk -DoDLKvbdpxoIGqDx -DoCkKvbdDigjVxKA -EPDKjvbdGGKSOJUR -EOcLKvbdiLeDnVDZ -DnbjjvbdyOSgxShc -EPDLKvbdNsUWHEuQ -EOcLKvbdYpmFImEq -DoDKjvbdZLrDtOLm -DncKjvbdJvVGEFHJ -EOcKjvbdZirgogCG -EPCkKvbdKCjCqJbx -EObjjvbdgKfzcGAE -DncKjvbdZjTIQHBf -DoDKjvbdRDcBQQcr -DnbkKvbdZQmEiNFR -EObkKvbdSiZjRABM -EObkKvbdURROttgm -EObjjvbdlZSrSxft -DoCjjvbdNxPVzdOU -EPCjjvbdqAheAWhE -EPCkKvbdwXLaWBWV -DoCkKvbdKDKDQjCx -EOcKjvbdehLVqnQg -DoCkKvbdZxdJmcMS -DncLKvbdDjHjVxKA -EObkKvbdXrlAmToY -EOcLKvbdwtleRYlO -EPCjjvbdtlYWaUBX -EPCkKvbdiUzFXSVC -DoCjjvbdcJNJkFwY -EObkKvbdaRebhUGL -EOcKjvbdNHDQMotk -DoDLKvbdyTNhlqbH -EOcLKvbdKfGIBaRV -EObkKvbdKaLHMawq -DoCkKvbdnCKWwoNu -EPDLKvbdHffzYwxH -DncKjvbdnGdxMmgZ -EPCjjvbdNPwpvNgT -DoDLKvbdYkrEUOMN -DoDKjvbdTqROuUgm -DoDKjvbdvBDyTPEh -DnbkKvbdJKEAKQHE -EObjjvbdiBoCeWqR -DnbkKvbdmRyUyrci -DnbkKvbdJuuGEFGi -EOcLKvbdFyVVBEXb -EObkKvbdwyhGFwdr -EObkKvbdCTBDTevr -DoDKjvbdjbkkQftg -EOcKjvbdVAbQrqRy -EObjjvbdLAkHMawq -EObjjvbdEztQeLcJ -EPCjjvbdcIlikFvx -DncKjvbdZyEJmcLr -EObjjvbdqceJPmua -DncKjvbdZnmiEdyj -EOcLKvbdiGicYujV -DoCkKvbdFeirNhtR -DoCkKvbdDjHjVxKA -DnbkKvbdqFdEsvBI -EOcKjvbdcImKKevx -EPDLKvbdQmXbZOUz -DncKjvbdqcdhpNvB -EObkKvbdsPvOjCvG -DoDKjvbdFVyQPmKF -EOcKjvbdqYnhGpcx -EPDKjvbdKfGIBaRV -EPCkKvbdnGeXmNgZ -DncKjvbdKVtedEgJ -EObjjvbdCTAbsewS -DnbjjvbdeEoRavcK -EPCkKvbdNsUVfeVQ -EPDLKvbdGdLWKCKK -DnbjjvbdKfFhCBRV -DoCjjvbdZLrDtOLm -EPDLKvbdhtydvrVC -DoDLKvbdZjTIPfaf -DoCjjvbdbrcLTdKB -DncKjvbdzoQRFClY -DnbjjvbdSKyFuHKs -EOcKjvbdZQldiMeR -DncLKvbdkySrTYft -DnbkKvbdSLZGUgKs -EPCkKvbduCbuWvOo -DoDKjvbdsCFlkgLZ -DoCjjvbdrDdiPmvB -EPDLKvbdySnJNRbH -EPDLKvbdDoDKkXDE -EPCjjvbdijGHjMwr -EOcLKvbdeJjSWUzn -EPCkKvbdKWVFdEgJ -DoDLKvbdVYhTykPO -EObkKvbdeJiqutzn -DoCjjvbdRjyFuGkT -DoDKjvbdHDkWJajK -EPCkKvbdbKlFnnDA -EPDKjvbdQwOEDMHc -DoDLKvbdZshiZESn -EObjjvbdkyTSSyGt -DoCkKvbdxUmEpyLn -EObjjvbdMuSqkNAX -DncLKvbdbiNJkGWx -DoCjjvbdWIYVwfxz -DncLKvbdkVwNcaww -DoDLKvbdOFEThhjd -DoDLKvbddndrkUTr -DnbkKvbdyzeNrHiI -EPCjjvbdZRNEhldq -DncKjvbdhlEdNuDZ -DoCjjvbdqquKmkAm -DoDKjvbdFyVVBDxC -EPCkKvbdJuteceHJ -DnbkKvbdiBoDEvqR -DoDLKvbdLqvlzUpz -EPCjjvbdrRuKnLBN -DnbkKvbdZjShQHCG -DnbkKvbdcScLTcjB -EOcKjvbdyNrgxSiD -EOcKjvbdZirhPfbG -DoDLKvbdkIGkefOL -EPDLKvbdkCkkRGtg -EPDKjvbdbUafxLTh -EObkKvbdhfjDYvKV -DoCjjvbdpecdsvAh -EOcKjvbdpfDeUWAh -DnbkKvbdPxmAGsRj -DnbjjvbdZMSEUNlN -EOcLKvbdqFdFTvAh -DoCjjvbdWXJXvDeH -DoCjjvbdqUTfqrLU -EPCjjvbdvOszqLPU -EObkKvbdmtuZkJqf -EOcLKvbdjgfkefNk -DoCjjvbdhaoCeWqR -EObjjvbdKaLHMbXq -DoCjjvbdSLZFtfjs -DoCjjvbdFfKSOItR -DnbkKvbdqUUHSSKt -EPCkKvbdHEKujBjK -EObkKvbdIsZBSmXl -EOcKjvbdRDcApQcr -DoDKjvbduDDVWvPP -EOcKjvbdLBLGlaxR -DoDLKvbdIxTbHlQp -EPDLKvbdrRtkOKaN -DoCjjvbdRjyFtfkT -EPDKjvbdGQASwHGZ -EPDKjvbdMgDPlouL -EObkKvbdJXtCILqQ -EObkKvbdrEFJQNvB -DoCkKvbdeOeTKtUS -EObkKvbdSQTgJfDw -EPCjjvbdSQUGiedX -DoCjjvbdqUUGrRjt -EPDKjvbdTqRPVUgm -EPCkKvbdIMBznWqL -EObkKvbdhancEwRR -EOcKjvbdrMzJxkgi -EPCjjvbdhbPDEvqR -EPDKjvbdZHXEAOsJ -EPDLKvbdxnShXriD -DoCkKvbdLLAgvAKZ -DoCkKvbdhficYvJu -EObjjvbdZRMeIleR -DncLKvbdYfwEAOri -DoDLKvbdDwxMTtUM -DoCkKvbdWRmwbFLc -DnbkKvbdNQYRVnHT -DnbjjvbdjmCMZeHP -EPDKjvbdaNKbTUlg -EPCkKvbdidkHVPAO -DoCjjvbdHfgZxwxH -EObjjvbdxwhibPyk -EPDKjvbdFjeTDHmV -DoDKjvbdiCOcFWqR -DoCkKvbdJmADyfuB -EOcLKvbdhficYujV -DncLKvbdYzbfSJuy -DoCjjvbdbUagXjtI -DoDKjvbdjKFhKNYS -EOcLKvbdCIkCLJGK -DoDKjvbdZshiZESn -EPCkKvbdSQTfjFcw -EObkKvbdiMEcnUcZ -EPDLKvbdyOTHxSiD -EPCjjvbdFjeTDHmV -DnbjjvbdJuuGEFGi -EPDKjvbdhkeDnVCy -EPCkKvbdVAaqSprZ -DncLKvbdVUNTelVj -DoCkKvbdfILVrNpg -DncKjvbdNHDQNPuL -EOcLKvbdLZQirztf -EObjjvbdGckWKCJj -EObkKvbdIHGyyXwg -DncLKvbdiUydwSVC -DoDLKvbdpecdtWBI -EOcLKvbdLGFgaaRV -EOcLKvbdezuxeJUX -EObkKvbdgGLymgHA -DnbjjvbdEvZQQNJe -DncKjvbdJcJbpjDY -DoDKjvbdIxTahLqQ -DncKjvbdBcpAvJlf -EObjjvbdnPyyVkYb -EObjjvbdfNGWfljL -DnbjjvbdieLHVPAO -EOcKjvbdRNYCYmtz -EPDKjvbdiHJcYuiu -EObkKvbdMowqVnHT -DoCjjvbdiUydvrUb -EObjjvbdZMRcsnLm -DnbkKvbdaSFcIUFk -DnbjjvbdZyEKNcLr -DnbkKvbdZnnJFEzK -DncLKvbdJSyBSlxM -DoCkKvbdXsMAmUOx -EPCjjvbddneSkTtS -EOcLKvbdVwIxWEEg -EPCjjvbdxsOJMrBg -DncKjvbdkIHMGGOL -DncLKvbdGFjRmhsq -DnbkKvbdySmiNRag -EPDKjvbdpyPHgREY -DnbjjvbdGZUuAcxC -DnbjjvbdiHKDYvJu -DoCjjvbdtlXwBUBX -EObkKvbdTkvPAvPJ -EOcKjvbdSxLLmzkY -DncKjvbdhgJcZVjV -EOcLKvbdZirgogBf -EOcKjvbdTukpKUBR -EPDLKvbdQlwaxmtz -DoCkKvbdNxOuzdNt -EPDLKvbduCbuXWPP -EPCkKvbdmbJvwoNu -EObkKvbdKDKCqJbx -EPCjjvbdyNsIXrhc -EPCkKvbdSCEEkiYk -EObkKvbdOFDshiLE -DoDKjvbdZnmiFEzK -EObkKvbdJbjDRKDY -EObkKvbdYfvdAOri -DncKjvbdkDLjpfuH -DoCkKvbdsrqsZZdc -DoDKjvbdLBLHNBwq -DncLKvbdDjHjWYKA -DoDKjvbdZQleIldq -DoDKjvbdatbGxKtI -EObjjvbdUWMQKUAq -EOcLKvbdlhdUQtrB -EPCjjvbdAMhZTWyx -DoCjjvbdjhGlGFmk -DoDLKvbdHgGzZXxH -EOcKjvbdrykoraIO -DoDKjvbdjJehJlwr -EObkKvbdrEEhonWB -EPCjjvbdiUyeWrUb -DnbkKvbdNQYRVmgT -EPCjjvbdVUNUFkuj -DnbjjvbdEYYMTtUM -DoDKjvbdYpldhldq -EPCjjvbdtlYWaTaX -DoCjjvbdozmdLXoA -DnbjjvbdZnnJFFZj -EObjjvbdZshiZDrn -EPDLKvbdZjShPfaf -DoCkKvbdrpVnibvG -DoCkKvbdQwNcblHc -EObkKvbdxZgefXdr -DoDKjvbdNddUIhkE -DncKjvbdcImJkFwY -DoDKjvbdZirhQGaf -DoDKjvbdqwPkcJZR -EPDLKvbdkHgLfFnL -DncKjvbdlqxuZrci -DncKjvbdRadFLiYk -EPDKjvbdIHGyxxXg -EObkKvbdmpZyVjyC -EPCkKvbdUaBqSpqy -EOcKjvbdqZOgfqDx -EObkKvbdkNBlZeGo -EObjjvbdOAIrsjSA -EPDLKvbdEvZPpNKF -DnbjjvbdczYoxZRC -DoDKjvbdvAdZTPEh -DncKjvbdqUTfqrKt -EPCkKvbdZGwEAPTJ -EPDLKvbdZMSEUNkm -EPCjjvbdYkqctNlN -DnbkKvbdeEnqawDK -DoCjjvbdKVuGEFHJ -EOcKjvbdzitopDsU -DnbjjvbdsBfNLgLZ -DnbjjvbdcImJkFvx -EPCkKvbdMgCpNQUk -EOcLKvbdZQmEhleR -EPDLKvbdtTRrxzEc -DncLKvbdKVuFceHJ -EPCkKvbdyfxlAMdw -DnbkKvbdsZkosBHn -EPDLKvbdwWlAvBVu -DoDLKvbdlqxuZrdJ -EPDLKvbdMRwMzUpz -EObjjvbdFkFTCgmV -EObkKvbdHEKvJbKK -DncLKvbdkNCMZdfo -DoCjjvbddoFSkTtS -EPCkKvbdRpTfjFdX -DoDKjvbdIGgZyYXg -EPCkKvbdBiLCLIfK -DoCjjvbdKQydnfNe -EPCjjvbdHgGzZYYH -DnbjjvbdYNqAYUvU -DncKjvbdGckVjBjK -DoCjjvbdjhHMFemk -DnbkKvbdkIGkeenL -DncLKvbdmaivwnmu -EPDLKvbdmuVZkJqf -EPDKjvbdNddUIhjd -DoCkKvbdRDbaQRES -DncLKvbdTvLojUBR -DncLKvbdtSrSxyeD -DncKjvbdjgflGFmk -DoCkKvbdQwNdDLgc -DoCkKvbdEXwksssl -DoDKjvbdtAHRIAAr -DoDLKvbdSPsgJecw -EObkKvbdjggLfGOL -DoCjjvbdSBdFLhxk -DoCkKvbdiMEdNuDZ -DoCjjvbdhtzFWrUb -EPCjjvbdSKxetgKs -DoDLKvbddndsLTtS -DncKjvbdtcCtwVno -DoDLKvbdACrYJzJQ -EOcLKvbdyOShXrhc -EObjjvbdqquKnKaN -DoCkKvbdnCJvxOnV -EPDLKvbdFWYpQMjF -DnbjjvbdnCJvwoNu -EObkKvbdhfjCyWKV -DoDKjvbdrNZjZLhJ -DnbkKvbdyNrgwsIc -EPCkKvbdSZjITDWA -DncLKvbdqiAJeNOe -DoCkKvbdhaoDEvpq -EOcLKvbdtkwwAtAw -DncKjvbdsPvOicWG -DoCjjvbdWXJYVcdg -DoDLKvbdmIdUQuSB -DnbkKvbdauBgYKtI -EOcLKvbdJbicRKCx -DoDLKvbdsPuoJcVf -EPCkKvbdfILWRnRH -EPCkKvbdAMhYrvzY -DoCjjvbdKWUedEfi -EPCkKvbdhaoDEvqR -EObjjvbdxVMeRZMO -DncKjvbdFaOqZJzm -DncKjvbdIryArlwl -EObkKvbdRWmccLgc -EPCkKvbdsPunibvG -EOcKjvbdQccBPpcr -EPDKjvbdssRsYzFD -DncLKvbdySmiMqbH -EObkKvbdZLqdTmlN -EPDLKvbdVAaqTQqy -DncLKvbdFWZPomJe -DoDKjvbdUVkojTaR -DncKjvbdULvPBWPJ -EObjjvbdUslsfLuj -DoDKjvbdsBfMlHKy -DoCjjvbdkySrTYgU -EPDKjvbdYgXEAPTJ -EOcLKvbdrzMPsAhO -DoCkKvbdcyxpXyRC -DncLKvbdkIGkeemk -EObkKvbdVqnXbElD -EObkKvbdMuSqkNAX -DncLKvbdkNCLydfo -EOcLKvbdUVlQJsaR -EOcKjvbdczZPxYqC -EObkKvbdWIXvXfxz -DoCkKvbddndsLTtS -DnbkKvbdFfJqmiUR -DncKjvbdURROuVIN -EObkKvbdddnrCXDK -DncLKvbdZyEJmcLr -EPCkKvbdVgxVxHYz -DoDKjvbdFfKRmiTq -EPDKjvbddCTNSAUN -DoDLKvbdUxgsykOn -DoDLKvbdBhjbLIfK -DoCkKvbdFejRmiTq -EPDLKvbdmuUykJqf -DoCkKvbdVTmTfLuj -DoCjjvbdkNCLydgP -DnbjjvbdHffzYxYH -EObkKvbdpxngfpcx -EPCjjvbdKQzFOfOF -DncLKvbdOEdThiKd -EOcKjvbdJSyBTNXl -DncLKvbdyNsIXriD -EOcLKvbdJYTagkpp -DoCjjvbdkMakzEfo -DoDLKvbdZjSgpGbG -DnbjjvbdSQUHJfDw -DncKjvbdRpTgJedX -DncKjvbdrykosBIO -EObkKvbdGYttaEYC -DoCkKvbdZxcjNcMS -DoCjjvbdRadElIyL -DoDKjvbdkySqryGt -EPDKjvbdiHJbyWJu -EPCjjvbdwzHeewdr -EPDKjvbdQwNccLhD -DoCjjvbdbBVeGPow -EOcKjvbdddnrCWcK -EPCjjvbdJXtCHkqQ -EObkKvbdrbFllHLZ -DncKjvbdACqxKZhp -DoCkKvbdJXtCILpp -DncKjvbdEYYMTssl -EOcKjvbdwjvdHzzG -EPDLKvbdemGWgMik -EPCjjvbdqvokcIyR -DnbkKvbdUaCQrprZ -DoCjjvbdKCjCqKDY -EPDKjvbdYSlBMtOx -EPDLKvbdyXiKBozL -EObkKvbdZxdKNcMS -EObkKvbdCDpBVjNG -DncKjvbdmgExMmgZ -EObjjvbdHkaznWqL -EObjjvbdkNCLzEfo -EPDLKvbdyNrgwsIc -DncKjvbdnHFYNNfy -DoCkKvbdDwwktTsl -EPDLKvbdTlWOaWPJ -DoDKjvbdmIctRVRa -EPCkKvbdeEnqbWbj -EPDKjvbdTYLMNzkY -DncKjvbdkHgLfGNk -DncLKvbdnPyxvLZC -EOcLKvbdjKGHjMxS -DoCjjvbdiZtfMROG -EPDKjvbdFeiqmhsq -EPDKjvbdDoDKjvbd -EOcLKvbdKRZeOfOF -DoDKjvbdzoQQeCkx -EObjjvbdEOcLKwDE -DoCkKvbdrafNLgLZ -EObjjvbdMfbomPuL -DncKjvbdUQqPUthN -EOcLKvbddjJrWUzn -DoDLKvbdvBDySoEh -DnbjjvbdVUMselVj -DoCkKvbddndrkUUS -EObkKvbdmpZxvKxb -EPCkKvbdmbJvxPNu -EPCkKvbdmfdwlnHZ -DnbkKvbdZRMdhmFR -DnbjjvbdYSlBNToY -DncLKvbdzoQRFClY -EPCkKvbdVZITzLOn -DncKjvbdZtIiZDrn -DncKjvbdFVxopNKF -EOcKjvbdtTSSxydc -EObjjvbdUVlQKTaR -EPDLKvbdkMbLzEgP -DoDLKvbdKDJcQicY -DoDLKvbdJmAEZgVB -EOcKjvbdCWzdJFPv -DncLKvbddneTLUUS -EObjjvbdBcoaWJlf -EPDKjvbdGcjvJbJj -DoCjjvbdddoRavcK -EOcLKvbdAMhZSvyx -DnbjjvbdajlGOmcA -DoCkKvbdCIkCLJFj -DnbjjvbdMSWmZtpz -EOcKjvbdNGcQMpUk -EOcKjvbdTqROuUhN -DoCkKvbdFVxoolie -DoDKjvbdUQpnuUgm -EPDKjvbdnBiwXnmu -DnbjjvbdJuuGDdgJ -EPCjjvbdZLqcsnLm -EObkKvbdZnmheEzK -DoDKjvbdXsMAltOx -EObkKvbdiMEdOUcZ -DoDKjvbdZRNEhleR -DoDLKvbdMIbLpxAS -DoDLKvbdVwIwucdg -DoCjjvbdRbDeLiZL -DncLKvbdZMRctNlN -DoCkKvbdGcjvJbJj -DnbjjvbdSZihScWA -EPDLKvbdkDLjqHUg -DnbjjvbdZisIPfaf -EObjjvbdmpZyWLZC -EOcLKvbdrbGNLgLZ -DnbkKvbdkVvmdBww -EObjjvbddoFSjstS -EObjjvbdxwiJbPyk -EPDKjvbdTvLoitAq -DoCkKvbdZLrDsnMN -DoDKjvbdOAJTUJrA -EObkKvbdURQntuHm -EObkKvbdkIGkefOL -DncLKvbdsCFllHKy -EPCkKvbdatafxKtI -DoCjjvbdiifHjMxS -DnbkKvbdZsiIyDsO -DncKjvbdieKgUoAO -EPCjjvbdBhkCLIej -DnbjjvbdDxXktTsl -EObkKvbdKCjCqKCx -EOcLKvbdIwsahLqQ -EPDLKvbdhzUfLpnG -EObjjvbdbAvEepPw -EOcLKvbdSLZFuHKs -DnbkKvbdIidAJogE -DnbjjvbdJbjDQicY -EPDLKvbdQwODblID -EObkKvbdqZOgfqEY -EObjjvbdkWWnDbXw -DncLKvbdEvZPpMjF -EPDLKvbdKQydnfNe -EObjjvbdUWMQJtAq -EOcLKvbdqrUjmkBN -DoDLKvbdJmAEZfuB -DoCkKvbdhtydvqtb -DoCkKvbdtAHQhABS -EPDLKvbdxZhGGXdr -EPDKjvbdmSZVZrci -DnbkKvbdZjTHogCG -EObkKvbdYqMdiMeR -DoDKjvbddwzUURez -DoDLKvbdbKlFnnDA -EPCkKvbdGGKSOJTq -EObkKvbdLGFgbBRV -DoCkKvbdKyQjSzuG -DncKjvbdJcJcRJcY -EOcLKvbdnBiwYPOV -EOcLKvbdLGGHaaRV -EObjjvbddneSkTtS -DoDKjvbdiLddOUcZ -EObkKvbdsPvOjCuf -DnbkKvbdZyEKOClS -DoCjjvbdyzeORhIh -DnbkKvbdhkeDmuCy -EObkKvbdvvkaWAvV -EOcKjvbdzeZnzdzQ -DoCjjvbdVAaprqSZ -EObjjvbdjhGkefNk -DncLKvbdSKxfVHLT -EPCjjvbdZRMeImFR -DncLKvbdFeirOJTq -DncLKvbdFfJrOItR -DoDLKvbdmoyyVkYb -DncLKvbdddoRavcK -DoDLKvbdauBfxKtI -EObjjvbdSPtHJfDw -EPCjjvbdCEQBWJmG -DoCjjvbdDnbkLWcE -EPDLKvbdVUNUGMVj -DnbkKvbdnQZyVjyC -DnbkKvbdgFkymfgA -DoDKjvbdRDcBQQdS -EOcKjvbdtcCuWvOo -EObkKvbdlrYuZrdJ -DoCjjvbdZirgogBf -DoDLKvbdMfcPmPuL -EOcKjvbdDwwlTtTl -DncLKvbdwXLaWAuu -EPDKjvbdUaBqSpqy -EObkKvbdHlBznXRL -EPCkKvbdkMakzFHP -DnbkKvbdqZOgfpcx -DnbkKvbdUMWOaWPJ -DncLKvbdMfbolpVL -EObjjvbdfekynGgA -EPCkKvbdWWiXvEFH -DoCjjvbdpxnhGqDx -DoDKjvbdsQVnjDWG -EObkKvbdYNqAXtut -DncLKvbdDnbkLXCd -EObkKvbdKaLGmBwq -DoCkKvbdBvzciFPv -DoDLKvbdjKFgilwr -EPCkKvbdUaBqTQqy -DoDLKvbdVgwvYHYz -EPDKjvbdIHGyyXwg -EPDKjvbdEXxMTstM -DnbkKvbdQccBPpcr -DnbkKvbdMgCpNPuL -EPDKjvbdSPtHKFcw -DoDKjvbdkIHMGFnL -DncLKvbdnGeXmNgZ -DoDLKvbdhtyeWquC -EObjjvbdqGEFUVaI -EOcLKvbdNPwpumgT -DnbkKvbdZshiYdTO -DoDKjvbdZMSETmkm -DncLKvbdRbDdkhyL -EPCjjvbdTvMQJtBR -EObkKvbdjvXOEBww -DncLKvbdrXPkbiZR -EOcLKvbdFejSOJTq -EOcKjvbdegjvRnRH -EPDLKvbdJvVGDeHJ -EObjjvbdXrlBMtOx -DncKjvbdFejSNhsq -EPDKjvbdBiLBjiGK -EOcKjvbddiirVtzn -EPDLKvbdVBBqTRRy -DoCkKvbdeqaWzkcP -EObjjvbdqYnggREY -EPDKjvbdEARiNZwX -EObjjvbdSQTfifEX -EObjjvbdLBLHNBxR -EPCkKvbdNHCpMpUk -EPCkKvbdKVuGDdfi -EPCkKvbdxrnImRbH -EOcLKvbdZRNEiNFR -EOcLKvbdtbcUvuno -EPCjjvbdJTZAsNXl -EPDLKvbdFVyQPljF -DoCkKvbdieKftoAO -EObkKvbdZMSETnMN -DoCjjvbddePSBvcK -DncLKvbdqUUHSSLU -DoDLKvbdZQldhmEq -DoDKjvbdOTTugFUp -DncLKvbdZsiJZESn -DnbjjvbdtbcUwWPP -EPDLKvbddwzTtRez -DnbjjvbdZoNheFZj -EPCkKvbdKfFgbApu -DoDLKvbdhytfMQmf -DnbkKvbdnGeXlnGy -EPCjjvbdSBcdlIyL -DncKjvbdbAvFFpPw -EObjjvbdzoPpeClY -EOcLKvbdqwQMDIyR -EPCjjvbdmaivxOmu -EPCjjvbdIwsahLqQ -DncLKvbdddoSBwCj -EOcLKvbdrEEhpNvB -DoCjjvbdEPCkKvcE -DncKjvbdePEsLTsr -DncKjvbdmRyVZsEJ -DnbjjvbdZLqdTnMN -EPDKjvbdRbEFMIxk -EObjjvbdJXsbHlRQ -DncKjvbdkDMLQftg -EOcKjvbdOEctJIjd -DnbkKvbdqTsfrRkU -EPDKjvbdkIGkeenL -DoDLKvbdUxhUZjnn -DncLKvbdwyhFexFS -EPDKjvbdbLLfOmcA -DnbkKvbdtbbuXWPP -EOcLKvbdYpmEhmFR -DnbkKvbdxmsHxTIc -DoDKjvbdznoqFDLx -EObjjvbdmfdxMnHZ -EObjjvbdYTMBNUOx -EObjjvbdADRwizJQ -EOcLKvbdMoxQvOGs -EOcLKvbdrWolDJYq -EPCjjvbdeFPRbXDK -DoDKjvbdrDdhpNvB -EPDKjvbdZxdKODLr -EOcLKvbdWSNwadlD -EOcKjvbdxrmhlqbH -DoDLKvbdzoPqEblY -DncKjvbdTkuoBWPJ -DnbjjvbdrykpSaHn -EOcKjvbdKWUfDdgJ -DnbkKvbdZMSEUOMN -EObkKvbdSBcdkhxk -DnbjjvbdIGfyyYXg -EPCkKvbdnBjWwoOV -EOcKjvbdzaAPGgBl -DnbjjvbdkVvmdCXw -DoDLKvbdkDLkQfuH -DoCkKvbdVqnXbFMD -DncKjvbdWWiXuceH -DoCjjvbdBvzdIePv -DncKjvbdLFfICBQu -DncLKvbdeFPRawDK -DncKjvbdjmBkydgP -EObjjvbdVUMtFkuj -EPDLKvbdrSUjmkBN -DoDLKvbdSPsgKFdX -DoDKjvbduDDVXVno -DoCjjvbdMuSqjmAX -EPCkKvbdZyEJmcLr -DnbkKvbdMfcQMouL -DoDLKvbdUMWPAuni -DnbjjvbddZxpYZRC -EPDKjvbdbAvEeopX -DnbkKvbddoErkUUS -DoCjjvbdePErjstS -EOcKjvbdGKeTDHlu -EObjjvbdfIKvSORH -EPCjjvbdUsmTelWK -EObkKvbdaMkBsVMg -DoCkKvbdRjxfVHKs -DnbkKvbdMpYQumgT -DncLKvbdVwIxWEFH -DncKjvbdaMkCTUmH -DoDLKvbdhlFENuDZ -EPCjjvbdZisIPgCG -EPCjjvbdZnnJEdzK -EPDKjvbdGLEsDINV -EObjjvbdYzcFrKVy -EPDKjvbdZirhPgBf -EPDLKvbdKaLGmCXq -EObkKvbddoErkTsr -DoCkKvbdRXNdCkgc -DoDLKvbdEvZQQNKF -DoCkKvbdZoNhdeZj -EPCkKvbdhkddNtby -EPDLKvbdZLrDtNlN -DncKjvbdRbDdlIxk -EPCkKvbdEOcKjwCd -DncKjvbdlqyUyrdJ -DoDLKvbdNddThhkE -EOcKjvbdwyhFewdr -EPDLKvbdiUydwSVC -DnbkKvbdYzcFqjWZ -DnbkKvbdiBoCdwRR -EOcLKvbdpecdsuaI -EPCkKvbdQlxCYnUz -EPDLKvbdVvhxWEEg -EOcLKvbdlZSqryGt -EPCkKvbdUaCQsQqy -DoCkKvbdvAdZSndh -DnbjjvbdmttykKRf -EPCkKvbdYgWdAPTJ -DoCkKvbdlYrqsZGt -DnbkKvbdZsiIxcrn -DoCjjvbddeOqavbj -EObkKvbdbVBfwjsh -EObjjvbdMoxQvOHT -EPCkKvbdRbEFLiYk -DoCkKvbdlhdTqUqa -EOcLKvbdMIbMRYAS -EObkKvbdDncKkWbd -DncLKvbdfSAvzkcP -DnbkKvbdxsOIlqbH -DoCkKvbdADSYKZhp -EPCjjvbdZshiZESn -DoCjjvbdieLGuPAO -EPCjjvbdkHgMFenL -EPDKjvbddBrlrAUN -DncKjvbdddoSCXCj -EPCjjvbdsQWOibvG -EObkKvbdKkBHvAKZ -EObjjvbdkWWmdBww -EObjjvbdnGeXmNgZ -EOcLKvbdyNrgwrhc -DnbkKvbdNddThiLE -DncKjvbdDjHivYKA -EObjjvbdWXIxWDdg -EObjjvbdrMyixlIJ -EOcKjvbdcyyPxYpb -DncKjvbdcyxowxpb -EOcLKvbdhbOcFXQq -EOcKjvbdHDjuibKK -DoDKjvbdiVZeXRuC -EOcKjvbdnBjXYOnV -DnbkKvbdOTTufdtp -DoDKjvbdVAbRTRSZ -DnbjjvbdRXOEDLgc -EOcLKvbdznopdcLx -DncLKvbdRNXayOUz -DncLKvbdSPtHKFdX -EPDKjvbdxUldqYkn -DoCkKvbdZRNEiNEq -EPDKjvbdrbFllGjy -EPCjjvbdUyHszLPO -DncLKvbdxwhibQZk -EOcKjvbdFWYopMie -EOcKjvbdaNKbTVMg -DnbjjvbdliETqUrB -EObjjvbdRXODbkgc -DnbkKvbdTlWPBWPJ -EOcKjvbdOFEThiKd -EObjjvbdMSXMzVQz -EObjjvbdHDkVjCKK -EPDLKvbdqFceTuaI -EOcKjvbdFyUtaDxC -EOcLKvbdmgExMnGy -DncKjvbdtlYWaUBX -DoDKjvbdCDoaWJlf -EPDKjvbdkyTSTYgU -DoCjjvbdqqtjnLAm -DnbjjvbdGYtuAdXb -DoCkKvbdBhjbLIfK -EPDKjvbdNPwqVmfs -DoCjjvbdsrqsYzFD -EPDKjvbdSPsfjFdX -EPCjjvbdZyDjNbkr -EPDKjvbdqZOgfpcx -EPCkKvbdqGDeUVaI -DoDKjvbdUVkpKUAq -DoCjjvbdRpUGjGEX -DoDLKvbdmgFYMmfy -EPDLKvbdRpUHKFcw -DoDLKvbdEvZQPmKF -DoDKjvbdZshhxdTO -DoCjjvbdiZuGMROG -DoDKjvbdfpBzvdYI -EPCjjvbdmgFYNOGy -EOcKjvbdNrtWGdtp -DnbjjvbdWHxVwgYz -EPCkKvbdJbjDRKDY -EPCjjvbduWOYJpsA -DncKjvbdehLVrORH -DoCjjvbdGFjSOItR -DoCkKvbdjuwODbYX -EObjjvbdJTZBSmXl -DnbkKvbdzQoNIiwA -EObjjvbdjJfHilwr -EOcKjvbdJpyeOfOF -DnbjjvbdqFdEsuaI -EPDLKvbdUxhTzKoO -EPDKjvbdBraCsfXS -DoCjjvbdLAjgNBxR -EObkKvbdlhdTqUrB -EPCjjvbdZoOIeFZj -DnbjjvbdrDdhpNua -EPCjjvbdIHHZxxYH -EPCkKvbdiMEdOVCy -DoDKjvbdhgJbxvKV -DoDLKvbdUyHsyjoO -DoDKjvbdGQATXGfZ -DnbjjvbdvAdYroEh -EPCkKvbdhtydvrUb -DoCjjvbdsQWOicWG -DncLKvbdcJMjLGWx -DoCkKvbdIwsaglQp -DoCkKvbdYkrEUOLm -EObkKvbdVvhxWDeH -EPDLKvbdZMRdTnLm -DoCjjvbdADRwizJQ -DoDKjvbdSwjkmzjx -DnbkKvbdBiKbLIfK -EPCjjvbdRyigsDWA -EPDKjvbdRXOECkhD -EObjjvbddxZtTqez -EObjjvbdbBVdfPow -DncLKvbdMfcQNQVL -EPDKjvbdVBBqTQrZ -DncKjvbdZMRctOLm -DncKjvbdGGJrOIsq -EPCjjvbdZMSETmlN -DoDLKvbdhlEdOVDZ -EOcLKvbdOhAXyAZB -DoCkKvbdyOTIYSiD -DoCjjvbdUtNUGMVj -EObkKvbdWXJYWDdg -EOcLKvbdBhjbKhej -EObkKvbdVwIwvDdg -EPDLKvbdzjUpQDsU -EOcKjvbdqAiFAXHd -DoDLKvbdqrUkNjaN -EOcKjvbdYORAYUvU -EOcLKvbdcIljLFwY -DnbkKvbdVwJXvDdg -DoDKjvbdVBCQsRSZ -DoDLKvbdmuUzKiqf -EObkKvbdJYUCILpp -EPDKjvbdsQVoKCvG -EPDLKvbdmoyyVkZC -EPDLKvbdsCGNLfjy -EOcKjvbdbiNKLGWx -DoCjjvbdrpVnjDWG -EObkKvbdfVzxPizs -DnbkKvbdRXODcLgc -EPCjjvbdjJfIJlxS -DoCjjvbdZLqcsnLm -DncKjvbdjuvnECXw -DoDLKvbdEPDKkXCd -DnbjjvbdOSsvGduQ -DoDKjvbdIMBzmvpk -EPCjjvbdqrUkOLAm -EPCjjvbdTkvOaVoJ -EObjjvbdozmdKwoA -DncLKvbdDxXkstTl -EOcKjvbdfMewHMik -DoDLKvbdGKeTCgmV -EObjjvbdxnSgwsIc -EPCkKvbdaaVdepPw -EObkKvbdqGEFUVaI -DncLKvbdjblKpgUg -DoDLKvbdRWnEDLhD -DnbjjvbdFxuVAcxC -DncKjvbdqZOhGpcx -DoCkKvbdfHjvRnQg -DnbkKvbdwMvANDeN -EObkKvbdFfKSOIsq -DoCjjvbdmajXYPNu -EObkKvbdANHyTXZx -EPCjjvbdLFfHbAqV -DoCjjvbdVgwuxHYz -EPCjjvbdQvmcblHc -DoDKjvbdaSFbhUGL -DncLKvbdzHZMANFX -DncKjvbdySnJNRbH -DoCjjvbdMpYRVnHT -EObkKvbddePSBwDK -EPCkKvbdMfcPmQUk -EObjjvbdMgCpNQVL -DoDKjvbdrEFIonWB -DoDLKvbdFjdsCgmV -EObjjvbdwtmFRYlO -DnbjjvbdIwtBgkqQ -EPCjjvbduaDxrndh -EPDLKvbdShzKRABM -DnbjjvbdfHjvRnRH -EOcKjvbdBiLBjiGK -EPCjjvbdCEPaWKNG -DoDKjvbdtbbuWuoP -DoDKjvbdegkWRmqH -DnbjjvbdNeETiJLE -EPCkKvbdjcLkRHUg -DnbjjvbdjvXOEBww -EOcLKvbdTlWPAvOi -DoCjjvbdrMyixkhJ -EObkKvbdqGEEtWAh -DncKjvbdbBVeGQPw -DoDLKvbdpssfqqjt -DnbkKvbdFWZPomJe -DoDKjvbdSBcdkiYk -DoCkKvbdvBEZSoFI -EOcKjvbdRaceLhxk -EOcKjvbdJKEAKQHE -DoDLKvbddZyQYYpb -EObjjvbdeXzTsqez -DncLKvbdCSaCtGXS -EPCkKvbdlZSrSyHU -EOcLKvbdTJZiqABM -DncLKvbdvAdYsOdh -DnbkKvbdcyxoxZQb -DnbkKvbdhanbdwRR -EPCjjvbdbBVeFopX -DncKjvbdGLFTDHmV -DoCjjvbdiZuGLpmf -EOcLKvbdJbjCqJbx -EObkKvbdGdLWJbKK -DoCjjvbdRkZGVHKs -DoCjjvbdGckWJajK -DncKjvbdAMgxrvyx -EPCjjvbdEPDKjvbd -EOcLKvbdkDLjqGtg -DoDLKvbdNPxRVnGs -DoDKjvbdySmhmRag -EPCjjvbdVqnXadkc -EPDKjvbdTulPitAq -EObjjvbdGLErcHlu -DoDLKvbdHELWKCJj -EObjjvbdbVCHYLUI -DncKjvbdqvpLbiZR -EPCjjvbdvAdZSoFI -EOcLKvbdfjfzcGAE -DnbjjvbdaNKartmH -EOcLKvbdcTDKsdJa -DncLKvbdOSsufduQ -DnbkKvbdyYIiapZk -DoCjjvbdunszqKoU -DoCkKvbddndsLTsr -DoDKjvbdxxJKBoyk -DoDLKvbdrovOibvG -EPCkKvbdiLddOVDZ -EPCkKvbdiBncFWqR -EOcLKvbdZQldiNFR -DoCkKvbdOEctJJKd -DoCkKvbdrMzKZMIJ -DnbkKvbdVhYVwgYz -EOcLKvbdQvnDblHc -DoDLKvbdmJEURVRa -DoDLKvbdCTBDUFwS -EPCkKvbdNrsvHEuQ -DnbkKvbdegkVqnRH -DoCjjvbddBrlrATm -DoCkKvbdCJLCLJFj -EOcKjvbdxZgefXeS -EPDKjvbdZtJJZDsO -DoCkKvbdQvmdDMID -DoDLKvbdRaceLhxk -DnbkKvbdSBdFLhxk -DoDKjvbdOTTufdtp -DoDLKvbdnQZxujyC -DnbjjvbdZshhyETO -DoCjjvbdtvOYJqTA -DncLKvbdRMxBxmtz -DnbjjvbdEzsqElCi -EObjjvbdKefHbAqV -DnbkKvbdmpZyWKyC -DncLKvbdNQXqWOGs -EPDLKvbdVTlsekuj -EPCkKvbdGcjvJajK -EPDLKvbdIryArlxM -DoDLKvbdwyhGFwdr -EPCkKvbdzaAOgGal -DncLKvbdiHKCxvJu -EOcKjvbdLBKgMbXq -DoCjjvbdTppoVVIN -EPDKjvbdNPxQvOHT -DnbjjvbdTvLpJsaR -DncKjvbdnVUyjiqf -EPCjjvbdVUNTfLvK -EOcLKvbdDxYLtTtM -DnbkKvbddePSCXCj -EPDLKvbdgGLzOHHA -DoCkKvbdTukpKTaR -DncLKvbdVUMtGMWK -EObkKvbdXnRAYVWU -DncLKvbdyqOmJJwA -DoDKjvbdFVyQQNKF -DncKjvbdvOszqLOt -EPCkKvbdZRMdhmFR -EPDLKvbdhlFDmuCy -EOcKjvbdkIHLeenL -DnbjjvbdqceJQOWB -DoCkKvbdzitpPdSt -EPCjjvbdFeiqmhtR -DoDLKvbdsQVoJcVf -EPDLKvbdUQpnuVIN -DoDLKvbdWSNxBdlD -EPCjjvbdpyPHgQcx -EOcKjvbdUyHsyjoO -DoCjjvbdxrnJNSCH -DoCjjvbdKDKCpjCx -EPDLKvbdxsOIlrBg -DoCkKvbdnGdxMnHZ -EPDLKvbdfHkWSNpg -DnbjjvbdkHgMGFnL -EOcLKvbdxmsIYSiD -DoDLKvbdEXxLsssl -DoDKjvbdjFLGuPAO -EOcLKvbdeEoRawCj -DoDKjvbdyOTIYSiD -DnbjjvbdIHGyyXxH -DncKjvbdTqQoUuHm -EOcKjvbdMfcQNPuL -DnbkKvbdatbGxKsh -DoDKjvbdOTUWHEtp -EPCkKvbdGLFTCgmV -DoDKjvbdkHfkfGNk -EObjjvbdJXtBhMRQ -EObkKvbdRpUHKGEX -DnbjjvbdiUzFWrVC -EPCkKvbdliETqUrB -DnbkKvbdZjTIQHBf -DoCjjvbdZMSETnLm -EPDLKvbdFWYoomKF -EPDLKvbdRaceLhxk -DoDLKvbdEASJNZwX -EPDLKvbdGZUtaEXb -DncLKvbdyNrgxSiD -EOcKjvbdbVBgXkTh -EPCkKvbdvOszpkOt -EObkKvbdKfGHbBRV -DncLKvbdjvXOEBxX -EPDLKvbdvAcyTPFI -EObjjvbdNsUWGeUp -EPCjjvbdZtIiZDrn -DoDLKvbdrRtkOLBN -DncKjvbdptUHSSLU -DncLKvbdWSOXaeLc -EPCkKvbdiLeDmuCy -DoCjjvbdhyuFkqNf -DnbkKvbdzoPqFDMY -DoCkKvbdGFirOItR -DoCjjvbdEObjkXCd -DnbkKvbdjKFgilwr -EPDLKvbdVwIwvEFH -DoDKjvbdfIKvRmpg -EPDLKvbdOFDsiIkE -EPDLKvbdGKdrcIMu -EPDKjvbdZnmiEeZj -DoDKjvbdKWVFceHJ -DncKjvbdvBDySneI -DncKjvbddeOqawCj -DoCkKvbdEztRFLbi -EPDKjvbdMpXpumgT -EPDKjvbdtunYJqTA -EPCjjvbdegkVqmpg -EObjjvbdlYsRsZHU -EOcKjvbdbUagXkUI -EPDLKvbdANHySvyx -DnbkKvbdmJEUQtqa -EPDKjvbdVUNUFlVj -EPCkKvbdvvlBVaVu -DoCjjvbdmozZWLYb -DoDKjvbdwzIFfXeS -DoDLKvbdNQXpvOGs -DncLKvbdEYXlTstM -EPCkKvbdbUbGwkUI -EOcLKvbdLBLHNBxR -DnbkKvbdePErkUUS -EObjjvbdyXiJaoyk -DncLKvbdVrNxBeLc -DoCjjvbdaRebhUGL -EOcKjvbdxsNhmSBg -EOcKjvbdXrkaMsoY -EObjjvbdhuZdwSVC -DoCkKvbdqGEFUWAh -DoDKjvbdegkVrNpg -DoCkKvbdtcCtvuoP -EOcKjvbdmJEUQtrB -EOcKjvbdWXIwucdg -DoDLKvbdhgKCyWJu -EPCjjvbdcSbkUDjB -EPDKjvbdLrWmZuQz -EPDLKvbdXrlAlsnx -DnbkKvbdKNADygUa -EPDKjvbdyNrhXsJD -EOcLKvbdIsZBSlxM -EPCkKvbddndrkTsr -DnbjjvbdFyUuBEYC -EPCkKvbdJcKCpjCx -EObkKvbdbBWFGQPw -EOcLKvbdFjdrbhNV -EPDLKvbdrDdiQNvB -EObkKvbdkHgMGGOL -EPCkKvbdkySrSyHU -DncLKvbdaaWEfQQX -EObkKvbdehKvRmpg -DnbkKvbdmIdURVRa -DoDLKvbdvBEZSneI -DoCkKvbdNdcshhjd -DncLKvbdZyEKOCkr -DoCkKvbdVrNwbFMD -DnbkKvbdnCKXXoNu -EPDKjvbdSQTgKGDw -EObkKvbdaRfCgtFk -EObjjvbdkWXNcaww -EObkKvbdDihJuxKA -DncLKvbdnVVZkKSG -EPCkKvbdVBBqSpqy -DncLKvbdqGEFUWAh -DoCkKvbdsPvOjDWG -DncKjvbdySmiNRbH -DoDKjvbdraemLfjy -DoDLKvbdnPzZWKxb -DnbjjvbdRjxfVGkT -DoDKjvbdGLEsDHlu -DnbjjvbdRotHKFdX -DoCkKvbdRpUGiecw -DnbjjvbdZjTHogBf -EPDKjvbdcTCjtDia -EOcKjvbdrounibuf -EOcKjvbdVBCRSqRy -EPDKjvbdEvZPolie -DnbkKvbdzRPNJKXA -DncLKvbdBhjbKiGK -DnbkKvbdqrVKmkBN -DnbjjvbdBraDTewS -DnbkKvbdJcKDRJbx -DoCjjvbdbUbHYLUI -DoDKjvbdUyITykOn -DoCkKvbdYlSEUOMN -EPCkKvbdRpUHKGEX -EObkKvbdTAFJICPE -EPDKjvbdrpWPJcVf -DoCkKvbdZnnJFFZj -EPCkKvbdkVvmcaxX -EOcKjvbdyzdnRgiI -EObjjvbdqAiFAXIE -DncLKvbdWWiYWDeH -EPCjjvbdqlzKZLgi -EObjjvbdauCGwkUI -DoDLKvbdtTSSxydc -EObkKvbdbVCGxLTh -EObkKvbdkWWmdBxX -EObjjvbdRNXaxnUz -EOcKjvbdwXLaVaVu -DncKjvbdqTtGqrKt -DncKjvbdIjEAJpGd -EPDKjvbdHffyyXwg -EObkKvbdSCEFLiYk -DncKjvbdiVZeXRuC -DoDLKvbdWWhwudFH -EPDLKvbdrRuKmkAm -EObjjvbdxsNhlqag -EPDKjvbdcJMikFwY -DoDKjvbdpyPHfpdY -DncKjvbdwyhGGXdr -DoCkKvbdkVwODbXw -DncLKvbdJcJbpibx -EPCkKvbdsQWPJcVf -EOcKjvbdZRNEiMdq -EObkKvbdjvXOECXw -EObjjvbdZxcjODLr -DncKjvbdRWmdDMID -DncKjvbdjvWmcbYX -DoCjjvbdnBjXXoOV -DncKjvbdiBnbdwQq -EPDKjvbdDoDKjwCd -EPCkKvbdFxuVBEYC -DncKjvbdFVxopMie -EOcLKvbdKWUfEEfi -EPCkKvbdNrtVgEtp -DoDLKvbdfoazwDxI -DoDKjvbdqquKmkAm -EPDKjvbdhbPCeXRR -DncKjvbdZtIhyETO -EPCkKvbdQwNdCkhD -EPDKjvbdhzUfMROG -DnbjjvbdrpVoKCuf -EPDLKvbdtlYWaUAw -EOcLKvbddoErjstS -DnbkKvbdyzeORghh -EPDLKvbdZnmhdeZj -DoCjjvbdcIlikGXY -EOcLKvbdLAkHNBxR -DoCjjvbdtkwwBUAw -DoCjjvbdgGMZnHHA -DnbkKvbdUsmTfLuj -EOcLKvbdqZPHgQcx -EPDLKvbdLqvlytpz -DoDLKvbdqdFIomvB -EObjjvbdBhjbKhfK -EOcLKvbdrMyjYlIJ -DncKjvbdDncKkXCd -DnbkKvbdNQXpunHT -EPDKjvbdZjSgofbG -DnbjjvbdBiKbLIej -DoCjjvbdGAoQxizm -EOcLKvbdwtldqZLn -DoDLKvbdIrxaSmXl -DoCjjvbdNHDQMpUk -EOcLKvbdTkunaWOi -DncLKvbdNHCpMpVL -DoDKjvbdelfXHNKL -EObjjvbdcyxpYYqC -DoDLKvbdZGwEAOri -DoDLKvbdIxUCHkqQ -DoCjjvbdoznEKxPA -EOcKjvbdbLMGPNcA -EObjjvbdiiegilxS -DoDKjvbdZRNFImFR -DncLKvbdRbDeLhxk -EPCkKvbdqlzJxlHi -EOcLKvbdhkeDnUby -EPCjjvbdhaoDEwQq -EPCkKvbdFkFScHlu -EPCjjvbdJKEAKQGd -DoCkKvbdpxngfqDx -EObjjvbdUGznLwWF -EObjjvbdVZHsykPO -DncLKvbdYlRdUNlN -EPCkKvbdHDkWKBjK -DncLKvbdjKFhKMxS -DnbjjvbdnBjWxPOV -EObkKvbdtcCtvvOo -DnbjjvbdTpqPUthN -DncLKvbdMoxQvOGs -DnbjjvbdfNGXHMjL -EPDKjvbdhgJcZVjV -DoDLKvbdNGbolpVL -EPDKjvbdatbHYLUI -DncLKvbdczZPwxqC -DnbjjvbdZxcimblS -EPDLKvbdKaKgMbXq -EOcLKvbdtbcUwWOo -DnbkKvbdJutfEEfi -DoCjjvbdmIdURUqa -EPCjjvbddBrmSATm -EPCkKvbdXsLaNUPY -DnbkKvbdNPwpvOGs -EOcKjvbdIwsaglQp -DoCkKvbdlhdUQtrB -DoDLKvbdGdLWJaij -DoCjjvbdwXMAvAvV -DnbkKvbdbrbkTdJa -EPDKjvbdFVxpQNJe -DoCjjvbdHDkWJbKK -DnbkKvbdjvXODbYX -DoCjjvbdemFwGmJk -DoCjjvbdQdCaPpcr -EOcKjvbdqcdiQNvB -DncLKvbdbBWFFoow -EOcKjvbdKaKgMawq -EObkKvbdLBKgMawq -DncKjvbdcbSmSAUN -DoCjjvbdyOTHwsJD -EOcLKvbdOStVfeUp -EObkKvbdHffyyYXg -EPCjjvbdmuUykJrG -DoDLKvbdJYTbILpp -DncKjvbdnGdwlmgZ -EPDKjvbdZQldhldq -EObjjvbdUaBpsRSZ -EOcKjvbdrzLpSaIO -DnbjjvbdLGFgbAqV -EPDKjvbdXrlAmUOx -EPDLKvbdtSqryZeD -DoDKjvbdtlXwAtAw -DoDKjvbdaRebgsfL -EObjjvbdUWLpKUAq -EObjjvbdQvmccLgc -EOcLKvbdznopeDMY -EOcLKvbdIwsbHkpp -EPDLKvbdziuQPcsU -EPDLKvbdelevgMik -DoDKjvbdTAFIgbOd -DoDLKvbdbBWFGPow -DoDKjvbdYqNEiMeR -EOcLKvbdhficYuiu -EOcKjvbdyTOImRbH -DncKjvbdiLeDmtby -EPDLKvbdUsmTekvK -DoCkKvbdkCkkQftg -DoCkKvbdVTmUFlVj -DoCkKvbdTIyjRAAl -EOcKjvbdbUafxKtI -EOcKjvbdZsiIxdSn -DoDKjvbdSCEElIyL -DnbjjvbdBsAbsfXS -DoCkKvbdBcpAuimG -DoCkKvbdVwIwvEEg -DnbjjvbdajlFoNcA -EPCkKvbdtSrTYzFD -DnbkKvbdGFirNhsq -EOcKjvbdapHHELzd -DoDLKvbdiUyeXSUb -DnbjjvbdtAGqIABS -DnbkKvbdXsLaMsnx -DoCkKvbdeEnqawDK -EOcKjvbdDxXkstUM -DnbjjvbdcyxoxZQb -DoDLKvbdlrZVZrci -DoCkKvbdTAEiICPE -EOcLKvbdpyPHfpcx -EPDLKvbdVBCRTQqy -DnbjjvbdmJEUQtqa -DnbjjvbdkClKqHVH -EObkKvbdCJKajiGK -EObkKvbdeAURMxJf -EPDLKvbdcSbkUDjB -DncLKvbdsCFmLfjy -EPCkKvbdIwsahLqQ -DoCkKvbdrJAJeMne -DoDLKvbdIHGzYwxH -DoCjjvbdGckVjBjK -EObjjvbdegkVqmqH -DoDLKvbdLKaIWAKZ -EPDLKvbdaRfChUGL -DoDLKvbdyYJJaozL -DoCkKvbdrWpLbhyR -DoCkKvbdLGGIBaRV -DoDKjvbdKyRJrztf -DoCkKvbdjuvnEBxX -EObkKvbdNeEThhkE -EPCjjvbdQwNcbkhD -DoCkKvbdJqZePGOF -EObjjvbdNGbomQUk -EObkKvbdkxrqsZHU -EOcLKvbdrounjDVf -DoDLKvbdkClLRGtg -EOcLKvbdbKkfOnDA -EPCkKvbdRDbaPpcr -EPDLKvbdkHgLefNk -EOcLKvbdFVxpPmKF -EObkKvbdsrrSxzEc -DnbkKvbdFeirOIsq -DncLKvbdzitopDrt -DoCjjvbduWOXjQsA -EPCkKvbdyXhjCPyk -DoDKjvbdaaWEfPow -DncLKvbdvAcySneI -EObjjvbdADRwjZhp -EObkKvbdnPyxvLYb -DncKjvbdijGIJlwr -EPCjjvbdJcJbqJcY -DnbkKvbdkMbLydgP -DoCkKvbdRDbaQQcr -DoCjjvbdxsOIlrCH -DnbjjvbdKQydnfOF -EPDKjvbdcImKKfWx -DnbjjvbdcImKKewY -EObkKvbdqdFJPmua -EObjjvbdajkennDA -DnbjjvbdZyEKNcLr -DoCjjvbdKWVFdEgJ -EPDKjvbdWXIwuceH -DnbjjvbdqiAJdlne -EOcLKvbdkyTRryGt -EPCjjvbdpaJFAWgd -EPCjjvbdmJDsqVSB -EPCjjvbdREDAopdS -DoCjjvbdRpUHKFdX -DncKjvbdptUHSSKt -EPCjjvbdiCObdvpq -DncLKvbdNwnuzcmt -DncKjvbdqdFIpOWB -DoDKjvbdjggLefNk -EObkKvbdrNZiyLgi -EPCkKvbdaSFcITfL -DnbjjvbdGLFTDINV -EPCkKvbdiLeENuDZ -DncLKvbdZyEJmcLr -EObjjvbduDCuWvOo -DoDKjvbdNQXqWNgT -DncKjvbdVBCRTRRy -EPCjjvbdSQUGifEX -EOcLKvbdANIZSvyx -DoDKjvbdvBDyTPFI -DnbkKvbdEPCkLWbd -DoCkKvbdyYIjCPyk -DnbkKvbdelewGmKL -EPDLKvbdatbGxLUI -EPDLKvbdTvLojTaR -DoCjjvbdhtyeWrVC -DoDKjvbdzeZnzdzQ -DnbjjvbdyzdnRhJI -EPCjjvbduLxWaUBX -EOcLKvbdkyTRsYgU -DnbjjvbdCTBCsewS -EObjjvbdjAPgApHK -EPDLKvbdwkWdHzyf -EObjjvbdsPvOicWG -DoCkKvbdTulPisaR -DnbkKvbduCcUvuoP -EObkKvbdZRMdiMeR -DoCkKvbdSPtHJfDw -DncLKvbdKaLGlaxR -DnbkKvbdRpTgKGDw -DoCjjvbdWXJYWEEg -EObjjvbdWXJYWDdg -EOcKjvbdKCjCqKCx -DnbkKvbdakMGPNcA -DoDKjvbdwkXDgzzG -EObkKvbdNHDPlotk -DncLKvbdyzdmrIJI -EObkKvbdFkErbhMu -EPCkKvbdNeDsiIjd -DoDKjvbdIGfyyXxH -DoCjjvbdZyDinDLr -EPCjjvbdemFvfmJk -EObjjvbdJYTbILqQ -DnbjjvbdWXIwucdg -DoCjjvbdiHKCxvJu -EPDKjvbdfpBzwDxI -DoCjjvbdaNLCStlg -EPCkKvbdnVUykJqf -DoCjjvbdyYIjBozL -EPCjjvbdzjUpQDsU -DoDLKvbdZxcjOCkr -EPCkKvbdeFOrBvcK -EPDKjvbdKaKflaxR -EOcLKvbdfMevgMjL -EPDKjvbdGckWKCKK -DoCjjvbdKVuFdEgJ -EObjjvbdfMfWfmJk -DoDLKvbdMfbomQVL -EPDLKvbdRkYeuGjs -EOcLKvbdKfGHaaQu -EObkKvbdoznDjwoA -EOcKjvbdUMWPBVoJ -DoCkKvbdFjeSbgmV -EPCjjvbdrEFJQOWB -EOcLKvbdvAcyTOdh -DnbjjvbdWfYzUAOs -EObkKvbdTkuoBWPJ -DnbkKvbdFpASvgFy -DoCjjvbdczZQXyRC -DoCjjvbdRDcBQQdS -DoDKjvbdqYngfqDx -EObkKvbdWRmwbElD -EPCjjvbdFyVVBDwb -EObjjvbdBhjbKhej -DncLKvbdzaAPGgBl -EObkKvbdTppoVUgm -DoCjjvbdbrcLTcjB -EPCkKvbdGLFTCglu -DoDLKvbdDwxMUUUM -EPCjjvbdNQYQumgT -DncKjvbdmfeXmOGy -EPCjjvbdwtmFRYkn -DoCkKvbdsBfMlGjy -DncLKvbdRpUHKGDw -EObjjvbdjblLQfuH -EObjjvbdJYTbHlRQ -DoCkKvbdmttyjiqf -DoCkKvbdZQldiMdq -EPDKjvbdFejSNiUR -EOcLKvbdjgfkfFnL -DnbjjvbdMpYQvNgT -DnbkKvbdUyIUZjnn -DnbkKvbdJbjDRKDY -EPCjjvbdeEnrBvcK -EOcKjvbdyzdnSIIh -DoDKjvbdDoDKjwCd -DoDLKvbdCSaDUFwS -DoDLKvbdIrxaTMwl -DnbkKvbdRNXayNtz -DoCkKvbdxxJKBoyk -DncLKvbdnGdxNOGy -DnbjjvbdySmhlqbH -DoCkKvbdxwhjBoyk -EPCjjvbdZQleIleR -EPCjjvbdaRfChTek -EOcKjvbdYTMBNUPY -DoCjjvbdegkWSNpg -EObkKvbdziuQPdTU -EOcKjvbdnCKXYOmu -DoCkKvbdZnmhddzK -EObjjvbdzaAPGgBl -DoDLKvbdePFSjtTr -EPCkKvbdNrtWGeVQ -EPCjjvbdelfWfmKL -DoDKjvbdKxpjSztf -EPDKjvbdxmsIXsIc -EPCjjvbddZyPxYqC -DoDKjvbdvOszqLOt -DncKjvbdatbGxLTh -EObjjvbdzoQQdbkx -DoCjjvbdZRMeImEq -EOcKjvbdqTtGqqjt -EOcKjvbdqAheAWgd -DnbjjvbdySmhmRag -DncKjvbdjKFhJlwr -EPDKjvbdqFceUWBI -DoDKjvbdsBemLgLZ -EPDLKvbdKQzEoFnF -EOcKjvbdFjdsCgmV -EObjjvbdpfEEtWBI -EPDKjvbdZxcjOClS -EPDKjvbdnBivwoOV -EPCjjvbdrylQTAhO -EPDKjvbdKaLGmBxR -EPDKjvbdHgGzYwxH -EObjjvbdkHflGFmk -DnbjjvbdqGDeUVaI -EPDKjvbdMgDQNQUk -DncLKvbdSKyGVHKs -EOcKjvbdqFdEsvAh -EOcKjvbdYkrETnLm -DnbkKvbdqBIeAXHd -DncLKvbdZQldhmFR -DncLKvbdFjeSbhMu -EPCkKvbddePRavcK -EPCkKvbdssRsYzEc -EPCkKvbdRadFLhxk -DnbkKvbdVvhxWEEg -EOcLKvbdIryArmYM -EPCkKvbdKfGHbAqV -DncKjvbdEKIJuxKA -EPDKjvbdIwsbIMRQ -EObkKvbdzaAOfgBl -DncLKvbdeUAUASlv -DnbjjvbdlqxuZsDi -DnbjjvbdUWMQKTaR -EOcLKvbdNGbpNPtk -EPDKjvbdWSOYCEkc -DoCkKvbdjggMGGOL -DoCjjvbdSQUHJecw -DncLKvbdZyDjODMS -EObjjvbdfpBzvcxI -EOcLKvbdTlVoAvPJ -DnbjjvbdVviYWEFH -EPCkKvbdZnmiFFZj -EObjjvbdNGbpNQUk -DoDLKvbdrbGMkfjy -DoDLKvbdxnShYSiD -EObkKvbdJYTahMRQ -DoDLKvbdoAKzshEO -DoCkKvbdZxcjOCkr -EPDLKvbdRWmdCkgc -EPCkKvbdGFiqnJUR -DoDKjvbdRzJgsDWA -DncLKvbdptTfqqjt -EPDKjvbdmIctRUqa -EObkKvbdnBiwXoOV -DnbjjvbdfMevfljL -EObkKvbdBraDUGWr -DncKjvbdUxhTzKnn -DoCjjvbdmfdxMmfy -DnbjjvbdhuZeWrVC -DnbkKvbdLiCLpxAS -DnbjjvbdKfFgbApu -DnbjjvbdziuPpETU -DoCjjvbdwuNEqZLn -EPCkKvbdEXwksssl -EPCjjvbdhgKCxujV -DoDKjvbdhlEdOVDZ -DncKjvbdLAjgMbXq -DncKjvbdOFEThhkE -DoCkKvbdANHxrvzY -EPCjjvbdZtIiZDrn -DoCjjvbdYpldhmEq -DncLKvbdqwPlDIyR -DncLKvbdUtNUFlWK -EObkKvbdkWXODbYX -DnbjjvbdRzJhSbvA -DoCkKvbdEJgjVxKA -DncKjvbdxnSgxShc -EObjjvbdbUbHYKsh -DncLKvbdZoNiFEzK -EPDKjvbdbiMjKevx -DnbkKvbdIwsbHlRQ -EObjjvbdhWyAzzAJ -EObkKvbdqvpLcIyR -EObjjvbdGGKSOIsq -EObkKvbdTpqPUthN -DncKjvbduaEZTOdh -EObkKvbdJJdAJofd -DoCkKvbdEKIJuwjA -DncLKvbdDnbjkXDE -DnbjjvbdhbObdwQq -EObjjvbdunszpkPU -EPCjjvbdwNWANDdm -EPDLKvbdozmcjxPA -EObjjvbdZnmiFFZj -DnbjjvbduDDUwVno -EOcKjvbdZjShPfbG -DncLKvbdADSXiyhp -DoCjjvbduCcVXWPP -DnbkKvbdffLzOHHA -DncLKvbdBdPaWJlf -EPDLKvbdJvVGEFGi -EPCkKvbdvwMBWBWV -EObjjvbdijGHjMxS -EPCkKvbdaNLCTVNH -EPCjjvbdbAudeopX -DoDKjvbdozmcjwoA -EPCjjvbdYlRctOMN -DoCjjvbdDoDLKvcE -EObkKvbdVqmwaeMD -DnbjjvbdqvolChyR -EPCkKvbdRkZGVGjs -DoDKjvbdjvXOEBxX -DoCjjvbdIHHZyXwg -DnbkKvbdLBKgNCYR -EPDKjvbdyNsHxShc -EOcKjvbdyzdmqhJI -DnbjjvbdqFcdtVaI -EObjjvbdrJAKElne -DncKjvbdTvLpJtAq -EObkKvbdDoDKjvbd -EPCjjvbdYlRcsnLm -DoDKjvbdegkVqmqH -EPDLKvbdZHXEAPSi -DoDKjvbdakLennDA -DncLKvbdrDdiPmua -DoCjjvbdhbPDEwRR -EPDLKvbdtcDUvuno -DnbjjvbdEKHjVxKA -EOcLKvbdYqMdhmFR -EPDLKvbdmttzKiqf -EPDLKvbdTkvPAuoJ -DncLKvbdVAbRTQqy -DncLKvbdLBKflbYR -DoCjjvbdZyDimcMS -EOcKjvbdFpATXHFy -EObkKvbdnCJwYOmu -EPCkKvbdVZHszLPO -EPCkKvbdCSaDTfXS -DncKjvbdNVSqjmAX -EPCkKvbdFjdrbhMu -EPCkKvbdbsCkUDjB -EObjjvbdMowpumfs -DoDLKvbdRotHJecw -DnbjjvbdTfzmkwWF -EObjjvbdBcpAvKNG -DoDLKvbdWHxWXfxz -EPCjjvbdqUUGrSKt -DncLKvbdliDsqVSB -DnbkKvbdBdQAujMf -DnbkKvbdWXIxVcdg -DoCkKvbddePSCXCj -DnbjjvbdZirhPfbG -DnbjjvbdyXiKBozL -DnbjjvbdznpREcMY -DncKjvbdJcKCqKCx -EPCkKvbdJbibpjDY -EPDLKvbdkClLRHVH -EPDKjvbdTvLoisaR -EOcKjvbdZGwEAPSi -EPCkKvbdKRZdnenF -DncKjvbdfMfXGmJk -EPCkKvbdhfibyWJu -EOcKjvbdMIbLqYAS -EPDLKvbdbUbHXjtI -EObkKvbdCSaDUFwS -EPDLKvbdGGJqnJUR -EOcLKvbdDoDKjvbd -DnbjjvbdFkFTDIMu -DnbjjvbdgFlZnGgA -DoCkKvbdakLfPODA -EPDLKvbdDwwlTstM -DoCjjvbdMJBkqYAS -DnbjjvbdiGjCxujV -EPDLKvbdVwIwuceH -EPDLKvbdZyEKOCkr -EPDKjvbddoFTLTtS -DoCkKvbdXrlAlsnx -EOcLKvbdZoOIeEzK -DnbjjvbdaMjbTVMg -EPDKjvbdeOeTKssr -DncKjvbdSKxetfjs -DoCjjvbdpxnhGpcx -EPDLKvbdmtuZkJrG -DoCjjvbdYkqdTmlN -EOcLKvbdJuuGEEfi -DoCjjvbdhzUfMROG -DncLKvbdddnrBvbj -EOcLKvbdWSNwbFMD -DoDLKvbdtSrTYydc -EPCjjvbdRjxetgKs -DncKjvbdFxttaEYC -EPDLKvbdiBncFWpq -DnbjjvbdyTOImSCH -DoDKjvbdcyyQXyRC -EOcLKvbdZLrEUOLm -DoCjjvbdXmqAYVWU -EPCjjvbdUsltFkvK -DncKjvbdLqvmZuQz -DnbjjvbdZjTIQGaf -DoDKjvbdzoPpeCkx -EPDKjvbdGGKSNhsq -DncKjvbdtSrSxzFD -EPCkKvbdyOTHxShc -DnbkKvbdehKvSORH -DoDLKvbdWIXvYHYz -EObkKvbdDoCkLXCd -DoDLKvbdLBKflaxR -EPDLKvbdKQzFOenF -EObjjvbdjFLHVPAO -EObkKvbdFeiqmhsq -DoDKjvbdRotHKFdX -DnbkKvbddZxpYZQb -DncKjvbdqqtkNkBN -EPDKjvbdZjShPgBf -DoCkKvbdNHCpMouL -EObjjvbdxZgefYFS -DoCjjvbdNrsvHEuQ -DoCjjvbdwzHeewdr -EObjjvbdvPTzpkPU -EPDKjvbdrounibvG -DnbkKvbdpstGqqjt -EPDLKvbdeFOrCXDK -EOcLKvbdGBPRYizm -DoDLKvbdNwnuzdOU -DnbkKvbdRMwaxnUz -EOcLKvbdDihKWXjA -EObkKvbdFeirOJTq -DoDLKvbdSKxeuGjs -EOcLKvbddndsKssr -DnbjjvbdiCPDEvpq -EOcKjvbdMoxQumfs -DnbkKvbdfNGWfljL -DnbkKvbdIHGzZXwg -EObjjvbdTlWPAvOi -DoDLKvbdnPyyVkZC -EOcKjvbdkWWmdBxX -EObkKvbdEJgjWXjA -DnbjjvbdkMalZdgP -DnbkKvbdsCGNLfjy -DnbjjvbdYqMeIleR -DncLKvbdMgComPtk -DoCkKvbdMfbolouL -DncKjvbderAvzlDP -DnbjjvbdqwQLcIyR -EObjjvbdcImJkFwY -EPCjjvbdYzberKVy -DoCjjvbdEzsqElCi -EObkKvbdRotGiecw -EPCkKvbdGLErcINV -DoCkKvbdYpmEiMdq -DoDKjvbdJXsaglRQ -DnbkKvbdFVxpPmJe -DnbkKvbdxUmEpyLn -EPCjjvbdLrXMytpz -DnbkKvbdhtzEvqtb -EPDKjvbdDxYLstTl -EPCkKvbdiBoDFXQq -EPCkKvbdZoOJEeZj -DoCjjvbduDCuWuoP -EObkKvbdjcLkQfuH -DoCkKvbdcImKLGWx -EPDLKvbdEYXlUUTl -EOcLKvbdZLqdTnMN -EOcKjvbdmozYujyC -DncLKvbdJpzEnfOF -EOcLKvbdiCPCdvpq -DncKjvbdADRxKZhp -DoDLKvbdmJDsqVSB -EObkKvbdnBiwYPOV -EObkKvbdqwQMDIxq -DncKjvbdeFOqbWbj -EPDKjvbdmfeYMmfy -DnbkKvbdGLFSbhNV -DoDLKvbdwkXDgzzG -EObkKvbdbAvFFpQX -EPDLKvbdyXhjBoyk -DoCjjvbdMfbpMouL -DoCjjvbdREDApRES -DncLKvbdmajWwnmu -DoDLKvbdIidAJofd -DoCjjvbdSZihTCvA -DoCkKvbduLwvaUBX -EPCkKvbdiHJbyVjV -EObkKvbdGYtuAdXb -DoDLKvbdCTBCtFwS -EOcLKvbdhlFENtby -DoCkKvbdySnIlrBg -EPDLKvbdwuNFQyMO -DncKjvbdlqxtzTDi -DoDKjvbdWWhxWEFH -DoCkKvbdiHJcZVjV -EPDKjvbdCflGHAzc -DncLKvbdzROmJKXA -EPDLKvbdCJLBjhej -EOcKjvbdVrNwbEkc -DnbkKvbdUtNUFlWK -DoDKjvbdLBKflbYR -EPCjjvbdauBfwkTh -EPCkKvbdrXQMDJZR -DnbjjvbdnVUyjjSG -DncKjvbdiMEdOUby -DoDKjvbdqiAKFNPF -EOcLKvbdQdDBQQcr -DoDKjvbdpxnggQdY -DncKjvbdtSrTYydc -DnbjjvbdwzHefXeS -DoCjjvbdRosfjGEX -EPCkKvbdnPyxujyC -EObjjvbdZyEJnCkr -DnbkKvbdhytelRNf -EPDLKvbdeYZstSFz -EObjjvbdTfzmlXVe -EOcKjvbdbKkenmcA -DncLKvbdvwMAuaVu -EObkKvbdwMvAMdEm -EOcLKvbdkHflFfNk -EPCjjvbdzoPpeDMY -DoCjjvbdiLeDmuCy -EOcKjvbdRpUGjGDw -DnbkKvbdUslsekuj -EPCjjvbdmJEURVRa -DncLKvbdZjSgofaf -EOcLKvbdaMjasUlg -DoCjjvbdREDBPpdS -DnbjjvbdIwsaglQp -DoCkKvbdkNCLzFHP -DoDLKvbdaRfChUFk -EPCjjvbdrRtjnKaN -EPCkKvbduoTzpkOt -EOcKjvbdnHFYMmfy -EOcKjvbdHDkVjBjK -EObjjvbdEXxMTssl -DnbjjvbdNPxRWOHT -EObjjvbdiZtfLpmf -EObjjvbdTvLojTaR -DoDKjvbdKkBIWAKZ -DoDLKvbduCbtwVno -DncLKvbdmttzKjSG -DncLKvbdbBVdfQQX -EObkKvbdyXiKBpZk -DncLKvbdzGxlAMdw -DoCkKvbdMpXpvNfs -DoCkKvbdKQydoGOF -EPDLKvbdTfzmlXVe -EPDKjvbdQccBPqES -EPCjjvbdZtJIyESn -DoCjjvbdVrOXbElD -DnbjjvbdbLMGOmcA -DnbkKvbdnPzZWKyC -EPDLKvbdmajWwoOV -EObjjvbdQwOEDMHc -EPCkKvbdTvMQKUBR -DoCjjvbdOTUVgEtp -DoCkKvbdIHHZyXxH -EPDLKvbdDoDLKwDE -EObjjvbdiZtfMQmf -EObjjvbdijGHimXr -DoDKjvbdVrNxCElD -EPDLKvbdJutedFGi -DnbjjvbdmSZVZsEJ -DncKjvbdqlzKYlIJ -EOcKjvbdfelZnGgA -EOcKjvbdYlRctOLm -DoDKjvbdPxmAHSrK -EPCjjvbdWWiYWEEg -DoCjjvbdbAvFFoow -EOcKjvbdFjeSbglu -EPDLKvbdlqyVZsEJ -EOcKjvbdddoRbXDK -EPCkKvbdaRecHtFk -DncLKvbdSKyGUgKs -DoDLKvbdcyyPwyQb -DoDLKvbdnVUzKjRf -EObjjvbdYkqdUOLm -EObkKvbdRbEEkhyL -DncKjvbdtAHQhAAr -DnbkKvbdVqmwbFMD -EOcLKvbdznoqFDLx -EOcLKvbdEXxLtTsl -DnbkKvbdtumwipsA -EObjjvbdmJEUQtqa -DncKjvbdxwhjCPyk -DnbkKvbdyfyMANFX -DncLKvbdiVZeXRtb -EObkKvbddtAUATMv -EOcKjvbdxnSgwriD -EObjjvbdlrZVZrdJ -EPCkKvbdsBelkfkZ -DoDKjvbdFVyPomJe -EPCkKvbdQmYBxnUz -EOcKjvbdSBdFLhyL -DncLKvbdmJETpuSB -DoDLKvbdRECaPpcr -DncLKvbdIxUBglRQ -DoCjjvbdpssfrSLU -DnbkKvbdSQUHJedX -EObjjvbdkySrTZHU -EObkKvbdZtIiZETO -DoCjjvbdtumwipsA -DoCjjvbddBrlrAUN -EPCjjvbdKCjDQibx -DoCjjvbdQccAopdS -DoDLKvbdSBceLiYk -EPDKjvbdREDAoqDr -EOcKjvbdZQleJMeR -DoCkKvbdEARiMywX -EPDKjvbdkDLkQgUg -DncLKvbdFjdsDIMu -EPCjjvbdlrYtysDi -EPCkKvbdezuxeIsw -EObkKvbdyNsHxTJD -DnbkKvbdemGWgMik -DoDLKvbdBhkCKhej -EOcLKvbdjvWmcaww -EPDLKvbdqTsgRrLU -EObkKvbdZyDimcLr -EPCjjvbdlrYtzTEJ -DoCkKvbdHgGyyYXg -DoCkKvbdZoNhddyj -EPDKjvbdhtzFWquC -EPCkKvbdDoCkKwDE -DoDLKvbdsrqsZZeD -EPCkKvbdiHJbxuiu -DoCjjvbdhlFEOUcZ -EPDKjvbdDigiuwjA -EPDKjvbdQdDBPqES -DoCjjvbdcTCjsdKB -DncLKvbdUsmUFkuj -EPDLKvbdnHEwlnGy -EOcLKvbdxVNEqYkn -DoDKjvbdEuxopNJe -EObkKvbdkClLQfuH -EPCjjvbdcTDLUEKB -EOcKjvbdEPDKkXDE -EPCjjvbdXsLaNUOx -DoDKjvbdFWZQQNKF -EPDLKvbdUtMtFlVj -EOcKjvbdzaAPGfal -DnbkKvbdHlBznXRL -DoDLKvbdTlVoBWPJ -EPCkKvbdDoCjkXDE -EOcKjvbdrzMQTAhO -EOcLKvbdozmdLXoA -DoDLKvbdzQnmIjXA -DoCkKvbdmgExMmgZ -EPCkKvbdzjUoocrt -EOcLKvbdwyhGFweS -EOcLKvbdWWhxVceH -DncLKvbdqqtkOKaN -DoCkKvbdOTTvHEuQ -DoDLKvbdjJehKMwr -DoCjjvbduDCtvuoP -DnbjjvbdqdEiPmvB -DnbjjvbdhtzEwRuC -DnbkKvbdRkYetfkT -DoDKjvbdCDpBVjNG -DoCkKvbdcSbjscjB -EPDLKvbdYpldiMdq -DoCjjvbdaaWEfPow -EOcKjvbdqZPHgQdY -DoCkKvbdeOdrjtUS -DoDLKvbdFaPRZJzm -DnbjjvbdRECaPqES -DncKjvbdaMjaruMg -EObjjvbduVnYJpsA -DnbkKvbdqTsfrSLU -DncKjvbdYqMeJMdq -EOcKjvbdvvlBWAuu -DnbjjvbdUxgtZkOn -EOcKjvbdOSsufduQ -EOcLKvbdtumxJqTA -DncKjvbdIryAsNXl -DoDKjvbdMuTRkNAX -DoDLKvbdxnSgwrhc -EOcKjvbdiHKCxujV -EObkKvbdeKJrVtzn -EPDLKvbdjhHMGGNk -EOcLKvbdkVwNdBww -EOcLKvbdygZMANEw -EPDLKvbdRXODcLhD -EPCjjvbdSPsfjFcw -DoDKjvbdYpleIldq -DoDLKvbdOEcsiIjd -DnbjjvbdddoRavbj -DncLKvbdHDkWKBjK -DoCjjvbdxxJKBoyk -EPDKjvbdYkqdUNkm -DoDLKvbdDnbjjvcE -DoCkKvbdVvhxVceH -EPDLKvbdWRnXbFMD -EObkKvbdliEUQtqa -EPCkKvbdNQXqVmfs -EOcLKvbdIGfyyYYH -DncKjvbdxUldpxlO -DoDKjvbdznopdcLx -DncKjvbdHDkVibKK -EPDLKvbdjlbLydgP -DoDKjvbdYTMAltOx -DoDKjvbdcSbkUEKB -EPCjjvbdzoQREblY -EOcKjvbdZxcinDMS -DoDKjvbdZyDjODMS -DoCjjvbdxZgfFwdr -EPDLKvbdaMkBsVMg -EPCkKvbduDDUvuno -DncKjvbdsCFmLgKy -DoDLKvbddeOrCWcK -DncLKvbdNddThhjd -EOcKjvbdBvzcheQW -EPDLKvbdeEnqbXCj -DoCjjvbdNrtVfduQ -EOcKjvbdZQmEiNFR -EPCkKvbdGFjSNiTq -EPDKjvbdZxcinCkr -DoCjjvbdkNBlZdgP -DoCkKvbdEYXkstTl -DncLKvbdYpmEhmEq -EOcLKvbdePFSkTsr -DoCjjvbdemFvfmKL -DnbkKvbdemFwGljL -EPDLKvbdmbJvxOnV -EPCjjvbdtbcVXVoP -EOcKjvbdFkErcHmV -DoDKjvbdVUMtFlWK -EOcLKvbdkMakydfo -DnbjjvbdIMBznWqL -EObkKvbdptUHRrLU -DnbkKvbdjJfHilwr -EPCjjvbdGYuUaDxC -EObjjvbdmtuZjjRf -DncLKvbdkCkkQfuH -DoDLKvbdtlXwBUBX -DncLKvbdCWzchePv -EObkKvbdrEEiPmua -EOcLKvbdYqNFIldq -DoDLKvbdfILWRnQg -DoDLKvbdqUUGrRkU -DoCjjvbdfMfWflik -EOcLKvbdOTTugEuQ -DncLKvbdjvWnDaww -EOcLKvbdsPuoKDVf -EPDLKvbdZirhPfaf -DoCjjvbdDwxLsstM -DnbjjvbdfHkWRmpg -DncLKvbdrpWOibuf -EPDLKvbdZtIhyESn -DncLKvbdwygfGYEr -EPCjjvbdeEoSCWcK -EPCjjvbdjuvmdBww -EObjjvbdqUTfqqjt -EOcLKvbdZjSgogBf -DoDKjvbdYqMdiMeR -DoCjjvbdKefICApu -DoDLKvbdMfcQNQVL -EPCkKvbdjggMGGNk -EObkKvbdCDoaVjMf -EObkKvbdWWiXuceH -EOcLKvbdURROuVHm -DnbjjvbdpssfrSLU -DncKjvbdgFkzNgHA -DnbjjvbdaSFbgtFk -DncLKvbdIxTahMQp -EPDLKvbdKWVFceGi -DncKjvbdFVyPomKF -DoDKjvbdZirgpHBf -EObjjvbdVqmwadkc -EPCkKvbdieLHVPAO -DncKjvbdZLqdUOMN -DoDKjvbdWWiYWDeH -EObkKvbdQwNdClID -DnbjjvbdMoxRVnGs -DncLKvbdrDdiPmvB -DnbjjvbdZQleJNFR -EOcLKvbdrDdhpOVa -EPDLKvbdYqNFImFR -DoDKjvbdEYXlTtUM -DoCjjvbdhuZeWqtb -EPDKjvbdMfcPlpVL -EOcKjvbdNQYQvNfs -DoDKjvbdiUzFXSVC -DoCkKvbdmRxtzSci -DnbjjvbdbiMikGXY -DoCjjvbdQdDBQQdS -EObjjvbdqZPIGqDx -DoCkKvbdkWWmdBxX -DoDKjvbdKxpirzuG -DoCjjvbdlBNPNALA -DoCjjvbdhzVGMROG -DoCjjvbdzoQREcMY -EPDKjvbdlAlnmALA -EPDLKvbdwuMeRZLn -EOcLKvbdYqMdiNFR -EObkKvbdOTTugEuQ -EOcKjvbdYTMAmUOx -DnbjjvbdRDcBQRES -DoDLKvbdidkHVPAO -EPCkKvbdSKyFtfjs -DoCjjvbdhytelQmf -DncLKvbdEztRElCi -EPDLKvbdRWnEDLgc -DoDKjvbdwuNFQyLn -EObkKvbdGLFTDHmV -DnbkKvbdShyiqABM -EObkKvbdUaCQsRSZ -EOcKjvbdjuwNcbXw -DnbkKvbdmfeXlnHZ -DncKjvbdsPuoKDVf -EOcKjvbdNGbomPtk -DoDKjvbdvPTzpkOt -EPDKjvbdJqZdneme -DncKjvbdqTtGqqkU -DnbkKvbdjggLeemk -DoCjjvbdVZIUZkOn -EPCkKvbdzjVPodTU -DncKjvbdnBjXYOnV -DoDKjvbdHgGzYxYH -EPCkKvbdSZigsCvA -EPCjjvbdtbbtvuno -DoDKjvbdPIAXyAZB -EObjjvbdRNXaxmtz -DoCkKvbdUyITykPO -EPCkKvbdssRryZeD -EObkKvbdJuuGEFGi -DoDLKvbdxZgfGXeS -EObjjvbduoTzqLOt -DoDKjvbdbrbkTcjB -DncLKvbdxxIiaoyk -DoCjjvbdFxtuBDxC -EPDLKvbdzaAPGgBl -EPDLKvbdpxnhGqDx -EOcKjvbdtSqsZZeD -EOcLKvbdMowpvOGs -EObkKvbdVBCRSpqy -DoCkKvbdZRNEiMeR -EPCjjvbdczYowyQb -DncKjvbdjgfkfGNk -DnbkKvbdssSTYzFD -EOcLKvbdVhYWYGxz -DncKjvbdKDJcQibx -DncKjvbdZHWdAPTJ -EPCkKvbdFjdsChNV -DoDLKvbdJcJcRJcY -EPCjjvbdRjyGVHLT -DnbkKvbdBcpBWKMf -DoCjjvbdxUmEpyMO -EPDKjvbdZoNiFEzK -DoCjjvbdPIAYZAZB -EOcLKvbdFejSOIsq -DoDKjvbdjggMGFmk -EObkKvbdWRnXadlD -EObkKvbdnGdxMmfy -DoDLKvbdLBKgNBxR -DoCjjvbdaSGChTek -EPCkKvbdSCEElIxk -EObjjvbdIxTbHlQp -EPCkKvbdOEcshhkE -EOcLKvbdbsCjsdKB -DncLKvbdCSaDUGXS -EPCjjvbdRzJgsDWA -EPDLKvbduCbuXVno -EOcLKvbdGdLViajK -DncKjvbdCWzdJEpW -DncKjvbdjuwODbXw -DncLKvbdqUTfqqjt -EOcKjvbdxUmFRYkn -DoCjjvbdVAaqSqRy -EPDLKvbdaMkBsUlg -EOcKjvbdGLFTCgmV -EPCkKvbdZeYGzgiC -DoCjjvbdwXLaWBVu -DoCjjvbdelevgMik -EPDKjvbdkHgMGGOL -DoCjjvbdcJMjKewY -EOcLKvbdwzHfGYEr -DncLKvbdlZTRryGt -EOcLKvbdfVzwoizs -EPDKjvbdhzUelRNf -EPCkKvbdiHKCxvKV -EOcKjvbdGFjRmhtR -EPDLKvbdGLEsChNV -DoDKjvbdYORAXuWU -DnbjjvbdpstHSSKt -EObkKvbdegkVqmpg -EPDLKvbdhyuGMQmf -EObkKvbdliDtQtqa -DoCkKvbdfNGXGlik -DoCkKvbdHfgZyXwg -DoCjjvbddndsKssr -EPCjjvbdZMSDsnLm -EObkKvbdEXxMTstM -EPDKjvbdJvUecdfi -DnbkKvbdVUMsekuj -EPCjjvbdPyNAGsSK -DoCjjvbdMSWmZuQz -EObkKvbdBcpBVjNG -DnbjjvbdezuxdiUX -EPCjjvbdBdQAvJlf -DncKjvbdOTUWHFVQ -DoDKjvbdaSGDIUFk -EOcKjvbdUGzmlWvF -EOcLKvbdjlakydfo -DoCkKvbdWSOXaeLc -DoDKjvbdznpRFDLx -DoCkKvbdwtldpxlO -DoDLKvbdGdLVjBjK -EObjjvbdmttykKSG -DoDKjvbdZjShQGaf -DoDKjvbdrDdhomvB -EPDLKvbdiUyeXSVC -DncKjvbdIsYaSmXl -DnbjjvbdVhXvYHYz -EPDKjvbdwzHfGXdr -EOcKjvbdxsOJMqbH -DoCjjvbdehKuqmqH -EPCjjvbdZdxGzhJC -EOcKjvbdsCGMlHLZ -DoCjjvbdOEcshhkE -DoCjjvbdEzsqElDJ -DncLKvbdURRPVVIN -EPCkKvbdZoOJFEzK -DnbjjvbdBiKajhfK -EOcLKvbdbUafwkTh -EOcLKvbdVZHszKoO -DnbkKvbdGKdsDIMu -DnbkKvbddoFSkUUS -DnbjjvbdPxmAGrqj -EPCjjvbdKNADzHVB -EPCjjvbdcyxpXxqC -DnbkKvbdLBLGmBxR -EPDKjvbdFWYopNJe -EPCkKvbdcJNKKewY -DoCjjvbdGLErcHmV -EPCjjvbdWXIxWDdg -DnbkKvbdQvmcbkhD -EOcLKvbdbVCGwjtI -DoCjjvbdmgFYMmfy -EPDLKvbdQdDApRES -DnbkKvbdWWhwvEFH -DnbjjvbdxZhFexFS -EPCkKvbdCIjakJGK -EPCkKvbdKQyeOfOF -DncKjvbdEObjkXDE -DnbjjvbdNGcPlotk -DoCjjvbdVUMtGMVj -EPDLKvbdelfWgNKL -DnbkKvbdqwPlDJZR -DncLKvbdbiMikFwY -EObkKvbdkNBkzEgP -DoCkKvbdmuUyjiqf -DncKjvbddneSjtTr -EPCkKvbdRkZFtgLT -EObkKvbdRjyGUgLT -EPCkKvbdKaKgMaxR -DnbkKvbdZMRdTnMN -EPCkKvbdqZOhGpcx -EPCkKvbdxwhjBozL -DncKjvbdGckViajK -EPCkKvbdiifHilxS -EOcLKvbdqUUGrRjt -EPCjjvbdbhljLGWx -DnbkKvbdhgKCxujV -DoDLKvbdJSyAsNXl -DoDLKvbdjgflFenL -EPCkKvbdMJBlQxAS -DncLKvbdUMVoAvPJ -DoCkKvbdkCkjpgVH -EPDKjvbdqGEEsvAh -EObkKvbdmRxuZrci -EObjjvbdNdctIhjd -EPCkKvbdCSaDTevr -EPCjjvbdRDcAopcr -EObkKvbdwtmEpyMO -EOcKjvbdqZPHfqDx -EOcLKvbdaNKbStmH -EOcLKvbdaSFcHsfL -DnbkKvbdRosgJecw -EObkKvbdkySrSyGt -EOcLKvbdwuMdqYkn -EPCjjvbdrDdhonWB -EPCkKvbdiBoDEwRR -EPCkKvbdEztQdlCi -EObkKvbdFyUuBEXb -EPDKjvbdOAIsUJrA -EPDKjvbdKCicRKCx -EObjjvbdSZihSbvA -DncLKvbdvAdYsPEh -DncKjvbdySnImSCH -EObkKvbdiVZeXRtb -EOcKjvbdsCFllHLZ -EPDKjvbdZeXfzgiC -DnbjjvbdMpXpvNgT -DoDLKvbdsCFllHKy -DoCkKvbdqYoHfpdY -DnbjjvbdRzKHrbvA -EOcKjvbdNHComPtk -EOcLKvbdCJLBjiGK -EPDLKvbdsZlPsAhO -DnbkKvbdemFvgMik -DoCjjvbdFyUuBDwb -DnbjjvbdrafMlGkZ -DncKjvbddZyPxYpb -EObjjvbdxZhGFwdr -EPCkKvbdEXwlTssl -DnbkKvbdANIYrvyx -EObjjvbddePRawCj -EPDKjvbdyNsIXrhc -EPCkKvbdhkeEOVDZ -DoDLKvbdAMgxrwZx -EPDLKvbdsQWPJbvG -DoCkKvbdkVvmcbXw -EPDKjvbdJYTbIMQp -DncLKvbdBsAcTewS -DncLKvbdxrnJNRag -EOcLKvbdmSYtzSdJ -EObkKvbdqdFJQNua -DoCjjvbdZyEKOCkr -DoCkKvbdZLrEUOLm -EPCkKvbdRNXaxnUz -EPDLKvbdnUuZjjRf -EObkKvbdmbKXYOmu -DnbkKvbdlZTSTYgU -EPDKjvbdGYuUaDxC -DncLKvbdFyVVAcxC -DoDKjvbdEvZPpMjF -EPDLKvbdSwjlNzjx -EPCjjvbdbKkeoNcA -DoCkKvbdMfcQMotk -DnbkKvbdyTNiNRbH -DncLKvbdFWYpQMjF -EPCkKvbdEvYopMjF -DncKjvbdeKJrWUzn -EOcKjvbdpssfrSLU -EObjjvbdKCjDRJbx -DnbkKvbdeUAUATMv -EPDLKvbdjKGIJlxS -DnbkKvbdpssfqrLU -EPDKjvbdqZPHgQdY -EPDLKvbdeAURNXif -DoCjjvbdypoMhiwA -EPDLKvbdGYtuAdXb -EObkKvbdRaceLiYk -DoCjjvbdXsMBNTnx -EOcLKvbdKCjCqKCx -DoCjjvbdYSlAmUPY -EPDLKvbdpstGrSKt -EPDKjvbdhtyeXRuC -EObjjvbdtlYXBUBX -EObjjvbdRMxByNtz -EObjjvbdhanbeWqR -EOcKjvbdpyPIHQcx -EPDLKvbdrRtjnLBN -DoDKjvbdNQYQvNgT -DnbjjvbdbsDKsdJa -DnbjjvbdDxYMTssl -EPDLKvbdnCKWxOmu -DncKjvbdILazmwQk -DoDKjvbdhgJcYuiu -DoCjjvbdlYrrSyHU -EOcKjvbdVUNUFkvK -EObjjvbdRyjHrbvA -DoDLKvbdDnbkKvbd -EOcKjvbdaNKbStmH -DnbkKvbdjblLRGtg -DncKjvbdxUleQyLn -EPDKjvbdLGFhBaQu -EObkKvbdqmZiyLgi -DoCjjvbdJuuGEFGi -EPDKjvbdqmZixlIJ -DoCjjvbdXnRAYVVt -EOcLKvbdWIYVxGxz -EPCkKvbdxZgfGYEr -EPDKjvbdfNGWfmKL -EPDKjvbdbrbjscjB -DoDKjvbdsPunjCvG -DoDKjvbdziuQQDsU -DoDLKvbdbhlijfWx -EPCkKvbdhgKCyWKV -EPDLKvbdGLEsCgmV -EOcKjvbdmIcspuSB -EPDKjvbdIwsbILqQ -DoDLKvbdpedEsvBI -DncLKvbdsPunjDVf -DncLKvbdIxTbHkqQ -DncLKvbdcSbkTdJa -DncKjvbdUWLpJsaR -DnbkKvbdsQVnjCvG -EPDKjvbdyXiJapZk -EPCkKvbdrzLosAgn -DncLKvbdNsTugEuQ -DoDLKvbdrykoraHn -EObjjvbduaDySoFI -DncKjvbdZHWdAOri -EPCjjvbdlqxtysEJ -DnbkKvbdOSsvHEtp -DoDKjvbdRotGjGDw -DoDKjvbdYfvdAOsJ -DoCkKvbdBhjajiGK -EObjjvbdCgLegAzc -DoDLKvbdhtyeWrVC -EOcKjvbdzitoocrt -EOcKjvbdNVTSKmAX -EPCjjvbdVYgsyjnn -EObkKvbdliEUQuRa -DoCkKvbdqFceUWAh -EPDKjvbdIsZAsMxM -DnbkKvbdUVlPjUBR -DoDKjvbdbUafwjsh -EObjjvbdQlxCZOUz -DoCkKvbdQvnEDLhD -EOcKjvbdUVlQKUBR -EPDKjvbdehKvRnQg -DoDLKvbdxmsIYTIc -EObjjvbdsCGNLfkZ -EObjjvbdmSYtzSdJ -DoCjjvbdiMEcnVDZ -EPCjjvbdypnlhiwA -DoCjjvbdRyihTDWA -DoCjjvbdZoOJEdzK -DoCjjvbdJpzEoGOF -DoCkKvbdYpmEiMeR -EPCkKvbdbhljKfWx -EPDLKvbdqYnggQcx -EOcLKvbdwjwEHzyf -EPCjjvbdLFegbAqV -DoCjjvbdMoxQvNgT -EPCjjvbdZsiIyETO -DoDLKvbdZQmFImEq -DnbjjvbdYkrDtOMN -EPCjjvbdjggMGGOL -DncLKvbdDwwlTstM -EOcKjvbdCWzciFQW -DoCkKvbdyYIiaozL -DnbkKvbdNsTufeVQ -DoDKjvbdjlakydfo -EObjjvbdUGznLvue -DoCjjvbdeFOqawDK -DoCjjvbdZnmiFEyj -EOcKjvbdVBCQrprZ -EOcLKvbdrovOjCvG -DncKjvbdrovPKCuf -EOcLKvbdlYrqryHU -EObkKvbdcyyPxZQb -EObjjvbdnBivwnnV -EObjjvbdjJehJlwr -DnbkKvbdOFDtJIjd -DnbjjvbdVAaqSqSZ -EObkKvbdrXPkbiZR -DoCjjvbdzaAPGfal -DncKjvbdZQldhmEq -EObjjvbdmoyxvLZC -DnbkKvbdmpZxujyC -DoCjjvbdvwLaWBWV -DncLKvbdiVZdvquC -DnbjjvbderBWzlDP -EPCjjvbdjbkjpfuH -DncLKvbdrafNLfkZ -DncKjvbdrWokbhxq -EPCkKvbdsZkosBHn -EOcKjvbdidjfuPAO -DnbjjvbdNGcPmQUk -EPCjjvbdrJAKFNOe -DnbjjvbdTukoitBR -DnbkKvbdySmhlrCH -EObkKvbdrXPkcIxq -EOcLKvbdFejSOItR -EObkKvbdmgExMnGy -EPDKjvbdqrVLOLBN -DoDKjvbdLAkHNCYR -EObkKvbdVrOXbEkc -DnbjjvbdEXwlUTsl -EPCkKvbdyXhjBpZk -EObkKvbdiifHjMxS -EOcKjvbdEKHiuxKA -EObkKvbdZLqdTmlN -EObkKvbdWRnXaeLc -DnbjjvbdWSNwaeMD -DnbjjvbdfNGWgNKL -DoDKjvbdoAKztIDn -DncLKvbdmaivxOmu -DnbjjvbdZLqcsnMN -EObjjvbdcTDKscia -EPCjjvbdOTTufeUp -DoDKjvbdGdLVjBjK -DncKjvbdcJNKLFvx -EOcLKvbdTYKkmzjx -EOcKjvbdZRMeImEq -DoDLKvbdKQyePFnF -DnbkKvbdNrtWGduQ -EPCjjvbdatbHXjtI -EPCjjvbdvwMAuaVu -EPDLKvbdnQZxvLZC -EObjjvbdtlYXAsaX -DnbkKvbduDDVWvPP -EPDLKvbdqTtGrSKt -EObjjvbdxnSgwsJD -EObjjvbdbKkenmcA -EPCkKvbdFaOqYizm -EOcKjvbdLGGHbBRV -DoDLKvbdRzJhTCvA -EPCjjvbdiMFDmtcZ -DnbjjvbdWWhwvEEg -EPCjjvbdJmAEZgVB -DoCjjvbdmuVZjirG -DoCjjvbdliEURUqa -DoDLKvbdnCKWwnnV -EPDLKvbdhgJbyViu -DnbkKvbdjggMFfNk -EObkKvbdEuxopMie -EPDKjvbdssRsYydc -DncLKvbdliDsqVRa -EOcLKvbdLBKflbYR -DncKjvbdzoPpeClY -DncKjvbdqFdEsvBI -DoCjjvbdZMRctOMN -DncKjvbdDnbkLWcE -EObkKvbdMfcQNPuL -DoDKjvbdUWMPjTaR -DnbjjvbdxmsHwsIc -EObkKvbdrDdhonWB -EPCkKvbdhgJcYvJu -DoCkKvbdlYsSSyHU -EPCjjvbdNdcsiJLE -DoDKjvbdhlEcmuCy -EObjjvbdJTZAsNXl -EPCjjvbdznpQeClY -DncLKvbdDxYMTssl -DoCjjvbdkVwNcbXw -EOcLKvbdMgDPlpUk -EObkKvbdXsMAlsnx -DnbkKvbdiBncEvqR -EPCjjvbdeFPSCWcK -DoDKjvbdmuUzKjSG -EPDKjvbdqrUkNjaN -DoDKjvbdhyuFlQnG -EOcKjvbdDigivYKA -DoDLKvbdJYUCHkqQ -DncKjvbdACqwiyiQ -EPDKjvbdEYXkstUM -DoDLKvbdKDKCpicY -DncLKvbdCDoaVjNG -EObkKvbdxZhFexFS -EPCkKvbdKDJcQjCx -DoDLKvbdEPCkKwCd -EPCkKvbdTfzmkwVe -DnbjjvbduWOYJqTA -DoCjjvbdcJMijfXY -EPCkKvbdmaiwYPOV -EOcKjvbddjJrVtzn -EObkKvbdpstHSRjt -EOcKjvbdyXiKCQZk -DnbkKvbdIsYaSmYM -DnbjjvbdwtmFQxlO -DnbkKvbdYpleJMdq -DoCjjvbdkNBkzFGo -EOcKjvbdbsCkUEKB -DoDKjvbdYlRctOMN -DnbkKvbdjuwOECXw -EPDKjvbdWRnXaeMD -DncLKvbdkDLkQgVH -DoDLKvbdFeiqnJTq -EOcKjvbdzHYlAMeX -EPCjjvbdJbjCpjDY -EPDLKvbdzitopDsU -DnbkKvbdziuPpDrt -DncLKvbdySnImSCH -DnbjjvbdySnImRbH -DoCjjvbdKjaIWAJy -DnbjjvbdTqRPUthN -DoCjjvbdURQntuIN -EObjjvbdQlxCYmtz -EPDKjvbdMtsSLNAX -EObjjvbdJbjDQicY -DoDKjvbdEPCkKwDE -EObkKvbdKQydoGNe -DoDLKvbdVwJXuceH -EObjjvbdnUtykJrG -DncLKvbdwMvANEEm -EPDKjvbdpyPHgQdY -DnbjjvbdUVkpKUBR -EOcLKvbdhfjCyVjV -EPDKjvbddoFTKstS -EPCkKvbdANHyTXZx -EPCkKvbdUxhTyjoO -EObjjvbdkVwNdBxX -EPDKjvbdDoCjjvbd -DnbkKvbdWWhwudEg -DnbkKvbdyTNiMrCH -DoDLKvbdelewGljL -DncLKvbdUGznMWue -DncKjvbdwygfFwdr -EPCkKvbdJqZePFnF -DnbjjvbdNsTugEuQ -DoDKjvbdQcbaPqDr -DncLKvbdfMevgNJk -DncLKvbdlrZVZrdJ -DoCjjvbdFjeTCglu -DnbjjvbdYqNFImEq -DoCjjvbdsCGMkfkZ -DncLKvbdhuZdwSUb -DoCkKvbdrXPkbiZR -DoCjjvbdZRMdiMdq -DoDKjvbdemFvgMjL -DoCjjvbdygZMANEw -EOcKjvbdZRMeIldq -EObkKvbdiHJcZWKV -DncKjvbdCJKbKiFj -EObjjvbdzROlhjXA -DnbjjvbdDoDLKvbd -EPDLKvbdVYgtZjnn -EObkKvbdDoCjjwDE -DnbkKvbdrouoJbuf -DoCkKvbdyTOImRag -EPDKjvbdBcpBVilf -DoCjjvbdCWzdJFQW -EPCkKvbdbrbjscjB -EOcLKvbdwkWdHzzG -EPDKjvbdnGeXlnGy -EPCkKvbdznpREcLx -EPCkKvbdZMRcsnLm -EOcKjvbdJSyArmXl -DnbkKvbdZMSDtNkm -EPDKjvbdAMgySvzY -DoDLKvbdyYJJbPzL -DoCkKvbdLAjgMaxR -DoDLKvbdWIXuxGxz -DoCjjvbdqwQLbiYq -DnbkKvbdpyPIHQcx -EOcKjvbdfNGXHNJk -DncKjvbdqYnhHQdY -DncKjvbdeEnrBvcK -EPDKjvbdZjTHpGaf -DoDLKvbduoTzqLPU -DnbkKvbdIjEAJofd -DnbkKvbdxnSgxTJD -DoDLKvbdXsLaMsnx -DnbjjvbdaRfDHsek -DoCkKvbduLwwAtBX -DnbkKvbdrpWPJcVf -DoDKjvbdrbFlkgLZ -DoCkKvbdlqxtyrdJ -EObkKvbdRyihSbvA -EObkKvbdWRnYCFLc -DoCkKvbdOEcshhjd -DnbkKvbdZjTHpHBf -DnbjjvbdcyyPwxpb -DncLKvbdkVvmdCXw -DncLKvbdcScKtEJa -DnbjjvbdrSVLOLBN -EObkKvbdiGjDYvKV -EPCkKvbdEJgjVwjA -DnbkKvbdRosgKFdX -EPDLKvbdcScKtDia -DoCjjvbdtbcVXVno -DncKjvbdhgJbyViu -EPCjjvbdjJehKNYS -EObkKvbdyOTIYTJD -DnbkKvbdRaceMJYk -DoCkKvbdqiAKEmOe -DoDLKvbdEKHiuwjA -EObkKvbdxUldpxkn -EObkKvbdFejRmhtR -DncLKvbdSBcdlIyL -EPCkKvbdxZhFexFS -EObjjvbdwjwEHzzG -EPCjjvbdmRxtzSdJ -EPDLKvbdEvYooljF -DoCkKvbdmgFXlmfy -DoCjjvbdtkxXBTaX -EObkKvbdmgExMnHZ -DncLKvbdjvXODaww -DoCkKvbdSCEFMIyL -EPDKjvbdVYhTykOn -DoDLKvbdNsUVgFUp -DncKjvbdRXOEClID -DoDKjvbdnVVZkKSG -DoDKjvbdWWhxVcdg -EPCkKvbdwuNFQxlO -DncLKvbdKeegbBRV -DncLKvbdUWLpJsaR -EOcLKvbdNxOuzcmt -EObjjvbddwzUUSFz -DoCjjvbdJXtBhMQp -DoCkKvbdLGFgbBRV -EOcLKvbdcJMjKewY -DnbjjvbdxUmEqYkn -DnbkKvbdjbkjqGtg -EPCkKvbdIHGzYwwg -DnbjjvbdrpWOjCvG -DoDKjvbdZMRctNkm -DnbkKvbddZyPwxqC -DoCjjvbdtcDVWuno -DoCkKvbdJcKDRJcY -EOcLKvbdmbKWwnnV -EPDKjvbdcasNSAUN -EPCkKvbdUaBpsQqy -EObkKvbdJutedFHJ -DoDLKvbdBhjakJFj -DnbkKvbdnUuZjiqf -EPDKjvbdpxoHgQcx -DnbjjvbdZjTHofbG -EObkKvbdkxsSSxgU -DnbjjvbdWRmwbElD -DoCkKvbdRkZFuGjs -EPCkKvbdwNWANDdm -EObjjvbdTkvPBVni -DoDKjvbddndrkTtS -DncLKvbdZtJIxdSn -EOcLKvbduaDyTOeI -EOcKjvbdxZgfGXdr -EOcLKvbdkySrTZGt -EPDKjvbdVwJXucdg -EPDLKvbdatagYLUI -DoCjjvbddZxpYZQb -EPDKjvbdtunXjRTA -DoDLKvbdWSOYBeMD -DoCjjvbdHlBznXRL -EPDLKvbdcyxpXxpb -DnbjjvbdAMhYsWzY -EObjjvbdraemLgKy -EPDKjvbdJpzFOenF -DoCjjvbdZnnIeEyj -DoCjjvbdrWpLbiZR -EOcKjvbdLqwMytpz -DncKjvbdKQzEoFme -EPDKjvbdZRMeJMeR -DncKjvbdEuxpPlie -EOcLKvbdFWYpPlie -EOcLKvbdjblKpgUg -EOcLKvbdiBnbdwQq -DoDLKvbdOTTufeVQ -EPDKjvbdpyOggQdY -DnbkKvbdGBOqYizm -EObjjvbdRjxfUfkT -EPCjjvbdUMVoAuoJ -DoDLKvbdVwJXvEEg -EObkKvbdnCKXXoOV -DoDKjvbdNPxRVmgT -DncLKvbdZsiIxdSn -EPDKjvbdjlalZeHP -DoDLKvbdeFPSBvbj -DoDKjvbdVqnXbFMD -DncKjvbdHffyyYYH -EOcLKvbdBhjbLJFj -EPDKjvbdJvVGEFHJ -EOcKjvbdgQBzvdYI -EPDLKvbdpyOggRDx -EObjjvbdKQyeOfNe -EPCjjvbdtcCtwVno -EPCjjvbdQvmdClHc -DnbkKvbdyXiKBoyk -DncKjvbdqTsgSSLU -EObjjvbdyNrgxShc -DnbjjvbdRkZFuGjs -EObjjvbdYfvdAOri -DoDKjvbdkMbMZeGo -EPDLKvbdCIjbLIej -DoDKjvbdHffyxwwg -EPCkKvbdGdLVibJj -DoCkKvbdaaVdepQX -DnbkKvbdSQUGifDw -EPCkKvbdqYngfpdY -DnbkKvbdxUleQyLn -DoCjjvbdqlyixkgi -EPCkKvbdjgfkfGNk -EObjjvbdeFOqavbj -DoDLKvbdYkrDtNlN -DoCkKvbdjhGlFenL -EPCjjvbdijFhJmXr -EObjjvbdnGeYMmfy -EOcLKvbdbhmJjfXY -EOcLKvbdLBKfmCYR -DncLKvbdJSxaSmXl -EPCjjvbdsQVnicWG -DoDKjvbdjhHLfFnL -EObkKvbdjuwOEBww -DoCjjvbdiBncEvpq -EOcLKvbduLxWaUAw -DncLKvbdhuZdwRtb -EOcKjvbdjvWnECXw -EObkKvbdZeYGzghb -DoDLKvbdNQYQumgT -DoDKjvbdJpydoFnF -EPCkKvbdRjyFuGkT -DnbjjvbdraelkgKy -EObjjvbdfNGXHMjL -DoDLKvbduWNwiqTA -DncKjvbdnVUzLJrG -DoDLKvbdehKvSOQg -EPDLKvbdwtmFRYkn -DoDKjvbdKfFgaaQu -DncKjvbdCTBDTfXS -EObjjvbdDoCjjwCd -EPCjjvbdYTMAmUOx -EOcKjvbdiMFDnVCy -EObkKvbdjlalZeHP -DnbjjvbdCJLCLIfK -DoDLKvbdZMRdUNkm -DnbjjvbdURRPVUgm -EObjjvbdJcJbpibx -EObkKvbdrWpMDJZR -EObjjvbdjuwNdBxX -EPCjjvbdbBVdfQQX -EPCjjvbdKRZeOfOF -DoCkKvbdKDKCqKCx -DoCjjvbdkVvmdBxX -EPDKjvbdvAdYroEh -EOcLKvbdtcCuXWPP -EPCjjvbdczZQXxpb -DncKjvbdUxhUZkPO -EObjjvbdlrYtysEJ -DncLKvbdcScLUDia -EPDKjvbdBsAbsevr -DoDLKvbdqTtGqrLU -DoDKjvbdSCEFLiYk -EPCjjvbdRWmccLgc -DncLKvbdNQYQunGs -EObkKvbdmbKXYPNu -EPCjjvbdfMewGmKL -EObjjvbdzROmIiwA -DnbkKvbdliETptqa -EPDKjvbdHlBznWpk -DoCkKvbdUaBpsQqy -DoCkKvbdWSOYCFMD -DoDLKvbdxmrhYTIc -DncLKvbdLAkGlbYR -DncKjvbdlhctRUqa -DoCjjvbduDCtwVno -DnbkKvbdIjEAKQHE -DnbjjvbdiLddNuCy -EPDKjvbdEXwktUTl -EPCjjvbdyNrgwsJD -EObkKvbdnPzYujxb -EPDKjvbdznoqEcMY -EPDKjvbdZRNEhleR -DoCjjvbdGQATXHFy -EPCjjvbdyqPNIiwA -EOcKjvbdkxrrTYgU -EOcKjvbdcImKLFvx -DoCkKvbduoTzpkPU -EPCjjvbdJXtCIMQp -EOcKjvbdrpVoJbvG -DncLKvbdqZPIHRDx -DnbjjvbdTAFJHand -EOcKjvbdtcCuWuno -DncLKvbdfIKurNqH -DncKjvbdLrWmZtpz -DoDLKvbdMtsRjmAX -EObjjvbdLGGHbBRV -EObkKvbdCWzchePv -EOcKjvbdZxcjODMS -EObkKvbdzaAPGgBl -DoDLKvbdKVtecdgJ -DnbjjvbdHDjvJbJj -EPCjjvbdLiCLqYAS -EPDLKvbdFVxpPmKF -DoDLKvbdZisIPgBf -DncLKvbdTppoUtgm -DnbjjvbdpyPIGpdY -DoDLKvbdEztRElCi -DncLKvbdHgGzZYYH -DnbjjvbdZLqctOMN -DnbkKvbdqTtGqqkU -DnbjjvbdiMEcnVCy -EPDKjvbdvBDxrneI -DoDKjvbdemGXHNJk -DoDKjvbdhficYvKV -EObjjvbdegkWSOQg -DoDLKvbdOFDtIiKd -EPCjjvbdBdQAuimG -DoCjjvbdpyPHgREY -DncKjvbdJXsbHkpp -DoDKjvbdRbEElIxk -DoDKjvbdsQWPJcWG -EObkKvbdsCGNLfkZ -EOcLKvbdzaAPGgCM -EObkKvbdzjUoodSt -DnbkKvbdemFvgMjL -DnbkKvbdWWhxVcdg -DncLKvbdxrmiMqag -EPCkKvbdMSWlytpz -EObjjvbdwNWAMdFN -EPDLKvbdlrYtzTEJ -DnbjjvbdVqnYBeLc -DncKjvbdnHEwmOGy -DnbjjvbdtbbuWvPP -DncKjvbdmIcspuSB -EObkKvbdEOcKkXCd -EOcKjvbdDncKkXCd -EPDLKvbduaDxrndh -DoCjjvbdOFDshhkE -DnbkKvbdRaceLhyL -EPCkKvbdZshhyDrn -DoCjjvbdCSaDTfWr -EOcKjvbdqUTfrSLU -EPDLKvbdtTRryZdc -DoDLKvbdkyTRsZGt -EPDKjvbdyqPNIjXA -DoCkKvbdNUrrKmAX -DoCjjvbdSCDeMIxk -EObkKvbdkMbLzEgP -DncKjvbdEvZPpMie -DoCkKvbdyYIibQZk -EObkKvbdNPxQumfs -EOcLKvbdDncKjvbd -EPCkKvbdozmcjxPA -EPDKjvbdCIkCLIfK -DncKjvbdcyxoxZRC -DoCkKvbdeOdrkUUS -DoCjjvbdhzVFlQnG -EObjjvbdOFETiJLE -DncKjvbdhyuGLqNf -EObkKvbdRWmdClID -DoCjjvbdFpATWgFy -DnbkKvbdlqxtysDi -EObjjvbdqmZjYkhJ -DoDKjvbdZyDjODMS -DoCjjvbdEJhJvYKA -EOcKjvbdqTsgRrLU -EOcKjvbdZsiIxcrn -EObkKvbdIHGzZYYH -EPDKjvbdHgGyxxXg -EObkKvbdxmrgwriD -EPCkKvbdxrnJNSBg -DnbkKvbdjhGkefOL -EPCjjvbdKQydoGNe -EOcKjvbdqvpMDJZR -EObjjvbdQdDBQQdS -DoDKjvbdSKxfVHKs -DoDKjvbdbLLeoODA -DoDLKvbdBsAcUGWr -DoCjjvbdRzKHrbvA -EObjjvbdfMfXGljL -EObkKvbddeOrCWbj -DoDKjvbddjJrVtzn -DoDLKvbdhtydvqtb -DnbjjvbdRNXayOUz -EPDLKvbdRjyFtgKs -EObkKvbdsPuoKCvG -EPCkKvbdYqNEiNFR -DncKjvbdUxgsyjnn -EPCjjvbdZRMdhldq -DoDLKvbdEJhKWXjA -DoCkKvbdQwODblID -EPCkKvbdssRrxzFD -DnbjjvbdZxdKOCkr -EObjjvbduCcUwVno -EOcKjvbdmuUzLKRf -EPCjjvbdfpBzvcwh -DnbjjvbdMowpvNfs -EPDKjvbdGLErcHmV -EPDLKvbdZoOIeEyj -DncLKvbdSLZGUgKs -DncLKvbdlqyUzTEJ -EPCjjvbddePRawDK -DncKjvbdHEKvKCJj -DoDKjvbdeEnqavcK -DoDLKvbdtSrTYzFD -EPDLKvbdxUmFQxlO -DnbjjvbdLLBIWAJy -EOcLKvbdMowqWNfs -EPDKjvbdptUGrSKt -DoDLKvbdHEKvKCKK -EPCjjvbdJcJbpjDY -DnbjjvbdMuTRkNAX -DnbkKvbdEzspdlDJ -DncLKvbdVUMsekvK -EPDKjvbdOTUVgEtp -DncKjvbdAMgySwZx -DoCkKvbdwtmFRYkn -EObjjvbdIjEAKPgE -EPDKjvbdRpTfjGEX -DncKjvbdFjeSbglu -EObkKvbdjFLGtoAO -DoCkKvbduWOYJqTA -EPCkKvbdVAapsQrZ -DnbjjvbdVwJXudEg -DoDLKvbdUtMsfLvK -EPCjjvbdHELVjBij -DncKjvbdRWnECkhD -EPDLKvbdZsiJZDsO -DncLKvbdnPzZWLYb -EPCjjvbdznoqEcMY -EOcKjvbdzoQQeDMY -DnbjjvbdznpQdbkx -EPDKjvbdeYZtTrFz -DoCkKvbdkySrTZHU -DncKjvbdCSaDUGXS -DoCkKvbdcJNJjfXY -EOcLKvbdCEQAvJlf -EPDKjvbdyzdmqhJI -DncLKvbdNPwpvNgT -DoDKjvbdqmZixkgi -EOcKjvbdVYhUZkPO -EObkKvbdhgJbxvJu -DoDKjvbdUQqPUuHm -DncLKvbdqvolChyR -EPCkKvbdEXxMTssl -DnbkKvbdHgGzYwxH -DoDLKvbdIidAJpGd -DnbkKvbdZLqdUOMN -DnbkKvbdGckViaij -DoCkKvbdFVxopNJe -EOcLKvbdRbEFMIyL -EObkKvbdLAjflawq -EObjjvbdziuPodTU -EPDLKvbdQwNdCkhD -EPCjjvbdZxdJmcLr -EPDLKvbdxrmhlqag -DoCkKvbdSPsgJfDw -EPCjjvbdkDLjpgUg -DnbjjvbdtbcUwWOo -DnbkKvbdWIXuxHYz -EObjjvbdEvYpQMie -DoDLKvbdIHGzZXxH -EPDLKvbdVYgszKoO -DncKjvbdhancEvpq -EPCjjvbdcJNKKewY -EPDKjvbdWWhwvEEg -EOcLKvbdvAdYsOdh -EObkKvbdcyyPwxqC -EObjjvbdSPtGifDw -EOcLKvbdkMalZeHP -EPDKjvbdYlRctNlN -DoDLKvbdKWVGEFGi -DncLKvbdMgColouL -DncLKvbdhbPCeXRR -DncLKvbdDwxMTstM -DoDKjvbdvAcySndh -EObkKvbdXGYytAPT -DoCjjvbdmuVZjjRf -EOcLKvbdDGlFgAzc -DoDKjvbdiBncFXRR -DoDKjvbdkaMnmALA -DncKjvbdVBCQrqSZ -DoCkKvbdVviYWEFH -EObkKvbdAMhZSwZx -DoDLKvbdeAUQlwjG -DoDLKvbdZxcjODMS -EOcLKvbdrpWPKDVf -EPCkKvbdWRnYCFLc -DnbkKvbdKeehBaRV -DoDKjvbdMSXMzUpz -EOcKjvbdRkZGVGjs -DoDLKvbdFkFScIMu -DoCjjvbdZjTHogBf -DnbkKvbdnBivwnmu -EOcKjvbdCTAcTevr -EOcKjvbdVviXvDeH -DoDLKvbdliDsptqa -EPDLKvbdZirgpGaf -EPCjjvbdaRfChUFk -EPCjjvbdkClKqGtg -DoCjjvbdKQyeOfOF -EPCkKvbdqvpLbiYq -DnbjjvbdCTBDTfXS -DoCjjvbdOEctIhkE -EObjjvbdbVCHXkUI -DncKjvbdxnTIXrhc -DnbjjvbdezvYdhsw -EPCjjvbdDwwkstUM -EPCkKvbdaaVdepQX -DoDLKvbdjlbMZeHP -DoDLKvbdqAiFAXHd -EPDLKvbdGLEsCglu -EPCjjvbdZyDinClS -EPCkKvbdSLYeuGkT -EPDKjvbdwyhGFweS -EOcLKvbdjJfIKNYS -DoCjjvbddeOrCXCj -DoDKjvbdkxrqsZHU -EOcKjvbdGYuVBEYC -DncKjvbdHkazmvqL -DnbkKvbdZsiIxdSn -EObkKvbdhanbeXQq -EOcLKvbdMpXqWNfs -DnbkKvbdEztQdkcJ -EPCjjvbdDjHjWXjA -EOcKjvbdNQYQvNgT -EPCkKvbdNHCpNPtk -DoCjjvbdbsCkUDjB -EObkKvbdOStWGeUp -EOcKjvbdVqnYBdlD -DoCkKvbdvlvANDeN -DoDKjvbdnQZyWKyC -EOcLKvbdkyTRsYft -EOcKjvbdnVUyjiqf -EPCjjvbdXnRAXtut -EPDKjvbddZxpXxpb -EPDLKvbdfHjvSOQg -DncKjvbdXsMBNTnx -DncKjvbdEARiMzXX -EPCjjvbdOStVgEuQ -DnbjjvbdHELWKCKK -EOcLKvbdehLWSOQg -DncLKvbdYkqctOLm -DoDLKvbdxsOJMqbH -DoCjjvbdzGyMANFX -DoCjjvbdSCEElJZL -DoDKjvbdRkYeuHLT -EOcKjvbdXsLaMsnx -DnbjjvbdePFSkUUS -DncKjvbdGZUuAdXb -EOcLKvbdlZSqsZGt -DncKjvbdiCPCdwRR -EObjjvbdjvXOEBxX -EPDLKvbdRXOEDMHc -EPCkKvbdZisIQHCG -EPDKjvbdjKGIKNYS -DncLKvbdWWiYVdEg -DnbjjvbdaMkBruNH -EOcLKvbdOFEThiKd -DoCkKvbdVZHszLPO -DoDKjvbdiHJcYvJu -EPCkKvbdwuNFRZLn -EObkKvbdJqZdoGNe -EOcKjvbddndsLUUS -EOcLKvbdBraCtGWr -DncLKvbdxrnJNRbH -DoDLKvbdCWzciFPv -EPCkKvbdtlXvaUAw -DoCjjvbdMfbomQUk -DoCjjvbdfoazwDxI -DoCkKvbdauCHXkUI -DnbjjvbdaogHELzd -EPCjjvbdTulPisaR -EPCkKvbdOSsvHEtp -DoDLKvbdTkuoBVni -EPDKjvbdVBBqTRSZ -DnbjjvbdEJgivYKA -DncKjvbdJXtBgkqQ -DnbkKvbdbsCjsdJa -EPCjjvbdhlEcnUby -EObjjvbdssSSyZdc -EObkKvbdhgKCyWJu -EObkKvbddeOqbWcK -DoCkKvbdqvpLcJYq -EPDKjvbdxZgefXeS -EOcLKvbdkVwOEBww -EPDKjvbdemFvfljL -EPCjjvbdFkErcIMu -EOcKjvbdZyEKNcMS -EPDKjvbdqlzJxlHi -EPCjjvbdmbJwXnmu -EOcLKvbdcTDLTcia -DoCkKvbdyzdmqhJI -DnbjjvbdGdLWKBij -DoDKjvbduaDxsPEh -DoDKjvbdZshhxdTO -DncKjvbdptUGqrKt -EPCjjvbdJvVFceGi -EOcKjvbdddoRawDK -DoCkKvbdfMfXHMik -EObjjvbdVAbRSpqy -EObkKvbddZyPxYpb -DnbkKvbdVYgszKnn -DoCkKvbdZMRdUNkm -EObjjvbdTvMPitBR -EObkKvbdIxTaglQp -EObkKvbdGGKSNiUR -DoCkKvbdGBOpyJzm -EPCjjvbdqrUjmjaN -DncKjvbdIMBzmvpk -EPCjjvbdcyxoxYpb -EOcKjvbdmIcsqUrB -DoCkKvbdqvolChyR -EPCjjvbdkHgMGGOL -EPDLKvbdpaIeAWgd -DncLKvbdqvokcIxq -EOcKjvbdZsiJYcrn -EObkKvbdyYJKBpZk -DoCkKvbdKDKDQicY -EObkKvbdlhdTptqa -EObkKvbdyXhjBpZk -EObkKvbdKNAEZfta -EOcLKvbdRyihTCvA -DncLKvbdtcCtwVno -DnbjjvbdVZITykOn -DoCjjvbdJSyArlwl -EPDKjvbdDxYLtUUM -EPDKjvbdvlvANEFN -DoDKjvbdrykpTAgn -DnbjjvbdeYZtUSFz -DoDKjvbdzjVQQETU -EObjjvbdiHJbyVjV -DoCjjvbdcScLTcjB -DncLKvbdhaoDEwQq -DnbkKvbdQlwbZNtz -EPCjjvbdEARiMzXX -EPCjjvbdGFjSOIsq -DoDKjvbdrXPlChxq -DoDLKvbdYqMeImEq -DoDKjvbdOFETiJKd -EPCjjvbdCTBDUFvr -DoCkKvbdZoOIdeZj -DncLKvbdHgHZyYXg -EOcLKvbdCSaCsevr -DoCjjvbdsQWOjCuf -DoDKjvbdKWUfDeGi -EOcKjvbdzitpPcrt -EPDKjvbdZyDimcMS -EPCjjvbdBcpAuilf -EOcKjvbdqwQMCiYq -EOcLKvbdsrrTZZdc -EObjjvbdSQUHKGEX -DoDLKvbdcyxoxZRC -EObkKvbdWXJYWEFH -DnbkKvbdhgKDYuiu -DoDKjvbdrSVLOKaN -EPCjjvbdMoxQumgT -EPDKjvbdcbTMrATm -EPDKjvbdznopdcMY -DnbjjvbdzdzOzdyp -EObjjvbdGYuVBEXb -EPDKjvbdiZtekpnG -DoDLKvbdvvlAuaVu -DoDKjvbdEYXkstTl -EPCjjvbdauCHYKsh -DoCjjvbdDjIJuwjA -EObjjvbdkNCLzFGo -EPDLKvbdiGicZWKV -EPCkKvbdtlXvaTaX -DoCkKvbdpyOggQcx -EObjjvbdtTSSyZdc -DoDLKvbdiZtelROG -EOcLKvbdWRnYCFMD -EPDLKvbdNddUIhjd -DncLKvbdEObjjvbd -EPDLKvbdVUNTelVj -EPCjjvbdVhXvYGxz -DoCkKvbdfRaWzkbo -DoCjjvbdRjyGVHKs -DoCjjvbdSKxfUfkT -EOcKjvbdaRecITek -DoCkKvbdEJhKVwjA -DoDLKvbdwXLaWBVu -EPDLKvbdLYqJrztf -DncKjvbdUMVoAuoJ -DnbjjvbdvmWAMcdm -EObjjvbdpssfqrKt -DnbjjvbdhlEcnVDZ -EOcKjvbdNsUWGeVQ -EObjjvbdVUNTekuj -DnbkKvbdVYgsykOn -EObkKvbdpssgSRjt -DncKjvbdVZITzLOn -DoDKjvbdGGJrNiTq -DoDLKvbdACqwizJQ -DoDKjvbdIryArmXl -DoCkKvbdZMRdTmlN -DnbkKvbdrovPKDVf -EObkKvbdrounjDWG -DnbjjvbdCSaDTevr -DnbjjvbdUyITyjnn -DnbkKvbdKRZeOfOF -DoCkKvbdDigiuxKA -EOcKjvbdxsNhlrCH -EOcLKvbdDjHiuxKA -DncKjvbdXmqAXtvU -DnbjjvbdqFdFTvAh -EObkKvbdxrmhmSBg -DoCjjvbdIidAKPfd -EOcKjvbdKQydoGOF -DnbjjvbdlqyUzSdJ -EPDKjvbdtvOYKQsA -EPCkKvbdcIljLFvx -DoCjjvbdYqNEhldq -EPDKjvbdczYpYZRC -DoDLKvbdiBoCeXQq -EOcLKvbdiCPDFXRR -EPDLKvbdZisHofaf -EPDKjvbdmIdURVSB -EPDKjvbdZRNFIldq -DoDKjvbdJpydoFme -DoDLKvbdWWhwudEg -DncLKvbdDnbjjwDE -DncKjvbdqTsfqqkU -DncKjvbdKDKDRKDY -DoDKjvbdTulQJsaR -DoCjjvbdSBdFMIyL -DncLKvbdqTtHSSKt -EOcKjvbdBcoaVjMf -EObjjvbdiiehKNXr -EObjjvbdCWzciFQW -EPDLKvbdWSNwadlD -EPDKjvbdKVuGEFHJ -DoCkKvbdZMRdUNlN -EPDKjvbdZRMdiMdq -EPCkKvbdxUmEpyMO -DoDLKvbdRkYfVHKs -EObjjvbdIwtCIMQp -EPDKjvbdmJDsqUqa -EPDKjvbdrDeJPmvB -EOcKjvbdTvMPisaR -DncKjvbdMtsRjmAX -DnbjjvbdlqyUysDi -EPDKjvbdQwNdClID -DncLKvbdRjxfVGjs -EObkKvbdauBfxKtI -DoDLKvbdiZtfLpnG -DoDKjvbdhancFXRR -DoDKjvbdREDBQQdS -EObjjvbdrzMQTBIO -EOcKjvbdcImKKfXY -DoDLKvbdijGIKNXr -DncLKvbdgGMZmfgA -EPCjjvbdZnmheFZj -EPDKjvbdmuVZjiqf -EObjjvbdeFPRawDK -EPDLKvbdrNZiyLhJ -EOcKjvbdlhdURUrB -EPDLKvbdGGJrNhtR -EOcKjvbdiGibyWKV -EOcKjvbdQlwbZNtz -DncLKvbdnVUzKiqf -EOcKjvbdbsDKscjB -EPDLKvbdDnbjjvcE -DoCkKvbdySmhmRag -DncKjvbdkyTSTYft -DoDLKvbdEYXkstUM -EOcKjvbdiHJbyVjV -EOcKjvbdsQVnicWG -DoCkKvbdoznDkYPA -EObkKvbdURQoVVHm -EPDLKvbdFfKSNiTq -DnbjjvbdVgxVwgYz -DnbkKvbdmfeYNOHZ -DoDKjvbdyqPNIiwA -EObjjvbdFVyQPlie -EOcLKvbdGdKvKBij -EPCjjvbdDwxMUTtM -DoCkKvbdKVtfEEfi -DoCkKvbddjKRvUzn -EObkKvbdliEURVSB -EPDLKvbdWSNwaeMD -EOcLKvbdJqZdoFnF -DnbjjvbdKxqJrzuG -DnbjjvbdmuUyjjSG -EPDLKvbdADRxKZhp -EPCkKvbdiCPDEwRR -EObjjvbdTXkMNzkY -DnbjjvbdMgDPlouL -EPCjjvbdyzeNqghh -EOcKjvbdmuUyjjSG -EPDKjvbdDoDLKvcE -EPDLKvbdNxPVzdNt -DoDKjvbdBhjbKhfK -DnbjjvbdZLrETmlN -DoCkKvbdHffyxwwg -EOcKjvbdYSlAmUPY -EPCjjvbdtTSTYzFD -DoCjjvbdFjeTCgmV -EObjjvbdNwnuzcnU -DoDLKvbdSPsfiecw -DoDKjvbdKVtedFGi -EObjjvbdUaCQsRRy -EObkKvbdbsDLUDjB -EObkKvbdEOcKjvcE -EPCjjvbdyNsIYShc -EOcLKvbdbVCGxKsh -DoDKjvbdlZSqsYft -DoCjjvbdUslselWK -DncLKvbdbUbHXkUI -DnbkKvbdYkqcsmkm -DncKjvbdXsMAmUOx -DoDKjvbdJuuFcdgJ -EOcLKvbdGLFTChNV -DoCkKvbdaaWEfQQX -DncKjvbdVqnXbFMD -EOcKjvbdZyEJnClS -DoCkKvbdNdctJIjd -DoDLKvbdmaiwYOmu -EPCkKvbdmbJvxPOV -DncLKvbdTqRPUuIN -EPDLKvbdGGKSNiUR -EPCjjvbdIwtCIMQp -EOcKjvbdHDjvJajK -EOcLKvbdZyEJnDMS -DnbkKvbdrWpMDJZR -EOcLKvbdbUagXjtI -EOcLKvbdLGFgbBRV -EOcKjvbdqvpMDIxq -EPDKjvbdOAJSsjSA -DncKjvbdsrqsYyeD -DnbjjvbdtkwvaUBX -DnbjjvbdGQASwGfZ -EObkKvbdURROtuIN -EObkKvbdiUydwRtb -EOcLKvbdqlyixkhJ -EPCkKvbduaEYroFI -DoCkKvbdnUtyjiqf -DoCkKvbdssSTYzFD -DncLKvbdeATqMwjG -DnbkKvbdqlyjYlHi -DncLKvbdTAEhhCOd -EOcLKvbdpxoIHQdY -EPDKjvbdEXxLsstM -DncLKvbdbLLfPNcA -DoDLKvbdCWzdIeQW -DnbjjvbdWSNwbElD -DoDKjvbdGFjSOJUR -DoCjjvbdmttzKjRf -EPCjjvbdqmZjZMHi -DncLKvbddwzUTqez -EObkKvbdrEFIpOVa -DnbjjvbduMYWaTaX -EPDKjvbdTAEiIBoE -EOcKjvbdVrNwaeMD -DoCjjvbdSwkMNzjx -DoDKjvbdZoNheEyj -EObjjvbdFpASvgGZ -DnbkKvbdvBDxsPEh -DoDKjvbdIHGzYxYH -EOcLKvbdhanbeXQq -EObkKvbdACqxJyhp -DoDLKvbdgQBzwDxI -EObjjvbdOYOuzdNt -DnbjjvbdRWmdDMHc -EPCkKvbdePFTLUUS -DnbkKvbdHlBznWpk -EPCkKvbdqlyixlIJ -DnbjjvbdIHHZyYXg -EObjjvbdBcoaVimG -EOcLKvbdZnnIddzK -DnbjjvbdBiLBjhfK -EPDLKvbdeOeTKtTr -EObkKvbdYlRcsnLm -DoDKjvbdnHExNOGy -DoCkKvbdnCJwXoNu -EOcKjvbdwWlBWBWV -DnbjjvbdGYuVAdXb -EObkKvbdLGGHbBQu -EPCkKvbdEJgjVxKA -EObkKvbdlqyVZrdJ -EObkKvbdaNLBsUmH -EPCkKvbdGQASwHGZ -DncLKvbdnBjWwnnV -DnbjjvbdUslsekuj -DncLKvbdeATqNYJf -EOcLKvbdIwtCHlQp -EOcLKvbdGLErcIMu -DnbkKvbdjvXOECXw -EPCkKvbdfSAvzkbo -DnbjjvbdsCGNMHKy -DoDLKvbdURQnuVHm -EObjjvbdQvmdCkgc -EPCjjvbdSPsgKFcw -EPDLKvbdYpmEhleR -EPCjjvbdFjdsDHlu -EPDLKvbdqdFIpOWB -EObjjvbdnQZyVkZC -EPCjjvbdQdCaQRES -DnbjjvbdADRwiyiQ -DnbjjvbdiiehKNYS -DoCkKvbdHkaznWqL -EObjjvbdmoyxujxb -EOcLKvbdxxIibQZk -EObjjvbdsPuoKCvG -EObjjvbdjcMKpftg -EOcKjvbdZisHofbG -DncLKvbdUGznLwWF -DoDLKvbdFfJqnJUR -DnbjjvbdsBelkgLZ -DoCkKvbdrbGNLfkZ -DncKjvbdeYZssqez -EPCkKvbdyNsHwsIc -DnbkKvbdrafMkfjy -EPCjjvbdZyEJnDMS -DnbjjvbdFpASwGey -DnbkKvbdLGGIBaQu -DncLKvbddiiqutzn -DncKjvbdWIXuwfxz -DoCjjvbdNPxRVnHT -DncKjvbdwygefXeS -EPDLKvbdmJEUQtrB -EPCjjvbdQwOECkhD -DoDLKvbdNGbpMotk -DncLKvbdRyjIScWA -DncLKvbdVrOXaeMD -DncLKvbdQmYBxnUz -DnbjjvbdVBCRSqSZ -EPCkKvbdRosfifEX -EPDLKvbdlYrqrxgU -EPDLKvbdKVuGDeHJ -DncLKvbdDncLLWcE -EOcLKvbdfNGXGmKL -EOcLKvbdQvmdDMHc -EOcLKvbdEARiMyvw -DoCjjvbdnHFXlnGy -EOcKjvbdhtyeXRtb -DncKjvbdMgDQNQVL -EObjjvbdpedFUWBI -EPDKjvbdkHfkfFnL -DoDKjvbdrXQMChyR -EObkKvbdREDAoqES -DoDKjvbdBdQAvKMf -DoCkKvbdjvWnDaxX -DnbkKvbdePEsKstS -EPDKjvbdyOTHwsJD -DnbkKvbdrSVKnKaN -EPCkKvbdZirgpHBf -DoCkKvbdsQVnjDVf -DnbjjvbdGLEsCgmV -EPDLKvbdelewHMjL -EObjjvbdjlbMZeGo -DoDLKvbdxrmhlrCH -DoCkKvbdczZQXyQb -EObjjvbdRDcBQRDr -DoCjjvbdxLXEHzyf -DoCkKvbdkySrTZGt -DoCjjvbdDoDKjwCd -EObkKvbdKWVGEEfi -DoDKjvbdTqQoUuIN -EObjjvbdZRNEiMeR -DoDKjvbdxUmEpyMO -EPDLKvbdxxJJaozL -EObkKvbdraemLfkZ -EPCjjvbdbiNKLFvx -DnbjjvbdZjSgpHCG -EObjjvbdqBIeAXHd -EObjjvbdVUNUGMWK -EPDKjvbdliDsqUqa -EOcLKvbdxZgfGYFS -DnbjjvbdYpmFJMdq -EPCkKvbdcTCjtEKB -DncLKvbdVUMtFlVj -EPDKjvbdcIlijevx -DoCjjvbdpstHSSKt -EOcKjvbdLAjgMaxR -DoDKjvbdHkaznXQk -EPDLKvbdrovPJcVf -EObjjvbdjblLRHVH -EPCkKvbdfSAvzlCo -EPDLKvbdkHfkefOL -DoCjjvbdbiNKKfXY -EPDLKvbdjJfHilwr -EOcKjvbdxVMeQxkn -DncKjvbdqlzJyMIJ -DoDLKvbdffMZnGgA -EPDLKvbdrpWPJcVf -DnbkKvbdNsTvGeVQ -DncKjvbdZshiZETO -DoCjjvbdWRnXaeLc -EPDLKvbdUaCRTQqy -EOcKjvbdKDKDQjCx -EPCkKvbdLKaIWAJy -DoDKjvbdjblKpftg -EPDKjvbdfHkWSNqH -EObjjvbdSCEEkiZL -EPDKjvbdcyxpYZQb -EPDLKvbdVUMtFkuj -DnbjjvbdVBCQrprZ -EObjjvbddoEsLUUS -DnbkKvbdiHKDZVjV -EOcKjvbdpyPHgRDx -EObjjvbdYpleJNFR -DncLKvbdrDdhpOWB -DncLKvbdcbSmSAUN -DncLKvbdQwODcLgc -EPCjjvbdKVuFcdgJ -EPDLKvbdJvUecdfi -EObkKvbddjJqvUzn -EPCkKvbdLrXNZuQz -DnbkKvbdDihJuxKA -DoCjjvbdegkWSORH -DncKjvbdFyVUaEYC -DoDLKvbdNHDPlpVL -DoDLKvbddneTKtUS -DoCjjvbdEARhlywX -DncKjvbdmbJwYPOV -DnbjjvbddeOrBvbj -EPDKjvbdAMhZTXZx -DnbjjvbdULuoBVoJ -DoCkKvbdMfbomQVL -EObjjvbdyTNhlqbH -EPDLKvbdcyxowxpb -DoCkKvbdEPDLLXCd -DncLKvbdSCEFLiZL -DnbjjvbdBiLCKiFj -EPCjjvbdmgExNNgZ -EOcLKvbdsPvPKDVf -DoCkKvbdbKkfOmcA -DncLKvbdIxTaglRQ -DnbkKvbdFVyQQNJe -EPDLKvbdbsCjtEKB -EPDKjvbdakMFnnDA -EObjjvbdWWiYVcdg -DnbkKvbdfSAvzkcP -EOcLKvbdbKkennDA -EPCjjvbdTppoVUhN -EPDLKvbdemGWgMjL -DnbjjvbdJvUedFHJ -DoDLKvbdqvokbiZR -EPCjjvbdZMRctOMN -DoCjjvbdNPwpunGs -DoCkKvbdZtJIyDrn -EPCjjvbdFejRnIsq -EPDLKvbdZshhxdTO -DncLKvbdxZhGGXeS -DoDLKvbdKyRKSztf -EPDKjvbdCflFgAzc -EPDKjvbdOEdThiKd -DoDLKvbdTAFIgaoE -EObjjvbdEARiNZvw -EOcLKvbdjhHLefOL -DncKjvbdbVCHXjtI -EPDKjvbdeFPRawCj -DoDLKvbdtcCuWuoP -DoDLKvbdUVkpJtAq -EPCjjvbdaSFcHsfL -EPDKjvbdPxmAGrrK -EPCkKvbdDjHjWXjA -DnbkKvbdpssfqrKt -DoDKjvbdePEsKtTr -EObkKvbdDwxMUTtM -DnbkKvbdZRMdiNEq -EPCjjvbdhuZdvquC -DoCjjvbdGLEsChMu -EPDKjvbdRDbaQQdS -EOcKjvbdEJhJvYKA -DncKjvbdkxsSSxft -EObjjvbdKRZdnfOF -EOcLKvbdZQmFIleR -DnbkKvbdjcLjpfuH -DnbkKvbdYzbfSKWZ -EPDLKvbdbUafxLTh -EPCjjvbdJuuFcdgJ -DoCkKvbdJcKCqJcY -DoCjjvbdSKyGVGkT -DoCjjvbdemFvflik -DoCjjvbdvBEYsPEh -EOcKjvbdCWzdJEov -DncLKvbdqTsgSSKt -DnbkKvbdUMVoBWOi -EPCkKvbdOEcsiIjd -DncLKvbdaSFbhUFk -DoCkKvbdhtzEwRuC -DoCkKvbdiCOcEvqR -DoCkKvbdfILVqnRH -DnbkKvbdCJLCKhej -EPCkKvbdakLeoODA -DnbkKvbdUaCRTQrZ -DoDKjvbdRacdkhyL -EPCjjvbdYNqAXtut -DncKjvbdwzHfFwdr -DncLKvbdNrsvGeUp -EPDKjvbdDoCkKvbd -EPCjjvbdrafNLfkZ -EObjjvbdmajXXoOV -DncLKvbdVAbRTQrZ -EObkKvbdkySrTZHU -DoDKjvbdZeXfzghb -EPDLKvbdiCOcFWpq -EOcKjvbdUQpnuUhN -DncLKvbdijGIKMwr -DncKjvbdHgHZxwwg -DncLKvbdVTmUFlWK -DoDKjvbdeYZtUSFz -EPDKjvbdHffyyYXg -DncKjvbdXsLaMtOx -DncKjvbdzitoocrt -DoDKjvbdhtyeWquC -EPDKjvbdEuyPpNKF -DnbkKvbdtvOYKRTA -DncKjvbdZnnJFEzK -EPCkKvbdqZPIGpcx -DnbkKvbdVgxWYGxz -EPCjjvbdOStWHEuQ -EObkKvbdNddTiIjd -DoDKjvbdwXMBWAuu -EPDLKvbdsPvPKDVf -DncLKvbdQvnDbkhD -DncKjvbdEKHjWYKA -EPCkKvbdCgMFgAzc -EOcLKvbdQvnDbkgc -EPCjjvbdDoCkLWbd -DnbkKvbdKCibpicY -EOcLKvbdhfibyViu -EOcLKvbdzQnliJwA -DncKjvbdEASImZwX -EPDLKvbdFkFTChNV -DnbjjvbdEuxoomKF -EOcKjvbdYqMeJMeR -DnbjjvbdgQBzvdYI -DoCjjvbdkxrrSxft -DnbjjvbdjuwNdCYX -EOcLKvbdfpBzwEXh -DoCkKvbdnHFYMmgZ -EOcKjvbdjlbMZeHP -DoCkKvbdmttzKjSG -EPDLKvbdzjUopDsU -EPDLKvbdsZlPraIO -EOcLKvbdLBLHMbYR -EPDLKvbdtbcVXVno -DoDLKvbdaaVeGQQX -EPCjjvbdWSOYCEkc -EObjjvbdxUmFQyMO -DoDLKvbdRbDdkiZL -DoCjjvbdhlFDnVCy -EPDKjvbdcTDKscia -EPCkKvbdjlbMZeGo -DncLKvbdCIkCKiGK -DoCjjvbdrbFmMGkZ -EObkKvbdQccAoqDr -DnbjjvbdTqRPVUgm -EPCkKvbdNrsufeUp -EOcLKvbdrMyjZLhJ -EPDLKvbdiifHimXr -DnbkKvbdpstHSRjt -EOcKjvbdZtIhxdSn -DnbkKvbdbhmKLGXY -DnbkKvbdkxsSSxft -DoCjjvbdTAFIhBnd -EObkKvbdUtMtGLvK -EPCjjvbdpstGrSLU -DncKjvbdxLXDgzyf -EOcKjvbdSCDdlIxk -EObkKvbdOFEUIiLE -DnbkKvbdjggLefNk -DncKjvbdliEUQtqa -EOcLKvbdFjdsDHlu -DncLKvbdeEnqavcK -EOcLKvbdnPyyVjyC -DoDKjvbdliDsptrB -DoCkKvbdrXQLbiZR -DncLKvbdFkErbhNV -DoDKjvbdTqROtthN -DoCkKvbdYSlAmUOx -DnbkKvbdKVuGDdgJ -EOcKjvbdvwLaWAvV -DoDLKvbdEObjjvbd -DnbkKvbdwXLaWBVu -DnbkKvbdmtuZjiqf -DoDKjvbdegkWRnRH -DoCkKvbdeXzUUSFz -DncLKvbdfNGXGmJk -DoCjjvbdEztQdlCi -EPCkKvbdEuyQPljF -EPCjjvbdrEEiQNvB -DnbkKvbdLqwNZtpz -EObkKvbdKeegbBQu -EObkKvbdvBEZSoFI -DoDLKvbdrXQLbhyR -DnbkKvbdbKlGPODA -DncLKvbdnCKXYOnV -EOcKjvbdjcMKpfuH -DoCkKvbdQdCaQRES -EPCkKvbdDncKjwCd -DoDLKvbdYlSDtNkm -EObkKvbdmbKXXnmu -EPCkKvbdjgfkfGOL -DnbkKvbdZyDjNcMS -EOcLKvbdkNCLyeHP -DncLKvbdVUMtGLuj -EOcKjvbdKVtedFGi -EPCjjvbdKRZeOenF -DoCjjvbdUQqPUthN -EPDKjvbdkMbLydgP -EObjjvbdVqmxBdlD -EPDKjvbdjAQGaPgK -DoCkKvbdTlVnaWPJ -EPCjjvbdwjvdHzzG -EObjjvbdBsBCtGWr -EPCjjvbdwuNEqZMO -DncLKvbdbrcKtEKB -EPCkKvbdFyVVAcxC -EPCkKvbdaSGCgsfL -EPDKjvbdrylQTBIO -DncKjvbdfSBWzlCo -EObjjvbdfRaWzlCo -DnbkKvbdsPvOjDWG -EPCjjvbdcbSlrAUN -EObkKvbdrWpLbhxq -EPCjjvbdhgKDZVjV -EOcKjvbdhlFDnUby -DoCkKvbdddoSBvcK -DoCkKvbdpssfrRkU -DoDLKvbdJutfEFGi -EObkKvbdEPDKkWcE -EOcKjvbdcJNJjevx -EPCjjvbdcTDKscia -DncKjvbdYlRcsmlN -EPDLKvbdkHgMFfNk -DoCkKvbdjbkjqGuH -EPDKjvbdTvMPjUAq -DnbkKvbdQYmAGsRj -EPCkKvbdKeegbApu -EPDKjvbdiLdcmtcZ -DoCkKvbdNeDshhjd -EOcLKvbdxnShXsIc -EPDLKvbdyOShXrhc -EObkKvbdbPgHELzd -DoCjjvbdDoCkKwDE -EOcLKvbdmbJvxPOV -DnbjjvbdkNBlZeHP -DnbkKvbdRXNdDMID -DncLKvbdXnRAYUvU -EObkKvbdBcpAuilf -EPDKjvbdSLYeuGkT -DoCjjvbdRaceLiYk -DncLKvbdZoNiFEzK -EOcLKvbdGLEsDIMu -DnbjjvbdnUuZkJqf -DoCkKvbdlqyUyrci -DoCkKvbdLGGHaaRV -DnbkKvbdmoyyWLYb -DncKjvbdMpYRWOGs -DnbjjvbdkyTRsYft -EObkKvbdjKFhJmXr -DnbjjvbdxLWcgzzG -DoCkKvbdxnShXrhc -DnbjjvbdRbEEkiZL -EOcLKvbdWWiXudEg -DoDLKvbdDjIKVxKA -DoDKjvbdgFkzNgHA -EPDLKvbdvvlAuaVu -EPDLKvbdauBfwkTh -DncLKvbdmIctQtrB -EPDKjvbdCDpBWJmG -DoDKjvbdvAcxsPEh -EOcKjvbdrJAKFNOe -EOcLKvbdbsDKscia -DncLKvbdAMhYsWzY -DncKjvbdddnrCXDK -EOcLKvbdkHflGGOL -DoDKjvbdbUafxKsh -DnbkKvbdNdctIiLE -EOcLKvbdvBDyTPEh -DoCjjvbdFejSOJUR -DnbkKvbdUQpntuHm -EObjjvbdTpqOttgm -DoDLKvbdddoSCXCj -DncLKvbdbVCHXkUI -EPCjjvbdKNAEZgVB -EPDKjvbdFjdsDIMu -DnbjjvbdpaIeAXHd -EOcLKvbdrDdhpOWB -EPDKjvbdIxUBhLpp -EPDKjvbdhkddOVCy -EPCkKvbdTkuoAuni -EPDLKvbdnPyxujxb -EObjjvbdfSBWzlCo -EPDKjvbdMuSrKmAX -EPDLKvbdmozYvKyC -DnbkKvbdZirhPfaf -EPCjjvbdNQXqWOHT -DncKjvbdZsiIyESn -DnbkKvbdURQnuUgm -DoCjjvbdkIHMFfOL -EPDKjvbdKfGHaaRV -DncLKvbdtcDUwVoP -EOcLKvbdxrnImRbH -EPDLKvbdozmdLYPA -DoDKjvbdUVkojUBR -DnbjjvbdqUUHRrLU -DoDLKvbdEARhmZvw -EOcLKvbdZHWdAOri -DoCjjvbdVUMtGLuj -EOcLKvbdmfeYNNfy -EPDKjvbdZirgogCG -DnbjjvbdEJhKVwjA -DnbkKvbdkVvmdBxX -DnbjjvbdvBEYsOeI -EPCkKvbdDoCjjwDE -DoCjjvbdRXNdClID -EPDKjvbdkxrrTZGt -EOcLKvbdZdxGzhJC -DoDLKvbdxnSgxSiD -DoDKjvbdIryAsMxM -DnbkKvbdTYKlNzjx -DncLKvbdIGfzZYXg -DncLKvbdQvnEClHc -DnbkKvbdqUTfrRkU -DoDKjvbdRDcAopdS -DoDKjvbdTfznMXWF -EOcLKvbdauCHYKtI -EObkKvbdNrsvHEtp -DoDLKvbdDihJvXjA -DnbjjvbdliDtRVRa -DncKjvbdgFlZmfgA -DncLKvbdmJDsptqa -DncKjvbdfoazvdXh -EOcKjvbdJXtBgkpp -EPCkKvbdqUUGrSKt -EPDKjvbdrMzJyLgi -EPCjjvbdiGjDYuiu -EOcLKvbdkWXNcaww -EOcLKvbdxxIjBoyk -DnbkKvbdePErjssr -DnbjjvbdIryArmYM -EOcLKvbdRMwayNtz -EOcLKvbdRkZGUgKs -DoDKjvbdZLrEUOMN -DnbkKvbdDHMFgAzc -DnbkKvbdwXMBVaVu -DnbjjvbddeOrCXDK -EPDLKvbdwuMeQyLn -EPCjjvbdBhjbLIej -EPDKjvbdaNLCSuMg -EPCjjvbdBhkCKhej -EPCkKvbdptUGrSKt -EObkKvbdVTmTfLvK -DoCkKvbdDoDKkXDE -DnbjjvbdfoazvdYI -DnbkKvbdatbHYKtI -DnbkKvbdVUMtGLuj -EPDKjvbdeEoRavbj -DoCkKvbdJpzFPGNe -DnbjjvbdNHDQNQUk -DncKjvbdYNqAXuWU -EPCkKvbdZnnIddzK -EObkKvbdYlRdTnMN -EPDKjvbdEzspdkcJ -DoDLKvbdCIkBjhfK -EObjjvbdTkuoAvOi -DoCkKvbdhkdcnUby -EPCjjvbdHfgZyYXg -DncLKvbdbsCkTdKB -DoCjjvbdLqwMzVQz -DoDLKvbdRkYfUgLT -EOcLKvbdbQHHELzd -EPCkKvbdbVCGxLTh -EObjjvbdmSYuZsEJ -DoDKjvbdssRsYyeD -EPDKjvbdLrWlytpz -DncKjvbdJTZBSlxM -DnbkKvbdxrnJMrBg -EPCjjvbdxZgfFxFS -EObkKvbdUQpnuVIN -EObkKvbdzjUpQESt -EObjjvbduaDxsPFI -DoDLKvbdkyTRsYft -DoDKjvbdyTOImRbH -EObkKvbdegkWRnQg -DoCjjvbdaSFbgsek -DoDKjvbdrylPsAhO -DoCjjvbdgGMZnGgA -EPCkKvbdlqyUzSdJ -DncKjvbdwNWAMdFN -EPDKjvbdTlWPAuoJ -EOcLKvbdUMWPAuoJ -DnbjjvbddZxowxqC -EPCkKvbdEuyQPlie -DoDKjvbdVAaqSqSZ -EPDLKvbdwtldpxlO -EOcLKvbdrRtkNkBN -DncKjvbdJqZeOenF -DncKjvbdfHkWSNqH -DoCkKvbdnUuZjirG -EOcKjvbdsCFmMGkZ -DoDLKvbdwzIFfYEr -EOcLKvbdqqtjmjaN -DoCjjvbdrbGNLgKy -EPDKjvbdNHComQUk -DnbkKvbdIMBznWqL -EPCjjvbdEKHivXjA -EPDLKvbdVhYWYGxz -EPDLKvbdZxcjNblS -DnbjjvbdJpzEoFme -EPDKjvbderBWzkcP -DoDLKvbdpssgRrKt -EObkKvbdtbbtvuoP -EOcLKvbdqGDeUWAh -DoDKjvbdlZSrTYft -EOcKjvbdFfKRmhtR -DnbkKvbdNPxRVnGs -EPDLKvbdZshhxcsO -EPCjjvbdMoxQvNgT -EPCjjvbdKaKfmBxR -EPDLKvbdSwjkmzjx -DoCkKvbdjbkkRGtg -DoDKjvbdfoazwDxI -DoDKjvbdqwQLbhxq -EPCkKvbdZtIhyETO -DncLKvbdmpZxukYb -EOcKjvbdMoxQumgT -DoCjjvbdLYqJrzuG -EObjjvbdnGeXlmfy -EPDLKvbdyzeOSHhh -EOcLKvbdiZuGMQmf -EPCkKvbdWSNwadkc -DncKjvbdhfibyVjV -EOcKjvbdQmXbZOUz -DoCjjvbdSKxeuGkT -DnbjjvbdbrbkUDjB -EPDLKvbdJcKCqJbx -DnbjjvbdjSziTLJz -EOcKjvbdZxdKNcMS -DoCkKvbdelfWfmJk -DoCjjvbdFjeScHlu -EPDLKvbdnCJvwnnV -EPDKjvbdNrsufduQ -DnbkKvbdjcLjqGuH -EObjjvbdmbKXYOnV -DoCjjvbdRacdkiYk -EObkKvbdaaVdfQQX -DoCkKvbdJpydnfOF -DoCkKvbduCbtwVoP -DoDKjvbdpxnhHRDx -EOcKjvbdmJEUQtqa -EPDLKvbdRkZGVGjs -EPDKjvbdEObjkXCd -EObjjvbdCTAbtGWr -DoCkKvbdqTsfrSKt -DncLKvbdaMkBsUmH -DncLKvbdqlyixlIJ -EPCkKvbdvwMAuaVu -DncKjvbdiUzEwRuC -DoDKjvbdiUzFWrVC -DnbkKvbdkDMKpfuH -EObkKvbdZnnJFEzK -EObkKvbdWWhwudEg -DoCjjvbdypoNIiwA -DoCjjvbdShyiqABM -DnbjjvbdOFEThhkE -DnbjjvbdRXNcbkgc -DoCkKvbdqUTfrSKt -EPDLKvbdfNGWgMjL -EPDLKvbdGFirOJUR -EOcKjvbdSCEFMJYk -EOcKjvbdmpZxukYb -EPDLKvbdrafNLgKy -DnbkKvbdmJDsqUrB -DnbjjvbdjKFgimXr -EOcLKvbdVYgtZjoO -EObkKvbdTvMPjUBR -EOcLKvbdSxKkmzjx -DoDKjvbdnPzYvKxb -EPCjjvbdaRfDITek -EObkKvbdjKGIJmXr -DoCjjvbdliEURVSB -EObkKvbdFaOqYizm -EOcLKvbdqGEEsuaI -DoCjjvbdZQleJNEq -DoCjjvbdbKlFnnDA -DnbjjvbdWIXuwfxz -EPDLKvbdNGcPmPuL -DoCjjvbdBsBDTevr -DnbkKvbdczYoxYpb -EObjjvbdJutedEfi -DncLKvbdGFirNhsq -EPDKjvbdUaCQrqRy -EPCjjvbdQwNdDMID -EPDLKvbdtSrSyZeD -DnbkKvbdNHDQMpUk -DoDKjvbdZirgofaf -EObkKvbdrpWOibuf -DoCkKvbdwygfFxEr -EPCjjvbdSwjlNzjx -DnbkKvbdjKGHjMxS -DncLKvbdijFhKNXr -EOcKjvbdddoRavbj -EPDLKvbdmIdTpuSB -DncLKvbdiiehJmYS -EObkKvbdjcLkQgUg -DoDKjvbdsQVoJbuf -EObjjvbdhzUfMQmf -DnbkKvbdcImKKfWx -EObkKvbdbQHHELzd -DnbjjvbdWWiXuceH -EPDKjvbdjJegjNXr -EPCjjvbdZyEKNblS -DoDKjvbdLqvlzVQz -EPDLKvbdZRNEhmFR -DnbkKvbdGcjuibJj -EOcLKvbdGAnpxizm -EPCjjvbdkVvnDaww -EOcKjvbdHffzZXwg -DoCkKvbdKeehCAqV -EPCjjvbdHEKuiajK -EOcKjvbdUtMselWK -EPDKjvbdEXwlTstM -EPDKjvbdsrrSxzFD -EOcKjvbdEztQeMDJ -EPCkKvbddoFSjstS -DoCkKvbdSCEElIyL -DncKjvbdFVxpQNJe -DnbjjvbdXmqAYUut -DoCjjvbdiZtfLpmf -DoDKjvbdwygeexEr -EOcLKvbdiUyeXSUb -DncKjvbdsZkoraIO -EOcLKvbdACrYJyhp -EOcLKvbdTlVoBVoJ -EPCkKvbdqZPHfqDx -DnbkKvbdmJDsptqa -DncKjvbdhkeDnUcZ -EPDKjvbdURQoUtgm -EPDKjvbdjAQHAogK -EObjjvbdCIkCKhfK -EOcKjvbdYzbfRjWZ -DnbkKvbdWRnYCEkc -DncKjvbdyzeORgiI -EObjjvbdEPCkLWbd -DoDLKvbdNHComPuL -DnbkKvbdaRebhUFk -DnbkKvbdhlEcmtby -EOcLKvbdliETqUrB -EPDKjvbdIxTbHkqQ -DncLKvbdCEPaVjNG -EOcLKvbdIjEAJogE -DoCkKvbdsZkpSaHn -EPDLKvbdEXxLtTtM -DncKjvbdwXMAvAuu -EPDKjvbdakMGPODA -EPCkKvbdauBfxKsh -EOcKjvbdCJKakJFj -EPCkKvbdyXhjBozL -DoDLKvbdkWWnDbYX -DncKjvbdEPCjkXDE -DoDKjvbdlqxtzTDi -EPCjjvbdyTOJNSBg -DoCkKvbdnGeYMmgZ -EPCkKvbdaSFbhUFk -EObjjvbdnCKWxPNu -DoCjjvbdrWpLbhyR -EPDLKvbdmRxtyrci -DnbjjvbdSBdElJZL -DnbkKvbdrXQLbiYq -DoDLKvbdWHwuwfxz -DoCjjvbdZRNFJNEq -DncKjvbdUVkpJsaR -DoCjjvbdbiMijfXY -EPDKjvbdVTmTekvK -DoCjjvbdeXytTrFz -DoDLKvbdyYJKCQZk -DoDLKvbdczZQYZQb -EObjjvbdRadFMJZL -DncLKvbdkVvnECYX -DncKjvbduaDySneI -DnbjjvbdwuNFQyMO -DncLKvbdsrqrxzEc -DoDLKvbdcSbjtEKB -EPCjjvbdZtJIyETO -DoDLKvbdJvUfDdgJ -DnbjjvbdhbPDFWqR -DncKjvbdcyyQYYpb -DoDKjvbdWSNwbFMD -DoCjjvbdmajXXoNu -EPCkKvbdxZgeexEr -EOcKjvbdxsOIlrBg -DoDKjvbdZyEJmbkr -DncLKvbdTkunaVni -EOcLKvbdUQpoUthN -DoDLKvbdyNsHxTJD -DncKjvbdEztRElCi -DnbkKvbdXnRAYVVt -DnbjjvbdqAheAWgd -DnbkKvbdCJLBkIfK -EPDKjvbdUGzmkwWF -EPCkKvbdSiZiqABM -EPDLKvbdidkGtoAO -EOcLKvbdYlSDsnLm -EPDKjvbdMSWmZtpz -DoDKjvbdlhdURVRa -EOcLKvbdOYOuzdOU -DncLKvbdrafMlGkZ -EObjjvbdrylPraHn -DnbjjvbdDncLKwCd -DoCkKvbdoznELXoA -DoCkKvbdmttykJrG -DoDLKvbdBvzciEov -EPCjjvbdeXzUUSFz -DoDKjvbdtunYKQsA -EObjjvbdqceJQNvB -EOcLKvbdqTtGqqkU -DoCkKvbdiGjDYujV -EPCkKvbdRWnEDLhD -EOcLKvbdcSbjtDia -DncLKvbdTqROuVHm -EOcKjvbdiifIKMxS -EObkKvbdlYrqsZGt -DoDKjvbdSBdFLhxk -DnbkKvbdVUNUFkuj -DoCjjvbdrzLpSaIO -DoDKjvbdzGxlANFX -DoDLKvbdfHjuqmpg -EPDKjvbdZRMeIldq -DncKjvbdMfcPlpVL -DncKjvbdxKwDgzzG -EOcLKvbdYzbfRjVy -EObkKvbdWSNwbElD -DoCkKvbdeFOrCXCj -EObjjvbdbKlGOmcA -EOcKjvbdDxXktUTl -EPCjjvbdvBDySneI -EPDKjvbdLFehCBRV -DoDLKvbdiZuFlROG -EPDKjvbdDoDLKvbd -DoCjjvbdQwNdCkhD -DoCjjvbdCJLBkIfK -DnbjjvbdlqyUzSci -DncLKvbdNHCpMpUk -EOcKjvbdiMFEOVCy -DoCkKvbdnGeYNOGy -DnbkKvbdZoOIddzK -EOcKjvbdFpATWffZ -DoDKjvbdeOeTKtTr -DnbjjvbdGGKSNhsq -EOcKjvbdyXiKCPyk -DoCjjvbdeAURNYKG -DoDKjvbdpssfrRjt -EPDKjvbdnVVZjjRf -EOcKjvbdiZuGMQmf -EOcLKvbdNHDPlotk -DnbjjvbduCbtwVoP -EOcKjvbdxUleQxlO -DoDKjvbdnHFYMnGy -DnbjjvbdUVlPitAq -EPCkKvbdjAPgAofj -DoCkKvbdTlVoAuoJ -EPCkKvbdmSYtyrdJ -EPDKjvbdBsAcTevr -EPCkKvbdUyITzKnn -DnbjjvbdbQHGdLzd -EOcLKvbdezuyFIsw -DoDLKvbdEXwlTtUM -EOcKjvbdKyRJrztf -DnbjjvbdtTSSxzEc -DnbjjvbdHDjujBij -DoCjjvbdsQVnicWG -EObkKvbdZsiJYcrn -EPDLKvbdUtNUFkuj -DoDKjvbdNPwpumfs -EOcKjvbdSBcdlJZL -EPDLKvbdmfeXlmfy -DncKjvbdIsZAsNXl -DncLKvbdmJDsptrB -DncKjvbdGYuUaEXb -DncLKvbdyYJJbPzL -DnbkKvbdrpVnicWG -EPCjjvbdTqQoVUgm -DoDLKvbdFVyPpMjF -EObkKvbdZnnIeEyj -EObkKvbdbUagYKtI -DoCkKvbdqGDdtWBI -EPDLKvbdFVxpQNKF -DncLKvbdkWXNdCYX -EPDKjvbddwystRez -EOcKjvbdaNKasUlg -DnbkKvbdNdctIhjd -EPCkKvbdatagYKsh -DoCkKvbdfNFvgMik -EObjjvbdJYTbIMQp -DoCjjvbdEYYMTtTl -DncKjvbdWRmxCElD -EPCkKvbdbsCjsdKB -EOcLKvbdFVxpQMie -EObkKvbdpaJFAWgd -EPDLKvbdijGHimXr -EPCjjvbdlhctQtqa -EObjjvbdFVxoolie -DncKjvbdrJAKEmOe -DnbkKvbdzQnmIiwA -EPCkKvbdkHfkeemk -DnbjjvbdLGGHaaQu -DnbkKvbdOSsugEtp -DnbkKvbdZtIiYcrn -DoCjjvbdQZNAGsSK -EObjjvbdNPxRWOGs -DoCkKvbdVUMsfLuj -DnbjjvbdmJETqUqa -EPDLKvbdBsAcUFvr -EOcLKvbdIsZArlwl -EPCjjvbdNddTiJKd -DoDKjvbdyXhiaozL -DncLKvbdjmCLzEfo -EOcLKvbdRadElJYk -DncLKvbdjbkkQfuH -EObkKvbdXFxzUAOs -DncLKvbdxZhGFwdr -DoCjjvbdNsTugEuQ -EObjjvbdRbDdlIyL -DoCkKvbdePEsLUUS -DoCjjvbdOStVgFVQ -EPDLKvbdUtMtGLuj -EObjjvbdFjdrbhMu -EOcKjvbddeOrBwCj -DnbjjvbdxUmFRYkn -DnbjjvbdCEQBVimG -EOcLKvbdvAdZTPEh -EPCkKvbdGcjvJaij -EPCjjvbdOFETiIjd -EOcLKvbdemGWgNKL -DoCkKvbdqTsfrRkU -DncLKvbdbrcKsdKB -EPDLKvbdTAFIhBoE -DoCjjvbdKCjCqJbx -DnbjjvbdNsUWHFUp -EPDKjvbdkWWmcaxX -EPDLKvbdbKlFoNcA -DoCjjvbdkIGkefNk -EPCkKvbdXFyZtAPT -EPDKjvbdpxnhGpcx -DoDLKvbdhanbeWqR -EOcKjvbdliEUQtqa -EObjjvbdbBVeFpPw -EObkKvbdQdDApQdS -EPDLKvbdnQZyVkZC -EObjjvbdhbOcEwQq -DnbjjvbdBdPaWKMf -DoCjjvbdCTAbtGWr -EPCjjvbdEvYpQMie -EObjjvbdDxYLtUTl -EObkKvbdCTBDTfXS -EPCjjvbdmpZxvKyC -EPCkKvbdRzKITDWA -EObkKvbdemGXGmJk -EOcLKvbdIryAsNXl -DoDKjvbdkWXNcaww -EObkKvbddCTNSAUN -DncKjvbdvBDxroEh -DncLKvbdiCPDEwRR -EObjjvbdRkZGVHLT -DoCjjvbdFkFSbhNV -EPDLKvbdwjvdHzzG -DoDLKvbdqquKmkBN -EOcKjvbdsQVoJcVf -EPCjjvbdYlSEUOMN -EObkKvbdjKGIKMxS -DncLKvbdRpUGifDw -EObkKvbdEuxooljF -EPDLKvbdzitpQETU -EOcKjvbdTvLpKUAq -DoCjjvbdrSVKmkAm -EOcLKvbdEvZQPmJe -EPCkKvbdfelZnHHA -EOcLKvbdjhGlGGNk -DncKjvbdCEPaWJmG -DncLKvbdrpVnjDWG -DoDLKvbdeOeTKtUS -DoCkKvbdtbbuXVno -EObkKvbdYpleJMeR -DnbjjvbdiCPDEvqR -DoDLKvbdUslsekuj -DnbkKvbdGBPQyJzm -EPCkKvbdtbcUwVoP -DoDKjvbddxZssrFz -DncLKvbdkIGlGFmk -EPCkKvbdhuZdwRtb -EObkKvbdehLWSOQg -DoCkKvbdatafwjsh -DoDKjvbdhfjCyViu -DoCjjvbdFyUuAcxC -EObkKvbdUMWPAvPJ -EPDLKvbdxxIjBoyk -DnbjjvbdMRvlytpz -EPCkKvbdDxYLtUTl -DnbjjvbdiVZeXSUb -DoCjjvbdffMZmgHA -EPDLKvbdnPyyVkYb -EPCkKvbdZtIhyETO -DncKjvbdRECaPqDr -EPDKjvbdVrNxBeMD -DnbkKvbdKVuFdFGi -EOcLKvbdrzLosAgn -EPDKjvbdLLAgvAKZ -EOcLKvbdLYpirztf -DncKjvbdnGeXlnHZ -EOcLKvbdQdDAopdS -DnbkKvbdptTfrRkU -DoCjjvbdqGEFUVaI -DncLKvbdrDeIomvB -DoDLKvbdyOTHxSiD -EOcLKvbdRpTfjGDw -DoDLKvbdzitpPdTU -DnbjjvbdUxhTykOn -EOcKjvbdGFjSNhtR -EObkKvbdidkGuPAO -EObjjvbdVAapsQrZ -EPDLKvbdQccAopdS -EObjjvbdmozYukZC -EOcKjvbdGFjSOIsq -EPCkKvbdyzeNrHiI -DncLKvbdEOcKjvcE -DncLKvbdLFfIBaQu -DoDKjvbdtlXwBUBX -DoCjjvbdeOeTLTsr -DncKjvbdiZuGLpnG -DoCkKvbdWRnYBdkc -DncLKvbduCbtvvOo -DnbkKvbdGGKRnIsq -EOcLKvbdVTmUFkuj -EOcKjvbdFkEsDHlu -DoDKjvbdQwNcbkgc -DncLKvbdWRmwbFLc -DnbjjvbdHlBzmwRL -EPDKjvbdDncKjwCd -EObkKvbdGBPRYizm -EOcKjvbdqrVLNjaN -EObjjvbdqFceUVaI -DoCkKvbdZQmFImFR -EPDLKvbdmIctRVSB -EObkKvbdjAQHBPfj -EObjjvbdrEFIonWB -DnbjjvbdsPuoKCuf -DoDKjvbdtbbuXWPP -EPDLKvbdOStWGduQ -DoCkKvbdUQqPUuIN -EPDLKvbdwyhFewdr -EObkKvbdShyiqAAl -EPDLKvbdGZUuBEXb -EPCkKvbdHffyyXwg -EObjjvbdGBOpyJzm -EObkKvbdZirgpGaf -EObkKvbdRjxfUfkT -EPDKjvbdZHWdAPSi -DnbjjvbdVrOYBdkc -DoCjjvbdGGKSNhsq -EOcKjvbdJqZeOenF -EOcLKvbddBsNSAUN -DncKjvbdZtJJYcsO -EPDKjvbdBraDTevr -DoCkKvbdRDcApQdS -EObjjvbdGGJrNiTq -DoCjjvbdGLFTCgmV -DoCjjvbdtlXwBUAw -DncLKvbdQwNdClHc -DoDLKvbdygYlAMeX -EPDLKvbdTvMQKTaR -EPCjjvbdiMFDnVDZ -DoCjjvbdiBoDFXRR -EObkKvbdUQqOuUgm -EOcKjvbdaMkBsVNH -EObkKvbdwuNEqZMO -EObjjvbdLAkGlbXq -EObkKvbdkCkkQgUg -DncLKvbdVqnYCFLc -EPCkKvbdxVMeRZLn -DncLKvbdRXOEClHc -EObjjvbdvwMAvBWV -EObjjvbdIwsahLpp -EObjjvbdKDKCpicY -DoDKjvbdlrZUzTEJ -EOcLKvbdyYIjBpZk -DncLKvbdxsNhlqag -EPDKjvbdgPazvdXh -EPDLKvbdbKlGPNcA -DoCjjvbdqUUHSRjt -DnbkKvbdNeDsiJKd -DnbjjvbdqGEFTvAh -DoDKjvbdnUtykKRf -EPDKjvbdZtJJZDrn -DoCjjvbdmRxtysEJ -EOcKjvbdQmXbYnUz -EPDKjvbdjmCLzFGo -DncKjvbdsBfMkfkZ -EPCkKvbdFVxpPlie -DnbkKvbdZLrEUOMN -DoCkKvbdEOcKkXDE -EObkKvbdvBEYsPEh -EPDKjvbdcJMjLGXY -EOcLKvbdOYPVzcnU -DnbkKvbdsQWOjDWG -EOcLKvbdfHjvRnRH -DoDLKvbdmbKXYPOV -DncKjvbdrpWPJcVf -EOcKjvbdURROuUgm -DnbkKvbdrovOicWG -EObjjvbdLYpirzuG -DnbjjvbdGQASvgGZ -DnbkKvbdYzcFqjVy -DncKjvbdBsBCtFvr -DoDLKvbdYgXEAOri -EOcLKvbdqTsfqqjt -DncKjvbdPIAYZAYa -EOcLKvbdypnliJwA -DnbkKvbdhyuGLqNf -EOcLKvbdjhGkfGOL -DncKjvbdjblLRGuH -EPCjjvbdxwhibPyk -EOcKjvbdBhkCLIfK -DnbjjvbdJTZArlxM -DoCkKvbdRjxetgKs -EObkKvbdiUyeWrVC -EOcKjvbdwXLaWAuu -EPDLKvbdssSTZZdc -EObkKvbdcSbjtDia -DncKjvbdgGMZnHHA -DoCkKvbdatafwkUI -DncLKvbdnCKWxPNu -EObjjvbdyOShXrhc -EPCjjvbdpyPHfqEY -DoDKjvbdbUbGxKsh -EOcKjvbdypoNJKXA -EObkKvbdyTOJMrBg -DoDLKvbdiZtfLpmf -EPCkKvbdLGFgbBQu -EOcLKvbdCJLBkJFj -DnbkKvbdUxgszLPO -DoDKjvbdUQqPVVHm -EPCjjvbdijGIKNYS -EPDKjvbdCJKajhej -EPDLKvbduoTzqLPU -DnbjjvbdJTZBTMwl -EOcLKvbdLAjfmBwq -DoDLKvbdQwOECkhD -DoCjjvbdQYmAHTSK -DoDKjvbdEuyQQMjF -DoDKjvbdZdwfzhIb -EOcKjvbdyTOJNRag -DoDLKvbdbBVdfQPw -DoCkKvbdbVBfxLUI -DncKjvbdcIljKevx -EOcLKvbdhgKDZViu -EObjjvbdOTUWHEtp -DncKjvbdZRMeIldq -DnbjjvbdkHgMGGNk -EOcLKvbdZMSETmlN -EPCkKvbdjcMKpfuH -EPDLKvbdiBncFXQq -EObjjvbdJcKCqKDY -DoDKjvbdQwOEClID -EPCkKvbdRpUHJecw -DoDKjvbdZjSgogBf -DoCkKvbdEObkKvbd -DoDLKvbdDwwktUTl -DoCkKvbdSKyGVHKs -DnbkKvbdZMSETnMN -DncLKvbdiZuGLpmf -EObjjvbdjcLjpgVH -EOcLKvbdYzcFqjVy -EPCjjvbdQvnDcLhD -DoCkKvbdDihJvYKA -EPDLKvbdJqZeOenF -EOcKjvbdWXJXvDdg -DoCjjvbdznpQeCkx -EPCjjvbdjJehJmXr -DoDKjvbdmSYuZsDi -DoDKjvbdFVyPolie -DnbjjvbdULvPAvOi -DncKjvbdwzIGFwdr -DnbkKvbdOEcsiJKd -EPCkKvbdEJhJuwjA -EObkKvbdYSkaNUOx -EObkKvbddoFSkTtS -DoDLKvbdFkFTDHlu -DoCjjvbddwzTtRez -EOcLKvbdDwwlUTtM -DoDKjvbdHDjvJaij -EObkKvbdyTOIlrBg -EOcLKvbdtSqsYzFD -EObkKvbduVmwjQsA -EPDKjvbdbiMjKfXY -DncLKvbdsQWPKDWG -DncLKvbdRbEElIyL -DnbjjvbdGKeTDHlu -EPCkKvbdrpWOjDWG -EObjjvbdVwJYWEFH -EPCjjvbdvBDySoFI -EPCkKvbdZMSDsmkm -EObkKvbdqYnhHREY -EObjjvbdyqPMiJwA -DncLKvbdCTBCtGXS -EPCkKvbdfekynGgA -EPCkKvbdvvkaWBVu -DoCjjvbdGZUuAdYC -DoDKjvbdpyOgfqDx -EPCjjvbdePFTKstS -EOcLKvbdVviXudFH -EPCkKvbddZyQYZQb -DnbkKvbdUaCQrqRy -EPDLKvbdQwNdDMID -DncKjvbdUaCRTQrZ -DnbjjvbdHDkWJbKK -EOcKjvbdOTTvGduQ -DnbjjvbdssRrxzEc -EObjjvbdezuxdiTw -EOcLKvbdGLFTCgmV -EPDLKvbdUxgtZkOn -EOcLKvbdbrbjscia -DnbjjvbdjJfHimXr -EOcKjvbdjcMLQgUg -DoDKjvbdlYrqrxft -EPDKjvbdGYttaEXb -EOcLKvbdhbPDEwQq -EOcKjvbdvAcxroEh -DoDKjvbdVgxVxHYz -DoCkKvbdTqQnuVIN -DoCjjvbdrXQMCiZR -EOcKjvbdMSWlytpz -DoCjjvbdBiLCLJFj -EObkKvbdUyHtZkPO -DoDLKvbdGcjujCJj -EPCjjvbdfkGzbfAE -DoCjjvbdDoCjjwDE -DnbkKvbdqGDdsvAh -DoDLKvbdjvXNdBww -EOcKjvbdANHySvyx -DoCjjvbdeJjRvUzn -DncKjvbdqUTgRqkU -DncLKvbdEvZQPljF -DnbjjvbdSPsgKFdX -EOcKjvbdGLFScHmV -EPCjjvbdqUTgRqkU -EPCkKvbdNxOuzdOU -DoCkKvbdpfEEtWBI -EOcLKvbdDwwlTtTl -EPCjjvbdSZjITDWA -DncKjvbdQwNcblID -DnbjjvbdijGIKMwr -DnbjjvbdYpldiMdq -DncLKvbdemGXHNKL -EPCkKvbdEKHjWYKA -DoDLKvbdwXMBWAvV -DnbjjvbdQwOEClHc -DnbkKvbdbUbHYKtI -DncLKvbdCSaCtFvr -DncLKvbdEuyPpNJe -EPDKjvbdFVyPolie -DncKjvbddneSkTtS -EOcKjvbdZtJIxcsO -EOcKjvbdiGicZWJu -DncLKvbdOFDtIiLE -DoDLKvbdOSsufduQ -DnbkKvbdMfcPmQVL -EObjjvbdiUzEwSVC -DoCkKvbdCIkBkJFj -DncLKvbdYkrETmlN -EObjjvbdqZOggREY -EPCkKvbdHDkViajK -DnbkKvbdbsDLTdKB -EPDLKvbdlqxtzTDi -DncKjvbdLGFgbAqV -EObjjvbdoAKztHcn -EPDLKvbdRXODblID -DoCjjvbdIHGzYwxH -EObkKvbdNPwqVnHT -EOcKjvbdxrnImRag -EOcLKvbdiLddNuCy -DoCkKvbdkMakzEfo -EObkKvbdnPyxukYb -EPCjjvbdZdwfzgiC -EPCkKvbdnHEwmNfy -EObjjvbdySmiNRag -EOcKjvbdzeZnzdyp -EPCjjvbdJvVFdEgJ -EOcKjvbdZQldiMeR -EOcKjvbdFyVVAdYC -DncKjvbdJXsahMRQ -DnbjjvbdfNGXGljL -EOcLKvbdwWlAvAvV -DncLKvbdkIHLefNk -DncLKvbdliDtQtrB -DoCkKvbdxZgefXdr -DncKjvbdCWzchdpW -EPCkKvbdpyPHfpdY -EOcKjvbdhbOcFWqR -DnbjjvbdzjUpPdSt -DoDLKvbdZMRdUOLm -DncLKvbdVwJXucdg -EPCjjvbdWXIxVcdg -DnbkKvbdMpXpvOHT -DncLKvbdRkZGVHKs -DoDKjvbdmpZyWKxb -DoCjjvbdegkWRmpg -DncLKvbdyzeOSHhh -EPDLKvbdRECaPpdS -EPDKjvbdqvpLcJZR -DoCjjvbdRDbaPqDr -EObjjvbdRECaPqDr -EOcLKvbdsBfNLgLZ -DncKjvbdZyEKOCkr -DnbkKvbdSPsgJfEX -EPDKjvbdZRMdiMeR -EPDLKvbdDwwktTsl -EPDLKvbdLhbLpxAS -EPDKjvbdZirgpHBf -DoCkKvbdmtuZkJqf -DnbjjvbdwWkaWAuu -DnbjjvbdRDcBPqES -DnbkKvbdyzeNqgiI -EObjjvbdYkrEUOLm -DoCkKvbdmtuZkKRf -DoCkKvbdNdctIhkE -DnbjjvbdhytfLqOG -EOcLKvbddZyPwxpb -EPCjjvbdYzbeqivZ -EOcKjvbdwygfGXeS -EOcLKvbdRosfifEX -EPCkKvbdznopdbkx -EObkKvbdVBBqSqSZ -EObjjvbdQlxCZNtz -EPCkKvbdhlFDmtby -DoDLKvbdCDpAvJmG -EPDKjvbddeOrCXDK -EOcLKvbdrovOjDWG -DnbkKvbdIGfyyYYH -EObkKvbdmbKWwnmu -EOcLKvbdkDLjqGuH -EPDLKvbdqrUkNjaN -EPDKjvbduDDVXWPP -EObjjvbdZnnJFEzK -DnbjjvbdaRfCgtGL -DoCkKvbdGKdsDHlu -DncKjvbdqlyiyMHi -DoDLKvbdSLYetgLT -DnbkKvbdZQleJNEq -EOcLKvbdZLrETnMN -DnbjjvbdiUydwRuC -EObjjvbdnPzYvLYb -EPCjjvbdGYuUaEYC -EObjjvbdACqwiyiQ -DncKjvbdIHGzZYXg -DncKjvbdxrnIlqag -DnbjjvbdySmhlqag -DoCjjvbdSCEFMJZL -EObjjvbdSKxfUfjs -DnbjjvbdnUtyjjRf -DncLKvbdkyTRsZGt -DoDLKvbdWRnXbElD -EOcKjvbdjvXNcbYX -EOcKjvbddjKSWUzn -DoDKjvbdvBDxrneI -EOcLKvbddndsKtTr -DoDLKvbdZjTHpGbG -DnbkKvbdpfDdsuaI -EPCkKvbdfMfWgNJk -DoCkKvbdjJegjNXr -DoDKjvbdcTDLTdKB -EPDLKvbdwzHfFxEr -DncKjvbdfMfWgMik -DnbkKvbdrbFllGkZ -EPCkKvbdCIkCLJGK -EObjjvbduDDUvvOo -EOcKjvbdDxYMUTsl -EOcLKvbdsPvOibuf -DncKjvbdUsltGLvK -EPCjjvbdyOShYTIc -DoDKjvbduaEZSoEh -DncKjvbdLrXMzUpz -DoCkKvbdNsTufeUp -EObkKvbdLGGIBaQu -EPCjjvbdmSZVZsEJ -DncLKvbdQdDAoqDr -DoCkKvbdKCicRJbx -EPCkKvbdxwhibQZk -DoDKjvbdTvMQJsaR -DoCkKvbdYzcGSJuy -DnbkKvbdwyhGFwdr -DoCjjvbdEOcLKwDE -DoCkKvbdGGKRmhtR -EOcLKvbdrzMQTAgn -DoDLKvbdJvVFceHJ -DnbkKvbdfMfWfmJk -EPCkKvbdmajWwnmu -EPCjjvbdxrmiMqag -EOcKjvbdqUTfqqkU -EObkKvbdoAKztHcn -EObkKvbdkyTSTZHU -EPCjjvbdiCOcEwRR -DnbkKvbdGZUtaDwb -EPCjjvbdYORAXuWU -DoCkKvbdULvPAuoJ -DnbjjvbdcSbjscjB -DoDKjvbdLrXMytpz -DncKjvbdIryBTNYM -DoCjjvbdZyDinCkr -EPDLKvbdZoOJFEyj -DncLKvbdajkfOmcA -EPDLKvbdRNYCYmtz -DoCkKvbddePRawDK -EOcKjvbdbUbHYKtI -EPCjjvbdbrbjscjB -EPDKjvbdKDJcRKCx -EObjjvbdqcdiQOVa -EPDKjvbdZjTIPgBf -DnbjjvbdrSUjmjaN -DnbjjvbdEXxLsstM -EPCkKvbdFjeSbglu -DnbkKvbdLqwMytpz -DoDKjvbdUGznMXVe -EObkKvbdpstHRrLU -DoDKjvbdYTLaNUPY -DnbkKvbdGKdrbhNV -EObjjvbdRMxCZNtz -DncLKvbdDihJuwjA -EPCjjvbdOFDtJIkE -DnbkKvbdliEUQuSB -DoDKjvbdkCkkQftg -EPCkKvbdGZVVAcwb -EObjjvbdkyTSSxgU -EPDKjvbdIryBSlxM -EOcKjvbdWIXvXfxz -DoDLKvbdhfjCyWKV -DoDKjvbdNQXpumfs -DncKjvbdiMEcnVCy -EPDLKvbdxVMeRZLn -EPCkKvbdDoDKjwDE -DnbkKvbdSCEFLiZL -DoCjjvbdqYoHgQcx -EObjjvbdxZhFexFS -EOcLKvbdkDMLRGuH -EPCkKvbdVwJXvDdg -DoCjjvbdjhHLefOL -EOcLKvbdiCOcFWpq -DnbjjvbdrovOjCvG -DncLKvbdRzKHsCvA -EPCkKvbdDoDLKwDE -EOcKjvbdrNZjZLhJ -EObjjvbdTAFIhBoE -DncKjvbdlqyVZsDi -DncLKvbdjggMFenL -EPDLKvbdUsltGMWK -DoCjjvbdkyTRsZGt -EOcLKvbdrzMPsBHn -EPCkKvbddZxpYYpb -DncLKvbdGKdsCgmV -DnbkKvbdvAdYsPEh -DoDLKvbdqUUGrSKt -EPCjjvbdxnTHxTIc -EOcKjvbdZisIQGaf -DncLKvbdBhjbLJFj -DoCkKvbdJSyBTNYM -DnbjjvbdmfdwlmgZ -EOcLKvbdJcJcRJbx -DncLKvbdmoyyWLYb -EObjjvbdSKxfUfkT -EObjjvbdlAlnmALA -DoDLKvbdTlVnaVoJ -EOcKjvbdnCKWwnnV -EPCjjvbdjbkkRGtg -EPCjjvbdULuoBVoJ -EPDKjvbdwMvAMceN -DnbkKvbdznopdcLx -EPCkKvbdeuzwoizs -EPCjjvbdpssfrRjt -EOcKjvbdiGibyWJu -DnbkKvbdYSlBNToY -EPDKjvbdkVwNcbYX -DoCjjvbdsPuoJcVf -DnbkKvbdrbGNLgLZ -DnbkKvbdRbEFMJYk -EObjjvbdqceIonVa -DnbkKvbdTpqPUuHm -EOcLKvbdVviXvEEg -EOcLKvbdvAcxrndh -DnbjjvbdTYKkmzkY -EOcLKvbduDCuXVno -EPCkKvbdEvYpPlie -DncLKvbdaSGCgtFk -DoCjjvbdpfDdtWBI -DncLKvbdHDkWJbJj -DncLKvbdqZOgfpdY -EPCkKvbdFxuVBEXb -DoDKjvbdnBivwnnV -EPCkKvbdRWmcbkhD -EObjjvbdfIKvSOQg -DnbkKvbdcIlikGWx -EOcKjvbdQdDBQQdS -EPCjjvbdnPzZWKyC -DnbkKvbdZxcimbkr -DncLKvbdLFfHaaRV -DoCjjvbdYSlBNToY -DnbjjvbdKCicRKDY -EPCkKvbddneSjtUS -EObjjvbdmIctRUqa -DncKjvbdYqMdiNFR -DnbjjvbduaDyTPFI -EPCkKvbdePEsLTtS -EPCkKvbdbUagYKsh -DoDLKvbdssSSxzFD -EObkKvbdMuSrLNAX -EPDLKvbdddnqbWbj -DnbkKvbdvAcySneI -EPDKjvbdatbGxLUI -EOcLKvbddePRbWbj -DoDLKvbdijGIKNYS -EPCjjvbdNrsugEtp -EOcLKvbdxZhGGYEr -DnbkKvbdTkvPAvPJ -DoCjjvbdFyUuAcwb -DnbjjvbdJTZBTMxM -EPDLKvbdaMkCStmH -EPDLKvbdjKGHimYS -DnbkKvbdelewGlik -EObjjvbdkHgMGGOL -EObkKvbdURRPUuHm -EOcLKvbdjKFhKNYS -EPDLKvbdhyuFkpnG -EOcLKvbdRosgJecw -DoCjjvbdczYoxYqC -DncLKvbdzaAPGgCM -EPDKjvbdiUzEwSUb -DoCjjvbdKQzEneme -EObjjvbdatagXkTh -DoCjjvbdwtldqYkn -EOcKjvbdUxgszLOn -EPCkKvbdUaBprprZ -EOcLKvbdYNqAYVVt -EObjjvbdbUafwkTh -EPDLKvbdcIljLGWx -DnbjjvbdNHDPlotk -EOcLKvbdkIHMFfOL -EPDKjvbddePSCXDK -EOcLKvbdbUafxLTh -DoDKjvbdQlwaxmtz -DoCkKvbdbQHHELzd -EPDLKvbdhficZWKV -DoDKjvbdqrVLOLAm -DoCjjvbduDDUvvPP -EPCjjvbdCEQAuilf -EOcLKvbdEASIlywX -DncLKvbdRNXayNtz -EOcKjvbdVrOXaeMD -EPCjjvbdFWYopNKF -DnbkKvbdSQTfjFcw -DoDLKvbdJTZAsMwl -DoCjjvbdiCPDEvpq -DncKjvbdVwIwuceH -EPDLKvbdJvVFcdfi -EPCjjvbdcbSlrATm -DnbjjvbdqBJFAXIE -EPCkKvbdTAFJHbOd -EPCjjvbdcTCkUEKB -EPCkKvbdxwhibPzL -EPCkKvbdRpTfifEX -EPDLKvbdvAdYsOeI -DncKjvbdpxngfpdY -EPCjjvbdEXwksstM -DnbkKvbdNrsufeUp -DnbkKvbdJKEAJogE -DoCkKvbdNsUWGduQ -DoCkKvbdbrcLTcjB -EOcKjvbdiHJcZViu -EObkKvbdEztQdkcJ -DoCjjvbdliETptqa -EOcLKvbdOEdUIhjd -DoCkKvbdSKxfVGkT -EPCjjvbdIsZAsMxM -EOcKjvbdZsiIyDsO -DncLKvbduDCtwWOo -DnbkKvbdEztQdlCi -DnbjjvbdLZQjSztf -DoDLKvbdXmqAXuVt -EPCjjvbdxsOJNSCH -DoDLKvbdRadElJZL -EOcLKvbdWRnXbEkc -DncKjvbdSCEFLiYk -EPDLKvbdidkHVPAO -DoCjjvbdkClKqGtg -EPDKjvbduLxXBUAw -DncLKvbdqUTfqqkU -EObjjvbdcImKKevx -DoDLKvbdMgCpMpVL -DnbjjvbdtTRsYydc -DnbkKvbdKefHbBQu -EOcKjvbduoTzpjnt -DoCjjvbdjuwNcaww -DncKjvbdTkvPBVni -EPDLKvbdapGfdLzd -EPDKjvbdvAdZTPEh -EPCkKvbdwXLaVaWV -EOcKjvbdZoNhddyj -DncKjvbdqceIonVa -DnbjjvbdIwsbHkqQ -DoDKjvbdjFKfuPAO -EOcLKvbdbhmJkFvx -DncKjvbdDxYMUUTl -DnbjjvbdMfbpNQVL -DoDLKvbdZeXfzhIb -EOcLKvbdVAbRSpqy -DncLKvbdZxcjOCkr -EOcKjvbdyTNiNSCH -EObkKvbdiLddOUcZ -DoCjjvbddwystRez -DoDKjvbdUsmTelWK -EPDLKvbdEPCjkWcE -DoDKjvbdIwsaglQp -EObkKvbdGcjvJbKK -DoCkKvbdRzJgrbvA -EObkKvbdkxsSSxft -DncLKvbdfHjvSNpg -DnbkKvbdxsNiMqag -DoDLKvbdcImKKevx -EOcLKvbdJutfDdgJ -DoDLKvbdhancEwRR -EObkKvbdnPzYvKyC -DoDKjvbdNHDPlouL -EPCkKvbdKaKgMbXq -EOcLKvbdqUTgSRkU -EPCkKvbdZjSgpHBf -DncLKvbdHffzYxXg -DoCkKvbdFkErbhMu -EObjjvbdhancEwQq -EPDKjvbdJYUCHkpp -EPDKjvbdtkwwBUAw -EOcLKvbdiZuGMRNf -EObkKvbdrJAKElne -DnbjjvbdIHHZxwwg -EPDKjvbdkHgMGGNk -DoCjjvbdeOeSjtUS -DoDLKvbdJbicQjCx -DncKjvbdnGeXlnGy -EPDKjvbdKVtecdfi -EOcKjvbdULuoBVni -DnbkKvbdmJDtRVRa -DncLKvbdJTZAsMxM -EPDKjvbdVgxVxHYz -EPCjjvbdVBCRSqSZ -EPCjjvbdJqZdnfOF -DncKjvbdqdEiQOVa -DnbkKvbdZLqdTnLm -EOcKjvbdzHZMANFX -DncKjvbdVrNxBdkc -DnbjjvbdKkAgvAKZ -DnbjjvbdmbKWxOnV -DoDKjvbdYqMeImEq -EObjjvbdbUagYKtI -DncKjvbdQZNAHSqj -DoDLKvbdfoazvcwh -DnbkKvbdVvhwvDdg -DoDKjvbdURQoUthN -EPDLKvbdvBDyTOeI -DnbjjvbdrRuKmkBN -DnbkKvbdRbDdlIxk -EObjjvbdSCDdkhyL -DoDKjvbdSBceMJYk -DoDLKvbdwyhGGYFS -EPDKjvbdQvmcblID -DoDLKvbdaaWFGQQX -DoDKjvbdEASImZvw -EPDLKvbdnQZyWLYb -EPDKjvbdbrcLUEJa -EOcLKvbdKCicQjDY -EPCjjvbdVBCQsQqy -EPCkKvbdkaNPNALA -DncLKvbdaNKartmH -DoDLKvbdCTAbtFvr -EObjjvbddZxowxpb -EObkKvbdTpqOuUgm -DncLKvbdZQleJNFR -DnbjjvbdUVlPisaR -EObjjvbdBsBCtFvr -EPCjjvbdJutecdgJ -EOcKjvbdfNFvgNKL -DncKjvbddneSjtUS -DoDKjvbdjcMKqGtg -EOcLKvbdGdLWKCKK -EOcKjvbdRDcBPpdS -DoCkKvbdauCGwkTh -EPCjjvbdaNLCStmH -EOcKjvbdelfWgMjL -DoDLKvbdtSrSxyeD -EPCjjvbdemGXGmKL -EOcLKvbduDCuXWOo -DncKjvbdauBfxLUI -DnbjjvbdIHGyyXwg -EPCjjvbdEvYooljF -EObjjvbddneTLUTr -DoCjjvbdySmiNRag -DoDKjvbdqUUHSRjt -EObjjvbdczYpXxpb -EObkKvbdaMkBrtlg -EPDLKvbdnUuZkKRf -DoDKjvbdcScKsdJa -EPCjjvbdsrrTYydc -EObjjvbdZoNiFEyj -EPDLKvbdmttyjirG -EOcLKvbdYqMeIleR -DoDKjvbdKWUfEFGi -EOcLKvbdcyxoxYqC -EObkKvbdNeETiJLE -EPCkKvbdUMWOaVoJ -EPCjjvbdWSOXbElD -EPCkKvbdNHCpNPuL -EObkKvbdEuyQQNJe -DoCkKvbdmgExNOGy -EOcKjvbdZtJJYcsO -EOcLKvbdMpXqVnGs -EObjjvbdbsDLTcjB -EPCjjvbddoFTLUTr -EOcLKvbdaNKbTVNH -DoCjjvbdJcKCpicY -DoDLKvbdsBfMlGjy -EPDKjvbdqiAJdlne -EObkKvbdKefHaaRV -DoDLKvbdbiNJjewY -EPCkKvbdVTltFlWK -DoDLKvbdbBWFGPpX -DncLKvbdVZITzKoO -EPCjjvbdnUtzLKSG -EPCkKvbdBraDTevr -EPDLKvbdTkunaWPJ -EObjjvbdZRNFJNEq -DnbkKvbdxUldqYkn -EPDLKvbdtvOYJpsA -EOcLKvbdJvUfEEgJ -DoDKjvbdlYrqsZGt -DncKjvbdePFSjstS -EPDLKvbdqquLOLAm -DoCkKvbdSPtHKFdX -DoCjjvbdZyDjNcMS -EPDKjvbdTlVnaWPJ -EPCjjvbdZirgpHCG -EObkKvbdNQYQvNfs -DncKjvbdqqtjnLBN -DoDKjvbdjJehJmYS -DncLKvbdrNZixlHi -EPDLKvbdMfcPlpVL -EPCjjvbdUWMQJtBR -DoCkKvbdfMfWfljL -DnbjjvbdaRfDHtFk -DncLKvbdiMFDnVDZ -DoCkKvbdXrkaNToY -DoCjjvbdZLqdUNlN -EObkKvbdRjxetfkT -EOcLKvbdmgFXmOGy -EPDKjvbdUQpntuHm -DoDKjvbdpstHRrKt -DncLKvbdHkazmwRL -EObjjvbdpfEFUWAh -DoDKjvbdZyEJnDMS -EObkKvbdiBoCeXQq -DoCkKvbdeATplxKG -DncLKvbdWRmwadkc -EPDKjvbdUQqPUthN -DoCjjvbdnBjXXnmu -EPDLKvbdZjTIPfbG -EPCkKvbdWHwuxGxz -DncKjvbdYpmFJMdq -DoDKjvbdhbPDFXRR -DnbkKvbdBdQBVimG -DoCjjvbdmIctRUqa -EPDKjvbdZyDjNbkr -EOcLKvbdQYmAHSrK -DnbjjvbdqYoHgQcx -DncKjvbdqiAKFMoF -DncKjvbdOTUWHEuQ -DoCjjvbdVTmTfLuj -DoCkKvbdddoRbWcK -EPDKjvbdIsYaTNYM -EObkKvbdRosfiedX -EOcKjvbdcTDLUEKB -EOcLKvbdmozYujxb -DnbjjvbdZirgogBf -EPCjjvbdKWUeceHJ -DnbjjvbdZoOJEdzK -EPDKjvbdEJhKVwjA -DoCkKvbdfpBzvcxI -DoDKjvbdlrYtysDi -DoDLKvbdZjSgofbG -DoCjjvbdUtMtGMVj -EPCjjvbdGGKRmiTq -EPCkKvbdQvnDcMID -DnbkKvbdKCjCqJbx -EPCkKvbdYpleImEq -DoDLKvbdjKFgjNXr -DoDLKvbdZshhxcrn -EPDLKvbdnVVZjjRf -EOcKjvbdqdFIpNua -DnbjjvbdVwIxVdEg -DoCkKvbduaEZSneI -DnbkKvbdznoqFClY -DoCjjvbdoAKzsgcn -EOcKjvbdSLZGVGkT -DncKjvbdiCObeWqR -EPCjjvbdWRnXbEkc -EObjjvbdRotGiecw -EObkKvbdKDKDQibx -DnbjjvbdlYsRsYft -EOcKjvbdUaBqSprZ -DoCjjvbdhkdcmuDZ -EOcKjvbdjgflFfNk -DoCjjvbdGKdrcINV -EOcLKvbdEJgjVxKA -EObkKvbdSxKkmzkY -DnbjjvbdsZkosBIO -DoCjjvbdBvzchePv -EObkKvbdGYtuBEXb -EPDKjvbdiLeENtby -EPCkKvbdRNXbYnUz -EObjjvbdfHkWRnQg -EObkKvbduDDVXWOo -DoCkKvbdJbjCqJbx -EPDLKvbdpedFTvBI -DncLKvbdjJegjMwr -EPCjjvbdUxgszLPO -EObkKvbdxmrhXsJD -EOcKjvbdJSxaSmXl -EPDLKvbdfNFwGmJk -EPDKjvbdsrrTYydc -DncKjvbdhgKDZVjV -EPCkKvbdZMRctNkm -DoDKjvbdezuyEhtX -EPCkKvbdEXwlUTsl -EPDLKvbdeAUQlxKG -DoDKjvbdZnmiEdyj -EObkKvbdrzMPraIO -EPCjjvbdxxIibPyk -EPCkKvbdKfFgbBRV -DoDKjvbdyzeORhIh -DnbkKvbdbAvFGPpX -DncKjvbdZoOJEdyj -DnbkKvbdrJAJdmOe -DoDKjvbdKVuFdEfi -EOcKjvbdqdFJQNvB -EPDLKvbdOEctIhkE -EPDLKvbdvBEYsOeI -DncKjvbdHELVjBjK -DncLKvbdZshhyDsO -EPDKjvbdGdKuibJj -DoCkKvbdEYXkstUM -DnbjjvbdJpyeOfNe -EPDKjvbdzoPpdbkx -DoCkKvbdMSXMytpz -DncLKvbdqZOggQcx -DoDKjvbdmuUyjirG -DnbkKvbdNVSqkNAX -DncLKvbdRotHJfEX -EOcKjvbdZyEJnCkr -EPDLKvbdyYJKBpZk -DnbkKvbdxmrgxTJD -DnbkKvbdhaoDFWqR -DncKjvbdbhmJjevx -EObjjvbdSKyGVGjs -DnbjjvbdSKxfVHKs -DnbjjvbdqdFIomua -DnbkKvbdkHflGGOL -DoDLKvbdqGDeUVaI -EObjjvbdjmBlZeHP -EPCkKvbdmttykJrG -DncLKvbdRXOEDLgc -DoDLKvbdhaoDFWqR -DoDKjvbdvvkaWAuu -DoCkKvbdbhmKKfWx -EObjjvbdSBdFMJZL -DnbjjvbdnUuZjjSG -EPDLKvbdliDtQuSB -EOcLKvbdsCFmMGjy -DnbjjvbdtunXjQsA -EObkKvbdkCkjqHUg -EObjjvbdDoCkKvbd -DnbkKvbdiZuFlROG -EOcKjvbdRNYCZNtz -EOcLKvbdxUmEpxlO -EPCkKvbddePSBwDK -EOcLKvbdauBfxKsh -DoCjjvbdtkwwBTaX -EObjjvbdmgEwmNfy -DnbjjvbdOStWHEuQ -EPCkKvbdGLFTChNV -EPCkKvbdKDJbpjDY -DoDLKvbdnPzZVjxb -DoCjjvbdFVyPomJe -DncLKvbdACqwizIp -EPCkKvbdZirhQGaf -DncKjvbdtTRsZZeD -EObkKvbdLBLHMbYR -EOcLKvbdrNZjZLgi -EObjjvbdTXkLmzkY -EPCkKvbdBsAbsfXS -EOcKjvbdeATpmXif -DoCkKvbdMSWmZuQz -DncLKvbdVTmTfMVj -DoDLKvbdZxdKODMS -EPDKjvbdZjShPgCG -EPDLKvbdxVMdpxkn -EPDLKvbdcSbjsdKB -EPDLKvbdiifIJlwr -DoDKjvbdKQydoFnF -EObkKvbdegkWRmpg -EObkKvbdiBncFXQq -DoDLKvbdNdctJJLE -EOcKjvbdUyHszKnn -EOcLKvbdSQUHKFcw -EObkKvbdUaBqSprZ -DoCkKvbdSCDeLiZL -EPCkKvbdKDKCpjCx -EPDLKvbdwygfFweS -DoDKjvbdiVZeWqtb -DoCjjvbdMRwMyuQz -DoCjjvbdsCGNLfkZ -DoCkKvbdmRxuZsEJ -EPCkKvbdkDMLRGtg -EObkKvbdGdKuibJj -EPCkKvbdePFTLUTr -EOcKjvbdXrlAlsoY -DoDLKvbdZjTHogBf -DnbjjvbdZirhQGaf -EPCkKvbdFVxooljF -DoCkKvbdbKkeoNcA -DoDKjvbdqYngfqEY -EPDLKvbdrWokcJYq -DoCkKvbdMowqVnHT -EPCkKvbdqqtjnKaN -DoDLKvbdiCPDFWqR -DoDLKvbdeJiqutzn -EObkKvbdqcdiPmvB -EPCjjvbdMgComQUk -DoDLKvbduVnYKQsA -DnbjjvbdjhHLfFmk -EOcKjvbdVvhwvEEg -DnbkKvbdZtIhyESn -DncLKvbdznopeClY -EPCkKvbdwtldqZLn -EOcKjvbdeEnrBwDK -DoCkKvbdkxrqsZHU -DoDKjvbdijGHimYS -DncLKvbdfNGWgMjL -EOcKjvbdmbKWxOnV -EPCkKvbdhtzEvrVC -DoDLKvbdhfibyWJu -DoCkKvbdXrkaMsoY -DoCkKvbdzoPpdbkx -EPDLKvbdSLYeuGjs -EOcLKvbdqlyixlIJ -EObjjvbdnVVZjiqf -EOcLKvbdyNrhXriD -DoCjjvbdRjyFtgLT -EOcLKvbdkyTRryHU -EPCjjvbdrykpTBIO -EObjjvbdlqxtzSdJ -EObjjvbdcarmSATm -EOcKjvbdXsLaNToY -EOcKjvbdlqxtysDi -EOcLKvbdaMkCStmH -DncKjvbdbAvFGPow -EPDLKvbdTulQKTaR -DncKjvbdXGYzUAOs -DncKjvbdezuxeItX -DnbkKvbdrykpTBIO -DoCkKvbdxnShXsIc -DoDLKvbdEPCjkXCd -DnbkKvbdIxUBgkpp -DnbkKvbdBiKbKhfK -DoDKjvbdKNADygVB -EObjjvbdADRxKZiQ -EPCjjvbdMfcQMotk -EObjjvbdSBcdkhxk -EPDKjvbdNrtVgFVQ -EPDKjvbdZMRdTnLm -EObkKvbdehKvRnQg -DoCkKvbdliETptqa -DoDLKvbdEXwktUUM -EObjjvbdBiLBjiFj -EOcLKvbdRkYeuGjs -EOcKjvbdmttzKjRf -EObkKvbdxrmhmRbH -DnbkKvbdyXiJaoyk -EObkKvbdxmrgwsIc -DoDLKvbdiZtfMQmf -DnbkKvbdpxoHfpcx -EObjjvbduaEZTOdh -EObkKvbdqqtkNkAm -DoDKjvbdxmrgxTIc -DncLKvbdMgColpVL -EPCkKvbdZnnJEeZj -EPCjjvbdVYgszKoO -EPCkKvbdBcpAuilf -EObkKvbdlhdUQuSB -EObkKvbdMIbLpxAS -EPCjjvbdnVUyjirG -DoDKjvbdKRZeOenF -DnbjjvbduCbuXWPP -DnbjjvbdssRsYydc -EPCkKvbdlhctQtqa -DoCkKvbdsQVoJcVf -EObjjvbdegkWSNpg -DoDLKvbdOAJTUKSA -DoDLKvbdliEURVSB -DoDKjvbdxsNhlqbH -DnbjjvbdOSsvGdtp -EPDKjvbdaaVeGPow -EObjjvbdNeETiIjd -DnbkKvbdJKEAJpHE -EPCjjvbdANIYsWzY -DoCjjvbdjvWmdCXw -EPDKjvbdrouoJcVf -DnbjjvbdiUzFWquC -DnbjjvbdFxtuBEYC -DnbjjvbdRkYfVHLT -EObjjvbdQwNccMID -DoCjjvbdXsMAmTnx -DoCjjvbdjJfIKMxS -EOcLKvbdbiMikGXY -DoCjjvbdQdDAoqES -EPCkKvbdVwIxVcdg -EOcLKvbdCEQAvKMf -EPDLKvbdzROmJKXA -EPDLKvbdZLrDsnLm -DncKjvbdjggMGFmk -DnbkKvbdddnrBvcK -DnbjjvbdpecdsvBI -EPCkKvbdijFgjNYS -EOcLKvbdUaBqTQqy -DncKjvbdkHgMFfNk -EObkKvbdZGvdAPSi -DnbjjvbdqUTgSRjt -DoDLKvbdqvpLcIyR -DncLKvbdLqvlytpz -DnbkKvbdKDJbpjCx -DoCjjvbdlqyUyrci -DnbkKvbdUQqPUuIN -EObkKvbdTlVnaVni -EOcLKvbdNdcshiLE -EObkKvbdkDMLRHUg -DncKjvbdIxTbILpp -EPCkKvbdePFTKssr -DnbjjvbddeOrCWcK -DnbkKvbdatbGxLTh -EObkKvbdqlzKZLgi -EPCjjvbdOTUVgFUp -EOcLKvbdpfEFTvAh -DncLKvbdZnnIdeZj -EObkKvbdZxdKODLr -DoDKjvbdjggLfGNk -EPCjjvbdRDcAopdS -DncKjvbdlZTRryHU -DncKjvbdZshiYdSn -EPDKjvbdatbHYLTh -EPDKjvbdLAjfmCXq -EPDKjvbdOFEUIiLE -DncKjvbdxVNFQxlO -DoCjjvbdrafNLfkZ -DoCjjvbdGFiqnJTq -EPCkKvbdUsmUFlWK -EObkKvbdLBLHMbXq -EPCkKvbdtlYWaUBX -EPCjjvbdSPsfjGEX -EObjjvbdIjEAJogE -DoDLKvbdNHCpNQUk -DncLKvbdYkqdUNkm -DoCjjvbdqquKmkBN -DnbjjvbdEuyQQMjF -EOcKjvbdURRPUthN -EObjjvbdmoyxvLYb -EObkKvbdGYtuAdYC -DnbjjvbdZeYGzhJC -DoDLKvbdCgLfHAzc -DoDLKvbdhuZeXSUb -DoCkKvbdjlbMZdgP -DoCkKvbdemGWgMjL -EPCkKvbdxxJJaoyk -EPDLKvbdqGEEsuaI -EObkKvbdEKHjVwjA -EOcKjvbdiBoDFWpq -EPCkKvbdffLzNfgA -EObjjvbdDoCjkXDE -EPDKjvbdhficZWJu -DoCjjvbdWWiYVdFH -EPCkKvbdKQzFOenF -DoCkKvbdmbJvxPOV -DnbkKvbdtAHQhAAr -EPDLKvbdmSYtzSci -EPDLKvbddeOqavcK -DoCjjvbdCEQBVjMf -EPDLKvbdlYrqsYft -DnbkKvbdJSyBTNXl -EPCjjvbdcbSmSATm -DoDKjvbdfNFwGmJk -DoCkKvbdGLErbhNV -EObkKvbdiZuFlQnG -DnbjjvbdxUmEpxlO -EPDKjvbdUWMPitBR -EPDKjvbdrafNLfjy -EPDLKvbdrWolDJZR -EObjjvbdhbPDFXQq -DncLKvbdqrUkNjaN -DnbkKvbdBiLCKhej -DoDKjvbdSCEFMIxk -DoDLKvbdffLzNgHA -EPCkKvbdZLqcsmkm -DnbkKvbdZMSEUOMN -DnbjjvbdzaAPHHCM -DnbjjvbdCIkBjhfK -DoCkKvbdZirgpHBf -DnbjjvbdIwtBhLpp -EObkKvbdeOeTLUTr -EObkKvbdUxgszLPO -EObkKvbdhzVGLqOG -DnbjjvbdOTTufdtp -EOcKjvbdZRNEhleR -EPCjjvbdKyRKSzuG -DoCkKvbdZtJJYcsO -EOcLKvbdemGXGmKL -EPDKjvbdJXsahMQp -DoDLKvbdhbObeWqR -EObjjvbdFVxpPljF -EOcKjvbdaNLBruMg -DoCjjvbdpyPIGpcx -EOcLKvbdZMRcsmkm -EOcLKvbdnGeXmNgZ -DoDLKvbdjlalZeGo -DoDLKvbdaSGDHtGL -EPCkKvbdCTAbsewS -EPCjjvbdZjSgofbG -DnbjjvbdJutecdfi -EPCkKvbdIryBSmYM -DoCjjvbdfekzOHHA -DnbkKvbdREDAoqES -EPCjjvbdtTSTYzEc -EPCkKvbdmoyyVkYb -EObkKvbdmfdxMnGy -DoCkKvbdwuNFQxkn -DncKjvbdsBelkfjy -EPDLKvbdQvmdDLhD -EPDKjvbdBhkCLJFj -DoCkKvbdeJiqutzn -EOcLKvbdqTsfrSKt -DoDLKvbdakLfOmcA -DncKjvbdKaLHMawq -EPCkKvbdznopdcMY -DoDKjvbdZtJIyDsO -DoDLKvbdsQVnjCvG -DncKjvbduDDUvuno -DoCkKvbdJYUCHlQp -DnbkKvbdnBiwYPNu -EObjjvbdlYrqryHU -EPCjjvbdqcdiPnWB -DoCjjvbdUQpoUthN -EPDKjvbdsZlQTAhO -EOcKjvbdtbbtwWOo -EPDLKvbdJuuGDdgJ -EOcKjvbdjggMGGOL -EPDLKvbdHffyxwxH -EOcLKvbdSCEElIxk -EObkKvbdIwsbHkqQ -EPDLKvbdjbkjqHUg -DnbjjvbdnQZxujxb -EPDKjvbddePRbWbj -DoCkKvbdhtydwRuC -DoDKjvbdCDoaWKMf -EOcKjvbdRjyGVGjs -EObjjvbddCTNSATm -EOcKjvbdZLrETmlN -EPDKjvbdlrZUysDi -EOcLKvbdwtmFRZMO -EPCjjvbdtTRrxydc -EObjjvbdeFPSBvcK -DoCkKvbdwuNFRZLn -DnbjjvbdhytfLpmf -EPCkKvbdrykpTAgn -EObkKvbdRDcApRDr -DoCjjvbdZnnIeFZj -EOcLKvbdePErkUTr -DoDLKvbdrbGNLgLZ -EObjjvbdVZIUZjoO -DncLKvbdzHYlAMeX -DnbkKvbdbsDLTcia -EPCjjvbdOSsufdtp -DncKjvbdpstHSSLU -DncKjvbduDDVWuoP -EPDKjvbdiMEdNuCy -EOcKjvbdtbcVWuno -DoDKjvbdqUTgRqjt -DncLKvbdZyDjNcLr -DoDLKvbdRWmdDLgc -DncKjvbdZLqdUOMN -DoDKjvbdijGIJlwr -EObjjvbduMYXBUAw -DoCkKvbdHDkWJajK -DoCjjvbdRpTfifEX -DoCjjvbdUyHszKnn -EPDKjvbdqZPIGpdY -EPDKjvbdRWmdCkhD -EObkKvbdsrrSyZdc -EOcKjvbdYlSDtNlN -DncKjvbdbKkennDA -EPCkKvbdiZuGMQmf -EPCkKvbdEztQeLbi -EPCkKvbdaRebgsfL -DoCkKvbdBcpAuilf -EOcKjvbdyNsIYShc -EPCjjvbdcIlijewY -DoCjjvbdmbKXXoOV -DncLKvbduDCtwWPP -EPDKjvbdnCJwXoOV -EPCjjvbdjcLkQgUg -DnbkKvbdtcCtwVno -DncKjvbdGFjRmiUR -DncLKvbdrWpLcJYq -DncLKvbdKWVGDdfi -EPCkKvbdnUuZkJrG -EPCjjvbdiCPCeWqR -DncKjvbdEYYMUUTl -EObjjvbdrpWOicWG -DoDKjvbdFejSOIsq -DnbjjvbdqiAJdmOe -EOcKjvbdUyITzKnn -DoDKjvbdfMfWgMjL -DnbkKvbdXrkaMtOx -DoCkKvbdKefIBaRV -EPCjjvbdyTNhlqbH -EPCjjvbdtlXwBUAw -EOcKjvbdRosfjFdX -DoCjjvbdYpldiMeR -DnbjjvbdwzIFexFS -DncKjvbdSCDeLhyL -DncLKvbdrzLpSaHn -DncKjvbduCcVWuoP -DoDLKvbdatagXkTh -DnbkKvbdsCGMlGkZ -EPCkKvbdkWXNdBww -DncKjvbdJcKCpjCx -EOcKjvbdNxPVzdNt -EPCkKvbdKRZeOfOF -DncLKvbdcIljLGXY -EPDLKvbdVhXuwfxz -DoCjjvbdaoffckzd -EOcKjvbdLhbLpxAS -DnbjjvbdnHExMmgZ -EObjjvbdbhljKfXY -DnbjjvbdkDLkRGuH -EPDLKvbdfHkWSORH -EObjjvbdzoPqFClY -DncKjvbdznopdbkx -EObjjvbdnUtzLKRf -EPCkKvbdZQldiMeR -DoDKjvbdFjeScHmV -EPDKjvbdEOcLKwCd -EPDKjvbdyqOmJKXA -EOcKjvbdSQTfiecw -DoDLKvbdDoDLLXDE -DoDKjvbdhlEcmuDZ -EObjjvbdfHkWRmqH -DnbkKvbdIGfzYwwg -DncLKvbdUWMPjUAq -EPDKjvbdkHflGGOL -DnbkKvbdnPzZVjyC -EPDLKvbdSBceLiYk -DncLKvbdUtMsfLvK -DnbkKvbdbrcLTdJa -EObkKvbdIwtCHkqQ -EPDKjvbdtbcVWvPP -EObkKvbdtbcVWuoP -DoDKjvbdKVtfEFGi -EPCjjvbdMRvlytpz -DoDLKvbdwuMeRYlO -EOcKjvbdlhdTqVRa -EPDKjvbdiGjCyVjV -DnbjjvbdrDeJQNua -DoDKjvbdrbFmMHKy -EOcKjvbdfHjurNpg -DnbkKvbdZRNFJMeR -EOcKjvbdqFdEsvBI -DnbjjvbdZirgogCG -DoDLKvbdDncKjwDE -DoCkKvbdjhGlFfOL -EObjjvbdmaivxOnV -EObkKvbdKkAhWAJy -EOcKjvbdNrtWHEuQ -DnbkKvbdFkFTChMu -EObkKvbdeOdrjstS -EOcKjvbdIwsbHlQp -DoCkKvbdeATpmXif -EOcLKvbdKaKgMaxR -EObkKvbdUGznLvvF -DnbkKvbdbLMGPODA -EObjjvbdTkvOaVoJ -EOcKjvbdsQVoKDVf -EPDKjvbdznopdcLx -DoDLKvbdpfDdsvAh -DncKjvbdrDdhpNua -EOcLKvbdhficZVjV -DncKjvbdFxuVBEYC -EPDKjvbdzjVQQETU -EObkKvbdKRZePGNe -EObjjvbdDncLLXDE -EOcLKvbdYkqctNkm -DoDKjvbdtvOYKRTA -DoCkKvbdmajWxPNu -DncKjvbdIjEAJofd -EPCkKvbdiCPDFWqR -EOcLKvbdIHHZxwwg -EOcKjvbdYpmEiNFR -EOcLKvbdQmYCZNtz -EOcLKvbdVYhTykPO -EPCkKvbdJKEAKPfd -DoCjjvbdRkYfUfjs -EPDLKvbdlZTSTZGt -DoDLKvbdNGbpNQVL -DoCjjvbdvAdZTOdh -EPCjjvbdliDsqUqa -EPDKjvbdSPsfiecw -EOcKjvbdYlRcsmkm -DnbkKvbdwXMAvBVu -EPCkKvbdRjxfVGjs -EOcLKvbdCIkCKiFj -DoCkKvbddxZssrFz -EOcKjvbdREDApRES -EOcLKvbdTpqPVVIN -EObjjvbdaaWEeoow -EOcKjvbddeOrCXCj -EOcLKvbdAMgySvyx -EPDLKvbdNPwqVnHT -EObkKvbdwuMeRYlO -DoCkKvbdTkuoAuoJ -EPDKjvbdmJDspuRa -EPCjjvbdNHCpNQVL -DncKjvbdGcjvKBij -EOcKjvbdbQHHELzd -EPDKjvbdPxmAGrqj -EPCjjvbdRbDdkiYk -EPDLKvbdTAFJHand -DoDKjvbdqmZjZMHi -EObjjvbdtSrTYzFD -DncLKvbdhlEcmtby -EObjjvbdmJEUQuSB -DncKjvbddndsKstS -EPDLKvbdmgFYNOGy -DnbjjvbdSCEElIyL -DncKjvbdmaivxOmu -DoDKjvbdFVyPomKF -DnbkKvbdMpXqWOHT -EObjjvbdKefICBRV -EObjjvbdqGDdtWBI -DnbkKvbdCJLCLIfK -EObkKvbdLqwNZtpz -DoDLKvbdiifHjMwr -DoCkKvbdddoRawDK -DncKjvbdbrcKscjB -DnbjjvbdrSVLNkAm -DnbjjvbdffLynHHA -EObkKvbdTAFJHbPE -DncKjvbdDncKkWcE -EOcLKvbdrouoKDVf -EOcLKvbdZisIPfbG -EOcLKvbdiGicYuiu -DoDLKvbdVgxWXfxz -DoCkKvbdffMZmgHA -EObjjvbdWfZZtAPT -EPDLKvbdEzsqElCi -DoCkKvbdYSlAlsoY -EPDLKvbdFWYpPmKF -DoDKjvbdkNCMZdfo -EPDLKvbdehLWSOQg -DnbjjvbdxxJKCPyk -EOcLKvbdMfcQMpVL -EOcLKvbdnVVZkKRf -EObjjvbdczYoxZQb -EPCkKvbdSQUGiedX -DoDKjvbdeuzwpJzs -DoDLKvbdqZPHfqDx -DoCjjvbdKeehCBQu -DnbkKvbdADSYJyiQ -DoCjjvbdFkFTDHlu -EPDKjvbdZoOJEdzK -EPCjjvbdZjTIQGbG -DncKjvbdZHWdAOri -EPCjjvbdeXystRez -EObkKvbdIxTagkpp -EObjjvbdxZgfFxEr -DoDLKvbdjhHLfGNk -EObkKvbdTfznMWue -DoDLKvbdOSsufeVQ -DncKjvbdVUNTelWK -EPCjjvbdZQmFImEq -DnbjjvbdkClLQftg -DnbjjvbdRXNdDLhD -DncKjvbdTqQoVUgm -EPCjjvbdNQYRVmgT -DoDLKvbdnUuZjiqf -DoDKjvbdbsCjsdJa -EOcKjvbdFkEsDINV -DoDKjvbdyOTHxSiD -EOcKjvbdkMbMZdgP -DnbkKvbdeEnqavcK -DoCkKvbdxZhFfYEr -DncKjvbdNPxQunGs -EOcLKvbdOYOuzdNt -DncKjvbdJbicRKDY -DncKjvbdjAQHAofj -EOcKjvbdWWiYVcdg -DnbjjvbdjFKftoAO -EPCkKvbdTXkLmzjx -EPCkKvbdWSNxBeMD -DoCkKvbduMXwBTaX -DoDLKvbdLBKfmBxR -DoCjjvbdEObjjwDE -EPDKjvbdTlVnaVoJ -DoDLKvbdhgJcZViu -EObjjvbdatbHXjtI -EOcLKvbdZeXfzgiC -EPCkKvbdeFPRbXCj -EPCkKvbdZQleJMdq -DnbjjvbdUWLojUAq -EPCjjvbdFaOpyJzm -DnbkKvbdANIYrwZx -EPCkKvbdbBWEeopX -DoDLKvbdczYpYYpb -EPCkKvbdbVBfxLTh -DoDKjvbdLBKflawq -DoCkKvbdyOSgxSiD -EPDKjvbdkDLkQgVH -EObkKvbdjmBlZdfo -EPDKjvbduoTzqLOt -EOcLKvbdaRebhUFk -EPDKjvbdatbGwjtI -EOcLKvbdCIjbLIfK -DncKjvbdkIGkeemk -DncKjvbdxVMeRZMO -EOcKjvbdRXODcMHc -DnbjjvbdqquLOLAm -DoDKjvbdDHLfHAzc -DoCkKvbdnVVZkKRf -DoDLKvbdGcjvJbKK -DoCjjvbdzoQRFDLx -DoDLKvbdmuUzLKRf -EPDLKvbdtumwiqTA -EOcKjvbdmJDsptrB -EPCjjvbdIGgZxwwg -EPDLKvbdxLXDgzzG -DnbkKvbdQwNdCkhD -DnbjjvbdcasNSAUN -EPCkKvbdTulQKTaR -EOcKjvbdhgJbyVjV -DoDLKvbdKVteceHJ -DnbjjvbdHgGzYwxH -EPCjjvbdxnSgxTJD -EPDKjvbdyYJKCPzL -EOcKjvbdOFDtJJKd -EObkKvbdRadEkhxk -DoCkKvbdiifHjNXr -DoCjjvbdnUtyjirG -EObkKvbdJpydoGNe -DoDKjvbdZLqctOLm -DnbkKvbdsBfMkfkZ -EOcLKvbdOStWGeVQ -EPDLKvbdijGIJmYS -DoDLKvbdxxJJbQZk -DncKjvbdHbLydzAD -EOcLKvbdyTNiMqag -EPDKjvbdMgComQVL -DoDLKvbdzitoocsU -EPDKjvbdsBfMkfjy -DoCkKvbdFyUtaEYC -DoDLKvbdJKEAJpGd -DoCkKvbdygZMAMeX -EPCkKvbdJqZdoFnF -DnbkKvbdiBnbdvqR -EOcLKvbdSQUGjFdX -DnbkKvbdmSYtzTEJ -DoCjjvbdehKvSOQg -EOcLKvbdGckVibJj -DncKjvbdhficYvJu -EPDKjvbdwuMeRYkn -EOcLKvbdFejSNiUR -EPCjjvbdOFEUJJLE -DnbkKvbdXsLaMtOx -EPDKjvbddZyPxYpb -EPCkKvbdhzVFkqNf -DoDKjvbdOEdUIiLE -EPCkKvbdnGeXmOHZ -EObkKvbdiMEdNuCy -DoDLKvbddoFTLTtS -EObkKvbdIxTbHlQp -DncLKvbdZRMdhmEq -DoDLKvbdZnmheEyj -EPDKjvbdKeegbApu -DncLKvbdNVTSLNAX -EOcKjvbdKDJbqKCx -EPCjjvbdFfKSOIsq -EPCjjvbdxnShYSiD -EOcLKvbdOStWHFVQ -DncLKvbdsPvOicWG -DnbjjvbdxnTHwsJD -DoDKjvbdLAkGmBwq -DoCkKvbdwMvAMceN -EOcLKvbdmRyVZsDi -EPCkKvbdmpZyWKyC -DoDLKvbdrykpTBIO -DoCjjvbdVgwvYHYz -EPDLKvbdTvMPjUBR -EOcLKvbdgFkzOGgA -DnbkKvbdVBBpsRRy -DnbjjvbdRzKISbvA -EObjjvbdxnTIXsJD -EObjjvbdZoOJEdyj -EPCjjvbdHDjuibKK -EPCjjvbdezuxdiUX -EOcKjvbdYTMAmToY -EObjjvbdJYTbILpp -DoDKjvbdkClLRHUg -EPDKjvbdTkvPAvPJ -EObkKvbdeAURNXjG -DncLKvbdTukpKUBR -DoCjjvbdcTDKsdJa -DoDKjvbdBsAcUGXS -EObjjvbdDoCjjvcE -EOcKjvbdtlYWaTaX -DnbjjvbdRDbaPpcr -EPCjjvbdrylPsAgn -DoCkKvbdOhAYZAYa -DnbjjvbdiUydwSVC -DoCjjvbdwzIFfYFS -DoCkKvbdZshiZDrn -DoCkKvbdZoOIddyj -DncKjvbdpssgSSKt -EPCjjvbdrSUkNkBN -EPDKjvbdjJfIJlxS -EOcLKvbdxVNFRYkn -DoDKjvbdWWhwvEFH -DncLKvbdRDcBQQcr -DnbkKvbdliETpuRa -EPCjjvbdZRMdiMeR -DnbkKvbdiMEdOVCy -EPCjjvbdznpREbkx -DoCkKvbdwzIFexFS -DnbjjvbdmSYuZrdJ -DoDLKvbdCWzchdov -EPDLKvbdpfEFTvAh -EPDLKvbdyOTIYTIc -DncKjvbdNQXqVnHT -DoDLKvbdCgMFgAzc -EOcKjvbdIwtBgkpp -EPDKjvbdRjyGUfjs -EObjjvbdACqwjZiQ -DoDKjvbdpstGrSKt -DnbkKvbdnGdwmOHZ -DncKjvbdiZtfLpnG -DoDLKvbdaSGCgtFk -DoCkKvbdFfJqnIsq -EPCkKvbdkNCLzEgP -EOcKjvbdFeirOJTq -EOcLKvbdUtNUGMWK -EObkKvbdSQUHJfEX -EPCkKvbdqquKmkBN -DnbjjvbdbhmKKfXY -DoCkKvbdIsYaTNXl -DoCjjvbdZoNheFZj -EOcLKvbdBhjbLIfK -EOcKjvbdatafwjsh -DoCjjvbdkxrrSyHU -EPDLKvbdSCEElIxk -EOcKjvbdfMevfmKL -EPCjjvbdMJBlRYAS -DoCjjvbdSxKkmzkY -DnbkKvbdkNCLydgP -EObkKvbdkxsSTZHU -DoCjjvbdRpUGiedX -EOcKjvbdjblLRGuH -EObkKvbdyTNiMrCH -DnbjjvbdZeXfzhJC -DoDKjvbdZxdJmblS -DncKjvbdOStWHEuQ -DoCkKvbdyNsHwsIc -EPDKjvbdkxrqryHU -EObjjvbdZLqctNlN -DoDLKvbdxnSgxShc -EPDLKvbdnBjWwoNu -DoDKjvbdkIHMGGOL -EObjjvbdqUUGrRkU -DncLKvbdRjyGVHKs -EPDKjvbdhfjCyWJu -EPCkKvbdHELVjBjK -DncKjvbdgQBzvcwh -DoDLKvbdVAaqSpqy -DoCkKvbdySnJNSBg -DoDLKvbdpeceUWAh -DncLKvbdaRebgsfL -EOcKjvbdZLqctNlN -EObjjvbdtbbtvvPP -DoCkKvbdZMSDtNlN -EOcKjvbdsBelkfjy -EPDLKvbdTpqPVVIN -DnbjjvbdBiKbKhfK -DnbjjvbdOFEUIiKd -EPCkKvbdSiZjRAAl -EObkKvbdwjwDgzyf -EPCjjvbdhlEdNtby -EPCjjvbdhtydwSUb -EOcKjvbdnQZyVjyC -DoDKjvbdRzKIScWA -EOcLKvbdLBLHNCXq -DoDLKvbdssSTYzFD -EObjjvbdEvYpPlie -DncLKvbdhficYvKV -EPCjjvbdnUuZkJqf -DnbjjvbdXnRAXtut -EPDKjvbddijRutzn -EOcLKvbdEvYpPljF -DoCjjvbdTulQKUAq -EObkKvbdxmsIYShc -EPDLKvbdkyTRryHU -EObjjvbdCEQAvKNG -EObjjvbdGYuVBEYC -EPDKjvbdvAdYsOeI -EObjjvbdRpUHKGEX -EPCkKvbdKDJcQjDY -DoDLKvbdunszqKoU -DoCjjvbdJvUfEEfi -DncLKvbdrpWPJcWG -DoCkKvbdajkfPNcA -DnbjjvbdFpATXHFy -EObkKvbdFfJrOJTq -DncLKvbdZnnJFEyj -DoCjjvbdOEctIiKd -EPDLKvbdVhXuxGxz -EPDKjvbdySmhlrCH -EOcKjvbdiGjDZWJu -DncKjvbddZyQYZRC -DncLKvbdziuPpETU -DncLKvbdJTYaTNXl -EPCjjvbdNddThiKd -DnbkKvbdbAudepPw -EOcKjvbdMowpunHT -DoDLKvbdmbKXYPNu -DoDLKvbdezvZEiTw -DnbjjvbdrMyixkgi -DnbkKvbdKWVGEFGi -DoCjjvbdkDLjpftg -DnbjjvbdJqZePFme -EObkKvbdDwxLsssl -EPCjjvbdmoyyWLYb -EPCkKvbdFjdrcHmV -DoCkKvbdDwxLtTsl -EOcLKvbdoAKztHdO -EPDLKvbdTkuoAuoJ -DncLKvbdURRPVVHm -EPCkKvbdKCicRJcY -DoCkKvbduDCuXWOo -DoCjjvbdRXNdDMID -DoDKjvbdBcpBWJlf -DoCjjvbdTqROttgm -DncKjvbdRadFMIxk -DoDLKvbdCSaDTewS -EOcKjvbdQlxCYmtz -DncLKvbdeOeSkUTr -DnbkKvbdTqQntthN -DnbjjvbdhbObdvpq -EPDLKvbdMowqVmgT -DncKjvbdANIZTWzY -EPDLKvbdiVZeXRtb -DncLKvbdYNqAXtvU -EOcKjvbdfIKurNpg -DoCkKvbdFpATWfey -EPCjjvbdHkazmwRL -DoDKjvbdJvUfDdgJ -EPCkKvbdSBdElIxk -DoCkKvbdbsCjtEJa -DoDLKvbdvBEYsOdh -EOcLKvbdGGJqmhsq -EOcLKvbdJSyBSlxM -DncLKvbdnQZxukZC -EOcLKvbdySnIlrCH -DoCjjvbdIjEAKPgE -DoDLKvbdhlEcnVDZ -EPDKjvbdZeYGzghb -EPDKjvbdbKlGOnDA -EPDKjvbdkMbMZdgP -EOcLKvbdDoCkKwCd -DnbjjvbdLBLGlbXq -EPDLKvbdZxcinCkr -DoCkKvbdqTsfrRjt -DoCkKvbdADSYJzIp -DoDKjvbdbUagYKsh -EObjjvbdjAQHAofj -EOcKjvbdDoDKkXDE -EPDKjvbdSZigsCvA -EPCkKvbdKRZePGOF -EPCjjvbdKaKgNCXq -EObkKvbdxxJKBoyk -EOcKjvbdxmrgwsIc -DnbkKvbdmozYvKyC -DoCkKvbdqquLOLAm -EObkKvbdDncLLXCd -EPDLKvbdjcMKpftg -EPCjjvbdwkXDgzzG -DoDLKvbdHffyxwwg -DoCkKvbdvAdZSneI -EOcLKvbdrovOjDVf -EOcLKvbdsPuoJbuf -DoDLKvbdySnJNSBg -EObkKvbdXsMAltOx -DncLKvbdFfKSOJTq -EPCkKvbdddnrCWcK -DoCjjvbdySmhlrBg -DnbjjvbdNxPVzcnU -DncKjvbdhtzEvrVC -DoCjjvbdQwODblHc -DoDLKvbdjcLjpgVH -EOcLKvbdbKlGOmcA -EPDKjvbdfMfWflik -DncKjvbdmbJwXnmu -EOcLKvbdTkuoAvOi -DnbjjvbdsZkoraIO -DoDKjvbdZMSEUOLm -EOcLKvbdsCFmLfkZ -DncKjvbdUxhTyjnn -EPDKjvbdRosfjGEX -EOcLKvbdmuUzKirG -EPCkKvbdGGJrOItR -EObjjvbdEXwktUUM -DnbkKvbdiifHimXr -EPDKjvbdmJDspuSB -EObjjvbdwyhGFwdr -DncKjvbdatafwkUI -EPDLKvbdYNqAXtut -DoDLKvbdEPCkLWcE -EOcLKvbdqceJQOWB -EPDKjvbdySnJNSBg -DnbjjvbdyzdnSIIh -DoDKjvbdrDdiQNvB -DoCkKvbdYkqdTnLm -DoCkKvbdlZTSTYgU -EPDKjvbdMpXqWNfs -EObkKvbdJbicQjDY -DoDLKvbdGAoRYizm -DncKjvbdmgExNOHZ -DoCjjvbdznoqFDLx -EOcKjvbdieLGtoAO -DoCjjvbdMfbpMotk -EObkKvbdyzdnSHiI -EObkKvbdcSbjscia -DoDKjvbdNGcQNQUk -EPDKjvbdNGbpMpVL -DoDLKvbdUQqPVUgm -DnbjjvbdVvhwuceH -EPDKjvbdDxXkstTl -EPCjjvbdPyNAHTRj -EPDLKvbdeOdsLTtS -DoDKjvbdTAEiICPE -DoDKjvbdZisIQGaf -EObkKvbdxVMdpxkn -EPCkKvbdnUtzKjRf -EOcKjvbdhtydvrVC -DoDKjvbdbrcLTcia -EPDLKvbdbhlikFvx -EPDKjvbdANIZSwZx -EPDKjvbdtbbuXWOo -EObjjvbdliDtQtqa -DncLKvbdGLFScIMu -DnbkKvbdfMfXGljL -EObkKvbdCTBDTewS -EPDKjvbdSiZiqAAl -EOcKjvbdFfKSNhsq -EPCjjvbdyYJKBpZk -DncKjvbdAMgyTWyx -DnbkKvbdpaJFAXIE -EOcKjvbdEYYMUUTl -EPCjjvbdeFOrBvcK -DoDLKvbdptUHSRkU -DoCkKvbdOYPVzcnU -DnbjjvbdijFhKMxS -DnbkKvbdEKHivXjA -DncLKvbdsPvOicVf -DoCjjvbdmbJvxOmu -EOcKjvbdDxYMUUTl -DoDKjvbdZtIhxdTO -DncKjvbdTlVoAuoJ -DoDKjvbdFyUuBDwb -EObkKvbdQYmAGsSK -DnbkKvbduLwwAsaX -EPDKjvbdegkWRmpg -EPDLKvbdRDcAoqDr -DoCjjvbdFWZPolie -DoCkKvbdbhmJkGWx -DncLKvbdrWpMDJYq -DnbjjvbdaaWEeoow -DoDLKvbdzHYlANFX -DoCkKvbdjFLHUoAO -DnbjjvbdZyEKNbkr -DoDKjvbdLrXMyuQz -EPDLKvbdwNWAMdFN -DoCkKvbdkWXODaxX -EOcKjvbdraelkgKy -EOcLKvbdmSZVZsDi -EPCjjvbdkMbLzEfo -EObjjvbdaSFbgtFk -EObkKvbdmIctRUqa -DncKjvbdhtydvquC -EPDKjvbdZoOJEeZj -DoDLKvbdyXiJaozL -EOcLKvbdVwIxWEFH -DnbkKvbdYpmFJMdq -EPDLKvbdjKGIKMwr -EPCkKvbdFpASwHGZ -DncKjvbdKQzEnfNe -DoDLKvbdkVwODaxX -EPCjjvbdzaAOffal -EObjjvbdnHEwlnGy -DncLKvbdLqwMyuQz -EPCkKvbdWRnXaeMD -DoCkKvbdcbSlrAUN -EPDKjvbdMJBlRYAS -EOcLKvbdZxcimbkr -DncLKvbdCDpBVimG -DoDKjvbdGdKvKBjK -EPDLKvbdziuPodSt -DnbkKvbdbrbjtEKB -EOcLKvbdmIcsptqa -EPDKjvbdMRwMyuQz -DoDLKvbdfHkVrNqH -DnbkKvbdLZRKSzuG -EPDKjvbdTfzmkwWF -EOcLKvbdSKxeuHLT -EPDLKvbdkHgLfGNk -DoDLKvbdVhXuxHYz -EOcKjvbdkHgMGGOL -DoDKjvbdEARhmZvw -EPDLKvbdjKFgimXr -EObkKvbdSQUGiecw -EPCjjvbdjKFhJlxS -DoDKjvbdDxXlTtUM -EPDLKvbdelfWgMik -EOcKjvbdtcDVXWOo -DoDKjvbdiZuFlRNf -DoCkKvbdsBellHKy -EPCkKvbdjlbLyeGo -EOcKjvbdhfibxujV -EObjjvbdhyuGMROG -DoDLKvbdgQBzvdYI -DoDKjvbdeATpmXjG -EPDLKvbdjKFgilxS -DoDKjvbdrpWPJbuf -DncLKvbdDncLKvcE -DoCkKvbdkVvmdCXw -DncLKvbdGcjujCJj -DncLKvbdpxngfpcx -DnbjjvbdiCPCdwQq -EPDLKvbdijFhJlwr -DncKjvbdhgJbxvKV -EPCjjvbdZxcjNbkr -DncKjvbdZQleJMdq -DncLKvbdyfxlAMeX -EPCjjvbdFfJrNiUR -EPDLKvbdzjVQPdSt -DoDLKvbdjAQHBPfj -EObjjvbdZoOJFEzK -EObkKvbdFpATWgGZ -EPDKjvbdvAcxrneI -DoDLKvbdxrnJMrCH -DoCkKvbdjmCLydfo -EPCkKvbdegjuqmqH -DoCkKvbdSBdFLiZL -EObkKvbdbAvFFopX -DncLKvbdGQASwGey -DnbkKvbdQccAopdS -EPCkKvbdZshiYdSn -EPCjjvbdHDjujCKK -EObjjvbduDDVWuno -DoCjjvbdzjVQQDsU -EOcLKvbdeFOqavcK -DoDLKvbdyXhibPzL -DoDLKvbdrzMPsAgn -EObkKvbdUtNTfMWK -EOcLKvbdLqwNZuQz -EPDKjvbdqBJFAXHd -DoCkKvbdnUuZkKSG -DoCjjvbdZHXEAOsJ -DncKjvbdQdDBPpcr -DnbkKvbdCIkBkIej -DnbkKvbdMgDPmQUk -DnbkKvbdxxIjCPyk -DnbjjvbdZsiIxdSn -DoCkKvbdADRxJzJQ -EObjjvbdkxsSTZHU -DncKjvbdWXIxVdEg -DnbjjvbdLrWmZtpz -EPDKjvbdhzUelQnG -DoDLKvbdSBceLhxk -EObjjvbdWIXvYGxz -EPDKjvbdEYXktUUM -EObkKvbdhlFENtby -EPDLKvbdNwnuzcmt -EOcKjvbdaaWEfPpX -DncLKvbdddoSCWcK -EPDKjvbdmaiwXnnV -DoDLKvbdMgDQMpUk -DoDLKvbdjFKfuPAO -DncLKvbdnGeYMmfy -DncLKvbdrSUjmkAm -EOcLKvbdfHkWRnQg -DnbjjvbdnCKWxPNu -DnbjjvbdraemLgKy -EObkKvbdWWiYWDdg -DoCkKvbdKfFgaaQu -EPCkKvbdaSFcIUGL -EOcKjvbdkxrqryHU -DncKjvbdRDbaQQcr -DncLKvbdbVBgXjtI -DoCjjvbdqZPHfqDx -DnbkKvbdcyxowxpb -EPCkKvbdWXIxWDeH -DoCkKvbdyXiKBozL -DnbkKvbdlZSrTYft -EObjjvbdGdKujBij -DnbjjvbdtcDVXWPP -DoDKjvbdZnmhddyj -EObkKvbdTukoisaR -EObkKvbdzoPqFCkx -DncLKvbdLhalQxAS -EPCkKvbdVwIwudFH -DoDKjvbdjKGIKNYS -DoDLKvbdjhHLeenL -EPDKjvbdJTZBSlxM -DoCjjvbdFaOqZJzm -DoDLKvbdnBjXXnnV -DoCjjvbdeFPSCXDK -EPCjjvbdbAvFGPow -DnbkKvbdVwIwvEFH -EObjjvbdqUTfrSLU -DncKjvbdqlyixkhJ -DoDKjvbdSLZFuGjs -DncLKvbdsCGNLfkZ -EPDLKvbdaofgDkzd -DoCkKvbddiirWUzn -EOcKjvbduCcVWuno -DnbkKvbdSPsfjGDw -DoCkKvbdFWYpQMie -DoDLKvbdRECaQRES -EPDLKvbdhfibyVjV -DnbjjvbdqTsgSSLU -EObkKvbdrXQMChyR -DncLKvbdNrtVfduQ -EObjjvbdiUzEvqtb -DncKjvbdUaCQsRRy -EPCjjvbdRbEEkiYk -DncKjvbdUtNUGMVj -EPCjjvbdzHYlAMeX -EPCkKvbdeEoRbXCj -DoDLKvbdcScLUDia -DoDLKvbdtbbuWuno -EOcKjvbdbUafwkTh -DoCjjvbdtcDVXWOo -EOcKjvbdHgGyxxYH -EOcLKvbdWSOXbEkc -DoCkKvbdKeehCBRV -DncLKvbdMgComQVL -DoDKjvbdUMVoBVoJ -DoCjjvbdzoQRFCkx -DoCkKvbdUWMQJsaR -DnbjjvbdkNCLydgP -EOcKjvbdmozYvKyC -DnbkKvbdmgExMnGy -DncKjvbdznpQeDMY -DoDKjvbdZxcjNbkr -EOcKjvbdqdEiQNua -EPDLKvbdfHkVrNpg -DnbkKvbdXsMBMsoY -EObkKvbdcJNKLGXY -EPDLKvbdVqmwbEkc -EPCkKvbdJcJbpibx -EObjjvbdYNqAXtvU -EObkKvbdjAQHApGj -EPDKjvbdrbFmMHLZ -DnbkKvbdPIAXyAYa -DoDKjvbdSLZGVHLT -DoCkKvbdDnbkLWcE -DncKjvbdzoPpeDMY -EPDKjvbdQwNdDLhD -EPDKjvbdhfjCxuiu -DoCjjvbdajkenmcA -EPDKjvbdtTSTYyeD -DoCjjvbdijFhKMwr -DoDLKvbdpfDeTuaI -EPCjjvbdJXtCHlQp -EOcKjvbdjbkkRGuH -EObkKvbdVTlselWK -DoCkKvbdauCHXkTh -DnbjjvbdSLZGVGjs -DoDLKvbdehLWRmqH -DncKjvbdSBdFLhyL -DoDLKvbdmajXYPOV -EOcKjvbdpeceTvAh -EPCjjvbdNdctIhkE -EOcLKvbduWNwjQsA -DoCjjvbdtvOYKRTA -DncKjvbdqiAJeNOe -DnbjjvbdUtNUGLvK -EPDKjvbdMgColotk -EOcKjvbdQlxCZNtz -DoDKjvbdmfdwmNfy -EPDKjvbdrovPKDVf -DnbjjvbdDjIJuwjA -EPCjjvbdsBfNMHLZ -DoCjjvbdJbjDRJcY -EPDLKvbdZRMeJNEq -EPCkKvbdRkYfVGkT -DncLKvbdRbDeLiYk -EPCjjvbdqiAJdloF -DoCjjvbdFyVUaDwb -DoCjjvbdMRvmZtpz -DoDLKvbdGQATWffZ -EPCjjvbdwtmFQyMO -EOcKjvbdTIzKRAAl -DoCkKvbdsQVnicVf -DoDLKvbdFfKRmhtR -EOcKjvbdsCFmLfjy -DoDKjvbdddnqbXDK -DoDKjvbdYgWdAOri -DoCkKvbdmuUyjjSG -EObkKvbdhficYvJu -DoCkKvbdQlxCZNtz -EPCkKvbdGZVUaEXb -DncLKvbdEXxMTtTl -DoDKjvbdGFirNiUR -EPCjjvbdpssgRrLU -EObkKvbdVZHsykOn -DncKjvbdyTOJMrBg -EOcKjvbdRacdlIyL -EObkKvbdiCOcFWqR -DoDLKvbdRjxfVGkT -EOcLKvbdiBncFXQq -DncLKvbdnQZxukYb -DoDKjvbdpaIeAWgd -DncKjvbdVqnYCEkc -DnbjjvbdZRMdhmEq -EPCjjvbdhgKDYuiu -EOcLKvbdCIkBjhfK -EPCkKvbdZnmhdeZj -EOcKjvbdTppnuUhN -EOcLKvbdbVBfxKsh -EPDKjvbdFVxpQNKF -DnbjjvbdjvWnDaxX -EObjjvbdANIYrwZx -EObjjvbdauCHXjtI -EObkKvbdZirgpGaf -EObjjvbduoTzqLPU -DoDLKvbdxZhFeweS -DoCjjvbdILaznWqL -DncLKvbdaMkBrtlg -EObjjvbdNrtVgFUp -DnbkKvbdRzKHsCvA -DoCkKvbdiZuFkpnG -DnbkKvbdEztRElDJ -EPCjjvbdRECaQQdS -EPCjjvbdqqtkNkAm -EObkKvbdyNrhXriD -DoDLKvbdegkWRmqH -DncKjvbdNQXqWNfs -DoDLKvbdRadFLhxk -EPDKjvbdxUmFQyLn -EPCjjvbdxxJKBoyk -EObkKvbdnVUzLJqf -DnbjjvbdSQUGiedX -DncLKvbdrpVnjCvG -DoDKjvbdZirgpGbG -DncKjvbdOAJTUJrA -DnbjjvbdUyHsyjoO -EPDKjvbdfpBzvdXh -EPCjjvbdyTNhlqag -DncKjvbdLBKflaxR -DoCjjvbdVwJXvEEg -EOcKjvbdVqnXadlD -DoDKjvbdyNrgxSiD -EObjjvbdnVVZjjRf -DnbjjvbdFeiqmiTq -EObkKvbdFVxpQMie -DnbkKvbdIBkydzAD -EPCkKvbdZjTHofaf -DncLKvbdnPzYukZC -EObkKvbdLYqKSzuG -Dnbjjvbdxmrgwrhc -EObkKvbdTkuoBWOi -EObkKvbdIrxaSlxM -EOcLKvbdJqZeOfOF -DoCjjvbdBhjbKiFj -EPCkKvbdrDeJPnVa -EPCkKvbdNwoVzcnU -EOcLKvbdXmqAYVWU -EPCkKvbdZeYGzhJC -EOcKjvbdNddUIhjd -DoDKjvbdjggLeemk -EObkKvbdxZgefXeS -EOcKjvbdgFkzOGgA -EObkKvbdNdcsiIkE -EPDKjvbdbiMikFwY -EPDKjvbdelfWfmJk -EOcKjvbdHELWJajK -DoDLKvbdZRMeIldq -EOcLKvbdRXNccMHc -EPCkKvbdQlxCZNtz -DoCkKvbdyTOJMqag -EPDLKvbdCTAcTevr -EOcKjvbdrpVnicWG -DnbkKvbdZLrETmkm -EOcLKvbdRpTfifEX -DnbjjvbdQcbaPqDr -DoCkKvbdEuxpQNKF -EPCjjvbdNeEThiKd -EPDKjvbdVYgtZjoO -DoCjjvbdZRMdhleR -DoCjjvbdZsiIyDrn -EPDLKvbdaSGCgtGL -EPDLKvbdqTtGqrKt -DoCkKvbdnVUzKjSG -EPCjjvbdzQoMiJwA -EPDKjvbdXrlBMtOx -DoCjjvbdNHColpVL -EObkKvbdXnRAXuVt -EObjjvbdMJCMQxAS -EObkKvbdIrxaTMxM -DnbjjvbdbAudfQQX -DnbkKvbdnCKXYOmu -DoDKjvbdEXxMUUTl -EObkKvbdyXhiaozL -EObjjvbdEJhKVwjA -EOcKjvbdpfEFTuaI -EOcKjvbdbVCHYLTh -DncLKvbdyqOliJwA -EOcKjvbdkxrqsZHU -DncKjvbdDjHjVwjA -EPCkKvbdkDMLQfuH -EPCjjvbdUVlPjUBR -DoDLKvbdjJfHimXr -DoCkKvbdEuxooljF -DoDLKvbdYzcGRjWZ -DoDKjvbdwyhGGYFS -DnbkKvbdsrrSxyeD -EPCkKvbdxmrhXrhc -EPDKjvbdDjHivXjA -EObkKvbdfMfXGlik -EPDLKvbdGdKvKBij -DoCkKvbdbLMGOmcA -EPCkKvbdRXNdDLgc -EPCjjvbdZsiIxcrn -DoDKjvbdpyPIGqEY -EPDKjvbdlZTRryHU -DoDKjvbdUslsekvK -DncKjvbdKfFhCBQu -DncLKvbdSCDeMIyL -EPDKjvbdJcJcRJcY -DoDLKvbdraellHLZ -EPCjjvbduDCtwWPP -DnbkKvbdBdPaWJlf -EPCkKvbdqFceUVaI -DnbkKvbdcyxoxYqC -DnbkKvbdlYsSTYft -EObjjvbdZHXEAOsJ -EObjjvbdURROtuHm -EPCjjvbdZLrDsnMN -EPCjjvbdfIKvRmpg -EPDLKvbdwWlBVaVu -EObkKvbdZMSDsmkm -EPDKjvbdKNAEZfuB -DnbjjvbdhyuGMROG -EObjjvbdJuuGDdgJ -EPDLKvbdgQBzwDxI -EObjjvbdjvXNdCXw -EPCjjvbdlZSrSyGt -DoDKjvbdXsLaMsnx -DoDLKvbdTlVoAuoJ -DnbkKvbdptUGrSLU -EObkKvbdEztRFMCi -EOcLKvbdTkvOaVoJ -EObkKvbdDoCjjwCd -EPCkKvbdTfznLwVe -EObkKvbdRjyGUfjs -EPDKjvbdVviXvEFH -DnbjjvbdKkBIWAKZ -EOcLKvbdqFdFUVaI -EOcLKvbdBhjakJFj -DncKjvbdauBgYKsh -DnbjjvbdxKvdHzyf -DoCjjvbdxVMdqYlO -EPCjjvbdEPDLLXDE -EPDLKvbdVvhwucdg -DncKjvbdaRfDITfL -EPDKjvbdfpBzvcxI -DoCkKvbdGLFTDHmV -DoDLKvbdcTDKtDjB -DnbkKvbdZRMeIldq -EObjjvbdRjyGVGkT -EPCjjvbdlhctRVRa -DnbjjvbdyXhibPzL -DnbjjvbdFpASvgFy -DnbjjvbdKCicRJcY -DnbkKvbdPxmAGrrK -EPCjjvbdpstHSSKt -EObkKvbdiZtelQnG -DoDLKvbdKkAgvAJy -EObjjvbdsPvPKCuf -EOcLKvbdhyuGLqOG -EPDLKvbdyOSgxShc -EObkKvbdmJDsptqa -EPCjjvbdbVCHYKtI -DoCkKvbdCJLBkIfK -EPDKjvbdTqQnuUgm -EOcLKvbdypnmIjXA -DoDLKvbdiLddOUby -DoCkKvbdaSFbgtGL -EPDLKvbdraellGjy -EObkKvbdWRmwbEkc -EPCjjvbdDoDLKvcE -DnbjjvbdjEjfuPAO -DnbjjvbdqvokbiYq -DnbkKvbdVZITzLOn -EPDKjvbdUWLpJtAq -EObkKvbdwtmFQyMO -DoDLKvbdFWZQPmKF -EPDKjvbdLBKgMawq -DncLKvbdANIYsWyx -EObkKvbdqvolDJYq -EOcKjvbdQlwbZOUz -EPCkKvbdlqyUzTEJ -EPCkKvbdSLYfUgKs -DoCjjvbdRotHJfEX -EOcKjvbdrXQMCiZR -DncLKvbdaofgELzd -DoDKjvbdehKvSNqH -EPCkKvbdzaAOfgBl -DoCkKvbdVUMsfMVj -DoDLKvbdUGznLwVe -EPDLKvbdDoDKjwDE -DoCjjvbdANHxsXZx -EPCkKvbdJpydnenF -EPCjjvbdtTRsZZeD -DoDLKvbdnQZyWLZC -EPCkKvbdKNADyfta -EPCkKvbdUVlPjTaR -DncLKvbdeOeSjstS -DncKjvbdXrlAmUOx -DoCkKvbdxnTIXrhc -EPDLKvbdZjTIQGaf -DoCjjvbdPxmAGrrK -EPDKjvbdLZQirztf -DoDLKvbdkHflGFnL -DoCjjvbdiMFEOUby -DnbjjvbdhaoDFXQq -EPCkKvbdyzeNqhIh -EPDKjvbdbUbGwkUI -DoCkKvbdEXxLsstM -DoDLKvbdaRebhUGL -EObjjvbdMfbpNQUk -DoDLKvbdCEQAuilf -EObjjvbdMowpunHT -DoDLKvbdzHYlAMeX -DoCkKvbdegkVqnQg -DnbkKvbdwWlAuaVu -DncKjvbdFfJqnItR -EObjjvbdZjTHpHBf -EPCkKvbdbsDKtEJa -EOcLKvbdZtIiZESn -DoDLKvbdpxoIHRDx -EPDLKvbdTpqOtuIN -DnbjjvbdmoyxvKxb -DncKjvbdqGEEtWBI -EPCkKvbdQwNdClHc -DoCkKvbdHELViajK -EPDLKvbdCJLBkIfK -EPDLKvbdvwMBWBVu -EPDKjvbdxrmiNRag -EOcKjvbdxVMeQyLn -DoCkKvbdraelkgLZ -EPCjjvbddndsLUUS -DoCjjvbdhgKDYvKV -EPDKjvbdBiKbKiFj -DncKjvbdKkBIWAKZ -DnbjjvbdjlakzEgP -EObjjvbdNrtWGeUp -EPDKjvbdidkGuPAO -DnbkKvbdjAQHBPgK -DoCkKvbdUxgtZkPO -DoDLKvbdDoCkLXDE -DoDLKvbdkVvmcaxX -EPCkKvbdmfeXmOHZ -DoCjjvbdHDkWJajK -DoDLKvbdkHgMGFnL -EObjjvbdBdQAuilf -EPDKjvbdxUleQxlO -DoDKjvbdJbjDRJcY -EPDKjvbdXsMAltOx -EOcKjvbdIrxaSmXl -DoDLKvbdyYJJbQZk -DoDLKvbdQlwaxnUz -EObkKvbdqvpMDIyR -DoCkKvbdhzVGLpnG -DncKjvbdJKEAJofd -EOcLKvbdZLrETnLm -DncKjvbdQvnDcMID -EPDLKvbdiLddOUby -EOcKjvbdeJiqvUzn -DnbjjvbdsBemMGkZ -EPCkKvbddtAUASmW -EPCjjvbdiLeEOVCy -EPDKjvbdkxrrSyHU -DoCjjvbdURQoVUhN -EOcKjvbdtkwwBUBX -EOcKjvbddeOqawCj -EOcKjvbdbAvEfPow -EPCkKvbdzROmIjXA -EObjjvbdKDKCpibx -EPDKjvbdIGfyyYXg -EOcLKvbdeOdsKssr -EOcKjvbdsBelkgKy -DoDKjvbdJYUCIMRQ -EOcLKvbdjcMLQgVH -EOcLKvbdJTYaSmXl -DoDLKvbdNddUJIkE -DoDLKvbdFjdsChNV -DnbjjvbdmttyjjSG -EPDLKvbdVgwuxHYz -EOcLKvbdsCGMkfjy -EOcKjvbdKWVGDeHJ -EPDLKvbdjJegjMwr -DoCkKvbdNHDQMotk -DoDLKvbdjmBkydgP -DnbkKvbdSLZFtfjs -EPDKjvbdjbkjpfuH -EObjjvbdkVwNdBww -DncKjvbdFxtuBEYC -EPCkKvbdrMzJxkhJ -DoDLKvbdptUGrSKt -EOcKjvbdhzUelQnG -EObkKvbdsQVoKCuf -DoCkKvbdzitpPcsU -DoCkKvbdySnJMqag -DncKjvbdZRMeImFR -EObkKvbdYzcFrKVy -DoDKjvbdrNZjZMIJ -EPCkKvbdEvYoolie -EOcLKvbdLBKgNCXq -DnbkKvbdrpVnjDWG -EObkKvbdLLBHvAJy -DoCkKvbdqmZixkgi -DoCjjvbdhytfLpmf -DnbkKvbdVZHsyjoO -EObkKvbdWWhxWEEg -EObkKvbdhfjDZWJu -DoCjjvbdZoOIddzK -DoCjjvbdCDoaWJmG -DoCkKvbdzitoocrt -EOcLKvbdOSsvGduQ -EOcLKvbdVqnXbElD -EPDKjvbdgFlZnHHA -EOcKjvbdUsltFkvK -EPCkKvbdePFSkTsr -EPCkKvbdssSTYzFD -EOcLKvbdVTlselWK -DncKjvbdZRMeJMdq -EOcKjvbdYSlAlsnx -DncLKvbdSZihTDWA -DnbjjvbdvvlBWAuu -EOcLKvbdEvZPoljF -EPDKjvbdHELWJbJj -DoDKjvbdDjHiuxKA -DncLKvbdrMyjYkgi -EOcLKvbdRbDdlIxk -DoDLKvbdFVyQQMie -EOcLKvbdZxdJmcMS -EPDKjvbdFejRmiUR -EPCjjvbdnPyxujxb -DoCkKvbdjKGIKNXr -DoCjjvbdYSlBNUPY -DoDLKvbdZshiZDsO -EPDLKvbdkyTRsYft -DncKjvbdJbicQicY -DoCkKvbdXGZZtAOs -DnbkKvbdZjSgpGbG -DncKjvbdWSOYBeMD -DoDLKvbdKNADyfta -DoDLKvbdLBKgMbYR -EObjjvbdNddThhkE -EPCjjvbdQdCaPqES -DnbkKvbdvBDySoFI -EPCkKvbdDoDLLWcE -DncLKvbdaSGDHtGL -EObkKvbdKNADzGta -DncLKvbdTAFJHaoE -EOcLKvbdTAFJIBoE -DoDLKvbdUtNTelWK -EPCkKvbdKefICApu -EObkKvbdySmhlqbH -EPDLKvbduaEYroFI -DnbjjvbdSKxfVHLT -EObkKvbdhkdcnVDZ -DnbkKvbdCSaDTevr -DoCkKvbdiBoCeXQq -DncLKvbdZjShQGaf -EPCkKvbdIwsagkqQ -DnbkKvbdnCKWwoNu -DncKjvbdelfWgNJk -EOcLKvbdSPtHKFcw -EObjjvbdZRNEhleR -DoCkKvbdbLMGPNcA -DoCkKvbdRkZFtfjs -EOcLKvbdySmhmSBg -DoCkKvbdWHxVwgYz -EObjjvbdURQntuHm -EPDKjvbdySnJMqbH -EOcLKvbdOStWHEtp -EPCjjvbdeOeTKstS -DncLKvbdssRsZZdc -EObjjvbdrovPKCuf -EPDKjvbdiZuFkqOG -DncLKvbdsBfNLfjy -EOcLKvbdCDpAujNG -EPDKjvbdOSsugFUp -DoDLKvbdNQYRVmfs -EOcLKvbdTAEiHaoE -DoCjjvbdEPDKjwDE -EPCkKvbdqUUGqqkU -EPDKjvbdtbcVXVoP -DnbjjvbdhbOcEvqR -EOcKjvbdCTAcUGWr -EPCkKvbdQdDApQcr -DnbjjvbdTfznLwWF -DnbkKvbdCDoaVjMf -EPCjjvbdBsBDUFvr -EPCkKvbdWWiXuceH -DoCjjvbdJcJcRJbx -DoDLKvbdsCGMlHKy -EPCjjvbdSBceLhyL -DoDKjvbdHffzZYYH -EPCkKvbdvAdZTOeI -DnbkKvbdxwhjBpZk -DncKjvbdOFDtIhjd -DoCjjvbdmpZxujxb -EOcKjvbdIryAsMwl -EPCkKvbdTqQnuUhN -DncKjvbdOSsvHEtp -EPDLKvbdZoOIdeZj -DnbkKvbdKeegbAqV -EPCjjvbdqFceUWAh -DnbkKvbdCWzchdpW -EPCkKvbdzQnlhiwA -DoDLKvbdqdEiQNua -DncKjvbdddoRawCj -EPDLKvbdlYrrSxft -DnbkKvbdRWnECkgc -DncKjvbdGYuUaEYC -EPDLKvbdZsiIxcrn -DoCjjvbdJbibqJbx -EPDKjvbdGYtuBDxC -DnbjjvbdCEQAvKMf -EObjjvbdvAcyTPEh -DoCkKvbdxwhjBozL -DoDKjvbdNsTugFVQ -DoDKjvbdkHgLeemk -EOcLKvbdwWlBVaWV -EOcLKvbdrNZjYkgi -DnbkKvbdJYUBglRQ -DnbkKvbdjvWmdCXw -EObjjvbdmajXYPOV -DncKjvbdDihJuxKA -EPCjjvbdwzIGGYFS -DoDKjvbdMpYQvOHT -DncLKvbdbhljLFwY -EObjjvbdelevgMik -DnbjjvbddePSCWbj -DnbjjvbdKQydnenF -DnbkKvbdZQmEhmFR -DoDKjvbdjKFgimYS -EObjjvbdANIZSvyx -DoCjjvbdfHkWRnRH -EObkKvbddiiqutzn -EOcKjvbdqYnhHQdY -DoDKjvbdKCjDQjCx -DoDLKvbdjgflFfNk -EOcLKvbdtTRrxzEc -DnbkKvbduLwwBUAw -DncLKvbdkWXOEBxX -EPDKjvbdNxPVzcnU -EPCjjvbdUMVnaWOi -EObkKvbdZQmFImEq -DncLKvbdQvmdDMID -EObjjvbdGFjSNhsq -EOcLKvbdbAvFFpQX -DoCjjvbdkCkjqGuH -EPCkKvbdbLLeoNcA -DoDLKvbdemFwGmJk -EOcKjvbdVUMtFlWK -EPDLKvbdWXJXucdg -DncLKvbdqcdhpNua -DncLKvbdGYuUaDxC -EPCkKvbdGZUtaDwb -EOcLKvbdjuwODaxX -EOcKjvbdSKyFuHKs -EOcLKvbdNQYQvOHT -EPCkKvbdNGcQNPuL -EOcLKvbdPIAYZAZB -EObjjvbdMfcPlpVL -EPCjjvbdLAjflbXq -EPCjjvbdySmhmRbH -EPDKjvbdxsNhmSBg -EOcKjvbdZMSDsmkm -DoCjjvbdbAudfQQX -DoCjjvbdePErjtTr -DncKjvbdtkxXBUBX -DoCkKvbdqvokbiYq -DnbjjvbdMfbpMouL -DnbjjvbdijFhKNXr -DoDKjvbdhgJcZVjV -EPDKjvbdIHGzZYYH -DnbjjvbdNsTufeVQ -DnbjjvbdqlyixlIJ -EPDLKvbdmaivxPOV -DnbkKvbdmJDsptrB -DnbjjvbdQYmAGsSK -EOcKjvbdZjTIQHCG -EPDKjvbdqGDeTuaI -EOcLKvbdADSYJzIp -DncLKvbdeuzwoizs -EObjjvbdFyUuBEXb -DncLKvbdnUtykJqf -EPCjjvbdelfXGmKL -EOcKjvbdKCjDQjDY -DncKjvbdaaVeGPow -DncKjvbdqvolDJYq -DoCjjvbdDnbjkWbd -DoCjjvbdjlakyeHP -DoCkKvbdLZRJrztf -DncKjvbdZisIQHCG -EPDLKvbdZyDjNbkr -DnbkKvbdLAjfmBwq -EOcKjvbdtSqryZeD -EOcLKvbdIMBzmvqL -EObjjvbdiVZdvqtb -DoDLKvbdMgDPmQVL -EPDLKvbdMgCpNPtk -EObjjvbdKVuGDeHJ -EOcLKvbdjJehJlxS -EPCkKvbdhlEcmuDZ -DoDKjvbdHfgZyXwg -EPCjjvbdShyiqABM -EPDLKvbdMgColouL -EPDLKvbdVqmwadkc -EPCjjvbdnCKWwnmu -DncKjvbdRpUGjGEX -DoDKjvbdkWWnECYX -DnbjjvbdkMalZeGo -EOcKjvbdxUleRYkn -EObkKvbdFxtuBDxC -EObjjvbdnGdwlnGy -EObkKvbduaEYsOeI -EPCkKvbdyTOJMrBg -EObjjvbdDHMFgAzc -DnbjjvbdEOcKkXCd -EPDLKvbdBhjbLIfK -EPCkKvbdZtJJZETO -EOcLKvbdIwsagkqQ -DoCkKvbdZyDjNbkr -DnbjjvbdBsAbsfWr -DoCjjvbdeOeSjssr -EObkKvbdVUNUGMWK -DncLKvbdfMfWfmKL -DoCjjvbduaEZTOdh -DoCkKvbdZisIPgBf -DnbjjvbdVZHtZjoO -DoCjjvbdCWzchePv -EObjjvbdJmAEZfuB -EObjjvbdvvkaVaWV -DoCjjvbdiiegjNXr -DnbjjvbdcScLUEJa -DncLKvbdJXsbHlQp -EPCjjvbdrpWOjDVf -DoDLKvbdDnbjjwDE -DnbjjvbdxnShYSiD -DoCjjvbdqGEFUWBI -DoDKjvbdtSrTYzEc -EObkKvbdEPDLLWcE -DoDKjvbdKQzEnfOF -EPDLKvbdIwtBhMRQ -DoCjjvbdTvLojUBR -EPDLKvbdZyDimbkr -EPDLKvbdptTfrSKt -DncLKvbdkMbLyeHP -EOcKjvbdKfFhBaQu -EObjjvbdeEoRbXDK -EOcKjvbdHDjvJbJj -EObkKvbdEztQeLcJ -DncKjvbdUtMsfLuj -DnbjjvbdRXOECkgc -DncKjvbdLAjfmBxR -EOcLKvbdsPvPJcVf -EPCjjvbdygYlAMdw -DnbjjvbdmuVZkKRf -EPCkKvbdSZigrcWA -DncLKvbdcJMikGWx -EOcKjvbdGLErcHlu -DoDKjvbdKNADygUa -EPDLKvbdMfbolpUk -DoDLKvbdUxhTyjoO -EPCkKvbdMtrqjmAX -EPDLKvbdLBLGmBxR -DoCjjvbdrzMQTAgn -EPDLKvbdUxhTykPO -DnbkKvbdnVUzLJqf -DoCkKvbdLYpirztf -EPDLKvbdFejSOItR -DncLKvbdvlvANDeN -DncLKvbdwtleRYkn -EObkKvbdcJNKLFvx -EPCjjvbdYSkaNTnx -EOcLKvbdSxKlNzjx -DnbjjvbdHbMZdzAD -EPCjjvbdXnRAXuVt -DoDKjvbdQmYBxnUz -DoCkKvbdWSOYCEkc -DnbkKvbdemGXGlik -EObjjvbdNeDsiJLE -DoCkKvbdbiMijfXY -EPCjjvbdmIdTptrB -DoCjjvbdEztQeMDJ -DncLKvbdCIjbLIfK -EPCjjvbdhkeENuDZ -DoCkKvbdAMgxsWzY -DoCjjvbdiZtelQnG -EOcKjvbdWXJXuceH -EOcLKvbdZRMeJMeR -EPCkKvbdiVZdvquC -DoDLKvbdkVvmdCXw -EObjjvbdnHExMmgZ -EPDKjvbdHgHZyYYH -EPDKjvbdRbEFMJYk -EPCkKvbdvBEZSndh -DnbkKvbdcScLTdJa -DoDLKvbdcJMijfXY -DnbjjvbddndrjstS -EPDLKvbdbiNJjevx -DnbkKvbdOSsvGduQ -DoDKjvbdMowpvNfs -DoCkKvbdZjSgpGaf -DnbkKvbdddnqawDK -DoDLKvbdKaLGmCYR -DoCjjvbdmuVZkKSG -EOcKjvbdZQldiMdq -EObjjvbdRNXayOUz -DncLKvbdeuzxQJzs -DncLKvbdEOcKkXCd -DncKjvbdhtyeXSUb -DnbjjvbdEObjkXDE -DncLKvbdKQyePGNe -EOcLKvbdHgGzZXwg -EObkKvbdrMzJxlIJ -EObkKvbdRXNdClHc -DoDLKvbdwzIFexEr -EPDKjvbdJYUCIMQp -DnbkKvbdhbOcFWqR -EOcKjvbdnGdxMmgZ -EObjjvbddeOqawCj -EPCjjvbdqTsgSSKt -DncKjvbdJXtBhLqQ -DoDLKvbdatagYKsh -EOcKjvbdjEkHUoAO -DncKjvbdLFfICBRV -DnbkKvbdKQydoFme -EPDKjvbdhlFEOVCy -EPCkKvbdZxdJmblS -EPDKjvbdJbjCqKCx -DncKjvbdwNWANDdm -EPDLKvbdpyPHfqDx -EPCjjvbdOTTufeVQ -EPCkKvbdtbbtvvOo -DoCjjvbdbBWEfQQX -EObjjvbdKNAEZgVB -DnbjjvbdJXtBgkqQ -EPCjjvbdGYtuBEXb -DoDLKvbdZjShQGaf -DoDLKvbdQmYCYnUz -EOcLKvbdpedFTvAh -EObjjvbdKQydoGNe -EPCkKvbdKDJcRKDY -EObkKvbdrafMkfkZ -EObkKvbdiCObdwRR -EPCjjvbddBsMrAUN -DoDKjvbdWIXvXgYz -DoDKjvbdkClKpftg -EOcKjvbdkCkjpftg -EOcLKvbdVrOYBeLc -EObkKvbdmoyxukZC -EPCjjvbddZyQXyRC -DoCkKvbdhbPCdvqR -DoCkKvbdJvUeceGi -EOcLKvbdVqnXaeMD -DoCkKvbdWWhxVceH -EPDKjvbdiGjDZVjV -EObjjvbdGAnpxizm -DoCjjvbdiZuFlQnG -EOcKjvbdTqRPVVIN -EPCjjvbdqdEhomvB -DoCkKvbdLAkHMaxR -EPDLKvbdOEdThiKd -DnbkKvbdkxrrTZGt -EOcLKvbdEPDLLXCd -DoDLKvbdTIzKRAAl -EPDLKvbdSCDeLiZL -EPCkKvbdpyOgfpdY -EPCjjvbdtkwwBTaX -EPDKjvbdiBoCeWqR -DoCjjvbdhgJbxujV -DoDLKvbdqdEhpNvB -EOcKjvbdkCkjqGuH -EPCjjvbdhbObeXQq -EOcKjvbdxsOImRbH -DoCjjvbdKWVFceHJ -DoDKjvbdBiKbKiGK -EPDKjvbdnGeXmNgZ -EPDKjvbdiifHjNYS -EOcKjvbdauBgXjsh -DnbkKvbdUtMsfLvK -DncKjvbdNrtVgEuQ -EPDLKvbdUsmUGLvK -EOcLKvbdNGcQMpVL -EPCkKvbdqmZjZLhJ -EObkKvbdFfKSOJUR -DncKjvbdhaoCeXRR -DoCkKvbdmfdwlnGy -EPCjjvbdjbkjqGuH -DoDKjvbdlqyVZsEJ -DnbjjvbdWWiYVcdg -EOcKjvbdeATqMwjG -EOcKjvbdqUTgSSKt -DncKjvbdqwQMDJZR -EPCkKvbdsQVoJbuf -DoCjjvbdVTmUFlVj -DoDKjvbdmajWxPOV -EOcKjvbdUQpoUthN -DoDKjvbdwMvAMdEm -EPDLKvbdDnbkLXDE -DncLKvbdFfKSNiTq -DncKjvbdIryBSlwl -DoDKjvbdmgEwlmfy -DncKjvbdqwPkbhyR -DncLKvbdNeETiJKd -EObjjvbdDoCjkXCd -EObkKvbdjgflFfNk -DncLKvbdxsNhlrCH -DoCjjvbdeFOrCWbj -EObjjvbdkNBkzFHP -DoCjjvbdxrmiNSCH -EOcLKvbdVwJXvDeH -EPCkKvbdZRMdhmEq -EObjjvbdjSzhsKiz -DoCkKvbdqdEiQOVa -EOcLKvbdpaJFAWhE -EPDLKvbdRkYfVGjs -DncKjvbdMpXqWNgT -EOcLKvbdVYhUZkPO -DoCjjvbdUxhTyjnn -DoCkKvbdOYOuzcmt -DoDKjvbdZLqdUNlN -DoDLKvbdJSyBTMxM -DoDLKvbdYORAXtut -DncKjvbdHffzYxXg -DncLKvbdmpZyVjyC -EOcKjvbdmfeXlnGy -DoDLKvbdkHfkeenL -DoDLKvbdJTZBSmYM -EObkKvbdrMzKZMHi -DncLKvbdiLeDmuCy -DoDKjvbdjvXNcbYX -DnbkKvbdrJAJeMne -DoDLKvbdvlvAMdFN -EPCjjvbdZLrDsmlN -DnbjjvbdaaVdfPpX -EObkKvbdrbFlkfjy -DoDKjvbdGLErbhNV -DoCjjvbdCIkCKhfK -DnbjjvbdeEoSBwDK -DncLKvbdirziSjiz -EPDKjvbdwzIGGYEr -DncKjvbdbVCGwkTh -EObkKvbdakMFnmcA -DnbkKvbdRpUHKFdX -DoDLKvbdMSWlytpz -DncLKvbdpssgRrKt -EPCjjvbdZRMeImEq -DoCjjvbdqrVKmjaN -EObjjvbdjAQGaPfj -DoDLKvbdyqOmJJwA -DnbjjvbdQccApRES -DoDLKvbdIsYaSmXl -EPCjjvbdrovPKDWG -EPDLKvbdqdEhpOVa -DoCkKvbdVviYVdEg -DoCjjvbdqZPIGqEY -EPCkKvbdOTTvGeVQ -DoCkKvbdDncLLXCd -EObkKvbdvBEYsOeI -DoCjjvbdYORAYVVt -EOcLKvbdhgKCxuiu -DoDKjvbdddoRbWcK -EObkKvbdmoyyWKyC -EOcLKvbdyYJJbQZk -DnbjjvbdUyIUZkPO -DncKjvbdFyUuBDxC -DoCjjvbdnQZyVjyC -DoDLKvbdatbHYKsh -DoCjjvbdczYowxpb -DncLKvbdIsZAsMxM -EPDKjvbdGKeTChMu -DoCkKvbdptTgSRjt -EPDKjvbdMtrqjmAX -DncLKvbdKQzEoFme -EObjjvbdFxtuAcxC -DncKjvbdkDLkRHVH -EPCkKvbdunszqKnt -DoCkKvbdezuxeJTw -EObkKvbdzjVQQDsU -EPDLKvbdjKGIKMxS -DoCjjvbdcyyQXxqC -EObkKvbdhtydwRtb -DnbjjvbdfNGXHNKL -DoDKjvbdmoyxujxb -DncLKvbdmuVZkJqf -EObkKvbdZyDjNbkr -DnbkKvbdyXhiaozL -EObkKvbdKWUfDeHJ -DoCkKvbddoFTLUUS -DnbjjvbdJvUfEFHJ -EObjjvbdsrqrxzFD -EObjjvbdmgFYMmfy -DnbjjvbdbrcLTcjB -EPDKjvbdZtIiZETO -DncKjvbdSLZGVHLT -EObjjvbdhtzFXSVC -EOcKjvbdvAcxsPEh -EOcKjvbdbrbjsdKB -DoDKjvbdezuxdiTw -DoDKjvbdhkdcnVDZ -DoCkKvbdNddUJIkE -DnbjjvbdsCGMlGjy -EOcKjvbdssSSxydc -DoCjjvbdSPtHJfDw -DoDLKvbdmRyVZrdJ -EOcLKvbdBdQBVjNG -EPCjjvbdtvOXipsA -EOcLKvbdDwwlUUUM -EObkKvbdhkeENuDZ -EOcKjvbdwygfGYEr -DncKjvbdbsCkUEJa -DnbkKvbdvlvAMceN -EPDKjvbdTvMPitAq -EPDLKvbdMowpvOHT -EOcKjvbdNQXpvNgT -DncKjvbdYzcFqiuy -EObjjvbdqUUGrRjt -EOcKjvbdUaBqTRSZ -DnbjjvbdrafMkfjy -DncLKvbdmgFXmNfy -DncKjvbdNrtVfdtp -EOcKjvbdVZITyjoO -EPDKjvbdTukpJtBR -DoDLKvbdyOTHxTIc -DnbjjvbdsBfNLfkZ -EPCjjvbdmJDtRVSB -EObjjvbdmJDtRUrB -DnbjjvbdiVZeWrVC -DncKjvbdBiKajhfK -DnbkKvbdziuQPcsU -EOcKjvbdGFiqnJTq -DoCjjvbdAMhZTXZx -DncLKvbdDjHiuwjA -DnbkKvbdBdQBVjNG -EPCjjvbdqlzKYkgi -DncLKvbdLLBIWAJy -DncLKvbdbhljKfXY -DncKjvbdaogHELzd -DnbkKvbdjEkGtoAO -DnbjjvbdGdKvJbKK -EPDLKvbdqrUjnKaN -EObjjvbdnVUykKSG -EPDKjvbdVrNwbFMD -DoDKjvbdvlvAMdEm -EPCjjvbdaaWEeopX -EPDLKvbdULuoBVoJ -EPDLKvbdzjUpPcsU -EPDKjvbdZnnJEdyj -EPDKjvbdtlXwAsaX -EPCjjvbdjJfHimXr -EPCkKvbdxwiKBpZk -DoCkKvbdLiBlQxAS -EObkKvbdXFxytAOs -EObjjvbdnQZxukYb -DncKjvbdZxcjNcMS -DnbkKvbdQcbaQQcr -EObkKvbdVgxVwgYz -DoDLKvbddoEsLUUS -EOcKjvbdTppnttgm -DoDKjvbdBhkBjhej -EPCkKvbdlhcsqVRa -DoDKjvbdZshiYcsO -DoDKjvbdtcDUvvPP -DnbkKvbdRkZFuGjs -DoCkKvbdaaVeFopX -EObkKvbdYORAXtut -DncLKvbdqwPlDJYq -DoDLKvbdbBWEepPw -DnbkKvbdVvhxWDdg -EObkKvbdfHkVqmpg -DncKjvbdaMjartmH -EPCkKvbdBhjbLIej -DoCjjvbdCIjbKiFj -DoDKjvbdkIHLefOL -EOcKjvbdrbGMlGkZ -DncLKvbdPxmAGsRj -EOcKjvbdZxdKODMS -DncKjvbdkDLjqHUg -EOcLKvbdjEkHUoAO -DoDLKvbdrovOjDVf -DncLKvbdZshiZESn -DncKjvbdUyIUZjnn -EPDLKvbdxmrhYSiD -DoCjjvbdaNKasUlg -DnbkKvbdYqMeJMdq -DncKjvbdZoOIeEyj -EOcKjvbdemGXGlik -EObjjvbdyzdnRhIh -DncKjvbdHEKvJbJj -EObkKvbdSCDdlIxk -EPCjjvbdGAoQxizm -DoCjjvbdaNKasVMg -EObkKvbdePErkTtS -EPCjjvbdlhdUQuSB -EPDKjvbdNQXpvOGs -DoCkKvbdXnRAYUut -EObkKvbdcTCkUEKB -DncLKvbdmRyUzSdJ -EPDLKvbdrSVLNkAm -DoCkKvbdJvUecdgJ -DoDLKvbdRDbaQRDr -EPDKjvbdYlSETmlN -EPCkKvbdbUagYKtI -EPCjjvbdssRrxzFD -EPCjjvbdRMwbYmtz -DnbjjvbdxrmhmRag -DoDKjvbdTvLpJtAq -EPDKjvbdVBBprprZ -DnbkKvbdRkYeuGkT -EOcKjvbdmbKWwoOV -EOcKjvbdZeYGzghb -EPCjjvbdFeirOJUR -DoCkKvbdZsiIxcrn -EPDKjvbdDnbkKvcE -DoDLKvbdsrrTZZeD -DncKjvbdJbjCpicY -DnbjjvbdcyxpXxpb -EPCjjvbdrXQLbhxq -DncKjvbdzROmJJwA -DoDKjvbdqdFIpNvB -EPDKjvbdkHfkfGNk -DoDKjvbdFjdsDINV -DoDKjvbdUyITyjoO -EOcLKvbdiUzEwRtb -EPCkKvbdmfeYMmgZ -DncLKvbdHgGyyXxH -EObkKvbdMuTSLNAX -DncKjvbdtbcUwWOo -DoCjjvbdVwIxWEFH -EOcKjvbdhgJcZWKV -DoCjjvbdsCFllHLZ -EPDKjvbdGcjvJbKK -EOcLKvbdnGeYNNfy -DncKjvbdZnnIeFZj -DoDKjvbdxUldqZLn -EOcKjvbdrovOibvG -DoDKjvbdUWLpKTaR -DncKjvbdePFTKtTr -EPDLKvbdFxtuAdYC -DoDLKvbdfIKvRnQg -EPDLKvbdypnmIjXA -DncKjvbdbUagYLUI -EPDKjvbdnVUyjiqf -EObkKvbdKWVGDeGi -EObkKvbdaNKbSuMg -DoDKjvbdNVSqkNAX -EObkKvbdhbPDFWqR -DoDLKvbdLGFhBaRV -EOcKjvbdbrcLUDjB -EObjjvbdZHXEAPTJ -EPCjjvbdCSaDTevr -DncLKvbdgQBzvcxI -EObjjvbdidjfuPAO -DoDLKvbdzjUoodTU -DncKjvbdGLEsChNV -EPCjjvbdNeDshiLE -EObjjvbdGGKRnIsq -EObkKvbdeYZtTqez -EOcKjvbdQwODblHc -DoCkKvbdkClLRHVH -EPCkKvbdxUldqYkn -EPCkKvbdvBDxsPFI -DnbkKvbdqvpLcIyR -DncKjvbdqmZixkhJ -DoDLKvbdkVwNdCYX -EObkKvbdUxgsykPO -EPCkKvbdjcLjpgUg -DnbjjvbdbUagYKtI -EObjjvbdDjHjWXjA -EObjjvbdrykpSaIO -EObjjvbdrbGMlGjy -DncLKvbdVYhUZjnn -DoDLKvbdjlakydfo -DnbkKvbdVTmUGMVj -EObjjvbdZjTIQHCG -EOcLKvbdZxcjNcLr -DoCkKvbdqTsgSRjt -DnbjjvbdCIkBkJFj -EPCkKvbdaogHELzd -EPCjjvbdNPxQunGs -EObjjvbdxZhFfXeS -DoDKjvbdjblKqHUg -EObkKvbdNPxRWNgT -DoDKjvbdkaNOmALA -EPDLKvbdxsOImSCH -EOcLKvbdZshhyETO -EPDLKvbdIHHZyYYH -DoDKjvbdliEURVRa -EObjjvbdiVZeXRtb -EOcKjvbdiHJcYvJu -EOcKjvbdIsYaTNXl -DoCkKvbdtlXvaTaX -EOcKjvbdNQYRVnHT -DoDKjvbddjJqvUzn -DoDKjvbdULuoBVoJ -DoDLKvbdUslselVj -EPCkKvbddePSCWbj -EPDKjvbdNeDtIiKd -EOcKjvbdiUzFXSUb -DoCkKvbdmRyVZsEJ -EPCjjvbduLwwAtBX -EPDLKvbdxZgfGXdr -DnbkKvbdBcpAujNG -DnbjjvbdZtJIyDrn -EObjjvbdmbJvwnmu -EPCjjvbdXnRAYVWU -EOcLKvbdyOShXsJD -DoCjjvbdptUGqqkU -DnbkKvbdFpASwHGZ -DnbkKvbdwtleRYlO -EPCkKvbdnHFYMmfy -EPDKjvbdKCjDQjDY -EObkKvbdeqaWzlDP -DoCkKvbdbLMGPODA -DoCjjvbdpyPIGqDx -EOcKjvbdbhmKLFwY -DoDLKvbdEOcKjwCd -EPCkKvbdePFTKtUS -EPCkKvbdtvNwipsA -EPCkKvbdzoQQdblY -EOcLKvbdKjaHvAJy -EPDKjvbdvPTzpkOt -EPDKjvbdMJCLpxAS -EObkKvbdWWhwvEEg -DnbkKvbdcJNJjevx -DoCkKvbdNQXpunGs -EPDKjvbdWSNxBdlD -EPDKjvbdwyhFeweS -DncKjvbdddnrCWcK -EObjjvbdeKJrVtzn -EObjjvbdrykosBIO -EPDKjvbdiiehKMxS -DncKjvbdrWpMCiZR -DoCjjvbddoFSjssr -DoCjjvbdbhmKKfWx -EObjjvbdmajWwoNu -EOcLKvbdDxYLstUM -EPCjjvbdddoRawDK -DncKjvbdmuUzKjSG -DoDKjvbdLFegbBRV -EPCkKvbdySnJMqbH -DnbjjvbdLLAgvAKZ -EPCjjvbdraemMHLZ -EObjjvbdnUtzLKSG -EPDKjvbdkDMLQgVH -DoDKjvbdkHgMGGOL -DoCjjvbdxsNiNSCH -EObkKvbdNQXpvOHT -EObkKvbdQwNdDLgc -DnbjjvbdegkWRnRH -DnbkKvbdGZUuAcwb -DncLKvbdiMEcmuCy -DoDLKvbdFfJqnJTq -DoDKjvbdZnnJFEzK -EOcLKvbdTqRPUtgm -EOcLKvbdRjyFuHLT -EOcKjvbdhtzEwRtb -EObjjvbdTXjkmzjx -DoDKjvbdqdFJQOVa -DoCkKvbdGckViajK -DncLKvbdDxXlUTsl -EOcLKvbdeUAUASlv -DnbkKvbdzjUpQETU -DnbkKvbdtcCuWuoP -DncLKvbdauBgXkUI -DoCjjvbdUVlPitBR -DnbkKvbdFfJrOItR -DoDLKvbdxnSgwsJD -EPCkKvbdXsMBNToY -DncLKvbdCTAcUFwS -DoDKjvbdhgJbxvJu -DoDLKvbdhkeDnUby -EObkKvbdEvZPpNKF -EPCjjvbdiHJcZWJu -EObjjvbdIHHZyYXg -DoCkKvbdegkVqmqH -DoCjjvbdxVNFRZMO -DoDLKvbdUQpntuIN -DoDKjvbdEJhJuwjA -DoDKjvbdkHflGGNk -DnbkKvbdmttykKRf -DncLKvbdZxdJmblS -DnbjjvbdZQmEhmEq -DoCjjvbdJcJcQjDY -DoDKjvbdBhkCLIej -DoDLKvbdmIcspuRa -DnbjjvbdqiAKElne -DoCjjvbdJpzEoFnF -EOcKjvbdyOShYTJD -DoCkKvbdmuVZjiqf -DoDLKvbdSCDeLhyL -EOcKjvbdJvUedFGi -EObkKvbdehLWRnRH -EPDKjvbdxmrhXriD -DoDLKvbdOTUWGeVQ -EPCjjvbdzRPMhiwA -EPDKjvbdKRZePGOF -DoCkKvbdrDeIomvB -EPDKjvbdkVvmdBww -DoDKjvbdIGfzYwwg -EPDLKvbdFVyPpNKF -DoDKjvbdhytfLqNf -DnbjjvbdMfbomQUk -EOcLKvbdtcDVXWOo -DoDKjvbdqwPlDJYq -EOcLKvbdZshiZETO -EOcLKvbdeEnrCXCj -EOcKjvbdZLrDsnLm -EPCjjvbdLYqKSzuG -DncLKvbdMtsRjmAX -DoCjjvbdJTZArlxM -EPCkKvbdlZSrTZGt -DncKjvbdRyjITCvA -DoCjjvbdEuxpPmKF -DnbkKvbdTYKkmzjx -DoDLKvbduDDVXWPP -DncLKvbdjAPfaPgK -DncLKvbdrEFJPnVa -EPCjjvbdrXQMChyR -DnbkKvbdznpQeDLx -DoCkKvbdjgflFfOL -EObjjvbdjlalZdgP -DoCjjvbdtbcUvvOo -DoCkKvbdrEFIonWB -EObjjvbdwXMAvAuu -DncLKvbdePFSkUTr -EPCkKvbdTppoUuIN -EPDKjvbdIxUCHlQp -DnbkKvbdBiLBjiGK -DoDKjvbdliDspuRa -EObjjvbdFkFTDIMu -EPCjjvbdsQVnjDVf -EPCjjvbdKefIBaRV -DoDKjvbdIryAsNYM -DoCkKvbdsrqrxzEc -EPCjjvbdLqwNZuQz -EOcLKvbdcIlikGXY -DoCjjvbdADSXizIp -DoCkKvbduaEZTOeI -DncKjvbdvBDyTPEh -EPCkKvbdRkZFuHKs -DoDLKvbdSLZFuGkT -EOcLKvbdfekzOHHA -EOcLKvbdkaMoNALA -DncLKvbdkNCMZeGo -EObjjvbdNsUVfduQ -EPCjjvbdZoNiEeZj -DoDLKvbdLYpirzuG -EPDKjvbdmoyxujyC -DoCkKvbdaMjbSuNH -EPDLKvbdxxIjCPzL -DnbkKvbdVAaqSprZ -DoCjjvbduVmxJqTA -DoCkKvbdRkZGVHLT -DoDKjvbdEuyQPljF -DnbkKvbdptUHSRkU -DncLKvbduLxWaUAw -EObjjvbdaaVdfQQX -EPDLKvbdWWiYVdFH -EOcLKvbdfelZmgHA -DoCjjvbdADRxKZiQ -EOcKjvbdfHkWSORH -EObkKvbdTAEiIBoE -DncKjvbdEKIKVxKA -DoCkKvbdkDMKpgVH -DnbkKvbdCWzciEpW -EObjjvbdxZgefXeS -EOcLKvbdsZkpTBIO -DoDLKvbdrJAKFMne -EPDKjvbdkWXNdBww -DnbkKvbdRbEFLhyL -DncLKvbdWXJYWDeH -EOcLKvbdijFgjMwr -DoDLKvbdnHExMnGy -EObkKvbdZeYGzhJC -DnbjjvbdEvZPpMie -EObjjvbdYpldiMdq -DoCjjvbdfRaWzlCo -EPCjjvbdGYtuBDxC -EOcLKvbdQYmAGrrK -EPCkKvbdlhcspuSB -DoDLKvbdezvZFIsw -EOcKjvbdlYsSTZHU -DnbkKvbdmfeXmOGy -DncLKvbdKDKDQicY -DncKjvbdZjTIQHCG -DnbkKvbdgFkzOHHA -DnbkKvbdaNLBsVNH -DoCjjvbdBsBCtGWr -DncKjvbdqdFIomvB -DnbkKvbdkNBlZdfo -DnbkKvbdSQTgKGDw -DoCkKvbddoFTLTsr -DoDKjvbdEYYLtTtM -EOcKjvbdVwJYWEEg -DoDLKvbdyOSgwrhc -DoCkKvbdZMRdUOLm -DoDLKvbdYSlBMtOx -EPCkKvbdkxsRsYft -DnbkKvbdrzLpTAgn -DncKjvbdRjxfUgKs -DnbkKvbdqquLNkAm -DoDLKvbdRMxCYnUz -EPCjjvbdZoOIdeZj -EObkKvbdrpWOicVf -EPDLKvbdkCkjqHVH -EOcKjvbdmSZUzSci -EObjjvbdRjxfUgLT -EObjjvbdNddThhjd -DoCjjvbdKVuFcdfi -EPDKjvbdzjVPodTU -DncKjvbdJTYaSmXl -DncKjvbddZyQXyQb -EPCjjvbdCIkCKiFj -EPDKjvbdTkunaWOi -EObjjvbdfIKuqnRH -DoCjjvbdZRMdiMeR -DnbjjvbdMpXpunHT -DoDLKvbdZRNEhmFR -EObjjvbdaoffdLzd -DoDLKvbdvAdYsOdh -DnbjjvbdSLZGUgLT -DoCjjvbdSCDdkiZL -DoDLKvbdelewHNKL -DoCjjvbdRXNdDMHc -EObjjvbdkWWnDaww -EObjjvbdcyxoxZRC -DncKjvbdelfWfljL -EObjjvbdZnnJEdzK -EOcKjvbdkHflGFnL -DoCkKvbdhbPCdwRR -EPDLKvbdHDkWKCKK -DnbkKvbdRadEkiYk -EOcLKvbdFWYopNJe -DoDLKvbdqTsfrSKt -EObjjvbdxnSgxTJD -EPDLKvbdxZhFewdr -EPCkKvbdTvLojTaR -EObjjvbdfIKuqnQg -EPCjjvbdDxXlTssl -EObjjvbdQvmccLhD -EObkKvbdRNXayOUz -EPCjjvbdatbGxLTh -EOcKjvbdOSsvGeVQ -EPDKjvbdePFTKstS -DnbjjvbdlYsRsZHU -DnbjjvbdZisIQGaf -DoCkKvbdsrqsYzEc -EObjjvbdfILVqnRH -DnbkKvbdZHWdAPTJ -DoDLKvbdEPCkLXCd -EObjjvbdEXwktTsl -DncLKvbdFVyQPlie -DncKjvbdNsUWHEtp -EOcKjvbdyqOmJKXA -EOcKjvbdADSYJyhp -EPDKjvbdUyIUZjoO -EOcKjvbdmJEURVSB -DnbjjvbdIwtBgkpp -EPCjjvbdZQmEhldq -EPCkKvbdDjHiuxKA -DoDKjvbdrEEiQOVa -DncKjvbdKDKDQjCx -DncKjvbdZRNFJMeR -DncLKvbdwygeeweS -DncLKvbdnUuZkKSG -DoDKjvbdvwMAvBWV -DoCjjvbdBhkCLIfK -DnbjjvbdoznDkXoA -EOcKjvbdjgflFemk -EObkKvbdKVtfDdgJ -DnbjjvbdXrkaNUPY -DncKjvbdhlEdNtby -EPDKjvbdemGWfmJk -DoDLKvbdlhctQtrB -EObjjvbdnVVZkJqf -EObjjvbdwuNEpyMO -DoCjjvbdTpqOuVHm -EObjjvbdbLLennDA -DoDLKvbdiGjDZWKV -EPDLKvbdFjeTDHlu -DoDLKvbdDxYLstUM -EPDLKvbdiUzFXSVC -DncKjvbdJYTbHkpp -DoCkKvbdZshhxdSn -EPDKjvbdxrnIlqag -EOcLKvbdiHJcYvJu -DnbjjvbdkVwNcaxX -EObjjvbdpyPIGpcx -EPCkKvbdauCGxLUI -EObkKvbdWRnXadkc -DnbkKvbdVUNUGLvK -EObkKvbdDxYLsssl -DnbkKvbdCJKbKhfK -DncLKvbdbhmKKfXY -EOcLKvbdZoOIeFZj -DoDLKvbdkNCLzFHP -EObkKvbdpxnggQdY -EObkKvbdYqNFJNEq -EPCjjvbdyzdnSHhh -EOcKjvbdczZQYZQb -DncKjvbdZyDimblS -DncLKvbdyOTIXrhc -EObjjvbdhzUelQnG -EObjjvbdFjeTChNV -DoCjjvbdwMvANEEm -DoDLKvbdRXOEDMID -DncKjvbdiHJcYvJu -EOcLKvbdhtzFWrVC -DncKjvbdVYgsykPO -DoCjjvbdGGKRmiUR -EPDLKvbdQmXbYnUz -DnbkKvbdkIGlFemk -DoCjjvbdSPsgJfDw -DncKjvbdzjVQPcrt -EPDKjvbdmfdxNNfy -EPDKjvbdZyDimblS -DoDKjvbdANIZSvzY -DoCkKvbdJqZdoGOF -EOcKjvbdcJMijewY -DncLKvbdNQXqWNfs -DncLKvbdkNBlZeGo -DoCjjvbdHffzZYXg -DoDKjvbdjhHMGGOL -DnbkKvbdiCObdvpq -DoDLKvbdYlRctNkm -EObkKvbdiUzEwRuC -DncLKvbdMfbomPuL -EPCkKvbdlZSrSyGt -DncLKvbdvAcxroFI -DoCjjvbdNGcQNQUk -DncKjvbdWSNxBeLc -EPCkKvbdqvokcIyR -DncLKvbddZyQXxqC -DoCkKvbdvPTzqLPU -DncLKvbdZxcjNblS -EPCjjvbdkMbLzFHP -EPCkKvbdlYrqsYgU -DnbjjvbdWSOXbFMD -DnbkKvbdWeyZtAPT -EPCkKvbdEKHivYKA -DoCkKvbdkNBkyeGo -DoDLKvbdiBoDEvqR -DoDLKvbdRkYfVGjs -EOcKjvbddneSkUTr -EObjjvbdFejRnItR -DncLKvbdLAjgMbXq -DnbkKvbdUGznLwVe -DoDKjvbdLqwNZtpz -EPDKjvbdUxhTyjnn -EPDLKvbdkNBkyeHP -DoCjjvbdgFkzNgHA -EObjjvbdunszpjnt -EPCkKvbdtAHQhABS -DnbjjvbdbKkfOnDA -DoCjjvbdVviYWEFH -DoCjjvbdGZUuAdXb -EObjjvbdhlFDmuCy -DncLKvbdyfyMAMdw -EObjjvbdFyUtaDxC -DnbkKvbdeEoSCXDK -EOcKjvbdbVCGwjtI -EOcLKvbdTAEhgand -EObkKvbdRpUHJecw -DnbjjvbdZsiJZDrn -DncLKvbdtSqrxyeD -DoDKjvbdJSxaSmYM -EPCkKvbdjuvnECYX -DoDLKvbdrMyjYkgi -DnbkKvbdjJegjNXr -DoDLKvbduaDxsOdh -DoDLKvbdmIcsptrB -EObkKvbdFkFTDHmV -DnbjjvbdYORAYVVt -DncLKvbdddoRbWcK -EPDLKvbdLrWmZuQz -DoDLKvbdliETpuRa -DoCjjvbdbrcKsdKB -DoCkKvbdHkazmvpk -EPCjjvbdUaBpsRRy -EObkKvbdKfFhBaQu -DoCkKvbdKQydnfNe -EOcLKvbdDjIKVxKA -DncKjvbdpeceUWBI -DncLKvbdKaLHNBxR -EPDLKvbdptTfrRkU -EPDKjvbddndsLTtS -EObjjvbdMpXpvOHT -DnbkKvbdaMjaruNH -DoCkKvbdpecdtVaI -DncLKvbdRpTfjGEX -EObkKvbdCSaCsevr -DoCkKvbdnHEwmNgZ -EObjjvbdfHjuqmqH -DoDKjvbdKWVGDeGi -DoDLKvbdWHxVxHYz -DnbjjvbdXsLaMsnx -EPDLKvbdDjHiuwjA -DnbjjvbdaaWFGQQX -DnbjjvbdsrrTZZdc -DoCjjvbddneTKtUS -DoDKjvbdcJMjLFvx -DoDKjvbdaNKbTUlg -DnbjjvbdkHflFfOL -EObjjvbdJpzFOeme -DoCjjvbdrounibuf -DoCjjvbdHgHZxwxH -EOcLKvbdSKxeuGkT -EOcLKvbdzQoNJJwA -EObjjvbdZnnJEdzK -DoDLKvbdJuuFcdfi -DncKjvbdIryBSmYM -EObkKvbdyYJJaozL -EObjjvbdFkEsDHmV -DnbkKvbdfMfXHMjL -DnbkKvbdLGGIBaRV -EOcLKvbdRXNdDMHc -DoDKjvbdegjvRnRH -DnbkKvbdKeegaaQu -DnbjjvbdkMakzEgP -DoDKjvbdcTDKtEKB -DncLKvbdhaoDEvqR -DncLKvbdmgEwmNfy -EPDKjvbdCIjbLIfK -DncLKvbdJvUedEgJ -DoCjjvbdFVxpPljF -EOcLKvbdJYUCIMRQ -EPDKjvbddwyssrFz -DoDKjvbdiMEdOUcZ -DoDKjvbdZQleIldq -EPCkKvbdnQZyVkYb -DoCjjvbdNGbpNPuL -DoCkKvbdOStVgFVQ -EOcKjvbdGBPQxizm -DnbjjvbdOXoVzcnU -DncKjvbdyqPNIiwA -DoDLKvbdkIGlGGNk -EPDKjvbdbiNKLFvx -DoCkKvbdCTBCsfWr -DoDKjvbdShyjRABM -EPCjjvbdxwhjBozL -DoCkKvbdqUUHSSLU -DoDKjvbdbBVdfPow -DoCkKvbdqYnggRDx -DoCkKvbdtkwwAsaX -EPDLKvbdZMSDsnMN -EPDLKvbdZjTIQGbG -EPCjjvbdzoPpdblY -EPDKjvbdVviYWEFH -DnbjjvbdUsltGLuj -DoCkKvbdQdDAopcr -EPDKjvbdZxcjNbkr -EPCjjvbdZisHpGbG -EPDKjvbdEuxpPmKF -EOcKjvbdQwNccLgc -EPCjjvbdEYYLstUM -EObkKvbdZRNEhmEq -DoDKjvbdaRfDIUGL -DncKjvbduaDxsOeI -EObkKvbdmaiwYPOV -EOcKjvbdKDJbqJbx -DoDKjvbdQvnEDLgc -DnbkKvbdtlXvaTaX -EPDKjvbdzQoNIiwA -EOcLKvbdNeDsiIjd -DnbkKvbdBdQAvJlf -DoCkKvbdhzVGMROG -EPDLKvbdUaCQsRRy -EOcLKvbdZisHogCG -DoCkKvbdlqxtzTDi -DoCjjvbdRkZGUgKs -EObkKvbdZnmhdeZj -EOcLKvbdZjTHogBf -DncLKvbdhytfLqNf -EPCkKvbdnPyxvKxb -DncLKvbdjcMKqHVH -EPCkKvbduWNwjRTA -DnbkKvbdwygfGXeS -EObjjvbdTlWOaVoJ -EPCjjvbdUtNUGLvK -EObkKvbdKkAgvAKZ -EObkKvbdaMkCTUmH -EPDKjvbdOFDshhjd -EPDLKvbdhzUfLpmf -EPCkKvbdkySrTYgU -EOcLKvbdFfKSNhsq -DncKjvbdOAJTUKSA -EPDLKvbdrDeJPmvB -EPCkKvbdKRZdnfNe -EPCjjvbdRDcAoqDr -EOcKjvbdNHDQNPtk -EOcLKvbdVTmTfMVj -EOcKjvbdrXQMChyR -DoCjjvbdZQmFJNEq -EPCkKvbdWRmwadkc -EObkKvbdSCDeLhyL -DncKjvbdyNsHxTJD -EPDKjvbdtSrTYydc -DoDLKvbdiGjCxuiu -DoCkKvbdrNZjZLgi -EPDLKvbdJmADzGuB -DncLKvbdtcCuWuno -DnbjjvbdDxXktTtM -EPCjjvbddZyPxZQb -EPDLKvbdlqxtysDi -DoDLKvbdbAueGPpX -EObjjvbdVviXvDdg -EPDKjvbdBdQAvKMf -DnbkKvbdPxmAHSqj -DoDLKvbdUsltFlWK -DncKjvbdVhYWYHYz -DoDKjvbddwzTtSFz -DncLKvbdIGfzYwwg -EPCjjvbdmJDsqUrB -EPCkKvbdGQASwGey -EOcLKvbdTlWOaVoJ -DncLKvbdLFehCBRV -DnbjjvbdTkvOaVoJ -EPCkKvbdwXMAvBWV -EObjjvbdpxnhGqDx -EOcLKvbdsrqryZeD -DoDLKvbduVnXjQsA -DncLKvbdRotHKFdX -EOcKjvbdnUtyjirG -EOcKjvbdCJLCLJFj -EOcLKvbdSCEFLiYk -DoDLKvbdjcMLQgVH -DoCkKvbdLBLGlaxR -EObkKvbdZQldiNFR -EOcLKvbduMXwAsaX -DncKjvbdxrnIlrBg -EObkKvbdehKvRnRH -DoDLKvbdRosfiecw -DoCkKvbdFjdrcINV -EPCjjvbdkWWmdBxX -DnbjjvbdFkFTDHlu -DoCjjvbdTAEhgaoE -DoDKjvbdANIZTWyx -EObkKvbdJSyAsNYM -EPDLKvbdqTtHRqkU -EPDKjvbdbBVeFoow -EPCkKvbdYSkaMsoY -DncLKvbdDnbkKwDE -DncKjvbdMSWlzUpz -DncKjvbdauCHXjsh -DoCjjvbdTvMQKUBR -DoDLKvbdrRuLOLAm -EOcKjvbdatbGxKtI -DncLKvbdNGcQMotk -EPDKjvbdiCObeWqR -DoDKjvbduDDUwVno -DncLKvbdYlRcsmkm -DncKjvbdbAueFoow -EObkKvbdYTMBNToY -DncKjvbdvAdYsPEh -EObjjvbdBdQBWKMf -DnbkKvbduCbuWuno -EOcLKvbdKWVGEFHJ -EObkKvbdcyyQXxqC -DnbkKvbdaMjasUmH -EPCkKvbdmgEwlmfy -DoDLKvbdrDdiQOVa -DoDKjvbdUyIUZjnn -DnbkKvbdnBjXYOnV -EOcKjvbdRpTgJfDw -DncKjvbdjcLjqGuH -DnbkKvbdZjTIQHCG -EOcKjvbduVnYKRTA -DnbkKvbdGckWJbKK -EObjjvbdZyEJnDMS -DncKjvbdNsUWGduQ -EObjjvbdKQzEoFme -EOcKjvbdVUMtGLvK -EPDKjvbdrJAKFMoF -DoCkKvbdNrsvHFVQ -DncLKvbdSKyGUfjs -DoCkKvbdVvhxWEFH -DncLKvbdFejRnIsq -EObjjvbdVYhUZkOn -DoCjjvbdxUmEpxkn -DoDLKvbdBiLCKhej -DoDKjvbdIjEAJofd -EOcKjvbdwzHfFwdr -DncKjvbdFjeTDHlu -DnbjjvbdbiMjKewY -DnbjjvbdaNLCTUlg -EObjjvbdDwxMUUTl -DoCkKvbdmttykKSG -EPDKjvbdiUyeXSVC -EPDLKvbdWIYVwfxz -EPDLKvbdemFvgMik -DoCkKvbdUyHszKoO -EObkKvbdTXkMNzjx -DoDKjvbdSQTgKFdX -DnbjjvbdLiBkpxAS -EPCkKvbdRosgKGEX -DoCkKvbdmfdwmNgZ -DncLKvbdiHJbyViu -DncLKvbdxrnJMqbH -EOcKjvbdhlFENtcZ -DoCjjvbdbKkennDA -DnbkKvbdGckWKBjK -DnbjjvbdUyIUZkOn -EPDKjvbdeEnrCXDK -EOcKjvbdsBfMkgKy -DncKjvbdxsNiNSBg -EPDKjvbdkNCLzEgP -EPDKjvbdSKyGVGjs -DoDKjvbdrWolChyR -DncLKvbdWSNwaeLc -EOcKjvbdJYTbHkqQ -DnbjjvbdZshiZDsO -DoDKjvbdSKxfUfjs -EPCkKvbdptTgRrKt -EPCjjvbdREDApQdS -DncLKvbdtvOXjRTA -EPDKjvbdemGXGljL -EObjjvbdBdQAvJmG -EPDLKvbdhuZdwRuC -DncLKvbdjvWnDaxX -EPDLKvbdFVxopMie -EPCkKvbdajkeoNcA -EPCjjvbdSPsfifEX -DnbkKvbdBsAcTfWr -EPCjjvbdEOcLLWcE -DoCjjvbdZLrDsmlN -EPCkKvbdxnSgxTIc -EObjjvbdGQATXGey -EObkKvbdbsDLUEKB -DoCjjvbdrSVKmjaN -EPCkKvbddneTLUUS -DoCkKvbdxmrgwsJD -EPDKjvbdGYuVAdXb -DncLKvbdauBfxLTh -EPDLKvbdrMzKZLgi -EObkKvbdUsltGLvK -DnbjjvbdDxXlTstM -EObkKvbdsBfNLgLZ -DncKjvbdidjgUoAO -EPDLKvbdJJdAKQHE -EOcKjvbdbBWFFpQX -EPCjjvbdSZihTDWA -EPCkKvbdhgKCxuiu -DncKjvbddneTLUTr -DoDKjvbdczZPxZRC -DnbjjvbdlYrrTYft -DoDKjvbdWXJXvEEg -EPDLKvbdbhmJkFvx -EPCjjvbdDxYLtTsl -EPDKjvbdqdFIonVa -EObjjvbdCIjbLIej -DnbjjvbdmbKXXnmu -EPDKjvbdlZTSTYft -EPDKjvbdwXMBVaWV -DnbjjvbdSPtGjGEX -DoDKjvbdrMzKYlHi -EPCkKvbdiVZdwSVC -DnbjjvbdptUHSSKt -DncLKvbdcSbjscjB -DoDKjvbdSPsfiecw -EOcKjvbdegkVqnQg -EObkKvbdjuvmcbXw -DncKjvbdCJLCKhfK -EObjjvbdVqnYBeMD -DoCjjvbdKCjCqJcY -DncLKvbdZRMdhmEq -EOcKjvbdrRtkOKaN -DoDLKvbdRpTfiedX -DoCjjvbdRMwbZOUz -DoCjjvbdrXQMDIxq -EObjjvbdsrqsZZdc -DnbjjvbdfjfzbfAE -DoCkKvbdJSyBTMxM -EPDKjvbdnCJvwoNu -DoCjjvbdmbJvwoNu -DnbkKvbdFWZQPljF -DncLKvbdxnSgwriD -DnbjjvbdVvhwucdg -DoCjjvbdjgfkfFnL -DncLKvbdzRPMiKXA -EOcLKvbdqZPHgREY -EPCkKvbdrylPsAgn -EPCkKvbdVZITykPO -DoCjjvbdhkeEOVDZ -EOcKjvbdUVkpJtAq -EOcKjvbddCTMrAUN -EPDKjvbdZeXfzghb -EPCjjvbdiMFDmuDZ -EPCjjvbdJKEAJpHE -EOcLKvbdajkeoODA -DnbjjvbdZRNEhmFR -EOcLKvbdNHCpNQVL -EObjjvbdmRxtzSci -DoCjjvbdzRPMhjXA -DnbkKvbdnGdwmNfy -EObkKvbdvAcxsOeI -DoDLKvbdBsAcTevr -DoCkKvbdozmdKxPA -DnbkKvbdTlVoBVoJ -EPCkKvbdqwQLcIxq -DncLKvbdbiMjLGWx -DoDLKvbdfHkWRnRH -EOcKjvbdbVCGxKsh -DoCjjvbdTqRPUthN -DoCkKvbdbQGgELzd -EOcLKvbdQZNAHSrK -DoDLKvbdZyDjNbkr -EPCjjvbdqiAJdmOe -EObkKvbdKaLHNBxR -DncKjvbdyXhjBozL -EObjjvbdDjIKWYKA -EOcKjvbdLFegaaQu -EPDKjvbdZjTIPgCG -EOcLKvbdfHjuqnQg -DnbjjvbdlhcsqVRa -DoCjjvbdMuSqkNAX -DncLKvbdCIkBkIej -DncKjvbdUaCQsQqy -EObjjvbdRbDdkhyL -EOcKjvbdpssfrRkU -EOcKjvbdLGFhBaQu -EPCkKvbdqqtjnLBN -EOcLKvbdWRmwbEkc -EObjjvbdpedFTuaI -DoCkKvbdJJdAJofd -DoDLKvbdwNWANEEm -EPCkKvbdYgWdAOri -DoDLKvbdvAcyTOeI -DnbkKvbdbhmJjfWx -EOcLKvbdypnliKXA -EOcKjvbdZyEJnClS -DoCjjvbdZoNhdeZj -EPCkKvbdkDLkRGtg -EObjjvbdNsUWGdtp -DnbjjvbdZQldhmFR -EOcKjvbdYpmEhldq -EPCkKvbdZQmEiMeR -DnbjjvbdhytfLpnG -EObjjvbdmtuZkJrG -EObjjvbdGLEsDINV -EPCjjvbdVhXvYHYz -DoDLKvbdKefICAqV -DncKjvbdUtMsfLvK -EOcLKvbduaEZTOeI -EPDKjvbdddoSBwDK -DoCkKvbdffLymgHA -DnbkKvbdbAueGQQX -DnbkKvbdbrcLTcia -EPCjjvbdRbEElJYk -DoCkKvbdGFirNiTq -DoDKjvbdNdctIhkE -EPDLKvbdQccAoqES -DnbkKvbdFfKRnJUR -DnbjjvbdFfJrNiUR -EPDLKvbdCfkegAzc -EPCjjvbdRXNccMHc -DoCkKvbdZjShPgBf -EOcKjvbdSLZGUfkT -DoDLKvbdBcpAujMf -EOcLKvbduWNwiqTA -DoDLKvbdpyOgfqEY -EOcKjvbdcScKtEJa -EObjjvbdnCJwXoNu -DnbkKvbdjFLGtoAO -DoCjjvbdXrlBMsnx -EPDKjvbdhgJcZWJu -DoCjjvbdiBoDEvpq -EPDKjvbdczYoxYqC -DoDLKvbdjFLHVPAO -DnbjjvbdbPgGdLzd -DoDKjvbdWIYWYGxz -DncKjvbdhytfLpnG -EObjjvbdfHjuqnQg -DnbjjvbdmgExMmgZ -EOcLKvbdhgKDYuiu -EPDKjvbdmJEURVRa -DoDLKvbdJpyePGNe -DoDLKvbdlhdUQuRa -EObkKvbdmuUzLKSG -DnbjjvbdxwhjBozL -EPDLKvbdVZIUZjnn -EPDLKvbdJpydnfOF -EPCkKvbdqqtjmjaN -EPCkKvbdZoOJFFZj -DnbjjvbdmttzKjRf -EPDLKvbduWOXjQsA -EOcLKvbdwtleRYkn -DoCjjvbdLYpjSzuG -EObjjvbdIsYaSmYM -DnbjjvbdyzeORhJI -EOcLKvbdkWWnECXw -EPDKjvbdVviYVcdg -DoDKjvbdBcoaVjMf -DoCkKvbdiMEcmuDZ -EObjjvbdLKaHvAKZ -DncLKvbdJTZArlwl -EOcLKvbdhaoCeWpq -DncLKvbdrWpLcJZR -EObkKvbdHkaznWpk -DnbjjvbdzjVPocrt -EOcKjvbdyqPMhiwA -DoCkKvbdpstHRqkU -DnbkKvbdRkYfVHKs -DoDLKvbdVgwvYGxz -EOcKjvbdFfKSNiUR -DnbkKvbdqquLOLBN -DncKjvbdOAJTTjSA -DoDKjvbddneSkUTr -EObkKvbdlqyUysEJ -DoDKjvbdbhmKKevx -EOcLKvbdiCObdwQq -EPCkKvbdFejSNiTq -EObkKvbdwygfGYEr -EPDLKvbdsQWPKDVf -DncKjvbdjbkjpfuH -EPDKjvbdRkZFuGjs -EPDKjvbdwyhFfXdr -DncKjvbdcIlikFvx -DoCkKvbdiUydwSVC -DncKjvbdiUzFXSVC -EOcKjvbdjKFgimYS -EPDKjvbdjvXODaww -EPCkKvbdRbDdlJZL -EObkKvbdrEEhpNvB -EObjjvbdrpVoKDWG -DoCjjvbdNxPVzcnU -EPDKjvbdVgwvYHYz -DnbjjvbdmuUyjirG -EObjjvbdrSVLNkBN -DncKjvbdUWLojUBR -EOcLKvbdwygefXeS -EObkKvbdhaoDEvqR -EOcLKvbdGGKRmiUR -EOcKjvbdeEnqawDK -EPDLKvbdGGJqnItR -DoDLKvbddeOrBvbj -DnbkKvbdiVZeWquC -DncLKvbdJcJcQjDY -EPDLKvbdkDMLQgUg -EObjjvbdemFvflik -EObkKvbdwzHeewdr -DoCjjvbdHDjuiajK -DoCkKvbdrEEiPnVa -EOcLKvbdypnmJKXA -DoDLKvbdmgFXmOHZ -EObkKvbdUsmUFkuj -EPDLKvbdcScKtDjB -EPCkKvbdUyITzLOn -DncKjvbdZnnIddyj -EPCkKvbdaaVeGPow -DoCjjvbdSQTfifDw -DoDKjvbdDoDKkXCd -DncLKvbdhtzEwRuC -EObkKvbdMpXqVnGs -DoDKjvbdDncLLXCd -DoCkKvbdtcDUwVoP -DoDKjvbdtSqryZdc -EPDKjvbdbBWFGPpX -EPCjjvbdmRxtyrdJ -DoDLKvbdGckVjCJj -EObjjvbdzoPpeCkx -DnbjjvbdKWVFceHJ -EPCjjvbdSKyGVHLT -DoDLKvbdelevgNKL -DoCjjvbdTXjlNzkY -DoDLKvbdpstHSSLU -EPDKjvbdhgKCxuiu -EObkKvbdZQleJMeR -EPCjjvbdKVuGDdfi -DncKjvbdUGzmkvvF -DncKjvbdxrnJMqbH -EPCjjvbdKVuGDdgJ -EObjjvbdptTgRqjt -EObjjvbdCDpAujMf -EPDKjvbdczZQXyRC -DncLKvbdqYngfpdY -EOcLKvbdqBIeAXIE -EPDLKvbdZLrETmlN -EPDKjvbdNeEThhjd -EOcLKvbdmbKWxOnV -DoCkKvbdCDoaWKNG -EOcLKvbdEOcKkWbd -EPCkKvbdNQXpvOGs -EPDLKvbdFyUtaDxC -EPDKjvbdbLMGOnDA -DoDLKvbdJcJcQjDY -EPDLKvbdOTUWHFUp -DoCjjvbdmgFXlnGy -EOcLKvbdRDbaQRES -DoDLKvbdcyxowxpb -EPDLKvbdliEURVSB -EOcKjvbdXnRAXuWU -DoCkKvbdDnbjjwDE -DoCkKvbdKVuGEEfi -EObkKvbdyOTHxShc -EPDKjvbdySnIlqbH -DoDLKvbdHELWJbJj -DnbjjvbdyOTHxShc -DnbjjvbdczZQXxpb -EPDLKvbdZLrDsmkm -EPCjjvbdfNGWflik -EPDKjvbdmbKWwnmu -DncKjvbdrDdiPnWB -EObjjvbdHDjvKCKK -DnbkKvbdUVkojTaR -EObjjvbdptTfrSKt -EPDKjvbdFxttaEXb -DoCkKvbdjvXNcbYX -DoCkKvbdSLYfUgKs -EOcKjvbdHakzEzAD -DncLKvbdiCObdwQq -EPDLKvbdZLqdUNlN -DoDLKvbdhkeDnVCy -EPCkKvbdemFvgNKL -EObjjvbdliDtQuRa -EObkKvbdwuMdpxkn -EObkKvbdirzhrkJz -EPCjjvbdJYTahLqQ -DncLKvbdIHGyxwwg -EPCjjvbdSQUHKGEX -DoCjjvbdZshiYcsO -EOcLKvbdPyNAHSrK -EPCjjvbdbsCjscia -EObjjvbdUWLojUBR -DoDLKvbdKeehBaQu -EObjjvbdjuwODaww -DoDLKvbdtkxXAsaX -DncLKvbddneSkTtS -DnbjjvbdZtJIxcsO -DnbjjvbdJTYaTNXl -EPCjjvbdGKeTDHlu -DoDLKvbdKQydoGNe -DoDKjvbdVrOXaeLc -EPCkKvbdzHYlAMeX -DoDLKvbdBvzchdov -EObkKvbdapGgELzd -DoDKjvbdaMkBsUlg -DnbjjvbdVUNTelWK -EObjjvbdiHJcZWKV -DncLKvbdZoNheEyj -DncKjvbdDHMFgAzc -DnbkKvbdFpATXGey -EPDKjvbdMpXqWOHT -EPCjjvbdmSZVZrdJ -EPDKjvbdcIljKfXY -DoCkKvbdjcLkRGuH -DoDLKvbdGYuVBEXb -EObkKvbdWXIxWDeH -DncKjvbdQlxCZOUz -DnbjjvbdYNqAXtut -EPDLKvbdGdKvJbJj -DoDLKvbdGLFSbglu -EPCkKvbdRjxfVGkT -DoCkKvbduCbuXWOo -DoCjjvbduCbtvuno -EObkKvbdjAQGaQGj -DoDLKvbdqBJFAXHd -EOcKjvbdkClKpgVH -EOcLKvbdiMFDmtby -EPDLKvbdjvXNcbXw -EPCkKvbdxUmFRYkn -DoDKjvbdHgGyyYXg -DoCjjvbdRzJhScWA -DnbkKvbdlZTRsYgU -DnbkKvbdFVxpQNJe -EPCkKvbdZyEJmcMS -EObjjvbdZQldhmFR -EObjjvbdYSlBMtPY -DncLKvbdvBDxsOdh -DoDLKvbdvAdYrndh -DoCjjvbdZyEJmcLr -DnbkKvbdKaLGmCXq -DnbkKvbdZQmFImEq -EOcKjvbdqvolDIxq -DnbkKvbdVqnYBdkc -DoCkKvbdnPyxvLZC -EOcLKvbdmJEURUqa -DoDLKvbdfHkVrNpg -DoCjjvbdznopdblY -DoCkKvbdjvWmdCXw -EOcKjvbdunszpjnt -EObkKvbdzoPqFDMY -EObjjvbdDxXktTtM -EObjjvbdBcoaVjMf -DncKjvbdtcDVWuno -EObjjvbdpyOggQdY -DnbkKvbdwWkaWAuu -EPCjjvbdajkeoODA -EOcKjvbdKNAEZfta -EOcKjvbdZisIQHCG -DncLKvbdEXwksstM -DoDKjvbdtbbuXVoP -DncLKvbdDxYMTstM -DoCkKvbdcyyPwxpb -EPCkKvbdxmrgwsJD -DoDKjvbdYSkaNUOx -EOcLKvbdxwhjCPyk -DncKjvbdUsmTekuj -DnbkKvbdkVwOECXw -EObkKvbdnBjXYOnV -DncKjvbdcasNSATm -EPDKjvbdTAFIhCOd -DnbkKvbdkWWnECYX -DnbkKvbdFjeSbgmV -DoCjjvbdJzoewdAN -DnbkKvbdZeXfzhIb -DncKjvbdMJCLqYAS -DoCkKvbdGLFTCglu -DoDLKvbdMuSrLNAX -EOcKjvbdqceIomvB -DoDLKvbdegkVqnRH -DoDKjvbdKfGICBQu -EOcKjvbdEvYopNKF -DnbjjvbdlrZVZsEJ -DoDLKvbdqqtjmjaN -DncLKvbdQmXaxmtz -EPDKjvbdCDoaVjNG -EPCkKvbdqquLNjaN -DnbjjvbdKRZdoFnF -DoCkKvbdkVwOECYX -DncKjvbdGQATXGfZ -DncLKvbdCDpAujMf -EOcKjvbdDxXlUUTl -EPCjjvbdYkrEUNlN -DnbjjvbdZtJIyETO -DoCjjvbdXsMAltPY -EOcLKvbdxxIjCPzL -DoDLKvbdSLZFuHLT -DncKjvbdFVyQQMjF -DoCjjvbdFaOpyJzm -EPCjjvbdrJAJdmPF -EOcLKvbdMuSqjmAX -DncLKvbdEJgiuxKA -EPDKjvbdBdQAuimG -DnbjjvbdWXIxVdFH -DnbkKvbdHDkVjBjK -EPDKjvbdnHEwlmgZ -EPCkKvbdBiKbKhfK -EPDKjvbdhyuGLpnG -DoCkKvbdZsiJZDsO -DnbjjvbddBrlrAUN -DoCkKvbdYqMeIldq -DncLKvbdZLqdUNkm -EOcLKvbdMuSrKmAX -DoCkKvbdDxXksstM -EOcKjvbdqdEiPmua -DoCjjvbdOEdUJIjd -DoCkKvbdEObkLWbd -EObkKvbdfekynHHA -EPCkKvbdrEFIpNvB -DnbkKvbdnBjXXoOV -EPCjjvbdmgEwmOGy -DncKjvbdKCjDQjCx -EPDKjvbdJqZdoGOF -DncKjvbdUsmTfLuj -DoDLKvbdjcMKpgUg -EPDLKvbdSQUGjGDw -DnbjjvbdRacdlJYk -DncKjvbdYgXEAOsJ -EPCjjvbdhficZWKV -DoDKjvbdGAnpxizm -EPCkKvbdRbDeLhyL -DoDKjvbdiBncEwQq -DoCkKvbdxZgfFxFS -DoCjjvbdqvpMChyR -EObjjvbdbUbGxKtI -DoCkKvbdEObkKvcE -DnbjjvbdKQzEnfNe -DoCjjvbdRWnDblID -DnbkKvbdkxrqsYgU -DncLKvbdqwPlCiYq -EPDKjvbdSZjHsDWA -DncLKvbdEPCjjvbd -EOcLKvbdpyPIGpcx -DncLKvbdbVCGwkTh -DnbkKvbdnPzZWKxb -EObkKvbdGKeTDIMu -EOcKjvbdiifIKNYS -DncLKvbdnQZxvKxb -EPDLKvbdGFjSNiUR -DnbjjvbdRNXaxnUz -EPCjjvbdOTTvGduQ -EObkKvbdUtMselVj -DoCjjvbdnUuZkKSG -EPDKjvbdQmXaxnUz -EPCkKvbdNeDtIhjd -DncLKvbdNxOuzdOU -DncKjvbdJJdAJpGd -DoDKjvbdwuNEqYkn -DncKjvbdZMSDtOLm -DnbjjvbdNeDsiJLE -EPCjjvbdJpzEoGOF -EPCjjvbdkDLkRGtg -DoCjjvbdUWLpJtAq -EPDKjvbdfMfWfljL -EPCkKvbdrMzJyMIJ -DoCjjvbdJKEAJofd -DnbjjvbdnBiwXoNu -DoCjjvbdDihJvYKA -DnbkKvbdSZigsDWA -DoCjjvbdFejRmhsq -DnbkKvbdaMkCTVNH -EObkKvbdczZPxZRC -EPDKjvbdVZIUZjnn -DoDKjvbdkySrTZGt -DoDLKvbdsPvPKDVf -DoCkKvbdwWlBVaVu -EPDKjvbdANIZSvyx -EPCkKvbdnHFYNNgZ -DnbkKvbdNdcsiIkE -EPDLKvbdDoCkLWbd -EPDKjvbdQccBPqDr -EObkKvbdSPsfifEX -EOcKjvbdelfXHNJk -EObkKvbdFfKRmiUR -EOcLKvbdKCibqKDY -EPDLKvbdUWLpJsaR -EPCkKvbdKfFhCBQu -EOcKjvbdmuUzLJrG -EOcLKvbdBdQBVjMf -EOcKjvbdfpBzvcwh -EOcKjvbdmRyUzSci -EOcKjvbdFVxpPlie -DnbjjvbdDwwlUUUM -DncKjvbdUyHsyjoO -DoCkKvbdUslselVj -DncLKvbdmuUykJqf -DncLKvbdLFfHbApu -DncLKvbdhyuFlROG -EPDKjvbdxnTIYTJD -EPDKjvbdTulPjUAq -DoCjjvbdCDoaWJlf -DoCkKvbdbLMGOnDA -EPDKjvbdOStVfdtp -EPCkKvbdZRMeImFR -DoDLKvbdiVZeXRuC -EPDKjvbdRosfiedX -DoCjjvbdnGeYMnGy -DoCjjvbdiiehKNYS -DncKjvbdbhmKKfXY -EOcLKvbdnBjXXoNu -EPDKjvbduLwwAtAw -EOcLKvbdygYlAMeX -DoCkKvbdNsTvHEtp -EPCjjvbdsrrTYzFD -EPCkKvbdBdQAuimG -DncKjvbdmfeYMnHZ -EOcKjvbdxZhFexEr -DncLKvbdZshhyETO -EObkKvbdOFEUJJLE -DoDLKvbduDCtvuoP -EOcKjvbdGZVVBEYC -EObjjvbdZRMeJNEq -DnbkKvbdkxsRsYft -DnbkKvbdsBfNLfjy -EOcLKvbdNPxQvOHT -DnbjjvbdpstHRqkU -EOcLKvbdZQleJNFR -EPCjjvbdxVNEpxkn -DoCkKvbdwtmEqZLn -DoCkKvbdGAoQxizm -DoDLKvbdVqmwaeLc -DoDKjvbdKfGHaaQu -DoCjjvbdcJNKLGWx -EPDLKvbdrzMPsBHn -DncKjvbdfoazwDxI -EPDKjvbdZyEJnClS -DnbjjvbdwMvANDeN -EObjjvbdZshiZETO -EPDKjvbdUslselVj -DoDKjvbdwtmEpyLn -DncLKvbdJTYaTMxM -EPDKjvbdvBDxsOeI -DoDKjvbdxrmhmSCH -EPDLKvbdjJegjNYS -EOcKjvbdJvUedEgJ -DnbkKvbdVZITyjoO -DoDKjvbddePSCWbj -DncKjvbdWIXvXgYz -EPDKjvbdZQmFJMeR -DnbjjvbdqdEiPnWB -DoDLKvbdUVkojTaR -DoDLKvbdFVxpPmJe -EPCjjvbdxmsHwsIc -EPDLKvbdiiehJlxS -EPDLKvbdCTAbsewS -EPCjjvbdzoPpdbkx -DnbkKvbdijGHilxS -EPDLKvbdOYOuzdNt -EOcLKvbdTppoUuIN -DnbkKvbdcScLUDia -EOcLKvbdePFTLUTr -EOcLKvbdhgKCxvKV -EPCkKvbdrJAKFNOe -EOcKjvbdVwJXucdg -EPCkKvbdNddUJJKd -DncLKvbdJYUCHlQp -EObjjvbdkVvnDaxX -EPCjjvbdNeDsiJLE -EPDKjvbdyzeNqhJI -EPCjjvbdmIdTqUrB -EPDKjvbdZoOJFEyj -DoDKjvbduaDxsOeI -EPCkKvbdKjaIWAKZ -DncLKvbdKaLHMbYR -EOcKjvbdrafMlHKy -EPCjjvbdhtzEvqtb -EPCkKvbdddoSCXDK -EOcKjvbdzjUpPdTU -EPCjjvbdLZRJrzuG -EOcKjvbdaMjaruMg -DoCkKvbdyOSgwsJD -EPCjjvbdKDKCqJcY -EObkKvbdvAcxrneI -EObjjvbdwuMeQxkn -DncLKvbdmSZUysDi -DnbkKvbdcIlijfWx -DoDKjvbddndrjtTr -EOcKjvbdwtmEqYlO -EOcKjvbdYzcFqivZ -DnbkKvbdCDpBWJmG -EOcKjvbdaSGCgsfL -EObjjvbdIwtBhLqQ -DnbkKvbdyzdmrIIh -EPDLKvbdWexzUAOs -DncLKvbdRXNdCkgc -EOcKjvbdkVwNdBww -DncLKvbdIGfzYxYH -DoCkKvbdbAvFGPow -DoCkKvbdQlxBxnUz -DncKjvbdqrUkOKaN -EPDLKvbdZisIQGaf -DoDKjvbdsQWPJbvG -DncLKvbdjhHMFfNk -EObkKvbdwNWAMdFN -DoCkKvbdeKKRutzn -EObkKvbdJpyeOfNe -EOcKjvbdQmXayNtz -DncKjvbdnHExNNgZ -EPCjjvbdULuoBVni -DoCjjvbdqquLNjaN -EPDKjvbdyzdnSIJI -DnbkKvbdQvnDcLgc -DoCkKvbdtcDUvvOo -DnbjjvbdnGeXmNfy -DoDKjvbdxsNhmRbH -DoDKjvbdtTSSyZeD -DoDKjvbdRadFMJZL -EOcKjvbdUaCQrpqy -DoDLKvbdEJgivXjA -EOcLKvbdGFjSOItR -EPDLKvbdaSGDIUGL -DnbjjvbdJYTagkqQ -EOcLKvbdZLrDsmlN -EOcLKvbdEJgiuwjA -DoDKjvbdxUleRYlO -DnbjjvbdQwODcLhD -EObkKvbdOTUVgEtp -EObkKvbdRMwaxnUz -EObjjvbdrEFJPmua -EOcLKvbdiUzEvquC -DoDKjvbdMpYQumfs -EPCkKvbdhancEvqR -DncKjvbdkNCMZdfo -DncLKvbdZHWdAOri -EObjjvbdlrYuZrci -EObjjvbdgLGzbfAE -EObjjvbdcTCkUEJa -EPDLKvbdVAbRTRRy -DoCjjvbdYqNEiMeR -DncKjvbdBvzchdpW -DnbkKvbdtSqryZdc -EPCjjvbdwygeeweS -DoCkKvbdqlzJyLhJ -EOcLKvbdtbbtvvOo -DoDKjvbdrSVKnLAm -DnbkKvbdfMevgNKL -EObjjvbdRacdkhyL -EPCkKvbdFpASvgGZ -EPDLKvbdZoOJFEyj -EPCjjvbdzjUpPcrt -EOcKjvbdcbSlrATm -EOcKjvbdqwPkbhxq -DnbjjvbdHELVibKK -EPDKjvbdZQldiMeR -DnbjjvbdpstGqrKt -DoDKjvbdGFjRmiUR -EPCkKvbdssRsZZdc -DnbkKvbdlqxuZsDi -DncKjvbdEXwlUTtM -DnbjjvbdyzdnRhIh -EPCjjvbdkCkkRGtg -EOcLKvbdLrWlytpz -EPCkKvbdCEQAvKNG -DncLKvbdVwIxWDeH -EObkKvbduMYXBTaX -DoCkKvbdRyihTDWA -DnbjjvbdkaMoNALA -DnbjjvbdaMjartlg -DoCkKvbdNVTSKmAX -DoDLKvbddwystRez -EPCjjvbdcImJjevx -DoCkKvbdeAUQlwjG -DoDKjvbdZxcjNblS -DncLKvbdkIGlFenL -DoCjjvbdfHjurNqH -DoCkKvbdiBoDFXRR -EPDLKvbdvBDyTPFI -DnbkKvbdUxhUZkPO -EObjjvbdqZOhHQdY -EOcKjvbdSCDeLiZL -DncKjvbdozmckYPA -DncKjvbdgGLymgHA -DncKjvbdILaznWpk -EPCjjvbdqUTgSSKt -DoCkKvbdrovOjCuf -EOcLKvbdKfGIBaQu -EPDKjvbdCIjajiFj -EPCkKvbdmoyxujyC -EObkKvbdySnJMrCH -EOcLKvbdHDjujBij -EObjjvbdrMyiyMHi -DoCkKvbdiifHimXr -DnbkKvbdbsCkTcia -DnbkKvbdMfbpNPtk -EOcLKvbddoErkUTr -DncLKvbdqZOhGqDx -DnbjjvbdDncKkXCd -DoCjjvbdSCEElIxk -EPCkKvbdbUbHXjsh -DnbkKvbdCTAcUGWr -EPDLKvbdZtIiZESn -DnbjjvbdrDeJPnVa -DoCkKvbdZisIQHCG -DncLKvbdgFkzOHHA -EPCkKvbdmfdxMmfy -DncLKvbdMIbMRYAS -EOcKjvbdaogGckzd -EOcLKvbdLAkHMawq -DncLKvbdxwiJbQZk -DncLKvbdauBgYLUI -DnbkKvbdnQZxvKyC -EOcKjvbdFkEsChNV -DoDLKvbdpstGrRjt -EPDLKvbdlYrrSxgU -DnbjjvbdZQmFIldq -DoCjjvbdbhmKLFvx -EObkKvbdsBellGjy -DncLKvbduCcUwWOo -EObkKvbdJuuGEEfi -DoCkKvbdIwtCHkqQ -EPCkKvbdaMkBruMg -DncLKvbdEARiMyvw -EObjjvbdmgExNOGy -DoCjjvbdpfDdsuaI -EPDLKvbdEzspdlCi -EPDKjvbdqdFJQNua -DnbkKvbdnBjWxOnV -EPDLKvbdZisHogBf -EPCkKvbdjcMKpftg -DnbkKvbdauCGwjsh -DoDKjvbdlYrrTZHU -EOcLKvbdzjVPpDrt -DoCkKvbdQdDApQdS -DoDKjvbdehLWRmpg -EPDLKvbduoTzpkPU -DoCkKvbdliDspuRa -DoDKjvbdEXxLsssl -EObjjvbdZsiJYcrn -DoCkKvbdaaWFGPpX -DoCkKvbdrafNMHLZ -DoCjjvbdmgEwlnHZ -EPCkKvbdFkEsCgmV -DncKjvbdqmZjYlHi -DoCkKvbdfILWSORH -DoDLKvbdnCKXYOnV -DnbkKvbdHgGyyYYH -DoDLKvbdEKHjVxKA -EPDKjvbdbAueGPow -DnbkKvbdFyUuBDwb -EPDKjvbduCcUvvOo -EObkKvbdauBfxKsh -EObjjvbdZjTIPgBf -EObkKvbdNGbolpVL -EOcKjvbdeFOqbWbj -DoCjjvbdvwMAvBVu -DnbkKvbdzRPMhjXA -DncKjvbdFkErcIMu -EPCjjvbdhlFEOUcZ -DoCkKvbdJbjCpicY -EPCkKvbdZGwEAOri -DnbkKvbdNQYQunHT -DoCkKvbdkIHMFfOL -EObkKvbdHELVjBij -DoDLKvbdZQldhleR -DoDLKvbdVTmTelVj -DnbjjvbdJTZArlwl -DnbkKvbdCDpAvKMf -DoCjjvbdDxYLtUTl -DoDLKvbdwkWcgzyf -EPDLKvbdLBKgNCYR -DoDLKvbdZMSEUNkm -EOcLKvbdxUmEpxkn -EOcKjvbdGLFTDHlu -EOcLKvbdyYJKCPyk -DoCjjvbdDnbjjvcE -DoDLKvbdatbHXjtI -EObjjvbdbiMjLGWx -EPDKjvbdTYKlNzjx -EOcKjvbduDDUvvPP -EObkKvbdliETpuSB -DnbjjvbdrWolDIxq -EObjjvbdqZOggQcx -EOcLKvbdyXiKBoyk -DnbjjvbdqmZiyMIJ -EPCjjvbdULuoAuoJ -DoDLKvbdYzcGRivZ -DnbjjvbdtkwwBTaX -DnbjjvbdJbicQicY -DoCkKvbdTukojTaR -EPCkKvbdHbLydzAD -EObjjvbdVTltGLvK -EPCjjvbdUsmUFkuj -EPDLKvbdTqROuVIN -DncLKvbdYkrETnLm -DoCkKvbdeFPSBwDK -DnbjjvbdNGcPmPtk -DnbjjvbdWHwuxHYz -DoDLKvbdNUsRjmAX -EOcKjvbdZjTHpHBf -DncKjvbdWXIwvDeH -EOcLKvbdrJAKEloF -DoCjjvbdFeirOJUR -EOcKjvbdWWhwvEEg -DncKjvbdKeehBaQu -DnbjjvbdZLrDsmlN -EOcLKvbdZnnIeFZj -DoCkKvbdjKGHjMwr -EObkKvbdmIctQtqa -DoCjjvbdkClKpfuH -DnbjjvbdcTDKscia -DnbjjvbdADSYKZiQ -EObkKvbdygZMANFX -EPCjjvbdaMkCTUlg -DoDKjvbdzjVPodTU -EPCkKvbdIxTagkpp -EPCjjvbdZjSgpHBf -EOcLKvbdiCOcEvpq -EOcLKvbdsQWOibvG -DoDKjvbdEuxoomJe -DoDKjvbdmuVZkKSG -DoCjjvbdSZjITDWA -DoCkKvbdCJLBkJGK -EPCkKvbdliDsqVSB -DoCjjvbduaDxrneI -EOcLKvbdtvNxJpsA -EOcKjvbdEuyPoljF -DnbjjvbdwWlAuaWV -DncLKvbduMXvaTaX -EObjjvbddxZstSFz -EPDLKvbdmttykKSG -EPCjjvbdfIKvRnRH -DoDLKvbdjgfkeemk -DoCkKvbdHELVjBjK -EObjjvbdaRecIUGL -DnbkKvbdmSYuZrci -DoDLKvbdKfGHaaQu -EOcLKvbdIwsahLpp -EOcLKvbdEuyPomKF -DoCkKvbdsQWPJcVf -DnbjjvbdbPgHDkzd -DoDKjvbdZMSETnMN -DoDKjvbdJSyBTMwl -EPCkKvbdSCDeMIxk -DoDLKvbdtkwwBTaX -DoCjjvbdtbcVWuoP -EPCjjvbdozmdKxPA -DoCjjvbdtkwwBUBX -DoDLKvbdQdDBPpcr -DoCjjvbdJbjCpjDY -EPCjjvbdCTBDTfWr -EPDKjvbdYNqAYUut -DoDKjvbdURRPVUgm -EOcLKvbdNPwqVmfs -DoDKjvbdsCGMkgLZ -DoDLKvbdZtIiYcsO -EObjjvbdhficZWJu -EPCjjvbdTqRPUuIN -EPCjjvbdyOShXsIc -EOcLKvbdliETqVRa -DncKjvbdYqMdhmEq -DoCkKvbdKfGHbBQu -DnbkKvbdqBIeAXIE -EPDLKvbdQZNAHTRj -EObkKvbdRosgJecw -EPCjjvbdKQzEnfOF -DoDKjvbdzRPMiKXA -DnbkKvbdGcjvJbJj -DoCjjvbdbAvEeoow -DncKjvbdFVyQPmKF -EPDLKvbdRzKIScWA -EPCkKvbdKkAhWAJy -EPCkKvbdJqZdnenF -DoCkKvbdVUMtGMWK -DncKjvbdBiLBjiGK -DnbkKvbdjvWnDbYX -DnbkKvbdwuNEqYkn -DoDKjvbdegjurORH -EObjjvbdpeceTvAh -DoCkKvbdAMgySwZx -EPCkKvbdlZSqsZGt -EPDLKvbdbrbkTdKB -EPDKjvbdhzUekpnG -DncLKvbddeOqbWbj -EPCjjvbdsPunibvG -EOcLKvbdVwIxVdEg -DoCjjvbdkIHLefNk -DnbkKvbdxmrhXrhc -EPCkKvbdziuPocrt -EOcLKvbdNUsSLNAX -DncKjvbdhkddNtcZ -DoCjjvbdMpYRWNgT -EObjjvbddZxoxYqC -EOcLKvbdNVTRjmAX -EPDKjvbdZjTIQHCG -DnbkKvbdHEKvJbKK -EOcKjvbdiGibxvJu -DnbjjvbdsCGNMGjy -DoCjjvbdBhkBjhfK -EPCkKvbdSCDdkhyL -DnbjjvbdNPwpvNfs -EOcLKvbdJTZBTNYM -DncKjvbdqGEFTvBI -EObkKvbddneSjtTr -DncLKvbdqdFJPmua -EPDKjvbdrbFmMGkZ -DoCjjvbdhXZAzzAJ -EOcKjvbdkxsSSxgU -EPDKjvbdrEEhonVa -DnbkKvbdYzcGSKVy -DoCjjvbdzROmJJwA -EPDLKvbdOEdUJJKd -EPCjjvbdqquKmkAm -EOcLKvbdZyEKODLr -DnbkKvbdIsZAsMxM -DnbjjvbdZjTHofaf -DoCjjvbdrSUkOLAm -EPCjjvbdBsAbsewS -EObkKvbdUsltGLuj -EPCkKvbdANHyTWyx -EObkKvbdsBemMGjy -EObjjvbdMoxRVmfs -EPCkKvbdNGbolouL -EPDLKvbdjKGHimXr -DncKjvbdUMWPAuni -EOcLKvbdOEdUIhkE -EPCkKvbdjKGHimXr -EPCkKvbdhuZdwSVC -DoCjjvbdCIkBjiFj -EPCkKvbdxZhGFxFS -EObjjvbdOFDtJJKd -DoCkKvbdfNGWgNKL -EPDLKvbdcarmSATm -DoDKjvbdkNCMZeHP -DoDLKvbdkMakyeGo -DnbjjvbdiHJcYvKV -DnbjjvbdWWhxVcdg -EPDKjvbdVUNTelVj -DoDKjvbdZGvdAPTJ -DoCjjvbdDncLLXCd -EPDKjvbduDCuWuno -DoCkKvbdPyNAHTSK -DncKjvbdqwPlDIyR -EOcKjvbdYzbfSJvZ -DnbkKvbdRotGifDw -DoDLKvbdRDcBQRDr -DoDKjvbdEARiNZvw -DncKjvbdJSxaTNYM -EPDKjvbdVwJXvDeH -EOcKjvbdQwOECkhD -DoCjjvbdEPCkLWbd -EPDKjvbdVBBpsRSZ -EOcKjvbdddoSBwCj -EOcKjvbdFkFScINV -EObjjvbdpstGrSLU -EPDLKvbdhaoDFXRR -EPDKjvbdKfGICApu -EObkKvbdBsAcTevr -EObkKvbdhkeDmtby -DoCkKvbdqYngfpdY -EOcKjvbdsPvPKCvG -DoDLKvbduVmwiqTA -EOcKjvbdidkGtoAO -EPCkKvbdyzeORgiI -DoCkKvbdmJDsqUqa -DncLKvbdiGibyVjV -DncKjvbdhtzEwSVC -EOcLKvbdZRMdiNFR -EOcKjvbdrafMkgKy -DoDKjvbdZGwEAOsJ -EOcLKvbdjmCMZeHP -DncLKvbdjKFgimYS -EPCjjvbddZxpYZRC -DncKjvbdjmBkzEgP -EObkKvbdkIHLeemk -EPDKjvbdjAQGaQGj -DncLKvbdSPtHJfDw -DoCkKvbdGKdsChNV -EPCjjvbdrouoJbuf -EPDKjvbdlhcsqUqa -DoCjjvbdwXMBWAvV -DnbkKvbdhkdcmtby -EOcLKvbdFkEsDHmV -EOcLKvbdCIkBjhej -DoCkKvbdiLeDnVDZ -DoDLKvbdDxXlTssl -DnbjjvbdNrtVfduQ -EPCkKvbdHDkWJajK -EPCjjvbdTulQKUBR -DoDKjvbdJYUBhLpp -DncKjvbdiCOcFXRR -DoCkKvbdxsNiMrBg -EObkKvbdQlxByNtz -EPCjjvbdBhkBjiFj -EPCjjvbdNeDsiIjd -DncLKvbdBsAcTfXS -DncLKvbdDwwlUTsl -EOcKjvbdUQqPVUgm -DncKjvbdmttzKirG -EPCjjvbdKWUfEFHJ -EPCjjvbdGKdrcINV -EPDLKvbdkxrrTYgU -DoCkKvbdQdCaQQcr -DnbkKvbdvAdYroFI -EObkKvbdFxttaDwb -DnbkKvbdQdDBPqES -DncKjvbdkVwODbXw -DoCkKvbdrounicVf -EPCjjvbdBcoaVjMf -DncKjvbdcImKKevx -DoCjjvbdxLWdHzyf -EOcLKvbdcbTNSATm -EPDKjvbdRacdlJZL -EPDLKvbdZQleIleR -EPCkKvbdTfznLwWF -EObkKvbdsCFmLgKy -DoDKjvbdyqOlhiwA -EOcKjvbdtcCtwVoP -DnbjjvbdRWmdCkgc -EOcKjvbdqUTfqrKt -DnbkKvbdRyjHsDWA -DoDLKvbdYqMdiNEq -EOcKjvbdhbPCeXRR -EOcKjvbdVrNwbFLc -EObkKvbdZLqcsmkm -DoDKjvbdRWmdDMID -EPCjjvbdkWXNcbYX -DncLKvbdZyDinClS -EOcLKvbdqUTfqqjt -DncLKvbdUtNTelWK -EPDKjvbdkWWmdCXw -DoDKjvbdezuxdhtX -DoCkKvbdaSGCgtGL -EPDKjvbdVwJYWDdg -DoDLKvbdWSOYCFMD -EObkKvbdxwiJaozL -DoCjjvbdTpqOuVIN -DoCkKvbdrzLpSaHn -DnbkKvbdJutecdfi -DnbkKvbdhgKDZVjV -DncKjvbdCJKajiGK -EPCkKvbdbrcLTcia -DncKjvbdxxIibPzL -DoDLKvbdNUsRkNAX -DoCkKvbdZRMeJMdq -DnbjjvbdxsOJMqbH -DncKjvbdqAheAWhE -DoCkKvbdZnnIddyj -DoCjjvbdrpWOibuf -DoCjjvbdDxXlUUTl -EPDKjvbdZirgofbG -DnbjjvbdDnbkKvbd -EOcLKvbdoznDkXoA -DnbjjvbdozmdKxPA -DnbkKvbdfHkVqmqH -DoDLKvbdkDMLRGtg -EPDKjvbdDxXlUTtM -DoDLKvbdZLrETmkm -DoCjjvbdLAkGlbYR -DncLKvbddndsLUUS -DoCjjvbdaRfDIUFk -DnbjjvbdjJfHjNXr -DncLKvbdeFPRbXDK -DoCkKvbdJYTbIMRQ -DnbkKvbdptUGrRjt -EOcKjvbdkMbLzEfo -DoCjjvbdezuxeJUX -DoCjjvbdZMRctOLm -DoDLKvbdWWiXudEg -DnbkKvbdiiehKNXr -DoCkKvbdXrkaNUOx -EPDLKvbdZjTIQGbG -EObjjvbdeOeTLTtS -EPDKjvbdBraCsewS -EPDLKvbdLBKflaxR -DncKjvbdRzJhScWA -EPDLKvbdGKdrbhMu -DoDKjvbdFeiqmiUR -DnbjjvbdFWYooljF -DnbkKvbdUWLoisaR -EPDKjvbdfRaWzkbo -EPDLKvbdKQzEnfNe -DoDLKvbdnUtyjiqf -DnbjjvbdyNrgxSiD -EOcKjvbdjlakzFHP -DoCkKvbdjvXODaxX -DnbkKvbdLFfHaaRV -EPCkKvbdwuMeRYlO -EPDLKvbdtSqrxzEc -DncKjvbddwytTqez -EOcKjvbdZLqcsnMN -DoCjjvbdkxsSTZHU -EPDKjvbdiZtekqNf -EObkKvbdnCKWwnmu -EObjjvbdauBgYKsh -EPDKjvbdrSVKmkBN -EObkKvbdxrnImSBg -DncKjvbdZnnJEeZj -DoDKjvbdZjTIQHBf -DncLKvbdmIctRVRa -DoCjjvbdziuQQDsU -EPDKjvbdZRNFJNEq -EOcKjvbdTqRPUthN -EPCkKvbdePFSjssr -EPDLKvbdfIKuqmqH -DoDKjvbddZyQYYpb -DoDLKvbdWRmwaeMD -DoDLKvbdOYOuzcmt -DoDLKvbdxsNiNRbH -EPCkKvbdNeEThiLE -EPCkKvbdNPxQunHT -EPCjjvbduCbtvuoP -EOcLKvbdjgfkeemk -EObjjvbdjlbLydfo -DoDLKvbdxmsIXrhc -DoCkKvbdlrZVZsDi -DoDKjvbdEztRElCi -EObjjvbdBsAbsfWr -DoDLKvbdZHWdAOsJ -DnbjjvbdSCDdkhxk -EObjjvbdeFOqbWcK -EPDLKvbdZtJJZESn -EPCkKvbdKfFhBaQu -DoCkKvbdMpYQvNfs -EObjjvbdrpWOjCvG -EPDLKvbdJSxaTMxM -EPCjjvbdOSsvGduQ -DoDLKvbdtumxKRTA -EPDKjvbdBcpBWKMf -DnbkKvbdtbbuWvPP -DoDLKvbdKWUfDdfi -EPDKjvbdOStVgFVQ -EObkKvbdZnmheFZj -DoDLKvbdQwODcMID -DoDKjvbdVrNxBeMD -DoCkKvbdaSFbgsek -DoCjjvbdTvMQKTaR -DoCkKvbdZsiIxdSn -EObkKvbdakMFnnDA -DoDLKvbdJutedFHJ -EOcLKvbdhzVFlQnG -EObjjvbdzjUpQDsU -EPCkKvbdzoQQeCkx -DncKjvbdZjShPgCG -DnbjjvbdMgCpMpVL -DnbkKvbdNGbpNPuL -EObkKvbdKfFhBaRV -DnbjjvbdKQzFPFnF -EPDKjvbdCIkBkJGK -EObkKvbdmajXXnnV -DoCkKvbdNwnuzcnU -EObjjvbdauCGwkTh -DnbkKvbdbiNKKfXY -DnbjjvbdQmYCYnUz -DoDKjvbdiLddNtcZ -EOcKjvbdeEoSBwDK -DoDKjvbdcTCkUDia -DnbkKvbdZRNEhmEq -EPCkKvbdHfgZxxXg -EObjjvbdbsDLUDjB -EPDKjvbdhbPDFWqR -DncLKvbdKNADyfuB -EObkKvbdEztREkcJ -DncLKvbdbLMFnnDA -EObkKvbdZjShPgBf -DncLKvbdbVCHXkTh -DnbkKvbdqTtHSRkU -EObkKvbdfSBWzlDP -DnbkKvbdGKeTDIMu -EOcLKvbdGcjvJbJj -EPCkKvbdMowqWOHT -DncKjvbdYpmFIleR -EPDKjvbdZxcjNblS -DncLKvbdNrtVgEuQ -EOcKjvbdqrVKnLBN -DnbkKvbdatbHXkUI -DoCkKvbdEPDKkWbd -EPDLKvbdmIdURVRa -DoCkKvbdMoxRWNgT -EObjjvbdLBKflbXq -DoCkKvbdSwjkmzkY -DoDKjvbdJbicQicY -EObkKvbdNQYQumgT -DoDKjvbdxxJKCPzL -DncLKvbdnGdxNNgZ -DoCkKvbddijSVtzn -EPDKjvbdrJAJdmOe -DnbjjvbdzoQQeDLx -DoCjjvbdZRMeIldq -DnbjjvbdkHgMGGOL -DoCjjvbdaSGChTfL -EOcLKvbdCJLCKiFj -DoCkKvbdVhXvYHYz -EPCjjvbdcSbjscia -EOcKjvbdxZgeewdr -EPDLKvbdYkqdUNlN -DnbkKvbdREDApQdS -DnbjjvbdmozZVkYb -EPDKjvbdaRecITfL -DncLKvbdZyEJmbkr -EOcKjvbdZnnIdeZj -DncLKvbdeXzTsrFz -DoCjjvbdZRMdhmEq -EOcLKvbdGGJqmhtR -EPDKjvbdIidAJpHE -DncKjvbdMRwNZtpz -DncLKvbdnBiwXoOV -DoDLKvbdqYnhGqEY -EOcKjvbdWexytAOs -EOcKjvbdiZuFlQnG -EObkKvbdVAaqTRRy -EPCkKvbdTAEhgaoE -DoDKjvbdMoxQvNfs -EPDKjvbddjJqvUzn -EObkKvbdBiKajhfK -EPDLKvbdZLqcsmlN -DoCjjvbdgPazwDwh -EPCkKvbdwkWcgzzG -EPDKjvbdlYsSSyGt -EObjjvbdZLrDsmkm -DncLKvbdbsCkUDia -EObkKvbdkxrrSyGt -DnbkKvbdnBivxOnV -DoDLKvbdZirhPgCG -EObjjvbdfMevfmKL -EPDKjvbdSQTgJecw -DoDLKvbdUWMPitAq -DoDKjvbdwtleRZMO -EObjjvbdKRZdoGNe -DoCjjvbdauBgYKsh -DoDKjvbdXrlAlsnx -DncKjvbdUMVnaVni -DncKjvbdiHKDYvKV -DnbkKvbdySnJNSCH -EPCjjvbdfNGWgNKL -EOcLKvbdnQZxujxb -EObjjvbdVgwvXgYz -EOcLKvbdjKGHimYS -DnbkKvbdhanbeXQq -DncLKvbdhzUfLpmf -DoDLKvbdczZPxZRC -EPDKjvbdRNYBxnUz -EOcLKvbdlrZVZrdJ -DncKjvbdtcDUwWOo -EPCkKvbdQvmdDLhD -EPCjjvbdfMfWfljL -DoCjjvbdZyEKNbkr -EOcKjvbdgPazvcxI -DncKjvbdfNGXHMjL -DncLKvbdEKHjWXjA -EObkKvbdZjSgogCG -EPCjjvbdxnSgxShc -EPCjjvbdqrVKmkBN -EPCjjvbdbBVdepQX -DoCkKvbdrXQLbhxq -DoCjjvbdbVBfxLTh -EPCkKvbdHlBznWqL -EPDKjvbdTAEhgaoE -DnbjjvbdCfkfHAzc -DnbkKvbdptTfqqjt -EPDLKvbdWIXuwgYz -EObjjvbdrJAJeNPF -DncLKvbdKDKDRJcY -DnbkKvbdrDeIpNvB -DncLKvbdVwIwudFH -DncKjvbdICMZdzAD -EPCkKvbdsQVnjDVf -EPDKjvbdiZuGMRNf -DoDLKvbdIGfyyXwg -EPDLKvbdYORAXtut -DoCjjvbdhzVGMQnG -EPDLKvbdQwNcbkgc -EObjjvbdsBemLgLZ -DoDLKvbdZtIiYdSn -DoCjjvbdelevfljL -DoCkKvbdcyxowxqC -EPDLKvbdZMRdUNlN -EOcLKvbddZyPwyRC -EPCjjvbdZLrDsnLm -EPCkKvbdgPazwEYI -DoDKjvbdqFdEsvBI -EOcKjvbdVviXvDdg -EPCjjvbdCWzdIdov -DncKjvbdrSVKnLBN -EObkKvbdiLddNtcZ -EPDLKvbdrDdiPmvB -EPDKjvbdKDKDRKCx -DoDKjvbdtSqsZZeD -DoDLKvbdwuNFRYlO -DoCjjvbduLwvaTaX -EObjjvbdtkxXBUBX -EOcLKvbdSQTgJfEX -EObjjvbddneTKtUS -DoDLKvbdAMhYsXZx -EOcLKvbdczZPwxqC -EPDLKvbdjbkjqGtg -EOcLKvbdFkEsChMu -EObjjvbdbsCkUDia -EObkKvbdEzsqElDJ -EPDLKvbdGZUuBEYC -DoCkKvbdzROmJJwA -EPDKjvbduMXwAsaX -EPCjjvbdqwQMDJZR -DoDKjvbdqUUHSRkU -DoCkKvbdwtleQxkn -DnbkKvbdQvnEClHc -EPDKjvbdjvXNcaww -DoCjjvbdjggMFenL -EPDLKvbdJYUBhLpp -DnbkKvbdkNCLyeGo -DoCjjvbdDoCkLWcE -EOcKjvbdYqMeJNFR -EPCjjvbdRDcApQdS -EObjjvbdjblKpgVH -EPDKjvbdqqtjnKaN -DoDLKvbdwtmFRYlO -DoCjjvbdnHEwmNgZ -DncLKvbdaMjasVNH -DncKjvbdnUtzLKSG -DoDLKvbdkySrSyGt -EPCjjvbdyNsIXriD -DoCkKvbdRadFMIyL -EOcKjvbdqvokbhxq -EPCjjvbdYkrEUOLm -EPDKjvbdrpWPKCvG -DncKjvbdxUldpyLn -EObjjvbdrbFmMHKy -DoCjjvbdZHWdAPTJ -DncKjvbdEPDLKwDE -DnbjjvbdZHWdAPTJ -DoDLKvbdNrsvHFUp -DncLKvbdCTBDUFvr -EPDLKvbduDDUvuno -DoDLKvbddwystSFz -DnbkKvbdmbJvwoNu -EPCjjvbdcbTNSAUN -DnbjjvbdnVUzKjRf -EOcLKvbdYlRdUOMN -DoCjjvbdTAFIgand -DnbkKvbdpeceUVaI -DoDLKvbdlZSrTYft -EPCjjvbddePRbXDK -EOcLKvbdJqZdnfNe -EPCkKvbdRaceLhyL -EPDKjvbdLAkGlaxR -EPCjjvbdqGDdsvAh -DnbjjvbdxZgefYEr -EObkKvbdKWVGEFGi -EPCjjvbdSQUHKFdX -EPDKjvbdDxYLsssl -EPCjjvbdfHjvSNqH -EPCkKvbdQwODbkhD -EOcKjvbdZnmiFEyj -EPCkKvbdqwQMChyR -EOcLKvbdZyDimcLr -EObjjvbdjAQGaQGj -EPCkKvbdZtJJYdTO -EObjjvbdjFKgUoAO -DnbkKvbdcScLUEKB -EPDKjvbdjcMLRGuH -EObjjvbdqlzKZLgi -EOcKjvbdFfJrNiUR -EObkKvbdKaKgNBxR -EOcKjvbdHDjujBij -EObkKvbdFejSOJUR -DncLKvbdMIalRYAS -EOcKjvbdVTlsekvK -DoCjjvbdUQqOtthN -DnbjjvbdVYgtZkOn -DnbkKvbdrovOicVf -DncKjvbdKfGIBaQu -DnbjjvbdjuvnDaxX -EPDLKvbdHakzEzAD -EPDLKvbdyzdnRhIh -DoCjjvbdZGvdAPTJ -DoDLKvbdqvolChyR -DncLKvbdjlbLyeHP -EPCkKvbdmIdTptrB -EPCkKvbdQcbaPqES -DoDLKvbdddoSBwCj -DnbjjvbdjvWnECXw -DnbjjvbdZisHofbG -EOcKjvbdZQldhldq -DnbkKvbdfekymfgA -DnbjjvbdLBKgMbYR -EPCjjvbdEARiMzWw -EObjjvbdtSrTYzEc -EPDKjvbdZoOIddyj -DnbkKvbdcSbjtEKB -EObjjvbddndsKssr -DoCjjvbdxnSgxShc -EPCjjvbdOTUVfdtp -DoCkKvbdUtMselWK -DnbjjvbdJpydoGNe -DoCkKvbdGQASwGey -DnbjjvbdnGdxMnGy -EPDKjvbdHDkVibKK -DoCjjvbdtbbuXWOo -EPDKjvbdKWVGEEgJ -EObkKvbdGLEsCgmV -DoCkKvbdbrbjtEKB -EPDLKvbdRzJgrcWA -EPCkKvbdaRecITfL -EObjjvbdrbGMlHKy -DnbkKvbdZdwfzgiC -EPDKjvbdVwJXudFH -DoCjjvbdiZtekqOG -EObkKvbdqrUkOKaN -EObkKvbdySnImRbH -EObjjvbddoFTKstS -EOcKjvbdyOTHxTJD -DncKjvbdFVxoolie -DoCkKvbdFejRnIsq -EPDLKvbdptUGrRkU -EOcKjvbdajlGOnDA -EPDKjvbdrRtkOKaN -EOcKjvbdzoQQeDLx -EPCjjvbdrafMlGkZ -EPCjjvbdmpZyWKyC -DoCkKvbddBrlrAUN -DnbkKvbdMgDPlpVL -DnbjjvbdUxhTzKoO -DoCkKvbdSCDdlIyL -EPDKjvbdmbJvxPOV -EPCkKvbdNGcQMpUk -EPCjjvbdVqmxCFLc -DoDKjvbdrDdhonWB -EOcLKvbdYTLaNToY -DoCkKvbdkIGlFemk -EPDKjvbdNrsvHFVQ -EPDLKvbdrzLoraHn -EObkKvbdraelkgLZ -DoDLKvbdBdQAujMf -DncKjvbdwzIGGYFS -EOcKjvbdZeXfzhIb -DoDKjvbdbAueGPpX -DoCjjvbdZtJJYcrn -DoDKjvbdyqPNJKXA -DoCkKvbdTAFIhCPE -DoDLKvbdjblLQgVH -DoCjjvbdZtJJZDsO -EOcLKvbdrNZixkhJ -DoCjjvbdzoPpdblY -DnbkKvbdqcdhpNvB -DncKjvbdYpldhleR -DoCjjvbdmRyUysEJ -DoCjjvbdJXtBgkqQ -EOcKjvbdVwJYWDeH -DoDLKvbdZLqdUOLm -EPDKjvbdEXwlUUTl -EObkKvbdoznDkYPA -EPCkKvbdEASJNZvw -EPCjjvbdFjdsCglu -DoCkKvbdTlWPBWOi -DnbjjvbdcTCjsdKB -EObkKvbdkySrTYft -EPCkKvbdLrXMytpz -DncKjvbdZQmEhleR -EOcLKvbdHkaznWpk -DnbkKvbdHfgZyXxH -EObkKvbdpecdtWAh -DnbkKvbdRadElJYk -EPCjjvbdTXkMNzjx -DoCjjvbdmSYtzTEJ -EPCkKvbdZsiJZDsO -DncKjvbddoErkTtS -DoCkKvbdZRMdiMeR -EObkKvbdTfzmkvvF -DncKjvbdpxnhHQcx -EPDLKvbdaMjbStlg -DoCjjvbdkHfkefOL -DoCjjvbdqqtkOLAm -DnbjjvbdyzeNqgiI -EOcKjvbdiLeDnUby -DncKjvbdyYIjCPyk -EOcKjvbdpfEFUVaI -EPCjjvbdZirgpHBf -DnbkKvbdKWUecdgJ -EOcLKvbdiHKCxvJu -EPDKjvbdcTCkUEKB -EOcLKvbdaMkBsVNH -EPDLKvbdJutfEFGi -EPCkKvbdFaOqZJzm -EObjjvbdhaoCdvqR -EPCkKvbddZxpXxqC -DnbjjvbdZxcinDLr -DoDLKvbdpssfqrKt -DoCjjvbdqTsgRrLU -EPDLKvbdEYXlUTtM -EObjjvbduVmwjQsA -EOcLKvbdNPxQunHT -DnbjjvbdBhjajiGK -DoCkKvbdUGznMXVe -EPDKjvbdVwIwvEFH -EObkKvbdRMwayNtz -DoDLKvbdQZNAGrrK -EObjjvbdKWUedFGi -DoDLKvbdaNKartlg -DncKjvbduWOXipsA -EObjjvbduVmxKRTA -DoDKjvbdygZMAMdw -DoDLKvbdqTsfrRkU -DoCjjvbdEvYpQMjF -EObkKvbdNPxQunGs -EObkKvbdsZlPsAgn -DnbkKvbdZnnIddzK -EPCkKvbdNQXqWOHT -DnbkKvbdGLFSbhMu -DoDKjvbdrzMPraIO -DnbkKvbdZirgofaf -EPDKjvbdijFhJlxS -DncKjvbdWRmxBeLc -DnbkKvbduDDUvuoP -DoDKjvbdiZuGMQmf -EObkKvbdelfXGljL -EPDLKvbdfNFvfljL -DncKjvbdGKdrcINV -EObjjvbdFfJqnIsq -EOcLKvbdILaznWqL -DncLKvbdJutedFHJ -EOcLKvbdIwtBhLpp -EPDLKvbdsrrSyZdc -EPDKjvbdczZQXxpb -DncLKvbdDoCjjvcE -EPCjjvbdpxoIHREY -DoCkKvbdxxJJbPzL -EPCkKvbdVZIUZkPO -EPDLKvbdULuoBWPJ -EPCkKvbdfMfWfmJk -DnbjjvbdZtIiZETO -DoCjjvbdiMEcnUby -DoCkKvbdcyyPxZQb -DoCkKvbdZirgofaf -EObkKvbdozmdLYPA -DoDKjvbdYkrEUNkm -DoCkKvbdLqwMzVQz -EObjjvbdLFfICBRV -EObjjvbdjJehKNYS -DoCjjvbdEJgiuwjA -EPCkKvbdyqPNIiwA -EPDKjvbdNdcsiIjd -EPCjjvbdauBgXjsh -DnbkKvbdyzeORgiI -EPCkKvbdsCGNLgLZ -EObkKvbdtbbtwVno -EObjjvbdwuMdqZLn -EObjjvbdSQTfiedX -EPCjjvbdmttyjjSG -DncLKvbdnHFYMnGy -DncKjvbdxmsIXrhc -EPDKjvbdQYmAGsRj -EObjjvbdfoazvdYI -DoDLKvbdhaoDEvpq -EObjjvbdDihKVwjA -DoCjjvbdZMSDtNlN -DnbjjvbdhlFDnVDZ -EPCjjvbdiCPCdwRR -DncLKvbdULuoBVoJ -DoDLKvbdyYJKBpZk -DoDLKvbdRbDdlIyL -EOcKjvbdYSlAlsoY -DoCkKvbdySmhlqbH -EOcKjvbduWNxKRTA -DnbkKvbdFjeTDIMu -DoDLKvbdzaAPGgCM -EPCkKvbdBhkCLJGK -DnbkKvbdYpmFJNFR -EPCjjvbdQccBQQdS -EOcKjvbdqGDdtVaI -EOcLKvbdILazmvqL -EPDLKvbdajkennDA -DoDKjvbdxVMdqZLn -EPDKjvbdNPxQunGs -EObjjvbdhytfMROG -EPDKjvbdEXxLtTtM -EPDKjvbdZnnIdeZj -DoDKjvbdGKeTChNV -DncLKvbdjmCMZeGo -DnbkKvbdQwNdClHc -DncKjvbdXrlBMtOx -DoCkKvbdzaAOgHBl -DncLKvbdcIlijewY -EObjjvbdrbFllHKy -EOcKjvbdmbJwXnmu -EObkKvbdssSSxydc -DoDKjvbdSQTgKGEX -DnbjjvbdUyHtZkPO -EPCjjvbdFyUuAdYC -DoCkKvbdqFcdsvBI -EOcLKvbdqwQLbhyR -DoCkKvbdbsCkUEKB -EPCjjvbdIjEAKQHE -DnbkKvbdaNKbTUmH -EObkKvbdnCKWxPOV -EOcLKvbdZxcinClS -EObjjvbdhlFDnVDZ -DncLKvbdpyPHfpdY -EOcKjvbdTlVoAuoJ -EOcKjvbdmbKXXoOV -DoCkKvbdxsOImSBg -DncKjvbdZHXEAPTJ -DoDLKvbdDjIKVwjA -DoDLKvbdnCJvwoNu -EPCjjvbdZeYGzghb -EPDKjvbdHffzYxXg -EObjjvbdirzhrkJz -DoCjjvbdZnnJFFZj -EPDKjvbdeATqMwif -DoDKjvbdbVCHXjsh -DoCjjvbdGckVjCKK -EOcLKvbdyYJJbPzL -DoCjjvbdiCPDFWpq -EOcLKvbdIwtCILqQ -DoDLKvbdKQzFOfOF -EOcKjvbdNPwqWNgT -EObjjvbdZLqcsmkm -EPDLKvbdnPyxvKxb -DoDLKvbdKjaHvAKZ -EObjjvbdjKFgjNYS -DnbkKvbdLAkGmCXq -DoDLKvbdeEoSBwCj -DnbjjvbdHlBznXRL -DnbjjvbdKfGHbBRV -DnbkKvbdZQldiMdq -EOcLKvbdnBivwnnV -DncKjvbdsQVoKDWG -EObkKvbdypnlhiwA -EObkKvbdrykpTAgn -DoCjjvbdaMkBsUmH -EPDLKvbdRDcBPqES -DoCjjvbdpxngfpdY -EOcKjvbdEztRFLbi -EOcLKvbdcbTNSAUN -DoCkKvbdjcLjpfuH -EPCkKvbdjSzhsKiz -EPCkKvbdoAKztIDn -EPCjjvbdMgDQNPuL -DoDLKvbdKNAEZgVB -EPCjjvbdZsiJZDsO -EOcLKvbdkCkkQfuH -DoCjjvbdnGeXmNfy -DnbjjvbdrpVoJbuf -DoCkKvbduCbuWuoP -EObjjvbdSwkMNzkY -DoCkKvbdrNZiyMHi -DnbjjvbduDCtvuoP -DoDLKvbdMuSqjmAX -EObkKvbdsQVnicVf -EPCjjvbdmfeYNNgZ -DncLKvbdmIdURUqa -EPCkKvbdGBPQyJzm -EPCjjvbdZRNFImEq -DncKjvbdNddUJJLE -EObkKvbdaSFbgsek -DncKjvbdDoCkKwDE -DoCjjvbdtkxWaUBX -DncLKvbdfNGXHMjL -EPCkKvbdqTtHSSKt -DnbkKvbdxmrhXsJD -DnbjjvbdmttykKSG -EObjjvbdqcdhomua -DoCkKvbdVTlsfMVj -DnbkKvbdRECaPpcr -DnbkKvbdijFhKNYS -EObkKvbdIwsbIMRQ -EPDLKvbdJbibqJbx -EPDKjvbdxxJKCPyk -EOcKjvbdjuvnECYX -DnbkKvbdKRZePFme -DnbkKvbdMpYRVnGs -EOcKjvbdfMevgNKL -DoCkKvbdmfeXmOHZ -DncLKvbdFpATXGey -DoDKjvbdJXtCIMQp -EObjjvbdZshiZDsO -EPDLKvbdaRfDHsfL -DncKjvbdMIakqYAS -EObjjvbdSLZGUfjs -DoDKjvbdBcoaWJmG -DoDKjvbdEuxpPlie -EObjjvbdJcJbqKCx -DoCjjvbdxwhiapZk -DnbkKvbdsBemLfkZ -DoDLKvbdHgGyxwxH -EOcKjvbdQdDApRDr -EPDLKvbdKWUfDeHJ -DnbjjvbdjvXODbYX -DoDLKvbdHELWJbKK -DncLKvbdgFkynHHA -EPCkKvbdPxmAHSqj -DoDLKvbdYkqdTnLm -EPCkKvbdJYUCILpp -EOcKjvbdxwhjBpZk -DoCjjvbdiMFENtcZ -DoCjjvbdnCJvwoOV -DoDKjvbdSKxetgKs -EOcKjvbdWRmxCFMD -EOcLKvbdpedFTvBI -EObkKvbdbAvEfPow -EObkKvbdZnmiEeZj -DnbkKvbdtTSSyZeD -EPCkKvbdPxmAGsRj -EPCkKvbdVTmUGLvK -EObkKvbdJmADyfta -EOcKjvbdwWlBVaWV -DoDLKvbdjcMKqGtg -EOcLKvbdGGJrNiTq -DnbkKvbdgPazvdYI -EPCkKvbdGLEsDHmV -DnbjjvbdqceIomua -DncLKvbdjbkjpgUg -DoCjjvbdSxLLmzkY -EPDLKvbdjKGHilxS -EPDKjvbdmbJvwoNu -EPDKjvbdjmBkyeHP -EPDLKvbdzROliJwA -DnbjjvbdUaBprprZ -DoDKjvbdtbbtwWPP -DnbjjvbdURQoVVHm -DoCjjvbdjbkjqGuH -DoCjjvbdRbEFLhyL -DncKjvbdBcpAujMf -DoCkKvbdPxmAGrqj -EPDLKvbdZRMeImFR -EOcLKvbdcScKscia -EObjjvbdeXytTrFz -EPCjjvbdKfGICBQu -DncKjvbdijGIKMwr -EObjjvbdZLqctOLm -EObkKvbdSLZFuGjs -DnbjjvbdZMRcsnMN -EPCkKvbdWSOYBeMD -EObjjvbdRacdlJYk -DnbjjvbdFyVUaEXb -EObjjvbdRbEFLiYk -EObjjvbdZjTIQGaf -EPCkKvbdNsTugEtp -DoCkKvbdEASIlyvw -DoCjjvbdsrrSxzFD -DoDLKvbdQwOEDMID -EPDKjvbdaaVeGQPw -DoCjjvbdFejRnItR -EObkKvbdRacdlIyL -DnbjjvbdGGJqnIsq -DoDLKvbdGYtuBDxC -DncKjvbdbLMGPODA -EObjjvbdqYoIGpcx -DncKjvbdrykosAgn -EPCjjvbdJbjDQjCx -EObjjvbdkySqsYft -EPDKjvbdxwhjBpZk -DncKjvbdauBfwkTh -EPCkKvbdtSrSxydc -DoDKjvbdMRvmZuQz -DncLKvbdnUtyjiqf -DoDKjvbdSLYetgKs -DoDLKvbdJbjCqJcY -EPDLKvbdShyiqAAl -EPDLKvbdSQUHJfDw -EOcLKvbdijFhJmYS -EPDLKvbdvwMBWAvV -EObjjvbdeXytUSFz -EObjjvbdWXJXuceH -EPCkKvbdrDeIomvB -DncKjvbdczZQXyRC -DnbjjvbdQlxCZOUz -EPCjjvbdQccApRDr -DoCkKvbdqiAJdloF -DoCjjvbdDwwktTtM -EPCjjvbdRpUGjGEX -DnbkKvbdWfYytAPT -EPCjjvbdUMVoBVni -EObkKvbdxnShYTIc -EObjjvbdVAaqSprZ -DncLKvbdKVtfDdgJ -DoCjjvbdliEUQtqa -DnbjjvbdiGjCyWKV -DnbjjvbdqrVLOLBN -EObkKvbdUaCRSqSZ -EObkKvbdTkvPAuni -DoCjjvbdIGgZyXwg -DoDLKvbdssRsYzEc -DnbjjvbdZLqdTmkm -EPCjjvbdUtNTfLvK -DncKjvbdfMewGmJk -EOcLKvbdCTBDTfWr -EPDKjvbdFpASwGey -EPCjjvbdZLrETmkm -EPDLKvbdyXhjCQZk -DnbkKvbdeATqMxJf -DoCjjvbdjJfHilwr -EPDKjvbdzitopESt -EPDKjvbdEuxopMjF -DoCkKvbdvBEYroFI -DnbkKvbdrNZiyMIJ -EPCjjvbdxVMdpyMO -DnbkKvbdQlxCZOUz -DnbkKvbdqmZiyLhJ -DncLKvbdXnRAXuWU -EObkKvbdRadElJYk -DncKjvbdLiBkqYAS -DnbjjvbdmRyUysDi -DoDKjvbdKCicQjDY -EOcLKvbdRkZGVGjs -DoDKjvbdtSrSyZdc -EOcKjvbdRyjISbvA -EPCjjvbdHffyyYYH -EOcKjvbdaogHDkzd -EPCjjvbdidkGuPAO -EOcKjvbdCDpAujMf -DoCkKvbduVnXjQsA -DnbjjvbdTulQJtAq -DncKjvbdqTsgRrLU -DoCkKvbdzdynzdyp -EObkKvbdemGXHNKL -EOcKjvbdJXtCHlRQ -EPDKjvbdegkWRnQg -DoCjjvbdyXiKCPyk -EPDLKvbdlZTRsZHU -DoCjjvbdfNFvgNKL -DnbjjvbdbVBgYLTh -DncKjvbdcJMikFvx -EPDLKvbdUMVnaVoJ -DoCkKvbdgQBzvcxI -DoCjjvbdZtIhxdSn -EPCjjvbdRWnEDMID -EObkKvbdjlakydfo -DncLKvbdrpWOicVf -EOcKjvbdhgKDYuiu -DoDKjvbdmIdTqUqa -EPCjjvbdwtleQxkn -EObkKvbdcJNKKfWx -DncLKvbdNsUWGdtp -DoDKjvbdWSOXbEkc -EPCkKvbdpyOhHREY -DoDKjvbdkyTSTYft -EPCjjvbdFjdrbgmV -DncLKvbdrounjDWG -DoDKjvbdVTmTfLvK -EPDLKvbdSCDeLiYk -DoCkKvbdrXPlDIxq -DncLKvbdKVuGDeHJ -DnbjjvbdrWokcIxq -EObjjvbdKVuGEEfi -EPDLKvbdrbGMlGjy -EPDKjvbdlqxtzSci -EOcLKvbdwygeeweS -EObjjvbdjKGIKNYS -EObkKvbdVrOXbElD -DnbjjvbdrMzKZLgi -EPCkKvbdMpXqWNfs -EPDLKvbdrSUkOLAm -EPDKjvbdZisIPfbG -EPDLKvbdRDbaQRES -DncKjvbdVTmUGLvK -EOcKjvbdYzcGRjWZ -EObjjvbdMuSrLNAX -DncKjvbdjgflGFnL -DncLKvbdWIXvXfxz -DoDLKvbdNHComPtk -EOcLKvbdSBceLhyL -DoCkKvbdZRMeImFR -EPDLKvbdiifIKMwr -DoCkKvbdvBDxsOeI -EPDLKvbdxmsHxShc -EOcKjvbdcyyPxZRC -DoCkKvbdsBfNMHKy -DoDLKvbdaRebhTfL -DncLKvbdypoNJKXA -EObkKvbdzRPNJKXA -DnbkKvbdTvLoitBR -EOcKjvbdWHwuxGxz -EObjjvbdZHWdAPTJ -DnbjjvbdySnJMqag -EPCkKvbdtTRsYzFD -EPDLKvbdhytelQnG -EPCkKvbdTppntuHm -DnbjjvbdZeYGzhIb -EPCjjvbdIwsaglQp -DoCkKvbdpstGrRkU -EObjjvbdCJLBjiFj -EOcLKvbdePErjstS -EPDKjvbdpxnhGqDx -DnbjjvbdZyEKOClS -DoCjjvbdpyOhHREY -DncLKvbdNGcPmPuL -DoDLKvbdQwNccLgc -EPDKjvbdmbJvxPNu -DnbkKvbdQwOEDMHc -DoDKjvbdXrlAltOx -EPCkKvbdGQASvgGZ -EOcLKvbdmttykKSG -EOcLKvbdGLFSbgmV -DncLKvbduCbuWvOo -EPDKjvbdSQTfiecw -DoCkKvbdYkqctNkm -DoDLKvbdlZSqsZHU -DoDLKvbdqGEEtVaI -EObjjvbdhytekpmf -DoDKjvbdmuUzKiqf -EObjjvbdrMyiyLhJ -DoDLKvbdEARhlzWw -EObjjvbdaRfCgsek -EPDKjvbdaNKaruNH -EOcLKvbdJqZeOenF -DnbjjvbdTfzmlXVe -DoCjjvbdzQoNIjXA -EObkKvbdMpYQvNfs -DncLKvbdVrOYCElD -DoCjjvbdijGIJlwr -DoDLKvbdrXQMDIyR -EPDLKvbdEYYMUTtM -DncKjvbdkHgMFenL -DnbjjvbdqdFIpOWB -EObkKvbdqFceTvAh -EObjjvbdyOSgxSiD -EOcKjvbdDnbkKvcE -DoDLKvbdYqMeImFR -EObkKvbdwtleRZMO -EPCkKvbdrWolCiYq -EObjjvbdrXPkcJYq -DoCkKvbdtlXvaUBX -EOcLKvbdeYZssrFz -DoDLKvbdnGeYMnHZ -EObkKvbdYTLaMtOx -DoDLKvbdJcJcRKDY -EPDKjvbdeKJrVtzn -DoCkKvbdrSUkNjaN -DncKjvbdeATqNXjG -EObkKvbdqlzJyLhJ -EObjjvbdDjIJvXjA -EObjjvbdzGyMAMdw -DoDLKvbdFfJrNiTq -EOcLKvbdBhkCKiGK -EObjjvbdpssgSRjt -DncKjvbdKaLGlbXq -EOcLKvbdlYrqrxgU -EPCjjvbdVqmxBeLc -EPDLKvbdZQmFJNFR -DoCkKvbdkCkkQfuH -DncKjvbdauCGwjsh -DoCjjvbdEASIlywX -DncKjvbdLAjgNBxR -DncKjvbdCDpBVimG -EOcLKvbdqlzJxkhJ -EPDLKvbdtvNxKRTA -DnbkKvbdGLFScINV -DoCkKvbdQvmdCkhD -EPDKjvbdFjdrbhNV -EPCkKvbdZLrETnLm -EPDLKvbdTvLoisaR -EPDLKvbdsrrTZZdc -EPCkKvbdZMRcsmlN -DncLKvbdxnTHxTIc -EOcKjvbdzROliJwA -EOcKjvbdsQVnjDVf -EObkKvbdqGDdsvBI -DncKjvbdwtleQxkn -EObjjvbdTqRPUuHm -DnbjjvbdVwIwvEFH -EPCjjvbdZshhxcsO -DoCkKvbdKCibqJbx -EOcKjvbdUVlQKTaR -EObkKvbdVTmUFlWK -EOcLKvbdmIctRVRa -DoDKjvbdPIAYZAYa -DoCkKvbdjvWnDbXw -DnbjjvbdtvNwjRTA -EObjjvbdNHComQUk -EOcKjvbdySnImRbH -DoCjjvbdDjIKVxKA -DncLKvbdKefHbApu -EObjjvbdehLWRmpg -EOcLKvbdJTZAsMwl -DoDKjvbdZirgpHCG -EObkKvbdozmcjxPA -EObkKvbdsZkosAgn -EPCjjvbdSxKlNzjx -DoCjjvbdfILVrNpg -EPCjjvbdGGKRnJTq -DnbjjvbdpssgSSLU -DoDKjvbdrDdiPmvB -EPCkKvbdZtJJYcsO -DoDLKvbdNdctIhkE -EPCjjvbdcImJkFvx -EOcLKvbdGLErbhNV -DoCkKvbdnQZxukYb -EPCkKvbdWSNxBeLc -EPCkKvbdsPvOjDWG -EOcLKvbdeFOqavbj -EPCjjvbdjAQHApHK -EPDKjvbdwXMBVaVu -DncLKvbdMowqWNfs -DoCkKvbdRbEFMJYk -DoCkKvbdrNZjZLhJ -DoCjjvbduDCtwWPP -EObjjvbdNeEUJIjd -DnbkKvbdlYsRsYgU -DoCjjvbdUxgsyjnn -EObkKvbdbLMGPODA -DoCkKvbddneTKtUS -EOcKjvbdvvkaWAuu -EPDKjvbdVUNUFkuj -EObjjvbdKDKDQjCx -EPDKjvbdnUuZjiqf -DoCkKvbdsCFmMGkZ -DncKjvbdrpVnjDWG -DnbjjvbdiZtfMQmf -DoCkKvbdwWkaVaVu -DoCjjvbdSCDeLiZL -DncKjvbdEYYLtTsl -EPDLKvbdOSsufeVQ -EOcLKvbdWSOXadlD -EPDLKvbdpaJFAXHd -DncKjvbdSCDdkhyL -DoCjjvbdIMBzmvqL -DnbkKvbdVUMsfLvK -DoCkKvbdlhctQuSB -DncKjvbdJuuGEFGi -EPCjjvbdJSyAsMwl -EOcKjvbdUtMtGMVj -EPCkKvbdHDkWKCKK -DncLKvbdySnImRag -EPCjjvbdwMvAMcdm -DnbkKvbdelevfmJk -EPDKjvbdYORAYUvU -EPCkKvbdVwIxWDeH -EObjjvbdtvOXipsA -DncLKvbdhlEdOUcZ -EOcLKvbdTlVoAuoJ -EPCkKvbdNQXpunHT -EOcLKvbdWXJXvDdg -DnbkKvbdZoOJFEzK -EObkKvbdmbKWwoOV -DnbjjvbdiHKDYvKV -DncKjvbdfSBWzlDP -DoCkKvbdLBKflawq -EObkKvbdUsmUFkvK -EObjjvbdLqwNZtpz -DoCkKvbdsBfNLfjy -DncLKvbdjvWmcbYX -EObkKvbdaMkBruMg -EPCkKvbdHkazmvqL -DnbjjvbdRyjHrbvA -EPCkKvbdNQXpvOHT -EObjjvbdOYPVzcnU -DoCjjvbdaSGCgtFk -DoDKjvbdxmsHxSiD -EObjjvbdZirgogCG -EOcLKvbdmuVZkKSG -DncLKvbdUyHszKnn -DnbkKvbdxmsHxTJD -EPCkKvbdVrOYBdkc -EOcLKvbdhkdcmuDZ -DncKjvbdwuMdpyLn -EObkKvbdxVMdpxlO -EPDKjvbdmbKWwoOV -DoCjjvbdhkeDmtby -DncLKvbdLFehCBQu -DoCkKvbdYSkaNUOx -DnbkKvbdmaivxPNu -EPDKjvbdfNFvgNKL -EPDKjvbdhlEdOUcZ -EPDLKvbdTukpKUAq -DncKjvbdUVlQKTaR -DnbkKvbdYgWdAPSi -DoDKjvbdIwsbHkpp -EOcKjvbdlZTSTYgU -DoCkKvbdNHColpVL -EPCjjvbdxrmhmRag -EObkKvbdUxgsyjnn -DoCjjvbdsQVoJbvG -DoCkKvbdBdQBVjMf -EObkKvbdIHHZxxXg -EOcKjvbdJuuFdEgJ -DoDLKvbdwyhGGXeS -DnbkKvbdSKyFuGkT -DoDKjvbdiGibxvKV -DncKjvbdnBjXXoNu -DnbkKvbdFpATWffZ -EPCjjvbduDCtvvOo -EObjjvbdIsZArlxM -DncKjvbdEvYopMjF -EObjjvbdwuMdqYkn -DoCjjvbdwyhFfYEr -EPCjjvbdqUTfrSLU -EOcLKvbdzGxlANEw -EPCjjvbdEOcKjwCd -EPCkKvbdOSsvGeUp -DncKjvbdhlEcnUcZ -EPCkKvbdUVkoitAq -DnbjjvbdOAJTTjSA -DncKjvbdqmZiyLhJ -EObjjvbdpstGqrLU -EPDLKvbdFxuVAcwb -DoCkKvbdauBgYKsh -DnbjjvbdZMRcsmkm -EOcLKvbdqrVLNkBN -DoDKjvbdNQYRWNgT -DoCjjvbdCTBCtFvr -DncKjvbdZyEKNcMS -EPCkKvbdVviYVdFH -DoDKjvbdePErjtUS -EObkKvbdwtmFRZLn -DncKjvbdpedEsvAh -EPCkKvbdzoQRFClY -DoDKjvbdIxTbIMQp -DoDLKvbdxsOImSCH -EPCjjvbdYfwEAOri -EOcKjvbdnPyyWLZC -EOcKjvbdhlFEOVCy -DoCjjvbdwyhFfXdr -DnbkKvbdZQmEhleR -DnbjjvbdbAudepPw -DnbjjvbdMpXqVmgT -DncLKvbdNeEUIhjd -EObkKvbdMfbomQUk -DoCkKvbdqvpMDJYq -DoDLKvbdfekzNfgA -EOcLKvbderAvzlCo -EOcLKvbdiZtelQnG -EPDLKvbdRXNdClHc -EPDKjvbdNrsufeUp -DncKjvbdZQldiMeR -EObkKvbdiLdcmtby -DncLKvbdZQmEhleR -DncLKvbdZRNEiMdq -DncLKvbdWRmwadlD -EPDLKvbdGLEsDHlu -DncLKvbdZjTIPgCG -EObjjvbdxnTIXsIc -EPCjjvbdliETptqa -EOcKjvbdlrZUyrci -DoDKjvbdbKlFnnDA -DnbjjvbdwXLaWBWV -DoCkKvbduaEZSoFI -EPCjjvbdRyjHrbvA -EPCjjvbdLhakpxAS -DoCkKvbdmaiwXoNu -EOcKjvbdyNrhYShc -EObjjvbdsCFllGjy -DnbkKvbdZshhxdTO -DoDKjvbdZjShPfaf -EOcKjvbdmajWwnmu -EObjjvbdJvUfEFHJ -EPCkKvbdOEcsiIkE -EPCkKvbdkNBlZeGo -DoCjjvbdVviXudFH -DnbkKvbdjJfHjMxS -DoDLKvbdGBPRZJzm -EOcKjvbdiCObdvqR -DnbjjvbdVwJYWDeH -DncKjvbdGAoQxizm -EObjjvbdxmsIYSiD -DncLKvbdqqtkOLAm -EObjjvbdvvlAvBWV -DncKjvbdvAdZTPFI -EOcKjvbdjAQHAogK -EObkKvbdpxoIHRDx -EPCkKvbdffLynGgA -EPDLKvbdTvLpKUAq -EOcKjvbdmttzKjSG -DoCkKvbdqwQMChyR -DoDKjvbdrzMPsAgn -DoDLKvbdyYJKCPyk -DoCkKvbdRbEEkhxk -EPCkKvbdBdQAuilf -EPDLKvbdRaceMIyL -EOcKjvbdraelkfjy -EOcLKvbdEASIlzWw -DnbkKvbdOSsvGeUp -DnbjjvbdmuVZkJrG -DnbkKvbdVwIwvDeH -DoDKjvbdwWlAvBVu -DncKjvbdSKyFuGjs -DoCkKvbdOXnuzcmt -DncKjvbdrXPlDJZR -EPDLKvbdsBfNMGjy -EPDLKvbdiifHilwr -DnbkKvbdjvWmcbYX -DoDLKvbdZnmhddyj -EPCkKvbdemFvfmKL -EPDLKvbdNxPVzcnU -DnbjjvbdRkYfUgLT -EPCkKvbdZRMdhldq -EObjjvbdYqMdhmFR -DncLKvbdJvVGDeGi -EPDKjvbdUtMsfLuj -DoDLKvbdZyEJnClS -DnbkKvbdjcMKqGtg -EPCjjvbdDnbjkXDE -DnbjjvbdLGGICAqV -EPDKjvbdWIXvYGxz -EOcLKvbdBiLCKhfK -DnbkKvbddwzUURez -EOcLKvbdZQldiMdq -DncLKvbdKVtfEFGi -DoCkKvbdvAcxsPEh -DncLKvbdjvWmcbXw -EObkKvbdqiAJeNOe -EOcLKvbdUMWPBWPJ -EPCjjvbdOFDshhjd -EOcLKvbdVrNxBeMD -EPDKjvbdiGicZWKV -EObkKvbdtTRrxzFD -DoCjjvbdjJfHilxS -DoCjjvbdelfXGmKL -EPCjjvbdIrxaTMwl -EOcLKvbdRECaPpcr -DnbkKvbdiLeDmtby -EPDLKvbdGcjvKCJj -EOcKjvbdWWiXuceH -DoCkKvbdpstHRrLU -EPDLKvbdkHgLeemk -EPCkKvbdzGxlANEw -EObkKvbdjKGHjMwr -EPCkKvbdiUzEvquC -EOcLKvbdwXMBWBVu -EObkKvbdeKKRvUzn -DncLKvbdSBceLhxk -DoDLKvbdJbibqJbx -DncKjvbdeAUQlxJf -EPDKjvbdbUafwkUI -DoCkKvbdxnTIXriD -EPDLKvbdRacdlJYk -EOcLKvbdmgFXlnGy -EOcKjvbdHELWJaij -EPDLKvbdLhbMQxAS -DnbkKvbdhbPDFXRR -EOcKjvbdqwQMDIxq -DncKjvbdeOdrkTsr -EObjjvbdyOSgwriD -EPCkKvbdjmCLyeHP -DnbjjvbdZisHpGbG -EOcKjvbdIHGzZXwg -DncLKvbdwWkaWAvV -DoDKjvbdffLzOHHA -EPCjjvbdqZPIHREY -DoCkKvbdDjHivYKA -DoDLKvbdYNqAYVWU -EPCkKvbdzjUpPcrt -DncLKvbdlqyVZrdJ -DncLKvbdDoDLLXDE -DoCjjvbdcSbjtDia -DoDKjvbdDxXlUTsl -DncLKvbdJYTahLpp -EObkKvbdNQXqVnHT -EObjjvbdijGIJlxS -EObjjvbdOStVfdtp -EPCkKvbderBWzlCo -EObjjvbdKQzEnenF -EPCjjvbdmtuZkKRf -EPCkKvbdEJhJuxKA -EPCjjvbdgGLymfgA -EObjjvbdRbDeLhxk -EOcKjvbdrSUkNkAm -DoDLKvbdEOcLLXDE -EObjjvbdBhjbKiFj -DoDLKvbdBdQAuimG -DnbjjvbdDwwkstTl -DoDLKvbdVwJYVdEg -EOcKjvbdACqwizJQ -EObjjvbdZsiIyETO -EObkKvbdGLFSbhMu -EOcLKvbdFkFTChNV -DnbjjvbdVBCRSprZ -DoCjjvbdssRsYydc -DoCkKvbdUMWOaWOi -DoDKjvbdYSlBMsnx -EObkKvbdNsTvHFVQ -EPDKjvbdZisIPfaf -EOcLKvbdpssfqqjt -EPCkKvbdNHCpMpVL -EPDKjvbdczZPwxpb -EPCjjvbdnBivxPOV -DoDKjvbdUtNTelVj -EPDKjvbdjhHMFfNk -EObjjvbdEuyPolie -EPDLKvbdKQydneme -EPCkKvbdQvnECkgc -EPDLKvbdatbGxLTh -DoDLKvbdNPxQvOGs -DoDLKvbdySnImSCH -EObkKvbdvBEZTOeI -DoCjjvbdatagXkUI -DnbjjvbdmbKXXnnV -EOcLKvbdmbKXXoNu -EPCkKvbdNsUWGduQ -DncLKvbdpssgSRjt -EPDLKvbdiUzFXSUb -EObkKvbdyzeORgiI -EOcLKvbdKDKDQibx -DoCjjvbdmJDtQuSB -DncLKvbdaNKaruMg -DnbkKvbdOEctJJKd -EObjjvbdkVvnECXw -EObkKvbdKaLHMbXq -DoCjjvbdYzcFqiuy -DoCkKvbdvwLaWAvV -EPDLKvbdnBiwXoNu -EOcLKvbdLBKgNBwq -EPCkKvbdCJLBjiFj -EObjjvbdptUGqrLU -DoCkKvbdWXJYWEFH -EOcLKvbdNeEThiLE -EPCjjvbdtAHQhAAr -EOcKjvbdUGzmlXVe -DnbkKvbdrylPsBIO -EPCjjvbdICLzEzAD -EPDKjvbdrpVoKCuf -EPCjjvbdRkZFuGjs -Dnbjjvbdznopdbkx -DoDLKvbdmgFYNNfy -EObjjvbdptUHRrKt -DoCkKvbdhfjDZWJu -DncLKvbdLGFgbBRV -EPCjjvbdZnnIeEyj -DoDKjvbdmtuZjirG -EPCkKvbdmbJvwoOV -DncLKvbdJpydoFme -EPDKjvbdFyUtaEXb -DnbkKvbdqFcdtWAh -DnbjjvbdWRnXaeMD -EOcKjvbdCIkBkJGK -EOcKjvbdJTZBSlxM -DnbjjvbdziuPocsU -DnbjjvbdhzUelQmf -EPCjjvbdUaBqSprZ -DncLKvbdxZgefXdr -EObjjvbdKVuFdEgJ -EPCjjvbdAMgyTWzY -DnbjjvbdiHJbxuiu -DoDLKvbdUtNTekuj -EPCjjvbdUQpnttgm -DoDLKvbdVAbRTRSZ -DncKjvbdkxsSTYgU -DnbkKvbdMfbomQUk -DoCjjvbdTAEiHbOd -DoCjjvbdczZPxYpb -DnbkKvbdUVkojUBR -DncKjvbdddnqavbj -DoDLKvbdxwhiapZk -DoDKjvbdZirhPfaf -DoDKjvbdTukoitAq -DoCjjvbdrJAKFMne -EObkKvbdZQmEhmFR -DoCjjvbdHgHZyXxH -DncLKvbdNHCpNPuL -DoCkKvbdfIKvRmpg -DoCjjvbdNsUWHEtp -DoCjjvbdpfDdtWAh -DoDLKvbdBhkCKiGK -EObjjvbdtSqsYydc -EPDLKvbdQccBPqES -EOcLKvbduMXvaUAw -EOcLKvbdZMRctNkm -EObjjvbdRadFMIxk -DncLKvbdjhGlFfOL -DoCjjvbdhtzEvqtb -DnbjjvbdUtNUGMWK -EPCjjvbdaaWEfQQX -DncKjvbdunszpkOt -DoDKjvbdEJgjWYKA -DoCkKvbdQYmAGsRj -DoCjjvbdmozYujyC -DnbkKvbduVnYKRTA -DnbkKvbdZxcjNblS -EPDKjvbdzRPNIiwA -EObkKvbdzitopESt -EObjjvbdfILVrNpg -DoCjjvbdNGcPmPuL -DnbjjvbdEYXlUUTl -DnbjjvbdraellHKy -DoDKjvbdZQmEhmFR -DoCkKvbdZnnIdeZj -DnbjjvbdjcMKpgVH -EObkKvbdTfznLvue -EOcKjvbdFkErcIMu -DncKjvbdGdKvKBjK -DoCjjvbdVvhwvEFH -EPCkKvbdmJEUQuSB -DncKjvbdIsZBSlxM -DnbkKvbdmbJvxPNu -DoDKjvbdTqRPVUhN -DoDLKvbdwygefXdr -DnbjjvbdLGGHbBRV -DncLKvbddijSVtzn -EObkKvbdZnnJFFZj -EOcKjvbdCTBCsfXS -DoDLKvbdmttzKjSG -EOcKjvbdyNsIXsIc -EOcKjvbdbVBgXjtI -EOcLKvbdGFjRnJUR -DnbkKvbdYTMBMtOx -EPCkKvbdNGcQMouL -DoDKjvbdJcKDQibx -DoDLKvbdrpWOicWG -EOcKjvbdRaceMIyL -EPDLKvbdWWiYWDeH -EPDLKvbdczZQXxqC -DoDKjvbdLBKgMaxR -DnbjjvbdZjShQHBf -DoCkKvbdKaLGlbXq -DnbkKvbdGdKujCJj -EObkKvbdIBkydzAD -DnbkKvbdqUTgSRkU -EOcLKvbdBiKbKhfK -DoDKjvbdVwIwvEEg -EPDKjvbdIjEAKQHE -DoCkKvbdEPCkLWcE -DoDLKvbdrDeJQNua -EOcLKvbdNddUIhjd -EPCkKvbdYNqAXtvU -EObkKvbdUaCRSqRy -EPCjjvbdqqtjmjaN -EPDLKvbdhbOcFWpq -DoDKjvbdULvPBVni -DoDKjvbdGGJrOJTq -DoCkKvbdqceIpNvB -EOcKjvbddePSCXCj -EPCjjvbdVUNTekuj -DnbjjvbdLGGHbApu -DoCkKvbdcTDLTcia -DnbkKvbdNsUWGeVQ -EObjjvbdZLqcsmlN -EObkKvbdxrnJMrCH -DnbjjvbdqvolChxq -EPCjjvbdaNKbSuNH -DnbkKvbdlYrrTYft -EPCjjvbdwtldpyMO -DnbkKvbdNddThiKd -EPCkKvbdjJfIJlwr -EPCjjvbdJpzEoFme -DnbkKvbdiMEcmuDZ -EOcKjvbdkVvmdBww -EOcLKvbdAMgxrwZx -EObjjvbdatbGwjtI -EOcKjvbdTAEhhCOd -DnbjjvbdfNFwHNJk -EObjjvbdVBBqSpqy -EPCjjvbduaEZSndh -EPDLKvbdpstGqqkU -DnbkKvbdIwtCHlQp -DncKjvbdrbGNMGkZ -EOcKjvbdILaznWqL -DoCjjvbdTXjkmzkY -DoCjjvbdIGfyyXxH -EOcKjvbdjKFhKNXr -EPDKjvbdRDcApRES -EObjjvbdmfdxNNfy -EObjjvbdDihKWYKA -DoCjjvbdzaAOffal -EPDLKvbdQccBQQcr -EPCjjvbdTlWPAvOi -DnbjjvbdqUTfrSLU -EObjjvbdVAbRTRRy -DoCkKvbdnCKWxPOV -EOcKjvbdFjdrbhNV -DnbjjvbdrzLpTAhO -DoCjjvbdDxYMUUUM -DnbjjvbdmoyxujyC -DnbjjvbdUVkoitAq -EObjjvbdrEEhpOWB -DncKjvbdRjyGVGjs -DoCkKvbdJJdAKPgE -DoDKjvbdKDJbqKCx -EPDLKvbdcTDLUDia -DoCkKvbdePEsKssr -EPCjjvbdJbjCqJbx -DoDLKvbddBrmSATm -EOcLKvbdlhcsqVRa -EOcLKvbdKfGICBRV -EPDLKvbdrovPJbvG -DoCjjvbdbAvFGQQX -EPDLKvbdlZTSSxft -DnbjjvbdLqvmZuQz -DncLKvbdZshiYdSn -EOcLKvbduMXvaTaX -EObjjvbdZtJJYcrn -EOcLKvbdczZPwxpb -EPDKjvbdatafwjtI -EObkKvbdsQVnicWG -DnbjjvbdrWokcIyR -DncLKvbdJuteceGi -EOcLKvbdADRwiyiQ -EPDKjvbdCIkBjiFj -EPDKjvbdrNZjYkgi -DnbkKvbdSLYeuHLT -DoDKjvbdkNBkzEfo -DnbkKvbdcyxowyQb -EPDKjvbdYkrETnMN -DoDKjvbdwWlAvAvV -EPCkKvbdczZPxZQb -EPCkKvbdKCibpjCx -EOcKjvbdhytfLqOG -DnbjjvbdxmsHwriD -EPDKjvbdmfeYMmgZ -DoCkKvbdNQXpvNfs -DncLKvbdirziSkJz -EOcKjvbdHffzYxYH -EOcKjvbdWXIxWDdg -DncLKvbdVvhwuceH -DoDLKvbdFxtuBDxC -DncLKvbdJcKCqJbx -DoCkKvbdxLWcgzyf -DnbjjvbdCJLBjiGK -EPCjjvbdcasMrATm -DoDLKvbdLFfICAqV -EPDKjvbdqmZjZMHi -DncKjvbdczZPwxqC -EObkKvbdrWpMDJYq -EPCjjvbdLFehCBQu -EPCkKvbdRzJgsDWA -DoDKjvbdIsZArlxM -DncLKvbdqFcdsuaI -DncLKvbdULvPBVni -EOcLKvbdWXJXuceH -EPDLKvbdaNLCTVMg -EObkKvbdUxhUZjnn -DncLKvbdeATplxKG -DoCjjvbdmSYtzSci -EOcLKvbdkMbLzEfo -EPCjjvbdrpVoJcWG -EPCjjvbdXrlAlsoY -DoDLKvbdUxhTzKnn -EPCjjvbdOEdUJJLE -EObjjvbdKDJcRKCx -EPDKjvbdcyxpXxqC -DnbkKvbdZxdKODMS -DncLKvbdcImJjfWx -DnbjjvbdpfEFTuaI -DnbkKvbdZoNheEyj -EOcKjvbdjFKfuPAO -DnbkKvbdFVyQQNKF -DnbkKvbdDjHiuwjA -EPCkKvbdMgDPlotk -EPDKjvbdxnShXsIc -DoDLKvbdOTUVfduQ -DncKjvbdFejRnIsq -DncKjvbdSQUHJfEX -DncLKvbdRXOEDMHc -DoCkKvbdsZkosAgn -DoDKjvbdUsmUGLuj -EPDKjvbdiifIJmYS -DoDLKvbdZQmEhmFR -EObjjvbdeUAUASlv -DoDLKvbdUsltFlVj -DoCjjvbdSiZjRABM -EOcLKvbdegkVrORH -DoDKjvbdYlRdTnLm -DncKjvbdzitopESt -DnbkKvbdhbPDEwQq -DncKjvbdSKxetgLT -DncKjvbdZQmEiNFR -EPDLKvbdUyITzLPO -DnbjjvbdznpQdblY -EObkKvbdbLMFoODA -EPDLKvbdBhjbLJFj -DoDKjvbdNwoVzdOU -DncKjvbdvBDxsPEh -DnbkKvbdSBceLiZL -EPCkKvbdOhAXyAZB -EObjjvbdZisIQGbG -EOcLKvbdAMgxrvyx -EPDKjvbdCDpAvKMf -DoDKjvbdxVMdpxlO -EOcKjvbdJbicRJbx -DoCkKvbdTppnuVIN -EObjjvbdZjTIPfbG -DoCkKvbdpyOhHQcx -DoCjjvbdfHjvSOQg -DoCjjvbdzoPpdcMY -EPDKjvbdmfeYNNfy -EPCjjvbdXGYzUAPT -DoDLKvbdypnmJKXA -DnbkKvbdBsAcUFwS -DoDLKvbdQYmAGsRj -EObjjvbdUxhTyjnn -DoCkKvbdrouoKCvG -DoDLKvbdhtydwSUb -EPCkKvbddwytUSFz -EOcKjvbdrbFmLgLZ -EObkKvbdbPffckzd -EObjjvbdDxXlTtUM -DnbkKvbdqGEFTvAh -EPCjjvbdDoCkKwDE -EOcLKvbdVviYWDeH -EPCjjvbdWSOYCFLc -DncKjvbdmbKWxPNu -DoCkKvbdZshhxdTO -DoDKjvbdwtldqYkn -DoDLKvbdYSlBMsoY -EPDKjvbdRkZFuHKs -DnbkKvbdeYZstRez -DoCjjvbdrNZixlIJ -DoCjjvbdmgFXlmgZ -EPCkKvbdYlRcsmlN -DoCjjvbdOFETiJKd -EPDLKvbdBhkCLJFj -EPCjjvbdmuVZkJrG -DnbkKvbdFjeTChMu -DoCjjvbdJTZBSlwl -DnbkKvbdozmdLYPA -EObjjvbdtbbtvuoP -DncKjvbdqUTfrSKt -DncKjvbdyTOImSBg -DnbjjvbdcTCkTdKB -EOcKjvbdKaKgNCXq -EPDKjvbdZoOIeEyj -DoDKjvbdYqMeIleR -DncKjvbdnPzZWLZC -EPDLKvbdZirhPfbG -DnbkKvbdGQATXGey -EOcKjvbdZsiJYcsO -DnbkKvbdrWpMDJYq -DoCkKvbdMuTSLNAX -EObjjvbdpxnhHRDx -EOcKjvbdzitpQESt -EPCjjvbdhuZeXSUb -DoCjjvbdNeDtJIkE -DoCkKvbdCEQBWKMf -EPCkKvbdHEKvKCJj -EPCjjvbdatbHYLTh -EObkKvbdLGGICBRV -DncKjvbdRjxeuGjs -DoDKjvbdnHFYNOHZ -EObkKvbdIryAsNYM -EObjjvbdmfdwlnGy -EOcLKvbdNeDsiIkE -DnbjjvbdJTYaSlxM -DoCkKvbdRadEkiYk -DncLKvbdjKFgjNYS -EObkKvbdZjShQGaf -EOcKjvbdKfFgaaQu -DoDKjvbdhgJbyVjV -DoCkKvbdwuNFRZMO -DncLKvbdfekzNfgA -DncKjvbduCcVWuno -EPDLKvbdVrNxBdkc -DnbkKvbdRkYeuHLT -DoDLKvbdwuNEpxlO -DoCjjvbdQccAoqDr -EOcKjvbdUGzmkvvF -DncKjvbdEJhKWYKA -EOcLKvbdssSSxyeD -DoCjjvbdVviXvEEg -DnbjjvbdEuxopNKF -EObkKvbdLAkGlbXq -DoCkKvbdZsiJZESn -DoCkKvbdhkeEOUby -DnbkKvbdbhlikGXY -EObkKvbdLBLGmCYR -EPCjjvbdxUleQyLn -DncLKvbdrbGNMGjy -DoCkKvbdddoSBwDK -EPDLKvbdkyTRsYgU -EPDKjvbdehLVqmqH -EPDLKvbdrbFmMHKy -DncLKvbdmbJvwoOV -EOcLKvbdVUNUFkvK -EPDLKvbdrpWPJbvG -DncKjvbdGAnpxizm -EOcKjvbdyzeNqghh -DoDLKvbdhbPDFWpq -DoDLKvbdfVzxQJzs -DoDLKvbdUMWPBVoJ -EOcLKvbdRpTfjFdX -EPCkKvbdpfDeUWBI -EObjjvbdmuUyjirG -EObjjvbdtbbtwWOo -EObkKvbdrylPsAgn -EOcLKvbdmSYtysEJ -DncKjvbdSCDeMJYk -DoCjjvbdTppoUthN -EPDKjvbdVTmUFkuj -EObjjvbdIsZAsNXl -EOcKjvbdSBcdlJYk -DnbkKvbdZQleIleR -DnbjjvbdddoSBvcK -EOcLKvbdNHComPuL -DncKjvbdiCPCdvqR -EOcKjvbdliDspuSB -EObkKvbdzoPpeCkx -DnbjjvbdcJMijevx -DoDKjvbddZxpYZQb -DoDKjvbdkySrSxft -DoDKjvbdyXhiapZk -EPCkKvbdOAIrsirA -EObkKvbdUaBqSqSZ -EPCkKvbdZtJIyESn -DnbkKvbdTvLoitAq -EPCjjvbdyzeNrIJI -EOcKjvbdiCPDEwRR -EPCkKvbdnCJvwoNu -EPCkKvbdIGfzZYXg -DoCkKvbdkySqrxft -DoCjjvbdZdxGzgiC -DncKjvbdzitpPcsU -DncLKvbdbVCHXjsh -EPCkKvbdlhcsqVSB -EPCjjvbdGYtuAcxC -EOcLKvbdjAQGaQHK -EObjjvbdjlakzFGo -EOcLKvbdvwMAvAuu -EPCjjvbdTqQoVUhN -EPCkKvbdeEnrBwCj -DoCkKvbdsCGMkgKy -DnbjjvbdhkeDnVDZ -EPCjjvbdOFDshiLE -DnbjjvbdDwwlUTsl -EPCkKvbdKWUedEgJ -EPDLKvbdsQVnicWG -EPCkKvbdjgflFfOL -EObkKvbdQYmAHTSK -EObkKvbdSPsgJecw -EObjjvbdjAQGaPgK -DoDLKvbdDxXlUUUM -DoCjjvbdegjuqnQg -DnbkKvbddwzTsqez -DncKjvbdxxJJbPyk -EOcKjvbdGKeTChMu -DoCkKvbdeFPSCWcK -EObkKvbddeOrBwDK -EPCkKvbdaNLBsUmH -DoDLKvbdRpTgJedX -EPCkKvbdkySrSxgU -EPCkKvbdVYhTzKoO -EPCjjvbdxxIjCPyk -EPDLKvbdVrOXadkc -EOcLKvbdEOcKjwDE -DncLKvbdmfeYMnGy -EPCkKvbdVAaprprZ -EPCjjvbdFWYpQMjF -DoCkKvbdqrUjmkAm -DoCjjvbdQvmdDLhD -EPDLKvbdeATqNYKG -DnbkKvbdLGGHaaQu -EObjjvbdezvZEhtX -DnbkKvbdjuwNdBww -DncKjvbdJTZAsMwl -EPDKjvbdkxrrTYgU -EPDKjvbdbAudfQQX -DoCkKvbdVUNUGMVj -EPDLKvbdaNLBsUlg -EPDLKvbdDwxLtUUM -EPCjjvbdMgColpUk -EPDLKvbdaogGdLzd -EPDKjvbdzGxlANFX -EPCkKvbdUQqOuUgm -DoDKjvbdEPDKkXCd -EPDKjvbdbsCkTcia -EObjjvbdTAEhhBnd -EPCkKvbdhzVFkpmf -DnbkKvbdaSFcHtGL -DoCjjvbdGBOpxizm -DncLKvbdGYttaEYC -DoDKjvbdqYoHfpdY -EOcKjvbdrouoKCuf -EOcKjvbdiCPDFWqR -DnbjjvbdVAaprqRy -EPCjjvbdePFSjtUS -DnbkKvbdLGGICBRV -EPDLKvbdkMalZeHP -DoDLKvbdJutfEFHJ -DoDKjvbdVBCRSqSZ -EObjjvbdvvlBWBWV -EOcLKvbdFVxpPmJe -DoDLKvbdKfGHaaRV -DnbjjvbdBvzdIdpW -DncKjvbdNsUWHFUp -EPDLKvbdrSVLNjaN -EPDKjvbdgGMZnGgA -DnbkKvbdSBceMIyL -EOcLKvbdSBdFLiYk -EOcLKvbdRyigrcWA -EPDKjvbdaMkBruNH -DncKjvbdUaCRSpqy -DnbjjvbdIMBzmvpk -DnbkKvbdbVCGxKtI -DncLKvbdliDtQuSB -EObkKvbdHDkVjBjK -DncKjvbdmSYtyrci -DnbkKvbdxVMdpxlO -EPCjjvbdRpTfjGDw -EPCkKvbdhancEvpq -EPDLKvbdNsTvHEuQ -DoDKjvbdfekymfgA -EObkKvbdUWLojUBR -EPCjjvbdJXtBgkpp -DoCjjvbdEPCkLXCd -EPCjjvbdZxcjNcLr -DoCjjvbdZsiJYcrn -EPCkKvbdZtIiZDrn -EObkKvbduLxWaUBX -EObkKvbdZdxGzghb -EOcKjvbdkClLRHVH -EOcLKvbdFjdsDINV -DncKjvbdNeEUIiKd -EPCkKvbdYpmFJNFR -EPDKjvbdlhcsptqa -DoDLKvbdnCKWwoOV -EObkKvbdDnbkLXCd -EObkKvbdQwOECkhD -EOcKjvbdUaCRSpqy -EPCjjvbdBcoaVjNG -DnbjjvbdxmrhXsJD -EObjjvbdcImKKewY -DnbkKvbdpyOgfpdY -DnbjjvbdpyOggRDx -EObjjvbdEOcKjwDE -DnbkKvbduCcUwVoP -EOcKjvbdhgKCxuiu -DoDKjvbdiZtelQmf -DoDKjvbdnBjXYOnV -EPDLKvbdczZPwxpb -EPCjjvbdADRwizJQ -EObjjvbdfVzwpJzs -DnbjjvbdxxIiapZk -EPCjjvbdjcLkQfuH -EPCjjvbdcyyQYYqC -DoCkKvbdEuyPpNJe -DncLKvbdcJNJkGWx -DoDKjvbdZoOIdeZj -DoCjjvbdWHxVwgYz -DnbjjvbdeEoRbWbj -DncKjvbdZMSDsnLm -EOcLKvbdbiNKLFvx -DnbkKvbdjcLjqHVH -DnbjjvbdEYXktTtM -EPCjjvbdCSaCsfWr -EOcLKvbdBdQAuimG -EObkKvbdqdFIpOWB -DncLKvbdelevgNKL -EObkKvbdZMRdUNkm -EPCkKvbdrDdiQOVa -DoDLKvbdCWzdJFQW -EObjjvbdxUleQyMO -DncKjvbdBsAcTfXS -EOcKjvbdRMxBxmtz -EOcKjvbdSKyFuGkT -EPCkKvbdEuxooljF -DncLKvbdYgWdAPSi -DoCkKvbdiHJcYvKV -EPCkKvbdZQldiNFR -DncKjvbdjAPgAofj -EObjjvbdkVvmdBxX -DoDLKvbdsBfMlHLZ -DoDLKvbduWNxKQsA -EObjjvbdOTTugEtp -DoCjjvbdIxUBgkqQ -EOcKjvbdqFceUWAh -DnbjjvbdTkunaVoJ -EPDKjvbdiZtfLqOG -DoCjjvbdcImJkGXY -DncLKvbdpstGrSLU -DncLKvbdRpTfjGDw -DnbkKvbdznpREblY -DnbjjvbdqdEhomvB -DncLKvbdIwtBhMRQ -DoDKjvbdhtzFWqtb -EOcKjvbdiBncEwQq -EPDKjvbdZQleJMdq -EOcLKvbdLAkGlaxR -DoCkKvbdZsiIyDsO -EObkKvbdeOdsKssr -DnbjjvbdJcKCpjDY -EPDLKvbdSBdElIyL -EPCkKvbdyOTHwrhc -EPDLKvbdGLEsDIMu -EPCjjvbdmJETqVRa -DncKjvbdKDJbqJbx -EOcKjvbdbsCkTdKB -EOcKjvbduDCuXVno -EOcKjvbdrXPlDIxq -EOcKjvbdqlyixkhJ -EObjjvbdRkYfUgLT -EPDLKvbdLAkGmCXq -DnbjjvbdHgGzYxXg -DncKjvbdpstHSSKt -DoCkKvbdqvolCiYq -DoCkKvbdmgFYNOHZ -DnbkKvbdqGDeTvBI -DoDLKvbdyzeNrHhh -DnbkKvbdwzHefXeS -DoDKjvbdbiMjLGXY -DnbkKvbdTulQKTaR -DnbjjvbdsPunicVf -DncKjvbdqvpLcIyR -DncLKvbdOFEThhkE -EOcKjvbdZshhxdSn -DncKjvbdpyPHfpdY -DoDLKvbdNGcPmQUk -DoCkKvbdVgwvXfxz -DoCjjvbdCgLegAzc -DnbjjvbdauCGxLTh -DoDKjvbdqFceTvBI -DoCjjvbduMYXAsaX -EPCkKvbdrSVKmkAm -EObkKvbdOYOuzcnU -DncKjvbdYkqctNlN -DncKjvbdSZjHrcWA -DoCjjvbdrEFJQNua -EPCjjvbdRosfjFcw -EObkKvbdZoNiFEyj -EPDKjvbdVgwvXfxz -DoDLKvbdhbPCdvqR -DncKjvbdqvokcIyR -DnbjjvbdpssfqqkU -DncLKvbdzoPpdbkx -DnbjjvbduaDySoFI -EOcKjvbdEASImZwX -DncKjvbdbrcKtDjB -DoCjjvbdQccBQQdS -DoCkKvbdDigjVwjA -DnbkKvbdbVBfwkUI -EOcKjvbdIsYaSlxM -DoDLKvbdKVtedEgJ -EPCjjvbdIryArlxM -DncKjvbdpeceTuaI -EObkKvbdZshiYdSn -DncLKvbdZtIhyESn -DnbjjvbdOYOuzcnU -DoDKjvbdUxhTyjoO -EObjjvbdTppoVVHm -DncKjvbdrWolCiYq -DoDLKvbdNVSrKmAX -EObkKvbdiGicZWKV -DoDKjvbduVmwipsA -EPCjjvbdNPwqVnHT -EObjjvbdelewGmJk -EOcLKvbdgGLzNgHA -DoDKjvbdcJNJjfWx -DoCkKvbdyOTHwriD -EObjjvbdEzspeLcJ -DnbjjvbdjhHLeenL -DncKjvbdOStWHFVQ -EOcLKvbdsZlPsBHn -EPDLKvbdtcCuWuno -DnbkKvbdULunaVni -EPDKjvbdJqZdnfNe -EOcKjvbdqwPkcIxq -EObjjvbdrJAJeNOe -DnbjjvbdRECaPpdS -EPCjjvbdpfEEsvBI -EPDLKvbdIsZArmYM -EPDLKvbdJYUCILpp -EOcLKvbdYlSDtNlN -EPCjjvbdJYTbHkpp -EPDKjvbdYzbfSJvZ -EPCjjvbdRaceMJYk -EObjjvbdZisHofaf -DnbkKvbdRbEElIyL -EOcLKvbdijFhKNXr -EOcKjvbdRXNdDMID -DncLKvbdbiNKLGXY -DoDLKvbdlZSrSyHU -EObkKvbdqZPIHRDx -DoDKjvbdnPzYujxb -EObkKvbdnHEwlmfy -EObkKvbdCWzdIePv -EObkKvbdqlyiyLgi -EPCjjvbdkySqryHU -EObkKvbdcImKKevx -DncKjvbdEASJMzWw -DncKjvbdRkYfUfkT -EPCjjvbdqYoIGpcx -DncKjvbdGckWKBjK -EPCjjvbdYTLaNUOx -EPDKjvbdwtleRZMO -EObkKvbdGFiqnJUR -DncLKvbdlhdURVRa -EObjjvbdqlzJxkhJ -DncLKvbdFaPQyJzm -EPCkKvbdpssgRrLU -EObjjvbdiCOcFXRR -DncKjvbdqTtGqrLU -EPCjjvbdsCFlkgLZ -EOcKjvbduWOXiqTA -EOcKjvbdkClKqGuH -EPCjjvbdMowpvOGs -EPCkKvbdxrmhmRag -DoCjjvbdiUzFXRuC -EOcLKvbdUMWPAvOi -DoDLKvbdmfdwlmgZ -EPCjjvbdehKurNpg -EOcLKvbdBsAcTevr -EPCjjvbdZjTIPgBf -EObjjvbdPIAXyAZB -EPCjjvbdCDoaVjNG -DncKjvbdrpVnicVf -DoDKjvbdlZTSSxgU -DncKjvbdGZVVAdYC -EPDLKvbdsCGMkfjy -EPCjjvbdSPsfjFdX -DoCjjvbdJXsbIMQp -DncKjvbdzeZnzdyp -DnbkKvbdlYsRsYft -DncKjvbdbiMjLFwY -EPDKjvbdyOShYSiD -DoCkKvbdOTTufduQ -EPDLKvbdVwJYVcdg -DoCkKvbdGFiqnJTq -EOcLKvbdUslselWK -EObjjvbdkxsSSyHU -EOcLKvbdxsNhmSBg -DnbjjvbdqqtkOLAm -DnbjjvbdeFPRawDK -DnbkKvbdLZQirzuG -EPCkKvbdFWYpPlie -EObkKvbdrWpMCiYq -EOcKjvbdiiehKNXr -EPDKjvbdEvYopNJe -EPCkKvbdxrmhmSCH -DoCkKvbdptUHSRkU -EOcKjvbdKCjDRJcY -DoDLKvbdrMzKYkgi -DoCjjvbdZLrDtNkm -DoCkKvbdqYnggQcx -DnbkKvbdrovOibvG -DncKjvbdADRwizIp -EOcLKvbdZisHpHCG -EPCjjvbdZRNFImFR -EPDKjvbdVwIxVceH -EOcKjvbdrDeJQNua -EPCkKvbdIxTaglQp -DncKjvbdGFiqmiUR -EPCjjvbdVwJXvEEg -DnbkKvbdwuMeRZMO -EPCkKvbdZRNFImFR -EPCkKvbdnHEwlmgZ -EPDKjvbdLYqKSzuG -DoDKjvbdZsiJYdTO -DoDLKvbdShyjRAAl -DoDKjvbdRadFLiYk -DnbkKvbdjbkjpgUg -EObkKvbdUaBpsRRy -EOcKjvbdehKuqnRH -EObkKvbdDwxMUTsl -EOcKjvbdptUHSSKt -EPDKjvbdHEKuibJj -EOcKjvbdxxIjBpZk -EObkKvbdelewGmJk -DncLKvbdTvLpKUAq -EPCjjvbdGLErbhNV -DncLKvbdfHjvRmqH -DnbjjvbdkMakyeHP -EPDKjvbdJcKCpjDY -DoCkKvbdRECaPpcr -EOcLKvbdmgFYMmgZ -EObjjvbdZRMdiMeR -DoCjjvbdYzcFqivZ -DoCkKvbdeOeTKtTr -EPCkKvbdXFxytAPT -DncLKvbdZnnJEdzK -DncLKvbdhtyeWrUb -EOcKjvbdEJgivXjA -EPDLKvbdssSTYyeD -EPDLKvbdLBLGmCXq -DnbkKvbdKeegbApu -DoDLKvbdJYUBhLqQ -EPDKjvbdwNWANDdm -DoCjjvbdKfGIBaRV -DoCjjvbdbhljLFwY -DncLKvbdmgFXmNgZ -DoDKjvbdZRMeJNFR -DoCkKvbdWeyZtAOs -DoCkKvbdbiNKLFvx -EPDKjvbdUsmTfMVj -EPCkKvbdijFgjMwr -DnbkKvbdbsCjtDia -DnbjjvbdZQleJNFR -DoDLKvbdNQXqWNfs -EOcLKvbdULunaVoJ -DncLKvbdrEEhpOVa -DncLKvbdRyigsCvA -DoCkKvbdVwJYWEEg -DncLKvbdjKGIKMwr -EObkKvbdrEFIpNvB -DoCjjvbdGLEsDINV -EOcLKvbdJSyArlxM -EPCjjvbdTJZiqABM -DncLKvbdCTAbsewS -DnbjjvbdZjTIPfaf -EPCjjvbdbPfgELzd -DnbjjvbdLBLHMbXq -EPCjjvbdqiAKFMoF -DnbkKvbdIBlZdzAD -EPDLKvbdyTNiNRag -DoDLKvbdZjSgogCG -EPCjjvbdjAPgAofj -EPCjjvbdxmrgxTJD -EObjjvbdSPsgKGEX -EObkKvbdRWnDblHc -DnbjjvbdZQmFImFR -DoCjjvbdjuwODaww -EOcLKvbdVviXvEFH -EPCjjvbdcImJkGXY -EPDKjvbdVAbQrqSZ -DoCjjvbdWWiXudFH -EPDKjvbdapGfdLzd -EObkKvbdQwOEDMID -EPCjjvbdKDKCqKCx -DncKjvbdJvUfEEgJ -EObkKvbdDoDLKvcE -EOcKjvbdqwPkbhyR -EObjjvbdyTOJNSCH -EObkKvbdZsiIxdTO -DoCjjvbdaSFbhTfL -EOcKjvbdUslsekvK -DoDKjvbdehLWSORH -EPCkKvbdBsBDTfWr -DoCkKvbdMfbpNQVL -DoCkKvbdezvZFJUX -EObjjvbdJYUBhMRQ -DncKjvbdlhcsptqa -DoCkKvbdiZtfMQnG -EObkKvbdZRMdhleR -EPDLKvbdkySrSxgU -DoCkKvbdYlSDsmkm -DnbkKvbdkNBkzEfo -EPDLKvbdyYJKCPzL -EOcKjvbdqwPkbiZR -DncLKvbdqdFJQOWB -DoDKjvbdFyUtaDxC -DnbjjvbdZyDinDMS -EOcKjvbdqrVKnKaN -DoCjjvbdMgDPlotk -EPCjjvbdUVlPitBR -DoDLKvbdbsCkTcjB -EPCjjvbdnGdwlnGy -DnbkKvbdapGfdLzd -EPDKjvbddndsKtTr -DncLKvbdsrrTZZeD -EObkKvbdqdFJQOWB -DncKjvbdRadFLhxk -DnbkKvbdfILWSORH -DnbkKvbdqZOggQcx -EPDKjvbdCDpAujMf -EObjjvbdxsOImSBg -DoDKjvbdrSUjmjaN -EObkKvbdrMyjYkhJ -EObkKvbdANHySvzY -EObkKvbdgGLynGgA -DoDLKvbdNdcshiKd -EObjjvbdePErkTtS -EPCkKvbdSCEFLhxk -DoDKjvbdIxUBhLqQ -EPCkKvbdVvhxWDdg -EOcLKvbdKfGHbBQu -DoCjjvbdajlFoNcA -DoCkKvbdQdDAopdS -DoDKjvbdSBceMJZL -DoDKjvbdOStWGdtp -DoCjjvbdGdLWKBij -DnbkKvbdvOszpjnt -DncLKvbdUVlPjTaR -DoDLKvbdliDsptrB -EOcKjvbdZisHpHCG -DoDKjvbdkVwODaxX -DoDLKvbdfVzwpJzs -DnbkKvbdDjIKWYKA -EObkKvbdrJAJdmPF -EObjjvbdeATpmYJf -DnbkKvbdQmYByOUz -EPDLKvbdxmrhXsJD -EPDLKvbdCJLBjiGK -DoCkKvbdYpmFJMeR -DoDKjvbdXnRAXuWU -DoDKjvbdiMFDmtby -DnbkKvbddZyQYZQb -DncLKvbdZtIiYdSn -EObjjvbdwMvANDdm -EPDLKvbdIwsbHkqQ -DncKjvbdURQntthN -EObkKvbdTqROttgm -EPCjjvbdTkvOaVni -EOcLKvbdfNFwHNKL -EObkKvbdjgflFfOL -EObjjvbdUQqOuUhN -DncLKvbdegjurNqH -EPDLKvbdxUmEqZMO -DoDKjvbdGcjvKBjK -DoDKjvbdVTltFkuj -DnbkKvbdLYqKSztf -DoDKjvbdUyHtZkOn -EPDLKvbdvAcyTOdh -DncKjvbdqFcdsvAh -DncLKvbdrbFmMHKy -EOcKjvbdYlRdTnLm -DoCjjvbdEASJMzXX -EObkKvbdMoxQvNfs -EOcKjvbdiHJcYujV -DnbjjvbdvAcyTPEh -DoDLKvbdGQASwGfZ -EObkKvbdMoxRVnHT -EObkKvbdhgJcYvJu -DnbjjvbduWOXipsA -DoDLKvbdQcbaQQdS -EObkKvbdUsltFkvK -EPDKjvbdKyQirzuG -EPCjjvbdmJDtQuSB -EObkKvbdXrkaMsoY -EOcKjvbdrEFIpOVa -EPDKjvbdVqmwadkc -EOcKjvbdqYoIGqDx -EObkKvbdtbbtwWOo -EPCkKvbdSKxfUfkT -EPCkKvbdmJDsqUrB -DncKjvbdhaoCeWpq -EObjjvbdFxuVAdYC -EPCkKvbdqFcdsvBI -EPDLKvbdOTUWGeVQ -EPCkKvbdlhdUQtrB -DoDKjvbdCJLCLJGK -EPDKjvbdMgCpMotk -DnbjjvbdrbFlkgLZ -DoDKjvbdqBJFAWhE -EPCjjvbdpyPHfqDx -EOcKjvbdTlVoBVni -EPCjjvbdrRtkNkBN -EPCkKvbdWWhwuceH -EPDKjvbdcImKKewY -EOcKjvbdYSlBNToY -EObkKvbdZRMeIldq -EPDLKvbdMoxRWNgT -EObjjvbdMIbMQxAS -EPCjjvbdQdDBQQdS -EObkKvbddZyPwxqC -EOcLKvbdACrXiyiQ -EPDLKvbdcSbkUEJa -DncLKvbdTkunaWPJ -DnbjjvbdvBEYrndh -EObjjvbdmIctQuRa -DncKjvbdiUydvqtb -DoCjjvbdhkdcnUby -EOcKjvbdePFTLTsr -EOcLKvbdiHJbxujV -EObjjvbdZsiJZESn -EOcKjvbdpxoHfqEY -EPDKjvbdFyUuBDwb -DoDLKvbdBiLBkJGK -EPCkKvbdliDtQuRa -DoDKjvbdhbOcEwQq -DncLKvbdRosgJfDw -EObjjvbdrzMQSaIO -EObkKvbdUsmTfMVj -EOcKjvbdWXIxWEFH -EPCjjvbdcTCjtDjB -EObkKvbdbBVeGQPw -EOcLKvbdaSGDHtFk -DoDLKvbdqFdFUVaI -EPCkKvbdxxIjBozL -DncLKvbdNddUIiLE -EObjjvbduMYWaUAw -EPCkKvbdWWiXvDdg -EObjjvbdJXsbILqQ -DnbkKvbdDnbjjwCd -DnbkKvbdxUldqZMO -DoCjjvbdKyRKSztf -DncLKvbdLFehBaQu -EPDLKvbdjvXNdBww -EOcLKvbduaEZTPFI -DoCkKvbdfMevfmKL -EPCkKvbdpxoIGqEY -EPCkKvbdKWUecdgJ -EObkKvbdmbJwYOmu -EPCkKvbdIsZArmYM -DnbjjvbdxLXDgzyf -DncLKvbdEvYopMjF -DncLKvbdmJETqVRa -DnbkKvbdrouoKDWG -EPDLKvbdbVCGwkTh -DoDKjvbdZirhPgCG -EPDKjvbdTvMQKUAq -DnbkKvbdLrWlzVQz -EOcLKvbdrEEiPmua -DnbjjvbdczZQXyRC -DncKjvbdnUtzKjSG -EPCjjvbdkNCLzFHP -DncKjvbdZyEKNbkr -EObkKvbdJuuFdEgJ -DncLKvbduCbuXWPP -EPCjjvbdyNrhXriD -DnbkKvbdIxTaglQp -EPCjjvbdJvVFceHJ -EPCkKvbdVBBprqSZ -EOcKjvbdkxrqsYgU -EPCjjvbdGLFSbhMu -EObjjvbdnPzZWLYb -EObkKvbdjblLRGuH -DoDLKvbduaDyTPFI -EPCjjvbdiifIJmXr -EObkKvbdYkqctOMN -EPCkKvbdelfXHMjL -EPDLKvbdeFOrCWbj -EObjjvbdeUAUATNW -EPCjjvbdWRmxBeMD -DoCjjvbdZxcinDMS -EOcLKvbdWRmwbElD -DoDLKvbdpssfrSLU -DncLKvbdQccApRES -DoDKjvbdGdKujBij -DoDKjvbdZLqdTmlN -DoCjjvbdbiNKLGXY -DoCjjvbdVZITzKoO -DoCkKvbdsPuoKCvG -EPDKjvbdNGbomQVL -DnbkKvbdkIHMGFnL -EPDKjvbdvPTzpjoU -EOcKjvbdczZPxZQb -DncKjvbdliEURUrB -DnbkKvbdGZUtaDxC -EPCjjvbdrMyjZLhJ -EPCjjvbdTulPjTaR -DoCkKvbdZeYGzhJC -DncLKvbdwygefYEr -DnbjjvbdehLVrOQg -DnbjjvbdZxcjNblS -DoCjjvbdSLYetgKs -EPCkKvbdVAbQrpqy -EPCjjvbdtTSTZZdc -DnbkKvbdSCEFMIyL -DoDKjvbdrDeJPmvB -EOcLKvbduDDVXVno -DoDLKvbdZdxGzhIb -EObkKvbdhgJbxujV -DncLKvbdlYsRsZHU -DoDLKvbdhzUelQmf -EObkKvbdWWhwvDeH -EPCjjvbdjgfkfFmk -EObkKvbdzaAPHGal -DoDLKvbdEPDLLXDE -DoCjjvbdTukpKTaR -EOcKjvbdhaoCeWpq -EPDKjvbdwjvdHzzG -EPDLKvbdJTZBTNYM -DoDLKvbdRECaPqDr -DncKjvbdjhGkfGNk -EObkKvbdjhGkfFmk -DncLKvbdqlyixkhJ -EObkKvbdjEkHUoAO -EPCkKvbdcasMrAUN -EObjjvbdhzUfLqOG -DoCkKvbdEvYopNKF -EPCjjvbdjuwODaxX -DncLKvbddiirWUzn -EObkKvbdOStVfduQ -DnbjjvbdypnmIjXA -DnbjjvbdRWnEClHc -EOcLKvbdbhljLFvx -EPDLKvbdJXsaglRQ -EObkKvbdhzUfLqOG -EObkKvbdnPyxujyC -DoDKjvbdBiKajiFj -DoDKjvbdZjTHpHBf -EPCjjvbdaSFcITek -EObjjvbdYzcFqiuy -DncLKvbdqdFIpNvB -DoDKjvbdLYqJrzuG -DoDLKvbdVwJXucdg -DnbjjvbdhbObdvqR -DoCkKvbdCEQBWJlf -DoDLKvbdSCDdlJYk -EPDLKvbdZyEJnCkr -DoDKjvbdvAcyTOeI -DoDKjvbdkIHLfFmk -EPCjjvbduaEYroFI -DnbkKvbdjblKpgUg -EOcKjvbdwygefYFS -EOcKjvbdliDsqUqa -DnbjjvbdjcMLRGtg -EObkKvbdRbEElJYk -EPCkKvbdqrUkNjaN -EOcLKvbdRotGifDw -DnbkKvbdUsmUGLuj -DoCjjvbdeKJqvUzn -EPDKjvbdQwNdClHc -EOcLKvbdcScLTcjB -DoCjjvbdvBDxroEh -DoDLKvbdIxUBglQp -EPDLKvbdfVzxQJzs -DncLKvbdqlzKYlIJ -DoDKjvbdaNLCSuMg -EOcKjvbdwjwDgzyf -EPDKjvbdIxTaglRQ -DoDKjvbdVTltGLuj -DoCkKvbdiMFENuDZ -EOcLKvbdZyEJnDMS -DnbkKvbdiBoCeXRR -EPCkKvbdbiMijewY -EOcKjvbdmttzLJqf -DncKjvbdYTLaMtOx -EPCjjvbdfIKuqmqH -DoCjjvbdBdQBVjNG -EObkKvbdieLGuPAO -EPDLKvbdsZlQSaIO -DnbkKvbdEztQeMDJ -EPCjjvbdIjEAJpHE -EOcLKvbdfILWRmpg -EPCjjvbdZyDinDLr -DncKjvbdLGGIBaRV -DncLKvbdmozZWLZC -DoCkKvbdlZSrSxft -EOcLKvbdFjdrcINV -EOcKjvbdQvnDblHc -DoCkKvbdqUUHRqkU -EPDKjvbdnBjWwnmu -DoCjjvbdZxcjNbkr -DncKjvbdZisIQHCG -DoCkKvbdJcJcRJbx -EPDLKvbdlhdUQtqa -DnbkKvbdrzLpSaHn -DoDKjvbdziuPpDrt -EPDKjvbdEYXlTtUM -EObkKvbdqdFIpOVa -DncKjvbdpxnhHQdY -DnbkKvbdLhakqYAS -EPCkKvbdrRtkNkBN -EObkKvbdqrVKmjaN -EOcKjvbdxUldqZMO -EOcKjvbdrbFllHKy -DoCkKvbdySmhlrBg -EPCkKvbdkxrqsYgU -EPCkKvbdZLqcsnMN -DncKjvbdFpATXHFy -EPDLKvbdZRMdiMeR -EPDLKvbdRNXbYmtz -DoCkKvbdpyPIGqEY -DoDLKvbdKaKfmCYR -EPDLKvbdrylPsBIO -EObjjvbdUQqOuVHm -EPCkKvbdezvZFItX -EOcKjvbdZirhQHCG -DoDKjvbdePFSjssr -EOcKjvbdCTAcTfXS -EOcKjvbdkxsRsYft -EPDLKvbdQwODcMHc -DoDKjvbdwuNFRZMO -EPCjjvbdEuyPomKF -DoCkKvbdpxnhGpcx -DncKjvbdiVZeWrUb -EOcKjvbdrEEiPmvB -EOcLKvbdZxdJnDLr -EObjjvbdUtNUFkvK -DoDLKvbdZQmFIldq -EObjjvbdnCJvwnmu -EPCkKvbdRWmccLgc -DnbkKvbdnUtykJqf -DnbkKvbdVBBqSpqy -EPCkKvbdZoOIddyj -DnbkKvbdZQldiNFR -DncLKvbdmRyVZsDi -DoCjjvbdcasMrATm -EOcLKvbdtbbtvuno -DoDLKvbdZtJJYdSn -DnbkKvbdGKeTDHlu -DoCkKvbdZjTHpGbG -EOcKjvbdHDjvKCKK -EObjjvbdddnqbXCj -EObkKvbdlZTSTYgU -EPCjjvbdqqtjmkBN -EObjjvbdtAGqIAAr -EObkKvbdrRtjmjaN -DnbjjvbdMRwMytpz -EPCkKvbdsQWPJbuf -DoDKjvbdqFceUWBI -DoCkKvbdnBjWxPNu -DoDLKvbdiUzFXRuC -EObkKvbdQccBPqES -DnbjjvbdOFDtIiLE -EPDKjvbdYlRcsnMN -DncKjvbdFfJrNhsq -DoCkKvbdsCFmMHKy -EPDLKvbdYkrETnMN -DoCjjvbdYNqAXuWU -EPDKjvbdrovPKDWG -DoDLKvbdbKlGOmcA -DoCkKvbdOStWHFVQ -EObjjvbdhbObeXQq -EPCjjvbdeEnrBwDK -DoDLKvbdrbFmMGkZ -DncKjvbdxZhGGYFS -EPDKjvbdbrbkTdKB -EPDKjvbdraellGkZ -EPCkKvbdssSTZZeD -EPDKjvbdDjHiuxKA -DoCjjvbdzoPqFDMY -EPCjjvbdlAlnmALA -DoDKjvbdmtuZjjRf -DoDKjvbdFpASvfey -DoCkKvbdjlakyeGo -DoDKjvbdxnSgxTIc -EPCjjvbdxZhFfXeS -EPCkKvbdqcdiPnVa -EOcLKvbdmfeYMnHZ -DoDLKvbduCbuWvOo -DoDKjvbdmIcsqUqa -EPDKjvbdzoQQdblY -DoDLKvbdRNXayOUz -DnbjjvbdrJAKFNOe -DnbjjvbdZLrEUOMN -EOcKjvbdwygeexEr -EPCkKvbdbVBfwjtI -EObkKvbdKDKDRJbx -DoCkKvbdGckWKBij -EOcKjvbdzjVQPdSt -EPDLKvbdqlzKYkhJ -DnbjjvbdajkennDA -DoDLKvbdRzJgsCvA -EObjjvbdehKuqmqH -DncKjvbdajlFnnDA -DnbjjvbdjEkHUoAO -DoCjjvbdFVyPomKF -DoCkKvbdJcJbpjCx -DnbkKvbdRaceLiZL -EPDKjvbdeEnrBwDK -DoDLKvbdxKvdHzyf -DoCkKvbdSPtHKFcw -EObkKvbdjhHMGGOL -EOcLKvbdGGJqnItR -DoCjjvbdnGdxNNgZ -DoDKjvbdbKkfOmcA -DnbjjvbdelewHNKL -EPCkKvbdcSbjsdJa -EPCkKvbdTAEhgbOd -DncLKvbdUslselVj -DnbjjvbdVrOYBeMD -EObjjvbdEzspeMDJ -EPCjjvbdcTDLTcjB -EPDLKvbdsPvPJbuf -EOcKjvbdqGEFUWBI -EPDKjvbdVgxWYGxz -EOcLKvbdSPtGjGDw -EObkKvbdGckVibJj -DoDLKvbdeEoSCWcK -EPCkKvbdQvmdClID -DncLKvbdhytelROG -EPCkKvbdeXzTtSFz -EPCkKvbdrXQMDIxq -EObkKvbdtlXvaUAw -DnbkKvbdiMFDmtcZ -EPDLKvbdJqZeOfNe -EPDLKvbdmIdUQtrB -DoDKjvbdVTltGLvK -DncLKvbdZRNEhleR -EPDKjvbdjlakydfo -DnbjjvbdFpASvfey -EPCkKvbdkySrTYft -EOcLKvbdVUMtGMVj -EPDLKvbdmRyUysDi -EPCkKvbdGKeScHlu -EObjjvbdczZPwyRC -EPDLKvbdVYhUZkOn -DncLKvbdJbibqKDY -EPDLKvbdfekzNfgA -EObkKvbdKQydoGOF -EObkKvbdVgwvXfxz -DncLKvbdQdDApQcr -DncLKvbdGFjRnJUR -DncKjvbdjgflFemk -DoDKjvbdlhctRVSB -DncLKvbdZLqctOLm -DncKjvbdfSAvzlCo -EPDKjvbdZRMeIleR -EObjjvbdZRMeJMdq -EOcKjvbdMuTSKmAX -DncKjvbdqYngfpdY -DnbkKvbdxrmiMqbH -EObjjvbdbPgGckzd -DoCkKvbdpstGqqkU -DncLKvbdmJDsqVSB -EPDLKvbdtunYKQsA -EObkKvbdDnbkKwCd -EPDLKvbdEXwkstUM -DoDKjvbdrRtkNkBN -DncLKvbdIwtCIMQp -EPDLKvbdZQmEhmEq -DnbkKvbdxmrhYTIc -DoCjjvbdCSaDUGWr -EPCkKvbdatagXkUI -DncLKvbdEPDKkWcE -DncKjvbdZjShPgBf -EPDKjvbdHDkVjCJj -DoCjjvbdsrrTYzEc -EObjjvbdhlEcnUby -DnbjjvbdemFvfmKL -EObkKvbdlhcsqUqa -DoCkKvbdZtIiYdTO -EObkKvbdEXwlTssl -DoDKjvbdhaoCdvqR -EObkKvbdliEURUrB -DoDLKvbdEYXkstTl -DncKjvbdFkEsDINV -DoDKjvbdFkErcHmV -DoDLKvbdKCjCpjDY -EPCjjvbdjJegjMxS -DnbkKvbdnCKWwnmu -DnbjjvbdqwQLbiYq -DoDLKvbdSZigsDWA -EObjjvbduVnYKRTA -EOcKjvbdTlWOaVoJ -DnbjjvbdSCDeMJYk -DnbkKvbdQvmdClID -EPCkKvbdziuQPdTU -EOcLKvbdhficZWJu -EOcKjvbdZLqdTmkm -DoDKjvbdcImKKevx -EOcLKvbdGFirOJUR -EObkKvbdREDApRES -DoDKjvbdHELWKBij -EOcKjvbdrSVLNkBN -EOcKjvbdBdQBWJlf -DoCjjvbdFpATXHGZ -DnbjjvbdqZOhGpdY -EPDLKvbdCSaDUGWr -DoDLKvbdrpWPJcWG -DnbjjvbdZsiJYdTO -EPDKjvbdJvVGEFGi -EPCkKvbdmIctRVSB -DncKjvbdBiLCKhfK -DoCkKvbdZisIQGbG -DoCjjvbduWNwjQsA -EOcLKvbdiHKCyVjV -EPCjjvbdlZSrTZGt -EObjjvbdNPxRWNgT -DncKjvbdeAURNXif -DncLKvbdOStWGeVQ -DoCjjvbdJvUeceGi -DoDKjvbdXsMBMsnx -EPDKjvbdGLFSbhMu -EPDLKvbdEvZPolie -EOcKjvbdrRtjnLBN -EPDKjvbdyOTHxTJD -EPDKjvbdmajWwnmu -EPCjjvbdrNZjZLhJ -DncKjvbdajlFoODA -DoDKjvbdrEFIpOVa -DnbkKvbdpedEtWBI -DncKjvbdqwQMChyR -DnbjjvbdnCKWwnnV -DoCjjvbdNUsRkNAX -EOcLKvbdULvPBWPJ -DncLKvbdjlalZdfo -EPDKjvbdjJfHjNYS -DoDKjvbdPxmAHTSK -DnbkKvbdmIctQtqa -EObjjvbdnHFXmNfy -EPCkKvbdqlzJyLhJ -DnbjjvbdVqnYCElD -EPDKjvbdqTsgRqkU -EPCjjvbdADSYKZhp -EPDLKvbdEvZPoljF -DoCkKvbdLFfICBRV -EOcLKvbdZRNFJNFR -EPDKjvbdpedFUWBI -EPDKjvbdVwJYVceH -DoCjjvbdGYtuBDwb -DoCjjvbdVYgtZjoO -DncKjvbdQccApQcr -EOcLKvbdWWiYWDdg -DncKjvbdyTOJNSBg -DnbjjvbdbAueFpQX -DnbkKvbdiUydwSUb -DoDKjvbdKVtfDeHJ -DoDKjvbdEObjkXCd -EOcKjvbdqlyjYlHi -EOcKjvbdfRaWzlCo -EObjjvbdRWmcblID -DoDLKvbdCDpAvKMf -DncLKvbdmuVZjjSG -EPDLKvbdkaMnmALA -EPCkKvbdcSbkTdKB -DnbjjvbdZtJIyESn -EPCkKvbdQvmccMHc -DncLKvbdfHjvRmpg -DoCjjvbdVvhwvEEg -EPCjjvbdXrkaNTnx -DnbkKvbdGFirNiUR -EObkKvbdZLrDsnLm -EObkKvbdySnJNRbH -DncKjvbdaMkBsUmH -EPCkKvbdqGEFUWBI -EObjjvbdmajXYOnV -DnbkKvbdHELWKBjK -EPDKjvbdWSOYCFLc -DncLKvbdehKurNqH -EPDLKvbdSZjIScWA -DncKjvbdZQldiNEq -DncLKvbdVwIwvEEg -DnbjjvbdauCGxKsh -DnbkKvbdKefHbApu -DoCkKvbdssSTYyeD -DnbjjvbdSPsgJfEX -DoCkKvbdeKKRvUzn -DoDLKvbdiMEcnVCy -DoDLKvbdoAKzsgcn -DoDKjvbdDoDKjvbd -DncKjvbdFWYopMie -EPDLKvbdRNXaxmtz -EOcLKvbdKefHaaRV -EPDKjvbderAvzkbo -EObjjvbdzoQREcMY -DnbkKvbdijFgjMwr -EObjjvbdhbObdvqR -EPCkKvbdySmiMqbH -EObkKvbdyzeOSIIh -DnbkKvbdjcLkRHUg -DoDLKvbdJpydoGNe -DoDKjvbdwXMBWBWV -EObkKvbdsBfMkgKy -DnbkKvbdYkqdTnMN -EPCjjvbdEPDLLWbd -EObkKvbdDwxLtUUM -DncKjvbdNrtVgFUp -EPDKjvbdZQleJNFR -EPDKjvbdJKEAKPfd -DnbjjvbdhgKCxvJu -EObkKvbdLAkHMbXq -EPDKjvbdhancEvqR -DoCjjvbdNsUWHEuQ -DnbkKvbdZjTHofaf -EPCjjvbdrDdiQOVa -EPDKjvbdkMbLzEgP -EPCkKvbdZoOJFEyj -EPCkKvbdADRxJyhp -EObjjvbdaSGCgsfL -DnbjjvbdJbjDQibx -EPCjjvbdpfEEtWBI -EOcLKvbdZxdJmblS -EPCkKvbdRpTgKGEX -DoCjjvbdzRPNIiwA -EObkKvbdzoPpeClY -EObjjvbdeFOrBwDK -DoCkKvbdOTTvHEtp -DnbjjvbdGQATWgFy -EPCjjvbdEvZQQNJe -EObkKvbdjvWnECYX -DoDLKvbdyTOIlqag -DnbkKvbdEASJNZvw -EOcKjvbdsZkosBHn -DoDLKvbdtSqsYyeD -DncKjvbdqlyixkgi -EPCjjvbdTppnuVHm -DncKjvbdatbHYKsh -DoCkKvbduVmwjQsA -EPCkKvbdvAcxsOeI -EObkKvbdRjyFuHLT -EObjjvbdTukoitAq -EOcLKvbdkySqrxft -EObjjvbdQccBPpdS -DoDKjvbdffLzNfgA -DoDKjvbdiCOcEvqR -DncKjvbdIBkzEzAD -EObjjvbdVZHsyjoO -EOcLKvbdZoNheEzK -DnbkKvbdsZkpTAhO -DnbjjvbdqFdEtVaI -DnbkKvbdIGfzZXwg -EPDLKvbdlrZVZsEJ -EObjjvbdBcpAvJmG -DnbjjvbdtSqsYzFD -EPDLKvbdJJdAJogE -DncKjvbdxVMdpyMO -EPCjjvbdQwOEDLhD -DoCjjvbdmgFXmNgZ -DoDLKvbdjEkGuPAO -EPCjjvbdACrXjZiQ -DoCjjvbdZMRdTmlN -DncLKvbdiLeDnVDZ -EObjjvbdVAaprpqy -DoDLKvbdRjyFuGjs -DnbjjvbdVAbQrprZ -EObkKvbdSZjHrcWA -EPDKjvbdVrOYBeMD -EPDLKvbdDwxMUTsl -EPDKjvbdRadElIxk -DnbjjvbdmozZWKyC -DoDLKvbdptTgRrKt -EPCjjvbdatagXkUI -DncLKvbdZLqcsnMN -DoDLKvbdfNFwGmJk -EObkKvbdqTsfrSKt -DncLKvbdZjTHpGbG -DoCjjvbduWNwipsA -EPDKjvbdauCGwkTh -DncLKvbdKVuGEFGi -EObjjvbdZirhPfaf -DoDKjvbdxKvcgzyf -DnbkKvbdxsNhlrCH -DoCkKvbdBsBDUGWr -DncKjvbdfMfXHNJk -DnbjjvbdOSsugFVQ -DncKjvbdZisIPfaf -DnbjjvbdZHXEAOsJ -DnbjjvbdLZRJrzuG -EObkKvbdwuNFQxlO -DncKjvbddxZtURez -EPCkKvbdxrmiNSCH -DoDKjvbdiUydwSVC -EObjjvbdiifIJlwr -DncLKvbdssSSxyeD -EPDKjvbdOEcsiJLE -EOcKjvbdySnIlrBg -EPCkKvbddZyQYZRC -DnbjjvbdWXJXudEg -DoDLKvbdKaLHNCXq -DoDKjvbdGGKRmiTq -DnbkKvbdlrYtyrdJ -EPDKjvbdhtzEvrVC -EObkKvbddZyQYYqC -DoDLKvbdhaoCdwRR -EPCkKvbdxLWdHzyf -DoDKjvbdySmhmRbH -DnbkKvbdZLqcsmlN -EObjjvbdZtJIxdTO -DoDKjvbdDwwksssl -EPDKjvbdFyVVAdXb -DoCkKvbdUtNUFkvK -EPDLKvbdxmsIXsIc -EPDLKvbdUsmUFkuj -EOcKjvbdGKdsDHlu -EOcKjvbdACqwjZiQ -EPDKjvbdFpASwHGZ -DoCkKvbdGZUtaDxC -DncKjvbdmSZVZsEJ -DoCjjvbdJbicRKCx -DncLKvbdTvMQJsaR -DoCjjvbdNeDtJJKd -EPCjjvbdnPzYvKxb -DoDLKvbdyTNhlrCH -EPDKjvbdRosgJecw -EObkKvbdTAEiICOd -EOcKjvbdapHHDkzd -DoCkKvbdjlakzFGo -DncLKvbdrpWPJbuf -DnbjjvbdNQXqVnHT -EOcLKvbdkNCLzFHP -EObjjvbdTukpKTaR -EOcLKvbdEuxpPlie -EPCkKvbdJuuFdFHJ -EPDKjvbdGGJqmiTq -DnbjjvbdOAIrtJrA -DnbjjvbdelfWgNKL -EObkKvbdhbOcEwRR -DncLKvbdqiAKFNPF -DncKjvbdVqnYCFMD -DoDLKvbdWHxWXgYz -EOcLKvbdNVTSKmAX -EPDKjvbduaDySndh -DnbkKvbdiifIJlxS -EPDKjvbdeATpmYJf -DncLKvbduCcVWuoP -EPCjjvbdhficYvJu -DncKjvbdehLVqnQg -EPCkKvbdrDeJPmua -DoCjjvbdTfzmlWue -DncKjvbdZoNiFEyj -DoDLKvbdxmsHxSiD -EObkKvbdVwJYVdFH -EPCjjvbduMXwBUBX -DnbkKvbdTqROuVIN -EPCjjvbdGKeTCglu -EPDLKvbdcyyPwxpb -EPDLKvbdQmXayOUz -EPDLKvbdZyDinCkr -EPDLKvbdZoNheEyj -DncLKvbdmfdxMnGy -DnbkKvbdkClLRGuH -DncLKvbdJXsbIMQp -DnbjjvbdjJegilxS -DoCkKvbdnPyxukZC -EPDKjvbdZMRcsnLm -DoCkKvbdHffzYxYH -DnbkKvbdbsDLTcjB -DoDLKvbdSwjlNzjx -DncKjvbdkaMnmALA -DncLKvbdqmZjZLhJ -DoDKjvbdqrUkNkBN -DncLKvbdmfeXmOGy -EPCjjvbdZMRdTmlN -DnbkKvbdypnlhjXA -EPDLKvbdyOTHxTJD -EObjjvbdMRwMzVQz -EPCjjvbdSCDeMIxk -EObjjvbdOXnuzdOU -EPDKjvbdOStWHFVQ -DoDLKvbdrzLpTAgn -DnbkKvbdULuoAvPJ -EPDKjvbdZxdKODMS -EOcKjvbdbAvEfPpX -DncKjvbdyOSgwriD -EPDLKvbdrJAJdmPF -EPDLKvbdauCGxKtI -DncLKvbdqrVLOLAm -EPDKjvbdkHgLfFmk -DncKjvbdUaCRSqSZ -DnbkKvbdbQGgELzd -EOcKjvbdcJMijfXY -EPCkKvbdeOeTLUTr -EOcKjvbdQmYByNtz -EPDLKvbdFxuVBDwb -EOcKjvbdGGJrNiUR -DoDKjvbddndsLTtS -EOcLKvbddZyPxYqC -EPCkKvbdSKxfVHLT -EOcKjvbdSCDdkiYk -DnbjjvbdtvNwjQsA -EOcKjvbdJXsbILqQ -EObjjvbdjcLkRHVH -EObjjvbdkCkkQgUg -DoCjjvbdTqQnttgm -EPCkKvbdEuyPoljF -DoCkKvbdTqQnuUgm -DoDLKvbdLrWlzVQz -EPCjjvbdRjyGVGkT -DoDLKvbdHEKvKBjK -DoCjjvbdnCJvxOnV -EObkKvbdptUGrRkU -EPDKjvbdQwNcblID -DoCjjvbdIidAKPgE -DoCjjvbdTYLMNzkY -DnbjjvbdEztRFMCi -EObkKvbdBhkCLJGK -EPDLKvbdZisHpGbG -EPDLKvbddePRbXDK -EObkKvbdUQpntuIN -EObjjvbdEPCjjvcE -DncKjvbdbiNJjewY -EPDLKvbdVrOYCElD -EPCkKvbdSBdElIyL -DoDLKvbdzjVQQETU -DoCjjvbdCDpAvKNG -EObkKvbdNHComPuL -EOcKjvbdGdKvJaij -DnbkKvbdqmZjYkgi -DncKjvbdQvnEClID -DncLKvbdWWiXudFH -DoDLKvbdCEQBWJlf -DncKjvbdMpXqWOGs -EPDKjvbdVBCRSqRy -EPDLKvbdqUTgSRjt -EOcLKvbdJXtCHkqQ -EObkKvbdBiLBkJFj -EOcLKvbdVvhwvEEg -EOcKjvbdCTBCsewS -EOcKjvbdyNsHwriD -DoDKjvbdwzHfFxEr -DnbjjvbdypoMiJwA -DoCjjvbdJbicQjCx -EOcLKvbdVUMsekuj -EOcKjvbdCEQBWJlf -EObjjvbdIjEAKQGd -DoCjjvbdDjIJvXjA -DoDLKvbdFyUuAdYC -DncLKvbdRotGiedX -DoCjjvbdBhkBjhej -EOcKjvbdBhkCKhfK -EPCkKvbdLFfHbBRV -DoCkKvbdNUrrLNAX -EOcKjvbdZoOIeEzK -EPCjjvbdkMbMZeHP -DoCjjvbdkVwNdBxX -EPCkKvbdNddThiKd -DnbjjvbdjcLkQftg -DnbkKvbdFkErcHmV -DnbjjvbdqGEEtWAh -DncKjvbdmSYuZsEJ -DoCjjvbdUsmTfMWK -DoCkKvbdVUMtFkvK -EOcKjvbdKfGICBRV -DnbkKvbdMSWlzUpz -EOcLKvbdVBBprpqy -EPCjjvbdnHEwmNgZ -DoCkKvbdeEoRawDK -DnbkKvbdpssgSSLU -DncKjvbdOSsugFUp -DnbkKvbdwzHfGYFS -DoCjjvbdTAEiHbPE -EObkKvbdKaLGmCXq -DnbkKvbdCWzciFQW -DncLKvbdnVVZjiqf -EPCjjvbdOStWHEtp -DoDKjvbdkIGkfFmk -DoDKjvbdZjTIPfbG -EOcKjvbdXsMAlsnx -DnbjjvbdILazmwRL -EOcKjvbdrDdiPmvB -EPDKjvbdiUzEwRuC -EOcKjvbdqAheAXHd -EPCjjvbdRyigsCvA -DoCjjvbdpyOggQcx -EPCkKvbdZyDjNblS -DncLKvbdFejSNiTq -EPDKjvbdzRPNIjXA -DncLKvbdaMkBsVMg -EObkKvbdLYqJrzuG -DncKjvbdsBfNMHLZ -EPDKjvbdjgflFfOL -DoDKjvbdCTAcUGWr -DnbjjvbdSLZGVGkT -DoCkKvbdZQmEhldq -EPDKjvbdUsmTfMWK -DoCjjvbdKefICBRV -EPCjjvbdZMSDsnMN -EObkKvbdwzIGGXdr -EObjjvbdrRtjnLAm -EPDKjvbdXrlAmTnx -EPCjjvbdZtJJZETO -DnbjjvbdieLGtoAO -DnbkKvbdnCJvxPOV -EPDKjvbdjKFgjNYS -DoCkKvbdlhcspuRa -EPDKjvbdbAvEfQPw -EOcLKvbdiGjDYuiu -DncKjvbdnQZxvLZC -DoDLKvbdaogHDkzd -DnbjjvbdMfcQMouL -DncKjvbdKaKgMbYR -DncKjvbdrbGNMHKy -DoCkKvbddoFSjtUS -EPDLKvbdNddTiIjd -EPDKjvbdhgKDZViu -EPDLKvbdkMbLzEfo -DoDKjvbdjmCMZdfo -DoDKjvbdSCDeLhyL -DoCkKvbdQwODcMID -DnbkKvbdgGLymgHA -EPDKjvbdWIYVwfxz -DnbkKvbdZLqdUNkm -DoCkKvbdYlSETmkm -DnbkKvbdLqvlyuQz -DnbkKvbdZRMdiMdq -EOcLKvbddePSCXCj -EPDLKvbdRacdkiYk -DnbjjvbdZisIQGbG -EObjjvbdrpVnibvG -DncLKvbdIxUCHlRQ -EPCkKvbdhuZeXRtb -DnbjjvbdQwODblID -DoDKjvbdezuyEhsw -DncKjvbdiLddNtcZ -EPCkKvbdiLeENtby -DnbjjvbdxKvcgzzG -EPDLKvbdRXNdClID -DncLKvbdEKHjVwjA -EOcLKvbdzoPqFCkx -DoDLKvbdliEURUqa -DoCjjvbdyOTIYTJD -DncLKvbdIHGyyXwg -EPCjjvbdShyjRABM -DoCkKvbdnPyyWLYb -EObjjvbdsPvPJcVf -EPDKjvbdTXjlNzjx -DoDKjvbddneTLUUS -EOcKjvbdmuUyjiqf -DncKjvbdZoOIddzK -DoCjjvbdpyOhGqEY -DoCkKvbdwjwDgzyf -DnbkKvbdxZgeexEr -EOcLKvbdHDjvKCKK -DoCkKvbdpxnhHQdY -DoDLKvbdLrWlzUpz -EPDKjvbdatbHXkTh -DoDLKvbdZyDinDLr -EPCjjvbdGGJqnJTq -DoDKjvbddneTLTsr -DncLKvbdyzdmqhJI -EObkKvbdRjxfVGkT -EPDKjvbdOAJTTirA -EPCjjvbdZoNiFEzK -DnbjjvbdOhAXyAYa -DnbjjvbdACqwizIp -DoDLKvbdcImJjevx -EPDLKvbdxmrhYTIc -DoDLKvbdjcLkRGuH -EPCkKvbdxVNEpxlO -EPCkKvbdKCibqJbx -DoCkKvbdjJfIKMxS -DoDLKvbdVYhUZjoO -EPDLKvbdrJAKEmPF -EOcLKvbdRDbaQRDr -DoCkKvbduWOXiqTA -DoCjjvbdZyDjNcLr -EObjjvbdbBWEeoow -EPDLKvbdUQpnttgm -EOcKjvbdlBNOmALA -DnbjjvbdSPsfiecw -DnbjjvbdwzIGGYFS -EOcKjvbdLGFgaaRV -EOcKjvbdrXQLcJYq -DnbkKvbdmbKXYPOV -DoCkKvbdZisHogCG -EPCkKvbdFVyPpMjF -EOcKjvbdYkrDsmkm -DoDKjvbdxUmEqYlO -EPDKjvbdKNAEZgUa -DoDLKvbdqZPIGpcx -DoCjjvbdMgComPtk -EObjjvbdUyHszKoO -DoCkKvbdeEnqavcK -EPDKjvbdqYoIGqEY -DoDLKvbdCDoaWJmG -EPDLKvbdlZSrTZHU -EPCkKvbdZxcinDMS -DoCkKvbdgFkzNfgA -EOcKjvbdYNqAXtvU -EObjjvbdwygefYEr -EPCkKvbdbBVdfQQX -DnbkKvbdqrVLOLAm -EOcKjvbdFjeTDINV -DnbjjvbdnHFYMnGy -EPCjjvbdrbFllHKy -EPCjjvbdZLrDtOMN -EPDLKvbdcJNKKfWx -DoCjjvbdraemMHLZ -DoDKjvbdeJjSWUzn -EPCkKvbdZnmiEdyj -DnbjjvbdwtleQxlO -DnbkKvbdDwwlUTtM -DoDKjvbdrWpMDJZR -EOcKjvbdegkVrORH -EPCkKvbdiCOcFWqR -DnbkKvbdBsBDTevr -DoCjjvbdjcLjpfuH -DnbjjvbdZxdKODLr -DoCjjvbdqceIpOVa -DoDLKvbdVvhxVceH -EObkKvbdsrqryZdc -DnbkKvbdMSWlytpz -DoDLKvbdqTsfqrKt -EPCjjvbdjKGIKNYS -EOcLKvbdiGibxvKV -EPCjjvbdKDKCpibx -EPDKjvbdQdDBPqDr -DncKjvbdozmdLYPA -DoCkKvbdTvLojUAq -DnbkKvbdbhmKLFwY -EPDKjvbdCIjbLIej -DncKjvbdkHfkeenL -DoDKjvbdtAGqIABS -EPCjjvbdRosfjFdX -EOcKjvbdraemLgLZ -DnbkKvbdxmrgxTIc -DoCkKvbdOAJStJrA -EPCjjvbdqYngfpdY -EPDLKvbdBvzdJEov -DoDKjvbdrDeIpOWB -EObjjvbdqUTfrSKt -EOcKjvbdxnShXsIc -DoDKjvbdEzsqFLcJ -EObjjvbdDxYMUUUM -EOcKjvbdjKFhKNYS -EOcKjvbdjgflGFmk -DoCkKvbdGGKRnItR -EPCkKvbdREDApRDr -EOcLKvbdNQYRWOHT -EPCjjvbdxmrgwriD -DncLKvbdbsCjsdJa -EOcKjvbdypoNIiwA -DncKjvbdZoOJFEyj -DoCjjvbdrbGMkgKy -EPDKjvbdyTNiNSBg -DoCjjvbdczZPwyQb -DoDKjvbdWfZZtAOs -EPDKjvbdznoqFClY -DncKjvbdTlVoBVoJ -EPCkKvbdIxUBhMRQ -DoCkKvbdZQmEiNEq -DoDKjvbdnVUykKRf -DnbjjvbdUtMtFlWK -EObjjvbdOTUVfeUp -DoCjjvbdZMSEUOMN -DoCjjvbdwjwDgzzG -DoDKjvbdYqNEiNFR -DoDLKvbdqiAKEmOe -EPDLKvbdfNGXHNJk -DnbjjvbdCEQBVjMf -EObkKvbdqUUGrRjt -DnbkKvbdjmCLyeHP -DnbjjvbdcJMikFwY -EPCjjvbdjuwNdBxX -DoCkKvbdeqaWzkbo -DncKjvbdTkvOaVoJ -DoDKjvbdZoOIeEzK -DoDLKvbdKDKDRKDY -DncLKvbdqwQMDJYq -EObkKvbdKeegbBRV -EPDKjvbdegjuqnRH -DoDKjvbdxwhjBpZk -EObjjvbdziuQPdSt -EPCjjvbdZyEKOCkr -EPCjjvbdRWmdCkhD -EOcLKvbdQcbaQRES -DncLKvbdIrxaTNYM -DnbjjvbdGFiqmiTq -DoCjjvbdZeXfzghb -DoCjjvbdSLZFuGkT -EPDKjvbdIryBSmYM -EOcLKvbdRyjHsCvA -EPDKjvbdzoPqFCkx -EPDLKvbdFeirOIsq -EObkKvbdLiBkpxAS -DoCjjvbdmuUyjirG -EOcKjvbdpfDeTuaI -DncLKvbdtSqsYyeD -EOcLKvbdAMhYrwZx -EOcKjvbdJSyAsNYM -DncLKvbddneTLTsr -EPDLKvbdANIYsWyx -EObkKvbdRXODblHc -DoCkKvbdYzcGRjWZ -DoDLKvbdkHgLfFnL -DoCkKvbdpyPIGqDx -EObkKvbdwuNEpxkn -DoDLKvbdJSxaTNYM -DoDLKvbdRNXbZOUz -DnbjjvbdNHDPlpUk -EObjjvbdKQzFPFnF -EOcKjvbdwkWdHzzG -EObkKvbdiCPCdvpq -EPCkKvbdwzHfFwdr -DoDLKvbdwuMeQxkn -DoDLKvbdmoyxujyC -DncLKvbdyYJKBoyk -EOcKjvbdhgJbxujV -EOcKjvbdvAcySndh -EPCjjvbdOYPVzcmt -DncKjvbderBWzlCo -DncLKvbdEuxoolie -DoDLKvbdUsmTelVj -DoCkKvbdcImKKfXY -EPCkKvbdKDJcRJcY -DoDLKvbdfILWSOQg -DoDLKvbdtcDVWuno -DoDKjvbdegjvSNpg -DncKjvbdjvXOEBxX -DncKjvbdvOszpjoU -EOcLKvbdkIGkfFnL -EPDKjvbdZxcinCkr -EOcKjvbdNxPVzcnU -DnbkKvbdNrsvHEtp -DnbjjvbdwygefXeS -EObkKvbdnHEwmOGy -EObkKvbdZRNFIleR -DoCjjvbdNHColotk -EPDKjvbdTkuoBVni -EObkKvbdkHgLfGNk -DoCkKvbdVvhxWEEg -EOcLKvbdtbcVWvOo -DoDKjvbdULvOaWOi -EObkKvbdNdcsiJLE -DoDLKvbdOYPVzdNt -DoCkKvbdNeDsiJLE -EOcLKvbdXGYytAOs -EOcKjvbdcIljLGWx -DoDKjvbdIMBzmwQk -EPDKjvbdbrcKscjB -DoCjjvbdqdEhpOWB -DnbjjvbdzoPqFClY -DnbjjvbdKDKCqJcY -EPDLKvbdZRNEhldq -DncLKvbddZyQXyRC -DncLKvbdRzKHrcWA -EObkKvbdTAFIgbPE -EObjjvbdwtmFRYkn -DoDLKvbdCTAbtFwS -EObjjvbdJzpFwdAN -DoCjjvbdCTAbsevr -EObjjvbdyzdmrIIh -DnbkKvbdANIZTXZx -EPCkKvbdVwJXvDeH -DncKjvbdmfdwlnHZ -DoCjjvbdZirhPfaf -EPCkKvbdiHJcYvJu -DnbjjvbdRMxCYmtz -EPDLKvbdZHWdAPSi -DnbjjvbdWSNxBdkc -DoDKjvbdNxPVzdNt -EObjjvbddePRawDK -DncKjvbdaSGCgtGL -DncKjvbddoFSjstS -DnbjjvbdOFETiJLE -DoDLKvbdeAUQmYJf -EObjjvbdZshiZESn -EPCjjvbdVwIwvEFH -DnbkKvbdKDKDQjDY -EPDLKvbdRbEFMJZL -DoDKjvbdiZuGLpnG -DoCjjvbdqGEEtWAh -DnbjjvbdnBiwYPNu -DnbjjvbdtlXwBTaX -DoCjjvbdqYoHfqEY -EPCkKvbdIsZArmXl -DoDLKvbdmfeYNNgZ -DoCkKvbdrafNLgKy -DnbkKvbdYfwEAOsJ -DoDLKvbdrEFIonWB -EPCjjvbdRXODcMID -EPCjjvbdZisIPfbG -DncKjvbdoAKzshEO -EOcLKvbdNQXqVmfs -DnbkKvbddoEsKssr -EPDKjvbdNeETiJLE -EPCkKvbdVgwvXfxz -EOcKjvbdIsZBTNXl -EObkKvbdFeirOJUR -EPCjjvbdVAbRSpqy -DnbjjvbdeXyssqez -EPDLKvbdZGwEAOri -DoCkKvbdVAaqSqRy -DoDLKvbdiVZeWrVC -EPDKjvbdGYuUaDwb -DncLKvbdLrXMyuQz -EPDKjvbdGZUtaEXb -EOcLKvbdzoQRFDLx -EPCkKvbdTAFJICOd -EPDKjvbdNPxRVmfs -DoCjjvbdauBfxKsh -DncLKvbdMIbLpxAS -DoCkKvbdmgEwmNfy -DoDLKvbdhanbdvqR -DoCkKvbdSLYfUfjs -DoCjjvbdTvMQJsaR -DnbkKvbdlhcspuRa -DnbjjvbdJSyBSlxM -EPCjjvbdSLZFuHLT -DoCkKvbdYTLaNUPY -EObjjvbdFeiqnJUR -EPDKjvbdYlRctNkm -EOcKjvbdHDjvJaij -DnbkKvbdnCJvwnnV -DoCjjvbdNHDPlouL -DncLKvbdWXIxWDdg -DoCkKvbdJSyAsMwl -EObkKvbdxmrhXriD -DnbkKvbdJzpGYEAN -EOcLKvbdddnqawDK -EOcLKvbdhyuFkpnG -DnbkKvbdtAHQhABS -DoCjjvbdjhGlFemk -DncLKvbdjJehJmXr -EPDLKvbdHffyyXwg -DoCkKvbdRbEFLiZL -DoCjjvbddePSBwCj -EPDKjvbdeOeTKtUS -DnbjjvbdrDeIomvB -DnbjjvbdVZIUZjoO -EPDKjvbdxmsIYTIc -EPCjjvbdDnbkLXDE -DnbkKvbdYlSDtNlN -EObkKvbdeFPSBvbj -EPCkKvbdkDMKpgUg -DoCkKvbdbKlGPODA -EObjjvbdGdLVjCKK -EPCkKvbdkCkjqGuH -EOcLKvbdqYngfpcx -EPDLKvbdeKJqvUzn -DoCkKvbdkIHMGGOL -DncKjvbdDoDKkXDE -EPCkKvbdsCGNMHLZ -EOcKjvbdyzeNqhJI -DnbjjvbdqwQLbhxq -EObjjvbdaaWEepPw -EObjjvbdDxXktUTl -DnbjjvbddwzTtRez -DnbjjvbdKQyeOfNe -EPDKjvbdbBVdepPw -DncLKvbdfSAvzkbo -DoDKjvbdqYoIHQcx -DoCkKvbdeEnrBwCj -DncKjvbdehLVqnRH -EPDLKvbdhfjDYuiu -EPCkKvbdvmWANEEm -EPCkKvbdZRNEiNFR -EOcLKvbdCSaCtGXS -DoDKjvbdbhljKevx -DoDKjvbdbBVdepQX -DncLKvbdqTsfrSKt -EPDKjvbdjEjgVPAO -DoCjjvbdFeiqmiTq -EObjjvbdcImJkGXY -EObjjvbdJbjCqJcY -DnbkKvbdjcLjpftg -EPDLKvbdWXJYWEEg -DoDKjvbdznpREbkx -EObjjvbdfILVqmqH -DnbkKvbdxwiKCQZk -EPDLKvbdOEdUJIjd -DnbkKvbdsCFmLgKy -DncKjvbdijFhKMxS -EPCjjvbdzitpQDrt -EPCkKvbdZQleImEq -DoDKjvbdZxdKNcLr -DncKjvbdGdLVjCKK -EOcKjvbdhzUfLpnG -DncLKvbdwzHfGYEr -EObjjvbdEObjjvcE -EOcLKvbdfHkVqmpg -DnbjjvbdXnRAXuVt -EOcLKvbdeFOrBwDK -EPCjjvbdzitoocsU -EPDKjvbdZxdJmblS -EObjjvbdFjeScHlu -DoDKjvbdjhGkfFmk -EOcLKvbduDDVXWPP -EPDLKvbdJYUCHkpp -EPCkKvbdkClKpgVH -EObkKvbdJcKCqJbx -DncKjvbdEXwlUTsl -EObkKvbdxwiJbPzL -DncLKvbdHDjujCKK -DnbkKvbdEuyQQMie -EPCkKvbdUaBpsRSZ -EPCkKvbddoFTKstS -EPCjjvbduaEYsOeI -DoDLKvbdcTDKscjB -DncLKvbdNdcshiKd -DnbjjvbdWSOYCEkc -EOcKjvbdZnmiEdzK -EPDKjvbdUQpnttgm -DoCjjvbdnGdwmOGy -DoCkKvbdZyDjNblS -EOcKjvbdShyjRAAl -DncKjvbdTkvOaWPJ -DoDKjvbdOEcsiJKd -DncKjvbdbVBfxKtI -EPCkKvbdrafNLfjy -DoDKjvbduaEZTOeI -DncLKvbdGGKSNhtR -EPCjjvbdnBjWxOmu -EObkKvbdKefICBRV -DncKjvbdZoNheFZj -DnbkKvbdEOcKkWbd -EPDKjvbdNGcPmQUk -EObkKvbdaMjbStlg -DnbkKvbdJYTbIMRQ -DncLKvbdJXsahLpp -DncKjvbddeOrBvbj -DoDLKvbdJSyAsMwl -EPCkKvbdZdwfzhJC -DoCjjvbduDDVWuno -DnbjjvbdEztQdkbi -EOcLKvbdUyHsykOn -EObjjvbdDjHivYKA -DoDLKvbdnUtzLKSG -DncLKvbdSLZFuGkT -DoDKjvbdlYrrTZGt -EOcLKvbdqUUGqrKt -EPDLKvbdEPCjjvcE -EPDKjvbddxZtTrFz -EObkKvbdlYrqrxgU -DoCjjvbdauCGwjtI -DnbjjvbdQZNAHTRj -DoDKjvbdMoxRVmfs -DncLKvbdOTTvGeUp -DncKjvbdcJNKKewY -DoDKjvbdmuVZjjSG -EPDKjvbdUWLpKUAq -EOcLKvbdSLZGVGjs -EObjjvbdCIjakJGK -EPDLKvbdZnmhddyj -EOcKjvbdLBKgMaxR -EOcLKvbdDjHjVwjA -DnbkKvbdYlRcsnLm -DoCjjvbdrRuKnKaN -EPCkKvbdptUHSSLU -DncLKvbdYpmEiNFR -EObkKvbdMIalQxAS -DnbjjvbdJuteceHJ -DncLKvbdFWYpPlie -EPCkKvbdmgFYMmgZ -DoCjjvbdmbJvxOnV -DncKjvbdIGfzZYXg -EPDLKvbdqTtGqrLU -EPCjjvbdWRmwbElD -EPDLKvbdGLErcIMu -EPDLKvbdwygefYEr -EPDKjvbdrSUkOLBN -DoCkKvbdNQYQumfs -DoCkKvbdRjyGVGjs -EPDKjvbdmajXXoOV -DncKjvbdIGgZxwwg -DnbkKvbdxwiJapZk -DoDKjvbdYqMdhleR -EOcLKvbdZtJIxdSn -EPDLKvbdTIzKRABM -EPDKjvbdCEPaWJlf -EOcLKvbdjgflFfOL -EPCjjvbdZjShQGbG -DoDLKvbdHDjvJbKK -EOcLKvbdBiKbLIfK -DncLKvbdiHJbxujV -EObkKvbdKeehBaQu -EPDLKvbdYSlBMsnx -EObkKvbdmJDsptrB -DoDKjvbdTkuoAvPJ -EPDKjvbdZyEJnDLr -EPCkKvbdZoNhddyj -EPDKjvbdVZHsykOn -DnbkKvbdjJegjNYS -DoDLKvbdtcCtwVno -EOcKjvbdkIHLefOL -EOcKjvbdYkqdTnLm -DnbkKvbdiZuGMQmf -DoCjjvbdZLrDsnLm -DoCjjvbdDwwktTsl -EObjjvbdRzKHrbvA -DoDKjvbdQlwaxnUz -EObkKvbdyTOImRag -EPCjjvbdQmYByOUz -EObjjvbdbrbkUDjB -DoDLKvbdGYtuAcwb -DncLKvbdePFSjssr -DoDKjvbdRbDdlIxk -DoDKjvbdwzIGGXeS -EPCjjvbdOTUVgEuQ -EPCkKvbdemGWfmJk -EOcLKvbdZQmEhmEq -DoCjjvbdZRMeJNFR -DoCjjvbdvBEZSoEh -DncLKvbdhlFDnVDZ -DoCjjvbdJJdAKPfd -EObjjvbdyYJKCQZk -EObjjvbdRzKITCvA -EPCjjvbdUMVnaWPJ -DoCjjvbdNddThhjd -EOcKjvbdNPwpvOHT -DnbjjvbdZisHpHCG -EObkKvbdGLFScINV -EOcLKvbdbsDLTdJa -EObjjvbdbhlijfWx -DoDLKvbdVZHszLPO -EObjjvbdZnnJFEyj -DoDKjvbdeOeSkTtS -DoDLKvbdkCkjpgUg -EPCjjvbdFejRnJUR -DoCjjvbdZsiIyDrn -DoDLKvbdtunYJqTA -DnbkKvbdoznELXoA -DoCjjvbdZtIiYcsO -EOcLKvbdGGKSOJUR -DoCjjvbdUMWPAuni -DnbkKvbdEPDKkWbd -EPCkKvbdUxhTzLPO -DoDKjvbdGdKvKBij -DncKjvbdmSZUzSci -EPCjjvbdZjShQGaf -DncLKvbdWRmxCElD -EPDLKvbdqvpMDIyR -DncKjvbdCJKakIfK -EPDKjvbdHELWJbKK -DoDKjvbdjlbLzFGo -EPCjjvbdTkvPBWOi -DoCkKvbdJvVGEFGi -EOcLKvbdUyHszLPO -EObjjvbdVBBpsQqy -DnbkKvbdZdxGzhIb -DnbjjvbdsPvOicVf -DoDKjvbdtcCtwWPP -EOcLKvbdwtmFRYkn -EPDKjvbdegjvSNqH -DoDKjvbdIxUBglQp -EOcLKvbdBcpAvKNG -DnbjjvbdwXMAvAvV -DnbkKvbddoEsLUUS -DncKjvbdCIkCKiGK -DoDKjvbdlZTSTYft -EPCjjvbddoEsKtTr -EObjjvbdFfJrOJTq -EPDLKvbdliDsqVSB -DncLKvbdbUagXjtI -EObkKvbdIsYaSlxM -EPCjjvbdHkaznXRL -DnbkKvbdxUmFQyMO -DoCjjvbdWWiXvDdg -EPCjjvbdSQUHKFcw -EPDLKvbdjKGIJlwr -EOcKjvbdXFxytAOs -DncKjvbdmbKWwoNu -EObjjvbdiZuFkpmf -DoCjjvbdFyVVBDwb -DnbjjvbdeqaWzlDP -EPCjjvbdRyjHsDWA -DnbkKvbdqlzJyMHi -DnbkKvbdZRNFImFR -DoCkKvbdYfwEAPSi -DoCjjvbdOAIrsjSA -EPCkKvbdaNLCTVMg -DnbjjvbdqceIomvB -DnbjjvbdsCFlkgLZ -DoDLKvbdmIdURUqa -EOcKjvbdZshhxcrn -DoDKjvbdZjTIPgCG -DncKjvbdemGWfmJk -DnbjjvbdACqxKZiQ -EObkKvbdkVvnEBxX -DncLKvbdUtNTfMWK -EPDLKvbduaDxsPFI -EObkKvbdgQBzvcxI -EObkKvbdSZihTDWA -EOcLKvbdqYnggREY -EPDKjvbdqiAJdmPF -EOcLKvbdiGjDZVjV -EOcLKvbdGZVVAdXb -DoDKjvbdhfjCxuiu -DnbkKvbduMYXBTaX -DoCkKvbdjSziTKiz -DoDKjvbdqlzKZMIJ -DnbjjvbdkVwOEBxX -DoCjjvbddtAUASmW -DoDLKvbdzjVQQESt -EOcLKvbdkySrSyHU -DncLKvbdNGbolotk -DnbjjvbddeOrBwCj -DoDLKvbdiLdcmuDZ -DoDKjvbdSPsfjFdX -DoCkKvbdbUafxKtI -DnbkKvbdcJNJkFvx -EObjjvbdFejSNiUR -EPDKjvbdQmYCYmtz -DncKjvbdfVzwpJzs -EPDKjvbdWRmwbEkc -DncLKvbdFkEsDIMu -DoCjjvbdQccBPqES -EObkKvbdKCibpjCx -EOcKjvbdLBLHNBwq -DoCkKvbdUMWOaVoJ -DoCjjvbdrbFmMGjy -EOcLKvbdJvVFdEgJ -EPCkKvbdjhHMGFnL -DncKjvbdNxOuzcmt -EPDKjvbdEXxLstUM -DoDKjvbdwygfGXeS -EObkKvbdyTNiMrBg -DncKjvbdlZSrSxgU -EPDKjvbdJXtCHlQp -EPCkKvbddndsLTsr -EObjjvbdNdcshhkE -DncLKvbdSCDeLhyL -DncLKvbdNsTvHEuQ -EOcKjvbdACqxKZiQ -DoCjjvbdptTgRqjt -EPDKjvbdOEdTiJLE -DoDKjvbdrpVoKCvG -DnbjjvbdFjeSbhNV -EPCjjvbdNGbolouL -EPDLKvbdrEFIonVa -DnbkKvbdOFDsiIjd -DoCkKvbdTqQoUuIN -EPDKjvbdeOdsKtTr -DncKjvbdyNrhXsIc -EPDKjvbdnQZxujyC -EPCkKvbdYqMdhmFR -DncLKvbddeOrBvbj -DoCjjvbdLGFgbApu -DoCjjvbdemFwHMik -DoCkKvbdRXOEClHc -DoCkKvbdZQmEiNFR -EPCjjvbdEASIlzXX -DnbkKvbdrWokbiZR -EObkKvbdHELWKBij -DnbkKvbdbUagXkUI -EOcKjvbdbsDLUDia -EOcLKvbdUWLojUAq -DnbjjvbdQvmccMID -DoDKjvbdZxcjODMS -EPDKjvbdTulPjUBR -DncLKvbdjSzhsKiz -EOcKjvbdTAFJICOd -DnbkKvbdKNADzHVB -DoCjjvbdliDtRVSB -EObjjvbdWXIxVceH -EPCjjvbdfHkWRnQg -EObkKvbdjAQGaPgK -EObkKvbdkClLRGuH -DncLKvbdZnnIdeZj -EObjjvbdlYsRsYgU -DoDLKvbdpyPHgQcx -DnbjjvbdnPyyWKyC -EObjjvbdQwNcblID -DnbjjvbdCJKajhfK -EPDKjvbdiHKCyWKV -EObjjvbdeEoRavbj -EOcKjvbdmaivwnnV -EOcKjvbdwNWANDeN -EPDKjvbdTAFIhCPE -DoCjjvbdZQleJMeR -EPDKjvbdmtuZjiqf -DnbkKvbdEPCkLXCd -EObkKvbdqGEEsvBI -EOcKjvbdmIdTqVSB -EObjjvbdJTZBSlwl -EPCjjvbdqlzKZMIJ -EPDKjvbduCbtwWOo -EPDLKvbdnPzYukYb -EPDKjvbdeFPSBvbj -EPDLKvbdHEKvKCJj -EPDKjvbdVUNUGLuj -EOcLKvbdJuuGEEgJ -EOcKjvbdzQnmJKXA -EOcLKvbdrbGMkfjy -DnbjjvbdUsltFkuj -DnbkKvbdDxYMUUUM -DnbjjvbdUQpoUuHm -EPDKjvbdRbDdlJZL -DncLKvbdmgFXlmfy -EPCjjvbdJbibqJcY -DoCjjvbdEPDLLWcE -DoDLKvbdMJCMRYAS -DoCkKvbdQZNAGsSK -EObjjvbdiCPDFXQq -EOcLKvbdVwJXvEEg -DoDLKvbdsrqsYzFD -DncLKvbdjuvnDbXw -EPDKjvbdhgKCyWKV -DoDLKvbdNdctIiKd -EObkKvbduaEYrneI -DoCkKvbdNVSrKmAX -DncKjvbdXnRAXtvU -DoDKjvbdhkddNtcZ -DoCkKvbdiBnbdwQq -DnbkKvbdLBLGlawq -DoDKjvbdygZMANEw -DnbkKvbdZsiIxcsO -EObjjvbdiBoDEwRR -DoCjjvbdHbLzEzAD -EPCkKvbdjbkkQgVH -EOcLKvbdsBemLgLZ -EOcLKvbdptUGrRkU -EPCjjvbdznpQdbkx -DoDKjvbdGYtuAdXb -EOcKjvbdzjUpQETU -EOcLKvbdypoNIjXA -DnbkKvbdSQUHJfDw -EPCkKvbdbsCjtEKB -DoDLKvbdajlFoODA -DoDKjvbdelevfmKL -DnbkKvbdCTAbsfWr -DoDKjvbdjhGlGGNk -DoCkKvbddCTMrATm -EPDLKvbdaMjbSuMg -DoCkKvbdKaLHNCYR -DncLKvbdGGKSNiTq -DoCjjvbdLZRJrztf -EPDLKvbdjlakyeGo -EObkKvbdwuMdpyLn -DnbkKvbdegjuqnQg -EPDKjvbdtTSTYydc -EObkKvbdZyDjOClS -DnbkKvbdqGEEtWAh -EOcLKvbdKQydoFnF -EPDLKvbdqUTgSSKt -DnbjjvbdMJCMQxAS -EPCkKvbdiMFDnUby -EOcKjvbdfpBzwEXh -DoCkKvbdSBceMIxk -EObjjvbdfMevgMik -EPCjjvbdjAQHAofj -EPCjjvbdZLrETnMN -EObkKvbdDoDLLXCd -DncLKvbdSZjHsDWA -DnbjjvbdOStVgFVQ -EObkKvbdbhlijfXY -DnbkKvbdjEjftoAO -DoCjjvbdeEnrCXDK -EOcLKvbdZyEKNcMS -EPDKjvbdWSNwadkc -EPCjjvbdkDLjqHUg -DoCkKvbdSCEFLiYk -DncKjvbdtkwwBTaX -EPDKjvbdCTAbsevr -DncLKvbdmfdwlnGy -DncLKvbdTukpJtBR -DoCjjvbdlYrrTZGt -EOcKjvbdnCKWwoOV -DncKjvbdMgColpVL -EPDLKvbddwytURez -DoCkKvbdakLenmcA -EPCkKvbdQvmdCkhD -DncLKvbdEARhlzWw -EOcLKvbdrXQMDJYq -EObkKvbdmJETptrB -EOcKjvbdAMgxsXZx -EPDKjvbdULvPBVni -DoDKjvbdqGEFTvAh -DoDKjvbdGLFTChMu -DoCjjvbdLBKgNCXq -DoCjjvbdOEcsiJLE -EObjjvbdSLZFuHKs -DoCjjvbdtkxXAsaX -DnbjjvbdNGbpNQVL -EOcLKvbdiLeEOUby -EObjjvbdDoCjjwDE -EPCkKvbdxrnJMrCH -EPDKjvbdJTZBTMwl -DncKjvbdBcpBWJlf -DncLKvbdGKdsDHmV -DncLKvbdDwwlUUTl -EPDLKvbdbQHHELzd -EPDLKvbdYlSEUOLm -EObjjvbdhtyeXSUb -EPCjjvbdACqxKZiQ -EObjjvbdrDdiPmua -EPCkKvbdcyxpYYqC -EPDKjvbdrXQLbiZR -DncKjvbdjmBlZeHP -DncKjvbdlYrrTYft -EObkKvbdaaWFFpPw -DncKjvbdwyhGFwdr -EPCkKvbduLxXAtBX -EObjjvbdhancEvpq -DncLKvbdbiMjKevx -DncKjvbdTIyjRABM -DoCkKvbdcImKLFvx -DnbkKvbdZjSgpHBf -EPCkKvbdGdKvJbJj -EOcLKvbdSCDeMIyL -EOcKjvbdZxdJnClS -EOcLKvbdHDkVibJj -DoDKjvbdezuxeJTw -EOcKjvbdqFceUVaI -EPDKjvbdWIYWXfxz -DoDKjvbdNQXqWOHT -DnbkKvbdOStWHEtp -EPDKjvbdLAkGmBxR -EPDKjvbdDxXksssl -EPCkKvbdTqRPVUgm -DoDLKvbdrDdhomvB -DncLKvbdptUGrSKt -EOcKjvbdiBnbeWqR -DoDKjvbdezvYeJUX -DnbkKvbdOAJStJrA -DnbjjvbdtcCuWvPP -DnbjjvbdIjEAKPgE -EObkKvbdWWiXvEEg -DnbkKvbdSBdFMJYk -EOcKjvbdQdCaQQcr -EPDLKvbdLZRKSzuG -DoCkKvbdpfEFTuaI -DnbkKvbdVBBqSqRy -DncLKvbdMoxRVnGs -EOcLKvbduoTzqKnt -DoCjjvbdxxJKCPyk -DncLKvbdVvhwvEFH -EPDLKvbdOYPVzcnU -EOcLKvbdBdPaWJlf -DnbkKvbdJSyAsMwl -DoCkKvbdYTLaMsnx -EOcKjvbdUWLpJsaR -DoCjjvbdhbOcEwRR -DncKjvbdKfGHbAqV -DoCjjvbdlZTSSyGt -DncLKvbdatbGxLTh -EPDLKvbdiGicYvKV -EOcLKvbdTIyjRAAl -EPDKjvbdZsiIyDsO -DnbjjvbdZLqcsmlN -EOcLKvbdeOeTLTtS -DncKjvbdQdCaPqDr -EPCjjvbdUGznLvvF -EObkKvbdrDdhpNvB -EPDLKvbdRadFLhxk -DnbjjvbdhytelQmf -EPDKjvbdFkFSbhNV -DoDKjvbdaSGDHsek -EObkKvbdzHYlAMdw -DnbjjvbdliDsptrB -EPCkKvbdYlSDtNlN -DoDKjvbdnPyxujxb -EObjjvbdRkYfVGjs -EPCjjvbdRaceMJZL -EOcLKvbdnUuZkJrG -DncKjvbdOYOuzdNt -DoCkKvbdJbjDQicY -DnbjjvbdRyjHsCvA -EOcLKvbdUGzmlXVe -EPCjjvbdMoxRWOGs -DncKjvbdlrZUzTEJ -DoCjjvbdJYUBgkpp -EOcLKvbdACrXizJQ -EPDKjvbdsCGMkfkZ -DncKjvbdqYnhGqEY -DncLKvbdjgflFemk -DncKjvbdrzMQTAgn -DoCjjvbdlZTSSxgU -EPDLKvbdKCibqKCx -EOcLKvbdmJDtQuSB -DncLKvbdQcbaPqES -DoCjjvbdOXoVzdNt -EObkKvbdbsCjsdKB -EPDKjvbdySmiMqbH -DoCjjvbdrMzKZLhJ -DncKjvbdtAGqIAAr -EPCjjvbdEXxMTtUM -EOcKjvbdVrOYBdkc -DoDKjvbdzROlhiwA -DncKjvbdqTtHRrLU -DnbkKvbdiUzEwSUb -DoCkKvbdZLqcsnMN -DnbjjvbdUaBqTRRy -DoDKjvbdRosgKGEX -EObkKvbdShzKRABM -DoDLKvbdqZOhHRDx -EPDLKvbdiUzFWqtb -DoCkKvbdZyEJmbkr -DncKjvbdREDBPpdS -EPCjjvbdMSWmZtpz -EPDLKvbdTAEiHaoE -DoDKjvbdNeETiIjd -EOcLKvbdqdFJPmua -DoCkKvbdRpTfjFcw -DncLKvbdznoqEcMY -DoCkKvbdFfJqmiUR -EOcLKvbdSPsfifEX -DnbjjvbdtunYJpsA -EPDKjvbdqcdiQOVa -DnbkKvbdeXyssrFz -EPDLKvbdQYmAGrqj -EObjjvbdegjuqmpg -EOcLKvbdbLLenmcA -EOcLKvbdpyPHgREY -DoDKjvbdZRMdhmEq -DncLKvbddZxoxZRC -EOcKjvbdKxpjSztf -EPDKjvbdKkBHvAJy -EObkKvbdnBiwYOnV -EObkKvbdrWolDJYq -DoCkKvbdZyEJmbkr -DoDKjvbdkDMLRHUg -EPCjjvbdQwNccMID -DncKjvbdSZihSbvA -DncLKvbdnHFXmNgZ -DncKjvbdGKeSbhMu -DncLKvbdULvPAuoJ -EOcLKvbdYqNFJMeR -DoDLKvbdMfcPmQVL -EPDKjvbdFpATWgGZ -EObjjvbdeqaWzkbo -EOcKjvbdZoNhddzK -EObjjvbdFeiqmiTq -DoDKjvbdauBfwjsh -EOcLKvbdBraDUFvr -DoDLKvbdyYIjCPzL -DnbjjvbdmRxuZsEJ -EObjjvbdMfcQMpUk -EOcKjvbdyNsIXrhc -EPDKjvbdREDBPpcr -EPCjjvbdRkYeuGkT -EPCkKvbdtAHRIAAr -DnbkKvbdxUmFQxkn -EObkKvbdtTSTZZdc -EOcKjvbdmIdUQtqa -EOcKjvbdXrkaNUPY -DoDKjvbdCWzdIePv -DoDKjvbdbBVdfQPw -EPCjjvbdZyEJmblS -DncKjvbdlZTRrxft -EPDLKvbdIxUCIMQp -DnbjjvbdKyRKSztf -EOcKjvbdNeEUIhjd -EOcLKvbdjKGIJmXr -DoDLKvbdCEPaVimG -EPCkKvbdOFDsiIkE -EOcLKvbdehKvSORH -DoDKjvbdwWkaWAuu -EPDKjvbdpxoHfpcx -EPDKjvbdJbjCqJbx -DncKjvbdZtJJZETO -EPDLKvbdsZkpTBHn -EPCkKvbdTlWPAuoJ -DoCjjvbdjggMFfOL -DoDKjvbdfMewGlik -EPDLKvbdnBivwoOV -DoCjjvbdwuNEpxkn -DnbkKvbdiifIKNYS -EOcKjvbdKVuFdFGi -EPCjjvbdZdxGzgiC -EOcLKvbduaDxsPEh -EPCkKvbdRotHJfEX -DncLKvbdCIjajhej -DoCkKvbdcImJjfWx -EOcLKvbdKVtecdgJ -DoCjjvbdeFOrBwCj -EPDKjvbdqvpLcIxq -EObjjvbdEARiMyvw -DncKjvbdbUafxLTh -DncLKvbdLAkGmCYR -DoDKjvbdxVMdqYkn -EPDKjvbdWWiYWDdg -EObkKvbdKDJbpjCx -DoCkKvbdnPyxvKyC -DoCkKvbdZsiJYcsO -EObkKvbdJpzFOeme -EOcLKvbdOSsufeUp -DoDLKvbdTfznMWvF -EPDLKvbdfNFwGlik -EPDLKvbdCDpAuilf -EPDKjvbdbiMikGWx -DoCkKvbdrbGMkfjy -DoCjjvbdWIXuxHYz -EPDKjvbdGFiqnIsq -EPDLKvbdNGbpMpVL -EOcLKvbdtSrTYyeD -DoDKjvbdjJfHjNXr -EPCkKvbdzitpPcrt -DoDLKvbdxmrgxSiD -EPDLKvbdcJNKLFvx -EPDLKvbdsrrSxydc -DnbkKvbdqceIonWB -EPCkKvbdZnnIddzK -DoCjjvbdLYpirztf -EPCjjvbdLrWlzUpz -DnbjjvbdRkZGVGjs -EObjjvbdnBivxOmu -DoCjjvbdmIdUQuSB -EObkKvbdtcCtvuoP -DnbjjvbdANIYrvzY -DncKjvbdmaivwoNu -EOcLKvbdrouoJcWG -DoDLKvbdTppoVVIN -DoDLKvbdVUMtFkuj -DncLKvbdznpQdblY -DncKjvbdEPCkLXDE -EOcLKvbdfHkVqmqH -EPDKjvbdapGgDkzd -EPCjjvbdSPsfifDw -DoDLKvbdGKeTDINV -EObjjvbdyqPNIjXA -EPCjjvbdatbGwkUI -DoCjjvbdCTAcTewS -DnbjjvbdxnTIXsJD -EOcKjvbdbKlFnnDA -DncKjvbdjJegjNXr -EObjjvbdMuTRkNAX -EObkKvbdUxgsykOn -DoCkKvbdRaceMIxk -EPDLKvbdJbibpibx -DoDKjvbdEztQdlCi -EPDKjvbdcyyPwyRC -DncKjvbdjlbMZdfo -EPCkKvbdRXNdClID -DncLKvbdtbbuXVoP -DoDKjvbdieLHVPAO -DoDKjvbdFVxopMie -EObjjvbdzoPpdblY -EPCjjvbdmIdUQuSB -EPCkKvbdYkrEUNkm -DoCkKvbdVwIxVdEg -DoCjjvbdOSsvGdtp -EPCjjvbdmSYtysDi -EObkKvbdWWiYVceH -DoDKjvbdrNZixkgi -EPDKjvbdbVCHYKsh -DnbkKvbdjKFgimXr -EPDKjvbdNsUWHFUp -EObkKvbdeAUQlwjG -EOcKjvbdTAEiICPE -DoCkKvbdZLqdUNkm -EOcKjvbdZisHogCG -EPCkKvbdKVtfEEgJ -EObjjvbdaSGDIUGL -EPDKjvbdZRNFIleR -DoDKjvbdyXiJaoyk -EObkKvbdRkYfVHKs -DnbkKvbdLAkHNCXq -DncKjvbdJpyePFnF -EPCkKvbdkHgMFenL -DoDLKvbdOFDtIhkE -DoCkKvbdtTSTZZdc -EOcLKvbdkClKpfuH -DoCjjvbdBcpBVjNG -DnbkKvbdfMfXHNJk -DoDKjvbdBsBCtFvr -DoCjjvbdHgGzYwwg -DncLKvbdSwjkmzkY -DoCkKvbdDihJuwjA -EPDKjvbdQccBPpdS -EPDKjvbdehLVqnQg -DoCjjvbdmozZVkZC -DoDLKvbdaNKasVNH -EObkKvbdrRtkOLBN -DoDKjvbdehLWRnRH -EObkKvbdSCEEkiYk -DoCjjvbdRXOEDMID -EOcKjvbdFejRmiUR -EOcLKvbdFkEsChNV -DncKjvbdWWhwuceH -EPCkKvbdNwoVzdOU -EOcKjvbdePFSkUTr -DoDKjvbdMRwMzUpz -EObjjvbdLrXMzUpz -EPDKjvbdZxdJnDLr -EOcLKvbdrRtkNjaN -EPCkKvbdTvLoitBR -DncKjvbdKeehCApu -EPDLKvbdemFvfljL -DncLKvbdeFOqawCj -DoDKjvbdZyEJnCkr -DoCjjvbdlZTRsZHU -DnbkKvbdRbDdlJZL -DnbjjvbdYqMdiNFR -EObjjvbdSQTfjFdX -DoCjjvbdgFlZnGgA -DoDLKvbdwtldqYkn -EObkKvbdjggLfFmk -DncLKvbdMgCpNPtk -DncKjvbdmpZyWKxb -EPDKjvbdVqnYBeMD -DoDKjvbdULuoBWOi -DncLKvbdezvZEiTw -EPCkKvbdjblLRHUg -EPCjjvbdBiKakJGK -DncKjvbdTukpJtAq -DoCkKvbdkWWnEBxX -EPCjjvbdnPzYvLZC -EOcLKvbdWHxVxGxz -DncLKvbdNsUWHEtp -EObkKvbdHDkWKBij -EObkKvbdVAbQsQrZ -DnbkKvbdKCibqKDY -EObjjvbdLYqKSztf -DoCkKvbdZLrDtOMN -EOcKjvbdemFvgNJk -DncLKvbdiCOcEvpq -DnbkKvbdEXxLtTtM -EObkKvbdFjdrbglu -EObkKvbdmttykJrG -DoCjjvbdePFTLUTr -DoCkKvbdWRmwadlD -DoDLKvbdVqmxCElD -EPCkKvbdnBiwXoOV -DnbjjvbdEvZQPmKF -EObkKvbdSKyGVGkT -EPCjjvbdauBgXkTh -EPCjjvbdVrNxBeLc -EObjjvbdOEcshiLE -DoDLKvbdbLMGPNcA -DnbkKvbddZxpYYqC -DoCkKvbdlZTSTZHU -EObkKvbdtlXwBTaX -EObkKvbdHffyxwxH -EPDKjvbdrpWOicVf -DncKjvbdkVvmdBww -EPDKjvbduaDySoFI -EObkKvbdsZkosBHn -DoDLKvbdTAFJICOd -DnbjjvbdpstHRrLU -DncKjvbdUQqOtuIN -EPDKjvbdVUMtFlWK -DoDLKvbdrouoKDVf -DoCjjvbdmRyUysDi -EPDKjvbdgFkzNgHA -DnbjjvbdZshiZDsO -DnbjjvbdIMBzmwRL -EObjjvbdZshhxdTO -EOcLKvbdZGwEAOri -EPCkKvbdkHflFfOL -DoCkKvbdKDJcQibx -EOcLKvbdFkEsCgmV -EPCjjvbdJutfEEgJ -DoCkKvbdOXnuzdNt -EPDLKvbduLwwAtAw -DoDKjvbdqvpLbiZR -EPCjjvbdGYuVBEXb -EOcLKvbdCJKajhfK -DnbjjvbdkMbLyeGo -EPCkKvbdijGIKMwr -DoDLKvbdJzpGXdAN -DoDKjvbdNwnuzdOU -EOcLKvbdtSqsYyeD -EOcLKvbdmRxuZrdJ -EPDKjvbdhlEcmtcZ -DoCkKvbdbiNJjevx -DoDKjvbdGckVibJj -DoDLKvbdGLFSbhMu -EPDKjvbdEObjkWbd -EObkKvbdBhkBjiGK -EPDKjvbdtAGqIAAr -DoCkKvbdWRmwadkc -EObjjvbdQdDAoqDr -EOcLKvbdwNWANDeN -EPCjjvbdMowqVmgT -EPDLKvbdegkWSNpg -EPDLKvbdjAQHAogK -DoDLKvbdvwLaVaWV -EPCjjvbdLGFgbBQu -DoCjjvbdxsOJMrCH -EObkKvbdFkFTChMu -EObjjvbdbLLenmcA -EPDLKvbdiCObeXRR -EPCjjvbdhbObdvpq -EObkKvbdVZIUZkOn -EPDLKvbdfVzxPizs -EPDKjvbdnPyyVjyC -DncLKvbdRzKITCvA -EOcLKvbdUtMsfLuj -DncKjvbdVBBpsRRy -DnbkKvbdzeZnzdzQ -EOcLKvbdUtNTfMVj -EObjjvbdqcdiQOWB -DoCkKvbdNddTiIjd -DncLKvbdrykosBHn -EPDKjvbdWRnYBeLc -DncLKvbdrXQLcIxq -EPCkKvbdUWLpKTaR -DoCkKvbdZRNFJMeR -EPDLKvbdunszpjoU -DoDKjvbdzitpPdSt -EObkKvbdvBDxrneI -DoDLKvbdVviXvDeH -EPCkKvbdDihJuxKA -EPCkKvbdNPxQunGs -DoCjjvbdmuUzKjRf -DnbkKvbdbPffdLzd -DoDLKvbdXrlBNTnx -DoDKjvbdZQmEhmFR -EObjjvbdmttzLKRf -DoCkKvbddijRvUzn -EPDLKvbdHffyyYXg -EPCkKvbdcTDKtEJa -EPCkKvbdpecdtWAh -DncKjvbdRjxeuGkT -EPCjjvbdqdEhpOVa -EPCjjvbdelfXGmJk -EObkKvbdWWhwudFH -EPDKjvbdhbObeXQq -DoCkKvbdffLynHHA -DnbjjvbdpaJFAXIE -DoDKjvbdqZPIGpcx -DoDLKvbdmaivxPOV -DncKjvbdqFdEsvAh -EPCjjvbdrpWOibvG -EPCkKvbdyfyMAMdw -DoDLKvbdhuZdvqtb -DncLKvbdWRnYBeMD -DncLKvbdDncLKvbd -EObkKvbdhzUfLpnG -EOcLKvbddoFSkTtS -EPDKjvbdbKlFoODA -DoCkKvbdRWmccLhD -EObjjvbdeAUQlxJf -DncLKvbdKVuGEEfi -EObkKvbdVvhwvEEg -EPDLKvbdhaoDEvqR -EPDKjvbdpfEFTvBI -EPCkKvbdyzeNrIJI -DoDLKvbdGckViaij -EObjjvbdnHExNNfy -EObkKvbdZLqdUOLm -DoDLKvbdDxXktTsl -EObkKvbdFVxpPmKF -DoDKjvbdNdctJJLE -DnbkKvbdTXkMNzjx -DncKjvbdbrbkUEKB -DoCkKvbdGKeSbhNV -EPDKjvbdYSkaMtOx -EPCjjvbdiGicYujV -EObjjvbdnHFXmOGy -DoDKjvbdZyDjNblS -EOcLKvbdGYtuBEXb -DnbjjvbdqGDeUWAh -DnbkKvbdTppnuVHm -EOcLKvbdPyNAGsRj -EPCkKvbdIrxaSlxM -DncKjvbdCfkfHAzc -DnbkKvbdIHHZxxXg -EPCjjvbdjKFhKMxS -EOcKjvbdehKvRnRH -EObjjvbdxVMdpyMO -DnbjjvbdSLYetgKs -EObkKvbdRjyGUfkT -DoCjjvbdwyhFeweS -DncLKvbdrJAKElne -EPCjjvbdiGjCxvKV -EPCjjvbdCIjajiFj -DoDLKvbdunszqLPU -DnbjjvbdySmhlrCH -DnbkKvbdnBjWxPNu -DoDKjvbdlhdTqUrB -DoCjjvbdGdKvJajK -EObjjvbdkySqryHU -EPCjjvbdYkqdTmkm -EObkKvbdDnbjkXDE -EPDKjvbdKDKCqKDY -EOcLKvbdeYZstSFz -EPDKjvbdZyDjNbkr -DncLKvbdPyNAGrrK -DoCkKvbdTlVoAuni -DncKjvbdEPCkKvbd -EPCkKvbdcTCkTcjB -DnbkKvbdcJNKLGXY -DnbjjvbdRkYfVHKs -DoDLKvbdaaWEfQQX -EPDKjvbdmbJvwnmu -EOcLKvbdZyDimcMS -DoDLKvbdYkrEUNkm -DoDKjvbdmaivwnmu -DoDLKvbdqYoIHQcx -EPDKjvbdLrWlyuQz -DncLKvbdkCkkQgVH -EObjjvbdrXPlChyR -DoCjjvbdJTYaTMwl -EPCkKvbdNsTvHFVQ -DnbjjvbdeEnqavcK -EPCjjvbdVvhwuceH -EPCkKvbdbLMFoODA -EPDLKvbdCIkCLIfK -DoDLKvbdbLLennDA -DncLKvbdyNrhYTIc -EPDLKvbdNHCpNQUk -DnbkKvbddndsLUTr -DncKjvbdaogHDkzd -EPDLKvbdZjSgpGbG -DnbjjvbdaSGDIUGL -EPCkKvbdjhGlFfNk -EPDLKvbdbKkenmcA -EOcKjvbdIHHZyXxH -DoCjjvbdiUydwRtb -EPDLKvbdauBgYKtI -EPDLKvbdZMSDsmlN -DoDKjvbddneSjtTr -EPCjjvbdJbibqJbx -DnbjjvbdGYtuAcwb -DoDLKvbdsQVoJbvG -DoCkKvbdxmrhXsIc -DoCjjvbdyNsHwsJD -DoCkKvbdKWVFceGi -DoDLKvbdsBfNMGkZ -DnbkKvbdJzoewdAN -EPDKjvbdwzHefYFS -DnbjjvbdBiKbKhej -EOcKjvbdjuvmdCXw -EOcKjvbdbhmKKevx -DoCjjvbdehLWRmpg -EPCjjvbdACrYJzJQ -EOcKjvbdhuZeXSUb -DoCkKvbdJcJbqJcY -EPDKjvbdYqMeJNEq -DncLKvbdmJDtRUqa -EPDKjvbdnBjWxOnV -DoDLKvbdOEctJIkE -DoCjjvbdDxYLtTtM -EOcLKvbdZnnJFFZj -EOcKjvbdKRZeOfNe -DoCjjvbdTukpJtAq -DoDKjvbdhyuGLpnG -DoDKjvbdhtzFWrUb -DnbkKvbdQccBQRDr -EPCjjvbdTukojUBR -EPDKjvbdeKKRvUzn -EOcLKvbdeXzTtSFz -DncKjvbdyTOJNSCH -EObkKvbdjmBkydfo -EPCjjvbdelevflik -DoDKjvbdZtJIxcrn -DoDKjvbdqiAJeNOe -DoCjjvbdddnqavbj -DoCjjvbdZLrDtOMN -EPDKjvbdZyEKNcLr -EObkKvbdMgDPmQVL -EPCjjvbdxrmiMrBg -EObjjvbdZGvdAPSi -EPCkKvbdvvkaWBWV -DncKjvbdfMewHNJk -DoCjjvbdlrYtyrdJ -DncLKvbdiLeDnVCy -DnbjjvbdvwLaWBWV -EOcLKvbdVBCRSprZ -DoDLKvbdYzbfSKVy -DnbkKvbdXrlBNUPY -EObjjvbdKfFhCAqV -DoCkKvbdVTmTekvK -EPDLKvbdaSGChTfL -DncLKvbdauCGwjsh -EObjjvbdBcpBWJlf -DnbjjvbdZjTIQHCG -DoCkKvbdDjHiuxKA -EObkKvbdZxdKNblS -DoDLKvbdptTfrRjt -DoDLKvbdJbjCqKDY -EOcKjvbdEJhKWYKA -DnbkKvbdssSSyZeD -EOcLKvbdZshhyESn -EPDKjvbdRjxfUgKs -DncKjvbdwygefYEr -EPCkKvbdiLeEOVCy -DnbkKvbdTvLojTaR -DoCkKvbdzdzOzdyp -EPDKjvbdVUNUGMWK -EObjjvbdqdEhonVa -EPDKjvbdKefHbAqV -DncKjvbdtSqsYzFD -DoDLKvbdZjTIPgBf -EPCkKvbdRjyFuHLT -EOcKjvbdUtMsfLvK -DoCjjvbdnHEwlnGy -DnbjjvbdURQnttgm -DoCkKvbdFfJrOIsq -DoDLKvbdjKGIKMwr -EOcKjvbdTAEiIBnd -EPDLKvbdFxttaEXb -DoDKjvbdJTZAsNYM -EPCkKvbdFejSNhtR -EPDKjvbdwkXEHzyf -DnbjjvbdbUafxLTh -DoCkKvbdZQleJNEq -EPCjjvbdmpZyVkZC -DnbjjvbdmJEUQuRa -EObkKvbdrEFIpNua -EOcLKvbdJpzEnfNe -DnbjjvbdyTNiMqag -EObjjvbdNQYQvOHT -EPDKjvbdGKdrbgmV -EOcLKvbdCJKakIej -DncLKvbdlhcsptrB -DnbjjvbdZirhPfaf -DncKjvbdZoNiFFZj -EOcLKvbdjuwNcaww -EOcKjvbdUyITzLPO -DnbjjvbdxVMdpyLn -EObjjvbdnCJwXnnV -EPCjjvbdIMBznWqL -EObkKvbdJpzFOenF -EObjjvbdlhdTpuRa -DncLKvbdSCDdkiZL -EObjjvbdZxcimcMS -EOcKjvbdxVMdqZLn -DoCkKvbdrJAKFMne -EObjjvbdXsMAmUPY -EObjjvbdeFOqbWbj -DncKjvbdCTBCsfWr -DoCjjvbdRyjHsCvA -EPDKjvbdziuQQDrt -EOcLKvbdziuPocrt -EPCkKvbdWWhwvEEg -EPCkKvbdeEoRavcK -EPCjjvbdSKyFuGkT -EPCjjvbdrEFIonWB -EObjjvbdrEFIpOVa -DncKjvbdzGyMANEw -EPDKjvbdrRtjmjaN -DoCkKvbdJbjDRKDY -EObkKvbdfNFvgNKL -DnbkKvbdZHWdAPTJ -EPCjjvbdCDoaWKMf -DncLKvbdJKEAKPgE -DnbjjvbdssSTYydc -EOcKjvbdIsYaTNYM -EPCkKvbdgPazvcxI -DoCjjvbdmozYvLYb -DnbkKvbdeATqNYKG -EObjjvbdIwsbIMQp -EPDLKvbdpssfrSKt -EPCkKvbdhzUfLpmf -EOcKjvbdNGcPlpUk -DncLKvbdhkeEOVDZ -EPDKjvbdLFfIBaRV -EPCkKvbdJuuGEFGi -EOcKjvbdRacdlJYk -EPCjjvbdmbKWxOmu -EPDLKvbdwtmFQxkn -DnbjjvbdgvyAzzAJ -EPDKjvbdNrsugFVQ -DncKjvbdmttzLKRf -DnbkKvbdZyEKNcLr -EObkKvbdxrmiNRag -DoDLKvbdiMFDnVCy -EObjjvbdWSNxBdlD -DnbkKvbdCTBDUFwS -DoDKjvbdYTLaMtPY -EOcLKvbdZtIiZDrn -EObjjvbdYzcGSJvZ -EObkKvbdCSaDUFvr -DoCjjvbdTppnuUgm -DoCkKvbdOTUVfduQ -EOcLKvbdfpBzwDwh -DncKjvbdGBPQyJzm -EPCjjvbdVZITyjnn -EObkKvbdVhXuxGxz -EObjjvbdiifHimXr -EPDKjvbdvwMAvAvV -EOcKjvbdkWXODbYX -DoDKjvbdmbKXXnnV -DoDLKvbdZsiJZDrn -DoCkKvbdlrZUzTDi -DoDKjvbdSQTfjGEX -EOcKjvbdqcdiPnWB -EOcLKvbdpssgSSKt -EPDLKvbdhkeENuCy -EPDKjvbdZQmEhmEq -DoDKjvbdZtJIxcrn -DncLKvbdhgJbxujV -DoCkKvbdDoDKkXCd -EObkKvbdZGvdAOsJ -EObkKvbdwjvdHzyf -EPCjjvbdUQpoUuHm -EPDKjvbdUGznMXVe -DnbjjvbduaEYroFI -DoDLKvbdehLWRnRH -DoDLKvbdgQBzwEYI -EObkKvbdbUagYKsh -EObjjvbdyqPMhiwA -EPDKjvbdvvkaWBWV -DnbkKvbdJTYaTNYM -DoDKjvbdZtIhxdSn -EOcLKvbduaEZTOdh -EObjjvbdkNCMZeGo -EPCjjvbdZLqdTnLm -DoCkKvbdUsltFkuj -DncKjvbdnPyyVkZC -DoDLKvbdwjvdHzzG -EPCkKvbdGKdsCgmV -DnbjjvbdiMFDmtby -EObjjvbddneSjtUS -DncLKvbdezvZFJUX -EPCjjvbdhbOcFWqR -DoCkKvbdaMjbTVMg -DoDLKvbdHDjvKCJj -EOcLKvbdpxoIHRDx -DoDKjvbdZshhxcrn -EOcLKvbdcJNKKewY -EObjjvbdTppntuHm -EPCjjvbdemGWfmJk -DoCkKvbdjcLkQftg -EObkKvbdQwODbkgc -EPDLKvbdCTAcUFwS -DnbjjvbdvOszpkPU -EOcKjvbdkClLRHUg -EOcLKvbdNHCpMpVL -EObjjvbdZMRcsnMN -DoCjjvbdpxnggQcx -EOcKjvbdyTOJNRbH -EPDKjvbdeKKRutzn -DncKjvbdrzLosAgn -EPDKjvbdYzcGRjWZ -EPDKjvbdQcbaPpdS -DnbkKvbdtkxXAsaX -DncKjvbdCDpAvKMf -EPDKjvbdHEKvKBjK -EOcKjvbdfpBzvdYI -DncLKvbdiifIJmYS -EPDLKvbddeOqbWbj -DnbkKvbdZyDinDMS -DoDLKvbdkNCLydgP -EOcLKvbddePSCWbj -DnbkKvbdZxcjNcMS -DoCjjvbdQwNccMID -EPDLKvbdiiehKMwr -EOcLKvbdCTBDUFwS -EPDLKvbdbLMGOnDA -EOcLKvbdUMWOaVni -DnbjjvbdyqPMhjXA -DncKjvbdCTAbsewS -DncKjvbdMpYQvOHT -EPDKjvbdTqRPVVIN -DoCjjvbdZxdJnClS -DoCjjvbdWSNwbElD -DnbkKvbdrWokcIxq -EObkKvbdWIYWXgYz -EPDKjvbdzitopDsU -EObjjvbdUVkojUBR -EPDLKvbdEObkLXCd -EOcKjvbdrbFmMHKy -DnbjjvbdehKuqmpg -EOcLKvbdZshiYcrn -DoCjjvbdZnnIdeZj -EOcLKvbdmttzLKRf -EObjjvbdGZUuBDwb -DoCjjvbdHDjvJaij -DnbjjvbdKQzFPGNe -DncKjvbdRbDeMJYk -DoCjjvbdezuyEhsw -DoDKjvbdwkWdHzzG -DncKjvbdEASJMyvw -DncLKvbdyfyMANEw -EPCjjvbdCSaDTfXS -EOcKjvbdCJKajiGK -EObjjvbdrJAKFNOe -DnbjjvbdFWZPoljF -DnbjjvbdmpZyVjyC -EPDKjvbdiifIKNYS -DncKjvbdGAnqYizm -EOcKjvbdiMFEOVDZ -DnbjjvbdJXtBglRQ -DoCkKvbdijGHilwr -DoCjjvbdDwxMUUUM -DoDLKvbdUMWPBVni -EPCjjvbdDwwksssl -DnbkKvbdNeDshhkE -EObkKvbdbAudfQQX -DnbkKvbdwuMdqZLn -DnbjjvbdijGHjNXr -EPCjjvbdOFETiIkE -DoCjjvbdxsOImSCH -DoCkKvbdLiBkqYAS -DncKjvbdFkFTDHmV -DoCjjvbddoErjstS -EObjjvbdyOTIXsIc -DncKjvbdeXzTtSFz -DoCjjvbdqdFIonWB -EPDLKvbdMpYRWNgT -DoDLKvbdfNGXHNJk -EPCjjvbdePErkTsr -DoCjjvbdNHCpNQVL -EObjjvbdsQVnjCuf -DnbjjvbdtcDUwWPP -DoCjjvbduaDySndh -EPDKjvbdqZPIGqDx -EObjjvbdijFgimYS -DncKjvbdZyEJmblS -DoDKjvbdirziSkJz -DncLKvbdeOeTKtTr -EOcKjvbdfpBzwEYI -DnbkKvbdezvZFItX -EPCjjvbdrRuLOKaN -DncLKvbdbrbjscjB -EObkKvbddBrlrAUN -EPDKjvbdZoOIdeZj -EOcKjvbdGYuUaEYC -EPCkKvbdNxPVzdNt -EOcLKvbdhlFDmuDZ -DncKjvbdKVtecdgJ -EPDLKvbdqlzJxkhJ -EOcKjvbdySmhlqbH -EPCkKvbdxsNiNRag -EPDKjvbdTYKkmzjx -EObkKvbdIryBTMxM -EPDLKvbdxnShXsIc -EPCjjvbdaSFbhUGL -EObjjvbdRDbaQQdS -EObkKvbdrbFmMGkZ -EPCkKvbdWXJXudEg -EOcLKvbdcJNKKfXY -DncKjvbdEuxpPljF -DncKjvbddCTNSATm -EOcLKvbdFVyQPmKF -EPCkKvbdpeceUWBI -DoDLKvbdVTmUGMWK -DoCjjvbdFyVVBEXb -EOcLKvbdTukpKTaR -DncLKvbdDHLegAzc -EPCjjvbddxZtTrFz -DncKjvbdssRsZZeD -DoDKjvbdeOeSjstS -DoDKjvbdQdDApQcr -DncLKvbdURQoUuIN -DnbkKvbdezuxdiUX -EPCjjvbdbPgHDkzd -EOcKjvbdFWZQQMjF -DoDKjvbdMfcQMotk -EPCjjvbdrWokbiYq -DoDKjvbdnGdwmOGy -EOcKjvbdnBjXYOmu -EOcLKvbdDoCjjvbd -DoDLKvbdsQVoJbuf -EObkKvbdZirhQHBf -EPCkKvbdIGgZxwwg -DncLKvbdrMzKZMIJ -DnbkKvbdkHflFemk -EObkKvbdfHkWSORH -DnbkKvbdwygfGYEr -EOcKjvbdxmrgxTJD -DnbjjvbdGdLViaij -DoDKjvbdmSYtysEJ -EObkKvbdfILVqmpg -DncLKvbdADSXizIp -DoCjjvbdznpQdbkx -DncLKvbdmbKWxOnV -EPCkKvbdJvUfEEfi -EOcLKvbdcScLTdJa -DnbjjvbdQcbaPpdS -EPDKjvbdDoDKjvcE -DncKjvbdhzUfMROG -DncKjvbdbrcKtDia -EOcLKvbdJpydoFme -DnbjjvbdxLWdHzyf -EPCjjvbdwuMeQyMO -EOcLKvbdiifHimXr -EOcLKvbdySmiNSCH -EPCjjvbdznopeCkx -EPDLKvbdZshhyESn -DoDLKvbdrDeJQNvB -DoDLKvbdILaznXQk -DoCjjvbdnUtzKiqf -DnbkKvbdjJehKMwr -EOcLKvbdDxXlUUUM -DoCkKvbdtSqsYyeD -DoDKjvbdxVMeQxlO -EPDLKvbdZjTHofaf -EObkKvbdZisHogBf -DnbkKvbdnBiwXoOV -DoCkKvbdYSkaMtPY -DncLKvbdHELVibKK -EPCkKvbdhlEcnVCy -EPCkKvbdZLqdTnMN -DoDKjvbdbsCkUEKB -EPCkKvbdMpYRVnHT -EOcLKvbdFWZQPljF -DoDLKvbdznoqEcLx -DnbkKvbdcImJjewY -EPCkKvbdvvlBVaWV -DoCkKvbdmIdTqUrB -DncKjvbdxZgeexFS -EOcLKvbdrouoJbvG -DoCkKvbdWRnYBdlD -DoCkKvbdBhjbLJFj -DnbjjvbdrouoKDWG -DoDKjvbdUxgsyjnn -DoDLKvbdakMFnnDA -EOcLKvbdZtJJYcsO -DncLKvbdrbFllHKy -EPCjjvbdmajXXnmu -DncLKvbdpyPHgQdY -EObjjvbdyNrgwsJD -EPCjjvbdaMjaruMg -DncLKvbdYfwEAPTJ -DoDKjvbdbiNKLFvx -DoCjjvbdajkfOnDA -EObjjvbdZoOJEeZj -EOcKjvbdqZOhGqEY -EOcKjvbdziuPodTU -DoDKjvbduLxWaUBX -EObkKvbdyXhjBoyk -DoDKjvbdTkunaWPJ -EObkKvbdBraCsfXS -DoDLKvbdTAEiICPE -DnbkKvbdDjHjVwjA -EOcKjvbdqlzKZLhJ -EObkKvbddneTLTsr -EObkKvbdWRmwaeMD -DoDLKvbdLBLHNBwq -DoDLKvbdUxhUZkPO -DncKjvbdYlSDsmkm -DoCkKvbdxZhGFwdr -EObjjvbdbsDKsdJa -EPCkKvbdGYuVAdYC -EObkKvbdRXNccLhD -DnbjjvbdFVxpQMjF -DoDLKvbdMgDQNPtk -EObkKvbdQvmccMHc -DncKjvbdMpXqVnHT -DoCjjvbddZxoxYqC -DncKjvbdnVUzKjRf -DoCjjvbdEuyQPmKF -DoDKjvbdLYqKSzuG -EPDLKvbdTAFJICOd -DoCjjvbdCJLCKiFj -EOcLKvbdFyVVAcwb -DoCjjvbdbQHHDkzd -DoCkKvbdNrsvGduQ -DnbjjvbdRWmcblID -DnbkKvbdQvnEDLgc -DnbjjvbdVZITzKnn -EPDLKvbdxxJJaoyk -EObkKvbddoEsLUTr -DncLKvbdZQldhldq -DoDLKvbddCSmSAUN -DoDLKvbdYpldhldq -DoDLKvbdDxXlUTsl -EPCkKvbdnGdxMmfy -DncKjvbdwWlBWAuu -EOcLKvbdkDMKpgUg -DoDLKvbdZshiYdSn -EPDLKvbdhfjCyWKV -EObjjvbdKRZeOeme -DoCkKvbdznopdcLx -EPCkKvbdZMSDsnMN -DnbkKvbdkWWmcbXw -EObjjvbdpxoHfqEY -DnbkKvbdtlYXAsaX -EPDLKvbdjvXNcaww -EPDLKvbduDDVXVoP -DoDKjvbdLGFgbBQu -EObjjvbdmuUzLKRf -EObjjvbdRaceMIyL -EPDLKvbdiHKCyVjV -DoCkKvbdxnTHwriD -EOcLKvbdZjTIPgCG -DncLKvbdBcpBVjNG -EPDLKvbdVwIxVceH -DoCkKvbdkIGkeemk -DnbkKvbdozmdKxPA -DoDKjvbdjuwNdCXw -DoCkKvbdeEoSCXCj -EPCkKvbdcScKtEJa -EPDLKvbdySnIlrBg -EPCjjvbdnQZyVkYb -DoDLKvbdqYnggREY -EObkKvbdBsBDUGXS -DnbkKvbdUWLoitAq -DoCkKvbdIGgZxxYH -DoDLKvbdvwLaWBVu -EObjjvbdmfeXlnHZ -EPDLKvbdRXNdDMID -EPCjjvbdZLrDsmkm -EOcKjvbdUQpoUuHm -DnbkKvbdEzsqFMDJ -EOcLKvbdQlwayOUz -EPDKjvbdyzdnRhJI -DoDLKvbdwzHfGXeS -EOcKjvbdTvMPitBR -EOcKjvbdJbicRJcY -DoDLKvbdFVxpQNJe -DoDLKvbduLxXBTaX -DoCjjvbdLYpirzuG -DnbjjvbdvwMAvBWV -EPCkKvbdBiKbKiFj -DncLKvbdIryArmYM -DncKjvbdySmiNRag -DncKjvbdeEoRbWbj -DoDLKvbdjuwOECXw -EPDLKvbdFWZPomJe -EObkKvbdjcMLRGtg -DncLKvbdQwNccMHc -EPDLKvbdzQoMiJwA -DoDKjvbdmSYtzSdJ -EOcLKvbdelfWgMjL -EOcLKvbdiMFENuCy -EPCkKvbdezvZEhsw -EPDLKvbdUVlPisaR -EPDKjvbdbKlGOmcA -EObkKvbdzGyMANEw -DoDKjvbdXFxzUAPT -EPDLKvbdqrUkNkAm -EOcKjvbdPxmAGsSK -EOcLKvbdyfyMAMeX -EObjjvbduDDUwVoP -DncLKvbdyYJJbQZk -DoDLKvbdxVNEqYkn -EPCjjvbdNPxRWOHT -EObkKvbdYqNEiNEq -EPDKjvbdXrlAlsoY -EPDLKvbdbrcKtEJa -EObjjvbdGdKvJbJj -DoCjjvbdrDeJPnVa -DoDKjvbdZLrETnMN -DoDKjvbdKVuGDeGi -DoCkKvbdZtJIyETO -EObjjvbdYSlAlsoY -DoDLKvbdCSaDUGWr -EObjjvbdmfeYNNgZ -DoDKjvbdtumwiqTA -DncKjvbdqFdEtWAh -EPCkKvbdauCHXjtI -DnbjjvbdvOszqKoU -EOcKjvbdxrnImSBg -DoCkKvbdjvWmdBww -EPCjjvbdmuUzKiqf -EObjjvbdNdcsiIjd -EOcLKvbdNPxRVnGs -EObkKvbdSPsgKFdX -EPDLKvbdVAbQsQqy -EPDKjvbdVZHsyjoO -DncKjvbdJzofXdAN -EObkKvbdFjeTChNV -DnbjjvbdjJegjNXr -DnbkKvbdZLrDsnLm -DnbjjvbdbAueGQQX -DncLKvbdQcbaQQdS -DnbjjvbdFjdrbglu -DncLKvbdAMgxsWyx -DnbjjvbdRpUHKGDw -DncLKvbdMfcPlpVL -EObjjvbdIwtBhMRQ -EPCkKvbdelfXGmKL -DoDLKvbdFkErbhMu -EPCjjvbdHffyyYXg -DoDKjvbdOEctJIkE -DoCkKvbdKkAgvAKZ -EObjjvbdzitopDsU -EPCjjvbdRpUHJfEX -DoCkKvbdZLrDtNkm -EPCkKvbdijGIKNXr -DoCjjvbdxUmEpxlO -DnbjjvbdIxTbIMRQ -EPCkKvbdMfbpMotk -DncLKvbdjlbLzFGo -EObkKvbdrRtkNjaN -DnbkKvbdRosgKFcw -EPDLKvbdpfDeUWAh -DnbkKvbdkxsRryHU -EPCkKvbdkVvmcbXw -EOcKjvbdhficZWJu -EPDKjvbdCEQBWKMf -DoCjjvbdUyITzKoO -DnbjjvbdaNKbStmH -EPDLKvbdFWYpQMie -EObjjvbdhytekqNf -EObjjvbdeXyssqez -DnbkKvbdLAjgNCYR -DncKjvbdSBdFLiZL -EPDKjvbdBhkBjiGK -DoDKjvbdmajWxOmu -DoCjjvbdrMzJyMHi -DoDKjvbdZLqctOMN -EOcKjvbdnPzYujxb -DncKjvbddoFTKstS -DncLKvbdjcMLRGuH -DoCkKvbdbUagYKtI -DncLKvbdVAaqTRSZ -EPCjjvbdOEdTiJLE -EPCjjvbdJvUfEFHJ -DnbjjvbdIryBTNYM -EPDKjvbdYpleJNEq -DncKjvbdZGwEAOri -DncLKvbdBdQAvJmG -DoCkKvbdmIdTqUqa -EPCkKvbdtcCuWuno -EPCjjvbdmuUyjjSG -DncLKvbdjAQHApHK -EPCjjvbdGdKujBjK -EPDKjvbdYkrETmlN -DncKjvbdYORAYUut -DnbkKvbdiHKCxvJu -EPCjjvbdkHgLfGOL -DoCjjvbdpssfqqkU -EPDKjvbdZnmheEzK -EPDLKvbdySmhlrCH -EPCkKvbdjJegilxS -DoCkKvbdqcdhpNua -EPDKjvbdIHHZyXxH -DnbjjvbdjmBkydgP -DoCjjvbdYkqcsnLm -EPCkKvbdZnmhdeZj -EPDLKvbdDjIJuwjA -EOcLKvbdnQZxvKyC -EPCkKvbdBhkCKiGK -DnbjjvbdYkrDsnMN -DncLKvbdyzeNqghh -DncLKvbdrRuKmjaN -EPCjjvbdssRsYzEc -DoDLKvbdZQleJNFR -EObjjvbdZQleJMeR -EPDKjvbdtvNxJqTA -EObjjvbdbBWFGPpX -EPDLKvbdajkeoODA -EPDLKvbdSZihTCvA -EObkKvbdZMRdTnMN -EPCkKvbdsCFmLgKy -EObjjvbdVvhxVceH -EPCkKvbdaaVeFpQX -DoCjjvbdZQmEhleR -EOcKjvbdhzUfLpmf -EPCkKvbdREDBQRDr -DncLKvbdemFwHNJk -EOcKjvbdGAnqYizm -DncLKvbdtTRsZZdc -DoDLKvbdGGKRmhtR -DoDLKvbdIidAJogE -DoCkKvbdxZhGFxEr -DncLKvbdpxoHgREY -DnbjjvbdQcbaQRES -EPDKjvbdjAPfaPgK -EPCkKvbdvwMAuaWV -EOcKjvbdZLrDsnMN -DncKjvbdyqOlhiwA -EObkKvbdRacdkiYk -DoDKjvbdUWMQJsaR -EPDKjvbdUGzmkvvF -DoCjjvbdhbPDFXRR -EObjjvbdXGZZtAPT -EPCjjvbdMoxRWNgT -EOcKjvbdGFiqmhtR -DoCkKvbdNPxRWNgT -EObkKvbdyNrgxTJD -EPDKjvbdrXPkcJYq -EOcLKvbdFjeTChMu -DncKjvbdjvXNcaww -DncKjvbdkMbMZdgP -EOcKjvbdDnbkLXDE -EObjjvbdbBWFGPow -DoCjjvbdAMhZSwZx -EPDLKvbdZRNEiMeR -DoDKjvbdqdEiQNvB -DoCkKvbddePRavbj -EPDKjvbdaMjbStlg -EObkKvbdHgGyxxYH -EOcKjvbdtkxXBUAw -DnbjjvbdmSZUysEJ -EObkKvbdrXQLbhxq -EObkKvbdVTlsfMWK -DoDKjvbdSLZGUfjs -DoCkKvbdFVyPpMjF -DoCjjvbdhgKCyViu -EPCkKvbdZMSDtOLm -EPCjjvbdySmhlqag -EPDKjvbdWRmwadlD -EPCjjvbdqZPHfpdY -DoDLKvbdXsMBMsoY -DncLKvbdelewHMjL -EObjjvbdYpleImEq -DoDKjvbdZirgogBf -EOcLKvbdrXPlChxq -EPCkKvbdFVxpQMie -DoCkKvbdrNZjZMHi -EOcKjvbdDjIJuxKA -DncLKvbdeOeSkTsr -DoCjjvbdZoNhddyj -DoDKjvbdkWXNcaxX -DoDLKvbdTpqOtthN -DnbjjvbdehKuqnQg -EPCjjvbdmgFXlmfy -DncLKvbdShyiqAAl -EOcKjvbdKaKgNBwq -EPDKjvbdEztREkbi -EOcKjvbdVviXvEFH -EPDKjvbdcIlikGWx -EPCkKvbdUWLojUAq -EPDLKvbdOStWHEtp -DoCjjvbdHlBzmwRL -DnbjjvbdWIYVxHYz -EPDLKvbdADSXjZhp -EPDKjvbdRzJgrcWA -EObkKvbdxrnIlqag -EObjjvbdRosgKFcw -DoDKjvbdkySrTYgU -DncKjvbdsrqrxydc -EPDLKvbdZyEKODLr -EPCjjvbdEXxMUUTl -EOcKjvbdtcCtwWOo -DncLKvbddndrkTtS -EPDKjvbdrafMkfjy -EPCjjvbdJcJbpibx -EObkKvbdFfJqnIsq -EPCkKvbdyNsHwriD -DoCjjvbdaRebgsfL -DnbjjvbduoTzpjnt -EPCjjvbdZGvdAOsJ -DoDKjvbdmozYujyC -EPDKjvbdZGvdAPSi -DnbjjvbdmSYtzTDi -DoCjjvbdRotGjFdX -EObkKvbdSBceLhxk -DoCjjvbddijRvUzn -EObkKvbdMgDQNPtk -DoCkKvbdFVxoomKF -DncKjvbdGcjujBjK -EPDKjvbdBcpAvJlf -DncLKvbdLBLHNCYR -EObkKvbdmIctQtrB -DoDLKvbdFpATXGey -EPCkKvbdbrbkUDjB -DncLKvbdcTCjtEJa -DncLKvbdBsAbsfXS -EPDKjvbdFpATXGfZ -DoDKjvbdwuMeQxlO -EObkKvbdqUUGqrKt -DncKjvbdZyEKODLr -EPDKjvbdjhHLefNk -EPCkKvbdrbFmMGjy -DoCkKvbdsQWOjCvG -DoCjjvbdLBLHMbXq -EObjjvbdrpVnicVf -EPCjjvbdVqmwaeMD -DncLKvbdRNYCYnUz -EObjjvbdRXNdCkhD -DncKjvbdIHHZyYXg -DnbjjvbdyTOJMrCH -DoDLKvbdUsmUFkuj -DncKjvbdQcbaPqES -DnbkKvbdmgFYNNgZ -EOcKjvbdkySrTYgU -DoCjjvbdHlBzmwQk -DnbjjvbdaSFcITek -EObjjvbdQdCaPqDr -DncKjvbdxVMdpyLn -EOcKjvbdiMEdOVCy -DoCjjvbdRosgJecw -DncLKvbdkDMLQftg -EPCkKvbdKDKCqKDY -DoCjjvbdjvWnDaww -EOcLKvbduVnYJpsA -DoDLKvbdWRnYBdlD -DoDKjvbdssSSxzFD -EPDLKvbdJYTaglRQ -EOcLKvbdhzUfLpmf -DoDLKvbdJutfDdgJ -EOcKjvbdxmrgwrhc -EObkKvbdwWkaVaVu -EOcKjvbdxrmiMrBg -DoDKjvbdRDcApRES -DoCjjvbddjJrVtzn -EOcKjvbdxVNEqYlO -DoCjjvbdJJdAJofd -DoDLKvbdemGWfmJk -EOcKjvbdnPyyWKyC -DoCjjvbdbrcLTcia -DoDKjvbdjuvmdCXw -DncLKvbdtkwvaUAw -EOcKjvbdHDkViaij -EObkKvbdRDbaPpcr -EOcLKvbdtSqryZeD -EOcKjvbdrRuLOKaN -EOcKjvbdczYowyRC -DnbkKvbdjcMLQfuH -DncKjvbdmbJwYOnV -EPDLKvbdZnmiFEzK -EPDKjvbdjbkkQgVH -EObkKvbdJTZArmYM -DncKjvbdSPsgJfEX -DncLKvbduMYXBUBX -EObkKvbdkIHMFfOL -EOcKjvbdYORAYVWU -DoCjjvbdyzdmqghh -DncLKvbdtumwiqTA -EPDKjvbdQmYCZOUz -DoCjjvbdtcCtvvPP -EObjjvbdVTmUGMVj -EObkKvbdBsAcUGXS -DoCjjvbdqYngfqDx -EPCkKvbdtkxXBTaX -DoDLKvbdACqwiyhp -DncKjvbdraelkgKy -EPDKjvbduLwvaUBX -DncKjvbdpssgSSLU -EPCjjvbdIxTbHlRQ -EPDKjvbdPyNAGrqj -DoDLKvbdnCJvxOnV -EObkKvbdZRNFJNEq -DoCjjvbdFxuVBEYC -EOcKjvbdVAbRSpqy -DnbjjvbdJbibqKDY -DoDLKvbdKCicQjCx -EPCjjvbdNrtVgFUp -EOcLKvbdZQleJNEq -DoDLKvbdaRebgsfL -DoCkKvbdCIjakIej -EOcLKvbdBraDUGWr -EPDLKvbdADRxKZiQ -DoCjjvbdHkazmvpk -EPDKjvbdUsltGLvK -EOcKjvbdTkvOaVoJ -DncLKvbdZnmiEdyj -DoDKjvbdZtJJYdSn -DoDLKvbdbiNJjfWx -DnbjjvbdIsZBTNYM -EPCkKvbdhbPDEvpq -DncKjvbdqlyjYlIJ -DoCkKvbdbsDLTcia -DoDKjvbdKCjCqKCx -DoDLKvbdnBiwYOmu -DnbkKvbdjKGIKMwr -EPCjjvbdHgGyxxYH -EOcLKvbdcyxpXxqC -DncLKvbdlZSrSyGt -EPCjjvbdTAFIhCPE -EObkKvbdZdwfzgiC -DoDLKvbdSLYfUgLT -DoCjjvbdRMwayNtz -DnbjjvbdCflGHAzc -DoCjjvbdrJAKFNOe -EPCjjvbdjblKpgUg -EPDLKvbdQccAoqDr -DnbjjvbdCJKbKhfK -EPDLKvbdiGibyWJu -EOcLKvbdyNsHxShc -EPDLKvbdmIcspuSB -DnbjjvbdnGdxNOHZ -DoCkKvbdhzVGMRNf -DoDLKvbdeFPRawDK -EObjjvbdsQWOjCvG -EObkKvbdhzUelQmf -EObkKvbdeJirWUzn -DncLKvbdxxIibPzL -EObkKvbdSBceMIxk -DoCkKvbdehKvRmqH -EObjjvbdRbDeLiZL -EObjjvbdGYtuAdYC -DnbjjvbdHDkVibKK -DoCjjvbdKQyeOfNe -DoCkKvbdmbJvxOmu -DoCkKvbdULvOaWPJ -DncLKvbdrWpMCiZR -EObjjvbdhytfLqNf -DoCjjvbdgPazvdXh -DoCjjvbdiHKDYuiu -EPDKjvbdRWnDbkhD -DncLKvbdrMzKZLhJ -EObkKvbdyXhiaoyk -EPCkKvbdjmCLydfo -DnbkKvbdDxYMUTsl -EPDKjvbdxmrgxSiD -DnbkKvbdmSYtyrci -EPCjjvbdqvokcIxq -DoDLKvbdXsMAmUPY -DncKjvbdDoDKkWcE -EPCkKvbdMgDPmQUk -DoDLKvbdKyQirztf -EPCjjvbdmajWwnmu -EOcLKvbddCSlrATm -EPDLKvbdrJAKElne -DoCkKvbdIsZBTMxM -DnbkKvbdffMZnGgA -EOcKjvbdJcKDQjDY -EObjjvbdxsOJMrCH -EObkKvbdEKHiuwjA -DncKjvbdunszpjnt -DoDLKvbdZjTIQHCG -DnbjjvbdsQVnibvG -DnbkKvbdGQATXHGZ -DnbkKvbdBsBDTfXS -DoCkKvbdBsAbsevr -DoCkKvbdRXNdDLhD -EPCjjvbdRadElJZL -DnbkKvbdxwhibPzL -EOcKjvbdCJLBjiFj -DncLKvbdZMSDsmkm -DoDKjvbduaEZSoFI -EPCjjvbdhgJbxujV -EOcLKvbdCJLBjhfK -DoCkKvbdZisHpHBf -DoCkKvbdqFdFUWBI -EPCkKvbdDGlFgAzc -DncKjvbdZxcjNblS -EPDLKvbdLqvmZuQz -DoDKjvbdxZhGFxFS -EObkKvbdZdxGzhIb -DoDLKvbdqwQMChyR -DoCkKvbdjlalZeGo -DncKjvbdZRNEhldq -EPCkKvbdZHXEAPSi -DoDKjvbdDoDLKwCd -DnbkKvbdmbJwYPNu -DncKjvbdMfcPlouL -DoCkKvbdQwODblHc -DoCjjvbdNQYQunGs -DnbjjvbdlqxtzSci -EOcLKvbdrDdhpNua -DncLKvbdKefICApu -EPDKjvbdatagXkUI -DoCjjvbdaofgDkzd -EObkKvbdIrxaTMwl -DncLKvbdSLYfVGkT -EPCkKvbdelevfmKL -DncKjvbdFfKSOIsq -EObjjvbdfILVqnQg -DncLKvbdZjShPgCG -DoCjjvbdrNZixlHi -DnbkKvbddoFTKstS -EOcKjvbdWSNwbFMD -EPDLKvbdpxngfqDx -EOcKjvbdIHGyxxYH -EOcLKvbdvwMAuaVu -EOcKjvbdkxrqryGt -DncLKvbdZjShQHBf -DnbjjvbdiUzEvquC -EObkKvbdpxoHfpcx -DoCkKvbdGAoRZJzm -EOcKjvbdehLVrOQg -EPDKjvbdkDMLRGuH -DnbkKvbdKCjDRKDY -EPCjjvbdLGFhBaRV -EPDLKvbdaMjbSuNH -DncKjvbdWfYzUAOs -DoCjjvbdsBelkfjy -DncLKvbdZnmheFZj -EOcLKvbdatagYLUI -EObkKvbdWXJXvEEg -DoDKjvbdZMRdTmlN -EPCjjvbdWXIwvEEg -DoCjjvbdkCkjqHUg -EPCjjvbdijFhJlxS -EPDKjvbdmSZUysEJ -DoDKjvbdMgDQMouL -EPCkKvbdrDdhomvB -EPCjjvbdRNXbYmtz -EPCkKvbdUtMtFlWK -DnbjjvbdGcjvJajK -EPDKjvbduaDyTOeI -DncLKvbdziuPocrt -DoCjjvbdcScKscjB -DncKjvbdmgExMmfy -EObjjvbdJcJcQibx -EPDKjvbdMpXpvNfs -EObkKvbdyqPNIjXA -EPCjjvbdCSaDUGWr -EOcKjvbdZnnJFEyj -EObkKvbdyOSgwriD -EPCjjvbdtkwwAtBX -DnbkKvbdDncLLXDE -EOcKjvbdZshhxcsO -DoCjjvbdxVMdpxlO -DncKjvbdLGGHaaQu -DoCkKvbdxUmFQyMO -EPDKjvbdpfEEsvAh -DoCkKvbdZRMdhldq -EPDLKvbdYzberJuy -EObjjvbdfHkWSOQg -EPDLKvbdRMxByNtz -DncLKvbdmoyyWLZC -EObkKvbdhtydvrVC -DoCkKvbdVhYWYGxz -EPDKjvbdbVCHXjsh -EPCkKvbdTlWPBVni -DncLKvbdFkEsCgmV -DnbkKvbdIsYaSlxM -DncKjvbdzaAOffbM -DncLKvbdaSFcHtGL -DoDLKvbdiGjDYuiu -EObjjvbdDigjVwjA -DncKjvbdqmZixlIJ -DnbkKvbdRjxfUgLT -EObkKvbdeAURNYKG -EPCjjvbdjvWnECXw -EPCjjvbdNQXqVmgT -DoDLKvbdxmsHxShc -EPCkKvbdqwPlChxq -DnbjjvbduLwwAsaX -DncKjvbduCbuWuno -DnbkKvbdJpydnenF -EPDLKvbdRXOEClID -DncKjvbdSKyFuGkT -DncKjvbdczZQYZRC -EPCkKvbdGZUtaDxC -EPCjjvbdOAJTUKSA -DnbkKvbdsZlQSaHn -DncKjvbduWNwiqTA -DoDLKvbdRNYCZOUz -DoCkKvbdVTmTfMVj -EOcLKvbdeATpmYJf -DncKjvbdbUbGxKsh -DnbkKvbdLZRKSztf -DncKjvbdcJMjLFwY -DnbkKvbdRadEkhyL -EPCkKvbdauBgXkTh -EObkKvbdrJAKFNOe -EOcKjvbdDnbjkXDE -DoDKjvbdrafMlGjy -EOcLKvbdliDtRVRa -EObjjvbdZjShQHCG -DnbjjvbdZnmiFEyj -EPDKjvbdbAueFpQX -EPCjjvbdVwJYVcdg -EObkKvbdijGIJmYS -DoCjjvbdJpyeOenF -DoDKjvbdYlSDsnMN -DncLKvbdehLVqmqH -DnbjjvbdTppnuVHm -EOcKjvbdSLYetgLT -EPCkKvbdZyEKOClS -DoDKjvbdHDjujBij -EPCkKvbdHkazmvpk -EObkKvbdkxrrTYft -EPCjjvbdOTUVfeVQ -DoCjjvbdYzbfSKWZ -DncKjvbdkxrrSxgU -EObjjvbdEOcKkXCd -EPDKjvbdcTCkTcia -DoDKjvbdatagXkTh -DoDLKvbdNHCpMpUk -DoDKjvbdhtzEvquC -EPCjjvbddePSBvbj -DoDLKvbddneTLUUS -DncLKvbdijFhKMwr -EPDLKvbdpxoIHRDx -DncLKvbdqquLOKaN -EPCkKvbdSCEEkiZL -DoDLKvbdvAdYroEh -DncLKvbdDwwksstM -EOcKjvbdKWVFcdgJ -EPDKjvbdZnmhdeZj -DoCjjvbdJSyBTMxM -DoDLKvbdtcDVXVoP -EOcLKvbdbAudfPow -EPCjjvbdpfDdtWAh -DncKjvbduCcUwWOo -DnbjjvbdGFirOItR -DnbjjvbdLBKgNBxR -DnbjjvbduVnYJpsA -DnbjjvbdjuvnDbXw -DoDKjvbdFkFTDINV -EOcKjvbdEvZQQMie -DoCkKvbdMfbolpUk -EPCjjvbdhbPCdwQq -DoDKjvbdZyEKNblS -EPCjjvbduCbtwWPP -DnbjjvbdgLGzbfAE -EObjjvbdqGDdsvAh -EPDLKvbdNGbolotk -DoCkKvbdSPsfifEX -DncLKvbdbVCGwjsh -EObkKvbdijGHjMwr -DnbjjvbdRosfifDw -DoCjjvbdQccApRDr -DoDKjvbdqTtHSSKt -EOcLKvbdsQWPJcVf -EObkKvbdeOdsLTsr -DncLKvbdcTDLUDjB -DoDKjvbdVgwvXfxz -EOcKjvbduoTzqKnt -EPCjjvbdYNqAYVWU -EObjjvbdemGXGmJk -DoCkKvbdVgxWXfxz -DoCjjvbdqlzKZLgi -EPDLKvbdLFfHaaQu -DnbkKvbdcSbkTcjB -EObjjvbdgGLzNgHA -EObjjvbdZjSgpGbG -DnbjjvbdGckVjBij -EOcLKvbdUMVnaWOi -EObkKvbdrylQSaHn -EPDLKvbdZHWdAOri -DoDKjvbdyfxlAMdw -DnbjjvbdZMSDsnLm -DoDKjvbdOTUVgEtp -DnbkKvbdJSxaSlwl -DncKjvbdkNCLzFGo -DoDKjvbdfMevgMik -DnbjjvbdMgDPlpVL -DncKjvbdqquLOLAm -DoCkKvbdfNFwGlik -DncLKvbdpxnhHRDx -DoDLKvbdZMRdTmlN -EPCkKvbdURRPVVHm -EPCkKvbdmgEwmOHZ -EOcLKvbdVAapsRSZ -DoCjjvbdczZPwxpb -EPDLKvbdWXIxWDdg -EPCkKvbdUVlQJtBR -EOcKjvbdelfWgNJk -EPDKjvbdUtMtFkuj -DnbjjvbdRkZFtfjs -EObkKvbdCJLCLJGK -DoDLKvbdKVuGEEgJ -DncKjvbdIxTbHkqQ -DncLKvbdMSWlzUpz -EPCkKvbdKefICAqV -EOcKjvbdtunXjRTA -DoDLKvbdZMSETmlN -EObkKvbdapHHELzd -EObkKvbdmRxtyrdJ -DoCjjvbdtTSSxzEc -EObjjvbddeOrBvbj -DncLKvbdJYUBgkpp -EPCjjvbduLxXBUAw -DnbjjvbdSLYetfjs -DncKjvbdzQnmIiwA -EPCjjvbdRpUGjFdX -EOcLKvbdddnqbWcK -EOcKjvbdWWhwucdg -EOcLKvbdCWzdJEov -EPDKjvbdTkuoAuni -DncLKvbdqUTgSSLU -DoDLKvbdNHDQMotk -DncLKvbdWXJXvEEg -EPCjjvbdaNKaruNH -EPDLKvbdraelkfjy -DncLKvbdLqvmZtpz -DnbjjvbdNddThhkE -DoDKjvbdzoQQdcLx -EPDKjvbdYpldiNFR -EObjjvbdZtJIyDsO -DoCkKvbdWWiYWDeH -DoCkKvbdeEoSBwDK -DoCjjvbdBsAcTevr -EObjjvbdqvpMChyR -EPCjjvbdsCGMlHKy -DnbkKvbduLwwAtAw -EObkKvbdMRwMyuQz -DncLKvbdwWlAuaWV -DncLKvbdHgHZxwxH -DncKjvbdBsAcTewS -DoDLKvbdJpyePFme -DncKjvbdVUNUFlWK -DncKjvbdEYXktTtM -DncLKvbdwMvANDeN -DnbkKvbdtSrTZZeD -EOcLKvbdJYUBhMRQ -DncKjvbdlYrrTZGt -DoDLKvbdliDsqUrB -EObjjvbdegjuqnQg -EObjjvbdlZSrTZHU -DncLKvbdfNGWfljL -DoDLKvbdLFegbBQu -DncLKvbdemGXGmKL -EPDKjvbdDwwksssl -DnbjjvbdxmsIYTJD -DoDLKvbdBsBCtGWr -DoCjjvbdIsYaTNYM -DncKjvbdJuuGEEgJ -EObkKvbdkySqsYgU -DnbkKvbdNPwqWNfs -EPDLKvbdmIdTptrB -DoDLKvbdyqOmIjXA -EPCjjvbdhkeEOUcZ -DoDKjvbdJqZePFme -EPDLKvbdfSAvzlCo -EObjjvbdbhljLFvx -EOcLKvbdaMkBsUmH -DoCjjvbdKyRKSzuG -EObjjvbdcSbjtEJa -EOcLKvbdkHflGFmk -DoDLKvbdemFwHMjL -EObjjvbdSLZGVHLT -DoCjjvbdJXtCILpp -EOcLKvbdaaVdfPow -EOcLKvbdFpATWgGZ -DoCjjvbdxZgeewdr -EObkKvbdeEnqawCj -EObjjvbdhytfMQmf -DnbjjvbdoznEKxPA -DnbjjvbdoAKzsgdO -DoCkKvbdYzbfRivZ -DoDLKvbdqqtkOKaN -DncLKvbdqvokcJYq -EPDKjvbdOStVfeUp -DoDKjvbdZxcinDLr -DoCkKvbdcyyQYYqC -EObkKvbdcIlikGWx -EOcLKvbdffLzNgHA -EPCjjvbdMtsRkNAX -EOcKjvbdpeceTvBI -EOcKjvbdZsiIxcsO -DncLKvbdJvVGDdgJ -DnbkKvbdZMRdTmlN -EPDLKvbdnCJwXnnV -EObkKvbdxUldqZLn -EPCjjvbdNddUJIkE -DoCjjvbdyYJJapZk -DnbjjvbdpxoHgQcx -EObjjvbdHDjvKBij -DncKjvbdUtNUFlWK -EPCkKvbdkVvmdBww -DnbjjvbdgGMZmgHA -DoDLKvbdmIdTqVSB -EOcLKvbdzitpPdTU -DncLKvbdkxrqrxgU -DoCjjvbdVBBpsRSZ -EOcLKvbdGFiqmiTq -EOcKjvbdxsOJMqag -DoCkKvbdHDkVjCJj -EPDKjvbdjSziTKiz -EOcKjvbdCTAbsewS -EPCkKvbdkWWnDbYX -DoDLKvbdJSxaTMxM -DoDLKvbdMoxRWNgT -DoDLKvbdmuVZkJrG -EPDKjvbdbUbHXjtI -DnbjjvbdkWWnEBxX -EOcLKvbdnPyxukZC -DnbjjvbdXrlBMtOx -DoDLKvbdJuuGEFGi -EPDKjvbdUaBprprZ -EObjjvbdsrqrxydc -EObjjvbduCbtwWOo -DoCkKvbdSLYeuHLT -DoDKjvbdKQyePFme -EOcKjvbdeYZssrFz -DoDKjvbdpxoHfpdY -EPCkKvbdcIljKfXY -EPDKjvbdDwwksstM -DnbkKvbdsQWOicVf -EPDLKvbdIidAKQHE -DoDLKvbdrDeJPnWB -EOcLKvbdZoNiEeZj -EObjjvbdptTgRrLU -EPDKjvbdmRyUzTEJ -DoDLKvbdFxtuBEYC -DnbkKvbdehLVqmqH -EPCjjvbdUtNUGLuj -DoDLKvbdxVNEqZLn -DncKjvbdySnImRbH -DoCjjvbdbLMGPNcA -EPCkKvbdzQoMiKXA -DnbkKvbdbiMijevx -EOcKjvbdSQTfiedX -DnbjjvbdZisIQHBf -EObkKvbdYpleIldq -DncLKvbdjmBlZeHP -DncKjvbdSCDdkhxk -DnbkKvbdrykpTAgn -EObkKvbdZQldiMeR -DnbjjvbdeYZssqez -EPDLKvbdlYrrSyHU -EOcLKvbdTpqOttgm -EOcKjvbdCJLCLIej -EPDKjvbdUQqOttgm -EObkKvbdGBOqZJzm -DncKjvbdqwQMDIyR -EPDKjvbdbBWFFoow -EOcLKvbdZMRctOLm -EPCkKvbdHEKuibKK -DnbjjvbdNddThiKd -DncKjvbdJuuFdEgJ -DncLKvbdRzJgsDWA -DncLKvbdRWmdCkhD -EPCjjvbdZRNFImEq -EOcLKvbdUaBqTRSZ -EObkKvbdWIXvYGxz -DoDKjvbdrRuKnKaN -DoCjjvbdYgXEAPTJ -DoCkKvbdwuMeQyMO -EPDLKvbdkHfkfFmk -DoDKjvbdTqQnuUhN -DoCkKvbdbKlFoODA -EObkKvbdrzLoraIO -DncLKvbdFxuVAdYC -DoCjjvbdZQldiMeR -EOcKjvbdJTZBTNXl -EPDKjvbdsQWPKCvG -EOcLKvbdeEoRawDK -EPDLKvbdtTSSxzEc -DncLKvbdliDsqUqa -DnbjjvbdZQleImEq -EPCjjvbdaSGDITek -DoDLKvbdRWnDbkhD -EPDLKvbdpedEsvAh -EPCkKvbdYpldhldq -DoCjjvbdZoOJEdyj -EOcLKvbdmoyxvKyC -EObjjvbdmSZVZsEJ -DoDLKvbdqUUGrSLU -EPDLKvbdmpZxujyC -EPCjjvbdCDpBVilf -EPCjjvbdFfJrNhsq -DoDKjvbdsZkosBIO -DnbjjvbdiBnbdvpq -DncKjvbdkDMKpftg -EPCkKvbdatbGxLTh -DoCjjvbdJTYaTNXl -DnbjjvbdhkdcnVCy -DncLKvbdyNrgxTIc -EPDLKvbdyNsHwriD -EPDLKvbdBdQBVilf -DoDLKvbdIsYaTNXl -DnbkKvbdkxsSTZHU -EPCjjvbdBsBDUGWr -EOcLKvbdgQBzwDxI -DnbjjvbdjblLQfuH -DnbkKvbdbVBgYKsh -DncLKvbdMgComPuL -EPDLKvbdqceIpOVa -DnbjjvbdqFceTvAh -EPCjjvbdFWYpQNJe -DoDLKvbdHDjujBjK -DncLKvbdIHGyyXxH -DnbjjvbdeFOqawCj -DoDKjvbdGQASwGfZ -DncLKvbdrWokbhyR -DncKjvbdSKyFtfkT -DoCkKvbdemFvfmKL -EPDKjvbdxsNhmRbH -EOcKjvbdsPunicVf -EObjjvbdrbGNMGjy -EPDLKvbdOXoVzcnU -EOcLKvbddZxpYYpb -DoDKjvbdVBBpsRRy -EPDKjvbdHDkWKCKK -DoCkKvbdSiZjRAAl -EPDKjvbdURQoVVHm -DoCkKvbdpyPHgQdY -EOcKjvbdGAoQxizm -DnbjjvbdMpXpvNfs -DncKjvbddndrjtUS -DnbkKvbdlhcsptqa -DoCkKvbdfNFvfmKL -EPCkKvbdHffyxxXg -DoCkKvbdYpleImFR -DoCkKvbdbBVdfPpX -DncLKvbdWSNxBdlD -EPDKjvbdSQTfjFcw -EPCjjvbdkxrqsYgU -EPDKjvbdrovOjCvG -DoCjjvbdaSGCgsek -DncLKvbdZGwEAOri -DoDLKvbdJmADzHUa -DoCjjvbdNdcshiKd -DoCkKvbddneTLTtS -EObkKvbdMoxQumfs -DncKjvbdVgxVwfxz -DoDKjvbdGcjuibKK -EObkKvbdTqQnuUhN -DncKjvbdURRPUuIN -EObkKvbdbrbjtEJa -DnbkKvbdKQyeOenF -EObjjvbdbKkfOnDA -EPDLKvbdlhdTptrB -EObjjvbdxnTHxTJD -EObjjvbdKCjCpjDY -DoDLKvbdMSWmZtpz -DoCkKvbdBsBCsfXS -DnbkKvbdfRaWzkcP -EPDKjvbdbAvFGQQX -DoCjjvbddoFSjtUS -DnbjjvbdypoNJJwA -EPDKjvbdzdzOzdyp -EObjjvbdJpzEoFme -DoCkKvbduCbuXWPP -EPCkKvbdFfJrOItR -DoDLKvbdkIGlFfOL -DnbjjvbdbAudfPpX -DoDLKvbdtAHRIABS -EOcLKvbduDCuWuno -DoDKjvbdkHgLfGNk -EOcLKvbdxZhFeweS -EObkKvbdUxgszKoO -EOcKjvbdiBoCeXRR -DnbkKvbdZeXfzhJC -EObkKvbdtcDUvvPP -EOcKjvbdMtrrLNAX -DnbkKvbdWXJYVceH -DnbkKvbdJbjCpibx -EPCkKvbdajlFnnDA -DnbjjvbduaEZTPEh -EOcKjvbdGcjuibJj -DncLKvbdKefHbAqV -DoDKjvbdUxgtZjnn -EPCjjvbdVZITzKnn -EPDKjvbdHkaznXRL -DnbkKvbdOEdTiIkE -DnbjjvbdiGjDYvJu -DoDKjvbdnUtykJrG -EPCkKvbdBdQBWKNG -EPDKjvbdsBemLfkZ -EPCjjvbdtumwiqTA -EOcKjvbdnCKXYPOV -DncLKvbdVwIxVdFH -DnbjjvbdWIYWYGxz -EObkKvbdFpATXHFy -DoCjjvbdauBgXjtI -DnbkKvbdTqROuVHm -DnbjjvbdlhcsqUqa -EPDLKvbdxZhGGXeS -DoDLKvbdZjTHogCG -EOcKjvbdbKlGOnDA -EObjjvbdLiBlRYAS -DncKjvbdxrnJMrCH -EOcLKvbdMJBlRYAS -EOcKjvbdUsmTekuj -DnbjjvbdEYYMTssl -EObkKvbdZMSEUNkm -DncLKvbdGGKSNhsq -DoDKjvbdGZVVAdXb -EPDKjvbdKRZdoFnF -EOcLKvbdEXwlUTtM -DoDKjvbdEztQeLcJ -DoCkKvbdJYUBglQp -DoCkKvbdJTZAsNXl -EObjjvbdvmWAMdEm -EPCjjvbdxZgefYFS -DncKjvbdtTRrxzEc -EOcLKvbdiGjDZWJu -DoCkKvbdYlRctOLm -DncKjvbdDxXlTtUM -EPCjjvbdcyxpYYqC -EOcLKvbdqGDeUWBI -DnbjjvbdnPyxvLZC -DoDLKvbdKefHbApu -DoCkKvbdjblKqHVH -EObkKvbdTfzmkvue -EOcKjvbdZnmiEdzK -EOcKjvbdDxXkstTl -EPDLKvbdBdQAujMf -DoDKjvbdGZVVBDwb -DoDLKvbdEvZPpMie -EPCjjvbdVwJXuceH -DoDLKvbdRjyFtgLT -DoCkKvbdXsLaNTnx -DnbjjvbdDHLfHAzc -DoCkKvbdVBCQrprZ -DoCkKvbdyNsIYShc -EPDKjvbdyXiJbPzL -DoCjjvbdUsltFlWK -EPCkKvbdcyyQYZRC -DnbkKvbdddnqbWbj -EPCkKvbdmuUyjjSG -EObkKvbdZyDinDLr -DnbjjvbdZtIiZESn -EPCjjvbdVBCRTRRy -EOcLKvbdCWzciFPv -EObkKvbdrEFJPnWB -DnbkKvbdqUUHSRkU -EPDLKvbdlqyUyrci -DoCjjvbdIMBznXQk -DoCjjvbdUxgsykOn -EPCjjvbdXsMBMsnx -DncKjvbdjuvmdBxX -EOcLKvbdkIGkeemk -DoCjjvbdjKGIKNYS -EPDLKvbdSLZGVGjs -EOcKjvbdMfcPmQUk -DoCjjvbdrNZjYlIJ -EOcLKvbdkyTSTZHU -EObjjvbdjAQGaQHK -EPDKjvbdMoxRVnHT -EObkKvbdeATpmXif -EObkKvbdFjdsDHmV -DncLKvbdbLLfOmcA -EPCkKvbdunszqLOt -DnbkKvbdnQZxvLZC -DncLKvbdZyDjNblS -DnbkKvbdptTfrSKt -DoDLKvbdzaAOgHCM -EPCjjvbdhbPCeXRR -DnbkKvbdmuVZkKSG -DoCkKvbdziuQQESt -DnbkKvbdhgKDZWKV -DnbjjvbdULuoBWPJ -DncLKvbdWXJXucdg -DoCjjvbdRacdlJYk -DoDLKvbdegjvSNqH -EOcLKvbdnUtzLKRf -EOcKjvbdFxtuBEXb -DoCkKvbdmIcsqUrB -EObjjvbdULvPAvPJ -EOcLKvbdSwkLmzkY -EPCkKvbdSZjITCvA -EPCkKvbdeOdrjtUS -EPCjjvbdIxUBhLpp -EObkKvbdqiAJeMoF -DnbkKvbdhlEcmtcZ -EOcLKvbdFejRnJTq -EOcKjvbdwXMAvBWV -DoDKjvbdmpZyWLZC -DoCjjvbdGLErbhNV -DoDLKvbdmaivwnmu -EOcLKvbdOXoVzcnU -DncLKvbdBhjbLJGK -EPDKjvbdZjTIQGaf -DoCkKvbdgPazwEYI -DncLKvbdGGKRmiUR -EObjjvbdfHkWRmpg -DnbkKvbdXrkaNUPY -EPCkKvbdzQoMhiwA -EOcKjvbdrpWOjDVf -DncKjvbdZtJJZDrn -EPDKjvbdqZOggRDx -DnbjjvbdhgJbyWKV -DoDKjvbdiVZdwRuC -DoDKjvbdIwtCHkpp -DoDKjvbdVAapsRRy -EPDLKvbdwjvcgzzG -DoDLKvbdRyihScWA -DoDLKvbdrRuKmkAm -DnbkKvbdqGDdsuaI -EPCkKvbdAMhYrwZx -DncKjvbdSPsfjGEX -DncKjvbdczYpXxpb -DoDLKvbdkIHMGFmk -EPCjjvbdkClKqHUg -EObkKvbdxVMdqZMO -DoDKjvbdBdQBVjMf -EObkKvbdZjTHpGbG -EPDKjvbdTfzmkvue -EPCkKvbdLAjfmCXq -DoCjjvbdLGGHbApu -EPDKjvbdEzsqEkcJ -DoDKjvbdwygfGYFS -DoDLKvbdhgJbyWKV -EPDLKvbdZshiZETO -EPDLKvbdKWUfDdfi -DnbkKvbdqYoHgQcx -DncKjvbdnGeYMmgZ -EPDKjvbdKCjDRKDY -DoCkKvbdJcKDQibx -EObkKvbdZoNiFFZj -EPCkKvbdUyHsykPO -EOcKjvbdtvNxKQsA -EObjjvbdatafwjtI -DoDLKvbdhzVFkpmf -EObkKvbdMgComQVL -EPCkKvbdSCEEkhxk -DoDLKvbdgFlZnGgA -EObjjvbdZMSETnLm -EObkKvbdtumxKQsA -EObjjvbdZoOIddyj -EOcLKvbdqZOggQcx -EOcLKvbdKfFhBaQu -DncLKvbdzGxlANEw -EObjjvbdehLWRnQg -EObkKvbdEPCjkWbd -EObkKvbdqYnhHRDx -EObkKvbdjvXODaww -DnbjjvbdqTsgSRkU -EOcKjvbdTqQoVVHm -DnbjjvbdQmYBxnUz -DnbjjvbdpyOhGqEY -EOcLKvbdLGGHbAqV -EObkKvbdZirgpHCG -EObkKvbdqYnhGpcx -DncLKvbdrbGNLgKy -EObkKvbdkySrSxgU -EOcLKvbdeAUQlwjG -DncKjvbdkVwNdCYX -DoCjjvbdJvVGDeHJ -EPCkKvbdEuyPpNKF -EOcKjvbdDjHivXjA -DnbjjvbdkNCLydfo -EPCjjvbdZjTHogBf -DoDKjvbdGKeTDINV -DnbkKvbdJXtBglQp -DnbjjvbdFejSOIsq -EOcKjvbdhytelRNf -DnbjjvbdbBVdeopX -DoCkKvbdFjdsDINV -DoDLKvbdjvXNcbXw -DnbkKvbdZdxGzhJC -EPDLKvbdjAPgBQGj -EObjjvbdJXsbHkqQ -EPDKjvbdiVZdwRtb -EObjjvbdGFjSNiTq -EPDKjvbdznpQdbkx -EPCjjvbdemFvgNKL -EPDKjvbdWXIxWEEg -DncLKvbdEObkKvcE -DnbjjvbdLAjfmCYR -EPDLKvbdEXwkstTl -EObjjvbdFfKSNhsq -DncKjvbdygZMANFX -EPCkKvbdYqNFIleR -DoCkKvbdSKyGUgLT -DncKjvbdBdQBVjNG -DnbkKvbdbUagYLTh -EOcKjvbdsPunjDWG -DncLKvbdrEFIonVa -DncKjvbdaSGChTfL -DoCkKvbdcJNKKfXY -EObkKvbdULuoBWOi -DncLKvbdKWVGEEgJ -EPCkKvbdqFdEsuaI -EPDKjvbdAMgySvyx -DncLKvbdiUzEwRuC -EObjjvbdZoNheEzK -DnbkKvbdZLrETnMN -EObjjvbdKWVFcdfi -DoDLKvbdcScLUEJa -EPCkKvbdIwsbIMRQ -EOcKjvbdsBemMHKy -EOcLKvbdzitoodSt -EPDKjvbdrMyjZLhJ -DnbjjvbdaRfCgsfL -DoCkKvbdKQzEnenF -EOcLKvbdUGznLvue -DncLKvbdZxcinCkr -DnbjjvbdEuyPpNKF -DncKjvbdGFirOIsq -EOcLKvbdVqmxBeMD -EOcLKvbdwuMeRZLn -DnbkKvbdBhkBkIej -EOcKjvbdNQXpumfs -EObkKvbdVBCRTRSZ -DoDLKvbdZeYGzhJC -DncLKvbdREDBPqES -DnbjjvbdvBEZSoFI -EPCjjvbdakLeoNcA -EPDLKvbdeFOqbWbj -EPDLKvbdiGicZWJu -EPCkKvbdEKHiuwjA -EPCjjvbdwkWcgzyf -DoDKjvbdmpZyVkZC -EPCkKvbdSZihSbvA -EPDKjvbdelevfmKL -DnbjjvbdeATplwif -DoCjjvbdGAnpxizm -EPDKjvbdTlWPBWOi -EOcKjvbdmSYtzTEJ -DncLKvbdnGeXmNfy -DoDKjvbdTIzJqAAl -EOcKjvbdqdEiPnVa -EOcKjvbdcTCkUEKB -DoCjjvbdEvYopMjF -DoDLKvbdwuMdpyMO -EPDKjvbdEuyQPlie -EOcLKvbdVUMsfMVj -EObjjvbdijFgilxS -DoDKjvbdnPyxujyC -EOcKjvbdTAFIgbPE -DnbkKvbdZxdJnDLr -DncLKvbdqdEiPmua -EOcKjvbdhgJcZVjV -DnbkKvbdRbEFLhxk -DoDKjvbdmaivwoNu -DoCkKvbdZQmFJMdq -DncLKvbdeYZtTqez -EObkKvbdqYoIGpdY -DnbjjvbdEASJMyvw -DoDKjvbdwzHfGYFS -DncKjvbdjvXOECYX -DncLKvbdbBVdepQX -DoDLKvbdrEFIomua -DnbjjvbdYgWdAOsJ -EOcKjvbdkMakydfo -EPCjjvbdegkWSNqH -EPDLKvbdYlSEUNkm -EPDLKvbdzRPMhjXA -DnbjjvbdmSZUyrci -EPDKjvbdiiehKNXr -EPDLKvbdwzIGGXdr -DncKjvbdSLYetfkT -EOcLKvbdURROtuHm -EPDLKvbdEYYLtUUM -EOcLKvbdaSGDIUFk -DnbkKvbdhfibyViu -DncKjvbdeFOqavcK -EPDLKvbdZtIhyETO -EOcKjvbdsPuoKDVf -DoDLKvbdBhkBjiGK -EPDLKvbdnQZyVkYb -DncLKvbdNsTugEtp -EPCjjvbdCDpBWJmG -DoCkKvbdmIdTqVRa -EOcKjvbdptUHRqjt -DnbjjvbdRpTfifDw -DncKjvbdaRebgtFk -EPDLKvbdEARiMyvw -EOcKjvbdyNsHxShc -DoCkKvbdxKwDgzyf -DncKjvbdwuNFQyLn -DncLKvbdegjvSORH -DncLKvbdOStWGdtp -EOcLKvbdcTCkTdKB -DncKjvbdRECaQRES -DoDLKvbdkIHMFemk -EPCkKvbdfjfzcGAE -DncKjvbdZLqdTnLm -EOcKjvbdIMBzmwRL -EOcKjvbdwzHeexFS -EPCjjvbdKVuFdFHJ -EPCjjvbdRXODcLgc -DoDLKvbdlrZVZrdJ -EPDKjvbdjKGIJmYS -EObkKvbdHEKujCJj -DncKjvbdNddTiIjd -DoDKjvbdZjSgpGaf -DoCjjvbdmfeXlnHZ -EPCjjvbdRosfifDw -DoCjjvbdZxcinDLr -DoCjjvbdNeDsiIjd -EPDKjvbdVgxVwgYz -DnbkKvbdqTtGrRjt -DnbkKvbdTqQntuIN -DncKjvbdBvzdJEpW -EPCjjvbdqUUHRrLU -DnbjjvbdqcdhonWB -DncKjvbdHDkWKBjK -DnbkKvbdxVMeQxlO -EObjjvbdkClKpgVH -EOcLKvbdCSaDUGXS -DncLKvbdUQqOttgm -DoCkKvbdZxcjOClS -EPDKjvbdVqmxCFMD -DnbjjvbdqmZixlHi -DnbjjvbdiUydvquC -DoCkKvbdOTTugFVQ -EOcKjvbdUQpoVVIN -DoCkKvbdNHDPlpVL -EOcLKvbdDncLKwCd -EOcLKvbddeOrCXCj -EObjjvbdqvolChyR -EOcLKvbdaofgELzd -DoDLKvbdrpVoKDWG -DncKjvbdaMjasUmH -EObjjvbdliETqUrB -DncLKvbdXsLaMtOx -EObkKvbdrykpTAhO -EPDKjvbdehKvRmpg -EObjjvbdUxhTzKnn -DncLKvbdTfznMXVe -EPDLKvbdqUTfqqkU -DoCjjvbdHELWKCKK -DoDLKvbdwuNFQyMO -DoCjjvbdffLynGgA -EOcLKvbdSLYetfkT -EPDKjvbdtTRryZeD -EPDKjvbdddoRbXDK -DoDKjvbdFVxooljF -DoDLKvbdxsNiNSCH -DoDLKvbdsCGNMGkZ -EOcLKvbdkHfkfFnL -EPCkKvbdqrUjnLAm -DnbkKvbdHELViajK -EOcKjvbdNHDQMouL -EPCkKvbdWWhxVdFH -DnbkKvbdUWMPitBR -DncLKvbdZoOJFFZj -DncKjvbdcIljKewY -DoDLKvbdVUNUGLvK -EObkKvbdNsTufdtp -DnbjjvbdGKdsCgmV -EObkKvbduDCtwWPP -EObjjvbdkMbMZeGo -EPCkKvbdJSyAsNXl -DnbjjvbdmbJwXnmu -EPCkKvbdRjxeuGkT -EObkKvbdaSFcITek -EPDLKvbdGYtuAdYC -DoDKjvbdFeirNiUR -EPCjjvbdhyuGMQmf -EObjjvbdDxYLstUM -EObkKvbdFfKRmhtR -DnbkKvbdyTNhmSCH -EPCjjvbdJSyAsNYM -EPCkKvbdEuxpQMie -DoDLKvbdkClLQgUg -DnbkKvbdssRrxzEc -EPDLKvbdRMwbZNtz -EPCkKvbdssSTYyeD -DoCkKvbdYqMeImEq -EOcLKvbdjuwOECXw -EOcKjvbdOTUWHFUp -EPCjjvbdliDtQtrB -EPDKjvbdZxdJmblS -DoDKjvbdbVCHXkTh -DoDKjvbdpstHSRjt -EOcLKvbdNPwpunGs -DoCkKvbdLAjgNCXq -DoCjjvbdDoDKjvbd -DoCkKvbdZirgpHBf -EPDLKvbdezuxdiTw -DoCkKvbdLrXMyuQz -DncLKvbdqlyjYkgi -DnbkKvbdLrWlzUpz -DoCjjvbdhytfLpnG -EObjjvbdxrmiNSBg -EPDLKvbdqquLNjaN -EObjjvbdiHKCyVjV -DncKjvbdjSziTKiz -EPCjjvbdCflGHAzc -EPCjjvbdZtJJZDrn -EPCjjvbdJKEAKQHE -EPDKjvbdIxTbHlRQ -EOcKjvbdZRMdhmEq -EOcLKvbdmttykJqf -DncLKvbdEzsqFMDJ -EPDKjvbdJuteceGi -EOcKjvbdemFvfmJk -DoCkKvbdkySqsZGt -EOcLKvbdlrZVZsDi -EOcLKvbdEXxLstTl -DnbkKvbdkNBlZeHP -DncLKvbdauCHYKsh -EPCkKvbdhuZeXSVC -EPCjjvbdOTTufdtp -DoDKjvbdDoCkKwCd -DoDLKvbdOAIrsirA -EPCjjvbdlAmPNALA -EOcLKvbdiBoCdwQq -DoCkKvbdnCJwYOnV -EOcLKvbdqwQLbhxq -DncLKvbdGYuVBEYC -EPCjjvbdcyyQXxqC -EPDKjvbdrEEiPmvB -DnbkKvbdJbibqJbx -DncLKvbdiGjCxuiu -EObjjvbdjKGIJmXr -EPCjjvbdFkEsDIMu -EPDKjvbdCWzchePv -EObjjvbdEObjjwDE -EPCkKvbdQdDApRDr -DoDLKvbdbAvEfQPw -DoDLKvbddtAUATNW -DnbjjvbdUxhUZkOn -DnbjjvbdwNWANEEm -EPCjjvbduDCuWuoP -DnbjjvbdjAQHApHK -DncLKvbdJzpFxEAN -DncKjvbdwtldpxlO -EObjjvbdBraCtGWr -EPDKjvbdJmADzGuB -DoDLKvbdRadEkiZL -DoCkKvbdAMhZTXZx -DoCjjvbdqGDeUVaI -DoCjjvbdVvhxWDdg -EOcKjvbdSBceMIyL -DnbkKvbdRkYfUfjs -EOcLKvbdFWYpQMjF -DoDLKvbdhlFENuCy -EObkKvbdiCObeWpq -DnbkKvbdHELWJaij -EObkKvbdCTAcTfWr -EPDKjvbdbrcLTdJa -DoDLKvbdDncKkXDE -DoCkKvbdmSYtzSdJ -EOcLKvbdVZHszLPO -DnbjjvbdhkdcmuCy -DnbkKvbdLrXNZuQz -EPDKjvbdZnmiFEzK -EPCkKvbdlrZVZsEJ -DnbjjvbdqmZixkhJ -DoDLKvbdcTCjsdKB -DoCkKvbdcyyPxYqC -DoDKjvbdssRrxydc -DoDKjvbdvPTzpjnt -EObjjvbdZLqctOMN -DoDLKvbdRNXbYnUz -DncKjvbdJYUBglRQ -EObkKvbdkIGlGFnL -DoDLKvbdiUzEwSUb -EPDKjvbdeEnrCWbj -DoDLKvbdRbDdkhxk -EObjjvbdYzcFqjWZ -EOcLKvbdjggLfFnL -DncLKvbdgQBzwEXh -DoCjjvbdQlxByNtz -DnbkKvbdoznDjwoA -DnbkKvbdVgwuxHYz -DoDLKvbdaaVdepQX -DoDKjvbdLZRKSztf -EPDKjvbdbUbHXkUI -EOcLKvbdjhGkfFmk -EObkKvbdeEoSBvcK -DncKjvbdUtMtGMVj -EPDLKvbdJTZAsMxM -DnbkKvbdOEdUJJKd -DoDKjvbdZHXEAPSi -EObkKvbduaDyTPFI -DnbjjvbdqAiFAWhE -EObjjvbdelevgNKL -DnbjjvbdTAEhgbPE -DoDKjvbdnPzZVkZC -DoDKjvbdQwNdDLhD -DnbjjvbdnBjWwoNu -EObkKvbdfMewGljL -DncKjvbdrpVnjCuf -EPDLKvbdLGFgbBRV -EObkKvbdkCkkRHUg -EObkKvbdTlVoAuoJ -EPDLKvbdrMyjZMHi -EOcLKvbdWHwuxHYz -EOcKjvbdLrXNZtpz -EObjjvbdbQHHDkzd -EOcLKvbdfILWRnRH -EPCjjvbdyfyMAMeX -DncLKvbdNHCpNQVL -EPCjjvbdFkEsDHlu -DncKjvbdGGJqmhtR -DnbkKvbdvAcxrndh -DoCjjvbdqGDeTvBI -DoCjjvbdJvUfDdgJ -DoCjjvbdUVlPisaR -DoCkKvbdqTsgSRkU -EObjjvbdjblKpftg -EObkKvbdtcDVXWPP -DnbkKvbdfHkVqnRH -DncLKvbdmoyxvLZC -EObjjvbdkHfkfFnL -EPDKjvbdwNWAMcdm -EPCjjvbdJpzFOfNe -DncKjvbdmbJvxOnV -DncKjvbdTqQnuUgm -EOcLKvbdTpqOuVHm -DoCjjvbdYlSETmkm -DoDKjvbdjEkGuPAO -DoCkKvbdwygefXdr -EObkKvbdrXPkcJYq -DoCjjvbdxUleQyMO -EOcLKvbdBsAcTfXS -EPDLKvbdLBLGlbXq -EObjjvbdmbJvwnnV -DnbjjvbdbVCGwjsh -DnbkKvbdxUmEpyMO -EPCkKvbdYSlBNTnx -DoDKjvbdeOeSkUTr -DncLKvbdqmZixlHi -EPCkKvbdNHCpNQVL -DoCkKvbdDigjWXjA -EObjjvbdrDeJQNvB -EOcLKvbdJuuGDeHJ -DoCkKvbdddnrCXCj -DoDKjvbdqTtGqrKt -DoDKjvbdeOeTKstS -EObjjvbdySmiNRbH -DnbjjvbdZshiYdTO -EObjjvbdnCKXXnmu -EPDKjvbdqiAKFMne -DoDKjvbdNeEUIiKd -DnbjjvbdzitpPdTU -EPCkKvbdzaAOffal -EOcKjvbdZtIiZDrn -DoCjjvbdtSrTYyeD -DoDLKvbdFVxopNJe -DoDLKvbdJJdAJpHE -DoDLKvbdHDjuiaij -EObkKvbdUWMQKUAq -EPDKjvbdTpqOuVIN -EOcLKvbdqvpMChyR -DoCkKvbdVviXudEg -DoCkKvbdGLErbgmV -EPCkKvbdZirhPfbG -DoCkKvbdWXJYVceH -DnbjjvbdhkeEOUcZ -DncKjvbdSPtHJedX -DncKjvbdFfKRnIsq -DncKjvbdWWhxVdEg -DoCkKvbdOStWHEuQ -DoDLKvbdEuyQPmKF -DncKjvbdrpVoKDWG -DoCjjvbdKVtfEEfi -DoCjjvbdWXIwudEg -EPDKjvbdSCDeMIyL -EPDKjvbdDoDKkXCd -DoCkKvbdJpzEnenF -EPDKjvbdaaWEfPow -DoCjjvbdVwJXucdg -EPCjjvbdauCHYKtI -EOcLKvbdNeDshhkE -DncLKvbdNGcQMpVL -EOcLKvbdIryBSmXl -DnbkKvbdTAFJICPE -EOcLKvbdrMzKYlHi -EOcKjvbdznopeDMY -EOcLKvbdMRvmZuQz -DncKjvbdeFOqbXCj -DncLKvbdbhlijfWx -EOcKjvbdqdEhpOWB -DoDLKvbdUWMQJsaR -DoDLKvbdptUGqrLU -EObjjvbdaSGChUFk -EPCjjvbdYTMAltOx -DncKjvbdEPCkLWbd -EOcKjvbdKCjDRKCx -EPDKjvbdZyDjNcMS -DncLKvbdFfKRnJUR -EPDKjvbdrNZiyLhJ -EOcKjvbdZeXfzgiC -EOcKjvbdbUbGwkTh -EPDLKvbdHfgZxwxH -DncLKvbdrovOjCuf -DnbjjvbdfNGWflik -DnbkKvbdZoNiFEyj -EPCjjvbddneTKtUS -EObjjvbdRbDdlIxk -EOcKjvbdKfFgbBRV -EPDKjvbdFyUuBDxC -EPCkKvbdiUzFXRtb -EPCjjvbdrJAJeNPF -DncLKvbdVAbRSqSZ -EObjjvbdaNKbTVMg -DoCkKvbdlhctQtqa -DoDKjvbdZshiZDrn -EPDLKvbdFkFSbglu -EPCjjvbdHffyxwxH -DncKjvbdTvLojTaR -DnbkKvbdauCHXkUI -DoDKjvbdGdKuiajK -EOcKjvbdkClKqHVH -EPDLKvbdnUtykKSG -DnbkKvbdBiKbKhej -DoDLKvbdHffzZXwg -EPCjjvbdbrbkTcjB -DoCkKvbdVwJYWDdg -DncLKvbdJJdAJogE -EPCkKvbdJvUfDdfi -DoDKjvbdZeYGzgiC -EObjjvbdZyEJnDMS -EOcLKvbdmSZVZsEJ -EPCkKvbdDnbjjvbd -EPCkKvbdJvVGDeGi -DoCjjvbdTXkLmzkY -DnbkKvbdLqwNZuQz -DncKjvbdZtIiYcsO -DoDKjvbdLYqKSztf -DnbkKvbdULuoBVni -EObkKvbdiBnbeWqR -EObjjvbdfILWRmqH -DncKjvbdezvYdhsw -DnbjjvbdJvUfEEfi -EPCkKvbdRpUHKGDw -EObkKvbdZGwEAPTJ -EOcLKvbdcTCkUEKB -EObjjvbdGAoQxizm -DnbjjvbdNwoVzcmt -DncLKvbdJbicRKDY -DnbkKvbdGZVVAcxC -EPCkKvbdRadFMJYk -DnbjjvbdxsNiNRag -DnbjjvbdiBncFXRR -EPCjjvbdySmiNRbH -DoDKjvbdeATqMxKG -DnbjjvbdtSrSyZdc -EOcKjvbdwtldpyLn -EPDKjvbdqwPkbiYq -EPDLKvbdzitpPcsU -DoDKjvbdDjHiuwjA -EPCkKvbdfMewGmKL -DncKjvbdlrYtyrci -EPCjjvbdZQldiMdq -EPDKjvbdJbjDQjCx -DncKjvbdqTsgRrKt -EPCkKvbdEvZQPljF -DoCkKvbdUsltGMWK -EOcLKvbdEJgivXjA -DnbkKvbdePFTLTtS -EPDKjvbdEYYLstTl -EPDKjvbdMfcPmPuL -DoDKjvbdBsAcTevr -EPDLKvbdwtleRZMO -EObjjvbdRotHJfDw -EOcKjvbdJuuFdFHJ -DnbjjvbdZoOIeFZj -DoDLKvbdsZlQSaHn -EPCjjvbddoFTLTtS -DncKjvbdbVBgXjsh -EPCkKvbdaMkBrtlg -EPDKjvbddiiqutzn -EObkKvbdiZuFkpnG -EPCkKvbdIxTaglRQ -EOcKjvbduaEYrndh -DnbjjvbdzQoMiJwA -DoCkKvbdsCGNMHKy -EObjjvbdMoxQunHT -DnbkKvbdxwiJbPzL -EOcLKvbdJbibpjCx -DncKjvbdIxTbHkpp -DoCkKvbdwuMeQxlO -EOcKjvbdKeehCBRV -EPCkKvbdZxdKNblS -EPCjjvbdLFegbBQu -DoCkKvbduLwwBUBX -DoDKjvbdjlbMZeHP -DoDLKvbdjAPfaPfj -EObjjvbdqGEFTvBI -EObjjvbdeAURNXif -EObjjvbdxmrgxTJD -EPCkKvbdqGDeUWAh -DncKjvbdqTsfqrKt -EObjjvbdjEjftoAO -EOcKjvbdNrtWHFUp -EObkKvbduCcUvvOo -EPCkKvbdvwMAvBWV -DncLKvbdtkwwBUBX -DoCjjvbdVZHsyjnn -EPDKjvbdQccBQQdS -DnbkKvbdjgfkeemk -EPDLKvbdFyVVBDxC -DncLKvbdrNZiyMIJ -EObjjvbdHfgZxwwg -DoDKjvbdqceIomvB -EPCkKvbdNGcPlouL -DoCkKvbdCIkBkIej -DoCjjvbdjKFhJmYS -EObkKvbdBsBDUGWr -EObkKvbdnQZxvKyC -DnbjjvbdhzVFkqOG -EPCjjvbdGLFScHlu -DoCjjvbdtlXwAtBX -DoDLKvbdUtMtFkvK -DoCkKvbdBvzchdov -DncLKvbdlZSrTZHU -EOcKjvbdZnnJEdyj -DncKjvbdYpleJMdq -EPDKjvbdiMEcmtcZ -EPCjjvbdfelZmgHA -DnbkKvbdLhalRYAS -DncKjvbdehLWRnRH -DnbjjvbdeKJqvUzn -EPCjjvbdqqtkOLBN -EOcLKvbdfRaWzlDP -DncLKvbdhtzFWquC -EObkKvbdJvVFdFGi -EObkKvbdMfcPlotk -DoCjjvbdtcCuWvPP -DnbjjvbdwtmFRZMO -DoDKjvbdsPvPKCvG -EPCjjvbdmfdwmOHZ -EPDLKvbdMgDPlouL -DoDKjvbdnGdwlnHZ -DoCkKvbdVwJXudFH -EObjjvbdQdCaQQcr -DnbkKvbdYSkaNUPY -DoCjjvbdULvPAuni -EPCjjvbdSZihScWA -DoCkKvbdBiLCKhej -DnbkKvbdhXZAzzAJ -EOcLKvbdQYmAGsRj -EOcLKvbdZtJIyDrn -DnbkKvbdNsTufduQ -EOcKjvbdEXxMUTsl -DoDLKvbdKyRJrzuG -DoDKjvbdrWpLbhxq -DnbjjvbdrDeIonWB -EPDKjvbdHELViaij -DoDLKvbdBdQBWJmG -DncLKvbdRjyGUfkT -EPDLKvbdYNqAYUut -EPDKjvbdRXNdClID -EPCkKvbdNwnuzdOU -EOcLKvbdjmBkydfo -DoCjjvbdrpWPKDVf -EPCkKvbdZyEKNbkr -EOcKjvbdQZNAHTRj -EOcKjvbdwtmEpxkn -DncLKvbdLhbMRYAS -DoCjjvbdsrrTZZdc -DncKjvbdxmrgxShc -EPCkKvbdmozZVkZC -EPCjjvbdbsDLTcia -DoDKjvbdGKeScIMu -EPCjjvbdrEFIpOWB -EOcKjvbdmpZxukZC -DoCkKvbdTkunaVni -DoCjjvbddneSkUUS -EPCjjvbdTlVoBWPJ -DoDKjvbdxsNhmSCH -EPCkKvbdVviXvDdg -DnbjjvbdwzHfFwdr -EPDKjvbdfMewHMjL -DoCjjvbdbsDKtDjB -EPDLKvbdUQpoVVIN -EObkKvbdrEFJPmua -EObkKvbdhlEcnUcZ -DoDKjvbdZRMeIleR -DnbjjvbdmajXYOnV -DoDKjvbdaRfDHtGL -DoCjjvbdbhljKewY -DoDLKvbdDwwksssl -DncLKvbdUMWOaVoJ -DncKjvbdWWiYWDdg -DoCjjvbdyXiJbQZk -DnbkKvbdHDkVibKK -EPCjjvbdtSrSxzEc -EOcLKvbdaSGChUFk -DnbkKvbdYSlBNUOx -EPDLKvbdJTZBSmYM -DoCjjvbdTkvOaWOi -DncKjvbdMowpvNfs -EPDKjvbdeEnqavcK -EOcLKvbdiifIJlxS -DnbkKvbdqceIpNua -EPDKjvbdrNZixkhJ -DncKjvbdiHKDZViu -DnbkKvbdrDdiPnWB -DncLKvbdLGFhCAqV -DoCjjvbdwuMdqYlO -EPCjjvbdePFTKssr -EObjjvbdVBCQrpqy -EObjjvbdbrcKsdKB -DnbkKvbdBvzciEpW -DoCjjvbdIHGyyXxH -EObjjvbdrzLpTAhO -EOcKjvbdemGWgNJk -EObkKvbdVZHtZjnn -EOcKjvbdiCObeXRR -EPCkKvbduoTzpkPU -DoCkKvbdrNZjYkgi -DnbkKvbdTAEhgand -EOcKjvbdhuZdwRuC -DoDLKvbdWWiXuceH -EPDKjvbdZoOIddzK -DncLKvbdVAbRSprZ -DnbjjvbdhgKDZWJu -DoCkKvbdVZITykOn -DoCkKvbdiGibyWKV -EPDLKvbdwyhGGYFS -DoDKjvbdiHKCxvJu -EPDLKvbdhyuGLpnG -EPDKjvbdOAJStKSA -EOcKjvbdzitpPdSt -DoCkKvbdzROlhjXA -DoDLKvbdtTSSxzEc -DoDKjvbdzoQRFCkx -DnbkKvbdxnSgxShc -DnbjjvbdiBoDFWqR -DoCjjvbdnBjWwoNu -DncLKvbdVYhTzKnn -DncLKvbdkIGkefNk -DnbkKvbdlqxuZsEJ -EOcLKvbdACrYJzIp -EPDKjvbdmaiwYOnV -EOcKjvbdYkrEUNlN -DoCjjvbdVUNTfLuj -DoDLKvbdfHkWSOQg -DnbkKvbdBraCsfXS -EOcKjvbdMJBkpxAS -DoDKjvbdcyyQXyQb -EObkKvbdeEnrCXDK -EObkKvbdFejSNiTq -DoCjjvbdEYXkstTl -EPDKjvbdyYIjBpZk -DncKjvbdiHJcZWKV -DncKjvbdQdDAoqDr -EObkKvbduDDUvvOo -EPCkKvbdzGyMANEw -DoDKjvbdQvnECkgc -DncKjvbdVviXudEg -DoDLKvbdQZNAHTSK -EPDKjvbdkCkjqHUg -EObjjvbdwyhFeweS -DoCjjvbdxwiJbQZk -EOcLKvbdEPDLLXDE -DncLKvbdVrNwbFLc -DoCkKvbdjAPgBPgK -EOcKjvbdpstGqqjt -EPDLKvbdHDkVjCKK -DncKjvbdirzhrjiz -DnbjjvbdxrnJNSBg -EPCkKvbdraelkgLZ -DncLKvbdptTgRqjt -DoCkKvbdIsYaTMxM -DoCjjvbdMpXqVnGs -DoDLKvbdUVkoitBR -DoCkKvbdjmCLyeHP -DoCjjvbdiVZeWquC -DoCjjvbdVUMtFlWK -EPDLKvbdxKvdHzzG -DoDKjvbdiMEdNuCy -EPDKjvbdwzIFfYEr -EObjjvbdJXsagkpp -EPCkKvbdxrmhmSBg -DoDKjvbdlqxuZsDi -EPDKjvbdsQVoJcVf -DnbjjvbdEYYLstUM -DncLKvbdkHgLfGNk -EPCjjvbdbsDKtDjB -DnbjjvbdJcKDQibx -DoCjjvbdyzdnSIIh -DnbkKvbdrpWOjCuf -EObjjvbdbAudeopX -DnbkKvbdYkqctNlN -EPDLKvbdfHkWRnRH -EPDLKvbdXmqAYUut -DncKjvbdFyVVBEXb -DnbkKvbdrDdhpNua -DncKjvbdeAURNXjG -DoCkKvbdOTUVgEuQ -EPCjjvbddwyssrFz -DoCjjvbdMpYRWNfs -DoCkKvbdjuvnDaww -DnbkKvbdVhXvXgYz -EObjjvbdTulQKTaR -EObjjvbdOAJTUJrA -EPDLKvbdsZkosBIO -DoCkKvbdhgJbxvKV -EPCjjvbdnBivxOnV -DncKjvbdxrnIlrCH -DncLKvbdzaAPHGbM -EPCkKvbduMXvaUBX -DnbkKvbdSBceMJZL -EObjjvbdJpzEoGOF -DnbkKvbdWexytAPT -DnbkKvbdkVwNcaxX -EOcLKvbdEYYLsstM -DoCkKvbdRosfiedX -EOcKjvbdwuMdpyMO -EObjjvbdUsmUFlWK -EObjjvbdjuwOECXw -DncKjvbdqlzJxkgi -DoCkKvbdiHJbxujV -EPDLKvbdakMFoNcA -EOcLKvbdmIcsqUqa -EPCkKvbdeKKSVtzn -EPCkKvbdvBEZTOeI -DncKjvbdpstHSRjt -EOcKjvbdKVuGEEfi -DoDLKvbdZQldiNFR -EPCjjvbdxnTIYShc -EOcKjvbdtunXjQsA -EPDKjvbdjcLkRHVH -DncKjvbdDoDLLXCd -DnbjjvbdZyEJnDMS -DoDLKvbdFkFTCgmV -EOcKjvbdhkddOUby -EPDLKvbdNeEUJIkE -DnbkKvbdyzeNqghh -EPDKjvbdFVxopMjF -EOcKjvbdGdLVibKK -DncKjvbdBdQAvJlf -DoDKjvbdbiNKLFwY -EPCkKvbdnGeYNNgZ -EPDLKvbdEYXlUTsl -DncLKvbdOEcsiIjd -DncKjvbdKaLHMbYR -DncKjvbdyTOIlrCH -EPCkKvbdMpXpumgT -EPCjjvbdtbbtwVno -DoDKjvbdrRtkOLAm -EObjjvbdbLLfPNcA -DncKjvbdjmCLydgP -DnbkKvbdTkuoBVoJ -DnbkKvbdSCDdlJYk -EObkKvbdCEPaVjNG -DoDLKvbdFaOpxizm -EPCjjvbdfMevgMjL -DoCkKvbdYzcGRjVy -DnbjjvbdKRZdoGNe -EPDLKvbdZisIQHCG -EOcLKvbdZMSEUOMN -DoCjjvbdiGibxuiu -EPDLKvbdZQmFJMeR -DoCkKvbdsBemLfjy -DncLKvbdzoPqEcMY -DncLKvbdMoxRWOGs -EOcLKvbdFeirOJUR -DoDLKvbdpyOgfpdY -DncLKvbdyzeOSIJI -DoDLKvbdRkZFuHKs -DnbkKvbdxVNEqZLn -DoCjjvbdMgDPmPuL -EPDKjvbdZQmEhmFR -DncKjvbdBraDUFwS -DoCkKvbdqqtjmkAm -EPDLKvbdLZQirzuG -DoDLKvbdlYsRryGt -EOcKjvbdKaLHNBxR -EOcKjvbdTqQoUthN -EObkKvbdhbObeXRR -EPDKjvbdJutfDeGi -DoDLKvbdRkZFuGkT -EOcKjvbdrbGNLgKy -DnbjjvbdmpZyWKyC -EPDKjvbdHELVjBij -EPCjjvbduDDUvuoP -EOcKjvbdrDeIonWB -DoCjjvbdnPyyWLZC -EPDKjvbddndrjtUS -EObjjvbdjuvnDbYX -EPDLKvbdCIkBjhfK -EObkKvbdZjTHogCG -EOcKjvbdjJehKNYS -DnbkKvbdSxLMNzkY -DoDLKvbdKDKDRJcY -EPCkKvbdmpZxvKxb -DnbjjvbdssSTYyeD -EObjjvbdHDkVibJj -DnbkKvbdSLZFtgLT -DoCjjvbdxnTIXriD -DnbkKvbdcSbjsdJa -DoCkKvbduoTzpjoU -DoCjjvbdXsLaNUOx -DoDLKvbdcScKtEJa -DnbkKvbdfpBzwDwh -EPDKjvbdjlakyeGo -DnbjjvbdYzcFqivZ -DncLKvbdCIkBjiGK -EPDLKvbdxZhFfYFS -EObjjvbdrEFJQNvB -DoDLKvbdjAPgBQHK -EOcLKvbdkDLjqHUg -DoCkKvbdiUzFWqtb -DoCkKvbdKVtfDdfi -DoDLKvbdwkXEHzyf -EObjjvbdqcdhpOWB -EPCkKvbdeEnrBvbj -DoCkKvbdCTAbsewS -DnbjjvbdNHCpMouL -DoDKjvbdSQUGiecw -DoDLKvbdelevfmKL -DoCkKvbdySnImSCH -DncKjvbdANIZSvzY -DncKjvbdrJAJeNPF -EPCjjvbdqTtGqqjt -EObjjvbdaRfDHsfL -EPCkKvbdrJAJeMne -EPDKjvbdiGjDYvJu -DoDKjvbdMgCpMpVL -DncKjvbdZjTIQHCG -EOcLKvbdJYTbILqQ -DoCkKvbdzoPqEbkx -EPDLKvbdvlvANDeN -DncLKvbdatafwjsh -DncLKvbdJuuFcdgJ -DncLKvbdwXMAvBWV -DoDLKvbdaMjbStmH -DoCkKvbdeOdsLTtS -DoDKjvbdbLLeoNcA -EPDKjvbdJKEAJpGd -DnbjjvbdZnnIeEyj -EOcLKvbdunszpjnt -EObkKvbdmoyyWKxb -EObkKvbdILazmvpk -EPDKjvbdQlwbYmtz -EPCjjvbderAvzkcP -EObkKvbdegjvSORH -EOcKjvbdsrqsYydc -EOcKjvbdfIKvSORH -DnbkKvbdFjdsDIMu -EPDKjvbdpstHRqjt -EOcLKvbdWRmxCElD -EOcLKvbdkHflGFnL -DoCjjvbdZjTHofbG -EObjjvbdeEoSBwCj -EPCkKvbdJSyBTNXl -DnbkKvbdUaCRTQqy -EPDKjvbdSLZFtfkT -DncKjvbdyNrgwsJD -DoDKjvbdezuxdiUX -DoDLKvbdACrXiyhp -DoDLKvbdxwiJaoyk -EOcKjvbdUxhTzLOn -DnbjjvbdnHFYNNfy -EOcLKvbdhanbeWqR -DoDKjvbdzHYlAMdw -DoCjjvbdKyRJrzuG -DncLKvbdliETpuRa -EObkKvbdczYpXyRC -DoDKjvbdFfKRnIsq -EPDKjvbdVAbQsRSZ -DncKjvbdezvZEiUX -DoCkKvbdZisHofbG -EPDKjvbdjKFgilxS -EOcLKvbduVmxKQsA -DnbjjvbdhuZeWrUb -EObkKvbdGYuUaDxC -DoDLKvbdaaWFGPpX -DnbkKvbdUQpoVUhN -EPCjjvbdZxdJmcMS -DncKjvbdhbPCdwRR -EObkKvbdZRMeJNFR -DnbjjvbdTlVoBWOi -DoCkKvbdatbHYKtI -EObkKvbdiHJbxvJu -DncKjvbdsQWOjCvG -DncLKvbdRosfjGEX -EObkKvbdREDBQRDr -EOcLKvbdeEnqawCj -EPDLKvbdGZVUaEXb -EPDLKvbdIryArmXl -EObjjvbdiiehJlwr -DoCkKvbdMJCMRYAS -DnbkKvbdlrYtzTDi -DoDLKvbdnGeXlmfy -DoCkKvbdSCDeMJZL -EObkKvbdLFegaaRV -DoDKjvbdGGKRmhsq -EObkKvbdiLdcnVDZ -DnbjjvbdGBOqZJzm -DnbjjvbdhfjCxvKV -EPCjjvbdlBNPNALA -EOcKjvbdtbbuXWPP -DncLKvbdEPCjjwDE -DoDLKvbdLqwNZtpz -EPDLKvbdbVCGwkUI -DncLKvbdZyDimcLr -DncLKvbdfILWSNpg -DoDKjvbdFVyPpNJe -DncKjvbdqiAJeMoF -EOcKjvbdqrVLOLAm -DoCjjvbdehKuqnQg -DoDLKvbdGLFTCglu -DoCjjvbdXrlBMtPY -DncKjvbdlYrrTYgU -EPCkKvbdWSNxCFMD -DncKjvbdUVkoitAq -DncLKvbdfHjvSORH -DoCkKvbdCEPaWKMf -EObkKvbdmbJvxPOV -EPDKjvbdwzHefXeS -EOcKjvbdvvlAvAuu -DncLKvbdpxngfqDx -DnbjjvbdIwtCIMQp -DncKjvbdHDjvKBjK -EOcKjvbdjmCLzFGo -DnbkKvbdZMRdTnMN -EObjjvbdEOcLLWbd -DoDLKvbdkNBlZdfo -EPCjjvbdemGXHNKL -EOcLKvbdkxrqryGt -EOcKjvbdsPvPKDWG -EOcKjvbdXsMAlsoY -DnbkKvbdmIcspuSB -DoCjjvbdUaBpsRRy -EOcLKvbdSPsfiedX -EOcKjvbdSCEEkiYk -DncKjvbdWXJXudEg -DncLKvbdRyigrbvA -DoDLKvbdUMVoAvOi -DnbjjvbdZtIhxcsO -EOcLKvbdJXsbHkpp -DnbkKvbdZtIhyETO -DncLKvbdHlBzmvpk -EObkKvbdzHZMAMeX -EPDKjvbdKCjCpjDY -EOcKjvbdjblKqHUg -DoDKjvbdGGJrNiUR -DoDLKvbdrEFIomvB -EPCkKvbdrovPKDVf -DoDKjvbdpxnhGpdY -EPDKjvbdemGWgNKL -EPDLKvbdTlWPAuoJ -EOcLKvbdhuZeWqtb -DnbkKvbdhyuGLpnG -EObjjvbdSBcdlJZL -DnbkKvbdeEnqbWcK -DnbjjvbdJKEAJofd -EObjjvbdbQGfckzd -EPCjjvbdRkYeuHLT -DoDLKvbdXrlBMtOx -EObkKvbdznoqFCkx -EPDLKvbdjggLfFnL -EPDKjvbdhuZdwSVC -EPCkKvbdeEoRbXDK -EPCkKvbdKaKgNCYR -DoDLKvbdWWhxWDdg -EPCjjvbdqUTfqqjt -EOcKjvbdcSbkTdJa -DncKjvbdauCHXjtI -DoCkKvbdQlwbZNtz -DnbjjvbdqvolCiYq -EOcLKvbdePFSjstS -EOcKjvbdhgKDZWKV -EObkKvbdCgLfHAzc -DncKjvbdnUuZkKSG -DnbjjvbdlhctRUrB -DoDKjvbdpyPHgREY -DoCkKvbdjJegimXr -EPDKjvbdfHkVrORH -EPDKjvbdyTOIlqbH -EPDKjvbdjKFhKNYS -EPDKjvbdFWZPpMie -EPCjjvbdIwsahLpp -EObkKvbdKfGIBaQu -DncKjvbdGFirOJTq -DnbjjvbdpedFUWBI -EPCkKvbdNeDshiKd -EObjjvbdBiLBjhej -EObjjvbdCJKbLJFj -DncKjvbdvwMAuaWV -DnbjjvbdZRMdhleR -DncKjvbdhgKCyViu -DoCkKvbdhficZWKV -DnbjjvbdwkWdHzyf -DncLKvbdVBBqSprZ -EOcLKvbdUsmTelVj -EOcLKvbdFxuVBEYC -DoDKjvbdKaLHMbYR -EPCkKvbdGdKuiaij -EPDKjvbdfIKvRnQg -DncKjvbdfekzNfgA -DoCkKvbdJbicRJbx -EOcKjvbdIwsagkpp -DncKjvbdOEctIiKd -DncKjvbdOTUVfduQ -EPCkKvbdFWZPomKF -EObjjvbdezvZFJUX -DoCjjvbdtSrTYzFD -DoCkKvbdbVCHYLTh -EPDLKvbdZMRdUOLm -DoDLKvbdNwoVzdNt -EPDLKvbdFaPRZJzm -DoCjjvbdxZhGFweS -EPCjjvbdZQmFImFR -DnbjjvbdsQWOibvG -DoCjjvbdSBdFMIxk -EPCkKvbdEObkKvcE -DoDKjvbdqFcdsvAh -EOcKjvbdezuyEhsw -DnbkKvbdVqnXaeMD -EObjjvbdnGeXlmgZ -DncLKvbdCIkBkIfK -EPDLKvbdpecdtWAh -EPDKjvbdsQVnjCvG -DoDKjvbdkDMLQfuH -EObjjvbdAMhZTWzY -EPCjjvbdiCObdvqR -DoDKjvbdUWLoisaR -DncLKvbdSPtHKGDw -EObjjvbdaNLBrtmH -EPDKjvbdUyHszKoO -DoDKjvbdQwNccLhD -EPDLKvbdnVUzKjRf -DoCkKvbdRyigrcWA -EOcLKvbdbiNKLGXY -DncKjvbdlhctRVSB -DoCkKvbdNPxRWNfs -EObjjvbdANHxsXZx -DnbjjvbdNrsvHEuQ -EPCjjvbdmbJvxPNu -EOcKjvbdJvVGEFGi -EPDKjvbdUWLoitAq -DoCkKvbdkDMKpfuH -EOcLKvbdfjfzbfAE -EOcLKvbdczZQYZRC -DoDLKvbdQwNcblHc -EObkKvbdOTTugEtp -DncKjvbdbUagYLTh -EPCjjvbdfNGWfmKL -EObjjvbdiVZdvrUb -DncLKvbdZyDinDMS -EPCkKvbdmaiwYOmu -EOcLKvbdqUUHSRkU -DncLKvbdDncKjvbd -DoCkKvbdVqmxCElD -EPCkKvbdaRfDIUFk -EOcKjvbdjKGIJlxS -DncLKvbdkxrrTZHU -DncKjvbdypnmIjXA -DoDLKvbdJpyeOfOF -DoDLKvbdwXMBVaVu -DoDKjvbdKfFhCAqV -DoCjjvbdIxTahLqQ -EOcLKvbdADSYKZiQ -DoCkKvbdMowpunHT -EOcKjvbdgKfzbfAE -EPDKjvbdhkddOVDZ -EPDLKvbdemFwHMik -EPCjjvbdUVlQKTaR -DncLKvbdRWnECkhD -DnbjjvbdkWXODbYX -DoCjjvbdZeYGzghb -DoCkKvbdSKyFtfkT -DoDLKvbdBhkCLJFj -DncKjvbdlhdTqVRa -EPDKjvbdqqtjmjaN -DoDLKvbdZjTHofbG -EPDLKvbdJmADzHVB -DoDLKvbdSBceLhyL -EObjjvbdqwPlCiYq -DncLKvbdYORAXtvU -EPDLKvbdZnnJEdyj -DoCjjvbduWNxKQsA -EPDKjvbdWSNxCElD -DoCkKvbdRjyFtgLT -DoCkKvbdeOeSkUUS -EOcKjvbdDihKVxKA -EObjjvbdffLymgHA -DoDLKvbdcScKsdKB -EPDLKvbdlYsSSyGt -DnbjjvbdGKeTDINV -DoDLKvbdCTBCtGXS -EObjjvbdEASIlyvw -EPDLKvbdfMfWfmKL -DoCkKvbdpstGqrLU -DncLKvbdtlXwAsaX -DoDKjvbdNrsvHEuQ -EObjjvbdCTBDTfXS -DoDKjvbdkMalZeHP -DoDLKvbdQccBPqDr -DnbkKvbdYqNEiNEq -DnbkKvbdvBDyTOeI -DnbjjvbdLAkGmBxR -EObkKvbdLiBlRYAS -EPCjjvbdTukpKUBR -EObkKvbdhuZeWqtb -DoDLKvbdZyEJmbkr -DnbjjvbdxrmiNSCH -EPCjjvbdKWVFdFHJ -EPCjjvbdRWmcblID -EPCkKvbdsQVoJcVf -EPCkKvbdGcjuibJj -DoCjjvbdJuteceHJ -DnbjjvbdLLAhWAJy -DncKjvbdULunaWOi -EOcLKvbdHlBznXQk -DoDKjvbdvBDxroEh -DoDKjvbdzaAPHGbM -DoDLKvbdUyITyjoO -DnbkKvbduaDxroFI -EObkKvbdAMhZSvzY -EObjjvbdDoDKkWbd -EObkKvbdGKdrbhNV -EPCkKvbdmgFXlnGy -EOcKjvbdzdzOzdzQ -EPCkKvbdKkBHvAJy -EOcKjvbdqAiFAWhE -DoCjjvbdQvmdClID -DncKjvbdMtsSKmAX -EObjjvbdziuPpETU -DoDKjvbddZyQYZQb -EPDLKvbdauBgXkTh -DnbkKvbdnCJvwnmu -DoCjjvbdxUmFQyMO -DncKjvbdXGYzUAPT -EPDLKvbdOAJTUKSA -DncKjvbddZyPwxqC -EOcKjvbdqlzKYlIJ -DnbjjvbdkVvnDaww -DnbjjvbdZdxGzhIb -DnbkKvbdDwxLtTsl -EObkKvbdGKdrcHmV -DncKjvbdTAFJHbOd -DoDKjvbdEObkKvcE -DnbkKvbdaNLCSuNH -DoDLKvbdDxYLtTtM -EObjjvbdVZIUZjnn -DoCkKvbdNsUVfduQ -EOcLKvbdGGKRmhtR -EPDKjvbdbKlFnmcA -DncKjvbdvvlAvBWV -DoCjjvbdliEUQtrB -DnbjjvbdjgfkfGNk -EPDKjvbdlYsSTYft -DoDLKvbdbKlGOnDA -EPDKjvbdjAPfaPfj -DnbkKvbdzGyMAMeX -DoCjjvbdZnmhddzK -EPCkKvbdIMBzmwQk -EObkKvbdjEkHVPAO -EPCkKvbdQccBPpdS -EPCjjvbdhgKCxvJu -DncLKvbdVgxVxHYz -EOcKjvbdxVNFQxkn -DoDKjvbdbLMGPNcA -DncLKvbdGckWJajK -DnbkKvbdrMyiyLgi -EOcLKvbdKefICApu -DoCjjvbdqFdEtWBI -EPCkKvbdYSlBNUPY -DoCjjvbdIwsbILpp -EPCjjvbdmgFYMnHZ -EObjjvbdQvmccMID -DncLKvbdURQntthN -EOcLKvbddxZtUSFz -EPCkKvbdhtzFWqtb -EOcKjvbdVBCRSpqy -DncKjvbdtbbtvvOo -EPCkKvbdczZQYZQb -DnbjjvbdQwODcLgc -EPDLKvbdtunXipsA -DncLKvbdBhjajhej -DoDKjvbdNrtVfduQ -EOcLKvbdKWUfDdfi -EObjjvbdpstHRrLU -DnbjjvbdznpRFClY -EPCjjvbdfNFvgMik -DoCjjvbdUsltGLvK -DnbjjvbdlqyVZsDi -DoCkKvbdNPwqWOHT -EOcLKvbdakLeoNcA -DoDKjvbdsCGNMGkZ -EPDKjvbdaRfDHsfL -DoDKjvbdZtIhyDrn -EPDLKvbdOStVgFUp -EPCkKvbdeATplxKG -DncLKvbdySmhlrBg -DoDKjvbdnCKWwoOV -DnbjjvbdDncKjvcE -EOcLKvbdwzIGGXdr -EObjjvbdmIdTqVSB -DnbjjvbdUGznLwVe -DncLKvbdTkvOaWPJ -DncKjvbdyOSgwsIc -DncKjvbdjmCLzFGo -DoDLKvbdpssfqqkU -EPDKjvbdmtuZjirG -EOcKjvbdOFEThhkE -DoDKjvbdIMBznWqL -EPCkKvbdJvVFcdfi -EPDKjvbdnBivxOmu -EObkKvbdTvLojTaR -DoCkKvbdMRwNZtpz -EObjjvbdEARhlzXX -DnbjjvbdcScLTcjB -DncKjvbdxmrhXrhc -DoDKjvbdEvZQQNKF -DncLKvbdGLErcHmV -DoDLKvbdFkFTChMu -DoCkKvbdOFETiIkE -EPDKjvbdnVUzLKRf -EPDKjvbdmuUzKjSG -EPCjjvbdwuNFQxkn -DncLKvbdeATpmXjG -EObjjvbdxUmEpxkn -EPDKjvbdcSbkTcjB -EPCjjvbdmbKXXoNu -EPDKjvbdSQUHKFdX -DoDKjvbdCTAbsewS -EOcLKvbdVwJYVdFH -DoDKjvbdZtIiYcsO -EPDKjvbdhkeENtcZ -EObkKvbdGBOpyJzm -EPCkKvbdRMxCYmtz -DoCjjvbdzjVPocsU -DoDLKvbdrDdiPnWB -EPCjjvbdFjdsDIMu -DoDLKvbdSLZGUgLT -EPDLKvbdKefHaaQu -DoDKjvbdKCibpicY -EOcLKvbdijGIJmYS -EObjjvbdelfWgNKL -DnbkKvbdbhmKKfWx -DoDKjvbdSQUHKGEX -EPCkKvbdnGdxMmgZ -DncLKvbdJJdAKPgE -EPDLKvbdmRyUyrdJ -EOcLKvbdhzUfLqOG -DoDKjvbdLAjgMaxR -DoDKjvbdRosfjGEX -EObkKvbdpssfqqjt -DnbkKvbdjAQHAofj -DncLKvbdidkHUoAO -DoCkKvbdCIjbLIej -DncLKvbdelfWfmKL -DoDLKvbdxUleQxkn -EPDLKvbdEvZQPljF -DncLKvbdJbjDQjCx -DncLKvbdyOTIXriD -DoDKjvbdTulPjUAq -DnbjjvbdJSyAsNYM -EOcLKvbdbBVeGQQX -EPCjjvbdbKkenmcA -EPCjjvbdiGjDZWJu -DncLKvbdcSbjsdJa -EObkKvbdZtJIyDsO -DoDLKvbdrafMkgLZ -DoCjjvbdiMFDmuDZ -DnbkKvbdnUtyjirG -EPDKjvbdfNFvflik -DoDLKvbdrWokcJZR -DncKjvbdWWhxWDdg -EPDLKvbdNeDtJJKd -EOcLKvbdqlzKYkhJ -DncKjvbdSQUHKGDw -DoCkKvbdkHflFfOL -EPCkKvbdRXNdDMID -DncLKvbdSLZFtfkT -EOcLKvbdZQldiMeR -DnbjjvbdSBdElJYk -DncLKvbdwWlBVaWV -DoCjjvbdhzUfLqOG -DoDLKvbdmJEUQuSB -DnbjjvbdULvPBVoJ -EPDLKvbdYkrDtOMN -EPDKjvbdHEKujBij -EObjjvbdJuuGDdfi -EObjjvbdzaAOgGbM -DncLKvbdkClLRHUg -EObkKvbdYTMAmToY -EObjjvbdxVMeQyLn -DoDKjvbdrEFJQNua -DncKjvbdYSlBNTnx -DnbjjvbdrSUkOLAm -EOcLKvbdrylQTBIO -DnbjjvbdrouoKDVf -DoDLKvbdwWkaVaVu -DoCkKvbdZQmFIleR -EPCjjvbdiLeENtby -DoCjjvbdrDeJQNua -EObjjvbdIGfzYxXg -DoCkKvbdySmiMqag -EOcKjvbdbVBgYLTh -DoDKjvbdLFehCApu -EPCkKvbdCDpAvJmG -EObkKvbdZLrDtOLm -EPCkKvbdZnnJEdyj -EPCjjvbdZjSgpGbG -EOcKjvbdWSOYBdkc -EPDKjvbdwtleQyLn -DnbkKvbdmJDtQuSB -EObkKvbdkWXODbXw -DncKjvbdezuyEiTw -EObjjvbdnBjWwnmu -EPDKjvbdZxdJmcMS -EPDKjvbdrbGNMHLZ -EObkKvbdEYXlTssl -DnbjjvbdyTOJNRag -DnbkKvbdGZVVAdYC -EPCjjvbdTYLMNzkY -DncLKvbdJcJcRKDY -EOcLKvbdYpmEhldq -DoCkKvbdjKFgjNYS -EPDLKvbdJbibqKCx -EPCjjvbdyTNiNSCH -DoDLKvbdGGKRmhsq -EPDLKvbdLAkGmCYR -EPDLKvbdCEPaWKMf -DoCkKvbdZsiIyDsO -EPCjjvbdjbkkRGuH -DnbkKvbdqYoHgREY -DoDLKvbdZMRctNkm -EObjjvbdDjIJvYKA -DncKjvbdVqnXbEkc -EPCkKvbdiHKCyViu -EOcKjvbdkHflGFmk -DoDKjvbdOFDsiIjd -EOcLKvbdVrOYCEkc -EPCjjvbdhtydvrUb -DoDLKvbdrNZjYlHi -EPDKjvbdVwIxWDeH -EObkKvbdhyuFlRNf -EPDLKvbdSKyFuHKs -DoCkKvbdBhjajiFj -DoDKjvbdhanbeWpq -DncKjvbdGGJqnJTq -EPDKjvbdZtJIyETO -EOcLKvbdANIZSvzY -DnbkKvbdptUHSSLU -DoDLKvbdRDcBPpdS -DoDKjvbdBcpAujNG -DnbjjvbdaaVdeopX -DnbjjvbdhtydvrUb -DoCkKvbdkWXNcaxX -DncLKvbdrNZjYkgi -EPCjjvbdBiKajiGK -EObkKvbdwkWcgzzG -EPCkKvbdRDcApQcr -DncLKvbdfekzNgHA -DoDKjvbdiBoCdwRR -EOcLKvbdIBlZdzAD -DnbkKvbdZLqcsnMN -DoDKjvbdatbGwkUI -EObjjvbdmgFXlmfy -EPDLKvbdxUmEqYkn -EPDLKvbdauBfxKsh -EObjjvbdsPvOjDVf -DnbkKvbdkVwNdBww -EPCkKvbdzaAPGfbM -EOcLKvbdRotGjGDw -EPCkKvbdqceJPmua -EPDLKvbdZyDinCkr -EObkKvbdCDoaWKMf -EOcKjvbdjmCLzEgP -EPDKjvbdHlBznXRL -DncKjvbdeOeTLTtS -EPCjjvbdGZUuBEXb -DnbkKvbdqTtHRqjt -EOcLKvbdFyUuAdXb -EPDLKvbdEARiMzWw -EOcKjvbdFeirNiUR -DoCkKvbdzjUoocsU -EOcLKvbdEztQdlCi -DncLKvbdKCjCpibx -EPCjjvbdxZhGFxFS -EObjjvbdwWkaWAvV -DnbkKvbdaaWFFoow -EOcKjvbdBsBDUGXS -EPDLKvbdmIdUQuRa -DncKjvbdVAbRTRRy -DoCkKvbdHffyxxYH -EObjjvbdDGkfHAzc -DoCkKvbdiCPDFXRR -EPCkKvbdVrNwbEkc -EPCkKvbdiGjDYvKV -DnbkKvbdIMBzmvpk -EPCkKvbdKxqJrztf -DncLKvbdmIctQuSB -EOcKjvbdaSFbhUGL -DoCjjvbdmbKWwnmu -DoCkKvbdiUyeWrVC -DncKjvbdGGKRmhsq -DoCjjvbdehLVqnQg -DncLKvbdTkunaVoJ -DnbjjvbdGZUtaDxC -EPCjjvbdtSrSyZeD -DoDLKvbdjbkkQfuH -EOcLKvbdOFDtJJLE -DnbjjvbdBdQAvJlf -DoCkKvbduDDVWvPP -EOcKjvbdZtJIyDsO -DncLKvbdQccBPpdS -DncLKvbdiUzEvquC -EPCjjvbdvvkaWAuu -DoDLKvbdZoOIeEzK -DnbkKvbdkCkkRGuH -EOcKjvbdRkZGVHLT -EObkKvbdtcCuXVno -EPCjjvbdMpYRVnGs -DoDKjvbdFfJrNiTq -DnbkKvbdZnmiFFZj -EPDLKvbdbhmKKfWx -DoDLKvbdDjHivXjA -DoDLKvbdiLeDnVDZ -EOcLKvbdUQqOtthN -EPDKjvbdZHXEAOri -EObkKvbdvAdYrndh -EObkKvbdQlwaxnUz -DoCjjvbdQwOEDLhD -EPDLKvbdqrVKnLBN -EObjjvbdwtmFQxkn -EPDLKvbdTfznMWvF -DnbkKvbdaMjasVNH -EPCjjvbdcyyQXxpb -DncKjvbdMfcQMpUk -DnbjjvbdZnmheEzK -DncLKvbdbrbkUDia -DncLKvbdiCOcFXRR -DoCjjvbdZxcimblS -EPDLKvbdRkYfVHKs -DncKjvbdDoDKjvbd -EOcKjvbdGAnpxizm -EOcKjvbdYpldhldq -DnbkKvbdQwOEDMID -DnbjjvbdcyxoxYpb -DoCjjvbdakMGOnDA -EPCjjvbdLAkGlawq -DncKjvbdJJdAKPfd -EOcLKvbdxrnImSBg -DoDLKvbdNddUJIjd -DncLKvbdfIKvRmpg -DoCjjvbdiZuGLqOG -EOcLKvbdeAURMwif -DncLKvbdiCPCeWpq -DoCjjvbdGcjvKBij -EPDKjvbdRDcBQQdS -EPCjjvbdUtMtGLvK -EPDKjvbdyXhjBoyk -DoDKjvbdqZOgfpcx -EObjjvbdYTMAmUPY -DoDLKvbdiCObeXQq -DncKjvbdmJDtRUqa -EObkKvbdSCEElIyL -EObkKvbdNGbpMouL -DoCkKvbdEzsqElCi -EObjjvbdOStWHFVQ -EPCjjvbdjmBlZdfo -EPDKjvbdiUyeWqtb -DnbjjvbdYSkaNUPY -DoCkKvbdTAEhhCPE -DoCjjvbdmttyjjSG -EOcKjvbdrMyjZMIJ -EPDKjvbdUsmTelVj -EPCkKvbdNsTugFUp -DnbkKvbdWRnYBeMD -DncLKvbdHgGzZXxH -EPDLKvbdZLrDsmlN -DncLKvbdcSbkUDjB -EObkKvbdziuPpDrt -DoCjjvbdZyEJmblS -EObkKvbdjggMFenL -DnbkKvbdmfeXmNfy -EObkKvbdiBncFXRR -EPDKjvbdADSXiyiQ -EObjjvbdLFfHbApu -EOcLKvbdRMwbZOUz -EPCkKvbdFVxoomJe -EOcLKvbdZnmiEdyj -DncLKvbdULunaVoJ -DncLKvbddndsKtTr -EPDKjvbdEztQeMDJ -EObkKvbdcScKscjB -EOcKjvbdFkErbglu -DoCkKvbdsBfMlGkZ -EPDLKvbdCSaCsfWr -EPCjjvbdVAapsRSZ -EOcLKvbdgFkzNfgA -EPDLKvbdjhHLefNk -EObjjvbdyNsIXsIc -DoCjjvbdqcdiPmvB -EOcKjvbdeXyssrFz -DnbjjvbdEOcKjwCd -DoDLKvbdGKdrbgmV -DncLKvbdKQzEoFnF -DoCkKvbdqvpMDJZR -EObkKvbdZyEKODMS -DncKjvbdBhjbKiFj -DncKjvbdfHkVrNqH -DncLKvbdeXyssrFz -EObjjvbdxmsHwriD -EPDKjvbdRyigsCvA -DoCkKvbdZoNiEeZj -EPCkKvbdhzUfLpnG -DncKjvbdVUNUFkuj -EPDKjvbdRXNdDMID -EObkKvbdlBMnmALA -EPDKjvbdffMZnHHA -EPCjjvbdEARhlyvw -EOcKjvbdVTltGLvK -EOcKjvbdJqZdoFme -EObkKvbdyOTHwsIc -DoDLKvbdCfkegAzc -DnbkKvbdZMRdTmkm -DnbkKvbdhkeEOUcZ -DoDKjvbdZnnIeEyj -DnbjjvbdrafNMGkZ -DoDLKvbdZtJIyESn -EOcLKvbdaRecITek -EPCjjvbdZoOJEdyj -DoDLKvbdxsNhlrBg -EPCjjvbdZxdKNcMS -DoCjjvbdCWzdJEov -EObkKvbdTppnttgm -DnbkKvbdjmCLydfo -EObkKvbdBsAbsewS -EObjjvbdjgflFemk -DnbjjvbdpstGrSKt -EOcLKvbdOTTvHFUp -DoCkKvbdczYowyRC -EObkKvbdTvMPjUAq -EOcKjvbdezvYeJUX -EPCkKvbdzHYlANEw -EPCkKvbdqcdiQOVa -DoCkKvbdsrrSxyeD -EObkKvbdOTUWGeUp -DoDKjvbdbUbHYLTh -DoCkKvbdHakydzAD -DoDKjvbddjJrWUzn -EPDKjvbdmaiwYPOV -DoCjjvbdtbcUwVno -EPDLKvbdrMyjYkgi -DoCjjvbdUQpoUtgm -DncKjvbdddoSBwDK -EPCkKvbdatbGwkTh -DncKjvbdmbJvxPNu -DnbjjvbdwzHeewdr -DncLKvbdzitpPcrt -EOcLKvbdrMyjYkgi -EOcLKvbdrEFIomvB -DoDLKvbdiifIJlxS -EOcLKvbdtvOYKQsA -DoCkKvbdxsNhlqag -DnbjjvbdyTOIlqag -DncLKvbdIGgZyYXg -EOcKjvbdUsmUGMWK -EObkKvbdhzUfMQnG -EPDLKvbdZxdJnCkr -DncKjvbdKWUeceGi -EOcLKvbdmbJvwnnV -DoDLKvbdDncKjvbd -EPCkKvbdZoNheEyj -DncLKvbdVqnXadlD -DncLKvbdtunXipsA -DncLKvbdjAPgBPfj -DoCkKvbdyqPNJKXA -DncKjvbdrpWPJbuf -EOcKjvbdqvpMDJYq -DnbjjvbdcTDLUDia -DnbkKvbdiGjCxvKV -EPDKjvbdauBfxKtI -DoCkKvbdLFfHbApu -DoDLKvbdHffyyXwg -EOcKjvbdIxUCHkqQ -DoDKjvbdzQoMiJwA -DoDKjvbdyYIjBoyk -EObkKvbdxnSgwriD -EObkKvbdIMBznWpk -EPDKjvbdYlSDtOMN -DoDKjvbdijGHjMxS -EOcKjvbdYkqcsnMN -DoCjjvbdmaiwYOmu -EPDKjvbdHELWKBjK -DoCjjvbdwtmFRYlO -EOcLKvbdFeiqnJTq -EPDKjvbdiBncEvqR -DoCkKvbdJXsbILpp -EObjjvbdULunaVni -DncKjvbdDwxLstUM -DoDKjvbdrWpMChyR -EObkKvbdYzcFqivZ -DncKjvbdEzspdlDJ -EPDKjvbdfMfXGmKL -DoCkKvbdCTAbtGWr -DoDLKvbdRkZGUgKs -EPCkKvbdFWZQQMie -DnbjjvbdxVNEqYkn -DoCjjvbdeFPRbWbj -EPCkKvbdZshhyESn -EObjjvbdqrVKnLAm -EPCjjvbdptUGqqjt -EOcLKvbdrEEhpOVa -DncKjvbdzQoNIjXA -DncLKvbdmgFXlnGy -DoDKjvbdZjShQHBf -DnbjjvbdjKGHjNXr -DoDLKvbdqFcdsvAh -EPCkKvbdOEdUIiLE -EPDLKvbdNeEUJJKd -EPCjjvbdzHZMANEw -DnbkKvbdqlzJyMIJ -DnbjjvbdelfXHMjL -EPCkKvbdANHyTWzY -DnbjjvbdREDBPpcr -DncLKvbdQmYCZOUz -EOcKjvbduoTzpjoU -DoCjjvbdqrUjmkBN -DnbjjvbdyfxlANFX -EOcLKvbdJmADygUa -EPDLKvbdyNrhYTIc -DoCjjvbdCTAbtFwS -DncLKvbdSwkLmzkY -DnbjjvbdjhHMFfNk -DoCkKvbdZeXfzhIb -DnbjjvbdbrbjtEJa -DoCkKvbdxrmhmRbH -DoDLKvbdrXQLbhxq -EObjjvbdTulQKUBR -EPCkKvbdMpYQumgT -DncKjvbderBWzlDP -DoCjjvbdiGjCxvJu -DoCjjvbdlZSqsZGt -EOcLKvbdZisIPfaf -DnbkKvbdHEKvKBij -DncLKvbdjSziSjiz -EPDKjvbdCEQBWJmG -EObkKvbdGGKRmiUR -EPDKjvbdMuTRkNAX -DnbjjvbdrXQLbiYq -EPCjjvbdOTUWGduQ -EPCjjvbdnBjXXoNu -DoDLKvbdcarmSAUN -DoCjjvbdNPwqWOGs -EObkKvbdUslsekvK -DnbjjvbdzaAPGfbM -DoCkKvbdGdLVjCJj -DoDLKvbdRjyFtfkT -DoDLKvbdGLFTDHlu -DnbkKvbdGFirOJUR -EPDLKvbddoFTLUUS -EObkKvbdkxrrTZGt -DncKjvbdxrnJMqag -EOcLKvbdCDpBWJmG -DoCjjvbdlqyUysDi -EPDKjvbdTfzmlXVe -DncKjvbdEuxpQMie -EOcKjvbdbLLfPNcA -DncKjvbdVgxWXgYz -DoDKjvbdrbFmLgKy -DoCjjvbdzaAPGfbM -DncLKvbdYSlAlsoY -DoDLKvbdZyEJnClS -EPDLKvbdEvYopMjF -DncKjvbdmtuZjiqf -DoCjjvbdCJKbLIfK -EOcLKvbdcIljLFvx -EObkKvbdrJAKFNPF -DoDKjvbdBiKbKhfK -EPDKjvbdWIYWYGxz -DoCkKvbdjAQGaQHK -DnbjjvbdjblLQftg -DncLKvbdbhlikGXY -EPDKjvbdZLrDsmkm -DoDLKvbdVTlsfMWK -DoCjjvbdliDsptqa -DnbkKvbdjuvmcbXw -DoCjjvbdbVCHXjtI -DoCkKvbdQvmdClID -DnbjjvbdLAkHNCXq -EPDKjvbdZtIhyETO -DnbkKvbdYkqdTmlN -DoDKjvbdMtrrKmAX -DncLKvbdJXtCIMQp -EPCkKvbdlhdTqUqa -EObjjvbdnHFYNNfy -EPDKjvbdxrmhlrBg -DncLKvbdiLeDmtcZ -DncKjvbdNrsufdtp -EObkKvbdlhcsptqa -EObjjvbdNeETiIkE -DnbkKvbdxsNhmRbH -DnbkKvbdADRxKZhp -DnbjjvbdTqROuUgm -EOcKjvbdpxoIGqDx -EOcLKvbdqBIeAWhE -DnbjjvbdCIkBjiFj -DncLKvbdTlWPBWPJ -DoCjjvbdEKHjVxKA -DnbkKvbdZRNFImEq -EObkKvbdJbicQjCx -DoDKjvbdNsTufeVQ -EObjjvbdDxYMUTsl -DoDLKvbdaSFcITfL -EPDKjvbdcTDLTcia -DoCkKvbdlhdTpuRa -EObjjvbdCJKbKiFj -DncKjvbdqAiFAWhE -EPDKjvbdUslsfLuj -EObjjvbdWWiXuceH -EPCjjvbdOEcshiLE -EPDLKvbdEJhJuxKA -DoCkKvbdKyRKSzuG -DncKjvbdHffzZXxH -EOcLKvbdSLZGUfkT -EObkKvbdHgHZxwxH -DnbkKvbdcSbjtEJa -EPDKjvbdZGwEAPTJ -DoDLKvbdeAURNXif -EPDLKvbdMpYQunGs -EObkKvbdNeDshiKd -DoDLKvbdzoQQdbkx -EPDKjvbdWHxWXfxz -EPCjjvbdCEPaVjNG -DoCjjvbdbhlikFvx -EOcLKvbdBvzdIdpW -DoCkKvbdNPwqWNfs -EPCjjvbdbhlijfWx -DncKjvbdqwQLbiZR -EObjjvbdkClLRGuH -DncKjvbdNHDQNQVL -DncKjvbdhkdcmuDZ -EOcKjvbdKWVFdFHJ -EPDLKvbdYTMBMtOx -EObkKvbdSKxfVGjs -DncKjvbdZoOJEdzK -EObjjvbdMpXqVmgT -EPDKjvbdhaoDFXRR -EPCjjvbdrpWPJcVf -EOcKjvbdczYpYZRC -DoDLKvbdLLAhWAJy -DoDKjvbdEObkLXDE -EPDKjvbdnVUykKRf -DnbkKvbdBvzdIdov -EOcKjvbdGFirOJUR -DoCjjvbdGGJrNiTq -EPDKjvbdqAheAWgd -DncKjvbdxmsIXriD -EObkKvbdVAbQsRRy -EPDKjvbdRXODbkhD -EObjjvbdVZHtZjoO -EOcKjvbdffMZmfgA -EOcLKvbdbiMjLGXY -DoDKjvbdUQpoVUhN -EPCkKvbdhfjCxuiu -DoCkKvbdziuPocsU -EObjjvbdBhkBkJFj -DnbjjvbdeAURNXif -DncKjvbdQlxByOUz -EPDLKvbdRbEEkhxk -EPCjjvbdrbFlkgKy -DoCjjvbdaSFbhUGL -EOcKjvbdsCGMkfkZ -DoCkKvbdJbicRJcY -DnbkKvbdqlzKYlHi -DoCjjvbdZyDimblS -EOcLKvbdsrqsZZdc -DoDKjvbdjggMGGNk -DnbkKvbdADSXiyiQ -DoCkKvbdehKurORH -EOcLKvbdrylPsAgn -EPCjjvbdRWmdClID -EPCjjvbdbsCjsdKB -EObjjvbdUQpoVVHm -DnbkKvbdiCObeXQq -DncLKvbdUQpoVUhN -DoCkKvbdKCicRKDY -DncKjvbdjlakzFGo -DnbkKvbdMgDQMpVL -DoDLKvbdWSNxBeMD -DnbkKvbdvBEZTOdh -EPCjjvbdsQWPKCuf -EObjjvbdZeYGzghb -DnbkKvbdxsNhmSCH -EPDLKvbdkySrTZGt -EObkKvbdrDdiQNvB -DncLKvbdHDjuiajK -DoCjjvbdURROtuIN -DncKjvbdKyRJrztf -EObjjvbdIGfyyYXg -DncLKvbdXsMBMtPY -EPCkKvbdaaVdfPpX -DncKjvbdiHJbyWJu -EOcKjvbdSKxfVGjs -DoDKjvbdxZgfFwdr -DnbkKvbdRNYCZNtz -EPCkKvbdCDoaWKNG -DoDKjvbdDjHjWYKA -EPDKjvbdyNsHwsIc -DoDKjvbdUtNTfLuj -DoDLKvbdGGKRnJTq -EPCkKvbdsBemMGjy -EPDKjvbdSQUHKFcw -DnbjjvbdkClKpfuH -EObjjvbdRyjHrcWA -EOcLKvbdSPsfjGEX -DoCjjvbdGckWKBij -EPCkKvbdGdKujBij -DnbjjvbdcJMijewY -EPDKjvbdkIGkefOL -EPCkKvbdrSVLNkBN -DnbkKvbdrpWPJbvG -DoDLKvbdZirgpHBf -EPCkKvbdHDjujBij -EPCkKvbdvBDySoEh -DoDLKvbdePEsKssr -DoDLKvbdZRMdhldq -EObjjvbdUQqPUtgm -DoDLKvbdMSXNZtpz -EObjjvbdVYhTzKnn -EOcKjvbdrNZixlIJ -DoDLKvbdTpqPVVIN -DnbkKvbdkCkjqHVH -DnbkKvbdkWWmcaxX -EOcLKvbdJSyBSlwl -EObkKvbdmRxtzTEJ -DncKjvbdptTgRqjt -EOcLKvbdqYoHfqEY -DoDKjvbdGZUtaDxC -EOcKjvbdKQydoGNe -EPDLKvbdssSTZZeD -EObjjvbdhkddOUcZ -DoDKjvbdGdKvJbKK -EOcKjvbdULvPAuoJ -DoCkKvbdrEFJPnWB -DnbjjvbdfNGWfmJk -EPCkKvbdkWXODaww -EOcKjvbdMtrrKmAX -DnbjjvbdEuyPpMie -EObjjvbdrSVKmkAm -EPDLKvbdhanbdvqR -DoCkKvbdkWWmdBww -DnbjjvbdxUleQyLn -EOcLKvbdpyPHfpdY -DncKjvbdpfDeTvBI -DoCkKvbdnVVZjirG -DnbkKvbdzjVPocsU -EPDLKvbdmfdwlmfy -DnbkKvbdSKyFuGjs -EObkKvbdVAaprpqy -EPCjjvbdUaBqTRRy -EObkKvbdZoNhddzK -DncKjvbdrNZiyLhJ -DncKjvbdaMkBruNH -DoDKjvbdZyDjNcMS -EPCjjvbdZjTIQHCG -EObkKvbdjJegilwr -EPDKjvbdHffzYxYH -EPDKjvbdaSGChTfL -DoDLKvbdcJMjLGWx -EOcLKvbdtlXvaTaX -DoCjjvbdGYuVAcxC -EOcLKvbdUsltGLvK -EPDLKvbdRNXayOUz -DoDLKvbdRadFLiYk -EOcKjvbdCTAbsfXS -EPCjjvbdGZVVAdYC -EPDLKvbdypnliJwA -EPCjjvbdSBdFLhxk -EOcLKvbdGLFSbhNV -DncKjvbdTppnuUhN -EObkKvbdezvYdiTw -DoCkKvbdIsZBSlxM -DncLKvbdRNYBxmtz -EPCkKvbdeFOqawCj -DnbjjvbdtSrTYzEc -DncKjvbdkDLkQgUg -DnbjjvbdEARhlzXX -EOcKjvbdWRmxBeMD -DoDLKvbdzQnliKXA -EPDKjvbdpfDdtWAh -DncLKvbdMgCpMpVL -DnbkKvbdiZtfLpmf -EPDLKvbdzQoNJJwA -EPCkKvbdaNKasUmH -EPDLKvbdRbDeLhyL -DoDLKvbdKRZeOeme -EOcKjvbdZxdJmcMS -DncLKvbdeKKSVtzn -EPDLKvbdRjxeuHLT -EObkKvbdNGcPmPtk -DoCkKvbdtcDVWvPP -EPCjjvbdcTDKscjB -DoDLKvbdbrcLTcia -EObjjvbdvlvAMcdm -EObjjvbdFxuVBDwb -EPCjjvbdhkdcmtby -EOcKjvbdRotHKFcw -DncLKvbdelfWgNKL -EObkKvbduCbuXVno -EPDKjvbdEYXlUUUM -EOcKjvbdbUbHXjsh -EOcLKvbdmgEwmOHZ -DoCjjvbdEXxLsssl -EPDLKvbdZLqdTmlN -EOcLKvbdbsCkUEJa -EOcKjvbdqvpLbhxq -EOcKjvbdfIKvRmpg -DncLKvbdGBOpxizm -DoDLKvbdnBiwXnmu -DoCjjvbdKWVFceGi -EOcLKvbdRbEEkiZL -EObjjvbdffMZmgHA -DoCjjvbdUMWPBWPJ -EObkKvbdkClKpftg -DoDLKvbdBhkBkIej -DoDKjvbdhgJbyWJu -DoCjjvbdEASIlzXX -EPDKjvbdGZUtaDxC -DnbjjvbdlYsRryHU -EOcKjvbdhgKCyWJu -EPCkKvbdsQWOibuf -DoCjjvbdRMwbYmtz -DoDKjvbdZxdJnClS -EPCjjvbdJTZBTNYM -DnbjjvbdiLeEOUby -EOcLKvbdjEjgUoAO -EPCkKvbdzitopDrt -EPCjjvbdtcCuWvPP -DncKjvbdZMRdUNlN -DoDLKvbddZxoxZRC -DoDKjvbdFVxoomKF -DoCkKvbdSLYeuGkT -DncLKvbdYSlBNTnx -EObkKvbdeuzwoizs -EPDKjvbdUQpoUuIN -DoDKjvbdmpZxujyC -EPCjjvbdDGlFgAzc -EPCjjvbdkCkkRGuH -DnbkKvbdvlvAMdFN -DoDLKvbdatbHXkUI -EPCjjvbdFWYoolie -DnbjjvbdrEFJPnWB -EObkKvbdpyOggQcx -EOcKjvbdqwQMChxq -EOcKjvbdqrVLNkAm -EOcKjvbderBWzlCo -DoDLKvbdRWmdDMHc -EOcLKvbdZoNhdeZj -DnbkKvbdunszpkPU -EPDKjvbdGAnpxizm -DoCkKvbdKCjCqKCx -EOcKjvbdZshhyDrn -DoDKjvbdddoSBvcK -DncKjvbdcScKtEJa -EOcLKvbdZjShQGbG -DncLKvbdDncKkXDE -EPDLKvbdrzMQTBHn -EPDLKvbdIxUBglRQ -EPDKjvbdcyxpXxpb -EObkKvbdMSXMytpz -EObkKvbdijGIKMwr -EObkKvbdzdzOzdyp -DnbjjvbdeATplwjG -DnbkKvbdcIlikFwY -DoDLKvbdsPunicVf -EPDKjvbdmozYvLZC -DoCkKvbdkyTSSxgU -DncLKvbdRWnDcLhD -DncKjvbdHELWJaij -DncKjvbdZQmFIleR -EOcKjvbdiCOcEvpq -EOcKjvbdbrbkUEKB -EOcLKvbdOFEThhjd -EObkKvbdbBVdepPw -EObkKvbdUxhTzKnn -EObkKvbdzoPpdblY -EOcLKvbdrbFllHLZ -DoDKjvbdjggMGGOL -DncLKvbdqceJQNua -DoDKjvbdiHJbxvJu -DoDLKvbdySnImSBg -EPCkKvbdtTRrxzFD -EOcLKvbdkVvnEBxX -DnbjjvbdtcCtvvOo -EPCkKvbdyzdmrHiI -DoDKjvbdFjdrbhMu -DoDLKvbdZyEKODLr -DoDKjvbdURQnuVHm -EPCkKvbdZyDimcMS -EOcLKvbdNQXpunHT -DnbjjvbdQlxCYmtz -DnbjjvbdCDoaVimG -EObjjvbdsPvOibvG -DnbjjvbdgGLynGgA -DncLKvbdCDoaWJmG -EObkKvbdnCKXXnnV -EOcLKvbdUxgtZkPO -DnbkKvbdiMFDmuDZ -DncKjvbdiGicZWKV -DoDKjvbdcScKtEJa -DoDKjvbdpssgRqkU -DncKjvbdsBfNLgKy -DoDLKvbdGYttaDwb -DncKjvbdjvWnDaxX -EPCjjvbdhgJcYuiu -DnbjjvbdxUldpxlO -DoDKjvbdUaCRSqSZ -DnbkKvbdNwoVzdNt -DoCkKvbdZnnIeEzK -EPDKjvbdNeEUJIkE -DnbjjvbdJbjDQjDY -EPDLKvbdKVuFceGi -EPCkKvbdKkBIWAJy -EObjjvbdrafMlHLZ -EOcLKvbdZLqctNkm -EObjjvbdMgComPtk -DncKjvbdjhHMGGOL -DnbkKvbdJYUCIMQp -DoCjjvbdhlEcnVCy -DoDLKvbdxsOJNSBg -EOcLKvbdRMxBxmtz -EOcLKvbdHDjujCJj -EObjjvbdZRMdhmFR -EPDLKvbdUQpoUthN -EPCkKvbdvlvANEFN -EObkKvbdSCEEkhxk -EPCjjvbdLBKfmCXq -EPDKjvbdOStVfduQ -EPCjjvbdGcjvJbKK -DnbjjvbdVBBprpqy -DoCjjvbdirziTLJz -DncLKvbdFWYpQNKF -DoDLKvbdjKGHjNYS -DncKjvbdZnmiEdzK -DoDKjvbdySmiMrBg -DncLKvbdeAURNYKG -EPDLKvbdemGWflik -DoDKjvbdaMkBrtmH -DoDKjvbdIxUBglRQ -DoDKjvbdOEcshhjd -EPCjjvbdpxnhGqDx -DncKjvbdYSlBNToY -DnbjjvbdGGKSOJUR -EOcLKvbdZjTHpGbG -EPCjjvbdIHGzZYXg -DncKjvbddndsLTsr -DnbjjvbdqAheAXIE -EOcKjvbdVhXvXfxz -DncKjvbdFyVVAdYC -DnbjjvbdJvVFceGi -EPCkKvbdoznDjwoA -EPDKjvbdvPTzqLPU -EObjjvbdiifIKMwr -EOcLKvbdlZTSSxgU -EObjjvbdQvnECkgc -DncLKvbdjgfkfGNk -DnbkKvbdCDoaWJmG -DnbkKvbdxnTHwriD -DncKjvbdoAKzshDn -DoDKjvbdvAdZSndh -DnbjjvbdRpTgKFcw -EOcLKvbdiiegilwr -EOcKjvbdGdLVjBjK -EObkKvbdGFjRmhtR -EPCjjvbdZsiJYdTO -EPCjjvbdJJdAKPfd -EPDLKvbdKfGHbBRV -DncLKvbdjhHMFenL -EObkKvbdbLMFnnDA -DoCjjvbdUWMPisaR -DnbkKvbdZjTHpHCG -EObkKvbdbsCkTcjB -EPCkKvbdSLYfUfkT -DoDKjvbdZeYGzhIb -DncKjvbdrovPJcVf -EPCjjvbdePFSjtTr -DncKjvbdJbibqJbx -EPDLKvbdDxYMUUTl -DnbkKvbdZHXEAPSi -DncKjvbdVTmUFlVj -EPDKjvbdzoQREcLx -EPDKjvbdKfFhCAqV -DoDKjvbduDDUwVoP -DoDKjvbdgFlZmfgA -EObjjvbdTAEiHbOd -DoCkKvbdMowqVmgT -DncKjvbduMXwBTaX -DncKjvbdeYZssrFz -DncLKvbdmfdxNNgZ -DncLKvbdxLXDgzzG -DoCjjvbdNsTvGduQ -EPDLKvbdTpqOtuHm -EObkKvbdZMRctOMN -EPCjjvbdHEKuibJj -EPCjjvbdBiKbLJGK -DoCjjvbdUtNUFkvK -EOcKjvbdVTltFkuj -DnbjjvbdczYpXxqC -EPDLKvbduWNxKQsA -EOcKjvbddZyQYYqC -DnbkKvbdyfyMAMdw -DncLKvbdDihKWXjA -EPCjjvbdoAKztIDn -DoCjjvbdcTDLUDjB -EPDKjvbdJcJcRKCx -DncKjvbdIxTahLqQ -DoDLKvbdTqROttgm -DoDKjvbdjblLQgUg -EOcLKvbdTppnuUhN -EPCjjvbdrMyjZLgi -EObjjvbdypnmIjXA -DoCkKvbdczYoxZRC -EObkKvbdFjeTDHmV -EPCjjvbdZxcimbkr -DoDKjvbdatbHXkUI -EPDKjvbdvmWAMdEm -DoCjjvbdqwQMCiYq -DoDKjvbduWNwjQsA -DncKjvbdACqwjZiQ -DoCjjvbdOTTvGduQ -EObkKvbdirzhsKiz -EObjjvbdOTTugFUp -EOcLKvbdKDJbqJcY -DoCjjvbdiUyeXRtb -EObjjvbdfMfXHNKL -EOcKjvbdjhHMFfNk -DncKjvbdRpUGjFcw -EPCjjvbdfILVqnRH -EOcKjvbdiHKCyWJu -DoDLKvbdnPzYvLYb -DnbkKvbdnGeYNOHZ -DoDKjvbdtvOXjQsA -EPCjjvbdmIctRVRa -EOcKjvbdpyOhGpcx -DnbkKvbdKQydoFnF -DoDKjvbdkVvnDaww -EObjjvbdbUbHXjsh -EOcKjvbdCJLCLIfK -EPDKjvbdZeYGzhJC -DncKjvbdcScLUDia -DoCkKvbdQmXbZOUz -EOcLKvbdRadFMIxk -DnbkKvbdziuPodSt -EOcKjvbdEXxMUUTl -DnbjjvbdegjvSOQg -EObkKvbdZtJJYdTO -EPDKjvbdVAbQsQrZ -DnbkKvbdkHflFfOL -EObkKvbdtcCuXWOo -DnbjjvbdcTDLUEJa -EPCjjvbdZjTIQHBf -EObjjvbdTAEhhCPE -EOcLKvbdbhlikFwY -DoDLKvbdEPDKkWbd -EOcKjvbdZtJJZESn -EPDKjvbdZMRdUNlN -EPCkKvbdhgJcZWJu -DncKjvbdUaBqSprZ -EOcLKvbdEJgiuxKA -EObjjvbdSPtHKFcw -DoCjjvbdFfKSOJUR -EObjjvbdVrOXaeMD -DoCjjvbdrXPkcIxq -DoDKjvbdZjTHofaf -EOcLKvbdVYgszLOn -DncKjvbdIwsagkpp -DncLKvbdTkvPBVni -EOcLKvbdUtNUFkuj -EObjjvbdZnmheEyj -EPDKjvbdyYIjBoyk -EPCkKvbdqlyiyMIJ -EPCjjvbdYzbeqjVy -EOcLKvbdUQqOuVIN -EObkKvbdZMSDtOMN -DncKjvbdVvhxWDdg -EOcLKvbdiZuFlRNf -EObjjvbdZtJJYcrn -EPCjjvbdmuUzKirG -DoDLKvbdVUMtGMVj -EPDLKvbdhWyAzzAJ -DoDLKvbdfIKvRmqH -DnbjjvbdqdFIpOVa -DnbkKvbdIwtCHkpp -EOcKjvbdeEnrBvcK -DnbkKvbdJuuFdFGi -DoDKjvbdeOeTKtUS -EObjjvbdKWUfDeGi -EPCjjvbdiHJbyViu -EOcKjvbdBraCsfWr -DoCjjvbdGYuVBEYC -DoCkKvbdnHEwmOHZ -EPDKjvbdZisIQGaf -EPCkKvbdmpZxvKyC -DoDLKvbdmSYuZrdJ -EObkKvbdKDJbqKCx -EOcLKvbdZsiJZETO -EPDKjvbdnCJvxOmu -DoCkKvbdjgflGGOL -DnbkKvbdRosfjFdX -EPCjjvbdRECaQQcr -DnbkKvbdNHComQVL -EPCjjvbdrJAKEmOe -DoDLKvbdqBJFAXIE -DncLKvbdGLFTDINV -EOcLKvbdhgJbxujV -DnbkKvbdjSzhsKiz -EOcKjvbdKWVGDdfi -DoDKjvbdZnnIeFZj -DnbjjvbdxxIiaoyk -EObkKvbdczYpYZQb -EPCjjvbdZxcjODMS -EObkKvbdiHJbxvKV -DoCjjvbdJzoexEAN -DoCjjvbdaRfChTek -DoDLKvbdxwhjCPyk -DoDLKvbdVqnYBeLc -DnbkKvbdRDcBPpdS -EObkKvbdYqNFImFR -EPDKjvbdsrrTYzFD -EOcKjvbdqcdhpOWB -EOcKjvbdaNLCTUmH -DoDKjvbdnPzYukZC -DncLKvbdKCjDRKCx -EObjjvbdFkEsDINV -EPDKjvbdMgDQMouL -DncLKvbdOXnuzdNt -EPCjjvbdpstGqrLU -EPCkKvbdRbDdkhyL -DnbkKvbdaogGdLzd -DncKjvbdjlbLydgP -DnbjjvbdUMVoAvPJ -EPCjjvbdJqZeOfOF -DoDLKvbdUsmTekvK -DoCjjvbdpyOgfpcx -DnbkKvbdJYUCIMRQ -DncLKvbdjJfHjMwr -DoCjjvbdRosgKGDw -DoCkKvbddZxpYYqC -DncKjvbdddnrBwCj -EPDKjvbdijGIJlxS -DoCjjvbdkWWnECYX -EObkKvbdqlzJxlIJ -EOcLKvbdzaAPHHBl -DoDKjvbdlZTSSyGt -DnbjjvbdatbHXkUI -EOcLKvbdNdcshiKd -DncKjvbdGdKujBjK -DnbjjvbdRWnDcMID -DoCjjvbdSxKlNzkY -EPDKjvbdHDkWJbJj -EPDLKvbdZxcjNcLr -EOcKjvbdLYqKSzuG -EPDLKvbdjuvmcaww -EPDKjvbdxmrhYTJD -EOcKjvbdZirhPfaf -DnbjjvbdfIKurNqH -EPCkKvbdYTLaNTnx -DoDLKvbddtAUASlv -EPCkKvbdZLrDtOLm -DnbjjvbdnGdxMnHZ -DoCjjvbdeFPSCXCj -DncLKvbdYORAYUvU -EPCjjvbdrXQMDJZR -EPCkKvbdRpTfjGDw -DoCjjvbdpssfrSKt -EPCkKvbdKWUedFHJ -DnbjjvbdVvhwvDdg -DncKjvbdLrWlzUpz -DncKjvbdwtmFQxkn -EObkKvbdmIdTqUqa -DnbkKvbdJutedFHJ -EOcKjvbdVZITykPO -DoDLKvbdhbPDFXQq -DnbjjvbdmuVZjirG -DncLKvbdieKgVPAO -DncKjvbdEuyPpNJe -DoDKjvbdiHJcYuiu -EPDKjvbdmgFYNNfy -DnbkKvbdOTUWGeUp -DoCjjvbdZRNFJNFR -EPDLKvbdYpmFJNEq -EObkKvbdRMxBxnUz -DncKjvbdNQYQvOHT -EOcLKvbdMoxRVnHT -DoDKjvbdpyOhGpcx -EObjjvbdRyjITDWA -EObjjvbdrykosAhO -EOcLKvbdhaoDFXRR -DoDLKvbdIryBSmYM -DnbjjvbdlZSrTYft -DncLKvbdegjurORH -EOcKjvbdJYUCHlRQ -EOcLKvbdREDApRES -EObjjvbdmgFYMnHZ -EPCkKvbdZyDimblS -DoCkKvbdiCPCdwQq -EObkKvbdbVBgYKtI -DoDLKvbdNddUJJLE -DoCjjvbdrpVnibuf -EPDLKvbdKaLGlbYR -DnbjjvbdTpqPVUhN -DoCjjvbdcyxoxYpb -EPDKjvbdhfibxvJu -EPCjjvbdJpydnfNe -DncLKvbduWOXipsA -DoDKjvbdrRtkNkAm -EObkKvbdNQXqVmgT -EObkKvbdCIkBkJFj -EPDLKvbdqUUHSRjt -EOcLKvbdeYZtTqez -EPCjjvbdqUUHRqkU -DncKjvbdkWXODaxX -EPCkKvbdaNKbTVNH -EPCjjvbdvAcxroEh -EOcKjvbdlZTSTZGt -EOcLKvbdLAkHNCYR -DoDLKvbdUtMselWK -EPCjjvbdnVUzKjRf -DoDLKvbdypoMiJwA -EObjjvbdKDKCqKDY -DoCjjvbdrWolDIxq -DoDKjvbdwyhFfXeS -EOcKjvbdnGeYMmgZ -DoDLKvbdREDAopcr -EPCjjvbdiUzFXRuC -DoDLKvbdZQldhmEq -EPCjjvbdtvNwipsA -EPDKjvbdbrcLUDia -DoDLKvbdegkVqnQg -DoCjjvbdznopdcMY -DoCjjvbdmfeXlmgZ -DncLKvbdXrlBMsnx -DoCjjvbdmgEwmOGy -DoCkKvbdjmCLydgP -DncLKvbdmJEUQuSB -DnbjjvbdRbDeLiYk -DnbkKvbdQdDBPqDr -EObkKvbdjKGHjMxS -DoCkKvbdyOTHxSiD -EPCjjvbdQwNdCkhD -EObjjvbdfNFwGljL -EObjjvbdVqmxCElD -EOcKjvbdeOeTKtTr -DoDKjvbdUaBqSpqy -DnbjjvbdmIdURUqa -DoCkKvbdUWMQJtBR -DnbjjvbdxnSgxSiD -DncKjvbdwXMBVaVu -DnbjjvbdvvkaVaWV -EObkKvbdmaiwXnmu -DoCjjvbdgQBzwEYI -EOcKjvbdFVxpPmJe -EObjjvbdKDJcQjCx -DoCkKvbdYlRdUOMN -EOcLKvbdZoOIddzK -DoCjjvbdffMZnHHA -DncKjvbdnQZxujxb -EPDLKvbdwXMBWBVu -DoCjjvbdLFfIBaQu -DncKjvbdGQASwHFy -DnbkKvbdauBfxKsh -EOcLKvbdraelkgKy -EObkKvbdnVUzLKSG -DoDKjvbdANHxrwZx -DncLKvbdqZPHfqEY -EObjjvbdvPTzpjoU -EObjjvbdrWpMDIyR -DnbkKvbdCDpBWKNG -DnbkKvbdyOSgwrhc -DnbkKvbdeKKSVtzn -DncKjvbdMowpumgT -EOcLKvbdOFDtIhjd -EPDKjvbdkDMLRGtg -EPDKjvbdiiehJlwr -EPDLKvbdBdQAvJlf -DoDLKvbdZyEKODMS -EObjjvbdJqZePFme -DnbkKvbdKxqKSztf -EObkKvbdmJEUQuSB -DnbkKvbdREDAopdS -EPDKjvbdwzHefYEr -EPDKjvbdnHExMnGy -EOcKjvbdmozZVjyC -EPDKjvbdZHWdAPTJ -DoDKjvbdjgfkfFnL -DncKjvbdczZPxYqC -DoDKjvbdEXwlUUTl -DncKjvbdhuZdvrVC -DnbkKvbdxKwDgzzG -EPCkKvbdsZlQSaIO -EOcKjvbdzRPMiKXA -DoDKjvbdqvolDIxq -DoDKjvbdQdCaPpcr -EPCjjvbdJmADyfuB -DnbjjvbdsCGNLgLZ -DoDKjvbdKfGICAqV -DoCkKvbdbiNJkGXY -DncKjvbdiGicYvKV -EPCjjvbdSxLLmzjx -DncKjvbdLAjflaxR -EPCkKvbdUyHsyjoO -DnbjjvbdcyxoxYqC -EObkKvbdxZgfGYFS -EPDLKvbdZoNiEeZj -DncLKvbdZtIhxcrn -EPDLKvbdIwtCILqQ -DncLKvbdQmXbYmtz -EOcLKvbdmuUzKiqf -EPDKjvbdsQVnibuf -EObjjvbdOSsugEtp -EOcLKvbdYlSETnLm -EObkKvbdUtNUGMWK -DoDLKvbdzeZnzeZp -DoDKjvbdqTtHRqkU -EObjjvbdmbJvxPNu -DoDLKvbdliDsqUqa -EPCjjvbdhanbdvpq -DoDKjvbdiifHilxS -DoDKjvbdmJDsptqa -DnbkKvbdDncKkWcE -EPCkKvbdaofgELzd -DncKjvbdijGIJmXr -EPCkKvbdRkYfUgLT -EObkKvbdHEKuibKK -DnbjjvbdVhXuwfxz -DoDLKvbdiMEcmuCy -DnbkKvbdJcJcQibx -DnbkKvbdmfeYNOGy -DoDKjvbdqUTgSSKt -EPDLKvbdePErjtUS -EObkKvbdaNKasUmH -EObkKvbdiifIJmYS -EOcKjvbdsPunjCvG -EObkKvbdbrcKtDjB -EPDKjvbdbhlikFwY -EPCjjvbdrpVnjDWG -EPCjjvbdaMkCStlg -DncKjvbdMpXqVnGs -EPDLKvbdZjShPfbG -EPDLKvbdfHkVrOQg -DoCkKvbdDnbjjvbd -DoCkKvbdkySqsYft -DoDLKvbdZRMeImEq -DoDLKvbdYpleIleR -DncKjvbdiHJbyViu -EObkKvbdrMyixkgi -EPDKjvbdqvokbiYq -EOcKjvbdzitoodTU -DnbjjvbdVYhTyjnn -EPDLKvbdyYJJbPzL -EObkKvbdeFPSCWcK -EPDKjvbdIsZArlxM -DnbjjvbdkIHLfGNk -DoDLKvbdehLVqmqH -EOcLKvbdvBEZTPFI -DncKjvbdnUuZjirG -EPCjjvbdakLfOnDA -DnbkKvbdEzsqEkcJ -DnbjjvbdVhXvXgYz -DoCjjvbdIryBTNYM -DncKjvbdZirgpHBf -DoDKjvbdEYYLsstM -DnbjjvbdZshhyETO -DoCjjvbdOTUVgFVQ -EObjjvbdZisHpGbG -DoDLKvbdkDLkRGtg -EObkKvbdegjvSNpg -DncLKvbdfIKvRnQg -DncLKvbdJKEAJpGd -DncKjvbdrRtkNkBN -EPCkKvbdjvWnDaxX -DoCjjvbdmfdwmNgZ -DnbjjvbdbrcLUEJa -DncLKvbdnQZxujxb -DoDKjvbdNsTugEuQ -EOcKjvbdUVlPisaR -EObkKvbdHDjujBij -EPDLKvbdSBdFMJYk -EPCkKvbdVvhxVdFH -DncKjvbdIsYaTNXl -EPDLKvbdIrxaSlxM -EPDKjvbdfoazwDwh -EPCkKvbddeOqbXDK -DoCjjvbdJpzEnfNe -DncKjvbdqiAKFNOe -EPDLKvbduDCtwWOo -DnbjjvbdZjShQGbG -EObjjvbdVAbQsRSZ -DncLKvbdtcCuWuoP -DoDKjvbdTvLoitAq -EOcLKvbdZQleIleR -DoCkKvbduLxXAtAw -DnbjjvbdqYoHfqDx -DoDKjvbdJYTbHkqQ -DncLKvbdGZUtaDxC -EObjjvbdqFdEtWAh -EPCkKvbdILaznWqL -EObkKvbdQwNdCkhD -EPCkKvbdmJDsqUqa -EOcKjvbdvBEYrneI -DoDKjvbdapGgELzd -DoCjjvbdwWlAvAvV -DoDLKvbdJbicQicY -EPDKjvbdaaVdepPw -DoCkKvbdsZkosAhO -DoCkKvbdNeETiJKd -EObkKvbdEObkLXCd -EPCjjvbduCbuXVno -DoCkKvbdrykpTBHn -DnbkKvbdrEFIpNua -DoCjjvbdlYrrSxft -DoDLKvbdqdFIpOVa -EObjjvbdrbFmMGjy -DnbkKvbdRpUHKGDw -EOcLKvbdzoPpdcMY -DoDLKvbdfILVqnQg -DoCkKvbdlZSqsZHU -DncKjvbdrzMQSaIO -DoCkKvbdhuZeWrUb -EObjjvbdfSAvzkbo -DoCkKvbdVZIUZjnn -EOcLKvbdhlEdOUcZ -DoDKjvbdbUagXkUI -DoCjjvbdqUTgRqjt -DoDLKvbdqTsfrRjt -DnbkKvbdrouoKCuf -EPDKjvbdmbKXXoNu -DoDLKvbdhbPDEwRR -DncLKvbduVnYKRTA -DoCjjvbdcJNKKfXY -EPCjjvbdeFOrCXDK -EPCkKvbdczYoxYpb -DnbkKvbdKfGHaaRV -DoCjjvbdMuTRjmAX -DoDKjvbdkMalZeGo -DnbkKvbdbhmKLFvx -EPDLKvbdjuwODbXw -DoDLKvbdUMVoBVoJ -DoCkKvbdRpTgJfDw -EOcLKvbdajlFoNcA -EPCjjvbdRMwaxnUz -EOcLKvbdJcJbpjDY -DoCjjvbdjhHLefNk -EOcLKvbdcasNSATm -DoDKjvbdyOTHwriD -EObjjvbdKQydnenF -EObjjvbdZirhPgBf -EPCjjvbdBiKbLIfK -EOcKjvbdNeDtIiKd -EOcKjvbdkDLjqGtg -DoDKjvbduDDVWuoP -DncLKvbdePErjtTr -EOcKjvbdJbicQjDY -EPDKjvbdrylQTBHn -DnbjjvbdkMbMZeGo -DncLKvbdtlYWaUAw -DoCjjvbdDwxMUTtM -EObkKvbdjblKqGtg -DoDKjvbdRMxCZNtz -EObkKvbdqYoIGqDx -EPDKjvbdmfeYNNgZ -EObjjvbdTAFIhCPE -DoCjjvbdjKGIKMxS -EOcLKvbdMpYRWOHT -EOcLKvbdMoxRVnGs -DncKjvbdhaoDEwQq -DnbkKvbdEXxMTtTl -EPCkKvbdMgCpMpVL -EObjjvbdRzKITDWA -EOcLKvbdrzLosBHn -EPCkKvbdBraCsfWr -DoCkKvbdaaVeGPow -EOcLKvbdIGgZyXxH -EPDKjvbdliETptqa -EOcLKvbdbKlGPODA -DnbjjvbdRadElJZL -EPDLKvbdjFLHVPAO -DnbkKvbdiBnbdwRR -EObkKvbdvBDyTOeI -DnbjjvbdUyHtZjnn -DnbkKvbdmgFYNOGy -DnbkKvbdGKdsDHlu -EPDLKvbdZRNEiMeR -DoCkKvbdbLLeoODA -EObkKvbdANIZSvzY -DoCkKvbdziuPpDrt -DnbjjvbdWHwvXgYz -EPDKjvbdsBfNLgLZ -DoCkKvbdWWiXudFH -EPDLKvbdwzIGGYEr -EOcLKvbdVTmUGMWK -EObjjvbdMSXMytpz -DncKjvbdZirhQGaf -EObjjvbdCJLBjiGK -EPCjjvbdZLrETnLm -EObjjvbdelevfljL -DncKjvbdGYuVBEYC -EPCkKvbdkCkjpgUg -DoCkKvbdbhljLFwY -DnbjjvbdeEoSBvbj -DncLKvbdvAcyTPFI -DnbkKvbdjblLQgVH -EPCjjvbdeEoSBvbj -DnbkKvbdaMjbStlg -EObjjvbdrDdhpOWB -EOcKjvbdbKlFoODA -EPDLKvbdZjTIQGaf -EObjjvbdEzsqEkcJ -DnbjjvbdZRNEiNEq -EObjjvbdqlzJxlIJ -DnbkKvbdkIHLfFmk -EObkKvbdMtrrKmAX -EPCkKvbdNQXpvNgT -EPCkKvbdbrcKtEKB -EObjjvbdSPtGjGEX -DoDKjvbdxwiJaoyk -DnbjjvbdVYhUZkPO -DoDLKvbdXrlBNUPY -DoDKjvbdZnmiEdzK -DoCjjvbdWWiXvDeH -DoDLKvbdyNsHwsIc -DoDKjvbdwyhFfYEr -EPDLKvbdNeDshhkE -EPDKjvbdBiLBkJFj -EOcKjvbdJqZdoGNe -EOcKjvbdbAvEepQX -DoCjjvbdaNLBsUlg -EPDLKvbdvBDxsOdh -DncKjvbdGFirNiTq -EPDLKvbdZnmiEeZj -DncLKvbdePFSjtTr -EOcKjvbdnGdwlnHZ -EOcLKvbduDDUvuno -EObjjvbdZQmFIldq -DoCkKvbdcyxpYYqC -EOcLKvbdMRvlzVQz -DoCjjvbdtcDUwVoP -EPCkKvbdrXQLbhxq -DoDKjvbdkVwODbXw -DnbjjvbdnCJwYOmu -DnbkKvbdqvpLbhxq -DoDKjvbdKDJcQjDY -DnbkKvbdvwMAvAuu -EPDKjvbdtvNxKRTA -DoDKjvbdYkqctOMN -DoDKjvbdtcCuWvOo -DoCjjvbdEObkLXDE -DoCkKvbdbrbjtDia -EObkKvbdDncKkXDE -DnbjjvbdxxJKBozL -EPCjjvbdbhlikGWx -DncKjvbdJXtCIMRQ -EOcLKvbdkVvmcaxX -DoCjjvbdqwPkbhyR -EObjjvbdySnImRbH -EObjjvbdZQleImFR -EObkKvbdmpZxujyC -EPCjjvbdhbPDEvpq -EObkKvbdpyPHgREY -DoDLKvbdwzIGGXeS -EObjjvbdaSGChUGL -DoDKjvbdrbFmMGkZ -EPCkKvbdxKwEHzyf -DnbkKvbdJXtBgkpp -EPCkKvbdlZTRrxft -EOcKjvbdFVyPpNKF -DoCkKvbdaRecHsek -DoDKjvbdFfKRnJUR -DoCjjvbdyOTIXrhc -DoDLKvbdyOSgxShc -DoDKjvbdEOcKjwCd -DoCjjvbdzoPpeClY -DoCkKvbdURRPVUhN -DoDLKvbdVqmxCFMD -EOcKjvbdNVSrKmAX -EOcKjvbdTvLpKTaR -EPDLKvbdCTAbtFwS -EPDLKvbdZyEKNblS -EOcLKvbdsCFllHLZ -EObkKvbdjlbMZeHP -EPDKjvbdMpXpunGs -EObjjvbdaNLCSuNH -DoDLKvbdkCkjqHUg -EPCjjvbdTYKlNzjx -DnbjjvbdNxOuzdOU -DoCkKvbdegjvRmpg -DoCjjvbdhfjCyWKV -DncLKvbdjggMFfNk -EOcKjvbduVmwjRTA -DnbkKvbdDjHiuxKA -EOcLKvbddePRavcK -DnbkKvbdwkWcgzyf -DnbkKvbdHlBznXQk -EPCkKvbdatafxKsh -EPCjjvbdcJMjKfXY -DoDKjvbdrDdiQOWB -DoDLKvbdVvhwvEEg -EObjjvbdwjvdHzzG -DncLKvbduMYXAtAw -DoDLKvbdZQmFJNEq -EPCjjvbdyOTIXriD -DoCkKvbdbiNKLGWx -DncKjvbdHEKvKBij -EPDLKvbdYlSDtNkm -DoDKjvbdTqROuVIN -EPCkKvbddeOqbXCj -EOcLKvbdCTBCsewS -EPCjjvbdnUtykJrG -DnbjjvbdlZTSSyGt -EPCjjvbdjmBkyeGo -DnbkKvbdVhXuwfxz -DncLKvbdePFTLTsr -EOcKjvbdemGWgMik -EObkKvbdhuZeWquC -EPCjjvbdEvYpQNKF -EOcKjvbdpaJFAXHd -DoDKjvbdJSyBSmYM -EOcLKvbdSCDdlIxk -DncKjvbdSLZGVGkT -DnbkKvbdrbFlkgKy -EObjjvbdJSyAsMwl -EOcKjvbdEOcKkXDE -EPCjjvbdMoxQumfs -EPDKjvbdUQpnuUgm -DncKjvbdaaWFFoow -DnbkKvbdakMGPODA -EObkKvbdrEEhomua -EOcKjvbdmozZWLYb -EObjjvbdVgwuxGxz -EOcLKvbdCJLCKhej -EPDLKvbdVUNUGLvK -EOcLKvbdLGGHbBRV -DoCkKvbdlqxtysEJ -EOcLKvbdcScLTdKB -DncKjvbdhtydwRtb -DoCjjvbdcTCjscia -DncLKvbdUslsekuj -DoDKjvbdwuNFRYkn -EOcLKvbdijGHjNYS -DoCjjvbdJSyBSmYM -DoDKjvbdEYXlUTtM -EPDKjvbdUyITzKoO -DnbkKvbdvBDyTPFI -DoDKjvbdYlRcsmkm -DoDKjvbddePRbXCj -EPCkKvbdVZHtZjoO -EPDLKvbdWXIxVceH -EPCjjvbduDDUwVoP -DncKjvbdQlxBxnUz -DoDLKvbdfpBzvdYI -DoCjjvbdMJBlRYAS -EPCkKvbdZisHofaf -DnbkKvbdkWXNdCXw -EOcKjvbdEYXkstTl -EOcKjvbdfekymgHA -EPDKjvbdelfWflik -EPCjjvbddCTNSAUN -EPDKjvbdpfDeUVaI -DncLKvbdiBnbeWqR -EObjjvbdEuyPoljF -EPCkKvbdRDcBQRES -DncKjvbdhfibxujV -EObkKvbdVqnYBeMD -EPDKjvbdJKEAKQGd -EOcLKvbdsQVoJbuf -EOcKjvbdqcdhonVa -EObjjvbdJcKCqJcY -EOcKjvbdpfEEsuaI -EPDLKvbdxnTIYShc -EOcLKvbdxVMdqYlO -EObjjvbdZyDimcMS -DncKjvbdiGjCxvKV -DoCkKvbdRbEEkiYk -DoCjjvbdWIYVxHYz -EPDLKvbdYzcFqjVy -DncLKvbdTYLLmzjx -DoDLKvbdwXLaVaWV -DoDLKvbdMRvlyuQz -DoCjjvbdajkeoNcA -EPCjjvbdjEkHUoAO -DoCjjvbdZoNiFFZj -DncLKvbdlZTRryHU -DoCjjvbdcTDLTdJa -EOcLKvbdlhctRVSB -EObjjvbduaEYroFI -DncKjvbdzjUpQDsU -DoDLKvbdyqPNIiwA -DnbjjvbdhkdcnUby -EObjjvbdVYgtZjoO -DnbjjvbdCJLCLJFj -EPCjjvbdzeZnzdyp -DnbjjvbdqlyjZMIJ -EOcLKvbdGAnpyJzm -DoDLKvbdNGcQMpVL -DncKjvbdADSXiyiQ -DoCjjvbdLBLHNCYR -DoCkKvbduVnXjRTA -DncKjvbdtSqsZZeD -EPDKjvbdpyOhGqEY -EObjjvbdEuyPomKF -EPDKjvbdyOSgxTIc -EPDKjvbdGFiqnJTq -EOcKjvbdyYJJbPzL -DncLKvbdADRwjZiQ -DncLKvbdCSaDUFwS -DoDLKvbdEzsqEkbi -EOcLKvbdssSTYyeD -DnbkKvbdSBdEkiZL -EObjjvbdFWZQPlie -EObkKvbdbBVeFpPw -DoDLKvbdBdQBVjMf -EPDLKvbdptUHRqjt -EPCkKvbdQwODcMID -DoDLKvbdelevgMik -DnbjjvbdVTmUFkuj -DnbkKvbdLYqJrzuG -DoCkKvbdCTAbsevr -DoCjjvbdJpyeOfOF -EPCkKvbdOStWHEtp -EOcLKvbdKVtfEEfi -DoCkKvbdmuUykJqf -DnbjjvbdQZNAHSrK -DnbjjvbdMgDPlpUk -DnbkKvbdCIkBjhfK -EObjjvbdBsBCsewS -EOcLKvbdYzbfRivZ -EOcLKvbdrzMQSaHn -EOcKjvbdRosfjFcw -EPDKjvbdANHyTXZx -EPCkKvbdliDsptqa -EOcLKvbdACrXizIp -EPCjjvbdLFfICApu -DoCjjvbdbAvEepPw -EOcKjvbdTpqPVVHm -DoCjjvbdsBemMGjy -EPCkKvbduaEZTPEh -DoCkKvbdOStWHEtp -EPCjjvbdbBVeGQPw -EObjjvbdOSsufeUp -DoCkKvbdjAQHBPgK -EPCjjvbdbBWEfPow -EPDKjvbdtSqsZZdc -EPCkKvbdegjuqmpg -DoDLKvbdRotGifDw -DoDKjvbdmJEUQtrB -DoCjjvbdcIljKewY -EObkKvbdbiMjKewY -EObjjvbdcScKsdJa -EPDKjvbdtSqsYyeD -DnbkKvbdrpWOjCvG -EPDLKvbdBiKbLIej -EPCkKvbdBdPaWJmG -EObjjvbdZRNEhmEq -EOcLKvbdiUzFWrUb -EPCkKvbdmIdUQtrB -EPCkKvbdbUafxLTh -EOcKjvbdnCKWxOmu -DoCkKvbdsZkosBIO -DnbkKvbdHDjujCJj -DoCjjvbdWSOYCFLc -EPDKjvbdmJETqVSB -DnbjjvbdrXPkcJYq -EObkKvbdMgDPlpVL -DnbjjvbdZisHpGaf -DoCjjvbdGGJqmiTq -EObkKvbdIHGyyYXg -EObkKvbdqTsgRrKt -EObjjvbdmJDtRVSB -DnbjjvbdddoSBvbj -EPDKjvbddePSBvbj -DnbjjvbdBcpAvJlf -DncKjvbdezvYeItX -DoDKjvbdmgEwmNfy -EObjjvbdDigivXjA -EOcLKvbdmJEURUrB -EOcLKvbdePFTLTtS -EPDKjvbdVTmUGMVj -EPDKjvbdnBivwnnV -EPCjjvbdZnmhddzK -DncKjvbdZeXfzgiC -DoDLKvbdEuyPpNJe -DoDLKvbdqdEhpNua -DoDKjvbdFWYpQMie -DoCkKvbdMfcQMpVL -EOcKjvbdmttykKSG -DnbjjvbdlhcspuSB -EPCjjvbdWSNwbFMD -EPDKjvbdRbEElIyL -EOcKjvbdyNsHwsIc -EPCjjvbdrylQTAgn -DncLKvbdADSYJyiQ -EOcKjvbdZjTIPgBf -EObjjvbdKDKDQibx -EObkKvbdKDJcRJcY -DoCkKvbdmSZUzSdJ -EPCjjvbdaNKartlg -DoDKjvbdIGgZyXwg -EObjjvbdauCHXjsh -EObkKvbdxUmEpyLn -EPCjjvbdNsTugEtp -EPDLKvbdZyDimblS -DoDKjvbdbUagYKtI -DncKjvbdliETpuSB -EOcKjvbdDihKWXjA -DncKjvbdZtIiZETO -EObjjvbdygZMAMeX -DoDKjvbdfNGWgMik -DoCjjvbdZMSEUNkm -EOcKjvbdsrqsZZdc -EPCkKvbdACqxJzJQ -EPDLKvbdNdcshiKd -DoDKjvbdyqOmIiwA -EOcKjvbdRMwbYmtz -EOcKjvbdYpmEhleR -DoDKjvbdjJfHimYS -DoCjjvbdrbFmMHLZ -DoCkKvbdBcpBWKNG -DoDKjvbdIxTbHkqQ -DoDKjvbdhuZdwSUb -EPDLKvbdJYUBglQp -EPCkKvbduCcUwVno -DnbkKvbdwuNEpyMO -DncKjvbdssSSxzEc -DoDLKvbdGdLWJbKK -EObjjvbdFjdsDIMu -DncLKvbdfkGzbfAE -EOcLKvbdrRtkOLBN -EPDLKvbdajkfOmcA -EPCjjvbdrMzJxkhJ -DncLKvbdqZOhHREY -DoDKjvbdmJEUQuSB -DnbkKvbdRDbaQRES -EPCjjvbdpyPHgREY -DnbjjvbdMIalQxAS -DncLKvbdiZuGMROG -DoDKjvbdgFkymfgA -DncLKvbdsCGMkgLZ -EObkKvbdRotHJecw -EPDKjvbdkClKpftg -EPCkKvbdRjyGUgLT -EOcKjvbdhuZdvqtb -EOcLKvbdmttzKjSG -EObjjvbdhlEdOVDZ -DoDLKvbdZisHpGaf -DnbkKvbdTqQntuHm -EPDLKvbdNdctIiLE -EObkKvbdWRnXbFLc -EPDLKvbdKVtfDdgJ -EPCkKvbdJSyBTMwl -DnbkKvbduWNxKQsA -DoCkKvbdqGEFUVaI -EPDKjvbdhkdcnVDZ -EPCjjvbdySnIlrBg -EOcLKvbdYlRctNlN -EObkKvbdvBDxroFI -DoDLKvbdxwiJbPzL -EPCjjvbdyNsHxTJD -DoCjjvbdhfjDYujV -DoDLKvbdcImKLFwY -DnbjjvbdqwQMChxq -DncLKvbdaaWEfQPw -DnbkKvbdUQqOuUhN -EOcLKvbdUaCRSqSZ -DnbjjvbdRMxByOUz -EPDKjvbdKCjCpjCx -DncLKvbdrMzJyMIJ -EPCjjvbdOEdThhjd -EPDKjvbdrSUkOKaN -EObkKvbdMowpunGs -DoCjjvbdhzVGLpmf -EOcLKvbdaMkBsVMg -DoCjjvbdkIGkfFnL -DnbkKvbdYpldiNFR -EPDLKvbdZxcjNcMS -EPDKjvbdGGKRnJUR -EPCjjvbdbiNKKfWx -EObjjvbdmRyUyrci -DncKjvbdLrXNZtpz -DncKjvbdZjTIPgCG -DnbkKvbdypoNIiwA -EPCjjvbdDihKVxKA -DncKjvbdyfxlANFX -DoDKjvbdiMFEOVCy -EPCkKvbdtcDUvvPP -DoCkKvbdEvYpQMie -DnbjjvbdZLrDtOLm -EPCjjvbdKQzFPGNe -EPDKjvbdGdLVjCJj -DoDKjvbdqYoHfqDx -DoDLKvbdFVxoomJe -DnbkKvbdKRZePFnF -DoCjjvbdFVyQQMjF -DnbkKvbdTulQJsaR -EObkKvbdkHgMFenL -DoDKjvbdVUMselVj -EPDLKvbdrDdhonVa -DncKjvbdkVvmcaxX -DoDLKvbdrRuKnLAm -EOcKjvbdJbibpjDY -EPDKjvbdXrlAmToY -DnbkKvbdZirhQGbG -DnbjjvbdjgfkfFnL -EOcKjvbdGFjSOJTq -DoDKjvbdSCDeMJYk -DoCkKvbdpecdtWAh -EObjjvbdzeZnzdyp -DoCjjvbdMJBlQxAS -EPDKjvbdnBivwnmu -DoDKjvbdRadElIyL -DoDLKvbdsZlPsBHn -EObjjvbdznopeDLx -EOcLKvbdCJKbKiFj -DncLKvbdmgExNNfy -DnbkKvbdnPzYvKxb -DncKjvbdrDdiPnVa -DoCjjvbdAMgxrwZx -DncLKvbdTfzmkwWF -DncKjvbdqiAJdloF -EPCkKvbdwuMeRZLn -DoCjjvbdVUNUFkuj -DoDLKvbdKQyePGNe -DncKjvbdLqvlzVQz -DoDKjvbdmgFYNNgZ -DnbjjvbddxZtTrFz -EObkKvbdqTsgSSKt -DnbkKvbdZxcimcMS -DoCjjvbdANHySvyx -DoDLKvbdZQmFJMdq -DoCkKvbdHDjujBij -EPDLKvbdsPuoJbuf -EPCjjvbdYpmEhmFR -DncLKvbdZjTHpGaf -EPDKjvbdEuyQQNKF -DoCkKvbdmbKWxPNu -DoCkKvbdRjyFtfjs -DoCkKvbdiifHjNYS -EPDKjvbdpyOhGpdY -DoDKjvbdUVlPitBR -DoCjjvbdEKIJuwjA -EPCjjvbdFkFTDHmV -EOcLKvbdySnJNSCH -DncLKvbdRpUHJedX -EPDKjvbdtvOYJpsA -DoDKjvbdKDKDQjCx -DoDLKvbdaMkCTUmH -EOcKjvbdMpYRVnGs -EOcKjvbdtSqsYzFD -DncLKvbdKaKgNCXq -DoCkKvbdsCFllGkZ -EObkKvbdNrsvGeUp -DoDKjvbdmaivxOnV -EOcLKvbdOEctIhjd -DoCkKvbdemGXGljL -DoDLKvbdjvWmdBxX -EPCkKvbdCIjbLIej -EPCjjvbdkHfkfFmk -DoDLKvbdwzIGFwdr -EOcKjvbddBrlrAUN -EPCkKvbdJutecdgJ -DoCjjvbdWRmwaeLc -DnbkKvbdiVZdwRuC -DnbjjvbdGLEsDHmV -EPCkKvbdxsOJNSCH -EPCjjvbdIwtBgkqQ -DncKjvbdbrbjtDjB -EPCkKvbdjhGkeemk -DncKjvbdWWiXvDeH -EPCjjvbdnUtzKiqf -DncKjvbdTukoitAq -DncLKvbdCIkBjhfK -DoCkKvbdhgKDZWJu -EPDKjvbdBhkBjiFj -DnbjjvbdMfbpNPtk -DoDKjvbdnBjWxPOV -DoCjjvbdEJhKWYKA -EOcKjvbdTpqOtuHm -DoCjjvbdwzIFfXdr -EOcKjvbdrpVoKDVf -EOcLKvbdEYYLtTsl -DoCkKvbdLFfICBQu -EOcKjvbdeXzTsrFz -EOcLKvbdSQUHKFdX -EOcLKvbdraemMHLZ -EPDKjvbdkIGlFemk -DncKjvbdOYOuzcnU -DoCkKvbdIwtCILpp -DncLKvbdZoNiEdzK -DoDKjvbdsrqsZZeD -EPDLKvbdzGyMANEw -DncLKvbdBraCsewS -EObkKvbdpyOgfpcx -DnbjjvbdxmrgxTIc -EOcLKvbdZjSgpHCG -EPCjjvbdrWpMDIxq -DncKjvbdZtJIyESn -EPCjjvbdJSxaSmXl -DoCjjvbdiMFEOVCy -DoCjjvbdDwwlTstM -DncLKvbdJYUCHkpp -EPDLKvbdsrrSxzFD -EObjjvbdkHgMFfNk -EPDKjvbdOStVgFUp -DnbjjvbdjhHMGGOL -DnbjjvbdZyEJmcLr -EPDKjvbdDihKWYKA -DncLKvbdRosfiecw -DoCjjvbdyTNhmSCH -DnbkKvbdFeirNhsq -DoDKjvbdrDeIpNvB -EObkKvbdVAaqTRSZ -EPDLKvbdLAkGlbXq -EOcKjvbdVAaprqRy -EPDLKvbdfIKvRnQg -EPCjjvbdUQpoVUgm -EObjjvbdxVNEpyMO -EOcKjvbdsCFllGkZ -DncKjvbdsBelkgLZ -DoDLKvbdvlvANDeN -DoCjjvbdnBivwoNu -EObjjvbdsCGMkgLZ -EObjjvbdsPvPJbvG -EPDLKvbdxrnImRbH -EPDLKvbdNPxRVnHT -DoDLKvbdMtrqkNAX -DoDKjvbdiGicZWJu -EPDKjvbdOFEUJJLE -EPDLKvbdoAKzshDn -DoDKjvbdehKvRnQg -EObjjvbdLLBIWAKZ -EPDKjvbdeOdsLUUS -DncKjvbdjvWmdBxX -DncLKvbdezuyFJTw -EPCkKvbdNPwpumgT -EPCjjvbdkxsRrxgU -EPDLKvbdptUHSSLU -EPDKjvbdeATqNXif -EPCkKvbdjlakzEgP -EObjjvbdyXiKCPzL -DoCjjvbdhlFDmuDZ -DncKjvbdauCGxLUI -EObjjvbdySmiNSBg -EOcLKvbdfNGWfljL -DncLKvbdVviYWDdg -EPCkKvbdkIHLefOL -EPDLKvbdRNYCZNtz -DoDLKvbdmfdxNOGy -DoDLKvbdcScKtDjB -EOcLKvbdEPDLKvcE -EPCjjvbdUaBprqSZ -EObkKvbdddnqbXDK -EPCkKvbdaaVeGQQX -DoDLKvbduoTzqKnt -DnbjjvbdqwPkbhxq -EObkKvbduaEZTOdh -EOcLKvbdKfFhBaRV -EOcKjvbdVYgtZjoO -EOcLKvbdrSVKnKaN -DnbkKvbdsCFmMGjy -DnbkKvbdSLYeuGkT -DoCkKvbdwWlAvAuu -EPCjjvbdRXOEClID -EPCkKvbdCIkCKiFj -EOcKjvbdGckViajK -DoCkKvbdznpRFCkx -DnbjjvbdxKwDgzyf -DncKjvbdVAaprprZ -DoDKjvbdOEctIhjd -EObjjvbdmIdTptqa -DnbjjvbdvwMAuaWV -EObkKvbdEYXksssl -EPCkKvbdiZtelQnG -EOcKjvbdqdEhpOVa -DnbjjvbdidjfuPAO -DnbkKvbdnBivxPNu -EObkKvbdrSVKmkBN -DnbkKvbdiCPDFWqR -DncKjvbdZisHofaf -DoCjjvbdJvVFcdfi -DoDLKvbdcyxpYYpb -DoCjjvbdrykpTBHn -EPDLKvbdqrUkOKaN -DoCkKvbdGQATWgFy -DncKjvbduaDxsPFI -EPCkKvbdYkqdTnLm -EObjjvbdQYmAGsRj -DnbkKvbdZyEKOCkr -DnbkKvbdOEdThhjd -EPDKjvbdiCOcFWpq -EOcKjvbdMfcQNPtk -EPDLKvbdLGFhBaRV -EPDLKvbdssSSyZeD -EPCkKvbdTAFJIBoE -EObkKvbdeFPRavbj -DnbkKvbdjKFhKNYS -DncLKvbdCJLBjiGK -DncLKvbdqlzJyLhJ -EOcLKvbdRyigsCvA -DoDKjvbdYqMdhldq -DnbjjvbdehKvSOQg -EObjjvbdMgColouL -DoCkKvbdehKuqnRH -DoDKjvbdQvmdCkhD -DoDKjvbdMSWlzVQz -EObkKvbdbhlikGXY -DoCjjvbdeAUQmYJf -EPCjjvbdZyEJmcMS -DoDKjvbdIGfzYxYH -DoDLKvbdHDjvJbJj -EOcKjvbdQwNdCkgc -EPCkKvbdRWnDcMHc -DnbjjvbdrMzJyMIJ -DncKjvbdlhctQuSB -DoDKjvbdbPgGdLzd -EObkKvbdijFhJmXr -DoCjjvbdbQGgDkzd -EPDLKvbdDihJvXjA -EObjjvbdaNKasUmH -DncKjvbdZyEKOClS -DnbjjvbdSLYfVHLT -DoDLKvbdwzHfFweS -EPCjjvbdfNFwHNJk -DoDLKvbdelewHNJk -EPCjjvbduaDxroEh -DoDKjvbddwytURez -DncKjvbdwtmEpyLn -EOcLKvbdCIkBkIej -EOcLKvbdiLddOUcZ -EPDKjvbdiUydwSVC -DncKjvbdrEEiQOVa -DnbkKvbdYzbeqivZ -DoCjjvbdkVwOECYX -DoDLKvbdZLqcsmkm -EObjjvbdVYgtZkPO -EOcLKvbdHffyxwwg -EPDKjvbdcIljLGWx -DnbkKvbdMpXpvNfs -EOcLKvbdFeirOJTq -DncLKvbdWWhxWEFH -DoCjjvbdZRMdhmEq -DnbkKvbdULvPBWPJ -EPDLKvbdZRMdiMdq -DnbjjvbdTYLMNzkY -DoCkKvbdZxcjNblS -DoCkKvbdKCibpicY -EPDLKvbddoFTKtUS -DncLKvbdcImKLGXY -EOcKjvbdKaLGmBwq -EPCkKvbdnHFYMnGy -EPDKjvbdUQqPUuIN -EPDKjvbdeAURNYJf -DoCkKvbdxwiKCQZk -DnbkKvbdKVuGDeGi -EPDKjvbdrovOicVf -DoDLKvbdrylQSaHn -EOcLKvbdySmhlrBg -EOcLKvbdNrsufeVQ -EOcKjvbdzoQREblY -EPCkKvbdzaAOgHCM -DoCjjvbdZLqdTmkm -EObkKvbdNGbpNQUk -EOcKjvbdZshiYdSn -EPDLKvbdDncLKvbd -EOcKjvbdqlzJyMHi -DoCkKvbdBhkCKiFj -EOcLKvbdRaceLhyL -EPDLKvbdxsNiNRbH -DoDKjvbdtcCtwWOo -DnbjjvbdmfdwlnGy -DncKjvbdREDBQQdS -DncLKvbdnPzYvKxb -EPCjjvbdjgfkefNk -DnbkKvbdnUtykJrG -EPDKjvbdSCEFLiYk -EOcLKvbdGcjuiajK -EPCjjvbdJYUCHlRQ -EPDLKvbdYpleIldq -EObkKvbdfMfWflik -DncLKvbdwuMdpyLn -DoDLKvbdEPDLLWcE -DoDLKvbdZLrDtOLm -DoCkKvbddZxoxYqC -DncLKvbdTulQKUAq -DncKjvbdqrUjnKaN -DoCkKvbdGFjRmiTq -EPCjjvbdpssfrRkU -EPDKjvbdrXQLbiYq -DoCkKvbdNQYQunHT -DoCkKvbdNrtWHEuQ -DncLKvbdjgflGGNk -DncKjvbdBsBCsewS -DoCkKvbdMpYRVmfs -DnbkKvbdKfFhBaQu -EObkKvbdGcjuiaij -EObkKvbdakMGOnDA -DnbkKvbdFyUuAcxC -DnbkKvbdtSrTZZdc -EPCjjvbdatafxLTh -EPCkKvbdUGzmlXVe -EObkKvbdZyDinClS -DncKjvbdyzdnSIJI -DnbkKvbdnPyxukZC -DoDKjvbdkDMLQgVH -EObjjvbdbVBfwjtI -EPDLKvbdzRPMhiwA -EObkKvbdhkeDmuCy -DnbkKvbdZQleImEq -EObjjvbdrDeJPnVa -EPDLKvbdaNLBsVMg -DnbkKvbdOEctIhjd -EOcKjvbdatagXkUI -DncKjvbdMowpunGs -EObkKvbdtvNwiqTA -DnbjjvbdyzdnSHiI -EObkKvbdbhlikFvx -EOcKjvbdaNKaruNH -DnbkKvbdiVZdvqtb -EObkKvbdVYgszKoO -DoCkKvbdjJfIKMwr -DncLKvbdezvZFJTw -EObkKvbdcyxoxYqC -EPDLKvbdFejSNiTq -DncKjvbdIwsbIMQp -DnbjjvbdTukpJsaR -EPDLKvbdIsZArlxM -EPDKjvbdTAEhgand -EOcLKvbdfNGXHMik -DoDKjvbdjcMLQgUg -DncKjvbdSLYfVHKs -DoCjjvbdnBjWwoOV -EPCjjvbdnBjWwnnV -EObkKvbdQvmccLgc -EPDKjvbdwuMeRYlO -DoDKjvbdNddUJIjd -DoCkKvbdqUTgSRkU -DoDLKvbdehLVqmpg -DoDLKvbdrovOjCvG -EObjjvbdzoPpdcMY -EPDLKvbdZRNFIleR -DnbkKvbdSLZGVGjs -DoCkKvbdySmiMrBg -DnbkKvbdwyhFfXeS -DoDLKvbdWHwvYHYz -DoCjjvbdIHHZyYYH -EObjjvbdJSyArmXl -DncKjvbdACqxJyiQ -DncLKvbdmpZxujyC -DoCjjvbdFkFScINV -EPDLKvbdCDpAujNG -DnbkKvbdhkeDnUby -DncLKvbdFWYopNJe -DoCjjvbdLAjfmCYR -EPCjjvbdxrmiMrCH -EObjjvbdcImJkGWx -DoCjjvbdFejRnJTq -EObkKvbdYTMAlsnx -EPCjjvbdsPvOibuf -EObjjvbdNeDshhjd -EOcLKvbdBiKbLIej -EObkKvbdauCGxLTh -EPDKjvbdbBWEepQX -EPCkKvbdVrNxBdlD -EObjjvbdMIalRYAS -EOcKjvbdJcKCpjCx -EOcLKvbdLqwNZtpz -DoCkKvbdZisHogBf -DnbjjvbdEPDKjvbd -DoDLKvbdFWZQQNJe -EObkKvbdHgGzYwxH -EOcKjvbdjbkkQfuH -DnbjjvbdtkxXAtBX -EPDLKvbdLAkHNCXq -EOcLKvbdWWhxVdFH -DncLKvbdCWzdIeQW -DoDLKvbdVvhwvDdg -EObjjvbdpfDeUWAh -EOcLKvbdqmZixkhJ -DncKjvbdyzdmrIJI -DncLKvbdRpTgJecw -DoDLKvbdGFjSOIsq -EOcKjvbdwuNFQyLn -DnbjjvbdIsZAsMwl -DncKjvbdptTgRqkU -DncKjvbdZQmEiNEq -DnbkKvbdauCHYLTh -EPDLKvbdyzdmrHhh -EPCjjvbdZoOJFEyj -EOcLKvbdUQqOttgm -DoCjjvbdRNYCZNtz -EPDKjvbdrRtkOLBN -DncLKvbdmajWxOmu -EPDLKvbdLBLHMbXq -DoDLKvbdCIjajhfK -EObjjvbdYkrDtOMN -EOcLKvbdUtNUGMVj -EObjjvbdaSFcHsek -DnbkKvbdXrkaMtPY -DoCkKvbdZQmFImFR -EOcLKvbdcJMijewY -EPDLKvbdGLErbhNV -DnbkKvbdiUydwSVC -EPDLKvbddndsKssr -DoDLKvbdxwhjCPzL -DoCkKvbdxVMeQxkn -DncKjvbdiBoCdwRR -EPDLKvbdnPyyVkZC -EPCjjvbdmuUzLKRf -DoDLKvbdSQUGiecw -DoDKjvbdRbDdlJZL -DncKjvbdqrVKnLAm -DoDKjvbdVBCQsQrZ -DoDKjvbdmbKWxPNu -EObjjvbdFVyQPmKF -DnbjjvbdiiehJlxS -EOcKjvbdIrxaSmYM -EOcKjvbdsZkosAgn -EOcLKvbdnCKWxPOV -EPDLKvbdKWUecdfi -DncLKvbdhgKDZWKV -EPDLKvbdySnImSCH -EObkKvbdJKEAKQGd -EOcLKvbdZMSETmkm -DoCjjvbdhgJcYujV -EOcLKvbdehLVqmpg -DoCkKvbdezuyFItX -DncLKvbdvBDxsOeI -EObkKvbdTulPisaR -DnbkKvbdajkfPODA -DoDKjvbdYkrEUOLm -EPCkKvbdfIKvSNpg -EPCkKvbdiBncEwQq -EOcKjvbdKWUecdgJ -EObkKvbdYlRcsmkm -EPCjjvbddwzUTqez -DnbjjvbdeYZstRez -EPDLKvbdxVNEqZLn -DncLKvbdFjeScINV -EObjjvbdxUleQxkn -DncKjvbdKWUfDdfi -DoDLKvbdssRrxzEc -EObjjvbdRpUGiedX -EOcLKvbdZQleJMdq -DnbkKvbdqdFIpNua -EPCjjvbdYzberKWZ -DoDKjvbdxxIjBoyk -EOcLKvbdEObkKwDE -DoDLKvbdqquLNjaN -DncKjvbdwuNFRZLn -DoCjjvbdqUTgRrKt -EObkKvbdVwIwvDeH -DnbkKvbdVwJYWEEg -DnbjjvbdYlSETnMN -DnbkKvbdqTsgRqjt -DoDKjvbdiGicZVjV -DnbjjvbdxnTHxTJD -EObkKvbdqUTfrSKt -DoCkKvbdFyVVBEXb -EOcKjvbdqGDdsvAh -EPCkKvbdTkunaVni -EObkKvbdMRvlzVQz -EPDKjvbdDncKkWbd -EObjjvbdqqtkNkBN -DncLKvbdfHkWRnRH -DnbjjvbdiLdcnUby -EOcKjvbdVYgsyjnn -EPCjjvbdUtNTfMWK -EPDKjvbdqYoHgREY -DncKjvbdGZUuAdYC -DnbjjvbdDnbjjwDE -EOcKjvbdTqQntthN -EOcLKvbdUyITzLPO -EOcLKvbdjblLRHVH -DoCkKvbdLGFhCBQu -DncLKvbdliEUQuSB -EObkKvbdRacdkiZL -EOcLKvbdaSFcHtFk -DoDKjvbdJYTahLpp -EPDLKvbdUQqOuVIN -EPCjjvbdqmZjYkhJ -DoCkKvbdRjyGUgKs -EObjjvbdyNrhYSiD -EPCkKvbdBhkCKiFj -EObjjvbdYlSDtOLm -DoCjjvbdTAFIhBoE -DncKjvbdNdctJIjd -DoDLKvbdGdKvJaij -EObjjvbdJpydnfNe -EPDLKvbdCDpAvKNG -DoDLKvbdeEoRavbj -DoCkKvbddoFSjssr -EPCjjvbdqYoHfqEY -EPCkKvbdFkFScHmV -EObjjvbdcyyQYZRC -DoDKjvbdyzdmrHhh -DoDKjvbdUWLojUAq -EObkKvbdiCPCdwRR -DoCkKvbdCTBDTevr -EOcKjvbdLAkGlbXq -EPDKjvbdcyyQXyRC -EPDLKvbdyNsHxSiD -EPDKjvbdqUTgRrKt -DoDKjvbdJuuFdEfi -DoDLKvbdEXwktTtM -EObkKvbdeJirVtzn -EObjjvbdYTMBMsnx -DnbkKvbdNQXpumfs -EPDLKvbdzitopDrt -DncLKvbdDxXlUUUM -EOcKjvbdADSXiyhp -DoCjjvbdqTsgSSKt -DoCkKvbdZtIhxdTO -EOcKjvbdUyHtZjnn -EPDLKvbdcSbkTdKB -DncLKvbdxZgfGYEr -DncKjvbdeATplxJf -DoDLKvbdnCJwXnmu -DnbkKvbdbKlFnnDA -DoCkKvbdrDeIpNua -EPCjjvbdmttzKirG -DoDKjvbdbrbkUDjB -DnbkKvbddZxoxZRC -EObkKvbdhgKDZWKV -DnbjjvbdGFiqmhtR -EPDKjvbdULvOaWPJ -EOcLKvbdygYlANFX -DnbjjvbdIHGzZYYH -EOcKjvbdhkeENuCy -EOcLKvbdNddTiJLE -EObjjvbdGFiqnJUR -EOcLKvbdjvWnEBxX -EPCjjvbdVBCRTRSZ -DncKjvbdVBCRTRSZ -EObkKvbdBdQAvJlf -EObkKvbdJYUCHkpp -EOcKjvbdGckVjCJj -EObkKvbdBsAcUGWr -DoDLKvbdIxUBhMQp -DoDKjvbdMgDQNPtk -EOcLKvbdHEKujCKK -DoCjjvbdLhalQxAS -EObkKvbdULuoBVoJ -EPDKjvbdhfjDZVjV -DoCkKvbdKDJbqJbx -DoCkKvbdbKlGPNcA -DncKjvbdrpVnicWG -EPDKjvbdvAdZSneI -DnbkKvbdFyVUaEYC -EOcKjvbdHDjuibJj -DnbjjvbdbiMjLFvx -EPCjjvbdUsltGLvK -DoCjjvbdkNBkzEgP -DncLKvbdFxtuBEYC -EOcKjvbdnBjWxPNu -DnbkKvbdqUTfrRjt -EPCjjvbdZHXEAPSi -DoCjjvbdxxJJapZk -DncKjvbdZyDimcLr -DnbjjvbdiBnbeWpq -EObjjvbdjbkkQftg -EObjjvbdqvokbhyR -EOcLKvbdeYZtTrFz -EPCkKvbdLqvmZtpz -DoDKjvbdNeDsiIjd -EPCkKvbdeXystRez -EOcKjvbdAMhZSvzY -EPCjjvbdSwkMNzkY -DoDKjvbdtlYXAtBX -EPCjjvbdBvzdIdov -DoDLKvbdVBBqSqRy -EOcLKvbdTvMQKUAq -EOcLKvbdxVMeQyMO -EPDLKvbdBsAbtGWr -DoCkKvbdKefHaaRV -DncLKvbdCTBDTewS -EPCjjvbdTIyjRAAl -DoDKjvbdkxsSSxft -EObjjvbdjvXOECXw -EPDKjvbdVTlsfLvK -EOcKjvbdjJfHjNXr -EObjjvbdfMfWflik -DnbkKvbdYqNFImEq -DoDLKvbdcJMikFvx -DoCkKvbdrXPlDIyR -EObjjvbdeOdsLTtS -DncLKvbdJSyArmXl -EObjjvbdkNBlZeHP -EObkKvbdfHkVqnRH -DncLKvbdKCjCqKDY -DoDLKvbdUyHsykOn -DncKjvbdWWiYWEEg -EPCkKvbdKWVFdEfi -EObkKvbdFpATWgFy -EOcKjvbdrzLpTAgn -EPCjjvbdhuZeWrVC -EPCkKvbdraellGjy -DncLKvbdGKeTCgmV -DoDLKvbdCEQAvJlf -DoDLKvbdJvUfEFGi -EOcKjvbdHDkVjCJj -EPCjjvbdZxdJnClS -DoCjjvbdcImJjewY -DoDLKvbdkDMLRHUg -DoDLKvbdqZOggREY -DoCkKvbdkMakyeHP -DoCkKvbdEvYpPmJe -DncLKvbdJJdAJpHE -DoDKjvbdEPCjkXCd -DnbjjvbdlAmOmALA -DoDLKvbdsBfNLgLZ -DncLKvbdKyQjSzuG -EPDLKvbdeAURMxJf -EPCjjvbdkHflGGOL -EOcKjvbdEuxpPlie -DncKjvbdcyyPxYqC -DoCkKvbdRDbaPqES -DncLKvbdaaVeFpQX -EOcLKvbdMuTSLNAX -EPCkKvbdbiMjKfWx -EOcKjvbdSCEEkiZL -DncKjvbdbhmJkGWx -DncKjvbdWXJYVcdg -EOcLKvbdvBDxrndh -DoCkKvbdCEQBVjNG -EPDLKvbdxUmFQyMO -DnbkKvbdznpRFCkx -DoCjjvbdKDJbpjDY -EOcLKvbdREDBQRDr -DoDLKvbdZtIhyETO -EObjjvbdKfGHbBQu -DnbjjvbdnUtzKirG -EPDLKvbdyNsHwsIc -DoCjjvbdIrxaSlxM -DoCkKvbdRjyFuHLT -EPCkKvbdJvUfDdgJ -DnbkKvbdgQBzvcwh -DnbkKvbdpyOgfqEY -DnbkKvbdmRxuZsEJ -EObkKvbdmRyUysDi -DnbjjvbdrzMPraIO -EPDLKvbdDxXksssl -EPDLKvbdqUUGrSKt -EPCjjvbdZisIPfbG -EPDLKvbdiGicZVjV -DnbjjvbdqcdiPnVa -DoDLKvbdGKdsCglu -EPCkKvbdYSlBNUOx -DoCkKvbdjmBkyeHP -EObjjvbdKDJcRKDY -EPDKjvbdiLdcmuCy -DoCjjvbdbAvEfQQX -EPDKjvbdegjvRmqH -EOcLKvbdrounibvG -DoCkKvbdliEUQtrB -DoCkKvbdrXPlChyR -DnbkKvbdcyxoxZRC -DoCkKvbdWIYWYHYz -DnbkKvbdmJETptrB -EObjjvbdbBVeGPpX -DoCkKvbdypnliKXA -EOcLKvbdatagXkTh -EPDKjvbdrounjDWG -EPDKjvbdUyHsyjnn -EPDKjvbddZxoxZRC -DnbjjvbdKCjCpjDY -DoCjjvbdKkBHvAJy -DnbjjvbdjbkkRGuH -DoCjjvbdrafNMGjy -DncKjvbdxnTHwsJD -DncKjvbdemFvfmJk -DnbjjvbdIwsbILqQ -EObjjvbdUMWPAvOi -EOcLKvbdGKdsChMu -DoCjjvbdWXIxWEEg -DoCjjvbdvPTzqKnt -DoDKjvbdILazmwRL -EPCkKvbdjlakzFHP -EPDLKvbdKDJbqKCx -EOcLKvbdHELWKBjK -DoCkKvbdOFDshhkE -EPDKjvbdBhkCKhej -DoDKjvbdNddTiJKd -EPCkKvbdVqmwadkc -EPCkKvbdFfKSOItR -EPCjjvbdZshiYcrn -DncLKvbdvAcxsOeI -EObkKvbdKVtfEFHJ -DncLKvbdXsMBNUPY -DoDLKvbdCTAbtGXS -DoDKjvbdRyjHsDWA -DoCjjvbdJcKDRJcY -EOcKjvbdEuxpPljF -DncLKvbduWNxKQsA -EOcLKvbdhuZeXSUb -EObjjvbdjvWnDaxX -EObjjvbdwWlAvAuu -EObkKvbdqquKnLBN -DoDLKvbddCSmSATm -DoCjjvbdwtmEpxlO -DnbjjvbdDoCkLWcE -DncLKvbdwyhGFxEr -EOcKjvbdrykosAgn -DnbjjvbdNeEUJJLE -DoDKjvbdjuwNdCYX -EPDKjvbdiGibyVjV -DnbjjvbdYqNEhmEq -EPDLKvbdxVNEpyLn -DoCjjvbdZeYGzgiC -DoCjjvbdZjTIQGbG -DnbkKvbdSPsfjGEX -EObjjvbdBsBDUGXS -DoCkKvbdsBfNMGkZ -EOcLKvbdLBLGmCXq -EPDKjvbdJTZBTNYM -DnbjjvbdJTZBSmYM -DoDLKvbdjKFgjNYS -DoDKjvbdqlzKYkhJ -EPCkKvbdkWXOECYX -EObkKvbdFkEsDINV -EObjjvbddndsKstS -DoCjjvbdauBfwjsh -DnbjjvbdFjeTCglu -EOcLKvbdfMfWflik -EObjjvbdlYsRryGt -EPCjjvbdtbcVWuoP -DnbjjvbdMgDPmQVL -DoDLKvbdjhHLefNk -EOcLKvbdUsmTfMWK -DoCkKvbdptTfqqjt -EObkKvbdrRuKmjaN -EPCjjvbdzoQQdcMY -DoDKjvbdrpVoKDVf -DoCkKvbdlZSrTYft -DoCjjvbdBhjajiFj -EOcLKvbdzoQQdbkx -EObkKvbdOhAYZAYa -EOcKjvbdjvXNdBww -DnbjjvbdEXwlTtTl -DoCkKvbdzjVPocsU -DoDLKvbdZQldiMeR -DncKjvbdYNqAYVVt -DnbjjvbdtvNxKRTA -EPCjjvbdqceIonWB -EOcKjvbdyXiKCPzL -DoCkKvbdfIKurNpg -DoDKjvbdFxuVAdYC -EOcLKvbdeOdrjssr -DncLKvbdxnShYTIc -EPDLKvbdoznEKwoA -DoDLKvbdptTfrRkU -DncLKvbdkWWnDaxX -EPCjjvbdKWVGDeHJ -EPCjjvbdtumwipsA -DoCkKvbdZxcinDMS -EObjjvbdCWzdIeQW -EPDKjvbdHgGzYwwg -EOcKjvbduDCtvvOo -DnbjjvbdqvokbiZR -DnbjjvbdmIcsptqa -DncLKvbdrJAJdmPF -EPCkKvbdKjaHvAJy -DoCkKvbdhuZdwSUb -EOcKjvbdnPzZVjyC -DoDKjvbdYSlAmUPY -EOcKjvbdffLzNgHA -DncLKvbdptUHRqjt -EPCjjvbdyTNiMqag -DoCjjvbdauBgXkTh -EPCjjvbdbiMikGXY -EOcLKvbdIHGzZXwg -DncKjvbdrXPkcIxq -DnbjjvbdOTTugEuQ -DnbkKvbdjcMKqHUg -DoDKjvbdffMZnHHA -DoCjjvbddijSWUzn -DncKjvbdBhkCKiGK -DncKjvbdJYTbHkqQ -DnbkKvbdqwPlCiZR -DoCkKvbdxUmFRYkn -DoDKjvbdmSZUzTDi -EPDLKvbdkyTSSxft -DoCjjvbdmajXYPOV -EPCkKvbdMowqVnHT -DncLKvbdTppoUuHm -EPDLKvbdgFkymfgA -EObjjvbdhgJcYujV -DncKjvbdtAGqIABS -DoDLKvbdqZOhGpdY -EObkKvbdjbkkRGuH -DoCjjvbdGLEsChNV -DnbjjvbdZoOIeEyj -DncLKvbdbrbjsdJa -EPCjjvbdGGJqmiTq -EPCkKvbdNPxRWNgT -EPCjjvbdJpydnfOF -EOcKjvbdcyxoxYpb -EPDKjvbdmozZWLYb -EObjjvbdVTmUFlVj -DoCjjvbdNrtWGduQ -DncKjvbdqUTfqqkU -DoDKjvbdTfznMWue -EOcLKvbdNsTugEuQ -DoDLKvbdjhHLfGOL -EObjjvbdZtJJYdSn -DoDKjvbdZjTHofbG -DncKjvbduCbtwVno -EPCkKvbdZtIhxcsO -EOcLKvbdnUuZkJqf -EObkKvbdiCPCeXQq -EOcKjvbdZtJIxcsO -EOcLKvbdZRNEhmFR -DnbkKvbdFjdsDINV -DncKjvbdsZlQSaIO -EObjjvbduLxXAtAw -DncKjvbddoFSjtTr -DoCkKvbdmbKXXoOV -DoDKjvbdOAIsTirA -DncLKvbdMfcQMpVL -EPDKjvbdsrqrxzFD -EOcLKvbdZRMdiMdq -EObkKvbdCTAbsfXS -EPDLKvbdtunYJpsA -EObkKvbdYSkaNToY -DoCkKvbdZMRdUOMN -EPCkKvbdIsYaSmYM -DncLKvbdVYgtZkPO -EObjjvbdaNLBsUmH -EOcLKvbdZyEKOCkr -DoDLKvbdOSsufdtp -DoDKjvbdhbPCdvqR -DnbkKvbdiZuFkpnG -DoDKjvbdHDjujCJj -EPDKjvbdCDpBVjMf -EObkKvbdeFOrBwDK -DoDLKvbdhgJbxvJu -EObjjvbdiZuFlQmf -EPDKjvbdeuzwpJzs -EPDKjvbdezuyEhsw -EPCkKvbdJYTbIMQp -DnbkKvbdkIHLeenL -DoCkKvbdAMgyTXZx -DnbkKvbdfIKvRnQg -EPDLKvbdJqZePFnF -DoCjjvbdRjxfVGkT -EOcLKvbdySmhlqbH -DnbjjvbdEYYMUTtM -DoDLKvbdhtydvquC -EObjjvbdZRMdiMdq -EPCjjvbdVZITzLOn -DoCkKvbdmuVZjjRf -DoCjjvbdzoQREbkx -DnbkKvbdkyTSSxgU -DoCjjvbdzRPNIjXA -EPDKjvbdnPyxvLZC -EOcKjvbdSZjHrbvA -EPCkKvbdShyjRABM -EObjjvbdYpmEiMeR -DoCjjvbdFaOqYizm -DncLKvbdEvZQQMjF -DncKjvbdNrtWGeVQ -DoDKjvbdqdFJPmvB -DnbjjvbdRXODblID -DoDLKvbdyzdnRhIh -EPCkKvbdcTCjsdKB -DncLKvbdJcKCqKCx -EObjjvbdmfdwmNgZ -EPDLKvbdqUTgSSLU -EObjjvbdZyEKODLr -EPDKjvbdTppoVVIN -DnbjjvbdFVyPpNJe -EPDKjvbdJYUBhLqQ -EPDLKvbdqceIpOWB -EPDLKvbdiBnbeXQq -DnbkKvbdGZVVBEYC -DncKjvbdGLFTDINV -EObjjvbdUGzmlXWF -EOcLKvbdxrmiMqbH -DoDLKvbdJpzEnenF -EObjjvbdEvYoomJe -DoDKjvbdJqZdoFme -EObjjvbdEuyPpMie -EOcKjvbdmtuZjjRf -EPDKjvbdjKGHilwr -EPCkKvbdpaIeAWgd -DoDKjvbdGZVUaDxC -DoCjjvbdFkErcHlu -EOcKjvbdrbFllGjy -DnbkKvbdMRwMzUpz -DoCkKvbdDxYLtTsl -EOcLKvbdLBKfmBxR -DoCjjvbdVwJYWDeH -DoCkKvbdZoOIdeZj -EPDLKvbdpfEFUWAh -EOcLKvbdKWVGDdfi -EObkKvbdtvNwipsA -DoCjjvbdwuNEqZMO -EObkKvbdfSBWzkbo -EPDLKvbdFxuVAdXb -DnbkKvbdRWnEClHc -EOcKjvbdkCkjqHUg -DoCjjvbdbsDKscia -EPDLKvbdzQoMiKXA -DnbkKvbdRDcApQcr -DoDKjvbdZtIiYcrn -DoDLKvbdqZPHgQdY -EObjjvbdyfxlAMeX -EObjjvbddjJrWUzn -EPDKjvbdjcMLQgVH -EOcLKvbdozmckXoA -EPDKjvbdcJMjLGWx -EPCkKvbdbhlijewY -EObjjvbdrEFJPnWB -EOcKjvbdmuVZjirG -DncKjvbdnBjXYOmu -DncLKvbdjcLjqHUg -EPDLKvbdlhdUQuRa -DoDKjvbdVwIwvEFH -EObkKvbdZMSDsnLm -DoDLKvbdzHZMAMdw -EOcKjvbdZMSDsnLm -DncKjvbdZshhyDsO -DncKjvbdCEPaWJlf -EOcKjvbdxxJKCQZk -EPCkKvbdezvZEiTw -EPDLKvbdypoMiKXA -EPCkKvbdnUuZjjRf -DnbkKvbdFfJqnJUR -DoCjjvbdTpqPUthN -DncKjvbdcyxoxYpb -EObkKvbdCSaCsfXS -DnbkKvbdRacdlIyL -DoCjjvbdTIzKRABM -EPCkKvbdatbGwjsh -EObjjvbdUsltGMWK -DoDLKvbdtvOXjQsA -DnbjjvbdYSlAmUPY -EOcKjvbdwuNEpxkn -EObkKvbdYqMdiMdq -EOcKjvbdnGeXlmgZ -DnbkKvbdqwQLcJYq -EObkKvbduVmxJqTA -EObjjvbdmoyyVkYb -DoDKjvbdBdPaWKMf -DncKjvbdVvhwvEFH -EObkKvbdauBfxLUI -EOcLKvbdMgDQNQUk -EOcKjvbdsQVnjCuf -EObkKvbdjuvnEBww -DoCkKvbdkWXODbXw -EPCkKvbdZyDjNblS -DoDKjvbdZLqdUNlN -DoDKjvbdbLMFoNcA -DoCkKvbdFVyQPmJe -EOcKjvbdhkdcmuCy -EPCkKvbdmtuZjiqf -DnbjjvbdRbEFLiYk -EPCkKvbdySnJMqag -EPDLKvbdhlFDnVCy -DoCjjvbdzoQREblY -EPCjjvbdvBEYroFI -EPCjjvbdJbjCqJcY -DnbkKvbdliEURUrB -DoDKjvbdOTUWGdtp -EOcLKvbdZnmhddzK -EPDKjvbdSBcdkiZL -DoCjjvbdZMRctOLm -DoDLKvbduCcUwVno -DoDLKvbdEzspeMDJ -EPCjjvbdULunaWOi -DoDLKvbdIwsaglQp -EObkKvbdJuuFdFGi -EPCkKvbdQccBQRDr -EPDKjvbdNrsugEtp -EPDLKvbdEXxLtUUM -DoDKjvbdVBCQsRRy -DncKjvbdeFPSCWcK -DoDLKvbdhficYvJu -DncKjvbdkClLRHVH -EOcLKvbduWNxKRTA -EObjjvbdNPwpumgT -DoCjjvbdjmCLzFGo -DncKjvbdZtIhxdSn -EObkKvbdKQyePFme -EPCjjvbdEuxpPljF -DoCkKvbdZtIhyDrn -EPDLKvbdJpzFOfNe -EPDKjvbduaEZTPFI -EPDLKvbdSQTgKFcw -EOcLKvbdBcpAujMf -EPCjjvbdfHkVrOQg -EPCjjvbdKaKflaxR -EObkKvbdZjTIQGaf -EOcLKvbdijGIKMwr -EPDLKvbdvBEZTOdh -DnbkKvbdZRNEhleR -DnbkKvbdijFgimXr -EObjjvbdEASIlywX -DoCjjvbdKaKgNCXq -EPDLKvbdTppoUuHm -EPCkKvbdwzHefYEr -EPCkKvbdhtyeWrUb -DnbkKvbdPyNAGsRj -EPDKjvbdmttzKiqf -DnbjjvbdRacdkhyL -EOcLKvbdeJjRvUzn -EObjjvbdNHCpNQVL -EPCjjvbdgLGzcGAE -DoCkKvbdidkGtoAO -DnbkKvbdKDJcRKCx -DnbjjvbdSQTgKGEX -EPDLKvbdyqPMiJwA -DnbkKvbdLrWlytpz -DnbjjvbdmgExNNgZ -EPCkKvbdlYsRrxgU -DnbjjvbdTkuoAvPJ -EOcKjvbdgFkymgHA -EPDLKvbdmaivxOnV -DnbjjvbdEztQeMDJ -EObjjvbdWfYzUAPT -DnbkKvbdiMEdNuDZ -DoDKjvbdgQBzwEXh -EOcLKvbdSBcdlIyL -DnbjjvbdrMzJxkhJ -DnbjjvbdddnrCXDK -DncLKvbdmbKXXnnV -DnbjjvbdYzbfSKWZ -EPCjjvbdUMWPBVoJ -EPDKjvbdBraDUGWr -DoCkKvbdFkFTDINV -DncKjvbdYkqdTmkm -DncKjvbdmpZyVjyC -DoCjjvbdZisIQHCG -DncLKvbdYqMeJMeR -EPDKjvbdZjTHpHBf -EOcLKvbdcJMikFwY -DoCkKvbdFpATXHGZ -DnbjjvbdVBBqSpqy -DoCkKvbddZyQXxpb -EOcLKvbdqlyiyMHi -EPDLKvbdfMfWgNJk -DoCjjvbdrNZjZLgi -EPCkKvbdeOdsKtTr -EPDKjvbdLrXMytpz -DncLKvbdQvnDcMHc -DoDLKvbdyYJJbPyk -DnbjjvbdrylPsBIO -DnbkKvbdTqROuUgm -DoCjjvbdcyyQYZRC -EObjjvbdbLMFnmcA -EObjjvbdbVCGxKsh -EObjjvbdelfWgMjL -EPDLKvbdnGdwmOGy -EPCkKvbdcTDLTdKB -DncLKvbdUxhTyjoO -EPCjjvbdwzHfFxEr -EPCjjvbdkxrqryHU -DncLKvbdDihJvYKA -EPCkKvbdRzJhScWA -EObjjvbdZHWdAOri -DoDLKvbdjbkkRGuH -DncKjvbdNVSrLNAX -DncKjvbdVqnYCElD -DnbjjvbdFWZPpMjF -DoCjjvbdZMRctNkm -EPCjjvbdRNXaxmtz -EOcLKvbdLZQjSztf -EObjjvbdePFSjssr -EOcKjvbdjbkkRHUg -EPDKjvbdcSbjtEJa -EObkKvbdKQzFPFme -DoCkKvbdnUtzKjRf -DncLKvbdeOeTKtUS -DoCjjvbdpstGqqjt -EOcKjvbdrpWPJcWG -EPCkKvbdwkXDgzyf -DncKjvbdnPyxvLYb -DoCkKvbdpxoIHRDx -DnbjjvbdLFegaaRV -EPCjjvbdrXQLcJYq -DncKjvbdWXJXvDdg -DnbjjvbdQdCaQRDr -EOcLKvbdWWiXuceH -DoCjjvbdbiNJkGXY -EPDKjvbdijGHjMxS -DoDLKvbdTfzmkwVe -EObkKvbdmSZUzTEJ -DnbjjvbdKefHaaRV -DncLKvbddoFSjstS -DncLKvbdSLYfUgKs -EPCkKvbdCIjbLJGK -DncKjvbdKNADzGuB -DoDKjvbdBcpBVjMf -DnbjjvbdpxoHfqEY -DoCjjvbdANHyTWyx -DoDKjvbdFjeSbgmV -DnbkKvbdxwiKCPzL -DncKjvbdqceIpNvB -DnbjjvbdLFfHbAqV -EPDLKvbdtTSTYydc -EPCjjvbdezvYdiTw -EObjjvbdWWiYVdFH -EOcLKvbdZyDjNbkr -EObkKvbdwzIFeweS -EPCjjvbdjmBkzFGo -EObjjvbdGAoRYizm -EObjjvbdjcMLQgVH -DoCjjvbddePRavbj -EOcKjvbdlhcspuSB -EPCjjvbdSCEFMJZL -EObkKvbdEYYLsssl -EObkKvbdpstGrSLU -DoDLKvbdIGgZxwwg -EObkKvbdWIYWYGxz -EPCjjvbdfILWSNqH -DnbkKvbdFWYpPljF -DoCjjvbdVAbRSqRy -EOcKjvbdeEoSCWcK -EOcKjvbdSBceMIxk -DoCjjvbdgFkzOGgA -EObkKvbdbPfgELzd -DnbjjvbdmtuZkJqf -EPCkKvbdYgWdAPSi -EObkKvbdmaiwXoOV -EOcKjvbdjuvnDbXw -DncLKvbdiBoCdvpq -DnbkKvbdZxcjNbkr -EPDKjvbdKfFgaaRV -DoDKjvbdNGcPlouL -EOcKjvbdHlBznXQk -EPCjjvbdKQydoFme -EPCjjvbdDxYLsssl -DoCjjvbdHbLydzAD -DnbkKvbdZisHofbG -DnbkKvbdvvkaWBWV -DncLKvbddxZtUSFz -EPCjjvbdBcpBWJlf -EObkKvbdVBBprpqy -DoCkKvbdaSFcITfL -DoCkKvbdZLqctOMN -EPDKjvbdFWYpQMie -DncKjvbdOEctJIjd -DoCkKvbdEuyQPmJe -DncLKvbdZGwEAOsJ -DncKjvbdlqyUzSci -EOcKjvbdKCibqKCx -DnbjjvbdEOcLKvbd -DncKjvbddneTLUUS -EPCjjvbdhbPDFWpq -DoCjjvbdeAUQmXjG -EPDKjvbdVwJYWDeH -DncKjvbdePFTKstS -DoCjjvbdjggMFemk -EPCjjvbdcScLUDjB -DoDKjvbdZjTIQGbG -EObjjvbdehKurNpg -DncLKvbdbsDLUEJa -EOcLKvbdEJgjWXjA -EPCkKvbdqquKnKaN -DnbjjvbdZjShQHCG -DoCjjvbdCEPaVilf -EObjjvbdzjUpQDrt -EOcLKvbdUVlPjUBR -DnbjjvbdeFPSCWbj -DoCkKvbdKxpirzuG -DncLKvbdrykpTAgn -DoDKjvbdemGXGljL -DncLKvbdTYKlNzkY -DncKjvbduaDyTOeI -EObkKvbdnBjWwoOV -EPCkKvbdGdLWKCJj -EPDKjvbdKeegaaQu -EObkKvbdxnShXrhc -DoCkKvbdsBemLgKy -EPCjjvbdrzLoraHn -EPDLKvbdrRuKmjaN -DncLKvbdmajWxPOV -DncKjvbdKVuGDeGi -EObjjvbdziuQPdTU -DnbkKvbdZxcinCkr -EPCkKvbdlqxtzTDi -EPCkKvbdyzeOSHiI -DnbkKvbdqmZiyMIJ -EOcLKvbdIwtBgkqQ -DncLKvbdfekzOHHA -EPCkKvbdKNADzGuB -EOcLKvbdUaBqSqRy -EPDKjvbdddnrBvbj -DncLKvbdmuVZjirG -EOcKjvbdbBWEepPw -DncLKvbdwjvdHzyf -EPDKjvbdmgFXlmgZ -EPCkKvbdtSqryZeD -EObkKvbdOFEUIhkE -EOcKjvbdiBncFXRR -DncLKvbdxZgeeweS -EPDLKvbdxwiKCPyk -EPDKjvbdHEKvJajK -DncKjvbdrafMlGjy -EOcLKvbdwWlBWBWV -DncLKvbdegjvRmqH -EObkKvbdehKvRmqH -DoDLKvbdUaBpsQrZ -EPDKjvbdRaceMJYk -DnbkKvbdZRNEhldq -DnbjjvbdKCibpjDY -DoDLKvbdKaLGmCXq -DncLKvbdKaKflbYR -DoCjjvbdZQleJNFR -EPCjjvbdZHWdAOsJ -EObkKvbdpxnggRDx -EPDKjvbdiUzFXSVC -DncKjvbdhfjDZWJu -DoCjjvbdYkrDtNlN -EOcLKvbdkVvmdBxX -DnbjjvbdFkFScHlu -DoCjjvbdlrYuZrci -EOcKjvbdrDdiPnWB -DoCjjvbdfoazvcwh -EPCkKvbdtkxWaUAw -EObjjvbdVYgsyjoO -EPCjjvbdssSTZZeD -DoCjjvbdbVBfwjsh -EPCjjvbdVgwuxGxz -EOcKjvbdZoNhdeZj -EPCkKvbdGYttaDwb -DncLKvbdvAcySoEh -DoDKjvbdIGfzZYYH -DoDKjvbdtcCtvvPP -EObjjvbdkxsRryHU -DnbkKvbdJSyBTMwl -DoCjjvbdsPuoJbuf -DnbjjvbdZxcimcMS -DoDKjvbdNGbpMouL -DnbjjvbdSZjHrbvA -DoCkKvbdmRxtysDi -EOcLKvbdZQmEiMeR -EPCjjvbdpfEEtVaI -EPCjjvbdtTRrxzEc -DoCkKvbdZdxGzghb -DncKjvbdrykpTBIO -EPCkKvbdxxIjCPyk -DncLKvbdCEQAujNG -EOcLKvbdrWokbhyR -EPDKjvbdjJehKMwr -DncLKvbdSxLMNzjx -DnbjjvbdZyDinDMS -EObjjvbdZirhQGaf -DncLKvbdkClKqHVH -EObkKvbdfIKvRmqH -DoDLKvbdQvmcblID -EPDKjvbdNsTufdtp -EObkKvbdZRMeIleR -DnbkKvbddwytTrFz -EObjjvbdZxdKODMS -EPCkKvbdSLZFtgKs -EPDKjvbdrovPJbuf -EPCjjvbdHgHZxxYH -EPCjjvbdddoSBvbj -DoDKjvbdegkVqmpg -DoDKjvbdCfkfHAzc -EObjjvbdtvNxJqTA -EPDKjvbdhtyeXSVC -EPDLKvbdUtMtGLvK -EPCjjvbdFaPRYizm -EPCkKvbdVZIUZkOn -EPDKjvbdFeiqnIsq -EObkKvbdddoRbWcK -EOcLKvbdaNLCSuMg -EObjjvbdFpATXGfZ -DncLKvbdrXPkcJYq -EPCjjvbdFjdrcHlu -EObkKvbdUQqPVUhN -DoDLKvbdpxoHfqDx -DncLKvbdypoNIjXA -EPCjjvbdmRxuZrdJ -EPDKjvbdqZPHgREY -EOcLKvbdZGwEAPTJ -DncLKvbdjuwNcbXw -DoCkKvbdTlWPBVoJ -DoCjjvbdRzKIScWA -EPDLKvbdZnnJFEzK -EPDLKvbdqvokbhyR -DnbkKvbdAMhZTWyx -EPCkKvbdqYoHgRDx -EPDKjvbdZtJJZETO -EObkKvbdWRmxBdlD -DnbkKvbdwWkaWBWV -DncKjvbdgKfzcGAE -DncLKvbdtbcUwVno -EOcLKvbdcImJjfWx -DncLKvbdSwjlNzjx -EObkKvbdjblLQftg -DncLKvbdQmYByNtz -DnbjjvbdhlFDmtby -DnbjjvbdcTDKsdJa -EPCkKvbdqUTgSRkU -EOcKjvbdZQleImEq -EOcLKvbdtTRrxzFD -EPCkKvbdUVkpKUAq -DncLKvbdmbJvwoNu -EPDKjvbdrJAKFMne -DncKjvbdpyOhGqEY -EOcLKvbdLrWlzVQz -DnbjjvbdvAdYsPFI -EPCkKvbdDoDKjvbd -DoDLKvbdelfWgMjL -EObkKvbdaMjbTUlg -EObjjvbduVmwjRTA -EPCjjvbdHffyxwwg -DnbkKvbdXrkaNToY -DoCjjvbdZshhyDrn -DoDKjvbdunszqKoU -EPCkKvbdmJDtRVSB -DnbkKvbdcImKLFwY -DoCjjvbdpedEtVaI -DnbjjvbduMXwAtBX -EPDLKvbdhbPDFWpq -EPCjjvbdrDdiQNua -DnbkKvbdKxpirzuG -EObkKvbdcTCjtEJa -DncLKvbdZQmFIldq -DoCkKvbdqUUGrRkU -DnbkKvbddZyQXyRC -DncLKvbdIryBTNXl -EPDKjvbduaDxrneI -DoCkKvbdZMSDsmlN -DoDKjvbdrovOjCvG -EOcLKvbdhyuFkpmf -DoDLKvbdddnrBwDK -DncKjvbdDwxLstTl -EPDLKvbddZxpXxpb -DoDKjvbdCSaDTewS -EPCkKvbdVqmxBeLc -DoCkKvbdZMSEUNkm -DnbkKvbdznopdcMY -EPCjjvbdqYoHgQcx -EPCkKvbdlhdUQuRa -EObjjvbdauBgYLUI -EObjjvbdySnJMrCH -EObjjvbdkIGlGGOL -DoCkKvbdwXMAvBWV -DnbjjvbdiCOcFXRR -EPCkKvbdIHGzZYXg -EPDKjvbdiMFDmuCy -EOcKjvbdtlXvaUBX -DoDLKvbdhfibxuiu -EPCkKvbdqwQMChxq -EObkKvbdRkYeuGjs -DoDKjvbdYkrEUNlN -EPDKjvbdZshiYcsO -DnbkKvbdQlxBxnUz -DncKjvbdSPtGifEX -DoDLKvbdmajXXoNu -EObjjvbdHbMZdzAD -EPCkKvbdZyEKNblS -EObkKvbdKfFgbBRV -EOcLKvbdOTUVgFVQ -DoCkKvbdfMevgMik -EPDKjvbdptTfrSKt -DnbkKvbdxZhFexFS -DncLKvbdUaBqTQrZ -DoCjjvbduDDUwWPP -DoDKjvbdNsUVfduQ -EObkKvbdvOszpjoU -EObkKvbdNsTvGdtp -EPDKjvbdxwhiapZk -DoDKjvbdiGjCxvJu -DoDLKvbdxxIibPyk -DncKjvbdvAdYroFI -EOcLKvbdLAkGmBwq -DncLKvbdIsYaTMxM -EPDLKvbdFejRmiUR -DoCkKvbdbrbjscia -DoDLKvbdiHJbyWJu -EOcKjvbdIwtBhMQp -EObkKvbdpfDdtVaI -EObjjvbdfMevfmJk -EObjjvbdptUHRrLU -EPDLKvbdYgXEAOri -EObkKvbdZoOJEeZj -DoDKjvbdqUUGqqjt -DnbjjvbdxnTHwriD -EPDKjvbdfHkWRmpg -EPDLKvbdePEsLUUS -EPCjjvbdEPCkLXDE -DoCjjvbdgQBzvdYI -DoCkKvbdZjSgogBf -EObkKvbdtunYKQsA -EPDKjvbdezvYdiTw -EPDLKvbdLBLGmCYR -EObkKvbdSLYfVHKs -EPDKjvbdfILWSNqH -EObjjvbdqlyixkhJ -DoCkKvbdjKFgjNXr -DoDLKvbdyzdmrHhh -DoDLKvbdYpleImEq -DoDKjvbdUxgtZkPO -EPDLKvbdJKEAKPgE -DoDKjvbdRXODblHc -DoCkKvbdmozYujxb -EOcKjvbdMgCpMouL -DncKjvbdZsiJZESn -EPCkKvbdzROmIiwA -DnbkKvbdEOcLKvbd -EPCjjvbdpxoIHRDx -DnbkKvbdEJgivXjA -DoDKjvbdfHjurOQg -EObjjvbdyYIjCPzL -DoCjjvbdvlvANEEm -DncLKvbdOXoVzdOU -EObkKvbdatagYKtI -DnbkKvbdGYtuAcwb -EObkKvbdegjuqnRH -DnbkKvbdtumxKQsA -DnbkKvbdIxTbILqQ -DncKjvbdIsZBTMxM -EPCjjvbdRjyFuHLT -EOcKjvbdJXtCIMQp -DoDKjvbdYkqdUOLm -EObjjvbdZsiIyESn -DnbkKvbdhtyeWrUb -EPCjjvbdEuyQPmKF -EOcLKvbdeFOrCWcK -DoDLKvbdEvYpPlie -DoCjjvbdZtJIyETO -EPCjjvbdrWokcJYq -DoDLKvbduaDySneI -DncLKvbdsPunjCuf -EObkKvbdpyOhGpcx -EObkKvbdliDsqUqa -DoDLKvbdhaoCeXQq -DncLKvbdaRfChUFk -EOcKjvbdYTMAlsoY -EPCkKvbdfkGzbfAE -EOcKjvbdURQnttgm -DoDLKvbdDoCjjvcE -DncLKvbdCJKbLJGK -EPDKjvbdhlFEOVDZ -DnbkKvbduCcVWvOo -EPCjjvbdQdDBPpcr -EObkKvbdbBVdeopX -DnbkKvbdWHwuwfxz -DoDLKvbdsrqrxzFD -DoDKjvbdCSaCsfXS -DoCkKvbdNPxQunGs -EPDLKvbdyzeNrHhh -EObjjvbdWXIwudFH -EPCjjvbdKWVFceHJ -EOcLKvbdqwPlCiZR -DncLKvbdyOTHwsJD -DncLKvbdxUleRZMO -DnbjjvbdZHWdAPTJ -DoDLKvbdePEsKstS -EPDKjvbdHDkVjBij -EObjjvbdSPtHJecw -EObjjvbdyTOJNRag -EOcKjvbdhfibxuiu -EOcKjvbdRDbaPqES -DnbjjvbdemGWflik -DoDKjvbdwjwEHzzG -EObjjvbdsCGNMGjy -DnbjjvbdssRsYyeD -DoDKjvbdJvVFceGi -EPCkKvbdLZQjSzuG -DoDLKvbdqUUHSSLU -EPCjjvbdaaWEeoow -EPCjjvbdDjHiuxKA -EPDKjvbdZQmFIleR -DoDKjvbdRDbaPpdS -EPCjjvbdZoOJFFZj -EObjjvbdQmYBxnUz -EPDKjvbdKCibqKDY -DoDLKvbdsCFmMGjy -DncKjvbdKaKgMaxR -DoCjjvbdrMzJxkhJ -EObkKvbdeKKRutzn -EPCkKvbdcTCjscjB -EPCkKvbdZsiIyDrn -EObjjvbdnBjXXoOV -DoDKjvbdBiKakIfK -EOcKjvbdRpTfjGEX -DoCkKvbdtSqrxydc -EObkKvbdHDkVjBij -DncLKvbdqTsgSSLU -DncLKvbdzdzOzdzQ -DoDLKvbdVrNwadlD -DncLKvbdSQUGifEX -DncLKvbdxxJKBoyk -EPCjjvbdrzLpSaIO -DnbkKvbdhtyeXRuC -DoDKjvbdyTOImSBg -EPDLKvbddZxpXxqC -DoCkKvbdZMSDsnLm -DncLKvbdEARhlzXX -EPDKjvbdkWXOECYX -EObkKvbdSLYetgLT -EPDKjvbdTfznLvvF -DoCjjvbdSZjHrcWA -DncKjvbdmJDsptqa -EOcLKvbdZxdJmblS -DnbjjvbdKWUfDeHJ -EPCkKvbdLiBkpxAS -EObkKvbdePFSkTtS -DoDKjvbdYzbfSKWZ -EPCjjvbdvAdYsPFI -EObkKvbdTAFJIBnd -DnbkKvbdsZkpSaHn -DoDLKvbdczZQYZRC -EPDKjvbdTvMQKTaR -DnbkKvbdyYJKCQZk -EPCkKvbdVAaqTQqy -EOcLKvbdbPfgDkzd -EObkKvbdePErjssr -EPDLKvbdyTOJNRag -EPDLKvbdyTNiNSBg -DoCjjvbdqvpMCiYq -DoDKjvbdRpUHKGEX -DoCjjvbdDoCkLWbd -DncLKvbddCTNSATm -DoCkKvbdcSbkUEJa -EPDLKvbdzjVPocrt -DnbkKvbdxVNFQyLn -DnbkKvbdSKyFtfkT -DoCkKvbdmpZxukZC -DncLKvbdGFjSOJTq -EOcKjvbdhkdcmtcZ -DoCjjvbdyzeORghh -EPCkKvbdRbDeMJZL -DoDLKvbdZMRctOMN -EObjjvbdAMgySvyx -EOcLKvbdTYLMNzkY -DnbjjvbdmuVZjjSG -DnbkKvbdZsiIyDrn -EPDLKvbdjEjfuPAO -DoCjjvbdkxrrSxgU -DncKjvbdSLYfUfkT -DnbjjvbdBcpAvJmG -DoDLKvbdSPsgKFcw -DoCkKvbdrXQMDIyR -EObkKvbdKVuFdEfi -DnbkKvbdrSVLOLBN -DoDKjvbdZnmhdeZj -DoDKjvbdNHDQNPuL -DoDKjvbdpyOggREY -DoCkKvbdQvmcblID -EPCkKvbdMfbomQVL -EPCjjvbdNVTRjmAX -EOcKjvbdbhlijevx -EObkKvbdWWiXvEFH -DncKjvbdlqyVZrdJ -DnbjjvbdrSUkNjaN -DncLKvbdmSZUzTDi -EObjjvbdZQmEhmEq -EOcKjvbdiLdcnVDZ -EObkKvbdySmhlqag -DnbjjvbdbUagYLTh -DncKjvbdBdQAvKNG -DncLKvbdyzdnRghh -EObkKvbdLZRKSztf -DoDLKvbdRXOEDMHc -DncKjvbdFkFSbgmV -EPCjjvbdZQldiMeR -EPDLKvbdFfJqmiTq -EOcLKvbdpssgRrKt -DnbjjvbdKRZeOeme -DnbkKvbdnPzYvLZC -DoDLKvbdUVlQJsaR -EPCjjvbdqFceTvAh -EPDKjvbdEARhlyvw -EPCjjvbdNGbolotk -DoCjjvbdVhYWXgYz -DoCjjvbdUtMtFkvK -DncKjvbdZQldhleR -DnbjjvbdCEPaWKMf -EObjjvbduWOXjQsA -EOcKjvbdIjEAKPfd -DoCjjvbdURRPUuIN -EObkKvbdbhmKKfWx -DoDKjvbdxrnJMrCH -EObjjvbdGFirNiTq -DoDLKvbdtSqsZZeD -EPDLKvbdKkAhWAJy -EPCkKvbdbVBgYKsh -DoCjjvbdKWVFdFGi -EPDKjvbdwXMAuaWV -DoCkKvbdRXNdCkhD -EPCjjvbdZRMdhmEq -DncLKvbdcJMijfWx -DnbkKvbdZRNEiNFR -EObjjvbdAMhYrvyx -EPDLKvbdijGIJmXr -DoCkKvbdbhmJjfXY -EOcLKvbdrzMQTBHn -DnbkKvbdKVtfEEfi -EPCkKvbdxVNFRZMO -EPDLKvbdjcMLQgUg -EObjjvbdjuwODbXw -EObkKvbdZeXfzhJC -EPCkKvbdUyITyjoO -EPCkKvbdGFjRnIsq -DnbjjvbdIwsbHlRQ -DncKjvbdtTSTYzEc -EPDKjvbdhfjCyWKV -DoCjjvbdhytelQnG -DoDKjvbdxnTHxTIc -EOcKjvbdUQqPUtgm -EPDLKvbdkNCMZdgP -DnbkKvbdGKeTDINV -EOcLKvbdZMRcsmlN -DnbjjvbdRXNdCkgc -DoCjjvbdRXNccMHc -EObkKvbdRjyFuGjs -EPDLKvbdmJDtRUrB -DoDLKvbdpyPIGpdY -EPCjjvbdkNCLzEgP -DoDLKvbdZoNiFEzK -DoDKjvbdKVuFcdfi -DoDKjvbdqZOggQdY -EPCkKvbdSQTgJecw -EOcKjvbdrRuKnLAm -EObkKvbdbUbHYLUI -EOcLKvbdyNrgwsJD -DoDKjvbdegkVqnQg -DnbkKvbdGBOpxizm -EObkKvbdJbjDQicY -DncLKvbdSLZFuGjs -DoCkKvbdGckVibJj -DoCkKvbdzeZnzdyp -EObjjvbdxxJKCQZk -EObjjvbdJpzFPGNe -EPCkKvbdUsltGLvK -DoDLKvbdziuQQDsU -DncLKvbdRzKIScWA -DoCkKvbdSLYfVGjs -EPCjjvbdhgKDYujV -DoDKjvbdtunXjQsA -EPDKjvbdqceJPnWB -DncKjvbdUQqOuUhN -EOcKjvbdJvVFceHJ -EPCkKvbdMfcPmQVL -EObkKvbdNrsufdtp -DncLKvbdUQpnuUhN -DncKjvbdYkqdUOMN -EObkKvbdqceJQNvB -EPDLKvbdCWzdJFPv -DncKjvbdauBfxLTh -DncKjvbdZnnJEdyj -DncLKvbdEvYpPlie -DoDLKvbdhaoCdvpq -EObkKvbdCEQBVimG -EOcKjvbdBiKbKhfK -DnbkKvbdeuzwpJzs -DncLKvbdhlEcnVDZ -EObkKvbdkCkjpftg -DncKjvbdZQldhmEq -DoDKjvbdFyVVBEXb -DncKjvbdZirgogCG -EPCkKvbdWXJXvEFH -DnbkKvbdOStVfduQ -DnbkKvbdNGbpMouL -EObkKvbdcIljKfXY -DoDLKvbdXrlBMsnx -EOcLKvbdfNFwGmJk -EObjjvbdUQqPUuHm -DnbjjvbdEXxLtUTl -EPDKjvbdLGFhCBQu -DncKjvbdTYLLmzkY -DoCkKvbdkaNPNALA -DoCjjvbdFxtuBDwb -EPDLKvbdGGJrNhsq -DoCkKvbdZyEJnDLr -EObkKvbdDxXlTssl -EPCkKvbdGKdrbglu -EOcLKvbdmoyyVjxb -DnbkKvbdRNYByNtz -EObjjvbdGFirOItR -DoCjjvbdxUmFRZLn -EPCkKvbdsQWPJcWG -EPCjjvbdegkWSORH -DncLKvbdYzcGRjVy -DoCkKvbdRXNcblHc -EObkKvbdwtldqYkn -DnbkKvbdZisHpGaf -EPCkKvbdGQASvfey -DnbjjvbdeFPRavbj -EOcLKvbdGZVVBEYC -EPCkKvbdKDKDQicY -EPCkKvbdUsmUFkuj -DoCkKvbdatbHXjtI -EObkKvbdlrYtyrdJ -DnbjjvbdjKGHilwr -EOcKjvbdjlakyeGo -DoDLKvbdnPzZVkZC -DnbjjvbdCIjbLJFj -DoCkKvbdegkWSORH -DoDLKvbdjvXODbYX -EPDKjvbdaaVeFoow -DncKjvbdwtmFRZLn -EObkKvbdkNCLzEfo -DncLKvbdrbGMlGkZ -EObjjvbdczZQXxqC -DoCkKvbduaEZTOdh -EObjjvbdZxcjNbkr -EOcKjvbdCJKbKiFj -DnbjjvbdjEkGuPAO -DnbjjvbdZshhyDsO -DoDLKvbdbsCkUDjB -DoCkKvbdNddUIhkE -EPDLKvbduVnYJpsA -DnbjjvbdQvmccMHc -DoDKjvbdDjIKWXjA -DoDLKvbdxZhGGYEr -EObkKvbdqquKmkBN -EObjjvbdLBLHMawq -DoDLKvbdrbFmLgLZ -EPDLKvbdddnrBwCj -DoCkKvbdbrcLUEKB -DoDKjvbdqlyjYlHi -DncKjvbdQwNdDMID -EObkKvbdBiLCKhej -EPCkKvbdSZigsDWA -DnbkKvbdwuNFRYlO -EPDLKvbduCbtvvOo -DnbjjvbdaaWFFpPw -EObkKvbdRECaQQdS -DncKjvbdyOShXsJD -EPCkKvbdFVyPomJe -DoDLKvbdcJMijevx -EObkKvbdSZigsCvA -EObjjvbdrNZjYlHi -DnbkKvbdKfFhBaRV -EPDLKvbdSLZFtgKs -EPDLKvbdrbGNMGjy -EPCjjvbddwzTtSFz -DoDLKvbdnGdxNNgZ -DncLKvbdTfzmlWue -EOcKjvbdbLLfOmcA -DoDLKvbdNGcQNPuL -DncLKvbdUaCQsQqy -EPCjjvbdCfkfHAzc -EPDKjvbdlrYuZsDi -EPDLKvbdmajXYPOV -EObjjvbduCcUvvOo -DoDLKvbdJXsahLqQ -EPCkKvbdOSsugEuQ -DnbkKvbduaDyTOeI -DncLKvbdYqNEhldq -EOcLKvbdeOdsKtUS -EOcKjvbdkHgLefOL -EPCkKvbdrpVoKCuf -EObjjvbdShzJqAAl -DnbjjvbdgPazwDxI -EPDLKvbdEztQdlDJ -DoDKjvbdYpmFImFR -DncLKvbdsBellHLZ -DoCjjvbdatbHYKsh -DoCjjvbdptTgRrLU -EOcLKvbdznpRFCkx -EPCjjvbdWWiYWEFH -EPCjjvbdRosgJedX -DnbjjvbdkIGkefOL -DnbjjvbdiZuGLqNf -EPCkKvbdANIZTWyx -EObjjvbdZQmFJMdq -EObkKvbdjvWmcbYX -DncLKvbdRbEFMJYk -EOcKjvbdpfDdtVaI -EPDKjvbdJqZePFnF -DnbjjvbdeFOqavcK -DoCjjvbdnHFXlnHZ -EPCjjvbdTvLpKTaR -EPDLKvbdVgxVxHYz -EObkKvbdZRNFJMdq -EPDLKvbdbUafwkUI -EObjjvbdKCjDQibx -EPDLKvbdrXPlChyR -DoCjjvbdxsNhlqbH -DoDKjvbdNGbomPtk -EPDLKvbdLBLGmBwq -DncLKvbdIsZBTNYM -EPDLKvbdOXnuzcmt -EPDKjvbdKDJcRJcY -EObkKvbdiBncFWqR -DncLKvbdlhcsqUrB -DncKjvbdrylQTAgn -DoDLKvbdTlWOaWOi -EPCkKvbdegjurNpg -EObjjvbdyTNhmSBg -EPCjjvbdQccBPpcr -EPDKjvbdeOeSkTtS -DoCjjvbdGYuVAdXb -EObjjvbdrzMPsAhO -DncLKvbdrEFJQOVa -EPCjjvbdbhmKKfWx -EPCkKvbdeYZssqez -DnbkKvbdURQntuHm -EPDLKvbdkDLkRHVH -EOcKjvbdlZSrSxft -EObkKvbdijGHimXr -EOcLKvbdpxnggQdY -DncKjvbdJKEAJpGd -EPCjjvbdMowpumfs -DoCkKvbdmSYtysDi -DoDLKvbdBsBDTfWr -EPDLKvbdrMzKZMHi -DnbkKvbdBraDUGWr -DnbjjvbdDxYMTtTl -DncKjvbdFyUuBEYC -EPCkKvbdVZITzKnn -DnbkKvbdTkvPBWPJ -EObkKvbdSQTfjFdX -DoCjjvbdZisIPgBf -EPCkKvbdLGFhCAqV -DoCjjvbdNGcQNPuL -DoCkKvbdqlzJyMIJ -EObjjvbdZtIiZDrn -DnbjjvbdeEoRawCj -DoDKjvbdUaBqSqRy -EOcLKvbdmfdwmOGy -DoDKjvbdptTfqrKt -DoDLKvbdvAcxsPEh -DoCkKvbdySmhmRbH -EOcLKvbdhfjDZWKV -EOcKjvbdHffzZXxH -DoDKjvbdLFfHaaQu -EPCjjvbdgFlZmfgA -EOcKjvbdtcCuXVno -DoDLKvbdZirgpGbG -EObjjvbdNsUWHEuQ -DoDLKvbdsBfNLgKy -DoDKjvbdGGKRnJUR -DoDLKvbdKkAhWAKZ -DnbjjvbdOFDtJJKd -EPCjjvbdMuSrKmAX -DnbjjvbdyXiKBpZk -DncLKvbdOFDtIhjd -DoDKjvbdNPxQumgT -DnbjjvbdrSVLOKaN -EPCjjvbdmJDtRVRa -EPCkKvbdZeXfzgiC -DoDKjvbdhaoCdwRR -DncKjvbdiBncFXRR -EPDLKvbdvBEYrndh -DnbjjvbdBiLBkIfK -EPDLKvbdhgJbyVjV -DncKjvbdzRPNIiwA -DnbjjvbdegjvRmpg -DncLKvbdyYIibQZk -EPCkKvbdxnTIXrhc -EPCkKvbdhkeEOUby -DnbkKvbdjJehKMxS -DoDKjvbdkVwODbYX -EPCkKvbdFWYpQNKF -EPCjjvbdXrkaMsnx -EPDKjvbdRjxetgLT -DoDKjvbdEztRFLbi -DnbkKvbdqdFJQNua -EPDLKvbdTqQntthN -DoDLKvbdYORAXtvU -DnbjjvbdEYXksstM -EPDKjvbdkMbMZdfo -DncLKvbdJKEAKQGd -EOcKjvbdFejSOJUR -DoCjjvbdYlRdTmkm -DoDKjvbdlYrqrxgU -EPDKjvbdKVuFdFGi -EOcLKvbdJqZeOfNe -DnbkKvbdzoPpdcLx -DoDKjvbddePSCXCj -DoDKjvbdEASIlywX -DoCjjvbdrEEiPmua -EPCkKvbdidkGuPAO -EObjjvbdKRZdnfNe -DncKjvbdhgJcZWJu -EPDLKvbdZxcimbkr -EPDKjvbdNeEUIiKd -EOcKjvbdvAdZSndh -DncLKvbdjggMGGNk -EObkKvbdOStVgFUp -EPCkKvbdRaceMIxk -DncKjvbdDwxMUUUM -DncKjvbdWeyZtAPT -EPCjjvbdEYXkstTl -EOcKjvbdxsOJNSBg -EPCkKvbdKQzFPFnF -EOcLKvbdJXtCHkpp -DoCjjvbdtlYXBUBX -EPCjjvbdwuNFRYkn -DoDLKvbdkDLjpfuH -EPDKjvbdxrmhlqbH -EOcLKvbdjmCLzEgP -DoCjjvbduaEYsPFI -EPCkKvbdCEPaWJmG -DncKjvbdwtmEpxlO -EPCkKvbdJbjCpjCx -DnbjjvbdhzVGMRNf -EPCkKvbdZxcinDMS -DoCkKvbdrNZiyLgi -EOcLKvbdIHGyyYYH -EObkKvbdYNqAXuWU -EPDKjvbdtvNwjRTA -EPCkKvbdcJMjLFvx -EPCjjvbdNrsvHEuQ -DoCjjvbdnGeYMmgZ -DoDLKvbdSLZGUfjs -EPDKjvbdtvOYKRTA -DoDKjvbdziuPpESt -DoCkKvbdMgDPlotk -DoCkKvbdeFOrCXDK -DnbkKvbdMgColpUk -EPCkKvbdKVuFdFGi -DoDLKvbduCcUvuoP -DoCkKvbdRDcAopdS -EPDLKvbdehKvSNpg -EOcKjvbdDoCjjvbd -DoCjjvbdOSsufdtp -EObjjvbdGQASwGfZ -DncLKvbdiHJcYujV -DncKjvbdRadFMJZL -EPDLKvbdZxcinDLr -EPDLKvbdhaoDFXQq -DoDKjvbdcJNJkGXY -DoDLKvbduaDySoEh -EOcKjvbdUxhUZkPO -DncLKvbdVYhTzKoO -DnbjjvbdehKvRnQg -DnbkKvbdOhAXyAYa -DncLKvbdxsNiNRag -DoDLKvbdTppoVUgm -EObkKvbdURROuVIN -EOcLKvbdNsTugFVQ -DoCkKvbdrXPlChxq -EPDKjvbdHDkWJajK -DoCkKvbdxnTHxTIc -EPDKjvbdEvZPoljF -EPDKjvbdrzMQTBIO -EPCjjvbdqZPHgQcx -DoCkKvbdVqmxCFMD -DncLKvbdSPsgKGEX -DoCkKvbdzjVPodSt -DoDKjvbdnUtyjiqf -DnbjjvbdIBkydzAD -DoDKjvbdcTDKscjB -EOcKjvbdiHKDYuiu -DncKjvbdBraDUFvr -DoCjjvbdQmYCZOUz -EPCkKvbdySnIlqbH -DnbkKvbdkDLjqGuH -DnbjjvbdVqnYCFMD -DncLKvbdGKeTCglu -DncKjvbdlZSqrxft -DncLKvbdrEEhpNvB -EOcLKvbdrDeJQNvB -EPCkKvbdQmXbYmtz -DoCkKvbdQlxCYnUz -EPCjjvbdEObkLWbd -EPDLKvbdehKuqmqH -EPCkKvbdkCkjpfuH -DncKjvbdRXNcblHc -EPCjjvbdsrqrxydc -EPDKjvbdddoSBvcK -EPCjjvbdADRxJzIp -EPDLKvbdvAcxsPEh -EPDKjvbdSLYfUgLT -DoCkKvbdsrrTYyeD -DoCkKvbdLFegbApu -EPCjjvbdyqOliJwA -EPDKjvbdqTtGrRjt -EPCkKvbdhbObdvqR -EPCjjvbdcScLUEJa -DoDLKvbdRWnDblID -EObkKvbdZLrETnLm -DoDKjvbdiBoDEvpq -DoDKjvbdMpXqVmfs -EPCjjvbdpxngfpcx -DncKjvbdsCGNLfjy -DncKjvbdRjyGVHLT -EPDKjvbdkHflGFmk -DoDKjvbdlhdUQuSB -EPCjjvbdKaLGlbXq -EPCkKvbdVhXvXgYz -EOcLKvbdKyQirztf -EOcLKvbdliDsqVRa -DncKjvbdJutfDdfi -DoDKjvbdEXwksssl -DncLKvbdxxIjCPyk -EObkKvbdKaKgMaxR -EPDKjvbdkCkjpgUg -EOcLKvbdZLqctNlN -EPDKjvbdNddThhjd -EOcKjvbdYlSDsmlN -EPDLKvbdmgExNOGy -DoDKjvbdePErjstS -DnbkKvbdZQleIldq -DncKjvbdpssfrRkU -EOcKjvbdDxYMTtTl -EPCjjvbdySmhmSBg -EPDKjvbdiiehJlxS -EOcLKvbdFkFTDINV -EPCjjvbdVqmxCFMD -DncLKvbdIsZAsMwl -DncKjvbdBraDTfXS -EPDKjvbdmuUykJqf -DnbkKvbdFyVUaEXb -EObjjvbdzROmJJwA -DncKjvbdEYXlUUTl -EPDKjvbdBhjbKhfK -DoCjjvbdJpzEneme -DncLKvbdVwIwuceH -EPDKjvbdhfjDYuiu -EOcLKvbdFpASwHGZ -EPDKjvbdZoOJEdyj -DoDKjvbdqdEiPnWB -DoDKjvbdnBjXYPNu -DoCjjvbdiHKCxuiu -EOcKjvbdGLFTChMu -EOcKjvbdiMEdNtby -DnbkKvbdGdKujBij -DncKjvbdKQydneme -DnbkKvbdziuPocsU -DoDKjvbdmfdxNNgZ -EObjjvbdDxXlUTtM -EObjjvbddePSBwCj -EOcKjvbdNPxQvOHT -DnbkKvbdZHWdAOsJ -EPDLKvbdyqPNIiwA -DoCkKvbdpyPHfqDx -EPDLKvbdUslsekuj -EPCjjvbdiZtfLpnG -DoCkKvbdmSZVZsDi -EPCjjvbdpyOhGpcx -EPDLKvbdzitoodSt -DoDKjvbdVYhUZkOn -EObkKvbdBsAbtGWr -EPDKjvbdvBEYsOdh -EObkKvbdGcjuibKK -DncKjvbdeATqNYKG -DoCjjvbdKNAEZgVB -DncLKvbdqUUHSRjt -EOcLKvbdGcjuibJj -DoDLKvbdnBivxPOV -DnbkKvbdKCjDRKCx -DnbkKvbdrykosAgn -EOcKjvbdUaBqTRRy -EPCjjvbdcSbkTcjB -DoDLKvbdIxTbILpp -DoCjjvbdHDjuibJj -DncKjvbduaDxroFI -DoDKjvbdpedEtWBI -EOcKjvbdXsLaNTnx -EPCjjvbdYORAYVWU -DoCjjvbdYpleIleR -DoDKjvbdCDpAujMf -EPCkKvbdpxoHfpcx -DoCkKvbdUWMPisaR -EPCjjvbdmuUzKjSG -EPDKjvbdkxsRsYgU -EPCkKvbdZxcjNblS -DnbkKvbdbPffckzd -EPDKjvbdUVkpJtBR -DoCkKvbdvlvANEFN -EObkKvbdShyjRAAl -EPDKjvbdxrmhmSCH -DoDKjvbdjvXNcaww -EPDKjvbdkDLjqGuH -EObkKvbdhfibxuiu -EPCjjvbdlqyUyrci -EPDLKvbdFVxopMjF -EOcKjvbdqdEiPnWB -DncKjvbdrXPlChxq -DoCkKvbdxVMeRYkn -EPCjjvbdlhdUQtqa -EObjjvbdRotHKFcw -EObkKvbdwjvcgzzG -EPDLKvbdBhkBjiFj -EObjjvbdlZTSTZGt -DoCkKvbdkIHMFemk -EObjjvbddndrkTsr -DoDLKvbdFVxpQNKF -EPCjjvbdZsiJZETO -EObjjvbdiMFEOUby -DoCkKvbdhlFEOUby -EPCkKvbdrWolDIyR -EObjjvbdmajWwoOV -DoCkKvbdypoMiJwA -DoDKjvbdCDpAvKMf -EPDLKvbdzjVQQDrt -EObjjvbdjlakydfo -EObkKvbdJpyeOeme -DoDLKvbdiHJcYvJu -EOcLKvbdbsDKtEKB -EOcLKvbdrpWOjDVf -EObjjvbdelfWfmKL -EObjjvbdxnSgwriD -DnbkKvbdqlyjZLhJ -EPCkKvbdQdDBPqDr -EPCkKvbdRkYfUfjs -EObjjvbdhtydwSVC -DnbjjvbdWWhwvDdg -DoDLKvbdypnliKXA -DncLKvbdhfibxvKV -DncLKvbdxrmiNSCH -DncKjvbdUaBqSqRy -DoDKjvbdZMSDsmkm -DncLKvbdFjeScHmV -EPDLKvbdQYmAHSrK -DoCkKvbdUVlQJsaR -DoDKjvbdGKdsDHmV -EPCkKvbdkHgLfGNk -EPDKjvbdCIkCLJFj -DoCkKvbdrpWOicVf -DncLKvbdqmZiyMIJ -EObkKvbdNGcQMpUk -EOcLKvbdhfibxuiu -DoCjjvbdjcLjqHVH -EPDLKvbdZxdJnDMS -DncLKvbdHDkViajK -EPDKjvbdhytelRNf -EPDKjvbdZRNFIleR -EObjjvbdNQYRWNgT -EPCjjvbdNdcsiIkE -DoCkKvbdajkfOnDA -EPCjjvbdRNYCZOUz -EPCkKvbdBcpAvKNG -DncKjvbdqTsfqrLU -EPCjjvbdsZlQSaHn -EOcKjvbdqdFIpNvB -DoCjjvbdtbcUwWPP -EObjjvbdEYYMTtTl -EOcLKvbdgGLzNfgA -DoDLKvbdzdynzeZp -DnbjjvbdajlGPNcA -EPCjjvbdEJhJuxKA -EPCjjvbdLLBIWAJy -DnbkKvbdwzIFewdr -DoCkKvbdBvzciEpW -DoDKjvbdaNKasVNH -EPDLKvbdVviXudEg -EPDKjvbdcbSmSAUN -EPDKjvbdqcdiQNua -EPCkKvbdbBVdfPpX -EOcLKvbdrEFIpOVa -DoDKjvbdDigivXjA -DoDKjvbdYSlBMtPY -DoDKjvbdrRtjnLAm -DoDKjvbdKeegbApu -DnbkKvbdHgHZyXxH -EPCkKvbddwzUTrFz -DnbjjvbduDCtwWPP -EOcLKvbdaRfDHsfL -EPCjjvbddeOqbWbj -DncLKvbdOFDsiJLE -EObkKvbdSBceMIyL -EOcLKvbdrylQSaIO -DncLKvbdJcJcQjCx -EPCkKvbdaRfCgsek -EOcKjvbdzitoocsU -DoDKjvbdyzdnSIJI -EObkKvbddndsLTsr -DoDLKvbdcTDKtEKB -EPCkKvbddZyQYYpb -EPDLKvbdCIjakJFj -DncLKvbdLrWlzVQz -EOcKjvbdxrnIlqag -DncLKvbddeOrCWcK -DoCkKvbdRaceLiZL -EPCkKvbddePSCXCj -DoDKjvbdJpzFOeme -DoCkKvbdiMFEOUby -DncKjvbdUQqPVVHm -EOcLKvbdcSbjscjB -DnbjjvbdvPTzpjoU -EPDKjvbdEPDLKvbd -DncKjvbdvBEYsPEh -DnbjjvbdIxTbIMQp -DoDLKvbdZLrETnMN -EPCkKvbdZxdJmbkr -EPCjjvbdIidAKQHE -DncKjvbdrSUjmjaN -DnbkKvbdkaNOmALA -DnbkKvbdiGjCyViu -EPCjjvbdYkrDsmlN -EOcKjvbdypoMhjXA -DoCkKvbdiGjDZViu -DoDLKvbdZxcinClS -DoCjjvbdqUUGrSLU -DnbkKvbdYTLaNUPY -EObkKvbdehKurNpg -EOcKjvbdmRyVZrdJ -EObkKvbdZirhPgBf -EOcKjvbdpyOggQcx -DnbkKvbdfoazwEXh -DnbkKvbdmuUzLJqf -EPDLKvbdYlRdUOLm -DncKjvbdRjyFuGjs -DoDLKvbdQdDAopdS -DoCkKvbdmSYtysEJ -EObjjvbdQdDApRDr -DoDKjvbdyOTHxShc -EPDKjvbdptUHSRkU -EOcKjvbdLGGHaaRV -EOcLKvbdaaWFFopX -DoCjjvbdlBMnmALA -DnbjjvbdZnnIdeZj -DoCjjvbdZMRdUNkm -DoDLKvbdRMxByNtz -EPCkKvbdJYTahMRQ -DncLKvbdpyPIHQdY -DoCkKvbdVBCRTRRy -EOcLKvbdZyEKODLr -EObkKvbdRadEkiYk -EOcKjvbdcyyQXyRC -DnbkKvbdVqnXadkc -EPCkKvbdGKeTDIMu -DnbkKvbdrRtjnKaN -EObkKvbdFVxooljF -DoDKjvbdDoCjjvcE -DnbkKvbddneTLTsr -EPDKjvbdGcjvKCKK -EObjjvbdgPazvdYI -DoDKjvbdSLYfVHKs -DoCkKvbdEPCjkWbd -DnbjjvbdmaivxPOV -EObjjvbdJJdAJogE -DoDKjvbdhkddNtby -DoCkKvbdiCPDEwQq -EOcKjvbdmajXYOmu -DnbkKvbdqYngfqEY -EOcKjvbdTppoUuIN -EPDKjvbdNddThhkE -DncKjvbdDnbkKvbd -DnbjjvbdZRNEiNFR -EPCjjvbdaaWFFopX -EPDLKvbdBhjbKhej -DoCkKvbdfpBzvcwh -DoDKjvbdmSZVZrdJ -EObkKvbdbAueGQQX -EOcKjvbdNQXqWOGs -EPCjjvbdvAcySndh -EOcLKvbdySnImRag -EObkKvbdSxLLmzkY -DnbjjvbdcJMjLGXY -EObkKvbdBsBDUFwS -DoCjjvbdqlyjZLhJ -EPCjjvbdliEURVRa -DoDKjvbdptTgRrLU -DncKjvbdiBoCdwQq -EOcKjvbdEOcLLXDE -EObjjvbdEYYLtTsl -EPDKjvbdVTmTekuj -DncLKvbdLFegbBQu -EPCjjvbdmttzLKRf -EPDLKvbdpfEFTuaI -DncKjvbdiiegjMwr -EObkKvbdxVNEqYlO -DoCjjvbdRWnDblHc -EPCjjvbdaSFbgtGL -DnbkKvbdozmcjwoA -DoDKjvbdPyNAHSrK -DncLKvbdVqnXbEkc -EPCkKvbdFWYpQNJe -EOcLKvbdlYsRsZHU -EOcLKvbdQvmcblID -EObjjvbdRkYetfkT -DoCjjvbdFjdsDINV -EPCjjvbdrafNMGkZ -EPDKjvbdczZQXxqC -EPDLKvbdDwxLtTsl -DoCjjvbdFpASvffZ -DoCjjvbdiMEdOVCy -DoCkKvbdelevfljL -DnbjjvbdaSFcHtFk -DncKjvbdBhkBkIfK -EObjjvbdGKdsDHmV -DncLKvbdhzUekqOG -EOcLKvbdZshiZDrn -DncLKvbdDjIJuwjA -EPCjjvbdpxoHfqEY -EPCjjvbdOAIrsjSA -EPDLKvbdEuyPolie -EPDKjvbdssRrxydc -EPDKjvbdjlakzEgP -DncKjvbdiUydwRuC -DoCkKvbdZMSDtNkm -EPDLKvbdbBVeGQPw -EObkKvbdNHDPlpVL -DoDLKvbdDjHiuxKA -EPDKjvbdatbGwkUI -DnbjjvbdeqaWzkbo -DoDKjvbdvvlBWAuu -EObjjvbdZirhQHBf -EPCkKvbdDncLKvcE -DnbjjvbdehKvSNpg -DncKjvbdVwIwudFH -DoCjjvbdNQYRVmgT -EOcKjvbdNrtWGeUp -DncKjvbdvvlAvAuu -DnbkKvbdjKGHimXr -EObjjvbdhkddNuDZ -EPCkKvbdNddThhkE -EPCjjvbdsPunjDVf -EPDKjvbdxZgfFwdr -DncKjvbdZyDjNblS -EPDKjvbdjcMLQfuH -DncKjvbdwtmFRZMO -DncKjvbdVhXuwgYz -DoCkKvbdVZITyjnn -EPCkKvbdNrtWHEtp -EPCjjvbdMfbomQUk -EObkKvbddwyssqez -EPCkKvbdhfjCyVjV -DoDKjvbdtvOYJpsA -DoDKjvbdiLdcnVCy -EObkKvbdLrWlzUpz -DoCkKvbdSPsgKFdX -EPCjjvbdkNCLyeGo -DncKjvbdCSaCtGWr -DnbjjvbdRkZFtgLT -DoCkKvbdVAaprprZ -DnbjjvbdyXhibQZk -DoCkKvbdsQVnibvG -EPCjjvbduaDyTPFI -DncLKvbdUaCRSpqy -DoDLKvbdnPzYukZC -DoDKjvbdRWnDcMHc -EOcKjvbdxVNFRZLn -EOcKjvbdRkZGUfkT -DnbkKvbdvmWAMdEm -EOcKjvbdmbKXYOmu -EPCkKvbdyXiKCPyk -DnbkKvbdkHgMFfOL -DncKjvbdVYgtZkPO -EPCkKvbdDnbkKwCd -EObkKvbdKfGHaaRV -EPCkKvbdqZOggQdY -EOcLKvbdTlVnaVoJ -DoCkKvbdhanbeWqR -DnbkKvbdypoMiJwA -DnbkKvbduMXvaUBX -DoDKjvbddiirWUzn -EObkKvbdqYoHgQcx -DnbjjvbdFyUuBDwb -DoCkKvbdKCicQjDY -EPDLKvbdezvYeJTw -EPCjjvbdSxKlNzkY -DoDKjvbdQmYByOUz -DnbjjvbdIGgZxxXg -EPDKjvbdqmZjZLgi -DncKjvbdmfeYMmgZ -DncLKvbdGdLVibKK -DoCkKvbdZGvdAOsJ -EObkKvbdjSzhrkJz -EPDLKvbddePRbWcK -EObjjvbdDxXkstUM -DoCjjvbdvlvANDeN -EOcKjvbdrDdiQOWB -DoCkKvbdmajXXoOV -DncKjvbdUtMsekvK -EOcLKvbdxxJKBoyk -EPDKjvbdqYnhGpcx -EObjjvbdatafwkTh -DncLKvbdajkenmcA -DnbjjvbdZQleImEq -EPCjjvbdDncLKwCd -EObjjvbdHELWKBij -EPDLKvbdxrmhmRag -DoCjjvbdwXMBWBVu -EObjjvbdsPvOjCvG -EOcLKvbdssSTZZdc -EPCkKvbddndrkUUS -EOcLKvbdNGbolotk -EObjjvbdZMSDtNlN -EObkKvbdZshiYcsO -DncKjvbdDwxLsstM -EOcLKvbdqZPIGqEY -EOcKjvbdZRNFImFR -EOcKjvbdrDeIonVa -DnbjjvbdYzberKWZ -EObjjvbdegjvRnQg -DoCkKvbduDDUwWOo -EPDKjvbdRotGjGEX -EOcKjvbdKQyeOeme -EPCjjvbdDwxMTtUM -EObjjvbdpedFTvAh -EPDLKvbdFxtuBDxC -DoCjjvbdlqxtzSdJ -DncKjvbdZLrDtOMN -EPCkKvbdGdKujBjK -DoCkKvbdezvYdiTw -DnbjjvbdrEEiQOVa -DncKjvbdOYPVzdOU -DnbjjvbdxwiKCPzL -EObkKvbdRpTgJecw -DoCkKvbdwtmEpxlO -EPDKjvbdqFceTuaI -DncKjvbdsPuoJcWG -DncLKvbdRyjHsCvA -EPCkKvbdyXiJaoyk -EPDLKvbdJvVFcdgJ -DncLKvbdrXPlChxq -EObjjvbdvBEZTOdh -DoDKjvbdqvokcJYq -EOcKjvbdlqxtzSci -EPDKjvbdFkErbglu -DoDKjvbdEPDLKvcE -EObkKvbdijFhJlxS -DoCjjvbdOFDtJJKd -DnbkKvbdyXhiapZk -DncKjvbdEXwlTtTl -DncLKvbdZyEKOCkr -DnbkKvbdqlyjYlIJ -EObkKvbdIGfyxwxH -DnbjjvbdyNrgxTIc -DnbkKvbdeOeSkTsr -EPCjjvbddZyPxZRC -DncLKvbdkDMKpgUg -EPDKjvbdfIKuqnQg -EPCkKvbdhlFENuDZ -DoDLKvbdiBoCdvqR -EPCkKvbdySnImRag -DnbjjvbdIxTahLqQ -DoDKjvbdZnmhddyj -EOcKjvbdgQBzwEXh -EPDLKvbdfILWSNqH -DncKjvbdjcMKqGtg -EObkKvbdKQzEnfNe -EPDKjvbdUQqPVVHm -EObjjvbdREDBPpcr -EObjjvbdnHExMnGy -DnbkKvbdvBDxrndh -DncKjvbdCEPaVimG -DnbkKvbdGBPQxizm -EPDKjvbdLqwMzVQz -DnbkKvbdEPDLLXDE -EPDKjvbdwWkaWBVu -EObkKvbdxrnImSCH -DncKjvbdsrqrxzEc -DnbkKvbdpfDeUWAh -EPDKjvbdjAQHApGj -DoCkKvbdaSGChTfL -DoDKjvbdiHJbxvKV -EPDLKvbdlhdURUqa -EPCjjvbdIwsahMRQ -EObjjvbdGYtuBEYC -DncLKvbdNeEThhkE -EObkKvbdBvzdIePv -EPCjjvbdbAueFpQX -EOcLKvbdjAQGaQGj -EPCjjvbdNHDQNPuL -DncLKvbddoFSkUUS -DncKjvbdACqxJzIp -DnbkKvbdxLWcgzyf -EPCkKvbdTlVnaWPJ -DoCkKvbdCJKbLIfK -DoCkKvbdDwxMUTtM -EPCkKvbdEPDLKwDE -EOcLKvbdTvMQKTaR -EOcLKvbdeXytTrFz -EPDKjvbdNUrrLNAX -DnbkKvbdZjShPgBf -EObjjvbdjAPfaQGj -EPCkKvbdYlRdUNlN -EPDKjvbdzjUoocsU -DoDLKvbdKDKCqJbx -EPCjjvbdQvnECkhD -DnbkKvbdGckVjBij -EObjjvbdXmqAXuVt -EPCjjvbdeFPRavcK -DoDKjvbdEYXlUTsl -DoCjjvbdXrlBNToY -DoDLKvbdrRuLNkAm -DncLKvbdDxXlUTtM -EOcKjvbdwuNEqZLn -EPDKjvbdEOcLLWbd -DoCkKvbdpfDdtVaI -EOcKjvbdmpZyVjyC -EOcKjvbdtSrSxzFD -EObkKvbdsBemLfjy -DoCjjvbdUGznMWue -DncLKvbdbAvEfPpX -DnbjjvbduCcUwVno -DoDLKvbdTppoUuIN -DncKjvbdYqMeImEq -DoCkKvbdrDdhomvB -EObjjvbdgFkzOGgA -EPDKjvbdSwjkmzjx -DoCjjvbdREDBPpcr -EObjjvbdYkrDtNlN -EObjjvbdZisHogCG -DncKjvbdUtMselWK -DoDKjvbdkHfkeemk -DncLKvbdSLYeuHLT -EOcLKvbdeFOrBwCj -EObjjvbdHDjvKCJj -DnbkKvbdkIGkeemk -DoCkKvbdZQmFJMeR -DoCkKvbdqTtGrSKt -DncLKvbdcIljKfWx -DnbjjvbdRjxfUgKs -DnbkKvbdhyuFlROG -EObkKvbdpxoHfpdY -DoDKjvbdhuZdwRtb -DnbkKvbdBdQAvKMf -DoCkKvbdVTlsekuj -EObkKvbdCJLBkIfK -EOcKjvbdmgFYNNgZ -EPDLKvbdxrnImRag -DoCjjvbdbKlGPODA -DoCjjvbdMoxRVmgT -EPDLKvbdKfGIBaRV -DoDKjvbdSCEElJZL -EPCkKvbdmRxtzSdJ -EPDKjvbdjKGIKNXr -DnbkKvbdlhdTptrB -EPDKjvbdBcoaVilf -EPDKjvbdRzKIScWA -EOcKjvbdnHFXmOGy -EPCjjvbdFfJrNhtR -DnbkKvbdzaAPHHCM -DnbkKvbdwXLaWBWV -DoDKjvbdKeegaaQu -EPCjjvbdRotHKFcw -EOcKjvbdnGeXmOGy -DoCjjvbdmIdTqVRa -DncLKvbdfNGWgMik -EPCkKvbdrovPJbuf -EObkKvbdEvYpPljF -DncLKvbdOYPVzdOU -EObjjvbdrzLosAhO -DnbjjvbdyzdnSIJI -EOcLKvbdIsZArmYM -DoDLKvbdvAdZTPEh -DoCkKvbdQvnDcMHc -EObjjvbduMYWaUBX -DncKjvbdUyHszLOn -EPCkKvbdbrbjscia -EObjjvbdTkunaVni -EObkKvbdeATpmYKG -EOcKjvbdqUTfqrLU -EPDLKvbdGYttaDxC -EPDKjvbdRNYByNtz -DncLKvbdADRwizJQ -DncLKvbdKfFgaaQu -EPDKjvbdxZhGGYFS -DncLKvbdwtmFRYlO -EOcLKvbdehLVrNqH -DnbkKvbdKxpirztf -DoCjjvbdZxdKNcLr -DoDLKvbdrbFmMGjy -DoDLKvbdqYnhHQcx -EPCjjvbdGKeTDIMu -EPCjjvbdZRNEhleR -DnbkKvbdfMfXGmJk -DnbjjvbdRjyGVHKs -EPDKjvbdZHXEAOri -EObjjvbdxnTIYTIc -DnbjjvbdTpqOttgm -EOcLKvbdWXIwuceH -EOcLKvbdzROmJKXA -EPCkKvbduCbtwWOo -DncLKvbdJTZBTMwl -EObkKvbdlqyUysDi -DnbjjvbdrpVoJcWG -DoCjjvbdHDjvKCKK -EObkKvbdVwJXvDeH -EPDKjvbdZsiJZDrn -DoCkKvbdhfjDYvJu -DoDLKvbdZyEJmcLr -DnbjjvbdmajXXoOV -DoCkKvbdelewGmKL -DoDLKvbdUtMsfMVj -EOcKjvbdegjuqmpg -DnbkKvbdZMRctNkm -DncKjvbdhlEdOUcZ -DoDLKvbdqAiFAXIE -EObjjvbddBsMrAUN -EPDKjvbdaSGDHtGL -DnbjjvbdbVCGwjtI -DncLKvbdzdzOzeZp -EPDKjvbdKQyePFnF -EPDLKvbdauBgXjtI -EPDLKvbdCSaCtGWr -DnbkKvbdbsCjtEKB -DoDKjvbdCWzdIeQW -EPCkKvbdRbDeLhxk -EObjjvbdOEctJIkE -DoCkKvbdSPtGiedX -DncKjvbddZyPxZRC -DnbjjvbdTukpKUBR -DoCjjvbdpstHRqkU -DncKjvbdNdctIhjd -EOcKjvbdUWMPjTaR -DoCkKvbdLGGHbApu -EObjjvbdmozZWLZC -EObjjvbdULvPAvOi -EPDLKvbdcJMikFvx -DncLKvbdjJfHjMxS -EPCjjvbdqYoIHREY -DoCjjvbdiifHjNXr -EObkKvbdZLrETnMN -DnbkKvbdtSqsYydc -EPDLKvbdCIkCLJFj -DoCkKvbdliDsqUrB -DnbkKvbdNPxQumgT -EPDKjvbdACrYJyiQ -EOcLKvbdYTMBMtOx -DoDLKvbdNGcQNPtk -DncKjvbdtbbtvuno -DncKjvbdZLrEUNlN -DoCkKvbdaogHELzd -DoCjjvbdgFlZmfgA -EPCjjvbdvPTzpkOt -DoCjjvbdjKGHjMxS -EPDLKvbdauBgXjsh -EOcLKvbdiBoCeWpq -EObkKvbdSPsfjGEX -DnbkKvbdzGxlAMeX -DoDLKvbdqFcdtWAh -EPCkKvbdOYOuzcmt -DoCjjvbdDwxLtUTl -DnbkKvbdOTUVgFUp -DnbkKvbdiGibyWJu -EPCjjvbdUyITzLOn -DoCkKvbdbLMFnnDA -DoCjjvbdDwxLsssl -DncLKvbdBiLBjhfK -EPDKjvbdNPwpvOGs -EObkKvbdzQnliKXA -DoCjjvbdeYZssqez -DoCjjvbdeATplxKG -EOcLKvbdRyjIScWA -EPDKjvbddeOqbWcK -EPDLKvbdACrXjZhp -DnbjjvbdmuVZkKSG -EPDKjvbdVqmwbFLc -EPCkKvbdCSaCtFwS -DnbjjvbdVZHszLPO -DoDKjvbdVrNxCFLc -EOcKjvbdegjuqnQg -EPCjjvbdZMSETmlN -EOcKjvbdHDjvKBjK -EPCkKvbdyOTIXsJD -DoDKjvbdnQZyWKxb -DncLKvbdxwhiaozL -DncLKvbdNdcshhkE -EPCjjvbdXnRAYUut -DoDLKvbdNsUWGeUp -DncKjvbdWHwuwfxz -DnbkKvbdRpUGifEX -DnbjjvbdEOcLKwCd -EPDKjvbduaEYsOeI -DnbkKvbdjhHLfFnL -DncLKvbdZoOJEeZj -EPCkKvbdEPCjjvcE -EObjjvbdxUldqYkn -EObkKvbdOEdThiLE -DnbkKvbdjcMKpgVH -EObjjvbdkIGkeenL -DncKjvbdZsiJZDrn -EPCkKvbdxnShXsIc -DoDKjvbdZnmiEdzK -DoCkKvbdVTmUGLvK -EOcLKvbduCcVXVno -EObjjvbdZQleJNFR -EObjjvbdFejRmhsq -EPDLKvbdaMkBruNH -DoCkKvbdNQXqWNgT -DoDKjvbdjuwNcbXw -EPCjjvbdSBceLiYk -DoCjjvbdMgColpVL -DoDLKvbdVZHtZkPO -DoDKjvbduMYXBUAw -EPDKjvbdNeDshiKd -DoDKjvbdTAFJICPE -EObjjvbdJvVFceGi -EObjjvbdNHCpMpUk -DnbkKvbdijGIKNYS -DoDLKvbdDncKkXCd -DncKjvbdkMakyeGo -EObkKvbdjKFgilwr -DoCkKvbdOhAXyAZB -DoCkKvbdUGznMWvF -EOcKjvbdRosfifEX -EPDLKvbdfNFvgMjL -EObkKvbdxxJJbPzL -EPCjjvbdQlxCYmtz -EOcLKvbdgPazwEXh -DoDLKvbdkySrTYft -DoDLKvbdhgKDYuiu -DoDKjvbdYkrETmkm -EObjjvbdNPwpunHT -EOcLKvbdYlRdUNlN -DnbkKvbdZLrDtOLm -EObjjvbdxrnJMrCH -EObjjvbdZnnIeFZj -DoCjjvbdzRPMhiwA -DncKjvbdssSSxyeD -EOcLKvbdjAPgAofj -DncKjvbdRosfifEX -DoDKjvbdEXwktUTl -DnbjjvbdWRmwadkc -EPDLKvbdeEoRavbj -DoDKjvbdXsMBNToY -DnbkKvbdVqmxCFLc -EOcKjvbdkVwOEBww -DoCjjvbdfNGXGmJk -EOcLKvbdmtuZjiqf -DoCkKvbdnPyyWKyC -EObjjvbdJpydoGNe -DnbkKvbdjJfHimYS -DoCkKvbdyXhjBozL -DoCjjvbdkIHLeenL -EOcLKvbdTAEiIBoE -DnbkKvbdvBDxsPFI -DncKjvbdlhdTpuRa -EObjjvbdFfJqmiUR -EPCjjvbderAvzkbo -DncLKvbdwygeexEr -EObjjvbdSBdElJZL -EOcKjvbdySmiMrBg -EPDKjvbdatbGwkTh -DncKjvbdnBivwnmu -EPDKjvbdFxuVAdYC -EPDLKvbdqlzJyMHi -EPDKjvbdZRMdhldq -DoCjjvbdNeDtIhkE -DoCkKvbdfMewGlik -EOcLKvbdhaoDEwQq -DnbjjvbdIwsagkqQ -DncKjvbdkIHMGFnL -DoDLKvbdGdKuibKK -DnbjjvbdTAEiICOd -DncLKvbdNeEThiKd -EObkKvbdYpmEiNFR -EPDLKvbdFkFTDHlu -DoCkKvbdkDLkRHUg -DnbkKvbdyYIjCPyk -DncLKvbdFVyQPmKF -DnbjjvbdZQldhldq -DoDKjvbdVqnYBdkc -EPDKjvbdSKxeuGkT -EPCjjvbdiZuGLqNf -DnbjjvbdJTZArmXl -DnbkKvbdyNrgwrhc -EOcLKvbdrNZiyLgi -DncKjvbdSBdFMJZL -EPCkKvbdfMfWfmKL -EPDLKvbdfMevfljL -DoCjjvbdmIcsqVRa -DoDLKvbdrEEhpOVa -EPDLKvbdZRMeImEq -DoDLKvbdyTNiMrBg -EPCjjvbdsQVnibvG -EOcKjvbdvBDxsPFI -DoDKjvbdqquKnKaN -DncLKvbdqGDeTuaI -EPCkKvbdZdxGzgiC -DoDKjvbdkDLkQftg -DoDKjvbdePEsKtUS -DoDKjvbdUxgtZjoO -DncLKvbdxUmFRYlO -DnbjjvbdwuMeRYkn -DoCkKvbdRWmdClID -EPDLKvbdCDpBWJlf -DncKjvbduaEYrneI -DnbjjvbdfHkVqmpg -EPDKjvbdKxpirzuG -DoDLKvbdZLqdUNkm -DoDLKvbdDwxMTstM -EOcKjvbdrzLosAhO -DnbjjvbdqZPHgQdY -EObkKvbdjggMFfNk -EPCjjvbdZMRcsmkm -EObjjvbdEJgiuxKA -DncLKvbdZtJJZDsO -EObkKvbdRjxeuGkT -DncKjvbdqdFJPmua -DoCkKvbdGYtuAcxC -DoCjjvbdZnmheEzK -DoCkKvbdKWUfEFGi -DoCkKvbdfMfXGmKL -DnbjjvbdjvWmcbXw -DnbkKvbdyzeORhJI -EPDLKvbdpstHRqjt -DoDKjvbdTukpKUAq -DoDKjvbdSPtGjFcw -DncKjvbdWSNxCFMD -DnbkKvbdjlalZdgP -EOcLKvbdkxsRsYgU -EObjjvbdLFfICApu -DoDKjvbdCEQBWKMf -DoDKjvbdbAvFFpQX -DoCkKvbdhgKCxvKV -DncLKvbdjcMLQgVH -EPCkKvbdzitpQDrt -EOcKjvbdNVTRjmAX -EPDKjvbdkxsRsZHU -DoDKjvbdKDJcRKCx -EPDKjvbdFjeScHmV -EPCkKvbdZjTIQHBf -DnbkKvbdlqyUyrdJ -DoDKjvbdehKurORH -EObjjvbdbKlFoODA -DoCkKvbdwtmFQyMO -DoCjjvbdXnRAYUut -DoDKjvbdxsOIlqbH -DncLKvbdyNsIXrhc -DoDLKvbdCEQAvKNG -DncKjvbdRotHJedX -EPDLKvbdVZHsyjoO -DnbjjvbdkCkkRHVH -DoDKjvbdRWmcblHc -DncLKvbdqvokbiYq -DoDLKvbdRkZGVHLT -EObjjvbduCbuXVno -DoCkKvbdEJgivYKA -DoDKjvbdkWWnDbYX -EPDKjvbdnGdxMmfy -DoDLKvbdIHGzYxYH -DoDKjvbduCbtwVno -EObkKvbdqlyjYkgi -EObjjvbdVwIwudEg -DnbjjvbdfRaWzkcP -EPCkKvbdEARhlzXX -DnbkKvbdfMevfmJk -DncLKvbdZyDjNcLr -EOcKjvbdtAHQhABS -DncKjvbdkClKqGtg -DoCkKvbdEObkLXCd -EObjjvbdFkFTDINV -EOcKjvbdEztQdkcJ -DoCkKvbdKaLHNBxR -EPDLKvbdhaoCdvqR -EObkKvbdrJAJdmOe -EObjjvbdrpVnjCuf -EPCkKvbdFjeTCglu -DoCjjvbdqdEiPnWB -EPDKjvbdGFirOJUR -EPCkKvbdJmADzHUa -EPCjjvbdWWhwucdg -DncLKvbdBhkBjiFj -DoCkKvbdSZihSbvA -DncKjvbdZtIiZETO -EPDLKvbdCTAcUGXS -DoDKjvbdVqmxCFLc -DncLKvbdmajWwoOV -EPDKjvbdVhYVxHYz -DoDLKvbddoFSjtTr -DoDLKvbdrzMQTAgn -DoCjjvbdUVlPjUBR -EPDLKvbdtvOXipsA -DoCjjvbdrouoKCvG -EObkKvbdOSsufdtp -EPDLKvbdIGfzZXxH -EObkKvbdbQGgDkzd -DoCkKvbdOFDtJIkE -EPCjjvbdiHJbyWJu -DnbjjvbdLAkHMaxR -EPCkKvbdJTZBTMwl -DncLKvbdSQTfjGEX -EOcLKvbdlrZVZrci -EObjjvbdkyTSTZHU -EPCjjvbdxUleQxkn -EPDLKvbdEKIKWYKA -DoCkKvbdZHWdAPSi -EPDLKvbdxVNFRZMO -EPDLKvbdcSbkTcjB -DoCkKvbdlYsSTZGt -EPDKjvbduaDxroFI -EObkKvbdNHDQMouL -DoDLKvbdxrnJMqbH -DnbjjvbdmfeXmOGy -DoDKjvbdidkGtoAO -DnbjjvbdGYtuBEXb -DnbjjvbdRECaQQdS -DoCkKvbdmajXXnnV -DncKjvbdZMSEUNlN -EPCkKvbdZtJIxcrn -DncLKvbdJpydneme -DncKjvbdVviYWEEg -DoDLKvbdyXhjBoyk -DoCjjvbdbhlikGXY -DnbkKvbdVviXudFH -EPCkKvbdYTMAlsnx -EPCjjvbdxZhFeweS -DoCjjvbdyNsIXriD -DoDKjvbdznoqEcMY -DnbjjvbdauCHXjtI -DncKjvbdIsZAsMwl -EPCkKvbdZMSDtOLm -DnbkKvbdJqZePFme -EPDKjvbdkHfkeenL -DoDLKvbdaNLCStmH -DncLKvbdIwsbHkqQ -EObkKvbdfHjvRnRH -EPCjjvbdlqyVZsDi -EObkKvbdEuxoolie -DoDKjvbdjAPgAofj -EOcLKvbdjcMLRHVH -DncKjvbdjKFgjNXr -EPCkKvbdmIctQuRa -DncLKvbdJpyePGOF -DncLKvbdNGbpMouL -EObkKvbdpfDdsuaI -EPCjjvbdyzeORhIh -DoDKjvbdrDdhpNua -DoCjjvbdFfKRmhtR -EPDLKvbdpfEEsuaI -EPDLKvbdqcdhpOVa -EPCjjvbdVYgsykPO -DoDLKvbdDncLLXCd -EObkKvbduaEYroEh -EOcLKvbdkNBlZeHP -EObjjvbdGcjvJajK -DncLKvbdrpVoJbuf -EObjjvbdEKIJuxKA -DncKjvbdZxcjODMS -DncLKvbdmgFXmOGy -DoCkKvbdUMVoAuoJ -DoDKjvbdqcdiQNua -DnbkKvbdbrcKtDia -DnbkKvbdKfFgbApu -DncKjvbdezvZEiTw -DnbkKvbdlqxtzSdJ -DoCjjvbdOTUWGeUp -EPCkKvbdJXtBhMQp -EOcLKvbdOAJTTjSA -EOcKjvbdfILVrNpg -EOcLKvbdnQZxvLZC -EPDKjvbdyYJJaoyk -DnbjjvbdkMakzFHP -DnbjjvbdjbkjpfuH -DoCkKvbdgGLymfgA -DoDLKvbdJYUBhLpp -EPCjjvbdJSyBTMxM -DnbjjvbdyTNiMrBg -DnbkKvbdqYoHfpdY -EOcKjvbdZyEKNcLr -DoCkKvbdZtIiYcsO -EPCkKvbdZQmFJNFR -DncKjvbdSPsgKFdX -DoCjjvbdvwMAuaWV -EPDKjvbdHfgZxxYH -EObkKvbdrSUjnKaN -DnbjjvbdKWVGEFGi -DncKjvbdsPvOjDWG -EPDKjvbdhzVFkqOG -DoDKjvbdssSSyZdc -DoDKjvbdYkqcsmlN -EPCjjvbdYpldiNFR -DncLKvbdemFwGlik -DoDLKvbdjuvmdBxX -DoDKjvbdCTBDTewS -DoCkKvbdKeehBaQu -EObkKvbdwyhFexEr -DoDKjvbdQvmccMID -DoDKjvbdVviYVceH -EPCkKvbdmRxtyrdJ -EPDLKvbdYqMeJNFR -EPCkKvbdRbDeMIxk -EPCkKvbdcJMjKfXY -DnbkKvbdVwIwvDdg -DnbjjvbdIwtCHkpp -DncLKvbdczYpYYqC -EPCkKvbdKaLGmBxR -DncKjvbduLwwAsaX -DncLKvbdssRrxzEc -EObjjvbdrXQMCiZR -DnbkKvbdZRNFImFR -EOcKjvbdACqwjZhp -DnbjjvbdbKlGOmcA -EObjjvbdGFirOJUR -EPDLKvbdqvokbiYq -EOcKjvbdJmAEZgUa -DoCkKvbdbhljKevx -EPCjjvbdbKlGPNcA -EOcKjvbdRMxByOUz -EOcKjvbdbsDLUEJa -EPCkKvbdRacdlJZL -EObkKvbdmuUyjjSG -EObkKvbdjKFgjNXr -DoDLKvbdlhctQuRa -DoCkKvbdjKFhKMxS -EObjjvbdpedEtVaI -EOcKjvbdIwtBhLpp -DnbjjvbdZHWdAPSi -EOcLKvbdiLdcmuCy -EOcLKvbdjcMLRGuH -EPCjjvbdRbDdkiZL -EOcKjvbdiHJbxvKV -EOcLKvbdaSGDHsfL -DoCkKvbdjKFhJlwr -DncKjvbdiBoCeWqR -EOcLKvbdegjvSNpg -EOcLKvbdrbGMlHLZ -DnbjjvbdBraDUGXS -DncLKvbdFeirOIsq -EPDLKvbdhytekpmf -EOcKjvbdIsYaTMwl -DnbkKvbdrSVLOKaN -DoCkKvbdTIyjRABM -EOcLKvbdsBfNMGkZ -EPDLKvbdUtNTfMWK -EObkKvbdRjxeuGjs -EObkKvbdTqQnuVIN -EObjjvbdhuZdwRuC -EOcLKvbdqTtHSSKt -DncKjvbdmpZxvLZC -DoDLKvbdlAloNALA -EPDKjvbdiLddOUby -EPDLKvbdwuMdpxlO -DncKjvbdNrsvHEuQ -EPCkKvbdyOSgxTJD -EOcLKvbdIryArlxM -EPDLKvbdZHXEAPSi -EPCjjvbdSCDdlIxk -EOcKjvbdySnJNSCH -DnbjjvbdijGIKNXr -EPDKjvbdVAaqTRSZ -EObjjvbdkxsSSxft -EPCkKvbdnUtzKiqf -EPCkKvbdlqxuZsEJ -EObjjvbdEXxMUUUM -EPCkKvbdLFfIBaQu -DnbjjvbdrRtkNjaN -DoCjjvbdNHCpMpUk -EPDKjvbdZjTIQGaf -EPCkKvbdHELWJbKK -DoDKjvbdJbibpjCx -DnbjjvbdJSyArmYM -EPCjjvbdfNFwGmJk -EOcLKvbdYTMBMsnx -DoDLKvbdyTOJMqbH -EObjjvbdEPDLLXDE -DncLKvbdkyTSTZGt -EObjjvbdGBPRYizm -DoCkKvbdVviXvDeH -DncKjvbdsQWOicVf -DoCkKvbdfHjvSNqH -DncKjvbdlZTSSxft -DncKjvbdFVyPolie -EPCjjvbdRXODblID -DoCjjvbdlhcsqVSB -DncLKvbdqYnhGqDx -EObjjvbdFeiqmiUR -DnbjjvbdKefHaaQu -DoDKjvbdRNXbYmtz -EOcKjvbdNwnuzcmt -DoDLKvbdXFxytAPT -EPDLKvbdOTUVfdtp -DoCjjvbdraelkfkZ -DncKjvbdXsMAltPY -DoDKjvbdVUMsfLuj -EPDLKvbdZisIPfbG -EPDKjvbddZxpYYqC -DnbkKvbdzjUopESt -DnbkKvbdVUMtGMVj -DncLKvbduCbtwWOo -EObkKvbdaaVeFpPw -DncKjvbdKNADzGta -DncKjvbdeEoSCXCj -EObjjvbdhancEvqR -EObkKvbdKCicQibx -DncLKvbdijGHjMwr -DoCkKvbdziuPpETU -DoCjjvbdiBnbeXRR -DoCkKvbdZQmEiMdq -EObkKvbdrMyjZMHi -EOcKjvbddoErkTtS -DoCkKvbdtkwvaUAw -EPDLKvbdTlVnaVoJ -DncKjvbdfHjurOQg -DoDLKvbdWWiXvEEg -EPCkKvbdqdEhpNua -EOcLKvbdYSkaMtPY -EPCkKvbdxmsHxTIc -DnbjjvbdJqZdnenF -EPDKjvbdWexzUAOs -EOcLKvbdrovPKCuf -DoDKjvbdkxsSSyGt -Dnbjjvbdzdynzdyp -EOcLKvbdHEKvJbJj -EObjjvbdOStWHEuQ -DnbjjvbdkyTRsZGt -DoCkKvbdcJNKKevx -DoDKjvbdSPtGifDw -EObkKvbdGdLVibKK -DnbjjvbdbBVdfPow -DncKjvbdhtyeXSVC -EPDLKvbdptTfrSLU -DncKjvbdjvXODaww -DncKjvbdqZOgfqDx -DncLKvbdTJZjRABM -EOcLKvbdTpqPVUhN -EOcKjvbdRWmdClID -DoCjjvbdqquLOLAm -DoCjjvbdFfJqmiUR -EOcKjvbddBsMrATm -EOcKjvbdYzcFrKVy -EPCjjvbdsZlQSaIO -EPCkKvbdkHfkeenL -EOcKjvbdiHJcYuiu -DoDKjvbdCEPaVilf -DoCjjvbddBrmSAUN -EPDLKvbdSPtGifDw -EOcLKvbdAMhYrvyx -DncLKvbdTIyjRAAl -EOcLKvbdZtIhyESn -DnbjjvbdVUNUFlWK -EOcKjvbdyXiJaoyk -EPCkKvbdDncLKvbd -EOcLKvbdKWVFcdgJ -EPDKjvbdnQZxvKyC -DncKjvbdjJehJlxS -DoDKjvbdRkYfVHKs -EPDLKvbdirzhsLJz -EObkKvbdVUMtFkuj -DnbjjvbdqwPkbiYq -EPCjjvbdIGfzZYXg -DoCkKvbdlYsRryGt -EObjjvbdpfDeUWBI -EOcKjvbdwtldpxkn -DoCkKvbdzitopETU -DoDKjvbdJuuGEEfi -DnbkKvbdnPzZVkZC -EOcKjvbdmfeYMnGy -EPDKjvbdkIGlGGNk -DncKjvbdezvZEhtX -EPDKjvbdqqtjmkAm -EPDLKvbdzRPNIiwA -DoCkKvbdGKeSbgmV -EPDLKvbdmJETqVSB -EPDKjvbdbVCGwkTh -DoCjjvbdBhkBkIej -EOcLKvbdbBWFFopX -DncLKvbdjggLfGOL -EPCkKvbdzQnmIiwA -EOcLKvbdhbPDFWpq -EPDLKvbdkClLQgVH -EObkKvbdrWpMChyR -DncKjvbdMfbpNPuL -DnbjjvbdNsUVfeVQ -EOcKjvbdaRfDHtFk -DoDKjvbdRbEFLhyL -EOcKjvbdmIcsqUqa -DncKjvbdFVyPpNJe -DoCjjvbdLAjgMaxR -EOcLKvbdypoNJKXA -DncLKvbdEztRFMCi -DoCkKvbduVmwiqTA -EObkKvbdUyHsykPO -DoCkKvbdhzUfLqNf -EPCjjvbdiUzEvqtb -EPDKjvbdpfDeTuaI -EPCkKvbdSwjkmzjx -DncLKvbdjKFgjMwr -EOcLKvbdRWnECkhD -EOcKjvbdZoOJFEyj -DnbkKvbdvvlAvAvV -DncKjvbdZLqcsmlN -DncKjvbdyqOliJwA -EPCkKvbdKWUedEfi -DoCkKvbdePEsLTtS -DnbkKvbdtcDVXVoP -EPCjjvbdKCjCpicY -EObkKvbdZdwfzhJC -EPDLKvbdBhjajiGK -EOcKjvbdJXsahMRQ -DoCkKvbdZxdKNcLr -EPDKjvbdnBjWwoOV -DncLKvbdapGgDkzd -EPDKjvbdjmCLzEgP -EPCkKvbdWRmwbFMD -DnbjjvbdBdQAujMf -EObkKvbdzjUpPcsU -DoDLKvbdwtmFQyMO -DoCkKvbdiMEcmtby -DncKjvbdSBcdkiYk -EPCkKvbdfSBWzkbo -EOcLKvbdxVMeRZLn -DnbjjvbdCSaDUGXS -DncKjvbdZtJIyETO -EPCkKvbdTkvOaVni -DnbkKvbdkySqsYft -EPCjjvbdxsOJMrCH -EPCjjvbdCWzdJEov -EPCjjvbdEARiMywX -EObkKvbdxsNiNSCH -DncLKvbdhbPDFWqR -EObkKvbdVUNUFlVj -EObjjvbdXrlBNToY -EOcLKvbdfHjvSOQg -EPCjjvbdwWkaWAuu -DncKjvbdbKlFnnDA -EPCkKvbdRkZFuGkT -EPCjjvbdMowpvNfs -DncLKvbdmtuZjjSG -DnbkKvbdiCPDEvqR -DncLKvbdbAudfPow -DnbjjvbdFjeSbhMu -DncKjvbdSQTfjGEX -EPDKjvbdbAueGQQX -DnbkKvbdjKGIJmXr -EOcKjvbdIryBTNYM -EPDLKvbdmgEwlnGy -EObjjvbdSBdEkhxk -DoCjjvbdfMfWgMjL -EPDLKvbdEObjjwCd -EObjjvbdhzUekqOG -EObjjvbdWSNwbElD -DoDKjvbdrNZjYkhJ -DoCkKvbdRkYfUgKs -EObjjvbdczYpYZRC -DoCkKvbdzoQQeDMY -DncKjvbdFxuVBEXb -DoDKjvbdSiZjRABM -DoDLKvbdYzbfRivZ -EPDLKvbdlqyUyrdJ -EOcLKvbdtbbuWvOo -DncKjvbdSKxfVGkT -DoCjjvbdEXxLtUTl -EOcLKvbdEPCjkWbd -EPDLKvbdEObkLXDE -EPCkKvbdxKvdHzzG -EPDKjvbdpfDdtVaI -DoCjjvbdbAueGPpX -DoCjjvbdZMRdUOLm -DoDLKvbdwtmFRYkn -DoCjjvbdNPwpumgT -DoCkKvbddijSWUzn -DoDKjvbdJXsbHkqQ -DnbjjvbdxZhFexEr -DoCjjvbdSQUHJedX -EPDLKvbdjmCMZdgP -DncLKvbdMfbomPtk -EOcLKvbdqTtHRqjt -EPCkKvbdqceIpNvB -DncLKvbdFxtuBDxC -EPCkKvbdxVNEpyLn -EOcKjvbdYzbeqivZ -DoCjjvbdNdcsiJLE -DoDKjvbdzjVQQDsU -EObjjvbdvBDySneI -DoDKjvbdBhjbKhej -EPDLKvbdWSOYBdlD -EOcKjvbdOYOuzcnU -EPCkKvbdkCkkQgVH -DnbkKvbdtlXwBTaX -DnbkKvbdTppoVUgm -DoCjjvbdQmXaxnUz -DncKjvbdkHfkfFmk -EPCjjvbdmgEwlnHZ -EPDLKvbdZdxGzhJC -EPCkKvbdmIdTqUqa -DoDKjvbdzGyMAMeX -DnbkKvbdTppnuUhN -DoCjjvbdSLYfUgLT -DnbkKvbdZsiJZETO -EObkKvbdNUrqjmAX -EObjjvbdZyDimcLr -DoCkKvbdRDbaQRDr -DnbjjvbdbAudfPow -EPDKjvbdZjTHpGaf -DoDKjvbdqwQLcIxq -DnbjjvbdZLqdTmkm -DoDKjvbdyXiKCPzL -EObjjvbdssSTYyeD -DoCjjvbdddoRawCj -DoCjjvbdkMbLydfo -DoCjjvbdVTmUFkvK -DoCjjvbdhyuFkpmf -EObkKvbdlYsSSyGt -EPCjjvbdtvNxKQsA -DoDKjvbdRpTgKFdX -EObjjvbdjbkkQgVH -DnbjjvbdaNLCStlg -EOcKjvbdDxYLsssl -DoCjjvbdfNFvgMjL -DncLKvbdrovPJcWG -DnbkKvbddoFSjssr -DnbjjvbdSQTgKGDw -DoCjjvbdQvnEDLhD -EOcKjvbdUxhUZkOn -EPCjjvbdEzsqFMDJ -DoDKjvbdGdKuiaij -EOcKjvbdxrnJMrCH -DnbjjvbdUWMQJtBR -EObkKvbdEKHivYKA -EPDLKvbdYSlAltOx -DnbjjvbdbVCHXjtI -DnbkKvbdtkwwAtBX -DoCjjvbdZQleJNEq -EPDKjvbdEPCjjvcE -EPCjjvbdCSaDUFwS -EPDKjvbdHELViajK -DoDLKvbdijFgjNXr -DncLKvbdjmCLydfo -EObkKvbddZyQXxqC -DnbkKvbdySnImSCH -EPCjjvbdqmZjYkgi -EPCjjvbdGFirNiTq -DoDKjvbdRXNdDMID -DncLKvbdMfcQNQUk -EOcLKvbdZdwfzghb -EPDLKvbdULuoBWOi -EObjjvbdFyVUaDwb -DoCjjvbdNQXpumfs -DnbkKvbdrWolDIxq -EPCkKvbdBvzdIeQW -DnbkKvbdfIKuqmpg -EOcKjvbdnBiwXoNu -EObjjvbdiHKDZWKV -EPCjjvbdZLqdTnLm -DoCjjvbdlYsSTYgU -EPDLKvbdsBfNMHKy -DnbkKvbdjuvmdCXw -EPDLKvbdRDcBQQdS -EOcKjvbdySmhmRbH -EPDLKvbdbrbjscia -EPDLKvbdkxrrTZGt -DoDKjvbdcJMjLGWx -EPDKjvbdKeegbBQu -DnbjjvbdvPTzqKoU -EOcLKvbdIidAKPgE -DoDLKvbdVrOYBdkc -EObjjvbdeFOqawDK -EOcLKvbdZRNEhmFR -EObjjvbdKfFgbBRV -DoCjjvbdiLeEOVCy -EPCkKvbdqmZjYkgi -EPDKjvbdHffyxxXg -EPDKjvbdZLrDsmlN -DnbjjvbdTkuoBVoJ -EOcKjvbduDDUvvOo -DoDKjvbdZdwfzhJC -EPCkKvbdfMfWgNKL -EPCjjvbdRXOECkgc -EOcKjvbdMowpvNfs -DoDLKvbdiBoCeWpq -EObkKvbdNwoVzdOU -EPDLKvbdDoDKjvbd -EObjjvbdLFehCBRV -EOcLKvbduCcVWuno -EOcKjvbdXsMBMtOx -DnbkKvbdcIljKewY -DoDLKvbdEzspdkcJ -DncKjvbdqcdhomua -EPDKjvbdiifHjNXr -EObkKvbdVqnXbFLc -EPCkKvbddwyssrFz -DncKjvbdrSVKmkAm -EPCjjvbdTlVoBVni -EObjjvbdOhAYZAYa -EPCjjvbdRadEkiZL -DoCkKvbdSCEEkiYk -EObjjvbdGZVVAcxC -DnbjjvbdZyEJnDMS -EOcKjvbdzitoodSt -EPDKjvbdXFxzUAPT -DnbjjvbdziuQQESt -EPCjjvbdEARhmZvw -DncLKvbdatbHXkTh -DncKjvbdbsCjtDjB -EPCjjvbdKWVGDdgJ -EPDKjvbdrafNLfkZ -EObkKvbdFkEsChMu -DnbkKvbdVgxWXfxz -EObjjvbdJbjDRJbx -EObkKvbdwyhFfYFS -EPCjjvbdMfbpNPtk -EObkKvbdbsDKtDia -EPCkKvbdkxsRsZHU -DnbkKvbdvAdZTOdh -DncKjvbdptUHRrLU -DncKjvbdvPTzqKnt -DncLKvbdTppoUthN -DnbkKvbdrbFlkgLZ -EPCjjvbdGdKvJajK -EPDLKvbdACqxKZiQ -DoCkKvbdbPffckzd -DoCkKvbdhbOcEvqR -DnbjjvbduCcVWvOo -DoCkKvbdmuUzLKRf -EPCjjvbdbUbHYLUI -DoDKjvbdbKkeoNcA -DoCjjvbdcScKtEJa -DoCjjvbdyzdnRgiI -EPCjjvbdkIGlFfOL -EOcLKvbdzjUpPcsU -DoDLKvbdJuuGEEgJ -DncLKvbdTqROtthN -EOcLKvbdpstGqqkU -EPCkKvbdtSrTYzEc -EPDKjvbdezvYdiUX -DoDKjvbdtTRrxzFD -DoCjjvbdrovOjDWG -DoDKjvbdUQpoUthN -EOcKjvbdKDJbpicY -DnbjjvbdaSGCgtFk -DoDKjvbdGZVVAcwb -DnbjjvbdEvYopNJe -EObjjvbdSQTgKFdX -EPDLKvbdrXPkbhyR -DoDLKvbdhyuGMROG -DoDKjvbdzoQRFClY -EPCkKvbdKWUeceHJ -EObkKvbdZnmiFFZj -DnbjjvbdtcDUwVoP -DoCkKvbdjlakyeHP -EPCkKvbdBvzdIdpW -EPCjjvbddePRawCj -DoDKjvbdmfeYNNfy -DnbkKvbdSLYetgKs -DncKjvbdFejRnJTq -EPDLKvbdIGfzZXwg -DncKjvbdJvVFdFHJ -EOcLKvbdIHHZyYYH -EPDLKvbdyXhiaoyk -DoCjjvbdADSYJzIp -EObjjvbdNPxQunHT -EPCkKvbdxnTHwrhc -DncKjvbdTppnuVHm -EObkKvbdjlbLydfo -DoDLKvbdVBBpsRRy -DnbjjvbdACqwiyhp -DoCkKvbdZRNFJNEq -EOcLKvbdaRfDHtFk -DoCkKvbdKfFgbBQu -DnbjjvbddCTNSAUN -EPDLKvbdTfznMXVe -EOcKjvbdeOeSkUTr -DnbkKvbdqdEiPnVa -EOcLKvbdsBemMHLZ -DoCkKvbdNPxQvOGs -EPDLKvbdOTTufeUp -DncKjvbdraelkfjy -DoDLKvbdZoOIeFZj -DnbkKvbdptTgRrLU -DncKjvbdACrXiyhp -EPDLKvbdIGgZxwxH -DnbjjvbdZnmiEeZj -DnbkKvbdWRmxCFLc -DoDLKvbdyYIiaozL -EPCjjvbdOTTvGeUp -EPCkKvbdNUsSKmAX -EPCjjvbdDigiuwjA -DoDKjvbdIrxaTMxM -DoDKjvbdZyDimcLr -EPCjjvbdjbkkRHVH -DoCjjvbdWXJYVceH -EOcLKvbdlZTSSyHU -DncLKvbdwuNEqYlO -EPCkKvbdrpWPJbuf -DncKjvbdtbcUwWPP -EOcKjvbdGKeScINV -DncKjvbdZeXfzhJC -DncKjvbdUQqPVVIN -DoDKjvbdxsNhmSBg -DoDKjvbdURROuVHm -DncKjvbdRMwbYmtz -DoDKjvbdZRMeImEq -EOcLKvbdWHwvXgYz -EPDLKvbdIwsahMQp -EOcKjvbdfHkVrNqH -EObjjvbddjKSWUzn -DncKjvbdxwiJbQZk -EPCkKvbdMSWlzVQz -DoDLKvbdUQpnuUhN -DncLKvbdiCPCdvqR -DoCjjvbdapHHELzd -DncKjvbdyOSgwrhc -DoCkKvbdDxYLtUTl -EObjjvbdyfyMAMdw -EObjjvbdHffzYxYH -DoDKjvbdYzcFrKWZ -EPDLKvbddZyPwyRC -EPCkKvbdLhalRYAS -DoCkKvbdGYtuBEXb -DoCjjvbdrylQTAgn -DoCjjvbdbBVeGPpX -EPDLKvbdYpmFImFR -DnbkKvbdJcKCpjDY -DncLKvbdYTLaNUPY -DnbkKvbdeOeSjtTr -DoCkKvbdEYYLtTtM -EPCkKvbdrzLoraIO -DoCjjvbdKWVGDdfi -DoDKjvbdBhjbLIfK -EPCkKvbdNQYQvOGs -EOcLKvbduLxXBTaX -EPDKjvbdANHySwZx -DnbkKvbdeOdsLTtS -DnbkKvbdUsmTfMWK -DoDLKvbdcImJkGXY -DncKjvbdsPunibuf -DnbjjvbdIGfyxxYH -DoDLKvbdvBDyTOeI -EPDLKvbdGKeScHmV -EOcLKvbdqFceUVaI -DncLKvbdqdEhpOWB -DoDLKvbdTulPitAq -DnbjjvbdWXIwudEg -EPDLKvbdcTDKtDjB -DoCjjvbdgFlZnHHA -DnbkKvbdwuNEqZLn -EObkKvbdmRxtzSci -EObjjvbdjvXNdCYX -DnbkKvbdqGDdsvBI -DncKjvbdqdEhomvB -DoCjjvbdrpVoKCvG -EObkKvbdWHwvYHYz -EOcKjvbdrykoraHn -EPCkKvbdsPuoKCuf -DncKjvbdZjSgofaf -DncKjvbdNeETiIjd -DoDLKvbddoFSkTsr -EPCkKvbdkWWnECXw -DnbkKvbdZRNFIldq -EObjjvbdzjVQPdTU -DnbjjvbdhytelRNf -EOcKjvbdNPxQunHT -DoCkKvbdmuVZkJrG -EPCjjvbdUVlQJtBR -DoDKjvbdzitpQESt -DoCjjvbdraemLfkZ -DoDLKvbdkNBlZeHP -EObkKvbdrbGNMHLZ -EPDLKvbdkIHLeemk -DoDKjvbdbAvEeopX -DoDKjvbdiGjCxujV -EPCkKvbdqlzJxkgi -DncLKvbdVZITzLPO -EOcLKvbdVZITykOn -EPCjjvbdjuvnDaww -DoDKjvbdkVwOECYX -EObjjvbdcyxpXyRC -DnbjjvbdULvPAuni -DnbkKvbdOTUWGdtp -EOcLKvbdKDJcRKCx -EPCkKvbdBsBDUFwS -DncLKvbdQdDAopcr -EObjjvbdcSbjtEKB -DnbjjvbdlAloNALA -DoCjjvbdADSXizJQ -EOcKjvbdrpWOibvG -EObjjvbdIGfzZXwg -EPDKjvbdptUHRrKt -DncLKvbdZdwfzhIb -DoCkKvbdQZNAGrrK -DoDKjvbduCbtvuoP -EPCjjvbdJuuFceGi -EPCkKvbdgGLymgHA -DnbjjvbdcyyPxYpb -EPCkKvbdhuZeWquC -EObkKvbdyTNiNRbH -DoCjjvbdVAaqSprZ -DncLKvbdoznDkYPA -EPCkKvbdiUydvquC -DncLKvbdhytfMROG -DoCkKvbdmbKXYPNu -DnbkKvbdMpYQunHT -EOcLKvbdHkaznXQk -DoDLKvbdTvMPisaR -DoCkKvbdIryBTNXl -DoDLKvbdZLrDsmkm -DncLKvbdlhctRVRa -EPCjjvbdYkqcsmkm -EPCjjvbdEXwlUTtM -EObkKvbdEvZPoljF -EPDLKvbdZRNEiNFR -DoCkKvbdANIZTXZx -DncKjvbdZoOIeFZj -DoDLKvbdeJirWUzn -DoCjjvbdRWmdDLgc -DoDKjvbdACrYKZhp -EPDKjvbdMowpunHT -EOcKjvbdYTLaNTnx -DnbjjvbdQvnEClHc -DnbkKvbdSBceLhyL -DoDKjvbdjgflGGOL -EOcKjvbdYpldiMdq -DoCjjvbdrovPKDWG -DoDKjvbdZisHofbG -DoDKjvbdEOcLKwDE -EPCjjvbdhfjDZWJu -DncKjvbdhfjCyWJu -EOcLKvbdtSqsYzEc -DoDLKvbdbQHHELzd -DoDKjvbdySnImRbH -EOcLKvbdVqmxCElD -DnbjjvbdNdcsiJKd -EPCkKvbdkNBkzEfo -DnbkKvbdJKEAKPfd -DncLKvbdiifIJlwr -DnbjjvbdhtzEvqtb -EObjjvbdwWlAvBWV -EPDLKvbdlhctQuSB -EOcLKvbdNddUIiKd -EPDKjvbdJSxaTMxM -EPDLKvbdVrOXaeMD -DoDLKvbdGcjvKBjK -DncLKvbdqvpLbiZR -EPCkKvbdjKFgilxS -DncLKvbdDoCjjvbd -DoCjjvbdqqtjnKaN -EOcKjvbdBvzdJEpW -DoCkKvbdcarlrATm -DoDLKvbdQdCaQQdS -DncKjvbdVqnXadkc -DoCjjvbdJvUecdgJ -DnbkKvbdVYhUZkPO -EPDKjvbdxZgfFxEr -EPCjjvbdsPunicWG -DnbkKvbdmSYtyrdJ -DnbjjvbdTulQJsaR -DncKjvbdsrrSxyeD -DnbkKvbdzQnmJJwA -DncKjvbdatafxLTh -EOcLKvbdmfeYNNgZ -EObkKvbdNxOuzcnU -EPDLKvbdDwwksstM -EPDLKvbdxnTIYTIc -EPDKjvbdHgGyyXxH -EOcKjvbdGAnpyJzm -DoCkKvbdUQqPVUhN -DncLKvbdYgWdAOri -DoDLKvbdygZMANFX -EPCkKvbdrJAJdlne -EPDLKvbdZnmheEyj -DnbjjvbdIxUCHkpp -DnbkKvbdjJehJlwr -DoDKjvbdhlEdNuDZ -EOcKjvbdeOeSkTsr -EOcLKvbdVqnYBdlD -DoDKjvbdeATqMwif -EPCjjvbdrXQLbhyR -DnbjjvbdFkErbhMu -DoCjjvbdpxnhHQcx -EOcLKvbdrWpMDIxq -EPDKjvbdVhYWYGxz -DoCkKvbdwzIGFxFS -DoCjjvbdEztQeLbi -DnbjjvbdlZTRrxgU -DncLKvbdSZihSbvA -DnbjjvbdrzLpTAgn -EPCjjvbdNrsugFVQ -DnbjjvbdxUleQxlO -DncKjvbdtkwwBUAw -DoCjjvbdbBVdeoow -EPDKjvbdEObjkXDE -DnbjjvbdhgJbxvKV -EPCkKvbdIwtCHlQp -DoCkKvbdxmsIXrhc -EObkKvbddePSCXDK -EOcKjvbdVrOXbEkc -EOcLKvbdFVyPomJe -DoDLKvbdREDBPqDr -DncLKvbdaNLCStmH -DncLKvbdbAudfQPw -DoDKjvbdRaceLiZL -DoCkKvbdJYUCIMRQ -DnbkKvbdYkrDtOMN -DnbjjvbdFkFTChNV -EOcLKvbdZRMeImFR -EObkKvbdUxgszLOn -EOcKjvbdFjdsChMu -EObkKvbdrafNLgLZ -EPDKjvbdelewGmJk -EOcKjvbdZMRctNlN -DoDLKvbdliEUQtqa -DncKjvbdqUUHSRjt -EPDKjvbduCbtwVno -DoCkKvbdaaVeFoow -EPDLKvbdkClKqGuH -DoDLKvbdCflFgAzc -DoDLKvbdTAEhgbPE -EObkKvbdmtuZjjRf -EObjjvbdKDKCqJbx -DncKjvbdrovOjDVf -DoCkKvbdhtzFWqtb -DncLKvbdEvYpQNKF -EOcLKvbdeFPRavcK -DoDLKvbdhlEcnUby -DoCkKvbdegjvSOQg -DncKjvbdhbPCeWpq -DnbjjvbdsrrTYyeD -DncLKvbdTlWPAvOi -EPCjjvbdwzHeexEr -DncLKvbdmJEUQuRa -DnbkKvbdkIHLeemk -EObkKvbdhtyeXSUb -EOcLKvbdHDkWKCJj -EOcLKvbdRbDdkhyL -EObkKvbdRosfifDw -EPCjjvbdOStVfduQ -DnbkKvbdiHJbxujV -DoCjjvbdsPuoJcWG -EPCkKvbdDxXktTtM -DoCjjvbdHDjujCJj -EObjjvbdUWLoisaR -EPDKjvbdqiAKEmOe -DoDLKvbdxmsIYShc -EPCkKvbdCJKbKiGK -DoDLKvbdRECaQRDr -EPDLKvbdYqNEiNEq -DnbkKvbdiMEcnVCy -DoCkKvbduCbtwVno -DoDKjvbdHbMZdzAD -DnbkKvbdemGXGmKL -DoDLKvbdgQBzwDwh -DoDKjvbdKQzEoGOF -DoDKjvbdWSNwaeMD -EPDKjvbdySmhlqbH -EObkKvbdDxYLtTtM -DnbjjvbdFxuVBEXb -EObjjvbdiBoCdwRR -EPCjjvbdGQATWgGZ -EPCkKvbdYpleJNEq -EOcLKvbdvPTzqKoU -DnbkKvbdZQmEhldq -DncKjvbdLBKgMawq -EPCkKvbdqFceTvAh -EPCjjvbdkIHMFenL -DoDKjvbdehLVqnRH -DoDKjvbdxwhibPyk -DnbkKvbdkMbMZeHP -EOcKjvbdsrrSyZeD -EOcLKvbdMowpunHT -EObjjvbdJqZdnfOF -DoCkKvbdezuxdhtX -DnbjjvbdaaWFFopX -DoCjjvbdqdFJQOVa -EPCjjvbdWWhwudFH -EPDKjvbdhtzFWrUb -EPCkKvbdWSNwaeMD -EObkKvbdcIlikFvx -EPCkKvbdauCGwkTh -EPCkKvbdbhmJkGWx -EPDKjvbdRosgJfEX -DnbkKvbdTvMQJtAq -DnbkKvbdsBfMlGkZ -DnbkKvbdVrNxCElD -DoDLKvbdmpZxukZC -EObkKvbdhlEcnVCy -EOcLKvbdwzIFfYFS -DnbkKvbdZtIhxdSn -DoDLKvbdjgfkfFmk -DoDLKvbdqTtHSRkU -EObjjvbdSCDeLiZL -DoDKjvbdeATplxJf -DnbkKvbdIBkzEzAD -EOcKjvbdFWZQPljF -DoCjjvbdRbDeMJYk -EPDLKvbdDoCkKvcE -DoCkKvbdZjShPfbG -DnbjjvbdNPxQvOGs -EPDLKvbdKyQirztf -DoDLKvbdJutecdfi -DoCjjvbdTppoUuHm -EPDLKvbdjEkGuPAO -DnbkKvbdVTmTekuj -DnbkKvbdZyEJmcMS -EOcKjvbdNddThhjd -DncLKvbdrDdhpNua -EOcKjvbdBiLBkJGK -DoCkKvbdrXPkbhxq -DnbjjvbdZQmEiMdq -DncLKvbdhzUfMROG -EPDKjvbduaEYroEh -DoCjjvbdJYUCHkqQ -DoCjjvbdwzHfFxEr -EPCjjvbdLiBkqYAS -DoDLKvbdxZgfFxEr -DoCkKvbdraemLgLZ -DoDLKvbdxxJJaozL -EPDLKvbdKeehBaRV -DoCkKvbdPIAYZAZB -EObjjvbdBvzdIdov -DoDKjvbdjblKqGuH -DoDKjvbdlhdURVSB -EPDKjvbdqvpMDJZR -DncKjvbdajkeoODA -EOcKjvbdkySqsZHU -DnbjjvbdJqZdnfOF -DncKjvbdZHWdAOsJ -DoCkKvbdaNLCStlg -DoDLKvbdVZHszKnn -DoCjjvbdtvOYJpsA -DoCjjvbdNPxQvNfs -DoDLKvbdZLqctOMN -EObjjvbdvwMAvAvV -DnbkKvbdEuxpPlie -DnbkKvbdAMhYsWyx -DoCkKvbdtumwjQsA -EPCjjvbdVAaprqRy -EObkKvbdlZSqsYgU -EObkKvbdBvzdIdov -DnbjjvbdyOShYTJD -EOcLKvbdZshhxdSn -EPDKjvbdUtMselWK -DoDLKvbdYqNEiMeR -DncLKvbddePSBwDK -DncLKvbdqYnggQcx -DnbkKvbdqceJQOVa -DoDLKvbdtSrTZZeD -EPCjjvbdANHyTWzY -DoDLKvbdcIlikFvx -DoDKjvbdxmsHwsIc -EObkKvbdYzbfRiuy -EPDKjvbdWHwuwfxz -EOcLKvbddndsLTsr -EObkKvbdwXMAuaVu -EPDLKvbdbVBfwjtI -EObjjvbdfMfXHMik -DoCkKvbdOXoVzdOU -DnbkKvbdnGeXlnHZ -EPCjjvbdGGJrOJTq -EPCkKvbdhanbeWqR -EOcLKvbdLhbLpxAS -EPDLKvbdbBVdepPw -EOcKjvbdWSNwadlD -DoCkKvbdaRfChTek -EPCkKvbdmbJvxOmu -DoCkKvbdCSaCsfXS -EObkKvbdbhljKewY -DncLKvbddZxowxpb -DnbjjvbdRDcBQQdS -DnbjjvbdKDJbqKDY -EObkKvbdWRmxCFLc -EPDLKvbdYlSETmkm -EOcLKvbdMIalRYAS -DoDKjvbdCEQAuimG -EPDKjvbdCTAcTewS -EPCjjvbdrRtkOKaN -DnbkKvbdtTRryZeD -DnbjjvbdMgColpVL -EOcKjvbdrDdhomua -EPDKjvbdRbDeMJZL -DnbkKvbdxnSgwrhc -DoDKjvbdVvhxVdFH -DncKjvbdLYqJrzuG -DncLKvbdZsiIyETO -EPDLKvbdieLHUoAO -EPDLKvbdNsUVgEuQ -EPDLKvbdoAKztHcn -DncKjvbdfNFvgNJk -DoCkKvbdqYoHgQcx -DncLKvbddwzUUSFz -DoCkKvbdIHGzZYXg -DncLKvbddZxpXxpb -DnbjjvbdhlFDnUcZ -EPCjjvbdSKxfUfjs -DoCkKvbdbAvFGPpX -EOcLKvbdVhXuwfxz -EPCkKvbddoEsKtTr -DncKjvbdhkeEOVDZ -EObjjvbdNUrqjmAX -EPDLKvbdUWLojTaR -DoDLKvbdWIYVwfxz -DnbkKvbdUtMsekvK -EOcKjvbdRpUHJecw -DoDKjvbdCJKbKiFj -EObjjvbdEuxoomJe -EPCjjvbdLrWlytpz -EObjjvbdMgDPlotk -DncLKvbdNrtWHFVQ -DoCjjvbdZeYGzgiC -EPCkKvbdKaKfmCYR -DoCjjvbdjlakzEfo -EPDKjvbdpeceTvBI -DnbkKvbdKDKCqJcY -DoDKjvbdMowqWNgT -EPDKjvbdRMxCYmtz -EObjjvbdrXQLbiYq -DncLKvbdZnmheFZj -EOcLKvbdiLeENtcZ -DncKjvbdzaAPGfal -EPCkKvbdeATqNYKG -EObjjvbdSCDdlIyL -DoCkKvbdVZHtZjnn -EPCjjvbdZtIhxdTO -EPDKjvbdTlVoAuoJ -EObjjvbdZRNFIleR -DoDLKvbdEPDLKwCd -DnbjjvbdfRaWzkbo -EPDLKvbddneSjstS -EObkKvbduCbtwWOo -EPCkKvbdmoyyWKyC -EPCjjvbdehLVrORH -DoDLKvbduCcUvuno -EObkKvbddZxowxqC -EObkKvbdKQydoFme -EPCkKvbdqqtkOKaN -DoDKjvbduaEYsOeI -EObkKvbdePEsLUTr -DoDLKvbdbsDLTcia -DncLKvbdDwwlTtUM -EOcKjvbdOEdUIhkE -DoDLKvbdtvOXjRTA -EObkKvbdeFPSCXCj -EPCkKvbdqlzJxlIJ -EOcKjvbdUMVoBVni -EPCkKvbdqqtkNkBN -DoDLKvbdiVZeWquC -DncKjvbdZLrDsmlN -EPCkKvbdzitopESt -EOcKjvbdnBjXYPOV -EObkKvbdehKurOQg -DoCjjvbdmJDsptrB -DnbkKvbdaNKbTVNH -DncLKvbdGQASvfey -EOcLKvbdtbcUwVno -EOcKjvbdqUUHSSLU -EOcLKvbdvwLaWBWV -EPCkKvbdRacdlIxk -DnbkKvbdxZgfGXeS -EOcLKvbdVAapsQqy -EOcLKvbdQvnECkhD -EPDKjvbdCWzchdpW -DoCjjvbdpedFUWBI -EPDKjvbdqvpMCiYq -EPDLKvbdEPDKjwCd -DncLKvbdGckWJaij -EObjjvbdgPazwEXh -DoCkKvbdUVlPitBR -DoCjjvbdMSXMzVQz -DnbkKvbdliEUQuRa -DoCkKvbdOStVgFUp -EPCjjvbdUtMtGMVj -DoCkKvbdKWVFdFHJ -EPCkKvbdUxhUZkOn -DnbkKvbdLBKflbYR -EPCkKvbdFkEsCglu -DnbkKvbdKCibpjCx -DnbkKvbdGLEsChNV -DoCjjvbdLGFhCApu -DncLKvbdeXzTsqez -DoCkKvbdxrmhlqbH -EPDLKvbdYlRdTmlN -EPCjjvbdqYnhHRDx -EPDKjvbdWfYzUAOs -EPCkKvbdMJCLpxAS -EObkKvbduCbtwVoP -DoCkKvbdmfdwlmfy -EPCjjvbdVBBprpqy -DoDLKvbdEKHivXjA -DoDLKvbdkWWnECYX -EOcKjvbdqUUHSRkU -DncKjvbdYlRcsnLm -EOcKjvbdelfWfmJk -EPDLKvbdZtIhxcsO -EOcLKvbdGKdrcINV -EPDLKvbdOAIsUKSA -DoCjjvbdXFxytAOs -EPCjjvbdUQpntuIN -EPDLKvbdTvLpJtBR -EPDKjvbdRyihSbvA -DnbjjvbdhyuFlROG -EObkKvbdZxcinClS -EOcKjvbdptTfqrKt -DoDLKvbdURRPUtgm -EObkKvbdaNKbTVNH -EOcLKvbdiZuFlQmf -EPDKjvbdePEsLUTr -EPCjjvbdFxuUaEYC -EPDLKvbdliETpuRa -EObjjvbdjKFhKNYS -DoCkKvbdwzHefXeS -DoDLKvbdFfJqmiUR -EObjjvbdcJMjKewY -EObjjvbdqdFIomua -DnbkKvbdFejRnJTq -DnbjjvbdEzsqFMCi -EPDLKvbdhzUelROG -EPDKjvbdLKaIWAKZ -DoCkKvbdGGJrOIsq -EOcKjvbdVUMtGMWK -EObkKvbdmpZyVkZC -DoDLKvbdJTYaSmXl -EObjjvbdmSZUyrci -EObkKvbdxnSgwsIc -EOcLKvbdhgJcYujV -DoDKjvbdUQpoVVHm -EPDKjvbdKWVFdEgJ -DoCkKvbdWXJXudEg -EObkKvbddxZtURez -DnbkKvbdZRMeJNEq -EOcKjvbdpxoIHRDx -EObkKvbdGGKSOJTq -EOcKjvbdkIHMFenL -EPDLKvbdTqQoUtgm -DnbjjvbdtvNxJpsA -DnbkKvbdFyUtaDxC -DnbkKvbdSLYeuHKs -DncLKvbdxrmhlrBg -DncLKvbdGdLWJajK -EPCkKvbdSPtHJfEX -EPCkKvbdeKJrVtzn -DoCjjvbdWRnXadlD -DncKjvbdhkdcmtby -DoDLKvbdVviYWEFH -EOcKjvbdTAFJICPE -EPCjjvbdCJKbLIej -DoDLKvbdyYJJaoyk -EPDKjvbdNsUVgFUp -EPCjjvbdrDdhomua -DoDKjvbdySnJNRag -EPCjjvbdyNrgxShc -DnbjjvbdADRxKZhp -DnbkKvbdaMkCStmH -EPDKjvbdfIKvRnRH -DnbkKvbdoAKztIEO -DnbjjvbdDjHjVwjA -EObkKvbdjuwODbYX -DoDLKvbdbhmKKfWx -EPDLKvbdKaLGlaxR -DoDLKvbdwzIGFxFS -EPCkKvbdGBOpxizm -EPDKjvbdRXODcMHc -EOcLKvbdYqNFJMdq -EOcKjvbdxUleQxkn -EPDKjvbdZirgpHCG -DncLKvbderAvzkbo -EPCkKvbdTvMPisaR -EPCkKvbdZtJIxdTO -EOcKjvbddePRavcK -DncLKvbdCDpAuimG -EPDLKvbdQdCaPqES -EObjjvbdZyEJmbkr -DoDLKvbdOEcsiIkE -EOcKjvbdrbFlkgLZ -EOcKjvbdRacdlJZL -EPCkKvbdKDKCqKCx -EPDKjvbdrDeIonVa -DncKjvbdOFEThhjd -DncLKvbdLAkHMbXq -EObkKvbdhytekpnG -DncLKvbdrSUkOLAm -DncLKvbdiCOcFWpq -DoCjjvbdrylPsAhO -EOcKjvbdxVNEpyLn -DnbkKvbdmbJvwnnV -DnbkKvbdVAbQsQrZ -EPCkKvbdCTBCtGXS -DncKjvbdTAEiHbPE -EObjjvbdFeiqnJTq -EPDLKvbdDxYMTtTl -DncLKvbdHDkVibKK -DnbkKvbddePSBvcK -DoCjjvbdauCGwkTh -EPDLKvbdWIYWYGxz -DoDLKvbdjcLjqHVH -DoDLKvbdTfznMXWF -DnbkKvbdkVwNcaww -EObjjvbdlYrrSxgU -DncKjvbdaNLCTUmH -EOcKjvbdznoqEblY -DncLKvbdjuwOEBww -DncKjvbdGQATXHGZ -EOcKjvbdiZuFkpmf -EPCjjvbdajlGOnDA -EPDKjvbdJcJbpjCx -DncKjvbdauBgXjtI -EPCkKvbdsZkpTAhO -EPCkKvbdOEdUIhjd -EOcKjvbdNsUWGduQ -DnbkKvbdVTltFlVj -EObjjvbdaNKasVNH -DnbjjvbdhancEvpq -EPDLKvbdZtIiZETO -DoDKjvbdFxuUaEYC -DoDLKvbdLGGHbAqV -DoDKjvbdqceIpOWB -DoDKjvbdvBEZTPEh -DoDKjvbdKefHbBQu -EPDLKvbdlZTSSyHU -DncKjvbdnPyyWKyC -EObjjvbdsZkpTBHn -DoCjjvbdaaVdepPw -EPDKjvbdtkwvaUAw -EObjjvbdEPCkKvbd -EPCjjvbdtkwvaUBX -DncKjvbdRbDeMIyL -EOcKjvbdxwhjBoyk -DoDLKvbdFxuVAcxC -DnbkKvbdxZgfFxFS -EOcKjvbdjhGkefNk -EOcKjvbdEPDKkWcE -EPDLKvbdQvnEDMID -EOcLKvbdqquKmjaN -DoCkKvbdZtJJZESn -EPDLKvbdTkvOaWPJ -DnbjjvbdcSbkUEJa -EObjjvbdQlxBxmtz -EOcLKvbdehKuqmpg -EObjjvbdpyOggQcx -DncLKvbdnVVZjjSG -EPCjjvbdyqOmIiwA -EPDLKvbddZxpXyRC -EObkKvbdRXODcMID -EOcKjvbdnHFXlmfy -EPDKjvbdznpQdcLx -EOcLKvbdqGDdtWBI -EPCjjvbdZoNhddzK -EOcKjvbdqTsgSSLU -EOcLKvbdRzJhTCvA -EOcKjvbdCIjbLIfK -DncKjvbdKQzEoGNe -EOcKjvbdACrXizJQ -EObjjvbdEzspdkcJ -EObkKvbdsZlQTAhO -EPDKjvbdfoazwEYI -DoDLKvbdjAQGaQGj -DoDLKvbdEzsqFMCi -EPDKjvbdyYJJapZk -DnbkKvbdIxUBglRQ -DoCjjvbdtTRsYyeD -EPDKjvbdGKdsDIMu -EOcLKvbdFyVVAcxC -DnbkKvbdZLrDtNkm -EPDLKvbdsrqrxydc -EPDKjvbdrpVnjCvG -DoDLKvbdmSYtzTEJ -EPDKjvbdajkfOmcA -EPDLKvbdssSSxzEc -EObjjvbdDxYMTssl -DnbkKvbdiMFEOVDZ -EOcLKvbdULvOaVni -EPDLKvbdlqyUzSdJ -EObjjvbdZoNheFZj -DncKjvbdcScLTdKB -EObkKvbdGLFTDINV -DncKjvbdcyyQYZRC -EOcKjvbdYqMeIldq -DoCkKvbdOEcshhkE -EObkKvbdirzhrjiz -EOcLKvbdxUmFRYlO -DoDKjvbdkyTRsZGt -DncKjvbdIryAsNYM -EObkKvbduWNxJpsA -DncKjvbdYkqcsnLm -DoDLKvbddZxpXyQb -DncKjvbdRotGiedX -DnbkKvbdKVtedEgJ -EOcKjvbdjvWnEBww -EObkKvbdFyVVAdXb -DoCkKvbdYlSEUNkm -EOcKjvbdcTDLTcia -EPCkKvbdzjUpQESt -DnbkKvbdqUTfqrLU -EPDKjvbdSQUHJfEX -DnbjjvbdiGjDYvKV -EObkKvbdhkdcnVCy -EPCjjvbdJuuFdFHJ -EObjjvbdYkqdTnMN -DoCkKvbdpssgSRkU -EObkKvbdUWLpKUBR -DoDKjvbdZsiJZESn -DnbkKvbdYqMdhmEq -DoCkKvbdjcLkRHVH -DnbkKvbdSPsgKGDw -DoDLKvbdKVtfEEfi -EPCjjvbdiGibyWKV -EPCjjvbdEYYLtUTl -EPCjjvbdFejSOIsq -DncLKvbdRECaQRES -EPCkKvbdEuyQQNKF -EObkKvbdxwhjCPzL -DncLKvbdiLeDnUby -EOcKjvbdEuxpQMie -EOcKjvbdIidAJogE -DoDKjvbdxsNhlqag -EOcKjvbdEzsqFLcJ -EObjjvbdYTMAmToY -DoDLKvbdwuNFQyLn -DoCkKvbdzitpQDrt -EOcLKvbdZtJIxdSn -DncLKvbdqZPHgRDx -EPDLKvbdMoxQvNfs -DncKjvbdmIctQuSB -DoCkKvbdFfKSNiUR -EPDLKvbdhtydvqtb -EObjjvbdxrnJNRag -DnbjjvbddoFTKssr -EPDKjvbdqlyjZLgi -DnbkKvbdyNsHwsJD -EOcLKvbdxnTHwsJD -EObjjvbdUQqOtuIN -DnbkKvbdwtleQyMO -DoDLKvbdrovPKDVf -EOcLKvbdFaPQxizm -EObjjvbdVAapsQqy -EOcKjvbdJvVFdFGi -DnbkKvbduDDVXVno -EObkKvbdZjTHpGbG -EObjjvbdZirgofaf -DncKjvbdAMgySvzY -DoDKjvbdGdLVibKK -DoDKjvbdWRmwbEkc -DncKjvbdXsMAlsnx -DoDLKvbdtcCuXVoP -DoDLKvbdqlyjYlIJ -EPCjjvbdHELVjCKK -DncLKvbdBdQAuilf -DoCjjvbdeFOrCXDK -DoCjjvbdRpTgJfDw -DoCkKvbdLAkHMbXq -EOcLKvbdaRebhUGL -DncLKvbdnQZyWLYb -EObjjvbdXsMBNUOx -DncKjvbdrSVKnKaN -EPCjjvbdAMhZSwZx -EOcLKvbdcScKtEKB -DncKjvbdKaLGlaxR -EOcKjvbdZRMeJNFR -EPCkKvbdwygeewdr -DnbkKvbdhancFXRR -EOcKjvbdOTUVfdtp -EPDLKvbdmbKXYOnV -DoDKjvbdGLFSbhNV -EPDLKvbdMfbomPtk -DnbkKvbdmIcsqVRa -DoDKjvbdwtmFRZLn -DoCkKvbddtAUATMv -DncKjvbdiBoDEvqR -EObkKvbdiHJcYujV -DnbjjvbdiCPDFWqR -EOcKjvbdyTNhlrCH -DoDKjvbdNQYRVmfs -EOcLKvbdFjdrbhMu -DoCjjvbdsrrSyZeD -EPCkKvbdXsMBMsoY -DoDKjvbdjhHLfFmk -EPCkKvbdyOTIYTIc -EOcLKvbdbhmKLGWx -DnbjjvbdxnTHwsIc -EOcLKvbdZoOJEeZj -EOcKjvbdjmBkzEfo -EPDKjvbdYORAXuWU -EPDKjvbdtkxXAsaX -DoDLKvbduaEYsPFI -EPCjjvbdypoNIiwA -DoDKjvbdVBCRTQrZ -DnbjjvbdlrYtyrdJ -DoCjjvbdhzUekpnG -EOcKjvbdcTCjsdJa -EObkKvbdbhlijfWx -EOcLKvbdYTLaMsoY -DnbjjvbdKVtedFGi -EOcLKvbdsPvPJbuf -DncLKvbdNrsvHEuQ -EObkKvbdmfeYMmfy -EPCjjvbdZjTHpHCG -DoDLKvbdpyOhGqDx -DoDKjvbdRkZGVGjs -DnbjjvbdRWnEDMHc -EPCkKvbdjlbMZdfo -DoCkKvbdyqOmIiwA -DoCkKvbddxZstSFz -DnbjjvbdKCibqJbx -DoCjjvbdqqtjnLBN -DnbjjvbdBhjbLJGK -DoDLKvbdrWokbhxq -EOcLKvbdJzpGXdAN -EPDKjvbdRMxCZNtz -DncKjvbdkClLRGuH -DncLKvbdIHHZxxXg -EPDKjvbdZshiYdSn -EPCkKvbdqcdhomvB -DoDKjvbdVTmUFkvK -EObkKvbdZisHogBf -DoCjjvbdRbDdkiYk -DnbkKvbdGGJrOJTq -DncLKvbdeFPRavcK -DnbjjvbdSPtHKGDw -DoDLKvbdJmADyfuB -EPCjjvbdKCibpicY -DoDLKvbdiGicZVjV -DoCkKvbdZLqdUNkm -EPDKjvbdVUNUFkvK -EPCjjvbdemFvflik -EPCkKvbdkxrqrxft -DnbkKvbdRbEElIxk -EPCjjvbdaaVdfQQX -DoDLKvbdySmhlqag -EPCjjvbdrRuKnKaN -DncLKvbdezuyEhtX -DnbkKvbdtbbuWuoP -DnbkKvbdZtIhxcrn -EObkKvbdcyxoxZQb -EOcKjvbdDxYLtTtM -EObjjvbdjggMFfOL -EPCkKvbdGckWJbKK -DnbjjvbdddnqavcK -EPDKjvbdYgWdAPTJ -DnbjjvbdbhlikGXY -DncKjvbdNPxRVmgT -EObkKvbdRpUHKGDw -EObkKvbdmfdwlmgZ -DoDLKvbdBvzdJFPv -DnbjjvbdZHXEAPSi -EPDKjvbdbQHGdLzd -EOcKjvbdCIjbLIej -DnbjjvbdOXnuzdNt -EObkKvbdrSUkNkBN -DoDLKvbdNeDsiJLE -EPCkKvbdiUyeXRtb -EObkKvbdbsDKsdJa -DncLKvbdbrcLTdJa -DncLKvbdSPsgJecw -EObjjvbdKNADzGta -EPDLKvbdFWZPomKF -EPCjjvbdRzKISbvA -EOcKjvbdvmWAMcdm -DncKjvbdwyhGGYEr -EPDLKvbdfHjuqnRH -EPCjjvbdRXOEDLhD -EPCkKvbdyOSgwsJD -DoDLKvbdnCKXYOmu -DnbjjvbdjmCLyeGo -DnbjjvbdTYKlNzjx -DoCjjvbdZisHpGbG -EObjjvbdUWMPisaR -EObjjvbdqFcdtWAh -EOcLKvbdYqNEhleR -DnbjjvbdlZSrSyGt -EPDLKvbdePEsLTsr -DncKjvbdSBcdlJYk -EPDKjvbdePEsLTsr -EPDKjvbdypnmIjXA -DnbjjvbdsQWPKCuf -EOcKjvbdZRNEhldq -EPCjjvbdYpmFImEq -EPCkKvbdKfFhBaRV -DncLKvbdezvZEhtX -DncKjvbdiCObdvpq -DnbjjvbdmJETqUrB -EOcLKvbdfpBzvcxI -DncKjvbdRbDdkhxk -EPCkKvbdmpZyVkZC -EPDLKvbdyNsIXrhc -DnbkKvbdyYJJaoyk -DncKjvbdwWlBVaWV -DoDKjvbdqwPlCiYq -DncLKvbdvvkaVaWV -DncKjvbdcJMjKewY -EObkKvbdbBWFFpPw -EPCjjvbdpyOhGqEY -EPDKjvbdCDpAujNG -EPDLKvbdCSaCtFvr -DoCjjvbdwygfFxEr -EOcLKvbdLFehBaQu -EPCjjvbdssSSxydc -EPCjjvbdHfgZyYYH -DnbkKvbdnBjWxOmu -DnbkKvbdcJNJjewY -EObjjvbdrzLoraIO -EOcKjvbdADRwjZiQ -EPCkKvbdOAJStJrA -DncLKvbdajkennDA -DoCjjvbdmbKWxPNu -EObkKvbdmbKXYPOV -DoCkKvbdKCjCpjDY -EPCkKvbdIjEAJogE -DoCkKvbdkHgLfGOL -DoCkKvbdJcJbqKCx -EPCkKvbdVUMtGMWK -DoDKjvbdNxOuzcmt -EPDLKvbdNQYRVnGs -DnbkKvbdzjUoocrt -DoDKjvbdDnbjjvcE -DoCkKvbdGBPRZJzm -DoCjjvbdtvNwjRTA -EPDLKvbdZQldhleR -DoDLKvbdUtMsfMWK -DnbkKvbdDxYLtTsl -DoCjjvbdmbJwYPOV -DoCjjvbdaNLCTVMg -DoCjjvbdWXIwvEFH -DoDKjvbddZxoxYpb -DncLKvbdijGHimXr -EPDKjvbdZQmEiMdq -DncKjvbdTulPisaR -DncLKvbdnGdxMnGy -EPCkKvbdlYsSSyHU -DoDKjvbdKRZePFme -DoCkKvbdZRNFJNEq -DncLKvbdkMbMZeGo -DoCkKvbdBiLBkIej -EObjjvbdWXIwvEFH -EOcLKvbdGGJqnJTq -DoDLKvbdRWmcblID -EObjjvbdxUleQxlO -DnbkKvbdREDBPpdS -DnbjjvbdiifHjMwr -EObjjvbdZLqctOMN -EPCjjvbdmRxtyrci -DoDLKvbdDxXlTtUM -DoDKjvbdxrmiNSBg -DoDKjvbdTppntthN -EObjjvbdnUtykKRf -DoCkKvbdRNYBxmtz -EOcLKvbdQYmAHTSK -EPCjjvbdZtIhxcsO -DoCjjvbdbsCjsdJa -EPDKjvbdsZkoraIO -DoDKjvbdEJhJvYKA -EOcLKvbdJSxaTMwl -DoDLKvbdANHxrvzY -EObkKvbdcTDKtDia -EPDKjvbdrWolDJZR -DoDKjvbdsQVnicVf -EPCjjvbdYSlAlsoY -EPCkKvbdJYUBhMRQ -DncLKvbdtlXwBUBX -EObjjvbdVrOYBeMD -EPCjjvbdcJNJkGWx -DncLKvbdjKGHjNXr -DncKjvbdRMwayOUz -EObjjvbdzdzOzdyp -DnbjjvbdNHColpVL -DoDLKvbdNddThiLE -EPDKjvbdFjdsCgmV -DnbjjvbdTJZjRABM -DncKjvbdOTTugFVQ -DncLKvbdVYgszLPO -DncKjvbdEARhlzWw -EPDLKvbdUGzmkvvF -DoDLKvbdmRyVZsEJ -EObjjvbdptUHRqjt -EOcKjvbdJpzFOeme -DnbkKvbdMgDPmPtk -EOcKjvbdhzUfMRNf -DoDLKvbdpyPHgQdY -DoCjjvbdZjShQHCG -EOcKjvbdOTTvGeVQ -EPCjjvbdRacdkiZL -DnbjjvbdzitoodTU -EOcKjvbdxxIjCPyk -EObjjvbdunszqLPU -EObjjvbdwjwDgzzG -DnbkKvbdUyHtZkOn -DnbjjvbdqvpMChyR -DnbjjvbdmIctRUrB -EObkKvbdNHCpMpUk -DoDKjvbdeFPSCXCj -EOcKjvbdtvOXjRTA -DncLKvbdZGvdAPSi -DoCjjvbdQcbaPpcr -DoDLKvbdVUMselVj -DnbjjvbdVgxWXgYz -DoDLKvbdjAQHBQHK -EOcKjvbdxxJKCPyk -DnbkKvbdQdDApQcr -DnbjjvbdqrUjmjaN -EOcKjvbdJzofYEAN -DoDLKvbdJvVGEFHJ -EObkKvbdJcJbpjDY -EPDLKvbdhanbdwRR -EObkKvbdiZtfLqOG -DoCjjvbdeOdsLTsr -DoCjjvbdSLZFuGjs -DoCjjvbdqTsfrRjt -EObjjvbdACqxKZhp -EPCjjvbdxZhFexEr -EPDKjvbdiBoCeXRR -DoDKjvbdqFcdtVaI -DnbkKvbdkClLQgVH -DnbkKvbdZQmEhldq -DnbjjvbdQYmAGrqj -DnbjjvbdiLddNuDZ -DoDLKvbdsQWOjDWG -EPDKjvbdVqnXaeLc -DnbjjvbdwNWANEFN -EPCkKvbdsBfNMHKy -EOcLKvbdKQzFOfOF -DoDKjvbdHELVibJj -EPDKjvbdcImJkFwY -DncKjvbdIwtBgkqQ -EObkKvbdANHySvyx -DoDLKvbdpxnhGqEY -EPCjjvbdrafNMHKy -DoDLKvbdSQTfiecw -DnbkKvbdiMEdOUcZ -EObjjvbdQmYCYnUz -EPDLKvbdWIYWXfxz -EPCjjvbdNeEThiLE -EObjjvbdHDkWJaij -DncKjvbdMgDQNPuL -DncKjvbdKWUedFGi -EPDLKvbdJYUCIMRQ -EOcLKvbdRacdkhyL -EPCkKvbdSBdEkhyL -EPCkKvbdMRwMzUpz -EPDLKvbdkxrqsYft -EObkKvbdRkYetgLT -EPCkKvbdNrsvHFVQ -DoCjjvbdqiAKFNOe -DoDKjvbddwystRez -EOcKjvbdrylQTBHn -EPDKjvbdDjHjWXjA -EObjjvbdCIkCLJGK -DnbjjvbdqwPlDJYq -EPCjjvbdnVUzLKRf -EOcLKvbdUxhUZjnn -DnbjjvbdRpUHJecw -DnbjjvbdjhGlFfNk -EObkKvbdJKEAKPgE -DoDLKvbdIidAKPgE -DncKjvbdCSaCtGXS -DoCjjvbdIidAKQHE -DnbkKvbdFjdsCgmV -DoCkKvbdGKeTCglu -EOcKjvbdEzspeMDJ -EOcLKvbdqUTgSSKt -DoCkKvbdnBivwnmu -DncLKvbdJcJcRKCx -EPCjjvbdVwJXucdg -DnbjjvbdKVuGEFHJ -DncLKvbdnVUzKjSG -DoCkKvbdqGDeTuaI -DnbkKvbdLFfICBQu -DnbkKvbdZjTIQGbG -DoDLKvbddBrlrATm -DncKjvbdYNqAXtut -DnbjjvbdURROtuHm -EObjjvbdxmrgxSiD -DoCkKvbdjJfHjMwr -DncLKvbdNwoVzdOU -EPDLKvbdyTNhlqbH -EObkKvbdiMEcnUby -DoDKjvbdJcKCqJbx -EPDLKvbdNrtVgEtp -DncKjvbdjEkGtoAO -DoDKjvbdNVSrKmAX -EOcLKvbdxmsIYTIc -EObkKvbdcTDKtDjB -EPDLKvbdxsOIlrCH -DnbkKvbdbrbjsdKB -DoCjjvbdpfEEtWAh -DoCkKvbdMowqVmfs -EPCkKvbdeATqMxJf -EObkKvbdjJehJmYS -EPDKjvbdxmrhYSiD -EObjjvbdjbkkQgUg -DoCjjvbdYlRdUNlN -DoDLKvbdiHKDZWJu -DoDKjvbdpedEsvAh -DoCkKvbdEuyPomJe -EPCkKvbdhtyeWrVC -DncLKvbdbAvEfQQX -DnbjjvbdTkvPBWPJ -DncKjvbdYlRdUOLm -DncLKvbdCIjajiGK -EPDKjvbdUtNTfLuj -DnbkKvbdKVuFdEgJ -DoDKjvbdfVzwoizs -EPCjjvbdySmiMrBg -EPCkKvbdrpWPJcVf -DoDKjvbdcImJjewY -DoCkKvbdkVvnECYX -DncKjvbdWRnYCEkc -DoDKjvbdCIkBjhfK -EObkKvbdmIdURVSB -DoCkKvbdTppoUuHm -EPDLKvbdUQqOtuHm -DnbkKvbdhgKDYvJu -DnbkKvbdkHgLfFmk -EPDLKvbdCDoaVjMf -EPCkKvbdehKvSNqH -DncKjvbdNeEUJJLE -DncKjvbdlhdTqVSB -EOcKjvbdEuxpPmJe -DncLKvbdqceIpNua -DnbjjvbdnVVZjjRf -DnbkKvbdKDJcRJbx -EObkKvbdnHEwlmgZ -EOcLKvbdFWZQQMjF -DoDKjvbdKWUedEgJ -DoDLKvbdmozZVkZC -DoCkKvbdZdxGzhJC -EObkKvbdGQATWffZ -EPCkKvbdJuuGDeHJ -DoCkKvbdiGibxvJu -DnbkKvbdBraDUGXS -EPDLKvbdiHKDYvKV -DnbjjvbdZxcjODMS -DnbkKvbdnGdwlmgZ -DoDKjvbdkxsRrxgU -EOcKjvbdrzMQTAgn -DncLKvbdjhHLfGOL -DnbjjvbdQvnEClID -DoDKjvbdqdEhomvB -DoDLKvbdGdKvKCJj -DnbjjvbdqvpLbiYq -EObjjvbdsPvOjCuf -DoDLKvbdVqnXbElD -EPDLKvbdeEoRbXCj -DoCkKvbdyYJKBoyk -DoDLKvbdlhdURUqa -EPDLKvbdYkqdTnMN -DoCkKvbdnGdwmNgZ -EObkKvbdGGKSOIsq -EObjjvbdLLAgvAJy -DnbjjvbdajlFnmcA -DoDLKvbdiifHimYS -EPCjjvbdnPzYukYb -EPDLKvbdVYhTyjnn -EOcLKvbdfNFwHNJk -DoCjjvbdbrbkTcia -DncLKvbdRkZGVHLT -EObkKvbdSQUHKFdX -EOcKjvbdSKxeuHKs -DncKjvbdFxuUaDwb -DoCkKvbdaSGDHtFk -EPDKjvbdZyDimcLr -EObjjvbdiGibxvJu -EPCkKvbdDwwktTsl -EPDKjvbdRadEkiZL -EPDKjvbdmgEwlmfy -DncLKvbdaogHDkzd -EOcLKvbdjuvmdCXw -EPDKjvbdqwPlCiYq -DoDKjvbdLBLHNBxR -EObjjvbdeFOrBvbj -EPDKjvbdFyVVAdYC -EPDLKvbdKNADygUa -DncKjvbdbVCGxLUI -DoCkKvbdJSyArmXl -EObkKvbdQvnDbkgc -EObjjvbdrEEiQOWB -EOcKjvbdZMSDtOLm -DoDKjvbdQvmccLhD -EPCkKvbdrzMQTBHn -EPDKjvbdMgCpNQUk -DoDKjvbdmbJwYPOV -EOcKjvbdgGLymgHA -EObjjvbdsrqsYzFD -EPDLKvbdrNZiyLgi -DnbkKvbdiiegimYS -DoDKjvbdqwQLcJYq -EObkKvbdaNLCSuNH -EPCkKvbdnUuZkJqf -EPCjjvbdSCEEkiZL -DncLKvbdVZHszKnn -DnbjjvbdUtMsfLuj -DoDKjvbdxmrgwriD -DoCkKvbdxxJKBpZk -EObkKvbdZMRdUNlN -EObkKvbdbPgHDkzd -EObkKvbdqqtjnLAm -EPDKjvbdURROuUhN -DoDKjvbdCWzdJFPv -DoDLKvbdMSXMytpz -DnbjjvbdqlyjZMHi -DoDKjvbdbsDLUDia -EOcLKvbduVnXiqTA -DoCjjvbdDxYLsssl -DoDLKvbdyqPMiJwA -EObkKvbdeOdsLUUS -EOcKjvbdEuyQQMjF -DoDKjvbdEztQeMDJ -EPCkKvbdGZVVBDxC -DnbkKvbdnGdxNNgZ -DoCkKvbdcIljLFvx -DoCjjvbdYqMdhmEq -EPDLKvbdgKfzbfAE -EPCjjvbdJcKDRJcY -EOcKjvbdOFDtJJLE -DncKjvbdiLdcmuDZ -EObkKvbdrWpLcJZR -DnbkKvbdVAaqTQrZ -DnbjjvbdFkFTChMu -DncKjvbdaaWEepQX -EPCkKvbdpedEsvAh -DncKjvbdjAQGaPfj -DoDKjvbdbUbHXkTh -DoDKjvbdRjyFtfkT -EOcLKvbdOTTvHEtp -DoCjjvbdRkYfVGjs -DncLKvbdzoQRFCkx -DncKjvbdrMzJyMHi -EOcKjvbdULvPBWOi -EOcLKvbdzdynzdzQ -EPCjjvbdtumxJpsA -DoDLKvbdwMvAMcdm -EOcLKvbdqceIonVa -EObjjvbdOEdUIiKd -EObjjvbdHELVjBij -EObjjvbdqcdiPmvB -DoCjjvbdJvVFdFGi -EPDKjvbdWRmwaeLc -EPDKjvbdZxdJnDMS -DoDKjvbdZxdJnDMS -EObjjvbdxUldpxkn -DnbkKvbdSLYetfjs -EPDLKvbdYqMeIldq -DoCjjvbdrMyjYlIJ -EObkKvbddxZtTqez -EPCkKvbdWSNxCElD -DoDKjvbdWWiYVcdg -DoDLKvbdqGDdsvAh -EOcLKvbdhzVFlRNf -EOcKjvbdaNLCSuNH -DnbkKvbdkHgMFfNk -DnbkKvbddePRbXDK -DncKjvbdNVTSKmAX -EObkKvbdhzUfLpmf -EOcKjvbdZMSDtNkm -EPDKjvbdTqROtuHm -DoCkKvbdddnqbXCj -DoDKjvbdliEURVSB -DncKjvbdtvNxKQsA -DnbjjvbdqceJQOVa -EPDKjvbdpyOggQcx -EOcKjvbdtcDUvuoP -EObjjvbdrWpMChxq -EPDKjvbdGYttaEYC -EObjjvbdiifIKNYS -DoCjjvbdZyEJmcMS -EPDLKvbdKQzFOfNe -DoCkKvbdqYoIGpdY -EPDLKvbdxwhibPzL -EPDKjvbdRadElJYk -DoDLKvbdtkwwAtAw -EPCjjvbdDjHjVxKA -EPDKjvbdrzLosBIO -EPCkKvbdBdPaVimG -DoCjjvbdrafMkfjy -EPDKjvbdNGcPmQVL -DoDLKvbdVviYVdFH -EPCjjvbdkVwODaxX -DncKjvbdkMbMZeGo -EOcLKvbdfkGzbfAE -DnbkKvbdpyOhHQdY -DoDKjvbdQdCaPqES -EObjjvbdEKHiuxKA -DnbjjvbdpxnhGpcx -DnbkKvbdkxsSSxgU -DnbjjvbdURQnuUgm -DoDLKvbdTukpJtBR -EPCkKvbdqAiFAWgd -DnbjjvbdgGLymfgA -EOcLKvbdyYIibQZk -DoDLKvbdWHxVxGxz -EPDLKvbdFyVVAdXb -DnbkKvbdrRuKnKaN -DoDLKvbdTpqOttgm -EPDKjvbdLhbLqYAS -DoCjjvbdHELVjCKK -DncLKvbdfSBWzlDP -DoCkKvbdRDcBPpdS -DoDLKvbdsQWPJcVf -EPCkKvbdySmiMrCH -EPCkKvbdbUbHXjtI -DoDLKvbdUtMsfLuj -EPCjjvbdEvZQPmKF -EObjjvbddeOqbXDK -EPDKjvbdkClKqGtg -DncKjvbdqiAJdmPF -EOcLKvbdlrZUyrci -EOcKjvbdbBVeFpPw -EOcLKvbdULvPBWOi -EPCkKvbdcJMjLFwY -DnbjjvbdZtIhxcsO -EPDLKvbdSPtHJfDw -EObkKvbdaNLBsUlg -DoDLKvbdqvpLcIxq -DoCkKvbdpxoIHQcx -EPCkKvbdlZTRsZGt -DoCjjvbderBWzkcP -EPDLKvbdZtJIxdSn -EOcLKvbdmoyyWKxb -DoDLKvbduaDxroEh -EPDLKvbddoErkTtS -DncKjvbdnPzYvKxb -EObjjvbdsZlPsAhO -EPDLKvbdjJfHjMxS -EOcLKvbdbsDLUDia -DncLKvbdMuTSLNAX -EPDLKvbdemGWfmKL -EObkKvbdKefHbBQu -EOcLKvbduVnXjRTA -DnbjjvbdGZVUaEYC -EOcKjvbdkNCMZeGo -EPCkKvbdGKeSbgmV -DoDKjvbdqrVLNjaN -DnbjjvbdEASIlzWw -DnbjjvbdeOdrkUUS -DncKjvbdDjIJvXjA -DoCjjvbdqGEFUWAh -EPCjjvbdQcbaQRES -DnbkKvbdhtydwSUb -DoCkKvbdMuTRjmAX -DnbjjvbdJutfEEfi -EPCjjvbdzGxlAMeX -DncLKvbdIHGyyYYH -DoDLKvbdxUmEqZLn -DnbkKvbdNHCpMotk -DnbjjvbdFyVVAcwb -EPCjjvbdShzJqABM -DnbjjvbdcyxoxZRC -EPCjjvbdqquKnLBN -DncLKvbdcIlikFwY -DoCkKvbdeOeSkTsr -EOcLKvbdYpldhldq -EPDLKvbdQYmAGsRj -DoCkKvbdzGyMAMeX -EPCkKvbdqrVKnLBN -EObkKvbdxUldpxlO -EPCjjvbdfIKuqnRH -EPDKjvbdFWYpQMjF -EPDLKvbdOFEUJJKd -EOcLKvbdHEKvKBij -DoDKjvbdjcMLRHUg -EPCkKvbdWXIwudEg -DncLKvbdgPazvcwh -DnbjjvbdnVUykJrG -EPCjjvbdxxJJbPyk -DncLKvbdjJehKMxS -DncKjvbdEzspdkbi -EPDKjvbdrpVnjDWG -DnbjjvbdVrOYCFLc -DoDLKvbdMfbpMotk -DncKjvbdbhljLGWx -DncKjvbdxrmhlrBg -EOcKjvbdbKlGPODA -DoDKjvbdJvUfEFHJ -EPCkKvbdySnIlqag -EPDKjvbdVAbQrpqy -DnbjjvbdrykosAhO -DnbkKvbdKfFhCBQu -DnbjjvbdEXwktTsl -DoDKjvbdDoDLLXCd -EObkKvbdvwMAvAvV -EObkKvbdXsLaNUOx -DnbkKvbdRDcBQRES -EOcLKvbdZisIPgCG -DoDKjvbdpfEEtWBI -DoDKjvbdfoazwDwh -EPCkKvbdFpASvffZ -EObjjvbdRWnDblHc -DoCkKvbdNxOuzdOU -DncLKvbdYlSDtOLm -EPCjjvbdjbkjqHVH -EPCkKvbdrMzJxkgi -EPDKjvbdCIkBjhfK -EPCkKvbdUslsekvK -EOcKjvbdFejRnJUR -EPDLKvbdNHColotk -EPCjjvbdUxgtZjnn -DoDKjvbdEOcLLXCd -EPCkKvbdkHflGFnL -EPCjjvbdwygfFxEr -DncKjvbdeOdrjtTr -DoDLKvbdqTtHRqjt -EPDLKvbdQwNdCkgc -EPCkKvbdhzVGLpnG -DoDKjvbdxwiKCPzL -EPCkKvbdZirhQGbG -DoCjjvbdqrUkOKaN -DoDLKvbdlrZUysEJ -DoCjjvbdqFdFUWAh -DnbjjvbdyYJKCPzL -DncKjvbdxUldpyMO -EPCjjvbdvAcyTOeI -EObjjvbdLFegaaRV -DncKjvbdemFvgNKL -EOcLKvbdjcLjqHVH -DoDKjvbdRMxCYnUz -EPDLKvbdRjxfUfkT -DoDLKvbdiMEdNuDZ -DoDLKvbdZRMdhmEq -DoDLKvbdqlyiyLgi -EObjjvbdiiehJmYS -DoCjjvbdwuMeRYlO -EPDKjvbdqquKmkAm -EOcKjvbdlrYtysDi -EPDLKvbdliETqUrB -EObjjvbdePErkTsr -DoDLKvbdfHjvRnQg -EObjjvbdRXOECkgc -EObkKvbdMpXqWOGs -DncKjvbdEJhJvYKA -DoCkKvbdVrOYBeMD -EPDKjvbdTkvPBWOi -EOcLKvbdjuvmcbYX -DncKjvbdMfcQMouL -EOcLKvbdMpXpvOHT -DoCjjvbdiLdcmtcZ -DnbkKvbdiHJcZWJu -EPDLKvbdTqQnuUgm -DncKjvbdLGFgbBQu -EPDKjvbdNdctIiLE -EPDKjvbdZxdKODLr -DoDKjvbdSZjITCvA -EPCjjvbdDwxMUTsl -EPCkKvbdySmhmRag -EOcLKvbdSPtHKGDw -DoDKjvbdmIctRUqa -DoDKjvbdaRfChTek -DncLKvbdyNrhXsIc -DncLKvbdJTZBSlxM -DoDKjvbdFeirOIsq -DnbjjvbdJutedFHJ -DnbkKvbdUsltGMWK -DnbkKvbdbhljLGWx -EPCjjvbdirziTLJz -EOcKjvbdnPzYvKyC -DoDKjvbdkDMLRGtg -DncLKvbdyzeNqhIh -EPCjjvbdYTMAmUPY -DoCkKvbdgGMZnHHA -DncLKvbdlZSqsYft -EOcLKvbdZjShQHCG -DnbjjvbdjhGlGGNk -DoDLKvbdkxsRryGt -DoCjjvbdZyDjNbkr -DnbkKvbdNeEUJIjd -EOcKjvbdxxJJbPyk -DoDLKvbdRbDeMIxk -EObjjvbdrDeJPnWB -EPCkKvbdrXPkbiYq -EPCjjvbdeFPRbWbj -DncLKvbdHffyxxYH -EPDKjvbdcyyQYZQb -DoCkKvbdNsTvGeUp -EPCkKvbdfpBzwDxI -EPCjjvbdqTtHRrLU -EPCkKvbdhgJbxvJu -EOcKjvbdkxsRryGt -EPCkKvbdZshhyETO -DnbkKvbdrWpLbiZR -EObkKvbdnHExMmfy -DnbkKvbdbUbGwkTh -DnbkKvbdnHExMnHZ -EObjjvbdZnmiFEyj -EObkKvbdSQUGjGDw -EPCkKvbdqTtGrRkU -EObjjvbdcImKLGXY -EObkKvbdShzJqAAl -DncLKvbdGGJqnIsq -DnbkKvbdehKuqmpg -DncLKvbddeOrCXDK -EOcLKvbdRMwbYmtz -DnbjjvbdgFlZmgHA -DnbkKvbdyOSgxTJD -EOcLKvbdQZNAGsSK -DoCkKvbdRMwayNtz -DncLKvbdezvYeItX -EOcLKvbdVAapsQrZ -DoCjjvbdcImKLFwY -DoDKjvbdTqQnttgm -DnbjjvbdOEdUJIkE -DoDKjvbdeYZssqez -DnbjjvbdZjSgpHCG -DoCkKvbdTvMPisaR -EOcKjvbdZjSgofaf -EPDLKvbdfVzwoizs -DnbjjvbdCSaCsewS -EPDLKvbdFVyPpMjF -EObkKvbddjJrVtzn -DnbjjvbdyOSgxTIc -EOcLKvbdrovPKDVf -DnbjjvbdxZhGGXeS -DncLKvbdbLLeoNcA -EOcKjvbdMfbomQUk -EPDLKvbdaRebhTfL -DoDLKvbdoAKztHcn -EOcLKvbdGckWJbJj -DncLKvbdqmZjYlHi -DncKjvbdZyDinDLr -DoCkKvbdxwhibPzL -DnbkKvbdZoOJFFZj -EPDLKvbdYpmEiMdq -DoCkKvbdiUzFWquC -DnbjjvbdsPvPJcVf -DncKjvbdDwxMTssl -EObkKvbdZQleJNEq -DoDLKvbdWSNxBdkc -DoCjjvbdcSbkTcia -EOcKjvbdqvolChyR -DnbjjvbdqlzJxlHi -DoCjjvbdlrZUzTEJ -EPCkKvbdGdLWJbJj -EObkKvbdzoPqFDLx -DncLKvbdANIYrwZx -EObjjvbdSPsgJfEX -DoCjjvbdbiNJjfWx -DnbkKvbdMfbpNQVL -EObkKvbddePRbXCj -EPDKjvbdShzKRAAl -DoDKjvbdnPyxukYb -EObjjvbdVZITzKoO -EPDLKvbdZyDinDMS -EPCjjvbdYpldhmFR -DoCkKvbdZjTIPfaf -EObjjvbdqdEiPmua -DnbkKvbdRadEkhxk -EPDLKvbdzjVPpDrt -DnbkKvbdaMkBsUlg -DncLKvbdMpXpunGs -DoDKjvbdUxgszLPO -EPCkKvbdiiegilxS -DoCjjvbdEOcKkWbd -EOcLKvbdcTDLUEJa -EPDLKvbdZtIiYcrn -DoDLKvbdmttyjirG -EPDLKvbdGdLVjBjK -DncLKvbdDigjVxKA -EPCkKvbdelfWflik -DoDKjvbdOTUVfdtp -DncKjvbdTlWOaVni -EPDKjvbdrpWOibvG -EPDKjvbdfRaWzlCo -DncKjvbdlrYuZrdJ -DoDKjvbdIsZBSlwl -EPDLKvbdqquLOKaN -DnbjjvbdJmAEZgUa -EPCkKvbdcImJkFvx -DncLKvbdkxrqsYft -EPCkKvbdUWLojTaR -DoDKjvbdnGeXlmfy -DoCkKvbdiMFDmuCy -EPDKjvbdauCHXjtI -DoCjjvbdBsAcUGXS -DoDKjvbdACrYJyhp -DoDKjvbdsZlPsBHn -DoDLKvbdjJegimXr -DoDKjvbdWXIwvDdg -DncKjvbdelewHNJk -EObkKvbdyTOJMrCH -DoCkKvbdNddUIiKd -DoCkKvbdRyjHrbvA -DoCjjvbdiGjCyWKV -DoDLKvbdhlFEOVDZ -EPCkKvbdQdDAoqDr -DoDKjvbdBiLBjhej -EOcKjvbdqlyjZLgi -DncLKvbdtSrTYzFD -DoCkKvbdrMyjYlHi -EObjjvbdhficYuiu -DoDKjvbdfekymgHA -EOcLKvbdiifHjNXr -EObjjvbdIwsaglQp -DoCjjvbdCIkBkIfK -EPDKjvbdaSFcHsfL -DoDLKvbdMgDPlpUk -EPDKjvbdqYnggQdY -DoDKjvbdaSFbgsek -DoCjjvbdiZtekqNf -EPDLKvbdkClKpftg -DoCkKvbduMYWaUAw -EObkKvbdtTSTYydc -DnbjjvbdptUGqrKt -EObjjvbdYlRctNlN -DncKjvbdMgDQNPtk -DncLKvbdILaznXQk -DoDLKvbdiCPDFWpq -DoCkKvbdiGicZWKV -DncKjvbdFjdrbglu -DncLKvbdKWUfDeGi -DoCjjvbdVhXuwgYz -DoDKjvbdhtzFWquC -EPCjjvbdRpTfiedX -DoCkKvbdKVuFdEfi -DoDLKvbdbBWEfPow -DoCkKvbdZyDjODLr -DncLKvbdeAUQmXif -DoCkKvbdIidAKQHE -EPCkKvbdTqROuVIN -DncKjvbdRXODcMID -DoDKjvbdkyTRsZHU -EPCjjvbdxnTIXrhc -EObjjvbdJzofXdAN -EOcKjvbdiBncFWpq -EObkKvbdYORAXuVt -DnbjjvbdiMEdNtby -EPDKjvbdVrOXbFMD -EPCkKvbdAMgxrwZx -DoCkKvbdtbbuXVoP -EPCjjvbdDoCkKwCd -DncLKvbdVBBpsRRy -DoDKjvbdemGWgMik -EObkKvbdeEnqbXDK -EPCjjvbdhanbdvqR -DnbkKvbdmaiwYOnV -DoCjjvbdcJMjLGXY -DnbkKvbdIryArlxM -EPCjjvbdtkwvaUAw -DnbkKvbdxZgefYFS -EPCkKvbderBWzlDP -EPCjjvbdNxPVzdOU -EPDKjvbdaSGDHsek -EOcKjvbdqcdhpOVa -EPCkKvbdxmsHxShc -DoDKjvbdDncKjwDE -DoCjjvbdYpmEhmFR -DncKjvbdaRfCgsfL -EObjjvbdegjurNpg -DnbkKvbdjhHMFenL -EPCjjvbdMfcPmQUk -EOcLKvbdACrYKZhp -DoDKjvbdffMZmgHA -DoCjjvbdaaVeGQQX -EOcKjvbdSCDdkiZL -EOcKjvbdqwPlCiYq -DoDKjvbdajlGPODA -DncLKvbdJYTbHkpp -DncLKvbdtcDVXWOo -EPCjjvbdEXxLtTsl -EPCjjvbdJuteceGi -DnbjjvbdDoCkLWbd -DoCkKvbduCbtwWOo -EPDLKvbdauBgYLTh -EPCjjvbdOXoVzcmt -DoCkKvbdRMxByOUz -DoCjjvbdqYoIGqDx -EPCjjvbdNGbpMpVL -DoCjjvbdJpzFOfNe -EOcKjvbdVAapsQrZ -DncKjvbdpxoIHQcx -EOcKjvbdRaceLiZL -DncLKvbdtcCuWvOo -EObjjvbdbBVeGPow -DnbjjvbdKyRKSzuG -EOcLKvbdFyVUaEYC -EPDKjvbdkCkkRHUg -EObkKvbdKaKfmBxR -DoDLKvbdbUbGwjsh -DnbjjvbdrovOjDVf -EPCjjvbdZsiIyDsO -EObjjvbdRDbaPqDr -EOcKjvbdnBivwnmu -EPCjjvbdYTMBMsoY -DoDLKvbdxKwEHzzG -EPCkKvbdqTsgRqkU -EPDKjvbdfMfWgNKL -DnbkKvbdznpREbkx -DncKjvbdJXtCHlRQ -EPDLKvbdGYuVBEXb -EPDKjvbdZLrEUOMN -EPDKjvbdtcCtvuoP -EObjjvbdXsLaNUPY -EPDLKvbdyOTIYSiD -EObjjvbdsrrTYyeD -EObjjvbdZisHpGaf -DoDLKvbdvOszqLOt -DncLKvbdaMjbSuNH -DncLKvbdYTMBMsoY -EPDKjvbdwzIGFxFS -EPDLKvbdmRyUyrci -DncLKvbdTkvPBWOi -EPCjjvbdNdcsiIjd -EPCkKvbdEzspdkbi -EObkKvbdrovOicVf -DoDKjvbdhbObeXQq -DncKjvbdZnnIeFZj -EObkKvbdRECaPpdS -EOcKjvbdnGeXlnHZ -EPCjjvbdauCGwjsh -EPCjjvbdczYpXyRC -EOcLKvbdDihJuxKA -EOcKjvbdkVwNcbXw -EObjjvbdbsCkTcia -DoCkKvbdfMewHNKL -DoCjjvbdxZgeexEr -EOcLKvbdiBoDEwQq -DnbkKvbdpstHSSKt -EOcKjvbdQvmdClHc -EPDKjvbdIxUBhLqQ -EObkKvbdZtJIyESn -EPCjjvbdtumwjQsA -DoCjjvbdNPxQunHT -EOcLKvbddndrkUTr -EObjjvbdCTBCsevr -EOcKjvbdiUzEwRuC -EPDKjvbdRyigrbvA -DoCjjvbdezvYeJTw -EOcLKvbdVgxVxGxz -DnbjjvbdZeXfzhIb -DncKjvbdxZgfFweS -DoCkKvbdKxqKSztf -DncLKvbdpyOggREY -EPDLKvbdXrlBNUOx -EPCkKvbdqwPkbiZR -EPDLKvbdbsCjscia -DoDKjvbdnGeYMmgZ -EOcLKvbdUsmTfLvK -DnbkKvbdjuwOEBxX -DnbjjvbdTAFJICPE -DncKjvbdEuxoomKF -EPDKjvbdeOdsLTsr -EObkKvbdZshiYdSn -DncKjvbdcTDKscjB -DncLKvbdvwMBWAvV -EOcKjvbdVwIwudFH -EPDLKvbdlZTSSxgU -EOcKjvbdMgColotk -EOcLKvbdZdxGzgiC -DnbjjvbdULuoBWOi -EObjjvbdiCObeXQq -EPDKjvbdNUsRkNAX -DoCjjvbdZxcjOClS -DncLKvbdiUzEwSVC -DoDLKvbdvlvAMceN -DoDLKvbdqcdhpOWB -EObkKvbdCSaDUGWr -DoCkKvbdssSTYydc -DoCkKvbdnGdxMmgZ -DoCkKvbdHELWJbKK -DoDKjvbdKefHbApu -EObkKvbdVqmwbFLc -DoCkKvbdUtNTekuj -EPDLKvbdTlWOaVni -DoCjjvbdDxXkstUM -EPCkKvbdpxoHfqEY -EPDKjvbdmSYtzTEJ -DoCjjvbdddnrCXDK -EPCkKvbdZjTHpGbG -DncLKvbdhzVGLqOG -EPCjjvbdZjSgogBf -EPDLKvbdkDLjqGuH -DncLKvbdxUmFRZLn -EPDLKvbdjhHMFfNk -EPCkKvbdZjTHpHBf -EObkKvbdegkVqnQg -EPDLKvbdGYttaEXb -EObjjvbdZdwfzhJC -DoCkKvbdGQASwHFy -EPDKjvbdkVvnDbXw -EObkKvbdJYTagkqQ -DoCjjvbdMSWlzVQz -DoCjjvbdnGeYMmfy -DoDLKvbdADRxKZiQ -EObkKvbdZLqdTmkm -EPCkKvbdFeirOItR -EPCkKvbdRjyGVGjs -DncLKvbdiMFDnUcZ -EObkKvbdVAaqSpqy -EPCkKvbdULunaVni -DnbkKvbdcImKKevx -DoCjjvbduaDyTPFI -EPDKjvbdKQydoFnF -EPCjjvbdozmcjwoA -DoDLKvbdZLqdUNlN -DoDKjvbdJXsbHkpp -DoCkKvbdelfXHNJk -EObjjvbdeFOqavcK -EPDLKvbdqlyjZMIJ -DoCjjvbdUtMsekvK -DoCkKvbdIxUBhMQp -EOcKjvbdemGWgMjL -DoCkKvbdwuMeQyLn -DncKjvbdkClKpgVH -DoDKjvbdfNFvflik -DncKjvbdhkdcmuCy -DoDLKvbdCJKakIfK -DnbkKvbdSQTgJfEX -DnbkKvbdkIGlGFmk -DoDKjvbdySmhlqbH -DoCjjvbdGdLVibJj -EPCjjvbdSLZGUfkT -EPDLKvbdSKxfVHKs -DoDKjvbdGLFSbhMu -DoCkKvbdqFcdtWAh -EOcLKvbdbVBfxLUI -DoDKjvbdcScKsdKB -DnbkKvbdVwJYWEFH -EPCjjvbdGQASwHFy -DnbjjvbdqUTfrRjt -EPDLKvbdEYYMTtUM -DoDLKvbdfNFwHNKL -EObkKvbdsQWPJbvG -EOcKjvbdIsYaSmYM -EPDKjvbdBdQAuilf -DnbkKvbdrounibvG -EObkKvbdiCPCdvqR -EOcLKvbdBsAbsfXS -DoCjjvbduDDVWuoP -EPCkKvbdbsCjtEJa -EOcKjvbdcTDLTdKB -DoCjjvbdXGYytAPT -DnbjjvbdePFTLTsr -EObkKvbddoErjssr -EPCkKvbdcTDKsdJa -EPDKjvbdjgflGFnL -EObjjvbddeOqbWcK -EObkKvbdACqwizJQ -EObjjvbdHgGyyXxH -DoCjjvbdqlzKZMHi -DnbjjvbdhfibxvJu -DoDKjvbdSCEFLiZL -EPCjjvbdSCEFLiYk -EObkKvbdiLdcmuDZ -EObkKvbdzGyMAMeX -EPDKjvbdVYhTzKoO -EPCkKvbdxrmiNRag -DoDLKvbdjKGHilxS -EOcKjvbdhWyAzzAJ -EPDLKvbdMfcQNQVL -DncKjvbdYkqdTmlN -DoDLKvbdjJfIJlwr -EOcLKvbdZeYGzghb -DncLKvbdJuuFceGi -EPCkKvbdhzUelRNf -DnbkKvbdBhkCKhej -DoDLKvbdhbObeXRR -DnbkKvbdzHZMAMdw -DoDKjvbdZxcjNblS -DoCjjvbdDwwksstM -DoCkKvbdUVkpJtAq -DoDLKvbdaaWEepPw -DncLKvbdGdKvJbKK -DoDLKvbdTulQJtBR -DoDKjvbdqceJPnVa -DnbkKvbdvAdZTOeI -EOcKjvbdVAbRSqRy -EPCkKvbdTqQnuVHm -DoCjjvbdwNWANDeN -DnbkKvbdZtIiYdSn -EPCjjvbdPIAXyAZB -EPCjjvbdZoOIeEzK -DoDLKvbdmJETqUrB -DoCjjvbdOFDtIiKd -DnbkKvbdqvolDIxq -DnbjjvbdmgFYNNfy -DncLKvbdieLHUoAO -EPCkKvbdDnbkLWcE -DoCjjvbdmJETpuSB -DncLKvbdiiegjNXr -EPDKjvbdZQldiMeR -EOcKjvbdZHXEAPTJ -EObkKvbdWHwvXfxz -DnbkKvbdxUleRZLn -DnbkKvbdtvNxKQsA -DoDKjvbdOStWHEuQ -DnbkKvbdsBellHLZ -DoDKjvbdsCFllGkZ -EPDKjvbdjhGlGGOL -DncKjvbdxxJKBoyk -DncKjvbdrXPkcJYq -DoCkKvbduVnXipsA -DoDKjvbdjKGHjMwr -DoDKjvbdbBWEfPpX -EOcKjvbdznoqEcMY -DoCkKvbdySnJMqbH -DoCjjvbdlrZVZsDi -EPDLKvbdKfFgbApu -DoDLKvbdZRMdiNFR -EObjjvbdpeceUWAh -EObkKvbdRotHKFcw -DncKjvbdiZuFkpmf -DoDKjvbdnGdwmNgZ -DoDKjvbdMoxRVnGs -DoDLKvbdiVZeXRtb -EOcKjvbdGAoRYizm -DoDKjvbdJJdAJpGd -DoDKjvbdwMvANEFN -DnbjjvbdaaWFFpQX -DnbjjvbdqlzKZMIJ -EPDLKvbdxnShXsJD -DncLKvbdMfcPlotk -DncLKvbdURRPVUhN -DnbkKvbdHgGzZXxH -EOcLKvbdYlRctOMN -DncKjvbdnHEwlnGy -DoDKjvbdlYsSTZGt -EOcKjvbdZxcjNcLr -EObjjvbdmttyjjSG -EObkKvbdffLynHHA -DnbkKvbdmpZxvLZC -DncLKvbdBhjakJGK -DoCkKvbdpstHSRkU -EPDLKvbdiLddOVCy -EOcKjvbdxUleQyLn -EPCkKvbdTukpKTaR -EOcLKvbdjvXOECYX -EObjjvbdRWnEDLgc -EObkKvbdbhljLGWx -EPCkKvbdZoOJEdyj -DnbkKvbdqrVKnLAm -DoDKjvbdVAbRTRRy -DnbkKvbdhfjDZWKV -EOcLKvbdkWXOECYX -DnbkKvbdYTLaMsnx -EObjjvbdZRNFImFR -DncLKvbdCWzdIdpW -EOcLKvbdpyPIGqDx -DoDLKvbdiCOcFWpq -EPCjjvbdhtzFXSUb -Dnbjjvbdlqxtyrci -DoCkKvbdiZtelROG -EPCkKvbdVUNUFkvK -DnbkKvbdNddUJJLE -DoCkKvbdNdctIhjd -DnbkKvbdcyyQYZQb -EObkKvbdQmYByNtz -DoDLKvbdVrNxBeMD -EPCjjvbdCTBCsevr -DncLKvbdtSrTYyeD -DnbjjvbdRyigsDWA -DncLKvbdJYUBglQp -DoDKjvbdSPsfiedX -DoCkKvbdADRxKZiQ -EPDLKvbdrEFJPmvB -DnbjjvbdvAcyTOdh -EOcKjvbdaMjasUmH -DoDKjvbdZjSgogBf -DnbkKvbdnGeXmOGy -DnbjjvbdMgComPuL -EPCkKvbdxKvcgzzG -DncKjvbdwtldpyMO -DoDKjvbdbhlikGXY -EPCkKvbdpyPIHREY -DoDLKvbdkClLRHUg -EPDKjvbdqFdFUWBI -EOcLKvbdkxrqrxgU -DoDLKvbdTvLoitAq -DoCjjvbdJuuFcdfi -EPCjjvbdrykpTAhO -EPCjjvbdiZuFkqNf -EObjjvbdEuxpQNKF -EPCjjvbdGGKSOJUR -EPCkKvbdcyxowxqC -DnbjjvbdjhGkeemk -EPDKjvbdijGIJmYS -DnbkKvbdypnliKXA -EOcKjvbdRadFLhyL -EPCjjvbdxwiKCPyk -DoCkKvbdfILVqnQg -DoDLKvbdkNCLzEgP -DoCkKvbdGKdrbglu -DnbkKvbdJcJcRJcY -DoDLKvbdIwsahMRQ -DnbkKvbdNddUIhjd -EPCkKvbdJuuGDdgJ -EPDLKvbdjKGHjMwr -EObkKvbdGdKvKCJj -DncKjvbdNUrqkNAX -DoDLKvbdTqQoVVHm -DoDKjvbdNddTiIkE -EPCkKvbduaEZTPFI -DnbjjvbdFWYopMie -EObjjvbdyXhiaozL -EPCjjvbdhaoDFWpq -DncKjvbdJJdAKQHE -DoDKjvbdegkVrOQg -DnbjjvbdwuMdqYlO -EPCkKvbdLKaHvAJy -DoDKjvbdRbEFLiYk -DoDKjvbdSxLMNzjx -DnbkKvbdGKdsChMu -DncKjvbdACrYJzJQ -DoCjjvbdbUafwkUI -DncKjvbdzjVPpDrt -DnbjjvbdFfKSOJTq -EPDKjvbdHffyyXxH -EOcLKvbdRkZFtgLT -EOcKjvbdXsMAmToY -EOcLKvbdNPwqWNfs -DoCjjvbdEuxpPljF -DncLKvbdjJfIJlxS -DoCjjvbdhgJbxuiu -EPCkKvbdrDdhpOWB -DnbkKvbdwWlBWAuu -EObjjvbdySmiMrCH -EPCjjvbduWOXjRTA -DncLKvbdRDbaPqES -EPCkKvbdjEkHVPAO -EPDLKvbddiiqvUzn -EPDKjvbdyYJKCPyk -DncKjvbdNeEThiKd -DncKjvbdrbGMlGkZ -EOcKjvbdOTTvHEuQ -EObjjvbdFyVUaEYC -EPCkKvbdbiMikFwY -EPDKjvbduaDxsPFI -DncLKvbdozmckYPA -DoDLKvbdVYgsykPO -DoCjjvbdQvnDbkgc -DncKjvbdZLrDtNkm -DoDKjvbdHfgZyYXg -DoDKjvbdauCGwkUI -DoDKjvbdmJDsqVSB -EOcKjvbdhgJbyWKV -EPCjjvbdrouoKDWG -DoDKjvbdQmYCYnUz -DoDLKvbdfHkVqmpg -DoCjjvbdZjShPfaf -DoCkKvbdIGfzYxYH -EPDKjvbdZRMeJNFR -EPCjjvbdRpTgKFdX -EPCkKvbdEYYMUUUM -DncLKvbdwuMdqZLn -EOcKjvbdmuVZkJqf -DncKjvbdhgJbyWJu -DnbjjvbdKVuFcdfi -EPCkKvbdRadElIxk -EPCkKvbdYlSDsmkm -DoDKjvbdhlFEOVDZ -DoCjjvbdIsZBSlwl -DoDKjvbdLAkGmCXq -DoDLKvbdqwQMCiYq -EPDKjvbdURROtuIN -DoCjjvbdpxoHgREY -DncKjvbdwXLaWAuu -EObjjvbdrpWPJcWG -EPDLKvbdmozYvLYb -EPCkKvbdMowpunGs -DnbkKvbdANHySvzY -DncLKvbdZyDinDLr -DoCjjvbdziuPpESt -EPDKjvbdiVZeXRuC -EPDLKvbdDncKkWbd -EOcLKvbdFVxopNJe -DncLKvbdACqxJzIp -DncKjvbdaMkCTUlg -DoCkKvbdhyuGMQnG -EObjjvbdbBWFFpPw -EObkKvbdTAEiICPE -DoDKjvbdbUagXjtI -DoDLKvbdGZUuAcwb -DoDKjvbdnGdwlmgZ -DoDLKvbdVBCRSpqy -DnbjjvbdfIKvRnRH -EObkKvbdaRebgsek -DnbjjvbdNVSrLNAX -EPDKjvbdrJAKEmPF -DnbkKvbdBdQBWKNG -DoCjjvbdePFTLUUS -EPCkKvbdRDcAoqDr -DncLKvbdrNZiyLhJ -DoCkKvbdLqwNZtpz -EPDLKvbdlqxtzTEJ -DnbkKvbdrRtjmkBN -EPCkKvbdZRMeJNEq -DnbkKvbdZsiJYdTO -EObjjvbdUtMtGLvK -EOcLKvbdnCJwYOnV -DncLKvbdUMWPAuni -EOcKjvbdJcJbpjDY -DoCkKvbdcImKLGXY -EObkKvbdYSlAmTnx -DncLKvbdCTBCtFvr -EObjjvbdqlyjYlIJ -DoCkKvbdmSZUzSci -DoDKjvbdjEjfuPAO -EPCjjvbdWfYzUAPT -DnbjjvbdzROmJJwA -EObjjvbdnQZyVjyC -DncKjvbdjAQGaPgK -EObkKvbdtTSTZZeD -DoDLKvbdZLrETnLm -DncKjvbdCDpAujNG -DncKjvbdUyHsykOn -EPDLKvbdeXystRez -EPCjjvbdlrZUyrci -EPDKjvbdwjvcgzzG -EPDKjvbdnHExNOGy -EOcKjvbdZLqdTmlN -EPCkKvbdEuxopMjF -EObjjvbdJYTaglRQ -EPCjjvbdrWpLbiZR -EPCjjvbdNxOuzcnU -DoDLKvbdijFhKNXr -DnbkKvbdKWVGEFHJ -DnbkKvbdKCicQjCx -DoCkKvbdcScLTdKB -EOcKjvbdKWUecdfi -DoCjjvbdiLeDmuDZ -DncKjvbdySnJNSCH -EPDLKvbdZshhyDrn -DnbkKvbdssSSxydc -EOcLKvbdqrUjnLBN -EPDKjvbdGdLWKCKK -EObjjvbdsQWPJbuf -DoDLKvbdJcKDRJcY -DoCjjvbdZoNiEeZj -DnbkKvbdGFjSOJTq -EPDLKvbdxxJKBozL -DoDKjvbdBraDUGXS -EPDKjvbdJbjCpicY -DoCjjvbdVqmwbEkc -EPDKjvbdijFhKMwr -EPDLKvbdrSVLNkBN -DoCkKvbdiUzEvquC -EPCjjvbdWIYVxGxz -DnbkKvbdZoOIdeZj -DncLKvbdZRMeJNEq -EObjjvbdZMSDtOMN -DnbjjvbdRWnDcLgc -DoDLKvbdmRxtzTDi -EOcKjvbdJmADygUa -EOcKjvbdxUmFQyMO -EOcLKvbdOTUWHEtp -DoDLKvbdZRNFJMeR -EOcLKvbdxmsHxShc -EPCkKvbdUxhTykPO -DoCkKvbdelfWfljL -EPDLKvbdFejSOJTq -EPCkKvbdKefIBaRV -DncKjvbddeOqbXDK -EOcKjvbdhlEcnUcZ -DoCkKvbdZtJJZETO -DnbjjvbdSPtHJfDw -DncLKvbdOFDtIhkE -EPDLKvbdFyVVAcwb -DoCjjvbdqTtGqqjt -EOcLKvbdyTOIlrCH -DnbjjvbdACrYKZiQ -DoDLKvbdvmWAMceN -DoDKjvbdLBLHNCYR -EPCkKvbdIxUCHlQp -EPDLKvbdQmXayNtz -DoCjjvbdKRZdoFme -DncLKvbdZoNiEdyj -DoDKjvbdqqtkOLBN -EPCkKvbdiZuFkpmf -DncKjvbdEPCjkXCd -DoDKjvbdbVBgXjsh -DoCjjvbdmRyUzSdJ -EObjjvbdMJCLpxAS -DoCjjvbdwWlBWAvV -EPDKjvbdNHCpMouL -DncKjvbdEOcLKwDE -DoCjjvbdwjvcgzzG -DnbkKvbdNGbpNPtk -DoDLKvbdZGwEAOri -EObjjvbdaRfDITfL -DoDKjvbdVvhwudEg -EPCjjvbdHgGyxwwg -DncKjvbdcJMikFwY -EObjjvbdwMvAMdEm -EOcKjvbduMYXBUAw -EPDLKvbdpfDeTuaI -DoDKjvbdssSSxzEc -DnbjjvbdjblLRHUg -EOcLKvbdVwIxWDeH -EPCkKvbdLGFgaaQu -EPDKjvbdBiKakIfK -DoDLKvbdEOcKjwDE -EOcKjvbddijRvUzn -DoCjjvbdmaivxPOV -DnbkKvbdMfcQNPuL -DncLKvbdZtIiZDsO -DoDLKvbdhlEcmuDZ -EOcKjvbdIGfzYxYH -DncLKvbdICLydzAD -EPDLKvbdMfcPmPuL -DnbjjvbdrRuKmjaN -DnbkKvbdbsDKscjB -DoCkKvbdhkddNtcZ -EOcLKvbdNQXqVnGs -DoDLKvbdrEFIonVa -DoCjjvbdQvnDcMID -EPCjjvbdjlalZeGo -EPCkKvbdjJfIKNYS -EObjjvbdREDBPqES -EPCjjvbdiZtfMRNf -DoDKjvbdADRxJyiQ -DncLKvbdYkqcsnMN -DncLKvbdZshiZDsO -DoDLKvbdRNXayNtz -DncLKvbdqcdiPmvB -EPCkKvbdrNZixlHi -EPCjjvbdwtmFRYlO -EObkKvbdJTZBTNXl -EOcLKvbdWRnXadkc -DoDLKvbdvwMBVaVu -DoDKjvbdlZSrTYgU -EPDLKvbdQcbaQRDr -DoCjjvbdhuZdvrUb -DnbkKvbdZxdKOClS -DncKjvbdJzoexEAN -EOcLKvbdQvmdDLhD -DncLKvbdunszpkPU -EOcKjvbdiZuGMQnG -DncKjvbdVZIUZkOn -DoDLKvbdkxsRsYgU -EPCjjvbdGQASwGey -DncKjvbdnBivwoNu -EPDLKvbdsBelkfjy -DoDLKvbdddoRbWbj -EPCjjvbdhancFXQq -EObkKvbdJvUfEEfi -EPDLKvbdIidAKPfd -DoDLKvbdxVMdpxkn -DoCjjvbdaNLCTVNH -DnbkKvbdZyDinDMS -DoDLKvbdrMzJyLhJ -EPDLKvbdyXhiaozL -DoCjjvbdGKeTDHlu -DncKjvbdwzIGFxFS -EObjjvbdJvUedEfi -DncLKvbdIjEAJpGd -DncKjvbdyTNiNRbH -EOcKjvbdidkGuPAO -DoDLKvbdkVvmcbXw -DoCjjvbdJYTbHkpp -DoDLKvbdFyVVBEYC -EPDLKvbdmoyyVjyC -EOcKjvbdcTDKtDjB -EPCjjvbdEvYpPmJe -DoCjjvbdCJLCKhej -DoCjjvbdSKxfUgLT -DoDLKvbdFjeTDINV -DncLKvbdEXxMUTtM -EOcKjvbdWRnXaeMD -DoCjjvbdrMzJyLgi -DoCkKvbdcSbkUEKB -DnbkKvbdyzeOSIIh -DncLKvbdpstGqrKt -EPDKjvbdCJLBkJGK -EOcLKvbdJcJcQjDY -EPDLKvbdbLLfPNcA -DnbjjvbdEASImZwX -DnbjjvbdtumwiqTA -DnbkKvbdxKvdHzyf -DoCjjvbdVwIxWDeH -DncLKvbdYzcFqjVy -EPDKjvbdqiAJeMoF -DoDLKvbdNQXqVmfs -EPDLKvbdFjdsChNV -DoCkKvbdOTUWGdtp -EOcKjvbdOEdUIiKd -EOcLKvbduaEZSoFI -EOcLKvbdxsNhlrBg -EObkKvbdcIlijfXY -DoDLKvbdLqvlytpz -DoDKjvbdIryBTNXl -EObjjvbdQwOECkhD -DoCjjvbdLFegaaQu -EObkKvbdFkFTChNV -DnbjjvbdyzeOSHiI -EObjjvbdLAkHNCYR -DnbkKvbdZyDimcMS -DncKjvbdkMbLzEgP -DnbjjvbdRbEEkhyL -EOcKjvbdLrXMzVQz -EOcKjvbdVBBqTRRy -EObjjvbdyNsHxTIc -EPCjjvbdMuTRkNAX -DoCkKvbdUaCQrprZ -EPCjjvbdjmCLydfo -DoCjjvbdFyVVAcxC -EPCjjvbdQvnDblID -DnbjjvbdLhbLqYAS -DncLKvbdFxuVBEYC -DncKjvbdGLFScIMu -DncKjvbdBvzcheQW -EPDLKvbdSPsfjFcw -DnbkKvbdsQWOibvG -DnbkKvbdaSGChTfL -EPDLKvbdjmBkzFGo -DoDLKvbdqAiFAWhE -EPDLKvbdkVwNcaww -DoCkKvbdKRZePGOF -EOcLKvbdJXtCIMRQ -EPCkKvbdaNLCTUmH -EPDLKvbdliDtRUrB -EOcLKvbdKfGHbApu -EObkKvbdDwwlTstM -DoDLKvbdmgExMmfy -EOcLKvbdKWUfEFHJ -EPCjjvbdkxrqrxft -DncLKvbdkClKqHUg -DoDKjvbdVqnXadlD -DoDLKvbdULvPBWPJ -DoDKjvbdUslsfMWK -EOcLKvbdJvVFdFGi -DncKjvbdiifHilxS -EPCkKvbdRaceMJYk -DoCkKvbddwytTrFz -EPDLKvbdYkrETnLm -DoCjjvbdiMEdOUby -DoCkKvbdxVMeQyLn -EPCkKvbdwuMdpxlO -EPDLKvbdNPxQumfs -DncKjvbdYpleJNEq -DncKjvbdTAEhhCPE -EOcLKvbdUGznLwVe -EOcKjvbdNPwpunHT -EPDLKvbdKaLHNBwq -EOcLKvbdFfKRmhtR -EObkKvbdYlRcsmlN -DoDLKvbdWSOXadlD -EOcLKvbdWWiXucdg -DoCkKvbdZsiIxcsO -DoDLKvbdbhlikFvx -EOcKjvbdtlYXAsaX -EOcLKvbdUtNTelVj -DoDKjvbdhaoDFXRR -DoDLKvbdEuxoomJe -DoDLKvbdEYYLtTsl -DncLKvbdbhmJkGWx -EPDLKvbdqwPkbhxq -DnbjjvbdlrYuZsEJ -DncLKvbdeKKSWUzn -DnbkKvbdyTNiNSCH -DncKjvbddwzTsqez -DncLKvbdTXkMNzjx -DoDKjvbdJmAEZgUa -DncKjvbdeEnqavbj -EPDLKvbdcJNJjfWx -DncLKvbdPyNAGsRj -DoCjjvbdLGGHbAqV -DncKjvbdddoRbWcK -DoDLKvbdZjTHogBf -EPDLKvbdRkZFuHKs -EOcLKvbdEuyPoljF -EPDKjvbdEYYMTtUM -DncKjvbdDxXlTssl -DnbkKvbdQvmcblID -EObkKvbdjmBkydgP -DoCkKvbdOAJTUKSA -DncKjvbdhgJbxvJu -DoDKjvbdVvhxVceH -DoCkKvbdjvXODaww -EPDKjvbdemFvflik -DoDKjvbdkCkkRGtg -DoCjjvbdDigjVxKA -DncLKvbdLAjgNCYR -EPDKjvbdbUbGwkTh -EObjjvbdmuUzLJrG -DnbjjvbdmgFXlnGy -DoCkKvbdFxttaDwb -EPCjjvbdJcKDRKCx -DoCkKvbdpfDeUWAh -EPDLKvbdADSYJyhp -DoCjjvbdHkazmvqL -DnbkKvbduLxWaUBX -EPCkKvbdQdCaPpdS -EOcLKvbdZdwfzhIb -EPDKjvbdKWUeceGi -EPDKjvbdSCDeMJZL -DoDKjvbdyOShYShc -EObjjvbdliEURVSB -DncLKvbdmgEwlnGy -DnbkKvbdsBemMHKy -DoDKjvbdYzcGSJvZ -EObkKvbdGcjvKBjK -EOcLKvbdJuuGDdgJ -EPCjjvbdOStWGeUp -EOcLKvbdGLEsChMu -EOcLKvbdeATqNYJf -DncLKvbdxxIjCQZk -EObkKvbddZyQXyQb -DoDKjvbdVBCRTRRy -EPCjjvbduDDVWuoP -EOcKjvbdVZHtZkOn -EPCjjvbdZQmEhmFR -DnbkKvbdZyDimcLr -EPDLKvbdjblKqHVH -EOcLKvbdZtIiZDsO -DnbkKvbdRWmcbkhD -EPCjjvbddneSjtTr -DoCkKvbdZQmFJMdq -DoDLKvbdLFegbBRV -EOcKjvbdSwkMNzjx -DoCjjvbdFjeTDHlu -EPCjjvbdtSqrxydc -DncLKvbdSPtHKFcw -DncLKvbdyYJJapZk -EOcKjvbddxZssrFz -EObjjvbdfekzOGgA -EPDKjvbdrylQSaHn -DnbjjvbdZisHofbG -EObjjvbdrbGNMHKy -DnbkKvbdLBKfmBxR -DncKjvbdACqxJyhp -DncLKvbddijRutzn -EPDLKvbdMpYRVmfs -DncLKvbdmttzKiqf -DnbkKvbdZnmhdeZj -EPCkKvbdjKFgjNYS -DnbjjvbdxnTHxShc -EPCjjvbdlZTSTYgU -DoCjjvbdqlyjYkgi -EObkKvbdxVMeQyMO -EPDLKvbdSPtHJecw -EPDLKvbdrpWOibvG -EObkKvbdRbEFLhyL -DoCkKvbdYNqAYUvU -DoCkKvbdnCKXXnnV -EObkKvbdddoSBvbj -DncKjvbdNGcPlpUk -DnbkKvbdmajXXnmu -DoCjjvbdJXsbHlQp -DncLKvbdNGcPlouL -DoCkKvbdTAFJHaoE -EPCjjvbdnPyxvKyC -EPCkKvbdRyihTDWA -DncLKvbdQlxCZNtz -EObkKvbdJSyAsMwl -DoCjjvbdmttykJrG -EPCkKvbdfpBzwEXh -DoCjjvbdrzMQTBIO -EPDKjvbddZxowyRC -DncKjvbdaNKaruNH -DnbjjvbdaNKasVMg -DncKjvbdcbTNSATm -EPCkKvbdiLdcnVDZ -EObjjvbdYTLaMtOx -EOcKjvbdEASIlzWw -DnbjjvbdziuPodTU -EOcLKvbdqUUHRqkU -DnbkKvbdyNsHxSiD -EObjjvbdhkeDnUcZ -EOcKjvbdNHCpNQUk -EPDLKvbdIryBSmYM -DnbkKvbdfekynGgA -EOcLKvbdiHKCyWJu -EObkKvbdrMzKYlIJ -DoCjjvbdsZkoraIO -EOcKjvbdQccAoqES -DoCjjvbdtTRrxzFD -EPCjjvbdJXtBhMRQ -DnbjjvbdsBfNMHKy -DnbkKvbdeEnrBwCj -DoDLKvbdTfzmkvvF -DoCjjvbdCJLCLIej -DnbjjvbdNUrrLNAX -DoCkKvbdxsNiNRag -EPCjjvbdtbcUwVoP -DoDKjvbdaogHDkzd -DncKjvbdpedFTuaI -DnbjjvbdqYngfpdY -DncKjvbdbiNJkGWx -DoCjjvbdGckVjBij -EObkKvbdqceIomvB -EPDLKvbdFWZQQNJe -EObkKvbdrRtkOLAm -DncKjvbdDwwktUTl -EObkKvbdwNWAMceN -DncKjvbdZMSDtOLm -EObjjvbdTkvPAuni -DoDLKvbdUxhTykPO -EOcLKvbdVBCQsQqy -EPDKjvbdZshhxcrn -DnbjjvbdqdEiQOWB -DoDKjvbdkWWmdBww -DoDLKvbdzQoMhiwA -DnbjjvbdUGzmlXWF -DncKjvbdJTYaTMwl -DoDKjvbdGLFScHmV -DoDKjvbdrWpLcJZR -EOcKjvbdwNWAMcdm -EObkKvbdmfeYNOGy -EObkKvbdtcDUwVoP -DnbjjvbdiZuGMQmf -EObjjvbdfMewGmJk -DnbjjvbdANIZTWyx -DncKjvbdtTSSxydc -DnbkKvbdsBfMkfjy -DoDKjvbdSLYfUgKs -DoDLKvbdZisHogCG -EObkKvbdVTlsfMVj -DncKjvbddZyPwxpb -DncLKvbdAMhYsXZx -DncLKvbdxwhjCPzL -EOcKjvbdKRZeOeme -DoCkKvbdunszqLOt -EPDKjvbdZRMdiMdq -DnbjjvbdEuxpPljF -EPDLKvbdGGJrOJUR -EPDKjvbdVviXudEg -DnbjjvbdpfDeTvBI -DncLKvbdRadElJYk -EPDKjvbdaMjbSuMg -EPDLKvbdTAEhhCOd -DncLKvbdTIyiqABM -EPCkKvbdBsBDUFvr -DoCjjvbdcSbkUEJa -EObjjvbdCIjbKhfK -DoDKjvbdauCHXjsh -DoCkKvbdpyPHfqEY -EOcLKvbdDwxMUUUM -DnbjjvbdGFjRmiUR -DoDLKvbdbQGgELzd -EOcKjvbdGGJqnItR -EPCjjvbdxrnJNRag -DoDLKvbdbhmJkFwY -EPDKjvbddoFSkTtS -DncKjvbdNUsSKmAX -EPCjjvbdfelZmfgA -DoCkKvbdjKGIJlwr -EPDLKvbdJYTaglQp -EPCkKvbdVrOXbFMD -EPDKjvbdTpqPUuIN -EPCjjvbdGckViaij -DnbjjvbdczZQYYqC -DoDKjvbdMtrqkNAX -EObkKvbdaNKartmH -EPDKjvbdmSZUysDi -EOcLKvbdlhdURVSB -DncKjvbdWRnXbEkc -DncLKvbdLBKfmBwq -EPDKjvbdZdwfzhIb -EPCkKvbdhancFXRR -EObkKvbdaSFbgtGL -DncLKvbdJXsaglQp -DncLKvbdUsltFlVj -DoDKjvbdLBKfmBwq -EPCkKvbdnVVZjirG -EObjjvbdiZuFlROG -EObkKvbdwygeeweS -EPCkKvbdwjvcgzyf -DnbkKvbdssRsYzFD -DnbjjvbdxwiJaoyk -EPCjjvbdVhYWYHYz -DncKjvbdhzVFkpnG -DncLKvbdeJjSVtzn -DncLKvbdyYIjCPyk -EPDLKvbdJpzEoGNe -DncKjvbdnBiwXoNu -EOcKjvbdVrOYCElD -EObkKvbdLBKgNCXq -EPDKjvbdTlWPBVni -EPDKjvbdFxuVBDxC -DncKjvbdnHFXlnGy -EPCjjvbdYkrDtOMN -DoCkKvbdUWMPjTaR -DoCjjvbdjSziSjiz -DnbjjvbdeOdsKtUS -EPCkKvbdmfdwmOHZ -EObjjvbdtSrTYydc -DnbkKvbdRjxeuGkT -EObkKvbdKeehCApu -EOcLKvbdpxoIGqEY -DncKjvbdbLMGOnDA -EPCkKvbdEXwktUUM -EObkKvbdiUzFWqtb -DoCjjvbdiHKCyViu -EObkKvbdvwLaWAuu -DoDLKvbdiCPDEvqR -EOcKjvbdWXJXvEEg -DoCkKvbdqTtGrSLU -DnbkKvbdtbbuXWOo -EObjjvbdgGLzOGgA -DncKjvbdTlVoBWPJ -DoCkKvbdeEoRbWcK -DoCkKvbdkWWmdCXw -DncKjvbdehLWRmpg -EPCkKvbdjFLGtoAO -DoDKjvbdGLFScIMu -EObjjvbdrRtkOKaN -EPCkKvbdczZQYYqC -DnbjjvbdfHkVqnRH -EOcLKvbdtvNxKRTA -EPCkKvbdADSYJyiQ -EOcKjvbdmJETptrB -EOcLKvbdURQoUtgm -DoDLKvbdZMSDtOMN -EPCjjvbdFfJqnIsq -EOcKjvbdcJNKKfWx -DnbjjvbdkySqrxft -DncLKvbdJpyePFme -DncKjvbduCcVXWPP -EOcLKvbdxKvcgzzG -DoDLKvbdpfEEsvAh -EObkKvbdZyDjNblS -EPCjjvbdhbPDEwRR -EPDLKvbdTqQoUthN -DoDKjvbdxnSgxShc -DoCkKvbdcTCjscjB -DoCkKvbdOTUVfeVQ -DncKjvbdkMbMZeHP -DncLKvbdEvYpPmKF -DncLKvbdJTZBTNYM -EObjjvbdIHGyxxYH -EOcKjvbdraemLfkZ -EOcKjvbdMpYRVmgT -DncKjvbdxZgfFxEr -DnbkKvbdpxoIGpcx -EPCkKvbdkIGlGFnL -DoDKjvbdUslselVj -DnbjjvbdZnnJEdzK -DncLKvbdehLVrORH -DoCjjvbdySmhlqbH -DoDLKvbdADSXiyhp -DoDKjvbdZtJJZDrn -DoCjjvbdezvZEiUX -EOcLKvbdqTtHSRkU -EPDKjvbdVgxWXgYz -DoCjjvbdGZUuBDwb -DncLKvbdhzUekpnG -EPCjjvbdZxcinDMS -EPCkKvbdOFEThiLE -DoDLKvbdhzVGLqOG -EObjjvbdkySqryGt -DoDKjvbdmpZyVkYb -DoCjjvbdnHFYMnGy -EObkKvbdRotGjFcw -EPDKjvbdjblKpgUg -EOcLKvbdWWiYVdFH -DoDLKvbdtbcVXVoP -EPDLKvbdqqtkOLAm -EPDLKvbdmRyUysEJ -DnbkKvbdxnShYTJD -DoDLKvbdGKeSbhMu -DoCkKvbdjuwODbXw -DncLKvbdaMkCSuMg -DncKjvbdtbcUvuno -DnbjjvbdiVZeWqtb -DoCjjvbdLBKgNBxR -EObkKvbdlZSqrxgU -EPCkKvbdULunaWOi -DoCkKvbdwzIGGYEr -EPCkKvbdnHExNOHZ -EObjjvbdpyOgfqEY -DnbjjvbdpedFUWAh -DoCkKvbdhaoDFXQq -DnbkKvbdYqMdhleR -DnbjjvbdsZkpSaIO -EPDKjvbdJcJbqJbx -EObjjvbdehKvRmqH -EOcLKvbdmIdURVSB -EPDLKvbdvOszqKoU -EOcLKvbdZisIQGbG -DnbjjvbdFyVUaDwb -EPCjjvbdTAEiIBoE -DncLKvbdRkZFtgKs -EOcLKvbdzdynzdyp -EOcLKvbdnUtykKSG -DoDKjvbdZQmEhldq -EOcKjvbdnBjWxOnV -EPCkKvbdqvpLbiZR -DoDKjvbdrykosBIO -EOcLKvbdBiKbLJGK -EPDLKvbdBvzciFPv -DoCjjvbdemFwGlik -EPDLKvbdqTsfqqjt -DncLKvbdptUHRrLU -EObkKvbdbUbGwjsh -DoCkKvbdHffyyXwg -EPCjjvbdgGMZnHHA -EPDKjvbdFejRmhsq -DoCkKvbdQvmdCkgc -DncLKvbdyNsHxShc -DoCkKvbdrDeIpOWB -EObkKvbdYzcGRiuy -DncKjvbdMowqWNfs -DoDLKvbdbsDLTcjB -EPCkKvbdZQmEiNEq -EObjjvbdNPwqWNfs -DoDLKvbddeOrBwDK -EObkKvbdrNZixkgi -DoDKjvbdtlXvaUBX -DncKjvbdtunYKRTA -EOcLKvbdfSBWzkcP -EObjjvbdVAbRTQrZ -DnbjjvbdcJNKLFvx -DncKjvbdssRsYyeD -DoDLKvbdqTsgSSLU -EPCkKvbdMowqVmgT -DoCjjvbdDnbjjvbd -EPCkKvbdlhdURUqa -DncKjvbdqrVLOLAm -DoDKjvbdNHDQNQUk -EPCkKvbdXsLaMtOx -EPCkKvbdRosgJfDw -DncLKvbdKVuFcdgJ -DoCjjvbdGGKRnItR -DnbkKvbdeEnrCWcK -EPDLKvbdlZSrTYgU -EPCjjvbdtSrTYyeD -DoCkKvbdZisHpHCG -DnbjjvbdbrbkUDia -DnbkKvbdhficYvKV -EOcKjvbdsBfMlHLZ -DoDKjvbdBdQBVjNG -DnbkKvbdTvLpKUAq -DoCjjvbdzaAPGgCM -EObjjvbdiVZeWrVC -EPCjjvbdZshiYcrn -EObjjvbdRNXbYnUz -EObkKvbdBcpBWJlf -DncKjvbdtbcUvuoP -DoCkKvbdmfeXmNgZ -DncLKvbdbPfgELzd -DncKjvbdZshiYdSn -EObkKvbdDjHiuwjA -DoDLKvbdfIKvRnRH -DnbjjvbdiLeDmtcZ -DoDLKvbdQwNcblID -EObkKvbdmRyUzSdJ -DnbkKvbdnHFYMnHZ -EOcLKvbdfHjvSORH -DncLKvbdlZSrSyHU -EObkKvbdtSrSxzFD -EObjjvbdZyEKNcLr -EObkKvbdRkYeuHLT -EOcKjvbdTkuoAuoJ -DnbjjvbdEPDKkXCd -EPCkKvbdnCJwXoOV -EObjjvbdxrmiMqbH -DoDLKvbdRaceMIyL -EPDKjvbdRosgKFdX -DoCjjvbdzoQQeDMY -DncKjvbdZyEJmcMS -DoDLKvbdOFDshiLE -EPDKjvbdSQUGiedX -EPCkKvbdTIyjRAAl -EObjjvbdxUmFRYkn -DncKjvbdmpZyWLYb -DoCkKvbdygZMANEw -DoDLKvbdhuZeWquC -EObkKvbdFyUuAcxC -DoCkKvbdiCPCeXQq -DncKjvbdsCFlkfkZ -EPCjjvbdNPwpvOHT -DoCjjvbdSPtGjGDw -DncLKvbdAMhZSvyx -EPCkKvbdWXJYWDdg -EPDKjvbdaogHDkzd -DoDLKvbdRosgKFcw -EPDLKvbdrRtjnKaN -DncKjvbdvBEZSoEh -DoDLKvbdmajXYOmu -DnbjjvbdfNFwHMjL -EPCkKvbdezuyEhtX -DoCkKvbdHffzZYYH -EPCkKvbdvAdYsOdh -EPCjjvbdhlFDnVDZ -DncKjvbdbiNKLFvx -DoDLKvbdMIalQxAS -EPDLKvbdGckWKBjK -EOcKjvbdvOszqKnt -DoCkKvbdraelkgKy -EOcKjvbdMgComPtk -DoDKjvbdOSsugFVQ -DoCkKvbdyNrhYTJD -EPCjjvbduDDVXWOo -DncLKvbdiCPDFXRR -DncLKvbdiGibyWKV -EOcLKvbdfNGXHNJk -EObkKvbdBhjakIej -EPCjjvbdxmrhXriD -DnbkKvbdJbibqKDY -DnbkKvbdSCDdkhyL -EPCjjvbdGFirOIsq -DnbkKvbdKVtfDeHJ -DoDKjvbdGKdrbhMu -DncLKvbdZLrETmlN -EObjjvbdjuvmcbXw -DncKjvbdQdDApRDr -EObkKvbdeATplwjG -DoCjjvbdZMRdUNkm -DoDKjvbdTqQoVVIN -EPCkKvbdOTTufeVQ -EPDKjvbdWRnXadlD -DncKjvbdZsiJYdSn -DoCkKvbdZLrDsnMN -DoDKjvbdEKHiuwjA -EPDLKvbdnBivxPOV -EPCjjvbdddnrCWbj -EOcLKvbdpssgSRkU -EPCjjvbdzdzOzdyp -EPCjjvbdZxcinClS -DoDKjvbdvAcySoEh -DnbjjvbdWHxWXfxz -DoDLKvbdCWzdJEpW -DoCjjvbdehLVqnRH -EObjjvbdEXxLstTl -EObjjvbdkMakzEfo -EPCkKvbdKaKflbXq -EPDLKvbdijFgjNYS -DoCjjvbdZsiIxdSn -DncKjvbdeATqNXif -DncLKvbdzoPqEblY -EObkKvbdLAjgNBwq -DncKjvbdUxgsykPO -DoDKjvbdaogGckzd -DncKjvbdFVxpPmJe -EOcLKvbdZLrDtNlN -EObjjvbdYNqAXuWU -DoCkKvbdEYYLstUM -EObjjvbdeFPSBwDK -DncKjvbdePEsKssr -DncKjvbdZjTHogCG -EPCkKvbdjKGHjNXr -DoCkKvbdNrtVgFVQ -DncLKvbdaMjaruNH -DoDLKvbdwjwEHzzG -EOcLKvbdTIzJqABM -DoDLKvbdliETqVSB -DoDLKvbdNrtVfdtp -DnbjjvbdZxdKNcMS -EPDLKvbdbUafxKsh -DoCkKvbdVrNxCFMD -DoCkKvbdxZgefYEr -DoDKjvbdYTLaMsoY -DncKjvbdeAURMwif -EOcLKvbdNGcPmQVL -EPDKjvbdqceJQOVa -DncKjvbdRotHKGEX -DoCjjvbdwNWAMdFN -EPCkKvbdFyVVAcwb -DoDKjvbdmozYvKyC -DncKjvbdSPsgJecw -EPDKjvbdZtJJYcrn -EOcLKvbdGckWKCJj -DoDKjvbdkxrrSxft -DnbjjvbdRbDdlIxk -DncKjvbdyYJJbPyk -DnbjjvbdhgJcYvKV -EObkKvbdjcLjqHUg -EObkKvbdhgJbyWKV -EObjjvbdrovPKCvG -DoCkKvbdbBVdepQX -DnbjjvbdUVkojTaR -EPCkKvbdbUagYLUI -DoDLKvbdptUGqqkU -DoCjjvbdyTNhlqag -DncKjvbdEYXlTssl -EPCkKvbdXFxytAOs -EOcLKvbdNdctIhkE -EPDLKvbdkDMLRGuH -EPDLKvbdDihJuxKA -EOcLKvbdrafNMHLZ -EPDLKvbdbKlFoODA -DncLKvbdZLqcsnMN -DnbjjvbdznpRFDLx -DncLKvbdziuQPdSt -EPCkKvbdbrcKsdKB -DncLKvbdaMkCTUmH -EPDLKvbdYkqdUOLm -DoDKjvbdjhHLfGNk -DoDLKvbdZMSDtNlN -DnbjjvbdZjTHpHCG -DoCkKvbdemFvgNKL -DncKjvbdrRtkOLAm -EPCjjvbdyNrhXsIc -EObjjvbdgPazwDwh -DoDKjvbdRDcAoqDr -DoDKjvbdvvkaWBWV -EOcKjvbdZRMdiNFR -EPCkKvbddePRawCj -DoCkKvbdHDjvKBij -DnbkKvbdZirgpGbG -EOcKjvbdhbPCeWqR -DnbkKvbdNPwpvNfs -EPCjjvbdZirhPfbG -EOcLKvbdIGgZxwxH -EPCkKvbdrykosBHn -DoDKjvbdxnTIYShc -DnbjjvbdNsTvGduQ -DncLKvbdBcpAvJlf -DnbjjvbdlqxtysDi -DoCkKvbdOEdTiIjd -DncKjvbdfHkVrOQg -DoCkKvbdiHKDYvKV -DoDKjvbdOTUVgFUp -EObkKvbdaaVdfPow -DncLKvbdZHXEAPTJ -DnbkKvbdkIHLefNk -DnbkKvbdjEjfuPAO -EObjjvbdhtzFWqtb -DoDLKvbdSQTfjFdX -DncLKvbdHEKvKBjK -DncLKvbdHDkVjBij -EPDKjvbdRpTfiecw -DnbkKvbdiBncEwQq -EObkKvbdRadEkhyL -EPCkKvbdezvYdiTw -EOcKjvbdaMjasUlg -EObkKvbdczZPwyQb -EPCjjvbdTvMQJtAq -EPCjjvbdJXtCIMRQ -DoDLKvbdkDMKpftg -EPCjjvbdiVZdvqtb -DnbkKvbdtunXipsA -DoCjjvbdjJehKNYS -DnbjjvbdJvUeceHJ -DoDKjvbdKRZdoFme -DncLKvbdJcKCpjCx -EPDKjvbdmbKXYPNu -DnbjjvbdkIHLeenL -EPDLKvbdNPxQunHT -DnbjjvbdUtMtFkvK -EPDLKvbdsPvPJcWG -EObjjvbdMRvlzVQz -DoCkKvbdsQWOjDWG -DnbjjvbdXGZZtAPT -DnbjjvbdunszpkOt -DncKjvbdxZhFfXdr -DnbjjvbdRzJgsCvA -EPCkKvbdSCDdlIxk -EPDKjvbdREDBPqES -DnbjjvbdBvzdIdov -DoDLKvbdSLYetfkT -EObjjvbdKWVGDeHJ -DoCjjvbduDDUvuoP -EOcLKvbdWIYWXgYz -DoCjjvbdbhmJjfWx -EPDKjvbdIxUCILpp -EOcLKvbdeXzTsrFz -EPDLKvbdsBemLgKy -EPCkKvbdzjVPpDrt -DncLKvbdZyDimbkr -DnbjjvbdRNYBxmtz -EPCkKvbdvOszpkPU -EObkKvbdSQTfiedX -DncKjvbdZRNFIldq -DoDKjvbdbhlijfXY -EObkKvbdEzspeLcJ -EPCjjvbdKCicRJbx -EOcLKvbdOYOuzcnU -DoCkKvbdhkddOVDZ -DncKjvbdIxTahMQp -EOcLKvbdwygeexFS -EPCjjvbdKRZeOeme -EPDLKvbdgPazvcxI -DncKjvbdfNFwHMik -EOcLKvbdtkwvaTaX -EObjjvbdURQnuVIN -DnbkKvbdiBncFWqR -DncLKvbdaMkCStmH -EPCjjvbdZjSgogBf -DoDKjvbdMowpvOGs -EPCkKvbdsrqsZZdc -DnbkKvbdRpTfjFdX -EOcKjvbdaMjbTVMg -EOcLKvbdmgExMmfy -DncKjvbdCJLCLJGK -DoCkKvbdNeDshiKd -DnbkKvbdGLFSbgmV -EObjjvbdMtrrLNAX -EOcKjvbdpedEsvAh -DoDKjvbdcyxpXyQb -EObkKvbdxZhGGXdr -DoCkKvbdEztQdlCi -EObkKvbdijFgilxS -EPDLKvbdkHgMFenL -EOcLKvbdlrYtysDi -DncLKvbdjcLjpgVH -DoCjjvbdnVVZkKRf -EPDKjvbdFeirNhsq -DnbkKvbdjblLRGuH -EPDLKvbdtTSTZZeD -DoDKjvbdVBCRTRSZ -DncKjvbdTYLMNzjx -DoCkKvbdEztQdkcJ -EObjjvbdpfEFTuaI -DncLKvbdYSlAmUPY -DncKjvbdYpldiNFR -DncLKvbdWXIwvDdg -DoDLKvbdeXyssrFz -DncLKvbdqdEhonVa -EOcLKvbdNQYRVnGs -EObjjvbdRpTgKGDw -DoDKjvbdauCHXkUI -DoDLKvbdhficZViu -DnbjjvbdzoPpeCkx -DoCkKvbdJYTaglQp -DoDKjvbdnBiwYPNu -EOcLKvbdMJCLqYAS -EPCjjvbdYkrDsnMN -EPCkKvbdehKvRmqH -EObkKvbdVqmxCFMD -DncKjvbdrDeJPmvB -EPDLKvbdzaAOgHCM -EOcLKvbdNPxQvNfs -DncLKvbdFVxopMie -EPDKjvbdgQBzwDwh -EObjjvbdTfzmkvvF -EPDLKvbdUaBprpqy -DoCkKvbdnGdxNOGy -DncLKvbdfIKurOQg -EPCkKvbdKDJcRKCx -EPCjjvbdmJEUQuSB -DncLKvbdrafNMGjy -EOcKjvbdZxdKNbkr -DnbkKvbdJmADzGuB -EPCjjvbdQvmdDMID -DnbkKvbdemGWgNJk -DncKjvbdyfxlAMdw -EPCkKvbddtAUATNW -DncKjvbdcasMrATm -DoDKjvbdVhYVxHYz -EPCjjvbdhyuFkpmf -DoDLKvbdcbTMrATm -EPCkKvbdILaznXRL -DoDKjvbdRDbaQQcr -DncKjvbdijFgjNYS -EObkKvbdIMBznXRL -EPCjjvbdxVNEpyLn -DncLKvbdYkqctOMN -EOcKjvbdxrmiNSBg -EPDLKvbdtTRsYzFD -EOcKjvbdzjVQQDsU -EPCjjvbdZMRctNlN -DncKjvbdXrlAmTnx -EOcLKvbdbPgGdLzd -EPDLKvbdFfJqmhsq -EOcLKvbdyzdmqgiI -DoCjjvbduCbtvuoP -DncLKvbdNGcPlpVL -EPCjjvbdGBOpyJzm -EPCkKvbdRDcBPpcr -EOcLKvbdRbEFLhyL -EOcLKvbdePFTLTsr -EObkKvbdcTCkUDjB -DnbkKvbdrWokbhxq -DncLKvbdqUTfrRjt -EOcLKvbdRyihTDWA -EObkKvbdpxnhHQdY -DnbkKvbdrSUkOKaN -DoCjjvbdIGgZyYXg -DoDLKvbdMowqWNfs -DoDKjvbdUxgtZkOn -EObjjvbdUtNTelVj -EObjjvbdlqxtyrdJ -DncKjvbdkVvnDbYX -EObjjvbdePFTKssr -DoCkKvbdMuSrLNAX -EOcLKvbdnQZyWLZC -DoDKjvbdhgJcYujV -DoDLKvbdaMjasVMg -EPCjjvbdcScLUDia -DnbjjvbdbKkeoNcA -DnbkKvbdfpBzwEYI -DoCkKvbdBhkBjhej -DnbjjvbdkDMLRGtg -EObkKvbdeATqNXjG -EOcKjvbdFkFSbglu -DnbjjvbdznpQdcMY -DncLKvbdIidAJpHE -DoCjjvbdLZQirzuG -DnbjjvbdzjUopDrt -EOcLKvbdnUuZjiqf -DoDLKvbdwyhFeweS -DoCkKvbdaoffckzd -EObkKvbdzaAPGgCM -EObkKvbdEzspdkcJ -DnbjjvbdDjHiuxKA -DnbkKvbdVqmxBdlD -EOcLKvbdrJAKFMne -EOcKjvbdZjSgofbG -EPCjjvbdfMfWgNJk -DoCkKvbdTukpJsaR -DoCjjvbdySmiNSBg -DnbkKvbdzGyMANFX -EObkKvbduWNxKQsA -DoDKjvbdRkZFuHLT -DncLKvbdbKlGOmcA -DncLKvbdyNsIXsJD -DnbkKvbdMpXqWNfs -DoCkKvbdHEKujBjK -DncLKvbdDxXktTsl -EPCkKvbdACrYJyiQ -EOcKjvbdqUUHSRjt -DoDLKvbdOFDsiJLE -EObkKvbdrbGMlGjy -DoCjjvbdjblKpgUg -EPCkKvbdiHJcYujV -EPDKjvbdrDeJQNvB -EPDLKvbdbrbkTdJa -DnbkKvbdNeDtIhkE -DnbkKvbdcJNKKevx -EPCjjvbdxVNFQxkn -EObjjvbdhyuGLqOG -EOcKjvbdrafMkfkZ -EObkKvbdRkYetgKs -DnbjjvbdUWLoitBR -DoCjjvbdQvmcblID -EOcLKvbdDoDLLXCd -DncLKvbdzRPMiJwA -DoCkKvbdsZkoraHn -DoDKjvbdkHgMGFnL -EObkKvbdrbFmMGjy -DnbkKvbdRWnDbkhD -EPDKjvbdJbicRJbx -DncKjvbdGZUuAcwb -DoCjjvbdmfdwmNfy -DoDKjvbdBdQAujNG -EPDLKvbdwWlAuaVu -DncLKvbdxmrgxSiD -DoCkKvbdUsmUFkuj -EOcKjvbdcTDKsdKB -DnbjjvbdjcLkRHVH -DoDKjvbdbiMijewY -EPCjjvbdPyNAHSrK -DnbjjvbdFkErcINV -EPDKjvbdZQldhmFR -EPDKjvbdTJZjRABM -EOcKjvbdKaKgMaxR -DoCjjvbdwzHefYEr -DoDLKvbdDwxLtUUM -DoCkKvbdfILWRmpg -DoCkKvbdRyihTCvA -DoDKjvbdSQUGjFcw -DoCjjvbdEYXktUTl -EPCjjvbdoznEKxPA -EPDLKvbdSiZiqABM -EObkKvbdVUNUFkuj -DncKjvbdMfbpNQUk -DncLKvbdEvYopMie -DnbjjvbdMowpvNgT -DncLKvbdKjaHvAKZ -DoDKjvbdqmZjZMIJ -EObjjvbdGcjuibJj -DoDLKvbduLwvaTaX -DoCkKvbdHgHZyYYH -EObjjvbdEOcKjwCd -EPCjjvbdGckWKCKK -EObkKvbdEuyQQMie -DnbjjvbdHgGzZYYH -EObjjvbdVUMsekuj -EObkKvbdWWiXucdg -EPDKjvbdRWnECkgc -EPDKjvbdxZgefYFS -DnbkKvbdEuyPomKF -EPCjjvbddePSCXCj -DoDKjvbdUsltFlWK -DnbkKvbdbsDKtEJa -EObkKvbdmoyyWLZC -DoDKjvbdSCDeMJZL -DnbkKvbdwtleRYkn -EPDLKvbdJpzEnfNe -DncKjvbdZisIQGbG -DoCjjvbdiUzEwRtb -DncKjvbdrounicVf -DncLKvbdmIdURVRa -DoDKjvbdYSlBNUPY -DnbjjvbdKDKDQibx -DoDLKvbdnCJvwoOV -EPDKjvbdgFlZmfgA -DoDKjvbdTukojTaR -DnbjjvbdVAbQsQqy -EOcLKvbdtAHRIABS -DnbjjvbdmbJvwnnV -EOcKjvbdvBDxrneI -DnbjjvbdeJirWUzn -DnbjjvbdKeegaaQu -DnbjjvbdzQoMiKXA -DnbjjvbdxwiJbPyk -EPDLKvbdKNADzHUa -DoCkKvbdANHyTXZx -EObkKvbdxLXDgzyf -EOcKjvbdpxoHgQcx -DncKjvbdLBKflawq -EPDKjvbdhanbdwQq -DnbkKvbdEASIlyvw -EPCkKvbdwzHfGYEr -EOcLKvbdqZPHgQdY -EPDKjvbdqTtGqqjt -DoCjjvbdDxXksssl -DoDKjvbdQlwayNtz -EOcKjvbdTvLoitAq -DnbkKvbdirzhsKiz -EPDKjvbdyzeORghh -DncLKvbdmJDsqVRa -DncLKvbdKefICAqV -EOcLKvbdZnmheFZj -DoDKjvbdIxUCILpp -DncLKvbdxsOIlrBg -DoCkKvbdiVZdvqtb -EPDLKvbdbBWEfQPw -EObkKvbdsCFllGkZ -EObkKvbdNdctIiKd -EObjjvbdozmcjwoA -EPDLKvbdlhdTqUqa -EOcKjvbdbUagYKsh -DnbkKvbdJpydoGOF -DnbkKvbdnGeYMmfy -DncKjvbdtlXwBUAw -DncKjvbdqiAJdlne -EPCkKvbdMIakqYAS -DnbkKvbdCWzchdov -EObkKvbdelewHNJk -EPCjjvbdFpASvgFy -DoDLKvbdVrNxCFMD -DnbkKvbdMpYQvNfs -EPCkKvbdEObkKwDE -EPDLKvbdHDjuibJj -EPCjjvbdKaLHMaxR -DoDKjvbdakLfOmcA -EPDLKvbdMgDQNQVL -DoCjjvbdEvYpQNKF -EPDKjvbdrEEhpOVa -EOcLKvbdOFDsiIjd -DncKjvbdtTSTYyeD -EObjjvbdQvnDblHc -DoDKjvbdVrNwbElD -EPCjjvbdZMRdUNkm -DoCjjvbdhfibxujV -DnbjjvbdYpmFJMeR -DncLKvbdDihKVxKA -DoCjjvbdrNZjYkgi -EOcLKvbdYqNFImEq -DoDLKvbdJbjDQjCx -DoDKjvbdwygefXeS -DncLKvbdUyHsykPO -DncLKvbdJSyBTMxM -EPDKjvbdcImKKfXY -EPCjjvbddndsLTtS -DoDLKvbdEASIlzWw -EObjjvbdrylQTAgn -DoDKjvbdFkFTChMu -DncLKvbdUaCQrprZ -DnbjjvbdOFEThhjd -EObjjvbdlYsRrxgU -EPCkKvbdnGeYNOGy -DoDKjvbdwygefYEr -DoCjjvbdGckViajK -DoDKjvbdSZjITDWA -EObjjvbdkWXNdCXw -EPCkKvbdKjaIWAJy -EObkKvbdKkBIWAKZ -DoDLKvbdptTfqrLU -DoDKjvbdPxmAGsRj -EObkKvbdTvMPitBR -EPCkKvbdegjvSOQg -DoDKjvbdwNWANEEm -EOcLKvbdRNXbYmtz -DoDKjvbdEOcKjwDE -EPDLKvbdfMfXHMik -DoCkKvbdWHwvXfxz -EPCjjvbdelfWgNKL -EPCjjvbdqcdiQOVa -DncKjvbdkyTSTZGt -DoCkKvbdbAueFpPw -EOcKjvbdQwNdClHc -DnbjjvbdxmsIYSiD -EPDKjvbdCTAbtFwS -DncLKvbdJpzFOeme -EOcKjvbdiZuGLqOG -DncKjvbdKaLHMaxR -EPDLKvbdbiMjLFvx -EPCkKvbdjvXODaxX -EOcLKvbdOAJSsirA -EPDKjvbdqYnhHQdY -DoCkKvbdDwwlTtUM -DnbkKvbdRjxfVHKs -EObjjvbdzjUpPcrt -EOcLKvbdeUAUATNW -EObkKvbdQlwaxmtz -EObkKvbdEXxLtUUM -EObkKvbdYkrETmkm -DoCkKvbdxmsHwsIc -DoDKjvbdzjUoocrt -EPDKjvbdqGEFTuaI -EPCjjvbdbiMjLGXY -EPDKjvbdfpBzwEXh -DncKjvbdZeYGzhJC -DoCjjvbdFkEsCglu -DncKjvbdOFDshhjd -DncKjvbdZMRcsnMN -EPCkKvbdrEFJPnVa -DoCkKvbdcyyPxYpb -EPDLKvbdijGIKMwr -DoCjjvbdbAudepQX -DncLKvbdFejSOItR -EOcKjvbdSLZGVHLT -EPDKjvbdMJBkpxAS -DncKjvbdJXsaglQp -DnbkKvbdjcMLRHVH -DoCkKvbdFjeTCgmV -DnbjjvbdqUTfrRkU -DnbjjvbdznoqFCkx -EObkKvbdVqnYBeLc -DoDLKvbdaMjbTVMg -DoCkKvbdSQUHKFdX -DoCjjvbdrDdhomua -DncLKvbdcTCjsdJa -DoCkKvbdsCFlkgKy -EPCkKvbdmbKWwnmu -DoCjjvbdZQmFImEq -EPCkKvbdyXiKCPzL -EOcLKvbdKQzEnenF -EPCjjvbdrbGNMGjy -EPDKjvbdgGMZnHHA -EOcLKvbdfHjuqnRH -EOcLKvbdFeirNiUR -DoCjjvbduaEZSoFI -DncKjvbdbAudfPow -DoCkKvbdbiMikFwY -DoDLKvbdcyxpYYqC -DnbjjvbdpxoHfpdY -DncKjvbdqUTgRqjt -DoDKjvbdcImKKfWx -DnbjjvbdmfeYNNfy -EPCjjvbdIjEAJofd -EObjjvbdLBKgNCXq -EObjjvbduLxWaUAw -DnbjjvbdJTZBTNXl -DoCkKvbduaDyTOeI -EOcLKvbdUyIUZkPO -EOcLKvbddePRawCj -EPDKjvbdhbObeWqR -EOcKjvbdBdQAvJmG -EOcKjvbdkVwODaww -DnbkKvbdUVkoisaR -DnbkKvbdMoxQvNfs -EObjjvbdCJKbLIfK -DncKjvbdYpmFJNEq -DoCjjvbdjKFhKMxS -DnbjjvbdZLrEUNlN -EPDKjvbdwuNFRZMO -EObjjvbdjuvnECXw -EPCkKvbdlZTSTZGt -DoCjjvbdsQVoJcWG -DncLKvbdmJETqVSB -DnbjjvbdjggLfGOL -EObjjvbdxwiKBpZk -DoDLKvbdKDKCpjDY -EPCjjvbdzRPNIjXA -DoCkKvbdkaMoNALA -EPCkKvbdjvWnDaww -EPCkKvbdSBcdkiZL -DnbkKvbdbUbHXkUI -EOcKjvbdURROtuHm -DncLKvbdJmAEZgVB -DoDLKvbdDxYLsssl -DncKjvbdWRnXadlD -EPCjjvbdADSXiyhp -DnbkKvbdNGcPlouL -DnbjjvbdBsAcTevr -EObjjvbdWWhwvDeH -EOcLKvbdbUafxKsh -DoCkKvbdtcCuXWOo -EOcKjvbdbKkennDA -EPDLKvbdGcjujBjK -DoDKjvbdRWmdDMHc -EPCkKvbdmSZUyrdJ -DoCkKvbdLZRKSztf -DncKjvbdZQmFJNFR -EPDLKvbdjhGkefNk -DncKjvbdeATpmYJf -EPCkKvbdDjHivXjA -EObjjvbdFyVVBEXb -DncKjvbdIHHZxxXg -DnbjjvbdMoxQvNfs -EObjjvbdlYsRsZGt -EOcLKvbdZHWdAPTJ -DoCkKvbdoznDjwoA -EOcLKvbdYpmEiNEq -EOcLKvbdfMfWgNJk -DnbjjvbdjlalZeGo -EPDLKvbdVgxVxGxz -DoDKjvbdZRMdiMeR -DnbkKvbdNsUVgFUp -EObjjvbdNGcPmPuL -EPDLKvbdrSUjnKaN -DncKjvbdMgDPmQUk -DoDLKvbdRkZGUfkT -EOcLKvbdpxoIGqDx -DoCkKvbdVwIxVcdg -DoDKjvbdZQmFIleR -EPDKjvbdZshiZDrn -EPCkKvbdFWZPpNJe -DnbkKvbdcImKKfXY -DoCkKvbdiVZeWqtb -EPCkKvbdkxsSSyHU -EObkKvbdcSbkTdKB -EOcKjvbdFxttaEYC -EPCkKvbdhtzEwSVC -EOcKjvbdLAjgNBwq -DoCkKvbdZisHofbG -DoDLKvbdIsYaTNYM -EPDLKvbdADRxJzIp -DoDKjvbdTkuoAvOi -EOcLKvbdZRMeJMdq -EPDLKvbdWWiXvDdg -DnbjjvbdbsDKscjB -DnbkKvbdtlXwBUBX -EPCjjvbdmgFXlmgZ -EObkKvbdjmBlZeGo -EObkKvbdmgEwmOGy -DoCjjvbdtlXwBTaX -EPDKjvbdSiZiqABM -EPDLKvbdEXxMTssl -EPCkKvbdRWmccLhD -DncLKvbdrWpMDJZR -EPDLKvbdelfXGlik -EOcLKvbdFjdsChNV -EPCkKvbdVUMtFkuj -DoDLKvbdtkxXBUBX -DncLKvbdMgDQNPtk -DnbkKvbdMJCMQxAS -EOcLKvbduWOYJpsA -EPCjjvbdZxcimcMS -DoDKjvbdqrUjmkAm -EObjjvbdRzJgsCvA -EOcLKvbdiBoDFXRR -EPCjjvbdSPtHKFcw -DncKjvbdbBVeGPpX -DnbjjvbdRotGiedX -DoDKjvbdIHGzZYXg -DnbjjvbdiGjCyViu -EPCjjvbdSxKkmzjx -EPCjjvbdmajWwoOV -DnbjjvbdmbKWxPNu -EObkKvbdCTBCsfXS -DoCjjvbdKQzEnfOF -EPCkKvbddijRutzn -EObkKvbdFjeTCgmV -DnbjjvbdURQnuUhN -DnbkKvbdiCOcFXRR -EObkKvbdJutfEEfi -DncLKvbdhtydwRuC -DoCjjvbdcTCjsdJa -DnbjjvbdzoPqEcMY -DoDLKvbdSCDdlJZL -EOcKjvbdlhctQuSB -EPDKjvbdOFETiJKd -EObkKvbddZyQYZQb -EOcLKvbdrMyjYlHi -DoDLKvbdqrVLOLBN -DncKjvbdyNsHwriD -EObkKvbdQvnECkgc -DnbkKvbdznopeClY -DoCkKvbdCJLBjiGK -EOcLKvbdauCGxKtI -EPCjjvbdeFOrCWcK -DncLKvbdcSbjtDia -DnbkKvbdKWVGDdgJ -EPDKjvbdrDdiQNua -DncLKvbdqTtGqrKt -DoDKjvbdjJfIKMwr -DoCkKvbdkxsSTZHU -EObkKvbdFejSNhtR -DoDKjvbdnCKWxOmu -DoDLKvbdvBDySneI -DncKjvbddZxpXyRC -EPDKjvbddwzTsqez -DoDLKvbdLFfIBaQu -DncLKvbdwzHeewdr -DncLKvbdOFEUJJKd -DoDLKvbdEvZQQMie -EPDLKvbdWHxVwgYz -DoCjjvbdiGjCxujV -EPDKjvbdrovPJcWG -DoDLKvbdZxcjOCkr -DnbjjvbdRzJgsDWA -DoDLKvbdiZuGLpnG -DncLKvbdTukoitBR -DnbkKvbdnBiwXnnV -DoDKjvbdBvzdIdov -EObkKvbdRWnECkhD -DoCkKvbdRbDeMJZL -DncKjvbdiGjDYujV -EPCkKvbdNdctIiLE -EPCjjvbdKWUfDdfi -EOcKjvbdkIGlGGNk -EPDKjvbdGZVVBDxC -EObkKvbdXsMBNUOx -EObjjvbdANHxrvyx -EPDKjvbdZtIhyDrn -DoCkKvbdRWmdCkgc -EObkKvbdffLynGgA -DoDKjvbdIxTahMQp -DncKjvbdKQzFPGOF -DoDKjvbduDCtwWOo -EOcKjvbdnCJvxOmu -DoCjjvbdEJgivXjA -DncKjvbdemGWgMjL -DncKjvbdCDpBVjMf -DncLKvbdmoyxukZC -EOcLKvbdtkwwBTaX -DoCkKvbdLqwMzUpz -DncLKvbdqFdFUWBI -EPDLKvbdZyEJmblS -EOcKjvbdEzsqFMCi -DoCkKvbdcarmSATm -DncLKvbdFfJqmiTq -DncLKvbdKQzEoGNe -DoCjjvbdUaCRTRSZ -EOcLKvbdqZOhGqEY -DoCkKvbdZisIQGaf -DoCkKvbdeFOrBwCj -DoDLKvbdmIctQtqa -EObkKvbdxVMdqYkn -DncKjvbdwygfFxFS -DoCkKvbdRWnEDLhD -EOcKjvbdmRyUyrci -DoCkKvbdWXIwvDeH -EPDLKvbdRXODcLgc -DoDLKvbdBsBDUGWr -EOcKjvbdEvYopNJe -DoCjjvbdBvzdIdov -DoCkKvbdyzeNrIJI -EObkKvbdCJKbKhej -EObjjvbdQccBQQcr -DnbkKvbdxZgeewdr -DoDKjvbdqcdhpNua -DoCjjvbdeJjSVtzn -DncKjvbddneTKssr -DnbjjvbdZxcjNbkr -EPCjjvbdZisIPfaf -EPCkKvbdkyTRrxft -DncKjvbdVwIxVcdg -DncLKvbdIxTagkpp -EPCjjvbdbrbjtEJa -DncKjvbdkCkjqHUg -DoCkKvbdUxgsyjnn -EObjjvbdUaCRSprZ -DnbjjvbdMJCLpxAS -DncLKvbdliEUQuRa -EPCkKvbdANHxrvzY -EPCjjvbdeAURMwjG -EPDKjvbdZoOIeEzK -DoDKjvbdmuVZkJqf -DncLKvbdaNLCTUlg -DoCkKvbdnQZxvLYb -DncLKvbdhficZWJu -DncKjvbdatbHYLUI -DoCjjvbddndrjtUS -EOcLKvbdsBfMkgKy -DnbjjvbdBiKakIfK -DnbjjvbdSQTfjFcw -DoCjjvbdmoyxvKyC -DoCkKvbdGcjuibKK -DnbkKvbdZQldiMeR -EObkKvbdqquKnKaN -DoCjjvbdZRNEhldq -EPCjjvbdBiKbLJFj -EPCjjvbdyXhjCPyk -DncLKvbdtTSSxzEc -EPCjjvbdnCJwXnmu -DoDLKvbdbBWEfQPw -EOcLKvbdemGXHNKL -DoDLKvbdmfdxMnGy -EOcLKvbdTqQntthN -EOcLKvbdrMyixlIJ -EOcLKvbdVUMselWK -EOcLKvbdBvzchePv -DoCjjvbdbVCHXjsh -EPCjjvbdZRMdhleR -EOcLKvbdhbObeXRR -EPCkKvbdFWZPpMie -DncLKvbdXFyZtAOs -DnbkKvbdTqQoUuHm -EPCjjvbdCSaDUFvr -DoDKjvbdQZNAHTSK -EOcLKvbdmoyyVkZC -DoCkKvbdGLErbhMu -EOcLKvbdtvNwjRTA -EObkKvbdFjdsDINV -EOcKjvbdeOdsLUUS -DncKjvbdMtrrKmAX -EObkKvbdBsBCtGWr -EOcLKvbdVBCRTRSZ -DoDKjvbdKQydoFme -DncLKvbdnHFXmOGy -DnbkKvbdGAnqYizm -EOcLKvbdjlakzEfo -EOcKjvbdegkWSOQg -DoCjjvbdtkwwAsaX -EPCkKvbdeKKSWUzn -EObjjvbdrRtjnLBN -EPCkKvbdeATqMxKG -DnbkKvbdZMRdTmlN -DoDKjvbdNsUWGeVQ -EObjjvbdyXiKBpZk -EOcLKvbdJKEAJpHE -DoDKjvbdzQoNJJwA -DoCkKvbdwygeewdr -EObkKvbdsCGNMHKy -EOcLKvbdlhdUQuRa -EObjjvbdyNsHwsIc -DoDLKvbdWRnXbFLc -EObjjvbduCcUvvPP -EOcLKvbdrEEhonWB -EPCjjvbdRjyFtgKs -EPCjjvbdkNCLzFGo -DoCkKvbdRDbaPpcr -DoDKjvbdQdCaQQdS -DncKjvbdwyhFexFS -EPDLKvbdBhjakJGK -EPDKjvbdaNKaruMg -EObkKvbdzQnliJwA -DnbjjvbdptTfrSLU -DoDKjvbdFWZPpNJe -EObkKvbdZxcjOCkr -DoDKjvbdehLWRnQg -EOcLKvbdcSbkUEKB -EObjjvbdbUafxLTh -EObkKvbdBcpAvKNG -DoDLKvbdySmiNSBg -DncLKvbdmIdUQuRa -EPCkKvbduDDUvuoP -DoDLKvbdMtrqjmAX -DoDLKvbdVZHtZkOn -EOcLKvbdiZuGLpnG -EOcKjvbdxmrgxShc -DoCjjvbdMpYQvNfs -EOcKjvbdCIkCKiFj -EPDLKvbdaaVdepPw -EObkKvbdXFyZtAOs -EPDLKvbdbKlFnnDA -DncLKvbdqGEFTuaI -EOcKjvbdqFcdsvAh -EPCkKvbdcSbkUDjB -DncKjvbdrJAJeMoF -EObjjvbdZMRdUNkm -DncKjvbdCEPaVjNG -DnbjjvbdptUHSSLU -EPCkKvbdUtNTekuj -DoCkKvbdVqmwadlD -EObjjvbdCIkBjiFj -EOcLKvbdbVCGwkUI -EObjjvbdFfKSNiTq -EPDKjvbdJXtCHlRQ -EPDKjvbdTvMQJtBR -EPCjjvbdZMRdTnLm -EPCjjvbdemGXGljL -EPDKjvbdxmsHxTJD -EOcKjvbdiVZdvrVC -DnbkKvbdmSZUzSdJ -EPCkKvbdUaCRTRSZ -DncLKvbdoAKztIDn -EObjjvbdHffyyXxH -EPCkKvbdaMjbStmH -EObjjvbdZyDinDMS -DoDKjvbdjlbMZdgP -DncKjvbdQwOEDMHc -DncLKvbdGLFSbgmV -EPCkKvbdjvXOECXw -DoCkKvbdSBceLhyL -DoDLKvbdEvYpPmKF -EOcKjvbdrbFlkfkZ -EPDKjvbdTvMQJsaR -DncLKvbdjvXNcaxX -DnbkKvbdijGIKNXr -EOcLKvbdiHJcZViu -DoCjjvbdlqxuZsDi -DnbkKvbdhuZeXRtb -DncLKvbdACqxJzJQ -EObjjvbdjlbLydgP -EPDKjvbdxZgefXdr -EOcKjvbdSCEFLiYk -EObjjvbdKefICApu -EPDKjvbdjlbLyeGo -DncLKvbdbAvEepQX -EPCkKvbdrSVKnLAm -DncLKvbdZjTHpHBf -DnbkKvbdCWzdIdov -DoDLKvbdxUmFQyLn -DnbkKvbdxVNFRYkn -DoCkKvbdZisHpHCG -DoDKjvbdwkXEHzzG -DoCjjvbdSPtHJedX -EOcLKvbdBiLBkIej -DoCkKvbdiLdcnVCy -DnbkKvbdlhcsqUqa -EPCjjvbdwzIGFxEr -EPCkKvbdySmiNRag -DncLKvbdHEKujCKK -EPDLKvbddeOrCXDK -DoDLKvbdNGbolpUk -EOcLKvbdtlYXBTaX -EOcLKvbdqwQLcIyR -EObjjvbdIrxaSlxM -EObjjvbdbrcKtEKB -EOcKjvbdpxngfqDx -DoDLKvbdKfFhCApu -DoDLKvbdJvUfEEfi -DncKjvbdsQWOibuf -DoCjjvbdHgGyxxXg -DoCkKvbdZHWdAPTJ -DncKjvbdauBgYLTh -DoDLKvbdJYUCIMRQ -DncKjvbdbrbjtEJa -DnbjjvbdemFwHNJk -DnbkKvbdBvzcheQW -EPCkKvbdJqZePGNe -EPCkKvbdSKxeuGkT -EPDLKvbdIryBTMxM -EPCjjvbdwWlAuaVu -EOcLKvbdyTOJNRbH -EPCjjvbdQvmdClID -DnbjjvbdyTOJMqag -DncKjvbdrXQMDJYq -EPCkKvbdGdLVjBij -EOcLKvbdjJehJmXr -DnbkKvbdCJKakJGK -DoCjjvbdLrWlzUpz -EPCkKvbdhzVFlRNf -DoCjjvbdRDcApRES -EObkKvbdzROmJKXA -DncKjvbdxUmFRYlO -EPCkKvbdURQoVVIN -EPDLKvbdVZHtZkPO -DnbkKvbdatafwjsh -EObjjvbdNrtWGdtp -DoDLKvbdBiLCLJFj -EOcKjvbdmgFXmOHZ -EObjjvbdZRMeImEq -DoCjjvbdiMEdNtcZ -DnbjjvbdgFkzNfgA -DnbjjvbdGKdsDHmV -DncLKvbdIxUBhMRQ -DoDLKvbdjSzhrjiz -DoDLKvbdpyPHgRDx -DoDLKvbdqYoIGpdY -DoCkKvbdUQqPUuHm -EPCkKvbdBraDTfXS -DncKjvbdNrtWGeUp -DncKjvbdJqZdnenF -EPCjjvbdCWzdIePv -DoDKjvbdrXPlDIxq -EPDKjvbdauBgYLUI -EPCjjvbdQmXbYnUz -DoCjjvbdGGJqnJUR -EPDLKvbdkVvnEBww -EPCjjvbdTukoitBR -DoCjjvbdRkZFtgLT -DoDKjvbdEuyPpMie -EPCkKvbdSLYfUgLT -DnbjjvbdIwtBglQp -DnbkKvbdznpQeDMY -EOcKjvbdznpRFCkx -EPDLKvbdtumwjQsA -DoDLKvbdBhjajiGK -DoDKjvbdhlFDmuDZ -DnbkKvbdqquKnKaN -DncLKvbdMowqVmfs -EOcKjvbdqrUjnLAm -EObjjvbdqwQMDIyR -EPDKjvbdnCKXYPOV -DnbkKvbdHffyyXxH -DoCjjvbdlZSrTZGt -DoDLKvbdznpRFDMY -EPDKjvbdWWiXvDdg -DoDKjvbdRWnEClID -DnbjjvbdJcKCqKDY -EPDKjvbdJbjDQicY -DncLKvbdhaoDEwRR -DncLKvbdvAdZSoEh -DncLKvbdeEnrCWbj -DoDKjvbdVvhwvDeH -EOcKjvbdVAapsQqy -EPCkKvbdxnTIYSiD -EPCkKvbdrouoJbuf -EObjjvbdePEsKtUS -EPDLKvbdirziSkJz -DnbjjvbdhaoCdvqR -EPCkKvbdGZVVAdYC -DncKjvbdtbbuWuoP -DoCkKvbdLFehCBRV -DoDKjvbdLZRJrztf -EObkKvbdkHflGFmk -EOcKjvbdJYUCIMQp -EPDLKvbduCcVXWOo -EPCkKvbdptTfqqkU -DoDKjvbdGQATWgGZ -DncKjvbdEztQeMCi -EObkKvbdZtJJZETO -DoCjjvbdZsiIyETO -EObkKvbddndrjstS -EOcLKvbddeOqbXDK -DnbkKvbdCTBDUGXS -EPDKjvbdQlwayOUz -EPCjjvbdlqyUzTEJ -DoDLKvbdhtydvrUb -EOcKjvbdlZTSSyGt -EOcKjvbdmJDtQuSB -DnbjjvbdtSqsZZeD -DoDLKvbdUaBpsRSZ -EPDKjvbdLGFhBaRV -DnbkKvbdSBcdkhxk -DoCjjvbdDoDKkXDE -DoDKjvbdwyhFfYFS -EPDKjvbdOEctJIjd -EPCjjvbdEObjkWcE -EPDLKvbdhtzEvquC -EObkKvbdZjShQHCG -EPCjjvbdmIctQuRa -EPCkKvbdVwIwucdg -EOcLKvbdADRxJzJQ -EOcLKvbdWWiXvEEg -EPCjjvbdTAFIhBoE -EPDLKvbdZLqdTnMN -EPDLKvbdZQldhmEq -EOcKjvbdLLBIWAJy -DncLKvbdrMzKYlIJ -EPCjjvbdzitoodSt -EPDLKvbdLFehCAqV -DoCkKvbdrMyiyMHi -EPDKjvbdkVvmcaxX -EOcKjvbdmpZxvKxb -EPCkKvbdliDtRUrB -DncLKvbdkxsRsYft -EPDKjvbdTqROuVHm -EPCjjvbdSQTgJedX -EPDLKvbdHlBznXRL -DncKjvbdQdDBQRDr -EPDLKvbdliDsqVRa -DoDKjvbdjgflFfOL -EPDKjvbdeEoSCWbj -DnbkKvbdfSBWzkcP -EObkKvbdmIcspuSB -EPCjjvbdvAdZTPEh -DoCkKvbdIGfyxwxH -DnbjjvbdWWiYWDeH -EObkKvbdZQleImFR -DncLKvbdQwNdCkgc -EOcLKvbdQdDBPqES -DnbjjvbdrpWPJbuf -DoCkKvbdTulQKTaR -DoDLKvbdeUAUASlv -EPCjjvbdZQmFJNEq -DncLKvbdVBBqSqSZ -EOcKjvbdqceJPmvB -DncLKvbdZtIiYcrn -EOcLKvbdJSxaSmYM -DoCkKvbdqqtkOLBN -EObkKvbdgFkymfgA -DnbjjvbdVqmwadlD -DncLKvbdsBfNMGkZ -EPDKjvbdEPDKjwCd -EObjjvbdHDjvKBjK -DncLKvbdCTAbsevr -EObkKvbdFxuUaEXb -DoCjjvbdcyyQYZQb -EObjjvbdZsiIxdSn -EPDLKvbdZQmEhmEq -DnbkKvbdxnTIXriD -DncKjvbdfHkVrORH -EOcKjvbdddoSCXDK -EPCkKvbdhanbdvpq -EOcKjvbdRyihTDWA -DnbjjvbdajkeoODA -EOcLKvbdlhdTpuSB -EPDLKvbdhgJbxuiu -EPCjjvbdnHFXmNgZ -EPCkKvbdpecdsvAh -DnbkKvbdVZIUZjnn -DncKjvbdbAvFGPpX -DnbjjvbdkMalZeHP -EOcLKvbdYSlAmUOx -DoCjjvbdHDkWKCKK -EPDLKvbdaRecHsek -EPCjjvbdJXsagkqQ -EObjjvbdRMwbZNtz -EPCkKvbdrbGMlHKy -DncLKvbdKfGICApu -EPDLKvbdUtNTfLvK -EPCkKvbdMJCMRYAS -EOcLKvbdCJKbLJFj -DoDKjvbdfpBzvcxI -EObkKvbdYpldhmFR -EOcLKvbdSPsfiecw -DoCjjvbdHEKvKCKK -DnbjjvbdUGzmkwVe -DnbjjvbdfMfXGmJk -DnbkKvbdZoOIeEyj -EObkKvbdZnmhdeZj -EOcKjvbdTkuoBVoJ -EPCjjvbdGKdsChMu -DoDLKvbdJYTahLpp -EPCjjvbdbhmJkFwY -DoDLKvbdkIHMGGOL -EPDKjvbdZsiIxdSn -EPCjjvbdMgCpNQUk -DncLKvbdjblKqGtg -DncLKvbdOYOuzdNt -DncKjvbdTvMPjTaR -EPDLKvbdiiehKNXr -DoCjjvbdZdxGzghb -DoDLKvbdeOdsKssr -DoDLKvbddBsMrAUN -DoCkKvbdxxIjBozL -DoDKjvbddoErkUTr -EOcLKvbdwzIFeweS -DoDLKvbdREDBQRES -EObkKvbdhlEdOUby -DoCjjvbdNPxRWNgT -DoDLKvbdZLqctNlN -EObjjvbdbUbHXkUI -DnbkKvbdhtydwSVC -EPDKjvbdeUAUASmW -EObjjvbdhgKDYvJu -EOcLKvbdZnmhddyj -DoDLKvbdUVlQKUAq -DoDKjvbdDihJvXjA -DnbkKvbdZLrETmlN -EPCjjvbdxxJJbQZk -EPCkKvbdrounjDVf -DoCjjvbddiirVtzn -DoDLKvbdmttyjiqf -DncKjvbdfHjvSNpg -DoCjjvbdmRxuZsEJ -DoCkKvbdjAQGaQGj -DncLKvbdnVUzLJrG -EPCjjvbdLAjgNCXq -DoDLKvbdqmZixlHi -EPDLKvbdVUMsekvK -EPDKjvbdrMzKZMIJ -EPCkKvbdKDKCpicY -EOcLKvbdwtmEqZMO -EPDLKvbdmgFXlnGy -DncKjvbdyTNhlqbH -DncKjvbdnHFXlnHZ -DoDLKvbdTqROuUgm -DoDKjvbdRMwbZOUz -EPDKjvbdRMwbYmtz -DoDKjvbdZnmheEyj -EPCkKvbdbBWEfPow -DoDKjvbdQwNccLgc -DoCjjvbdhtzFWqtb -DoDKjvbdRotHKGEX -DncKjvbdZsiJZETO -EObjjvbdaNKbStlg -DoCkKvbdsZlQTAhO -EObjjvbdjhGlGGNk -EObkKvbdQdDBQQcr -DoDKjvbdMtrrLNAX -EPCjjvbdRotHKGDw -EPCjjvbdqZPIGqDx -EOcLKvbdiGicZViu -DnbjjvbdJvVGEFGi -DoCkKvbdKNAEZfuB -EPDLKvbdLZRJrzuG -DnbkKvbdhytfLpnG -EPDKjvbdRbEEkiYk -EOcLKvbdcJMjLFvx -DncKjvbdFfKRnItR -DoDLKvbdegjurORH -DnbjjvbdEPDKjvcE -EPCjjvbdkHgLeenL -DncLKvbdZnmheEzK -DncKjvbdZjSgpHCG -DoCkKvbdbBVdeoow -DoDLKvbdZQmEhleR -EPDLKvbdpxoHfpcx -EPCkKvbdSPtGjGEX -DncKjvbdRbDeLhxk -EObkKvbdrpWOibvG -DnbjjvbdfIKurNpg -EPDLKvbdZyEKNbkr -DoDLKvbdwXMAvBWV -EOcLKvbdWWiXvDdg -EOcKjvbdelfWfljL -DncLKvbdjuvnEBxX -DncLKvbdliDspuRa -EObjjvbdVTlsekuj -DoCjjvbderAvzlDP -EPDKjvbdNeDtIhkE -Dnbjjvbddwyssqez -EObkKvbdGGKRnItR -DoCkKvbdHbLzEzAD -EPCkKvbdTvMPjUBR -EObjjvbdTAEiIBoE -DoCjjvbdRjxfUgLT -DnbkKvbdnUuZkKRf -EPDLKvbdjmBkydgP -EObkKvbdNeDsiIjd -DncKjvbdrounjDWG -DnbjjvbdrWokbhxq -DoDLKvbdsPvPKDWG -DncKjvbdZdwfzgiC -EOcLKvbdZLqdUNlN -DoCjjvbdkDMLRHVH -EPDKjvbdirziSjiz -EObkKvbduDDUvuno -DoDLKvbdkHgMGGOL -DncLKvbdhkdcmuCy -EObkKvbdCJLCLIej -DnbkKvbdeFPRawCj -DncKjvbdsQVoKDVf -EPDLKvbdRXNccLhD -EObkKvbdFxttaDxC -EObkKvbdqrVKnKaN -EPCjjvbddoEsKtUS -EObjjvbdzaAOffbM -DoCjjvbdWSNxBdlD -EPCjjvbdqlzKYlIJ -EOcLKvbdQdDApRDr -DncKjvbdczZPwyRC -EOcLKvbdtlXwBUBX -EOcKjvbdmgFYNOGy -DoCjjvbdKVtfEFGi -EObkKvbdrNZjZLgi -EOcKjvbdliETqVSB -EOcKjvbdbVBgXkUI -DncLKvbdNHDPmPtk -DnbjjvbdjlakzEfo -EOcKjvbdVUNTfLvK -EPDKjvbdTXjkmzjx -DncLKvbdrylQTBIO -EPCkKvbdJpzEoGOF -DncKjvbdFeiqmhtR -DncLKvbdZnnJFFZj -EPDLKvbdlrZUzTEJ -EPDKjvbdLFfICBRV -EPCjjvbdcyxpXyRC -DoDLKvbdQdCaQQcr -DncLKvbdZsiJZDsO -EObjjvbdzQoNIjXA -DncLKvbdVqmxBdlD -DoDKjvbdRjxfUgLT -EObjjvbdWIYVxHYz -DoCkKvbdIGfzZXxH -DncKjvbdxsNhlqag -DoDKjvbdFWYopNJe -EPDKjvbdVBCRTRSZ -EPDKjvbdwyhFfXeS -DoCjjvbdziuPocsU -EPDKjvbdYSkaNUPY -EObjjvbdznopdcLx -EOcLKvbduMYWaUBX -EPDKjvbdnPzZWKyC -EObkKvbdZxcimbkr -EObkKvbdBhjbKiFj -EOcLKvbdjuwNdBww -EPDKjvbdmbKWxOnV -DoCkKvbdnHFYNNgZ -DoDLKvbdrMzKYkhJ -EOcLKvbdqdFIpNvB -EPDKjvbdcScKtDjB -EOcLKvbdygZMAMdw -EOcLKvbdsCGNLgLZ -DoDLKvbdaMkBsUlg -DncKjvbdlZSqsYft -DnbkKvbdnVUzLKRf -DoCkKvbdnHFXlmgZ -EPDKjvbdxZgfGYFS -DoCkKvbdxwiKCPzL -DnbkKvbdBcpAvKMf -DoCjjvbddZyQXxpb -DncLKvbdzQnmIjXA -EPDKjvbdFWZQQMjF -DnbjjvbdMgDQMpUk -DncLKvbdOFDtIiKd -DoDKjvbdKNAEZfta -EOcKjvbdhyuGMQmf -DnbjjvbdZnmhdeZj -DncLKvbdhbOcFXRR -EOcLKvbdvBEZSoEh -EOcKjvbdYkrEUOLm -EPCkKvbdNrtWGduQ -EPDKjvbdZjSgpHCG -EObkKvbdyzdmrHhh -DoDLKvbdznpQdblY -DncLKvbdZshhyDrn -DnbkKvbdjvWmdCYX -EOcLKvbdAMgxsWzY -DnbjjvbdwzIGGXdr -EPDKjvbdrNZixlIJ -DoDKjvbdsQWOicVf -DoDKjvbdjuvmdBxX -EObkKvbdzHZMANFX -DoDLKvbddjJqutzn -EOcKjvbdwNWAMdFN -DnbkKvbdTqRPUtgm -EOcKjvbdVYgtZkOn -EPDKjvbdNGcPlotk -DnbjjvbdJbjDRJcY -EPDLKvbdZtJIyESn -DoDKjvbdtcCuXVoP -DoCjjvbdZMSETmlN -DoCjjvbdgGLzNfgA -EPDKjvbdxKvcgzyf -EObjjvbdrMzKZMIJ -DncLKvbdMoxQumfs -EPCjjvbdbhlikFvx -DoDLKvbdRadFMJYk -DnbjjvbdHgGzYxYH -EObjjvbdVZHtZkOn -DnbkKvbdakLfPNcA -DoCjjvbdmfeXmOGy -DoDLKvbdrRtjmjaN -DnbjjvbdUxgsyjoO -DnbjjvbdbhlikFvx -EPDLKvbdRbEFMJYk -EOcKjvbdRXNcblHc -DnbkKvbdqmZixlHi -DoCjjvbdrzLpTBIO -DoCjjvbdILaznXRL -EPDLKvbdRjyGVGkT -EOcLKvbdehKurOQg -DncLKvbdYkrDsnLm -DoDKjvbdZisHpGaf -DncLKvbdpyPIGpcx -EOcLKvbdijFhKNYS -EOcKjvbdMuSqkNAX -EObjjvbdajlFnnDA -EOcKjvbduLxXAsaX -DnbjjvbdiiegjMwr -EPCkKvbdiMEdNuCy -EPCkKvbdqTtHSRkU -EPCkKvbdIryBTNXl -DncLKvbdFjdrcHlu -EPDKjvbdZoOIeFZj -DncLKvbdcbTNSATm -DoDKjvbddePSCWcK -DoDKjvbdZsiJYcsO -DoDKjvbdpeceTuaI -EOcKjvbdjhHMGFnL -EOcLKvbdjcLkRGtg -DnbjjvbdCJLCKiFj -EPDLKvbdZsiIxdSn -EObkKvbdVTlsekvK -EObkKvbdCTAcTewS -DoDLKvbdOYOuzcnU -EPCkKvbdiUydwRuC -DncLKvbdGQATXGey -EPDLKvbdDjIJvXjA -DncKjvbdpxoIHQdY -EObkKvbdZMSDsmkm -EOcLKvbdBvzchdov -EOcLKvbdKRZeOenF -DnbkKvbdwzIFfYEr -DnbkKvbdSKyFuHKs -EPDKjvbddCSlrATm -EObkKvbdSCDeMIyL -EPCjjvbdsCFllGjy -DnbjjvbdHgGyyYYH -DncKjvbdjKFgilwr -DncLKvbdEvYoomJe -EObkKvbdlhdTpuSB -DoDKjvbdWWiYVceH -DnbjjvbdLGGHbBQu -EObkKvbdOXoVzcnU -DnbjjvbdbsCjtDjB -DnbjjvbdQwOECkhD -DnbjjvbdMgComQVL -DoCjjvbdRotGjFcw -DnbjjvbdmajWxOmu -EPCkKvbdbPfgDkzd -Dnbjjvbdpxngfpcx -DoCkKvbdBraCtGWr -DncKjvbduDCtwWPP -EPDLKvbdYzcFrKVy -EObjjvbdbVBgXkTh -DnbkKvbdyYIibPyk -DncLKvbdUVlPitAq -EObkKvbdbKlGOnDA -DnbjjvbdrJAKFNPF -EPDLKvbdLAjgMbYR -DoCjjvbdSxLLmzjx -DncKjvbdeEnqawCj -EObkKvbdFWZQPmKF -EOcKjvbdGdKvJbJj -DnbkKvbdjcLjqHUg -EPCjjvbdQvnDcLgc -EPCkKvbddoFTLTtS -DnbkKvbdZtIhyDrn -EPDKjvbdBvzdIdpW -EObjjvbdEYYLstUM -EPCkKvbdyzdnSHiI -EObjjvbdZLqdTmlN -EPDLKvbdIHHZyXwg -DoCkKvbdbVBfxKtI -DnbkKvbdMpYRWOGs -EOcKjvbdczYoxYqC -EPCjjvbddwytTqez -EPCjjvbduaDySoEh -EObkKvbdTJZiqAAl -EObjjvbdmoyyWLYb -EPDKjvbdnPyxukZC -EObjjvbdrWolDJZR -DoCkKvbduCbtvvPP -EPDLKvbdJbicQibx -DncLKvbdHELVibJj -DnbjjvbdKefHbAqV -DncLKvbdsZkpTBHn -DoDKjvbduCcVXWOo -DnbkKvbdidkGtoAO -DnbjjvbdrEFIonWB -EPCkKvbdfpBzwEYI -DncLKvbdwuNFRZMO -EPDLKvbdrounjCvG -DncLKvbdxxJJaoyk -EPCjjvbdJmADzHUa -EPDLKvbdqGEFTvBI -EPDLKvbdyOShYTJD -EPCjjvbdJutecdfi -EPDLKvbdIMBznXQk -DncKjvbdmoyxvKyC -EPDLKvbdrXQMChyR -DoCkKvbddwytUSFz -DncKjvbdZjTHofbG -EPDKjvbdGcjujCJj -EPCkKvbdvBEYsOeI -DncKjvbdCTAcUGWr -EPCkKvbdmbKWwnnV -DnbjjvbdpxnhHREY -EObjjvbdlZTRsYft -DoCjjvbdhkdcmtcZ -EObjjvbdMfcPmPtk -EPCkKvbdJXtCHkpp -DnbjjvbdrSUjmkBN -EOcLKvbdYSlBMtOx -EObjjvbdznopdbkx -DncLKvbdddoSCXDK -DoCjjvbdOXnuzcnU -EPCkKvbdZGwEAOsJ -EOcKjvbdauCGwjtI -EPDLKvbdNHDPmPuL -EOcLKvbdNHCpMpUk -DoCjjvbdmSYtysDi -DncKjvbdFjeTDINV -DncKjvbdNrtWHFUp -EPCjjvbdmJETqUqa -DncKjvbdEzsqEkcJ -EOcLKvbdmoyyVjyC -EOcLKvbdZMSETnMN -EOcLKvbdBsAbtFvr -EPCjjvbdJutfEFHJ -DoCkKvbdiBoDEwRR -EPDLKvbdZQmFImFR -EPDLKvbdpfDdsuaI -DnbkKvbdmbKXYPNu -EObjjvbdjKGHjNXr -EOcLKvbdpssgSRjt -DoDLKvbdKRZePGOF -DnbkKvbdfekymgHA -DoDLKvbdiCOcFWqR -DnbjjvbdiHJbyWKV -DoDKjvbdsCGNMHKy -DoCjjvbdGKeSbgmV -DoDLKvbdkIGkfFnL -DncKjvbdfILWRnRH -DoDKjvbdGLEsChNV -EPCjjvbdVrNxBeMD -EPDKjvbdSLZGVHKs -EPDLKvbdQlxByOUz -EOcLKvbdMgDQNQVL -DoDLKvbdrRtjnLAm -EObjjvbdCIkBjhfK -DncKjvbdDwwlTssl -DoDLKvbdANIYsWzY -DnbjjvbdxVMdqYkn -DoCkKvbdzdynzdzQ -DnbjjvbdxsNhmRag -EObjjvbdzjVQPcrt -DoCkKvbdbBWFFopX -EPDKjvbdhfibxvKV -DnbkKvbdegjvRmqH -EPCjjvbdkNCMZdgP -EOcLKvbdmtuZkJqf -EObjjvbdemFvfljL -DncLKvbdyYIibPyk -EObjjvbdieKftoAO -DncKjvbdvOszqKoU -DncLKvbdVUNTelWK -EOcKjvbdCDoaWKMf -EPCkKvbdbsDKtDjB -EPDLKvbdmSYuZsDi -DncLKvbdwWlBWBWV -EObjjvbdkVwOEBww -EObkKvbdWSNwbFLc -DnbjjvbdZRNFImEq -DoDKjvbdrounjDVf -EPDKjvbdCJKbKhej -DncKjvbdsrrTYyeD -DoCjjvbdQvnEDMHc -DoCkKvbdGQASwGfZ -EOcLKvbdfSBWzkbo -DoDLKvbdRkZGVGkT -EOcKjvbdyXhjCPzL -EPCkKvbdbrbkTdJa -EPDLKvbdsQVnibvG -DnbjjvbdpyOgfpdY -DoDLKvbdtunXiqTA -EPDKjvbdqGDdsvAh -DncKjvbdjEkHUoAO -EPCjjvbdGQATXGfZ -EOcKjvbdKDJcRKCx -DncKjvbdhyuGMQnG -DoCkKvbdYkrDsnMN -DoCjjvbdaNKbSuMg -EOcLKvbdrykpTAhO -DnbkKvbdrSUkNkAm -EPCjjvbdwzHeeweS -DoDLKvbdSBdFMJYk -DnbjjvbdqUUGrRjt -DoDKjvbdzitoocrt -EPDKjvbdxnShXriD -DoCkKvbdVviXvEEg -EObkKvbdFxuUaDxC -EObkKvbdygZMAMeX -DnbjjvbdiifHilxS -EPDKjvbdZxcjODMS -DoDLKvbdWWhxWEFH -EPCjjvbdzoQQeClY -EOcLKvbdptUHRqjt -DoDKjvbdVviXudEg -EPDLKvbdUQpnuVHm -EPCjjvbdwzHfFweS -EOcLKvbdZxcjNbkr -EObkKvbdZnmhddyj -DoDLKvbdvlvANDdm -EOcKjvbdMfbolpVL -EObjjvbdbAvFFpQX -EOcKjvbdBdPaWJlf -DncKjvbdqceIonWB -DoCkKvbdtcDVWvOo -DoCkKvbddoFTKssr -DoDKjvbdaMkBruMg -EPCjjvbdEuyPolie -DnbkKvbdOEcsiJLE -DncKjvbdHlBznWqL -EPDKjvbdbhlijewY -EObjjvbdfoazwDwh -EOcLKvbdaNKbStlg -DoCkKvbdqdEiQOWB -DoCkKvbdTvLpKUBR -DncKjvbdkNBkzFHP -EObkKvbdFkErcHlu -DoCkKvbdZshiYcrn -EObjjvbdEJhJvYKA -DnbkKvbdOTUWHFUp -DoDLKvbdVhXvXfxz -EPDLKvbdBdPaWKMf -EObjjvbdFejRnJTq -EPDLKvbdULvPBVoJ -EPDKjvbdJzpFwdAN -EPDKjvbdqwPkbiZR -EPDLKvbdrEFIomua -EOcLKvbdijFhJlxS -DnbkKvbdYkrEUOLm -DnbkKvbdIMBznXQk -DncKjvbdZisHpHCG -EPDLKvbdzjUopESt -DnbjjvbdzjUpPcrt -EPDKjvbdqZOgfpdY -DoDKjvbduLxXAsaX -EObkKvbdrMyiyMHi -EPCkKvbdqTsfqrKt -DoDKjvbdTfznMXVe -EObkKvbddoErkUTr -EOcLKvbdHELWKCJj -DncLKvbdUVkpJtAq -EPCjjvbdRMxBxmtz -EPDKjvbdjEjftoAO -EOcLKvbdYkrDsmkm -DoDLKvbdajlFoNcA -DoCjjvbdmJDtRUqa -EPDKjvbdTqQoUuIN -DnbkKvbdtcDUvvPP -DncLKvbdrbGMlHLZ -DnbkKvbdKfGHbApu -DncLKvbdGFjRnIsq -EPDLKvbdJzpGYEAN -DoCjjvbdkySrSyHU -EObjjvbdKVtfDdfi -EPDKjvbdNrsugFUp -DoCkKvbdNxOuzcmt -DoDLKvbdDihJuxKA -DnbkKvbdzdzOzdzQ -DncKjvbdmSYuZrci -EOcLKvbdptTfqqkU -EPCkKvbdVUNTfLvK -DoCkKvbdGdKujBjK -DoCjjvbdzitopETU -DoDKjvbdqvokbiYq -EPDLKvbdGFjSOJTq -DoDKjvbdliETqUrB -DoDKjvbdZisIQGbG -DoCjjvbdnQZyWLZC -EOcLKvbdGdKujCJj -EPCkKvbdaRfDIUGL -EOcKjvbdauCHXjtI -DnbkKvbdbQHHDkzd -DoCjjvbddZxpYYpb -EObkKvbdbBWEepPw -DncKjvbdSLYfVGkT -EObkKvbdVgxVxHYz -DoCjjvbdfpBzwEYI -DoDKjvbdmfdxMmfy -DncKjvbdhancEwRR -DnbkKvbdEASJMzXX -EObjjvbdmfdwmNfy -DnbjjvbdhbOcFXQq -DoCjjvbdVgxVxGxz -EPCkKvbdQcbaQQdS -EPCjjvbdhbObeXRR -EPDKjvbdePFSkUTr -EPDLKvbdMoxQumgT -DoCkKvbdIBkydzAD -EOcLKvbdcasMrAUN -DoCkKvbdUQqOttgm -DnbkKvbdelevfljL -EObjjvbdZeXfzgiC -EPCjjvbdQYmAGrrK -EObjjvbdxZhGFxFS -EObjjvbdJuuGEEgJ -DoDLKvbdEARhlyvw -EPDKjvbdZdxGzhJC -DoCkKvbdzRPMhiwA -DoCkKvbdZxcinClS -EOcKjvbdFyVVBEYC -EOcLKvbdtbcUwVoP -DncLKvbdlZSrTYft -EObkKvbdaaVeGPow -DncLKvbdEKIJvXjA -DncLKvbdbhljKfWx -EObkKvbdVhYVxGxz -EPDKjvbdmpZxukZC -DoDLKvbdnBivxOnV -EObjjvbdRbEEkiZL -EPCkKvbdZRNFIleR -DoDLKvbdZyEJmblS -DncKjvbdkIGkefNk -EPDKjvbdRkZGVGjs -DnbkKvbdiHJbyVjV -EPDLKvbdFjeSbglu -DncLKvbdqFcdtVaI -EOcKjvbdGYuVAdYC -DoCjjvbduaEZSneI -DnbjjvbdKWVFdFHJ -EObjjvbdGdLVjCJj -DnbkKvbdpssgSSKt -DoCjjvbdssRryZdc -EPDKjvbdZisIQHCG -EOcKjvbdCIjajhfK -DoDKjvbdrafNMGjy -EObkKvbdgQBzwEXh -DnbjjvbdgQBzwDwh -DncKjvbdCEQAvKMf -EPCkKvbdiCOcFWpq -EPDLKvbdLFfHbBQu -EPCjjvbdJTYaSmXl -EPCjjvbdRjyFuGkT -DoCkKvbdjFKftoAO -DncKjvbdmaiwXoNu -DoCjjvbdVZITyjnn -DoDLKvbdDxYLtUTl -DnbjjvbdqvpLcJYq -EOcLKvbdlqxuZsDi -DoDKjvbdZshhyDsO -DoCjjvbdGFjSOIsq -DnbkKvbdcScKtEKB -EPCjjvbdMpXqVmfs -EPCjjvbduoTzpjoU -DoDLKvbdYkqctNkm -EObkKvbddoErjstS -DnbjjvbduLxWaUAw -DoCkKvbdRXODbkgc -DoCjjvbdwzIGFweS -DoCkKvbdZyEKOClS -EObjjvbdiGjCxvJu -EObkKvbdbiMijewY -DoDKjvbdqrVKmkBN -DoCkKvbdFyUuBEYC -DoDLKvbdNsTufduQ -DoDLKvbdEPCkKvcE -DoDLKvbdNQYRWNgT -DnbjjvbdNrtWGeUp -DoCjjvbdPxmAGrqj -EPDKjvbdKNAEZgVB -EPDKjvbdmttzKjSG -EPDKjvbdssSSxydc -DoCjjvbdTlWPAuni -EObjjvbdDHLegAzc -EObjjvbdXnRAXtvU -EObkKvbdKfFgaaQu -EOcKjvbdhtzFXSUb -EPCkKvbdJTZAsMwl -EOcKjvbdQYmAGsSK -DoCkKvbdjhHLeemk -EOcLKvbdiifIJmYS -EPDKjvbdLrWlzVQz -DoCjjvbdxsOIlrBg -EPDLKvbdNPxQvNfs -DnbkKvbdIGfyxwxH -DoCjjvbdjKFhKMwr -DnbjjvbddjKSVtzn -DoCjjvbdZoNiFEzK -EPCjjvbdeFOqavcK -DoDLKvbdEuxpQMie -EObjjvbdZjShQHCG -DoDLKvbdZMSDsmkm -DoDLKvbdGYtuBEYC -EPCjjvbdUaBprqRy -EOcLKvbdmozZWLZC -DncLKvbdUWLpKUBR -EPCjjvbdqYnhHQcx -DoDLKvbdUaBprpqy -EPDKjvbdrzMQSaHn -DnbjjvbdGdLWKCJj -EObkKvbdfILVrNqH -EPCjjvbdehKvRmqH -EPDKjvbdOSsvGeVQ -DncLKvbdxxJJaozL -EPCjjvbdZLqctNkm -EOcLKvbdZxcinCkr -DncLKvbdkWWmcbXw -DoDLKvbduCcVXWPP -DncLKvbdyTNhlqbH -DncKjvbdYTMAlsoY -DoCkKvbdRosfjFcw -EPDLKvbdDwxLsstM -EOcKjvbdlZTRryHU -DoCjjvbdNGbpMpVL -EOcLKvbdYgWdAOri -DoCjjvbdDxYLstTl -EObjjvbdIwtBglRQ -EOcKjvbdvPTzpkPU -DoCjjvbduLxXAtBX -DoCjjvbdiLeENuCy -DnbjjvbdUaCRSqRy -DnbjjvbdYpmEhleR -EObjjvbdsPvOjDWG -DoCkKvbdLFfICApu -DncKjvbddxZstRez -EPCkKvbdFyVVAdXb -DoCjjvbdFyVVBDxC -DoDLKvbdFeirNiTq -EPCjjvbdxnSgxTIc -EOcKjvbdAMgySwZx -EObkKvbdkyTRryHU -DoCkKvbdMRwMzUpz -DnbjjvbdCWzdJEov -DoCkKvbdUyITzLPO -EPCkKvbdcSbjsdKB -DoCkKvbdqceIonVa -DoCkKvbdjmCMZeGo -DncKjvbdfMewGljL -EObkKvbdpfEEtVaI -DoDLKvbdczZQYYqC -DoDLKvbdRNXbYmtz -EObjjvbdTvLojUBR -EPCkKvbdtbcVXWPP -DncLKvbdmSYuZrdJ -DoDLKvbdTukpKUBR -EPDLKvbdsQVoKCvG -EPDLKvbdBraCtFvr -EPDLKvbdZQmEiNEq -EPCjjvbdrzLosAgn -EPCjjvbdssRsZZdc -DncKjvbdbAudepQX -DncKjvbdcTDKscia -DncLKvbdlqyVZsEJ -EOcLKvbdbVCHXkTh -EObkKvbdYTMBMsnx -DnbjjvbdULvPAuoJ -DoCjjvbddtAUASlv -DoDKjvbdxUmEpxkn -DncKjvbdQwOEDLgc -DoCkKvbdSPsgKGDw -DncKjvbdiCOcFXQq -EPDKjvbdRkYfUfkT -EObkKvbdKCjDRJcY -DoCjjvbdZLqctOMN -EPCjjvbdUWLpKTaR -EPCjjvbdLqwMzVQz -DnbjjvbdnBivxPNu -EObkKvbdRpUHKFdX -EPCjjvbdeATqNXif -DoCjjvbdfILVrOQg -DoDKjvbdNrtVfeUp -EOcLKvbdNUrrKmAX -EPCjjvbdrbFllHLZ -DncKjvbdkDMLQgUg -DoCkKvbdVvhwvDeH -DnbjjvbdKeegaaRV -DoDKjvbdcJMjKfXY -DnbjjvbdZtJJYcrn -DoDLKvbdyqOliJwA -DoDLKvbdMgDPmPuL -DoCkKvbdHffzZXxH -DoCjjvbdZxdKNblS -EPDKjvbdkDLjqGtg -EPDKjvbdYzbeqjVy -DncLKvbdTppnttgm -EObkKvbdVYgtZjnn -EPCjjvbdzaAOgHCM -EOcKjvbdcyxoxZRC -EPDLKvbdxnSgxTJD -EObkKvbdfMfXHNJk -EPDKjvbdunszpjoU -EObkKvbdFfKRmhsq -EOcLKvbdhtydwRtb -DoDLKvbdYkrDsnLm -EPDLKvbdGGKSOItR -EPCkKvbduDCuXVno -EPDLKvbdrEFJQOVa -EPDLKvbdIjEAKQGd -EObjjvbdIryArmYM -DoDLKvbdYkqctOMN -EPCkKvbdiZtekqOG -DncKjvbdzdzOzeZp -DoDLKvbdbiNKLFwY -DnbkKvbdlhcsqUrB -DnbkKvbdKyRJrzuG -DoDKjvbdOFDtIiKd -DnbjjvbdvvlBWBVu -DnbkKvbdlrZUyrdJ -EObkKvbdxZgeewdr -DncKjvbdegkVrNpg -DoCjjvbdrJAJeNPF -EObjjvbdmfeXmOHZ -DoCjjvbdNPwqVmfs -DnbjjvbdnPzYvLZC -EPDKjvbdZshiYcrn -EOcLKvbdhgJcYvJu -DoDLKvbdXrlAmToY -DnbkKvbdwWlAvBVu -DnbkKvbdjvWnEBww -DoDLKvbdTYLLmzjx -EOcKjvbdDihJuxKA -DncLKvbdTfznLvue -DoCjjvbdVgwvXgYz -EObjjvbdsBfMkgKy -EPCjjvbdUaBqTQrZ -DnbjjvbdbhmJkGWx -EPCjjvbdLBLGmCYR -DoDKjvbdwjwEHzyf -EPDLKvbdegkVrNpg -DoCkKvbdJpzEnfOF -EPCkKvbdFejSOItR -DnbjjvbdTqQnuUhN -EOcLKvbdUMVoAvOi -EPCkKvbdSCEFLiZL -EPCkKvbdnCKXYPNu -EPDLKvbdZyEKNbkr -DncLKvbdZisIQGaf -EObjjvbdGLEsDHmV -DoCjjvbdBcpAujNG -EObjjvbdZRNFIleR -DnbjjvbdVrOXaeLc -EPCjjvbdHELViaij -EOcLKvbdqcdhpNvB -EPCkKvbdiZuFkqOG -DoCkKvbdOSsufeVQ -DoDLKvbduoTzpjnt -EOcLKvbdTqRPUuHm -DoDLKvbdCDpAuilf -EOcKjvbdZMSDsnMN -DoDLKvbdYqNFJMeR -DnbkKvbdbAvFFpPw -EOcKjvbdVqmwaeMD -EPCkKvbdUyHsyjnn -EPCjjvbdKeehBaQu -DoCjjvbdZshiYdTO -EObkKvbdTvMQJsaR -EPCjjvbdjblKqHUg -DnbkKvbdYlSDtOMN -EObkKvbdrWpMCiZR -EOcKjvbdUGzmlWue -DncKjvbdFyUuAcwb -EPCkKvbdLZQjSztf -EPCjjvbdfjfzbfAE -DncKjvbdFWZQQMie -DoCjjvbdVgxVxHYz -EOcKjvbdWWhxWEFH -DoDLKvbdUWLoitAq -DoDLKvbdzaAOffbM -EOcLKvbdrXPkbiYq -DoCkKvbdYzberKVy -DncLKvbdIMBznWpk -EPCkKvbdEPCkKwDE -DnbkKvbdWWiYVcdg -DoCkKvbdCWzchdpW -EOcLKvbdjvXNcbYX -EPDLKvbdSxLMNzjx -DnbjjvbdhficYuiu -DncLKvbdvmWAMdEm -EObjjvbduaDyTOdh -DncKjvbdwWlAvBWV -DoDKjvbdVviYWDeH -EOcKjvbdNsUWGdtp -DoCjjvbdzjVPodTU -EPCkKvbdmIcsptqa -EPDLKvbdIHHZxxYH -EPDLKvbdUyIUZkPO -EObkKvbdCDpBWJlf -EPDKjvbdWSNwaeMD -DoCjjvbdACrXjZhp -EPDLKvbdwuMdqYlO -DnbjjvbdHlBznWpk -DnbjjvbduaDyTPEh -DnbjjvbdwuNFRZLn -EObjjvbdajkfOnDA -DnbkKvbdWWiYWEEg -EPDLKvbdffLymgHA -EOcLKvbdkDMKpfuH -EPDLKvbdMoxQvOHT -DnbkKvbdbKkenmcA -DoCjjvbdhytfMRNf -DoCjjvbdIsZAsNXl -DoDKjvbdLiBkqYAS -DncLKvbdyzdmrHiI -DnbjjvbdemFvfmJk -EOcLKvbdSCEEkiYk -DoDKjvbdbiNKKevx -DoDLKvbdaaVdeoow -DnbjjvbdNGcQNPuL -DncLKvbdQYmAGrrK -EPDKjvbdrbGMkfjy -EPCjjvbdZjShPfbG -DnbjjvbdJmADyfuB -DnbjjvbdhtzFWquC -DnbjjvbdQvmdDMID -DncLKvbdjvWnEBww -EPCjjvbdxZgfGXdr -EObkKvbdDihKWXjA -EPCkKvbdZMSETnLm -EPDKjvbdZLqcsnMN -EObkKvbdqwPlDJZR -DoDKjvbdZisIQGaf -EObjjvbdjlalZeGo -DncKjvbdxsOJMqag -DoDKjvbdOFEUIhkE -DoCkKvbdzitoodSt -DncLKvbdVrNwaeMD -DoCjjvbdezuyEiTw -EPDKjvbdiCOcEvpq -DoCjjvbdvvlAvAvV -DnbjjvbdJuuFceHJ -DoCjjvbdlYrrSyGt -EPCkKvbdfILVrNqH -DoDLKvbdxsOJNRbH -DncKjvbdIwtBgkpp -DnbkKvbdOTUWHEtp -EPDKjvbdFejRnIsq -DnbjjvbdVBCRTQrZ -EPCjjvbdiMEcnUcZ -EObkKvbdiZuGMRNf -EOcKjvbdatbHYLTh -DoCkKvbdmSZVZrdJ -DoDKjvbdqTsgRqjt -DoDLKvbdCEQBWKNG -DnbjjvbdZtJJZESn -DncLKvbdIHGzZXwg -EPDLKvbdwtmFRZMO -DoCjjvbdKDJbqJcY -EObkKvbdatbHXkUI -DnbkKvbdYqNEhleR -EObjjvbdNHColotk -EPDKjvbdegkWSNpg -DoDLKvbdRjyFtfjs -DoCjjvbddoEsKtUS -EOcLKvbdsQWOjCvG -DoCkKvbdvAcxsOeI -EObjjvbdbAueGQQX -EOcLKvbdxKwEHzzG -DoDKjvbdqTtHSRkU -EOcKjvbdOAIsUKSA -EPCjjvbdWSNxCElD -EPDLKvbdnCKWwoNu -DncLKvbdEARiMzXX -DoCkKvbdbAvEeoow -EOcKjvbdhgJcYvJu -DnbjjvbdTulPisaR -DnbjjvbdIidAKQGd -EPDKjvbdyOTIXrhc -EPCkKvbdrbFmLgLZ -EPCjjvbddeOqbXDK -DncKjvbdRacdlJZL -EOcLKvbdbsDKtDjB -EPCjjvbdUyHtZkOn -EObkKvbdyTOImSBg -DncKjvbdtbbtwWPP -EPDKjvbdKDKDRJcY -EObjjvbdhanbeXQq -EOcLKvbdvvlAuaWV -EPDLKvbdVYgsyjoO -EPDLKvbdKaKflawq -EOcLKvbdCIjajiFj -EObkKvbdUsmUGMWK -EPDLKvbdIjEAJofd -EOcLKvbdqBJFAWhE -EPCkKvbdEJgivXjA -DnbkKvbdYkqdTmkm -EPCkKvbdliDsqUrB -EObjjvbdKVtfEEfi -EObkKvbdmgFYMmgZ -EObjjvbdEARhlyvw -DncKjvbdaRecHtGL -DnbjjvbdNQYRVmfs -EOcLKvbdFfKRnJTq -DncLKvbdMgDQNQUk -EObkKvbdHgGyyXwg -EPCkKvbdCJKbKiFj -EPCkKvbdBraDUGXS -EPDLKvbdiMEcnVCy -DoDLKvbdkCkkQfuH -EOcLKvbdwtmFRZLn -EPDKjvbdKefHbApu -DnbkKvbdkxrqsZGt -EPCkKvbdfIKvRmqH -EOcKjvbdDnbkLWbd -EPDLKvbdaRebhTek -DoDLKvbdjuwODaxX -DnbjjvbdREDBPpdS -DncLKvbdjuwNcaww -EOcKjvbdbiMjKevx -EPDKjvbdqvpLcIyR -EPCjjvbdijGIKMxS -EPDLKvbdQmYCZNtz -EObjjvbdCDpAvKMf -EOcLKvbdJJdAKPgE -DoDKjvbdUxgszLOn -DnbjjvbdOEcshhjd -DoCjjvbdUaCRSprZ -EPCkKvbdxmrhYTJD -EPDKjvbdICLydzAD -EPCjjvbdKRZdoFme -EObkKvbdNdctJIjd -EPCjjvbdKVuFdEgJ -EObjjvbdrXPlDIyR -DoCkKvbdfMewGmKL -DnbkKvbdIwsahMQp -EOcLKvbdRaceMIxk -EPCkKvbdcyxoxZQb -EObjjvbdRkYeuGkT -DncLKvbdbVBfwkTh -EObjjvbdTppoVUhN -EPCjjvbdhytfMROG -EOcKjvbdUxgszKoO -DoCjjvbdGLEsDHlu -EObkKvbdegkVqmqH -DncKjvbdkMbLyeGo -DncKjvbdyzdmqghh -EPCkKvbdGFiqnIsq -EPDKjvbdpstGqqjt -EPDKjvbdYkrDsmkm -EPCkKvbdKaLGlbXq -DoCkKvbdxwiJbPyk -EPCkKvbdJcKDQibx -EPCkKvbduDCuXWPP -DnbjjvbdiGicZWKV -DoCkKvbdsPunicWG -DnbjjvbdKNAEZgVB -EPDLKvbdnPyxujyC -EObkKvbdJXsagkpp -EObkKvbdNddUIiKd -DnbjjvbdQwOEClID -DnbkKvbdFVxpQMie -EPCkKvbdVrNxBeLc -EPCjjvbdUsmUGLuj -EPDLKvbdGZVVBDwb -DoCjjvbdmRyUyrdJ -DncKjvbddZxoxZQb -DnbjjvbdGKdsDINV -EObjjvbdrafNLgKy -DoCjjvbdJbjCqJbx -DnbjjvbdlYsSTYgU -DoCkKvbdQvnDblID -DoDKjvbdssSTYzFD -DncKjvbdmozZVkZC -EPDKjvbdjbkkRGuH -DoDLKvbdxmrgwriD -DoDKjvbdfHkVrORH -EPCkKvbdJuuFceHJ -DoDKjvbdcbSlrATm -EPCkKvbdeATpmXif -DncLKvbdBiKajhej -EPCkKvbdrNZixlIJ -EPDLKvbdKVteceGi -EObkKvbdzjVPodTU -DoDLKvbdWSNxCEkc -EOcKjvbdZxcimcLr -EOcKjvbdZnnIeEyj -DnbkKvbdmbKWxPOV -EPCkKvbdZLrETmkm -EPDKjvbdnUtyjiqf -DoCkKvbdrWpLcJZR -DoCkKvbdaMkCStmH -DncLKvbdFVxpQMie -EPCjjvbdrpWOicWG -EOcKjvbdyOTIYShc -EObkKvbdqrVLNkBN -EOcLKvbdQvnDbkhD -EOcLKvbdDigiuxKA -DncLKvbddoErkTtS -DoDKjvbdRWmdDLgc -EPCjjvbdiHKDZVjV -DnbkKvbdADSYKZiQ -DnbkKvbdsPunibuf -DoCjjvbdSPsfiedX -EPDKjvbdJmAEZfta -EOcKjvbdZMRcsnLm -DoCkKvbdiLddOUcZ -EObkKvbdqqtkOLAm -DoDLKvbdYpmFImFR -EObjjvbdVhYWXfxz -DnbjjvbdMowqWNfs -EObkKvbdVgwuwgYz -DoDKjvbdDxYLsssl -DnbjjvbdZtIiYcsO -DnbkKvbdxwiKBpZk -DoDKjvbdEuxpPmKF -EOcKjvbdJcKDRKCx -EObkKvbdUtNUFlWK -EOcKjvbdjhHLfFnL -DoCkKvbdSQTgKGDw -DncLKvbdQccBQRDr -DncLKvbdILazmwRL -DoDKjvbdYTMBNUPY -DoDLKvbdKaKfmCXq -EPCjjvbdkIHMGGOL -DnbjjvbdCIjbKhfK -DnbkKvbdVgwuwfxz -EPCjjvbdwtmFQxkn -EPDLKvbdcyyQYZRC -DoDKjvbdPyNAGsRj -EObjjvbdSLYetgLT -DoDLKvbdMRwNZuQz -DncKjvbdFjdrcHlu -DoCjjvbdZyDimbkr -DnbkKvbdRXNdClID -EObjjvbdEYYLtUTl -EObkKvbdVqmxBdlD -DoDLKvbdptTgRqkU -EOcLKvbdBdPaWKMf -EPCjjvbdiBncEvpq -DoDLKvbdzQoNJKXA -DoDKjvbdUQpoUtgm -DnbkKvbdrzLpTBHn -DoCjjvbdunszpkPU -EPDLKvbdSZjHsCvA -DncKjvbdRotHJfDw -DnbkKvbdFejSOItR -EOcKjvbdeFOrBwCj -DoDLKvbdkVwNdCXw -EPCkKvbdeOdrjtTr -EPCjjvbdhuZdwRuC -DnbkKvbdfILVqmqH -DncKjvbdnPzYvLYb -DncKjvbdHgGzZYXg -DncKjvbdkVwNcaxX -DoDLKvbdOAJSsjSA -DncKjvbdOFDtJIjd -EOcLKvbdVgwvYGxz -EObkKvbdsQVnjDWG -DoCjjvbdZjShQHCG -DncKjvbdzoPpeCkx -DoDLKvbdSLZFtfjs -DnbkKvbdBsBCtFvr -EOcLKvbdFyUuAcwb -DnbjjvbdqUTfqrKt -DoCjjvbdZxdJmcLr -DncLKvbdmbJwYPOV -EObjjvbdEObjkXDE -EOcKjvbdaSFcIUGL -EPCkKvbdqYoIHQcx -EOcKjvbdfNGWgMjL -DoCjjvbdbrcKtEKB -EPCkKvbdvBDxsOdh -DnbjjvbdtcCuXVoP -DnbjjvbdrpWPKDVf -EOcKjvbdwyhFfYFS -EPCjjvbdnPyyWLZC -EPDLKvbduMYXBUAw -DoDKjvbduaDySoFI -DoCjjvbdyXiKCPzL -DncLKvbdGFjSOIsq -DoDLKvbdeEoRbXDK -DncLKvbdcTCjtDia -DnbjjvbdnUuZjiqf -DnbjjvbdjlakzFHP -EOcLKvbdwWlBWAvV -DnbkKvbdWWiXuceH -EObkKvbdemGWfmKL -EObkKvbdmuUykJrG -DoCkKvbdmozYvKxb -DncKjvbdQZNAGsSK -EObjjvbdjblKpgUg -DncKjvbdSZigsDWA -EOcLKvbdZyEJmblS -DoCjjvbdnCJwYOmu -EPDKjvbdtkxWaTaX -EPDKjvbdGZUuAcwb -DoCkKvbdyfxlANEw -EPCkKvbdTAFJIBnd -DncKjvbdZLqctOMN -DncKjvbdUMWPBWPJ -EPCkKvbdDwwksstM -EPDKjvbdEObjjvbd -EObjjvbdWXJYWEEg -DnbjjvbdpaIeAXIE -DoCjjvbdqYoIHREY -DnbjjvbdvmWAMceN -EObkKvbdLFfHaaQu -EOcLKvbdpaIeAWgd -EPDLKvbdkCkkQgUg -DnbjjvbdePErkTtS -DnbkKvbdNGbomQVL -DoDLKvbdEPCjkWcE -DoCkKvbdehLWRnRH -EOcKjvbdyXhibQZk -EOcLKvbdZyEKOCkr -DoCjjvbdkDLkRGtg -DoDLKvbdkaNPNALA -EObkKvbdrWpLbiYq -DoDLKvbdfHkVqmqH -DoDLKvbdEOcLKwCd -DoDKjvbdrykpTBHn -DncKjvbdxZgefYFS -DnbkKvbdJpzFPFnF -DoCkKvbdNGcPmPtk -EPCjjvbdhzUelRNf -EObkKvbdVTltFlWK -DoCkKvbduaDxrneI -EObkKvbdSQTgJfEX -EOcKjvbdVhYVxHYz -EOcKjvbdkCkkQgUg -EObkKvbdqUUHSSLU -EOcLKvbduLwwAtAw -EPDKjvbdZLrETnMN -EObkKvbdmttyjjRf -DoDKjvbdYqMdiMdq -DoCkKvbdkNBkzEfo -DncKjvbdiLeDnUcZ -DoDKjvbdZLrDsnLm -EPCkKvbduVnYKRTA -EPCjjvbdCIkCLJFj -EPDKjvbdssRrxyeD -DncKjvbdQwOEClHc -EPCkKvbdwXLaWAuu -EPCkKvbdUyHszKoO -EPCkKvbdJYTagkqQ -DoCkKvbdwuNFRYlO -EPCjjvbdfHkWRmqH -EOcKjvbddeOqbXCj -EObkKvbdhficYujV -EPCkKvbdmSYtzTEJ -EPCjjvbdtkxWaTaX -EPDLKvbdwygfGYEr -EPDKjvbdmpZxvKyC -DoCjjvbdpstGrSLU -EPDKjvbdUtMtGLuj -EOcKjvbdjlbLzFGo -EObkKvbdkyTSTZGt -EOcLKvbdLYpjSzuG -EPDLKvbdyXhibQZk -DncKjvbdptUHSRkU -DnbjjvbdFfKRmhtR -DoCjjvbdtbcUwVoP -EPDKjvbdhyuFkpnG -EPDLKvbdFpASwHFy -EPCjjvbdRbDeLiYk -DncLKvbdXmqAYUut -EObjjvbdqlyjZLgi -DoCjjvbdssSTYydc -DnbkKvbdTIzJqABM -EPCkKvbdxsOJNRag -EPCjjvbdlhcspuSB -EObkKvbdqUTgSRjt -EOcKjvbdOEcshhkE -EObjjvbdzjUpPdTU -DnbkKvbdvwLaVaWV -EPCjjvbdmoyyVkYb -DoCkKvbdOFETiJKd -EPCjjvbdeEnqawCj -EObjjvbdmuUzKjRf -EPDLKvbdVvhxVdFH -EPCkKvbdaSGDHsek -EPCjjvbdkySrTZHU -EObjjvbdtAGqIABS -EObkKvbdZyEJmblS -DncKjvbdyTOJMrCH -DncLKvbdFWYoolie -DoDLKvbdTvMPjUAq -EObjjvbdZLqctOLm -DnbkKvbdmIctQuSB -DoCkKvbdZGvdAPTJ -DoCjjvbdkDMLRGuH -DoDLKvbdnVUykKSG -DoDKjvbdLGFhBaRV -DncLKvbdxwiKBozL -DncLKvbdWIYWXgYz -DncLKvbdFkFSbglu -DoDKjvbdIGgZxxXg -DnbjjvbdEztRFMDJ -DoDLKvbdZQldiNEq -EOcLKvbdwWkaWAvV -DoDKjvbdLBLHMawq -DoDLKvbdkMbLzFGo -EPDKjvbdREDAopcr -DoCkKvbdZoNiEdyj -EPDLKvbddneSkUUS -DnbkKvbdSQUHJecw -DoCjjvbdZshhxcrn -DnbjjvbdRkZFuHLT -EPDKjvbdwuNEqYkn -DoDLKvbdemGXGmJk -EOcLKvbdKWVGDeGi -DoCkKvbdWSOXadkc -EObjjvbdVTmTelWK -DncKjvbdhkeDmuDZ -EPCkKvbdRWnEDMID -DnbjjvbdNQYRVnGs -DnbkKvbdTfzmlWvF -DoCkKvbdFpASvgGZ -DoCjjvbdqTsfqqkU -EObkKvbdUVkpKUAq -DoDLKvbdrRtkNjaN -EPCkKvbdrJAKEmOe -DncKjvbdIGfyyYXg -DnbjjvbdZLrDtNkm -EObjjvbdiMEcmuCy -DncKjvbdkyTSTZHU -DncLKvbdBsAbtFvr -DnbkKvbdrpWPKDWG -DncKjvbdbBWFFoow -DoDLKvbdxmsIXsJD -DnbkKvbdehLWRnRH -EObkKvbdiVZeXRuC -DnbkKvbdOTUVfduQ -DncLKvbdZjTIQHCG -DoDLKvbdOSsugFVQ -DoCjjvbdrafNLgKy -EPDLKvbdNPxRVmgT -EPDKjvbdHlBznXQk -EPCkKvbdCEQBWKMf -EObjjvbdtcDUwWOo -DoCjjvbdZMSDtNlN -DoDLKvbdvAcxrneI -EObjjvbdIxUCILpp -EOcKjvbdfSBWzkbo -EObkKvbdShzKRAAl -DnbjjvbdGZUuBDxC -EObkKvbdqlzKYkhJ -EPDKjvbdZyEKNbkr -DoDLKvbdsrrTYzFD -DoCkKvbdfSAvzkcP -DnbjjvbdqlzKYlHi -EPDKjvbdYTLaNToY -EPCjjvbdjEjgUoAO -EOcKjvbdTJZjRABM -EObkKvbdYORAXtvU -DoDLKvbdGKdrcHmV -DoDLKvbdbrcLUEJa -DncLKvbdqvpLcJZR -DnbkKvbdFeiqnIsq -EPDKjvbdZnnIeEzK -EPCjjvbdnUtzLKRf -DoDLKvbdDxXlUUTl -DoDKjvbdiMEcnUby -EObkKvbdYzbeqjWZ -DncKjvbdTvLojUAq -EOcLKvbdjuvmdBxX -DnbjjvbdzoPpdcMY -DoDKjvbdrovOibuf -DoDKjvbdFWZPomJe -DoDKjvbdqGDeUWBI -DoCkKvbdWWiYVdEg -EObkKvbdtvOXiqTA -DnbjjvbdqZPIGpdY -EObkKvbdLBKgNCYR -DoCjjvbdLBKgNCYR -EObjjvbdZsiJZESn -DoCkKvbdTqROtuIN -EPCjjvbdyfyMAMdw -EOcLKvbdptTgSSLU -DncLKvbdPxmAHTSK -DnbjjvbdRkZFtfkT -EPDLKvbdtlXvaUAw -EPCkKvbdqBJFAWhE -EPCkKvbdIidAJogE -EPDLKvbdKQydoGOF -EObkKvbdauCGwkTh -EPCjjvbdNddUIiKd -DoDLKvbdFfKRmhsq -EPCkKvbdeEnqbXCj -EObkKvbdJvVGDdfi -DoDKjvbdWRmwaeLc -EObkKvbdSCDeLiZL -EPDKjvbdDoDLLWcE -EPDLKvbdiMEcnUby -DnbjjvbdLBLGmBxR -EPCjjvbdZnmiEdyj -EObjjvbdVhXuwgYz -DncLKvbdUtNTfMVj -EPDLKvbdKaKgMaxR -DncKjvbdJcJbpicY -DnbkKvbdSKyGVHLT -DoDKjvbdzROlhjXA -DnbkKvbdlrZUysEJ -DoCkKvbdnQZyWLYb -DoCjjvbdeFOqbWbj -EOcLKvbdjgfkfGOL -EObkKvbdiHJbyWKV -DnbkKvbdGdLVibJj -DoDKjvbdGLErcINV -EPCjjvbdNGcPlpUk -EOcKjvbdjFLGtoAO -EOcKjvbdsBfMlGkZ -EObjjvbdhtydvquC -DoCjjvbdznpRFCkx -DncLKvbdYSkaNUOx -DoCjjvbdVvhxVdFH -EPDLKvbdNeETiJLE -DoDKjvbdcScLTdJa -EOcLKvbdQwNdDLgc -DoDLKvbdUMWPBWPJ -DncKjvbdqFdEtVaI -EObjjvbdhbPCeXRR -DoCjjvbdKeehCApu -DncKjvbdYNqAXuVt -DoDLKvbdjmCLzFGo -DoCkKvbdtlXwBUAw -EObkKvbdwtmEqYlO -EObjjvbdrovOjCvG -EObkKvbdqrVLOLBN -DoCjjvbdSBcdkhxk -DncLKvbdrEEhomua -EObkKvbdtbbtvuno -EPDLKvbdZjShQGaf -EPCjjvbdTAFJHbPE -DnbjjvbdcScLTcia -EObkKvbdbsDLUDia -DnbkKvbdkyTSTYgU -DncKjvbdySmhmSCH -DoCjjvbdnBivxPNu -DncKjvbdEXxLtTtM -EObjjvbdZshhyESn -DoDKjvbdkMbLzEfo -EObjjvbdssRrxyeD -DoDKjvbdcSbkTdKB -EPDLKvbdHDjvJbKK -DncLKvbdsQVnjCvG -DnbjjvbdJSyBTMwl -EOcLKvbddZxpYYqC -EPCjjvbdrXQLcJZR -DoCkKvbdnHEwlmfy -EOcKjvbdGZUuBDwb -EObjjvbdvOszqKnt -EOcLKvbdRosgKFdX -EPCjjvbdMpXqWNfs -EPCkKvbdJbibqJcY -DncKjvbdJvVFdEgJ -EObkKvbdqwPkcIyR -DnbkKvbdDwxMUTtM -DncKjvbdtcDVXVno -EPDLKvbdlZSrSxft -DoCkKvbdKeehCApu -EPDLKvbdQlxCYmtz -EOcLKvbdYqNFJNFR -DoCkKvbdnCKWwoOV -EObjjvbdwzIFfYEr -EOcKjvbdkDMLQfuH -EPCjjvbdrSUjnLBN -EPCkKvbdTfznMXVe -EPCkKvbdZxdKNcMS -DoCjjvbdJXsaglRQ -DoCjjvbdNPwqWNgT -DoCjjvbdLqwMzUpz -EOcKjvbdCDoaWJlf -DnbjjvbdlYsRsZGt -DncKjvbdeOdsLUUS -EOcKjvbdEvZQPmJe -DoCkKvbdqBJFAXHd -DnbjjvbdtkwwBUBX -EObjjvbdLFfHaaQu -DoDLKvbdbLMFoNcA -EPDLKvbdiLdcnUby -DnbkKvbdUQqPVUgm -EOcLKvbdEOcLLXDE -DoDKjvbdrEEhpOWB -DncKjvbdkCkkQftg -DncLKvbdMfbpNQUk -DnbjjvbdTulQKUAq -DoDLKvbdUtNUFkvK -DncKjvbddndsKtTr -EPDKjvbdliDsqVSB -EPCkKvbdhbOcEvqR -DoCkKvbdqceJQNua -DoCkKvbdrWpLcIyR -DncKjvbdrSVLNkAm -DoDLKvbdyOShYTJD -DncKjvbdyYJKBoyk -DnbjjvbdZQldiNFR -EPDLKvbdePEsKstS -EPCjjvbdcScKtDia -DncLKvbdxsOJNRbH -EObjjvbdEYXlUUTl -DoCkKvbdxUldqZMO -EOcKjvbdRjxeuGkT -EOcLKvbdqrVLNjaN -DoCkKvbdDwwktUUM -EOcLKvbdZQmEiNFR -EPCkKvbdMSXMytpz -DnbkKvbdnUtzKiqf -DoCjjvbdREDAoqDr -EPCjjvbdZyDinDMS -EPCjjvbdiCPDEwRR -EPCkKvbdmSZUzSci -DoDKjvbdkWWmdCXw -DnbkKvbdmJDsqVRa -EPDKjvbdhzVGLpnG -DoCkKvbdsPuoKDWG -DoDLKvbdrylPsAgn -EPCjjvbdsPuoJbuf -EOcKjvbdrEFJQOVa -EPCjjvbdEPDLLXCd -DncKjvbdkVwOEBxX -EPCkKvbdqGEFUWAh -DncLKvbdtbcUvuno -EOcKjvbdWIYWYGxz -EPDLKvbdZLqcsmkm -DoDKjvbdmaivwnnV -DoCkKvbdOYPVzcmt -DoCjjvbdVwIwvDeH -DoCjjvbdYkrETmkm -DoDKjvbdLFfHbAqV -EObjjvbdkIHLefOL -EPDKjvbdZjShPfaf -DoCjjvbdehLWSORH -DncLKvbdKfFgbBQu -EObkKvbdsPunjDVf -DncKjvbdiMEdNuCy -DncKjvbdFfKSNhtR -EOcKjvbdFVxpQNKF -DncLKvbdfHkVrORH -EObjjvbdKefIBaQu -EPDKjvbduCbtvuoP -EPCkKvbdGdLWKCKK -DncLKvbdLAkGmBwq -DncLKvbdZshiZESn -DnbjjvbdySmhmSCH -DoDKjvbdACqxJyiQ -DncLKvbdmajXYOmu -DnbjjvbdxVNFRZMO -DnbjjvbdVqmxBdlD -DnbkKvbdIGgZyYXg -DncKjvbdddnrBvcK -EPCjjvbdUGzmkwVe -DncLKvbdaNLCTVNH -DoCkKvbdWWhwucdg -DncKjvbdkWWmcaxX -DoDKjvbdaRfChUGL -EPDLKvbdOEcsiJKd -DoDLKvbdGLFTChMu -EObjjvbdjmBkzFHP -DncLKvbdrWokcJYq -EObjjvbdDHMGHAzc -EObkKvbdRyjITCvA -DnbjjvbdWRnXbElD -DoCjjvbdEARiNZvw -DnbkKvbdRjyFtfjs -DoCkKvbdMgDQNQVL -DoDKjvbdCEPaWJmG -DoCkKvbdUtNTfLuj -DoDKjvbdNGcQMpVL -DoDKjvbdZQmFImEq -EObjjvbdyYIibPyk -DoDLKvbdcSbjtDjB -EPCjjvbdPxmAGsSK -EPCjjvbdnUuZjirG -EPCkKvbddijSVtzn -EOcKjvbdxUmEqYlO -EOcKjvbdxrmiNRag -EPCkKvbdjmBlZeHP -EOcKjvbdvBDySndh -EObjjvbdliDsqVSB -EOcKjvbdTvMQKUBR -DncLKvbdRNXbYnUz -DnbjjvbdyYIiaozL -DoCkKvbdhbPDEwRR -EPDKjvbdptUGrSLU -DoDKjvbdFjeTChMu -DnbkKvbdFVxoomJe -EObkKvbdlYrrSyGt -EPDLKvbdVZHszKnn -DncLKvbdDwwktUUM -DncLKvbdDnbkKvcE -EPCkKvbdjJfHjMwr -EPDKjvbdUtNTfMWK -EObjjvbdbhlikGWx -DncLKvbdKfFhCBQu -DoDKjvbdVgwvXgYz -EPDLKvbdiBoCdwRR -EPDLKvbdzdzOzeZp -EObkKvbdMoxRWNgT -EPDKjvbdjvXNdBww -EObkKvbdUtMsfLuj -EOcLKvbdnUuZjjRf -DnbkKvbduCbtwVoP -EPDLKvbdGGKRmhsq -EObkKvbdePEsLTtS -DoCjjvbdSKyGUgLT -EOcLKvbdRbDdlIyL -DoDLKvbdNxPVzcnU -EObjjvbdkCkkRGtg -DncKjvbdVTmUFkvK -DncKjvbdUsltFkuj -EPDKjvbdSCEElJZL -EOcKjvbdZxcjNcMS -DoCjjvbdEJgjWYKA -DncLKvbdREDBQRDr -DncKjvbddoErjtUS -EPDLKvbdADSYJyiQ -EPDKjvbdatafxKsh -EPDLKvbdkIGkeemk -DoDLKvbdmRxtzSci -DnbkKvbdTlWPAvPJ -DncKjvbdjJegjMwr -DoCkKvbdqTtHSSKt -EOcKjvbdkMakzFHP -DncLKvbddZyPwxpb -DnbkKvbdTppnuUgm -EObkKvbdnPyxukZC -DoDKjvbdbiNJjewY -EPDKjvbdJSyArlwl -EPDLKvbdvvlBVaVu -EOcLKvbdjJfIKMxS -EPDLKvbdliETqVRa -DoCkKvbdWXJXvEFH -DncLKvbdiHKDZWKV -EObkKvbdEXwktUUM -EOcKjvbdRWnDcMID -EPDLKvbdbhljKfWx -DnbkKvbdVTlsfMVj -DnbjjvbdZoOIdeZj -DoDKjvbdDxYLtUTl -EObjjvbdmIdTqUqa -EPCjjvbdiZtekqNf -DoDLKvbdMfcPmPtk -EPDLKvbdKxpirztf -DnbkKvbdEARhlzWw -EOcKjvbdqiAJeMne -DnbjjvbdUsltGMWK -DnbkKvbdMoxRWNfs -EPCjjvbdTqQntuIN -EPDKjvbdLFfHbApu -EOcLKvbdANIZSwZx -DoCjjvbdSLZGUfjs -DoDLKvbdJSyArlxM -EOcLKvbddZxoxZRC -DoDLKvbdRpTfjFcw -EObjjvbdKefHbBRV -EPCkKvbdjlakyeGo -DoDLKvbdiBncFXRR -EObkKvbdkHfkefOL -DnbjjvbdfILVrORH -DnbjjvbdbsDKtDia -DoCjjvbdqiAKElne -EObkKvbdEXxMTtUM -DncKjvbdHfgZxxXg -EPDKjvbdQvnDcMID -DoDKjvbdCSaCsewS -DncLKvbdSZigsDWA -DnbkKvbdiUyeXSUb -DnbkKvbdZRNFJMeR -EPDKjvbdDxXlTstM -EPCjjvbdkNBlZdfo -DnbkKvbdhuZdvqtb -DncLKvbdHDkWJajK -EOcKjvbdhficZWKV -DoDLKvbdxwiKCPyk -EPDLKvbdZQleJMeR -DoDLKvbdLrXMytpz -DncKjvbdcTCjtEJa -DnbkKvbdUMVnaWPJ -DoCjjvbdnBjXYPOV -EObjjvbduWNwjQsA -DoCjjvbdRpUHJecw -DnbkKvbdJYUBglQp -EOcLKvbduoTzqKoU -EObjjvbdZMRctNlN -EObkKvbdziuPpESt -DoDLKvbduLxWaTaX -EOcLKvbdhgKDZWKV -DnbkKvbdZQldhmFR -EOcLKvbdcyyPxZQb -EOcKjvbdRWnDcLgc -DncLKvbdxZgfFweS -EPCkKvbdyqOliJwA -DnbjjvbdsPvPKCuf -DoCjjvbdMgCpNQVL -DncLKvbdOEdTiJKd -EPDKjvbdEARiMyvw -EOcLKvbdJbibqKDY -DoCkKvbdeEnrCWbj -DoCkKvbdGKdrcIMu -DnbkKvbdUMWOaVoJ -DoCkKvbdKaKgNCXq -DnbkKvbdoAKztHdO -EPDKjvbdDxXlUUTl -EOcLKvbdFVxoomJe -EOcKjvbdpyPHfpdY -EPCjjvbdxwiJaoyk -DoCkKvbdlqxtyrci -EOcKjvbdfHkWRmpg -DoCjjvbdkMalZdfo -EPCjjvbdJpyePGOF -DncLKvbdqUUHRqjt -DoDLKvbdziuQPdSt -DoDKjvbdBhjajiGK -EPDKjvbdjcLjpftg -EPDKjvbdVwJYWEFH -DnbjjvbdNdcsiJLE -DoCjjvbdQwODcLgc -EOcLKvbdtkxXAtAw -EPDKjvbdwMvANEEm -DoCjjvbdqFdEsuaI -EObjjvbdrSUjmjaN -DoDLKvbdnGeYMnGy -EOcLKvbdPyNAHTSK -DnbkKvbdMowpvNgT -DoCjjvbdGdLVibKK -DoDLKvbdtcDVXVno -EObkKvbdtlXwBUAw -DoCjjvbdSPsgKGEX -EPCjjvbdURQntuHm -DncLKvbdrMyjZLgi -EPDKjvbdwXMAvBVu -EOcLKvbdRjxfUfkT -DnbkKvbdGFjRnJTq -DoCkKvbdbUbHYLTh -EPDKjvbdoznEKxPA -EPCjjvbdLiBlQxAS -DncKjvbdfVzxPizs -DnbjjvbdSKyFtgLT -EPDKjvbdrXPlCiZR -DncLKvbdhzVGLpnG -EObjjvbdVwJYVdFH -EPDKjvbdwXLaWBVu -EPCjjvbdjhHMGFmk -EObkKvbdKyQjSzuG -DoCjjvbdmfeYNOHZ -DoDLKvbdZirgofaf -EOcLKvbdZoOIdeZj -EPCkKvbdLFfHbApu -EPCkKvbdjvWnEBww -DoDKjvbdcScLUEKB -DoCkKvbdkCkjqHUg -DoDKjvbdyTNhmSBg -DoCkKvbdkHgLfFnL -EPCjjvbdzoQQdcLx -DoCjjvbdOTTvHEtp -EPCkKvbdznopeDLx -EPCkKvbdGFjRmhtR -EPCkKvbdUaCQrpqy -EOcKjvbdnGeXmOHZ -DoDKjvbdiCPDEwRR -DoCjjvbdRbEFLiYk -DncKjvbdRXOECkgc -EPCjjvbdKWUedEgJ -DncKjvbdDjIJvYKA -DoDKjvbdyTOJNRbH -DoCjjvbdePFTKtTr -DoDKjvbdhtyeWrVC -EPCkKvbdqvolCiZR -DoDLKvbdapHHELzd -EObjjvbdlhdUQtrB -EOcKjvbdptUGrRkU -EPCjjvbdqUTfqrLU -EPCkKvbdcJMikGWx -DoDKjvbdlhctRVRa -EOcLKvbdANHyTXZx -EPDKjvbdpssfqrKt -EPCkKvbdFeiqnJTq -DoCkKvbdxZgfGXdr -EOcLKvbdRWmcblHc -DncLKvbdjggMFemk -DoDKjvbdKeegbBQu diff --git a/hotspot/test/runtime/7158804/Test7158804.sh b/hotspot/test/runtime/7158804/Test7158804.sh new file mode 100644 index 00000000000..bce5197dfbe --- /dev/null +++ b/hotspot/test/runtime/7158804/Test7158804.sh @@ -0,0 +1,30 @@ +#!/bin/sh +# +# Copyright (c) 2012 Oracle and/or its affiliates. All rights reserved. +# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. +# + +## +## @test Test7158804.sh +## @bug 7158804 +## @summary Improve config file parsing +## @run shell Test7158804.sh +## + +if [ "${TESTJAVA}" = "" ] +then + echo "TESTJAVA not set. Test cannot execute. Failed." + exit 1 +fi +echo "TESTJAVA=${TESTJAVA}" + +rm -f .hotspotrc +echo -XX:+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa >.hotspotrc +${TESTJAVA}/bin/java ${TESTVMOPTS} -XX:+IgnoreUnrecognizedVMOptions -XX:Flags=.hotspotrc -version +if [ $? -ne 0 ] +then + echo "Test Failed" + exit 1 +fi +rm -f .hotspotrc +exit 0 diff --git a/jaxp/.hgtags b/jaxp/.hgtags index 5c329132e45..38c1f7d7db2 100644 --- a/jaxp/.hgtags +++ b/jaxp/.hgtags @@ -183,3 +183,5 @@ f19d63b2119a0092f016203981ffef5cc31bc3c5 jdk8-b56 af9e8b0f1900b631a8a0fcccff9f1514fe58c808 jdk8-b59 2d1dff5310daaf226421a8c92823cb8afcf35f31 jdk8-b60 6b1db0b41d2f6e2a7b3bdbc8a8db823b47752906 jdk8-b61 +5d0fa0108d028c05753a47bcf2a598357dabf0c0 jdk8-b62 +192d8a244bc36427757866e9fb3a08938c0e674c jdk8-b63 diff --git a/jaxp/makefiles/BuildJaxp.gmk b/jaxp/makefiles/BuildJaxp.gmk new file mode 100644 index 00000000000..85649849f2b --- /dev/null +++ b/jaxp/makefiles/BuildJaxp.gmk @@ -0,0 +1,61 @@ +# +# Copyright (c) 2007, 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. 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. +# + +# This must be the first rule +default: all + +-include $(SPEC) +include MakeBase.gmk +include JavaCompilation.gmk + +JAVAC_JARS ?= "-Xbootclasspath/p:$(LANGTOOLS_OUTPUTDIR)/dist/bootstrap/lib/javac.jar" \ + -jar $(LANGTOOLS_OUTPUTDIR)/dist/bootstrap/lib/javac.jar +DISABLE_JAXP_WARNINGS:=-Xlint:all,-deprecation,-unchecked,-rawtypes,-cast,-serial,-dep-ann,-static,-fallthrough + +# The generate new bytecode uses the new compiler for to generate bytecode +# for the new jdk that is being built. The code compiled by this setup +# cannot necessarily be run with the boot jdk. +$(eval $(call SetupJavaCompiler,GENERATE_NEWBYTECODE_DEBUG,\ + JVM:=$(JAVA),\ + JAVAC:=$(JAVAC_JARS),\ + FLAGS:=-XDignore.symbol.file=true $(DISABLE_JAXP_WARNINGS) -g,\ + SERVER_DIR:=$(SJAVAC_SERVER_DIR),\ + SERVER_JVM:=$(SJAVAC_SERVER_JAVA))) + +$(eval $(call SetupJavaCompilation,BUILD_JAXP,\ + SETUP:=GENERATE_NEWBYTECODE_DEBUG,\ + SRC:=$(JAXP_TOPDIR)/src,\ + CLEAN:=.properties,\ + BIN:=$(JAXP_OUTPUTDIR)/classes,\ + SRCZIP:=$(JAXP_OUTPUTDIR)/dist/lib/src.zip)) + +$(eval $(call SetupArchive,ARCHIVE_JAXP,$(BUILD_JAXP),\ + SRCS:=$(JAXP_OUTPUTDIR)/classes,\ + SUFFIXES:=.class .properties,\ + JAR:=$(JAXP_OUTPUTDIR)/dist/lib/classes.jar)) + +all: $(JAXP_OUTPUTDIR)/dist/lib/classes.jar $(JAXP_OUTPUTDIR)/dist/lib/src.zip + +.PHONY: default all diff --git a/jaxp/makefiles/Makefile b/jaxp/makefiles/Makefile index 85649849f2b..9539fe0e255 100644 --- a/jaxp/makefiles/Makefile +++ b/jaxp/makefiles/Makefile @@ -1,5 +1,5 @@ # -# Copyright (c) 2007, 2012, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 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 @@ -23,39 +23,27 @@ # questions. # -# This must be the first rule -default: all +# Locate this Makefile +ifeq ($(filter /%,$(lastword $(MAKEFILE_LIST))),) + makefile_path:=$(CURDIR)/$(lastword $(MAKEFILE_LIST)) +else + makefile_path:=$(lastword $(MAKEFILE_LIST)) +endif +repo_dir:=$(patsubst %/makefiles/Makefile,%,$(makefile_path)) --include $(SPEC) -include MakeBase.gmk -include JavaCompilation.gmk +# What is the name of this subsystem (langtools, corba, etc)? +subsystem_name:=$(notdir $(repo_dir)) -JAVAC_JARS ?= "-Xbootclasspath/p:$(LANGTOOLS_OUTPUTDIR)/dist/bootstrap/lib/javac.jar" \ - -jar $(LANGTOOLS_OUTPUTDIR)/dist/bootstrap/lib/javac.jar -DISABLE_JAXP_WARNINGS:=-Xlint:all,-deprecation,-unchecked,-rawtypes,-cast,-serial,-dep-ann,-static,-fallthrough +# Try to locate top-level makefile +top_level_makefile:=$(repo_dir)/../common/makefiles/Makefile +ifneq ($(wildcard $(top_level_makefile)),) + $(info Will run $(subsystem_name) target on top-level Makefile) + $(info WARNING: This is a non-recommended way of building!) + $(info ===================================================) +else + $(info Cannot locate top-level Makefile. Is this repo not checked out as part of a complete forest?) + $(error Build from top-level Makefile instead) +endif -# The generate new bytecode uses the new compiler for to generate bytecode -# for the new jdk that is being built. The code compiled by this setup -# cannot necessarily be run with the boot jdk. -$(eval $(call SetupJavaCompiler,GENERATE_NEWBYTECODE_DEBUG,\ - JVM:=$(JAVA),\ - JAVAC:=$(JAVAC_JARS),\ - FLAGS:=-XDignore.symbol.file=true $(DISABLE_JAXP_WARNINGS) -g,\ - SERVER_DIR:=$(SJAVAC_SERVER_DIR),\ - SERVER_JVM:=$(SJAVAC_SERVER_JAVA))) - -$(eval $(call SetupJavaCompilation,BUILD_JAXP,\ - SETUP:=GENERATE_NEWBYTECODE_DEBUG,\ - SRC:=$(JAXP_TOPDIR)/src,\ - CLEAN:=.properties,\ - BIN:=$(JAXP_OUTPUTDIR)/classes,\ - SRCZIP:=$(JAXP_OUTPUTDIR)/dist/lib/src.zip)) - -$(eval $(call SetupArchive,ARCHIVE_JAXP,$(BUILD_JAXP),\ - SRCS:=$(JAXP_OUTPUTDIR)/classes,\ - SUFFIXES:=.class .properties,\ - JAR:=$(JAXP_OUTPUTDIR)/dist/lib/classes.jar)) - -all: $(JAXP_OUTPUTDIR)/dist/lib/classes.jar $(JAXP_OUTPUTDIR)/dist/lib/src.zip - -.PHONY: default all +all: + @$(MAKE) -f $(top_level_makefile) $(subsystem_name) diff --git a/jaxp/src/com/sun/org/apache/xerces/internal/impl/XMLDocumentFragmentScannerImpl.java b/jaxp/src/com/sun/org/apache/xerces/internal/impl/XMLDocumentFragmentScannerImpl.java index d6680eceb05..8a2b5948c3f 100644 --- a/jaxp/src/com/sun/org/apache/xerces/internal/impl/XMLDocumentFragmentScannerImpl.java +++ b/jaxp/src/com/sun/org/apache/xerces/internal/impl/XMLDocumentFragmentScannerImpl.java @@ -806,6 +806,7 @@ public class XMLDocumentFragmentScannerImpl * where the entity encoding is not auto-detected (e.g. * internal entities or a document entity that is * parsed from a java.io.Reader). + * @param augs Additional information that may include infoset augmentations * * @throws XNIException Thrown by handler to signal an error. */ @@ -833,7 +834,7 @@ public class XMLDocumentFragmentScannerImpl // call handler if (fDocumentHandler != null && !fScanningAttribute) { if (!name.equals("[xml]")) { - fDocumentHandler.startGeneralEntity(name, identifier, encoding, null); + fDocumentHandler.startGeneralEntity(name, identifier, encoding, augs); } } @@ -845,6 +846,7 @@ public class XMLDocumentFragmentScannerImpl * are just specified by their name. * * @param name The name of the entity. + * @param augs Additional information that may include infoset augmentations * * @throws XNIException Thrown by handler to signal an error. */ @@ -869,7 +871,7 @@ public class XMLDocumentFragmentScannerImpl // call handler if (fDocumentHandler != null && !fScanningAttribute) { if (!name.equals("[xml]")) { - fDocumentHandler.endGeneralEntity(name, null); + fDocumentHandler.endGeneralEntity(name, augs); } } diff --git a/jaxws/.hgtags b/jaxws/.hgtags index 7d6a6df637a..bc75165561c 100644 --- a/jaxws/.hgtags +++ b/jaxws/.hgtags @@ -183,3 +183,5 @@ cac4c393706343df778a13dc6c84cad0f8c237c9 jdk8-b58 ae107401be116f9e384d3a23192f543828e03da5 jdk8-b59 5c5a65ad5291b7cefcdc308f627cf2b195cf2b69 jdk8-b60 97e5e74e2a341d9142ce28043912a3c255e28e03 jdk8-b61 +d265b9b4c0f55c23a1c9fda02a8052fd9df2eec5 jdk8-b62 +86989f702267debe16d13720d5ae7ae9839796f4 jdk8-b63 diff --git a/jaxws/makefiles/BuildJaxws.gmk b/jaxws/makefiles/BuildJaxws.gmk new file mode 100644 index 00000000000..a745ec8041e --- /dev/null +++ b/jaxws/makefiles/BuildJaxws.gmk @@ -0,0 +1,92 @@ +# +# Copyright (c) 2007, 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. 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. +# + +# This must be the first rule +default: all + +include $(SPEC) +include MakeBase.gmk +include JavaCompilation.gmk + +JAVAC_JARS ?= -Xbootclasspath/p:$(LANGTOOLS_OUTPUTDIR)/dist/bootstrap/lib/javac.jar \ + -jar $(LANGTOOLS_OUTPUTDIR)/dist/bootstrap/lib/javac.jar +DISABLE_JAXWS_WARNINGS:=-Xlint:all,-varargs,-rawtypes,-deprecation,-unchecked,-serial,-dep-ann,-cast,-fallthrough,-static + +# The generate new bytecode uses the new compiler for to generate bytecode +# for the new jdk that is being built. The code compiled by this setup +# cannot necessarily be run with the boot jdk. +$(eval $(call SetupJavaCompiler,GENERATE_NEWBYTECODE_DEBUG,\ + JVM:=$(JAVA),\ + JAVAC:=$(JAVAC_JARS),\ + FLAGS:=-XDignore.symbol.file=true $(DISABLE_JAXWS_WARNINGS) -g,\ + SERVER_DIR:=$(SJAVAC_SERVER_DIR),\ + SERVER_JVM:=$(SJAVAC_SERVER_JAVA))) + +# Dummy here is needed to trigger copying of META-INF +$(eval $(call SetupJavaCompilation,BUILD_JAF,\ + SETUP:=GENERATE_NEWBYTECODE_DEBUG,\ + SRC:=$(JAXWS_TOPDIR)/src/share/jaf_classes,\ + CLEAN:=.properties,\ + COPY:="dummy",\ + BIN:=$(JAXWS_OUTPUTDIR)/jaf_classes)) + +$(eval $(call SetupJavaCompilation,BUILD_JAXWS,\ + SETUP:=GENERATE_NEWBYTECODE_DEBUG,\ + SRC:=$(JAXWS_TOPDIR)/src/share/jaxws_classes,\ + CLEAN:=.properties,\ + BIN:=$(JAXWS_OUTPUTDIR)/jaxws_classes,\ + COPY:=.xsd,\ + COPY_FILES:=$(JAXWS_TOPDIR)/src/share/jaxws_classes/com/sun/tools/internal/xjc/runtime/JAXBContextFactory.java \ + $(JAXWS_TOPDIR)/src/share/jaxws_classes/com/sun/tools/internal/xjc/runtime/ZeroOneBooleanAdapter.java,\ + ADD_JAVAC_FLAGS=-cp $(OUTPUT_ROOT)/jaxp/dist/lib/classes.jar)) + +$(JAXWS_OUTPUTDIR)/jaxws_classes/META-INF/services/com.sun.tools.internal.ws.wscompile.Plugin: \ + $(JAXWS_TOPDIR)/src/share/jaxws_classes/com/sun/tools/etc/META-INF/services/com.sun.tools.internal.ws.wscompile.Plugin + mkdir -p $(@D) + cp $< $@ + +$(JAXWS_OUTPUTDIR)/jaxws_classes/META-INF/services/com.sun.tools.internal.xjc.Plugin: \ + $(JAXWS_TOPDIR)/src/share/jaxws_classes/com/sun/tools/etc/META-INF/services/com.sun.tools.internal.xjc.Plugin + mkdir -p $(@D) + cp $< $@ + +# There are two META-INF services files that are needed, add these to the list of goals +BUILD_JAXWS += $(JAXWS_OUTPUTDIR)/jaxws_classes/META-INF/services/com.sun.tools.internal.ws.wscompile.Plugin \ + $(JAXWS_OUTPUTDIR)/jaxws_classes/META-INF/services/com.sun.tools.internal.xjc.Plugin + +$(eval $(call SetupArchive,ARCHIVE_JAXWS,$(BUILD_JAXWS) $(BUILD_JAF),\ + SRCS:=$(JAXWS_OUTPUTDIR)/jaxws_classes $(JAXWS_OUTPUTDIR)/jaf_classes,\ + SUFFIXES:=.class .properties .xsd .java \ + com.sun.mirror.apt.AnnotationProcessorFactory \ + com.sun.tools.internal.xjc.Plugin,\ + JAR:=$(JAXWS_OUTPUTDIR)/dist/lib/classes.jar)) + +$(eval $(call SetupZipArchive,ZIP_JAXWS_SOURCES,\ + SRC:=$(JAXWS_TOPDIR)/src/share/jaf_classes $(JAXWS_TOPDIR)/src/share/jaxws_classes,\ + ZIP:=$(JAXWS_OUTPUTDIR)/dist/lib/src.zip)) + +all: $(JAXWS_OUTPUTDIR)/dist/lib/classes.jar $(JAXWS_OUTPUTDIR)/dist/lib/src.zip + +.PHONY: default all diff --git a/jaxws/makefiles/Makefile b/jaxws/makefiles/Makefile index a745ec8041e..9539fe0e255 100644 --- a/jaxws/makefiles/Makefile +++ b/jaxws/makefiles/Makefile @@ -1,5 +1,5 @@ # -# Copyright (c) 2007, 2012, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 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 @@ -23,70 +23,27 @@ # questions. # -# This must be the first rule -default: all +# Locate this Makefile +ifeq ($(filter /%,$(lastword $(MAKEFILE_LIST))),) + makefile_path:=$(CURDIR)/$(lastword $(MAKEFILE_LIST)) +else + makefile_path:=$(lastword $(MAKEFILE_LIST)) +endif +repo_dir:=$(patsubst %/makefiles/Makefile,%,$(makefile_path)) -include $(SPEC) -include MakeBase.gmk -include JavaCompilation.gmk +# What is the name of this subsystem (langtools, corba, etc)? +subsystem_name:=$(notdir $(repo_dir)) -JAVAC_JARS ?= -Xbootclasspath/p:$(LANGTOOLS_OUTPUTDIR)/dist/bootstrap/lib/javac.jar \ - -jar $(LANGTOOLS_OUTPUTDIR)/dist/bootstrap/lib/javac.jar -DISABLE_JAXWS_WARNINGS:=-Xlint:all,-varargs,-rawtypes,-deprecation,-unchecked,-serial,-dep-ann,-cast,-fallthrough,-static +# Try to locate top-level makefile +top_level_makefile:=$(repo_dir)/../common/makefiles/Makefile +ifneq ($(wildcard $(top_level_makefile)),) + $(info Will run $(subsystem_name) target on top-level Makefile) + $(info WARNING: This is a non-recommended way of building!) + $(info ===================================================) +else + $(info Cannot locate top-level Makefile. Is this repo not checked out as part of a complete forest?) + $(error Build from top-level Makefile instead) +endif -# The generate new bytecode uses the new compiler for to generate bytecode -# for the new jdk that is being built. The code compiled by this setup -# cannot necessarily be run with the boot jdk. -$(eval $(call SetupJavaCompiler,GENERATE_NEWBYTECODE_DEBUG,\ - JVM:=$(JAVA),\ - JAVAC:=$(JAVAC_JARS),\ - FLAGS:=-XDignore.symbol.file=true $(DISABLE_JAXWS_WARNINGS) -g,\ - SERVER_DIR:=$(SJAVAC_SERVER_DIR),\ - SERVER_JVM:=$(SJAVAC_SERVER_JAVA))) - -# Dummy here is needed to trigger copying of META-INF -$(eval $(call SetupJavaCompilation,BUILD_JAF,\ - SETUP:=GENERATE_NEWBYTECODE_DEBUG,\ - SRC:=$(JAXWS_TOPDIR)/src/share/jaf_classes,\ - CLEAN:=.properties,\ - COPY:="dummy",\ - BIN:=$(JAXWS_OUTPUTDIR)/jaf_classes)) - -$(eval $(call SetupJavaCompilation,BUILD_JAXWS,\ - SETUP:=GENERATE_NEWBYTECODE_DEBUG,\ - SRC:=$(JAXWS_TOPDIR)/src/share/jaxws_classes,\ - CLEAN:=.properties,\ - BIN:=$(JAXWS_OUTPUTDIR)/jaxws_classes,\ - COPY:=.xsd,\ - COPY_FILES:=$(JAXWS_TOPDIR)/src/share/jaxws_classes/com/sun/tools/internal/xjc/runtime/JAXBContextFactory.java \ - $(JAXWS_TOPDIR)/src/share/jaxws_classes/com/sun/tools/internal/xjc/runtime/ZeroOneBooleanAdapter.java,\ - ADD_JAVAC_FLAGS=-cp $(OUTPUT_ROOT)/jaxp/dist/lib/classes.jar)) - -$(JAXWS_OUTPUTDIR)/jaxws_classes/META-INF/services/com.sun.tools.internal.ws.wscompile.Plugin: \ - $(JAXWS_TOPDIR)/src/share/jaxws_classes/com/sun/tools/etc/META-INF/services/com.sun.tools.internal.ws.wscompile.Plugin - mkdir -p $(@D) - cp $< $@ - -$(JAXWS_OUTPUTDIR)/jaxws_classes/META-INF/services/com.sun.tools.internal.xjc.Plugin: \ - $(JAXWS_TOPDIR)/src/share/jaxws_classes/com/sun/tools/etc/META-INF/services/com.sun.tools.internal.xjc.Plugin - mkdir -p $(@D) - cp $< $@ - -# There are two META-INF services files that are needed, add these to the list of goals -BUILD_JAXWS += $(JAXWS_OUTPUTDIR)/jaxws_classes/META-INF/services/com.sun.tools.internal.ws.wscompile.Plugin \ - $(JAXWS_OUTPUTDIR)/jaxws_classes/META-INF/services/com.sun.tools.internal.xjc.Plugin - -$(eval $(call SetupArchive,ARCHIVE_JAXWS,$(BUILD_JAXWS) $(BUILD_JAF),\ - SRCS:=$(JAXWS_OUTPUTDIR)/jaxws_classes $(JAXWS_OUTPUTDIR)/jaf_classes,\ - SUFFIXES:=.class .properties .xsd .java \ - com.sun.mirror.apt.AnnotationProcessorFactory \ - com.sun.tools.internal.xjc.Plugin,\ - JAR:=$(JAXWS_OUTPUTDIR)/dist/lib/classes.jar)) - -$(eval $(call SetupZipArchive,ZIP_JAXWS_SOURCES,\ - SRC:=$(JAXWS_TOPDIR)/src/share/jaf_classes $(JAXWS_TOPDIR)/src/share/jaxws_classes,\ - ZIP:=$(JAXWS_OUTPUTDIR)/dist/lib/src.zip)) - -all: $(JAXWS_OUTPUTDIR)/dist/lib/classes.jar $(JAXWS_OUTPUTDIR)/dist/lib/src.zip - -.PHONY: default all +all: + @$(MAKE) -f $(top_level_makefile) $(subsystem_name) diff --git a/jdk/.hgtags b/jdk/.hgtags index c0a4c320b0f..0bdb92a90b7 100644 --- a/jdk/.hgtags +++ b/jdk/.hgtags @@ -183,3 +183,5 @@ d94613ac03d8de375ef60493e2bb76dbd30d875d jdk8-b58 abad1f417bd3df4296631fc943cd3b7f5062c88a jdk8-b59 cec8fa02f15634acd7d02d04b0b2d8c044cdbaaa jdk8-b60 61ddb3fd000a09ab05bff1940b0ac211661e94cf jdk8-b61 +50b8b17449d200c66bfd68fb4f3a9197432c9e2b jdk8-b62 +f117a3e06f78a258074674ad17601f99bcb1ce0d jdk8-b63 diff --git a/jdk/THIRD_PARTY_README b/jdk/THIRD_PARTY_README index 759733bfceb..6dc1b331638 100644 --- a/jdk/THIRD_PARTY_README +++ b/jdk/THIRD_PARTY_README @@ -2,11 +2,11 @@ DO NOT TRANSLATE OR LOCALIZE. ----------------------------- %% This notice is provided with respect to ASM Bytecode Manipulation -Framework v3.1, which is included with JRE 7, JDK 7, and OpenJDK 7. +Framework v4.0, which is included with JRE 8, and JDK 8. --- begin of LICENSE --- -Copyright (c) 2000-2005 INRIA, France Telecom +Copyright (c) 2000-2011 France Télécom All rights reserved. Redistribution and use in source and binary forms, with or without diff --git a/jdk/make/Makefile b/jdk/make/Makefile index 2e5032d0f15..ceb1492bb4e 100644 --- a/jdk/make/Makefile +++ b/jdk/make/Makefile @@ -233,7 +233,7 @@ import_product: all build:: sanity-all post-sanity-all -SUBDIRS = tools java javax sun com +SUBDIRS = tools java javax sun com jdk ifeq ($(PLATFORM), macosx) SUBDIRS += apple endif diff --git a/jdk/make/apple/Makefile b/jdk/make/apple/Makefile index 4dd03dd50eb..aa60f86d35b 100644 --- a/jdk/make/apple/Makefile +++ b/jdk/make/apple/Makefile @@ -1,5 +1,5 @@ # -# Copyright (c) 2011, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2011, 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 diff --git a/jdk/make/apple/applescript/Makefile b/jdk/make/apple/applescript/Makefile index 6d0bc798c38..a9a2a3d8c42 100644 --- a/jdk/make/apple/applescript/Makefile +++ b/jdk/make/apple/applescript/Makefile @@ -1,5 +1,5 @@ # -# Copyright (c) 2011, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2011, 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 diff --git a/jdk/make/com/Makefile b/jdk/make/com/Makefile index 6f45213d2c7..ab6a499657e 100644 --- a/jdk/make/com/Makefile +++ b/jdk/make/com/Makefile @@ -1,5 +1,5 @@ # -# Copyright (c) 1997, 2010, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 1997, 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 diff --git a/jdk/make/com/apple/Makefile b/jdk/make/com/apple/Makefile index c336c610990..b961f28c533 100644 --- a/jdk/make/com/apple/Makefile +++ b/jdk/make/com/apple/Makefile @@ -1,5 +1,5 @@ # -# Copyright (c) 1997, 2010, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 1997, 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 diff --git a/jdk/make/com/apple/osx/Makefile b/jdk/make/com/apple/osx/Makefile index bf0ef9c99dc..a98b9222da6 100644 --- a/jdk/make/com/apple/osx/Makefile +++ b/jdk/make/com/apple/osx/Makefile @@ -1,5 +1,5 @@ # -# Copyright (c) 1997, 2011, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 1997, 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 diff --git a/jdk/make/com/apple/osxui/Makefile b/jdk/make/com/apple/osxui/Makefile index 0970061d1f7..286cbe0df68 100644 --- a/jdk/make/com/apple/osxui/Makefile +++ b/jdk/make/com/apple/osxui/Makefile @@ -1,5 +1,5 @@ # -# Copyright (c) 1997, 2011, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 1997, 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 diff --git a/jdk/make/com/oracle/jfr/Makefile b/jdk/make/com/oracle/jfr/Makefile index 5fd5e53039f..23332615f6f 100644 --- a/jdk/make/com/oracle/jfr/Makefile +++ b/jdk/make/com/oracle/jfr/Makefile @@ -1,5 +1,5 @@ # -# Copyright (c) 2011, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2011, 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 diff --git a/jdk/make/com/oracle/security/ucrypto/Makefile b/jdk/make/com/oracle/security/ucrypto/Makefile index f6545e89828..f779bf47170 100644 --- a/jdk/make/com/oracle/security/ucrypto/Makefile +++ b/jdk/make/com/oracle/security/ucrypto/Makefile @@ -198,9 +198,9 @@ ifndef OPENJDK # # Build ucrypto.jar. # - $(UNSIGNED_DIR)/ucrypto.jar: build + $(UNSIGNED_DIR)/ucrypto.jar: build $(JCE_MANIFEST_FILE) $(prep-target) - $(BOOT_JAR_CMD) cf $@ $(JAR_DIRS) \ + $(BOOT_JAR_CMD) cmf $(JCE_MANIFEST_FILE) $@ $(JAR_DIRS) \ $(BOOT_JAR_JFLAGS) @$(java-vm-cleanup) diff --git a/jdk/make/com/sun/Makefile b/jdk/make/com/sun/Makefile index 7c436af52d1..8b9d9dbe25b 100644 --- a/jdk/make/com/sun/Makefile +++ b/jdk/make/com/sun/Makefile @@ -1,5 +1,5 @@ # -# Copyright (c) 1997, 2011, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 1997, 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 diff --git a/jdk/make/com/sun/demo/jvmti/hprof/Makefile b/jdk/make/com/sun/demo/jvmti/hprof/Makefile index 7611541e7c4..c9006b06047 100644 --- a/jdk/make/com/sun/demo/jvmti/hprof/Makefile +++ b/jdk/make/com/sun/demo/jvmti/hprof/Makefile @@ -1,5 +1,5 @@ # -# Copyright (c) 2004, 2005, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2004, 2011, Oracle and/or its affiliates. All rights reserved. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions diff --git a/jdk/make/com/sun/java/browser/net/Makefile b/jdk/make/com/sun/java/browser/net/Makefile index b2f55fcc72e..6e281dd82d2 100644 --- a/jdk/make/com/sun/java/browser/net/Makefile +++ b/jdk/make/com/sun/java/browser/net/Makefile @@ -1,5 +1,5 @@ # -# Copyright (c) 2001, 2005, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2001, 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 diff --git a/jdk/make/com/sun/java/pack/Makefile b/jdk/make/com/sun/java/pack/Makefile index e8c256d3e9b..d51a142c778 100644 --- a/jdk/make/com/sun/java/pack/Makefile +++ b/jdk/make/com/sun/java/pack/Makefile @@ -1,5 +1,5 @@ # -# Copyright (c) 2003, 2011, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2003, 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 diff --git a/jdk/make/com/sun/net/ssl/Makefile b/jdk/make/com/sun/net/ssl/Makefile index b5c291ec2e6..47539d742e6 100644 --- a/jdk/make/com/sun/net/ssl/Makefile +++ b/jdk/make/com/sun/net/ssl/Makefile @@ -1,5 +1,5 @@ # -# Copyright (c) 2007, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2007, 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 diff --git a/jdk/make/com/sun/nio/Makefile b/jdk/make/com/sun/nio/Makefile index ebca563122c..6fccab2b8dd 100644 --- a/jdk/make/com/sun/nio/Makefile +++ b/jdk/make/com/sun/nio/Makefile @@ -1,5 +1,5 @@ # -# Copyright (c) 2009, 2011, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2009, 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 diff --git a/jdk/make/com/sun/nio/sctp/Exportedfiles.gmk b/jdk/make/com/sun/nio/sctp/Exportedfiles.gmk index f2f6970a827..f8ec6fb0960 100644 --- a/jdk/make/com/sun/nio/sctp/Exportedfiles.gmk +++ b/jdk/make/com/sun/nio/sctp/Exportedfiles.gmk @@ -1,5 +1,5 @@ # -# Copyright (c) 2009, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2009, 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 diff --git a/jdk/make/com/sun/nio/sctp/FILES_java.gmk b/jdk/make/com/sun/nio/sctp/FILES_java.gmk index 667af33277b..aa59a78b0c7 100644 --- a/jdk/make/com/sun/nio/sctp/FILES_java.gmk +++ b/jdk/make/com/sun/nio/sctp/FILES_java.gmk @@ -1,5 +1,5 @@ # -# Copyright (c) 2009, 2010, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2009, 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 diff --git a/jdk/make/com/sun/nio/sctp/Makefile b/jdk/make/com/sun/nio/sctp/Makefile index 158077b78d1..47fcfa8d5eb 100644 --- a/jdk/make/com/sun/nio/sctp/Makefile +++ b/jdk/make/com/sun/nio/sctp/Makefile @@ -1,5 +1,5 @@ # -# Copyright (c) 2009, 2011, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2009, 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 diff --git a/jdk/make/com/sun/nio/sctp/mapfile-vers b/jdk/make/com/sun/nio/sctp/mapfile-vers index ceb27dab972..4cd4c06e472 100644 --- a/jdk/make/com/sun/nio/sctp/mapfile-vers +++ b/jdk/make/com/sun/nio/sctp/mapfile-vers @@ -1,5 +1,5 @@ # -# Copyright (c) 2009, 2010, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2009, 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 diff --git a/jdk/make/com/sun/security/auth/module/Makefile b/jdk/make/com/sun/security/auth/module/Makefile index e6957124b56..7a2343b4d6f 100644 --- a/jdk/make/com/sun/security/auth/module/Makefile +++ b/jdk/make/com/sun/security/auth/module/Makefile @@ -1,5 +1,5 @@ # -# Copyright (c) 2000, 2011, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2000, 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 diff --git a/jdk/make/com/sun/tools/Makefile b/jdk/make/com/sun/tools/Makefile index 8f824ef924a..85f2b288e9e 100644 --- a/jdk/make/com/sun/tools/Makefile +++ b/jdk/make/com/sun/tools/Makefile @@ -1,5 +1,5 @@ # -# Copyright (c) 2003, 2010, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2003, 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 diff --git a/jdk/make/com/sun/tools/attach/Exportedfiles.gmk b/jdk/make/com/sun/tools/attach/Exportedfiles.gmk index 8852c76e6b7..915786d4c9f 100644 --- a/jdk/make/com/sun/tools/attach/Exportedfiles.gmk +++ b/jdk/make/com/sun/tools/attach/Exportedfiles.gmk @@ -1,5 +1,5 @@ # -# Copyright (c) 2005, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2005, 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 diff --git a/jdk/make/com/sun/tools/attach/FILES_c.gmk b/jdk/make/com/sun/tools/attach/FILES_c.gmk index 8a5baec0994..4684731eb3b 100644 --- a/jdk/make/com/sun/tools/attach/FILES_c.gmk +++ b/jdk/make/com/sun/tools/attach/FILES_c.gmk @@ -1,5 +1,5 @@ # -# Copyright (c) 2005, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2005, 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 diff --git a/jdk/make/com/sun/tools/attach/FILES_java.gmk b/jdk/make/com/sun/tools/attach/FILES_java.gmk index 6e11f8c6224..ac18cc29946 100644 --- a/jdk/make/com/sun/tools/attach/FILES_java.gmk +++ b/jdk/make/com/sun/tools/attach/FILES_java.gmk @@ -1,5 +1,5 @@ # -# Copyright (c) 2005, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2005, 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 diff --git a/jdk/make/com/sun/tools/attach/mapfile-bsd b/jdk/make/com/sun/tools/attach/mapfile-bsd index 86515d535a1..9d82d9ca456 100644 --- a/jdk/make/com/sun/tools/attach/mapfile-bsd +++ b/jdk/make/com/sun/tools/attach/mapfile-bsd @@ -1,5 +1,5 @@ # -# Copyright (c) 2005, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2005, 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 diff --git a/jdk/make/com/sun/tracing/Makefile b/jdk/make/com/sun/tracing/Makefile index f9aa28c23d4..f00ab69b9cd 100644 --- a/jdk/make/com/sun/tracing/Makefile +++ b/jdk/make/com/sun/tracing/Makefile @@ -1,5 +1,5 @@ # -# Copyright (c) 2008, 2010, Oracle and/or its affiliates. All rights reserved. +# 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 diff --git a/jdk/make/com/sun/tracing/dtrace/Makefile b/jdk/make/com/sun/tracing/dtrace/Makefile index 5abe7395a8a..1a036eba941 100644 --- a/jdk/make/com/sun/tracing/dtrace/Makefile +++ b/jdk/make/com/sun/tracing/dtrace/Makefile @@ -1,5 +1,5 @@ # -# Copyright (c) 2008, Oracle and/or its affiliates. All rights reserved. +# 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 diff --git a/jdk/make/common/Demo.gmk b/jdk/make/common/Demo.gmk index 9163cf76513..90bcf9a5be7 100644 --- a/jdk/make/common/Demo.gmk +++ b/jdk/make/common/Demo.gmk @@ -1,5 +1,5 @@ # -# Copyright (c) 2004, 2011, Oracle and/or its affiliates. All rights reserved. +# 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 diff --git a/jdk/make/common/Mapfile-vers.gmk b/jdk/make/common/Mapfile-vers.gmk index 15c8ccd519a..67ac0cd61b7 100644 --- a/jdk/make/common/Mapfile-vers.gmk +++ b/jdk/make/common/Mapfile-vers.gmk @@ -1,5 +1,5 @@ # -# Copyright (c) 1998, 2005, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 1998, 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 diff --git a/jdk/make/common/Release-macosx.gmk b/jdk/make/common/Release-macosx.gmk index f56370f3ca1..be29f78944e 100644 --- a/jdk/make/common/Release-macosx.gmk +++ b/jdk/make/common/Release-macosx.gmk @@ -1,5 +1,5 @@ # -# Copyright (c) 2011, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2011, 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 diff --git a/jdk/make/common/Release.gmk b/jdk/make/common/Release.gmk index 2f2b1693384..15aa7c96c6c 100644 --- a/jdk/make/common/Release.gmk +++ b/jdk/make/common/Release.gmk @@ -348,15 +348,15 @@ TOOLS = \ sun/tools/serialver \ sun/tools/tree \ sun/tools/util \ - sun/security/tools/JarBASE64Encoder.class \ - sun/security/tools/JarSigner.class \ - sun/security/tools/JarSignerParameters.class \ - sun/security/tools/JarSignerResources.class \ - sun/security/tools/JarSignerResources_ja.class \ - sun/security/tools/JarSignerResources_zh_CN.class \ - sun/security/tools/SignatureFile\$$Block.class \ - sun/security/tools/SignatureFile.class \ - sun/security/tools/TimestampedSigner.class \ + sun/security/tools/jarsigner/JarBASE64Encoder.class \ + sun/security/tools/jarsigner/Main.class \ + sun/security/tools/jarsigner/JarSignerParameters.class \ + sun/security/tools/jarsigner/Resources.class \ + sun/security/tools/jarsigner/Resources_ja.class \ + sun/security/tools/jarsigner/Resources_zh_CN.class \ + sun/security/tools/jarsigner/SignatureFile\$$Block.class \ + sun/security/tools/jarsigner/SignatureFile.class \ + sun/security/tools/jarsigner/TimestampedSigner.class \ sun/rmi/rmic \ sun/applet \ sun/jvmstat \ @@ -572,15 +572,15 @@ $(NOT_RT_JAR_LIST): FRC $(ECHO) "sun/tools/serialver/" >> $@ $(ECHO) "sun/tools/tree/" >> $@ $(ECHO) "sun/tools/util/" >> $@ - $(ECHO) "sun/security/tools/JarBASE64Encoder.class" >> $@ - $(ECHO) "sun/security/tools/JarSigner.class" >> $@ - $(ECHO) "sun/security/tools/JarSignerParameters.class" >> $@ - $(ECHO) "sun/security/tools/JarSignerResources.class" >> $@ - $(ECHO) "sun/security/tools/JarSignerResources_ja.class" >> $@ - $(ECHO) "sun/security/tools/JarSignerResources_zh_CN.class" >> $@ - $(ECHO) "sun/security/tools/SignatureFile\$$Block.class" >> $@ - $(ECHO) "sun/security/tools/SignatureFile.class" >> $@ - $(ECHO) "sun/security/tools/TimestampedSigner.class" >> $@ + $(ECHO) "sun/security/tools/jarsigner/JarBASE64Encoder.class" >> $@ + $(ECHO) "sun/security/tools/jarsigner/Main.class" >> $@ + $(ECHO) "sun/security/tools/jarsigner/JarSignerParameters.class" >> $@ + $(ECHO) "sun/security/tools/jarsigner/Resources.class" >> $@ + $(ECHO) "sun/security/tools/jarsigner/Resources_ja.class" >> $@ + $(ECHO) "sun/security/tools/jarsigner/Resources_zh_CN.class" >> $@ + $(ECHO) "sun/security/tools/jarsigner/SignatureFile\$$Block.class" >> $@ + $(ECHO) "sun/security/tools/jarsigner/SignatureFile.class" >> $@ + $(ECHO) "sun/security/tools/jarsigner/TimestampedSigner.class" >> $@ $(ECHO) "sun/security/provider/Sun.class" >> $@ $(ECHO) "sun/security/rsa/SunRsaSign.class" >> $@ $(ECHO) "sun/security/ssl/" >> $@ diff --git a/jdk/make/common/Rules.gmk b/jdk/make/common/Rules.gmk index 6da2f505062..4136a5dff3c 100644 --- a/jdk/make/common/Rules.gmk +++ b/jdk/make/common/Rules.gmk @@ -1,5 +1,5 @@ # -# Copyright (c) 1995, 2008, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 1995, 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 diff --git a/jdk/make/common/Sanity.gmk b/jdk/make/common/Sanity.gmk index 27fe5bdfa16..25f5fa7bfe8 100644 --- a/jdk/make/common/Sanity.gmk +++ b/jdk/make/common/Sanity.gmk @@ -1,5 +1,5 @@ # -# Copyright (c) 2001, 2011, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2001, 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 @@ -64,7 +64,6 @@ sanity-base: pre-sanity \ sane-math_iso \ sane-libCrun \ sane-unixccs_path \ - sane-odbcdir \ sane-msdevtools_path \ sane-dxsdk \ sane-compiler \ diff --git a/jdk/make/common/internal/Defs-jaxws.gmk b/jdk/make/common/internal/Defs-jaxws.gmk index f0ba12b292a..8424551876b 100644 --- a/jdk/make/common/internal/Defs-jaxws.gmk +++ b/jdk/make/common/internal/Defs-jaxws.gmk @@ -1,5 +1,5 @@ # -# Copyright (c) 1997, 2011, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 1997, 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 @@ -34,6 +34,10 @@ IMPORT_RT_PACKAGES += \ javax/xml/ws \ javax/jws \ javax/annotation \ + com/sun/org/glassfish \ + com/sun/istack/internal \ + com/sun/istack/internal/localization \ + com/sun/istack/internal/logging \ com/sun/xml/internal/bind \ com/sun/xml/internal/fastinfoset \ com/sun/xml/internal/messaging \ diff --git a/jdk/make/common/internal/NativeCompileRules.gmk b/jdk/make/common/internal/NativeCompileRules.gmk index 5379ef3c289..e6569da5c6a 100644 --- a/jdk/make/common/internal/NativeCompileRules.gmk +++ b/jdk/make/common/internal/NativeCompileRules.gmk @@ -1,5 +1,5 @@ # -# Copyright (c) 1995, 2007, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 1995, 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 diff --git a/jdk/make/common/internal/Resources.gmk b/jdk/make/common/internal/Resources.gmk index fccfe273c63..bae72bce8a1 100644 --- a/jdk/make/common/internal/Resources.gmk +++ b/jdk/make/common/internal/Resources.gmk @@ -1,5 +1,5 @@ # -# Copyright (c) 1997, 2010, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 1997, 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 diff --git a/jdk/make/common/shared/Compiler-gcc.gmk b/jdk/make/common/shared/Compiler-gcc.gmk index 9dde0bae387..023faf6cf2c 100644 --- a/jdk/make/common/shared/Compiler-gcc.gmk +++ b/jdk/make/common/shared/Compiler-gcc.gmk @@ -1,5 +1,5 @@ # -# Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2005, 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 diff --git a/jdk/make/common/shared/Compiler-llvm.gmk b/jdk/make/common/shared/Compiler-llvm.gmk index 0b26a08cd24..606a061b5f8 100644 --- a/jdk/make/common/shared/Compiler-llvm.gmk +++ b/jdk/make/common/shared/Compiler-llvm.gmk @@ -1,5 +1,5 @@ # -# Copyright (c) 2011, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2011, 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 diff --git a/jdk/make/common/shared/Compiler-sun.gmk b/jdk/make/common/shared/Compiler-sun.gmk index fc0e9df6e3a..c9181dccdf4 100644 --- a/jdk/make/common/shared/Compiler-sun.gmk +++ b/jdk/make/common/shared/Compiler-sun.gmk @@ -1,5 +1,5 @@ # -# Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2005, 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 diff --git a/jdk/make/common/shared/Defs-linux.gmk b/jdk/make/common/shared/Defs-linux.gmk index 32388050d42..722ff0c7b40 100644 --- a/jdk/make/common/shared/Defs-linux.gmk +++ b/jdk/make/common/shared/Defs-linux.gmk @@ -1,5 +1,5 @@ # -# Copyright (c) 2005, 2011, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2005, 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 diff --git a/jdk/make/common/shared/Defs-macosx.gmk b/jdk/make/common/shared/Defs-macosx.gmk index 1bd9b92b5f1..e858344fdd0 100644 --- a/jdk/make/common/shared/Defs-macosx.gmk +++ b/jdk/make/common/shared/Defs-macosx.gmk @@ -1,5 +1,5 @@ # -# Copyright (c) 2005, 2011, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2005, 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 diff --git a/jdk/make/common/shared/Defs-solaris.gmk b/jdk/make/common/shared/Defs-solaris.gmk index ec1dd148f13..4bbc5b77a8c 100644 --- a/jdk/make/common/shared/Defs-solaris.gmk +++ b/jdk/make/common/shared/Defs-solaris.gmk @@ -1,5 +1,5 @@ # -# Copyright (c) 2005, 2011, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2005, 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 @@ -206,13 +206,12 @@ MAPFILE_WARNING=$(MAPFILE_WARNING-$(VARIANT)) # libjdgaSUNWffb.so # libjdgaSUNWm64.so # libxinerama.so -# The library libJdbcOdbc.so has also been given an exception. # The JNI/JVMTI demo libraries are also missing mapfiles, no exceptions yet. ifeq ($(ARCH_FAMILY),sparc) MAPFILE_EXCEPTIONS = \ - (libJdbcOdbc|libjdgaSUNWafb|libjdgaSUNWcg6|libjdgaSUNWffb|libjdgaSUNWm64|libxinerama) + (libjdgaSUNWafb|libjdgaSUNWcg6|libjdgaSUNWffb|libjdgaSUNWm64|libxinerama) else - MAPFILE_EXCEPTIONS = (libJdbcOdbc) + MAPFILE_EXCEPTIONS = () endif # Macro to check it's input file for banned dependencies and verify the diff --git a/jdk/make/common/shared/Defs-utils.gmk b/jdk/make/common/shared/Defs-utils.gmk index 573f7ccaa80..2d3104ddcbb 100644 --- a/jdk/make/common/shared/Defs-utils.gmk +++ b/jdk/make/common/shared/Defs-utils.gmk @@ -1,5 +1,5 @@ # -# Copyright (c) 2005, 2011, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2005, 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 diff --git a/jdk/make/common/shared/Defs-versions.gmk b/jdk/make/common/shared/Defs-versions.gmk index fba70370ba2..8a60563c122 100644 --- a/jdk/make/common/shared/Defs-versions.gmk +++ b/jdk/make/common/shared/Defs-versions.gmk @@ -1,5 +1,5 @@ # -# Copyright (c) 2009, 2011, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2009, 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 diff --git a/jdk/make/common/shared/Defs-windows.gmk b/jdk/make/common/shared/Defs-windows.gmk index c4ccdbca4ea..36424056f23 100644 --- a/jdk/make/common/shared/Defs-windows.gmk +++ b/jdk/make/common/shared/Defs-windows.gmk @@ -1,5 +1,5 @@ # -# Copyright (c) 2005, 2011, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2005, 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 diff --git a/jdk/make/common/shared/Defs.gmk b/jdk/make/common/shared/Defs.gmk index f88b41c6bb5..37bd371aaaa 100644 --- a/jdk/make/common/shared/Defs.gmk +++ b/jdk/make/common/shared/Defs.gmk @@ -1,5 +1,5 @@ # -# Copyright (c) 2005, 2011, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2005, 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 diff --git a/jdk/make/common/shared/Sanity-Settings.gmk b/jdk/make/common/shared/Sanity-Settings.gmk index b6b0fdcf19d..ea32eeadcaa 100644 --- a/jdk/make/common/shared/Sanity-Settings.gmk +++ b/jdk/make/common/shared/Sanity-Settings.gmk @@ -1,5 +1,5 @@ # -# Copyright (c) 2005, 2011, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2005, 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 diff --git a/jdk/make/common/shared/Sanity.gmk b/jdk/make/common/shared/Sanity.gmk index 845418bcecc..c73a3b755d6 100644 --- a/jdk/make/common/shared/Sanity.gmk +++ b/jdk/make/common/shared/Sanity.gmk @@ -208,7 +208,6 @@ include $(JDK_MAKE_SHARED_DIR)/Sanity-Settings.gmk sane-docs_import \ sane-math_iso \ sane-libCrun \ - sane-odbcdir \ sane-msdevtools_path \ sane-hotspot_binaries \ sane-hotspot_import \ diff --git a/jdk/make/docs/CORE_PKGS.gmk b/jdk/make/docs/CORE_PKGS.gmk index e292869f951..cdef9ebbc97 100644 --- a/jdk/make/docs/CORE_PKGS.gmk +++ b/jdk/make/docs/CORE_PKGS.gmk @@ -1,5 +1,5 @@ # -# Copyright (c) 2001, 2011, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2001, 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 diff --git a/jdk/make/java/Makefile b/jdk/make/java/Makefile index 664861aeceb..67f735fcb1d 100644 --- a/jdk/make/java/Makefile +++ b/jdk/make/java/Makefile @@ -1,5 +1,5 @@ # -# Copyright (c) 1995, 2011, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 1995, 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 diff --git a/jdk/make/java/awt/Makefile b/jdk/make/java/awt/Makefile index 2bc9e76a943..20b5774ea3a 100644 --- a/jdk/make/java/awt/Makefile +++ b/jdk/make/java/awt/Makefile @@ -1,5 +1,5 @@ # -# Copyright (c) 1995, 2011, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 1995, 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 diff --git a/jdk/make/java/fdlibm/FILES_c.gmk b/jdk/make/java/fdlibm/FILES_c.gmk index cc7a1ad06d1..667242433a8 100644 --- a/jdk/make/java/fdlibm/FILES_c.gmk +++ b/jdk/make/java/fdlibm/FILES_c.gmk @@ -1,5 +1,5 @@ # -# Copyright (c) 1998, 2002, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 1998, 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 diff --git a/jdk/make/java/java/Exportedfiles.gmk b/jdk/make/java/java/Exportedfiles.gmk index 3a7c8b3ff10..f6d3c3ae1de 100644 --- a/jdk/make/java/java/Exportedfiles.gmk +++ b/jdk/make/java/java/Exportedfiles.gmk @@ -1,5 +1,5 @@ # -# Copyright (c) 1997, 2006, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 1997, 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 @@ -66,6 +66,7 @@ FILES_export = \ java/util/prefs/FileSystemPreferences.java \ java/io/Console.java \ java/io/FileDescriptor.java \ + java/io/DefaultFileSystem.java \ java/io/InputStream.java \ java/io/FileInputStream.java \ java/io/FileOutputStream.java \ @@ -142,6 +143,7 @@ FILES_export = \ java/io/Console.java \ java/io/FileSystem.java \ java/io/FileDescriptor.java \ + java/io/DefaultFileSystem.java \ java/io/InputStream.java \ java/io/FileInputStream.java \ java/io/FileOutputStream.java \ diff --git a/jdk/make/java/java/FILES_c.gmk b/jdk/make/java/java/FILES_c.gmk index be698cd70b0..aa48464771b 100644 --- a/jdk/make/java/java/FILES_c.gmk +++ b/jdk/make/java/java/FILES_c.gmk @@ -1,5 +1,5 @@ # -# Copyright (c) 1996, 2006, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 1996, 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 @@ -32,7 +32,6 @@ FILES_c = \ Compiler.c \ Console_md.c \ Double.c \ - FileSystem_md.c \ FileDescriptor_md.c \ FileInputStream.c \ FileInputStream_md.c \ diff --git a/jdk/make/java/java/FILES_java.gmk b/jdk/make/java/java/FILES_java.gmk index efbf73b744d..246acf3e3aa 100644 --- a/jdk/make/java/java/FILES_java.gmk +++ b/jdk/make/java/java/FILES_java.gmk @@ -1,5 +1,5 @@ # -# Copyright (c) 1996, 2011, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 1996, 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 @@ -438,6 +438,7 @@ JAVA_JAVA_java = \ java/io/File.java \ java/io/FileSystem.java \ java/io/FileDescriptor.java \ + java/io/DefaultFileSystem.java \ java/io/FilenameFilter.java \ java/io/FileFilter.java \ java/io/FilePermission.java \ diff --git a/jdk/make/java/java/Makefile b/jdk/make/java/java/Makefile index 6693a8224b7..b2d1c5ab091 100644 --- a/jdk/make/java/java/Makefile +++ b/jdk/make/java/java/Makefile @@ -1,5 +1,5 @@ # -# Copyright (c) 1997, 2011, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 1997, 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 @@ -64,13 +64,11 @@ include FILES_java.gmk include Exportedfiles.gmk ifeq ($(PLATFORM),windows) -FILES_java += java/io/Win32FileSystem.java \ - java/io/WinNTFileSystem.java \ +FILES_java += java/io/WinNTFileSystem.java \ java/util/prefs/WindowsPreferences.java \ java/util/prefs/WindowsPreferencesFactory.java FILES_c += ProcessImpl_md.c \ - Win32FileSystem_md.c \ WinNTFileSystem_md.c \ canonicalize_md.c \ dirent_md.c \ diff --git a/jdk/make/java/java/genlocales.gmk b/jdk/make/java/java/genlocales.gmk index d08fa1abe13..6d35b8e734d 100644 --- a/jdk/make/java/java/genlocales.gmk +++ b/jdk/make/java/java/genlocales.gmk @@ -1,5 +1,5 @@ # -# Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2005, 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 @@ -38,31 +38,31 @@ FILES_compiled_properties_orig := $(FILES_compiled_properties) # only FILES_java and FILES_compiled_properties variables will be picked up # # $(BUILDDIR)/java/util/FILES_java.gmk & $(BUILDDIR)/java/util/FILES_properties.gmk -# contain "sun.util.resources" for European language support +# contain "sun.util.resources" for US language support include $(BUILDDIR)/java/util/FILES_java.gmk include $(BUILDDIR)/java/util/FILES_properties.gmk -Euro_Resources_java := $(FILES_java) -Euro_Resources_properties := $(FILES_compiled_properties) +US_Resources_java := $(FILES_java) +US_Resources_properties := $(FILES_compiled_properties) # $(BUILDDIR)/java/text/FILES_java.gmk contains the "sun.text.resources" for -# European language support +# US language support include $(BUILDDIR)/java/text/base/FILES_java.gmk -Euro_Resources_java += $(FILES_java) +US_Resources_java += $(FILES_java) FILES_compiled_properties= # $(BUILDDIR)/sun/text/FILES_java.gmk & $(BUILDDIR)/sun/text/FILES_properties.gmk -# contain both resources for Non-European language support +# contain both resources for Non-US language support include $(BUILDDIR)/sun/text/FILES_java.gmk include $(BUILDDIR)/sun/text/FILES_properties.gmk -NonEuro_Resources_java := $(FILES_java) -NonEuro_Resources_properties := $(FILES_compiled_properties) +NonUS_Resources_java := $(FILES_java) +NonUS_Resources_properties := $(FILES_compiled_properties) # Restore the orignal FILES_java & FILES_compiled_properties variables FILES_java := $(FILES_java_orig) @@ -80,30 +80,30 @@ RESOURCE_NAMES="FormatData CollationData TimeZoneNames LocaleNames CurrencyNames ifeq ($(PLATFORM), macosx) $(LocaleDataMetaInfo_Dest):$(LocaleDataMetaInfo_Src) $(LOCALEGEN_SH) - @$(RM) $@.tmp.euro $@.tmp.noneuro; + @$(RM) $@.tmp.us $@.tmp.nonus; @$(prep-target) - @$(ECHO) $(Euro_Resources_properties) | $(NAWK) 'gsub(/.properties/,"\n") {print}' > $@.tmp.euro; - @$(ECHO) $(Euro_Resources_java) | $(NAWK) 'gsub(/.java/,"\n") {print}' >> $@.tmp.euro; - @$(ECHO) $(NonEuro_Resources_properties) | $(NAWK) 'gsub(/.properties/,"\n") {print}' > $@.tmp.noneuro; - @$(ECHO) $(NonEuro_Resources_java) | $(NAWK) 'gsub(/.java/,"\n") {print}' >> $@.tmp.noneuro; + @$(ECHO) $(US_Resources_properties) | $(NAWK) 'gsub(/.properties/,"\n") {print}' > $@.tmp.us; + @$(ECHO) $(US_Resources_java) | $(NAWK) 'gsub(/.java/,"\n") {print}' >> $@.tmp.us; + @$(ECHO) $(NonUS_Resources_properties) | $(NAWK) 'gsub(/.properties/,"\n") {print}' > $@.tmp.nonus; + @$(ECHO) $(NonUS_Resources_java) | $(NAWK) 'gsub(/.java/,"\n") {print}' >> $@.tmp.nonus; NAWK="$(NAWK)" SED="$(SED)" SORT="$(SORT)" \ - $(SH) $(LOCALEGEN_SH) $(RESOURCE_NAMES) $@.tmp.euro \ - $@.tmp.noneuro $< $@ - @$(RM) $@.tmp.euro $@.tmp.noneuro; + $(SH) $(LOCALEGEN_SH) $(RESOURCE_NAMES) $@.tmp.us \ + $@.tmp.nonus $< $@ + @$(RM) $@.tmp.us $@.tmp.nonus; else $(LocaleDataMetaInfo_Dest):$(LocaleDataMetaInfo_Src) $(LOCALEGEN_SH) - @$(RM) $@.tmp.euro $@.tmp.noneuro; + @$(RM) $@.tmp.us $@.tmp.nonus; @$(prep-target) - @$(ECHO) $(subst .properties,'\n',$(Euro_Resources_properties)) > $@.tmp.euro; - @$(ECHO) $(subst .java,'\n',$(Euro_Resources_java)) >> $@.tmp.euro; - @$(ECHO) $(subst .properties,'\n',$(NonEuro_Resources_properties)) > $@.tmp.noneuro; - @$(ECHO) $(subst .java,'\n',$(NonEuro_Resources_java)) >> $@.tmp.noneuro; + @$(ECHO) $(subst .properties,'\n',$(US_Resources_properties)) > $@.tmp.us; + @$(ECHO) $(subst .java,'\n',$(US_Resources_java)) >> $@.tmp.us; + @$(ECHO) $(subst .properties,'\n',$(NonUS_Resources_properties)) > $@.tmp.nonus; + @$(ECHO) $(subst .java,'\n',$(NonUS_Resources_java)) >> $@.tmp.nonus; NAWK="$(NAWK)" SED="$(SED)" SORT="$(SORT)" \ - $(SH) $(LOCALEGEN_SH) $(RESOURCE_NAMES) $@.tmp.euro \ - $@.tmp.noneuro $< $@ - @$(RM) $@.tmp.euro $@.tmp.noneuro; + $(SH) $(LOCALEGEN_SH) $(RESOURCE_NAMES) $@.tmp.us \ + $@.tmp.nonus $< $@ + @$(RM) $@.tmp.us $@.tmp.nonus; endif genlocales : $(LocaleDataMetaInfo_Dest) diff --git a/jdk/make/java/java/localegen.sh b/jdk/make/java/java/localegen.sh index 8a0c96e1c79..8fad25ef534 100644 --- a/jdk/make/java/java/localegen.sh +++ b/jdk/make/java/java/localegen.sh @@ -35,11 +35,11 @@ # A list of resource base name list; RESOURCE_NAMES=$1 -# A list of European resources; -EURO_FILES_LIST=$2 +# A list of US resources; +US_FILES_LIST=$2 -# A list of non-European resources; -NONEURO_FILES_LIST=$3 +# A list of non-US resources; +NONUS_FILES_LIST=$3 INPUT_FILE=$4 OUTPUT_FILE=$5 @@ -53,23 +53,23 @@ getlocalelist() { sed_script="$SED -e \"s@^#warn .*@// -- This file was mechanically generated: Do not edit! -- //@\" " # ja-JP-JP and th-TH-TH need to be manually added, as they don't have any resource files. -noneuroall=" ja-JP-JP th-TH-TH " +nonusall=" ja-JP-JP th-TH-TH " for FILE in $RESOURCE_NAMES do - getlocalelist $FILE $EURO_FILES_LIST - sed_script=$sed_script"-e \"s@#"$FILE"_EuroLocales#@$localelist@g\" " - euroall=$euroall" "$localelist - getlocalelist $FILE $NONEURO_FILES_LIST - sed_script=$sed_script"-e \"s@#"$FILE"_NonEuroLocales#@$localelist@g\" " - noneuroall=$noneuroall" "$localelist + getlocalelist $FILE $US_FILES_LIST + sed_script=$sed_script"-e \"s@#"$FILE"_USLocales#@$localelist@g\" " + usall=$usall" "$localelist + getlocalelist $FILE $NONUS_FILES_LIST + sed_script=$sed_script"-e \"s@#"$FILE"_NonUSLocales#@$localelist@g\" " + nonusall=$nonusall" "$localelist done -euroall=`(for LOC in $euroall; do echo $LOC;done) |$SORT -u` -noneuroall=`(for LOC in $noneuroall; do echo $LOC;done) |$SORT -u` +usall=`(for LOC in $usall; do echo $LOC;done) |$SORT -u` +nonusall=`(for LOC in $nonusall; do echo $LOC;done) |$SORT -u` -sed_script=$sed_script"-e \"s@#AvailableLocales_EuroLocales#@$euroall@g\" " -sed_script=$sed_script"-e \"s@#AvailableLocales_NonEuroLocales#@$noneuroall@g\" " +sed_script=$sed_script"-e \"s@#AvailableLocales_USLocales#@$usall@g\" " +sed_script=$sed_script"-e \"s@#AvailableLocales_NonUSLocales#@$nonusall@g\" " sed_script=$sed_script"$INPUT_FILE > $OUTPUT_FILE" eval $sed_script diff --git a/jdk/make/java/java/mapfile-vers b/jdk/make/java/java/mapfile-vers index 42ec3ca7277..97938361c99 100644 --- a/jdk/make/java/java/mapfile-vers +++ b/jdk/make/java/java/mapfile-vers @@ -1,5 +1,5 @@ # -# Copyright (c) 1997, 2009, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 1997, 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 @@ -87,7 +87,6 @@ SUNWprivate_1.1 { Java_java_io_FileOutputStream_open; Java_java_io_FileOutputStream_write; Java_java_io_FileOutputStream_writeBytes; - Java_java_io_FileSystem_getFileSystem; Java_java_io_ObjectInputStream_bytesToDoubles; Java_java_io_ObjectInputStream_bytesToFloats; Java_java_io_ObjectOutputStream_doublesToBytes; diff --git a/jdk/make/java/java/reflect/Makefile b/jdk/make/java/java/reflect/Makefile index 6dfceb8bd5e..0412a0e70ff 100644 --- a/jdk/make/java/java/reflect/Makefile +++ b/jdk/make/java/java/reflect/Makefile @@ -1,5 +1,5 @@ # -# Copyright (c) 2003, 2005, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2003, 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 diff --git a/jdk/make/java/jobjc/Makefile b/jdk/make/java/jobjc/Makefile index c4aee8d7255..808e5b976ef 100644 --- a/jdk/make/java/jobjc/Makefile +++ b/jdk/make/java/jobjc/Makefile @@ -1,5 +1,5 @@ # -# Copyright (c) 2011, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2011, 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 diff --git a/jdk/make/java/jvm/Makefile b/jdk/make/java/jvm/Makefile index 060724221ba..b35c3d9bc29 100644 --- a/jdk/make/java/jvm/Makefile +++ b/jdk/make/java/jvm/Makefile @@ -1,5 +1,5 @@ # -# Copyright (c) 1995, 2011, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 1995, 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 diff --git a/jdk/make/java/management/mapfile-vers b/jdk/make/java/management/mapfile-vers index 21b92d45f9e..2e87b707463 100644 --- a/jdk/make/java/management/mapfile-vers +++ b/jdk/make/java/management/mapfile-vers @@ -1,5 +1,5 @@ # -# Copyright (c) 2005, 2011, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2005, 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 diff --git a/jdk/make/java/net/FILES_c.gmk b/jdk/make/java/net/FILES_c.gmk index a4bbb409328..93b7562e1e9 100644 --- a/jdk/make/java/net/FILES_c.gmk +++ b/jdk/make/java/net/FILES_c.gmk @@ -1,5 +1,5 @@ # -# Copyright (c) 1996, 2010, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 1996, 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 diff --git a/jdk/make/java/net/Makefile b/jdk/make/java/net/Makefile index ba15900fc3f..60f83869f74 100644 --- a/jdk/make/java/net/Makefile +++ b/jdk/make/java/net/Makefile @@ -1,5 +1,5 @@ # -# Copyright (c) 1995, 2011, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 1995, 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 diff --git a/jdk/make/java/nio/FILES_java.gmk b/jdk/make/java/nio/FILES_java.gmk index f3b277f050a..1725842061b 100644 --- a/jdk/make/java/nio/FILES_java.gmk +++ b/jdk/make/java/nio/FILES_java.gmk @@ -1,5 +1,5 @@ # -# Copyright (c) 2000, 2011, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2000, 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 diff --git a/jdk/make/java/nio/Makefile b/jdk/make/java/nio/Makefile index f288e1ec9c0..94a50dc4bcb 100644 --- a/jdk/make/java/nio/Makefile +++ b/jdk/make/java/nio/Makefile @@ -1,5 +1,5 @@ # -# Copyright (c) 2000, 2011, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2000, 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 diff --git a/jdk/make/java/nio/mapfile-bsd b/jdk/make/java/nio/mapfile-bsd index 45b23ab8652..4093a002329 100644 --- a/jdk/make/java/nio/mapfile-bsd +++ b/jdk/make/java/nio/mapfile-bsd @@ -1,5 +1,5 @@ # -# Copyright (c) 2001, 2011, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2001, 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 diff --git a/jdk/make/java/nio/mapfile-linux b/jdk/make/java/nio/mapfile-linux index 37999cb7e3b..d78a74400b3 100644 --- a/jdk/make/java/nio/mapfile-linux +++ b/jdk/make/java/nio/mapfile-linux @@ -1,5 +1,5 @@ # -# Copyright (c) 2001, 2011, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2001, 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 diff --git a/jdk/make/java/nio/mapfile-solaris b/jdk/make/java/nio/mapfile-solaris index beb13e25d6f..98deb510dcb 100644 --- a/jdk/make/java/nio/mapfile-solaris +++ b/jdk/make/java/nio/mapfile-solaris @@ -1,5 +1,5 @@ # -# Copyright (c) 2001, 2011, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2001, 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 diff --git a/jdk/make/java/rmi/Makefile b/jdk/make/java/rmi/Makefile index 1520a63c05e..0e496da7bdd 100644 --- a/jdk/make/java/rmi/Makefile +++ b/jdk/make/java/rmi/Makefile @@ -1,5 +1,5 @@ # -# Copyright (c) 1996, 2005, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 1996, 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 diff --git a/jdk/make/java/security/Makefile b/jdk/make/java/security/Makefile index e52fcaa6b16..d68d0a03510 100644 --- a/jdk/make/java/security/Makefile +++ b/jdk/make/java/security/Makefile @@ -1,5 +1,5 @@ # -# Copyright (c) 1996, 2011, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 1996, 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 diff --git a/jdk/make/java/sun_nio/FILES_java.gmk b/jdk/make/java/sun_nio/FILES_java.gmk index d07474d4348..395ab2557e5 100644 --- a/jdk/make/java/sun_nio/FILES_java.gmk +++ b/jdk/make/java/sun_nio/FILES_java.gmk @@ -1,5 +1,5 @@ # -# Copyright (c) 2003, 2008, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2003, 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 diff --git a/jdk/make/java/text/base/FILES_java.gmk b/jdk/make/java/text/base/FILES_java.gmk index c6bf5ffcc6c..dc1d9df0b45 100644 --- a/jdk/make/java/text/base/FILES_java.gmk +++ b/jdk/make/java/text/base/FILES_java.gmk @@ -103,150 +103,7 @@ FILES_java = \ sun/text/resources/BreakIteratorInfo.java \ \ sun/text/resources/CollationData.java \ - sun/text/resources/be/CollationData_be.java \ - sun/text/resources/bg/CollationData_bg.java \ - sun/text/resources/ca/CollationData_ca.java \ - sun/text/resources/cs/CollationData_cs.java \ - sun/text/resources/da/CollationData_da.java \ - sun/text/resources/el/CollationData_el.java \ - sun/text/resources/es/CollationData_es.java \ - sun/text/resources/et/CollationData_et.java \ - sun/text/resources/fi/CollationData_fi.java \ - sun/text/resources/fr/CollationData_fr.java \ - sun/text/resources/hr/CollationData_hr.java \ - sun/text/resources/hu/CollationData_hu.java \ - sun/text/resources/is/CollationData_is.java \ - sun/text/resources/lt/CollationData_lt.java \ - sun/text/resources/lv/CollationData_lv.java \ - sun/text/resources/mk/CollationData_mk.java \ - sun/text/resources/no/CollationData_no.java \ - sun/text/resources/pl/CollationData_pl.java \ - sun/text/resources/ro/CollationData_ro.java \ - sun/text/resources/ru/CollationData_ru.java \ - sun/text/resources/sk/CollationData_sk.java \ - sun/text/resources/sl/CollationData_sl.java \ - sun/text/resources/sq/CollationData_sq.java \ - sun/text/resources/sr/CollationData_sr.java \ - sun/text/resources/sr/CollationData_sr_Latn.java \ - sun/text/resources/sv/CollationData_sv.java \ - sun/text/resources/tr/CollationData_tr.java \ - sun/text/resources/uk/CollationData_uk.java \ \ sun/text/resources/FormatData.java \ - sun/text/resources/be/FormatData_be.java \ - sun/text/resources/be/FormatData_be_BY.java \ - sun/text/resources/bg/FormatData_bg.java \ - sun/text/resources/bg/FormatData_bg_BG.java \ - sun/text/resources/ca/FormatData_ca.java \ - sun/text/resources/ca/FormatData_ca_ES.java \ - sun/text/resources/cs/FormatData_cs.java \ - sun/text/resources/cs/FormatData_cs_CZ.java \ - sun/text/resources/da/FormatData_da.java \ - sun/text/resources/da/FormatData_da_DK.java \ - sun/text/resources/de/FormatData_de.java \ - sun/text/resources/de/FormatData_de_AT.java \ - sun/text/resources/de/FormatData_de_CH.java \ - sun/text/resources/de/FormatData_de_DE.java \ - sun/text/resources/de/FormatData_de_LU.java \ - sun/text/resources/el/FormatData_el.java \ - sun/text/resources/el/FormatData_el_CY.java \ - sun/text/resources/el/FormatData_el_GR.java \ sun/text/resources/en/FormatData_en.java \ - sun/text/resources/en/FormatData_en_US.java \ - sun/text/resources/en/FormatData_en_AU.java \ - sun/text/resources/en/FormatData_en_CA.java \ - sun/text/resources/en/FormatData_en_GB.java \ - sun/text/resources/en/FormatData_en_IE.java \ - sun/text/resources/en/FormatData_en_IN.java \ - sun/text/resources/en/FormatData_en_MT.java \ - sun/text/resources/en/FormatData_en_NZ.java \ - sun/text/resources/en/FormatData_en_PH.java \ - sun/text/resources/en/FormatData_en_SG.java \ - sun/text/resources/en/FormatData_en_ZA.java \ - sun/text/resources/es/FormatData_es.java \ - sun/text/resources/es/FormatData_es_BO.java \ - sun/text/resources/es/FormatData_es_AR.java \ - sun/text/resources/es/FormatData_es_CL.java \ - sun/text/resources/es/FormatData_es_CO.java \ - sun/text/resources/es/FormatData_es_CR.java \ - sun/text/resources/es/FormatData_es_DO.java \ - sun/text/resources/es/FormatData_es_EC.java \ - sun/text/resources/es/FormatData_es_ES.java \ - sun/text/resources/es/FormatData_es_GT.java \ - sun/text/resources/es/FormatData_es_HN.java \ - sun/text/resources/es/FormatData_es_MX.java \ - sun/text/resources/es/FormatData_es_NI.java \ - sun/text/resources/es/FormatData_es_PA.java \ - sun/text/resources/es/FormatData_es_PE.java \ - sun/text/resources/es/FormatData_es_PR.java \ - sun/text/resources/es/FormatData_es_PY.java \ - sun/text/resources/es/FormatData_es_SV.java \ - sun/text/resources/es/FormatData_es_US.java \ - sun/text/resources/es/FormatData_es_UY.java \ - sun/text/resources/es/FormatData_es_VE.java \ - sun/text/resources/et/FormatData_et.java \ - sun/text/resources/et/FormatData_et_EE.java \ - sun/text/resources/fi/FormatData_fi.java \ - sun/text/resources/fi/FormatData_fi_FI.java \ - sun/text/resources/fr/FormatData_fr.java \ - sun/text/resources/fr/FormatData_fr_BE.java \ - sun/text/resources/fr/FormatData_fr_CA.java \ - sun/text/resources/fr/FormatData_fr_CH.java \ - sun/text/resources/fr/FormatData_fr_FR.java \ - sun/text/resources/ga/FormatData_ga.java \ - sun/text/resources/ga/FormatData_ga_IE.java \ - sun/text/resources/hr/FormatData_hr.java \ - sun/text/resources/hr/FormatData_hr_HR.java \ - sun/text/resources/hu/FormatData_hu.java \ - sun/text/resources/hu/FormatData_hu_HU.java \ - sun/text/resources/in/FormatData_in.java \ - sun/text/resources/in/FormatData_in_ID.java \ - sun/text/resources/is/FormatData_is.java \ - sun/text/resources/is/FormatData_is_IS.java \ - sun/text/resources/it/FormatData_it.java \ - sun/text/resources/it/FormatData_it_CH.java \ - sun/text/resources/it/FormatData_it_IT.java \ - sun/text/resources/lt/FormatData_lt.java \ - sun/text/resources/lt/FormatData_lt_LT.java \ - sun/text/resources/lv/FormatData_lv.java \ - sun/text/resources/lv/FormatData_lv_LV.java \ - sun/text/resources/mk/FormatData_mk.java \ - sun/text/resources/mk/FormatData_mk_MK.java \ - sun/text/resources/ms/FormatData_ms.java \ - sun/text/resources/ms/FormatData_ms_MY.java \ - sun/text/resources/mt/FormatData_mt.java \ - sun/text/resources/mt/FormatData_mt_MT.java \ - sun/text/resources/nl/FormatData_nl.java \ - sun/text/resources/nl/FormatData_nl_BE.java \ - sun/text/resources/nl/FormatData_nl_NL.java \ - sun/text/resources/no/FormatData_no.java \ - sun/text/resources/no/FormatData_no_NO.java \ - sun/text/resources/no/FormatData_no_NO_NY.java \ - sun/text/resources/pl/FormatData_pl.java \ - sun/text/resources/pl/FormatData_pl_PL.java \ - sun/text/resources/pt/FormatData_pt.java \ - sun/text/resources/pt/FormatData_pt_BR.java \ - sun/text/resources/pt/FormatData_pt_PT.java \ - sun/text/resources/ro/FormatData_ro.java \ - sun/text/resources/ro/FormatData_ro_RO.java \ - sun/text/resources/ru/FormatData_ru.java \ - sun/text/resources/ru/FormatData_ru_RU.java \ - sun/text/resources/sk/FormatData_sk.java \ - sun/text/resources/sk/FormatData_sk_SK.java \ - sun/text/resources/sl/FormatData_sl.java \ - sun/text/resources/sl/FormatData_sl_SI.java \ - sun/text/resources/sq/FormatData_sq.java \ - sun/text/resources/sq/FormatData_sq_AL.java \ - sun/text/resources/sr/FormatData_sr.java \ - sun/text/resources/sr/FormatData_sr_BA.java \ - sun/text/resources/sr/FormatData_sr_CS.java \ - sun/text/resources/sr/FormatData_sr_ME.java \ - sun/text/resources/sr/FormatData_sr_RS.java \ - sun/text/resources/sr/FormatData_sr_Latn.java \ - sun/text/resources/sr/FormatData_sr_Latn_ME.java \ - sun/text/resources/sv/FormatData_sv.java \ - sun/text/resources/sv/FormatData_sv_SE.java \ - sun/text/resources/tr/FormatData_tr.java \ - sun/text/resources/tr/FormatData_tr_TR.java \ - sun/text/resources/uk/FormatData_uk.java \ - sun/text/resources/uk/FormatData_uk_UA.java + sun/text/resources/en/FormatData_en_US.java diff --git a/jdk/make/java/text/bidi/Makefile b/jdk/make/java/text/bidi/Makefile index cc3dfd59d02..d5775a5d86f 100644 --- a/jdk/make/java/text/bidi/Makefile +++ b/jdk/make/java/text/bidi/Makefile @@ -1,5 +1,5 @@ # -# Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2010, 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 diff --git a/jdk/make/java/util/FILES_java.gmk b/jdk/make/java/util/FILES_java.gmk index e392a626c05..9b0209a80db 100644 --- a/jdk/make/java/util/FILES_java.gmk +++ b/jdk/make/java/util/FILES_java.gmk @@ -29,13 +29,4 @@ FILES_java = \ sun/util/resources/LocaleNamesBundle.java \ sun/util/resources/TimeZoneNamesBundle.java \ sun/util/resources/TimeZoneNames.java \ - sun/util/resources/de/TimeZoneNames_de.java \ - sun/util/resources/en/TimeZoneNames_en.java \ - sun/util/resources/en/TimeZoneNames_en_CA.java \ - sun/util/resources/en/TimeZoneNames_en_GB.java \ - sun/util/resources/en/TimeZoneNames_en_IE.java \ - sun/util/resources/es/TimeZoneNames_es.java \ - sun/util/resources/fr/TimeZoneNames_fr.java \ - sun/util/resources/it/TimeZoneNames_it.java \ - sun/util/resources/pt/TimeZoneNames_pt_BR.java \ - sun/util/resources/sv/TimeZoneNames_sv.java + sun/util/resources/en/TimeZoneNames_en.java diff --git a/jdk/make/java/util/FILES_properties.gmk b/jdk/make/java/util/FILES_properties.gmk index 2bd81043642..4b777c5f2d8 100644 --- a/jdk/make/java/util/FILES_properties.gmk +++ b/jdk/make/java/util/FILES_properties.gmk @@ -25,189 +25,10 @@ FILES_compiled_properties = \ sun/util/resources/LocaleNames.properties \ - sun/util/resources/be/LocaleNames_be.properties \ - sun/util/resources/bg/LocaleNames_bg.properties \ - sun/util/resources/ca/LocaleNames_ca.properties \ - sun/util/resources/cs/LocaleNames_cs.properties \ - sun/util/resources/da/LocaleNames_da.properties \ - sun/util/resources/de/LocaleNames_de.properties \ - sun/util/resources/el/LocaleNames_el.properties \ - sun/util/resources/el/LocaleNames_el_CY.properties \ sun/util/resources/en/LocaleNames_en.properties \ - sun/util/resources/en/LocaleNames_en_MT.properties \ - sun/util/resources/en/LocaleNames_en_PH.properties \ - sun/util/resources/en/LocaleNames_en_SG.properties \ - sun/util/resources/es/LocaleNames_es.properties \ - sun/util/resources/es/LocaleNames_es_US.properties \ - sun/util/resources/et/LocaleNames_et.properties \ - sun/util/resources/fi/LocaleNames_fi.properties \ - sun/util/resources/fr/LocaleNames_fr.properties \ - sun/util/resources/ga/LocaleNames_ga.properties \ - sun/util/resources/hr/LocaleNames_hr.properties \ - sun/util/resources/hu/LocaleNames_hu.properties \ - sun/util/resources/in/LocaleNames_in.properties \ - sun/util/resources/is/LocaleNames_is.properties \ - sun/util/resources/it/LocaleNames_it.properties \ - sun/util/resources/lt/LocaleNames_lt.properties \ - sun/util/resources/lv/LocaleNames_lv.properties \ - sun/util/resources/mk/LocaleNames_mk.properties \ - sun/util/resources/ms/LocaleNames_ms.properties \ - sun/util/resources/mt/LocaleNames_mt.properties \ - sun/util/resources/nl/LocaleNames_nl.properties \ - sun/util/resources/no/LocaleNames_no.properties \ - sun/util/resources/no/LocaleNames_no_NO_NY.properties \ - sun/util/resources/pl/LocaleNames_pl.properties \ - sun/util/resources/pt/LocaleNames_pt.properties \ - sun/util/resources/pt/LocaleNames_pt_BR.properties \ - sun/util/resources/pt/LocaleNames_pt_PT.properties \ - sun/util/resources/ro/LocaleNames_ro.properties \ - sun/util/resources/ru/LocaleNames_ru.properties \ - sun/util/resources/sk/LocaleNames_sk.properties \ - sun/util/resources/sl/LocaleNames_sl.properties \ - sun/util/resources/sq/LocaleNames_sq.properties \ - sun/util/resources/sr/LocaleNames_sr.properties \ - sun/util/resources/sr/LocaleNames_sr_Latn.properties \ - sun/util/resources/sv/LocaleNames_sv.properties \ - sun/util/resources/tr/LocaleNames_tr.properties \ - sun/util/resources/uk/LocaleNames_uk.properties \ \ sun/util/resources/CalendarData.properties \ - sun/util/resources/be/CalendarData_be.properties \ - sun/util/resources/bg/CalendarData_bg.properties \ - sun/util/resources/ca/CalendarData_ca.properties \ - sun/util/resources/cs/CalendarData_cs.properties \ - sun/util/resources/da/CalendarData_da.properties \ - sun/util/resources/de/CalendarData_de.properties \ - sun/util/resources/el/CalendarData_el.properties \ - sun/util/resources/el/CalendarData_el_CY.properties \ sun/util/resources/en/CalendarData_en.properties \ - sun/util/resources/en/CalendarData_en_GB.properties \ - sun/util/resources/en/CalendarData_en_IE.properties \ - sun/util/resources/en/CalendarData_en_MT.properties \ - sun/util/resources/es/CalendarData_es.properties \ - sun/util/resources/es/CalendarData_es_ES.properties \ - sun/util/resources/es/CalendarData_es_US.properties \ - sun/util/resources/et/CalendarData_et.properties \ - sun/util/resources/fi/CalendarData_fi.properties \ - sun/util/resources/fr/CalendarData_fr.properties \ - sun/util/resources/fr/CalendarData_fr_CA.properties \ - sun/util/resources/hr/CalendarData_hr.properties \ - sun/util/resources/hu/CalendarData_hu.properties \ - sun/util/resources/in/CalendarData_in_ID.properties \ - sun/util/resources/is/CalendarData_is.properties \ - sun/util/resources/it/CalendarData_it.properties \ - sun/util/resources/lt/CalendarData_lt.properties \ - sun/util/resources/lv/CalendarData_lv.properties \ - sun/util/resources/mk/CalendarData_mk.properties \ - sun/util/resources/ms/CalendarData_ms_MY.properties \ - sun/util/resources/mt/CalendarData_mt.properties \ - sun/util/resources/mt/CalendarData_mt_MT.properties \ - sun/util/resources/nl/CalendarData_nl.properties \ - sun/util/resources/no/CalendarData_no.properties \ - sun/util/resources/pl/CalendarData_pl.properties \ - sun/util/resources/pt/CalendarData_pt.properties \ - sun/util/resources/pt/CalendarData_pt_PT.properties \ - sun/util/resources/ro/CalendarData_ro.properties \ - sun/util/resources/ru/CalendarData_ru.properties \ - sun/util/resources/sk/CalendarData_sk.properties \ - sun/util/resources/sl/CalendarData_sl.properties \ - sun/util/resources/sq/CalendarData_sq.properties \ - sun/util/resources/sr/CalendarData_sr.properties \ - sun/util/resources/sr/CalendarData_sr_Latn_BA.properties \ - sun/util/resources/sr/CalendarData_sr_Latn_ME.properties \ - sun/util/resources/sr/CalendarData_sr_Latn_RS.properties \ - sun/util/resources/sv/CalendarData_sv.properties \ - sun/util/resources/tr/CalendarData_tr.properties \ - sun/util/resources/uk/CalendarData_uk.properties \ \ sun/util/resources/CurrencyNames.properties \ - sun/util/resources/be/CurrencyNames_be_BY.properties \ - sun/util/resources/bg/CurrencyNames_bg_BG.properties \ - sun/util/resources/ca/CurrencyNames_ca_ES.properties \ - sun/util/resources/cs/CurrencyNames_cs_CZ.properties \ - sun/util/resources/da/CurrencyNames_da_DK.properties \ - sun/util/resources/de/CurrencyNames_de.properties \ - sun/util/resources/de/CurrencyNames_de_AT.properties \ - sun/util/resources/de/CurrencyNames_de_CH.properties \ - sun/util/resources/de/CurrencyNames_de_DE.properties \ - sun/util/resources/de/CurrencyNames_de_GR.properties \ - sun/util/resources/de/CurrencyNames_de_LU.properties \ - sun/util/resources/el/CurrencyNames_el_CY.properties \ - sun/util/resources/el/CurrencyNames_el_GR.properties \ - sun/util/resources/en/CurrencyNames_en_AU.properties \ - sun/util/resources/en/CurrencyNames_en_CA.properties \ - sun/util/resources/en/CurrencyNames_en_GB.properties \ - sun/util/resources/en/CurrencyNames_en_IE.properties \ - sun/util/resources/en/CurrencyNames_en_IN.properties \ - sun/util/resources/en/CurrencyNames_en_MT.properties \ - sun/util/resources/en/CurrencyNames_en_NZ.properties \ - sun/util/resources/en/CurrencyNames_en_PH.properties \ - sun/util/resources/en/CurrencyNames_en_SG.properties \ - sun/util/resources/en/CurrencyNames_en_US.properties \ - sun/util/resources/en/CurrencyNames_en_ZA.properties \ - sun/util/resources/es/CurrencyNames_es.properties \ - sun/util/resources/es/CurrencyNames_es_AR.properties \ - sun/util/resources/es/CurrencyNames_es_BO.properties \ - sun/util/resources/es/CurrencyNames_es_CL.properties \ - sun/util/resources/es/CurrencyNames_es_CO.properties \ - sun/util/resources/es/CurrencyNames_es_CR.properties \ - sun/util/resources/es/CurrencyNames_es_CU.properties \ - sun/util/resources/es/CurrencyNames_es_DO.properties \ - sun/util/resources/es/CurrencyNames_es_EC.properties \ - sun/util/resources/es/CurrencyNames_es_ES.properties \ - sun/util/resources/es/CurrencyNames_es_GT.properties \ - sun/util/resources/es/CurrencyNames_es_HN.properties \ - sun/util/resources/es/CurrencyNames_es_MX.properties \ - sun/util/resources/es/CurrencyNames_es_NI.properties \ - sun/util/resources/es/CurrencyNames_es_PA.properties \ - sun/util/resources/es/CurrencyNames_es_PE.properties \ - sun/util/resources/es/CurrencyNames_es_PR.properties \ - sun/util/resources/es/CurrencyNames_es_PY.properties \ - sun/util/resources/es/CurrencyNames_es_SV.properties \ - sun/util/resources/es/CurrencyNames_es_US.properties \ - sun/util/resources/es/CurrencyNames_es_UY.properties \ - sun/util/resources/es/CurrencyNames_es_VE.properties \ - sun/util/resources/et/CurrencyNames_et_EE.properties \ - sun/util/resources/fi/CurrencyNames_fi_FI.properties \ - sun/util/resources/fr/CurrencyNames_fr.properties \ - sun/util/resources/fr/CurrencyNames_fr_BE.properties \ - sun/util/resources/fr/CurrencyNames_fr_CA.properties \ - sun/util/resources/fr/CurrencyNames_fr_CH.properties \ - sun/util/resources/fr/CurrencyNames_fr_FR.properties \ - sun/util/resources/fr/CurrencyNames_fr_LU.properties \ - sun/util/resources/ga/CurrencyNames_ga_IE.properties \ - sun/util/resources/hr/CurrencyNames_hr_HR.properties \ - sun/util/resources/hu/CurrencyNames_hu_HU.properties \ - sun/util/resources/in/CurrencyNames_in_ID.properties \ - sun/util/resources/is/CurrencyNames_is_IS.properties \ - sun/util/resources/it/CurrencyNames_it.properties \ - sun/util/resources/it/CurrencyNames_it_CH.properties \ - sun/util/resources/it/CurrencyNames_it_IT.properties \ - sun/util/resources/lt/CurrencyNames_lt_LT.properties \ - sun/util/resources/lv/CurrencyNames_lv_LV.properties \ - sun/util/resources/mk/CurrencyNames_mk_MK.properties \ - sun/util/resources/ms/CurrencyNames_ms_MY.properties \ - sun/util/resources/mt/CurrencyNames_mt_MT.properties \ - sun/util/resources/nl/CurrencyNames_nl_BE.properties \ - sun/util/resources/nl/CurrencyNames_nl_NL.properties \ - sun/util/resources/no/CurrencyNames_no_NO.properties \ - sun/util/resources/pl/CurrencyNames_pl_PL.properties \ - sun/util/resources/pt/CurrencyNames_pt.properties \ - sun/util/resources/pt/CurrencyNames_pt_BR.properties \ - sun/util/resources/pt/CurrencyNames_pt_PT.properties \ - sun/util/resources/ro/CurrencyNames_ro_RO.properties \ - sun/util/resources/ru/CurrencyNames_ru_RU.properties \ - sun/util/resources/sk/CurrencyNames_sk_SK.properties \ - sun/util/resources/sl/CurrencyNames_sl_SI.properties \ - sun/util/resources/sq/CurrencyNames_sq_AL.properties \ - sun/util/resources/sr/CurrencyNames_sr_BA.properties \ - sun/util/resources/sr/CurrencyNames_sr_CS.properties \ - sun/util/resources/sr/CurrencyNames_sr_ME.properties \ - sun/util/resources/sr/CurrencyNames_sr_RS.properties \ - sun/util/resources/sr/CurrencyNames_sr_Latn_BA.properties \ - sun/util/resources/sr/CurrencyNames_sr_Latn_ME.properties \ - sun/util/resources/sr/CurrencyNames_sr_Latn_RS.properties \ - sun/util/resources/sv/CurrencyNames_sv.properties \ - sun/util/resources/sv/CurrencyNames_sv_SE.properties \ - sun/util/resources/tr/CurrencyNames_tr_TR.properties \ - sun/util/resources/uk/CurrencyNames_uk_UA.properties + sun/util/resources/en/CurrencyNames_en_US.properties diff --git a/jdk/make/java/zip/FILES_c.gmk b/jdk/make/java/zip/FILES_c.gmk index b6496b99270..4e9889bfbeb 100644 --- a/jdk/make/java/zip/FILES_c.gmk +++ b/jdk/make/java/zip/FILES_c.gmk @@ -1,5 +1,5 @@ # -# Copyright (c) 1996, 2002, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 1996, 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 diff --git a/jdk/make/java/zip/Makefile b/jdk/make/java/zip/Makefile index e1d3c5b7e59..67a8557de0b 100644 --- a/jdk/make/java/zip/Makefile +++ b/jdk/make/java/zip/Makefile @@ -1,5 +1,5 @@ # -# Copyright (c) 1996, 2011, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 1996, 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 diff --git a/jdk/make/java/zip/mapfile-vers b/jdk/make/java/zip/mapfile-vers index 367e9058dc6..ba6490cc328 100644 --- a/jdk/make/java/zip/mapfile-vers +++ b/jdk/make/java/zip/mapfile-vers @@ -1,5 +1,5 @@ # -# Copyright (c) 1997, 2005, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 1997, 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 diff --git a/jdk/make/javax/accessibility/Makefile b/jdk/make/javax/accessibility/Makefile index 4908ffbb15b..577567640be 100644 --- a/jdk/make/javax/accessibility/Makefile +++ b/jdk/make/javax/accessibility/Makefile @@ -1,5 +1,5 @@ # -# Copyright (c) 1997, 2006, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 1997, 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 diff --git a/jdk/make/javax/crypto/Defs-jce.gmk b/jdk/make/javax/crypto/Defs-jce.gmk index 7aecdc0a754..6203129b17b 100644 --- a/jdk/make/javax/crypto/Defs-jce.gmk +++ b/jdk/make/javax/crypto/Defs-jce.gmk @@ -1,5 +1,5 @@ # -# Copyright (c) 2007, 2011, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2007, 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 @@ -31,7 +31,7 @@ include $(BUILDDIR)/common/Release.gmk JCE_MANIFEST_FILE = $(TEMPDIR)/manifest.mf $(JCE_MANIFEST_FILE): $(MAINMANIFEST) $(prep-target) - $(SED) -e "s#@@RELEASE@@#$(RELEASE)#" \ + $(SED) -e "s#@@RELEASE@@#$(JDK_VERSION)#" \ -e "s#@@COMPANY_NAME@@#$(COMPANY_NAME)#" \ $(MAINMANIFEST) >> $@ $(ECHO) "Extension-Name: javax.crypto" >> $@ diff --git a/jdk/make/javax/crypto/Makefile b/jdk/make/javax/crypto/Makefile index e446e46406f..26af4323411 100644 --- a/jdk/make/javax/crypto/Makefile +++ b/jdk/make/javax/crypto/Makefile @@ -1,5 +1,5 @@ # -# Copyright (c) 2007, 2011, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2007, 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 diff --git a/jdk/make/javax/sound/FILES_c.gmk b/jdk/make/javax/sound/FILES_c.gmk index 364639367cf..aa5d257d0d0 100644 --- a/jdk/make/javax/sound/FILES_c.gmk +++ b/jdk/make/javax/sound/FILES_c.gmk @@ -1,5 +1,5 @@ # -# Copyright (c) 1999, 2007, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 1999, 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 diff --git a/jdk/make/javax/sound/SoundDefs.gmk b/jdk/make/javax/sound/SoundDefs.gmk index 06c0af8722e..26ec37655fb 100644 --- a/jdk/make/javax/sound/SoundDefs.gmk +++ b/jdk/make/javax/sound/SoundDefs.gmk @@ -1,5 +1,5 @@ # -# Copyright (c) 2002, 2011, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2002, 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 diff --git a/jdk/make/javax/sound/jsoundalsa/Makefile b/jdk/make/javax/sound/jsoundalsa/Makefile index 5fa0124cc68..79974bfe524 100644 --- a/jdk/make/javax/sound/jsoundalsa/Makefile +++ b/jdk/make/javax/sound/jsoundalsa/Makefile @@ -1,5 +1,5 @@ # -# Copyright (c) 2002, 2011, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2002, 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 diff --git a/jdk/makefiles/mapfiles/launchers/mapfile-amd64 b/jdk/make/jdk/Makefile similarity index 74% rename from jdk/makefiles/mapfiles/launchers/mapfile-amd64 rename to jdk/make/jdk/Makefile index 760fcc1a90a..b8ac7422749 100644 --- a/jdk/makefiles/mapfiles/launchers/mapfile-amd64 +++ b/jdk/make/jdk/Makefile @@ -1,5 +1,5 @@ # -# Copyright (c) 2004, 2011, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 1997, 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 @@ -22,18 +22,17 @@ # or visit www.oracle.com if you need additional information or have any # questions. # + # -# Specify what global symbols we export. Note that we're not really -# interested in declaring a version, simply scoping the file is sufficient. +# Makefile for building all of java # -SUNWprivate_1.1 { - global: - main; # Provides basic adb symbol offsets - environ; # Public symbols and required by Java run time - _environ; - __environ_lock; +BUILDDIR = .. +PRODUCT = jdk +include $(BUILDDIR)/common/Defs.gmk - local: - *; -}; +SUBDIRS = asm +include $(BUILDDIR)/common/Subdirs.gmk + +all build clean clobber:: + $(SUBDIRS-loop) diff --git a/jdk/makefiles/mapfiles/launchers/mapfile-i586 b/jdk/make/jdk/asm/Makefile similarity index 62% rename from jdk/makefiles/mapfiles/launchers/mapfile-i586 rename to jdk/make/jdk/asm/Makefile index 48061dd8e90..48b8f609644 100644 --- a/jdk/makefiles/mapfiles/launchers/mapfile-i586 +++ b/jdk/make/jdk/asm/Makefile @@ -1,5 +1,5 @@ # -# Copyright (c) 2004, 2011, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 1995, 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 @@ -22,27 +22,19 @@ # or visit www.oracle.com if you need additional information or have any # questions. # -# -# Specify what global symbols we export. Note that we're not really -# interested in declaring a version, simply scoping the file is sufficient. -# -SUNWprivate_1.1 { - global: - main; # Provides basic adb symbol offsets - environ; # Public symbols and required by Java run time - _environ; - __environ_lock; - ___Argv; # The following are private, but as they are - _start; # exported from ctr1/crtn, the clever hacker - _init; # might know about them. However note, that - _fini; # their use is strictly not supported. - _lib_version; -# _mcount; - __fsr; - __fsr_init_value; - __longdouble_used; +BUILDDIR = ../.. +PACKAGE = jdk.internal.org.objectweb.asm +PRODUCT = jdk +JAVAC_LINT_OPTIONS=-Xlint:all +include $(BUILDDIR)/common/Defs.gmk - local: - *; -}; +# +# Files to compile +# +AUTO_FILES_JAVA_DIRS = jdk/internal/org/objectweb/asm + +# +# Rules +# +include $(BUILDDIR)/common/Classes.gmk diff --git a/jdk/make/jdk_generic_profile.sh b/jdk/make/jdk_generic_profile.sh index 6836d8bd0b8..28705393a33 100644 --- a/jdk/make/jdk_generic_profile.sh +++ b/jdk/make/jdk_generic_profile.sh @@ -1,7 +1,7 @@ #!/bin/sh # -# Copyright (c) 2007, 2011, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2007, 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 diff --git a/jdk/make/jpda/back/Makefile b/jdk/make/jpda/back/Makefile index b2d7e2246c0..2095c4cf7dc 100644 --- a/jdk/make/jpda/back/Makefile +++ b/jdk/make/jpda/back/Makefile @@ -1,5 +1,5 @@ # -# Copyright (c) 1998, 2011, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 1998, 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 diff --git a/jdk/make/jpda/jdwp/jdwp.spec b/jdk/make/jpda/jdwp/jdwp.spec index 3f28a918ef4..0080c501a7f 100644 --- a/jdk/make/jpda/jdwp/jdwp.spec +++ b/jdk/make/jpda/jdwp/jdwp.spec @@ -1,5 +1,5 @@ /* - * Copyright (c) 1998, 2006, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1998, 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 diff --git a/jdk/make/jprt.properties b/jdk/make/jprt.properties index f41a227d30e..cbf8540e02f 100644 --- a/jdk/make/jprt.properties +++ b/jdk/make/jprt.properties @@ -1,5 +1,5 @@ # -# Copyright (c) 2006, 2010, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2006, 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 @@ -77,20 +77,18 @@ jprt.make.rule.core.test.targets= \ ${jprt.my.test.target.set:TESTNAME=jdk_util}, \ ${jprt.my.test.target.set:TESTNAME=jdk_io}, \ ${jprt.my.test.target.set:TESTNAME=jdk_net}, \ - ${jprt.my.test.target.set:TESTNAME=jdk_nio1}, \ - ${jprt.my.test.target.set:TESTNAME=jdk_nio2}, \ - ${jprt.my.test.target.set:TESTNAME=jdk_nio3}, \ + ${jprt.my.test.target.set:TESTNAME=jdk_nio}, \ ${jprt.my.test.target.set:TESTNAME=jdk_security1}, \ ${jprt.my.test.target.set:TESTNAME=jdk_security2}, \ ${jprt.my.test.target.set:TESTNAME=jdk_security3}, \ ${jprt.my.test.target.set:TESTNAME=jdk_rmi}, \ - ${jprt.my.test.target.set:TESTNAME=jdk_management1}, \ - ${jprt.my.test.target.set:TESTNAME=jdk_management2}, \ + ${jprt.my.test.target.set:TESTNAME=jdk_management}, \ + ${jprt.my.test.target.set:TESTNAME=jdk_jmx}, \ ${jprt.my.test.target.set:TESTNAME=jdk_text}, \ - ${jprt.my.test.target.set:TESTNAME=jdk_tools1}, \ - ${jprt.my.test.target.set:TESTNAME=jdk_tools2}, \ + ${jprt.my.test.target.set:TESTNAME=jdk_tools}, \ + ${jprt.my.test.target.set:TESTNAME=jdk_jdi}, \ ${jprt.my.test.target.set:TESTNAME=jdk_jfr}, \ - ${jprt.my.test.target.set:TESTNAME=jdk_misc} + ${jprt.my.test.target.set:TESTNAME=jdk_other} # All vm test targets (testset=all) jprt.vm.all.test.targets= \ diff --git a/jdk/make/launchers/Makefile b/jdk/make/launchers/Makefile index 9979d973b39..3d9511408b0 100644 --- a/jdk/make/launchers/Makefile +++ b/jdk/make/launchers/Makefile @@ -58,7 +58,7 @@ $(make-appletviewer) $(call make-launcher, extcheck, com.sun.tools.extcheck.Main, , ) $(call make-launcher, idlj, com.sun.tools.corba.se.idl.toJavaPortable.Compile, , ) $(call make-launcher, jar, sun.tools.jar.Main, , ) -$(call make-launcher, jarsigner, sun.security.tools.JarSigner, , ) +$(call make-launcher, jarsigner, sun.security.tools.jarsigner.Main, , ) $(call make-launcher, javac, com.sun.tools.javac.Main, , ) $(call make-launcher, javadoc, com.sun.tools.javadoc.Main, , ) $(call make-launcher, javah, com.sun.tools.javah.Main, , ) diff --git a/jdk/make/mksample/Makefile b/jdk/make/mksample/Makefile index aa0f7481afd..b1c93daa56d 100644 --- a/jdk/make/mksample/Makefile +++ b/jdk/make/mksample/Makefile @@ -1,5 +1,5 @@ # -# Copyright (c) 2004, 2011, Oracle and/or its affiliates. All rights reserved. +# 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 diff --git a/jdk/make/netbeans/common/architectures/name-Bsd.properties b/jdk/make/netbeans/common/architectures/name-Bsd.properties index 587e749e340..e09f9404df3 100644 --- a/jdk/make/netbeans/common/architectures/name-Bsd.properties +++ b/jdk/make/netbeans/common/architectures/name-Bsd.properties @@ -1,5 +1,5 @@ # -# Copyright (c) 2007, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2007, 2012, Oracle and/or its affiliates. All rights reserved. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions diff --git a/jdk/make/netbeans/common/closed-share-view.ent b/jdk/make/netbeans/common/closed-share-view.ent index 82fe0cab525..c03b53caeee 100644 --- a/jdk/make/netbeans/common/closed-share-view.ent +++ b/jdk/make/netbeans/common/closed-share-view.ent @@ -1,7 +1,7 @@ SERVER) used with @@ -192,26 +193,38 @@ final class RSAClientKeyExchange extends HandshakeMessage { "unable to get the plaintext of the premaster secret"); } - // We are not always able to get the encoded key of the - // premaster secret. Pass the cheking to master secret + int keySize = KeyLength.getKeySize(secretKey); + if (keySize > 0 && keySize != 384) { // 384 = 48 * 8 + if (debug != null && Debug.isOn("handshake")) { + System.out.println( + "incorrect length of premaster secret: " + + (keySize/8)); + } + + return generateDummySecret(clientHelloVersion); + } + + // The key size is exactly 48 bytes or not accessible. + // + // Conservatively, pass the checking to master secret // calculation. return secretKey; } else if (encoded.length == 48) { // check the version if (clientHelloVersion.major == encoded[0] && clientHelloVersion.minor == encoded[1]) { + return secretKey; - } else if (clientHelloVersion.v <= ProtocolVersion.TLS10.v) { + } else if (clientHelloVersion.v <= ProtocolVersion.TLS10.v && + currentVersion.major == encoded[0] && + currentVersion.minor == encoded[1]) { /* - * we never checked the client_version in server side - * for TLS v1.0 and SSL v3.0. For compatibility, we - * maintain this behavior. + * For compatibility, we maintain the behavior that the + * version in pre_master_secret can be the negotiated + * version for TLS v1.0 and SSL v3.0. */ - if (currentVersion.major == encoded[0] && - currentVersion.minor == encoded[1]) { - this.protocolVersion = currentVersion; - return secretKey; - } + this.protocolVersion = currentVersion; + return secretKey; } if (debug != null && Debug.isOn("handshake")) { @@ -220,22 +233,23 @@ final class RSAClientKeyExchange extends HandshakeMessage { ", while PreMasterSecret.client_version is " + ProtocolVersion.valueOf(encoded[0], encoded[1])); } + + return generateDummySecret(clientHelloVersion); } else { if (debug != null && Debug.isOn("handshake")) { System.out.println( "incorrect length of premaster secret: " + encoded.length); } + + return generateDummySecret(clientHelloVersion); } } - if (debug != null && Debug.isOn("handshake")) { - if (failoverException != null) { - System.out.println("Error decrypting premaster secret:"); - failoverException.printStackTrace(System.out); - } - - System.out.println("Generating random secret"); + if (debug != null && Debug.isOn("handshake") && + failoverException != null) { + System.out.println("Error decrypting premaster secret:"); + failoverException.printStackTrace(System.out); } return generateDummySecret(clientHelloVersion); @@ -243,6 +257,10 @@ final class RSAClientKeyExchange extends HandshakeMessage { // generate a premaster secret with the specified version number static SecretKey generateDummySecret(ProtocolVersion version) { + if (debug != null && Debug.isOn("handshake")) { + System.out.println("Generating a random fake premaster secret"); + } + try { String s = ((version.v >= ProtocolVersion.TLS12.v) ? "SunTls12RsaPremasterSecret" : "SunTlsRsaPremasterSecret"); diff --git a/jdk/src/share/classes/sun/security/ssl/RenegotiationInfoExtension.java b/jdk/src/share/classes/sun/security/ssl/RenegotiationInfoExtension.java new file mode 100644 index 00000000000..df13c3ec11a --- /dev/null +++ b/jdk/src/share/classes/sun/security/ssl/RenegotiationInfoExtension.java @@ -0,0 +1,112 @@ +/* + * Copyright (c) 2006, 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. 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.security.ssl; + +import java.io.IOException; + +import javax.net.ssl.SSLProtocolException; + +/* + * For secure renegotiation, RFC5746 defines a new TLS extension, + * "renegotiation_info" (with extension type 0xff01), which contains a + * cryptographic binding to the enclosing TLS connection (if any) for + * which the renegotiation is being performed. The "extension data" + * field of this extension contains a "RenegotiationInfo" structure: + * + * struct { + * opaque renegotiated_connection<0..255>; + * } RenegotiationInfo; + */ +final class RenegotiationInfoExtension extends HelloExtension { + private final byte[] renegotiated_connection; + + RenegotiationInfoExtension(byte[] clientVerifyData, + byte[] serverVerifyData) { + super(ExtensionType.EXT_RENEGOTIATION_INFO); + + if (clientVerifyData.length != 0) { + renegotiated_connection = + new byte[clientVerifyData.length + serverVerifyData.length]; + System.arraycopy(clientVerifyData, 0, renegotiated_connection, + 0, clientVerifyData.length); + + if (serverVerifyData.length != 0) { + System.arraycopy(serverVerifyData, 0, renegotiated_connection, + clientVerifyData.length, serverVerifyData.length); + } + } else { + // ignore both the client and server verify data. + renegotiated_connection = new byte[0]; + } + } + + RenegotiationInfoExtension(HandshakeInStream s, int len) + throws IOException { + super(ExtensionType.EXT_RENEGOTIATION_INFO); + + // check the extension length + if (len < 1) { + throw new SSLProtocolException("Invalid " + type + " extension"); + } + + int renegoInfoDataLen = s.getInt8(); + if (renegoInfoDataLen + 1 != len) { // + 1 = the byte we just read + throw new SSLProtocolException("Invalid " + type + " extension"); + } + + renegotiated_connection = new byte[renegoInfoDataLen]; + if (renegoInfoDataLen != 0) { + s.read(renegotiated_connection, 0, renegoInfoDataLen); + } + } + + + // Length of the encoded extension, including the type and length fields + int length() { + return 5 + renegotiated_connection.length; + } + + void send(HandshakeOutStream s) throws IOException { + s.putInt16(type.id); + s.putInt16(renegotiated_connection.length + 1); + s.putBytes8(renegotiated_connection); + } + + boolean isEmpty() { + return renegotiated_connection.length == 0; + } + + byte[] getRenegotiatedConnection() { + return renegotiated_connection; + } + + public String toString() { + return "Extension " + type + ", renegotiated_connection: " + + (renegotiated_connection.length == 0 ? "" : + Debug.toString(renegotiated_connection)); + } + +} diff --git a/jdk/src/share/classes/sun/security/ssl/SSLEngineImpl.java b/jdk/src/share/classes/sun/security/ssl/SSLEngineImpl.java index a396bf7c13f..267bd55722b 100644 --- a/jdk/src/share/classes/sun/security/ssl/SSLEngineImpl.java +++ b/jdk/src/share/classes/sun/security/ssl/SSLEngineImpl.java @@ -27,6 +27,7 @@ package sun.security.ssl; import java.io.*; import java.nio.*; +import java.util.*; import java.security.*; import javax.crypto.BadPaddingException; @@ -34,7 +35,6 @@ import javax.crypto.BadPaddingException; import javax.net.ssl.*; import javax.net.ssl.SSLEngineResult.*; - /** * Implementation of an non-blocking SSLEngine. * @@ -253,6 +253,12 @@ final public class SSLEngineImpl extends SSLEngine { // The cryptographic algorithm constraints private AlgorithmConstraints algorithmConstraints = null; + // The server name indication and matchers + List serverNames = + Collections.emptyList(); + Collection sniMatchers = + Collections.emptyList(); + // Have we been told whether we're client or server? private boolean serverModeSet = false; private boolean roleIsServer; @@ -361,6 +367,10 @@ final public class SSLEngineImpl extends SSLEngine { roleIsServer = true; connectionState = cs_START; + // default server name indication + serverNames = + Utilities.addToSNIServerNameList(serverNames, getPeerHost()); + /* * default read and write side cipher and MAC support * @@ -459,11 +469,13 @@ final public class SSLEngineImpl extends SSLEngine { enabledProtocols, doClientAuth, protocolVersion, connectionState == cs_HANDSHAKE, secureRenegotiation, clientVerifyData, serverVerifyData); + handshaker.setSNIMatchers(sniMatchers); } else { handshaker = new ClientHandshaker(this, sslContext, enabledProtocols, protocolVersion, connectionState == cs_HANDSHAKE, secureRenegotiation, clientVerifyData, serverVerifyData); + handshaker.setSNIServerNames(serverNames); } handshaker.setEnabledCipherSuites(enabledCipherSuites); handshaker.setEnableSessionCreation(enableSessionCreation); @@ -1100,7 +1112,7 @@ final public class SSLEngineImpl extends SSLEngine { // TLS requires that unrecognized records be ignored. // if (debug != null && Debug.isOn("ssl")) { - System.out.println(threadName() + + System.out.println(Thread.currentThread().getName() + ", Received record type: " + inputRecord.contentType()); } @@ -1384,7 +1396,7 @@ final public class SSLEngineImpl extends SSLEngine { * for handshaking and bad_record_mac for other records. */ if (debug != null && Debug.isOn("ssl")) { - System.out.println(threadName() + + System.out.println(Thread.currentThread().getName() + ", sequence number extremely close to overflow " + "(2^64-1 packets). Closing connection."); } @@ -1402,7 +1414,8 @@ final public class SSLEngineImpl extends SSLEngine { */ if ((type != Record.ct_handshake) && mac.seqNumIsHuge()) { if (debug != null && Debug.isOn("ssl")) { - System.out.println(threadName() + ", request renegotiation " + + System.out.println(Thread.currentThread().getName() + + ", request renegotiation " + "to avoid sequence number overflow"); } @@ -1420,7 +1433,8 @@ final public class SSLEngineImpl extends SSLEngine { private void closeOutboundInternal() { if ((debug != null) && Debug.isOn("ssl")) { - System.out.println(threadName() + ", closeOutboundInternal()"); + System.out.println(Thread.currentThread().getName() + + ", closeOutboundInternal()"); } /* @@ -1467,7 +1481,8 @@ final public class SSLEngineImpl extends SSLEngine { * Dump out a close_notify to the remote side */ if ((debug != null) && Debug.isOn("ssl")) { - System.out.println(threadName() + ", called closeOutbound()"); + System.out.println(Thread.currentThread().getName() + + ", called closeOutbound()"); } closeOutboundInternal(); @@ -1487,7 +1502,8 @@ final public class SSLEngineImpl extends SSLEngine { private void closeInboundInternal() { if ((debug != null) && Debug.isOn("ssl")) { - System.out.println(threadName() + ", closeInboundInternal()"); + System.out.println(Thread.currentThread().getName() + + ", closeInboundInternal()"); } /* @@ -1519,7 +1535,8 @@ final public class SSLEngineImpl extends SSLEngine { * someday in the future. */ if ((debug != null) && Debug.isOn("ssl")) { - System.out.println(threadName() + ", called closeInbound()"); + System.out.println(Thread.currentThread().getName() + + ", called closeInbound()"); } /* @@ -1642,7 +1659,7 @@ final public class SSLEngineImpl extends SSLEngine { */ if (closeReason != null) { if ((debug != null) && Debug.isOn("ssl")) { - System.out.println(threadName() + + System.out.println(Thread.currentThread().getName() + ", fatal: engine already closed. Rethrowing " + cause.toString()); } @@ -1656,7 +1673,7 @@ final public class SSLEngineImpl extends SSLEngine { } if ((debug != null) && Debug.isOn("ssl")) { - System.out.println(threadName() + System.out.println(Thread.currentThread().getName() + ", fatal error: " + description + ": " + diagnostic + "\n" + cause.toString()); } @@ -1723,7 +1740,7 @@ final public class SSLEngineImpl extends SSLEngine { if (debug != null && (Debug.isOn("record") || Debug.isOn("handshake"))) { synchronized (System.out) { - System.out.print(threadName()); + System.out.print(Thread.currentThread().getName()); System.out.print(", RECV " + protocolVersion + " ALERT: "); if (level == Alerts.alert_fatal) { System.out.print("fatal, "); @@ -1790,7 +1807,7 @@ final public class SSLEngineImpl extends SSLEngine { boolean useDebug = debug != null && Debug.isOn("ssl"); if (useDebug) { synchronized (System.out) { - System.out.print(threadName()); + System.out.print(Thread.currentThread().getName()); System.out.print(", SEND " + protocolVersion + " ALERT: "); if (level == Alerts.alert_fatal) { System.out.print("fatal, "); @@ -1810,7 +1827,7 @@ final public class SSLEngineImpl extends SSLEngine { writeRecord(r); } catch (IOException e) { if (useDebug) { - System.out.println(threadName() + + System.out.println(Thread.currentThread().getName() + ", Exception sending alert: " + e); } } @@ -1948,7 +1965,7 @@ final public class SSLEngineImpl extends SSLEngine { default: if (debug != null && Debug.isOn("ssl")) { - System.out.println(threadName() + + System.out.println(Thread.currentThread().getName() + ", setUseClientMode() invoked in state = " + connectionState); } @@ -2050,6 +2067,8 @@ final public class SSLEngineImpl extends SSLEngine { // the super implementation does not handle the following parameters params.setEndpointIdentificationAlgorithm(identificationProtocol); params.setAlgorithmConstraints(algorithmConstraints); + params.setSNIMatchers(sniMatchers); + params.setServerNames(serverNames); return params; } @@ -2063,19 +2082,28 @@ final public class SSLEngineImpl extends SSLEngine { // the super implementation does not handle the following parameters identificationProtocol = params.getEndpointIdentificationAlgorithm(); algorithmConstraints = params.getAlgorithmConstraints(); + + List sniNames = params.getServerNames(); + if (sniNames != null) { + serverNames = sniNames; + } + + Collection matchers = params.getSNIMatchers(); + if (matchers != null) { + sniMatchers = matchers; + } + if ((handshaker != null) && !handshaker.started()) { handshaker.setIdentificationProtocol(identificationProtocol); handshaker.setAlgorithmConstraints(algorithmConstraints); + if (roleIsServer) { + handshaker.setSNIMatchers(sniMatchers); + } else { + handshaker.setSNIServerNames(serverNames); + } } } - /** - * Return the name of the current thread. Utility method. - */ - private static String threadName() { - return Thread.currentThread().getName(); - } - /** * Returns a printable representation of this end of the connection. */ diff --git a/jdk/src/share/classes/sun/security/ssl/SSLServerSocketImpl.java b/jdk/src/share/classes/sun/security/ssl/SSLServerSocketImpl.java index c2098c1db19..0dcf2cd3ce4 100644 --- a/jdk/src/share/classes/sun/security/ssl/SSLServerSocketImpl.java +++ b/jdk/src/share/classes/sun/security/ssl/SSLServerSocketImpl.java @@ -39,6 +39,7 @@ import javax.net.ServerSocketFactory; import javax.net.ssl.SSLException; import javax.net.ssl.SSLServerSocket; import javax.net.ssl.SSLParameters; +import javax.net.ssl.SNIMatcher; /** @@ -92,6 +93,10 @@ class SSLServerSocketImpl extends SSLServerSocket // The cryptographic algorithm constraints private AlgorithmConstraints algorithmConstraints = null; + // The server name indication + Collection sniMatchers = + Collections.emptyList(); + /** * Create an SSL server socket on a port, using a non-default * authentication context and a specified connection backlog. @@ -289,6 +294,7 @@ class SSLServerSocketImpl extends SSLServerSocket // the super implementation does not handle the following parameters params.setEndpointIdentificationAlgorithm(identificationProtocol); params.setAlgorithmConstraints(algorithmConstraints); + params.setSNIMatchers(sniMatchers); return params; } @@ -302,6 +308,10 @@ class SSLServerSocketImpl extends SSLServerSocket // the super implementation does not handle the following parameters identificationProtocol = params.getEndpointIdentificationAlgorithm(); algorithmConstraints = params.getAlgorithmConstraints(); + Collection matchers = params.getSNIMatchers(); + if (matchers != null) { + sniMatchers = params.getSNIMatchers(); + } } /** @@ -312,7 +322,8 @@ class SSLServerSocketImpl extends SSLServerSocket public Socket accept() throws IOException { SSLSocketImpl s = new SSLSocketImpl(sslContext, useServerMode, enabledCipherSuites, doClientAuth, enableSessionCreation, - enabledProtocols, identificationProtocol, algorithmConstraints); + enabledProtocols, identificationProtocol, algorithmConstraints, + sniMatchers); implAccept(s); s.doneConnect(); diff --git a/jdk/src/share/classes/sun/security/ssl/SSLSessionImpl.java b/jdk/src/share/classes/sun/security/ssl/SSLSessionImpl.java index 110fc9ccaee..1c4575f8b0d 100644 --- a/jdk/src/share/classes/sun/security/ssl/SSLSessionImpl.java +++ b/jdk/src/share/classes/sun/security/ssl/SSLSessionImpl.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1996, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1996, 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 @@ -33,6 +33,9 @@ import java.util.Hashtable; import java.util.Vector; import java.util.Arrays; import java.util.Collection; +import java.util.Collections; +import java.util.List; +import java.util.ArrayList; import java.security.Principal; import java.security.PrivateKey; @@ -51,6 +54,7 @@ import javax.net.ssl.SSLSession; import javax.net.ssl.SSLPermission; import javax.net.ssl.SSLException; import javax.net.ssl.ExtendedSSLSession; +import javax.net.ssl.SNIServerName; import javax.security.auth.x500.X500Principal; @@ -111,6 +115,8 @@ final class SSLSessionImpl extends ExtendedSSLSession { private PrivateKey localPrivateKey; private String[] localSupportedSignAlgs; private String[] peerSupportedSignAlgs; + private List requestedServerNames; + // Principals for non-certificate based cipher suites private Principal peerPrincipal; @@ -212,6 +218,10 @@ final class SSLSessionImpl extends ExtendedSSLSession { SignatureAndHashAlgorithm.getAlgorithmNames(algorithms); } + void setRequestedServerNames(List requestedServerNames) { + this.requestedServerNames = new ArrayList<>(requestedServerNames); + } + /** * Set the peer principal. */ @@ -748,6 +758,7 @@ final class SSLSessionImpl extends ExtendedSSLSession { * Gets an array of supported signature algorithms that the local side is * willing to verify. */ + @Override public String[] getLocalSupportedSignatureAlgorithms() { if (localSupportedSignAlgs != null) { return localSupportedSignAlgs.clone(); @@ -760,6 +771,7 @@ final class SSLSessionImpl extends ExtendedSSLSession { * Gets an array of supported signature algorithms that the peer is * able to verify. */ + @Override public String[] getPeerSupportedSignatureAlgorithms() { if (peerSupportedSignAlgs != null) { return peerSupportedSignAlgs.clone(); @@ -768,6 +780,20 @@ final class SSLSessionImpl extends ExtendedSSLSession { return new String[0]; } + /** + * Obtains a List containing all {@link SNIServerName}s + * of the requested Server Name Indication (SNI) extension. + */ + @Override + public List getRequestedServerNames() { + if (requestedServerNames != null && !requestedServerNames.isEmpty()) { + return Collections.unmodifiableList( + requestedServerNames); + } + + return Collections.emptyList(); + } + /** Returns a string representation of this SSL session */ public String toString() { return "[Session-" + sessionCount diff --git a/jdk/src/share/classes/sun/security/ssl/SSLSocketFactoryImpl.java b/jdk/src/share/classes/sun/security/ssl/SSLSocketFactoryImpl.java index 135b46205e8..dc61b7b15ea 100644 --- a/jdk/src/share/classes/sun/security/ssl/SSLSocketFactoryImpl.java +++ b/jdk/src/share/classes/sun/security/ssl/SSLSocketFactoryImpl.java @@ -109,6 +109,16 @@ final public class SSLSocketFactoryImpl extends SSLSocketFactory { return new SSLSocketImpl(context, s, host, port, autoClose); } + @Override + public Socket createSocket(Socket s, InputStream consumed, + boolean autoClose) throws IOException { + if (s == null) { + throw new NullPointerException( + "the existing socket cannot be null"); + } + + return new SSLSocketImpl(context, s, consumed, autoClose); + } /** * Constructs an SSL connection to a server at a specified address diff --git a/jdk/src/share/classes/sun/security/ssl/SSLSocketImpl.java b/jdk/src/share/classes/sun/security/ssl/SSLSocketImpl.java index 49ab309ce0c..2e27d627b7d 100644 --- a/jdk/src/share/classes/sun/security/ssl/SSLSocketImpl.java +++ b/jdk/src/share/classes/sun/security/ssl/SSLSocketImpl.java @@ -36,9 +36,9 @@ import java.security.AlgorithmConstraints; import java.util.*; import java.util.concurrent.TimeUnit; import java.util.concurrent.locks.ReentrantLock; +import java.nio.charset.StandardCharsets; import javax.crypto.BadPaddingException; - import javax.net.ssl.*; /** @@ -198,14 +198,6 @@ final public class SSLSocketImpl extends BaseSSLSocketImpl { private boolean autoClose = true; private AccessControlContext acc; - /* - * We cannot use the hostname resolved from name services. For - * virtual hosting, multiple hostnames may be bound to the same IP - * address, so the hostname resolved from name services is not - * reliable. - */ - private String rawHostname; - // The cipher suites enabled for use on this connection. private CipherSuiteList enabledCipherSuites; @@ -215,6 +207,12 @@ final public class SSLSocketImpl extends BaseSSLSocketImpl { // The cryptographic algorithm constraints private AlgorithmConstraints algorithmConstraints = null; + // The server name indication and matchers + List serverNames = + Collections.emptyList(); + Collection sniMatchers = + Collections.emptyList(); + /* * READ ME * READ ME * READ ME * READ ME * READ ME * READ ME * * IMPORTANT STUFF TO UNDERSTANDING THE SYNCHRONIZATION ISSUES. @@ -397,7 +395,8 @@ final public class SSLSocketImpl extends BaseSSLSocketImpl { throws IOException, UnknownHostException { super(); this.host = host; - this.rawHostname = host; + this.serverNames = + Utilities.addToSNIServerNameList(this.serverNames, this.host); init(context, false); SocketAddress socketAddress = host != null ? new InetSocketAddress(host, port) : @@ -440,7 +439,8 @@ final public class SSLSocketImpl extends BaseSSLSocketImpl { throws IOException, UnknownHostException { super(); this.host = host; - this.rawHostname = host; + this.serverNames = + Utilities.addToSNIServerNameList(this.serverNames, this.host); init(context, false); bind(new InetSocketAddress(localAddr, localPort)); SocketAddress socketAddress = @@ -482,13 +482,15 @@ final public class SSLSocketImpl extends BaseSSLSocketImpl { CipherSuiteList suites, byte clientAuth, boolean sessionCreation, ProtocolList protocols, String identificationProtocol, - AlgorithmConstraints algorithmConstraints) throws IOException { + AlgorithmConstraints algorithmConstraints, + Collection sniMatchers) throws IOException { super(); doClientAuth = clientAuth; enableSessionCreation = sessionCreation; this.identificationProtocol = identificationProtocol; this.algorithmConstraints = algorithmConstraints; + this.sniMatchers = sniMatchers; init(context, serverMode); /* @@ -535,12 +537,35 @@ final public class SSLSocketImpl extends BaseSSLSocketImpl { throw new SocketException("Underlying socket is not connected"); } this.host = host; - this.rawHostname = host; + this.serverNames = + Utilities.addToSNIServerNameList(this.serverNames, this.host); init(context, false); this.autoClose = autoClose; doneConnect(); } + /** + * Creates a server mode {@link Socket} layered over an + * existing connected socket, and is able to read data which has + * already been consumed/removed from the {@link Socket}'s + * underlying {@link InputStream}. + */ + SSLSocketImpl(SSLContextImpl context, Socket sock, + InputStream consumed, boolean autoClose) throws IOException { + super(sock, consumed); + // We always layer over a connected socket + if (!sock.isConnected()) { + throw new SocketException("Underlying socket is not connected"); + } + + // In server mode, it is not necessary to set host and serverNames. + // Otherwise, would require a reverse DNS lookup to get the hostname. + + init(context, true); + this.autoClose = autoClose; + doneConnect(); + } + /** * Initializes the client socket. */ @@ -604,7 +629,7 @@ final public class SSLSocketImpl extends BaseSSLSocketImpl { public void connect(SocketAddress endpoint, int timeout) throws IOException { - if (self != this) { + if (isLayered()) { throw new SocketException("Already connected"); } @@ -628,13 +653,8 @@ final public class SSLSocketImpl extends BaseSSLSocketImpl { * java.net actually connects using the socket "self", else * we get some pretty bizarre failure modes. */ - if (self == this) { - sockInput = super.getInputStream(); - sockOutput = super.getOutputStream(); - } else { - sockInput = self.getInputStream(); - sockOutput = self.getOutputStream(); - } + sockInput = super.getInputStream(); + sockOutput = super.getOutputStream(); /* * Move to handshaking state, with pending session initialized @@ -761,13 +781,14 @@ final public class SSLSocketImpl extends BaseSSLSocketImpl { // For layered, non-autoclose sockets, we are not // able to bring them into a usable state, so we // treat it as fatal error. - if (self != this && !autoClose) { + if (isLayered() && !autoClose) { // Note that the alert description is // specified as -1, so no message will be send // to peer anymore. fatal((byte)(-1), ssle); } else if ((debug != null) && Debug.isOn("ssl")) { - System.out.println(threadName() + + System.out.println( + Thread.currentThread().getName() + ", received Exception: " + ssle); } @@ -935,7 +956,7 @@ final public class SSLSocketImpl extends BaseSSLSocketImpl { boolean handshaking = (getConnectionState() <= cs_HANDSHAKE); boolean rethrow = requireCloseNotify || handshaking; if ((debug != null) && Debug.isOn("ssl")) { - System.out.println(threadName() + + System.out.println(Thread.currentThread().getName() + ", received EOFException: " + (rethrow ? "error" : "ignored")); } @@ -1119,7 +1140,7 @@ final public class SSLSocketImpl extends BaseSSLSocketImpl { // TLS requires that unrecognized records be ignored. // if (debug != null && Debug.isOn("ssl")) { - System.out.println(threadName() + + System.out.println(Thread.currentThread().getName() + ", Received record type: " + r.contentType()); } @@ -1183,7 +1204,7 @@ final public class SSLSocketImpl extends BaseSSLSocketImpl { * for handshaking and bad_record_mac for other records. */ if (debug != null && Debug.isOn("ssl")) { - System.out.println(threadName() + + System.out.println(Thread.currentThread().getName() + ", sequence number extremely close to overflow " + "(2^64-1 packets). Closing connection."); @@ -1200,7 +1221,8 @@ final public class SSLSocketImpl extends BaseSSLSocketImpl { */ if ((type != Record.ct_handshake) && mac.seqNumIsHuge()) { if (debug != null && Debug.isOn("ssl")) { - System.out.println(threadName() + ", request renegotiation " + + System.out.println(Thread.currentThread().getName() + + ", request renegotiation " + "to avoid sequence number overflow"); } @@ -1278,11 +1300,13 @@ final public class SSLSocketImpl extends BaseSSLSocketImpl { enabledProtocols, doClientAuth, protocolVersion, connectionState == cs_HANDSHAKE, secureRenegotiation, clientVerifyData, serverVerifyData); + handshaker.setSNIMatchers(sniMatchers); } else { handshaker = new ClientHandshaker(this, sslContext, enabledProtocols, protocolVersion, connectionState == cs_HANDSHAKE, secureRenegotiation, clientVerifyData, serverVerifyData); + handshaker.setSNIServerNames(serverNames); } handshaker.setEnabledCipherSuites(enabledCipherSuites); handshaker.setEnableSessionCreation(enableSessionCreation); @@ -1509,24 +1533,20 @@ final public class SSLSocketImpl extends BaseSSLSocketImpl { protected void closeSocket() throws IOException { if ((debug != null) && Debug.isOn("ssl")) { - System.out.println(threadName() + ", called closeSocket()"); - } - if (self == this) { - super.close(); - } else { - self.close(); + System.out.println(Thread.currentThread().getName() + + ", called closeSocket()"); } + + super.close(); } private void closeSocket(boolean selfInitiated) throws IOException { if ((debug != null) && Debug.isOn("ssl")) { - System.out.println(threadName() + + System.out.println(Thread.currentThread().getName() + ", called closeSocket(" + selfInitiated + ")"); } - if (self == this) { + if (!isLayered() || autoClose) { super.close(); - } else if (autoClose) { - self.close(); } else if (selfInitiated) { // layered && non-autoclose // read close_notify alert to clear input stream @@ -1549,7 +1569,8 @@ final public class SSLSocketImpl extends BaseSSLSocketImpl { */ public void close() throws IOException { if ((debug != null) && Debug.isOn("ssl")) { - System.out.println(threadName() + ", called close()"); + System.out.println(Thread.currentThread().getName() + + ", called close()"); } closeInternal(true); // caller is initiating close setConnectionState(cs_APP_CLOSED); @@ -1567,8 +1588,8 @@ final public class SSLSocketImpl extends BaseSSLSocketImpl { */ private void closeInternal(boolean selfInitiated) throws IOException { if ((debug != null) && Debug.isOn("ssl")) { - System.out.println(threadName() + ", called closeInternal(" - + selfInitiated + ")"); + System.out.println(Thread.currentThread().getName() + + ", called closeInternal(" + selfInitiated + ")"); } int state = getConnectionState(); @@ -1630,7 +1651,7 @@ final public class SSLSocketImpl extends BaseSSLSocketImpl { // closing since it is already in progress. if (state == cs_SENT_CLOSE) { if (debug != null && Debug.isOn("ssl")) { - System.out.println(threadName() + + System.out.println(Thread.currentThread().getName() + ", close invoked again; state = " + getConnectionState()); } @@ -1653,7 +1674,7 @@ final public class SSLSocketImpl extends BaseSSLSocketImpl { } } if ((debug != null) && Debug.isOn("ssl")) { - System.out.println(threadName() + + System.out.println(Thread.currentThread().getName() + ", after primary close; state = " + getConnectionState()); } @@ -1701,7 +1722,7 @@ final public class SSLSocketImpl extends BaseSSLSocketImpl { */ void waitForClose(boolean rethrow) throws IOException { if (debug != null && Debug.isOn("ssl")) { - System.out.println(threadName() + + System.out.println(Thread.currentThread().getName() + ", waiting for close_notify or alert: state " + getConnectionState()); } @@ -1726,7 +1747,7 @@ final public class SSLSocketImpl extends BaseSSLSocketImpl { inrec = null; } catch (IOException e) { if (debug != null && Debug.isOn("ssl")) { - System.out.println(threadName() + + System.out.println(Thread.currentThread().getName() + ", Exception while waiting for close " +e); } if (rethrow) { @@ -1788,8 +1809,8 @@ final public class SSLSocketImpl extends BaseSSLSocketImpl { synchronized private void handleException(Exception e, boolean resumable) throws IOException { if ((debug != null) && Debug.isOn("ssl")) { - System.out.println(threadName() - + ", handling exception: " + e.toString()); + System.out.println(Thread.currentThread().getName() + + ", handling exception: " + e.toString()); } // don't close the Socket in case of timeouts or interrupts if @@ -1935,7 +1956,7 @@ final public class SSLSocketImpl extends BaseSSLSocketImpl { if (debug != null && (Debug.isOn("record") || Debug.isOn("handshake"))) { synchronized (System.out) { - System.out.print(threadName()); + System.out.print(Thread.currentThread().getName()); System.out.print(", RECV " + protocolVersion + " ALERT: "); if (level == Alerts.alert_fatal) { System.out.print("fatal, "); @@ -2001,7 +2022,7 @@ final public class SSLSocketImpl extends BaseSSLSocketImpl { boolean useDebug = debug != null && Debug.isOn("ssl"); if (useDebug) { synchronized (System.out) { - System.out.print(threadName()); + System.out.print(Thread.currentThread().getName()); System.out.print(", SEND " + protocolVersion + " ALERT: "); if (level == Alerts.alert_fatal) { System.out.print("fatal, "); @@ -2021,7 +2042,7 @@ final public class SSLSocketImpl extends BaseSSLSocketImpl { writeRecord(r); } catch (IOException e) { if (useDebug) { - System.out.println(threadName() + + System.out.println(Thread.currentThread().getName() + ", Exception sending alert: " + e); } } @@ -2118,14 +2139,15 @@ final public class SSLSocketImpl extends BaseSSLSocketImpl { return host; } - synchronized String getRawHostname() { - return rawHostname; - } - // ONLY used by HttpsClient to setup the URI specified hostname + // + // Please NOTE that this method MUST be called before calling to + // SSLSocket.setSSLParameters(). Otherwise, the {@code host} parameter + // may override SNIHostName in the customized server name indication. synchronized public void setHost(String host) { this.host = host; - this.rawHostname = host; + this.serverNames = + Utilities.addToSNIServerNameList(this.serverNames, this.host); } /** @@ -2186,7 +2208,7 @@ final public class SSLSocketImpl extends BaseSSLSocketImpl { } catch (IOException e) { // handshake failed. log and return a nullSession if (debug != null && Debug.isOn("handshake")) { - System.out.println(threadName() + + System.out.println(Thread.currentThread().getName() + ", IOException in getSession(): " + e); } } @@ -2328,7 +2350,7 @@ final public class SSLSocketImpl extends BaseSSLSocketImpl { default: if (debug != null && Debug.isOn("ssl")) { - System.out.println(threadName() + + System.out.println(Thread.currentThread().getName() + ", setUseClientMode() invoked in state = " + connectionState); } @@ -2422,14 +2444,11 @@ final public class SSLSocketImpl extends BaseSSLSocketImpl { */ public void setSoTimeout(int timeout) throws SocketException { if ((debug != null) && Debug.isOn("ssl")) { - System.out.println(threadName() + + System.out.println(Thread.currentThread().getName() + ", setSoTimeout(" + timeout + ") called"); } - if (self == this) { - super.setSoTimeout(timeout); - } else { - self.setSoTimeout(timeout); - } + + super.setSoTimeout(timeout); } /** @@ -2474,6 +2493,8 @@ final public class SSLSocketImpl extends BaseSSLSocketImpl { // the super implementation does not handle the following parameters params.setEndpointIdentificationAlgorithm(identificationProtocol); params.setAlgorithmConstraints(algorithmConstraints); + params.setSNIMatchers(sniMatchers); + params.setServerNames(serverNames); return params; } @@ -2487,9 +2508,25 @@ final public class SSLSocketImpl extends BaseSSLSocketImpl { // the super implementation does not handle the following parameters identificationProtocol = params.getEndpointIdentificationAlgorithm(); algorithmConstraints = params.getAlgorithmConstraints(); + + List sniNames = params.getServerNames(); + if (sniNames != null) { + serverNames = sniNames; + } + + Collection matchers = params.getSNIMatchers(); + if (matchers != null) { + sniMatchers = matchers; + } + if ((handshaker != null) && !handshaker.started()) { handshaker.setIdentificationProtocol(identificationProtocol); handshaker.setAlgorithmConstraints(algorithmConstraints); + if (roleIsServer) { + handshaker.setSNIMatchers(sniMatchers); + } else { + handshaker.setSNIServerNames(serverNames); + } } } @@ -2530,13 +2567,6 @@ final public class SSLSocketImpl extends BaseSSLSocketImpl { } } - /** - * Return the name of the current thread. Utility method. - */ - private static String threadName() { - return Thread.currentThread().getName(); - } - /** * Returns a printable representation of this end of the connection. */ @@ -2548,11 +2578,7 @@ final public class SSLSocketImpl extends BaseSSLSocketImpl { retval.append(sess.getCipherSuite()); retval.append(": "); - if (self == this) { - retval.append(super.toString()); - } else { - retval.append(self.toString()); - } + retval.append(super.toString()); retval.append("]"); return retval.toString(); diff --git a/jdk/src/share/classes/sun/security/ssl/ServerHandshaker.java b/jdk/src/share/classes/sun/security/ssl/ServerHandshaker.java index 8b10f8a9499..475746e9fb7 100644 --- a/jdk/src/share/classes/sun/security/ssl/ServerHandshaker.java +++ b/jdk/src/share/classes/sun/security/ssl/ServerHandshaker.java @@ -276,6 +276,18 @@ final class ServerHandshaker extends Handshaker { mesg.print(System.out); } + // check the server name indication if required + ServerNameExtension clientHelloSNIExt = (ServerNameExtension) + mesg.extensions.get(ExtensionType.EXT_SERVER_NAME); + if (!sniMatchers.isEmpty()) { + // we do not reject client without SNI extension + if (clientHelloSNIExt != null && + !clientHelloSNIExt.isMatched(sniMatchers)) { + fatalSE(Alerts.alert_unrecognized_name, + "Unrecognized server name indication"); + } + } + // Does the message include security renegotiation indication? boolean renegotiationIndicated = false; @@ -474,6 +486,26 @@ final class ServerHandshaker extends Handshaker { } } + // cannot resume session with different server name indication + if (resumingSession) { + List oldServerNames = + previous.getRequestedServerNames(); + if (clientHelloSNIExt != null) { + if (!clientHelloSNIExt.isIdentical(oldServerNames)) { + resumingSession = false; + } + } else if (!oldServerNames.isEmpty()) { + resumingSession = false; + } + + if (!resumingSession && + debug != null && Debug.isOn("handshake")) { + System.out.println( + "The requested server name indication " + + "is not identical to the previous one"); + } + } + if (resumingSession && (doClientAuth == SSLEngineImpl.clauth_required)) { try { @@ -613,6 +645,14 @@ final class ServerHandshaker extends Handshaker { // algorithms in chooseCipherSuite() } + // set the server name indication in the session + List clientHelloSNI = + Collections.emptyList(); + if (clientHelloSNIExt != null) { + clientHelloSNI = clientHelloSNIExt.getServerNames(); + } + session.setRequestedServerNames(clientHelloSNI); + // set the handshake session setHandshakeSessionSE(session); @@ -654,6 +694,15 @@ final class ServerHandshaker extends Handshaker { m1.extensions.add(serverHelloRI); } + if (!sniMatchers.isEmpty() && clientHelloSNIExt != null) { + // When resuming a session, the server MUST NOT include a + // server_name extension in the server hello. + if (!resumingSession) { + ServerNameExtension serverHelloSNI = new ServerNameExtension(); + m1.extensions.add(serverHelloSNI); + } + } + if (debug != null && Debug.isOn("handshake")) { m1.print(System.out); System.out.println("Cipher suite: " + session.getSuite()); diff --git a/jdk/src/share/classes/sun/security/ssl/ServerNameExtension.java b/jdk/src/share/classes/sun/security/ssl/ServerNameExtension.java new file mode 100644 index 00000000000..e99f592b901 --- /dev/null +++ b/jdk/src/share/classes/sun/security/ssl/ServerNameExtension.java @@ -0,0 +1,280 @@ +/* + * Copyright (c) 2006, 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. 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.security.ssl; + +import java.io.IOException; +import java.nio.charset.StandardCharsets; +import java.util.ArrayList; +import java.util.Collection; +import java.util.Collections; +import java.util.List; +import java.util.LinkedHashMap; +import java.util.Map; + +import javax.net.ssl.SNIHostName; +import javax.net.ssl.SNIMatcher; +import javax.net.ssl.SNIServerName; +import javax.net.ssl.SSLProtocolException; +import javax.net.ssl.StandardConstants; + +/* + * [RFC 4366/6066] To facilitate secure connections to servers that host + * multiple 'virtual' servers at a single underlying network address, clients + * MAY include an extension of type "server_name" in the (extended) client + * hello. The "extension_data" field of this extension SHALL contain + * "ServerNameList" where: + * + * struct { + * NameType name_type; + * select (name_type) { + * case host_name: HostName; + * } name; + * } ServerName; + * + * enum { + * host_name(0), (255) + * } NameType; + * + * opaque HostName<1..2^16-1>; + * + * struct { + * ServerName server_name_list<1..2^16-1> + * } ServerNameList; + */ +final class ServerNameExtension extends HelloExtension { + + // For backward compatibility, all future data structures associated with + // new NameTypes MUST begin with a 16-bit length field. + final static int NAME_HEADER_LENGTH = 3; // NameType: 1 byte + // Name length: 2 bytes + private Map sniMap; + private int listLength; // ServerNameList length + + // constructor for ServerHello + ServerNameExtension() throws IOException { + super(ExtensionType.EXT_SERVER_NAME); + + listLength = 0; + sniMap = Collections.emptyMap(); + } + + // constructor for ClientHello + ServerNameExtension(List serverNames) + throws IOException { + super(ExtensionType.EXT_SERVER_NAME); + + listLength = 0; + sniMap = new LinkedHashMap<>(); + for (SNIServerName serverName : serverNames) { + // check for duplicated server name type + if (sniMap.put(serverName.getType(), serverName) != null) { + // unlikely to happen, but in case ... + throw new RuntimeException( + "Duplicated server name of type " + serverName.getType()); + } + + listLength += serverName.getEncoded().length + NAME_HEADER_LENGTH; + } + + // This constructor is used for ClientHello only. Empty list is + // not allowed in client mode. + if (listLength == 0) { + throw new RuntimeException("The ServerNameList cannot be empty"); + } + } + + // constructor for ServerHello for parsing SNI extension + ServerNameExtension(HandshakeInStream s, int len) + throws IOException { + super(ExtensionType.EXT_SERVER_NAME); + + int remains = len; + if (len >= 2) { // "server_name" extension in ClientHello + listLength = s.getInt16(); // ServerNameList length + if (listLength == 0 || listLength + 2 != len) { + throw new SSLProtocolException( + "Invalid " + type + " extension"); + } + + remains -= 2; + sniMap = new LinkedHashMap<>(); + while (remains > 0) { + int code = s.getInt8(); // NameType + + // HostName (length read in getBytes16); + byte[] encoded = s.getBytes16(); + SNIServerName serverName; + switch (code) { + case StandardConstants.SNI_HOST_NAME: + if (encoded.length == 0) { + throw new SSLProtocolException( + "Empty HostName in server name indication"); + } + try { + serverName = new SNIHostName(encoded); + } catch (IllegalArgumentException iae) { + SSLProtocolException spe = new SSLProtocolException( + "Illegal server name, type=host_name(" + + code + "), name=" + + (new String(encoded, StandardCharsets.UTF_8)) + + ", value=" + Debug.toString(encoded)); + spe.initCause(iae); + throw spe; + } + break; + default: + try { + serverName = new UnknownServerName(code, encoded); + } catch (IllegalArgumentException iae) { + SSLProtocolException spe = new SSLProtocolException( + "Illegal server name, type=(" + code + + "), value=" + Debug.toString(encoded)); + spe.initCause(iae); + throw spe; + } + } + // check for duplicated server name type + if (sniMap.put(serverName.getType(), serverName) != null) { + throw new SSLProtocolException( + "Duplicated server name of type " + + serverName.getType()); + } + + remains -= encoded.length + NAME_HEADER_LENGTH; + } + } else if (len == 0) { // "server_name" extension in ServerHello + listLength = 0; + sniMap = Collections.emptyMap(); + } + + if (remains != 0) { + throw new SSLProtocolException("Invalid server_name extension"); + } + } + + List getServerNames() { + if (sniMap != null && !sniMap.isEmpty()) { + return Collections.unmodifiableList( + new ArrayList<>(sniMap.values())); + } + + return Collections.emptyList(); + } + + /* + * Is the extension recognized by the corresponding matcher? + * + * This method is used to check whether the server name indication can + * be recognized by the server name matchers. + * + * Per RFC 6066, if the server understood the ClientHello extension but + * does not recognize the server name, the server SHOULD take one of two + * actions: either abort the handshake by sending a fatal-level + * unrecognized_name(112) alert or continue the handshake. + * + * If there is an instance of SNIMatcher defined for a particular name + * type, it must be used to perform match operations on the server name. + */ + boolean isMatched(Collection matchers) { + if (sniMap != null && !sniMap.isEmpty()) { + for (SNIMatcher matcher : matchers) { + SNIServerName sniName = sniMap.get(matcher.getType()); + if (sniName != null && (!matcher.matches(sniName))) { + return false; + } + } + } + + return true; + } + + /* + * Is the extension is identical to a server name list? + * + * This method is used to check the server name indication during session + * resumption. + * + * Per RFC 6066, when the server is deciding whether or not to accept a + * request to resume a session, the contents of a server_name extension + * MAY be used in the lookup of the session in the session cache. The + * client SHOULD include the same server_name extension in the session + * resumption request as it did in the full handshake that established + * the session. A server that implements this extension MUST NOT accept + * the request to resume the session if the server_name extension contains + * a different name. Instead, it proceeds with a full handshake to + * establish a new session. When resuming a session, the server MUST NOT + * include a server_name extension in the server hello. + */ + boolean isIdentical(List other) { + if (other.size() == sniMap.size()) { + for(SNIServerName sniInOther : other) { + SNIServerName sniName = sniMap.get(sniInOther.getType()); + if (sniName == null || !sniInOther.equals(sniName)) { + return false; + } + } + + return true; + } + + return false; + } + + int length() { + return listLength == 0 ? 4 : 6 + listLength; + } + + void send(HandshakeOutStream s) throws IOException { + s.putInt16(type.id); + if (listLength == 0) { + s.putInt16(listLength); // in ServerHello, empty extension_data + } else { + s.putInt16(listLength + 2); // length of extension_data + s.putInt16(listLength); // length of ServerNameList + + for (SNIServerName sniName : sniMap.values()) { + s.putInt8(sniName.getType()); // server name type + s.putBytes16(sniName.getEncoded()); // server name value + } + } + } + + public String toString() { + StringBuffer buffer = new StringBuffer(); + for (SNIServerName sniName : sniMap.values()) { + buffer.append("[" + sniName + "]"); + } + + return "Extension " + type + ", server_name: " + buffer; + } + + private static class UnknownServerName extends SNIServerName { + UnknownServerName(int code, byte[] encoded) { + super(code, encoded); + } + } + +} diff --git a/jdk/src/share/classes/sun/security/ssl/SignatureAlgorithmsExtension.java b/jdk/src/share/classes/sun/security/ssl/SignatureAlgorithmsExtension.java new file mode 100644 index 00000000000..f45720e0cde --- /dev/null +++ b/jdk/src/share/classes/sun/security/ssl/SignatureAlgorithmsExtension.java @@ -0,0 +1,135 @@ +/* + * Copyright (c) 2006, 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. 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.security.ssl; + +import java.io.IOException; +import java.util.ArrayList; +import java.util.Collection; + +import javax.net.ssl.SSLProtocolException; + +/* + * [RFC5246] The client uses the "signature_algorithms" extension to + * indicate to the server which signature/hash algorithm pairs may be + * used in digital signatures. The "extension_data" field of this + * extension contains a "supported_signature_algorithms" value. + * + * enum { + * none(0), md5(1), sha1(2), sha224(3), sha256(4), sha384(5), + * sha512(6), (255) + * } HashAlgorithm; + * + * enum { anonymous(0), rsa(1), dsa(2), ecdsa(3), (255) } + * SignatureAlgorithm; + * + * struct { + * HashAlgorithm hash; + * SignatureAlgorithm signature; + * } SignatureAndHashAlgorithm; + * + * SignatureAndHashAlgorithm + * supported_signature_algorithms<2..2^16-2>; + */ +final class SignatureAlgorithmsExtension extends HelloExtension { + + private Collection algorithms; + private int algorithmsLen; // length of supported_signature_algorithms + + SignatureAlgorithmsExtension( + Collection signAlgs) { + + super(ExtensionType.EXT_SIGNATURE_ALGORITHMS); + + algorithms = new ArrayList(signAlgs); + algorithmsLen = + SignatureAndHashAlgorithm.sizeInRecord() * algorithms.size(); + } + + SignatureAlgorithmsExtension(HandshakeInStream s, int len) + throws IOException { + super(ExtensionType.EXT_SIGNATURE_ALGORITHMS); + + algorithmsLen = s.getInt16(); + if (algorithmsLen == 0 || algorithmsLen + 2 != len) { + throw new SSLProtocolException("Invalid " + type + " extension"); + } + + algorithms = new ArrayList(); + int remains = algorithmsLen; + int sequence = 0; + while (remains > 1) { // needs at least two bytes + int hash = s.getInt8(); // hash algorithm + int signature = s.getInt8(); // signature algorithm + + SignatureAndHashAlgorithm algorithm = + SignatureAndHashAlgorithm.valueOf(hash, signature, ++sequence); + algorithms.add(algorithm); + remains -= 2; // one byte for hash, one byte for signature + } + + if (remains != 0) { + throw new SSLProtocolException("Invalid server_name extension"); + } + } + + Collection getSignAlgorithms() { + return algorithms; + } + + @Override + int length() { + return 6 + algorithmsLen; + } + + @Override + void send(HandshakeOutStream s) throws IOException { + s.putInt16(type.id); + s.putInt16(algorithmsLen + 2); + s.putInt16(algorithmsLen); + + for (SignatureAndHashAlgorithm algorithm : algorithms) { + s.putInt8(algorithm.getHashValue()); // HashAlgorithm + s.putInt8(algorithm.getSignatureValue()); // SignatureAlgorithm + } + } + + @Override + public String toString() { + StringBuffer buffer = new StringBuffer(); + boolean opened = false; + for (SignatureAndHashAlgorithm signAlg : algorithms) { + if (opened) { + buffer.append(", " + signAlg.getAlgorithmName()); + } else { + buffer.append(signAlg.getAlgorithmName()); + opened = true; + } + } + + return "Extension " + type + ", signature_algorithms: " + buffer; + } +} + diff --git a/jdk/src/share/classes/sun/security/ssl/SunJSSE.java b/jdk/src/share/classes/sun/security/ssl/SunJSSE.java index 16cb35cd42e..6946063077d 100644 --- a/jdk/src/share/classes/sun/security/ssl/SunJSSE.java +++ b/jdk/src/share/classes/sun/security/ssl/SunJSSE.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1999, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1999, 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 @@ -103,7 +103,7 @@ public abstract class SunJSSE extends java.security.Provider { // standard constructor protected SunJSSE() { - super("SunJSSE", 1.7d, info); + super("SunJSSE", 1.8d, info); subclassCheck(); if (Boolean.TRUE.equals(fips)) { throw new ProviderException diff --git a/jdk/src/share/classes/sun/security/ssl/SupportedEllipticCurvesExtension.java b/jdk/src/share/classes/sun/security/ssl/SupportedEllipticCurvesExtension.java new file mode 100644 index 00000000000..bcbb7419533 --- /dev/null +++ b/jdk/src/share/classes/sun/security/ssl/SupportedEllipticCurvesExtension.java @@ -0,0 +1,215 @@ +/* + * Copyright (c) 2006, 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. 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.security.ssl; + +import java.io.IOException; +import java.security.spec.ECParameterSpec; +import java.util.HashMap; +import java.util.Map; + +import javax.net.ssl.SSLProtocolException; + +final class SupportedEllipticCurvesExtension extends HelloExtension { + + // the extension value to send in the ClientHello message + static final SupportedEllipticCurvesExtension DEFAULT; + + private static final boolean fips; + + static { + int[] ids; + fips = SunJSSE.isFIPS(); + if (fips == false) { + ids = new int[] { + // NIST curves first + // prefer NIST P-256, rest in order of increasing key length + 23, 1, 3, 19, 21, 6, 7, 9, 10, 24, 11, 12, 25, 13, 14, + // non-NIST curves + 15, 16, 17, 2, 18, 4, 5, 20, 8, 22, + }; + } else { + ids = new int[] { + // same as above, but allow only NIST curves in FIPS mode + 23, 1, 3, 19, 21, 6, 7, 9, 10, 24, 11, 12, 25, 13, 14, + }; + } + DEFAULT = new SupportedEllipticCurvesExtension(ids); + } + + private final int[] curveIds; + + private SupportedEllipticCurvesExtension(int[] curveIds) { + super(ExtensionType.EXT_ELLIPTIC_CURVES); + this.curveIds = curveIds; + } + + SupportedEllipticCurvesExtension(HandshakeInStream s, int len) + throws IOException { + super(ExtensionType.EXT_ELLIPTIC_CURVES); + int k = s.getInt16(); + if (((len & 1) != 0) || (k + 2 != len)) { + throw new SSLProtocolException("Invalid " + type + " extension"); + } + curveIds = new int[k >> 1]; + for (int i = 0; i < curveIds.length; i++) { + curveIds[i] = s.getInt16(); + } + } + + boolean contains(int index) { + for (int curveId : curveIds) { + if (index == curveId) { + return true; + } + } + return false; + } + + // Return a reference to the internal curveIds array. + // The caller must NOT modify the contents. + int[] curveIds() { + return curveIds; + } + + int length() { + return 6 + (curveIds.length << 1); + } + + void send(HandshakeOutStream s) throws IOException { + s.putInt16(type.id); + int k = curveIds.length << 1; + s.putInt16(k + 2); + s.putInt16(k); + for (int curveId : curveIds) { + s.putInt16(curveId); + } + } + + public String toString() { + StringBuilder sb = new StringBuilder(); + sb.append("Extension " + type + ", curve names: {"); + boolean first = true; + for (int curveId : curveIds) { + if (first) { + first = false; + } else { + sb.append(", "); + } + // first check if it is a known named curve, then try other cases. + String oid = getCurveOid(curveId); + if (oid != null) { + ECParameterSpec spec = JsseJce.getECParameterSpec(oid); + // this toString() output will look nice for the current + // implementation of the ECParameterSpec class in the Sun + // provider, but may not look good for other implementations. + if (spec != null) { + sb.append(spec.toString().split(" ")[0]); + } else { + sb.append(oid); + } + } else if (curveId == ARBITRARY_PRIME) { + sb.append("arbitrary_explicit_prime_curves"); + } else if (curveId == ARBITRARY_CHAR2) { + sb.append("arbitrary_explicit_char2_curves"); + } else { + sb.append("unknown curve " + curveId); + } + } + sb.append("}"); + return sb.toString(); + } + + // Test whether we support the curve with the given index. + static boolean isSupported(int index) { + if ((index <= 0) || (index >= NAMED_CURVE_OID_TABLE.length)) { + return false; + } + if (fips == false) { + // in non-FIPS mode, we support all valid indices + return true; + } + return DEFAULT.contains(index); + } + + static int getCurveIndex(ECParameterSpec params) { + String oid = JsseJce.getNamedCurveOid(params); + if (oid == null) { + return -1; + } + Integer n = curveIndices.get(oid); + return (n == null) ? -1 : n; + } + + static String getCurveOid(int index) { + if ((index > 0) && (index < NAMED_CURVE_OID_TABLE.length)) { + return NAMED_CURVE_OID_TABLE[index]; + } + return null; + } + + private final static int ARBITRARY_PRIME = 0xff01; + private final static int ARBITRARY_CHAR2 = 0xff02; + + // See sun.security.ec.NamedCurve for the OIDs + private final static String[] NAMED_CURVE_OID_TABLE = new String[] { + null, // (0) unused + "1.3.132.0.1", // (1) sect163k1, NIST K-163 + "1.3.132.0.2", // (2) sect163r1 + "1.3.132.0.15", // (3) sect163r2, NIST B-163 + "1.3.132.0.24", // (4) sect193r1 + "1.3.132.0.25", // (5) sect193r2 + "1.3.132.0.26", // (6) sect233k1, NIST K-233 + "1.3.132.0.27", // (7) sect233r1, NIST B-233 + "1.3.132.0.3", // (8) sect239k1 + "1.3.132.0.16", // (9) sect283k1, NIST K-283 + "1.3.132.0.17", // (10) sect283r1, NIST B-283 + "1.3.132.0.36", // (11) sect409k1, NIST K-409 + "1.3.132.0.37", // (12) sect409r1, NIST B-409 + "1.3.132.0.38", // (13) sect571k1, NIST K-571 + "1.3.132.0.39", // (14) sect571r1, NIST B-571 + "1.3.132.0.9", // (15) secp160k1 + "1.3.132.0.8", // (16) secp160r1 + "1.3.132.0.30", // (17) secp160r2 + "1.3.132.0.31", // (18) secp192k1 + "1.2.840.10045.3.1.1", // (19) secp192r1, NIST P-192 + "1.3.132.0.32", // (20) secp224k1 + "1.3.132.0.33", // (21) secp224r1, NIST P-224 + "1.3.132.0.10", // (22) secp256k1 + "1.2.840.10045.3.1.7", // (23) secp256r1, NIST P-256 + "1.3.132.0.34", // (24) secp384r1, NIST P-384 + "1.3.132.0.35", // (25) secp521r1, NIST P-521 + }; + + private final static Map curveIndices; + + static { + curveIndices = new HashMap(); + for (int i = 1; i < NAMED_CURVE_OID_TABLE.length; i++) { + curveIndices.put(NAMED_CURVE_OID_TABLE[i], i); + } + } + +} diff --git a/jdk/src/share/classes/sun/security/ssl/SupportedEllipticPointFormatsExtension.java b/jdk/src/share/classes/sun/security/ssl/SupportedEllipticPointFormatsExtension.java new file mode 100644 index 00000000000..86000238a88 --- /dev/null +++ b/jdk/src/share/classes/sun/security/ssl/SupportedEllipticPointFormatsExtension.java @@ -0,0 +1,101 @@ +/* + * Copyright (c) 2006, 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. 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.security.ssl; + +import java.io.IOException; +import java.util.ArrayList; +import java.util.List; + +import javax.net.ssl.SSLProtocolException; + +final class SupportedEllipticPointFormatsExtension extends HelloExtension { + + final static int FMT_UNCOMPRESSED = 0; + final static int FMT_ANSIX962_COMPRESSED_PRIME = 1; + final static int FMT_ANSIX962_COMPRESSED_CHAR2 = 2; + + static final HelloExtension DEFAULT = + new SupportedEllipticPointFormatsExtension( + new byte[] {FMT_UNCOMPRESSED}); + + private final byte[] formats; + + private SupportedEllipticPointFormatsExtension(byte[] formats) { + super(ExtensionType.EXT_EC_POINT_FORMATS); + this.formats = formats; + } + + SupportedEllipticPointFormatsExtension(HandshakeInStream s, int len) + throws IOException { + super(ExtensionType.EXT_EC_POINT_FORMATS); + formats = s.getBytes8(); + // RFC 4492 says uncompressed points must always be supported. + // Check just to make sure. + boolean uncompressed = false; + for (int format : formats) { + if (format == FMT_UNCOMPRESSED) { + uncompressed = true; + break; + } + } + if (uncompressed == false) { + throw new SSLProtocolException + ("Peer does not support uncompressed points"); + } + } + + int length() { + return 5 + formats.length; + } + + void send(HandshakeOutStream s) throws IOException { + s.putInt16(type.id); + s.putInt16(formats.length + 1); + s.putBytes8(formats); + } + + private static String toString(byte format) { + int f = format & 0xff; + switch (f) { + case FMT_UNCOMPRESSED: + return "uncompressed"; + case FMT_ANSIX962_COMPRESSED_PRIME: + return "ansiX962_compressed_prime"; + case FMT_ANSIX962_COMPRESSED_CHAR2: + return "ansiX962_compressed_char2"; + default: + return "unknown-" + f; + } + } + + public String toString() { + List list = new ArrayList(); + for (byte format : formats) { + list.add(toString(format)); + } + return "Extension " + type + ", formats: " + list; + } +} diff --git a/jdk/src/share/classes/sun/security/ssl/UnknownExtension.java b/jdk/src/share/classes/sun/security/ssl/UnknownExtension.java new file mode 100644 index 00000000000..0f59f45dbc7 --- /dev/null +++ b/jdk/src/share/classes/sun/security/ssl/UnknownExtension.java @@ -0,0 +1,57 @@ +/* + * Copyright (c) 2006, 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. 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.security.ssl; + +import java.io.IOException; + +final class UnknownExtension extends HelloExtension { + + private final byte[] data; + + UnknownExtension(HandshakeInStream s, int len, ExtensionType type) + throws IOException { + super(type); + data = new byte[len]; + // s.read() does not handle 0-length arrays. + if (len != 0) { + s.read(data); + } + } + + int length() { + return 4 + data.length; + } + + void send(HandshakeOutStream s) throws IOException { + s.putInt16(type.id); + s.putBytes16(data); + } + + public String toString() { + return "Unsupported extension " + type + ", data: " + + Debug.toString(data); + } +} diff --git a/jdk/src/share/classes/sun/security/ssl/Utilities.java b/jdk/src/share/classes/sun/security/ssl/Utilities.java new file mode 100644 index 00000000000..aefb02c9a19 --- /dev/null +++ b/jdk/src/share/classes/sun/security/ssl/Utilities.java @@ -0,0 +1,115 @@ +/* + * Copyright (c) 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. 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.security.ssl; + +import javax.net.ssl.*; +import java.util.*; +import sun.net.util.IPAddressUtil; + +/** + * A utility class to share the static methods. + */ +final class Utilities { + /** + * Puts {@code hostname} into the {@code serverNames} list. + *

+ * If the {@code serverNames} does not look like a legal FQDN, it will + * not be put into the returned list. + *

+ * Note that the returned list does not allow duplicated name type. + * + * @return a list of {@link SNIServerName} + */ + static List addToSNIServerNameList( + List serverNames, String hostname) { + + SNIHostName sniHostName = rawToSNIHostName(hostname); + if (sniHostName == null) { + return serverNames; + } + + int size = serverNames.size(); + List sniList = (size != 0) ? + new ArrayList(serverNames) : + new ArrayList(1); + + boolean reset = false; + for (int i = 0; i < size; i++) { + SNIServerName serverName = sniList.get(i); + if (serverName.getType() == StandardConstants.SNI_HOST_NAME) { + sniList.set(i, sniHostName); + if (Debug.isOn("ssl")) { + System.out.println(Thread.currentThread().getName() + + ", the previous server name in SNI (" + serverName + + ") was replaced with (" + sniHostName + ")"); + } + reset = true; + break; + } + } + + if (!reset) { + sniList.add(sniHostName); + } + + return Collections.unmodifiableList(sniList); + } + + /** + * Converts string hostname to {@code SNIHostName}. + *

+ * Note that to check whether a hostname is a valid domain name, we cannot + * use the hostname resolved from name services. For virtual hosting, + * multiple hostnames may be bound to the same IP address, so the hostname + * resolved from name services is not always reliable. + * + * @param hostname + * the raw hostname + * @return an instance of {@link SNIHostName}, or null if the hostname does + * not look like a FQDN + */ + private static SNIHostName rawToSNIHostName(String hostname) { + SNIHostName sniHostName = null; + if (hostname != null && hostname.indexOf('.') > 0 && + !hostname.endsWith(".") && + !IPAddressUtil.isIPv4LiteralAddress(hostname) && + !IPAddressUtil.isIPv6LiteralAddress(hostname)) { + + try { + sniHostName = new SNIHostName(hostname); + } catch (IllegalArgumentException iae) { + // don't bother to handle illegal host_name + if (Debug.isOn("ssl")) { + System.out.println(Thread.currentThread().getName() + + ", \"" + hostname + "\" " + + "is not a legal HostName for server name indication"); + } + } + } + + return sniHostName; + } +} diff --git a/jdk/src/share/classes/sun/security/ssl/X509KeyManagerImpl.java b/jdk/src/share/classes/sun/security/ssl/X509KeyManagerImpl.java index 45e6c997586..4b8a101f529 100644 --- a/jdk/src/share/classes/sun/security/ssl/X509KeyManagerImpl.java +++ b/jdk/src/share/classes/sun/security/ssl/X509KeyManagerImpl.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2004, 2011, Oracle and/or its affiliates. All rights reserved. + * 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 @@ -128,13 +128,35 @@ final class X509KeyManagerImpl extends X509ExtendedKeyManager public String chooseServerAlias(String keyType, Principal[] issuers, Socket socket) { return chooseAlias(getKeyTypes(keyType), issuers, CheckType.SERVER, - getAlgorithmConstraints(socket)); + getAlgorithmConstraints(socket), + X509TrustManagerImpl.getRequestedServerNames(socket), + "HTTPS"); // The SNI HostName is a fully qualified domain name. + // The certificate selection scheme for SNI HostName + // is similar to HTTPS endpoint identification scheme + // implemented in this provider. + // + // Using HTTPS endpoint identification scheme to guide + // the selection of an appropriate authentication + // certificate according to requested SNI extension. + // + // It is not a really HTTPS endpoint identification. } public String chooseEngineServerAlias(String keyType, Principal[] issuers, SSLEngine engine) { return chooseAlias(getKeyTypes(keyType), issuers, CheckType.SERVER, - getAlgorithmConstraints(engine)); + getAlgorithmConstraints(engine), + X509TrustManagerImpl.getRequestedServerNames(engine), + "HTTPS"); // The SNI HostName is a fully qualified domain name. + // The certificate selection scheme for SNI HostName + // is similar to HTTPS endpoint identification scheme + // implemented in this provider. + // + // Using HTTPS endpoint identification scheme to guide + // the selection of an appropriate authentication + // certificate according to requested SNI extension. + // + // It is not a really HTTPS endpoint identification. } public String[] getClientAliases(String keyType, Principal[] issuers) { @@ -321,8 +343,8 @@ final class X509KeyManagerImpl extends X509ExtendedKeyManager * The algorithm we use is: * . scan through all the aliases in all builders in order * . as soon as we find a perfect match, return - * (i.e. a match with a cert that has appropriate key usage - * and is not expired). + * (i.e. a match with a cert that has appropriate key usage, + * qualified endpoint identity, and is not expired). * . if we do not find a perfect match, keep looping and remember * the imperfect matches * . at the end, sort the imperfect matches. we prefer expired certs @@ -331,6 +353,15 @@ final class X509KeyManagerImpl extends X509ExtendedKeyManager */ private String chooseAlias(List keyTypeList, Principal[] issuers, CheckType checkType, AlgorithmConstraints constraints) { + + return chooseAlias(keyTypeList, issuers, + checkType, constraints, null, null); + } + + private String chooseAlias(List keyTypeList, Principal[] issuers, + CheckType checkType, AlgorithmConstraints constraints, + List requestedServerNames, String idAlgorithm) { + if (keyTypeList == null || keyTypeList.isEmpty()) { return null; } @@ -340,7 +371,8 @@ final class X509KeyManagerImpl extends X509ExtendedKeyManager for (int i = 0, n = builders.size(); i < n; i++) { try { List results = getAliases(i, keyTypeList, - issuerSet, false, checkType, constraints); + issuerSet, false, checkType, constraints, + requestedServerNames, idAlgorithm); if (results != null) { // the results will either be a single perfect match // or 1 or more imperfect matches @@ -394,7 +426,8 @@ final class X509KeyManagerImpl extends X509ExtendedKeyManager for (int i = 0, n = builders.size(); i < n; i++) { try { List results = getAliases(i, keyTypeList, - issuerSet, true, checkType, constraints); + issuerSet, true, checkType, constraints, + null, null); if (results != null) { if (allResults == null) { allResults = new ArrayList(); @@ -504,7 +537,9 @@ final class X509KeyManagerImpl extends X509ExtendedKeyManager // first check extensions, if they match, check expiration // note: we may want to move this code into the sun.security.validator // package - CheckResult check(X509Certificate cert, Date date) { + CheckResult check(X509Certificate cert, Date date, + List serverNames, String idAlgorithm) { + if (this == NONE) { return CheckResult.OK; } @@ -553,11 +588,11 @@ final class X509KeyManagerImpl extends X509ExtendedKeyManager return CheckResult.EXTENSION_MISMATCH; } // For servers, also require key agreement. - // This is not totally accurate as the keyAgreement bit - // is only necessary for static ECDH key exchange and - // not ephemeral ECDH. We leave it in for now until - // there are signs that this check causes problems - // for real world EC certificates. + // This is not totally accurate as the keyAgreement + // bit is only necessary for static ECDH key + // exchange and not ephemeral ECDH. We leave it in + // for now until there are signs that this check + // causes problems for real world EC certificates. if ((this == SERVER) && (getBit(ku, 4) == false)) { return CheckResult.EXTENSION_MISMATCH; } @@ -571,10 +606,50 @@ final class X509KeyManagerImpl extends X509ExtendedKeyManager try { cert.checkValidity(date); - return CheckResult.OK; } catch (CertificateException e) { return CheckResult.EXPIRED; } + + if (serverNames != null && !serverNames.isEmpty()) { + for (SNIServerName serverName : serverNames) { + if (serverName.getType() == + StandardConstants.SNI_HOST_NAME) { + if (!(serverName instanceof SNIHostName)) { + try { + serverName = + new SNIHostName(serverName.getEncoded()); + } catch (IllegalArgumentException iae) { + // unlikely to happen, just in case ... + if (useDebug) { + debug.println( + "Illegal server name: " + serverName); + } + + return CheckResult.INSENSITIVE; + } + } + String hostname = + ((SNIHostName)serverName).getAsciiName(); + + try { + X509TrustManagerImpl.checkIdentity(hostname, + cert, idAlgorithm); + } catch (CertificateException e) { + if (useDebug) { + debug.println( + "Certificate identity does not match " + + "Server Name Inidication (SNI): " + + hostname); + } + return CheckResult.INSENSITIVE; + } + + break; + } + } + } + + return CheckResult.OK; } } @@ -583,6 +658,7 @@ final class X509KeyManagerImpl extends X509ExtendedKeyManager // for sorting, i.e. OK is best, followed by EXPIRED and EXTENSION_MISMATCH private static enum CheckResult { OK, // ok or not checked + INSENSITIVE, // server name indication insensitive EXPIRED, // extensions valid but cert expired EXTENSION_MISMATCH, // extensions invalid (expiration not checked) } @@ -616,7 +692,10 @@ final class X509KeyManagerImpl extends X509ExtendedKeyManager private List getAliases(int builderIndex, List keyTypes, Set issuerSet, boolean findAll, CheckType checkType, - AlgorithmConstraints constraints) throws Exception { + AlgorithmConstraints constraints, + List requestedServerNames, + String idAlgorithm) throws Exception { + Builder builder = builders.get(builderIndex); KeyStore ks = builder.getKeyStore(); List results = null; @@ -699,7 +778,8 @@ final class X509KeyManagerImpl extends X509ExtendedKeyManager date = new Date(); } CheckResult checkResult = - checkType.check((X509Certificate)chain[0], date); + checkType.check((X509Certificate)chain[0], date, + requestedServerNames, idAlgorithm); EntryStatus status = new EntryStatus(builderIndex, keyIndex, alias, chain, checkResult); diff --git a/jdk/src/share/classes/sun/security/ssl/X509TrustManagerImpl.java b/jdk/src/share/classes/sun/security/ssl/X509TrustManagerImpl.java index d38e727010c..13bbb18b8de 100644 --- a/jdk/src/share/classes/sun/security/ssl/X509TrustManagerImpl.java +++ b/jdk/src/share/classes/sun/security/ssl/X509TrustManagerImpl.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 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 @@ -28,15 +28,14 @@ package sun.security.ssl; import java.net.Socket; import javax.net.ssl.SSLSession; +import java.nio.charset.StandardCharsets; import java.util.*; import java.security.*; import java.security.cert.*; - import javax.net.ssl.*; import sun.security.validator.*; - import sun.security.util.HostnameChecker; /** @@ -199,8 +198,8 @@ final class X509TrustManagerImpl extends X509ExtendedTrustManager String identityAlg = sslSocket.getSSLParameters(). getEndpointIdentificationAlgorithm(); if (identityAlg != null && identityAlg.length() != 0) { - String hostname = session.getPeerHost(); - checkIdentity(hostname, chain[0], identityAlg); + checkIdentity(session, chain[0], identityAlg, isClient, + getRequestedServerNames(socket)); } // create the algorithm constraints @@ -251,8 +250,8 @@ final class X509TrustManagerImpl extends X509ExtendedTrustManager String identityAlg = engine.getSSLParameters(). getEndpointIdentificationAlgorithm(); if (identityAlg != null && identityAlg.length() != 0) { - String hostname = session.getPeerHost(); - checkIdentity(hostname, chain[0], identityAlg); + checkIdentity(session, chain[0], identityAlg, isClient, + getRequestedServerNames(engine)); } // create the algorithm constraints @@ -329,6 +328,117 @@ final class X509TrustManagerImpl extends X509ExtendedTrustManager } } + // Get string representation of HostName from a list of server names. + // + // We are only accepting host_name name type in the list. + private static String getHostNameInSNI(List sniNames) { + + SNIHostName hostname = null; + for (SNIServerName sniName : sniNames) { + if (sniName.getType() != StandardConstants.SNI_HOST_NAME) { + continue; + } + + if (sniName instanceof SNIHostName) { + hostname = (SNIHostName)sniName; + } else { + try { + hostname = new SNIHostName(sniName.getEncoded()); + } catch (IllegalArgumentException iae) { + // unlikely to happen, just in case ... + if ((debug != null) && Debug.isOn("trustmanager")) { + byte[] encoded = hostname.getEncoded(); + System.out.println("Illegal server name: " + sniName); + } + } + } + + // no more than server name of the same name type + break; + } + + if (hostname != null) { + return hostname.getAsciiName(); + } + + return null; + } + + // Also used by X509KeyManagerImpl + static List getRequestedServerNames(Socket socket) { + if (socket != null && socket.isConnected() && + socket instanceof SSLSocket) { + + SSLSocket sslSocket = (SSLSocket)socket; + SSLSession session = sslSocket.getHandshakeSession(); + + if (session != null && (session instanceof ExtendedSSLSession)) { + ExtendedSSLSession extSession = (ExtendedSSLSession)session; + return extSession.getRequestedServerNames(); + } + } + + return Collections.emptyList(); + } + + // Also used by X509KeyManagerImpl + static List getRequestedServerNames(SSLEngine engine) { + if (engine != null) { + SSLSession session = engine.getHandshakeSession(); + + if (session != null && (session instanceof ExtendedSSLSession)) { + ExtendedSSLSession extSession = (ExtendedSSLSession)session; + return extSession.getRequestedServerNames(); + } + } + + return Collections.emptyList(); + } + + /* + * Per RFC 6066, if an application negotiates a server name using an + * application protocol and then upgrades to TLS, and if a server_name + * extension is sent, then the extension SHOULD contain the same name + * that was negotiated in the application protocol. If the server_name + * is established in the TLS session handshake, the client SHOULD NOT + * attempt to request a different server name at the application layer. + * + * According to the above spec, we only need to check either the identity + * in server_name extension or the peer host of the connection. Peer host + * is not always a reliable fully qualified domain name. The HostName in + * server_name extension is more reliable than peer host. So we prefer + * the identity checking aginst the server_name extension if present, and + * may failove to peer host checking. + */ + private static void checkIdentity(SSLSession session, + X509Certificate cert, + String algorithm, + boolean isClient, + List sniNames) throws CertificateException { + + boolean identifiable = false; + String peerHost = session.getPeerHost(); + if (isClient) { + String hostname = getHostNameInSNI(sniNames); + if (hostname != null) { + try { + checkIdentity(hostname, cert, algorithm); + identifiable = true; + } catch (CertificateException ce) { + if (hostname.equalsIgnoreCase(peerHost)) { + throw ce; + } + + // otherwisw, failover to check peer host + } + } + } + + if (!identifiable) { + checkIdentity(peerHost, cert, algorithm); + } + } + /* * Identify the peer by its certificate and hostname. * diff --git a/jdk/src/share/classes/sun/security/ssl/krb5/KerberosClientKeyExchangeImpl.java b/jdk/src/share/classes/sun/security/ssl/krb5/KerberosClientKeyExchangeImpl.java index cde473fcf1d..623c8efddd3 100644 --- a/jdk/src/share/classes/sun/security/ssl/krb5/KerberosClientKeyExchangeImpl.java +++ b/jdk/src/share/classes/sun/security/ssl/krb5/KerberosClientKeyExchangeImpl.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 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 diff --git a/jdk/src/share/classes/sun/security/tools/KeyStoreUtil.java b/jdk/src/share/classes/sun/security/tools/KeyStoreUtil.java index 679a24739fa..ecfba5feee2 100644 --- a/jdk/src/share/classes/sun/security/tools/KeyStoreUtil.java +++ b/jdk/src/share/classes/sun/security/tools/KeyStoreUtil.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2005, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2005, 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 @@ -25,6 +25,18 @@ package sun.security.tools; +import java.io.BufferedReader; +import java.io.File; +import java.io.FileInputStream; +import java.io.IOException; +import java.io.InputStreamReader; + +import java.net.URL; + +import java.security.KeyStore; + +import java.text.Collator; + import java.util.Locale; /** @@ -34,18 +46,17 @@ import java.util.Locale; */ public class KeyStoreUtil { - // Class and methods marked as public so that they can be - // accessed by JarSigner, which although lies in a package - // with the same name, but bundled in tools.jar and loaded - // by another class loader, hence in a different *runtime* - // package. - // - // See JVM Spec, 5.3 and 5.4.4 - private KeyStoreUtil() { // this class is not meant to be instantiated } + private static final String JKS = "jks"; + + private static final Collator collator = Collator.getInstance(); + static { + // this is for case insensitive string comparisons + collator.setStrength(Collator.PRIMARY); + }; /** * Returns true if KeyStore has a password. This is true except for @@ -68,4 +79,76 @@ public class KeyStoreUtil { return storetype.toUpperCase(Locale.ENGLISH); } } + + /** + * Returns the keystore with the configured CA certificates. + */ + public static KeyStore getCacertsKeyStore() + throws Exception + { + String sep = File.separator; + File file = new File(System.getProperty("java.home") + sep + + "lib" + sep + "security" + sep + + "cacerts"); + if (!file.exists()) { + return null; + } + KeyStore caks = null; + try (FileInputStream fis = new FileInputStream(file)) { + caks = KeyStore.getInstance(JKS); + caks.load(fis, null); + } + return caks; + } + + public static char[] getPassWithModifier(String modifier, String arg, + java.util.ResourceBundle rb) { + if (modifier == null) { + return arg.toCharArray(); + } else if (collator.compare(modifier, "env") == 0) { + String value = System.getenv(arg); + if (value == null) { + System.err.println(rb.getString( + "Cannot.find.environment.variable.") + arg); + return null; + } else { + return value.toCharArray(); + } + } else if (collator.compare(modifier, "file") == 0) { + try { + URL url = null; + try { + url = new URL(arg); + } catch (java.net.MalformedURLException mue) { + File f = new File(arg); + if (f.exists()) { + url = f.toURI().toURL(); + } else { + System.err.println(rb.getString( + "Cannot.find.file.") + arg); + return null; + } + } + + try (BufferedReader br = + new BufferedReader(new InputStreamReader( + url.openStream()))) { + String value = br.readLine(); + + if (value == null) { + return new char[0]; + } + + return value.toCharArray(); + } + } catch (IOException ioe) { + System.err.println(ioe); + return null; + } + } else { + System.err.println(rb.getString("Unknown.password.type.") + + modifier); + return null; + } + } } diff --git a/jdk/src/share/classes/sun/security/tools/JarSigner.java b/jdk/src/share/classes/sun/security/tools/jarsigner/Main.java similarity index 99% rename from jdk/src/share/classes/sun/security/tools/JarSigner.java rename to jdk/src/share/classes/sun/security/tools/jarsigner/Main.java index 31dfbcebf4e..98f3ec28a20 100644 --- a/jdk/src/share/classes/sun/security/tools/JarSigner.java +++ b/jdk/src/share/classes/sun/security/tools/jarsigner/Main.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 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 @@ -23,7 +23,7 @@ * questions. */ -package sun.security.tools; +package sun.security.tools.jarsigner; import java.io.*; import java.util.*; @@ -53,6 +53,8 @@ import java.security.cert.CertificateNotYetValidException; import java.security.cert.PKIXParameters; import java.security.cert.TrustAnchor; import java.util.Map.Entry; +import sun.security.tools.KeyStoreUtil; +import sun.security.tools.PathList; import sun.security.x509.*; import sun.security.util.*; import sun.misc.BASE64Encoder; @@ -74,12 +76,12 @@ import sun.misc.BASE64Encoder; * @author Jan Luehe */ -public class JarSigner { +public class Main { // for i18n private static final java.util.ResourceBundle rb = java.util.ResourceBundle.getBundle - ("sun.security.tools.JarSignerResources"); + ("sun.security.tools.jarsigner.Resources"); private static final Collator collator = Collator.getInstance(); static { // this is for case insensitive string comparisions @@ -101,7 +103,7 @@ public class JarSigner { // Attention: // This is the entry that get launched by the security tool jarsigner. public static void main(String args[]) throws Exception { - JarSigner js = new JarSigner(); + Main js = new Main(); js.run(args); } @@ -461,7 +463,7 @@ public class JarSigner { } static char[] getPass(String modifier, String arg) { - char[] output = KeyTool.getPassWithModifier(modifier, arg); + char[] output = KeyStoreUtil.getPassWithModifier(modifier, arg, rb); if (output != null) return output; usage(); return null; // Useless, usage() already exit @@ -1579,7 +1581,7 @@ public class JarSigner { validator = CertPathValidator.getInstance("PKIX"); Set tas = new HashSet<>(); try { - KeyStore caks = KeyTool.getCacertsKeyStore(); + KeyStore caks = KeyStoreUtil.getCacertsKeyStore(); if (caks != null) { Enumeration aliases = caks.aliases(); while (aliases.hasMoreElements()) { diff --git a/jdk/src/share/classes/sun/security/tools/JarSignerResources.java b/jdk/src/share/classes/sun/security/tools/jarsigner/Resources.java similarity index 97% rename from jdk/src/share/classes/sun/security/tools/JarSignerResources.java rename to jdk/src/share/classes/sun/security/tools/jarsigner/Resources.java index cea8b253927..9c59b5085c8 100644 --- a/jdk/src/share/classes/sun/security/tools/JarSignerResources.java +++ b/jdk/src/share/classes/sun/security/tools/jarsigner/Resources.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2000, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2000, 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 @@ -23,14 +23,14 @@ * questions. */ -package sun.security.tools; +package sun.security.tools.jarsigner; /** *

This class represents the ResourceBundle * for JarSigner. * */ -public class JarSignerResources extends java.util.ListResourceBundle { +public class Resources extends java.util.ListResourceBundle { private static final Object[][] contents = { @@ -227,6 +227,10 @@ public class JarSignerResources extends java.util.ListResourceBundle { "The signer's certificate chain is not validated."}, {"This.jar.contains.entries.whose.certificate.chain.is.not.validated.", "This jar contains entries whose certificate chain is not validated."}, + {"Unknown.password.type.", "Unknown password type: "}, + {"Cannot.find.environment.variable.", + "Cannot find environment variable: "}, + {"Cannot.find.file.", "Cannot find file: "}, }; /** @@ -236,6 +240,7 @@ public class JarSignerResources extends java.util.ListResourceBundle { * * @return the contents of this ResourceBundle. */ + @Override public Object[][] getContents() { return contents; } diff --git a/jdk/src/share/classes/sun/security/tools/JarSignerResources_ja.java b/jdk/src/share/classes/sun/security/tools/jarsigner/Resources_ja.java similarity index 97% rename from jdk/src/share/classes/sun/security/tools/JarSignerResources_ja.java rename to jdk/src/share/classes/sun/security/tools/jarsigner/Resources_ja.java index 05bf83c2da4..ef68a72ccac 100644 --- a/jdk/src/share/classes/sun/security/tools/JarSignerResources_ja.java +++ b/jdk/src/share/classes/sun/security/tools/jarsigner/Resources_ja.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2000, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2000, 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 @@ -23,14 +23,14 @@ * questions. */ -package sun.security.tools; +package sun.security.tools.jarsigner; /** *

This class represents the ResourceBundle * for JarSigner. * */ -public class JarSignerResources_ja extends java.util.ListResourceBundle { +public class Resources_ja extends java.util.ListResourceBundle { private static final Object[][] contents = { @@ -225,6 +225,10 @@ public class JarSignerResources_ja extends java.util.ListResourceBundle { "\u7F72\u540D\u8005\u306E\u8A3C\u660E\u66F8\u30C1\u30A7\u30FC\u30F3\u304C\u307E\u3060\u691C\u8A3C\u3055\u308C\u3066\u3044\u307E\u305B\u3093\u3002"}, {"This.jar.contains.entries.whose.certificate.chain.is.not.validated.", "\u3053\u306Ejar\u306B\u306F\u3001\u8A3C\u660E\u66F8\u30C1\u30A7\u30FC\u30F3\u304C\u307E\u3060\u691C\u8A3C\u3055\u308C\u3066\u3044\u306A\u3044\u30A8\u30F3\u30C8\u30EA\u304C\u542B\u307E\u308C\u3066\u3044\u307E\u3059\u3002"}, + {"Unknown.password.type.", "\u4E0D\u660E\u306A\u30D1\u30B9\u30EF\u30FC\u30C9\u30FB\u30BF\u30A4\u30D7: "}, + {"Cannot.find.environment.variable.", + "\u74B0\u5883\u5909\u6570\u304C\u898B\u3064\u304B\u308A\u307E\u305B\u3093: "}, + {"Cannot.find.file.", "\u30D5\u30A1\u30A4\u30EB\u304C\u898B\u3064\u304B\u308A\u307E\u305B\u3093: "}, }; /** @@ -234,6 +238,7 @@ public class JarSignerResources_ja extends java.util.ListResourceBundle { * * @return the contents of this ResourceBundle. */ + @Override public Object[][] getContents() { return contents; } diff --git a/jdk/src/share/classes/sun/security/tools/JarSignerResources_zh_CN.java b/jdk/src/share/classes/sun/security/tools/jarsigner/Resources_zh_CN.java similarity index 96% rename from jdk/src/share/classes/sun/security/tools/JarSignerResources_zh_CN.java rename to jdk/src/share/classes/sun/security/tools/jarsigner/Resources_zh_CN.java index 48b6c7303dd..50e22a516d8 100644 --- a/jdk/src/share/classes/sun/security/tools/JarSignerResources_zh_CN.java +++ b/jdk/src/share/classes/sun/security/tools/jarsigner/Resources_zh_CN.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2000, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2000, 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 @@ -23,14 +23,14 @@ * questions. */ -package sun.security.tools; +package sun.security.tools.jarsigner; /** *

This class represents the ResourceBundle * for JarSigner. * */ -public class JarSignerResources_zh_CN extends java.util.ListResourceBundle { +public class Resources_zh_CN extends java.util.ListResourceBundle { private static final Object[][] contents = { @@ -225,6 +225,11 @@ public class JarSignerResources_zh_CN extends java.util.ListResourceBundle { "\u7B7E\u540D\u8005\u7684\u8BC1\u4E66\u94FE\u672A\u9A8C\u8BC1\u3002"}, {"This.jar.contains.entries.whose.certificate.chain.is.not.validated.", "\u6B64 jar \u5305\u542B\u8BC1\u4E66\u94FE\u672A\u9A8C\u8BC1\u7684\u6761\u76EE\u3002"}, + {"Unknown.password.type.", "\u672A\u77E5\u53E3\u4EE4\u7C7B\u578B: "}, + {"Cannot.find.environment.variable.", + "\u627E\u4E0D\u5230\u73AF\u5883\u53D8\u91CF: "}, + {"Cannot.find.file.", "\u627E\u4E0D\u5230\u6587\u4EF6: "}, + {"Command.option.flag.needs.an.argument.", "\u547D\u4EE4\u9009\u9879{0}\u9700\u8981\u4E00\u4E2A\u53C2\u6570\u3002"}, }; /** @@ -234,6 +239,7 @@ public class JarSignerResources_zh_CN extends java.util.ListResourceBundle { * * @return the contents of this ResourceBundle. */ + @Override public Object[][] getContents() { return contents; } diff --git a/jdk/src/share/classes/sun/security/tools/TimestampedSigner.java b/jdk/src/share/classes/sun/security/tools/jarsigner/TimestampedSigner.java similarity index 98% rename from jdk/src/share/classes/sun/security/tools/TimestampedSigner.java rename to jdk/src/share/classes/sun/security/tools/jarsigner/TimestampedSigner.java index 4848a40dcbc..4b952de1d5b 100644 --- a/jdk/src/share/classes/sun/security/tools/TimestampedSigner.java +++ b/jdk/src/share/classes/sun/security/tools/jarsigner/TimestampedSigner.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2007, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2007, 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 @@ -23,7 +23,7 @@ * questions. */ -package sun.security.tools; +package sun.security.tools.jarsigner; import java.io.IOException; import java.net.URI; diff --git a/jdk/src/share/classes/sun/security/tools/CertAndKeyGen.java b/jdk/src/share/classes/sun/security/tools/keytool/CertAndKeyGen.java similarity index 99% rename from jdk/src/share/classes/sun/security/tools/CertAndKeyGen.java rename to jdk/src/share/classes/sun/security/tools/keytool/CertAndKeyGen.java index fad412e9f9a..6f557b67a65 100644 --- a/jdk/src/share/classes/sun/security/tools/CertAndKeyGen.java +++ b/jdk/src/share/classes/sun/security/tools/keytool/CertAndKeyGen.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1996, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1996, 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 @@ -23,7 +23,7 @@ * questions. */ -package sun.security.tools; +package sun.security.tools.keytool; import java.io.IOException; import java.security.cert.X509Certificate; diff --git a/jdk/src/share/classes/sun/security/tools/KeyTool.java b/jdk/src/share/classes/sun/security/tools/keytool/Main.java similarity index 98% rename from jdk/src/share/classes/sun/security/tools/KeyTool.java rename to jdk/src/share/classes/sun/security/tools/keytool/Main.java index 44fb40d5d5b..fd399fca63a 100644 --- a/jdk/src/share/classes/sun/security/tools/KeyTool.java +++ b/jdk/src/share/classes/sun/security/tools/keytool/Main.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 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 @@ -23,7 +23,7 @@ * questions. */ -package sun.security.tools; +package sun.security.tools.keytool; import java.io.*; import java.security.CodeSigner; @@ -75,12 +75,14 @@ import javax.crypto.SecretKey; import sun.misc.BASE64Decoder; import sun.security.pkcs.PKCS9Attribute; +import sun.security.tools.KeyStoreUtil; +import sun.security.tools.PathList; import sun.security.util.DerValue; import sun.security.x509.*; import static java.security.KeyStore.*; -import static sun.security.tools.KeyTool.Command.*; -import static sun.security.tools.KeyTool.Option.*; +import static sun.security.tools.keytool.Main.Command.*; +import static sun.security.tools.keytool.Main.Option.*; /** * This tool manages keystores. @@ -94,7 +96,7 @@ import static sun.security.tools.KeyTool.Option.*; * * @since 1.2 */ -public final class KeyTool { +public final class Main { private boolean debug = false; private Command command = null; @@ -304,7 +306,6 @@ public final class KeyTool { private static final Class[] PARAM_STRING = { String.class }; - private static final String JKS = "jks"; private static final String NONE = "NONE"; private static final String P11KEYSTORE = "PKCS11"; private static final String P12KEYSTORE = "PKCS12"; @@ -312,17 +313,18 @@ public final class KeyTool { // for i18n private static final java.util.ResourceBundle rb = - java.util.ResourceBundle.getBundle("sun.security.util.Resources"); + java.util.ResourceBundle.getBundle( + "sun.security.tools.keytool.Resources"); private static final Collator collator = Collator.getInstance(); static { // this is for case insensitive string comparisons collator.setStrength(Collator.PRIMARY); }; - private KeyTool() { } + private Main() { } public static void main(String[] args) throws Exception { - KeyTool kt = new KeyTool(); + Main kt = new Main(); kt.run(args, System.out); } @@ -907,7 +909,7 @@ public final class KeyTool { } if (trustcacerts) { - caks = getCacertsKeyStore(); + caks = KeyStoreUtil.getCacertsKeyStore(); } // Perform the specified command @@ -2076,7 +2078,7 @@ public final class KeyTool { for (GeneralName name: names.names()) { if (name.getType() == GeneralNameInterface.NAME_URI) { URIName uriName = (URIName)name.getName(); - for (CRL crl: KeyTool.loadCRLs(uriName.getName())) { + for (CRL crl: loadCRLs(uriName.getName())) { if (crl instanceof X509CRL) { crls.add((X509CRL)crl); } @@ -3370,27 +3372,6 @@ public final class KeyTool { return reply; } - /** - * Returns the keystore with the configured CA certificates. - */ - public static KeyStore getCacertsKeyStore() - throws Exception - { - String sep = File.separator; - File file = new File(System.getProperty("java.home") + sep - + "lib" + sep + "security" + sep - + "cacerts"); - if (!file.exists()) { - return null; - } - KeyStore caks = null; - try (FileInputStream fis = new FileInputStream(file)) { - caks = KeyStore.getInstance(JKS); - caks.load(fis, null); - } - return caks; - } - /** * Stores the (leaf) certificates of a keystore in a hashtable. * All certs belonging to the same CA are stored in a vector that @@ -4056,59 +4037,11 @@ public final class KeyTool { } private char[] getPass(String modifier, String arg) { - char[] output = getPassWithModifier(modifier, arg); + char[] output = KeyStoreUtil.getPassWithModifier(modifier, arg, rb); if (output != null) return output; tinyHelp(); return null; // Useless, tinyHelp() already exits. } - - // This method also used by JarSigner - public static char[] getPassWithModifier(String modifier, String arg) { - if (modifier == null) { - return arg.toCharArray(); - } else if (collator.compare(modifier, "env") == 0) { - String value = System.getenv(arg); - if (value == null) { - System.err.println(rb.getString( - "Cannot.find.environment.variable.") + arg); - return null; - } else { - return value.toCharArray(); - } - } else if (collator.compare(modifier, "file") == 0) { - try { - URL url = null; - try { - url = new URL(arg); - } catch (java.net.MalformedURLException mue) { - File f = new File(arg); - if (f.exists()) { - url = f.toURI().toURL(); - } else { - System.err.println(rb.getString( - "Cannot.find.file.") + arg); - return null; - } - } - BufferedReader br = new BufferedReader(new InputStreamReader( - url.openStream())); - String value = br.readLine(); - br.close(); - if (value == null) { - return new char[0]; - } else { - return value.toCharArray(); - } - } catch (IOException ioe) { - System.err.println(ioe); - return null; - } - } else { - System.err.println(rb.getString("Unknown.password.type.") + - modifier); - return null; - } - } } // This class is exactly the same as com.sun.tools.javac.util.Pair, diff --git a/jdk/src/share/classes/sun/security/tools/keytool/Resources.java b/jdk/src/share/classes/sun/security/tools/keytool/Resources.java new file mode 100644 index 00000000000..262fe20ea4a --- /dev/null +++ b/jdk/src/share/classes/sun/security/tools/keytool/Resources.java @@ -0,0 +1,438 @@ +/* + * Copyright (c) 2000, 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. 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.security.tools.keytool; + +/** + *

This class represents the ResourceBundle + * for the keytool. + * + */ +public class Resources extends java.util.ListResourceBundle { + + private static final Object[][] contents = { + {"NEWLINE", "\n"}, + {"STAR", + "*******************************************"}, + {"STARNN", + "*******************************************\n\n"}, + + // keytool: Help part + {".OPTION.", " [OPTION]..."}, + {"Options.", "Options:"}, + {"Use.keytool.help.for.all.available.commands", + "Use \"keytool -help\" for all available commands"}, + {"Key.and.Certificate.Management.Tool", + "Key and Certificate Management Tool"}, + {"Commands.", "Commands:"}, + {"Use.keytool.command.name.help.for.usage.of.command.name", + "Use \"keytool -command_name -help\" for usage of command_name"}, + // keytool: help: commands + {"Generates.a.certificate.request", + "Generates a certificate request"}, //-certreq + {"Changes.an.entry.s.alias", + "Changes an entry's alias"}, //-changealias + {"Deletes.an.entry", + "Deletes an entry"}, //-delete + {"Exports.certificate", + "Exports certificate"}, //-exportcert + {"Generates.a.key.pair", + "Generates a key pair"}, //-genkeypair + {"Generates.a.secret.key", + "Generates a secret key"}, //-genseckey + {"Generates.certificate.from.a.certificate.request", + "Generates certificate from a certificate request"}, //-gencert + {"Generates.CRL", "Generates CRL"}, //-gencrl + {"Imports.entries.from.a.JDK.1.1.x.style.identity.database", + "Imports entries from a JDK 1.1.x-style identity database"}, //-identitydb + {"Imports.a.certificate.or.a.certificate.chain", + "Imports a certificate or a certificate chain"}, //-importcert + {"Imports.one.or.all.entries.from.another.keystore", + "Imports one or all entries from another keystore"}, //-importkeystore + {"Clones.a.key.entry", + "Clones a key entry"}, //-keyclone + {"Changes.the.key.password.of.an.entry", + "Changes the key password of an entry"}, //-keypasswd + {"Lists.entries.in.a.keystore", + "Lists entries in a keystore"}, //-list + {"Prints.the.content.of.a.certificate", + "Prints the content of a certificate"}, //-printcert + {"Prints.the.content.of.a.certificate.request", + "Prints the content of a certificate request"}, //-printcertreq + {"Prints.the.content.of.a.CRL.file", + "Prints the content of a CRL file"}, //-printcrl + {"Generates.a.self.signed.certificate", + "Generates a self-signed certificate"}, //-selfcert + {"Changes.the.store.password.of.a.keystore", + "Changes the store password of a keystore"}, //-storepasswd + // keytool: help: options + {"alias.name.of.the.entry.to.process", + "alias name of the entry to process"}, //-alias + {"destination.alias", + "destination alias"}, //-destalias + {"destination.key.password", + "destination key password"}, //-destkeypass + {"destination.keystore.name", + "destination keystore name"}, //-destkeystore + {"destination.keystore.password.protected", + "destination keystore password protected"}, //-destprotected + {"destination.keystore.provider.name", + "destination keystore provider name"}, //-destprovidername + {"destination.keystore.password", + "destination keystore password"}, //-deststorepass + {"destination.keystore.type", + "destination keystore type"}, //-deststoretype + {"distinguished.name", + "distinguished name"}, //-dname + {"X.509.extension", + "X.509 extension"}, //-ext + {"output.file.name", + "output file name"}, //-file and -outfile + {"input.file.name", + "input file name"}, //-file and -infile + {"key.algorithm.name", + "key algorithm name"}, //-keyalg + {"key.password", + "key password"}, //-keypass + {"key.bit.size", + "key bit size"}, //-keysize + {"keystore.name", + "keystore name"}, //-keystore + {"new.password", + "new password"}, //-new + {"do.not.prompt", + "do not prompt"}, //-noprompt + {"password.through.protected.mechanism", + "password through protected mechanism"}, //-protected + {"provider.argument", + "provider argument"}, //-providerarg + {"provider.class.name", + "provider class name"}, //-providerclass + {"provider.name", + "provider name"}, //-providername + {"provider.classpath", + "provider classpath"}, //-providerpath + {"output.in.RFC.style", + "output in RFC style"}, //-rfc + {"signature.algorithm.name", + "signature algorithm name"}, //-sigalg + {"source.alias", + "source alias"}, //-srcalias + {"source.key.password", + "source key password"}, //-srckeypass + {"source.keystore.name", + "source keystore name"}, //-srckeystore + {"source.keystore.password.protected", + "source keystore password protected"}, //-srcprotected + {"source.keystore.provider.name", + "source keystore provider name"}, //-srcprovidername + {"source.keystore.password", + "source keystore password"}, //-srcstorepass + {"source.keystore.type", + "source keystore type"}, //-srcstoretype + {"SSL.server.host.and.port", + "SSL server host and port"}, //-sslserver + {"signed.jar.file", + "signed jar file"}, //=jarfile + {"certificate.validity.start.date.time", + "certificate validity start date/time"}, //-startdate + {"keystore.password", + "keystore password"}, //-storepass + {"keystore.type", + "keystore type"}, //-storetype + {"trust.certificates.from.cacerts", + "trust certificates from cacerts"}, //-trustcacerts + {"verbose.output", + "verbose output"}, //-v + {"validity.number.of.days", + "validity number of days"}, //-validity + {"Serial.ID.of.cert.to.revoke", + "Serial ID of cert to revoke"}, //-id + // keytool: Running part + {"keytool.error.", "keytool error: "}, + {"Illegal.option.", "Illegal option: "}, + {"Illegal.value.", "Illegal value: "}, + {"Unknown.password.type.", "Unknown password type: "}, + {"Cannot.find.environment.variable.", + "Cannot find environment variable: "}, + {"Cannot.find.file.", "Cannot find file: "}, + {"Command.option.flag.needs.an.argument.", "Command option {0} needs an argument."}, + {"Warning.Different.store.and.key.passwords.not.supported.for.PKCS12.KeyStores.Ignoring.user.specified.command.value.", + "Warning: Different store and key passwords not supported for PKCS12 KeyStores. Ignoring user-specified {0} value."}, + {".keystore.must.be.NONE.if.storetype.is.{0}", + "-keystore must be NONE if -storetype is {0}"}, + {"Too.many.retries.program.terminated", + "Too many retries, program terminated"}, + {".storepasswd.and.keypasswd.commands.not.supported.if.storetype.is.{0}", + "-storepasswd and -keypasswd commands not supported if -storetype is {0}"}, + {".keypasswd.commands.not.supported.if.storetype.is.PKCS12", + "-keypasswd commands not supported if -storetype is PKCS12"}, + {".keypass.and.new.can.not.be.specified.if.storetype.is.{0}", + "-keypass and -new can not be specified if -storetype is {0}"}, + {"if.protected.is.specified.then.storepass.keypass.and.new.must.not.be.specified", + "if -protected is specified, then -storepass, -keypass, and -new must not be specified"}, + {"if.srcprotected.is.specified.then.srcstorepass.and.srckeypass.must.not.be.specified", + "if -srcprotected is specified, then -srcstorepass and -srckeypass must not be specified"}, + {"if.keystore.is.not.password.protected.then.storepass.keypass.and.new.must.not.be.specified", + "if keystore is not password protected, then -storepass, -keypass, and -new must not be specified"}, + {"if.source.keystore.is.not.password.protected.then.srcstorepass.and.srckeypass.must.not.be.specified", + "if source keystore is not password protected, then -srcstorepass and -srckeypass must not be specified"}, + {"Illegal.startdate.value", "Illegal startdate value"}, + {"Validity.must.be.greater.than.zero", + "Validity must be greater than zero"}, + {"provName.not.a.provider", "{0} not a provider"}, + {"Usage.error.no.command.provided", "Usage error: no command provided"}, + {"Source.keystore.file.exists.but.is.empty.", "Source keystore file exists, but is empty: "}, + {"Please.specify.srckeystore", "Please specify -srckeystore"}, + {"Must.not.specify.both.v.and.rfc.with.list.command", + "Must not specify both -v and -rfc with 'list' command"}, + {"Key.password.must.be.at.least.6.characters", + "Key password must be at least 6 characters"}, + {"New.password.must.be.at.least.6.characters", + "New password must be at least 6 characters"}, + {"Keystore.file.exists.but.is.empty.", + "Keystore file exists, but is empty: "}, + {"Keystore.file.does.not.exist.", + "Keystore file does not exist: "}, + {"Must.specify.destination.alias", "Must specify destination alias"}, + {"Must.specify.alias", "Must specify alias"}, + {"Keystore.password.must.be.at.least.6.characters", + "Keystore password must be at least 6 characters"}, + {"Enter.keystore.password.", "Enter keystore password: "}, + {"Enter.source.keystore.password.", "Enter source keystore password: "}, + {"Enter.destination.keystore.password.", "Enter destination keystore password: "}, + {"Keystore.password.is.too.short.must.be.at.least.6.characters", + "Keystore password is too short - must be at least 6 characters"}, + {"Unknown.Entry.Type", "Unknown Entry Type"}, + {"Too.many.failures.Alias.not.changed", "Too many failures. Alias not changed"}, + {"Entry.for.alias.alias.successfully.imported.", + "Entry for alias {0} successfully imported."}, + {"Entry.for.alias.alias.not.imported.", "Entry for alias {0} not imported."}, + {"Problem.importing.entry.for.alias.alias.exception.Entry.for.alias.alias.not.imported.", + "Problem importing entry for alias {0}: {1}.\nEntry for alias {0} not imported."}, + {"Import.command.completed.ok.entries.successfully.imported.fail.entries.failed.or.cancelled", + "Import command completed: {0} entries successfully imported, {1} entries failed or cancelled"}, + {"Warning.Overwriting.existing.alias.alias.in.destination.keystore", + "Warning: Overwriting existing alias {0} in destination keystore"}, + {"Existing.entry.alias.alias.exists.overwrite.no.", + "Existing entry alias {0} exists, overwrite? [no]: "}, + {"Too.many.failures.try.later", "Too many failures - try later"}, + {"Certification.request.stored.in.file.filename.", + "Certification request stored in file <{0}>"}, + {"Submit.this.to.your.CA", "Submit this to your CA"}, + {"if.alias.not.specified.destalias.srckeypass.and.destkeypass.must.not.be.specified", + "if alias not specified, destalias, srckeypass, and destkeypass must not be specified"}, + {"Certificate.stored.in.file.filename.", + "Certificate stored in file <{0}>"}, + {"Certificate.reply.was.installed.in.keystore", + "Certificate reply was installed in keystore"}, + {"Certificate.reply.was.not.installed.in.keystore", + "Certificate reply was not installed in keystore"}, + {"Certificate.was.added.to.keystore", + "Certificate was added to keystore"}, + {"Certificate.was.not.added.to.keystore", + "Certificate was not added to keystore"}, + {".Storing.ksfname.", "[Storing {0}]"}, + {"alias.has.no.public.key.certificate.", + "{0} has no public key (certificate)"}, + {"Cannot.derive.signature.algorithm", + "Cannot derive signature algorithm"}, + {"Alias.alias.does.not.exist", + "Alias <{0}> does not exist"}, + {"Alias.alias.has.no.certificate", + "Alias <{0}> has no certificate"}, + {"Key.pair.not.generated.alias.alias.already.exists", + "Key pair not generated, alias <{0}> already exists"}, + {"Generating.keysize.bit.keyAlgName.key.pair.and.self.signed.certificate.sigAlgName.with.a.validity.of.validality.days.for", + "Generating {0} bit {1} key pair and self-signed certificate ({2}) with a validity of {3} days\n\tfor: {4}"}, + {"Enter.key.password.for.alias.", "Enter key password for <{0}>"}, + {".RETURN.if.same.as.keystore.password.", + "\t(RETURN if same as keystore password): "}, + {"Key.password.is.too.short.must.be.at.least.6.characters", + "Key password is too short - must be at least 6 characters"}, + {"Too.many.failures.key.not.added.to.keystore", + "Too many failures - key not added to keystore"}, + {"Destination.alias.dest.already.exists", + "Destination alias <{0}> already exists"}, + {"Password.is.too.short.must.be.at.least.6.characters", + "Password is too short - must be at least 6 characters"}, + {"Too.many.failures.Key.entry.not.cloned", + "Too many failures. Key entry not cloned"}, + {"key.password.for.alias.", "key password for <{0}>"}, + {"Keystore.entry.for.id.getName.already.exists", + "Keystore entry for <{0}> already exists"}, + {"Creating.keystore.entry.for.id.getName.", + "Creating keystore entry for <{0}> ..."}, + {"No.entries.from.identity.database.added", + "No entries from identity database added"}, + {"Alias.name.alias", "Alias name: {0}"}, + {"Creation.date.keyStore.getCreationDate.alias.", + "Creation date: {0,date}"}, + {"alias.keyStore.getCreationDate.alias.", + "{0}, {1,date}, "}, + {"alias.", "{0}, "}, + {"Entry.type.type.", "Entry type: {0}"}, + {"Certificate.chain.length.", "Certificate chain length: "}, + {"Certificate.i.1.", "Certificate[{0,number,integer}]:"}, + {"Certificate.fingerprint.SHA1.", "Certificate fingerprint (SHA1): "}, + {"Keystore.type.", "Keystore type: "}, + {"Keystore.provider.", "Keystore provider: "}, + {"Your.keystore.contains.keyStore.size.entry", + "Your keystore contains {0,number,integer} entry"}, + {"Your.keystore.contains.keyStore.size.entries", + "Your keystore contains {0,number,integer} entries"}, + {"Failed.to.parse.input", "Failed to parse input"}, + {"Empty.input", "Empty input"}, + {"Not.X.509.certificate", "Not X.509 certificate"}, + {"alias.has.no.public.key", "{0} has no public key"}, + {"alias.has.no.X.509.certificate", "{0} has no X.509 certificate"}, + {"New.certificate.self.signed.", "New certificate (self-signed):"}, + {"Reply.has.no.certificates", "Reply has no certificates"}, + {"Certificate.not.imported.alias.alias.already.exists", + "Certificate not imported, alias <{0}> already exists"}, + {"Input.not.an.X.509.certificate", "Input not an X.509 certificate"}, + {"Certificate.already.exists.in.keystore.under.alias.trustalias.", + "Certificate already exists in keystore under alias <{0}>"}, + {"Do.you.still.want.to.add.it.no.", + "Do you still want to add it? [no]: "}, + {"Certificate.already.exists.in.system.wide.CA.keystore.under.alias.trustalias.", + "Certificate already exists in system-wide CA keystore under alias <{0}>"}, + {"Do.you.still.want.to.add.it.to.your.own.keystore.no.", + "Do you still want to add it to your own keystore? [no]: "}, + {"Trust.this.certificate.no.", "Trust this certificate? [no]: "}, + {"YES", "YES"}, + {"New.prompt.", "New {0}: "}, + {"Passwords.must.differ", "Passwords must differ"}, + {"Re.enter.new.prompt.", "Re-enter new {0}: "}, + {"Re.enter.new.password.", "Re-enter new password: "}, + {"They.don.t.match.Try.again", "They don't match. Try again"}, + {"Enter.prompt.alias.name.", "Enter {0} alias name: "}, + {"Enter.new.alias.name.RETURN.to.cancel.import.for.this.entry.", + "Enter new alias name\t(RETURN to cancel import for this entry): "}, + {"Enter.alias.name.", "Enter alias name: "}, + {".RETURN.if.same.as.for.otherAlias.", + "\t(RETURN if same as for <{0}>)"}, + {".PATTERN.printX509Cert", + "Owner: {0}\nIssuer: {1}\nSerial number: {2}\nValid from: {3} until: {4}\nCertificate fingerprints:\n\t MD5: {5}\n\t SHA1: {6}\n\t SHA256: {7}\n\t Signature algorithm name: {8}\n\t Version: {9}"}, + {"What.is.your.first.and.last.name.", + "What is your first and last name?"}, + {"What.is.the.name.of.your.organizational.unit.", + "What is the name of your organizational unit?"}, + {"What.is.the.name.of.your.organization.", + "What is the name of your organization?"}, + {"What.is.the.name.of.your.City.or.Locality.", + "What is the name of your City or Locality?"}, + {"What.is.the.name.of.your.State.or.Province.", + "What is the name of your State or Province?"}, + {"What.is.the.two.letter.country.code.for.this.unit.", + "What is the two-letter country code for this unit?"}, + {"Is.name.correct.", "Is {0} correct?"}, + {"no", "no"}, + {"yes", "yes"}, + {"y", "y"}, + {".defaultValue.", " [{0}]: "}, + {"Alias.alias.has.no.key", + "Alias <{0}> has no key"}, + {"Alias.alias.references.an.entry.type.that.is.not.a.private.key.entry.The.keyclone.command.only.supports.cloning.of.private.key", + "Alias <{0}> references an entry type that is not a private key entry. The -keyclone command only supports cloning of private key entries"}, + + {".WARNING.WARNING.WARNING.", + "***************** WARNING WARNING WARNING *****************"}, + {"Signer.d.", "Signer #%d:"}, + {"Timestamp.", "Timestamp:"}, + {"Signature.", "Signature:"}, + {"CRLs.", "CRLs:"}, + {"Certificate.owner.", "Certificate owner: "}, + {"Not.a.signed.jar.file", "Not a signed jar file"}, + {"No.certificate.from.the.SSL.server", + "No certificate from the SSL server"}, + + {".The.integrity.of.the.information.stored.in.your.keystore.", + "* The integrity of the information stored in your keystore *\n" + + "* has NOT been verified! In order to verify its integrity, *\n" + + "* you must provide your keystore password. *"}, + {".The.integrity.of.the.information.stored.in.the.srckeystore.", + "* The integrity of the information stored in the srckeystore*\n" + + "* has NOT been verified! In order to verify its integrity, *\n" + + "* you must provide the srckeystore password. *"}, + + {"Certificate.reply.does.not.contain.public.key.for.alias.", + "Certificate reply does not contain public key for <{0}>"}, + {"Incomplete.certificate.chain.in.reply", + "Incomplete certificate chain in reply"}, + {"Certificate.chain.in.reply.does.not.verify.", + "Certificate chain in reply does not verify: "}, + {"Top.level.certificate.in.reply.", + "Top-level certificate in reply:\n"}, + {".is.not.trusted.", "... is not trusted. "}, + {"Install.reply.anyway.no.", "Install reply anyway? [no]: "}, + {"NO", "NO"}, + {"Public.keys.in.reply.and.keystore.don.t.match", + "Public keys in reply and keystore don't match"}, + {"Certificate.reply.and.certificate.in.keystore.are.identical", + "Certificate reply and certificate in keystore are identical"}, + {"Failed.to.establish.chain.from.reply", + "Failed to establish chain from reply"}, + {"n", "n"}, + {"Wrong.answer.try.again", "Wrong answer, try again"}, + {"Secret.key.not.generated.alias.alias.already.exists", + "Secret Key not generated, alias <{0}> already exists"}, + {"Please.provide.keysize.for.secret.key.generation", + "Please provide -keysize for secret key generation"}, + + {"verified.by.s.in.s", "Verified by %s in %s"}, + {"warning.not.verified.make.sure.keystore.is.correct", + "WARNING: not verified. Make sure -keystore is correct."}, + + {"Extensions.", "Extensions: "}, + {".Empty.value.", "(Empty value)"}, + {"Extension.Request.", "Extension Request:"}, + {"PKCS.10.Certificate.Request.Version.1.0.Subject.s.Public.Key.s.format.s.key.", + "PKCS #10 Certificate Request (Version 1.0)\n" + + "Subject: %s\nPublic Key: %s format %s key\n"}, + {"Unknown.keyUsage.type.", "Unknown keyUsage type: "}, + {"Unknown.extendedkeyUsage.type.", "Unknown extendedkeyUsage type: "}, + {"Unknown.AccessDescription.type.", "Unknown AccessDescription type: "}, + {"Unrecognized.GeneralName.type.", "Unrecognized GeneralName type: "}, + {"This.extension.cannot.be.marked.as.critical.", + "This extension cannot be marked as critical. "}, + {"Odd.number.of.hex.digits.found.", "Odd number of hex digits found: "}, + {"Unknown.extension.type.", "Unknown extension type: "}, + {"command.{0}.is.ambiguous.", "command {0} is ambiguous:"} + }; + + + /** + * Returns the contents of this ResourceBundle. + * + *

+ * + * @return the contents of this ResourceBundle. + */ + @Override + public Object[][] getContents() { + return contents; + } +} diff --git a/jdk/src/share/classes/sun/security/tools/keytool/Resources_de.java b/jdk/src/share/classes/sun/security/tools/keytool/Resources_de.java new file mode 100644 index 00000000000..087362c7cec --- /dev/null +++ b/jdk/src/share/classes/sun/security/tools/keytool/Resources_de.java @@ -0,0 +1,431 @@ +/* + * Copyright (c) 2000, 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. 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.security.tools.keytool; + +/** + *

This class represents the ResourceBundle + * for the keytool. + * + */ +public class Resources_de extends java.util.ListResourceBundle { + + private static final Object[][] contents = { + {"NEWLINE", "\n"}, + {"STAR", + "*******************************************"}, + {"STARNN", + "*******************************************\n\n"}, + + // keytool: Help part +// "Option" should be translated. + {".OPTION.", " [Option]..."}, + {"Options.", "Optionen:"}, + {"Use.keytool.help.for.all.available.commands", + "\"keytool -help\" f\u00FCr alle verf\u00FCgbaren Befehle verwenden"}, + {"Key.and.Certificate.Management.Tool", + "Schl\u00FCssel- und Zertifikatsverwaltungstool"}, + {"Commands.", "Befehle:"}, + {"Use.keytool.command.name.help.for.usage.of.command.name", + "\"keytool -command_name -help\" f\u00FCr Verwendung von command_name verwenden"}, + // keytool: help: commands + {"Generates.a.certificate.request", + "Generiert eine Zertifikatanforderung"}, //-certreq + {"Changes.an.entry.s.alias", + "\u00C4ndert den Alias eines Eintrags"}, //-changealias + {"Deletes.an.entry", + "L\u00F6scht einen Eintrag"}, //-delete + {"Exports.certificate", + "Exportiert ein Zertifikat"}, //-exportcert + {"Generates.a.key.pair", + "Generiert ein Schl\u00FCsselpaar"}, //-genkeypair +// translation of "secret" key should be different to "private" key. + {"Generates.a.secret.key", + "Generiert einen Secret Key"}, //-genseckey + {"Generates.certificate.from.a.certificate.request", + "Generiert ein Zertifikat aus einer Zertifikatanforderung"}, //-gencert + {"Generates.CRL", "Generiert eine CRL"}, //-gencrl + {"Imports.entries.from.a.JDK.1.1.x.style.identity.database", + "Importiert Eintr\u00E4ge aus einer Identity-Datenbank im JDK 1.1.x-Stil"}, //-identitydb + {"Imports.a.certificate.or.a.certificate.chain", + "Importiert ein Zertifikat oder eine Zertifikatkette"}, //-importcert + {"Imports.one.or.all.entries.from.another.keystore", + "Importiert einen oder alle Eintr\u00E4ge aus einem anderen Keystore"}, //-importkeystore + {"Clones.a.key.entry", + "Clont einen Schl\u00FCsseleintrag"}, //-keyclone + {"Changes.the.key.password.of.an.entry", + "\u00C4ndert das Schl\u00FCsselkennwort eines Eintrags"}, //-keypasswd + {"Lists.entries.in.a.keystore", + "Listet die Eintr\u00E4ge in einem Keystore auf"}, //-list + {"Prints.the.content.of.a.certificate", + "Druckt den Content eines Zertifikats"}, //-printcert + {"Prints.the.content.of.a.certificate.request", + "Druckt den Content einer Zertifikatanforderung"}, //-printcertreq + {"Prints.the.content.of.a.CRL.file", + "Druckt den Content einer CRL-Datei"}, //-printcrl + {"Generates.a.self.signed.certificate", + "Generiert ein selbst signiertes Zertifikat"}, //-selfcert + {"Changes.the.store.password.of.a.keystore", + "\u00C4ndert das Speicherkennwort eines Keystores"}, //-storepasswd + // keytool: help: options + {"alias.name.of.the.entry.to.process", + "Aliasname des zu verarbeitenden Eintrags"}, //-alias + {"destination.alias", + "Zielalias"}, //-destalias + {"destination.key.password", + "Zielschl\u00FCssel-Kennwort"}, //-destkeypass + {"destination.keystore.name", + "Ziel-Keystore-Name"}, //-destkeystore + {"destination.keystore.password.protected", + "Ziel-Keystore kennwortgesch\u00FCtzt"}, //-destprotected + {"destination.keystore.provider.name", + "Ziel-Keystore-Providername"}, //-destprovidername + {"destination.keystore.password", + "Ziel-Keystore-Kennwort"}, //-deststorepass + {"destination.keystore.type", + "Ziel-Keystore-Typ"}, //-deststoretype + {"distinguished.name", + "Distinguished Name"}, //-dname + {"X.509.extension", + "X.509-Erweiterung"}, //-ext + {"output.file.name", + "Ausgabedateiname"}, //-file and -outfile + {"input.file.name", + "Eingabedateiname"}, //-file and -infile + {"key.algorithm.name", + "Schl\u00FCsselalgorithmusname"}, //-keyalg + {"key.password", + "Schl\u00FCsselkennwort"}, //-keypass + {"key.bit.size", + "Schl\u00FCsselbitgr\u00F6\u00DFe"}, //-keysize + {"keystore.name", + "Keystore-Name"}, //-keystore + {"new.password", + "Neues Kennwort"}, //-new + {"do.not.prompt", + "Kein Prompt"}, //-noprompt + {"password.through.protected.mechanism", + "Kennwort \u00FCber gesch\u00FCtzten Mechanismus"}, //-protected + {"provider.argument", + "Providerargument"}, //-providerarg + {"provider.class.name", + "Providerklassenname"}, //-providerclass + {"provider.name", + "Providername"}, //-providername + {"provider.classpath", + "Provider-Classpath"}, //-providerpath + {"output.in.RFC.style", + "Ausgabe in RFC-Stil"}, //-rfc + {"signature.algorithm.name", + "Signaturalgorithmusname"}, //-sigalg + {"source.alias", + "Quellalias"}, //-srcalias + {"source.key.password", + "Quellschl\u00FCssel-Kennwort"}, //-srckeypass + {"source.keystore.name", + "Quell-Keystore-Name"}, //-srckeystore + {"source.keystore.password.protected", + "Quell-Keystore kennwortgesch\u00FCtzt"}, //-srcprotected + {"source.keystore.provider.name", + "Quell-Keystore-Providername"}, //-srcprovidername + {"source.keystore.password", + "Quell-Keystore-Kennwort"}, //-srcstorepass + {"source.keystore.type", + "Quell-Keystore-Typ"}, //-srcstoretype + {"SSL.server.host.and.port", + "SSL-Serverhost und -port"}, //-sslserver + {"signed.jar.file", + "Signierte JAR-Datei"}, //=jarfile + {"certificate.validity.start.date.time", + "Anfangsdatum/-zeit f\u00FCr Zertifikatsg\u00FCltigkeit"}, //-startdate + {"keystore.password", + "Keystore-Kennwort"}, //-storepass + {"keystore.type", + "Keystore-Typ"}, //-storetype + {"trust.certificates.from.cacerts", + "Zertifikaten aus cacerts vertrauen"}, //-trustcacerts + {"verbose.output", + "Verbose-Ausgabe"}, //-v + {"validity.number.of.days", + "G\u00FCltigkeitsdauer (Tage)"}, //-validity + {"Serial.ID.of.cert.to.revoke", + "Serielle ID des zu entziehenden Certs"}, //-id + // keytool: Running part + {"keytool.error.", "Keytool-Fehler: "}, + {"Illegal.option.", "Ung\u00FCltige Option: "}, + {"Illegal.value.", "Ung\u00FCltiger Wert: "}, + {"Unknown.password.type.", "Unbekannter Kennworttyp: "}, + {"Cannot.find.environment.variable.", + "Umgebungsvariable kann nicht gefunden werden: "}, + {"Cannot.find.file.", "Datei kann nicht gefunden werden: "}, + {"Command.option.flag.needs.an.argument.", "Befehlsoption {0} ben\u00F6tigt ein Argument."}, + {"Warning.Different.store.and.key.passwords.not.supported.for.PKCS12.KeyStores.Ignoring.user.specified.command.value.", + "Warnung: Keine Unterst\u00FCtzung f\u00FCr unterschiedliche Speicher- und Schl\u00FCsselkennw\u00F6rter bei PKCS12 KeyStores. Der benutzerdefinierte Wert {0} wird ignoriert."}, + {".keystore.must.be.NONE.if.storetype.is.{0}", + "-keystore muss NONE sein, wenn -storetype {0} ist"}, + {"Too.many.retries.program.terminated", + "Zu viele erneute Versuche. Programm wird beendet"}, + {".storepasswd.and.keypasswd.commands.not.supported.if.storetype.is.{0}", + "Befehle -storepasswd und -keypasswd werden nicht unterst\u00FCtzt, wenn -storetype {0} ist"}, + {".keypasswd.commands.not.supported.if.storetype.is.PKCS12", + "Befehle des Typs -keypasswd werden nicht unterst\u00FCtzt, wenn -storetype PKCS12 ist"}, + {".keypass.and.new.can.not.be.specified.if.storetype.is.{0}", + "-keypass und -new k\u00F6nnen nicht angegeben werden, wenn -storetype {0} ist"}, + {"if.protected.is.specified.then.storepass.keypass.and.new.must.not.be.specified", + "Wenn -protected angegeben ist, d\u00FCrfen -storepass, -keypass und -new nicht angegeben werden"}, + {"if.srcprotected.is.specified.then.srcstorepass.and.srckeypass.must.not.be.specified", + "Wenn -srcprotected angegeben ist, d\u00FCrfen -srcstorepass und -srckeypass nicht angegeben werden"}, + {"if.keystore.is.not.password.protected.then.storepass.keypass.and.new.must.not.be.specified", + "Wenn der Keystore nicht kennwortgesch\u00FCtzt ist, d\u00FCrfen -storepass, -keypass und -new nicht angegeben werden"}, + {"if.source.keystore.is.not.password.protected.then.srcstorepass.and.srckeypass.must.not.be.specified", + "Wenn der Quell-Keystore nicht kennwortgesch\u00FCtzt ist, d\u00FCrfen -srcstorepass und -srckeypass nicht angegeben werden"}, + {"Illegal.startdate.value", "Ung\u00FCltiger Wert f\u00FCr Anfangsdatum"}, + {"Validity.must.be.greater.than.zero", + "G\u00FCltigkeit muss gr\u00F6\u00DFer als null sein"}, + {"provName.not.a.provider", "{0} kein Provider"}, + {"Usage.error.no.command.provided", "Verwendungsfehler: Kein Befehl angegeben"}, + {"Source.keystore.file.exists.but.is.empty.", "Quell-Keystore-Datei ist zwar vorhanden, ist aber leer: "}, + {"Please.specify.srckeystore", "Geben Sie -srckeystore an"}, + {"Must.not.specify.both.v.and.rfc.with.list.command", + "-v und -rfc d\u00FCrfen bei Befehl \"list\" nicht beide angegeben werden"}, + {"Key.password.must.be.at.least.6.characters", + "Schl\u00FCsselkennwort muss mindestens sechs Zeichen lang sein"}, + {"New.password.must.be.at.least.6.characters", + "Neues Kennwort muss mindestens sechs Zeichen lang sein"}, + {"Keystore.file.exists.but.is.empty.", + "Keystore-Datei ist vorhanden, ist aber leer: "}, + {"Keystore.file.does.not.exist.", + "Keystore-Datei ist nicht vorhanden: "}, + {"Must.specify.destination.alias", "Sie m\u00FCssen einen Zielalias angeben"}, + {"Must.specify.alias", "Sie m\u00FCssen einen Alias angeben"}, + {"Keystore.password.must.be.at.least.6.characters", + "Keystore-Kennwort muss mindestens sechs Zeichen lang sein"}, + {"Enter.keystore.password.", "Keystore-Kennwort eingeben: "}, + {"Enter.source.keystore.password.", "Quell-Keystore-Kennwort eingeben: "}, + {"Enter.destination.keystore.password.", "Ziel-Keystore-Kennwort eingeben: "}, + {"Keystore.password.is.too.short.must.be.at.least.6.characters", + "Keystore-Kennwort ist zu kurz. Es muss mindestens sechs Zeichen lang sein"}, + {"Unknown.Entry.Type", "Unbekannter Eintragstyp"}, + {"Too.many.failures.Alias.not.changed", "Zu viele Fehler. Alias nicht ge\u00E4ndert"}, + {"Entry.for.alias.alias.successfully.imported.", + "Eintrag f\u00FCr Alias {0} erfolgreich importiert."}, + {"Entry.for.alias.alias.not.imported.", "Eintrag f\u00FCr Alias {0} nicht importiert."}, + {"Problem.importing.entry.for.alias.alias.exception.Entry.for.alias.alias.not.imported.", + "Problem beim Importieren des Eintrags f\u00FCr Alias {0}: {1}.\nEintrag f\u00FCr Alias {0} nicht importiert."}, + {"Import.command.completed.ok.entries.successfully.imported.fail.entries.failed.or.cancelled", + "Importbefehl abgeschlossen: {0} Eintr\u00E4ge erfolgreich importiert, {1} Eintr\u00E4ge nicht erfolgreich oder abgebrochen"}, + {"Warning.Overwriting.existing.alias.alias.in.destination.keystore", + "Warnung: Vorhandener Alias {0} in Ziel-Keystore wird \u00FCberschrieben"}, + {"Existing.entry.alias.alias.exists.overwrite.no.", + "Eintragsalias {0} ist bereits vorhanden. \u00DCberschreiben? [Nein]: "}, + {"Too.many.failures.try.later", "Zu viele Fehler. Versuchen Sie es sp\u00E4ter erneut"}, + {"Certification.request.stored.in.file.filename.", + "Zertifizierungsanforderung in Datei <{0}> gespeichert"}, + {"Submit.this.to.your.CA", "Leiten Sie dies an die CA weiter"}, + {"if.alias.not.specified.destalias.srckeypass.and.destkeypass.must.not.be.specified", + "Wenn kein Alias angegeben ist, d\u00FCrfen destalias, srckeypass und destkeypass nicht angegeben werden"}, + {"Certificate.stored.in.file.filename.", + "Zertifikat in Datei <{0}> gespeichert"}, + {"Certificate.reply.was.installed.in.keystore", + "Zertifikatantwort wurde in Keystore installiert"}, + {"Certificate.reply.was.not.installed.in.keystore", + "Zertifikatantwort wurde nicht in Keystore installiert"}, + {"Certificate.was.added.to.keystore", + "Zertifikat wurde Keystore hinzugef\u00FCgt"}, + {"Certificate.was.not.added.to.keystore", + "Zertifikat wurde nicht zu Keystore hinzugef\u00FCgt"}, + {".Storing.ksfname.", "[{0} wird gesichert]"}, + {"alias.has.no.public.key.certificate.", + "{0} hat keinen Public Key (Zertifikat)"}, + {"Cannot.derive.signature.algorithm", + "Signaturalgorithmus kann nicht abgeleitet werden"}, + {"Alias.alias.does.not.exist", + "Alias <{0}> ist nicht vorhanden"}, + {"Alias.alias.has.no.certificate", + "Alias <{0}> hat kein Zertifikat"}, + {"Key.pair.not.generated.alias.alias.already.exists", + "Schl\u00FCsselpaar wurde nicht generiert. Alias <{0}> ist bereits vorhanden"}, + {"Generating.keysize.bit.keyAlgName.key.pair.and.self.signed.certificate.sigAlgName.with.a.validity.of.validality.days.for", + "Generieren von Schl\u00FCsselpaar (Typ {1}, {0} Bit) und selbst signiertem Zertifikat ({2}) mit einer G\u00FCltigkeit von {3} Tagen\n\tf\u00FCr: {4}"}, + {"Enter.key.password.for.alias.", "Schl\u00FCsselkennwort f\u00FCr <{0}> eingeben"}, + {".RETURN.if.same.as.keystore.password.", + "\t(RETURN, wenn identisch mit Keystore-Kennwort): "}, + {"Key.password.is.too.short.must.be.at.least.6.characters", + "Schl\u00FCsselkennwort ist zu kurz. Es muss mindestens sechs Zeichen lang sein"}, + {"Too.many.failures.key.not.added.to.keystore", + "Zu viele Fehler. Schl\u00FCssel wurde nicht zu Keystore hinzugef\u00FCgt"}, + {"Destination.alias.dest.already.exists", + "Zielalias <{0}> bereits vorhanden"}, + {"Password.is.too.short.must.be.at.least.6.characters", + "Kennwort ist zu kurz. Es muss mindestens sechs Zeichen lang sein"}, + {"Too.many.failures.Key.entry.not.cloned", + "Zu viele Fehler. Schl\u00FCsseleintrag wurde nicht geclont"}, + {"key.password.for.alias.", "Schl\u00FCsselkennwort f\u00FCr <{0}>"}, + {"Keystore.entry.for.id.getName.already.exists", + "Keystore-Eintrag f\u00FCr <{0}> bereits vorhanden"}, + {"Creating.keystore.entry.for.id.getName.", + "Keystore-Eintrag f\u00FCr <{0}> wird erstellt..."}, + {"No.entries.from.identity.database.added", + "Keine Eintr\u00E4ge aus Identity-Datenbank hinzugef\u00FCgt"}, + {"Alias.name.alias", "Aliasname: {0}"}, + {"Creation.date.keyStore.getCreationDate.alias.", + "Erstellungsdatum: {0,date}"}, + {"alias.keyStore.getCreationDate.alias.", + "{0}, {1,date}, "}, + {"alias.", "{0}, "}, + {"Entry.type.type.", "Eintragstyp: {0}"}, + {"Certificate.chain.length.", "Zertifikatkettenl\u00E4nge: "}, + {"Certificate.i.1.", "Zertifikat[{0,number,integer}]:"}, + {"Certificate.fingerprint.SHA1.", "Zertifikat-Fingerprint (SHA1): "}, + {"Keystore.type.", "Keystore-Typ: "}, + {"Keystore.provider.", "Keystore-Provider: "}, + {"Your.keystore.contains.keyStore.size.entry", + "Keystore enth\u00E4lt {0,number,integer} Eintrag"}, + {"Your.keystore.contains.keyStore.size.entries", + "Keystore enth\u00E4lt {0,number,integer} Eintr\u00E4ge"}, + {"Failed.to.parse.input", "Eingabe konnte nicht geparst werden"}, + {"Empty.input", "Leere Eingabe"}, + {"Not.X.509.certificate", "Kein X.509-Zertifikat"}, + {"alias.has.no.public.key", "{0} hat keinen Public Key"}, + {"alias.has.no.X.509.certificate", "{0} hat kein X.509-Zertifikat"}, + {"New.certificate.self.signed.", "Neues Zertifikat (selbst signiert):"}, + {"Reply.has.no.certificates", "Antwort hat keine Zertifikate"}, + {"Certificate.not.imported.alias.alias.already.exists", + "Zertifikat nicht importiert. Alias <{0}> ist bereits vorhanden"}, + {"Input.not.an.X.509.certificate", "Eingabe kein X.509-Zertifikat"}, + {"Certificate.already.exists.in.keystore.under.alias.trustalias.", + "Zertifikat ist bereits unter Alias <{0}> im Keystore vorhanden"}, + {"Do.you.still.want.to.add.it.no.", + "M\u00F6chten Sie es trotzdem hinzuf\u00FCgen? [Nein]: "}, + {"Certificate.already.exists.in.system.wide.CA.keystore.under.alias.trustalias.", + "Zertifikat ist bereits unter Alias <{0}> im systemweiten CA-Keystore vorhanden"}, + {"Do.you.still.want.to.add.it.to.your.own.keystore.no.", + "M\u00F6chten Sie es trotzdem zu Ihrem eigenen Keystore hinzuf\u00FCgen? [Nein]: "}, + {"Trust.this.certificate.no.", "Diesem Zertifikat vertrauen? [Nein]: "}, + {"YES", "Ja"}, + {"New.prompt.", "Neues {0}: "}, + {"Passwords.must.differ", "Kennw\u00F6rter m\u00FCssen sich unterscheiden"}, + {"Re.enter.new.prompt.", "Neues {0} erneut eingeben: "}, + {"Re.enter.new.password.", "Neues Kennwort erneut eingeben: "}, + {"They.don.t.match.Try.again", "Keine \u00DCbereinstimmung. Wiederholen Sie den Vorgang"}, + {"Enter.prompt.alias.name.", "{0}-Aliasnamen eingeben: "}, + {"Enter.new.alias.name.RETURN.to.cancel.import.for.this.entry.", + "Geben Sie einen neuen Aliasnamen ein\t(RETURN, um den Import dieses Eintrags abzubrechen): "}, + {"Enter.alias.name.", "Aliasnamen eingeben: "}, + {".RETURN.if.same.as.for.otherAlias.", + "\t(RETURN, wenn identisch mit <{0}>)"}, + {".PATTERN.printX509Cert", + "Eigent\u00FCmer: {0}\nAussteller: {1}\nSeriennummer: {2}\nG\u00FCltig von: {3} bis: {4}\nZertifikat-Fingerprints:\n\t MD5: {5}\n\t SHA1: {6}\n\t SHA256: {7}\n\t Signaturalgorithmusname: {8}\n\t Version: {9}"}, + {"What.is.your.first.and.last.name.", + "Wie lautet Ihr Vor- und Nachname?"}, + {"What.is.the.name.of.your.organizational.unit.", + "Wie lautet der Name Ihrer organisatorischen Einheit?"}, + {"What.is.the.name.of.your.organization.", + "Wie lautet der Name Ihrer Organisation?"}, + {"What.is.the.name.of.your.City.or.Locality.", + "Wie lautet der Name Ihrer Stadt oder Gemeinde?"}, + {"What.is.the.name.of.your.State.or.Province.", + "Wie lautet der Name Ihres Bundeslands?"}, + {"What.is.the.two.letter.country.code.for.this.unit.", + "Wie lautet der L\u00E4ndercode (zwei Buchstaben) f\u00FCr diese Einheit?"}, + {"Is.name.correct.", "Ist {0} richtig?"}, + {"no", "Nein"}, + {"yes", "Ja"}, + {"y", "J"}, + {".defaultValue.", " [{0}]: "}, + {"Alias.alias.has.no.key", + "Alias <{0}> verf\u00FCgt \u00FCber keinen Schl\u00FCssel"}, + {"Alias.alias.references.an.entry.type.that.is.not.a.private.key.entry.The.keyclone.command.only.supports.cloning.of.private.key", + "Alias <{0}> verweist auf einen Eintragstyp, der kein Private Key-Eintrag ist. Der Befehl -keyclone unterst\u00FCtzt nur das Clonen von Private Key-Eintr\u00E4gen"}, + + {".WARNING.WARNING.WARNING.", + "***************** Warnung Warnung Warnung *****************"}, + {"Signer.d.", "Signaturgeber #%d:"}, + {"Timestamp.", "Zeitstempel:"}, + {"Signature.", "Signatur:"}, + {"CRLs.", "CRLs:"}, + {"Certificate.owner.", "Zertifikateigent\u00FCmer: "}, + {"Not.a.signed.jar.file", "Keine signierte JAR-Datei"}, + {"No.certificate.from.the.SSL.server", + "Kein Zertifikat vom SSL-Server"}, + + {".The.integrity.of.the.information.stored.in.your.keystore.", + "* Die Integrit\u00E4t der Informationen, die in Ihrem Keystore gespeichert sind, *\n* wurde NICHT gepr\u00FCft. Um die Integrit\u00E4t zu pr\u00FCfen, *\n* m\u00FCssen Sie Ihr Keystore-Kennwort angeben. *"}, + {".The.integrity.of.the.information.stored.in.the.srckeystore.", + "* Die Integrit\u00E4t der Informationen, die in Ihrem Srckeystore gespeichert sind, *\n* wurde NICHT gepr\u00FCft. Um die Integrit\u00E4t zu pr\u00FCfen, *\n* m\u00FCssen Sie Ihr Srckeystore-Kennwort angeben. *"}, + + {"Certificate.reply.does.not.contain.public.key.for.alias.", + "Zertifikatantwort enth\u00E4lt keinen Public Key f\u00FCr <{0}>"}, + {"Incomplete.certificate.chain.in.reply", + "Unvollst\u00E4ndige Zertifikatkette in Antwort"}, + {"Certificate.chain.in.reply.does.not.verify.", + "Zertifikatkette in Antwort verifiziert nicht: "}, + {"Top.level.certificate.in.reply.", + "Zertifikat der obersten Ebene in Antwort:\n"}, + {".is.not.trusted.", "... ist nicht vertrauensw\u00FCrdig. "}, + {"Install.reply.anyway.no.", "Antwort trotzdem installieren? [Nein]: "}, + {"NO", "Nein"}, + {"Public.keys.in.reply.and.keystore.don.t.match", + "Public Keys in Antwort und Keystore stimmen nicht \u00FCberein"}, + {"Certificate.reply.and.certificate.in.keystore.are.identical", + "Zertifikatantwort und Zertifikat in Keystore sind identisch"}, + {"Failed.to.establish.chain.from.reply", + "Kette konnte der Antwort nicht entnommen werden"}, + {"n", "N"}, + {"Wrong.answer.try.again", "Falsche Antwort. Wiederholen Sie den Vorgang"}, + {"Secret.key.not.generated.alias.alias.already.exists", + "Secret Key wurde nicht generiert. Alias <{0}> ist bereits vorhanden"}, + {"Please.provide.keysize.for.secret.key.generation", + "Geben Sie -keysize zum Erstellen eines Secret Keys an"}, + + {"Extensions.", "Erweiterungen: "}, + {".Empty.value.", "(Leerer Wert)"}, + {"Extension.Request.", "Erweiterungsanforderung:"}, + {"PKCS.10.Certificate.Request.Version.1.0.Subject.s.Public.Key.s.format.s.key.", + "PKCS #10-Zertifikatanforderung (Version 1.0)\nSubjekt: %s\nPublic Key: %s Format %s Schl\u00FCssel\n"}, + {"Unknown.keyUsage.type.", "Unbekannter keyUsage-Typ: "}, + {"Unknown.extendedkeyUsage.type.", "Unbekannter extendedkeyUsage-Typ: "}, + {"Unknown.AccessDescription.type.", "Unbekannter AccessDescription-Typ: "}, + {"Unrecognized.GeneralName.type.", "Unbekannter GeneralName-Typ: "}, + {"This.extension.cannot.be.marked.as.critical.", + "Erweiterung kann nicht als \"Kritisch\" markiert werden. "}, + {"Odd.number.of.hex.digits.found.", "Ungerade Anzahl hexadezimaler Ziffern gefunden: "}, + {"Unknown.extension.type.", "Unbekannter Erweiterungstyp: "}, + {"command.{0}.is.ambiguous.", "Befehl {0} ist mehrdeutig:"} + }; + + + /** + * Returns the contents of this ResourceBundle. + * + *

+ * + * @return the contents of this ResourceBundle. + */ + @Override + public Object[][] getContents() { + return contents; + } +} diff --git a/jdk/src/share/classes/sun/security/tools/keytool/Resources_es.java b/jdk/src/share/classes/sun/security/tools/keytool/Resources_es.java new file mode 100644 index 00000000000..942c0ecf086 --- /dev/null +++ b/jdk/src/share/classes/sun/security/tools/keytool/Resources_es.java @@ -0,0 +1,431 @@ +/* + * Copyright (c) 2000, 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. 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.security.tools.keytool; + +/** + *

This class represents the ResourceBundle + * for the keytool. + * + */ +public class Resources_es extends java.util.ListResourceBundle { + + private static final Object[][] contents = { + {"NEWLINE", "\n"}, + {"STAR", + "*******************************************"}, + {"STARNN", + "*******************************************\n\n"}, + + // keytool: Help part +// "Option" should be translated. + {".OPTION.", " [Opci\u00F3n]..."}, + {"Options.", "Opciones:"}, + {"Use.keytool.help.for.all.available.commands", + "Utilice\"keytool -help\" para todos los comandos disponibles"}, + {"Key.and.Certificate.Management.Tool", + "Herramienta de Gesti\u00F3n de Certificados y Claves"}, + {"Commands.", "Comandos:"}, + {"Use.keytool.command.name.help.for.usage.of.command.name", + "Utilice \"keytool -command_name -help\" para la sintaxis de nombre_comando"}, + // keytool: help: commands + {"Generates.a.certificate.request", + "Genera una solicitud de certificado"}, //-certreq + {"Changes.an.entry.s.alias", + "Cambia un alias de entrada"}, //-changealias + {"Deletes.an.entry", + "Suprime una entrada"}, //-delete + {"Exports.certificate", + "Exporta el certificado"}, //-exportcert + {"Generates.a.key.pair", + "Genera un par de claves"}, //-genkeypair +// translation of "secret" key should be different to "private" key. + {"Generates.a.secret.key", + "Genera un clave secreta"}, //-genseckey + {"Generates.certificate.from.a.certificate.request", + "Genera un certificado a partir de una solicitud de certificado"}, //-gencert + {"Generates.CRL", "Genera CRL"}, //-gencrl + {"Imports.entries.from.a.JDK.1.1.x.style.identity.database", + "Importa entradas desde una base de datos de identidades JDK 1.1.x-style"}, //-identitydb + {"Imports.a.certificate.or.a.certificate.chain", + "Importa un certificado o una cadena de certificados"}, //-importcert + {"Imports.one.or.all.entries.from.another.keystore", + "Importa una o todas las entradas desde otro almac\u00E9n de claves"}, //-importkeystore + {"Clones.a.key.entry", + "Clona una entrada de clave"}, //-keyclone + {"Changes.the.key.password.of.an.entry", + "Cambia la contrase\u00F1a de clave de una entrada"}, //-keypasswd + {"Lists.entries.in.a.keystore", + "Enumera las entradas de un almac\u00E9n de claves"}, //-list + {"Prints.the.content.of.a.certificate", + "Imprime el contenido de un certificado"}, //-printcert + {"Prints.the.content.of.a.certificate.request", + "Imprime el contenido de una solicitud de certificado"}, //-printcertreq + {"Prints.the.content.of.a.CRL.file", + "Imprime el contenido de un archivo CRL"}, //-printcrl + {"Generates.a.self.signed.certificate", + "Genera un certificado autofirmado"}, //-selfcert + {"Changes.the.store.password.of.a.keystore", + "Cambia la contrase\u00F1a de almac\u00E9n de un almac\u00E9n de claves"}, //-storepasswd + // keytool: help: options + {"alias.name.of.the.entry.to.process", + "nombre de alias de la entrada que se va a procesar"}, //-alias + {"destination.alias", + "alias de destino"}, //-destalias + {"destination.key.password", + "contrase\u00F1a de clave de destino"}, //-destkeypass + {"destination.keystore.name", + "nombre de almac\u00E9n de claves de destino"}, //-destkeystore + {"destination.keystore.password.protected", + "almac\u00E9n de claves de destino protegido por contrase\u00F1a"}, //-destprotected + {"destination.keystore.provider.name", + "nombre de proveedor de almac\u00E9n de claves de destino"}, //-destprovidername + {"destination.keystore.password", + "contrase\u00F1a de almac\u00E9n de claves de destino"}, //-deststorepass + {"destination.keystore.type", + "tipo de almac\u00E9n de claves de destino"}, //-deststoretype + {"distinguished.name", + "nombre distintivo"}, //-dname + {"X.509.extension", + "extensi\u00F3n X.509"}, //-ext + {"output.file.name", + "nombre de archivo de salida"}, //-file and -outfile + {"input.file.name", + "nombre de archivo de entrada"}, //-file and -infile + {"key.algorithm.name", + "nombre de algoritmo de clave"}, //-keyalg + {"key.password", + "contrase\u00F1a de clave"}, //-keypass + {"key.bit.size", + "tama\u00F1o de bit de clave"}, //-keysize + {"keystore.name", + "nombre de almac\u00E9n de claves"}, //-keystore + {"new.password", + "nueva contrase\u00F1a"}, //-new + {"do.not.prompt", + "no solicitar"}, //-noprompt + {"password.through.protected.mechanism", + "contrase\u00F1a a trav\u00E9s de mecanismo protegido"}, //-protected + {"provider.argument", + "argumento del proveedor"}, //-providerarg + {"provider.class.name", + "nombre de clase del proveedor"}, //-providerclass + {"provider.name", + "nombre del proveedor"}, //-providername + {"provider.classpath", + "classpath de proveedor"}, //-providerpath + {"output.in.RFC.style", + "salida en estilo RFC"}, //-rfc + {"signature.algorithm.name", + "nombre de algoritmo de firma"}, //-sigalg + {"source.alias", + "alias de origen"}, //-srcalias + {"source.key.password", + "contrase\u00F1a de clave de origen"}, //-srckeypass + {"source.keystore.name", + "nombre de almac\u00E9n de claves de origen"}, //-srckeystore + {"source.keystore.password.protected", + "almac\u00E9n de claves de origen protegido por contrase\u00F1a"}, //-srcprotected + {"source.keystore.provider.name", + "nombre de proveedor de almac\u00E9n de claves de origen"}, //-srcprovidername + {"source.keystore.password", + "contrase\u00F1a de almac\u00E9n de claves de origen"}, //-srcstorepass + {"source.keystore.type", + "tipo de almac\u00E9n de claves de origen"}, //-srcstoretype + {"SSL.server.host.and.port", + "puerto y host del servidor SSL"}, //-sslserver + {"signed.jar.file", + "archivo jar firmado"}, //=jarfile + {"certificate.validity.start.date.time", + "fecha/hora de inicio de validez del certificado"}, //-startdate + {"keystore.password", + "contrase\u00F1a de almac\u00E9n de claves"}, //-storepass + {"keystore.type", + "tipo de almac\u00E9n de claves"}, //-storetype + {"trust.certificates.from.cacerts", + "certificados de protecci\u00F3n de cacerts"}, //-trustcacerts + {"verbose.output", + "salida detallada"}, //-v + {"validity.number.of.days", + "n\u00FAmero de validez de d\u00EDas"}, //-validity + {"Serial.ID.of.cert.to.revoke", + "identificador de serie del certificado que se va a revocar"}, //-id + // keytool: Running part + {"keytool.error.", "error de herramienta de claves: "}, + {"Illegal.option.", "Opci\u00F3n no permitida: "}, + {"Illegal.value.", "Valor no permitido: "}, + {"Unknown.password.type.", "Tipo de contrase\u00F1a desconocido: "}, + {"Cannot.find.environment.variable.", + "No se ha encontrado la variable del entorno: "}, + {"Cannot.find.file.", "No se ha encontrado el archivo: "}, + {"Command.option.flag.needs.an.argument.", "La opci\u00F3n de comando {0} necesita un argumento."}, + {"Warning.Different.store.and.key.passwords.not.supported.for.PKCS12.KeyStores.Ignoring.user.specified.command.value.", + "Advertencia: los almacenes de claves en formato PKCS12 no admiten contrase\u00F1as de clave y almacenamiento distintas. Se ignorar\u00E1 el valor especificado por el usuario, {0}."}, + {".keystore.must.be.NONE.if.storetype.is.{0}", + "-keystore debe ser NONE si -storetype es {0}"}, + {"Too.many.retries.program.terminated", + "Ha habido demasiados intentos, se ha cerrado el programa"}, + {".storepasswd.and.keypasswd.commands.not.supported.if.storetype.is.{0}", + "Los comandos -storepasswd y -keypasswd no est\u00E1n soportados si -storetype es {0}"}, + {".keypasswd.commands.not.supported.if.storetype.is.PKCS12", + "Los comandos -keypasswd no est\u00E1n soportados si -storetype es PKCS12"}, + {".keypass.and.new.can.not.be.specified.if.storetype.is.{0}", + "-keypass y -new no se pueden especificar si -storetype es {0}"}, + {"if.protected.is.specified.then.storepass.keypass.and.new.must.not.be.specified", + "si se especifica -protected, no deben especificarse -storepass, -keypass ni -new"}, + {"if.srcprotected.is.specified.then.srcstorepass.and.srckeypass.must.not.be.specified", + "Si se especifica -srcprotected, no se puede especificar -srcstorepass ni -srckeypass"}, + {"if.keystore.is.not.password.protected.then.storepass.keypass.and.new.must.not.be.specified", + "Si keystore no est\u00E1 protegido por contrase\u00F1a, no se deben especificar -storepass, -keypass ni -new"}, + {"if.source.keystore.is.not.password.protected.then.srcstorepass.and.srckeypass.must.not.be.specified", + "Si el almac\u00E9n de claves de origen no est\u00E1 protegido por contrase\u00F1a, no se deben especificar -srcstorepass ni -srckeypass"}, + {"Illegal.startdate.value", "Valor de fecha de inicio no permitido"}, + {"Validity.must.be.greater.than.zero", + "La validez debe ser mayor que cero"}, + {"provName.not.a.provider", "{0} no es un proveedor"}, + {"Usage.error.no.command.provided", "Error de sintaxis: no se ha proporcionado ning\u00FAn comando"}, + {"Source.keystore.file.exists.but.is.empty.", "El archivo de almac\u00E9n de claves de origen existe, pero est\u00E1 vac\u00EDo: "}, + {"Please.specify.srckeystore", "Especifique -srckeystore"}, + {"Must.not.specify.both.v.and.rfc.with.list.command", + "No se deben especificar -v y -rfc simult\u00E1neamente con el comando 'list'"}, + {"Key.password.must.be.at.least.6.characters", + "La contrase\u00F1a de clave debe tener al menos 6 caracteres"}, + {"New.password.must.be.at.least.6.characters", + "La nueva contrase\u00F1a debe tener al menos 6 caracteres"}, + {"Keystore.file.exists.but.is.empty.", + "El archivo de almac\u00E9n de claves existe, pero est\u00E1 vac\u00EDo: "}, + {"Keystore.file.does.not.exist.", + "El archivo de almac\u00E9n de claves no existe: "}, + {"Must.specify.destination.alias", "Se debe especificar un alias de destino"}, + {"Must.specify.alias", "Se debe especificar un alias"}, + {"Keystore.password.must.be.at.least.6.characters", + "La contrase\u00F1a del almac\u00E9n de claves debe tener al menos 6 caracteres"}, + {"Enter.keystore.password.", "Introduzca la contrase\u00F1a del almac\u00E9n de claves: "}, + {"Enter.source.keystore.password.", "Introduzca la contrase\u00F1a de almac\u00E9n de claves de origen: "}, + {"Enter.destination.keystore.password.", "Introduzca la contrase\u00F1a de almac\u00E9n de claves de destino: "}, + {"Keystore.password.is.too.short.must.be.at.least.6.characters", + "La contrase\u00F1a del almac\u00E9n de claves es demasiado corta, debe tener al menos 6 caracteres"}, + {"Unknown.Entry.Type", "Tipo de Entrada Desconocido"}, + {"Too.many.failures.Alias.not.changed", "Demasiados fallos. No se ha cambiado el alias"}, + {"Entry.for.alias.alias.successfully.imported.", + "La entrada del alias {0} se ha importado correctamente."}, + {"Entry.for.alias.alias.not.imported.", "La entrada del alias {0} no se ha importado."}, + {"Problem.importing.entry.for.alias.alias.exception.Entry.for.alias.alias.not.imported.", + "Problema al importar la entrada del alias {0}: {1}.\nNo se ha importado la entrada del alias {0}."}, + {"Import.command.completed.ok.entries.successfully.imported.fail.entries.failed.or.cancelled", + "Comando de importaci\u00F3n completado: {0} entradas importadas correctamente, {1} entradas incorrectas o canceladas"}, + {"Warning.Overwriting.existing.alias.alias.in.destination.keystore", + "Advertencia: se sobrescribir\u00E1 el alias {0} en el almac\u00E9n de claves de destino"}, + {"Existing.entry.alias.alias.exists.overwrite.no.", + "El alias de entrada existente {0} ya existe, \u00BFdesea sobrescribirlo? [no]: "}, + {"Too.many.failures.try.later", "Demasiados fallos; int\u00E9ntelo m\u00E1s adelante"}, + {"Certification.request.stored.in.file.filename.", + "Solicitud de certificaci\u00F3n almacenada en el archivo <{0}>"}, + {"Submit.this.to.your.CA", "Enviar a la CA"}, + {"if.alias.not.specified.destalias.srckeypass.and.destkeypass.must.not.be.specified", + "si no se especifica el alias, no se puede especificar destalias, srckeypass ni destkeypass"}, + {"Certificate.stored.in.file.filename.", + "Certificado almacenado en el archivo <{0}>"}, + {"Certificate.reply.was.installed.in.keystore", + "Se ha instalado la respuesta del certificado en el almac\u00E9n de claves"}, + {"Certificate.reply.was.not.installed.in.keystore", + "No se ha instalado la respuesta del certificado en el almac\u00E9n de claves"}, + {"Certificate.was.added.to.keystore", + "Se ha agregado el certificado al almac\u00E9n de claves"}, + {"Certificate.was.not.added.to.keystore", + "No se ha agregado el certificado al almac\u00E9n de claves"}, + {".Storing.ksfname.", "[Almacenando {0}]"}, + {"alias.has.no.public.key.certificate.", + "{0} no tiene clave p\u00FAblica (certificado)"}, + {"Cannot.derive.signature.algorithm", + "No se puede derivar el algoritmo de firma"}, + {"Alias.alias.does.not.exist", + "El alias <{0}> no existe"}, + {"Alias.alias.has.no.certificate", + "El alias <{0}> no tiene certificado"}, + {"Key.pair.not.generated.alias.alias.already.exists", + "No se ha generado el par de claves, el alias <{0}> ya existe"}, + {"Generating.keysize.bit.keyAlgName.key.pair.and.self.signed.certificate.sigAlgName.with.a.validity.of.validality.days.for", + "Generando par de claves {1} de {0} bits para certificado autofirmado ({2}) con una validez de {3} d\u00EDas\n\tpara: {4}"}, + {"Enter.key.password.for.alias.", "Introduzca la contrase\u00F1a de clave para <{0}>"}, + {".RETURN.if.same.as.keystore.password.", + "\t(INTRO si es la misma contrase\u00F1a que la del almac\u00E9n de claves): "}, + {"Key.password.is.too.short.must.be.at.least.6.characters", + "La contrase\u00F1a de clave es demasiado corta; debe tener al menos 6 caracteres"}, + {"Too.many.failures.key.not.added.to.keystore", + "Demasiados fallos; no se ha agregado la clave al almac\u00E9n de claves"}, + {"Destination.alias.dest.already.exists", + "El alias de destino <{0}> ya existe"}, + {"Password.is.too.short.must.be.at.least.6.characters", + "La contrase\u00F1a es demasiado corta; debe tener al menos 6 caracteres"}, + {"Too.many.failures.Key.entry.not.cloned", + "Demasiados fallos. No se ha clonado la entrada de clave"}, + {"key.password.for.alias.", "contrase\u00F1a de clave para <{0}>"}, + {"Keystore.entry.for.id.getName.already.exists", + "La entrada de almac\u00E9n de claves para <{0}> ya existe"}, + {"Creating.keystore.entry.for.id.getName.", + "Creando entrada de almac\u00E9n de claves para <{0}> ..."}, + {"No.entries.from.identity.database.added", + "No se han agregado entradas de la base de datos de identidades"}, + {"Alias.name.alias", "Nombre de Alias: {0}"}, + {"Creation.date.keyStore.getCreationDate.alias.", + "Fecha de Creaci\u00F3n: {0,date}"}, + {"alias.keyStore.getCreationDate.alias.", + "{0}, {1,date}, "}, + {"alias.", "{0}, "}, + {"Entry.type.type.", "Tipo de Entrada: {0}"}, + {"Certificate.chain.length.", "Longitud de la Cadena de Certificado: "}, + {"Certificate.i.1.", "Certificado[{0,number,integer}]:"}, + {"Certificate.fingerprint.SHA1.", "Huella Digital de Certificado (SHA1): "}, + {"Keystore.type.", "Tipo de Almac\u00E9n de Claves: "}, + {"Keystore.provider.", "Proveedor de Almac\u00E9n de Claves: "}, + {"Your.keystore.contains.keyStore.size.entry", + "Su almac\u00E9n de claves contiene {0,number,integer} entrada"}, + {"Your.keystore.contains.keyStore.size.entries", + "Su almac\u00E9n de claves contiene {0,number,integer} entradas"}, + {"Failed.to.parse.input", "Fallo al analizar la entrada"}, + {"Empty.input", "Entrada vac\u00EDa"}, + {"Not.X.509.certificate", "No es un certificado X.509"}, + {"alias.has.no.public.key", "{0} no tiene clave p\u00FAblica"}, + {"alias.has.no.X.509.certificate", "{0} no tiene certificado X.509"}, + {"New.certificate.self.signed.", "Nuevo Certificado (Autofirmado):"}, + {"Reply.has.no.certificates", "La respuesta no tiene certificados"}, + {"Certificate.not.imported.alias.alias.already.exists", + "Certificado no importado, el alias <{0}> ya existe"}, + {"Input.not.an.X.509.certificate", "La entrada no es un certificado X.509"}, + {"Certificate.already.exists.in.keystore.under.alias.trustalias.", + "El certificado ya existe en el almac\u00E9n de claves con el alias <{0}>"}, + {"Do.you.still.want.to.add.it.no.", + "\u00BFA\u00FAn desea agregarlo? [no]: "}, + {"Certificate.already.exists.in.system.wide.CA.keystore.under.alias.trustalias.", + "El certificado ya existe en el almac\u00E9n de claves de la CA del sistema, con el alias <{0}>"}, + {"Do.you.still.want.to.add.it.to.your.own.keystore.no.", + "\u00BFA\u00FAn desea agregarlo a su propio almac\u00E9n de claves? [no]: "}, + {"Trust.this.certificate.no.", "\u00BFConfiar en este certificado? [no]: "}, + {"YES", "S\u00ED"}, + {"New.prompt.", "Nuevo {0}: "}, + {"Passwords.must.differ", "Las contrase\u00F1as deben ser distintas"}, + {"Re.enter.new.prompt.", "Vuelva a escribir el nuevo {0}: "}, + {"Re.enter.new.password.", "Volver a escribir la contrase\u00F1a nueva: "}, + {"They.don.t.match.Try.again", "No coinciden. Int\u00E9ntelo de nuevo"}, + {"Enter.prompt.alias.name.", "Escriba el nombre de alias de {0}: "}, + {"Enter.new.alias.name.RETURN.to.cancel.import.for.this.entry.", + "Indique el nuevo nombre de alias\t(INTRO para cancelar la importaci\u00F3n de esta entrada): "}, + {"Enter.alias.name.", "Introduzca el nombre de alias: "}, + {".RETURN.if.same.as.for.otherAlias.", + "\t(INTRO si es el mismo que para <{0}>)"}, + {".PATTERN.printX509Cert", + "Propietario: {0}\nEmisor: {1}\nN\u00FAmero de serie: {2}\nV\u00E1lido desde: {3} hasta: {4}\nHuellas digitales del Certificado:\n\t MD5: {5}\n\t SHA1: {6}\n\t SHA256: {7}\n\t Nombre del Algoritmo de Firma: {8}\n\t Versi\u00F3n: {9}"}, + {"What.is.your.first.and.last.name.", + "\u00BFCu\u00E1les son su nombre y su apellido?"}, + {"What.is.the.name.of.your.organizational.unit.", + "\u00BFCu\u00E1l es el nombre de su unidad de organizaci\u00F3n?"}, + {"What.is.the.name.of.your.organization.", + "\u00BFCu\u00E1l es el nombre de su organizaci\u00F3n?"}, + {"What.is.the.name.of.your.City.or.Locality.", + "\u00BFCu\u00E1l es el nombre de su ciudad o localidad?"}, + {"What.is.the.name.of.your.State.or.Province.", + "\u00BFCu\u00E1l es el nombre de su estado o provincia?"}, + {"What.is.the.two.letter.country.code.for.this.unit.", + "\u00BFCu\u00E1l es el c\u00F3digo de pa\u00EDs de dos letras de la unidad?"}, + {"Is.name.correct.", "\u00BFEs correcto {0}?"}, + {"no", "no"}, + {"yes", "s\u00ED"}, + {"y", "s"}, + {".defaultValue.", " [{0}]: "}, + {"Alias.alias.has.no.key", + "El alias <{0}> no tiene clave"}, + {"Alias.alias.references.an.entry.type.that.is.not.a.private.key.entry.The.keyclone.command.only.supports.cloning.of.private.key", + "El alias <{0}> hace referencia a un tipo de entrada que no es una clave privada. El comando -keyclone s\u00F3lo permite la clonaci\u00F3n de entradas de claves privadas"}, + + {".WARNING.WARNING.WARNING.", + "***************** Advertencia Advertencia Advertencia *****************"}, + {"Signer.d.", "#%d de Firmante:"}, + {"Timestamp.", "Registro de Hora:"}, + {"Signature.", "Firma:"}, + {"CRLs.", "CRL:"}, + {"Certificate.owner.", "Propietario del Certificado: "}, + {"Not.a.signed.jar.file", "No es un archivo jar firmado"}, + {"No.certificate.from.the.SSL.server", + "Ning\u00FAn certificado del servidor SSL"}, + + {".The.integrity.of.the.information.stored.in.your.keystore.", + "* La integridad de la informaci\u00F3n almacenada en el almac\u00E9n de claves *\n* NO se ha comprobado. Para comprobar dicha integridad, *\n* debe proporcionar la contrase\u00F1a del almac\u00E9n de claves. *"}, + {".The.integrity.of.the.information.stored.in.the.srckeystore.", + "* La integridad de la informaci\u00F3n almacenada en srckeystore*\n* NO se ha comprobado. Para comprobar dicha integridad, *\n* debe proporcionar la contrase\u00F1a de srckeystore. *"}, + + {"Certificate.reply.does.not.contain.public.key.for.alias.", + "La respuesta de certificado no contiene una clave p\u00FAblica para <{0}>"}, + {"Incomplete.certificate.chain.in.reply", + "Cadena de certificado incompleta en la respuesta"}, + {"Certificate.chain.in.reply.does.not.verify.", + "La cadena de certificado de la respuesta no verifica: "}, + {"Top.level.certificate.in.reply.", + "Certificado de nivel superior en la respuesta:\n"}, + {".is.not.trusted.", "... no es de confianza. "}, + {"Install.reply.anyway.no.", "\u00BFInstalar respuesta de todos modos? [no]: "}, + {"NO", "No"}, + {"Public.keys.in.reply.and.keystore.don.t.match", + "Las claves p\u00FAblicas en la respuesta y en el almac\u00E9n de claves no coinciden"}, + {"Certificate.reply.and.certificate.in.keystore.are.identical", + "La respuesta del certificado y el certificado en el almac\u00E9n de claves son id\u00E9nticos"}, + {"Failed.to.establish.chain.from.reply", + "No se ha podido definir una cadena a partir de la respuesta"}, + {"n", "n"}, + {"Wrong.answer.try.again", "Respuesta incorrecta, vuelva a intentarlo"}, + {"Secret.key.not.generated.alias.alias.already.exists", + "No se ha generado la clave secreta, el alias <{0}> ya existe"}, + {"Please.provide.keysize.for.secret.key.generation", + "Proporcione el valor de -keysize para la generaci\u00F3n de claves secretas"}, + + {"Extensions.", "Extensiones: "}, + {".Empty.value.", "(Valor vac\u00EDo)"}, + {"Extension.Request.", "Solicitud de Extensi\u00F3n:"}, + {"PKCS.10.Certificate.Request.Version.1.0.Subject.s.Public.Key.s.format.s.key.", + "Solicitud de Certificado PKCS #10 (Versi\u00F3n 1.0)\nAsunto: %s\nClave P\u00FAblica: %s formato %s clave\n"}, + {"Unknown.keyUsage.type.", "Tipo de uso de clave desconocido: "}, + {"Unknown.extendedkeyUsage.type.", "Tipo de uso de clave extendida desconocido: "}, + {"Unknown.AccessDescription.type.", "Tipo de descripci\u00F3n de acceso desconocido: "}, + {"Unrecognized.GeneralName.type.", "Tipo de nombre general no reconocido: "}, + {"This.extension.cannot.be.marked.as.critical.", + "Esta extensi\u00F3n no se puede marcar como cr\u00EDtica. "}, + {"Odd.number.of.hex.digits.found.", "Se ha encontrado un n\u00FAmero impar de d\u00EDgitos hexadecimales: "}, + {"Unknown.extension.type.", "Tipo de extensi\u00F3n desconocida: "}, + {"command.{0}.is.ambiguous.", "El comando {0} es ambiguo:"} + }; + + + /** + * Returns the contents of this ResourceBundle. + * + *

+ * + * @return the contents of this ResourceBundle. + */ + @Override + public Object[][] getContents() { + return contents; + } +} diff --git a/jdk/src/share/classes/sun/security/tools/keytool/Resources_fr.java b/jdk/src/share/classes/sun/security/tools/keytool/Resources_fr.java new file mode 100644 index 00000000000..2ae14764d79 --- /dev/null +++ b/jdk/src/share/classes/sun/security/tools/keytool/Resources_fr.java @@ -0,0 +1,431 @@ +/* + * Copyright (c) 2000, 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. 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.security.tools.keytool; + +/** + *

This class represents the ResourceBundle + * for the keytool. + * + */ +public class Resources_fr extends java.util.ListResourceBundle { + + private static final Object[][] contents = { + {"NEWLINE", "\n"}, + {"STAR", + "*******************************************"}, + {"STARNN", + "*******************************************\n\n"}, + + // keytool: Help part +// "Option" should be translated. + {".OPTION.", " [Option]..."}, + {"Options.", "Options :"}, + {"Use.keytool.help.for.all.available.commands", + "Utiliser \"keytool -help\" pour toutes les commandes disponibles"}, + {"Key.and.Certificate.Management.Tool", + "Outil de gestion de certificats et de cl\u00E9s"}, + {"Commands.", "Commandes :"}, + {"Use.keytool.command.name.help.for.usage.of.command.name", + "Utiliser \"keytool -command_name -help\" pour la syntaxe de command_name"}, + // keytool: help: commands + {"Generates.a.certificate.request", + "G\u00E9n\u00E8re une demande de certificat"}, //-certreq + {"Changes.an.entry.s.alias", + "Modifie l'alias d'une entr\u00E9e"}, //-changealias + {"Deletes.an.entry", + "Supprime une entr\u00E9e"}, //-delete + {"Exports.certificate", + "Exporte le certificat"}, //-exportcert + {"Generates.a.key.pair", + "G\u00E9n\u00E8re une paire de cl\u00E9s"}, //-genkeypair +// translation of "secret" key should be different to "private" key. + {"Generates.a.secret.key", + "G\u00E9n\u00E8re une cl\u00E9 secr\u00E8te"}, //-genseckey + {"Generates.certificate.from.a.certificate.request", + "G\u00E9n\u00E8re le certificat \u00E0 partir d'une demande de certificat"}, //-gencert + {"Generates.CRL", "G\u00E9n\u00E8re la liste des certificats r\u00E9voqu\u00E9s (CRL)"}, //-gencrl + {"Imports.entries.from.a.JDK.1.1.x.style.identity.database", + "Importe les entr\u00E9es \u00E0 partir d'une base de donn\u00E9es d'identit\u00E9s de type JDK 1.1.x"}, //-identitydb + {"Imports.a.certificate.or.a.certificate.chain", + "Importe un certificat ou une cha\u00EEne de certificat"}, //-importcert + {"Imports.one.or.all.entries.from.another.keystore", + "Importe une entr\u00E9e ou la totalit\u00E9 des entr\u00E9es depuis un autre fichier de cl\u00E9s"}, //-importkeystore + {"Clones.a.key.entry", + "Clone une entr\u00E9e de cl\u00E9"}, //-keyclone + {"Changes.the.key.password.of.an.entry", + "Modifie le mot de passe de cl\u00E9 d'une entr\u00E9e"}, //-keypasswd + {"Lists.entries.in.a.keystore", + "R\u00E9pertorie les entr\u00E9es d'un fichier de cl\u00E9s"}, //-list + {"Prints.the.content.of.a.certificate", + "Imprime le contenu d'un certificat"}, //-printcert + {"Prints.the.content.of.a.certificate.request", + "Imprime le contenu d'une demande de certificat"}, //-printcertreq + {"Prints.the.content.of.a.CRL.file", + "Imprime le contenu d'un fichier de liste des certificats r\u00E9voqu\u00E9s (CRL)"}, //-printcrl + {"Generates.a.self.signed.certificate", + "G\u00E9n\u00E8re un certificat auto-sign\u00E9"}, //-selfcert + {"Changes.the.store.password.of.a.keystore", + "Modifie le mot de passe de banque d'un fichier de cl\u00E9s"}, //-storepasswd + // keytool: help: options + {"alias.name.of.the.entry.to.process", + "nom d'alias de l'entr\u00E9e \u00E0 traiter"}, //-alias + {"destination.alias", + "alias de destination"}, //-destalias + {"destination.key.password", + "mot de passe de la cl\u00E9 de destination"}, //-destkeypass + {"destination.keystore.name", + "nom du fichier de cl\u00E9s de destination"}, //-destkeystore + {"destination.keystore.password.protected", + "mot de passe du fichier de cl\u00E9s de destination prot\u00E9g\u00E9"}, //-destprotected + {"destination.keystore.provider.name", + "nom du fournisseur du fichier de cl\u00E9s de destination"}, //-destprovidername + {"destination.keystore.password", + "mot de passe du fichier de cl\u00E9s de destination"}, //-deststorepass + {"destination.keystore.type", + "type du fichier de cl\u00E9s de destination"}, //-deststoretype + {"distinguished.name", + "nom distinctif"}, //-dname + {"X.509.extension", + "extension X.509"}, //-ext + {"output.file.name", + "nom du fichier de sortie"}, //-file and -outfile + {"input.file.name", + "nom du fichier d'entr\u00E9e"}, //-file and -infile + {"key.algorithm.name", + "nom de l'algorithme de cl\u00E9"}, //-keyalg + {"key.password", + "mot de passe de la cl\u00E9"}, //-keypass + {"key.bit.size", + "taille en bits de la cl\u00E9"}, //-keysize + {"keystore.name", + "nom du fichier de cl\u00E9s"}, //-keystore + {"new.password", + "nouveau mot de passe"}, //-new + {"do.not.prompt", + "ne pas inviter"}, //-noprompt + {"password.through.protected.mechanism", + "mot de passe via m\u00E9canisme prot\u00E9g\u00E9"}, //-protected + {"provider.argument", + "argument du fournisseur"}, //-providerarg + {"provider.class.name", + "nom de la classe de fournisseur"}, //-providerclass + {"provider.name", + "nom du fournisseur"}, //-providername + {"provider.classpath", + "variable d'environnement CLASSPATH du fournisseur"}, //-providerpath + {"output.in.RFC.style", + "sortie au style RFC"}, //-rfc + {"signature.algorithm.name", + "nom de l'algorithme de signature"}, //-sigalg + {"source.alias", + "alias source"}, //-srcalias + {"source.key.password", + "mot de passe de la cl\u00E9 source"}, //-srckeypass + {"source.keystore.name", + "nom du fichier de cl\u00E9s source"}, //-srckeystore + {"source.keystore.password.protected", + "mot de passe du fichier de cl\u00E9s source prot\u00E9g\u00E9"}, //-srcprotected + {"source.keystore.provider.name", + "nom du fournisseur du fichier de cl\u00E9s source"}, //-srcprovidername + {"source.keystore.password", + "mot de passe du fichier de cl\u00E9s source"}, //-srcstorepass + {"source.keystore.type", + "type du fichier de cl\u00E9s source"}, //-srcstoretype + {"SSL.server.host.and.port", + "Port et h\u00F4te du serveur SSL"}, //-sslserver + {"signed.jar.file", + "fichier JAR sign\u00E9"}, //=jarfile + {"certificate.validity.start.date.time", + "date/heure de d\u00E9but de validit\u00E9 du certificat"}, //-startdate + {"keystore.password", + "mot de passe du fichier de cl\u00E9s"}, //-storepass + {"keystore.type", + "type du fichier de cl\u00E9s"}, //-storetype + {"trust.certificates.from.cacerts", + "certificats s\u00E9curis\u00E9s issus de certificats CA"}, //-trustcacerts + {"verbose.output", + "sortie en mode verbose"}, //-v + {"validity.number.of.days", + "nombre de jours de validit\u00E9"}, //-validity + {"Serial.ID.of.cert.to.revoke", + "ID de s\u00E9rie du certificat \u00E0 r\u00E9voquer"}, //-id + // keytool: Running part + {"keytool.error.", "erreur keytool : "}, + {"Illegal.option.", "Option non admise : "}, + {"Illegal.value.", "Valeur non admise : "}, + {"Unknown.password.type.", "Type de mot de passe inconnu : "}, + {"Cannot.find.environment.variable.", + "Variable d'environnement introuvable : "}, + {"Cannot.find.file.", "Fichier introuvable : "}, + {"Command.option.flag.needs.an.argument.", "L''option de commande {0} requiert un argument."}, + {"Warning.Different.store.and.key.passwords.not.supported.for.PKCS12.KeyStores.Ignoring.user.specified.command.value.", + "Avertissement\u00A0: les mots de passe de cl\u00E9 et de banque distincts ne sont pas pris en charge pour les fichiers de cl\u00E9s d''acc\u00E8s PKCS12. La valeur {0} sp\u00E9cifi\u00E9e par l''utilisateur est ignor\u00E9e."}, + {".keystore.must.be.NONE.if.storetype.is.{0}", + "-keystore doit \u00EAtre d\u00E9fini sur NONE si -storetype est {0}"}, + {"Too.many.retries.program.terminated", + "Trop de tentatives, fin du programme"}, + {".storepasswd.and.keypasswd.commands.not.supported.if.storetype.is.{0}", + "Les commandes -storepasswd et -keypasswd ne sont pas prises en charge si -storetype est d\u00E9fini sur {0}"}, + {".keypasswd.commands.not.supported.if.storetype.is.PKCS12", + "Les commandes -keypasswd ne sont pas prises en charge si -storetype est d\u00E9fini sur PKCS12"}, + {".keypass.and.new.can.not.be.specified.if.storetype.is.{0}", + "Les commandes -keypass et -new ne peuvent pas \u00EAtre sp\u00E9cifi\u00E9es si -storetype est d\u00E9fini sur {0}"}, + {"if.protected.is.specified.then.storepass.keypass.and.new.must.not.be.specified", + "si -protected est sp\u00E9cifi\u00E9, -storepass, -keypass et -new ne doivent pas \u00EAtre indiqu\u00E9s"}, + {"if.srcprotected.is.specified.then.srcstorepass.and.srckeypass.must.not.be.specified", + "Si -srcprotected est indiqu\u00E9, les commandes -srcstorepass et -srckeypass ne doivent pas \u00EAtre sp\u00E9cifi\u00E9es"}, + {"if.keystore.is.not.password.protected.then.storepass.keypass.and.new.must.not.be.specified", + "Si le fichier de cl\u00E9s n'est pas prot\u00E9g\u00E9 par un mot de passe, les commandes -storepass, -keypass et -new ne doivent pas \u00EAtre sp\u00E9cifi\u00E9es"}, + {"if.source.keystore.is.not.password.protected.then.srcstorepass.and.srckeypass.must.not.be.specified", + "Si le fichier de cl\u00E9s source n'est pas prot\u00E9g\u00E9 par un mot de passe, les commandes -srcstorepass et -srckeypass ne doivent pas \u00EAtre sp\u00E9cifi\u00E9es"}, + {"Illegal.startdate.value", "Valeur de date de d\u00E9but non admise"}, + {"Validity.must.be.greater.than.zero", + "La validit\u00E9 doit \u00EAtre sup\u00E9rieure \u00E0 z\u00E9ro"}, + {"provName.not.a.provider", "{0} n''est pas un fournisseur"}, + {"Usage.error.no.command.provided", "Erreur de syntaxe\u00A0: aucune commande fournie"}, + {"Source.keystore.file.exists.but.is.empty.", "Le fichier de cl\u00E9s source existe mais il est vide : "}, + {"Please.specify.srckeystore", "Indiquez -srckeystore"}, + {"Must.not.specify.both.v.and.rfc.with.list.command", + "-v et -rfc ne doivent pas \u00EAtre sp\u00E9cifi\u00E9s avec la commande 'list'"}, + {"Key.password.must.be.at.least.6.characters", + "Un mot de passe de cl\u00E9 doit comporter au moins 6 caract\u00E8res"}, + {"New.password.must.be.at.least.6.characters", + "Le nouveau mot de passe doit comporter au moins 6 caract\u00E8res"}, + {"Keystore.file.exists.but.is.empty.", + "Fichier de cl\u00E9s existant mais vide : "}, + {"Keystore.file.does.not.exist.", + "Le fichier de cl\u00E9s n'existe pas : "}, + {"Must.specify.destination.alias", "L'alias de destination doit \u00EAtre sp\u00E9cifi\u00E9"}, + {"Must.specify.alias", "L'alias doit \u00EAtre sp\u00E9cifi\u00E9"}, + {"Keystore.password.must.be.at.least.6.characters", + "Un mot de passe de fichier de cl\u00E9s doit comporter au moins 6 caract\u00E8res"}, + {"Enter.keystore.password.", "Entrez le mot de passe du fichier de cl\u00E9s : "}, + {"Enter.source.keystore.password.", "Entrez le mot de passe du fichier de cl\u00E9s source\u00A0: "}, + {"Enter.destination.keystore.password.", "Entrez le mot de passe du fichier de cl\u00E9s de destination\u00A0: "}, + {"Keystore.password.is.too.short.must.be.at.least.6.characters", + "Le mot de passe du fichier de cl\u00E9s est trop court : il doit comporter au moins 6 caract\u00E8res"}, + {"Unknown.Entry.Type", "Type d'entr\u00E9e inconnu"}, + {"Too.many.failures.Alias.not.changed", "Trop d'erreurs. Alias non modifi\u00E9"}, + {"Entry.for.alias.alias.successfully.imported.", + "L''entr\u00E9e de l''alias {0} a \u00E9t\u00E9 import\u00E9e."}, + {"Entry.for.alias.alias.not.imported.", "L''entr\u00E9e de l''alias {0} n''a pas \u00E9t\u00E9 import\u00E9e."}, + {"Problem.importing.entry.for.alias.alias.exception.Entry.for.alias.alias.not.imported.", + "Probl\u00E8me lors de l''import de l''entr\u00E9e de l''alias {0}\u00A0: {1}.\nL''entr\u00E9e de l''alias {0} n''a pas \u00E9t\u00E9 import\u00E9e."}, + {"Import.command.completed.ok.entries.successfully.imported.fail.entries.failed.or.cancelled", + "Commande d''import ex\u00E9cut\u00E9e\u00A0: {0} entr\u00E9es import\u00E9es, \u00E9chec ou annulation de {1} entr\u00E9es"}, + {"Warning.Overwriting.existing.alias.alias.in.destination.keystore", + "Avertissement\u00A0: l''alias {0} existant sera remplac\u00E9 dans le fichier de cl\u00E9s d''acc\u00E8s de destination"}, + {"Existing.entry.alias.alias.exists.overwrite.no.", + "L''alias d''entr\u00E9e {0} existe d\u00E9j\u00E0. Voulez-vous le remplacer ? [non]\u00A0: "}, + {"Too.many.failures.try.later", "Trop d'erreurs. R\u00E9essayez plus tard"}, + {"Certification.request.stored.in.file.filename.", + "Demande de certification stock\u00E9e dans le fichier <{0}>"}, + {"Submit.this.to.your.CA", "Soumettre \u00E0 votre CA"}, + {"if.alias.not.specified.destalias.srckeypass.and.destkeypass.must.not.be.specified", + "si l'alias n'est pas sp\u00E9cifi\u00E9, destalias, srckeypass et destkeypass ne doivent pas \u00EAtre sp\u00E9cifi\u00E9s"}, + {"Certificate.stored.in.file.filename.", + "Certificat stock\u00E9 dans le fichier <{0}>"}, + {"Certificate.reply.was.installed.in.keystore", + "R\u00E9ponse de certificat install\u00E9e dans le fichier de cl\u00E9s"}, + {"Certificate.reply.was.not.installed.in.keystore", + "R\u00E9ponse de certificat non install\u00E9e dans le fichier de cl\u00E9s"}, + {"Certificate.was.added.to.keystore", + "Certificat ajout\u00E9 au fichier de cl\u00E9s"}, + {"Certificate.was.not.added.to.keystore", + "Certificat non ajout\u00E9 au fichier de cl\u00E9s"}, + {".Storing.ksfname.", "[Stockage de {0}]"}, + {"alias.has.no.public.key.certificate.", + "{0} ne poss\u00E8de pas de cl\u00E9 publique (certificat)"}, + {"Cannot.derive.signature.algorithm", + "Impossible de d\u00E9duire l'algorithme de signature"}, + {"Alias.alias.does.not.exist", + "L''alias <{0}> n''existe pas"}, + {"Alias.alias.has.no.certificate", + "L''alias <{0}> ne poss\u00E8de pas de certificat"}, + {"Key.pair.not.generated.alias.alias.already.exists", + "Paire de cl\u00E9s non g\u00E9n\u00E9r\u00E9e, l''alias <{0}> existe d\u00E9j\u00E0"}, + {"Generating.keysize.bit.keyAlgName.key.pair.and.self.signed.certificate.sigAlgName.with.a.validity.of.validality.days.for", + "G\u00E9n\u00E9ration d''une paire de cl\u00E9s {1} de {0} bits et d''un certificat auto-sign\u00E9 ({2}) d''une validit\u00E9 de {3} jours\n\tpour : {4}"}, + {"Enter.key.password.for.alias.", "Entrez le mot de passe de la cl\u00E9 pour <{0}>"}, + {".RETURN.if.same.as.keystore.password.", + "\t(appuyez sur Entr\u00E9e s'il s'agit du mot de passe du fichier de cl\u00E9s) : "}, + {"Key.password.is.too.short.must.be.at.least.6.characters", + "Le mot de passe de la cl\u00E9 est trop court : il doit comporter au moins 6 caract\u00E8res"}, + {"Too.many.failures.key.not.added.to.keystore", + "Trop d'erreurs. Cl\u00E9 non ajout\u00E9e au fichier de cl\u00E9s"}, + {"Destination.alias.dest.already.exists", + "L''alias de la destination <{0}> existe d\u00E9j\u00E0"}, + {"Password.is.too.short.must.be.at.least.6.characters", + "Le mot de passe est trop court : il doit comporter au moins 6 caract\u00E8res"}, + {"Too.many.failures.Key.entry.not.cloned", + "Trop d'erreurs. Entr\u00E9e de cl\u00E9 non clon\u00E9e"}, + {"key.password.for.alias.", "mot de passe de cl\u00E9 pour <{0}>"}, + {"Keystore.entry.for.id.getName.already.exists", + "L''entr\u00E9e de fichier de cl\u00E9s d''acc\u00E8s pour <{0}> existe d\u00E9j\u00E0"}, + {"Creating.keystore.entry.for.id.getName.", + "Cr\u00E9ation d''une entr\u00E9e de fichier de cl\u00E9s d''acc\u00E8s pour <{0}>..."}, + {"No.entries.from.identity.database.added", + "Aucune entr\u00E9e ajout\u00E9e \u00E0 partir de la base de donn\u00E9es d'identit\u00E9s"}, + {"Alias.name.alias", "Nom d''alias : {0}"}, + {"Creation.date.keyStore.getCreationDate.alias.", + "Date de cr\u00E9ation : {0,date}"}, + {"alias.keyStore.getCreationDate.alias.", + "{0}, {1,date}, "}, + {"alias.", "{0}, "}, + {"Entry.type.type.", "Type d''entr\u00E9e\u00A0: {0}"}, + {"Certificate.chain.length.", "Longueur de cha\u00EEne du certificat : "}, + {"Certificate.i.1.", "Certificat[{0,number,integer}]:"}, + {"Certificate.fingerprint.SHA1.", "Empreinte du certificat (SHA1) : "}, + {"Keystore.type.", "Type de fichier de cl\u00E9s : "}, + {"Keystore.provider.", "Fournisseur de fichier de cl\u00E9s : "}, + {"Your.keystore.contains.keyStore.size.entry", + "Votre fichier de cl\u00E9s d''acc\u00E8s contient {0,number,integer} entr\u00E9e"}, + {"Your.keystore.contains.keyStore.size.entries", + "Votre fichier de cl\u00E9s d''acc\u00E8s contient {0,number,integer} entr\u00E9es"}, + {"Failed.to.parse.input", "L'analyse de l'entr\u00E9e a \u00E9chou\u00E9"}, + {"Empty.input", "Entr\u00E9e vide"}, + {"Not.X.509.certificate", "Pas un certificat X.509"}, + {"alias.has.no.public.key", "{0} ne poss\u00E8de pas de cl\u00E9 publique"}, + {"alias.has.no.X.509.certificate", "{0} ne poss\u00E8de pas de certificat X.509"}, + {"New.certificate.self.signed.", "Nouveau certificat (auto-sign\u00E9) :"}, + {"Reply.has.no.certificates", "La r\u00E9ponse n'a pas de certificat"}, + {"Certificate.not.imported.alias.alias.already.exists", + "Certificat non import\u00E9, l''alias <{0}> existe d\u00E9j\u00E0"}, + {"Input.not.an.X.509.certificate", "L'entr\u00E9e n'est pas un certificat X.509"}, + {"Certificate.already.exists.in.keystore.under.alias.trustalias.", + "Le certificat existe d\u00E9j\u00E0 dans le fichier de cl\u00E9s d''acc\u00E8s sous l''alias <{0}>"}, + {"Do.you.still.want.to.add.it.no.", + "Voulez-vous toujours l'ajouter ? [non] : "}, + {"Certificate.already.exists.in.system.wide.CA.keystore.under.alias.trustalias.", + "Le certificat existe d\u00E9j\u00E0 dans le fichier de cl\u00E9s d''acc\u00E8s CA syst\u00E8me sous l''alias <{0}>"}, + {"Do.you.still.want.to.add.it.to.your.own.keystore.no.", + "Voulez-vous toujours l'ajouter \u00E0 votre fichier de cl\u00E9s ? [non] : "}, + {"Trust.this.certificate.no.", "Faire confiance \u00E0 ce certificat ? [non] : "}, + {"YES", "Oui"}, + {"New.prompt.", "Nouveau {0} : "}, + {"Passwords.must.differ", "Les mots de passe doivent diff\u00E9rer"}, + {"Re.enter.new.prompt.", "Indiquez encore le nouveau {0} : "}, + {"Re.enter.new.password.", "Ressaisissez le nouveau mot de passe : "}, + {"They.don.t.match.Try.again", "Ils sont diff\u00E9rents. R\u00E9essayez."}, + {"Enter.prompt.alias.name.", "Indiquez le nom d''alias {0} : "}, + {"Enter.new.alias.name.RETURN.to.cancel.import.for.this.entry.", + "Saisissez le nom du nouvel alias\t(ou appuyez sur Entr\u00E9e pour annuler l'import de cette entr\u00E9e)\u00A0: "}, + {"Enter.alias.name.", "Indiquez le nom d'alias : "}, + {".RETURN.if.same.as.for.otherAlias.", + "\t(appuyez sur Entr\u00E9e si le r\u00E9sultat est identique \u00E0 <{0}>)"}, + {".PATTERN.printX509Cert", + "Propri\u00E9taire : {0}\nEmetteur : {1}\nNum\u00E9ro de s\u00E9rie : {2}\nValide du : {3} au : {4}\nEmpreintes du certificat :\n\t MD5: {5}\n\t SHA1 : {6}\n\t SHA256 : {7}\n\t Nom de l''algorithme de signature : {8}\n\t Version : {9}"}, + {"What.is.your.first.and.last.name.", + "Quels sont vos nom et pr\u00E9nom ?"}, + {"What.is.the.name.of.your.organizational.unit.", + "Quel est le nom de votre unit\u00E9 organisationnelle ?"}, + {"What.is.the.name.of.your.organization.", + "Quel est le nom de votre entreprise ?"}, + {"What.is.the.name.of.your.City.or.Locality.", + "Quel est le nom de votre ville de r\u00E9sidence ?"}, + {"What.is.the.name.of.your.State.or.Province.", + "Quel est le nom de votre \u00E9tat ou province ?"}, + {"What.is.the.two.letter.country.code.for.this.unit.", + "Quel est le code pays \u00E0 deux lettres pour cette unit\u00E9 ?"}, + {"Is.name.correct.", "Est-ce {0} ?"}, + {"no", "non"}, + {"yes", "oui"}, + {"y", "o"}, + {".defaultValue.", " [{0}]: "}, + {"Alias.alias.has.no.key", + "L''alias <{0}> n''est associ\u00E9 \u00E0 aucune cl\u00E9"}, + {"Alias.alias.references.an.entry.type.that.is.not.a.private.key.entry.The.keyclone.command.only.supports.cloning.of.private.key", + "L''entr\u00E9e \u00E0 laquelle l''alias <{0}> fait r\u00E9f\u00E9rence n''est pas une entr\u00E9e de type cl\u00E9 priv\u00E9e. La commande -keyclone prend uniquement en charge le clonage des cl\u00E9s priv\u00E9es"}, + + {".WARNING.WARNING.WARNING.", + "***************** Avertissement Avertissement Avertissement *****************"}, + {"Signer.d.", "Signataire n\u00B0%d :"}, + {"Timestamp.", "Horodatage :"}, + {"Signature.", "Signature :"}, + {"CRLs.", "Listes des certificats r\u00E9voqu\u00E9s (CRL) :"}, + {"Certificate.owner.", "Propri\u00E9taire du certificat : "}, + {"Not.a.signed.jar.file", "Fichier JAR non sign\u00E9"}, + {"No.certificate.from.the.SSL.server", + "Aucun certificat du serveur SSL"}, + + {".The.integrity.of.the.information.stored.in.your.keystore.", + "* L'int\u00E9grit\u00E9 des informations stock\u00E9es dans votre fichier de cl\u00E9s *\n* n'a PAS \u00E9t\u00E9 v\u00E9rifi\u00E9e. Pour cela, *\n* vous devez fournir le mot de passe de votre fichier de cl\u00E9s. *"}, + {".The.integrity.of.the.information.stored.in.the.srckeystore.", + "* L'int\u00E9grit\u00E9 des informations stock\u00E9es dans le fichier de cl\u00E9s source *\n* n'a PAS \u00E9t\u00E9 v\u00E9rifi\u00E9e. Pour cela, *\n* vous devez fournir le mot de passe de votre fichier de cl\u00E9s source. *"}, + + {"Certificate.reply.does.not.contain.public.key.for.alias.", + "La r\u00E9ponse au certificat ne contient pas de cl\u00E9 publique pour <{0}>"}, + {"Incomplete.certificate.chain.in.reply", + "Cha\u00EEne de certificat incompl\u00E8te dans la r\u00E9ponse"}, + {"Certificate.chain.in.reply.does.not.verify.", + "La cha\u00EEne de certificat de la r\u00E9ponse ne concorde pas : "}, + {"Top.level.certificate.in.reply.", + "Certificat de niveau sup\u00E9rieur dans la r\u00E9ponse :\n"}, + {".is.not.trusted.", "... non s\u00E9curis\u00E9. "}, + {"Install.reply.anyway.no.", "Installer la r\u00E9ponse quand m\u00EAme ? [non] : "}, + {"NO", "Non"}, + {"Public.keys.in.reply.and.keystore.don.t.match", + "Les cl\u00E9s publiques de la r\u00E9ponse et du fichier de cl\u00E9s ne concordent pas"}, + {"Certificate.reply.and.certificate.in.keystore.are.identical", + "La r\u00E9ponse au certificat et le certificat du fichier de cl\u00E9s sont identiques"}, + {"Failed.to.establish.chain.from.reply", + "Impossible de cr\u00E9er une cha\u00EEne \u00E0 partir de la r\u00E9ponse"}, + {"n", "n"}, + {"Wrong.answer.try.again", "R\u00E9ponse incorrecte, recommencez"}, + {"Secret.key.not.generated.alias.alias.already.exists", + "Cl\u00E9 secr\u00E8te non g\u00E9n\u00E9r\u00E9e, l''alias <{0}> existe d\u00E9j\u00E0"}, + {"Please.provide.keysize.for.secret.key.generation", + "Indiquez -keysize pour la g\u00E9n\u00E9ration de la cl\u00E9 secr\u00E8te"}, + + {"Extensions.", "Extensions\u00A0: "}, + {".Empty.value.", "(Valeur vide)"}, + {"Extension.Request.", "Demande d'extension :"}, + {"PKCS.10.Certificate.Request.Version.1.0.Subject.s.Public.Key.s.format.s.key.", + "Demande de certificat PKCS #10 (version 1.0)\nSujet : %s\nCl\u00E9 publique : format %s pour la cl\u00E9 %s\n"}, + {"Unknown.keyUsage.type.", "Type keyUsage inconnu : "}, + {"Unknown.extendedkeyUsage.type.", "Type extendedkeyUsage inconnu : "}, + {"Unknown.AccessDescription.type.", "Type AccessDescription inconnu : "}, + {"Unrecognized.GeneralName.type.", "Type GeneralName non reconnu : "}, + {"This.extension.cannot.be.marked.as.critical.", + "Cette extension ne peut pas \u00EAtre marqu\u00E9e comme critique. "}, + {"Odd.number.of.hex.digits.found.", "Nombre impair de chiffres hexad\u00E9cimaux trouv\u00E9 : "}, + {"Unknown.extension.type.", "Type d'extension inconnu : "}, + {"command.{0}.is.ambiguous.", "commande {0} ambigu\u00EB :"} + }; + + + /** + * Returns the contents of this ResourceBundle. + * + *

+ * + * @return the contents of this ResourceBundle. + */ + @Override + public Object[][] getContents() { + return contents; + } +} diff --git a/jdk/src/share/classes/sun/security/tools/keytool/Resources_it.java b/jdk/src/share/classes/sun/security/tools/keytool/Resources_it.java new file mode 100644 index 00000000000..0557fdc0943 --- /dev/null +++ b/jdk/src/share/classes/sun/security/tools/keytool/Resources_it.java @@ -0,0 +1,431 @@ +/* + * Copyright (c) 2000, 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. 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.security.tools.keytool; + +/** + *

This class represents the ResourceBundle + * for the keytool. + * + */ +public class Resources_it extends java.util.ListResourceBundle { + + private static final Object[][] contents = { + {"NEWLINE", "\n"}, + {"STAR", + "*******************************************"}, + {"STARNN", + "*******************************************\n\n"}, + + // keytool: Help part +// "Option" should be translated. + {".OPTION.", " [Opzione]..."}, + {"Options.", "Opzioni:"}, + {"Use.keytool.help.for.all.available.commands", + "Utilizzare \"keytool -help\" per visualizzare tutti i comandi disponibili"}, + {"Key.and.Certificate.Management.Tool", + "Strumento di gestione di chiavi e certificati"}, + {"Commands.", "Comandi:"}, + {"Use.keytool.command.name.help.for.usage.of.command.name", + "Utilizzare \"keytool -command_name -help\" per informazioni sull'uso di command_name"}, + // keytool: help: commands + {"Generates.a.certificate.request", + "Genera una richiesta di certificato"}, //-certreq + {"Changes.an.entry.s.alias", + "Modifica l'alias di una voce"}, //-changealias + {"Deletes.an.entry", + "Elimina una voce"}, //-delete + {"Exports.certificate", + "Esporta il certificato"}, //-exportcert + {"Generates.a.key.pair", + "Genera una coppia di chiavi"}, //-genkeypair +// translation of "secret" key should be different to "private" key. + {"Generates.a.secret.key", + "Genera una chiave segreta"}, //-genseckey + {"Generates.certificate.from.a.certificate.request", + "Genera un certificato da una richiesta di certificato"}, //-gencert + {"Generates.CRL", "Genera CRL"}, //-gencrl + {"Imports.entries.from.a.JDK.1.1.x.style.identity.database", + "Importa le voci da un database delle identit\u00E0 di tipo JDK 1.1.x"}, //-identitydb + {"Imports.a.certificate.or.a.certificate.chain", + "Importa un certificato o una catena di certificati"}, //-importcert + {"Imports.one.or.all.entries.from.another.keystore", + "Importa una o tutte le voci da un altro keystore"}, //-importkeystore + {"Clones.a.key.entry", + "Duplica una voce di chiave"}, //-keyclone + {"Changes.the.key.password.of.an.entry", + "Modifica la password della chiave per una voce"}, //-keypasswd + {"Lists.entries.in.a.keystore", + "Elenca le voci in un keystore"}, //-list + {"Prints.the.content.of.a.certificate", + "Visualizza i contenuti di un certificato"}, //-printcert + {"Prints.the.content.of.a.certificate.request", + "Visualizza i contenuti di una richiesta di certificato"}, //-printcertreq + {"Prints.the.content.of.a.CRL.file", + "Visualizza i contenuti di un file CRL"}, //-printcrl + {"Generates.a.self.signed.certificate", + "Genera certificato con firma automatica"}, //-selfcert + {"Changes.the.store.password.of.a.keystore", + "Modifica la password di area di memorizzazione di un keystore"}, //-storepasswd + // keytool: help: options + {"alias.name.of.the.entry.to.process", + "nome alias della voce da elaborare"}, //-alias + {"destination.alias", + "alias di destinazione"}, //-destalias + {"destination.key.password", + "password chiave di destinazione"}, //-destkeypass + {"destination.keystore.name", + "nome keystore di destinazione"}, //-destkeystore + {"destination.keystore.password.protected", + "password keystore di destinazione protetta"}, //-destprotected + {"destination.keystore.provider.name", + "nome provider keystore di destinazione"}, //-destprovidername + {"destination.keystore.password", + "password keystore di destinazione"}, //-deststorepass + {"destination.keystore.type", + "tipo keystore di destinazione"}, //-deststoretype + {"distinguished.name", + "nome distinto"}, //-dname + {"X.509.extension", + "estensione X.509"}, //-ext + {"output.file.name", + "nome file di output"}, //-file and -outfile + {"input.file.name", + "nome file di input"}, //-file and -infile + {"key.algorithm.name", + "nome algoritmo chiave"}, //-keyalg + {"key.password", + "password chiave"}, //-keypass + {"key.bit.size", + "dimensione bit chiave"}, //-keysize + {"keystore.name", + "nome keystore"}, //-keystore + {"new.password", + "nuova password"}, //-new + {"do.not.prompt", + "non richiedere"}, //-noprompt + {"password.through.protected.mechanism", + "password mediante meccanismo protetto"}, //-protected + {"provider.argument", + "argomento provider"}, //-providerarg + {"provider.class.name", + "nome classe provider"}, //-providerclass + {"provider.name", + "nome provider"}, //-providername + {"provider.classpath", + "classpath provider"}, //-providerpath + {"output.in.RFC.style", + "output in stile RFC"}, //-rfc + {"signature.algorithm.name", + "nome algoritmo firma"}, //-sigalg + {"source.alias", + "alias origine"}, //-srcalias + {"source.key.password", + "password chiave di origine"}, //-srckeypass + {"source.keystore.name", + "nome keystore di origine"}, //-srckeystore + {"source.keystore.password.protected", + "password keystore di origine protetta"}, //-srcprotected + {"source.keystore.provider.name", + "nome provider keystore di origine"}, //-srcprovidername + {"source.keystore.password", + "password keystore di origine"}, //-srcstorepass + {"source.keystore.type", + "tipo keystore di origine"}, //-srcstoretype + {"SSL.server.host.and.port", + "host e porta server SSL"}, //-sslserver + {"signed.jar.file", + "file jar firmato"}, //=jarfile + {"certificate.validity.start.date.time", + "data/ora di inizio validit\u00E0 certificato"}, //-startdate + {"keystore.password", + "password keystore"}, //-storepass + {"keystore.type", + "tipo keystore"}, //-storetype + {"trust.certificates.from.cacerts", + "considera sicuri i certificati da cacerts"}, //-trustcacerts + {"verbose.output", + "output descrittivo"}, //-v + {"validity.number.of.days", + "numero di giorni di validit\u00E0"}, //-validity + {"Serial.ID.of.cert.to.revoke", + "ID seriale del certificato da revocare"}, //-id + // keytool: Running part + {"keytool.error.", "Errore keytool: "}, + {"Illegal.option.", "Opzione non valida: "}, + {"Illegal.value.", "Valore non valido: "}, + {"Unknown.password.type.", "Tipo di password sconosciuto: "}, + {"Cannot.find.environment.variable.", + "Impossibile trovare la variabile di ambiente: "}, + {"Cannot.find.file.", "Impossibile trovare il file: "}, + {"Command.option.flag.needs.an.argument.", "\u00C8 necessario specificare un argomento per l''opzione di comando {0}."}, + {"Warning.Different.store.and.key.passwords.not.supported.for.PKCS12.KeyStores.Ignoring.user.specified.command.value.", + "Avvertenza: non sono supportate password diverse di chiave e di archivio per i keystore PKCS12. Il valore {0} specificato dall''utente verr\u00E0 ignorato."}, + {".keystore.must.be.NONE.if.storetype.is.{0}", + "Se -storetype \u00E8 impostato su {0}, -keystore deve essere impostato su NONE"}, + {"Too.many.retries.program.terminated", + "Il numero dei tentativi consentiti \u00E8 stato superato. Il programma verr\u00E0 terminato."}, + {".storepasswd.and.keypasswd.commands.not.supported.if.storetype.is.{0}", + "Se -storetype \u00E8 impostato su {0}, i comandi -storepasswd e -keypasswd non sono supportati"}, + {".keypasswd.commands.not.supported.if.storetype.is.PKCS12", + "Se -storetype \u00E8 impostato su PKCS12 i comandi -keypasswd non vengono supportati"}, + {".keypass.and.new.can.not.be.specified.if.storetype.is.{0}", + "Se -storetype \u00E8 impostato su {0}, non \u00E8 possibile specificare un valore per -keypass e -new"}, + {"if.protected.is.specified.then.storepass.keypass.and.new.must.not.be.specified", + "Se \u00E8 specificata l'opzione -protected, le opzioni -storepass, -keypass e -new non possono essere specificate"}, + {"if.srcprotected.is.specified.then.srcstorepass.and.srckeypass.must.not.be.specified", + "Se viene specificato -srcprotected, -srcstorepass e -srckeypass non dovranno essere specificati"}, + {"if.keystore.is.not.password.protected.then.storepass.keypass.and.new.must.not.be.specified", + "Se il file keystore non \u00E8 protetto da password, non deve essere specificato alcun valore per -storepass, -keypass e -new"}, + {"if.source.keystore.is.not.password.protected.then.srcstorepass.and.srckeypass.must.not.be.specified", + "Se il file keystore non \u00E8 protetto da password, non deve essere specificato alcun valore per -srcstorepass e -srckeypass"}, + {"Illegal.startdate.value", "Valore di data di inizio non valido"}, + {"Validity.must.be.greater.than.zero", + "La validit\u00E0 deve essere maggiore di zero"}, + {"provName.not.a.provider", "{0} non \u00E8 un provider"}, + {"Usage.error.no.command.provided", "Errore di utilizzo: nessun comando specificato"}, + {"Source.keystore.file.exists.but.is.empty.", "Il file keystore di origine esiste, ma \u00E8 vuoto: "}, + {"Please.specify.srckeystore", "Specificare -srckeystore"}, + {"Must.not.specify.both.v.and.rfc.with.list.command", + "Impossibile specificare sia -v sia -rfc con il comando 'list'"}, + {"Key.password.must.be.at.least.6.characters", + "La password della chiave deve contenere almeno 6 caratteri"}, + {"New.password.must.be.at.least.6.characters", + "La nuova password deve contenere almeno 6 caratteri"}, + {"Keystore.file.exists.but.is.empty.", + "Il file keystore esiste ma \u00E8 vuoto: "}, + {"Keystore.file.does.not.exist.", + "Il file keystore non esiste: "}, + {"Must.specify.destination.alias", "\u00C8 necessario specificare l'alias di destinazione"}, + {"Must.specify.alias", "\u00C8 necessario specificare l'alias"}, + {"Keystore.password.must.be.at.least.6.characters", + "La password del keystore deve contenere almeno 6 caratteri"}, + {"Enter.keystore.password.", "Immettere la password del keystore: "}, + {"Enter.source.keystore.password.", "Immettere la password del keystore di origine: "}, + {"Enter.destination.keystore.password.", "Immettere la password del keystore di destinazione: "}, + {"Keystore.password.is.too.short.must.be.at.least.6.characters", + "La password del keystore \u00E8 troppo corta - deve contenere almeno 6 caratteri"}, + {"Unknown.Entry.Type", "Tipo di voce sconosciuto"}, + {"Too.many.failures.Alias.not.changed", "Numero eccessivo di errori. L'alias non \u00E8 stato modificato."}, + {"Entry.for.alias.alias.successfully.imported.", + "La voce dell''alias {0} \u00E8 stata importata."}, + {"Entry.for.alias.alias.not.imported.", "La voce dell''alias {0} non \u00E8 stata importata."}, + {"Problem.importing.entry.for.alias.alias.exception.Entry.for.alias.alias.not.imported.", + "Si \u00E8 verificato un problema durante l''importazione della voce dell''alias {0}: {1}.\nLa voce dell''alias {0} non \u00E8 stata importata."}, + {"Import.command.completed.ok.entries.successfully.imported.fail.entries.failed.or.cancelled", + "Comando di importazione completato: {0} voce/i importata/e, {1} voce/i non importata/e o annullata/e"}, + {"Warning.Overwriting.existing.alias.alias.in.destination.keystore", + "Avvertenza: sovrascrittura in corso dell''alias {0} nel file keystore di destinazione"}, + {"Existing.entry.alias.alias.exists.overwrite.no.", + "La voce dell''alias {0} esiste gi\u00E0. Sovrascrivere? [no]: "}, + {"Too.many.failures.try.later", "Troppi errori - riprovare"}, + {"Certification.request.stored.in.file.filename.", + "La richiesta di certificazione \u00E8 memorizzata nel file <{0}>"}, + {"Submit.this.to.your.CA", "Sottomettere alla propria CA"}, + {"if.alias.not.specified.destalias.srckeypass.and.destkeypass.must.not.be.specified", + "Se l'alias non \u00E8 specificato, destalias, srckeypass e destkeypass non dovranno essere specificati"}, + {"Certificate.stored.in.file.filename.", + "Il certificato \u00E8 memorizzato nel file <{0}>"}, + {"Certificate.reply.was.installed.in.keystore", + "La risposta del certificato \u00E8 stata installata nel keystore"}, + {"Certificate.reply.was.not.installed.in.keystore", + "La risposta del certificato non \u00E8 stata installata nel keystore"}, + {"Certificate.was.added.to.keystore", + "Il certificato \u00E8 stato aggiunto al keystore"}, + {"Certificate.was.not.added.to.keystore", + "Il certificato non \u00E8 stato aggiunto al keystore"}, + {".Storing.ksfname.", "[Memorizzazione di {0}] in corso"}, + {"alias.has.no.public.key.certificate.", + "{0} non dispone di chiave pubblica (certificato)"}, + {"Cannot.derive.signature.algorithm", + "Impossibile derivare l'algoritmo di firma"}, + {"Alias.alias.does.not.exist", + "L''alias <{0}> non esiste"}, + {"Alias.alias.has.no.certificate", + "L''alias <{0}> non dispone di certificato"}, + {"Key.pair.not.generated.alias.alias.already.exists", + "Non \u00E8 stata generata la coppia di chiavi, l''alias <{0}> \u00E8 gi\u00E0 esistente"}, + {"Generating.keysize.bit.keyAlgName.key.pair.and.self.signed.certificate.sigAlgName.with.a.validity.of.validality.days.for", + "Generazione in corso di una coppia di chiavi {1} da {0} bit e di un certificato autofirmato ({2}) con una validit\u00E0 di {3} giorni\n\tper: {4}"}, + {"Enter.key.password.for.alias.", "Immettere la password della chiave per <{0}>"}, + {".RETURN.if.same.as.keystore.password.", + "\t(INVIO se corrisponde alla password del keystore): "}, + {"Key.password.is.too.short.must.be.at.least.6.characters", + "La password della chiave \u00E8 troppo corta - deve contenere almeno 6 caratteri"}, + {"Too.many.failures.key.not.added.to.keystore", + "Troppi errori - la chiave non \u00E8 stata aggiunta al keystore"}, + {"Destination.alias.dest.already.exists", + "L''alias di destinazione <{0}> \u00E8 gi\u00E0 esistente"}, + {"Password.is.too.short.must.be.at.least.6.characters", + "La password \u00E8 troppo corta - deve contenere almeno 6 caratteri"}, + {"Too.many.failures.Key.entry.not.cloned", + "Numero eccessivo di errori. Il valore della chiave non \u00E8 stato copiato."}, + {"key.password.for.alias.", "password della chiave per <{0}>"}, + {"Keystore.entry.for.id.getName.already.exists", + "La voce del keystore per <{0}> esiste gi\u00E0"}, + {"Creating.keystore.entry.for.id.getName.", + "Creazione della voce del keystore per <{0}> in corso..."}, + {"No.entries.from.identity.database.added", + "Nessuna voce aggiunta dal database delle identit\u00E0"}, + {"Alias.name.alias", "Nome alias: {0}"}, + {"Creation.date.keyStore.getCreationDate.alias.", + "Data di creazione: {0,date}"}, + {"alias.keyStore.getCreationDate.alias.", + "{0}, {1,date}, "}, + {"alias.", "{0}, "}, + {"Entry.type.type.", "Tipo di voce: {0}"}, + {"Certificate.chain.length.", "Lunghezza catena certificati: "}, + {"Certificate.i.1.", "Certificato[{0,number,integer}]:"}, + {"Certificate.fingerprint.SHA1.", "Impronta digitale certificato (SHA1): "}, + {"Keystore.type.", "Tipo keystore: "}, + {"Keystore.provider.", "Provider keystore: "}, + {"Your.keystore.contains.keyStore.size.entry", + "Il keystore contiene {0,number,integer} voce"}, + {"Your.keystore.contains.keyStore.size.entries", + "Il keystore contiene {0,number,integer} voci"}, + {"Failed.to.parse.input", "Impossibile analizzare l'input"}, + {"Empty.input", "Input vuoto"}, + {"Not.X.509.certificate", "Il certificato non \u00E8 X.509"}, + {"alias.has.no.public.key", "{0} non dispone di chiave pubblica"}, + {"alias.has.no.X.509.certificate", "{0} non dispone di certificato X.509"}, + {"New.certificate.self.signed.", "Nuovo certificato (autofirmato):"}, + {"Reply.has.no.certificates", "La risposta non dispone di certificati"}, + {"Certificate.not.imported.alias.alias.already.exists", + "Impossibile importare il certificato, l''alias <{0}> \u00E8 gi\u00E0 esistente"}, + {"Input.not.an.X.509.certificate", "L'input non \u00E8 un certificato X.509"}, + {"Certificate.already.exists.in.keystore.under.alias.trustalias.", + "Il certificato esiste gi\u00E0 nel keystore con alias <{0}>"}, + {"Do.you.still.want.to.add.it.no.", + "Aggiungerlo ugualmente? [no]: "}, + {"Certificate.already.exists.in.system.wide.CA.keystore.under.alias.trustalias.", + "Il certificato esiste gi\u00E0 nel keystore CA con alias <{0}>"}, + {"Do.you.still.want.to.add.it.to.your.own.keystore.no.", + "Aggiungerlo al proprio keystore? [no]: "}, + {"Trust.this.certificate.no.", "Considerare sicuro questo certificato? [no]: "}, + {"YES", "S\u00EC"}, + {"New.prompt.", "Nuova {0}: "}, + {"Passwords.must.differ", "Le password non devono coincidere"}, + {"Re.enter.new.prompt.", "Reimmettere un nuovo valore per {0}: "}, + {"Re.enter.new.password.", "Immettere nuovamente la nuova password: "}, + {"They.don.t.match.Try.again", "Non corrispondono. Riprovare."}, + {"Enter.prompt.alias.name.", "Immettere nome alias {0}: "}, + {"Enter.new.alias.name.RETURN.to.cancel.import.for.this.entry.", + "Immettere un nuovo nome alias\t(premere INVIO per annullare l'importazione della voce): "}, + {"Enter.alias.name.", "Immettere nome alias: "}, + {".RETURN.if.same.as.for.otherAlias.", + "\t(INVIO se corrisponde al nome di <{0}>"}, + {".PATTERN.printX509Cert", + "Proprietario: {0}\nAutorit\u00E0 emittente: {1}\nNumero di serie: {2}\nValido da: {3} a: {4}\nImpronte digitali certificato:\n\t MD5: {5}\n\t SHA1: {6}\n\t SHA256: {7}\n\t Nome algoritmo firma: {8}\n\t Versione: {9}"}, + {"What.is.your.first.and.last.name.", + "Specificare nome e cognome"}, + {"What.is.the.name.of.your.organizational.unit.", + "Specificare il nome dell'unit\u00E0 organizzativa"}, + {"What.is.the.name.of.your.organization.", + "Specificare il nome dell'organizzazione"}, + {"What.is.the.name.of.your.City.or.Locality.", + "Specificare la localit\u00E0"}, + {"What.is.the.name.of.your.State.or.Province.", + "Specificare la provincia"}, + {"What.is.the.two.letter.country.code.for.this.unit.", + "Specificare il codice a due lettere del paese in cui si trova l'unit\u00E0"}, + {"Is.name.correct.", "Il dato {0} \u00E8 corretto?"}, + {"no", "no"}, + {"yes", "s\u00EC"}, + {"y", "s"}, + {".defaultValue.", " [{0}]: "}, + {"Alias.alias.has.no.key", + "All''alias <{0}> non \u00E8 associata alcuna chiave"}, + {"Alias.alias.references.an.entry.type.that.is.not.a.private.key.entry.The.keyclone.command.only.supports.cloning.of.private.key", + "L''alias <{0}> fa riferimento a un tipo di voce che non \u00E8 una voce di chiave privata. Il comando -keyclone supporta solo la copia delle voci di chiave private."}, + + {".WARNING.WARNING.WARNING.", + "***************** Avvertenza Avvertenza Avvertenza *****************"}, + {"Signer.d.", "Firmatario #%d:"}, + {"Timestamp.", "Indicatore orario:"}, + {"Signature.", "Firma:"}, + {"CRLs.", "CRL:"}, + {"Certificate.owner.", "Proprietario certificato: "}, + {"Not.a.signed.jar.file", "Non \u00E8 un file jar firmato"}, + {"No.certificate.from.the.SSL.server", + "Nessun certificato dal server SSL"}, + + {".The.integrity.of.the.information.stored.in.your.keystore.", + "* L'integrit\u00E0 delle informazioni memorizzate nel keystore *\n* NON \u00E8 stata verificata. Per verificarne l'integrit\u00E0 *\n* \u00E8 necessario fornire la password del keystore. *"}, + {".The.integrity.of.the.information.stored.in.the.srckeystore.", + "* L'integrit\u00E0 delle informazioni memorizzate nel srckeystore *\n* NON \u00E8 stata verificata. Per verificarne l'integrit\u00E0 *\n* \u00E8 necessario fornire la password del srckeystore. *"}, + + {"Certificate.reply.does.not.contain.public.key.for.alias.", + "La risposta del certificato non contiene la chiave pubblica per <{0}>"}, + {"Incomplete.certificate.chain.in.reply", + "Catena dei certificati incompleta nella risposta"}, + {"Certificate.chain.in.reply.does.not.verify.", + "La catena dei certificati nella risposta non verifica: "}, + {"Top.level.certificate.in.reply.", + "Certificato di primo livello nella risposta:\n"}, + {".is.not.trusted.", "...non \u00E8 considerato sicuro. "}, + {"Install.reply.anyway.no.", "Installare la risposta? [no]: "}, + {"NO", "No"}, + {"Public.keys.in.reply.and.keystore.don.t.match", + "Le chiavi pubbliche nella risposta e nel keystore non corrispondono"}, + {"Certificate.reply.and.certificate.in.keystore.are.identical", + "La risposta del certificato e il certificato nel keystore sono identici"}, + {"Failed.to.establish.chain.from.reply", + "Impossibile stabilire la catena dalla risposta"}, + {"n", "n"}, + {"Wrong.answer.try.again", "Risposta errata, riprovare"}, + {"Secret.key.not.generated.alias.alias.already.exists", + "La chiave segreta non \u00E8 stata generata; l''alias <{0}> esiste gi\u00E0"}, + {"Please.provide.keysize.for.secret.key.generation", + "Specificare il valore -keysize per la generazione della chiave segreta"}, + + {"Extensions.", "Estensioni: "}, + {".Empty.value.", "(valore vuoto)"}, + {"Extension.Request.", "Richiesta di estensione:"}, + {"PKCS.10.Certificate.Request.Version.1.0.Subject.s.Public.Key.s.format.s.key.", + "Richiesta di certificato PKCS #10 (versione 1.0)\nOggetto: %s\nChiave pubblica: %s formato %s chiave\n"}, + {"Unknown.keyUsage.type.", "Tipo keyUsage sconosciuto: "}, + {"Unknown.extendedkeyUsage.type.", "Tipo extendedkeyUsage sconosciuto: "}, + {"Unknown.AccessDescription.type.", "Tipo AccessDescription sconosciuto: "}, + {"Unrecognized.GeneralName.type.", "Tipo GeneralName non riconosciuto: "}, + {"This.extension.cannot.be.marked.as.critical.", + "Impossibile contrassegnare questa estensione come critica. "}, + {"Odd.number.of.hex.digits.found.", "\u00C8 stato trovato un numero dispari di cifre esadecimali: "}, + {"Unknown.extension.type.", "Tipo di estensione sconosciuto: "}, + {"command.{0}.is.ambiguous.", "il comando {0} \u00E8 ambiguo:"} + }; + + + /** + * Returns the contents of this ResourceBundle. + * + *

+ * + * @return the contents of this ResourceBundle. + */ + @Override + public Object[][] getContents() { + return contents; + } +} diff --git a/jdk/src/share/classes/sun/security/tools/keytool/Resources_ja.java b/jdk/src/share/classes/sun/security/tools/keytool/Resources_ja.java new file mode 100644 index 00000000000..9b6e6be1cf6 --- /dev/null +++ b/jdk/src/share/classes/sun/security/tools/keytool/Resources_ja.java @@ -0,0 +1,431 @@ +/* + * Copyright (c) 2000, 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. 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.security.tools.keytool; + +/** + *

This class represents the ResourceBundle + * for the keytool. + * + */ +public class Resources_ja extends java.util.ListResourceBundle { + + private static final Object[][] contents = { + {"NEWLINE", "\n"}, + {"STAR", + "*******************************************"}, + {"STARNN", + "*******************************************\n\n"}, + + // keytool: Help part +// "Option" should be translated. + {".OPTION.", " [\u30AA\u30D7\u30B7\u30E7\u30F3]..."}, + {"Options.", "\u30AA\u30D7\u30B7\u30E7\u30F3:"}, + {"Use.keytool.help.for.all.available.commands", + "\u4F7F\u7528\u53EF\u80FD\u306A\u3059\u3079\u3066\u306E\u30B3\u30DE\u30F3\u30C9\u306B\u3064\u3044\u3066\u306F\"keytool -help\"\u3092\u4F7F\u7528\u3057\u3066\u304F\u3060\u3055\u3044"}, + {"Key.and.Certificate.Management.Tool", + "\u30AD\u30FC\u304A\u3088\u3073\u8A3C\u660E\u66F8\u7BA1\u7406\u30C4\u30FC\u30EB"}, + {"Commands.", "\u30B3\u30DE\u30F3\u30C9:"}, + {"Use.keytool.command.name.help.for.usage.of.command.name", + "command_name\u306E\u4F7F\u7528\u65B9\u6CD5\u306B\u3064\u3044\u3066\u306F\"keytool -command_name -help\"\u3092\u4F7F\u7528\u3057\u3066\u304F\u3060\u3055\u3044"}, + // keytool: help: commands + {"Generates.a.certificate.request", + "\u8A3C\u660E\u66F8\u30EA\u30AF\u30A8\u30B9\u30C8\u3092\u751F\u6210\u3057\u307E\u3059"}, //-certreq + {"Changes.an.entry.s.alias", + "\u30A8\u30F3\u30C8\u30EA\u306E\u5225\u540D\u3092\u5909\u66F4\u3057\u307E\u3059"}, //-changealias + {"Deletes.an.entry", + "\u30A8\u30F3\u30C8\u30EA\u3092\u524A\u9664\u3057\u307E\u3059"}, //-delete + {"Exports.certificate", + "\u8A3C\u660E\u66F8\u3092\u30A8\u30AF\u30B9\u30DD\u30FC\u30C8\u3057\u307E\u3059"}, //-exportcert + {"Generates.a.key.pair", + "\u9375\u30DA\u30A2\u3092\u751F\u6210\u3057\u307E\u3059"}, //-genkeypair +// translation of "secret" key should be different to "private" key. + {"Generates.a.secret.key", + "\u79D8\u5BC6\u9375\u3092\u751F\u6210\u3057\u307E\u3059"}, //-genseckey + {"Generates.certificate.from.a.certificate.request", + "\u8A3C\u660E\u66F8\u30EA\u30AF\u30A8\u30B9\u30C8\u304B\u3089\u8A3C\u660E\u66F8\u3092\u751F\u6210\u3057\u307E\u3059"}, //-gencert + {"Generates.CRL", "CRL\u3092\u751F\u6210\u3057\u307E\u3059"}, //-gencrl + {"Imports.entries.from.a.JDK.1.1.x.style.identity.database", + "JDK 1.1.x-style\u30A2\u30A4\u30C7\u30F3\u30C6\u30A3\u30C6\u30A3\u30FB\u30C7\u30FC\u30BF\u30D9\u30FC\u30B9\u304B\u3089\u30A8\u30F3\u30C8\u30EA\u3092\u30A4\u30F3\u30DD\u30FC\u30C8\u3057\u307E\u3059"}, //-identitydb + {"Imports.a.certificate.or.a.certificate.chain", + "\u8A3C\u660E\u66F8\u307E\u305F\u306F\u8A3C\u660E\u66F8\u30C1\u30A7\u30FC\u30F3\u3092\u30A4\u30F3\u30DD\u30FC\u30C8\u3057\u307E\u3059"}, //-importcert + {"Imports.one.or.all.entries.from.another.keystore", + "\u5225\u306E\u30AD\u30FC\u30B9\u30C8\u30A2\u304B\u30891\u3064\u307E\u305F\u306F\u3059\u3079\u3066\u306E\u30A8\u30F3\u30C8\u30EA\u3092\u30A4\u30F3\u30DD\u30FC\u30C8\u3057\u307E\u3059"}, //-importkeystore + {"Clones.a.key.entry", + "\u9375\u30A8\u30F3\u30C8\u30EA\u306E\u30AF\u30ED\u30FC\u30F3\u3092\u4F5C\u6210\u3057\u307E\u3059"}, //-keyclone + {"Changes.the.key.password.of.an.entry", + "\u30A8\u30F3\u30C8\u30EA\u306E\u9375\u30D1\u30B9\u30EF\u30FC\u30C9\u3092\u5909\u66F4\u3057\u307E\u3059"}, //-keypasswd + {"Lists.entries.in.a.keystore", + "\u30AD\u30FC\u30B9\u30C8\u30A2\u5185\u306E\u30A8\u30F3\u30C8\u30EA\u3092\u30EA\u30B9\u30C8\u3057\u307E\u3059"}, //-list + {"Prints.the.content.of.a.certificate", + "\u8A3C\u660E\u66F8\u306E\u5185\u5BB9\u3092\u51FA\u529B\u3057\u307E\u3059"}, //-printcert + {"Prints.the.content.of.a.certificate.request", + "\u8A3C\u660E\u66F8\u30EA\u30AF\u30A8\u30B9\u30C8\u306E\u5185\u5BB9\u3092\u51FA\u529B\u3057\u307E\u3059"}, //-printcertreq + {"Prints.the.content.of.a.CRL.file", + "CRL\u30D5\u30A1\u30A4\u30EB\u306E\u5185\u5BB9\u3092\u51FA\u529B\u3057\u307E\u3059"}, //-printcrl + {"Generates.a.self.signed.certificate", + "\u81EA\u5DF1\u7F72\u540D\u578B\u8A3C\u660E\u66F8\u3092\u751F\u6210\u3057\u307E\u3059"}, //-selfcert + {"Changes.the.store.password.of.a.keystore", + "\u30AD\u30FC\u30B9\u30C8\u30A2\u306E\u30B9\u30C8\u30A2\u30FB\u30D1\u30B9\u30EF\u30FC\u30C9\u3092\u5909\u66F4\u3057\u307E\u3059"}, //-storepasswd + // keytool: help: options + {"alias.name.of.the.entry.to.process", + "\u51E6\u7406\u3059\u308B\u30A8\u30F3\u30C8\u30EA\u306E\u5225\u540D"}, //-alias + {"destination.alias", + "\u51FA\u529B\u5148\u306E\u5225\u540D"}, //-destalias + {"destination.key.password", + "\u51FA\u529B\u5148\u30AD\u30FC\u306E\u30D1\u30B9\u30EF\u30FC\u30C9"}, //-destkeypass + {"destination.keystore.name", + "\u51FA\u529B\u5148\u30AD\u30FC\u30B9\u30C8\u30A2\u540D"}, //-destkeystore + {"destination.keystore.password.protected", + "\u51FA\u529B\u5148\u30AD\u30FC\u30B9\u30C8\u30A2\u306E\u4FDD\u8B77\u5BFE\u8C61\u30D1\u30B9\u30EF\u30FC\u30C9"}, //-destprotected + {"destination.keystore.provider.name", + "\u51FA\u529B\u5148\u30AD\u30FC\u30B9\u30C8\u30A2\u30FB\u30D7\u30ED\u30D0\u30A4\u30C0\u540D"}, //-destprovidername + {"destination.keystore.password", + "\u51FA\u529B\u5148\u30AD\u30FC\u30B9\u30C8\u30A2\u306E\u30D1\u30B9\u30EF\u30FC\u30C9"}, //-deststorepass + {"destination.keystore.type", + "\u51FA\u529B\u5148\u30AD\u30FC\u30B9\u30C8\u30A2\u306E\u30BF\u30A4\u30D7"}, //-deststoretype + {"distinguished.name", + "\u8B58\u5225\u540D"}, //-dname + {"X.509.extension", + "X.509\u62E1\u5F35"}, //-ext + {"output.file.name", + "\u51FA\u529B\u30D5\u30A1\u30A4\u30EB\u540D"}, //-file and -outfile + {"input.file.name", + "\u5165\u529B\u30D5\u30A1\u30A4\u30EB\u540D"}, //-file and -infile + {"key.algorithm.name", + "\u9375\u30A2\u30EB\u30B4\u30EA\u30BA\u30E0\u540D"}, //-keyalg + {"key.password", + "\u9375\u306E\u30D1\u30B9\u30EF\u30FC\u30C9"}, //-keypass + {"key.bit.size", + "\u9375\u306E\u30D3\u30C3\u30C8\u30FB\u30B5\u30A4\u30BA"}, //-keysize + {"keystore.name", + "\u30AD\u30FC\u30B9\u30C8\u30A2\u540D"}, //-keystore + {"new.password", + "\u65B0\u898F\u30D1\u30B9\u30EF\u30FC\u30C9"}, //-new + {"do.not.prompt", + "\u30D7\u30ED\u30F3\u30D7\u30C8\u3092\u8868\u793A\u3057\u306A\u3044"}, //-noprompt + {"password.through.protected.mechanism", + "\u4FDD\u8B77\u30E1\u30AB\u30CB\u30BA\u30E0\u306B\u3088\u308B\u30D1\u30B9\u30EF\u30FC\u30C9"}, //-protected + {"provider.argument", + "\u30D7\u30ED\u30D0\u30A4\u30C0\u5F15\u6570"}, //-providerarg + {"provider.class.name", + "\u30D7\u30ED\u30D0\u30A4\u30C0\u30FB\u30AF\u30E9\u30B9\u540D"}, //-providerclass + {"provider.name", + "\u30D7\u30ED\u30D0\u30A4\u30C0\u540D"}, //-providername + {"provider.classpath", + "\u30D7\u30ED\u30D0\u30A4\u30C0\u30FB\u30AF\u30E9\u30B9\u30D1\u30B9"}, //-providerpath + {"output.in.RFC.style", + "RFC\u30B9\u30BF\u30A4\u30EB\u306E\u51FA\u529B"}, //-rfc + {"signature.algorithm.name", + "\u7F72\u540D\u30A2\u30EB\u30B4\u30EA\u30BA\u30E0\u540D"}, //-sigalg + {"source.alias", + "\u30BD\u30FC\u30B9\u5225\u540D"}, //-srcalias + {"source.key.password", + "\u30BD\u30FC\u30B9\u30FB\u30AD\u30FC\u306E\u30D1\u30B9\u30EF\u30FC\u30C9"}, //-srckeypass + {"source.keystore.name", + "\u30BD\u30FC\u30B9\u30FB\u30AD\u30FC\u30B9\u30C8\u30A2\u540D"}, //-srckeystore + {"source.keystore.password.protected", + "\u30BD\u30FC\u30B9\u30FB\u30AD\u30FC\u30B9\u30C8\u30A2\u306E\u4FDD\u8B77\u5BFE\u8C61\u30D1\u30B9\u30EF\u30FC\u30C9"}, //-srcprotected + {"source.keystore.provider.name", + "\u30BD\u30FC\u30B9\u30FB\u30AD\u30FC\u30B9\u30C8\u30A2\u30FB\u30D7\u30ED\u30D0\u30A4\u30C0\u540D"}, //-srcprovidername + {"source.keystore.password", + "\u30BD\u30FC\u30B9\u30FB\u30AD\u30FC\u30B9\u30C8\u30A2\u306E\u30D1\u30B9\u30EF\u30FC\u30C9"}, //-srcstorepass + {"source.keystore.type", + "\u30BD\u30FC\u30B9\u30FB\u30AD\u30FC\u30B9\u30C8\u30A2\u306E\u30BF\u30A4\u30D7"}, //-srcstoretype + {"SSL.server.host.and.port", + "SSL\u30B5\u30FC\u30D0\u30FC\u306E\u30DB\u30B9\u30C8\u3068\u30DD\u30FC\u30C8"}, //-sslserver + {"signed.jar.file", + "\u7F72\u540D\u4ED8\u304DJAR\u30D5\u30A1\u30A4\u30EB"}, //=jarfile + {"certificate.validity.start.date.time", + "\u8A3C\u660E\u66F8\u306E\u6709\u52B9\u958B\u59CB\u65E5\u6642"}, //-startdate + {"keystore.password", + "\u30AD\u30FC\u30B9\u30C8\u30A2\u306E\u30D1\u30B9\u30EF\u30FC\u30C9"}, //-storepass + {"keystore.type", + "\u30AD\u30FC\u30B9\u30C8\u30A2\u306E\u30BF\u30A4\u30D7"}, //-storetype + {"trust.certificates.from.cacerts", + "cacerts\u304B\u3089\u306E\u8A3C\u660E\u66F8\u3092\u4FE1\u983C\u3059\u308B"}, //-trustcacerts + {"verbose.output", + "\u8A73\u7D30\u51FA\u529B"}, //-v + {"validity.number.of.days", + "\u59A5\u5F53\u6027\u65E5\u6570"}, //-validity + {"Serial.ID.of.cert.to.revoke", + "\u5931\u52B9\u3059\u308B\u8A3C\u660E\u66F8\u306E\u30B7\u30EA\u30A2\u30EBID"}, //-id + // keytool: Running part + {"keytool.error.", "keytool\u30A8\u30E9\u30FC: "}, + {"Illegal.option.", "\u4E0D\u6B63\u306A\u30AA\u30D7\u30B7\u30E7\u30F3: "}, + {"Illegal.value.", "\u4E0D\u6B63\u306A\u5024: "}, + {"Unknown.password.type.", "\u4E0D\u660E\u306A\u30D1\u30B9\u30EF\u30FC\u30C9\u30FB\u30BF\u30A4\u30D7: "}, + {"Cannot.find.environment.variable.", + "\u74B0\u5883\u5909\u6570\u304C\u898B\u3064\u304B\u308A\u307E\u305B\u3093: "}, + {"Cannot.find.file.", "\u30D5\u30A1\u30A4\u30EB\u304C\u898B\u3064\u304B\u308A\u307E\u305B\u3093: "}, + {"Command.option.flag.needs.an.argument.", "\u30B3\u30DE\u30F3\u30C9\u30FB\u30AA\u30D7\u30B7\u30E7\u30F3{0}\u306B\u306F\u5F15\u6570\u304C\u5FC5\u8981\u3067\u3059\u3002"}, + {"Warning.Different.store.and.key.passwords.not.supported.for.PKCS12.KeyStores.Ignoring.user.specified.command.value.", + "\u8B66\u544A: PKCS12\u30AD\u30FC\u30B9\u30C8\u30A2\u3067\u306F\u3001\u30B9\u30C8\u30A2\u306E\u30D1\u30B9\u30EF\u30FC\u30C9\u3068\u9375\u306E\u30D1\u30B9\u30EF\u30FC\u30C9\u304C\u7570\u306A\u308B\u72B6\u6CC1\u306F\u30B5\u30DD\u30FC\u30C8\u3055\u308C\u307E\u305B\u3093\u3002\u30E6\u30FC\u30B6\u30FC\u304C\u6307\u5B9A\u3057\u305F{0}\u306E\u5024\u306F\u7121\u8996\u3057\u307E\u3059\u3002"}, + {".keystore.must.be.NONE.if.storetype.is.{0}", + "-storetype\u304C{0}\u306E\u5834\u5408\u3001-keystore\u306FNONE\u3067\u3042\u308B\u5FC5\u8981\u304C\u3042\u308A\u307E\u3059"}, + {"Too.many.retries.program.terminated", + "\u518D\u8A66\u884C\u304C\u591A\u3059\u304E\u307E\u3059\u3002\u30D7\u30ED\u30B0\u30E9\u30E0\u304C\u7D42\u4E86\u3057\u307E\u3057\u305F"}, + {".storepasswd.and.keypasswd.commands.not.supported.if.storetype.is.{0}", + "-storetype\u304C{0}\u306E\u5834\u5408\u3001-storepasswd\u30B3\u30DE\u30F3\u30C9\u304A\u3088\u3073-keypasswd\u30B3\u30DE\u30F3\u30C9\u306F\u30B5\u30DD\u30FC\u30C8\u3055\u308C\u307E\u305B\u3093"}, + {".keypasswd.commands.not.supported.if.storetype.is.PKCS12", + "-storetype\u304CPKCS12\u306E\u5834\u5408\u3001-keypasswd\u30B3\u30DE\u30F3\u30C9\u306F\u30B5\u30DD\u30FC\u30C8\u3055\u308C\u307E\u305B\u3093"}, + {".keypass.and.new.can.not.be.specified.if.storetype.is.{0}", + "-storetype\u304C{0}\u306E\u5834\u5408\u3001-keypass\u3068-new\u306F\u6307\u5B9A\u3067\u304D\u307E\u305B\u3093"}, + {"if.protected.is.specified.then.storepass.keypass.and.new.must.not.be.specified", + "-protected\u304C\u6307\u5B9A\u3055\u308C\u3066\u3044\u308B\u5834\u5408\u3001-storepass\u3001-keypass\u304A\u3088\u3073-new\u306F\u6307\u5B9A\u3067\u304D\u307E\u305B\u3093"}, + {"if.srcprotected.is.specified.then.srcstorepass.and.srckeypass.must.not.be.specified", + "-srcprotected\u304C\u6307\u5B9A\u3055\u308C\u3066\u3044\u308B\u5834\u5408\u3001-srcstorepass\u304A\u3088\u3073-srckeypass\u306F\u6307\u5B9A\u3067\u304D\u307E\u305B\u3093"}, + {"if.keystore.is.not.password.protected.then.storepass.keypass.and.new.must.not.be.specified", + "\u30AD\u30FC\u30B9\u30C8\u30A2\u304C\u30D1\u30B9\u30EF\u30FC\u30C9\u3067\u4FDD\u8B77\u3055\u308C\u3066\u3044\u306A\u3044\u5834\u5408\u3001-storepass\u3001-keypass\u304A\u3088\u3073-new\u306F\u6307\u5B9A\u3067\u304D\u307E\u305B\u3093"}, + {"if.source.keystore.is.not.password.protected.then.srcstorepass.and.srckeypass.must.not.be.specified", + "\u30BD\u30FC\u30B9\u30FB\u30AD\u30FC\u30B9\u30C8\u30A2\u304C\u30D1\u30B9\u30EF\u30FC\u30C9\u3067\u4FDD\u8B77\u3055\u308C\u3066\u3044\u306A\u3044\u5834\u5408\u3001-srcstorepass\u304A\u3088\u3073-srckeypass\u306F\u6307\u5B9A\u3067\u304D\u307E\u305B\u3093"}, + {"Illegal.startdate.value", "startdate\u5024\u304C\u7121\u52B9\u3067\u3059"}, + {"Validity.must.be.greater.than.zero", + "\u59A5\u5F53\u6027\u306F\u30BC\u30ED\u3088\u308A\u5927\u304D\u3044\u5FC5\u8981\u304C\u3042\u308A\u307E\u3059"}, + {"provName.not.a.provider", "{0}\u306F\u30D7\u30ED\u30D0\u30A4\u30C0\u3067\u306F\u3042\u308A\u307E\u305B\u3093"}, + {"Usage.error.no.command.provided", "\u4F7F\u7528\u30A8\u30E9\u30FC: \u30B3\u30DE\u30F3\u30C9\u304C\u6307\u5B9A\u3055\u308C\u3066\u3044\u307E\u305B\u3093"}, + {"Source.keystore.file.exists.but.is.empty.", "\u30BD\u30FC\u30B9\u30FB\u30AD\u30FC\u30B9\u30C8\u30A2\u30FB\u30D5\u30A1\u30A4\u30EB\u306F\u3001\u5B58\u5728\u3057\u307E\u3059\u304C\u7A7A\u3067\u3059: "}, + {"Please.specify.srckeystore", "-srckeystore\u3092\u6307\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044"}, + {"Must.not.specify.both.v.and.rfc.with.list.command", + "'list'\u30B3\u30DE\u30F3\u30C9\u306B-v\u3068-rfc\u306E\u4E21\u65B9\u3092\u6307\u5B9A\u3059\u308B\u3053\u3068\u306F\u3067\u304D\u307E\u305B\u3093"}, + {"Key.password.must.be.at.least.6.characters", + "\u9375\u306E\u30D1\u30B9\u30EF\u30FC\u30C9\u306F6\u6587\u5B57\u4EE5\u4E0A\u3067\u3042\u308B\u5FC5\u8981\u304C\u3042\u308A\u307E\u3059"}, + {"New.password.must.be.at.least.6.characters", + "\u65B0\u898F\u30D1\u30B9\u30EF\u30FC\u30C9\u306F6\u6587\u5B57\u4EE5\u4E0A\u3067\u3042\u308B\u5FC5\u8981\u304C\u3042\u308A\u307E\u3059"}, + {"Keystore.file.exists.but.is.empty.", + "\u30AD\u30FC\u30B9\u30C8\u30A2\u30FB\u30D5\u30A1\u30A4\u30EB\u306F\u5B58\u5728\u3057\u307E\u3059\u304C\u3001\u7A7A\u3067\u3059: "}, + {"Keystore.file.does.not.exist.", + "\u30AD\u30FC\u30B9\u30C8\u30A2\u30FB\u30D5\u30A1\u30A4\u30EB\u306F\u5B58\u5728\u3057\u307E\u305B\u3093: "}, + {"Must.specify.destination.alias", "\u51FA\u529B\u5148\u306E\u5225\u540D\u3092\u6307\u5B9A\u3059\u308B\u5FC5\u8981\u304C\u3042\u308A\u307E\u3059"}, + {"Must.specify.alias", "\u5225\u540D\u3092\u6307\u5B9A\u3059\u308B\u5FC5\u8981\u304C\u3042\u308A\u307E\u3059"}, + {"Keystore.password.must.be.at.least.6.characters", + "\u30AD\u30FC\u30B9\u30C8\u30A2\u306E\u30D1\u30B9\u30EF\u30FC\u30C9\u306F6\u6587\u5B57\u4EE5\u4E0A\u3067\u3042\u308B\u5FC5\u8981\u304C\u3042\u308A\u307E\u3059"}, + {"Enter.keystore.password.", "\u30AD\u30FC\u30B9\u30C8\u30A2\u306E\u30D1\u30B9\u30EF\u30FC\u30C9\u3092\u5165\u529B\u3057\u3066\u304F\u3060\u3055\u3044: "}, + {"Enter.source.keystore.password.", "\u30BD\u30FC\u30B9\u30FB\u30AD\u30FC\u30B9\u30C8\u30A2\u306E\u30D1\u30B9\u30EF\u30FC\u30C9\u3092\u5165\u529B\u3057\u3066\u304F\u3060\u3055\u3044: "}, + {"Enter.destination.keystore.password.", "\u51FA\u529B\u5148\u30AD\u30FC\u30B9\u30C8\u30A2\u306E\u30D1\u30B9\u30EF\u30FC\u30C9\u3092\u5165\u529B\u3057\u3066\u304F\u3060\u3055\u3044: "}, + {"Keystore.password.is.too.short.must.be.at.least.6.characters", + "\u30AD\u30FC\u30B9\u30C8\u30A2\u306E\u30D1\u30B9\u30EF\u30FC\u30C9\u304C\u77ED\u3059\u304E\u307E\u3059 - 6\u6587\u5B57\u4EE5\u4E0A\u306B\u3057\u3066\u304F\u3060\u3055\u3044"}, + {"Unknown.Entry.Type", "\u4E0D\u660E\u306A\u30A8\u30F3\u30C8\u30EA\u30FB\u30BF\u30A4\u30D7"}, + {"Too.many.failures.Alias.not.changed", "\u969C\u5BB3\u304C\u591A\u3059\u304E\u307E\u3059\u3002\u5225\u540D\u306F\u5909\u66F4\u3055\u308C\u307E\u305B\u3093"}, + {"Entry.for.alias.alias.successfully.imported.", + "\u5225\u540D{0}\u306E\u30A8\u30F3\u30C8\u30EA\u306E\u30A4\u30F3\u30DD\u30FC\u30C8\u306B\u6210\u529F\u3057\u307E\u3057\u305F\u3002"}, + {"Entry.for.alias.alias.not.imported.", "\u5225\u540D{0}\u306E\u30A8\u30F3\u30C8\u30EA\u306F\u30A4\u30F3\u30DD\u30FC\u30C8\u3055\u308C\u307E\u305B\u3093\u3067\u3057\u305F\u3002"}, + {"Problem.importing.entry.for.alias.alias.exception.Entry.for.alias.alias.not.imported.", + "\u5225\u540D{0}\u306E\u30A8\u30F3\u30C8\u30EA\u306E\u30A4\u30F3\u30DD\u30FC\u30C8\u4E2D\u306B\u554F\u984C\u304C\u767A\u751F\u3057\u307E\u3057\u305F: {1}\u3002\n\u5225\u540D{0}\u306E\u30A8\u30F3\u30C8\u30EA\u306F\u30A4\u30F3\u30DD\u30FC\u30C8\u3055\u308C\u307E\u305B\u3093\u3067\u3057\u305F\u3002"}, + {"Import.command.completed.ok.entries.successfully.imported.fail.entries.failed.or.cancelled", + "\u30A4\u30F3\u30DD\u30FC\u30C8\u30FB\u30B3\u30DE\u30F3\u30C9\u304C\u5B8C\u4E86\u3057\u307E\u3057\u305F: {0}\u4EF6\u306E\u30A8\u30F3\u30C8\u30EA\u306E\u30A4\u30F3\u30DD\u30FC\u30C8\u304C\u6210\u529F\u3057\u307E\u3057\u305F\u3002{1}\u4EF6\u306E\u30A8\u30F3\u30C8\u30EA\u306E\u30A4\u30F3\u30DD\u30FC\u30C8\u304C\u5931\u6557\u3057\u305F\u304B\u53D6\u308A\u6D88\u3055\u308C\u307E\u3057\u305F"}, + {"Warning.Overwriting.existing.alias.alias.in.destination.keystore", + "\u8B66\u544A: \u51FA\u529B\u5148\u30AD\u30FC\u30B9\u30C8\u30A2\u5185\u306E\u65E2\u5B58\u306E\u5225\u540D{0}\u3092\u4E0A\u66F8\u304D\u3057\u3066\u3044\u307E\u3059"}, + {"Existing.entry.alias.alias.exists.overwrite.no.", + "\u65E2\u5B58\u306E\u30A8\u30F3\u30C8\u30EA\u306E\u5225\u540D{0}\u304C\u5B58\u5728\u3057\u3066\u3044\u307E\u3059\u3002\u4E0A\u66F8\u304D\u3057\u307E\u3059\u304B\u3002[\u3044\u3044\u3048]: "}, + {"Too.many.failures.try.later", "\u969C\u5BB3\u304C\u591A\u3059\u304E\u307E\u3059 - \u5F8C\u3067\u5B9F\u884C\u3057\u3066\u304F\u3060\u3055\u3044"}, + {"Certification.request.stored.in.file.filename.", + "\u8A3C\u660E\u66F8\u30EA\u30AF\u30A8\u30B9\u30C8\u304C\u30D5\u30A1\u30A4\u30EB<{0}>\u306B\u4FDD\u5B58\u3055\u308C\u307E\u3057\u305F"}, + {"Submit.this.to.your.CA", "\u3053\u308C\u3092CA\u306B\u63D0\u51FA\u3057\u3066\u304F\u3060\u3055\u3044"}, + {"if.alias.not.specified.destalias.srckeypass.and.destkeypass.must.not.be.specified", + "\u5225\u540D\u3092\u6307\u5B9A\u3057\u306A\u3044\u5834\u5408\u3001\u51FA\u529B\u5148\u30AD\u30FC\u30B9\u30C8\u30A2\u306E\u5225\u540D\u3001\u30BD\u30FC\u30B9\u30FB\u30AD\u30FC\u30B9\u30C8\u30A2\u306E\u30D1\u30B9\u30EF\u30FC\u30C9\u304A\u3088\u3073\u51FA\u529B\u5148\u30AD\u30FC\u30B9\u30C8\u30A2\u306E\u30D1\u30B9\u30EF\u30FC\u30C9\u306F\u6307\u5B9A\u3067\u304D\u307E\u305B\u3093"}, + {"Certificate.stored.in.file.filename.", + "\u8A3C\u660E\u66F8\u304C\u30D5\u30A1\u30A4\u30EB<{0}>\u306B\u4FDD\u5B58\u3055\u308C\u307E\u3057\u305F"}, + {"Certificate.reply.was.installed.in.keystore", + "\u8A3C\u660E\u66F8\u5FDC\u7B54\u304C\u30AD\u30FC\u30B9\u30C8\u30A2\u306B\u30A4\u30F3\u30B9\u30C8\u30FC\u30EB\u3055\u308C\u307E\u3057\u305F"}, + {"Certificate.reply.was.not.installed.in.keystore", + "\u8A3C\u660E\u66F8\u5FDC\u7B54\u304C\u30AD\u30FC\u30B9\u30C8\u30A2\u306B\u30A4\u30F3\u30B9\u30C8\u30FC\u30EB\u3055\u308C\u307E\u305B\u3093\u3067\u3057\u305F"}, + {"Certificate.was.added.to.keystore", + "\u8A3C\u660E\u66F8\u304C\u30AD\u30FC\u30B9\u30C8\u30A2\u306B\u8FFD\u52A0\u3055\u308C\u307E\u3057\u305F"}, + {"Certificate.was.not.added.to.keystore", + "\u8A3C\u660E\u66F8\u304C\u30AD\u30FC\u30B9\u30C8\u30A2\u306B\u8FFD\u52A0\u3055\u308C\u307E\u305B\u3093\u3067\u3057\u305F"}, + {".Storing.ksfname.", "[{0}\u3092\u683C\u7D0D\u4E2D]"}, + {"alias.has.no.public.key.certificate.", + "{0}\u306B\u306F\u516C\u958B\u9375(\u8A3C\u660E\u66F8)\u304C\u3042\u308A\u307E\u305B\u3093"}, + {"Cannot.derive.signature.algorithm", + "\u7F72\u540D\u30A2\u30EB\u30B4\u30EA\u30BA\u30E0\u3092\u53D6\u5F97\u3067\u304D\u307E\u305B\u3093"}, + {"Alias.alias.does.not.exist", + "\u5225\u540D<{0}>\u306F\u5B58\u5728\u3057\u307E\u305B\u3093"}, + {"Alias.alias.has.no.certificate", + "\u5225\u540D<{0}>\u306B\u306F\u8A3C\u660E\u66F8\u304C\u3042\u308A\u307E\u305B\u3093"}, + {"Key.pair.not.generated.alias.alias.already.exists", + "\u9375\u30DA\u30A2\u306F\u751F\u6210\u3055\u308C\u307E\u305B\u3093\u3067\u3057\u305F\u3002\u5225\u540D<{0}>\u306F\u3059\u3067\u306B\u5B58\u5728\u3057\u307E\u3059"}, + {"Generating.keysize.bit.keyAlgName.key.pair.and.self.signed.certificate.sigAlgName.with.a.validity.of.validality.days.for", + "{3}\u65E5\u9593\u6709\u52B9\u306A{0}\u30D3\u30C3\u30C8\u306E{1}\u306E\u9375\u30DA\u30A2\u3068\u81EA\u5DF1\u7F72\u540D\u578B\u8A3C\u660E\u66F8({2})\u3092\u751F\u6210\u3057\u3066\u3044\u307E\u3059\n\t\u30C7\u30A3\u30EC\u30AF\u30C8\u30EA\u540D: {4}"}, + {"Enter.key.password.for.alias.", "<{0}>\u306E\u9375\u30D1\u30B9\u30EF\u30FC\u30C9\u3092\u5165\u529B\u3057\u3066\u304F\u3060\u3055\u3044"}, + {".RETURN.if.same.as.keystore.password.", + "\t(\u30AD\u30FC\u30B9\u30C8\u30A2\u306E\u30D1\u30B9\u30EF\u30FC\u30C9\u3068\u540C\u3058\u5834\u5408\u306FRETURN\u3092\u62BC\u3057\u3066\u304F\u3060\u3055\u3044): "}, + {"Key.password.is.too.short.must.be.at.least.6.characters", + "\u9375\u306E\u30D1\u30B9\u30EF\u30FC\u30C9\u304C\u77ED\u3059\u304E\u307E\u3059 - 6\u6587\u5B57\u4EE5\u4E0A\u3092\u6307\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044"}, + {"Too.many.failures.key.not.added.to.keystore", + "\u969C\u5BB3\u304C\u591A\u3059\u304E\u307E\u3059 - \u9375\u306F\u30AD\u30FC\u30B9\u30C8\u30A2\u306B\u8FFD\u52A0\u3055\u308C\u307E\u305B\u3093\u3067\u3057\u305F"}, + {"Destination.alias.dest.already.exists", + "\u51FA\u529B\u5148\u306E\u5225\u540D<{0}>\u306F\u3059\u3067\u306B\u5B58\u5728\u3057\u307E\u3059"}, + {"Password.is.too.short.must.be.at.least.6.characters", + "\u30D1\u30B9\u30EF\u30FC\u30C9\u304C\u77ED\u3059\u304E\u307E\u3059 - 6\u6587\u5B57\u4EE5\u4E0A\u3092\u6307\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044"}, + {"Too.many.failures.Key.entry.not.cloned", + "\u969C\u5BB3\u304C\u591A\u3059\u304E\u307E\u3059\u3002\u9375\u30A8\u30F3\u30C8\u30EA\u306E\u30AF\u30ED\u30FC\u30F3\u306F\u4F5C\u6210\u3055\u308C\u307E\u305B\u3093\u3067\u3057\u305F"}, + {"key.password.for.alias.", "<{0}>\u306E\u9375\u306E\u30D1\u30B9\u30EF\u30FC\u30C9"}, + {"Keystore.entry.for.id.getName.already.exists", + "<{0}>\u306E\u30AD\u30FC\u30B9\u30C8\u30A2\u30FB\u30A8\u30F3\u30C8\u30EA\u306F\u3059\u3067\u306B\u5B58\u5728\u3057\u307E\u3059"}, + {"Creating.keystore.entry.for.id.getName.", + "<{0}>\u306E\u30AD\u30FC\u30B9\u30C8\u30A2\u30FB\u30A8\u30F3\u30C8\u30EA\u3092\u4F5C\u6210\u4E2D..."}, + {"No.entries.from.identity.database.added", + "\u30A2\u30A4\u30C7\u30F3\u30C6\u30A3\u30C6\u30A3\u30FB\u30C7\u30FC\u30BF\u30D9\u30FC\u30B9\u304B\u3089\u8FFD\u52A0\u3055\u308C\u305F\u30A8\u30F3\u30C8\u30EA\u306F\u3042\u308A\u307E\u305B\u3093"}, + {"Alias.name.alias", "\u5225\u540D: {0}"}, + {"Creation.date.keyStore.getCreationDate.alias.", + "\u4F5C\u6210\u65E5: {0,date}"}, + {"alias.keyStore.getCreationDate.alias.", + "{0},{1,date}, "}, + {"alias.", "{0}, "}, + {"Entry.type.type.", "\u30A8\u30F3\u30C8\u30EA\u30FB\u30BF\u30A4\u30D7: {0}"}, + {"Certificate.chain.length.", "\u8A3C\u660E\u66F8\u30C1\u30A7\u30FC\u30F3\u306E\u9577\u3055: "}, + {"Certificate.i.1.", "\u8A3C\u660E\u66F8[{0,number,integer}]:"}, + {"Certificate.fingerprint.SHA1.", "\u8A3C\u660E\u66F8\u306E\u30D5\u30A3\u30F3\u30AC\u30D7\u30EA\u30F3\u30C8(SHA1): "}, + {"Keystore.type.", "\u30AD\u30FC\u30B9\u30C8\u30A2\u306E\u30BF\u30A4\u30D7: "}, + {"Keystore.provider.", "\u30AD\u30FC\u30B9\u30C8\u30A2\u30FB\u30D7\u30ED\u30D0\u30A4\u30C0: "}, + {"Your.keystore.contains.keyStore.size.entry", + "\u30AD\u30FC\u30B9\u30C8\u30A2\u306B\u306F{0,number,integer}\u30A8\u30F3\u30C8\u30EA\u304C\u542B\u307E\u308C\u307E\u3059"}, + {"Your.keystore.contains.keyStore.size.entries", + "\u30AD\u30FC\u30B9\u30C8\u30A2\u306B\u306F{0,number,integer}\u30A8\u30F3\u30C8\u30EA\u304C\u542B\u307E\u308C\u307E\u3059"}, + {"Failed.to.parse.input", "\u5165\u529B\u306E\u69CB\u6587\u89E3\u6790\u306B\u5931\u6557\u3057\u307E\u3057\u305F"}, + {"Empty.input", "\u5165\u529B\u304C\u3042\u308A\u307E\u305B\u3093"}, + {"Not.X.509.certificate", "X.509\u8A3C\u660E\u66F8\u3067\u306F\u3042\u308A\u307E\u305B\u3093"}, + {"alias.has.no.public.key", "{0}\u306B\u306F\u516C\u958B\u9375\u304C\u3042\u308A\u307E\u305B\u3093"}, + {"alias.has.no.X.509.certificate", "{0}\u306B\u306FX.509\u8A3C\u660E\u66F8\u304C\u3042\u308A\u307E\u305B\u3093"}, + {"New.certificate.self.signed.", "\u65B0\u3057\u3044\u8A3C\u660E\u66F8(\u81EA\u5DF1\u7F72\u540D\u578B):"}, + {"Reply.has.no.certificates", "\u5FDC\u7B54\u306B\u306F\u8A3C\u660E\u66F8\u304C\u3042\u308A\u307E\u305B\u3093"}, + {"Certificate.not.imported.alias.alias.already.exists", + "\u8A3C\u660E\u66F8\u306F\u30A4\u30F3\u30DD\u30FC\u30C8\u3055\u308C\u307E\u305B\u3093\u3067\u3057\u305F\u3002\u5225\u540D<{0}>\u306F\u3059\u3067\u306B\u5B58\u5728\u3057\u307E\u3059"}, + {"Input.not.an.X.509.certificate", "\u5165\u529B\u306FX.509\u8A3C\u660E\u66F8\u3067\u306F\u3042\u308A\u307E\u305B\u3093"}, + {"Certificate.already.exists.in.keystore.under.alias.trustalias.", + "\u8A3C\u660E\u66F8\u306F\u3001\u5225\u540D<{0}>\u306E\u30AD\u30FC\u30B9\u30C8\u30A2\u306B\u3059\u3067\u306B\u5B58\u5728\u3057\u307E\u3059"}, + {"Do.you.still.want.to.add.it.no.", + "\u8FFD\u52A0\u3057\u307E\u3059\u304B\u3002[\u3044\u3044\u3048]: "}, + {"Certificate.already.exists.in.system.wide.CA.keystore.under.alias.trustalias.", + "\u8A3C\u660E\u66F8\u306F\u3001\u5225\u540D<{0}>\u306E\u30B7\u30B9\u30C6\u30E0\u898F\u6A21\u306ECA\u30AD\u30FC\u30B9\u30C8\u30A2\u5185\u306B\u3059\u3067\u306B\u5B58\u5728\u3057\u307E\u3059"}, + {"Do.you.still.want.to.add.it.to.your.own.keystore.no.", + "\u30AD\u30FC\u30B9\u30C8\u30A2\u306B\u8FFD\u52A0\u3057\u307E\u3059\u304B\u3002 [\u3044\u3044\u3048]: "}, + {"Trust.this.certificate.no.", "\u3053\u306E\u8A3C\u660E\u66F8\u3092\u4FE1\u983C\u3057\u307E\u3059\u304B\u3002 [\u3044\u3044\u3048]: "}, + {"YES", "\u306F\u3044"}, + {"New.prompt.", "\u65B0\u898F{0}: "}, + {"Passwords.must.differ", "\u30D1\u30B9\u30EF\u30FC\u30C9\u306F\u7570\u306A\u3063\u3066\u3044\u308B\u5FC5\u8981\u304C\u3042\u308A\u307E\u3059"}, + {"Re.enter.new.prompt.", "\u65B0\u898F{0}\u3092\u518D\u5165\u529B\u3057\u3066\u304F\u3060\u3055\u3044: "}, + {"Re.enter.new.password.", "\u65B0\u898F\u30D1\u30B9\u30EF\u30FC\u30C9\u3092\u518D\u5165\u529B\u3057\u3066\u304F\u3060\u3055\u3044: "}, + {"They.don.t.match.Try.again", "\u4E00\u81F4\u3057\u307E\u305B\u3093\u3002\u3082\u3046\u4E00\u5EA6\u5B9F\u884C\u3057\u3066\u304F\u3060\u3055\u3044"}, + {"Enter.prompt.alias.name.", "{0}\u306E\u5225\u540D\u3092\u5165\u529B\u3057\u3066\u304F\u3060\u3055\u3044: "}, + {"Enter.new.alias.name.RETURN.to.cancel.import.for.this.entry.", + "\u65B0\u3057\u3044\u5225\u540D\u3092\u5165\u529B\u3057\u3066\u304F\u3060\u3055\u3044\t(\u3053\u306E\u30A8\u30F3\u30C8\u30EA\u306E\u30A4\u30F3\u30DD\u30FC\u30C8\u3092\u53D6\u308A\u6D88\u3059\u5834\u5408\u306FRETURN\u3092\u62BC\u3057\u3066\u304F\u3060\u3055\u3044): "}, + {"Enter.alias.name.", "\u5225\u540D\u3092\u5165\u529B\u3057\u3066\u304F\u3060\u3055\u3044: "}, + {".RETURN.if.same.as.for.otherAlias.", + "\t(<{0}>\u3068\u540C\u3058\u5834\u5408\u306FRETURN\u3092\u62BC\u3057\u3066\u304F\u3060\u3055\u3044)"}, + {".PATTERN.printX509Cert", + "\u6240\u6709\u8005: {0}\n\u767A\u884C\u8005: {1}\n\u30B7\u30EA\u30A2\u30EB\u756A\u53F7: {2}\n\u6709\u52B9\u671F\u9593\u306E\u958B\u59CB\u65E5: {3}\u7D42\u4E86\u65E5: {4}\n\u8A3C\u660E\u66F8\u306E\u30D5\u30A3\u30F3\u30AC\u30D7\u30EA\u30F3\u30C8:\n\t MD5: {5}\n\t SHA1: {6}\n\t SHA256: {7}\n\t \u7F72\u540D\u30A2\u30EB\u30B4\u30EA\u30BA\u30E0\u540D: {8}\n\t \u30D0\u30FC\u30B8\u30E7\u30F3: {9}"}, + {"What.is.your.first.and.last.name.", + "\u59D3\u540D\u3092\u5165\u529B\u3057\u3066\u304F\u3060\u3055\u3044\u3002"}, + {"What.is.the.name.of.your.organizational.unit.", + "\u7D44\u7E54\u5358\u4F4D\u540D\u3092\u5165\u529B\u3057\u3066\u304F\u3060\u3055\u3044\u3002"}, + {"What.is.the.name.of.your.organization.", + "\u7D44\u7E54\u540D\u3092\u5165\u529B\u3057\u3066\u304F\u3060\u3055\u3044\u3002"}, + {"What.is.the.name.of.your.City.or.Locality.", + "\u90FD\u5E02\u540D\u307E\u305F\u306F\u5730\u57DF\u540D\u3092\u5165\u529B\u3057\u3066\u304F\u3060\u3055\u3044\u3002"}, + {"What.is.the.name.of.your.State.or.Province.", + "\u90FD\u9053\u5E9C\u770C\u540D\u3092\u5165\u529B\u3057\u3066\u304F\u3060\u3055\u3044\u3002"}, + {"What.is.the.two.letter.country.code.for.this.unit.", + "\u3053\u306E\u5358\u4F4D\u306B\u8A72\u5F53\u3059\u308B2\u6587\u5B57\u306E\u56FD\u30B3\u30FC\u30C9\u3092\u5165\u529B\u3057\u3066\u304F\u3060\u3055\u3044\u3002"}, + {"Is.name.correct.", "{0}\u3067\u3088\u308D\u3057\u3044\u3067\u3059\u304B\u3002"}, + {"no", "\u3044\u3044\u3048"}, + {"yes", "\u306F\u3044"}, + {"y", "y"}, + {".defaultValue.", " [{0}]: "}, + {"Alias.alias.has.no.key", + "\u5225\u540D<{0}>\u306B\u306F\u9375\u304C\u3042\u308A\u307E\u305B\u3093"}, + {"Alias.alias.references.an.entry.type.that.is.not.a.private.key.entry.The.keyclone.command.only.supports.cloning.of.private.key", + "\u5225\u540D<{0}>\u304C\u53C2\u7167\u3057\u3066\u3044\u308B\u30A8\u30F3\u30C8\u30EA\u30FB\u30BF\u30A4\u30D7\u306F\u79D8\u5BC6\u9375\u30A8\u30F3\u30C8\u30EA\u3067\u306F\u3042\u308A\u307E\u305B\u3093\u3002-keyclone\u30B3\u30DE\u30F3\u30C9\u306F\u79D8\u5BC6\u9375\u30A8\u30F3\u30C8\u30EA\u306E\u30AF\u30ED\u30FC\u30F3\u4F5C\u6210\u306E\u307F\u3092\u30B5\u30DD\u30FC\u30C8\u3057\u307E\u3059"}, + + {".WARNING.WARNING.WARNING.", + "*****************\u8B66\u544A \u8B66\u544A \u8B66\u544A*****************"}, + {"Signer.d.", "\u7F72\u540D\u8005\u756A\u53F7%d:"}, + {"Timestamp.", "\u30BF\u30A4\u30E0\u30B9\u30BF\u30F3\u30D7:"}, + {"Signature.", "\u7F72\u540D:"}, + {"CRLs.", "CRL:"}, + {"Certificate.owner.", "\u8A3C\u660E\u66F8\u306E\u6240\u6709\u8005: "}, + {"Not.a.signed.jar.file", "\u7F72\u540D\u4ED8\u304DJAR\u30D5\u30A1\u30A4\u30EB\u3067\u306F\u3042\u308A\u307E\u305B\u3093"}, + {"No.certificate.from.the.SSL.server", + "SSL\u30B5\u30FC\u30D0\u30FC\u304B\u3089\u306E\u8A3C\u660E\u66F8\u304C\u3042\u308A\u307E\u305B\u3093"}, + + {".The.integrity.of.the.information.stored.in.your.keystore.", + "*\u30AD\u30FC\u30B9\u30C8\u30A2\u306B\u4FDD\u5B58\u3055\u308C\u305F\u60C5\u5831\u306E\u6574\u5408\u6027\u306F*\n*\u691C\u8A3C\u3055\u308C\u3066\u3044\u307E\u305B\u3093\u3002\u6574\u5408\u6027\u3092\u691C\u8A3C\u3059\u308B\u306B\u306F*\n*\u30AD\u30FC\u30B9\u30C8\u30A2\u306E\u30D1\u30B9\u30EF\u30FC\u30C9\u3092\u5165\u529B\u3059\u308B\u5FC5\u8981\u304C\u3042\u308A\u307E\u3059\u3002*"}, + {".The.integrity.of.the.information.stored.in.the.srckeystore.", + "*\u30BD\u30FC\u30B9\u30FB\u30AD\u30FC\u30B9\u30C8\u30A2\u306B\u4FDD\u5B58\u3055\u308C\u305F\u60C5\u5831\u306E\u6574\u5408\u6027\u306F*\n*\u691C\u8A3C\u3055\u308C\u3066\u3044\u307E\u305B\u3093\u3002\u6574\u5408\u6027\u3092\u691C\u8A3C\u3059\u308B\u306B\u306F*\n*\u30BD\u30FC\u30B9\u30FB\u30AD\u30FC\u30B9\u30C8\u30A2\u306E\u30D1\u30B9\u30EF\u30FC\u30C9\u3092\u5165\u529B\u3059\u308B\u5FC5\u8981\u304C\u3042\u308A\u307E\u3059\u3002*"}, + + {"Certificate.reply.does.not.contain.public.key.for.alias.", + "\u8A3C\u660E\u66F8\u5FDC\u7B54\u306B\u306F\u3001<{0}>\u306E\u516C\u958B\u9375\u306F\u542B\u307E\u308C\u307E\u305B\u3093"}, + {"Incomplete.certificate.chain.in.reply", + "\u5FDC\u7B54\u3057\u305F\u8A3C\u660E\u66F8\u30C1\u30A7\u30FC\u30F3\u306F\u4E0D\u5B8C\u5168\u3067\u3059"}, + {"Certificate.chain.in.reply.does.not.verify.", + "\u5FDC\u7B54\u3057\u305F\u8A3C\u660E\u66F8\u30C1\u30A7\u30FC\u30F3\u306F\u691C\u8A3C\u3055\u308C\u3066\u3044\u307E\u305B\u3093: "}, + {"Top.level.certificate.in.reply.", + "\u5FDC\u7B54\u3057\u305F\u30C8\u30C3\u30D7\u30EC\u30D9\u30EB\u306E\u8A3C\u660E\u66F8:\n"}, + {".is.not.trusted.", "... \u306F\u4FE1\u983C\u3055\u308C\u3066\u3044\u307E\u305B\u3093\u3002 "}, + {"Install.reply.anyway.no.", "\u5FDC\u7B54\u3092\u30A4\u30F3\u30B9\u30C8\u30FC\u30EB\u3057\u307E\u3059\u304B\u3002[\u3044\u3044\u3048]: "}, + {"NO", "\u3044\u3044\u3048"}, + {"Public.keys.in.reply.and.keystore.don.t.match", + "\u5FDC\u7B54\u3057\u305F\u516C\u958B\u9375\u3068\u30AD\u30FC\u30B9\u30C8\u30A2\u304C\u4E00\u81F4\u3057\u307E\u305B\u3093"}, + {"Certificate.reply.and.certificate.in.keystore.are.identical", + "\u8A3C\u660E\u66F8\u5FDC\u7B54\u3068\u30AD\u30FC\u30B9\u30C8\u30A2\u5185\u306E\u8A3C\u660E\u66F8\u304C\u540C\u3058\u3067\u3059"}, + {"Failed.to.establish.chain.from.reply", + "\u5FDC\u7B54\u304B\u3089\u9023\u9396\u3092\u78BA\u7ACB\u3067\u304D\u307E\u305B\u3093\u3067\u3057\u305F"}, + {"n", "n"}, + {"Wrong.answer.try.again", "\u5FDC\u7B54\u304C\u9593\u9055\u3063\u3066\u3044\u307E\u3059\u3002\u3082\u3046\u4E00\u5EA6\u5B9F\u884C\u3057\u3066\u304F\u3060\u3055\u3044"}, + {"Secret.key.not.generated.alias.alias.already.exists", + "\u79D8\u5BC6\u9375\u306F\u751F\u6210\u3055\u308C\u307E\u305B\u3093\u3067\u3057\u305F\u3002\u5225\u540D<{0}>\u306F\u3059\u3067\u306B\u5B58\u5728\u3057\u307E\u3059"}, + {"Please.provide.keysize.for.secret.key.generation", + "\u79D8\u5BC6\u9375\u306E\u751F\u6210\u6642\u306B\u306F -keysize\u3092\u6307\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044"}, + + {"Extensions.", "\u62E1\u5F35: "}, + {".Empty.value.", "(\u7A7A\u306E\u5024)"}, + {"Extension.Request.", "\u62E1\u5F35\u30EA\u30AF\u30A8\u30B9\u30C8:"}, + {"PKCS.10.Certificate.Request.Version.1.0.Subject.s.Public.Key.s.format.s.key.", + "PKCS #10\u8A3C\u660E\u66F8\u30EA\u30AF\u30A8\u30B9\u30C8(\u30D0\u30FC\u30B8\u30E7\u30F31.0)\n\u30B5\u30D6\u30B8\u30A7\u30AF\u30C8: %s\n\u516C\u958B\u9375: %s \u30D5\u30A9\u30FC\u30DE\u30C3\u30C8 %s \u30AD\u30FC\n"}, + {"Unknown.keyUsage.type.", "\u4E0D\u660E\u306AkeyUsage\u30BF\u30A4\u30D7: "}, + {"Unknown.extendedkeyUsage.type.", "\u4E0D\u660E\u306AextendedkeyUsage\u30BF\u30A4\u30D7: "}, + {"Unknown.AccessDescription.type.", "\u4E0D\u660E\u306AAccessDescription\u30BF\u30A4\u30D7: "}, + {"Unrecognized.GeneralName.type.", "\u8A8D\u8B58\u3055\u308C\u306A\u3044GeneralName\u30BF\u30A4\u30D7: "}, + {"This.extension.cannot.be.marked.as.critical.", + "\u3053\u306E\u62E1\u5F35\u306F\u30AF\u30EA\u30C6\u30A3\u30AB\u30EB\u3068\u3057\u3066\u30DE\u30FC\u30AF\u4ED8\u3051\u3067\u304D\u307E\u305B\u3093\u3002 "}, + {"Odd.number.of.hex.digits.found.", "\u5947\u6570\u306E16\u9032\u6570\u304C\u898B\u3064\u304B\u308A\u307E\u3057\u305F: "}, + {"Unknown.extension.type.", "\u4E0D\u660E\u306A\u62E1\u5F35\u30BF\u30A4\u30D7: "}, + {"command.{0}.is.ambiguous.", "\u30B3\u30DE\u30F3\u30C9{0}\u306F\u3042\u3044\u307E\u3044\u3067\u3059:"} + }; + + + /** + * Returns the contents of this ResourceBundle. + * + *

+ * + * @return the contents of this ResourceBundle. + */ + @Override + public Object[][] getContents() { + return contents; + } +} diff --git a/jdk/src/share/classes/sun/security/tools/keytool/Resources_ko.java b/jdk/src/share/classes/sun/security/tools/keytool/Resources_ko.java new file mode 100644 index 00000000000..9f3f70f5024 --- /dev/null +++ b/jdk/src/share/classes/sun/security/tools/keytool/Resources_ko.java @@ -0,0 +1,431 @@ +/* + * Copyright (c) 2000, 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. 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.security.tools.keytool; + +/** + *

This class represents the ResourceBundle + * for the keytool. + * + */ +public class Resources_ko extends java.util.ListResourceBundle { + + private static final Object[][] contents = { + {"NEWLINE", "\n"}, + {"STAR", + "*******************************************"}, + {"STARNN", + "*******************************************\n\n"}, + + // keytool: Help part +// "Option" should be translated. + {".OPTION.", " [\uC635\uC158]..."}, + {"Options.", "\uC635\uC158:"}, + {"Use.keytool.help.for.all.available.commands", + "\uC0AC\uC6A9 \uAC00\uB2A5\uD55C \uBAA8\uB4E0 \uBA85\uB839\uC5D0 \"keytool -help\" \uC0AC\uC6A9"}, + {"Key.and.Certificate.Management.Tool", + "\uD0A4 \uBC0F \uC778\uC99D\uC11C \uAD00\uB9AC \uD234"}, + {"Commands.", "\uBA85\uB839:"}, + {"Use.keytool.command.name.help.for.usage.of.command.name", + "command_name \uC0AC\uC6A9\uBC95\uC5D0 \"keytool -command_name -help\" \uC0AC\uC6A9"}, + // keytool: help: commands + {"Generates.a.certificate.request", + "\uC778\uC99D\uC11C \uC694\uCCAD\uC744 \uC0DD\uC131\uD569\uB2C8\uB2E4."}, //-certreq + {"Changes.an.entry.s.alias", + "\uD56D\uBAA9\uC758 \uBCC4\uCE6D\uC744 \uBCC0\uACBD\uD569\uB2C8\uB2E4."}, //-changealias + {"Deletes.an.entry", + "\uD56D\uBAA9\uC744 \uC0AD\uC81C\uD569\uB2C8\uB2E4."}, //-delete + {"Exports.certificate", + "\uC778\uC99D\uC11C\uB97C \uC775\uC2A4\uD3EC\uD2B8\uD569\uB2C8\uB2E4."}, //-exportcert + {"Generates.a.key.pair", + "\uD0A4 \uC30D\uC744 \uC0DD\uC131\uD569\uB2C8\uB2E4."}, //-genkeypair +// translation of "secret" key should be different to "private" key. + {"Generates.a.secret.key", + "\uBCF4\uC548 \uD0A4\uB97C \uC0DD\uC131\uD569\uB2C8\uB2E4."}, //-genseckey + {"Generates.certificate.from.a.certificate.request", + "\uC778\uC99D\uC11C \uC694\uCCAD\uC5D0\uC11C \uC778\uC99D\uC11C\uB97C \uC0DD\uC131\uD569\uB2C8\uB2E4."}, //-gencert + {"Generates.CRL", "CRL\uC744 \uC0DD\uC131\uD569\uB2C8\uB2E4."}, //-gencrl + {"Imports.entries.from.a.JDK.1.1.x.style.identity.database", + "JDK 1.1.x \uC2A4\uD0C0\uC77C ID \uB370\uC774\uD130\uBCA0\uC774\uC2A4\uC5D0\uC11C \uD56D\uBAA9\uC744 \uC784\uD3EC\uD2B8\uD569\uB2C8\uB2E4."}, //-identitydb + {"Imports.a.certificate.or.a.certificate.chain", + "\uC778\uC99D\uC11C \uB610\uB294 \uC778\uC99D\uC11C \uCCB4\uC778\uC744 \uC784\uD3EC\uD2B8\uD569\uB2C8\uB2E4."}, //-importcert + {"Imports.one.or.all.entries.from.another.keystore", + "\uB2E4\uB978 \uD0A4 \uC800\uC7A5\uC18C\uC5D0\uC11C \uD558\uB098 \uB610\uB294 \uBAA8\uB4E0 \uD56D\uBAA9\uC744 \uC784\uD3EC\uD2B8\uD569\uB2C8\uB2E4."}, //-importkeystore + {"Clones.a.key.entry", + "\uD0A4 \uD56D\uBAA9\uC744 \uBCF5\uC81C\uD569\uB2C8\uB2E4."}, //-keyclone + {"Changes.the.key.password.of.an.entry", + "\uD56D\uBAA9\uC758 \uD0A4 \uBE44\uBC00\uBC88\uD638\uB97C \uBCC0\uACBD\uD569\uB2C8\uB2E4."}, //-keypasswd + {"Lists.entries.in.a.keystore", + "\uD0A4 \uC800\uC7A5\uC18C\uC758 \uD56D\uBAA9\uC744 \uB098\uC5F4\uD569\uB2C8\uB2E4."}, //-list + {"Prints.the.content.of.a.certificate", + "\uC778\uC99D\uC11C\uC758 \uCF58\uD150\uCE20\uB97C \uC778\uC1C4\uD569\uB2C8\uB2E4."}, //-printcert + {"Prints.the.content.of.a.certificate.request", + "\uC778\uC99D\uC11C \uC694\uCCAD\uC758 \uCF58\uD150\uCE20\uB97C \uC778\uC1C4\uD569\uB2C8\uB2E4."}, //-printcertreq + {"Prints.the.content.of.a.CRL.file", + "CRL \uD30C\uC77C\uC758 \uCF58\uD150\uCE20\uB97C \uC778\uC1C4\uD569\uB2C8\uB2E4."}, //-printcrl + {"Generates.a.self.signed.certificate", + "\uC790\uCCB4 \uC11C\uBA85\uB41C \uC778\uC99D\uC11C\uB97C \uC0DD\uC131\uD569\uB2C8\uB2E4."}, //-selfcert + {"Changes.the.store.password.of.a.keystore", + "\uD0A4 \uC800\uC7A5\uC18C\uC758 \uC800\uC7A5\uC18C \uBE44\uBC00\uBC88\uD638\uB97C \uBCC0\uACBD\uD569\uB2C8\uB2E4."}, //-storepasswd + // keytool: help: options + {"alias.name.of.the.entry.to.process", + "\uCC98\uB9AC\uD560 \uD56D\uBAA9\uC758 \uBCC4\uCE6D \uC774\uB984"}, //-alias + {"destination.alias", + "\uB300\uC0C1 \uBCC4\uCE6D"}, //-destalias + {"destination.key.password", + "\uB300\uC0C1 \uD0A4 \uBE44\uBC00\uBC88\uD638"}, //-destkeypass + {"destination.keystore.name", + "\uB300\uC0C1 \uD0A4 \uC800\uC7A5\uC18C \uC774\uB984"}, //-destkeystore + {"destination.keystore.password.protected", + "\uB300\uC0C1 \uD0A4 \uC800\uC7A5\uC18C \uBE44\uBC00\uBC88\uD638\uB85C \uBCF4\uD638\uB428"}, //-destprotected + {"destination.keystore.provider.name", + "\uB300\uC0C1 \uD0A4 \uC800\uC7A5\uC18C \uC81C\uACF5\uC790 \uC774\uB984"}, //-destprovidername + {"destination.keystore.password", + "\uB300\uC0C1 \uD0A4 \uC800\uC7A5\uC18C \uBE44\uBC00\uBC88\uD638"}, //-deststorepass + {"destination.keystore.type", + "\uB300\uC0C1 \uD0A4 \uC800\uC7A5\uC18C \uC720\uD615"}, //-deststoretype + {"distinguished.name", + "\uC2DD\uBCC4 \uC774\uB984"}, //-dname + {"X.509.extension", + "X.509 \uD655\uC7A5"}, //-ext + {"output.file.name", + "\uCD9C\uB825 \uD30C\uC77C \uC774\uB984"}, //-file and -outfile + {"input.file.name", + "\uC785\uB825 \uD30C\uC77C \uC774\uB984"}, //-file and -infile + {"key.algorithm.name", + "\uD0A4 \uC54C\uACE0\uB9AC\uC998 \uC774\uB984"}, //-keyalg + {"key.password", + "\uD0A4 \uBE44\uBC00\uBC88\uD638"}, //-keypass + {"key.bit.size", + "\uD0A4 \uBE44\uD2B8 \uD06C\uAE30"}, //-keysize + {"keystore.name", + "\uD0A4 \uC800\uC7A5\uC18C \uC774\uB984"}, //-keystore + {"new.password", + "\uC0C8 \uBE44\uBC00\uBC88\uD638"}, //-new + {"do.not.prompt", + "\uD655\uC778\uD558\uC9C0 \uC54A\uC74C"}, //-noprompt + {"password.through.protected.mechanism", + "\uBCF4\uD638\uB418\uB294 \uBA54\uCEE4\uB2C8\uC998\uC744 \uD1B5\uD55C \uBE44\uBC00\uBC88\uD638"}, //-protected + {"provider.argument", + "\uC81C\uACF5\uC790 \uC778\uC218"}, //-providerarg + {"provider.class.name", + "\uC81C\uACF5\uC790 \uD074\uB798\uC2A4 \uC774\uB984"}, //-providerclass + {"provider.name", + "\uC81C\uACF5\uC790 \uC774\uB984"}, //-providername + {"provider.classpath", + "\uC81C\uACF5\uC790 \uD074\uB798\uC2A4 \uACBD\uB85C"}, //-providerpath + {"output.in.RFC.style", + "RFC \uC2A4\uD0C0\uC77C\uC758 \uCD9C\uB825"}, //-rfc + {"signature.algorithm.name", + "\uC11C\uBA85 \uC54C\uACE0\uB9AC\uC998 \uC774\uB984"}, //-sigalg + {"source.alias", + "\uC18C\uC2A4 \uBCC4\uCE6D"}, //-srcalias + {"source.key.password", + "\uC18C\uC2A4 \uD0A4 \uBE44\uBC00\uBC88\uD638"}, //-srckeypass + {"source.keystore.name", + "\uC18C\uC2A4 \uD0A4 \uC800\uC7A5\uC18C \uC774\uB984"}, //-srckeystore + {"source.keystore.password.protected", + "\uC18C\uC2A4 \uD0A4 \uC800\uC7A5\uC18C \uBE44\uBC00\uBC88\uD638\uB85C \uBCF4\uD638\uB428"}, //-srcprotected + {"source.keystore.provider.name", + "\uC18C\uC2A4 \uD0A4 \uC800\uC7A5\uC18C \uC81C\uACF5\uC790 \uC774\uB984"}, //-srcprovidername + {"source.keystore.password", + "\uC18C\uC2A4 \uD0A4 \uC800\uC7A5\uC18C \uBE44\uBC00\uBC88\uD638"}, //-srcstorepass + {"source.keystore.type", + "\uC18C\uC2A4 \uD0A4 \uC800\uC7A5\uC18C \uC720\uD615"}, //-srcstoretype + {"SSL.server.host.and.port", + "SSL \uC11C\uBC84 \uD638\uC2A4\uD2B8 \uBC0F \uD3EC\uD2B8"}, //-sslserver + {"signed.jar.file", + "\uC11C\uBA85\uB41C jar \uD30C\uC77C"}, //=jarfile + {"certificate.validity.start.date.time", + "\uC778\uC99D\uC11C \uC720\uD6A8 \uAE30\uAC04 \uC2DC\uC791 \uB0A0\uC9DC/\uC2DC\uAC04"}, //-startdate + {"keystore.password", + "\uD0A4 \uC800\uC7A5\uC18C \uBE44\uBC00\uBC88\uD638"}, //-storepass + {"keystore.type", + "\uD0A4 \uC800\uC7A5\uC18C \uC720\uD615"}, //-storetype + {"trust.certificates.from.cacerts", + "cacerts\uC758 \uBCF4\uC548 \uC778\uC99D\uC11C"}, //-trustcacerts + {"verbose.output", + "\uC0C1\uC138 \uC815\uBCF4 \uCD9C\uB825"}, //-v + {"validity.number.of.days", + "\uC720\uD6A8 \uAE30\uAC04 \uC77C \uC218"}, //-validity + {"Serial.ID.of.cert.to.revoke", + "\uCCA0\uD68C\uD560 \uC778\uC99D\uC11C\uC758 \uC77C\uB828 ID"}, //-id + // keytool: Running part + {"keytool.error.", "keytool \uC624\uB958: "}, + {"Illegal.option.", "\uC798\uBABB\uB41C \uC635\uC158: "}, + {"Illegal.value.", "\uC798\uBABB\uB41C \uAC12: "}, + {"Unknown.password.type.", "\uC54C \uC218 \uC5C6\uB294 \uBE44\uBC00\uBC88\uD638 \uC720\uD615: "}, + {"Cannot.find.environment.variable.", + "\uD658\uACBD \uBCC0\uC218\uB97C \uCC3E\uC744 \uC218 \uC5C6\uC74C: "}, + {"Cannot.find.file.", "\uD30C\uC77C\uC744 \uCC3E\uC744 \uC218 \uC5C6\uC74C: "}, + {"Command.option.flag.needs.an.argument.", "\uBA85\uB839 \uC635\uC158 {0}\uC5D0 \uC778\uC218\uAC00 \uD544\uC694\uD569\uB2C8\uB2E4."}, + {"Warning.Different.store.and.key.passwords.not.supported.for.PKCS12.KeyStores.Ignoring.user.specified.command.value.", + "\uACBD\uACE0: \uB2E4\uB978 \uC800\uC7A5\uC18C \uBC0F \uD0A4 \uBE44\uBC00\uBC88\uD638\uB294 PKCS12 KeyStores\uC5D0 \uB300\uD574 \uC9C0\uC6D0\uB418\uC9C0 \uC54A\uC2B5\uB2C8\uB2E4. \uC0AC\uC6A9\uC790\uAC00 \uC9C0\uC815\uD55C {0} \uAC12\uC744 \uBB34\uC2DC\uD558\uB294 \uC911\uC785\uB2C8\uB2E4."}, + {".keystore.must.be.NONE.if.storetype.is.{0}", + "-storetype\uC774 {0}\uC778 \uACBD\uC6B0 -keystore\uB294 NONE\uC774\uC5B4\uC57C \uD569\uB2C8\uB2E4."}, + {"Too.many.retries.program.terminated", + "\uC7AC\uC2DC\uB3C4 \uD69F\uC218\uAC00 \uB108\uBB34 \uB9CE\uC544 \uD504\uB85C\uADF8\uB7A8\uC774 \uC885\uB8CC\uB418\uC5C8\uC2B5\uB2C8\uB2E4."}, + {".storepasswd.and.keypasswd.commands.not.supported.if.storetype.is.{0}", + "-storetype\uC774 {0}\uC778 \uACBD\uC6B0 -storepasswd \uBC0F -keypasswd \uBA85\uB839\uC774 \uC9C0\uC6D0\uB418\uC9C0 \uC54A\uC2B5\uB2C8\uB2E4."}, + {".keypasswd.commands.not.supported.if.storetype.is.PKCS12", + "-storetype\uC774 PKCS12\uC778 \uACBD\uC6B0 -keypasswd \uBA85\uB839\uC774 \uC9C0\uC6D0\uB418\uC9C0 \uC54A\uC2B5\uB2C8\uB2E4."}, + {".keypass.and.new.can.not.be.specified.if.storetype.is.{0}", + "-storetype\uC774 {0}\uC778 \uACBD\uC6B0 -keypass \uBC0F -new\uB97C \uC9C0\uC815\uD560 \uC218 \uC5C6\uC2B5\uB2C8\uB2E4."}, + {"if.protected.is.specified.then.storepass.keypass.and.new.must.not.be.specified", + "-protected\uB97C \uC9C0\uC815\uD55C \uACBD\uC6B0 -storepass, -keypass \uBC0F -new\uB97C \uC9C0\uC815\uD558\uC9C0 \uC54A\uC544\uC57C \uD569\uB2C8\uB2E4."}, + {"if.srcprotected.is.specified.then.srcstorepass.and.srckeypass.must.not.be.specified", + "-srcprotected\uB97C \uC9C0\uC815\uD55C \uACBD\uC6B0 -srcstorepass \uBC0F -srckeypass\uB97C \uC9C0\uC815\uD558\uC9C0 \uC54A\uC544\uC57C \uD569\uB2C8\uB2E4."}, + {"if.keystore.is.not.password.protected.then.storepass.keypass.and.new.must.not.be.specified", + "\uD0A4 \uC800\uC7A5\uC18C\uAC00 \uBE44\uBC00\uBC88\uD638\uB85C \uBCF4\uD638\uB418\uC9C0 \uC54A\uB294 \uACBD\uC6B0 -storepass, -keypass \uBC0F -new\uB97C \uC9C0\uC815\uD558\uC9C0 \uC54A\uC544\uC57C \uD569\uB2C8\uB2E4."}, + {"if.source.keystore.is.not.password.protected.then.srcstorepass.and.srckeypass.must.not.be.specified", + "\uC18C\uC2A4 \uD0A4 \uC800\uC7A5\uC18C\uAC00 \uBE44\uBC00\uBC88\uD638\uB85C \uBCF4\uD638\uB418\uC9C0 \uC54A\uB294 \uACBD\uC6B0 -srcstorepass \uBC0F -srckeypass\uB97C \uC9C0\uC815\uD558\uC9C0 \uC54A\uC544\uC57C \uD569\uB2C8\uB2E4."}, + {"Illegal.startdate.value", "startdate \uAC12\uC774 \uC798\uBABB\uB418\uC5C8\uC2B5\uB2C8\uB2E4."}, + {"Validity.must.be.greater.than.zero", + "\uC720\uD6A8 \uAE30\uAC04\uC740 0\uBCF4\uB2E4 \uCEE4\uC57C \uD569\uB2C8\uB2E4."}, + {"provName.not.a.provider", "{0}\uC740(\uB294) \uC81C\uACF5\uC790\uAC00 \uC544\uB2D9\uB2C8\uB2E4."}, + {"Usage.error.no.command.provided", "\uC0AC\uC6A9\uBC95 \uC624\uB958: \uBA85\uB839\uC744 \uC785\uB825\uD558\uC9C0 \uC54A\uC558\uC2B5\uB2C8\uB2E4."}, + {"Source.keystore.file.exists.but.is.empty.", "\uC18C\uC2A4 \uD0A4 \uC800\uC7A5\uC18C \uD30C\uC77C\uC774 \uC874\uC7AC\uD558\uC9C0\uB9CC \uBE44\uC5B4 \uC788\uC74C: "}, + {"Please.specify.srckeystore", "-srckeystore\uB97C \uC9C0\uC815\uD558\uC2ED\uC2DC\uC624."}, + {"Must.not.specify.both.v.and.rfc.with.list.command", + "'list' \uBA85\uB839\uC5D0 -v\uC640 -rfc\uB97C \uD568\uAED8 \uC9C0\uC815\uD558\uC9C0 \uC54A\uC544\uC57C \uD569\uB2C8\uB2E4."}, + {"Key.password.must.be.at.least.6.characters", + "\uD0A4 \uBE44\uBC00\uBC88\uD638\uB294 6\uC790 \uC774\uC0C1\uC774\uC5B4\uC57C \uD569\uB2C8\uB2E4."}, + {"New.password.must.be.at.least.6.characters", + "\uC0C8 \uBE44\uBC00\uBC88\uD638\uB294 6\uC790 \uC774\uC0C1\uC774\uC5B4\uC57C \uD569\uB2C8\uB2E4."}, + {"Keystore.file.exists.but.is.empty.", + "\uD0A4 \uC800\uC7A5\uC18C \uD30C\uC77C\uC774 \uC874\uC7AC\uD558\uC9C0\uB9CC \uBE44\uC5B4 \uC788\uC74C: "}, + {"Keystore.file.does.not.exist.", + "\uD0A4 \uC800\uC7A5\uC18C \uD30C\uC77C\uC774 \uC874\uC7AC\uD558\uC9C0 \uC54A\uC74C: "}, + {"Must.specify.destination.alias", "\uB300\uC0C1 \uBCC4\uCE6D\uC744 \uC9C0\uC815\uD574\uC57C \uD569\uB2C8\uB2E4."}, + {"Must.specify.alias", "\uBCC4\uCE6D\uC744 \uC9C0\uC815\uD574\uC57C \uD569\uB2C8\uB2E4."}, + {"Keystore.password.must.be.at.least.6.characters", + "\uD0A4 \uC800\uC7A5\uC18C \uBE44\uBC00\uBC88\uD638\uB294 6\uC790 \uC774\uC0C1\uC774\uC5B4\uC57C \uD569\uB2C8\uB2E4."}, + {"Enter.keystore.password.", "\uD0A4 \uC800\uC7A5\uC18C \uBE44\uBC00\uBC88\uD638 \uC785\uB825: "}, + {"Enter.source.keystore.password.", "\uC18C\uC2A4 \uD0A4 \uC800\uC7A5\uC18C \uBE44\uBC00\uBC88\uD638 \uC785\uB825: "}, + {"Enter.destination.keystore.password.", "\uB300\uC0C1 \uD0A4 \uC800\uC7A5\uC18C \uBE44\uBC00\uBC88\uD638 \uC785\uB825: "}, + {"Keystore.password.is.too.short.must.be.at.least.6.characters", + "\uD0A4 \uC800\uC7A5\uC18C \uBE44\uBC00\uBC88\uD638\uAC00 \uB108\uBB34 \uC9E7\uC74C - 6\uC790 \uC774\uC0C1\uC774\uC5B4\uC57C \uD569\uB2C8\uB2E4."}, + {"Unknown.Entry.Type", "\uC54C \uC218 \uC5C6\uB294 \uD56D\uBAA9 \uC720\uD615"}, + {"Too.many.failures.Alias.not.changed", "\uC624\uB958\uAC00 \uB108\uBB34 \uB9CE\uC2B5\uB2C8\uB2E4. \uBCC4\uCE6D\uC774 \uBCC0\uACBD\uB418\uC9C0 \uC54A\uC558\uC2B5\uB2C8\uB2E4."}, + {"Entry.for.alias.alias.successfully.imported.", + "{0} \uBCC4\uCE6D\uC5D0 \uB300\uD55C \uD56D\uBAA9\uC774 \uC131\uACF5\uC801\uC73C\uB85C \uC784\uD3EC\uD2B8\uB418\uC5C8\uC2B5\uB2C8\uB2E4."}, + {"Entry.for.alias.alias.not.imported.", "{0} \uBCC4\uCE6D\uC5D0 \uB300\uD55C \uD56D\uBAA9\uC774 \uC784\uD3EC\uD2B8\uB418\uC9C0 \uC54A\uC558\uC2B5\uB2C8\uB2E4."}, + {"Problem.importing.entry.for.alias.alias.exception.Entry.for.alias.alias.not.imported.", + "{0} \uBCC4\uCE6D\uC5D0 \uB300\uD55C \uD56D\uBAA9\uC744 \uC784\uD3EC\uD2B8\uD558\uB294 \uC911 \uBB38\uC81C \uBC1C\uC0DD: {1}.\n{0} \uBCC4\uCE6D\uC5D0 \uB300\uD55C \uD56D\uBAA9\uC774 \uC784\uD3EC\uD2B8\uB418\uC9C0 \uC54A\uC558\uC2B5\uB2C8\uB2E4."}, + {"Import.command.completed.ok.entries.successfully.imported.fail.entries.failed.or.cancelled", + "\uC784\uD3EC\uD2B8 \uBA85\uB839 \uC644\uB8CC: \uC131\uACF5\uC801\uC73C\uB85C \uC784\uD3EC\uD2B8\uB41C \uD56D\uBAA9\uC740 {0}\uAC1C, \uC2E4\uD328\uD558\uAC70\uB098 \uCDE8\uC18C\uB41C \uD56D\uBAA9\uC740 {1}\uAC1C\uC785\uB2C8\uB2E4."}, + {"Warning.Overwriting.existing.alias.alias.in.destination.keystore", + "\uACBD\uACE0: \uB300\uC0C1 \uD0A4 \uC800\uC7A5\uC18C\uC5D0\uC11C \uAE30\uC874 \uBCC4\uCE6D {0}\uC744(\uB97C) \uACB9\uCCD0 \uC4F0\uB294 \uC911"}, + {"Existing.entry.alias.alias.exists.overwrite.no.", + "\uAE30\uC874 \uD56D\uBAA9 \uBCC4\uCE6D {0}\uC774(\uAC00) \uC874\uC7AC\uD569\uB2C8\uB2E4. \uACB9\uCCD0 \uC4F0\uACA0\uC2B5\uB2C8\uAE4C? [\uC544\uB2C8\uC624]: "}, + {"Too.many.failures.try.later", "\uC624\uB958\uAC00 \uB108\uBB34 \uB9CE\uC74C - \uB098\uC911\uC5D0 \uC2DC\uB3C4\uD558\uC2ED\uC2DC\uC624."}, + {"Certification.request.stored.in.file.filename.", + "\uC778\uC99D \uC694\uCCAD\uC774 <{0}> \uD30C\uC77C\uC5D0 \uC800\uC7A5\uB418\uC5C8\uC2B5\uB2C8\uB2E4."}, + {"Submit.this.to.your.CA", "CA\uC5D0\uAC8C \uC81C\uCD9C\uD558\uC2ED\uC2DC\uC624."}, + {"if.alias.not.specified.destalias.srckeypass.and.destkeypass.must.not.be.specified", + "\uBCC4\uCE6D\uC744 \uC9C0\uC815\uD558\uC9C0 \uC54A\uC740 \uACBD\uC6B0 destalias, srckeypass \uBC0F destkeypass\uB97C \uC9C0\uC815\uD558\uC9C0 \uC54A\uC544\uC57C \uD569\uB2C8\uB2E4."}, + {"Certificate.stored.in.file.filename.", + "\uC778\uC99D\uC11C\uAC00 <{0}> \uD30C\uC77C\uC5D0 \uC800\uC7A5\uB418\uC5C8\uC2B5\uB2C8\uB2E4."}, + {"Certificate.reply.was.installed.in.keystore", + "\uC778\uC99D\uC11C \uD68C\uC2E0\uC774 \uD0A4 \uC800\uC7A5\uC18C\uC5D0 \uC124\uCE58\uB418\uC5C8\uC2B5\uB2C8\uB2E4."}, + {"Certificate.reply.was.not.installed.in.keystore", + "\uC778\uC99D\uC11C \uD68C\uC2E0\uC774 \uD0A4 \uC800\uC7A5\uC18C\uC5D0 \uC124\uCE58\uB418\uC9C0 \uC54A\uC558\uC2B5\uB2C8\uB2E4."}, + {"Certificate.was.added.to.keystore", + "\uC778\uC99D\uC11C\uAC00 \uD0A4 \uC800\uC7A5\uC18C\uC5D0 \uCD94\uAC00\uB418\uC5C8\uC2B5\uB2C8\uB2E4."}, + {"Certificate.was.not.added.to.keystore", + "\uC778\uC99D\uC11C\uAC00 \uD0A4 \uC800\uC7A5\uC18C\uC5D0 \uCD94\uAC00\uB418\uC9C0 \uC54A\uC558\uC2B5\uB2C8\uB2E4."}, + {".Storing.ksfname.", "[{0}\uC744(\uB97C) \uC800\uC7A5\uD558\uB294 \uC911]"}, + {"alias.has.no.public.key.certificate.", + "{0}\uC5D0 \uACF5\uC6A9 \uD0A4(\uC778\uC99D\uC11C)\uAC00 \uC5C6\uC2B5\uB2C8\uB2E4."}, + {"Cannot.derive.signature.algorithm", + "\uC11C\uBA85 \uC54C\uACE0\uB9AC\uC998\uC744 \uD30C\uC0DD\uD560 \uC218 \uC5C6\uC2B5\uB2C8\uB2E4."}, + {"Alias.alias.does.not.exist", + "<{0}> \uBCC4\uCE6D\uC774 \uC874\uC7AC\uD558\uC9C0 \uC54A\uC2B5\uB2C8\uB2E4."}, + {"Alias.alias.has.no.certificate", + "<{0}> \uBCC4\uCE6D\uC5D0 \uC778\uC99D\uC11C\uAC00 \uC5C6\uC2B5\uB2C8\uB2E4."}, + {"Key.pair.not.generated.alias.alias.already.exists", + "\uD0A4 \uC30D\uC774 \uC0DD\uC131\uB418\uC9C0 \uC54A\uC558\uC73C\uBA70 <{0}> \uBCC4\uCE6D\uC774 \uC874\uC7AC\uD569\uB2C8\uB2E4."}, + {"Generating.keysize.bit.keyAlgName.key.pair.and.self.signed.certificate.sigAlgName.with.a.validity.of.validality.days.for", + "\uB2E4\uC74C\uC5D0 \uB300\uD574 \uC720\uD6A8 \uAE30\uAC04\uC774 {3}\uC77C\uC778 {0}\uBE44\uD2B8 {1} \uD0A4 \uC30D \uBC0F \uC790\uCCB4 \uC11C\uBA85\uB41C \uC778\uC99D\uC11C({2})\uB97C \uC0DD\uC131\uD558\uB294 \uC911\n\t: {4}"}, + {"Enter.key.password.for.alias.", "<{0}>\uC5D0 \uB300\uD55C \uD0A4 \uBE44\uBC00\uBC88\uD638\uB97C \uC785\uB825\uD558\uC2ED\uC2DC\uC624."}, + {".RETURN.if.same.as.keystore.password.", + "\t(\uD0A4 \uC800\uC7A5\uC18C \uBE44\uBC00\uBC88\uD638\uC640 \uB3D9\uC77C\uD55C \uACBD\uC6B0 Enter \uD0A4\uB97C \uB204\uB984): "}, + {"Key.password.is.too.short.must.be.at.least.6.characters", + "\uD0A4 \uBE44\uBC00\uBC88\uD638\uAC00 \uB108\uBB34 \uC9E7\uC74C - 6\uC790 \uC774\uC0C1\uC774\uC5B4\uC57C \uD569\uB2C8\uB2E4."}, + {"Too.many.failures.key.not.added.to.keystore", + "\uC624\uB958\uAC00 \uB108\uBB34 \uB9CE\uC74C - \uD0A4 \uC800\uC7A5\uC18C\uC5D0 \uD0A4\uAC00 \uCD94\uAC00\uB418\uC9C0 \uC54A\uC558\uC2B5\uB2C8\uB2E4."}, + {"Destination.alias.dest.already.exists", + "\uB300\uC0C1 \uBCC4\uCE6D <{0}>\uC774(\uAC00) \uC874\uC7AC\uD569\uB2C8\uB2E4."}, + {"Password.is.too.short.must.be.at.least.6.characters", + "\uBE44\uBC00\uBC88\uD638\uAC00 \uB108\uBB34 \uC9E7\uC74C - 6\uC790 \uC774\uC0C1\uC774\uC5B4\uC57C \uD569\uB2C8\uB2E4."}, + {"Too.many.failures.Key.entry.not.cloned", + "\uC624\uB958\uAC00 \uB108\uBB34 \uB9CE\uC2B5\uB2C8\uB2E4. \uD0A4 \uD56D\uBAA9\uC774 \uBCF5\uC81C\uB418\uC9C0 \uC54A\uC558\uC2B5\uB2C8\uB2E4."}, + {"key.password.for.alias.", "<{0}>\uC5D0 \uB300\uD55C \uD0A4 \uBE44\uBC00\uBC88\uD638"}, + {"Keystore.entry.for.id.getName.already.exists", + "<{0}>\uC5D0 \uB300\uD55C \uD0A4 \uC800\uC7A5\uC18C \uD56D\uBAA9\uC774 \uC874\uC7AC\uD569\uB2C8\uB2E4."}, + {"Creating.keystore.entry.for.id.getName.", + "<{0}>\uC5D0 \uB300\uD55C \uD0A4 \uC800\uC7A5\uC18C \uD56D\uBAA9\uC744 \uC0DD\uC131\uD558\uB294 \uC911..."}, + {"No.entries.from.identity.database.added", + "ID \uB370\uC774\uD130\uBCA0\uC774\uC2A4\uC5D0\uC11C \uCD94\uAC00\uB41C \uD56D\uBAA9\uC774 \uC5C6\uC2B5\uB2C8\uB2E4."}, + {"Alias.name.alias", "\uBCC4\uCE6D \uC774\uB984: {0}"}, + {"Creation.date.keyStore.getCreationDate.alias.", + "\uC0DD\uC131 \uB0A0\uC9DC: {0,date}"}, + {"alias.keyStore.getCreationDate.alias.", + "{0}, {1,date}, "}, + {"alias.", "{0}, "}, + {"Entry.type.type.", "\uD56D\uBAA9 \uC720\uD615: {0}"}, + {"Certificate.chain.length.", "\uC778\uC99D\uC11C \uCCB4\uC778 \uAE38\uC774: "}, + {"Certificate.i.1.", "\uC778\uC99D\uC11C[{0,number,integer}]:"}, + {"Certificate.fingerprint.SHA1.", "\uC778\uC99D\uC11C \uC9C0\uBB38(SHA1): "}, + {"Keystore.type.", "\uD0A4 \uC800\uC7A5\uC18C \uC720\uD615: "}, + {"Keystore.provider.", "\uD0A4 \uC800\uC7A5\uC18C \uC81C\uACF5\uC790: "}, + {"Your.keystore.contains.keyStore.size.entry", + "\uD0A4 \uC800\uC7A5\uC18C\uC5D0 {0,number,integer}\uAC1C\uC758 \uD56D\uBAA9\uC774 \uD3EC\uD568\uB418\uC5B4 \uC788\uC2B5\uB2C8\uB2E4."}, + {"Your.keystore.contains.keyStore.size.entries", + "\uD0A4 \uC800\uC7A5\uC18C\uC5D0 {0,number,integer}\uAC1C\uC758 \uD56D\uBAA9\uC774 \uD3EC\uD568\uB418\uC5B4 \uC788\uC2B5\uB2C8\uB2E4."}, + {"Failed.to.parse.input", "\uC785\uB825\uAC12\uC758 \uAD6C\uBB38 \uBD84\uC11D\uC744 \uC2E4\uD328\uD588\uC2B5\uB2C8\uB2E4."}, + {"Empty.input", "\uC785\uB825\uAC12\uC774 \uBE44\uC5B4 \uC788\uC2B5\uB2C8\uB2E4."}, + {"Not.X.509.certificate", "X.509 \uC778\uC99D\uC11C\uAC00 \uC544\uB2D9\uB2C8\uB2E4."}, + {"alias.has.no.public.key", "{0}\uC5D0 \uACF5\uC6A9 \uD0A4\uAC00 \uC5C6\uC2B5\uB2C8\uB2E4."}, + {"alias.has.no.X.509.certificate", "{0}\uC5D0 X.509 \uC778\uC99D\uC11C\uAC00 \uC5C6\uC2B5\uB2C8\uB2E4."}, + {"New.certificate.self.signed.", "\uC0C8 \uC778\uC99D\uC11C(\uC790\uCCB4 \uC11C\uBA85):"}, + {"Reply.has.no.certificates", "\uD68C\uC2E0\uC5D0 \uC778\uC99D\uC11C\uAC00 \uC5C6\uC2B5\uB2C8\uB2E4."}, + {"Certificate.not.imported.alias.alias.already.exists", + "\uC778\uC99D\uC11C\uAC00 \uC784\uD3EC\uD2B8\uB418\uC9C0 \uC54A\uC558\uC73C\uBA70 <{0}> \uBCC4\uCE6D\uC774 \uC874\uC7AC\uD569\uB2C8\uB2E4."}, + {"Input.not.an.X.509.certificate", "\uC785\uB825\uC774 X.509 \uC778\uC99D\uC11C\uAC00 \uC544\uB2D9\uB2C8\uB2E4."}, + {"Certificate.already.exists.in.keystore.under.alias.trustalias.", + "\uC778\uC99D\uC11C\uAC00 <{0}> \uBCC4\uCE6D \uC544\uB798\uC758 \uD0A4 \uC800\uC7A5\uC18C\uC5D0 \uC874\uC7AC\uD569\uB2C8\uB2E4."}, + {"Do.you.still.want.to.add.it.no.", + "\uCD94\uAC00\uD558\uACA0\uC2B5\uB2C8\uAE4C? [\uC544\uB2C8\uC624]: "}, + {"Certificate.already.exists.in.system.wide.CA.keystore.under.alias.trustalias.", + "\uC778\uC99D\uC11C\uAC00 <{0}> \uBCC4\uCE6D \uC544\uB798\uC5D0 \uC788\uB294 \uC2DC\uC2A4\uD15C \uCC28\uC6D0\uC758 CA \uD0A4 \uC800\uC7A5\uC18C\uC5D0 \uC874\uC7AC\uD569\uB2C8\uB2E4."}, + {"Do.you.still.want.to.add.it.to.your.own.keystore.no.", + "\uACE0\uC720\uD55C \uD0A4 \uC800\uC7A5\uC18C\uC5D0 \uCD94\uAC00\uD558\uACA0\uC2B5\uB2C8\uAE4C? [\uC544\uB2C8\uC624]: "}, + {"Trust.this.certificate.no.", "\uC774 \uC778\uC99D\uC11C\uB97C \uC2E0\uB8B0\uD569\uB2C8\uAE4C? [\uC544\uB2C8\uC624]: "}, + {"YES", "\uC608"}, + {"New.prompt.", "\uC0C8 {0}: "}, + {"Passwords.must.differ", "\uBE44\uBC00\uBC88\uD638\uB294 \uB2EC\uB77C\uC57C \uD569\uB2C8\uB2E4."}, + {"Re.enter.new.prompt.", "\uC0C8 {0} \uB2E4\uC2DC \uC785\uB825: "}, + {"Re.enter.new.password.", "\uC0C8 \uBE44\uBC00\uBC88\uD638 \uB2E4\uC2DC \uC785\uB825: "}, + {"They.don.t.match.Try.again", "\uC77C\uCE58\uD558\uC9C0 \uC54A\uC2B5\uB2C8\uB2E4. \uB2E4\uC2DC \uC2DC\uB3C4\uD558\uC2ED\uC2DC\uC624."}, + {"Enter.prompt.alias.name.", "{0} \uBCC4\uCE6D \uC774\uB984 \uC785\uB825: "}, + {"Enter.new.alias.name.RETURN.to.cancel.import.for.this.entry.", + "\uC0C8 \uBCC4\uCE6D \uC774\uB984 \uC785\uB825\t(\uC774 \uD56D\uBAA9\uC5D0 \uB300\uD55C \uC784\uD3EC\uD2B8\uB97C \uCDE8\uC18C\uD558\uB824\uBA74 Enter \uD0A4\uB97C \uB204\uB984): "}, + {"Enter.alias.name.", "\uBCC4\uCE6D \uC774\uB984 \uC785\uB825: "}, + {".RETURN.if.same.as.for.otherAlias.", + "\t(<{0}>\uACFC(\uC640) \uB3D9\uC77C\uD55C \uACBD\uC6B0 Enter \uD0A4\uB97C \uB204\uB984)"}, + {".PATTERN.printX509Cert", + "\uC18C\uC720\uC790: {0}\n\uBC1C\uD589\uC790: {1}\n\uC77C\uB828 \uBC88\uD638: {2}\n\uC801\uD569\uD55C \uC2DC\uC791 \uB0A0\uC9DC: {3}, \uC885\uB8CC \uB0A0\uC9DC: {4}\n\uC778\uC99D\uC11C \uC9C0\uBB38:\n\t MD5: {5}\n\t SHA1: {6}\n\t SHA256: {7}\n\t \uC11C\uBA85 \uC54C\uACE0\uB9AC\uC998 \uC774\uB984: {8}\n\t \uBC84\uC804: {9}"}, + {"What.is.your.first.and.last.name.", + "\uC774\uB984\uACFC \uC131\uC744 \uC785\uB825\uD558\uC2ED\uC2DC\uC624."}, + {"What.is.the.name.of.your.organizational.unit.", + "\uC870\uC9C1 \uB2E8\uC704 \uC774\uB984\uC744 \uC785\uB825\uD558\uC2ED\uC2DC\uC624."}, + {"What.is.the.name.of.your.organization.", + "\uC870\uC9C1 \uC774\uB984\uC744 \uC785\uB825\uD558\uC2ED\uC2DC\uC624."}, + {"What.is.the.name.of.your.City.or.Locality.", + "\uAD6C/\uAD70/\uC2DC \uC774\uB984\uC744 \uC785\uB825\uD558\uC2ED\uC2DC\uC624?"}, + {"What.is.the.name.of.your.State.or.Province.", + "\uC2DC/\uB3C4 \uC774\uB984\uC744 \uC785\uB825\uD558\uC2ED\uC2DC\uC624."}, + {"What.is.the.two.letter.country.code.for.this.unit.", + "\uC774 \uC870\uC9C1\uC758 \uB450 \uC790\uB9AC \uAD6D\uAC00 \uCF54\uB4DC\uB97C \uC785\uB825\uD558\uC2ED\uC2DC\uC624."}, + {"Is.name.correct.", "{0}\uC774(\uAC00) \uB9DE\uC2B5\uB2C8\uAE4C?"}, + {"no", "\uC544\uB2C8\uC624"}, + {"yes", "\uC608"}, + {"y", "y"}, + {".defaultValue.", " [{0}]: "}, + {"Alias.alias.has.no.key", + "<{0}> \uBCC4\uCE6D\uC5D0 \uD0A4\uAC00 \uC5C6\uC2B5\uB2C8\uB2E4."}, + {"Alias.alias.references.an.entry.type.that.is.not.a.private.key.entry.The.keyclone.command.only.supports.cloning.of.private.key", + "<{0}> \uBCC4\uCE6D\uC740 \uC804\uC6A9 \uD0A4 \uD56D\uBAA9\uC774 \uC544\uB2CC \uD56D\uBAA9 \uC720\uD615\uC744 \uCC38\uC870\uD569\uB2C8\uB2E4. -keyclone \uBA85\uB839\uC740 \uC804\uC6A9 \uD0A4 \uD56D\uBAA9\uC758 \uBCF5\uC81C\uB9CC \uC9C0\uC6D0\uD569\uB2C8\uB2E4."}, + + {".WARNING.WARNING.WARNING.", + "***************** \uACBD\uACE0 \uACBD\uACE0 \uACBD\uACE0 *****************"}, + {"Signer.d.", "\uC11C\uBA85\uC790 #%d:"}, + {"Timestamp.", "\uC2DC\uAC04 \uAE30\uB85D:"}, + {"Signature.", "\uC11C\uBA85:"}, + {"CRLs.", "CRL:"}, + {"Certificate.owner.", "\uC778\uC99D\uC11C \uC18C\uC720\uC790: "}, + {"Not.a.signed.jar.file", "\uC11C\uBA85\uB41C jar \uD30C\uC77C\uC774 \uC544\uB2D9\uB2C8\uB2E4."}, + {"No.certificate.from.the.SSL.server", + "SSL \uC11C\uBC84\uC5D0\uC11C \uAC00\uC838\uC628 \uC778\uC99D\uC11C\uAC00 \uC5C6\uC2B5\uB2C8\uB2E4."}, + + {".The.integrity.of.the.information.stored.in.your.keystore.", + "* \uD0A4 \uC800\uC7A5\uC18C\uC5D0 \uC800\uC7A5\uB41C \uC815\uBCF4\uC758 \uBB34\uACB0\uC131\uC774 *\n* \uD655\uC778\uB418\uC9C0 \uC54A\uC558\uC2B5\uB2C8\uB2E4! \uBB34\uACB0\uC131\uC744 \uD655\uC778\uD558\uB824\uBA74, *\n* \uD0A4 \uC800\uC7A5\uC18C \uBE44\uBC00\uBC88\uD638\uB97C \uC81C\uACF5\uD574\uC57C \uD569\uB2C8\uB2E4. *"}, + {".The.integrity.of.the.information.stored.in.the.srckeystore.", + "* srckeystore\uC5D0 \uC800\uC7A5\uB41C \uC815\uBCF4\uC758 \uBB34\uACB0\uC131\uC774 *\n* \uD655\uC778\uB418\uC9C0 \uC54A\uC558\uC2B5\uB2C8\uB2E4! \uBB34\uACB0\uC131\uC744 \uD655\uC778\uD558\uB824\uBA74, *\n* srckeystore \uBE44\uBC00\uBC88\uD638\uB97C \uC81C\uACF5\uD574\uC57C \uD569\uB2C8\uB2E4. *"}, + + {"Certificate.reply.does.not.contain.public.key.for.alias.", + "\uC778\uC99D\uC11C \uD68C\uC2E0\uC5D0 <{0}>\uC5D0 \uB300\uD55C \uACF5\uC6A9 \uD0A4\uAC00 \uD3EC\uD568\uB418\uC5B4 \uC788\uC9C0 \uC54A\uC2B5\uB2C8\uB2E4."}, + {"Incomplete.certificate.chain.in.reply", + "\uD68C\uC2E0\uC5D0 \uBD88\uC644\uC804\uD55C \uC778\uC99D\uC11C \uCCB4\uC778\uC774 \uC788\uC2B5\uB2C8\uB2E4."}, + {"Certificate.chain.in.reply.does.not.verify.", + "\uD68C\uC2E0\uC758 \uC778\uC99D\uC11C \uCCB4\uC778\uC774 \uD655\uC778\uB418\uC9C0 \uC54A\uC74C: "}, + {"Top.level.certificate.in.reply.", + "\uD68C\uC2E0\uC5D0 \uCD5C\uC0C1\uC704 \uB808\uBCA8 \uC778\uC99D\uC11C\uAC00 \uC788\uC74C:\n"}, + {".is.not.trusted.", "...\uC744(\uB97C) \uC2E0\uB8B0\uD560 \uC218 \uC5C6\uC2B5\uB2C8\uB2E4. "}, + {"Install.reply.anyway.no.", "\uD68C\uC2E0\uC744 \uC124\uCE58\uD558\uACA0\uC2B5\uB2C8\uAE4C? [\uC544\uB2C8\uC624]: "}, + {"NO", "\uC544\uB2C8\uC624"}, + {"Public.keys.in.reply.and.keystore.don.t.match", + "\uD68C\uC2E0\uACFC \uD0A4 \uC800\uC7A5\uC18C\uC758 \uACF5\uC6A9 \uD0A4\uAC00 \uC77C\uCE58\uD558\uC9C0 \uC54A\uC2B5\uB2C8\uB2E4."}, + {"Certificate.reply.and.certificate.in.keystore.are.identical", + "\uD68C\uC2E0\uACFC \uD0A4 \uC800\uC7A5\uC18C\uC758 \uC778\uC99D\uC11C\uAC00 \uB3D9\uC77C\uD569\uB2C8\uB2E4."}, + {"Failed.to.establish.chain.from.reply", + "\uD68C\uC2E0\uC758 \uCCB4\uC778 \uC124\uC815\uC744 \uC2E4\uD328\uD588\uC2B5\uB2C8\uB2E4."}, + {"n", "n"}, + {"Wrong.answer.try.again", "\uC798\uBABB\uB41C \uC751\uB2F5\uC785\uB2C8\uB2E4. \uB2E4\uC2DC \uC2DC\uB3C4\uD558\uC2ED\uC2DC\uC624."}, + {"Secret.key.not.generated.alias.alias.already.exists", + "\uBCF4\uC548 \uD0A4\uAC00 \uC0DD\uC131\uB418\uC9C0 \uC54A\uC558\uC73C\uBA70 <{0}> \uBCC4\uCE6D\uC774 \uC874\uC7AC\uD569\uB2C8\uB2E4."}, + {"Please.provide.keysize.for.secret.key.generation", + "\uBCF4\uC548 \uD0A4\uB97C \uC0DD\uC131\uD558\uB824\uBA74 -keysize\uB97C \uC81C\uACF5\uD558\uC2ED\uC2DC\uC624."}, + + {"Extensions.", "\uD655\uC7A5: "}, + {".Empty.value.", "(\uBE44\uC5B4 \uC788\uB294 \uAC12)"}, + {"Extension.Request.", "\uD655\uC7A5 \uC694\uCCAD:"}, + {"PKCS.10.Certificate.Request.Version.1.0.Subject.s.Public.Key.s.format.s.key.", + "PKCS #10 \uC778\uC99D\uC11C \uC694\uCCAD(1.0 \uBC84\uC804)\n\uC81C\uBAA9: %s\n\uACF5\uC6A9 \uD0A4: %s \uD615\uC2DD %s \uD0A4\n"}, + {"Unknown.keyUsage.type.", "\uC54C \uC218 \uC5C6\uB294 keyUsage \uC720\uD615: "}, + {"Unknown.extendedkeyUsage.type.", "\uC54C \uC218 \uC5C6\uB294 extendedkeyUsage \uC720\uD615: "}, + {"Unknown.AccessDescription.type.", "\uC54C \uC218 \uC5C6\uB294 AccessDescription \uC720\uD615: "}, + {"Unrecognized.GeneralName.type.", "\uC54C \uC218 \uC5C6\uB294 GeneralName \uC720\uD615: "}, + {"This.extension.cannot.be.marked.as.critical.", + "\uC774 \uD655\uC7A5\uC740 \uC911\uC694\uD55C \uAC83\uC73C\uB85C \uD45C\uC2DC\uD560 \uC218 \uC5C6\uC2B5\uB2C8\uB2E4. "}, + {"Odd.number.of.hex.digits.found.", "\uD640\uC218 \uAC1C\uC758 16\uC9C4\uC218\uAC00 \uBC1C\uACAC\uB428: "}, + {"Unknown.extension.type.", "\uC54C \uC218 \uC5C6\uB294 \uD655\uC7A5 \uC720\uD615: "}, + {"command.{0}.is.ambiguous.", "{0} \uBA85\uB839\uC774 \uBAA8\uD638\uD568:"} + }; + + + /** + * Returns the contents of this ResourceBundle. + * + *

+ * + * @return the contents of this ResourceBundle. + */ + @Override + public Object[][] getContents() { + return contents; + } +} diff --git a/jdk/src/share/classes/sun/security/tools/keytool/Resources_pt_BR.java b/jdk/src/share/classes/sun/security/tools/keytool/Resources_pt_BR.java new file mode 100644 index 00000000000..50b4d26067e --- /dev/null +++ b/jdk/src/share/classes/sun/security/tools/keytool/Resources_pt_BR.java @@ -0,0 +1,431 @@ +/* + * Copyright (c) 2000, 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. 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.security.tools.keytool; + +/** + *

This class represents the ResourceBundle + * for the keytool. + * + */ +public class Resources_pt_BR extends java.util.ListResourceBundle { + + private static final Object[][] contents = { + {"NEWLINE", "\n"}, + {"STAR", + "*******************************************"}, + {"STARNN", + "*******************************************\n\n"}, + + // keytool: Help part +// "Option" should be translated. + {".OPTION.", " [Op\u00E7\u00E3o]..."}, + {"Options.", "Op\u00E7\u00F5es:"}, + {"Use.keytool.help.for.all.available.commands", + "Use \"keytool -help\" para todos os comandos dispon\u00EDveis"}, + {"Key.and.Certificate.Management.Tool", + "Ferramenta de Gerenciamento de Chave e Certificado"}, + {"Commands.", "Comandos:"}, + {"Use.keytool.command.name.help.for.usage.of.command.name", + "Use \"keytool -command_name -help\" para uso de command_name"}, + // keytool: help: commands + {"Generates.a.certificate.request", + "Gera uma solicita\u00E7\u00E3o de certificado"}, //-certreq + {"Changes.an.entry.s.alias", + "Altera um alias de entrada"}, //-changealias + {"Deletes.an.entry", + "Deleta uma entrada"}, //-delete + {"Exports.certificate", + "Exporta o certificado"}, //-exportcert + {"Generates.a.key.pair", + "Gera um par de chaves"}, //-genkeypair +// translation of "secret" key should be different to "private" key. + {"Generates.a.secret.key", + "Gera uma chave Secreta"}, //-genseckey + {"Generates.certificate.from.a.certificate.request", + "Gera um certificado de uma solicita\u00E7\u00E3o de certificado"}, //-gencert + {"Generates.CRL", "Gera CRL"}, //-gencrl + {"Imports.entries.from.a.JDK.1.1.x.style.identity.database", + "Importa entradas de um banco de dados de identidade JDK 1.1.x-style"}, //-identitydb + {"Imports.a.certificate.or.a.certificate.chain", + "Importa um certificado ou uma cadeia de certificados"}, //-importcert + {"Imports.one.or.all.entries.from.another.keystore", + "Importa uma ou todas as entradas de outra \u00E1rea de armazenamento de chaves"}, //-importkeystore + {"Clones.a.key.entry", + "Clona uma entrada de chave"}, //-keyclone + {"Changes.the.key.password.of.an.entry", + "Altera a senha da chave de uma entrada"}, //-keypasswd + {"Lists.entries.in.a.keystore", + "Lista entradas em uma \u00E1rea de armazenamento de chaves"}, //-list + {"Prints.the.content.of.a.certificate", + "Imprime o conte\u00FAdo de um certificado"}, //-printcert + {"Prints.the.content.of.a.certificate.request", + "Imprime o conte\u00FAdo de uma solicita\u00E7\u00E3o de certificado"}, //-printcertreq + {"Prints.the.content.of.a.CRL.file", + "Imprime o conte\u00FAdo de um arquivo CRL"}, //-printcrl + {"Generates.a.self.signed.certificate", + "Gera um certificado autoassinado"}, //-selfcert + {"Changes.the.store.password.of.a.keystore", + "Altera a senha de armazenamento de uma \u00E1rea de armazenamento de chaves"}, //-storepasswd + // keytool: help: options + {"alias.name.of.the.entry.to.process", + "nome do alias da entrada a ser processada"}, //-alias + {"destination.alias", + "alias de destino"}, //-destalias + {"destination.key.password", + "senha da chave de destino"}, //-destkeypass + {"destination.keystore.name", + "nome da \u00E1rea de armazenamento de chaves de destino"}, //-destkeystore + {"destination.keystore.password.protected", + "senha protegida da \u00E1rea de armazenamento de chaves de destino"}, //-destprotected + {"destination.keystore.provider.name", + "nome do fornecedor da \u00E1rea de armazenamento de chaves de destino"}, //-destprovidername + {"destination.keystore.password", + "senha da \u00E1rea de armazenamento de chaves de destino"}, //-deststorepass + {"destination.keystore.type", + "tipo de \u00E1rea de armazenamento de chaves de destino"}, //-deststoretype + {"distinguished.name", + "nome distinto"}, //-dname + {"X.509.extension", + "extens\u00E3o X.509"}, //-ext + {"output.file.name", + "nome do arquivo de sa\u00EDda"}, //-file and -outfile + {"input.file.name", + "nome do arquivo de entrada"}, //-file and -infile + {"key.algorithm.name", + "nome do algoritmo da chave"}, //-keyalg + {"key.password", + "senha da chave"}, //-keypass + {"key.bit.size", + "tamanho do bit da chave"}, //-keysize + {"keystore.name", + "nome da \u00E1rea de armazenamento de chaves"}, //-keystore + {"new.password", + "nova senha"}, //-new + {"do.not.prompt", + "n\u00E3o perguntar"}, //-noprompt + {"password.through.protected.mechanism", + "senha por meio de mecanismo protegido"}, //-protected + {"provider.argument", + "argumento do fornecedor"}, //-providerarg + {"provider.class.name", + "nome da classe do fornecedor"}, //-providerclass + {"provider.name", + "nome do fornecedor"}, //-providername + {"provider.classpath", + "classpath do fornecedor"}, //-providerpath + {"output.in.RFC.style", + "sa\u00EDda no estilo RFC"}, //-rfc + {"signature.algorithm.name", + "nome do algoritmo de assinatura"}, //-sigalg + {"source.alias", + "alias de origem"}, //-srcalias + {"source.key.password", + "senha da chave de origem"}, //-srckeypass + {"source.keystore.name", + "nome da \u00E1rea de armazenamento de chaves de origem"}, //-srckeystore + {"source.keystore.password.protected", + "senha protegida da \u00E1rea de armazenamento de chaves de origem"}, //-srcprotected + {"source.keystore.provider.name", + "nome do fornecedor da \u00E1rea de armazenamento de chaves de origem"}, //-srcprovidername + {"source.keystore.password", + "senha da \u00E1rea de armazenamento de chaves de origem"}, //-srcstorepass + {"source.keystore.type", + "tipo de \u00E1rea de armazenamento de chaves de origem"}, //-srcstoretype + {"SSL.server.host.and.port", + "porta e host do servidor SSL"}, //-sslserver + {"signed.jar.file", + "arquivo jar assinado"}, //=jarfile + {"certificate.validity.start.date.time", + "data/hora inicial de validade do certificado"}, //-startdate + {"keystore.password", + "senha da \u00E1rea de armazenamento de chaves"}, //-storepass + {"keystore.type", + "tipo de \u00E1rea de armazenamento de chaves"}, //-storetype + {"trust.certificates.from.cacerts", + "certificados confi\u00E1veis do cacerts"}, //-trustcacerts + {"verbose.output", + "sa\u00EDda detalhada"}, //-v + {"validity.number.of.days", + "n\u00FAmero de dias da validade"}, //-validity + {"Serial.ID.of.cert.to.revoke", + "ID de s\u00E9rie do certificado a ser revogado"}, //-id + // keytool: Running part + {"keytool.error.", "erro de keytool: "}, + {"Illegal.option.", "Op\u00E7\u00E3o inv\u00E1lida: "}, + {"Illegal.value.", "Valor inv\u00E1lido: "}, + {"Unknown.password.type.", "Tipo de senha desconhecido: "}, + {"Cannot.find.environment.variable.", + "N\u00E3o \u00E9 poss\u00EDvel localizar a vari\u00E1vel do ambiente: "}, + {"Cannot.find.file.", "N\u00E3o \u00E9 poss\u00EDvel localizar o arquivo: "}, + {"Command.option.flag.needs.an.argument.", "A op\u00E7\u00E3o de comando {0} precisa de um argumento."}, + {"Warning.Different.store.and.key.passwords.not.supported.for.PKCS12.KeyStores.Ignoring.user.specified.command.value.", + "Advert\u00EAncia: Senhas de chave e de armazenamento diferentes n\u00E3o suportadas para KeyStores PKCS12. Ignorando valor {0} especificado pelo usu\u00E1rio."}, + {".keystore.must.be.NONE.if.storetype.is.{0}", + "-keystore deve ser NONE se -storetype for {0}"}, + {"Too.many.retries.program.terminated", + "Excesso de tentativas de repeti\u00E7\u00E3o; programa finalizado"}, + {".storepasswd.and.keypasswd.commands.not.supported.if.storetype.is.{0}", + "comandos -storepasswd e -keypasswd n\u00E3o suportados se -storetype for {0}"}, + {".keypasswd.commands.not.supported.if.storetype.is.PKCS12", + "comandos -keypasswd n\u00E3o suportados se -storetype for PKCS12"}, + {".keypass.and.new.can.not.be.specified.if.storetype.is.{0}", + "-keypass e -new n\u00E3o podem ser especificados se -storetype for {0}"}, + {"if.protected.is.specified.then.storepass.keypass.and.new.must.not.be.specified", + "se -protected for especificado, ent\u00E3o -storepass, -keypass e -new n\u00E3o dever\u00E3o ser especificados"}, + {"if.srcprotected.is.specified.then.srcstorepass.and.srckeypass.must.not.be.specified", + "se -srcprotected for especificado, ent\u00E3o -srcstorepass e -srckeypass n\u00E3o dever\u00E3o ser especificados"}, + {"if.keystore.is.not.password.protected.then.storepass.keypass.and.new.must.not.be.specified", + "se a \u00E1rea de armazenamento de chaves n\u00E3o estiver protegida por senha, ent\u00E3o -storepass, -keypass e -new n\u00E3o dever\u00E3o ser especificados"}, + {"if.source.keystore.is.not.password.protected.then.srcstorepass.and.srckeypass.must.not.be.specified", + "se a \u00E1rea de armazenamento de chaves de origem n\u00E3o estiver protegida por senha, ent\u00E3o -srcstorepass e -srckeypass n\u00E3o dever\u00E3o ser especificados"}, + {"Illegal.startdate.value", "valor da data inicial inv\u00E1lido"}, + {"Validity.must.be.greater.than.zero", + "A validade deve ser maior do que zero"}, + {"provName.not.a.provider", "{0} n\u00E3o \u00E9 um fornecedor"}, + {"Usage.error.no.command.provided", "Erro de uso: nenhum comando fornecido"}, + {"Source.keystore.file.exists.but.is.empty.", "O arquivo da \u00E1rea de armazenamento de chaves de origem existe, mas est\u00E1 vazio: "}, + {"Please.specify.srckeystore", "Especifique -srckeystore"}, + {"Must.not.specify.both.v.and.rfc.with.list.command", + "N\u00E3o devem ser especificados -v e -rfc com o comando 'list'"}, + {"Key.password.must.be.at.least.6.characters", + "A senha da chave deve ter, no m\u00EDnimo, 6 caracteres"}, + {"New.password.must.be.at.least.6.characters", + "A nova senha deve ter, no m\u00EDnimo, 6 caracteres"}, + {"Keystore.file.exists.but.is.empty.", + "O arquivo da \u00E1rea de armazenamento de chaves existe, mas est\u00E1 vazio: "}, + {"Keystore.file.does.not.exist.", + "O arquivo da \u00E1rea de armazenamento de chaves n\u00E3o existe. "}, + {"Must.specify.destination.alias", "Deve ser especificado um alias de destino"}, + {"Must.specify.alias", "Deve ser especificado um alias"}, + {"Keystore.password.must.be.at.least.6.characters", + "A senha da \u00E1rea de armazenamento de chaves deve ter, no m\u00EDnimo, 6 caracteres"}, + {"Enter.keystore.password.", "Informe a senha da \u00E1rea de armazenamento de chaves: "}, + {"Enter.source.keystore.password.", "Informe a senha da \u00E1rea de armazenamento de chaves de origem: "}, + {"Enter.destination.keystore.password.", "Informe a senha da \u00E1rea de armazenamento de chaves de destino: "}, + {"Keystore.password.is.too.short.must.be.at.least.6.characters", + "A senha da \u00E1rea de armazenamento de chaves \u00E9 muito curta - ela deve ter, no m\u00EDnimo, 6 caracteres"}, + {"Unknown.Entry.Type", "Tipo de Entrada Desconhecido"}, + {"Too.many.failures.Alias.not.changed", "Excesso de falhas. Alias n\u00E3o alterado"}, + {"Entry.for.alias.alias.successfully.imported.", + "Entrada do alias {0} importada com \u00EAxito."}, + {"Entry.for.alias.alias.not.imported.", "Entrada do alias {0} n\u00E3o importada."}, + {"Problem.importing.entry.for.alias.alias.exception.Entry.for.alias.alias.not.imported.", + "Problema ao importar a entrada do alias {0}: {1}.\nEntrada do alias {0} n\u00E3o importada."}, + {"Import.command.completed.ok.entries.successfully.imported.fail.entries.failed.or.cancelled", + "Comando de importa\u00E7\u00E3o conclu\u00EDdo: {0} entradas importadas com \u00EAxito, {1} entradas falharam ou foram canceladas"}, + {"Warning.Overwriting.existing.alias.alias.in.destination.keystore", + "Advert\u00EAncia: Substitui\u00E7\u00E3o do alias {0} existente na \u00E1rea de armazenamento de chaves de destino"}, + {"Existing.entry.alias.alias.exists.overwrite.no.", + "Entrada j\u00E1 existente no alias {0}, substituir? [n\u00E3o]: "}, + {"Too.many.failures.try.later", "Excesso de falhas - tente mais tarde"}, + {"Certification.request.stored.in.file.filename.", + "Solicita\u00E7\u00E3o de certificado armazenada no arquivo <{0}>"}, + {"Submit.this.to.your.CA", "Submeter \u00E0 CA"}, + {"if.alias.not.specified.destalias.srckeypass.and.destkeypass.must.not.be.specified", + "se o alias n\u00E3o estiver especificado, destalias, srckeypass e destkeypass n\u00E3o dever\u00E3o ser especificados"}, + {"Certificate.stored.in.file.filename.", + "Certificado armazenado no arquivo <{0}>"}, + {"Certificate.reply.was.installed.in.keystore", + "A resposta do certificado foi instalada na \u00E1rea de armazenamento de chaves"}, + {"Certificate.reply.was.not.installed.in.keystore", + "A resposta do certificado n\u00E3o foi instalada na \u00E1rea de armazenamento de chaves"}, + {"Certificate.was.added.to.keystore", + "O certificado foi adicionado \u00E0 \u00E1rea de armazenamento de chaves"}, + {"Certificate.was.not.added.to.keystore", + "O certificado n\u00E3o foi adicionado \u00E0 \u00E1rea de armazenamento de chaves"}, + {".Storing.ksfname.", "[Armazenando {0}]"}, + {"alias.has.no.public.key.certificate.", + "{0} n\u00E3o tem chave p\u00FAblica (certificado)"}, + {"Cannot.derive.signature.algorithm", + "N\u00E3o \u00E9 poss\u00EDvel obter um algoritmo de assinatura"}, + {"Alias.alias.does.not.exist", + "O alias <{0}> n\u00E3o existe"}, + {"Alias.alias.has.no.certificate", + "O alias <{0}> n\u00E3o tem certificado"}, + {"Key.pair.not.generated.alias.alias.already.exists", + "Par de chaves n\u00E3o gerado; o alias <{0}> j\u00E1 existe"}, + {"Generating.keysize.bit.keyAlgName.key.pair.and.self.signed.certificate.sigAlgName.with.a.validity.of.validality.days.for", + "Gerando o par de chaves {1} de {0} bit e o certificado autoassinado ({2}) com uma validade de {3} dias\n\tpara: {4}"}, + {"Enter.key.password.for.alias.", "Informar a senha da chave de <{0}>"}, + {".RETURN.if.same.as.keystore.password.", + "\t(RETURN se for igual \u00E0 senha da \u00E1rea do armazenamento de chaves): "}, + {"Key.password.is.too.short.must.be.at.least.6.characters", + "A senha da chave \u00E9 muito curta - deve ter, no m\u00EDnimo, 6 caracteres"}, + {"Too.many.failures.key.not.added.to.keystore", + "Excesso de falhas - chave n\u00E3o adicionada a \u00E1rea de armazenamento de chaves"}, + {"Destination.alias.dest.already.exists", + "O alias de destino <{0}> j\u00E1 existe"}, + {"Password.is.too.short.must.be.at.least.6.characters", + "A senha \u00E9 muito curta - deve ter, no m\u00EDnimo, 6 caracteres"}, + {"Too.many.failures.Key.entry.not.cloned", + "Excesso de falhas. Entrada da chave n\u00E3o clonada"}, + {"key.password.for.alias.", "senha da chave de <{0}>"}, + {"Keystore.entry.for.id.getName.already.exists", + "A entrada da \u00E1rea do armazenamento de chaves de <{0}> j\u00E1 existe"}, + {"Creating.keystore.entry.for.id.getName.", + "Criando entrada da \u00E1rea do armazenamento de chaves para <{0}> ..."}, + {"No.entries.from.identity.database.added", + "Nenhuma entrada adicionada do banco de dados de identidades"}, + {"Alias.name.alias", "Nome do alias: {0}"}, + {"Creation.date.keyStore.getCreationDate.alias.", + "Data de cria\u00E7\u00E3o: {0,date}"}, + {"alias.keyStore.getCreationDate.alias.", + "{0}, {1,date}, "}, + {"alias.", "{0}, "}, + {"Entry.type.type.", "Tipo de entrada: {0}"}, + {"Certificate.chain.length.", "Comprimento da cadeia de certificados: "}, + {"Certificate.i.1.", "Certificado[{0,number,integer}]:"}, + {"Certificate.fingerprint.SHA1.", "Fingerprint (MD5) do certificado: "}, + {"Keystore.type.", "Tipo de \u00E1rea de armazenamento de chaves: "}, + {"Keystore.provider.", "Fornecedor da \u00E1rea de armazenamento de chaves: "}, + {"Your.keystore.contains.keyStore.size.entry", + "Sua \u00E1rea de armazenamento de chaves cont\u00E9m {0,number,integer} entrada"}, + {"Your.keystore.contains.keyStore.size.entries", + "Sua \u00E1rea de armazenamento de chaves cont\u00E9m {0,number,integer} entradas"}, + {"Failed.to.parse.input", "Falha durante o parse da entrada"}, + {"Empty.input", "Entrada vazia"}, + {"Not.X.509.certificate", "N\u00E3o \u00E9 um certificado X.509"}, + {"alias.has.no.public.key", "{0} n\u00E3o tem chave p\u00FAblica"}, + {"alias.has.no.X.509.certificate", "{0} n\u00E3o tem certificado X.509"}, + {"New.certificate.self.signed.", "Novo certificado (autoassinado):"}, + {"Reply.has.no.certificates", "A resposta n\u00E3o tem certificado"}, + {"Certificate.not.imported.alias.alias.already.exists", + "Certificado n\u00E3o importado, o alias <{0}> j\u00E1 existe"}, + {"Input.not.an.X.509.certificate", "A entrada n\u00E3o \u00E9 um certificado X.509"}, + {"Certificate.already.exists.in.keystore.under.alias.trustalias.", + "O certificado j\u00E1 existe no armazenamento de chaves no alias <{0}>"}, + {"Do.you.still.want.to.add.it.no.", + "Ainda deseja adicion\u00E1-lo? [n\u00E3o]: "}, + {"Certificate.already.exists.in.system.wide.CA.keystore.under.alias.trustalias.", + "O certificado j\u00E1 existe na \u00E1rea de armazenamento de chaves da CA em todo o sistema no alias <{0}>"}, + {"Do.you.still.want.to.add.it.to.your.own.keystore.no.", + "Ainda deseja adicion\u00E1-lo \u00E0 sua \u00E1rea de armazenamento de chaves? [n\u00E3o]: "}, + {"Trust.this.certificate.no.", "Confiar neste certificado? [n\u00E3o]: "}, + {"YES", "Sim"}, + {"New.prompt.", "Nova {0}: "}, + {"Passwords.must.differ", "As senhas devem ser diferentes"}, + {"Re.enter.new.prompt.", "Informe novamente a nova {0}: "}, + {"Re.enter.new.password.", "Informe novamente a nova senha: "}, + {"They.don.t.match.Try.again", "Elas n\u00E3o correspondem. Tente novamente"}, + {"Enter.prompt.alias.name.", "Informe o nome do alias {0}: "}, + {"Enter.new.alias.name.RETURN.to.cancel.import.for.this.entry.", + "Informe o novo nome do alias\t(RETURN para cancelar a importa\u00E7\u00E3o desta entrada): "}, + {"Enter.alias.name.", "Informe o nome do alias: "}, + {".RETURN.if.same.as.for.otherAlias.", + "\t(RETURN se for igual ao de <{0}>)"}, + {".PATTERN.printX509Cert", + "Propriet\u00E1rio: {0}\nEmissor: {1}\nN\u00FAmero de s\u00E9rie: {2}\nV\u00E1lido de: {3} a: {4}\nFingerprints do certificado:\n\t MD5: {5}\n\t SHA1: {6}\n\t SHA256: {7}\n\t Nome do algoritmo de assinatura: {8}\n\t Vers\u00E3o: {9}"}, + {"What.is.your.first.and.last.name.", + "Qual \u00E9 o seu nome e o seu sobrenome?"}, + {"What.is.the.name.of.your.organizational.unit.", + "Qual \u00E9 o nome da sua unidade organizacional?"}, + {"What.is.the.name.of.your.organization.", + "Qual \u00E9 o nome da sua empresa?"}, + {"What.is.the.name.of.your.City.or.Locality.", + "Qual \u00E9 o nome da sua Cidade ou Localidade?"}, + {"What.is.the.name.of.your.State.or.Province.", + "Qual \u00E9 o nome do seu Estado ou Munic\u00EDpio?"}, + {"What.is.the.two.letter.country.code.for.this.unit.", + "Quais s\u00E3o as duas letras do c\u00F3digo do pa\u00EDs desta unidade?"}, + {"Is.name.correct.", "{0} Est\u00E1 correto?"}, + {"no", "n\u00E3o"}, + {"yes", "sim"}, + {"y", "s"}, + {".defaultValue.", " [{0}]: "}, + {"Alias.alias.has.no.key", + "O alias <{0}> n\u00E3o tem chave"}, + {"Alias.alias.references.an.entry.type.that.is.not.a.private.key.entry.The.keyclone.command.only.supports.cloning.of.private.key", + "O alias <{0}> faz refer\u00EAncia a um tipo de entrada que n\u00E3o \u00E9 uma entrada de chave privada. O comando -keyclone oferece suporte somente \u00E0 clonagem de entradas de chave privada"}, + + {".WARNING.WARNING.WARNING.", + "***************** Advert\u00EAncia Advert\u00EAncia Advert\u00EAncia *****************"}, + {"Signer.d.", "Signat\u00E1rio #%d:"}, + {"Timestamp.", "Timestamp:"}, + {"Signature.", "Assinatura:"}, + {"CRLs.", "CRLs:"}, + {"Certificate.owner.", "Propriet\u00E1rio do certificado: "}, + {"Not.a.signed.jar.file", "N\u00E3o \u00E9 um arquivo jar assinado"}, + {"No.certificate.from.the.SSL.server", + "N\u00E3o \u00E9 um certificado do servidor SSL"}, + + {".The.integrity.of.the.information.stored.in.your.keystore.", + "* A integridade das informa\u00E7\u00F5es armazenadas na sua \u00E1rea de armazenamento de chaves *\n* N\u00C3O foi verificada! Para que seja poss\u00EDvel verificar sua integridade, *\n* voc\u00EA deve fornecer a senha da \u00E1rea de armazenamento de chaves. *"}, + {".The.integrity.of.the.information.stored.in.the.srckeystore.", + "* A integridade das informa\u00E7\u00F5es armazenadas no srckeystore *\n* N\u00C3O foi verificada! Para que seja poss\u00EDvel verificar sua integridade, *\n* voc\u00EA deve fornecer a senha do srckeystore. *"}, + + {"Certificate.reply.does.not.contain.public.key.for.alias.", + "A resposta do certificado n\u00E3o cont\u00E9m a chave p\u00FAblica de <{0}>"}, + {"Incomplete.certificate.chain.in.reply", + "Cadeia de certificados incompleta na resposta"}, + {"Certificate.chain.in.reply.does.not.verify.", + "A cadeia de certificados da resposta n\u00E3o verifica: "}, + {"Top.level.certificate.in.reply.", + "Certificado de n\u00EDvel superior na resposta:\n"}, + {".is.not.trusted.", "... n\u00E3o \u00E9 confi\u00E1vel. "}, + {"Install.reply.anyway.no.", "Instalar resposta assim mesmo? [n\u00E3o]: "}, + {"NO", "N\u00E3o"}, + {"Public.keys.in.reply.and.keystore.don.t.match", + "As chaves p\u00FAblicas da resposta e da \u00E1rea de armazenamento de chaves n\u00E3o correspondem"}, + {"Certificate.reply.and.certificate.in.keystore.are.identical", + "O certificado da resposta e o certificado da \u00E1rea de armazenamento de chaves s\u00E3o id\u00EAnticos"}, + {"Failed.to.establish.chain.from.reply", + "Falha ao estabelecer a cadeia a partir da resposta"}, + {"n", "n"}, + {"Wrong.answer.try.again", "Resposta errada; tente novamente"}, + {"Secret.key.not.generated.alias.alias.already.exists", + "Chave secreta n\u00E3o gerada; o alias <{0}> j\u00E1 existe"}, + {"Please.provide.keysize.for.secret.key.generation", + "Forne\u00E7a o -keysize para a gera\u00E7\u00E3o da chave secreta"}, + + {"Extensions.", "Extens\u00F5es: "}, + {".Empty.value.", "(Valor vazio)"}, + {"Extension.Request.", "Solicita\u00E7\u00E3o de Extens\u00E3o:"}, + {"PKCS.10.Certificate.Request.Version.1.0.Subject.s.Public.Key.s.format.s.key.", + "Solicita\u00E7\u00E3o do Certificado PKCS #10 (Vers\u00E3o 1.0)\nAssunto: %s\nChave P\u00FAblica: %s formato %s chave\n"}, + {"Unknown.keyUsage.type.", "Tipo de keyUsage desconhecido: "}, + {"Unknown.extendedkeyUsage.type.", "Tipo de extendedkeyUsage desconhecido: "}, + {"Unknown.AccessDescription.type.", "Tipo de AccessDescription desconhecido: "}, + {"Unrecognized.GeneralName.type.", "Tipo de GeneralName n\u00E3o reconhecido: "}, + {"This.extension.cannot.be.marked.as.critical.", + "Esta extens\u00E3o n\u00E3o pode ser marcada como cr\u00EDtica. "}, + {"Odd.number.of.hex.digits.found.", "Encontrado n\u00FAmero \u00EDmpar de seis d\u00EDgitos: "}, + {"Unknown.extension.type.", "Tipo de extens\u00E3o desconhecido: "}, + {"command.{0}.is.ambiguous.", "o comando {0} \u00E9 amb\u00EDguo:"} + }; + + + /** + * Returns the contents of this ResourceBundle. + * + *

+ * + * @return the contents of this ResourceBundle. + */ + @Override + public Object[][] getContents() { + return contents; + } +} diff --git a/jdk/src/share/classes/sun/security/tools/keytool/Resources_sv.java b/jdk/src/share/classes/sun/security/tools/keytool/Resources_sv.java new file mode 100644 index 00000000000..a4727e64c88 --- /dev/null +++ b/jdk/src/share/classes/sun/security/tools/keytool/Resources_sv.java @@ -0,0 +1,431 @@ +/* + * Copyright (c) 2000, 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. 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.security.tools.keytool; + +/** + *

This class represents the ResourceBundle + * for the keytool. + * + */ +public class Resources_sv extends java.util.ListResourceBundle { + + private static final Object[][] contents = { + {"NEWLINE", "\n"}, + {"STAR", + "*******************************************"}, + {"STARNN", + "*******************************************\n\n"}, + + // keytool: Help part +// "Option" should be translated. + {".OPTION.", " [Alternativ]..."}, + {"Options.", "Alternativ:"}, + {"Use.keytool.help.for.all.available.commands", + "L\u00E4s \"Hj\u00E4lp - Nyckelverktyg\" f\u00F6r alla tillg\u00E4ngliga kommandon"}, + {"Key.and.Certificate.Management.Tool", + "Hanteringsverktyg f\u00F6r nycklar och certifikat"}, + {"Commands.", "Kommandon:"}, + {"Use.keytool.command.name.help.for.usage.of.command.name", + "L\u00E4s \"Hj\u00E4lp - Nyckelverktyg - command_name\" om anv\u00E4ndning av command_name"}, + // keytool: help: commands + {"Generates.a.certificate.request", + "Genererar certifikatbeg\u00E4ran"}, //-certreq + {"Changes.an.entry.s.alias", + "\u00C4ndrar postalias"}, //-changealias + {"Deletes.an.entry", + "Tar bort post"}, //-delete + {"Exports.certificate", + "Exporterar certifikat"}, //-exportcert + {"Generates.a.key.pair", + "Genererar nyckelpar"}, //-genkeypair +// translation of "secret" key should be different to "private" key. + {"Generates.a.secret.key", + "Genererar hemlig nyckel"}, //-genseckey + {"Generates.certificate.from.a.certificate.request", + "Genererar certifikat fr\u00E5n certifikatbeg\u00E4ran"}, //-gencert + {"Generates.CRL", "Genererar CRL"}, //-gencrl + {"Imports.entries.from.a.JDK.1.1.x.style.identity.database", + "Importerar poster fr\u00E5n identitetsdatabas i JDK 1.1.x-format"}, //-identitydb + {"Imports.a.certificate.or.a.certificate.chain", + "Importerar ett certifikat eller en certifikatkedja"}, //-importcert + {"Imports.one.or.all.entries.from.another.keystore", + "Importerar en eller alla poster fr\u00E5n annat nyckellager"}, //-importkeystore + {"Clones.a.key.entry", + "Klonar en nyckelpost"}, //-keyclone + {"Changes.the.key.password.of.an.entry", + "\u00C4ndrar nyckell\u00F6senordet f\u00F6r en post"}, //-keypasswd + {"Lists.entries.in.a.keystore", + "Visar lista \u00F6ver poster i nyckellager"}, //-list + {"Prints.the.content.of.a.certificate", + "Skriver ut inneh\u00E5llet i ett certifikat"}, //-printcert + {"Prints.the.content.of.a.certificate.request", + "Skriver ut inneh\u00E5llet i en certifikatbeg\u00E4ran"}, //-printcertreq + {"Prints.the.content.of.a.CRL.file", + "Skriver ut inneh\u00E5llet i en CRL-fil"}, //-printcrl + {"Generates.a.self.signed.certificate", + "Genererar ett sj\u00E4lvsignerat certifikat"}, //-selfcert + {"Changes.the.store.password.of.a.keystore", + "\u00C4ndrar lagerl\u00F6senordet f\u00F6r ett nyckellager"}, //-storepasswd + // keytool: help: options + {"alias.name.of.the.entry.to.process", + "aliasnamn f\u00F6r post som ska bearbetas"}, //-alias + {"destination.alias", + "destinationsalias"}, //-destalias + {"destination.key.password", + "l\u00F6senord f\u00F6r destinationsnyckel"}, //-destkeypass + {"destination.keystore.name", + "namn p\u00E5 destinationsnyckellager"}, //-destkeystore + {"destination.keystore.password.protected", + "skyddat l\u00F6senord f\u00F6r destinationsnyckellager"}, //-destprotected + {"destination.keystore.provider.name", + "leverant\u00F6rsnamn f\u00F6r destinationsnyckellager"}, //-destprovidername + {"destination.keystore.password", + "l\u00F6senord f\u00F6r destinationsnyckellager"}, //-deststorepass + {"destination.keystore.type", + "typ av destinationsnyckellager"}, //-deststoretype + {"distinguished.name", + "unikt namn"}, //-dname + {"X.509.extension", + "X.509-till\u00E4gg"}, //-ext + {"output.file.name", + "namn p\u00E5 utdatafil"}, //-file and -outfile + {"input.file.name", + "namn p\u00E5 indatafil"}, //-file and -infile + {"key.algorithm.name", + "namn p\u00E5 nyckelalgoritm"}, //-keyalg + {"key.password", + "nyckell\u00F6senord"}, //-keypass + {"key.bit.size", + "nyckelbitstorlek"}, //-keysize + {"keystore.name", + "namn p\u00E5 nyckellager"}, //-keystore + {"new.password", + "nytt l\u00F6senord"}, //-new + {"do.not.prompt", + "fr\u00E5ga inte"}, //-noprompt + {"password.through.protected.mechanism", + "l\u00F6senord med skyddad mekanism"}, //-protected + {"provider.argument", + "leverant\u00F6rsargument"}, //-providerarg + {"provider.class.name", + "namn p\u00E5 leverant\u00F6rsklass"}, //-providerclass + {"provider.name", + "leverant\u00F6rsnamn"}, //-providername + {"provider.classpath", + "leverant\u00F6rsklass\u00F6kv\u00E4g"}, //-providerpath + {"output.in.RFC.style", + "utdata i RFC-format"}, //-rfc + {"signature.algorithm.name", + "namn p\u00E5 signaturalgoritm"}, //-sigalg + {"source.alias", + "k\u00E4llalias"}, //-srcalias + {"source.key.password", + "l\u00F6senord f\u00F6r k\u00E4llnyckel"}, //-srckeypass + {"source.keystore.name", + "namn p\u00E5 k\u00E4llnyckellager"}, //-srckeystore + {"source.keystore.password.protected", + "skyddat l\u00F6senord f\u00F6r k\u00E4llnyckellager"}, //-srcprotected + {"source.keystore.provider.name", + "leverant\u00F6rsnamn f\u00F6r k\u00E4llnyckellager"}, //-srcprovidername + {"source.keystore.password", + "l\u00F6senord f\u00F6r k\u00E4llnyckellager"}, //-srcstorepass + {"source.keystore.type", + "typ av k\u00E4llnyckellager"}, //-srcstoretype + {"SSL.server.host.and.port", + "SSL-serverv\u00E4rd och -port"}, //-sslserver + {"signed.jar.file", + "signerad jar-fil"}, //=jarfile + {"certificate.validity.start.date.time", + "startdatum/-tid f\u00F6r certifikatets giltighet"}, //-startdate + {"keystore.password", + "l\u00F6senord f\u00F6r nyckellager"}, //-storepass + {"keystore.type", + "nyckellagertyp"}, //-storetype + {"trust.certificates.from.cacerts", + "tillf\u00F6rlitliga certifikat fr\u00E5n cacerts"}, //-trustcacerts + {"verbose.output", + "utf\u00F6rliga utdata"}, //-v + {"validity.number.of.days", + "antal dagar f\u00F6r giltighet"}, //-validity + {"Serial.ID.of.cert.to.revoke", + "Seriellt ID f\u00F6r certifikat som ska \u00E5terkallas"}, //-id + // keytool: Running part + {"keytool.error.", "nyckelverktygsfel: "}, + {"Illegal.option.", "Otill\u00E5tet alternativ: "}, + {"Illegal.value.", "Otill\u00E5tet v\u00E4rde: "}, + {"Unknown.password.type.", "Ok\u00E4nd l\u00F6senordstyp: "}, + {"Cannot.find.environment.variable.", + "Kan inte hitta milj\u00F6variabel: "}, + {"Cannot.find.file.", "Hittar inte fil: "}, + {"Command.option.flag.needs.an.argument.", "Kommandoalternativet {0} beh\u00F6ver ett argument."}, + {"Warning.Different.store.and.key.passwords.not.supported.for.PKCS12.KeyStores.Ignoring.user.specified.command.value.", + "Varning! PKCS12-nyckellager har inte st\u00F6d f\u00F6r olika l\u00F6senord f\u00F6r lagret och nyckeln. Det anv\u00E4ndarspecificerade {0}-v\u00E4rdet ignoreras."}, + {".keystore.must.be.NONE.if.storetype.is.{0}", + "-keystore m\u00E5ste vara NONE om -storetype \u00E4r {0}"}, + {"Too.many.retries.program.terminated", + "F\u00F6r m\u00E5nga f\u00F6rs\u00F6k. Programmet avslutas"}, + {".storepasswd.and.keypasswd.commands.not.supported.if.storetype.is.{0}", + "-storepasswd- och -keypasswd-kommandon st\u00F6ds inte om -storetype \u00E4r {0}"}, + {".keypasswd.commands.not.supported.if.storetype.is.PKCS12", + "-keypasswd-kommandon st\u00F6ds inte om -storetype \u00E4r PKCS12"}, + {".keypass.and.new.can.not.be.specified.if.storetype.is.{0}", + "-keypass och -new kan inte anges om -storetype \u00E4r {0}"}, + {"if.protected.is.specified.then.storepass.keypass.and.new.must.not.be.specified", + "om -protected har angetts f\u00E5r inte -storepass, -keypass och -new anges"}, + {"if.srcprotected.is.specified.then.srcstorepass.and.srckeypass.must.not.be.specified", + "om -srcprotected anges f\u00E5r -srcstorepass och -srckeypass inte anges"}, + {"if.keystore.is.not.password.protected.then.storepass.keypass.and.new.must.not.be.specified", + "om nyckellagret inte \u00E4r l\u00F6senordsskyddat f\u00E5r -storepass, -keypass och -new inte anges"}, + {"if.source.keystore.is.not.password.protected.then.srcstorepass.and.srckeypass.must.not.be.specified", + "om k\u00E4llnyckellagret inte \u00E4r l\u00F6senordsskyddat f\u00E5r -srcstorepass och -srckeypass inte anges"}, + {"Illegal.startdate.value", "Otill\u00E5tet v\u00E4rde f\u00F6r startdatum"}, + {"Validity.must.be.greater.than.zero", + "Giltigheten m\u00E5ste vara st\u00F6rre \u00E4n noll"}, + {"provName.not.a.provider", "{0} \u00E4r inte en leverant\u00F6r"}, + {"Usage.error.no.command.provided", "Syntaxfel: inget kommando angivet"}, + {"Source.keystore.file.exists.but.is.empty.", "Nyckellagrets k\u00E4llfil finns, men \u00E4r tom: "}, + {"Please.specify.srckeystore", "Ange -srckeystore"}, + {"Must.not.specify.both.v.and.rfc.with.list.command", + "Kan inte specificera b\u00E5de -v och -rfc med 'list'-kommandot"}, + {"Key.password.must.be.at.least.6.characters", + "Nyckell\u00F6senordet m\u00E5ste inneh\u00E5lla minst 6 tecken"}, + {"New.password.must.be.at.least.6.characters", + "Det nya l\u00F6senordet m\u00E5ste inneh\u00E5lla minst 6 tecken"}, + {"Keystore.file.exists.but.is.empty.", + "Nyckellagerfilen finns, men \u00E4r tom: "}, + {"Keystore.file.does.not.exist.", + "Nyckellagerfilen finns inte: "}, + {"Must.specify.destination.alias", "Du m\u00E5ste ange destinationsalias"}, + {"Must.specify.alias", "Du m\u00E5ste ange alias"}, + {"Keystore.password.must.be.at.least.6.characters", + "Nyckellagerl\u00F6senordet m\u00E5ste inneh\u00E5lla minst 6 tecken"}, + {"Enter.keystore.password.", "Ange nyckellagerl\u00F6senord: "}, + {"Enter.source.keystore.password.", "Ange l\u00F6senord f\u00F6r k\u00E4llnyckellagret: "}, + {"Enter.destination.keystore.password.", "Ange nyckellagerl\u00F6senord f\u00F6r destination: "}, + {"Keystore.password.is.too.short.must.be.at.least.6.characters", + "Nyckellagerl\u00F6senordet \u00E4r f\u00F6r kort - det m\u00E5ste inneh\u00E5lla minst 6 tecken"}, + {"Unknown.Entry.Type", "Ok\u00E4nd posttyp"}, + {"Too.many.failures.Alias.not.changed", "F\u00F6r m\u00E5nga fel. Alias har inte \u00E4ndrats"}, + {"Entry.for.alias.alias.successfully.imported.", + "Posten f\u00F6r alias {0} har importerats."}, + {"Entry.for.alias.alias.not.imported.", "Posten f\u00F6r alias {0} har inte importerats."}, + {"Problem.importing.entry.for.alias.alias.exception.Entry.for.alias.alias.not.imported.", + "Ett problem uppstod vid importen av posten f\u00F6r alias {0}: {1}.\nPosten {0} har inte importerats."}, + {"Import.command.completed.ok.entries.successfully.imported.fail.entries.failed.or.cancelled", + "Kommandoimporten slutf\u00F6rd: {0} poster har importerats, {1} poster var felaktiga eller annullerades"}, + {"Warning.Overwriting.existing.alias.alias.in.destination.keystore", + "Varning! Det befintliga aliaset {0} i destinationsnyckellagret skrivs \u00F6ver"}, + {"Existing.entry.alias.alias.exists.overwrite.no.", + "Aliaset {0} finns redan. Vill du skriva \u00F6ver det? [nej]: "}, + {"Too.many.failures.try.later", "F\u00F6r m\u00E5nga fel - f\u00F6rs\u00F6k igen senare"}, + {"Certification.request.stored.in.file.filename.", + "Certifikatbeg\u00E4ran har lagrats i filen <{0}>"}, + {"Submit.this.to.your.CA", "Skicka detta till certifikatutf\u00E4rdaren"}, + {"if.alias.not.specified.destalias.srckeypass.and.destkeypass.must.not.be.specified", + "om n\u00E5got alias inte anges f\u00E5r destalias, srckeypass och destkeypass inte anges"}, + {"Certificate.stored.in.file.filename.", + "Certifikatet har lagrats i filen <{0}>"}, + {"Certificate.reply.was.installed.in.keystore", + "Certifikatsvaret har installerats i nyckellagret"}, + {"Certificate.reply.was.not.installed.in.keystore", + "Certifikatsvaret har inte installerats i nyckellagret"}, + {"Certificate.was.added.to.keystore", + "Certifikatet har lagts till i nyckellagret"}, + {"Certificate.was.not.added.to.keystore", + "Certifikatet har inte lagts till i nyckellagret"}, + {".Storing.ksfname.", "[Lagrar {0}]"}, + {"alias.has.no.public.key.certificate.", + "{0} saknar offentlig nyckel (certifikat)"}, + {"Cannot.derive.signature.algorithm", + "Kan inte h\u00E4rleda signaturalgoritm"}, + {"Alias.alias.does.not.exist", + "Aliaset <{0}> finns inte"}, + {"Alias.alias.has.no.certificate", + "Aliaset <{0}> saknar certifikat"}, + {"Key.pair.not.generated.alias.alias.already.exists", + "Nyckelparet genererades inte. Aliaset <{0}> finns redan"}, + {"Generating.keysize.bit.keyAlgName.key.pair.and.self.signed.certificate.sigAlgName.with.a.validity.of.validality.days.for", + "Genererar {0} bitars {1}-nyckelpar och sj\u00E4lvsignerat certifikat ({2}) med en giltighet p\u00E5 {3} dagar\n\tf\u00F6r: {4}"}, + {"Enter.key.password.for.alias.", "Ange nyckell\u00F6senord f\u00F6r <{0}>"}, + {".RETURN.if.same.as.keystore.password.", + "\t(RETURN om det \u00E4r identiskt med nyckellagerl\u00F6senordet): "}, + {"Key.password.is.too.short.must.be.at.least.6.characters", + "Nyckell\u00F6senordet \u00E4r f\u00F6r kort - det m\u00E5ste inneh\u00E5lla minst 6 tecken"}, + {"Too.many.failures.key.not.added.to.keystore", + "F\u00F6r m\u00E5nga fel - nyckeln lades inte till i nyckellagret"}, + {"Destination.alias.dest.already.exists", + "Destinationsaliaset <{0}> finns redan"}, + {"Password.is.too.short.must.be.at.least.6.characters", + "L\u00F6senordet \u00E4r f\u00F6r kort - det m\u00E5ste inneh\u00E5lla minst 6 tecken"}, + {"Too.many.failures.Key.entry.not.cloned", + "F\u00F6r m\u00E5nga fel. Nyckelposten har inte klonats"}, + {"key.password.for.alias.", "nyckell\u00F6senord f\u00F6r <{0}>"}, + {"Keystore.entry.for.id.getName.already.exists", + "Nyckellagerpost f\u00F6r <{0}> finns redan"}, + {"Creating.keystore.entry.for.id.getName.", + "Skapar nyckellagerpost f\u00F6r <{0}> ..."}, + {"No.entries.from.identity.database.added", + "Inga poster fr\u00E5n identitetsdatabasen har lagts till"}, + {"Alias.name.alias", "Aliasnamn: {0}"}, + {"Creation.date.keyStore.getCreationDate.alias.", + "Skapat den: {0,date}"}, + {"alias.keyStore.getCreationDate.alias.", + "{0}, {1,date}, "}, + {"alias.", "{0}, "}, + {"Entry.type.type.", "Posttyp: {0}"}, + {"Certificate.chain.length.", "L\u00E4ngd p\u00E5 certifikatskedja: "}, + {"Certificate.i.1.", "Certifikat[{0,number,integer}]:"}, + {"Certificate.fingerprint.SHA1.", "Certifikatets fingeravtryck (SHA1): "}, + {"Keystore.type.", "Nyckellagertyp: "}, + {"Keystore.provider.", "Nyckellagerleverant\u00F6r: "}, + {"Your.keystore.contains.keyStore.size.entry", + "Nyckellagret inneh\u00E5ller {0,number,integer} post"}, + {"Your.keystore.contains.keyStore.size.entries", + "Nyckellagret inneh\u00E5ller {0,number,integer} poster"}, + {"Failed.to.parse.input", "Kunde inte tolka indata"}, + {"Empty.input", "Inga indata"}, + {"Not.X.509.certificate", "Inte ett X.509-certifikat"}, + {"alias.has.no.public.key", "{0} saknar offentlig nyckel"}, + {"alias.has.no.X.509.certificate", "{0} saknar X.509-certifikat"}, + {"New.certificate.self.signed.", "Nytt certifikat (sj\u00E4lvsignerat):"}, + {"Reply.has.no.certificates", "Svaret saknar certifikat"}, + {"Certificate.not.imported.alias.alias.already.exists", + "Certifikatet importerades inte. Aliaset <{0}> finns redan"}, + {"Input.not.an.X.509.certificate", "Indata \u00E4r inte ett X.509-certifikat"}, + {"Certificate.already.exists.in.keystore.under.alias.trustalias.", + "Certifikatet finns redan i nyckellagerfilen under aliaset <{0}>"}, + {"Do.you.still.want.to.add.it.no.", + "Vill du fortfarande l\u00E4gga till det? [nej]: "}, + {"Certificate.already.exists.in.system.wide.CA.keystore.under.alias.trustalias.", + "Certifikatet finns redan i den systemomsp\u00E4nnande CA-nyckellagerfilen under aliaset <{0}>"}, + {"Do.you.still.want.to.add.it.to.your.own.keystore.no.", + "Vill du fortfarande l\u00E4gga till det i ditt eget nyckellagret? [nej]: "}, + {"Trust.this.certificate.no.", "Litar du p\u00E5 det h\u00E4r certifikatet? [nej]: "}, + {"YES", "Ja"}, + {"New.prompt.", "Nytt {0}: "}, + {"Passwords.must.differ", "L\u00F6senorden m\u00E5ste vara olika"}, + {"Re.enter.new.prompt.", "Ange nytt {0} igen: "}, + {"Re.enter.new.password.", "Ange det nya l\u00F6senordet igen: "}, + {"They.don.t.match.Try.again", "De matchar inte. F\u00F6rs\u00F6k igen"}, + {"Enter.prompt.alias.name.", "Ange aliasnamn f\u00F6r {0}: "}, + {"Enter.new.alias.name.RETURN.to.cancel.import.for.this.entry.", + "Ange ett nytt aliasnamn\t(skriv RETURN f\u00F6r att avbryta importen av denna post): "}, + {"Enter.alias.name.", "Ange aliasnamn: "}, + {".RETURN.if.same.as.for.otherAlias.", + "\t(RETURN om det \u00E4r det samma som f\u00F6r <{0}>)"}, + {".PATTERN.printX509Cert", + "\u00C4gare: {0}\nUtf\u00E4rdare: {1}\nSerienummer: {2}\nGiltigt fr\u00E5n den: {3} till: {4}\nCertifikatets fingeravtryck:\n\t MD5: {5}\n\t SHA1: {6}\n\t SHA256: {7}\n\t Namn p\u00E5 signaturalgoritm: {8}\n\t Version: {9}"}, + {"What.is.your.first.and.last.name.", + "Vad heter du i f\u00F6r- och efternamn?"}, + {"What.is.the.name.of.your.organizational.unit.", + "Vad heter din avdelning inom organisationen?"}, + {"What.is.the.name.of.your.organization.", + "Vad heter din organisation?"}, + {"What.is.the.name.of.your.City.or.Locality.", + "Vad heter din ort eller plats?"}, + {"What.is.the.name.of.your.State.or.Province.", + "Vad heter ditt land eller din provins?"}, + {"What.is.the.two.letter.country.code.for.this.unit.", + "Vilken \u00E4r den tv\u00E5st\u00E4lliga landskoden?"}, + {"Is.name.correct.", "\u00C4r {0} korrekt?"}, + {"no", "nej"}, + {"yes", "ja"}, + {"y", "j"}, + {".defaultValue.", " [{0}]: "}, + {"Alias.alias.has.no.key", + "Aliaset <{0}> saknar nyckel"}, + {"Alias.alias.references.an.entry.type.that.is.not.a.private.key.entry.The.keyclone.command.only.supports.cloning.of.private.key", + "Aliaset <{0}> refererar till en posttyp som inte \u00E4r n\u00E5gon privat nyckelpost. Kommandot -keyclone har endast st\u00F6d f\u00F6r kloning av privata nyckelposter"}, + + {".WARNING.WARNING.WARNING.", + "***************** Varning Varning Varning *****************"}, + {"Signer.d.", "Signerare #%d:"}, + {"Timestamp.", "Tidsst\u00E4mpel:"}, + {"Signature.", "Underskrift:"}, + {"CRLs.", "CRL:er:"}, + {"Certificate.owner.", "Certifikat\u00E4gare: "}, + {"Not.a.signed.jar.file", "Ingen signerad jar-fil"}, + {"No.certificate.from.the.SSL.server", + "Inget certifikat fr\u00E5n SSL-servern"}, + + {".The.integrity.of.the.information.stored.in.your.keystore.", + "* Integriteten f\u00F6r den information som lagras i nyckellagerfilen *\n* har INTE verifierats! Om du vill verifiera dess integritet *\n* m\u00E5ste du ange l\u00F6senordet f\u00F6r nyckellagret. *"}, + {".The.integrity.of.the.information.stored.in.the.srckeystore.", + "* Integriteten f\u00F6r den information som lagras i srckeystore*\n* har INTE verifierats! Om du vill verifiera dess integritet *\n* m\u00E5ste du ange l\u00F6senordet f\u00F6r srckeystore. *"}, + + {"Certificate.reply.does.not.contain.public.key.for.alias.", + "Certifikatsvaret inneh\u00E5ller inte n\u00E5gon offentlig nyckel f\u00F6r <{0}>"}, + {"Incomplete.certificate.chain.in.reply", + "Ofullst\u00E4ndig certifikatskedja i svaret"}, + {"Certificate.chain.in.reply.does.not.verify.", + "Certifikatskedjan i svaret g\u00E5r inte att verifiera: "}, + {"Top.level.certificate.in.reply.", + "Toppniv\u00E5certifikatet i svaret:\n"}, + {".is.not.trusted.", "... \u00E4r inte betrott. "}, + {"Install.reply.anyway.no.", "Vill du installera svaret \u00E4nd\u00E5? [nej]: "}, + {"NO", "Nej"}, + {"Public.keys.in.reply.and.keystore.don.t.match", + "De offentliga nycklarna i svaret och nyckellagret matchar inte varandra"}, + {"Certificate.reply.and.certificate.in.keystore.are.identical", + "Certifikatsvaret och certifikatet i nyckellagret \u00E4r identiska"}, + {"Failed.to.establish.chain.from.reply", + "Kunde inte uppr\u00E4tta kedja fr\u00E5n svaret"}, + {"n", "n"}, + {"Wrong.answer.try.again", "Fel svar. F\u00F6rs\u00F6k p\u00E5 nytt."}, + {"Secret.key.not.generated.alias.alias.already.exists", + "Den hemliga nyckeln har inte genererats eftersom aliaset <{0}> redan finns"}, + {"Please.provide.keysize.for.secret.key.generation", + "Ange -keysize f\u00F6r att skapa hemlig nyckel"}, + + {"Extensions.", "Till\u00E4gg: "}, + {".Empty.value.", "(Tomt v\u00E4rde)"}, + {"Extension.Request.", "Till\u00E4ggsbeg\u00E4ran:"}, + {"PKCS.10.Certificate.Request.Version.1.0.Subject.s.Public.Key.s.format.s.key.", + "PKCS #10 certifikatbeg\u00E4ran (version 1.0)\n\u00C4mne: %s\nAllm\u00E4n nyckel: %s-format %s-nyckel\n"}, + {"Unknown.keyUsage.type.", "Ok\u00E4nd keyUsage-typ: "}, + {"Unknown.extendedkeyUsage.type.", "Ok\u00E4nd extendedkeyUsage-typ: "}, + {"Unknown.AccessDescription.type.", "Ok\u00E4nd AccessDescription-typ: "}, + {"Unrecognized.GeneralName.type.", "Ok\u00E4nd GeneralName-typ: "}, + {"This.extension.cannot.be.marked.as.critical.", + "Detta till\u00E4gg kan inte markeras som kritiskt. "}, + {"Odd.number.of.hex.digits.found.", "Udda antal hex-siffror p\u00E5tr\u00E4ffades: "}, + {"Unknown.extension.type.", "Ok\u00E4nd till\u00E4ggstyp: "}, + {"command.{0}.is.ambiguous.", "kommandot {0} \u00E4r tvetydigt:"} + }; + + + /** + * Returns the contents of this ResourceBundle. + * + *

+ * + * @return the contents of this ResourceBundle. + */ + @Override + public Object[][] getContents() { + return contents; + } +} diff --git a/jdk/src/share/classes/sun/security/tools/keytool/Resources_zh_CN.java b/jdk/src/share/classes/sun/security/tools/keytool/Resources_zh_CN.java new file mode 100644 index 00000000000..6836bd769f9 --- /dev/null +++ b/jdk/src/share/classes/sun/security/tools/keytool/Resources_zh_CN.java @@ -0,0 +1,431 @@ +/* + * Copyright (c) 2000, 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. 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.security.tools.keytool; + +/** + *

This class represents the ResourceBundle + * for the keytool. + * + */ +public class Resources_zh_CN extends java.util.ListResourceBundle { + + private static final Object[][] contents = { + {"NEWLINE", "\n"}, + {"STAR", + "*******************************************"}, + {"STARNN", + "*******************************************\n\n"}, + + // keytool: Help part +// "Option" should be translated. + {".OPTION.", " [\u9009\u9879]..."}, + {"Options.", "\u9009\u9879:"}, + {"Use.keytool.help.for.all.available.commands", + "\u4F7F\u7528 \"keytool -help\" \u83B7\u53D6\u6240\u6709\u53EF\u7528\u547D\u4EE4"}, + {"Key.and.Certificate.Management.Tool", + "\u5BC6\u94A5\u548C\u8BC1\u4E66\u7BA1\u7406\u5DE5\u5177"}, + {"Commands.", "\u547D\u4EE4:"}, + {"Use.keytool.command.name.help.for.usage.of.command.name", + "\u4F7F\u7528 \"keytool -command_name -help\" \u83B7\u53D6 command_name \u7684\u7528\u6CD5"}, + // keytool: help: commands + {"Generates.a.certificate.request", + "\u751F\u6210\u8BC1\u4E66\u8BF7\u6C42"}, //-certreq + {"Changes.an.entry.s.alias", + "\u66F4\u6539\u6761\u76EE\u7684\u522B\u540D"}, //-changealias + {"Deletes.an.entry", + "\u5220\u9664\u6761\u76EE"}, //-delete + {"Exports.certificate", + "\u5BFC\u51FA\u8BC1\u4E66"}, //-exportcert + {"Generates.a.key.pair", + "\u751F\u6210\u5BC6\u94A5\u5BF9"}, //-genkeypair +// translation of "secret" key should be different to "private" key. + {"Generates.a.secret.key", + "\u751F\u6210\u5BF9\u79F0\u5BC6\u94A5"}, //-genseckey + {"Generates.certificate.from.a.certificate.request", + "\u6839\u636E\u8BC1\u4E66\u8BF7\u6C42\u751F\u6210\u8BC1\u4E66"}, //-gencert + {"Generates.CRL", "\u751F\u6210 CRL"}, //-gencrl + {"Imports.entries.from.a.JDK.1.1.x.style.identity.database", + "\u4ECE JDK 1.1.x \u6837\u5F0F\u7684\u8EAB\u4EFD\u6570\u636E\u5E93\u5BFC\u5165\u6761\u76EE"}, //-identitydb + {"Imports.a.certificate.or.a.certificate.chain", + "\u5BFC\u5165\u8BC1\u4E66\u6216\u8BC1\u4E66\u94FE"}, //-importcert + {"Imports.one.or.all.entries.from.another.keystore", + "\u4ECE\u5176\u4ED6\u5BC6\u94A5\u5E93\u5BFC\u5165\u4E00\u4E2A\u6216\u6240\u6709\u6761\u76EE"}, //-importkeystore + {"Clones.a.key.entry", + "\u514B\u9686\u5BC6\u94A5\u6761\u76EE"}, //-keyclone + {"Changes.the.key.password.of.an.entry", + "\u66F4\u6539\u6761\u76EE\u7684\u5BC6\u94A5\u53E3\u4EE4"}, //-keypasswd + {"Lists.entries.in.a.keystore", + "\u5217\u51FA\u5BC6\u94A5\u5E93\u4E2D\u7684\u6761\u76EE"}, //-list + {"Prints.the.content.of.a.certificate", + "\u6253\u5370\u8BC1\u4E66\u5185\u5BB9"}, //-printcert + {"Prints.the.content.of.a.certificate.request", + "\u6253\u5370\u8BC1\u4E66\u8BF7\u6C42\u7684\u5185\u5BB9"}, //-printcertreq + {"Prints.the.content.of.a.CRL.file", + "\u6253\u5370 CRL \u6587\u4EF6\u7684\u5185\u5BB9"}, //-printcrl + {"Generates.a.self.signed.certificate", + "\u751F\u6210\u81EA\u7B7E\u540D\u8BC1\u4E66"}, //-selfcert + {"Changes.the.store.password.of.a.keystore", + "\u66F4\u6539\u5BC6\u94A5\u5E93\u7684\u5B58\u50A8\u53E3\u4EE4"}, //-storepasswd + // keytool: help: options + {"alias.name.of.the.entry.to.process", + "\u8981\u5904\u7406\u7684\u6761\u76EE\u7684\u522B\u540D"}, //-alias + {"destination.alias", + "\u76EE\u6807\u522B\u540D"}, //-destalias + {"destination.key.password", + "\u76EE\u6807\u5BC6\u94A5\u53E3\u4EE4"}, //-destkeypass + {"destination.keystore.name", + "\u76EE\u6807\u5BC6\u94A5\u5E93\u540D\u79F0"}, //-destkeystore + {"destination.keystore.password.protected", + "\u53D7\u4FDD\u62A4\u7684\u76EE\u6807\u5BC6\u94A5\u5E93\u53E3\u4EE4"}, //-destprotected + {"destination.keystore.provider.name", + "\u76EE\u6807\u5BC6\u94A5\u5E93\u63D0\u4F9B\u65B9\u540D\u79F0"}, //-destprovidername + {"destination.keystore.password", + "\u76EE\u6807\u5BC6\u94A5\u5E93\u53E3\u4EE4"}, //-deststorepass + {"destination.keystore.type", + "\u76EE\u6807\u5BC6\u94A5\u5E93\u7C7B\u578B"}, //-deststoretype + {"distinguished.name", + "\u552F\u4E00\u5224\u522B\u540D"}, //-dname + {"X.509.extension", + "X.509 \u6269\u5C55"}, //-ext + {"output.file.name", + "\u8F93\u51FA\u6587\u4EF6\u540D"}, //-file and -outfile + {"input.file.name", + "\u8F93\u5165\u6587\u4EF6\u540D"}, //-file and -infile + {"key.algorithm.name", + "\u5BC6\u94A5\u7B97\u6CD5\u540D\u79F0"}, //-keyalg + {"key.password", + "\u5BC6\u94A5\u53E3\u4EE4"}, //-keypass + {"key.bit.size", + "\u5BC6\u94A5\u4F4D\u5927\u5C0F"}, //-keysize + {"keystore.name", + "\u5BC6\u94A5\u5E93\u540D\u79F0"}, //-keystore + {"new.password", + "\u65B0\u53E3\u4EE4"}, //-new + {"do.not.prompt", + "\u4E0D\u63D0\u793A"}, //-noprompt + {"password.through.protected.mechanism", + "\u901A\u8FC7\u53D7\u4FDD\u62A4\u7684\u673A\u5236\u7684\u53E3\u4EE4"}, //-protected + {"provider.argument", + "\u63D0\u4F9B\u65B9\u53C2\u6570"}, //-providerarg + {"provider.class.name", + "\u63D0\u4F9B\u65B9\u7C7B\u540D"}, //-providerclass + {"provider.name", + "\u63D0\u4F9B\u65B9\u540D\u79F0"}, //-providername + {"provider.classpath", + "\u63D0\u4F9B\u65B9\u7C7B\u8DEF\u5F84"}, //-providerpath + {"output.in.RFC.style", + "\u4EE5 RFC \u6837\u5F0F\u8F93\u51FA"}, //-rfc + {"signature.algorithm.name", + "\u7B7E\u540D\u7B97\u6CD5\u540D\u79F0"}, //-sigalg + {"source.alias", + "\u6E90\u522B\u540D"}, //-srcalias + {"source.key.password", + "\u6E90\u5BC6\u94A5\u53E3\u4EE4"}, //-srckeypass + {"source.keystore.name", + "\u6E90\u5BC6\u94A5\u5E93\u540D\u79F0"}, //-srckeystore + {"source.keystore.password.protected", + "\u53D7\u4FDD\u62A4\u7684\u6E90\u5BC6\u94A5\u5E93\u53E3\u4EE4"}, //-srcprotected + {"source.keystore.provider.name", + "\u6E90\u5BC6\u94A5\u5E93\u63D0\u4F9B\u65B9\u540D\u79F0"}, //-srcprovidername + {"source.keystore.password", + "\u6E90\u5BC6\u94A5\u5E93\u53E3\u4EE4"}, //-srcstorepass + {"source.keystore.type", + "\u6E90\u5BC6\u94A5\u5E93\u7C7B\u578B"}, //-srcstoretype + {"SSL.server.host.and.port", + "SSL \u670D\u52A1\u5668\u4E3B\u673A\u548C\u7AEF\u53E3"}, //-sslserver + {"signed.jar.file", + "\u5DF2\u7B7E\u540D\u7684 jar \u6587\u4EF6"}, //=jarfile + {"certificate.validity.start.date.time", + "\u8BC1\u4E66\u6709\u6548\u671F\u5F00\u59CB\u65E5\u671F/\u65F6\u95F4"}, //-startdate + {"keystore.password", + "\u5BC6\u94A5\u5E93\u53E3\u4EE4"}, //-storepass + {"keystore.type", + "\u5BC6\u94A5\u5E93\u7C7B\u578B"}, //-storetype + {"trust.certificates.from.cacerts", + "\u4FE1\u4EFB\u6765\u81EA cacerts \u7684\u8BC1\u4E66"}, //-trustcacerts + {"verbose.output", + "\u8BE6\u7EC6\u8F93\u51FA"}, //-v + {"validity.number.of.days", + "\u6709\u6548\u5929\u6570"}, //-validity + {"Serial.ID.of.cert.to.revoke", + "\u8981\u64A4\u9500\u7684\u8BC1\u4E66\u7684\u5E8F\u5217 ID"}, //-id + // keytool: Running part + {"keytool.error.", "keytool \u9519\u8BEF: "}, + {"Illegal.option.", "\u975E\u6CD5\u9009\u9879: "}, + {"Illegal.value.", "\u975E\u6CD5\u503C: "}, + {"Unknown.password.type.", "\u672A\u77E5\u53E3\u4EE4\u7C7B\u578B: "}, + {"Cannot.find.environment.variable.", + "\u627E\u4E0D\u5230\u73AF\u5883\u53D8\u91CF: "}, + {"Cannot.find.file.", "\u627E\u4E0D\u5230\u6587\u4EF6: "}, + {"Command.option.flag.needs.an.argument.", "\u547D\u4EE4\u9009\u9879{0}\u9700\u8981\u4E00\u4E2A\u53C2\u6570\u3002"}, + {"Warning.Different.store.and.key.passwords.not.supported.for.PKCS12.KeyStores.Ignoring.user.specified.command.value.", + "\u8B66\u544A: PKCS12 KeyStore \u4E0D\u652F\u6301\u5176\u4ED6\u5B58\u50A8\u548C\u5BC6\u94A5\u53E3\u4EE4\u3002\u6B63\u5728\u5FFD\u7565\u7528\u6237\u6307\u5B9A\u7684{0}\u503C\u3002"}, + {".keystore.must.be.NONE.if.storetype.is.{0}", + "\u5982\u679C -storetype \u4E3A {0}, \u5219 -keystore \u5FC5\u987B\u4E3A NONE"}, + {"Too.many.retries.program.terminated", + "\u91CD\u8BD5\u6B21\u6570\u8FC7\u591A, \u7A0B\u5E8F\u5DF2\u7EC8\u6B62"}, + {".storepasswd.and.keypasswd.commands.not.supported.if.storetype.is.{0}", + "\u5982\u679C -storetype \u4E3A {0}, \u5219\u4E0D\u652F\u6301 -storepasswd \u548C -keypasswd \u547D\u4EE4"}, + {".keypasswd.commands.not.supported.if.storetype.is.PKCS12", + "\u5982\u679C -storetype \u4E3A PKCS12, \u5219\u4E0D\u652F\u6301 -keypasswd \u547D\u4EE4"}, + {".keypass.and.new.can.not.be.specified.if.storetype.is.{0}", + "\u5982\u679C -storetype \u4E3A {0}, \u5219\u4E0D\u80FD\u6307\u5B9A -keypass \u548C -new"}, + {"if.protected.is.specified.then.storepass.keypass.and.new.must.not.be.specified", + "\u5982\u679C\u6307\u5B9A\u4E86 -protected, \u5219\u4E0D\u80FD\u6307\u5B9A -storepass, -keypass \u548C -new"}, + {"if.srcprotected.is.specified.then.srcstorepass.and.srckeypass.must.not.be.specified", + "\u5982\u679C\u6307\u5B9A\u4E86 -srcprotected, \u5219\u4E0D\u80FD\u6307\u5B9A -srcstorepass \u548C -srckeypass"}, + {"if.keystore.is.not.password.protected.then.storepass.keypass.and.new.must.not.be.specified", + "\u5982\u679C\u5BC6\u94A5\u5E93\u672A\u53D7\u53E3\u4EE4\u4FDD\u62A4, \u5219\u4E0D\u80FD\u6307\u5B9A -storepass, -keypass \u548C -new"}, + {"if.source.keystore.is.not.password.protected.then.srcstorepass.and.srckeypass.must.not.be.specified", + "\u5982\u679C\u6E90\u5BC6\u94A5\u5E93\u672A\u53D7\u53E3\u4EE4\u4FDD\u62A4, \u5219\u4E0D\u80FD\u6307\u5B9A -srcstorepass \u548C -srckeypass"}, + {"Illegal.startdate.value", "\u975E\u6CD5\u5F00\u59CB\u65E5\u671F\u503C"}, + {"Validity.must.be.greater.than.zero", + "\u6709\u6548\u671F\u5FC5\u987B\u5927\u4E8E\u96F6"}, + {"provName.not.a.provider", "{0}\u4E0D\u662F\u63D0\u4F9B\u65B9"}, + {"Usage.error.no.command.provided", "\u7528\u6CD5\u9519\u8BEF: \u6CA1\u6709\u63D0\u4F9B\u547D\u4EE4"}, + {"Source.keystore.file.exists.but.is.empty.", "\u6E90\u5BC6\u94A5\u5E93\u6587\u4EF6\u5B58\u5728, \u4F46\u4E3A\u7A7A: "}, + {"Please.specify.srckeystore", "\u8BF7\u6307\u5B9A -srckeystore"}, + {"Must.not.specify.both.v.and.rfc.with.list.command", + "'list' \u547D\u4EE4\u4E0D\u80FD\u540C\u65F6\u6307\u5B9A -v \u53CA -rfc"}, + {"Key.password.must.be.at.least.6.characters", + "\u5BC6\u94A5\u53E3\u4EE4\u81F3\u5C11\u5FC5\u987B\u4E3A 6 \u4E2A\u5B57\u7B26"}, + {"New.password.must.be.at.least.6.characters", + "\u65B0\u53E3\u4EE4\u81F3\u5C11\u5FC5\u987B\u4E3A 6 \u4E2A\u5B57\u7B26"}, + {"Keystore.file.exists.but.is.empty.", + "\u5BC6\u94A5\u5E93\u6587\u4EF6\u5B58\u5728, \u4F46\u4E3A\u7A7A: "}, + {"Keystore.file.does.not.exist.", + "\u5BC6\u94A5\u5E93\u6587\u4EF6\u4E0D\u5B58\u5728: "}, + {"Must.specify.destination.alias", "\u5FC5\u987B\u6307\u5B9A\u76EE\u6807\u522B\u540D"}, + {"Must.specify.alias", "\u5FC5\u987B\u6307\u5B9A\u522B\u540D"}, + {"Keystore.password.must.be.at.least.6.characters", + "\u5BC6\u94A5\u5E93\u53E3\u4EE4\u81F3\u5C11\u5FC5\u987B\u4E3A 6 \u4E2A\u5B57\u7B26"}, + {"Enter.keystore.password.", "\u8F93\u5165\u5BC6\u94A5\u5E93\u53E3\u4EE4: "}, + {"Enter.source.keystore.password.", "\u8F93\u5165\u6E90\u5BC6\u94A5\u5E93\u53E3\u4EE4: "}, + {"Enter.destination.keystore.password.", "\u8F93\u5165\u76EE\u6807\u5BC6\u94A5\u5E93\u53E3\u4EE4: "}, + {"Keystore.password.is.too.short.must.be.at.least.6.characters", + "\u5BC6\u94A5\u5E93\u53E3\u4EE4\u592A\u77ED - \u81F3\u5C11\u5FC5\u987B\u4E3A 6 \u4E2A\u5B57\u7B26"}, + {"Unknown.Entry.Type", "\u672A\u77E5\u6761\u76EE\u7C7B\u578B"}, + {"Too.many.failures.Alias.not.changed", "\u6545\u969C\u592A\u591A\u3002\u672A\u66F4\u6539\u522B\u540D"}, + {"Entry.for.alias.alias.successfully.imported.", + "\u5DF2\u6210\u529F\u5BFC\u5165\u522B\u540D {0} \u7684\u6761\u76EE\u3002"}, + {"Entry.for.alias.alias.not.imported.", "\u672A\u5BFC\u5165\u522B\u540D {0} \u7684\u6761\u76EE\u3002"}, + {"Problem.importing.entry.for.alias.alias.exception.Entry.for.alias.alias.not.imported.", + "\u5BFC\u5165\u522B\u540D {0} \u7684\u6761\u76EE\u65F6\u51FA\u73B0\u95EE\u9898: {1}\u3002\n\u672A\u5BFC\u5165\u522B\u540D {0} \u7684\u6761\u76EE\u3002"}, + {"Import.command.completed.ok.entries.successfully.imported.fail.entries.failed.or.cancelled", + "\u5DF2\u5B8C\u6210\u5BFC\u5165\u547D\u4EE4: {0} \u4E2A\u6761\u76EE\u6210\u529F\u5BFC\u5165, {1} \u4E2A\u6761\u76EE\u5931\u8D25\u6216\u53D6\u6D88"}, + {"Warning.Overwriting.existing.alias.alias.in.destination.keystore", + "\u8B66\u544A: \u6B63\u5728\u8986\u76D6\u76EE\u6807\u5BC6\u94A5\u5E93\u4E2D\u7684\u73B0\u6709\u522B\u540D {0}"}, + {"Existing.entry.alias.alias.exists.overwrite.no.", + "\u5B58\u5728\u73B0\u6709\u6761\u76EE\u522B\u540D {0}, \u662F\u5426\u8986\u76D6? [no]: "}, + {"Too.many.failures.try.later", "\u6545\u969C\u592A\u591A - \u8BF7\u7A0D\u540E\u518D\u8BD5"}, + {"Certification.request.stored.in.file.filename.", + "\u5B58\u50A8\u5728\u6587\u4EF6 <{0}> \u4E2D\u7684\u8BA4\u8BC1\u8BF7\u6C42"}, + {"Submit.this.to.your.CA", "\u5C06\u6B64\u63D0\u4EA4\u7ED9\u60A8\u7684 CA"}, + {"if.alias.not.specified.destalias.srckeypass.and.destkeypass.must.not.be.specified", + "\u5982\u679C\u6CA1\u6709\u6307\u5B9A\u522B\u540D, \u5219\u4E0D\u80FD\u6307\u5B9A\u76EE\u6807\u522B\u540D, \u6E90\u5BC6\u94A5\u5E93\u53E3\u4EE4\u548C\u76EE\u6807\u5BC6\u94A5\u5E93\u53E3\u4EE4"}, + {"Certificate.stored.in.file.filename.", + "\u5B58\u50A8\u5728\u6587\u4EF6 <{0}> \u4E2D\u7684\u8BC1\u4E66"}, + {"Certificate.reply.was.installed.in.keystore", + "\u8BC1\u4E66\u56DE\u590D\u5DF2\u5B89\u88C5\u5728\u5BC6\u94A5\u5E93\u4E2D"}, + {"Certificate.reply.was.not.installed.in.keystore", + "\u8BC1\u4E66\u56DE\u590D\u672A\u5B89\u88C5\u5728\u5BC6\u94A5\u5E93\u4E2D"}, + {"Certificate.was.added.to.keystore", + "\u8BC1\u4E66\u5DF2\u6DFB\u52A0\u5230\u5BC6\u94A5\u5E93\u4E2D"}, + {"Certificate.was.not.added.to.keystore", + "\u8BC1\u4E66\u672A\u6DFB\u52A0\u5230\u5BC6\u94A5\u5E93\u4E2D"}, + {".Storing.ksfname.", "[\u6B63\u5728\u5B58\u50A8{0}]"}, + {"alias.has.no.public.key.certificate.", + "{0}\u6CA1\u6709\u516C\u5171\u5BC6\u94A5 (\u8BC1\u4E66)"}, + {"Cannot.derive.signature.algorithm", + "\u65E0\u6CD5\u6D3E\u751F\u7B7E\u540D\u7B97\u6CD5"}, + {"Alias.alias.does.not.exist", + "\u522B\u540D <{0}> \u4E0D\u5B58\u5728"}, + {"Alias.alias.has.no.certificate", + "\u522B\u540D <{0}> \u6CA1\u6709\u8BC1\u4E66"}, + {"Key.pair.not.generated.alias.alias.already.exists", + "\u672A\u751F\u6210\u5BC6\u94A5\u5BF9, \u522B\u540D <{0}> \u5DF2\u7ECF\u5B58\u5728"}, + {"Generating.keysize.bit.keyAlgName.key.pair.and.self.signed.certificate.sigAlgName.with.a.validity.of.validality.days.for", + "\u6B63\u5728\u4E3A\u4EE5\u4E0B\u5BF9\u8C61\u751F\u6210 {0} \u4F4D{1}\u5BC6\u94A5\u5BF9\u548C\u81EA\u7B7E\u540D\u8BC1\u4E66 ({2}) (\u6709\u6548\u671F\u4E3A {3} \u5929):\n\t {4}"}, + {"Enter.key.password.for.alias.", "\u8F93\u5165 <{0}> \u7684\u5BC6\u94A5\u53E3\u4EE4"}, + {".RETURN.if.same.as.keystore.password.", + "\t(\u5982\u679C\u548C\u5BC6\u94A5\u5E93\u53E3\u4EE4\u76F8\u540C, \u6309\u56DE\u8F66): "}, + {"Key.password.is.too.short.must.be.at.least.6.characters", + "\u5BC6\u94A5\u53E3\u4EE4\u592A\u77ED - \u81F3\u5C11\u5FC5\u987B\u4E3A 6 \u4E2A\u5B57\u7B26"}, + {"Too.many.failures.key.not.added.to.keystore", + "\u6545\u969C\u592A\u591A - \u5BC6\u94A5\u672A\u6DFB\u52A0\u5230\u5BC6\u94A5\u5E93\u4E2D"}, + {"Destination.alias.dest.already.exists", + "\u76EE\u6807\u522B\u540D <{0}> \u5DF2\u7ECF\u5B58\u5728"}, + {"Password.is.too.short.must.be.at.least.6.characters", + "\u53E3\u4EE4\u592A\u77ED - \u81F3\u5C11\u5FC5\u987B\u4E3A 6 \u4E2A\u5B57\u7B26"}, + {"Too.many.failures.Key.entry.not.cloned", + "\u6545\u969C\u592A\u591A\u3002\u672A\u514B\u9686\u5BC6\u94A5\u6761\u76EE"}, + {"key.password.for.alias.", "<{0}> \u7684\u5BC6\u94A5\u53E3\u4EE4"}, + {"Keystore.entry.for.id.getName.already.exists", + "<{0}> \u7684\u5BC6\u94A5\u5E93\u6761\u76EE\u5DF2\u7ECF\u5B58\u5728"}, + {"Creating.keystore.entry.for.id.getName.", + "\u6B63\u5728\u521B\u5EFA <{0}> \u7684\u5BC6\u94A5\u5E93\u6761\u76EE..."}, + {"No.entries.from.identity.database.added", + "\u672A\u4ECE\u8EAB\u4EFD\u6570\u636E\u5E93\u4E2D\u6DFB\u52A0\u4EFB\u4F55\u6761\u76EE"}, + {"Alias.name.alias", "\u522B\u540D: {0}"}, + {"Creation.date.keyStore.getCreationDate.alias.", + "\u521B\u5EFA\u65E5\u671F: {0,date}"}, + {"alias.keyStore.getCreationDate.alias.", + "{0}, {1,date}, "}, + {"alias.", "{0}, "}, + {"Entry.type.type.", "\u6761\u76EE\u7C7B\u578B: {0}"}, + {"Certificate.chain.length.", "\u8BC1\u4E66\u94FE\u957F\u5EA6: "}, + {"Certificate.i.1.", "\u8BC1\u4E66[{0,number,integer}]:"}, + {"Certificate.fingerprint.SHA1.", "\u8BC1\u4E66\u6307\u7EB9 (SHA1): "}, + {"Keystore.type.", "\u5BC6\u94A5\u5E93\u7C7B\u578B: "}, + {"Keystore.provider.", "\u5BC6\u94A5\u5E93\u63D0\u4F9B\u65B9: "}, + {"Your.keystore.contains.keyStore.size.entry", + "\u60A8\u7684\u5BC6\u94A5\u5E93\u5305\u542B {0,number,integer} \u4E2A\u6761\u76EE"}, + {"Your.keystore.contains.keyStore.size.entries", + "\u60A8\u7684\u5BC6\u94A5\u5E93\u5305\u542B {0,number,integer} \u4E2A\u6761\u76EE"}, + {"Failed.to.parse.input", "\u65E0\u6CD5\u5BF9\u8F93\u5165\u8FDB\u884C\u8BED\u6CD5\u5206\u6790"}, + {"Empty.input", "\u7A7A\u8F93\u5165"}, + {"Not.X.509.certificate", "\u975E X.509 \u8BC1\u4E66"}, + {"alias.has.no.public.key", "{0}\u6CA1\u6709\u516C\u5171\u5BC6\u94A5"}, + {"alias.has.no.X.509.certificate", "{0}\u6CA1\u6709 X.509 \u8BC1\u4E66"}, + {"New.certificate.self.signed.", "\u65B0\u8BC1\u4E66 (\u81EA\u7B7E\u540D):"}, + {"Reply.has.no.certificates", "\u56DE\u590D\u4E2D\u6CA1\u6709\u8BC1\u4E66"}, + {"Certificate.not.imported.alias.alias.already.exists", + "\u8BC1\u4E66\u672A\u5BFC\u5165, \u522B\u540D <{0}> \u5DF2\u7ECF\u5B58\u5728"}, + {"Input.not.an.X.509.certificate", "\u6240\u8F93\u5165\u7684\u4E0D\u662F X.509 \u8BC1\u4E66"}, + {"Certificate.already.exists.in.keystore.under.alias.trustalias.", + "\u5728\u522B\u540D <{0}> \u4E4B\u4E0B, \u8BC1\u4E66\u5DF2\u7ECF\u5B58\u5728\u4E8E\u5BC6\u94A5\u5E93\u4E2D"}, + {"Do.you.still.want.to.add.it.no.", + "\u662F\u5426\u4ECD\u8981\u6DFB\u52A0? [no]: "}, + {"Certificate.already.exists.in.system.wide.CA.keystore.under.alias.trustalias.", + "\u5728\u522B\u540D <{0}> \u4E4B\u4E0B, \u8BC1\u4E66\u5DF2\u7ECF\u5B58\u5728\u4E8E\u7CFB\u7EDF\u8303\u56F4\u7684 CA \u5BC6\u94A5\u5E93\u4E2D"}, + {"Do.you.still.want.to.add.it.to.your.own.keystore.no.", + "\u662F\u5426\u4ECD\u8981\u5C06\u5B83\u6DFB\u52A0\u5230\u81EA\u5DF1\u7684\u5BC6\u94A5\u5E93? [no]: "}, + {"Trust.this.certificate.no.", "\u662F\u5426\u4FE1\u4EFB\u6B64\u8BC1\u4E66? [no]: "}, + {"YES", "\u662F"}, + {"New.prompt.", "\u65B0{0}: "}, + {"Passwords.must.differ", "\u53E3\u4EE4\u4E0D\u80FD\u76F8\u540C"}, + {"Re.enter.new.prompt.", "\u91CD\u65B0\u8F93\u5165\u65B0{0}: "}, + {"Re.enter.new.password.", "\u518D\u6B21\u8F93\u5165\u65B0\u53E3\u4EE4: "}, + {"They.don.t.match.Try.again", "\u5B83\u4EEC\u4E0D\u5339\u914D\u3002\u8BF7\u91CD\u8BD5"}, + {"Enter.prompt.alias.name.", "\u8F93\u5165{0}\u522B\u540D: "}, + {"Enter.new.alias.name.RETURN.to.cancel.import.for.this.entry.", + "\u8F93\u5165\u65B0\u7684\u522B\u540D\t(\u6309\u56DE\u8F66\u4EE5\u53D6\u6D88\u5BF9\u6B64\u6761\u76EE\u7684\u5BFC\u5165): "}, + {"Enter.alias.name.", "\u8F93\u5165\u522B\u540D: "}, + {".RETURN.if.same.as.for.otherAlias.", + "\t(\u5982\u679C\u548C <{0}> \u76F8\u540C, \u5219\u6309\u56DE\u8F66)"}, + {".PATTERN.printX509Cert", + "\u6240\u6709\u8005: {0}\n\u53D1\u5E03\u8005: {1}\n\u5E8F\u5217\u53F7: {2}\n\u6709\u6548\u671F\u5F00\u59CB\u65E5\u671F: {3}, \u622A\u6B62\u65E5\u671F: {4}\n\u8BC1\u4E66\u6307\u7EB9:\n\t MD5: {5}\n\t SHA1: {6}\n\t SHA256: {7}\n\t \u7B7E\u540D\u7B97\u6CD5\u540D\u79F0: {8}\n\t \u7248\u672C: {9}"}, + {"What.is.your.first.and.last.name.", + "\u60A8\u7684\u540D\u5B57\u4E0E\u59D3\u6C0F\u662F\u4EC0\u4E48?"}, + {"What.is.the.name.of.your.organizational.unit.", + "\u60A8\u7684\u7EC4\u7EC7\u5355\u4F4D\u540D\u79F0\u662F\u4EC0\u4E48?"}, + {"What.is.the.name.of.your.organization.", + "\u60A8\u7684\u7EC4\u7EC7\u540D\u79F0\u662F\u4EC0\u4E48?"}, + {"What.is.the.name.of.your.City.or.Locality.", + "\u60A8\u6240\u5728\u7684\u57CE\u5E02\u6216\u533A\u57DF\u540D\u79F0\u662F\u4EC0\u4E48?"}, + {"What.is.the.name.of.your.State.or.Province.", + "\u60A8\u6240\u5728\u7684\u7701/\u5E02/\u81EA\u6CBB\u533A\u540D\u79F0\u662F\u4EC0\u4E48?"}, + {"What.is.the.two.letter.country.code.for.this.unit.", + "\u8BE5\u5355\u4F4D\u7684\u53CC\u5B57\u6BCD\u56FD\u5BB6/\u5730\u533A\u4EE3\u7801\u662F\u4EC0\u4E48?"}, + {"Is.name.correct.", "{0}\u662F\u5426\u6B63\u786E?"}, + {"no", "\u5426"}, + {"yes", "\u662F"}, + {"y", "y"}, + {".defaultValue.", " [{0}]: "}, + {"Alias.alias.has.no.key", + "\u522B\u540D <{0}> \u6CA1\u6709\u5BC6\u94A5"}, + {"Alias.alias.references.an.entry.type.that.is.not.a.private.key.entry.The.keyclone.command.only.supports.cloning.of.private.key", + "\u522B\u540D <{0}> \u5F15\u7528\u4E86\u4E0D\u5C5E\u4E8E\u79C1\u6709\u5BC6\u94A5\u6761\u76EE\u7684\u6761\u76EE\u7C7B\u578B\u3002-keyclone \u547D\u4EE4\u4EC5\u652F\u6301\u5BF9\u79C1\u6709\u5BC6\u94A5\u6761\u76EE\u7684\u514B\u9686"}, + + {".WARNING.WARNING.WARNING.", + "***************** \u8B66\u544A \u8B66\u544A \u8B66\u544A *****************"}, + {"Signer.d.", "\u7B7E\u540D\u8005 #%d:"}, + {"Timestamp.", "\u65F6\u95F4\u6233:"}, + {"Signature.", "\u7B7E\u540D:"}, + {"CRLs.", "CRL:"}, + {"Certificate.owner.", "\u8BC1\u4E66\u6240\u6709\u8005: "}, + {"Not.a.signed.jar.file", "\u4E0D\u662F\u5DF2\u7B7E\u540D\u7684 jar \u6587\u4EF6"}, + {"No.certificate.from.the.SSL.server", + "\u6CA1\u6709\u6765\u81EA SSL \u670D\u52A1\u5668\u7684\u8BC1\u4E66"}, + + {".The.integrity.of.the.information.stored.in.your.keystore.", + "* \u5B58\u50A8\u5728\u60A8\u7684\u5BC6\u94A5\u5E93\u4E2D\u7684\u4FE1\u606F\u7684\u5B8C\u6574\u6027 *\n* \u5C1A\u672A\u7ECF\u8FC7\u9A8C\u8BC1! \u4E3A\u4E86\u9A8C\u8BC1\u5176\u5B8C\u6574\u6027, *\n* \u5FC5\u987B\u63D0\u4F9B\u5BC6\u94A5\u5E93\u53E3\u4EE4\u3002 *"}, + {".The.integrity.of.the.information.stored.in.the.srckeystore.", + "* \u5B58\u50A8\u5728 srckeystore \u4E2D\u7684\u4FE1\u606F\u7684\u5B8C\u6574\u6027*\n* \u5C1A\u672A\u7ECF\u8FC7\u9A8C\u8BC1! \u4E3A\u4E86\u9A8C\u8BC1\u5176\u5B8C\u6574\u6027, *\n* \u5FC5\u987B\u63D0\u4F9B\u6E90\u5BC6\u94A5\u5E93\u53E3\u4EE4\u3002 *"}, + + {"Certificate.reply.does.not.contain.public.key.for.alias.", + "\u8BC1\u4E66\u56DE\u590D\u4E2D\u4E0D\u5305\u542B <{0}> \u7684\u516C\u5171\u5BC6\u94A5"}, + {"Incomplete.certificate.chain.in.reply", + "\u56DE\u590D\u4E2D\u7684\u8BC1\u4E66\u94FE\u4E0D\u5B8C\u6574"}, + {"Certificate.chain.in.reply.does.not.verify.", + "\u56DE\u590D\u4E2D\u7684\u8BC1\u4E66\u94FE\u672A\u9A8C\u8BC1: "}, + {"Top.level.certificate.in.reply.", + "\u56DE\u590D\u4E2D\u7684\u9876\u7EA7\u8BC1\u4E66:\n"}, + {".is.not.trusted.", "... \u662F\u4E0D\u53EF\u4FE1\u7684\u3002"}, + {"Install.reply.anyway.no.", "\u662F\u5426\u4ECD\u8981\u5B89\u88C5\u56DE\u590D? [no]: "}, + {"NO", "\u5426"}, + {"Public.keys.in.reply.and.keystore.don.t.match", + "\u56DE\u590D\u4E2D\u7684\u516C\u5171\u5BC6\u94A5\u4E0E\u5BC6\u94A5\u5E93\u4E0D\u5339\u914D"}, + {"Certificate.reply.and.certificate.in.keystore.are.identical", + "\u8BC1\u4E66\u56DE\u590D\u4E0E\u5BC6\u94A5\u5E93\u4E2D\u7684\u8BC1\u4E66\u662F\u76F8\u540C\u7684"}, + {"Failed.to.establish.chain.from.reply", + "\u65E0\u6CD5\u4ECE\u56DE\u590D\u4E2D\u5EFA\u7ACB\u94FE"}, + {"n", "n"}, + {"Wrong.answer.try.again", "\u9519\u8BEF\u7684\u7B54\u6848, \u8BF7\u518D\u8BD5\u4E00\u6B21"}, + {"Secret.key.not.generated.alias.alias.already.exists", + "\u6CA1\u6709\u751F\u6210\u5BC6\u94A5, \u522B\u540D <{0}> \u5DF2\u7ECF\u5B58\u5728"}, + {"Please.provide.keysize.for.secret.key.generation", + "\u8BF7\u63D0\u4F9B -keysize \u4EE5\u751F\u6210\u5BF9\u79F0\u5BC6\u94A5"}, + + {"Extensions.", "\u6269\u5C55: "}, + {".Empty.value.", "(\u7A7A\u503C)"}, + {"Extension.Request.", "\u6269\u5C55\u8BF7\u6C42:"}, + {"PKCS.10.Certificate.Request.Version.1.0.Subject.s.Public.Key.s.format.s.key.", + "PKCS #10 \u8BC1\u4E66\u8BF7\u6C42 (\u7248\u672C 1.0)\n\u4E3B\u9898: %s\n\u516C\u5171\u5BC6\u94A5: %s \u683C\u5F0F %s \u5BC6\u94A5\n"}, + {"Unknown.keyUsage.type.", "\u672A\u77E5 keyUsage \u7C7B\u578B: "}, + {"Unknown.extendedkeyUsage.type.", "\u672A\u77E5 extendedkeyUsage \u7C7B\u578B: "}, + {"Unknown.AccessDescription.type.", "\u672A\u77E5 AccessDescription \u7C7B\u578B: "}, + {"Unrecognized.GeneralName.type.", "\u65E0\u6CD5\u8BC6\u522B\u7684 GeneralName \u7C7B\u578B: "}, + {"This.extension.cannot.be.marked.as.critical.", + "\u65E0\u6CD5\u5C06\u6B64\u6269\u5C55\u6807\u8BB0\u4E3A\u201C\u4E25\u91CD\u201D\u3002"}, + {"Odd.number.of.hex.digits.found.", "\u627E\u5230\u5947\u6570\u4E2A\u5341\u516D\u8FDB\u5236\u6570\u5B57: "}, + {"Unknown.extension.type.", "\u672A\u77E5\u6269\u5C55\u7C7B\u578B: "}, + {"command.{0}.is.ambiguous.", "\u547D\u4EE4{0}\u4E0D\u660E\u786E:"} + }; + + + /** + * Returns the contents of this ResourceBundle. + * + *

+ * + * @return the contents of this ResourceBundle. + */ + @Override + public Object[][] getContents() { + return contents; + } +} diff --git a/jdk/src/share/classes/sun/security/tools/keytool/Resources_zh_HK.java b/jdk/src/share/classes/sun/security/tools/keytool/Resources_zh_HK.java new file mode 100644 index 00000000000..90cb13f86cd --- /dev/null +++ b/jdk/src/share/classes/sun/security/tools/keytool/Resources_zh_HK.java @@ -0,0 +1,431 @@ +/* + * Copyright (c) 2000, 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. 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.security.tools.keytool; + +/** + *

This class represents the ResourceBundle + * for the keytool. + * + */ +public class Resources_zh_HK extends java.util.ListResourceBundle { + + private static final Object[][] contents = { + {"NEWLINE", "\n"}, + {"STAR", + "*******************************************"}, + {"STARNN", + "*******************************************\n\n"}, + + // keytool: Help part +// "Option" should be translated. + {".OPTION.", " [\u9078\u9805]..."}, + {"Options.", "\u9078\u9805:"}, + {"Use.keytool.help.for.all.available.commands", + "\u4F7F\u7528 \"keytool -help\" \u53D6\u5F97\u6240\u6709\u53EF\u7528\u7684\u547D\u4EE4"}, + {"Key.and.Certificate.Management.Tool", + "\u91D1\u9470\u8207\u6191\u8B49\u7BA1\u7406\u5DE5\u5177"}, + {"Commands.", "\u547D\u4EE4:"}, + {"Use.keytool.command.name.help.for.usage.of.command.name", + "\u4F7F\u7528 \"keytool -command_name -help\" \u53D6\u5F97 command_name \u7684\u7528\u6CD5"}, + // keytool: help: commands + {"Generates.a.certificate.request", + "\u7522\u751F\u6191\u8B49\u8981\u6C42"}, //-certreq + {"Changes.an.entry.s.alias", + "\u8B8A\u66F4\u9805\u76EE\u7684\u5225\u540D"}, //-changealias + {"Deletes.an.entry", + "\u522A\u9664\u9805\u76EE"}, //-delete + {"Exports.certificate", + "\u532F\u51FA\u6191\u8B49"}, //-exportcert + {"Generates.a.key.pair", + "\u7522\u751F\u91D1\u9470\u7D44"}, //-genkeypair +// translation of "secret" key should be different to "private" key. + {"Generates.a.secret.key", + "\u7522\u751F\u79D8\u5BC6\u91D1\u9470"}, //-genseckey + {"Generates.certificate.from.a.certificate.request", + "\u5F9E\u6191\u8B49\u8981\u6C42\u7522\u751F\u6191\u8B49"}, //-gencert + {"Generates.CRL", "\u7522\u751F CRL"}, //-gencrl + {"Imports.entries.from.a.JDK.1.1.x.style.identity.database", + "\u5F9E JDK 1.1.x-style \u8B58\u5225\u8CC7\u6599\u5EAB\u532F\u5165\u9805\u76EE"}, //-identitydb + {"Imports.a.certificate.or.a.certificate.chain", + "\u532F\u5165\u6191\u8B49\u6216\u6191\u8B49\u93C8"}, //-importcert + {"Imports.one.or.all.entries.from.another.keystore", + "\u5F9E\u5176\u4ED6\u91D1\u9470\u5132\u5B58\u5EAB\u532F\u5165\u4E00\u500B\u6216\u5168\u90E8\u9805\u76EE"}, //-importkeystore + {"Clones.a.key.entry", + "\u8907\u88FD\u91D1\u9470\u9805\u76EE"}, //-keyclone + {"Changes.the.key.password.of.an.entry", + "\u8B8A\u66F4\u9805\u76EE\u7684\u91D1\u9470\u5BC6\u78BC"}, //-keypasswd + {"Lists.entries.in.a.keystore", + "\u5217\u793A\u91D1\u9470\u5132\u5B58\u5EAB\u4E2D\u7684\u9805\u76EE"}, //-list + {"Prints.the.content.of.a.certificate", + "\u5217\u5370\u6191\u8B49\u7684\u5167\u5BB9"}, //-printcert + {"Prints.the.content.of.a.certificate.request", + "\u5217\u5370\u6191\u8B49\u8981\u6C42\u7684\u5167\u5BB9"}, //-printcertreq + {"Prints.the.content.of.a.CRL.file", + "\u5217\u5370 CRL \u6A94\u6848\u7684\u5167\u5BB9"}, //-printcrl + {"Generates.a.self.signed.certificate", + "\u7522\u751F\u81EA\u884C\u7C3D\u7F72\u7684\u6191\u8B49"}, //-selfcert + {"Changes.the.store.password.of.a.keystore", + "\u8B8A\u66F4\u91D1\u9470\u5132\u5B58\u5EAB\u7684\u5132\u5B58\u5BC6\u78BC"}, //-storepasswd + // keytool: help: options + {"alias.name.of.the.entry.to.process", + "\u8981\u8655\u7406\u9805\u76EE\u7684\u5225\u540D\u540D\u7A31"}, //-alias + {"destination.alias", + "\u76EE\u7684\u5730\u5225\u540D"}, //-destalias + {"destination.key.password", + "\u76EE\u7684\u5730\u91D1\u9470\u5BC6\u78BC"}, //-destkeypass + {"destination.keystore.name", + "\u76EE\u7684\u5730\u91D1\u9470\u5132\u5B58\u5EAB\u540D\u7A31"}, //-destkeystore + {"destination.keystore.password.protected", + "\u76EE\u7684\u5730\u91D1\u9470\u5132\u5B58\u5EAB\u5BC6\u78BC\u4FDD\u8B77"}, //-destprotected + {"destination.keystore.provider.name", + "\u76EE\u7684\u5730\u91D1\u9470\u5132\u5B58\u5EAB\u63D0\u4F9B\u8005\u540D\u7A31"}, //-destprovidername + {"destination.keystore.password", + "\u76EE\u7684\u5730\u91D1\u9470\u5132\u5B58\u5EAB\u5BC6\u78BC"}, //-deststorepass + {"destination.keystore.type", + "\u76EE\u7684\u5730\u91D1\u9470\u5132\u5B58\u5EAB\u985E\u578B"}, //-deststoretype + {"distinguished.name", + "\u8FA8\u5225\u540D\u7A31"}, //-dname + {"X.509.extension", + "X.509 \u64F4\u5145\u5957\u4EF6"}, //-ext + {"output.file.name", + "\u8F38\u51FA\u6A94\u6848\u540D\u7A31"}, //-file and -outfile + {"input.file.name", + "\u8F38\u5165\u6A94\u6848\u540D\u7A31"}, //-file and -infile + {"key.algorithm.name", + "\u91D1\u9470\u6F14\u7B97\u6CD5\u540D\u7A31"}, //-keyalg + {"key.password", + "\u91D1\u9470\u5BC6\u78BC"}, //-keypass + {"key.bit.size", + "\u91D1\u9470\u4F4D\u5143\u5927\u5C0F"}, //-keysize + {"keystore.name", + "\u91D1\u9470\u5132\u5B58\u5EAB\u540D\u7A31"}, //-keystore + {"new.password", + "\u65B0\u5BC6\u78BC"}, //-new + {"do.not.prompt", + "\u4E0D\u8981\u63D0\u793A"}, //-noprompt + {"password.through.protected.mechanism", + "\u7D93\u7531\u4FDD\u8B77\u6A5F\u5236\u7684\u5BC6\u78BC"}, //-protected + {"provider.argument", + "\u63D0\u4F9B\u8005\u5F15\u6578"}, //-providerarg + {"provider.class.name", + "\u63D0\u4F9B\u8005\u985E\u5225\u540D\u7A31"}, //-providerclass + {"provider.name", + "\u63D0\u4F9B\u8005\u540D\u7A31"}, //-providername + {"provider.classpath", + "\u63D0\u4F9B\u8005\u985E\u5225\u8DEF\u5F91"}, //-providerpath + {"output.in.RFC.style", + "\u4EE5 RFC \u6A23\u5F0F\u8F38\u51FA"}, //-rfc + {"signature.algorithm.name", + "\u7C3D\u7AE0\u6F14\u7B97\u6CD5\u540D\u7A31"}, //-sigalg + {"source.alias", + "\u4F86\u6E90\u5225\u540D"}, //-srcalias + {"source.key.password", + "\u4F86\u6E90\u91D1\u9470\u5BC6\u78BC"}, //-srckeypass + {"source.keystore.name", + "\u4F86\u6E90\u91D1\u9470\u5132\u5B58\u5EAB\u540D\u7A31"}, //-srckeystore + {"source.keystore.password.protected", + "\u4F86\u6E90\u91D1\u9470\u5132\u5B58\u5EAB\u5BC6\u78BC\u4FDD\u8B77"}, //-srcprotected + {"source.keystore.provider.name", + "\u4F86\u6E90\u91D1\u9470\u5132\u5B58\u5EAB\u63D0\u4F9B\u8005\u540D\u7A31"}, //-srcprovidername + {"source.keystore.password", + "\u4F86\u6E90\u91D1\u9470\u5132\u5B58\u5EAB\u5BC6\u78BC"}, //-srcstorepass + {"source.keystore.type", + "\u4F86\u6E90\u91D1\u9470\u5132\u5B58\u5EAB\u985E\u578B"}, //-srcstoretype + {"SSL.server.host.and.port", + "SSL \u4F3A\u670D\u5668\u4E3B\u6A5F\u8207\u9023\u63A5\u57E0"}, //-sslserver + {"signed.jar.file", + "\u7C3D\u7F72\u7684 jar \u6A94\u6848"}, //=jarfile + {"certificate.validity.start.date.time", + "\u6191\u8B49\u6709\u6548\u6027\u958B\u59CB\u65E5\u671F/\u6642\u9593"}, //-startdate + {"keystore.password", + "\u91D1\u9470\u5132\u5B58\u5EAB\u5BC6\u78BC"}, //-storepass + {"keystore.type", + "\u91D1\u9470\u5132\u5B58\u5EAB\u985E\u578B"}, //-storetype + {"trust.certificates.from.cacerts", + "\u4F86\u81EA cacerts \u7684\u4FE1\u4EFB\u6191\u8B49"}, //-trustcacerts + {"verbose.output", + "\u8A73\u7D30\u8CC7\u8A0A\u8F38\u51FA"}, //-v + {"validity.number.of.days", + "\u6709\u6548\u6027\u65E5\u6578"}, //-validity + {"Serial.ID.of.cert.to.revoke", + "\u8981\u64A4\u92B7\u6191\u8B49\u7684\u5E8F\u5217 ID"}, //-id + // keytool: Running part + {"keytool.error.", "\u91D1\u9470\u5DE5\u5177\u932F\u8AA4: "}, + {"Illegal.option.", "\u7121\u6548\u7684\u9078\u9805:"}, + {"Illegal.value.", "\u7121\u6548\u503C: "}, + {"Unknown.password.type.", "\u4E0D\u660E\u7684\u5BC6\u78BC\u985E\u578B: "}, + {"Cannot.find.environment.variable.", + "\u627E\u4E0D\u5230\u74B0\u5883\u8B8A\u6578: "}, + {"Cannot.find.file.", "\u627E\u4E0D\u5230\u6A94\u6848: "}, + {"Command.option.flag.needs.an.argument.", "\u547D\u4EE4\u9078\u9805 {0} \u9700\u8981\u5F15\u6578\u3002"}, + {"Warning.Different.store.and.key.passwords.not.supported.for.PKCS12.KeyStores.Ignoring.user.specified.command.value.", + "\u8B66\u544A: PKCS12 \u91D1\u9470\u5132\u5B58\u5EAB\u4E0D\u652F\u63F4\u4E0D\u540C\u7684\u5132\u5B58\u5EAB\u548C\u91D1\u9470\u5BC6\u78BC\u3002\u5FFD\u7565\u4F7F\u7528\u8005\u6307\u5B9A\u7684 {0} \u503C\u3002"}, + {".keystore.must.be.NONE.if.storetype.is.{0}", + "\u5982\u679C -storetype \u70BA {0}\uFF0C\u5247 -keystore \u5FC5\u9808\u70BA NONE"}, + {"Too.many.retries.program.terminated", + "\u91CD\u8A66\u6B21\u6578\u592A\u591A\uFF0C\u7A0B\u5F0F\u5DF2\u7D42\u6B62"}, + {".storepasswd.and.keypasswd.commands.not.supported.if.storetype.is.{0}", + "\u5982\u679C -storetype \u70BA {0}\uFF0C\u5247\u4E0D\u652F\u63F4 -storepasswd \u548C -keypasswd \u547D\u4EE4"}, + {".keypasswd.commands.not.supported.if.storetype.is.PKCS12", + "\u5982\u679C -storetype \u70BA PKCS12\uFF0C\u5247\u4E0D\u652F\u63F4 -keypasswd \u547D\u4EE4"}, + {".keypass.and.new.can.not.be.specified.if.storetype.is.{0}", + "\u5982\u679C -storetype \u70BA {0}\uFF0C\u5247\u4E0D\u80FD\u6307\u5B9A -keypass \u548C -new"}, + {"if.protected.is.specified.then.storepass.keypass.and.new.must.not.be.specified", + "\u5982\u679C\u6307\u5B9A -protected\uFF0C\u5247\u4E0D\u80FD\u6307\u5B9A -storepass\u3001-keypass \u548C -new"}, + {"if.srcprotected.is.specified.then.srcstorepass.and.srckeypass.must.not.be.specified", + "\u5982\u679C\u6307\u5B9A -srcprotected\uFF0C\u5247\u4E0D\u80FD\u6307\u5B9A -srcstorepass \u548C -srckeypass"}, + {"if.keystore.is.not.password.protected.then.storepass.keypass.and.new.must.not.be.specified", + "\u5982\u679C\u91D1\u9470\u5132\u5B58\u5EAB\u4E0D\u53D7\u5BC6\u78BC\u4FDD\u8B77\uFF0C\u5247\u4E0D\u80FD\u6307\u5B9A -storepass\u3001-keypass \u548C -new"}, + {"if.source.keystore.is.not.password.protected.then.srcstorepass.and.srckeypass.must.not.be.specified", + "\u5982\u679C\u4F86\u6E90\u91D1\u9470\u5132\u5B58\u5EAB\u4E0D\u53D7\u5BC6\u78BC\u4FDD\u8B77\uFF0C\u5247\u4E0D\u80FD\u6307\u5B9A -srcstorepass \u548C -srckeypass"}, + {"Illegal.startdate.value", "\u7121\u6548\u7684 startdate \u503C"}, + {"Validity.must.be.greater.than.zero", + "\u6709\u6548\u6027\u5FC5\u9808\u5927\u65BC\u96F6"}, + {"provName.not.a.provider", "{0} \u4E0D\u662F\u4E00\u500B\u63D0\u4F9B\u8005"}, + {"Usage.error.no.command.provided", "\u7528\u6CD5\u932F\u8AA4: \u672A\u63D0\u4F9B\u547D\u4EE4"}, + {"Source.keystore.file.exists.but.is.empty.", "\u4F86\u6E90\u91D1\u9470\u5132\u5B58\u5EAB\u6A94\u6848\u5B58\u5728\uFF0C\u4F46\u70BA\u7A7A: "}, + {"Please.specify.srckeystore", "\u8ACB\u6307\u5B9A -srckeystore"}, + {"Must.not.specify.both.v.and.rfc.with.list.command", + " 'list' \u547D\u4EE4\u4E0D\u80FD\u540C\u6642\u6307\u5B9A -v \u53CA -rfc"}, + {"Key.password.must.be.at.least.6.characters", + "\u91D1\u9470\u5BC6\u78BC\u5FC5\u9808\u81F3\u5C11\u70BA 6 \u500B\u5B57\u5143"}, + {"New.password.must.be.at.least.6.characters", + "\u65B0\u7684\u5BC6\u78BC\u5FC5\u9808\u81F3\u5C11\u70BA 6 \u500B\u5B57\u5143"}, + {"Keystore.file.exists.but.is.empty.", + "\u91D1\u9470\u5132\u5B58\u5EAB\u6A94\u6848\u5B58\u5728\uFF0C\u4F46\u70BA\u7A7A\u767D: "}, + {"Keystore.file.does.not.exist.", + "\u91D1\u9470\u5132\u5B58\u5EAB\u6A94\u6848\u4E0D\u5B58\u5728: "}, + {"Must.specify.destination.alias", "\u5FC5\u9808\u6307\u5B9A\u76EE\u7684\u5730\u5225\u540D"}, + {"Must.specify.alias", "\u5FC5\u9808\u6307\u5B9A\u5225\u540D"}, + {"Keystore.password.must.be.at.least.6.characters", + "\u91D1\u9470\u5132\u5B58\u5EAB\u5BC6\u78BC\u5FC5\u9808\u81F3\u5C11\u70BA 6 \u500B\u5B57\u5143"}, + {"Enter.keystore.password.", "\u8F38\u5165\u91D1\u9470\u5132\u5B58\u5EAB\u5BC6\u78BC: "}, + {"Enter.source.keystore.password.", "\u8ACB\u8F38\u5165\u4F86\u6E90\u91D1\u9470\u5132\u5B58\u5EAB\u5BC6\u78BC: "}, + {"Enter.destination.keystore.password.", "\u8ACB\u8F38\u5165\u76EE\u7684\u5730\u91D1\u9470\u5132\u5B58\u5EAB\u5BC6\u78BC: "}, + {"Keystore.password.is.too.short.must.be.at.least.6.characters", + "\u91D1\u9470\u5132\u5B58\u5EAB\u5BC6\u78BC\u592A\u77ED - \u5FC5\u9808\u81F3\u5C11\u70BA 6 \u500B\u5B57\u5143"}, + {"Unknown.Entry.Type", "\u4E0D\u660E\u7684\u9805\u76EE\u985E\u578B"}, + {"Too.many.failures.Alias.not.changed", "\u592A\u591A\u932F\u8AA4\u3002\u672A\u8B8A\u66F4\u5225\u540D"}, + {"Entry.for.alias.alias.successfully.imported.", + "\u5DF2\u6210\u529F\u532F\u5165\u5225\u540D {0} \u7684\u9805\u76EE\u3002"}, + {"Entry.for.alias.alias.not.imported.", "\u672A\u532F\u5165\u5225\u540D {0} \u7684\u9805\u76EE\u3002"}, + {"Problem.importing.entry.for.alias.alias.exception.Entry.for.alias.alias.not.imported.", + "\u532F\u5165\u5225\u540D {0} \u7684\u9805\u76EE\u6642\u51FA\u73FE\u554F\u984C: {1}\u3002\n\u672A\u532F\u5165\u5225\u540D {0} \u7684\u9805\u76EE\u3002"}, + {"Import.command.completed.ok.entries.successfully.imported.fail.entries.failed.or.cancelled", + "\u5DF2\u5B8C\u6210\u532F\u5165\u547D\u4EE4: \u6210\u529F\u532F\u5165 {0} \u500B\u9805\u76EE\uFF0C{1} \u500B\u9805\u76EE\u5931\u6557\u6216\u5DF2\u53D6\u6D88"}, + {"Warning.Overwriting.existing.alias.alias.in.destination.keystore", + "\u8B66\u544A: \u6B63\u5728\u8986\u5BEB\u76EE\u7684\u5730\u91D1\u9470\u5132\u5B58\u5EAB\u4E2D\u7684\u73FE\u6709\u5225\u540D {0}"}, + {"Existing.entry.alias.alias.exists.overwrite.no.", + "\u73FE\u6709\u9805\u76EE\u5225\u540D {0} \u5B58\u5728\uFF0C\u662F\u5426\u8986\u5BEB\uFF1F[\u5426]: "}, + {"Too.many.failures.try.later", "\u592A\u591A\u932F\u8AA4 - \u8ACB\u7A0D\u5F8C\u518D\u8A66"}, + {"Certification.request.stored.in.file.filename.", + "\u8A8D\u8B49\u8981\u6C42\u5132\u5B58\u5728\u6A94\u6848 <{0}>"}, + {"Submit.this.to.your.CA", "\u5C07\u6B64\u9001\u51FA\u81F3\u60A8\u7684 CA"}, + {"if.alias.not.specified.destalias.srckeypass.and.destkeypass.must.not.be.specified", + "\u5982\u679C\u672A\u6307\u5B9A\u5225\u540D\uFF0C\u5247\u4E0D\u80FD\u6307\u5B9A destalias\u3001srckeypass \u53CA destkeypass"}, + {"Certificate.stored.in.file.filename.", + "\u6191\u8B49\u5132\u5B58\u5728\u6A94\u6848 <{0}>"}, + {"Certificate.reply.was.installed.in.keystore", + "\u6191\u8B49\u56DE\u8986\u5DF2\u5B89\u88DD\u5728\u91D1\u9470\u5132\u5B58\u5EAB\u4E2D"}, + {"Certificate.reply.was.not.installed.in.keystore", + "\u6191\u8B49\u56DE\u8986\u672A\u5B89\u88DD\u5728\u91D1\u9470\u5132\u5B58\u5EAB\u4E2D"}, + {"Certificate.was.added.to.keystore", + "\u6191\u8B49\u5DF2\u65B0\u589E\u81F3\u91D1\u9470\u5132\u5B58\u5EAB\u4E2D"}, + {"Certificate.was.not.added.to.keystore", + "\u6191\u8B49\u672A\u65B0\u589E\u81F3\u91D1\u9470\u5132\u5B58\u5EAB\u4E2D"}, + {".Storing.ksfname.", "[\u5132\u5B58 {0}]"}, + {"alias.has.no.public.key.certificate.", + "{0} \u6C92\u6709\u516C\u958B\u91D1\u9470 (\u6191\u8B49)"}, + {"Cannot.derive.signature.algorithm", + "\u7121\u6CD5\u53D6\u5F97\u7C3D\u7AE0\u6F14\u7B97\u6CD5"}, + {"Alias.alias.does.not.exist", + "\u5225\u540D <{0}> \u4E0D\u5B58\u5728"}, + {"Alias.alias.has.no.certificate", + "\u5225\u540D <{0}> \u6C92\u6709\u6191\u8B49"}, + {"Key.pair.not.generated.alias.alias.already.exists", + "\u6C92\u6709\u5EFA\u7ACB\u91D1\u9470\u7D44\uFF0C\u5225\u540D <{0}> \u5DF2\u7D93\u5B58\u5728"}, + {"Generating.keysize.bit.keyAlgName.key.pair.and.self.signed.certificate.sigAlgName.with.a.validity.of.validality.days.for", + "\u91DD\u5C0D {4} \u7522\u751F\u6709\u6548\u671F {3} \u5929\u7684 {0} \u4F4D\u5143 {1} \u91D1\u9470\u7D44\u4EE5\u53CA\u81EA\u6211\u7C3D\u7F72\u6191\u8B49 ({2})\n\t"}, + {"Enter.key.password.for.alias.", "\u8F38\u5165 <{0}> \u7684\u91D1\u9470\u5BC6\u78BC"}, + {".RETURN.if.same.as.keystore.password.", + "\t(RETURN \u5982\u679C\u548C\u91D1\u9470\u5132\u5B58\u5EAB\u5BC6\u78BC\u76F8\u540C): "}, + {"Key.password.is.too.short.must.be.at.least.6.characters", + "\u91D1\u9470\u5BC6\u78BC\u592A\u77ED - \u5FC5\u9808\u81F3\u5C11\u70BA 6 \u500B\u5B57\u5143"}, + {"Too.many.failures.key.not.added.to.keystore", + "\u592A\u591A\u932F\u8AA4 - \u91D1\u9470\u672A\u65B0\u589E\u81F3\u91D1\u9470\u5132\u5B58\u5EAB"}, + {"Destination.alias.dest.already.exists", + "\u76EE\u7684\u5730\u5225\u540D <{0}> \u5DF2\u7D93\u5B58\u5728"}, + {"Password.is.too.short.must.be.at.least.6.characters", + "\u5BC6\u78BC\u592A\u77ED - \u5FC5\u9808\u81F3\u5C11\u70BA 6 \u500B\u5B57\u5143"}, + {"Too.many.failures.Key.entry.not.cloned", + "\u592A\u591A\u932F\u8AA4\u3002\u672A\u8907\u88FD\u91D1\u9470\u9805\u76EE"}, + {"key.password.for.alias.", "<{0}> \u7684\u91D1\u9470\u5BC6\u78BC"}, + {"Keystore.entry.for.id.getName.already.exists", + "<{0}> \u7684\u91D1\u9470\u5132\u5B58\u5EAB\u9805\u76EE\u5DF2\u7D93\u5B58\u5728"}, + {"Creating.keystore.entry.for.id.getName.", + "\u5EFA\u7ACB <{0}> \u7684\u91D1\u9470\u5132\u5B58\u5EAB\u9805\u76EE..."}, + {"No.entries.from.identity.database.added", + "\u6C92\u6709\u65B0\u589E\u4F86\u81EA\u8B58\u5225\u8CC7\u6599\u5EAB\u7684\u9805\u76EE"}, + {"Alias.name.alias", "\u5225\u540D\u540D\u7A31: {0}"}, + {"Creation.date.keyStore.getCreationDate.alias.", + "\u5EFA\u7ACB\u65E5\u671F: {0,date}"}, + {"alias.keyStore.getCreationDate.alias.", + "{0}, {1,date}, "}, + {"alias.", "{0}, "}, + {"Entry.type.type.", "\u9805\u76EE\u985E\u578B: {0}"}, + {"Certificate.chain.length.", "\u6191\u8B49\u93C8\u9577\u5EA6: "}, + {"Certificate.i.1.", "\u6191\u8B49 [{0,number,integer}]:"}, + {"Certificate.fingerprint.SHA1.", "\u6191\u8B49\u6307\u7D0B (SHA1): "}, + {"Keystore.type.", "\u91D1\u9470\u5132\u5B58\u5EAB\u985E\u578B: "}, + {"Keystore.provider.", "\u91D1\u9470\u5132\u5B58\u5EAB\u63D0\u4F9B\u8005: "}, + {"Your.keystore.contains.keyStore.size.entry", + "\u60A8\u7684\u91D1\u9470\u5132\u5B58\u5EAB\u5305\u542B {0,number,integer} \u9805\u76EE"}, + {"Your.keystore.contains.keyStore.size.entries", + "\u60A8\u7684\u91D1\u9470\u5132\u5B58\u5EAB\u5305\u542B {0,number,integer} \u9805\u76EE"}, + {"Failed.to.parse.input", "\u7121\u6CD5\u5256\u6790\u8F38\u5165"}, + {"Empty.input", "\u7A7A\u8F38\u5165"}, + {"Not.X.509.certificate", "\u975E X.509 \u6191\u8B49"}, + {"alias.has.no.public.key", "{0} \u7121\u516C\u958B\u91D1\u9470"}, + {"alias.has.no.X.509.certificate", "{0} \u7121 X.509 \u6191\u8B49"}, + {"New.certificate.self.signed.", "\u65B0\u6191\u8B49 (\u81EA\u6211\u7C3D\u7F72): "}, + {"Reply.has.no.certificates", "\u56DE\u8986\u4E0D\u542B\u6191\u8B49"}, + {"Certificate.not.imported.alias.alias.already.exists", + "\u6191\u8B49\u672A\u8F38\u5165\uFF0C\u5225\u540D <{0}> \u5DF2\u7D93\u5B58\u5728"}, + {"Input.not.an.X.509.certificate", "\u8F38\u5165\u7684\u4E0D\u662F X.509 \u6191\u8B49"}, + {"Certificate.already.exists.in.keystore.under.alias.trustalias.", + "\u91D1\u9470\u5132\u5B58\u5EAB\u4E2D\u7684 <{0}> \u5225\u540D\u4E4B\u4E0B\uFF0C\u6191\u8B49\u5DF2\u7D93\u5B58\u5728"}, + {"Do.you.still.want.to.add.it.no.", + "\u60A8\u4ECD\u7136\u60F3\u8981\u5C07\u4E4B\u65B0\u589E\u55CE\uFF1F [\u5426]: "}, + {"Certificate.already.exists.in.system.wide.CA.keystore.under.alias.trustalias.", + "\u6574\u500B\u7CFB\u7D71 CA \u91D1\u9470\u5132\u5B58\u5EAB\u4E2D\u7684 <{0}> \u5225\u540D\u4E4B\u4E0B\uFF0C\u6191\u8B49\u5DF2\u7D93\u5B58\u5728"}, + {"Do.you.still.want.to.add.it.to.your.own.keystore.no.", + "\u60A8\u4ECD\u7136\u60F3\u8981\u5C07\u4E4B\u65B0\u589E\u81F3\u81EA\u5DF1\u7684\u91D1\u9470\u5132\u5B58\u5EAB\u55CE\uFF1F [\u5426]: "}, + {"Trust.this.certificate.no.", "\u4FE1\u4EFB\u9019\u500B\u6191\u8B49\uFF1F [\u5426]: "}, + {"YES", "\u662F"}, + {"New.prompt.", "\u65B0 {0}: "}, + {"Passwords.must.differ", "\u5FC5\u9808\u662F\u4E0D\u540C\u7684\u5BC6\u78BC"}, + {"Re.enter.new.prompt.", "\u91CD\u65B0\u8F38\u5165\u65B0 {0}: "}, + {"Re.enter.new.password.", "\u91CD\u65B0\u8F38\u5165\u65B0\u5BC6\u78BC: "}, + {"They.don.t.match.Try.again", "\u5B83\u5011\u4E0D\u76F8\u7B26\u3002\u8ACB\u91CD\u8A66"}, + {"Enter.prompt.alias.name.", "\u8F38\u5165 {0} \u5225\u540D\u540D\u7A31: "}, + {"Enter.new.alias.name.RETURN.to.cancel.import.for.this.entry.", + "\u8ACB\u8F38\u5165\u65B0\u7684\u5225\u540D\u540D\u7A31\t(RETURN \u4EE5\u53D6\u6D88\u532F\u5165\u6B64\u9805\u76EE):"}, + {"Enter.alias.name.", "\u8F38\u5165\u5225\u540D\u540D\u7A31: "}, + {".RETURN.if.same.as.for.otherAlias.", + "\t(RETURN \u5982\u679C\u548C <{0}> \u7684\u76F8\u540C)"}, + {".PATTERN.printX509Cert", + "\u64C1\u6709\u8005: {0}\n\u767C\u51FA\u8005: {1}\n\u5E8F\u865F: {2}\n\u6709\u6548\u671F\u81EA: {3} \u5230: {4}\n\u6191\u8B49\u6307\u7D0B:\n\t MD5: {5}\n\t SHA1: {6}\n\t SHA256: {7}\n\t \u7C3D\u7AE0\u6F14\u7B97\u6CD5\u540D\u7A31: {8}\n\t \u7248\u672C: {9}"}, + {"What.is.your.first.and.last.name.", + "\u60A8\u7684\u540D\u5B57\u8207\u59D3\u6C0F\u70BA\u4F55\uFF1F"}, + {"What.is.the.name.of.your.organizational.unit.", + "\u60A8\u7684\u7D44\u7E54\u55AE\u4F4D\u540D\u7A31\u70BA\u4F55\uFF1F"}, + {"What.is.the.name.of.your.organization.", + "\u60A8\u7684\u7D44\u7E54\u540D\u7A31\u70BA\u4F55\uFF1F"}, + {"What.is.the.name.of.your.City.or.Locality.", + "\u60A8\u6240\u5728\u7684\u57CE\u5E02\u6216\u5730\u5340\u540D\u7A31\u70BA\u4F55\uFF1F"}, + {"What.is.the.name.of.your.State.or.Province.", + "\u60A8\u6240\u5728\u7684\u5DDE\u53CA\u7701\u4EFD\u540D\u7A31\u70BA\u4F55\uFF1F"}, + {"What.is.the.two.letter.country.code.for.this.unit.", + "\u6B64\u55AE\u4F4D\u7684\u5169\u500B\u5B57\u6BCD\u570B\u5225\u4EE3\u78BC\u70BA\u4F55\uFF1F"}, + {"Is.name.correct.", "{0} \u6B63\u78BA\u55CE\uFF1F"}, + {"no", "\u5426"}, + {"yes", "\u662F"}, + {"y", "y"}, + {".defaultValue.", " [{0}]: "}, + {"Alias.alias.has.no.key", + "\u5225\u540D <{0}> \u6C92\u6709\u91D1\u9470"}, + {"Alias.alias.references.an.entry.type.that.is.not.a.private.key.entry.The.keyclone.command.only.supports.cloning.of.private.key", + "\u5225\u540D <{0}> \u6240\u53C3\u7167\u7684\u9805\u76EE\u4E0D\u662F\u79C1\u5BC6\u91D1\u9470\u985E\u578B\u3002-keyclone \u547D\u4EE4\u50C5\u652F\u63F4\u79C1\u5BC6\u91D1\u9470\u9805\u76EE\u7684\u8907\u88FD"}, + + {".WARNING.WARNING.WARNING.", + "***************** \u8B66\u544A \u8B66\u544A \u8B66\u544A *****************"}, + {"Signer.d.", "\u7C3D\u7F72\u8005 #%d:"}, + {"Timestamp.", "\u6642\u6233:"}, + {"Signature.", "\u7C3D\u7AE0:"}, + {"CRLs.", "CRL:"}, + {"Certificate.owner.", "\u6191\u8B49\u64C1\u6709\u8005: "}, + {"Not.a.signed.jar.file", "\u4E0D\u662F\u7C3D\u7F72\u7684 jar \u6A94\u6848"}, + {"No.certificate.from.the.SSL.server", + "\u6C92\u6709\u4F86\u81EA SSL \u4F3A\u670D\u5668\u7684\u6191\u8B49"}, + + {".The.integrity.of.the.information.stored.in.your.keystore.", + "* \u5C1A\u672A\u9A57\u8B49\u5132\u5B58\u65BC\u91D1\u9470\u5132\u5B58\u5EAB\u4E2D\u8CC7\u8A0A *\n* \u7684\u5B8C\u6574\u6027\uFF01\u82E5\u8981\u9A57\u8B49\u5176\u5B8C\u6574\u6027\uFF0C*\n* \u60A8\u5FC5\u9808\u63D0\u4F9B\u60A8\u7684\u91D1\u9470\u5132\u5B58\u5EAB\u5BC6\u78BC\u3002 *"}, + {".The.integrity.of.the.information.stored.in.the.srckeystore.", + "* \u5C1A\u672A\u9A57\u8B49\u5132\u5B58\u65BC srckeystore \u4E2D\u8CC7\u8A0A*\n* \u7684\u5B8C\u6574\u6027\uFF01\u82E5\u8981\u9A57\u8B49\u5176\u5B8C\u6574\u6027\uFF0C\u60A8\u5FC5\u9808 *\n* \u63D0\u4F9B srckeystore \u5BC6\u78BC\u3002 *"}, + + {"Certificate.reply.does.not.contain.public.key.for.alias.", + "\u6191\u8B49\u56DE\u8986\u4E26\u672A\u5305\u542B <{0}> \u7684\u516C\u958B\u91D1\u9470"}, + {"Incomplete.certificate.chain.in.reply", + "\u56DE\u8986\u6642\u7684\u6191\u8B49\u93C8\u4E0D\u5B8C\u6574"}, + {"Certificate.chain.in.reply.does.not.verify.", + "\u56DE\u8986\u6642\u7684\u6191\u8B49\u93C8\u672A\u9A57\u8B49: "}, + {"Top.level.certificate.in.reply.", + "\u56DE\u8986\u6642\u7684\u6700\u9AD8\u7D1A\u6191\u8B49:\\n"}, + {".is.not.trusted.", "... \u662F\u4E0D\u88AB\u4FE1\u4EFB\u7684\u3002"}, + {"Install.reply.anyway.no.", "\u9084\u662F\u8981\u5B89\u88DD\u56DE\u8986\uFF1F [\u5426]: "}, + {"NO", "\u5426"}, + {"Public.keys.in.reply.and.keystore.don.t.match", + "\u56DE\u8986\u6642\u7684\u516C\u958B\u91D1\u9470\u8207\u91D1\u9470\u5132\u5B58\u5EAB\u4E0D\u7B26"}, + {"Certificate.reply.and.certificate.in.keystore.are.identical", + "\u6191\u8B49\u56DE\u8986\u8207\u91D1\u9470\u5132\u5B58\u5EAB\u4E2D\u7684\u6191\u8B49\u662F\u76F8\u540C\u7684"}, + {"Failed.to.establish.chain.from.reply", + "\u7121\u6CD5\u5F9E\u56DE\u8986\u4E2D\u5C07\u93C8\u5EFA\u7ACB\u8D77\u4F86"}, + {"n", "n"}, + {"Wrong.answer.try.again", "\u932F\u8AA4\u7684\u7B54\u6848\uFF0C\u8ACB\u518D\u8A66\u4E00\u6B21"}, + {"Secret.key.not.generated.alias.alias.already.exists", + "\u672A\u7522\u751F\u79D8\u5BC6\u91D1\u9470\uFF0C\u5225\u540D <{0}> \u5DF2\u5B58\u5728"}, + {"Please.provide.keysize.for.secret.key.generation", + "\u8ACB\u63D0\u4F9B -keysize \u4EE5\u7522\u751F\u79D8\u5BC6\u91D1\u9470"}, + + {"Extensions.", "\u64F4\u5145\u5957\u4EF6: "}, + {".Empty.value.", "(\u7A7A\u767D\u503C)"}, + {"Extension.Request.", "\u64F4\u5145\u5957\u4EF6\u8981\u6C42:"}, + {"PKCS.10.Certificate.Request.Version.1.0.Subject.s.Public.Key.s.format.s.key.", + "PKCS #10 \u6191\u8B49\u8981\u6C42 (\u7248\u672C 1.0)\n\u4E3B\u9AD4: %s\n\u516C\u7528\u91D1\u9470: %s \u683C\u5F0F %s \u91D1\u9470\n"}, + {"Unknown.keyUsage.type.", "\u4E0D\u660E\u7684 keyUsage \u985E\u578B: "}, + {"Unknown.extendedkeyUsage.type.", "\u4E0D\u660E\u7684 extendedkeyUsage \u985E\u578B: "}, + {"Unknown.AccessDescription.type.", "\u4E0D\u660E\u7684 AccessDescription \u985E\u578B: "}, + {"Unrecognized.GeneralName.type.", "\u7121\u6CD5\u8FA8\u8B58\u7684 GeneralName \u985E\u578B: "}, + {"This.extension.cannot.be.marked.as.critical.", + "\u6B64\u64F4\u5145\u5957\u4EF6\u7121\u6CD5\u6A19\u793A\u70BA\u95DC\u9375\u3002"}, + {"Odd.number.of.hex.digits.found.", "\u627E\u5230\u5341\u516D\u9032\u4F4D\u6578\u5B57\u7684\u5947\u6578: "}, + {"Unknown.extension.type.", "\u4E0D\u660E\u7684\u64F4\u5145\u5957\u4EF6\u985E\u578B: "}, + {"command.{0}.is.ambiguous.", "\u547D\u4EE4 {0} \u4E0D\u660E\u78BA:"} + }; + + + /** + * Returns the contents of this ResourceBundle. + * + *

+ * + * @return the contents of this ResourceBundle. + */ + @Override + public Object[][] getContents() { + return contents; + } +} diff --git a/jdk/src/share/classes/sun/security/tools/keytool/Resources_zh_TW.java b/jdk/src/share/classes/sun/security/tools/keytool/Resources_zh_TW.java new file mode 100644 index 00000000000..2c7bdf5e1b7 --- /dev/null +++ b/jdk/src/share/classes/sun/security/tools/keytool/Resources_zh_TW.java @@ -0,0 +1,431 @@ +/* + * Copyright (c) 2000, 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. 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.security.tools.keytool; + +/** + *

This class represents the ResourceBundle + * for the keytool. + * + */ +public class Resources_zh_TW extends java.util.ListResourceBundle { + + private static final Object[][] contents = { + {"NEWLINE", "\n"}, + {"STAR", + "*******************************************"}, + {"STARNN", + "*******************************************\n\n"}, + + // keytool: Help part +// "Option" should be translated. + {".OPTION.", " [\u9078\u9805]..."}, + {"Options.", "\u9078\u9805:"}, + {"Use.keytool.help.for.all.available.commands", + "\u4F7F\u7528 \"keytool -help\" \u53D6\u5F97\u6240\u6709\u53EF\u7528\u7684\u547D\u4EE4"}, + {"Key.and.Certificate.Management.Tool", + "\u91D1\u9470\u8207\u6191\u8B49\u7BA1\u7406\u5DE5\u5177"}, + {"Commands.", "\u547D\u4EE4:"}, + {"Use.keytool.command.name.help.for.usage.of.command.name", + "\u4F7F\u7528 \"keytool -command_name -help\" \u53D6\u5F97 command_name \u7684\u7528\u6CD5"}, + // keytool: help: commands + {"Generates.a.certificate.request", + "\u7522\u751F\u6191\u8B49\u8981\u6C42"}, //-certreq + {"Changes.an.entry.s.alias", + "\u8B8A\u66F4\u9805\u76EE\u7684\u5225\u540D"}, //-changealias + {"Deletes.an.entry", + "\u522A\u9664\u9805\u76EE"}, //-delete + {"Exports.certificate", + "\u532F\u51FA\u6191\u8B49"}, //-exportcert + {"Generates.a.key.pair", + "\u7522\u751F\u91D1\u9470\u7D44"}, //-genkeypair +// translation of "secret" key should be different to "private" key. + {"Generates.a.secret.key", + "\u7522\u751F\u79D8\u5BC6\u91D1\u9470"}, //-genseckey + {"Generates.certificate.from.a.certificate.request", + "\u5F9E\u6191\u8B49\u8981\u6C42\u7522\u751F\u6191\u8B49"}, //-gencert + {"Generates.CRL", "\u7522\u751F CRL"}, //-gencrl + {"Imports.entries.from.a.JDK.1.1.x.style.identity.database", + "\u5F9E JDK 1.1.x-style \u8B58\u5225\u8CC7\u6599\u5EAB\u532F\u5165\u9805\u76EE"}, //-identitydb + {"Imports.a.certificate.or.a.certificate.chain", + "\u532F\u5165\u6191\u8B49\u6216\u6191\u8B49\u93C8"}, //-importcert + {"Imports.one.or.all.entries.from.another.keystore", + "\u5F9E\u5176\u4ED6\u91D1\u9470\u5132\u5B58\u5EAB\u532F\u5165\u4E00\u500B\u6216\u5168\u90E8\u9805\u76EE"}, //-importkeystore + {"Clones.a.key.entry", + "\u8907\u88FD\u91D1\u9470\u9805\u76EE"}, //-keyclone + {"Changes.the.key.password.of.an.entry", + "\u8B8A\u66F4\u9805\u76EE\u7684\u91D1\u9470\u5BC6\u78BC"}, //-keypasswd + {"Lists.entries.in.a.keystore", + "\u5217\u793A\u91D1\u9470\u5132\u5B58\u5EAB\u4E2D\u7684\u9805\u76EE"}, //-list + {"Prints.the.content.of.a.certificate", + "\u5217\u5370\u6191\u8B49\u7684\u5167\u5BB9"}, //-printcert + {"Prints.the.content.of.a.certificate.request", + "\u5217\u5370\u6191\u8B49\u8981\u6C42\u7684\u5167\u5BB9"}, //-printcertreq + {"Prints.the.content.of.a.CRL.file", + "\u5217\u5370 CRL \u6A94\u6848\u7684\u5167\u5BB9"}, //-printcrl + {"Generates.a.self.signed.certificate", + "\u7522\u751F\u81EA\u884C\u7C3D\u7F72\u7684\u6191\u8B49"}, //-selfcert + {"Changes.the.store.password.of.a.keystore", + "\u8B8A\u66F4\u91D1\u9470\u5132\u5B58\u5EAB\u7684\u5132\u5B58\u5BC6\u78BC"}, //-storepasswd + // keytool: help: options + {"alias.name.of.the.entry.to.process", + "\u8981\u8655\u7406\u9805\u76EE\u7684\u5225\u540D\u540D\u7A31"}, //-alias + {"destination.alias", + "\u76EE\u7684\u5730\u5225\u540D"}, //-destalias + {"destination.key.password", + "\u76EE\u7684\u5730\u91D1\u9470\u5BC6\u78BC"}, //-destkeypass + {"destination.keystore.name", + "\u76EE\u7684\u5730\u91D1\u9470\u5132\u5B58\u5EAB\u540D\u7A31"}, //-destkeystore + {"destination.keystore.password.protected", + "\u76EE\u7684\u5730\u91D1\u9470\u5132\u5B58\u5EAB\u5BC6\u78BC\u4FDD\u8B77"}, //-destprotected + {"destination.keystore.provider.name", + "\u76EE\u7684\u5730\u91D1\u9470\u5132\u5B58\u5EAB\u63D0\u4F9B\u8005\u540D\u7A31"}, //-destprovidername + {"destination.keystore.password", + "\u76EE\u7684\u5730\u91D1\u9470\u5132\u5B58\u5EAB\u5BC6\u78BC"}, //-deststorepass + {"destination.keystore.type", + "\u76EE\u7684\u5730\u91D1\u9470\u5132\u5B58\u5EAB\u985E\u578B"}, //-deststoretype + {"distinguished.name", + "\u8FA8\u5225\u540D\u7A31"}, //-dname + {"X.509.extension", + "X.509 \u64F4\u5145\u5957\u4EF6"}, //-ext + {"output.file.name", + "\u8F38\u51FA\u6A94\u6848\u540D\u7A31"}, //-file and -outfile + {"input.file.name", + "\u8F38\u5165\u6A94\u6848\u540D\u7A31"}, //-file and -infile + {"key.algorithm.name", + "\u91D1\u9470\u6F14\u7B97\u6CD5\u540D\u7A31"}, //-keyalg + {"key.password", + "\u91D1\u9470\u5BC6\u78BC"}, //-keypass + {"key.bit.size", + "\u91D1\u9470\u4F4D\u5143\u5927\u5C0F"}, //-keysize + {"keystore.name", + "\u91D1\u9470\u5132\u5B58\u5EAB\u540D\u7A31"}, //-keystore + {"new.password", + "\u65B0\u5BC6\u78BC"}, //-new + {"do.not.prompt", + "\u4E0D\u8981\u63D0\u793A"}, //-noprompt + {"password.through.protected.mechanism", + "\u7D93\u7531\u4FDD\u8B77\u6A5F\u5236\u7684\u5BC6\u78BC"}, //-protected + {"provider.argument", + "\u63D0\u4F9B\u8005\u5F15\u6578"}, //-providerarg + {"provider.class.name", + "\u63D0\u4F9B\u8005\u985E\u5225\u540D\u7A31"}, //-providerclass + {"provider.name", + "\u63D0\u4F9B\u8005\u540D\u7A31"}, //-providername + {"provider.classpath", + "\u63D0\u4F9B\u8005\u985E\u5225\u8DEF\u5F91"}, //-providerpath + {"output.in.RFC.style", + "\u4EE5 RFC \u6A23\u5F0F\u8F38\u51FA"}, //-rfc + {"signature.algorithm.name", + "\u7C3D\u7AE0\u6F14\u7B97\u6CD5\u540D\u7A31"}, //-sigalg + {"source.alias", + "\u4F86\u6E90\u5225\u540D"}, //-srcalias + {"source.key.password", + "\u4F86\u6E90\u91D1\u9470\u5BC6\u78BC"}, //-srckeypass + {"source.keystore.name", + "\u4F86\u6E90\u91D1\u9470\u5132\u5B58\u5EAB\u540D\u7A31"}, //-srckeystore + {"source.keystore.password.protected", + "\u4F86\u6E90\u91D1\u9470\u5132\u5B58\u5EAB\u5BC6\u78BC\u4FDD\u8B77"}, //-srcprotected + {"source.keystore.provider.name", + "\u4F86\u6E90\u91D1\u9470\u5132\u5B58\u5EAB\u63D0\u4F9B\u8005\u540D\u7A31"}, //-srcprovidername + {"source.keystore.password", + "\u4F86\u6E90\u91D1\u9470\u5132\u5B58\u5EAB\u5BC6\u78BC"}, //-srcstorepass + {"source.keystore.type", + "\u4F86\u6E90\u91D1\u9470\u5132\u5B58\u5EAB\u985E\u578B"}, //-srcstoretype + {"SSL.server.host.and.port", + "SSL \u4F3A\u670D\u5668\u4E3B\u6A5F\u8207\u9023\u63A5\u57E0"}, //-sslserver + {"signed.jar.file", + "\u7C3D\u7F72\u7684 jar \u6A94\u6848"}, //=jarfile + {"certificate.validity.start.date.time", + "\u6191\u8B49\u6709\u6548\u6027\u958B\u59CB\u65E5\u671F/\u6642\u9593"}, //-startdate + {"keystore.password", + "\u91D1\u9470\u5132\u5B58\u5EAB\u5BC6\u78BC"}, //-storepass + {"keystore.type", + "\u91D1\u9470\u5132\u5B58\u5EAB\u985E\u578B"}, //-storetype + {"trust.certificates.from.cacerts", + "\u4F86\u81EA cacerts \u7684\u4FE1\u4EFB\u6191\u8B49"}, //-trustcacerts + {"verbose.output", + "\u8A73\u7D30\u8CC7\u8A0A\u8F38\u51FA"}, //-v + {"validity.number.of.days", + "\u6709\u6548\u6027\u65E5\u6578"}, //-validity + {"Serial.ID.of.cert.to.revoke", + "\u8981\u64A4\u92B7\u6191\u8B49\u7684\u5E8F\u5217 ID"}, //-id + // keytool: Running part + {"keytool.error.", "\u91D1\u9470\u5DE5\u5177\u932F\u8AA4: "}, + {"Illegal.option.", "\u7121\u6548\u7684\u9078\u9805:"}, + {"Illegal.value.", "\u7121\u6548\u503C: "}, + {"Unknown.password.type.", "\u4E0D\u660E\u7684\u5BC6\u78BC\u985E\u578B: "}, + {"Cannot.find.environment.variable.", + "\u627E\u4E0D\u5230\u74B0\u5883\u8B8A\u6578: "}, + {"Cannot.find.file.", "\u627E\u4E0D\u5230\u6A94\u6848: "}, + {"Command.option.flag.needs.an.argument.", "\u547D\u4EE4\u9078\u9805 {0} \u9700\u8981\u5F15\u6578\u3002"}, + {"Warning.Different.store.and.key.passwords.not.supported.for.PKCS12.KeyStores.Ignoring.user.specified.command.value.", + "\u8B66\u544A: PKCS12 \u91D1\u9470\u5132\u5B58\u5EAB\u4E0D\u652F\u63F4\u4E0D\u540C\u7684\u5132\u5B58\u5EAB\u548C\u91D1\u9470\u5BC6\u78BC\u3002\u5FFD\u7565\u4F7F\u7528\u8005\u6307\u5B9A\u7684 {0} \u503C\u3002"}, + {".keystore.must.be.NONE.if.storetype.is.{0}", + "\u5982\u679C -storetype \u70BA {0}\uFF0C\u5247 -keystore \u5FC5\u9808\u70BA NONE"}, + {"Too.many.retries.program.terminated", + "\u91CD\u8A66\u6B21\u6578\u592A\u591A\uFF0C\u7A0B\u5F0F\u5DF2\u7D42\u6B62"}, + {".storepasswd.and.keypasswd.commands.not.supported.if.storetype.is.{0}", + "\u5982\u679C -storetype \u70BA {0}\uFF0C\u5247\u4E0D\u652F\u63F4 -storepasswd \u548C -keypasswd \u547D\u4EE4"}, + {".keypasswd.commands.not.supported.if.storetype.is.PKCS12", + "\u5982\u679C -storetype \u70BA PKCS12\uFF0C\u5247\u4E0D\u652F\u63F4 -keypasswd \u547D\u4EE4"}, + {".keypass.and.new.can.not.be.specified.if.storetype.is.{0}", + "\u5982\u679C -storetype \u70BA {0}\uFF0C\u5247\u4E0D\u80FD\u6307\u5B9A -keypass \u548C -new"}, + {"if.protected.is.specified.then.storepass.keypass.and.new.must.not.be.specified", + "\u5982\u679C\u6307\u5B9A -protected\uFF0C\u5247\u4E0D\u80FD\u6307\u5B9A -storepass\u3001-keypass \u548C -new"}, + {"if.srcprotected.is.specified.then.srcstorepass.and.srckeypass.must.not.be.specified", + "\u5982\u679C\u6307\u5B9A -srcprotected\uFF0C\u5247\u4E0D\u80FD\u6307\u5B9A -srcstorepass \u548C -srckeypass"}, + {"if.keystore.is.not.password.protected.then.storepass.keypass.and.new.must.not.be.specified", + "\u5982\u679C\u91D1\u9470\u5132\u5B58\u5EAB\u4E0D\u53D7\u5BC6\u78BC\u4FDD\u8B77\uFF0C\u5247\u4E0D\u80FD\u6307\u5B9A -storepass\u3001-keypass \u548C -new"}, + {"if.source.keystore.is.not.password.protected.then.srcstorepass.and.srckeypass.must.not.be.specified", + "\u5982\u679C\u4F86\u6E90\u91D1\u9470\u5132\u5B58\u5EAB\u4E0D\u53D7\u5BC6\u78BC\u4FDD\u8B77\uFF0C\u5247\u4E0D\u80FD\u6307\u5B9A -srcstorepass \u548C -srckeypass"}, + {"Illegal.startdate.value", "\u7121\u6548\u7684 startdate \u503C"}, + {"Validity.must.be.greater.than.zero", + "\u6709\u6548\u6027\u5FC5\u9808\u5927\u65BC\u96F6"}, + {"provName.not.a.provider", "{0} \u4E0D\u662F\u4E00\u500B\u63D0\u4F9B\u8005"}, + {"Usage.error.no.command.provided", "\u7528\u6CD5\u932F\u8AA4: \u672A\u63D0\u4F9B\u547D\u4EE4"}, + {"Source.keystore.file.exists.but.is.empty.", "\u4F86\u6E90\u91D1\u9470\u5132\u5B58\u5EAB\u6A94\u6848\u5B58\u5728\uFF0C\u4F46\u70BA\u7A7A: "}, + {"Please.specify.srckeystore", "\u8ACB\u6307\u5B9A -srckeystore"}, + {"Must.not.specify.both.v.and.rfc.with.list.command", + " 'list' \u547D\u4EE4\u4E0D\u80FD\u540C\u6642\u6307\u5B9A -v \u53CA -rfc"}, + {"Key.password.must.be.at.least.6.characters", + "\u91D1\u9470\u5BC6\u78BC\u5FC5\u9808\u81F3\u5C11\u70BA 6 \u500B\u5B57\u5143"}, + {"New.password.must.be.at.least.6.characters", + "\u65B0\u7684\u5BC6\u78BC\u5FC5\u9808\u81F3\u5C11\u70BA 6 \u500B\u5B57\u5143"}, + {"Keystore.file.exists.but.is.empty.", + "\u91D1\u9470\u5132\u5B58\u5EAB\u6A94\u6848\u5B58\u5728\uFF0C\u4F46\u70BA\u7A7A\u767D: "}, + {"Keystore.file.does.not.exist.", + "\u91D1\u9470\u5132\u5B58\u5EAB\u6A94\u6848\u4E0D\u5B58\u5728: "}, + {"Must.specify.destination.alias", "\u5FC5\u9808\u6307\u5B9A\u76EE\u7684\u5730\u5225\u540D"}, + {"Must.specify.alias", "\u5FC5\u9808\u6307\u5B9A\u5225\u540D"}, + {"Keystore.password.must.be.at.least.6.characters", + "\u91D1\u9470\u5132\u5B58\u5EAB\u5BC6\u78BC\u5FC5\u9808\u81F3\u5C11\u70BA 6 \u500B\u5B57\u5143"}, + {"Enter.keystore.password.", "\u8F38\u5165\u91D1\u9470\u5132\u5B58\u5EAB\u5BC6\u78BC: "}, + {"Enter.source.keystore.password.", "\u8ACB\u8F38\u5165\u4F86\u6E90\u91D1\u9470\u5132\u5B58\u5EAB\u5BC6\u78BC: "}, + {"Enter.destination.keystore.password.", "\u8ACB\u8F38\u5165\u76EE\u7684\u5730\u91D1\u9470\u5132\u5B58\u5EAB\u5BC6\u78BC: "}, + {"Keystore.password.is.too.short.must.be.at.least.6.characters", + "\u91D1\u9470\u5132\u5B58\u5EAB\u5BC6\u78BC\u592A\u77ED - \u5FC5\u9808\u81F3\u5C11\u70BA 6 \u500B\u5B57\u5143"}, + {"Unknown.Entry.Type", "\u4E0D\u660E\u7684\u9805\u76EE\u985E\u578B"}, + {"Too.many.failures.Alias.not.changed", "\u592A\u591A\u932F\u8AA4\u3002\u672A\u8B8A\u66F4\u5225\u540D"}, + {"Entry.for.alias.alias.successfully.imported.", + "\u5DF2\u6210\u529F\u532F\u5165\u5225\u540D {0} \u7684\u9805\u76EE\u3002"}, + {"Entry.for.alias.alias.not.imported.", "\u672A\u532F\u5165\u5225\u540D {0} \u7684\u9805\u76EE\u3002"}, + {"Problem.importing.entry.for.alias.alias.exception.Entry.for.alias.alias.not.imported.", + "\u532F\u5165\u5225\u540D {0} \u7684\u9805\u76EE\u6642\u51FA\u73FE\u554F\u984C: {1}\u3002\n\u672A\u532F\u5165\u5225\u540D {0} \u7684\u9805\u76EE\u3002"}, + {"Import.command.completed.ok.entries.successfully.imported.fail.entries.failed.or.cancelled", + "\u5DF2\u5B8C\u6210\u532F\u5165\u547D\u4EE4: \u6210\u529F\u532F\u5165 {0} \u500B\u9805\u76EE\uFF0C{1} \u500B\u9805\u76EE\u5931\u6557\u6216\u5DF2\u53D6\u6D88"}, + {"Warning.Overwriting.existing.alias.alias.in.destination.keystore", + "\u8B66\u544A: \u6B63\u5728\u8986\u5BEB\u76EE\u7684\u5730\u91D1\u9470\u5132\u5B58\u5EAB\u4E2D\u7684\u73FE\u6709\u5225\u540D {0}"}, + {"Existing.entry.alias.alias.exists.overwrite.no.", + "\u73FE\u6709\u9805\u76EE\u5225\u540D {0} \u5B58\u5728\uFF0C\u662F\u5426\u8986\u5BEB\uFF1F[\u5426]: "}, + {"Too.many.failures.try.later", "\u592A\u591A\u932F\u8AA4 - \u8ACB\u7A0D\u5F8C\u518D\u8A66"}, + {"Certification.request.stored.in.file.filename.", + "\u8A8D\u8B49\u8981\u6C42\u5132\u5B58\u5728\u6A94\u6848 <{0}>"}, + {"Submit.this.to.your.CA", "\u5C07\u6B64\u9001\u51FA\u81F3\u60A8\u7684 CA"}, + {"if.alias.not.specified.destalias.srckeypass.and.destkeypass.must.not.be.specified", + "\u5982\u679C\u672A\u6307\u5B9A\u5225\u540D\uFF0C\u5247\u4E0D\u80FD\u6307\u5B9A destalias\u3001srckeypass \u53CA destkeypass"}, + {"Certificate.stored.in.file.filename.", + "\u6191\u8B49\u5132\u5B58\u5728\u6A94\u6848 <{0}>"}, + {"Certificate.reply.was.installed.in.keystore", + "\u6191\u8B49\u56DE\u8986\u5DF2\u5B89\u88DD\u5728\u91D1\u9470\u5132\u5B58\u5EAB\u4E2D"}, + {"Certificate.reply.was.not.installed.in.keystore", + "\u6191\u8B49\u56DE\u8986\u672A\u5B89\u88DD\u5728\u91D1\u9470\u5132\u5B58\u5EAB\u4E2D"}, + {"Certificate.was.added.to.keystore", + "\u6191\u8B49\u5DF2\u65B0\u589E\u81F3\u91D1\u9470\u5132\u5B58\u5EAB\u4E2D"}, + {"Certificate.was.not.added.to.keystore", + "\u6191\u8B49\u672A\u65B0\u589E\u81F3\u91D1\u9470\u5132\u5B58\u5EAB\u4E2D"}, + {".Storing.ksfname.", "[\u5132\u5B58 {0}]"}, + {"alias.has.no.public.key.certificate.", + "{0} \u6C92\u6709\u516C\u958B\u91D1\u9470 (\u6191\u8B49)"}, + {"Cannot.derive.signature.algorithm", + "\u7121\u6CD5\u53D6\u5F97\u7C3D\u7AE0\u6F14\u7B97\u6CD5"}, + {"Alias.alias.does.not.exist", + "\u5225\u540D <{0}> \u4E0D\u5B58\u5728"}, + {"Alias.alias.has.no.certificate", + "\u5225\u540D <{0}> \u6C92\u6709\u6191\u8B49"}, + {"Key.pair.not.generated.alias.alias.already.exists", + "\u6C92\u6709\u5EFA\u7ACB\u91D1\u9470\u7D44\uFF0C\u5225\u540D <{0}> \u5DF2\u7D93\u5B58\u5728"}, + {"Generating.keysize.bit.keyAlgName.key.pair.and.self.signed.certificate.sigAlgName.with.a.validity.of.validality.days.for", + "\u91DD\u5C0D {4} \u7522\u751F\u6709\u6548\u671F {3} \u5929\u7684 {0} \u4F4D\u5143 {1} \u91D1\u9470\u7D44\u4EE5\u53CA\u81EA\u6211\u7C3D\u7F72\u6191\u8B49 ({2})\n\t"}, + {"Enter.key.password.for.alias.", "\u8F38\u5165 <{0}> \u7684\u91D1\u9470\u5BC6\u78BC"}, + {".RETURN.if.same.as.keystore.password.", + "\t(RETURN \u5982\u679C\u548C\u91D1\u9470\u5132\u5B58\u5EAB\u5BC6\u78BC\u76F8\u540C): "}, + {"Key.password.is.too.short.must.be.at.least.6.characters", + "\u91D1\u9470\u5BC6\u78BC\u592A\u77ED - \u5FC5\u9808\u81F3\u5C11\u70BA 6 \u500B\u5B57\u5143"}, + {"Too.many.failures.key.not.added.to.keystore", + "\u592A\u591A\u932F\u8AA4 - \u91D1\u9470\u672A\u65B0\u589E\u81F3\u91D1\u9470\u5132\u5B58\u5EAB"}, + {"Destination.alias.dest.already.exists", + "\u76EE\u7684\u5730\u5225\u540D <{0}> \u5DF2\u7D93\u5B58\u5728"}, + {"Password.is.too.short.must.be.at.least.6.characters", + "\u5BC6\u78BC\u592A\u77ED - \u5FC5\u9808\u81F3\u5C11\u70BA 6 \u500B\u5B57\u5143"}, + {"Too.many.failures.Key.entry.not.cloned", + "\u592A\u591A\u932F\u8AA4\u3002\u672A\u8907\u88FD\u91D1\u9470\u9805\u76EE"}, + {"key.password.for.alias.", "<{0}> \u7684\u91D1\u9470\u5BC6\u78BC"}, + {"Keystore.entry.for.id.getName.already.exists", + "<{0}> \u7684\u91D1\u9470\u5132\u5B58\u5EAB\u9805\u76EE\u5DF2\u7D93\u5B58\u5728"}, + {"Creating.keystore.entry.for.id.getName.", + "\u5EFA\u7ACB <{0}> \u7684\u91D1\u9470\u5132\u5B58\u5EAB\u9805\u76EE..."}, + {"No.entries.from.identity.database.added", + "\u6C92\u6709\u65B0\u589E\u4F86\u81EA\u8B58\u5225\u8CC7\u6599\u5EAB\u7684\u9805\u76EE"}, + {"Alias.name.alias", "\u5225\u540D\u540D\u7A31: {0}"}, + {"Creation.date.keyStore.getCreationDate.alias.", + "\u5EFA\u7ACB\u65E5\u671F: {0,date}"}, + {"alias.keyStore.getCreationDate.alias.", + "{0}, {1,date}, "}, + {"alias.", "{0}, "}, + {"Entry.type.type.", "\u9805\u76EE\u985E\u578B: {0}"}, + {"Certificate.chain.length.", "\u6191\u8B49\u93C8\u9577\u5EA6: "}, + {"Certificate.i.1.", "\u6191\u8B49 [{0,number,integer}]:"}, + {"Certificate.fingerprint.SHA1.", "\u6191\u8B49\u6307\u7D0B (SHA1): "}, + {"Keystore.type.", "\u91D1\u9470\u5132\u5B58\u5EAB\u985E\u578B: "}, + {"Keystore.provider.", "\u91D1\u9470\u5132\u5B58\u5EAB\u63D0\u4F9B\u8005: "}, + {"Your.keystore.contains.keyStore.size.entry", + "\u60A8\u7684\u91D1\u9470\u5132\u5B58\u5EAB\u5305\u542B {0,number,integer} \u9805\u76EE"}, + {"Your.keystore.contains.keyStore.size.entries", + "\u60A8\u7684\u91D1\u9470\u5132\u5B58\u5EAB\u5305\u542B {0,number,integer} \u9805\u76EE"}, + {"Failed.to.parse.input", "\u7121\u6CD5\u5256\u6790\u8F38\u5165"}, + {"Empty.input", "\u7A7A\u8F38\u5165"}, + {"Not.X.509.certificate", "\u975E X.509 \u6191\u8B49"}, + {"alias.has.no.public.key", "{0} \u7121\u516C\u958B\u91D1\u9470"}, + {"alias.has.no.X.509.certificate", "{0} \u7121 X.509 \u6191\u8B49"}, + {"New.certificate.self.signed.", "\u65B0\u6191\u8B49 (\u81EA\u6211\u7C3D\u7F72): "}, + {"Reply.has.no.certificates", "\u56DE\u8986\u4E0D\u542B\u6191\u8B49"}, + {"Certificate.not.imported.alias.alias.already.exists", + "\u6191\u8B49\u672A\u8F38\u5165\uFF0C\u5225\u540D <{0}> \u5DF2\u7D93\u5B58\u5728"}, + {"Input.not.an.X.509.certificate", "\u8F38\u5165\u7684\u4E0D\u662F X.509 \u6191\u8B49"}, + {"Certificate.already.exists.in.keystore.under.alias.trustalias.", + "\u91D1\u9470\u5132\u5B58\u5EAB\u4E2D\u7684 <{0}> \u5225\u540D\u4E4B\u4E0B\uFF0C\u6191\u8B49\u5DF2\u7D93\u5B58\u5728"}, + {"Do.you.still.want.to.add.it.no.", + "\u60A8\u4ECD\u7136\u60F3\u8981\u5C07\u4E4B\u65B0\u589E\u55CE\uFF1F [\u5426]: "}, + {"Certificate.already.exists.in.system.wide.CA.keystore.under.alias.trustalias.", + "\u6574\u500B\u7CFB\u7D71 CA \u91D1\u9470\u5132\u5B58\u5EAB\u4E2D\u7684 <{0}> \u5225\u540D\u4E4B\u4E0B\uFF0C\u6191\u8B49\u5DF2\u7D93\u5B58\u5728"}, + {"Do.you.still.want.to.add.it.to.your.own.keystore.no.", + "\u60A8\u4ECD\u7136\u60F3\u8981\u5C07\u4E4B\u65B0\u589E\u81F3\u81EA\u5DF1\u7684\u91D1\u9470\u5132\u5B58\u5EAB\u55CE\uFF1F [\u5426]: "}, + {"Trust.this.certificate.no.", "\u4FE1\u4EFB\u9019\u500B\u6191\u8B49\uFF1F [\u5426]: "}, + {"YES", "\u662F"}, + {"New.prompt.", "\u65B0 {0}: "}, + {"Passwords.must.differ", "\u5FC5\u9808\u662F\u4E0D\u540C\u7684\u5BC6\u78BC"}, + {"Re.enter.new.prompt.", "\u91CD\u65B0\u8F38\u5165\u65B0 {0}: "}, + {"Re.enter.new.password.", "\u91CD\u65B0\u8F38\u5165\u65B0\u5BC6\u78BC: "}, + {"They.don.t.match.Try.again", "\u5B83\u5011\u4E0D\u76F8\u7B26\u3002\u8ACB\u91CD\u8A66"}, + {"Enter.prompt.alias.name.", "\u8F38\u5165 {0} \u5225\u540D\u540D\u7A31: "}, + {"Enter.new.alias.name.RETURN.to.cancel.import.for.this.entry.", + "\u8ACB\u8F38\u5165\u65B0\u7684\u5225\u540D\u540D\u7A31\t(RETURN \u4EE5\u53D6\u6D88\u532F\u5165\u6B64\u9805\u76EE):"}, + {"Enter.alias.name.", "\u8F38\u5165\u5225\u540D\u540D\u7A31: "}, + {".RETURN.if.same.as.for.otherAlias.", + "\t(RETURN \u5982\u679C\u548C <{0}> \u7684\u76F8\u540C)"}, + {".PATTERN.printX509Cert", + "\u64C1\u6709\u8005: {0}\n\u767C\u51FA\u8005: {1}\n\u5E8F\u865F: {2}\n\u6709\u6548\u671F\u81EA: {3} \u5230: {4}\n\u6191\u8B49\u6307\u7D0B:\n\t MD5: {5}\n\t SHA1: {6}\n\t SHA256: {7}\n\t \u7C3D\u7AE0\u6F14\u7B97\u6CD5\u540D\u7A31: {8}\n\t \u7248\u672C: {9}"}, + {"What.is.your.first.and.last.name.", + "\u60A8\u7684\u540D\u5B57\u8207\u59D3\u6C0F\u70BA\u4F55\uFF1F"}, + {"What.is.the.name.of.your.organizational.unit.", + "\u60A8\u7684\u7D44\u7E54\u55AE\u4F4D\u540D\u7A31\u70BA\u4F55\uFF1F"}, + {"What.is.the.name.of.your.organization.", + "\u60A8\u7684\u7D44\u7E54\u540D\u7A31\u70BA\u4F55\uFF1F"}, + {"What.is.the.name.of.your.City.or.Locality.", + "\u60A8\u6240\u5728\u7684\u57CE\u5E02\u6216\u5730\u5340\u540D\u7A31\u70BA\u4F55\uFF1F"}, + {"What.is.the.name.of.your.State.or.Province.", + "\u60A8\u6240\u5728\u7684\u5DDE\u53CA\u7701\u4EFD\u540D\u7A31\u70BA\u4F55\uFF1F"}, + {"What.is.the.two.letter.country.code.for.this.unit.", + "\u6B64\u55AE\u4F4D\u7684\u5169\u500B\u5B57\u6BCD\u570B\u5225\u4EE3\u78BC\u70BA\u4F55\uFF1F"}, + {"Is.name.correct.", "{0} \u6B63\u78BA\u55CE\uFF1F"}, + {"no", "\u5426"}, + {"yes", "\u662F"}, + {"y", "y"}, + {".defaultValue.", " [{0}]: "}, + {"Alias.alias.has.no.key", + "\u5225\u540D <{0}> \u6C92\u6709\u91D1\u9470"}, + {"Alias.alias.references.an.entry.type.that.is.not.a.private.key.entry.The.keyclone.command.only.supports.cloning.of.private.key", + "\u5225\u540D <{0}> \u6240\u53C3\u7167\u7684\u9805\u76EE\u4E0D\u662F\u79C1\u5BC6\u91D1\u9470\u985E\u578B\u3002-keyclone \u547D\u4EE4\u50C5\u652F\u63F4\u79C1\u5BC6\u91D1\u9470\u9805\u76EE\u7684\u8907\u88FD"}, + + {".WARNING.WARNING.WARNING.", + "***************** \u8B66\u544A \u8B66\u544A \u8B66\u544A *****************"}, + {"Signer.d.", "\u7C3D\u7F72\u8005 #%d:"}, + {"Timestamp.", "\u6642\u6233:"}, + {"Signature.", "\u7C3D\u7AE0:"}, + {"CRLs.", "CRL:"}, + {"Certificate.owner.", "\u6191\u8B49\u64C1\u6709\u8005: "}, + {"Not.a.signed.jar.file", "\u4E0D\u662F\u7C3D\u7F72\u7684 jar \u6A94\u6848"}, + {"No.certificate.from.the.SSL.server", + "\u6C92\u6709\u4F86\u81EA SSL \u4F3A\u670D\u5668\u7684\u6191\u8B49"}, + + {".The.integrity.of.the.information.stored.in.your.keystore.", + "* \u5C1A\u672A\u9A57\u8B49\u5132\u5B58\u65BC\u91D1\u9470\u5132\u5B58\u5EAB\u4E2D\u8CC7\u8A0A *\n* \u7684\u5B8C\u6574\u6027\uFF01\u82E5\u8981\u9A57\u8B49\u5176\u5B8C\u6574\u6027\uFF0C*\n* \u60A8\u5FC5\u9808\u63D0\u4F9B\u60A8\u7684\u91D1\u9470\u5132\u5B58\u5EAB\u5BC6\u78BC\u3002 *"}, + {".The.integrity.of.the.information.stored.in.the.srckeystore.", + "* \u5C1A\u672A\u9A57\u8B49\u5132\u5B58\u65BC srckeystore \u4E2D\u8CC7\u8A0A*\n* \u7684\u5B8C\u6574\u6027\uFF01\u82E5\u8981\u9A57\u8B49\u5176\u5B8C\u6574\u6027\uFF0C\u60A8\u5FC5\u9808 *\n* \u63D0\u4F9B srckeystore \u5BC6\u78BC\u3002 *"}, + + {"Certificate.reply.does.not.contain.public.key.for.alias.", + "\u6191\u8B49\u56DE\u8986\u4E26\u672A\u5305\u542B <{0}> \u7684\u516C\u958B\u91D1\u9470"}, + {"Incomplete.certificate.chain.in.reply", + "\u56DE\u8986\u6642\u7684\u6191\u8B49\u93C8\u4E0D\u5B8C\u6574"}, + {"Certificate.chain.in.reply.does.not.verify.", + "\u56DE\u8986\u6642\u7684\u6191\u8B49\u93C8\u672A\u9A57\u8B49: "}, + {"Top.level.certificate.in.reply.", + "\u56DE\u8986\u6642\u7684\u6700\u9AD8\u7D1A\u6191\u8B49:\\n"}, + {".is.not.trusted.", "... \u662F\u4E0D\u88AB\u4FE1\u4EFB\u7684\u3002"}, + {"Install.reply.anyway.no.", "\u9084\u662F\u8981\u5B89\u88DD\u56DE\u8986\uFF1F [\u5426]: "}, + {"NO", "\u5426"}, + {"Public.keys.in.reply.and.keystore.don.t.match", + "\u56DE\u8986\u6642\u7684\u516C\u958B\u91D1\u9470\u8207\u91D1\u9470\u5132\u5B58\u5EAB\u4E0D\u7B26"}, + {"Certificate.reply.and.certificate.in.keystore.are.identical", + "\u6191\u8B49\u56DE\u8986\u8207\u91D1\u9470\u5132\u5B58\u5EAB\u4E2D\u7684\u6191\u8B49\u662F\u76F8\u540C\u7684"}, + {"Failed.to.establish.chain.from.reply", + "\u7121\u6CD5\u5F9E\u56DE\u8986\u4E2D\u5C07\u93C8\u5EFA\u7ACB\u8D77\u4F86"}, + {"n", "n"}, + {"Wrong.answer.try.again", "\u932F\u8AA4\u7684\u7B54\u6848\uFF0C\u8ACB\u518D\u8A66\u4E00\u6B21"}, + {"Secret.key.not.generated.alias.alias.already.exists", + "\u672A\u7522\u751F\u79D8\u5BC6\u91D1\u9470\uFF0C\u5225\u540D <{0}> \u5DF2\u5B58\u5728"}, + {"Please.provide.keysize.for.secret.key.generation", + "\u8ACB\u63D0\u4F9B -keysize \u4EE5\u7522\u751F\u79D8\u5BC6\u91D1\u9470"}, + + {"Extensions.", "\u64F4\u5145\u5957\u4EF6: "}, + {".Empty.value.", "(\u7A7A\u767D\u503C)"}, + {"Extension.Request.", "\u64F4\u5145\u5957\u4EF6\u8981\u6C42:"}, + {"PKCS.10.Certificate.Request.Version.1.0.Subject.s.Public.Key.s.format.s.key.", + "PKCS #10 \u6191\u8B49\u8981\u6C42 (\u7248\u672C 1.0)\n\u4E3B\u9AD4: %s\n\u516C\u7528\u91D1\u9470: %s \u683C\u5F0F %s \u91D1\u9470\n"}, + {"Unknown.keyUsage.type.", "\u4E0D\u660E\u7684 keyUsage \u985E\u578B: "}, + {"Unknown.extendedkeyUsage.type.", "\u4E0D\u660E\u7684 extendedkeyUsage \u985E\u578B: "}, + {"Unknown.AccessDescription.type.", "\u4E0D\u660E\u7684 AccessDescription \u985E\u578B: "}, + {"Unrecognized.GeneralName.type.", "\u7121\u6CD5\u8FA8\u8B58\u7684 GeneralName \u985E\u578B: "}, + {"This.extension.cannot.be.marked.as.critical.", + "\u6B64\u64F4\u5145\u5957\u4EF6\u7121\u6CD5\u6A19\u793A\u70BA\u95DC\u9375\u3002"}, + {"Odd.number.of.hex.digits.found.", "\u627E\u5230\u5341\u516D\u9032\u4F4D\u6578\u5B57\u7684\u5947\u6578: "}, + {"Unknown.extension.type.", "\u4E0D\u660E\u7684\u64F4\u5145\u5957\u4EF6\u985E\u578B: "}, + {"command.{0}.is.ambiguous.", "\u547D\u4EE4 {0} \u4E0D\u660E\u78BA:"} + }; + + + /** + * Returns the contents of this ResourceBundle. + * + *

+ * + * @return the contents of this ResourceBundle. + */ + @Override + public Object[][] getContents() { + return contents; + } +} diff --git a/jdk/src/share/classes/sun/security/tools/policytool/PolicyTool.java b/jdk/src/share/classes/sun/security/tools/policytool/PolicyTool.java index 267cc0132b9..5835ce995bf 100644 --- a/jdk/src/share/classes/sun/security/tools/policytool/PolicyTool.java +++ b/jdk/src/share/classes/sun/security/tools/policytool/PolicyTool.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 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 @@ -60,7 +60,8 @@ public class PolicyTool { // for i18n static final java.util.ResourceBundle rb = - java.util.ResourceBundle.getBundle("sun.security.util.Resources"); + java.util.ResourceBundle.getBundle( + "sun.security.tools.policytool.Resources"); static final Collator collator = Collator.getInstance(); static { // this is for case insensitive string comparisons diff --git a/jdk/src/share/classes/sun/security/tools/policytool/Resources.java b/jdk/src/share/classes/sun/security/tools/policytool/Resources.java new file mode 100644 index 00000000000..c155dcea92b --- /dev/null +++ b/jdk/src/share/classes/sun/security/tools/policytool/Resources.java @@ -0,0 +1,161 @@ +/* + * Copyright (c) 2000, 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. 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.security.tools.policytool; + +/** + *

This class represents the ResourceBundle + * for the policytool. + * + */ +public class Resources extends java.util.ListResourceBundle { + + private static final Object[][] contents = { + {"NEWLINE", "\n"}, + {"Warning.A.public.key.for.alias.signers.i.does.not.exist.Make.sure.a.KeyStore.is.properly.configured.", + "Warning: A public key for alias {0} does not exist. Make sure a KeyStore is properly configured."}, + {"Warning.Class.not.found.class", "Warning: Class not found: {0}"}, + {"Warning.Invalid.argument.s.for.constructor.arg", + "Warning: Invalid argument(s) for constructor: {0}"}, + {"Illegal.Principal.Type.type", "Illegal Principal Type: {0}"}, + {"Illegal.option.option", "Illegal option: {0}"}, + {"Usage.policytool.options.", "Usage: policytool [options]"}, + {".file.file.policy.file.location", + " [-file ] policy file location"}, + {"New", "New"}, + {"Open", "Open"}, + {"Save", "Save"}, + {"Save.As", "Save As"}, + {"View.Warning.Log", "View Warning Log"}, + {"Exit", "Exit"}, + {"Add.Policy.Entry", "Add Policy Entry"}, + {"Edit.Policy.Entry", "Edit Policy Entry"}, + {"Remove.Policy.Entry", "Remove Policy Entry"}, + {"Edit", "Edit"}, + {"Retain", "Retain"}, + + {"Warning.File.name.may.include.escaped.backslash.characters.It.is.not.necessary.to.escape.backslash.characters.the.tool.escapes", + "Warning: File name may include escaped backslash characters. " + + "It is not necessary to escape backslash characters " + + "(the tool escapes characters as necessary when writing " + + "the policy contents to the persistent store).\n\n" + + "Click on Retain to retain the entered name, or click on " + + "Edit to edit the name."}, + + {"Add.Public.Key.Alias", "Add Public Key Alias"}, + {"Remove.Public.Key.Alias", "Remove Public Key Alias"}, + {"File", "File"}, + {"KeyStore", "KeyStore"}, + {"Policy.File.", "Policy File:"}, + {"Could.not.open.policy.file.policyFile.e.toString.", + "Could not open policy file: {0}: {1}"}, + {"Policy.Tool", "Policy Tool"}, + {"Errors.have.occurred.while.opening.the.policy.configuration.View.the.Warning.Log.for.more.information.", + "Errors have occurred while opening the policy configuration. View the Warning Log for more information."}, + {"Error", "Error"}, + {"OK", "OK"}, + {"Status", "Status"}, + {"Warning", "Warning"}, + {"Permission.", + "Permission: "}, + {"Principal.Type.", "Principal Type:"}, + {"Principal.Name.", "Principal Name:"}, + {"Target.Name.", + "Target Name: "}, + {"Actions.", + "Actions: "}, + {"OK.to.overwrite.existing.file.filename.", + "OK to overwrite existing file {0}?"}, + {"Cancel", "Cancel"}, + {"CodeBase.", "CodeBase:"}, + {"SignedBy.", "SignedBy:"}, + {"Add.Principal", "Add Principal"}, + {"Edit.Principal", "Edit Principal"}, + {"Remove.Principal", "Remove Principal"}, + {"Principals.", "Principals:"}, + {".Add.Permission", " Add Permission"}, + {".Edit.Permission", " Edit Permission"}, + {"Remove.Permission", "Remove Permission"}, + {"Done", "Done"}, + {"KeyStore.URL.", "KeyStore URL:"}, + {"KeyStore.Type.", "KeyStore Type:"}, + {"KeyStore.Provider.", "KeyStore Provider:"}, + {"KeyStore.Password.URL.", "KeyStore Password URL:"}, + {"Principals", "Principals"}, + {".Edit.Principal.", " Edit Principal:"}, + {".Add.New.Principal.", " Add New Principal:"}, + {"Permissions", "Permissions"}, + {".Edit.Permission.", " Edit Permission:"}, + {".Add.New.Permission.", " Add New Permission:"}, + {"Signed.By.", "Signed By:"}, + {"Cannot.Specify.Principal.with.a.Wildcard.Class.without.a.Wildcard.Name", + "Cannot Specify Principal with a Wildcard Class without a Wildcard Name"}, + {"Cannot.Specify.Principal.without.a.Name", + "Cannot Specify Principal without a Name"}, + {"Permission.and.Target.Name.must.have.a.value", + "Permission and Target Name must have a value"}, + {"Remove.this.Policy.Entry.", "Remove this Policy Entry?"}, + {"Overwrite.File", "Overwrite File"}, + {"Policy.successfully.written.to.filename", + "Policy successfully written to {0}"}, + {"null.filename", "null filename"}, + {"Save.changes.", "Save changes?"}, + {"Yes", "Yes"}, + {"No", "No"}, + {"Policy.Entry", "Policy Entry"}, + {"Save.Changes", "Save Changes"}, + {"No.Policy.Entry.selected", "No Policy Entry selected"}, + {"Unable.to.open.KeyStore.ex.toString.", + "Unable to open KeyStore: {0}"}, + {"No.principal.selected", "No principal selected"}, + {"No.permission.selected", "No permission selected"}, + {"name", "name"}, + {"configuration.type", "configuration type"}, + {"environment.variable.name", "environment variable name"}, + {"library.name", "library name"}, + {"package.name", "package name"}, + {"policy.type", "policy type"}, + {"property.name", "property name"}, + {"provider.name", "provider name"}, + {"Principal.List", "Principal List"}, + {"Permission.List", "Permission List"}, + {"Code.Base", "Code Base"}, + {"KeyStore.U.R.L.", "KeyStore U R L:"}, + {"KeyStore.Password.U.R.L.", "KeyStore Password U R L:"} + }; + + + /** + * Returns the contents of this ResourceBundle. + * + *

+ * + * @return the contents of this ResourceBundle. + */ + @Override + public Object[][] getContents() { + return contents; + } +} diff --git a/jdk/src/share/classes/sun/security/tools/policytool/Resources_de.java b/jdk/src/share/classes/sun/security/tools/policytool/Resources_de.java new file mode 100644 index 00000000000..4ca4c7e3394 --- /dev/null +++ b/jdk/src/share/classes/sun/security/tools/policytool/Resources_de.java @@ -0,0 +1,156 @@ +/* + * Copyright (c) 2000, 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. 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.security.tools.policytool; + +/** + *

This class represents the ResourceBundle + * for the policytool. + * + */ +public class Resources_de extends java.util.ListResourceBundle { + + private static final Object[][] contents = { + {"NEWLINE", "\n"}, + {"Warning.A.public.key.for.alias.signers.i.does.not.exist.Make.sure.a.KeyStore.is.properly.configured.", + "Warnung: Kein Public Key f\u00FCr Alias {0} vorhanden. Vergewissern Sie sich, dass der KeyStore ordnungsgem\u00E4\u00DF konfiguriert ist."}, + {"Warning.Class.not.found.class", "Warnung: Klasse nicht gefunden: {0}"}, + {"Warning.Invalid.argument.s.for.constructor.arg", + "Warnung: Ung\u00FCltige(s) Argument(e) f\u00FCr Constructor: {0}"}, + {"Illegal.Principal.Type.type", "Ung\u00FCltiger Principal-Typ: {0}"}, + {"Illegal.option.option", "Ung\u00FCltige Option: {0}"}, + {"Usage.policytool.options.", "Verwendung: policytool [Optionen]"}, + {".file.file.policy.file.location", + " [-file ] Policy-Dateiverzeichnis"}, + {"New", "Neu"}, + {"Open", "\u00D6ffnen"}, + {"Save", "Speichern"}, + {"Save.As", "Speichern unter"}, + {"View.Warning.Log", "Warnungslog anzeigen"}, + {"Exit", "Beenden"}, + {"Add.Policy.Entry", "Policy-Eintrag hinzuf\u00FCgen"}, + {"Edit.Policy.Entry", "Policy-Eintrag bearbeiten"}, + {"Remove.Policy.Entry", "Policy-Eintrag entfernen"}, + {"Edit", "Bearbeiten"}, + {"Retain", "Beibehalten"}, + + {"Warning.File.name.may.include.escaped.backslash.characters.It.is.not.necessary.to.escape.backslash.characters.the.tool.escapes", + "Warnung: M\u00F6glicherweise enth\u00E4lt der Dateiname Escape-Zeichen mit Backslash. Es ist nicht notwendig, Backslash-Zeichen zu escapen (das Tool f\u00FChrt dies automatisch beim Schreiben des Policy-Contents in den persistenten Speicher aus).\n\nKlicken Sie auf \"Beibehalten\", um den eingegebenen Namen beizubehalten oder auf \"Bearbeiten\", um den Namen zu bearbeiten."}, + + {"Add.Public.Key.Alias", "Public Key-Alias hinzuf\u00FCgen"}, + {"Remove.Public.Key.Alias", "Public Key-Alias entfernen"}, + {"File", "Datei"}, + {"KeyStore", "KeyStore"}, + {"Policy.File.", "Policy-Datei:"}, + {"Could.not.open.policy.file.policyFile.e.toString.", + "Policy-Datei konnte nicht ge\u00F6ffnet werden: {0}: {1}"}, + {"Policy.Tool", "Policy-Tool"}, + {"Errors.have.occurred.while.opening.the.policy.configuration.View.the.Warning.Log.for.more.information.", + "Beim \u00D6ffnen der Policy-Konfiguration sind Fehler aufgetreten. Weitere Informationen finden Sie im Warnungslog."}, + {"Error", "Fehler"}, + {"OK", "OK"}, + {"Status", "Status"}, + {"Warning", "Warnung"}, + {"Permission.", + "Berechtigung: "}, + {"Principal.Type.", "Principal-Typ:"}, + {"Principal.Name.", "Principal-Name:"}, + {"Target.Name.", + "Zielname: "}, + {"Actions.", + "Aktionen: "}, + {"OK.to.overwrite.existing.file.filename.", + "Vorhandene Datei {0} \u00FCberschreiben?"}, + {"Cancel", "Abbrechen"}, + {"CodeBase.", "CodeBase:"}, + {"SignedBy.", "SignedBy:"}, + {"Add.Principal", "Principal hinzuf\u00FCgen"}, + {"Edit.Principal", "Principal bearbeiten"}, + {"Remove.Principal", "Principal entfernen"}, + {"Principals.", "Principals:"}, + {".Add.Permission", " Berechtigung hinzuf\u00FCgen"}, + {".Edit.Permission", " Berechtigung bearbeiten"}, + {"Remove.Permission", "Berechtigung entfernen"}, + {"Done", "Fertig"}, + {"KeyStore.URL.", "KeyStore-URL:"}, + {"KeyStore.Type.", "KeyStore-Typ:"}, + {"KeyStore.Provider.", "KeyStore-Provider:"}, + {"KeyStore.Password.URL.", "KeyStore-Kennwort-URL:"}, + {"Principals", "Principals"}, + {".Edit.Principal.", " Principal bearbeiten:"}, + {".Add.New.Principal.", " Neuen Principal hinzuf\u00FCgen:"}, + {"Permissions", "Berechtigungen"}, + {".Edit.Permission.", " Berechtigung bearbeiten:"}, + {".Add.New.Permission.", " Neue Berechtigung hinzuf\u00FCgen:"}, + {"Signed.By.", "Signiert von:"}, + {"Cannot.Specify.Principal.with.a.Wildcard.Class.without.a.Wildcard.Name", + "Principal kann nicht mit einer Platzhalterklasse ohne Platzhalternamen angegeben werden"}, + {"Cannot.Specify.Principal.without.a.Name", + "Principal kann nicht ohne einen Namen angegeben werden"}, + {"Permission.and.Target.Name.must.have.a.value", + "Berechtigung und Zielname m\u00FCssen einen Wert haben"}, + {"Remove.this.Policy.Entry.", "Diesen Policy-Eintrag entfernen?"}, + {"Overwrite.File", "Datei \u00FCberschreiben"}, + {"Policy.successfully.written.to.filename", + "Policy erfolgreich in {0} geschrieben"}, + {"null.filename", "Null-Dateiname"}, + {"Save.changes.", "\u00C4nderungen speichern?"}, + {"Yes", "Ja"}, + {"No", "Nein"}, + {"Policy.Entry", "Policy-Eintrag"}, + {"Save.Changes", "\u00C4nderungen speichern"}, + {"No.Policy.Entry.selected", "Kein Policy-Eintrag ausgew\u00E4hlt"}, + {"Unable.to.open.KeyStore.ex.toString.", + "KeyStore kann nicht ge\u00F6ffnet werden: {0}"}, + {"No.principal.selected", "Kein Principal ausgew\u00E4hlt"}, + {"No.permission.selected", "Keine Berechtigung ausgew\u00E4hlt"}, + {"name", "Name"}, + {"configuration.type", "Konfigurationstyp"}, + {"environment.variable.name", "Umgebungsvariablenname"}, + {"library.name", "Library-Name"}, + {"package.name", "Packagename"}, + {"policy.type", "Policy-Typ"}, + {"property.name", "Eigenschaftsname"}, + {"provider.name", "Providername"}, + {"Principal.List", "Principal-Liste"}, + {"Permission.List", "Berechtigungsliste"}, + {"Code.Base", "Codebase"}, + {"KeyStore.U.R.L.", "KeyStore-URL:"}, + {"KeyStore.Password.U.R.L.", "KeyStore-Kennwort-URL:"} + }; + + + /** + * Returns the contents of this ResourceBundle. + * + *

+ * + * @return the contents of this ResourceBundle. + */ + @Override + public Object[][] getContents() { + return contents; + } +} diff --git a/jdk/src/share/classes/sun/security/tools/policytool/Resources_es.java b/jdk/src/share/classes/sun/security/tools/policytool/Resources_es.java new file mode 100644 index 00000000000..142550094bd --- /dev/null +++ b/jdk/src/share/classes/sun/security/tools/policytool/Resources_es.java @@ -0,0 +1,156 @@ +/* + * Copyright (c) 2000, 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. 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.security.tools.policytool; + +/** + *

This class represents the ResourceBundle + * for the policytool. + * + */ +public class Resources_es extends java.util.ListResourceBundle { + + private static final Object[][] contents = { + {"NEWLINE", "\n"}, + {"Warning.A.public.key.for.alias.signers.i.does.not.exist.Make.sure.a.KeyStore.is.properly.configured.", + "Advertencia: no hay clave p\u00FAblica para el alias {0}. Aseg\u00FArese de que se ha configurado correctamente un almac\u00E9n de claves."}, + {"Warning.Class.not.found.class", "Advertencia: no se ha encontrado la clase: {0}"}, + {"Warning.Invalid.argument.s.for.constructor.arg", + "Advertencia: argumento(s) no v\u00E1lido(s) para el constructor: {0}"}, + {"Illegal.Principal.Type.type", "Tipo de principal no permitido: {0}"}, + {"Illegal.option.option", "Opci\u00F3n no permitida: {0}"}, + {"Usage.policytool.options.", "Sintaxis: policytool [opciones]"}, + {".file.file.policy.file.location", + " [-file ] ubicaci\u00F3n del archivo de normas"}, + {"New", "Nuevo"}, + {"Open", "Abrir"}, + {"Save", "Guardar"}, + {"Save.As", "Guardar como"}, + {"View.Warning.Log", "Ver Log de Advertencias"}, + {"Exit", "Salir"}, + {"Add.Policy.Entry", "Agregar Entrada de Pol\u00EDtica"}, + {"Edit.Policy.Entry", "Editar Entrada de Pol\u00EDtica"}, + {"Remove.Policy.Entry", "Eliminar Entrada de Pol\u00EDtica"}, + {"Edit", "Editar"}, + {"Retain", "Mantener"}, + + {"Warning.File.name.may.include.escaped.backslash.characters.It.is.not.necessary.to.escape.backslash.characters.the.tool.escapes", + "Advertencia: el nombre del archivo puede contener caracteres de barra invertida de escape. No es necesario utilizar barras invertidas de escape (la herramienta aplica caracteres de escape seg\u00FAn sea necesario al escribir el contenido de las pol\u00EDticas en el almac\u00E9n persistente).\n\nHaga clic en Mantener para conservar el nombre introducido o en Editar para modificarlo."}, + + {"Add.Public.Key.Alias", "Agregar Alias de Clave P\u00FAblico"}, + {"Remove.Public.Key.Alias", "Eliminar Alias de Clave P\u00FAblico"}, + {"File", "Archivo"}, + {"KeyStore", "Almac\u00E9n de Claves"}, + {"Policy.File.", "Archivo de Pol\u00EDtica:"}, + {"Could.not.open.policy.file.policyFile.e.toString.", + "No se ha podido abrir el archivo de pol\u00EDtica: {0}: {1}"}, + {"Policy.Tool", "Herramienta de Pol\u00EDticas"}, + {"Errors.have.occurred.while.opening.the.policy.configuration.View.the.Warning.Log.for.more.information.", + "Ha habido errores al abrir la configuraci\u00F3n de pol\u00EDticas. V\u00E9ase el log de advertencias para obtener m\u00E1s informaci\u00F3n."}, + {"Error", "Error"}, + {"OK", "Aceptar"}, + {"Status", "Estado"}, + {"Warning", "Advertencia"}, + {"Permission.", + "Permiso: "}, + {"Principal.Type.", "Tipo de Principal:"}, + {"Principal.Name.", "Nombre de Principal:"}, + {"Target.Name.", + "Nombre de Destino: "}, + {"Actions.", + "Acciones: "}, + {"OK.to.overwrite.existing.file.filename.", + "\u00BFSobrescribir el archivo existente {0}?"}, + {"Cancel", "Cancelar"}, + {"CodeBase.", "CodeBase:"}, + {"SignedBy.", "SignedBy:"}, + {"Add.Principal", "Agregar Principal"}, + {"Edit.Principal", "Editar Principal"}, + {"Remove.Principal", "Eliminar Principal"}, + {"Principals.", "Principales:"}, + {".Add.Permission", " Agregar Permiso"}, + {".Edit.Permission", " Editar Permiso"}, + {"Remove.Permission", "Eliminar Permiso"}, + {"Done", "Listo"}, + {"KeyStore.URL.", "URL de Almac\u00E9n de Claves:"}, + {"KeyStore.Type.", "Tipo de Almac\u00E9n de Claves:"}, + {"KeyStore.Provider.", "Proveedor de Almac\u00E9n de Claves:"}, + {"KeyStore.Password.URL.", "URL de Contrase\u00F1a de Almac\u00E9n de Claves:"}, + {"Principals", "Principales"}, + {".Edit.Principal.", " Editar Principal:"}, + {".Add.New.Principal.", " Agregar Nuevo Principal:"}, + {"Permissions", "Permisos"}, + {".Edit.Permission.", " Editar Permiso:"}, + {".Add.New.Permission.", " Agregar Permiso Nuevo:"}, + {"Signed.By.", "Firmado Por:"}, + {"Cannot.Specify.Principal.with.a.Wildcard.Class.without.a.Wildcard.Name", + "No se puede especificar un principal con una clase de comod\u00EDn sin un nombre de comod\u00EDn"}, + {"Cannot.Specify.Principal.without.a.Name", + "No se puede especificar el principal sin un nombre"}, + {"Permission.and.Target.Name.must.have.a.value", + "Permiso y Nombre de Destino deben tener un valor"}, + {"Remove.this.Policy.Entry.", "\u00BFEliminar esta entrada de pol\u00EDtica?"}, + {"Overwrite.File", "Sobrescribir Archivo"}, + {"Policy.successfully.written.to.filename", + "Pol\u00EDtica escrita correctamente en {0}"}, + {"null.filename", "nombre de archivo nulo"}, + {"Save.changes.", "\u00BFGuardar los cambios?"}, + {"Yes", "S\u00ED"}, + {"No", "No"}, + {"Policy.Entry", "Entrada de Pol\u00EDtica"}, + {"Save.Changes", "Guardar Cambios"}, + {"No.Policy.Entry.selected", "No se ha seleccionado la entrada de pol\u00EDtica"}, + {"Unable.to.open.KeyStore.ex.toString.", + "No se ha podido abrir el almac\u00E9n de claves: {0}"}, + {"No.principal.selected", "No se ha seleccionado un principal"}, + {"No.permission.selected", "No se ha seleccionado un permiso"}, + {"name", "nombre"}, + {"configuration.type", "tipo de configuraci\u00F3n"}, + {"environment.variable.name", "nombre de variable de entorno"}, + {"library.name", "nombre de la biblioteca"}, + {"package.name", "nombre del paquete"}, + {"policy.type", "tipo de pol\u00EDtica"}, + {"property.name", "nombre de la propiedad"}, + {"provider.name", "nombre del proveedor"}, + {"Principal.List", "Lista de Principales"}, + {"Permission.List", "Lista de Permisos"}, + {"Code.Base", "Base de C\u00F3digo"}, + {"KeyStore.U.R.L.", "URL de Almac\u00E9n de Claves:"}, + {"KeyStore.Password.U.R.L.", "URL de Contrase\u00F1a de Almac\u00E9n de Claves:"} + }; + + + /** + * Returns the contents of this ResourceBundle. + * + *

+ * + * @return the contents of this ResourceBundle. + */ + @Override + public Object[][] getContents() { + return contents; + } +} diff --git a/jdk/src/share/classes/sun/security/tools/policytool/Resources_fr.java b/jdk/src/share/classes/sun/security/tools/policytool/Resources_fr.java new file mode 100644 index 00000000000..898e9cc8c9b --- /dev/null +++ b/jdk/src/share/classes/sun/security/tools/policytool/Resources_fr.java @@ -0,0 +1,156 @@ +/* + * Copyright (c) 2000, 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. 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.security.tools.policytool; + +/** + *

This class represents the ResourceBundle + * for the policytool. + * + */ +public class Resources_fr extends java.util.ListResourceBundle { + + private static final Object[][] contents = { + {"NEWLINE", "\n"}, + {"Warning.A.public.key.for.alias.signers.i.does.not.exist.Make.sure.a.KeyStore.is.properly.configured.", + "Avertissement\u00A0: il n''existe pas de cl\u00E9 publique pour l''alias {0}. V\u00E9rifiez que le fichier de cl\u00E9s d''acc\u00E8s est correctement configur\u00E9."}, + {"Warning.Class.not.found.class", "Avertissement : classe introuvable - {0}"}, + {"Warning.Invalid.argument.s.for.constructor.arg", + "Avertissement\u00A0: arguments non valides pour le constructeur\u00A0- {0}"}, + {"Illegal.Principal.Type.type", "Type de principal non admis : {0}"}, + {"Illegal.option.option", "Option non admise : {0}"}, + {"Usage.policytool.options.", "Syntaxe : policytool [options]"}, + {".file.file.policy.file.location", + " [-file ] emplacement du fichier de r\u00E8gles"}, + {"New", "Nouveau"}, + {"Open", "Ouvrir"}, + {"Save", "Enregistrer"}, + {"Save.As", "Enregistrer sous"}, + {"View.Warning.Log", "Afficher le journal des avertissements"}, + {"Exit", "Quitter"}, + {"Add.Policy.Entry", "Ajouter une r\u00E8gle"}, + {"Edit.Policy.Entry", "Modifier une r\u00E8gle"}, + {"Remove.Policy.Entry", "Enlever une r\u00E8gle"}, + {"Edit", "Modifier"}, + {"Retain", "Conserver"}, + + {"Warning.File.name.may.include.escaped.backslash.characters.It.is.not.necessary.to.escape.backslash.characters.the.tool.escapes", + "Avertissement : il se peut que le nom de fichier contienne des barres obliques inverses avec caract\u00E8re d'\u00E9chappement. Il n'est pas n\u00E9cessaire d'ajouter un caract\u00E8re d'\u00E9chappement aux barres obliques inverses. L'outil proc\u00E8de \u00E0 l'\u00E9chappement si n\u00E9cessaire lorsqu'il \u00E9crit le contenu des r\u00E8gles dans la zone de stockage persistant).\n\nCliquez sur Conserver pour garder le nom saisi ou sur Modifier pour le remplacer."}, + + {"Add.Public.Key.Alias", "Ajouter un alias de cl\u00E9 publique"}, + {"Remove.Public.Key.Alias", "Enlever un alias de cl\u00E9 publique"}, + {"File", "Fichier"}, + {"KeyStore", "Fichier de cl\u00E9s"}, + {"Policy.File.", "Fichier de r\u00E8gles :"}, + {"Could.not.open.policy.file.policyFile.e.toString.", + "Impossible d''ouvrir le fichier de r\u00E8gles\u00A0: {0}: {1}"}, + {"Policy.Tool", "Policy Tool"}, + {"Errors.have.occurred.while.opening.the.policy.configuration.View.the.Warning.Log.for.more.information.", + "Des erreurs se sont produites \u00E0 l'ouverture de la configuration de r\u00E8gles. Pour plus d'informations, consultez le journal des avertissements."}, + {"Error", "Erreur"}, + {"OK", "OK"}, + {"Status", "Statut"}, + {"Warning", "Avertissement"}, + {"Permission.", + "Droit : "}, + {"Principal.Type.", "Type de principal :"}, + {"Principal.Name.", "Nom de principal :"}, + {"Target.Name.", + "Nom de cible : "}, + {"Actions.", + "Actions : "}, + {"OK.to.overwrite.existing.file.filename.", + "Remplacer le fichier existant {0} ?"}, + {"Cancel", "Annuler"}, + {"CodeBase.", "Base de code :"}, + {"SignedBy.", "Sign\u00E9 par :"}, + {"Add.Principal", "Ajouter un principal"}, + {"Edit.Principal", "Modifier un principal"}, + {"Remove.Principal", "Enlever un principal"}, + {"Principals.", "Principaux :"}, + {".Add.Permission", " Ajouter un droit"}, + {".Edit.Permission", " Modifier un droit"}, + {"Remove.Permission", "Enlever un droit"}, + {"Done", "Termin\u00E9"}, + {"KeyStore.URL.", "URL du fichier de cl\u00E9s :"}, + {"KeyStore.Type.", "Type du fichier de cl\u00E9s :"}, + {"KeyStore.Provider.", "Fournisseur du fichier de cl\u00E9s :"}, + {"KeyStore.Password.URL.", "URL du mot de passe du fichier de cl\u00E9s :"}, + {"Principals", "Principaux"}, + {".Edit.Principal.", " Modifier un principal :"}, + {".Add.New.Principal.", " Ajouter un principal :"}, + {"Permissions", "Droits"}, + {".Edit.Permission.", " Modifier un droit :"}, + {".Add.New.Permission.", " Ajouter un droit :"}, + {"Signed.By.", "Sign\u00E9 par :"}, + {"Cannot.Specify.Principal.with.a.Wildcard.Class.without.a.Wildcard.Name", + "Impossible de sp\u00E9cifier un principal avec une classe g\u00E9n\u00E9rique sans nom g\u00E9n\u00E9rique"}, + {"Cannot.Specify.Principal.without.a.Name", + "Impossible de sp\u00E9cifier un principal sans nom"}, + {"Permission.and.Target.Name.must.have.a.value", + "Le droit et le nom de cible doivent avoir une valeur"}, + {"Remove.this.Policy.Entry.", "Enlever cette r\u00E8gle ?"}, + {"Overwrite.File", "Remplacer le fichier"}, + {"Policy.successfully.written.to.filename", + "R\u00E8gle \u00E9crite dans {0}"}, + {"null.filename", "nom de fichier NULL"}, + {"Save.changes.", "Enregistrer les modifications ?"}, + {"Yes", "Oui"}, + {"No", "Non"}, + {"Policy.Entry", "R\u00E8gle"}, + {"Save.Changes", "Enregistrer les modifications"}, + {"No.Policy.Entry.selected", "Aucune r\u00E8gle s\u00E9lectionn\u00E9e"}, + {"Unable.to.open.KeyStore.ex.toString.", + "Impossible d''ouvrir le fichier de cl\u00E9s d''acc\u00E8s : {0}"}, + {"No.principal.selected", "Aucun principal s\u00E9lectionn\u00E9"}, + {"No.permission.selected", "Aucun droit s\u00E9lectionn\u00E9"}, + {"name", "nom"}, + {"configuration.type", "type de configuration"}, + {"environment.variable.name", "Nom de variable d'environnement"}, + {"library.name", "nom de biblioth\u00E8que"}, + {"package.name", "nom de package"}, + {"policy.type", "type de r\u00E8gle"}, + {"property.name", "nom de propri\u00E9t\u00E9"}, + {"provider.name", "nom du fournisseur"}, + {"Principal.List", "Liste de principaux"}, + {"Permission.List", "Liste de droits"}, + {"Code.Base", "Base de code"}, + {"KeyStore.U.R.L.", "URL du fichier de cl\u00E9s :"}, + {"KeyStore.Password.U.R.L.", "URL du mot de passe du fichier de cl\u00E9s :"} + }; + + + /** + * Returns the contents of this ResourceBundle. + * + *

+ * + * @return the contents of this ResourceBundle. + */ + @Override + public Object[][] getContents() { + return contents; + } +} diff --git a/jdk/src/share/classes/sun/security/tools/policytool/Resources_it.java b/jdk/src/share/classes/sun/security/tools/policytool/Resources_it.java new file mode 100644 index 00000000000..3daf8616bee --- /dev/null +++ b/jdk/src/share/classes/sun/security/tools/policytool/Resources_it.java @@ -0,0 +1,156 @@ +/* + * Copyright (c) 2000, 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. 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.security.tools.policytool; + +/** + *

This class represents the ResourceBundle + * for the policytool. + * + */ +public class Resources_it extends java.util.ListResourceBundle { + + private static final Object[][] contents = { + {"NEWLINE", "\n"}, + {"Warning.A.public.key.for.alias.signers.i.does.not.exist.Make.sure.a.KeyStore.is.properly.configured.", + "Avvertenza: non esiste una chiave pubblica per l''alias {0}. Verificare che il keystore sia configurato correttamente."}, + {"Warning.Class.not.found.class", "Avvertenza: classe non trovata: {0}"}, + {"Warning.Invalid.argument.s.for.constructor.arg", + "Avvertenza: argomento o argomenti non validi per il costruttore {0}"}, + {"Illegal.Principal.Type.type", "Tipo principal non valido: {0}"}, + {"Illegal.option.option", "Opzione non valida: {0}"}, + {"Usage.policytool.options.", "Utilizzo: policytool [opzioni]"}, + {".file.file.policy.file.location", + " [-file ] posizione del file dei criteri"}, + {"New", "Nuovo"}, + {"Open", "Apri"}, + {"Save", "Salva"}, + {"Save.As", "Salva con nome"}, + {"View.Warning.Log", "Visualizza registro avvertenze"}, + {"Exit", "Esci"}, + {"Add.Policy.Entry", "Aggiungi voce dei criteri"}, + {"Edit.Policy.Entry", "Modifica voce dei criteri"}, + {"Remove.Policy.Entry", "Rimuovi voce dei criteri"}, + {"Edit", "Modifica"}, + {"Retain", "Mantieni"}, + + {"Warning.File.name.may.include.escaped.backslash.characters.It.is.not.necessary.to.escape.backslash.characters.the.tool.escapes", + "Avvertenza: il nome file pu\u00F2 includere barre rovesciate con escape. Non \u00E8 necessario eseguire l'escape delle barre rovesciate (se necessario lo strumento esegue l'escape dei caratteri al momento della scrittura del contenuto dei criteri nell'area di memorizzazione persistente).\n\nFare click su Mantieni per conservare il nome immesso, oppure su Modifica per modificare il nome."}, + + {"Add.Public.Key.Alias", "Aggiungi alias chiave pubblica"}, + {"Remove.Public.Key.Alias", "Rimuovi alias chiave pubblica"}, + {"File", "File"}, + {"KeyStore", "Keystore"}, + {"Policy.File.", "File dei criteri:"}, + {"Could.not.open.policy.file.policyFile.e.toString.", + "Impossibile aprire il file di criteri {0}: {1}"}, + {"Policy.Tool", "Strumento criteri"}, + {"Errors.have.occurred.while.opening.the.policy.configuration.View.the.Warning.Log.for.more.information.", + "Si sono verificati errori durante l'apertura della configurazione dei criteri. Consultare il registro delle avvertenze per ulteriori informazioni."}, + {"Error", "Errore"}, + {"OK", "OK"}, + {"Status", "Stato"}, + {"Warning", "Avvertenza"}, + {"Permission.", + "Autorizzazione: "}, + {"Principal.Type.", "Tipo principal:"}, + {"Principal.Name.", "Nome principal:"}, + {"Target.Name.", + "Nome destinazione: "}, + {"Actions.", + "Azioni: "}, + {"OK.to.overwrite.existing.file.filename.", + "OK per sovrascrivere il file {0}?"}, + {"Cancel", "Annulla"}, + {"CodeBase.", "CodeBase:"}, + {"SignedBy.", "SignedBy:"}, + {"Add.Principal", "Aggiungi principal"}, + {"Edit.Principal", "Modifica principal"}, + {"Remove.Principal", "Rimuovi principal"}, + {"Principals.", "Principal:"}, + {".Add.Permission", " Aggiungi autorizzazione"}, + {".Edit.Permission", " Modifica autorizzazione"}, + {"Remove.Permission", "Rimuovi autorizzazione"}, + {"Done", "Fine"}, + {"KeyStore.URL.", "URL keystore:"}, + {"KeyStore.Type.", "Tipo keystore:"}, + {"KeyStore.Provider.", "Provider keystore:"}, + {"KeyStore.Password.URL.", "URL password keystore:"}, + {"Principals", "Principal:"}, + {".Edit.Principal.", " Modifica principal:"}, + {".Add.New.Principal.", " Aggiungi nuovo principal:"}, + {"Permissions", "Autorizzazioni"}, + {".Edit.Permission.", " Modifica autorizzazione:"}, + {".Add.New.Permission.", " Aggiungi nuova autorizzazione:"}, + {"Signed.By.", "Firmato da:"}, + {"Cannot.Specify.Principal.with.a.Wildcard.Class.without.a.Wildcard.Name", + "Impossibile specificare principal con una classe carattere jolly senza un nome carattere jolly"}, + {"Cannot.Specify.Principal.without.a.Name", + "Impossibile specificare principal senza un nome"}, + {"Permission.and.Target.Name.must.have.a.value", + "L'autorizzazione e il nome destinazione non possono essere nulli"}, + {"Remove.this.Policy.Entry.", "Rimuovere questa voce dei criteri?"}, + {"Overwrite.File", "Sovrascrivi file"}, + {"Policy.successfully.written.to.filename", + "I criteri sono stati scritti in {0}"}, + {"null.filename", "nome file nullo"}, + {"Save.changes.", "Salvare le modifiche?"}, + {"Yes", "S\u00EC"}, + {"No", "No"}, + {"Policy.Entry", "Voce dei criteri"}, + {"Save.Changes", "Salva le modifiche"}, + {"No.Policy.Entry.selected", "Nessuna voce dei criteri selezionata"}, + {"Unable.to.open.KeyStore.ex.toString.", + "Impossibile aprire il keystore: {0}"}, + {"No.principal.selected", "Nessun principal selezionato"}, + {"No.permission.selected", "Nessuna autorizzazione selezionata"}, + {"name", "nome"}, + {"configuration.type", "tipo di configurazione"}, + {"environment.variable.name", "nome variabile ambiente"}, + {"library.name", "nome libreria"}, + {"package.name", "nome package"}, + {"policy.type", "tipo di criteri"}, + {"property.name", "nome propriet\u00E0"}, + {"provider.name", "nome provider"}, + {"Principal.List", "Lista principal"}, + {"Permission.List", "Lista autorizzazioni"}, + {"Code.Base", "Codebase"}, + {"KeyStore.U.R.L.", "URL keystore:"}, + {"KeyStore.Password.U.R.L.", "URL password keystore:"} + }; + + + /** + * Returns the contents of this ResourceBundle. + * + *

+ * + * @return the contents of this ResourceBundle. + */ + @Override + public Object[][] getContents() { + return contents; + } +} diff --git a/jdk/src/share/classes/sun/security/tools/policytool/Resources_ja.java b/jdk/src/share/classes/sun/security/tools/policytool/Resources_ja.java new file mode 100644 index 00000000000..a3f901aa8f5 --- /dev/null +++ b/jdk/src/share/classes/sun/security/tools/policytool/Resources_ja.java @@ -0,0 +1,156 @@ +/* + * Copyright (c) 2000, 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. 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.security.tools.policytool; + +/** + *

This class represents the ResourceBundle + * for the policytool. + * + */ +public class Resources_ja extends java.util.ListResourceBundle { + + private static final Object[][] contents = { + {"NEWLINE", "\n"}, + {"Warning.A.public.key.for.alias.signers.i.does.not.exist.Make.sure.a.KeyStore.is.properly.configured.", + "\u8B66\u544A: \u5225\u540D{0}\u306E\u516C\u958B\u9375\u304C\u5B58\u5728\u3057\u307E\u305B\u3093\u3002\u30AD\u30FC\u30B9\u30C8\u30A2\u304C\u6B63\u3057\u304F\u69CB\u6210\u3055\u308C\u3066\u3044\u308B\u3053\u3068\u3092\u78BA\u8A8D\u3057\u3066\u304F\u3060\u3055\u3044\u3002"}, + {"Warning.Class.not.found.class", "\u8B66\u544A: \u30AF\u30E9\u30B9\u304C\u898B\u3064\u304B\u308A\u307E\u305B\u3093: {0}"}, + {"Warning.Invalid.argument.s.for.constructor.arg", + "\u8B66\u544A: \u30B3\u30F3\u30B9\u30C8\u30E9\u30AF\u30BF\u306E\u5F15\u6570\u304C\u7121\u52B9\u3067\u3059: {0}"}, + {"Illegal.Principal.Type.type", "\u4E0D\u6B63\u306A\u30D7\u30EA\u30F3\u30B7\u30D1\u30EB\u306E\u30BF\u30A4\u30D7: {0}"}, + {"Illegal.option.option", "\u4E0D\u6B63\u306A\u30AA\u30D7\u30B7\u30E7\u30F3: {0}"}, + {"Usage.policytool.options.", "\u4F7F\u7528\u65B9\u6CD5: policytool [options]"}, + {".file.file.policy.file.location", + " [-file ] \u30DD\u30EA\u30B7\u30FC\u30FB\u30D5\u30A1\u30A4\u30EB\u306E\u5834\u6240"}, + {"New", "\u65B0\u898F"}, + {"Open", "\u958B\u304F"}, + {"Save", "\u4FDD\u5B58"}, + {"Save.As", "\u5225\u540D\u4FDD\u5B58"}, + {"View.Warning.Log", "\u8B66\u544A\u30ED\u30B0\u306E\u8868\u793A"}, + {"Exit", "\u7D42\u4E86"}, + {"Add.Policy.Entry", "\u30DD\u30EA\u30B7\u30FC\u30FB\u30A8\u30F3\u30C8\u30EA\u306E\u8FFD\u52A0"}, + {"Edit.Policy.Entry", "\u30DD\u30EA\u30B7\u30FC\u30FB\u30A8\u30F3\u30C8\u30EA\u306E\u7DE8\u96C6"}, + {"Remove.Policy.Entry", "\u30DD\u30EA\u30B7\u30FC\u30FB\u30A8\u30F3\u30C8\u30EA\u306E\u524A\u9664"}, + {"Edit", "\u7DE8\u96C6"}, + {"Retain", "\u4FDD\u6301"}, + + {"Warning.File.name.may.include.escaped.backslash.characters.It.is.not.necessary.to.escape.backslash.characters.the.tool.escapes", + "\u8B66\u544A: \u30D5\u30A1\u30A4\u30EB\u540D\u306B\u30A8\u30B9\u30B1\u30FC\u30D7\u3055\u308C\u305F\u30D0\u30C3\u30AF\u30B9\u30E9\u30C3\u30B7\u30E5\u6587\u5B57\u304C\u542B\u307E\u308C\u3066\u3044\u308B\u53EF\u80FD\u6027\u304C\u3042\u308A\u307E\u3059\u3002\u30D0\u30C3\u30AF\u30B9\u30E9\u30C3\u30B7\u30E5\u6587\u5B57\u3092\u30A8\u30B9\u30B1\u30FC\u30D7\u3059\u308B\u5FC5\u8981\u306F\u3042\u308A\u307E\u305B\u3093(\u30C4\u30FC\u30EB\u306F\u30DD\u30EA\u30B7\u30FC\u5185\u5BB9\u3092\u6C38\u7D9A\u30B9\u30C8\u30A2\u306B\u66F8\u304D\u8FBC\u3080\u3068\u304D\u306B\u3001\u5FC5\u8981\u306B\u5FDC\u3058\u3066\u6587\u5B57\u3092\u30A8\u30B9\u30B1\u30FC\u30D7\u3057\u307E\u3059)\u3002\n\n\u5165\u529B\u6E08\u306E\u540D\u524D\u3092\u4FDD\u6301\u3059\u308B\u306B\u306F\u300C\u4FDD\u6301\u300D\u3092\u30AF\u30EA\u30C3\u30AF\u3057\u3001\u540D\u524D\u3092\u7DE8\u96C6\u3059\u308B\u306B\u306F\u300C\u7DE8\u96C6\u300D\u3092\u30AF\u30EA\u30C3\u30AF\u3057\u3066\u304F\u3060\u3055\u3044\u3002"}, + + {"Add.Public.Key.Alias", "\u516C\u958B\u9375\u306E\u5225\u540D\u306E\u8FFD\u52A0"}, + {"Remove.Public.Key.Alias", "\u516C\u958B\u9375\u306E\u5225\u540D\u3092\u524A\u9664"}, + {"File", "\u30D5\u30A1\u30A4\u30EB"}, + {"KeyStore", "\u30AD\u30FC\u30B9\u30C8\u30A2"}, + {"Policy.File.", "\u30DD\u30EA\u30B7\u30FC\u30FB\u30D5\u30A1\u30A4\u30EB:"}, + {"Could.not.open.policy.file.policyFile.e.toString.", + "\u30DD\u30EA\u30B7\u30FC\u30FB\u30D5\u30A1\u30A4\u30EB\u3092\u958B\u3051\u307E\u305B\u3093\u3067\u3057\u305F: {0}: {1}"}, + {"Policy.Tool", "\u30DD\u30EA\u30B7\u30FC\u30FB\u30C4\u30FC\u30EB"}, + {"Errors.have.occurred.while.opening.the.policy.configuration.View.the.Warning.Log.for.more.information.", + "\u30DD\u30EA\u30B7\u30FC\u69CB\u6210\u3092\u958B\u304F\u3068\u304D\u306B\u30A8\u30E9\u30FC\u304C\u767A\u751F\u3057\u307E\u3057\u305F\u3002\u8A73\u7D30\u306F\u8B66\u544A\u30ED\u30B0\u3092\u53C2\u7167\u3057\u3066\u304F\u3060\u3055\u3044\u3002"}, + {"Error", "\u30A8\u30E9\u30FC"}, + {"OK", "OK"}, + {"Status", "\u72B6\u614B"}, + {"Warning", "\u8B66\u544A"}, + {"Permission.", + "\u30A2\u30AF\u30BB\u30B9\u6A29: "}, + {"Principal.Type.", "\u30D7\u30EA\u30F3\u30B7\u30D1\u30EB\u306E\u30BF\u30A4\u30D7:"}, + {"Principal.Name.", "\u30D7\u30EA\u30F3\u30B7\u30D1\u30EB\u306E\u540D\u524D:"}, + {"Target.Name.", + "\u30BF\u30FC\u30B2\u30C3\u30C8\u540D: "}, + {"Actions.", + "\u30A2\u30AF\u30B7\u30E7\u30F3: "}, + {"OK.to.overwrite.existing.file.filename.", + "\u65E2\u5B58\u306E\u30D5\u30A1\u30A4\u30EB{0}\u306B\u4E0A\u66F8\u304D\u3057\u307E\u3059\u304B\u3002"}, + {"Cancel", "\u53D6\u6D88"}, + {"CodeBase.", "CodeBase:"}, + {"SignedBy.", "SignedBy:"}, + {"Add.Principal", "\u30D7\u30EA\u30F3\u30B7\u30D1\u30EB\u306E\u8FFD\u52A0"}, + {"Edit.Principal", "\u30D7\u30EA\u30F3\u30B7\u30D1\u30EB\u306E\u7DE8\u96C6"}, + {"Remove.Principal", "\u30D7\u30EA\u30F3\u30B7\u30D1\u30EB\u306E\u524A\u9664"}, + {"Principals.", "\u30D7\u30EA\u30F3\u30B7\u30D1\u30EB:"}, + {".Add.Permission", " \u30A2\u30AF\u30BB\u30B9\u6A29\u306E\u8FFD\u52A0"}, + {".Edit.Permission", " \u30A2\u30AF\u30BB\u30B9\u6A29\u306E\u7DE8\u96C6"}, + {"Remove.Permission", "\u30A2\u30AF\u30BB\u30B9\u6A29\u306E\u524A\u9664"}, + {"Done", "\u5B8C\u4E86"}, + {"KeyStore.URL.", "\u30AD\u30FC\u30B9\u30C8\u30A2URL:"}, + {"KeyStore.Type.", "\u30AD\u30FC\u30B9\u30C8\u30A2\u306E\u30BF\u30A4\u30D7:"}, + {"KeyStore.Provider.", "\u30AD\u30FC\u30B9\u30C8\u30A2\u30FB\u30D7\u30ED\u30D0\u30A4\u30C0:"}, + {"KeyStore.Password.URL.", "\u30AD\u30FC\u30B9\u30C8\u30A2\u30FB\u30D1\u30B9\u30EF\u30FC\u30C9URL:"}, + {"Principals", "\u30D7\u30EA\u30F3\u30B7\u30D1\u30EB"}, + {".Edit.Principal.", " \u30D7\u30EA\u30F3\u30B7\u30D1\u30EB\u306E\u7DE8\u96C6:"}, + {".Add.New.Principal.", " \u30D7\u30EA\u30F3\u30B7\u30D1\u30EB\u306E\u65B0\u898F\u8FFD\u52A0:"}, + {"Permissions", "\u30A2\u30AF\u30BB\u30B9\u6A29"}, + {".Edit.Permission.", " \u30A2\u30AF\u30BB\u30B9\u6A29\u306E\u7DE8\u96C6:"}, + {".Add.New.Permission.", " \u65B0\u898F\u30A2\u30AF\u30BB\u30B9\u6A29\u306E\u8FFD\u52A0:"}, + {"Signed.By.", "\u7F72\u540D\u8005:"}, + {"Cannot.Specify.Principal.with.a.Wildcard.Class.without.a.Wildcard.Name", + "\u30EF\u30A4\u30EB\u30C9\u30AB\u30FC\u30C9\u540D\u306E\u306A\u3044\u30EF\u30A4\u30EB\u30C9\u30AB\u30FC\u30C9\u30FB\u30AF\u30E9\u30B9\u3092\u4F7F\u7528\u3057\u3066\u30D7\u30EA\u30F3\u30B7\u30D1\u30EB\u3092\u6307\u5B9A\u3059\u308B\u3053\u3068\u306F\u3067\u304D\u307E\u305B\u3093"}, + {"Cannot.Specify.Principal.without.a.Name", + "\u540D\u524D\u3092\u4F7F\u7528\u305B\u305A\u306B\u30D7\u30EA\u30F3\u30B7\u30D1\u30EB\u3092\u6307\u5B9A\u3059\u308B\u3053\u3068\u306F\u3067\u304D\u307E\u305B\u3093"}, + {"Permission.and.Target.Name.must.have.a.value", + "\u30A2\u30AF\u30BB\u30B9\u6A29\u3068\u30BF\u30FC\u30B2\u30C3\u30C8\u540D\u306F\u3001\u5024\u3092\u4FDD\u6301\u3059\u308B\u5FC5\u8981\u304C\u3042\u308A\u307E\u3059"}, + {"Remove.this.Policy.Entry.", "\u3053\u306E\u30DD\u30EA\u30B7\u30FC\u30FB\u30A8\u30F3\u30C8\u30EA\u3092\u524A\u9664\u3057\u307E\u3059\u304B\u3002"}, + {"Overwrite.File", "\u30D5\u30A1\u30A4\u30EB\u3092\u4E0A\u66F8\u304D\u3057\u307E\u3059"}, + {"Policy.successfully.written.to.filename", + "\u30DD\u30EA\u30B7\u30FC\u306E{0}\u3078\u306E\u66F8\u8FBC\u307F\u306B\u6210\u529F\u3057\u307E\u3057\u305F"}, + {"null.filename", "\u30D5\u30A1\u30A4\u30EB\u540D\u304Cnull\u3067\u3059"}, + {"Save.changes.", "\u5909\u66F4\u3092\u4FDD\u5B58\u3057\u307E\u3059\u304B\u3002"}, + {"Yes", "\u306F\u3044"}, + {"No", "\u3044\u3044\u3048"}, + {"Policy.Entry", "\u30DD\u30EA\u30B7\u30FC\u30FB\u30A8\u30F3\u30C8\u30EA"}, + {"Save.Changes", "\u5909\u66F4\u3092\u4FDD\u5B58\u3057\u307E\u3059"}, + {"No.Policy.Entry.selected", "\u30DD\u30EA\u30B7\u30FC\u30FB\u30A8\u30F3\u30C8\u30EA\u304C\u9078\u629E\u3055\u308C\u3066\u3044\u307E\u305B\u3093"}, + {"Unable.to.open.KeyStore.ex.toString.", + "\u30AD\u30FC\u30B9\u30C8\u30A2{0}\u3092\u958B\u3051\u307E\u305B\u3093"}, + {"No.principal.selected", "\u30D7\u30EA\u30F3\u30B7\u30D1\u30EB\u304C\u9078\u629E\u3055\u308C\u3066\u3044\u307E\u305B\u3093"}, + {"No.permission.selected", "\u30A2\u30AF\u30BB\u30B9\u6A29\u304C\u9078\u629E\u3055\u308C\u3066\u3044\u307E\u305B\u3093"}, + {"name", "\u540D\u524D"}, + {"configuration.type", "\u69CB\u6210\u30BF\u30A4\u30D7"}, + {"environment.variable.name", "\u74B0\u5883\u5909\u6570\u540D"}, + {"library.name", "\u30E9\u30A4\u30D6\u30E9\u30EA\u540D"}, + {"package.name", "\u30D1\u30C3\u30B1\u30FC\u30B8\u540D"}, + {"policy.type", "\u30DD\u30EA\u30B7\u30FC\u30FB\u30BF\u30A4\u30D7"}, + {"property.name", "\u30D7\u30ED\u30D1\u30C6\u30A3\u540D"}, + {"provider.name", "\u30D7\u30ED\u30D0\u30A4\u30C0\u540D"}, + {"Principal.List", "\u30D7\u30EA\u30F3\u30B7\u30D1\u30EB\u306E\u30EA\u30B9\u30C8"}, + {"Permission.List", "\u30A2\u30AF\u30BB\u30B9\u6A29\u306E\u30EA\u30B9\u30C8"}, + {"Code.Base", "\u30B3\u30FC\u30C9\u30FB\u30D9\u30FC\u30B9"}, + {"KeyStore.U.R.L.", "\u30AD\u30FC\u30B9\u30C8\u30A2U R L:"}, + {"KeyStore.Password.U.R.L.", "\u30AD\u30FC\u30B9\u30C8\u30A2\u30FB\u30D1\u30B9\u30EF\u30FC\u30C9U R L:"} + }; + + + /** + * Returns the contents of this ResourceBundle. + * + *

+ * + * @return the contents of this ResourceBundle. + */ + @Override + public Object[][] getContents() { + return contents; + } +} diff --git a/jdk/src/share/classes/sun/security/tools/policytool/Resources_ko.java b/jdk/src/share/classes/sun/security/tools/policytool/Resources_ko.java new file mode 100644 index 00000000000..7797ec803a0 --- /dev/null +++ b/jdk/src/share/classes/sun/security/tools/policytool/Resources_ko.java @@ -0,0 +1,156 @@ +/* + * Copyright (c) 2000, 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. 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.security.tools.policytool; + +/** + *

This class represents the ResourceBundle + * for the policytool. + * + */ +public class Resources_ko extends java.util.ListResourceBundle { + + private static final Object[][] contents = { + {"NEWLINE", "\n"}, + {"Warning.A.public.key.for.alias.signers.i.does.not.exist.Make.sure.a.KeyStore.is.properly.configured.", + "\uACBD\uACE0: {0} \uBCC4\uCE6D\uC5D0 \uB300\uD55C \uACF5\uC6A9 \uD0A4\uAC00 \uC874\uC7AC\uD558\uC9C0 \uC54A\uC2B5\uB2C8\uB2E4. \uD0A4 \uC800\uC7A5\uC18C\uAC00 \uC81C\uB300\uB85C \uAD6C\uC131\uB418\uC5B4 \uC788\uB294\uC9C0 \uD655\uC778\uD558\uC2ED\uC2DC\uC624."}, + {"Warning.Class.not.found.class", "\uACBD\uACE0: \uD074\uB798\uC2A4\uB97C \uCC3E\uC744 \uC218 \uC5C6\uC74C: {0}"}, + {"Warning.Invalid.argument.s.for.constructor.arg", + "\uACBD\uACE0: \uC0DD\uC131\uC790\uC5D0 \uB300\uD574 \uBD80\uC801\uD569\uD55C \uC778\uC218: {0}"}, + {"Illegal.Principal.Type.type", "\uC798\uBABB\uB41C \uC8FC\uCCB4 \uC720\uD615: {0}"}, + {"Illegal.option.option", "\uC798\uBABB\uB41C \uC635\uC158: {0}"}, + {"Usage.policytool.options.", "\uC0AC\uC6A9\uBC95: policytool [options]"}, + {".file.file.policy.file.location", + " [-file ] \uC815\uCC45 \uD30C\uC77C \uC704\uCE58"}, + {"New", "\uC0C8\uB85C \uB9CC\uB4E4\uAE30"}, + {"Open", "\uC5F4\uAE30"}, + {"Save", "\uC800\uC7A5"}, + {"Save.As", "\uB2E4\uB978 \uC774\uB984\uC73C\uB85C \uC800\uC7A5"}, + {"View.Warning.Log", "\uACBD\uACE0 \uB85C\uADF8 \uBCF4\uAE30"}, + {"Exit", "\uC885\uB8CC"}, + {"Add.Policy.Entry", "\uC815\uCC45 \uD56D\uBAA9 \uCD94\uAC00"}, + {"Edit.Policy.Entry", "\uC815\uCC45 \uD56D\uBAA9 \uD3B8\uC9D1"}, + {"Remove.Policy.Entry", "\uC815\uCC45 \uD56D\uBAA9 \uC81C\uAC70"}, + {"Edit", "\uD3B8\uC9D1"}, + {"Retain", "\uC720\uC9C0"}, + + {"Warning.File.name.may.include.escaped.backslash.characters.It.is.not.necessary.to.escape.backslash.characters.the.tool.escapes", + "\uACBD\uACE0: \uD30C\uC77C \uC774\uB984\uC5D0 \uC774\uC2A4\uCF00\uC774\uD504\uB41C \uBC31\uC2AC\uB798\uC2DC \uBB38\uC790\uAC00 \uD3EC\uD568\uB418\uC5C8\uC744 \uC218 \uC788\uC2B5\uB2C8\uB2E4. \uBC31\uC2AC\uB798\uC2DC \uBB38\uC790\uB294 \uC774\uC2A4\uCF00\uC774\uD504\uD560 \uD544\uC694\uAC00 \uC5C6\uC2B5\uB2C8\uB2E4. \uC601\uAD6C \uC800\uC7A5\uC18C\uC5D0 \uC815\uCC45 \uCF58\uD150\uCE20\uB97C \uC4F8 \uB54C \uD544\uC694\uC5D0 \uB530\uB77C \uC790\uB3D9\uC73C\uB85C \uBB38\uC790\uAC00 \uC774\uC2A4\uCF00\uC774\uD504\uB429\uB2C8\uB2E4.\n\n\uC785\uB825\uB41C \uC774\uB984\uC744 \uADF8\uB300\uB85C \uC720\uC9C0\uD558\uB824\uBA74 [\uC720\uC9C0]\uB97C \uB204\uB974\uACE0, \uC774\uB984\uC744 \uD3B8\uC9D1\uD558\uB824\uBA74 [\uD3B8\uC9D1]\uC744 \uB204\uB974\uC2ED\uC2DC\uC624."}, + + {"Add.Public.Key.Alias", "\uACF5\uC6A9 \uD0A4 \uBCC4\uCE6D \uCD94\uAC00"}, + {"Remove.Public.Key.Alias", "\uACF5\uC6A9 \uD0A4 \uBCC4\uCE6D \uC81C\uAC70"}, + {"File", "\uD30C\uC77C"}, + {"KeyStore", "\uD0A4 \uC800\uC7A5\uC18C"}, + {"Policy.File.", "\uC815\uCC45 \uD30C\uC77C:"}, + {"Could.not.open.policy.file.policyFile.e.toString.", + "\uC815\uCC45 \uD30C\uC77C\uC744 \uC5F4 \uC218 \uC5C6\uC74C: {0}: {1}"}, + {"Policy.Tool", "\uC815\uCC45 \uD234"}, + {"Errors.have.occurred.while.opening.the.policy.configuration.View.the.Warning.Log.for.more.information.", + "\uC815\uCC45 \uAD6C\uC131\uC744 \uC5EC\uB294 \uC911 \uC624\uB958\uAC00 \uBC1C\uC0DD\uD588\uC2B5\uB2C8\uB2E4. \uC790\uC138\uD55C \uB0B4\uC6A9\uC740 \uACBD\uACE0 \uB85C\uADF8\uB97C \uD655\uC778\uD558\uC2ED\uC2DC\uC624."}, + {"Error", "\uC624\uB958"}, + {"OK", "\uD655\uC778"}, + {"Status", "\uC0C1\uD0DC"}, + {"Warning", "\uACBD\uACE0"}, + {"Permission.", + "\uAD8C\uD55C: "}, + {"Principal.Type.", "\uC8FC\uCCB4 \uC720\uD615:"}, + {"Principal.Name.", "\uC8FC\uCCB4 \uC774\uB984:"}, + {"Target.Name.", + "\uB300\uC0C1 \uC774\uB984: "}, + {"Actions.", + "\uC791\uC5C5: "}, + {"OK.to.overwrite.existing.file.filename.", + "\uAE30\uC874 \uD30C\uC77C {0}\uC744(\uB97C) \uACB9\uCCD0 \uC4F0\uACA0\uC2B5\uB2C8\uAE4C?"}, + {"Cancel", "\uCDE8\uC18C"}, + {"CodeBase.", "CodeBase:"}, + {"SignedBy.", "SignedBy:"}, + {"Add.Principal", "\uC8FC\uCCB4 \uCD94\uAC00"}, + {"Edit.Principal", "\uC8FC\uCCB4 \uD3B8\uC9D1"}, + {"Remove.Principal", "\uC8FC\uCCB4 \uC81C\uAC70"}, + {"Principals.", "\uC8FC\uCCB4:"}, + {".Add.Permission", " \uAD8C\uD55C \uCD94\uAC00"}, + {".Edit.Permission", " \uAD8C\uD55C \uD3B8\uC9D1"}, + {"Remove.Permission", "\uAD8C\uD55C \uC81C\uAC70"}, + {"Done", "\uC644\uB8CC"}, + {"KeyStore.URL.", "\uD0A4 \uC800\uC7A5\uC18C URL:"}, + {"KeyStore.Type.", "\uD0A4 \uC800\uC7A5\uC18C \uC720\uD615:"}, + {"KeyStore.Provider.", "\uD0A4 \uC800\uC7A5\uC18C \uC81C\uACF5\uC790:"}, + {"KeyStore.Password.URL.", "\uD0A4 \uC800\uC7A5\uC18C \uBE44\uBC00\uBC88\uD638 URL:"}, + {"Principals", "\uC8FC\uCCB4"}, + {".Edit.Principal.", " \uC8FC\uCCB4 \uD3B8\uC9D1:"}, + {".Add.New.Principal.", " \uC0C8 \uC8FC\uCCB4 \uCD94\uAC00:"}, + {"Permissions", "\uAD8C\uD55C"}, + {".Edit.Permission.", " \uAD8C\uD55C \uD3B8\uC9D1:"}, + {".Add.New.Permission.", " \uC0C8 \uAD8C\uD55C \uCD94\uAC00:"}, + {"Signed.By.", "\uC11C\uBA85\uC790:"}, + {"Cannot.Specify.Principal.with.a.Wildcard.Class.without.a.Wildcard.Name", + "\uC640\uC77C\uB4DC \uCE74\uB4DC \uBB38\uC790 \uC774\uB984 \uC5C6\uC774 \uC640\uC77C\uB4DC \uCE74\uB4DC \uBB38\uC790 \uD074\uB798\uC2A4\uB97C \uC0AC\uC6A9\uD558\uB294 \uC8FC\uCCB4\uB97C \uC9C0\uC815\uD560 \uC218 \uC5C6\uC2B5\uB2C8\uB2E4."}, + {"Cannot.Specify.Principal.without.a.Name", + "\uC774\uB984 \uC5C6\uC774 \uC8FC\uCCB4\uB97C \uC9C0\uC815\uD560 \uC218 \uC5C6\uC2B5\uB2C8\uB2E4."}, + {"Permission.and.Target.Name.must.have.a.value", + "\uAD8C\uD55C\uACFC \uB300\uC0C1 \uC774\uB984\uC758 \uAC12\uC774 \uC788\uC5B4\uC57C \uD569\uB2C8\uB2E4."}, + {"Remove.this.Policy.Entry.", "\uC774 \uC815\uCC45 \uD56D\uBAA9\uC744 \uC81C\uAC70\uD558\uACA0\uC2B5\uB2C8\uAE4C?"}, + {"Overwrite.File", "\uD30C\uC77C \uACB9\uCCD0\uC4F0\uAE30"}, + {"Policy.successfully.written.to.filename", + "{0}\uC5D0 \uC131\uACF5\uC801\uC73C\uB85C \uC815\uCC45\uC744 \uC37C\uC2B5\uB2C8\uB2E4."}, + {"null.filename", "\uB110 \uD30C\uC77C \uC774\uB984"}, + {"Save.changes.", "\uBCC0\uACBD \uC0AC\uD56D\uC744 \uC800\uC7A5\uD558\uACA0\uC2B5\uB2C8\uAE4C?"}, + {"Yes", "\uC608"}, + {"No", "\uC544\uB2C8\uC624"}, + {"Policy.Entry", "\uC815\uCC45 \uD56D\uBAA9"}, + {"Save.Changes", "\uBCC0\uACBD \uC0AC\uD56D \uC800\uC7A5"}, + {"No.Policy.Entry.selected", "\uC120\uD0DD\uB41C \uC815\uCC45 \uD56D\uBAA9\uC774 \uC5C6\uC2B5\uB2C8\uB2E4."}, + {"Unable.to.open.KeyStore.ex.toString.", + "\uD0A4 \uC800\uC7A5\uC18C\uB97C \uC5F4 \uC218 \uC5C6\uC74C: {0}"}, + {"No.principal.selected", "\uC120\uD0DD\uB41C \uC8FC\uCCB4\uAC00 \uC5C6\uC2B5\uB2C8\uB2E4."}, + {"No.permission.selected", "\uC120\uD0DD\uB41C \uAD8C\uD55C\uC774 \uC5C6\uC2B5\uB2C8\uB2E4."}, + {"name", "\uC774\uB984"}, + {"configuration.type", "\uAD6C\uC131 \uC720\uD615"}, + {"environment.variable.name", "\uD658\uACBD \uBCC0\uC218 \uC774\uB984"}, + {"library.name", "\uB77C\uC774\uBE0C\uB7EC\uB9AC \uC774\uB984"}, + {"package.name", "\uD328\uD0A4\uC9C0 \uC774\uB984"}, + {"policy.type", "\uC815\uCC45 \uC720\uD615"}, + {"property.name", "\uC18D\uC131 \uC774\uB984"}, + {"provider.name", "\uC81C\uACF5\uC790 \uC774\uB984"}, + {"Principal.List", "\uC8FC\uCCB4 \uBAA9\uB85D"}, + {"Permission.List", "\uAD8C\uD55C \uBAA9\uB85D"}, + {"Code.Base", "\uCF54\uB4DC \uBCA0\uC774\uC2A4"}, + {"KeyStore.U.R.L.", "\uD0A4 \uC800\uC7A5\uC18C URL:"}, + {"KeyStore.Password.U.R.L.", "\uD0A4 \uC800\uC7A5\uC18C \uBE44\uBC00\uBC88\uD638 URL:"} + }; + + + /** + * Returns the contents of this ResourceBundle. + * + *

+ * + * @return the contents of this ResourceBundle. + */ + @Override + public Object[][] getContents() { + return contents; + } +} diff --git a/jdk/src/share/classes/sun/security/tools/policytool/Resources_pt_BR.java b/jdk/src/share/classes/sun/security/tools/policytool/Resources_pt_BR.java new file mode 100644 index 00000000000..9bd9808d0b5 --- /dev/null +++ b/jdk/src/share/classes/sun/security/tools/policytool/Resources_pt_BR.java @@ -0,0 +1,156 @@ +/* + * Copyright (c) 2000, 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. 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.security.tools.policytool; + +/** + *

This class represents the ResourceBundle + * for the policytool. + * + */ +public class Resources_pt_BR extends java.util.ListResourceBundle { + + private static final Object[][] contents = { + {"NEWLINE", "\n"}, + {"Warning.A.public.key.for.alias.signers.i.does.not.exist.Make.sure.a.KeyStore.is.properly.configured.", + "Advert\u00EAncia: N\u00E3o existe uma chave p\u00FAblica para o alias {0}. Certifique-se de que um KeyStore esteja configurado adequadamente."}, + {"Warning.Class.not.found.class", "Advert\u00EAncia: Classe n\u00E3o encontrada: {0}"}, + {"Warning.Invalid.argument.s.for.constructor.arg", + "Advert\u00EAncia: Argumento(s) inv\u00E1lido(s) para o construtor: {0}"}, + {"Illegal.Principal.Type.type", "Tipo Principal Inv\u00E1lido: {0}"}, + {"Illegal.option.option", "Op\u00E7\u00E3o inv\u00E1lida: {0}"}, + {"Usage.policytool.options.", "Uso: policytool [op\u00E7\u00F5es]"}, + {".file.file.policy.file.location", + " [-file ] localiza\u00E7\u00E3o do arquivo de pol\u00EDtica"}, + {"New", "Novo"}, + {"Open", "Abrir"}, + {"Save", "Salvar"}, + {"Save.As", "Salvar Como"}, + {"View.Warning.Log", "Exibir Log de Advert\u00EAncias"}, + {"Exit", "Sair"}, + {"Add.Policy.Entry", "Adicionar Entrada de Pol\u00EDtica"}, + {"Edit.Policy.Entry", "Editar Entrada de Pol\u00EDtica"}, + {"Remove.Policy.Entry", "Remover Entrada de Pol\u00EDtica"}, + {"Edit", "Editar"}, + {"Retain", "Reter"}, + + {"Warning.File.name.may.include.escaped.backslash.characters.It.is.not.necessary.to.escape.backslash.characters.the.tool.escapes", + "Advert\u00EAncia: O nome do arquivo pode conter caracteres de escape barra invertida. N\u00E3o \u00E9 necess\u00E1rio fazer o escape dos caracteres de barra invertida (a ferramenta faz o escape dos caracteres conforme necess\u00E1rio ao gravar o conte\u00FAdo da pol\u00EDtica no armazenamento persistente).\n\nClique em Reter para reter o nome da entrada ou clique em Editar para edit\u00E1-lo."}, + + {"Add.Public.Key.Alias", "Adicionar Alias de Chave P\u00FAblica"}, + {"Remove.Public.Key.Alias", "Remover Alias de Chave P\u00FAblica"}, + {"File", "Arquivo"}, + {"KeyStore", "KeyStore"}, + {"Policy.File.", "Arquivo de Pol\u00EDtica:"}, + {"Could.not.open.policy.file.policyFile.e.toString.", + "N\u00E3o foi poss\u00EDvel abrir o arquivo de pol\u00EDtica: {0}: {1}"}, + {"Policy.Tool", "Ferramenta de Pol\u00EDtica"}, + {"Errors.have.occurred.while.opening.the.policy.configuration.View.the.Warning.Log.for.more.information.", + "Erros durante a abertura da configura\u00E7\u00E3o da pol\u00EDtica. Consulte o Log de Advert\u00EAncias para obter mais informa\u00E7\u00F5es."}, + {"Error", "Erro"}, + {"OK", "OK"}, + {"Status", "Status"}, + {"Warning", "Advert\u00EAncia"}, + {"Permission.", + "Permiss\u00E3o: "}, + {"Principal.Type.", "Tipo do Principal:"}, + {"Principal.Name.", "Nome do Principal:"}, + {"Target.Name.", + "Nome do Alvo: "}, + {"Actions.", + "A\u00E7\u00F5es: "}, + {"OK.to.overwrite.existing.file.filename.", + "Est\u00E1 correto substituir o arquivo existente {0}?"}, + {"Cancel", "Cancelar"}, + {"CodeBase.", "CodeBase:"}, + {"SignedBy.", "SignedBy:"}, + {"Add.Principal", "Adicionar Principal"}, + {"Edit.Principal", "Editar Principal"}, + {"Remove.Principal", "Remover Principal"}, + {"Principals.", "Principais:"}, + {".Add.Permission", " Adicionar Permiss\u00E3o"}, + {".Edit.Permission", " Editar Permiss\u00E3o"}, + {"Remove.Permission", "Remover Permiss\u00E3o"}, + {"Done", "Conclu\u00EDdo"}, + {"KeyStore.URL.", "URL do KeyStore:"}, + {"KeyStore.Type.", "Tipo de KeyStore:"}, + {"KeyStore.Provider.", "Fornecedor de KeyStore:"}, + {"KeyStore.Password.URL.", "URL da Senha do KeyStore:"}, + {"Principals", "Principais"}, + {".Edit.Principal.", " Editar Principal:"}, + {".Add.New.Principal.", " Adicionar Novo Principal:"}, + {"Permissions", "Permiss\u00F5es"}, + {".Edit.Permission.", " Editar Permiss\u00E3o:"}, + {".Add.New.Permission.", " Adicionar Nova Permiss\u00E3o:"}, + {"Signed.By.", "Assinado por:"}, + {"Cannot.Specify.Principal.with.a.Wildcard.Class.without.a.Wildcard.Name", + "N\u00E3o \u00E9 Poss\u00EDvel Especificar um Principal com uma Classe de Curinga sem um Nome de Curinga"}, + {"Cannot.Specify.Principal.without.a.Name", + "N\u00E3o \u00E9 Poss\u00EDvel Especificar um Principal sem um Nome"}, + {"Permission.and.Target.Name.must.have.a.value", + "O Nome de Destino e a Permiss\u00E3o devem ter um Valor"}, + {"Remove.this.Policy.Entry.", "Remover esta Entrada de Pol\u00EDtica?"}, + {"Overwrite.File", "Substituir Arquivo"}, + {"Policy.successfully.written.to.filename", + "Pol\u00EDtica gravada com \u00EAxito em {0}"}, + {"null.filename", "nome de arquivo nulo"}, + {"Save.changes.", "Salvar altera\u00E7\u00F5es?"}, + {"Yes", "Sim"}, + {"No", "N\u00E3o"}, + {"Policy.Entry", "Entrada de Pol\u00EDtica"}, + {"Save.Changes", "Salvar Altera\u00E7\u00F5es"}, + {"No.Policy.Entry.selected", "Nenhuma Entrada de Pol\u00EDtica Selecionada"}, + {"Unable.to.open.KeyStore.ex.toString.", + "N\u00E3o \u00E9 poss\u00EDvel abrir a KeyStore: {0}"}, + {"No.principal.selected", "Nenhum principal selecionado"}, + {"No.permission.selected", "Nenhuma permiss\u00E3o selecionada"}, + {"name", "nome"}, + {"configuration.type", "tipo de configura\u00E7\u00E3o"}, + {"environment.variable.name", "nome da vari\u00E1vel de ambiente"}, + {"library.name", "nome da biblioteca"}, + {"package.name", "nome do pacote"}, + {"policy.type", "tipo de pol\u00EDtica"}, + {"property.name", "nome da propriedade"}, + {"provider.name", "nome do fornecedor"}, + {"Principal.List", "Lista de Principais"}, + {"Permission.List", "Lista de Permiss\u00F5es"}, + {"Code.Base", "Base de C\u00F3digo"}, + {"KeyStore.U.R.L.", "U R L da KeyStore:"}, + {"KeyStore.Password.U.R.L.", "U R L da Senha do KeyStore:"} + }; + + + /** + * Returns the contents of this ResourceBundle. + * + *

+ * + * @return the contents of this ResourceBundle. + */ + @Override + public Object[][] getContents() { + return contents; + } +} diff --git a/jdk/src/share/classes/sun/security/tools/policytool/Resources_sv.java b/jdk/src/share/classes/sun/security/tools/policytool/Resources_sv.java new file mode 100644 index 00000000000..f0bf734ae40 --- /dev/null +++ b/jdk/src/share/classes/sun/security/tools/policytool/Resources_sv.java @@ -0,0 +1,156 @@ +/* + * Copyright (c) 2000, 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. 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.security.tools.policytool; + +/** + *

This class represents the ResourceBundle + * for the policytool. + * + */ +public class Resources_sv extends java.util.ListResourceBundle { + + private static final Object[][] contents = { + {"NEWLINE", "\n"}, + {"Warning.A.public.key.for.alias.signers.i.does.not.exist.Make.sure.a.KeyStore.is.properly.configured.", + "Varning! Det finns ingen offentlig nyckel f\u00F6r aliaset {0}. Kontrollera att det aktuella nyckellagret \u00E4r korrekt konfigurerat."}, + {"Warning.Class.not.found.class", "Varning! Klassen hittades inte: {0}"}, + {"Warning.Invalid.argument.s.for.constructor.arg", + "Varning! Ogiltiga argument f\u00F6r konstruktor: {0}"}, + {"Illegal.Principal.Type.type", "Otill\u00E5ten identitetshavaretyp: {0}"}, + {"Illegal.option.option", "Otill\u00E5tet alternativ: {0}"}, + {"Usage.policytool.options.", "Syntax: policytool [alternativ]"}, + {".file.file.policy.file.location", + " [-file ] policyfilens plats"}, + {"New", "Nytt"}, + {"Open", "\u00D6ppna"}, + {"Save", "Spara"}, + {"Save.As", "Spara som"}, + {"View.Warning.Log", "Visa varningslogg"}, + {"Exit", "Avsluta"}, + {"Add.Policy.Entry", "L\u00E4gg till policypost"}, + {"Edit.Policy.Entry", "Redigera policypost"}, + {"Remove.Policy.Entry", "Ta bort policypost"}, + {"Edit", "Redigera"}, + {"Retain", "Beh\u00E5ll"}, + + {"Warning.File.name.may.include.escaped.backslash.characters.It.is.not.necessary.to.escape.backslash.characters.the.tool.escapes", + "Varning! Filnamnet kan inneh\u00E5lla omv\u00E4nda snedstreck inom citattecken. Citattecken kr\u00E4vs inte f\u00F6r omv\u00E4nda snedstreck (verktyget hanterar detta n\u00E4r policyinneh\u00E5llet skrivs till det best\u00E4ndiga lagret).\n\nKlicka p\u00E5 Beh\u00E5ll f\u00F6r att beh\u00E5lla det angivna namnet, eller klicka p\u00E5 Redigera f\u00F6r att \u00E4ndra det."}, + + {"Add.Public.Key.Alias", "L\u00E4gg till offentligt nyckelalias"}, + {"Remove.Public.Key.Alias", "Ta bort offentligt nyckelalias"}, + {"File", "Fil"}, + {"KeyStore", "Nyckellager"}, + {"Policy.File.", "Policyfil:"}, + {"Could.not.open.policy.file.policyFile.e.toString.", + "Kan inte \u00F6ppna policyfilen: {0}: {1}"}, + {"Policy.Tool", "Policyverktyg"}, + {"Errors.have.occurred.while.opening.the.policy.configuration.View.the.Warning.Log.for.more.information.", + "Det uppstod ett fel n\u00E4r policykonfigurationen skulle \u00F6ppnas. Se varningsloggen f\u00F6r mer information."}, + {"Error", "Fel"}, + {"OK", "OK"}, + {"Status", "Status"}, + {"Warning", "Varning"}, + {"Permission.", + "Beh\u00F6righet: "}, + {"Principal.Type.", "Identitetshavaretyp:"}, + {"Principal.Name.", "Identitetshavare:"}, + {"Target.Name.", + "M\u00E5l: "}, + {"Actions.", + "Funktioner: "}, + {"OK.to.overwrite.existing.file.filename.", + "Ska den befintliga filen {0} skrivas \u00F6ver?"}, + {"Cancel", "Avbryt"}, + {"CodeBase.", "Kodbas:"}, + {"SignedBy.", "Signerad av:"}, + {"Add.Principal", "L\u00E4gg till identitetshavare"}, + {"Edit.Principal", "Redigera identitetshavare"}, + {"Remove.Principal", "Ta bort identitetshavare"}, + {"Principals.", "Identitetshavare:"}, + {".Add.Permission", " L\u00E4gg till beh\u00F6righet"}, + {".Edit.Permission", " Redigera beh\u00F6righet"}, + {"Remove.Permission", "Ta bort beh\u00F6righet"}, + {"Done", "Utf\u00F6rd"}, + {"KeyStore.URL.", "URL f\u00F6r nyckellager:"}, + {"KeyStore.Type.", "Nyckellagertyp:"}, + {"KeyStore.Provider.", "Nyckellagerleverant\u00F6r:"}, + {"KeyStore.Password.URL.", "URL f\u00F6r l\u00F6senord till nyckellager:"}, + {"Principals", "Identitetshavare"}, + {".Edit.Principal.", " Redigera identitetshavare:"}, + {".Add.New.Principal.", " L\u00E4gg till ny identitetshavare:"}, + {"Permissions", "Beh\u00F6righet"}, + {".Edit.Permission.", " Redigera beh\u00F6righet:"}, + {".Add.New.Permission.", " L\u00E4gg till ny beh\u00F6righet:"}, + {"Signed.By.", "Signerad av:"}, + {"Cannot.Specify.Principal.with.a.Wildcard.Class.without.a.Wildcard.Name", + "Kan inte specificera identitetshavare med jokerteckenklass utan jokerteckennamn"}, + {"Cannot.Specify.Principal.without.a.Name", + "Kan inte specificera identitetshavare utan namn"}, + {"Permission.and.Target.Name.must.have.a.value", + "Beh\u00F6righet och m\u00E5lnamn m\u00E5ste ha ett v\u00E4rde"}, + {"Remove.this.Policy.Entry.", "Vill du ta bort den h\u00E4r policyposten?"}, + {"Overwrite.File", "Skriv \u00F6ver fil"}, + {"Policy.successfully.written.to.filename", + "Policy har skrivits till {0}"}, + {"null.filename", "nullfilnamn"}, + {"Save.changes.", "Vill du spara \u00E4ndringarna?"}, + {"Yes", "Ja"}, + {"No", "Nej"}, + {"Policy.Entry", "Policyfel"}, + {"Save.Changes", "Spara \u00E4ndringar"}, + {"No.Policy.Entry.selected", "Ingen policypost har valts"}, + {"Unable.to.open.KeyStore.ex.toString.", + "Kan inte \u00F6ppna nyckellagret: {0}"}, + {"No.principal.selected", "Ingen identitetshavare har valts"}, + {"No.permission.selected", "Ingen beh\u00F6righet har valts"}, + {"name", "namn"}, + {"configuration.type", "konfigurationstyp"}, + {"environment.variable.name", "variabelnamn f\u00F6r milj\u00F6"}, + {"library.name", "biblioteksnamn"}, + {"package.name", "paketnamn"}, + {"policy.type", "policytyp"}, + {"property.name", "egenskapsnamn"}, + {"provider.name", "leverant\u00F6rsnamn"}, + {"Principal.List", "Lista \u00F6ver identitetshavare"}, + {"Permission.List", "Beh\u00F6righetslista"}, + {"Code.Base", "Kodbas"}, + {"KeyStore.U.R.L.", "URL f\u00F6r nyckellager:"}, + {"KeyStore.Password.U.R.L.", "URL f\u00F6r l\u00F6senord till nyckellager:"} + }; + + + /** + * Returns the contents of this ResourceBundle. + * + *

+ * + * @return the contents of this ResourceBundle. + */ + @Override + public Object[][] getContents() { + return contents; + } +} diff --git a/jdk/src/share/classes/sun/security/tools/policytool/Resources_zh_CN.java b/jdk/src/share/classes/sun/security/tools/policytool/Resources_zh_CN.java new file mode 100644 index 00000000000..fcf8e126d4c --- /dev/null +++ b/jdk/src/share/classes/sun/security/tools/policytool/Resources_zh_CN.java @@ -0,0 +1,156 @@ +/* + * Copyright (c) 2000, 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. 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.security.tools.policytool; + +/** + *

This class represents the ResourceBundle + * for the policytool. + * + */ +public class Resources_zh_CN extends java.util.ListResourceBundle { + + private static final Object[][] contents = { + {"NEWLINE", "\n"}, + {"Warning.A.public.key.for.alias.signers.i.does.not.exist.Make.sure.a.KeyStore.is.properly.configured.", + "\u8B66\u544A: \u522B\u540D {0} \u7684\u516C\u5171\u5BC6\u94A5\u4E0D\u5B58\u5728\u3002\u8BF7\u786E\u4FDD\u5DF2\u6B63\u786E\u914D\u7F6E KeyStore\u3002"}, + {"Warning.Class.not.found.class", "\u8B66\u544A: \u627E\u4E0D\u5230\u7C7B: {0}"}, + {"Warning.Invalid.argument.s.for.constructor.arg", + "\u8B66\u544A: \u6784\u9020\u5668\u7684\u53C2\u6570\u65E0\u6548: {0}"}, + {"Illegal.Principal.Type.type", "\u975E\u6CD5\u7684\u4E3B\u7528\u6237\u7C7B\u578B: {0}"}, + {"Illegal.option.option", "\u975E\u6CD5\u9009\u9879: {0}"}, + {"Usage.policytool.options.", "\u7528\u6CD5: policytool [\u9009\u9879]"}, + {".file.file.policy.file.location", + " [-file ] \u7B56\u7565\u6587\u4EF6\u4F4D\u7F6E"}, + {"New", "\u65B0\u5EFA"}, + {"Open", "\u6253\u5F00"}, + {"Save", "\u4FDD\u5B58"}, + {"Save.As", "\u53E6\u5B58\u4E3A"}, + {"View.Warning.Log", "\u67E5\u770B\u8B66\u544A\u65E5\u5FD7"}, + {"Exit", "\u9000\u51FA"}, + {"Add.Policy.Entry", "\u6DFB\u52A0\u7B56\u7565\u6761\u76EE"}, + {"Edit.Policy.Entry", "\u7F16\u8F91\u7B56\u7565\u6761\u76EE"}, + {"Remove.Policy.Entry", "\u5220\u9664\u7B56\u7565\u6761\u76EE"}, + {"Edit", "\u7F16\u8F91"}, + {"Retain", "\u4FDD\u7559"}, + + {"Warning.File.name.may.include.escaped.backslash.characters.It.is.not.necessary.to.escape.backslash.characters.the.tool.escapes", + "\u8B66\u544A: \u6587\u4EF6\u540D\u5305\u542B\u8F6C\u4E49\u7684\u53CD\u659C\u6760\u5B57\u7B26\u3002\u4E0D\u9700\u8981\u5BF9\u53CD\u659C\u6760\u5B57\u7B26\u8FDB\u884C\u8F6C\u4E49 (\u8BE5\u5DE5\u5177\u5728\u5C06\u7B56\u7565\u5185\u5BB9\u5199\u5165\u6C38\u4E45\u5B58\u50A8\u65F6\u4F1A\u6839\u636E\u9700\u8981\u5BF9\u5B57\u7B26\u8FDB\u884C\u8F6C\u4E49)\u3002\n\n\u5355\u51FB\u201C\u4FDD\u7559\u201D\u53EF\u4FDD\u7559\u8F93\u5165\u7684\u540D\u79F0, \u6216\u8005\u5355\u51FB\u201C\u7F16\u8F91\u201D\u53EF\u7F16\u8F91\u8BE5\u540D\u79F0\u3002"}, + + {"Add.Public.Key.Alias", "\u6DFB\u52A0\u516C\u5171\u5BC6\u94A5\u522B\u540D"}, + {"Remove.Public.Key.Alias", "\u5220\u9664\u516C\u5171\u5BC6\u94A5\u522B\u540D"}, + {"File", "\u6587\u4EF6"}, + {"KeyStore", "KeyStore"}, + {"Policy.File.", "\u7B56\u7565\u6587\u4EF6:"}, + {"Could.not.open.policy.file.policyFile.e.toString.", + "\u65E0\u6CD5\u6253\u5F00\u7B56\u7565\u6587\u4EF6: {0}: {1}"}, + {"Policy.Tool", "\u7B56\u7565\u5DE5\u5177"}, + {"Errors.have.occurred.while.opening.the.policy.configuration.View.the.Warning.Log.for.more.information.", + "\u6253\u5F00\u7B56\u7565\u914D\u7F6E\u65F6\u51FA\u9519\u3002\u6709\u5173\u8BE6\u7EC6\u4FE1\u606F, \u8BF7\u67E5\u770B\u8B66\u544A\u65E5\u5FD7\u3002"}, + {"Error", "\u9519\u8BEF"}, + {"OK", "\u786E\u5B9A"}, + {"Status", "\u72B6\u6001"}, + {"Warning", "\u8B66\u544A"}, + {"Permission.", + "\u6743\u9650: "}, + {"Principal.Type.", "\u4E3B\u7528\u6237\u7C7B\u578B:"}, + {"Principal.Name.", "\u4E3B\u7528\u6237\u540D\u79F0:"}, + {"Target.Name.", + "\u76EE\u6807\u540D\u79F0: "}, + {"Actions.", + "\u64CD\u4F5C: "}, + {"OK.to.overwrite.existing.file.filename.", + "\u786E\u8BA4\u8986\u76D6\u73B0\u6709\u7684\u6587\u4EF6{0}?"}, + {"Cancel", "\u53D6\u6D88"}, + {"CodeBase.", "CodeBase:"}, + {"SignedBy.", "SignedBy:"}, + {"Add.Principal", "\u6DFB\u52A0\u4E3B\u7528\u6237"}, + {"Edit.Principal", "\u7F16\u8F91\u4E3B\u7528\u6237"}, + {"Remove.Principal", "\u5220\u9664\u4E3B\u7528\u6237"}, + {"Principals.", "\u4E3B\u7528\u6237:"}, + {".Add.Permission", " \u6DFB\u52A0\u6743\u9650"}, + {".Edit.Permission", " \u7F16\u8F91\u6743\u9650"}, + {"Remove.Permission", "\u5220\u9664\u6743\u9650"}, + {"Done", "\u5B8C\u6210"}, + {"KeyStore.URL.", "KeyStore URL:"}, + {"KeyStore.Type.", "KeyStore \u7C7B\u578B:"}, + {"KeyStore.Provider.", "KeyStore \u63D0\u4F9B\u65B9:"}, + {"KeyStore.Password.URL.", "KeyStore \u53E3\u4EE4 URL:"}, + {"Principals", "\u4E3B\u7528\u6237"}, + {".Edit.Principal.", " \u7F16\u8F91\u4E3B\u7528\u6237:"}, + {".Add.New.Principal.", " \u6DFB\u52A0\u65B0\u4E3B\u7528\u6237:"}, + {"Permissions", "\u6743\u9650"}, + {".Edit.Permission.", " \u7F16\u8F91\u6743\u9650:"}, + {".Add.New.Permission.", " \u52A0\u5165\u65B0\u7684\u6743\u9650:"}, + {"Signed.By.", "\u7B7E\u7F72\u4EBA: "}, + {"Cannot.Specify.Principal.with.a.Wildcard.Class.without.a.Wildcard.Name", + "\u6CA1\u6709\u901A\u914D\u7B26\u540D\u79F0, \u65E0\u6CD5\u4F7F\u7528\u901A\u914D\u7B26\u7C7B\u6307\u5B9A\u4E3B\u7528\u6237"}, + {"Cannot.Specify.Principal.without.a.Name", + "\u6CA1\u6709\u540D\u79F0, \u65E0\u6CD5\u6307\u5B9A\u4E3B\u7528\u6237"}, + {"Permission.and.Target.Name.must.have.a.value", + "\u6743\u9650\u53CA\u76EE\u6807\u540D\u5FC5\u987B\u6709\u4E00\u4E2A\u503C"}, + {"Remove.this.Policy.Entry.", "\u662F\u5426\u5220\u9664\u6B64\u7B56\u7565\u6761\u76EE?"}, + {"Overwrite.File", "\u8986\u76D6\u6587\u4EF6"}, + {"Policy.successfully.written.to.filename", + "\u7B56\u7565\u5DF2\u6210\u529F\u5199\u5165\u5230{0}"}, + {"null.filename", "\u7A7A\u6587\u4EF6\u540D"}, + {"Save.changes.", "\u662F\u5426\u4FDD\u5B58\u6240\u505A\u7684\u66F4\u6539?"}, + {"Yes", "\u662F"}, + {"No", "\u5426"}, + {"Policy.Entry", "\u7B56\u7565\u6761\u76EE"}, + {"Save.Changes", "\u4FDD\u5B58\u66F4\u6539"}, + {"No.Policy.Entry.selected", "\u6CA1\u6709\u9009\u62E9\u7B56\u7565\u6761\u76EE"}, + {"Unable.to.open.KeyStore.ex.toString.", + "\u65E0\u6CD5\u6253\u5F00 KeyStore: {0}"}, + {"No.principal.selected", "\u672A\u9009\u62E9\u4E3B\u7528\u6237"}, + {"No.permission.selected", "\u6CA1\u6709\u9009\u62E9\u6743\u9650"}, + {"name", "\u540D\u79F0"}, + {"configuration.type", "\u914D\u7F6E\u7C7B\u578B"}, + {"environment.variable.name", "\u73AF\u5883\u53D8\u91CF\u540D"}, + {"library.name", "\u5E93\u540D\u79F0"}, + {"package.name", "\u7A0B\u5E8F\u5305\u540D\u79F0"}, + {"policy.type", "\u7B56\u7565\u7C7B\u578B"}, + {"property.name", "\u5C5E\u6027\u540D\u79F0"}, + {"provider.name", "\u63D0\u4F9B\u65B9\u540D\u79F0"}, + {"Principal.List", "\u4E3B\u7528\u6237\u5217\u8868"}, + {"Permission.List", "\u6743\u9650\u5217\u8868"}, + {"Code.Base", "\u4EE3\u7801\u5E93"}, + {"KeyStore.U.R.L.", "KeyStore URL:"}, + {"KeyStore.Password.U.R.L.", "KeyStore \u53E3\u4EE4 URL:"} + }; + + + /** + * Returns the contents of this ResourceBundle. + * + *

+ * + * @return the contents of this ResourceBundle. + */ + @Override + public Object[][] getContents() { + return contents; + } +} diff --git a/jdk/src/share/classes/sun/security/tools/policytool/Resources_zh_HK.java b/jdk/src/share/classes/sun/security/tools/policytool/Resources_zh_HK.java new file mode 100644 index 00000000000..a67441a4e9d --- /dev/null +++ b/jdk/src/share/classes/sun/security/tools/policytool/Resources_zh_HK.java @@ -0,0 +1,156 @@ +/* + * Copyright (c) 2000, 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. 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.security.tools.policytool; + +/** + *

This class represents the ResourceBundle + * for the policytool. + * + */ +public class Resources_zh_HK extends java.util.ListResourceBundle { + + private static final Object[][] contents = { + {"NEWLINE", "\n"}, + {"Warning.A.public.key.for.alias.signers.i.does.not.exist.Make.sure.a.KeyStore.is.properly.configured.", + "\u8B66\u544A: \u5225\u540D {0} \u7684\u516C\u958B\u91D1\u9470\u4E0D\u5B58\u5728\u3002\u8ACB\u78BA\u5B9A\u91D1\u9470\u5132\u5B58\u5EAB\u914D\u7F6E\u6B63\u78BA\u3002"}, + {"Warning.Class.not.found.class", "\u8B66\u544A: \u627E\u4E0D\u5230\u985E\u5225 {0}"}, + {"Warning.Invalid.argument.s.for.constructor.arg", + "\u8B66\u544A: \u7121\u6548\u7684\u5EFA\u69CB\u5B50\u5F15\u6578: {0}"}, + {"Illegal.Principal.Type.type", "\u7121\u6548\u7684 Principal \u985E\u578B: {0}"}, + {"Illegal.option.option", "\u7121\u6548\u7684\u9078\u9805: {0}"}, + {"Usage.policytool.options.", "\u7528\u6CD5: policytool [options]"}, + {".file.file.policy.file.location", + " [-file ] \u539F\u5247\u6A94\u6848\u4F4D\u7F6E"}, + {"New", "\u65B0\u589E"}, + {"Open", "\u958B\u555F"}, + {"Save", "\u5132\u5B58"}, + {"Save.As", "\u53E6\u5B58\u65B0\u6A94"}, + {"View.Warning.Log", "\u6AA2\u8996\u8B66\u544A\u8A18\u9304"}, + {"Exit", "\u7D50\u675F"}, + {"Add.Policy.Entry", "\u65B0\u589E\u539F\u5247\u9805\u76EE"}, + {"Edit.Policy.Entry", "\u7DE8\u8F2F\u539F\u5247\u9805\u76EE"}, + {"Remove.Policy.Entry", "\u79FB\u9664\u539F\u5247\u9805\u76EE"}, + {"Edit", "\u7DE8\u8F2F"}, + {"Retain", "\u4FDD\u7559"}, + + {"Warning.File.name.may.include.escaped.backslash.characters.It.is.not.necessary.to.escape.backslash.characters.the.tool.escapes", + "\u8B66\u544A: \u6A94\u6848\u540D\u7A31\u5305\u542B\u9041\u96E2\u53CD\u659C\u7DDA\u5B57\u5143\u3002\u4E0D\u9700\u8981\u9041\u96E2\u53CD\u659C\u7DDA\u5B57\u5143 (\u64B0\u5BEB\u539F\u5247\u5167\u5BB9\u81F3\u6C38\u4E45\u5B58\u653E\u5340\u6642\u9700\u8981\u5DE5\u5177\u9041\u96E2\u5B57\u5143)\u3002\n\n\u6309\u4E00\u4E0B\u300C\u4FDD\u7559\u300D\u4EE5\u4FDD\u7559\u8F38\u5165\u7684\u540D\u7A31\uFF0C\u6216\u6309\u4E00\u4E0B\u300C\u7DE8\u8F2F\u300D\u4EE5\u7DE8\u8F2F\u540D\u7A31\u3002"}, + + {"Add.Public.Key.Alias", "\u65B0\u589E\u516C\u958B\u91D1\u9470\u5225\u540D"}, + {"Remove.Public.Key.Alias", "\u79FB\u9664\u516C\u958B\u91D1\u9470\u5225\u540D"}, + {"File", "\u6A94\u6848"}, + {"KeyStore", "\u91D1\u9470\u5132\u5B58\u5EAB"}, + {"Policy.File.", "\u539F\u5247\u6A94\u6848: "}, + {"Could.not.open.policy.file.policyFile.e.toString.", + "\u7121\u6CD5\u958B\u555F\u539F\u5247\u6A94\u6848: {0}: {1}"}, + {"Policy.Tool", "\u539F\u5247\u5DE5\u5177"}, + {"Errors.have.occurred.while.opening.the.policy.configuration.View.the.Warning.Log.for.more.information.", + "\u958B\u555F\u539F\u5247\u8A18\u7F6E\u6642\u767C\u751F\u932F\u8AA4\u3002\u8ACB\u6AA2\u8996\u8B66\u544A\u8A18\u9304\u4EE5\u53D6\u5F97\u66F4\u591A\u7684\u8CC7\u8A0A"}, + {"Error", "\u932F\u8AA4"}, + {"OK", "\u78BA\u5B9A"}, + {"Status", "\u72C0\u614B"}, + {"Warning", "\u8B66\u544A"}, + {"Permission.", + "\u6B0A\u9650: "}, + {"Principal.Type.", "Principal \u985E\u578B: "}, + {"Principal.Name.", "Principal \u540D\u7A31: "}, + {"Target.Name.", + "\u76EE\u6A19\u540D\u7A31: "}, + {"Actions.", + "\u52D5\u4F5C: "}, + {"OK.to.overwrite.existing.file.filename.", + "\u78BA\u8A8D\u8986\u5BEB\u73FE\u5B58\u7684\u6A94\u6848 {0}\uFF1F"}, + {"Cancel", "\u53D6\u6D88"}, + {"CodeBase.", "CodeBase:"}, + {"SignedBy.", "SignedBy:"}, + {"Add.Principal", "\u65B0\u589E Principal"}, + {"Edit.Principal", "\u7DE8\u8F2F Principal"}, + {"Remove.Principal", "\u79FB\u9664 Principal"}, + {"Principals.", "Principal:"}, + {".Add.Permission", " \u65B0\u589E\u6B0A\u9650"}, + {".Edit.Permission", " \u7DE8\u8F2F\u6B0A\u9650"}, + {"Remove.Permission", "\u79FB\u9664\u6B0A\u9650"}, + {"Done", "\u5B8C\u6210"}, + {"KeyStore.URL.", "\u91D1\u9470\u5132\u5B58\u5EAB URL: "}, + {"KeyStore.Type.", "\u91D1\u9470\u5132\u5B58\u5EAB\u985E\u578B:"}, + {"KeyStore.Provider.", "\u91D1\u9470\u5132\u5B58\u5EAB\u63D0\u4F9B\u8005:"}, + {"KeyStore.Password.URL.", "\u91D1\u9470\u5132\u5B58\u5EAB\u5BC6\u78BC URL: "}, + {"Principals", "Principal"}, + {".Edit.Principal.", " \u7DE8\u8F2F Principal: "}, + {".Add.New.Principal.", " \u65B0\u589E Principal: "}, + {"Permissions", "\u6B0A\u9650"}, + {".Edit.Permission.", " \u7DE8\u8F2F\u6B0A\u9650:"}, + {".Add.New.Permission.", " \u65B0\u589E\u6B0A\u9650:"}, + {"Signed.By.", "\u7C3D\u7F72\u4EBA: "}, + {"Cannot.Specify.Principal.with.a.Wildcard.Class.without.a.Wildcard.Name", + "\u6C92\u6709\u842C\u7528\u5B57\u5143\u540D\u7A31\uFF0C\u7121\u6CD5\u6307\u5B9A\u542B\u6709\u842C\u7528\u5B57\u5143\u985E\u5225\u7684 Principal"}, + {"Cannot.Specify.Principal.without.a.Name", + "\u6C92\u6709\u540D\u7A31\uFF0C\u7121\u6CD5\u6307\u5B9A Principal"}, + {"Permission.and.Target.Name.must.have.a.value", + "\u6B0A\u9650\u53CA\u76EE\u6A19\u540D\u7A31\u5FC5\u9808\u6709\u4E00\u500B\u503C\u3002"}, + {"Remove.this.Policy.Entry.", "\u79FB\u9664\u9019\u500B\u539F\u5247\u9805\u76EE\uFF1F"}, + {"Overwrite.File", "\u8986\u5BEB\u6A94\u6848"}, + {"Policy.successfully.written.to.filename", + "\u539F\u5247\u6210\u529F\u5BEB\u5165\u81F3 {0}"}, + {"null.filename", "\u7A7A\u503C\u6A94\u540D"}, + {"Save.changes.", "\u5132\u5B58\u8B8A\u66F4\uFF1F"}, + {"Yes", "\u662F"}, + {"No", "\u5426"}, + {"Policy.Entry", "\u539F\u5247\u9805\u76EE"}, + {"Save.Changes", "\u5132\u5B58\u8B8A\u66F4"}, + {"No.Policy.Entry.selected", "\u6C92\u6709\u9078\u53D6\u539F\u5247\u9805\u76EE"}, + {"Unable.to.open.KeyStore.ex.toString.", + "\u7121\u6CD5\u958B\u555F\u91D1\u9470\u5132\u5B58\u5EAB: {0}"}, + {"No.principal.selected", "\u672A\u9078\u53D6 Principal"}, + {"No.permission.selected", "\u6C92\u6709\u9078\u53D6\u6B0A\u9650"}, + {"name", "\u540D\u7A31"}, + {"configuration.type", "\u7D44\u614B\u985E\u578B"}, + {"environment.variable.name", "\u74B0\u5883\u8B8A\u6578\u540D\u7A31"}, + {"library.name", "\u7A0B\u5F0F\u5EAB\u540D\u7A31"}, + {"package.name", "\u5957\u88DD\u7A0B\u5F0F\u540D\u7A31"}, + {"policy.type", "\u539F\u5247\u985E\u578B"}, + {"property.name", "\u5C6C\u6027\u540D\u7A31"}, + {"provider.name", "\u63D0\u4F9B\u8005\u540D\u7A31"}, + {"Principal.List", "Principal \u6E05\u55AE"}, + {"Permission.List", "\u6B0A\u9650\u6E05\u55AE"}, + {"Code.Base", "\u4EE3\u78BC\u57FA\u6E96"}, + {"KeyStore.U.R.L.", "\u91D1\u9470\u5132\u5B58\u5EAB URL:"}, + {"KeyStore.Password.U.R.L.", "\u91D1\u9470\u5132\u5B58\u5EAB\u5BC6\u78BC URL:"} + }; + + + /** + * Returns the contents of this ResourceBundle. + * + *

+ * + * @return the contents of this ResourceBundle. + */ + @Override + public Object[][] getContents() { + return contents; + } +} diff --git a/jdk/src/share/classes/sun/security/tools/policytool/Resources_zh_TW.java b/jdk/src/share/classes/sun/security/tools/policytool/Resources_zh_TW.java new file mode 100644 index 00000000000..1c241a6afa1 --- /dev/null +++ b/jdk/src/share/classes/sun/security/tools/policytool/Resources_zh_TW.java @@ -0,0 +1,156 @@ +/* + * Copyright (c) 2000, 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. 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.security.tools.policytool; + +/** + *

This class represents the ResourceBundle + * for the policytool. + * + */ +public class Resources_zh_TW extends java.util.ListResourceBundle { + + private static final Object[][] contents = { + {"NEWLINE", "\n"}, + {"Warning.A.public.key.for.alias.signers.i.does.not.exist.Make.sure.a.KeyStore.is.properly.configured.", + "\u8B66\u544A: \u5225\u540D {0} \u7684\u516C\u958B\u91D1\u9470\u4E0D\u5B58\u5728\u3002\u8ACB\u78BA\u5B9A\u91D1\u9470\u5132\u5B58\u5EAB\u914D\u7F6E\u6B63\u78BA\u3002"}, + {"Warning.Class.not.found.class", "\u8B66\u544A: \u627E\u4E0D\u5230\u985E\u5225 {0}"}, + {"Warning.Invalid.argument.s.for.constructor.arg", + "\u8B66\u544A: \u7121\u6548\u7684\u5EFA\u69CB\u5B50\u5F15\u6578: {0}"}, + {"Illegal.Principal.Type.type", "\u7121\u6548\u7684 Principal \u985E\u578B: {0}"}, + {"Illegal.option.option", "\u7121\u6548\u7684\u9078\u9805: {0}"}, + {"Usage.policytool.options.", "\u7528\u6CD5: policytool [options]"}, + {".file.file.policy.file.location", + " [-file ] \u539F\u5247\u6A94\u6848\u4F4D\u7F6E"}, + {"New", "\u65B0\u589E"}, + {"Open", "\u958B\u555F"}, + {"Save", "\u5132\u5B58"}, + {"Save.As", "\u53E6\u5B58\u65B0\u6A94"}, + {"View.Warning.Log", "\u6AA2\u8996\u8B66\u544A\u8A18\u9304"}, + {"Exit", "\u7D50\u675F"}, + {"Add.Policy.Entry", "\u65B0\u589E\u539F\u5247\u9805\u76EE"}, + {"Edit.Policy.Entry", "\u7DE8\u8F2F\u539F\u5247\u9805\u76EE"}, + {"Remove.Policy.Entry", "\u79FB\u9664\u539F\u5247\u9805\u76EE"}, + {"Edit", "\u7DE8\u8F2F"}, + {"Retain", "\u4FDD\u7559"}, + + {"Warning.File.name.may.include.escaped.backslash.characters.It.is.not.necessary.to.escape.backslash.characters.the.tool.escapes", + "\u8B66\u544A: \u6A94\u6848\u540D\u7A31\u5305\u542B\u9041\u96E2\u53CD\u659C\u7DDA\u5B57\u5143\u3002\u4E0D\u9700\u8981\u9041\u96E2\u53CD\u659C\u7DDA\u5B57\u5143 (\u64B0\u5BEB\u539F\u5247\u5167\u5BB9\u81F3\u6C38\u4E45\u5B58\u653E\u5340\u6642\u9700\u8981\u5DE5\u5177\u9041\u96E2\u5B57\u5143)\u3002\n\n\u6309\u4E00\u4E0B\u300C\u4FDD\u7559\u300D\u4EE5\u4FDD\u7559\u8F38\u5165\u7684\u540D\u7A31\uFF0C\u6216\u6309\u4E00\u4E0B\u300C\u7DE8\u8F2F\u300D\u4EE5\u7DE8\u8F2F\u540D\u7A31\u3002"}, + + {"Add.Public.Key.Alias", "\u65B0\u589E\u516C\u958B\u91D1\u9470\u5225\u540D"}, + {"Remove.Public.Key.Alias", "\u79FB\u9664\u516C\u958B\u91D1\u9470\u5225\u540D"}, + {"File", "\u6A94\u6848"}, + {"KeyStore", "\u91D1\u9470\u5132\u5B58\u5EAB"}, + {"Policy.File.", "\u539F\u5247\u6A94\u6848: "}, + {"Could.not.open.policy.file.policyFile.e.toString.", + "\u7121\u6CD5\u958B\u555F\u539F\u5247\u6A94\u6848: {0}: {1}"}, + {"Policy.Tool", "\u539F\u5247\u5DE5\u5177"}, + {"Errors.have.occurred.while.opening.the.policy.configuration.View.the.Warning.Log.for.more.information.", + "\u958B\u555F\u539F\u5247\u8A18\u7F6E\u6642\u767C\u751F\u932F\u8AA4\u3002\u8ACB\u6AA2\u8996\u8B66\u544A\u8A18\u9304\u4EE5\u53D6\u5F97\u66F4\u591A\u7684\u8CC7\u8A0A"}, + {"Error", "\u932F\u8AA4"}, + {"OK", "\u78BA\u5B9A"}, + {"Status", "\u72C0\u614B"}, + {"Warning", "\u8B66\u544A"}, + {"Permission.", + "\u6B0A\u9650: "}, + {"Principal.Type.", "Principal \u985E\u578B: "}, + {"Principal.Name.", "Principal \u540D\u7A31: "}, + {"Target.Name.", + "\u76EE\u6A19\u540D\u7A31: "}, + {"Actions.", + "\u52D5\u4F5C: "}, + {"OK.to.overwrite.existing.file.filename.", + "\u78BA\u8A8D\u8986\u5BEB\u73FE\u5B58\u7684\u6A94\u6848 {0}\uFF1F"}, + {"Cancel", "\u53D6\u6D88"}, + {"CodeBase.", "CodeBase:"}, + {"SignedBy.", "SignedBy:"}, + {"Add.Principal", "\u65B0\u589E Principal"}, + {"Edit.Principal", "\u7DE8\u8F2F Principal"}, + {"Remove.Principal", "\u79FB\u9664 Principal"}, + {"Principals.", "Principal:"}, + {".Add.Permission", " \u65B0\u589E\u6B0A\u9650"}, + {".Edit.Permission", " \u7DE8\u8F2F\u6B0A\u9650"}, + {"Remove.Permission", "\u79FB\u9664\u6B0A\u9650"}, + {"Done", "\u5B8C\u6210"}, + {"KeyStore.URL.", "\u91D1\u9470\u5132\u5B58\u5EAB URL: "}, + {"KeyStore.Type.", "\u91D1\u9470\u5132\u5B58\u5EAB\u985E\u578B:"}, + {"KeyStore.Provider.", "\u91D1\u9470\u5132\u5B58\u5EAB\u63D0\u4F9B\u8005:"}, + {"KeyStore.Password.URL.", "\u91D1\u9470\u5132\u5B58\u5EAB\u5BC6\u78BC URL: "}, + {"Principals", "Principal"}, + {".Edit.Principal.", " \u7DE8\u8F2F Principal: "}, + {".Add.New.Principal.", " \u65B0\u589E Principal: "}, + {"Permissions", "\u6B0A\u9650"}, + {".Edit.Permission.", " \u7DE8\u8F2F\u6B0A\u9650:"}, + {".Add.New.Permission.", " \u65B0\u589E\u6B0A\u9650:"}, + {"Signed.By.", "\u7C3D\u7F72\u4EBA: "}, + {"Cannot.Specify.Principal.with.a.Wildcard.Class.without.a.Wildcard.Name", + "\u6C92\u6709\u842C\u7528\u5B57\u5143\u540D\u7A31\uFF0C\u7121\u6CD5\u6307\u5B9A\u542B\u6709\u842C\u7528\u5B57\u5143\u985E\u5225\u7684 Principal"}, + {"Cannot.Specify.Principal.without.a.Name", + "\u6C92\u6709\u540D\u7A31\uFF0C\u7121\u6CD5\u6307\u5B9A Principal"}, + {"Permission.and.Target.Name.must.have.a.value", + "\u6B0A\u9650\u53CA\u76EE\u6A19\u540D\u7A31\u5FC5\u9808\u6709\u4E00\u500B\u503C\u3002"}, + {"Remove.this.Policy.Entry.", "\u79FB\u9664\u9019\u500B\u539F\u5247\u9805\u76EE\uFF1F"}, + {"Overwrite.File", "\u8986\u5BEB\u6A94\u6848"}, + {"Policy.successfully.written.to.filename", + "\u539F\u5247\u6210\u529F\u5BEB\u5165\u81F3 {0}"}, + {"null.filename", "\u7A7A\u503C\u6A94\u540D"}, + {"Save.changes.", "\u5132\u5B58\u8B8A\u66F4\uFF1F"}, + {"Yes", "\u662F"}, + {"No", "\u5426"}, + {"Policy.Entry", "\u539F\u5247\u9805\u76EE"}, + {"Save.Changes", "\u5132\u5B58\u8B8A\u66F4"}, + {"No.Policy.Entry.selected", "\u6C92\u6709\u9078\u53D6\u539F\u5247\u9805\u76EE"}, + {"Unable.to.open.KeyStore.ex.toString.", + "\u7121\u6CD5\u958B\u555F\u91D1\u9470\u5132\u5B58\u5EAB: {0}"}, + {"No.principal.selected", "\u672A\u9078\u53D6 Principal"}, + {"No.permission.selected", "\u6C92\u6709\u9078\u53D6\u6B0A\u9650"}, + {"name", "\u540D\u7A31"}, + {"configuration.type", "\u7D44\u614B\u985E\u578B"}, + {"environment.variable.name", "\u74B0\u5883\u8B8A\u6578\u540D\u7A31"}, + {"library.name", "\u7A0B\u5F0F\u5EAB\u540D\u7A31"}, + {"package.name", "\u5957\u88DD\u7A0B\u5F0F\u540D\u7A31"}, + {"policy.type", "\u539F\u5247\u985E\u578B"}, + {"property.name", "\u5C6C\u6027\u540D\u7A31"}, + {"provider.name", "\u63D0\u4F9B\u8005\u540D\u7A31"}, + {"Principal.List", "Principal \u6E05\u55AE"}, + {"Permission.List", "\u6B0A\u9650\u6E05\u55AE"}, + {"Code.Base", "\u4EE3\u78BC\u57FA\u6E96"}, + {"KeyStore.U.R.L.", "\u91D1\u9470\u5132\u5B58\u5EAB URL:"}, + {"KeyStore.Password.U.R.L.", "\u91D1\u9470\u5132\u5B58\u5EAB\u5BC6\u78BC URL:"} + }; + + + /** + * Returns the contents of this ResourceBundle. + * + *

+ * + * @return the contents of this ResourceBundle. + */ + @Override + public Object[][] getContents() { + return contents; + } +} diff --git a/jdk/src/share/classes/sun/security/util/Debug.java b/jdk/src/share/classes/sun/security/util/Debug.java index 5c666797036..f4005a470ab 100644 --- a/jdk/src/share/classes/sun/security/util/Debug.java +++ b/jdk/src/share/classes/sun/security/util/Debug.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1998, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1998, 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 diff --git a/jdk/src/share/classes/sun/security/util/HostnameChecker.java b/jdk/src/share/classes/sun/security/util/HostnameChecker.java index 313ddb110bb..014695cbf8d 100644 --- a/jdk/src/share/classes/sun/security/util/HostnameChecker.java +++ b/jdk/src/share/classes/sun/security/util/HostnameChecker.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2002, 2006, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2002, 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 diff --git a/jdk/src/share/classes/sun/security/util/Resources.java b/jdk/src/share/classes/sun/security/util/Resources.java index a7ba9e2e36d..ef073b0a1fd 100644 --- a/jdk/src/share/classes/sun/security/util/Resources.java +++ b/jdk/src/share/classes/sun/security/util/Resources.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2000, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2000, 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 @@ -34,513 +34,6 @@ public class Resources extends java.util.ListResourceBundle { private static final Object[][] contents = { - // shared (from jarsigner) - {"SPACE", " "}, - {"2SPACE", " "}, - {"6SPACE", " "}, - {"COMMA", ", "}, - // shared (from keytool) - {"NEWLINE", "\n"}, - {"STAR", - "*******************************************"}, - {"STARNN", - "*******************************************\n\n"}, - - // keytool: Help part - {".OPTION.", " [OPTION]..."}, - {"Options.", "Options:"}, - {"Use.keytool.help.for.all.available.commands", - "Use \"keytool -help\" for all available commands"}, - {"Key.and.Certificate.Management.Tool", - "Key and Certificate Management Tool"}, - {"Commands.", "Commands:"}, - {"Use.keytool.command.name.help.for.usage.of.command.name", - "Use \"keytool -command_name -help\" for usage of command_name"}, - // keytool: help: commands - {"Generates.a.certificate.request", - "Generates a certificate request"}, //-certreq - {"Changes.an.entry.s.alias", - "Changes an entry's alias"}, //-changealias - {"Deletes.an.entry", - "Deletes an entry"}, //-delete - {"Exports.certificate", - "Exports certificate"}, //-exportcert - {"Generates.a.key.pair", - "Generates a key pair"}, //-genkeypair - {"Generates.a.secret.key", - "Generates a secret key"}, //-genseckey - {"Generates.certificate.from.a.certificate.request", - "Generates certificate from a certificate request"}, //-gencert - {"Generates.CRL", "Generates CRL"}, //-gencrl - {"Imports.entries.from.a.JDK.1.1.x.style.identity.database", - "Imports entries from a JDK 1.1.x-style identity database"}, //-identitydb - {"Imports.a.certificate.or.a.certificate.chain", - "Imports a certificate or a certificate chain"}, //-importcert - {"Imports.one.or.all.entries.from.another.keystore", - "Imports one or all entries from another keystore"}, //-importkeystore - {"Clones.a.key.entry", - "Clones a key entry"}, //-keyclone - {"Changes.the.key.password.of.an.entry", - "Changes the key password of an entry"}, //-keypasswd - {"Lists.entries.in.a.keystore", - "Lists entries in a keystore"}, //-list - {"Prints.the.content.of.a.certificate", - "Prints the content of a certificate"}, //-printcert - {"Prints.the.content.of.a.certificate.request", - "Prints the content of a certificate request"}, //-printcertreq - {"Prints.the.content.of.a.CRL.file", - "Prints the content of a CRL file"}, //-printcrl - {"Generates.a.self.signed.certificate", - "Generates a self-signed certificate"}, //-selfcert - {"Changes.the.store.password.of.a.keystore", - "Changes the store password of a keystore"}, //-storepasswd - // keytool: help: options - {"alias.name.of.the.entry.to.process", - "alias name of the entry to process"}, //-alias - {"destination.alias", - "destination alias"}, //-destalias - {"destination.key.password", - "destination key password"}, //-destkeypass - {"destination.keystore.name", - "destination keystore name"}, //-destkeystore - {"destination.keystore.password.protected", - "destination keystore password protected"}, //-destprotected - {"destination.keystore.provider.name", - "destination keystore provider name"}, //-destprovidername - {"destination.keystore.password", - "destination keystore password"}, //-deststorepass - {"destination.keystore.type", - "destination keystore type"}, //-deststoretype - {"distinguished.name", - "distinguished name"}, //-dname - {"X.509.extension", - "X.509 extension"}, //-ext - {"output.file.name", - "output file name"}, //-file and -outfile - {"input.file.name", - "input file name"}, //-file and -infile - {"key.algorithm.name", - "key algorithm name"}, //-keyalg - {"key.password", - "key password"}, //-keypass - {"key.bit.size", - "key bit size"}, //-keysize - {"keystore.name", - "keystore name"}, //-keystore - {"new.password", - "new password"}, //-new - {"do.not.prompt", - "do not prompt"}, //-noprompt - {"password.through.protected.mechanism", - "password through protected mechanism"}, //-protected - {"provider.argument", - "provider argument"}, //-providerarg - {"provider.class.name", - "provider class name"}, //-providerclass - {"provider.name", - "provider name"}, //-providername - {"provider.classpath", - "provider classpath"}, //-providerpath - {"output.in.RFC.style", - "output in RFC style"}, //-rfc - {"signature.algorithm.name", - "signature algorithm name"}, //-sigalg - {"source.alias", - "source alias"}, //-srcalias - {"source.key.password", - "source key password"}, //-srckeypass - {"source.keystore.name", - "source keystore name"}, //-srckeystore - {"source.keystore.password.protected", - "source keystore password protected"}, //-srcprotected - {"source.keystore.provider.name", - "source keystore provider name"}, //-srcprovidername - {"source.keystore.password", - "source keystore password"}, //-srcstorepass - {"source.keystore.type", - "source keystore type"}, //-srcstoretype - {"SSL.server.host.and.port", - "SSL server host and port"}, //-sslserver - {"signed.jar.file", - "signed jar file"}, //=jarfile - {"certificate.validity.start.date.time", - "certificate validity start date/time"}, //-startdate - {"keystore.password", - "keystore password"}, //-storepass - {"keystore.type", - "keystore type"}, //-storetype - {"trust.certificates.from.cacerts", - "trust certificates from cacerts"}, //-trustcacerts - {"verbose.output", - "verbose output"}, //-v - {"validity.number.of.days", - "validity number of days"}, //-validity - {"Serial.ID.of.cert.to.revoke", - "Serial ID of cert to revoke"}, //-id - // keytool: Running part - {"keytool.error.", "keytool error: "}, - {"Illegal.option.", "Illegal option: "}, - {"Illegal.value.", "Illegal value: "}, - {"Unknown.password.type.", "Unknown password type: "}, - {"Cannot.find.environment.variable.", - "Cannot find environment variable: "}, - {"Cannot.find.file.", "Cannot find file: "}, - {"Command.option.flag.needs.an.argument.", "Command option {0} needs an argument."}, - {"Warning.Different.store.and.key.passwords.not.supported.for.PKCS12.KeyStores.Ignoring.user.specified.command.value.", - "Warning: Different store and key passwords not supported for PKCS12 KeyStores. Ignoring user-specified {0} value."}, - {".keystore.must.be.NONE.if.storetype.is.{0}", - "-keystore must be NONE if -storetype is {0}"}, - {"Too.many.retries.program.terminated", - "Too many retries, program terminated"}, - {".storepasswd.and.keypasswd.commands.not.supported.if.storetype.is.{0}", - "-storepasswd and -keypasswd commands not supported if -storetype is {0}"}, - {".keypasswd.commands.not.supported.if.storetype.is.PKCS12", - "-keypasswd commands not supported if -storetype is PKCS12"}, - {".keypass.and.new.can.not.be.specified.if.storetype.is.{0}", - "-keypass and -new can not be specified if -storetype is {0}"}, - {"if.protected.is.specified.then.storepass.keypass.and.new.must.not.be.specified", - "if -protected is specified, then -storepass, -keypass, and -new must not be specified"}, - {"if.srcprotected.is.specified.then.srcstorepass.and.srckeypass.must.not.be.specified", - "if -srcprotected is specified, then -srcstorepass and -srckeypass must not be specified"}, - {"if.keystore.is.not.password.protected.then.storepass.keypass.and.new.must.not.be.specified", - "if keystore is not password protected, then -storepass, -keypass, and -new must not be specified"}, - {"if.source.keystore.is.not.password.protected.then.srcstorepass.and.srckeypass.must.not.be.specified", - "if source keystore is not password protected, then -srcstorepass and -srckeypass must not be specified"}, - {"Illegal.startdate.value", "Illegal startdate value"}, - {"Validity.must.be.greater.than.zero", - "Validity must be greater than zero"}, - {"provName.not.a.provider", "{0} not a provider"}, - {"Usage.error.no.command.provided", "Usage error: no command provided"}, - {"Source.keystore.file.exists.but.is.empty.", "Source keystore file exists, but is empty: "}, - {"Please.specify.srckeystore", "Please specify -srckeystore"}, - {"Must.not.specify.both.v.and.rfc.with.list.command", - "Must not specify both -v and -rfc with 'list' command"}, - {"Key.password.must.be.at.least.6.characters", - "Key password must be at least 6 characters"}, - {"New.password.must.be.at.least.6.characters", - "New password must be at least 6 characters"}, - {"Keystore.file.exists.but.is.empty.", - "Keystore file exists, but is empty: "}, - {"Keystore.file.does.not.exist.", - "Keystore file does not exist: "}, - {"Must.specify.destination.alias", "Must specify destination alias"}, - {"Must.specify.alias", "Must specify alias"}, - {"Keystore.password.must.be.at.least.6.characters", - "Keystore password must be at least 6 characters"}, - {"Enter.keystore.password.", "Enter keystore password: "}, - {"Enter.source.keystore.password.", "Enter source keystore password: "}, - {"Enter.destination.keystore.password.", "Enter destination keystore password: "}, - {"Keystore.password.is.too.short.must.be.at.least.6.characters", - "Keystore password is too short - must be at least 6 characters"}, - {"Unknown.Entry.Type", "Unknown Entry Type"}, - {"Too.many.failures.Alias.not.changed", "Too many failures. Alias not changed"}, - {"Entry.for.alias.alias.successfully.imported.", - "Entry for alias {0} successfully imported."}, - {"Entry.for.alias.alias.not.imported.", "Entry for alias {0} not imported."}, - {"Problem.importing.entry.for.alias.alias.exception.Entry.for.alias.alias.not.imported.", - "Problem importing entry for alias {0}: {1}.\nEntry for alias {0} not imported."}, - {"Import.command.completed.ok.entries.successfully.imported.fail.entries.failed.or.cancelled", - "Import command completed: {0} entries successfully imported, {1} entries failed or cancelled"}, - {"Warning.Overwriting.existing.alias.alias.in.destination.keystore", - "Warning: Overwriting existing alias {0} in destination keystore"}, - {"Existing.entry.alias.alias.exists.overwrite.no.", - "Existing entry alias {0} exists, overwrite? [no]: "}, - {"Too.many.failures.try.later", "Too many failures - try later"}, - {"Certification.request.stored.in.file.filename.", - "Certification request stored in file <{0}>"}, - {"Submit.this.to.your.CA", "Submit this to your CA"}, - {"if.alias.not.specified.destalias.srckeypass.and.destkeypass.must.not.be.specified", - "if alias not specified, destalias, srckeypass, and destkeypass must not be specified"}, - {"Certificate.stored.in.file.filename.", - "Certificate stored in file <{0}>"}, - {"Certificate.reply.was.installed.in.keystore", - "Certificate reply was installed in keystore"}, - {"Certificate.reply.was.not.installed.in.keystore", - "Certificate reply was not installed in keystore"}, - {"Certificate.was.added.to.keystore", - "Certificate was added to keystore"}, - {"Certificate.was.not.added.to.keystore", - "Certificate was not added to keystore"}, - {".Storing.ksfname.", "[Storing {0}]"}, - {"alias.has.no.public.key.certificate.", - "{0} has no public key (certificate)"}, - {"Cannot.derive.signature.algorithm", - "Cannot derive signature algorithm"}, - {"Alias.alias.does.not.exist", - "Alias <{0}> does not exist"}, - {"Alias.alias.has.no.certificate", - "Alias <{0}> has no certificate"}, - {"Key.pair.not.generated.alias.alias.already.exists", - "Key pair not generated, alias <{0}> already exists"}, - {"Generating.keysize.bit.keyAlgName.key.pair.and.self.signed.certificate.sigAlgName.with.a.validity.of.validality.days.for", - "Generating {0} bit {1} key pair and self-signed certificate ({2}) with a validity of {3} days\n\tfor: {4}"}, - {"Enter.key.password.for.alias.", "Enter key password for <{0}>"}, - {".RETURN.if.same.as.keystore.password.", - "\t(RETURN if same as keystore password): "}, - {"Key.password.is.too.short.must.be.at.least.6.characters", - "Key password is too short - must be at least 6 characters"}, - {"Too.many.failures.key.not.added.to.keystore", - "Too many failures - key not added to keystore"}, - {"Destination.alias.dest.already.exists", - "Destination alias <{0}> already exists"}, - {"Password.is.too.short.must.be.at.least.6.characters", - "Password is too short - must be at least 6 characters"}, - {"Too.many.failures.Key.entry.not.cloned", - "Too many failures. Key entry not cloned"}, - {"key.password.for.alias.", "key password for <{0}>"}, - {"Keystore.entry.for.id.getName.already.exists", - "Keystore entry for <{0}> already exists"}, - {"Creating.keystore.entry.for.id.getName.", - "Creating keystore entry for <{0}> ..."}, - {"No.entries.from.identity.database.added", - "No entries from identity database added"}, - {"Alias.name.alias", "Alias name: {0}"}, - {"Creation.date.keyStore.getCreationDate.alias.", - "Creation date: {0,date}"}, - {"alias.keyStore.getCreationDate.alias.", - "{0}, {1,date}, "}, - {"alias.", "{0}, "}, - {"Entry.type.type.", "Entry type: {0}"}, - {"Certificate.chain.length.", "Certificate chain length: "}, - {"Certificate.i.1.", "Certificate[{0,number,integer}]:"}, - {"Certificate.fingerprint.SHA1.", "Certificate fingerprint (SHA1): "}, - {"Keystore.type.", "Keystore type: "}, - {"Keystore.provider.", "Keystore provider: "}, - {"Your.keystore.contains.keyStore.size.entry", - "Your keystore contains {0,number,integer} entry"}, - {"Your.keystore.contains.keyStore.size.entries", - "Your keystore contains {0,number,integer} entries"}, - {"Failed.to.parse.input", "Failed to parse input"}, - {"Empty.input", "Empty input"}, - {"Not.X.509.certificate", "Not X.509 certificate"}, - {"alias.has.no.public.key", "{0} has no public key"}, - {"alias.has.no.X.509.certificate", "{0} has no X.509 certificate"}, - {"New.certificate.self.signed.", "New certificate (self-signed):"}, - {"Reply.has.no.certificates", "Reply has no certificates"}, - {"Certificate.not.imported.alias.alias.already.exists", - "Certificate not imported, alias <{0}> already exists"}, - {"Input.not.an.X.509.certificate", "Input not an X.509 certificate"}, - {"Certificate.already.exists.in.keystore.under.alias.trustalias.", - "Certificate already exists in keystore under alias <{0}>"}, - {"Do.you.still.want.to.add.it.no.", - "Do you still want to add it? [no]: "}, - {"Certificate.already.exists.in.system.wide.CA.keystore.under.alias.trustalias.", - "Certificate already exists in system-wide CA keystore under alias <{0}>"}, - {"Do.you.still.want.to.add.it.to.your.own.keystore.no.", - "Do you still want to add it to your own keystore? [no]: "}, - {"Trust.this.certificate.no.", "Trust this certificate? [no]: "}, - {"YES", "YES"}, - {"New.prompt.", "New {0}: "}, - {"Passwords.must.differ", "Passwords must differ"}, - {"Re.enter.new.prompt.", "Re-enter new {0}: "}, - {"Re.enter.new.password.", "Re-enter new password: "}, - {"They.don.t.match.Try.again", "They don't match. Try again"}, - {"Enter.prompt.alias.name.", "Enter {0} alias name: "}, - {"Enter.new.alias.name.RETURN.to.cancel.import.for.this.entry.", - "Enter new alias name\t(RETURN to cancel import for this entry): "}, - {"Enter.alias.name.", "Enter alias name: "}, - {".RETURN.if.same.as.for.otherAlias.", - "\t(RETURN if same as for <{0}>)"}, - {".PATTERN.printX509Cert", - "Owner: {0}\nIssuer: {1}\nSerial number: {2}\nValid from: {3} until: {4}\nCertificate fingerprints:\n\t MD5: {5}\n\t SHA1: {6}\n\t SHA256: {7}\n\t Signature algorithm name: {8}\n\t Version: {9}"}, - {"What.is.your.first.and.last.name.", - "What is your first and last name?"}, - {"What.is.the.name.of.your.organizational.unit.", - "What is the name of your organizational unit?"}, - {"What.is.the.name.of.your.organization.", - "What is the name of your organization?"}, - {"What.is.the.name.of.your.City.or.Locality.", - "What is the name of your City or Locality?"}, - {"What.is.the.name.of.your.State.or.Province.", - "What is the name of your State or Province?"}, - {"What.is.the.two.letter.country.code.for.this.unit.", - "What is the two-letter country code for this unit?"}, - {"Is.name.correct.", "Is {0} correct?"}, - {"no", "no"}, - {"yes", "yes"}, - {"y", "y"}, - {".defaultValue.", " [{0}]: "}, - {"Alias.alias.has.no.key", - "Alias <{0}> has no key"}, - {"Alias.alias.references.an.entry.type.that.is.not.a.private.key.entry.The.keyclone.command.only.supports.cloning.of.private.key", - "Alias <{0}> references an entry type that is not a private key entry. The -keyclone command only supports cloning of private key entries"}, - - {".WARNING.WARNING.WARNING.", - "***************** WARNING WARNING WARNING *****************"}, - {"Signer.d.", "Signer #%d:"}, - {"Timestamp.", "Timestamp:"}, - {"Signature.", "Signature:"}, - {"CRLs.", "CRLs:"}, - {"Certificate.owner.", "Certificate owner: "}, - {"Not.a.signed.jar.file", "Not a signed jar file"}, - {"No.certificate.from.the.SSL.server", - "No certificate from the SSL server"}, - - {".The.integrity.of.the.information.stored.in.your.keystore.", - "* The integrity of the information stored in your keystore *\n" + - "* has NOT been verified! In order to verify its integrity, *\n" + - "* you must provide your keystore password. *"}, - {".The.integrity.of.the.information.stored.in.the.srckeystore.", - "* The integrity of the information stored in the srckeystore*\n" + - "* has NOT been verified! In order to verify its integrity, *\n" + - "* you must provide the srckeystore password. *"}, - - {"Certificate.reply.does.not.contain.public.key.for.alias.", - "Certificate reply does not contain public key for <{0}>"}, - {"Incomplete.certificate.chain.in.reply", - "Incomplete certificate chain in reply"}, - {"Certificate.chain.in.reply.does.not.verify.", - "Certificate chain in reply does not verify: "}, - {"Top.level.certificate.in.reply.", - "Top-level certificate in reply:\n"}, - {".is.not.trusted.", "... is not trusted. "}, - {"Install.reply.anyway.no.", "Install reply anyway? [no]: "}, - {"NO", "NO"}, - {"Public.keys.in.reply.and.keystore.don.t.match", - "Public keys in reply and keystore don't match"}, - {"Certificate.reply.and.certificate.in.keystore.are.identical", - "Certificate reply and certificate in keystore are identical"}, - {"Failed.to.establish.chain.from.reply", - "Failed to establish chain from reply"}, - {"n", "n"}, - {"Wrong.answer.try.again", "Wrong answer, try again"}, - {"Secret.key.not.generated.alias.alias.already.exists", - "Secret Key not generated, alias <{0}> already exists"}, - {"Please.provide.keysize.for.secret.key.generation", - "Please provide -keysize for secret key generation"}, - - {"verified.by.s.in.s", "Verified by %s in %s"}, - {"warning.not.verified.make.sure.keystore.is.correct", - "WARNING: not verified. Make sure -keystore is correct."}, - - {"Extensions.", "Extensions: "}, - {".Empty.value.", "(Empty value)"}, - {"Extension.Request.", "Extension Request:"}, - {"PKCS.10.Certificate.Request.Version.1.0.Subject.s.Public.Key.s.format.s.key.", - "PKCS #10 Certificate Request (Version 1.0)\n" + - "Subject: %s\nPublic Key: %s format %s key\n"}, - {"Unknown.keyUsage.type.", "Unknown keyUsage type: "}, - {"Unknown.extendedkeyUsage.type.", "Unknown extendedkeyUsage type: "}, - {"Unknown.AccessDescription.type.", "Unknown AccessDescription type: "}, - {"Unrecognized.GeneralName.type.", "Unrecognized GeneralName type: "}, - {"This.extension.cannot.be.marked.as.critical.", - "This extension cannot be marked as critical. "}, - {"Odd.number.of.hex.digits.found.", "Odd number of hex digits found: "}, - {"Unknown.extension.type.", "Unknown extension type: "}, - {"command.{0}.is.ambiguous.", "command {0} is ambiguous:"}, - - // policytool - {"Warning.A.public.key.for.alias.signers.i.does.not.exist.Make.sure.a.KeyStore.is.properly.configured.", - "Warning: A public key for alias {0} does not exist. Make sure a KeyStore is properly configured."}, - {"Warning.Class.not.found.class", "Warning: Class not found: {0}"}, - {"Warning.Invalid.argument.s.for.constructor.arg", - "Warning: Invalid argument(s) for constructor: {0}"}, - {"Illegal.Principal.Type.type", "Illegal Principal Type: {0}"}, - {"Illegal.option.option", "Illegal option: {0}"}, - {"Usage.policytool.options.", "Usage: policytool [options]"}, - {".file.file.policy.file.location", - " [-file ] policy file location"}, - {"New", "New"}, - {"Open", "Open"}, - {"Save", "Save"}, - {"Save.As", "Save As"}, - {"View.Warning.Log", "View Warning Log"}, - {"Exit", "Exit"}, - {"Add.Policy.Entry", "Add Policy Entry"}, - {"Edit.Policy.Entry", "Edit Policy Entry"}, - {"Remove.Policy.Entry", "Remove Policy Entry"}, - {"Edit", "Edit"}, - {"Retain", "Retain"}, - - {"Warning.File.name.may.include.escaped.backslash.characters.It.is.not.necessary.to.escape.backslash.characters.the.tool.escapes", - "Warning: File name may include escaped backslash characters. " + - "It is not necessary to escape backslash characters " + - "(the tool escapes characters as necessary when writing " + - "the policy contents to the persistent store).\n\n" + - "Click on Retain to retain the entered name, or click on " + - "Edit to edit the name."}, - - {"Add.Public.Key.Alias", "Add Public Key Alias"}, - {"Remove.Public.Key.Alias", "Remove Public Key Alias"}, - {"File", "File"}, - {"KeyStore", "KeyStore"}, - {"Policy.File.", "Policy File:"}, - {"Could.not.open.policy.file.policyFile.e.toString.", - "Could not open policy file: {0}: {1}"}, - {"Policy.Tool", "Policy Tool"}, - {"Errors.have.occurred.while.opening.the.policy.configuration.View.the.Warning.Log.for.more.information.", - "Errors have occurred while opening the policy configuration. View the Warning Log for more information."}, - {"Error", "Error"}, - {"OK", "OK"}, - {"Status", "Status"}, - {"Warning", "Warning"}, - {"Permission.", - "Permission: "}, - {"Principal.Type.", "Principal Type:"}, - {"Principal.Name.", "Principal Name:"}, - {"Target.Name.", - "Target Name: "}, - {"Actions.", - "Actions: "}, - {"OK.to.overwrite.existing.file.filename.", - "OK to overwrite existing file {0}?"}, - {"Cancel", "Cancel"}, - {"CodeBase.", "CodeBase:"}, - {"SignedBy.", "SignedBy:"}, - {"Add.Principal", "Add Principal"}, - {"Edit.Principal", "Edit Principal"}, - {"Remove.Principal", "Remove Principal"}, - {"Principals.", "Principals:"}, - {".Add.Permission", " Add Permission"}, - {".Edit.Permission", " Edit Permission"}, - {"Remove.Permission", "Remove Permission"}, - {"Done", "Done"}, - {"KeyStore.URL.", "KeyStore URL:"}, - {"KeyStore.Type.", "KeyStore Type:"}, - {"KeyStore.Provider.", "KeyStore Provider:"}, - {"KeyStore.Password.URL.", "KeyStore Password URL:"}, - {"Principals", "Principals"}, - {".Edit.Principal.", " Edit Principal:"}, - {".Add.New.Principal.", " Add New Principal:"}, - {"Permissions", "Permissions"}, - {".Edit.Permission.", " Edit Permission:"}, - {".Add.New.Permission.", " Add New Permission:"}, - {"Signed.By.", "Signed By:"}, - {"Cannot.Specify.Principal.with.a.Wildcard.Class.without.a.Wildcard.Name", - "Cannot Specify Principal with a Wildcard Class without a Wildcard Name"}, - {"Cannot.Specify.Principal.without.a.Name", - "Cannot Specify Principal without a Name"}, - {"Permission.and.Target.Name.must.have.a.value", - "Permission and Target Name must have a value"}, - {"Remove.this.Policy.Entry.", "Remove this Policy Entry?"}, - {"Overwrite.File", "Overwrite File"}, - {"Policy.successfully.written.to.filename", - "Policy successfully written to {0}"}, - {"null.filename", "null filename"}, - {"Save.changes.", "Save changes?"}, - {"Yes", "Yes"}, - {"No", "No"}, - {"Policy.Entry", "Policy Entry"}, - {"Save.Changes", "Save Changes"}, - {"No.Policy.Entry.selected", "No Policy Entry selected"}, - {"Unable.to.open.KeyStore.ex.toString.", - "Unable to open KeyStore: {0}"}, - {"No.principal.selected", "No principal selected"}, - {"No.permission.selected", "No permission selected"}, - {"name", "name"}, - {"configuration.type", "configuration type"}, - {"environment.variable.name", "environment variable name"}, - {"library.name", "library name"}, - {"package.name", "package name"}, - {"policy.type", "policy type"}, - {"property.name", "property name"}, - {"Principal.List", "Principal List"}, - {"Permission.List", "Permission List"}, - {"Code.Base", "Code Base"}, - {"KeyStore.U.R.L.", "KeyStore U R L:"}, - {"KeyStore.Password.U.R.L.", "KeyStore Password U R L:"}, - - // javax.security.auth.PrivateCredentialPermission {"invalid.null.input.s.", "invalid null input(s)"}, {"actions.can.only.be.read.", "actions can only be 'read'"}, @@ -565,6 +58,7 @@ public class Resources extends java.util.ListResourceBundle { {"provided.null.OID.map", "provided null OID map"}, // javax.security.auth.Subject + {"NEWLINE", "\n"}, {"invalid.null.AccessControlContext.provided", "invalid null AccessControlContext provided"}, {"invalid.null.action.provided", "invalid null action provided"}, @@ -668,6 +162,7 @@ public class Resources extends java.util.ListResourceBundle { * * @return the contents of this ResourceBundle. */ + @Override public Object[][] getContents() { return contents; } diff --git a/jdk/src/share/classes/sun/security/util/Resources_de.java b/jdk/src/share/classes/sun/security/util/Resources_de.java index 26bd331166a..34a7d6dbd43 100644 --- a/jdk/src/share/classes/sun/security/util/Resources_de.java +++ b/jdk/src/share/classes/sun/security/util/Resources_de.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2000, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2000, 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 @@ -34,501 +34,6 @@ public class Resources_de extends java.util.ListResourceBundle { private static final Object[][] contents = { - // shared (from jarsigner) - {"SPACE", " "}, - {"2SPACE", " "}, - {"6SPACE", " "}, - {"COMMA", ", "}, - // shared (from keytool) - {"NEWLINE", "\n"}, - {"STAR", - "*******************************************"}, - {"STARNN", - "*******************************************\n\n"}, - - // keytool: Help part -// "Option" should be translated. - {".OPTION.", " [Option]..."}, - {"Options.", "Optionen:"}, - {"Use.keytool.help.for.all.available.commands", - "\"keytool -help\" f\u00FCr alle verf\u00FCgbaren Befehle verwenden"}, - {"Key.and.Certificate.Management.Tool", - "Schl\u00FCssel- und Zertifikatsverwaltungstool"}, - {"Commands.", "Befehle:"}, - {"Use.keytool.command.name.help.for.usage.of.command.name", - "\"keytool -command_name -help\" f\u00FCr Verwendung von command_name verwenden"}, - // keytool: help: commands - {"Generates.a.certificate.request", - "Generiert eine Zertifikatanforderung"}, //-certreq - {"Changes.an.entry.s.alias", - "\u00C4ndert den Alias eines Eintrags"}, //-changealias - {"Deletes.an.entry", - "L\u00F6scht einen Eintrag"}, //-delete - {"Exports.certificate", - "Exportiert ein Zertifikat"}, //-exportcert - {"Generates.a.key.pair", - "Generiert ein Schl\u00FCsselpaar"}, //-genkeypair -// translation of "secret" key should be different to "private" key. - {"Generates.a.secret.key", - "Generiert einen Secret Key"}, //-genseckey - {"Generates.certificate.from.a.certificate.request", - "Generiert ein Zertifikat aus einer Zertifikatanforderung"}, //-gencert - {"Generates.CRL", "Generiert eine CRL"}, //-gencrl - {"Imports.entries.from.a.JDK.1.1.x.style.identity.database", - "Importiert Eintr\u00E4ge aus einer Identity-Datenbank im JDK 1.1.x-Stil"}, //-identitydb - {"Imports.a.certificate.or.a.certificate.chain", - "Importiert ein Zertifikat oder eine Zertifikatkette"}, //-importcert - {"Imports.one.or.all.entries.from.another.keystore", - "Importiert einen oder alle Eintr\u00E4ge aus einem anderen Keystore"}, //-importkeystore - {"Clones.a.key.entry", - "Clont einen Schl\u00FCsseleintrag"}, //-keyclone - {"Changes.the.key.password.of.an.entry", - "\u00C4ndert das Schl\u00FCsselkennwort eines Eintrags"}, //-keypasswd - {"Lists.entries.in.a.keystore", - "Listet die Eintr\u00E4ge in einem Keystore auf"}, //-list - {"Prints.the.content.of.a.certificate", - "Druckt den Content eines Zertifikats"}, //-printcert - {"Prints.the.content.of.a.certificate.request", - "Druckt den Content einer Zertifikatanforderung"}, //-printcertreq - {"Prints.the.content.of.a.CRL.file", - "Druckt den Content einer CRL-Datei"}, //-printcrl - {"Generates.a.self.signed.certificate", - "Generiert ein selbst signiertes Zertifikat"}, //-selfcert - {"Changes.the.store.password.of.a.keystore", - "\u00C4ndert das Speicherkennwort eines Keystores"}, //-storepasswd - // keytool: help: options - {"alias.name.of.the.entry.to.process", - "Aliasname des zu verarbeitenden Eintrags"}, //-alias - {"destination.alias", - "Zielalias"}, //-destalias - {"destination.key.password", - "Zielschl\u00FCssel-Kennwort"}, //-destkeypass - {"destination.keystore.name", - "Ziel-Keystore-Name"}, //-destkeystore - {"destination.keystore.password.protected", - "Ziel-Keystore kennwortgesch\u00FCtzt"}, //-destprotected - {"destination.keystore.provider.name", - "Ziel-Keystore-Providername"}, //-destprovidername - {"destination.keystore.password", - "Ziel-Keystore-Kennwort"}, //-deststorepass - {"destination.keystore.type", - "Ziel-Keystore-Typ"}, //-deststoretype - {"distinguished.name", - "Distinguished Name"}, //-dname - {"X.509.extension", - "X.509-Erweiterung"}, //-ext - {"output.file.name", - "Ausgabedateiname"}, //-file and -outfile - {"input.file.name", - "Eingabedateiname"}, //-file and -infile - {"key.algorithm.name", - "Schl\u00FCsselalgorithmusname"}, //-keyalg - {"key.password", - "Schl\u00FCsselkennwort"}, //-keypass - {"key.bit.size", - "Schl\u00FCsselbitgr\u00F6\u00DFe"}, //-keysize - {"keystore.name", - "Keystore-Name"}, //-keystore - {"new.password", - "Neues Kennwort"}, //-new - {"do.not.prompt", - "Kein Prompt"}, //-noprompt - {"password.through.protected.mechanism", - "Kennwort \u00FCber gesch\u00FCtzten Mechanismus"}, //-protected - {"provider.argument", - "Providerargument"}, //-providerarg - {"provider.class.name", - "Providerklassenname"}, //-providerclass - {"provider.name", - "Providername"}, //-providername - {"provider.classpath", - "Provider-Classpath"}, //-providerpath - {"output.in.RFC.style", - "Ausgabe in RFC-Stil"}, //-rfc - {"signature.algorithm.name", - "Signaturalgorithmusname"}, //-sigalg - {"source.alias", - "Quellalias"}, //-srcalias - {"source.key.password", - "Quellschl\u00FCssel-Kennwort"}, //-srckeypass - {"source.keystore.name", - "Quell-Keystore-Name"}, //-srckeystore - {"source.keystore.password.protected", - "Quell-Keystore kennwortgesch\u00FCtzt"}, //-srcprotected - {"source.keystore.provider.name", - "Quell-Keystore-Providername"}, //-srcprovidername - {"source.keystore.password", - "Quell-Keystore-Kennwort"}, //-srcstorepass - {"source.keystore.type", - "Quell-Keystore-Typ"}, //-srcstoretype - {"SSL.server.host.and.port", - "SSL-Serverhost und -port"}, //-sslserver - {"signed.jar.file", - "Signierte JAR-Datei"}, //=jarfile - {"certificate.validity.start.date.time", - "Anfangsdatum/-zeit f\u00FCr Zertifikatsg\u00FCltigkeit"}, //-startdate - {"keystore.password", - "Keystore-Kennwort"}, //-storepass - {"keystore.type", - "Keystore-Typ"}, //-storetype - {"trust.certificates.from.cacerts", - "Zertifikaten aus cacerts vertrauen"}, //-trustcacerts - {"verbose.output", - "Verbose-Ausgabe"}, //-v - {"validity.number.of.days", - "G\u00FCltigkeitsdauer (Tage)"}, //-validity - {"Serial.ID.of.cert.to.revoke", - "Serielle ID des zu entziehenden Certs"}, //-id - // keytool: Running part - {"keytool.error.", "Keytool-Fehler: "}, - {"Illegal.option.", "Ung\u00FCltige Option: "}, - {"Illegal.value.", "Ung\u00FCltiger Wert: "}, - {"Unknown.password.type.", "Unbekannter Kennworttyp: "}, - {"Cannot.find.environment.variable.", - "Umgebungsvariable kann nicht gefunden werden: "}, - {"Cannot.find.file.", "Datei kann nicht gefunden werden: "}, - {"Command.option.flag.needs.an.argument.", "Befehlsoption {0} ben\u00F6tigt ein Argument."}, - {"Warning.Different.store.and.key.passwords.not.supported.for.PKCS12.KeyStores.Ignoring.user.specified.command.value.", - "Warnung: Keine Unterst\u00FCtzung f\u00FCr unterschiedliche Speicher- und Schl\u00FCsselkennw\u00F6rter bei PKCS12 KeyStores. Der benutzerdefinierte Wert {0} wird ignoriert."}, - {".keystore.must.be.NONE.if.storetype.is.{0}", - "-keystore muss NONE sein, wenn -storetype {0} ist"}, - {"Too.many.retries.program.terminated", - "Zu viele erneute Versuche. Programm wird beendet"}, - {".storepasswd.and.keypasswd.commands.not.supported.if.storetype.is.{0}", - "Befehle -storepasswd und -keypasswd werden nicht unterst\u00FCtzt, wenn -storetype {0} ist"}, - {".keypasswd.commands.not.supported.if.storetype.is.PKCS12", - "Befehle des Typs -keypasswd werden nicht unterst\u00FCtzt, wenn -storetype PKCS12 ist"}, - {".keypass.and.new.can.not.be.specified.if.storetype.is.{0}", - "-keypass und -new k\u00F6nnen nicht angegeben werden, wenn -storetype {0} ist"}, - {"if.protected.is.specified.then.storepass.keypass.and.new.must.not.be.specified", - "Wenn -protected angegeben ist, d\u00FCrfen -storepass, -keypass und -new nicht angegeben werden"}, - {"if.srcprotected.is.specified.then.srcstorepass.and.srckeypass.must.not.be.specified", - "Wenn -srcprotected angegeben ist, d\u00FCrfen -srcstorepass und -srckeypass nicht angegeben werden"}, - {"if.keystore.is.not.password.protected.then.storepass.keypass.and.new.must.not.be.specified", - "Wenn der Keystore nicht kennwortgesch\u00FCtzt ist, d\u00FCrfen -storepass, -keypass und -new nicht angegeben werden"}, - {"if.source.keystore.is.not.password.protected.then.srcstorepass.and.srckeypass.must.not.be.specified", - "Wenn der Quell-Keystore nicht kennwortgesch\u00FCtzt ist, d\u00FCrfen -srcstorepass und -srckeypass nicht angegeben werden"}, - {"Illegal.startdate.value", "Ung\u00FCltiger Wert f\u00FCr Anfangsdatum"}, - {"Validity.must.be.greater.than.zero", - "G\u00FCltigkeit muss gr\u00F6\u00DFer als null sein"}, - {"provName.not.a.provider", "{0} kein Provider"}, - {"Usage.error.no.command.provided", "Verwendungsfehler: Kein Befehl angegeben"}, - {"Source.keystore.file.exists.but.is.empty.", "Quell-Keystore-Datei ist zwar vorhanden, ist aber leer: "}, - {"Please.specify.srckeystore", "Geben Sie -srckeystore an"}, - {"Must.not.specify.both.v.and.rfc.with.list.command", - "-v und -rfc d\u00FCrfen bei Befehl \"list\" nicht beide angegeben werden"}, - {"Key.password.must.be.at.least.6.characters", - "Schl\u00FCsselkennwort muss mindestens sechs Zeichen lang sein"}, - {"New.password.must.be.at.least.6.characters", - "Neues Kennwort muss mindestens sechs Zeichen lang sein"}, - {"Keystore.file.exists.but.is.empty.", - "Keystore-Datei ist vorhanden, ist aber leer: "}, - {"Keystore.file.does.not.exist.", - "Keystore-Datei ist nicht vorhanden: "}, - {"Must.specify.destination.alias", "Sie m\u00FCssen einen Zielalias angeben"}, - {"Must.specify.alias", "Sie m\u00FCssen einen Alias angeben"}, - {"Keystore.password.must.be.at.least.6.characters", - "Keystore-Kennwort muss mindestens sechs Zeichen lang sein"}, - {"Enter.keystore.password.", "Keystore-Kennwort eingeben: "}, - {"Enter.source.keystore.password.", "Quell-Keystore-Kennwort eingeben: "}, - {"Enter.destination.keystore.password.", "Ziel-Keystore-Kennwort eingeben: "}, - {"Keystore.password.is.too.short.must.be.at.least.6.characters", - "Keystore-Kennwort ist zu kurz. Es muss mindestens sechs Zeichen lang sein"}, - {"Unknown.Entry.Type", "Unbekannter Eintragstyp"}, - {"Too.many.failures.Alias.not.changed", "Zu viele Fehler. Alias nicht ge\u00E4ndert"}, - {"Entry.for.alias.alias.successfully.imported.", - "Eintrag f\u00FCr Alias {0} erfolgreich importiert."}, - {"Entry.for.alias.alias.not.imported.", "Eintrag f\u00FCr Alias {0} nicht importiert."}, - {"Problem.importing.entry.for.alias.alias.exception.Entry.for.alias.alias.not.imported.", - "Problem beim Importieren des Eintrags f\u00FCr Alias {0}: {1}.\nEintrag f\u00FCr Alias {0} nicht importiert."}, - {"Import.command.completed.ok.entries.successfully.imported.fail.entries.failed.or.cancelled", - "Importbefehl abgeschlossen: {0} Eintr\u00E4ge erfolgreich importiert, {1} Eintr\u00E4ge nicht erfolgreich oder abgebrochen"}, - {"Warning.Overwriting.existing.alias.alias.in.destination.keystore", - "Warnung: Vorhandener Alias {0} in Ziel-Keystore wird \u00FCberschrieben"}, - {"Existing.entry.alias.alias.exists.overwrite.no.", - "Eintragsalias {0} ist bereits vorhanden. \u00DCberschreiben? [Nein]: "}, - {"Too.many.failures.try.later", "Zu viele Fehler. Versuchen Sie es sp\u00E4ter erneut"}, - {"Certification.request.stored.in.file.filename.", - "Zertifizierungsanforderung in Datei <{0}> gespeichert"}, - {"Submit.this.to.your.CA", "Leiten Sie dies an die CA weiter"}, - {"if.alias.not.specified.destalias.srckeypass.and.destkeypass.must.not.be.specified", - "Wenn kein Alias angegeben ist, d\u00FCrfen destalias, srckeypass und destkeypass nicht angegeben werden"}, - {"Certificate.stored.in.file.filename.", - "Zertifikat in Datei <{0}> gespeichert"}, - {"Certificate.reply.was.installed.in.keystore", - "Zertifikatantwort wurde in Keystore installiert"}, - {"Certificate.reply.was.not.installed.in.keystore", - "Zertifikatantwort wurde nicht in Keystore installiert"}, - {"Certificate.was.added.to.keystore", - "Zertifikat wurde Keystore hinzugef\u00FCgt"}, - {"Certificate.was.not.added.to.keystore", - "Zertifikat wurde nicht zu Keystore hinzugef\u00FCgt"}, - {".Storing.ksfname.", "[{0} wird gesichert]"}, - {"alias.has.no.public.key.certificate.", - "{0} hat keinen Public Key (Zertifikat)"}, - {"Cannot.derive.signature.algorithm", - "Signaturalgorithmus kann nicht abgeleitet werden"}, - {"Alias.alias.does.not.exist", - "Alias <{0}> ist nicht vorhanden"}, - {"Alias.alias.has.no.certificate", - "Alias <{0}> hat kein Zertifikat"}, - {"Key.pair.not.generated.alias.alias.already.exists", - "Schl\u00FCsselpaar wurde nicht generiert. Alias <{0}> ist bereits vorhanden"}, - {"Generating.keysize.bit.keyAlgName.key.pair.and.self.signed.certificate.sigAlgName.with.a.validity.of.validality.days.for", - "Generieren von Schl\u00FCsselpaar (Typ {1}, {0} Bit) und selbst signiertem Zertifikat ({2}) mit einer G\u00FCltigkeit von {3} Tagen\n\tf\u00FCr: {4}"}, - {"Enter.key.password.for.alias.", "Schl\u00FCsselkennwort f\u00FCr <{0}> eingeben"}, - {".RETURN.if.same.as.keystore.password.", - "\t(RETURN, wenn identisch mit Keystore-Kennwort): "}, - {"Key.password.is.too.short.must.be.at.least.6.characters", - "Schl\u00FCsselkennwort ist zu kurz. Es muss mindestens sechs Zeichen lang sein"}, - {"Too.many.failures.key.not.added.to.keystore", - "Zu viele Fehler. Schl\u00FCssel wurde nicht zu Keystore hinzugef\u00FCgt"}, - {"Destination.alias.dest.already.exists", - "Zielalias <{0}> bereits vorhanden"}, - {"Password.is.too.short.must.be.at.least.6.characters", - "Kennwort ist zu kurz. Es muss mindestens sechs Zeichen lang sein"}, - {"Too.many.failures.Key.entry.not.cloned", - "Zu viele Fehler. Schl\u00FCsseleintrag wurde nicht geclont"}, - {"key.password.for.alias.", "Schl\u00FCsselkennwort f\u00FCr <{0}>"}, - {"Keystore.entry.for.id.getName.already.exists", - "Keystore-Eintrag f\u00FCr <{0}> bereits vorhanden"}, - {"Creating.keystore.entry.for.id.getName.", - "Keystore-Eintrag f\u00FCr <{0}> wird erstellt..."}, - {"No.entries.from.identity.database.added", - "Keine Eintr\u00E4ge aus Identity-Datenbank hinzugef\u00FCgt"}, - {"Alias.name.alias", "Aliasname: {0}"}, - {"Creation.date.keyStore.getCreationDate.alias.", - "Erstellungsdatum: {0,date}"}, - {"alias.keyStore.getCreationDate.alias.", - "{0}, {1,date}, "}, - {"alias.", "{0}, "}, - {"Entry.type.type.", "Eintragstyp: {0}"}, - {"Certificate.chain.length.", "Zertifikatkettenl\u00E4nge: "}, - {"Certificate.i.1.", "Zertifikat[{0,number,integer}]:"}, - {"Certificate.fingerprint.SHA1.", "Zertifikat-Fingerprint (SHA1): "}, - {"Keystore.type.", "Keystore-Typ: "}, - {"Keystore.provider.", "Keystore-Provider: "}, - {"Your.keystore.contains.keyStore.size.entry", - "Keystore enth\u00E4lt {0,number,integer} Eintrag"}, - {"Your.keystore.contains.keyStore.size.entries", - "Keystore enth\u00E4lt {0,number,integer} Eintr\u00E4ge"}, - {"Failed.to.parse.input", "Eingabe konnte nicht geparst werden"}, - {"Empty.input", "Leere Eingabe"}, - {"Not.X.509.certificate", "Kein X.509-Zertifikat"}, - {"alias.has.no.public.key", "{0} hat keinen Public Key"}, - {"alias.has.no.X.509.certificate", "{0} hat kein X.509-Zertifikat"}, - {"New.certificate.self.signed.", "Neues Zertifikat (selbst signiert):"}, - {"Reply.has.no.certificates", "Antwort hat keine Zertifikate"}, - {"Certificate.not.imported.alias.alias.already.exists", - "Zertifikat nicht importiert. Alias <{0}> ist bereits vorhanden"}, - {"Input.not.an.X.509.certificate", "Eingabe kein X.509-Zertifikat"}, - {"Certificate.already.exists.in.keystore.under.alias.trustalias.", - "Zertifikat ist bereits unter Alias <{0}> im Keystore vorhanden"}, - {"Do.you.still.want.to.add.it.no.", - "M\u00F6chten Sie es trotzdem hinzuf\u00FCgen? [Nein]: "}, - {"Certificate.already.exists.in.system.wide.CA.keystore.under.alias.trustalias.", - "Zertifikat ist bereits unter Alias <{0}> im systemweiten CA-Keystore vorhanden"}, - {"Do.you.still.want.to.add.it.to.your.own.keystore.no.", - "M\u00F6chten Sie es trotzdem zu Ihrem eigenen Keystore hinzuf\u00FCgen? [Nein]: "}, - {"Trust.this.certificate.no.", "Diesem Zertifikat vertrauen? [Nein]: "}, - {"YES", "Ja"}, - {"New.prompt.", "Neues {0}: "}, - {"Passwords.must.differ", "Kennw\u00F6rter m\u00FCssen sich unterscheiden"}, - {"Re.enter.new.prompt.", "Neues {0} erneut eingeben: "}, - {"Re.enter.new.password.", "Neues Kennwort erneut eingeben: "}, - {"They.don.t.match.Try.again", "Keine \u00DCbereinstimmung. Wiederholen Sie den Vorgang"}, - {"Enter.prompt.alias.name.", "{0}-Aliasnamen eingeben: "}, - {"Enter.new.alias.name.RETURN.to.cancel.import.for.this.entry.", - "Geben Sie einen neuen Aliasnamen ein\t(RETURN, um den Import dieses Eintrags abzubrechen): "}, - {"Enter.alias.name.", "Aliasnamen eingeben: "}, - {".RETURN.if.same.as.for.otherAlias.", - "\t(RETURN, wenn identisch mit <{0}>)"}, - {".PATTERN.printX509Cert", - "Eigent\u00FCmer: {0}\nAussteller: {1}\nSeriennummer: {2}\nG\u00FCltig von: {3} bis: {4}\nZertifikat-Fingerprints:\n\t MD5: {5}\n\t SHA1: {6}\n\t SHA256: {7}\n\t Signaturalgorithmusname: {8}\n\t Version: {9}"}, - {"What.is.your.first.and.last.name.", - "Wie lautet Ihr Vor- und Nachname?"}, - {"What.is.the.name.of.your.organizational.unit.", - "Wie lautet der Name Ihrer organisatorischen Einheit?"}, - {"What.is.the.name.of.your.organization.", - "Wie lautet der Name Ihrer Organisation?"}, - {"What.is.the.name.of.your.City.or.Locality.", - "Wie lautet der Name Ihrer Stadt oder Gemeinde?"}, - {"What.is.the.name.of.your.State.or.Province.", - "Wie lautet der Name Ihres Bundeslands?"}, - {"What.is.the.two.letter.country.code.for.this.unit.", - "Wie lautet der L\u00E4ndercode (zwei Buchstaben) f\u00FCr diese Einheit?"}, - {"Is.name.correct.", "Ist {0} richtig?"}, - {"no", "Nein"}, - {"yes", "Ja"}, - {"y", "J"}, - {".defaultValue.", " [{0}]: "}, - {"Alias.alias.has.no.key", - "Alias <{0}> verf\u00FCgt \u00FCber keinen Schl\u00FCssel"}, - {"Alias.alias.references.an.entry.type.that.is.not.a.private.key.entry.The.keyclone.command.only.supports.cloning.of.private.key", - "Alias <{0}> verweist auf einen Eintragstyp, der kein Private Key-Eintrag ist. Der Befehl -keyclone unterst\u00FCtzt nur das Clonen von Private Key-Eintr\u00E4gen"}, - - {".WARNING.WARNING.WARNING.", - "***************** Warnung Warnung Warnung *****************"}, - {"Signer.d.", "Signaturgeber #%d:"}, - {"Timestamp.", "Zeitstempel:"}, - {"Signature.", "Signatur:"}, - {"CRLs.", "CRLs:"}, - {"Certificate.owner.", "Zertifikateigent\u00FCmer: "}, - {"Not.a.signed.jar.file", "Keine signierte JAR-Datei"}, - {"No.certificate.from.the.SSL.server", - "Kein Zertifikat vom SSL-Server"}, - - {".The.integrity.of.the.information.stored.in.your.keystore.", - "* Die Integrit\u00E4t der Informationen, die in Ihrem Keystore gespeichert sind, *\n* wurde NICHT gepr\u00FCft. Um die Integrit\u00E4t zu pr\u00FCfen, *\n* m\u00FCssen Sie Ihr Keystore-Kennwort angeben. *"}, - {".The.integrity.of.the.information.stored.in.the.srckeystore.", - "* Die Integrit\u00E4t der Informationen, die in Ihrem Srckeystore gespeichert sind, *\n* wurde NICHT gepr\u00FCft. Um die Integrit\u00E4t zu pr\u00FCfen, *\n* m\u00FCssen Sie Ihr Srckeystore-Kennwort angeben. *"}, - - {"Certificate.reply.does.not.contain.public.key.for.alias.", - "Zertifikatantwort enth\u00E4lt keinen Public Key f\u00FCr <{0}>"}, - {"Incomplete.certificate.chain.in.reply", - "Unvollst\u00E4ndige Zertifikatkette in Antwort"}, - {"Certificate.chain.in.reply.does.not.verify.", - "Zertifikatkette in Antwort verifiziert nicht: "}, - {"Top.level.certificate.in.reply.", - "Zertifikat der obersten Ebene in Antwort:\n"}, - {".is.not.trusted.", "... ist nicht vertrauensw\u00FCrdig. "}, - {"Install.reply.anyway.no.", "Antwort trotzdem installieren? [Nein]: "}, - {"NO", "Nein"}, - {"Public.keys.in.reply.and.keystore.don.t.match", - "Public Keys in Antwort und Keystore stimmen nicht \u00FCberein"}, - {"Certificate.reply.and.certificate.in.keystore.are.identical", - "Zertifikatantwort und Zertifikat in Keystore sind identisch"}, - {"Failed.to.establish.chain.from.reply", - "Kette konnte der Antwort nicht entnommen werden"}, - {"n", "N"}, - {"Wrong.answer.try.again", "Falsche Antwort. Wiederholen Sie den Vorgang"}, - {"Secret.key.not.generated.alias.alias.already.exists", - "Secret Key wurde nicht generiert. Alias <{0}> ist bereits vorhanden"}, - {"Please.provide.keysize.for.secret.key.generation", - "Geben Sie -keysize zum Erstellen eines Secret Keys an"}, - - {"Extensions.", "Erweiterungen: "}, - {".Empty.value.", "(Leerer Wert)"}, - {"Extension.Request.", "Erweiterungsanforderung:"}, - {"PKCS.10.Certificate.Request.Version.1.0.Subject.s.Public.Key.s.format.s.key.", - "PKCS #10-Zertifikatanforderung (Version 1.0)\nSubjekt: %s\nPublic Key: %s Format %s Schl\u00FCssel\n"}, - {"Unknown.keyUsage.type.", "Unbekannter keyUsage-Typ: "}, - {"Unknown.extendedkeyUsage.type.", "Unbekannter extendedkeyUsage-Typ: "}, - {"Unknown.AccessDescription.type.", "Unbekannter AccessDescription-Typ: "}, - {"Unrecognized.GeneralName.type.", "Unbekannter GeneralName-Typ: "}, - {"This.extension.cannot.be.marked.as.critical.", - "Erweiterung kann nicht als \"Kritisch\" markiert werden. "}, - {"Odd.number.of.hex.digits.found.", "Ungerade Anzahl hexadezimaler Ziffern gefunden: "}, - {"Unknown.extension.type.", "Unbekannter Erweiterungstyp: "}, - {"command.{0}.is.ambiguous.", "Befehl {0} ist mehrdeutig:"}, - - // policytool - {"Warning.A.public.key.for.alias.signers.i.does.not.exist.Make.sure.a.KeyStore.is.properly.configured.", - "Warnung: Kein Public Key f\u00FCr Alias {0} vorhanden. Vergewissern Sie sich, dass der KeyStore ordnungsgem\u00E4\u00DF konfiguriert ist."}, - {"Warning.Class.not.found.class", "Warnung: Klasse nicht gefunden: {0}"}, - {"Warning.Invalid.argument.s.for.constructor.arg", - "Warnung: Ung\u00FCltige(s) Argument(e) f\u00FCr Constructor: {0}"}, - {"Illegal.Principal.Type.type", "Ung\u00FCltiger Principal-Typ: {0}"}, - {"Illegal.option.option", "Ung\u00FCltige Option: {0}"}, - {"Usage.policytool.options.", "Verwendung: policytool [Optionen]"}, - {".file.file.policy.file.location", - " [-file ] Policy-Dateiverzeichnis"}, - {"New", "Neu"}, - {"Open", "\u00D6ffnen"}, - {"Save", "Speichern"}, - {"Save.As", "Speichern unter"}, - {"View.Warning.Log", "Warnungslog anzeigen"}, - {"Exit", "Beenden"}, - {"Add.Policy.Entry", "Policy-Eintrag hinzuf\u00FCgen"}, - {"Edit.Policy.Entry", "Policy-Eintrag bearbeiten"}, - {"Remove.Policy.Entry", "Policy-Eintrag entfernen"}, - {"Edit", "Bearbeiten"}, - {"Retain", "Beibehalten"}, - - {"Warning.File.name.may.include.escaped.backslash.characters.It.is.not.necessary.to.escape.backslash.characters.the.tool.escapes", - "Warnung: M\u00F6glicherweise enth\u00E4lt der Dateiname Escape-Zeichen mit Backslash. Es ist nicht notwendig, Backslash-Zeichen zu escapen (das Tool f\u00FChrt dies automatisch beim Schreiben des Policy-Contents in den persistenten Speicher aus).\n\nKlicken Sie auf \"Beibehalten\", um den eingegebenen Namen beizubehalten oder auf \"Bearbeiten\", um den Namen zu bearbeiten."}, - - {"Add.Public.Key.Alias", "Public Key-Alias hinzuf\u00FCgen"}, - {"Remove.Public.Key.Alias", "Public Key-Alias entfernen"}, - {"File", "Datei"}, - {"KeyStore", "KeyStore"}, - {"Policy.File.", "Policy-Datei:"}, - {"Could.not.open.policy.file.policyFile.e.toString.", - "Policy-Datei konnte nicht ge\u00F6ffnet werden: {0}: {1}"}, - {"Policy.Tool", "Policy-Tool"}, - {"Errors.have.occurred.while.opening.the.policy.configuration.View.the.Warning.Log.for.more.information.", - "Beim \u00D6ffnen der Policy-Konfiguration sind Fehler aufgetreten. Weitere Informationen finden Sie im Warnungslog."}, - {"Error", "Fehler"}, - {"OK", "OK"}, - {"Status", "Status"}, - {"Warning", "Warnung"}, - {"Permission.", - "Berechtigung: "}, - {"Principal.Type.", "Principal-Typ:"}, - {"Principal.Name.", "Principal-Name:"}, - {"Target.Name.", - "Zielname: "}, - {"Actions.", - "Aktionen: "}, - {"OK.to.overwrite.existing.file.filename.", - "Vorhandene Datei {0} \u00FCberschreiben?"}, - {"Cancel", "Abbrechen"}, - {"CodeBase.", "CodeBase:"}, - {"SignedBy.", "SignedBy:"}, - {"Add.Principal", "Principal hinzuf\u00FCgen"}, - {"Edit.Principal", "Principal bearbeiten"}, - {"Remove.Principal", "Principal entfernen"}, - {"Principals.", "Principals:"}, - {".Add.Permission", " Berechtigung hinzuf\u00FCgen"}, - {".Edit.Permission", " Berechtigung bearbeiten"}, - {"Remove.Permission", "Berechtigung entfernen"}, - {"Done", "Fertig"}, - {"KeyStore.URL.", "KeyStore-URL:"}, - {"KeyStore.Type.", "KeyStore-Typ:"}, - {"KeyStore.Provider.", "KeyStore-Provider:"}, - {"KeyStore.Password.URL.", "KeyStore-Kennwort-URL:"}, - {"Principals", "Principals"}, - {".Edit.Principal.", " Principal bearbeiten:"}, - {".Add.New.Principal.", " Neuen Principal hinzuf\u00FCgen:"}, - {"Permissions", "Berechtigungen"}, - {".Edit.Permission.", " Berechtigung bearbeiten:"}, - {".Add.New.Permission.", " Neue Berechtigung hinzuf\u00FCgen:"}, - {"Signed.By.", "Signiert von:"}, - {"Cannot.Specify.Principal.with.a.Wildcard.Class.without.a.Wildcard.Name", - "Principal kann nicht mit einer Platzhalterklasse ohne Platzhalternamen angegeben werden"}, - {"Cannot.Specify.Principal.without.a.Name", - "Principal kann nicht ohne einen Namen angegeben werden"}, - {"Permission.and.Target.Name.must.have.a.value", - "Berechtigung und Zielname m\u00FCssen einen Wert haben"}, - {"Remove.this.Policy.Entry.", "Diesen Policy-Eintrag entfernen?"}, - {"Overwrite.File", "Datei \u00FCberschreiben"}, - {"Policy.successfully.written.to.filename", - "Policy erfolgreich in {0} geschrieben"}, - {"null.filename", "Null-Dateiname"}, - {"Save.changes.", "\u00C4nderungen speichern?"}, - {"Yes", "Ja"}, - {"No", "Nein"}, - {"Policy.Entry", "Policy-Eintrag"}, - {"Save.Changes", "\u00C4nderungen speichern"}, - {"No.Policy.Entry.selected", "Kein Policy-Eintrag ausgew\u00E4hlt"}, - {"Unable.to.open.KeyStore.ex.toString.", - "KeyStore kann nicht ge\u00F6ffnet werden: {0}"}, - {"No.principal.selected", "Kein Principal ausgew\u00E4hlt"}, - {"No.permission.selected", "Keine Berechtigung ausgew\u00E4hlt"}, - {"name", "Name"}, - {"configuration.type", "Konfigurationstyp"}, - {"environment.variable.name", "Umgebungsvariablenname"}, - {"library.name", "Library-Name"}, - {"package.name", "Packagename"}, - {"policy.type", "Policy-Typ"}, - {"property.name", "Eigenschaftsname"}, - {"Principal.List", "Principal-Liste"}, - {"Permission.List", "Berechtigungsliste"}, - {"Code.Base", "Codebase"}, - {"KeyStore.U.R.L.", "KeyStore-URL:"}, - {"KeyStore.Password.U.R.L.", "KeyStore-Kennwort-URL:"}, - - // javax.security.auth.PrivateCredentialPermission {"invalid.null.input.s.", "Ung\u00FCltige Nulleingabe(n)"}, {"actions.can.only.be.read.", "Aktionen k\u00F6nnen nur \"lesen\" sein"}, @@ -553,6 +58,7 @@ public class Resources_de extends java.util.ListResourceBundle { {"provided.null.OID.map", "Null-OID-Zuordnung angegeben"}, // javax.security.auth.Subject + {"NEWLINE", "\n"}, {"invalid.null.AccessControlContext.provided", "Ung\u00FCltiger Nullwert f\u00FCr AccessControlContext angegeben"}, {"invalid.null.action.provided", "Ung\u00FCltige Nullaktion angegeben"}, @@ -656,6 +162,7 @@ public class Resources_de extends java.util.ListResourceBundle { * * @return the contents of this ResourceBundle. */ + @Override public Object[][] getContents() { return contents; } diff --git a/jdk/src/share/classes/sun/security/util/Resources_es.java b/jdk/src/share/classes/sun/security/util/Resources_es.java index 59dc88b9f45..8f2b296c818 100644 --- a/jdk/src/share/classes/sun/security/util/Resources_es.java +++ b/jdk/src/share/classes/sun/security/util/Resources_es.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2000, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2000, 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 @@ -34,501 +34,6 @@ public class Resources_es extends java.util.ListResourceBundle { private static final Object[][] contents = { - // shared (from jarsigner) - {"SPACE", " "}, - {"2SPACE", " "}, - {"6SPACE", " "}, - {"COMMA", ", "}, - // shared (from keytool) - {"NEWLINE", "\n"}, - {"STAR", - "*******************************************"}, - {"STARNN", - "*******************************************\n\n"}, - - // keytool: Help part -// "Option" should be translated. - {".OPTION.", " [Opci\u00F3n]..."}, - {"Options.", "Opciones:"}, - {"Use.keytool.help.for.all.available.commands", - "Utilice\"keytool -help\" para todos los comandos disponibles"}, - {"Key.and.Certificate.Management.Tool", - "Herramienta de Gesti\u00F3n de Certificados y Claves"}, - {"Commands.", "Comandos:"}, - {"Use.keytool.command.name.help.for.usage.of.command.name", - "Utilice \"keytool -command_name -help\" para la sintaxis de nombre_comando"}, - // keytool: help: commands - {"Generates.a.certificate.request", - "Genera una solicitud de certificado"}, //-certreq - {"Changes.an.entry.s.alias", - "Cambia un alias de entrada"}, //-changealias - {"Deletes.an.entry", - "Suprime una entrada"}, //-delete - {"Exports.certificate", - "Exporta el certificado"}, //-exportcert - {"Generates.a.key.pair", - "Genera un par de claves"}, //-genkeypair -// translation of "secret" key should be different to "private" key. - {"Generates.a.secret.key", - "Genera un clave secreta"}, //-genseckey - {"Generates.certificate.from.a.certificate.request", - "Genera un certificado a partir de una solicitud de certificado"}, //-gencert - {"Generates.CRL", "Genera CRL"}, //-gencrl - {"Imports.entries.from.a.JDK.1.1.x.style.identity.database", - "Importa entradas desde una base de datos de identidades JDK 1.1.x-style"}, //-identitydb - {"Imports.a.certificate.or.a.certificate.chain", - "Importa un certificado o una cadena de certificados"}, //-importcert - {"Imports.one.or.all.entries.from.another.keystore", - "Importa una o todas las entradas desde otro almac\u00E9n de claves"}, //-importkeystore - {"Clones.a.key.entry", - "Clona una entrada de clave"}, //-keyclone - {"Changes.the.key.password.of.an.entry", - "Cambia la contrase\u00F1a de clave de una entrada"}, //-keypasswd - {"Lists.entries.in.a.keystore", - "Enumera las entradas de un almac\u00E9n de claves"}, //-list - {"Prints.the.content.of.a.certificate", - "Imprime el contenido de un certificado"}, //-printcert - {"Prints.the.content.of.a.certificate.request", - "Imprime el contenido de una solicitud de certificado"}, //-printcertreq - {"Prints.the.content.of.a.CRL.file", - "Imprime el contenido de un archivo CRL"}, //-printcrl - {"Generates.a.self.signed.certificate", - "Genera un certificado autofirmado"}, //-selfcert - {"Changes.the.store.password.of.a.keystore", - "Cambia la contrase\u00F1a de almac\u00E9n de un almac\u00E9n de claves"}, //-storepasswd - // keytool: help: options - {"alias.name.of.the.entry.to.process", - "nombre de alias de la entrada que se va a procesar"}, //-alias - {"destination.alias", - "alias de destino"}, //-destalias - {"destination.key.password", - "contrase\u00F1a de clave de destino"}, //-destkeypass - {"destination.keystore.name", - "nombre de almac\u00E9n de claves de destino"}, //-destkeystore - {"destination.keystore.password.protected", - "almac\u00E9n de claves de destino protegido por contrase\u00F1a"}, //-destprotected - {"destination.keystore.provider.name", - "nombre de proveedor de almac\u00E9n de claves de destino"}, //-destprovidername - {"destination.keystore.password", - "contrase\u00F1a de almac\u00E9n de claves de destino"}, //-deststorepass - {"destination.keystore.type", - "tipo de almac\u00E9n de claves de destino"}, //-deststoretype - {"distinguished.name", - "nombre distintivo"}, //-dname - {"X.509.extension", - "extensi\u00F3n X.509"}, //-ext - {"output.file.name", - "nombre de archivo de salida"}, //-file and -outfile - {"input.file.name", - "nombre de archivo de entrada"}, //-file and -infile - {"key.algorithm.name", - "nombre de algoritmo de clave"}, //-keyalg - {"key.password", - "contrase\u00F1a de clave"}, //-keypass - {"key.bit.size", - "tama\u00F1o de bit de clave"}, //-keysize - {"keystore.name", - "nombre de almac\u00E9n de claves"}, //-keystore - {"new.password", - "nueva contrase\u00F1a"}, //-new - {"do.not.prompt", - "no solicitar"}, //-noprompt - {"password.through.protected.mechanism", - "contrase\u00F1a a trav\u00E9s de mecanismo protegido"}, //-protected - {"provider.argument", - "argumento del proveedor"}, //-providerarg - {"provider.class.name", - "nombre de clase del proveedor"}, //-providerclass - {"provider.name", - "nombre del proveedor"}, //-providername - {"provider.classpath", - "classpath de proveedor"}, //-providerpath - {"output.in.RFC.style", - "salida en estilo RFC"}, //-rfc - {"signature.algorithm.name", - "nombre de algoritmo de firma"}, //-sigalg - {"source.alias", - "alias de origen"}, //-srcalias - {"source.key.password", - "contrase\u00F1a de clave de origen"}, //-srckeypass - {"source.keystore.name", - "nombre de almac\u00E9n de claves de origen"}, //-srckeystore - {"source.keystore.password.protected", - "almac\u00E9n de claves de origen protegido por contrase\u00F1a"}, //-srcprotected - {"source.keystore.provider.name", - "nombre de proveedor de almac\u00E9n de claves de origen"}, //-srcprovidername - {"source.keystore.password", - "contrase\u00F1a de almac\u00E9n de claves de origen"}, //-srcstorepass - {"source.keystore.type", - "tipo de almac\u00E9n de claves de origen"}, //-srcstoretype - {"SSL.server.host.and.port", - "puerto y host del servidor SSL"}, //-sslserver - {"signed.jar.file", - "archivo jar firmado"}, //=jarfile - {"certificate.validity.start.date.time", - "fecha/hora de inicio de validez del certificado"}, //-startdate - {"keystore.password", - "contrase\u00F1a de almac\u00E9n de claves"}, //-storepass - {"keystore.type", - "tipo de almac\u00E9n de claves"}, //-storetype - {"trust.certificates.from.cacerts", - "certificados de protecci\u00F3n de cacerts"}, //-trustcacerts - {"verbose.output", - "salida detallada"}, //-v - {"validity.number.of.days", - "n\u00FAmero de validez de d\u00EDas"}, //-validity - {"Serial.ID.of.cert.to.revoke", - "identificador de serie del certificado que se va a revocar"}, //-id - // keytool: Running part - {"keytool.error.", "error de herramienta de claves: "}, - {"Illegal.option.", "Opci\u00F3n no permitida: "}, - {"Illegal.value.", "Valor no permitido: "}, - {"Unknown.password.type.", "Tipo de contrase\u00F1a desconocido: "}, - {"Cannot.find.environment.variable.", - "No se ha encontrado la variable del entorno: "}, - {"Cannot.find.file.", "No se ha encontrado el archivo: "}, - {"Command.option.flag.needs.an.argument.", "La opci\u00F3n de comando {0} necesita un argumento."}, - {"Warning.Different.store.and.key.passwords.not.supported.for.PKCS12.KeyStores.Ignoring.user.specified.command.value.", - "Advertencia: los almacenes de claves en formato PKCS12 no admiten contrase\u00F1as de clave y almacenamiento distintas. Se ignorar\u00E1 el valor especificado por el usuario, {0}."}, - {".keystore.must.be.NONE.if.storetype.is.{0}", - "-keystore debe ser NONE si -storetype es {0}"}, - {"Too.many.retries.program.terminated", - "Ha habido demasiados intentos, se ha cerrado el programa"}, - {".storepasswd.and.keypasswd.commands.not.supported.if.storetype.is.{0}", - "Los comandos -storepasswd y -keypasswd no est\u00E1n soportados si -storetype es {0}"}, - {".keypasswd.commands.not.supported.if.storetype.is.PKCS12", - "Los comandos -keypasswd no est\u00E1n soportados si -storetype es PKCS12"}, - {".keypass.and.new.can.not.be.specified.if.storetype.is.{0}", - "-keypass y -new no se pueden especificar si -storetype es {0}"}, - {"if.protected.is.specified.then.storepass.keypass.and.new.must.not.be.specified", - "si se especifica -protected, no deben especificarse -storepass, -keypass ni -new"}, - {"if.srcprotected.is.specified.then.srcstorepass.and.srckeypass.must.not.be.specified", - "Si se especifica -srcprotected, no se puede especificar -srcstorepass ni -srckeypass"}, - {"if.keystore.is.not.password.protected.then.storepass.keypass.and.new.must.not.be.specified", - "Si keystore no est\u00E1 protegido por contrase\u00F1a, no se deben especificar -storepass, -keypass ni -new"}, - {"if.source.keystore.is.not.password.protected.then.srcstorepass.and.srckeypass.must.not.be.specified", - "Si el almac\u00E9n de claves de origen no est\u00E1 protegido por contrase\u00F1a, no se deben especificar -srcstorepass ni -srckeypass"}, - {"Illegal.startdate.value", "Valor de fecha de inicio no permitido"}, - {"Validity.must.be.greater.than.zero", - "La validez debe ser mayor que cero"}, - {"provName.not.a.provider", "{0} no es un proveedor"}, - {"Usage.error.no.command.provided", "Error de sintaxis: no se ha proporcionado ning\u00FAn comando"}, - {"Source.keystore.file.exists.but.is.empty.", "El archivo de almac\u00E9n de claves de origen existe, pero est\u00E1 vac\u00EDo: "}, - {"Please.specify.srckeystore", "Especifique -srckeystore"}, - {"Must.not.specify.both.v.and.rfc.with.list.command", - "No se deben especificar -v y -rfc simult\u00E1neamente con el comando 'list'"}, - {"Key.password.must.be.at.least.6.characters", - "La contrase\u00F1a de clave debe tener al menos 6 caracteres"}, - {"New.password.must.be.at.least.6.characters", - "La nueva contrase\u00F1a debe tener al menos 6 caracteres"}, - {"Keystore.file.exists.but.is.empty.", - "El archivo de almac\u00E9n de claves existe, pero est\u00E1 vac\u00EDo: "}, - {"Keystore.file.does.not.exist.", - "El archivo de almac\u00E9n de claves no existe: "}, - {"Must.specify.destination.alias", "Se debe especificar un alias de destino"}, - {"Must.specify.alias", "Se debe especificar un alias"}, - {"Keystore.password.must.be.at.least.6.characters", - "La contrase\u00F1a del almac\u00E9n de claves debe tener al menos 6 caracteres"}, - {"Enter.keystore.password.", "Introduzca la contrase\u00F1a del almac\u00E9n de claves: "}, - {"Enter.source.keystore.password.", "Introduzca la contrase\u00F1a de almac\u00E9n de claves de origen: "}, - {"Enter.destination.keystore.password.", "Introduzca la contrase\u00F1a de almac\u00E9n de claves de destino: "}, - {"Keystore.password.is.too.short.must.be.at.least.6.characters", - "La contrase\u00F1a del almac\u00E9n de claves es demasiado corta, debe tener al menos 6 caracteres"}, - {"Unknown.Entry.Type", "Tipo de Entrada Desconocido"}, - {"Too.many.failures.Alias.not.changed", "Demasiados fallos. No se ha cambiado el alias"}, - {"Entry.for.alias.alias.successfully.imported.", - "La entrada del alias {0} se ha importado correctamente."}, - {"Entry.for.alias.alias.not.imported.", "La entrada del alias {0} no se ha importado."}, - {"Problem.importing.entry.for.alias.alias.exception.Entry.for.alias.alias.not.imported.", - "Problema al importar la entrada del alias {0}: {1}.\nNo se ha importado la entrada del alias {0}."}, - {"Import.command.completed.ok.entries.successfully.imported.fail.entries.failed.or.cancelled", - "Comando de importaci\u00F3n completado: {0} entradas importadas correctamente, {1} entradas incorrectas o canceladas"}, - {"Warning.Overwriting.existing.alias.alias.in.destination.keystore", - "Advertencia: se sobrescribir\u00E1 el alias {0} en el almac\u00E9n de claves de destino"}, - {"Existing.entry.alias.alias.exists.overwrite.no.", - "El alias de entrada existente {0} ya existe, \u00BFdesea sobrescribirlo? [no]: "}, - {"Too.many.failures.try.later", "Demasiados fallos; int\u00E9ntelo m\u00E1s adelante"}, - {"Certification.request.stored.in.file.filename.", - "Solicitud de certificaci\u00F3n almacenada en el archivo <{0}>"}, - {"Submit.this.to.your.CA", "Enviar a la CA"}, - {"if.alias.not.specified.destalias.srckeypass.and.destkeypass.must.not.be.specified", - "si no se especifica el alias, no se puede especificar destalias, srckeypass ni destkeypass"}, - {"Certificate.stored.in.file.filename.", - "Certificado almacenado en el archivo <{0}>"}, - {"Certificate.reply.was.installed.in.keystore", - "Se ha instalado la respuesta del certificado en el almac\u00E9n de claves"}, - {"Certificate.reply.was.not.installed.in.keystore", - "No se ha instalado la respuesta del certificado en el almac\u00E9n de claves"}, - {"Certificate.was.added.to.keystore", - "Se ha agregado el certificado al almac\u00E9n de claves"}, - {"Certificate.was.not.added.to.keystore", - "No se ha agregado el certificado al almac\u00E9n de claves"}, - {".Storing.ksfname.", "[Almacenando {0}]"}, - {"alias.has.no.public.key.certificate.", - "{0} no tiene clave p\u00FAblica (certificado)"}, - {"Cannot.derive.signature.algorithm", - "No se puede derivar el algoritmo de firma"}, - {"Alias.alias.does.not.exist", - "El alias <{0}> no existe"}, - {"Alias.alias.has.no.certificate", - "El alias <{0}> no tiene certificado"}, - {"Key.pair.not.generated.alias.alias.already.exists", - "No se ha generado el par de claves, el alias <{0}> ya existe"}, - {"Generating.keysize.bit.keyAlgName.key.pair.and.self.signed.certificate.sigAlgName.with.a.validity.of.validality.days.for", - "Generando par de claves {1} de {0} bits para certificado autofirmado ({2}) con una validez de {3} d\u00EDas\n\tpara: {4}"}, - {"Enter.key.password.for.alias.", "Introduzca la contrase\u00F1a de clave para <{0}>"}, - {".RETURN.if.same.as.keystore.password.", - "\t(INTRO si es la misma contrase\u00F1a que la del almac\u00E9n de claves): "}, - {"Key.password.is.too.short.must.be.at.least.6.characters", - "La contrase\u00F1a de clave es demasiado corta; debe tener al menos 6 caracteres"}, - {"Too.many.failures.key.not.added.to.keystore", - "Demasiados fallos; no se ha agregado la clave al almac\u00E9n de claves"}, - {"Destination.alias.dest.already.exists", - "El alias de destino <{0}> ya existe"}, - {"Password.is.too.short.must.be.at.least.6.characters", - "La contrase\u00F1a es demasiado corta; debe tener al menos 6 caracteres"}, - {"Too.many.failures.Key.entry.not.cloned", - "Demasiados fallos. No se ha clonado la entrada de clave"}, - {"key.password.for.alias.", "contrase\u00F1a de clave para <{0}>"}, - {"Keystore.entry.for.id.getName.already.exists", - "La entrada de almac\u00E9n de claves para <{0}> ya existe"}, - {"Creating.keystore.entry.for.id.getName.", - "Creando entrada de almac\u00E9n de claves para <{0}> ..."}, - {"No.entries.from.identity.database.added", - "No se han agregado entradas de la base de datos de identidades"}, - {"Alias.name.alias", "Nombre de Alias: {0}"}, - {"Creation.date.keyStore.getCreationDate.alias.", - "Fecha de Creaci\u00F3n: {0,date}"}, - {"alias.keyStore.getCreationDate.alias.", - "{0}, {1,date}, "}, - {"alias.", "{0}, "}, - {"Entry.type.type.", "Tipo de Entrada: {0}"}, - {"Certificate.chain.length.", "Longitud de la Cadena de Certificado: "}, - {"Certificate.i.1.", "Certificado[{0,number,integer}]:"}, - {"Certificate.fingerprint.SHA1.", "Huella Digital de Certificado (SHA1): "}, - {"Keystore.type.", "Tipo de Almac\u00E9n de Claves: "}, - {"Keystore.provider.", "Proveedor de Almac\u00E9n de Claves: "}, - {"Your.keystore.contains.keyStore.size.entry", - "Su almac\u00E9n de claves contiene {0,number,integer} entrada"}, - {"Your.keystore.contains.keyStore.size.entries", - "Su almac\u00E9n de claves contiene {0,number,integer} entradas"}, - {"Failed.to.parse.input", "Fallo al analizar la entrada"}, - {"Empty.input", "Entrada vac\u00EDa"}, - {"Not.X.509.certificate", "No es un certificado X.509"}, - {"alias.has.no.public.key", "{0} no tiene clave p\u00FAblica"}, - {"alias.has.no.X.509.certificate", "{0} no tiene certificado X.509"}, - {"New.certificate.self.signed.", "Nuevo Certificado (Autofirmado):"}, - {"Reply.has.no.certificates", "La respuesta no tiene certificados"}, - {"Certificate.not.imported.alias.alias.already.exists", - "Certificado no importado, el alias <{0}> ya existe"}, - {"Input.not.an.X.509.certificate", "La entrada no es un certificado X.509"}, - {"Certificate.already.exists.in.keystore.under.alias.trustalias.", - "El certificado ya existe en el almac\u00E9n de claves con el alias <{0}>"}, - {"Do.you.still.want.to.add.it.no.", - "\u00BFA\u00FAn desea agregarlo? [no]: "}, - {"Certificate.already.exists.in.system.wide.CA.keystore.under.alias.trustalias.", - "El certificado ya existe en el almac\u00E9n de claves de la CA del sistema, con el alias <{0}>"}, - {"Do.you.still.want.to.add.it.to.your.own.keystore.no.", - "\u00BFA\u00FAn desea agregarlo a su propio almac\u00E9n de claves? [no]: "}, - {"Trust.this.certificate.no.", "\u00BFConfiar en este certificado? [no]: "}, - {"YES", "S\u00ED"}, - {"New.prompt.", "Nuevo {0}: "}, - {"Passwords.must.differ", "Las contrase\u00F1as deben ser distintas"}, - {"Re.enter.new.prompt.", "Vuelva a escribir el nuevo {0}: "}, - {"Re.enter.new.password.", "Volver a escribir la contrase\u00F1a nueva: "}, - {"They.don.t.match.Try.again", "No coinciden. Int\u00E9ntelo de nuevo"}, - {"Enter.prompt.alias.name.", "Escriba el nombre de alias de {0}: "}, - {"Enter.new.alias.name.RETURN.to.cancel.import.for.this.entry.", - "Indique el nuevo nombre de alias\t(INTRO para cancelar la importaci\u00F3n de esta entrada): "}, - {"Enter.alias.name.", "Introduzca el nombre de alias: "}, - {".RETURN.if.same.as.for.otherAlias.", - "\t(INTRO si es el mismo que para <{0}>)"}, - {".PATTERN.printX509Cert", - "Propietario: {0}\nEmisor: {1}\nN\u00FAmero de serie: {2}\nV\u00E1lido desde: {3} hasta: {4}\nHuellas digitales del Certificado:\n\t MD5: {5}\n\t SHA1: {6}\n\t SHA256: {7}\n\t Nombre del Algoritmo de Firma: {8}\n\t Versi\u00F3n: {9}"}, - {"What.is.your.first.and.last.name.", - "\u00BFCu\u00E1les son su nombre y su apellido?"}, - {"What.is.the.name.of.your.organizational.unit.", - "\u00BFCu\u00E1l es el nombre de su unidad de organizaci\u00F3n?"}, - {"What.is.the.name.of.your.organization.", - "\u00BFCu\u00E1l es el nombre de su organizaci\u00F3n?"}, - {"What.is.the.name.of.your.City.or.Locality.", - "\u00BFCu\u00E1l es el nombre de su ciudad o localidad?"}, - {"What.is.the.name.of.your.State.or.Province.", - "\u00BFCu\u00E1l es el nombre de su estado o provincia?"}, - {"What.is.the.two.letter.country.code.for.this.unit.", - "\u00BFCu\u00E1l es el c\u00F3digo de pa\u00EDs de dos letras de la unidad?"}, - {"Is.name.correct.", "\u00BFEs correcto {0}?"}, - {"no", "no"}, - {"yes", "s\u00ED"}, - {"y", "s"}, - {".defaultValue.", " [{0}]: "}, - {"Alias.alias.has.no.key", - "El alias <{0}> no tiene clave"}, - {"Alias.alias.references.an.entry.type.that.is.not.a.private.key.entry.The.keyclone.command.only.supports.cloning.of.private.key", - "El alias <{0}> hace referencia a un tipo de entrada que no es una clave privada. El comando -keyclone s\u00F3lo permite la clonaci\u00F3n de entradas de claves privadas"}, - - {".WARNING.WARNING.WARNING.", - "***************** Advertencia Advertencia Advertencia *****************"}, - {"Signer.d.", "#%d de Firmante:"}, - {"Timestamp.", "Registro de Hora:"}, - {"Signature.", "Firma:"}, - {"CRLs.", "CRL:"}, - {"Certificate.owner.", "Propietario del Certificado: "}, - {"Not.a.signed.jar.file", "No es un archivo jar firmado"}, - {"No.certificate.from.the.SSL.server", - "Ning\u00FAn certificado del servidor SSL"}, - - {".The.integrity.of.the.information.stored.in.your.keystore.", - "* La integridad de la informaci\u00F3n almacenada en el almac\u00E9n de claves *\n* NO se ha comprobado. Para comprobar dicha integridad, *\n* debe proporcionar la contrase\u00F1a del almac\u00E9n de claves. *"}, - {".The.integrity.of.the.information.stored.in.the.srckeystore.", - "* La integridad de la informaci\u00F3n almacenada en srckeystore*\n* NO se ha comprobado. Para comprobar dicha integridad, *\n* debe proporcionar la contrase\u00F1a de srckeystore. *"}, - - {"Certificate.reply.does.not.contain.public.key.for.alias.", - "La respuesta de certificado no contiene una clave p\u00FAblica para <{0}>"}, - {"Incomplete.certificate.chain.in.reply", - "Cadena de certificado incompleta en la respuesta"}, - {"Certificate.chain.in.reply.does.not.verify.", - "La cadena de certificado de la respuesta no verifica: "}, - {"Top.level.certificate.in.reply.", - "Certificado de nivel superior en la respuesta:\n"}, - {".is.not.trusted.", "... no es de confianza. "}, - {"Install.reply.anyway.no.", "\u00BFInstalar respuesta de todos modos? [no]: "}, - {"NO", "No"}, - {"Public.keys.in.reply.and.keystore.don.t.match", - "Las claves p\u00FAblicas en la respuesta y en el almac\u00E9n de claves no coinciden"}, - {"Certificate.reply.and.certificate.in.keystore.are.identical", - "La respuesta del certificado y el certificado en el almac\u00E9n de claves son id\u00E9nticos"}, - {"Failed.to.establish.chain.from.reply", - "No se ha podido definir una cadena a partir de la respuesta"}, - {"n", "n"}, - {"Wrong.answer.try.again", "Respuesta incorrecta, vuelva a intentarlo"}, - {"Secret.key.not.generated.alias.alias.already.exists", - "No se ha generado la clave secreta, el alias <{0}> ya existe"}, - {"Please.provide.keysize.for.secret.key.generation", - "Proporcione el valor de -keysize para la generaci\u00F3n de claves secretas"}, - - {"Extensions.", "Extensiones: "}, - {".Empty.value.", "(Valor vac\u00EDo)"}, - {"Extension.Request.", "Solicitud de Extensi\u00F3n:"}, - {"PKCS.10.Certificate.Request.Version.1.0.Subject.s.Public.Key.s.format.s.key.", - "Solicitud de Certificado PKCS #10 (Versi\u00F3n 1.0)\nAsunto: %s\nClave P\u00FAblica: %s formato %s clave\n"}, - {"Unknown.keyUsage.type.", "Tipo de uso de clave desconocido: "}, - {"Unknown.extendedkeyUsage.type.", "Tipo de uso de clave extendida desconocido: "}, - {"Unknown.AccessDescription.type.", "Tipo de descripci\u00F3n de acceso desconocido: "}, - {"Unrecognized.GeneralName.type.", "Tipo de nombre general no reconocido: "}, - {"This.extension.cannot.be.marked.as.critical.", - "Esta extensi\u00F3n no se puede marcar como cr\u00EDtica. "}, - {"Odd.number.of.hex.digits.found.", "Se ha encontrado un n\u00FAmero impar de d\u00EDgitos hexadecimales: "}, - {"Unknown.extension.type.", "Tipo de extensi\u00F3n desconocida: "}, - {"command.{0}.is.ambiguous.", "El comando {0} es ambiguo:"}, - - // policytool - {"Warning.A.public.key.for.alias.signers.i.does.not.exist.Make.sure.a.KeyStore.is.properly.configured.", - "Advertencia: no hay clave p\u00FAblica para el alias {0}. Aseg\u00FArese de que se ha configurado correctamente un almac\u00E9n de claves."}, - {"Warning.Class.not.found.class", "Advertencia: no se ha encontrado la clase: {0}"}, - {"Warning.Invalid.argument.s.for.constructor.arg", - "Advertencia: argumento(s) no v\u00E1lido(s) para el constructor: {0}"}, - {"Illegal.Principal.Type.type", "Tipo de principal no permitido: {0}"}, - {"Illegal.option.option", "Opci\u00F3n no permitida: {0}"}, - {"Usage.policytool.options.", "Sintaxis: policytool [opciones]"}, - {".file.file.policy.file.location", - " [-file ] ubicaci\u00F3n del archivo de normas"}, - {"New", "Nuevo"}, - {"Open", "Abrir"}, - {"Save", "Guardar"}, - {"Save.As", "Guardar como"}, - {"View.Warning.Log", "Ver Log de Advertencias"}, - {"Exit", "Salir"}, - {"Add.Policy.Entry", "Agregar Entrada de Pol\u00EDtica"}, - {"Edit.Policy.Entry", "Editar Entrada de Pol\u00EDtica"}, - {"Remove.Policy.Entry", "Eliminar Entrada de Pol\u00EDtica"}, - {"Edit", "Editar"}, - {"Retain", "Mantener"}, - - {"Warning.File.name.may.include.escaped.backslash.characters.It.is.not.necessary.to.escape.backslash.characters.the.tool.escapes", - "Advertencia: el nombre del archivo puede contener caracteres de barra invertida de escape. No es necesario utilizar barras invertidas de escape (la herramienta aplica caracteres de escape seg\u00FAn sea necesario al escribir el contenido de las pol\u00EDticas en el almac\u00E9n persistente).\n\nHaga clic en Mantener para conservar el nombre introducido o en Editar para modificarlo."}, - - {"Add.Public.Key.Alias", "Agregar Alias de Clave P\u00FAblico"}, - {"Remove.Public.Key.Alias", "Eliminar Alias de Clave P\u00FAblico"}, - {"File", "Archivo"}, - {"KeyStore", "Almac\u00E9n de Claves"}, - {"Policy.File.", "Archivo de Pol\u00EDtica:"}, - {"Could.not.open.policy.file.policyFile.e.toString.", - "No se ha podido abrir el archivo de pol\u00EDtica: {0}: {1}"}, - {"Policy.Tool", "Herramienta de Pol\u00EDticas"}, - {"Errors.have.occurred.while.opening.the.policy.configuration.View.the.Warning.Log.for.more.information.", - "Ha habido errores al abrir la configuraci\u00F3n de pol\u00EDticas. V\u00E9ase el log de advertencias para obtener m\u00E1s informaci\u00F3n."}, - {"Error", "Error"}, - {"OK", "Aceptar"}, - {"Status", "Estado"}, - {"Warning", "Advertencia"}, - {"Permission.", - "Permiso: "}, - {"Principal.Type.", "Tipo de Principal:"}, - {"Principal.Name.", "Nombre de Principal:"}, - {"Target.Name.", - "Nombre de Destino: "}, - {"Actions.", - "Acciones: "}, - {"OK.to.overwrite.existing.file.filename.", - "\u00BFSobrescribir el archivo existente {0}?"}, - {"Cancel", "Cancelar"}, - {"CodeBase.", "CodeBase:"}, - {"SignedBy.", "SignedBy:"}, - {"Add.Principal", "Agregar Principal"}, - {"Edit.Principal", "Editar Principal"}, - {"Remove.Principal", "Eliminar Principal"}, - {"Principals.", "Principales:"}, - {".Add.Permission", " Agregar Permiso"}, - {".Edit.Permission", " Editar Permiso"}, - {"Remove.Permission", "Eliminar Permiso"}, - {"Done", "Listo"}, - {"KeyStore.URL.", "URL de Almac\u00E9n de Claves:"}, - {"KeyStore.Type.", "Tipo de Almac\u00E9n de Claves:"}, - {"KeyStore.Provider.", "Proveedor de Almac\u00E9n de Claves:"}, - {"KeyStore.Password.URL.", "URL de Contrase\u00F1a de Almac\u00E9n de Claves:"}, - {"Principals", "Principales"}, - {".Edit.Principal.", " Editar Principal:"}, - {".Add.New.Principal.", " Agregar Nuevo Principal:"}, - {"Permissions", "Permisos"}, - {".Edit.Permission.", " Editar Permiso:"}, - {".Add.New.Permission.", " Agregar Permiso Nuevo:"}, - {"Signed.By.", "Firmado Por:"}, - {"Cannot.Specify.Principal.with.a.Wildcard.Class.without.a.Wildcard.Name", - "No se puede especificar un principal con una clase de comod\u00EDn sin un nombre de comod\u00EDn"}, - {"Cannot.Specify.Principal.without.a.Name", - "No se puede especificar el principal sin un nombre"}, - {"Permission.and.Target.Name.must.have.a.value", - "Permiso y Nombre de Destino deben tener un valor"}, - {"Remove.this.Policy.Entry.", "\u00BFEliminar esta entrada de pol\u00EDtica?"}, - {"Overwrite.File", "Sobrescribir Archivo"}, - {"Policy.successfully.written.to.filename", - "Pol\u00EDtica escrita correctamente en {0}"}, - {"null.filename", "nombre de archivo nulo"}, - {"Save.changes.", "\u00BFGuardar los cambios?"}, - {"Yes", "S\u00ED"}, - {"No", "No"}, - {"Policy.Entry", "Entrada de Pol\u00EDtica"}, - {"Save.Changes", "Guardar Cambios"}, - {"No.Policy.Entry.selected", "No se ha seleccionado la entrada de pol\u00EDtica"}, - {"Unable.to.open.KeyStore.ex.toString.", - "No se ha podido abrir el almac\u00E9n de claves: {0}"}, - {"No.principal.selected", "No se ha seleccionado un principal"}, - {"No.permission.selected", "No se ha seleccionado un permiso"}, - {"name", "nombre"}, - {"configuration.type", "tipo de configuraci\u00F3n"}, - {"environment.variable.name", "nombre de variable de entorno"}, - {"library.name", "nombre de la biblioteca"}, - {"package.name", "nombre del paquete"}, - {"policy.type", "tipo de pol\u00EDtica"}, - {"property.name", "nombre de la propiedad"}, - {"Principal.List", "Lista de Principales"}, - {"Permission.List", "Lista de Permisos"}, - {"Code.Base", "Base de C\u00F3digo"}, - {"KeyStore.U.R.L.", "URL de Almac\u00E9n de Claves:"}, - {"KeyStore.Password.U.R.L.", "URL de Contrase\u00F1a de Almac\u00E9n de Claves:"}, - - // javax.security.auth.PrivateCredentialPermission {"invalid.null.input.s.", "entradas nulas no v\u00E1lidas"}, {"actions.can.only.be.read.", "las acciones s\u00F3lo pueden 'leerse'"}, @@ -553,6 +58,7 @@ public class Resources_es extends java.util.ListResourceBundle { {"provided.null.OID.map", "mapa de OID proporcionado nulo"}, // javax.security.auth.Subject + {"NEWLINE", "\n"}, {"invalid.null.AccessControlContext.provided", "se ha proporcionado un AccessControlContext nulo no v\u00E1lido"}, {"invalid.null.action.provided", "se ha proporcionado una acci\u00F3n nula no v\u00E1lida"}, @@ -656,6 +162,7 @@ public class Resources_es extends java.util.ListResourceBundle { * * @return the contents of this ResourceBundle. */ + @Override public Object[][] getContents() { return contents; } diff --git a/jdk/src/share/classes/sun/security/util/Resources_fr.java b/jdk/src/share/classes/sun/security/util/Resources_fr.java index 385b61853dc..a82a2e49420 100644 --- a/jdk/src/share/classes/sun/security/util/Resources_fr.java +++ b/jdk/src/share/classes/sun/security/util/Resources_fr.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2000, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2000, 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 @@ -34,501 +34,6 @@ public class Resources_fr extends java.util.ListResourceBundle { private static final Object[][] contents = { - // shared (from jarsigner) - {"SPACE", " "}, - {"2SPACE", " "}, - {"6SPACE", " "}, - {"COMMA", ", "}, - // shared (from keytool) - {"NEWLINE", "\n"}, - {"STAR", - "*******************************************"}, - {"STARNN", - "*******************************************\n\n"}, - - // keytool: Help part -// "Option" should be translated. - {".OPTION.", " [Option]..."}, - {"Options.", "Options :"}, - {"Use.keytool.help.for.all.available.commands", - "Utiliser \"keytool -help\" pour toutes les commandes disponibles"}, - {"Key.and.Certificate.Management.Tool", - "Outil de gestion de certificats et de cl\u00E9s"}, - {"Commands.", "Commandes :"}, - {"Use.keytool.command.name.help.for.usage.of.command.name", - "Utiliser \"keytool -command_name -help\" pour la syntaxe de command_name"}, - // keytool: help: commands - {"Generates.a.certificate.request", - "G\u00E9n\u00E8re une demande de certificat"}, //-certreq - {"Changes.an.entry.s.alias", - "Modifie l'alias d'une entr\u00E9e"}, //-changealias - {"Deletes.an.entry", - "Supprime une entr\u00E9e"}, //-delete - {"Exports.certificate", - "Exporte le certificat"}, //-exportcert - {"Generates.a.key.pair", - "G\u00E9n\u00E8re une paire de cl\u00E9s"}, //-genkeypair -// translation of "secret" key should be different to "private" key. - {"Generates.a.secret.key", - "G\u00E9n\u00E8re une cl\u00E9 secr\u00E8te"}, //-genseckey - {"Generates.certificate.from.a.certificate.request", - "G\u00E9n\u00E8re le certificat \u00E0 partir d'une demande de certificat"}, //-gencert - {"Generates.CRL", "G\u00E9n\u00E8re la liste des certificats r\u00E9voqu\u00E9s (CRL)"}, //-gencrl - {"Imports.entries.from.a.JDK.1.1.x.style.identity.database", - "Importe les entr\u00E9es \u00E0 partir d'une base de donn\u00E9es d'identit\u00E9s de type JDK 1.1.x"}, //-identitydb - {"Imports.a.certificate.or.a.certificate.chain", - "Importe un certificat ou une cha\u00EEne de certificat"}, //-importcert - {"Imports.one.or.all.entries.from.another.keystore", - "Importe une entr\u00E9e ou la totalit\u00E9 des entr\u00E9es depuis un autre fichier de cl\u00E9s"}, //-importkeystore - {"Clones.a.key.entry", - "Clone une entr\u00E9e de cl\u00E9"}, //-keyclone - {"Changes.the.key.password.of.an.entry", - "Modifie le mot de passe de cl\u00E9 d'une entr\u00E9e"}, //-keypasswd - {"Lists.entries.in.a.keystore", - "R\u00E9pertorie les entr\u00E9es d'un fichier de cl\u00E9s"}, //-list - {"Prints.the.content.of.a.certificate", - "Imprime le contenu d'un certificat"}, //-printcert - {"Prints.the.content.of.a.certificate.request", - "Imprime le contenu d'une demande de certificat"}, //-printcertreq - {"Prints.the.content.of.a.CRL.file", - "Imprime le contenu d'un fichier de liste des certificats r\u00E9voqu\u00E9s (CRL)"}, //-printcrl - {"Generates.a.self.signed.certificate", - "G\u00E9n\u00E8re un certificat auto-sign\u00E9"}, //-selfcert - {"Changes.the.store.password.of.a.keystore", - "Modifie le mot de passe de banque d'un fichier de cl\u00E9s"}, //-storepasswd - // keytool: help: options - {"alias.name.of.the.entry.to.process", - "nom d'alias de l'entr\u00E9e \u00E0 traiter"}, //-alias - {"destination.alias", - "alias de destination"}, //-destalias - {"destination.key.password", - "mot de passe de la cl\u00E9 de destination"}, //-destkeypass - {"destination.keystore.name", - "nom du fichier de cl\u00E9s de destination"}, //-destkeystore - {"destination.keystore.password.protected", - "mot de passe du fichier de cl\u00E9s de destination prot\u00E9g\u00E9"}, //-destprotected - {"destination.keystore.provider.name", - "nom du fournisseur du fichier de cl\u00E9s de destination"}, //-destprovidername - {"destination.keystore.password", - "mot de passe du fichier de cl\u00E9s de destination"}, //-deststorepass - {"destination.keystore.type", - "type du fichier de cl\u00E9s de destination"}, //-deststoretype - {"distinguished.name", - "nom distinctif"}, //-dname - {"X.509.extension", - "extension X.509"}, //-ext - {"output.file.name", - "nom du fichier de sortie"}, //-file and -outfile - {"input.file.name", - "nom du fichier d'entr\u00E9e"}, //-file and -infile - {"key.algorithm.name", - "nom de l'algorithme de cl\u00E9"}, //-keyalg - {"key.password", - "mot de passe de la cl\u00E9"}, //-keypass - {"key.bit.size", - "taille en bits de la cl\u00E9"}, //-keysize - {"keystore.name", - "nom du fichier de cl\u00E9s"}, //-keystore - {"new.password", - "nouveau mot de passe"}, //-new - {"do.not.prompt", - "ne pas inviter"}, //-noprompt - {"password.through.protected.mechanism", - "mot de passe via m\u00E9canisme prot\u00E9g\u00E9"}, //-protected - {"provider.argument", - "argument du fournisseur"}, //-providerarg - {"provider.class.name", - "nom de la classe de fournisseur"}, //-providerclass - {"provider.name", - "nom du fournisseur"}, //-providername - {"provider.classpath", - "variable d'environnement CLASSPATH du fournisseur"}, //-providerpath - {"output.in.RFC.style", - "sortie au style RFC"}, //-rfc - {"signature.algorithm.name", - "nom de l'algorithme de signature"}, //-sigalg - {"source.alias", - "alias source"}, //-srcalias - {"source.key.password", - "mot de passe de la cl\u00E9 source"}, //-srckeypass - {"source.keystore.name", - "nom du fichier de cl\u00E9s source"}, //-srckeystore - {"source.keystore.password.protected", - "mot de passe du fichier de cl\u00E9s source prot\u00E9g\u00E9"}, //-srcprotected - {"source.keystore.provider.name", - "nom du fournisseur du fichier de cl\u00E9s source"}, //-srcprovidername - {"source.keystore.password", - "mot de passe du fichier de cl\u00E9s source"}, //-srcstorepass - {"source.keystore.type", - "type du fichier de cl\u00E9s source"}, //-srcstoretype - {"SSL.server.host.and.port", - "Port et h\u00F4te du serveur SSL"}, //-sslserver - {"signed.jar.file", - "fichier JAR sign\u00E9"}, //=jarfile - {"certificate.validity.start.date.time", - "date/heure de d\u00E9but de validit\u00E9 du certificat"}, //-startdate - {"keystore.password", - "mot de passe du fichier de cl\u00E9s"}, //-storepass - {"keystore.type", - "type du fichier de cl\u00E9s"}, //-storetype - {"trust.certificates.from.cacerts", - "certificats s\u00E9curis\u00E9s issus de certificats CA"}, //-trustcacerts - {"verbose.output", - "sortie en mode verbose"}, //-v - {"validity.number.of.days", - "nombre de jours de validit\u00E9"}, //-validity - {"Serial.ID.of.cert.to.revoke", - "ID de s\u00E9rie du certificat \u00E0 r\u00E9voquer"}, //-id - // keytool: Running part - {"keytool.error.", "erreur keytool : "}, - {"Illegal.option.", "Option non admise : "}, - {"Illegal.value.", "Valeur non admise : "}, - {"Unknown.password.type.", "Type de mot de passe inconnu : "}, - {"Cannot.find.environment.variable.", - "Variable d'environnement introuvable : "}, - {"Cannot.find.file.", "Fichier introuvable : "}, - {"Command.option.flag.needs.an.argument.", "L''option de commande {0} requiert un argument."}, - {"Warning.Different.store.and.key.passwords.not.supported.for.PKCS12.KeyStores.Ignoring.user.specified.command.value.", - "Avertissement\u00A0: les mots de passe de cl\u00E9 et de banque distincts ne sont pas pris en charge pour les fichiers de cl\u00E9s d''acc\u00E8s PKCS12. La valeur {0} sp\u00E9cifi\u00E9e par l''utilisateur est ignor\u00E9e."}, - {".keystore.must.be.NONE.if.storetype.is.{0}", - "-keystore doit \u00EAtre d\u00E9fini sur NONE si -storetype est {0}"}, - {"Too.many.retries.program.terminated", - "Trop de tentatives, fin du programme"}, - {".storepasswd.and.keypasswd.commands.not.supported.if.storetype.is.{0}", - "Les commandes -storepasswd et -keypasswd ne sont pas prises en charge si -storetype est d\u00E9fini sur {0}"}, - {".keypasswd.commands.not.supported.if.storetype.is.PKCS12", - "Les commandes -keypasswd ne sont pas prises en charge si -storetype est d\u00E9fini sur PKCS12"}, - {".keypass.and.new.can.not.be.specified.if.storetype.is.{0}", - "Les commandes -keypass et -new ne peuvent pas \u00EAtre sp\u00E9cifi\u00E9es si -storetype est d\u00E9fini sur {0}"}, - {"if.protected.is.specified.then.storepass.keypass.and.new.must.not.be.specified", - "si -protected est sp\u00E9cifi\u00E9, -storepass, -keypass et -new ne doivent pas \u00EAtre indiqu\u00E9s"}, - {"if.srcprotected.is.specified.then.srcstorepass.and.srckeypass.must.not.be.specified", - "Si -srcprotected est indiqu\u00E9, les commandes -srcstorepass et -srckeypass ne doivent pas \u00EAtre sp\u00E9cifi\u00E9es"}, - {"if.keystore.is.not.password.protected.then.storepass.keypass.and.new.must.not.be.specified", - "Si le fichier de cl\u00E9s n'est pas prot\u00E9g\u00E9 par un mot de passe, les commandes -storepass, -keypass et -new ne doivent pas \u00EAtre sp\u00E9cifi\u00E9es"}, - {"if.source.keystore.is.not.password.protected.then.srcstorepass.and.srckeypass.must.not.be.specified", - "Si le fichier de cl\u00E9s source n'est pas prot\u00E9g\u00E9 par un mot de passe, les commandes -srcstorepass et -srckeypass ne doivent pas \u00EAtre sp\u00E9cifi\u00E9es"}, - {"Illegal.startdate.value", "Valeur de date de d\u00E9but non admise"}, - {"Validity.must.be.greater.than.zero", - "La validit\u00E9 doit \u00EAtre sup\u00E9rieure \u00E0 z\u00E9ro"}, - {"provName.not.a.provider", "{0} n''est pas un fournisseur"}, - {"Usage.error.no.command.provided", "Erreur de syntaxe\u00A0: aucune commande fournie"}, - {"Source.keystore.file.exists.but.is.empty.", "Le fichier de cl\u00E9s source existe mais il est vide : "}, - {"Please.specify.srckeystore", "Indiquez -srckeystore"}, - {"Must.not.specify.both.v.and.rfc.with.list.command", - "-v et -rfc ne doivent pas \u00EAtre sp\u00E9cifi\u00E9s avec la commande 'list'"}, - {"Key.password.must.be.at.least.6.characters", - "Un mot de passe de cl\u00E9 doit comporter au moins 6 caract\u00E8res"}, - {"New.password.must.be.at.least.6.characters", - "Le nouveau mot de passe doit comporter au moins 6 caract\u00E8res"}, - {"Keystore.file.exists.but.is.empty.", - "Fichier de cl\u00E9s existant mais vide : "}, - {"Keystore.file.does.not.exist.", - "Le fichier de cl\u00E9s n'existe pas : "}, - {"Must.specify.destination.alias", "L'alias de destination doit \u00EAtre sp\u00E9cifi\u00E9"}, - {"Must.specify.alias", "L'alias doit \u00EAtre sp\u00E9cifi\u00E9"}, - {"Keystore.password.must.be.at.least.6.characters", - "Un mot de passe de fichier de cl\u00E9s doit comporter au moins 6 caract\u00E8res"}, - {"Enter.keystore.password.", "Entrez le mot de passe du fichier de cl\u00E9s : "}, - {"Enter.source.keystore.password.", "Entrez le mot de passe du fichier de cl\u00E9s source\u00A0: "}, - {"Enter.destination.keystore.password.", "Entrez le mot de passe du fichier de cl\u00E9s de destination\u00A0: "}, - {"Keystore.password.is.too.short.must.be.at.least.6.characters", - "Le mot de passe du fichier de cl\u00E9s est trop court : il doit comporter au moins 6 caract\u00E8res"}, - {"Unknown.Entry.Type", "Type d'entr\u00E9e inconnu"}, - {"Too.many.failures.Alias.not.changed", "Trop d'erreurs. Alias non modifi\u00E9"}, - {"Entry.for.alias.alias.successfully.imported.", - "L''entr\u00E9e de l''alias {0} a \u00E9t\u00E9 import\u00E9e."}, - {"Entry.for.alias.alias.not.imported.", "L''entr\u00E9e de l''alias {0} n''a pas \u00E9t\u00E9 import\u00E9e."}, - {"Problem.importing.entry.for.alias.alias.exception.Entry.for.alias.alias.not.imported.", - "Probl\u00E8me lors de l''import de l''entr\u00E9e de l''alias {0}\u00A0: {1}.\nL''entr\u00E9e de l''alias {0} n''a pas \u00E9t\u00E9 import\u00E9e."}, - {"Import.command.completed.ok.entries.successfully.imported.fail.entries.failed.or.cancelled", - "Commande d''import ex\u00E9cut\u00E9e\u00A0: {0} entr\u00E9es import\u00E9es, \u00E9chec ou annulation de {1} entr\u00E9es"}, - {"Warning.Overwriting.existing.alias.alias.in.destination.keystore", - "Avertissement\u00A0: l''alias {0} existant sera remplac\u00E9 dans le fichier de cl\u00E9s d''acc\u00E8s de destination"}, - {"Existing.entry.alias.alias.exists.overwrite.no.", - "L''alias d''entr\u00E9e {0} existe d\u00E9j\u00E0. Voulez-vous le remplacer ? [non]\u00A0: "}, - {"Too.many.failures.try.later", "Trop d'erreurs. R\u00E9essayez plus tard"}, - {"Certification.request.stored.in.file.filename.", - "Demande de certification stock\u00E9e dans le fichier <{0}>"}, - {"Submit.this.to.your.CA", "Soumettre \u00E0 votre CA"}, - {"if.alias.not.specified.destalias.srckeypass.and.destkeypass.must.not.be.specified", - "si l'alias n'est pas sp\u00E9cifi\u00E9, destalias, srckeypass et destkeypass ne doivent pas \u00EAtre sp\u00E9cifi\u00E9s"}, - {"Certificate.stored.in.file.filename.", - "Certificat stock\u00E9 dans le fichier <{0}>"}, - {"Certificate.reply.was.installed.in.keystore", - "R\u00E9ponse de certificat install\u00E9e dans le fichier de cl\u00E9s"}, - {"Certificate.reply.was.not.installed.in.keystore", - "R\u00E9ponse de certificat non install\u00E9e dans le fichier de cl\u00E9s"}, - {"Certificate.was.added.to.keystore", - "Certificat ajout\u00E9 au fichier de cl\u00E9s"}, - {"Certificate.was.not.added.to.keystore", - "Certificat non ajout\u00E9 au fichier de cl\u00E9s"}, - {".Storing.ksfname.", "[Stockage de {0}]"}, - {"alias.has.no.public.key.certificate.", - "{0} ne poss\u00E8de pas de cl\u00E9 publique (certificat)"}, - {"Cannot.derive.signature.algorithm", - "Impossible de d\u00E9duire l'algorithme de signature"}, - {"Alias.alias.does.not.exist", - "L''alias <{0}> n''existe pas"}, - {"Alias.alias.has.no.certificate", - "L''alias <{0}> ne poss\u00E8de pas de certificat"}, - {"Key.pair.not.generated.alias.alias.already.exists", - "Paire de cl\u00E9s non g\u00E9n\u00E9r\u00E9e, l''alias <{0}> existe d\u00E9j\u00E0"}, - {"Generating.keysize.bit.keyAlgName.key.pair.and.self.signed.certificate.sigAlgName.with.a.validity.of.validality.days.for", - "G\u00E9n\u00E9ration d''une paire de cl\u00E9s {1} de {0} bits et d''un certificat auto-sign\u00E9 ({2}) d''une validit\u00E9 de {3} jours\n\tpour : {4}"}, - {"Enter.key.password.for.alias.", "Entrez le mot de passe de la cl\u00E9 pour <{0}>"}, - {".RETURN.if.same.as.keystore.password.", - "\t(appuyez sur Entr\u00E9e s'il s'agit du mot de passe du fichier de cl\u00E9s) : "}, - {"Key.password.is.too.short.must.be.at.least.6.characters", - "Le mot de passe de la cl\u00E9 est trop court : il doit comporter au moins 6 caract\u00E8res"}, - {"Too.many.failures.key.not.added.to.keystore", - "Trop d'erreurs. Cl\u00E9 non ajout\u00E9e au fichier de cl\u00E9s"}, - {"Destination.alias.dest.already.exists", - "L''alias de la destination <{0}> existe d\u00E9j\u00E0"}, - {"Password.is.too.short.must.be.at.least.6.characters", - "Le mot de passe est trop court : il doit comporter au moins 6 caract\u00E8res"}, - {"Too.many.failures.Key.entry.not.cloned", - "Trop d'erreurs. Entr\u00E9e de cl\u00E9 non clon\u00E9e"}, - {"key.password.for.alias.", "mot de passe de cl\u00E9 pour <{0}>"}, - {"Keystore.entry.for.id.getName.already.exists", - "L''entr\u00E9e de fichier de cl\u00E9s d''acc\u00E8s pour <{0}> existe d\u00E9j\u00E0"}, - {"Creating.keystore.entry.for.id.getName.", - "Cr\u00E9ation d''une entr\u00E9e de fichier de cl\u00E9s d''acc\u00E8s pour <{0}>..."}, - {"No.entries.from.identity.database.added", - "Aucune entr\u00E9e ajout\u00E9e \u00E0 partir de la base de donn\u00E9es d'identit\u00E9s"}, - {"Alias.name.alias", "Nom d''alias : {0}"}, - {"Creation.date.keyStore.getCreationDate.alias.", - "Date de cr\u00E9ation : {0,date}"}, - {"alias.keyStore.getCreationDate.alias.", - "{0}, {1,date}, "}, - {"alias.", "{0}, "}, - {"Entry.type.type.", "Type d''entr\u00E9e\u00A0: {0}"}, - {"Certificate.chain.length.", "Longueur de cha\u00EEne du certificat : "}, - {"Certificate.i.1.", "Certificat[{0,number,integer}]:"}, - {"Certificate.fingerprint.SHA1.", "Empreinte du certificat (SHA1) : "}, - {"Keystore.type.", "Type de fichier de cl\u00E9s : "}, - {"Keystore.provider.", "Fournisseur de fichier de cl\u00E9s : "}, - {"Your.keystore.contains.keyStore.size.entry", - "Votre fichier de cl\u00E9s d''acc\u00E8s contient {0,number,integer} entr\u00E9e"}, - {"Your.keystore.contains.keyStore.size.entries", - "Votre fichier de cl\u00E9s d''acc\u00E8s contient {0,number,integer} entr\u00E9es"}, - {"Failed.to.parse.input", "L'analyse de l'entr\u00E9e a \u00E9chou\u00E9"}, - {"Empty.input", "Entr\u00E9e vide"}, - {"Not.X.509.certificate", "Pas un certificat X.509"}, - {"alias.has.no.public.key", "{0} ne poss\u00E8de pas de cl\u00E9 publique"}, - {"alias.has.no.X.509.certificate", "{0} ne poss\u00E8de pas de certificat X.509"}, - {"New.certificate.self.signed.", "Nouveau certificat (auto-sign\u00E9) :"}, - {"Reply.has.no.certificates", "La r\u00E9ponse n'a pas de certificat"}, - {"Certificate.not.imported.alias.alias.already.exists", - "Certificat non import\u00E9, l''alias <{0}> existe d\u00E9j\u00E0"}, - {"Input.not.an.X.509.certificate", "L'entr\u00E9e n'est pas un certificat X.509"}, - {"Certificate.already.exists.in.keystore.under.alias.trustalias.", - "Le certificat existe d\u00E9j\u00E0 dans le fichier de cl\u00E9s d''acc\u00E8s sous l''alias <{0}>"}, - {"Do.you.still.want.to.add.it.no.", - "Voulez-vous toujours l'ajouter ? [non] : "}, - {"Certificate.already.exists.in.system.wide.CA.keystore.under.alias.trustalias.", - "Le certificat existe d\u00E9j\u00E0 dans le fichier de cl\u00E9s d''acc\u00E8s CA syst\u00E8me sous l''alias <{0}>"}, - {"Do.you.still.want.to.add.it.to.your.own.keystore.no.", - "Voulez-vous toujours l'ajouter \u00E0 votre fichier de cl\u00E9s ? [non] : "}, - {"Trust.this.certificate.no.", "Faire confiance \u00E0 ce certificat ? [non] : "}, - {"YES", "Oui"}, - {"New.prompt.", "Nouveau {0} : "}, - {"Passwords.must.differ", "Les mots de passe doivent diff\u00E9rer"}, - {"Re.enter.new.prompt.", "Indiquez encore le nouveau {0} : "}, - {"Re.enter.new.password.", "Ressaisissez le nouveau mot de passe : "}, - {"They.don.t.match.Try.again", "Ils sont diff\u00E9rents. R\u00E9essayez."}, - {"Enter.prompt.alias.name.", "Indiquez le nom d''alias {0} : "}, - {"Enter.new.alias.name.RETURN.to.cancel.import.for.this.entry.", - "Saisissez le nom du nouvel alias\t(ou appuyez sur Entr\u00E9e pour annuler l'import de cette entr\u00E9e)\u00A0: "}, - {"Enter.alias.name.", "Indiquez le nom d'alias : "}, - {".RETURN.if.same.as.for.otherAlias.", - "\t(appuyez sur Entr\u00E9e si le r\u00E9sultat est identique \u00E0 <{0}>)"}, - {".PATTERN.printX509Cert", - "Propri\u00E9taire : {0}\nEmetteur : {1}\nNum\u00E9ro de s\u00E9rie : {2}\nValide du : {3} au : {4}\nEmpreintes du certificat :\n\t MD5: {5}\n\t SHA1 : {6}\n\t SHA256 : {7}\n\t Nom de l''algorithme de signature : {8}\n\t Version : {9}"}, - {"What.is.your.first.and.last.name.", - "Quels sont vos nom et pr\u00E9nom ?"}, - {"What.is.the.name.of.your.organizational.unit.", - "Quel est le nom de votre unit\u00E9 organisationnelle ?"}, - {"What.is.the.name.of.your.organization.", - "Quel est le nom de votre entreprise ?"}, - {"What.is.the.name.of.your.City.or.Locality.", - "Quel est le nom de votre ville de r\u00E9sidence ?"}, - {"What.is.the.name.of.your.State.or.Province.", - "Quel est le nom de votre \u00E9tat ou province ?"}, - {"What.is.the.two.letter.country.code.for.this.unit.", - "Quel est le code pays \u00E0 deux lettres pour cette unit\u00E9 ?"}, - {"Is.name.correct.", "Est-ce {0} ?"}, - {"no", "non"}, - {"yes", "oui"}, - {"y", "o"}, - {".defaultValue.", " [{0}]: "}, - {"Alias.alias.has.no.key", - "L''alias <{0}> n''est associ\u00E9 \u00E0 aucune cl\u00E9"}, - {"Alias.alias.references.an.entry.type.that.is.not.a.private.key.entry.The.keyclone.command.only.supports.cloning.of.private.key", - "L''entr\u00E9e \u00E0 laquelle l''alias <{0}> fait r\u00E9f\u00E9rence n''est pas une entr\u00E9e de type cl\u00E9 priv\u00E9e. La commande -keyclone prend uniquement en charge le clonage des cl\u00E9s priv\u00E9es"}, - - {".WARNING.WARNING.WARNING.", - "***************** Avertissement Avertissement Avertissement *****************"}, - {"Signer.d.", "Signataire n\u00B0%d :"}, - {"Timestamp.", "Horodatage :"}, - {"Signature.", "Signature :"}, - {"CRLs.", "Listes des certificats r\u00E9voqu\u00E9s (CRL) :"}, - {"Certificate.owner.", "Propri\u00E9taire du certificat : "}, - {"Not.a.signed.jar.file", "Fichier JAR non sign\u00E9"}, - {"No.certificate.from.the.SSL.server", - "Aucun certificat du serveur SSL"}, - - {".The.integrity.of.the.information.stored.in.your.keystore.", - "* L'int\u00E9grit\u00E9 des informations stock\u00E9es dans votre fichier de cl\u00E9s *\n* n'a PAS \u00E9t\u00E9 v\u00E9rifi\u00E9e. Pour cela, *\n* vous devez fournir le mot de passe de votre fichier de cl\u00E9s. *"}, - {".The.integrity.of.the.information.stored.in.the.srckeystore.", - "* L'int\u00E9grit\u00E9 des informations stock\u00E9es dans le fichier de cl\u00E9s source *\n* n'a PAS \u00E9t\u00E9 v\u00E9rifi\u00E9e. Pour cela, *\n* vous devez fournir le mot de passe de votre fichier de cl\u00E9s source. *"}, - - {"Certificate.reply.does.not.contain.public.key.for.alias.", - "La r\u00E9ponse au certificat ne contient pas de cl\u00E9 publique pour <{0}>"}, - {"Incomplete.certificate.chain.in.reply", - "Cha\u00EEne de certificat incompl\u00E8te dans la r\u00E9ponse"}, - {"Certificate.chain.in.reply.does.not.verify.", - "La cha\u00EEne de certificat de la r\u00E9ponse ne concorde pas : "}, - {"Top.level.certificate.in.reply.", - "Certificat de niveau sup\u00E9rieur dans la r\u00E9ponse :\n"}, - {".is.not.trusted.", "... non s\u00E9curis\u00E9. "}, - {"Install.reply.anyway.no.", "Installer la r\u00E9ponse quand m\u00EAme ? [non] : "}, - {"NO", "Non"}, - {"Public.keys.in.reply.and.keystore.don.t.match", - "Les cl\u00E9s publiques de la r\u00E9ponse et du fichier de cl\u00E9s ne concordent pas"}, - {"Certificate.reply.and.certificate.in.keystore.are.identical", - "La r\u00E9ponse au certificat et le certificat du fichier de cl\u00E9s sont identiques"}, - {"Failed.to.establish.chain.from.reply", - "Impossible de cr\u00E9er une cha\u00EEne \u00E0 partir de la r\u00E9ponse"}, - {"n", "n"}, - {"Wrong.answer.try.again", "R\u00E9ponse incorrecte, recommencez"}, - {"Secret.key.not.generated.alias.alias.already.exists", - "Cl\u00E9 secr\u00E8te non g\u00E9n\u00E9r\u00E9e, l''alias <{0}> existe d\u00E9j\u00E0"}, - {"Please.provide.keysize.for.secret.key.generation", - "Indiquez -keysize pour la g\u00E9n\u00E9ration de la cl\u00E9 secr\u00E8te"}, - - {"Extensions.", "Extensions\u00A0: "}, - {".Empty.value.", "(Valeur vide)"}, - {"Extension.Request.", "Demande d'extension :"}, - {"PKCS.10.Certificate.Request.Version.1.0.Subject.s.Public.Key.s.format.s.key.", - "Demande de certificat PKCS #10 (version 1.0)\nSujet : %s\nCl\u00E9 publique : format %s pour la cl\u00E9 %s\n"}, - {"Unknown.keyUsage.type.", "Type keyUsage inconnu : "}, - {"Unknown.extendedkeyUsage.type.", "Type extendedkeyUsage inconnu : "}, - {"Unknown.AccessDescription.type.", "Type AccessDescription inconnu : "}, - {"Unrecognized.GeneralName.type.", "Type GeneralName non reconnu : "}, - {"This.extension.cannot.be.marked.as.critical.", - "Cette extension ne peut pas \u00EAtre marqu\u00E9e comme critique. "}, - {"Odd.number.of.hex.digits.found.", "Nombre impair de chiffres hexad\u00E9cimaux trouv\u00E9 : "}, - {"Unknown.extension.type.", "Type d'extension inconnu : "}, - {"command.{0}.is.ambiguous.", "commande {0} ambigu\u00EB :"}, - - // policytool - {"Warning.A.public.key.for.alias.signers.i.does.not.exist.Make.sure.a.KeyStore.is.properly.configured.", - "Avertissement\u00A0: il n''existe pas de cl\u00E9 publique pour l''alias {0}. V\u00E9rifiez que le fichier de cl\u00E9s d''acc\u00E8s est correctement configur\u00E9."}, - {"Warning.Class.not.found.class", "Avertissement : classe introuvable - {0}"}, - {"Warning.Invalid.argument.s.for.constructor.arg", - "Avertissement\u00A0: arguments non valides pour le constructeur\u00A0- {0}"}, - {"Illegal.Principal.Type.type", "Type de principal non admis : {0}"}, - {"Illegal.option.option", "Option non admise : {0}"}, - {"Usage.policytool.options.", "Syntaxe : policytool [options]"}, - {".file.file.policy.file.location", - " [-file ] emplacement du fichier de r\u00E8gles"}, - {"New", "Nouveau"}, - {"Open", "Ouvrir"}, - {"Save", "Enregistrer"}, - {"Save.As", "Enregistrer sous"}, - {"View.Warning.Log", "Afficher le journal des avertissements"}, - {"Exit", "Quitter"}, - {"Add.Policy.Entry", "Ajouter une r\u00E8gle"}, - {"Edit.Policy.Entry", "Modifier une r\u00E8gle"}, - {"Remove.Policy.Entry", "Enlever une r\u00E8gle"}, - {"Edit", "Modifier"}, - {"Retain", "Conserver"}, - - {"Warning.File.name.may.include.escaped.backslash.characters.It.is.not.necessary.to.escape.backslash.characters.the.tool.escapes", - "Avertissement : il se peut que le nom de fichier contienne des barres obliques inverses avec caract\u00E8re d'\u00E9chappement. Il n'est pas n\u00E9cessaire d'ajouter un caract\u00E8re d'\u00E9chappement aux barres obliques inverses. L'outil proc\u00E8de \u00E0 l'\u00E9chappement si n\u00E9cessaire lorsqu'il \u00E9crit le contenu des r\u00E8gles dans la zone de stockage persistant).\n\nCliquez sur Conserver pour garder le nom saisi ou sur Modifier pour le remplacer."}, - - {"Add.Public.Key.Alias", "Ajouter un alias de cl\u00E9 publique"}, - {"Remove.Public.Key.Alias", "Enlever un alias de cl\u00E9 publique"}, - {"File", "Fichier"}, - {"KeyStore", "Fichier de cl\u00E9s"}, - {"Policy.File.", "Fichier de r\u00E8gles :"}, - {"Could.not.open.policy.file.policyFile.e.toString.", - "Impossible d''ouvrir le fichier de r\u00E8gles\u00A0: {0}: {1}"}, - {"Policy.Tool", "Policy Tool"}, - {"Errors.have.occurred.while.opening.the.policy.configuration.View.the.Warning.Log.for.more.information.", - "Des erreurs se sont produites \u00E0 l'ouverture de la configuration de r\u00E8gles. Pour plus d'informations, consultez le journal des avertissements."}, - {"Error", "Erreur"}, - {"OK", "OK"}, - {"Status", "Statut"}, - {"Warning", "Avertissement"}, - {"Permission.", - "Droit : "}, - {"Principal.Type.", "Type de principal :"}, - {"Principal.Name.", "Nom de principal :"}, - {"Target.Name.", - "Nom de cible : "}, - {"Actions.", - "Actions : "}, - {"OK.to.overwrite.existing.file.filename.", - "Remplacer le fichier existant {0} ?"}, - {"Cancel", "Annuler"}, - {"CodeBase.", "Base de code :"}, - {"SignedBy.", "Sign\u00E9 par :"}, - {"Add.Principal", "Ajouter un principal"}, - {"Edit.Principal", "Modifier un principal"}, - {"Remove.Principal", "Enlever un principal"}, - {"Principals.", "Principaux :"}, - {".Add.Permission", " Ajouter un droit"}, - {".Edit.Permission", " Modifier un droit"}, - {"Remove.Permission", "Enlever un droit"}, - {"Done", "Termin\u00E9"}, - {"KeyStore.URL.", "URL du fichier de cl\u00E9s :"}, - {"KeyStore.Type.", "Type du fichier de cl\u00E9s :"}, - {"KeyStore.Provider.", "Fournisseur du fichier de cl\u00E9s :"}, - {"KeyStore.Password.URL.", "URL du mot de passe du fichier de cl\u00E9s :"}, - {"Principals", "Principaux"}, - {".Edit.Principal.", " Modifier un principal :"}, - {".Add.New.Principal.", " Ajouter un principal :"}, - {"Permissions", "Droits"}, - {".Edit.Permission.", " Modifier un droit :"}, - {".Add.New.Permission.", " Ajouter un droit :"}, - {"Signed.By.", "Sign\u00E9 par :"}, - {"Cannot.Specify.Principal.with.a.Wildcard.Class.without.a.Wildcard.Name", - "Impossible de sp\u00E9cifier un principal avec une classe g\u00E9n\u00E9rique sans nom g\u00E9n\u00E9rique"}, - {"Cannot.Specify.Principal.without.a.Name", - "Impossible de sp\u00E9cifier un principal sans nom"}, - {"Permission.and.Target.Name.must.have.a.value", - "Le droit et le nom de cible doivent avoir une valeur"}, - {"Remove.this.Policy.Entry.", "Enlever cette r\u00E8gle ?"}, - {"Overwrite.File", "Remplacer le fichier"}, - {"Policy.successfully.written.to.filename", - "R\u00E8gle \u00E9crite dans {0}"}, - {"null.filename", "nom de fichier NULL"}, - {"Save.changes.", "Enregistrer les modifications ?"}, - {"Yes", "Oui"}, - {"No", "Non"}, - {"Policy.Entry", "R\u00E8gle"}, - {"Save.Changes", "Enregistrer les modifications"}, - {"No.Policy.Entry.selected", "Aucune r\u00E8gle s\u00E9lectionn\u00E9e"}, - {"Unable.to.open.KeyStore.ex.toString.", - "Impossible d''ouvrir le fichier de cl\u00E9s d''acc\u00E8s : {0}"}, - {"No.principal.selected", "Aucun principal s\u00E9lectionn\u00E9"}, - {"No.permission.selected", "Aucun droit s\u00E9lectionn\u00E9"}, - {"name", "nom"}, - {"configuration.type", "type de configuration"}, - {"environment.variable.name", "Nom de variable d'environnement"}, - {"library.name", "nom de biblioth\u00E8que"}, - {"package.name", "nom de package"}, - {"policy.type", "type de r\u00E8gle"}, - {"property.name", "nom de propri\u00E9t\u00E9"}, - {"Principal.List", "Liste de principaux"}, - {"Permission.List", "Liste de droits"}, - {"Code.Base", "Base de code"}, - {"KeyStore.U.R.L.", "URL du fichier de cl\u00E9s :"}, - {"KeyStore.Password.U.R.L.", "URL du mot de passe du fichier de cl\u00E9s :"}, - - // javax.security.auth.PrivateCredentialPermission {"invalid.null.input.s.", "entr\u00E9es NULL non valides"}, {"actions.can.only.be.read.", "les actions sont accessibles en lecture uniquement"}, @@ -553,6 +58,7 @@ public class Resources_fr extends java.util.ListResourceBundle { {"provided.null.OID.map", "mappage OID NULL fourni"}, // javax.security.auth.Subject + {"NEWLINE", "\n"}, {"invalid.null.AccessControlContext.provided", "AccessControlContext NULL fourni non valide"}, {"invalid.null.action.provided", "action NULL fournie non valide"}, @@ -656,6 +162,7 @@ public class Resources_fr extends java.util.ListResourceBundle { * * @return the contents of this ResourceBundle. */ + @Override public Object[][] getContents() { return contents; } diff --git a/jdk/src/share/classes/sun/security/util/Resources_it.java b/jdk/src/share/classes/sun/security/util/Resources_it.java index 3d3abf09de8..e942f64463c 100644 --- a/jdk/src/share/classes/sun/security/util/Resources_it.java +++ b/jdk/src/share/classes/sun/security/util/Resources_it.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2000, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2000, 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 @@ -34,501 +34,6 @@ public class Resources_it extends java.util.ListResourceBundle { private static final Object[][] contents = { - // shared (from jarsigner) - {"SPACE", " "}, - {"2SPACE", " "}, - {"6SPACE", " "}, - {"COMMA", ", "}, - // shared (from keytool) - {"NEWLINE", "\n"}, - {"STAR", - "*******************************************"}, - {"STARNN", - "*******************************************\n\n"}, - - // keytool: Help part -// "Option" should be translated. - {".OPTION.", " [Opzione]..."}, - {"Options.", "Opzioni:"}, - {"Use.keytool.help.for.all.available.commands", - "Utilizzare \"keytool -help\" per visualizzare tutti i comandi disponibili"}, - {"Key.and.Certificate.Management.Tool", - "Strumento di gestione di chiavi e certificati"}, - {"Commands.", "Comandi:"}, - {"Use.keytool.command.name.help.for.usage.of.command.name", - "Utilizzare \"keytool -command_name -help\" per informazioni sull'uso di command_name"}, - // keytool: help: commands - {"Generates.a.certificate.request", - "Genera una richiesta di certificato"}, //-certreq - {"Changes.an.entry.s.alias", - "Modifica l'alias di una voce"}, //-changealias - {"Deletes.an.entry", - "Elimina una voce"}, //-delete - {"Exports.certificate", - "Esporta il certificato"}, //-exportcert - {"Generates.a.key.pair", - "Genera una coppia di chiavi"}, //-genkeypair -// translation of "secret" key should be different to "private" key. - {"Generates.a.secret.key", - "Genera una chiave segreta"}, //-genseckey - {"Generates.certificate.from.a.certificate.request", - "Genera un certificato da una richiesta di certificato"}, //-gencert - {"Generates.CRL", "Genera CRL"}, //-gencrl - {"Imports.entries.from.a.JDK.1.1.x.style.identity.database", - "Importa le voci da un database delle identit\u00E0 di tipo JDK 1.1.x"}, //-identitydb - {"Imports.a.certificate.or.a.certificate.chain", - "Importa un certificato o una catena di certificati"}, //-importcert - {"Imports.one.or.all.entries.from.another.keystore", - "Importa una o tutte le voci da un altro keystore"}, //-importkeystore - {"Clones.a.key.entry", - "Duplica una voce di chiave"}, //-keyclone - {"Changes.the.key.password.of.an.entry", - "Modifica la password della chiave per una voce"}, //-keypasswd - {"Lists.entries.in.a.keystore", - "Elenca le voci in un keystore"}, //-list - {"Prints.the.content.of.a.certificate", - "Visualizza i contenuti di un certificato"}, //-printcert - {"Prints.the.content.of.a.certificate.request", - "Visualizza i contenuti di una richiesta di certificato"}, //-printcertreq - {"Prints.the.content.of.a.CRL.file", - "Visualizza i contenuti di un file CRL"}, //-printcrl - {"Generates.a.self.signed.certificate", - "Genera certificato con firma automatica"}, //-selfcert - {"Changes.the.store.password.of.a.keystore", - "Modifica la password di area di memorizzazione di un keystore"}, //-storepasswd - // keytool: help: options - {"alias.name.of.the.entry.to.process", - "nome alias della voce da elaborare"}, //-alias - {"destination.alias", - "alias di destinazione"}, //-destalias - {"destination.key.password", - "password chiave di destinazione"}, //-destkeypass - {"destination.keystore.name", - "nome keystore di destinazione"}, //-destkeystore - {"destination.keystore.password.protected", - "password keystore di destinazione protetta"}, //-destprotected - {"destination.keystore.provider.name", - "nome provider keystore di destinazione"}, //-destprovidername - {"destination.keystore.password", - "password keystore di destinazione"}, //-deststorepass - {"destination.keystore.type", - "tipo keystore di destinazione"}, //-deststoretype - {"distinguished.name", - "nome distinto"}, //-dname - {"X.509.extension", - "estensione X.509"}, //-ext - {"output.file.name", - "nome file di output"}, //-file and -outfile - {"input.file.name", - "nome file di input"}, //-file and -infile - {"key.algorithm.name", - "nome algoritmo chiave"}, //-keyalg - {"key.password", - "password chiave"}, //-keypass - {"key.bit.size", - "dimensione bit chiave"}, //-keysize - {"keystore.name", - "nome keystore"}, //-keystore - {"new.password", - "nuova password"}, //-new - {"do.not.prompt", - "non richiedere"}, //-noprompt - {"password.through.protected.mechanism", - "password mediante meccanismo protetto"}, //-protected - {"provider.argument", - "argomento provider"}, //-providerarg - {"provider.class.name", - "nome classe provider"}, //-providerclass - {"provider.name", - "nome provider"}, //-providername - {"provider.classpath", - "classpath provider"}, //-providerpath - {"output.in.RFC.style", - "output in stile RFC"}, //-rfc - {"signature.algorithm.name", - "nome algoritmo firma"}, //-sigalg - {"source.alias", - "alias origine"}, //-srcalias - {"source.key.password", - "password chiave di origine"}, //-srckeypass - {"source.keystore.name", - "nome keystore di origine"}, //-srckeystore - {"source.keystore.password.protected", - "password keystore di origine protetta"}, //-srcprotected - {"source.keystore.provider.name", - "nome provider keystore di origine"}, //-srcprovidername - {"source.keystore.password", - "password keystore di origine"}, //-srcstorepass - {"source.keystore.type", - "tipo keystore di origine"}, //-srcstoretype - {"SSL.server.host.and.port", - "host e porta server SSL"}, //-sslserver - {"signed.jar.file", - "file jar firmato"}, //=jarfile - {"certificate.validity.start.date.time", - "data/ora di inizio validit\u00E0 certificato"}, //-startdate - {"keystore.password", - "password keystore"}, //-storepass - {"keystore.type", - "tipo keystore"}, //-storetype - {"trust.certificates.from.cacerts", - "considera sicuri i certificati da cacerts"}, //-trustcacerts - {"verbose.output", - "output descrittivo"}, //-v - {"validity.number.of.days", - "numero di giorni di validit\u00E0"}, //-validity - {"Serial.ID.of.cert.to.revoke", - "ID seriale del certificato da revocare"}, //-id - // keytool: Running part - {"keytool.error.", "Errore keytool: "}, - {"Illegal.option.", "Opzione non valida: "}, - {"Illegal.value.", "Valore non valido: "}, - {"Unknown.password.type.", "Tipo di password sconosciuto: "}, - {"Cannot.find.environment.variable.", - "Impossibile trovare la variabile di ambiente: "}, - {"Cannot.find.file.", "Impossibile trovare il file: "}, - {"Command.option.flag.needs.an.argument.", "\u00C8 necessario specificare un argomento per l''opzione di comando {0}."}, - {"Warning.Different.store.and.key.passwords.not.supported.for.PKCS12.KeyStores.Ignoring.user.specified.command.value.", - "Avvertenza: non sono supportate password diverse di chiave e di archivio per i keystore PKCS12. Il valore {0} specificato dall''utente verr\u00E0 ignorato."}, - {".keystore.must.be.NONE.if.storetype.is.{0}", - "Se -storetype \u00E8 impostato su {0}, -keystore deve essere impostato su NONE"}, - {"Too.many.retries.program.terminated", - "Il numero dei tentativi consentiti \u00E8 stato superato. Il programma verr\u00E0 terminato."}, - {".storepasswd.and.keypasswd.commands.not.supported.if.storetype.is.{0}", - "Se -storetype \u00E8 impostato su {0}, i comandi -storepasswd e -keypasswd non sono supportati"}, - {".keypasswd.commands.not.supported.if.storetype.is.PKCS12", - "Se -storetype \u00E8 impostato su PKCS12 i comandi -keypasswd non vengono supportati"}, - {".keypass.and.new.can.not.be.specified.if.storetype.is.{0}", - "Se -storetype \u00E8 impostato su {0}, non \u00E8 possibile specificare un valore per -keypass e -new"}, - {"if.protected.is.specified.then.storepass.keypass.and.new.must.not.be.specified", - "Se \u00E8 specificata l'opzione -protected, le opzioni -storepass, -keypass e -new non possono essere specificate"}, - {"if.srcprotected.is.specified.then.srcstorepass.and.srckeypass.must.not.be.specified", - "Se viene specificato -srcprotected, -srcstorepass e -srckeypass non dovranno essere specificati"}, - {"if.keystore.is.not.password.protected.then.storepass.keypass.and.new.must.not.be.specified", - "Se il file keystore non \u00E8 protetto da password, non deve essere specificato alcun valore per -storepass, -keypass e -new"}, - {"if.source.keystore.is.not.password.protected.then.srcstorepass.and.srckeypass.must.not.be.specified", - "Se il file keystore non \u00E8 protetto da password, non deve essere specificato alcun valore per -srcstorepass e -srckeypass"}, - {"Illegal.startdate.value", "Valore di data di inizio non valido"}, - {"Validity.must.be.greater.than.zero", - "La validit\u00E0 deve essere maggiore di zero"}, - {"provName.not.a.provider", "{0} non \u00E8 un provider"}, - {"Usage.error.no.command.provided", "Errore di utilizzo: nessun comando specificato"}, - {"Source.keystore.file.exists.but.is.empty.", "Il file keystore di origine esiste, ma \u00E8 vuoto: "}, - {"Please.specify.srckeystore", "Specificare -srckeystore"}, - {"Must.not.specify.both.v.and.rfc.with.list.command", - "Impossibile specificare sia -v sia -rfc con il comando 'list'"}, - {"Key.password.must.be.at.least.6.characters", - "La password della chiave deve contenere almeno 6 caratteri"}, - {"New.password.must.be.at.least.6.characters", - "La nuova password deve contenere almeno 6 caratteri"}, - {"Keystore.file.exists.but.is.empty.", - "Il file keystore esiste ma \u00E8 vuoto: "}, - {"Keystore.file.does.not.exist.", - "Il file keystore non esiste: "}, - {"Must.specify.destination.alias", "\u00C8 necessario specificare l'alias di destinazione"}, - {"Must.specify.alias", "\u00C8 necessario specificare l'alias"}, - {"Keystore.password.must.be.at.least.6.characters", - "La password del keystore deve contenere almeno 6 caratteri"}, - {"Enter.keystore.password.", "Immettere la password del keystore: "}, - {"Enter.source.keystore.password.", "Immettere la password del keystore di origine: "}, - {"Enter.destination.keystore.password.", "Immettere la password del keystore di destinazione: "}, - {"Keystore.password.is.too.short.must.be.at.least.6.characters", - "La password del keystore \u00E8 troppo corta - deve contenere almeno 6 caratteri"}, - {"Unknown.Entry.Type", "Tipo di voce sconosciuto"}, - {"Too.many.failures.Alias.not.changed", "Numero eccessivo di errori. L'alias non \u00E8 stato modificato."}, - {"Entry.for.alias.alias.successfully.imported.", - "La voce dell''alias {0} \u00E8 stata importata."}, - {"Entry.for.alias.alias.not.imported.", "La voce dell''alias {0} non \u00E8 stata importata."}, - {"Problem.importing.entry.for.alias.alias.exception.Entry.for.alias.alias.not.imported.", - "Si \u00E8 verificato un problema durante l''importazione della voce dell''alias {0}: {1}.\nLa voce dell''alias {0} non \u00E8 stata importata."}, - {"Import.command.completed.ok.entries.successfully.imported.fail.entries.failed.or.cancelled", - "Comando di importazione completato: {0} voce/i importata/e, {1} voce/i non importata/e o annullata/e"}, - {"Warning.Overwriting.existing.alias.alias.in.destination.keystore", - "Avvertenza: sovrascrittura in corso dell''alias {0} nel file keystore di destinazione"}, - {"Existing.entry.alias.alias.exists.overwrite.no.", - "La voce dell''alias {0} esiste gi\u00E0. Sovrascrivere? [no]: "}, - {"Too.many.failures.try.later", "Troppi errori - riprovare"}, - {"Certification.request.stored.in.file.filename.", - "La richiesta di certificazione \u00E8 memorizzata nel file <{0}>"}, - {"Submit.this.to.your.CA", "Sottomettere alla propria CA"}, - {"if.alias.not.specified.destalias.srckeypass.and.destkeypass.must.not.be.specified", - "Se l'alias non \u00E8 specificato, destalias, srckeypass e destkeypass non dovranno essere specificati"}, - {"Certificate.stored.in.file.filename.", - "Il certificato \u00E8 memorizzato nel file <{0}>"}, - {"Certificate.reply.was.installed.in.keystore", - "La risposta del certificato \u00E8 stata installata nel keystore"}, - {"Certificate.reply.was.not.installed.in.keystore", - "La risposta del certificato non \u00E8 stata installata nel keystore"}, - {"Certificate.was.added.to.keystore", - "Il certificato \u00E8 stato aggiunto al keystore"}, - {"Certificate.was.not.added.to.keystore", - "Il certificato non \u00E8 stato aggiunto al keystore"}, - {".Storing.ksfname.", "[Memorizzazione di {0}] in corso"}, - {"alias.has.no.public.key.certificate.", - "{0} non dispone di chiave pubblica (certificato)"}, - {"Cannot.derive.signature.algorithm", - "Impossibile derivare l'algoritmo di firma"}, - {"Alias.alias.does.not.exist", - "L''alias <{0}> non esiste"}, - {"Alias.alias.has.no.certificate", - "L''alias <{0}> non dispone di certificato"}, - {"Key.pair.not.generated.alias.alias.already.exists", - "Non \u00E8 stata generata la coppia di chiavi, l''alias <{0}> \u00E8 gi\u00E0 esistente"}, - {"Generating.keysize.bit.keyAlgName.key.pair.and.self.signed.certificate.sigAlgName.with.a.validity.of.validality.days.for", - "Generazione in corso di una coppia di chiavi {1} da {0} bit e di un certificato autofirmato ({2}) con una validit\u00E0 di {3} giorni\n\tper: {4}"}, - {"Enter.key.password.for.alias.", "Immettere la password della chiave per <{0}>"}, - {".RETURN.if.same.as.keystore.password.", - "\t(INVIO se corrisponde alla password del keystore): "}, - {"Key.password.is.too.short.must.be.at.least.6.characters", - "La password della chiave \u00E8 troppo corta - deve contenere almeno 6 caratteri"}, - {"Too.many.failures.key.not.added.to.keystore", - "Troppi errori - la chiave non \u00E8 stata aggiunta al keystore"}, - {"Destination.alias.dest.already.exists", - "L''alias di destinazione <{0}> \u00E8 gi\u00E0 esistente"}, - {"Password.is.too.short.must.be.at.least.6.characters", - "La password \u00E8 troppo corta - deve contenere almeno 6 caratteri"}, - {"Too.many.failures.Key.entry.not.cloned", - "Numero eccessivo di errori. Il valore della chiave non \u00E8 stato copiato."}, - {"key.password.for.alias.", "password della chiave per <{0}>"}, - {"Keystore.entry.for.id.getName.already.exists", - "La voce del keystore per <{0}> esiste gi\u00E0"}, - {"Creating.keystore.entry.for.id.getName.", - "Creazione della voce del keystore per <{0}> in corso..."}, - {"No.entries.from.identity.database.added", - "Nessuna voce aggiunta dal database delle identit\u00E0"}, - {"Alias.name.alias", "Nome alias: {0}"}, - {"Creation.date.keyStore.getCreationDate.alias.", - "Data di creazione: {0,date}"}, - {"alias.keyStore.getCreationDate.alias.", - "{0}, {1,date}, "}, - {"alias.", "{0}, "}, - {"Entry.type.type.", "Tipo di voce: {0}"}, - {"Certificate.chain.length.", "Lunghezza catena certificati: "}, - {"Certificate.i.1.", "Certificato[{0,number,integer}]:"}, - {"Certificate.fingerprint.SHA1.", "Impronta digitale certificato (SHA1): "}, - {"Keystore.type.", "Tipo keystore: "}, - {"Keystore.provider.", "Provider keystore: "}, - {"Your.keystore.contains.keyStore.size.entry", - "Il keystore contiene {0,number,integer} voce"}, - {"Your.keystore.contains.keyStore.size.entries", - "Il keystore contiene {0,number,integer} voci"}, - {"Failed.to.parse.input", "Impossibile analizzare l'input"}, - {"Empty.input", "Input vuoto"}, - {"Not.X.509.certificate", "Il certificato non \u00E8 X.509"}, - {"alias.has.no.public.key", "{0} non dispone di chiave pubblica"}, - {"alias.has.no.X.509.certificate", "{0} non dispone di certificato X.509"}, - {"New.certificate.self.signed.", "Nuovo certificato (autofirmato):"}, - {"Reply.has.no.certificates", "La risposta non dispone di certificati"}, - {"Certificate.not.imported.alias.alias.already.exists", - "Impossibile importare il certificato, l''alias <{0}> \u00E8 gi\u00E0 esistente"}, - {"Input.not.an.X.509.certificate", "L'input non \u00E8 un certificato X.509"}, - {"Certificate.already.exists.in.keystore.under.alias.trustalias.", - "Il certificato esiste gi\u00E0 nel keystore con alias <{0}>"}, - {"Do.you.still.want.to.add.it.no.", - "Aggiungerlo ugualmente? [no]: "}, - {"Certificate.already.exists.in.system.wide.CA.keystore.under.alias.trustalias.", - "Il certificato esiste gi\u00E0 nel keystore CA con alias <{0}>"}, - {"Do.you.still.want.to.add.it.to.your.own.keystore.no.", - "Aggiungerlo al proprio keystore? [no]: "}, - {"Trust.this.certificate.no.", "Considerare sicuro questo certificato? [no]: "}, - {"YES", "S\u00EC"}, - {"New.prompt.", "Nuova {0}: "}, - {"Passwords.must.differ", "Le password non devono coincidere"}, - {"Re.enter.new.prompt.", "Reimmettere un nuovo valore per {0}: "}, - {"Re.enter.new.password.", "Immettere nuovamente la nuova password: "}, - {"They.don.t.match.Try.again", "Non corrispondono. Riprovare."}, - {"Enter.prompt.alias.name.", "Immettere nome alias {0}: "}, - {"Enter.new.alias.name.RETURN.to.cancel.import.for.this.entry.", - "Immettere un nuovo nome alias\t(premere INVIO per annullare l'importazione della voce): "}, - {"Enter.alias.name.", "Immettere nome alias: "}, - {".RETURN.if.same.as.for.otherAlias.", - "\t(INVIO se corrisponde al nome di <{0}>"}, - {".PATTERN.printX509Cert", - "Proprietario: {0}\nAutorit\u00E0 emittente: {1}\nNumero di serie: {2}\nValido da: {3} a: {4}\nImpronte digitali certificato:\n\t MD5: {5}\n\t SHA1: {6}\n\t SHA256: {7}\n\t Nome algoritmo firma: {8}\n\t Versione: {9}"}, - {"What.is.your.first.and.last.name.", - "Specificare nome e cognome"}, - {"What.is.the.name.of.your.organizational.unit.", - "Specificare il nome dell'unit\u00E0 organizzativa"}, - {"What.is.the.name.of.your.organization.", - "Specificare il nome dell'organizzazione"}, - {"What.is.the.name.of.your.City.or.Locality.", - "Specificare la localit\u00E0"}, - {"What.is.the.name.of.your.State.or.Province.", - "Specificare la provincia"}, - {"What.is.the.two.letter.country.code.for.this.unit.", - "Specificare il codice a due lettere del paese in cui si trova l'unit\u00E0"}, - {"Is.name.correct.", "Il dato {0} \u00E8 corretto?"}, - {"no", "no"}, - {"yes", "s\u00EC"}, - {"y", "s"}, - {".defaultValue.", " [{0}]: "}, - {"Alias.alias.has.no.key", - "All''alias <{0}> non \u00E8 associata alcuna chiave"}, - {"Alias.alias.references.an.entry.type.that.is.not.a.private.key.entry.The.keyclone.command.only.supports.cloning.of.private.key", - "L''alias <{0}> fa riferimento a un tipo di voce che non \u00E8 una voce di chiave privata. Il comando -keyclone supporta solo la copia delle voci di chiave private."}, - - {".WARNING.WARNING.WARNING.", - "***************** Avvertenza Avvertenza Avvertenza *****************"}, - {"Signer.d.", "Firmatario #%d:"}, - {"Timestamp.", "Indicatore orario:"}, - {"Signature.", "Firma:"}, - {"CRLs.", "CRL:"}, - {"Certificate.owner.", "Proprietario certificato: "}, - {"Not.a.signed.jar.file", "Non \u00E8 un file jar firmato"}, - {"No.certificate.from.the.SSL.server", - "Nessun certificato dal server SSL"}, - - {".The.integrity.of.the.information.stored.in.your.keystore.", - "* L'integrit\u00E0 delle informazioni memorizzate nel keystore *\n* NON \u00E8 stata verificata. Per verificarne l'integrit\u00E0 *\n* \u00E8 necessario fornire la password del keystore. *"}, - {".The.integrity.of.the.information.stored.in.the.srckeystore.", - "* L'integrit\u00E0 delle informazioni memorizzate nel srckeystore *\n* NON \u00E8 stata verificata. Per verificarne l'integrit\u00E0 *\n* \u00E8 necessario fornire la password del srckeystore. *"}, - - {"Certificate.reply.does.not.contain.public.key.for.alias.", - "La risposta del certificato non contiene la chiave pubblica per <{0}>"}, - {"Incomplete.certificate.chain.in.reply", - "Catena dei certificati incompleta nella risposta"}, - {"Certificate.chain.in.reply.does.not.verify.", - "La catena dei certificati nella risposta non verifica: "}, - {"Top.level.certificate.in.reply.", - "Certificato di primo livello nella risposta:\n"}, - {".is.not.trusted.", "...non \u00E8 considerato sicuro. "}, - {"Install.reply.anyway.no.", "Installare la risposta? [no]: "}, - {"NO", "No"}, - {"Public.keys.in.reply.and.keystore.don.t.match", - "Le chiavi pubbliche nella risposta e nel keystore non corrispondono"}, - {"Certificate.reply.and.certificate.in.keystore.are.identical", - "La risposta del certificato e il certificato nel keystore sono identici"}, - {"Failed.to.establish.chain.from.reply", - "Impossibile stabilire la catena dalla risposta"}, - {"n", "n"}, - {"Wrong.answer.try.again", "Risposta errata, riprovare"}, - {"Secret.key.not.generated.alias.alias.already.exists", - "La chiave segreta non \u00E8 stata generata; l''alias <{0}> esiste gi\u00E0"}, - {"Please.provide.keysize.for.secret.key.generation", - "Specificare il valore -keysize per la generazione della chiave segreta"}, - - {"Extensions.", "Estensioni: "}, - {".Empty.value.", "(valore vuoto)"}, - {"Extension.Request.", "Richiesta di estensione:"}, - {"PKCS.10.Certificate.Request.Version.1.0.Subject.s.Public.Key.s.format.s.key.", - "Richiesta di certificato PKCS #10 (versione 1.0)\nOggetto: %s\nChiave pubblica: %s formato %s chiave\n"}, - {"Unknown.keyUsage.type.", "Tipo keyUsage sconosciuto: "}, - {"Unknown.extendedkeyUsage.type.", "Tipo extendedkeyUsage sconosciuto: "}, - {"Unknown.AccessDescription.type.", "Tipo AccessDescription sconosciuto: "}, - {"Unrecognized.GeneralName.type.", "Tipo GeneralName non riconosciuto: "}, - {"This.extension.cannot.be.marked.as.critical.", - "Impossibile contrassegnare questa estensione come critica. "}, - {"Odd.number.of.hex.digits.found.", "\u00C8 stato trovato un numero dispari di cifre esadecimali: "}, - {"Unknown.extension.type.", "Tipo di estensione sconosciuto: "}, - {"command.{0}.is.ambiguous.", "il comando {0} \u00E8 ambiguo:"}, - - // policytool - {"Warning.A.public.key.for.alias.signers.i.does.not.exist.Make.sure.a.KeyStore.is.properly.configured.", - "Avvertenza: non esiste una chiave pubblica per l''alias {0}. Verificare che il keystore sia configurato correttamente."}, - {"Warning.Class.not.found.class", "Avvertenza: classe non trovata: {0}"}, - {"Warning.Invalid.argument.s.for.constructor.arg", - "Avvertenza: argomento o argomenti non validi per il costruttore {0}"}, - {"Illegal.Principal.Type.type", "Tipo principal non valido: {0}"}, - {"Illegal.option.option", "Opzione non valida: {0}"}, - {"Usage.policytool.options.", "Utilizzo: policytool [opzioni]"}, - {".file.file.policy.file.location", - " [-file ] posizione del file dei criteri"}, - {"New", "Nuovo"}, - {"Open", "Apri"}, - {"Save", "Salva"}, - {"Save.As", "Salva con nome"}, - {"View.Warning.Log", "Visualizza registro avvertenze"}, - {"Exit", "Esci"}, - {"Add.Policy.Entry", "Aggiungi voce dei criteri"}, - {"Edit.Policy.Entry", "Modifica voce dei criteri"}, - {"Remove.Policy.Entry", "Rimuovi voce dei criteri"}, - {"Edit", "Modifica"}, - {"Retain", "Mantieni"}, - - {"Warning.File.name.may.include.escaped.backslash.characters.It.is.not.necessary.to.escape.backslash.characters.the.tool.escapes", - "Avvertenza: il nome file pu\u00F2 includere barre rovesciate con escape. Non \u00E8 necessario eseguire l'escape delle barre rovesciate (se necessario lo strumento esegue l'escape dei caratteri al momento della scrittura del contenuto dei criteri nell'area di memorizzazione persistente).\n\nFare click su Mantieni per conservare il nome immesso, oppure su Modifica per modificare il nome."}, - - {"Add.Public.Key.Alias", "Aggiungi alias chiave pubblica"}, - {"Remove.Public.Key.Alias", "Rimuovi alias chiave pubblica"}, - {"File", "File"}, - {"KeyStore", "Keystore"}, - {"Policy.File.", "File dei criteri:"}, - {"Could.not.open.policy.file.policyFile.e.toString.", - "Impossibile aprire il file di criteri {0}: {1}"}, - {"Policy.Tool", "Strumento criteri"}, - {"Errors.have.occurred.while.opening.the.policy.configuration.View.the.Warning.Log.for.more.information.", - "Si sono verificati errori durante l'apertura della configurazione dei criteri. Consultare il registro delle avvertenze per ulteriori informazioni."}, - {"Error", "Errore"}, - {"OK", "OK"}, - {"Status", "Stato"}, - {"Warning", "Avvertenza"}, - {"Permission.", - "Autorizzazione: "}, - {"Principal.Type.", "Tipo principal:"}, - {"Principal.Name.", "Nome principal:"}, - {"Target.Name.", - "Nome destinazione: "}, - {"Actions.", - "Azioni: "}, - {"OK.to.overwrite.existing.file.filename.", - "OK per sovrascrivere il file {0}?"}, - {"Cancel", "Annulla"}, - {"CodeBase.", "CodeBase:"}, - {"SignedBy.", "SignedBy:"}, - {"Add.Principal", "Aggiungi principal"}, - {"Edit.Principal", "Modifica principal"}, - {"Remove.Principal", "Rimuovi principal"}, - {"Principals.", "Principal:"}, - {".Add.Permission", " Aggiungi autorizzazione"}, - {".Edit.Permission", " Modifica autorizzazione"}, - {"Remove.Permission", "Rimuovi autorizzazione"}, - {"Done", "Fine"}, - {"KeyStore.URL.", "URL keystore:"}, - {"KeyStore.Type.", "Tipo keystore:"}, - {"KeyStore.Provider.", "Provider keystore:"}, - {"KeyStore.Password.URL.", "URL password keystore:"}, - {"Principals", "Principal:"}, - {".Edit.Principal.", " Modifica principal:"}, - {".Add.New.Principal.", " Aggiungi nuovo principal:"}, - {"Permissions", "Autorizzazioni"}, - {".Edit.Permission.", " Modifica autorizzazione:"}, - {".Add.New.Permission.", " Aggiungi nuova autorizzazione:"}, - {"Signed.By.", "Firmato da:"}, - {"Cannot.Specify.Principal.with.a.Wildcard.Class.without.a.Wildcard.Name", - "Impossibile specificare principal con una classe carattere jolly senza un nome carattere jolly"}, - {"Cannot.Specify.Principal.without.a.Name", - "Impossibile specificare principal senza un nome"}, - {"Permission.and.Target.Name.must.have.a.value", - "L'autorizzazione e il nome destinazione non possono essere nulli"}, - {"Remove.this.Policy.Entry.", "Rimuovere questa voce dei criteri?"}, - {"Overwrite.File", "Sovrascrivi file"}, - {"Policy.successfully.written.to.filename", - "I criteri sono stati scritti in {0}"}, - {"null.filename", "nome file nullo"}, - {"Save.changes.", "Salvare le modifiche?"}, - {"Yes", "S\u00EC"}, - {"No", "No"}, - {"Policy.Entry", "Voce dei criteri"}, - {"Save.Changes", "Salva le modifiche"}, - {"No.Policy.Entry.selected", "Nessuna voce dei criteri selezionata"}, - {"Unable.to.open.KeyStore.ex.toString.", - "Impossibile aprire il keystore: {0}"}, - {"No.principal.selected", "Nessun principal selezionato"}, - {"No.permission.selected", "Nessuna autorizzazione selezionata"}, - {"name", "nome"}, - {"configuration.type", "tipo di configurazione"}, - {"environment.variable.name", "nome variabile ambiente"}, - {"library.name", "nome libreria"}, - {"package.name", "nome package"}, - {"policy.type", "tipo di criteri"}, - {"property.name", "nome propriet\u00E0"}, - {"Principal.List", "Lista principal"}, - {"Permission.List", "Lista autorizzazioni"}, - {"Code.Base", "Codebase"}, - {"KeyStore.U.R.L.", "URL keystore:"}, - {"KeyStore.Password.U.R.L.", "URL password keystore:"}, - - // javax.security.auth.PrivateCredentialPermission {"invalid.null.input.s.", "input nullo/i non valido/i"}, {"actions.can.only.be.read.", "le azioni possono essere solamente 'lette'"}, @@ -553,6 +58,7 @@ public class Resources_it extends java.util.ListResourceBundle { {"provided.null.OID.map", "specificata mappa OID null"}, // javax.security.auth.Subject + {"NEWLINE", "\n"}, {"invalid.null.AccessControlContext.provided", "fornito un valore nullo non valido per AccessControlContext"}, {"invalid.null.action.provided", "fornita un'azione nulla non valida"}, @@ -656,6 +162,7 @@ public class Resources_it extends java.util.ListResourceBundle { * * @return the contents of this ResourceBundle. */ + @Override public Object[][] getContents() { return contents; } diff --git a/jdk/src/share/classes/sun/security/util/Resources_ja.java b/jdk/src/share/classes/sun/security/util/Resources_ja.java index 27643dd1b12..65d9289b161 100644 --- a/jdk/src/share/classes/sun/security/util/Resources_ja.java +++ b/jdk/src/share/classes/sun/security/util/Resources_ja.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2000, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2000, 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 @@ -34,501 +34,6 @@ public class Resources_ja extends java.util.ListResourceBundle { private static final Object[][] contents = { - // shared (from jarsigner) - {"SPACE", " "}, - {"2SPACE", " "}, - {"6SPACE", " "}, - {"COMMA", ", "}, - // shared (from keytool) - {"NEWLINE", "\n"}, - {"STAR", - "*******************************************"}, - {"STARNN", - "*******************************************\n\n"}, - - // keytool: Help part -// "Option" should be translated. - {".OPTION.", " [\u30AA\u30D7\u30B7\u30E7\u30F3]..."}, - {"Options.", "\u30AA\u30D7\u30B7\u30E7\u30F3:"}, - {"Use.keytool.help.for.all.available.commands", - "\u4F7F\u7528\u53EF\u80FD\u306A\u3059\u3079\u3066\u306E\u30B3\u30DE\u30F3\u30C9\u306B\u3064\u3044\u3066\u306F\"keytool -help\"\u3092\u4F7F\u7528\u3057\u3066\u304F\u3060\u3055\u3044"}, - {"Key.and.Certificate.Management.Tool", - "\u30AD\u30FC\u304A\u3088\u3073\u8A3C\u660E\u66F8\u7BA1\u7406\u30C4\u30FC\u30EB"}, - {"Commands.", "\u30B3\u30DE\u30F3\u30C9:"}, - {"Use.keytool.command.name.help.for.usage.of.command.name", - "command_name\u306E\u4F7F\u7528\u65B9\u6CD5\u306B\u3064\u3044\u3066\u306F\"keytool -command_name -help\"\u3092\u4F7F\u7528\u3057\u3066\u304F\u3060\u3055\u3044"}, - // keytool: help: commands - {"Generates.a.certificate.request", - "\u8A3C\u660E\u66F8\u30EA\u30AF\u30A8\u30B9\u30C8\u3092\u751F\u6210\u3057\u307E\u3059"}, //-certreq - {"Changes.an.entry.s.alias", - "\u30A8\u30F3\u30C8\u30EA\u306E\u5225\u540D\u3092\u5909\u66F4\u3057\u307E\u3059"}, //-changealias - {"Deletes.an.entry", - "\u30A8\u30F3\u30C8\u30EA\u3092\u524A\u9664\u3057\u307E\u3059"}, //-delete - {"Exports.certificate", - "\u8A3C\u660E\u66F8\u3092\u30A8\u30AF\u30B9\u30DD\u30FC\u30C8\u3057\u307E\u3059"}, //-exportcert - {"Generates.a.key.pair", - "\u9375\u30DA\u30A2\u3092\u751F\u6210\u3057\u307E\u3059"}, //-genkeypair -// translation of "secret" key should be different to "private" key. - {"Generates.a.secret.key", - "\u79D8\u5BC6\u9375\u3092\u751F\u6210\u3057\u307E\u3059"}, //-genseckey - {"Generates.certificate.from.a.certificate.request", - "\u8A3C\u660E\u66F8\u30EA\u30AF\u30A8\u30B9\u30C8\u304B\u3089\u8A3C\u660E\u66F8\u3092\u751F\u6210\u3057\u307E\u3059"}, //-gencert - {"Generates.CRL", "CRL\u3092\u751F\u6210\u3057\u307E\u3059"}, //-gencrl - {"Imports.entries.from.a.JDK.1.1.x.style.identity.database", - "JDK 1.1.x-style\u30A2\u30A4\u30C7\u30F3\u30C6\u30A3\u30C6\u30A3\u30FB\u30C7\u30FC\u30BF\u30D9\u30FC\u30B9\u304B\u3089\u30A8\u30F3\u30C8\u30EA\u3092\u30A4\u30F3\u30DD\u30FC\u30C8\u3057\u307E\u3059"}, //-identitydb - {"Imports.a.certificate.or.a.certificate.chain", - "\u8A3C\u660E\u66F8\u307E\u305F\u306F\u8A3C\u660E\u66F8\u30C1\u30A7\u30FC\u30F3\u3092\u30A4\u30F3\u30DD\u30FC\u30C8\u3057\u307E\u3059"}, //-importcert - {"Imports.one.or.all.entries.from.another.keystore", - "\u5225\u306E\u30AD\u30FC\u30B9\u30C8\u30A2\u304B\u30891\u3064\u307E\u305F\u306F\u3059\u3079\u3066\u306E\u30A8\u30F3\u30C8\u30EA\u3092\u30A4\u30F3\u30DD\u30FC\u30C8\u3057\u307E\u3059"}, //-importkeystore - {"Clones.a.key.entry", - "\u9375\u30A8\u30F3\u30C8\u30EA\u306E\u30AF\u30ED\u30FC\u30F3\u3092\u4F5C\u6210\u3057\u307E\u3059"}, //-keyclone - {"Changes.the.key.password.of.an.entry", - "\u30A8\u30F3\u30C8\u30EA\u306E\u9375\u30D1\u30B9\u30EF\u30FC\u30C9\u3092\u5909\u66F4\u3057\u307E\u3059"}, //-keypasswd - {"Lists.entries.in.a.keystore", - "\u30AD\u30FC\u30B9\u30C8\u30A2\u5185\u306E\u30A8\u30F3\u30C8\u30EA\u3092\u30EA\u30B9\u30C8\u3057\u307E\u3059"}, //-list - {"Prints.the.content.of.a.certificate", - "\u8A3C\u660E\u66F8\u306E\u5185\u5BB9\u3092\u51FA\u529B\u3057\u307E\u3059"}, //-printcert - {"Prints.the.content.of.a.certificate.request", - "\u8A3C\u660E\u66F8\u30EA\u30AF\u30A8\u30B9\u30C8\u306E\u5185\u5BB9\u3092\u51FA\u529B\u3057\u307E\u3059"}, //-printcertreq - {"Prints.the.content.of.a.CRL.file", - "CRL\u30D5\u30A1\u30A4\u30EB\u306E\u5185\u5BB9\u3092\u51FA\u529B\u3057\u307E\u3059"}, //-printcrl - {"Generates.a.self.signed.certificate", - "\u81EA\u5DF1\u7F72\u540D\u578B\u8A3C\u660E\u66F8\u3092\u751F\u6210\u3057\u307E\u3059"}, //-selfcert - {"Changes.the.store.password.of.a.keystore", - "\u30AD\u30FC\u30B9\u30C8\u30A2\u306E\u30B9\u30C8\u30A2\u30FB\u30D1\u30B9\u30EF\u30FC\u30C9\u3092\u5909\u66F4\u3057\u307E\u3059"}, //-storepasswd - // keytool: help: options - {"alias.name.of.the.entry.to.process", - "\u51E6\u7406\u3059\u308B\u30A8\u30F3\u30C8\u30EA\u306E\u5225\u540D"}, //-alias - {"destination.alias", - "\u51FA\u529B\u5148\u306E\u5225\u540D"}, //-destalias - {"destination.key.password", - "\u51FA\u529B\u5148\u30AD\u30FC\u306E\u30D1\u30B9\u30EF\u30FC\u30C9"}, //-destkeypass - {"destination.keystore.name", - "\u51FA\u529B\u5148\u30AD\u30FC\u30B9\u30C8\u30A2\u540D"}, //-destkeystore - {"destination.keystore.password.protected", - "\u51FA\u529B\u5148\u30AD\u30FC\u30B9\u30C8\u30A2\u306E\u4FDD\u8B77\u5BFE\u8C61\u30D1\u30B9\u30EF\u30FC\u30C9"}, //-destprotected - {"destination.keystore.provider.name", - "\u51FA\u529B\u5148\u30AD\u30FC\u30B9\u30C8\u30A2\u30FB\u30D7\u30ED\u30D0\u30A4\u30C0\u540D"}, //-destprovidername - {"destination.keystore.password", - "\u51FA\u529B\u5148\u30AD\u30FC\u30B9\u30C8\u30A2\u306E\u30D1\u30B9\u30EF\u30FC\u30C9"}, //-deststorepass - {"destination.keystore.type", - "\u51FA\u529B\u5148\u30AD\u30FC\u30B9\u30C8\u30A2\u306E\u30BF\u30A4\u30D7"}, //-deststoretype - {"distinguished.name", - "\u8B58\u5225\u540D"}, //-dname - {"X.509.extension", - "X.509\u62E1\u5F35"}, //-ext - {"output.file.name", - "\u51FA\u529B\u30D5\u30A1\u30A4\u30EB\u540D"}, //-file and -outfile - {"input.file.name", - "\u5165\u529B\u30D5\u30A1\u30A4\u30EB\u540D"}, //-file and -infile - {"key.algorithm.name", - "\u9375\u30A2\u30EB\u30B4\u30EA\u30BA\u30E0\u540D"}, //-keyalg - {"key.password", - "\u9375\u306E\u30D1\u30B9\u30EF\u30FC\u30C9"}, //-keypass - {"key.bit.size", - "\u9375\u306E\u30D3\u30C3\u30C8\u30FB\u30B5\u30A4\u30BA"}, //-keysize - {"keystore.name", - "\u30AD\u30FC\u30B9\u30C8\u30A2\u540D"}, //-keystore - {"new.password", - "\u65B0\u898F\u30D1\u30B9\u30EF\u30FC\u30C9"}, //-new - {"do.not.prompt", - "\u30D7\u30ED\u30F3\u30D7\u30C8\u3092\u8868\u793A\u3057\u306A\u3044"}, //-noprompt - {"password.through.protected.mechanism", - "\u4FDD\u8B77\u30E1\u30AB\u30CB\u30BA\u30E0\u306B\u3088\u308B\u30D1\u30B9\u30EF\u30FC\u30C9"}, //-protected - {"provider.argument", - "\u30D7\u30ED\u30D0\u30A4\u30C0\u5F15\u6570"}, //-providerarg - {"provider.class.name", - "\u30D7\u30ED\u30D0\u30A4\u30C0\u30FB\u30AF\u30E9\u30B9\u540D"}, //-providerclass - {"provider.name", - "\u30D7\u30ED\u30D0\u30A4\u30C0\u540D"}, //-providername - {"provider.classpath", - "\u30D7\u30ED\u30D0\u30A4\u30C0\u30FB\u30AF\u30E9\u30B9\u30D1\u30B9"}, //-providerpath - {"output.in.RFC.style", - "RFC\u30B9\u30BF\u30A4\u30EB\u306E\u51FA\u529B"}, //-rfc - {"signature.algorithm.name", - "\u7F72\u540D\u30A2\u30EB\u30B4\u30EA\u30BA\u30E0\u540D"}, //-sigalg - {"source.alias", - "\u30BD\u30FC\u30B9\u5225\u540D"}, //-srcalias - {"source.key.password", - "\u30BD\u30FC\u30B9\u30FB\u30AD\u30FC\u306E\u30D1\u30B9\u30EF\u30FC\u30C9"}, //-srckeypass - {"source.keystore.name", - "\u30BD\u30FC\u30B9\u30FB\u30AD\u30FC\u30B9\u30C8\u30A2\u540D"}, //-srckeystore - {"source.keystore.password.protected", - "\u30BD\u30FC\u30B9\u30FB\u30AD\u30FC\u30B9\u30C8\u30A2\u306E\u4FDD\u8B77\u5BFE\u8C61\u30D1\u30B9\u30EF\u30FC\u30C9"}, //-srcprotected - {"source.keystore.provider.name", - "\u30BD\u30FC\u30B9\u30FB\u30AD\u30FC\u30B9\u30C8\u30A2\u30FB\u30D7\u30ED\u30D0\u30A4\u30C0\u540D"}, //-srcprovidername - {"source.keystore.password", - "\u30BD\u30FC\u30B9\u30FB\u30AD\u30FC\u30B9\u30C8\u30A2\u306E\u30D1\u30B9\u30EF\u30FC\u30C9"}, //-srcstorepass - {"source.keystore.type", - "\u30BD\u30FC\u30B9\u30FB\u30AD\u30FC\u30B9\u30C8\u30A2\u306E\u30BF\u30A4\u30D7"}, //-srcstoretype - {"SSL.server.host.and.port", - "SSL\u30B5\u30FC\u30D0\u30FC\u306E\u30DB\u30B9\u30C8\u3068\u30DD\u30FC\u30C8"}, //-sslserver - {"signed.jar.file", - "\u7F72\u540D\u4ED8\u304DJAR\u30D5\u30A1\u30A4\u30EB"}, //=jarfile - {"certificate.validity.start.date.time", - "\u8A3C\u660E\u66F8\u306E\u6709\u52B9\u958B\u59CB\u65E5\u6642"}, //-startdate - {"keystore.password", - "\u30AD\u30FC\u30B9\u30C8\u30A2\u306E\u30D1\u30B9\u30EF\u30FC\u30C9"}, //-storepass - {"keystore.type", - "\u30AD\u30FC\u30B9\u30C8\u30A2\u306E\u30BF\u30A4\u30D7"}, //-storetype - {"trust.certificates.from.cacerts", - "cacerts\u304B\u3089\u306E\u8A3C\u660E\u66F8\u3092\u4FE1\u983C\u3059\u308B"}, //-trustcacerts - {"verbose.output", - "\u8A73\u7D30\u51FA\u529B"}, //-v - {"validity.number.of.days", - "\u59A5\u5F53\u6027\u65E5\u6570"}, //-validity - {"Serial.ID.of.cert.to.revoke", - "\u5931\u52B9\u3059\u308B\u8A3C\u660E\u66F8\u306E\u30B7\u30EA\u30A2\u30EBID"}, //-id - // keytool: Running part - {"keytool.error.", "keytool\u30A8\u30E9\u30FC: "}, - {"Illegal.option.", "\u4E0D\u6B63\u306A\u30AA\u30D7\u30B7\u30E7\u30F3: "}, - {"Illegal.value.", "\u4E0D\u6B63\u306A\u5024: "}, - {"Unknown.password.type.", "\u4E0D\u660E\u306A\u30D1\u30B9\u30EF\u30FC\u30C9\u30FB\u30BF\u30A4\u30D7: "}, - {"Cannot.find.environment.variable.", - "\u74B0\u5883\u5909\u6570\u304C\u898B\u3064\u304B\u308A\u307E\u305B\u3093: "}, - {"Cannot.find.file.", "\u30D5\u30A1\u30A4\u30EB\u304C\u898B\u3064\u304B\u308A\u307E\u305B\u3093: "}, - {"Command.option.flag.needs.an.argument.", "\u30B3\u30DE\u30F3\u30C9\u30FB\u30AA\u30D7\u30B7\u30E7\u30F3{0}\u306B\u306F\u5F15\u6570\u304C\u5FC5\u8981\u3067\u3059\u3002"}, - {"Warning.Different.store.and.key.passwords.not.supported.for.PKCS12.KeyStores.Ignoring.user.specified.command.value.", - "\u8B66\u544A: PKCS12\u30AD\u30FC\u30B9\u30C8\u30A2\u3067\u306F\u3001\u30B9\u30C8\u30A2\u306E\u30D1\u30B9\u30EF\u30FC\u30C9\u3068\u9375\u306E\u30D1\u30B9\u30EF\u30FC\u30C9\u304C\u7570\u306A\u308B\u72B6\u6CC1\u306F\u30B5\u30DD\u30FC\u30C8\u3055\u308C\u307E\u305B\u3093\u3002\u30E6\u30FC\u30B6\u30FC\u304C\u6307\u5B9A\u3057\u305F{0}\u306E\u5024\u306F\u7121\u8996\u3057\u307E\u3059\u3002"}, - {".keystore.must.be.NONE.if.storetype.is.{0}", - "-storetype\u304C{0}\u306E\u5834\u5408\u3001-keystore\u306FNONE\u3067\u3042\u308B\u5FC5\u8981\u304C\u3042\u308A\u307E\u3059"}, - {"Too.many.retries.program.terminated", - "\u518D\u8A66\u884C\u304C\u591A\u3059\u304E\u307E\u3059\u3002\u30D7\u30ED\u30B0\u30E9\u30E0\u304C\u7D42\u4E86\u3057\u307E\u3057\u305F"}, - {".storepasswd.and.keypasswd.commands.not.supported.if.storetype.is.{0}", - "-storetype\u304C{0}\u306E\u5834\u5408\u3001-storepasswd\u30B3\u30DE\u30F3\u30C9\u304A\u3088\u3073-keypasswd\u30B3\u30DE\u30F3\u30C9\u306F\u30B5\u30DD\u30FC\u30C8\u3055\u308C\u307E\u305B\u3093"}, - {".keypasswd.commands.not.supported.if.storetype.is.PKCS12", - "-storetype\u304CPKCS12\u306E\u5834\u5408\u3001-keypasswd\u30B3\u30DE\u30F3\u30C9\u306F\u30B5\u30DD\u30FC\u30C8\u3055\u308C\u307E\u305B\u3093"}, - {".keypass.and.new.can.not.be.specified.if.storetype.is.{0}", - "-storetype\u304C{0}\u306E\u5834\u5408\u3001-keypass\u3068-new\u306F\u6307\u5B9A\u3067\u304D\u307E\u305B\u3093"}, - {"if.protected.is.specified.then.storepass.keypass.and.new.must.not.be.specified", - "-protected\u304C\u6307\u5B9A\u3055\u308C\u3066\u3044\u308B\u5834\u5408\u3001-storepass\u3001-keypass\u304A\u3088\u3073-new\u306F\u6307\u5B9A\u3067\u304D\u307E\u305B\u3093"}, - {"if.srcprotected.is.specified.then.srcstorepass.and.srckeypass.must.not.be.specified", - "-srcprotected\u304C\u6307\u5B9A\u3055\u308C\u3066\u3044\u308B\u5834\u5408\u3001-srcstorepass\u304A\u3088\u3073-srckeypass\u306F\u6307\u5B9A\u3067\u304D\u307E\u305B\u3093"}, - {"if.keystore.is.not.password.protected.then.storepass.keypass.and.new.must.not.be.specified", - "\u30AD\u30FC\u30B9\u30C8\u30A2\u304C\u30D1\u30B9\u30EF\u30FC\u30C9\u3067\u4FDD\u8B77\u3055\u308C\u3066\u3044\u306A\u3044\u5834\u5408\u3001-storepass\u3001-keypass\u304A\u3088\u3073-new\u306F\u6307\u5B9A\u3067\u304D\u307E\u305B\u3093"}, - {"if.source.keystore.is.not.password.protected.then.srcstorepass.and.srckeypass.must.not.be.specified", - "\u30BD\u30FC\u30B9\u30FB\u30AD\u30FC\u30B9\u30C8\u30A2\u304C\u30D1\u30B9\u30EF\u30FC\u30C9\u3067\u4FDD\u8B77\u3055\u308C\u3066\u3044\u306A\u3044\u5834\u5408\u3001-srcstorepass\u304A\u3088\u3073-srckeypass\u306F\u6307\u5B9A\u3067\u304D\u307E\u305B\u3093"}, - {"Illegal.startdate.value", "startdate\u5024\u304C\u7121\u52B9\u3067\u3059"}, - {"Validity.must.be.greater.than.zero", - "\u59A5\u5F53\u6027\u306F\u30BC\u30ED\u3088\u308A\u5927\u304D\u3044\u5FC5\u8981\u304C\u3042\u308A\u307E\u3059"}, - {"provName.not.a.provider", "{0}\u306F\u30D7\u30ED\u30D0\u30A4\u30C0\u3067\u306F\u3042\u308A\u307E\u305B\u3093"}, - {"Usage.error.no.command.provided", "\u4F7F\u7528\u30A8\u30E9\u30FC: \u30B3\u30DE\u30F3\u30C9\u304C\u6307\u5B9A\u3055\u308C\u3066\u3044\u307E\u305B\u3093"}, - {"Source.keystore.file.exists.but.is.empty.", "\u30BD\u30FC\u30B9\u30FB\u30AD\u30FC\u30B9\u30C8\u30A2\u30FB\u30D5\u30A1\u30A4\u30EB\u306F\u3001\u5B58\u5728\u3057\u307E\u3059\u304C\u7A7A\u3067\u3059: "}, - {"Please.specify.srckeystore", "-srckeystore\u3092\u6307\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044"}, - {"Must.not.specify.both.v.and.rfc.with.list.command", - "'list'\u30B3\u30DE\u30F3\u30C9\u306B-v\u3068-rfc\u306E\u4E21\u65B9\u3092\u6307\u5B9A\u3059\u308B\u3053\u3068\u306F\u3067\u304D\u307E\u305B\u3093"}, - {"Key.password.must.be.at.least.6.characters", - "\u9375\u306E\u30D1\u30B9\u30EF\u30FC\u30C9\u306F6\u6587\u5B57\u4EE5\u4E0A\u3067\u3042\u308B\u5FC5\u8981\u304C\u3042\u308A\u307E\u3059"}, - {"New.password.must.be.at.least.6.characters", - "\u65B0\u898F\u30D1\u30B9\u30EF\u30FC\u30C9\u306F6\u6587\u5B57\u4EE5\u4E0A\u3067\u3042\u308B\u5FC5\u8981\u304C\u3042\u308A\u307E\u3059"}, - {"Keystore.file.exists.but.is.empty.", - "\u30AD\u30FC\u30B9\u30C8\u30A2\u30FB\u30D5\u30A1\u30A4\u30EB\u306F\u5B58\u5728\u3057\u307E\u3059\u304C\u3001\u7A7A\u3067\u3059: "}, - {"Keystore.file.does.not.exist.", - "\u30AD\u30FC\u30B9\u30C8\u30A2\u30FB\u30D5\u30A1\u30A4\u30EB\u306F\u5B58\u5728\u3057\u307E\u305B\u3093: "}, - {"Must.specify.destination.alias", "\u51FA\u529B\u5148\u306E\u5225\u540D\u3092\u6307\u5B9A\u3059\u308B\u5FC5\u8981\u304C\u3042\u308A\u307E\u3059"}, - {"Must.specify.alias", "\u5225\u540D\u3092\u6307\u5B9A\u3059\u308B\u5FC5\u8981\u304C\u3042\u308A\u307E\u3059"}, - {"Keystore.password.must.be.at.least.6.characters", - "\u30AD\u30FC\u30B9\u30C8\u30A2\u306E\u30D1\u30B9\u30EF\u30FC\u30C9\u306F6\u6587\u5B57\u4EE5\u4E0A\u3067\u3042\u308B\u5FC5\u8981\u304C\u3042\u308A\u307E\u3059"}, - {"Enter.keystore.password.", "\u30AD\u30FC\u30B9\u30C8\u30A2\u306E\u30D1\u30B9\u30EF\u30FC\u30C9\u3092\u5165\u529B\u3057\u3066\u304F\u3060\u3055\u3044: "}, - {"Enter.source.keystore.password.", "\u30BD\u30FC\u30B9\u30FB\u30AD\u30FC\u30B9\u30C8\u30A2\u306E\u30D1\u30B9\u30EF\u30FC\u30C9\u3092\u5165\u529B\u3057\u3066\u304F\u3060\u3055\u3044: "}, - {"Enter.destination.keystore.password.", "\u51FA\u529B\u5148\u30AD\u30FC\u30B9\u30C8\u30A2\u306E\u30D1\u30B9\u30EF\u30FC\u30C9\u3092\u5165\u529B\u3057\u3066\u304F\u3060\u3055\u3044: "}, - {"Keystore.password.is.too.short.must.be.at.least.6.characters", - "\u30AD\u30FC\u30B9\u30C8\u30A2\u306E\u30D1\u30B9\u30EF\u30FC\u30C9\u304C\u77ED\u3059\u304E\u307E\u3059 - 6\u6587\u5B57\u4EE5\u4E0A\u306B\u3057\u3066\u304F\u3060\u3055\u3044"}, - {"Unknown.Entry.Type", "\u4E0D\u660E\u306A\u30A8\u30F3\u30C8\u30EA\u30FB\u30BF\u30A4\u30D7"}, - {"Too.many.failures.Alias.not.changed", "\u969C\u5BB3\u304C\u591A\u3059\u304E\u307E\u3059\u3002\u5225\u540D\u306F\u5909\u66F4\u3055\u308C\u307E\u305B\u3093"}, - {"Entry.for.alias.alias.successfully.imported.", - "\u5225\u540D{0}\u306E\u30A8\u30F3\u30C8\u30EA\u306E\u30A4\u30F3\u30DD\u30FC\u30C8\u306B\u6210\u529F\u3057\u307E\u3057\u305F\u3002"}, - {"Entry.for.alias.alias.not.imported.", "\u5225\u540D{0}\u306E\u30A8\u30F3\u30C8\u30EA\u306F\u30A4\u30F3\u30DD\u30FC\u30C8\u3055\u308C\u307E\u305B\u3093\u3067\u3057\u305F\u3002"}, - {"Problem.importing.entry.for.alias.alias.exception.Entry.for.alias.alias.not.imported.", - "\u5225\u540D{0}\u306E\u30A8\u30F3\u30C8\u30EA\u306E\u30A4\u30F3\u30DD\u30FC\u30C8\u4E2D\u306B\u554F\u984C\u304C\u767A\u751F\u3057\u307E\u3057\u305F: {1}\u3002\n\u5225\u540D{0}\u306E\u30A8\u30F3\u30C8\u30EA\u306F\u30A4\u30F3\u30DD\u30FC\u30C8\u3055\u308C\u307E\u305B\u3093\u3067\u3057\u305F\u3002"}, - {"Import.command.completed.ok.entries.successfully.imported.fail.entries.failed.or.cancelled", - "\u30A4\u30F3\u30DD\u30FC\u30C8\u30FB\u30B3\u30DE\u30F3\u30C9\u304C\u5B8C\u4E86\u3057\u307E\u3057\u305F: {0}\u4EF6\u306E\u30A8\u30F3\u30C8\u30EA\u306E\u30A4\u30F3\u30DD\u30FC\u30C8\u304C\u6210\u529F\u3057\u307E\u3057\u305F\u3002{1}\u4EF6\u306E\u30A8\u30F3\u30C8\u30EA\u306E\u30A4\u30F3\u30DD\u30FC\u30C8\u304C\u5931\u6557\u3057\u305F\u304B\u53D6\u308A\u6D88\u3055\u308C\u307E\u3057\u305F"}, - {"Warning.Overwriting.existing.alias.alias.in.destination.keystore", - "\u8B66\u544A: \u51FA\u529B\u5148\u30AD\u30FC\u30B9\u30C8\u30A2\u5185\u306E\u65E2\u5B58\u306E\u5225\u540D{0}\u3092\u4E0A\u66F8\u304D\u3057\u3066\u3044\u307E\u3059"}, - {"Existing.entry.alias.alias.exists.overwrite.no.", - "\u65E2\u5B58\u306E\u30A8\u30F3\u30C8\u30EA\u306E\u5225\u540D{0}\u304C\u5B58\u5728\u3057\u3066\u3044\u307E\u3059\u3002\u4E0A\u66F8\u304D\u3057\u307E\u3059\u304B\u3002[\u3044\u3044\u3048]: "}, - {"Too.many.failures.try.later", "\u969C\u5BB3\u304C\u591A\u3059\u304E\u307E\u3059 - \u5F8C\u3067\u5B9F\u884C\u3057\u3066\u304F\u3060\u3055\u3044"}, - {"Certification.request.stored.in.file.filename.", - "\u8A3C\u660E\u66F8\u30EA\u30AF\u30A8\u30B9\u30C8\u304C\u30D5\u30A1\u30A4\u30EB<{0}>\u306B\u4FDD\u5B58\u3055\u308C\u307E\u3057\u305F"}, - {"Submit.this.to.your.CA", "\u3053\u308C\u3092CA\u306B\u63D0\u51FA\u3057\u3066\u304F\u3060\u3055\u3044"}, - {"if.alias.not.specified.destalias.srckeypass.and.destkeypass.must.not.be.specified", - "\u5225\u540D\u3092\u6307\u5B9A\u3057\u306A\u3044\u5834\u5408\u3001\u51FA\u529B\u5148\u30AD\u30FC\u30B9\u30C8\u30A2\u306E\u5225\u540D\u3001\u30BD\u30FC\u30B9\u30FB\u30AD\u30FC\u30B9\u30C8\u30A2\u306E\u30D1\u30B9\u30EF\u30FC\u30C9\u304A\u3088\u3073\u51FA\u529B\u5148\u30AD\u30FC\u30B9\u30C8\u30A2\u306E\u30D1\u30B9\u30EF\u30FC\u30C9\u306F\u6307\u5B9A\u3067\u304D\u307E\u305B\u3093"}, - {"Certificate.stored.in.file.filename.", - "\u8A3C\u660E\u66F8\u304C\u30D5\u30A1\u30A4\u30EB<{0}>\u306B\u4FDD\u5B58\u3055\u308C\u307E\u3057\u305F"}, - {"Certificate.reply.was.installed.in.keystore", - "\u8A3C\u660E\u66F8\u5FDC\u7B54\u304C\u30AD\u30FC\u30B9\u30C8\u30A2\u306B\u30A4\u30F3\u30B9\u30C8\u30FC\u30EB\u3055\u308C\u307E\u3057\u305F"}, - {"Certificate.reply.was.not.installed.in.keystore", - "\u8A3C\u660E\u66F8\u5FDC\u7B54\u304C\u30AD\u30FC\u30B9\u30C8\u30A2\u306B\u30A4\u30F3\u30B9\u30C8\u30FC\u30EB\u3055\u308C\u307E\u305B\u3093\u3067\u3057\u305F"}, - {"Certificate.was.added.to.keystore", - "\u8A3C\u660E\u66F8\u304C\u30AD\u30FC\u30B9\u30C8\u30A2\u306B\u8FFD\u52A0\u3055\u308C\u307E\u3057\u305F"}, - {"Certificate.was.not.added.to.keystore", - "\u8A3C\u660E\u66F8\u304C\u30AD\u30FC\u30B9\u30C8\u30A2\u306B\u8FFD\u52A0\u3055\u308C\u307E\u305B\u3093\u3067\u3057\u305F"}, - {".Storing.ksfname.", "[{0}\u3092\u683C\u7D0D\u4E2D]"}, - {"alias.has.no.public.key.certificate.", - "{0}\u306B\u306F\u516C\u958B\u9375(\u8A3C\u660E\u66F8)\u304C\u3042\u308A\u307E\u305B\u3093"}, - {"Cannot.derive.signature.algorithm", - "\u7F72\u540D\u30A2\u30EB\u30B4\u30EA\u30BA\u30E0\u3092\u53D6\u5F97\u3067\u304D\u307E\u305B\u3093"}, - {"Alias.alias.does.not.exist", - "\u5225\u540D<{0}>\u306F\u5B58\u5728\u3057\u307E\u305B\u3093"}, - {"Alias.alias.has.no.certificate", - "\u5225\u540D<{0}>\u306B\u306F\u8A3C\u660E\u66F8\u304C\u3042\u308A\u307E\u305B\u3093"}, - {"Key.pair.not.generated.alias.alias.already.exists", - "\u9375\u30DA\u30A2\u306F\u751F\u6210\u3055\u308C\u307E\u305B\u3093\u3067\u3057\u305F\u3002\u5225\u540D<{0}>\u306F\u3059\u3067\u306B\u5B58\u5728\u3057\u307E\u3059"}, - {"Generating.keysize.bit.keyAlgName.key.pair.and.self.signed.certificate.sigAlgName.with.a.validity.of.validality.days.for", - "{3}\u65E5\u9593\u6709\u52B9\u306A{0}\u30D3\u30C3\u30C8\u306E{1}\u306E\u9375\u30DA\u30A2\u3068\u81EA\u5DF1\u7F72\u540D\u578B\u8A3C\u660E\u66F8({2})\u3092\u751F\u6210\u3057\u3066\u3044\u307E\u3059\n\t\u30C7\u30A3\u30EC\u30AF\u30C8\u30EA\u540D: {4}"}, - {"Enter.key.password.for.alias.", "<{0}>\u306E\u9375\u30D1\u30B9\u30EF\u30FC\u30C9\u3092\u5165\u529B\u3057\u3066\u304F\u3060\u3055\u3044"}, - {".RETURN.if.same.as.keystore.password.", - "\t(\u30AD\u30FC\u30B9\u30C8\u30A2\u306E\u30D1\u30B9\u30EF\u30FC\u30C9\u3068\u540C\u3058\u5834\u5408\u306FRETURN\u3092\u62BC\u3057\u3066\u304F\u3060\u3055\u3044): "}, - {"Key.password.is.too.short.must.be.at.least.6.characters", - "\u9375\u306E\u30D1\u30B9\u30EF\u30FC\u30C9\u304C\u77ED\u3059\u304E\u307E\u3059 - 6\u6587\u5B57\u4EE5\u4E0A\u3092\u6307\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044"}, - {"Too.many.failures.key.not.added.to.keystore", - "\u969C\u5BB3\u304C\u591A\u3059\u304E\u307E\u3059 - \u9375\u306F\u30AD\u30FC\u30B9\u30C8\u30A2\u306B\u8FFD\u52A0\u3055\u308C\u307E\u305B\u3093\u3067\u3057\u305F"}, - {"Destination.alias.dest.already.exists", - "\u51FA\u529B\u5148\u306E\u5225\u540D<{0}>\u306F\u3059\u3067\u306B\u5B58\u5728\u3057\u307E\u3059"}, - {"Password.is.too.short.must.be.at.least.6.characters", - "\u30D1\u30B9\u30EF\u30FC\u30C9\u304C\u77ED\u3059\u304E\u307E\u3059 - 6\u6587\u5B57\u4EE5\u4E0A\u3092\u6307\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044"}, - {"Too.many.failures.Key.entry.not.cloned", - "\u969C\u5BB3\u304C\u591A\u3059\u304E\u307E\u3059\u3002\u9375\u30A8\u30F3\u30C8\u30EA\u306E\u30AF\u30ED\u30FC\u30F3\u306F\u4F5C\u6210\u3055\u308C\u307E\u305B\u3093\u3067\u3057\u305F"}, - {"key.password.for.alias.", "<{0}>\u306E\u9375\u306E\u30D1\u30B9\u30EF\u30FC\u30C9"}, - {"Keystore.entry.for.id.getName.already.exists", - "<{0}>\u306E\u30AD\u30FC\u30B9\u30C8\u30A2\u30FB\u30A8\u30F3\u30C8\u30EA\u306F\u3059\u3067\u306B\u5B58\u5728\u3057\u307E\u3059"}, - {"Creating.keystore.entry.for.id.getName.", - "<{0}>\u306E\u30AD\u30FC\u30B9\u30C8\u30A2\u30FB\u30A8\u30F3\u30C8\u30EA\u3092\u4F5C\u6210\u4E2D..."}, - {"No.entries.from.identity.database.added", - "\u30A2\u30A4\u30C7\u30F3\u30C6\u30A3\u30C6\u30A3\u30FB\u30C7\u30FC\u30BF\u30D9\u30FC\u30B9\u304B\u3089\u8FFD\u52A0\u3055\u308C\u305F\u30A8\u30F3\u30C8\u30EA\u306F\u3042\u308A\u307E\u305B\u3093"}, - {"Alias.name.alias", "\u5225\u540D: {0}"}, - {"Creation.date.keyStore.getCreationDate.alias.", - "\u4F5C\u6210\u65E5: {0,date}"}, - {"alias.keyStore.getCreationDate.alias.", - "{0},{1,date}, "}, - {"alias.", "{0}, "}, - {"Entry.type.type.", "\u30A8\u30F3\u30C8\u30EA\u30FB\u30BF\u30A4\u30D7: {0}"}, - {"Certificate.chain.length.", "\u8A3C\u660E\u66F8\u30C1\u30A7\u30FC\u30F3\u306E\u9577\u3055: "}, - {"Certificate.i.1.", "\u8A3C\u660E\u66F8[{0,number,integer}]:"}, - {"Certificate.fingerprint.SHA1.", "\u8A3C\u660E\u66F8\u306E\u30D5\u30A3\u30F3\u30AC\u30D7\u30EA\u30F3\u30C8(SHA1): "}, - {"Keystore.type.", "\u30AD\u30FC\u30B9\u30C8\u30A2\u306E\u30BF\u30A4\u30D7: "}, - {"Keystore.provider.", "\u30AD\u30FC\u30B9\u30C8\u30A2\u30FB\u30D7\u30ED\u30D0\u30A4\u30C0: "}, - {"Your.keystore.contains.keyStore.size.entry", - "\u30AD\u30FC\u30B9\u30C8\u30A2\u306B\u306F{0,number,integer}\u30A8\u30F3\u30C8\u30EA\u304C\u542B\u307E\u308C\u307E\u3059"}, - {"Your.keystore.contains.keyStore.size.entries", - "\u30AD\u30FC\u30B9\u30C8\u30A2\u306B\u306F{0,number,integer}\u30A8\u30F3\u30C8\u30EA\u304C\u542B\u307E\u308C\u307E\u3059"}, - {"Failed.to.parse.input", "\u5165\u529B\u306E\u69CB\u6587\u89E3\u6790\u306B\u5931\u6557\u3057\u307E\u3057\u305F"}, - {"Empty.input", "\u5165\u529B\u304C\u3042\u308A\u307E\u305B\u3093"}, - {"Not.X.509.certificate", "X.509\u8A3C\u660E\u66F8\u3067\u306F\u3042\u308A\u307E\u305B\u3093"}, - {"alias.has.no.public.key", "{0}\u306B\u306F\u516C\u958B\u9375\u304C\u3042\u308A\u307E\u305B\u3093"}, - {"alias.has.no.X.509.certificate", "{0}\u306B\u306FX.509\u8A3C\u660E\u66F8\u304C\u3042\u308A\u307E\u305B\u3093"}, - {"New.certificate.self.signed.", "\u65B0\u3057\u3044\u8A3C\u660E\u66F8(\u81EA\u5DF1\u7F72\u540D\u578B):"}, - {"Reply.has.no.certificates", "\u5FDC\u7B54\u306B\u306F\u8A3C\u660E\u66F8\u304C\u3042\u308A\u307E\u305B\u3093"}, - {"Certificate.not.imported.alias.alias.already.exists", - "\u8A3C\u660E\u66F8\u306F\u30A4\u30F3\u30DD\u30FC\u30C8\u3055\u308C\u307E\u305B\u3093\u3067\u3057\u305F\u3002\u5225\u540D<{0}>\u306F\u3059\u3067\u306B\u5B58\u5728\u3057\u307E\u3059"}, - {"Input.not.an.X.509.certificate", "\u5165\u529B\u306FX.509\u8A3C\u660E\u66F8\u3067\u306F\u3042\u308A\u307E\u305B\u3093"}, - {"Certificate.already.exists.in.keystore.under.alias.trustalias.", - "\u8A3C\u660E\u66F8\u306F\u3001\u5225\u540D<{0}>\u306E\u30AD\u30FC\u30B9\u30C8\u30A2\u306B\u3059\u3067\u306B\u5B58\u5728\u3057\u307E\u3059"}, - {"Do.you.still.want.to.add.it.no.", - "\u8FFD\u52A0\u3057\u307E\u3059\u304B\u3002[\u3044\u3044\u3048]: "}, - {"Certificate.already.exists.in.system.wide.CA.keystore.under.alias.trustalias.", - "\u8A3C\u660E\u66F8\u306F\u3001\u5225\u540D<{0}>\u306E\u30B7\u30B9\u30C6\u30E0\u898F\u6A21\u306ECA\u30AD\u30FC\u30B9\u30C8\u30A2\u5185\u306B\u3059\u3067\u306B\u5B58\u5728\u3057\u307E\u3059"}, - {"Do.you.still.want.to.add.it.to.your.own.keystore.no.", - "\u30AD\u30FC\u30B9\u30C8\u30A2\u306B\u8FFD\u52A0\u3057\u307E\u3059\u304B\u3002 [\u3044\u3044\u3048]: "}, - {"Trust.this.certificate.no.", "\u3053\u306E\u8A3C\u660E\u66F8\u3092\u4FE1\u983C\u3057\u307E\u3059\u304B\u3002 [\u3044\u3044\u3048]: "}, - {"YES", "\u306F\u3044"}, - {"New.prompt.", "\u65B0\u898F{0}: "}, - {"Passwords.must.differ", "\u30D1\u30B9\u30EF\u30FC\u30C9\u306F\u7570\u306A\u3063\u3066\u3044\u308B\u5FC5\u8981\u304C\u3042\u308A\u307E\u3059"}, - {"Re.enter.new.prompt.", "\u65B0\u898F{0}\u3092\u518D\u5165\u529B\u3057\u3066\u304F\u3060\u3055\u3044: "}, - {"Re.enter.new.password.", "\u65B0\u898F\u30D1\u30B9\u30EF\u30FC\u30C9\u3092\u518D\u5165\u529B\u3057\u3066\u304F\u3060\u3055\u3044: "}, - {"They.don.t.match.Try.again", "\u4E00\u81F4\u3057\u307E\u305B\u3093\u3002\u3082\u3046\u4E00\u5EA6\u5B9F\u884C\u3057\u3066\u304F\u3060\u3055\u3044"}, - {"Enter.prompt.alias.name.", "{0}\u306E\u5225\u540D\u3092\u5165\u529B\u3057\u3066\u304F\u3060\u3055\u3044: "}, - {"Enter.new.alias.name.RETURN.to.cancel.import.for.this.entry.", - "\u65B0\u3057\u3044\u5225\u540D\u3092\u5165\u529B\u3057\u3066\u304F\u3060\u3055\u3044\t(\u3053\u306E\u30A8\u30F3\u30C8\u30EA\u306E\u30A4\u30F3\u30DD\u30FC\u30C8\u3092\u53D6\u308A\u6D88\u3059\u5834\u5408\u306FRETURN\u3092\u62BC\u3057\u3066\u304F\u3060\u3055\u3044): "}, - {"Enter.alias.name.", "\u5225\u540D\u3092\u5165\u529B\u3057\u3066\u304F\u3060\u3055\u3044: "}, - {".RETURN.if.same.as.for.otherAlias.", - "\t(<{0}>\u3068\u540C\u3058\u5834\u5408\u306FRETURN\u3092\u62BC\u3057\u3066\u304F\u3060\u3055\u3044)"}, - {".PATTERN.printX509Cert", - "\u6240\u6709\u8005: {0}\n\u767A\u884C\u8005: {1}\n\u30B7\u30EA\u30A2\u30EB\u756A\u53F7: {2}\n\u6709\u52B9\u671F\u9593\u306E\u958B\u59CB\u65E5: {3}\u7D42\u4E86\u65E5: {4}\n\u8A3C\u660E\u66F8\u306E\u30D5\u30A3\u30F3\u30AC\u30D7\u30EA\u30F3\u30C8:\n\t MD5: {5}\n\t SHA1: {6}\n\t SHA256: {7}\n\t \u7F72\u540D\u30A2\u30EB\u30B4\u30EA\u30BA\u30E0\u540D: {8}\n\t \u30D0\u30FC\u30B8\u30E7\u30F3: {9}"}, - {"What.is.your.first.and.last.name.", - "\u59D3\u540D\u3092\u5165\u529B\u3057\u3066\u304F\u3060\u3055\u3044\u3002"}, - {"What.is.the.name.of.your.organizational.unit.", - "\u7D44\u7E54\u5358\u4F4D\u540D\u3092\u5165\u529B\u3057\u3066\u304F\u3060\u3055\u3044\u3002"}, - {"What.is.the.name.of.your.organization.", - "\u7D44\u7E54\u540D\u3092\u5165\u529B\u3057\u3066\u304F\u3060\u3055\u3044\u3002"}, - {"What.is.the.name.of.your.City.or.Locality.", - "\u90FD\u5E02\u540D\u307E\u305F\u306F\u5730\u57DF\u540D\u3092\u5165\u529B\u3057\u3066\u304F\u3060\u3055\u3044\u3002"}, - {"What.is.the.name.of.your.State.or.Province.", - "\u90FD\u9053\u5E9C\u770C\u540D\u3092\u5165\u529B\u3057\u3066\u304F\u3060\u3055\u3044\u3002"}, - {"What.is.the.two.letter.country.code.for.this.unit.", - "\u3053\u306E\u5358\u4F4D\u306B\u8A72\u5F53\u3059\u308B2\u6587\u5B57\u306E\u56FD\u30B3\u30FC\u30C9\u3092\u5165\u529B\u3057\u3066\u304F\u3060\u3055\u3044\u3002"}, - {"Is.name.correct.", "{0}\u3067\u3088\u308D\u3057\u3044\u3067\u3059\u304B\u3002"}, - {"no", "\u3044\u3044\u3048"}, - {"yes", "\u306F\u3044"}, - {"y", "y"}, - {".defaultValue.", " [{0}]: "}, - {"Alias.alias.has.no.key", - "\u5225\u540D<{0}>\u306B\u306F\u9375\u304C\u3042\u308A\u307E\u305B\u3093"}, - {"Alias.alias.references.an.entry.type.that.is.not.a.private.key.entry.The.keyclone.command.only.supports.cloning.of.private.key", - "\u5225\u540D<{0}>\u304C\u53C2\u7167\u3057\u3066\u3044\u308B\u30A8\u30F3\u30C8\u30EA\u30FB\u30BF\u30A4\u30D7\u306F\u79D8\u5BC6\u9375\u30A8\u30F3\u30C8\u30EA\u3067\u306F\u3042\u308A\u307E\u305B\u3093\u3002-keyclone\u30B3\u30DE\u30F3\u30C9\u306F\u79D8\u5BC6\u9375\u30A8\u30F3\u30C8\u30EA\u306E\u30AF\u30ED\u30FC\u30F3\u4F5C\u6210\u306E\u307F\u3092\u30B5\u30DD\u30FC\u30C8\u3057\u307E\u3059"}, - - {".WARNING.WARNING.WARNING.", - "*****************\u8B66\u544A \u8B66\u544A \u8B66\u544A*****************"}, - {"Signer.d.", "\u7F72\u540D\u8005\u756A\u53F7%d:"}, - {"Timestamp.", "\u30BF\u30A4\u30E0\u30B9\u30BF\u30F3\u30D7:"}, - {"Signature.", "\u7F72\u540D:"}, - {"CRLs.", "CRL:"}, - {"Certificate.owner.", "\u8A3C\u660E\u66F8\u306E\u6240\u6709\u8005: "}, - {"Not.a.signed.jar.file", "\u7F72\u540D\u4ED8\u304DJAR\u30D5\u30A1\u30A4\u30EB\u3067\u306F\u3042\u308A\u307E\u305B\u3093"}, - {"No.certificate.from.the.SSL.server", - "SSL\u30B5\u30FC\u30D0\u30FC\u304B\u3089\u306E\u8A3C\u660E\u66F8\u304C\u3042\u308A\u307E\u305B\u3093"}, - - {".The.integrity.of.the.information.stored.in.your.keystore.", - "*\u30AD\u30FC\u30B9\u30C8\u30A2\u306B\u4FDD\u5B58\u3055\u308C\u305F\u60C5\u5831\u306E\u6574\u5408\u6027\u306F*\n*\u691C\u8A3C\u3055\u308C\u3066\u3044\u307E\u305B\u3093\u3002\u6574\u5408\u6027\u3092\u691C\u8A3C\u3059\u308B\u306B\u306F*\n*\u30AD\u30FC\u30B9\u30C8\u30A2\u306E\u30D1\u30B9\u30EF\u30FC\u30C9\u3092\u5165\u529B\u3059\u308B\u5FC5\u8981\u304C\u3042\u308A\u307E\u3059\u3002*"}, - {".The.integrity.of.the.information.stored.in.the.srckeystore.", - "*\u30BD\u30FC\u30B9\u30FB\u30AD\u30FC\u30B9\u30C8\u30A2\u306B\u4FDD\u5B58\u3055\u308C\u305F\u60C5\u5831\u306E\u6574\u5408\u6027\u306F*\n*\u691C\u8A3C\u3055\u308C\u3066\u3044\u307E\u305B\u3093\u3002\u6574\u5408\u6027\u3092\u691C\u8A3C\u3059\u308B\u306B\u306F*\n*\u30BD\u30FC\u30B9\u30FB\u30AD\u30FC\u30B9\u30C8\u30A2\u306E\u30D1\u30B9\u30EF\u30FC\u30C9\u3092\u5165\u529B\u3059\u308B\u5FC5\u8981\u304C\u3042\u308A\u307E\u3059\u3002*"}, - - {"Certificate.reply.does.not.contain.public.key.for.alias.", - "\u8A3C\u660E\u66F8\u5FDC\u7B54\u306B\u306F\u3001<{0}>\u306E\u516C\u958B\u9375\u306F\u542B\u307E\u308C\u307E\u305B\u3093"}, - {"Incomplete.certificate.chain.in.reply", - "\u5FDC\u7B54\u3057\u305F\u8A3C\u660E\u66F8\u30C1\u30A7\u30FC\u30F3\u306F\u4E0D\u5B8C\u5168\u3067\u3059"}, - {"Certificate.chain.in.reply.does.not.verify.", - "\u5FDC\u7B54\u3057\u305F\u8A3C\u660E\u66F8\u30C1\u30A7\u30FC\u30F3\u306F\u691C\u8A3C\u3055\u308C\u3066\u3044\u307E\u305B\u3093: "}, - {"Top.level.certificate.in.reply.", - "\u5FDC\u7B54\u3057\u305F\u30C8\u30C3\u30D7\u30EC\u30D9\u30EB\u306E\u8A3C\u660E\u66F8:\n"}, - {".is.not.trusted.", "... \u306F\u4FE1\u983C\u3055\u308C\u3066\u3044\u307E\u305B\u3093\u3002 "}, - {"Install.reply.anyway.no.", "\u5FDC\u7B54\u3092\u30A4\u30F3\u30B9\u30C8\u30FC\u30EB\u3057\u307E\u3059\u304B\u3002[\u3044\u3044\u3048]: "}, - {"NO", "\u3044\u3044\u3048"}, - {"Public.keys.in.reply.and.keystore.don.t.match", - "\u5FDC\u7B54\u3057\u305F\u516C\u958B\u9375\u3068\u30AD\u30FC\u30B9\u30C8\u30A2\u304C\u4E00\u81F4\u3057\u307E\u305B\u3093"}, - {"Certificate.reply.and.certificate.in.keystore.are.identical", - "\u8A3C\u660E\u66F8\u5FDC\u7B54\u3068\u30AD\u30FC\u30B9\u30C8\u30A2\u5185\u306E\u8A3C\u660E\u66F8\u304C\u540C\u3058\u3067\u3059"}, - {"Failed.to.establish.chain.from.reply", - "\u5FDC\u7B54\u304B\u3089\u9023\u9396\u3092\u78BA\u7ACB\u3067\u304D\u307E\u305B\u3093\u3067\u3057\u305F"}, - {"n", "n"}, - {"Wrong.answer.try.again", "\u5FDC\u7B54\u304C\u9593\u9055\u3063\u3066\u3044\u307E\u3059\u3002\u3082\u3046\u4E00\u5EA6\u5B9F\u884C\u3057\u3066\u304F\u3060\u3055\u3044"}, - {"Secret.key.not.generated.alias.alias.already.exists", - "\u79D8\u5BC6\u9375\u306F\u751F\u6210\u3055\u308C\u307E\u305B\u3093\u3067\u3057\u305F\u3002\u5225\u540D<{0}>\u306F\u3059\u3067\u306B\u5B58\u5728\u3057\u307E\u3059"}, - {"Please.provide.keysize.for.secret.key.generation", - "\u79D8\u5BC6\u9375\u306E\u751F\u6210\u6642\u306B\u306F -keysize\u3092\u6307\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044"}, - - {"Extensions.", "\u62E1\u5F35: "}, - {".Empty.value.", "(\u7A7A\u306E\u5024)"}, - {"Extension.Request.", "\u62E1\u5F35\u30EA\u30AF\u30A8\u30B9\u30C8:"}, - {"PKCS.10.Certificate.Request.Version.1.0.Subject.s.Public.Key.s.format.s.key.", - "PKCS #10\u8A3C\u660E\u66F8\u30EA\u30AF\u30A8\u30B9\u30C8(\u30D0\u30FC\u30B8\u30E7\u30F31.0)\n\u30B5\u30D6\u30B8\u30A7\u30AF\u30C8: %s\n\u516C\u958B\u9375: %s \u30D5\u30A9\u30FC\u30DE\u30C3\u30C8 %s \u30AD\u30FC\n"}, - {"Unknown.keyUsage.type.", "\u4E0D\u660E\u306AkeyUsage\u30BF\u30A4\u30D7: "}, - {"Unknown.extendedkeyUsage.type.", "\u4E0D\u660E\u306AextendedkeyUsage\u30BF\u30A4\u30D7: "}, - {"Unknown.AccessDescription.type.", "\u4E0D\u660E\u306AAccessDescription\u30BF\u30A4\u30D7: "}, - {"Unrecognized.GeneralName.type.", "\u8A8D\u8B58\u3055\u308C\u306A\u3044GeneralName\u30BF\u30A4\u30D7: "}, - {"This.extension.cannot.be.marked.as.critical.", - "\u3053\u306E\u62E1\u5F35\u306F\u30AF\u30EA\u30C6\u30A3\u30AB\u30EB\u3068\u3057\u3066\u30DE\u30FC\u30AF\u4ED8\u3051\u3067\u304D\u307E\u305B\u3093\u3002 "}, - {"Odd.number.of.hex.digits.found.", "\u5947\u6570\u306E16\u9032\u6570\u304C\u898B\u3064\u304B\u308A\u307E\u3057\u305F: "}, - {"Unknown.extension.type.", "\u4E0D\u660E\u306A\u62E1\u5F35\u30BF\u30A4\u30D7: "}, - {"command.{0}.is.ambiguous.", "\u30B3\u30DE\u30F3\u30C9{0}\u306F\u3042\u3044\u307E\u3044\u3067\u3059:"}, - - // policytool - {"Warning.A.public.key.for.alias.signers.i.does.not.exist.Make.sure.a.KeyStore.is.properly.configured.", - "\u8B66\u544A: \u5225\u540D{0}\u306E\u516C\u958B\u9375\u304C\u5B58\u5728\u3057\u307E\u305B\u3093\u3002\u30AD\u30FC\u30B9\u30C8\u30A2\u304C\u6B63\u3057\u304F\u69CB\u6210\u3055\u308C\u3066\u3044\u308B\u3053\u3068\u3092\u78BA\u8A8D\u3057\u3066\u304F\u3060\u3055\u3044\u3002"}, - {"Warning.Class.not.found.class", "\u8B66\u544A: \u30AF\u30E9\u30B9\u304C\u898B\u3064\u304B\u308A\u307E\u305B\u3093: {0}"}, - {"Warning.Invalid.argument.s.for.constructor.arg", - "\u8B66\u544A: \u30B3\u30F3\u30B9\u30C8\u30E9\u30AF\u30BF\u306E\u5F15\u6570\u304C\u7121\u52B9\u3067\u3059: {0}"}, - {"Illegal.Principal.Type.type", "\u4E0D\u6B63\u306A\u30D7\u30EA\u30F3\u30B7\u30D1\u30EB\u306E\u30BF\u30A4\u30D7: {0}"}, - {"Illegal.option.option", "\u4E0D\u6B63\u306A\u30AA\u30D7\u30B7\u30E7\u30F3: {0}"}, - {"Usage.policytool.options.", "\u4F7F\u7528\u65B9\u6CD5: policytool [options]"}, - {".file.file.policy.file.location", - " [-file ] \u30DD\u30EA\u30B7\u30FC\u30FB\u30D5\u30A1\u30A4\u30EB\u306E\u5834\u6240"}, - {"New", "\u65B0\u898F"}, - {"Open", "\u958B\u304F"}, - {"Save", "\u4FDD\u5B58"}, - {"Save.As", "\u5225\u540D\u4FDD\u5B58"}, - {"View.Warning.Log", "\u8B66\u544A\u30ED\u30B0\u306E\u8868\u793A"}, - {"Exit", "\u7D42\u4E86"}, - {"Add.Policy.Entry", "\u30DD\u30EA\u30B7\u30FC\u30FB\u30A8\u30F3\u30C8\u30EA\u306E\u8FFD\u52A0"}, - {"Edit.Policy.Entry", "\u30DD\u30EA\u30B7\u30FC\u30FB\u30A8\u30F3\u30C8\u30EA\u306E\u7DE8\u96C6"}, - {"Remove.Policy.Entry", "\u30DD\u30EA\u30B7\u30FC\u30FB\u30A8\u30F3\u30C8\u30EA\u306E\u524A\u9664"}, - {"Edit", "\u7DE8\u96C6"}, - {"Retain", "\u4FDD\u6301"}, - - {"Warning.File.name.may.include.escaped.backslash.characters.It.is.not.necessary.to.escape.backslash.characters.the.tool.escapes", - "\u8B66\u544A: \u30D5\u30A1\u30A4\u30EB\u540D\u306B\u30A8\u30B9\u30B1\u30FC\u30D7\u3055\u308C\u305F\u30D0\u30C3\u30AF\u30B9\u30E9\u30C3\u30B7\u30E5\u6587\u5B57\u304C\u542B\u307E\u308C\u3066\u3044\u308B\u53EF\u80FD\u6027\u304C\u3042\u308A\u307E\u3059\u3002\u30D0\u30C3\u30AF\u30B9\u30E9\u30C3\u30B7\u30E5\u6587\u5B57\u3092\u30A8\u30B9\u30B1\u30FC\u30D7\u3059\u308B\u5FC5\u8981\u306F\u3042\u308A\u307E\u305B\u3093(\u30C4\u30FC\u30EB\u306F\u30DD\u30EA\u30B7\u30FC\u5185\u5BB9\u3092\u6C38\u7D9A\u30B9\u30C8\u30A2\u306B\u66F8\u304D\u8FBC\u3080\u3068\u304D\u306B\u3001\u5FC5\u8981\u306B\u5FDC\u3058\u3066\u6587\u5B57\u3092\u30A8\u30B9\u30B1\u30FC\u30D7\u3057\u307E\u3059)\u3002\n\n\u5165\u529B\u6E08\u306E\u540D\u524D\u3092\u4FDD\u6301\u3059\u308B\u306B\u306F\u300C\u4FDD\u6301\u300D\u3092\u30AF\u30EA\u30C3\u30AF\u3057\u3001\u540D\u524D\u3092\u7DE8\u96C6\u3059\u308B\u306B\u306F\u300C\u7DE8\u96C6\u300D\u3092\u30AF\u30EA\u30C3\u30AF\u3057\u3066\u304F\u3060\u3055\u3044\u3002"}, - - {"Add.Public.Key.Alias", "\u516C\u958B\u9375\u306E\u5225\u540D\u306E\u8FFD\u52A0"}, - {"Remove.Public.Key.Alias", "\u516C\u958B\u9375\u306E\u5225\u540D\u3092\u524A\u9664"}, - {"File", "\u30D5\u30A1\u30A4\u30EB"}, - {"KeyStore", "\u30AD\u30FC\u30B9\u30C8\u30A2"}, - {"Policy.File.", "\u30DD\u30EA\u30B7\u30FC\u30FB\u30D5\u30A1\u30A4\u30EB:"}, - {"Could.not.open.policy.file.policyFile.e.toString.", - "\u30DD\u30EA\u30B7\u30FC\u30FB\u30D5\u30A1\u30A4\u30EB\u3092\u958B\u3051\u307E\u305B\u3093\u3067\u3057\u305F: {0}: {1}"}, - {"Policy.Tool", "\u30DD\u30EA\u30B7\u30FC\u30FB\u30C4\u30FC\u30EB"}, - {"Errors.have.occurred.while.opening.the.policy.configuration.View.the.Warning.Log.for.more.information.", - "\u30DD\u30EA\u30B7\u30FC\u69CB\u6210\u3092\u958B\u304F\u3068\u304D\u306B\u30A8\u30E9\u30FC\u304C\u767A\u751F\u3057\u307E\u3057\u305F\u3002\u8A73\u7D30\u306F\u8B66\u544A\u30ED\u30B0\u3092\u53C2\u7167\u3057\u3066\u304F\u3060\u3055\u3044\u3002"}, - {"Error", "\u30A8\u30E9\u30FC"}, - {"OK", "OK"}, - {"Status", "\u72B6\u614B"}, - {"Warning", "\u8B66\u544A"}, - {"Permission.", - "\u30A2\u30AF\u30BB\u30B9\u6A29: "}, - {"Principal.Type.", "\u30D7\u30EA\u30F3\u30B7\u30D1\u30EB\u306E\u30BF\u30A4\u30D7:"}, - {"Principal.Name.", "\u30D7\u30EA\u30F3\u30B7\u30D1\u30EB\u306E\u540D\u524D:"}, - {"Target.Name.", - "\u30BF\u30FC\u30B2\u30C3\u30C8\u540D: "}, - {"Actions.", - "\u30A2\u30AF\u30B7\u30E7\u30F3: "}, - {"OK.to.overwrite.existing.file.filename.", - "\u65E2\u5B58\u306E\u30D5\u30A1\u30A4\u30EB{0}\u306B\u4E0A\u66F8\u304D\u3057\u307E\u3059\u304B\u3002"}, - {"Cancel", "\u53D6\u6D88"}, - {"CodeBase.", "CodeBase:"}, - {"SignedBy.", "SignedBy:"}, - {"Add.Principal", "\u30D7\u30EA\u30F3\u30B7\u30D1\u30EB\u306E\u8FFD\u52A0"}, - {"Edit.Principal", "\u30D7\u30EA\u30F3\u30B7\u30D1\u30EB\u306E\u7DE8\u96C6"}, - {"Remove.Principal", "\u30D7\u30EA\u30F3\u30B7\u30D1\u30EB\u306E\u524A\u9664"}, - {"Principals.", "\u30D7\u30EA\u30F3\u30B7\u30D1\u30EB:"}, - {".Add.Permission", " \u30A2\u30AF\u30BB\u30B9\u6A29\u306E\u8FFD\u52A0"}, - {".Edit.Permission", " \u30A2\u30AF\u30BB\u30B9\u6A29\u306E\u7DE8\u96C6"}, - {"Remove.Permission", "\u30A2\u30AF\u30BB\u30B9\u6A29\u306E\u524A\u9664"}, - {"Done", "\u5B8C\u4E86"}, - {"KeyStore.URL.", "\u30AD\u30FC\u30B9\u30C8\u30A2URL:"}, - {"KeyStore.Type.", "\u30AD\u30FC\u30B9\u30C8\u30A2\u306E\u30BF\u30A4\u30D7:"}, - {"KeyStore.Provider.", "\u30AD\u30FC\u30B9\u30C8\u30A2\u30FB\u30D7\u30ED\u30D0\u30A4\u30C0:"}, - {"KeyStore.Password.URL.", "\u30AD\u30FC\u30B9\u30C8\u30A2\u30FB\u30D1\u30B9\u30EF\u30FC\u30C9URL:"}, - {"Principals", "\u30D7\u30EA\u30F3\u30B7\u30D1\u30EB"}, - {".Edit.Principal.", " \u30D7\u30EA\u30F3\u30B7\u30D1\u30EB\u306E\u7DE8\u96C6:"}, - {".Add.New.Principal.", " \u30D7\u30EA\u30F3\u30B7\u30D1\u30EB\u306E\u65B0\u898F\u8FFD\u52A0:"}, - {"Permissions", "\u30A2\u30AF\u30BB\u30B9\u6A29"}, - {".Edit.Permission.", " \u30A2\u30AF\u30BB\u30B9\u6A29\u306E\u7DE8\u96C6:"}, - {".Add.New.Permission.", " \u65B0\u898F\u30A2\u30AF\u30BB\u30B9\u6A29\u306E\u8FFD\u52A0:"}, - {"Signed.By.", "\u7F72\u540D\u8005:"}, - {"Cannot.Specify.Principal.with.a.Wildcard.Class.without.a.Wildcard.Name", - "\u30EF\u30A4\u30EB\u30C9\u30AB\u30FC\u30C9\u540D\u306E\u306A\u3044\u30EF\u30A4\u30EB\u30C9\u30AB\u30FC\u30C9\u30FB\u30AF\u30E9\u30B9\u3092\u4F7F\u7528\u3057\u3066\u30D7\u30EA\u30F3\u30B7\u30D1\u30EB\u3092\u6307\u5B9A\u3059\u308B\u3053\u3068\u306F\u3067\u304D\u307E\u305B\u3093"}, - {"Cannot.Specify.Principal.without.a.Name", - "\u540D\u524D\u3092\u4F7F\u7528\u305B\u305A\u306B\u30D7\u30EA\u30F3\u30B7\u30D1\u30EB\u3092\u6307\u5B9A\u3059\u308B\u3053\u3068\u306F\u3067\u304D\u307E\u305B\u3093"}, - {"Permission.and.Target.Name.must.have.a.value", - "\u30A2\u30AF\u30BB\u30B9\u6A29\u3068\u30BF\u30FC\u30B2\u30C3\u30C8\u540D\u306F\u3001\u5024\u3092\u4FDD\u6301\u3059\u308B\u5FC5\u8981\u304C\u3042\u308A\u307E\u3059"}, - {"Remove.this.Policy.Entry.", "\u3053\u306E\u30DD\u30EA\u30B7\u30FC\u30FB\u30A8\u30F3\u30C8\u30EA\u3092\u524A\u9664\u3057\u307E\u3059\u304B\u3002"}, - {"Overwrite.File", "\u30D5\u30A1\u30A4\u30EB\u3092\u4E0A\u66F8\u304D\u3057\u307E\u3059"}, - {"Policy.successfully.written.to.filename", - "\u30DD\u30EA\u30B7\u30FC\u306E{0}\u3078\u306E\u66F8\u8FBC\u307F\u306B\u6210\u529F\u3057\u307E\u3057\u305F"}, - {"null.filename", "\u30D5\u30A1\u30A4\u30EB\u540D\u304Cnull\u3067\u3059"}, - {"Save.changes.", "\u5909\u66F4\u3092\u4FDD\u5B58\u3057\u307E\u3059\u304B\u3002"}, - {"Yes", "\u306F\u3044"}, - {"No", "\u3044\u3044\u3048"}, - {"Policy.Entry", "\u30DD\u30EA\u30B7\u30FC\u30FB\u30A8\u30F3\u30C8\u30EA"}, - {"Save.Changes", "\u5909\u66F4\u3092\u4FDD\u5B58\u3057\u307E\u3059"}, - {"No.Policy.Entry.selected", "\u30DD\u30EA\u30B7\u30FC\u30FB\u30A8\u30F3\u30C8\u30EA\u304C\u9078\u629E\u3055\u308C\u3066\u3044\u307E\u305B\u3093"}, - {"Unable.to.open.KeyStore.ex.toString.", - "\u30AD\u30FC\u30B9\u30C8\u30A2{0}\u3092\u958B\u3051\u307E\u305B\u3093"}, - {"No.principal.selected", "\u30D7\u30EA\u30F3\u30B7\u30D1\u30EB\u304C\u9078\u629E\u3055\u308C\u3066\u3044\u307E\u305B\u3093"}, - {"No.permission.selected", "\u30A2\u30AF\u30BB\u30B9\u6A29\u304C\u9078\u629E\u3055\u308C\u3066\u3044\u307E\u305B\u3093"}, - {"name", "\u540D\u524D"}, - {"configuration.type", "\u69CB\u6210\u30BF\u30A4\u30D7"}, - {"environment.variable.name", "\u74B0\u5883\u5909\u6570\u540D"}, - {"library.name", "\u30E9\u30A4\u30D6\u30E9\u30EA\u540D"}, - {"package.name", "\u30D1\u30C3\u30B1\u30FC\u30B8\u540D"}, - {"policy.type", "\u30DD\u30EA\u30B7\u30FC\u30FB\u30BF\u30A4\u30D7"}, - {"property.name", "\u30D7\u30ED\u30D1\u30C6\u30A3\u540D"}, - {"Principal.List", "\u30D7\u30EA\u30F3\u30B7\u30D1\u30EB\u306E\u30EA\u30B9\u30C8"}, - {"Permission.List", "\u30A2\u30AF\u30BB\u30B9\u6A29\u306E\u30EA\u30B9\u30C8"}, - {"Code.Base", "\u30B3\u30FC\u30C9\u30FB\u30D9\u30FC\u30B9"}, - {"KeyStore.U.R.L.", "\u30AD\u30FC\u30B9\u30C8\u30A2U R L:"}, - {"KeyStore.Password.U.R.L.", "\u30AD\u30FC\u30B9\u30C8\u30A2\u30FB\u30D1\u30B9\u30EF\u30FC\u30C9U R L:"}, - - // javax.security.auth.PrivateCredentialPermission {"invalid.null.input.s.", "null\u306E\u5165\u529B\u306F\u7121\u52B9\u3067\u3059"}, {"actions.can.only.be.read.", "\u30A2\u30AF\u30B7\u30E7\u30F3\u306F'\u8AAD\u8FBC\u307F'\u306E\u307F\u53EF\u80FD\u3067\u3059"}, @@ -553,6 +58,7 @@ public class Resources_ja extends java.util.ListResourceBundle { {"provided.null.OID.map", "null\u306EOID\u30DE\u30C3\u30D7\u304C\u6307\u5B9A\u3055\u308C\u307E\u3057\u305F"}, // javax.security.auth.Subject + {"NEWLINE", "\n"}, {"invalid.null.AccessControlContext.provided", "\u7121\u52B9\u306Anull AccessControlContext\u304C\u6307\u5B9A\u3055\u308C\u307E\u3057\u305F"}, {"invalid.null.action.provided", "\u7121\u52B9\u306Anull\u30A2\u30AF\u30B7\u30E7\u30F3\u304C\u6307\u5B9A\u3055\u308C\u307E\u3057\u305F"}, @@ -656,6 +162,7 @@ public class Resources_ja extends java.util.ListResourceBundle { * * @return the contents of this ResourceBundle. */ + @Override public Object[][] getContents() { return contents; } diff --git a/jdk/src/share/classes/sun/security/util/Resources_ko.java b/jdk/src/share/classes/sun/security/util/Resources_ko.java index d1ec7447783..3968919ce7a 100644 --- a/jdk/src/share/classes/sun/security/util/Resources_ko.java +++ b/jdk/src/share/classes/sun/security/util/Resources_ko.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2000, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2000, 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 @@ -34,501 +34,6 @@ public class Resources_ko extends java.util.ListResourceBundle { private static final Object[][] contents = { - // shared (from jarsigner) - {"SPACE", " "}, - {"2SPACE", " "}, - {"6SPACE", " "}, - {"COMMA", ", "}, - // shared (from keytool) - {"NEWLINE", "\n"}, - {"STAR", - "*******************************************"}, - {"STARNN", - "*******************************************\n\n"}, - - // keytool: Help part -// "Option" should be translated. - {".OPTION.", " [\uC635\uC158]..."}, - {"Options.", "\uC635\uC158:"}, - {"Use.keytool.help.for.all.available.commands", - "\uC0AC\uC6A9 \uAC00\uB2A5\uD55C \uBAA8\uB4E0 \uBA85\uB839\uC5D0 \"keytool -help\" \uC0AC\uC6A9"}, - {"Key.and.Certificate.Management.Tool", - "\uD0A4 \uBC0F \uC778\uC99D\uC11C \uAD00\uB9AC \uD234"}, - {"Commands.", "\uBA85\uB839:"}, - {"Use.keytool.command.name.help.for.usage.of.command.name", - "command_name \uC0AC\uC6A9\uBC95\uC5D0 \"keytool -command_name -help\" \uC0AC\uC6A9"}, - // keytool: help: commands - {"Generates.a.certificate.request", - "\uC778\uC99D\uC11C \uC694\uCCAD\uC744 \uC0DD\uC131\uD569\uB2C8\uB2E4."}, //-certreq - {"Changes.an.entry.s.alias", - "\uD56D\uBAA9\uC758 \uBCC4\uCE6D\uC744 \uBCC0\uACBD\uD569\uB2C8\uB2E4."}, //-changealias - {"Deletes.an.entry", - "\uD56D\uBAA9\uC744 \uC0AD\uC81C\uD569\uB2C8\uB2E4."}, //-delete - {"Exports.certificate", - "\uC778\uC99D\uC11C\uB97C \uC775\uC2A4\uD3EC\uD2B8\uD569\uB2C8\uB2E4."}, //-exportcert - {"Generates.a.key.pair", - "\uD0A4 \uC30D\uC744 \uC0DD\uC131\uD569\uB2C8\uB2E4."}, //-genkeypair -// translation of "secret" key should be different to "private" key. - {"Generates.a.secret.key", - "\uBCF4\uC548 \uD0A4\uB97C \uC0DD\uC131\uD569\uB2C8\uB2E4."}, //-genseckey - {"Generates.certificate.from.a.certificate.request", - "\uC778\uC99D\uC11C \uC694\uCCAD\uC5D0\uC11C \uC778\uC99D\uC11C\uB97C \uC0DD\uC131\uD569\uB2C8\uB2E4."}, //-gencert - {"Generates.CRL", "CRL\uC744 \uC0DD\uC131\uD569\uB2C8\uB2E4."}, //-gencrl - {"Imports.entries.from.a.JDK.1.1.x.style.identity.database", - "JDK 1.1.x \uC2A4\uD0C0\uC77C ID \uB370\uC774\uD130\uBCA0\uC774\uC2A4\uC5D0\uC11C \uD56D\uBAA9\uC744 \uC784\uD3EC\uD2B8\uD569\uB2C8\uB2E4."}, //-identitydb - {"Imports.a.certificate.or.a.certificate.chain", - "\uC778\uC99D\uC11C \uB610\uB294 \uC778\uC99D\uC11C \uCCB4\uC778\uC744 \uC784\uD3EC\uD2B8\uD569\uB2C8\uB2E4."}, //-importcert - {"Imports.one.or.all.entries.from.another.keystore", - "\uB2E4\uB978 \uD0A4 \uC800\uC7A5\uC18C\uC5D0\uC11C \uD558\uB098 \uB610\uB294 \uBAA8\uB4E0 \uD56D\uBAA9\uC744 \uC784\uD3EC\uD2B8\uD569\uB2C8\uB2E4."}, //-importkeystore - {"Clones.a.key.entry", - "\uD0A4 \uD56D\uBAA9\uC744 \uBCF5\uC81C\uD569\uB2C8\uB2E4."}, //-keyclone - {"Changes.the.key.password.of.an.entry", - "\uD56D\uBAA9\uC758 \uD0A4 \uBE44\uBC00\uBC88\uD638\uB97C \uBCC0\uACBD\uD569\uB2C8\uB2E4."}, //-keypasswd - {"Lists.entries.in.a.keystore", - "\uD0A4 \uC800\uC7A5\uC18C\uC758 \uD56D\uBAA9\uC744 \uB098\uC5F4\uD569\uB2C8\uB2E4."}, //-list - {"Prints.the.content.of.a.certificate", - "\uC778\uC99D\uC11C\uC758 \uCF58\uD150\uCE20\uB97C \uC778\uC1C4\uD569\uB2C8\uB2E4."}, //-printcert - {"Prints.the.content.of.a.certificate.request", - "\uC778\uC99D\uC11C \uC694\uCCAD\uC758 \uCF58\uD150\uCE20\uB97C \uC778\uC1C4\uD569\uB2C8\uB2E4."}, //-printcertreq - {"Prints.the.content.of.a.CRL.file", - "CRL \uD30C\uC77C\uC758 \uCF58\uD150\uCE20\uB97C \uC778\uC1C4\uD569\uB2C8\uB2E4."}, //-printcrl - {"Generates.a.self.signed.certificate", - "\uC790\uCCB4 \uC11C\uBA85\uB41C \uC778\uC99D\uC11C\uB97C \uC0DD\uC131\uD569\uB2C8\uB2E4."}, //-selfcert - {"Changes.the.store.password.of.a.keystore", - "\uD0A4 \uC800\uC7A5\uC18C\uC758 \uC800\uC7A5\uC18C \uBE44\uBC00\uBC88\uD638\uB97C \uBCC0\uACBD\uD569\uB2C8\uB2E4."}, //-storepasswd - // keytool: help: options - {"alias.name.of.the.entry.to.process", - "\uCC98\uB9AC\uD560 \uD56D\uBAA9\uC758 \uBCC4\uCE6D \uC774\uB984"}, //-alias - {"destination.alias", - "\uB300\uC0C1 \uBCC4\uCE6D"}, //-destalias - {"destination.key.password", - "\uB300\uC0C1 \uD0A4 \uBE44\uBC00\uBC88\uD638"}, //-destkeypass - {"destination.keystore.name", - "\uB300\uC0C1 \uD0A4 \uC800\uC7A5\uC18C \uC774\uB984"}, //-destkeystore - {"destination.keystore.password.protected", - "\uB300\uC0C1 \uD0A4 \uC800\uC7A5\uC18C \uBE44\uBC00\uBC88\uD638\uB85C \uBCF4\uD638\uB428"}, //-destprotected - {"destination.keystore.provider.name", - "\uB300\uC0C1 \uD0A4 \uC800\uC7A5\uC18C \uC81C\uACF5\uC790 \uC774\uB984"}, //-destprovidername - {"destination.keystore.password", - "\uB300\uC0C1 \uD0A4 \uC800\uC7A5\uC18C \uBE44\uBC00\uBC88\uD638"}, //-deststorepass - {"destination.keystore.type", - "\uB300\uC0C1 \uD0A4 \uC800\uC7A5\uC18C \uC720\uD615"}, //-deststoretype - {"distinguished.name", - "\uC2DD\uBCC4 \uC774\uB984"}, //-dname - {"X.509.extension", - "X.509 \uD655\uC7A5"}, //-ext - {"output.file.name", - "\uCD9C\uB825 \uD30C\uC77C \uC774\uB984"}, //-file and -outfile - {"input.file.name", - "\uC785\uB825 \uD30C\uC77C \uC774\uB984"}, //-file and -infile - {"key.algorithm.name", - "\uD0A4 \uC54C\uACE0\uB9AC\uC998 \uC774\uB984"}, //-keyalg - {"key.password", - "\uD0A4 \uBE44\uBC00\uBC88\uD638"}, //-keypass - {"key.bit.size", - "\uD0A4 \uBE44\uD2B8 \uD06C\uAE30"}, //-keysize - {"keystore.name", - "\uD0A4 \uC800\uC7A5\uC18C \uC774\uB984"}, //-keystore - {"new.password", - "\uC0C8 \uBE44\uBC00\uBC88\uD638"}, //-new - {"do.not.prompt", - "\uD655\uC778\uD558\uC9C0 \uC54A\uC74C"}, //-noprompt - {"password.through.protected.mechanism", - "\uBCF4\uD638\uB418\uB294 \uBA54\uCEE4\uB2C8\uC998\uC744 \uD1B5\uD55C \uBE44\uBC00\uBC88\uD638"}, //-protected - {"provider.argument", - "\uC81C\uACF5\uC790 \uC778\uC218"}, //-providerarg - {"provider.class.name", - "\uC81C\uACF5\uC790 \uD074\uB798\uC2A4 \uC774\uB984"}, //-providerclass - {"provider.name", - "\uC81C\uACF5\uC790 \uC774\uB984"}, //-providername - {"provider.classpath", - "\uC81C\uACF5\uC790 \uD074\uB798\uC2A4 \uACBD\uB85C"}, //-providerpath - {"output.in.RFC.style", - "RFC \uC2A4\uD0C0\uC77C\uC758 \uCD9C\uB825"}, //-rfc - {"signature.algorithm.name", - "\uC11C\uBA85 \uC54C\uACE0\uB9AC\uC998 \uC774\uB984"}, //-sigalg - {"source.alias", - "\uC18C\uC2A4 \uBCC4\uCE6D"}, //-srcalias - {"source.key.password", - "\uC18C\uC2A4 \uD0A4 \uBE44\uBC00\uBC88\uD638"}, //-srckeypass - {"source.keystore.name", - "\uC18C\uC2A4 \uD0A4 \uC800\uC7A5\uC18C \uC774\uB984"}, //-srckeystore - {"source.keystore.password.protected", - "\uC18C\uC2A4 \uD0A4 \uC800\uC7A5\uC18C \uBE44\uBC00\uBC88\uD638\uB85C \uBCF4\uD638\uB428"}, //-srcprotected - {"source.keystore.provider.name", - "\uC18C\uC2A4 \uD0A4 \uC800\uC7A5\uC18C \uC81C\uACF5\uC790 \uC774\uB984"}, //-srcprovidername - {"source.keystore.password", - "\uC18C\uC2A4 \uD0A4 \uC800\uC7A5\uC18C \uBE44\uBC00\uBC88\uD638"}, //-srcstorepass - {"source.keystore.type", - "\uC18C\uC2A4 \uD0A4 \uC800\uC7A5\uC18C \uC720\uD615"}, //-srcstoretype - {"SSL.server.host.and.port", - "SSL \uC11C\uBC84 \uD638\uC2A4\uD2B8 \uBC0F \uD3EC\uD2B8"}, //-sslserver - {"signed.jar.file", - "\uC11C\uBA85\uB41C jar \uD30C\uC77C"}, //=jarfile - {"certificate.validity.start.date.time", - "\uC778\uC99D\uC11C \uC720\uD6A8 \uAE30\uAC04 \uC2DC\uC791 \uB0A0\uC9DC/\uC2DC\uAC04"}, //-startdate - {"keystore.password", - "\uD0A4 \uC800\uC7A5\uC18C \uBE44\uBC00\uBC88\uD638"}, //-storepass - {"keystore.type", - "\uD0A4 \uC800\uC7A5\uC18C \uC720\uD615"}, //-storetype - {"trust.certificates.from.cacerts", - "cacerts\uC758 \uBCF4\uC548 \uC778\uC99D\uC11C"}, //-trustcacerts - {"verbose.output", - "\uC0C1\uC138 \uC815\uBCF4 \uCD9C\uB825"}, //-v - {"validity.number.of.days", - "\uC720\uD6A8 \uAE30\uAC04 \uC77C \uC218"}, //-validity - {"Serial.ID.of.cert.to.revoke", - "\uCCA0\uD68C\uD560 \uC778\uC99D\uC11C\uC758 \uC77C\uB828 ID"}, //-id - // keytool: Running part - {"keytool.error.", "keytool \uC624\uB958: "}, - {"Illegal.option.", "\uC798\uBABB\uB41C \uC635\uC158: "}, - {"Illegal.value.", "\uC798\uBABB\uB41C \uAC12: "}, - {"Unknown.password.type.", "\uC54C \uC218 \uC5C6\uB294 \uBE44\uBC00\uBC88\uD638 \uC720\uD615: "}, - {"Cannot.find.environment.variable.", - "\uD658\uACBD \uBCC0\uC218\uB97C \uCC3E\uC744 \uC218 \uC5C6\uC74C: "}, - {"Cannot.find.file.", "\uD30C\uC77C\uC744 \uCC3E\uC744 \uC218 \uC5C6\uC74C: "}, - {"Command.option.flag.needs.an.argument.", "\uBA85\uB839 \uC635\uC158 {0}\uC5D0 \uC778\uC218\uAC00 \uD544\uC694\uD569\uB2C8\uB2E4."}, - {"Warning.Different.store.and.key.passwords.not.supported.for.PKCS12.KeyStores.Ignoring.user.specified.command.value.", - "\uACBD\uACE0: \uB2E4\uB978 \uC800\uC7A5\uC18C \uBC0F \uD0A4 \uBE44\uBC00\uBC88\uD638\uB294 PKCS12 KeyStores\uC5D0 \uB300\uD574 \uC9C0\uC6D0\uB418\uC9C0 \uC54A\uC2B5\uB2C8\uB2E4. \uC0AC\uC6A9\uC790\uAC00 \uC9C0\uC815\uD55C {0} \uAC12\uC744 \uBB34\uC2DC\uD558\uB294 \uC911\uC785\uB2C8\uB2E4."}, - {".keystore.must.be.NONE.if.storetype.is.{0}", - "-storetype\uC774 {0}\uC778 \uACBD\uC6B0 -keystore\uB294 NONE\uC774\uC5B4\uC57C \uD569\uB2C8\uB2E4."}, - {"Too.many.retries.program.terminated", - "\uC7AC\uC2DC\uB3C4 \uD69F\uC218\uAC00 \uB108\uBB34 \uB9CE\uC544 \uD504\uB85C\uADF8\uB7A8\uC774 \uC885\uB8CC\uB418\uC5C8\uC2B5\uB2C8\uB2E4."}, - {".storepasswd.and.keypasswd.commands.not.supported.if.storetype.is.{0}", - "-storetype\uC774 {0}\uC778 \uACBD\uC6B0 -storepasswd \uBC0F -keypasswd \uBA85\uB839\uC774 \uC9C0\uC6D0\uB418\uC9C0 \uC54A\uC2B5\uB2C8\uB2E4."}, - {".keypasswd.commands.not.supported.if.storetype.is.PKCS12", - "-storetype\uC774 PKCS12\uC778 \uACBD\uC6B0 -keypasswd \uBA85\uB839\uC774 \uC9C0\uC6D0\uB418\uC9C0 \uC54A\uC2B5\uB2C8\uB2E4."}, - {".keypass.and.new.can.not.be.specified.if.storetype.is.{0}", - "-storetype\uC774 {0}\uC778 \uACBD\uC6B0 -keypass \uBC0F -new\uB97C \uC9C0\uC815\uD560 \uC218 \uC5C6\uC2B5\uB2C8\uB2E4."}, - {"if.protected.is.specified.then.storepass.keypass.and.new.must.not.be.specified", - "-protected\uB97C \uC9C0\uC815\uD55C \uACBD\uC6B0 -storepass, -keypass \uBC0F -new\uB97C \uC9C0\uC815\uD558\uC9C0 \uC54A\uC544\uC57C \uD569\uB2C8\uB2E4."}, - {"if.srcprotected.is.specified.then.srcstorepass.and.srckeypass.must.not.be.specified", - "-srcprotected\uB97C \uC9C0\uC815\uD55C \uACBD\uC6B0 -srcstorepass \uBC0F -srckeypass\uB97C \uC9C0\uC815\uD558\uC9C0 \uC54A\uC544\uC57C \uD569\uB2C8\uB2E4."}, - {"if.keystore.is.not.password.protected.then.storepass.keypass.and.new.must.not.be.specified", - "\uD0A4 \uC800\uC7A5\uC18C\uAC00 \uBE44\uBC00\uBC88\uD638\uB85C \uBCF4\uD638\uB418\uC9C0 \uC54A\uB294 \uACBD\uC6B0 -storepass, -keypass \uBC0F -new\uB97C \uC9C0\uC815\uD558\uC9C0 \uC54A\uC544\uC57C \uD569\uB2C8\uB2E4."}, - {"if.source.keystore.is.not.password.protected.then.srcstorepass.and.srckeypass.must.not.be.specified", - "\uC18C\uC2A4 \uD0A4 \uC800\uC7A5\uC18C\uAC00 \uBE44\uBC00\uBC88\uD638\uB85C \uBCF4\uD638\uB418\uC9C0 \uC54A\uB294 \uACBD\uC6B0 -srcstorepass \uBC0F -srckeypass\uB97C \uC9C0\uC815\uD558\uC9C0 \uC54A\uC544\uC57C \uD569\uB2C8\uB2E4."}, - {"Illegal.startdate.value", "startdate \uAC12\uC774 \uC798\uBABB\uB418\uC5C8\uC2B5\uB2C8\uB2E4."}, - {"Validity.must.be.greater.than.zero", - "\uC720\uD6A8 \uAE30\uAC04\uC740 0\uBCF4\uB2E4 \uCEE4\uC57C \uD569\uB2C8\uB2E4."}, - {"provName.not.a.provider", "{0}\uC740(\uB294) \uC81C\uACF5\uC790\uAC00 \uC544\uB2D9\uB2C8\uB2E4."}, - {"Usage.error.no.command.provided", "\uC0AC\uC6A9\uBC95 \uC624\uB958: \uBA85\uB839\uC744 \uC785\uB825\uD558\uC9C0 \uC54A\uC558\uC2B5\uB2C8\uB2E4."}, - {"Source.keystore.file.exists.but.is.empty.", "\uC18C\uC2A4 \uD0A4 \uC800\uC7A5\uC18C \uD30C\uC77C\uC774 \uC874\uC7AC\uD558\uC9C0\uB9CC \uBE44\uC5B4 \uC788\uC74C: "}, - {"Please.specify.srckeystore", "-srckeystore\uB97C \uC9C0\uC815\uD558\uC2ED\uC2DC\uC624."}, - {"Must.not.specify.both.v.and.rfc.with.list.command", - "'list' \uBA85\uB839\uC5D0 -v\uC640 -rfc\uB97C \uD568\uAED8 \uC9C0\uC815\uD558\uC9C0 \uC54A\uC544\uC57C \uD569\uB2C8\uB2E4."}, - {"Key.password.must.be.at.least.6.characters", - "\uD0A4 \uBE44\uBC00\uBC88\uD638\uB294 6\uC790 \uC774\uC0C1\uC774\uC5B4\uC57C \uD569\uB2C8\uB2E4."}, - {"New.password.must.be.at.least.6.characters", - "\uC0C8 \uBE44\uBC00\uBC88\uD638\uB294 6\uC790 \uC774\uC0C1\uC774\uC5B4\uC57C \uD569\uB2C8\uB2E4."}, - {"Keystore.file.exists.but.is.empty.", - "\uD0A4 \uC800\uC7A5\uC18C \uD30C\uC77C\uC774 \uC874\uC7AC\uD558\uC9C0\uB9CC \uBE44\uC5B4 \uC788\uC74C: "}, - {"Keystore.file.does.not.exist.", - "\uD0A4 \uC800\uC7A5\uC18C \uD30C\uC77C\uC774 \uC874\uC7AC\uD558\uC9C0 \uC54A\uC74C: "}, - {"Must.specify.destination.alias", "\uB300\uC0C1 \uBCC4\uCE6D\uC744 \uC9C0\uC815\uD574\uC57C \uD569\uB2C8\uB2E4."}, - {"Must.specify.alias", "\uBCC4\uCE6D\uC744 \uC9C0\uC815\uD574\uC57C \uD569\uB2C8\uB2E4."}, - {"Keystore.password.must.be.at.least.6.characters", - "\uD0A4 \uC800\uC7A5\uC18C \uBE44\uBC00\uBC88\uD638\uB294 6\uC790 \uC774\uC0C1\uC774\uC5B4\uC57C \uD569\uB2C8\uB2E4."}, - {"Enter.keystore.password.", "\uD0A4 \uC800\uC7A5\uC18C \uBE44\uBC00\uBC88\uD638 \uC785\uB825: "}, - {"Enter.source.keystore.password.", "\uC18C\uC2A4 \uD0A4 \uC800\uC7A5\uC18C \uBE44\uBC00\uBC88\uD638 \uC785\uB825: "}, - {"Enter.destination.keystore.password.", "\uB300\uC0C1 \uD0A4 \uC800\uC7A5\uC18C \uBE44\uBC00\uBC88\uD638 \uC785\uB825: "}, - {"Keystore.password.is.too.short.must.be.at.least.6.characters", - "\uD0A4 \uC800\uC7A5\uC18C \uBE44\uBC00\uBC88\uD638\uAC00 \uB108\uBB34 \uC9E7\uC74C - 6\uC790 \uC774\uC0C1\uC774\uC5B4\uC57C \uD569\uB2C8\uB2E4."}, - {"Unknown.Entry.Type", "\uC54C \uC218 \uC5C6\uB294 \uD56D\uBAA9 \uC720\uD615"}, - {"Too.many.failures.Alias.not.changed", "\uC624\uB958\uAC00 \uB108\uBB34 \uB9CE\uC2B5\uB2C8\uB2E4. \uBCC4\uCE6D\uC774 \uBCC0\uACBD\uB418\uC9C0 \uC54A\uC558\uC2B5\uB2C8\uB2E4."}, - {"Entry.for.alias.alias.successfully.imported.", - "{0} \uBCC4\uCE6D\uC5D0 \uB300\uD55C \uD56D\uBAA9\uC774 \uC131\uACF5\uC801\uC73C\uB85C \uC784\uD3EC\uD2B8\uB418\uC5C8\uC2B5\uB2C8\uB2E4."}, - {"Entry.for.alias.alias.not.imported.", "{0} \uBCC4\uCE6D\uC5D0 \uB300\uD55C \uD56D\uBAA9\uC774 \uC784\uD3EC\uD2B8\uB418\uC9C0 \uC54A\uC558\uC2B5\uB2C8\uB2E4."}, - {"Problem.importing.entry.for.alias.alias.exception.Entry.for.alias.alias.not.imported.", - "{0} \uBCC4\uCE6D\uC5D0 \uB300\uD55C \uD56D\uBAA9\uC744 \uC784\uD3EC\uD2B8\uD558\uB294 \uC911 \uBB38\uC81C \uBC1C\uC0DD: {1}.\n{0} \uBCC4\uCE6D\uC5D0 \uB300\uD55C \uD56D\uBAA9\uC774 \uC784\uD3EC\uD2B8\uB418\uC9C0 \uC54A\uC558\uC2B5\uB2C8\uB2E4."}, - {"Import.command.completed.ok.entries.successfully.imported.fail.entries.failed.or.cancelled", - "\uC784\uD3EC\uD2B8 \uBA85\uB839 \uC644\uB8CC: \uC131\uACF5\uC801\uC73C\uB85C \uC784\uD3EC\uD2B8\uB41C \uD56D\uBAA9\uC740 {0}\uAC1C, \uC2E4\uD328\uD558\uAC70\uB098 \uCDE8\uC18C\uB41C \uD56D\uBAA9\uC740 {1}\uAC1C\uC785\uB2C8\uB2E4."}, - {"Warning.Overwriting.existing.alias.alias.in.destination.keystore", - "\uACBD\uACE0: \uB300\uC0C1 \uD0A4 \uC800\uC7A5\uC18C\uC5D0\uC11C \uAE30\uC874 \uBCC4\uCE6D {0}\uC744(\uB97C) \uACB9\uCCD0 \uC4F0\uB294 \uC911"}, - {"Existing.entry.alias.alias.exists.overwrite.no.", - "\uAE30\uC874 \uD56D\uBAA9 \uBCC4\uCE6D {0}\uC774(\uAC00) \uC874\uC7AC\uD569\uB2C8\uB2E4. \uACB9\uCCD0 \uC4F0\uACA0\uC2B5\uB2C8\uAE4C? [\uC544\uB2C8\uC624]: "}, - {"Too.many.failures.try.later", "\uC624\uB958\uAC00 \uB108\uBB34 \uB9CE\uC74C - \uB098\uC911\uC5D0 \uC2DC\uB3C4\uD558\uC2ED\uC2DC\uC624."}, - {"Certification.request.stored.in.file.filename.", - "\uC778\uC99D \uC694\uCCAD\uC774 <{0}> \uD30C\uC77C\uC5D0 \uC800\uC7A5\uB418\uC5C8\uC2B5\uB2C8\uB2E4."}, - {"Submit.this.to.your.CA", "CA\uC5D0\uAC8C \uC81C\uCD9C\uD558\uC2ED\uC2DC\uC624."}, - {"if.alias.not.specified.destalias.srckeypass.and.destkeypass.must.not.be.specified", - "\uBCC4\uCE6D\uC744 \uC9C0\uC815\uD558\uC9C0 \uC54A\uC740 \uACBD\uC6B0 destalias, srckeypass \uBC0F destkeypass\uB97C \uC9C0\uC815\uD558\uC9C0 \uC54A\uC544\uC57C \uD569\uB2C8\uB2E4."}, - {"Certificate.stored.in.file.filename.", - "\uC778\uC99D\uC11C\uAC00 <{0}> \uD30C\uC77C\uC5D0 \uC800\uC7A5\uB418\uC5C8\uC2B5\uB2C8\uB2E4."}, - {"Certificate.reply.was.installed.in.keystore", - "\uC778\uC99D\uC11C \uD68C\uC2E0\uC774 \uD0A4 \uC800\uC7A5\uC18C\uC5D0 \uC124\uCE58\uB418\uC5C8\uC2B5\uB2C8\uB2E4."}, - {"Certificate.reply.was.not.installed.in.keystore", - "\uC778\uC99D\uC11C \uD68C\uC2E0\uC774 \uD0A4 \uC800\uC7A5\uC18C\uC5D0 \uC124\uCE58\uB418\uC9C0 \uC54A\uC558\uC2B5\uB2C8\uB2E4."}, - {"Certificate.was.added.to.keystore", - "\uC778\uC99D\uC11C\uAC00 \uD0A4 \uC800\uC7A5\uC18C\uC5D0 \uCD94\uAC00\uB418\uC5C8\uC2B5\uB2C8\uB2E4."}, - {"Certificate.was.not.added.to.keystore", - "\uC778\uC99D\uC11C\uAC00 \uD0A4 \uC800\uC7A5\uC18C\uC5D0 \uCD94\uAC00\uB418\uC9C0 \uC54A\uC558\uC2B5\uB2C8\uB2E4."}, - {".Storing.ksfname.", "[{0}\uC744(\uB97C) \uC800\uC7A5\uD558\uB294 \uC911]"}, - {"alias.has.no.public.key.certificate.", - "{0}\uC5D0 \uACF5\uC6A9 \uD0A4(\uC778\uC99D\uC11C)\uAC00 \uC5C6\uC2B5\uB2C8\uB2E4."}, - {"Cannot.derive.signature.algorithm", - "\uC11C\uBA85 \uC54C\uACE0\uB9AC\uC998\uC744 \uD30C\uC0DD\uD560 \uC218 \uC5C6\uC2B5\uB2C8\uB2E4."}, - {"Alias.alias.does.not.exist", - "<{0}> \uBCC4\uCE6D\uC774 \uC874\uC7AC\uD558\uC9C0 \uC54A\uC2B5\uB2C8\uB2E4."}, - {"Alias.alias.has.no.certificate", - "<{0}> \uBCC4\uCE6D\uC5D0 \uC778\uC99D\uC11C\uAC00 \uC5C6\uC2B5\uB2C8\uB2E4."}, - {"Key.pair.not.generated.alias.alias.already.exists", - "\uD0A4 \uC30D\uC774 \uC0DD\uC131\uB418\uC9C0 \uC54A\uC558\uC73C\uBA70 <{0}> \uBCC4\uCE6D\uC774 \uC874\uC7AC\uD569\uB2C8\uB2E4."}, - {"Generating.keysize.bit.keyAlgName.key.pair.and.self.signed.certificate.sigAlgName.with.a.validity.of.validality.days.for", - "\uB2E4\uC74C\uC5D0 \uB300\uD574 \uC720\uD6A8 \uAE30\uAC04\uC774 {3}\uC77C\uC778 {0}\uBE44\uD2B8 {1} \uD0A4 \uC30D \uBC0F \uC790\uCCB4 \uC11C\uBA85\uB41C \uC778\uC99D\uC11C({2})\uB97C \uC0DD\uC131\uD558\uB294 \uC911\n\t: {4}"}, - {"Enter.key.password.for.alias.", "<{0}>\uC5D0 \uB300\uD55C \uD0A4 \uBE44\uBC00\uBC88\uD638\uB97C \uC785\uB825\uD558\uC2ED\uC2DC\uC624."}, - {".RETURN.if.same.as.keystore.password.", - "\t(\uD0A4 \uC800\uC7A5\uC18C \uBE44\uBC00\uBC88\uD638\uC640 \uB3D9\uC77C\uD55C \uACBD\uC6B0 Enter \uD0A4\uB97C \uB204\uB984): "}, - {"Key.password.is.too.short.must.be.at.least.6.characters", - "\uD0A4 \uBE44\uBC00\uBC88\uD638\uAC00 \uB108\uBB34 \uC9E7\uC74C - 6\uC790 \uC774\uC0C1\uC774\uC5B4\uC57C \uD569\uB2C8\uB2E4."}, - {"Too.many.failures.key.not.added.to.keystore", - "\uC624\uB958\uAC00 \uB108\uBB34 \uB9CE\uC74C - \uD0A4 \uC800\uC7A5\uC18C\uC5D0 \uD0A4\uAC00 \uCD94\uAC00\uB418\uC9C0 \uC54A\uC558\uC2B5\uB2C8\uB2E4."}, - {"Destination.alias.dest.already.exists", - "\uB300\uC0C1 \uBCC4\uCE6D <{0}>\uC774(\uAC00) \uC874\uC7AC\uD569\uB2C8\uB2E4."}, - {"Password.is.too.short.must.be.at.least.6.characters", - "\uBE44\uBC00\uBC88\uD638\uAC00 \uB108\uBB34 \uC9E7\uC74C - 6\uC790 \uC774\uC0C1\uC774\uC5B4\uC57C \uD569\uB2C8\uB2E4."}, - {"Too.many.failures.Key.entry.not.cloned", - "\uC624\uB958\uAC00 \uB108\uBB34 \uB9CE\uC2B5\uB2C8\uB2E4. \uD0A4 \uD56D\uBAA9\uC774 \uBCF5\uC81C\uB418\uC9C0 \uC54A\uC558\uC2B5\uB2C8\uB2E4."}, - {"key.password.for.alias.", "<{0}>\uC5D0 \uB300\uD55C \uD0A4 \uBE44\uBC00\uBC88\uD638"}, - {"Keystore.entry.for.id.getName.already.exists", - "<{0}>\uC5D0 \uB300\uD55C \uD0A4 \uC800\uC7A5\uC18C \uD56D\uBAA9\uC774 \uC874\uC7AC\uD569\uB2C8\uB2E4."}, - {"Creating.keystore.entry.for.id.getName.", - "<{0}>\uC5D0 \uB300\uD55C \uD0A4 \uC800\uC7A5\uC18C \uD56D\uBAA9\uC744 \uC0DD\uC131\uD558\uB294 \uC911..."}, - {"No.entries.from.identity.database.added", - "ID \uB370\uC774\uD130\uBCA0\uC774\uC2A4\uC5D0\uC11C \uCD94\uAC00\uB41C \uD56D\uBAA9\uC774 \uC5C6\uC2B5\uB2C8\uB2E4."}, - {"Alias.name.alias", "\uBCC4\uCE6D \uC774\uB984: {0}"}, - {"Creation.date.keyStore.getCreationDate.alias.", - "\uC0DD\uC131 \uB0A0\uC9DC: {0,date}"}, - {"alias.keyStore.getCreationDate.alias.", - "{0}, {1,date}, "}, - {"alias.", "{0}, "}, - {"Entry.type.type.", "\uD56D\uBAA9 \uC720\uD615: {0}"}, - {"Certificate.chain.length.", "\uC778\uC99D\uC11C \uCCB4\uC778 \uAE38\uC774: "}, - {"Certificate.i.1.", "\uC778\uC99D\uC11C[{0,number,integer}]:"}, - {"Certificate.fingerprint.SHA1.", "\uC778\uC99D\uC11C \uC9C0\uBB38(SHA1): "}, - {"Keystore.type.", "\uD0A4 \uC800\uC7A5\uC18C \uC720\uD615: "}, - {"Keystore.provider.", "\uD0A4 \uC800\uC7A5\uC18C \uC81C\uACF5\uC790: "}, - {"Your.keystore.contains.keyStore.size.entry", - "\uD0A4 \uC800\uC7A5\uC18C\uC5D0 {0,number,integer}\uAC1C\uC758 \uD56D\uBAA9\uC774 \uD3EC\uD568\uB418\uC5B4 \uC788\uC2B5\uB2C8\uB2E4."}, - {"Your.keystore.contains.keyStore.size.entries", - "\uD0A4 \uC800\uC7A5\uC18C\uC5D0 {0,number,integer}\uAC1C\uC758 \uD56D\uBAA9\uC774 \uD3EC\uD568\uB418\uC5B4 \uC788\uC2B5\uB2C8\uB2E4."}, - {"Failed.to.parse.input", "\uC785\uB825\uAC12\uC758 \uAD6C\uBB38 \uBD84\uC11D\uC744 \uC2E4\uD328\uD588\uC2B5\uB2C8\uB2E4."}, - {"Empty.input", "\uC785\uB825\uAC12\uC774 \uBE44\uC5B4 \uC788\uC2B5\uB2C8\uB2E4."}, - {"Not.X.509.certificate", "X.509 \uC778\uC99D\uC11C\uAC00 \uC544\uB2D9\uB2C8\uB2E4."}, - {"alias.has.no.public.key", "{0}\uC5D0 \uACF5\uC6A9 \uD0A4\uAC00 \uC5C6\uC2B5\uB2C8\uB2E4."}, - {"alias.has.no.X.509.certificate", "{0}\uC5D0 X.509 \uC778\uC99D\uC11C\uAC00 \uC5C6\uC2B5\uB2C8\uB2E4."}, - {"New.certificate.self.signed.", "\uC0C8 \uC778\uC99D\uC11C(\uC790\uCCB4 \uC11C\uBA85):"}, - {"Reply.has.no.certificates", "\uD68C\uC2E0\uC5D0 \uC778\uC99D\uC11C\uAC00 \uC5C6\uC2B5\uB2C8\uB2E4."}, - {"Certificate.not.imported.alias.alias.already.exists", - "\uC778\uC99D\uC11C\uAC00 \uC784\uD3EC\uD2B8\uB418\uC9C0 \uC54A\uC558\uC73C\uBA70 <{0}> \uBCC4\uCE6D\uC774 \uC874\uC7AC\uD569\uB2C8\uB2E4."}, - {"Input.not.an.X.509.certificate", "\uC785\uB825\uC774 X.509 \uC778\uC99D\uC11C\uAC00 \uC544\uB2D9\uB2C8\uB2E4."}, - {"Certificate.already.exists.in.keystore.under.alias.trustalias.", - "\uC778\uC99D\uC11C\uAC00 <{0}> \uBCC4\uCE6D \uC544\uB798\uC758 \uD0A4 \uC800\uC7A5\uC18C\uC5D0 \uC874\uC7AC\uD569\uB2C8\uB2E4."}, - {"Do.you.still.want.to.add.it.no.", - "\uCD94\uAC00\uD558\uACA0\uC2B5\uB2C8\uAE4C? [\uC544\uB2C8\uC624]: "}, - {"Certificate.already.exists.in.system.wide.CA.keystore.under.alias.trustalias.", - "\uC778\uC99D\uC11C\uAC00 <{0}> \uBCC4\uCE6D \uC544\uB798\uC5D0 \uC788\uB294 \uC2DC\uC2A4\uD15C \uCC28\uC6D0\uC758 CA \uD0A4 \uC800\uC7A5\uC18C\uC5D0 \uC874\uC7AC\uD569\uB2C8\uB2E4."}, - {"Do.you.still.want.to.add.it.to.your.own.keystore.no.", - "\uACE0\uC720\uD55C \uD0A4 \uC800\uC7A5\uC18C\uC5D0 \uCD94\uAC00\uD558\uACA0\uC2B5\uB2C8\uAE4C? [\uC544\uB2C8\uC624]: "}, - {"Trust.this.certificate.no.", "\uC774 \uC778\uC99D\uC11C\uB97C \uC2E0\uB8B0\uD569\uB2C8\uAE4C? [\uC544\uB2C8\uC624]: "}, - {"YES", "\uC608"}, - {"New.prompt.", "\uC0C8 {0}: "}, - {"Passwords.must.differ", "\uBE44\uBC00\uBC88\uD638\uB294 \uB2EC\uB77C\uC57C \uD569\uB2C8\uB2E4."}, - {"Re.enter.new.prompt.", "\uC0C8 {0} \uB2E4\uC2DC \uC785\uB825: "}, - {"Re.enter.new.password.", "\uC0C8 \uBE44\uBC00\uBC88\uD638 \uB2E4\uC2DC \uC785\uB825: "}, - {"They.don.t.match.Try.again", "\uC77C\uCE58\uD558\uC9C0 \uC54A\uC2B5\uB2C8\uB2E4. \uB2E4\uC2DC \uC2DC\uB3C4\uD558\uC2ED\uC2DC\uC624."}, - {"Enter.prompt.alias.name.", "{0} \uBCC4\uCE6D \uC774\uB984 \uC785\uB825: "}, - {"Enter.new.alias.name.RETURN.to.cancel.import.for.this.entry.", - "\uC0C8 \uBCC4\uCE6D \uC774\uB984 \uC785\uB825\t(\uC774 \uD56D\uBAA9\uC5D0 \uB300\uD55C \uC784\uD3EC\uD2B8\uB97C \uCDE8\uC18C\uD558\uB824\uBA74 Enter \uD0A4\uB97C \uB204\uB984): "}, - {"Enter.alias.name.", "\uBCC4\uCE6D \uC774\uB984 \uC785\uB825: "}, - {".RETURN.if.same.as.for.otherAlias.", - "\t(<{0}>\uACFC(\uC640) \uB3D9\uC77C\uD55C \uACBD\uC6B0 Enter \uD0A4\uB97C \uB204\uB984)"}, - {".PATTERN.printX509Cert", - "\uC18C\uC720\uC790: {0}\n\uBC1C\uD589\uC790: {1}\n\uC77C\uB828 \uBC88\uD638: {2}\n\uC801\uD569\uD55C \uC2DC\uC791 \uB0A0\uC9DC: {3}, \uC885\uB8CC \uB0A0\uC9DC: {4}\n\uC778\uC99D\uC11C \uC9C0\uBB38:\n\t MD5: {5}\n\t SHA1: {6}\n\t SHA256: {7}\n\t \uC11C\uBA85 \uC54C\uACE0\uB9AC\uC998 \uC774\uB984: {8}\n\t \uBC84\uC804: {9}"}, - {"What.is.your.first.and.last.name.", - "\uC774\uB984\uACFC \uC131\uC744 \uC785\uB825\uD558\uC2ED\uC2DC\uC624."}, - {"What.is.the.name.of.your.organizational.unit.", - "\uC870\uC9C1 \uB2E8\uC704 \uC774\uB984\uC744 \uC785\uB825\uD558\uC2ED\uC2DC\uC624."}, - {"What.is.the.name.of.your.organization.", - "\uC870\uC9C1 \uC774\uB984\uC744 \uC785\uB825\uD558\uC2ED\uC2DC\uC624."}, - {"What.is.the.name.of.your.City.or.Locality.", - "\uAD6C/\uAD70/\uC2DC \uC774\uB984\uC744 \uC785\uB825\uD558\uC2ED\uC2DC\uC624?"}, - {"What.is.the.name.of.your.State.or.Province.", - "\uC2DC/\uB3C4 \uC774\uB984\uC744 \uC785\uB825\uD558\uC2ED\uC2DC\uC624."}, - {"What.is.the.two.letter.country.code.for.this.unit.", - "\uC774 \uC870\uC9C1\uC758 \uB450 \uC790\uB9AC \uAD6D\uAC00 \uCF54\uB4DC\uB97C \uC785\uB825\uD558\uC2ED\uC2DC\uC624."}, - {"Is.name.correct.", "{0}\uC774(\uAC00) \uB9DE\uC2B5\uB2C8\uAE4C?"}, - {"no", "\uC544\uB2C8\uC624"}, - {"yes", "\uC608"}, - {"y", "y"}, - {".defaultValue.", " [{0}]: "}, - {"Alias.alias.has.no.key", - "<{0}> \uBCC4\uCE6D\uC5D0 \uD0A4\uAC00 \uC5C6\uC2B5\uB2C8\uB2E4."}, - {"Alias.alias.references.an.entry.type.that.is.not.a.private.key.entry.The.keyclone.command.only.supports.cloning.of.private.key", - "<{0}> \uBCC4\uCE6D\uC740 \uC804\uC6A9 \uD0A4 \uD56D\uBAA9\uC774 \uC544\uB2CC \uD56D\uBAA9 \uC720\uD615\uC744 \uCC38\uC870\uD569\uB2C8\uB2E4. -keyclone \uBA85\uB839\uC740 \uC804\uC6A9 \uD0A4 \uD56D\uBAA9\uC758 \uBCF5\uC81C\uB9CC \uC9C0\uC6D0\uD569\uB2C8\uB2E4."}, - - {".WARNING.WARNING.WARNING.", - "***************** \uACBD\uACE0 \uACBD\uACE0 \uACBD\uACE0 *****************"}, - {"Signer.d.", "\uC11C\uBA85\uC790 #%d:"}, - {"Timestamp.", "\uC2DC\uAC04 \uAE30\uB85D:"}, - {"Signature.", "\uC11C\uBA85:"}, - {"CRLs.", "CRL:"}, - {"Certificate.owner.", "\uC778\uC99D\uC11C \uC18C\uC720\uC790: "}, - {"Not.a.signed.jar.file", "\uC11C\uBA85\uB41C jar \uD30C\uC77C\uC774 \uC544\uB2D9\uB2C8\uB2E4."}, - {"No.certificate.from.the.SSL.server", - "SSL \uC11C\uBC84\uC5D0\uC11C \uAC00\uC838\uC628 \uC778\uC99D\uC11C\uAC00 \uC5C6\uC2B5\uB2C8\uB2E4."}, - - {".The.integrity.of.the.information.stored.in.your.keystore.", - "* \uD0A4 \uC800\uC7A5\uC18C\uC5D0 \uC800\uC7A5\uB41C \uC815\uBCF4\uC758 \uBB34\uACB0\uC131\uC774 *\n* \uD655\uC778\uB418\uC9C0 \uC54A\uC558\uC2B5\uB2C8\uB2E4! \uBB34\uACB0\uC131\uC744 \uD655\uC778\uD558\uB824\uBA74, *\n* \uD0A4 \uC800\uC7A5\uC18C \uBE44\uBC00\uBC88\uD638\uB97C \uC81C\uACF5\uD574\uC57C \uD569\uB2C8\uB2E4. *"}, - {".The.integrity.of.the.information.stored.in.the.srckeystore.", - "* srckeystore\uC5D0 \uC800\uC7A5\uB41C \uC815\uBCF4\uC758 \uBB34\uACB0\uC131\uC774 *\n* \uD655\uC778\uB418\uC9C0 \uC54A\uC558\uC2B5\uB2C8\uB2E4! \uBB34\uACB0\uC131\uC744 \uD655\uC778\uD558\uB824\uBA74, *\n* srckeystore \uBE44\uBC00\uBC88\uD638\uB97C \uC81C\uACF5\uD574\uC57C \uD569\uB2C8\uB2E4. *"}, - - {"Certificate.reply.does.not.contain.public.key.for.alias.", - "\uC778\uC99D\uC11C \uD68C\uC2E0\uC5D0 <{0}>\uC5D0 \uB300\uD55C \uACF5\uC6A9 \uD0A4\uAC00 \uD3EC\uD568\uB418\uC5B4 \uC788\uC9C0 \uC54A\uC2B5\uB2C8\uB2E4."}, - {"Incomplete.certificate.chain.in.reply", - "\uD68C\uC2E0\uC5D0 \uBD88\uC644\uC804\uD55C \uC778\uC99D\uC11C \uCCB4\uC778\uC774 \uC788\uC2B5\uB2C8\uB2E4."}, - {"Certificate.chain.in.reply.does.not.verify.", - "\uD68C\uC2E0\uC758 \uC778\uC99D\uC11C \uCCB4\uC778\uC774 \uD655\uC778\uB418\uC9C0 \uC54A\uC74C: "}, - {"Top.level.certificate.in.reply.", - "\uD68C\uC2E0\uC5D0 \uCD5C\uC0C1\uC704 \uB808\uBCA8 \uC778\uC99D\uC11C\uAC00 \uC788\uC74C:\n"}, - {".is.not.trusted.", "...\uC744(\uB97C) \uC2E0\uB8B0\uD560 \uC218 \uC5C6\uC2B5\uB2C8\uB2E4. "}, - {"Install.reply.anyway.no.", "\uD68C\uC2E0\uC744 \uC124\uCE58\uD558\uACA0\uC2B5\uB2C8\uAE4C? [\uC544\uB2C8\uC624]: "}, - {"NO", "\uC544\uB2C8\uC624"}, - {"Public.keys.in.reply.and.keystore.don.t.match", - "\uD68C\uC2E0\uACFC \uD0A4 \uC800\uC7A5\uC18C\uC758 \uACF5\uC6A9 \uD0A4\uAC00 \uC77C\uCE58\uD558\uC9C0 \uC54A\uC2B5\uB2C8\uB2E4."}, - {"Certificate.reply.and.certificate.in.keystore.are.identical", - "\uD68C\uC2E0\uACFC \uD0A4 \uC800\uC7A5\uC18C\uC758 \uC778\uC99D\uC11C\uAC00 \uB3D9\uC77C\uD569\uB2C8\uB2E4."}, - {"Failed.to.establish.chain.from.reply", - "\uD68C\uC2E0\uC758 \uCCB4\uC778 \uC124\uC815\uC744 \uC2E4\uD328\uD588\uC2B5\uB2C8\uB2E4."}, - {"n", "n"}, - {"Wrong.answer.try.again", "\uC798\uBABB\uB41C \uC751\uB2F5\uC785\uB2C8\uB2E4. \uB2E4\uC2DC \uC2DC\uB3C4\uD558\uC2ED\uC2DC\uC624."}, - {"Secret.key.not.generated.alias.alias.already.exists", - "\uBCF4\uC548 \uD0A4\uAC00 \uC0DD\uC131\uB418\uC9C0 \uC54A\uC558\uC73C\uBA70 <{0}> \uBCC4\uCE6D\uC774 \uC874\uC7AC\uD569\uB2C8\uB2E4."}, - {"Please.provide.keysize.for.secret.key.generation", - "\uBCF4\uC548 \uD0A4\uB97C \uC0DD\uC131\uD558\uB824\uBA74 -keysize\uB97C \uC81C\uACF5\uD558\uC2ED\uC2DC\uC624."}, - - {"Extensions.", "\uD655\uC7A5: "}, - {".Empty.value.", "(\uBE44\uC5B4 \uC788\uB294 \uAC12)"}, - {"Extension.Request.", "\uD655\uC7A5 \uC694\uCCAD:"}, - {"PKCS.10.Certificate.Request.Version.1.0.Subject.s.Public.Key.s.format.s.key.", - "PKCS #10 \uC778\uC99D\uC11C \uC694\uCCAD(1.0 \uBC84\uC804)\n\uC81C\uBAA9: %s\n\uACF5\uC6A9 \uD0A4: %s \uD615\uC2DD %s \uD0A4\n"}, - {"Unknown.keyUsage.type.", "\uC54C \uC218 \uC5C6\uB294 keyUsage \uC720\uD615: "}, - {"Unknown.extendedkeyUsage.type.", "\uC54C \uC218 \uC5C6\uB294 extendedkeyUsage \uC720\uD615: "}, - {"Unknown.AccessDescription.type.", "\uC54C \uC218 \uC5C6\uB294 AccessDescription \uC720\uD615: "}, - {"Unrecognized.GeneralName.type.", "\uC54C \uC218 \uC5C6\uB294 GeneralName \uC720\uD615: "}, - {"This.extension.cannot.be.marked.as.critical.", - "\uC774 \uD655\uC7A5\uC740 \uC911\uC694\uD55C \uAC83\uC73C\uB85C \uD45C\uC2DC\uD560 \uC218 \uC5C6\uC2B5\uB2C8\uB2E4. "}, - {"Odd.number.of.hex.digits.found.", "\uD640\uC218 \uAC1C\uC758 16\uC9C4\uC218\uAC00 \uBC1C\uACAC\uB428: "}, - {"Unknown.extension.type.", "\uC54C \uC218 \uC5C6\uB294 \uD655\uC7A5 \uC720\uD615: "}, - {"command.{0}.is.ambiguous.", "{0} \uBA85\uB839\uC774 \uBAA8\uD638\uD568:"}, - - // policytool - {"Warning.A.public.key.for.alias.signers.i.does.not.exist.Make.sure.a.KeyStore.is.properly.configured.", - "\uACBD\uACE0: {0} \uBCC4\uCE6D\uC5D0 \uB300\uD55C \uACF5\uC6A9 \uD0A4\uAC00 \uC874\uC7AC\uD558\uC9C0 \uC54A\uC2B5\uB2C8\uB2E4. \uD0A4 \uC800\uC7A5\uC18C\uAC00 \uC81C\uB300\uB85C \uAD6C\uC131\uB418\uC5B4 \uC788\uB294\uC9C0 \uD655\uC778\uD558\uC2ED\uC2DC\uC624."}, - {"Warning.Class.not.found.class", "\uACBD\uACE0: \uD074\uB798\uC2A4\uB97C \uCC3E\uC744 \uC218 \uC5C6\uC74C: {0}"}, - {"Warning.Invalid.argument.s.for.constructor.arg", - "\uACBD\uACE0: \uC0DD\uC131\uC790\uC5D0 \uB300\uD574 \uBD80\uC801\uD569\uD55C \uC778\uC218: {0}"}, - {"Illegal.Principal.Type.type", "\uC798\uBABB\uB41C \uC8FC\uCCB4 \uC720\uD615: {0}"}, - {"Illegal.option.option", "\uC798\uBABB\uB41C \uC635\uC158: {0}"}, - {"Usage.policytool.options.", "\uC0AC\uC6A9\uBC95: policytool [options]"}, - {".file.file.policy.file.location", - " [-file ] \uC815\uCC45 \uD30C\uC77C \uC704\uCE58"}, - {"New", "\uC0C8\uB85C \uB9CC\uB4E4\uAE30"}, - {"Open", "\uC5F4\uAE30"}, - {"Save", "\uC800\uC7A5"}, - {"Save.As", "\uB2E4\uB978 \uC774\uB984\uC73C\uB85C \uC800\uC7A5"}, - {"View.Warning.Log", "\uACBD\uACE0 \uB85C\uADF8 \uBCF4\uAE30"}, - {"Exit", "\uC885\uB8CC"}, - {"Add.Policy.Entry", "\uC815\uCC45 \uD56D\uBAA9 \uCD94\uAC00"}, - {"Edit.Policy.Entry", "\uC815\uCC45 \uD56D\uBAA9 \uD3B8\uC9D1"}, - {"Remove.Policy.Entry", "\uC815\uCC45 \uD56D\uBAA9 \uC81C\uAC70"}, - {"Edit", "\uD3B8\uC9D1"}, - {"Retain", "\uC720\uC9C0"}, - - {"Warning.File.name.may.include.escaped.backslash.characters.It.is.not.necessary.to.escape.backslash.characters.the.tool.escapes", - "\uACBD\uACE0: \uD30C\uC77C \uC774\uB984\uC5D0 \uC774\uC2A4\uCF00\uC774\uD504\uB41C \uBC31\uC2AC\uB798\uC2DC \uBB38\uC790\uAC00 \uD3EC\uD568\uB418\uC5C8\uC744 \uC218 \uC788\uC2B5\uB2C8\uB2E4. \uBC31\uC2AC\uB798\uC2DC \uBB38\uC790\uB294 \uC774\uC2A4\uCF00\uC774\uD504\uD560 \uD544\uC694\uAC00 \uC5C6\uC2B5\uB2C8\uB2E4. \uC601\uAD6C \uC800\uC7A5\uC18C\uC5D0 \uC815\uCC45 \uCF58\uD150\uCE20\uB97C \uC4F8 \uB54C \uD544\uC694\uC5D0 \uB530\uB77C \uC790\uB3D9\uC73C\uB85C \uBB38\uC790\uAC00 \uC774\uC2A4\uCF00\uC774\uD504\uB429\uB2C8\uB2E4.\n\n\uC785\uB825\uB41C \uC774\uB984\uC744 \uADF8\uB300\uB85C \uC720\uC9C0\uD558\uB824\uBA74 [\uC720\uC9C0]\uB97C \uB204\uB974\uACE0, \uC774\uB984\uC744 \uD3B8\uC9D1\uD558\uB824\uBA74 [\uD3B8\uC9D1]\uC744 \uB204\uB974\uC2ED\uC2DC\uC624."}, - - {"Add.Public.Key.Alias", "\uACF5\uC6A9 \uD0A4 \uBCC4\uCE6D \uCD94\uAC00"}, - {"Remove.Public.Key.Alias", "\uACF5\uC6A9 \uD0A4 \uBCC4\uCE6D \uC81C\uAC70"}, - {"File", "\uD30C\uC77C"}, - {"KeyStore", "\uD0A4 \uC800\uC7A5\uC18C"}, - {"Policy.File.", "\uC815\uCC45 \uD30C\uC77C:"}, - {"Could.not.open.policy.file.policyFile.e.toString.", - "\uC815\uCC45 \uD30C\uC77C\uC744 \uC5F4 \uC218 \uC5C6\uC74C: {0}: {1}"}, - {"Policy.Tool", "\uC815\uCC45 \uD234"}, - {"Errors.have.occurred.while.opening.the.policy.configuration.View.the.Warning.Log.for.more.information.", - "\uC815\uCC45 \uAD6C\uC131\uC744 \uC5EC\uB294 \uC911 \uC624\uB958\uAC00 \uBC1C\uC0DD\uD588\uC2B5\uB2C8\uB2E4. \uC790\uC138\uD55C \uB0B4\uC6A9\uC740 \uACBD\uACE0 \uB85C\uADF8\uB97C \uD655\uC778\uD558\uC2ED\uC2DC\uC624."}, - {"Error", "\uC624\uB958"}, - {"OK", "\uD655\uC778"}, - {"Status", "\uC0C1\uD0DC"}, - {"Warning", "\uACBD\uACE0"}, - {"Permission.", - "\uAD8C\uD55C: "}, - {"Principal.Type.", "\uC8FC\uCCB4 \uC720\uD615:"}, - {"Principal.Name.", "\uC8FC\uCCB4 \uC774\uB984:"}, - {"Target.Name.", - "\uB300\uC0C1 \uC774\uB984: "}, - {"Actions.", - "\uC791\uC5C5: "}, - {"OK.to.overwrite.existing.file.filename.", - "\uAE30\uC874 \uD30C\uC77C {0}\uC744(\uB97C) \uACB9\uCCD0 \uC4F0\uACA0\uC2B5\uB2C8\uAE4C?"}, - {"Cancel", "\uCDE8\uC18C"}, - {"CodeBase.", "CodeBase:"}, - {"SignedBy.", "SignedBy:"}, - {"Add.Principal", "\uC8FC\uCCB4 \uCD94\uAC00"}, - {"Edit.Principal", "\uC8FC\uCCB4 \uD3B8\uC9D1"}, - {"Remove.Principal", "\uC8FC\uCCB4 \uC81C\uAC70"}, - {"Principals.", "\uC8FC\uCCB4:"}, - {".Add.Permission", " \uAD8C\uD55C \uCD94\uAC00"}, - {".Edit.Permission", " \uAD8C\uD55C \uD3B8\uC9D1"}, - {"Remove.Permission", "\uAD8C\uD55C \uC81C\uAC70"}, - {"Done", "\uC644\uB8CC"}, - {"KeyStore.URL.", "\uD0A4 \uC800\uC7A5\uC18C URL:"}, - {"KeyStore.Type.", "\uD0A4 \uC800\uC7A5\uC18C \uC720\uD615:"}, - {"KeyStore.Provider.", "\uD0A4 \uC800\uC7A5\uC18C \uC81C\uACF5\uC790:"}, - {"KeyStore.Password.URL.", "\uD0A4 \uC800\uC7A5\uC18C \uBE44\uBC00\uBC88\uD638 URL:"}, - {"Principals", "\uC8FC\uCCB4"}, - {".Edit.Principal.", " \uC8FC\uCCB4 \uD3B8\uC9D1:"}, - {".Add.New.Principal.", " \uC0C8 \uC8FC\uCCB4 \uCD94\uAC00:"}, - {"Permissions", "\uAD8C\uD55C"}, - {".Edit.Permission.", " \uAD8C\uD55C \uD3B8\uC9D1:"}, - {".Add.New.Permission.", " \uC0C8 \uAD8C\uD55C \uCD94\uAC00:"}, - {"Signed.By.", "\uC11C\uBA85\uC790:"}, - {"Cannot.Specify.Principal.with.a.Wildcard.Class.without.a.Wildcard.Name", - "\uC640\uC77C\uB4DC \uCE74\uB4DC \uBB38\uC790 \uC774\uB984 \uC5C6\uC774 \uC640\uC77C\uB4DC \uCE74\uB4DC \uBB38\uC790 \uD074\uB798\uC2A4\uB97C \uC0AC\uC6A9\uD558\uB294 \uC8FC\uCCB4\uB97C \uC9C0\uC815\uD560 \uC218 \uC5C6\uC2B5\uB2C8\uB2E4."}, - {"Cannot.Specify.Principal.without.a.Name", - "\uC774\uB984 \uC5C6\uC774 \uC8FC\uCCB4\uB97C \uC9C0\uC815\uD560 \uC218 \uC5C6\uC2B5\uB2C8\uB2E4."}, - {"Permission.and.Target.Name.must.have.a.value", - "\uAD8C\uD55C\uACFC \uB300\uC0C1 \uC774\uB984\uC758 \uAC12\uC774 \uC788\uC5B4\uC57C \uD569\uB2C8\uB2E4."}, - {"Remove.this.Policy.Entry.", "\uC774 \uC815\uCC45 \uD56D\uBAA9\uC744 \uC81C\uAC70\uD558\uACA0\uC2B5\uB2C8\uAE4C?"}, - {"Overwrite.File", "\uD30C\uC77C \uACB9\uCCD0\uC4F0\uAE30"}, - {"Policy.successfully.written.to.filename", - "{0}\uC5D0 \uC131\uACF5\uC801\uC73C\uB85C \uC815\uCC45\uC744 \uC37C\uC2B5\uB2C8\uB2E4."}, - {"null.filename", "\uB110 \uD30C\uC77C \uC774\uB984"}, - {"Save.changes.", "\uBCC0\uACBD \uC0AC\uD56D\uC744 \uC800\uC7A5\uD558\uACA0\uC2B5\uB2C8\uAE4C?"}, - {"Yes", "\uC608"}, - {"No", "\uC544\uB2C8\uC624"}, - {"Policy.Entry", "\uC815\uCC45 \uD56D\uBAA9"}, - {"Save.Changes", "\uBCC0\uACBD \uC0AC\uD56D \uC800\uC7A5"}, - {"No.Policy.Entry.selected", "\uC120\uD0DD\uB41C \uC815\uCC45 \uD56D\uBAA9\uC774 \uC5C6\uC2B5\uB2C8\uB2E4."}, - {"Unable.to.open.KeyStore.ex.toString.", - "\uD0A4 \uC800\uC7A5\uC18C\uB97C \uC5F4 \uC218 \uC5C6\uC74C: {0}"}, - {"No.principal.selected", "\uC120\uD0DD\uB41C \uC8FC\uCCB4\uAC00 \uC5C6\uC2B5\uB2C8\uB2E4."}, - {"No.permission.selected", "\uC120\uD0DD\uB41C \uAD8C\uD55C\uC774 \uC5C6\uC2B5\uB2C8\uB2E4."}, - {"name", "\uC774\uB984"}, - {"configuration.type", "\uAD6C\uC131 \uC720\uD615"}, - {"environment.variable.name", "\uD658\uACBD \uBCC0\uC218 \uC774\uB984"}, - {"library.name", "\uB77C\uC774\uBE0C\uB7EC\uB9AC \uC774\uB984"}, - {"package.name", "\uD328\uD0A4\uC9C0 \uC774\uB984"}, - {"policy.type", "\uC815\uCC45 \uC720\uD615"}, - {"property.name", "\uC18D\uC131 \uC774\uB984"}, - {"Principal.List", "\uC8FC\uCCB4 \uBAA9\uB85D"}, - {"Permission.List", "\uAD8C\uD55C \uBAA9\uB85D"}, - {"Code.Base", "\uCF54\uB4DC \uBCA0\uC774\uC2A4"}, - {"KeyStore.U.R.L.", "\uD0A4 \uC800\uC7A5\uC18C URL:"}, - {"KeyStore.Password.U.R.L.", "\uD0A4 \uC800\uC7A5\uC18C \uBE44\uBC00\uBC88\uD638 URL:"}, - - // javax.security.auth.PrivateCredentialPermission {"invalid.null.input.s.", "\uB110 \uC785\uB825\uAC12\uC774 \uBD80\uC801\uD569\uD569\uB2C8\uB2E4."}, {"actions.can.only.be.read.", "\uC791\uC5C5\uC740 '\uC77D\uAE30' \uC804\uC6A9\uC785\uB2C8\uB2E4."}, @@ -553,6 +58,7 @@ public class Resources_ko extends java.util.ListResourceBundle { {"provided.null.OID.map", "\uB110 OID \uB9F5\uC744 \uC81C\uACF5\uD588\uC2B5\uB2C8\uB2E4."}, // javax.security.auth.Subject + {"NEWLINE", "\n"}, {"invalid.null.AccessControlContext.provided", "\uBD80\uC801\uD569\uD55C \uB110 AccessControlContext\uAC00 \uC81C\uACF5\uB418\uC5C8\uC2B5\uB2C8\uB2E4."}, {"invalid.null.action.provided", "\uBD80\uC801\uD569\uD55C \uB110 \uC791\uC5C5\uC774 \uC81C\uACF5\uB418\uC5C8\uC2B5\uB2C8\uB2E4."}, @@ -656,6 +162,7 @@ public class Resources_ko extends java.util.ListResourceBundle { * * @return the contents of this ResourceBundle. */ + @Override public Object[][] getContents() { return contents; } diff --git a/jdk/src/share/classes/sun/security/util/Resources_pt_BR.java b/jdk/src/share/classes/sun/security/util/Resources_pt_BR.java index 698827f388e..317a1cbb2c3 100644 --- a/jdk/src/share/classes/sun/security/util/Resources_pt_BR.java +++ b/jdk/src/share/classes/sun/security/util/Resources_pt_BR.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2000, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2000, 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 @@ -34,501 +34,6 @@ public class Resources_pt_BR extends java.util.ListResourceBundle { private static final Object[][] contents = { - // shared (from jarsigner) - {"SPACE", " "}, - {"2SPACE", " "}, - {"6SPACE", " "}, - {"COMMA", ", "}, - // shared (from keytool) - {"NEWLINE", "\n"}, - {"STAR", - "*******************************************"}, - {"STARNN", - "*******************************************\n\n"}, - - // keytool: Help part -// "Option" should be translated. - {".OPTION.", " [Op\u00E7\u00E3o]..."}, - {"Options.", "Op\u00E7\u00F5es:"}, - {"Use.keytool.help.for.all.available.commands", - "Use \"keytool -help\" para todos os comandos dispon\u00EDveis"}, - {"Key.and.Certificate.Management.Tool", - "Ferramenta de Gerenciamento de Chave e Certificado"}, - {"Commands.", "Comandos:"}, - {"Use.keytool.command.name.help.for.usage.of.command.name", - "Use \"keytool -command_name -help\" para uso de command_name"}, - // keytool: help: commands - {"Generates.a.certificate.request", - "Gera uma solicita\u00E7\u00E3o de certificado"}, //-certreq - {"Changes.an.entry.s.alias", - "Altera um alias de entrada"}, //-changealias - {"Deletes.an.entry", - "Deleta uma entrada"}, //-delete - {"Exports.certificate", - "Exporta o certificado"}, //-exportcert - {"Generates.a.key.pair", - "Gera um par de chaves"}, //-genkeypair -// translation of "secret" key should be different to "private" key. - {"Generates.a.secret.key", - "Gera uma chave Secreta"}, //-genseckey - {"Generates.certificate.from.a.certificate.request", - "Gera um certificado de uma solicita\u00E7\u00E3o de certificado"}, //-gencert - {"Generates.CRL", "Gera CRL"}, //-gencrl - {"Imports.entries.from.a.JDK.1.1.x.style.identity.database", - "Importa entradas de um banco de dados de identidade JDK 1.1.x-style"}, //-identitydb - {"Imports.a.certificate.or.a.certificate.chain", - "Importa um certificado ou uma cadeia de certificados"}, //-importcert - {"Imports.one.or.all.entries.from.another.keystore", - "Importa uma ou todas as entradas de outra \u00E1rea de armazenamento de chaves"}, //-importkeystore - {"Clones.a.key.entry", - "Clona uma entrada de chave"}, //-keyclone - {"Changes.the.key.password.of.an.entry", - "Altera a senha da chave de uma entrada"}, //-keypasswd - {"Lists.entries.in.a.keystore", - "Lista entradas em uma \u00E1rea de armazenamento de chaves"}, //-list - {"Prints.the.content.of.a.certificate", - "Imprime o conte\u00FAdo de um certificado"}, //-printcert - {"Prints.the.content.of.a.certificate.request", - "Imprime o conte\u00FAdo de uma solicita\u00E7\u00E3o de certificado"}, //-printcertreq - {"Prints.the.content.of.a.CRL.file", - "Imprime o conte\u00FAdo de um arquivo CRL"}, //-printcrl - {"Generates.a.self.signed.certificate", - "Gera um certificado autoassinado"}, //-selfcert - {"Changes.the.store.password.of.a.keystore", - "Altera a senha de armazenamento de uma \u00E1rea de armazenamento de chaves"}, //-storepasswd - // keytool: help: options - {"alias.name.of.the.entry.to.process", - "nome do alias da entrada a ser processada"}, //-alias - {"destination.alias", - "alias de destino"}, //-destalias - {"destination.key.password", - "senha da chave de destino"}, //-destkeypass - {"destination.keystore.name", - "nome da \u00E1rea de armazenamento de chaves de destino"}, //-destkeystore - {"destination.keystore.password.protected", - "senha protegida da \u00E1rea de armazenamento de chaves de destino"}, //-destprotected - {"destination.keystore.provider.name", - "nome do fornecedor da \u00E1rea de armazenamento de chaves de destino"}, //-destprovidername - {"destination.keystore.password", - "senha da \u00E1rea de armazenamento de chaves de destino"}, //-deststorepass - {"destination.keystore.type", - "tipo de \u00E1rea de armazenamento de chaves de destino"}, //-deststoretype - {"distinguished.name", - "nome distinto"}, //-dname - {"X.509.extension", - "extens\u00E3o X.509"}, //-ext - {"output.file.name", - "nome do arquivo de sa\u00EDda"}, //-file and -outfile - {"input.file.name", - "nome do arquivo de entrada"}, //-file and -infile - {"key.algorithm.name", - "nome do algoritmo da chave"}, //-keyalg - {"key.password", - "senha da chave"}, //-keypass - {"key.bit.size", - "tamanho do bit da chave"}, //-keysize - {"keystore.name", - "nome da \u00E1rea de armazenamento de chaves"}, //-keystore - {"new.password", - "nova senha"}, //-new - {"do.not.prompt", - "n\u00E3o perguntar"}, //-noprompt - {"password.through.protected.mechanism", - "senha por meio de mecanismo protegido"}, //-protected - {"provider.argument", - "argumento do fornecedor"}, //-providerarg - {"provider.class.name", - "nome da classe do fornecedor"}, //-providerclass - {"provider.name", - "nome do fornecedor"}, //-providername - {"provider.classpath", - "classpath do fornecedor"}, //-providerpath - {"output.in.RFC.style", - "sa\u00EDda no estilo RFC"}, //-rfc - {"signature.algorithm.name", - "nome do algoritmo de assinatura"}, //-sigalg - {"source.alias", - "alias de origem"}, //-srcalias - {"source.key.password", - "senha da chave de origem"}, //-srckeypass - {"source.keystore.name", - "nome da \u00E1rea de armazenamento de chaves de origem"}, //-srckeystore - {"source.keystore.password.protected", - "senha protegida da \u00E1rea de armazenamento de chaves de origem"}, //-srcprotected - {"source.keystore.provider.name", - "nome do fornecedor da \u00E1rea de armazenamento de chaves de origem"}, //-srcprovidername - {"source.keystore.password", - "senha da \u00E1rea de armazenamento de chaves de origem"}, //-srcstorepass - {"source.keystore.type", - "tipo de \u00E1rea de armazenamento de chaves de origem"}, //-srcstoretype - {"SSL.server.host.and.port", - "porta e host do servidor SSL"}, //-sslserver - {"signed.jar.file", - "arquivo jar assinado"}, //=jarfile - {"certificate.validity.start.date.time", - "data/hora inicial de validade do certificado"}, //-startdate - {"keystore.password", - "senha da \u00E1rea de armazenamento de chaves"}, //-storepass - {"keystore.type", - "tipo de \u00E1rea de armazenamento de chaves"}, //-storetype - {"trust.certificates.from.cacerts", - "certificados confi\u00E1veis do cacerts"}, //-trustcacerts - {"verbose.output", - "sa\u00EDda detalhada"}, //-v - {"validity.number.of.days", - "n\u00FAmero de dias da validade"}, //-validity - {"Serial.ID.of.cert.to.revoke", - "ID de s\u00E9rie do certificado a ser revogado"}, //-id - // keytool: Running part - {"keytool.error.", "erro de keytool: "}, - {"Illegal.option.", "Op\u00E7\u00E3o inv\u00E1lida: "}, - {"Illegal.value.", "Valor inv\u00E1lido: "}, - {"Unknown.password.type.", "Tipo de senha desconhecido: "}, - {"Cannot.find.environment.variable.", - "N\u00E3o \u00E9 poss\u00EDvel localizar a vari\u00E1vel do ambiente: "}, - {"Cannot.find.file.", "N\u00E3o \u00E9 poss\u00EDvel localizar o arquivo: "}, - {"Command.option.flag.needs.an.argument.", "A op\u00E7\u00E3o de comando {0} precisa de um argumento."}, - {"Warning.Different.store.and.key.passwords.not.supported.for.PKCS12.KeyStores.Ignoring.user.specified.command.value.", - "Advert\u00EAncia: Senhas de chave e de armazenamento diferentes n\u00E3o suportadas para KeyStores PKCS12. Ignorando valor {0} especificado pelo usu\u00E1rio."}, - {".keystore.must.be.NONE.if.storetype.is.{0}", - "-keystore deve ser NONE se -storetype for {0}"}, - {"Too.many.retries.program.terminated", - "Excesso de tentativas de repeti\u00E7\u00E3o; programa finalizado"}, - {".storepasswd.and.keypasswd.commands.not.supported.if.storetype.is.{0}", - "comandos -storepasswd e -keypasswd n\u00E3o suportados se -storetype for {0}"}, - {".keypasswd.commands.not.supported.if.storetype.is.PKCS12", - "comandos -keypasswd n\u00E3o suportados se -storetype for PKCS12"}, - {".keypass.and.new.can.not.be.specified.if.storetype.is.{0}", - "-keypass e -new n\u00E3o podem ser especificados se -storetype for {0}"}, - {"if.protected.is.specified.then.storepass.keypass.and.new.must.not.be.specified", - "se -protected for especificado, ent\u00E3o -storepass, -keypass e -new n\u00E3o dever\u00E3o ser especificados"}, - {"if.srcprotected.is.specified.then.srcstorepass.and.srckeypass.must.not.be.specified", - "se -srcprotected for especificado, ent\u00E3o -srcstorepass e -srckeypass n\u00E3o dever\u00E3o ser especificados"}, - {"if.keystore.is.not.password.protected.then.storepass.keypass.and.new.must.not.be.specified", - "se a \u00E1rea de armazenamento de chaves n\u00E3o estiver protegida por senha, ent\u00E3o -storepass, -keypass e -new n\u00E3o dever\u00E3o ser especificados"}, - {"if.source.keystore.is.not.password.protected.then.srcstorepass.and.srckeypass.must.not.be.specified", - "se a \u00E1rea de armazenamento de chaves de origem n\u00E3o estiver protegida por senha, ent\u00E3o -srcstorepass e -srckeypass n\u00E3o dever\u00E3o ser especificados"}, - {"Illegal.startdate.value", "valor da data inicial inv\u00E1lido"}, - {"Validity.must.be.greater.than.zero", - "A validade deve ser maior do que zero"}, - {"provName.not.a.provider", "{0} n\u00E3o \u00E9 um fornecedor"}, - {"Usage.error.no.command.provided", "Erro de uso: nenhum comando fornecido"}, - {"Source.keystore.file.exists.but.is.empty.", "O arquivo da \u00E1rea de armazenamento de chaves de origem existe, mas est\u00E1 vazio: "}, - {"Please.specify.srckeystore", "Especifique -srckeystore"}, - {"Must.not.specify.both.v.and.rfc.with.list.command", - "N\u00E3o devem ser especificados -v e -rfc com o comando 'list'"}, - {"Key.password.must.be.at.least.6.characters", - "A senha da chave deve ter, no m\u00EDnimo, 6 caracteres"}, - {"New.password.must.be.at.least.6.characters", - "A nova senha deve ter, no m\u00EDnimo, 6 caracteres"}, - {"Keystore.file.exists.but.is.empty.", - "O arquivo da \u00E1rea de armazenamento de chaves existe, mas est\u00E1 vazio: "}, - {"Keystore.file.does.not.exist.", - "O arquivo da \u00E1rea de armazenamento de chaves n\u00E3o existe. "}, - {"Must.specify.destination.alias", "Deve ser especificado um alias de destino"}, - {"Must.specify.alias", "Deve ser especificado um alias"}, - {"Keystore.password.must.be.at.least.6.characters", - "A senha da \u00E1rea de armazenamento de chaves deve ter, no m\u00EDnimo, 6 caracteres"}, - {"Enter.keystore.password.", "Informe a senha da \u00E1rea de armazenamento de chaves: "}, - {"Enter.source.keystore.password.", "Informe a senha da \u00E1rea de armazenamento de chaves de origem: "}, - {"Enter.destination.keystore.password.", "Informe a senha da \u00E1rea de armazenamento de chaves de destino: "}, - {"Keystore.password.is.too.short.must.be.at.least.6.characters", - "A senha da \u00E1rea de armazenamento de chaves \u00E9 muito curta - ela deve ter, no m\u00EDnimo, 6 caracteres"}, - {"Unknown.Entry.Type", "Tipo de Entrada Desconhecido"}, - {"Too.many.failures.Alias.not.changed", "Excesso de falhas. Alias n\u00E3o alterado"}, - {"Entry.for.alias.alias.successfully.imported.", - "Entrada do alias {0} importada com \u00EAxito."}, - {"Entry.for.alias.alias.not.imported.", "Entrada do alias {0} n\u00E3o importada."}, - {"Problem.importing.entry.for.alias.alias.exception.Entry.for.alias.alias.not.imported.", - "Problema ao importar a entrada do alias {0}: {1}.\nEntrada do alias {0} n\u00E3o importada."}, - {"Import.command.completed.ok.entries.successfully.imported.fail.entries.failed.or.cancelled", - "Comando de importa\u00E7\u00E3o conclu\u00EDdo: {0} entradas importadas com \u00EAxito, {1} entradas falharam ou foram canceladas"}, - {"Warning.Overwriting.existing.alias.alias.in.destination.keystore", - "Advert\u00EAncia: Substitui\u00E7\u00E3o do alias {0} existente na \u00E1rea de armazenamento de chaves de destino"}, - {"Existing.entry.alias.alias.exists.overwrite.no.", - "Entrada j\u00E1 existente no alias {0}, substituir? [n\u00E3o]: "}, - {"Too.many.failures.try.later", "Excesso de falhas - tente mais tarde"}, - {"Certification.request.stored.in.file.filename.", - "Solicita\u00E7\u00E3o de certificado armazenada no arquivo <{0}>"}, - {"Submit.this.to.your.CA", "Submeter \u00E0 CA"}, - {"if.alias.not.specified.destalias.srckeypass.and.destkeypass.must.not.be.specified", - "se o alias n\u00E3o estiver especificado, destalias, srckeypass e destkeypass n\u00E3o dever\u00E3o ser especificados"}, - {"Certificate.stored.in.file.filename.", - "Certificado armazenado no arquivo <{0}>"}, - {"Certificate.reply.was.installed.in.keystore", - "A resposta do certificado foi instalada na \u00E1rea de armazenamento de chaves"}, - {"Certificate.reply.was.not.installed.in.keystore", - "A resposta do certificado n\u00E3o foi instalada na \u00E1rea de armazenamento de chaves"}, - {"Certificate.was.added.to.keystore", - "O certificado foi adicionado \u00E0 \u00E1rea de armazenamento de chaves"}, - {"Certificate.was.not.added.to.keystore", - "O certificado n\u00E3o foi adicionado \u00E0 \u00E1rea de armazenamento de chaves"}, - {".Storing.ksfname.", "[Armazenando {0}]"}, - {"alias.has.no.public.key.certificate.", - "{0} n\u00E3o tem chave p\u00FAblica (certificado)"}, - {"Cannot.derive.signature.algorithm", - "N\u00E3o \u00E9 poss\u00EDvel obter um algoritmo de assinatura"}, - {"Alias.alias.does.not.exist", - "O alias <{0}> n\u00E3o existe"}, - {"Alias.alias.has.no.certificate", - "O alias <{0}> n\u00E3o tem certificado"}, - {"Key.pair.not.generated.alias.alias.already.exists", - "Par de chaves n\u00E3o gerado; o alias <{0}> j\u00E1 existe"}, - {"Generating.keysize.bit.keyAlgName.key.pair.and.self.signed.certificate.sigAlgName.with.a.validity.of.validality.days.for", - "Gerando o par de chaves {1} de {0} bit e o certificado autoassinado ({2}) com uma validade de {3} dias\n\tpara: {4}"}, - {"Enter.key.password.for.alias.", "Informar a senha da chave de <{0}>"}, - {".RETURN.if.same.as.keystore.password.", - "\t(RETURN se for igual \u00E0 senha da \u00E1rea do armazenamento de chaves): "}, - {"Key.password.is.too.short.must.be.at.least.6.characters", - "A senha da chave \u00E9 muito curta - deve ter, no m\u00EDnimo, 6 caracteres"}, - {"Too.many.failures.key.not.added.to.keystore", - "Excesso de falhas - chave n\u00E3o adicionada a \u00E1rea de armazenamento de chaves"}, - {"Destination.alias.dest.already.exists", - "O alias de destino <{0}> j\u00E1 existe"}, - {"Password.is.too.short.must.be.at.least.6.characters", - "A senha \u00E9 muito curta - deve ter, no m\u00EDnimo, 6 caracteres"}, - {"Too.many.failures.Key.entry.not.cloned", - "Excesso de falhas. Entrada da chave n\u00E3o clonada"}, - {"key.password.for.alias.", "senha da chave de <{0}>"}, - {"Keystore.entry.for.id.getName.already.exists", - "A entrada da \u00E1rea do armazenamento de chaves de <{0}> j\u00E1 existe"}, - {"Creating.keystore.entry.for.id.getName.", - "Criando entrada da \u00E1rea do armazenamento de chaves para <{0}> ..."}, - {"No.entries.from.identity.database.added", - "Nenhuma entrada adicionada do banco de dados de identidades"}, - {"Alias.name.alias", "Nome do alias: {0}"}, - {"Creation.date.keyStore.getCreationDate.alias.", - "Data de cria\u00E7\u00E3o: {0,date}"}, - {"alias.keyStore.getCreationDate.alias.", - "{0}, {1,date}, "}, - {"alias.", "{0}, "}, - {"Entry.type.type.", "Tipo de entrada: {0}"}, - {"Certificate.chain.length.", "Comprimento da cadeia de certificados: "}, - {"Certificate.i.1.", "Certificado[{0,number,integer}]:"}, - {"Certificate.fingerprint.SHA1.", "Fingerprint (MD5) do certificado: "}, - {"Keystore.type.", "Tipo de \u00E1rea de armazenamento de chaves: "}, - {"Keystore.provider.", "Fornecedor da \u00E1rea de armazenamento de chaves: "}, - {"Your.keystore.contains.keyStore.size.entry", - "Sua \u00E1rea de armazenamento de chaves cont\u00E9m {0,number,integer} entrada"}, - {"Your.keystore.contains.keyStore.size.entries", - "Sua \u00E1rea de armazenamento de chaves cont\u00E9m {0,number,integer} entradas"}, - {"Failed.to.parse.input", "Falha durante o parse da entrada"}, - {"Empty.input", "Entrada vazia"}, - {"Not.X.509.certificate", "N\u00E3o \u00E9 um certificado X.509"}, - {"alias.has.no.public.key", "{0} n\u00E3o tem chave p\u00FAblica"}, - {"alias.has.no.X.509.certificate", "{0} n\u00E3o tem certificado X.509"}, - {"New.certificate.self.signed.", "Novo certificado (autoassinado):"}, - {"Reply.has.no.certificates", "A resposta n\u00E3o tem certificado"}, - {"Certificate.not.imported.alias.alias.already.exists", - "Certificado n\u00E3o importado, o alias <{0}> j\u00E1 existe"}, - {"Input.not.an.X.509.certificate", "A entrada n\u00E3o \u00E9 um certificado X.509"}, - {"Certificate.already.exists.in.keystore.under.alias.trustalias.", - "O certificado j\u00E1 existe no armazenamento de chaves no alias <{0}>"}, - {"Do.you.still.want.to.add.it.no.", - "Ainda deseja adicion\u00E1-lo? [n\u00E3o]: "}, - {"Certificate.already.exists.in.system.wide.CA.keystore.under.alias.trustalias.", - "O certificado j\u00E1 existe na \u00E1rea de armazenamento de chaves da CA em todo o sistema no alias <{0}>"}, - {"Do.you.still.want.to.add.it.to.your.own.keystore.no.", - "Ainda deseja adicion\u00E1-lo \u00E0 sua \u00E1rea de armazenamento de chaves? [n\u00E3o]: "}, - {"Trust.this.certificate.no.", "Confiar neste certificado? [n\u00E3o]: "}, - {"YES", "Sim"}, - {"New.prompt.", "Nova {0}: "}, - {"Passwords.must.differ", "As senhas devem ser diferentes"}, - {"Re.enter.new.prompt.", "Informe novamente a nova {0}: "}, - {"Re.enter.new.password.", "Informe novamente a nova senha: "}, - {"They.don.t.match.Try.again", "Elas n\u00E3o correspondem. Tente novamente"}, - {"Enter.prompt.alias.name.", "Informe o nome do alias {0}: "}, - {"Enter.new.alias.name.RETURN.to.cancel.import.for.this.entry.", - "Informe o novo nome do alias\t(RETURN para cancelar a importa\u00E7\u00E3o desta entrada): "}, - {"Enter.alias.name.", "Informe o nome do alias: "}, - {".RETURN.if.same.as.for.otherAlias.", - "\t(RETURN se for igual ao de <{0}>)"}, - {".PATTERN.printX509Cert", - "Propriet\u00E1rio: {0}\nEmissor: {1}\nN\u00FAmero de s\u00E9rie: {2}\nV\u00E1lido de: {3} a: {4}\nFingerprints do certificado:\n\t MD5: {5}\n\t SHA1: {6}\n\t SHA256: {7}\n\t Nome do algoritmo de assinatura: {8}\n\t Vers\u00E3o: {9}"}, - {"What.is.your.first.and.last.name.", - "Qual \u00E9 o seu nome e o seu sobrenome?"}, - {"What.is.the.name.of.your.organizational.unit.", - "Qual \u00E9 o nome da sua unidade organizacional?"}, - {"What.is.the.name.of.your.organization.", - "Qual \u00E9 o nome da sua empresa?"}, - {"What.is.the.name.of.your.City.or.Locality.", - "Qual \u00E9 o nome da sua Cidade ou Localidade?"}, - {"What.is.the.name.of.your.State.or.Province.", - "Qual \u00E9 o nome do seu Estado ou Munic\u00EDpio?"}, - {"What.is.the.two.letter.country.code.for.this.unit.", - "Quais s\u00E3o as duas letras do c\u00F3digo do pa\u00EDs desta unidade?"}, - {"Is.name.correct.", "{0} Est\u00E1 correto?"}, - {"no", "n\u00E3o"}, - {"yes", "sim"}, - {"y", "s"}, - {".defaultValue.", " [{0}]: "}, - {"Alias.alias.has.no.key", - "O alias <{0}> n\u00E3o tem chave"}, - {"Alias.alias.references.an.entry.type.that.is.not.a.private.key.entry.The.keyclone.command.only.supports.cloning.of.private.key", - "O alias <{0}> faz refer\u00EAncia a um tipo de entrada que n\u00E3o \u00E9 uma entrada de chave privada. O comando -keyclone oferece suporte somente \u00E0 clonagem de entradas de chave privada"}, - - {".WARNING.WARNING.WARNING.", - "***************** Advert\u00EAncia Advert\u00EAncia Advert\u00EAncia *****************"}, - {"Signer.d.", "Signat\u00E1rio #%d:"}, - {"Timestamp.", "Timestamp:"}, - {"Signature.", "Assinatura:"}, - {"CRLs.", "CRLs:"}, - {"Certificate.owner.", "Propriet\u00E1rio do certificado: "}, - {"Not.a.signed.jar.file", "N\u00E3o \u00E9 um arquivo jar assinado"}, - {"No.certificate.from.the.SSL.server", - "N\u00E3o \u00E9 um certificado do servidor SSL"}, - - {".The.integrity.of.the.information.stored.in.your.keystore.", - "* A integridade das informa\u00E7\u00F5es armazenadas na sua \u00E1rea de armazenamento de chaves *\n* N\u00C3O foi verificada! Para que seja poss\u00EDvel verificar sua integridade, *\n* voc\u00EA deve fornecer a senha da \u00E1rea de armazenamento de chaves. *"}, - {".The.integrity.of.the.information.stored.in.the.srckeystore.", - "* A integridade das informa\u00E7\u00F5es armazenadas no srckeystore *\n* N\u00C3O foi verificada! Para que seja poss\u00EDvel verificar sua integridade, *\n* voc\u00EA deve fornecer a senha do srckeystore. *"}, - - {"Certificate.reply.does.not.contain.public.key.for.alias.", - "A resposta do certificado n\u00E3o cont\u00E9m a chave p\u00FAblica de <{0}>"}, - {"Incomplete.certificate.chain.in.reply", - "Cadeia de certificados incompleta na resposta"}, - {"Certificate.chain.in.reply.does.not.verify.", - "A cadeia de certificados da resposta n\u00E3o verifica: "}, - {"Top.level.certificate.in.reply.", - "Certificado de n\u00EDvel superior na resposta:\n"}, - {".is.not.trusted.", "... n\u00E3o \u00E9 confi\u00E1vel. "}, - {"Install.reply.anyway.no.", "Instalar resposta assim mesmo? [n\u00E3o]: "}, - {"NO", "N\u00E3o"}, - {"Public.keys.in.reply.and.keystore.don.t.match", - "As chaves p\u00FAblicas da resposta e da \u00E1rea de armazenamento de chaves n\u00E3o correspondem"}, - {"Certificate.reply.and.certificate.in.keystore.are.identical", - "O certificado da resposta e o certificado da \u00E1rea de armazenamento de chaves s\u00E3o id\u00EAnticos"}, - {"Failed.to.establish.chain.from.reply", - "Falha ao estabelecer a cadeia a partir da resposta"}, - {"n", "n"}, - {"Wrong.answer.try.again", "Resposta errada; tente novamente"}, - {"Secret.key.not.generated.alias.alias.already.exists", - "Chave secreta n\u00E3o gerada; o alias <{0}> j\u00E1 existe"}, - {"Please.provide.keysize.for.secret.key.generation", - "Forne\u00E7a o -keysize para a gera\u00E7\u00E3o da chave secreta"}, - - {"Extensions.", "Extens\u00F5es: "}, - {".Empty.value.", "(Valor vazio)"}, - {"Extension.Request.", "Solicita\u00E7\u00E3o de Extens\u00E3o:"}, - {"PKCS.10.Certificate.Request.Version.1.0.Subject.s.Public.Key.s.format.s.key.", - "Solicita\u00E7\u00E3o do Certificado PKCS #10 (Vers\u00E3o 1.0)\nAssunto: %s\nChave P\u00FAblica: %s formato %s chave\n"}, - {"Unknown.keyUsage.type.", "Tipo de keyUsage desconhecido: "}, - {"Unknown.extendedkeyUsage.type.", "Tipo de extendedkeyUsage desconhecido: "}, - {"Unknown.AccessDescription.type.", "Tipo de AccessDescription desconhecido: "}, - {"Unrecognized.GeneralName.type.", "Tipo de GeneralName n\u00E3o reconhecido: "}, - {"This.extension.cannot.be.marked.as.critical.", - "Esta extens\u00E3o n\u00E3o pode ser marcada como cr\u00EDtica. "}, - {"Odd.number.of.hex.digits.found.", "Encontrado n\u00FAmero \u00EDmpar de seis d\u00EDgitos: "}, - {"Unknown.extension.type.", "Tipo de extens\u00E3o desconhecido: "}, - {"command.{0}.is.ambiguous.", "o comando {0} \u00E9 amb\u00EDguo:"}, - - // policytool - {"Warning.A.public.key.for.alias.signers.i.does.not.exist.Make.sure.a.KeyStore.is.properly.configured.", - "Advert\u00EAncia: N\u00E3o existe uma chave p\u00FAblica para o alias {0}. Certifique-se de que um KeyStore esteja configurado adequadamente."}, - {"Warning.Class.not.found.class", "Advert\u00EAncia: Classe n\u00E3o encontrada: {0}"}, - {"Warning.Invalid.argument.s.for.constructor.arg", - "Advert\u00EAncia: Argumento(s) inv\u00E1lido(s) para o construtor: {0}"}, - {"Illegal.Principal.Type.type", "Tipo Principal Inv\u00E1lido: {0}"}, - {"Illegal.option.option", "Op\u00E7\u00E3o inv\u00E1lida: {0}"}, - {"Usage.policytool.options.", "Uso: policytool [op\u00E7\u00F5es]"}, - {".file.file.policy.file.location", - " [-file ] localiza\u00E7\u00E3o do arquivo de pol\u00EDtica"}, - {"New", "Novo"}, - {"Open", "Abrir"}, - {"Save", "Salvar"}, - {"Save.As", "Salvar Como"}, - {"View.Warning.Log", "Exibir Log de Advert\u00EAncias"}, - {"Exit", "Sair"}, - {"Add.Policy.Entry", "Adicionar Entrada de Pol\u00EDtica"}, - {"Edit.Policy.Entry", "Editar Entrada de Pol\u00EDtica"}, - {"Remove.Policy.Entry", "Remover Entrada de Pol\u00EDtica"}, - {"Edit", "Editar"}, - {"Retain", "Reter"}, - - {"Warning.File.name.may.include.escaped.backslash.characters.It.is.not.necessary.to.escape.backslash.characters.the.tool.escapes", - "Advert\u00EAncia: O nome do arquivo pode conter caracteres de escape barra invertida. N\u00E3o \u00E9 necess\u00E1rio fazer o escape dos caracteres de barra invertida (a ferramenta faz o escape dos caracteres conforme necess\u00E1rio ao gravar o conte\u00FAdo da pol\u00EDtica no armazenamento persistente).\n\nClique em Reter para reter o nome da entrada ou clique em Editar para edit\u00E1-lo."}, - - {"Add.Public.Key.Alias", "Adicionar Alias de Chave P\u00FAblica"}, - {"Remove.Public.Key.Alias", "Remover Alias de Chave P\u00FAblica"}, - {"File", "Arquivo"}, - {"KeyStore", "KeyStore"}, - {"Policy.File.", "Arquivo de Pol\u00EDtica:"}, - {"Could.not.open.policy.file.policyFile.e.toString.", - "N\u00E3o foi poss\u00EDvel abrir o arquivo de pol\u00EDtica: {0}: {1}"}, - {"Policy.Tool", "Ferramenta de Pol\u00EDtica"}, - {"Errors.have.occurred.while.opening.the.policy.configuration.View.the.Warning.Log.for.more.information.", - "Erros durante a abertura da configura\u00E7\u00E3o da pol\u00EDtica. Consulte o Log de Advert\u00EAncias para obter mais informa\u00E7\u00F5es."}, - {"Error", "Erro"}, - {"OK", "OK"}, - {"Status", "Status"}, - {"Warning", "Advert\u00EAncia"}, - {"Permission.", - "Permiss\u00E3o: "}, - {"Principal.Type.", "Tipo do Principal:"}, - {"Principal.Name.", "Nome do Principal:"}, - {"Target.Name.", - "Nome do Alvo: "}, - {"Actions.", - "A\u00E7\u00F5es: "}, - {"OK.to.overwrite.existing.file.filename.", - "Est\u00E1 correto substituir o arquivo existente {0}?"}, - {"Cancel", "Cancelar"}, - {"CodeBase.", "CodeBase:"}, - {"SignedBy.", "SignedBy:"}, - {"Add.Principal", "Adicionar Principal"}, - {"Edit.Principal", "Editar Principal"}, - {"Remove.Principal", "Remover Principal"}, - {"Principals.", "Principais:"}, - {".Add.Permission", " Adicionar Permiss\u00E3o"}, - {".Edit.Permission", " Editar Permiss\u00E3o"}, - {"Remove.Permission", "Remover Permiss\u00E3o"}, - {"Done", "Conclu\u00EDdo"}, - {"KeyStore.URL.", "URL do KeyStore:"}, - {"KeyStore.Type.", "Tipo de KeyStore:"}, - {"KeyStore.Provider.", "Fornecedor de KeyStore:"}, - {"KeyStore.Password.URL.", "URL da Senha do KeyStore:"}, - {"Principals", "Principais"}, - {".Edit.Principal.", " Editar Principal:"}, - {".Add.New.Principal.", " Adicionar Novo Principal:"}, - {"Permissions", "Permiss\u00F5es"}, - {".Edit.Permission.", " Editar Permiss\u00E3o:"}, - {".Add.New.Permission.", " Adicionar Nova Permiss\u00E3o:"}, - {"Signed.By.", "Assinado por:"}, - {"Cannot.Specify.Principal.with.a.Wildcard.Class.without.a.Wildcard.Name", - "N\u00E3o \u00E9 Poss\u00EDvel Especificar um Principal com uma Classe de Curinga sem um Nome de Curinga"}, - {"Cannot.Specify.Principal.without.a.Name", - "N\u00E3o \u00E9 Poss\u00EDvel Especificar um Principal sem um Nome"}, - {"Permission.and.Target.Name.must.have.a.value", - "O Nome de Destino e a Permiss\u00E3o devem ter um Valor"}, - {"Remove.this.Policy.Entry.", "Remover esta Entrada de Pol\u00EDtica?"}, - {"Overwrite.File", "Substituir Arquivo"}, - {"Policy.successfully.written.to.filename", - "Pol\u00EDtica gravada com \u00EAxito em {0}"}, - {"null.filename", "nome de arquivo nulo"}, - {"Save.changes.", "Salvar altera\u00E7\u00F5es?"}, - {"Yes", "Sim"}, - {"No", "N\u00E3o"}, - {"Policy.Entry", "Entrada de Pol\u00EDtica"}, - {"Save.Changes", "Salvar Altera\u00E7\u00F5es"}, - {"No.Policy.Entry.selected", "Nenhuma Entrada de Pol\u00EDtica Selecionada"}, - {"Unable.to.open.KeyStore.ex.toString.", - "N\u00E3o \u00E9 poss\u00EDvel abrir a KeyStore: {0}"}, - {"No.principal.selected", "Nenhum principal selecionado"}, - {"No.permission.selected", "Nenhuma permiss\u00E3o selecionada"}, - {"name", "nome"}, - {"configuration.type", "tipo de configura\u00E7\u00E3o"}, - {"environment.variable.name", "nome da vari\u00E1vel de ambiente"}, - {"library.name", "nome da biblioteca"}, - {"package.name", "nome do pacote"}, - {"policy.type", "tipo de pol\u00EDtica"}, - {"property.name", "nome da propriedade"}, - {"Principal.List", "Lista de Principais"}, - {"Permission.List", "Lista de Permiss\u00F5es"}, - {"Code.Base", "Base de C\u00F3digo"}, - {"KeyStore.U.R.L.", "U R L da KeyStore:"}, - {"KeyStore.Password.U.R.L.", "U R L da Senha do KeyStore:"}, - - // javax.security.auth.PrivateCredentialPermission {"invalid.null.input.s.", "entrada(s) nula(s) inv\u00E1lida(s)"}, {"actions.can.only.be.read.", "as a\u00E7\u00F5es s\u00F3 podem ser 'lidas'"}, @@ -553,6 +58,7 @@ public class Resources_pt_BR extends java.util.ListResourceBundle { {"provided.null.OID.map", "mapa OID nulo fornecido"}, // javax.security.auth.Subject + {"NEWLINE", "\n"}, {"invalid.null.AccessControlContext.provided", "AccessControlContext nulo inv\u00E1lido fornecido"}, {"invalid.null.action.provided", "a\u00E7\u00E3o nula inv\u00E1lida fornecida"}, @@ -656,6 +162,7 @@ public class Resources_pt_BR extends java.util.ListResourceBundle { * * @return the contents of this ResourceBundle. */ + @Override public Object[][] getContents() { return contents; } diff --git a/jdk/src/share/classes/sun/security/util/Resources_sv.java b/jdk/src/share/classes/sun/security/util/Resources_sv.java index 8ff0e3e9943..e16c1f77f72 100644 --- a/jdk/src/share/classes/sun/security/util/Resources_sv.java +++ b/jdk/src/share/classes/sun/security/util/Resources_sv.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2000, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2000, 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 @@ -34,501 +34,6 @@ public class Resources_sv extends java.util.ListResourceBundle { private static final Object[][] contents = { - // shared (from jarsigner) - {"SPACE", " "}, - {"2SPACE", " "}, - {"6SPACE", " "}, - {"COMMA", ", "}, - // shared (from keytool) - {"NEWLINE", "\n"}, - {"STAR", - "*******************************************"}, - {"STARNN", - "*******************************************\n\n"}, - - // keytool: Help part -// "Option" should be translated. - {".OPTION.", " [Alternativ]..."}, - {"Options.", "Alternativ:"}, - {"Use.keytool.help.for.all.available.commands", - "L\u00E4s \"Hj\u00E4lp - Nyckelverktyg\" f\u00F6r alla tillg\u00E4ngliga kommandon"}, - {"Key.and.Certificate.Management.Tool", - "Hanteringsverktyg f\u00F6r nycklar och certifikat"}, - {"Commands.", "Kommandon:"}, - {"Use.keytool.command.name.help.for.usage.of.command.name", - "L\u00E4s \"Hj\u00E4lp - Nyckelverktyg - command_name\" om anv\u00E4ndning av command_name"}, - // keytool: help: commands - {"Generates.a.certificate.request", - "Genererar certifikatbeg\u00E4ran"}, //-certreq - {"Changes.an.entry.s.alias", - "\u00C4ndrar postalias"}, //-changealias - {"Deletes.an.entry", - "Tar bort post"}, //-delete - {"Exports.certificate", - "Exporterar certifikat"}, //-exportcert - {"Generates.a.key.pair", - "Genererar nyckelpar"}, //-genkeypair -// translation of "secret" key should be different to "private" key. - {"Generates.a.secret.key", - "Genererar hemlig nyckel"}, //-genseckey - {"Generates.certificate.from.a.certificate.request", - "Genererar certifikat fr\u00E5n certifikatbeg\u00E4ran"}, //-gencert - {"Generates.CRL", "Genererar CRL"}, //-gencrl - {"Imports.entries.from.a.JDK.1.1.x.style.identity.database", - "Importerar poster fr\u00E5n identitetsdatabas i JDK 1.1.x-format"}, //-identitydb - {"Imports.a.certificate.or.a.certificate.chain", - "Importerar ett certifikat eller en certifikatkedja"}, //-importcert - {"Imports.one.or.all.entries.from.another.keystore", - "Importerar en eller alla poster fr\u00E5n annat nyckellager"}, //-importkeystore - {"Clones.a.key.entry", - "Klonar en nyckelpost"}, //-keyclone - {"Changes.the.key.password.of.an.entry", - "\u00C4ndrar nyckell\u00F6senordet f\u00F6r en post"}, //-keypasswd - {"Lists.entries.in.a.keystore", - "Visar lista \u00F6ver poster i nyckellager"}, //-list - {"Prints.the.content.of.a.certificate", - "Skriver ut inneh\u00E5llet i ett certifikat"}, //-printcert - {"Prints.the.content.of.a.certificate.request", - "Skriver ut inneh\u00E5llet i en certifikatbeg\u00E4ran"}, //-printcertreq - {"Prints.the.content.of.a.CRL.file", - "Skriver ut inneh\u00E5llet i en CRL-fil"}, //-printcrl - {"Generates.a.self.signed.certificate", - "Genererar ett sj\u00E4lvsignerat certifikat"}, //-selfcert - {"Changes.the.store.password.of.a.keystore", - "\u00C4ndrar lagerl\u00F6senordet f\u00F6r ett nyckellager"}, //-storepasswd - // keytool: help: options - {"alias.name.of.the.entry.to.process", - "aliasnamn f\u00F6r post som ska bearbetas"}, //-alias - {"destination.alias", - "destinationsalias"}, //-destalias - {"destination.key.password", - "l\u00F6senord f\u00F6r destinationsnyckel"}, //-destkeypass - {"destination.keystore.name", - "namn p\u00E5 destinationsnyckellager"}, //-destkeystore - {"destination.keystore.password.protected", - "skyddat l\u00F6senord f\u00F6r destinationsnyckellager"}, //-destprotected - {"destination.keystore.provider.name", - "leverant\u00F6rsnamn f\u00F6r destinationsnyckellager"}, //-destprovidername - {"destination.keystore.password", - "l\u00F6senord f\u00F6r destinationsnyckellager"}, //-deststorepass - {"destination.keystore.type", - "typ av destinationsnyckellager"}, //-deststoretype - {"distinguished.name", - "unikt namn"}, //-dname - {"X.509.extension", - "X.509-till\u00E4gg"}, //-ext - {"output.file.name", - "namn p\u00E5 utdatafil"}, //-file and -outfile - {"input.file.name", - "namn p\u00E5 indatafil"}, //-file and -infile - {"key.algorithm.name", - "namn p\u00E5 nyckelalgoritm"}, //-keyalg - {"key.password", - "nyckell\u00F6senord"}, //-keypass - {"key.bit.size", - "nyckelbitstorlek"}, //-keysize - {"keystore.name", - "namn p\u00E5 nyckellager"}, //-keystore - {"new.password", - "nytt l\u00F6senord"}, //-new - {"do.not.prompt", - "fr\u00E5ga inte"}, //-noprompt - {"password.through.protected.mechanism", - "l\u00F6senord med skyddad mekanism"}, //-protected - {"provider.argument", - "leverant\u00F6rsargument"}, //-providerarg - {"provider.class.name", - "namn p\u00E5 leverant\u00F6rsklass"}, //-providerclass - {"provider.name", - "leverant\u00F6rsnamn"}, //-providername - {"provider.classpath", - "leverant\u00F6rsklass\u00F6kv\u00E4g"}, //-providerpath - {"output.in.RFC.style", - "utdata i RFC-format"}, //-rfc - {"signature.algorithm.name", - "namn p\u00E5 signaturalgoritm"}, //-sigalg - {"source.alias", - "k\u00E4llalias"}, //-srcalias - {"source.key.password", - "l\u00F6senord f\u00F6r k\u00E4llnyckel"}, //-srckeypass - {"source.keystore.name", - "namn p\u00E5 k\u00E4llnyckellager"}, //-srckeystore - {"source.keystore.password.protected", - "skyddat l\u00F6senord f\u00F6r k\u00E4llnyckellager"}, //-srcprotected - {"source.keystore.provider.name", - "leverant\u00F6rsnamn f\u00F6r k\u00E4llnyckellager"}, //-srcprovidername - {"source.keystore.password", - "l\u00F6senord f\u00F6r k\u00E4llnyckellager"}, //-srcstorepass - {"source.keystore.type", - "typ av k\u00E4llnyckellager"}, //-srcstoretype - {"SSL.server.host.and.port", - "SSL-serverv\u00E4rd och -port"}, //-sslserver - {"signed.jar.file", - "signerad jar-fil"}, //=jarfile - {"certificate.validity.start.date.time", - "startdatum/-tid f\u00F6r certifikatets giltighet"}, //-startdate - {"keystore.password", - "l\u00F6senord f\u00F6r nyckellager"}, //-storepass - {"keystore.type", - "nyckellagertyp"}, //-storetype - {"trust.certificates.from.cacerts", - "tillf\u00F6rlitliga certifikat fr\u00E5n cacerts"}, //-trustcacerts - {"verbose.output", - "utf\u00F6rliga utdata"}, //-v - {"validity.number.of.days", - "antal dagar f\u00F6r giltighet"}, //-validity - {"Serial.ID.of.cert.to.revoke", - "Seriellt ID f\u00F6r certifikat som ska \u00E5terkallas"}, //-id - // keytool: Running part - {"keytool.error.", "nyckelverktygsfel: "}, - {"Illegal.option.", "Otill\u00E5tet alternativ: "}, - {"Illegal.value.", "Otill\u00E5tet v\u00E4rde: "}, - {"Unknown.password.type.", "Ok\u00E4nd l\u00F6senordstyp: "}, - {"Cannot.find.environment.variable.", - "Kan inte hitta milj\u00F6variabel: "}, - {"Cannot.find.file.", "Hittar inte fil: "}, - {"Command.option.flag.needs.an.argument.", "Kommandoalternativet {0} beh\u00F6ver ett argument."}, - {"Warning.Different.store.and.key.passwords.not.supported.for.PKCS12.KeyStores.Ignoring.user.specified.command.value.", - "Varning! PKCS12-nyckellager har inte st\u00F6d f\u00F6r olika l\u00F6senord f\u00F6r lagret och nyckeln. Det anv\u00E4ndarspecificerade {0}-v\u00E4rdet ignoreras."}, - {".keystore.must.be.NONE.if.storetype.is.{0}", - "-keystore m\u00E5ste vara NONE om -storetype \u00E4r {0}"}, - {"Too.many.retries.program.terminated", - "F\u00F6r m\u00E5nga f\u00F6rs\u00F6k. Programmet avslutas"}, - {".storepasswd.and.keypasswd.commands.not.supported.if.storetype.is.{0}", - "-storepasswd- och -keypasswd-kommandon st\u00F6ds inte om -storetype \u00E4r {0}"}, - {".keypasswd.commands.not.supported.if.storetype.is.PKCS12", - "-keypasswd-kommandon st\u00F6ds inte om -storetype \u00E4r PKCS12"}, - {".keypass.and.new.can.not.be.specified.if.storetype.is.{0}", - "-keypass och -new kan inte anges om -storetype \u00E4r {0}"}, - {"if.protected.is.specified.then.storepass.keypass.and.new.must.not.be.specified", - "om -protected har angetts f\u00E5r inte -storepass, -keypass och -new anges"}, - {"if.srcprotected.is.specified.then.srcstorepass.and.srckeypass.must.not.be.specified", - "om -srcprotected anges f\u00E5r -srcstorepass och -srckeypass inte anges"}, - {"if.keystore.is.not.password.protected.then.storepass.keypass.and.new.must.not.be.specified", - "om nyckellagret inte \u00E4r l\u00F6senordsskyddat f\u00E5r -storepass, -keypass och -new inte anges"}, - {"if.source.keystore.is.not.password.protected.then.srcstorepass.and.srckeypass.must.not.be.specified", - "om k\u00E4llnyckellagret inte \u00E4r l\u00F6senordsskyddat f\u00E5r -srcstorepass och -srckeypass inte anges"}, - {"Illegal.startdate.value", "Otill\u00E5tet v\u00E4rde f\u00F6r startdatum"}, - {"Validity.must.be.greater.than.zero", - "Giltigheten m\u00E5ste vara st\u00F6rre \u00E4n noll"}, - {"provName.not.a.provider", "{0} \u00E4r inte en leverant\u00F6r"}, - {"Usage.error.no.command.provided", "Syntaxfel: inget kommando angivet"}, - {"Source.keystore.file.exists.but.is.empty.", "Nyckellagrets k\u00E4llfil finns, men \u00E4r tom: "}, - {"Please.specify.srckeystore", "Ange -srckeystore"}, - {"Must.not.specify.both.v.and.rfc.with.list.command", - "Kan inte specificera b\u00E5de -v och -rfc med 'list'-kommandot"}, - {"Key.password.must.be.at.least.6.characters", - "Nyckell\u00F6senordet m\u00E5ste inneh\u00E5lla minst 6 tecken"}, - {"New.password.must.be.at.least.6.characters", - "Det nya l\u00F6senordet m\u00E5ste inneh\u00E5lla minst 6 tecken"}, - {"Keystore.file.exists.but.is.empty.", - "Nyckellagerfilen finns, men \u00E4r tom: "}, - {"Keystore.file.does.not.exist.", - "Nyckellagerfilen finns inte: "}, - {"Must.specify.destination.alias", "Du m\u00E5ste ange destinationsalias"}, - {"Must.specify.alias", "Du m\u00E5ste ange alias"}, - {"Keystore.password.must.be.at.least.6.characters", - "Nyckellagerl\u00F6senordet m\u00E5ste inneh\u00E5lla minst 6 tecken"}, - {"Enter.keystore.password.", "Ange nyckellagerl\u00F6senord: "}, - {"Enter.source.keystore.password.", "Ange l\u00F6senord f\u00F6r k\u00E4llnyckellagret: "}, - {"Enter.destination.keystore.password.", "Ange nyckellagerl\u00F6senord f\u00F6r destination: "}, - {"Keystore.password.is.too.short.must.be.at.least.6.characters", - "Nyckellagerl\u00F6senordet \u00E4r f\u00F6r kort - det m\u00E5ste inneh\u00E5lla minst 6 tecken"}, - {"Unknown.Entry.Type", "Ok\u00E4nd posttyp"}, - {"Too.many.failures.Alias.not.changed", "F\u00F6r m\u00E5nga fel. Alias har inte \u00E4ndrats"}, - {"Entry.for.alias.alias.successfully.imported.", - "Posten f\u00F6r alias {0} har importerats."}, - {"Entry.for.alias.alias.not.imported.", "Posten f\u00F6r alias {0} har inte importerats."}, - {"Problem.importing.entry.for.alias.alias.exception.Entry.for.alias.alias.not.imported.", - "Ett problem uppstod vid importen av posten f\u00F6r alias {0}: {1}.\nPosten {0} har inte importerats."}, - {"Import.command.completed.ok.entries.successfully.imported.fail.entries.failed.or.cancelled", - "Kommandoimporten slutf\u00F6rd: {0} poster har importerats, {1} poster var felaktiga eller annullerades"}, - {"Warning.Overwriting.existing.alias.alias.in.destination.keystore", - "Varning! Det befintliga aliaset {0} i destinationsnyckellagret skrivs \u00F6ver"}, - {"Existing.entry.alias.alias.exists.overwrite.no.", - "Aliaset {0} finns redan. Vill du skriva \u00F6ver det? [nej]: "}, - {"Too.many.failures.try.later", "F\u00F6r m\u00E5nga fel - f\u00F6rs\u00F6k igen senare"}, - {"Certification.request.stored.in.file.filename.", - "Certifikatbeg\u00E4ran har lagrats i filen <{0}>"}, - {"Submit.this.to.your.CA", "Skicka detta till certifikatutf\u00E4rdaren"}, - {"if.alias.not.specified.destalias.srckeypass.and.destkeypass.must.not.be.specified", - "om n\u00E5got alias inte anges f\u00E5r destalias, srckeypass och destkeypass inte anges"}, - {"Certificate.stored.in.file.filename.", - "Certifikatet har lagrats i filen <{0}>"}, - {"Certificate.reply.was.installed.in.keystore", - "Certifikatsvaret har installerats i nyckellagret"}, - {"Certificate.reply.was.not.installed.in.keystore", - "Certifikatsvaret har inte installerats i nyckellagret"}, - {"Certificate.was.added.to.keystore", - "Certifikatet har lagts till i nyckellagret"}, - {"Certificate.was.not.added.to.keystore", - "Certifikatet har inte lagts till i nyckellagret"}, - {".Storing.ksfname.", "[Lagrar {0}]"}, - {"alias.has.no.public.key.certificate.", - "{0} saknar offentlig nyckel (certifikat)"}, - {"Cannot.derive.signature.algorithm", - "Kan inte h\u00E4rleda signaturalgoritm"}, - {"Alias.alias.does.not.exist", - "Aliaset <{0}> finns inte"}, - {"Alias.alias.has.no.certificate", - "Aliaset <{0}> saknar certifikat"}, - {"Key.pair.not.generated.alias.alias.already.exists", - "Nyckelparet genererades inte. Aliaset <{0}> finns redan"}, - {"Generating.keysize.bit.keyAlgName.key.pair.and.self.signed.certificate.sigAlgName.with.a.validity.of.validality.days.for", - "Genererar {0} bitars {1}-nyckelpar och sj\u00E4lvsignerat certifikat ({2}) med en giltighet p\u00E5 {3} dagar\n\tf\u00F6r: {4}"}, - {"Enter.key.password.for.alias.", "Ange nyckell\u00F6senord f\u00F6r <{0}>"}, - {".RETURN.if.same.as.keystore.password.", - "\t(RETURN om det \u00E4r identiskt med nyckellagerl\u00F6senordet): "}, - {"Key.password.is.too.short.must.be.at.least.6.characters", - "Nyckell\u00F6senordet \u00E4r f\u00F6r kort - det m\u00E5ste inneh\u00E5lla minst 6 tecken"}, - {"Too.many.failures.key.not.added.to.keystore", - "F\u00F6r m\u00E5nga fel - nyckeln lades inte till i nyckellagret"}, - {"Destination.alias.dest.already.exists", - "Destinationsaliaset <{0}> finns redan"}, - {"Password.is.too.short.must.be.at.least.6.characters", - "L\u00F6senordet \u00E4r f\u00F6r kort - det m\u00E5ste inneh\u00E5lla minst 6 tecken"}, - {"Too.many.failures.Key.entry.not.cloned", - "F\u00F6r m\u00E5nga fel. Nyckelposten har inte klonats"}, - {"key.password.for.alias.", "nyckell\u00F6senord f\u00F6r <{0}>"}, - {"Keystore.entry.for.id.getName.already.exists", - "Nyckellagerpost f\u00F6r <{0}> finns redan"}, - {"Creating.keystore.entry.for.id.getName.", - "Skapar nyckellagerpost f\u00F6r <{0}> ..."}, - {"No.entries.from.identity.database.added", - "Inga poster fr\u00E5n identitetsdatabasen har lagts till"}, - {"Alias.name.alias", "Aliasnamn: {0}"}, - {"Creation.date.keyStore.getCreationDate.alias.", - "Skapat den: {0,date}"}, - {"alias.keyStore.getCreationDate.alias.", - "{0}, {1,date}, "}, - {"alias.", "{0}, "}, - {"Entry.type.type.", "Posttyp: {0}"}, - {"Certificate.chain.length.", "L\u00E4ngd p\u00E5 certifikatskedja: "}, - {"Certificate.i.1.", "Certifikat[{0,number,integer}]:"}, - {"Certificate.fingerprint.SHA1.", "Certifikatets fingeravtryck (SHA1): "}, - {"Keystore.type.", "Nyckellagertyp: "}, - {"Keystore.provider.", "Nyckellagerleverant\u00F6r: "}, - {"Your.keystore.contains.keyStore.size.entry", - "Nyckellagret inneh\u00E5ller {0,number,integer} post"}, - {"Your.keystore.contains.keyStore.size.entries", - "Nyckellagret inneh\u00E5ller {0,number,integer} poster"}, - {"Failed.to.parse.input", "Kunde inte tolka indata"}, - {"Empty.input", "Inga indata"}, - {"Not.X.509.certificate", "Inte ett X.509-certifikat"}, - {"alias.has.no.public.key", "{0} saknar offentlig nyckel"}, - {"alias.has.no.X.509.certificate", "{0} saknar X.509-certifikat"}, - {"New.certificate.self.signed.", "Nytt certifikat (sj\u00E4lvsignerat):"}, - {"Reply.has.no.certificates", "Svaret saknar certifikat"}, - {"Certificate.not.imported.alias.alias.already.exists", - "Certifikatet importerades inte. Aliaset <{0}> finns redan"}, - {"Input.not.an.X.509.certificate", "Indata \u00E4r inte ett X.509-certifikat"}, - {"Certificate.already.exists.in.keystore.under.alias.trustalias.", - "Certifikatet finns redan i nyckellagerfilen under aliaset <{0}>"}, - {"Do.you.still.want.to.add.it.no.", - "Vill du fortfarande l\u00E4gga till det? [nej]: "}, - {"Certificate.already.exists.in.system.wide.CA.keystore.under.alias.trustalias.", - "Certifikatet finns redan i den systemomsp\u00E4nnande CA-nyckellagerfilen under aliaset <{0}>"}, - {"Do.you.still.want.to.add.it.to.your.own.keystore.no.", - "Vill du fortfarande l\u00E4gga till det i ditt eget nyckellagret? [nej]: "}, - {"Trust.this.certificate.no.", "Litar du p\u00E5 det h\u00E4r certifikatet? [nej]: "}, - {"YES", "Ja"}, - {"New.prompt.", "Nytt {0}: "}, - {"Passwords.must.differ", "L\u00F6senorden m\u00E5ste vara olika"}, - {"Re.enter.new.prompt.", "Ange nytt {0} igen: "}, - {"Re.enter.new.password.", "Ange det nya l\u00F6senordet igen: "}, - {"They.don.t.match.Try.again", "De matchar inte. F\u00F6rs\u00F6k igen"}, - {"Enter.prompt.alias.name.", "Ange aliasnamn f\u00F6r {0}: "}, - {"Enter.new.alias.name.RETURN.to.cancel.import.for.this.entry.", - "Ange ett nytt aliasnamn\t(skriv RETURN f\u00F6r att avbryta importen av denna post): "}, - {"Enter.alias.name.", "Ange aliasnamn: "}, - {".RETURN.if.same.as.for.otherAlias.", - "\t(RETURN om det \u00E4r det samma som f\u00F6r <{0}>)"}, - {".PATTERN.printX509Cert", - "\u00C4gare: {0}\nUtf\u00E4rdare: {1}\nSerienummer: {2}\nGiltigt fr\u00E5n den: {3} till: {4}\nCertifikatets fingeravtryck:\n\t MD5: {5}\n\t SHA1: {6}\n\t SHA256: {7}\n\t Namn p\u00E5 signaturalgoritm: {8}\n\t Version: {9}"}, - {"What.is.your.first.and.last.name.", - "Vad heter du i f\u00F6r- och efternamn?"}, - {"What.is.the.name.of.your.organizational.unit.", - "Vad heter din avdelning inom organisationen?"}, - {"What.is.the.name.of.your.organization.", - "Vad heter din organisation?"}, - {"What.is.the.name.of.your.City.or.Locality.", - "Vad heter din ort eller plats?"}, - {"What.is.the.name.of.your.State.or.Province.", - "Vad heter ditt land eller din provins?"}, - {"What.is.the.two.letter.country.code.for.this.unit.", - "Vilken \u00E4r den tv\u00E5st\u00E4lliga landskoden?"}, - {"Is.name.correct.", "\u00C4r {0} korrekt?"}, - {"no", "nej"}, - {"yes", "ja"}, - {"y", "j"}, - {".defaultValue.", " [{0}]: "}, - {"Alias.alias.has.no.key", - "Aliaset <{0}> saknar nyckel"}, - {"Alias.alias.references.an.entry.type.that.is.not.a.private.key.entry.The.keyclone.command.only.supports.cloning.of.private.key", - "Aliaset <{0}> refererar till en posttyp som inte \u00E4r n\u00E5gon privat nyckelpost. Kommandot -keyclone har endast st\u00F6d f\u00F6r kloning av privata nyckelposter"}, - - {".WARNING.WARNING.WARNING.", - "***************** Varning Varning Varning *****************"}, - {"Signer.d.", "Signerare #%d:"}, - {"Timestamp.", "Tidsst\u00E4mpel:"}, - {"Signature.", "Underskrift:"}, - {"CRLs.", "CRL:er:"}, - {"Certificate.owner.", "Certifikat\u00E4gare: "}, - {"Not.a.signed.jar.file", "Ingen signerad jar-fil"}, - {"No.certificate.from.the.SSL.server", - "Inget certifikat fr\u00E5n SSL-servern"}, - - {".The.integrity.of.the.information.stored.in.your.keystore.", - "* Integriteten f\u00F6r den information som lagras i nyckellagerfilen *\n* har INTE verifierats! Om du vill verifiera dess integritet *\n* m\u00E5ste du ange l\u00F6senordet f\u00F6r nyckellagret. *"}, - {".The.integrity.of.the.information.stored.in.the.srckeystore.", - "* Integriteten f\u00F6r den information som lagras i srckeystore*\n* har INTE verifierats! Om du vill verifiera dess integritet *\n* m\u00E5ste du ange l\u00F6senordet f\u00F6r srckeystore. *"}, - - {"Certificate.reply.does.not.contain.public.key.for.alias.", - "Certifikatsvaret inneh\u00E5ller inte n\u00E5gon offentlig nyckel f\u00F6r <{0}>"}, - {"Incomplete.certificate.chain.in.reply", - "Ofullst\u00E4ndig certifikatskedja i svaret"}, - {"Certificate.chain.in.reply.does.not.verify.", - "Certifikatskedjan i svaret g\u00E5r inte att verifiera: "}, - {"Top.level.certificate.in.reply.", - "Toppniv\u00E5certifikatet i svaret:\n"}, - {".is.not.trusted.", "... \u00E4r inte betrott. "}, - {"Install.reply.anyway.no.", "Vill du installera svaret \u00E4nd\u00E5? [nej]: "}, - {"NO", "Nej"}, - {"Public.keys.in.reply.and.keystore.don.t.match", - "De offentliga nycklarna i svaret och nyckellagret matchar inte varandra"}, - {"Certificate.reply.and.certificate.in.keystore.are.identical", - "Certifikatsvaret och certifikatet i nyckellagret \u00E4r identiska"}, - {"Failed.to.establish.chain.from.reply", - "Kunde inte uppr\u00E4tta kedja fr\u00E5n svaret"}, - {"n", "n"}, - {"Wrong.answer.try.again", "Fel svar. F\u00F6rs\u00F6k p\u00E5 nytt."}, - {"Secret.key.not.generated.alias.alias.already.exists", - "Den hemliga nyckeln har inte genererats eftersom aliaset <{0}> redan finns"}, - {"Please.provide.keysize.for.secret.key.generation", - "Ange -keysize f\u00F6r att skapa hemlig nyckel"}, - - {"Extensions.", "Till\u00E4gg: "}, - {".Empty.value.", "(Tomt v\u00E4rde)"}, - {"Extension.Request.", "Till\u00E4ggsbeg\u00E4ran:"}, - {"PKCS.10.Certificate.Request.Version.1.0.Subject.s.Public.Key.s.format.s.key.", - "PKCS #10 certifikatbeg\u00E4ran (version 1.0)\n\u00C4mne: %s\nAllm\u00E4n nyckel: %s-format %s-nyckel\n"}, - {"Unknown.keyUsage.type.", "Ok\u00E4nd keyUsage-typ: "}, - {"Unknown.extendedkeyUsage.type.", "Ok\u00E4nd extendedkeyUsage-typ: "}, - {"Unknown.AccessDescription.type.", "Ok\u00E4nd AccessDescription-typ: "}, - {"Unrecognized.GeneralName.type.", "Ok\u00E4nd GeneralName-typ: "}, - {"This.extension.cannot.be.marked.as.critical.", - "Detta till\u00E4gg kan inte markeras som kritiskt. "}, - {"Odd.number.of.hex.digits.found.", "Udda antal hex-siffror p\u00E5tr\u00E4ffades: "}, - {"Unknown.extension.type.", "Ok\u00E4nd till\u00E4ggstyp: "}, - {"command.{0}.is.ambiguous.", "kommandot {0} \u00E4r tvetydigt:"}, - - // policytool - {"Warning.A.public.key.for.alias.signers.i.does.not.exist.Make.sure.a.KeyStore.is.properly.configured.", - "Varning! Det finns ingen offentlig nyckel f\u00F6r aliaset {0}. Kontrollera att det aktuella nyckellagret \u00E4r korrekt konfigurerat."}, - {"Warning.Class.not.found.class", "Varning! Klassen hittades inte: {0}"}, - {"Warning.Invalid.argument.s.for.constructor.arg", - "Varning! Ogiltiga argument f\u00F6r konstruktor: {0}"}, - {"Illegal.Principal.Type.type", "Otill\u00E5ten identitetshavaretyp: {0}"}, - {"Illegal.option.option", "Otill\u00E5tet alternativ: {0}"}, - {"Usage.policytool.options.", "Syntax: policytool [alternativ]"}, - {".file.file.policy.file.location", - " [-file ] policyfilens plats"}, - {"New", "Nytt"}, - {"Open", "\u00D6ppna"}, - {"Save", "Spara"}, - {"Save.As", "Spara som"}, - {"View.Warning.Log", "Visa varningslogg"}, - {"Exit", "Avsluta"}, - {"Add.Policy.Entry", "L\u00E4gg till policypost"}, - {"Edit.Policy.Entry", "Redigera policypost"}, - {"Remove.Policy.Entry", "Ta bort policypost"}, - {"Edit", "Redigera"}, - {"Retain", "Beh\u00E5ll"}, - - {"Warning.File.name.may.include.escaped.backslash.characters.It.is.not.necessary.to.escape.backslash.characters.the.tool.escapes", - "Varning! Filnamnet kan inneh\u00E5lla omv\u00E4nda snedstreck inom citattecken. Citattecken kr\u00E4vs inte f\u00F6r omv\u00E4nda snedstreck (verktyget hanterar detta n\u00E4r policyinneh\u00E5llet skrivs till det best\u00E4ndiga lagret).\n\nKlicka p\u00E5 Beh\u00E5ll f\u00F6r att beh\u00E5lla det angivna namnet, eller klicka p\u00E5 Redigera f\u00F6r att \u00E4ndra det."}, - - {"Add.Public.Key.Alias", "L\u00E4gg till offentligt nyckelalias"}, - {"Remove.Public.Key.Alias", "Ta bort offentligt nyckelalias"}, - {"File", "Fil"}, - {"KeyStore", "Nyckellager"}, - {"Policy.File.", "Policyfil:"}, - {"Could.not.open.policy.file.policyFile.e.toString.", - "Kan inte \u00F6ppna policyfilen: {0}: {1}"}, - {"Policy.Tool", "Policyverktyg"}, - {"Errors.have.occurred.while.opening.the.policy.configuration.View.the.Warning.Log.for.more.information.", - "Det uppstod ett fel n\u00E4r policykonfigurationen skulle \u00F6ppnas. Se varningsloggen f\u00F6r mer information."}, - {"Error", "Fel"}, - {"OK", "OK"}, - {"Status", "Status"}, - {"Warning", "Varning"}, - {"Permission.", - "Beh\u00F6righet: "}, - {"Principal.Type.", "Identitetshavaretyp:"}, - {"Principal.Name.", "Identitetshavare:"}, - {"Target.Name.", - "M\u00E5l: "}, - {"Actions.", - "Funktioner: "}, - {"OK.to.overwrite.existing.file.filename.", - "Ska den befintliga filen {0} skrivas \u00F6ver?"}, - {"Cancel", "Avbryt"}, - {"CodeBase.", "Kodbas:"}, - {"SignedBy.", "Signerad av:"}, - {"Add.Principal", "L\u00E4gg till identitetshavare"}, - {"Edit.Principal", "Redigera identitetshavare"}, - {"Remove.Principal", "Ta bort identitetshavare"}, - {"Principals.", "Identitetshavare:"}, - {".Add.Permission", " L\u00E4gg till beh\u00F6righet"}, - {".Edit.Permission", " Redigera beh\u00F6righet"}, - {"Remove.Permission", "Ta bort beh\u00F6righet"}, - {"Done", "Utf\u00F6rd"}, - {"KeyStore.URL.", "URL f\u00F6r nyckellager:"}, - {"KeyStore.Type.", "Nyckellagertyp:"}, - {"KeyStore.Provider.", "Nyckellagerleverant\u00F6r:"}, - {"KeyStore.Password.URL.", "URL f\u00F6r l\u00F6senord till nyckellager:"}, - {"Principals", "Identitetshavare"}, - {".Edit.Principal.", " Redigera identitetshavare:"}, - {".Add.New.Principal.", " L\u00E4gg till ny identitetshavare:"}, - {"Permissions", "Beh\u00F6righet"}, - {".Edit.Permission.", " Redigera beh\u00F6righet:"}, - {".Add.New.Permission.", " L\u00E4gg till ny beh\u00F6righet:"}, - {"Signed.By.", "Signerad av:"}, - {"Cannot.Specify.Principal.with.a.Wildcard.Class.without.a.Wildcard.Name", - "Kan inte specificera identitetshavare med jokerteckenklass utan jokerteckennamn"}, - {"Cannot.Specify.Principal.without.a.Name", - "Kan inte specificera identitetshavare utan namn"}, - {"Permission.and.Target.Name.must.have.a.value", - "Beh\u00F6righet och m\u00E5lnamn m\u00E5ste ha ett v\u00E4rde"}, - {"Remove.this.Policy.Entry.", "Vill du ta bort den h\u00E4r policyposten?"}, - {"Overwrite.File", "Skriv \u00F6ver fil"}, - {"Policy.successfully.written.to.filename", - "Policy har skrivits till {0}"}, - {"null.filename", "nullfilnamn"}, - {"Save.changes.", "Vill du spara \u00E4ndringarna?"}, - {"Yes", "Ja"}, - {"No", "Nej"}, - {"Policy.Entry", "Policyfel"}, - {"Save.Changes", "Spara \u00E4ndringar"}, - {"No.Policy.Entry.selected", "Ingen policypost har valts"}, - {"Unable.to.open.KeyStore.ex.toString.", - "Kan inte \u00F6ppna nyckellagret: {0}"}, - {"No.principal.selected", "Ingen identitetshavare har valts"}, - {"No.permission.selected", "Ingen beh\u00F6righet har valts"}, - {"name", "namn"}, - {"configuration.type", "konfigurationstyp"}, - {"environment.variable.name", "variabelnamn f\u00F6r milj\u00F6"}, - {"library.name", "biblioteksnamn"}, - {"package.name", "paketnamn"}, - {"policy.type", "policytyp"}, - {"property.name", "egenskapsnamn"}, - {"Principal.List", "Lista \u00F6ver identitetshavare"}, - {"Permission.List", "Beh\u00F6righetslista"}, - {"Code.Base", "Kodbas"}, - {"KeyStore.U.R.L.", "URL f\u00F6r nyckellager:"}, - {"KeyStore.Password.U.R.L.", "URL f\u00F6r l\u00F6senord till nyckellager:"}, - - // javax.security.auth.PrivateCredentialPermission {"invalid.null.input.s.", "ogiltiga null-indata"}, {"actions.can.only.be.read.", "funktioner kan endast 'l\u00E4sas'"}, @@ -553,6 +58,7 @@ public class Resources_sv extends java.util.ListResourceBundle { {"provided.null.OID.map", "null-OID-mappning tillhandah\u00F6lls"}, // javax.security.auth.Subject + {"NEWLINE", "\n"}, {"invalid.null.AccessControlContext.provided", "ogiltigt null-AccessControlContext"}, {"invalid.null.action.provided", "ogiltig null-funktion"}, @@ -656,6 +162,7 @@ public class Resources_sv extends java.util.ListResourceBundle { * * @return the contents of this ResourceBundle. */ + @Override public Object[][] getContents() { return contents; } diff --git a/jdk/src/share/classes/sun/security/util/Resources_zh_CN.java b/jdk/src/share/classes/sun/security/util/Resources_zh_CN.java index fa4f7a4fec9..80b8763c15f 100644 --- a/jdk/src/share/classes/sun/security/util/Resources_zh_CN.java +++ b/jdk/src/share/classes/sun/security/util/Resources_zh_CN.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2000, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2000, 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 @@ -34,501 +34,6 @@ public class Resources_zh_CN extends java.util.ListResourceBundle { private static final Object[][] contents = { - // shared (from jarsigner) - {"SPACE", " "}, - {"2SPACE", " "}, - {"6SPACE", " "}, - {"COMMA", ", "}, - // shared (from keytool) - {"NEWLINE", "\n"}, - {"STAR", - "*******************************************"}, - {"STARNN", - "*******************************************\n\n"}, - - // keytool: Help part -// "Option" should be translated. - {".OPTION.", " [\u9009\u9879]..."}, - {"Options.", "\u9009\u9879:"}, - {"Use.keytool.help.for.all.available.commands", - "\u4F7F\u7528 \"keytool -help\" \u83B7\u53D6\u6240\u6709\u53EF\u7528\u547D\u4EE4"}, - {"Key.and.Certificate.Management.Tool", - "\u5BC6\u94A5\u548C\u8BC1\u4E66\u7BA1\u7406\u5DE5\u5177"}, - {"Commands.", "\u547D\u4EE4:"}, - {"Use.keytool.command.name.help.for.usage.of.command.name", - "\u4F7F\u7528 \"keytool -command_name -help\" \u83B7\u53D6 command_name \u7684\u7528\u6CD5"}, - // keytool: help: commands - {"Generates.a.certificate.request", - "\u751F\u6210\u8BC1\u4E66\u8BF7\u6C42"}, //-certreq - {"Changes.an.entry.s.alias", - "\u66F4\u6539\u6761\u76EE\u7684\u522B\u540D"}, //-changealias - {"Deletes.an.entry", - "\u5220\u9664\u6761\u76EE"}, //-delete - {"Exports.certificate", - "\u5BFC\u51FA\u8BC1\u4E66"}, //-exportcert - {"Generates.a.key.pair", - "\u751F\u6210\u5BC6\u94A5\u5BF9"}, //-genkeypair -// translation of "secret" key should be different to "private" key. - {"Generates.a.secret.key", - "\u751F\u6210\u5BF9\u79F0\u5BC6\u94A5"}, //-genseckey - {"Generates.certificate.from.a.certificate.request", - "\u6839\u636E\u8BC1\u4E66\u8BF7\u6C42\u751F\u6210\u8BC1\u4E66"}, //-gencert - {"Generates.CRL", "\u751F\u6210 CRL"}, //-gencrl - {"Imports.entries.from.a.JDK.1.1.x.style.identity.database", - "\u4ECE JDK 1.1.x \u6837\u5F0F\u7684\u8EAB\u4EFD\u6570\u636E\u5E93\u5BFC\u5165\u6761\u76EE"}, //-identitydb - {"Imports.a.certificate.or.a.certificate.chain", - "\u5BFC\u5165\u8BC1\u4E66\u6216\u8BC1\u4E66\u94FE"}, //-importcert - {"Imports.one.or.all.entries.from.another.keystore", - "\u4ECE\u5176\u4ED6\u5BC6\u94A5\u5E93\u5BFC\u5165\u4E00\u4E2A\u6216\u6240\u6709\u6761\u76EE"}, //-importkeystore - {"Clones.a.key.entry", - "\u514B\u9686\u5BC6\u94A5\u6761\u76EE"}, //-keyclone - {"Changes.the.key.password.of.an.entry", - "\u66F4\u6539\u6761\u76EE\u7684\u5BC6\u94A5\u53E3\u4EE4"}, //-keypasswd - {"Lists.entries.in.a.keystore", - "\u5217\u51FA\u5BC6\u94A5\u5E93\u4E2D\u7684\u6761\u76EE"}, //-list - {"Prints.the.content.of.a.certificate", - "\u6253\u5370\u8BC1\u4E66\u5185\u5BB9"}, //-printcert - {"Prints.the.content.of.a.certificate.request", - "\u6253\u5370\u8BC1\u4E66\u8BF7\u6C42\u7684\u5185\u5BB9"}, //-printcertreq - {"Prints.the.content.of.a.CRL.file", - "\u6253\u5370 CRL \u6587\u4EF6\u7684\u5185\u5BB9"}, //-printcrl - {"Generates.a.self.signed.certificate", - "\u751F\u6210\u81EA\u7B7E\u540D\u8BC1\u4E66"}, //-selfcert - {"Changes.the.store.password.of.a.keystore", - "\u66F4\u6539\u5BC6\u94A5\u5E93\u7684\u5B58\u50A8\u53E3\u4EE4"}, //-storepasswd - // keytool: help: options - {"alias.name.of.the.entry.to.process", - "\u8981\u5904\u7406\u7684\u6761\u76EE\u7684\u522B\u540D"}, //-alias - {"destination.alias", - "\u76EE\u6807\u522B\u540D"}, //-destalias - {"destination.key.password", - "\u76EE\u6807\u5BC6\u94A5\u53E3\u4EE4"}, //-destkeypass - {"destination.keystore.name", - "\u76EE\u6807\u5BC6\u94A5\u5E93\u540D\u79F0"}, //-destkeystore - {"destination.keystore.password.protected", - "\u53D7\u4FDD\u62A4\u7684\u76EE\u6807\u5BC6\u94A5\u5E93\u53E3\u4EE4"}, //-destprotected - {"destination.keystore.provider.name", - "\u76EE\u6807\u5BC6\u94A5\u5E93\u63D0\u4F9B\u65B9\u540D\u79F0"}, //-destprovidername - {"destination.keystore.password", - "\u76EE\u6807\u5BC6\u94A5\u5E93\u53E3\u4EE4"}, //-deststorepass - {"destination.keystore.type", - "\u76EE\u6807\u5BC6\u94A5\u5E93\u7C7B\u578B"}, //-deststoretype - {"distinguished.name", - "\u552F\u4E00\u5224\u522B\u540D"}, //-dname - {"X.509.extension", - "X.509 \u6269\u5C55"}, //-ext - {"output.file.name", - "\u8F93\u51FA\u6587\u4EF6\u540D"}, //-file and -outfile - {"input.file.name", - "\u8F93\u5165\u6587\u4EF6\u540D"}, //-file and -infile - {"key.algorithm.name", - "\u5BC6\u94A5\u7B97\u6CD5\u540D\u79F0"}, //-keyalg - {"key.password", - "\u5BC6\u94A5\u53E3\u4EE4"}, //-keypass - {"key.bit.size", - "\u5BC6\u94A5\u4F4D\u5927\u5C0F"}, //-keysize - {"keystore.name", - "\u5BC6\u94A5\u5E93\u540D\u79F0"}, //-keystore - {"new.password", - "\u65B0\u53E3\u4EE4"}, //-new - {"do.not.prompt", - "\u4E0D\u63D0\u793A"}, //-noprompt - {"password.through.protected.mechanism", - "\u901A\u8FC7\u53D7\u4FDD\u62A4\u7684\u673A\u5236\u7684\u53E3\u4EE4"}, //-protected - {"provider.argument", - "\u63D0\u4F9B\u65B9\u53C2\u6570"}, //-providerarg - {"provider.class.name", - "\u63D0\u4F9B\u65B9\u7C7B\u540D"}, //-providerclass - {"provider.name", - "\u63D0\u4F9B\u65B9\u540D\u79F0"}, //-providername - {"provider.classpath", - "\u63D0\u4F9B\u65B9\u7C7B\u8DEF\u5F84"}, //-providerpath - {"output.in.RFC.style", - "\u4EE5 RFC \u6837\u5F0F\u8F93\u51FA"}, //-rfc - {"signature.algorithm.name", - "\u7B7E\u540D\u7B97\u6CD5\u540D\u79F0"}, //-sigalg - {"source.alias", - "\u6E90\u522B\u540D"}, //-srcalias - {"source.key.password", - "\u6E90\u5BC6\u94A5\u53E3\u4EE4"}, //-srckeypass - {"source.keystore.name", - "\u6E90\u5BC6\u94A5\u5E93\u540D\u79F0"}, //-srckeystore - {"source.keystore.password.protected", - "\u53D7\u4FDD\u62A4\u7684\u6E90\u5BC6\u94A5\u5E93\u53E3\u4EE4"}, //-srcprotected - {"source.keystore.provider.name", - "\u6E90\u5BC6\u94A5\u5E93\u63D0\u4F9B\u65B9\u540D\u79F0"}, //-srcprovidername - {"source.keystore.password", - "\u6E90\u5BC6\u94A5\u5E93\u53E3\u4EE4"}, //-srcstorepass - {"source.keystore.type", - "\u6E90\u5BC6\u94A5\u5E93\u7C7B\u578B"}, //-srcstoretype - {"SSL.server.host.and.port", - "SSL \u670D\u52A1\u5668\u4E3B\u673A\u548C\u7AEF\u53E3"}, //-sslserver - {"signed.jar.file", - "\u5DF2\u7B7E\u540D\u7684 jar \u6587\u4EF6"}, //=jarfile - {"certificate.validity.start.date.time", - "\u8BC1\u4E66\u6709\u6548\u671F\u5F00\u59CB\u65E5\u671F/\u65F6\u95F4"}, //-startdate - {"keystore.password", - "\u5BC6\u94A5\u5E93\u53E3\u4EE4"}, //-storepass - {"keystore.type", - "\u5BC6\u94A5\u5E93\u7C7B\u578B"}, //-storetype - {"trust.certificates.from.cacerts", - "\u4FE1\u4EFB\u6765\u81EA cacerts \u7684\u8BC1\u4E66"}, //-trustcacerts - {"verbose.output", - "\u8BE6\u7EC6\u8F93\u51FA"}, //-v - {"validity.number.of.days", - "\u6709\u6548\u5929\u6570"}, //-validity - {"Serial.ID.of.cert.to.revoke", - "\u8981\u64A4\u9500\u7684\u8BC1\u4E66\u7684\u5E8F\u5217 ID"}, //-id - // keytool: Running part - {"keytool.error.", "keytool \u9519\u8BEF: "}, - {"Illegal.option.", "\u975E\u6CD5\u9009\u9879: "}, - {"Illegal.value.", "\u975E\u6CD5\u503C: "}, - {"Unknown.password.type.", "\u672A\u77E5\u53E3\u4EE4\u7C7B\u578B: "}, - {"Cannot.find.environment.variable.", - "\u627E\u4E0D\u5230\u73AF\u5883\u53D8\u91CF: "}, - {"Cannot.find.file.", "\u627E\u4E0D\u5230\u6587\u4EF6: "}, - {"Command.option.flag.needs.an.argument.", "\u547D\u4EE4\u9009\u9879{0}\u9700\u8981\u4E00\u4E2A\u53C2\u6570\u3002"}, - {"Warning.Different.store.and.key.passwords.not.supported.for.PKCS12.KeyStores.Ignoring.user.specified.command.value.", - "\u8B66\u544A: PKCS12 KeyStore \u4E0D\u652F\u6301\u5176\u4ED6\u5B58\u50A8\u548C\u5BC6\u94A5\u53E3\u4EE4\u3002\u6B63\u5728\u5FFD\u7565\u7528\u6237\u6307\u5B9A\u7684{0}\u503C\u3002"}, - {".keystore.must.be.NONE.if.storetype.is.{0}", - "\u5982\u679C -storetype \u4E3A {0}, \u5219 -keystore \u5FC5\u987B\u4E3A NONE"}, - {"Too.many.retries.program.terminated", - "\u91CD\u8BD5\u6B21\u6570\u8FC7\u591A, \u7A0B\u5E8F\u5DF2\u7EC8\u6B62"}, - {".storepasswd.and.keypasswd.commands.not.supported.if.storetype.is.{0}", - "\u5982\u679C -storetype \u4E3A {0}, \u5219\u4E0D\u652F\u6301 -storepasswd \u548C -keypasswd \u547D\u4EE4"}, - {".keypasswd.commands.not.supported.if.storetype.is.PKCS12", - "\u5982\u679C -storetype \u4E3A PKCS12, \u5219\u4E0D\u652F\u6301 -keypasswd \u547D\u4EE4"}, - {".keypass.and.new.can.not.be.specified.if.storetype.is.{0}", - "\u5982\u679C -storetype \u4E3A {0}, \u5219\u4E0D\u80FD\u6307\u5B9A -keypass \u548C -new"}, - {"if.protected.is.specified.then.storepass.keypass.and.new.must.not.be.specified", - "\u5982\u679C\u6307\u5B9A\u4E86 -protected, \u5219\u4E0D\u80FD\u6307\u5B9A -storepass, -keypass \u548C -new"}, - {"if.srcprotected.is.specified.then.srcstorepass.and.srckeypass.must.not.be.specified", - "\u5982\u679C\u6307\u5B9A\u4E86 -srcprotected, \u5219\u4E0D\u80FD\u6307\u5B9A -srcstorepass \u548C -srckeypass"}, - {"if.keystore.is.not.password.protected.then.storepass.keypass.and.new.must.not.be.specified", - "\u5982\u679C\u5BC6\u94A5\u5E93\u672A\u53D7\u53E3\u4EE4\u4FDD\u62A4, \u5219\u4E0D\u80FD\u6307\u5B9A -storepass, -keypass \u548C -new"}, - {"if.source.keystore.is.not.password.protected.then.srcstorepass.and.srckeypass.must.not.be.specified", - "\u5982\u679C\u6E90\u5BC6\u94A5\u5E93\u672A\u53D7\u53E3\u4EE4\u4FDD\u62A4, \u5219\u4E0D\u80FD\u6307\u5B9A -srcstorepass \u548C -srckeypass"}, - {"Illegal.startdate.value", "\u975E\u6CD5\u5F00\u59CB\u65E5\u671F\u503C"}, - {"Validity.must.be.greater.than.zero", - "\u6709\u6548\u671F\u5FC5\u987B\u5927\u4E8E\u96F6"}, - {"provName.not.a.provider", "{0}\u4E0D\u662F\u63D0\u4F9B\u65B9"}, - {"Usage.error.no.command.provided", "\u7528\u6CD5\u9519\u8BEF: \u6CA1\u6709\u63D0\u4F9B\u547D\u4EE4"}, - {"Source.keystore.file.exists.but.is.empty.", "\u6E90\u5BC6\u94A5\u5E93\u6587\u4EF6\u5B58\u5728, \u4F46\u4E3A\u7A7A: "}, - {"Please.specify.srckeystore", "\u8BF7\u6307\u5B9A -srckeystore"}, - {"Must.not.specify.both.v.and.rfc.with.list.command", - "'list' \u547D\u4EE4\u4E0D\u80FD\u540C\u65F6\u6307\u5B9A -v \u53CA -rfc"}, - {"Key.password.must.be.at.least.6.characters", - "\u5BC6\u94A5\u53E3\u4EE4\u81F3\u5C11\u5FC5\u987B\u4E3A 6 \u4E2A\u5B57\u7B26"}, - {"New.password.must.be.at.least.6.characters", - "\u65B0\u53E3\u4EE4\u81F3\u5C11\u5FC5\u987B\u4E3A 6 \u4E2A\u5B57\u7B26"}, - {"Keystore.file.exists.but.is.empty.", - "\u5BC6\u94A5\u5E93\u6587\u4EF6\u5B58\u5728, \u4F46\u4E3A\u7A7A: "}, - {"Keystore.file.does.not.exist.", - "\u5BC6\u94A5\u5E93\u6587\u4EF6\u4E0D\u5B58\u5728: "}, - {"Must.specify.destination.alias", "\u5FC5\u987B\u6307\u5B9A\u76EE\u6807\u522B\u540D"}, - {"Must.specify.alias", "\u5FC5\u987B\u6307\u5B9A\u522B\u540D"}, - {"Keystore.password.must.be.at.least.6.characters", - "\u5BC6\u94A5\u5E93\u53E3\u4EE4\u81F3\u5C11\u5FC5\u987B\u4E3A 6 \u4E2A\u5B57\u7B26"}, - {"Enter.keystore.password.", "\u8F93\u5165\u5BC6\u94A5\u5E93\u53E3\u4EE4: "}, - {"Enter.source.keystore.password.", "\u8F93\u5165\u6E90\u5BC6\u94A5\u5E93\u53E3\u4EE4: "}, - {"Enter.destination.keystore.password.", "\u8F93\u5165\u76EE\u6807\u5BC6\u94A5\u5E93\u53E3\u4EE4: "}, - {"Keystore.password.is.too.short.must.be.at.least.6.characters", - "\u5BC6\u94A5\u5E93\u53E3\u4EE4\u592A\u77ED - \u81F3\u5C11\u5FC5\u987B\u4E3A 6 \u4E2A\u5B57\u7B26"}, - {"Unknown.Entry.Type", "\u672A\u77E5\u6761\u76EE\u7C7B\u578B"}, - {"Too.many.failures.Alias.not.changed", "\u6545\u969C\u592A\u591A\u3002\u672A\u66F4\u6539\u522B\u540D"}, - {"Entry.for.alias.alias.successfully.imported.", - "\u5DF2\u6210\u529F\u5BFC\u5165\u522B\u540D {0} \u7684\u6761\u76EE\u3002"}, - {"Entry.for.alias.alias.not.imported.", "\u672A\u5BFC\u5165\u522B\u540D {0} \u7684\u6761\u76EE\u3002"}, - {"Problem.importing.entry.for.alias.alias.exception.Entry.for.alias.alias.not.imported.", - "\u5BFC\u5165\u522B\u540D {0} \u7684\u6761\u76EE\u65F6\u51FA\u73B0\u95EE\u9898: {1}\u3002\n\u672A\u5BFC\u5165\u522B\u540D {0} \u7684\u6761\u76EE\u3002"}, - {"Import.command.completed.ok.entries.successfully.imported.fail.entries.failed.or.cancelled", - "\u5DF2\u5B8C\u6210\u5BFC\u5165\u547D\u4EE4: {0} \u4E2A\u6761\u76EE\u6210\u529F\u5BFC\u5165, {1} \u4E2A\u6761\u76EE\u5931\u8D25\u6216\u53D6\u6D88"}, - {"Warning.Overwriting.existing.alias.alias.in.destination.keystore", - "\u8B66\u544A: \u6B63\u5728\u8986\u76D6\u76EE\u6807\u5BC6\u94A5\u5E93\u4E2D\u7684\u73B0\u6709\u522B\u540D {0}"}, - {"Existing.entry.alias.alias.exists.overwrite.no.", - "\u5B58\u5728\u73B0\u6709\u6761\u76EE\u522B\u540D {0}, \u662F\u5426\u8986\u76D6? [no]: "}, - {"Too.many.failures.try.later", "\u6545\u969C\u592A\u591A - \u8BF7\u7A0D\u540E\u518D\u8BD5"}, - {"Certification.request.stored.in.file.filename.", - "\u5B58\u50A8\u5728\u6587\u4EF6 <{0}> \u4E2D\u7684\u8BA4\u8BC1\u8BF7\u6C42"}, - {"Submit.this.to.your.CA", "\u5C06\u6B64\u63D0\u4EA4\u7ED9\u60A8\u7684 CA"}, - {"if.alias.not.specified.destalias.srckeypass.and.destkeypass.must.not.be.specified", - "\u5982\u679C\u6CA1\u6709\u6307\u5B9A\u522B\u540D, \u5219\u4E0D\u80FD\u6307\u5B9A\u76EE\u6807\u522B\u540D, \u6E90\u5BC6\u94A5\u5E93\u53E3\u4EE4\u548C\u76EE\u6807\u5BC6\u94A5\u5E93\u53E3\u4EE4"}, - {"Certificate.stored.in.file.filename.", - "\u5B58\u50A8\u5728\u6587\u4EF6 <{0}> \u4E2D\u7684\u8BC1\u4E66"}, - {"Certificate.reply.was.installed.in.keystore", - "\u8BC1\u4E66\u56DE\u590D\u5DF2\u5B89\u88C5\u5728\u5BC6\u94A5\u5E93\u4E2D"}, - {"Certificate.reply.was.not.installed.in.keystore", - "\u8BC1\u4E66\u56DE\u590D\u672A\u5B89\u88C5\u5728\u5BC6\u94A5\u5E93\u4E2D"}, - {"Certificate.was.added.to.keystore", - "\u8BC1\u4E66\u5DF2\u6DFB\u52A0\u5230\u5BC6\u94A5\u5E93\u4E2D"}, - {"Certificate.was.not.added.to.keystore", - "\u8BC1\u4E66\u672A\u6DFB\u52A0\u5230\u5BC6\u94A5\u5E93\u4E2D"}, - {".Storing.ksfname.", "[\u6B63\u5728\u5B58\u50A8{0}]"}, - {"alias.has.no.public.key.certificate.", - "{0}\u6CA1\u6709\u516C\u5171\u5BC6\u94A5 (\u8BC1\u4E66)"}, - {"Cannot.derive.signature.algorithm", - "\u65E0\u6CD5\u6D3E\u751F\u7B7E\u540D\u7B97\u6CD5"}, - {"Alias.alias.does.not.exist", - "\u522B\u540D <{0}> \u4E0D\u5B58\u5728"}, - {"Alias.alias.has.no.certificate", - "\u522B\u540D <{0}> \u6CA1\u6709\u8BC1\u4E66"}, - {"Key.pair.not.generated.alias.alias.already.exists", - "\u672A\u751F\u6210\u5BC6\u94A5\u5BF9, \u522B\u540D <{0}> \u5DF2\u7ECF\u5B58\u5728"}, - {"Generating.keysize.bit.keyAlgName.key.pair.and.self.signed.certificate.sigAlgName.with.a.validity.of.validality.days.for", - "\u6B63\u5728\u4E3A\u4EE5\u4E0B\u5BF9\u8C61\u751F\u6210 {0} \u4F4D{1}\u5BC6\u94A5\u5BF9\u548C\u81EA\u7B7E\u540D\u8BC1\u4E66 ({2}) (\u6709\u6548\u671F\u4E3A {3} \u5929):\n\t {4}"}, - {"Enter.key.password.for.alias.", "\u8F93\u5165 <{0}> \u7684\u5BC6\u94A5\u53E3\u4EE4"}, - {".RETURN.if.same.as.keystore.password.", - "\t(\u5982\u679C\u548C\u5BC6\u94A5\u5E93\u53E3\u4EE4\u76F8\u540C, \u6309\u56DE\u8F66): "}, - {"Key.password.is.too.short.must.be.at.least.6.characters", - "\u5BC6\u94A5\u53E3\u4EE4\u592A\u77ED - \u81F3\u5C11\u5FC5\u987B\u4E3A 6 \u4E2A\u5B57\u7B26"}, - {"Too.many.failures.key.not.added.to.keystore", - "\u6545\u969C\u592A\u591A - \u5BC6\u94A5\u672A\u6DFB\u52A0\u5230\u5BC6\u94A5\u5E93\u4E2D"}, - {"Destination.alias.dest.already.exists", - "\u76EE\u6807\u522B\u540D <{0}> \u5DF2\u7ECF\u5B58\u5728"}, - {"Password.is.too.short.must.be.at.least.6.characters", - "\u53E3\u4EE4\u592A\u77ED - \u81F3\u5C11\u5FC5\u987B\u4E3A 6 \u4E2A\u5B57\u7B26"}, - {"Too.many.failures.Key.entry.not.cloned", - "\u6545\u969C\u592A\u591A\u3002\u672A\u514B\u9686\u5BC6\u94A5\u6761\u76EE"}, - {"key.password.for.alias.", "<{0}> \u7684\u5BC6\u94A5\u53E3\u4EE4"}, - {"Keystore.entry.for.id.getName.already.exists", - "<{0}> \u7684\u5BC6\u94A5\u5E93\u6761\u76EE\u5DF2\u7ECF\u5B58\u5728"}, - {"Creating.keystore.entry.for.id.getName.", - "\u6B63\u5728\u521B\u5EFA <{0}> \u7684\u5BC6\u94A5\u5E93\u6761\u76EE..."}, - {"No.entries.from.identity.database.added", - "\u672A\u4ECE\u8EAB\u4EFD\u6570\u636E\u5E93\u4E2D\u6DFB\u52A0\u4EFB\u4F55\u6761\u76EE"}, - {"Alias.name.alias", "\u522B\u540D: {0}"}, - {"Creation.date.keyStore.getCreationDate.alias.", - "\u521B\u5EFA\u65E5\u671F: {0,date}"}, - {"alias.keyStore.getCreationDate.alias.", - "{0}, {1,date}, "}, - {"alias.", "{0}, "}, - {"Entry.type.type.", "\u6761\u76EE\u7C7B\u578B: {0}"}, - {"Certificate.chain.length.", "\u8BC1\u4E66\u94FE\u957F\u5EA6: "}, - {"Certificate.i.1.", "\u8BC1\u4E66[{0,number,integer}]:"}, - {"Certificate.fingerprint.SHA1.", "\u8BC1\u4E66\u6307\u7EB9 (SHA1): "}, - {"Keystore.type.", "\u5BC6\u94A5\u5E93\u7C7B\u578B: "}, - {"Keystore.provider.", "\u5BC6\u94A5\u5E93\u63D0\u4F9B\u65B9: "}, - {"Your.keystore.contains.keyStore.size.entry", - "\u60A8\u7684\u5BC6\u94A5\u5E93\u5305\u542B {0,number,integer} \u4E2A\u6761\u76EE"}, - {"Your.keystore.contains.keyStore.size.entries", - "\u60A8\u7684\u5BC6\u94A5\u5E93\u5305\u542B {0,number,integer} \u4E2A\u6761\u76EE"}, - {"Failed.to.parse.input", "\u65E0\u6CD5\u5BF9\u8F93\u5165\u8FDB\u884C\u8BED\u6CD5\u5206\u6790"}, - {"Empty.input", "\u7A7A\u8F93\u5165"}, - {"Not.X.509.certificate", "\u975E X.509 \u8BC1\u4E66"}, - {"alias.has.no.public.key", "{0}\u6CA1\u6709\u516C\u5171\u5BC6\u94A5"}, - {"alias.has.no.X.509.certificate", "{0}\u6CA1\u6709 X.509 \u8BC1\u4E66"}, - {"New.certificate.self.signed.", "\u65B0\u8BC1\u4E66 (\u81EA\u7B7E\u540D):"}, - {"Reply.has.no.certificates", "\u56DE\u590D\u4E2D\u6CA1\u6709\u8BC1\u4E66"}, - {"Certificate.not.imported.alias.alias.already.exists", - "\u8BC1\u4E66\u672A\u5BFC\u5165, \u522B\u540D <{0}> \u5DF2\u7ECF\u5B58\u5728"}, - {"Input.not.an.X.509.certificate", "\u6240\u8F93\u5165\u7684\u4E0D\u662F X.509 \u8BC1\u4E66"}, - {"Certificate.already.exists.in.keystore.under.alias.trustalias.", - "\u5728\u522B\u540D <{0}> \u4E4B\u4E0B, \u8BC1\u4E66\u5DF2\u7ECF\u5B58\u5728\u4E8E\u5BC6\u94A5\u5E93\u4E2D"}, - {"Do.you.still.want.to.add.it.no.", - "\u662F\u5426\u4ECD\u8981\u6DFB\u52A0? [no]: "}, - {"Certificate.already.exists.in.system.wide.CA.keystore.under.alias.trustalias.", - "\u5728\u522B\u540D <{0}> \u4E4B\u4E0B, \u8BC1\u4E66\u5DF2\u7ECF\u5B58\u5728\u4E8E\u7CFB\u7EDF\u8303\u56F4\u7684 CA \u5BC6\u94A5\u5E93\u4E2D"}, - {"Do.you.still.want.to.add.it.to.your.own.keystore.no.", - "\u662F\u5426\u4ECD\u8981\u5C06\u5B83\u6DFB\u52A0\u5230\u81EA\u5DF1\u7684\u5BC6\u94A5\u5E93? [no]: "}, - {"Trust.this.certificate.no.", "\u662F\u5426\u4FE1\u4EFB\u6B64\u8BC1\u4E66? [no]: "}, - {"YES", "\u662F"}, - {"New.prompt.", "\u65B0{0}: "}, - {"Passwords.must.differ", "\u53E3\u4EE4\u4E0D\u80FD\u76F8\u540C"}, - {"Re.enter.new.prompt.", "\u91CD\u65B0\u8F93\u5165\u65B0{0}: "}, - {"Re.enter.new.password.", "\u518D\u6B21\u8F93\u5165\u65B0\u53E3\u4EE4: "}, - {"They.don.t.match.Try.again", "\u5B83\u4EEC\u4E0D\u5339\u914D\u3002\u8BF7\u91CD\u8BD5"}, - {"Enter.prompt.alias.name.", "\u8F93\u5165{0}\u522B\u540D: "}, - {"Enter.new.alias.name.RETURN.to.cancel.import.for.this.entry.", - "\u8F93\u5165\u65B0\u7684\u522B\u540D\t(\u6309\u56DE\u8F66\u4EE5\u53D6\u6D88\u5BF9\u6B64\u6761\u76EE\u7684\u5BFC\u5165): "}, - {"Enter.alias.name.", "\u8F93\u5165\u522B\u540D: "}, - {".RETURN.if.same.as.for.otherAlias.", - "\t(\u5982\u679C\u548C <{0}> \u76F8\u540C, \u5219\u6309\u56DE\u8F66)"}, - {".PATTERN.printX509Cert", - "\u6240\u6709\u8005: {0}\n\u53D1\u5E03\u8005: {1}\n\u5E8F\u5217\u53F7: {2}\n\u6709\u6548\u671F\u5F00\u59CB\u65E5\u671F: {3}, \u622A\u6B62\u65E5\u671F: {4}\n\u8BC1\u4E66\u6307\u7EB9:\n\t MD5: {5}\n\t SHA1: {6}\n\t SHA256: {7}\n\t \u7B7E\u540D\u7B97\u6CD5\u540D\u79F0: {8}\n\t \u7248\u672C: {9}"}, - {"What.is.your.first.and.last.name.", - "\u60A8\u7684\u540D\u5B57\u4E0E\u59D3\u6C0F\u662F\u4EC0\u4E48?"}, - {"What.is.the.name.of.your.organizational.unit.", - "\u60A8\u7684\u7EC4\u7EC7\u5355\u4F4D\u540D\u79F0\u662F\u4EC0\u4E48?"}, - {"What.is.the.name.of.your.organization.", - "\u60A8\u7684\u7EC4\u7EC7\u540D\u79F0\u662F\u4EC0\u4E48?"}, - {"What.is.the.name.of.your.City.or.Locality.", - "\u60A8\u6240\u5728\u7684\u57CE\u5E02\u6216\u533A\u57DF\u540D\u79F0\u662F\u4EC0\u4E48?"}, - {"What.is.the.name.of.your.State.or.Province.", - "\u60A8\u6240\u5728\u7684\u7701/\u5E02/\u81EA\u6CBB\u533A\u540D\u79F0\u662F\u4EC0\u4E48?"}, - {"What.is.the.two.letter.country.code.for.this.unit.", - "\u8BE5\u5355\u4F4D\u7684\u53CC\u5B57\u6BCD\u56FD\u5BB6/\u5730\u533A\u4EE3\u7801\u662F\u4EC0\u4E48?"}, - {"Is.name.correct.", "{0}\u662F\u5426\u6B63\u786E?"}, - {"no", "\u5426"}, - {"yes", "\u662F"}, - {"y", "y"}, - {".defaultValue.", " [{0}]: "}, - {"Alias.alias.has.no.key", - "\u522B\u540D <{0}> \u6CA1\u6709\u5BC6\u94A5"}, - {"Alias.alias.references.an.entry.type.that.is.not.a.private.key.entry.The.keyclone.command.only.supports.cloning.of.private.key", - "\u522B\u540D <{0}> \u5F15\u7528\u4E86\u4E0D\u5C5E\u4E8E\u79C1\u6709\u5BC6\u94A5\u6761\u76EE\u7684\u6761\u76EE\u7C7B\u578B\u3002-keyclone \u547D\u4EE4\u4EC5\u652F\u6301\u5BF9\u79C1\u6709\u5BC6\u94A5\u6761\u76EE\u7684\u514B\u9686"}, - - {".WARNING.WARNING.WARNING.", - "***************** \u8B66\u544A \u8B66\u544A \u8B66\u544A *****************"}, - {"Signer.d.", "\u7B7E\u540D\u8005 #%d:"}, - {"Timestamp.", "\u65F6\u95F4\u6233:"}, - {"Signature.", "\u7B7E\u540D:"}, - {"CRLs.", "CRL:"}, - {"Certificate.owner.", "\u8BC1\u4E66\u6240\u6709\u8005: "}, - {"Not.a.signed.jar.file", "\u4E0D\u662F\u5DF2\u7B7E\u540D\u7684 jar \u6587\u4EF6"}, - {"No.certificate.from.the.SSL.server", - "\u6CA1\u6709\u6765\u81EA SSL \u670D\u52A1\u5668\u7684\u8BC1\u4E66"}, - - {".The.integrity.of.the.information.stored.in.your.keystore.", - "* \u5B58\u50A8\u5728\u60A8\u7684\u5BC6\u94A5\u5E93\u4E2D\u7684\u4FE1\u606F\u7684\u5B8C\u6574\u6027 *\n* \u5C1A\u672A\u7ECF\u8FC7\u9A8C\u8BC1! \u4E3A\u4E86\u9A8C\u8BC1\u5176\u5B8C\u6574\u6027, *\n* \u5FC5\u987B\u63D0\u4F9B\u5BC6\u94A5\u5E93\u53E3\u4EE4\u3002 *"}, - {".The.integrity.of.the.information.stored.in.the.srckeystore.", - "* \u5B58\u50A8\u5728 srckeystore \u4E2D\u7684\u4FE1\u606F\u7684\u5B8C\u6574\u6027*\n* \u5C1A\u672A\u7ECF\u8FC7\u9A8C\u8BC1! \u4E3A\u4E86\u9A8C\u8BC1\u5176\u5B8C\u6574\u6027, *\n* \u5FC5\u987B\u63D0\u4F9B\u6E90\u5BC6\u94A5\u5E93\u53E3\u4EE4\u3002 *"}, - - {"Certificate.reply.does.not.contain.public.key.for.alias.", - "\u8BC1\u4E66\u56DE\u590D\u4E2D\u4E0D\u5305\u542B <{0}> \u7684\u516C\u5171\u5BC6\u94A5"}, - {"Incomplete.certificate.chain.in.reply", - "\u56DE\u590D\u4E2D\u7684\u8BC1\u4E66\u94FE\u4E0D\u5B8C\u6574"}, - {"Certificate.chain.in.reply.does.not.verify.", - "\u56DE\u590D\u4E2D\u7684\u8BC1\u4E66\u94FE\u672A\u9A8C\u8BC1: "}, - {"Top.level.certificate.in.reply.", - "\u56DE\u590D\u4E2D\u7684\u9876\u7EA7\u8BC1\u4E66:\n"}, - {".is.not.trusted.", "... \u662F\u4E0D\u53EF\u4FE1\u7684\u3002"}, - {"Install.reply.anyway.no.", "\u662F\u5426\u4ECD\u8981\u5B89\u88C5\u56DE\u590D? [no]: "}, - {"NO", "\u5426"}, - {"Public.keys.in.reply.and.keystore.don.t.match", - "\u56DE\u590D\u4E2D\u7684\u516C\u5171\u5BC6\u94A5\u4E0E\u5BC6\u94A5\u5E93\u4E0D\u5339\u914D"}, - {"Certificate.reply.and.certificate.in.keystore.are.identical", - "\u8BC1\u4E66\u56DE\u590D\u4E0E\u5BC6\u94A5\u5E93\u4E2D\u7684\u8BC1\u4E66\u662F\u76F8\u540C\u7684"}, - {"Failed.to.establish.chain.from.reply", - "\u65E0\u6CD5\u4ECE\u56DE\u590D\u4E2D\u5EFA\u7ACB\u94FE"}, - {"n", "n"}, - {"Wrong.answer.try.again", "\u9519\u8BEF\u7684\u7B54\u6848, \u8BF7\u518D\u8BD5\u4E00\u6B21"}, - {"Secret.key.not.generated.alias.alias.already.exists", - "\u6CA1\u6709\u751F\u6210\u5BC6\u94A5, \u522B\u540D <{0}> \u5DF2\u7ECF\u5B58\u5728"}, - {"Please.provide.keysize.for.secret.key.generation", - "\u8BF7\u63D0\u4F9B -keysize \u4EE5\u751F\u6210\u5BF9\u79F0\u5BC6\u94A5"}, - - {"Extensions.", "\u6269\u5C55: "}, - {".Empty.value.", "(\u7A7A\u503C)"}, - {"Extension.Request.", "\u6269\u5C55\u8BF7\u6C42:"}, - {"PKCS.10.Certificate.Request.Version.1.0.Subject.s.Public.Key.s.format.s.key.", - "PKCS #10 \u8BC1\u4E66\u8BF7\u6C42 (\u7248\u672C 1.0)\n\u4E3B\u9898: %s\n\u516C\u5171\u5BC6\u94A5: %s \u683C\u5F0F %s \u5BC6\u94A5\n"}, - {"Unknown.keyUsage.type.", "\u672A\u77E5 keyUsage \u7C7B\u578B: "}, - {"Unknown.extendedkeyUsage.type.", "\u672A\u77E5 extendedkeyUsage \u7C7B\u578B: "}, - {"Unknown.AccessDescription.type.", "\u672A\u77E5 AccessDescription \u7C7B\u578B: "}, - {"Unrecognized.GeneralName.type.", "\u65E0\u6CD5\u8BC6\u522B\u7684 GeneralName \u7C7B\u578B: "}, - {"This.extension.cannot.be.marked.as.critical.", - "\u65E0\u6CD5\u5C06\u6B64\u6269\u5C55\u6807\u8BB0\u4E3A\u201C\u4E25\u91CD\u201D\u3002"}, - {"Odd.number.of.hex.digits.found.", "\u627E\u5230\u5947\u6570\u4E2A\u5341\u516D\u8FDB\u5236\u6570\u5B57: "}, - {"Unknown.extension.type.", "\u672A\u77E5\u6269\u5C55\u7C7B\u578B: "}, - {"command.{0}.is.ambiguous.", "\u547D\u4EE4{0}\u4E0D\u660E\u786E:"}, - - // policytool - {"Warning.A.public.key.for.alias.signers.i.does.not.exist.Make.sure.a.KeyStore.is.properly.configured.", - "\u8B66\u544A: \u522B\u540D {0} \u7684\u516C\u5171\u5BC6\u94A5\u4E0D\u5B58\u5728\u3002\u8BF7\u786E\u4FDD\u5DF2\u6B63\u786E\u914D\u7F6E KeyStore\u3002"}, - {"Warning.Class.not.found.class", "\u8B66\u544A: \u627E\u4E0D\u5230\u7C7B: {0}"}, - {"Warning.Invalid.argument.s.for.constructor.arg", - "\u8B66\u544A: \u6784\u9020\u5668\u7684\u53C2\u6570\u65E0\u6548: {0}"}, - {"Illegal.Principal.Type.type", "\u975E\u6CD5\u7684\u4E3B\u7528\u6237\u7C7B\u578B: {0}"}, - {"Illegal.option.option", "\u975E\u6CD5\u9009\u9879: {0}"}, - {"Usage.policytool.options.", "\u7528\u6CD5: policytool [\u9009\u9879]"}, - {".file.file.policy.file.location", - " [-file ] \u7B56\u7565\u6587\u4EF6\u4F4D\u7F6E"}, - {"New", "\u65B0\u5EFA"}, - {"Open", "\u6253\u5F00"}, - {"Save", "\u4FDD\u5B58"}, - {"Save.As", "\u53E6\u5B58\u4E3A"}, - {"View.Warning.Log", "\u67E5\u770B\u8B66\u544A\u65E5\u5FD7"}, - {"Exit", "\u9000\u51FA"}, - {"Add.Policy.Entry", "\u6DFB\u52A0\u7B56\u7565\u6761\u76EE"}, - {"Edit.Policy.Entry", "\u7F16\u8F91\u7B56\u7565\u6761\u76EE"}, - {"Remove.Policy.Entry", "\u5220\u9664\u7B56\u7565\u6761\u76EE"}, - {"Edit", "\u7F16\u8F91"}, - {"Retain", "\u4FDD\u7559"}, - - {"Warning.File.name.may.include.escaped.backslash.characters.It.is.not.necessary.to.escape.backslash.characters.the.tool.escapes", - "\u8B66\u544A: \u6587\u4EF6\u540D\u5305\u542B\u8F6C\u4E49\u7684\u53CD\u659C\u6760\u5B57\u7B26\u3002\u4E0D\u9700\u8981\u5BF9\u53CD\u659C\u6760\u5B57\u7B26\u8FDB\u884C\u8F6C\u4E49 (\u8BE5\u5DE5\u5177\u5728\u5C06\u7B56\u7565\u5185\u5BB9\u5199\u5165\u6C38\u4E45\u5B58\u50A8\u65F6\u4F1A\u6839\u636E\u9700\u8981\u5BF9\u5B57\u7B26\u8FDB\u884C\u8F6C\u4E49)\u3002\n\n\u5355\u51FB\u201C\u4FDD\u7559\u201D\u53EF\u4FDD\u7559\u8F93\u5165\u7684\u540D\u79F0, \u6216\u8005\u5355\u51FB\u201C\u7F16\u8F91\u201D\u53EF\u7F16\u8F91\u8BE5\u540D\u79F0\u3002"}, - - {"Add.Public.Key.Alias", "\u6DFB\u52A0\u516C\u5171\u5BC6\u94A5\u522B\u540D"}, - {"Remove.Public.Key.Alias", "\u5220\u9664\u516C\u5171\u5BC6\u94A5\u522B\u540D"}, - {"File", "\u6587\u4EF6"}, - {"KeyStore", "KeyStore"}, - {"Policy.File.", "\u7B56\u7565\u6587\u4EF6:"}, - {"Could.not.open.policy.file.policyFile.e.toString.", - "\u65E0\u6CD5\u6253\u5F00\u7B56\u7565\u6587\u4EF6: {0}: {1}"}, - {"Policy.Tool", "\u7B56\u7565\u5DE5\u5177"}, - {"Errors.have.occurred.while.opening.the.policy.configuration.View.the.Warning.Log.for.more.information.", - "\u6253\u5F00\u7B56\u7565\u914D\u7F6E\u65F6\u51FA\u9519\u3002\u6709\u5173\u8BE6\u7EC6\u4FE1\u606F, \u8BF7\u67E5\u770B\u8B66\u544A\u65E5\u5FD7\u3002"}, - {"Error", "\u9519\u8BEF"}, - {"OK", "\u786E\u5B9A"}, - {"Status", "\u72B6\u6001"}, - {"Warning", "\u8B66\u544A"}, - {"Permission.", - "\u6743\u9650: "}, - {"Principal.Type.", "\u4E3B\u7528\u6237\u7C7B\u578B:"}, - {"Principal.Name.", "\u4E3B\u7528\u6237\u540D\u79F0:"}, - {"Target.Name.", - "\u76EE\u6807\u540D\u79F0: "}, - {"Actions.", - "\u64CD\u4F5C: "}, - {"OK.to.overwrite.existing.file.filename.", - "\u786E\u8BA4\u8986\u76D6\u73B0\u6709\u7684\u6587\u4EF6{0}?"}, - {"Cancel", "\u53D6\u6D88"}, - {"CodeBase.", "CodeBase:"}, - {"SignedBy.", "SignedBy:"}, - {"Add.Principal", "\u6DFB\u52A0\u4E3B\u7528\u6237"}, - {"Edit.Principal", "\u7F16\u8F91\u4E3B\u7528\u6237"}, - {"Remove.Principal", "\u5220\u9664\u4E3B\u7528\u6237"}, - {"Principals.", "\u4E3B\u7528\u6237:"}, - {".Add.Permission", " \u6DFB\u52A0\u6743\u9650"}, - {".Edit.Permission", " \u7F16\u8F91\u6743\u9650"}, - {"Remove.Permission", "\u5220\u9664\u6743\u9650"}, - {"Done", "\u5B8C\u6210"}, - {"KeyStore.URL.", "KeyStore URL:"}, - {"KeyStore.Type.", "KeyStore \u7C7B\u578B:"}, - {"KeyStore.Provider.", "KeyStore \u63D0\u4F9B\u65B9:"}, - {"KeyStore.Password.URL.", "KeyStore \u53E3\u4EE4 URL:"}, - {"Principals", "\u4E3B\u7528\u6237"}, - {".Edit.Principal.", " \u7F16\u8F91\u4E3B\u7528\u6237:"}, - {".Add.New.Principal.", " \u6DFB\u52A0\u65B0\u4E3B\u7528\u6237:"}, - {"Permissions", "\u6743\u9650"}, - {".Edit.Permission.", " \u7F16\u8F91\u6743\u9650:"}, - {".Add.New.Permission.", " \u52A0\u5165\u65B0\u7684\u6743\u9650:"}, - {"Signed.By.", "\u7B7E\u7F72\u4EBA: "}, - {"Cannot.Specify.Principal.with.a.Wildcard.Class.without.a.Wildcard.Name", - "\u6CA1\u6709\u901A\u914D\u7B26\u540D\u79F0, \u65E0\u6CD5\u4F7F\u7528\u901A\u914D\u7B26\u7C7B\u6307\u5B9A\u4E3B\u7528\u6237"}, - {"Cannot.Specify.Principal.without.a.Name", - "\u6CA1\u6709\u540D\u79F0, \u65E0\u6CD5\u6307\u5B9A\u4E3B\u7528\u6237"}, - {"Permission.and.Target.Name.must.have.a.value", - "\u6743\u9650\u53CA\u76EE\u6807\u540D\u5FC5\u987B\u6709\u4E00\u4E2A\u503C"}, - {"Remove.this.Policy.Entry.", "\u662F\u5426\u5220\u9664\u6B64\u7B56\u7565\u6761\u76EE?"}, - {"Overwrite.File", "\u8986\u76D6\u6587\u4EF6"}, - {"Policy.successfully.written.to.filename", - "\u7B56\u7565\u5DF2\u6210\u529F\u5199\u5165\u5230{0}"}, - {"null.filename", "\u7A7A\u6587\u4EF6\u540D"}, - {"Save.changes.", "\u662F\u5426\u4FDD\u5B58\u6240\u505A\u7684\u66F4\u6539?"}, - {"Yes", "\u662F"}, - {"No", "\u5426"}, - {"Policy.Entry", "\u7B56\u7565\u6761\u76EE"}, - {"Save.Changes", "\u4FDD\u5B58\u66F4\u6539"}, - {"No.Policy.Entry.selected", "\u6CA1\u6709\u9009\u62E9\u7B56\u7565\u6761\u76EE"}, - {"Unable.to.open.KeyStore.ex.toString.", - "\u65E0\u6CD5\u6253\u5F00 KeyStore: {0}"}, - {"No.principal.selected", "\u672A\u9009\u62E9\u4E3B\u7528\u6237"}, - {"No.permission.selected", "\u6CA1\u6709\u9009\u62E9\u6743\u9650"}, - {"name", "\u540D\u79F0"}, - {"configuration.type", "\u914D\u7F6E\u7C7B\u578B"}, - {"environment.variable.name", "\u73AF\u5883\u53D8\u91CF\u540D"}, - {"library.name", "\u5E93\u540D\u79F0"}, - {"package.name", "\u7A0B\u5E8F\u5305\u540D\u79F0"}, - {"policy.type", "\u7B56\u7565\u7C7B\u578B"}, - {"property.name", "\u5C5E\u6027\u540D\u79F0"}, - {"Principal.List", "\u4E3B\u7528\u6237\u5217\u8868"}, - {"Permission.List", "\u6743\u9650\u5217\u8868"}, - {"Code.Base", "\u4EE3\u7801\u5E93"}, - {"KeyStore.U.R.L.", "KeyStore URL:"}, - {"KeyStore.Password.U.R.L.", "KeyStore \u53E3\u4EE4 URL:"}, - - // javax.security.auth.PrivateCredentialPermission {"invalid.null.input.s.", "\u65E0\u6548\u7684\u7A7A\u8F93\u5165"}, {"actions.can.only.be.read.", "\u64CD\u4F5C\u53EA\u80FD\u4E3A '\u8BFB\u53D6'"}, @@ -553,6 +58,7 @@ public class Resources_zh_CN extends java.util.ListResourceBundle { {"provided.null.OID.map", "\u63D0\u4F9B\u7684 OID \u6620\u5C04\u4E3A\u7A7A\u503C"}, // javax.security.auth.Subject + {"NEWLINE", "\n"}, {"invalid.null.AccessControlContext.provided", "\u63D0\u4F9B\u4E86\u65E0\u6548\u7684\u7A7A AccessControlContext"}, {"invalid.null.action.provided", "\u63D0\u4F9B\u4E86\u65E0\u6548\u7684\u7A7A\u64CD\u4F5C"}, @@ -656,6 +162,7 @@ public class Resources_zh_CN extends java.util.ListResourceBundle { * * @return the contents of this ResourceBundle. */ + @Override public Object[][] getContents() { return contents; } diff --git a/jdk/src/share/classes/sun/security/util/Resources_zh_TW.java b/jdk/src/share/classes/sun/security/util/Resources_zh_TW.java index cf0fe5e6c8c..b95647a0c4e 100644 --- a/jdk/src/share/classes/sun/security/util/Resources_zh_TW.java +++ b/jdk/src/share/classes/sun/security/util/Resources_zh_TW.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2000, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2000, 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 @@ -34,501 +34,6 @@ public class Resources_zh_TW extends java.util.ListResourceBundle { private static final Object[][] contents = { - // shared (from jarsigner) - {"SPACE", " "}, - {"2SPACE", " "}, - {"6SPACE", " "}, - {"COMMA", ", "}, - // shared (from keytool) - {"NEWLINE", "\n"}, - {"STAR", - "*******************************************"}, - {"STARNN", - "*******************************************\n\n"}, - - // keytool: Help part -// "Option" should be translated. - {".OPTION.", " [\u9078\u9805]..."}, - {"Options.", "\u9078\u9805:"}, - {"Use.keytool.help.for.all.available.commands", - "\u4F7F\u7528 \"keytool -help\" \u53D6\u5F97\u6240\u6709\u53EF\u7528\u7684\u547D\u4EE4"}, - {"Key.and.Certificate.Management.Tool", - "\u91D1\u9470\u8207\u6191\u8B49\u7BA1\u7406\u5DE5\u5177"}, - {"Commands.", "\u547D\u4EE4:"}, - {"Use.keytool.command.name.help.for.usage.of.command.name", - "\u4F7F\u7528 \"keytool -command_name -help\" \u53D6\u5F97 command_name \u7684\u7528\u6CD5"}, - // keytool: help: commands - {"Generates.a.certificate.request", - "\u7522\u751F\u6191\u8B49\u8981\u6C42"}, //-certreq - {"Changes.an.entry.s.alias", - "\u8B8A\u66F4\u9805\u76EE\u7684\u5225\u540D"}, //-changealias - {"Deletes.an.entry", - "\u522A\u9664\u9805\u76EE"}, //-delete - {"Exports.certificate", - "\u532F\u51FA\u6191\u8B49"}, //-exportcert - {"Generates.a.key.pair", - "\u7522\u751F\u91D1\u9470\u7D44"}, //-genkeypair -// translation of "secret" key should be different to "private" key. - {"Generates.a.secret.key", - "\u7522\u751F\u79D8\u5BC6\u91D1\u9470"}, //-genseckey - {"Generates.certificate.from.a.certificate.request", - "\u5F9E\u6191\u8B49\u8981\u6C42\u7522\u751F\u6191\u8B49"}, //-gencert - {"Generates.CRL", "\u7522\u751F CRL"}, //-gencrl - {"Imports.entries.from.a.JDK.1.1.x.style.identity.database", - "\u5F9E JDK 1.1.x-style \u8B58\u5225\u8CC7\u6599\u5EAB\u532F\u5165\u9805\u76EE"}, //-identitydb - {"Imports.a.certificate.or.a.certificate.chain", - "\u532F\u5165\u6191\u8B49\u6216\u6191\u8B49\u93C8"}, //-importcert - {"Imports.one.or.all.entries.from.another.keystore", - "\u5F9E\u5176\u4ED6\u91D1\u9470\u5132\u5B58\u5EAB\u532F\u5165\u4E00\u500B\u6216\u5168\u90E8\u9805\u76EE"}, //-importkeystore - {"Clones.a.key.entry", - "\u8907\u88FD\u91D1\u9470\u9805\u76EE"}, //-keyclone - {"Changes.the.key.password.of.an.entry", - "\u8B8A\u66F4\u9805\u76EE\u7684\u91D1\u9470\u5BC6\u78BC"}, //-keypasswd - {"Lists.entries.in.a.keystore", - "\u5217\u793A\u91D1\u9470\u5132\u5B58\u5EAB\u4E2D\u7684\u9805\u76EE"}, //-list - {"Prints.the.content.of.a.certificate", - "\u5217\u5370\u6191\u8B49\u7684\u5167\u5BB9"}, //-printcert - {"Prints.the.content.of.a.certificate.request", - "\u5217\u5370\u6191\u8B49\u8981\u6C42\u7684\u5167\u5BB9"}, //-printcertreq - {"Prints.the.content.of.a.CRL.file", - "\u5217\u5370 CRL \u6A94\u6848\u7684\u5167\u5BB9"}, //-printcrl - {"Generates.a.self.signed.certificate", - "\u7522\u751F\u81EA\u884C\u7C3D\u7F72\u7684\u6191\u8B49"}, //-selfcert - {"Changes.the.store.password.of.a.keystore", - "\u8B8A\u66F4\u91D1\u9470\u5132\u5B58\u5EAB\u7684\u5132\u5B58\u5BC6\u78BC"}, //-storepasswd - // keytool: help: options - {"alias.name.of.the.entry.to.process", - "\u8981\u8655\u7406\u9805\u76EE\u7684\u5225\u540D\u540D\u7A31"}, //-alias - {"destination.alias", - "\u76EE\u7684\u5730\u5225\u540D"}, //-destalias - {"destination.key.password", - "\u76EE\u7684\u5730\u91D1\u9470\u5BC6\u78BC"}, //-destkeypass - {"destination.keystore.name", - "\u76EE\u7684\u5730\u91D1\u9470\u5132\u5B58\u5EAB\u540D\u7A31"}, //-destkeystore - {"destination.keystore.password.protected", - "\u76EE\u7684\u5730\u91D1\u9470\u5132\u5B58\u5EAB\u5BC6\u78BC\u4FDD\u8B77"}, //-destprotected - {"destination.keystore.provider.name", - "\u76EE\u7684\u5730\u91D1\u9470\u5132\u5B58\u5EAB\u63D0\u4F9B\u8005\u540D\u7A31"}, //-destprovidername - {"destination.keystore.password", - "\u76EE\u7684\u5730\u91D1\u9470\u5132\u5B58\u5EAB\u5BC6\u78BC"}, //-deststorepass - {"destination.keystore.type", - "\u76EE\u7684\u5730\u91D1\u9470\u5132\u5B58\u5EAB\u985E\u578B"}, //-deststoretype - {"distinguished.name", - "\u8FA8\u5225\u540D\u7A31"}, //-dname - {"X.509.extension", - "X.509 \u64F4\u5145\u5957\u4EF6"}, //-ext - {"output.file.name", - "\u8F38\u51FA\u6A94\u6848\u540D\u7A31"}, //-file and -outfile - {"input.file.name", - "\u8F38\u5165\u6A94\u6848\u540D\u7A31"}, //-file and -infile - {"key.algorithm.name", - "\u91D1\u9470\u6F14\u7B97\u6CD5\u540D\u7A31"}, //-keyalg - {"key.password", - "\u91D1\u9470\u5BC6\u78BC"}, //-keypass - {"key.bit.size", - "\u91D1\u9470\u4F4D\u5143\u5927\u5C0F"}, //-keysize - {"keystore.name", - "\u91D1\u9470\u5132\u5B58\u5EAB\u540D\u7A31"}, //-keystore - {"new.password", - "\u65B0\u5BC6\u78BC"}, //-new - {"do.not.prompt", - "\u4E0D\u8981\u63D0\u793A"}, //-noprompt - {"password.through.protected.mechanism", - "\u7D93\u7531\u4FDD\u8B77\u6A5F\u5236\u7684\u5BC6\u78BC"}, //-protected - {"provider.argument", - "\u63D0\u4F9B\u8005\u5F15\u6578"}, //-providerarg - {"provider.class.name", - "\u63D0\u4F9B\u8005\u985E\u5225\u540D\u7A31"}, //-providerclass - {"provider.name", - "\u63D0\u4F9B\u8005\u540D\u7A31"}, //-providername - {"provider.classpath", - "\u63D0\u4F9B\u8005\u985E\u5225\u8DEF\u5F91"}, //-providerpath - {"output.in.RFC.style", - "\u4EE5 RFC \u6A23\u5F0F\u8F38\u51FA"}, //-rfc - {"signature.algorithm.name", - "\u7C3D\u7AE0\u6F14\u7B97\u6CD5\u540D\u7A31"}, //-sigalg - {"source.alias", - "\u4F86\u6E90\u5225\u540D"}, //-srcalias - {"source.key.password", - "\u4F86\u6E90\u91D1\u9470\u5BC6\u78BC"}, //-srckeypass - {"source.keystore.name", - "\u4F86\u6E90\u91D1\u9470\u5132\u5B58\u5EAB\u540D\u7A31"}, //-srckeystore - {"source.keystore.password.protected", - "\u4F86\u6E90\u91D1\u9470\u5132\u5B58\u5EAB\u5BC6\u78BC\u4FDD\u8B77"}, //-srcprotected - {"source.keystore.provider.name", - "\u4F86\u6E90\u91D1\u9470\u5132\u5B58\u5EAB\u63D0\u4F9B\u8005\u540D\u7A31"}, //-srcprovidername - {"source.keystore.password", - "\u4F86\u6E90\u91D1\u9470\u5132\u5B58\u5EAB\u5BC6\u78BC"}, //-srcstorepass - {"source.keystore.type", - "\u4F86\u6E90\u91D1\u9470\u5132\u5B58\u5EAB\u985E\u578B"}, //-srcstoretype - {"SSL.server.host.and.port", - "SSL \u4F3A\u670D\u5668\u4E3B\u6A5F\u8207\u9023\u63A5\u57E0"}, //-sslserver - {"signed.jar.file", - "\u7C3D\u7F72\u7684 jar \u6A94\u6848"}, //=jarfile - {"certificate.validity.start.date.time", - "\u6191\u8B49\u6709\u6548\u6027\u958B\u59CB\u65E5\u671F/\u6642\u9593"}, //-startdate - {"keystore.password", - "\u91D1\u9470\u5132\u5B58\u5EAB\u5BC6\u78BC"}, //-storepass - {"keystore.type", - "\u91D1\u9470\u5132\u5B58\u5EAB\u985E\u578B"}, //-storetype - {"trust.certificates.from.cacerts", - "\u4F86\u81EA cacerts \u7684\u4FE1\u4EFB\u6191\u8B49"}, //-trustcacerts - {"verbose.output", - "\u8A73\u7D30\u8CC7\u8A0A\u8F38\u51FA"}, //-v - {"validity.number.of.days", - "\u6709\u6548\u6027\u65E5\u6578"}, //-validity - {"Serial.ID.of.cert.to.revoke", - "\u8981\u64A4\u92B7\u6191\u8B49\u7684\u5E8F\u5217 ID"}, //-id - // keytool: Running part - {"keytool.error.", "\u91D1\u9470\u5DE5\u5177\u932F\u8AA4: "}, - {"Illegal.option.", "\u7121\u6548\u7684\u9078\u9805:"}, - {"Illegal.value.", "\u7121\u6548\u503C: "}, - {"Unknown.password.type.", "\u4E0D\u660E\u7684\u5BC6\u78BC\u985E\u578B: "}, - {"Cannot.find.environment.variable.", - "\u627E\u4E0D\u5230\u74B0\u5883\u8B8A\u6578: "}, - {"Cannot.find.file.", "\u627E\u4E0D\u5230\u6A94\u6848: "}, - {"Command.option.flag.needs.an.argument.", "\u547D\u4EE4\u9078\u9805 {0} \u9700\u8981\u5F15\u6578\u3002"}, - {"Warning.Different.store.and.key.passwords.not.supported.for.PKCS12.KeyStores.Ignoring.user.specified.command.value.", - "\u8B66\u544A: PKCS12 \u91D1\u9470\u5132\u5B58\u5EAB\u4E0D\u652F\u63F4\u4E0D\u540C\u7684\u5132\u5B58\u5EAB\u548C\u91D1\u9470\u5BC6\u78BC\u3002\u5FFD\u7565\u4F7F\u7528\u8005\u6307\u5B9A\u7684 {0} \u503C\u3002"}, - {".keystore.must.be.NONE.if.storetype.is.{0}", - "\u5982\u679C -storetype \u70BA {0}\uFF0C\u5247 -keystore \u5FC5\u9808\u70BA NONE"}, - {"Too.many.retries.program.terminated", - "\u91CD\u8A66\u6B21\u6578\u592A\u591A\uFF0C\u7A0B\u5F0F\u5DF2\u7D42\u6B62"}, - {".storepasswd.and.keypasswd.commands.not.supported.if.storetype.is.{0}", - "\u5982\u679C -storetype \u70BA {0}\uFF0C\u5247\u4E0D\u652F\u63F4 -storepasswd \u548C -keypasswd \u547D\u4EE4"}, - {".keypasswd.commands.not.supported.if.storetype.is.PKCS12", - "\u5982\u679C -storetype \u70BA PKCS12\uFF0C\u5247\u4E0D\u652F\u63F4 -keypasswd \u547D\u4EE4"}, - {".keypass.and.new.can.not.be.specified.if.storetype.is.{0}", - "\u5982\u679C -storetype \u70BA {0}\uFF0C\u5247\u4E0D\u80FD\u6307\u5B9A -keypass \u548C -new"}, - {"if.protected.is.specified.then.storepass.keypass.and.new.must.not.be.specified", - "\u5982\u679C\u6307\u5B9A -protected\uFF0C\u5247\u4E0D\u80FD\u6307\u5B9A -storepass\u3001-keypass \u548C -new"}, - {"if.srcprotected.is.specified.then.srcstorepass.and.srckeypass.must.not.be.specified", - "\u5982\u679C\u6307\u5B9A -srcprotected\uFF0C\u5247\u4E0D\u80FD\u6307\u5B9A -srcstorepass \u548C -srckeypass"}, - {"if.keystore.is.not.password.protected.then.storepass.keypass.and.new.must.not.be.specified", - "\u5982\u679C\u91D1\u9470\u5132\u5B58\u5EAB\u4E0D\u53D7\u5BC6\u78BC\u4FDD\u8B77\uFF0C\u5247\u4E0D\u80FD\u6307\u5B9A -storepass\u3001-keypass \u548C -new"}, - {"if.source.keystore.is.not.password.protected.then.srcstorepass.and.srckeypass.must.not.be.specified", - "\u5982\u679C\u4F86\u6E90\u91D1\u9470\u5132\u5B58\u5EAB\u4E0D\u53D7\u5BC6\u78BC\u4FDD\u8B77\uFF0C\u5247\u4E0D\u80FD\u6307\u5B9A -srcstorepass \u548C -srckeypass"}, - {"Illegal.startdate.value", "\u7121\u6548\u7684 startdate \u503C"}, - {"Validity.must.be.greater.than.zero", - "\u6709\u6548\u6027\u5FC5\u9808\u5927\u65BC\u96F6"}, - {"provName.not.a.provider", "{0} \u4E0D\u662F\u4E00\u500B\u63D0\u4F9B\u8005"}, - {"Usage.error.no.command.provided", "\u7528\u6CD5\u932F\u8AA4: \u672A\u63D0\u4F9B\u547D\u4EE4"}, - {"Source.keystore.file.exists.but.is.empty.", "\u4F86\u6E90\u91D1\u9470\u5132\u5B58\u5EAB\u6A94\u6848\u5B58\u5728\uFF0C\u4F46\u70BA\u7A7A: "}, - {"Please.specify.srckeystore", "\u8ACB\u6307\u5B9A -srckeystore"}, - {"Must.not.specify.both.v.and.rfc.with.list.command", - " 'list' \u547D\u4EE4\u4E0D\u80FD\u540C\u6642\u6307\u5B9A -v \u53CA -rfc"}, - {"Key.password.must.be.at.least.6.characters", - "\u91D1\u9470\u5BC6\u78BC\u5FC5\u9808\u81F3\u5C11\u70BA 6 \u500B\u5B57\u5143"}, - {"New.password.must.be.at.least.6.characters", - "\u65B0\u7684\u5BC6\u78BC\u5FC5\u9808\u81F3\u5C11\u70BA 6 \u500B\u5B57\u5143"}, - {"Keystore.file.exists.but.is.empty.", - "\u91D1\u9470\u5132\u5B58\u5EAB\u6A94\u6848\u5B58\u5728\uFF0C\u4F46\u70BA\u7A7A\u767D: "}, - {"Keystore.file.does.not.exist.", - "\u91D1\u9470\u5132\u5B58\u5EAB\u6A94\u6848\u4E0D\u5B58\u5728: "}, - {"Must.specify.destination.alias", "\u5FC5\u9808\u6307\u5B9A\u76EE\u7684\u5730\u5225\u540D"}, - {"Must.specify.alias", "\u5FC5\u9808\u6307\u5B9A\u5225\u540D"}, - {"Keystore.password.must.be.at.least.6.characters", - "\u91D1\u9470\u5132\u5B58\u5EAB\u5BC6\u78BC\u5FC5\u9808\u81F3\u5C11\u70BA 6 \u500B\u5B57\u5143"}, - {"Enter.keystore.password.", "\u8F38\u5165\u91D1\u9470\u5132\u5B58\u5EAB\u5BC6\u78BC: "}, - {"Enter.source.keystore.password.", "\u8ACB\u8F38\u5165\u4F86\u6E90\u91D1\u9470\u5132\u5B58\u5EAB\u5BC6\u78BC: "}, - {"Enter.destination.keystore.password.", "\u8ACB\u8F38\u5165\u76EE\u7684\u5730\u91D1\u9470\u5132\u5B58\u5EAB\u5BC6\u78BC: "}, - {"Keystore.password.is.too.short.must.be.at.least.6.characters", - "\u91D1\u9470\u5132\u5B58\u5EAB\u5BC6\u78BC\u592A\u77ED - \u5FC5\u9808\u81F3\u5C11\u70BA 6 \u500B\u5B57\u5143"}, - {"Unknown.Entry.Type", "\u4E0D\u660E\u7684\u9805\u76EE\u985E\u578B"}, - {"Too.many.failures.Alias.not.changed", "\u592A\u591A\u932F\u8AA4\u3002\u672A\u8B8A\u66F4\u5225\u540D"}, - {"Entry.for.alias.alias.successfully.imported.", - "\u5DF2\u6210\u529F\u532F\u5165\u5225\u540D {0} \u7684\u9805\u76EE\u3002"}, - {"Entry.for.alias.alias.not.imported.", "\u672A\u532F\u5165\u5225\u540D {0} \u7684\u9805\u76EE\u3002"}, - {"Problem.importing.entry.for.alias.alias.exception.Entry.for.alias.alias.not.imported.", - "\u532F\u5165\u5225\u540D {0} \u7684\u9805\u76EE\u6642\u51FA\u73FE\u554F\u984C: {1}\u3002\n\u672A\u532F\u5165\u5225\u540D {0} \u7684\u9805\u76EE\u3002"}, - {"Import.command.completed.ok.entries.successfully.imported.fail.entries.failed.or.cancelled", - "\u5DF2\u5B8C\u6210\u532F\u5165\u547D\u4EE4: \u6210\u529F\u532F\u5165 {0} \u500B\u9805\u76EE\uFF0C{1} \u500B\u9805\u76EE\u5931\u6557\u6216\u5DF2\u53D6\u6D88"}, - {"Warning.Overwriting.existing.alias.alias.in.destination.keystore", - "\u8B66\u544A: \u6B63\u5728\u8986\u5BEB\u76EE\u7684\u5730\u91D1\u9470\u5132\u5B58\u5EAB\u4E2D\u7684\u73FE\u6709\u5225\u540D {0}"}, - {"Existing.entry.alias.alias.exists.overwrite.no.", - "\u73FE\u6709\u9805\u76EE\u5225\u540D {0} \u5B58\u5728\uFF0C\u662F\u5426\u8986\u5BEB\uFF1F[\u5426]: "}, - {"Too.many.failures.try.later", "\u592A\u591A\u932F\u8AA4 - \u8ACB\u7A0D\u5F8C\u518D\u8A66"}, - {"Certification.request.stored.in.file.filename.", - "\u8A8D\u8B49\u8981\u6C42\u5132\u5B58\u5728\u6A94\u6848 <{0}>"}, - {"Submit.this.to.your.CA", "\u5C07\u6B64\u9001\u51FA\u81F3\u60A8\u7684 CA"}, - {"if.alias.not.specified.destalias.srckeypass.and.destkeypass.must.not.be.specified", - "\u5982\u679C\u672A\u6307\u5B9A\u5225\u540D\uFF0C\u5247\u4E0D\u80FD\u6307\u5B9A destalias\u3001srckeypass \u53CA destkeypass"}, - {"Certificate.stored.in.file.filename.", - "\u6191\u8B49\u5132\u5B58\u5728\u6A94\u6848 <{0}>"}, - {"Certificate.reply.was.installed.in.keystore", - "\u6191\u8B49\u56DE\u8986\u5DF2\u5B89\u88DD\u5728\u91D1\u9470\u5132\u5B58\u5EAB\u4E2D"}, - {"Certificate.reply.was.not.installed.in.keystore", - "\u6191\u8B49\u56DE\u8986\u672A\u5B89\u88DD\u5728\u91D1\u9470\u5132\u5B58\u5EAB\u4E2D"}, - {"Certificate.was.added.to.keystore", - "\u6191\u8B49\u5DF2\u65B0\u589E\u81F3\u91D1\u9470\u5132\u5B58\u5EAB\u4E2D"}, - {"Certificate.was.not.added.to.keystore", - "\u6191\u8B49\u672A\u65B0\u589E\u81F3\u91D1\u9470\u5132\u5B58\u5EAB\u4E2D"}, - {".Storing.ksfname.", "[\u5132\u5B58 {0}]"}, - {"alias.has.no.public.key.certificate.", - "{0} \u6C92\u6709\u516C\u958B\u91D1\u9470 (\u6191\u8B49)"}, - {"Cannot.derive.signature.algorithm", - "\u7121\u6CD5\u53D6\u5F97\u7C3D\u7AE0\u6F14\u7B97\u6CD5"}, - {"Alias.alias.does.not.exist", - "\u5225\u540D <{0}> \u4E0D\u5B58\u5728"}, - {"Alias.alias.has.no.certificate", - "\u5225\u540D <{0}> \u6C92\u6709\u6191\u8B49"}, - {"Key.pair.not.generated.alias.alias.already.exists", - "\u6C92\u6709\u5EFA\u7ACB\u91D1\u9470\u7D44\uFF0C\u5225\u540D <{0}> \u5DF2\u7D93\u5B58\u5728"}, - {"Generating.keysize.bit.keyAlgName.key.pair.and.self.signed.certificate.sigAlgName.with.a.validity.of.validality.days.for", - "\u91DD\u5C0D {4} \u7522\u751F\u6709\u6548\u671F {3} \u5929\u7684 {0} \u4F4D\u5143 {1} \u91D1\u9470\u7D44\u4EE5\u53CA\u81EA\u6211\u7C3D\u7F72\u6191\u8B49 ({2})\n\t"}, - {"Enter.key.password.for.alias.", "\u8F38\u5165 <{0}> \u7684\u91D1\u9470\u5BC6\u78BC"}, - {".RETURN.if.same.as.keystore.password.", - "\t(RETURN \u5982\u679C\u548C\u91D1\u9470\u5132\u5B58\u5EAB\u5BC6\u78BC\u76F8\u540C): "}, - {"Key.password.is.too.short.must.be.at.least.6.characters", - "\u91D1\u9470\u5BC6\u78BC\u592A\u77ED - \u5FC5\u9808\u81F3\u5C11\u70BA 6 \u500B\u5B57\u5143"}, - {"Too.many.failures.key.not.added.to.keystore", - "\u592A\u591A\u932F\u8AA4 - \u91D1\u9470\u672A\u65B0\u589E\u81F3\u91D1\u9470\u5132\u5B58\u5EAB"}, - {"Destination.alias.dest.already.exists", - "\u76EE\u7684\u5730\u5225\u540D <{0}> \u5DF2\u7D93\u5B58\u5728"}, - {"Password.is.too.short.must.be.at.least.6.characters", - "\u5BC6\u78BC\u592A\u77ED - \u5FC5\u9808\u81F3\u5C11\u70BA 6 \u500B\u5B57\u5143"}, - {"Too.many.failures.Key.entry.not.cloned", - "\u592A\u591A\u932F\u8AA4\u3002\u672A\u8907\u88FD\u91D1\u9470\u9805\u76EE"}, - {"key.password.for.alias.", "<{0}> \u7684\u91D1\u9470\u5BC6\u78BC"}, - {"Keystore.entry.for.id.getName.already.exists", - "<{0}> \u7684\u91D1\u9470\u5132\u5B58\u5EAB\u9805\u76EE\u5DF2\u7D93\u5B58\u5728"}, - {"Creating.keystore.entry.for.id.getName.", - "\u5EFA\u7ACB <{0}> \u7684\u91D1\u9470\u5132\u5B58\u5EAB\u9805\u76EE..."}, - {"No.entries.from.identity.database.added", - "\u6C92\u6709\u65B0\u589E\u4F86\u81EA\u8B58\u5225\u8CC7\u6599\u5EAB\u7684\u9805\u76EE"}, - {"Alias.name.alias", "\u5225\u540D\u540D\u7A31: {0}"}, - {"Creation.date.keyStore.getCreationDate.alias.", - "\u5EFA\u7ACB\u65E5\u671F: {0,date}"}, - {"alias.keyStore.getCreationDate.alias.", - "{0}, {1,date}, "}, - {"alias.", "{0}, "}, - {"Entry.type.type.", "\u9805\u76EE\u985E\u578B: {0}"}, - {"Certificate.chain.length.", "\u6191\u8B49\u93C8\u9577\u5EA6: "}, - {"Certificate.i.1.", "\u6191\u8B49 [{0,number,integer}]:"}, - {"Certificate.fingerprint.SHA1.", "\u6191\u8B49\u6307\u7D0B (SHA1): "}, - {"Keystore.type.", "\u91D1\u9470\u5132\u5B58\u5EAB\u985E\u578B: "}, - {"Keystore.provider.", "\u91D1\u9470\u5132\u5B58\u5EAB\u63D0\u4F9B\u8005: "}, - {"Your.keystore.contains.keyStore.size.entry", - "\u60A8\u7684\u91D1\u9470\u5132\u5B58\u5EAB\u5305\u542B {0,number,integer} \u9805\u76EE"}, - {"Your.keystore.contains.keyStore.size.entries", - "\u60A8\u7684\u91D1\u9470\u5132\u5B58\u5EAB\u5305\u542B {0,number,integer} \u9805\u76EE"}, - {"Failed.to.parse.input", "\u7121\u6CD5\u5256\u6790\u8F38\u5165"}, - {"Empty.input", "\u7A7A\u8F38\u5165"}, - {"Not.X.509.certificate", "\u975E X.509 \u6191\u8B49"}, - {"alias.has.no.public.key", "{0} \u7121\u516C\u958B\u91D1\u9470"}, - {"alias.has.no.X.509.certificate", "{0} \u7121 X.509 \u6191\u8B49"}, - {"New.certificate.self.signed.", "\u65B0\u6191\u8B49 (\u81EA\u6211\u7C3D\u7F72): "}, - {"Reply.has.no.certificates", "\u56DE\u8986\u4E0D\u542B\u6191\u8B49"}, - {"Certificate.not.imported.alias.alias.already.exists", - "\u6191\u8B49\u672A\u8F38\u5165\uFF0C\u5225\u540D <{0}> \u5DF2\u7D93\u5B58\u5728"}, - {"Input.not.an.X.509.certificate", "\u8F38\u5165\u7684\u4E0D\u662F X.509 \u6191\u8B49"}, - {"Certificate.already.exists.in.keystore.under.alias.trustalias.", - "\u91D1\u9470\u5132\u5B58\u5EAB\u4E2D\u7684 <{0}> \u5225\u540D\u4E4B\u4E0B\uFF0C\u6191\u8B49\u5DF2\u7D93\u5B58\u5728"}, - {"Do.you.still.want.to.add.it.no.", - "\u60A8\u4ECD\u7136\u60F3\u8981\u5C07\u4E4B\u65B0\u589E\u55CE\uFF1F [\u5426]: "}, - {"Certificate.already.exists.in.system.wide.CA.keystore.under.alias.trustalias.", - "\u6574\u500B\u7CFB\u7D71 CA \u91D1\u9470\u5132\u5B58\u5EAB\u4E2D\u7684 <{0}> \u5225\u540D\u4E4B\u4E0B\uFF0C\u6191\u8B49\u5DF2\u7D93\u5B58\u5728"}, - {"Do.you.still.want.to.add.it.to.your.own.keystore.no.", - "\u60A8\u4ECD\u7136\u60F3\u8981\u5C07\u4E4B\u65B0\u589E\u81F3\u81EA\u5DF1\u7684\u91D1\u9470\u5132\u5B58\u5EAB\u55CE\uFF1F [\u5426]: "}, - {"Trust.this.certificate.no.", "\u4FE1\u4EFB\u9019\u500B\u6191\u8B49\uFF1F [\u5426]: "}, - {"YES", "\u662F"}, - {"New.prompt.", "\u65B0 {0}: "}, - {"Passwords.must.differ", "\u5FC5\u9808\u662F\u4E0D\u540C\u7684\u5BC6\u78BC"}, - {"Re.enter.new.prompt.", "\u91CD\u65B0\u8F38\u5165\u65B0 {0}: "}, - {"Re.enter.new.password.", "\u91CD\u65B0\u8F38\u5165\u65B0\u5BC6\u78BC: "}, - {"They.don.t.match.Try.again", "\u5B83\u5011\u4E0D\u76F8\u7B26\u3002\u8ACB\u91CD\u8A66"}, - {"Enter.prompt.alias.name.", "\u8F38\u5165 {0} \u5225\u540D\u540D\u7A31: "}, - {"Enter.new.alias.name.RETURN.to.cancel.import.for.this.entry.", - "\u8ACB\u8F38\u5165\u65B0\u7684\u5225\u540D\u540D\u7A31\t(RETURN \u4EE5\u53D6\u6D88\u532F\u5165\u6B64\u9805\u76EE):"}, - {"Enter.alias.name.", "\u8F38\u5165\u5225\u540D\u540D\u7A31: "}, - {".RETURN.if.same.as.for.otherAlias.", - "\t(RETURN \u5982\u679C\u548C <{0}> \u7684\u76F8\u540C)"}, - {".PATTERN.printX509Cert", - "\u64C1\u6709\u8005: {0}\n\u767C\u51FA\u8005: {1}\n\u5E8F\u865F: {2}\n\u6709\u6548\u671F\u81EA: {3} \u5230: {4}\n\u6191\u8B49\u6307\u7D0B:\n\t MD5: {5}\n\t SHA1: {6}\n\t SHA256: {7}\n\t \u7C3D\u7AE0\u6F14\u7B97\u6CD5\u540D\u7A31: {8}\n\t \u7248\u672C: {9}"}, - {"What.is.your.first.and.last.name.", - "\u60A8\u7684\u540D\u5B57\u8207\u59D3\u6C0F\u70BA\u4F55\uFF1F"}, - {"What.is.the.name.of.your.organizational.unit.", - "\u60A8\u7684\u7D44\u7E54\u55AE\u4F4D\u540D\u7A31\u70BA\u4F55\uFF1F"}, - {"What.is.the.name.of.your.organization.", - "\u60A8\u7684\u7D44\u7E54\u540D\u7A31\u70BA\u4F55\uFF1F"}, - {"What.is.the.name.of.your.City.or.Locality.", - "\u60A8\u6240\u5728\u7684\u57CE\u5E02\u6216\u5730\u5340\u540D\u7A31\u70BA\u4F55\uFF1F"}, - {"What.is.the.name.of.your.State.or.Province.", - "\u60A8\u6240\u5728\u7684\u5DDE\u53CA\u7701\u4EFD\u540D\u7A31\u70BA\u4F55\uFF1F"}, - {"What.is.the.two.letter.country.code.for.this.unit.", - "\u6B64\u55AE\u4F4D\u7684\u5169\u500B\u5B57\u6BCD\u570B\u5225\u4EE3\u78BC\u70BA\u4F55\uFF1F"}, - {"Is.name.correct.", "{0} \u6B63\u78BA\u55CE\uFF1F"}, - {"no", "\u5426"}, - {"yes", "\u662F"}, - {"y", "y"}, - {".defaultValue.", " [{0}]: "}, - {"Alias.alias.has.no.key", - "\u5225\u540D <{0}> \u6C92\u6709\u91D1\u9470"}, - {"Alias.alias.references.an.entry.type.that.is.not.a.private.key.entry.The.keyclone.command.only.supports.cloning.of.private.key", - "\u5225\u540D <{0}> \u6240\u53C3\u7167\u7684\u9805\u76EE\u4E0D\u662F\u79C1\u5BC6\u91D1\u9470\u985E\u578B\u3002-keyclone \u547D\u4EE4\u50C5\u652F\u63F4\u79C1\u5BC6\u91D1\u9470\u9805\u76EE\u7684\u8907\u88FD"}, - - {".WARNING.WARNING.WARNING.", - "***************** \u8B66\u544A \u8B66\u544A \u8B66\u544A *****************"}, - {"Signer.d.", "\u7C3D\u7F72\u8005 #%d:"}, - {"Timestamp.", "\u6642\u6233:"}, - {"Signature.", "\u7C3D\u7AE0:"}, - {"CRLs.", "CRL:"}, - {"Certificate.owner.", "\u6191\u8B49\u64C1\u6709\u8005: "}, - {"Not.a.signed.jar.file", "\u4E0D\u662F\u7C3D\u7F72\u7684 jar \u6A94\u6848"}, - {"No.certificate.from.the.SSL.server", - "\u6C92\u6709\u4F86\u81EA SSL \u4F3A\u670D\u5668\u7684\u6191\u8B49"}, - - {".The.integrity.of.the.information.stored.in.your.keystore.", - "* \u5C1A\u672A\u9A57\u8B49\u5132\u5B58\u65BC\u91D1\u9470\u5132\u5B58\u5EAB\u4E2D\u8CC7\u8A0A *\n* \u7684\u5B8C\u6574\u6027\uFF01\u82E5\u8981\u9A57\u8B49\u5176\u5B8C\u6574\u6027\uFF0C*\n* \u60A8\u5FC5\u9808\u63D0\u4F9B\u60A8\u7684\u91D1\u9470\u5132\u5B58\u5EAB\u5BC6\u78BC\u3002 *"}, - {".The.integrity.of.the.information.stored.in.the.srckeystore.", - "* \u5C1A\u672A\u9A57\u8B49\u5132\u5B58\u65BC srckeystore \u4E2D\u8CC7\u8A0A*\n* \u7684\u5B8C\u6574\u6027\uFF01\u82E5\u8981\u9A57\u8B49\u5176\u5B8C\u6574\u6027\uFF0C\u60A8\u5FC5\u9808 *\n* \u63D0\u4F9B srckeystore \u5BC6\u78BC\u3002 *"}, - - {"Certificate.reply.does.not.contain.public.key.for.alias.", - "\u6191\u8B49\u56DE\u8986\u4E26\u672A\u5305\u542B <{0}> \u7684\u516C\u958B\u91D1\u9470"}, - {"Incomplete.certificate.chain.in.reply", - "\u56DE\u8986\u6642\u7684\u6191\u8B49\u93C8\u4E0D\u5B8C\u6574"}, - {"Certificate.chain.in.reply.does.not.verify.", - "\u56DE\u8986\u6642\u7684\u6191\u8B49\u93C8\u672A\u9A57\u8B49: "}, - {"Top.level.certificate.in.reply.", - "\u56DE\u8986\u6642\u7684\u6700\u9AD8\u7D1A\u6191\u8B49:\\n"}, - {".is.not.trusted.", "... \u662F\u4E0D\u88AB\u4FE1\u4EFB\u7684\u3002"}, - {"Install.reply.anyway.no.", "\u9084\u662F\u8981\u5B89\u88DD\u56DE\u8986\uFF1F [\u5426]: "}, - {"NO", "\u5426"}, - {"Public.keys.in.reply.and.keystore.don.t.match", - "\u56DE\u8986\u6642\u7684\u516C\u958B\u91D1\u9470\u8207\u91D1\u9470\u5132\u5B58\u5EAB\u4E0D\u7B26"}, - {"Certificate.reply.and.certificate.in.keystore.are.identical", - "\u6191\u8B49\u56DE\u8986\u8207\u91D1\u9470\u5132\u5B58\u5EAB\u4E2D\u7684\u6191\u8B49\u662F\u76F8\u540C\u7684"}, - {"Failed.to.establish.chain.from.reply", - "\u7121\u6CD5\u5F9E\u56DE\u8986\u4E2D\u5C07\u93C8\u5EFA\u7ACB\u8D77\u4F86"}, - {"n", "n"}, - {"Wrong.answer.try.again", "\u932F\u8AA4\u7684\u7B54\u6848\uFF0C\u8ACB\u518D\u8A66\u4E00\u6B21"}, - {"Secret.key.not.generated.alias.alias.already.exists", - "\u672A\u7522\u751F\u79D8\u5BC6\u91D1\u9470\uFF0C\u5225\u540D <{0}> \u5DF2\u5B58\u5728"}, - {"Please.provide.keysize.for.secret.key.generation", - "\u8ACB\u63D0\u4F9B -keysize \u4EE5\u7522\u751F\u79D8\u5BC6\u91D1\u9470"}, - - {"Extensions.", "\u64F4\u5145\u5957\u4EF6: "}, - {".Empty.value.", "(\u7A7A\u767D\u503C)"}, - {"Extension.Request.", "\u64F4\u5145\u5957\u4EF6\u8981\u6C42:"}, - {"PKCS.10.Certificate.Request.Version.1.0.Subject.s.Public.Key.s.format.s.key.", - "PKCS #10 \u6191\u8B49\u8981\u6C42 (\u7248\u672C 1.0)\n\u4E3B\u9AD4: %s\n\u516C\u7528\u91D1\u9470: %s \u683C\u5F0F %s \u91D1\u9470\n"}, - {"Unknown.keyUsage.type.", "\u4E0D\u660E\u7684 keyUsage \u985E\u578B: "}, - {"Unknown.extendedkeyUsage.type.", "\u4E0D\u660E\u7684 extendedkeyUsage \u985E\u578B: "}, - {"Unknown.AccessDescription.type.", "\u4E0D\u660E\u7684 AccessDescription \u985E\u578B: "}, - {"Unrecognized.GeneralName.type.", "\u7121\u6CD5\u8FA8\u8B58\u7684 GeneralName \u985E\u578B: "}, - {"This.extension.cannot.be.marked.as.critical.", - "\u6B64\u64F4\u5145\u5957\u4EF6\u7121\u6CD5\u6A19\u793A\u70BA\u95DC\u9375\u3002"}, - {"Odd.number.of.hex.digits.found.", "\u627E\u5230\u5341\u516D\u9032\u4F4D\u6578\u5B57\u7684\u5947\u6578: "}, - {"Unknown.extension.type.", "\u4E0D\u660E\u7684\u64F4\u5145\u5957\u4EF6\u985E\u578B: "}, - {"command.{0}.is.ambiguous.", "\u547D\u4EE4 {0} \u4E0D\u660E\u78BA:"}, - - // policytool - {"Warning.A.public.key.for.alias.signers.i.does.not.exist.Make.sure.a.KeyStore.is.properly.configured.", - "\u8B66\u544A: \u5225\u540D {0} \u7684\u516C\u958B\u91D1\u9470\u4E0D\u5B58\u5728\u3002\u8ACB\u78BA\u5B9A\u91D1\u9470\u5132\u5B58\u5EAB\u914D\u7F6E\u6B63\u78BA\u3002"}, - {"Warning.Class.not.found.class", "\u8B66\u544A: \u627E\u4E0D\u5230\u985E\u5225 {0}"}, - {"Warning.Invalid.argument.s.for.constructor.arg", - "\u8B66\u544A: \u7121\u6548\u7684\u5EFA\u69CB\u5B50\u5F15\u6578: {0}"}, - {"Illegal.Principal.Type.type", "\u7121\u6548\u7684 Principal \u985E\u578B: {0}"}, - {"Illegal.option.option", "\u7121\u6548\u7684\u9078\u9805: {0}"}, - {"Usage.policytool.options.", "\u7528\u6CD5: policytool [options]"}, - {".file.file.policy.file.location", - " [-file ] \u539F\u5247\u6A94\u6848\u4F4D\u7F6E"}, - {"New", "\u65B0\u589E"}, - {"Open", "\u958B\u555F"}, - {"Save", "\u5132\u5B58"}, - {"Save.As", "\u53E6\u5B58\u65B0\u6A94"}, - {"View.Warning.Log", "\u6AA2\u8996\u8B66\u544A\u8A18\u9304"}, - {"Exit", "\u7D50\u675F"}, - {"Add.Policy.Entry", "\u65B0\u589E\u539F\u5247\u9805\u76EE"}, - {"Edit.Policy.Entry", "\u7DE8\u8F2F\u539F\u5247\u9805\u76EE"}, - {"Remove.Policy.Entry", "\u79FB\u9664\u539F\u5247\u9805\u76EE"}, - {"Edit", "\u7DE8\u8F2F"}, - {"Retain", "\u4FDD\u7559"}, - - {"Warning.File.name.may.include.escaped.backslash.characters.It.is.not.necessary.to.escape.backslash.characters.the.tool.escapes", - "\u8B66\u544A: \u6A94\u6848\u540D\u7A31\u5305\u542B\u9041\u96E2\u53CD\u659C\u7DDA\u5B57\u5143\u3002\u4E0D\u9700\u8981\u9041\u96E2\u53CD\u659C\u7DDA\u5B57\u5143 (\u64B0\u5BEB\u539F\u5247\u5167\u5BB9\u81F3\u6C38\u4E45\u5B58\u653E\u5340\u6642\u9700\u8981\u5DE5\u5177\u9041\u96E2\u5B57\u5143)\u3002\n\n\u6309\u4E00\u4E0B\u300C\u4FDD\u7559\u300D\u4EE5\u4FDD\u7559\u8F38\u5165\u7684\u540D\u7A31\uFF0C\u6216\u6309\u4E00\u4E0B\u300C\u7DE8\u8F2F\u300D\u4EE5\u7DE8\u8F2F\u540D\u7A31\u3002"}, - - {"Add.Public.Key.Alias", "\u65B0\u589E\u516C\u958B\u91D1\u9470\u5225\u540D"}, - {"Remove.Public.Key.Alias", "\u79FB\u9664\u516C\u958B\u91D1\u9470\u5225\u540D"}, - {"File", "\u6A94\u6848"}, - {"KeyStore", "\u91D1\u9470\u5132\u5B58\u5EAB"}, - {"Policy.File.", "\u539F\u5247\u6A94\u6848: "}, - {"Could.not.open.policy.file.policyFile.e.toString.", - "\u7121\u6CD5\u958B\u555F\u539F\u5247\u6A94\u6848: {0}: {1}"}, - {"Policy.Tool", "\u539F\u5247\u5DE5\u5177"}, - {"Errors.have.occurred.while.opening.the.policy.configuration.View.the.Warning.Log.for.more.information.", - "\u958B\u555F\u539F\u5247\u8A18\u7F6E\u6642\u767C\u751F\u932F\u8AA4\u3002\u8ACB\u6AA2\u8996\u8B66\u544A\u8A18\u9304\u4EE5\u53D6\u5F97\u66F4\u591A\u7684\u8CC7\u8A0A"}, - {"Error", "\u932F\u8AA4"}, - {"OK", "\u78BA\u5B9A"}, - {"Status", "\u72C0\u614B"}, - {"Warning", "\u8B66\u544A"}, - {"Permission.", - "\u6B0A\u9650: "}, - {"Principal.Type.", "Principal \u985E\u578B: "}, - {"Principal.Name.", "Principal \u540D\u7A31: "}, - {"Target.Name.", - "\u76EE\u6A19\u540D\u7A31: "}, - {"Actions.", - "\u52D5\u4F5C: "}, - {"OK.to.overwrite.existing.file.filename.", - "\u78BA\u8A8D\u8986\u5BEB\u73FE\u5B58\u7684\u6A94\u6848 {0}\uFF1F"}, - {"Cancel", "\u53D6\u6D88"}, - {"CodeBase.", "CodeBase:"}, - {"SignedBy.", "SignedBy:"}, - {"Add.Principal", "\u65B0\u589E Principal"}, - {"Edit.Principal", "\u7DE8\u8F2F Principal"}, - {"Remove.Principal", "\u79FB\u9664 Principal"}, - {"Principals.", "Principal:"}, - {".Add.Permission", " \u65B0\u589E\u6B0A\u9650"}, - {".Edit.Permission", " \u7DE8\u8F2F\u6B0A\u9650"}, - {"Remove.Permission", "\u79FB\u9664\u6B0A\u9650"}, - {"Done", "\u5B8C\u6210"}, - {"KeyStore.URL.", "\u91D1\u9470\u5132\u5B58\u5EAB URL: "}, - {"KeyStore.Type.", "\u91D1\u9470\u5132\u5B58\u5EAB\u985E\u578B:"}, - {"KeyStore.Provider.", "\u91D1\u9470\u5132\u5B58\u5EAB\u63D0\u4F9B\u8005:"}, - {"KeyStore.Password.URL.", "\u91D1\u9470\u5132\u5B58\u5EAB\u5BC6\u78BC URL: "}, - {"Principals", "Principal"}, - {".Edit.Principal.", " \u7DE8\u8F2F Principal: "}, - {".Add.New.Principal.", " \u65B0\u589E Principal: "}, - {"Permissions", "\u6B0A\u9650"}, - {".Edit.Permission.", " \u7DE8\u8F2F\u6B0A\u9650:"}, - {".Add.New.Permission.", " \u65B0\u589E\u6B0A\u9650:"}, - {"Signed.By.", "\u7C3D\u7F72\u4EBA: "}, - {"Cannot.Specify.Principal.with.a.Wildcard.Class.without.a.Wildcard.Name", - "\u6C92\u6709\u842C\u7528\u5B57\u5143\u540D\u7A31\uFF0C\u7121\u6CD5\u6307\u5B9A\u542B\u6709\u842C\u7528\u5B57\u5143\u985E\u5225\u7684 Principal"}, - {"Cannot.Specify.Principal.without.a.Name", - "\u6C92\u6709\u540D\u7A31\uFF0C\u7121\u6CD5\u6307\u5B9A Principal"}, - {"Permission.and.Target.Name.must.have.a.value", - "\u6B0A\u9650\u53CA\u76EE\u6A19\u540D\u7A31\u5FC5\u9808\u6709\u4E00\u500B\u503C\u3002"}, - {"Remove.this.Policy.Entry.", "\u79FB\u9664\u9019\u500B\u539F\u5247\u9805\u76EE\uFF1F"}, - {"Overwrite.File", "\u8986\u5BEB\u6A94\u6848"}, - {"Policy.successfully.written.to.filename", - "\u539F\u5247\u6210\u529F\u5BEB\u5165\u81F3 {0}"}, - {"null.filename", "\u7A7A\u503C\u6A94\u540D"}, - {"Save.changes.", "\u5132\u5B58\u8B8A\u66F4\uFF1F"}, - {"Yes", "\u662F"}, - {"No", "\u5426"}, - {"Policy.Entry", "\u539F\u5247\u9805\u76EE"}, - {"Save.Changes", "\u5132\u5B58\u8B8A\u66F4"}, - {"No.Policy.Entry.selected", "\u6C92\u6709\u9078\u53D6\u539F\u5247\u9805\u76EE"}, - {"Unable.to.open.KeyStore.ex.toString.", - "\u7121\u6CD5\u958B\u555F\u91D1\u9470\u5132\u5B58\u5EAB: {0}"}, - {"No.principal.selected", "\u672A\u9078\u53D6 Principal"}, - {"No.permission.selected", "\u6C92\u6709\u9078\u53D6\u6B0A\u9650"}, - {"name", "\u540D\u7A31"}, - {"configuration.type", "\u7D44\u614B\u985E\u578B"}, - {"environment.variable.name", "\u74B0\u5883\u8B8A\u6578\u540D\u7A31"}, - {"library.name", "\u7A0B\u5F0F\u5EAB\u540D\u7A31"}, - {"package.name", "\u5957\u88DD\u7A0B\u5F0F\u540D\u7A31"}, - {"policy.type", "\u539F\u5247\u985E\u578B"}, - {"property.name", "\u5C6C\u6027\u540D\u7A31"}, - {"Principal.List", "Principal \u6E05\u55AE"}, - {"Permission.List", "\u6B0A\u9650\u6E05\u55AE"}, - {"Code.Base", "\u4EE3\u78BC\u57FA\u6E96"}, - {"KeyStore.U.R.L.", "\u91D1\u9470\u5132\u5B58\u5EAB URL:"}, - {"KeyStore.Password.U.R.L.", "\u91D1\u9470\u5132\u5B58\u5EAB\u5BC6\u78BC URL:"}, - - // javax.security.auth.PrivateCredentialPermission {"invalid.null.input.s.", "\u7121\u6548\u7A7A\u503C\u8F38\u5165"}, {"actions.can.only.be.read.", "\u52D5\u4F5C\u53EA\u80FD\u88AB\u300C\u8B80\u53D6\u300D"}, @@ -553,6 +58,7 @@ public class Resources_zh_TW extends java.util.ListResourceBundle { {"provided.null.OID.map", "\u63D0\u4F9B\u7A7A\u503C OID \u5C0D\u6620"}, // javax.security.auth.Subject + {"NEWLINE", "\n"}, {"invalid.null.AccessControlContext.provided", "\u63D0\u4F9B\u7121\u6548\u7684\u7A7A\u503C AccessControlContext"}, {"invalid.null.action.provided", "\u63D0\u4F9B\u7121\u6548\u7684\u7A7A\u503C\u52D5\u4F5C"}, @@ -656,6 +162,7 @@ public class Resources_zh_TW extends java.util.ListResourceBundle { * * @return the contents of this ResourceBundle. */ + @Override public Object[][] getContents() { return contents; } diff --git a/jdk/src/share/classes/sun/security/util/SecurityConstants.java b/jdk/src/share/classes/sun/security/util/SecurityConstants.java index 08bdaeb03fe..c9d321f7c15 100644 --- a/jdk/src/share/classes/sun/security/util/SecurityConstants.java +++ b/jdk/src/share/classes/sun/security/util/SecurityConstants.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, 2009, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 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 diff --git a/jdk/src/share/classes/sun/security/validator/PKIXValidator.java b/jdk/src/share/classes/sun/security/validator/PKIXValidator.java index 7c010e11958..51761e1bd17 100644 --- a/jdk/src/share/classes/sun/security/validator/PKIXValidator.java +++ b/jdk/src/share/classes/sun/security/validator/PKIXValidator.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2002, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2002, 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 diff --git a/jdk/src/share/classes/sun/security/x509/CRLExtensions.java b/jdk/src/share/classes/sun/security/x509/CRLExtensions.java index 605ed95d5f2..5e7f42dee0c 100644 --- a/jdk/src/share/classes/sun/security/x509/CRLExtensions.java +++ b/jdk/src/share/classes/sun/security/x509/CRLExtensions.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 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 diff --git a/jdk/src/share/classes/sun/security/x509/CertificateExtensions.java b/jdk/src/share/classes/sun/security/x509/CertificateExtensions.java index 44d6df48654..75d5ae35b0e 100644 --- a/jdk/src/share/classes/sun/security/x509/CertificateExtensions.java +++ b/jdk/src/share/classes/sun/security/x509/CertificateExtensions.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 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 diff --git a/jdk/src/share/classes/sun/security/x509/DNSName.java b/jdk/src/share/classes/sun/security/x509/DNSName.java index b571e0e5db9..2a35b86fb35 100644 --- a/jdk/src/share/classes/sun/security/x509/DNSName.java +++ b/jdk/src/share/classes/sun/security/x509/DNSName.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 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 diff --git a/jdk/src/share/classes/sun/security/x509/RFC822Name.java b/jdk/src/share/classes/sun/security/x509/RFC822Name.java index a477174a4f7..e905ae1b7f2 100644 --- a/jdk/src/share/classes/sun/security/x509/RFC822Name.java +++ b/jdk/src/share/classes/sun/security/x509/RFC822Name.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 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 diff --git a/jdk/src/share/classes/sun/security/x509/URIName.java b/jdk/src/share/classes/sun/security/x509/URIName.java index cf9fa50e0ba..9345640ef57 100644 --- a/jdk/src/share/classes/sun/security/x509/URIName.java +++ b/jdk/src/share/classes/sun/security/x509/URIName.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2004, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 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 diff --git a/jdk/src/share/classes/sun/security/x509/X509CRLEntryImpl.java b/jdk/src/share/classes/sun/security/x509/X509CRLEntryImpl.java index 441bed90fc1..ab7270995fb 100644 --- a/jdk/src/share/classes/sun/security/x509/X509CRLEntryImpl.java +++ b/jdk/src/share/classes/sun/security/x509/X509CRLEntryImpl.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 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 diff --git a/jdk/src/share/classes/sun/security/x509/X509CRLImpl.java b/jdk/src/share/classes/sun/security/x509/X509CRLImpl.java index 869100a6c3e..21f39d0366b 100644 --- a/jdk/src/share/classes/sun/security/x509/X509CRLImpl.java +++ b/jdk/src/share/classes/sun/security/x509/X509CRLImpl.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 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 diff --git a/jdk/src/share/classes/sun/security/x509/X509CertImpl.java b/jdk/src/share/classes/sun/security/x509/X509CertImpl.java index b031de9f598..5c965ff2e47 100644 --- a/jdk/src/share/classes/sun/security/x509/X509CertImpl.java +++ b/jdk/src/share/classes/sun/security/x509/X509CertImpl.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1996, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1996, 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 diff --git a/jdk/src/share/classes/sun/security/x509/X509CertInfo.java b/jdk/src/share/classes/sun/security/x509/X509CertInfo.java index 9379f270043..7d3bb517975 100644 --- a/jdk/src/share/classes/sun/security/x509/X509CertInfo.java +++ b/jdk/src/share/classes/sun/security/x509/X509CertInfo.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 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 diff --git a/jdk/src/share/classes/sun/text/CompactByteArray.java b/jdk/src/share/classes/sun/text/CompactByteArray.java index d28b1db0356..412bc0df36d 100644 --- a/jdk/src/share/classes/sun/text/CompactByteArray.java +++ b/jdk/src/share/classes/sun/text/CompactByteArray.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1996, 2005, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1996, 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 diff --git a/jdk/src/share/classes/sun/text/IntHashtable.java b/jdk/src/share/classes/sun/text/IntHashtable.java index 679c710608b..af2c1d37d84 100644 --- a/jdk/src/share/classes/sun/text/IntHashtable.java +++ b/jdk/src/share/classes/sun/text/IntHashtable.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1998, 2002, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1998, 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 diff --git a/jdk/src/share/classes/sun/text/bidi/BidiBase.java b/jdk/src/share/classes/sun/text/bidi/BidiBase.java index a803f8281fd..a0a643b4d22 100644 --- a/jdk/src/share/classes/sun/text/bidi/BidiBase.java +++ b/jdk/src/share/classes/sun/text/bidi/BidiBase.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2009, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2009, 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 diff --git a/jdk/src/share/classes/sun/text/normalizer/ICUData.java b/jdk/src/share/classes/sun/text/normalizer/ICUData.java index 6163329ed4d..20c21a583d6 100644 --- a/jdk/src/share/classes/sun/text/normalizer/ICUData.java +++ b/jdk/src/share/classes/sun/text/normalizer/ICUData.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2005, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2005, 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 diff --git a/jdk/src/share/classes/sun/text/normalizer/NormalizerBase.java b/jdk/src/share/classes/sun/text/normalizer/NormalizerBase.java index 875d059f156..aadbb13ec08 100644 --- a/jdk/src/share/classes/sun/text/normalizer/NormalizerBase.java +++ b/jdk/src/share/classes/sun/text/normalizer/NormalizerBase.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2005, 2009, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2005, 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 diff --git a/jdk/src/share/classes/sun/text/normalizer/NormalizerImpl.java b/jdk/src/share/classes/sun/text/normalizer/NormalizerImpl.java index 8f0c9662a2b..6981e1f4fd9 100644 --- a/jdk/src/share/classes/sun/text/normalizer/NormalizerImpl.java +++ b/jdk/src/share/classes/sun/text/normalizer/NormalizerImpl.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2005, 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 diff --git a/jdk/src/share/classes/sun/text/normalizer/SymbolTable.java b/jdk/src/share/classes/sun/text/normalizer/SymbolTable.java index 95af219f5bc..f49110e6fa9 100644 --- a/jdk/src/share/classes/sun/text/normalizer/SymbolTable.java +++ b/jdk/src/share/classes/sun/text/normalizer/SymbolTable.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2005, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2005, 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 diff --git a/jdk/src/share/classes/sun/text/normalizer/UnicodeSet.java b/jdk/src/share/classes/sun/text/normalizer/UnicodeSet.java index 42f6fdb54b8..27fc4d64419 100644 --- a/jdk/src/share/classes/sun/text/normalizer/UnicodeSet.java +++ b/jdk/src/share/classes/sun/text/normalizer/UnicodeSet.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2005, 2009, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2005, 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 diff --git a/jdk/src/share/classes/sun/text/normalizer/UnicodeSetIterator.java b/jdk/src/share/classes/sun/text/normalizer/UnicodeSetIterator.java index 53a145c200f..770745226c8 100644 --- a/jdk/src/share/classes/sun/text/normalizer/UnicodeSetIterator.java +++ b/jdk/src/share/classes/sun/text/normalizer/UnicodeSetIterator.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2005, 2009, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2005, 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 diff --git a/jdk/src/share/classes/sun/text/normalizer/VersionInfo.java b/jdk/src/share/classes/sun/text/normalizer/VersionInfo.java index 2f418b00753..09f13b9ceca 100644 --- a/jdk/src/share/classes/sun/text/normalizer/VersionInfo.java +++ b/jdk/src/share/classes/sun/text/normalizer/VersionInfo.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2005, 2009, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2005, 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 diff --git a/jdk/src/share/classes/sun/tools/attach/HotSpotVirtualMachine.java b/jdk/src/share/classes/sun/tools/attach/HotSpotVirtualMachine.java index 52d96c28145..4b858bbb82c 100644 --- a/jdk/src/share/classes/sun/tools/attach/HotSpotVirtualMachine.java +++ b/jdk/src/share/classes/sun/tools/attach/HotSpotVirtualMachine.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2005, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2005, 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 diff --git a/jdk/src/share/classes/sun/tools/attach/META-INF/services/com.sun.tools.attach.spi.AttachProvider b/jdk/src/share/classes/sun/tools/attach/META-INF/services/com.sun.tools.attach.spi.AttachProvider index 100e352c78a..debc75277f3 100644 --- a/jdk/src/share/classes/sun/tools/attach/META-INF/services/com.sun.tools.attach.spi.AttachProvider +++ b/jdk/src/share/classes/sun/tools/attach/META-INF/services/com.sun.tools.attach.spi.AttachProvider @@ -1,5 +1,5 @@ # -# Copyright (c) 2005, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2005, 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 diff --git a/jdk/src/share/classes/sun/tools/jar/CommandLine.java b/jdk/src/share/classes/sun/tools/jar/CommandLine.java index b9ddeb84b54..7a17f4600db 100644 --- a/jdk/src/share/classes/sun/tools/jar/CommandLine.java +++ b/jdk/src/share/classes/sun/tools/jar/CommandLine.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 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 diff --git a/jdk/src/share/classes/sun/tools/jar/Manifest.java b/jdk/src/share/classes/sun/tools/jar/Manifest.java index b49d1e8eda0..7a8cf74a906 100644 --- a/jdk/src/share/classes/sun/tools/jar/Manifest.java +++ b/jdk/src/share/classes/sun/tools/jar/Manifest.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1996, 1999, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1996, 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 diff --git a/jdk/src/share/classes/sun/tools/jar/SignatureFile.java b/jdk/src/share/classes/sun/tools/jar/SignatureFile.java index fd67ce195d4..8e7d3f59435 100644 --- a/jdk/src/share/classes/sun/tools/jar/SignatureFile.java +++ b/jdk/src/share/classes/sun/tools/jar/SignatureFile.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1996, 2009, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1996, 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 diff --git a/jdk/src/share/classes/sun/tools/javac/resources/javac.properties b/jdk/src/share/classes/sun/tools/javac/resources/javac.properties index 23421b9e9a5..f435c6cca14 100644 --- a/jdk/src/share/classes/sun/tools/javac/resources/javac.properties +++ b/jdk/src/share/classes/sun/tools/javac/resources/javac.properties @@ -1,5 +1,5 @@ # -# Copyright (c) 1996, 1999, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 1996, 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 diff --git a/jdk/src/share/classes/sun/tools/jcmd/Arguments.java b/jdk/src/share/classes/sun/tools/jcmd/Arguments.java index d3b9e50302a..d8c581efe55 100644 --- a/jdk/src/share/classes/sun/tools/jcmd/Arguments.java +++ b/jdk/src/share/classes/sun/tools/jcmd/Arguments.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2011, 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 diff --git a/jdk/src/share/classes/sun/tools/jconsole/AboutDialog.java b/jdk/src/share/classes/sun/tools/jconsole/AboutDialog.java index 1d91d5313bd..ed1d6e4c805 100644 --- a/jdk/src/share/classes/sun/tools/jconsole/AboutDialog.java +++ b/jdk/src/share/classes/sun/tools/jconsole/AboutDialog.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2006, 2007, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2006, 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 diff --git a/jdk/src/share/classes/sun/tools/jconsole/BorderedComponent.java b/jdk/src/share/classes/sun/tools/jconsole/BorderedComponent.java index 57549ec619d..ee21551dd9a 100644 --- a/jdk/src/share/classes/sun/tools/jconsole/BorderedComponent.java +++ b/jdk/src/share/classes/sun/tools/jconsole/BorderedComponent.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2004, 2006, Oracle and/or its affiliates. All rights reserved. + * 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 diff --git a/jdk/src/share/classes/sun/tools/jconsole/ClassTab.java b/jdk/src/share/classes/sun/tools/jconsole/ClassTab.java index b192b9f5cd0..164ec9569c9 100644 --- a/jdk/src/share/classes/sun/tools/jconsole/ClassTab.java +++ b/jdk/src/share/classes/sun/tools/jconsole/ClassTab.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2004, 2007, Oracle and/or its affiliates. All rights reserved. + * 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 diff --git a/jdk/src/share/classes/sun/tools/jconsole/ConnectDialog.java b/jdk/src/share/classes/sun/tools/jconsole/ConnectDialog.java index ea6366706c7..ea3f8366766 100644 --- a/jdk/src/share/classes/sun/tools/jconsole/ConnectDialog.java +++ b/jdk/src/share/classes/sun/tools/jconsole/ConnectDialog.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2004, 2006, Oracle and/or its affiliates. All rights reserved. + * 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 diff --git a/jdk/src/share/classes/sun/tools/jconsole/CreateMBeanDialog.java b/jdk/src/share/classes/sun/tools/jconsole/CreateMBeanDialog.java index 7d391b8e225..94fb5aec51b 100644 --- a/jdk/src/share/classes/sun/tools/jconsole/CreateMBeanDialog.java +++ b/jdk/src/share/classes/sun/tools/jconsole/CreateMBeanDialog.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2004, 2006, Oracle and/or its affiliates. All rights reserved. + * 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 diff --git a/jdk/src/share/classes/sun/tools/jconsole/Formatter.java b/jdk/src/share/classes/sun/tools/jconsole/Formatter.java index 11923412d38..23468294e34 100644 --- a/jdk/src/share/classes/sun/tools/jconsole/Formatter.java +++ b/jdk/src/share/classes/sun/tools/jconsole/Formatter.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2004, 2006, Oracle and/or its affiliates. All rights reserved. + * 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 diff --git a/jdk/src/share/classes/sun/tools/jconsole/HTMLPane.java b/jdk/src/share/classes/sun/tools/jconsole/HTMLPane.java index 34c3c9bedff..c91b9faf928 100644 --- a/jdk/src/share/classes/sun/tools/jconsole/HTMLPane.java +++ b/jdk/src/share/classes/sun/tools/jconsole/HTMLPane.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2006, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2006, 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 diff --git a/jdk/src/share/classes/sun/tools/jconsole/InternalDialog.java b/jdk/src/share/classes/sun/tools/jconsole/InternalDialog.java index 703e626a274..1ef95b5bebc 100644 --- a/jdk/src/share/classes/sun/tools/jconsole/InternalDialog.java +++ b/jdk/src/share/classes/sun/tools/jconsole/InternalDialog.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2005, 2006, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2005, 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 diff --git a/jdk/src/share/classes/sun/tools/jconsole/JConsole.java b/jdk/src/share/classes/sun/tools/jconsole/JConsole.java index 443ae807469..46d9504dc15 100644 --- a/jdk/src/share/classes/sun/tools/jconsole/JConsole.java +++ b/jdk/src/share/classes/sun/tools/jconsole/JConsole.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2004, 2006, Oracle and/or its affiliates. All rights reserved. + * 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 diff --git a/jdk/src/share/classes/sun/tools/jconsole/LabeledComponent.java b/jdk/src/share/classes/sun/tools/jconsole/LabeledComponent.java index ce045e8f0d3..5d7c9a8509a 100644 --- a/jdk/src/share/classes/sun/tools/jconsole/LabeledComponent.java +++ b/jdk/src/share/classes/sun/tools/jconsole/LabeledComponent.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2004, 2006, Oracle and/or its affiliates. All rights reserved. + * 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 diff --git a/jdk/src/share/classes/sun/tools/jconsole/LocalVirtualMachine.java b/jdk/src/share/classes/sun/tools/jconsole/LocalVirtualMachine.java index 4982c0ec84d..65b03e0fac0 100644 --- a/jdk/src/share/classes/sun/tools/jconsole/LocalVirtualMachine.java +++ b/jdk/src/share/classes/sun/tools/jconsole/LocalVirtualMachine.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2005, 2006, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2005, 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 diff --git a/jdk/src/share/classes/sun/tools/jconsole/MBeansTab.java b/jdk/src/share/classes/sun/tools/jconsole/MBeansTab.java index cb5bcc1ee8c..b7d79e3600d 100644 --- a/jdk/src/share/classes/sun/tools/jconsole/MBeansTab.java +++ b/jdk/src/share/classes/sun/tools/jconsole/MBeansTab.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2004, 2008, Oracle and/or its affiliates. All rights reserved. + * 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 diff --git a/jdk/src/share/classes/sun/tools/jconsole/MaximizableInternalFrame.java b/jdk/src/share/classes/sun/tools/jconsole/MaximizableInternalFrame.java index ab2c1bff121..9bd4ee4fd88 100644 --- a/jdk/src/share/classes/sun/tools/jconsole/MaximizableInternalFrame.java +++ b/jdk/src/share/classes/sun/tools/jconsole/MaximizableInternalFrame.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2006, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2006, 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 diff --git a/jdk/src/share/classes/sun/tools/jconsole/MemoryPoolProxy.java b/jdk/src/share/classes/sun/tools/jconsole/MemoryPoolProxy.java index a796db0da0b..8bd37ce9a49 100644 --- a/jdk/src/share/classes/sun/tools/jconsole/MemoryPoolProxy.java +++ b/jdk/src/share/classes/sun/tools/jconsole/MemoryPoolProxy.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2004, Oracle and/or its affiliates. All rights reserved. + * 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 diff --git a/jdk/src/share/classes/sun/tools/jconsole/MemoryPoolStat.java b/jdk/src/share/classes/sun/tools/jconsole/MemoryPoolStat.java index 869c44e6a1c..df7409815a9 100644 --- a/jdk/src/share/classes/sun/tools/jconsole/MemoryPoolStat.java +++ b/jdk/src/share/classes/sun/tools/jconsole/MemoryPoolStat.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2004, 2008, Oracle and/or its affiliates. All rights reserved. + * 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 diff --git a/jdk/src/share/classes/sun/tools/jconsole/MemoryTab.java b/jdk/src/share/classes/sun/tools/jconsole/MemoryTab.java index 756fa18b079..29bed08c5cb 100644 --- a/jdk/src/share/classes/sun/tools/jconsole/MemoryTab.java +++ b/jdk/src/share/classes/sun/tools/jconsole/MemoryTab.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2004, 2007, Oracle and/or its affiliates. All rights reserved. + * 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 diff --git a/jdk/src/share/classes/sun/tools/jconsole/OverviewPanel.java b/jdk/src/share/classes/sun/tools/jconsole/OverviewPanel.java index 269dbd23205..848b71a74d8 100644 --- a/jdk/src/share/classes/sun/tools/jconsole/OverviewPanel.java +++ b/jdk/src/share/classes/sun/tools/jconsole/OverviewPanel.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2006, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2006, 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 diff --git a/jdk/src/share/classes/sun/tools/jconsole/OverviewTab.java b/jdk/src/share/classes/sun/tools/jconsole/OverviewTab.java index 3b89f6e33c8..08086ab5887 100644 --- a/jdk/src/share/classes/sun/tools/jconsole/OverviewTab.java +++ b/jdk/src/share/classes/sun/tools/jconsole/OverviewTab.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2006, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2006, 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 diff --git a/jdk/src/share/classes/sun/tools/jconsole/Plotter.java b/jdk/src/share/classes/sun/tools/jconsole/Plotter.java index a9dbeceb999..793b0ea263d 100644 --- a/jdk/src/share/classes/sun/tools/jconsole/Plotter.java +++ b/jdk/src/share/classes/sun/tools/jconsole/Plotter.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2004, 2008, Oracle and/or its affiliates. All rights reserved. + * 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 diff --git a/jdk/src/share/classes/sun/tools/jconsole/PlotterPanel.java b/jdk/src/share/classes/sun/tools/jconsole/PlotterPanel.java index da6b2cc3b6a..da83cd4ac78 100644 --- a/jdk/src/share/classes/sun/tools/jconsole/PlotterPanel.java +++ b/jdk/src/share/classes/sun/tools/jconsole/PlotterPanel.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2004, 2006, Oracle and/or its affiliates. All rights reserved. + * 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 diff --git a/jdk/src/share/classes/sun/tools/jconsole/ProxyClient.java b/jdk/src/share/classes/sun/tools/jconsole/ProxyClient.java index d98d4895289..af7b4267f0b 100644 --- a/jdk/src/share/classes/sun/tools/jconsole/ProxyClient.java +++ b/jdk/src/share/classes/sun/tools/jconsole/ProxyClient.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2004, 2008, Oracle and/or its affiliates. All rights reserved. + * 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 diff --git a/jdk/src/share/classes/sun/tools/jconsole/Resources.java b/jdk/src/share/classes/sun/tools/jconsole/Resources.java index e7ced473ece..785be24d2e6 100644 --- a/jdk/src/share/classes/sun/tools/jconsole/Resources.java +++ b/jdk/src/share/classes/sun/tools/jconsole/Resources.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2004, 2007, Oracle and/or its affiliates. All rights reserved. + * 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 diff --git a/jdk/src/share/classes/sun/tools/jconsole/SummaryTab.java b/jdk/src/share/classes/sun/tools/jconsole/SummaryTab.java index e51110085e9..13ee1dd7262 100644 --- a/jdk/src/share/classes/sun/tools/jconsole/SummaryTab.java +++ b/jdk/src/share/classes/sun/tools/jconsole/SummaryTab.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2004, 2007, Oracle and/or its affiliates. All rights reserved. + * 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 diff --git a/jdk/src/share/classes/sun/tools/jconsole/Tab.java b/jdk/src/share/classes/sun/tools/jconsole/Tab.java index 512cc6be5d8..0ca2c7faae7 100644 --- a/jdk/src/share/classes/sun/tools/jconsole/Tab.java +++ b/jdk/src/share/classes/sun/tools/jconsole/Tab.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2004, 2006, Oracle and/or its affiliates. All rights reserved. + * 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 diff --git a/jdk/src/share/classes/sun/tools/jconsole/ThreadTab.java b/jdk/src/share/classes/sun/tools/jconsole/ThreadTab.java index d1cb677efef..354f351f750 100644 --- a/jdk/src/share/classes/sun/tools/jconsole/ThreadTab.java +++ b/jdk/src/share/classes/sun/tools/jconsole/ThreadTab.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2004, 2007, Oracle and/or its affiliates. All rights reserved. + * 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 diff --git a/jdk/src/share/classes/sun/tools/jconsole/VMInternalFrame.java b/jdk/src/share/classes/sun/tools/jconsole/VMInternalFrame.java index 750d444c2fe..d591a1874dc 100644 --- a/jdk/src/share/classes/sun/tools/jconsole/VMInternalFrame.java +++ b/jdk/src/share/classes/sun/tools/jconsole/VMInternalFrame.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2004, 2006, Oracle and/or its affiliates. All rights reserved. + * 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 diff --git a/jdk/src/share/classes/sun/tools/jconsole/VMPanel.java b/jdk/src/share/classes/sun/tools/jconsole/VMPanel.java index d9072b0ac6a..ec403d5d3b8 100644 --- a/jdk/src/share/classes/sun/tools/jconsole/VMPanel.java +++ b/jdk/src/share/classes/sun/tools/jconsole/VMPanel.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2004, 2008, Oracle and/or its affiliates. All rights reserved. + * 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 diff --git a/jdk/src/share/classes/sun/tools/jconsole/VariableGridLayout.java b/jdk/src/share/classes/sun/tools/jconsole/VariableGridLayout.java index 2d5851ce3b0..d472191aec7 100644 --- a/jdk/src/share/classes/sun/tools/jconsole/VariableGridLayout.java +++ b/jdk/src/share/classes/sun/tools/jconsole/VariableGridLayout.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2004, 2006, Oracle and/or its affiliates. All rights reserved. + * 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 diff --git a/jdk/src/share/classes/sun/tools/jconsole/Version.java.template b/jdk/src/share/classes/sun/tools/jconsole/Version.java.template index f52ac657622..d6ebdb67bd8 100644 --- a/jdk/src/share/classes/sun/tools/jconsole/Version.java.template +++ b/jdk/src/share/classes/sun/tools/jconsole/Version.java.template @@ -1,5 +1,5 @@ /* - * Copyright (c) 2004, 2006, Oracle and/or its affiliates. All rights reserved. + * 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 diff --git a/jdk/src/share/classes/sun/tools/jconsole/inspector/OperationEntry.java b/jdk/src/share/classes/sun/tools/jconsole/inspector/OperationEntry.java index 30dde2be106..7822c88112c 100644 --- a/jdk/src/share/classes/sun/tools/jconsole/inspector/OperationEntry.java +++ b/jdk/src/share/classes/sun/tools/jconsole/inspector/OperationEntry.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2004, 2008, Oracle and/or its affiliates. All rights reserved. + * 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 diff --git a/jdk/src/share/classes/sun/tools/jconsole/inspector/TableSorter.java b/jdk/src/share/classes/sun/tools/jconsole/inspector/TableSorter.java index b89ab728a7b..486243e7d17 100644 --- a/jdk/src/share/classes/sun/tools/jconsole/inspector/TableSorter.java +++ b/jdk/src/share/classes/sun/tools/jconsole/inspector/TableSorter.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2004, 2008, Oracle and/or its affiliates. All rights reserved. + * 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 diff --git a/jdk/src/share/classes/sun/tools/jconsole/inspector/ThreadDialog.java b/jdk/src/share/classes/sun/tools/jconsole/inspector/ThreadDialog.java index dbcdd63ca85..2600f031368 100644 --- a/jdk/src/share/classes/sun/tools/jconsole/inspector/ThreadDialog.java +++ b/jdk/src/share/classes/sun/tools/jconsole/inspector/ThreadDialog.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2004, 2008, Oracle and/or its affiliates. All rights reserved. + * 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 diff --git a/jdk/src/share/classes/sun/tools/jconsole/inspector/Utils.java b/jdk/src/share/classes/sun/tools/jconsole/inspector/Utils.java index cc97c4e1fb6..0ff44bd6002 100644 --- a/jdk/src/share/classes/sun/tools/jconsole/inspector/Utils.java +++ b/jdk/src/share/classes/sun/tools/jconsole/inspector/Utils.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2004, 2008, Oracle and/or its affiliates. All rights reserved. + * 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 diff --git a/jdk/src/share/classes/sun/tools/jconsole/inspector/XArrayDataViewer.java b/jdk/src/share/classes/sun/tools/jconsole/inspector/XArrayDataViewer.java index b42d5c67022..58f795cef21 100644 --- a/jdk/src/share/classes/sun/tools/jconsole/inspector/XArrayDataViewer.java +++ b/jdk/src/share/classes/sun/tools/jconsole/inspector/XArrayDataViewer.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2004, 2006, Oracle and/or its affiliates. All rights reserved. + * 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 diff --git a/jdk/src/share/classes/sun/tools/jconsole/inspector/XDataViewer.java b/jdk/src/share/classes/sun/tools/jconsole/inspector/XDataViewer.java index c820d831966..58669af1e8a 100644 --- a/jdk/src/share/classes/sun/tools/jconsole/inspector/XDataViewer.java +++ b/jdk/src/share/classes/sun/tools/jconsole/inspector/XDataViewer.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2004, 2008, Oracle and/or its affiliates. All rights reserved. + * 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 diff --git a/jdk/src/share/classes/sun/tools/jconsole/inspector/XMBeanAttributes.java b/jdk/src/share/classes/sun/tools/jconsole/inspector/XMBeanAttributes.java index 474b928010f..0f610983fdf 100644 --- a/jdk/src/share/classes/sun/tools/jconsole/inspector/XMBeanAttributes.java +++ b/jdk/src/share/classes/sun/tools/jconsole/inspector/XMBeanAttributes.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2004, 2008, Oracle and/or its affiliates. All rights reserved. + * 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 diff --git a/jdk/src/share/classes/sun/tools/jconsole/inspector/XMBeanInfo.java b/jdk/src/share/classes/sun/tools/jconsole/inspector/XMBeanInfo.java index cac986ad162..4ce44a48e39 100644 --- a/jdk/src/share/classes/sun/tools/jconsole/inspector/XMBeanInfo.java +++ b/jdk/src/share/classes/sun/tools/jconsole/inspector/XMBeanInfo.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2004, 2008, Oracle and/or its affiliates. All rights reserved. + * 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 diff --git a/jdk/src/share/classes/sun/tools/jconsole/inspector/XMBeanNotifications.java b/jdk/src/share/classes/sun/tools/jconsole/inspector/XMBeanNotifications.java index 5077797bdac..d191bb3a504 100644 --- a/jdk/src/share/classes/sun/tools/jconsole/inspector/XMBeanNotifications.java +++ b/jdk/src/share/classes/sun/tools/jconsole/inspector/XMBeanNotifications.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2004, 2008, Oracle and/or its affiliates. All rights reserved. + * 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 diff --git a/jdk/src/share/classes/sun/tools/jconsole/inspector/XObject.java b/jdk/src/share/classes/sun/tools/jconsole/inspector/XObject.java index 303090abacb..d0b5617a2c4 100644 --- a/jdk/src/share/classes/sun/tools/jconsole/inspector/XObject.java +++ b/jdk/src/share/classes/sun/tools/jconsole/inspector/XObject.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2004, 2008, Oracle and/or its affiliates. All rights reserved. + * 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 diff --git a/jdk/src/share/classes/sun/tools/jconsole/inspector/XOpenTypeViewer.java b/jdk/src/share/classes/sun/tools/jconsole/inspector/XOpenTypeViewer.java index 108ff7a2181..e5f0b11df14 100644 --- a/jdk/src/share/classes/sun/tools/jconsole/inspector/XOpenTypeViewer.java +++ b/jdk/src/share/classes/sun/tools/jconsole/inspector/XOpenTypeViewer.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2004, 2007, Oracle and/or its affiliates. All rights reserved. + * 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 diff --git a/jdk/src/share/classes/sun/tools/jconsole/inspector/XOperations.java b/jdk/src/share/classes/sun/tools/jconsole/inspector/XOperations.java index b4f24fa2009..855a76aa8db 100644 --- a/jdk/src/share/classes/sun/tools/jconsole/inspector/XOperations.java +++ b/jdk/src/share/classes/sun/tools/jconsole/inspector/XOperations.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2004, 2008, Oracle and/or its affiliates. All rights reserved. + * 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 diff --git a/jdk/src/share/classes/sun/tools/jconsole/inspector/XPlotter.java b/jdk/src/share/classes/sun/tools/jconsole/inspector/XPlotter.java index 00fdff8e189..06a2dc4e54a 100644 --- a/jdk/src/share/classes/sun/tools/jconsole/inspector/XPlotter.java +++ b/jdk/src/share/classes/sun/tools/jconsole/inspector/XPlotter.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2004, 2008, Oracle and/or its affiliates. All rights reserved. + * 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 diff --git a/jdk/src/share/classes/sun/tools/jconsole/inspector/XPlottingViewer.java b/jdk/src/share/classes/sun/tools/jconsole/inspector/XPlottingViewer.java index f1e768c1fbb..e6c2d17f411 100644 --- a/jdk/src/share/classes/sun/tools/jconsole/inspector/XPlottingViewer.java +++ b/jdk/src/share/classes/sun/tools/jconsole/inspector/XPlottingViewer.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2004, 2008, Oracle and/or its affiliates. All rights reserved. + * 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 diff --git a/jdk/src/share/classes/sun/tools/jconsole/inspector/XSheet.java b/jdk/src/share/classes/sun/tools/jconsole/inspector/XSheet.java index f9f5bc4847b..63e4a387fdd 100644 --- a/jdk/src/share/classes/sun/tools/jconsole/inspector/XSheet.java +++ b/jdk/src/share/classes/sun/tools/jconsole/inspector/XSheet.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2004, 2008, Oracle and/or its affiliates. All rights reserved. + * 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 diff --git a/jdk/src/share/classes/sun/tools/jconsole/inspector/XTable.java b/jdk/src/share/classes/sun/tools/jconsole/inspector/XTable.java index 172ded8f702..4f9b24a9555 100644 --- a/jdk/src/share/classes/sun/tools/jconsole/inspector/XTable.java +++ b/jdk/src/share/classes/sun/tools/jconsole/inspector/XTable.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2004, 2008, Oracle and/or its affiliates. All rights reserved. + * 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 diff --git a/jdk/src/share/classes/sun/tools/jconsole/inspector/XTextField.java b/jdk/src/share/classes/sun/tools/jconsole/inspector/XTextField.java index 2cb23599920..bfe3471c4ed 100644 --- a/jdk/src/share/classes/sun/tools/jconsole/inspector/XTextField.java +++ b/jdk/src/share/classes/sun/tools/jconsole/inspector/XTextField.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2004, 2008, Oracle and/or its affiliates. All rights reserved. + * 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 diff --git a/jdk/src/share/classes/sun/tools/jconsole/inspector/XTree.java b/jdk/src/share/classes/sun/tools/jconsole/inspector/XTree.java index 303d9dc0bf0..26d968fa506 100644 --- a/jdk/src/share/classes/sun/tools/jconsole/inspector/XTree.java +++ b/jdk/src/share/classes/sun/tools/jconsole/inspector/XTree.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2004, 2008, Oracle and/or its affiliates. All rights reserved. + * 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 diff --git a/jdk/src/share/classes/sun/tools/jconsole/inspector/XTreeRenderer.java b/jdk/src/share/classes/sun/tools/jconsole/inspector/XTreeRenderer.java index fb885d7b932..b1c29811329 100644 --- a/jdk/src/share/classes/sun/tools/jconsole/inspector/XTreeRenderer.java +++ b/jdk/src/share/classes/sun/tools/jconsole/inspector/XTreeRenderer.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2004, 2006, Oracle and/or its affiliates. All rights reserved. + * 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 diff --git a/jdk/src/share/classes/sun/tools/jinfo/JInfo.java b/jdk/src/share/classes/sun/tools/jinfo/JInfo.java index 5a405341685..bcbd7db91f4 100644 --- a/jdk/src/share/classes/sun/tools/jinfo/JInfo.java +++ b/jdk/src/share/classes/sun/tools/jinfo/JInfo.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2006, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2006, 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 diff --git a/jdk/src/share/classes/sun/tools/jmap/JMap.java b/jdk/src/share/classes/sun/tools/jmap/JMap.java index 1d68b668fbf..5350c31ed0b 100644 --- a/jdk/src/share/classes/sun/tools/jmap/JMap.java +++ b/jdk/src/share/classes/sun/tools/jmap/JMap.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2005, 2008, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2005, 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 diff --git a/jdk/src/share/classes/sun/tools/jstack/JStack.java b/jdk/src/share/classes/sun/tools/jstack/JStack.java index 66fc672652c..e638446b4f1 100644 --- a/jdk/src/share/classes/sun/tools/jstack/JStack.java +++ b/jdk/src/share/classes/sun/tools/jstack/JStack.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2005, 2006, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2005, 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 diff --git a/jdk/src/share/classes/sun/tools/serialver/SerialVer.java b/jdk/src/share/classes/sun/tools/serialver/SerialVer.java index 4b310a81ad7..b2a2de60bcf 100644 --- a/jdk/src/share/classes/sun/tools/serialver/SerialVer.java +++ b/jdk/src/share/classes/sun/tools/serialver/SerialVer.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1996, 2005, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1996, 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 diff --git a/jdk/src/share/classes/sun/tools/tree/Node.java b/jdk/src/share/classes/sun/tools/tree/Node.java index da71ec5f49c..e07b6b8ef10 100644 --- a/jdk/src/share/classes/sun/tools/tree/Node.java +++ b/jdk/src/share/classes/sun/tools/tree/Node.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1994, 2003, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1994, 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 diff --git a/jdk/src/share/classes/sun/tracing/dtrace/DTraceProvider.java b/jdk/src/share/classes/sun/tracing/dtrace/DTraceProvider.java index 432199927ab..4a9eb2888d6 100644 --- a/jdk/src/share/classes/sun/tracing/dtrace/DTraceProvider.java +++ b/jdk/src/share/classes/sun/tracing/dtrace/DTraceProvider.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2008, Oracle and/or its affiliates. All rights reserved. + * 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 diff --git a/jdk/src/share/classes/sun/tracing/dtrace/JVM.java b/jdk/src/share/classes/sun/tracing/dtrace/JVM.java index c59ce68cb3c..a3fb5e1838d 100644 --- a/jdk/src/share/classes/sun/tracing/dtrace/JVM.java +++ b/jdk/src/share/classes/sun/tracing/dtrace/JVM.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2008, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2008, 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 diff --git a/jdk/src/share/classes/sun/util/PreHashedMap.java b/jdk/src/share/classes/sun/util/PreHashedMap.java index c09425ce6e4..d0a8ed90597 100644 --- a/jdk/src/share/classes/sun/util/PreHashedMap.java +++ b/jdk/src/share/classes/sun/util/PreHashedMap.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2004, Oracle and/or its affiliates. All rights reserved. + * 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 diff --git a/jdk/src/share/classes/sun/util/calendar/CalendarDate.java b/jdk/src/share/classes/sun/util/calendar/CalendarDate.java index 70c1bed6187..b8e736ca194 100644 --- a/jdk/src/share/classes/sun/util/calendar/CalendarDate.java +++ b/jdk/src/share/classes/sun/util/calendar/CalendarDate.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2000, 2003, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2000, 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 diff --git a/jdk/src/share/classes/sun/util/locale/LocaleUtils.java b/jdk/src/share/classes/sun/util/locale/LocaleUtils.java index 9a89dc0e7e8..ead48fc2493 100644 --- a/jdk/src/share/classes/sun/util/locale/LocaleUtils.java +++ b/jdk/src/share/classes/sun/util/locale/LocaleUtils.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2010, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2010, 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 diff --git a/jdk/src/share/classes/sun/util/locale/provider/CurrencyNameProviderImpl.java b/jdk/src/share/classes/sun/util/locale/provider/CurrencyNameProviderImpl.java index 33087118982..cfa805fddfc 100644 --- a/jdk/src/share/classes/sun/util/locale/provider/CurrencyNameProviderImpl.java +++ b/jdk/src/share/classes/sun/util/locale/provider/CurrencyNameProviderImpl.java @@ -26,10 +26,9 @@ package sun.util.locale.provider; import java.util.Locale; -import java.util.MissingResourceException; +import java.util.ResourceBundle; import java.util.Set; import java.util.spi.CurrencyNameProvider; -import sun.util.resources.OpenListResourceBundle; /** * Concrete implementation of the @@ -121,16 +120,10 @@ public class CurrencyNameProviderImpl extends CurrencyNameProvider throw new NullPointerException(); } - OpenListResourceBundle bundle = LocaleProviderAdapter.forType(type).getLocaleData().getCurrencyNames(locale); - LocaleServiceProviderPool pool = - LocaleServiceProviderPool.getPool(CurrencyNameProvider.class); - try { - if (!pool.hasProviders() || - (bundle.getLocale().equals(locale) && - bundle.handleGetKeys().contains(key))) { + ResourceBundle bundle = LocaleProviderAdapter.forType(type).getLocaleData().getCurrencyNames(locale); + if (bundle.containsKey(key)) { return bundle.getString(key); } - } catch (MissingResourceException mre) {} return null; } diff --git a/jdk/src/share/classes/sun/util/locale/provider/JRELocaleProviderAdapter.java b/jdk/src/share/classes/sun/util/locale/provider/JRELocaleProviderAdapter.java index 34ed5b890e2..346cba08ac0 100644 --- a/jdk/src/share/classes/sun/util/locale/provider/JRELocaleProviderAdapter.java +++ b/jdk/src/share/classes/sun/util/locale/provider/JRELocaleProviderAdapter.java @@ -321,7 +321,7 @@ public class JRELocaleProviderAdapter extends LocaleProviderAdapter { while (tokens.hasMoreTokens()) { String token = tokens.nextToken(); if (token.equals("|")) { - if (isNonEuroLangSupported()) { + if (isNonUSLangSupported()) { continue; } break; @@ -361,7 +361,7 @@ public class JRELocaleProviderAdapter extends LocaleProviderAdapter { */ int barIndex = supportedLocaleString.indexOf('|'); StringTokenizer localeStringTokenizer; - if (isNonEuroLangSupported()) { + if (isNonUSLangSupported()) { localeStringTokenizer = new StringTokenizer(supportedLocaleString.substring(0, barIndex) + supportedLocaleString.substring(barIndex + 1)); } else { @@ -390,17 +390,17 @@ public class JRELocaleProviderAdapter extends LocaleProviderAdapter { return locales; } - private static volatile Boolean isNonEuroSupported = null; + private static volatile Boolean isNonUSSupported = null; /* - * Returns true if the non European resources jar file exists in jre + * Returns true if the non US resources jar file exists in jre * extension directory. @returns true if the jar file is there. Otherwise, * returns false. */ - private static boolean isNonEuroLangSupported() { - if (isNonEuroSupported == null) { + private static boolean isNonUSLangSupported() { + if (isNonUSSupported == null) { synchronized (JRELocaleProviderAdapter.class) { - if (isNonEuroSupported == null) { + if (isNonUSSupported == null) { final String sep = File.separator; String localeDataJar = java.security.AccessController.doPrivileged( @@ -412,7 +412,7 @@ public class JRELocaleProviderAdapter extends LocaleProviderAdapter { * localedata.jar is installed or not. */ final File f = new File(localeDataJar); - isNonEuroSupported = + isNonUSSupported = AccessController.doPrivileged(new PrivilegedAction() { @Override public Boolean run() { @@ -422,6 +422,6 @@ public class JRELocaleProviderAdapter extends LocaleProviderAdapter { } } } - return isNonEuroSupported; + return isNonUSSupported; } } diff --git a/jdk/src/share/classes/sun/util/locale/provider/LocaleDataMetaInfo-XLocales.java.template b/jdk/src/share/classes/sun/util/locale/provider/LocaleDataMetaInfo-XLocales.java.template index 3f6851dcf20..4418e568ae0 100644 --- a/jdk/src/share/classes/sun/util/locale/provider/LocaleDataMetaInfo-XLocales.java.template +++ b/jdk/src/share/classes/sun/util/locale/provider/LocaleDataMetaInfo-XLocales.java.template @@ -52,25 +52,25 @@ public class LocaleDataMetaInfo { look up locale string such as "en" could be based on if it contains " en ". */ resourceNameToLocales.put("FormatData", - " #FormatData_EuroLocales# | #FormatData_NonEuroLocales# "); + " #FormatData_USLocales# | #FormatData_NonUSLocales# "); resourceNameToLocales.put("CollationData", - " #CollationData_EuroLocales# | #CollationData_NonEuroLocales# "); + " #CollationData_USLocales# | #CollationData_NonUSLocales# "); resourceNameToLocales.put("TimeZoneNames", - " #TimeZoneNames_EuroLocales# | #TimeZoneNames_NonEuroLocales# "); + " #TimeZoneNames_USLocales# | #TimeZoneNames_NonUSLocales# "); resourceNameToLocales.put("LocaleNames", - " #LocaleNames_EuroLocales# | #LocaleNames_NonEuroLocales# "); + " #LocaleNames_USLocales# | #LocaleNames_NonUSLocales# "); resourceNameToLocales.put("CurrencyNames", - " #CurrencyNames_EuroLocales# | #CurrencyNames_NonEuroLocales# "); + " #CurrencyNames_USLocales# | #CurrencyNames_NonUSLocales# "); resourceNameToLocales.put("CalendarData", - " #CalendarData_EuroLocales# | #CalendarData_NonEuroLocales# "); + " #CalendarData_USLocales# | #CalendarData_NonUSLocales# "); resourceNameToLocales.put("AvailableLocales", - " #AvailableLocales_EuroLocales# | #AvailableLocales_NonEuroLocales# "); + " #AvailableLocales_USLocales# | #AvailableLocales_NonUSLocales# "); } /* diff --git a/jdk/src/share/classes/sun/util/locale/provider/LocaleNameProviderImpl.java b/jdk/src/share/classes/sun/util/locale/provider/LocaleNameProviderImpl.java index 0344cac81b0..952078fd5c3 100644 --- a/jdk/src/share/classes/sun/util/locale/provider/LocaleNameProviderImpl.java +++ b/jdk/src/share/classes/sun/util/locale/provider/LocaleNameProviderImpl.java @@ -26,10 +26,9 @@ package sun.util.locale.provider; import java.util.Locale; -import java.util.MissingResourceException; +import java.util.ResourceBundle; import java.util.Set; import java.util.spi.LocaleNameProvider; -import sun.util.resources.OpenListResourceBundle; /** * Concrete implementation of the @@ -175,15 +174,10 @@ public class LocaleNameProviderImpl extends LocaleNameProvider implements Availa throw new NullPointerException(); } - OpenListResourceBundle rb = LocaleProviderAdapter.forType(type).getLocaleData().getLocaleNames(locale); - LocaleServiceProviderPool pool = - LocaleServiceProviderPool.getPool(LocaleNameProvider.class); - try { - if (!pool.hasProviders() || - (rb.getLocale().equals(locale) && rb.handleGetKeys().contains(key))) { + ResourceBundle rb = LocaleProviderAdapter.forType(type).getLocaleData().getLocaleNames(locale); + if (rb.containsKey(key)) { return rb.getString(key); } - } catch (MissingResourceException mre) {} return null; } diff --git a/jdk/src/share/classes/sun/util/locale/provider/LocaleServiceProviderPool.java b/jdk/src/share/classes/sun/util/locale/provider/LocaleServiceProviderPool.java index a8045610ff8..2683b7dd62b 100644 --- a/jdk/src/share/classes/sun/util/locale/provider/LocaleServiceProviderPool.java +++ b/jdk/src/share/classes/sun/util/locale/provider/LocaleServiceProviderPool.java @@ -302,7 +302,7 @@ public final class LocaleServiceProviderPool { for (LocaleProviderAdapter.Type type: findProviders(current)) { LocaleServiceProvider lsp = providers.get(type); - providersObj = getter.getObject((P)lsp, current, key, params); + providersObj = getter.getObject((P)lsp, locale, key, params); if (providersObj != null) { return providersObj; } else if (isObjectProvider) { @@ -356,7 +356,7 @@ public final class LocaleServiceProviderPool { * @param locale the input locale * @return the list of candidate locales for the given locale */ - private static List getLookupLocales(Locale locale) { + static List getLookupLocales(Locale locale) { // Note: We currently use the default implementation of // ResourceBundle.Control.getCandidateLocales. The result // returned by getCandidateLocales are already normalized diff --git a/jdk/src/share/classes/sun/util/locale/provider/SPILocaleProviderAdapter.java b/jdk/src/share/classes/sun/util/locale/provider/SPILocaleProviderAdapter.java index 0f123c5d51b..cb4f9aee7de 100644 --- a/jdk/src/share/classes/sun/util/locale/provider/SPILocaleProviderAdapter.java +++ b/jdk/src/share/classes/sun/util/locale/provider/SPILocaleProviderAdapter.java @@ -28,8 +28,11 @@ package sun.util.locale.provider; import java.security.AccessController; import java.security.PrivilegedActionException; import java.security.PrivilegedExceptionAction; -import java.util.ServiceLoader; -import java.util.spi.LocaleServiceProvider; +import java.text.*; +import java.text.spi.*; +import java.util.*; +import java.util.concurrent.*; +import java.util.spi.*; /** * LocaleProviderAdapter implementation for the installed SPI implementations. @@ -54,11 +57,28 @@ public class SPILocaleProviderAdapter extends AuxLocaleProviderAdapter { @Override @SuppressWarnings("unchecked") public P run() { - P lsp = null; + P delegate = null; + for (LocaleServiceProvider provider : ServiceLoader.loadInstalled(c)) { - lsp = (P) provider; + if (delegate == null) { + try { + delegate = + (P) Class.forName(SPILocaleProviderAdapter.class.getCanonicalName() + + "$" + + c.getSimpleName() + + "Delegate") + .newInstance(); + } catch (ClassNotFoundException | + InstantiationException | + IllegalAccessException e) { + LocaleServiceProviderPool.config(SPILocaleProviderAdapter.class, e.toString()); + return null; } - return lsp; + } + + ((Delegate)delegate).addImpl(provider); + } + return delegate; } }); } catch (PrivilegedActionException e) { @@ -66,4 +86,478 @@ public class SPILocaleProviderAdapter extends AuxLocaleProviderAdapter { } return null; } + + /* + * Delegate interface. All the implementations have to have the class name + * following "Delegate" convention. + */ + interface Delegate

{ + public void addImpl(P impl); + public P getImpl(Locale locale); +} + + /* + * Obtain the real SPI implementation, using locale fallback + */ + private static

P getImpl(Map map, Locale locale) { + for (Locale l : LocaleServiceProviderPool.getLookupLocales(locale)) { + P ret = map.get(l); + if (ret != null) { + return ret; + } + } + return null; + } + + /* + * Delegates for the actual SPI implementations. + */ + static class BreakIteratorProviderDelegate extends BreakIteratorProvider + implements Delegate { + private ConcurrentMap map = new ConcurrentHashMap<>(); + + @Override + public void addImpl(BreakIteratorProvider impl) { + for (Locale l : impl.getAvailableLocales()) { + map.put(l, impl); + } + } + + @Override + public BreakIteratorProvider getImpl(Locale locale) { + return SPILocaleProviderAdapter.getImpl(map, locale); + } + + @Override + public Locale[] getAvailableLocales() { + return map.keySet().toArray(new Locale[0]); + } + + @Override + public boolean isSupportedLocale(Locale locale) { + return map.containsKey(locale); + } + + @Override + public BreakIterator getWordInstance(Locale locale) { + BreakIteratorProvider bip = getImpl(locale); + assert bip != null; + return bip.getWordInstance(locale); + } + + @Override + public BreakIterator getLineInstance(Locale locale) { + BreakIteratorProvider bip = getImpl(locale); + assert bip != null; + return bip.getLineInstance(locale); + } + + @Override + public BreakIterator getCharacterInstance(Locale locale) { + BreakIteratorProvider bip = getImpl(locale); + assert bip != null; + return bip.getCharacterInstance(locale); + } + + @Override + public BreakIterator getSentenceInstance(Locale locale) { + BreakIteratorProvider bip = getImpl(locale); + assert bip != null; + return bip.getSentenceInstance(locale); + } + + } + + static class CollatorProviderDelegate extends CollatorProvider implements Delegate { + private ConcurrentMap map = new ConcurrentHashMap<>(); + + @Override + public void addImpl(CollatorProvider impl) { + for (Locale l : impl.getAvailableLocales()) { + map.put(l, impl); + } + } + + @Override + public CollatorProvider getImpl(Locale locale) { + return SPILocaleProviderAdapter.getImpl(map, locale); + } + + @Override + public Locale[] getAvailableLocales() { + return map.keySet().toArray(new Locale[0]); + } + + @Override + public boolean isSupportedLocale(Locale locale) { + return map.containsKey(locale); + } + + @Override + public Collator getInstance(Locale locale) { + CollatorProvider cp = getImpl(locale); + assert cp != null; + return cp.getInstance(locale); + } + } + + static class DateFormatProviderDelegate extends DateFormatProvider + implements Delegate { + private ConcurrentMap map = new ConcurrentHashMap<>(); + + @Override + public void addImpl(DateFormatProvider impl) { + for (Locale l : impl.getAvailableLocales()) { + map.put(l, impl); + } + } + + @Override + public DateFormatProvider getImpl(Locale locale) { + return SPILocaleProviderAdapter.getImpl(map, locale); + } + + @Override + public Locale[] getAvailableLocales() { + return map.keySet().toArray(new Locale[0]); + } + + @Override + public boolean isSupportedLocale(Locale locale) { + return map.containsKey(locale); + } + + @Override + public DateFormat getTimeInstance(int style, Locale locale) { + DateFormatProvider dfp = getImpl(locale); + assert dfp != null; + return dfp.getTimeInstance(style, locale); + } + + @Override + public DateFormat getDateInstance(int style, Locale locale) { + DateFormatProvider dfp = getImpl(locale); + assert dfp != null; + return dfp.getDateInstance(style, locale); + } + + @Override + public DateFormat getDateTimeInstance(int dateStyle, int timeStyle, Locale locale) { + DateFormatProvider dfp = getImpl(locale); + assert dfp != null; + return dfp.getDateTimeInstance(dateStyle, timeStyle, locale); + } + } + + static class DateFormatSymbolsProviderDelegate extends DateFormatSymbolsProvider + implements Delegate { + private ConcurrentMap map = new ConcurrentHashMap<>(); + + @Override + public void addImpl(DateFormatSymbolsProvider impl) { + for (Locale l : impl.getAvailableLocales()) { + map.put(l, impl); + } + } + + @Override + public DateFormatSymbolsProvider getImpl(Locale locale) { + return SPILocaleProviderAdapter.getImpl(map, locale); + } + + @Override + public Locale[] getAvailableLocales() { + return map.keySet().toArray(new Locale[0]); + } + + @Override + public boolean isSupportedLocale(Locale locale) { + return map.containsKey(locale); + } + + @Override + public DateFormatSymbols getInstance(Locale locale) { + DateFormatSymbolsProvider dfsp = getImpl(locale); + assert dfsp != null; + return dfsp.getInstance(locale); + } + } + + static class DecimalFormatSymbolsProviderDelegate extends DecimalFormatSymbolsProvider + implements Delegate { + private ConcurrentMap map = new ConcurrentHashMap<>(); + + @Override + public void addImpl(DecimalFormatSymbolsProvider impl) { + for (Locale l : impl.getAvailableLocales()) { + map.put(l, impl); + } + } + + @Override + public DecimalFormatSymbolsProvider getImpl(Locale locale) { + return SPILocaleProviderAdapter.getImpl(map, locale); + } + + @Override + public Locale[] getAvailableLocales() { + return map.keySet().toArray(new Locale[0]); + } + + @Override + public boolean isSupportedLocale(Locale locale) { + return map.containsKey(locale); + } + + @Override + public DecimalFormatSymbols getInstance(Locale locale) { + DecimalFormatSymbolsProvider dfsp = getImpl(locale); + assert dfsp != null; + return dfsp.getInstance(locale); + } + } + + static class NumberFormatProviderDelegate extends NumberFormatProvider + implements Delegate { + private ConcurrentMap map = new ConcurrentHashMap<>(); + + @Override + public void addImpl(NumberFormatProvider impl) { + for (Locale l : impl.getAvailableLocales()) { + map.put(l, impl); + } + } + + @Override + public NumberFormatProvider getImpl(Locale locale) { + return SPILocaleProviderAdapter.getImpl(map, locale); + } + + @Override + public Locale[] getAvailableLocales() { + return map.keySet().toArray(new Locale[0]); + } + + @Override + public boolean isSupportedLocale(Locale locale) { + return map.containsKey(locale); + } + + @Override + public NumberFormat getCurrencyInstance(Locale locale) { + NumberFormatProvider nfp = getImpl(locale); + assert nfp != null; + return nfp.getCurrencyInstance(locale); + } + + @Override + public NumberFormat getIntegerInstance(Locale locale) { + NumberFormatProvider nfp = getImpl(locale); + assert nfp != null; + return nfp.getIntegerInstance(locale); + } + + @Override + public NumberFormat getNumberInstance(Locale locale) { + NumberFormatProvider nfp = getImpl(locale); + assert nfp != null; + return nfp.getNumberInstance(locale); + } + + @Override + public NumberFormat getPercentInstance(Locale locale) { + NumberFormatProvider nfp = getImpl(locale); + assert nfp != null; + return nfp.getPercentInstance(locale); + } + } + + static class CalendarDataProviderDelegate extends CalendarDataProvider + implements Delegate { + private ConcurrentMap map = new ConcurrentHashMap<>(); + + @Override + public void addImpl(CalendarDataProvider impl) { + for (Locale l : impl.getAvailableLocales()) { + map.put(l, impl); + } + } + + @Override + public CalendarDataProvider getImpl(Locale locale) { + return SPILocaleProviderAdapter.getImpl(map, locale); + } + + @Override + public Locale[] getAvailableLocales() { + return map.keySet().toArray(new Locale[0]); + } + + @Override + public boolean isSupportedLocale(Locale locale) { + return map.containsKey(locale); + } + + @Override + public int getFirstDayOfWeek(Locale locale) { + CalendarDataProvider cdp = getImpl(locale); + assert cdp != null; + return cdp.getFirstDayOfWeek(locale); + } + + @Override + public int getMinimalDaysInFirstWeek(Locale locale) { + CalendarDataProvider cdp = getImpl(locale); + assert cdp != null; + return cdp.getMinimalDaysInFirstWeek(locale); + } + + @Override + public String getDisplayName(String calendarType, + int field, int value, + int style, Locale locale) { + CalendarDataProvider cdp = getImpl(locale); + assert cdp != null; + return cdp.getDisplayName(calendarType, field, value, style, locale); + } + + @Override + public Map getDisplayNames(String calendarType, + int field, int style, + Locale locale) { + CalendarDataProvider cdp = getImpl(locale); + assert cdp != null; + return cdp.getDisplayNames(calendarType, field, style, locale); + } + } + + static class CurrencyNameProviderDelegate extends CurrencyNameProvider + implements Delegate { + private ConcurrentMap map = new ConcurrentHashMap<>(); + + @Override + public void addImpl(CurrencyNameProvider impl) { + for (Locale l : impl.getAvailableLocales()) { + map.put(l, impl); + } + } + + @Override + public CurrencyNameProvider getImpl(Locale locale) { + return SPILocaleProviderAdapter.getImpl(map, locale); + } + + @Override + public Locale[] getAvailableLocales() { + return map.keySet().toArray(new Locale[0]); + } + + @Override + public boolean isSupportedLocale(Locale locale) { + return map.containsKey(locale); + } + + @Override + public String getSymbol(String currencyCode, Locale locale) { + CurrencyNameProvider cnp = getImpl(locale); + assert cnp != null; + return cnp.getSymbol(currencyCode, locale); + } + + @Override + public String getDisplayName(String currencyCode, Locale locale) { + CurrencyNameProvider cnp = getImpl(locale); + assert cnp != null; + return cnp.getDisplayName(currencyCode, locale); + } + } + + static class LocaleNameProviderDelegate extends LocaleNameProvider + implements Delegate { + private ConcurrentMap map = new ConcurrentHashMap<>(); + + @Override + public void addImpl(LocaleNameProvider impl) { + for (Locale l : impl.getAvailableLocales()) { + map.put(l, impl); + } + } + + @Override + public LocaleNameProvider getImpl(Locale locale) { + return SPILocaleProviderAdapter.getImpl(map, locale); + } + + @Override + public Locale[] getAvailableLocales() { + return map.keySet().toArray(new Locale[0]); + } + + @Override + public boolean isSupportedLocale(Locale locale) { + return map.containsKey(locale); + } + + @Override + public String getDisplayLanguage(String languageCode, Locale locale) { + LocaleNameProvider lnp = getImpl(locale); + assert lnp != null; + return lnp.getDisplayLanguage(languageCode, locale); + } + + @Override + public String getDisplayScript(String scriptCode, Locale locale) { + LocaleNameProvider lnp = getImpl(locale); + assert lnp != null; + return lnp.getDisplayScript(scriptCode, locale); + } + + @Override + public String getDisplayCountry(String countryCode, Locale locale) { + LocaleNameProvider lnp = getImpl(locale); + assert lnp != null; + return lnp.getDisplayCountry(countryCode, locale); + } + + @Override + public String getDisplayVariant(String variant, Locale locale) { + LocaleNameProvider lnp = getImpl(locale); + assert lnp != null; + return lnp.getDisplayVariant(variant, locale); + } + } + + static class TimeZoneNameProviderDelegate extends TimeZoneNameProvider + implements Delegate { + private ConcurrentMap map = new ConcurrentHashMap<>(); + + @Override + public void addImpl(TimeZoneNameProvider impl) { + for (Locale l : impl.getAvailableLocales()) { + map.put(l, impl); + } + } + + @Override + public TimeZoneNameProvider getImpl(Locale locale) { + return SPILocaleProviderAdapter.getImpl(map, locale); + } + + @Override + public Locale[] getAvailableLocales() { + return map.keySet().toArray(new Locale[0]); + } + + @Override + public boolean isSupportedLocale(Locale locale) { + return map.containsKey(locale); + } + + @Override + public String getDisplayName(String ID, boolean daylight, int style, Locale locale) { + TimeZoneNameProvider tznp = getImpl(locale); + assert tznp != null; + return tznp.getDisplayName(ID, daylight, style, locale); + } + } } diff --git a/jdk/src/share/classes/sun/util/locale/provider/TimeZoneNameProviderImpl.java b/jdk/src/share/classes/sun/util/locale/provider/TimeZoneNameProviderImpl.java index ea436fb0167..ff092861824 100644 --- a/jdk/src/share/classes/sun/util/locale/provider/TimeZoneNameProviderImpl.java +++ b/jdk/src/share/classes/sun/util/locale/provider/TimeZoneNameProviderImpl.java @@ -26,11 +26,10 @@ package sun.util.locale.provider; import java.util.Locale; -import java.util.MissingResourceException; +import java.util.ResourceBundle; import java.util.Set; import java.util.TimeZone; import java.util.spi.TimeZoneNameProvider; -import sun.util.resources.OpenListResourceBundle; /** * Concrete implementation of the @@ -102,12 +101,8 @@ public class TimeZoneNameProviderImpl extends TimeZoneNameProvider { } LocaleProviderAdapter adapter = LocaleProviderAdapter.forType(type); - OpenListResourceBundle rb = adapter.getLocaleResources(locale).getTimeZoneNames(); - LocaleServiceProviderPool pool = - LocaleServiceProviderPool.getPool(TimeZoneNameProvider.class); - try { - if (!pool.hasProviders() || - (rb.getLocale().equals(locale) && rb.handleGetKeys().contains(id))) { + ResourceBundle rb = adapter.getLocaleResources(locale).getTimeZoneNames(); + if (rb.containsKey(id)) { String[] names = rb.getStringArray(id); int index = daylight ? 3 : 1; if (style == TimeZone.SHORT) { @@ -115,8 +110,6 @@ public class TimeZoneNameProviderImpl extends TimeZoneNameProvider { } return names[index]; } - } catch (MissingResourceException mre) { - } return null; } diff --git a/jdk/src/share/classes/sun/util/logging/LoggingProxy.java b/jdk/src/share/classes/sun/util/logging/LoggingProxy.java index c3cbfd614fc..5d8e99982c5 100644 --- a/jdk/src/share/classes/sun/util/logging/LoggingProxy.java +++ b/jdk/src/share/classes/sun/util/logging/LoggingProxy.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2009, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2009, 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 diff --git a/jdk/src/share/classes/sun/util/logging/LoggingSupport.java b/jdk/src/share/classes/sun/util/logging/LoggingSupport.java index c5a2200c5e7..27f010928ae 100644 --- a/jdk/src/share/classes/sun/util/logging/LoggingSupport.java +++ b/jdk/src/share/classes/sun/util/logging/LoggingSupport.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2009, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2009, 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 diff --git a/jdk/src/share/classes/sun/util/logging/PlatformLogger.java b/jdk/src/share/classes/sun/util/logging/PlatformLogger.java index 30700a06b0b..000a1603fe9 100644 --- a/jdk/src/share/classes/sun/util/logging/PlatformLogger.java +++ b/jdk/src/share/classes/sun/util/logging/PlatformLogger.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2009, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2009, 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 diff --git a/jdk/src/share/classes/sun/util/resources/OpenListResourceBundle.java b/jdk/src/share/classes/sun/util/resources/OpenListResourceBundle.java index fef2777c267..e0551931d19 100644 --- a/jdk/src/share/classes/sun/util/resources/OpenListResourceBundle.java +++ b/jdk/src/share/classes/sun/util/resources/OpenListResourceBundle.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2005, 2007, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2005, 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 diff --git a/jdk/src/share/classes/sun/util/resources/TimeZoneNames.java b/jdk/src/share/classes/sun/util/resources/TimeZoneNames.java index fe6e93374e4..5b2931b7b62 100644 --- a/jdk/src/share/classes/sun/util/resources/TimeZoneNames.java +++ b/jdk/src/share/classes/sun/util/resources/TimeZoneNames.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1996, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1996, 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 diff --git a/jdk/src/share/classes/sun/util/resources/ar/CalendarData_ar.properties b/jdk/src/share/classes/sun/util/resources/ar/CalendarData_ar.properties index 79a41226285..d4d3468ed03 100644 --- a/jdk/src/share/classes/sun/util/resources/ar/CalendarData_ar.properties +++ b/jdk/src/share/classes/sun/util/resources/ar/CalendarData_ar.properties @@ -1,5 +1,5 @@ # -# Copyright (c) 2005, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2005, 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 diff --git a/jdk/src/share/classes/sun/util/resources/ar/CurrencyNames_ar_AE.properties b/jdk/src/share/classes/sun/util/resources/ar/CurrencyNames_ar_AE.properties index 96b2b7a0247..fd8c720c77b 100644 --- a/jdk/src/share/classes/sun/util/resources/ar/CurrencyNames_ar_AE.properties +++ b/jdk/src/share/classes/sun/util/resources/ar/CurrencyNames_ar_AE.properties @@ -1,5 +1,5 @@ # -# Copyright (c) 2005, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2005, 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 diff --git a/jdk/src/share/classes/sun/util/resources/ar/CurrencyNames_ar_BH.properties b/jdk/src/share/classes/sun/util/resources/ar/CurrencyNames_ar_BH.properties index d6a509901bd..34cd8dddf28 100644 --- a/jdk/src/share/classes/sun/util/resources/ar/CurrencyNames_ar_BH.properties +++ b/jdk/src/share/classes/sun/util/resources/ar/CurrencyNames_ar_BH.properties @@ -1,5 +1,5 @@ # -# Copyright (c) 2005, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2005, 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 diff --git a/jdk/src/share/classes/sun/util/resources/ar/CurrencyNames_ar_DZ.properties b/jdk/src/share/classes/sun/util/resources/ar/CurrencyNames_ar_DZ.properties index b164a07c082..9ab387a1374 100644 --- a/jdk/src/share/classes/sun/util/resources/ar/CurrencyNames_ar_DZ.properties +++ b/jdk/src/share/classes/sun/util/resources/ar/CurrencyNames_ar_DZ.properties @@ -1,5 +1,5 @@ # -# Copyright (c) 2005, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2005, 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 diff --git a/jdk/src/share/classes/sun/util/resources/ar/CurrencyNames_ar_EG.properties b/jdk/src/share/classes/sun/util/resources/ar/CurrencyNames_ar_EG.properties index 650f6a2cf97..fe372eb0de6 100644 --- a/jdk/src/share/classes/sun/util/resources/ar/CurrencyNames_ar_EG.properties +++ b/jdk/src/share/classes/sun/util/resources/ar/CurrencyNames_ar_EG.properties @@ -1,5 +1,5 @@ # -# Copyright (c) 2005, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2005, 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 diff --git a/jdk/src/share/classes/sun/util/resources/ar/CurrencyNames_ar_IQ.properties b/jdk/src/share/classes/sun/util/resources/ar/CurrencyNames_ar_IQ.properties index 40c1140f801..bb4bfdd3d39 100644 --- a/jdk/src/share/classes/sun/util/resources/ar/CurrencyNames_ar_IQ.properties +++ b/jdk/src/share/classes/sun/util/resources/ar/CurrencyNames_ar_IQ.properties @@ -1,5 +1,5 @@ # -# Copyright (c) 2005, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2005, 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 diff --git a/jdk/src/share/classes/sun/util/resources/ar/CurrencyNames_ar_JO.properties b/jdk/src/share/classes/sun/util/resources/ar/CurrencyNames_ar_JO.properties index 8e4e4678e66..6f8693e9829 100644 --- a/jdk/src/share/classes/sun/util/resources/ar/CurrencyNames_ar_JO.properties +++ b/jdk/src/share/classes/sun/util/resources/ar/CurrencyNames_ar_JO.properties @@ -1,5 +1,5 @@ # -# Copyright (c) 2005, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2005, 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 diff --git a/jdk/src/share/classes/sun/util/resources/ar/CurrencyNames_ar_KW.properties b/jdk/src/share/classes/sun/util/resources/ar/CurrencyNames_ar_KW.properties index c6b4b4abc2a..6672f25d712 100644 --- a/jdk/src/share/classes/sun/util/resources/ar/CurrencyNames_ar_KW.properties +++ b/jdk/src/share/classes/sun/util/resources/ar/CurrencyNames_ar_KW.properties @@ -1,5 +1,5 @@ # -# Copyright (c) 2005, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2005, 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 diff --git a/jdk/src/share/classes/sun/util/resources/ar/CurrencyNames_ar_LB.properties b/jdk/src/share/classes/sun/util/resources/ar/CurrencyNames_ar_LB.properties index 53406bca2e6..6be59f9fb39 100644 --- a/jdk/src/share/classes/sun/util/resources/ar/CurrencyNames_ar_LB.properties +++ b/jdk/src/share/classes/sun/util/resources/ar/CurrencyNames_ar_LB.properties @@ -1,5 +1,5 @@ # -# Copyright (c) 2005, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2005, 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 diff --git a/jdk/src/share/classes/sun/util/resources/ar/CurrencyNames_ar_LY.properties b/jdk/src/share/classes/sun/util/resources/ar/CurrencyNames_ar_LY.properties index 133c8b56c47..32762800ca4 100644 --- a/jdk/src/share/classes/sun/util/resources/ar/CurrencyNames_ar_LY.properties +++ b/jdk/src/share/classes/sun/util/resources/ar/CurrencyNames_ar_LY.properties @@ -1,5 +1,5 @@ # -# Copyright (c) 2005, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2005, 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 diff --git a/jdk/src/share/classes/sun/util/resources/ar/CurrencyNames_ar_MA.properties b/jdk/src/share/classes/sun/util/resources/ar/CurrencyNames_ar_MA.properties index 9b541033fc0..640db1c270f 100644 --- a/jdk/src/share/classes/sun/util/resources/ar/CurrencyNames_ar_MA.properties +++ b/jdk/src/share/classes/sun/util/resources/ar/CurrencyNames_ar_MA.properties @@ -1,5 +1,5 @@ # -# Copyright (c) 2005, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2005, 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 diff --git a/jdk/src/share/classes/sun/util/resources/ar/CurrencyNames_ar_OM.properties b/jdk/src/share/classes/sun/util/resources/ar/CurrencyNames_ar_OM.properties index 1616f1b4808..85c670d72b8 100644 --- a/jdk/src/share/classes/sun/util/resources/ar/CurrencyNames_ar_OM.properties +++ b/jdk/src/share/classes/sun/util/resources/ar/CurrencyNames_ar_OM.properties @@ -1,5 +1,5 @@ # -# Copyright (c) 2005, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2005, 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 diff --git a/jdk/src/share/classes/sun/util/resources/ar/CurrencyNames_ar_QA.properties b/jdk/src/share/classes/sun/util/resources/ar/CurrencyNames_ar_QA.properties index 0a8918c49e2..f4fac2f7d30 100644 --- a/jdk/src/share/classes/sun/util/resources/ar/CurrencyNames_ar_QA.properties +++ b/jdk/src/share/classes/sun/util/resources/ar/CurrencyNames_ar_QA.properties @@ -1,5 +1,5 @@ # -# Copyright (c) 2005, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2005, 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 diff --git a/jdk/src/share/classes/sun/util/resources/ar/CurrencyNames_ar_SA.properties b/jdk/src/share/classes/sun/util/resources/ar/CurrencyNames_ar_SA.properties index e3533f00bd3..86171b22ee0 100644 --- a/jdk/src/share/classes/sun/util/resources/ar/CurrencyNames_ar_SA.properties +++ b/jdk/src/share/classes/sun/util/resources/ar/CurrencyNames_ar_SA.properties @@ -1,5 +1,5 @@ # -# Copyright (c) 2005, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2005, 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 diff --git a/jdk/src/share/classes/sun/util/resources/ar/CurrencyNames_ar_SD.properties b/jdk/src/share/classes/sun/util/resources/ar/CurrencyNames_ar_SD.properties index 7e0800d5f2d..559468af673 100644 --- a/jdk/src/share/classes/sun/util/resources/ar/CurrencyNames_ar_SD.properties +++ b/jdk/src/share/classes/sun/util/resources/ar/CurrencyNames_ar_SD.properties @@ -1,5 +1,5 @@ # -# Copyright (c) 2005, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2005, 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 diff --git a/jdk/src/share/classes/sun/util/resources/ar/CurrencyNames_ar_SY.properties b/jdk/src/share/classes/sun/util/resources/ar/CurrencyNames_ar_SY.properties index 5456b9660c5..05d80b6ecc8 100644 --- a/jdk/src/share/classes/sun/util/resources/ar/CurrencyNames_ar_SY.properties +++ b/jdk/src/share/classes/sun/util/resources/ar/CurrencyNames_ar_SY.properties @@ -1,5 +1,5 @@ # -# Copyright (c) 2005, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2005, 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 diff --git a/jdk/src/share/classes/sun/util/resources/ar/CurrencyNames_ar_TN.properties b/jdk/src/share/classes/sun/util/resources/ar/CurrencyNames_ar_TN.properties index f38e5f0e0f3..613b7bb36db 100644 --- a/jdk/src/share/classes/sun/util/resources/ar/CurrencyNames_ar_TN.properties +++ b/jdk/src/share/classes/sun/util/resources/ar/CurrencyNames_ar_TN.properties @@ -1,5 +1,5 @@ # -# Copyright (c) 2005, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2005, 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 diff --git a/jdk/src/share/classes/sun/util/resources/ar/CurrencyNames_ar_YE.properties b/jdk/src/share/classes/sun/util/resources/ar/CurrencyNames_ar_YE.properties index e62e1f39c15..5037a7c5560 100644 --- a/jdk/src/share/classes/sun/util/resources/ar/CurrencyNames_ar_YE.properties +++ b/jdk/src/share/classes/sun/util/resources/ar/CurrencyNames_ar_YE.properties @@ -1,5 +1,5 @@ # -# Copyright (c) 2005, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2005, 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 diff --git a/jdk/src/share/classes/sun/util/resources/ar/LocaleNames_ar.properties b/jdk/src/share/classes/sun/util/resources/ar/LocaleNames_ar.properties index a21d4707192..5dac9722bde 100644 --- a/jdk/src/share/classes/sun/util/resources/ar/LocaleNames_ar.properties +++ b/jdk/src/share/classes/sun/util/resources/ar/LocaleNames_ar.properties @@ -1,4 +1,4 @@ -# Copyright (c) 2005, 2007, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2005, 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 diff --git a/jdk/src/share/classes/sun/util/resources/be/CalendarData_be.properties b/jdk/src/share/classes/sun/util/resources/be/CalendarData_be.properties index 36167c9c604..ca2ae0f185f 100644 --- a/jdk/src/share/classes/sun/util/resources/be/CalendarData_be.properties +++ b/jdk/src/share/classes/sun/util/resources/be/CalendarData_be.properties @@ -1,5 +1,5 @@ # -# Copyright (c) 2005, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2005, 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 diff --git a/jdk/src/share/classes/sun/util/resources/be/CurrencyNames_be_BY.properties b/jdk/src/share/classes/sun/util/resources/be/CurrencyNames_be_BY.properties index f8855a894bc..4651ad1c097 100644 --- a/jdk/src/share/classes/sun/util/resources/be/CurrencyNames_be_BY.properties +++ b/jdk/src/share/classes/sun/util/resources/be/CurrencyNames_be_BY.properties @@ -1,5 +1,5 @@ # -# Copyright (c) 2005, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2005, 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 diff --git a/jdk/src/share/classes/sun/util/resources/be/LocaleNames_be.properties b/jdk/src/share/classes/sun/util/resources/be/LocaleNames_be.properties index 25aaa3d4bee..6cc1ca169e5 100644 --- a/jdk/src/share/classes/sun/util/resources/be/LocaleNames_be.properties +++ b/jdk/src/share/classes/sun/util/resources/be/LocaleNames_be.properties @@ -1,4 +1,4 @@ -# Copyright (c) 2005, 2007, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2005, 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 diff --git a/jdk/src/share/classes/sun/util/resources/bg/CalendarData_bg.properties b/jdk/src/share/classes/sun/util/resources/bg/CalendarData_bg.properties index 36167c9c604..ca2ae0f185f 100644 --- a/jdk/src/share/classes/sun/util/resources/bg/CalendarData_bg.properties +++ b/jdk/src/share/classes/sun/util/resources/bg/CalendarData_bg.properties @@ -1,5 +1,5 @@ # -# Copyright (c) 2005, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2005, 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 diff --git a/jdk/src/share/classes/sun/util/resources/bg/CurrencyNames_bg_BG.properties b/jdk/src/share/classes/sun/util/resources/bg/CurrencyNames_bg_BG.properties index b3c3f40188b..ab4eade2b1d 100644 --- a/jdk/src/share/classes/sun/util/resources/bg/CurrencyNames_bg_BG.properties +++ b/jdk/src/share/classes/sun/util/resources/bg/CurrencyNames_bg_BG.properties @@ -1,5 +1,5 @@ # -# Copyright (c) 2005, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2005, 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 diff --git a/jdk/src/share/classes/sun/util/resources/bg/LocaleNames_bg.properties b/jdk/src/share/classes/sun/util/resources/bg/LocaleNames_bg.properties index 2ea8f30c9d6..cec6a952fda 100644 --- a/jdk/src/share/classes/sun/util/resources/bg/LocaleNames_bg.properties +++ b/jdk/src/share/classes/sun/util/resources/bg/LocaleNames_bg.properties @@ -1,4 +1,4 @@ -# Copyright (c) 2005, 2007, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2005, 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 diff --git a/jdk/src/share/classes/sun/util/resources/ca/CalendarData_ca.properties b/jdk/src/share/classes/sun/util/resources/ca/CalendarData_ca.properties index 9fcc1ced96b..f1322141930 100644 --- a/jdk/src/share/classes/sun/util/resources/ca/CalendarData_ca.properties +++ b/jdk/src/share/classes/sun/util/resources/ca/CalendarData_ca.properties @@ -1,5 +1,5 @@ # -# Copyright (c) 2005, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2005, 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 diff --git a/jdk/src/share/classes/sun/util/resources/ca/CurrencyNames_ca_ES.properties b/jdk/src/share/classes/sun/util/resources/ca/CurrencyNames_ca_ES.properties index 7dd49e6d400..e7f60a2428e 100644 --- a/jdk/src/share/classes/sun/util/resources/ca/CurrencyNames_ca_ES.properties +++ b/jdk/src/share/classes/sun/util/resources/ca/CurrencyNames_ca_ES.properties @@ -1,5 +1,5 @@ # -# Copyright (c) 2005, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2005, 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 diff --git a/jdk/src/share/classes/sun/util/resources/ca/LocaleNames_ca.properties b/jdk/src/share/classes/sun/util/resources/ca/LocaleNames_ca.properties index 61ec3335738..3cb67eb83b5 100644 --- a/jdk/src/share/classes/sun/util/resources/ca/LocaleNames_ca.properties +++ b/jdk/src/share/classes/sun/util/resources/ca/LocaleNames_ca.properties @@ -1,4 +1,4 @@ -# Copyright (c) 2005, 2007, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2005, 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 diff --git a/jdk/src/share/classes/sun/util/resources/cs/CalendarData_cs.properties b/jdk/src/share/classes/sun/util/resources/cs/CalendarData_cs.properties index 9fcc1ced96b..f1322141930 100644 --- a/jdk/src/share/classes/sun/util/resources/cs/CalendarData_cs.properties +++ b/jdk/src/share/classes/sun/util/resources/cs/CalendarData_cs.properties @@ -1,5 +1,5 @@ # -# Copyright (c) 2005, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2005, 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 diff --git a/jdk/src/share/classes/sun/util/resources/cs/CurrencyNames_cs_CZ.properties b/jdk/src/share/classes/sun/util/resources/cs/CurrencyNames_cs_CZ.properties index cc48db2a087..296669d7eab 100644 --- a/jdk/src/share/classes/sun/util/resources/cs/CurrencyNames_cs_CZ.properties +++ b/jdk/src/share/classes/sun/util/resources/cs/CurrencyNames_cs_CZ.properties @@ -1,5 +1,5 @@ # -# Copyright (c) 2005, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2005, 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 diff --git a/jdk/src/share/classes/sun/util/resources/cs/LocaleNames_cs.properties b/jdk/src/share/classes/sun/util/resources/cs/LocaleNames_cs.properties index a2e8cda50bd..49bb1ffc855 100644 --- a/jdk/src/share/classes/sun/util/resources/cs/LocaleNames_cs.properties +++ b/jdk/src/share/classes/sun/util/resources/cs/LocaleNames_cs.properties @@ -1,4 +1,4 @@ -# Copyright (c) 2005, 2007, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2005, 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 diff --git a/jdk/src/share/classes/sun/util/resources/da/CalendarData_da.properties b/jdk/src/share/classes/sun/util/resources/da/CalendarData_da.properties index 9fcc1ced96b..f1322141930 100644 --- a/jdk/src/share/classes/sun/util/resources/da/CalendarData_da.properties +++ b/jdk/src/share/classes/sun/util/resources/da/CalendarData_da.properties @@ -1,5 +1,5 @@ # -# Copyright (c) 2005, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2005, 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 diff --git a/jdk/src/share/classes/sun/util/resources/da/CurrencyNames_da_DK.properties b/jdk/src/share/classes/sun/util/resources/da/CurrencyNames_da_DK.properties index 2c64e87d66d..d29f7f6cd93 100644 --- a/jdk/src/share/classes/sun/util/resources/da/CurrencyNames_da_DK.properties +++ b/jdk/src/share/classes/sun/util/resources/da/CurrencyNames_da_DK.properties @@ -1,5 +1,5 @@ # -# Copyright (c) 2005, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2005, 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 diff --git a/jdk/src/share/classes/sun/util/resources/da/LocaleNames_da.properties b/jdk/src/share/classes/sun/util/resources/da/LocaleNames_da.properties index 3981ca9f7d9..f811c424db6 100644 --- a/jdk/src/share/classes/sun/util/resources/da/LocaleNames_da.properties +++ b/jdk/src/share/classes/sun/util/resources/da/LocaleNames_da.properties @@ -1,4 +1,4 @@ -# Copyright (c) 2005, 2007, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2005, 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 diff --git a/jdk/src/share/classes/sun/util/resources/de/CalendarData_de.properties b/jdk/src/share/classes/sun/util/resources/de/CalendarData_de.properties index 9fcc1ced96b..f1322141930 100644 --- a/jdk/src/share/classes/sun/util/resources/de/CalendarData_de.properties +++ b/jdk/src/share/classes/sun/util/resources/de/CalendarData_de.properties @@ -1,5 +1,5 @@ # -# Copyright (c) 2005, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2005, 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 diff --git a/jdk/src/share/classes/sun/util/resources/de/CurrencyNames_de.properties b/jdk/src/share/classes/sun/util/resources/de/CurrencyNames_de.properties index 7f193bcc8aa..510a68e4a02 100644 --- a/jdk/src/share/classes/sun/util/resources/de/CurrencyNames_de.properties +++ b/jdk/src/share/classes/sun/util/resources/de/CurrencyNames_de.properties @@ -1,5 +1,5 @@ # -# Copyright (c) 2005, 2011, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2005, 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 diff --git a/jdk/src/share/classes/sun/util/resources/de/CurrencyNames_de_AT.properties b/jdk/src/share/classes/sun/util/resources/de/CurrencyNames_de_AT.properties index 90700455234..113ed6fb105 100644 --- a/jdk/src/share/classes/sun/util/resources/de/CurrencyNames_de_AT.properties +++ b/jdk/src/share/classes/sun/util/resources/de/CurrencyNames_de_AT.properties @@ -1,5 +1,5 @@ # -# Copyright (c) 2005, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2005, 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 diff --git a/jdk/src/share/classes/sun/util/resources/de/CurrencyNames_de_CH.properties b/jdk/src/share/classes/sun/util/resources/de/CurrencyNames_de_CH.properties index 04756670b31..8ea815fb11a 100644 --- a/jdk/src/share/classes/sun/util/resources/de/CurrencyNames_de_CH.properties +++ b/jdk/src/share/classes/sun/util/resources/de/CurrencyNames_de_CH.properties @@ -1,5 +1,5 @@ # -# Copyright (c) 2005, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2005, 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 diff --git a/jdk/src/share/classes/sun/util/resources/de/CurrencyNames_de_DE.properties b/jdk/src/share/classes/sun/util/resources/de/CurrencyNames_de_DE.properties index 7968d922b30..6ee888469b4 100644 --- a/jdk/src/share/classes/sun/util/resources/de/CurrencyNames_de_DE.properties +++ b/jdk/src/share/classes/sun/util/resources/de/CurrencyNames_de_DE.properties @@ -1,5 +1,5 @@ # -# Copyright (c) 2005, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2005, 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 diff --git a/jdk/src/share/classes/sun/util/resources/de/CurrencyNames_de_GR.properties b/jdk/src/share/classes/sun/util/resources/de/CurrencyNames_de_GR.properties index 1444f75c8d7..b44226143bb 100644 --- a/jdk/src/share/classes/sun/util/resources/de/CurrencyNames_de_GR.properties +++ b/jdk/src/share/classes/sun/util/resources/de/CurrencyNames_de_GR.properties @@ -1,5 +1,5 @@ # -# Copyright (c) 2005, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2005, 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 diff --git a/jdk/src/share/classes/sun/util/resources/de/CurrencyNames_de_LU.properties b/jdk/src/share/classes/sun/util/resources/de/CurrencyNames_de_LU.properties index 6c757a1ddf2..e7fc898ede4 100644 --- a/jdk/src/share/classes/sun/util/resources/de/CurrencyNames_de_LU.properties +++ b/jdk/src/share/classes/sun/util/resources/de/CurrencyNames_de_LU.properties @@ -1,5 +1,5 @@ # -# Copyright (c) 2005, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2005, 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 diff --git a/jdk/src/share/classes/sun/util/resources/de/LocaleNames_de.properties b/jdk/src/share/classes/sun/util/resources/de/LocaleNames_de.properties index 158dd8a29f6..69bdf7dbb66 100644 --- a/jdk/src/share/classes/sun/util/resources/de/LocaleNames_de.properties +++ b/jdk/src/share/classes/sun/util/resources/de/LocaleNames_de.properties @@ -1,4 +1,4 @@ -# Copyright (c) 2005, 2011, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2005, 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 diff --git a/jdk/src/share/classes/sun/util/resources/el/CalendarData_el.properties b/jdk/src/share/classes/sun/util/resources/el/CalendarData_el.properties index 9fcc1ced96b..f1322141930 100644 --- a/jdk/src/share/classes/sun/util/resources/el/CalendarData_el.properties +++ b/jdk/src/share/classes/sun/util/resources/el/CalendarData_el.properties @@ -1,5 +1,5 @@ # -# Copyright (c) 2005, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2005, 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 diff --git a/jdk/src/share/classes/sun/util/resources/el/CalendarData_el_CY.properties b/jdk/src/share/classes/sun/util/resources/el/CalendarData_el_CY.properties index b28ba124cef..6dfca1101df 100644 --- a/jdk/src/share/classes/sun/util/resources/el/CalendarData_el_CY.properties +++ b/jdk/src/share/classes/sun/util/resources/el/CalendarData_el_CY.properties @@ -1,5 +1,5 @@ # -# Copyright (c) 2005, 2007, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2005, 2012, Oracle and/or its affiliates. All rights reserved. # # diff --git a/jdk/src/share/classes/sun/util/resources/el/CurrencyNames_el_CY.properties b/jdk/src/share/classes/sun/util/resources/el/CurrencyNames_el_CY.properties index 207db80172e..48fa57a8bdc 100644 --- a/jdk/src/share/classes/sun/util/resources/el/CurrencyNames_el_CY.properties +++ b/jdk/src/share/classes/sun/util/resources/el/CurrencyNames_el_CY.properties @@ -1,5 +1,5 @@ # -# Copyright (c) 2005, 2007, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2005, 2012, Oracle and/or its affiliates. All rights reserved. # # diff --git a/jdk/src/share/classes/sun/util/resources/el/CurrencyNames_el_GR.properties b/jdk/src/share/classes/sun/util/resources/el/CurrencyNames_el_GR.properties index 1444f75c8d7..b44226143bb 100644 --- a/jdk/src/share/classes/sun/util/resources/el/CurrencyNames_el_GR.properties +++ b/jdk/src/share/classes/sun/util/resources/el/CurrencyNames_el_GR.properties @@ -1,5 +1,5 @@ # -# Copyright (c) 2005, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2005, 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 diff --git a/jdk/src/share/classes/sun/util/resources/el/LocaleNames_el.properties b/jdk/src/share/classes/sun/util/resources/el/LocaleNames_el.properties index 00dcef2fce5..23c6074e656 100644 --- a/jdk/src/share/classes/sun/util/resources/el/LocaleNames_el.properties +++ b/jdk/src/share/classes/sun/util/resources/el/LocaleNames_el.properties @@ -1,5 +1,5 @@ # -# Copyright (c) 2005, 2007, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2005, 2012, Oracle and/or its affiliates. All rights reserved. # # diff --git a/jdk/src/share/classes/sun/util/resources/el/LocaleNames_el_CY.properties b/jdk/src/share/classes/sun/util/resources/el/LocaleNames_el_CY.properties index bb1b5795fb2..4310a2199f2 100644 --- a/jdk/src/share/classes/sun/util/resources/el/LocaleNames_el_CY.properties +++ b/jdk/src/share/classes/sun/util/resources/el/LocaleNames_el_CY.properties @@ -1,5 +1,5 @@ # -# Copyright (c) 2005, 2007, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2005, 2012, Oracle and/or its affiliates. All rights reserved. # # diff --git a/jdk/src/share/classes/sun/util/resources/en/CalendarData_en.properties b/jdk/src/share/classes/sun/util/resources/en/CalendarData_en.properties index 36167c9c604..ca2ae0f185f 100644 --- a/jdk/src/share/classes/sun/util/resources/en/CalendarData_en.properties +++ b/jdk/src/share/classes/sun/util/resources/en/CalendarData_en.properties @@ -1,5 +1,5 @@ # -# Copyright (c) 2005, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2005, 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 diff --git a/jdk/src/share/classes/sun/util/resources/en/CalendarData_en_GB.properties b/jdk/src/share/classes/sun/util/resources/en/CalendarData_en_GB.properties index 9fcc1ced96b..f1322141930 100644 --- a/jdk/src/share/classes/sun/util/resources/en/CalendarData_en_GB.properties +++ b/jdk/src/share/classes/sun/util/resources/en/CalendarData_en_GB.properties @@ -1,5 +1,5 @@ # -# Copyright (c) 2005, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2005, 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 diff --git a/jdk/src/share/classes/sun/util/resources/en/CalendarData_en_IE.properties b/jdk/src/share/classes/sun/util/resources/en/CalendarData_en_IE.properties index 9fcc1ced96b..f1322141930 100644 --- a/jdk/src/share/classes/sun/util/resources/en/CalendarData_en_IE.properties +++ b/jdk/src/share/classes/sun/util/resources/en/CalendarData_en_IE.properties @@ -1,5 +1,5 @@ # -# Copyright (c) 2005, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2005, 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 diff --git a/jdk/src/share/classes/sun/util/resources/en/CalendarData_en_MT.properties b/jdk/src/share/classes/sun/util/resources/en/CalendarData_en_MT.properties index ba64f31f510..f41fe83d116 100644 --- a/jdk/src/share/classes/sun/util/resources/en/CalendarData_en_MT.properties +++ b/jdk/src/share/classes/sun/util/resources/en/CalendarData_en_MT.properties @@ -1,5 +1,5 @@ # -# Copyright (c) 2005, 2007, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2005, 2012, Oracle and/or its affiliates. All rights reserved. # # diff --git a/jdk/src/share/classes/sun/util/resources/en/CurrencyNames_en_AU.properties b/jdk/src/share/classes/sun/util/resources/en/CurrencyNames_en_AU.properties index 0264357607c..174a678a242 100644 --- a/jdk/src/share/classes/sun/util/resources/en/CurrencyNames_en_AU.properties +++ b/jdk/src/share/classes/sun/util/resources/en/CurrencyNames_en_AU.properties @@ -1,5 +1,5 @@ # -# Copyright (c) 2005, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2005, 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 diff --git a/jdk/src/share/classes/sun/util/resources/en/CurrencyNames_en_CA.properties b/jdk/src/share/classes/sun/util/resources/en/CurrencyNames_en_CA.properties index 846bfe3b43a..98c0ba034fa 100644 --- a/jdk/src/share/classes/sun/util/resources/en/CurrencyNames_en_CA.properties +++ b/jdk/src/share/classes/sun/util/resources/en/CurrencyNames_en_CA.properties @@ -1,5 +1,5 @@ # -# Copyright (c) 2005, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2005, 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 diff --git a/jdk/src/share/classes/sun/util/resources/en/CurrencyNames_en_GB.properties b/jdk/src/share/classes/sun/util/resources/en/CurrencyNames_en_GB.properties index 30e0616f0bf..2601aef96d4 100644 --- a/jdk/src/share/classes/sun/util/resources/en/CurrencyNames_en_GB.properties +++ b/jdk/src/share/classes/sun/util/resources/en/CurrencyNames_en_GB.properties @@ -1,5 +1,5 @@ # -# Copyright (c) 2005, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2005, 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 diff --git a/jdk/src/share/classes/sun/util/resources/en/CurrencyNames_en_IE.properties b/jdk/src/share/classes/sun/util/resources/en/CurrencyNames_en_IE.properties index 3a72f0582c1..0f480271483 100644 --- a/jdk/src/share/classes/sun/util/resources/en/CurrencyNames_en_IE.properties +++ b/jdk/src/share/classes/sun/util/resources/en/CurrencyNames_en_IE.properties @@ -1,5 +1,5 @@ # -# Copyright (c) 2005, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2005, 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 diff --git a/jdk/src/share/classes/sun/util/resources/en/CurrencyNames_en_IN.properties b/jdk/src/share/classes/sun/util/resources/en/CurrencyNames_en_IN.properties index a57871d51b7..1965ecbdfaf 100644 --- a/jdk/src/share/classes/sun/util/resources/en/CurrencyNames_en_IN.properties +++ b/jdk/src/share/classes/sun/util/resources/en/CurrencyNames_en_IN.properties @@ -1,5 +1,5 @@ # -# Copyright (c) 2005, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2005, 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 diff --git a/jdk/src/share/classes/sun/util/resources/en/CurrencyNames_en_MT.properties b/jdk/src/share/classes/sun/util/resources/en/CurrencyNames_en_MT.properties index 0cd749b8632..d78f240ec1a 100644 --- a/jdk/src/share/classes/sun/util/resources/en/CurrencyNames_en_MT.properties +++ b/jdk/src/share/classes/sun/util/resources/en/CurrencyNames_en_MT.properties @@ -1,5 +1,5 @@ # -# Copyright (c) 2005, 2007, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2005, 2012, Oracle and/or its affiliates. All rights reserved. # # diff --git a/jdk/src/share/classes/sun/util/resources/en/CurrencyNames_en_NZ.properties b/jdk/src/share/classes/sun/util/resources/en/CurrencyNames_en_NZ.properties index 2afb18e1b86..1e8ca52a771 100644 --- a/jdk/src/share/classes/sun/util/resources/en/CurrencyNames_en_NZ.properties +++ b/jdk/src/share/classes/sun/util/resources/en/CurrencyNames_en_NZ.properties @@ -1,5 +1,5 @@ # -# Copyright (c) 2005, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2005, 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 diff --git a/jdk/src/share/classes/sun/util/resources/en/CurrencyNames_en_PH.properties b/jdk/src/share/classes/sun/util/resources/en/CurrencyNames_en_PH.properties index a26d9c17471..e47c27dd732 100644 --- a/jdk/src/share/classes/sun/util/resources/en/CurrencyNames_en_PH.properties +++ b/jdk/src/share/classes/sun/util/resources/en/CurrencyNames_en_PH.properties @@ -1,5 +1,5 @@ # -# Copyright (c) 2006, 2007, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2006, 2012, Oracle and/or its affiliates. All rights reserved. # # diff --git a/jdk/src/share/classes/sun/util/resources/en/CurrencyNames_en_SG.properties b/jdk/src/share/classes/sun/util/resources/en/CurrencyNames_en_SG.properties index 9eced4d6736..3dcd17b816f 100644 --- a/jdk/src/share/classes/sun/util/resources/en/CurrencyNames_en_SG.properties +++ b/jdk/src/share/classes/sun/util/resources/en/CurrencyNames_en_SG.properties @@ -1,5 +1,5 @@ # -# Copyright (c) 2005, 2007, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2005, 2012, Oracle and/or its affiliates. All rights reserved. # # diff --git a/jdk/src/share/classes/sun/util/resources/en/CurrencyNames_en_US.properties b/jdk/src/share/classes/sun/util/resources/en/CurrencyNames_en_US.properties index f8fef79c75d..995eaea2eff 100644 --- a/jdk/src/share/classes/sun/util/resources/en/CurrencyNames_en_US.properties +++ b/jdk/src/share/classes/sun/util/resources/en/CurrencyNames_en_US.properties @@ -1,5 +1,5 @@ # -# Copyright (c) 2005, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2005, 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 diff --git a/jdk/src/share/classes/sun/util/resources/en/CurrencyNames_en_ZA.properties b/jdk/src/share/classes/sun/util/resources/en/CurrencyNames_en_ZA.properties index 50fead9f6cf..b4e58d89580 100644 --- a/jdk/src/share/classes/sun/util/resources/en/CurrencyNames_en_ZA.properties +++ b/jdk/src/share/classes/sun/util/resources/en/CurrencyNames_en_ZA.properties @@ -1,5 +1,5 @@ # -# Copyright (c) 2005, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2005, 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 diff --git a/jdk/src/share/classes/sun/util/resources/en/LocaleNames_en.properties b/jdk/src/share/classes/sun/util/resources/en/LocaleNames_en.properties index a7f35a1c9d2..ef2759e5859 100644 --- a/jdk/src/share/classes/sun/util/resources/en/LocaleNames_en.properties +++ b/jdk/src/share/classes/sun/util/resources/en/LocaleNames_en.properties @@ -1,4 +1,4 @@ -# Copyright (c) 2005, 2007, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2005, 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 diff --git a/jdk/src/share/classes/sun/util/resources/en/LocaleNames_en_MT.properties b/jdk/src/share/classes/sun/util/resources/en/LocaleNames_en_MT.properties index 6c0729d79f4..c5262907816 100644 --- a/jdk/src/share/classes/sun/util/resources/en/LocaleNames_en_MT.properties +++ b/jdk/src/share/classes/sun/util/resources/en/LocaleNames_en_MT.properties @@ -1,5 +1,5 @@ # -# Copyright (c) 2005, 2007, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2005, 2012, Oracle and/or its affiliates. All rights reserved. # # diff --git a/jdk/src/share/classes/sun/util/resources/en/LocaleNames_en_PH.properties b/jdk/src/share/classes/sun/util/resources/en/LocaleNames_en_PH.properties index 6c0729d79f4..c5262907816 100644 --- a/jdk/src/share/classes/sun/util/resources/en/LocaleNames_en_PH.properties +++ b/jdk/src/share/classes/sun/util/resources/en/LocaleNames_en_PH.properties @@ -1,5 +1,5 @@ # -# Copyright (c) 2005, 2007, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2005, 2012, Oracle and/or its affiliates. All rights reserved. # # diff --git a/jdk/src/share/classes/sun/util/resources/en/LocaleNames_en_SG.properties b/jdk/src/share/classes/sun/util/resources/en/LocaleNames_en_SG.properties index 6c0729d79f4..c5262907816 100644 --- a/jdk/src/share/classes/sun/util/resources/en/LocaleNames_en_SG.properties +++ b/jdk/src/share/classes/sun/util/resources/en/LocaleNames_en_SG.properties @@ -1,5 +1,5 @@ # -# Copyright (c) 2005, 2007, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2005, 2012, Oracle and/or its affiliates. All rights reserved. # # diff --git a/jdk/src/share/classes/sun/util/resources/es/CalendarData_es.properties b/jdk/src/share/classes/sun/util/resources/es/CalendarData_es.properties index 3b4514714e2..6f4b1fa4695 100644 --- a/jdk/src/share/classes/sun/util/resources/es/CalendarData_es.properties +++ b/jdk/src/share/classes/sun/util/resources/es/CalendarData_es.properties @@ -1,5 +1,5 @@ # -# Copyright (c) 2005, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2005, 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 diff --git a/jdk/src/share/classes/sun/util/resources/es/CalendarData_es_ES.properties b/jdk/src/share/classes/sun/util/resources/es/CalendarData_es_ES.properties index 9fcc1ced96b..f1322141930 100644 --- a/jdk/src/share/classes/sun/util/resources/es/CalendarData_es_ES.properties +++ b/jdk/src/share/classes/sun/util/resources/es/CalendarData_es_ES.properties @@ -1,5 +1,5 @@ # -# Copyright (c) 2005, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2005, 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 diff --git a/jdk/src/share/classes/sun/util/resources/es/CalendarData_es_US.properties b/jdk/src/share/classes/sun/util/resources/es/CalendarData_es_US.properties index d1d5f2a1f48..c3d94c14df9 100644 --- a/jdk/src/share/classes/sun/util/resources/es/CalendarData_es_US.properties +++ b/jdk/src/share/classes/sun/util/resources/es/CalendarData_es_US.properties @@ -1,5 +1,5 @@ # -# Copyright (c) 2005, 2007, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2005, 2012, Oracle and/or its affiliates. All rights reserved. # # diff --git a/jdk/src/share/classes/sun/util/resources/es/CurrencyNames_es.properties b/jdk/src/share/classes/sun/util/resources/es/CurrencyNames_es.properties index 9ea7553e092..2fce98ea063 100644 --- a/jdk/src/share/classes/sun/util/resources/es/CurrencyNames_es.properties +++ b/jdk/src/share/classes/sun/util/resources/es/CurrencyNames_es.properties @@ -1,5 +1,5 @@ # -# Copyright (c) 2005, 2011, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2005, 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 diff --git a/jdk/src/share/classes/sun/util/resources/es/CurrencyNames_es_AR.properties b/jdk/src/share/classes/sun/util/resources/es/CurrencyNames_es_AR.properties index 7c5e137208a..87779384b52 100644 --- a/jdk/src/share/classes/sun/util/resources/es/CurrencyNames_es_AR.properties +++ b/jdk/src/share/classes/sun/util/resources/es/CurrencyNames_es_AR.properties @@ -1,5 +1,5 @@ # -# Copyright (c) 2005, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2005, 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 diff --git a/jdk/src/share/classes/sun/util/resources/es/CurrencyNames_es_BO.properties b/jdk/src/share/classes/sun/util/resources/es/CurrencyNames_es_BO.properties index 40b17b366e3..646947d045f 100644 --- a/jdk/src/share/classes/sun/util/resources/es/CurrencyNames_es_BO.properties +++ b/jdk/src/share/classes/sun/util/resources/es/CurrencyNames_es_BO.properties @@ -1,5 +1,5 @@ # -# Copyright (c) 2005, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2005, 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 diff --git a/jdk/src/share/classes/sun/util/resources/es/CurrencyNames_es_CL.properties b/jdk/src/share/classes/sun/util/resources/es/CurrencyNames_es_CL.properties index 3ceace685bc..4d3fd311690 100644 --- a/jdk/src/share/classes/sun/util/resources/es/CurrencyNames_es_CL.properties +++ b/jdk/src/share/classes/sun/util/resources/es/CurrencyNames_es_CL.properties @@ -1,5 +1,5 @@ # -# Copyright (c) 2005, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2005, 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 diff --git a/jdk/src/share/classes/sun/util/resources/es/CurrencyNames_es_CO.properties b/jdk/src/share/classes/sun/util/resources/es/CurrencyNames_es_CO.properties index c684c547928..4c340c31cce 100644 --- a/jdk/src/share/classes/sun/util/resources/es/CurrencyNames_es_CO.properties +++ b/jdk/src/share/classes/sun/util/resources/es/CurrencyNames_es_CO.properties @@ -1,5 +1,5 @@ # -# Copyright (c) 2005, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2005, 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 diff --git a/jdk/src/share/classes/sun/util/resources/es/CurrencyNames_es_CR.properties b/jdk/src/share/classes/sun/util/resources/es/CurrencyNames_es_CR.properties index 4330f9e1e1f..a94e3a4af21 100644 --- a/jdk/src/share/classes/sun/util/resources/es/CurrencyNames_es_CR.properties +++ b/jdk/src/share/classes/sun/util/resources/es/CurrencyNames_es_CR.properties @@ -1,5 +1,5 @@ # -# Copyright (c) 2005, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2005, 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 diff --git a/jdk/src/share/classes/sun/util/resources/es/CurrencyNames_es_CU.properties b/jdk/src/share/classes/sun/util/resources/es/CurrencyNames_es_CU.properties index 23ebbefdf11..69a366adb65 100644 --- a/jdk/src/share/classes/sun/util/resources/es/CurrencyNames_es_CU.properties +++ b/jdk/src/share/classes/sun/util/resources/es/CurrencyNames_es_CU.properties @@ -1,5 +1,5 @@ # -# Copyright (c) 2011, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2011, 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 diff --git a/jdk/src/share/classes/sun/util/resources/es/CurrencyNames_es_DO.properties b/jdk/src/share/classes/sun/util/resources/es/CurrencyNames_es_DO.properties index f746a08da90..9601201a8c4 100644 --- a/jdk/src/share/classes/sun/util/resources/es/CurrencyNames_es_DO.properties +++ b/jdk/src/share/classes/sun/util/resources/es/CurrencyNames_es_DO.properties @@ -1,5 +1,5 @@ # -# Copyright (c) 2005, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2005, 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 diff --git a/jdk/src/share/classes/sun/util/resources/es/CurrencyNames_es_EC.properties b/jdk/src/share/classes/sun/util/resources/es/CurrencyNames_es_EC.properties index f8fef79c75d..995eaea2eff 100644 --- a/jdk/src/share/classes/sun/util/resources/es/CurrencyNames_es_EC.properties +++ b/jdk/src/share/classes/sun/util/resources/es/CurrencyNames_es_EC.properties @@ -1,5 +1,5 @@ # -# Copyright (c) 2005, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2005, 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 diff --git a/jdk/src/share/classes/sun/util/resources/es/CurrencyNames_es_ES.properties b/jdk/src/share/classes/sun/util/resources/es/CurrencyNames_es_ES.properties index 7dd49e6d400..e7f60a2428e 100644 --- a/jdk/src/share/classes/sun/util/resources/es/CurrencyNames_es_ES.properties +++ b/jdk/src/share/classes/sun/util/resources/es/CurrencyNames_es_ES.properties @@ -1,5 +1,5 @@ # -# Copyright (c) 2005, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2005, 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 diff --git a/jdk/src/share/classes/sun/util/resources/es/CurrencyNames_es_GT.properties b/jdk/src/share/classes/sun/util/resources/es/CurrencyNames_es_GT.properties index 2cc3253851f..c8a12cb7e55 100644 --- a/jdk/src/share/classes/sun/util/resources/es/CurrencyNames_es_GT.properties +++ b/jdk/src/share/classes/sun/util/resources/es/CurrencyNames_es_GT.properties @@ -1,5 +1,5 @@ # -# Copyright (c) 2005, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2005, 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 diff --git a/jdk/src/share/classes/sun/util/resources/es/CurrencyNames_es_HN.properties b/jdk/src/share/classes/sun/util/resources/es/CurrencyNames_es_HN.properties index 33269e00f85..0911cb6093c 100644 --- a/jdk/src/share/classes/sun/util/resources/es/CurrencyNames_es_HN.properties +++ b/jdk/src/share/classes/sun/util/resources/es/CurrencyNames_es_HN.properties @@ -1,5 +1,5 @@ # -# Copyright (c) 2005, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2005, 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 diff --git a/jdk/src/share/classes/sun/util/resources/es/CurrencyNames_es_MX.properties b/jdk/src/share/classes/sun/util/resources/es/CurrencyNames_es_MX.properties index 9b15a12a5bc..6a2e8198d68 100644 --- a/jdk/src/share/classes/sun/util/resources/es/CurrencyNames_es_MX.properties +++ b/jdk/src/share/classes/sun/util/resources/es/CurrencyNames_es_MX.properties @@ -1,5 +1,5 @@ # -# Copyright (c) 2005, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2005, 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 diff --git a/jdk/src/share/classes/sun/util/resources/es/CurrencyNames_es_NI.properties b/jdk/src/share/classes/sun/util/resources/es/CurrencyNames_es_NI.properties index 59486dcc826..da523f29c83 100644 --- a/jdk/src/share/classes/sun/util/resources/es/CurrencyNames_es_NI.properties +++ b/jdk/src/share/classes/sun/util/resources/es/CurrencyNames_es_NI.properties @@ -1,5 +1,5 @@ # -# Copyright (c) 2005, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2005, 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 diff --git a/jdk/src/share/classes/sun/util/resources/es/CurrencyNames_es_PA.properties b/jdk/src/share/classes/sun/util/resources/es/CurrencyNames_es_PA.properties index 1912c1ac51b..8aa889faa3f 100644 --- a/jdk/src/share/classes/sun/util/resources/es/CurrencyNames_es_PA.properties +++ b/jdk/src/share/classes/sun/util/resources/es/CurrencyNames_es_PA.properties @@ -1,5 +1,5 @@ # -# Copyright (c) 2005, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2005, 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 diff --git a/jdk/src/share/classes/sun/util/resources/es/CurrencyNames_es_PR.properties b/jdk/src/share/classes/sun/util/resources/es/CurrencyNames_es_PR.properties index f8fef79c75d..995eaea2eff 100644 --- a/jdk/src/share/classes/sun/util/resources/es/CurrencyNames_es_PR.properties +++ b/jdk/src/share/classes/sun/util/resources/es/CurrencyNames_es_PR.properties @@ -1,5 +1,5 @@ # -# Copyright (c) 2005, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2005, 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 diff --git a/jdk/src/share/classes/sun/util/resources/es/CurrencyNames_es_PY.properties b/jdk/src/share/classes/sun/util/resources/es/CurrencyNames_es_PY.properties index c820d53fa89..9346f48016c 100644 --- a/jdk/src/share/classes/sun/util/resources/es/CurrencyNames_es_PY.properties +++ b/jdk/src/share/classes/sun/util/resources/es/CurrencyNames_es_PY.properties @@ -1,5 +1,5 @@ # -# Copyright (c) 2005, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2005, 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 diff --git a/jdk/src/share/classes/sun/util/resources/es/CurrencyNames_es_SV.properties b/jdk/src/share/classes/sun/util/resources/es/CurrencyNames_es_SV.properties index 04ac7f71c53..31e5d2930c6 100644 --- a/jdk/src/share/classes/sun/util/resources/es/CurrencyNames_es_SV.properties +++ b/jdk/src/share/classes/sun/util/resources/es/CurrencyNames_es_SV.properties @@ -1,5 +1,5 @@ # -# Copyright (c) 2005, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2005, 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 diff --git a/jdk/src/share/classes/sun/util/resources/es/CurrencyNames_es_US.properties b/jdk/src/share/classes/sun/util/resources/es/CurrencyNames_es_US.properties index a0a3c31a4ed..1f381ba4406 100644 --- a/jdk/src/share/classes/sun/util/resources/es/CurrencyNames_es_US.properties +++ b/jdk/src/share/classes/sun/util/resources/es/CurrencyNames_es_US.properties @@ -1,5 +1,5 @@ # -# Copyright (c) 2005, 2007, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2005, 2012, Oracle and/or its affiliates. All rights reserved. # # diff --git a/jdk/src/share/classes/sun/util/resources/es/CurrencyNames_es_UY.properties b/jdk/src/share/classes/sun/util/resources/es/CurrencyNames_es_UY.properties index ea25ef24e64..2937637dd0a 100644 --- a/jdk/src/share/classes/sun/util/resources/es/CurrencyNames_es_UY.properties +++ b/jdk/src/share/classes/sun/util/resources/es/CurrencyNames_es_UY.properties @@ -1,5 +1,5 @@ # -# Copyright (c) 2005, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2005, 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 diff --git a/jdk/src/share/classes/sun/util/resources/es/CurrencyNames_es_VE.properties b/jdk/src/share/classes/sun/util/resources/es/CurrencyNames_es_VE.properties index dd5b78298ab..41c45105be5 100644 --- a/jdk/src/share/classes/sun/util/resources/es/CurrencyNames_es_VE.properties +++ b/jdk/src/share/classes/sun/util/resources/es/CurrencyNames_es_VE.properties @@ -1,5 +1,5 @@ # -# Copyright (c) 2005, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2005, 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 diff --git a/jdk/src/share/classes/sun/util/resources/es/LocaleNames_es.properties b/jdk/src/share/classes/sun/util/resources/es/LocaleNames_es.properties index ad64421e08c..bb8138828da 100644 --- a/jdk/src/share/classes/sun/util/resources/es/LocaleNames_es.properties +++ b/jdk/src/share/classes/sun/util/resources/es/LocaleNames_es.properties @@ -1,4 +1,4 @@ -# Copyright (c) 2005, 2011, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2005, 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 diff --git a/jdk/src/share/classes/sun/util/resources/es/LocaleNames_es_US.properties b/jdk/src/share/classes/sun/util/resources/es/LocaleNames_es_US.properties index 0c59370f991..576f19a06a0 100644 --- a/jdk/src/share/classes/sun/util/resources/es/LocaleNames_es_US.properties +++ b/jdk/src/share/classes/sun/util/resources/es/LocaleNames_es_US.properties @@ -1,5 +1,5 @@ # -# Copyright (c) 2005, 2007, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2005, 2012, Oracle and/or its affiliates. All rights reserved. # # diff --git a/jdk/src/share/classes/sun/util/resources/et/CalendarData_et.properties b/jdk/src/share/classes/sun/util/resources/et/CalendarData_et.properties index 9fcc1ced96b..f1322141930 100644 --- a/jdk/src/share/classes/sun/util/resources/et/CalendarData_et.properties +++ b/jdk/src/share/classes/sun/util/resources/et/CalendarData_et.properties @@ -1,5 +1,5 @@ # -# Copyright (c) 2005, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2005, 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 diff --git a/jdk/src/share/classes/sun/util/resources/et/CurrencyNames_et_EE.properties b/jdk/src/share/classes/sun/util/resources/et/CurrencyNames_et_EE.properties index 333360ec15c..cdc42148ad6 100644 --- a/jdk/src/share/classes/sun/util/resources/et/CurrencyNames_et_EE.properties +++ b/jdk/src/share/classes/sun/util/resources/et/CurrencyNames_et_EE.properties @@ -1,5 +1,5 @@ # -# Copyright (c) 2005, 2011, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2005, 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 diff --git a/jdk/src/share/classes/sun/util/resources/et/LocaleNames_et.properties b/jdk/src/share/classes/sun/util/resources/et/LocaleNames_et.properties index f521684c83a..7228766d42c 100644 --- a/jdk/src/share/classes/sun/util/resources/et/LocaleNames_et.properties +++ b/jdk/src/share/classes/sun/util/resources/et/LocaleNames_et.properties @@ -1,4 +1,4 @@ -# Copyright (c) 2005, 2007, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2005, 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 diff --git a/jdk/src/share/classes/sun/util/resources/fi/CalendarData_fi.properties b/jdk/src/share/classes/sun/util/resources/fi/CalendarData_fi.properties index 9fcc1ced96b..f1322141930 100644 --- a/jdk/src/share/classes/sun/util/resources/fi/CalendarData_fi.properties +++ b/jdk/src/share/classes/sun/util/resources/fi/CalendarData_fi.properties @@ -1,5 +1,5 @@ # -# Copyright (c) 2005, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2005, 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 diff --git a/jdk/src/share/classes/sun/util/resources/fi/CurrencyNames_fi_FI.properties b/jdk/src/share/classes/sun/util/resources/fi/CurrencyNames_fi_FI.properties index 6e37ff0ff12..160e4d3face 100644 --- a/jdk/src/share/classes/sun/util/resources/fi/CurrencyNames_fi_FI.properties +++ b/jdk/src/share/classes/sun/util/resources/fi/CurrencyNames_fi_FI.properties @@ -1,5 +1,5 @@ # -# Copyright (c) 2005, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2005, 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 diff --git a/jdk/src/share/classes/sun/util/resources/fi/LocaleNames_fi.properties b/jdk/src/share/classes/sun/util/resources/fi/LocaleNames_fi.properties index 10ed75d3e52..bc118ddcd7c 100644 --- a/jdk/src/share/classes/sun/util/resources/fi/LocaleNames_fi.properties +++ b/jdk/src/share/classes/sun/util/resources/fi/LocaleNames_fi.properties @@ -1,4 +1,4 @@ -# Copyright (c) 2005, 2007, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2005, 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 diff --git a/jdk/src/share/classes/sun/util/resources/fr/CalendarData_fr.properties b/jdk/src/share/classes/sun/util/resources/fr/CalendarData_fr.properties index 9fcc1ced96b..f1322141930 100644 --- a/jdk/src/share/classes/sun/util/resources/fr/CalendarData_fr.properties +++ b/jdk/src/share/classes/sun/util/resources/fr/CalendarData_fr.properties @@ -1,5 +1,5 @@ # -# Copyright (c) 2005, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2005, 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 diff --git a/jdk/src/share/classes/sun/util/resources/fr/CalendarData_fr_CA.properties b/jdk/src/share/classes/sun/util/resources/fr/CalendarData_fr_CA.properties index 8494e986fdc..6d7df92f9e5 100644 --- a/jdk/src/share/classes/sun/util/resources/fr/CalendarData_fr_CA.properties +++ b/jdk/src/share/classes/sun/util/resources/fr/CalendarData_fr_CA.properties @@ -1,5 +1,5 @@ # -# Copyright (c) 2005, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2005, 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 diff --git a/jdk/src/share/classes/sun/util/resources/fr/CurrencyNames_fr.properties b/jdk/src/share/classes/sun/util/resources/fr/CurrencyNames_fr.properties index ecba10c9825..a2d23a8413f 100644 --- a/jdk/src/share/classes/sun/util/resources/fr/CurrencyNames_fr.properties +++ b/jdk/src/share/classes/sun/util/resources/fr/CurrencyNames_fr.properties @@ -1,5 +1,5 @@ # -# Copyright (c) 2005, 2011, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2005, 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 diff --git a/jdk/src/share/classes/sun/util/resources/fr/CurrencyNames_fr_BE.properties b/jdk/src/share/classes/sun/util/resources/fr/CurrencyNames_fr_BE.properties index dcb952d2f0b..b350ba62ac8 100644 --- a/jdk/src/share/classes/sun/util/resources/fr/CurrencyNames_fr_BE.properties +++ b/jdk/src/share/classes/sun/util/resources/fr/CurrencyNames_fr_BE.properties @@ -1,5 +1,5 @@ # -# Copyright (c) 2005, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2005, 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 diff --git a/jdk/src/share/classes/sun/util/resources/fr/CurrencyNames_fr_CA.properties b/jdk/src/share/classes/sun/util/resources/fr/CurrencyNames_fr_CA.properties index 33f98dc8a79..0ee4b263302 100644 --- a/jdk/src/share/classes/sun/util/resources/fr/CurrencyNames_fr_CA.properties +++ b/jdk/src/share/classes/sun/util/resources/fr/CurrencyNames_fr_CA.properties @@ -1,5 +1,5 @@ # -# Copyright (c) 2005, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2005, 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 diff --git a/jdk/src/share/classes/sun/util/resources/fr/CurrencyNames_fr_CH.properties b/jdk/src/share/classes/sun/util/resources/fr/CurrencyNames_fr_CH.properties index 04756670b31..8ea815fb11a 100644 --- a/jdk/src/share/classes/sun/util/resources/fr/CurrencyNames_fr_CH.properties +++ b/jdk/src/share/classes/sun/util/resources/fr/CurrencyNames_fr_CH.properties @@ -1,5 +1,5 @@ # -# Copyright (c) 2005, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2005, 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 diff --git a/jdk/src/share/classes/sun/util/resources/fr/CurrencyNames_fr_FR.properties b/jdk/src/share/classes/sun/util/resources/fr/CurrencyNames_fr_FR.properties index 87f0d574163..30c3b542ae2 100644 --- a/jdk/src/share/classes/sun/util/resources/fr/CurrencyNames_fr_FR.properties +++ b/jdk/src/share/classes/sun/util/resources/fr/CurrencyNames_fr_FR.properties @@ -1,5 +1,5 @@ # -# Copyright (c) 2005, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2005, 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 diff --git a/jdk/src/share/classes/sun/util/resources/fr/CurrencyNames_fr_LU.properties b/jdk/src/share/classes/sun/util/resources/fr/CurrencyNames_fr_LU.properties index 6c757a1ddf2..e7fc898ede4 100644 --- a/jdk/src/share/classes/sun/util/resources/fr/CurrencyNames_fr_LU.properties +++ b/jdk/src/share/classes/sun/util/resources/fr/CurrencyNames_fr_LU.properties @@ -1,5 +1,5 @@ # -# Copyright (c) 2005, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2005, 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 diff --git a/jdk/src/share/classes/sun/util/resources/fr/LocaleNames_fr.properties b/jdk/src/share/classes/sun/util/resources/fr/LocaleNames_fr.properties index de6d2998b81..a1e8c31f365 100644 --- a/jdk/src/share/classes/sun/util/resources/fr/LocaleNames_fr.properties +++ b/jdk/src/share/classes/sun/util/resources/fr/LocaleNames_fr.properties @@ -1,4 +1,4 @@ -# Copyright (c) 2005, 2011, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2005, 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 diff --git a/jdk/src/share/classes/sun/util/resources/ga/CurrencyNames_ga_IE.properties b/jdk/src/share/classes/sun/util/resources/ga/CurrencyNames_ga_IE.properties index 894bc6bd359..d4bda89dbb6 100644 --- a/jdk/src/share/classes/sun/util/resources/ga/CurrencyNames_ga_IE.properties +++ b/jdk/src/share/classes/sun/util/resources/ga/CurrencyNames_ga_IE.properties @@ -1,5 +1,5 @@ # -# Copyright (c) 2005, 2007, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2005, 2012, Oracle and/or its affiliates. All rights reserved. # # diff --git a/jdk/src/share/classes/sun/util/resources/ga/LocaleNames_ga.properties b/jdk/src/share/classes/sun/util/resources/ga/LocaleNames_ga.properties index b64080c2536..90b4ca53ab6 100644 --- a/jdk/src/share/classes/sun/util/resources/ga/LocaleNames_ga.properties +++ b/jdk/src/share/classes/sun/util/resources/ga/LocaleNames_ga.properties @@ -1,5 +1,5 @@ # -# Copyright (c) 2005, 2007, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2005, 2012, Oracle and/or its affiliates. All rights reserved. # # diff --git a/jdk/src/share/classes/sun/util/resources/hi/CalendarData_hi.properties b/jdk/src/share/classes/sun/util/resources/hi/CalendarData_hi.properties index 36167c9c604..ca2ae0f185f 100644 --- a/jdk/src/share/classes/sun/util/resources/hi/CalendarData_hi.properties +++ b/jdk/src/share/classes/sun/util/resources/hi/CalendarData_hi.properties @@ -1,5 +1,5 @@ # -# Copyright (c) 2005, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2005, 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 diff --git a/jdk/src/share/classes/sun/util/resources/hi/CurrencyNames_hi_IN.properties b/jdk/src/share/classes/sun/util/resources/hi/CurrencyNames_hi_IN.properties index 5863f04a304..a638ef07ccb 100644 --- a/jdk/src/share/classes/sun/util/resources/hi/CurrencyNames_hi_IN.properties +++ b/jdk/src/share/classes/sun/util/resources/hi/CurrencyNames_hi_IN.properties @@ -1,5 +1,5 @@ # -# Copyright (c) 2005, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2005, 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 diff --git a/jdk/src/share/classes/sun/util/resources/hi/LocaleNames_hi.properties b/jdk/src/share/classes/sun/util/resources/hi/LocaleNames_hi.properties index 948eb04db0e..223fa99fe3b 100644 --- a/jdk/src/share/classes/sun/util/resources/hi/LocaleNames_hi.properties +++ b/jdk/src/share/classes/sun/util/resources/hi/LocaleNames_hi.properties @@ -1,4 +1,4 @@ -# Copyright (c) 2005, 2007, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2005, 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 diff --git a/jdk/src/share/classes/sun/util/resources/hr/CalendarData_hr.properties b/jdk/src/share/classes/sun/util/resources/hr/CalendarData_hr.properties index 035b1649949..4040553fafd 100644 --- a/jdk/src/share/classes/sun/util/resources/hr/CalendarData_hr.properties +++ b/jdk/src/share/classes/sun/util/resources/hr/CalendarData_hr.properties @@ -1,5 +1,5 @@ # -# Copyright (c) 2005, 2006, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2005, 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 diff --git a/jdk/src/share/classes/sun/util/resources/hr/CurrencyNames_hr_HR.properties b/jdk/src/share/classes/sun/util/resources/hr/CurrencyNames_hr_HR.properties index 22d1c415d5f..70f210e2da6 100644 --- a/jdk/src/share/classes/sun/util/resources/hr/CurrencyNames_hr_HR.properties +++ b/jdk/src/share/classes/sun/util/resources/hr/CurrencyNames_hr_HR.properties @@ -1,5 +1,5 @@ # -# Copyright (c) 2005, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2005, 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 diff --git a/jdk/src/share/classes/sun/util/resources/hr/LocaleNames_hr.properties b/jdk/src/share/classes/sun/util/resources/hr/LocaleNames_hr.properties index efef9f394fc..5c7064d75a4 100644 --- a/jdk/src/share/classes/sun/util/resources/hr/LocaleNames_hr.properties +++ b/jdk/src/share/classes/sun/util/resources/hr/LocaleNames_hr.properties @@ -1,4 +1,4 @@ -# Copyright (c) 2005, 2007, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2005, 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 diff --git a/jdk/src/share/classes/sun/util/resources/hu/CalendarData_hu.properties b/jdk/src/share/classes/sun/util/resources/hu/CalendarData_hu.properties index 48312915f68..f1322141930 100644 --- a/jdk/src/share/classes/sun/util/resources/hu/CalendarData_hu.properties +++ b/jdk/src/share/classes/sun/util/resources/hu/CalendarData_hu.properties @@ -1,5 +1,5 @@ # -# Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2005, 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 diff --git a/jdk/src/share/classes/sun/util/resources/hu/CurrencyNames_hu_HU.properties b/jdk/src/share/classes/sun/util/resources/hu/CurrencyNames_hu_HU.properties index 673f8113af7..7b9fbd6be5f 100644 --- a/jdk/src/share/classes/sun/util/resources/hu/CurrencyNames_hu_HU.properties +++ b/jdk/src/share/classes/sun/util/resources/hu/CurrencyNames_hu_HU.properties @@ -1,5 +1,5 @@ # -# Copyright (c) 2005, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2005, 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 diff --git a/jdk/src/share/classes/sun/util/resources/hu/LocaleNames_hu.properties b/jdk/src/share/classes/sun/util/resources/hu/LocaleNames_hu.properties index d9e79920431..3853f337f28 100644 --- a/jdk/src/share/classes/sun/util/resources/hu/LocaleNames_hu.properties +++ b/jdk/src/share/classes/sun/util/resources/hu/LocaleNames_hu.properties @@ -1,4 +1,4 @@ -# Copyright (c) 2005, 2007, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2005, 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 diff --git a/jdk/src/share/classes/sun/util/resources/in/CalendarData_in_ID.properties b/jdk/src/share/classes/sun/util/resources/in/CalendarData_in_ID.properties index c618ce3b96f..abcd01cb35a 100644 --- a/jdk/src/share/classes/sun/util/resources/in/CalendarData_in_ID.properties +++ b/jdk/src/share/classes/sun/util/resources/in/CalendarData_in_ID.properties @@ -1,5 +1,5 @@ # -# Copyright (c) 2006, 2007, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2006, 2012, Oracle and/or its affiliates. All rights reserved. # # diff --git a/jdk/src/share/classes/sun/util/resources/in/CurrencyNames_in_ID.properties b/jdk/src/share/classes/sun/util/resources/in/CurrencyNames_in_ID.properties index 193075b9947..f76e1a2933e 100644 --- a/jdk/src/share/classes/sun/util/resources/in/CurrencyNames_in_ID.properties +++ b/jdk/src/share/classes/sun/util/resources/in/CurrencyNames_in_ID.properties @@ -1,5 +1,5 @@ # -# Copyright (c) 2005, 2007, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2005, 2012, Oracle and/or its affiliates. All rights reserved. # # diff --git a/jdk/src/share/classes/sun/util/resources/in/LocaleNames_in.properties b/jdk/src/share/classes/sun/util/resources/in/LocaleNames_in.properties index 61c259a8da4..71c7e30f2b4 100644 --- a/jdk/src/share/classes/sun/util/resources/in/LocaleNames_in.properties +++ b/jdk/src/share/classes/sun/util/resources/in/LocaleNames_in.properties @@ -1,5 +1,5 @@ # -# Copyright (c) 2005, 2007, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2005, 2012, Oracle and/or its affiliates. All rights reserved. # # diff --git a/jdk/src/share/classes/sun/util/resources/is/CalendarData_is.properties b/jdk/src/share/classes/sun/util/resources/is/CalendarData_is.properties index 9fcc1ced96b..f1322141930 100644 --- a/jdk/src/share/classes/sun/util/resources/is/CalendarData_is.properties +++ b/jdk/src/share/classes/sun/util/resources/is/CalendarData_is.properties @@ -1,5 +1,5 @@ # -# Copyright (c) 2005, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2005, 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 diff --git a/jdk/src/share/classes/sun/util/resources/is/CurrencyNames_is_IS.properties b/jdk/src/share/classes/sun/util/resources/is/CurrencyNames_is_IS.properties index ad9389ff29e..c2051899d93 100644 --- a/jdk/src/share/classes/sun/util/resources/is/CurrencyNames_is_IS.properties +++ b/jdk/src/share/classes/sun/util/resources/is/CurrencyNames_is_IS.properties @@ -1,5 +1,5 @@ # -# Copyright (c) 2005, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2005, 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 diff --git a/jdk/src/share/classes/sun/util/resources/is/LocaleNames_is.properties b/jdk/src/share/classes/sun/util/resources/is/LocaleNames_is.properties index b8c028c6a78..64645485d01 100644 --- a/jdk/src/share/classes/sun/util/resources/is/LocaleNames_is.properties +++ b/jdk/src/share/classes/sun/util/resources/is/LocaleNames_is.properties @@ -1,4 +1,4 @@ -# Copyright (c) 2005, 2007, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2005, 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 diff --git a/jdk/src/share/classes/sun/util/resources/it/CalendarData_it.properties b/jdk/src/share/classes/sun/util/resources/it/CalendarData_it.properties index 9fcc1ced96b..f1322141930 100644 --- a/jdk/src/share/classes/sun/util/resources/it/CalendarData_it.properties +++ b/jdk/src/share/classes/sun/util/resources/it/CalendarData_it.properties @@ -1,5 +1,5 @@ # -# Copyright (c) 2005, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2005, 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 diff --git a/jdk/src/share/classes/sun/util/resources/it/CurrencyNames_it.properties b/jdk/src/share/classes/sun/util/resources/it/CurrencyNames_it.properties index 9e3ad2a2ff2..a069e982361 100644 --- a/jdk/src/share/classes/sun/util/resources/it/CurrencyNames_it.properties +++ b/jdk/src/share/classes/sun/util/resources/it/CurrencyNames_it.properties @@ -1,5 +1,5 @@ # -# Copyright (c) 2005, 2011, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2005, 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 diff --git a/jdk/src/share/classes/sun/util/resources/it/CurrencyNames_it_CH.properties b/jdk/src/share/classes/sun/util/resources/it/CurrencyNames_it_CH.properties index 04756670b31..8ea815fb11a 100644 --- a/jdk/src/share/classes/sun/util/resources/it/CurrencyNames_it_CH.properties +++ b/jdk/src/share/classes/sun/util/resources/it/CurrencyNames_it_CH.properties @@ -1,5 +1,5 @@ # -# Copyright (c) 2005, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2005, 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 diff --git a/jdk/src/share/classes/sun/util/resources/it/CurrencyNames_it_IT.properties b/jdk/src/share/classes/sun/util/resources/it/CurrencyNames_it_IT.properties index db66ef494d2..c5671e853ff 100644 --- a/jdk/src/share/classes/sun/util/resources/it/CurrencyNames_it_IT.properties +++ b/jdk/src/share/classes/sun/util/resources/it/CurrencyNames_it_IT.properties @@ -1,5 +1,5 @@ # -# Copyright (c) 2005, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2005, 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 diff --git a/jdk/src/share/classes/sun/util/resources/it/LocaleNames_it.properties b/jdk/src/share/classes/sun/util/resources/it/LocaleNames_it.properties index 6cbf7cf688c..dad9f49f49a 100644 --- a/jdk/src/share/classes/sun/util/resources/it/LocaleNames_it.properties +++ b/jdk/src/share/classes/sun/util/resources/it/LocaleNames_it.properties @@ -1,4 +1,4 @@ -# Copyright (c) 2005, 2011, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2005, 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 diff --git a/jdk/src/share/classes/sun/util/resources/iw/CalendarData_iw.properties b/jdk/src/share/classes/sun/util/resources/iw/CalendarData_iw.properties index cf18123869a..ca2ae0f185f 100644 --- a/jdk/src/share/classes/sun/util/resources/iw/CalendarData_iw.properties +++ b/jdk/src/share/classes/sun/util/resources/iw/CalendarData_iw.properties @@ -1,5 +1,5 @@ # -# Copyright (c) 2005, 2006, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2005, 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 diff --git a/jdk/src/share/classes/sun/util/resources/iw/CurrencyNames_iw_IL.properties b/jdk/src/share/classes/sun/util/resources/iw/CurrencyNames_iw_IL.properties index 939d9a6322b..cfbacb78b09 100644 --- a/jdk/src/share/classes/sun/util/resources/iw/CurrencyNames_iw_IL.properties +++ b/jdk/src/share/classes/sun/util/resources/iw/CurrencyNames_iw_IL.properties @@ -1,5 +1,5 @@ # -# Copyright (c) 2005, 2006, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2005, 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 diff --git a/jdk/src/share/classes/sun/util/resources/iw/LocaleNames_iw.properties b/jdk/src/share/classes/sun/util/resources/iw/LocaleNames_iw.properties index 062708dde86..a52de447af2 100644 --- a/jdk/src/share/classes/sun/util/resources/iw/LocaleNames_iw.properties +++ b/jdk/src/share/classes/sun/util/resources/iw/LocaleNames_iw.properties @@ -1,4 +1,4 @@ -# Copyright (c) 2005, 2007, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2005, 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 diff --git a/jdk/src/share/classes/sun/util/resources/ja/CalendarData_ja.properties b/jdk/src/share/classes/sun/util/resources/ja/CalendarData_ja.properties index 36167c9c604..ca2ae0f185f 100644 --- a/jdk/src/share/classes/sun/util/resources/ja/CalendarData_ja.properties +++ b/jdk/src/share/classes/sun/util/resources/ja/CalendarData_ja.properties @@ -1,5 +1,5 @@ # -# Copyright (c) 2005, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2005, 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 diff --git a/jdk/src/share/classes/sun/util/resources/ja/CurrencyNames_ja.properties b/jdk/src/share/classes/sun/util/resources/ja/CurrencyNames_ja.properties index afbc0c738df..96f527d3e49 100644 --- a/jdk/src/share/classes/sun/util/resources/ja/CurrencyNames_ja.properties +++ b/jdk/src/share/classes/sun/util/resources/ja/CurrencyNames_ja.properties @@ -1,5 +1,5 @@ # -# Copyright (c) 2005, 2011, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2005, 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 diff --git a/jdk/src/share/classes/sun/util/resources/ja/CurrencyNames_ja_JP.properties b/jdk/src/share/classes/sun/util/resources/ja/CurrencyNames_ja_JP.properties index 58bfca69549..f43ef088441 100644 --- a/jdk/src/share/classes/sun/util/resources/ja/CurrencyNames_ja_JP.properties +++ b/jdk/src/share/classes/sun/util/resources/ja/CurrencyNames_ja_JP.properties @@ -1,5 +1,5 @@ # -# Copyright (c) 2005, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2005, 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 diff --git a/jdk/src/share/classes/sun/util/resources/ja/LocaleNames_ja.properties b/jdk/src/share/classes/sun/util/resources/ja/LocaleNames_ja.properties index b52d16ff518..b2e07f9bdb1 100644 --- a/jdk/src/share/classes/sun/util/resources/ja/LocaleNames_ja.properties +++ b/jdk/src/share/classes/sun/util/resources/ja/LocaleNames_ja.properties @@ -1,4 +1,4 @@ -# Copyright (c) 2005, 2011, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2005, 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 diff --git a/jdk/src/share/classes/sun/util/resources/ko/CalendarData_ko.properties b/jdk/src/share/classes/sun/util/resources/ko/CalendarData_ko.properties index 36167c9c604..ca2ae0f185f 100644 --- a/jdk/src/share/classes/sun/util/resources/ko/CalendarData_ko.properties +++ b/jdk/src/share/classes/sun/util/resources/ko/CalendarData_ko.properties @@ -1,5 +1,5 @@ # -# Copyright (c) 2005, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2005, 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 diff --git a/jdk/src/share/classes/sun/util/resources/ko/CurrencyNames_ko.properties b/jdk/src/share/classes/sun/util/resources/ko/CurrencyNames_ko.properties index 959bf7cee07..50ce6b84209 100644 --- a/jdk/src/share/classes/sun/util/resources/ko/CurrencyNames_ko.properties +++ b/jdk/src/share/classes/sun/util/resources/ko/CurrencyNames_ko.properties @@ -1,5 +1,5 @@ # -# Copyright (c) 2005, 2011, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2005, 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 diff --git a/jdk/src/share/classes/sun/util/resources/ko/CurrencyNames_ko_KR.properties b/jdk/src/share/classes/sun/util/resources/ko/CurrencyNames_ko_KR.properties index c9320ee5031..3791aa82d3e 100644 --- a/jdk/src/share/classes/sun/util/resources/ko/CurrencyNames_ko_KR.properties +++ b/jdk/src/share/classes/sun/util/resources/ko/CurrencyNames_ko_KR.properties @@ -1,5 +1,5 @@ # -# Copyright (c) 2005, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2005, 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 diff --git a/jdk/src/share/classes/sun/util/resources/ko/LocaleNames_ko.properties b/jdk/src/share/classes/sun/util/resources/ko/LocaleNames_ko.properties index 67eb5acc7f2..861b9fd4ef5 100644 --- a/jdk/src/share/classes/sun/util/resources/ko/LocaleNames_ko.properties +++ b/jdk/src/share/classes/sun/util/resources/ko/LocaleNames_ko.properties @@ -1,4 +1,4 @@ -# Copyright (c) 2005, 2011, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2005, 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 diff --git a/jdk/src/share/classes/sun/util/resources/lt/CalendarData_lt.properties b/jdk/src/share/classes/sun/util/resources/lt/CalendarData_lt.properties index 9fcc1ced96b..f1322141930 100644 --- a/jdk/src/share/classes/sun/util/resources/lt/CalendarData_lt.properties +++ b/jdk/src/share/classes/sun/util/resources/lt/CalendarData_lt.properties @@ -1,5 +1,5 @@ # -# Copyright (c) 2005, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2005, 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 diff --git a/jdk/src/share/classes/sun/util/resources/lt/CurrencyNames_lt_LT.properties b/jdk/src/share/classes/sun/util/resources/lt/CurrencyNames_lt_LT.properties index 7e784ddbbac..f7275219e28 100644 --- a/jdk/src/share/classes/sun/util/resources/lt/CurrencyNames_lt_LT.properties +++ b/jdk/src/share/classes/sun/util/resources/lt/CurrencyNames_lt_LT.properties @@ -1,5 +1,5 @@ # -# Copyright (c) 2005, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2005, 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 diff --git a/jdk/src/share/classes/sun/util/resources/lt/LocaleNames_lt.properties b/jdk/src/share/classes/sun/util/resources/lt/LocaleNames_lt.properties index 1b42fc6b8ea..5cf5876bc27 100644 --- a/jdk/src/share/classes/sun/util/resources/lt/LocaleNames_lt.properties +++ b/jdk/src/share/classes/sun/util/resources/lt/LocaleNames_lt.properties @@ -1,4 +1,4 @@ -# Copyright (c) 2005, 2007, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2005, 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 diff --git a/jdk/src/share/classes/sun/util/resources/lv/CalendarData_lv.properties b/jdk/src/share/classes/sun/util/resources/lv/CalendarData_lv.properties index 126532a799c..9849f42b84a 100644 --- a/jdk/src/share/classes/sun/util/resources/lv/CalendarData_lv.properties +++ b/jdk/src/share/classes/sun/util/resources/lv/CalendarData_lv.properties @@ -1,5 +1,5 @@ # -# Copyright (c) 2005, 2011, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2005, 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 diff --git a/jdk/src/share/classes/sun/util/resources/lv/CurrencyNames_lv_LV.properties b/jdk/src/share/classes/sun/util/resources/lv/CurrencyNames_lv_LV.properties index d8ed95cdc0d..2a07e7dc6bb 100644 --- a/jdk/src/share/classes/sun/util/resources/lv/CurrencyNames_lv_LV.properties +++ b/jdk/src/share/classes/sun/util/resources/lv/CurrencyNames_lv_LV.properties @@ -1,5 +1,5 @@ # -# Copyright (c) 2005, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2005, 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 diff --git a/jdk/src/share/classes/sun/util/resources/lv/LocaleNames_lv.properties b/jdk/src/share/classes/sun/util/resources/lv/LocaleNames_lv.properties index 97f7ba0e0a6..b4d0b1c837d 100644 --- a/jdk/src/share/classes/sun/util/resources/lv/LocaleNames_lv.properties +++ b/jdk/src/share/classes/sun/util/resources/lv/LocaleNames_lv.properties @@ -1,4 +1,4 @@ -# Copyright (c) 2005, 2007, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2005, 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 diff --git a/jdk/src/share/classes/sun/util/resources/mk/CalendarData_mk.properties b/jdk/src/share/classes/sun/util/resources/mk/CalendarData_mk.properties index 36167c9c604..ca2ae0f185f 100644 --- a/jdk/src/share/classes/sun/util/resources/mk/CalendarData_mk.properties +++ b/jdk/src/share/classes/sun/util/resources/mk/CalendarData_mk.properties @@ -1,5 +1,5 @@ # -# Copyright (c) 2005, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2005, 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 diff --git a/jdk/src/share/classes/sun/util/resources/mk/CurrencyNames_mk_MK.properties b/jdk/src/share/classes/sun/util/resources/mk/CurrencyNames_mk_MK.properties index 62a45f2d09a..0e79a357d44 100644 --- a/jdk/src/share/classes/sun/util/resources/mk/CurrencyNames_mk_MK.properties +++ b/jdk/src/share/classes/sun/util/resources/mk/CurrencyNames_mk_MK.properties @@ -1,5 +1,5 @@ # -# Copyright (c) 2005, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2005, 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 diff --git a/jdk/src/share/classes/sun/util/resources/mk/LocaleNames_mk.properties b/jdk/src/share/classes/sun/util/resources/mk/LocaleNames_mk.properties index 8a7702cb006..e16336d2f62 100644 --- a/jdk/src/share/classes/sun/util/resources/mk/LocaleNames_mk.properties +++ b/jdk/src/share/classes/sun/util/resources/mk/LocaleNames_mk.properties @@ -1,4 +1,4 @@ -# Copyright (c) 2005, 2007, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2005, 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 diff --git a/jdk/src/share/classes/sun/util/resources/ms/CalendarData_ms_MY.properties b/jdk/src/share/classes/sun/util/resources/ms/CalendarData_ms_MY.properties index c618ce3b96f..abcd01cb35a 100644 --- a/jdk/src/share/classes/sun/util/resources/ms/CalendarData_ms_MY.properties +++ b/jdk/src/share/classes/sun/util/resources/ms/CalendarData_ms_MY.properties @@ -1,5 +1,5 @@ # -# Copyright (c) 2006, 2007, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2006, 2012, Oracle and/or its affiliates. All rights reserved. # # diff --git a/jdk/src/share/classes/sun/util/resources/ms/CurrencyNames_ms_MY.properties b/jdk/src/share/classes/sun/util/resources/ms/CurrencyNames_ms_MY.properties index 7829c5c6f71..41262f24ed9 100644 --- a/jdk/src/share/classes/sun/util/resources/ms/CurrencyNames_ms_MY.properties +++ b/jdk/src/share/classes/sun/util/resources/ms/CurrencyNames_ms_MY.properties @@ -1,5 +1,5 @@ # -# Copyright (c) 2005, 2007, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2005, 2012, Oracle and/or its affiliates. All rights reserved. # # diff --git a/jdk/src/share/classes/sun/util/resources/ms/LocaleNames_ms.properties b/jdk/src/share/classes/sun/util/resources/ms/LocaleNames_ms.properties index 5f7f2302009..8a3816acbc4 100644 --- a/jdk/src/share/classes/sun/util/resources/ms/LocaleNames_ms.properties +++ b/jdk/src/share/classes/sun/util/resources/ms/LocaleNames_ms.properties @@ -1,5 +1,5 @@ # -# Copyright (c) 2005, 2007, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2005, 2012, Oracle and/or its affiliates. All rights reserved. # # diff --git a/jdk/src/share/classes/sun/util/resources/mt/CalendarData_mt.properties b/jdk/src/share/classes/sun/util/resources/mt/CalendarData_mt.properties index ee3d610d8fa..f41fe83d116 100644 --- a/jdk/src/share/classes/sun/util/resources/mt/CalendarData_mt.properties +++ b/jdk/src/share/classes/sun/util/resources/mt/CalendarData_mt.properties @@ -1,5 +1,5 @@ # -# Copyright (c) 2005, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2005, 2012, Oracle and/or its affiliates. All rights reserved. # # diff --git a/jdk/src/share/classes/sun/util/resources/mt/CalendarData_mt_MT.properties b/jdk/src/share/classes/sun/util/resources/mt/CalendarData_mt_MT.properties index 2c45178a631..a32647b69ba 100644 --- a/jdk/src/share/classes/sun/util/resources/mt/CalendarData_mt_MT.properties +++ b/jdk/src/share/classes/sun/util/resources/mt/CalendarData_mt_MT.properties @@ -1,5 +1,5 @@ # -# Copyright (c) 2006, 2007, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2006, 2012, Oracle and/or its affiliates. All rights reserved. # # diff --git a/jdk/src/share/classes/sun/util/resources/mt/CurrencyNames_mt_MT.properties b/jdk/src/share/classes/sun/util/resources/mt/CurrencyNames_mt_MT.properties index 0cd749b8632..d78f240ec1a 100644 --- a/jdk/src/share/classes/sun/util/resources/mt/CurrencyNames_mt_MT.properties +++ b/jdk/src/share/classes/sun/util/resources/mt/CurrencyNames_mt_MT.properties @@ -1,5 +1,5 @@ # -# Copyright (c) 2005, 2007, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2005, 2012, Oracle and/or its affiliates. All rights reserved. # # diff --git a/jdk/src/share/classes/sun/util/resources/mt/LocaleNames_mt.properties b/jdk/src/share/classes/sun/util/resources/mt/LocaleNames_mt.properties index c0c3c058d99..2ed2d54153d 100644 --- a/jdk/src/share/classes/sun/util/resources/mt/LocaleNames_mt.properties +++ b/jdk/src/share/classes/sun/util/resources/mt/LocaleNames_mt.properties @@ -1,5 +1,5 @@ # -# Copyright (c) 2005, 2007, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2005, 2012, Oracle and/or its affiliates. All rights reserved. # # diff --git a/jdk/src/share/classes/sun/util/resources/nl/CalendarData_nl.properties b/jdk/src/share/classes/sun/util/resources/nl/CalendarData_nl.properties index 9fcc1ced96b..f1322141930 100644 --- a/jdk/src/share/classes/sun/util/resources/nl/CalendarData_nl.properties +++ b/jdk/src/share/classes/sun/util/resources/nl/CalendarData_nl.properties @@ -1,5 +1,5 @@ # -# Copyright (c) 2005, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2005, 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 diff --git a/jdk/src/share/classes/sun/util/resources/nl/CurrencyNames_nl_BE.properties b/jdk/src/share/classes/sun/util/resources/nl/CurrencyNames_nl_BE.properties index c39ed728b36..0469b988c21 100644 --- a/jdk/src/share/classes/sun/util/resources/nl/CurrencyNames_nl_BE.properties +++ b/jdk/src/share/classes/sun/util/resources/nl/CurrencyNames_nl_BE.properties @@ -1,5 +1,5 @@ # -# Copyright (c) 2005, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2005, 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 diff --git a/jdk/src/share/classes/sun/util/resources/nl/CurrencyNames_nl_NL.properties b/jdk/src/share/classes/sun/util/resources/nl/CurrencyNames_nl_NL.properties index 007096af154..acf7b8c9c63 100644 --- a/jdk/src/share/classes/sun/util/resources/nl/CurrencyNames_nl_NL.properties +++ b/jdk/src/share/classes/sun/util/resources/nl/CurrencyNames_nl_NL.properties @@ -1,5 +1,5 @@ # -# Copyright (c) 2005, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2005, 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 diff --git a/jdk/src/share/classes/sun/util/resources/nl/LocaleNames_nl.properties b/jdk/src/share/classes/sun/util/resources/nl/LocaleNames_nl.properties index b88e5a0e937..0770450afc6 100644 --- a/jdk/src/share/classes/sun/util/resources/nl/LocaleNames_nl.properties +++ b/jdk/src/share/classes/sun/util/resources/nl/LocaleNames_nl.properties @@ -1,4 +1,4 @@ -# Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2005, 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 diff --git a/jdk/src/share/classes/sun/util/resources/no/CalendarData_no.properties b/jdk/src/share/classes/sun/util/resources/no/CalendarData_no.properties index 0ca6312fafe..f1322141930 100644 --- a/jdk/src/share/classes/sun/util/resources/no/CalendarData_no.properties +++ b/jdk/src/share/classes/sun/util/resources/no/CalendarData_no.properties @@ -1,5 +1,5 @@ # -# Copyright (c) 2005, 2006, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2005, 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 diff --git a/jdk/src/share/classes/sun/util/resources/no/CurrencyNames_no_NO.properties b/jdk/src/share/classes/sun/util/resources/no/CurrencyNames_no_NO.properties index 1af24433490..10852e51712 100644 --- a/jdk/src/share/classes/sun/util/resources/no/CurrencyNames_no_NO.properties +++ b/jdk/src/share/classes/sun/util/resources/no/CurrencyNames_no_NO.properties @@ -1,5 +1,5 @@ # -# Copyright (c) 2005, 2006, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2005, 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 diff --git a/jdk/src/share/classes/sun/util/resources/no/LocaleNames_no.properties b/jdk/src/share/classes/sun/util/resources/no/LocaleNames_no.properties index bcfc071eb85..3a43b04dcc9 100644 --- a/jdk/src/share/classes/sun/util/resources/no/LocaleNames_no.properties +++ b/jdk/src/share/classes/sun/util/resources/no/LocaleNames_no.properties @@ -1,4 +1,4 @@ -# Copyright (c) 2005, 2007, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2005, 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 diff --git a/jdk/src/share/classes/sun/util/resources/no/LocaleNames_no_NO_NY.properties b/jdk/src/share/classes/sun/util/resources/no/LocaleNames_no_NO_NY.properties index bcfc071eb85..3a43b04dcc9 100644 --- a/jdk/src/share/classes/sun/util/resources/no/LocaleNames_no_NO_NY.properties +++ b/jdk/src/share/classes/sun/util/resources/no/LocaleNames_no_NO_NY.properties @@ -1,4 +1,4 @@ -# Copyright (c) 2005, 2007, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2005, 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 diff --git a/jdk/src/share/classes/sun/util/resources/pl/CalendarData_pl.properties b/jdk/src/share/classes/sun/util/resources/pl/CalendarData_pl.properties index 9fcc1ced96b..f1322141930 100644 --- a/jdk/src/share/classes/sun/util/resources/pl/CalendarData_pl.properties +++ b/jdk/src/share/classes/sun/util/resources/pl/CalendarData_pl.properties @@ -1,5 +1,5 @@ # -# Copyright (c) 2005, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2005, 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 diff --git a/jdk/src/share/classes/sun/util/resources/pl/CurrencyNames_pl_PL.properties b/jdk/src/share/classes/sun/util/resources/pl/CurrencyNames_pl_PL.properties index 47fc2ae8ec0..a1d472fd5e9 100644 --- a/jdk/src/share/classes/sun/util/resources/pl/CurrencyNames_pl_PL.properties +++ b/jdk/src/share/classes/sun/util/resources/pl/CurrencyNames_pl_PL.properties @@ -1,5 +1,5 @@ # -# Copyright (c) 2005, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2005, 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 diff --git a/jdk/src/share/classes/sun/util/resources/pl/LocaleNames_pl.properties b/jdk/src/share/classes/sun/util/resources/pl/LocaleNames_pl.properties index 86d8ff66e29..80d68512c56 100644 --- a/jdk/src/share/classes/sun/util/resources/pl/LocaleNames_pl.properties +++ b/jdk/src/share/classes/sun/util/resources/pl/LocaleNames_pl.properties @@ -1,4 +1,4 @@ -# Copyright (c) 2005, 2007, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2005, 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 diff --git a/jdk/src/share/classes/sun/util/resources/pt/CalendarData_pt.properties b/jdk/src/share/classes/sun/util/resources/pt/CalendarData_pt.properties index 3b4514714e2..6f4b1fa4695 100644 --- a/jdk/src/share/classes/sun/util/resources/pt/CalendarData_pt.properties +++ b/jdk/src/share/classes/sun/util/resources/pt/CalendarData_pt.properties @@ -1,5 +1,5 @@ # -# Copyright (c) 2005, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2005, 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 diff --git a/jdk/src/share/classes/sun/util/resources/pt/CalendarData_pt_PT.properties b/jdk/src/share/classes/sun/util/resources/pt/CalendarData_pt_PT.properties index 9fcc1ced96b..f1322141930 100644 --- a/jdk/src/share/classes/sun/util/resources/pt/CalendarData_pt_PT.properties +++ b/jdk/src/share/classes/sun/util/resources/pt/CalendarData_pt_PT.properties @@ -1,5 +1,5 @@ # -# Copyright (c) 2005, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2005, 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 diff --git a/jdk/src/share/classes/sun/util/resources/pt/CurrencyNames_pt.properties b/jdk/src/share/classes/sun/util/resources/pt/CurrencyNames_pt.properties index 20a62c8bb62..20f93490805 100644 --- a/jdk/src/share/classes/sun/util/resources/pt/CurrencyNames_pt.properties +++ b/jdk/src/share/classes/sun/util/resources/pt/CurrencyNames_pt.properties @@ -1,5 +1,5 @@ # -# Copyright (c) 2005, 2011, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2005, 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 diff --git a/jdk/src/share/classes/sun/util/resources/pt/CurrencyNames_pt_BR.properties b/jdk/src/share/classes/sun/util/resources/pt/CurrencyNames_pt_BR.properties index 7b6aba92c09..95b68a9c957 100644 --- a/jdk/src/share/classes/sun/util/resources/pt/CurrencyNames_pt_BR.properties +++ b/jdk/src/share/classes/sun/util/resources/pt/CurrencyNames_pt_BR.properties @@ -1,5 +1,5 @@ # -# Copyright (c) 2005, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2005, 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 diff --git a/jdk/src/share/classes/sun/util/resources/pt/CurrencyNames_pt_PT.properties b/jdk/src/share/classes/sun/util/resources/pt/CurrencyNames_pt_PT.properties index 1d4b7f7aedc..fa0dd96cab6 100644 --- a/jdk/src/share/classes/sun/util/resources/pt/CurrencyNames_pt_PT.properties +++ b/jdk/src/share/classes/sun/util/resources/pt/CurrencyNames_pt_PT.properties @@ -1,5 +1,5 @@ # -# Copyright (c) 2005, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2005, 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 diff --git a/jdk/src/share/classes/sun/util/resources/pt/LocaleNames_pt.properties b/jdk/src/share/classes/sun/util/resources/pt/LocaleNames_pt.properties index 93cff5bb9b2..0a56e5c4ca3 100644 --- a/jdk/src/share/classes/sun/util/resources/pt/LocaleNames_pt.properties +++ b/jdk/src/share/classes/sun/util/resources/pt/LocaleNames_pt.properties @@ -1,5 +1,5 @@ # -# Copyright (c) 2005, 2007, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2005, 2012, Oracle and/or its affiliates. All rights reserved. # # diff --git a/jdk/src/share/classes/sun/util/resources/pt/LocaleNames_pt_BR.properties b/jdk/src/share/classes/sun/util/resources/pt/LocaleNames_pt_BR.properties index d6e391f4e76..9f7fce0bd90 100644 --- a/jdk/src/share/classes/sun/util/resources/pt/LocaleNames_pt_BR.properties +++ b/jdk/src/share/classes/sun/util/resources/pt/LocaleNames_pt_BR.properties @@ -1,5 +1,5 @@ # -# Copyright (c) 2007, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2007, 2012, Oracle and/or its affiliates. All rights reserved. # # diff --git a/jdk/src/share/classes/sun/util/resources/pt/LocaleNames_pt_PT.properties b/jdk/src/share/classes/sun/util/resources/pt/LocaleNames_pt_PT.properties index 56435573b19..d4699708220 100644 --- a/jdk/src/share/classes/sun/util/resources/pt/LocaleNames_pt_PT.properties +++ b/jdk/src/share/classes/sun/util/resources/pt/LocaleNames_pt_PT.properties @@ -1,5 +1,5 @@ # -# Copyright (c) 2005, 2007, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2005, 2012, Oracle and/or its affiliates. All rights reserved. # # diff --git a/jdk/src/share/classes/sun/util/resources/ro/CalendarData_ro.properties b/jdk/src/share/classes/sun/util/resources/ro/CalendarData_ro.properties index 65efd83b2da..54b8449a943 100644 --- a/jdk/src/share/classes/sun/util/resources/ro/CalendarData_ro.properties +++ b/jdk/src/share/classes/sun/util/resources/ro/CalendarData_ro.properties @@ -1,5 +1,5 @@ # -# Copyright (c) 2005, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2005, 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 diff --git a/jdk/src/share/classes/sun/util/resources/ro/CurrencyNames_ro_RO.properties b/jdk/src/share/classes/sun/util/resources/ro/CurrencyNames_ro_RO.properties index 4dea5aef2e0..b02f984a2ed 100644 --- a/jdk/src/share/classes/sun/util/resources/ro/CurrencyNames_ro_RO.properties +++ b/jdk/src/share/classes/sun/util/resources/ro/CurrencyNames_ro_RO.properties @@ -1,5 +1,5 @@ # -# Copyright (c) 2005, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2005, 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 diff --git a/jdk/src/share/classes/sun/util/resources/ro/LocaleNames_ro.properties b/jdk/src/share/classes/sun/util/resources/ro/LocaleNames_ro.properties index 2d18ac41568..752ef799163 100644 --- a/jdk/src/share/classes/sun/util/resources/ro/LocaleNames_ro.properties +++ b/jdk/src/share/classes/sun/util/resources/ro/LocaleNames_ro.properties @@ -1,4 +1,4 @@ -# Copyright (c) 2005, 2007, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2005, 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 diff --git a/jdk/src/share/classes/sun/util/resources/ru/CalendarData_ru.properties b/jdk/src/share/classes/sun/util/resources/ru/CalendarData_ru.properties index 3b4514714e2..6f4b1fa4695 100644 --- a/jdk/src/share/classes/sun/util/resources/ru/CalendarData_ru.properties +++ b/jdk/src/share/classes/sun/util/resources/ru/CalendarData_ru.properties @@ -1,5 +1,5 @@ # -# Copyright (c) 2005, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2005, 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 diff --git a/jdk/src/share/classes/sun/util/resources/ru/CurrencyNames_ru_RU.properties b/jdk/src/share/classes/sun/util/resources/ru/CurrencyNames_ru_RU.properties index 89fe9c16515..507416bf7d1 100644 --- a/jdk/src/share/classes/sun/util/resources/ru/CurrencyNames_ru_RU.properties +++ b/jdk/src/share/classes/sun/util/resources/ru/CurrencyNames_ru_RU.properties @@ -1,5 +1,5 @@ # -# Copyright (c) 2005, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2005, 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 diff --git a/jdk/src/share/classes/sun/util/resources/ru/LocaleNames_ru.properties b/jdk/src/share/classes/sun/util/resources/ru/LocaleNames_ru.properties index fe65cf7c89d..b6ec3a2de85 100644 --- a/jdk/src/share/classes/sun/util/resources/ru/LocaleNames_ru.properties +++ b/jdk/src/share/classes/sun/util/resources/ru/LocaleNames_ru.properties @@ -1,4 +1,4 @@ -# Copyright (c) 2005, 2007, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2005, 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 diff --git a/jdk/src/share/classes/sun/util/resources/sk/CalendarData_sk.properties b/jdk/src/share/classes/sun/util/resources/sk/CalendarData_sk.properties index 53ac28c8de1..4d5f29bdcb8 100644 --- a/jdk/src/share/classes/sun/util/resources/sk/CalendarData_sk.properties +++ b/jdk/src/share/classes/sun/util/resources/sk/CalendarData_sk.properties @@ -1,5 +1,5 @@ # -# Copyright (c) 2005, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2005, 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 diff --git a/jdk/src/share/classes/sun/util/resources/sk/CurrencyNames_sk_SK.properties b/jdk/src/share/classes/sun/util/resources/sk/CurrencyNames_sk_SK.properties index eb10a65ca9a..57894083b40 100644 --- a/jdk/src/share/classes/sun/util/resources/sk/CurrencyNames_sk_SK.properties +++ b/jdk/src/share/classes/sun/util/resources/sk/CurrencyNames_sk_SK.properties @@ -1,5 +1,5 @@ # -# Copyright (c) 2005, 2011, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2005, 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 diff --git a/jdk/src/share/classes/sun/util/resources/sk/LocaleNames_sk.properties b/jdk/src/share/classes/sun/util/resources/sk/LocaleNames_sk.properties index 2fd0d1b5ac5..59d47a2c686 100644 --- a/jdk/src/share/classes/sun/util/resources/sk/LocaleNames_sk.properties +++ b/jdk/src/share/classes/sun/util/resources/sk/LocaleNames_sk.properties @@ -1,4 +1,4 @@ -# Copyright (c) 2005, 2007, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2005, 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 diff --git a/jdk/src/share/classes/sun/util/resources/sl/CalendarData_sl.properties b/jdk/src/share/classes/sun/util/resources/sl/CalendarData_sl.properties index 40c51eba1fa..a758c00e2ca 100644 --- a/jdk/src/share/classes/sun/util/resources/sl/CalendarData_sl.properties +++ b/jdk/src/share/classes/sun/util/resources/sl/CalendarData_sl.properties @@ -1,5 +1,5 @@ # -# Copyright (c) 2005, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2005, 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 diff --git a/jdk/src/share/classes/sun/util/resources/sl/CurrencyNames_sl_SI.properties b/jdk/src/share/classes/sun/util/resources/sl/CurrencyNames_sl_SI.properties index 27a8a7bfbdb..abafe54ce49 100644 --- a/jdk/src/share/classes/sun/util/resources/sl/CurrencyNames_sl_SI.properties +++ b/jdk/src/share/classes/sun/util/resources/sl/CurrencyNames_sl_SI.properties @@ -1,5 +1,5 @@ # -# Copyright (c) 2005, 2007, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2005, 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 diff --git a/jdk/src/share/classes/sun/util/resources/sl/LocaleNames_sl.properties b/jdk/src/share/classes/sun/util/resources/sl/LocaleNames_sl.properties index 154e6e23759..5bb0644eba8 100644 --- a/jdk/src/share/classes/sun/util/resources/sl/LocaleNames_sl.properties +++ b/jdk/src/share/classes/sun/util/resources/sl/LocaleNames_sl.properties @@ -1,4 +1,4 @@ -# Copyright (c) 2005, 2007, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2005, 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 diff --git a/jdk/src/share/classes/sun/util/resources/sq/CalendarData_sq.properties b/jdk/src/share/classes/sun/util/resources/sq/CalendarData_sq.properties index 36167c9c604..ca2ae0f185f 100644 --- a/jdk/src/share/classes/sun/util/resources/sq/CalendarData_sq.properties +++ b/jdk/src/share/classes/sun/util/resources/sq/CalendarData_sq.properties @@ -1,5 +1,5 @@ # -# Copyright (c) 2005, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2005, 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 diff --git a/jdk/src/share/classes/sun/util/resources/sq/CurrencyNames_sq_AL.properties b/jdk/src/share/classes/sun/util/resources/sq/CurrencyNames_sq_AL.properties index 98652aa3562..bfb82bc5f55 100644 --- a/jdk/src/share/classes/sun/util/resources/sq/CurrencyNames_sq_AL.properties +++ b/jdk/src/share/classes/sun/util/resources/sq/CurrencyNames_sq_AL.properties @@ -1,5 +1,5 @@ # -# Copyright (c) 2005, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2005, 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 diff --git a/jdk/src/share/classes/sun/util/resources/sq/LocaleNames_sq.properties b/jdk/src/share/classes/sun/util/resources/sq/LocaleNames_sq.properties index f027076cf9b..e66c0e1d22b 100644 --- a/jdk/src/share/classes/sun/util/resources/sq/LocaleNames_sq.properties +++ b/jdk/src/share/classes/sun/util/resources/sq/LocaleNames_sq.properties @@ -1,4 +1,4 @@ -# Copyright (c) 2005, 2007, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2005, 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 diff --git a/jdk/src/share/classes/sun/util/resources/sr/CalendarData_sr.properties b/jdk/src/share/classes/sun/util/resources/sr/CalendarData_sr.properties index c618ce3b96f..abcd01cb35a 100644 --- a/jdk/src/share/classes/sun/util/resources/sr/CalendarData_sr.properties +++ b/jdk/src/share/classes/sun/util/resources/sr/CalendarData_sr.properties @@ -1,5 +1,5 @@ # -# Copyright (c) 2006, 2007, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2006, 2012, Oracle and/or its affiliates. All rights reserved. # # diff --git a/jdk/src/share/classes/sun/util/resources/sr/CalendarData_sr_Latn_BA.properties b/jdk/src/share/classes/sun/util/resources/sr/CalendarData_sr_Latn_BA.properties index 7d29a94e698..14180a9a265 100644 --- a/jdk/src/share/classes/sun/util/resources/sr/CalendarData_sr_Latn_BA.properties +++ b/jdk/src/share/classes/sun/util/resources/sr/CalendarData_sr_Latn_BA.properties @@ -1,5 +1,5 @@ # -# Copyright (c) 2005, 2011, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2005, 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 diff --git a/jdk/src/share/classes/sun/util/resources/sr/CalendarData_sr_Latn_ME.properties b/jdk/src/share/classes/sun/util/resources/sr/CalendarData_sr_Latn_ME.properties index 7d29a94e698..14180a9a265 100644 --- a/jdk/src/share/classes/sun/util/resources/sr/CalendarData_sr_Latn_ME.properties +++ b/jdk/src/share/classes/sun/util/resources/sr/CalendarData_sr_Latn_ME.properties @@ -1,5 +1,5 @@ # -# Copyright (c) 2005, 2011, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2005, 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 diff --git a/jdk/src/share/classes/sun/util/resources/sr/CalendarData_sr_Latn_RS.properties b/jdk/src/share/classes/sun/util/resources/sr/CalendarData_sr_Latn_RS.properties index 7d29a94e698..14180a9a265 100644 --- a/jdk/src/share/classes/sun/util/resources/sr/CalendarData_sr_Latn_RS.properties +++ b/jdk/src/share/classes/sun/util/resources/sr/CalendarData_sr_Latn_RS.properties @@ -1,5 +1,5 @@ # -# Copyright (c) 2005, 2011, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2005, 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 diff --git a/jdk/src/share/classes/sun/util/resources/sr/CurrencyNames_sr_BA.properties b/jdk/src/share/classes/sun/util/resources/sr/CurrencyNames_sr_BA.properties index 80fe12cac5d..5d6dacd8905 100644 --- a/jdk/src/share/classes/sun/util/resources/sr/CurrencyNames_sr_BA.properties +++ b/jdk/src/share/classes/sun/util/resources/sr/CurrencyNames_sr_BA.properties @@ -1,5 +1,5 @@ # -# Copyright (c) 2006, 2007, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2006, 2012, Oracle and/or its affiliates. All rights reserved. # # diff --git a/jdk/src/share/classes/sun/util/resources/sr/CurrencyNames_sr_CS.properties b/jdk/src/share/classes/sun/util/resources/sr/CurrencyNames_sr_CS.properties index 1ba3f20375d..f983d4acdcb 100644 --- a/jdk/src/share/classes/sun/util/resources/sr/CurrencyNames_sr_CS.properties +++ b/jdk/src/share/classes/sun/util/resources/sr/CurrencyNames_sr_CS.properties @@ -1,5 +1,5 @@ # -# Copyright (c) 2006, 2007, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2006, 2012, Oracle and/or its affiliates. All rights reserved. # # diff --git a/jdk/src/share/classes/sun/util/resources/sr/CurrencyNames_sr_Latn_BA.properties b/jdk/src/share/classes/sun/util/resources/sr/CurrencyNames_sr_Latn_BA.properties index 7dc0375ecbf..44ad23d24b3 100644 --- a/jdk/src/share/classes/sun/util/resources/sr/CurrencyNames_sr_Latn_BA.properties +++ b/jdk/src/share/classes/sun/util/resources/sr/CurrencyNames_sr_Latn_BA.properties @@ -1,5 +1,5 @@ # -# Copyright (c) 2005, 2011, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2005, 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 diff --git a/jdk/src/share/classes/sun/util/resources/sr/CurrencyNames_sr_Latn_ME.properties b/jdk/src/share/classes/sun/util/resources/sr/CurrencyNames_sr_Latn_ME.properties index 0983b6a2ecc..1d1cb181aaa 100644 --- a/jdk/src/share/classes/sun/util/resources/sr/CurrencyNames_sr_Latn_ME.properties +++ b/jdk/src/share/classes/sun/util/resources/sr/CurrencyNames_sr_Latn_ME.properties @@ -1,5 +1,5 @@ # -# Copyright (c) 2005, 2011, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2005, 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 diff --git a/jdk/src/share/classes/sun/util/resources/sr/CurrencyNames_sr_Latn_RS.properties b/jdk/src/share/classes/sun/util/resources/sr/CurrencyNames_sr_Latn_RS.properties index 3a299f40642..6d511d7e8bc 100644 --- a/jdk/src/share/classes/sun/util/resources/sr/CurrencyNames_sr_Latn_RS.properties +++ b/jdk/src/share/classes/sun/util/resources/sr/CurrencyNames_sr_Latn_RS.properties @@ -1,5 +1,5 @@ # -# Copyright (c) 2005, 2011, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2005, 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 diff --git a/jdk/src/share/classes/sun/util/resources/sr/CurrencyNames_sr_ME.properties b/jdk/src/share/classes/sun/util/resources/sr/CurrencyNames_sr_ME.properties index 7b5fb3dd33c..e52ee703b53 100644 --- a/jdk/src/share/classes/sun/util/resources/sr/CurrencyNames_sr_ME.properties +++ b/jdk/src/share/classes/sun/util/resources/sr/CurrencyNames_sr_ME.properties @@ -1,5 +1,5 @@ # -# Copyright (c) 2007, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2007, 2012, Oracle and/or its affiliates. All rights reserved. # # diff --git a/jdk/src/share/classes/sun/util/resources/sr/CurrencyNames_sr_RS.properties b/jdk/src/share/classes/sun/util/resources/sr/CurrencyNames_sr_RS.properties index 83555220774..e9347f7e26e 100644 --- a/jdk/src/share/classes/sun/util/resources/sr/CurrencyNames_sr_RS.properties +++ b/jdk/src/share/classes/sun/util/resources/sr/CurrencyNames_sr_RS.properties @@ -1,5 +1,5 @@ # -# Copyright (c) 2005, 2011, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2005, 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 diff --git a/jdk/src/share/classes/sun/util/resources/sr/LocaleNames_sr.properties b/jdk/src/share/classes/sun/util/resources/sr/LocaleNames_sr.properties index 7ebe39a31f7..d897a0e1a6c 100644 --- a/jdk/src/share/classes/sun/util/resources/sr/LocaleNames_sr.properties +++ b/jdk/src/share/classes/sun/util/resources/sr/LocaleNames_sr.properties @@ -1,5 +1,5 @@ # -# Copyright (c) 2006, 2007, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2006, 2012, Oracle and/or its affiliates. All rights reserved. # # diff --git a/jdk/src/share/classes/sun/util/resources/sr/LocaleNames_sr_Latn.properties b/jdk/src/share/classes/sun/util/resources/sr/LocaleNames_sr_Latn.properties index 7cc1c2477c7..2ad7a4d891a 100644 --- a/jdk/src/share/classes/sun/util/resources/sr/LocaleNames_sr_Latn.properties +++ b/jdk/src/share/classes/sun/util/resources/sr/LocaleNames_sr_Latn.properties @@ -1,5 +1,5 @@ # -# Copyright (c) 2005, 2011, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2005, 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 diff --git a/jdk/src/share/classes/sun/util/resources/sv/CalendarData_sv.properties b/jdk/src/share/classes/sun/util/resources/sv/CalendarData_sv.properties index 9fcc1ced96b..f1322141930 100644 --- a/jdk/src/share/classes/sun/util/resources/sv/CalendarData_sv.properties +++ b/jdk/src/share/classes/sun/util/resources/sv/CalendarData_sv.properties @@ -1,5 +1,5 @@ # -# Copyright (c) 2005, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2005, 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 diff --git a/jdk/src/share/classes/sun/util/resources/sv/CurrencyNames_sv.properties b/jdk/src/share/classes/sun/util/resources/sv/CurrencyNames_sv.properties index 2d15627b190..55a89fbcece 100644 --- a/jdk/src/share/classes/sun/util/resources/sv/CurrencyNames_sv.properties +++ b/jdk/src/share/classes/sun/util/resources/sv/CurrencyNames_sv.properties @@ -1,5 +1,5 @@ # -# Copyright (c) 2005, 2011, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2005, 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 diff --git a/jdk/src/share/classes/sun/util/resources/sv/CurrencyNames_sv_SE.properties b/jdk/src/share/classes/sun/util/resources/sv/CurrencyNames_sv_SE.properties index b4304813dc7..943c92198a2 100644 --- a/jdk/src/share/classes/sun/util/resources/sv/CurrencyNames_sv_SE.properties +++ b/jdk/src/share/classes/sun/util/resources/sv/CurrencyNames_sv_SE.properties @@ -1,5 +1,5 @@ # -# Copyright (c) 2005, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2005, 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 diff --git a/jdk/src/share/classes/sun/util/resources/sv/LocaleNames_sv.properties b/jdk/src/share/classes/sun/util/resources/sv/LocaleNames_sv.properties index d3674d8c81a..96d73a9ba2b 100644 --- a/jdk/src/share/classes/sun/util/resources/sv/LocaleNames_sv.properties +++ b/jdk/src/share/classes/sun/util/resources/sv/LocaleNames_sv.properties @@ -1,4 +1,4 @@ -# Copyright (c) 2005, 2011, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2005, 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 diff --git a/jdk/src/share/classes/sun/util/resources/th/CalendarData_th.properties b/jdk/src/share/classes/sun/util/resources/th/CalendarData_th.properties index 36167c9c604..ca2ae0f185f 100644 --- a/jdk/src/share/classes/sun/util/resources/th/CalendarData_th.properties +++ b/jdk/src/share/classes/sun/util/resources/th/CalendarData_th.properties @@ -1,5 +1,5 @@ # -# Copyright (c) 2005, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2005, 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 diff --git a/jdk/src/share/classes/sun/util/resources/th/CurrencyNames_th_TH.properties b/jdk/src/share/classes/sun/util/resources/th/CurrencyNames_th_TH.properties index a66c7bc129c..2fd11e638f5 100644 --- a/jdk/src/share/classes/sun/util/resources/th/CurrencyNames_th_TH.properties +++ b/jdk/src/share/classes/sun/util/resources/th/CurrencyNames_th_TH.properties @@ -1,5 +1,5 @@ # -# Copyright (c) 2005, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2005, 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 diff --git a/jdk/src/share/classes/sun/util/resources/th/LocaleNames_th.properties b/jdk/src/share/classes/sun/util/resources/th/LocaleNames_th.properties index cf385b9a74f..874d52f12a9 100644 --- a/jdk/src/share/classes/sun/util/resources/th/LocaleNames_th.properties +++ b/jdk/src/share/classes/sun/util/resources/th/LocaleNames_th.properties @@ -1,4 +1,4 @@ -# Copyright (c) 2005, 2007, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2005, 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 diff --git a/jdk/src/share/classes/sun/util/resources/tr/CalendarData_tr.properties b/jdk/src/share/classes/sun/util/resources/tr/CalendarData_tr.properties index c9bd2455d01..2cf2e1de85c 100644 --- a/jdk/src/share/classes/sun/util/resources/tr/CalendarData_tr.properties +++ b/jdk/src/share/classes/sun/util/resources/tr/CalendarData_tr.properties @@ -1,5 +1,5 @@ # -# Copyright (c) 2005, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2005, 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 diff --git a/jdk/src/share/classes/sun/util/resources/tr/CurrencyNames_tr_TR.properties b/jdk/src/share/classes/sun/util/resources/tr/CurrencyNames_tr_TR.properties index b4c109bcd81..191f4339c21 100644 --- a/jdk/src/share/classes/sun/util/resources/tr/CurrencyNames_tr_TR.properties +++ b/jdk/src/share/classes/sun/util/resources/tr/CurrencyNames_tr_TR.properties @@ -1,5 +1,5 @@ # -# Copyright (c) 2005, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2005, 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 diff --git a/jdk/src/share/classes/sun/util/resources/tr/LocaleNames_tr.properties b/jdk/src/share/classes/sun/util/resources/tr/LocaleNames_tr.properties index 8590442f768..a69cde7aad2 100644 --- a/jdk/src/share/classes/sun/util/resources/tr/LocaleNames_tr.properties +++ b/jdk/src/share/classes/sun/util/resources/tr/LocaleNames_tr.properties @@ -1,4 +1,4 @@ -# Copyright (c) 2005, 2007, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2005, 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 diff --git a/jdk/src/share/classes/sun/util/resources/uk/CalendarData_uk.properties b/jdk/src/share/classes/sun/util/resources/uk/CalendarData_uk.properties index c9bd2455d01..2cf2e1de85c 100644 --- a/jdk/src/share/classes/sun/util/resources/uk/CalendarData_uk.properties +++ b/jdk/src/share/classes/sun/util/resources/uk/CalendarData_uk.properties @@ -1,5 +1,5 @@ # -# Copyright (c) 2005, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2005, 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 diff --git a/jdk/src/share/classes/sun/util/resources/uk/CurrencyNames_uk_UA.properties b/jdk/src/share/classes/sun/util/resources/uk/CurrencyNames_uk_UA.properties index ebe2325a966..7e2f86e3890 100644 --- a/jdk/src/share/classes/sun/util/resources/uk/CurrencyNames_uk_UA.properties +++ b/jdk/src/share/classes/sun/util/resources/uk/CurrencyNames_uk_UA.properties @@ -1,5 +1,5 @@ # -# Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2005, 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 diff --git a/jdk/src/share/classes/sun/util/resources/uk/LocaleNames_uk.properties b/jdk/src/share/classes/sun/util/resources/uk/LocaleNames_uk.properties index 9943e972003..ee420eb789e 100644 --- a/jdk/src/share/classes/sun/util/resources/uk/LocaleNames_uk.properties +++ b/jdk/src/share/classes/sun/util/resources/uk/LocaleNames_uk.properties @@ -1,4 +1,4 @@ -# Copyright (c) 2005, 2007, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2005, 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 diff --git a/jdk/src/share/classes/sun/util/resources/vi/CalendarData_vi.properties b/jdk/src/share/classes/sun/util/resources/vi/CalendarData_vi.properties index 0d9fb85309c..ce811b89320 100644 --- a/jdk/src/share/classes/sun/util/resources/vi/CalendarData_vi.properties +++ b/jdk/src/share/classes/sun/util/resources/vi/CalendarData_vi.properties @@ -1,5 +1,5 @@ # -# Copyright (c) 2005, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2005, 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 diff --git a/jdk/src/share/classes/sun/util/resources/vi/CurrencyNames_vi_VN.properties b/jdk/src/share/classes/sun/util/resources/vi/CurrencyNames_vi_VN.properties index 72ddc2ae809..d136685408d 100644 --- a/jdk/src/share/classes/sun/util/resources/vi/CurrencyNames_vi_VN.properties +++ b/jdk/src/share/classes/sun/util/resources/vi/CurrencyNames_vi_VN.properties @@ -1,5 +1,5 @@ # -# Copyright (c) 2005, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2005, 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 diff --git a/jdk/src/share/classes/sun/util/resources/vi/LocaleNames_vi.properties b/jdk/src/share/classes/sun/util/resources/vi/LocaleNames_vi.properties index d32d40ba82d..ec8ffaa7021 100644 --- a/jdk/src/share/classes/sun/util/resources/vi/LocaleNames_vi.properties +++ b/jdk/src/share/classes/sun/util/resources/vi/LocaleNames_vi.properties @@ -1,4 +1,4 @@ -# Copyright (c) 2005, 2007, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2005, 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 diff --git a/jdk/src/share/classes/sun/util/resources/zh/CalendarData_zh.properties b/jdk/src/share/classes/sun/util/resources/zh/CalendarData_zh.properties index 0d9fb85309c..ce811b89320 100644 --- a/jdk/src/share/classes/sun/util/resources/zh/CalendarData_zh.properties +++ b/jdk/src/share/classes/sun/util/resources/zh/CalendarData_zh.properties @@ -1,5 +1,5 @@ # -# Copyright (c) 2005, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2005, 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 diff --git a/jdk/src/share/classes/sun/util/resources/zh/CurrencyNames_zh_CN.properties b/jdk/src/share/classes/sun/util/resources/zh/CurrencyNames_zh_CN.properties index 804ac91dddf..673f5e52deb 100644 --- a/jdk/src/share/classes/sun/util/resources/zh/CurrencyNames_zh_CN.properties +++ b/jdk/src/share/classes/sun/util/resources/zh/CurrencyNames_zh_CN.properties @@ -1,5 +1,5 @@ # -# Copyright (c) 2005, 2011, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2005, 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 diff --git a/jdk/src/share/classes/sun/util/resources/zh/CurrencyNames_zh_TW.properties b/jdk/src/share/classes/sun/util/resources/zh/CurrencyNames_zh_TW.properties index 3ec99f11a3a..2e767cb38f2 100644 --- a/jdk/src/share/classes/sun/util/resources/zh/CurrencyNames_zh_TW.properties +++ b/jdk/src/share/classes/sun/util/resources/zh/CurrencyNames_zh_TW.properties @@ -1,5 +1,5 @@ # -# Copyright (c) 2005, 2011, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2005, 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 diff --git a/jdk/src/share/classes/sun/util/resources/zh/LocaleNames_zh.properties b/jdk/src/share/classes/sun/util/resources/zh/LocaleNames_zh.properties index 40f3d90aca3..e4e806db22b 100644 --- a/jdk/src/share/classes/sun/util/resources/zh/LocaleNames_zh.properties +++ b/jdk/src/share/classes/sun/util/resources/zh/LocaleNames_zh.properties @@ -1,4 +1,4 @@ -# Copyright (c) 2005, 2011, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2005, 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 diff --git a/jdk/src/share/classes/sun/util/resources/zh/LocaleNames_zh_SG.properties b/jdk/src/share/classes/sun/util/resources/zh/LocaleNames_zh_SG.properties index d3733f48598..e36257015d2 100644 --- a/jdk/src/share/classes/sun/util/resources/zh/LocaleNames_zh_SG.properties +++ b/jdk/src/share/classes/sun/util/resources/zh/LocaleNames_zh_SG.properties @@ -1,5 +1,5 @@ # -# Copyright (c) 2005, 2007, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2005, 2012, Oracle and/or its affiliates. All rights reserved. # # diff --git a/jdk/src/share/classes/sun/util/resources/zh/LocaleNames_zh_TW.properties b/jdk/src/share/classes/sun/util/resources/zh/LocaleNames_zh_TW.properties index d827635fa74..16df704ebae 100644 --- a/jdk/src/share/classes/sun/util/resources/zh/LocaleNames_zh_TW.properties +++ b/jdk/src/share/classes/sun/util/resources/zh/LocaleNames_zh_TW.properties @@ -1,4 +1,4 @@ -# Copyright (c) 2005, 2011, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2005, 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 diff --git a/jdk/src/share/classes/sun/util/spi/XmlPropertiesProvider.java b/jdk/src/share/classes/sun/util/spi/XmlPropertiesProvider.java index 42194daba29..3e4acddecfa 100644 --- a/jdk/src/share/classes/sun/util/spi/XmlPropertiesProvider.java +++ b/jdk/src/share/classes/sun/util/spi/XmlPropertiesProvider.java @@ -55,6 +55,9 @@ public abstract class XmlPropertiesProvider { * @param props the properties table to populate * @param in the input stream from which to read the XML document * @throws IOException if reading from the specified input stream fails + * @throws java.io.UnsupportedEncodingException if the document's encoding + * declaration can be read and it specifies an encoding that is not + * supported * @throws InvalidPropertiesFormatException Data on input stream does not * constitute a valid XML document with the mandated document type. * @@ -73,6 +76,8 @@ public abstract class XmlPropertiesProvider { * @param encoding the name of a supported character encoding * * @throws IOException if writing to the specified output stream fails + * @throws java.io.UnsupportedEncodingException if the encoding is not + * supported by the implementation * @throws NullPointerException if {@code out} is null. * @throws ClassCastException if this {@code Properties} object * contains any keys or values that are not diff --git a/jdk/src/share/classes/sun/util/xml/PlatformXmlPropertiesProvider.java b/jdk/src/share/classes/sun/util/xml/PlatformXmlPropertiesProvider.java index f4e4010b282..06f845bac51 100644 --- a/jdk/src/share/classes/sun/util/xml/PlatformXmlPropertiesProvider.java +++ b/jdk/src/share/classes/sun/util/xml/PlatformXmlPropertiesProvider.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 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 @@ -27,6 +27,7 @@ package sun.util.xml; import java.io.*; import java.util.*; +import java.nio.charset.*; import org.xml.sax.*; import org.w3c.dom.*; import javax.xml.parsers.*; @@ -127,6 +128,13 @@ public class PlatformXmlPropertiesProvider extends XmlPropertiesProvider { String encoding) throws IOException { + // fast-fail for unsupported charsets as UnsupportedEncodingException may + // not be thrown later (see JDK-8000621) + try { + Charset.forName(encoding); + } catch (IllegalCharsetNameException | UnsupportedCharsetException x) { + throw new UnsupportedEncodingException(encoding); + } DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); DocumentBuilder db = null; try { diff --git a/jdk/src/share/demo/jfc/Font2DTest/Font2DTest.java b/jdk/src/share/demo/jfc/Font2DTest/Font2DTest.java index 1487c428aef..a5398c573bd 100644 --- a/jdk/src/share/demo/jfc/Font2DTest/Font2DTest.java +++ b/jdk/src/share/demo/jfc/Font2DTest/Font2DTest.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1999, 2007, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1999, 2011, Oracle and/or its affiliates. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions diff --git a/jdk/src/share/demo/jfc/Font2DTest/Font2DTestApplet.java b/jdk/src/share/demo/jfc/Font2DTest/Font2DTestApplet.java index 7e663c2bb7c..1292a83cf04 100644 --- a/jdk/src/share/demo/jfc/Font2DTest/Font2DTestApplet.java +++ b/jdk/src/share/demo/jfc/Font2DTest/Font2DTestApplet.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2000, 2001, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2000, 2011, Oracle and/or its affiliates. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions diff --git a/jdk/src/share/demo/jfc/Font2DTest/FontPanel.java b/jdk/src/share/demo/jfc/Font2DTest/FontPanel.java index c939f0b81a7..bb6a17dad96 100644 --- a/jdk/src/share/demo/jfc/Font2DTest/FontPanel.java +++ b/jdk/src/share/demo/jfc/Font2DTest/FontPanel.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2000, 2007, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2000, 2011, Oracle and/or its affiliates. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions diff --git a/jdk/src/share/demo/jfc/Notepad/Notepad.java b/jdk/src/share/demo/jfc/Notepad/Notepad.java index b6c7199e256..301510a154f 100644 --- a/jdk/src/share/demo/jfc/Notepad/Notepad.java +++ b/jdk/src/share/demo/jfc/Notepad/Notepad.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2012, Oracle and/or its affiliates. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions diff --git a/jdk/src/share/demo/jvmti/agent_util/agent_util.c b/jdk/src/share/demo/jvmti/agent_util/agent_util.c index 18558855947..6678ef7d966 100644 --- a/jdk/src/share/demo/jvmti/agent_util/agent_util.c +++ b/jdk/src/share/demo/jvmti/agent_util/agent_util.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 2004, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2004, 2011, Oracle and/or its affiliates. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions diff --git a/jdk/src/share/demo/jvmti/agent_util/agent_util.h b/jdk/src/share/demo/jvmti/agent_util/agent_util.h index 1518e932c87..44882d71216 100644 --- a/jdk/src/share/demo/jvmti/agent_util/agent_util.h +++ b/jdk/src/share/demo/jvmti/agent_util/agent_util.h @@ -1,5 +1,5 @@ /* - * Copyright (c) 2004, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2004, 2011, Oracle and/or its affiliates. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions diff --git a/jdk/src/share/demo/jvmti/compiledMethodLoad/compiledMethodLoad.c b/jdk/src/share/demo/jvmti/compiledMethodLoad/compiledMethodLoad.c index cfc9ab2b5fa..0f78bc953f7 100644 --- a/jdk/src/share/demo/jvmti/compiledMethodLoad/compiledMethodLoad.c +++ b/jdk/src/share/demo/jvmti/compiledMethodLoad/compiledMethodLoad.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2010, 2011, Oracle and/or its affiliates. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions diff --git a/jdk/src/share/demo/jvmti/compiledMethodLoad/sample.makefile.txt b/jdk/src/share/demo/jvmti/compiledMethodLoad/sample.makefile.txt index e214792396f..3c4c5dee595 100644 --- a/jdk/src/share/demo/jvmti/compiledMethodLoad/sample.makefile.txt +++ b/jdk/src/share/demo/jvmti/compiledMethodLoad/sample.makefile.txt @@ -1,5 +1,5 @@ # -# Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2010, 2012, Oracle and/or its affiliates. All rights reserved. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions diff --git a/jdk/src/share/demo/jvmti/gctest/gctest.c b/jdk/src/share/demo/jvmti/gctest/gctest.c index 7d430f4e87f..96fc83d0cb7 100644 --- a/jdk/src/share/demo/jvmti/gctest/gctest.c +++ b/jdk/src/share/demo/jvmti/gctest/gctest.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 2004, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2004, 2011, Oracle and/or its affiliates. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions diff --git a/jdk/src/share/demo/jvmti/gctest/sample.makefile.txt b/jdk/src/share/demo/jvmti/gctest/sample.makefile.txt index 99fa39907ae..5e5d0720bf9 100644 --- a/jdk/src/share/demo/jvmti/gctest/sample.makefile.txt +++ b/jdk/src/share/demo/jvmti/gctest/sample.makefile.txt @@ -1,5 +1,5 @@ # -# Copyright (c) 2004, 2005, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2004, 2012, Oracle and/or its affiliates. All rights reserved. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions diff --git a/jdk/src/share/demo/jvmti/heapTracker/HeapTracker.java b/jdk/src/share/demo/jvmti/heapTracker/HeapTracker.java index 041c88bf878..a7eb362cd20 100644 --- a/jdk/src/share/demo/jvmti/heapTracker/HeapTracker.java +++ b/jdk/src/share/demo/jvmti/heapTracker/HeapTracker.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2004, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2004, 2011, Oracle and/or its affiliates. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions diff --git a/jdk/src/share/demo/jvmti/heapTracker/heapTracker.c b/jdk/src/share/demo/jvmti/heapTracker/heapTracker.c index c1019ade399..ebbcf73de5a 100644 --- a/jdk/src/share/demo/jvmti/heapTracker/heapTracker.c +++ b/jdk/src/share/demo/jvmti/heapTracker/heapTracker.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 2004, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2004, 2011, Oracle and/or its affiliates. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions diff --git a/jdk/src/share/demo/jvmti/heapTracker/heapTracker.h b/jdk/src/share/demo/jvmti/heapTracker/heapTracker.h index b0df4bbf5f9..dcfc4fd8514 100644 --- a/jdk/src/share/demo/jvmti/heapTracker/heapTracker.h +++ b/jdk/src/share/demo/jvmti/heapTracker/heapTracker.h @@ -1,5 +1,5 @@ /* - * Copyright (c) 2004, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2004, 2011, Oracle and/or its affiliates. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions diff --git a/jdk/src/share/demo/jvmti/heapTracker/sample.makefile.txt b/jdk/src/share/demo/jvmti/heapTracker/sample.makefile.txt index a58f7101693..d6e964ff39b 100644 --- a/jdk/src/share/demo/jvmti/heapTracker/sample.makefile.txt +++ b/jdk/src/share/demo/jvmti/heapTracker/sample.makefile.txt @@ -1,5 +1,5 @@ # -# Copyright (c) 2004, 2005, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2004, 2012, Oracle and/or its affiliates. All rights reserved. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions diff --git a/jdk/src/share/demo/jvmti/heapViewer/heapViewer.c b/jdk/src/share/demo/jvmti/heapViewer/heapViewer.c index a6da56d67e1..f6a6e5eb488 100644 --- a/jdk/src/share/demo/jvmti/heapViewer/heapViewer.c +++ b/jdk/src/share/demo/jvmti/heapViewer/heapViewer.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 2004, 2006, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2004, 2011, Oracle and/or its affiliates. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions diff --git a/jdk/src/share/demo/jvmti/heapViewer/sample.makefile.txt b/jdk/src/share/demo/jvmti/heapViewer/sample.makefile.txt index 9f7604668a2..a18c9d1494c 100644 --- a/jdk/src/share/demo/jvmti/heapViewer/sample.makefile.txt +++ b/jdk/src/share/demo/jvmti/heapViewer/sample.makefile.txt @@ -1,5 +1,5 @@ # -# Copyright (c) 2004, 2005, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2004, 2012, Oracle and/or its affiliates. All rights reserved. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions diff --git a/jdk/src/share/demo/jvmti/hprof/debug_malloc.c b/jdk/src/share/demo/jvmti/hprof/debug_malloc.c index a0155c0588b..daf4698ad5e 100644 --- a/jdk/src/share/demo/jvmti/hprof/debug_malloc.c +++ b/jdk/src/share/demo/jvmti/hprof/debug_malloc.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 2004, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2004, 2011, Oracle and/or its affiliates. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions diff --git a/jdk/src/share/demo/jvmti/hprof/debug_malloc.h b/jdk/src/share/demo/jvmti/hprof/debug_malloc.h index d74ff608b2a..2b854770ff4 100644 --- a/jdk/src/share/demo/jvmti/hprof/debug_malloc.h +++ b/jdk/src/share/demo/jvmti/hprof/debug_malloc.h @@ -1,5 +1,5 @@ /* - * Copyright (c) 2004, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2004, 2012, Oracle and/or its affiliates. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions diff --git a/jdk/src/share/demo/jvmti/hprof/hprof.h b/jdk/src/share/demo/jvmti/hprof/hprof.h index 44afbf4c5d9..6e61affce11 100644 --- a/jdk/src/share/demo/jvmti/hprof/hprof.h +++ b/jdk/src/share/demo/jvmti/hprof/hprof.h @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, 2005, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 2011, Oracle and/or its affiliates. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions diff --git a/jdk/src/share/demo/jvmti/hprof/hprof_blocks.c b/jdk/src/share/demo/jvmti/hprof/hprof_blocks.c index 13534a99ab8..ce205bf2ce6 100644 --- a/jdk/src/share/demo/jvmti/hprof/hprof_blocks.c +++ b/jdk/src/share/demo/jvmti/hprof/hprof_blocks.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 2004, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2004, 2011, Oracle and/or its affiliates. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions diff --git a/jdk/src/share/demo/jvmti/hprof/hprof_blocks.h b/jdk/src/share/demo/jvmti/hprof/hprof_blocks.h index e35433e73f6..d6dd6d38091 100644 --- a/jdk/src/share/demo/jvmti/hprof/hprof_blocks.h +++ b/jdk/src/share/demo/jvmti/hprof/hprof_blocks.h @@ -1,5 +1,5 @@ /* - * Copyright (c) 2004, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2004, 2011, Oracle and/or its affiliates. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions diff --git a/jdk/src/share/demo/jvmti/hprof/hprof_check.c b/jdk/src/share/demo/jvmti/hprof/hprof_check.c index c91a54ae840..aef1eb90ef2 100644 --- a/jdk/src/share/demo/jvmti/hprof/hprof_check.c +++ b/jdk/src/share/demo/jvmti/hprof/hprof_check.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 2005, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2005, 2011, Oracle and/or its affiliates. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions diff --git a/jdk/src/share/demo/jvmti/hprof/hprof_check.h b/jdk/src/share/demo/jvmti/hprof/hprof_check.h index 2840bf114c4..02f470773bf 100644 --- a/jdk/src/share/demo/jvmti/hprof/hprof_check.h +++ b/jdk/src/share/demo/jvmti/hprof/hprof_check.h @@ -1,5 +1,5 @@ /* - * Copyright (c) 2005, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2005, 2011, Oracle and/or its affiliates. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions diff --git a/jdk/src/share/demo/jvmti/hprof/hprof_class.c b/jdk/src/share/demo/jvmti/hprof/hprof_class.c index d89a804dbb8..f25f53ad934 100644 --- a/jdk/src/share/demo/jvmti/hprof/hprof_class.c +++ b/jdk/src/share/demo/jvmti/hprof/hprof_class.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, 2005, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 2011, Oracle and/or its affiliates. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions diff --git a/jdk/src/share/demo/jvmti/hprof/hprof_class.h b/jdk/src/share/demo/jvmti/hprof/hprof_class.h index 5bcf1b80f79..6b4bc9c397d 100644 --- a/jdk/src/share/demo/jvmti/hprof/hprof_class.h +++ b/jdk/src/share/demo/jvmti/hprof/hprof_class.h @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, 2005, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 2011, Oracle and/or its affiliates. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions diff --git a/jdk/src/share/demo/jvmti/hprof/hprof_cpu.c b/jdk/src/share/demo/jvmti/hprof/hprof_cpu.c index 358b4784861..5c1b953a401 100644 --- a/jdk/src/share/demo/jvmti/hprof/hprof_cpu.c +++ b/jdk/src/share/demo/jvmti/hprof/hprof_cpu.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, 2005, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 2011, Oracle and/or its affiliates. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions diff --git a/jdk/src/share/demo/jvmti/hprof/hprof_cpu.h b/jdk/src/share/demo/jvmti/hprof/hprof_cpu.h index 6a962390737..e63747ec3dc 100644 --- a/jdk/src/share/demo/jvmti/hprof/hprof_cpu.h +++ b/jdk/src/share/demo/jvmti/hprof/hprof_cpu.h @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, 2004, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 2011, Oracle and/or its affiliates. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions diff --git a/jdk/src/share/demo/jvmti/hprof/hprof_error.c b/jdk/src/share/demo/jvmti/hprof/hprof_error.c index 8088a49b50a..9776a1da4f0 100644 --- a/jdk/src/share/demo/jvmti/hprof/hprof_error.c +++ b/jdk/src/share/demo/jvmti/hprof/hprof_error.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, 2005, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 2011, Oracle and/or its affiliates. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions diff --git a/jdk/src/share/demo/jvmti/hprof/hprof_error.h b/jdk/src/share/demo/jvmti/hprof/hprof_error.h index b82d4ee6b90..6dd06e02ec3 100644 --- a/jdk/src/share/demo/jvmti/hprof/hprof_error.h +++ b/jdk/src/share/demo/jvmti/hprof/hprof_error.h @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, 2004, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 2012, Oracle and/or its affiliates. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions diff --git a/jdk/src/share/demo/jvmti/hprof/hprof_event.c b/jdk/src/share/demo/jvmti/hprof/hprof_event.c index 66d89e76eca..15dd4ddaa76 100644 --- a/jdk/src/share/demo/jvmti/hprof/hprof_event.c +++ b/jdk/src/share/demo/jvmti/hprof/hprof_event.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, 2005, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 2011, Oracle and/or its affiliates. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions diff --git a/jdk/src/share/demo/jvmti/hprof/hprof_event.h b/jdk/src/share/demo/jvmti/hprof/hprof_event.h index 198824a2155..ebc372e8511 100644 --- a/jdk/src/share/demo/jvmti/hprof/hprof_event.h +++ b/jdk/src/share/demo/jvmti/hprof/hprof_event.h @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, 2004, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 2011, Oracle and/or its affiliates. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions diff --git a/jdk/src/share/demo/jvmti/hprof/hprof_frame.c b/jdk/src/share/demo/jvmti/hprof/hprof_frame.c index 284b6a555ae..df99d9aa9d7 100644 --- a/jdk/src/share/demo/jvmti/hprof/hprof_frame.c +++ b/jdk/src/share/demo/jvmti/hprof/hprof_frame.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, 2004, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 2011, Oracle and/or its affiliates. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions diff --git a/jdk/src/share/demo/jvmti/hprof/hprof_frame.h b/jdk/src/share/demo/jvmti/hprof/hprof_frame.h index 8443aee3bb8..5b94414291f 100644 --- a/jdk/src/share/demo/jvmti/hprof/hprof_frame.h +++ b/jdk/src/share/demo/jvmti/hprof/hprof_frame.h @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, 2004, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 2011, Oracle and/or its affiliates. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions diff --git a/jdk/src/share/demo/jvmti/hprof/hprof_init.c b/jdk/src/share/demo/jvmti/hprof/hprof_init.c index e3add30a6c2..9183800c428 100644 --- a/jdk/src/share/demo/jvmti/hprof/hprof_init.c +++ b/jdk/src/share/demo/jvmti/hprof/hprof_init.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, 2005, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 2011, Oracle and/or its affiliates. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions diff --git a/jdk/src/share/demo/jvmti/hprof/hprof_init.h b/jdk/src/share/demo/jvmti/hprof/hprof_init.h index 500491754a9..57018da4fb5 100644 --- a/jdk/src/share/demo/jvmti/hprof/hprof_init.h +++ b/jdk/src/share/demo/jvmti/hprof/hprof_init.h @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, 2004, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 2011, Oracle and/or its affiliates. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions diff --git a/jdk/src/share/demo/jvmti/hprof/hprof_io.c b/jdk/src/share/demo/jvmti/hprof/hprof_io.c index 51c7c25852e..93fc0506c61 100644 --- a/jdk/src/share/demo/jvmti/hprof/hprof_io.c +++ b/jdk/src/share/demo/jvmti/hprof/hprof_io.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, 2008, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 2011, Oracle and/or its affiliates. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions diff --git a/jdk/src/share/demo/jvmti/hprof/hprof_io.h b/jdk/src/share/demo/jvmti/hprof/hprof_io.h index 0cb7d85ab66..66ace64a003 100644 --- a/jdk/src/share/demo/jvmti/hprof/hprof_io.h +++ b/jdk/src/share/demo/jvmti/hprof/hprof_io.h @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, 2005, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 2011, Oracle and/or its affiliates. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions diff --git a/jdk/src/share/demo/jvmti/hprof/hprof_ioname.c b/jdk/src/share/demo/jvmti/hprof/hprof_ioname.c index b14ecb15b8b..2030106fb2f 100644 --- a/jdk/src/share/demo/jvmti/hprof/hprof_ioname.c +++ b/jdk/src/share/demo/jvmti/hprof/hprof_ioname.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, 2004, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 2011, Oracle and/or its affiliates. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions diff --git a/jdk/src/share/demo/jvmti/hprof/hprof_ioname.h b/jdk/src/share/demo/jvmti/hprof/hprof_ioname.h index 03ac0483382..db3e8ff7ad0 100644 --- a/jdk/src/share/demo/jvmti/hprof/hprof_ioname.h +++ b/jdk/src/share/demo/jvmti/hprof/hprof_ioname.h @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, 2004, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 2011, Oracle and/or its affiliates. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions diff --git a/jdk/src/share/demo/jvmti/hprof/hprof_listener.c b/jdk/src/share/demo/jvmti/hprof/hprof_listener.c index f5fb8963987..9e7386bf073 100644 --- a/jdk/src/share/demo/jvmti/hprof/hprof_listener.c +++ b/jdk/src/share/demo/jvmti/hprof/hprof_listener.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, 2004, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 2011, Oracle and/or its affiliates. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions diff --git a/jdk/src/share/demo/jvmti/hprof/hprof_listener.h b/jdk/src/share/demo/jvmti/hprof/hprof_listener.h index 1e82ca537a0..e9a42b1a255 100644 --- a/jdk/src/share/demo/jvmti/hprof/hprof_listener.h +++ b/jdk/src/share/demo/jvmti/hprof/hprof_listener.h @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, 2004, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 2011, Oracle and/or its affiliates. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions diff --git a/jdk/src/share/demo/jvmti/hprof/hprof_loader.c b/jdk/src/share/demo/jvmti/hprof/hprof_loader.c index f0c1f1de896..9592b5ae19f 100644 --- a/jdk/src/share/demo/jvmti/hprof/hprof_loader.c +++ b/jdk/src/share/demo/jvmti/hprof/hprof_loader.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, 2005, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 2011, Oracle and/or its affiliates. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions diff --git a/jdk/src/share/demo/jvmti/hprof/hprof_loader.h b/jdk/src/share/demo/jvmti/hprof/hprof_loader.h index ef15f76037a..8a0bcd9256f 100644 --- a/jdk/src/share/demo/jvmti/hprof/hprof_loader.h +++ b/jdk/src/share/demo/jvmti/hprof/hprof_loader.h @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, 2004, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 2011, Oracle and/or its affiliates. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions diff --git a/jdk/src/share/demo/jvmti/hprof/hprof_md.h b/jdk/src/share/demo/jvmti/hprof/hprof_md.h index 6145a03b5ea..b3e66fe36a6 100644 --- a/jdk/src/share/demo/jvmti/hprof/hprof_md.h +++ b/jdk/src/share/demo/jvmti/hprof/hprof_md.h @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, 2005, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 2011, Oracle and/or its affiliates. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions diff --git a/jdk/src/share/demo/jvmti/hprof/hprof_monitor.c b/jdk/src/share/demo/jvmti/hprof/hprof_monitor.c index 65495df5991..d0ef3ec4a38 100644 --- a/jdk/src/share/demo/jvmti/hprof/hprof_monitor.c +++ b/jdk/src/share/demo/jvmti/hprof/hprof_monitor.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, 2005, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 2011, Oracle and/or its affiliates. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions diff --git a/jdk/src/share/demo/jvmti/hprof/hprof_monitor.h b/jdk/src/share/demo/jvmti/hprof/hprof_monitor.h index 13561633c61..cb379d2e913 100644 --- a/jdk/src/share/demo/jvmti/hprof/hprof_monitor.h +++ b/jdk/src/share/demo/jvmti/hprof/hprof_monitor.h @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, 2004, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 2011, Oracle and/or its affiliates. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions diff --git a/jdk/src/share/demo/jvmti/hprof/hprof_object.c b/jdk/src/share/demo/jvmti/hprof/hprof_object.c index ce21c23e2ce..8b80c53f830 100644 --- a/jdk/src/share/demo/jvmti/hprof/hprof_object.c +++ b/jdk/src/share/demo/jvmti/hprof/hprof_object.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, 2005, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 2011, Oracle and/or its affiliates. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions diff --git a/jdk/src/share/demo/jvmti/hprof/hprof_object.h b/jdk/src/share/demo/jvmti/hprof/hprof_object.h index ccbf8e03e27..bc274046f2f 100644 --- a/jdk/src/share/demo/jvmti/hprof/hprof_object.h +++ b/jdk/src/share/demo/jvmti/hprof/hprof_object.h @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, 2005, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 2011, Oracle and/or its affiliates. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions diff --git a/jdk/src/share/demo/jvmti/hprof/hprof_reference.c b/jdk/src/share/demo/jvmti/hprof/hprof_reference.c index e7a668d7f1e..3905fbaba1f 100644 --- a/jdk/src/share/demo/jvmti/hprof/hprof_reference.c +++ b/jdk/src/share/demo/jvmti/hprof/hprof_reference.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, 2005, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 2011, Oracle and/or its affiliates. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions diff --git a/jdk/src/share/demo/jvmti/hprof/hprof_reference.h b/jdk/src/share/demo/jvmti/hprof/hprof_reference.h index 2464f58ed2d..1569cf97c95 100644 --- a/jdk/src/share/demo/jvmti/hprof/hprof_reference.h +++ b/jdk/src/share/demo/jvmti/hprof/hprof_reference.h @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, 2005, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 2011, Oracle and/or its affiliates. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions diff --git a/jdk/src/share/demo/jvmti/hprof/hprof_site.c b/jdk/src/share/demo/jvmti/hprof/hprof_site.c index f1ae184c6fb..4129710b2bb 100644 --- a/jdk/src/share/demo/jvmti/hprof/hprof_site.c +++ b/jdk/src/share/demo/jvmti/hprof/hprof_site.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, 2006, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 2011, Oracle and/or its affiliates. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions diff --git a/jdk/src/share/demo/jvmti/hprof/hprof_site.h b/jdk/src/share/demo/jvmti/hprof/hprof_site.h index b9229815b5f..ae65521fcf2 100644 --- a/jdk/src/share/demo/jvmti/hprof/hprof_site.h +++ b/jdk/src/share/demo/jvmti/hprof/hprof_site.h @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, 2004, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 2011, Oracle and/or its affiliates. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions diff --git a/jdk/src/share/demo/jvmti/hprof/hprof_stack.c b/jdk/src/share/demo/jvmti/hprof/hprof_stack.c index 2f0127c49c1..3bf69ddc899 100644 --- a/jdk/src/share/demo/jvmti/hprof/hprof_stack.c +++ b/jdk/src/share/demo/jvmti/hprof/hprof_stack.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, 2004, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 2011, Oracle and/or its affiliates. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions diff --git a/jdk/src/share/demo/jvmti/hprof/hprof_stack.h b/jdk/src/share/demo/jvmti/hprof/hprof_stack.h index 32efdceeb12..33e66450e8d 100644 --- a/jdk/src/share/demo/jvmti/hprof/hprof_stack.h +++ b/jdk/src/share/demo/jvmti/hprof/hprof_stack.h @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, 2004, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 2011, Oracle and/or its affiliates. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions diff --git a/jdk/src/share/demo/jvmti/hprof/hprof_string.c b/jdk/src/share/demo/jvmti/hprof/hprof_string.c index f2f53a4ce88..4db8ef7a29d 100644 --- a/jdk/src/share/demo/jvmti/hprof/hprof_string.c +++ b/jdk/src/share/demo/jvmti/hprof/hprof_string.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, 2004, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 2011, Oracle and/or its affiliates. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions diff --git a/jdk/src/share/demo/jvmti/hprof/hprof_string.h b/jdk/src/share/demo/jvmti/hprof/hprof_string.h index 13e4f42c52d..bea45e69a3b 100644 --- a/jdk/src/share/demo/jvmti/hprof/hprof_string.h +++ b/jdk/src/share/demo/jvmti/hprof/hprof_string.h @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, 2004, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 2011, Oracle and/or its affiliates. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions diff --git a/jdk/src/share/demo/jvmti/hprof/hprof_table.c b/jdk/src/share/demo/jvmti/hprof/hprof_table.c index c2c205eb939..83727ef8597 100644 --- a/jdk/src/share/demo/jvmti/hprof/hprof_table.c +++ b/jdk/src/share/demo/jvmti/hprof/hprof_table.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, 2005, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 2012, Oracle and/or its affiliates. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions diff --git a/jdk/src/share/demo/jvmti/hprof/hprof_table.h b/jdk/src/share/demo/jvmti/hprof/hprof_table.h index 84e3acd093a..cee0af9b4c3 100644 --- a/jdk/src/share/demo/jvmti/hprof/hprof_table.h +++ b/jdk/src/share/demo/jvmti/hprof/hprof_table.h @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, 2004, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 2011, Oracle and/or its affiliates. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions diff --git a/jdk/src/share/demo/jvmti/hprof/hprof_tag.c b/jdk/src/share/demo/jvmti/hprof/hprof_tag.c index 363be9a5502..d4dc64bf8e0 100644 --- a/jdk/src/share/demo/jvmti/hprof/hprof_tag.c +++ b/jdk/src/share/demo/jvmti/hprof/hprof_tag.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, 2005, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 2011, Oracle and/or its affiliates. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions diff --git a/jdk/src/share/demo/jvmti/hprof/hprof_tag.h b/jdk/src/share/demo/jvmti/hprof/hprof_tag.h index 14ef616899e..c20cad9ee16 100644 --- a/jdk/src/share/demo/jvmti/hprof/hprof_tag.h +++ b/jdk/src/share/demo/jvmti/hprof/hprof_tag.h @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, 2004, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 2011, Oracle and/or its affiliates. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions diff --git a/jdk/src/share/demo/jvmti/hprof/hprof_tls.c b/jdk/src/share/demo/jvmti/hprof/hprof_tls.c index 3c62aacf268..ac6b31a6127 100644 --- a/jdk/src/share/demo/jvmti/hprof/hprof_tls.c +++ b/jdk/src/share/demo/jvmti/hprof/hprof_tls.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, 2005, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 2011, Oracle and/or its affiliates. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions diff --git a/jdk/src/share/demo/jvmti/hprof/hprof_tls.h b/jdk/src/share/demo/jvmti/hprof/hprof_tls.h index 695e78a4096..61f60d33094 100644 --- a/jdk/src/share/demo/jvmti/hprof/hprof_tls.h +++ b/jdk/src/share/demo/jvmti/hprof/hprof_tls.h @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, 2005, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 2011, Oracle and/or its affiliates. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions diff --git a/jdk/src/share/demo/jvmti/hprof/hprof_trace.c b/jdk/src/share/demo/jvmti/hprof/hprof_trace.c index e56bfe9d417..698e1037d75 100644 --- a/jdk/src/share/demo/jvmti/hprof/hprof_trace.c +++ b/jdk/src/share/demo/jvmti/hprof/hprof_trace.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, 2005, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 2011, Oracle and/or its affiliates. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions diff --git a/jdk/src/share/demo/jvmti/hprof/hprof_trace.h b/jdk/src/share/demo/jvmti/hprof/hprof_trace.h index b24ac1ee4c9..1d8f7297d25 100644 --- a/jdk/src/share/demo/jvmti/hprof/hprof_trace.h +++ b/jdk/src/share/demo/jvmti/hprof/hprof_trace.h @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, 2004, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 2011, Oracle and/or its affiliates. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions diff --git a/jdk/src/share/demo/jvmti/hprof/hprof_tracker.c b/jdk/src/share/demo/jvmti/hprof/hprof_tracker.c index 56e1125122d..e807a192239 100644 --- a/jdk/src/share/demo/jvmti/hprof/hprof_tracker.c +++ b/jdk/src/share/demo/jvmti/hprof/hprof_tracker.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, 2005, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 2011, Oracle and/or its affiliates. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions diff --git a/jdk/src/share/demo/jvmti/hprof/hprof_tracker.h b/jdk/src/share/demo/jvmti/hprof/hprof_tracker.h index 9aec0820a58..57de554fc32 100644 --- a/jdk/src/share/demo/jvmti/hprof/hprof_tracker.h +++ b/jdk/src/share/demo/jvmti/hprof/hprof_tracker.h @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, 2004, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 2011, Oracle and/or its affiliates. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions diff --git a/jdk/src/share/demo/jvmti/hprof/hprof_util.c b/jdk/src/share/demo/jvmti/hprof/hprof_util.c index 0a191172a9f..59ce144e865 100644 --- a/jdk/src/share/demo/jvmti/hprof/hprof_util.c +++ b/jdk/src/share/demo/jvmti/hprof/hprof_util.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, 2008, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 2011, Oracle and/or its affiliates. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions diff --git a/jdk/src/share/demo/jvmti/hprof/hprof_util.h b/jdk/src/share/demo/jvmti/hprof/hprof_util.h index 588570ce64b..e85c6b91c48 100644 --- a/jdk/src/share/demo/jvmti/hprof/hprof_util.h +++ b/jdk/src/share/demo/jvmti/hprof/hprof_util.h @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, 2006, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 2012, Oracle and/or its affiliates. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions diff --git a/jdk/src/share/demo/jvmti/hprof/sample.makefile.txt b/jdk/src/share/demo/jvmti/hprof/sample.makefile.txt index 8da8100a720..e8f84dc8577 100644 --- a/jdk/src/share/demo/jvmti/hprof/sample.makefile.txt +++ b/jdk/src/share/demo/jvmti/hprof/sample.makefile.txt @@ -1,5 +1,5 @@ # -# Copyright (c) 2004, 2010, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2004, 2012, Oracle and/or its affiliates. All rights reserved. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions diff --git a/jdk/src/share/demo/jvmti/java_crw_demo/java_crw_demo.c b/jdk/src/share/demo/jvmti/java_crw_demo/java_crw_demo.c index 772548de165..cd6d1040f50 100644 --- a/jdk/src/share/demo/jvmti/java_crw_demo/java_crw_demo.c +++ b/jdk/src/share/demo/jvmti/java_crw_demo/java_crw_demo.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, 2009, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 2012, Oracle and/or its affiliates. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions diff --git a/jdk/src/share/demo/jvmti/java_crw_demo/java_crw_demo.h b/jdk/src/share/demo/jvmti/java_crw_demo/java_crw_demo.h index 06b6e01bb3a..e2626784341 100644 --- a/jdk/src/share/demo/jvmti/java_crw_demo/java_crw_demo.h +++ b/jdk/src/share/demo/jvmti/java_crw_demo/java_crw_demo.h @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, 2004, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 2011, Oracle and/or its affiliates. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions diff --git a/jdk/src/share/demo/jvmti/java_crw_demo/sample.makefile.txt b/jdk/src/share/demo/jvmti/java_crw_demo/sample.makefile.txt index a2ec685554e..35dbbe4b5e0 100644 --- a/jdk/src/share/demo/jvmti/java_crw_demo/sample.makefile.txt +++ b/jdk/src/share/demo/jvmti/java_crw_demo/sample.makefile.txt @@ -1,5 +1,5 @@ # -# Copyright (c) 2004, 2005, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2004, 2012, Oracle and/or its affiliates. All rights reserved. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions diff --git a/jdk/src/share/demo/jvmti/minst/Minst.java b/jdk/src/share/demo/jvmti/minst/Minst.java index c75edfe6734..2826cea04ba 100644 --- a/jdk/src/share/demo/jvmti/minst/Minst.java +++ b/jdk/src/share/demo/jvmti/minst/Minst.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2006, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2006, 2011, Oracle and/or its affiliates. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions diff --git a/jdk/src/share/demo/jvmti/minst/minst.c b/jdk/src/share/demo/jvmti/minst/minst.c index e811c63ac25..45da43ea458 100644 --- a/jdk/src/share/demo/jvmti/minst/minst.c +++ b/jdk/src/share/demo/jvmti/minst/minst.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 2006, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2006, 2011, Oracle and/or its affiliates. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions diff --git a/jdk/src/share/demo/jvmti/minst/minst.h b/jdk/src/share/demo/jvmti/minst/minst.h index 8ffc14ce6ec..b7cf45a89bf 100644 --- a/jdk/src/share/demo/jvmti/minst/minst.h +++ b/jdk/src/share/demo/jvmti/minst/minst.h @@ -1,5 +1,5 @@ /* - * Copyright (c) 2006, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2006, 2011, Oracle and/or its affiliates. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions diff --git a/jdk/src/share/demo/jvmti/minst/sample.makefile.txt b/jdk/src/share/demo/jvmti/minst/sample.makefile.txt index 42da35be3ab..94bb4c56ccc 100644 --- a/jdk/src/share/demo/jvmti/minst/sample.makefile.txt +++ b/jdk/src/share/demo/jvmti/minst/sample.makefile.txt @@ -1,5 +1,5 @@ # -# Copyright (c) 2006, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2006, 2012, Oracle and/or its affiliates. All rights reserved. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions diff --git a/jdk/src/share/demo/jvmti/mtrace/Mtrace.java b/jdk/src/share/demo/jvmti/mtrace/Mtrace.java index 061400a1f8b..ecebf75a450 100644 --- a/jdk/src/share/demo/jvmti/mtrace/Mtrace.java +++ b/jdk/src/share/demo/jvmti/mtrace/Mtrace.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2004, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2004, 2011, Oracle and/or its affiliates. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions diff --git a/jdk/src/share/demo/jvmti/mtrace/mtrace.c b/jdk/src/share/demo/jvmti/mtrace/mtrace.c index 4a43b54f93b..05686a7ec70 100644 --- a/jdk/src/share/demo/jvmti/mtrace/mtrace.c +++ b/jdk/src/share/demo/jvmti/mtrace/mtrace.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 2004, 2005, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2004, 2011, Oracle and/or its affiliates. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions diff --git a/jdk/src/share/demo/jvmti/mtrace/mtrace.h b/jdk/src/share/demo/jvmti/mtrace/mtrace.h index 15c0824017c..c3130b88952 100644 --- a/jdk/src/share/demo/jvmti/mtrace/mtrace.h +++ b/jdk/src/share/demo/jvmti/mtrace/mtrace.h @@ -1,5 +1,5 @@ /* - * Copyright (c) 2004, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2004, 2011, Oracle and/or its affiliates. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions diff --git a/jdk/src/share/demo/jvmti/mtrace/sample.makefile.txt b/jdk/src/share/demo/jvmti/mtrace/sample.makefile.txt index b1032825e7b..46ceb7e59ef 100644 --- a/jdk/src/share/demo/jvmti/mtrace/sample.makefile.txt +++ b/jdk/src/share/demo/jvmti/mtrace/sample.makefile.txt @@ -1,5 +1,5 @@ # -# Copyright (c) 2004, 2005, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2004, 2012, Oracle and/or its affiliates. All rights reserved. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions diff --git a/jdk/src/share/demo/jvmti/versionCheck/sample.makefile.txt b/jdk/src/share/demo/jvmti/versionCheck/sample.makefile.txt index 9b7abd4c014..7a586ed734c 100644 --- a/jdk/src/share/demo/jvmti/versionCheck/sample.makefile.txt +++ b/jdk/src/share/demo/jvmti/versionCheck/sample.makefile.txt @@ -1,5 +1,5 @@ # -# Copyright (c) 2004, 2005, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2004, 2012, Oracle and/or its affiliates. All rights reserved. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions diff --git a/jdk/src/share/demo/jvmti/versionCheck/versionCheck.c b/jdk/src/share/demo/jvmti/versionCheck/versionCheck.c index b49d7b8209d..441e488a821 100644 --- a/jdk/src/share/demo/jvmti/versionCheck/versionCheck.c +++ b/jdk/src/share/demo/jvmti/versionCheck/versionCheck.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 2004, 2005, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2004, 2011, Oracle and/or its affiliates. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions diff --git a/jdk/src/share/demo/jvmti/waiters/Agent.cpp b/jdk/src/share/demo/jvmti/waiters/Agent.cpp index 4fd87d0015d..cf2285c6ca6 100644 --- a/jdk/src/share/demo/jvmti/waiters/Agent.cpp +++ b/jdk/src/share/demo/jvmti/waiters/Agent.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2004, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2004, 2011, Oracle and/or its affiliates. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions diff --git a/jdk/src/share/demo/jvmti/waiters/Agent.hpp b/jdk/src/share/demo/jvmti/waiters/Agent.hpp index c508863cf0c..20f03229ef9 100644 --- a/jdk/src/share/demo/jvmti/waiters/Agent.hpp +++ b/jdk/src/share/demo/jvmti/waiters/Agent.hpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2004, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2004, 2011, Oracle and/or its affiliates. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions diff --git a/jdk/src/share/demo/jvmti/waiters/Monitor.cpp b/jdk/src/share/demo/jvmti/waiters/Monitor.cpp index a99d5a6fa1f..db215c8b7b7 100644 --- a/jdk/src/share/demo/jvmti/waiters/Monitor.cpp +++ b/jdk/src/share/demo/jvmti/waiters/Monitor.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2004, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2004, 2011, Oracle and/or its affiliates. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions diff --git a/jdk/src/share/demo/jvmti/waiters/Monitor.hpp b/jdk/src/share/demo/jvmti/waiters/Monitor.hpp index cd5444b2476..f067e8c65c8 100644 --- a/jdk/src/share/demo/jvmti/waiters/Monitor.hpp +++ b/jdk/src/share/demo/jvmti/waiters/Monitor.hpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2004, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2004, 2011, Oracle and/or its affiliates. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions diff --git a/jdk/src/share/demo/jvmti/waiters/Thread.cpp b/jdk/src/share/demo/jvmti/waiters/Thread.cpp index ca9056710ca..065a40dd516 100644 --- a/jdk/src/share/demo/jvmti/waiters/Thread.cpp +++ b/jdk/src/share/demo/jvmti/waiters/Thread.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2004, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2004, 2011, Oracle and/or its affiliates. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions diff --git a/jdk/src/share/demo/jvmti/waiters/Thread.hpp b/jdk/src/share/demo/jvmti/waiters/Thread.hpp index 32697c04cd7..0ad661521e6 100644 --- a/jdk/src/share/demo/jvmti/waiters/Thread.hpp +++ b/jdk/src/share/demo/jvmti/waiters/Thread.hpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2004, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2004, 2011, Oracle and/or its affiliates. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions diff --git a/jdk/src/share/demo/jvmti/waiters/sample.makefile.txt b/jdk/src/share/demo/jvmti/waiters/sample.makefile.txt index 68ac497e7a1..51cbca4a395 100644 --- a/jdk/src/share/demo/jvmti/waiters/sample.makefile.txt +++ b/jdk/src/share/demo/jvmti/waiters/sample.makefile.txt @@ -1,5 +1,5 @@ # -# Copyright (c) 2004, 2005, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2004, 2012, Oracle and/or its affiliates. All rights reserved. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions diff --git a/jdk/src/share/demo/jvmti/waiters/waiters.cpp b/jdk/src/share/demo/jvmti/waiters/waiters.cpp index c6d34c3dafb..34b79f38308 100644 --- a/jdk/src/share/demo/jvmti/waiters/waiters.cpp +++ b/jdk/src/share/demo/jvmti/waiters/waiters.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2004, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2004, 2011, Oracle and/or its affiliates. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions diff --git a/jdk/src/share/demo/management/FullThreadDump/Deadlock.java b/jdk/src/share/demo/management/FullThreadDump/Deadlock.java index 452335f97a1..85668ee50da 100644 --- a/jdk/src/share/demo/management/FullThreadDump/Deadlock.java +++ b/jdk/src/share/demo/management/FullThreadDump/Deadlock.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2004, 2005, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2004, 2011, Oracle and/or its affiliates. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions diff --git a/jdk/src/share/demo/management/FullThreadDump/FullThreadDump.java b/jdk/src/share/demo/management/FullThreadDump/FullThreadDump.java index 09e85ee5afa..ba46eeb828c 100644 --- a/jdk/src/share/demo/management/FullThreadDump/FullThreadDump.java +++ b/jdk/src/share/demo/management/FullThreadDump/FullThreadDump.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2004, 2005, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2004, 2011, Oracle and/or its affiliates. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions diff --git a/jdk/src/share/demo/management/FullThreadDump/ThreadMonitor.java b/jdk/src/share/demo/management/FullThreadDump/ThreadMonitor.java index 2942ce1aa2a..05846e7c182 100644 --- a/jdk/src/share/demo/management/FullThreadDump/ThreadMonitor.java +++ b/jdk/src/share/demo/management/FullThreadDump/ThreadMonitor.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2004, 2005, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2004, 2011, Oracle and/or its affiliates. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions diff --git a/jdk/src/share/demo/management/JTop/JTop.java b/jdk/src/share/demo/management/JTop/JTop.java index 4c1539d883c..e3703c6872f 100644 --- a/jdk/src/share/demo/management/JTop/JTop.java +++ b/jdk/src/share/demo/management/JTop/JTop.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2005, 2006, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2005, 2011, Oracle and/or its affiliates. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions diff --git a/jdk/src/share/demo/management/JTop/JTopPlugin.java b/jdk/src/share/demo/management/JTop/JTopPlugin.java index 478d865252e..785bb328db4 100644 --- a/jdk/src/share/demo/management/JTop/JTopPlugin.java +++ b/jdk/src/share/demo/management/JTop/JTopPlugin.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2006, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2006, 2011, Oracle and/or its affiliates. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions diff --git a/jdk/src/share/demo/management/MemoryMonitor/MemoryMonitor.java b/jdk/src/share/demo/management/MemoryMonitor/MemoryMonitor.java index 7dd0b7c551f..3d2769b917a 100644 --- a/jdk/src/share/demo/management/MemoryMonitor/MemoryMonitor.java +++ b/jdk/src/share/demo/management/MemoryMonitor/MemoryMonitor.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2004, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2004, 2012, Oracle and/or its affiliates. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions diff --git a/jdk/src/share/demo/management/MemoryMonitor/README.txt b/jdk/src/share/demo/management/MemoryMonitor/README.txt index 2009e1339e2..5a421dbdc90 100644 --- a/jdk/src/share/demo/management/MemoryMonitor/README.txt +++ b/jdk/src/share/demo/management/MemoryMonitor/README.txt @@ -1,5 +1,5 @@ # -# Copyright (c) 2004, 2007, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2004, 2012, Oracle and/or its affiliates. All rights reserved. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions diff --git a/jdk/src/share/demo/management/VerboseGC/PrintGCStat.java b/jdk/src/share/demo/management/VerboseGC/PrintGCStat.java index d3f84df997a..565c8dc5c2c 100644 --- a/jdk/src/share/demo/management/VerboseGC/PrintGCStat.java +++ b/jdk/src/share/demo/management/VerboseGC/PrintGCStat.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2004, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2004, 2011, Oracle and/or its affiliates. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions diff --git a/jdk/src/share/demo/management/VerboseGC/VerboseGC.java b/jdk/src/share/demo/management/VerboseGC/VerboseGC.java index b70cebb0f05..57f78b8a53a 100644 --- a/jdk/src/share/demo/management/VerboseGC/VerboseGC.java +++ b/jdk/src/share/demo/management/VerboseGC/VerboseGC.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2004, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2004, 2011, Oracle and/or its affiliates. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions diff --git a/jdk/src/share/demo/nbproject/project.xml b/jdk/src/share/demo/nbproject/project.xml index 43667547ddf..f52bd1ca9f7 100644 --- a/jdk/src/share/demo/nbproject/project.xml +++ b/jdk/src/share/demo/nbproject/project.xml @@ -1,7 +1,7 @@ DIGIT EIGHT keysym2UCSHash.put( (long)0xFFB9, (char)0x0039); // XK_KP_9 --> DIGIT NINE keysym2UCSHash.put( (long)0xFE20, (char)0x0009); // XK_ISO_Left_Tab --> + keysym2UCSHash.put( (long)0xFE50, (char)0x02CB); // XK_dead_grave --> MODIFIER LETTER GRAVE ACCENT + keysym2UCSHash.put( (long)0xFE51, (char)0x02CA); // XK_dead_acute --> MODIFIER LETTER ACUTE ACCENT + keysym2UCSHash.put( (long)0xFE52, (char)0x02C6); // XK_dead_circumflex --> MODIFIER LETTER CIRCUMFLEX ACCENT + keysym2UCSHash.put( (long)0xFE53, (char)0x02DC); // XK_dead_tilde --> SMALL TILDE + keysym2UCSHash.put( (long)0xFE54, (char)0x02C9); // XK_dead_macron --> MODIFIER LETTER MACRON + keysym2UCSHash.put( (long)0xFE55, (char)0x02D8); // XK_dead_breve --> BREVE + keysym2UCSHash.put( (long)0xFE56, (char)0x02D9); // XK_dead_abovedot --> DOT ABOVE + keysym2UCSHash.put( (long)0xFE57, (char)0x00A8); // XK_dead_diaeresis --> DIAERESIS + keysym2UCSHash.put( (long)0xFE58, (char)0x02DA); // XK_dead_abovering --> RING ABOVE + keysym2UCSHash.put( (long)0xFE59, (char)0x02DD); // XK_dead_doubleacute --> DOUBLE ACUTE ACCENT + keysym2UCSHash.put( (long)0xFE5A, (char)0x02C7); // XK_dead_caron --> CARON + keysym2UCSHash.put( (long)0xFE5B, (char)0x00B8); // XK_dead_cedilla --> CEDILLA + keysym2UCSHash.put( (long)0xFE5C, (char)0x02DB); // XK_dead_ogonek --> OGONEK + keysym2UCSHash.put( (long)0xFE5D, (char)0x0269); // XK_dead_iota --> LATIN SMALL LETTER IOTA + keysym2UCSHash.put( (long)0xFE5E, (char)0x3099); // XK_dead_voiced_sound --> COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK + keysym2UCSHash.put( (long)0xFE5F, (char)0x309A); // XK_dead_semivoiced_sound --> COMBINING KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK + keysym2UCSHash.put( (long)0xFE60, (char)0x0323); // XK_dead_belowdot --> COMBINING DOT BELOW + keysym2UCSHash.put( (long)0xFE61, (char)0x0321); // XK_dead_hook --> COMBINING PALATALIZED HOOK BELOW + keysym2UCSHash.put( (long)0xFE62, (char)0x031B); // XK_dead_horn --> COMBINING HORN keysym2UCSHash.put( (long)0x1a1, (char)0x0104); // XK_Aogonek --> LATIN CAPITAL LETTER A WITH OGONEK keysym2UCSHash.put( (long)0x1a2, (char)0x02d8); // XK_breve --> BREVE keysym2UCSHash.put( (long)0x1a3, (char)0x0141); // XK_Lstroke --> LATIN CAPITAL LETTER L WITH STROKE diff --git a/jdk/src/solaris/classes/sun/awt/X11/XWindow.java b/jdk/src/solaris/classes/sun/awt/X11/XWindow.java index a4c039c2074..0eebbd45c9a 100644 --- a/jdk/src/solaris/classes/sun/awt/X11/XWindow.java +++ b/jdk/src/solaris/classes/sun/awt/X11/XWindow.java @@ -1115,7 +1115,10 @@ public class XWindow extends XBaseWindow implements X11ComponentPeer { // (1) either XIM could not handle it or // (2) it was Latin 1:1 mapping. // - XKeysym.Keysym2JavaKeycode jkc = XKeysym.getJavaKeycode(ev); + // Preserve modifiers to get Java key code for dead keys + boolean isDeadKey = isDeadKey(keysym[0]); + XKeysym.Keysym2JavaKeycode jkc = isDeadKey ? XKeysym.getJavaKeycode(keysym[0]) + : XKeysym.getJavaKeycode(ev); if( jkc == null ) { jkc = new XKeysym.Keysym2JavaKeycode(java.awt.event.KeyEvent.VK_UNDEFINED, java.awt.event.KeyEvent.KEY_LOCATION_UNKNOWN); } @@ -1141,7 +1144,7 @@ public class XWindow extends XBaseWindow implements X11ComponentPeer { jkc.getJavaKeycode(); postKeyEvent( java.awt.event.KeyEvent.KEY_PRESSED, ev.get_time(), - jkeyToReturn, + isDeadKey ? jkeyExtended : jkeyToReturn, (unicodeKey == 0 ? java.awt.event.KeyEvent.CHAR_UNDEFINED : unicodeKey), jkc.getKeyLocation(), ev.get_state(),ev.getPData(), XKeyEvent.getSize(), (long)(ev.get_keycode()), @@ -1149,7 +1152,7 @@ public class XWindow extends XBaseWindow implements X11ComponentPeer { jkeyExtended); - if( unicodeKey > 0 ) { + if (unicodeKey > 0 && !isDeadKey) { keyEventLog.fine("fire _TYPED on "+unicodeKey); postKeyEvent( java.awt.event.KeyEvent.KEY_TYPED, ev.get_time(), @@ -1176,9 +1179,7 @@ public class XWindow extends XBaseWindow implements X11ComponentPeer { } // un-private it if you need to call it from elsewhere private void handleKeyRelease(XKeyEvent ev) { - long keysym[] = new long[2]; int unicodeKey = 0; - keysym[0] = XConstants.NoSymbol; if (keyEventLog.isLoggable(PlatformLogger.FINE)) { logIncomingKeyEvent( ev ); @@ -1187,7 +1188,11 @@ public class XWindow extends XBaseWindow implements X11ComponentPeer { // and Java KeyEvent keycode should be calculated. // For release we should post released event. // - XKeysym.Keysym2JavaKeycode jkc = XKeysym.getJavaKeycode(ev); + // Preserve modifiers to get Java key code for dead keys + long keysym = xkeycodeToKeysym(ev); + boolean isDeadKey = isDeadKey(keysym); + XKeysym.Keysym2JavaKeycode jkc = isDeadKey ? XKeysym.getJavaKeycode(keysym) + : XKeysym.getJavaKeycode(ev); if( jkc == null ) { jkc = new XKeysym.Keysym2JavaKeycode(java.awt.event.KeyEvent.VK_UNDEFINED, java.awt.event.KeyEvent.KEY_LOCATION_UNKNOWN); } @@ -1219,7 +1224,7 @@ public class XWindow extends XBaseWindow implements X11ComponentPeer { jkc.getJavaKeycode(); postKeyEvent( java.awt.event.KeyEvent.KEY_RELEASED, ev.get_time(), - jkeyToReturn, + isDeadKey ? jkeyExtended : jkeyToReturn, (unicodeKey == 0 ? java.awt.event.KeyEvent.CHAR_UNDEFINED : unicodeKey), jkc.getKeyLocation(), ev.get_state(),ev.getPData(), XKeyEvent.getSize(), (long)(ev.get_keycode()), @@ -1229,6 +1234,11 @@ public class XWindow extends XBaseWindow implements X11ComponentPeer { } + + private boolean isDeadKey(long keysym){ + return XKeySymConstants.XK_dead_grave <= keysym && keysym <= XKeySymConstants.XK_dead_semivoiced_sound; + } + /* * XmNiconic and Map/UnmapNotify (that XmNiconic relies on) are * unreliable, since mapping changes can happen for a virtual desktop diff --git a/jdk/src/solaris/classes/sun/awt/X11/keysym2ucs.h b/jdk/src/solaris/classes/sun/awt/X11/keysym2ucs.h index deb7a8d0864..f8168876f72 100644 --- a/jdk/src/solaris/classes/sun/awt/X11/keysym2ucs.h +++ b/jdk/src/solaris/classes/sun/awt/X11/keysym2ucs.h @@ -695,25 +695,25 @@ SOFTWARE. 0x0000 #define XK_ISO_Center_Object 0xFE33 0x0000 #define XK_ISO_Enter 0xFE34 -0x0000 #define XK_dead_grave 0xFE50 -0x0000 #define XK_dead_acute 0xFE51 -0x0000 #define XK_dead_circumflex 0xFE52 -0x0000 #define XK_dead_tilde 0xFE53 -0x0000 #define XK_dead_macron 0xFE54 -0x0000 #define XK_dead_breve 0xFE55 -0x0000 #define XK_dead_abovedot 0xFE56 -0x0000 #define XK_dead_diaeresis 0xFE57 -0x0000 #define XK_dead_abovering 0xFE58 -0x0000 #define XK_dead_doubleacute 0xFE59 -0x0000 #define XK_dead_caron 0xFE5A -0x0000 #define XK_dead_cedilla 0xFE5B -0x0000 #define XK_dead_ogonek 0xFE5C -0x0000 #define XK_dead_iota 0xFE5D -0x0000 #define XK_dead_voiced_sound 0xFE5E -0x0000 #define XK_dead_semivoiced_sound 0xFE5F -0x0000 #define XK_dead_belowdot 0xFE60 -0x0000 #define XK_dead_hook 0xFE61 -0x0000 #define XK_dead_horn 0xFE62 +0x02CB #define XK_dead_grave 0xFE50 +0x02CA #define XK_dead_acute 0xFE51 +0x02C6 #define XK_dead_circumflex 0xFE52 +0x02DC #define XK_dead_tilde 0xFE53 +0x02C9 #define XK_dead_macron 0xFE54 +0x02D8 #define XK_dead_breve 0xFE55 +0x02D9 #define XK_dead_abovedot 0xFE56 +0x00A8 #define XK_dead_diaeresis 0xFE57 +0x02DA #define XK_dead_abovering 0xFE58 +0x02DD #define XK_dead_doubleacute 0xFE59 +0x02C7 #define XK_dead_caron 0xFE5A +0x00B8 #define XK_dead_cedilla 0xFE5B +0x02DB #define XK_dead_ogonek 0xFE5C +0x0269 #define XK_dead_iota 0xFE5D +0x3099 #define XK_dead_voiced_sound 0xFE5E +0x309A #define XK_dead_semivoiced_sound 0xFE5F +0x0323 #define XK_dead_belowdot 0xFE60 +0x0321 #define XK_dead_hook 0xFE61 +0x031B #define XK_dead_horn 0xFE62 0x0000 #define XK_First_Virtual_Screen 0xFED0 0x0000 #define XK_Prev_Virtual_Screen 0xFED1 @@ -2466,6 +2466,7 @@ tojava keysym2JavaKeycodeHash.put( Long.valueOf(XKeySymConstants.XK_Alt_ tojava keysym2JavaKeycodeHash.put( Long.valueOf(XKeySymConstants.XK_Meta_L), new Keysym2JavaKeycode(java.awt.event.KeyEvent.VK_META, java.awt.event.KeyEvent.KEY_LOCATION_LEFT)); tojava keysym2JavaKeycodeHash.put( Long.valueOf(XKeySymConstants.XK_Meta_R), new Keysym2JavaKeycode(java.awt.event.KeyEvent.VK_META, java.awt.event.KeyEvent.KEY_LOCATION_RIGHT)); tojava keysym2JavaKeycodeHash.put( Long.valueOf(XKeySymConstants.XK_Caps_Lock), new Keysym2JavaKeycode(java.awt.event.KeyEvent.VK_CAPS_LOCK, java.awt.event.KeyEvent.KEY_LOCATION_STANDARD)); +tojava keysym2JavaKeycodeHash.put( Long.valueOf(XKeySymConstants.XK_Shift_Lock), new Keysym2JavaKeycode(java.awt.event.KeyEvent.VK_CAPS_LOCK, java.awt.event.KeyEvent.KEY_LOCATION_STANDARD)); tojava tojava /* Misc Functions */ tojava keysym2JavaKeycodeHash.put( Long.valueOf(XKeySymConstants.XK_Print), new Keysym2JavaKeycode(java.awt.event.KeyEvent.VK_PRINTSCREEN, java.awt.event.KeyEvent.KEY_LOCATION_STANDARD)); @@ -2640,6 +2641,21 @@ tojava /* Type 5c Japanese keyboard: henkan */ tojava keysym2JavaKeycodeHash.put( Long.valueOf(XKeySymConstants.XK_Kanji), new Keysym2JavaKeycode(java.awt.event.KeyEvent.VK_CONVERT, java.awt.event.KeyEvent.KEY_LOCATION_STANDARD)); tojava /* Type 5c Japanese keyboard: nihongo */ tojava keysym2JavaKeycodeHash.put( Long.valueOf(XKeySymConstants.XK_Henkan_Mode), new Keysym2JavaKeycode(java.awt.event.KeyEvent.VK_INPUT_METHOD_ON_OFF, java.awt.event.KeyEvent.KEY_LOCATION_STANDARD)); +tojava keysym2JavaKeycodeHash.put( Long.valueOf(XKeySymConstants.XK_Eisu_Shift ), new Keysym2JavaKeycode(java.awt.event.KeyEvent.VK_ALPHANUMERIC , java.awt.event.KeyEvent.KEY_LOCATION_STANDARD)); +tojava keysym2JavaKeycodeHash.put( Long.valueOf(XKeySymConstants.XK_Eisu_toggle ), new Keysym2JavaKeycode(java.awt.event.KeyEvent.VK_ALPHANUMERIC , java.awt.event.KeyEvent.KEY_LOCATION_STANDARD)); +tojava keysym2JavaKeycodeHash.put( Long.valueOf(XKeySymConstants.XK_Zenkaku ), new Keysym2JavaKeycode(java.awt.event.KeyEvent.VK_FULL_WIDTH , java.awt.event.KeyEvent.KEY_LOCATION_STANDARD)); +tojava keysym2JavaKeycodeHash.put( Long.valueOf(XKeySymConstants.XK_Hankaku ), new Keysym2JavaKeycode(java.awt.event.KeyEvent.VK_HALF_WIDTH , java.awt.event.KeyEvent.KEY_LOCATION_STANDARD)); +tojava keysym2JavaKeycodeHash.put( Long.valueOf(XKeySymConstants.XK_Hiragana ), new Keysym2JavaKeycode(java.awt.event.KeyEvent.VK_HIRAGANA , java.awt.event.KeyEvent.KEY_LOCATION_STANDARD)); +tojava keysym2JavaKeycodeHash.put( Long.valueOf(XKeySymConstants.XK_Katakana ), new Keysym2JavaKeycode(java.awt.event.KeyEvent.VK_KATAKANA , java.awt.event.KeyEvent.KEY_LOCATION_STANDARD)); +tojava keysym2JavaKeycodeHash.put( Long.valueOf(XKeySymConstants.XK_Romaji ), new Keysym2JavaKeycode(java.awt.event.KeyEvent.VK_JAPANESE_ROMAN , java.awt.event.KeyEvent.KEY_LOCATION_STANDARD)); +tojava keysym2JavaKeycodeHash.put( Long.valueOf(XKeySymConstants.XK_Kana_Shift ), new Keysym2JavaKeycode(java.awt.event.KeyEvent.VK_KANA , java.awt.event.KeyEvent.KEY_LOCATION_STANDARD)); +tojava keysym2JavaKeycodeHash.put( Long.valueOf(XKeySymConstants.XK_Kana_Lock ), new Keysym2JavaKeycode(java.awt.event.KeyEvent.VK_KANA_LOCK , java.awt.event.KeyEvent.KEY_LOCATION_STANDARD)); +tojava keysym2JavaKeycodeHash.put( Long.valueOf(XKeySymConstants.XK_Muhenkan ), new Keysym2JavaKeycode(java.awt.event.KeyEvent.VK_NONCONVERT , java.awt.event.KeyEvent.KEY_LOCATION_STANDARD)); +tojava keysym2JavaKeycodeHash.put( Long.valueOf(XKeySymConstants.XK_Zen_Koho ), new Keysym2JavaKeycode(java.awt.event.KeyEvent.VK_ALL_CANDIDATES , java.awt.event.KeyEvent.KEY_LOCATION_STANDARD)); +tojava keysym2JavaKeycodeHash.put( Long.valueOf(XKeySymConstants.XK_Kanji_Bangou ), new Keysym2JavaKeycode(java.awt.event.KeyEvent.VK_CODE_INPUT , java.awt.event.KeyEvent.KEY_LOCATION_STANDARD)); +tojava keysym2JavaKeycodeHash.put( Long.valueOf(XKeySymConstants.XK_Mae_Koho ), new Keysym2JavaKeycode(java.awt.event.KeyEvent.VK_PREVIOUS_CANDIDATE , java.awt.event.KeyEvent.KEY_LOCATION_STANDARD)); +tojava +tojava tojava /* VK_KANA_LOCK is handled separately because it generates the tojava * same keysym as ALT_GRAPH in spite of its different behavior. tojava */ diff --git a/jdk/src/solaris/classes/sun/font/DelegateStrike.java b/jdk/src/solaris/classes/sun/font/DelegateStrike.java new file mode 100644 index 00000000000..1e9ba8ccbc6 --- /dev/null +++ b/jdk/src/solaris/classes/sun/font/DelegateStrike.java @@ -0,0 +1,114 @@ +/* + * Copyright (c) 2003, 2004, 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.font; + +import java.awt.geom.GeneralPath; +import java.awt.geom.Point2D; +import java.awt.Rectangle; +import java.awt.geom.Rectangle2D; + +/* Returned instead of a NativeStrike. + * It can intercept any request it wants, but mostly + * passes them on to its delegate strike. It is important that + * it override all the inherited FontStrike methods to delegate them + * appropriately. + */ + +class DelegateStrike extends NativeStrike { + + private FontStrike delegateStrike; + + DelegateStrike(NativeFont nativeFont, FontStrikeDesc desc, + FontStrike delegate) { + super(nativeFont, desc); + this.delegateStrike = delegate; + } + + /* We want the native font to be responsible for reporting the + * font metrics, even if it often delegates to another font. + * The code here isn't yet implementing exactly that. If the glyph + * transform was something native couldn't handle, there's no native + * context from which to obtain metrics. Need to revise this to obtain + * the metrics and transform them. But currently in such a case it + * gets the metrics from a different font - its glyph delegate font. + */ + StrikeMetrics getFontMetrics() { + if (strikeMetrics == null) { + if (pScalerContext != 0) { + strikeMetrics = super.getFontMetrics(); + } + if (strikeMetrics == null) { + strikeMetrics = delegateStrike.getFontMetrics(); + } + } + return strikeMetrics; + } + + void getGlyphImagePtrs(int[] glyphCodes, long[] images,int len) { + delegateStrike.getGlyphImagePtrs(glyphCodes, images, len); + } + + long getGlyphImagePtr(int glyphCode) { + return delegateStrike.getGlyphImagePtr(glyphCode); + } + + void getGlyphImageBounds(int glyphCode, + Point2D.Float pt, Rectangle result) { + delegateStrike.getGlyphImageBounds(glyphCode, pt, result); + } + + Point2D.Float getGlyphMetrics(int glyphCode) { + return delegateStrike.getGlyphMetrics(glyphCode); + } + + float getGlyphAdvance(int glyphCode) { + return delegateStrike.getGlyphAdvance(glyphCode); + } + + Point2D.Float getCharMetrics(char ch) { + return delegateStrike.getCharMetrics(ch); + } + + float getCodePointAdvance(int cp) { + if (cp < 0 || cp >= 0x10000) { + cp = 0xffff; + } + return delegateStrike.getGlyphAdvance(cp); + } + + Rectangle2D.Float getGlyphOutlineBounds(int glyphCode) { + return delegateStrike.getGlyphOutlineBounds(glyphCode); + } + + GeneralPath getGlyphOutline(int glyphCode, float x, float y) { + return delegateStrike.getGlyphOutline(glyphCode, x, y); + } + + GeneralPath getGlyphVectorOutline(int[] glyphs, float x, float y) { + return delegateStrike.getGlyphVectorOutline(glyphs, x, y); + } + +} diff --git a/jdk/src/solaris/classes/sun/font/NativeStrike.java b/jdk/src/solaris/classes/sun/font/NativeStrike.java index 777f31351f6..f325ddd90e8 100644 --- a/jdk/src/solaris/classes/sun/font/NativeStrike.java +++ b/jdk/src/solaris/classes/sun/font/NativeStrike.java @@ -32,7 +32,7 @@ import java.awt.Rectangle; import java.awt.geom.Rectangle2D; import java.awt.geom.NoninvertibleTransformException; - class NativeStrike extends PhysicalStrike { +class NativeStrike extends PhysicalStrike { NativeFont nativeFont; int numGlyphs; @@ -294,86 +294,3 @@ import java.awt.geom.NoninvertibleTransformException; } } - -/* Returned instead of a NativeStrike. - * It can intercept any request it wants, but mostly - * passes them on to its delegate strike. It is important that - * it override all the inherited FontStrike methods to delegate them - * appropriately. - */ - -class DelegateStrike extends NativeStrike { - - private FontStrike delegateStrike; - - DelegateStrike(NativeFont nativeFont, FontStrikeDesc desc, - FontStrike delegate) { - super(nativeFont, desc); - this.delegateStrike = delegate; - } - - /* We want the native font to be responsible for reporting the - * font metrics, even if it often delegates to another font. - * The code here isn't yet implementing exactly that. If the glyph - * transform was something native couldn't handle, there's no native - * context from which to obtain metrics. Need to revise this to obtain - * the metrics and transform them. But currently in such a case it - * gets the metrics from a different font - its glyph delegate font. - */ - StrikeMetrics getFontMetrics() { - if (strikeMetrics == null) { - if (pScalerContext != 0) { - strikeMetrics = super.getFontMetrics(); - } - if (strikeMetrics == null) { - strikeMetrics = delegateStrike.getFontMetrics(); - } - } - return strikeMetrics; - } - - void getGlyphImagePtrs(int[] glyphCodes, long[] images,int len) { - delegateStrike.getGlyphImagePtrs(glyphCodes, images, len); - } - - long getGlyphImagePtr(int glyphCode) { - return delegateStrike.getGlyphImagePtr(glyphCode); - } - - void getGlyphImageBounds(int glyphCode, - Point2D.Float pt, Rectangle result) { - delegateStrike.getGlyphImageBounds(glyphCode, pt, result); - } - - Point2D.Float getGlyphMetrics(int glyphCode) { - return delegateStrike.getGlyphMetrics(glyphCode); - } - - float getGlyphAdvance(int glyphCode) { - return delegateStrike.getGlyphAdvance(glyphCode); - } - - Point2D.Float getCharMetrics(char ch) { - return delegateStrike.getCharMetrics(ch); - } - - float getCodePointAdvance(int cp) { - if (cp < 0 || cp >= 0x10000) { - cp = 0xffff; - } - return delegateStrike.getGlyphAdvance(cp); - } - - Rectangle2D.Float getGlyphOutlineBounds(int glyphCode) { - return delegateStrike.getGlyphOutlineBounds(glyphCode); - } - - GeneralPath getGlyphOutline(int glyphCode, float x, float y) { - return delegateStrike.getGlyphOutline(glyphCode, x, y); - } - - GeneralPath getGlyphVectorOutline(int[] glyphs, float x, float y) { - return delegateStrike.getGlyphVectorOutline(glyphs, x, y); - } - -} diff --git a/jdk/src/solaris/classes/sun/java2d/jules/JulesAATileGenerator.java b/jdk/src/solaris/classes/sun/java2d/jules/JulesAATileGenerator.java index 12af979197a..809ef99b119 100644 --- a/jdk/src/solaris/classes/sun/java2d/jules/JulesAATileGenerator.java +++ b/jdk/src/solaris/classes/sun/java2d/jules/JulesAATileGenerator.java @@ -326,24 +326,3 @@ public class JulesAATileGenerator implements AATileGenerator { return tiledTrapArray[index]; } } - -class TileTrapContainer { - int tileAlpha; - GrowableIntArray traps; - - public TileTrapContainer(GrowableIntArray traps) { - this.traps = traps; - } - - public void setTileAlpha(int tileAlpha) { - this.tileAlpha = tileAlpha; - } - - public int getTileAlpha() { - return tileAlpha; - } - - public GrowableIntArray getTraps() { - return traps; - } -} diff --git a/jdk/src/solaris/classes/sun/java2d/jules/TileTrapContainer.java b/jdk/src/solaris/classes/sun/java2d/jules/TileTrapContainer.java new file mode 100644 index 00000000000..80dfbd4f577 --- /dev/null +++ b/jdk/src/solaris/classes/sun/java2d/jules/TileTrapContainer.java @@ -0,0 +1,49 @@ +/* + * Copyright (c) 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 sun.java2d.jules; + +import sun.java2d.xr.GrowableIntArray; + +class TileTrapContainer { + int tileAlpha; + GrowableIntArray traps; + + public TileTrapContainer(GrowableIntArray traps) { + this.traps = traps; + } + + public void setTileAlpha(int tileAlpha) { + this.tileAlpha = tileAlpha; + } + + public int getTileAlpha() { + return tileAlpha; + } + + public GrowableIntArray getTraps() { + return traps; + } +} diff --git a/jdk/src/solaris/classes/sun/management/FileSystemImpl.java b/jdk/src/solaris/classes/sun/management/FileSystemImpl.java index 67445c58d4e..190d8c20723 100644 --- a/jdk/src/solaris/classes/sun/management/FileSystemImpl.java +++ b/jdk/src/solaris/classes/sun/management/FileSystemImpl.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2004, Oracle and/or its affiliates. All rights reserved. + * 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 diff --git a/jdk/src/solaris/classes/sun/net/dns/ResolverConfigurationImpl.java b/jdk/src/solaris/classes/sun/net/dns/ResolverConfigurationImpl.java index 670a675d95c..5af3d445e09 100644 --- a/jdk/src/solaris/classes/sun/net/dns/ResolverConfigurationImpl.java +++ b/jdk/src/solaris/classes/sun/net/dns/ResolverConfigurationImpl.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2002, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2002, 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 diff --git a/jdk/src/solaris/classes/sun/nio/ch/DefaultSelectorProvider.java b/jdk/src/solaris/classes/sun/nio/ch/DefaultSelectorProvider.java index 8f91014918c..e812e535165 100644 --- a/jdk/src/solaris/classes/sun/nio/ch/DefaultSelectorProvider.java +++ b/jdk/src/solaris/classes/sun/nio/ch/DefaultSelectorProvider.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2001, 2005, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2001, 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 diff --git a/jdk/src/solaris/classes/sun/nio/ch/DevPollArrayWrapper.java b/jdk/src/solaris/classes/sun/nio/ch/DevPollArrayWrapper.java index be03cc70900..3151b227b8b 100644 --- a/jdk/src/solaris/classes/sun/nio/ch/DevPollArrayWrapper.java +++ b/jdk/src/solaris/classes/sun/nio/ch/DevPollArrayWrapper.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2001, 2009, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2001, 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 diff --git a/jdk/src/solaris/classes/sun/nio/ch/DevPollSelectorImpl.java b/jdk/src/solaris/classes/sun/nio/ch/DevPollSelectorImpl.java index 05862e2356a..e151051ecea 100644 --- a/jdk/src/solaris/classes/sun/nio/ch/DevPollSelectorImpl.java +++ b/jdk/src/solaris/classes/sun/nio/ch/DevPollSelectorImpl.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2001, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2001, 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 diff --git a/jdk/src/solaris/classes/sun/nio/ch/DevPollSelectorProvider.java b/jdk/src/solaris/classes/sun/nio/ch/DevPollSelectorProvider.java index dbd6170355c..044dc8d1c56 100644 --- a/jdk/src/solaris/classes/sun/nio/ch/DevPollSelectorProvider.java +++ b/jdk/src/solaris/classes/sun/nio/ch/DevPollSelectorProvider.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2001, 2003, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2001, 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 diff --git a/jdk/src/solaris/classes/sun/nio/ch/EPoll.java b/jdk/src/solaris/classes/sun/nio/ch/EPoll.java index 78bc83c8549..3300f962ae0 100644 --- a/jdk/src/solaris/classes/sun/nio/ch/EPoll.java +++ b/jdk/src/solaris/classes/sun/nio/ch/EPoll.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2008, 2009, Oracle and/or its affiliates. All rights reserved. + * 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 diff --git a/jdk/src/solaris/classes/sun/nio/ch/EPollArrayWrapper.java b/jdk/src/solaris/classes/sun/nio/ch/EPollArrayWrapper.java index 539b2c84357..dc08340e46f 100644 --- a/jdk/src/solaris/classes/sun/nio/ch/EPollArrayWrapper.java +++ b/jdk/src/solaris/classes/sun/nio/ch/EPollArrayWrapper.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2005, 2009, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2005, 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 diff --git a/jdk/src/solaris/classes/sun/nio/ch/EPollSelectorImpl.java b/jdk/src/solaris/classes/sun/nio/ch/EPollSelectorImpl.java index c18650372ca..5fa2b324fc5 100644 --- a/jdk/src/solaris/classes/sun/nio/ch/EPollSelectorImpl.java +++ b/jdk/src/solaris/classes/sun/nio/ch/EPollSelectorImpl.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2005, 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 diff --git a/jdk/src/solaris/classes/sun/nio/ch/InheritedChannel.java b/jdk/src/solaris/classes/sun/nio/ch/InheritedChannel.java index ae7212a3cc3..2917ba9c74a 100644 --- a/jdk/src/solaris/classes/sun/nio/ch/InheritedChannel.java +++ b/jdk/src/solaris/classes/sun/nio/ch/InheritedChannel.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 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 diff --git a/jdk/src/solaris/classes/sun/nio/ch/NativeThread.java b/jdk/src/solaris/classes/sun/nio/ch/NativeThread.java index 574c33d3c50..7a7e155c4b9 100644 --- a/jdk/src/solaris/classes/sun/nio/ch/NativeThread.java +++ b/jdk/src/solaris/classes/sun/nio/ch/NativeThread.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2002, 2008, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2002, 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 diff --git a/jdk/src/solaris/classes/sun/nio/ch/PollArrayWrapper.java b/jdk/src/solaris/classes/sun/nio/ch/PollArrayWrapper.java index 70c189e2318..bf063c70cfd 100644 --- a/jdk/src/solaris/classes/sun/nio/ch/PollArrayWrapper.java +++ b/jdk/src/solaris/classes/sun/nio/ch/PollArrayWrapper.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2001, 2004, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2001, 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 diff --git a/jdk/src/solaris/classes/sun/nio/ch/SolarisEventPort.java b/jdk/src/solaris/classes/sun/nio/ch/SolarisEventPort.java index 6f20d4c283a..d5a74c10931 100644 --- a/jdk/src/solaris/classes/sun/nio/ch/SolarisEventPort.java +++ b/jdk/src/solaris/classes/sun/nio/ch/SolarisEventPort.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2008, 2009, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2008, 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 diff --git a/jdk/src/solaris/classes/sun/nio/ch/sctp/AssociationChange.java b/jdk/src/solaris/classes/sun/nio/ch/sctp/AssociationChange.java index b7767006bc1..2399a38b384 100644 --- a/jdk/src/solaris/classes/sun/nio/ch/sctp/AssociationChange.java +++ b/jdk/src/solaris/classes/sun/nio/ch/sctp/AssociationChange.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2009, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2009, 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 diff --git a/jdk/src/solaris/classes/sun/nio/ch/sctp/AssociationImpl.java b/jdk/src/solaris/classes/sun/nio/ch/sctp/AssociationImpl.java index 225f541298a..56653d01c4f 100644 --- a/jdk/src/solaris/classes/sun/nio/ch/sctp/AssociationImpl.java +++ b/jdk/src/solaris/classes/sun/nio/ch/sctp/AssociationImpl.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2009, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2009, 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 diff --git a/jdk/src/solaris/classes/sun/nio/ch/sctp/PeerAddrChange.java b/jdk/src/solaris/classes/sun/nio/ch/sctp/PeerAddrChange.java index 7d434e269ec..2dac583ace5 100644 --- a/jdk/src/solaris/classes/sun/nio/ch/sctp/PeerAddrChange.java +++ b/jdk/src/solaris/classes/sun/nio/ch/sctp/PeerAddrChange.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2009, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2009, 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 diff --git a/jdk/src/solaris/classes/sun/nio/ch/sctp/ResultContainer.java b/jdk/src/solaris/classes/sun/nio/ch/sctp/ResultContainer.java index 1235b6e08c6..dee2f989d11 100644 --- a/jdk/src/solaris/classes/sun/nio/ch/sctp/ResultContainer.java +++ b/jdk/src/solaris/classes/sun/nio/ch/sctp/ResultContainer.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2009, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2009, 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 diff --git a/jdk/src/solaris/classes/sun/nio/ch/sctp/SctpChannelImpl.java b/jdk/src/solaris/classes/sun/nio/ch/sctp/SctpChannelImpl.java index 92f17cb3e8b..9035d0a44f8 100644 --- a/jdk/src/solaris/classes/sun/nio/ch/sctp/SctpChannelImpl.java +++ b/jdk/src/solaris/classes/sun/nio/ch/sctp/SctpChannelImpl.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2009, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2009, 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 diff --git a/jdk/src/solaris/classes/sun/nio/ch/sctp/SctpMultiChannelImpl.java b/jdk/src/solaris/classes/sun/nio/ch/sctp/SctpMultiChannelImpl.java index fa44072f4dc..6b42fcc02e3 100644 --- a/jdk/src/solaris/classes/sun/nio/ch/sctp/SctpMultiChannelImpl.java +++ b/jdk/src/solaris/classes/sun/nio/ch/sctp/SctpMultiChannelImpl.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2009, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2009, 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 diff --git a/jdk/src/solaris/classes/sun/nio/ch/sctp/SctpNet.java b/jdk/src/solaris/classes/sun/nio/ch/sctp/SctpNet.java index efe25b335a4..8f02de791a8 100644 --- a/jdk/src/solaris/classes/sun/nio/ch/sctp/SctpNet.java +++ b/jdk/src/solaris/classes/sun/nio/ch/sctp/SctpNet.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2009, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2009, 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 diff --git a/jdk/src/solaris/classes/sun/nio/ch/sctp/SctpNotification.java b/jdk/src/solaris/classes/sun/nio/ch/sctp/SctpNotification.java index c901964b832..6227e9ec20b 100644 --- a/jdk/src/solaris/classes/sun/nio/ch/sctp/SctpNotification.java +++ b/jdk/src/solaris/classes/sun/nio/ch/sctp/SctpNotification.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2009, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2009, 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 diff --git a/jdk/src/solaris/classes/sun/nio/ch/sctp/SctpServerChannelImpl.java b/jdk/src/solaris/classes/sun/nio/ch/sctp/SctpServerChannelImpl.java index e5d5a892bd7..900d7ab53c0 100644 --- a/jdk/src/solaris/classes/sun/nio/ch/sctp/SctpServerChannelImpl.java +++ b/jdk/src/solaris/classes/sun/nio/ch/sctp/SctpServerChannelImpl.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2009, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2009, 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 diff --git a/jdk/src/solaris/classes/sun/nio/ch/sctp/SendFailed.java b/jdk/src/solaris/classes/sun/nio/ch/sctp/SendFailed.java index 25717d5ce11..b152e82b29c 100644 --- a/jdk/src/solaris/classes/sun/nio/ch/sctp/SendFailed.java +++ b/jdk/src/solaris/classes/sun/nio/ch/sctp/SendFailed.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2009, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2009, 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 diff --git a/jdk/src/solaris/classes/sun/nio/ch/sctp/Shutdown.java b/jdk/src/solaris/classes/sun/nio/ch/sctp/Shutdown.java index b3cf6691d77..1b20317d136 100644 --- a/jdk/src/solaris/classes/sun/nio/ch/sctp/Shutdown.java +++ b/jdk/src/solaris/classes/sun/nio/ch/sctp/Shutdown.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2009, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2009, 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 diff --git a/jdk/src/solaris/classes/sun/nio/fs/BsdFileStore.java b/jdk/src/solaris/classes/sun/nio/fs/BsdFileStore.java index 9dfc791eca6..b73218ead5f 100644 --- a/jdk/src/solaris/classes/sun/nio/fs/BsdFileStore.java +++ b/jdk/src/solaris/classes/sun/nio/fs/BsdFileStore.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2008, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2008, 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 diff --git a/jdk/src/solaris/classes/sun/nio/fs/BsdFileSystem.java b/jdk/src/solaris/classes/sun/nio/fs/BsdFileSystem.java index 873feeaa272..c6a85aee558 100644 --- a/jdk/src/solaris/classes/sun/nio/fs/BsdFileSystem.java +++ b/jdk/src/solaris/classes/sun/nio/fs/BsdFileSystem.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2008, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2008, 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 diff --git a/jdk/src/solaris/classes/sun/nio/fs/BsdFileSystemProvider.java b/jdk/src/solaris/classes/sun/nio/fs/BsdFileSystemProvider.java index 73c7e83e3cf..eaf49ddd2a7 100644 --- a/jdk/src/solaris/classes/sun/nio/fs/BsdFileSystemProvider.java +++ b/jdk/src/solaris/classes/sun/nio/fs/BsdFileSystemProvider.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2008, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2008, 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 diff --git a/jdk/src/solaris/classes/sun/nio/fs/BsdNativeDispatcher.java b/jdk/src/solaris/classes/sun/nio/fs/BsdNativeDispatcher.java index 83b668cc23f..7acbc4fa750 100644 --- a/jdk/src/solaris/classes/sun/nio/fs/BsdNativeDispatcher.java +++ b/jdk/src/solaris/classes/sun/nio/fs/BsdNativeDispatcher.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2008, 2009, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2008, 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 diff --git a/jdk/src/solaris/classes/sun/nio/fs/DefaultFileTypeDetector.java b/jdk/src/solaris/classes/sun/nio/fs/DefaultFileTypeDetector.java index 9259faeb8fe..295146d755e 100644 --- a/jdk/src/solaris/classes/sun/nio/fs/DefaultFileTypeDetector.java +++ b/jdk/src/solaris/classes/sun/nio/fs/DefaultFileTypeDetector.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2008, 2009, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2008, 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 diff --git a/jdk/src/solaris/classes/sun/nio/fs/LinuxFileSystem.java b/jdk/src/solaris/classes/sun/nio/fs/LinuxFileSystem.java index fb6f6d1318b..eff7b588419 100644 --- a/jdk/src/solaris/classes/sun/nio/fs/LinuxFileSystem.java +++ b/jdk/src/solaris/classes/sun/nio/fs/LinuxFileSystem.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2008, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2008, 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 diff --git a/jdk/src/solaris/classes/sun/nio/fs/LinuxFileSystemProvider.java b/jdk/src/solaris/classes/sun/nio/fs/LinuxFileSystemProvider.java index 4d6159865d7..557fc16e5d6 100644 --- a/jdk/src/solaris/classes/sun/nio/fs/LinuxFileSystemProvider.java +++ b/jdk/src/solaris/classes/sun/nio/fs/LinuxFileSystemProvider.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2008, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2008, 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 diff --git a/jdk/src/solaris/classes/sun/nio/fs/LinuxNativeDispatcher.java b/jdk/src/solaris/classes/sun/nio/fs/LinuxNativeDispatcher.java index d657fcb1a14..0186870688a 100644 --- a/jdk/src/solaris/classes/sun/nio/fs/LinuxNativeDispatcher.java +++ b/jdk/src/solaris/classes/sun/nio/fs/LinuxNativeDispatcher.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2008, 2009, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2008, 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 diff --git a/jdk/src/solaris/classes/sun/nio/fs/MacOSXFileSystem.java b/jdk/src/solaris/classes/sun/nio/fs/MacOSXFileSystem.java index ab9888e7d07..0305171589d 100644 --- a/jdk/src/solaris/classes/sun/nio/fs/MacOSXFileSystem.java +++ b/jdk/src/solaris/classes/sun/nio/fs/MacOSXFileSystem.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2008, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2008, 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 diff --git a/jdk/src/solaris/classes/sun/nio/fs/MacOSXFileSystemProvider.java b/jdk/src/solaris/classes/sun/nio/fs/MacOSXFileSystemProvider.java index 5e48c0052c7..528603fa791 100644 --- a/jdk/src/solaris/classes/sun/nio/fs/MacOSXFileSystemProvider.java +++ b/jdk/src/solaris/classes/sun/nio/fs/MacOSXFileSystemProvider.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2008, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2008, 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 diff --git a/jdk/src/solaris/classes/sun/nio/fs/MacOSXNativeDispatcher.java b/jdk/src/solaris/classes/sun/nio/fs/MacOSXNativeDispatcher.java index d591857a7ef..f6fe31a3c48 100644 --- a/jdk/src/solaris/classes/sun/nio/fs/MacOSXNativeDispatcher.java +++ b/jdk/src/solaris/classes/sun/nio/fs/MacOSXNativeDispatcher.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2008, 2009, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2008, 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 diff --git a/jdk/src/solaris/classes/sun/nio/fs/SolarisFileSystem.java b/jdk/src/solaris/classes/sun/nio/fs/SolarisFileSystem.java index 14bc339cbc5..8b4177e3fde 100644 --- a/jdk/src/solaris/classes/sun/nio/fs/SolarisFileSystem.java +++ b/jdk/src/solaris/classes/sun/nio/fs/SolarisFileSystem.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2008, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2008, 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 diff --git a/jdk/src/solaris/classes/sun/nio/fs/SolarisFileSystemProvider.java b/jdk/src/solaris/classes/sun/nio/fs/SolarisFileSystemProvider.java index fec87c7a27b..cb34adf3b9a 100644 --- a/jdk/src/solaris/classes/sun/nio/fs/SolarisFileSystemProvider.java +++ b/jdk/src/solaris/classes/sun/nio/fs/SolarisFileSystemProvider.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2008, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2008, 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 diff --git a/jdk/src/solaris/classes/sun/nio/fs/SolarisNativeDispatcher.java b/jdk/src/solaris/classes/sun/nio/fs/SolarisNativeDispatcher.java index 3d54b75cb0d..0b114c02589 100644 --- a/jdk/src/solaris/classes/sun/nio/fs/SolarisNativeDispatcher.java +++ b/jdk/src/solaris/classes/sun/nio/fs/SolarisNativeDispatcher.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2008, 2009, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2008, 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 diff --git a/jdk/src/solaris/classes/sun/nio/fs/UnixChannelFactory.java b/jdk/src/solaris/classes/sun/nio/fs/UnixChannelFactory.java index d7a1f8b0310..df00a728f2c 100644 --- a/jdk/src/solaris/classes/sun/nio/fs/UnixChannelFactory.java +++ b/jdk/src/solaris/classes/sun/nio/fs/UnixChannelFactory.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2008, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2008, 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 diff --git a/jdk/src/solaris/classes/sun/nio/fs/UnixFileSystem.java b/jdk/src/solaris/classes/sun/nio/fs/UnixFileSystem.java index 33ec2ba7bb2..21aefc183df 100644 --- a/jdk/src/solaris/classes/sun/nio/fs/UnixFileSystem.java +++ b/jdk/src/solaris/classes/sun/nio/fs/UnixFileSystem.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2008, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2008, 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 diff --git a/jdk/src/solaris/classes/sun/nio/fs/UnixNativeDispatcher.java b/jdk/src/solaris/classes/sun/nio/fs/UnixNativeDispatcher.java index 5672319106b..5255c660dd1 100644 --- a/jdk/src/solaris/classes/sun/nio/fs/UnixNativeDispatcher.java +++ b/jdk/src/solaris/classes/sun/nio/fs/UnixNativeDispatcher.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2008, 2009, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2008, 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 diff --git a/jdk/src/solaris/classes/sun/print/CUPSPrinter.java b/jdk/src/solaris/classes/sun/print/CUPSPrinter.java index 34a131317ac..ab2d707a89e 100644 --- a/jdk/src/solaris/classes/sun/print/CUPSPrinter.java +++ b/jdk/src/solaris/classes/sun/print/CUPSPrinter.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, 2008, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 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 diff --git a/jdk/src/solaris/classes/sun/security/smartcardio/PlatformPCSC.java b/jdk/src/solaris/classes/sun/security/smartcardio/PlatformPCSC.java index d6197b9bcc0..507fedd82bc 100644 --- a/jdk/src/solaris/classes/sun/security/smartcardio/PlatformPCSC.java +++ b/jdk/src/solaris/classes/sun/security/smartcardio/PlatformPCSC.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2005, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2005, 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 diff --git a/jdk/src/solaris/classes/sun/tools/attach/BsdAttachProvider.java b/jdk/src/solaris/classes/sun/tools/attach/BsdAttachProvider.java index dffbc6bf6ed..c4f6a5cdc97 100644 --- a/jdk/src/solaris/classes/sun/tools/attach/BsdAttachProvider.java +++ b/jdk/src/solaris/classes/sun/tools/attach/BsdAttachProvider.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2005, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2005, 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 diff --git a/jdk/src/solaris/classes/sun/tools/attach/LinuxVirtualMachine.java b/jdk/src/solaris/classes/sun/tools/attach/LinuxVirtualMachine.java index 4bf55cdf41e..1e08d70446e 100644 --- a/jdk/src/solaris/classes/sun/tools/attach/LinuxVirtualMachine.java +++ b/jdk/src/solaris/classes/sun/tools/attach/LinuxVirtualMachine.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2005, 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 diff --git a/jdk/src/solaris/classes/sun/tools/attach/SolarisVirtualMachine.java b/jdk/src/solaris/classes/sun/tools/attach/SolarisVirtualMachine.java index cb8a3f16a3f..c7dcf21cf03 100644 --- a/jdk/src/solaris/classes/sun/tools/attach/SolarisVirtualMachine.java +++ b/jdk/src/solaris/classes/sun/tools/attach/SolarisVirtualMachine.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2005, 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 diff --git a/jdk/src/solaris/demo/jni/Poller/Client.java b/jdk/src/solaris/demo/jni/Poller/Client.java index 759ae6207dc..ffa706eabc9 100644 --- a/jdk/src/solaris/demo/jni/Poller/Client.java +++ b/jdk/src/solaris/demo/jni/Poller/Client.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1999, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1999, 2011, Oracle and/or its affiliates. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions diff --git a/jdk/src/solaris/demo/jni/Poller/LinkedQueue.java b/jdk/src/solaris/demo/jni/Poller/LinkedQueue.java index fcebf47787c..bc70554f3e7 100644 --- a/jdk/src/solaris/demo/jni/Poller/LinkedQueue.java +++ b/jdk/src/solaris/demo/jni/Poller/LinkedQueue.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1999, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1999, 2011, Oracle and/or its affiliates. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions diff --git a/jdk/src/solaris/demo/jni/Poller/Poller.c b/jdk/src/solaris/demo/jni/Poller/Poller.c index 39a6ce462fd..8f4556be5ec 100644 --- a/jdk/src/solaris/demo/jni/Poller/Poller.c +++ b/jdk/src/solaris/demo/jni/Poller/Poller.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 1999, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1999, 2011, Oracle and/or its affiliates. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions diff --git a/jdk/src/solaris/demo/jni/Poller/Poller.java b/jdk/src/solaris/demo/jni/Poller/Poller.java index 8b8d6af8631..745fd9922ca 100644 --- a/jdk/src/solaris/demo/jni/Poller/Poller.java +++ b/jdk/src/solaris/demo/jni/Poller/Poller.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1999, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1999, 2011, Oracle and/or its affiliates. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions diff --git a/jdk/src/solaris/demo/jni/Poller/PollingServer.java b/jdk/src/solaris/demo/jni/Poller/PollingServer.java index 095f3cc755a..5cb26260398 100644 --- a/jdk/src/solaris/demo/jni/Poller/PollingServer.java +++ b/jdk/src/solaris/demo/jni/Poller/PollingServer.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1999, 2001, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1999, 2011, Oracle and/or its affiliates. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions diff --git a/jdk/src/solaris/demo/jni/Poller/SimpleServer.java b/jdk/src/solaris/demo/jni/Poller/SimpleServer.java index 4658a2fd67b..6a099c67071 100644 --- a/jdk/src/solaris/demo/jni/Poller/SimpleServer.java +++ b/jdk/src/solaris/demo/jni/Poller/SimpleServer.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1999, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1999, 2011, Oracle and/or its affiliates. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions diff --git a/jdk/src/solaris/demo/jvmti/hprof/hprof_md.c b/jdk/src/solaris/demo/jvmti/hprof/hprof_md.c index 63469a56626..284a2e6fee7 100644 --- a/jdk/src/solaris/demo/jvmti/hprof/hprof_md.c +++ b/jdk/src/solaris/demo/jvmti/hprof/hprof_md.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, 2005, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 2012, Oracle and/or its affiliates. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions diff --git a/jdk/src/solaris/doc/sun/man/man1/jcmd.1 b/jdk/src/solaris/doc/sun/man/man1/jcmd.1 index 7d690577d14..3e0cd2a19fa 100644 --- a/jdk/src/solaris/doc/sun/man/man1/jcmd.1 +++ b/jdk/src/solaris/doc/sun/man/man1/jcmd.1 @@ -1,4 +1,4 @@ -." Copyright (c) 2011, Oracle and/or its affiliates. All rights reserved. +." Copyright (c) 2011, 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 diff --git a/jdk/src/solaris/instrument/EncodingSupport_md.c b/jdk/src/solaris/instrument/EncodingSupport_md.c index 456916e2882..50bff641396 100644 --- a/jdk/src/solaris/instrument/EncodingSupport_md.c +++ b/jdk/src/solaris/instrument/EncodingSupport_md.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 2004, Oracle and/or its affiliates. All rights reserved. + * 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 diff --git a/jdk/src/solaris/javavm/export/jvm_md.h b/jdk/src/solaris/javavm/export/jvm_md.h index 390e89c3654..5c681914bba 100644 --- a/jdk/src/solaris/javavm/export/jvm_md.h +++ b/jdk/src/solaris/javavm/export/jvm_md.h @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2008, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 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 diff --git a/jdk/src/solaris/native/com/sun/management/MacosxOperatingSystem.c b/jdk/src/solaris/native/com/sun/management/MacosxOperatingSystem.c index 3e7ac65fac4..7f8c1e97f13 100644 --- a/jdk/src/solaris/native/com/sun/management/MacosxOperatingSystem.c +++ b/jdk/src/solaris/native/com/sun/management/MacosxOperatingSystem.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2011, 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 diff --git a/jdk/src/solaris/native/com/sun/management/UnixOperatingSystem_md.c b/jdk/src/solaris/native/com/sun/management/UnixOperatingSystem_md.c index 656306c83b6..fc5f154c562 100644 --- a/jdk/src/solaris/native/com/sun/management/UnixOperatingSystem_md.c +++ b/jdk/src/solaris/native/com/sun/management/UnixOperatingSystem_md.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, 2005, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 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 diff --git a/jdk/src/solaris/native/com/sun/security/auth/module/Unix.c b/jdk/src/solaris/native/com/sun/security/auth/module/Unix.c index 677a70bb5d3..6af63a2f39e 100644 --- a/jdk/src/solaris/native/com/sun/security/auth/module/Unix.c +++ b/jdk/src/solaris/native/com/sun/security/auth/module/Unix.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 2000, 2003, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2000, 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 @@ -47,83 +47,53 @@ Java_com_sun_security_auth_module_UnixSystem_getUnixInfo jsize numSuppGroups = getgroups(0, NULL); gid_t *groups = (gid_t *)calloc(numSuppGroups, sizeof(gid_t)); - jfieldID fid; + jfieldID userNameID; + jfieldID userID; + jfieldID groupID; + jfieldID supplementaryGroupID; + jstring jstr; jlongArray jgroups; jlong *jgroupsAsArray; jclass cls = (*env)->GetObjectClass(env, obj); memset(pwd_buf, 0, sizeof(pwd_buf)); + if (getpwuid_r(getuid(), &resbuf, pwd_buf, sizeof(pwd_buf), &pwd) == 0 && pwd != NULL && getgroups(numSuppGroups, groups) != -1) { - /* - * set username - */ - fid = (*env)->GetFieldID(env, cls, "username", "Ljava/lang/String;"); - if (fid == 0) { - jclass newExcCls = - (*env)->FindClass(env, "java/lang/IllegalArgumentException"); - if (newExcCls == 0) { - /* Unable to find the new exception class, give up. */ - return; - } - (*env)->ThrowNew(env, newExcCls, "invalid field: username"); - } + userNameID = (*env)->GetFieldID(env, cls, "username", "Ljava/lang/String;"); + if (userNameID == 0) + goto cleanUpAndReturn; + + userID = (*env)->GetFieldID(env, cls, "uid", "J"); + if (userID == 0) + goto cleanUpAndReturn; + + groupID = (*env)->GetFieldID(env, cls, "gid", "J"); + if (groupID == 0) + goto cleanUpAndReturn; + + supplementaryGroupID = (*env)->GetFieldID(env, cls, "groups", "[J"); + if (supplementaryGroupID == 0) + goto cleanUpAndReturn; + jstr = (*env)->NewStringUTF(env, pwd->pw_name); - (*env)->SetObjectField(env, obj, fid, jstr); + (*env)->SetObjectField(env, obj, userNameID, jstr); - /* - * set uid - */ - fid = (*env)->GetFieldID(env, cls, "uid", "J"); - if (fid == 0) { - jclass newExcCls = - (*env)->FindClass(env, "java/lang/IllegalArgumentException"); - if (newExcCls == 0) { - /* Unable to find the new exception class, give up. */ - return; - } - (*env)->ThrowNew(env, newExcCls, "invalid field: username"); - } - (*env)->SetLongField(env, obj, fid, pwd->pw_uid); + (*env)->SetLongField(env, obj, userID, pwd->pw_uid); - /* - * set gid - */ - fid = (*env)->GetFieldID(env, cls, "gid", "J"); - if (fid == 0) { - jclass newExcCls = - (*env)->FindClass(env, "java/lang/IllegalArgumentException"); - if (newExcCls == 0) { - /* Unable to find the new exception class, give up. */ - return; - } - (*env)->ThrowNew(env, newExcCls, "invalid field: username"); - } - (*env)->SetLongField(env, obj, fid, pwd->pw_gid); - - /* - * set supplementary groups - */ - fid = (*env)->GetFieldID(env, cls, "groups", "[J"); - if (fid == 0) { - jclass newExcCls = - (*env)->FindClass(env, "java/lang/IllegalArgumentException"); - if (newExcCls == 0) { - /* Unable to find the new exception class, give up. */ - return; - } - (*env)->ThrowNew(env, newExcCls, "invalid field: username"); - } + (*env)->SetLongField(env, obj, groupID, pwd->pw_gid); jgroups = (*env)->NewLongArray(env, numSuppGroups); jgroupsAsArray = (*env)->GetLongArrayElements(env, jgroups, 0); for (i = 0; i < numSuppGroups; i++) jgroupsAsArray[i] = groups[i]; (*env)->ReleaseLongArrayElements(env, jgroups, jgroupsAsArray, 0); - (*env)->SetObjectField(env, obj, fid, jgroups); + (*env)->SetObjectField(env, obj, supplementaryGroupID, jgroups); } +cleanUpAndReturn: + free(groups); return; } diff --git a/jdk/src/solaris/native/java/io/UnixFileSystem_md.c b/jdk/src/solaris/native/java/io/UnixFileSystem_md.c index 4309ffb06a9..954e212cb56 100644 --- a/jdk/src/solaris/native/java/io/UnixFileSystem_md.c +++ b/jdk/src/solaris/native/java/io/UnixFileSystem_md.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 1998, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1998, 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 diff --git a/jdk/src/solaris/native/java/io/canonicalize_md.c b/jdk/src/solaris/native/java/io/canonicalize_md.c index b78cc2d5c8a..e985c39b31f 100644 --- a/jdk/src/solaris/native/java/io/canonicalize_md.c +++ b/jdk/src/solaris/native/java/io/canonicalize_md.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 1994, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1994, 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 diff --git a/jdk/src/solaris/native/java/io/io_util_md.c b/jdk/src/solaris/native/java/io/io_util_md.c index 646e1305c5c..61ceda9e1e6 100644 --- a/jdk/src/solaris/native/java/io/io_util_md.c +++ b/jdk/src/solaris/native/java/io/io_util_md.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 2001, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2001, 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 diff --git a/jdk/src/solaris/native/java/io/io_util_md.h b/jdk/src/solaris/native/java/io/io_util_md.h index fbf8172b2c7..fe1b7e1ad56 100644 --- a/jdk/src/solaris/native/java/io/io_util_md.h +++ b/jdk/src/solaris/native/java/io/io_util_md.h @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 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 diff --git a/jdk/src/solaris/native/java/lang/ProcessEnvironment_md.c b/jdk/src/solaris/native/java/lang/ProcessEnvironment_md.c index b946663bf9a..741e014e717 100644 --- a/jdk/src/solaris/native/java/lang/ProcessEnvironment_md.c +++ b/jdk/src/solaris/native/java/lang/ProcessEnvironment_md.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, 2004, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 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 diff --git a/jdk/src/solaris/native/java/lang/java_props_macosx.c b/jdk/src/solaris/native/java/lang/java_props_macosx.c index fa4c7a5b236..4afca2a2ae5 100644 --- a/jdk/src/solaris/native/java/lang/java_props_macosx.c +++ b/jdk/src/solaris/native/java/lang/java_props_macosx.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 1998, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1998, 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 diff --git a/jdk/src/solaris/native/java/lang/java_props_macosx.h b/jdk/src/solaris/native/java/lang/java_props_macosx.h index 72909828cfb..b311804835d 100644 --- a/jdk/src/solaris/native/java/lang/java_props_macosx.h +++ b/jdk/src/solaris/native/java/lang/java_props_macosx.h @@ -1,5 +1,5 @@ /* - * Copyright (c) 1998, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1998, 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 diff --git a/jdk/src/solaris/native/java/lang/java_props_md.c b/jdk/src/solaris/native/java/lang/java_props_md.c index c2bc9c1c8a7..baba74fe897 100644 --- a/jdk/src/solaris/native/java/lang/java_props_md.c +++ b/jdk/src/solaris/native/java/lang/java_props_md.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 1998, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1998, 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 diff --git a/jdk/src/solaris/native/java/net/Inet4AddressImpl.c b/jdk/src/solaris/native/java/net/Inet4AddressImpl.c index 58798c7f827..71acfcdb5b1 100644 --- a/jdk/src/solaris/native/java/net/Inet4AddressImpl.c +++ b/jdk/src/solaris/native/java/net/Inet4AddressImpl.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 2000, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2000, 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 diff --git a/jdk/src/solaris/native/java/net/NetworkInterface.c b/jdk/src/solaris/native/java/net/NetworkInterface.c index 1a9419e0d40..55c131cf339 100644 --- a/jdk/src/solaris/native/java/net/NetworkInterface.c +++ b/jdk/src/solaris/native/java/net/NetworkInterface.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 2000, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2000, 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 diff --git a/jdk/src/solaris/native/java/net/PlainDatagramSocketImpl.c b/jdk/src/solaris/native/java/net/PlainDatagramSocketImpl.c index 40b375de56b..e5607af9132 100644 --- a/jdk/src/solaris/native/java/net/PlainDatagramSocketImpl.c +++ b/jdk/src/solaris/native/java/net/PlainDatagramSocketImpl.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 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 @@ -1318,10 +1318,8 @@ Java_java_net_PlainDatagramSocketImpl_socketSetOption(JNIEnv *env, jobject value) { int fd; int level, optname, optlen; - union { - int i; - char c; - } optval; + int optval; + optlen = sizeof(int); /* * Check that socket hasn't been closed @@ -1381,8 +1379,7 @@ Java_java_net_PlainDatagramSocketImpl_socketSetOption(JNIEnv *env, fid = (*env)->GetFieldID(env, cls, "value", "I"); CHECK_NULL(fid); - optval.i = (*env)->GetIntField(env, value, fid); - optlen = sizeof(optval.i); + optval = (*env)->GetIntField(env, value, fid); break; } @@ -1401,8 +1398,7 @@ Java_java_net_PlainDatagramSocketImpl_socketSetOption(JNIEnv *env, on = (*env)->GetBooleanField(env, value, fid); /* SO_REUSEADDR or SO_BROADCAST */ - optval.i = (on ? 1 : 0); - optlen = sizeof(optval.i); + optval = (on ? 1 : 0); break; } diff --git a/jdk/src/solaris/native/java/net/PlainSocketImpl.c b/jdk/src/solaris/native/java/net/PlainSocketImpl.c index a284ab42d12..b6f78b9c158 100644 --- a/jdk/src/solaris/native/java/net/PlainSocketImpl.c +++ b/jdk/src/solaris/native/java/net/PlainSocketImpl.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 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 diff --git a/jdk/src/solaris/native/java/net/SocketInputStream.c b/jdk/src/solaris/native/java/net/SocketInputStream.c index 6ae368e4939..ccee03c9eff 100644 --- a/jdk/src/solaris/native/java/net/SocketInputStream.c +++ b/jdk/src/solaris/native/java/net/SocketInputStream.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2008, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 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 diff --git a/jdk/src/solaris/native/java/net/bsd_close.c b/jdk/src/solaris/native/java/net/bsd_close.c index f1e24bd6de1..f314357e85e 100644 --- a/jdk/src/solaris/native/java/net/bsd_close.c +++ b/jdk/src/solaris/native/java/net/bsd_close.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 2001, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2001, 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 diff --git a/jdk/src/solaris/native/java/net/net_util_md.c b/jdk/src/solaris/native/java/net/net_util_md.c index 7df6f3e9823..c700cfd0b75 100644 --- a/jdk/src/solaris/native/java/net/net_util_md.c +++ b/jdk/src/solaris/native/java/net/net_util_md.c @@ -546,6 +546,7 @@ static void initLoopbackRoutes() { char dest_str[40]; struct in6_addr dest_addr; char device[16]; + struct loopback_route *loRoutesTemp; if (loRoutes != 0) { free (loRoutes); @@ -606,11 +607,15 @@ static void initLoopbackRoutes() { continue; } else { if (nRoutes == loRoutes_size) { - loRoutes = realloc (loRoutes, loRoutes_size * - sizeof (struct loopback_route) * 2); - if (loRoutes == 0) { - return ; + loRoutesTemp = realloc (loRoutes, loRoutes_size * + sizeof (struct loopback_route) * 2); + + if (loRoutesTemp == 0) { + free(loRoutes); + fclose (f); + return; } + loRoutes=loRoutesTemp; loRoutes_size *= 2; } memcpy (&loRoutes[nRoutes].addr,&dest_addr,sizeof(struct in6_addr)); diff --git a/jdk/src/solaris/native/java/net/net_util_md.h b/jdk/src/solaris/native/java/net/net_util_md.h index e905752ad15..4470a49b1e2 100644 --- a/jdk/src/solaris/native/java/net/net_util_md.h +++ b/jdk/src/solaris/native/java/net/net_util_md.h @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 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 diff --git a/jdk/src/solaris/native/java/util/FileSystemPreferences.c b/jdk/src/solaris/native/java/util/FileSystemPreferences.c index 7bc1f45f8a7..eb0bf43fec5 100644 --- a/jdk/src/solaris/native/java/util/FileSystemPreferences.c +++ b/jdk/src/solaris/native/java/util/FileSystemPreferences.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 2001, 2004, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2001, 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 diff --git a/jdk/src/solaris/native/sun/awt/awt_GraphicsEnv.c b/jdk/src/solaris/native/sun/awt/awt_GraphicsEnv.c index 2cc122c3476..7ae4cdd3259 100644 --- a/jdk/src/solaris/native/sun/awt/awt_GraphicsEnv.c +++ b/jdk/src/solaris/native/sun/awt/awt_GraphicsEnv.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 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 @@ -753,7 +753,7 @@ awt_init_Display(JNIEnv *env, jobject this) sizeof(errmsg), "Can't connect to X11 window server using '%s' as the value of the DISPLAY variable.", (getenv("DISPLAY") == NULL) ? ":0.0" : getenv("DISPLAY")); - JNU_ThrowInternalError(env, errmsg); + JNU_ThrowByName(env, "java/awt/AWTError", errmsg); return NULL; } diff --git a/jdk/src/solaris/native/sun/jdga/dgalock.c b/jdk/src/solaris/native/sun/jdga/dgalock.c index 0e9c4006358..122e125579c 100644 --- a/jdk/src/solaris/native/sun/jdga/dgalock.c +++ b/jdk/src/solaris/native/sun/jdga/dgalock.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 1998, 2001, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1998, 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 diff --git a/jdk/src/solaris/native/sun/management/FileSystemImpl.c b/jdk/src/solaris/native/sun/management/FileSystemImpl.c index 1efff528a1a..4eafc9a8c4e 100644 --- a/jdk/src/solaris/native/sun/management/FileSystemImpl.c +++ b/jdk/src/solaris/native/sun/management/FileSystemImpl.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 2004, Oracle and/or its affiliates. All rights reserved. + * 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 diff --git a/jdk/src/solaris/native/sun/net/dns/ResolverConfigurationImpl.c b/jdk/src/solaris/native/sun/net/dns/ResolverConfigurationImpl.c index 3d26212254e..829ecae3683 100644 --- a/jdk/src/solaris/native/sun/net/dns/ResolverConfigurationImpl.c +++ b/jdk/src/solaris/native/sun/net/dns/ResolverConfigurationImpl.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 2002, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2002, 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 diff --git a/jdk/src/solaris/native/sun/net/spi/DefaultProxySelector.c b/jdk/src/solaris/native/sun/net/spi/DefaultProxySelector.c index 688390265cb..6d17e2bc13b 100644 --- a/jdk/src/solaris/native/sun/net/spi/DefaultProxySelector.c +++ b/jdk/src/solaris/native/sun/net/spi/DefaultProxySelector.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 2004, 2010, Oracle and/or its affiliates. All rights reserved. + * 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 diff --git a/jdk/src/solaris/native/sun/nio/ch/DatagramChannelImpl.c b/jdk/src/solaris/native/sun/nio/ch/DatagramChannelImpl.c index 3bccd574871..d8514a84126 100644 --- a/jdk/src/solaris/native/sun/nio/ch/DatagramChannelImpl.c +++ b/jdk/src/solaris/native/sun/nio/ch/DatagramChannelImpl.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 2001, 2008, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2001, 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 diff --git a/jdk/src/solaris/native/sun/nio/ch/DatagramDispatcher.c b/jdk/src/solaris/native/sun/nio/ch/DatagramDispatcher.c index 594ef9ffed4..f9f2391d862 100644 --- a/jdk/src/solaris/native/sun/nio/ch/DatagramDispatcher.c +++ b/jdk/src/solaris/native/sun/nio/ch/DatagramDispatcher.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 2002, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2002, 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 diff --git a/jdk/src/solaris/native/sun/nio/ch/DevPollArrayWrapper.c b/jdk/src/solaris/native/sun/nio/ch/DevPollArrayWrapper.c index 134a279176f..962f5e49263 100644 --- a/jdk/src/solaris/native/sun/nio/ch/DevPollArrayWrapper.c +++ b/jdk/src/solaris/native/sun/nio/ch/DevPollArrayWrapper.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 2001, 2005, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2001, 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 diff --git a/jdk/src/solaris/native/sun/nio/ch/EPoll.c b/jdk/src/solaris/native/sun/nio/ch/EPoll.c index 667270491c4..ea9cdf4dd03 100644 --- a/jdk/src/solaris/native/sun/nio/ch/EPoll.c +++ b/jdk/src/solaris/native/sun/nio/ch/EPoll.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 2008, 2009, Oracle and/or its affiliates. All rights reserved. + * 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 diff --git a/jdk/src/solaris/native/sun/nio/ch/EPollArrayWrapper.c b/jdk/src/solaris/native/sun/nio/ch/EPollArrayWrapper.c index 22ffd1d5029..c7b391f930a 100644 --- a/jdk/src/solaris/native/sun/nio/ch/EPollArrayWrapper.c +++ b/jdk/src/solaris/native/sun/nio/ch/EPollArrayWrapper.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 2005, 2008, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2005, 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 diff --git a/jdk/src/solaris/native/sun/nio/ch/FileChannelImpl.c b/jdk/src/solaris/native/sun/nio/ch/FileChannelImpl.c index 8e5c0fd2d05..d47cc3da10b 100644 --- a/jdk/src/solaris/native/sun/nio/ch/FileChannelImpl.c +++ b/jdk/src/solaris/native/sun/nio/ch/FileChannelImpl.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 2000, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2000, 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 diff --git a/jdk/src/solaris/native/sun/nio/ch/FileDispatcherImpl.c b/jdk/src/solaris/native/sun/nio/ch/FileDispatcherImpl.c index 4d987b91f05..25beacc3d5d 100644 --- a/jdk/src/solaris/native/sun/nio/ch/FileDispatcherImpl.c +++ b/jdk/src/solaris/native/sun/nio/ch/FileDispatcherImpl.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 2000, 2009, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2000, 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 diff --git a/jdk/src/solaris/native/sun/nio/ch/FileKey.c b/jdk/src/solaris/native/sun/nio/ch/FileKey.c index 85719b297a8..ddb88329eca 100644 --- a/jdk/src/solaris/native/sun/nio/ch/FileKey.c +++ b/jdk/src/solaris/native/sun/nio/ch/FileKey.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 2005, 2008, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2005, 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 diff --git a/jdk/src/solaris/native/sun/nio/ch/IOUtil.c b/jdk/src/solaris/native/sun/nio/ch/IOUtil.c index 77ea58060cf..58ef02014b5 100644 --- a/jdk/src/solaris/native/sun/nio/ch/IOUtil.c +++ b/jdk/src/solaris/native/sun/nio/ch/IOUtil.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 2000, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2000, 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 diff --git a/jdk/src/solaris/native/sun/nio/ch/Net.c b/jdk/src/solaris/native/sun/nio/ch/Net.c index 907baff1ba8..f37fe88b18e 100644 --- a/jdk/src/solaris/native/sun/nio/ch/Net.c +++ b/jdk/src/solaris/native/sun/nio/ch/Net.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 2001, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2001, 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 diff --git a/jdk/src/solaris/native/sun/nio/ch/SolarisEventPort.c b/jdk/src/solaris/native/sun/nio/ch/SolarisEventPort.c index 70f6db481d9..09b580cfbf0 100644 --- a/jdk/src/solaris/native/sun/nio/ch/SolarisEventPort.c +++ b/jdk/src/solaris/native/sun/nio/ch/SolarisEventPort.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 2008, 2009, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2008, 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 diff --git a/jdk/src/solaris/native/sun/nio/ch/sctp/Sctp.h b/jdk/src/solaris/native/sun/nio/ch/sctp/Sctp.h index ea5d5a78211..cc1367f781b 100644 --- a/jdk/src/solaris/native/sun/nio/ch/sctp/Sctp.h +++ b/jdk/src/solaris/native/sun/nio/ch/sctp/Sctp.h @@ -1,5 +1,5 @@ /* - * Copyright (c) 2009, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2009, 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 diff --git a/jdk/src/solaris/native/sun/nio/ch/sctp/SctpChannelImpl.c b/jdk/src/solaris/native/sun/nio/ch/sctp/SctpChannelImpl.c index 4333720c3d8..b432403e9db 100644 --- a/jdk/src/solaris/native/sun/nio/ch/sctp/SctpChannelImpl.c +++ b/jdk/src/solaris/native/sun/nio/ch/sctp/SctpChannelImpl.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 2009, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2009, 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 diff --git a/jdk/src/solaris/native/sun/nio/ch/sctp/SctpNet.c b/jdk/src/solaris/native/sun/nio/ch/sctp/SctpNet.c index 35f7315de98..57c4fae4fa5 100644 --- a/jdk/src/solaris/native/sun/nio/ch/sctp/SctpNet.c +++ b/jdk/src/solaris/native/sun/nio/ch/sctp/SctpNet.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 2009, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2009, 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 diff --git a/jdk/src/solaris/native/sun/nio/ch/sctp/SctpServerChannelImpl.c b/jdk/src/solaris/native/sun/nio/ch/sctp/SctpServerChannelImpl.c index 4469cf2ea4d..86309861c67 100644 --- a/jdk/src/solaris/native/sun/nio/ch/sctp/SctpServerChannelImpl.c +++ b/jdk/src/solaris/native/sun/nio/ch/sctp/SctpServerChannelImpl.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 2009, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2009, 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 diff --git a/jdk/src/solaris/native/sun/nio/fs/BsdNativeDispatcher.c b/jdk/src/solaris/native/sun/nio/fs/BsdNativeDispatcher.c index 71ecd9058de..0b4f2a74dff 100644 --- a/jdk/src/solaris/native/sun/nio/fs/BsdNativeDispatcher.c +++ b/jdk/src/solaris/native/sun/nio/fs/BsdNativeDispatcher.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 2008, 2009, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2008, 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 diff --git a/jdk/src/solaris/native/sun/nio/fs/GnomeFileTypeDetector.c b/jdk/src/solaris/native/sun/nio/fs/GnomeFileTypeDetector.c index 0bd8dbabf86..9feada6d13a 100644 --- a/jdk/src/solaris/native/sun/nio/fs/GnomeFileTypeDetector.c +++ b/jdk/src/solaris/native/sun/nio/fs/GnomeFileTypeDetector.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 2008, 2009, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2008, 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 diff --git a/jdk/src/solaris/native/sun/nio/fs/LinuxNativeDispatcher.c b/jdk/src/solaris/native/sun/nio/fs/LinuxNativeDispatcher.c index 5a158fcaa76..1de7d5b3c98 100644 --- a/jdk/src/solaris/native/sun/nio/fs/LinuxNativeDispatcher.c +++ b/jdk/src/solaris/native/sun/nio/fs/LinuxNativeDispatcher.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 2008, 2009, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2008, 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 diff --git a/jdk/src/solaris/native/sun/nio/fs/LinuxWatchService.c b/jdk/src/solaris/native/sun/nio/fs/LinuxWatchService.c index ca4ce5e6f62..375aaa48505 100644 --- a/jdk/src/solaris/native/sun/nio/fs/LinuxWatchService.c +++ b/jdk/src/solaris/native/sun/nio/fs/LinuxWatchService.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 2008, 2009, Oracle and/or its affiliates. All rights reserved. + * 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 diff --git a/jdk/src/solaris/native/sun/nio/fs/MacOSXNativeDispatcher.c b/jdk/src/solaris/native/sun/nio/fs/MacOSXNativeDispatcher.c index 50c5e2101a0..f3602b8fdb7 100644 --- a/jdk/src/solaris/native/sun/nio/fs/MacOSXNativeDispatcher.c +++ b/jdk/src/solaris/native/sun/nio/fs/MacOSXNativeDispatcher.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 2008, 2009, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2008, 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 diff --git a/jdk/src/solaris/native/sun/nio/fs/SolarisNativeDispatcher.c b/jdk/src/solaris/native/sun/nio/fs/SolarisNativeDispatcher.c index 5c93feef094..1480ea9046b 100644 --- a/jdk/src/solaris/native/sun/nio/fs/SolarisNativeDispatcher.c +++ b/jdk/src/solaris/native/sun/nio/fs/SolarisNativeDispatcher.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 2008, 2009, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2008, 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 diff --git a/jdk/src/solaris/native/sun/nio/fs/UnixNativeDispatcher.c b/jdk/src/solaris/native/sun/nio/fs/UnixNativeDispatcher.c index 09ee01bcb11..45d1191c43a 100644 --- a/jdk/src/solaris/native/sun/nio/fs/UnixNativeDispatcher.c +++ b/jdk/src/solaris/native/sun/nio/fs/UnixNativeDispatcher.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 2008, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2008, 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 diff --git a/jdk/src/solaris/native/sun/nio/fs/genSolarisConstants.c b/jdk/src/solaris/native/sun/nio/fs/genSolarisConstants.c index 346bfbbe542..493fb86db00 100644 --- a/jdk/src/solaris/native/sun/nio/fs/genSolarisConstants.c +++ b/jdk/src/solaris/native/sun/nio/fs/genSolarisConstants.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 2008, 2009, Oracle and/or its affiliates. All rights reserved. + * 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 diff --git a/jdk/src/solaris/native/sun/nio/fs/genUnixConstants.c b/jdk/src/solaris/native/sun/nio/fs/genUnixConstants.c index ee46c73bc51..c2cfc0aba39 100644 --- a/jdk/src/solaris/native/sun/nio/fs/genUnixConstants.c +++ b/jdk/src/solaris/native/sun/nio/fs/genUnixConstants.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 2008, 2009, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2008, 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 diff --git a/jdk/src/solaris/native/sun/security/jgss/wrapper/NativeFunc.c b/jdk/src/solaris/native/sun/security/jgss/wrapper/NativeFunc.c index f46c00a9be9..8a1d0ee93ce 100644 --- a/jdk/src/solaris/native/sun/security/jgss/wrapper/NativeFunc.c +++ b/jdk/src/solaris/native/sun/security/jgss/wrapper/NativeFunc.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 2005, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2005, 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 diff --git a/jdk/src/solaris/native/sun/security/pkcs11/j2secmod_md.c b/jdk/src/solaris/native/sun/security/pkcs11/j2secmod_md.c index a69f12bb164..2aca46cfbbe 100644 --- a/jdk/src/solaris/native/sun/security/pkcs11/j2secmod_md.c +++ b/jdk/src/solaris/native/sun/security/pkcs11/j2secmod_md.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 2005, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2005, 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 diff --git a/jdk/src/solaris/native/sun/security/pkcs11/wrapper/p11_md.c b/jdk/src/solaris/native/sun/security/pkcs11/wrapper/p11_md.c index 277f114145f..042cf234da0 100644 --- a/jdk/src/solaris/native/sun/security/pkcs11/wrapper/p11_md.c +++ b/jdk/src/solaris/native/sun/security/pkcs11/wrapper/p11_md.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, 2008, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 2012, Oracle and/or its affiliates. All rights reserved. */ /* Copyright (c) 2002 Graz University of Technology. All rights reserved. diff --git a/jdk/src/solaris/native/sun/security/smartcardio/pcsc_md.c b/jdk/src/solaris/native/sun/security/smartcardio/pcsc_md.c index 4e8199af3a2..589f3e3dd75 100644 --- a/jdk/src/solaris/native/sun/security/smartcardio/pcsc_md.c +++ b/jdk/src/solaris/native/sun/security/smartcardio/pcsc_md.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 2005, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2005, 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 diff --git a/jdk/src/solaris/npt/npt_md.h b/jdk/src/solaris/npt/npt_md.h index 7a85205543a..9b0c33655a3 100644 --- a/jdk/src/solaris/npt/npt_md.h +++ b/jdk/src/solaris/npt/npt_md.h @@ -1,5 +1,5 @@ /* - * Copyright (c) 2004, 2005, Oracle and/or its affiliates. All rights reserved. + * 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 diff --git a/jdk/src/solaris/transport/socket/socket_md.c b/jdk/src/solaris/transport/socket/socket_md.c index f5705039f88..74e8d846c7b 100644 --- a/jdk/src/solaris/transport/socket/socket_md.c +++ b/jdk/src/solaris/transport/socket/socket_md.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 1998, 2008, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1998, 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 diff --git a/jdk/src/windows/classes/com/sun/management/OperatingSystem.java b/jdk/src/windows/classes/com/sun/management/OperatingSystem.java index f9481124484..0c5bf9bab73 100644 --- a/jdk/src/windows/classes/com/sun/management/OperatingSystem.java +++ b/jdk/src/windows/classes/com/sun/management/OperatingSystem.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, 2005, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 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 diff --git a/jdk/src/windows/classes/java/io/DefaultFileSystem.java b/jdk/src/windows/classes/java/io/DefaultFileSystem.java new file mode 100644 index 00000000000..9256dca151d --- /dev/null +++ b/jdk/src/windows/classes/java/io/DefaultFileSystem.java @@ -0,0 +1,40 @@ +/* + * Copyright (c) 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. 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.io; + +/** + * + * @since 1.8 + */ +class DefaultFileSystem { + + /** + * Return the FileSystem object for Windows platform. + */ + public static FileSystem getFileSystem() { + return new WinNTFileSystem(); + } +} diff --git a/jdk/src/windows/classes/java/io/Win32FileSystem.java b/jdk/src/windows/classes/java/io/Win32FileSystem.java deleted file mode 100644 index 4040c128fb1..00000000000 --- a/jdk/src/windows/classes/java/io/Win32FileSystem.java +++ /dev/null @@ -1,608 +0,0 @@ -/* - * Copyright (c) 1998, 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 java.io; - -import java.security.AccessController; -import java.util.Locale; -import sun.security.action.GetPropertyAction; - - -class Win32FileSystem extends FileSystem { - - private final char slash; - private final char altSlash; - private final char semicolon; - - public Win32FileSystem() { - slash = AccessController.doPrivileged( - new GetPropertyAction("file.separator")).charAt(0); - semicolon = AccessController.doPrivileged( - new GetPropertyAction("path.separator")).charAt(0); - altSlash = (this.slash == '\\') ? '/' : '\\'; - } - - private boolean isSlash(char c) { - return (c == '\\') || (c == '/'); - } - - private boolean isLetter(char c) { - return ((c >= 'a') && (c <= 'z')) || ((c >= 'A') && (c <= 'Z')); - } - - private String slashify(String p) { - if ((p.length() > 0) && (p.charAt(0) != slash)) return slash + p; - else return p; - } - - - /* -- Normalization and construction -- */ - - public char getSeparator() { - return slash; - } - - public char getPathSeparator() { - return semicolon; - } - - /* A normal Win32 pathname contains no duplicate slashes, except possibly - for a UNC prefix, and does not end with a slash. It may be the empty - string. Normalized Win32 pathnames have the convenient property that - the length of the prefix almost uniquely identifies the type of the path - and whether it is absolute or relative: - - 0 relative to both drive and directory - 1 drive-relative (begins with '\\') - 2 absolute UNC (if first char is '\\'), - else directory-relative (has form "z:foo") - 3 absolute local pathname (begins with "z:\\") - */ - - private int normalizePrefix(String path, int len, StringBuffer sb) { - int src = 0; - while ((src < len) && isSlash(path.charAt(src))) src++; - char c; - if ((len - src >= 2) - && isLetter(c = path.charAt(src)) - && path.charAt(src + 1) == ':') { - /* Remove leading slashes if followed by drive specifier. - This hack is necessary to support file URLs containing drive - specifiers (e.g., "file://c:/path"). As a side effect, - "/c:/path" can be used as an alternative to "c:/path". */ - sb.append(c); - sb.append(':'); - src += 2; - } else { - src = 0; - if ((len >= 2) - && isSlash(path.charAt(0)) - && isSlash(path.charAt(1))) { - /* UNC pathname: Retain first slash; leave src pointed at - second slash so that further slashes will be collapsed - into the second slash. The result will be a pathname - beginning with "\\\\" followed (most likely) by a host - name. */ - src = 1; - sb.append(slash); - } - } - return src; - } - - /* Normalize the given pathname, whose length is len, starting at the given - offset; everything before this offset is already normal. */ - private String normalize(String path, int len, int off) { - if (len == 0) return path; - if (off < 3) off = 0; /* Avoid fencepost cases with UNC pathnames */ - int src; - char slash = this.slash; - StringBuffer sb = new StringBuffer(len); - - if (off == 0) { - /* Complete normalization, including prefix */ - src = normalizePrefix(path, len, sb); - } else { - /* Partial normalization */ - src = off; - sb.append(path.substring(0, off)); - } - - /* Remove redundant slashes from the remainder of the path, forcing all - slashes into the preferred slash */ - while (src < len) { - char c = path.charAt(src++); - if (isSlash(c)) { - while ((src < len) && isSlash(path.charAt(src))) src++; - if (src == len) { - /* Check for trailing separator */ - int sn = sb.length(); - if ((sn == 2) && (sb.charAt(1) == ':')) { - /* "z:\\" */ - sb.append(slash); - break; - } - if (sn == 0) { - /* "\\" */ - sb.append(slash); - break; - } - if ((sn == 1) && (isSlash(sb.charAt(0)))) { - /* "\\\\" is not collapsed to "\\" because "\\\\" marks - the beginning of a UNC pathname. Even though it is - not, by itself, a valid UNC pathname, we leave it as - is in order to be consistent with the win32 APIs, - which treat this case as an invalid UNC pathname - rather than as an alias for the root directory of - the current drive. */ - sb.append(slash); - break; - } - /* Path does not denote a root directory, so do not append - trailing slash */ - break; - } else { - sb.append(slash); - } - } else { - sb.append(c); - } - } - - String rv = sb.toString(); - return rv; - } - - /* Check that the given pathname is normal. If not, invoke the real - normalizer on the part of the pathname that requires normalization. - This way we iterate through the whole pathname string only once. */ - public String normalize(String path) { - int n = path.length(); - char slash = this.slash; - char altSlash = this.altSlash; - char prev = 0; - for (int i = 0; i < n; i++) { - char c = path.charAt(i); - if (c == altSlash) - return normalize(path, n, (prev == slash) ? i - 1 : i); - if ((c == slash) && (prev == slash) && (i > 1)) - return normalize(path, n, i - 1); - if ((c == ':') && (i > 1)) - return normalize(path, n, 0); - prev = c; - } - if (prev == slash) return normalize(path, n, n - 1); - return path; - } - - public int prefixLength(String path) { - char slash = this.slash; - int n = path.length(); - if (n == 0) return 0; - char c0 = path.charAt(0); - char c1 = (n > 1) ? path.charAt(1) : 0; - if (c0 == slash) { - if (c1 == slash) return 2; /* Absolute UNC pathname "\\\\foo" */ - return 1; /* Drive-relative "\\foo" */ - } - if (isLetter(c0) && (c1 == ':')) { - if ((n > 2) && (path.charAt(2) == slash)) - return 3; /* Absolute local pathname "z:\\foo" */ - return 2; /* Directory-relative "z:foo" */ - } - return 0; /* Completely relative */ - } - - public String resolve(String parent, String child) { - int pn = parent.length(); - if (pn == 0) return child; - int cn = child.length(); - if (cn == 0) return parent; - - String c = child; - int childStart = 0; - int parentEnd = pn; - - if ((cn > 1) && (c.charAt(0) == slash)) { - if (c.charAt(1) == slash) { - /* Drop prefix when child is a UNC pathname */ - childStart = 2; - } else { - /* Drop prefix when child is drive-relative */ - childStart = 1; - - } - if (cn == childStart) { // Child is double slash - if (parent.charAt(pn - 1) == slash) - return parent.substring(0, pn - 1); - return parent; - } - } - - if (parent.charAt(pn - 1) == slash) - parentEnd--; - - int strlen = parentEnd + cn - childStart; - char[] theChars = null; - if (child.charAt(childStart) == slash) { - theChars = new char[strlen]; - parent.getChars(0, parentEnd, theChars, 0); - child.getChars(childStart, cn, theChars, parentEnd); - } else { - theChars = new char[strlen + 1]; - parent.getChars(0, parentEnd, theChars, 0); - theChars[parentEnd] = slash; - child.getChars(childStart, cn, theChars, parentEnd + 1); - } - return new String(theChars); - } - - public String getDefaultParent() { - return ("" + slash); - } - - public String fromURIPath(String path) { - String p = path; - if ((p.length() > 2) && (p.charAt(2) == ':')) { - // "/c:/foo" --> "c:/foo" - p = p.substring(1); - // "c:/foo/" --> "c:/foo", but "c:/" --> "c:/" - if ((p.length() > 3) && p.endsWith("/")) - p = p.substring(0, p.length() - 1); - } else if ((p.length() > 1) && p.endsWith("/")) { - // "/foo/" --> "/foo" - p = p.substring(0, p.length() - 1); - } - return p; - } - - - - /* -- Path operations -- */ - - public boolean isAbsolute(File f) { - int pl = f.getPrefixLength(); - return (((pl == 2) && (f.getPath().charAt(0) == slash)) - || (pl == 3)); - } - - protected native String getDriveDirectory(int drive); - - private static String[] driveDirCache = new String[26]; - - private static int driveIndex(char d) { - if ((d >= 'a') && (d <= 'z')) return d - 'a'; - if ((d >= 'A') && (d <= 'Z')) return d - 'A'; - return -1; - } - - private String getDriveDirectory(char drive) { - int i = driveIndex(drive); - if (i < 0) return null; - String s = driveDirCache[i]; - if (s != null) return s; - s = getDriveDirectory(i + 1); - driveDirCache[i] = s; - return s; - } - - private String getUserPath() { - /* For both compatibility and security, - we must look this up every time */ - return normalize(System.getProperty("user.dir")); - } - - private String getDrive(String path) { - int pl = prefixLength(path); - return (pl == 3) ? path.substring(0, 2) : null; - } - - public String resolve(File f) { - String path = f.getPath(); - int pl = f.getPrefixLength(); - if ((pl == 2) && (path.charAt(0) == slash)) - return path; /* UNC */ - if (pl == 3) - return path; /* Absolute local */ - if (pl == 0) - return getUserPath() + slashify(path); /* Completely relative */ - if (pl == 1) { /* Drive-relative */ - String up = getUserPath(); - String ud = getDrive(up); - if (ud != null) return ud + path; - return up + path; /* User dir is a UNC path */ - } - if (pl == 2) { /* Directory-relative */ - String up = getUserPath(); - String ud = getDrive(up); - if ((ud != null) && path.startsWith(ud)) - return up + slashify(path.substring(2)); - char drive = path.charAt(0); - String dir = getDriveDirectory(drive); - String np; - if (dir != null) { - /* When resolving a directory-relative path that refers to a - drive other than the current drive, insist that the caller - have read permission on the result */ - String p = drive + (':' + dir + slashify(path.substring(2))); - SecurityManager security = System.getSecurityManager(); - try { - if (security != null) security.checkRead(p); - } catch (SecurityException x) { - /* Don't disclose the drive's directory in the exception */ - throw new SecurityException("Cannot resolve path " + path); - } - return p; - } - return drive + ":" + slashify(path.substring(2)); /* fake it */ - } - throw new InternalError("Unresolvable path: " + path); - } - - // Caches for canonicalization results to improve startup performance. - // The first cache handles repeated canonicalizations of the same path - // name. The prefix cache handles repeated canonicalizations within the - // same directory, and must not create results differing from the true - // canonicalization algorithm in canonicalize_md.c. For this reason the - // prefix cache is conservative and is not used for complex path names. - private ExpiringCache cache = new ExpiringCache(); - private ExpiringCache prefixCache = new ExpiringCache(); - - public String canonicalize(String path) throws IOException { - // If path is a drive letter only then skip canonicalization - int len = path.length(); - if ((len == 2) && - (isLetter(path.charAt(0))) && - (path.charAt(1) == ':')) { - char c = path.charAt(0); - if ((c >= 'A') && (c <= 'Z')) - return path; - return "" + ((char) (c-32)) + ':'; - } else if ((len == 3) && - (isLetter(path.charAt(0))) && - (path.charAt(1) == ':') && - (path.charAt(2) == '\\')) { - char c = path.charAt(0); - if ((c >= 'A') && (c <= 'Z')) - return path; - return "" + ((char) (c-32)) + ':' + '\\'; - } - if (!useCanonCaches) { - return canonicalize0(path); - } else { - String res = cache.get(path); - if (res == null) { - String dir = null; - String resDir = null; - if (useCanonPrefixCache) { - dir = parentOrNull(path); - if (dir != null) { - resDir = prefixCache.get(dir); - if (resDir != null) { - // Hit only in prefix cache; full path is canonical, - // but we need to get the canonical name of the file - // in this directory to get the appropriate capitalization - String filename = path.substring(1 + dir.length()); - res = canonicalizeWithPrefix(resDir, filename); - cache.put(dir + File.separatorChar + filename, res); - } - } - } - if (res == null) { - res = canonicalize0(path); - cache.put(path, res); - if (useCanonPrefixCache && dir != null) { - resDir = parentOrNull(res); - if (resDir != null) { - File f = new File(res); - if (f.exists() && !f.isDirectory()) { - prefixCache.put(dir, resDir); - } - } - } - } - } - return res; - } - } - - protected native String canonicalize0(String path) - throws IOException; - protected String canonicalizeWithPrefix(String canonicalPrefix, - String filename) throws IOException - { - return canonicalizeWithPrefix0(canonicalPrefix, - canonicalPrefix + File.separatorChar + filename); - } - // Run the canonicalization operation assuming that the prefix - // (everything up to the last filename) is canonical; just gets - // the canonical name of the last element of the path - protected native String canonicalizeWithPrefix0(String canonicalPrefix, - String pathWithCanonicalPrefix) - throws IOException; - // Best-effort attempt to get parent of this path; used for - // optimization of filename canonicalization. This must return null for - // any cases where the code in canonicalize_md.c would throw an - // exception or otherwise deal with non-simple pathnames like handling - // of "." and "..". It may conservatively return null in other - // situations as well. Returning null will cause the underlying - // (expensive) canonicalization routine to be called. - static String parentOrNull(String path) { - if (path == null) return null; - char sep = File.separatorChar; - char altSep = '/'; - int last = path.length() - 1; - int idx = last; - int adjacentDots = 0; - int nonDotCount = 0; - while (idx > 0) { - char c = path.charAt(idx); - if (c == '.') { - if (++adjacentDots >= 2) { - // Punt on pathnames containing . and .. - return null; - } - if (nonDotCount == 0) { - // Punt on pathnames ending in a . - return null; - } - } else if (c == sep) { - if (adjacentDots == 1 && nonDotCount == 0) { - // Punt on pathnames containing . and .. - return null; - } - if (idx == 0 || - idx >= last - 1 || - path.charAt(idx - 1) == sep || - path.charAt(idx - 1) == altSep) { - // Punt on pathnames containing adjacent slashes - // toward the end - return null; - } - return path.substring(0, idx); - } else if (c == altSep) { - // Punt on pathnames containing both backward and - // forward slashes - return null; - } else if (c == '*' || c == '?') { - // Punt on pathnames containing wildcards - return null; - } else { - ++nonDotCount; - adjacentDots = 0; - } - --idx; - } - return null; - } - - - /* -- Attribute accessors -- */ - - public native int getBooleanAttributes(File f); - public native boolean checkAccess(File f, int access); - public native long getLastModifiedTime(File f); - public native long getLength(File f); - public native boolean setPermission(File f, int access, boolean enable, boolean owneronly); - - /* -- File operations -- */ - - public native boolean createFileExclusively(String path) - throws IOException; - public boolean delete(File f) { - // Keep canonicalization caches in sync after file deletion - // and renaming operations. Could be more clever than this - // (i.e., only remove/update affected entries) but probably - // not worth it since these entries expire after 30 seconds - // anyway. - cache.clear(); - prefixCache.clear(); - return delete0(f); - } - protected native boolean delete0(File f); - public native String[] list(File f); - public native boolean createDirectory(File f); - public boolean rename(File f1, File f2) { - // Keep canonicalization caches in sync after file deletion - // and renaming operations. Could be more clever than this - // (i.e., only remove/update affected entries) but probably - // not worth it since these entries expire after 30 seconds - // anyway. - cache.clear(); - prefixCache.clear(); - return rename0(f1, f2); - } - protected native boolean rename0(File f1, File f2); - public native boolean setLastModifiedTime(File f, long time); - public native boolean setReadOnly(File f); - - - /* -- Filesystem interface -- */ - - private boolean access(String path) { - try { - SecurityManager security = System.getSecurityManager(); - if (security != null) security.checkRead(path); - return true; - } catch (SecurityException x) { - return false; - } - } - - private static native int listRoots0(); - - public File[] listRoots() { - int ds = listRoots0(); - int n = 0; - for (int i = 0; i < 26; i++) { - if (((ds >> i) & 1) != 0) { - if (!access((char)('A' + i) + ":" + slash)) - ds &= ~(1 << i); - else - n++; - } - } - File[] fs = new File[n]; - int j = 0; - char slash = this.slash; - for (int i = 0; i < 26; i++) { - if (((ds >> i) & 1) != 0) - fs[j++] = new File((char)('A' + i) + ":" + slash); - } - return fs; - } - - - /* -- Disk usage -- */ - public long getSpace(File f, int t) { - if (f.exists()) { - File file = (f.isDirectory() ? f : f.getParentFile()); - return getSpace0(file, t); - } - return 0; - } - - private native long getSpace0(File f, int t); - - - /* -- Basic infrastructure -- */ - - public int compare(File f1, File f2) { - return f1.getPath().compareToIgnoreCase(f2.getPath()); - } - - public int hashCode(File f) { - /* Could make this more efficient: String.hashCodeIgnoreCase */ - return f.getPath().toLowerCase(Locale.ENGLISH).hashCode() ^ 1234321; - } - - - private static native void initIDs(); - - static { - initIDs(); - } - -} diff --git a/jdk/src/windows/classes/java/io/WinNTFileSystem.java b/jdk/src/windows/classes/java/io/WinNTFileSystem.java index 5ad2eeb5be4..caa47f80c08 100644 --- a/jdk/src/windows/classes/java/io/WinNTFileSystem.java +++ b/jdk/src/windows/classes/java/io/WinNTFileSystem.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2001, 2006, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2001, 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 @@ -23,34 +23,601 @@ * questions. */ -/* - */ - package java.io; +import java.security.AccessController; +import java.util.Locale; +import sun.security.action.GetPropertyAction; + /** * Unicode-aware FileSystem for Windows NT/2000. * * @author Konstantin Kladko * @since 1.4 */ -class WinNTFileSystem extends Win32FileSystem { +class WinNTFileSystem extends FileSystem { - protected native String canonicalize0(String path) - throws IOException; - protected native String canonicalizeWithPrefix0(String canonicalPrefix, - String pathWithCanonicalPrefix) - throws IOException; + private final char slash; + private final char altSlash; + private final char semicolon; + + public WinNTFileSystem() { + slash = AccessController.doPrivileged( + new GetPropertyAction("file.separator")).charAt(0); + semicolon = AccessController.doPrivileged( + new GetPropertyAction("path.separator")).charAt(0); + altSlash = (this.slash == '\\') ? '/' : '\\'; + } + + private boolean isSlash(char c) { + return (c == '\\') || (c == '/'); + } + + private boolean isLetter(char c) { + return ((c >= 'a') && (c <= 'z')) || ((c >= 'A') && (c <= 'Z')); + } + + private String slashify(String p) { + if ((p.length() > 0) && (p.charAt(0) != slash)) return slash + p; + else return p; + } + + /* -- Normalization and construction -- */ + + @Override + public char getSeparator() { + return slash; + } + + @Override + public char getPathSeparator() { + return semicolon; + } + + /* Check that the given pathname is normal. If not, invoke the real + normalizer on the part of the pathname that requires normalization. + This way we iterate through the whole pathname string only once. */ + @Override + public String normalize(String path) { + int n = path.length(); + char slash = this.slash; + char altSlash = this.altSlash; + char prev = 0; + for (int i = 0; i < n; i++) { + char c = path.charAt(i); + if (c == altSlash) + return normalize(path, n, (prev == slash) ? i - 1 : i); + if ((c == slash) && (prev == slash) && (i > 1)) + return normalize(path, n, i - 1); + if ((c == ':') && (i > 1)) + return normalize(path, n, 0); + prev = c; + } + if (prev == slash) return normalize(path, n, n - 1); + return path; + } + + /* Normalize the given pathname, whose length is len, starting at the given + offset; everything before this offset is already normal. */ + private String normalize(String path, int len, int off) { + if (len == 0) return path; + if (off < 3) off = 0; /* Avoid fencepost cases with UNC pathnames */ + int src; + char slash = this.slash; + StringBuffer sb = new StringBuffer(len); + + if (off == 0) { + /* Complete normalization, including prefix */ + src = normalizePrefix(path, len, sb); + } else { + /* Partial normalization */ + src = off; + sb.append(path.substring(0, off)); + } + + /* Remove redundant slashes from the remainder of the path, forcing all + slashes into the preferred slash */ + while (src < len) { + char c = path.charAt(src++); + if (isSlash(c)) { + while ((src < len) && isSlash(path.charAt(src))) src++; + if (src == len) { + /* Check for trailing separator */ + int sn = sb.length(); + if ((sn == 2) && (sb.charAt(1) == ':')) { + /* "z:\\" */ + sb.append(slash); + break; + } + if (sn == 0) { + /* "\\" */ + sb.append(slash); + break; + } + if ((sn == 1) && (isSlash(sb.charAt(0)))) { + /* "\\\\" is not collapsed to "\\" because "\\\\" marks + the beginning of a UNC pathname. Even though it is + not, by itself, a valid UNC pathname, we leave it as + is in order to be consistent with the win32 APIs, + which treat this case as an invalid UNC pathname + rather than as an alias for the root directory of + the current drive. */ + sb.append(slash); + break; + } + /* Path does not denote a root directory, so do not append + trailing slash */ + break; + } else { + sb.append(slash); + } + } else { + sb.append(c); + } + } + + String rv = sb.toString(); + return rv; + } + + /* A normal Win32 pathname contains no duplicate slashes, except possibly + for a UNC prefix, and does not end with a slash. It may be the empty + string. Normalized Win32 pathnames have the convenient property that + the length of the prefix almost uniquely identifies the type of the path + and whether it is absolute or relative: + + 0 relative to both drive and directory + 1 drive-relative (begins with '\\') + 2 absolute UNC (if first char is '\\'), + else directory-relative (has form "z:foo") + 3 absolute local pathname (begins with "z:\\") + */ + private int normalizePrefix(String path, int len, StringBuffer sb) { + int src = 0; + while ((src < len) && isSlash(path.charAt(src))) src++; + char c; + if ((len - src >= 2) + && isLetter(c = path.charAt(src)) + && path.charAt(src + 1) == ':') { + /* Remove leading slashes if followed by drive specifier. + This hack is necessary to support file URLs containing drive + specifiers (e.g., "file://c:/path"). As a side effect, + "/c:/path" can be used as an alternative to "c:/path". */ + sb.append(c); + sb.append(':'); + src += 2; + } else { + src = 0; + if ((len >= 2) + && isSlash(path.charAt(0)) + && isSlash(path.charAt(1))) { + /* UNC pathname: Retain first slash; leave src pointed at + second slash so that further slashes will be collapsed + into the second slash. The result will be a pathname + beginning with "\\\\" followed (most likely) by a host + name. */ + src = 1; + sb.append(slash); + } + } + return src; + } + + @Override + public int prefixLength(String path) { + char slash = this.slash; + int n = path.length(); + if (n == 0) return 0; + char c0 = path.charAt(0); + char c1 = (n > 1) ? path.charAt(1) : 0; + if (c0 == slash) { + if (c1 == slash) return 2; /* Absolute UNC pathname "\\\\foo" */ + return 1; /* Drive-relative "\\foo" */ + } + if (isLetter(c0) && (c1 == ':')) { + if ((n > 2) && (path.charAt(2) == slash)) + return 3; /* Absolute local pathname "z:\\foo" */ + return 2; /* Directory-relative "z:foo" */ + } + return 0; /* Completely relative */ + } + + @Override + public String resolve(String parent, String child) { + int pn = parent.length(); + if (pn == 0) return child; + int cn = child.length(); + if (cn == 0) return parent; + + String c = child; + int childStart = 0; + int parentEnd = pn; + + if ((cn > 1) && (c.charAt(0) == slash)) { + if (c.charAt(1) == slash) { + /* Drop prefix when child is a UNC pathname */ + childStart = 2; + } else { + /* Drop prefix when child is drive-relative */ + childStart = 1; + + } + if (cn == childStart) { // Child is double slash + if (parent.charAt(pn - 1) == slash) + return parent.substring(0, pn - 1); + return parent; + } + } + + if (parent.charAt(pn - 1) == slash) + parentEnd--; + + int strlen = parentEnd + cn - childStart; + char[] theChars = null; + if (child.charAt(childStart) == slash) { + theChars = new char[strlen]; + parent.getChars(0, parentEnd, theChars, 0); + child.getChars(childStart, cn, theChars, parentEnd); + } else { + theChars = new char[strlen + 1]; + parent.getChars(0, parentEnd, theChars, 0); + theChars[parentEnd] = slash; + child.getChars(childStart, cn, theChars, parentEnd + 1); + } + return new String(theChars); + } + + @Override + public String getDefaultParent() { + return ("" + slash); + } + + @Override + public String fromURIPath(String path) { + String p = path; + if ((p.length() > 2) && (p.charAt(2) == ':')) { + // "/c:/foo" --> "c:/foo" + p = p.substring(1); + // "c:/foo/" --> "c:/foo", but "c:/" --> "c:/" + if ((p.length() > 3) && p.endsWith("/")) + p = p.substring(0, p.length() - 1); + } else if ((p.length() > 1) && p.endsWith("/")) { + // "/foo/" --> "/foo" + p = p.substring(0, p.length() - 1); + } + return p; + } + + /* -- Path operations -- */ + + @Override + public boolean isAbsolute(File f) { + int pl = f.getPrefixLength(); + return (((pl == 2) && (f.getPath().charAt(0) == slash)) + || (pl == 3)); + } + + @Override + public String resolve(File f) { + String path = f.getPath(); + int pl = f.getPrefixLength(); + if ((pl == 2) && (path.charAt(0) == slash)) + return path; /* UNC */ + if (pl == 3) + return path; /* Absolute local */ + if (pl == 0) + return getUserPath() + slashify(path); /* Completely relative */ + if (pl == 1) { /* Drive-relative */ + String up = getUserPath(); + String ud = getDrive(up); + if (ud != null) return ud + path; + return up + path; /* User dir is a UNC path */ + } + if (pl == 2) { /* Directory-relative */ + String up = getUserPath(); + String ud = getDrive(up); + if ((ud != null) && path.startsWith(ud)) + return up + slashify(path.substring(2)); + char drive = path.charAt(0); + String dir = getDriveDirectory(drive); + String np; + if (dir != null) { + /* When resolving a directory-relative path that refers to a + drive other than the current drive, insist that the caller + have read permission on the result */ + String p = drive + (':' + dir + slashify(path.substring(2))); + SecurityManager security = System.getSecurityManager(); + try { + if (security != null) security.checkRead(p); + } catch (SecurityException x) { + /* Don't disclose the drive's directory in the exception */ + throw new SecurityException("Cannot resolve path " + path); + } + return p; + } + return drive + ":" + slashify(path.substring(2)); /* fake it */ + } + throw new InternalError("Unresolvable path: " + path); + } + + private String getUserPath() { + /* For both compatibility and security, + we must look this up every time */ + return normalize(System.getProperty("user.dir")); + } + + private String getDrive(String path) { + int pl = prefixLength(path); + return (pl == 3) ? path.substring(0, 2) : null; + } + + private static String[] driveDirCache = new String[26]; + + private static int driveIndex(char d) { + if ((d >= 'a') && (d <= 'z')) return d - 'a'; + if ((d >= 'A') && (d <= 'Z')) return d - 'A'; + return -1; + } + + private native String getDriveDirectory(int drive); + + private String getDriveDirectory(char drive) { + int i = driveIndex(drive); + if (i < 0) return null; + String s = driveDirCache[i]; + if (s != null) return s; + s = getDriveDirectory(i + 1); + driveDirCache[i] = s; + return s; + } + + // Caches for canonicalization results to improve startup performance. + // The first cache handles repeated canonicalizations of the same path + // name. The prefix cache handles repeated canonicalizations within the + // same directory, and must not create results differing from the true + // canonicalization algorithm in canonicalize_md.c. For this reason the + // prefix cache is conservative and is not used for complex path names. + private ExpiringCache cache = new ExpiringCache(); + private ExpiringCache prefixCache = new ExpiringCache(); + + @Override + public String canonicalize(String path) throws IOException { + // If path is a drive letter only then skip canonicalization + int len = path.length(); + if ((len == 2) && + (isLetter(path.charAt(0))) && + (path.charAt(1) == ':')) { + char c = path.charAt(0); + if ((c >= 'A') && (c <= 'Z')) + return path; + return "" + ((char) (c-32)) + ':'; + } else if ((len == 3) && + (isLetter(path.charAt(0))) && + (path.charAt(1) == ':') && + (path.charAt(2) == '\\')) { + char c = path.charAt(0); + if ((c >= 'A') && (c <= 'Z')) + return path; + return "" + ((char) (c-32)) + ':' + '\\'; + } + if (!useCanonCaches) { + return canonicalize0(path); + } else { + String res = cache.get(path); + if (res == null) { + String dir = null; + String resDir = null; + if (useCanonPrefixCache) { + dir = parentOrNull(path); + if (dir != null) { + resDir = prefixCache.get(dir); + if (resDir != null) { + /* + * Hit only in prefix cache; full path is canonical, + * but we need to get the canonical name of the file + * in this directory to get the appropriate + * capitalization + */ + String filename = path.substring(1 + dir.length()); + res = canonicalizeWithPrefix(resDir, filename); + cache.put(dir + File.separatorChar + filename, res); + } + } + } + if (res == null) { + res = canonicalize0(path); + cache.put(path, res); + if (useCanonPrefixCache && dir != null) { + resDir = parentOrNull(res); + if (resDir != null) { + File f = new File(res); + if (f.exists() && !f.isDirectory()) { + prefixCache.put(dir, resDir); + } + } + } + } + } + return res; + } + } + + private native String canonicalize0(String path) + throws IOException; + + private String canonicalizeWithPrefix(String canonicalPrefix, + String filename) throws IOException + { + return canonicalizeWithPrefix0(canonicalPrefix, + canonicalPrefix + File.separatorChar + filename); + } + + // Run the canonicalization operation assuming that the prefix + // (everything up to the last filename) is canonical; just gets + // the canonical name of the last element of the path + private native String canonicalizeWithPrefix0(String canonicalPrefix, + String pathWithCanonicalPrefix) + throws IOException; + + // Best-effort attempt to get parent of this path; used for + // optimization of filename canonicalization. This must return null for + // any cases where the code in canonicalize_md.c would throw an + // exception or otherwise deal with non-simple pathnames like handling + // of "." and "..". It may conservatively return null in other + // situations as well. Returning null will cause the underlying + // (expensive) canonicalization routine to be called. + private static String parentOrNull(String path) { + if (path == null) return null; + char sep = File.separatorChar; + char altSep = '/'; + int last = path.length() - 1; + int idx = last; + int adjacentDots = 0; + int nonDotCount = 0; + while (idx > 0) { + char c = path.charAt(idx); + if (c == '.') { + if (++adjacentDots >= 2) { + // Punt on pathnames containing . and .. + return null; + } + if (nonDotCount == 0) { + // Punt on pathnames ending in a . + return null; + } + } else if (c == sep) { + if (adjacentDots == 1 && nonDotCount == 0) { + // Punt on pathnames containing . and .. + return null; + } + if (idx == 0 || + idx >= last - 1 || + path.charAt(idx - 1) == sep || + path.charAt(idx - 1) == altSep) { + // Punt on pathnames containing adjacent slashes + // toward the end + return null; + } + return path.substring(0, idx); + } else if (c == altSep) { + // Punt on pathnames containing both backward and + // forward slashes + return null; + } else if (c == '*' || c == '?') { + // Punt on pathnames containing wildcards + return null; + } else { + ++nonDotCount; + adjacentDots = 0; + } + --idx; + } + return null; + } /* -- Attribute accessors -- */ + @Override public native int getBooleanAttributes(File f); + + @Override public native boolean checkAccess(File f, int access); + + @Override public native long getLastModifiedTime(File f); + + @Override public native long getLength(File f); - public native boolean setPermission(File f, int access, boolean enable, boolean owneronly); + @Override + public native boolean setPermission(File f, int access, boolean enable, + boolean owneronly); + /* -- File operations -- */ + + @Override + public native boolean createFileExclusively(String path) + throws IOException; + + @Override + public native String[] list(File f); + + @Override + public native boolean createDirectory(File f); + + @Override + public native boolean setLastModifiedTime(File f, long time); + + @Override + public native boolean setReadOnly(File f); + + @Override + public boolean delete(File f) { + // Keep canonicalization caches in sync after file deletion + // and renaming operations. Could be more clever than this + // (i.e., only remove/update affected entries) but probably + // not worth it since these entries expire after 30 seconds + // anyway. + cache.clear(); + prefixCache.clear(); + return delete0(f); + } + + private native boolean delete0(File f); + + @Override + public boolean rename(File f1, File f2) { + // Keep canonicalization caches in sync after file deletion + // and renaming operations. Could be more clever than this + // (i.e., only remove/update affected entries) but probably + // not worth it since these entries expire after 30 seconds + // anyway. + cache.clear(); + prefixCache.clear(); + return rename0(f1, f2); + } + + private native boolean rename0(File f1, File f2); + + /* -- Filesystem interface -- */ + + @Override + public File[] listRoots() { + int ds = listRoots0(); + int n = 0; + for (int i = 0; i < 26; i++) { + if (((ds >> i) & 1) != 0) { + if (!access((char)('A' + i) + ":" + slash)) + ds &= ~(1 << i); + else + n++; + } + } + File[] fs = new File[n]; + int j = 0; + char slash = this.slash; + for (int i = 0; i < 26; i++) { + if (((ds >> i) & 1) != 0) + fs[j++] = new File((char)('A' + i) + ":" + slash); + } + return fs; + } + + private static native int listRoots0(); + + private boolean access(String path) { + try { + SecurityManager security = System.getSecurityManager(); + if (security != null) security.checkRead(path); + return true; + } catch (SecurityException x) { + return false; + } + } + + /* -- Disk usage -- */ + + @Override public long getSpace(File f, int t) { if (f.exists()) { return getSpace0(f, t); @@ -60,20 +627,22 @@ class WinNTFileSystem extends Win32FileSystem { private native long getSpace0(File f, int t); - /* -- File operations -- */ + /* -- Basic infrastructure -- */ + + @Override + public int compare(File f1, File f2) { + return f1.getPath().compareToIgnoreCase(f2.getPath()); + } + + @Override + public int hashCode(File f) { + /* Could make this more efficient: String.hashCodeIgnoreCase */ + return f.getPath().toLowerCase(Locale.ENGLISH).hashCode() ^ 1234321; + } - public native boolean createFileExclusively(String path) - throws IOException; - protected native boolean delete0(File f); - public native String[] list(File f); - public native boolean createDirectory(File f); - protected native boolean rename0(File f1, File f2); - public native boolean setLastModifiedTime(File f, long time); - public native boolean setReadOnly(File f); - protected native String getDriveDirectory(int drive); private static native void initIDs(); static { - initIDs(); + initIDs(); } } diff --git a/jdk/src/windows/classes/java/lang/ProcessEnvironment.java b/jdk/src/windows/classes/java/lang/ProcessEnvironment.java index c49f1f32781..43ff33ffe40 100644 --- a/jdk/src/windows/classes/java/lang/ProcessEnvironment.java +++ b/jdk/src/windows/classes/java/lang/ProcessEnvironment.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 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 diff --git a/jdk/src/windows/classes/java/lang/Terminator.java b/jdk/src/windows/classes/java/lang/Terminator.java index 6d3d2d6fa83..4b2c2847bf6 100644 --- a/jdk/src/windows/classes/java/lang/Terminator.java +++ b/jdk/src/windows/classes/java/lang/Terminator.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1999, 2001, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1999, 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 diff --git a/jdk/src/windows/classes/java/net/DefaultInterface.java b/jdk/src/windows/classes/java/net/DefaultInterface.java index 9f4dfe1a67e..3612a1d8068 100644 --- a/jdk/src/windows/classes/java/net/DefaultInterface.java +++ b/jdk/src/windows/classes/java/net/DefaultInterface.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2011, 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 diff --git a/jdk/src/windows/classes/java/net/TwoStacksPlainSocketImpl.java b/jdk/src/windows/classes/java/net/TwoStacksPlainSocketImpl.java index 0b020b39b57..6ca25ec6021 100644 --- a/jdk/src/windows/classes/java/net/TwoStacksPlainSocketImpl.java +++ b/jdk/src/windows/classes/java/net/TwoStacksPlainSocketImpl.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2007, 2008, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2007, 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 diff --git a/jdk/src/windows/classes/sun/awt/shell/Win32ShellFolder2.java b/jdk/src/windows/classes/sun/awt/shell/Win32ShellFolder2.java index 06331ba973b..c6cde3c73f4 100644 --- a/jdk/src/windows/classes/sun/awt/shell/Win32ShellFolder2.java +++ b/jdk/src/windows/classes/sun/awt/shell/Win32ShellFolder2.java @@ -1099,7 +1099,7 @@ final class Win32ShellFolder2 extends ShellFolder { ? SwingConstants.CENTER : SwingConstants.LEADING); - column.setComparator(new ColumnComparator(getIShellFolder(), i)); + column.setComparator(new ColumnComparator(Win32ShellFolder2.this, i)); notNullColumns.add(column); } @@ -1135,7 +1135,7 @@ final class Win32ShellFolder2 extends ShellFolder { // synchronize the whole code of the sort method once invoke(new Callable() { public Void call() { - Collections.sort(files, new ColumnComparator(getIShellFolder(), 0)); + Collections.sort(files, new ColumnComparator(Win32ShellFolder2.this, 0)); return null; } @@ -1143,12 +1143,12 @@ final class Win32ShellFolder2 extends ShellFolder { } private static class ColumnComparator implements Comparator { - private final long parentIShellFolder; + private final Win32ShellFolder2 shellFolder; private final int columnIdx; - public ColumnComparator(long parentIShellFolder, int columnIdx) { - this.parentIShellFolder = parentIShellFolder; + public ColumnComparator(Win32ShellFolder2 shellFolder, int columnIdx) { + this.shellFolder = shellFolder; this.columnIdx = columnIdx; } @@ -1159,7 +1159,7 @@ final class Win32ShellFolder2 extends ShellFolder { if (o instanceof Win32ShellFolder2 && o1 instanceof Win32ShellFolder2) { // delegates comparison to native method - return compareIDsByColumn(parentIShellFolder, + return compareIDsByColumn(shellFolder.getIShellFolder(), ((Win32ShellFolder2) o).getRelativePIDL(), ((Win32ShellFolder2) o1).getRelativePIDL(), columnIdx); diff --git a/jdk/src/windows/classes/sun/java2d/ScreenUpdateManager.java b/jdk/src/windows/classes/sun/java2d/ScreenUpdateManager.java index 27da53ef284..d15e28cb0ad 100644 --- a/jdk/src/windows/classes/sun/java2d/ScreenUpdateManager.java +++ b/jdk/src/windows/classes/sun/java2d/ScreenUpdateManager.java @@ -111,7 +111,7 @@ public class ScreenUpdateManager { SurfaceData oldsd) { SurfaceData surfaceData = peer.getSurfaceData(); - if (surfaceData.isValid()) { + if (surfaceData == null || surfaceData.isValid()) { return surfaceData; } peer.replaceSurfaceData(); diff --git a/jdk/src/windows/classes/sun/management/FileSystemImpl.java b/jdk/src/windows/classes/sun/management/FileSystemImpl.java index 789b7ee64ee..9bcd99de21d 100644 --- a/jdk/src/windows/classes/sun/management/FileSystemImpl.java +++ b/jdk/src/windows/classes/sun/management/FileSystemImpl.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2004, Oracle and/or its affiliates. All rights reserved. + * 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 diff --git a/jdk/src/windows/classes/sun/net/dns/ResolverConfigurationImpl.java b/jdk/src/windows/classes/sun/net/dns/ResolverConfigurationImpl.java index b896fbf6344..8ca7e8ffaf9 100644 --- a/jdk/src/windows/classes/sun/net/dns/ResolverConfigurationImpl.java +++ b/jdk/src/windows/classes/sun/net/dns/ResolverConfigurationImpl.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2002, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2002, 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 diff --git a/jdk/src/windows/classes/sun/nio/ch/NativeThread.java b/jdk/src/windows/classes/sun/nio/ch/NativeThread.java index 39a9fc6b902..319b5420b88 100644 --- a/jdk/src/windows/classes/sun/nio/ch/NativeThread.java +++ b/jdk/src/windows/classes/sun/nio/ch/NativeThread.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2002, 2008, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2002, 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 diff --git a/jdk/src/windows/classes/sun/nio/ch/SocketDispatcher.java b/jdk/src/windows/classes/sun/nio/ch/SocketDispatcher.java index faf99215cdc..a03d0af93ad 100644 --- a/jdk/src/windows/classes/sun/nio/ch/SocketDispatcher.java +++ b/jdk/src/windows/classes/sun/nio/ch/SocketDispatcher.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2000, 2005, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2000, 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 diff --git a/jdk/src/windows/classes/sun/nio/ch/WindowsSelectorImpl.java b/jdk/src/windows/classes/sun/nio/ch/WindowsSelectorImpl.java index b755e6ef0c4..beb3e861f83 100644 --- a/jdk/src/windows/classes/sun/nio/ch/WindowsSelectorImpl.java +++ b/jdk/src/windows/classes/sun/nio/ch/WindowsSelectorImpl.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2002, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2002, 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 diff --git a/jdk/src/windows/classes/sun/nio/ch/sctp/SctpChannelImpl.java b/jdk/src/windows/classes/sun/nio/ch/sctp/SctpChannelImpl.java index 52fcb8ea1f8..8a147203402 100644 --- a/jdk/src/windows/classes/sun/nio/ch/sctp/SctpChannelImpl.java +++ b/jdk/src/windows/classes/sun/nio/ch/sctp/SctpChannelImpl.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2009, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2009, 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 diff --git a/jdk/src/windows/classes/sun/nio/ch/sctp/SctpMultiChannelImpl.java b/jdk/src/windows/classes/sun/nio/ch/sctp/SctpMultiChannelImpl.java index afb52a92f65..c2c1d968307 100644 --- a/jdk/src/windows/classes/sun/nio/ch/sctp/SctpMultiChannelImpl.java +++ b/jdk/src/windows/classes/sun/nio/ch/sctp/SctpMultiChannelImpl.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2009, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2009, 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 diff --git a/jdk/src/windows/classes/sun/nio/ch/sctp/SctpServerChannelImpl.java b/jdk/src/windows/classes/sun/nio/ch/sctp/SctpServerChannelImpl.java index a8c50d3257a..1e224afd13f 100644 --- a/jdk/src/windows/classes/sun/nio/ch/sctp/SctpServerChannelImpl.java +++ b/jdk/src/windows/classes/sun/nio/ch/sctp/SctpServerChannelImpl.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2009, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2009, 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 diff --git a/jdk/src/windows/classes/sun/nio/fs/WindowsDirectoryStream.java b/jdk/src/windows/classes/sun/nio/fs/WindowsDirectoryStream.java index 02309ff01b2..cf4933eca7a 100644 --- a/jdk/src/windows/classes/sun/nio/fs/WindowsDirectoryStream.java +++ b/jdk/src/windows/classes/sun/nio/fs/WindowsDirectoryStream.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2008, 2010, Oracle and/or its affiliates. All rights reserved. + * 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 diff --git a/jdk/src/windows/classes/sun/nio/fs/WindowsFileSystemProvider.java b/jdk/src/windows/classes/sun/nio/fs/WindowsFileSystemProvider.java index a0020e52a69..70a37309e9e 100644 --- a/jdk/src/windows/classes/sun/nio/fs/WindowsFileSystemProvider.java +++ b/jdk/src/windows/classes/sun/nio/fs/WindowsFileSystemProvider.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2008, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2008, 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 diff --git a/jdk/src/windows/classes/sun/print/Win32PrintServiceLookup.java b/jdk/src/windows/classes/sun/print/Win32PrintServiceLookup.java index dc9e9ee1b27..06d4b0840dd 100644 --- a/jdk/src/windows/classes/sun/print/Win32PrintServiceLookup.java +++ b/jdk/src/windows/classes/sun/print/Win32PrintServiceLookup.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2000, 2007, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2000, 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 diff --git a/jdk/src/windows/classes/sun/security/krb5/internal/tools/Kinit.java b/jdk/src/windows/classes/sun/security/krb5/internal/tools/Kinit.java index eb748684557..a436d585cba 100644 --- a/jdk/src/windows/classes/sun/security/krb5/internal/tools/Kinit.java +++ b/jdk/src/windows/classes/sun/security/krb5/internal/tools/Kinit.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2000, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2000, 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 diff --git a/jdk/src/windows/classes/sun/security/krb5/internal/tools/KinitOptions.java b/jdk/src/windows/classes/sun/security/krb5/internal/tools/KinitOptions.java index abde927cda6..e7507a0a27f 100644 --- a/jdk/src/windows/classes/sun/security/krb5/internal/tools/KinitOptions.java +++ b/jdk/src/windows/classes/sun/security/krb5/internal/tools/KinitOptions.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2000, 2006, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2000, 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 diff --git a/jdk/src/windows/classes/sun/security/krb5/internal/tools/Ktab.java b/jdk/src/windows/classes/sun/security/krb5/internal/tools/Ktab.java index 9feacdf4d63..51c2c3dbc32 100644 --- a/jdk/src/windows/classes/sun/security/krb5/internal/tools/Ktab.java +++ b/jdk/src/windows/classes/sun/security/krb5/internal/tools/Ktab.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 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 diff --git a/jdk/src/windows/classes/sun/security/smartcardio/PlatformPCSC.java b/jdk/src/windows/classes/sun/security/smartcardio/PlatformPCSC.java index 0af23c0ddde..bd6704221cf 100644 --- a/jdk/src/windows/classes/sun/security/smartcardio/PlatformPCSC.java +++ b/jdk/src/windows/classes/sun/security/smartcardio/PlatformPCSC.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2005, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2005, 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 diff --git a/jdk/src/windows/classes/sun/tools/attach/WindowsAttachProvider.java b/jdk/src/windows/classes/sun/tools/attach/WindowsAttachProvider.java index cda6a73bc29..76083a4d559 100644 --- a/jdk/src/windows/classes/sun/tools/attach/WindowsAttachProvider.java +++ b/jdk/src/windows/classes/sun/tools/attach/WindowsAttachProvider.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2005, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2005, 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 diff --git a/jdk/src/windows/native/java/io/Win32FileSystem_md.c b/jdk/src/windows/native/java/io/Win32FileSystem_md.c deleted file mode 100644 index 91c086c48b9..00000000000 --- a/jdk/src/windows/native/java/io/Win32FileSystem_md.c +++ /dev/null @@ -1,509 +0,0 @@ -/* - * Copyright (c) 1998, 2006, 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 -#include -#include -#include -#include -#include -#include - -#include "jvm.h" -#include "jni.h" -#include "jni_util.h" -#include "jlong.h" -#include "io_util.h" -#include "dirent_md.h" -#include "java_io_FileSystem.h" - -/* This macro relies upon the fact that JNU_GetStringPlatformChars always makes - a copy of the string */ - -#define WITH_NATIVE_PATH(env, object, id, var) \ - WITH_FIELD_PLATFORM_STRING(env, object, id, var) \ - JVM_NativePath((char *)var); - -#define END_NATIVE_PATH(env, var) END_PLATFORM_STRING(env, var) - - -static struct { - jfieldID path; -} ids; - -JNIEXPORT void JNICALL -Java_java_io_Win32FileSystem_initIDs(JNIEnv *env, jclass cls) -{ - jclass fileClass = (*env)->FindClass(env, "java/io/File"); - if (!fileClass) return; - ids.path = (*env)->GetFieldID(env, fileClass, - "path", "Ljava/lang/String;"); -} - - -/* -- Path operations -- */ - - -extern int canonicalize(char *path, const char *out, int len); -extern int canonicalizeWithPrefix(const char* canonicalPrefix, const char *pathWithCanonicalPrefix, char *out, int len); - -JNIEXPORT jstring JNICALL -Java_java_io_Win32FileSystem_canonicalize0(JNIEnv *env, jobject this, - jstring pathname) -{ - jstring rv = NULL; - - WITH_PLATFORM_STRING(env, pathname, path) { - char canonicalPath[JVM_MAXPATHLEN]; - if (canonicalize(JVM_NativePath((char *)path), - canonicalPath, JVM_MAXPATHLEN) < 0) { - JNU_ThrowIOExceptionWithLastError(env, "Bad pathname"); - } else { - rv = JNU_NewStringPlatform(env, canonicalPath); - } - } END_PLATFORM_STRING(env, path); - return rv; -} - - -JNIEXPORT jstring JNICALL -Java_java_io_Win32FileSystem_canonicalizeWithPrefix0(JNIEnv *env, jobject this, - jstring canonicalPrefixString, - jstring pathWithCanonicalPrefixString) -{ - jstring rv = NULL; - char canonicalPath[JVM_MAXPATHLEN]; - - WITH_PLATFORM_STRING(env, canonicalPrefixString, canonicalPrefix) { - WITH_PLATFORM_STRING(env, pathWithCanonicalPrefixString, pathWithCanonicalPrefix) { - if (canonicalizeWithPrefix(canonicalPrefix, - pathWithCanonicalPrefix, - canonicalPath, JVM_MAXPATHLEN) < 0) { - JNU_ThrowIOExceptionWithLastError(env, "Bad pathname"); - } else { - rv = JNU_NewStringPlatform(env, canonicalPath); - } - } END_PLATFORM_STRING(env, pathWithCanonicalPrefix); - } END_PLATFORM_STRING(env, canonicalPrefix); - return rv; -} - - - -/* -- Attribute accessors -- */ - -/* Check whether or not the file name in "path" is a Windows reserved - device name (CON, PRN, AUX, NUL, COM[1-9], LPT[1-9]) based on the - returned result from GetFullPathName. If the file name in the path - is indeed a reserved device name GetFuulPathName returns - "\\.\[ReservedDeviceName]". - */ -BOOL isReservedDeviceName(const char* path) { -#define BUFSIZE 9 - char buf[BUFSIZE]; - char *lpf = NULL; - DWORD retLen = GetFullPathName(path, - BUFSIZE, - buf, - &lpf); - if ((retLen == BUFSIZE - 1 || retLen == BUFSIZE - 2) && - buf[0] == '\\' && buf[1] == '\\' && - buf[2] == '.' && buf[3] == '\\') { - char* dname = _strupr(buf + 4); - if (strcmp(dname, "CON") == 0 || - strcmp(dname, "PRN") == 0 || - strcmp(dname, "AUX") == 0 || - strcmp(dname, "NUL") == 0) - return TRUE; - if ((strncmp(dname, "COM", 3) == 0 || - strncmp(dname, "LPT", 3) == 0) && - dname[3] - '0' > 0 && - dname[3] - '0' <= 9) - return TRUE; - } - return FALSE; -} - -JNIEXPORT jint JNICALL -Java_java_io_Win32FileSystem_getBooleanAttributes(JNIEnv *env, jobject this, - jobject file) -{ - jint rv = 0; - - WITH_NATIVE_PATH(env, file, ids.path, path) { - WIN32_FILE_ATTRIBUTE_DATA wfad; - if (!isReservedDeviceName(path) && - GetFileAttributesEx(path, GetFileExInfoStandard, &wfad)) { - rv = (java_io_FileSystem_BA_EXISTS - | ((wfad.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) - ? java_io_FileSystem_BA_DIRECTORY - : java_io_FileSystem_BA_REGULAR) - | ((wfad.dwFileAttributes & FILE_ATTRIBUTE_HIDDEN) - ? java_io_FileSystem_BA_HIDDEN : 0)); - } - } END_NATIVE_PATH(env, path); - return rv; -} - - -JNIEXPORT jboolean JNICALL -Java_java_io_Win32FileSystem_checkAccess(JNIEnv *env, jobject this, - jobject file, jint a) -{ - jboolean rv = JNI_FALSE; - int mode; - switch (a) { - case java_io_FileSystem_ACCESS_READ: - case java_io_FileSystem_ACCESS_EXECUTE: - mode = 4; - break; - case java_io_FileSystem_ACCESS_WRITE: - mode = 2; - break; - default: assert(0); - } - WITH_NATIVE_PATH(env, file, ids.path, path) { - if (access(path, mode) == 0) { - rv = JNI_TRUE; - } - } END_NATIVE_PATH(env, path); - return rv; -} - -JNIEXPORT jboolean JNICALL -Java_java_io_Win32FileSystem_setPermission(JNIEnv *env, jobject this, - jobject file, - jint access, - jboolean enable, - jboolean owneronly) -{ - jboolean rv = JNI_FALSE; - if (access == java_io_FileSystem_ACCESS_READ || - access == java_io_FileSystem_ACCESS_EXECUTE) { - return enable; - } - WITH_NATIVE_PATH(env, file, ids.path, path) { - DWORD a; - a = GetFileAttributes(path); - if (a != INVALID_FILE_ATTRIBUTES) { - if (enable) - a = a & ~FILE_ATTRIBUTE_READONLY; - else - a = a | FILE_ATTRIBUTE_READONLY; - if (SetFileAttributes(path, a)) - rv = JNI_TRUE; - } - } END_NATIVE_PATH(env, path); - return rv; -} - -JNIEXPORT jlong JNICALL -Java_java_io_Win32FileSystem_getLastModifiedTime(JNIEnv *env, jobject this, - jobject file) -{ - jlong rv = 0; - WITH_NATIVE_PATH(env, file, ids.path, path) { - /* Win95, Win98, WinME */ - WIN32_FIND_DATA fd; - jlong temp = 0; - LARGE_INTEGER modTime; - HANDLE h = FindFirstFile(path, &fd); - if (h != INVALID_HANDLE_VALUE) { - FindClose(h); - modTime.LowPart = (DWORD) fd.ftLastWriteTime.dwLowDateTime; - modTime.HighPart = (LONG) fd.ftLastWriteTime.dwHighDateTime; - rv = modTime.QuadPart / 10000; - rv -= 11644473600000; - } - } END_NATIVE_PATH(env, path); - return rv; -} - -JNIEXPORT jlong JNICALL -Java_java_io_Win32FileSystem_getLength(JNIEnv *env, jobject this, - jobject file) -{ - jlong rv = 0; - - WITH_NATIVE_PATH(env, file, ids.path, path) { - struct _stati64 sb; - if (_stati64(path, &sb) == 0) { - rv = sb.st_size; - } - } END_NATIVE_PATH(env, path); - return rv; -} - - -/* -- File operations -- */ - - -JNIEXPORT jboolean JNICALL -Java_java_io_Win32FileSystem_createFileExclusively(JNIEnv *env, jclass cls, - jstring pathname) -{ - jboolean rv = JNI_FALSE; - DWORD a; - - WITH_PLATFORM_STRING(env, pathname, path) { - int orv; - int error; - JVM_NativePath((char *)path); - orv = JVM_Open(path, JVM_O_RDWR | JVM_O_CREAT | JVM_O_EXCL, 0666); - if (orv < 0) { - if (orv != JVM_EEXIST) { - error = GetLastError(); - - // If a directory by the named path already exists, - // return false (behavior of solaris and linux) instead of - // throwing an exception - a = GetFileAttributes(path); - - if ((a == INVALID_FILE_ATTRIBUTES) || - !(a & FILE_ATTRIBUTE_DIRECTORY)) { - SetLastError(error); - JNU_ThrowIOExceptionWithLastError(env, path); - } - } - } else { - JVM_Close(orv); - rv = JNI_TRUE; - } - } END_PLATFORM_STRING(env, path); - return rv; -} - - -static int -removeFileOrDirectory(const char *path) /* Returns 0 on success */ -{ - DWORD a; - - SetFileAttributes(path, 0); - a = GetFileAttributes(path); - if (a == INVALID_FILE_ATTRIBUTES) { - return 1; - } else if (a & FILE_ATTRIBUTE_DIRECTORY) { - return !RemoveDirectory(path); - } else { - return !DeleteFile(path); - } -} - - -JNIEXPORT jboolean JNICALL -Java_java_io_Win32FileSystem_delete0(JNIEnv *env, jobject this, - jobject file) -{ - jboolean rv = JNI_FALSE; - - WITH_NATIVE_PATH(env, file, ids.path, path) { - if (removeFileOrDirectory(path) == 0) { - rv = JNI_TRUE; - } - } END_NATIVE_PATH(env, path); - return rv; -} - - -/* ## Clean this up to use direct Win32 calls */ - -JNIEXPORT jobjectArray JNICALL -Java_java_io_Win32FileSystem_list(JNIEnv *env, jobject this, - jobject file) -{ - DIR *dir; - struct dirent *ptr; - int len, maxlen; - jobjectArray rv, old; - - WITH_NATIVE_PATH(env, file, ids.path, path) { - dir = opendir(path); - } END_NATIVE_PATH(env, path); - if (dir == NULL) return NULL; - - /* Allocate an initial String array */ - len = 0; - maxlen = 16; - rv = (*env)->NewObjectArray(env, maxlen, JNU_ClassString(env), NULL); - if (rv == NULL) goto error; - - /* Scan the directory */ - while ((ptr = readdir(dir)) != NULL) { - jstring name; - if (!strcmp(ptr->d_name, ".") || !strcmp(ptr->d_name, "..")) - continue; - if (len == maxlen) { - old = rv; - rv = (*env)->NewObjectArray(env, maxlen <<= 1, - JNU_ClassString(env), NULL); - if (rv == NULL) goto error; - if (JNU_CopyObjectArray(env, rv, old, len) < 0) goto error; - (*env)->DeleteLocalRef(env, old); - } - name = JNU_NewStringPlatform(env, ptr->d_name); - if (name == NULL) goto error; - (*env)->SetObjectArrayElement(env, rv, len++, name); - (*env)->DeleteLocalRef(env, name); - } - closedir(dir); - - /* Copy the final results into an appropriately-sized array */ - old = rv; - rv = (*env)->NewObjectArray(env, len, JNU_ClassString(env), NULL); - if (rv == NULL) goto error; - if (JNU_CopyObjectArray(env, rv, old, len) < 0) goto error; - return rv; - - error: - closedir(dir); - return NULL; -} - - -JNIEXPORT jboolean JNICALL -Java_java_io_Win32FileSystem_createDirectory(JNIEnv *env, jobject this, - jobject file) -{ - jboolean rv = JNI_FALSE; - - WITH_NATIVE_PATH(env, file, ids.path, path) { - if (mkdir(path) == 0) { - rv = JNI_TRUE; - } - } END_NATIVE_PATH(env, path); - return rv; -} - - -JNIEXPORT jboolean JNICALL -Java_java_io_Win32FileSystem_rename0(JNIEnv *env, jobject this, - jobject from, jobject to) -{ - jboolean rv = JNI_FALSE; - - WITH_NATIVE_PATH(env, from, ids.path, fromPath) { - WITH_NATIVE_PATH(env, to, ids.path, toPath) { - if (rename(fromPath, toPath) == 0) { - rv = JNI_TRUE; - } - } END_NATIVE_PATH(env, toPath); - } END_NATIVE_PATH(env, fromPath); - return rv; -} - - -JNIEXPORT jboolean JNICALL -Java_java_io_Win32FileSystem_setLastModifiedTime(JNIEnv *env, jobject this, - jobject file, jlong time) -{ - jboolean rv = JNI_FALSE; - - WITH_NATIVE_PATH(env, file, ids.path, path) { - HANDLE h; - h = CreateFile(path, GENERIC_WRITE, 0, NULL, OPEN_EXISTING, - FILE_ATTRIBUTE_NORMAL | FILE_FLAG_BACKUP_SEMANTICS, 0); - if (h != INVALID_HANDLE_VALUE) { - LARGE_INTEGER modTime; - FILETIME t; - modTime.QuadPart = (time + 11644473600000L) * 10000L; - t.dwLowDateTime = (DWORD)modTime.LowPart; - t.dwHighDateTime = (DWORD)modTime.HighPart; - if (SetFileTime(h, NULL, NULL, &t)) { - rv = JNI_TRUE; - } - CloseHandle(h); - } - } END_NATIVE_PATH(env, path); - - return rv; -} - - -JNIEXPORT jboolean JNICALL -Java_java_io_Win32FileSystem_setReadOnly(JNIEnv *env, jobject this, - jobject file) -{ - jboolean rv = JNI_FALSE; - - WITH_NATIVE_PATH(env, file, ids.path, path) { - DWORD a; - a = GetFileAttributes(path); - if (a != INVALID_FILE_ATTRIBUTES) { - if (SetFileAttributes(path, a | FILE_ATTRIBUTE_READONLY)) - rv = JNI_TRUE; - } - } END_NATIVE_PATH(env, path); - return rv; -} - - -/* -- Filesystem interface -- */ - - -JNIEXPORT jobject JNICALL -Java_java_io_Win32FileSystem_getDriveDirectory(JNIEnv *env, jclass ignored, - jint drive) -{ - char buf[_MAX_PATH]; - char *p = _getdcwd(drive, buf, sizeof(buf)); - if (p == NULL) return NULL; - if (isalpha(*p) && (p[1] == ':')) p += 2; - return JNU_NewStringPlatform(env, p); -} - - -JNIEXPORT jint JNICALL -Java_java_io_Win32FileSystem_listRoots0(JNIEnv *env, jclass ignored) -{ - return GetLogicalDrives(); -} - -JNIEXPORT jlong JNICALL -Java_java_io_Win32FileSystem_getSpace0(JNIEnv *env, jobject this, - jobject file, jint t) -{ - jlong rv = 0L; - - WITH_NATIVE_PATH(env, file, ids.path, path) { - ULARGE_INTEGER totalSpace, freeSpace, usableSpace; - if (GetDiskFreeSpaceEx(path, &usableSpace, &totalSpace, &freeSpace)) { - switch(t) { - case java_io_FileSystem_SPACE_TOTAL: - rv = long_to_jlong(totalSpace.QuadPart); - break; - case java_io_FileSystem_SPACE_FREE: - rv = long_to_jlong(freeSpace.QuadPart); - break; - case java_io_FileSystem_SPACE_USABLE: - rv = long_to_jlong(usableSpace.QuadPart); - break; - default: - assert(0); - } - } - } END_NATIVE_PATH(env, path); - return rv; -} diff --git a/jdk/src/windows/native/java/io/WinNTFileSystem_md.c b/jdk/src/windows/native/java/io/WinNTFileSystem_md.c index 7d978294367..f1eb449275e 100644 --- a/jdk/src/windows/native/java/io/WinNTFileSystem_md.c +++ b/jdk/src/windows/native/java/io/WinNTFileSystem_md.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 2001, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2001, 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 @@ -828,6 +828,12 @@ Java_java_io_WinNTFileSystem_getDriveDirectory(JNIEnv *env, jobject this, return ret; } +JNIEXPORT jint JNICALL +Java_java_io_WinNTFileSystem_listRoots0(JNIEnv *env, jclass ignored) +{ + return GetLogicalDrives(); +} + JNIEXPORT jlong JNICALL Java_java_io_WinNTFileSystem_getSpace0(JNIEnv *env, jobject this, jobject file, jint t) diff --git a/jdk/src/windows/native/java/io/io_util_md.c b/jdk/src/windows/native/java/io/io_util_md.c index 787617e4895..2f0e74fc171 100644 --- a/jdk/src/windows/native/java/io/io_util_md.c +++ b/jdk/src/windows/native/java/io/io_util_md.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 2001, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2001, 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 @@ -40,22 +40,8 @@ #include #include -extern jboolean onNT = JNI_FALSE; - static DWORD MAX_INPUT_EVENTS = 2000; -void -initializeWindowsVersion() { - OSVERSIONINFO ver; - ver.dwOSVersionInfoSize = sizeof(ver); - GetVersionEx(&ver); - if (ver.dwPlatformId == VER_PLATFORM_WIN32_NT) { - onNT = JNI_TRUE; - } else { - onNT = JNI_FALSE; - } -} - /* If this returns NULL then an exception is pending */ WCHAR* fileToNTPath(JNIEnv *env, jobject file, jfieldID id) { @@ -247,27 +233,21 @@ winFileHandleOpen(JNIEnv *env, jstring path, int flags) const DWORD flagsAndAttributes = maybeWriteThrough | maybeDeleteOnClose; HANDLE h = NULL; - if (onNT) { - WCHAR *pathbuf = pathToNTPath(env, path, JNI_TRUE); - if (pathbuf == NULL) { - /* Exception already pending */ - return -1; - } - h = CreateFileW( - pathbuf, /* Wide char path name */ - access, /* Read and/or write permission */ - sharing, /* File sharing flags */ - NULL, /* Security attributes */ - disposition, /* creation disposition */ - flagsAndAttributes, /* flags and attributes */ - NULL); - free(pathbuf); - } else { - WITH_PLATFORM_STRING(env, path, _ps) { - h = CreateFile(_ps, access, sharing, NULL, disposition, - flagsAndAttributes, NULL); - } END_PLATFORM_STRING(env, _ps); + WCHAR *pathbuf = pathToNTPath(env, path, JNI_TRUE); + if (pathbuf == NULL) { + /* Exception already pending */ + return -1; } + h = CreateFileW( + pathbuf, /* Wide char path name */ + access, /* Read and/or write permission */ + sharing, /* File sharing flags */ + NULL, /* Security attributes */ + disposition, /* creation disposition */ + flagsAndAttributes, /* flags and attributes */ + NULL); + free(pathbuf); + if (h == INVALID_HANDLE_VALUE) { int error = GetLastError(); if (error == ERROR_TOO_MANY_OPEN_FILES) { diff --git a/jdk/src/windows/native/java/io/io_util_md.h b/jdk/src/windows/native/java/io/io_util_md.h index 392b8c30784..34036d47262 100644 --- a/jdk/src/windows/native/java/io/io_util_md.h +++ b/jdk/src/windows/native/java/io/io_util_md.h @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 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 diff --git a/jdk/src/windows/native/java/lang/ProcessImpl_md.c b/jdk/src/windows/native/java/lang/ProcessImpl_md.c index ed14eeba1be..dfa59f99efd 100644 --- a/jdk/src/windows/native/java/lang/ProcessImpl_md.c +++ b/jdk/src/windows/native/java/lang/ProcessImpl_md.c @@ -40,72 +40,6 @@ */ #define PIPE_SIZE (4096+24) -char * -extractExecutablePath(JNIEnv *env, char *source) -{ - char *p, *r; - - /* If no spaces, then use entire thing */ - if ((p = strchr(source, ' ')) == NULL) - return source; - - /* If no quotes, or quotes after space, return up to space */ - if (((r = strchr(source, '"')) == NULL) || (r > p)) { - *p = 0; - return source; - } - - /* Quotes before space, return up to space after next quotes */ - p = strchr(r, '"'); - if ((p = strchr(p, ' ')) == NULL) - return source; - *p = 0; - return source; -} - -DWORD -selectProcessFlag(JNIEnv *env, jstring cmd0) -{ - char buf[MAX_PATH]; - DWORD newFlag = 0; - char *exe, *p, *name; - unsigned char buffer[2]; - long headerLoc = 0; - int fd = 0; - - exe = (char *)JNU_GetStringPlatformChars(env, cmd0, 0); - exe = extractExecutablePath(env, exe); - - if (exe != NULL) { - if ((p = strchr(exe, '\\')) == NULL) { - SearchPath(NULL, exe, ".exe", MAX_PATH, buf, &name); - } else { - p = strrchr(exe, '\\'); - *p = 0; - p++; - SearchPath(exe, p, ".exe", MAX_PATH, buf, &name); - } - } - - fd = _open(buf, _O_RDONLY); - if (fd > 0) { - _read(fd, buffer, 2); - if (buffer[0] == 'M' && buffer[1] == 'Z') { - _lseek(fd, 60L, SEEK_SET); - _read(fd, buffer, 2); - headerLoc = (long)buffer[1] << 8 | (long)buffer[0]; - _lseek(fd, headerLoc, SEEK_SET); - _read(fd, buffer, 2); - if (buffer[0] == 'P' && buffer[1] == 'E') { - newFlag = DETACHED_PROCESS; - } - } - _close(fd); - } - JNU_ReleaseStringPlatformChars(env, cmd0, exe); - return newFlag; -} - static void win32Error(JNIEnv *env, const char *functionName) { @@ -151,15 +85,8 @@ Java_java_lang_ProcessImpl_create(JNIEnv *env, jclass ignored, const jchar* penvBlock = NULL; jlong *handles = NULL; jlong ret = 0; - OSVERSIONINFO ver; - jboolean onNT = JNI_FALSE; DWORD processFlag; - ver.dwOSVersionInfoSize = sizeof(ver); - GetVersionEx(&ver); - if (ver.dwPlatformId == VER_PLATFORM_WIN32_NT) - onNT = JNI_TRUE; - assert(cmd != NULL); pcmd = (*env)->GetStringChars(env, cmd, NULL); if (pcmd == NULL) goto Catch; @@ -229,10 +156,7 @@ Java_java_lang_ProcessImpl_create(JNIEnv *env, jclass ignored, } SetHandleInformation(si.hStdError, HANDLE_FLAG_INHERIT, TRUE); - if (onNT) - processFlag = CREATE_NO_WINDOW | CREATE_UNICODE_ENVIRONMENT; - else - processFlag = selectProcessFlag(env, cmd) | CREATE_UNICODE_ENVIRONMENT; + processFlag = CREATE_NO_WINDOW | CREATE_UNICODE_ENVIRONMENT; ret = CreateProcessW(0, /* executable name */ (LPWSTR)pcmd, /* command line */ 0, /* process security attribute */ diff --git a/jdk/src/windows/native/java/lang/java_props_md.c b/jdk/src/windows/native/java/lang/java_props_md.c index 19cac3327e9..5d1111efbee 100644 --- a/jdk/src/windows/native/java/lang/java_props_md.c +++ b/jdk/src/windows/native/java/lang/java_props_md.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 1998, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1998, 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 diff --git a/jdk/src/windows/native/java/net/DualStackPlainDatagramSocketImpl.c b/jdk/src/windows/native/java/net/DualStackPlainDatagramSocketImpl.c index 0077c37aaa2..d3de6e7f024 100644 --- a/jdk/src/windows/native/java/net/DualStackPlainDatagramSocketImpl.c +++ b/jdk/src/windows/native/java/net/DualStackPlainDatagramSocketImpl.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 2007, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2007, 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 diff --git a/jdk/src/windows/native/java/net/Inet6AddressImpl.c b/jdk/src/windows/native/java/net/Inet6AddressImpl.c index b98b6411b01..20b42b18508 100644 --- a/jdk/src/windows/native/java/net/Inet6AddressImpl.c +++ b/jdk/src/windows/native/java/net/Inet6AddressImpl.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 2000, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2000, 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 diff --git a/jdk/src/windows/native/java/net/NetworkInterface.c b/jdk/src/windows/native/java/net/NetworkInterface.c index 570eac30812..b0f9344db4a 100644 --- a/jdk/src/windows/native/java/net/NetworkInterface.c +++ b/jdk/src/windows/native/java/net/NetworkInterface.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 2000, 2008, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2000, 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 diff --git a/jdk/src/windows/native/java/net/NetworkInterface.h b/jdk/src/windows/native/java/net/NetworkInterface.h index 2f977fd624b..22744c1eb6c 100644 --- a/jdk/src/windows/native/java/net/NetworkInterface.h +++ b/jdk/src/windows/native/java/net/NetworkInterface.h @@ -1,5 +1,5 @@ /* - * Copyright (c) 2002, 2008, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2002, 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 diff --git a/jdk/src/windows/native/java/net/NetworkInterface_winXP.c b/jdk/src/windows/native/java/net/NetworkInterface_winXP.c index 9b624cd5535..afc31abcd5f 100644 --- a/jdk/src/windows/native/java/net/NetworkInterface_winXP.c +++ b/jdk/src/windows/native/java/net/NetworkInterface_winXP.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 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 diff --git a/jdk/src/windows/native/java/net/TwoStacksPlainDatagramSocketImpl.c b/jdk/src/windows/native/java/net/TwoStacksPlainDatagramSocketImpl.c index dc6fdf41c47..ce6bfbd8c57 100644 --- a/jdk/src/windows/native/java/net/TwoStacksPlainDatagramSocketImpl.c +++ b/jdk/src/windows/native/java/net/TwoStacksPlainDatagramSocketImpl.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 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 diff --git a/jdk/src/windows/native/java/net/TwoStacksPlainSocketImpl.c b/jdk/src/windows/native/java/net/TwoStacksPlainSocketImpl.c index 840eb240575..4b34384ab1f 100644 --- a/jdk/src/windows/native/java/net/TwoStacksPlainSocketImpl.c +++ b/jdk/src/windows/native/java/net/TwoStacksPlainSocketImpl.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 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 diff --git a/jdk/src/windows/native/java/net/net_util_md.c b/jdk/src/windows/native/java/net/net_util_md.c index cd3efe922bc..c0c44d74eb7 100644 --- a/jdk/src/windows/native/java/net/net_util_md.c +++ b/jdk/src/windows/native/java/net/net_util_md.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2008, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 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 diff --git a/jdk/src/windows/native/java/net/net_util_md.h b/jdk/src/windows/native/java/net/net_util_md.h index e764260bb24..50a275534bf 100644 --- a/jdk/src/windows/native/java/net/net_util_md.h +++ b/jdk/src/windows/native/java/net/net_util_md.h @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 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 diff --git a/jdk/src/windows/native/java/util/TimeZone_md.c b/jdk/src/windows/native/java/util/TimeZone_md.c index d29558c2924..57d4b526ba6 100644 --- a/jdk/src/windows/native/java/util/TimeZone_md.c +++ b/jdk/src/windows/native/java/util/TimeZone_md.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 1999, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1999, 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 @@ -65,8 +65,6 @@ static void *keyNames[] = { #define STANDARD_NAME 0 #define STD_NAME 2 -static int isNT = FALSE; /* TRUE if it is NT. */ - /* * Calls RegQueryValueEx() to get the value for the specified key. If * the platform is NT, 2000 or XP, it calls the Unicode @@ -95,12 +93,10 @@ getValueInRegistry(HKEY hKey, int len; *typePtr = 0; - if (isNT) { - ret = RegQueryValueExW(hKey, (WCHAR *) keyNames[keyIndex], NULL, - typePtr, buf, bufLengthPtr); - if (ret == ERROR_SUCCESS && *typePtr == REG_SZ) { - return ret; - } + ret = RegQueryValueExW(hKey, (WCHAR *) keyNames[keyIndex], NULL, + typePtr, buf, bufLengthPtr); + if (ret == ERROR_SUCCESS && *typePtr == REG_SZ) { + return ret; } valSize = sizeof(val); @@ -180,8 +176,7 @@ static int getWinTimeZone(char *winZoneName, char *winMapID) */ ver.dwOSVersionInfoSize = sizeof(ver); GetVersionEx(&ver); - isNT = ver.dwPlatformId == VER_PLATFORM_WIN32_NT; - isVista = isNT && ver.dwMajorVersion >= 6; + isVista = ver.dwMajorVersion >= 6; ret = RegOpenKeyEx(HKEY_LOCAL_MACHINE, WIN_CURRENT_TZ_KEY, 0, KEY_READ, (PHKEY)&hKey); diff --git a/jdk/src/windows/native/sun/management/FileSystemImpl.c b/jdk/src/windows/native/sun/management/FileSystemImpl.c index 0747121d35a..6253a927bcb 100644 --- a/jdk/src/windows/native/sun/management/FileSystemImpl.c +++ b/jdk/src/windows/native/sun/management/FileSystemImpl.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 2004, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2004, 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 diff --git a/jdk/src/windows/native/sun/net/www/protocol/http/ntlm/NTLMAuthSequence.c b/jdk/src/windows/native/sun/net/www/protocol/http/ntlm/NTLMAuthSequence.c index 81f30fbb746..c648f7b764e 100644 --- a/jdk/src/windows/native/sun/net/www/protocol/http/ntlm/NTLMAuthSequence.c +++ b/jdk/src/windows/native/sun/net/www/protocol/http/ntlm/NTLMAuthSequence.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 2002, 2008, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2002, 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 diff --git a/jdk/src/windows/native/sun/nio/ch/DatagramChannelImpl.c b/jdk/src/windows/native/sun/nio/ch/DatagramChannelImpl.c index 555ca9fbbfb..9396cf82ea6 100644 --- a/jdk/src/windows/native/sun/nio/ch/DatagramChannelImpl.c +++ b/jdk/src/windows/native/sun/nio/ch/DatagramChannelImpl.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 2001, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2001, 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 diff --git a/jdk/src/windows/native/sun/nio/ch/IOUtil.c b/jdk/src/windows/native/sun/nio/ch/IOUtil.c index 8b03be4b37c..10c72e4682f 100644 --- a/jdk/src/windows/native/sun/nio/ch/IOUtil.c +++ b/jdk/src/windows/native/sun/nio/ch/IOUtil.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 2000, 2003, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2000, 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 diff --git a/jdk/src/windows/native/sun/nio/ch/Net.c b/jdk/src/windows/native/sun/nio/ch/Net.c index 36a5d2b302c..8d515e88471 100644 --- a/jdk/src/windows/native/sun/nio/ch/Net.c +++ b/jdk/src/windows/native/sun/nio/ch/Net.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 2001, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2001, 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 diff --git a/jdk/src/windows/native/sun/nio/ch/SocketDispatcher.c b/jdk/src/windows/native/sun/nio/ch/SocketDispatcher.c index e765149eb64..45fe14b07f9 100644 --- a/jdk/src/windows/native/sun/nio/ch/SocketDispatcher.c +++ b/jdk/src/windows/native/sun/nio/ch/SocketDispatcher.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 2000, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2000, 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 diff --git a/jdk/src/windows/native/sun/nio/ch/WindowsAsynchronousSocketChannelImpl.c b/jdk/src/windows/native/sun/nio/ch/WindowsAsynchronousSocketChannelImpl.c index 81484da7fee..b78f443937b 100644 --- a/jdk/src/windows/native/sun/nio/ch/WindowsAsynchronousSocketChannelImpl.c +++ b/jdk/src/windows/native/sun/nio/ch/WindowsAsynchronousSocketChannelImpl.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 2008, 2009, Oracle and/or its affiliates. All rights reserved. + * 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 diff --git a/jdk/src/windows/native/sun/nio/ch/nio_util.h b/jdk/src/windows/native/sun/nio/ch/nio_util.h index 427281cab86..cf2df5363b7 100644 --- a/jdk/src/windows/native/sun/nio/ch/nio_util.h +++ b/jdk/src/windows/native/sun/nio/ch/nio_util.h @@ -1,5 +1,5 @@ /* - * Copyright (c) 2001, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2001, 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 diff --git a/jdk/src/windows/native/sun/security/krb5/NativeCreds.c b/jdk/src/windows/native/sun/security/krb5/NativeCreds.c index 72e5d5acb49..fce83640b63 100644 --- a/jdk/src/windows/native/sun/security/krb5/NativeCreds.c +++ b/jdk/src/windows/native/sun/security/krb5/NativeCreds.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 2000, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2000, 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 diff --git a/jdk/src/windows/native/sun/security/pkcs11/j2secmod_md.c b/jdk/src/windows/native/sun/security/pkcs11/j2secmod_md.c index fac24a6063f..33b11bfd07e 100644 --- a/jdk/src/windows/native/sun/security/pkcs11/j2secmod_md.c +++ b/jdk/src/windows/native/sun/security/pkcs11/j2secmod_md.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 2005, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2005, 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 diff --git a/jdk/src/windows/native/sun/security/provider/WinCAPISeedGenerator.c b/jdk/src/windows/native/sun/security/provider/WinCAPISeedGenerator.c index 968650da591..8d7f753aa58 100644 --- a/jdk/src/windows/native/sun/security/provider/WinCAPISeedGenerator.c +++ b/jdk/src/windows/native/sun/security/provider/WinCAPISeedGenerator.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 2002, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2002, 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 diff --git a/jdk/src/windows/native/sun/tools/attach/WindowsAttachProvider.c b/jdk/src/windows/native/sun/tools/attach/WindowsAttachProvider.c index bbd6f400a24..e812b0f935f 100644 --- a/jdk/src/windows/native/sun/tools/attach/WindowsAttachProvider.c +++ b/jdk/src/windows/native/sun/tools/attach/WindowsAttachProvider.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 2005, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2005, 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 diff --git a/jdk/src/windows/native/sun/tools/attach/WindowsVirtualMachine.c b/jdk/src/windows/native/sun/tools/attach/WindowsVirtualMachine.c index 2ee38039823..28424dd1523 100644 --- a/jdk/src/windows/native/sun/tools/attach/WindowsVirtualMachine.c +++ b/jdk/src/windows/native/sun/tools/attach/WindowsVirtualMachine.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 2005, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2005, 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 diff --git a/jdk/src/windows/native/sun/tracing/dtrace/jvm_symbols_md.c b/jdk/src/windows/native/sun/tracing/dtrace/jvm_symbols_md.c index dd4d5d03fc8..adca9ecb0e3 100644 --- a/jdk/src/windows/native/sun/tracing/dtrace/jvm_symbols_md.c +++ b/jdk/src/windows/native/sun/tracing/dtrace/jvm_symbols_md.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 2008, Oracle and/or its affiliates. All rights reserved. + * 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 diff --git a/jdk/src/windows/native/sun/windows/awt_Font.cpp b/jdk/src/windows/native/sun/windows/awt_Font.cpp index d07cdae0467..185514c1972 100644 --- a/jdk/src/windows/native/sun/windows/awt_Font.cpp +++ b/jdk/src/windows/native/sun/windows/awt_Font.cpp @@ -150,6 +150,7 @@ AwtFont::AwtFont(int num, JNIEnv *env, jobject javaFont) AwtFont::~AwtFont() { + delete[] m_hFont; } void AwtFont::Dispose() { @@ -160,11 +161,12 @@ void AwtFont::Dispose() { /* NOTE: delete of windows HFONT happens in FontCache::Remove only when the final reference to the font is disposed */ } else if (font != NULL) { - // if font was not in cache, its not shared and we delete it now - VERIFY(::DeleteObject(font)); + // if font was not in cache, its not shared and we delete it now + DASSERT(::GetObjectType(font) == OBJ_FONT); + VERIFY(::DeleteObject(font)); } + m_hFont[i] = NULL; } - delete[] m_hFont; AwtObject::Dispose(); } diff --git a/jdk/src/windows/native/sun/windows/awt_Toolkit.cpp b/jdk/src/windows/native/sun/windows/awt_Toolkit.cpp index 913540399b5..e8b2d51931a 100644 --- a/jdk/src/windows/native/sun/windows/awt_Toolkit.cpp +++ b/jdk/src/windows/native/sun/windows/awt_Toolkit.cpp @@ -534,7 +534,6 @@ BOOL AwtToolkit::Dispose() { D3DInitializer::GetInstance().Clean(); AwtObjectList::Cleanup(); - AwtFont::Cleanup(); awt_dnd_uninitialize(); awt_clipboard_uninitialize((JNIEnv *)JNU_GetEnv(jvm, JNI_VERSION_1_2)); @@ -554,6 +553,8 @@ BOOL AwtToolkit::Dispose() { ::DispatchMessage(&msg); } + AwtFont::Cleanup(); + HWND toolkitHWndToDestroy = tk.m_toolkitHWnd; tk.m_toolkitHWnd = 0; VERIFY(::DestroyWindow(toolkitHWndToDestroy) != NULL); diff --git a/jdk/src/windows/native/sun/windows/awt_Window.cpp b/jdk/src/windows/native/sun/windows/awt_Window.cpp index 5c5f53dba40..b4110ece075 100644 --- a/jdk/src/windows/native/sun/windows/awt_Window.cpp +++ b/jdk/src/windows/native/sun/windows/awt_Window.cpp @@ -1559,21 +1559,8 @@ void AwtWindow::SendWindowEvent(jint id, HWND opposite, BOOL AwtWindow::AwtSetActiveWindow(BOOL isMouseEventCause, UINT hittest) { - // Fix for 6458497. - // Retreat if current foreground window is out of both our and embedder process. - // The exception is when activation is requested due to a mouse event. - if (!isMouseEventCause) { - HWND fgWindow = ::GetForegroundWindow(); - if (NULL != fgWindow) { - DWORD fgProcessID; - ::GetWindowThreadProcessId(fgWindow, &fgProcessID); - if (fgProcessID != ::GetCurrentProcessId() - && !AwtToolkit::GetInstance().IsEmbedderProcessId(fgProcessID)) - { - return FALSE; - } - } - } + // We used to reject non mouse window activation if our app wasn't active. + // This code since has been removed as the fix for 7185280 HWND proxyContainerHWnd = GetProxyToplevelContainer(); HWND proxyHWnd = GetProxyFocusOwner(); diff --git a/jdk/src/windows/npt/npt_md.h b/jdk/src/windows/npt/npt_md.h index 4cf2176db1c..50747ddd7fd 100644 --- a/jdk/src/windows/npt/npt_md.h +++ b/jdk/src/windows/npt/npt_md.h @@ -1,5 +1,5 @@ /* - * Copyright (c) 2004, 2005, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2004, 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 diff --git a/jdk/src/windows/transport/shmem/shmem_md.c b/jdk/src/windows/transport/shmem/shmem_md.c index 83e9349574b..056dce648f7 100644 --- a/jdk/src/windows/transport/shmem/shmem_md.c +++ b/jdk/src/windows/transport/shmem/shmem_md.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 1999, 2003, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1999, 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 diff --git a/jdk/test/Makefile b/jdk/test/Makefile index 87626e3b02b..e42481fae39 100644 --- a/jdk/test/Makefile +++ b/jdk/test/Makefile @@ -477,25 +477,21 @@ jdk_io: $(call TestDirs, java/io) # Stable agentvm testruns (minus items from PROBLEM_LIST) JDK_ALL_TARGETS += jdk_lang JDK_DEFAULT_TARGETS += jdk_lang -jdk_lang: $(call TestDirs, java/lang) +jdk_lang: $(call TestDirs, java/lang sun/invoke sun/misc vm) $(call RunAgentvmBatch) # Stable othervm testruns (minus items from PROBLEM_LIST) # Using agentvm has serious problems with these tests -JDK_ALL_TARGETS += jdk_management1 -jdk_management1: $(call TestDirs, javax/management) +JDK_ALL_TARGETS += jdk_jmx +jdk_jmx: $(call TestDirs, javax/management com/sun/jmx) $(call RunOthervmBatch) # Stable othervm testruns (minus items from PROBLEM_LIST) # Using agentvm has serious problems with these tests -JDK_ALL_TARGETS += jdk_management2 -jdk_management2: $(call TestDirs, com/sun/jmx com/sun/management sun/management) +JDK_ALL_TARGETS += jdk_management +jdk_management: $(call TestDirs, com/sun/management sun/management) $(call RunOthervmBatch) -# All management tests -jdk_management: jdk_management1 jdk_management2 - @$(SummaryInfo) - # Stable agentvm testruns (minus items from PROBLEM_LIST) JDK_ALL_TARGETS += jdk_math JDK_DEFAULT_TARGETS += jdk_math @@ -503,44 +499,34 @@ jdk_math: $(call TestDirs, java/math) $(call RunAgentvmBatch) # Stable agentvm testruns (minus items from PROBLEM_LIST) -JDK_ALL_TARGETS += jdk_misc -JDK_DEFAULT_TARGETS += jdk_misc -jdk_misc: $(call TestDirs, \ - demo/jvmti demo/zipfs javax/naming javax/script \ - javax/smartcardio com/sun/jndi com/sun/xml \ - com/sun/corba sun/misc) +JDK_ALL_TARGETS += jdk_other +JDK_DEFAULT_TARGETS += jdk_other +jdk_other: $(call TestDirs, \ + demo/jvmti demo/zipfs sample \ + javax/naming com/sun/jndi \ + javax/script \ + javax/sql \ + javax/smartcardio \ + javax/xml/ws com/sun/internal/ws \ + jdk/asm \ + com/sun/org/apache/xerces \ + com/sun/corba \ + com/sun/servicetag \ + com/sun/tracing \ + sun/usagetracker) $(call RunAgentvmBatch) # Stable agentvm testruns (minus items from PROBLEM_LIST) JDK_ALL_TARGETS += jdk_net JDK_DEFAULT_TARGETS += jdk_net -jdk_net: $(call TestDirs, com/sun/net java/net sun/net) +jdk_net: $(call TestDirs, com/sun/net java/net sun/net com/oracle/net) $(call RunAgentvmBatch) # Stable agentvm testruns (minus items from PROBLEM_LIST) -JDK_ALL_TARGETS += jdk_nio1 -JDK_DEFAULT_TARGETS += jdk_nio1 -jdk_nio1: $(call TestDirs, java/nio/file) - $(call RunAgentvmBatch) - -# Stable agentvm testruns (minus items from PROBLEM_LIST) -JDK_ALL_TARGETS += jdk_nio2 -JDK_DEFAULT_TARGETS += jdk_nio2 -jdk_nio2: $(call TestDirs, java/nio/Buffer java/nio/ByteOrder \ - java/nio/channels java/nio/MappedByteBuffer sun/nio/ch) +jdk_nio: $(call TestDirs, java/nio sun/nio com/oracle/nio) $(call SharedLibraryPermissions,java/nio/channels) $(call RunAgentvmBatch) -# Stable agentvm testruns (minus items from PROBLEM_LIST) -JDK_ALL_TARGETS += jdk_nio3 -JDK_DEFAULT_TARGETS += jdk_nio3 -jdk_nio3: $(call TestDirs, java/nio/charset sun/nio/cs) - $(call RunAgentvmBatch) - -# All nio tests -jdk_nio: jdk_nio1 jdk_nio2 jdk_nio3 - @$(SummaryInfo) - # Stable agentvm testruns (minus items from PROBLEM_LIST) jdk_sctp: $(call TestDirs, com/sun/nio/sctp) $(call RunAgentvmBatch) @@ -548,7 +534,7 @@ jdk_sctp: $(call TestDirs, com/sun/nio/sctp) # Stable othervm testruns (minus items from PROBLEM_LIST) # Using agentvm has serious problems with these tests JDK_ALL_TARGETS += jdk_rmi -jdk_rmi: $(call TestDirs, java/rmi javax/rmi sun/rmi) +jdk_rmi: $(call TestDirs, java/rmi sun/rmi javax/rmi/ssl) $(call RunOthervmBatch) # Stable agentvm testruns (minus items from PROBLEM_LIST) @@ -566,7 +552,7 @@ jdk_security2: $(call TestDirs, javax/crypto javax/xml/crypto com/sun/crypto) JDK_ALL_TARGETS += jdk_security3 jdk_security3: $(call TestDirs, com/sun/security lib/security javax/security \ sun/security com/sun/org/apache/xml/internal/security \ - com/oracle/security/ucrypto) + com/oracle/security) $(call SharedLibraryPermissions,sun/security) $(call RunAgentvmBatch) @@ -593,23 +579,17 @@ jdk_text: $(call TestDirs, java/text sun/text) $(call RunAgentvmBatch) # Stable agentvm testruns (minus items from PROBLEM_LIST) -JDK_ALL_TARGETS += jdk_tools1 -jdk_tools1: $(call TestDirs, com/sun/jdi) +JDK_ALL_TARGETS += jdk_jdi +jdk_jdi: $(call TestDirs, com/sun/jdi) $(call RunAgentvmBatch) # Stable othervm testruns (minus items from PROBLEM_LIST) # Using agentvm has serious problems with these tests -JDK_ALL_TARGETS += jdk_tools2 -jdk_tools2: $(call TestDirs, \ - com/sun/tools sun/jvmstat sun/tools tools vm \ - com/sun/servicetag com/sun/tracing) +JDK_ALL_TARGETS += jdk_tools +jdk_tools: $(call TestDirs, com/sun/tools sun/jvmstat sun/tools tools) $(call SharedLibraryPermissions,tools/launcher) $(call RunAgentvmBatch) -# All tools tests -jdk_tools: jdk_tools1 jdk_tools2 - @$(SummaryInfo) - # Stable othervm testruns (minus items from PROBLEM_LIST) # Using agentvm has serious problems with these tests ifdef OPENJDK diff --git a/jdk/test/ProblemList.txt b/jdk/test/ProblemList.txt index 23c91cf3a92..8fd42d532aa 100644 --- a/jdk/test/ProblemList.txt +++ b/jdk/test/ProblemList.txt @@ -137,12 +137,6 @@ java/lang/management/MemoryMXBean/ResetPeakMemoryUsage.java generic-all # 7196801 java/lang/management/MemoryMXBean/LowMemoryTest2.sh generic-all -# Exclude until the fix for 7195557 propagates widely. -java/lang/management/MemoryMXBean/CollectionUsageThresholdParallelGC.sh generic-all -java/lang/management/MemoryMXBean/CollectionUsageThresholdSerialGC.sh generic-all -java/lang/management/MemoryMXBean/MemoryTest.java generic-all -java/lang/management/MemoryMXBean/MemoryTestAllGC.sh generic-all - # Exclude until hotspot/jdk repos are sync'd w.r.t. JAVA_MAX_SUPPORTED_VERSION # Needed when hotspot fix 7054345 is present. Remove when the JDK source is # updated accordingly. @@ -152,6 +146,10 @@ java/lang/System/Versions.java generic-all # jdk_management +############################################################################ + +# jdk_jmx + # 6959636 javax/management/loading/LibraryLoader/LibraryLoaderTest.java windows-all @@ -167,7 +165,7 @@ javax/management/remote/mandatory/notif/DiffHBTest.java generic-all ############################################################################ -# jdk_misc +# jdk_other # 6988950 demo/jvmti/compiledMethodLoad/CompiledMethodLoadTest.java generic-all @@ -315,6 +313,9 @@ sun/security/tools/keytool/readjar.sh solaris-all sun/security/tools/keytool/selfissued.sh solaris-all sun/security/tools/keytool/standard.sh solaris-all +# 8000439: NPG: REGRESSION : sun/security/krb5/auto/MaxRetries.java fails with timeout +sun/security/krb5/auto/MaxRetries.java solaris-sparcv9 + ############################################################################ # jdk_sound @@ -327,8 +328,6 @@ sun/security/tools/keytool/standard.sh solaris-all # jdk_text -# 7196199 -java/text/Bidi/Bug6665028.java generic-all ############################################################################ # jdk_tools @@ -336,6 +335,24 @@ java/text/Bidi/Bug6665028.java generic-all # 6461635 com/sun/tools/attach/BasicTests.sh generic-all +# 7172176 +sun/tools/jconsole/ResourceCheckTest.sh generic-all +sun/tools/jconsole/ImmutableResourceTest.sh generic-all + +# 7132203 +sun/jvmstat/monitor/MonitoredVm/CR6672135.java generic-all + +# Tests take too long, see 7143279 +tools/pack200/CommandLineTests.java generic-all +tools/pack200/Pack200Test.java generic-all + +# 7150569 +tools/launcher/UnicodeTest.java macosx-all + +############################################################################ + +# jdk_jdi + # Filed 6952105 com/sun/jdi/SuspendThreadTest.java generic-all @@ -351,20 +368,6 @@ com/sun/jdi/FieldWatchpoints.java generic-all # Filed 6402201 com/sun/jdi/ProcessAttachTest.sh generic-all -# Filed 7172176 -sun/tools/jconsole/ResourceCheckTest.sh generic-all -sun/tools/jconsole/ImmutableResourceTest.sh generic-all - -# 7132203 -sun/jvmstat/monitor/MonitoredVm/CR6672135.java generic-all - -# Tests take too long, see 7143279 -tools/pack200/CommandLineTests.java generic-all -tools/pack200/Pack200Test.java generic-all - -# 7150569 -tools/launcher/UnicodeTest.java macosx-all - ############################################################################ # jdk_util diff --git a/jdk/test/TEST.ROOT b/jdk/test/TEST.ROOT index e6d8dfca678..e8e3fda5f85 100644 --- a/jdk/test/TEST.ROOT +++ b/jdk/test/TEST.ROOT @@ -6,7 +6,7 @@ keys=2d dnd i18n # Tests that must run in othervm mode -othervm.dirs=java/rmi sun/rmi javax/management +othervm.dirs=java/awt java/beans java/rmi javax/accessibility javax/imageio javax/sound javax/print javax/management com/sun/awt sun/awt sun/java2d sun/pisces sun/rmi # Tests that cannot run concurrently exclusiveAccess.dirs=java/rmi/Naming sun/management/jmxremote sun/tools/jstatd diff --git a/jdk/test/com/sun/crypto/provider/Cipher/DES/PaddingTest.java b/jdk/test/com/sun/crypto/provider/Cipher/DES/PaddingTest.java index b33d2e0cd4e..eee4fc9ab72 100644 --- a/jdk/test/com/sun/crypto/provider/Cipher/DES/PaddingTest.java +++ b/jdk/test/com/sun/crypto/provider/Cipher/DES/PaddingTest.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 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 diff --git a/jdk/test/com/sun/crypto/provider/KeyGenerator/Test4628062.java b/jdk/test/com/sun/crypto/provider/KeyGenerator/Test4628062.java index 3fc55b7f8c3..227404e2510 100644 --- a/jdk/test/com/sun/crypto/provider/KeyGenerator/Test4628062.java +++ b/jdk/test/com/sun/crypto/provider/KeyGenerator/Test4628062.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2002, 2007, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2002, 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 diff --git a/jdk/test/com/sun/jdi/ConnectedVMs.java b/jdk/test/com/sun/jdi/ConnectedVMs.java index 551cc76855b..f7acff21382 100644 --- a/jdk/test/com/sun/jdi/ConnectedVMs.java +++ b/jdk/test/com/sun/jdi/ConnectedVMs.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2000, 2008, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2000, 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 diff --git a/jdk/test/com/sun/jdi/EarlyReturnTest.java b/jdk/test/com/sun/jdi/EarlyReturnTest.java index 306ff25a57f..f88c5efa96f 100644 --- a/jdk/test/com/sun/jdi/EarlyReturnTest.java +++ b/jdk/test/com/sun/jdi/EarlyReturnTest.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2005, 2007, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2005, 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 diff --git a/jdk/test/com/sun/jdi/ImmutableResourceTest.sh b/jdk/test/com/sun/jdi/ImmutableResourceTest.sh index 527de199bc9..fa312adad74 100644 --- a/jdk/test/com/sun/jdi/ImmutableResourceTest.sh +++ b/jdk/test/com/sun/jdi/ImmutableResourceTest.sh @@ -1,5 +1,5 @@ # -# Copyright (c) 2005, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2005, 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 diff --git a/jdk/test/com/sun/jdi/JITDebug.sh b/jdk/test/com/sun/jdi/JITDebug.sh index 135978080ba..0ec359799a6 100644 --- a/jdk/test/com/sun/jdi/JITDebug.sh +++ b/jdk/test/com/sun/jdi/JITDebug.sh @@ -1,7 +1,7 @@ #!/bin/ksh -p # -# Copyright (c) 2002, 2006, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2002, 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 diff --git a/jdk/test/com/sun/jdi/MethodEntryExitEvents.java b/jdk/test/com/sun/jdi/MethodEntryExitEvents.java index 8f1ac42dd68..a1c67cbfdd4 100644 --- a/jdk/test/com/sun/jdi/MethodEntryExitEvents.java +++ b/jdk/test/com/sun/jdi/MethodEntryExitEvents.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2001, 2007, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2001, 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 diff --git a/jdk/test/com/sun/jdi/MethodExitReturnValuesTest.java b/jdk/test/com/sun/jdi/MethodExitReturnValuesTest.java index 5047e126d72..af0d937b61c 100644 --- a/jdk/test/com/sun/jdi/MethodExitReturnValuesTest.java +++ b/jdk/test/com/sun/jdi/MethodExitReturnValuesTest.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2004, 2007, Oracle and/or its affiliates. All rights reserved. + * 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 diff --git a/jdk/test/com/sun/jdi/PrivateTransportTest.sh b/jdk/test/com/sun/jdi/PrivateTransportTest.sh index 868d86447ad..64459008826 100644 --- a/jdk/test/com/sun/jdi/PrivateTransportTest.sh +++ b/jdk/test/com/sun/jdi/PrivateTransportTest.sh @@ -1,7 +1,7 @@ #!/bin/ksh -p # -# Copyright (c) 2005, 2011, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2005, 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 diff --git a/jdk/test/com/sun/jdi/ShellScaffold.sh b/jdk/test/com/sun/jdi/ShellScaffold.sh index 4e664c7a17d..d8635e3dda9 100644 --- a/jdk/test/com/sun/jdi/ShellScaffold.sh +++ b/jdk/test/com/sun/jdi/ShellScaffold.sh @@ -1,7 +1,7 @@ #!/bin/sh # -# Copyright (c) 2002, 2010, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2002, 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 diff --git a/jdk/test/com/sun/jdi/Solaris32AndSolaris64Test.sh b/jdk/test/com/sun/jdi/Solaris32AndSolaris64Test.sh index 457d26c4109..7e03dfb652e 100644 --- a/jdk/test/com/sun/jdi/Solaris32AndSolaris64Test.sh +++ b/jdk/test/com/sun/jdi/Solaris32AndSolaris64Test.sh @@ -1,7 +1,7 @@ #!/bin/ksh -p # -# Copyright (c) 2001, 2008, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2001, 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 diff --git a/jdk/test/com/sun/jdi/connect/spi/JdiLoadedByCustomLoader.sh b/jdk/test/com/sun/jdi/connect/spi/JdiLoadedByCustomLoader.sh index f68fc943da1..6222c80bd14 100644 --- a/jdk/test/com/sun/jdi/connect/spi/JdiLoadedByCustomLoader.sh +++ b/jdk/test/com/sun/jdi/connect/spi/JdiLoadedByCustomLoader.sh @@ -1,5 +1,5 @@ # -# Copyright (c) 2004, 2010, Oracle and/or its affiliates. All rights reserved. +# 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 diff --git a/jdk/test/com/sun/jndi/ldap/LdapTimeoutTest.java b/jdk/test/com/sun/jndi/ldap/LdapTimeoutTest.java new file mode 100644 index 00000000000..0db3ab9239c --- /dev/null +++ b/jdk/test/com/sun/jndi/ldap/LdapTimeoutTest.java @@ -0,0 +1,177 @@ +/* + * Copyright (c) 2011, 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 7094377 8000487 6176036 7056489 + * @summary Timeout tests for ldap + */ + +import java.net.Socket; +import java.net.ServerSocket; +import java.net.SocketTimeoutException; +import java.io.*; +import javax.naming.*; +import javax.naming.directory.*; +import java.util.Hashtable; +import java.util.concurrent.Callable; +import java.util.concurrent.Executors; +import java.util.concurrent.ScheduledExecutorService; +import java.util.concurrent.ScheduledFuture; +import java.util.concurrent.TimeUnit; + +public class LdapTimeoutTest { + private static final ScheduledExecutorService pool = + Executors.newScheduledThreadPool(1); + static volatile int passed = 0, failed = 0; + static void pass() {passed++;} + static void fail() {failed++; Thread.dumpStack();} + + public static void main(String[] args) throws Exception { + ServerSocket serverSock = new ServerSocket(0); + Server s = new Server(serverSock); + s.start(); + Thread.sleep(200); + + Hashtable env = new Hashtable(11); + env.put(Context.INITIAL_CONTEXT_FACTORY, + "com.sun.jndi.ldap.LdapCtxFactory"); + env.put(Context.PROVIDER_URL, "ldap://localhost:" + + serverSock.getLocalPort()); + + env.put(Context.SECURITY_AUTHENTICATION,"simple"); + + env.put(Context.SECURITY_PRINCIPAL, "user"); + env.put(Context.SECURITY_CREDENTIALS, "password"); + + env.put("com.sun.jndi.ldap.connect.timeout", "10"); + env.put("com.sun.jndi.ldap.read.timeout", "3000"); + + InitialContext ctx = null; + try { + new LdapTimeoutTest().ldapReadTimeoutTest(env, false); + new LdapTimeoutTest().ldapReadTimeoutTest(env, true); + new LdapTimeoutTest().simpleAuthConnectTest(env); + } finally { + s.interrupt(); + LdapTimeoutTest.pool.shutdown(); + } + + System.out.printf("%nPassed = %d, failed = %d%n%n", passed, failed); + if (failed > 0) throw new AssertionError("Some tests failed"); + } + + void ldapReadTimeoutTest(Hashtable env, boolean ssl) { + InitialContext ctx = null; + if (ssl) env.put(Context.SECURITY_PROTOCOL, "ssl"); + ScheduledFuture killer = killSwitch(); + long start = System.nanoTime(); + try { + ctx = new InitialDirContext(env); + SearchControls scl = new SearchControls(); + scl.setSearchScope(SearchControls.SUBTREE_SCOPE); + NamingEnumeration answer = ((InitialDirContext)ctx) + .search("ou=People,o=JNDITutorial", "(objectClass=*)", scl); + // shouldn't reach here + fail(); + } catch (NamingException e) { + if (ssl) { + if (e.getCause() instanceof SocketTimeoutException) { + pass(); + } else if (e.getCause() instanceof InterruptedIOException) { + Thread.interrupted(); + fail(); + } + } else { + pass(); + } + } finally { + if (!shutItDown(killer, ctx)) fail(); + } + } + + void simpleAuthConnectTest(Hashtable env) { + InitialContext ctx = null; + ScheduledFuture killer = killSwitch(); + long start = System.nanoTime(); + try { + ctx = new InitialDirContext(env); + // shouldn't reach here + System.err.println("Fail: InitialDirContext succeeded"); + fail(); + } catch (NamingException e) { + long end = System.nanoTime(); + if (e.getCause() instanceof SocketTimeoutException) { + if (TimeUnit.NANOSECONDS.toMillis(end - start) < 2900) { + pass(); + } else { + System.err.println("Fail: Waited too long"); + fail(); + } + } else if (e.getCause() instanceof InterruptedIOException) { + Thread.interrupted(); + fail(); + } else { + fail(); + } + } finally { + if (!shutItDown(killer, ctx)) fail(); + } + } + + boolean shutItDown(ScheduledFuture killer, InitialContext ctx) { + killer.cancel(true); + try { + if (ctx != null) ctx.close(); + return true; + } catch (NamingException ex) { + return false; + } + } + + ScheduledFuture killSwitch() { + final Thread current = Thread.currentThread(); + return LdapTimeoutTest.pool.schedule(new Callable() { + public Void call() throws Exception { + System.err.println("Fail: killSwitch()"); + current.interrupt(); + return null; + } + }, 5000, TimeUnit.MILLISECONDS); + } + + static class Server extends Thread { + final ServerSocket serverSock; + + Server(ServerSocket serverSock) { + this.serverSock = serverSock; + } + + public void run() { + try { + Socket socket = serverSock.accept(); + } catch (IOException e) {} + } + } +} + diff --git a/jdk/test/com/sun/jndi/ldap/LdapsReadTimeoutTest.java b/jdk/test/com/sun/jndi/ldap/LdapsReadTimeoutTest.java deleted file mode 100644 index 9fae77da009..00000000000 --- a/jdk/test/com/sun/jndi/ldap/LdapsReadTimeoutTest.java +++ /dev/null @@ -1,118 +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. - * - * 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 7094377 - * @summary Com.sun.jndi.ldap.read.timeout doesn't work with ldaps. - */ - -import java.net.Socket; -import java.net.ServerSocket; -import java.io.*; -import javax.naming.*; -import javax.naming.directory.*; -import java.util.Hashtable; - -public class LdapsReadTimeoutTest { - - public static void main(String[] args) throws Exception { - boolean passed = false; - - // create the server - try (Server server = Server.create()) { - // Set up the environment for creating the initial context - Hashtable env = new Hashtable<>(11); - env.put(Context.INITIAL_CONTEXT_FACTORY, - "com.sun.jndi.ldap.LdapCtxFactory"); - env.put("com.sun.jndi.ldap.connect.timeout", "1000"); - env.put("com.sun.jndi.ldap.read.timeout", "1000"); - env.put(Context.PROVIDER_URL, "ldaps://localhost:" + server.port()); - - - // Create initial context - DirContext ctx = new InitialDirContext(env); - try { - System.out.println("LDAP Client: Connected to the Server"); - - SearchControls scl = new SearchControls(); - scl.setSearchScope(SearchControls.SUBTREE_SCOPE); - System.out.println("Performing Search"); - NamingEnumeration answer = - ctx.search("ou=People,o=JNDITutorial", "(objectClass=*)", scl); - } finally { - // Close the context when we're done - ctx.close(); - } - } catch (NamingException e) { - passed = true; - e.printStackTrace(); - } - - if (!passed) { - throw new Exception("Read timeout test failed," + - " read timeout exception not thrown"); - } - System.out.println("The test PASSED"); - } - - static class Server implements Runnable, Closeable { - private final ServerSocket ss; - private Socket sref; - - private Server(ServerSocket ss) { - this.ss = ss; - } - - static Server create() throws IOException { - Server server = new Server(new ServerSocket(0)); - new Thread(server).start(); - return server; - } - - int port() { - return ss.getLocalPort(); - } - - public void run() { - try (Socket s = ss.accept()) { - sref = s; - System.out.println("Server: Connection accepted"); - BufferedInputStream bis = - new BufferedInputStream(s.getInputStream()); - byte[] buf = new byte[100]; - int n; - do { - n = bis.read(buf); - } while (n > 0); - } catch (IOException e) { - // ignore - } - } - - public void close() throws IOException { - ss.close(); - sref.close(); - } - } -} diff --git a/jdk/test/com/sun/jndi/ldap/ReadTimeoutTest.java b/jdk/test/com/sun/jndi/ldap/ReadTimeoutTest.java deleted file mode 100644 index 20e29173380..00000000000 --- a/jdk/test/com/sun/jndi/ldap/ReadTimeoutTest.java +++ /dev/null @@ -1,113 +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. - * - * 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 6176036 7056489 - * @summary Read-timeout specification for LDAP operations - */ - -import java.net.Socket; -import java.net.ServerSocket; -import java.io.*; -import javax.naming.*; -import javax.naming.directory.*; -import java.util.Hashtable; - -public class ReadTimeoutTest { - - public static void main(String[] args) throws Exception { - boolean passed = false; - - // create the server - try (Server server = Server.create()) { - // Set up the environment for creating the initial context - Hashtable env = new Hashtable<>(11); - env.put(Context.INITIAL_CONTEXT_FACTORY, - "com.sun.jndi.ldap.LdapCtxFactory"); - env.put("com.sun.jndi.ldap.read.timeout", "1000"); - env.put(Context.PROVIDER_URL, "ldap://localhost:" + server.port()); - - - // Create initial context - DirContext ctx = new InitialDirContext(env); - try { - System.out.println("LDAP Client: Connected to the Server"); - - SearchControls scl = new SearchControls(); - scl.setSearchScope(SearchControls.SUBTREE_SCOPE); - System.out.println("Performing Search"); - NamingEnumeration answer = - ctx.search("ou=People,o=JNDITutorial", "(objectClass=*)", scl); - } finally { - // Close the context when we're done - ctx.close(); - } - } catch (NamingException e) { - passed = true; - e.printStackTrace(); - } - - if (!passed) { - throw new Exception("Read timeout test failed," + - " read timeout exception not thrown"); - } - System.out.println("The test PASSED"); - } - - static class Server implements Runnable, Closeable { - private final ServerSocket ss; - - private Server(ServerSocket ss) { - this.ss = ss; - } - - static Server create() throws IOException { - Server server = new Server(new ServerSocket(0)); - new Thread(server).start(); - return server; - } - - int port() { - return ss.getLocalPort(); - } - - public void run() { - try (Socket s = ss.accept()) { - System.out.println("Server: Connection accepted"); - BufferedInputStream bis = new BufferedInputStream(s.getInputStream()); - byte[] buf = new byte[100]; - int n; - do { - n = bis.read(buf); - } while (n > 0); - } catch (IOException e) { - // ignore - } - } - - public void close() throws IOException { - ss.close(); - } - } -} diff --git a/jdk/test/com/sun/management/OperatingSystemMXBean/TestTotalSwap.sh b/jdk/test/com/sun/management/OperatingSystemMXBean/TestTotalSwap.sh index 009be0034eb..15faf704085 100644 --- a/jdk/test/com/sun/management/OperatingSystemMXBean/TestTotalSwap.sh +++ b/jdk/test/com/sun/management/OperatingSystemMXBean/TestTotalSwap.sh @@ -1,5 +1,5 @@ # -# Copyright (c) 2005, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2005, 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 diff --git a/jdk/test/com/sun/net/httpserver/Test1.java b/jdk/test/com/sun/net/httpserver/Test1.java index e0da2cebe4a..aa1c3969a2d 100644 --- a/jdk/test/com/sun/net/httpserver/Test1.java +++ b/jdk/test/com/sun/net/httpserver/Test1.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2005, 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 diff --git a/jdk/test/com/sun/net/httpserver/Test10.java b/jdk/test/com/sun/net/httpserver/Test10.java index d5846bda9b8..36f2a80e09b 100644 --- a/jdk/test/com/sun/net/httpserver/Test10.java +++ b/jdk/test/com/sun/net/httpserver/Test10.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2010, 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 diff --git a/jdk/test/com/sun/net/httpserver/bugs/B6373555.java b/jdk/test/com/sun/net/httpserver/bugs/B6373555.java index 9bfcd26d3a2..cef94781975 100644 --- a/jdk/test/com/sun/net/httpserver/bugs/B6373555.java +++ b/jdk/test/com/sun/net/httpserver/bugs/B6373555.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2006, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2006, 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 diff --git a/jdk/test/com/sun/nio/sctp/SctpChannel/SocketOptionTests.java b/jdk/test/com/sun/nio/sctp/SctpChannel/SocketOptionTests.java index 2ab14ac5b14..df1cbcc5550 100644 --- a/jdk/test/com/sun/nio/sctp/SctpChannel/SocketOptionTests.java +++ b/jdk/test/com/sun/nio/sctp/SctpChannel/SocketOptionTests.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2009, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2009, 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 diff --git a/jdk/test/com/sun/nio/sctp/SctpMultiChannel/SocketOptionTests.java b/jdk/test/com/sun/nio/sctp/SctpMultiChannel/SocketOptionTests.java index fdb0e72ab4c..8f7c6fcb8b6 100644 --- a/jdk/test/com/sun/nio/sctp/SctpMultiChannel/SocketOptionTests.java +++ b/jdk/test/com/sun/nio/sctp/SctpMultiChannel/SocketOptionTests.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2009, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2009, 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 diff --git a/jdk/test/com/sun/security/auth/login/ConfigFile/IllegalURL.java b/jdk/test/com/sun/security/auth/login/ConfigFile/IllegalURL.java index 5e7fb6e1b45..883ab168811 100644 --- a/jdk/test/com/sun/security/auth/login/ConfigFile/IllegalURL.java +++ b/jdk/test/com/sun/security/auth/login/ConfigFile/IllegalURL.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2008, Oracle and/or its affiliates. All rights reserved. + * 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 diff --git a/jdk/test/com/sun/security/sasl/digest/Unbound.java b/jdk/test/com/sun/security/sasl/digest/Unbound.java new file mode 100644 index 00000000000..e23376986cd --- /dev/null +++ b/jdk/test/com/sun/security/sasl/digest/Unbound.java @@ -0,0 +1,132 @@ +/* + * Copyright (c) 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 7110803 + * @summary SASL service for multiple hostnames + * @run main Unbound jmx + * @run main/fail Unbound j + */ +import javax.security.sasl.*; +import javax.security.auth.callback.*; +import java.util.*; + +public class Unbound { + private static final String MECH = "DIGEST-MD5"; + private static final String SERVER_FQDN = "machineX.imc.org"; + private static final String PROTOCOL = "jmx"; + + private static final byte[] EMPTY = new byte[0]; + + private static String pwfile, namesfile, proxyfile; + private static boolean auto; + private static boolean verbose = false; + + private static void init(String[] args) throws Exception { + if (args.length == 1) { + pwfile = "pw.properties"; + namesfile = "names.properties"; + auto = true; + } else { + int i = 1; + if (args[i].equals("-m")) { + i++; + auto = false; + } + if (args.length > i) { + pwfile = args[i++]; + + if (args.length > i) { + namesfile = args[i++]; + + if (args.length > i) { + proxyfile = args[i]; + } + } + } else { + pwfile = "pw.properties"; + namesfile = "names.properties"; + } + } + } + + public static void main(String[] args) throws Exception { + + init(args); + + CallbackHandler clntCbh = new ClientCallbackHandler(auto); + + CallbackHandler srvCbh = + new PropertiesFileCallbackHandler(pwfile, namesfile, proxyfile); + + SaslClient clnt = Sasl.createSaslClient( + new String[]{MECH}, null, PROTOCOL, SERVER_FQDN, null, clntCbh); + + Map props = System.getProperties(); + props.put("com.sun.security.sasl.digest.realm", SERVER_FQDN); + + SaslServer srv = Sasl.createSaslServer(MECH, args[0], null, props, + srvCbh); + + if (clnt == null) { + throw new IllegalStateException( + "Unable to find client impl for " + MECH); + } + if (srv == null) { + throw new IllegalStateException( + "Unable to find server impl for " + MECH); + } + + byte[] response = (clnt.hasInitialResponse()? + clnt.evaluateChallenge(EMPTY) : EMPTY); + byte[] challenge; + + while (!clnt.isComplete() || !srv.isComplete()) { + challenge = srv.evaluateResponse(response); + + if (challenge != null) { + response = clnt.evaluateChallenge(challenge); + } + } + + if (clnt.isComplete() && srv.isComplete()) { + if (verbose) { + System.out.println("SUCCESS"); + System.out.println("authzid is " + srv.getAuthorizationID()); + } + } else { + throw new IllegalStateException( + "FAILURE: mismatched state:" + + " client complete? " + clnt.isComplete() + + " server complete? " + srv.isComplete()); + } + + if (!SERVER_FQDN.equalsIgnoreCase((String) + srv.getNegotiatedProperty(Sasl.BOUND_SERVER_NAME))) { + throw new Exception("Server side gets wrong requested server name"); + } + clnt.dispose(); + srv.dispose(); + } +} diff --git a/jdk/test/com/sun/servicetag/JavaServiceTagTest.java b/jdk/test/com/sun/servicetag/JavaServiceTagTest.java index 6122b14d13c..a411fa973ee 100644 --- a/jdk/test/com/sun/servicetag/JavaServiceTagTest.java +++ b/jdk/test/com/sun/servicetag/JavaServiceTagTest.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2008, Oracle and/or its affiliates. All rights reserved. + * 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 diff --git a/jdk/test/com/sun/servicetag/JavaServiceTagTest1.java b/jdk/test/com/sun/servicetag/JavaServiceTagTest1.java index ffe3744ccd3..d220bf0bc41 100644 --- a/jdk/test/com/sun/servicetag/JavaServiceTagTest1.java +++ b/jdk/test/com/sun/servicetag/JavaServiceTagTest1.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2008, 2010, Oracle and/or its affiliates. All rights reserved. + * 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 diff --git a/jdk/test/com/sun/tools/attach/CommonSetup.sh b/jdk/test/com/sun/tools/attach/CommonSetup.sh index a37d0d10424..13554918178 100644 --- a/jdk/test/com/sun/tools/attach/CommonSetup.sh +++ b/jdk/test/com/sun/tools/attach/CommonSetup.sh @@ -1,7 +1,7 @@ #!/bin/sh # -# Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2005, 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 diff --git a/jdk/test/demo/zipfs/basic.sh b/jdk/test/demo/zipfs/basic.sh index 7188c181ed8..b222f87bd2e 100644 --- a/jdk/test/demo/zipfs/basic.sh +++ b/jdk/test/demo/zipfs/basic.sh @@ -1,5 +1,5 @@ # -# Copyright (c) 2009, 2011, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2009, 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 diff --git a/jdk/test/java/awt/Frame/7024749/bug7024749.java b/jdk/test/java/awt/Frame/7024749/bug7024749.java index 5eb28b6723d..4e7f682aeec 100644 --- a/jdk/test/java/awt/Frame/7024749/bug7024749.java +++ b/jdk/test/java/awt/Frame/7024749/bug7024749.java @@ -25,7 +25,7 @@ * @test * @bug 7024749 * @summary JDK7 b131---a crash in: Java_sun_awt_windows_ThemeReader_isGetThemeTransitionDurationDefined+0x75 - * @library ../../../regtesthelpers + * @library ../../regtesthelpers * @build Util * @author Oleg Pekhovskiy: area=awt.toplevel @run main bug7024749 diff --git a/jdk/test/java/awt/GraphicsConfiguration/NormalizingTransformTest/NormalizingTransformTest.java b/jdk/test/java/awt/GraphicsConfiguration/NormalizingTransformTest/NormalizingTransformTest.java new file mode 100644 index 00000000000..0e5e46b789b --- /dev/null +++ b/jdk/test/java/awt/GraphicsConfiguration/NormalizingTransformTest/NormalizingTransformTest.java @@ -0,0 +1,55 @@ +/* + * Copyright (c) 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 6373505 + * @summary Tests that the result of Toolkit.getScreenResolution() is + * consistent with GraphicsConfiguration.getNormalizingTransform(). + * @author Dmitri.Trembovetski@Sun.COM: area=GraphicsConfiguration + * @run main NormalizingTransformTest + */ + +import java.awt.GraphicsConfiguration; +import java.awt.GraphicsEnvironment; +import java.awt.Toolkit; +import java.awt.geom.AffineTransform; + +public class NormalizingTransformTest { + + public static void main(String[] args) { + GraphicsConfiguration gc = + GraphicsEnvironment.getLocalGraphicsEnvironment(). + getDefaultScreenDevice().getDefaultConfiguration(); + AffineTransform normTransform = gc.getNormalizingTransform(); + int dpiX = Toolkit.getDefaultToolkit().getScreenResolution(); + int normDpiX = (int)(normTransform.getScaleX() * 72.0); + if (dpiX != normDpiX) { + throw new RuntimeException( + "Test FAILED. Toolkit.getScreenResolution()=" + dpiX + + " GraphicsConfiguration.getNormalizingTransform()="+normDpiX); + } + System.out.println("Test PASSED. DPI="+normDpiX); + } + +} diff --git a/jdk/test/java/awt/Toolkit/AutoShutdown/ShowExitTest/ShowExitTest.sh b/jdk/test/java/awt/Toolkit/AutoShutdown/ShowExitTest/ShowExitTest.sh index 71c8fa7fcc2..148041c2825 100644 --- a/jdk/test/java/awt/Toolkit/AutoShutdown/ShowExitTest/ShowExitTest.sh +++ b/jdk/test/java/awt/Toolkit/AutoShutdown/ShowExitTest/ShowExitTest.sh @@ -1,7 +1,7 @@ #!/bin/ksh -p # -# Copyright (c) 2007, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2007, 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 @@ -39,7 +39,7 @@ status=1 #Call this from anywhere to fail the test with an error message # usage: fail "reason why the test failed" -fail() +fail() { echo "The test failed :-(" echo "$*" 1>&2 echo "exit status was $status" @@ -48,7 +48,7 @@ fail() #Call this from anywhere to pass the test with a message # usage: pass "reason why the test passed if applicable" -pass() +pass() { echo "The test passed!!!" echo "$*" 1>&2 exit 0 @@ -64,20 +64,42 @@ OS=`uname -s` case "$OS" in SunOS ) VAR="One value for Sun" - DEFAULT_JDK=/usr/local/java/jdk1.2/solaris + DEFAULT_JDK=/ FILESEP="/" + PATHSEP=":" + TMP="/tmp" ;; Linux ) VAR="A different value for Linux" - DEFAULT_JDK=/usr/local/java/jdk1.4/linux-i386 + DEFAULT_JDK=/ FILESEP="/" + PATHSEP=":" + TMP="/tmp" ;; - Windows_95 | Windows_98 | Windows_NT | Windows_ME ) + Darwin ) + VAR="A different value for MacOSX" + DEFAULT_JDK=/usr + FILESEP="/" + PATHSEP=":" + TMP="/tmp" + ;; + + Windows* ) VAR="A different value for Win32" - DEFAULT_JDK=/usr/local/java/jdk1.2/win32 + DEFAULT_JDK="C:/Program Files/Java/jdk1.8.0" FILESEP="\\" + PATHSEP=";" + TMP=`cd "${SystemRoot}/Temp"; echo ${PWD}` + ;; + + CYGWIN* ) + VAR="A different value for Cygwin" + DEFAULT_JDK="/cygdrive/c/Program\ Files/Java/jdk1.8.0" + FILESEP="/" + PATHSEP=";" + TMP=`cd "${SystemRoot}/Temp"; echo ${PWD}` ;; # catch all other OSs @@ -88,8 +110,8 @@ case "$OS" in esac -# Want this test to run standalone as well as in the harness, so do the -# following to copy the test's directory into the harness's scratch directory +# Want this test to run standalone as well as in the harness, so do the +# following to copy the test's directory into the harness's scratch directory # and set all appropriate variables: if [ -z "${TESTJAVA}" ] ; then @@ -104,7 +126,7 @@ if [ -z "${TESTJAVA}" ] ; then if [ -n "$1" ] ; then TESTJAVA=$1 else echo "no JDK specified on command line so using default!" - TESTJAVA=$DEFAULT_JDK + TESTJAVA=$DEFAULT_JDK fi TESTSRC=. TESTCLASSES=. @@ -113,25 +135,25 @@ fi echo "JDK under test is: $TESTJAVA" #Deal with .class files: -if [ -n "${STANDALONE}" ] ; - then +if [ -n "${STANDALONE}" ] ; + then #if standalone, remind user to cd to dir. containing test before running it echo "Just a reminder: cd to the dir containing this test when running it" # then compile all .java files (if there are any) into .class files - if [ -a *.java ] ; + if [ -a *.java ] ; then echo "Reminder, this test should be in its own directory with all" echo "supporting files it needs in the directory with it." - ${TESTJAVA}/bin/javac ./*.java ; + ${TESTJAVA}/bin/javac ./*.java ; fi # else in harness so copy all the class files from where jtreg put them - # over to the scratch directory this test is running in. + # over to the scratch directory this test is running in. else cp ${TESTCLASSES}/*.class . ; fi -#if in test harness, then copy the entire directory that the test is in over +#if in test harness, then copy the entire directory that the test is in over # to the scratch directory. This catches any support files needed by the test. -if [ -z "${STANDALONE}" ] ; - then cp ${TESTSRC}/* . +if [ -z "${STANDALONE}" ] ; + then cp ${TESTSRC}/* . fi #Just before executing anything, make sure it has executable permission! diff --git a/jdk/test/java/awt/Toolkit/BadDisplayTest/BadDisplayTest.java b/jdk/test/java/awt/Toolkit/BadDisplayTest/BadDisplayTest.java new file mode 100644 index 00000000000..a5bed9c1331 --- /dev/null +++ b/jdk/test/java/awt/Toolkit/BadDisplayTest/BadDisplayTest.java @@ -0,0 +1,48 @@ +/* + * Copyright (c) 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 + * @summary Test that Toolkit.getDefaultToolkit throws AWTError exception if bad DISPLAY variable was set + * @bug 6818083 + * + * @run shell/timeout=240 BadDisplayTest.sh + */ + +import java.awt.*; + +public class BadDisplayTest{ + public static void main(String[] args) { + + Throwable th = null; + try { + Toolkit.getDefaultToolkit(); + } catch (Throwable x) { + th = x; + } + if ( !(th instanceof AWTError)) { + System.exit(1); + } + } +} diff --git a/jdk/test/java/awt/Toolkit/BadDisplayTest/BadDisplayTest.sh b/jdk/test/java/awt/Toolkit/BadDisplayTest/BadDisplayTest.sh new file mode 100644 index 00000000000..f4a54d300c7 --- /dev/null +++ b/jdk/test/java/awt/Toolkit/BadDisplayTest/BadDisplayTest.sh @@ -0,0 +1,42 @@ +# Copyright (c) 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. + +${TESTJAVA}/bin/javac -cp ${TESTSRC} -d . ${TESTSRC}/BadDisplayTest.java + + +export DISPLAY= + +OS=`uname -s` +case "$OS" in + SunOS ) + ${TESTJAVA}/bin/java BadDisplayTest + ;; + Linux ) + ${TESTJAVA}/bin/java BadDisplayTest + ;; + * ) + echo "Unsupported System: ${OS}" + exit 0; + ;; +esac + +exit $? + diff --git a/jdk/test/java/awt/appletviewer/IOExceptionIfEncodedURLTest/IOExceptionIfEncodedURLTest.sh b/jdk/test/java/awt/appletviewer/IOExceptionIfEncodedURLTest/IOExceptionIfEncodedURLTest.sh index 0e22776b1ac..923cac5f845 100644 --- a/jdk/test/java/awt/appletviewer/IOExceptionIfEncodedURLTest/IOExceptionIfEncodedURLTest.sh +++ b/jdk/test/java/awt/appletviewer/IOExceptionIfEncodedURLTest/IOExceptionIfEncodedURLTest.sh @@ -1,5 +1,5 @@ # -# Copyright (c) 2008, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2008, 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 @@ -38,7 +38,7 @@ status=1 #Call this from anywhere to fail the test with an error message # usage: fail "reason why the test failed" -fail() +fail() { echo "The test failed :-(" echo "$*" 1>&2 echo "exit status was $status" @@ -47,7 +47,7 @@ fail() #Call this from anywhere to pass the test with a message # usage: pass "reason why the test passed if applicable" -pass() +pass() { echo "The test passed!!!" echo "$*" 1>&2 exit 0 @@ -99,20 +99,42 @@ OS=`uname -s` case "$OS" in SunOS ) VAR="One value for Sun" - DEFAULT_JDK=/usr/local/java/jdk1.2.1/solaris + DEFAULT_JDK=/ FILESEP="/" + PATHSEP=":" + TMP="/tmp" ;; Linux ) VAR="A different value for Linux" - DEFAULT_JDK=/usr/local/java/jdk1.4/linux-i386 + DEFAULT_JDK=/ FILESEP="/" + PATHSEP=":" + TMP="/tmp" ;; - Windows_95 | Windows_98 | Windows_NT | Windows_ME | CYGWIN_NT-5.1) + Darwin ) + VAR="A different value for MacOSX" + DEFAULT_JDK=/usr + FILESEP="/" + PATHSEP=":" + TMP="/tmp" + ;; + + Windows* ) VAR="A different value for Win32" - DEFAULT_JDK=/usr/local/java/jdk1.2.1/win32 + DEFAULT_JDK="C:/Program Files/Java/jdk1.8.0" FILESEP="\\" + PATHSEP=";" + TMP=`cd "${SystemRoot}/Temp"; echo ${PWD}` + ;; + + CYGWIN* ) + VAR="A different value for Cygwin" + DEFAULT_JDK="/cygdrive/c/Program\ Files/Java/jdk1.8.0" + FILESEP="/" + PATHSEP=";" + TMP=`cd "${SystemRoot}/Temp"; echo ${PWD}` ;; # catch all other OSs @@ -132,12 +154,12 @@ fi # note that the name of the executable is in the fail string as well. # this is how to check for presence of the compiler, etc. #RESOURCE=`whence SomeProgramOrFileNeeded` -#if [ "${RESOURCE}" = "" ] ; -# then fail "Need SomeProgramOrFileNeeded to perform the test" ; +#if [ "${RESOURCE}" = "" ] ; +# then fail "Need SomeProgramOrFileNeeded to perform the test" ; #fi -# Want this test to run standalone as well as in the harness, so do the -# following to copy the test's directory into the harness's scratch directory +# Want this test to run standalone as well as in the harness, so do the +# following to copy the test's directory into the harness's scratch directory # and set all appropriate variables: if [ -z "${TESTJAVA}" ] ; then @@ -152,7 +174,7 @@ if [ -z "${TESTJAVA}" ] ; then if [ -n "$1" ] ; then TESTJAVA=$1 else echo "no JDK specified on command line so using default!" - TESTJAVA=$DEFAULT_JDK + TESTJAVA=$DEFAULT_JDK fi TESTSRC=. TESTCLASSES=. @@ -161,25 +183,25 @@ fi echo "JDK under test is: $TESTJAVA" #Deal with .class files: -if [ -n "${STANDALONE}" ] ; - then +if [ -n "${STANDALONE}" ] ; + then #if standalone, remind user to cd to dir. containing test before running it echo "Just a reminder: cd to the dir containing this test when running it" # then compile all .java files (if there are any) into .class files - if [ -a *.java ] ; + if [ -a *.java ] ; then echo "Reminder, this test should be in its own directory with all" echo "supporting files it needs in the directory with it." - ${TESTJAVA}/bin/javac ./*.java ; + ${TESTJAVA}/bin/javac ./*.java ; fi # else in harness so copy all the class files from where jtreg put them - # over to the scratch directory this test is running in. + # over to the scratch directory this test is running in. else cp ${TESTCLASSES}/*.class . ; fi -#if in test harness, then copy the entire directory that the test is in over +#if in test harness, then copy the entire directory that the test is in over # to the scratch directory. This catches any support files needed by the test. -#if [ -z "${STANDALONE}" ] ; -# then cp ${TESTSRC}/* . +#if [ -z "${STANDALONE}" ] ; +# then cp ${TESTSRC}/* . #fi #Just before executing anything, make sure it has executable permission! @@ -198,7 +220,7 @@ chmod 777 ./* # this shell test as appropriate ( 0 status is considered a pass here ) # The test verifies that appletviewer correctly works with the different -# names of the files, including relative and absolute paths +# names of the files, including relative and absolute paths # 6619458: exclude left brace from the name of the files managed by the VCS NAME='test.html' diff --git a/jdk/test/java/io/File/MaxPathLength.java b/jdk/test/java/io/File/MaxPathLength.java index af8323a365b..4111550bbd2 100644 --- a/jdk/test/java/io/File/MaxPathLength.java +++ b/jdk/test/java/io/File/MaxPathLength.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2002, 2005, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2002, 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 diff --git a/jdk/test/java/io/File/basic.sh b/jdk/test/java/io/File/basic.sh index 07bea7c80df..74a0f71b614 100644 --- a/jdk/test/java/io/File/basic.sh +++ b/jdk/test/java/io/File/basic.sh @@ -1,7 +1,7 @@ #! /bin/sh # -# Copyright (c) 1998, 2010, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 1998, 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 diff --git a/jdk/test/java/io/FileInputStream/LargeFileAvailable.java b/jdk/test/java/io/FileInputStream/LargeFileAvailable.java index b6fbe4d57d3..90eed30d1dc 100644 --- a/jdk/test/java/io/FileInputStream/LargeFileAvailable.java +++ b/jdk/test/java/io/FileInputStream/LargeFileAvailable.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2010, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2010, 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 diff --git a/jdk/test/java/io/IOException/LastErrorString.java b/jdk/test/java/io/IOException/LastErrorString.java index 3d6d9edb934..3c769cd8063 100644 --- a/jdk/test/java/io/IOException/LastErrorString.java +++ b/jdk/test/java/io/IOException/LastErrorString.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1998, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1998, 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 diff --git a/jdk/test/java/io/Serializable/badSubstByReplace/BadSubstByReplace.java b/jdk/test/java/io/Serializable/badSubstByReplace/BadSubstByReplace.java index ce78220ee76..a943df1f913 100644 --- a/jdk/test/java/io/Serializable/badSubstByReplace/BadSubstByReplace.java +++ b/jdk/test/java/io/Serializable/badSubstByReplace/BadSubstByReplace.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 1998, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 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 diff --git a/jdk/test/java/io/Serializable/evolution/RenamePackage/run.sh b/jdk/test/java/io/Serializable/evolution/RenamePackage/run.sh index 8fdbf2af3bf..13c4387f7a4 100644 --- a/jdk/test/java/io/Serializable/evolution/RenamePackage/run.sh +++ b/jdk/test/java/io/Serializable/evolution/RenamePackage/run.sh @@ -1,5 +1,5 @@ # -# Copyright (c) 1998, 2010, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 1998, 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 diff --git a/jdk/test/java/io/Serializable/expectedStackTrace/ExpectedStackTrace.java b/jdk/test/java/io/Serializable/expectedStackTrace/ExpectedStackTrace.java index 2c68ce0d811..3021ba90d26 100644 --- a/jdk/test/java/io/Serializable/expectedStackTrace/ExpectedStackTrace.java +++ b/jdk/test/java/io/Serializable/expectedStackTrace/ExpectedStackTrace.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2005, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2005, 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 diff --git a/jdk/test/java/io/Serializable/replaceStringArray/ReplaceStringArray.java b/jdk/test/java/io/Serializable/replaceStringArray/ReplaceStringArray.java index 11b2d6d9f1f..1dc432bcc8f 100644 --- a/jdk/test/java/io/Serializable/replaceStringArray/ReplaceStringArray.java +++ b/jdk/test/java/io/Serializable/replaceStringArray/ReplaceStringArray.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1998, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1998, 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 diff --git a/jdk/test/java/io/Serializable/replaceWithNull/ReplaceWithNull.java b/jdk/test/java/io/Serializable/replaceWithNull/ReplaceWithNull.java index 896900b2d62..0641a107883 100644 --- a/jdk/test/java/io/Serializable/replaceWithNull/ReplaceWithNull.java +++ b/jdk/test/java/io/Serializable/replaceWithNull/ReplaceWithNull.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 1998, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 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 diff --git a/jdk/test/java/io/Serializable/serialver/classpath/run.sh b/jdk/test/java/io/Serializable/serialver/classpath/run.sh index ef762f2ba39..8c6b9f3d0be 100644 --- a/jdk/test/java/io/Serializable/serialver/classpath/run.sh +++ b/jdk/test/java/io/Serializable/serialver/classpath/run.sh @@ -1,5 +1,5 @@ # -# Copyright (c) 2000, 2010, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2000, 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 diff --git a/jdk/test/java/io/Serializable/serialver/nested/run.sh b/jdk/test/java/io/Serializable/serialver/nested/run.sh index 7a0274ba4fa..765d2d41c41 100644 --- a/jdk/test/java/io/Serializable/serialver/nested/run.sh +++ b/jdk/test/java/io/Serializable/serialver/nested/run.sh @@ -1,5 +1,5 @@ # -# Copyright (c) 2000, 2010, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2000, 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 diff --git a/jdk/test/java/io/Serializable/verifyDynamicObjHandleTable/VerifyDynamicObjHandleTable.java b/jdk/test/java/io/Serializable/verifyDynamicObjHandleTable/VerifyDynamicObjHandleTable.java index 3e8156b0728..80933edd12d 100644 --- a/jdk/test/java/io/Serializable/verifyDynamicObjHandleTable/VerifyDynamicObjHandleTable.java +++ b/jdk/test/java/io/Serializable/verifyDynamicObjHandleTable/VerifyDynamicObjHandleTable.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1998, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1998, 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 diff --git a/jdk/test/java/io/pathNames/win32/bug6344646.java b/jdk/test/java/io/pathNames/win32/bug6344646.java index d39dd40cf36..30f5aa25e49 100644 --- a/jdk/test/java/io/pathNames/win32/bug6344646.java +++ b/jdk/test/java/io/pathNames/win32/bug6344646.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2005, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2005, 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 @@ -23,7 +23,7 @@ /* @test * @bug 6344646 - * @summary tests that Win32FileSystem.hashCode() uses + * @summary tests that WinNTFileSystem.hashCode() uses * locale independent case mapping. */ diff --git a/jdk/test/java/lang/Character/CheckProp.java b/jdk/test/java/lang/Character/CheckProp.java index db511f9cc6b..ee1b6492fb4 100644 --- a/jdk/test/java/lang/Character/CheckProp.java +++ b/jdk/test/java/lang/Character/CheckProp.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2011, 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 diff --git a/jdk/test/java/lang/Character/CheckScript.java b/jdk/test/java/lang/Character/CheckScript.java index 3678aee4bed..147f931e988 100644 --- a/jdk/test/java/lang/Character/CheckScript.java +++ b/jdk/test/java/lang/Character/CheckScript.java @@ -1,6 +1,6 @@ /* - * Copyright (c) 2010, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2010, 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 diff --git a/jdk/test/java/lang/ClassLoader/deadlock/TestCrossDelegate.sh b/jdk/test/java/lang/ClassLoader/deadlock/TestCrossDelegate.sh index e5170c74bd0..17940eabf31 100644 --- a/jdk/test/java/lang/ClassLoader/deadlock/TestCrossDelegate.sh +++ b/jdk/test/java/lang/ClassLoader/deadlock/TestCrossDelegate.sh @@ -1,5 +1,5 @@ # -# Copyright (c) 2009, 2010, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2009, 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 diff --git a/jdk/test/java/lang/ClassLoader/deadlock/TestOneWayDelegate.sh b/jdk/test/java/lang/ClassLoader/deadlock/TestOneWayDelegate.sh index 06126d0ba55..5c2f0172daf 100644 --- a/jdk/test/java/lang/ClassLoader/deadlock/TestOneWayDelegate.sh +++ b/jdk/test/java/lang/ClassLoader/deadlock/TestOneWayDelegate.sh @@ -1,5 +1,5 @@ # -# Copyright (c) 2009, 2010, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2009, 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 diff --git a/jdk/test/java/lang/Double/ToHexString.java b/jdk/test/java/lang/Double/ToHexString.java index c9fb07e9587..2dab65047a2 100644 --- a/jdk/test/java/lang/Double/ToHexString.java +++ b/jdk/test/java/lang/Double/ToHexString.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 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 diff --git a/jdk/test/java/lang/ProcessBuilder/Basic.java b/jdk/test/java/lang/ProcessBuilder/Basic.java index ff7f0512725..8ad7bd93709 100644 --- a/jdk/test/java/lang/ProcessBuilder/Basic.java +++ b/jdk/test/java/lang/ProcessBuilder/Basic.java @@ -36,10 +36,12 @@ import java.lang.ProcessBuilder.Redirect; import static java.lang.ProcessBuilder.Redirect.*; import java.io.*; +import java.lang.reflect.Field; import java.util.*; import java.util.concurrent.CountDownLatch; import java.util.concurrent.TimeUnit; import java.security.*; +import sun.misc.Unsafe; import java.util.regex.Pattern; import java.util.regex.Matcher; import static java.lang.System.getenv; @@ -1938,17 +1940,21 @@ public class Basic { final byte[] bytes = new byte[10]; final Process p = new ProcessBuilder(childArgs).start(); final CountDownLatch latch = new CountDownLatch(1); + final InputStream s; + switch (action & 0x1) { + case 0: s = p.getInputStream(); break; + case 1: s = p.getErrorStream(); break; + default: throw new Error(); + } final Thread thread = new Thread() { public void run() { try { - latch.countDown(); int r; - switch (action) { - case 0: r = p.getInputStream().read(); break; - case 1: r = p.getErrorStream().read(); break; - case 2: r = p.getInputStream().read(bytes); break; - case 3: r = p.getErrorStream().read(bytes); break; - default: throw new Error(); + latch.countDown(); + switch (action & 0x2) { + case 0: r = s.read(); break; + case 2: r = s.read(bytes); break; + default: throw new Error(); } equal(-1, r); } catch (Throwable t) { unexpected(t); }}}; @@ -1956,6 +1962,40 @@ public class Basic { thread.start(); latch.await(); Thread.sleep(10); + + String os = System.getProperty("os.name"); + if (os.equalsIgnoreCase("Solaris") || + os.equalsIgnoreCase("SunOS")) + { + final Object deferred; + Class c = s.getClass(); + if (c.getName().equals( + "java.lang.UNIXProcess$DeferredCloseInputStream")) + { + deferred = s; + } else { + Field deferredField = p.getClass(). + getDeclaredField("stdout_inner_stream"); + deferredField.setAccessible(true); + deferred = deferredField.get(p); + } + Field useCountField = deferred.getClass(). + getDeclaredField("useCount"); + useCountField.setAccessible(true); + + while (useCountField.getInt(deferred) <= 0) { + Thread.yield(); + } + } else if (s instanceof BufferedInputStream) { + Field f = Unsafe.class.getDeclaredField("theUnsafe"); + f.setAccessible(true); + Unsafe unsafe = (Unsafe)f.get(null); + + while (unsafe.tryMonitorEnter(s)) { + unsafe.monitorExit(s); + Thread.sleep(1); + } + } p.destroy(); thread.join(); } diff --git a/jdk/test/java/lang/Runtime/exec/StreamsSurviveDestroy.java b/jdk/test/java/lang/Runtime/exec/StreamsSurviveDestroy.java index 3b51171fd1c..27e5ae83eb8 100644 --- a/jdk/test/java/lang/Runtime/exec/StreamsSurviveDestroy.java +++ b/jdk/test/java/lang/Runtime/exec/StreamsSurviveDestroy.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 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 diff --git a/jdk/test/java/lang/StringBuffer/AppendStringBuilder.java b/jdk/test/java/lang/StringBuffer/AppendStringBuilder.java new file mode 100644 index 00000000000..a27f6a12a28 --- /dev/null +++ b/jdk/test/java/lang/StringBuffer/AppendStringBuilder.java @@ -0,0 +1,70 @@ +/* + * Copyright (c) 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 6206780 + * @summary Test StringBuffer.append(StringBuilder); + */ + +import java.util.Random; + +public class AppendStringBuilder { + private static Random generator = new Random(); + + public static void main(String[] args) throws Exception { + for (int i=0; i<1000; i++) { + StringBuilder sb1 = generateTestBuilder(10, 100); + StringBuilder sb2 = generateTestBuilder(10, 100); + StringBuilder sb3 = generateTestBuilder(10, 100); + String s1 = sb1.toString(); + String s2 = sb2.toString(); + String s3 = sb3.toString(); + + String concatResult = new String(s1+s2+s3); + + StringBuffer test = new StringBuffer(); + test.append(sb1); + test.append(sb2); + test.append(sb3); + + if (!test.toString().equals(concatResult)) + throw new RuntimeException("StringBuffer.append failure"); + } + } + + private static int getRandomIndex(int constraint1, int constraint2) { + int range = constraint2 - constraint1; + int x = generator.nextInt(range); + return constraint1 + x; + } + + private static StringBuilder generateTestBuilder(int min, int max) { + StringBuilder aNewStringBuilder = new StringBuilder(120); + int aNewLength = getRandomIndex(min, max); + for(int y=0; y + */ + +import java.util.ArrayList; +import java.util.List; + +public class BufferForwarding { + private final static String A_STRING_BUFFER_VAL = "aStringBuffer"; + private final static String A_STRING_BUILDER_VAL = "aStringBuilder"; + private final static String A_STRING_VAL = "aString"; + private final static String NON_EMPTY_VAL = "NonEmpty"; + + public BufferForwarding() { + System.out.println( "Starting BufferForwarding"); + } + + public static void main(String... args) { + new BufferForwarding().executeTestMethods(); + } + + public void executeTestMethods() { + appendCharSequence(); + indexOfString(); + indexOfStringIntNull(); + indexOfStringNull(); + indexOfStringint(); + insertintCharSequence(); + insertintObject(); + insertintboolean(); + insertintchar(); + insertintdouble(); + insertintfloat(); + insertintint(); + insertintlong(); + lastIndexOfString(); + lastIndexOfStringint(); + } + + public void appendCharSequence() { + // three different flavors of CharSequence + CharSequence aString = A_STRING_VAL; + CharSequence aStringBuilder = new StringBuilder(A_STRING_BUILDER_VAL); + CharSequence aStringBuffer = new StringBuffer(A_STRING_BUFFER_VAL); + + assertEquals( /*actual*/ new StringBuilder().append(aString).toString(), /*expected*/ A_STRING_VAL ); + assertEquals( new StringBuilder().append(aStringBuilder).toString(), A_STRING_BUILDER_VAL ); + assertEquals( new StringBuilder().append(aStringBuffer).toString(), A_STRING_BUFFER_VAL ); + + assertEquals( /*actual*/ new StringBuilder(NON_EMPTY_VAL).append(aString).toString(), NON_EMPTY_VAL+A_STRING_VAL ); + assertEquals( new StringBuilder(NON_EMPTY_VAL).append(aStringBuilder).toString(), NON_EMPTY_VAL+A_STRING_BUILDER_VAL ); + assertEquals( new StringBuilder(NON_EMPTY_VAL).append(aStringBuffer).toString(), NON_EMPTY_VAL+A_STRING_BUFFER_VAL ); + } + + void indexOfString() { + StringBuffer sb = new StringBuffer("xyz"); + assertEquals( sb.indexOf("y"), 1 ); + assertEquals( sb.indexOf("not found"), -1 ); + } + + + public void indexOfStringint() { + StringBuffer sb = new StringBuffer("xyyz"); + assertEquals( sb.indexOf("y",0), 1 ); + assertEquals( sb.indexOf("y",1), 1 ); + assertEquals( sb.indexOf("y",2), 2 ); + assertEquals( sb.indexOf("not found"), -1 ); + } + + + public void indexOfStringIntNull() { + StringBuffer sb = new StringBuffer(); + // should be NPE if null passed + try { + sb.indexOf(null,1); + throw new RuntimeException("Test failed: should have thrown NPE"); + } catch (NullPointerException npe) { + // expected: passed + } catch (Throwable t) { + throw new RuntimeException("Test failed: should have thrown NPE. Instead threw " + + t); + } + } + + + public void indexOfStringNull() { + StringBuffer sb = new StringBuffer(); + + // should be NPE if null passed + try { + sb.indexOf(null); + throw new RuntimeException("Test failed: should have thrown NPE"); + } catch (NullPointerException npe) { + // expected: passed + } catch (Throwable t) { + throw new RuntimeException("Test failed: should have thrown NPE. Instead threw " + + t); + } + } + + + public void insertintboolean() { + boolean b = true; + StringBuffer sb = new StringBuffer("012345"); + assertEquals( sb.insert( 2, b).toString(), "01true2345"); + } + + + public void insertintchar() { + char c = 'C'; + StringBuffer sb = new StringBuffer("012345"); + assertEquals( sb.insert( 2, c ).toString(), "01C2345"); + } + + + public void insertintCharSequence() { + final String initString = "012345"; + // three different flavors of CharSequence + CharSequence aString = A_STRING_VAL; + CharSequence aStringBuilder = new StringBuilder(A_STRING_BUILDER_VAL); + CharSequence aStringBuffer = new StringBuffer(A_STRING_BUFFER_VAL); + + assertEquals( new StringBuffer(initString).insert(2, aString).toString(), "01"+A_STRING_VAL+"2345" ); + + assertEquals( new StringBuffer(initString).insert(2, aStringBuilder).toString(), "01"+A_STRING_BUILDER_VAL+"2345" ); + + assertEquals( new StringBuffer(initString).insert(2, aStringBuffer).toString(), "01"+A_STRING_BUFFER_VAL+"2345" ); + + try { + new StringBuffer(initString).insert(7, aString); + throw new RuntimeException("Test failed: should have thrown IndexOutOfBoundsException"); + } catch (IndexOutOfBoundsException soob) { + // expected: passed + } catch (Throwable t) { + throw new RuntimeException("Test failed: should have thrown IndexOutOfBoundsException, but instead threw " + t.getMessage()); + + } + } + + public void insertintdouble() { + double d = 99d; + StringBuffer sb = new StringBuffer("012345"); + assertEquals( sb.insert( 2, d ).toString(), "0199.02345"); } + + + public void insertintfloat() { + float f = 99.0f; + StringBuffer sb = new StringBuffer("012345"); + assertEquals( sb.insert( 2, f ).toString(), "0199.02345"); } + + + public void insertintint() { + int i = 99; + StringBuffer sb = new StringBuffer("012345"); + assertEquals( sb.insert( 2, i ).toString(), "01992345"); + } + + + public void insertintlong() { + long l = 99; + StringBuffer sb = new StringBuffer("012345"); + assertEquals( sb.insert( 2, l ).toString(), "01992345"); } + + public void insertintObject() { + StringBuffer sb = new StringBuffer("012345"); + List ls = new ArrayList(); + ls.add("A"); ls.add("B"); + String lsString = ls.toString(); + assertEquals( sb.insert(2, ls).toString(), "01"+lsString+"2345"); + + try { + sb.insert(sb.length()+1, ls); + throw new RuntimeException("Test failed: should have thrown StringIndexOutOfBoundsException"); + } catch (StringIndexOutOfBoundsException soob) { + // expected: passed + } catch (Throwable t) { + throw new RuntimeException("Test failed: should have thrown StringIndexOutOfBoundsException, but instead threw:" + + t); + + } + } + + + + public void lastIndexOfString() { + String xyz = "xyz"; + String xyz3 = "xyzxyzxyz"; + StringBuffer sb = new StringBuffer(xyz3); + int pos = sb.lastIndexOf("xyz"); + assertEquals( pos, 2*xyz.length() ); + } + + public void lastIndexOfStringint() { + StringBuffer sb = new StringBuffer("xyzxyzxyz"); + int pos = sb.lastIndexOf("xyz",5); + assertEquals( pos, 3 ); + pos = sb.lastIndexOf("xyz", 6); + assertEquals( pos, 6 ); + } + + public void assertEquals( String actual, String expected) { + if (!actual.equals( expected )) { + throw new RuntimeException( "Test failed: actual = '" + actual + + "', expected = '" + expected + "'"); + } + } + + public void assertEquals( int actual, int expected) { + if (actual != expected) { + throw new RuntimeException( "Test failed: actual = '" + actual + + "', expected = '" + expected + "'"); + } + } +} diff --git a/jdk/test/java/lang/StringBuffer/TestSynchronization.java b/jdk/test/java/lang/StringBuffer/TestSynchronization.java new file mode 100644 index 00000000000..75b4b82f3d5 --- /dev/null +++ b/jdk/test/java/lang/StringBuffer/TestSynchronization.java @@ -0,0 +1,315 @@ +/* + * Copyright (c) 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 6206780 + * @summary Test that all public unsynchronized methods of StringBuffer are either directly or indirectly synchronized + */ +import java.lang.reflect.Constructor; +import java.lang.reflect.InvocationTargetException; +import java.lang.reflect.Method; +import java.lang.reflect.Modifier; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; + +/** + * TestSynchronization tests whether synchronized methods calls on an object + * result in synchronized calls. Note that this may not test all cases desired. + * It only tests whether some synchronization has occurred on the object during + * the call chain, and can't tell whether the object was locked across all + * operations that have been performed on the object. + */ +public class TestSynchronization { + + /** + * Define parameters used in methods of StringBuffer - admittedly a bit of + * hack but 'purpose-built' for StringBuffer. Something more general could + * probably be developed if the test needs to be more widely adopted. + *

+ * boolean char char[] int double float long Object CharSequence String + * StringBuffer StringBuilder + *

+ */ + private static final boolean BOOLEAN_VAL = true; + private static final char CHAR_VAL = 'x'; + private static final char[] CHAR_ARRAY_VAL = {'c', 'h', 'a', 'r', 'a', 'r', + 'r', 'a', 'y'}; + private static final int INT_VAL = 1; + private static final double DOUBLE_VAL = 1.0d; + private static final float FLOAT_VAL = 1.0f; + private static final long LONG_VAL = 1L; + private static final Object OBJECT_VAL = new Object(); + private static final String STRING_VAL = "String value"; + private static final StringBuilder STRING_BUILDER_VAL = + new StringBuilder("StringBuilder value"); + private static final StringBuffer STRING_BUFFER_VAL = + new StringBuffer("StringBuffer value"); + private static final CharSequence[] CHAR_SEQUENCE_VAL = {STRING_VAL, + STRING_BUILDER_VAL, STRING_BUFFER_VAL}; + + public static void main(String... args) throws Exception { + // First, test the tester + testClass(MyTestClass.class, /* + * self-test + */ true); + // Finally, test StringBuffer + testClass(StringBuffer.class, /* + * self-test + */ false); + } + + /** + * Test all the public, unsynchronized methods of the given class. If + * isSelfTest is true, this is a self-test to ensure that the test program + * itself is working correctly. Should help ensure correctness of this + * program if it changes. + *

+ * @param aClass - the class to test + * @param isSelfTest - true if this is the special self-test class + * @throws SecurityException + */ + private static void testClass(Class aClass, boolean isSelfTest) throws + Exception { + // Get all unsynchronized public methods via reflection. We don't need + // to test synchronized methods. By definition. they are already doing + // the right thing. + List methods = Arrays.asList(aClass.getDeclaredMethods()); + for (Method m : methods) { + int modifiers = m.getModifiers(); + if (Modifier.isPublic(modifiers) + && !Modifier.isSynchronized(modifiers)) { + try { + testMethod(aClass, m); + } catch (TestFailedException e) { + if (isSelfTest) { + String methodName = e.getMethod().getName(); + switch (methodName) { + case "should_pass": + throw new RuntimeException( + "Test failed: self-test failed. The 'should_pass' method did not pass the synchronization test. Check the test code."); + case "should_fail": + break; + default: + throw new RuntimeException( + "Test failed: something is amiss with the test. A TestFailedException was generated on a call to " + + methodName + " which we didn't expect to test in the first place."); + } + } else { + throw new RuntimeException("Test failed: the method " + + e.getMethod().toString() + + " should be synchronized, but isn't."); + } + } + } + } + } + + private static void invokeMethod(Class aClass, final Method m, + final Object[] args) throws TestFailedException, Exception { + //System.out.println( "Invoking " + m.toString() + " with parameters " + Arrays.toString(args)); + final Constructor objConstructor; + Object obj = null; + + objConstructor = aClass.getConstructor(String.class); + obj = objConstructor.newInstance("LeftPalindrome-emordnilaP-thgiR"); + + // test method m for synchronization + if (!isSynchronized(m, obj, args)) { + throw new TestFailedException(m); + } + } + + private static void testMethod(Class aClass, Method m) throws + Exception { + /* + * Construct call with arguments of the correct type. Note that the + * values are somewhat irrelevant. If the call actually succeeds, it + * means we aren't synchronized and the test has failed. + */ + Class[] pTypes = m.getParameterTypes(); + List charSequenceArgs = new ArrayList<>(); + Object[] args = new Object[pTypes.length]; + for (int i = 0; i < pTypes.length; i++) { + // determine the type and create the corresponding actual argument + Class pType = pTypes[i]; + if (pType.equals(boolean.class)) { + args[i] = BOOLEAN_VAL; + } else if (pType.equals(char.class)) { + args[i] = CHAR_VAL; + } else if (pType.equals(int.class)) { + args[i] = INT_VAL; + } else if (pType.equals(double.class)) { + args[i] = DOUBLE_VAL; + } else if (pType.equals(float.class)) { + args[i] = FLOAT_VAL; + } else if (pType.equals(long.class)) { + args[i] = LONG_VAL; + } else if (pType.equals(Object.class)) { + args[i] = OBJECT_VAL; + } else if (pType.equals(StringBuilder.class)) { + args[i] = STRING_BUILDER_VAL; + } else if (pType.equals(StringBuffer.class)) { + args[i] = STRING_BUFFER_VAL; + } else if (pType.equals(String.class)) { + args[i] = STRING_VAL; + } else if (pType.isArray() && pType.getComponentType().equals(char.class)) { + args[i] = CHAR_ARRAY_VAL; + } else if (pType.equals(CharSequence.class)) { + charSequenceArgs.add(new Integer(i)); + } else { + throw new RuntimeException("Test Failed: not accounting for method call with parameter type of " + pType.getName() + " You must update the test."); + } + } + /* + * If there are no CharSequence args, we can simply invoke our method + * and test it + */ + if (charSequenceArgs.isEmpty()) { + invokeMethod(aClass, m, args); + } else { + /* + * Iterate through the different CharSequence types and invoke the + * method for each type. + */ + if (charSequenceArgs.size() > 1) { + throw new RuntimeException("Test Failed: the test cannot handle a method with multiple CharSequence arguments. You must update the test to handle the method " + + m.toString()); + } + for (int j = 0; j < CHAR_SEQUENCE_VAL.length; j++) { + args[charSequenceArgs.get(0)] = CHAR_SEQUENCE_VAL[j]; + invokeMethod(aClass, m, args); + } + } + } + + @SuppressWarnings("serial") + private static class TestFailedException extends Exception { + + final Method m; + + public Method getMethod() { + return m; + } + + public TestFailedException(Method m) { + this.m = m; + } + } + + static class InvokeTask implements Runnable { + + private final Method m; + private final Object target; + private final Object[] args; + + InvokeTask(Method m, Object target, Object... args) { + this.m = m; + this.target = target; + this.args = args; + } + + @Override + public void run() { + try { + m.invoke(target, args); + } catch (IllegalAccessException | IllegalArgumentException | + InvocationTargetException e) { + e.printStackTrace(); + } + } + } + + /** + * isSynchronized tests whether the given method is synchronized or not by + * invoking it in a thread and testing the thread state after starting the + * thread + *

+ * @param m the method to test + * @param target the object the method is executed on + * @param args the arguments passed to the method + * @return true iff the method is synchronized + */ + private static boolean isSynchronized(Method m, Object target, + Object... args) { + Thread t = new Thread(new InvokeTask(m, target, args)); + + Boolean isSynchronized = null; + + synchronized (target) { + t.start(); + + while (isSynchronized == null) { + switch (t.getState()) { + case NEW: + case RUNNABLE: + case WAITING: + case TIMED_WAITING: + Thread.yield(); + break; + case BLOCKED: + isSynchronized = true; + break; + case TERMINATED: + isSynchronized = false; + break; + } + } + } + + try { + t.join(); + } catch (InterruptedException ex) { + ex.printStackTrace(); + } + + return isSynchronized; + } + + /* + * This class is used to test the synchronization tester above. It has a + * method, should_pass, that is unsynchronized but calls a synchronized + * method. It has another method, should_fail, which isn't synchronized and + * doesn't call a synchronized method. The former should pass and the latter + * should fail. + */ + private static class MyTestClass { + + @SuppressWarnings("unused") + public MyTestClass(String s) { + } + + @SuppressWarnings("unused") + public void should_pass() { + // call sync method + sync_shouldnt_be_tested(); + } + + @SuppressWarnings("unused") + public void should_fail() { + } + + public synchronized void sync_shouldnt_be_tested() { + } + } +} diff --git a/jdk/test/java/lang/StringBuilder/AppendStringBuffer.java b/jdk/test/java/lang/StringBuilder/AppendStringBuffer.java new file mode 100644 index 00000000000..a54cf0a0d29 --- /dev/null +++ b/jdk/test/java/lang/StringBuilder/AppendStringBuffer.java @@ -0,0 +1,71 @@ +/* + * Copyright (c) 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 6206780 + * @summary Test StringBuilder.append(StringBuffer); + */ + +import java.util.Random; + +public class AppendStringBuffer { + private static Random generator = new Random(); + + public static void main(String[] args) throws Exception { + for (int i=0; i<1000; i++) { + StringBuffer sb1 = generateTestBuffer(10, 100); + StringBuffer sb2 = generateTestBuffer(10, 100); + StringBuffer sb3 = generateTestBuffer(10, 100); + String s1 = sb1.toString(); + String s2 = sb2.toString(); + String s3 = sb3.toString(); + + String concatResult = new String(s1+s2+s3); + + StringBuilder test = new StringBuilder(); + test.append(sb1); + test.append(sb2); + test.append(sb3); + + if (!test.toString().equals(concatResult)) + throw new RuntimeException("StringBuffer.append failure"); + } + } + + private static int getRandomIndex(int constraint1, int constraint2) { + int range = constraint2 - constraint1; + int x = generator.nextInt(range); + return constraint1 + x; + } + + private static StringBuffer generateTestBuffer(int min, int max) { + StringBuffer aNewStringBuffer = new StringBuffer(120); + int aNewLength = getRandomIndex(min, max); + for(int y=0; y + */ + +import java.util.ArrayList; +import java.util.List; + +public class BuilderForwarding { + private final static String A_STRING_BUFFER_VAL = "aStringBuffer"; + private final static String A_STRING_BUILDER_VAL = "aStringBuilder"; + private final static String A_STRING_VAL = "aString"; + private final static String NON_EMPTY_VAL = "NonEmpty"; + + public BuilderForwarding() { + System.out.println( "Starting BuilderForwarding"); + } + + public static void main(String... args) { + new BuilderForwarding().executeTestMethods(); + } + + public void executeTestMethods() { + appendCharSequence(); + indexOfString(); + indexOfStringIntNull(); + indexOfStringNull(); + indexOfStringint(); + insertintCharSequence(); + insertintObject(); + insertintboolean(); + insertintchar(); + insertintdouble(); + insertintfloat(); + insertintint(); + insertintlong(); + lastIndexOfString(); + lastIndexOfStringint(); + } + + public void appendCharSequence() { + // three different flavors of CharSequence + CharSequence aString = A_STRING_VAL; + CharSequence aStringBuilder = new StringBuilder(A_STRING_BUILDER_VAL); + CharSequence aStringBuffer = new StringBuffer(A_STRING_BUFFER_VAL); + + assertEquals( /*actual*/ new StringBuilder().append(aString).toString(), /*expected*/ A_STRING_VAL ); + assertEquals( new StringBuilder().append(aStringBuilder).toString(), A_STRING_BUILDER_VAL ); + assertEquals( new StringBuilder().append(aStringBuffer).toString(), A_STRING_BUFFER_VAL ); + + assertEquals( /*actual*/ new StringBuilder(NON_EMPTY_VAL).append(aString).toString(), NON_EMPTY_VAL+A_STRING_VAL ); + assertEquals( new StringBuilder(NON_EMPTY_VAL).append(aStringBuilder).toString(), NON_EMPTY_VAL+A_STRING_BUILDER_VAL ); + assertEquals( new StringBuilder(NON_EMPTY_VAL).append(aStringBuffer).toString(), NON_EMPTY_VAL+A_STRING_BUFFER_VAL ); + } + + + public void indexOfString() { + StringBuilder sb = new StringBuilder(); + // should be NPE if null passed + try { + + sb.indexOf(null); + throw new RuntimeException("Test failed: should have thrown NPE"); + + + } catch (NullPointerException npe) { + // expected: passed + } catch (Throwable t) { + throw new RuntimeException("Test failed: should have thrown NPE. Instead threw " + + t); + } + sb = new StringBuilder("xyz"); + assertEquals( sb.indexOf("y"), 1 ); + assertEquals( sb.indexOf("not found"), -1 ); + } + + + public void indexOfStringint() { + StringBuilder sb = new StringBuilder(); + // should be NPE if null passed + try { + sb.indexOf(null,1); + throw new RuntimeException("Test failed: should have thrown NPE"); + } catch (NullPointerException npe) { + // expected: passed + } catch (Throwable t) { + throw new RuntimeException("Test failed: should have thrown NPE"); + } + sb = new StringBuilder("xyyz"); + assertEquals( sb.indexOf("y",0), 1 ); + assertEquals( sb.indexOf("y",1), 1 ); + assertEquals( sb.indexOf("y",2), 2 ); + assertEquals( sb.indexOf("not found"), -1 ); + } + + + public void indexOfStringIntNull() { + StringBuffer sb = new StringBuffer(); + // should be NPE if null passed + try { + sb.indexOf(null,1); + throw new RuntimeException("Test failed: should have thrown NPE"); + } catch (NullPointerException npe) { + // expected: passed + } catch (Throwable t) { + throw new RuntimeException("Test failed: should have thrown NPE. Instead threw " + + t); + } + } + + + public void indexOfStringNull() { + StringBuilder sb = new StringBuilder(); + + // should be NPE if null passed + try { + sb.indexOf(null); + throw new RuntimeException("Test failed: should have thrown NPE"); + } catch (NullPointerException npe) { + // expected: passed + } catch (Throwable t) { + throw new RuntimeException("Test failed: should have thrown NPE. Instead threw " + + t); + } + } + + + public void insertintboolean() { + boolean b = true; + StringBuilder sb = new StringBuilder("012345"); + assertEquals( sb.insert( 2, b).toString(), "01true2345"); + } + + + public void insertintchar() { + char c = 'C'; + StringBuilder sb = new StringBuilder("012345"); + assertEquals( sb.insert( 2, c ).toString(), "01C2345"); + } + + + public void insertintCharSequence() { + final String initString = "012345"; + // three different flavors of CharSequence + CharSequence aString = A_STRING_VAL; + CharSequence aStringBuilder = new StringBuilder(A_STRING_BUILDER_VAL); + CharSequence aStringBuffer = new StringBuffer(A_STRING_BUFFER_VAL); + + assertEquals( new StringBuilder(initString).insert(2, aString).toString(), "01"+A_STRING_VAL+"2345" ); + + assertEquals( new StringBuilder(initString).insert(2, aStringBuilder).toString(), "01"+A_STRING_BUILDER_VAL+"2345" ); + + assertEquals( new StringBuilder(initString).insert(2, aStringBuffer).toString(), "01"+A_STRING_BUFFER_VAL+"2345" ); + + try { + new StringBuilder(initString).insert(7, aString); + throw new RuntimeException("Test failed: should have thrown IndexOutOfBoundsException"); + } catch (IndexOutOfBoundsException soob) { + // expected: passed + } catch (Throwable t) { + throw new RuntimeException("Test failed: should have thrown IndexOutOfBoundsException, but instead threw " + t.getMessage()); + + } + } + + + public void insertintdouble() { + double d = 99d; + StringBuilder sb = new StringBuilder("012345"); + assertEquals( sb.insert( 2, d ).toString(), "0199.02345"); } + + + public void insertintfloat() { + float f = 99.0f; + StringBuilder sb = new StringBuilder("012345"); + assertEquals( sb.insert( 2, f ).toString(), "0199.02345"); } + + + public void insertintint() { + int i = 99; + StringBuilder sb = new StringBuilder("012345"); + assertEquals( sb.insert( 2, i ).toString(), "01992345"); + } + + + public void insertintlong() { + long l = 99; + StringBuilder sb = new StringBuilder("012345"); + assertEquals( sb.insert( 2, l ).toString(), "01992345"); } + + + public void insertintObject() { + StringBuilder sb = new StringBuilder("012345"); + List ls = new ArrayList(); + ls.add("A"); ls.add("B"); + String lsString = ls.toString(); + assertEquals( sb.insert(2, ls).toString(), "01"+lsString+"2345"); + + try { + sb.insert(sb.length()+1, ls); + throw new RuntimeException("Test failed: should have thrown StringIndexOutOfBoundsException"); + } catch (StringIndexOutOfBoundsException soob) { + // expected: passed + } catch (Throwable t) { + throw new RuntimeException("Test failed: should have thrown StringIndexOutOfBoundsException, but instead threw:" + + t); + } + } + + + public void lastIndexOfString() { + String xyz = "xyz"; + String xyz3 = "xyzxyzxyz"; + StringBuilder sb = new StringBuilder(xyz3); + int pos = sb.lastIndexOf("xyz"); + assertEquals( pos, 2*xyz.length() ); + } + + + public void lastIndexOfStringint() { + StringBuilder sb = new StringBuilder("xyzxyzxyz"); + int pos = sb.lastIndexOf("xyz",5); + assertEquals( pos, 3 ); + pos = sb.lastIndexOf("xyz", 6); + assertEquals( pos, 6 ); + } + + public void assertEquals( String actual, String expected) { + if (!actual.equals( expected )) { + throw new RuntimeException( "Test failed: actual = '" + actual + + "', expected = '" + expected + "'"); + } + } + + public void assertEquals( int actual, int expected) { + if (actual != expected) { + throw new RuntimeException( "Test failed: actual = '" + actual + + "', expected = '" + expected + "'"); + } + } +} + diff --git a/jdk/test/java/lang/StringCoding/CheckEncodings.sh b/jdk/test/java/lang/StringCoding/CheckEncodings.sh index 95c2419ffbd..6b5fc830d15 100644 --- a/jdk/test/java/lang/StringCoding/CheckEncodings.sh +++ b/jdk/test/java/lang/StringCoding/CheckEncodings.sh @@ -1,5 +1,5 @@ # -# Copyright (c) 2002, 2010, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2002, 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 diff --git a/jdk/test/java/lang/ThreadGroup/NullThreadName.java b/jdk/test/java/lang/ThreadGroup/NullThreadName.java index 4179b22446d..cbbb50a47f8 100644 --- a/jdk/test/java/lang/ThreadGroup/NullThreadName.java +++ b/jdk/test/java/lang/ThreadGroup/NullThreadName.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2008, Oracle and/or its affiliates. All rights reserved. + * 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 diff --git a/jdk/test/java/lang/ThreadGroup/Stop.java b/jdk/test/java/lang/ThreadGroup/Stop.java index 4763acc8036..156bc9d4bdd 100644 --- a/jdk/test/java/lang/ThreadGroup/Stop.java +++ b/jdk/test/java/lang/ThreadGroup/Stop.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1999, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1999, 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 diff --git a/jdk/test/java/lang/annotation/loaderLeak/LoaderLeak.sh b/jdk/test/java/lang/annotation/loaderLeak/LoaderLeak.sh index 7322b0867f7..c7315f5d146 100644 --- a/jdk/test/java/lang/annotation/loaderLeak/LoaderLeak.sh +++ b/jdk/test/java/lang/annotation/loaderLeak/LoaderLeak.sh @@ -1,6 +1,6 @@ #!/bin/sh -# Copyright (c) 2004, 2010, Oracle and/or its affiliates. All rights reserved. +# 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 diff --git a/jdk/test/java/lang/annotation/loaderLeak/Main.java b/jdk/test/java/lang/annotation/loaderLeak/Main.java index fceda8195ff..7e249ebc106 100644 --- a/jdk/test/java/lang/annotation/loaderLeak/Main.java +++ b/jdk/test/java/lang/annotation/loaderLeak/Main.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2004, Oracle and/or its affiliates. All rights reserved. + * 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 diff --git a/jdk/test/java/lang/instrument/appendToClassLoaderSearch/CommonSetup.sh b/jdk/test/java/lang/instrument/appendToClassLoaderSearch/CommonSetup.sh index 6a7218466af..f5f034be5a2 100644 --- a/jdk/test/java/lang/instrument/appendToClassLoaderSearch/CommonSetup.sh +++ b/jdk/test/java/lang/instrument/appendToClassLoaderSearch/CommonSetup.sh @@ -1,7 +1,7 @@ #!/bin/sh # -# Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2005, 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 diff --git a/jdk/test/java/lang/invoke/7196190/ClassForNameTest.java b/jdk/test/java/lang/invoke/7196190/ClassForNameTest.java new file mode 100644 index 00000000000..48ccb2a6463 --- /dev/null +++ b/jdk/test/java/lang/invoke/7196190/ClassForNameTest.java @@ -0,0 +1,98 @@ +/* + * Copyright (c) 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 7196190 + * @summary Improve method of handling MethodHandles + * + * @run main/othervm ClassForNameTest + */ + +import java.lang.invoke.*; +import java.lang.reflect.Method; +import java.util.Arrays; + +public class ClassForNameTest { + final static String NAME = ClassForNameTest.class.getName(); + + public static void main(String[] args) throws Throwable { + { + final MethodType mt = MethodType.methodType(Class.class, String.class); + final MethodHandle mh = MethodHandles.lookup() + .findStatic(Class.class, "forName", mt); + + Class.forName(NAME); + + mh.invoke(NAME); + mh.bindTo(NAME).invoke(); + mh.invokeWithArguments(Arrays.asList(NAME)); + mh.invokeWithArguments(NAME); + Class cls = (Class) mh.invokeExact(NAME); + } + + { + final Method fnMethod = Class.class.getMethod("forName", String.class); + final MethodType mt = MethodType.methodType(Object.class, Object.class, Object[].class); + final MethodHandle mh = MethodHandles.lookup() + .findVirtual(Method.class, "invoke", mt) + .bindTo(fnMethod); + + fnMethod.invoke(null, NAME); + + mh.bindTo(null).bindTo(new Object[]{NAME}).invoke(); + mh.invoke(null, new Object[]{NAME}); + mh.invokeWithArguments(null, new Object[]{NAME}); + mh.invokeWithArguments(Arrays.asList(null, new Object[]{NAME})); + Object obj = mh.invokeExact((Object) null, new Object[]{NAME}); + } + + { + final Method fnMethod = Class.class.getMethod("forName", String.class); + final MethodType mt = MethodType.methodType(Object.class, Object.class, Object[].class); + + final MethodHandle mh = MethodHandles.lookup() + .bind(fnMethod, "invoke", mt); + + mh.bindTo(null).bindTo(new Object[]{NAME}).invoke(); + mh.invoke(null, new Object[]{NAME}); + mh.invokeWithArguments(null, NAME); + mh.invokeWithArguments(Arrays.asList(null, NAME)); + Object obj = mh.invokeExact((Object) null, new Object[]{NAME}); + } + + { + final Method fnMethod = Class.class.getMethod("forName", String.class); + final MethodHandle mh = MethodHandles.lookup().unreflect(fnMethod); + + mh.bindTo(NAME).invoke(); + mh.invoke(NAME); + mh.invokeWithArguments(NAME); + mh.invokeWithArguments(Arrays.asList(NAME)); + Class cls = (Class) mh.invokeExact(NAME); + } + + System.out.println("TEST PASSED"); + } +} diff --git a/jdk/test/java/lang/invoke/7196190/GetUnsafeTest.java b/jdk/test/java/lang/invoke/7196190/GetUnsafeTest.java new file mode 100644 index 00000000000..0fd3cbd8d0f --- /dev/null +++ b/jdk/test/java/lang/invoke/7196190/GetUnsafeTest.java @@ -0,0 +1,112 @@ +/* + * Copyright (c) 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 7196190 + * @summary Improve method of handling MethodHandles + * + * @run main/othervm/policy=jtreg.security.policy/secure=java.lang.SecurityManager GetUnsafeTest + */ + +import java.lang.invoke.*; +import java.lang.reflect.Method; +import java.util.Arrays; + +public class GetUnsafeTest { + final static String NAME = "sun.misc.Unsafe"; + + private static boolean isTestFailed = false; + + private static void fail() { + isTestFailed = true; + try { throw new Exception(); } catch (Throwable e) { + StackTraceElement frame = e.getStackTrace()[1]; + System.out.printf("Failed at %s:%d\n", frame.getFileName(), frame.getLineNumber()); + } + } + + public static void main(String[] args) throws Throwable { + { + final MethodType mt = MethodType.methodType(Class.class, String.class); + final MethodHandle mh = MethodHandles.lookup() + .findStatic(Class.class, "forName", mt); + + try { Class.forName(NAME); fail(); } catch (Throwable e) {} + + try { mh.invoke(NAME); fail(); } catch (Throwable e) {} + try { mh.bindTo(NAME).invoke(); fail(); } catch (Throwable e) {} + try { mh.invokeWithArguments(Arrays.asList(NAME)); fail(); } catch (Throwable e) {} + try { mh.invokeWithArguments(NAME); fail(); } catch (Throwable e) {} + try { Class cls = (Class) mh.invokeExact(NAME); fail(); } catch (Throwable e) {} + } + + { + final Method fnMethod = Class.class.getMethod("forName", String.class); + final MethodType mt = MethodType.methodType(Object.class, Object.class, Object[].class); + final MethodHandle mh = MethodHandles.lookup() + .findVirtual(Method.class, "invoke", mt) + .bindTo(fnMethod); + + try { fnMethod.invoke(null, NAME); fail(); } catch (Throwable e) {} + + try { mh.bindTo(null).bindTo(new Object[]{NAME}).invoke(); fail(); } catch (Throwable e) {} + try { mh.invoke(null, new Object[]{NAME}); fail(); } catch (Throwable e) {} + try { mh.invokeWithArguments(null, new Object[]{NAME}); fail(); } catch (Throwable e) {} + try { mh.invokeWithArguments(Arrays.asList(null, new Object[]{NAME})); fail(); } catch (Throwable e) {} + try { Object obj = mh.invokeExact((Object) null, new Object[]{NAME}); fail(); } catch (Throwable e) {} + } + + { + final Method fnMethod = Class.class.getMethod("forName", String.class); + final MethodType mt = MethodType.methodType(Object.class, Object.class, Object[].class); + + final MethodHandle mh = MethodHandles.lookup().bind(fnMethod, "invoke", mt); + + try { mh.bindTo(null).bindTo(new Object[]{NAME}).invoke(); fail(); } catch (Throwable e) {} + try { mh.invoke(null, new Object[]{NAME}); fail(); } catch (Throwable e) {} + try { mh.invokeWithArguments(null, NAME); fail(); } catch (Throwable e) {} + try { mh.invokeWithArguments(Arrays.asList(null, NAME)); fail(); } catch (Throwable e) {} + try { Object obj = mh.invokeExact((Object) null, new Object[]{NAME}); fail(); } catch (Throwable e) {} + } + + { + final Method fnMethod = Class.class.getMethod("forName", String.class); + final MethodHandle mh = MethodHandles.lookup().unreflect(fnMethod); + + try { mh.bindTo(NAME).invoke(); fail(); } catch (Throwable e) {} + try { mh.invoke(NAME); fail(); } catch (Throwable e) {} + try { mh.invokeWithArguments(NAME); fail(); } catch (Throwable e) {} + try { mh.invokeWithArguments(Arrays.asList(NAME)); fail(); } catch (Throwable e) {} + try { Class cls = (Class) mh.invokeExact(NAME); fail(); } catch (Throwable e) {} + } + + if (!isTestFailed) { + System.out.println("TEST PASSED"); + } else { + System.out.println("TEST FAILED"); + System.exit(1); + } + } +} diff --git a/jdk/test/java/lang/invoke/7196190/MHProxyTest.java b/jdk/test/java/lang/invoke/7196190/MHProxyTest.java new file mode 100644 index 00000000000..5e07f393cb1 --- /dev/null +++ b/jdk/test/java/lang/invoke/7196190/MHProxyTest.java @@ -0,0 +1,181 @@ +/* + * Copyright (c) 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 7196190 + * @summary Improve method of handling MethodHandles + * + * @run main/othervm MHProxyTest + */ + +import java.lang.invoke.*; +import java.security.*; +import static java.lang.invoke.MethodHandles.*; +import static java.lang.invoke.MethodType.*; + +public class MHProxyTest { + private static final Class C_Unsafe; + private static final MethodHandle MH_getUnsafe; + static { + // Do these before there is a SM installed. + C_Unsafe = sun.misc.Unsafe.class; // EXPECT A WARNING ON THIS LINE + Lookup lookup = lookup(); + MethodHandle gumh = null; + try { + gumh = lookup.findStatic(C_Unsafe, "getUnsafe", methodType(C_Unsafe)); + } catch (ReflectiveOperationException ex) { + throw new InternalError(ex.toString()); + } + MH_getUnsafe = gumh; + // Try some different lookups: + try { + lookup.in(Object.class).findStatic(C_Unsafe, "getUnsafe", methodType(C_Unsafe)); + } catch (ReflectiveOperationException ex) { + throw new InternalError(ex.toString()); + } + lookup = lookup().in(C_Unsafe); + try { + lookup.in(C_Unsafe).findStatic(C_Unsafe, "getUnsafe", methodType(C_Unsafe)); + } catch (ReflectiveOperationException ex) { + throw new InternalError(ex.toString()); + } + } + + public static void main(String[] args) throws Throwable { + System.setSecurityManager(new SecurityManager()); + Lookup lookup = lookup(); + testBasic(lookup); + testDoPriv(lookup); + testSetVar(); + Lookup l2 = lookup.in(Object.class); + System.out.println("=== "+l2); + testBasic(l2); + testDoPriv(l2); + Lookup l3 = lookup.in(C_Unsafe); + System.out.println("=== "+l3); + testBasic(l3); + testDoPriv(l3); + if (failure != null) + throw failure; + } + + private static Throwable failure; + private static void fail(Throwable ex) { + if (failure == null) + failure = ex; + StackTraceElement frame = new Exception().getStackTrace()[1]; + System.out.printf("Failed at %s:%d: %s\n", frame.getFileName(), frame.getLineNumber(), ex); + } + private static void ok(Throwable ex) { + StackTraceElement frame = new Exception().getStackTrace()[1]; + System.out.printf("OK at %s:%d: %s\n", frame.getFileName(), frame.getLineNumber(), ex); + } + + private static void testBasic(Lookup lookup) throws Throwable { + // Verify that we can't get to this guy under the SM: + try { + MethodHandle badmh = lookup.findStatic(C_Unsafe, "getUnsafe", methodType(C_Unsafe)); + assert(badmh.type() == methodType(C_Unsafe)); + badmh = badmh.asType(badmh.type().generic()); + Object u = C_Unsafe.cast(badmh.invokeExact()); + assert(C_Unsafe.isInstance(u)); + fail(new AssertionError("got mh to getUnsafe!")); + } catch (SecurityException ex) { + ok(ex); + } + try { + Object u = MH_getUnsafe.invokeWithArguments(); + assert(C_Unsafe.isInstance(u)); + fail(new AssertionError("got the Unsafe object! (MH invoke)")); + } catch (SecurityException ex) { + ok(ex); + } + try { + MethodHandle mh = MH_getUnsafe; + mh = mh.asType(mh.type().generic()); + mh = foldArguments(identity(Object.class), mh); + mh = filterReturnValue(mh, identity(Object.class)); + Object u = mh.invokeExact(); + assert(C_Unsafe.isInstance(u)); + fail(new AssertionError("got the Unsafe object! (MH invokeWithArguments)")); + } catch (SecurityException ex) { + ok(ex); + } + } + + private static void testDoPriv(Lookup lookup) throws Throwable { + PrivilegedAction privAct = MethodHandleProxies.asInterfaceInstance(PrivilegedAction.class, MH_getUnsafe); + try { + Object u = AccessController.doPrivileged(privAct); + assert(C_Unsafe.isInstance(u)); + fail(new AssertionError("got the Unsafe object! (static doPriv)")); + } catch (SecurityException ex) { + ok(ex); + } + MethodHandle MH_doPriv = lookup.findStatic(AccessController.class, "doPrivileged", + methodType(Object.class, PrivilegedAction.class)); + MH_doPriv = MH_doPriv.bindTo(privAct); + try { + Object u = MH_doPriv.invoke(); + assert(C_Unsafe.isInstance(u)); + fail(new AssertionError("got the Unsafe object! (MH + doPriv)")); + } catch (SecurityException ex) { + ok(ex); + } + // try one more layer of indirection: + Runnable rbl = MethodHandleProxies.asInterfaceInstance(Runnable.class, MH_doPriv); + try { + rbl.run(); + fail(new AssertionError("got the Unsafe object! (Runnable + MH + doPriv)")); + } catch (SecurityException ex) { + ok(ex); + } + } + + private static void testSetVar() throws Throwable { + { + // Test the box pattern: + Object[] box = new Object[1]; + MethodHandle MH_getFoo = identity(Object.class).bindTo("foo"); + MethodHandle MH_storeToBox = insertArguments(arrayElementSetter(Object[].class), 0, box, 0); + MethodHandle mh = filterReturnValue(MH_getFoo, MH_storeToBox); + mh.invokeExact(); + assert(box[0] == "foo"); + } + { + Object[] box = new Object[1]; + MethodHandle MH_storeToBox = insertArguments(arrayElementSetter(Object[].class), 0, box, 0); + MethodHandle mh = filterReturnValue(MH_getUnsafe.asType(MH_getUnsafe.type().generic()), MH_storeToBox); + try { + mh.invokeExact(); + Object u = box[0]; + assert(C_Unsafe.isInstance(u)); + fail(new AssertionError("got the Unsafe object! (MH + setElement)")); + } catch (SecurityException ex) { + ok(ex); + } + } + } +} diff --git a/jdk/test/java/lang/invoke/7196190/jtreg.security.policy b/jdk/test/java/lang/invoke/7196190/jtreg.security.policy new file mode 100644 index 00000000000..d32c7af9b3f --- /dev/null +++ b/jdk/test/java/lang/invoke/7196190/jtreg.security.policy @@ -0,0 +1,9 @@ +/* + * security policy used by the test process + * must allow file reads so that jtreg itself can run + */ + +grant { + // standard test activation permissions + permission java.io.FilePermission "*", "read"; +}; diff --git a/jdk/test/java/lang/invoke/CallSiteTest.java b/jdk/test/java/lang/invoke/CallSiteTest.java index 5e0a875e561..3e9d7d7b89a 100644 --- a/jdk/test/java/lang/invoke/CallSiteTest.java +++ b/jdk/test/java/lang/invoke/CallSiteTest.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2011, 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 diff --git a/jdk/test/java/lang/invoke/ClassValueTest.java b/jdk/test/java/lang/invoke/ClassValueTest.java index 56b577159d5..8e6ab29d0f9 100644 --- a/jdk/test/java/lang/invoke/ClassValueTest.java +++ b/jdk/test/java/lang/invoke/ClassValueTest.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2011, 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 diff --git a/jdk/test/java/lang/invoke/JavaDocExamplesTest.java b/jdk/test/java/lang/invoke/JavaDocExamplesTest.java index 9fd24296dfe..76f0e01318a 100644 --- a/jdk/test/java/lang/invoke/JavaDocExamplesTest.java +++ b/jdk/test/java/lang/invoke/JavaDocExamplesTest.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2009, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2009, 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 diff --git a/jdk/test/java/lang/invoke/MethodHandlesTest.java b/jdk/test/java/lang/invoke/MethodHandlesTest.java index aaa41a8f0db..770cdc6ca32 100644 --- a/jdk/test/java/lang/invoke/MethodHandlesTest.java +++ b/jdk/test/java/lang/invoke/MethodHandlesTest.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2009, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2009, 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 diff --git a/jdk/test/java/lang/invoke/MethodTypeTest.java b/jdk/test/java/lang/invoke/MethodTypeTest.java index d8d460fd191..e680b1b81f2 100644 --- a/jdk/test/java/lang/invoke/MethodTypeTest.java +++ b/jdk/test/java/lang/invoke/MethodTypeTest.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2008, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2008, 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 diff --git a/jdk/test/java/lang/invoke/PrivateInvokeTest.java b/jdk/test/java/lang/invoke/PrivateInvokeTest.java index 434b8e82ca2..cc4fec37dbb 100644 --- a/jdk/test/java/lang/invoke/PrivateInvokeTest.java +++ b/jdk/test/java/lang/invoke/PrivateInvokeTest.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2009, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2009, 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 diff --git a/jdk/test/java/lang/invoke/RicochetTest.java b/jdk/test/java/lang/invoke/RicochetTest.java index 342cffbbe5f..6451fb48cd8 100644 --- a/jdk/test/java/lang/invoke/RicochetTest.java +++ b/jdk/test/java/lang/invoke/RicochetTest.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2011, 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 diff --git a/jdk/test/java/lang/invoke/ThrowExceptionsTest.java b/jdk/test/java/lang/invoke/ThrowExceptionsTest.java index b22d370748c..7ac5475865d 100644 --- a/jdk/test/java/lang/invoke/ThrowExceptionsTest.java +++ b/jdk/test/java/lang/invoke/ThrowExceptionsTest.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2011, 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 diff --git a/jdk/test/java/lang/management/BufferPoolMXBean/Basic.java b/jdk/test/java/lang/management/BufferPoolMXBean/Basic.java index a55f50ef0ef..6bdd96a2fa8 100644 --- a/jdk/test/java/lang/management/BufferPoolMXBean/Basic.java +++ b/jdk/test/java/lang/management/BufferPoolMXBean/Basic.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2007, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2007, 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 diff --git a/jdk/test/java/lang/management/ManagementFactory/GetPlatformMXBeans.java b/jdk/test/java/lang/management/ManagementFactory/GetPlatformMXBeans.java index 5e88b469e50..c0fb62c95c0 100644 --- a/jdk/test/java/lang/management/ManagementFactory/GetPlatformMXBeans.java +++ b/jdk/test/java/lang/management/ManagementFactory/GetPlatformMXBeans.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2008, Oracle and/or its affiliates. All rights reserved. + * 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 diff --git a/jdk/test/java/lang/management/ManagementFactory/MBeanServerMXBeanUnsupportedTest.java b/jdk/test/java/lang/management/ManagementFactory/MBeanServerMXBeanUnsupportedTest.java index 6178d47c145..b7d9b111f6b 100644 --- a/jdk/test/java/lang/management/ManagementFactory/MBeanServerMXBeanUnsupportedTest.java +++ b/jdk/test/java/lang/management/ManagementFactory/MBeanServerMXBeanUnsupportedTest.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2006, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2006, 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 diff --git a/jdk/test/java/lang/management/ManagementFactory/ThreadMXBeanProxy.java b/jdk/test/java/lang/management/ManagementFactory/ThreadMXBeanProxy.java index bd00434dbba..8146e6c1d43 100644 --- a/jdk/test/java/lang/management/ManagementFactory/ThreadMXBeanProxy.java +++ b/jdk/test/java/lang/management/ManagementFactory/ThreadMXBeanProxy.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2005, 2008, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2005, 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 diff --git a/jdk/test/java/lang/management/MemoryMXBean/CollectionUsageThreshold.java b/jdk/test/java/lang/management/MemoryMXBean/CollectionUsageThreshold.java index b8bcd7e140c..62dc211d913 100644 --- a/jdk/test/java/lang/management/MemoryMXBean/CollectionUsageThreshold.java +++ b/jdk/test/java/lang/management/MemoryMXBean/CollectionUsageThreshold.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 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 diff --git a/jdk/test/java/lang/management/MemoryMXBean/MemoryTest.java b/jdk/test/java/lang/management/MemoryMXBean/MemoryTest.java index ae84e832ad3..65d2da8d957 100644 --- a/jdk/test/java/lang/management/MemoryMXBean/MemoryTest.java +++ b/jdk/test/java/lang/management/MemoryMXBean/MemoryTest.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, 2004, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 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 diff --git a/jdk/test/java/lang/management/OperatingSystemMXBean/TestSystemLoadAvg.sh b/jdk/test/java/lang/management/OperatingSystemMXBean/TestSystemLoadAvg.sh index 7c1a5ae036f..1f8d823dcdb 100644 --- a/jdk/test/java/lang/management/OperatingSystemMXBean/TestSystemLoadAvg.sh +++ b/jdk/test/java/lang/management/OperatingSystemMXBean/TestSystemLoadAvg.sh @@ -1,5 +1,5 @@ # -# Copyright (c) 2005, 2006, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2005, 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 diff --git a/jdk/test/java/lang/management/PlatformLoggingMXBean/PlatformLoggingMXBeanTest.java b/jdk/test/java/lang/management/PlatformLoggingMXBean/PlatformLoggingMXBeanTest.java index 9d13b954c14..eea0a6fdab1 100644 --- a/jdk/test/java/lang/management/PlatformLoggingMXBean/PlatformLoggingMXBeanTest.java +++ b/jdk/test/java/lang/management/PlatformLoggingMXBean/PlatformLoggingMXBeanTest.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, 2004, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 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 diff --git a/jdk/test/java/lang/ref/Basic.java b/jdk/test/java/lang/ref/Basic.java index 4a885d8d991..deb9ec34826 100644 --- a/jdk/test/java/lang/ref/Basic.java +++ b/jdk/test/java/lang/ref/Basic.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 1998, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 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 @@ -105,6 +105,7 @@ public class Basic { System.err.println("GC " + i); Thread.sleep(10); System.gc(); + System.runFinalization(); showReferences(); while ((r = q2.poll()) != null) { diff --git a/jdk/test/java/net/Authenticator/B4678055.java b/jdk/test/java/net/Authenticator/B4678055.java index 3618c2a9d66..dc5befb6d22 100644 --- a/jdk/test/java/net/Authenticator/B4678055.java +++ b/jdk/test/java/net/Authenticator/B4678055.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2002, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2002, 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 diff --git a/jdk/test/java/net/Authenticator/B4722333.java b/jdk/test/java/net/Authenticator/B4722333.java index 5dad9c058b5..441e1107887 100644 --- a/jdk/test/java/net/Authenticator/B4722333.java +++ b/jdk/test/java/net/Authenticator/B4722333.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2002, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2002, 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 diff --git a/jdk/test/java/net/Authenticator/B4759514.java b/jdk/test/java/net/Authenticator/B4759514.java index 586ae0f5520..d81dd62e3ff 100644 --- a/jdk/test/java/net/Authenticator/B4759514.java +++ b/jdk/test/java/net/Authenticator/B4759514.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2002, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2002, 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 diff --git a/jdk/test/java/net/Authenticator/B4769350.java b/jdk/test/java/net/Authenticator/B4769350.java index fc00cabce79..23987c7fe65 100644 --- a/jdk/test/java/net/Authenticator/B4769350.java +++ b/jdk/test/java/net/Authenticator/B4769350.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2002, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2002, 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 diff --git a/jdk/test/java/net/Authenticator/B4921848.java b/jdk/test/java/net/Authenticator/B4921848.java index cc7a0b89d62..98a6e594802 100644 --- a/jdk/test/java/net/Authenticator/B4921848.java +++ b/jdk/test/java/net/Authenticator/B4921848.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 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 diff --git a/jdk/test/java/net/Authenticator/B4933582.java b/jdk/test/java/net/Authenticator/B4933582.java index 090b49d7f20..ac8706241fc 100644 --- a/jdk/test/java/net/Authenticator/B4933582.java +++ b/jdk/test/java/net/Authenticator/B4933582.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 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 diff --git a/jdk/test/java/net/Authenticator/B4933582.sh b/jdk/test/java/net/Authenticator/B4933582.sh index 90af3b5b118..66188364c09 100644 --- a/jdk/test/java/net/Authenticator/B4933582.sh +++ b/jdk/test/java/net/Authenticator/B4933582.sh @@ -1,5 +1,5 @@ # -# Copyright (c) 2003, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2003, 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 diff --git a/jdk/test/java/net/Authenticator/B4962064.java b/jdk/test/java/net/Authenticator/B4962064.java index 9f99e03ab37..b7eae976275 100644 --- a/jdk/test/java/net/Authenticator/B4962064.java +++ b/jdk/test/java/net/Authenticator/B4962064.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2004, Oracle and/or its affiliates. All rights reserved. + * 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 diff --git a/jdk/test/java/net/CookieHandler/CookieManagerTest.java b/jdk/test/java/net/CookieHandler/CookieManagerTest.java index 7d61a458c3d..ac51b42b0b5 100644 --- a/jdk/test/java/net/CookieHandler/CookieManagerTest.java +++ b/jdk/test/java/net/CookieHandler/CookieManagerTest.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2005, 2008, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2005, 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 diff --git a/jdk/test/java/net/CookieHandler/NullUriCookieTest.java b/jdk/test/java/net/CookieHandler/NullUriCookieTest.java index 22ae6c2cb9d..d585e5f0b7c 100644 --- a/jdk/test/java/net/CookieHandler/NullUriCookieTest.java +++ b/jdk/test/java/net/CookieHandler/NullUriCookieTest.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2011, 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 diff --git a/jdk/test/java/net/CookieHandler/TestHttpCookie.java b/jdk/test/java/net/CookieHandler/TestHttpCookie.java index 98bf852836f..1975fef4959 100644 --- a/jdk/test/java/net/CookieHandler/TestHttpCookie.java +++ b/jdk/test/java/net/CookieHandler/TestHttpCookie.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2005, 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 diff --git a/jdk/test/java/net/DatagramPacket/ReuseBuf.java b/jdk/test/java/net/DatagramPacket/ReuseBuf.java index 001ad2fde90..019927a382f 100644 --- a/jdk/test/java/net/DatagramPacket/ReuseBuf.java +++ b/jdk/test/java/net/DatagramPacket/ReuseBuf.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2001, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2001, 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 diff --git a/jdk/test/java/net/DatagramSocket/Send12k.java b/jdk/test/java/net/DatagramSocket/Send12k.java index c9d7bc66ff8..6446330d35e 100644 --- a/jdk/test/java/net/DatagramSocket/Send12k.java +++ b/jdk/test/java/net/DatagramSocket/Send12k.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2001, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2001, 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 diff --git a/jdk/test/java/net/DatagramSocket/SendDatagramToBadAddress.java b/jdk/test/java/net/DatagramSocket/SendDatagramToBadAddress.java index cfe06b96c97..b0cb10a6e92 100644 --- a/jdk/test/java/net/DatagramSocket/SendDatagramToBadAddress.java +++ b/jdk/test/java/net/DatagramSocket/SendDatagramToBadAddress.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2000, 2001, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2000, 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 diff --git a/jdk/test/java/net/DatagramSocket/SetDatagramSocketImplFactory/ADatagramSocket.sh b/jdk/test/java/net/DatagramSocket/SetDatagramSocketImplFactory/ADatagramSocket.sh index 092e12d1d27..372c04d9059 100644 --- a/jdk/test/java/net/DatagramSocket/SetDatagramSocketImplFactory/ADatagramSocket.sh +++ b/jdk/test/java/net/DatagramSocket/SetDatagramSocketImplFactory/ADatagramSocket.sh @@ -1,7 +1,7 @@ #! /bin/sh # -# Copyright (c) 1999, 2008, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 1999, 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 diff --git a/jdk/test/java/net/InetAddress/GetLocalHostWithSM.java b/jdk/test/java/net/InetAddress/GetLocalHostWithSM.java index 1afe502f437..c8d06acb613 100644 --- a/jdk/test/java/net/InetAddress/GetLocalHostWithSM.java +++ b/jdk/test/java/net/InetAddress/GetLocalHostWithSM.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2002, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2002, 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 diff --git a/jdk/test/java/net/NetworkInterface/NetParamsTest.java b/jdk/test/java/net/NetworkInterface/NetParamsTest.java index dd6d172e1b3..abb61402353 100644 --- a/jdk/test/java/net/NetworkInterface/NetParamsTest.java +++ b/jdk/test/java/net/NetworkInterface/NetParamsTest.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2005, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2005, 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 diff --git a/jdk/test/java/net/ProxySelector/LoopbackAddresses.java b/jdk/test/java/net/ProxySelector/LoopbackAddresses.java index 54c74ab1abe..a8c0078f672 100644 --- a/jdk/test/java/net/ProxySelector/LoopbackAddresses.java +++ b/jdk/test/java/net/ProxySelector/LoopbackAddresses.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 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 diff --git a/jdk/test/java/net/ProxySelector/ProxyTest.java b/jdk/test/java/net/ProxySelector/ProxyTest.java index 44a16fb0286..9a7b3e9bbcb 100644 --- a/jdk/test/java/net/ProxySelector/ProxyTest.java +++ b/jdk/test/java/net/ProxySelector/ProxyTest.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 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 diff --git a/jdk/test/java/net/Socket/OldSocketImpl.sh b/jdk/test/java/net/Socket/OldSocketImpl.sh index 09e40926593..5f429d1e4ee 100644 --- a/jdk/test/java/net/Socket/OldSocketImpl.sh +++ b/jdk/test/java/net/Socket/OldSocketImpl.sh @@ -1,5 +1,5 @@ # -# Copyright (c) 2006, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2006, 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 diff --git a/jdk/test/java/net/Socket/SocketGrowth.java b/jdk/test/java/net/Socket/SocketGrowth.java new file mode 100644 index 00000000000..0290f81dec0 --- /dev/null +++ b/jdk/test/java/net/Socket/SocketGrowth.java @@ -0,0 +1,52 @@ +/* + * Copyright (c) 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 7181793 + * @summary getOutputStream create streams that cannot be GC'ed until Socket is closed + * @run main/othervm -Xmx32m SocketGrowth + */ + +import java.io.IOException; +import java.net.ServerSocket; +import java.net.Socket; + +public class SocketGrowth { + + public static void main(String[] args) throws IOException { + + try (ServerSocket ss = new ServerSocket(0)) { + try (Socket s = new Socket("localhost", ss.getLocalPort()); + Socket peer = ss.accept()) { + for (int i=0; i<1000000; i++) { + // buggy JDK will run out of memory in this loop + s.getOutputStream(); + // test InputStream also while we're here + s.getInputStream(); + if (i % 100000 == 0) System.out.println(i); + } + } + } + } +} diff --git a/jdk/test/java/net/Socket/setReuseAddress/Basic.java b/jdk/test/java/net/Socket/setReuseAddress/Basic.java index 1b5757589f9..b0014d001fc 100644 --- a/jdk/test/java/net/Socket/setReuseAddress/Basic.java +++ b/jdk/test/java/net/Socket/setReuseAddress/Basic.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2001, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2001, 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 diff --git a/jdk/test/java/net/Socket/setReuseAddress/Restart.java b/jdk/test/java/net/Socket/setReuseAddress/Restart.java index 8287141af4c..7f335bdb989 100644 --- a/jdk/test/java/net/Socket/setReuseAddress/Restart.java +++ b/jdk/test/java/net/Socket/setReuseAddress/Restart.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2001, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2001, 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 diff --git a/jdk/test/java/net/Socks/SocksServer.java b/jdk/test/java/net/Socks/SocksServer.java index f6720afd56d..6e27e342e94 100644 --- a/jdk/test/java/net/Socks/SocksServer.java +++ b/jdk/test/java/net/Socks/SocksServer.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2002, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2002, 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 diff --git a/jdk/test/java/net/Socks/SocksV4Test.java b/jdk/test/java/net/Socks/SocksV4Test.java index d9786a21789..01546c17126 100644 --- a/jdk/test/java/net/Socks/SocksV4Test.java +++ b/jdk/test/java/net/Socks/SocksV4Test.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2002, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2002, 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 diff --git a/jdk/test/java/net/URL/B5086147.sh b/jdk/test/java/net/URL/B5086147.sh index 75d8946f383..e92a8ee2892 100644 --- a/jdk/test/java/net/URL/B5086147.sh +++ b/jdk/test/java/net/URL/B5086147.sh @@ -1,7 +1,7 @@ #! /bin/sh # -# Copyright (c) 2005, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2005, 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 diff --git a/jdk/test/java/net/URL/OpenStream.java b/jdk/test/java/net/URL/OpenStream.java index 2b5b450cf66..1f293b9e61a 100644 --- a/jdk/test/java/net/URL/OpenStream.java +++ b/jdk/test/java/net/URL/OpenStream.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2001, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 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 diff --git a/jdk/test/java/net/URL/PerConnectionProxy.java b/jdk/test/java/net/URL/PerConnectionProxy.java index 72e431d8d3f..71b39d406a2 100644 --- a/jdk/test/java/net/URL/PerConnectionProxy.java +++ b/jdk/test/java/net/URL/PerConnectionProxy.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 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 diff --git a/jdk/test/java/net/URL/Test.java b/jdk/test/java/net/URL/Test.java index 58c88182723..4ea4bd7c634 100644 --- a/jdk/test/java/net/URL/Test.java +++ b/jdk/test/java/net/URL/Test.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2001, 2003, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2001, 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 @@ -322,10 +322,6 @@ public class Test { test("ftp://ftp.is.co.za/rfc/rfc1808.txt") .s("ftp").h("ftp.is.co.za").p("/rfc/rfc1808.txt").z(); - test("gopher://spinaltap.micro.umn.edu/00/Weather/California/Los%20Angeles") - .s("gopher").h("spinaltap.micro.umn.edu") - .p("/00/Weather/California/Los%20Angeles").z(); - test("http://www.math.uio.no/faq/compression-faq/part1.html") .s("http").h("www.math.uio.no").p("/faq/compression-faq/part1.html").z(); diff --git a/jdk/test/java/net/URL/runconstructor.sh b/jdk/test/java/net/URL/runconstructor.sh index 04e397a0795..340f1e91f56 100644 --- a/jdk/test/java/net/URL/runconstructor.sh +++ b/jdk/test/java/net/URL/runconstructor.sh @@ -1,5 +1,5 @@ # -# Copyright (c) 2000, 2003, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2000, 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 diff --git a/jdk/test/java/net/URLClassLoader/B5077773.sh b/jdk/test/java/net/URLClassLoader/B5077773.sh index 9724ac95582..b489769ebba 100644 --- a/jdk/test/java/net/URLClassLoader/B5077773.sh +++ b/jdk/test/java/net/URLClassLoader/B5077773.sh @@ -1,7 +1,7 @@ #! /bin/sh # -# Copyright (c) 2004, Oracle and/or its affiliates. All rights reserved. +# 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 diff --git a/jdk/test/java/net/URLClassLoader/closetest/CloseTest.java b/jdk/test/java/net/URLClassLoader/closetest/CloseTest.java index 740c1f92c51..598b1e6b5d9 100644 --- a/jdk/test/java/net/URLClassLoader/closetest/CloseTest.java +++ b/jdk/test/java/net/URLClassLoader/closetest/CloseTest.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2009, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2009, 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 diff --git a/jdk/test/java/net/URLClassLoader/sealing/checksealed.sh b/jdk/test/java/net/URLClassLoader/sealing/checksealed.sh index 80f0adc4f94..c2a048aff59 100644 --- a/jdk/test/java/net/URLClassLoader/sealing/checksealed.sh +++ b/jdk/test/java/net/URLClassLoader/sealing/checksealed.sh @@ -1,7 +1,7 @@ #! /bin/sh # -# Copyright (c) 1999, 2002, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 1999, 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 diff --git a/jdk/test/java/net/URLConnection/6212146/test.sh b/jdk/test/java/net/URLConnection/6212146/test.sh index bc24a5e70b6..56a628a427e 100644 --- a/jdk/test/java/net/URLConnection/6212146/test.sh +++ b/jdk/test/java/net/URLConnection/6212146/test.sh @@ -1,7 +1,7 @@ #!/bin/sh # -# Copyright (c) 2006, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2006, 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 diff --git a/jdk/test/java/net/URLConnection/B5052093.java b/jdk/test/java/net/URLConnection/B5052093.java index 48552eaef83..be1f23ff312 100644 --- a/jdk/test/java/net/URLConnection/B5052093.java +++ b/jdk/test/java/net/URLConnection/B5052093.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2007, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2007, 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 diff --git a/jdk/test/java/net/URLConnection/Redirect307Test.java b/jdk/test/java/net/URLConnection/Redirect307Test.java index d9e980fff47..a1194b59f3e 100644 --- a/jdk/test/java/net/URLConnection/Redirect307Test.java +++ b/jdk/test/java/net/URLConnection/Redirect307Test.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2001, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2001, 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 diff --git a/jdk/test/java/nio/Buffer/Basic-X.java.template b/jdk/test/java/nio/Buffer/Basic-X.java.template index 1548a9f8277..cae8c26514e 100644 --- a/jdk/test/java/nio/Buffer/Basic-X.java.template +++ b/jdk/test/java/nio/Buffer/Basic-X.java.template @@ -1,5 +1,5 @@ /* - * Copyright (c) 2000, 2008, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2000, 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 diff --git a/jdk/test/java/nio/Buffer/Basic.java b/jdk/test/java/nio/Buffer/Basic.java index 0dba4c123b4..aef98306a9c 100644 --- a/jdk/test/java/nio/Buffer/Basic.java +++ b/jdk/test/java/nio/Buffer/Basic.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2000, 2008, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2000, 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 diff --git a/jdk/test/java/nio/Buffer/BasicByte.java b/jdk/test/java/nio/Buffer/BasicByte.java index 861a4335b5b..fc3f7adf398 100644 --- a/jdk/test/java/nio/Buffer/BasicByte.java +++ b/jdk/test/java/nio/Buffer/BasicByte.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2000, 2008, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2000, 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 diff --git a/jdk/test/java/nio/Buffer/BasicChar.java b/jdk/test/java/nio/Buffer/BasicChar.java index b89916101bf..1710fcf899e 100644 --- a/jdk/test/java/nio/Buffer/BasicChar.java +++ b/jdk/test/java/nio/Buffer/BasicChar.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2000, 2008, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2000, 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 diff --git a/jdk/test/java/nio/Buffer/BasicDouble.java b/jdk/test/java/nio/Buffer/BasicDouble.java index 97efe8f6847..0f9509064cb 100644 --- a/jdk/test/java/nio/Buffer/BasicDouble.java +++ b/jdk/test/java/nio/Buffer/BasicDouble.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2000, 2008, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2000, 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 diff --git a/jdk/test/java/nio/Buffer/BasicFloat.java b/jdk/test/java/nio/Buffer/BasicFloat.java index 2f954934a05..0ada0ab971b 100644 --- a/jdk/test/java/nio/Buffer/BasicFloat.java +++ b/jdk/test/java/nio/Buffer/BasicFloat.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2000, 2008, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2000, 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 diff --git a/jdk/test/java/nio/Buffer/BasicInt.java b/jdk/test/java/nio/Buffer/BasicInt.java index a9ce0fb450b..445c9711f78 100644 --- a/jdk/test/java/nio/Buffer/BasicInt.java +++ b/jdk/test/java/nio/Buffer/BasicInt.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2000, 2008, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2000, 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 diff --git a/jdk/test/java/nio/Buffer/BasicLong.java b/jdk/test/java/nio/Buffer/BasicLong.java index 82fb25b8a2d..bc8c5f7a124 100644 --- a/jdk/test/java/nio/Buffer/BasicLong.java +++ b/jdk/test/java/nio/Buffer/BasicLong.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2000, 2008, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2000, 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 diff --git a/jdk/test/java/nio/Buffer/BasicShort.java b/jdk/test/java/nio/Buffer/BasicShort.java index 9f8579d7510..3f0a24bf0df 100644 --- a/jdk/test/java/nio/Buffer/BasicShort.java +++ b/jdk/test/java/nio/Buffer/BasicShort.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2000, 2008, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2000, 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 diff --git a/jdk/test/java/nio/MappedByteBuffer/Truncate.java b/jdk/test/java/nio/MappedByteBuffer/Truncate.java index be74c80df93..a0d255c2d0a 100644 --- a/jdk/test/java/nio/MappedByteBuffer/Truncate.java +++ b/jdk/test/java/nio/MappedByteBuffer/Truncate.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2010, 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 diff --git a/jdk/test/java/nio/channels/AsynchronousChannelGroup/AsExecutor.java b/jdk/test/java/nio/channels/AsynchronousChannelGroup/AsExecutor.java index db720d8bc26..ec4cb09d61c 100644 --- a/jdk/test/java/nio/channels/AsynchronousChannelGroup/AsExecutor.java +++ b/jdk/test/java/nio/channels/AsynchronousChannelGroup/AsExecutor.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2008, 2009, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2008, 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 diff --git a/jdk/test/java/nio/channels/AsynchronousChannelGroup/Basic.java b/jdk/test/java/nio/channels/AsynchronousChannelGroup/Basic.java index 8f5fc96c5c8..8c6b5cb7020 100644 --- a/jdk/test/java/nio/channels/AsynchronousChannelGroup/Basic.java +++ b/jdk/test/java/nio/channels/AsynchronousChannelGroup/Basic.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2008, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2008, 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 diff --git a/jdk/test/java/nio/channels/AsynchronousChannelGroup/Restart.java b/jdk/test/java/nio/channels/AsynchronousChannelGroup/Restart.java index 351770f3e77..5fb2f123b02 100644 --- a/jdk/test/java/nio/channels/AsynchronousChannelGroup/Restart.java +++ b/jdk/test/java/nio/channels/AsynchronousChannelGroup/Restart.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2008, 2009, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2008, 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 diff --git a/jdk/test/java/nio/channels/AsynchronousServerSocketChannel/Basic.java b/jdk/test/java/nio/channels/AsynchronousServerSocketChannel/Basic.java index 53f1384823b..753629f8e1b 100644 --- a/jdk/test/java/nio/channels/AsynchronousServerSocketChannel/Basic.java +++ b/jdk/test/java/nio/channels/AsynchronousServerSocketChannel/Basic.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2008, 2010, Oracle and/or its affiliates. All rights reserved. + * 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 diff --git a/jdk/test/java/nio/channels/DatagramChannel/BasicMulticastTests.java b/jdk/test/java/nio/channels/DatagramChannel/BasicMulticastTests.java index 8cab0956539..c60b6b7cd94 100644 --- a/jdk/test/java/nio/channels/DatagramChannel/BasicMulticastTests.java +++ b/jdk/test/java/nio/channels/DatagramChannel/BasicMulticastTests.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2007, 2009, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2007, 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 diff --git a/jdk/test/java/nio/channels/DatagramChannel/MulticastSendReceiveTests.java b/jdk/test/java/nio/channels/DatagramChannel/MulticastSendReceiveTests.java index 3591e83451e..8f0f9a5fba3 100644 --- a/jdk/test/java/nio/channels/DatagramChannel/MulticastSendReceiveTests.java +++ b/jdk/test/java/nio/channels/DatagramChannel/MulticastSendReceiveTests.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2007, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2007, 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 diff --git a/jdk/test/java/nio/channels/DatagramChannel/NetworkConfiguration.java b/jdk/test/java/nio/channels/DatagramChannel/NetworkConfiguration.java index 7833a4b892c..6bb5c947f78 100644 --- a/jdk/test/java/nio/channels/DatagramChannel/NetworkConfiguration.java +++ b/jdk/test/java/nio/channels/DatagramChannel/NetworkConfiguration.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2007, 2008, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2007, 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 diff --git a/jdk/test/java/nio/channels/DatagramChannel/Refused.java b/jdk/test/java/nio/channels/DatagramChannel/Refused.java index 62788043e8a..7b495fe0783 100644 --- a/jdk/test/java/nio/channels/DatagramChannel/Refused.java +++ b/jdk/test/java/nio/channels/DatagramChannel/Refused.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2002, 2003, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2002, 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 diff --git a/jdk/test/java/nio/channels/DatagramChannel/SelectWhenRefused.java b/jdk/test/java/nio/channels/DatagramChannel/SelectWhenRefused.java index 426a98eb86d..cc3f52f3245 100644 --- a/jdk/test/java/nio/channels/DatagramChannel/SelectWhenRefused.java +++ b/jdk/test/java/nio/channels/DatagramChannel/SelectWhenRefused.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2010, 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 diff --git a/jdk/test/java/nio/channels/DatagramChannel/SocketOptionTests.java b/jdk/test/java/nio/channels/DatagramChannel/SocketOptionTests.java index 1f01bd971b2..bc7146cc982 100644 --- a/jdk/test/java/nio/channels/DatagramChannel/SocketOptionTests.java +++ b/jdk/test/java/nio/channels/DatagramChannel/SocketOptionTests.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2007, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2007, 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 diff --git a/jdk/test/java/nio/channels/FileChannel/ClosedByInterrupt.java b/jdk/test/java/nio/channels/FileChannel/ClosedByInterrupt.java index 26c3d89789a..153a2ad451f 100644 --- a/jdk/test/java/nio/channels/FileChannel/ClosedByInterrupt.java +++ b/jdk/test/java/nio/channels/FileChannel/ClosedByInterrupt.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2010, 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 diff --git a/jdk/test/java/nio/channels/Selector/OpRead.java b/jdk/test/java/nio/channels/Selector/OpRead.java index cec477901ff..7632d27499d 100644 --- a/jdk/test/java/nio/channels/Selector/OpRead.java +++ b/jdk/test/java/nio/channels/Selector/OpRead.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2002, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2002, 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 diff --git a/jdk/test/java/nio/channels/Selector/lots_of_updates.sh b/jdk/test/java/nio/channels/Selector/lots_of_updates.sh index c484158c9ff..a34ab99e2b0 100644 --- a/jdk/test/java/nio/channels/Selector/lots_of_updates.sh +++ b/jdk/test/java/nio/channels/Selector/lots_of_updates.sh @@ -1,5 +1,5 @@ # -# Copyright (c) 2009, 2010, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2009, 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 diff --git a/jdk/test/java/nio/channels/ServerSocketChannel/SocketOptionTests.java b/jdk/test/java/nio/channels/ServerSocketChannel/SocketOptionTests.java index ee5ad4a3cff..a7756989290 100644 --- a/jdk/test/java/nio/channels/ServerSocketChannel/SocketOptionTests.java +++ b/jdk/test/java/nio/channels/ServerSocketChannel/SocketOptionTests.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2007, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2007, 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 diff --git a/jdk/test/java/nio/channels/SocketChannel/AdaptSocket.java b/jdk/test/java/nio/channels/SocketChannel/AdaptSocket.java index 09c14e208b9..d479b49ef48 100644 --- a/jdk/test/java/nio/channels/SocketChannel/AdaptSocket.java +++ b/jdk/test/java/nio/channels/SocketChannel/AdaptSocket.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2001, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2001, 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 diff --git a/jdk/test/java/nio/channels/SocketChannel/Open.sh b/jdk/test/java/nio/channels/SocketChannel/Open.sh index 013f8a1a361..1c959ea7b5b 100644 --- a/jdk/test/java/nio/channels/SocketChannel/Open.sh +++ b/jdk/test/java/nio/channels/SocketChannel/Open.sh @@ -1,7 +1,7 @@ #! /bin/sh # -# Copyright (c) 2002, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2002, 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 diff --git a/jdk/test/java/nio/channels/SocketChannel/Shutdown.java b/jdk/test/java/nio/channels/SocketChannel/Shutdown.java index 535972bde79..47f71872a36 100644 --- a/jdk/test/java/nio/channels/SocketChannel/Shutdown.java +++ b/jdk/test/java/nio/channels/SocketChannel/Shutdown.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2002, 2009, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2002, 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 diff --git a/jdk/test/java/nio/channels/SocketChannel/SocketOptionTests.java b/jdk/test/java/nio/channels/SocketChannel/SocketOptionTests.java index 561d6c9cac0..f1cb496afea 100644 --- a/jdk/test/java/nio/channels/SocketChannel/SocketOptionTests.java +++ b/jdk/test/java/nio/channels/SocketChannel/SocketOptionTests.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2007, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2007, 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 diff --git a/jdk/test/java/nio/channels/TestUtil.java b/jdk/test/java/nio/channels/TestUtil.java index c396709ffaf..f06ffc4a847 100644 --- a/jdk/test/java/nio/channels/TestUtil.java +++ b/jdk/test/java/nio/channels/TestUtil.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2000, 2008, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2000, 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 diff --git a/jdk/test/java/nio/charset/Charset/NIOCharsetAvailabilityTest.java b/jdk/test/java/nio/charset/Charset/NIOCharsetAvailabilityTest.java index ce455dd2ed1..78913f2f46a 100644 --- a/jdk/test/java/nio/charset/Charset/NIOCharsetAvailabilityTest.java +++ b/jdk/test/java/nio/charset/Charset/NIOCharsetAvailabilityTest.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2010, 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 diff --git a/jdk/test/java/nio/charset/coders/CheckSJISMappingProp.sh b/jdk/test/java/nio/charset/coders/CheckSJISMappingProp.sh index 8b394281895..49caa0dfebb 100644 --- a/jdk/test/java/nio/charset/coders/CheckSJISMappingProp.sh +++ b/jdk/test/java/nio/charset/coders/CheckSJISMappingProp.sh @@ -1,7 +1,7 @@ #!/bin/sh # -# Copyright (c) 2003, 2010, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2003, 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 diff --git a/jdk/test/java/nio/charset/coders/Errors.java b/jdk/test/java/nio/charset/coders/Errors.java index 0b74001dd6e..7c9cf1e6f47 100644 --- a/jdk/test/java/nio/charset/coders/Errors.java +++ b/jdk/test/java/nio/charset/coders/Errors.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2010, 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 diff --git a/jdk/test/java/nio/charset/spi/basic.sh b/jdk/test/java/nio/charset/spi/basic.sh index 330e4d0ff2d..c1bdd45dd02 100644 --- a/jdk/test/java/nio/charset/spi/basic.sh +++ b/jdk/test/java/nio/charset/spi/basic.sh @@ -1,7 +1,7 @@ #!/bin/sh # -# Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2010, 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 diff --git a/jdk/test/java/nio/file/Files/CustomOptions.java b/jdk/test/java/nio/file/Files/CustomOptions.java index a06b97efd75..9af38f26853 100644 --- a/jdk/test/java/nio/file/Files/CustomOptions.java +++ b/jdk/test/java/nio/file/Files/CustomOptions.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2011, 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 diff --git a/jdk/test/java/nio/file/Path/PathOps.java b/jdk/test/java/nio/file/Path/PathOps.java index 6c2521302c6..865581c9273 100644 --- a/jdk/test/java/nio/file/Path/PathOps.java +++ b/jdk/test/java/nio/file/Path/PathOps.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2008, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2008, 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 diff --git a/jdk/test/java/nio/file/WatchService/Basic.java b/jdk/test/java/nio/file/WatchService/Basic.java index 019ec96c30f..00965e89d85 100644 --- a/jdk/test/java/nio/file/WatchService/Basic.java +++ b/jdk/test/java/nio/file/WatchService/Basic.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2008, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2008, 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 diff --git a/jdk/test/java/nio/file/WatchService/SensitivityModifier.java b/jdk/test/java/nio/file/WatchService/SensitivityModifier.java index f990870acae..6f9a14cfd60 100644 --- a/jdk/test/java/nio/file/WatchService/SensitivityModifier.java +++ b/jdk/test/java/nio/file/WatchService/SensitivityModifier.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2008, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2008, 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 diff --git a/jdk/test/java/nio/file/WatchService/WithSecurityManager.java b/jdk/test/java/nio/file/WatchService/WithSecurityManager.java index ac2a70aa254..c2cd9c316f5 100644 --- a/jdk/test/java/nio/file/WatchService/WithSecurityManager.java +++ b/jdk/test/java/nio/file/WatchService/WithSecurityManager.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2008, 2009, Oracle and/or its affiliates. All rights reserved. + * 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 diff --git a/jdk/test/java/rmi/activation/checkusage/CheckUsage.java b/jdk/test/java/rmi/activation/checkusage/CheckUsage.java index 095bdc2782e..66ff7ad9445 100644 --- a/jdk/test/java/rmi/activation/checkusage/CheckUsage.java +++ b/jdk/test/java/rmi/activation/checkusage/CheckUsage.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1999, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1999, 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 diff --git a/jdk/test/java/rmi/testlibrary/JavaVM.java b/jdk/test/java/rmi/testlibrary/JavaVM.java index 62be87d8279..d0c3c38a16b 100644 --- a/jdk/test/java/rmi/testlibrary/JavaVM.java +++ b/jdk/test/java/rmi/testlibrary/JavaVM.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1998, 2006, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1998, 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 diff --git a/jdk/test/java/rmi/transport/pinLastArguments/PinLastArguments.java b/jdk/test/java/rmi/transport/pinLastArguments/PinLastArguments.java index f82560236c6..bcf1ff0c74d 100644 --- a/jdk/test/java/rmi/transport/pinLastArguments/PinLastArguments.java +++ b/jdk/test/java/rmi/transport/pinLastArguments/PinLastArguments.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2005, 2008, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2005, 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 diff --git a/jdk/test/java/security/Security/ClassLoaderDeadlock/ClassLoaderDeadlock.sh b/jdk/test/java/security/Security/ClassLoaderDeadlock/ClassLoaderDeadlock.sh index 57af5011eb1..a503697dc73 100644 --- a/jdk/test/java/security/Security/ClassLoaderDeadlock/ClassLoaderDeadlock.sh +++ b/jdk/test/java/security/Security/ClassLoaderDeadlock/ClassLoaderDeadlock.sh @@ -1,5 +1,5 @@ # -# Copyright (c) 2004, 2010, Oracle and/or its affiliates. All rights reserved. +# 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 diff --git a/jdk/test/java/security/Security/ClassLoaderDeadlock/Deadlock.sh b/jdk/test/java/security/Security/ClassLoaderDeadlock/Deadlock.sh index 7daa2379037..53555ee26ff 100644 --- a/jdk/test/java/security/Security/ClassLoaderDeadlock/Deadlock.sh +++ b/jdk/test/java/security/Security/ClassLoaderDeadlock/Deadlock.sh @@ -1,7 +1,7 @@ #!/bin/sh # -# Copyright (c) 2003, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2003, 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 diff --git a/jdk/test/java/security/Security/ClassLoaderDeadlock/Deadlock2.sh b/jdk/test/java/security/Security/ClassLoaderDeadlock/Deadlock2.sh index 53803a6beb0..1109496c723 100644 --- a/jdk/test/java/security/Security/ClassLoaderDeadlock/Deadlock2.sh +++ b/jdk/test/java/security/Security/ClassLoaderDeadlock/Deadlock2.sh @@ -1,7 +1,7 @@ #!/bin/sh # -# Copyright (c) 2009, 2011, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2009, 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 diff --git a/jdk/test/java/security/Security/signedfirst/Dyn.sh b/jdk/test/java/security/Security/signedfirst/Dyn.sh index a98e2ff38be..d87e5ff0139 100644 --- a/jdk/test/java/security/Security/signedfirst/Dyn.sh +++ b/jdk/test/java/security/Security/signedfirst/Dyn.sh @@ -1,5 +1,5 @@ # -# Copyright (c) 2002, 2003, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2002, 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 diff --git a/jdk/test/java/security/Security/signedfirst/Static.sh b/jdk/test/java/security/Security/signedfirst/Static.sh index ff663088602..6b41adf31ad 100644 --- a/jdk/test/java/security/Security/signedfirst/Static.sh +++ b/jdk/test/java/security/Security/signedfirst/Static.sh @@ -1,5 +1,5 @@ # -# Copyright (c) 2002, 2003, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2002, 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 diff --git a/jdk/test/java/text/Bidi/Bug6850113.java b/jdk/test/java/text/Bidi/Bug6850113.java index 704615049ce..0082c6f5184 100644 --- a/jdk/test/java/text/Bidi/Bug6850113.java +++ b/jdk/test/java/text/Bidi/Bug6850113.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2009, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2009, 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 diff --git a/jdk/test/java/text/Format/ChoiceFormat/Bug8001209.java b/jdk/test/java/text/Format/ChoiceFormat/Bug8001209.java new file mode 100644 index 00000000000..b9f490fad62 --- /dev/null +++ b/jdk/test/java/text/Format/ChoiceFormat/Bug8001209.java @@ -0,0 +1,90 @@ +/* + * Copyright (c) 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 8001209 + * @summary Confirm that the values set by setChoices() are not mutable. + */ +import java.text.*; + +public class Bug8001209 { + + public static void main(String[] args) throws Exception { + boolean err = false; + + // Borrow an example in API doc + double[] limits = {1,2,3,4,5,6,7}; + String[] dayOfWeekNames = {"Sun","Mon","Tue","Wed","Thu","Fri","Sat"}; + ChoiceFormat form = new ChoiceFormat(limits, dayOfWeekNames); + ParsePosition status = new ParsePosition(0); + + StringBuilder before = new StringBuilder(); + for (double i = 1.0; i <= 7.0; ++i) { + status.setIndex(0); + String s = form.format(i); + before.append(" "); + before.append(s); + before.append(form.parse(form.format(i),status)); + } + String original = before.toString(); + + double[] newLimits = form.getLimits(); + String[] newFormats = (String[])form.getFormats(); + newFormats[6] = "Doyoubi"; + StringBuilder after = new StringBuilder(); + for (double i = 1.0; i <= 7.0; ++i) { + status.setIndex(0); + String s = form.format(i); + after.append(" "); + after.append(s); + after.append(form.parse(form.format(i),status)); + } + if (!original.equals(after.toString())) { + err = true; + System.err.println(" Expected:" + before + + "\n Got: " + after); + } + + dayOfWeekNames[6] = "Saturday"; + after = new StringBuilder(); + for (double i = 1.0; i <= 7.0; ++i) { + status.setIndex(0); + String s = form.format(i); + after.append(" "); + after.append(s); + after.append(form.parse(form.format(i),status)); + } + if (!original.equals(after.toString())) { + err = true; + System.err.println(" Expected:" + before + + "\n Got: " + after); + } + + if (err) { + throw new RuntimeException("Failed."); + } else { + System.out.println("Passed."); + } + } +} diff --git a/jdk/test/java/util/Collection/BiggernYours.java b/jdk/test/java/util/Collection/BiggernYours.java index ad5e37337b0..24ce930e713 100644 --- a/jdk/test/java/util/Collection/BiggernYours.java +++ b/jdk/test/java/util/Collection/BiggernYours.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2006, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2006, 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 diff --git a/jdk/test/java/util/Collections/EmptyIterator.java b/jdk/test/java/util/Collections/EmptyIterator.java index 902f03407dc..f7815d32d99 100644 --- a/jdk/test/java/util/Collections/EmptyIterator.java +++ b/jdk/test/java/util/Collections/EmptyIterator.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2007, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2007, 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 diff --git a/jdk/test/java/util/Currency/CurrencyTest.java b/jdk/test/java/util/Currency/CurrencyTest.java index c22813845ce..6971442bfb0 100644 --- a/jdk/test/java/util/Currency/CurrencyTest.java +++ b/jdk/test/java/util/Currency/CurrencyTest.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2007, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2007, 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 diff --git a/jdk/test/java/util/Hashtable/HashCode.java b/jdk/test/java/util/Hashtable/HashCode.java index 822ce519764..5a3c3299889 100644 --- a/jdk/test/java/util/Hashtable/HashCode.java +++ b/jdk/test/java/util/Hashtable/HashCode.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2001, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2001, 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 diff --git a/jdk/test/java/util/Hashtable/SimpleSerialization.java b/jdk/test/java/util/Hashtable/SimpleSerialization.java index 537c32e8e74..deb322cb7fc 100644 --- a/jdk/test/java/util/Hashtable/SimpleSerialization.java +++ b/jdk/test/java/util/Hashtable/SimpleSerialization.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2010, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2010, 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 diff --git a/jdk/test/java/util/Locale/Bug6989440.java b/jdk/test/java/util/Locale/Bug6989440.java index 53475eb3b24..b675d495775 100644 --- a/jdk/test/java/util/Locale/Bug6989440.java +++ b/jdk/test/java/util/Locale/Bug6989440.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2010, 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 diff --git a/jdk/test/java/util/Locale/LocaleCategory.sh b/jdk/test/java/util/Locale/LocaleCategory.sh index 618e00f3409..34becd35a98 100644 --- a/jdk/test/java/util/Locale/LocaleCategory.sh +++ b/jdk/test/java/util/Locale/LocaleCategory.sh @@ -1,5 +1,5 @@ # -# Copyright (c) 2011, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2011, 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 diff --git a/jdk/test/java/util/Locale/LocaleProviders.java b/jdk/test/java/util/Locale/LocaleProviders.java index 98a999b39d4..b6320727943 100644 --- a/jdk/test/java/util/Locale/LocaleProviders.java +++ b/jdk/test/java/util/Locale/LocaleProviders.java @@ -47,6 +47,14 @@ public class LocaleProviders { bug7198834Test(); break; + case "tzNameTest": + tzNameTest(args[1]); + break; + + case "bug8001440Test": + bug8001440Test(); + break; + default: throw new RuntimeException("Test method '"+methodName+"' not found."); } @@ -81,4 +89,18 @@ public class LocaleProviders { System.out.println("Windows HOST locale adapter not found. Ignoring this test."); } } + + static void tzNameTest(String id) { + TimeZone tz = TimeZone.getTimeZone(id); + String tzName = tz.getDisplayName(false, TimeZone.SHORT, Locale.US); + if (tzName.startsWith("GMT")) { + throw new RuntimeException("JRE's localized time zone name for "+id+" could not be retrieved. Returned name was: "+tzName); + } + } + + static void bug8001440Test() { + Locale locale = Locale.forLanguageTag("th-TH-u-nu-hoge"); + NumberFormat nf = NumberFormat.getInstance(locale); + String nu = nf.format(1234560); + } } diff --git a/jdk/test/java/util/Locale/LocaleProviders.sh b/jdk/test/java/util/Locale/LocaleProviders.sh index 703d1f0f8a3..59e43fcff76 100644 --- a/jdk/test/java/util/Locale/LocaleProviders.sh +++ b/jdk/test/java/util/Locale/LocaleProviders.sh @@ -23,7 +23,7 @@ #!/bin/sh # # @test -# @bug 6336885 7196799 7197573 7198834 +# @bug 6336885 7196799 7197573 7198834 8000245 8000615 8001440 # @summary tests for "java.locale.providers" system property # @compile -XDignore.symbol.file LocaleProviders.java # @run shell/timeout=600 LocaleProviders.sh @@ -65,6 +65,36 @@ case "$OS" in ;; esac +# create an SPI implementation +mk() { + d=`dirname $1` + if [ ! -d $d ]; then mkdir -p $d; fi + cat - >$1 +} + +SPIDIR=${TESTCLASSES}${FS}spi +rm -rf ${SPIDIR} +mk ${SPIDIR}${FS}src${FS}tznp.java << EOF +import java.util.spi.TimeZoneNameProvider; +import java.util.Locale; + +public class tznp extends TimeZoneNameProvider { + public String getDisplayName(String ID, boolean daylight, int style, Locale locale) { + return "tznp"; + } + + public Locale[] getAvailableLocales() { + Locale[] locales = {Locale.GERMAN, Locale.US, Locale.JAPANESE, Locale.CHINESE}; + return locales; + } +} +EOF +mk ${SPIDIR}${FS}dest${FS}META-INF${FS}services${FS}java.util.spi.TimeZoneNameProvider << EOF +tznp +EOF +${TESTJAVA}${FS}bin${FS}javac -d ${SPIDIR}${FS}dest ${SPIDIR}${FS}src${FS}tznp.java +${TESTJAVA}${FS}bin${FS}jar cvf ${SPIDIR}${FS}tznp.jar -C ${SPIDIR}${FS}dest . + # get the platform default locales PLATDEF=`${TESTJAVA}${FS}bin${FS}java -classpath ${TESTCLASSES} LocaleProviders getPlatformLocale display` DEFLANG=`echo ${PLATDEF} | sed -e "s/,.*//"` @@ -199,4 +229,28 @@ PARAM2= PARAM3= runTest +# testing 8000245 fix. +METHODNAME=tzNameTest +PREFLIST="JRE -Djava.ext.dirs=${SPIDIR}" +PARAM1=Europe/Moscow +PARAM2= +PARAM3= +runTest + +# testing 8000615 fix. +METHODNAME=tzNameTest +PREFLIST="JRE -Djava.ext.dirs=${SPIDIR}" +PARAM1=America/Los_Angeles +PARAM2= +PARAM3= +runTest + +# testing 8001440 fix. +METHODNAME=bug8001440Test +PREFLIST=CLDR +PARAM1= +PARAM2= +PARAM3= +runTest + exit $result diff --git a/jdk/test/java/util/Map/EntryHashCode.java b/jdk/test/java/util/Map/EntryHashCode.java new file mode 100644 index 00000000000..98ef36500ec --- /dev/null +++ b/jdk/test/java/util/Map/EntryHashCode.java @@ -0,0 +1,109 @@ +/* + * Copyright (c) 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. + */ + +/* + * Portions Copyright (c) 2012 IBM Corporation + */ + +/* + * @test + * @bug 8000955 + * @summary Map.Entry implementations need to comply with Map.Entry.hashCode() defined behaviour. + * @author ngmr + */ +import java.util.*; +import java.util.concurrent.ConcurrentHashMap; +import java.util.concurrent.ConcurrentSkipListMap; + +public class EntryHashCode { + private static final int TEST_SIZE = 100; + + static final Object[][] entryData = { + new Object[TEST_SIZE], + new Object[TEST_SIZE] + }; + + @SuppressWarnings("unchecked") + static final Map[] maps = (Map[])new Map[] { + new HashMap<>(), + new Hashtable<>(), + new IdentityHashMap<>(), + new LinkedHashMap<>(), + new TreeMap<>(), + new WeakHashMap<>(), + new ConcurrentHashMap<>(), + new ConcurrentSkipListMap<>() + }; + + static { + for (int i = 0; i < entryData[0].length; i++) { + // key objects need to be Comparable for use in TreeMap + entryData[0][i] = new Comparable() { + public int compareTo(Object o) { + return (hashCode() - o.hashCode()); + } + }; + entryData[1][i] = new Object(); + } + } + + private static void addTestData(Map map) { + for (int i = 0; i < entryData[0].length; i++) { + map.put(entryData[0][i], entryData[1][i]); + } + } + + public static void main(String[] args) throws Exception { + Exception failure = null; + for (Map map: maps) { + addTestData(map); + + try { + for (Map.Entry e: map.entrySet()) { + Object key = e.getKey(); + Object value = e.getValue(); + int expectedEntryHashCode = + (Objects.hashCode(key) ^ Objects.hashCode(value)); + + if (e.hashCode() != expectedEntryHashCode) { + throw new Exception("FAILURE: " + + e.getClass().getName() + + ".hashCode() does not conform to defined" + + " behaviour of java.util.Map.Entry.hashCode()"); + } + } + } catch (Exception e) { + if (failure == null) { + failure = e; + } else { + failure.addSuppressed(e); + } + } finally { + map.clear(); + } + } + if (failure != null) { + throw failure; + } + } +} diff --git a/jdk/test/java/util/Map/Get.java b/jdk/test/java/util/Map/Get.java index 870a7b89ae4..a6878f75d90 100644 --- a/jdk/test/java/util/Map/Get.java +++ b/jdk/test/java/util/Map/Get.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2005, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2005, 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 diff --git a/jdk/test/java/util/PluggableLocale/CurrencyNameProviderTest.java b/jdk/test/java/util/PluggableLocale/CurrencyNameProviderTest.java index 29f0eee7d21..ebffc3f4f3c 100644 --- a/jdk/test/java/util/PluggableLocale/CurrencyNameProviderTest.java +++ b/jdk/test/java/util/PluggableLocale/CurrencyNameProviderTest.java @@ -48,14 +48,18 @@ public class CurrencyNameProviderTest extends ProviderTest { void test1() { com.bar.CurrencyNameProviderImpl cnp = new com.bar.CurrencyNameProviderImpl(); + com.bar.CurrencyNameProviderImpl2 cnp2 = new com.bar.CurrencyNameProviderImpl2(); Locale[] availloc = Locale.getAvailableLocales(); Locale[] testloc = availloc.clone(); - List providerloc = Arrays.asList(cnp.getAvailableLocales()); + List jreimplloc = Arrays.asList(LocaleProviderAdapter.forJRE().getCurrencyNameProvider().getAvailableLocales()); + List providerloc = new ArrayList(); + providerloc.addAll(Arrays.asList(cnp.getAvailableLocales())); + providerloc.addAll(Arrays.asList(cnp2.getAvailableLocales())); for (Locale target: availloc) { // pure JRE implementation OpenListResourceBundle rb = (OpenListResourceBundle)LocaleProviderAdapter.forJRE().getLocaleData().getCurrencyNames(target); - boolean jreHasBundle = rb.getLocale().equals(target); + boolean jreSupportsTarget = jreimplloc.contains(target); for (Locale test: testloc) { // get a Currency instance @@ -78,31 +82,33 @@ public class CurrencyNameProviderTest extends ProviderTest { String providerscurrency = null; String providersname = null; if (providerloc.contains(target)) { + if (cnp.isSupportedLocale(target)) { providerscurrency = cnp.getSymbol(c.getCurrencyCode(), target); providersname = cnp.getDisplayName(c.getCurrencyCode(), target); + } else { + providerscurrency = cnp2.getSymbol(c.getCurrencyCode(), target); + providersname = cnp2.getDisplayName(c.getCurrencyCode(), target); + } } - // JRE's name (if any) + // JRE's name String jrescurrency = null; String jresname = null; String key = c.getCurrencyCode(); String nameKey = key.toLowerCase(Locale.ROOT); - if (jreHasBundle) { + if (jreSupportsTarget) { try { jrescurrency = rb.getString(key); - } catch (MissingResourceException mre) { - // JRE does not have any resource, "jrescurrency" should remain null - } + } catch (MissingResourceException mre) {} try { jresname = rb.getString(nameKey); - } catch (MissingResourceException mre) { - // JRE does not have any resource, "jresname" should remain null - } + } catch (MissingResourceException mre) {} } - checkValidity(target, jrescurrency, providerscurrency, currencyresult, jrescurrency!=null); + checkValidity(target, jrescurrency, providerscurrency, currencyresult, + jreSupportsTarget && jrescurrency != null); checkValidity(target, jresname, providersname, nameresult, - jreHasBundle && rb.handleGetKeys().contains(nameKey)); + jreSupportsTarget && jresname != null); } } } @@ -111,18 +117,22 @@ public class CurrencyNameProviderTest extends ProviderTest { final String pattern = "###,###\u00A4"; final String YEN_IN_OSAKA = "100,000\u5186\u3084\u3002"; final String YEN_IN_KYOTO = "100,000\u5186\u3069\u3059\u3002"; + final String YEN_IN_TOKYO= "100,000JPY-tokyo"; final Locale OSAKA = new Locale("ja", "JP", "osaka"); final Locale KYOTO = new Locale("ja", "JP", "kyoto"); + final Locale TOKYO = new Locale("ja", "JP", "tokyo"); Integer i = new Integer(100000); String formatted; DecimalFormat df; void test2() { + Locale defloc = Locale.getDefault(); + try { df = new DecimalFormat(pattern, DecimalFormatSymbols.getInstance(OSAKA)); System.out.println(formatted = df.format(i)); if(!formatted.equals(YEN_IN_OSAKA)) { - throw new RuntimeException("formatted zone names mismatch. " + + throw new RuntimeException("formatted currency names mismatch. " + "Should match with " + YEN_IN_OSAKA); } @@ -132,13 +142,25 @@ public class CurrencyNameProviderTest extends ProviderTest { df = new DecimalFormat(pattern, DecimalFormatSymbols.getInstance()); System.out.println(formatted = df.format(i)); if(!formatted.equals(YEN_IN_KYOTO)) { - throw new RuntimeException("formatted zone names mismatch. " + + throw new RuntimeException("formatted currency names mismatch. " + "Should match with " + YEN_IN_KYOTO); } df.parse(YEN_IN_KYOTO); + + Locale.setDefault(TOKYO); + df = new DecimalFormat(pattern, DecimalFormatSymbols.getInstance()); + System.out.println(formatted = df.format(i)); + if(!formatted.equals(YEN_IN_TOKYO)) { + throw new RuntimeException("formatted currency names mismatch. " + + "Should match with " + YEN_IN_TOKYO); + } + + df.parse(YEN_IN_TOKYO); } catch (ParseException pe) { throw new RuntimeException("parse error occured" + pe); + } finally { + Locale.setDefault(defloc); } } } diff --git a/jdk/test/java/util/PluggableLocale/CurrencyNameProviderTest.sh b/jdk/test/java/util/PluggableLocale/CurrencyNameProviderTest.sh index a0a9d582eae..9cfc700766a 100644 --- a/jdk/test/java/util/PluggableLocale/CurrencyNameProviderTest.sh +++ b/jdk/test/java/util/PluggableLocale/CurrencyNameProviderTest.sh @@ -1,5 +1,5 @@ # -# Copyright (c) 2007, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2007, 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 @@ -23,6 +23,6 @@ #!/bin/sh # # @test -# @bug 4052440 +# @bug 4052440 8000997 # @summary CurrencyNameProvider tests # @run shell ExecTest.sh bar CurrencyNameProviderTest true diff --git a/jdk/test/java/util/PluggableLocale/DateFormatSymbolsProviderTest.java b/jdk/test/java/util/PluggableLocale/DateFormatSymbolsProviderTest.java index 20547219f53..44d537b25ca 100644 --- a/jdk/test/java/util/PluggableLocale/DateFormatSymbolsProviderTest.java +++ b/jdk/test/java/util/PluggableLocale/DateFormatSymbolsProviderTest.java @@ -44,6 +44,7 @@ public class DateFormatSymbolsProviderTest extends ProviderTest { DateFormatSymbolsProviderTest() { availableLocalesTest(); objectValidityTest(); + hashCodeTest(); } void availableLocalesTest() { @@ -124,4 +125,17 @@ public class DateFormatSymbolsProviderTest extends ProviderTest { } } } + + // Bug 7200341. + void hashCodeTest() { + for (Locale target: availloc) { + // look for provider's object + DateFormatSymbols dfs = DateFormatSymbols.getInstance(target); + if (dfs.getClass().getSimpleName().equals("FooDateFormatSymbols")) { + // call its hashCode(). success if no ArrayIndexOutOfBoundsException is thrown. + dfs.hashCode(); + break; + } + } + } } diff --git a/jdk/test/java/util/PluggableLocale/DateFormatSymbolsProviderTest.sh b/jdk/test/java/util/PluggableLocale/DateFormatSymbolsProviderTest.sh index 22c97d0a1ad..9103e8283b9 100644 --- a/jdk/test/java/util/PluggableLocale/DateFormatSymbolsProviderTest.sh +++ b/jdk/test/java/util/PluggableLocale/DateFormatSymbolsProviderTest.sh @@ -1,5 +1,5 @@ # -# Copyright (c) 2007, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2007, 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 @@ -23,6 +23,6 @@ #!/bin/sh # # @test -# @bug 4052440 +# @bug 4052440 7200341 # @summary DateFormatSymbolsProvider tests # @run shell ExecTest.sh foo DateFormatSymbolsProviderTest true diff --git a/jdk/test/java/util/PluggableLocale/ExecTest.sh b/jdk/test/java/util/PluggableLocale/ExecTest.sh index 5a125887d65..18bd8d16f61 100644 --- a/jdk/test/java/util/PluggableLocale/ExecTest.sh +++ b/jdk/test/java/util/PluggableLocale/ExecTest.sh @@ -1,5 +1,5 @@ # -# Copyright (c) 2007, 2010, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2007, 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 diff --git a/jdk/test/java/util/PluggableLocale/GenericTest.java b/jdk/test/java/util/PluggableLocale/GenericTest.java index 3987f986bea..288d7a3ab04 100644 --- a/jdk/test/java/util/PluggableLocale/GenericTest.java +++ b/jdk/test/java/util/PluggableLocale/GenericTest.java @@ -38,6 +38,7 @@ public class GenericTest { com.foo.DecimalFormatSymbolsProviderImpl decimalFSP = new com.foo.DecimalFormatSymbolsProviderImpl(); com.foo.NumberFormatProviderImpl numberFP = new com.foo.NumberFormatProviderImpl(); com.bar.CurrencyNameProviderImpl currencyNP = new com.bar.CurrencyNameProviderImpl(); + com.bar.CurrencyNameProviderImpl2 currencyNP2 = new com.bar.CurrencyNameProviderImpl2(); com.bar.LocaleNameProviderImpl localeNP = new com.bar.LocaleNameProviderImpl(); com.bar.TimeZoneNameProviderImpl tzNP = new com.bar.TimeZoneNameProviderImpl(); com.bar.CalendarDataProviderImpl calDataP = new com.bar.CalendarDataProviderImpl(); @@ -68,6 +69,7 @@ public class GenericTest { expected.addAll(Arrays.asList(decimalFSP.getAvailableLocales())); expected.addAll(Arrays.asList(numberFP.getAvailableLocales())); expected.addAll(Arrays.asList(currencyNP.getAvailableLocales())); + expected.addAll(Arrays.asList(currencyNP2.getAvailableLocales())); expected.addAll(Arrays.asList(localeNP.getAvailableLocales())); expected.addAll(Arrays.asList(tzNP.getAvailableLocales())); expected.addAll(Arrays.asList(calDataP.getAvailableLocales())); diff --git a/jdk/test/java/util/PluggableLocale/LocaleNameProviderTest.java b/jdk/test/java/util/PluggableLocale/LocaleNameProviderTest.java index e8cc6c908fd..c82fab0a514 100644 --- a/jdk/test/java/util/PluggableLocale/LocaleNameProviderTest.java +++ b/jdk/test/java/util/PluggableLocale/LocaleNameProviderTest.java @@ -36,15 +36,21 @@ public class LocaleNameProviderTest extends ProviderTest { } LocaleNameProviderTest() { + checkAvailLocValidityTest(); + variantFallbackTest(); + } + + void checkAvailLocValidityTest() { com.bar.LocaleNameProviderImpl lnp = new com.bar.LocaleNameProviderImpl(); Locale[] availloc = Locale.getAvailableLocales(); Locale[] testloc = availloc.clone(); + List jreimplloc = Arrays.asList(LocaleProviderAdapter.forJRE().getLocaleNameProvider().getAvailableLocales()); List providerloc = Arrays.asList(lnp.getAvailableLocales()); for (Locale target: availloc) { // pure JRE implementation OpenListResourceBundle rb = LocaleProviderAdapter.forJRE().getLocaleData().getLocaleNames(target); - boolean jreHasBundle = rb.getLocale().equals(target); + boolean jreSupportsTarget = jreimplloc.contains(target); for (Locale test: testloc) { // codes @@ -67,7 +73,7 @@ public class LocaleNameProviderTest extends ProviderTest { providersvrnt = lnp.getDisplayVariant(vrnt, target); } - // JRE's name (if any) + // JRE's name String jreslang = null; String jresctry = null; String jresvrnt = null; @@ -84,18 +90,41 @@ public class LocaleNameProviderTest extends ProviderTest { if (!vrnt.equals("")) { try { jresvrnt = rb.getString("%%"+vrnt); - } catch (MissingResourceException mre) { - jresvrnt = vrnt; - } + } catch (MissingResourceException mre) {} } + System.out.print("For key: "+lang+" "); checkValidity(target, jreslang, providerslang, langresult, - jreHasBundle && rb.handleGetKeys().contains(lang)); + jreSupportsTarget && jreslang != null); + System.out.print("For key: "+ctry+" "); checkValidity(target, jresctry, providersctry, ctryresult, - jreHasBundle && rb.handleGetKeys().contains(ctry)); + jreSupportsTarget && jresctry != null); + System.out.print("For key: "+vrnt+" "); checkValidity(target, jresvrnt, providersvrnt, vrntresult, - jreHasBundle && rb.handleGetKeys().contains("%%"+vrnt)); + jreSupportsTarget && jresvrnt != null); } } } + + void variantFallbackTest() { + Locale YY = new Locale("yy", "YY", "YYYY"); + Locale YY_suffix = new Locale("yy", "YY", "YYYY_suffix"); + String retVrnt = null; + String message = "variantFallbackTest() succeeded."; + + + try { + YY.getDisplayVariant(YY_suffix); + message = "variantFallbackTest() failed. Either provider wasn't invoked, or invoked without suffix."; + } catch (RuntimeException re) { + retVrnt = re.getMessage(); + if (YY_suffix.getVariant().equals(retVrnt)) { + System.out.println(message); + return; +} + message = "variantFallbackTest() failed. Returned variant: "+retVrnt; + } + + throw new RuntimeException(message); + } } diff --git a/jdk/test/java/util/PluggableLocale/LocaleNameProviderTest.sh b/jdk/test/java/util/PluggableLocale/LocaleNameProviderTest.sh index 4e7e85b0127..0df042631d3 100644 --- a/jdk/test/java/util/PluggableLocale/LocaleNameProviderTest.sh +++ b/jdk/test/java/util/PluggableLocale/LocaleNameProviderTest.sh @@ -1,5 +1,5 @@ # -# Copyright (c) 2007, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2007, 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 @@ -23,6 +23,6 @@ #!/bin/sh # # @test -# @bug 4052440 +# @bug 4052440 8000273 # @summary LocaleNameProvider tests # @run shell ExecTest.sh bar LocaleNameProviderTest true diff --git a/jdk/test/java/util/PluggableLocale/ProviderTest.java b/jdk/test/java/util/PluggableLocale/ProviderTest.java index 57c8b43de60..32b5b639954 100644 --- a/jdk/test/java/util/PluggableLocale/ProviderTest.java +++ b/jdk/test/java/util/PluggableLocale/ProviderTest.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2007, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2007, 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 @@ -42,5 +42,7 @@ public class ProviderTest { "result do not match with provider's result. target: "+target+" result: "+result+" providers: "+providers); } } + + System.out.println("checkValidity succeeded. target: "+target+" result: "+result+" jre's: "+jres+" providers: "+providers+" jre-preferred: "+jresPreferred); } } diff --git a/jdk/test/java/util/PluggableLocale/TimeZoneNameProviderTest.java b/jdk/test/java/util/PluggableLocale/TimeZoneNameProviderTest.java index 4795ce82c97..cc71e6c6543 100644 --- a/jdk/test/java/util/PluggableLocale/TimeZoneNameProviderTest.java +++ b/jdk/test/java/util/PluggableLocale/TimeZoneNameProviderTest.java @@ -45,13 +45,14 @@ public class TimeZoneNameProviderTest extends ProviderTest { void test1() { Locale[] available = Locale.getAvailableLocales(); + List jreimplloc = Arrays.asList(LocaleProviderAdapter.forJRE().getTimeZoneNameProvider().getAvailableLocales()); List providerLocales = Arrays.asList(tznp.getAvailableLocales()); String[] ids = TimeZone.getAvailableIDs(); for (Locale target: available) { // pure JRE implementation OpenListResourceBundle rb = LocaleProviderAdapter.forJRE().getLocaleData().getTimeZoneNames(target); - boolean jreHasBundle = rb.getLocale().equals(target); + boolean jreSupportsTarget = jreimplloc.contains(target); for (String id: ids) { // the time zone @@ -59,7 +60,7 @@ public class TimeZoneNameProviderTest extends ProviderTest { // JRE string array for the id String[] jrearray = null; - if (jreHasBundle) { + if (jreSupportsTarget) { try { jrearray = rb.getStringArray(id); } catch (MissingResourceException mre) {} @@ -75,14 +76,14 @@ public class TimeZoneNameProviderTest extends ProviderTest { providersname = tznp.getDisplayName(id, i>=3, i%2, target); } - // JRE's name (if any) + // JRE's name String jresname = null; if (jrearray != null) { jresname = jrearray[i]; } checkValidity(target, jresname, providersname, name, - jreHasBundle && rb.handleGetKeys().contains(id)); + jreSupportsTarget && jresname != null); } } } diff --git a/jdk/test/java/util/PluggableLocale/barprovider.jar b/jdk/test/java/util/PluggableLocale/barprovider.jar index dd8b4d01aa3..901b2b2b7f6 100644 Binary files a/jdk/test/java/util/PluggableLocale/barprovider.jar and b/jdk/test/java/util/PluggableLocale/barprovider.jar differ diff --git a/jdk/test/java/util/PluggableLocale/fooprovider.jar b/jdk/test/java/util/PluggableLocale/fooprovider.jar index c1b5723f9b9..125dbe17756 100644 Binary files a/jdk/test/java/util/PluggableLocale/fooprovider.jar and b/jdk/test/java/util/PluggableLocale/fooprovider.jar differ diff --git a/jdk/test/java/util/PluggableLocale/providersrc/CurrencyNameProviderImpl2.java b/jdk/test/java/util/PluggableLocale/providersrc/CurrencyNameProviderImpl2.java new file mode 100644 index 00000000000..5ed7222f95e --- /dev/null +++ b/jdk/test/java/util/PluggableLocale/providersrc/CurrencyNameProviderImpl2.java @@ -0,0 +1,63 @@ +/* + * Copyright (c) 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. + */ +/* + * + */ + +package com.bar; + +import java.util.*; +import java.util.spi.*; + +import com.foobar.Utils; + +public class CurrencyNameProviderImpl2 extends CurrencyNameProvider { + static Locale[] avail = {new Locale("ja", "JP", "tokyo")}; + public Locale[] getAvailableLocales() { + return avail; + } + + @Override + public String getSymbol(String c, Locale locale) { + if (!Utils.supportsLocale(Arrays.asList(avail), locale)) { + throw new IllegalArgumentException("locale is not supported: "+locale); + } + + if (c.equals("JPY") && Utils.supportsLocale(avail[0], locale)) { + return "JPY-tokyo"; + } + return null; + } + + @Override + public String getDisplayName(String c, Locale locale) { + if (!Utils.supportsLocale(Arrays.asList(avail), locale)) { + throw new IllegalArgumentException("locale is not supported: "+locale); + } + + if (c.equals("JPY") && Utils.supportsLocale(avail[0], locale)) { + return "JPY-tokyo"; + } + return null; + } +} diff --git a/jdk/test/java/util/PluggableLocale/providersrc/DateFormatSymbolsProviderImpl.java b/jdk/test/java/util/PluggableLocale/providersrc/DateFormatSymbolsProviderImpl.java index 34a201afb87..25e044b91da 100644 --- a/jdk/test/java/util/PluggableLocale/providersrc/DateFormatSymbolsProviderImpl.java +++ b/jdk/test/java/util/PluggableLocale/providersrc/DateFormatSymbolsProviderImpl.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2007, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2007, 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 @@ -221,5 +221,10 @@ public class DateFormatSymbolsProviderImpl extends DateFormatSymbolsProvider { public void setAmPmStrings(String[] newAmpms) { ampms = newAmpms; } + + @Override + public String[][] getZoneStrings() { + return new String[0][0]; + } } } diff --git a/jdk/test/java/util/PluggableLocale/providersrc/LocaleNameProviderImpl.java b/jdk/test/java/util/PluggableLocale/providersrc/LocaleNameProviderImpl.java index fc3beb8d723..b9f322e5f28 100644 --- a/jdk/test/java/util/PluggableLocale/providersrc/LocaleNameProviderImpl.java +++ b/jdk/test/java/util/PluggableLocale/providersrc/LocaleNameProviderImpl.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2007, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2007, 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 @@ -37,57 +37,64 @@ public class LocaleNameProviderImpl extends LocaleNameProvider { Locale.JAPAN, new Locale("ja", "JP", "osaka"), new Locale("ja", "JP", "kyoto"), - new Locale("xx")}; + new Locale("xx"), + new Locale("yy", "YY", "YYYY")}; static List availList = Arrays.asList(avail); public Locale[] getAvailableLocales() { return avail; } + @Override public String getDisplayLanguage(String lang, Locale target) { + return getDisplayString(lang, target); + } + + @Override + public String getDisplayCountry(String ctry, Locale target) { + return getDisplayString(ctry, target); + } + + @Override + public String getDisplayVariant(String vrnt, Locale target) { + return getDisplayString(vrnt, target); + } + + private String getDisplayString(String key, Locale target) { if (!Utils.supportsLocale(availList, target)) { throw new IllegalArgumentException("locale is not supported: "+target); } String ret = null; + if (target.getLanguage().equals("yy") && + target.getCountry().equals("YY")) { + String vrnt = target.getVariant(); + if (vrnt.startsWith("YYYY")) { + switch (key) { + case "yy": + case "YY": + ret = "waiwai"; + break; + + case "YYYY": + if (vrnt.equals("YYYY_suffix")) { + // for LocaleNameProviderTest.variantFallbackTest() + throw new RuntimeException(vrnt); + } else { + ret = "waiwai"; + } + break; + } + } + } else { + // resource bundle based (allows fallback) try { ResourceBundle rb = ResourceBundle.getBundle("com.bar.LocaleNames", target); - ret = rb.getString(lang); + ret = rb.getString(key); } catch (MissingResourceException mre) { } + } return ret; } - - public String getDisplayCountry(String ctry, Locale target) { - if (!Utils.supportsLocale(availList, target)) { - throw new IllegalArgumentException("locale is not supported: "+target); } - - String ret = null; - - try { - ResourceBundle rb = ResourceBundle.getBundle("LocaleNames", target); - ret = rb.getString(ctry); - } catch (MissingResourceException mre) { - } - - return ret; - } - - public String getDisplayVariant(String vrnt, Locale target) { - if (!Utils.supportsLocale(availList, target)) { - throw new IllegalArgumentException("locale is not supported: "+target); - } - - String ret = null; - - try { - ResourceBundle rb = ResourceBundle.getBundle("LocaleNames", target); - ret = rb.getString(vrnt); - } catch (MissingResourceException mre) { - } - - return ret; - } -} diff --git a/jdk/test/java/util/PluggableLocale/providersrc/Makefile b/jdk/test/java/util/PluggableLocale/providersrc/Makefile index d69cecd149d..3c550992691 100644 --- a/jdk/test/java/util/PluggableLocale/providersrc/Makefile +++ b/jdk/test/java/util/PluggableLocale/providersrc/Makefile @@ -35,6 +35,7 @@ FOOFILES_JAVA = \ BARFILES_JAVA = \ CurrencyNameProviderImpl.java \ + CurrencyNameProviderImpl2.java \ TimeZoneNameProviderImpl.java \ LocaleNameProviderImpl.java \ CalendarDataProviderImpl.java \ diff --git a/jdk/test/java/util/PluggableLocale/providersrc/java.util.spi.CurrencyNameProvider b/jdk/test/java/util/PluggableLocale/providersrc/java.util.spi.CurrencyNameProvider index 938d6b090c1..9817ed386e2 100644 --- a/jdk/test/java/util/PluggableLocale/providersrc/java.util.spi.CurrencyNameProvider +++ b/jdk/test/java/util/PluggableLocale/providersrc/java.util.spi.CurrencyNameProvider @@ -5,3 +5,4 @@ # implementation class # com.bar.CurrencyNameProviderImpl +com.bar.CurrencyNameProviderImpl2 diff --git a/jdk/test/java/util/Properties/LoadAndStoreXML.java b/jdk/test/java/util/Properties/LoadAndStoreXML.java index 8fc5e73ab44..fd1d81f47e6 100644 --- a/jdk/test/java/util/Properties/LoadAndStoreXML.java +++ b/jdk/test/java/util/Properties/LoadAndStoreXML.java @@ -23,7 +23,7 @@ /* * @test - * @bug 8000354 + * @bug 8000354 8000685 * @summary Basic test of storeToXML and loadToXML */ @@ -66,13 +66,13 @@ public class LoadAndStoreXML { * Sanity test that properties saved with Properties#storeToXML can be * read with Properties#loadFromXML. */ - static void test() throws IOException { + static void testLoadAndStore(String encoding) throws IOException { Properties props = new Properties(); props.put("k1", "foo"); props.put("k2", "bar"); ByteArrayOutputStream out = new ByteArrayOutputStream(); - props.storeToXML(out, "no comment"); + props.storeToXML(out, null, encoding); Properties p = new Properties(); ByteArrayInputStream in = new ByteArrayInputStream(out.toByteArray()); @@ -85,19 +85,74 @@ public class LoadAndStoreXML { } } + /** + * Test loadFromXML with a document that does not have an encoding declaration + */ + static void testLoadWithoutEncoding() throws IOException { + Properties expected = new Properties(); + expected.put("foo", "bar"); + + String s = "" + + "" + + "" + + "bar" + + ""; + ByteArrayInputStream in = new ByteArrayInputStream(s.getBytes("UTF-8")); + Properties props = new Properties(); + props.loadFromXML(in); + + if (!props.equals(expected)) { + System.err.println("loaded: " + props + ", expected: " + expected); + throw new RuntimeException("Test failed"); + } + } + + /** + * Test loadFromXML with unsupported encoding + */ + static void testLoadWithBadEncoding() throws IOException { + String s = "" + + "" + + "" + + "bar" + + ""; + ByteArrayInputStream in = new ByteArrayInputStream(s.getBytes("UTF-8")); + Properties props = new Properties(); + try { + props.loadFromXML(in); + throw new RuntimeException("UnsupportedEncodingException expected"); + } catch (UnsupportedEncodingException expected) { } + } + + /** + * Test storeToXML with unsupported encoding + */ + static void testStoreWithBadEncoding() throws IOException { + Properties props = new Properties(); + props.put("foo", "bar"); + ByteArrayOutputStream out = new ByteArrayOutputStream(); + try { + props.storeToXML(out, null, "BAD"); + throw new RuntimeException("UnsupportedEncodingException expected"); + } catch (UnsupportedEncodingException expected) { } + } + public static void main(String[] args) throws IOException { - // run test without security manager - test(); + testLoadAndStore("UTF-8"); + testLoadAndStore("UTF-16"); + testLoadWithoutEncoding(); + testLoadWithBadEncoding(); + testStoreWithBadEncoding(); - // re-run test with security manager + // re-run sanity test with security manager Policy orig = Policy.getPolicy(); Policy p = new SimplePolicy(new RuntimePermission("setSecurityManager"), new PropertyPermission("line.separator", "read")); Policy.setPolicy(p); System.setSecurityManager(new SecurityManager()); try { - test(); + testLoadAndStore("UTF-8"); } finally { // turn off security manager and restore policy System.setSecurityManager(null); diff --git a/jdk/test/java/util/ResourceBundle/Bug4168625Test.java b/jdk/test/java/util/ResourceBundle/Bug4168625Test.java index cf511101bf1..09568a24b9b 100644 --- a/jdk/test/java/util/ResourceBundle/Bug4168625Test.java +++ b/jdk/test/java/util/ResourceBundle/Bug4168625Test.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2007, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2007, 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 diff --git a/jdk/test/java/util/ResourceBundle/Bug6299235Test.sh b/jdk/test/java/util/ResourceBundle/Bug6299235Test.sh index 59128d6faec..ef17b412172 100644 --- a/jdk/test/java/util/ResourceBundle/Bug6299235Test.sh +++ b/jdk/test/java/util/ResourceBundle/Bug6299235Test.sh @@ -1,5 +1,5 @@ # -# Copyright (c) 2007, 2010, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2007, 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 diff --git a/jdk/test/java/util/ResourceBundle/Control/Bug6530694.java b/jdk/test/java/util/ResourceBundle/Control/Bug6530694.java index 7463681a918..97bb919d6bd 100644 --- a/jdk/test/java/util/ResourceBundle/Control/Bug6530694.java +++ b/jdk/test/java/util/ResourceBundle/Control/Bug6530694.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2007, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2007, 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 diff --git a/jdk/test/java/util/ServiceLoader/Basic.java b/jdk/test/java/util/ServiceLoader/Basic.java index 9912d688eb4..9677db7ccbe 100644 --- a/jdk/test/java/util/ServiceLoader/Basic.java +++ b/jdk/test/java/util/ServiceLoader/Basic.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2005, 2006, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2005, 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 @@ -44,10 +44,41 @@ public class Basic { eq, s1, s2)); } - public static void main(String[] args) { + static abstract class TestLoader { + String name; - ServiceLoader sl = ServiceLoader.load(FooService.class); - out.format("%s%n", sl); + TestLoader(String name) { this.name = name; } + + abstract ServiceLoader load(); + } + + static TestLoader tcclLoader = new TestLoader("Thread context class loader") { + ServiceLoader load() { + return ServiceLoader.load(FooService.class); + } + }; + + static TestLoader systemClLoader = new TestLoader("System class loader") { + ServiceLoader load() { + return ServiceLoader.load(FooService.class, ClassLoader.getSystemClassLoader()); + } + }; + + static TestLoader nullClLoader = new TestLoader("null (defer to system class loader)") { + ServiceLoader load() { + return ServiceLoader.load(FooService.class, null); + } + }; + + public static void main(String[] args) { + for (TestLoader tl : Arrays.asList(tcclLoader, systemClLoader, nullClLoader)) { + test(tl); + } + } + + static void test(TestLoader tl) { + ServiceLoader sl = tl.load(); + out.format("%s: %s%n", tl.name, sl); // Providers are cached Set ps = setOf(sl); @@ -58,5 +89,4 @@ public class Basic { checkEquals(ps, setOf(sl), false); } - } diff --git a/jdk/test/java/util/ServiceLoader/basic.sh b/jdk/test/java/util/ServiceLoader/basic.sh index dc9305164a6..259b2e15636 100644 --- a/jdk/test/java/util/ServiceLoader/basic.sh +++ b/jdk/test/java/util/ServiceLoader/basic.sh @@ -1,5 +1,5 @@ # -# Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2005, 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 @@ -22,7 +22,7 @@ # # @test -# @bug 4640520 6354623 +# @bug 4640520 6354623 7198496 # @summary Unit test for java.util.ServiceLoader # # @build Basic Load FooService FooProvider1 FooProvider2 FooProvider3 diff --git a/jdk/test/java/util/Timer/Args.java b/jdk/test/java/util/Timer/Args.java index ab8065c8670..3198a93fbe0 100644 --- a/jdk/test/java/util/Timer/Args.java +++ b/jdk/test/java/util/Timer/Args.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2007, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2007, 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 diff --git a/jdk/test/java/util/Timer/KillThread.java b/jdk/test/java/util/Timer/KillThread.java index dee5eeea208..20733a61bc0 100644 --- a/jdk/test/java/util/Timer/KillThread.java +++ b/jdk/test/java/util/Timer/KillThread.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1999, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1999, 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 diff --git a/jdk/test/java/util/UUID/UUIDTest.java b/jdk/test/java/util/UUID/UUIDTest.java index dca2d775232..de73a66a183 100644 --- a/jdk/test/java/util/UUID/UUIDTest.java +++ b/jdk/test/java/util/UUID/UUIDTest.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, 2004, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 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 diff --git a/jdk/test/java/util/concurrent/FutureTask/BlockingTaskExecutor.java b/jdk/test/java/util/concurrent/FutureTask/BlockingTaskExecutor.java index 05b37082989..b37664aeaf9 100644 --- a/jdk/test/java/util/concurrent/FutureTask/BlockingTaskExecutor.java +++ b/jdk/test/java/util/concurrent/FutureTask/BlockingTaskExecutor.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2006, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2006, 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 diff --git a/jdk/test/java/util/concurrent/ThreadPoolExecutor/Custom.java b/jdk/test/java/util/concurrent/ThreadPoolExecutor/Custom.java index b05b3e826b7..75e5a9144b9 100644 --- a/jdk/test/java/util/concurrent/ThreadPoolExecutor/Custom.java +++ b/jdk/test/java/util/concurrent/ThreadPoolExecutor/Custom.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2005, 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 diff --git a/jdk/test/java/util/concurrent/locks/Lock/FlakyMutex.java b/jdk/test/java/util/concurrent/locks/Lock/FlakyMutex.java index 7722e84e686..e00cf4c612a 100644 --- a/jdk/test/java/util/concurrent/locks/Lock/FlakyMutex.java +++ b/jdk/test/java/util/concurrent/locks/Lock/FlakyMutex.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2006, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2006, 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 diff --git a/jdk/test/java/util/concurrent/locks/Lock/TimedAcquireLeak.java b/jdk/test/java/util/concurrent/locks/Lock/TimedAcquireLeak.java index 72b8f8a5cb8..62749bf6ba3 100644 --- a/jdk/test/java/util/concurrent/locks/Lock/TimedAcquireLeak.java +++ b/jdk/test/java/util/concurrent/locks/Lock/TimedAcquireLeak.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2007, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2007, 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 diff --git a/jdk/test/java/util/logging/LoggingDeadlock4.java b/jdk/test/java/util/logging/LoggingDeadlock4.java index 39956255783..f52d74b1277 100644 --- a/jdk/test/java/util/logging/LoggingDeadlock4.java +++ b/jdk/test/java/util/logging/LoggingDeadlock4.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2011, 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 diff --git a/jdk/test/java/util/logging/LoggingMXBeanTest.java b/jdk/test/java/util/logging/LoggingMXBeanTest.java index e6c694d37e4..a01e57c1357 100644 --- a/jdk/test/java/util/logging/LoggingMXBeanTest.java +++ b/jdk/test/java/util/logging/LoggingMXBeanTest.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, 2004, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 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 @@ -43,6 +43,8 @@ public class LoggingMXBeanTest ObjectName objectName = null; static String LOGGER_NAME_1 = "com.sun.management.Logger1"; static String LOGGER_NAME_2 = "com.sun.management.Logger2"; + static Logger logger1; + static Logger logger2; public LoggingMXBeanTest() throws Exception { @@ -131,8 +133,8 @@ public class LoggingMXBeanTest System.out.println( "*********** Phase 3 ***********" ); System.out.println( "*******************************" ); System.out.println( " Create and test new Loggers" ); - Logger logger1 = Logger.getLogger( LOGGER_NAME_1 ); - Logger logger2 = Logger.getLogger( LOGGER_NAME_2 ); + logger1 = Logger.getLogger( LOGGER_NAME_1 ); + logger2 = Logger.getLogger( LOGGER_NAME_2 ); // check that Level object are returned properly try { diff --git a/jdk/test/java/util/logging/LoggingMXBeanTest2.java b/jdk/test/java/util/logging/LoggingMXBeanTest2.java index 37b6aceb023..005ed72e03a 100644 --- a/jdk/test/java/util/logging/LoggingMXBeanTest2.java +++ b/jdk/test/java/util/logging/LoggingMXBeanTest2.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2004, Oracle and/or its affiliates. All rights reserved. + * 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 @@ -42,12 +42,14 @@ public class LoggingMXBeanTest2 static String LOGGER_NAME_1 = "com.sun.management.Logger"; static String LOGGER_NAME_2 = "com.sun.management.Logger.Logger2"; static String UNKNOWN_LOGGER_NAME = "com.sun.management.Unknown"; + static Logger logger1; + static Logger logger2; public LoggingMXBeanTest2() throws Exception { - Logger logger1 = Logger.getLogger( LOGGER_NAME_1 ); + logger1 = Logger.getLogger( LOGGER_NAME_1 ); logger1.setLevel(Level.FINE); - Logger logger2 = Logger.getLogger( LOGGER_NAME_2 ); + logger2 = Logger.getLogger( LOGGER_NAME_2 ); logger2.setLevel(null); /* diff --git a/jdk/test/java/util/logging/MemoryHandlerTest.java b/jdk/test/java/util/logging/MemoryHandlerTest.java new file mode 100644 index 00000000000..026e571859f --- /dev/null +++ b/jdk/test/java/util/logging/MemoryHandlerTest.java @@ -0,0 +1,156 @@ +/* + * Copyright (c) 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 7159567 + * @summary Test of configuring a MemoryHandler sub-class handler target via logging.properties + * @run main/othervm MemoryHandlerTest + */ +import java.io.File; +import java.io.IOException; +import java.util.logging.Handler; +import java.util.logging.Level; +import java.util.logging.LogManager; +import java.util.logging.LogRecord; +import java.util.logging.Logger; +import java.util.logging.MemoryHandler; + +public class MemoryHandlerTest { + + static final String CFG_FILE_PROP = "java.util.logging.config.file"; + static final String LM_PROP_FNAME = "MemoryHandlerTest.props"; + static Logger logger; + + public static void main(String... args) throws IOException { + // load logging.propertes for the test + String tstSrc = System.getProperty("test.src", "."); + File fname = new File(tstSrc, LM_PROP_FNAME); + String prop = fname.getCanonicalPath(); + System.setProperty(CFG_FILE_PROP, prop); + LogManager logMgr = LogManager.getLogManager(); + // create a logger + logger = Logger.getLogger(MemoryHandlerTest.class.getName()); + // don't have parent handlers get log messages + logger.setUseParentHandlers(false); + // + // Test 1,2: create a CustomMemoryHandler which in the config has + // specified a target of CustomTargetHandler. (1) Make sure that it + // is created and (2) that the target handler is loaded. + // + CustomMemoryHandler cmh = new CustomMemoryHandler(); + try { + logger.addHandler(cmh); + } catch (RuntimeException rte) { + throw new RuntimeException( + "Test Failed: did not load java.util.logging.ConsoleHandler as expected", + rte); + } + // if we get here and our config has been processed properly, then we + // should have loaded our target handler + if (CustomTargetHandler.numLoaded !=1) { + throw new RuntimeException( + "Test failed: did not load CustomTargetHandler as expected"); + } + // + // Test 3: try to add a handler with no target. This should fail with + // an exception + CustomMemoryHandlerNoTarget cmhnt = null; + try { + cmhnt = new CustomMemoryHandlerNoTarget(); + } catch (RuntimeException re) { + // expected -- no target specified + System.out.println("Info: " + re.getMessage() + " as expected."); + } + if (cmhnt != null) { + throw new RuntimeException( + "Test Failed: erroneously loaded CustomMemoryHandlerNoTarget"); + } + + // Test 4: log a message and check that the target handler is actually used + logger.log(Level.WARNING, "Unused"); + if (CustomTargetHandler.numPublished != 1) { + throw new RuntimeException("Test failed: CustomTargetHandler was not used"); + } + + // Test 5: make sure that SimpleTargetHandler hasn't been erroneously called + if (SimpleTargetHandler.numPublished != 0) { + throw new RuntimeException("Test failed: SimpleTargetHandler has been used"); + } + + // Test 6: try using SimpleTargetHanlder via standard MemoryHandler + // (which has target set to SimpleTargetHandler) + MemoryHandler mh = new MemoryHandler(); + mh.publish(new LogRecord(Level.INFO, "Unused msg to MemoryHandler")); + // see if it made it to the SimpleTargetHandler + if (SimpleTargetHandler.numPublished != 1) { + throw new RuntimeException("Test failed: SimpleTargetHandler was not used"); + } + } + + public static class CustomMemoryHandler extends MemoryHandler { + } + + public static class CustomMemoryHandlerNoTarget extends MemoryHandler { + } + + public static class CustomTargetHandler extends Handler { + + public static int numPublished; + public static int numLoaded; + + public CustomTargetHandler() { + numLoaded++; + } + + @Override + public void publish(LogRecord unused) { + numPublished++; + } + + @Override + public void flush() { + } + + @Override + public void close() throws SecurityException { + } + } + + public static class SimpleTargetHandler extends Handler { + public static int numPublished; + + @Override + public void publish(LogRecord unused) { + numPublished++; + } + + @Override + public void flush() { + } + + @Override + public void close() throws SecurityException { + } + } +} diff --git a/jdk/test/java/util/logging/MemoryHandlerTest.props b/jdk/test/java/util/logging/MemoryHandlerTest.props new file mode 100644 index 00000000000..4860569ebbc --- /dev/null +++ b/jdk/test/java/util/logging/MemoryHandlerTest.props @@ -0,0 +1,9 @@ +.level= INFO +MemoryHandlerTest$CustomMemoryHandler.push=WARNING +MemoryHandlerTest$CustomMemoryHandlerNoTarget.push=WARNING +MemoryHandlerTest$CustomMemoryHandler.target=MemoryHandlerTest$CustomTargetHandler +handlers=java.util.logging.ConsoleHandler,MemoryHandlerTest$CustomMemoryHandler,MemoryHandlerTest$CustomMemoryHandlerNoTarget +java.util.logging.ConsoleHandler.formatter = java.util.logging.SimpleFormatter +java.util.logging.ConsoleHandler.level = INFO +java.util.logging.MemoryHandler.target=MemoryHandlerTest$SimpleTargetHandler +java.util.logging.MemoryHandler.push = INFO diff --git a/jdk/test/java/util/prefs/CheckUserPrefFirst.java b/jdk/test/java/util/prefs/CheckUserPrefFirst.java new file mode 100644 index 00000000000..d0ee277adf1 --- /dev/null +++ b/jdk/test/java/util/prefs/CheckUserPrefFirst.java @@ -0,0 +1,43 @@ +/* + * Copyright (c) 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. 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. + */ + +import java.util.prefs.Preferences; + +/** + * + * @author khazra + * First class called by CheckUserPrefsStorage.sh to create and + * store a user preference + */ + +public class CheckUserPrefFirst { + + public static void main(String[] args) throws Exception { + Preferences prefs = Preferences.userNodeForPackage(CheckUserPrefFirst.class); + prefs.put("Check", "Success"); + prefs.flush(); + } +} + diff --git a/jdk/test/java/util/prefs/CheckUserPrefLater.java b/jdk/test/java/util/prefs/CheckUserPrefLater.java new file mode 100644 index 00000000000..555a9ad176c --- /dev/null +++ b/jdk/test/java/util/prefs/CheckUserPrefLater.java @@ -0,0 +1,46 @@ +/* + * Copyright (c) 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. 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. + */ + +import java.util.prefs.Preferences; + +/** + * CheckUserPrefsStorage.sh uses this to check that preferences stored + * by CheckUserPrefFirst.java can be retrieved + * @author khazra + */ + +public class CheckUserPrefLater { + + public static void main(String[] args) throws Exception { + Preferences prefs = Preferences.userNodeForPackage(CheckUserPrefFirst.class); + String result = prefs.get("Check", null); + if ((result == null) || !(result.equals("Success"))) + throw new RuntimeException("User pref not stored!"); + prefs.remove("Check"); + prefs.flush(); + } + +} + diff --git a/jdk/test/java/util/prefs/CheckUserPrefsStorage.sh b/jdk/test/java/util/prefs/CheckUserPrefsStorage.sh new file mode 100644 index 00000000000..71ded594cb2 --- /dev/null +++ b/jdk/test/java/util/prefs/CheckUserPrefsStorage.sh @@ -0,0 +1,68 @@ +# +# Copyright (c) 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 7198073 +# @build CheckUserPrefFirst CheckUserPrefLater +# @run shell CheckUserPrefsStorage.sh +# @summary Tests that user preferences are stored in the +# permanent storage +# + +OS=`uname -s` +case "$OS" in + SunOS | Linux | Darwin ) + PS=":" + FS="/" + ;; + CYGWIN* ) + PS=";" + FS="/" + ;; + Windows* ) + PS=";" + FS="\\" + ;; + * ) + echo "Unrecognized system!" + exit 1; + ;; +esac + +# run CheckUserPrefFirst - creates and stores a user pref +${TESTJAVA}${FS}bin${FS}java -cp ${TESTCLASSES} CheckUserPrefFirst +result=$? +if [ "$result" -ne "0" ]; then + exit 1 +fi + +# run CheckUserPrefLater - Looks for the stored pref +${TESTJAVA}${FS}bin${FS}java -cp ${TESTCLASSES} CheckUserPrefLater +result=$? +if [ "$result" -ne "0" ]; then + exit 1 +fi + +# no failures, exit. +exit 0 + diff --git a/jdk/test/java/util/regex/RegExTest.java b/jdk/test/java/util/regex/RegExTest.java index e2b61d83407..3f8679ae976 100644 --- a/jdk/test/java/util/regex/RegExTest.java +++ b/jdk/test/java/util/regex/RegExTest.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1999, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1999, 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 diff --git a/jdk/test/java/util/zip/ZipFile/ManyZipFiles.java b/jdk/test/java/util/zip/ZipFile/ManyZipFiles.java index fe2da9964e8..265a672f9b1 100644 --- a/jdk/test/java/util/zip/ZipFile/ManyZipFiles.java +++ b/jdk/test/java/util/zip/ZipFile/ManyZipFiles.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2006, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2006, 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 diff --git a/jdk/test/javax/crypto/SecretKeyFactory/FailOverTest.sh b/jdk/test/javax/crypto/SecretKeyFactory/FailOverTest.sh index 01dc34ce5bf..b23e2bd99a2 100644 --- a/jdk/test/javax/crypto/SecretKeyFactory/FailOverTest.sh +++ b/jdk/test/javax/crypto/SecretKeyFactory/FailOverTest.sh @@ -1,5 +1,5 @@ # -# Copyright (c) 2006, 2007, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2006, 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 diff --git a/jdk/test/javax/crypto/sanity/CheckManifestForRelease.java b/jdk/test/javax/crypto/sanity/CheckManifestForRelease.java new file mode 100644 index 00000000000..1d87575baa5 --- /dev/null +++ b/jdk/test/javax/crypto/sanity/CheckManifestForRelease.java @@ -0,0 +1,123 @@ +/* + * Copyright (c) 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 7197071 + * @summary Makefiles for various security providers aren't including + * the default manifest. + */ +import java.net.*; +import java.io.*; + +/** + * When the Java specification version is incremented, all of the providers + * must be recompiled with the proper implementation version to match. + */ +public class CheckManifestForRelease { + + /** + * @param args the command line arguments + */ + public static void main(String[] args) throws Exception { + checkFileManifests(); + } + + /* + * Iterate over the files of interest: JCE framework and providers + */ + static private void checkFileManifests() throws Exception { + System.out.println("============="); + String libDirName = System.getProperty("java.home", ".") + "/lib"; + String extDirName = libDirName + "/ext"; + + System.out.println("Checking Manifest in directory: \n " + + extDirName); + + /* + * Current list of JCE providers, all of which currently live in + * the extensions directory. Add if more are created. + */ + String[] providers = new String[]{ + "sunjce_provider.jar", + "sunec.jar", + "sunmscapi.jar", + "sunpkcs11.jar", + "ucrypto.jar" + }; + + checkManifest(libDirName, "jce.jar"); + for (String provider : providers) { + checkManifest(extDirName, provider); + } + System.out.println("Passed."); + } + + // Helper method to format the URL properly. + static private String formatURL(String dir, String file) { + return "jar:file:///" + dir + "/" + file + "!/"; + } + + static private String specVersion = + System.getProperty("java.specification.version"); + + /* + * Test the root cause, which is that there were no manifest values + * for many of the providers, and for those that had them, there was + * no test to make sure that the impl version was appropriate for + * the spec version. + */ + static private void checkManifest(String dir, String file) + throws Exception { + + System.out.println("Checking: " + file); + + String url = formatURL(dir, file); + JarURLConnection urlc = + (JarURLConnection) (new URL(url).openConnection()); + + String implVersion; + try { + implVersion = urlc.getManifest().getMainAttributes().getValue( + "Implementation-Version"); + } catch (FileNotFoundException e) { + /* + * If the file doesn't exist (e.g. mscapi on solaris), + * skip it. If there are other problems, fail out. + */ + System.out.println(" " + file + " not found, skipping..."); + return; + } + + if (implVersion == null) { + throw new Exception( + "Implementation-Version not found in Manifest"); + } + + if (!implVersion.startsWith(specVersion)) { + throw new Exception( + "Implementation-Version does not match " + + "Specification-Version"); + } + } +} diff --git a/jdk/test/javax/imageio/stream/StreamCloserLeak/run_test.sh b/jdk/test/javax/imageio/stream/StreamCloserLeak/run_test.sh index 1eb3d34ca98..18ffc1c8d40 100644 --- a/jdk/test/javax/imageio/stream/StreamCloserLeak/run_test.sh +++ b/jdk/test/javax/imageio/stream/StreamCloserLeak/run_test.sh @@ -1,6 +1,6 @@ #!/bin/ksh -p # -# Copyright (c) 2009, 2010, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2009, 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 @@ -78,28 +78,44 @@ OS=`uname -s` case "$OS" in SunOS ) VAR="One value for Sun" - DEFAULT_JDK=/usr/local/java/jdk1.2/solaris + DEFAULT_JDK=/ FILESEP="/" PATHSEP=":" TMP="/tmp" ;; - Linux | Darwin ) + Linux ) VAR="A different value for Linux" - DEFAULT_JDK=/usr/local/java/jdk1.4/linux-i386 + DEFAULT_JDK=/ FILESEP="/" PATHSEP=":" TMP="/tmp" ;; - Windows_95 | Windows_98 | Windows_NT | Windows_ME | CYGWIN* ) + Darwin ) + VAR="A different value for MacOSX" + DEFAULT_JDK=/usr + FILESEP="/" + PATHSEP=":" + TMP="/tmp" + ;; + + Windows* ) VAR="A different value for Win32" - DEFAULT_JDK=/usr/local/java/jdk1.2/win32 + DEFAULT_JDK="C:/Program Files/Java/jdk1.8.0" FILESEP="\\" PATHSEP=";" TMP=`cd "${SystemRoot}/Temp"; echo ${PWD}` ;; + CYGWIN* ) + VAR="A different value for Cygwin" + DEFAULT_JDK="/cygdrive/c/Program\ Files/Java/jdk1.8.0" + FILESEP="/" + PATHSEP=";" + TMP=`cd "${SystemRoot}/Temp"; echo ${PWD}` + ;; + # catch all other OSs * ) echo "Unrecognized system! $OS" diff --git a/jdk/test/javax/management/remote/mandatory/URLTest.java b/jdk/test/javax/management/remote/mandatory/URLTest.java index 4649ec580c6..bf84b44e7d9 100644 --- a/jdk/test/javax/management/remote/mandatory/URLTest.java +++ b/jdk/test/javax/management/remote/mandatory/URLTest.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2004, 2005, Oracle and/or its affiliates. All rights reserved. + * 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 @@ -24,8 +24,6 @@ /* * @test * @bug 5057532 - * @ignore Test will fail until 6338951 is resolved (java.net.URI now - * accepts "http://-a"). * @summary Tests that host names are parsed correctly in URLs * @author Eamonn McManus * @run clean URLTest diff --git a/jdk/test/javax/management/remote/mandatory/notif/ListenerScaleTest.java b/jdk/test/javax/management/remote/mandatory/notif/ListenerScaleTest.java index b6cd2999bb1..0b09931b0f7 100644 --- a/jdk/test/javax/management/remote/mandatory/notif/ListenerScaleTest.java +++ b/jdk/test/javax/management/remote/mandatory/notif/ListenerScaleTest.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2006, 2008, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2006, 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 diff --git a/jdk/test/javax/management/timer/MissingNotificationTest.java b/jdk/test/javax/management/timer/MissingNotificationTest.java new file mode 100644 index 00000000000..39da6cb1098 --- /dev/null +++ b/jdk/test/javax/management/timer/MissingNotificationTest.java @@ -0,0 +1,130 @@ +/* + * Copyright (c) 2008, 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 6809322 + * @summary Test for missing notifications in a high concurrency environment + * @author Jaroslav Bachorik + * @run clean MissingNotificationTest + * @run build MissingNotificationTest + * @run main MissingNotificationTest + */ + +import java.util.Date; +import java.util.Random; +import java.util.concurrent.ExecutorService; +import java.util.concurrent.Executors; +import java.util.concurrent.TimeUnit; +import javax.management.timer.Timer; +import javax.management.Notification; +import javax.management.NotificationListener; + +public class MissingNotificationTest { + private static int TASK_COUNT = 10000; + private static long fixedDelay = 0;// anything bigger than 100 and no alarms remain unfired + + private static class NotifListener implements NotificationListener { + + int count; + + public synchronized void handleNotification(Notification notification, Object handback) { + count++; + } + + synchronized int getCount() { + return count; + } + } + + public static void main(String[] args) throws Exception { + System.out.println( + ">>> Test for missing notifications."); + + System.out.println(">>> Create a Timer object."); + final Timer timer = new Timer(); + + timer.start(); + + NotifListener listener = new NotifListener(); + timer.addNotificationListener(listener, null, null); + + ExecutorService executor = Executors.newFixedThreadPool(100); + final Random rand = new Random(); + + + for (int i = 0; i < TASK_COUNT; i++) { + executor.execute(new Runnable() { + public void run() { + long dateMillis = System.currentTimeMillis() + fixedDelay + rand.nextInt(2000); + Date date = new Date(dateMillis); + timer.addNotification("type", "msg", "userData", date); + } + }); + + } + + executor.shutdown(); + executor.awaitTermination(20, TimeUnit.SECONDS); + + waitForNotificationsToEnd(listener); + + timer.stop(); + + if (listener.count < TASK_COUNT) { + throw new RuntimeException("Not fired: " + (TASK_COUNT - listener.count)); + } else { + System.out.println(">>> All notifications handled OK"); + } + + System.out.println(">>> Bye bye!"); + } + + /** + * Will return when all notifications are handled or after 10sec. of no new + * notifications + * + * @param listener + * @throws InterruptedException + */ + private static void waitForNotificationsToEnd(NotifListener listener) + throws InterruptedException { + int oldCout = listener.getCount(); + int noChangeCounter = 1; + while (listener.getCount() < TASK_COUNT) { + Thread.sleep(1000); + System.out.print('.'); + if (oldCout == listener.getCount())//no change + { + if (++noChangeCounter > 10) { + break; + } + } else { + noChangeCounter = 1; + } + + oldCout = listener.getCount(); + } + System.out.println(); + } +} diff --git a/jdk/test/javax/naming/spi/DirectoryManager/GetContDirCtx.java b/jdk/test/javax/naming/spi/DirectoryManager/GetContDirCtx.java index 520da9d3933..508f96716f1 100644 --- a/jdk/test/javax/naming/spi/DirectoryManager/GetContDirCtx.java +++ b/jdk/test/javax/naming/spi/DirectoryManager/GetContDirCtx.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1999, 2003, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1999, 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 diff --git a/jdk/test/javax/script/CommonSetup.sh b/jdk/test/javax/script/CommonSetup.sh index c604cfb6a97..37dff6380c3 100644 --- a/jdk/test/javax/script/CommonSetup.sh +++ b/jdk/test/javax/script/CommonSetup.sh @@ -1,7 +1,7 @@ #!/bin/sh # -# Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2005, 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 diff --git a/jdk/test/javax/security/auth/Subject/Synch.java b/jdk/test/javax/security/auth/Subject/Synch.java index 9acc2185282..8c392a31d0b 100644 --- a/jdk/test/javax/security/auth/Subject/Synch.java +++ b/jdk/test/javax/security/auth/Subject/Synch.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 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 diff --git a/jdk/test/javax/security/auth/Subject/Synch2.java b/jdk/test/javax/security/auth/Subject/Synch2.java index c88fbee5ea2..1fe6a437597 100644 --- a/jdk/test/javax/security/auth/Subject/Synch2.java +++ b/jdk/test/javax/security/auth/Subject/Synch2.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 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 diff --git a/jdk/test/javax/security/auth/Subject/Synch3.java b/jdk/test/javax/security/auth/Subject/Synch3.java index e058702a97b..56f8d57584b 100644 --- a/jdk/test/javax/security/auth/Subject/Synch3.java +++ b/jdk/test/javax/security/auth/Subject/Synch3.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 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 diff --git a/jdk/test/javax/security/auth/Subject/doAs/Test.sh b/jdk/test/javax/security/auth/Subject/doAs/Test.sh index bac30854434..cbf94e031f0 100644 --- a/jdk/test/javax/security/auth/Subject/doAs/Test.sh +++ b/jdk/test/javax/security/auth/Subject/doAs/Test.sh @@ -1,7 +1,7 @@ #! /bin/sh # -# Copyright (c) 2001, 2003, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2001, 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 diff --git a/jdk/test/javax/security/auth/login/LoginContext/ResetConfigModule.java b/jdk/test/javax/security/auth/login/LoginContext/ResetConfigModule.java index b0f372f48ca..a9a4b6e82c5 100644 --- a/jdk/test/javax/security/auth/login/LoginContext/ResetConfigModule.java +++ b/jdk/test/javax/security/auth/login/LoginContext/ResetConfigModule.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2002, 2003, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2002, 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 diff --git a/jdk/test/javax/swing/AncestorNotifier/7193219/bug7193219.java b/jdk/test/javax/swing/AncestorNotifier/7193219/bug7193219.java new file mode 100644 index 00000000000..0db4839dc50 --- /dev/null +++ b/jdk/test/javax/swing/AncestorNotifier/7193219/bug7193219.java @@ -0,0 +1,83 @@ +/* + * Copyright (c) 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 7193219 + @summary JComboBox serialization fails in JDK 1.7 + @author Anton Litvinov +*/ + +import java.io.*; + +import javax.swing.*; + +public class bug7193219 { + private static byte[] serializeGUI() { + // Create and set up the window. + JFrame frame = new JFrame("Serialization"); + JPanel mainPanel = new JPanel(); + + /** + * If JComboBox is replaced with other component like JLabel + * The issue does not happen. + */ + JComboBox status = new JComboBox(); + status.addItem("123"); + mainPanel.add(status); + frame.getContentPane().add(mainPanel); + frame.pack(); + + try { + ByteArrayOutputStream baos = new ByteArrayOutputStream(); + ObjectOutputStream oos = new ObjectOutputStream(baos); + oos.writeObject(mainPanel); + oos.flush(); + frame.dispose(); + return baos.toByteArray(); + } catch (IOException ioe) { + throw new RuntimeException(ioe); + } + } + + private static void deserializeGUI(byte[] serializedData) { + try { + ObjectInputStream ois = new ObjectInputStream(new ByteArrayInputStream(serializedData)); + JPanel mainPanel = (JPanel)ois.readObject(); + JFrame frame = new JFrame("Deserialization"); + frame.getContentPane().add(mainPanel); + frame.pack(); + frame.dispose(); + } catch (Exception e) { + throw new RuntimeException(e); + } + } + + public static void main(String[] args) throws Exception { + SwingUtilities.invokeAndWait(new Runnable() { + @Override + public void run() { + deserializeGUI(serializeGUI()); + } + }); + } +} diff --git a/jdk/test/javax/swing/JMenuItem/4654927/bug4654927.java b/jdk/test/javax/swing/JMenuItem/4654927/bug4654927.java new file mode 100644 index 00000000000..cac3386567a --- /dev/null +++ b/jdk/test/javax/swing/JMenuItem/4654927/bug4654927.java @@ -0,0 +1,152 @@ +/* + * Copyright (c) 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 4654927 + * @summary Clicking on Greyed Menuitems closes the Menubar Dropdown + * @author Alexander Potochkin + * @library ../../regtesthelpers + * @build Util + * @run main bug4654927 + */ + +import javax.swing.*; + +import java.awt.*; +import java.awt.event.InputEvent; +import java.util.concurrent.Callable; +import sun.awt.SunToolkit; + +public class bug4654927 { + + private static volatile JMenu menu; + private static volatile JMenuItem menuItem; + + public static void main(String[] args) throws Exception { + String systemLAF = UIManager.getSystemLookAndFeelClassName(); + // the test is not applicable to Motif L&F + if(systemLAF.endsWith("MotifLookAndFeel")){ + return; + } + + UIManager.setLookAndFeel(systemLAF); + SunToolkit toolkit = (SunToolkit) Toolkit.getDefaultToolkit(); + Robot robot = new Robot(); + robot.setAutoDelay(10); + + SwingUtilities.invokeAndWait(new Runnable() { + + public void run() { + createAndShowUI(); + } + }); + toolkit.realSync(); + + // test mouse press + Point point = Util.getCenterPoint(menu); + robot.mouseMove(point.x, point.y); + robot.mousePress(InputEvent.BUTTON1_MASK); + robot.mouseRelease(InputEvent.BUTTON1_MASK); + toolkit.realSync(); + + point = Util.getCenterPoint(menuItem); + robot.mouseMove(point.x, point.y); + robot.mousePress(InputEvent.BUTTON1_MASK); + robot.mouseRelease(InputEvent.BUTTON1_MASK); + toolkit.realSync(); + + if (!isMenuItemShowing()) { + throw new RuntimeException("Popup is unexpectedly closed"); + } + + // test mouse drag + point = Util.getCenterPoint(menu); + robot.mouseMove(point.x, point.y); + Point menuLocation = Util.invokeOnEDT(new Callable() { + + @Override + public Point call() throws Exception { + return menu.getLocationOnScreen(); + } + }); + + Point itemLocation = Util.invokeOnEDT(new Callable() { + + @Override + public Point call() throws Exception { + return menuItem.getLocationOnScreen(); + } + }); + + int x0 = menuLocation.x + 10; + int y0 = menuLocation.y + 10; + int x1 = itemLocation.x + 10; + int y1 = itemLocation.y + 10; + + // close menu + robot.mousePress(InputEvent.BUTTON1_MASK); + robot.mouseRelease(InputEvent.BUTTON1_MASK); + toolkit.realSync(); + + robot.mousePress(InputEvent.BUTTON1_MASK); + Util.glide(robot, x0, y0, x1, y1); + robot.mouseRelease(InputEvent.BUTTON1_MASK); + toolkit.realSync(); + + if (!isMenuItemShowing()) { + throw new RuntimeException("Popup is unexpectedly closed"); + } + } + + private static boolean isMenuItemShowing() throws Exception { + return Util.invokeOnEDT(new Callable() { + + @Override + public Boolean call() throws Exception { + return menuItem.isShowing(); + } + }); + } + + private static void createAndShowUI() { + JFrame frame = new JFrame(); + frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); + + menu = new JMenu("Menu"); + menu.add(new JMenuItem("menuItem")); + menuItem = new JMenuItem("menuItem"); + menuItem.setEnabled(false); + menu.add(menuItem); + menu.add(new JMenuItem("menuItem")); + + JMenuBar bar = new JMenuBar(); + bar.add(menu); + frame.setJMenuBar(bar); + + frame.setSize(200, 200); + frame.setLocationRelativeTo(null); + frame.setVisible(true); + + } +} diff --git a/jdk/test/javax/swing/JMenuItem/ActionListenerCalledTwice/ActionListenerCalledTwiceTest.java b/jdk/test/javax/swing/JMenuItem/ActionListenerCalledTwice/ActionListenerCalledTwiceTest.java new file mode 100644 index 00000000000..47761ec13d2 --- /dev/null +++ b/jdk/test/javax/swing/JMenuItem/ActionListenerCalledTwice/ActionListenerCalledTwiceTest.java @@ -0,0 +1,83 @@ +/* + * Copyright (c) 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 7160951 + * @summary [macosx] ActionListener called twice for JMenuItem using ScreenMenuBar + * @author vera.akulova@oracle.com + * @run main ActionListenerCalledTwiceTest + */ + +import sun.awt.*; +import java.awt.*; +import java.awt.event.*; +import javax.swing.*; + +public class ActionListenerCalledTwiceTest { + static volatile int listenerCallCounter = 0; + public static void main(String[] args) throws Exception { + if (sun.awt.OSInfo.getOSType() != sun.awt.OSInfo.OSType.MACOSX) { + System.out.println("This test is for MacOS only. Automatically passed on other platforms."); + return; + } + System.setProperty("apple.laf.useScreenMenuBar", "true"); + SwingUtilities.invokeAndWait(new Runnable() { + public void run() { + createAndShowGUI(); + } + }); + SunToolkit toolkit = (SunToolkit) Toolkit.getDefaultToolkit(); + Robot robot = new Robot(); + robot.setAutoDelay(100); + robot.keyPress(KeyEvent.VK_META); + robot.keyPress(KeyEvent.VK_E); + robot.keyRelease(KeyEvent.VK_E); + robot.keyRelease(KeyEvent.VK_META); + toolkit.realSync(); + if (listenerCallCounter != 1) { + throw new Exception("Test failed: ActionListener called " + listenerCallCounter + " times instead of 1!"); + } + } + + private static void createAndShowGUI() { + JMenuItem newItem = new JMenuItem("Exit"); + newItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_E, InputEvent.META_MASK)); + newItem.addActionListener( + new ActionListener(){ + public void actionPerformed(ActionEvent e) { + listenerCallCounter++; + } + } + ); + JMenu menu = new JMenu("Menu"); + menu.add(newItem); + JMenuBar bar = new JMenuBar(); + bar.add(menu); + JFrame frame = new JFrame("Test"); + frame.setJMenuBar(bar); + frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); + frame.pack(); + frame.setVisible(true); + } +} diff --git a/jdk/test/javax/swing/JMenuItem/ShortcutNotDiplayed/ShortcutNotDisplayedTest.java b/jdk/test/javax/swing/JMenuItem/ShortcutNotDiplayed/ShortcutNotDisplayedTest.java new file mode 100644 index 00000000000..3d8c541b90d --- /dev/null +++ b/jdk/test/javax/swing/JMenuItem/ShortcutNotDiplayed/ShortcutNotDisplayedTest.java @@ -0,0 +1,105 @@ +/* + * Copyright (c) 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 7186371 + * @summary [macosx] Main menu shortcuts not displayed + * @author vera.akulova@oracle.com + * @run main/manual ShortcutNotDisplayedTest + */ + +import java.awt.*; +import java.awt.event.*; +import javax.swing.*; + +public class ShortcutNotDisplayedTest { + static volatile boolean done = false; + static volatile boolean pass = false; + static final String PASS_COMMAND = "pass"; + + public static void main(String[] args) throws Exception { + if (sun.awt.OSInfo.getOSType() != sun.awt.OSInfo.OSType.MACOSX) { + System.out.println("This test is for MacOS only. Automatically passed on other platforms."); + return; + } + System.setProperty("apple.laf.useScreenMenuBar", "true"); + SwingUtilities.invokeAndWait(new Runnable() { + public void run() { + createAndShowGUI(); + } + }); + + do { try { Thread.sleep(300); } catch (Exception e) {} } while (!done) ; + if (!pass) { + throw new Exception("Shortcuts not displayed as expected in the screen menu bar."); + } + } + + private static void createAndShowGUI() { + JMenuItem newItem = new JMenuItem("Exit"); + newItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_E, java.awt.event.InputEvent.META_MASK)); + + JMenu menu = new JMenu("Test Frame Window Menu"); + menu.setMnemonic(KeyEvent.VK_M); + menu.add(newItem); + + JMenuBar bar = new JMenuBar(); + bar.add(menu); + JTextArea text = new JTextArea( + " Please follow instructions:\n" + + " 1. You should see \"Test Frame Window Menu\" menu on the screen menu bar.\n" + + " 2. Open \"Test Frame Window Menu\" menu. \n" + + " Check that menu item \"Exit\" has a shortcut with image for Command Key and symbol \"E\". \n" + + " If you see the shortcut press \"Passed\". Otherwise press \"Failed\".\n" + ); + text.setEditable(false); + + JScrollPane sp = new JScrollPane(text); + sp.setSize(300,200); + + JButton passBtn = new JButton("Pass"); + passBtn.setActionCommand(PASS_COMMAND); + JButton failBtn = new JButton("Fail"); + ActionListener listener = new ActionListener() { + public void actionPerformed(ActionEvent e) { + if (e.getActionCommand().equals(PASS_COMMAND)) { + pass = true; + } + done = true; + } + }; + + JFrame testFrame = new JFrame("Test Frame Window"); + testFrame.setLayout(new FlowLayout()); + testFrame.setBounds(100, 100, 600, 180); + testFrame.setJMenuBar(bar); + testFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); + passBtn.addActionListener(listener); + failBtn.addActionListener(listener); + testFrame.getContentPane().add(sp); + testFrame.getContentPane().add(passBtn); + testFrame.getContentPane().add(failBtn); + testFrame.setVisible(true); + } +} diff --git a/jdk/test/javax/swing/plaf/windows/WindowsRootPaneUI/WrongAltProcessing/WrongAltProcessing.java b/jdk/test/javax/swing/plaf/windows/WindowsRootPaneUI/WrongAltProcessing/WrongAltProcessing.java new file mode 100644 index 00000000000..e09087537c2 --- /dev/null +++ b/jdk/test/javax/swing/plaf/windows/WindowsRootPaneUI/WrongAltProcessing/WrongAltProcessing.java @@ -0,0 +1,169 @@ +/* + * Copyright (c) 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 8001633 + @summary Wrong alt processing during switching between windows + @author mikhail.cherkasov@oracle.com + @run main WrongAltProcessing +*/ + +import sun.awt.SunToolkit; + +import javax.swing.*; +import java.awt.*; +import java.awt.event.*; + + +public class WrongAltProcessing { + + private static Robot robot; + private static JFrame firstFrame; + private static JFrame secondFrame; + private static JTextField mainFrameTf1; + private static JTextField mainFrameTf2; + private static JTextField secondFrameTf; + + public static void main(String[] args) throws AWTException { + try { + UIManager.setLookAndFeel("com.sun.java.swing.plaf.windows.WindowsLookAndFeel"); + } catch (Exception e) { + return;// miss unsupported platforms. + } + createWindows(); + initRobot(); + runScript(); + verify(); + } + + private static void verify() { + Component c = DefaultKeyboardFocusManager + .getCurrentKeyboardFocusManager().getFocusOwner(); + if (!(c == mainFrameTf2)) { + throw new RuntimeException("Wrong focus owner."); + } + } + + public static void sync() { + SunToolkit toolkit = (SunToolkit) Toolkit.getDefaultToolkit(); + toolkit.realSync(); + } + + public static void initRobot() throws AWTException { + robot = new Robot(); + robot.setAutoDelay(100); + } + + private static void clickWindowsTitle(JFrame frame) { + Point point = frame.getLocationOnScreen(); + robot.mouseMove(point.x + (frame.getWidth() / 2), point.y + 5); + robot.mousePress(InputEvent.BUTTON1_MASK); + robot.mouseRelease(InputEvent.BUTTON1_MASK); + } + + public static void runScript() { + robot.delay(1000); + printABCD(); + pressTab(); + clickWindowsTitle(secondFrame); + robot.delay(500); + robot.keyPress(KeyEvent.VK_ALT); + robot.keyRelease(KeyEvent.VK_ALT); + clickWindowsTitle(firstFrame); + sync(); + } + + private static void pressTab() { + robot.keyPress(KeyEvent.VK_TAB); + robot.keyRelease(KeyEvent.VK_TAB); + } + + private static void printABCD() { + robot.keyPress(KeyEvent.VK_A); + robot.keyRelease(KeyEvent.VK_A); + robot.keyPress(KeyEvent.VK_B); + robot.keyRelease(KeyEvent.VK_B); + robot.keyPress(KeyEvent.VK_C); + robot.keyRelease(KeyEvent.VK_C); + robot.keyPress(KeyEvent.VK_D); + robot.keyRelease(KeyEvent.VK_D); + } + + public static void createWindows() { + firstFrame = new JFrame("Frame"); + firstFrame.setLayout(new FlowLayout()); + + JMenuBar bar = new JMenuBar(); + JMenu menu = new JMenu("File"); + JMenuItem item = new JMenuItem("Save"); + + mainFrameTf1 = new JTextField(10); + mainFrameTf2 = new JTextField(10); + + mainFrameTf1.addKeyListener(new KeyAdapter() { + public void keyPressed(KeyEvent EVT) { + if (EVT.getKeyChar() >= 'a' && EVT.getKeyChar() <= 'z') { + try { + // imitate some long processing + Thread.sleep(2000); + } catch (InterruptedException e) { + throw new RuntimeException(e); + } + } + } + }); + + menu.add(item); + bar.add(menu); + firstFrame.setJMenuBar(bar); + + + firstFrame.add(mainFrameTf1); + firstFrame.add(mainFrameTf2); + + firstFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); + + firstFrame.pack(); + + secondFrame = new JFrame("Frame 2"); + secondFrame.setLocation(0, 150); + secondFrameTf = new JTextField(20); + secondFrame.add(secondFrameTf); + secondFrame.pack(); + SwingUtilities.invokeLater(new Runnable() { + @Override + public void run() { + secondFrame.setVisible(true); + } + }); + SwingUtilities.invokeLater(new Runnable() { + @Override + public void run() { + firstFrame.setVisible(true); + } + }); + + mainFrameTf1.requestFocus(); + sync(); + } +} diff --git a/jdk/test/javax/swing/regtesthelpers/Util.java b/jdk/test/javax/swing/regtesthelpers/Util.java index 68bc0f8c404..a9df4934583 100644 --- a/jdk/test/javax/swing/regtesthelpers/Util.java +++ b/jdk/test/javax/swing/regtesthelpers/Util.java @@ -156,6 +156,36 @@ public class Util { } } + /** + * Moves mouse smoothly from (x0, y0) to (x1, y1). + */ + public static void glide(Robot robot, int x0, int y0, int x1, int y1) throws AWTException { + float dmax = (float) Math.max(Math.abs(x1 - x0), Math.abs(y1 - y0)); + float dx = (x1 - x0) / dmax; + float dy = (y1 - y0) / dmax; + + for (int i = 0; i <= dmax; i += 10) { + robot.mouseMove((int) (x0 + dx * i), (int) (y0 + dy * i)); + } + } + + /** + * Gets component center point + * + * @return center point of the component + */ + public static Point getCenterPoint(final Component component) throws Exception { + return Util.invokeOnEDT(new Callable() { + + @Override + public Point call() throws Exception { + Point p = component.getLocationOnScreen(); + Dimension size = component.getSize(); + return new Point(p.x + size.width / 2, p.y + size.height / 2); + } + }); + } + /** * Invokes the task on the EDT thread. * diff --git a/jdk/test/javax/swing/text/html/parser/Parser/6836089/bug6836089.java b/jdk/test/javax/swing/text/html/parser/Parser/6836089/bug6836089.java new file mode 100644 index 00000000000..cf41b8c88fa --- /dev/null +++ b/jdk/test/javax/swing/text/html/parser/Parser/6836089/bug6836089.java @@ -0,0 +1,51 @@ +/* + * Copyright (c) 2010, 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 6836089 + * @summary Tests correct parsing of characters outside Base Multilingual Plane + * @author Vladislav Karnaukhov + */ + +import javax.swing.*; +import javax.swing.text.html.*; + +public class bug6836089 { + + public static void main(String[] args) throws Exception { + SwingUtilities.invokeAndWait(new Runnable() { + @Override + public void run() { + JTextPane htmlPane = new JTextPane(); + htmlPane.setEditorKit(new HTMLEditorKit()); + + htmlPane.setText("𠀀"); + String str = htmlPane.getText(); + if (str.contains("�")) { + throw new RuntimeException("Test failed"); + } + } + }); + } +} diff --git a/jdk/test/javax/xml/crypto/dsig/SecurityManager/XMLDSigWithSecMgr.java b/jdk/test/javax/xml/crypto/dsig/SecurityManager/XMLDSigWithSecMgr.java index bcbf96e771b..31c4ec5904e 100644 --- a/jdk/test/javax/xml/crypto/dsig/SecurityManager/XMLDSigWithSecMgr.java +++ b/jdk/test/javax/xml/crypto/dsig/SecurityManager/XMLDSigWithSecMgr.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2006, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2006, 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 diff --git a/jdk/test/jdk/asm/AsmSanity.java b/jdk/test/jdk/asm/AsmSanity.java new file mode 100644 index 00000000000..0ae1cadc437 --- /dev/null +++ b/jdk/test/jdk/asm/AsmSanity.java @@ -0,0 +1,74 @@ +/* + * Copyright (c) 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 7197401 + * @summary Add a subset of the org.objectweb.asm packages to jdk8 + * This test doesn't test asm functionality, it just tests the presence of + * asm in the jdk. + * These compile/run commands do the following: + * - Verify that asm is not in ct.sym so user code that refs it won't compile. + * - Verify that asm really is in rt.jar and can be accessed when ct.sym is not used. + * - Verify that if user code is compiled without ct.sym, it can't access asm classes + * at runtime when a security manager is in use. + * + * @compile/fail AsmSanity.java + * + * @compile -XDignore.symbol.file=true AsmSanity.java + * @run main/othervm AsmSanity + * + * @run main/othervm/fail AsmSanity secure + * + */ + + +// Verify that the expected asm pkgs are present +import jdk.internal.org.objectweb.asm.*; +import jdk.internal.org.objectweb.asm.commons.*; +import jdk.internal.org.objectweb.asm.signature.*; +import jdk.internal.org.objectweb.asm.tree.*; +import jdk.internal.org.objectweb.asm.tree.analysis.*; +import jdk.internal.org.objectweb.asm.util.*; + +// Verify that we can actually run some of the asm code. +public class AsmSanity { + + static public void main(String[] args) { + if (args.length == 0) { + System.out.println("-- Running without SecurityManager"); + new Label(); + System.out.println("-- Passed"); + return; + } + + if (args[0].equals("secure")) { + System.out.println("-- Running with SecurityManager"); + java.lang.SecurityManager sm = new SecurityManager(); + System.setSecurityManager(sm); + // This should cause an accessClassInPackage exception + new Label(); + return; + } + throw new Error("-- Failed: Unknown argument to main: " + args[0]); + } +} diff --git a/jdk/test/lib/security/java.policy/Ext_AllPolicy.sh b/jdk/test/lib/security/java.policy/Ext_AllPolicy.sh index 63e60b5bf9a..e4184062a5f 100644 --- a/jdk/test/lib/security/java.policy/Ext_AllPolicy.sh +++ b/jdk/test/lib/security/java.policy/Ext_AllPolicy.sh @@ -1,5 +1,5 @@ # -# Copyright (c) 1999, 2004, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 1999, 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 diff --git a/jdk/test/sun/invoke/util/ValueConversionsTest.java b/jdk/test/sun/invoke/util/ValueConversionsTest.java index 5b6d1bd0173..d5255b92953 100644 --- a/jdk/test/sun/invoke/util/ValueConversionsTest.java +++ b/jdk/test/sun/invoke/util/ValueConversionsTest.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2009, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2009, 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 diff --git a/jdk/test/sun/misc/Cleaner/exitOnThrow.sh b/jdk/test/sun/misc/Cleaner/exitOnThrow.sh index 81daf8ba56e..f6090cd42ec 100644 --- a/jdk/test/sun/misc/Cleaner/exitOnThrow.sh +++ b/jdk/test/sun/misc/Cleaner/exitOnThrow.sh @@ -1,7 +1,7 @@ #! /bin/sh # -# Copyright (c) 2003, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2003, 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 diff --git a/jdk/test/sun/misc/Version/Version.java b/jdk/test/sun/misc/Version/Version.java index 16ecd1ea9c8..13e507540c1 100644 --- a/jdk/test/sun/misc/Version/Version.java +++ b/jdk/test/sun/misc/Version/Version.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2010, 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 diff --git a/jdk/test/sun/net/www/AuthHeaderTest.java b/jdk/test/sun/net/www/AuthHeaderTest.java index 9e646e0a49b..63aae18ec80 100644 --- a/jdk/test/sun/net/www/AuthHeaderTest.java +++ b/jdk/test/sun/net/www/AuthHeaderTest.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 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 diff --git a/jdk/test/sun/net/www/MarkResetTest.sh b/jdk/test/sun/net/www/MarkResetTest.sh index 20bb6ab9e25..c3eb53a56d5 100644 --- a/jdk/test/sun/net/www/MarkResetTest.sh +++ b/jdk/test/sun/net/www/MarkResetTest.sh @@ -1,5 +1,5 @@ # -# Copyright (c) 2002, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2002, 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 diff --git a/jdk/test/sun/net/www/http/ChunkedInputStream/ChunkedEncodingWithProgressMonitorTest.java b/jdk/test/sun/net/www/http/ChunkedInputStream/ChunkedEncodingWithProgressMonitorTest.java index c5e92d5b6f6..e5c26afc92e 100644 --- a/jdk/test/sun/net/www/http/ChunkedInputStream/ChunkedEncodingWithProgressMonitorTest.java +++ b/jdk/test/sun/net/www/http/ChunkedInputStream/ChunkedEncodingWithProgressMonitorTest.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2004, 2010, Oracle and/or its affiliates. All rights reserved. + * 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 diff --git a/jdk/test/sun/net/www/http/HttpClient/RetryPost.sh b/jdk/test/sun/net/www/http/HttpClient/RetryPost.sh index d1b7469ecce..314a007c64f 100644 --- a/jdk/test/sun/net/www/http/HttpClient/RetryPost.sh +++ b/jdk/test/sun/net/www/http/HttpClient/RetryPost.sh @@ -1,5 +1,5 @@ # -# Copyright (c) 2006, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2006, 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 diff --git a/jdk/test/sun/net/www/http/KeepAliveCache/B5045306.java b/jdk/test/sun/net/www/http/KeepAliveCache/B5045306.java index c36d2cfc3d9..7e1abfd4f0e 100644 --- a/jdk/test/sun/net/www/http/KeepAliveCache/B5045306.java +++ b/jdk/test/sun/net/www/http/KeepAliveCache/B5045306.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2005, 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 diff --git a/jdk/test/sun/net/www/httptest/HttpTransaction.java b/jdk/test/sun/net/www/httptest/HttpTransaction.java index 6007070b8e3..781aacaff5b 100644 --- a/jdk/test/sun/net/www/httptest/HttpTransaction.java +++ b/jdk/test/sun/net/www/httptest/HttpTransaction.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2002, 2004, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2002, 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 diff --git a/jdk/test/sun/net/www/httptest/TestHttpServer.java b/jdk/test/sun/net/www/httptest/TestHttpServer.java index 7f91461b734..13f2098915e 100644 --- a/jdk/test/sun/net/www/httptest/TestHttpServer.java +++ b/jdk/test/sun/net/www/httptest/TestHttpServer.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2002, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2002, 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 diff --git a/jdk/test/sun/net/www/protocol/file/DirPermissionDenied.sh b/jdk/test/sun/net/www/protocol/file/DirPermissionDenied.sh index 91eaa6c0387..a85f4d53a99 100644 --- a/jdk/test/sun/net/www/protocol/file/DirPermissionDenied.sh +++ b/jdk/test/sun/net/www/protocol/file/DirPermissionDenied.sh @@ -1,5 +1,5 @@ # -# Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2010, 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 diff --git a/jdk/test/sun/net/www/protocol/http/B6296310.java b/jdk/test/sun/net/www/protocol/http/B6296310.java index a932d9caece..6d0ce343a4e 100644 --- a/jdk/test/sun/net/www/protocol/http/B6296310.java +++ b/jdk/test/sun/net/www/protocol/http/B6296310.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2005, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2005, 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 diff --git a/jdk/test/sun/net/www/protocol/http/B6299712.java b/jdk/test/sun/net/www/protocol/http/B6299712.java index 727b62e5743..2cdedcba6d0 100644 --- a/jdk/test/sun/net/www/protocol/http/B6299712.java +++ b/jdk/test/sun/net/www/protocol/http/B6299712.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2005, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2005, 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 diff --git a/jdk/test/sun/net/www/protocol/http/RelativeRedirect.java b/jdk/test/sun/net/www/protocol/http/RelativeRedirect.java index 861ee6a95d0..eb4b2a69e42 100644 --- a/jdk/test/sun/net/www/protocol/http/RelativeRedirect.java +++ b/jdk/test/sun/net/www/protocol/http/RelativeRedirect.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2002, 2003, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2002, 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 diff --git a/jdk/test/sun/net/www/protocol/http/ResponseCacheStream.java b/jdk/test/sun/net/www/protocol/http/ResponseCacheStream.java index 6b85d7f4c73..bff2a765d6c 100644 --- a/jdk/test/sun/net/www/protocol/http/ResponseCacheStream.java +++ b/jdk/test/sun/net/www/protocol/http/ResponseCacheStream.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2005, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2005, 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 diff --git a/jdk/test/sun/net/www/protocol/http/SetChunkedStreamingMode.java b/jdk/test/sun/net/www/protocol/http/SetChunkedStreamingMode.java index e1d2fd9a865..6ed5a9a6035 100644 --- a/jdk/test/sun/net/www/protocol/http/SetChunkedStreamingMode.java +++ b/jdk/test/sun/net/www/protocol/http/SetChunkedStreamingMode.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2004, Oracle and/or its affiliates. All rights reserved. + * 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 diff --git a/jdk/test/sun/net/www/protocol/jar/B5105410.sh b/jdk/test/sun/net/www/protocol/jar/B5105410.sh index 66623dbb900..3dbce7f3f77 100644 --- a/jdk/test/sun/net/www/protocol/jar/B5105410.sh +++ b/jdk/test/sun/net/www/protocol/jar/B5105410.sh @@ -1,7 +1,7 @@ #! /bin/sh # -# Copyright (c) 2004, Oracle and/or its affiliates. All rights reserved. +# 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 diff --git a/jdk/test/sun/net/www/protocol/jar/jarbug/run.sh b/jdk/test/sun/net/www/protocol/jar/jarbug/run.sh index 0446848a58d..31cfbe86158 100644 --- a/jdk/test/sun/net/www/protocol/jar/jarbug/run.sh +++ b/jdk/test/sun/net/www/protocol/jar/jarbug/run.sh @@ -1,7 +1,7 @@ #! /bin/sh # -# Copyright (c) 2005, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2005, 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 diff --git a/jdk/test/sun/nio/cs/OLD/DoubleByteDecoder.java b/jdk/test/sun/nio/cs/OLD/DoubleByteDecoder.java index 7565a4d3be3..97748a1cb53 100644 --- a/jdk/test/sun/nio/cs/OLD/DoubleByteDecoder.java +++ b/jdk/test/sun/nio/cs/OLD/DoubleByteDecoder.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2002, 2005, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2002, 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 diff --git a/jdk/test/sun/nio/cs/OLD/DoubleByteEncoder.java b/jdk/test/sun/nio/cs/OLD/DoubleByteEncoder.java index ca04fae671e..505a583f871 100644 --- a/jdk/test/sun/nio/cs/OLD/DoubleByteEncoder.java +++ b/jdk/test/sun/nio/cs/OLD/DoubleByteEncoder.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2002, 2006, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2002, 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 diff --git a/jdk/test/sun/nio/cs/OLD/EUC_JP_LINUX_OLD.java b/jdk/test/sun/nio/cs/OLD/EUC_JP_LINUX_OLD.java index 121e5b35849..d4bebb61da1 100644 --- a/jdk/test/sun/nio/cs/OLD/EUC_JP_LINUX_OLD.java +++ b/jdk/test/sun/nio/cs/OLD/EUC_JP_LINUX_OLD.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2002, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2002, 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 diff --git a/jdk/test/sun/nio/cs/OLD/EUC_JP_OLD.java b/jdk/test/sun/nio/cs/OLD/EUC_JP_OLD.java index 96d93634f8e..94fa1730d0c 100644 --- a/jdk/test/sun/nio/cs/OLD/EUC_JP_OLD.java +++ b/jdk/test/sun/nio/cs/OLD/EUC_JP_OLD.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2002, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2002, 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 diff --git a/jdk/test/sun/nio/cs/OLD/EUC_JP_Open_OLD.java b/jdk/test/sun/nio/cs/OLD/EUC_JP_Open_OLD.java index 910e962b288..554d8e64555 100644 --- a/jdk/test/sun/nio/cs/OLD/EUC_JP_Open_OLD.java +++ b/jdk/test/sun/nio/cs/OLD/EUC_JP_Open_OLD.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 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 diff --git a/jdk/test/sun/nio/cs/OLD/JIS_X_0201_OLD.java b/jdk/test/sun/nio/cs/OLD/JIS_X_0201_OLD.java index a8ce6a47d92..add11764288 100644 --- a/jdk/test/sun/nio/cs/OLD/JIS_X_0201_OLD.java +++ b/jdk/test/sun/nio/cs/OLD/JIS_X_0201_OLD.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2002, 2005, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2002, 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 diff --git a/jdk/test/sun/nio/cs/OLD/JIS_X_0208_Decoder.java b/jdk/test/sun/nio/cs/OLD/JIS_X_0208_Decoder.java index 59ee58ef783..d64010dfa38 100644 --- a/jdk/test/sun/nio/cs/OLD/JIS_X_0208_Decoder.java +++ b/jdk/test/sun/nio/cs/OLD/JIS_X_0208_Decoder.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 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 diff --git a/jdk/test/sun/nio/cs/OLD/JIS_X_0208_Encoder.java b/jdk/test/sun/nio/cs/OLD/JIS_X_0208_Encoder.java index bbdea5f41e8..412d61eb641 100644 --- a/jdk/test/sun/nio/cs/OLD/JIS_X_0208_Encoder.java +++ b/jdk/test/sun/nio/cs/OLD/JIS_X_0208_Encoder.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, 2005, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 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 diff --git a/jdk/test/sun/nio/cs/OLD/JIS_X_0208_OLD.java b/jdk/test/sun/nio/cs/OLD/JIS_X_0208_OLD.java index 7e211f61347..570d3ccd087 100644 --- a/jdk/test/sun/nio/cs/OLD/JIS_X_0208_OLD.java +++ b/jdk/test/sun/nio/cs/OLD/JIS_X_0208_OLD.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2002, 2003, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2002, 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 diff --git a/jdk/test/sun/nio/cs/OLD/JIS_X_0208_Solaris_Decoder.java b/jdk/test/sun/nio/cs/OLD/JIS_X_0208_Solaris_Decoder.java index 69643357505..1359ee6df2a 100644 --- a/jdk/test/sun/nio/cs/OLD/JIS_X_0208_Solaris_Decoder.java +++ b/jdk/test/sun/nio/cs/OLD/JIS_X_0208_Solaris_Decoder.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 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 diff --git a/jdk/test/sun/nio/cs/OLD/JIS_X_0208_Solaris_Encoder.java b/jdk/test/sun/nio/cs/OLD/JIS_X_0208_Solaris_Encoder.java index cde51b70f1a..cb06cdbedd3 100644 --- a/jdk/test/sun/nio/cs/OLD/JIS_X_0208_Solaris_Encoder.java +++ b/jdk/test/sun/nio/cs/OLD/JIS_X_0208_Solaris_Encoder.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, 2005, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 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 diff --git a/jdk/test/sun/nio/cs/OLD/JIS_X_0212_Decoder.java b/jdk/test/sun/nio/cs/OLD/JIS_X_0212_Decoder.java index 92e388fc01b..03d6d7fbab8 100644 --- a/jdk/test/sun/nio/cs/OLD/JIS_X_0212_Decoder.java +++ b/jdk/test/sun/nio/cs/OLD/JIS_X_0212_Decoder.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 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 diff --git a/jdk/test/sun/nio/cs/OLD/JIS_X_0212_Encoder.java b/jdk/test/sun/nio/cs/OLD/JIS_X_0212_Encoder.java index fc155081da7..f44ecf12362 100644 --- a/jdk/test/sun/nio/cs/OLD/JIS_X_0212_Encoder.java +++ b/jdk/test/sun/nio/cs/OLD/JIS_X_0212_Encoder.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, 2005, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 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 diff --git a/jdk/test/sun/nio/cs/OLD/JIS_X_0212_OLD.java b/jdk/test/sun/nio/cs/OLD/JIS_X_0212_OLD.java index adb19f161b9..63813d049a0 100644 --- a/jdk/test/sun/nio/cs/OLD/JIS_X_0212_OLD.java +++ b/jdk/test/sun/nio/cs/OLD/JIS_X_0212_OLD.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2002, 2003, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2002, 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 diff --git a/jdk/test/sun/nio/cs/OLD/JIS_X_0212_Solaris_Decoder.java b/jdk/test/sun/nio/cs/OLD/JIS_X_0212_Solaris_Decoder.java index dac98b2fb09..49ac7459d84 100644 --- a/jdk/test/sun/nio/cs/OLD/JIS_X_0212_Solaris_Decoder.java +++ b/jdk/test/sun/nio/cs/OLD/JIS_X_0212_Solaris_Decoder.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 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 diff --git a/jdk/test/sun/nio/cs/OLD/JIS_X_0212_Solaris_Encoder.java b/jdk/test/sun/nio/cs/OLD/JIS_X_0212_Solaris_Encoder.java index 716e4020a8e..a8f6f5ea2c0 100644 --- a/jdk/test/sun/nio/cs/OLD/JIS_X_0212_Solaris_Encoder.java +++ b/jdk/test/sun/nio/cs/OLD/JIS_X_0212_Solaris_Encoder.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, 2005, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 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 diff --git a/jdk/test/sun/nio/cs/OLD/MS932_OLD.java b/jdk/test/sun/nio/cs/OLD/MS932_OLD.java index 46307e2a613..0f1dd889c76 100644 --- a/jdk/test/sun/nio/cs/OLD/MS932_OLD.java +++ b/jdk/test/sun/nio/cs/OLD/MS932_OLD.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2002, 2004, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2002, 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 diff --git a/jdk/test/sun/nio/cs/OLD/PCK_OLD.java b/jdk/test/sun/nio/cs/OLD/PCK_OLD.java index d2cc0c43a30..9fcd9853795 100644 --- a/jdk/test/sun/nio/cs/OLD/PCK_OLD.java +++ b/jdk/test/sun/nio/cs/OLD/PCK_OLD.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 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 diff --git a/jdk/test/sun/nio/cs/OLD/SJIS_OLD.java b/jdk/test/sun/nio/cs/OLD/SJIS_OLD.java index 5cc9e2cc5cc..343e0525f70 100644 --- a/jdk/test/sun/nio/cs/OLD/SJIS_OLD.java +++ b/jdk/test/sun/nio/cs/OLD/SJIS_OLD.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2002, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2002, 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 diff --git a/jdk/test/sun/nio/cs/OLD/SingleByteDecoder.java b/jdk/test/sun/nio/cs/OLD/SingleByteDecoder.java index 3c59f224825..1e1b0912673 100644 --- a/jdk/test/sun/nio/cs/OLD/SingleByteDecoder.java +++ b/jdk/test/sun/nio/cs/OLD/SingleByteDecoder.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2000, 2006, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2000, 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 diff --git a/jdk/test/sun/nio/cs/OLD/SingleByteEncoder.java b/jdk/test/sun/nio/cs/OLD/SingleByteEncoder.java index d3fa9282af7..6c9b6f928eb 100644 --- a/jdk/test/sun/nio/cs/OLD/SingleByteEncoder.java +++ b/jdk/test/sun/nio/cs/OLD/SingleByteEncoder.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2000, 2004, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2000, 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 diff --git a/jdk/test/sun/nio/cs/OLD/TestIBMDB.java b/jdk/test/sun/nio/cs/OLD/TestIBMDB.java index 72d6720e75a..404eb5b3aa0 100644 --- a/jdk/test/sun/nio/cs/OLD/TestIBMDB.java +++ b/jdk/test/sun/nio/cs/OLD/TestIBMDB.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2009, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2009, 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 diff --git a/jdk/test/sun/nio/cs/StrCodingBenchmark.java b/jdk/test/sun/nio/cs/StrCodingBenchmark.java index 1d28ba5aaa9..42c66bf77ae 100644 --- a/jdk/test/sun/nio/cs/StrCodingBenchmark.java +++ b/jdk/test/sun/nio/cs/StrCodingBenchmark.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2009, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2009, 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 diff --git a/jdk/test/sun/nio/cs/StrCodingBenchmarkDB.java b/jdk/test/sun/nio/cs/StrCodingBenchmarkDB.java index bb7210227f8..988c10addb7 100644 --- a/jdk/test/sun/nio/cs/StrCodingBenchmarkDB.java +++ b/jdk/test/sun/nio/cs/StrCodingBenchmarkDB.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2009, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2009, 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 diff --git a/jdk/test/sun/nio/cs/TestCp834_SBCS.java b/jdk/test/sun/nio/cs/TestCp834_SBCS.java index 25e64698da4..d935b84d3ef 100644 --- a/jdk/test/sun/nio/cs/TestCp834_SBCS.java +++ b/jdk/test/sun/nio/cs/TestCp834_SBCS.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2008, Oracle and/or its affiliates. All rights reserved. + * 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 diff --git a/jdk/test/sun/nio/cs/TestStringCoding.java b/jdk/test/sun/nio/cs/TestStringCoding.java index 76f31d8897b..569ef2f6e22 100644 --- a/jdk/test/sun/nio/cs/TestStringCoding.java +++ b/jdk/test/sun/nio/cs/TestStringCoding.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2000, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2000, 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 diff --git a/jdk/test/sun/nio/cs/TestUTF8.java b/jdk/test/sun/nio/cs/TestUTF8.java index e83f8fbb51a..c54ae66f4d9 100644 --- a/jdk/test/sun/nio/cs/TestUTF8.java +++ b/jdk/test/sun/nio/cs/TestUTF8.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2008, Oracle and/or its affiliates. All rights reserved. + * 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 diff --git a/jdk/test/sun/nio/cs/TestX11JIS0201.java b/jdk/test/sun/nio/cs/TestX11JIS0201.java index 6b9c58978a3..414493c961e 100644 --- a/jdk/test/sun/nio/cs/TestX11JIS0201.java +++ b/jdk/test/sun/nio/cs/TestX11JIS0201.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2008, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2008, 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 diff --git a/jdk/test/sun/security/krb5/ConfPlusProp.java b/jdk/test/sun/security/krb5/ConfPlusProp.java index 9fe1adcf455..0a944989cd7 100644 --- a/jdk/test/sun/security/krb5/ConfPlusProp.java +++ b/jdk/test/sun/security/krb5/ConfPlusProp.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2009, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2009, 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 @@ -25,6 +25,7 @@ * @bug 6857795 * @bug 6858589 * @bug 6972005 + * @compile -XDignore.symbol.file ConfPlusProp.java * @run main/othervm ConfPlusProp * @summary krb5.conf ignored if system properties on realm and kdc are provided */ @@ -75,7 +76,7 @@ public class ConfPlusProp { check("R1", "k1"); check("R2", "old"); check("R3", null); - if (!config.getDefault("forwardable", "libdefaults").equals("well")) { + if (!config.get("libdefaults", "forwardable").equals("well")) { throw new Exception("Extra config error"); } @@ -103,7 +104,7 @@ public class ConfPlusProp { check("R1", null); check("R2", null); check("R3", null); - if (config.getDefault("forwardable", "libdefaults") != null) { + if (config.get("libdefaults", "forwardable") != null) { throw new Exception("Extra config error"); } } @@ -121,7 +122,7 @@ public class ConfPlusProp { check("R1", "k1"); check("R2", "k2"); check("R3", "k2"); - if (!config.getDefault("forwardable", "libdefaults").equals("well")) { + if (!config.get("libdefaults", "forwardable").equals("well")) { throw new Exception("Extra config error"); } @@ -143,7 +144,7 @@ public class ConfPlusProp { check("R1", "k2"); check("R2", "k2"); check("R3", "k2"); - if (config.getDefault("forwardable", "libdefaults") != null) { + if (config.get("libdefaults", "forwardable") != null) { throw new Exception("Extra config error"); } } diff --git a/jdk/test/sun/security/krb5/DnsFallback.java b/jdk/test/sun/security/krb5/DnsFallback.java index 3a48b05d837..b1e64197794 100644 --- a/jdk/test/sun/security/krb5/DnsFallback.java +++ b/jdk/test/sun/security/krb5/DnsFallback.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2008, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2008, 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 @@ -28,12 +28,20 @@ * @summary fix dns_fallback parse error, and use dns by default */ -import sun.security.krb5.*; import java.io.*; +import java.lang.reflect.Method; +import sun.security.krb5.Config; public class DnsFallback { + + static Method useDNS_Realm; + public static void main(String[] args) throws Exception { + useDNS_Realm = Config.class.getDeclaredMethod("useDNS_Realm"); + useDNS_Realm.setAccessible(true); + + // for 6673164 check("true", "true", true); check("false", "true", false); @@ -48,22 +56,25 @@ public class DnsFallback { check(null, null, true); } - static void check(String realm, String fallback, boolean output) throws Exception { - FileOutputStream fo = new FileOutputStream("dnsfallback.conf"); - StringBuffer sb = new StringBuffer(); - sb.append("[libdefaults]\n"); - if (realm != null) { - sb.append("dns_lookup_realm=" + realm + "\n"); + static void check(String realm, String fallback, boolean output) + throws Exception { + + try (PrintStream ps = + new PrintStream(new FileOutputStream("dnsfallback.conf"))) { + ps.println("[libdefaults]\n"); + if (realm != null) { + ps.println("dns_lookup_realm=" + realm); + } + if (fallback != null) { + ps.println("dns_fallback=" + fallback); + } } - if (fallback != null) { - sb.append("dns_fallback=" + fallback + "\n"); - } - fo.write(sb.toString().getBytes()); - fo.close(); + System.setProperty("java.security.krb5.conf", "dnsfallback.conf"); Config.refresh(); System.out.println("Testing " + realm + ", " + fallback + ", " + output); - if (Config.getInstance().useDNS_Realm() != output) { + + if (!useDNS_Realm.invoke(Config.getInstance()).equals(output)) { throw new Exception("Fail"); } } diff --git a/jdk/test/sun/security/krb5/Krb5NameEquals.java b/jdk/test/sun/security/krb5/Krb5NameEquals.java index 765621de8c4..0851423a7fd 100644 --- a/jdk/test/sun/security/krb5/Krb5NameEquals.java +++ b/jdk/test/sun/security/krb5/Krb5NameEquals.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2007, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2007, 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 diff --git a/jdk/test/sun/security/krb5/ParseConfig.java b/jdk/test/sun/security/krb5/ParseConfig.java index 43c5ce39f3a..ecbfa8af6a9 100644 --- a/jdk/test/sun/security/krb5/ParseConfig.java +++ b/jdk/test/sun/security/krb5/ParseConfig.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2007, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2007, 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 @@ -23,6 +23,7 @@ /* * @test * @bug 6319046 + * @compile -XDignore.symbol.file ParseConfig.java * @run main/othervm ParseConfig * @summary Problem with parsing krb5.conf */ @@ -37,7 +38,7 @@ public class ParseConfig { String sample = "kdc.example.com kdc2.example.com"; for ( int i = 0; i < 4; i++ ) { - String expected = config.getDefault("kdc", "EXAMPLE_" + i + ".COM"); + String expected = config.getAll("realms", "EXAMPLE_" + i + ".COM", "kdc"); if (!sample.equals(expected)) { throw new Exception("krb5.conf: unexpected kdc value \"" + expected + "\""); diff --git a/jdk/test/sun/security/krb5/auto/BadKdc.java b/jdk/test/sun/security/krb5/auto/BadKdc.java index be8259d3538..1c10ccd69aa 100644 --- a/jdk/test/sun/security/krb5/auto/BadKdc.java +++ b/jdk/test/sun/security/krb5/auto/BadKdc.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2009, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2009, 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 diff --git a/jdk/test/sun/security/krb5/auto/BadKdc1.java b/jdk/test/sun/security/krb5/auto/BadKdc1.java index bc96d056d71..7db7b8ad7a8 100644 --- a/jdk/test/sun/security/krb5/auto/BadKdc1.java +++ b/jdk/test/sun/security/krb5/auto/BadKdc1.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2009, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2009, 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 diff --git a/jdk/test/sun/security/krb5/auto/BadKdc2.java b/jdk/test/sun/security/krb5/auto/BadKdc2.java index 26e001bcc70..7568784521d 100644 --- a/jdk/test/sun/security/krb5/auto/BadKdc2.java +++ b/jdk/test/sun/security/krb5/auto/BadKdc2.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2009, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2009, 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 diff --git a/jdk/test/sun/security/krb5/auto/BadKdc3.java b/jdk/test/sun/security/krb5/auto/BadKdc3.java index 83816027a55..4bafd9a2ffe 100644 --- a/jdk/test/sun/security/krb5/auto/BadKdc3.java +++ b/jdk/test/sun/security/krb5/auto/BadKdc3.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2009, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2009, 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 diff --git a/jdk/test/sun/security/krb5/auto/BadKdc4.java b/jdk/test/sun/security/krb5/auto/BadKdc4.java index bbd40471fb1..877e5400df9 100644 --- a/jdk/test/sun/security/krb5/auto/BadKdc4.java +++ b/jdk/test/sun/security/krb5/auto/BadKdc4.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2009, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2009, 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 diff --git a/jdk/test/sun/security/krb5/auto/BasicKrb5Test.java b/jdk/test/sun/security/krb5/auto/BasicKrb5Test.java index aaf6b126668..aa6c0a40d28 100644 --- a/jdk/test/sun/security/krb5/auto/BasicKrb5Test.java +++ b/jdk/test/sun/security/krb5/auto/BasicKrb5Test.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2008, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2008, 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 @@ -25,6 +25,7 @@ * @test * @bug 6706974 * @summary Add krb5 test infrastructure + * @compile -XDignore.symbol.file BasicKrb5Test.java * @run main/othervm BasicKrb5Test * @run main/othervm BasicKrb5Test des-cbc-crc * @run main/othervm BasicKrb5Test des-cbc-md5 @@ -86,7 +87,7 @@ public class BasicKrb5Test { new OneKDC(etype).writeJAASConf(); System.out.println("Testing etype " + etype); - if (etype != null && !EType.isSupported(Config.getInstance().getType(etype))) { + if (etype != null && !EType.isSupported(Config.getType(etype))) { // aes256 is not enabled on all systems System.out.println("Not supported."); return; diff --git a/jdk/test/sun/security/krb5/auto/Context.java b/jdk/test/sun/security/krb5/auto/Context.java index ca612bad477..64ef5908262 100644 --- a/jdk/test/sun/security/krb5/auto/Context.java +++ b/jdk/test/sun/security/krb5/auto/Context.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2008, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2008, 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 diff --git a/jdk/test/sun/security/krb5/auto/MaxRetries.java b/jdk/test/sun/security/krb5/auto/MaxRetries.java index f4f86a3fc89..2e896bc5a56 100644 --- a/jdk/test/sun/security/krb5/auto/MaxRetries.java +++ b/jdk/test/sun/security/krb5/auto/MaxRetries.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2010, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2010, 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 @@ -108,7 +108,7 @@ public class MaxRetries { if (line.startsWith(">>> KDCCommunication")) { System.out.println(line); if (line.indexOf(timeoutTag) < 0) { - throw new Exception("Wrong timeout value"); + throw new Exception("Wrong timeout value" + timeoutTag); } count--; } diff --git a/jdk/test/sun/security/krb5/auto/OneKDC.java b/jdk/test/sun/security/krb5/auto/OneKDC.java index 76841af8fd2..5c87abb961a 100644 --- a/jdk/test/sun/security/krb5/auto/OneKDC.java +++ b/jdk/test/sun/security/krb5/auto/OneKDC.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2008, 2010, Oracle and/or its affiliates. All rights reserved. + * 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 diff --git a/jdk/test/sun/security/krb5/auto/SSL.java b/jdk/test/sun/security/krb5/auto/SSL.java index 7ad0bd82c70..353916e7578 100644 --- a/jdk/test/sun/security/krb5/auto/SSL.java +++ b/jdk/test/sun/security/krb5/auto/SSL.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2009, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2009, 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 diff --git a/jdk/test/sun/security/krb5/auto/SaslBasic.java b/jdk/test/sun/security/krb5/auto/SaslBasic.java new file mode 100644 index 00000000000..ef38ab3185f --- /dev/null +++ b/jdk/test/sun/security/krb5/auto/SaslBasic.java @@ -0,0 +1,97 @@ +/* + * Copyright (c) 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 7110803 + * @summary SASL service for multiple hostnames + * @compile -XDignore.symbol.file SaslBasic.java + * @run main/othervm SaslBasic bound + * @run main/othervm SaslBasic unbound + */ +import java.io.IOException; +import java.util.Arrays; +import java.util.HashMap; +import java.util.Locale; +import javax.security.auth.callback.Callback; +import javax.security.auth.callback.CallbackHandler; +import javax.security.auth.callback.UnsupportedCallbackException; +import javax.security.sasl.*; + +// The basic krb5 test skeleton you can copy from +public class SaslBasic { + + public static void main(String[] args) throws Exception { + + boolean bound = args[0].equals("bound"); + String name = "host." + OneKDC.REALM.toLowerCase(Locale.US); + + new OneKDC(null).writeJAASConf(); + System.setProperty("javax.security.auth.useSubjectCredsOnly", "false"); + + HashMap clntprops = new HashMap(); + clntprops.put(Sasl.QOP, "auth-conf"); + SaslClient sc = Sasl.createSaslClient( + new String[]{"GSSAPI"}, null, "server", + name, clntprops, null); + + final HashMap srvprops = new HashMap(); + srvprops.put(Sasl.QOP, "auth,auth-int,auth-conf"); + SaslServer ss = Sasl.createSaslServer("GSSAPI", "server", + bound? name: null, srvprops, + new CallbackHandler() { + public void handle(Callback[] callbacks) + throws IOException, UnsupportedCallbackException { + for (Callback cb : callbacks) { + if (cb instanceof RealmCallback) { + ((RealmCallback) cb).setText(OneKDC.REALM); + } else if (cb instanceof AuthorizeCallback) { + ((AuthorizeCallback) cb).setAuthorized(true); + } + } + } + }); + + byte[] token = new byte[0]; + while (!sc.isComplete() || !ss.isComplete()) { + if (!sc.isComplete()) { + token = sc.evaluateChallenge(token); + } + if (!ss.isComplete()) { + token = ss.evaluateResponse(token); + } + } + if (!bound) { + String boundName = (String)ss.getNegotiatedProperty(Sasl.BOUND_SERVER_NAME); + if (!boundName.equals(name)) { + throw new Exception("Wrong bound server name"); + } + } + byte[] hello = "hello".getBytes(); + token = sc.wrap(hello, 0, hello.length); + token = ss.unwrap(token, 0, token.length); + if (!Arrays.equals(hello, token)) { + throw new Exception("Message altered"); + } + } +} diff --git a/jdk/test/sun/security/krb5/auto/TcpTimeout.java b/jdk/test/sun/security/krb5/auto/TcpTimeout.java index 01bd58cfa70..325d5bb3591 100644 --- a/jdk/test/sun/security/krb5/auto/TcpTimeout.java +++ b/jdk/test/sun/security/krb5/auto/TcpTimeout.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2010, 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 diff --git a/jdk/test/sun/security/krb5/auto/W83.java b/jdk/test/sun/security/krb5/auto/W83.java index 8ac419b5774..dea4e765e40 100644 --- a/jdk/test/sun/security/krb5/auto/W83.java +++ b/jdk/test/sun/security/krb5/auto/W83.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2010, 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 diff --git a/jdk/test/sun/security/krb5/ccache/EmptyCC.java b/jdk/test/sun/security/krb5/ccache/EmptyCC.java index d5bfc008651..a0cd759373d 100644 --- a/jdk/test/sun/security/krb5/ccache/EmptyCC.java +++ b/jdk/test/sun/security/krb5/ccache/EmptyCC.java @@ -24,9 +24,11 @@ /* * @test * @bug 7158329 + * @bug 8001208 * @summary NPE in sun.security.krb5.Credentials.acquireDefaultCreds() * @compile -XDignore.symbol.file EmptyCC.java - * @run main EmptyCC + * @run main EmptyCC tmpcc + * @run main EmptyCC FILE:tmpcc */ import java.io.File; import java.io.InputStream; @@ -40,9 +42,9 @@ import sun.security.krb5.internal.ccache.CredentialsCache; public class EmptyCC { public static void main(String[] args) throws Exception { final PrincipalName pn = new PrincipalName("dummy@FOO.COM"); - final String ccache = "tmpcc"; + final String ccache = args[0]; - if (args.length == 0) { + if (args.length == 1) { // Main process, write the ccache and launch sub process CredentialsCache cache = CredentialsCache.create(pn, ccache); cache.save(); @@ -54,6 +56,7 @@ public class EmptyCC { "-cp", System.getProperty("test.classes"), "EmptyCC", + ccache, "readcc" ); @@ -77,6 +80,14 @@ public class EmptyCC { if (!cc.equals(ccache)) { throw new Exception("env not set correctly"); } + // 8001208: Fix for KRB5CCNAME not complete + // Make sure the ccache is created with bare file name + if (CredentialsCache.getInstance() == null) { + throw new Exception("Cache not instantiated"); + } + if (!new File("tmpcc").exists()) { + throw new Exception("File not found"); + } Credentials.acquireTGTFromCache(pn, null); } } diff --git a/jdk/test/sun/security/krb5/config/Duplicates.java b/jdk/test/sun/security/krb5/config/Duplicates.java new file mode 100644 index 00000000000..0d8bac70c6d --- /dev/null +++ b/jdk/test/sun/security/krb5/config/Duplicates.java @@ -0,0 +1,72 @@ +/* + * Copyright (c) 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 7184246 + * @compile -XDignore.symbol.file Duplicates.java + * @run main/othervm Duplicates + * @summary Simplify Config.get() of krb5 + */ + +import sun.security.krb5.Config; + +public class Duplicates { + public static void main(String[] args) throws Exception { + System.setProperty("java.security.krb5.conf", + System.getProperty("test.src", ".") +"/k1.conf"); + Config config = Config.getInstance(); + config.listTable(); + String s; + + // Latter overwrites former for root section + s = config.get("libdefaults", "default_realm"); + if (s != null) { + throw new Exception(); + } + // Latter overwrites former for strings + s = config.get("libdefaults", "default_tkt_enctypes"); + if (!s.equals("aes256-cts")) { + throw new Exception(); + } + // Latter overwrites former for sub-section + s = config.get("realms", "R1", "kdc"); + if (!s.equals("k2")) { + throw new Exception(s); + } + // Duplicate keys in [realms] are merged + s = config.getAll("realms", "R2", "kdc"); + if (!s.equals("k1 k2 k3 k4")) { + throw new Exception(s); + } + // Duplicate keys in [capaths] are merged + s = config.getAll("capaths", "R1", "R2"); + if (!s.equals("R3 R4 R5 R6")) { + throw new Exception(s); + } + // We can be very deep now + s = config.get("new", "x", "y", "z", "a", "b", "c"); + if (!s.equals("d")) { + throw new Exception(s); + } + } +} diff --git a/jdk/test/sun/security/krb5/config/KdcDefaultOptions.java b/jdk/test/sun/security/krb5/config/KdcDefaultOptions.java new file mode 100644 index 00000000000..fb920635e4e --- /dev/null +++ b/jdk/test/sun/security/krb5/config/KdcDefaultOptions.java @@ -0,0 +1,46 @@ +/* + * Copyright (c) 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 7195426 + * @summary kdc_default_options not supported correctly + * @compile -XDignore.symbol.file KdcDefaultOptions.java + * @run main/othervm KdcDefaultOptions + */ + +import sun.security.krb5.Config; +import sun.security.krb5.internal.KDCOptions; + +public class KdcDefaultOptions { + public static void main(String[] args) throws Exception { + System.setProperty("java.security.krb5.conf", + System.getProperty("test.src", ".") + "/kdc_default_options.conf"); + Config.refresh(); + KDCOptions options = new KDCOptions(); + if (!options.get(KDCOptions.FORWARDABLE) || + !options.get(KDCOptions.PROXIABLE) || + !options.get(KDCOptions.RENEWABLE_OK)) { + throw new Exception(options.toString()); + } + } +} diff --git a/jdk/test/sun/security/krb5/config/SCDynamicConfigTest.java b/jdk/test/sun/security/krb5/config/SCDynamicConfigTest.java new file mode 100644 index 00000000000..b749927312b --- /dev/null +++ b/jdk/test/sun/security/krb5/config/SCDynamicConfigTest.java @@ -0,0 +1,102 @@ +/* + * Copyright (c) 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 7184246 + * @summary Simplify Config.get() of krb5 + */ +import java.lang.reflect.Field; +import java.lang.reflect.Method; +import java.util.Hashtable; +import java.util.Vector; +import sun.security.krb5.Config; +import sun.security.krb5.SCDynamicStoreConfig; + +public class SCDynamicConfigTest { + + static Vector>hosts() { + Vector > result = new Vector<>(); + Hashtable pair = new Hashtable<>(); + pair.put("host", "127.0.0.1"); + result.add(pair); + pair = new Hashtable<>(); + pair.put("host", "127.0.0.2"); + result.add(pair); + return result; + } + + public static void main(String[] args) throws Exception { + // Reconstruct a typical SCDynamicConfig.getKerberosConfig() output + Hashtable conf = new Hashtable<>(); + + Hashtable libdefaults = new Hashtable<>(); + libdefaults.put("default_realm", "REALM.COM"); + conf.put("libdefaults", libdefaults); + + Hashtable realms = new Hashtable<>(); + Hashtable thisRealm = new Hashtable<>(); + realms.put("REALM.COM", thisRealm); + thisRealm.put("kpasswd", hosts()); + thisRealm.put("kadmin", hosts()); + thisRealm.put("kdc", hosts()); + conf.put("realms", realms); + + Hashtable domain_realm = new Hashtable<>(); + domain_realm.put(".realm.com", "REALM.COM"); + domain_realm.put("realm.com", "REALM.COM"); + conf.put("domain_realm", domain_realm); + + System.out.println("SCDynamicConfig:\n"); + System.out.println(conf); + + // Simulate SCDynamicConfig.getConfig() output + Method m = SCDynamicStoreConfig.class.getDeclaredMethod( + "convertNativeConfig", Hashtable.class); + m.setAccessible(true); + conf = (Hashtable)m.invoke(null, conf); + + System.out.println("\nkrb5.conf:\n"); + System.out.println(conf); + + // Feed it into a Config object + System.setProperty("java.security.krb5.conf", "not-a-file"); + Config cf = Config.getInstance(); + Field f = Config.class.getDeclaredField("stanzaTable"); + f.setAccessible(true); + f.set(cf, conf); + + System.out.println("\nConfig:\n"); + System.out.println(cf); + + if (!cf.getDefaultRealm().equals("REALM.COM")) { + throw new Exception(); + } + if (!cf.getKDCList("REALM.COM").equals("127.0.0.1 127.0.0.2")) { + throw new Exception(); + } + if (!cf.get("domain_realm", ".realm.com").equals("REALM.COM")) { + throw new Exception(); + } + } +} diff --git a/jdk/test/sun/security/krb5/config/k1.conf b/jdk/test/sun/security/krb5/config/k1.conf new file mode 100644 index 00000000000..76b8513e74d --- /dev/null +++ b/jdk/test/sun/security/krb5/config/k1.conf @@ -0,0 +1,40 @@ +[libdefaults] +default_realm = R1 + +[libdefaults] +default_tkt_enctypes = aes128-cts +default_tkt_enctypes = aes256-cts + +[realms] +R1 = { + kdc = k1 +} +R1 = { + kdc = k2 +} +R2 = { + kdc = k1 + kdc = k2 k3 + admin_server = a1 + kdc = k4 +} + +[capaths] +R1 = { + R2 = R3 + R2 = R4 R5 + R2 = R6 +} + +[new] +x = { + y = { + z = { + a = { + b = { + c = d + } + } + } + } +} diff --git a/jdk/test/sun/security/krb5/config/kdc_default_options.conf b/jdk/test/sun/security/krb5/config/kdc_default_options.conf new file mode 100644 index 00000000000..03482c823fd --- /dev/null +++ b/jdk/test/sun/security/krb5/config/kdc_default_options.conf @@ -0,0 +1,3 @@ +[libdefaults] +default_realm = EXAMPLE.COM +kdc_default_options = 0x50000010 diff --git a/jdk/test/sun/security/krb5/runNameEquals.sh b/jdk/test/sun/security/krb5/runNameEquals.sh index 0f0ab172a44..15096cc99de 100644 --- a/jdk/test/sun/security/krb5/runNameEquals.sh +++ b/jdk/test/sun/security/krb5/runNameEquals.sh @@ -1,5 +1,5 @@ # -# Copyright (c) 2009, 2010, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2009, 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 diff --git a/jdk/test/sun/security/pkcs11/KeyStore/SecretKeysBasic.sh b/jdk/test/sun/security/pkcs11/KeyStore/SecretKeysBasic.sh index bfa08c807ce..4041c0e093a 100644 --- a/jdk/test/sun/security/pkcs11/KeyStore/SecretKeysBasic.sh +++ b/jdk/test/sun/security/pkcs11/KeyStore/SecretKeysBasic.sh @@ -1,5 +1,5 @@ # -# Copyright (c) 2008, 2011, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2008, 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 diff --git a/jdk/test/sun/security/pkcs11/Provider/ConfigQuotedString.sh b/jdk/test/sun/security/pkcs11/Provider/ConfigQuotedString.sh index 2511ff6694f..ce5693f5968 100644 --- a/jdk/test/sun/security/pkcs11/Provider/ConfigQuotedString.sh +++ b/jdk/test/sun/security/pkcs11/Provider/ConfigQuotedString.sh @@ -1,5 +1,5 @@ # -# Copyright (c) 2004, 2005, Oracle and/or its affiliates. All rights reserved. +# 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 diff --git a/jdk/test/sun/security/pkcs11/Provider/Login.sh b/jdk/test/sun/security/pkcs11/Provider/Login.sh index 6288a8f1364..86d8f9e4f70 100644 --- a/jdk/test/sun/security/pkcs11/Provider/Login.sh +++ b/jdk/test/sun/security/pkcs11/Provider/Login.sh @@ -1,5 +1,5 @@ # -# Copyright (c) 2004, Oracle and/or its affiliates. All rights reserved. +# 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 diff --git a/jdk/test/sun/security/pkcs11/Secmod/AddPrivateKey.java b/jdk/test/sun/security/pkcs11/Secmod/AddPrivateKey.java index a192d5255da..c99c498946d 100644 --- a/jdk/test/sun/security/pkcs11/Secmod/AddPrivateKey.java +++ b/jdk/test/sun/security/pkcs11/Secmod/AddPrivateKey.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2006, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2006, 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 diff --git a/jdk/test/sun/security/pkcs11/Secmod/AddTrustedCert.java b/jdk/test/sun/security/pkcs11/Secmod/AddTrustedCert.java index 2b43c3bbb10..1b3ff8194e7 100644 --- a/jdk/test/sun/security/pkcs11/Secmod/AddTrustedCert.java +++ b/jdk/test/sun/security/pkcs11/Secmod/AddTrustedCert.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2005, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2005, 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 diff --git a/jdk/test/sun/security/pkcs11/Secmod/Crypto.java b/jdk/test/sun/security/pkcs11/Secmod/Crypto.java index 97085c36719..c44ab87835f 100644 --- a/jdk/test/sun/security/pkcs11/Secmod/Crypto.java +++ b/jdk/test/sun/security/pkcs11/Secmod/Crypto.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2005, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2005, 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 diff --git a/jdk/test/sun/security/pkcs11/Secmod/GetPrivateKey.java b/jdk/test/sun/security/pkcs11/Secmod/GetPrivateKey.java index ec130ac11e5..a41bef9c77e 100644 --- a/jdk/test/sun/security/pkcs11/Secmod/GetPrivateKey.java +++ b/jdk/test/sun/security/pkcs11/Secmod/GetPrivateKey.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2005, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2005, 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 diff --git a/jdk/test/sun/security/pkcs11/Secmod/JksSetPrivateKey.java b/jdk/test/sun/security/pkcs11/Secmod/JksSetPrivateKey.java index d302aad99d5..e3a60befff4 100644 --- a/jdk/test/sun/security/pkcs11/Secmod/JksSetPrivateKey.java +++ b/jdk/test/sun/security/pkcs11/Secmod/JksSetPrivateKey.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2006, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2006, 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 diff --git a/jdk/test/sun/security/pkcs11/Secmod/TrustAnchors.java b/jdk/test/sun/security/pkcs11/Secmod/TrustAnchors.java index 3d15b3f5128..646b81bfd81 100644 --- a/jdk/test/sun/security/pkcs11/Secmod/TrustAnchors.java +++ b/jdk/test/sun/security/pkcs11/Secmod/TrustAnchors.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2005, 2006, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2005, 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 diff --git a/jdk/test/sun/security/pkcs11/SecmodTest.java b/jdk/test/sun/security/pkcs11/SecmodTest.java index 76f68da0bb1..8973f8b2582 100644 --- a/jdk/test/sun/security/pkcs11/SecmodTest.java +++ b/jdk/test/sun/security/pkcs11/SecmodTest.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2005, 2006, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2005, 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 diff --git a/jdk/test/sun/security/pkcs11/ec/ReadCertificates.java b/jdk/test/sun/security/pkcs11/ec/ReadCertificates.java index eba81c6d3ea..35662d6c624 100644 --- a/jdk/test/sun/security/pkcs11/ec/ReadCertificates.java +++ b/jdk/test/sun/security/pkcs11/ec/ReadCertificates.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2006, 2007, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2006, 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 diff --git a/jdk/test/sun/security/pkcs11/ec/ReadPKCS12.java b/jdk/test/sun/security/pkcs11/ec/ReadPKCS12.java index 6acc667aaf3..930e0625b43 100644 --- a/jdk/test/sun/security/pkcs11/ec/ReadPKCS12.java +++ b/jdk/test/sun/security/pkcs11/ec/ReadPKCS12.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2006, 2007, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2006, 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 diff --git a/jdk/test/sun/security/pkcs11/ec/TestECDH.java b/jdk/test/sun/security/pkcs11/ec/TestECDH.java index aa26d5c6d43..1d70befc89c 100644 --- a/jdk/test/sun/security/pkcs11/ec/TestECDH.java +++ b/jdk/test/sun/security/pkcs11/ec/TestECDH.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2006, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2006, 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 diff --git a/jdk/test/sun/security/pkcs11/ec/TestECDSA.java b/jdk/test/sun/security/pkcs11/ec/TestECDSA.java index 6f5325aae9e..a684d8aa8e1 100644 --- a/jdk/test/sun/security/pkcs11/ec/TestECDSA.java +++ b/jdk/test/sun/security/pkcs11/ec/TestECDSA.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2006, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2006, 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 diff --git a/jdk/test/sun/security/pkcs11/fips/TrustManagerTest.java b/jdk/test/sun/security/pkcs11/fips/TrustManagerTest.java index 81fba236ce2..76c5dadfd64 100644 --- a/jdk/test/sun/security/pkcs11/fips/TrustManagerTest.java +++ b/jdk/test/sun/security/pkcs11/fips/TrustManagerTest.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2005, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2005, 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 diff --git a/jdk/test/sun/security/pkcs11/rsa/TestCACerts.java b/jdk/test/sun/security/pkcs11/rsa/TestCACerts.java index 188b94cd6aa..5e9f9ed061d 100644 --- a/jdk/test/sun/security/pkcs11/rsa/TestCACerts.java +++ b/jdk/test/sun/security/pkcs11/rsa/TestCACerts.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 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 diff --git a/jdk/test/sun/security/pkcs11/sslecc/ClientJSSEServerJSSE.java b/jdk/test/sun/security/pkcs11/sslecc/ClientJSSEServerJSSE.java index c940d562dfa..5ccaa0ab72a 100644 --- a/jdk/test/sun/security/pkcs11/sslecc/ClientJSSEServerJSSE.java +++ b/jdk/test/sun/security/pkcs11/sslecc/ClientJSSEServerJSSE.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2002, 2006, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2002, 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 diff --git a/jdk/test/sun/security/pkcs12/PKCS12SameKeyId.java b/jdk/test/sun/security/pkcs12/PKCS12SameKeyId.java index 0d06d730f58..f65292aeba1 100644 --- a/jdk/test/sun/security/pkcs12/PKCS12SameKeyId.java +++ b/jdk/test/sun/security/pkcs12/PKCS12SameKeyId.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2010, 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 @@ -25,6 +25,8 @@ * @test * @bug 6958026 * @summary Problem with PKCS12 keystore + * @compile -XDignore.symbol.file PKCS12SameKeyId.java + * @run main PKCS12SameKeyId */ import java.io.File; @@ -40,7 +42,6 @@ import javax.crypto.SecretKeyFactory; import javax.crypto.spec.PBEKeySpec; import javax.crypto.spec.PBEParameterSpec; import sun.security.pkcs.EncryptedPrivateKeyInfo; -import sun.security.tools.KeyTool; import sun.security.util.ObjectIdentifier; import sun.security.x509.AlgorithmId; import sun.security.x509.X500Name; @@ -61,7 +62,7 @@ public class PKCS12SameKeyId { String cmd = "-keystore " + JKSFILE + " -storepass changeit -keypass changeit " + "-genkeypair -alias p" + i + " -dname CN=" + i; - KeyTool.main(cmd.split(" ")); + sun.security.tools.keytool.Main.main(cmd.split(" ")); } // Prepare EncryptedPrivateKeyInfo parameters, copied from various diff --git a/jdk/test/sun/security/provider/DSA/TestKeyPairGenerator.java b/jdk/test/sun/security/provider/DSA/TestKeyPairGenerator.java index f0c0fc37828..10483d5e66c 100644 --- a/jdk/test/sun/security/provider/DSA/TestKeyPairGenerator.java +++ b/jdk/test/sun/security/provider/DSA/TestKeyPairGenerator.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 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 diff --git a/jdk/test/sun/security/provider/PolicyFile/Comparator.java b/jdk/test/sun/security/provider/PolicyFile/Comparator.java index 41d8938fc84..5f65d464164 100644 --- a/jdk/test/sun/security/provider/PolicyFile/Comparator.java +++ b/jdk/test/sun/security/provider/PolicyFile/Comparator.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2004, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2004, 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 diff --git a/jdk/test/sun/security/provider/PolicyFile/getinstance/getinstance.sh b/jdk/test/sun/security/provider/PolicyFile/getinstance/getinstance.sh index 6e7442b5601..b52db72b326 100644 --- a/jdk/test/sun/security/provider/PolicyFile/getinstance/getinstance.sh +++ b/jdk/test/sun/security/provider/PolicyFile/getinstance/getinstance.sh @@ -1,7 +1,7 @@ #! /bin/sh # -# Copyright (c) 2001, 2003, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2001, 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 diff --git a/jdk/test/sun/security/provider/X509Factory/BigCRL.java b/jdk/test/sun/security/provider/X509Factory/BigCRL.java index 355c9becf72..bfc6b564ebb 100644 --- a/jdk/test/sun/security/provider/X509Factory/BigCRL.java +++ b/jdk/test/sun/security/provider/X509Factory/BigCRL.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2011, 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 diff --git a/jdk/test/sun/security/ssl/com/sun/net/ssl/SSLSecurity/ProviderTest.java b/jdk/test/sun/security/ssl/com/sun/net/ssl/SSLSecurity/ProviderTest.java index 2bb3b37c7b7..625af1791bd 100644 --- a/jdk/test/sun/security/ssl/com/sun/net/ssl/SSLSecurity/ProviderTest.java +++ b/jdk/test/sun/security/ssl/com/sun/net/ssl/SSLSecurity/ProviderTest.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2002, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2002, 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 diff --git a/jdk/test/sun/security/ssl/com/sun/net/ssl/internal/ssl/AppInputStream/ReadBlocksClose.java b/jdk/test/sun/security/ssl/com/sun/net/ssl/internal/ssl/AppInputStream/ReadBlocksClose.java index 288859157ca..e14976ce777 100644 --- a/jdk/test/sun/security/ssl/com/sun/net/ssl/internal/ssl/AppInputStream/ReadBlocksClose.java +++ b/jdk/test/sun/security/ssl/com/sun/net/ssl/internal/ssl/AppInputStream/ReadBlocksClose.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 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 diff --git a/jdk/test/sun/security/ssl/com/sun/net/ssl/internal/ssl/AppInputStream/ReadHandshake.java b/jdk/test/sun/security/ssl/com/sun/net/ssl/internal/ssl/AppInputStream/ReadHandshake.java index ae726bf4d4d..f9d9342d017 100644 --- a/jdk/test/sun/security/ssl/com/sun/net/ssl/internal/ssl/AppInputStream/ReadHandshake.java +++ b/jdk/test/sun/security/ssl/com/sun/net/ssl/internal/ssl/AppInputStream/ReadHandshake.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2001, 2005, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2001, 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 diff --git a/jdk/test/sun/security/ssl/com/sun/net/ssl/internal/ssl/AppInputStream/ReadZeroBytes.java b/jdk/test/sun/security/ssl/com/sun/net/ssl/internal/ssl/AppInputStream/ReadZeroBytes.java index 625e459baa7..566fdc034a3 100644 --- a/jdk/test/sun/security/ssl/com/sun/net/ssl/internal/ssl/AppInputStream/ReadZeroBytes.java +++ b/jdk/test/sun/security/ssl/com/sun/net/ssl/internal/ssl/AppInputStream/ReadZeroBytes.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2009, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2009, 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 diff --git a/jdk/test/sun/security/ssl/com/sun/net/ssl/internal/ssl/AppInputStream/RemoveMarkReset.java b/jdk/test/sun/security/ssl/com/sun/net/ssl/internal/ssl/AppInputStream/RemoveMarkReset.java index cdc8658ce57..096f12f8a87 100644 --- a/jdk/test/sun/security/ssl/com/sun/net/ssl/internal/ssl/AppInputStream/RemoveMarkReset.java +++ b/jdk/test/sun/security/ssl/com/sun/net/ssl/internal/ssl/AppInputStream/RemoveMarkReset.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2001, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2001, 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 diff --git a/jdk/test/sun/security/ssl/com/sun/net/ssl/internal/ssl/AppOutputStream/NoExceptionOnClose.java b/jdk/test/sun/security/ssl/com/sun/net/ssl/internal/ssl/AppOutputStream/NoExceptionOnClose.java index 8d2a9d244d3..a085d47ff04 100644 --- a/jdk/test/sun/security/ssl/com/sun/net/ssl/internal/ssl/AppOutputStream/NoExceptionOnClose.java +++ b/jdk/test/sun/security/ssl/com/sun/net/ssl/internal/ssl/AppOutputStream/NoExceptionOnClose.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2001, 2002, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2001, 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 diff --git a/jdk/test/sun/security/ssl/com/sun/net/ssl/internal/ssl/ClientHandshaker/CipherSuiteOrder.java b/jdk/test/sun/security/ssl/com/sun/net/ssl/internal/ssl/ClientHandshaker/CipherSuiteOrder.java index 9f01c477fe7..75e7436291f 100644 --- a/jdk/test/sun/security/ssl/com/sun/net/ssl/internal/ssl/ClientHandshaker/CipherSuiteOrder.java +++ b/jdk/test/sun/security/ssl/com/sun/net/ssl/internal/ssl/ClientHandshaker/CipherSuiteOrder.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2001, 2002, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2001, 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 diff --git a/jdk/test/sun/security/ssl/com/sun/net/ssl/internal/ssl/ClientHandshaker/RSAExport.java b/jdk/test/sun/security/ssl/com/sun/net/ssl/internal/ssl/ClientHandshaker/RSAExport.java index 0ead094c084..d63fc8ea0d1 100644 --- a/jdk/test/sun/security/ssl/com/sun/net/ssl/internal/ssl/ClientHandshaker/RSAExport.java +++ b/jdk/test/sun/security/ssl/com/sun/net/ssl/internal/ssl/ClientHandshaker/RSAExport.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2008, Oracle and/or its affiliates. All rights reserved. + * 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 diff --git a/jdk/test/sun/security/ssl/com/sun/net/ssl/internal/ssl/GenSSLConfigs/main.java b/jdk/test/sun/security/ssl/com/sun/net/ssl/internal/ssl/GenSSLConfigs/main.java index 432aed4ffe3..dbe16292e04 100644 --- a/jdk/test/sun/security/ssl/com/sun/net/ssl/internal/ssl/GenSSLConfigs/main.java +++ b/jdk/test/sun/security/ssl/com/sun/net/ssl/internal/ssl/GenSSLConfigs/main.java @@ -6,7 +6,7 @@ */ /* - * Copyright (c) 1997, 2005, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 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 diff --git a/jdk/test/sun/security/ssl/com/sun/net/ssl/internal/ssl/HandshakeOutStream/NullCerts.java b/jdk/test/sun/security/ssl/com/sun/net/ssl/internal/ssl/HandshakeOutStream/NullCerts.java index 0ffc0fac312..13b615456fc 100644 --- a/jdk/test/sun/security/ssl/com/sun/net/ssl/internal/ssl/HandshakeOutStream/NullCerts.java +++ b/jdk/test/sun/security/ssl/com/sun/net/ssl/internal/ssl/HandshakeOutStream/NullCerts.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2001, 2003, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2001, 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 diff --git a/jdk/test/sun/security/ssl/com/sun/net/ssl/internal/ssl/InputRecord/SSLSocketTimeoutNulls.java b/jdk/test/sun/security/ssl/com/sun/net/ssl/internal/ssl/InputRecord/SSLSocketTimeoutNulls.java index 0a674a4a77a..70344cde866 100644 --- a/jdk/test/sun/security/ssl/com/sun/net/ssl/internal/ssl/InputRecord/SSLSocketTimeoutNulls.java +++ b/jdk/test/sun/security/ssl/com/sun/net/ssl/internal/ssl/InputRecord/SSLSocketTimeoutNulls.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2001, 2002, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2001, 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 diff --git a/jdk/test/sun/security/ssl/com/sun/net/ssl/internal/ssl/SSLContextImpl/BadKSProvider.java b/jdk/test/sun/security/ssl/com/sun/net/ssl/internal/ssl/SSLContextImpl/BadKSProvider.java index 49b7841aeac..8e5f931e0a4 100644 --- a/jdk/test/sun/security/ssl/com/sun/net/ssl/internal/ssl/SSLContextImpl/BadKSProvider.java +++ b/jdk/test/sun/security/ssl/com/sun/net/ssl/internal/ssl/SSLContextImpl/BadKSProvider.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, 2005, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 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 diff --git a/jdk/test/sun/security/ssl/com/sun/net/ssl/internal/ssl/SSLContextImpl/BadTSProvider.java b/jdk/test/sun/security/ssl/com/sun/net/ssl/internal/ssl/SSLContextImpl/BadTSProvider.java index 20a8b99eece..93355acf93d 100644 --- a/jdk/test/sun/security/ssl/com/sun/net/ssl/internal/ssl/SSLContextImpl/BadTSProvider.java +++ b/jdk/test/sun/security/ssl/com/sun/net/ssl/internal/ssl/SSLContextImpl/BadTSProvider.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, 2005, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 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 diff --git a/jdk/test/sun/security/ssl/com/sun/net/ssl/internal/ssl/SSLContextImpl/GoodProvider.java b/jdk/test/sun/security/ssl/com/sun/net/ssl/internal/ssl/SSLContextImpl/GoodProvider.java index 64c55c7ade4..0ca10ec0d8c 100644 --- a/jdk/test/sun/security/ssl/com/sun/net/ssl/internal/ssl/SSLContextImpl/GoodProvider.java +++ b/jdk/test/sun/security/ssl/com/sun/net/ssl/internal/ssl/SSLContextImpl/GoodProvider.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 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 diff --git a/jdk/test/sun/security/ssl/com/sun/net/ssl/internal/ssl/SSLEngineImpl/RehandshakeFinished.java b/jdk/test/sun/security/ssl/com/sun/net/ssl/internal/ssl/SSLEngineImpl/RehandshakeFinished.java index 60e4acd85d7..da8e591d922 100644 --- a/jdk/test/sun/security/ssl/com/sun/net/ssl/internal/ssl/SSLEngineImpl/RehandshakeFinished.java +++ b/jdk/test/sun/security/ssl/com/sun/net/ssl/internal/ssl/SSLEngineImpl/RehandshakeFinished.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2004, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2004, 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 diff --git a/jdk/test/sun/security/ssl/com/sun/net/ssl/internal/ssl/SSLEngineImpl/SSLEngineDeadlock.java b/jdk/test/sun/security/ssl/com/sun/net/ssl/internal/ssl/SSLEngineImpl/SSLEngineDeadlock.java index 6914a5cda56..1de0ab3bc54 100644 --- a/jdk/test/sun/security/ssl/com/sun/net/ssl/internal/ssl/SSLEngineImpl/SSLEngineDeadlock.java +++ b/jdk/test/sun/security/ssl/com/sun/net/ssl/internal/ssl/SSLEngineImpl/SSLEngineDeadlock.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2007, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2007, 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 diff --git a/jdk/test/sun/security/ssl/com/sun/net/ssl/internal/ssl/SSLSessionImpl/HashCodeMissing.java b/jdk/test/sun/security/ssl/com/sun/net/ssl/internal/ssl/SSLSessionImpl/HashCodeMissing.java index f10edfbb215..fa0433187f9 100644 --- a/jdk/test/sun/security/ssl/com/sun/net/ssl/internal/ssl/SSLSessionImpl/HashCodeMissing.java +++ b/jdk/test/sun/security/ssl/com/sun/net/ssl/internal/ssl/SSLSessionImpl/HashCodeMissing.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 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 diff --git a/jdk/test/sun/security/ssl/com/sun/net/ssl/internal/ssl/SSLSocketImpl/AsyncSSLSocketClose.java b/jdk/test/sun/security/ssl/com/sun/net/ssl/internal/ssl/SSLSocketImpl/AsyncSSLSocketClose.java index de582a9d242..b65f8836be3 100644 --- a/jdk/test/sun/security/ssl/com/sun/net/ssl/internal/ssl/SSLSocketImpl/AsyncSSLSocketClose.java +++ b/jdk/test/sun/security/ssl/com/sun/net/ssl/internal/ssl/SSLSocketImpl/AsyncSSLSocketClose.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2007, 2008, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2007, 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 diff --git a/jdk/test/sun/security/ssl/com/sun/net/ssl/internal/ssl/SSLSocketImpl/ClientModeClientAuth.java b/jdk/test/sun/security/ssl/com/sun/net/ssl/internal/ssl/SSLSocketImpl/ClientModeClientAuth.java index adf86a0b6d9..8f279e8c5bc 100644 --- a/jdk/test/sun/security/ssl/com/sun/net/ssl/internal/ssl/SSLSocketImpl/ClientModeClientAuth.java +++ b/jdk/test/sun/security/ssl/com/sun/net/ssl/internal/ssl/SSLSocketImpl/ClientModeClientAuth.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2001, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2001, 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 diff --git a/jdk/test/sun/security/ssl/com/sun/net/ssl/internal/ssl/SSLSocketImpl/ClientTimeout.java b/jdk/test/sun/security/ssl/com/sun/net/ssl/internal/ssl/SSLSocketImpl/ClientTimeout.java index a01789e4e06..16d28193c75 100644 --- a/jdk/test/sun/security/ssl/com/sun/net/ssl/internal/ssl/SSLSocketImpl/ClientTimeout.java +++ b/jdk/test/sun/security/ssl/com/sun/net/ssl/internal/ssl/SSLSocketImpl/ClientTimeout.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2005, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2005, 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 diff --git a/jdk/test/sun/security/ssl/com/sun/net/ssl/internal/ssl/SSLSocketImpl/CloseSocketException.java b/jdk/test/sun/security/ssl/com/sun/net/ssl/internal/ssl/SSLSocketImpl/CloseSocketException.java index 2958269cb00..41b88c1facd 100644 --- a/jdk/test/sun/security/ssl/com/sun/net/ssl/internal/ssl/SSLSocketImpl/CloseSocketException.java +++ b/jdk/test/sun/security/ssl/com/sun/net/ssl/internal/ssl/SSLSocketImpl/CloseSocketException.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 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 diff --git a/jdk/test/sun/security/ssl/com/sun/net/ssl/internal/ssl/SSLSocketImpl/InvalidateServerSessionRenegotiate.java b/jdk/test/sun/security/ssl/com/sun/net/ssl/internal/ssl/SSLSocketImpl/InvalidateServerSessionRenegotiate.java index b0764a54a4f..2a6f0a8fa56 100644 --- a/jdk/test/sun/security/ssl/com/sun/net/ssl/internal/ssl/SSLSocketImpl/InvalidateServerSessionRenegotiate.java +++ b/jdk/test/sun/security/ssl/com/sun/net/ssl/internal/ssl/SSLSocketImpl/InvalidateServerSessionRenegotiate.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2001, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2001, 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 diff --git a/jdk/test/sun/security/ssl/com/sun/net/ssl/internal/ssl/SSLSocketImpl/NewSocketMethods.java b/jdk/test/sun/security/ssl/com/sun/net/ssl/internal/ssl/SSLSocketImpl/NewSocketMethods.java index 66fdda584ca..b78154958c9 100644 --- a/jdk/test/sun/security/ssl/com/sun/net/ssl/internal/ssl/SSLSocketImpl/NewSocketMethods.java +++ b/jdk/test/sun/security/ssl/com/sun/net/ssl/internal/ssl/SSLSocketImpl/NewSocketMethods.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2001, 2002, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2001, 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 diff --git a/jdk/test/sun/security/ssl/com/sun/net/ssl/internal/ssl/SSLSocketImpl/NonAutoClose.java b/jdk/test/sun/security/ssl/com/sun/net/ssl/internal/ssl/SSLSocketImpl/NonAutoClose.java index dedac497df5..1d465e343c4 100644 --- a/jdk/test/sun/security/ssl/com/sun/net/ssl/internal/ssl/SSLSocketImpl/NonAutoClose.java +++ b/jdk/test/sun/security/ssl/com/sun/net/ssl/internal/ssl/SSLSocketImpl/NonAutoClose.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2001, 2002, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2001, 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 diff --git a/jdk/test/sun/security/ssl/com/sun/net/ssl/internal/ssl/SSLSocketImpl/NotifyHandshakeTest.sh b/jdk/test/sun/security/ssl/com/sun/net/ssl/internal/ssl/SSLSocketImpl/NotifyHandshakeTest.sh index aa01dcaef5e..fa5a410aa64 100644 --- a/jdk/test/sun/security/ssl/com/sun/net/ssl/internal/ssl/SSLSocketImpl/NotifyHandshakeTest.sh +++ b/jdk/test/sun/security/ssl/com/sun/net/ssl/internal/ssl/SSLSocketImpl/NotifyHandshakeTest.sh @@ -1,5 +1,5 @@ # -# Copyright (c) 2002, 2003, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2002, 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 diff --git a/jdk/test/sun/security/ssl/com/sun/net/ssl/internal/ssl/SSLSocketImpl/ReuseAddr.java b/jdk/test/sun/security/ssl/com/sun/net/ssl/internal/ssl/SSLSocketImpl/ReuseAddr.java index 638303669de..db5209f9095 100644 --- a/jdk/test/sun/security/ssl/com/sun/net/ssl/internal/ssl/SSLSocketImpl/ReuseAddr.java +++ b/jdk/test/sun/security/ssl/com/sun/net/ssl/internal/ssl/SSLSocketImpl/ReuseAddr.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2001, 2002, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2001, 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 diff --git a/jdk/test/sun/security/ssl/com/sun/net/ssl/internal/ssl/SSLSocketImpl/ReverseNameLookup.java b/jdk/test/sun/security/ssl/com/sun/net/ssl/internal/ssl/SSLSocketImpl/ReverseNameLookup.java index f8f570b64b4..612712b35bf 100644 --- a/jdk/test/sun/security/ssl/com/sun/net/ssl/internal/ssl/SSLSocketImpl/ReverseNameLookup.java +++ b/jdk/test/sun/security/ssl/com/sun/net/ssl/internal/ssl/SSLSocketImpl/ReverseNameLookup.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2002, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2002, 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 diff --git a/jdk/test/sun/security/ssl/com/sun/net/ssl/internal/ssl/SSLSocketImpl/SSLSocketImplThrowsWrongExceptions.java b/jdk/test/sun/security/ssl/com/sun/net/ssl/internal/ssl/SSLSocketImpl/SSLSocketImplThrowsWrongExceptions.java index dcbf0aab6d1..4c8ad80cbf7 100644 --- a/jdk/test/sun/security/ssl/com/sun/net/ssl/internal/ssl/SSLSocketImpl/SSLSocketImplThrowsWrongExceptions.java +++ b/jdk/test/sun/security/ssl/com/sun/net/ssl/internal/ssl/SSLSocketImpl/SSLSocketImplThrowsWrongExceptions.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2001, 2002, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2001, 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 diff --git a/jdk/test/sun/security/ssl/com/sun/net/ssl/internal/ssl/SSLSocketImpl/ServerTimeout.java b/jdk/test/sun/security/ssl/com/sun/net/ssl/internal/ssl/SSLSocketImpl/ServerTimeout.java index aa116cf1867..ff7c0db1203 100644 --- a/jdk/test/sun/security/ssl/com/sun/net/ssl/internal/ssl/SSLSocketImpl/ServerTimeout.java +++ b/jdk/test/sun/security/ssl/com/sun/net/ssl/internal/ssl/SSLSocketImpl/ServerTimeout.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2005, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2005, 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 diff --git a/jdk/test/sun/security/ssl/com/sun/net/ssl/internal/ssl/SSLSocketImpl/SetClientMode.java b/jdk/test/sun/security/ssl/com/sun/net/ssl/internal/ssl/SSLSocketImpl/SetClientMode.java index 8d3da6cf024..f26ae0a0c7f 100644 --- a/jdk/test/sun/security/ssl/com/sun/net/ssl/internal/ssl/SSLSocketImpl/SetClientMode.java +++ b/jdk/test/sun/security/ssl/com/sun/net/ssl/internal/ssl/SSLSocketImpl/SetClientMode.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2005, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2005, 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 diff --git a/jdk/test/sun/security/ssl/com/sun/net/ssl/internal/ssl/SSLSocketImpl/UnconnectedSocketWrongExceptions.java b/jdk/test/sun/security/ssl/com/sun/net/ssl/internal/ssl/SSLSocketImpl/UnconnectedSocketWrongExceptions.java index 672e4b6e5ba..63fb43fa56b 100644 --- a/jdk/test/sun/security/ssl/com/sun/net/ssl/internal/ssl/SSLSocketImpl/UnconnectedSocketWrongExceptions.java +++ b/jdk/test/sun/security/ssl/com/sun/net/ssl/internal/ssl/SSLSocketImpl/UnconnectedSocketWrongExceptions.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2001, 2002, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2001, 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 diff --git a/jdk/test/sun/security/ssl/com/sun/net/ssl/internal/ssl/ServerHandshaker/AnonCipherWithWantClientAuth.java b/jdk/test/sun/security/ssl/com/sun/net/ssl/internal/ssl/ServerHandshaker/AnonCipherWithWantClientAuth.java index 6390a40227a..137f11460a6 100644 --- a/jdk/test/sun/security/ssl/com/sun/net/ssl/internal/ssl/ServerHandshaker/AnonCipherWithWantClientAuth.java +++ b/jdk/test/sun/security/ssl/com/sun/net/ssl/internal/ssl/ServerHandshaker/AnonCipherWithWantClientAuth.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2001, 2002, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2001, 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 diff --git a/jdk/test/sun/security/ssl/com/sun/net/ssl/internal/ssl/ServerHandshaker/GetPeerHost.java b/jdk/test/sun/security/ssl/com/sun/net/ssl/internal/ssl/ServerHandshaker/GetPeerHost.java index bc6b4e8eddb..b14e5cf3ea2 100644 --- a/jdk/test/sun/security/ssl/com/sun/net/ssl/internal/ssl/ServerHandshaker/GetPeerHost.java +++ b/jdk/test/sun/security/ssl/com/sun/net/ssl/internal/ssl/ServerHandshaker/GetPeerHost.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2000, 2001, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2000, 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 diff --git a/jdk/test/sun/security/ssl/com/sun/net/ssl/internal/ssl/SocketCreation/SocketCreation.java b/jdk/test/sun/security/ssl/com/sun/net/ssl/internal/ssl/SocketCreation/SocketCreation.java index e79495e92a2..f81675c3725 100644 --- a/jdk/test/sun/security/ssl/com/sun/net/ssl/internal/ssl/SocketCreation/SocketCreation.java +++ b/jdk/test/sun/security/ssl/com/sun/net/ssl/internal/ssl/SocketCreation/SocketCreation.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2001, 2002, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2001, 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 diff --git a/jdk/test/sun/security/ssl/com/sun/net/ssl/internal/ssl/X509TrustManagerImpl/ClientServer.java b/jdk/test/sun/security/ssl/com/sun/net/ssl/internal/ssl/X509TrustManagerImpl/ClientServer.java index 8b724335d9c..c6099b407b4 100644 --- a/jdk/test/sun/security/ssl/com/sun/net/ssl/internal/ssl/X509TrustManagerImpl/ClientServer.java +++ b/jdk/test/sun/security/ssl/com/sun/net/ssl/internal/ssl/X509TrustManagerImpl/ClientServer.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2002, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2002, 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 diff --git a/jdk/test/sun/security/ssl/com/sun/net/ssl/internal/ssl/X509TrustManagerImpl/PKIXExtendedTM.java b/jdk/test/sun/security/ssl/com/sun/net/ssl/internal/ssl/X509TrustManagerImpl/PKIXExtendedTM.java index 0ff498d36d1..aaf5fb2447d 100644 --- a/jdk/test/sun/security/ssl/com/sun/net/ssl/internal/ssl/X509TrustManagerImpl/PKIXExtendedTM.java +++ b/jdk/test/sun/security/ssl/com/sun/net/ssl/internal/ssl/X509TrustManagerImpl/PKIXExtendedTM.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2010, 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 diff --git a/jdk/test/sun/security/ssl/com/sun/net/ssl/internal/ssl/X509TrustManagerImpl/SelfIssuedCert.java b/jdk/test/sun/security/ssl/com/sun/net/ssl/internal/ssl/X509TrustManagerImpl/SelfIssuedCert.java index 6605d607c81..0037b6f379f 100644 --- a/jdk/test/sun/security/ssl/com/sun/net/ssl/internal/ssl/X509TrustManagerImpl/SelfIssuedCert.java +++ b/jdk/test/sun/security/ssl/com/sun/net/ssl/internal/ssl/X509TrustManagerImpl/SelfIssuedCert.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2009, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2009, 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 diff --git a/jdk/test/sun/security/ssl/com/sun/net/ssl/internal/ssl/X509TrustManagerImpl/SunX509ExtendedTM.java b/jdk/test/sun/security/ssl/com/sun/net/ssl/internal/ssl/X509TrustManagerImpl/SunX509ExtendedTM.java index b7a3613cc43..561718fe59e 100644 --- a/jdk/test/sun/security/ssl/com/sun/net/ssl/internal/ssl/X509TrustManagerImpl/SunX509ExtendedTM.java +++ b/jdk/test/sun/security/ssl/com/sun/net/ssl/internal/ssl/X509TrustManagerImpl/SunX509ExtendedTM.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2010, 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 diff --git a/jdk/test/sun/security/ssl/com/sun/net/ssl/internal/ssl/X509TrustManagerImpl/X509ExtendedTMEnabled.java b/jdk/test/sun/security/ssl/com/sun/net/ssl/internal/ssl/X509TrustManagerImpl/X509ExtendedTMEnabled.java index 6a8659c0418..d257d241ff9 100644 --- a/jdk/test/sun/security/ssl/com/sun/net/ssl/internal/ssl/X509TrustManagerImpl/X509ExtendedTMEnabled.java +++ b/jdk/test/sun/security/ssl/com/sun/net/ssl/internal/ssl/X509TrustManagerImpl/X509ExtendedTMEnabled.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2010, 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 diff --git a/jdk/test/sun/security/ssl/com/sun/net/ssl/internal/ssl/spi/ProviderInit.java b/jdk/test/sun/security/ssl/com/sun/net/ssl/internal/ssl/spi/ProviderInit.java index 23d57f860cc..682d80ade01 100644 --- a/jdk/test/sun/security/ssl/com/sun/net/ssl/internal/ssl/spi/ProviderInit.java +++ b/jdk/test/sun/security/ssl/com/sun/net/ssl/internal/ssl/spi/ProviderInit.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2002, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2002, 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 diff --git a/jdk/test/sun/security/ssl/com/sun/net/ssl/internal/www/protocol/https/HttpsURLConnection/CriticalSubjectAltName.java b/jdk/test/sun/security/ssl/com/sun/net/ssl/internal/www/protocol/https/HttpsURLConnection/CriticalSubjectAltName.java index e11b3f0c99b..e01115224c5 100644 --- a/jdk/test/sun/security/ssl/com/sun/net/ssl/internal/www/protocol/https/HttpsURLConnection/CriticalSubjectAltName.java +++ b/jdk/test/sun/security/ssl/com/sun/net/ssl/internal/www/protocol/https/HttpsURLConnection/CriticalSubjectAltName.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2001, 2008, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2001, 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 diff --git a/jdk/test/sun/security/ssl/com/sun/net/ssl/internal/www/protocol/https/HttpsURLConnection/GetResponseCode.java b/jdk/test/sun/security/ssl/com/sun/net/ssl/internal/www/protocol/https/HttpsURLConnection/GetResponseCode.java index 5eb8ba15279..9335085eeba 100644 --- a/jdk/test/sun/security/ssl/com/sun/net/ssl/internal/www/protocol/https/HttpsURLConnection/GetResponseCode.java +++ b/jdk/test/sun/security/ssl/com/sun/net/ssl/internal/www/protocol/https/HttpsURLConnection/GetResponseCode.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2001, 2002, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2001, 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 diff --git a/jdk/test/sun/security/ssl/javax/net/ssl/FixingJavadocs/ImplicitHandshake.java b/jdk/test/sun/security/ssl/javax/net/ssl/FixingJavadocs/ImplicitHandshake.java index 8de05f1a094..8badfd66224 100644 --- a/jdk/test/sun/security/ssl/javax/net/ssl/FixingJavadocs/ImplicitHandshake.java +++ b/jdk/test/sun/security/ssl/javax/net/ssl/FixingJavadocs/ImplicitHandshake.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2001, 2002, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2001, 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 diff --git a/jdk/test/sun/security/ssl/javax/net/ssl/FixingJavadocs/SSLSessionNulls.java b/jdk/test/sun/security/ssl/javax/net/ssl/FixingJavadocs/SSLSessionNulls.java index 4bb6cb082a8..fc9cfbf1071 100644 --- a/jdk/test/sun/security/ssl/javax/net/ssl/FixingJavadocs/SSLSessionNulls.java +++ b/jdk/test/sun/security/ssl/javax/net/ssl/FixingJavadocs/SSLSessionNulls.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2001, 2002, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2001, 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 diff --git a/jdk/test/sun/security/ssl/javax/net/ssl/FixingJavadocs/SSLSocketInherit.java b/jdk/test/sun/security/ssl/javax/net/ssl/FixingJavadocs/SSLSocketInherit.java index 27fd5c076d0..2e3f544d246 100644 --- a/jdk/test/sun/security/ssl/javax/net/ssl/FixingJavadocs/SSLSocketInherit.java +++ b/jdk/test/sun/security/ssl/javax/net/ssl/FixingJavadocs/SSLSocketInherit.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2001, 2005, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2001, 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 diff --git a/jdk/test/sun/security/ssl/javax/net/ssl/NewAPIs/CheckMyTrustedKeystore.java b/jdk/test/sun/security/ssl/javax/net/ssl/NewAPIs/CheckMyTrustedKeystore.java index 4ba4ea15a48..7dee02ea699 100644 --- a/jdk/test/sun/security/ssl/javax/net/ssl/NewAPIs/CheckMyTrustedKeystore.java +++ b/jdk/test/sun/security/ssl/javax/net/ssl/NewAPIs/CheckMyTrustedKeystore.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2001, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2001, 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 diff --git a/jdk/test/sun/security/ssl/javax/net/ssl/NewAPIs/HttpsURLConnectionLocalCertificateChain.java b/jdk/test/sun/security/ssl/javax/net/ssl/NewAPIs/HttpsURLConnectionLocalCertificateChain.java index 1a05bc01530..ec773b244dd 100644 --- a/jdk/test/sun/security/ssl/javax/net/ssl/NewAPIs/HttpsURLConnectionLocalCertificateChain.java +++ b/jdk/test/sun/security/ssl/javax/net/ssl/NewAPIs/HttpsURLConnectionLocalCertificateChain.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2001, 2003, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2001, 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 diff --git a/jdk/test/sun/security/ssl/javax/net/ssl/NewAPIs/JSSERenegotiate.java b/jdk/test/sun/security/ssl/javax/net/ssl/NewAPIs/JSSERenegotiate.java index 9e71fe7f48d..748b5fed6d4 100644 --- a/jdk/test/sun/security/ssl/javax/net/ssl/NewAPIs/JSSERenegotiate.java +++ b/jdk/test/sun/security/ssl/javax/net/ssl/NewAPIs/JSSERenegotiate.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2001, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2001, 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 diff --git a/jdk/test/sun/security/ssl/javax/net/ssl/NewAPIs/SSLCtxAccessToSessCtx.java b/jdk/test/sun/security/ssl/javax/net/ssl/NewAPIs/SSLCtxAccessToSessCtx.java index 5247412661a..41fddc46ed0 100644 --- a/jdk/test/sun/security/ssl/javax/net/ssl/NewAPIs/SSLCtxAccessToSessCtx.java +++ b/jdk/test/sun/security/ssl/javax/net/ssl/NewAPIs/SSLCtxAccessToSessCtx.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2001, 2006, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2001, 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 diff --git a/jdk/test/sun/security/ssl/javax/net/ssl/NewAPIs/SSLEngine/AcceptLargeFragments.java b/jdk/test/sun/security/ssl/javax/net/ssl/NewAPIs/SSLEngine/AcceptLargeFragments.java index 8252d54b32e..c896c19547b 100644 --- a/jdk/test/sun/security/ssl/javax/net/ssl/NewAPIs/SSLEngine/AcceptLargeFragments.java +++ b/jdk/test/sun/security/ssl/javax/net/ssl/NewAPIs/SSLEngine/AcceptLargeFragments.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2006, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2006, 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 diff --git a/jdk/test/sun/security/ssl/javax/net/ssl/NewAPIs/SSLEngine/ExtendedKeySocket.java b/jdk/test/sun/security/ssl/javax/net/ssl/NewAPIs/SSLEngine/ExtendedKeySocket.java index 171dcd7fc34..0f5b54bf1da 100644 --- a/jdk/test/sun/security/ssl/javax/net/ssl/NewAPIs/SSLEngine/ExtendedKeySocket.java +++ b/jdk/test/sun/security/ssl/javax/net/ssl/NewAPIs/SSLEngine/ExtendedKeySocket.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2004, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2004, 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 diff --git a/jdk/test/sun/security/ssl/javax/net/ssl/NewAPIs/SSLEngine/LargePacket.java b/jdk/test/sun/security/ssl/javax/net/ssl/NewAPIs/SSLEngine/LargePacket.java index 498df71463a..c95ebfdf7dc 100644 --- a/jdk/test/sun/security/ssl/javax/net/ssl/NewAPIs/SSLEngine/LargePacket.java +++ b/jdk/test/sun/security/ssl/javax/net/ssl/NewAPIs/SSLEngine/LargePacket.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2006, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2006, 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 @@ -21,13 +21,18 @@ * questions. */ +// +// SunJSSE does not support dynamic system properties, no way to re-use +// system properties in samevm/agentvm mode. +// + /* * @test * * @bug 6388456 * @summary Need adjustable TLS max record size for interoperability * with non-compliant - * @run main/othervm -Djsse.enableCBCProtection=false LargePacket + * @run main/othervm LargePacket * * @author Xuelei Fan */ @@ -83,12 +88,12 @@ public class LargePacket extends SSLEngineService { SocketChannel sc = ssc.accept(); // Complete connection. - while (!sc.finishConnect() ) { + while (!sc.finishConnect()) { // waiting for the connection completed. } // handshaking - handshaking(ssle, sc); + handshaking(ssle, sc, null); // receive application data receive(ssle, sc); @@ -131,7 +136,7 @@ public class LargePacket extends SSLEngineService { } // handshaking - handshaking(ssle, sc); + handshaking(ssle, sc, null); // send out application data deliver(ssle, sc); @@ -169,6 +174,8 @@ public class LargePacket extends SSLEngineService { * Fork off the other side, then do your work. */ LargePacket() throws Exception { + super("../../../../../etc"); + if (separateServerThread) { startServer(true); startClient(false); diff --git a/jdk/test/sun/security/ssl/javax/net/ssl/NewAPIs/SSLEngine/NoAuthClientAuth.java b/jdk/test/sun/security/ssl/javax/net/ssl/NewAPIs/SSLEngine/NoAuthClientAuth.java index 916e72be650..f951e84c8bc 100644 --- a/jdk/test/sun/security/ssl/javax/net/ssl/NewAPIs/SSLEngine/NoAuthClientAuth.java +++ b/jdk/test/sun/security/ssl/javax/net/ssl/NewAPIs/SSLEngine/NoAuthClientAuth.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 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 diff --git a/jdk/test/sun/security/ssl/javax/net/ssl/NewAPIs/SSLEngine/SSLEngineService.java b/jdk/test/sun/security/ssl/javax/net/ssl/NewAPIs/SSLEngine/SSLEngineService.java index b00780e6361..bc4c6f7db12 100644 --- a/jdk/test/sun/security/ssl/javax/net/ssl/NewAPIs/SSLEngine/SSLEngineService.java +++ b/jdk/test/sun/security/ssl/javax/net/ssl/NewAPIs/SSLEngine/SSLEngineService.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2006, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2006, 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 @@ -22,8 +22,6 @@ */ /* - * - * * @bug 6388456 * @summary Need adjustable TLS max record size for interoperability * with non-compliant stacks @@ -42,17 +40,31 @@ import java.nio.channels.*; public class SSLEngineService { - private static String pathToStores = "../../../../../etc"; private static String keyStoreFile = "keystore"; private static String trustStoreFile = "truststore"; private static char[] passphrase = "passphrase".toCharArray(); - private static String keyFilename = + private String pathToStores; + private String keyFilename; + private String trustFilename; + + protected SSLEngineService() { + init("../../../../../etc"); + } + + protected SSLEngineService(String pathToStores) { + init(pathToStores); + } + + private void init(String pathToStores) { + this.pathToStores = pathToStores; + this.keyFilename = System.getProperty("test.src", "./") + "/" + pathToStores + "/" + keyStoreFile; - private static String trustFilename = + this.trustFilename = System.getProperty("test.src", "./") + "/" + pathToStores + "/" + trustStoreFile; + } // deliver local application data. protected static void deliver(SSLEngine ssle, SocketChannel sc) @@ -143,9 +155,12 @@ public class SSLEngineService { ByteBuffer peerNetData = ByteBuffer.allocate(netBufferMax/2); int received = -1; + boolean needToReadMore = true; while (received != 0) { - if (ssle.isInboundDone() || sc.read(peerNetData) < 0) { - break; + if (needToReadMore) { + if (ssle.isInboundDone() || sc.read(peerNetData) < 0) { + break; + } } peerNetData.flip(); @@ -186,6 +201,8 @@ public class SSLEngineService { " bytes large packet "); } + needToReadMore = (peerNetData.position() > 0) ? false : true; + break; case BUFFER_OVERFLOW : @@ -206,6 +223,8 @@ public class SSLEngineService { " bytes for BUFFER_UNDERFLOW"); peerNetData = enlargeBuffer(peerNetData, size); } + + needToReadMore = true; break; default : // CLOSED : @@ -215,8 +234,8 @@ public class SSLEngineService { } } - protected static void handshaking(SSLEngine ssle, SocketChannel sc) - throws Exception { + protected static void handshaking(SSLEngine ssle, SocketChannel sc, + ByteBuffer additional) throws Exception { int appBufferMax = ssle.getSession().getApplicationBufferSize(); int netBufferMax = ssle.getSession().getPacketBufferSize(); @@ -232,15 +251,39 @@ public class SSLEngineService { SSLEngineResult.HandshakeStatus hs = ssle.getHandshakeStatus(); // start handshaking from unwrap + byte[] buffer = new byte[0xFF]; + boolean underflow = false; do { switch (hs) { case NEED_UNWRAP : if (peerNetData.position() == 0) { + if (additional != null && additional.hasRemaining()) { + do { + int len = Math.min(buffer.length, + peerNetData.remaining()); + len = Math.min(len, additional.remaining()); + if (len != 0) { + additional.get(buffer, 0, len); + peerNetData.put(buffer, 0, len); + } + } while (peerNetData.remaining() > 0 && + additional.hasRemaining()); + } else { + if (sc.read(peerNetData) < 0) { + ssle.closeInbound(); + return; + } + } + } + + if (underflow) { if (sc.read(peerNetData) < 0) { ssle.closeInbound(); return; } + + underflow = false; } peerNetData.flip(); @@ -259,6 +302,8 @@ public class SSLEngineService { size + " bytes for BUFFER_UNDERFLOW"); peerNetData = enlargeBuffer(peerNetData, size); } + + underflow = true; break; case BUFFER_OVERFLOW : // maybe need to enlarge the peer application data buffer. @@ -339,7 +384,7 @@ public class SSLEngineService { /* * Create an initialized SSLContext to use for this test. */ - protected static SSLEngine createSSLEngine(boolean mode) throws Exception { + protected SSLEngine createSSLEngine(boolean mode) throws Exception { SSLEngine ssle; diff --git a/jdk/test/sun/security/ssl/javax/net/ssl/NewAPIs/SSLEngineResult/Deserialize.java b/jdk/test/sun/security/ssl/javax/net/ssl/NewAPIs/SSLEngineResult/Deserialize.java index af116cd3b4d..369a6f8e77b 100644 --- a/jdk/test/sun/security/ssl/javax/net/ssl/NewAPIs/SSLEngineResult/Deserialize.java +++ b/jdk/test/sun/security/ssl/javax/net/ssl/NewAPIs/SSLEngineResult/Deserialize.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2004, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2004, 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 diff --git a/jdk/test/sun/security/ssl/javax/net/ssl/NewAPIs/SessionCacheSizeTests.java b/jdk/test/sun/security/ssl/javax/net/ssl/NewAPIs/SessionCacheSizeTests.java index 64f602e7043..d5fdadd9b1e 100644 --- a/jdk/test/sun/security/ssl/javax/net/ssl/NewAPIs/SessionCacheSizeTests.java +++ b/jdk/test/sun/security/ssl/javax/net/ssl/NewAPIs/SessionCacheSizeTests.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2001, 2006, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2001, 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 diff --git a/jdk/test/sun/security/ssl/javax/net/ssl/NewAPIs/SessionTimeOutTests.java b/jdk/test/sun/security/ssl/javax/net/ssl/NewAPIs/SessionTimeOutTests.java index 495e012f5e6..3d0946724f5 100644 --- a/jdk/test/sun/security/ssl/javax/net/ssl/NewAPIs/SessionTimeOutTests.java +++ b/jdk/test/sun/security/ssl/javax/net/ssl/NewAPIs/SessionTimeOutTests.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2001, 2007, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2001, 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 diff --git a/jdk/test/sun/security/ssl/javax/net/ssl/NewAPIs/testEnabledProtocols.java b/jdk/test/sun/security/ssl/javax/net/ssl/NewAPIs/testEnabledProtocols.java index 06fe82dec8f..5774049ba6e 100644 --- a/jdk/test/sun/security/ssl/javax/net/ssl/NewAPIs/testEnabledProtocols.java +++ b/jdk/test/sun/security/ssl/javax/net/ssl/NewAPIs/testEnabledProtocols.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2001, 2003, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2001, 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 diff --git a/jdk/test/sun/security/ssl/javax/net/ssl/ServerName/SSLEngineExplorer.java b/jdk/test/sun/security/ssl/javax/net/ssl/ServerName/SSLEngineExplorer.java new file mode 100644 index 00000000000..2cd46354010 --- /dev/null +++ b/jdk/test/sun/security/ssl/javax/net/ssl/ServerName/SSLEngineExplorer.java @@ -0,0 +1,335 @@ +/* + * Copyright (c) 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. + */ + +// +// SunJSSE does not support dynamic system properties, no way to re-use +// system properties in samevm/agentvm mode. +// + +/* + * @test + * @bug 7068321 + * @summary Support TLS Server Name Indication (SNI) Extension in JSSE Server + * @library ../NewAPIs/SSLEngine ../../../../templates + * @build SSLEngineService SSLCapabilities SSLExplorer + * @run main/othervm SSLEngineExplorer SSLv2Hello,SSLv3 + * @run main/othervm SSLEngineExplorer SSLv3 + * @run main/othervm SSLEngineExplorer TLSv1 + * @run main/othervm SSLEngineExplorer TLSv1.1 + * @run main/othervm SSLEngineExplorer TLSv1.2 + */ + +import javax.net.ssl.*; +import java.nio.*; +import java.net.*; +import java.util.*; +import java.nio.channels.*; + +public class SSLEngineExplorer extends SSLEngineService { + + /* + * ============================================================= + * Set the various variables needed for the tests, then + * specify what tests to run on each side. + */ + + /* + * Should we run the client or server in a separate thread? + * Both sides can throw exceptions, but do you have a preference + * as to which side should be the main thread. + */ + static boolean separateServerThread = true; + + // Is the server ready to serve? + volatile static boolean serverReady = false; + + /* + * Turn on SSL debugging? + */ + static boolean debug = false; + + /* + * Define the server side of the test. + * + * If the server prematurely exits, serverReady will be set to true + * to avoid infinite hangs. + */ + void doServerSide() throws Exception { + + // create SSLEngine. + SSLEngine ssle = createSSLEngine(false); + + // Create a server socket channel. + InetSocketAddress isa = + new InetSocketAddress(InetAddress.getLocalHost(), serverPort); + ServerSocketChannel ssc = ServerSocketChannel.open(); + ssc.socket().bind(isa); + serverPort = ssc.socket().getLocalPort(); + + // Signal Client, we're ready for his connect. + serverReady = true; + + // Accept a socket channel. + SocketChannel sc = ssc.accept(); + sc.configureBlocking(false); + + // Complete connection. + while (!sc.finishConnect()) { + Thread.sleep(50); + // waiting for the connection completed. + } + + ByteBuffer buffer = ByteBuffer.allocate(0xFF); + int position = 0; + SSLCapabilities capabilities = null; + + // Read the header of TLS record + buffer.limit(SSLExplorer.RECORD_HEADER_SIZE); + while (position < SSLExplorer.RECORD_HEADER_SIZE) { + int n = sc.read(buffer); + if (n < 0) { + throw new Exception("unexpected end of stream!"); + } + position += n; + } + buffer.flip(); + + int recordLength = SSLExplorer.getRequiredSize(buffer); + if (buffer.capacity() < recordLength) { + ByteBuffer oldBuffer = buffer; + buffer = ByteBuffer.allocate(recordLength); + buffer.put(oldBuffer); + } + + buffer.position(SSLExplorer.RECORD_HEADER_SIZE); + buffer.limit(buffer.capacity()); + while (position < recordLength) { + int n = sc.read(buffer); + if (n < 0) { + throw new Exception("unexpected end of stream!"); + } + position += n; + } + buffer.flip(); + + capabilities = SSLExplorer.explore(buffer); + if (capabilities != null) { + System.out.println("Record version: " + + capabilities.getRecordVersion()); + System.out.println("Hello version: " + + capabilities.getHelloVersion()); + } + + // handshaking + handshaking(ssle, sc, buffer); + + // receive application data + receive(ssle, sc); + + // send out application data + deliver(ssle, sc); + + ExtendedSSLSession session = (ExtendedSSLSession)ssle.getSession(); + checkCapabilities(capabilities, session); + + // close the socket channel. + sc.close(); + ssc.close(); + } + + /* + * Define the client side of the test. + * + * If the server prematurely exits, serverReady will be set to true + * to avoid infinite hangs. + */ + void doClientSide() throws Exception { + // create SSLEngine. + SSLEngine ssle = createSSLEngine(true); + + /* + * Wait for server to get started. + */ + while (!serverReady) { + Thread.sleep(50); + } + + // Create a non-blocking socket channel. + SocketChannel sc = SocketChannel.open(); + sc.configureBlocking(false); + InetSocketAddress isa = + new InetSocketAddress(InetAddress.getLocalHost(), serverPort); + sc.connect(isa); + + // Complete connection. + while (!sc.finishConnect() ) { + Thread.sleep(50); + // waiting for the connection completed. + } + + // enable the specified TLS protocol + ssle.setEnabledProtocols(supportedProtocols); + + // handshaking + handshaking(ssle, sc, null); + + // send out application data + deliver(ssle, sc); + + // receive application data + receive(ssle, sc); + + // close the socket channel. + sc.close(); + } + + void checkCapabilities(SSLCapabilities capabilities, + ExtendedSSLSession session) throws Exception { + + List sessionSNI = session.getRequestedServerNames(); + if (!sessionSNI.equals(capabilities.getServerNames())) { + throw new Exception( + "server name indication does not match capabilities"); + } + } + + private static String[] supportedProtocols; // supported protocols + + private static void parseArguments(String[] args) { + supportedProtocols = args[0].split(","); + } + + + /* + * ============================================================= + * The remainder is just support stuff + */ + volatile Exception serverException = null; + volatile Exception clientException = null; + + // use any free port by default + volatile int serverPort = 0; + + public static void main(String args[]) throws Exception { + if (debug) + System.setProperty("javax.net.debug", "all"); + + /* + * Get the customized arguments. + */ + parseArguments(args); + + new SSLEngineExplorer(); + } + + Thread clientThread = null; + Thread serverThread = null; + + /* + * Primary constructor, used to drive remainder of the test. + * + * Fork off the other side, then do your work. + */ + SSLEngineExplorer() throws Exception { + super("../../../../etc"); + + if (separateServerThread) { + startServer(true); + startClient(false); + } else { + startClient(true); + startServer(false); + } + + /* + * Wait for other side to close down. + */ + if (separateServerThread) { + serverThread.join(); + } else { + clientThread.join(); + } + + /* + * When we get here, the test is pretty much over. + * + * If the main thread excepted, that propagates back + * immediately. If the other thread threw an exception, we + * should report back. + */ + if (serverException != null) { + System.out.print("Server Exception:"); + throw serverException; + } + if (clientException != null) { + System.out.print("Client Exception:"); + throw clientException; + } + } + + void startServer(boolean newThread) throws Exception { + if (newThread) { + serverThread = new Thread() { + public void run() { + try { + doServerSide(); + } catch (Exception e) { + /* + * Our server thread just died. + * + * Release the client, if not active already... + */ + System.err.println("Server died..."); + System.err.println(e); + serverReady = true; + serverException = e; + } + } + }; + serverThread.start(); + } else { + doServerSide(); + } + } + + void startClient(boolean newThread) throws Exception { + if (newThread) { + clientThread = new Thread() { + public void run() { + try { + doClientSide(); + } catch (Exception e) { + /* + * Our client thread just died. + */ + System.err.println("Client died..."); + clientException = e; + } + } + }; + clientThread.start(); + } else { + doClientSide(); + } + } +} diff --git a/jdk/test/sun/security/ssl/javax/net/ssl/ServerName/SSLEngineExplorerMatchedSNI.java b/jdk/test/sun/security/ssl/javax/net/ssl/ServerName/SSLEngineExplorerMatchedSNI.java new file mode 100644 index 00000000000..c201bee86ad --- /dev/null +++ b/jdk/test/sun/security/ssl/javax/net/ssl/ServerName/SSLEngineExplorerMatchedSNI.java @@ -0,0 +1,393 @@ +/* + * Copyright (c) 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. + */ + +// +// SunJSSE does not support dynamic system properties, no way to re-use +// system properties in samevm/agentvm mode. +// + +/* + * @test + * @bug 7068321 + * @summary Support TLS Server Name Indication (SNI) Extension in JSSE Server + * @library ../NewAPIs/SSLEngine ../../../../templates + * @build SSLEngineService SSLCapabilities SSLExplorer + * @run main/othervm SSLEngineExplorerMatchedSNI www.example.com + * www\.example\.com + * @run main/othervm SSLEngineExplorerMatchedSNI www.example.com + * www\.example\.(com|org) + * @run main/othervm SSLEngineExplorerMatchedSNI example.com + * (.*\.)*example\.(com|org) + * @run main/othervm SSLEngineExplorerMatchedSNI www.example.com + * (.*\.)*example\.(com|org) + * @run main/othervm SSLEngineExplorerMatchedSNI www.us.example.com + * (.*\.)*example\.(com|org) + */ + +import javax.net.ssl.*; +import java.nio.*; +import java.net.*; +import java.util.*; +import java.nio.channels.*; + +public class SSLEngineExplorerMatchedSNI extends SSLEngineService { + + /* + * ============================================================= + * Set the various variables needed for the tests, then + * specify what tests to run on each side. + */ + + /* + * Should we run the client or server in a separate thread? + * Both sides can throw exceptions, but do you have a preference + * as to which side should be the main thread. + */ + static boolean separateServerThread = false; + + // Is the server ready to serve? + volatile static boolean serverReady = false; + + /* + * Turn on SSL debugging? + */ + static boolean debug = false; + + /* + * Define the server side of the test. + * + * If the server prematurely exits, serverReady will be set to true + * to avoid infinite hangs. + */ + void doServerSide() throws Exception { + + // create SSLEngine. + SSLEngine ssle = createSSLEngine(false); + + // Create a server socket channel. + InetSocketAddress isa = + new InetSocketAddress(InetAddress.getLocalHost(), serverPort); + ServerSocketChannel ssc = ServerSocketChannel.open(); + ssc.socket().bind(isa); + serverPort = ssc.socket().getLocalPort(); + + // Signal Client, we're ready for his connect. + serverReady = true; + + // Accept a socket channel. + SocketChannel sc = ssc.accept(); + + // Complete connection. + while (!sc.finishConnect()) { + Thread.sleep(50); + // waiting for the connection completed. + } + + ByteBuffer buffer = ByteBuffer.allocate(0xFF); + int position = 0; + SSLCapabilities capabilities = null; + + // Read the header of TLS record + buffer.limit(SSLExplorer.RECORD_HEADER_SIZE); + while (position < SSLExplorer.RECORD_HEADER_SIZE) { + int n = sc.read(buffer); + if (n < 0) { + throw new Exception("unexpected end of stream!"); + } + position += n; + } + buffer.flip(); + + int recordLength = SSLExplorer.getRequiredSize(buffer); + if (buffer.capacity() < recordLength) { + ByteBuffer oldBuffer = buffer; + buffer = ByteBuffer.allocate(recordLength); + buffer.put(oldBuffer); + } + + buffer.position(SSLExplorer.RECORD_HEADER_SIZE); + buffer.limit(buffer.capacity()); + while (position < recordLength) { + int n = sc.read(buffer); + if (n < 0) { + throw new Exception("unexpected end of stream!"); + } + position += n; + } + buffer.flip(); + + capabilities = SSLExplorer.explore(buffer); + if (capabilities != null) { + System.out.println("Record version: " + + capabilities.getRecordVersion()); + System.out.println("Hello version: " + + capabilities.getHelloVersion()); + } + + // enable server name indication checking + SNIMatcher matcher = SNIHostName.createSNIMatcher( + serverAcceptableHostname); + Collection matchers = new ArrayList<>(1); + matchers.add(matcher); + SSLParameters params = ssle.getSSLParameters(); + params.setSNIMatchers(matchers); + ssle.setSSLParameters(params); + + // handshaking + handshaking(ssle, sc, buffer); + + // receive application data + receive(ssle, sc); + + // send out application data + deliver(ssle, sc); + + // check server name indication + ExtendedSSLSession session = (ExtendedSSLSession)ssle.getSession(); + checkCapabilities(capabilities, session); + + // close the socket channel. + sc.close(); + ssc.close(); + } + + /* + * Define the client side of the test. + * + * If the server prematurely exits, serverReady will be set to true + * to avoid infinite hangs. + */ + void doClientSide() throws Exception { + // create SSLEngine. + SSLEngine ssle = createSSLEngine(true); + + /* + * Wait for server to get started. + */ + while (!serverReady) { + Thread.sleep(50); + } + + // Create a non-blocking socket channel. + SocketChannel sc = SocketChannel.open(); + sc.configureBlocking(false); + InetSocketAddress isa = + new InetSocketAddress(InetAddress.getLocalHost(), serverPort); + sc.connect(isa); + + // Complete connection. + while (!sc.finishConnect() ) { + Thread.sleep(50); + // waiting for the connection completed. + } + + SNIHostName serverName = new SNIHostName(clientRequestedHostname); + List serverNames = new ArrayList<>(1); + serverNames.add(serverName); + SSLParameters params = ssle.getSSLParameters(); + params.setServerNames(serverNames); + ssle.setSSLParameters(params); + + // handshaking + handshaking(ssle, sc, null); + + // send out application data + deliver(ssle, sc); + + // receive application data + receive(ssle, sc); + + // check server name indication + ExtendedSSLSession session = (ExtendedSSLSession)ssle.getSession(); + checkSNIInSession(session); + + // close the socket channel. + sc.close(); + } + + void checkCapabilities(SSLCapabilities capabilities, + ExtendedSSLSession session) throws Exception { + List sessionSNI = session.getRequestedServerNames(); + if (!sessionSNI.equals(capabilities.getServerNames())) { + for (SNIServerName sni : sessionSNI) { + System.out.println("SNI in session is " + sni); + } + + List capaSNI = capabilities.getServerNames(); + for (SNIServerName sni : capaSNI) { + System.out.println("SNI in session is " + sni); + } + + throw new Exception( + "server name indication does not match capabilities"); + } + + checkSNIInSession(session); + } + + void checkSNIInSession(ExtendedSSLSession session) throws Exception { + List sessionSNI = session.getRequestedServerNames(); + if (sessionSNI.isEmpty()) { + throw new Exception( + "unexpected empty request server name indication"); + } + + if (sessionSNI.size() != 1) { + throw new Exception( + "unexpected request server name indication"); + } + + SNIServerName serverName = sessionSNI.get(0); + if (!(serverName instanceof SNIHostName)) { + throw new Exception( + "unexpected instance of request server name indication"); + } + + String hostname = ((SNIHostName)serverName).getAsciiName(); + if (!clientRequestedHostname.equalsIgnoreCase(hostname)) { + throw new Exception( + "unexpected request server name indication value"); + } + } + + private static String clientRequestedHostname; + private static String serverAcceptableHostname; + + private static void parseArguments(String[] args) { + clientRequestedHostname = args[0]; + serverAcceptableHostname = args[1]; + } + + /* + * ============================================================= + * The remainder is just support stuff + */ + volatile Exception serverException = null; + volatile Exception clientException = null; + + // use any free port by default + volatile int serverPort = 0; + + public static void main(String args[]) throws Exception { + if (debug) + System.setProperty("javax.net.debug", "all"); + + /* + * Get the customized arguments. + */ + parseArguments(args); + + new SSLEngineExplorerMatchedSNI(); + } + + Thread clientThread = null; + Thread serverThread = null; + + /* + * Primary constructor, used to drive remainder of the test. + * + * Fork off the other side, then do your work. + */ + SSLEngineExplorerMatchedSNI() throws Exception { + super("../../../../etc"); + + if (separateServerThread) { + startServer(true); + startClient(false); + } else { + startClient(true); + startServer(false); + } + + /* + * Wait for other side to close down. + */ + if (separateServerThread) { + serverThread.join(); + } else { + clientThread.join(); + } + + /* + * When we get here, the test is pretty much over. + * + * If the main thread excepted, that propagates back + * immediately. If the other thread threw an exception, we + * should report back. + */ + if (serverException != null) { + System.out.print("Server Exception:"); + throw serverException; + } + if (clientException != null) { + System.out.print("Client Exception:"); + throw clientException; + } + } + + void startServer(boolean newThread) throws Exception { + if (newThread) { + serverThread = new Thread() { + public void run() { + try { + doServerSide(); + } catch (Exception e) { + /* + * Our server thread just died. + * + * Release the client, if not active already... + */ + System.err.println("Server died..."); + System.err.println(e); + serverReady = true; + serverException = e; + } + } + }; + serverThread.start(); + } else { + doServerSide(); + } + } + + void startClient(boolean newThread) throws Exception { + if (newThread) { + clientThread = new Thread() { + public void run() { + try { + doClientSide(); + } catch (Exception e) { + /* + * Our client thread just died. + */ + System.err.println("Client died..."); + clientException = e; + } + } + }; + clientThread.start(); + } else { + doClientSide(); + } + } +} diff --git a/jdk/test/sun/security/ssl/javax/net/ssl/ServerName/SSLEngineExplorerUnmatchedSNI.java b/jdk/test/sun/security/ssl/javax/net/ssl/ServerName/SSLEngineExplorerUnmatchedSNI.java new file mode 100644 index 00000000000..2a9647be457 --- /dev/null +++ b/jdk/test/sun/security/ssl/javax/net/ssl/ServerName/SSLEngineExplorerUnmatchedSNI.java @@ -0,0 +1,406 @@ +/* + * Copyright (c) 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. + */ + +// +// SunJSSE does not support dynamic system properties, no way to re-use +// system properties in samevm/agentvm mode. +// + +/* + * @test + * @bug 7068321 + * @summary Support TLS Server Name Indication (SNI) Extension in JSSE Server + * @library ../NewAPIs/SSLEngine ../../../../templates + * @build SSLEngineService SSLCapabilities SSLExplorer + * @run main/othervm SSLEngineExplorerUnmatchedSNI www.example.com + * www\.example\.org + */ + +import javax.net.ssl.*; +import java.io.*; +import java.nio.*; +import java.net.*; +import java.util.*; +import java.nio.channels.*; + +public class SSLEngineExplorerUnmatchedSNI extends SSLEngineService { + + /* + * ============================================================= + * Set the various variables needed for the tests, then + * specify what tests to run on each side. + */ + + /* + * Should we run the client or server in a separate thread? + * Both sides can throw exceptions, but do you have a preference + * as to which side should be the main thread. + */ + static boolean separateServerThread = false; + + // Is the server ready to serve? + volatile static boolean serverReady = false; + + /* + * Turn on SSL debugging? + */ + static boolean debug = false; + + /* + * Define the server side of the test. + * + * If the server prematurely exits, serverReady will be set to true + * to avoid infinite hangs. + */ + void doServerSide() throws Exception { + + // create SSLEngine. + SSLEngine ssle = createSSLEngine(false); + + // Create a server socket channel. + InetSocketAddress isa = + new InetSocketAddress(InetAddress.getLocalHost(), serverPort); + ServerSocketChannel ssc = ServerSocketChannel.open(); + ssc.socket().bind(isa); + serverPort = ssc.socket().getLocalPort(); + + // Signal Client, we're ready for his connect. + serverReady = true; + + // Accept a socket channel. + SocketChannel sc = ssc.accept(); + + // Complete connection. + while (!sc.finishConnect()) { + Thread.sleep(50); + // waiting for the connection completed. + } + + ByteBuffer buffer = ByteBuffer.allocate(0xFF); + int position = 0; + SSLCapabilities capabilities = null; + + // Read the header of TLS record + buffer.limit(SSLExplorer.RECORD_HEADER_SIZE); + while (position < SSLExplorer.RECORD_HEADER_SIZE) { + int n = sc.read(buffer); + if (n < 0) { + throw new Exception("unexpected end of stream!"); + } + position += n; + } + buffer.flip(); + + int recordLength = SSLExplorer.getRequiredSize(buffer); + if (buffer.capacity() < recordLength) { + ByteBuffer oldBuffer = buffer; + buffer = ByteBuffer.allocate(recordLength); + buffer.put(oldBuffer); + } + + buffer.position(SSLExplorer.RECORD_HEADER_SIZE); + buffer.limit(buffer.capacity()); + while (position < recordLength) { + int n = sc.read(buffer); + if (n < 0) { + throw new Exception("unexpected end of stream!"); + } + position += n; + } + buffer.flip(); + + capabilities = SSLExplorer.explore(buffer); + if (capabilities != null) { + System.out.println("Record version: " + + capabilities.getRecordVersion()); + System.out.println("Hello version: " + + capabilities.getHelloVersion()); + } + + // enable server name indication checking + SNIMatcher matcher = SNIHostName.createSNIMatcher( + serverAcceptableHostname); + Collection matchers = new ArrayList<>(1); + matchers.add(matcher); + SSLParameters params = ssle.getSSLParameters(); + params.setSNIMatchers(matchers); + ssle.setSSLParameters(params); + + try { + // handshaking + handshaking(ssle, sc, buffer); + + // receive application data + receive(ssle, sc); + + // send out application data + deliver(ssle, sc); + + // check server name indication + ExtendedSSLSession session = (ExtendedSSLSession)ssle.getSession(); + checkCapabilities(capabilities, session); + + throw new Exception( + "Mismatched server name indication was accepted"); + } catch (SSLHandshakeException sslhe) { + // the expected unrecognized server name indication exception + } catch (IOException ioe) { + // the peer may have closed the socket because of the unmatched + // server name indication. + } finally { + // close the socket channel. + sc.close(); + ssc.close(); + } + } + + /* + * Define the client side of the test. + * + * If the server prematurely exits, serverReady will be set to true + * to avoid infinite hangs. + */ + void doClientSide() throws Exception { + // create SSLEngine. + SSLEngine ssle = createSSLEngine(true); + + /* + * Wait for server to get started. + */ + while (!serverReady) { + Thread.sleep(50); + } + + // Create a non-blocking socket channel. + SocketChannel sc = SocketChannel.open(); + sc.configureBlocking(false); + InetSocketAddress isa = + new InetSocketAddress(InetAddress.getLocalHost(), serverPort); + sc.connect(isa); + + // Complete connection. + while (!sc.finishConnect() ) { + Thread.sleep(50); + // waiting for the connection completed. + } + + SNIHostName serverName = new SNIHostName(clientRequestedHostname); + List serverNames = new ArrayList<>(1); + serverNames.add(serverName); + SSLParameters params = ssle.getSSLParameters(); + params.setServerNames(serverNames); + ssle.setSSLParameters(params); + + try { + // handshaking + handshaking(ssle, sc, null); + + // send out application data + deliver(ssle, sc); + + // receive application data + receive(ssle, sc); + + // check server name indication + ExtendedSSLSession session = (ExtendedSSLSession)ssle.getSession(); + checkSNIInSession(session); + + throw new Exception( + "Mismatched server name indication was accepted"); + } catch (SSLHandshakeException sslhe) { + // the expected unrecognized server name indication exception + } catch (IOException ioe) { + // the peer may have closed the socket because of the unmatched + // server name indication. + } finally { + // close the socket channel. + sc.close(); + } + } + + void checkCapabilities(SSLCapabilities capabilities, + ExtendedSSLSession session) throws Exception { + List sessionSNI = session.getRequestedServerNames(); + if (!sessionSNI.equals(capabilities.getServerNames())) { + for (SNIServerName sni : sessionSNI) { + System.out.println("SNI in session is " + sni); + } + + List capaSNI = capabilities.getServerNames(); + for (SNIServerName sni : capaSNI) { + System.out.println("SNI in session is " + sni); + } + + throw new Exception( + "server name indication does not match capabilities"); + } + + checkSNIInSession(session); + } + + void checkSNIInSession(ExtendedSSLSession session) throws Exception { + List sessionSNI = session.getRequestedServerNames(); + if (sessionSNI.isEmpty()) { + throw new Exception( + "unexpected empty request server name indication"); + } + + if (sessionSNI.size() != 1) { + throw new Exception( + "unexpected request server name indication"); + } + + SNIServerName serverName = sessionSNI.get(0); + if (!(serverName instanceof SNIHostName)) { + throw new Exception( + "unexpected instance of request server name indication"); + } + + String hostname = ((SNIHostName)serverName).getAsciiName(); + if (!clientRequestedHostname.equalsIgnoreCase(hostname)) { + throw new Exception( + "unexpected request server name indication value"); + } + } + + private static String clientRequestedHostname; + private static String serverAcceptableHostname; + + private static void parseArguments(String[] args) { + clientRequestedHostname = args[0]; + serverAcceptableHostname = args[1]; + } + + /* + * ============================================================= + * The remainder is just support stuff + */ + volatile Exception serverException = null; + volatile Exception clientException = null; + + // use any free port by default + volatile int serverPort = 0; + + public static void main(String args[]) throws Exception { + if (debug) + System.setProperty("javax.net.debug", "all"); + + /* + * Get the customized arguments. + */ + parseArguments(args); + + new SSLEngineExplorerUnmatchedSNI(); + } + + Thread clientThread = null; + Thread serverThread = null; + + /* + * Primary constructor, used to drive remainder of the test. + * + * Fork off the other side, then do your work. + */ + SSLEngineExplorerUnmatchedSNI() throws Exception { + super("../../../../etc"); + + if (separateServerThread) { + startServer(true); + startClient(false); + } else { + startClient(true); + startServer(false); + } + + /* + * Wait for other side to close down. + */ + if (separateServerThread) { + serverThread.join(); + } else { + clientThread.join(); + } + + /* + * When we get here, the test is pretty much over. + * + * If the main thread excepted, that propagates back + * immediately. If the other thread threw an exception, we + * should report back. + */ + if (serverException != null) { + System.out.print("Server Exception:"); + throw serverException; + } + if (clientException != null) { + System.out.print("Client Exception:"); + throw clientException; + } + } + + void startServer(boolean newThread) throws Exception { + if (newThread) { + serverThread = new Thread() { + public void run() { + try { + doServerSide(); + } catch (Exception e) { + /* + * Our server thread just died. + * + * Release the client, if not active already... + */ + System.err.println("Server died..."); + System.err.println(e); + serverReady = true; + serverException = e; + } + } + }; + serverThread.start(); + } else { + doServerSide(); + } + } + + void startClient(boolean newThread) throws Exception { + if (newThread) { + clientThread = new Thread() { + public void run() { + try { + doClientSide(); + } catch (Exception e) { + /* + * Our client thread just died. + */ + System.err.println("Client died..."); + clientException = e; + } + } + }; + clientThread.start(); + } else { + doClientSide(); + } + } +} diff --git a/jdk/test/sun/security/ssl/javax/net/ssl/ServerName/SSLEngineExplorerWithCli.java b/jdk/test/sun/security/ssl/javax/net/ssl/ServerName/SSLEngineExplorerWithCli.java new file mode 100644 index 00000000000..bfa23cb38de --- /dev/null +++ b/jdk/test/sun/security/ssl/javax/net/ssl/ServerName/SSLEngineExplorerWithCli.java @@ -0,0 +1,365 @@ +/* + * Copyright (c) 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. + */ + +// +// SunJSSE does not support dynamic system properties, no way to re-use +// system properties in samevm/agentvm mode. +// + +/* + * @test + * @bug 7068321 + * @summary Support TLS Server Name Indication (SNI) Extension in JSSE Server + * @library ../NewAPIs/SSLEngine ../../../../templates + * @build SSLEngineService SSLCapabilities SSLExplorer + * @run main/othervm SSLEngineExplorerWithCli + */ + +import javax.net.ssl.*; +import java.nio.*; +import java.net.*; +import java.util.*; +import java.nio.channels.*; + +public class SSLEngineExplorerWithCli extends SSLEngineService { + + /* + * ============================================================= + * Set the various variables needed for the tests, then + * specify what tests to run on each side. + */ + + /* + * Should we run the client or server in a separate thread? + * Both sides can throw exceptions, but do you have a preference + * as to which side should be the main thread. + */ + static boolean separateServerThread = true; + + // Is the server ready to serve? + volatile static boolean serverReady = false; + + /* + * Turn on SSL debugging? + */ + static boolean debug = false; + + /* + * Define the server side of the test. + * + * If the server prematurely exits, serverReady will be set to true + * to avoid infinite hangs. + */ + void doServerSide() throws Exception { + + // create SSLEngine. + SSLEngine ssle = createSSLEngine(false); + + // Create a server socket channel. + InetSocketAddress isa = + new InetSocketAddress(InetAddress.getLocalHost(), serverPort); + ServerSocketChannel ssc = ServerSocketChannel.open(); + ssc.socket().bind(isa); + serverPort = ssc.socket().getLocalPort(); + + // Signal Client, we're ready for his connect. + serverReady = true; + + // Accept a socket channel. + SocketChannel sc = ssc.accept(); + + // Complete connection. + while (!sc.finishConnect()) { + Thread.sleep(50); + // waiting for the connection completed. + } + + ByteBuffer buffer = ByteBuffer.allocate(0xFF); + int position = 0; + SSLCapabilities capabilities = null; + + // Read the header of TLS record + buffer.limit(SSLExplorer.RECORD_HEADER_SIZE); + while (position < SSLExplorer.RECORD_HEADER_SIZE) { + int n = sc.read(buffer); + if (n < 0) { + throw new Exception("unexpected end of stream!"); + } + position += n; + } + buffer.flip(); + + int recordLength = SSLExplorer.getRequiredSize(buffer); + if (buffer.capacity() < recordLength) { + ByteBuffer oldBuffer = buffer; + buffer = ByteBuffer.allocate(recordLength); + buffer.put(oldBuffer); + } + + buffer.position(SSLExplorer.RECORD_HEADER_SIZE); + buffer.limit(buffer.capacity()); + while (position < recordLength) { + int n = sc.read(buffer); + if (n < 0) { + throw new Exception("unexpected end of stream!"); + } + position += n; + } + buffer.flip(); + + capabilities = SSLExplorer.explore(buffer); + if (capabilities != null) { + System.out.println("Record version: " + + capabilities.getRecordVersion()); + System.out.println("Hello version: " + + capabilities.getHelloVersion()); + } + + // handshaking + handshaking(ssle, sc, buffer); + + // receive application data + receive(ssle, sc); + + // send out application data + deliver(ssle, sc); + + ExtendedSSLSession session = (ExtendedSSLSession)ssle.getSession(); + checkCapabilities(capabilities, session); + + // close the socket channel. + sc.close(); + ssc.close(); + } + + /* + * Define the client side of the test. + * + * If the server prematurely exits, serverReady will be set to true + * to avoid infinite hangs. + */ + void doClientSide() throws Exception { + // create SSLEngine. + SSLEngine ssle = createSSLEngine(true); + + /* + * Wait for server to get started. + */ + while (!serverReady) { + Thread.sleep(50); + } + + // Create a non-blocking socket channel. + SocketChannel sc = SocketChannel.open(); + sc.configureBlocking(false); + InetSocketAddress isa = + new InetSocketAddress(InetAddress.getLocalHost(), serverPort); + sc.connect(isa); + + // Complete connection. + while (!sc.finishConnect() ) { + Thread.sleep(50); + // waiting for the connection completed. + } + + SNIHostName serverName = new SNIHostName(clientRequestedHostname); + List serverNames = new ArrayList<>(1); + serverNames.add(serverName); + SSLParameters params = ssle.getSSLParameters(); + params.setServerNames(serverNames); + ssle.setSSLParameters(params); + + // handshaking + handshaking(ssle, sc, null); + + // send out application data + deliver(ssle, sc); + + // receive application data + receive(ssle, sc); + + // check server name indication + ExtendedSSLSession session = (ExtendedSSLSession)ssle.getSession(); + checkSNIInSession(session); + + // close the socket channel. + sc.close(); + } + + private static String clientRequestedHostname = "www.example.com"; + private static String serverAcceptableHostname = + "www\\.example\\.(com|org)"; + + void checkCapabilities(SSLCapabilities capabilities, + ExtendedSSLSession session) throws Exception { + List sessionSNI = session.getRequestedServerNames(); + if (!sessionSNI.equals(capabilities.getServerNames())) { + for (SNIServerName sni : sessionSNI) { + System.out.println("SNI in session is " + sni); + } + + List capaSNI = capabilities.getServerNames(); + for (SNIServerName sni : capaSNI) { + System.out.println("SNI in session is " + sni); + } + + throw new Exception( + "server name indication does not match capabilities"); + } + + checkSNIInSession(session); + } + + void checkSNIInSession(ExtendedSSLSession session) throws Exception { + List sessionSNI = session.getRequestedServerNames(); + if (sessionSNI.isEmpty()) { + throw new Exception( + "unexpected empty request server name indication"); + } + + if (sessionSNI.size() != 1) { + throw new Exception( + "unexpected request server name indication"); + } + + SNIServerName serverName = sessionSNI.get(0); + if (!(serverName instanceof SNIHostName)) { + throw new Exception( + "unexpected instance of request server name indication"); + } + + String hostname = ((SNIHostName)serverName).getAsciiName(); + if (!clientRequestedHostname.equalsIgnoreCase(hostname)) { + throw new Exception( + "unexpected request server name indication value"); + } + } + + /* + * ============================================================= + * The remainder is just support stuff + */ + volatile Exception serverException = null; + volatile Exception clientException = null; + + // use any free port by default + volatile int serverPort = 0; + + public static void main(String args[]) throws Exception { + if (debug) + System.setProperty("javax.net.debug", "all"); + + new SSLEngineExplorerWithCli(); + } + + Thread clientThread = null; + Thread serverThread = null; + + /* + * Primary constructor, used to drive remainder of the test. + * + * Fork off the other side, then do your work. + */ + SSLEngineExplorerWithCli() throws Exception { + super("../../../../etc"); + + if (separateServerThread) { + startServer(true); + startClient(false); + } else { + startClient(true); + startServer(false); + } + + /* + * Wait for other side to close down. + */ + if (separateServerThread) { + serverThread.join(); + } else { + clientThread.join(); + } + + /* + * When we get here, the test is pretty much over. + * + * If the main thread excepted, that propagates back + * immediately. If the other thread threw an exception, we + * should report back. + */ + if (serverException != null) { + System.out.print("Server Exception:"); + throw serverException; + } + if (clientException != null) { + System.out.print("Client Exception:"); + throw clientException; + } + } + + void startServer(boolean newThread) throws Exception { + if (newThread) { + serverThread = new Thread() { + public void run() { + try { + doServerSide(); + } catch (Exception e) { + /* + * Our server thread just died. + * + * Release the client, if not active already... + */ + System.err.println("Server died..."); + System.err.println(e); + serverReady = true; + serverException = e; + } + } + }; + serverThread.start(); + } else { + doServerSide(); + } + } + + void startClient(boolean newThread) throws Exception { + if (newThread) { + clientThread = new Thread() { + public void run() { + try { + doClientSide(); + } catch (Exception e) { + /* + * Our client thread just died. + */ + System.err.println("Client died..."); + clientException = e; + } + } + }; + clientThread.start(); + } else { + doClientSide(); + } + } +} diff --git a/jdk/test/sun/security/ssl/javax/net/ssl/ServerName/SSLEngineExplorerWithSrv.java b/jdk/test/sun/security/ssl/javax/net/ssl/ServerName/SSLEngineExplorerWithSrv.java new file mode 100644 index 00000000000..e8fd2707f25 --- /dev/null +++ b/jdk/test/sun/security/ssl/javax/net/ssl/ServerName/SSLEngineExplorerWithSrv.java @@ -0,0 +1,351 @@ +/* + * Copyright (c) 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. + */ + +// +// SunJSSE does not support dynamic system properties, no way to re-use +// system properties in samevm/agentvm mode. +// + +/* + * @test + * @bug 7068321 + * @summary Support TLS Server Name Indication (SNI) Extension in JSSE Server + * @library ../NewAPIs/SSLEngine ../../../../templates + * @build SSLEngineService SSLCapabilities SSLExplorer + * @run main/othervm SSLEngineExplorerWithSrv + */ + +import javax.net.ssl.*; +import java.nio.*; +import java.net.*; +import java.util.*; +import java.nio.channels.*; + +public class SSLEngineExplorerWithSrv extends SSLEngineService { + + /* + * ============================================================= + * Set the various variables needed for the tests, then + * specify what tests to run on each side. + */ + + /* + * Should we run the client or server in a separate thread? + * Both sides can throw exceptions, but do you have a preference + * as to which side should be the main thread. + */ + static boolean separateServerThread = true; + + // Is the server ready to serve? + volatile static boolean serverReady = false; + + /* + * Turn on SSL debugging? + */ + static boolean debug = false; + + /* + * Define the server side of the test. + * + * If the server prematurely exits, serverReady will be set to true + * to avoid infinite hangs. + */ + void doServerSide() throws Exception { + + // create SSLEngine. + SSLEngine ssle = createSSLEngine(false); + + // Create a server socket channel. + InetSocketAddress isa = + new InetSocketAddress(InetAddress.getLocalHost(), serverPort); + ServerSocketChannel ssc = ServerSocketChannel.open(); + ssc.socket().bind(isa); + serverPort = ssc.socket().getLocalPort(); + + // Signal Client, we're ready for his connect. + serverReady = true; + + // Accept a socket channel. + SocketChannel sc = ssc.accept(); + + // Complete connection. + while (!sc.finishConnect()) { + Thread.sleep(50); + // waiting for the connection completed. + } + + ByteBuffer buffer = ByteBuffer.allocate(0xFF); + int position = 0; + SSLCapabilities capabilities = null; + + // Read the header of TLS record + buffer.limit(SSLExplorer.RECORD_HEADER_SIZE); + while (position < SSLExplorer.RECORD_HEADER_SIZE) { + int n = sc.read(buffer); + if (n < 0) { + throw new Exception("unexpected end of stream!"); + } + position += n; + } + buffer.flip(); + + int recordLength = SSLExplorer.getRequiredSize(buffer); + if (buffer.capacity() < recordLength) { + ByteBuffer oldBuffer = buffer; + buffer = ByteBuffer.allocate(recordLength); + buffer.put(oldBuffer); + } + + buffer.position(SSLExplorer.RECORD_HEADER_SIZE); + buffer.limit(buffer.capacity()); + while (position < recordLength) { + int n = sc.read(buffer); + if (n < 0) { + throw new Exception("unexpected end of stream!"); + } + position += n; + } + buffer.flip(); + + capabilities = SSLExplorer.explore(buffer); + if (capabilities != null) { + System.out.println("Record version: " + + capabilities.getRecordVersion()); + System.out.println("Hello version: " + + capabilities.getHelloVersion()); + } + + // enable server name indication checking + SNIMatcher matcher = SNIHostName.createSNIMatcher( + serverAcceptableHostname); + Collection matchers = new ArrayList<>(1); + matchers.add(matcher); + SSLParameters params = ssle.getSSLParameters(); + params.setSNIMatchers(matchers); + ssle.setSSLParameters(params); + + // handshaking + handshaking(ssle, sc, buffer); + + // receive application data + receive(ssle, sc); + + // send out application data + deliver(ssle, sc); + + // check server name indication + ExtendedSSLSession session = (ExtendedSSLSession)ssle.getSession(); + checkCapabilities(capabilities, session); + + // close the socket channel. + sc.close(); + ssc.close(); + } + + /* + * Define the client side of the test. + * + * If the server prematurely exits, serverReady will be set to true + * to avoid infinite hangs. + */ + void doClientSide() throws Exception { + // create SSLEngine. + SSLEngine ssle = createSSLEngine(true); + + /* + * Wait for server to get started. + */ + while (!serverReady) { + Thread.sleep(50); + } + + // Create a non-blocking socket channel. + SocketChannel sc = SocketChannel.open(); + sc.configureBlocking(false); + InetSocketAddress isa = + new InetSocketAddress(InetAddress.getLocalHost(), serverPort); + sc.connect(isa); + + // Complete connection. + while (!sc.finishConnect() ) { + Thread.sleep(50); + // waiting for the connection completed. + } + + // handshaking + handshaking(ssle, sc, null); + + // send out application data + deliver(ssle, sc); + + // receive application data + receive(ssle, sc); + + // check server name indication + ExtendedSSLSession session = (ExtendedSSLSession)ssle.getSession(); + checkSNIInSession(session); + + // close the socket channel. + sc.close(); + } + + private static String clientRequestedHostname = "www.example.com"; + private static String serverAcceptableHostname = + "www\\.example\\.(com|org)"; + + void checkCapabilities(SSLCapabilities capabilities, + ExtendedSSLSession session) throws Exception { + List sessionSNI = session.getRequestedServerNames(); + if (!sessionSNI.equals(capabilities.getServerNames())) { + for (SNIServerName sni : sessionSNI) { + System.out.println("SNI in session is " + sni); + } + + List capaSNI = capabilities.getServerNames(); + for (SNIServerName sni : capaSNI) { + System.out.println("SNI in session is " + sni); + } + + throw new Exception( + "server name indication does not match capabilities"); + } + + checkSNIInSession(session); + } + + void checkSNIInSession(ExtendedSSLSession session) throws Exception { + List sessionSNI = session.getRequestedServerNames(); + if (!sessionSNI.isEmpty()) { + throw new Exception( + "should be empty request server name indication"); + } + } + + /* + * ============================================================= + * The remainder is just support stuff + */ + volatile Exception serverException = null; + volatile Exception clientException = null; + + // use any free port by default + volatile int serverPort = 0; + + public static void main(String args[]) throws Exception { + if (debug) + System.setProperty("javax.net.debug", "all"); + + new SSLEngineExplorerWithSrv(); + } + + Thread clientThread = null; + Thread serverThread = null; + + /* + * Primary constructor, used to drive remainder of the test. + * + * Fork off the other side, then do your work. + */ + SSLEngineExplorerWithSrv() throws Exception { + super("../../../../etc"); + + if (separateServerThread) { + startServer(true); + startClient(false); + } else { + startClient(true); + startServer(false); + } + + /* + * Wait for other side to close down. + */ + if (separateServerThread) { + serverThread.join(); + } else { + clientThread.join(); + } + + /* + * When we get here, the test is pretty much over. + * + * If the main thread excepted, that propagates back + * immediately. If the other thread threw an exception, we + * should report back. + */ + if (serverException != null) { + System.out.print("Server Exception:"); + throw serverException; + } + if (clientException != null) { + System.out.print("Client Exception:"); + throw clientException; + } + } + + void startServer(boolean newThread) throws Exception { + if (newThread) { + serverThread = new Thread() { + public void run() { + try { + doServerSide(); + } catch (Exception e) { + /* + * Our server thread just died. + * + * Release the client, if not active already... + */ + System.err.println("Server died..."); + System.err.println(e); + serverReady = true; + serverException = e; + } + } + }; + serverThread.start(); + } else { + doServerSide(); + } + } + + void startClient(boolean newThread) throws Exception { + if (newThread) { + clientThread = new Thread() { + public void run() { + try { + doClientSide(); + } catch (Exception e) { + /* + * Our client thread just died. + */ + System.err.println("Client died..."); + clientException = e; + } + } + }; + clientThread.start(); + } else { + doClientSide(); + } + } +} diff --git a/jdk/test/sun/security/ssl/javax/net/ssl/ServerName/SSLSocketConsistentSNI.java b/jdk/test/sun/security/ssl/javax/net/ssl/ServerName/SSLSocketConsistentSNI.java new file mode 100644 index 00000000000..d9ff691e06c --- /dev/null +++ b/jdk/test/sun/security/ssl/javax/net/ssl/ServerName/SSLSocketConsistentSNI.java @@ -0,0 +1,357 @@ +/* + * Copyright (c) 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. + */ + +// +// SunJSSE does not support dynamic system properties, no way to re-use +// system properties in samevm/agentvm mode. +// + +/** + * @test + * @bug 7068321 + * @summary Support TLS Server Name Indication (SNI) Extension in JSSE Server + * @run main/othervm SSLSocketConsistentSNI + */ + +import java.io.*; +import java.nio.*; +import java.nio.channels.*; +import java.util.*; +import java.net.*; +import javax.net.ssl.*; + +public class SSLSocketConsistentSNI { + + /* + * ============================================================= + * Set the various variables needed for the tests, then + * specify what tests to run on each side. + */ + + /* + * Should we run the client or server in a separate thread? + * Both sides can throw exceptions, but do you have a preference + * as to which side should be the main thread. + */ + static boolean separateServerThread = true; + + /* + * Where do we find the keystores? + */ + static String pathToStores = "../../../../etc"; + static String keyStoreFile = "keystore"; + static String trustStoreFile = "truststore"; + static String passwd = "passphrase"; + + /* + * Is the server ready to serve? + */ + volatile static boolean serverReady = false; + + /* + * Turn on SSL debugging? + */ + static boolean debug = false; + + /* + * If the client or server is doing some kind of object creation + * that the other side depends on, and that thread prematurely + * exits, you may experience a hang. The test harness will + * terminate all hung threads after its timeout has expired, + * currently 3 minutes by default, but you might try to be + * smart about it.... + */ + + /* + * Define the server side of the test. + * + * If the server prematurely exits, serverReady will be set to true + * to avoid infinite hangs. + */ + void doServerSide() throws Exception { + SSLServerSocketFactory sslssf = + (SSLServerSocketFactory) SSLServerSocketFactory.getDefault(); + SSLServerSocket sslServerSocket = + (SSLServerSocket) sslssf.createServerSocket(serverPort); + + SNIMatcher matcher = SNIHostName.createSNIMatcher( + serverAcceptableHostname); + Collection matchers = new ArrayList<>(1); + matchers.add(matcher); + SSLParameters params = sslServerSocket.getSSLParameters(); + params.setSNIMatchers(matchers); + sslServerSocket.setSSLParameters(params); + + serverPort = sslServerSocket.getLocalPort(); + + /* + * Signal Client, we're ready for his connect. + */ + serverReady = true; + + SSLSocket sslSocket = (SSLSocket) sslServerSocket.accept(); + try { + InputStream sslIS = sslSocket.getInputStream(); + OutputStream sslOS = sslSocket.getOutputStream(); + + sslIS.read(); + sslOS.write(85); + sslOS.flush(); + + ExtendedSSLSession session = + (ExtendedSSLSession)sslSocket.getSession(); + checkSNIInSession(session); + } finally { + sslSocket.close(); + sslServerSocket.close(); + } + } + + + /* + * Define the client side of the test. + * + * If the server prematurely exits, serverReady will be set to true + * to avoid infinite hangs. + */ + void doClientSide() throws Exception { + + /* + * Wait for server to get started. + */ + while (!serverReady) { + Thread.sleep(50); + } + + SSLSocketFactory sslsf = + (SSLSocketFactory) SSLSocketFactory.getDefault(); + SSLSocket sslSocket = (SSLSocket) + sslsf.createSocket("localhost", serverPort); + + SNIHostName serverName = new SNIHostName(clientRequestedHostname); + List serverNames = new ArrayList<>(1); + serverNames.add(serverName); + SSLParameters params = sslSocket.getSSLParameters(); + params.setServerNames(serverNames); + sslSocket.setSSLParameters(params); + + try { + InputStream sslIS = sslSocket.getInputStream(); + OutputStream sslOS = sslSocket.getOutputStream(); + + sslOS.write(280); + sslOS.flush(); + sslIS.read(); + + ExtendedSSLSession session = + (ExtendedSSLSession)sslSocket.getSession(); + checkSNIInSession(session); + } finally { + sslSocket.close(); + } + } + + private static String clientRequestedHostname = "www.example.com"; + private static String serverAcceptableHostname = "www\\.example\\.com"; + + void checkSNIInSession(ExtendedSSLSession session) throws Exception { + List sessionSNI = session.getRequestedServerNames(); + if (sessionSNI.isEmpty()) { + throw new Exception( + "unexpected empty request server name indication"); + } + + if (sessionSNI.size() != 1) { + throw new Exception( + "unexpected request server name indication"); + } + + SNIServerName serverName = sessionSNI.get(0); + if (!(serverName instanceof SNIHostName)) { + throw new Exception( + "unexpected instance of request server name indication"); + } + + String hostname = ((SNIHostName)serverName).getAsciiName(); + if (!clientRequestedHostname.equalsIgnoreCase(hostname)) { + throw new Exception( + "unexpected request server name indication value"); + } + } + + /* + * ============================================================= + * The remainder is just support stuff + */ + + // use any free port by default + volatile int serverPort = 0; + + volatile Exception serverException = null; + volatile Exception clientException = null; + + public static void main(String[] args) throws Exception { + String keyFilename = + System.getProperty("test.src", ".") + "/" + pathToStores + + "/" + keyStoreFile; + String trustFilename = + System.getProperty("test.src", ".") + "/" + pathToStores + + "/" + trustStoreFile; + + System.setProperty("javax.net.ssl.keyStore", keyFilename); + System.setProperty("javax.net.ssl.keyStorePassword", passwd); + System.setProperty("javax.net.ssl.trustStore", trustFilename); + System.setProperty("javax.net.ssl.trustStorePassword", passwd); + + if (debug) + System.setProperty("javax.net.debug", "all"); + + /* + * Start the tests. + */ + new SSLSocketConsistentSNI(); + } + + Thread clientThread = null; + Thread serverThread = null; + + /* + * Primary constructor, used to drive remainder of the test. + * + * Fork off the other side, then do your work. + */ + SSLSocketConsistentSNI() throws Exception { + try { + if (separateServerThread) { + startServer(true); + startClient(false); + } else { + startClient(true); + startServer(false); + } + } catch (Exception e) { + // swallow for now. Show later + } + + /* + * Wait for other side to close down. + */ + if (separateServerThread) { + serverThread.join(); + } else { + clientThread.join(); + } + + /* + * When we get here, the test is pretty much over. + * Which side threw the error? + */ + Exception local; + Exception remote; + String whichRemote; + + if (separateServerThread) { + remote = serverException; + local = clientException; + whichRemote = "server"; + } else { + remote = clientException; + local = serverException; + whichRemote = "client"; + } + + /* + * If both failed, return the curthread's exception, but also + * print the remote side Exception + */ + if ((local != null) && (remote != null)) { + System.out.println(whichRemote + " also threw:"); + remote.printStackTrace(); + System.out.println(); + throw local; + } + + if (remote != null) { + throw remote; + } + + if (local != null) { + throw local; + } + } + + void startServer(boolean newThread) throws Exception { + if (newThread) { + serverThread = new Thread() { + public void run() { + try { + doServerSide(); + } catch (Exception e) { + /* + * Our server thread just died. + * + * Release the client, if not active already... + */ + System.err.println("Server died..."); + serverReady = true; + serverException = e; + } + } + }; + serverThread.start(); + } else { + try { + doServerSide(); + } catch (Exception e) { + serverException = e; + } finally { + serverReady = true; + } + } + } + + void startClient(boolean newThread) throws Exception { + if (newThread) { + clientThread = new Thread() { + public void run() { + try { + doClientSide(); + } catch (Exception e) { + /* + * Our client thread just died. + */ + System.err.println("Client died..."); + clientException = e; + } + } + }; + clientThread.start(); + } else { + try { + doClientSide(); + } catch (Exception e) { + clientException = e; + } + } + } +} diff --git a/jdk/test/sun/security/ssl/javax/net/ssl/ServerName/SSLSocketExplorer.java b/jdk/test/sun/security/ssl/javax/net/ssl/ServerName/SSLSocketExplorer.java new file mode 100644 index 00000000000..27e2b6abce7 --- /dev/null +++ b/jdk/test/sun/security/ssl/javax/net/ssl/ServerName/SSLSocketExplorer.java @@ -0,0 +1,375 @@ +/* + * Copyright (c) 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. + */ + +// +// SunJSSE does not support dynamic system properties, no way to re-use +// system properties in samevm/agentvm mode. +// + +/** + * @test + * @bug 7068321 + * @summary Support TLS Server Name Indication (SNI) Extension in JSSE Server + * @library ../../../../templates + * @build SSLCapabilities SSLExplorer + * @run main/othervm SSLSocketExplorer SSLv2Hello,SSLv3 + * @run main/othervm SSLSocketExplorer SSLv3 + * @run main/othervm SSLSocketExplorer TLSv1 + * @run main/othervm SSLSocketExplorer TLSv1.1 + * @run main/othervm SSLSocketExplorer TLSv1.2 + */ + +import java.io.*; +import java.nio.*; +import java.nio.channels.*; +import java.util.*; +import java.net.*; +import javax.net.ssl.*; + +public class SSLSocketExplorer { + + /* + * ============================================================= + * Set the various variables needed for the tests, then + * specify what tests to run on each side. + */ + + /* + * Should we run the client or server in a separate thread? + * Both sides can throw exceptions, but do you have a preference + * as to which side should be the main thread. + */ + static boolean separateServerThread = true; + + /* + * Where do we find the keystores? + */ + static String pathToStores = "../../../../etc"; + static String keyStoreFile = "keystore"; + static String trustStoreFile = "truststore"; + static String passwd = "passphrase"; + + /* + * Is the server ready to serve? + */ + volatile static boolean serverReady = false; + + /* + * Turn on SSL debugging? + */ + static boolean debug = false; + + /* + * If the client or server is doing some kind of object creation + * that the other side depends on, and that thread prematurely + * exits, you may experience a hang. The test harness will + * terminate all hung threads after its timeout has expired, + * currently 3 minutes by default, but you might try to be + * smart about it.... + */ + + /* + * Define the server side of the test. + * + * If the server prematurely exits, serverReady will be set to true + * to avoid infinite hangs. + */ + void doServerSide() throws Exception { + + ServerSocket serverSocket = new ServerSocket(serverPort); + + // Signal Client, we're ready for his connect. + serverPort = serverSocket.getLocalPort(); + serverReady = true; + + Socket socket = serverSocket.accept(); + InputStream ins = socket.getInputStream(); + + byte[] buffer = new byte[0xFF]; + int position = 0; + SSLCapabilities capabilities = null; + + // Read the header of TLS record + while (position < SSLExplorer.RECORD_HEADER_SIZE) { + int count = SSLExplorer.RECORD_HEADER_SIZE - position; + int n = ins.read(buffer, position, count); + if (n < 0) { + throw new Exception("unexpected end of stream!"); + } + position += n; + } + + int recordLength = SSLExplorer.getRequiredSize(buffer, 0, position); + if (buffer.length < recordLength) { + buffer = Arrays.copyOf(buffer, recordLength); + } + + while (position < recordLength) { + int count = recordLength - position; + int n = ins.read(buffer, position, count); + if (n < 0) { + throw new Exception("unexpected end of stream!"); + } + position += n; + } + + capabilities = SSLExplorer.explore(buffer, 0, recordLength);; + if (capabilities != null) { + System.out.println("Record version: " + + capabilities.getRecordVersion()); + System.out.println("Hello version: " + + capabilities.getHelloVersion()); + } + + SSLSocketFactory sslsf = + (SSLSocketFactory) SSLSocketFactory.getDefault(); + ByteArrayInputStream bais = + new ByteArrayInputStream(buffer, 0, position); + SSLSocket sslSocket = (SSLSocket)sslsf.createSocket(socket, bais, true); + + InputStream sslIS = sslSocket.getInputStream(); + OutputStream sslOS = sslSocket.getOutputStream(); + + sslIS.read(); + sslOS.write(85); + sslOS.flush(); + + ExtendedSSLSession session = (ExtendedSSLSession)sslSocket.getSession(); + checkCapabilities(capabilities, session); + + sslSocket.close(); + serverSocket.close(); + } + + + /* + * Define the client side of the test. + * + * If the server prematurely exits, serverReady will be set to true + * to avoid infinite hangs. + */ + void doClientSide() throws Exception { + + /* + * Wait for server to get started. + */ + while (!serverReady) { + Thread.sleep(50); + } + + SSLSocketFactory sslsf = + (SSLSocketFactory) SSLSocketFactory.getDefault(); + SSLSocket sslSocket = (SSLSocket) + sslsf.createSocket("localhost", serverPort); + + // enable the specified TLS protocol + sslSocket.setEnabledProtocols(supportedProtocols); + + InputStream sslIS = sslSocket.getInputStream(); + OutputStream sslOS = sslSocket.getOutputStream(); + + sslOS.write(280); + sslOS.flush(); + sslIS.read(); + + sslSocket.close(); + } + + void checkCapabilities(SSLCapabilities capabilities, + ExtendedSSLSession session) throws Exception { + + List sessionSNI = session.getRequestedServerNames(); + if (!sessionSNI.equals(capabilities.getServerNames())) { + throw new Exception( + "server name indication does not match capabilities"); + } + } + + private static String[] supportedProtocols; // supported protocols + + private static void parseArguments(String[] args) { + supportedProtocols = args[0].split(","); + } + + + /* + * ============================================================= + * The remainder is just support stuff + */ + + // use any free port by default + volatile int serverPort = 0; + + volatile Exception serverException = null; + volatile Exception clientException = null; + + public static void main(String[] args) throws Exception { + String keyFilename = + System.getProperty("test.src", ".") + "/" + pathToStores + + "/" + keyStoreFile; + String trustFilename = + System.getProperty("test.src", ".") + "/" + pathToStores + + "/" + trustStoreFile; + + System.setProperty("javax.net.ssl.keyStore", keyFilename); + System.setProperty("javax.net.ssl.keyStorePassword", passwd); + System.setProperty("javax.net.ssl.trustStore", trustFilename); + System.setProperty("javax.net.ssl.trustStorePassword", passwd); + + if (debug) + System.setProperty("javax.net.debug", "all"); + + /* + * Get the customized arguments. + */ + parseArguments(args); + + /* + * Start the tests. + */ + new SSLSocketExplorer(); + } + + Thread clientThread = null; + Thread serverThread = null; + + /* + * Primary constructor, used to drive remainder of the test. + * + * Fork off the other side, then do your work. + */ + SSLSocketExplorer() throws Exception { + try { + if (separateServerThread) { + startServer(true); + startClient(false); + } else { + startClient(true); + startServer(false); + } + } catch (Exception e) { + // swallow for now. Show later + } + + /* + * Wait for other side to close down. + */ + if (separateServerThread) { + serverThread.join(); + } else { + clientThread.join(); + } + + /* + * When we get here, the test is pretty much over. + * Which side threw the error? + */ + Exception local; + Exception remote; + String whichRemote; + + if (separateServerThread) { + remote = serverException; + local = clientException; + whichRemote = "server"; + } else { + remote = clientException; + local = serverException; + whichRemote = "client"; + } + + /* + * If both failed, return the curthread's exception, but also + * print the remote side Exception + */ + if ((local != null) && (remote != null)) { + System.out.println(whichRemote + " also threw:"); + remote.printStackTrace(); + System.out.println(); + throw local; + } + + if (remote != null) { + throw remote; + } + + if (local != null) { + throw local; + } + } + + void startServer(boolean newThread) throws Exception { + if (newThread) { + serverThread = new Thread() { + public void run() { + try { + doServerSide(); + } catch (Exception e) { + /* + * Our server thread just died. + * + * Release the client, if not active already... + */ + System.err.println("Server died..."); + serverReady = true; + serverException = e; + } + } + }; + serverThread.start(); + } else { + try { + doServerSide(); + } catch (Exception e) { + serverException = e; + } finally { + serverReady = true; + } + } + } + + void startClient(boolean newThread) throws Exception { + if (newThread) { + clientThread = new Thread() { + public void run() { + try { + doClientSide(); + } catch (Exception e) { + /* + * Our client thread just died. + */ + System.err.println("Client died..."); + clientException = e; + } + } + }; + clientThread.start(); + } else { + try { + doClientSide(); + } catch (Exception e) { + clientException = e; + } + } + } +} diff --git a/jdk/test/sun/security/ssl/javax/net/ssl/ServerName/SSLSocketExplorerFailure.java b/jdk/test/sun/security/ssl/javax/net/ssl/ServerName/SSLSocketExplorerFailure.java new file mode 100644 index 00000000000..44a37150ef8 --- /dev/null +++ b/jdk/test/sun/security/ssl/javax/net/ssl/ServerName/SSLSocketExplorerFailure.java @@ -0,0 +1,383 @@ +/* + * Copyright (c) 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. + */ + +// +// SunJSSE does not support dynamic system properties, no way to re-use +// system properties in samevm/agentvm mode. +// + +/** + * @test + * @bug 7068321 + * @summary Support TLS Server Name Indication (SNI) Extension in JSSE Server + * @library ../../../../templates + * @build SSLCapabilities SSLExplorer + * @run main/othervm SSLSocketExplorerFailure SSLv2Hello,SSLv3 + * @run main/othervm SSLSocketExplorerFailure SSLv3 + * @run main/othervm SSLSocketExplorerFailure TLSv1 + * @run main/othervm SSLSocketExplorerFailure TLSv1.1 + * @run main/othervm SSLSocketExplorerFailure TLSv1.2 + */ + +import java.io.*; +import java.nio.*; +import java.nio.channels.*; +import java.util.*; +import java.net.*; +import javax.net.ssl.*; + +public class SSLSocketExplorerFailure { + + /* + * ============================================================= + * Set the various variables needed for the tests, then + * specify what tests to run on each side. + */ + + /* + * Should we run the client or server in a separate thread? + * Both sides can throw exceptions, but do you have a preference + * as to which side should be the main thread. + */ + static boolean separateServerThread = true; + + /* + * Where do we find the keystores? + */ + static String pathToStores = "../../../../etc"; + static String keyStoreFile = "keystore"; + static String trustStoreFile = "truststore"; + static String passwd = "passphrase"; + + /* + * Is the server ready to serve? + */ + volatile static boolean serverReady = false; + + /* + * Turn on SSL debugging? + */ + static boolean debug = false; + + /* + * If the client or server is doing some kind of object creation + * that the other side depends on, and that thread prematurely + * exits, you may experience a hang. The test harness will + * terminate all hung threads after its timeout has expired, + * currently 3 minutes by default, but you might try to be + * smart about it.... + */ + + /* + * Define the server side of the test. + * + * If the server prematurely exits, serverReady will be set to true + * to avoid infinite hangs. + */ + void doServerSide() throws Exception { + + ServerSocket serverSocket = new ServerSocket(serverPort); + + // Signal Client, we're ready for his connect. + serverPort = serverSocket.getLocalPort(); + serverReady = true; + + Socket socket = serverSocket.accept(); + InputStream ins = socket.getInputStream(); + + byte[] buffer = new byte[0xFF]; + int position = 0; + SSLCapabilities capabilities = null; + boolean failed = false; + try { + // Read the header of TLS record + while (position < SSLExplorer.RECORD_HEADER_SIZE) { + int count = SSLExplorer.RECORD_HEADER_SIZE - position; + int n = ins.read(buffer, position, count); + if (n < 0) { + throw new Exception("unexpected end of stream!"); + } + position += n; + } + + int recordLength = SSLExplorer.getRequiredSize(buffer, 0, position); + if (buffer.length < recordLength) { + buffer = Arrays.copyOf(buffer, recordLength); + } + + while (position < recordLength) { + int count = recordLength - position; + int n = ins.read(buffer, position, count); + if (n < 0) { + throw new Exception("unexpected end of stream!"); + } + position += n; + } + + capabilities = SSLExplorer.explore(buffer, 0, recordLength);; + if (capabilities != null) { + System.out.println("Record version: " + + capabilities.getRecordVersion()); + System.out.println("Hello version: " + + capabilities.getHelloVersion()); + } + + // want an I/O exception + throw new IOException("We just want a I/O exception"); + } catch (Exception e) { + failed = true; + } + + // off course, the above explore failed. Faile to failure handler + SSLContext context = SSLContext.getInstance("TLS"); + context.init(null, null, null); + SSLSocketFactory sslsf = context.getSocketFactory(); + ByteArrayInputStream bais = + new ByteArrayInputStream(buffer, 0, position); + SSLSocket sslSocket = (SSLSocket)sslsf.createSocket(socket, bais, true); + + try { + InputStream sslIS = sslSocket.getInputStream(); + OutputStream sslOS = sslSocket.getOutputStream(); + + sslIS.read(); + if (!failed) { + sslOS.write(85); + sslOS.flush(); + } else { + sslSocket.close(); + } + } catch (Exception e) { + System.out.println("server exception " + e); + } finally { + sslSocket.close(); + serverSocket.close(); + } + } + + + /* + * Define the client side of the test. + * + * If the server prematurely exits, serverReady will be set to true + * to avoid infinite hangs. + */ + void doClientSide() throws Exception { + + /* + * Wait for server to get started. + */ + while (!serverReady) { + Thread.sleep(50); + } + + SSLSocketFactory sslsf = + (SSLSocketFactory) SSLSocketFactory.getDefault(); + SSLSocket sslSocket = (SSLSocket) + sslsf.createSocket("localhost", serverPort); + + // enable the specified TLS protocol + sslSocket.setEnabledProtocols(supportedProtocols); + + try { + InputStream sslIS = sslSocket.getInputStream(); + OutputStream sslOS = sslSocket.getOutputStream(); + + sslOS.write(280); + sslOS.flush(); + sslIS.read(); + } catch (Exception e) { + System.out.println("client exception " + e); + } finally { + sslSocket.close(); + } + } + + private static String[] supportedProtocols; // supported protocols + + private static void parseArguments(String[] args) { + supportedProtocols = args[0].split(","); + } + + + /* + * ============================================================= + * The remainder is just support stuff + */ + + // use any free port by default + volatile int serverPort = 0; + + volatile Exception serverException = null; + volatile Exception clientException = null; + + public static void main(String[] args) throws Exception { + String keyFilename = + System.getProperty("test.src", ".") + "/" + pathToStores + + "/" + keyStoreFile; + String trustFilename = + System.getProperty("test.src", ".") + "/" + pathToStores + + "/" + trustStoreFile; + + System.setProperty("javax.net.ssl.keyStore", keyFilename); + System.setProperty("javax.net.ssl.keyStorePassword", passwd); + System.setProperty("javax.net.ssl.trustStore", trustFilename); + System.setProperty("javax.net.ssl.trustStorePassword", passwd); + + if (debug) + System.setProperty("javax.net.debug", "all"); + + /* + * Get the customized arguments. + */ + parseArguments(args); + + /* + * Start the tests. + */ + new SSLSocketExplorerFailure(); + } + + Thread clientThread = null; + Thread serverThread = null; + + /* + * Primary constructor, used to drive remainder of the test. + * + * Fork off the other side, then do your work. + */ + SSLSocketExplorerFailure() throws Exception { + try { + if (separateServerThread) { + startServer(true); + startClient(false); + } else { + startClient(true); + startServer(false); + } + } catch (Exception e) { + // swallow for now. Show later + } + + /* + * Wait for other side to close down. + */ + if (separateServerThread) { + serverThread.join(); + } else { + clientThread.join(); + } + + /* + * When we get here, the test is pretty much over. + * Which side threw the error? + */ + Exception local; + Exception remote; + String whichRemote; + + if (separateServerThread) { + remote = serverException; + local = clientException; + whichRemote = "server"; + } else { + remote = clientException; + local = serverException; + whichRemote = "client"; + } + + /* + * If both failed, return the curthread's exception, but also + * print the remote side Exception + */ + if ((local != null) && (remote != null)) { + System.out.println(whichRemote + " also threw:"); + remote.printStackTrace(); + System.out.println(); + throw local; + } + + if (remote != null) { + throw remote; + } + + if (local != null) { + throw local; + } + } + + void startServer(boolean newThread) throws Exception { + if (newThread) { + serverThread = new Thread() { + public void run() { + try { + doServerSide(); + } catch (Exception e) { + /* + * Our server thread just died. + * + * Release the client, if not active already... + */ + System.err.println("Server died..."); + serverReady = true; + serverException = e; + } + } + }; + serverThread.start(); + } else { + try { + doServerSide(); + } catch (Exception e) { + serverException = e; + } finally { + serverReady = true; + } + } + } + + void startClient(boolean newThread) throws Exception { + if (newThread) { + clientThread = new Thread() { + public void run() { + try { + doClientSide(); + } catch (Exception e) { + /* + * Our client thread just died. + */ + System.err.println("Client died..."); + clientException = e; + } + } + }; + clientThread.start(); + } else { + try { + doClientSide(); + } catch (Exception e) { + clientException = e; + } + } + } +} diff --git a/jdk/test/sun/security/ssl/javax/net/ssl/ServerName/SSLSocketExplorerMatchedSNI.java b/jdk/test/sun/security/ssl/javax/net/ssl/ServerName/SSLSocketExplorerMatchedSNI.java new file mode 100644 index 00000000000..c9ae26c42a6 --- /dev/null +++ b/jdk/test/sun/security/ssl/javax/net/ssl/ServerName/SSLSocketExplorerMatchedSNI.java @@ -0,0 +1,435 @@ +/* + * Copyright (c) 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. + */ + +// +// SunJSSE does not support dynamic system properties, no way to re-use +// system properties in samevm/agentvm mode. +// + +/** + * @test + * @bug 7068321 + * @summary Support TLS Server Name Indication (SNI) Extension in JSSE Server + * @library ../../../../templates + * @build SSLCapabilities SSLExplorer + * @run main/othervm SSLSocketExplorerMatchedSNI www.example.com + * www\.example\.com + * @run main/othervm SSLSocketExplorerMatchedSNI www.example.com + * www\.example\.(com|org) + * @run main/othervm SSLSocketExplorerMatchedSNI example.com + * (.*\.)*example\.(com|org) + * @run main/othervm SSLSocketExplorerMatchedSNI www.example.com + * (.*\.)*example\.(com|org) + * @run main/othervm SSLSocketExplorerMatchedSNI www.us.example.com + * (.*\.)*example\.(com|org) + */ + +import java.io.*; +import java.nio.*; +import java.nio.channels.*; +import java.util.*; +import java.net.*; +import javax.net.ssl.*; + +public class SSLSocketExplorerMatchedSNI { + + /* + * ============================================================= + * Set the various variables needed for the tests, then + * specify what tests to run on each side. + */ + + /* + * Should we run the client or server in a separate thread? + * Both sides can throw exceptions, but do you have a preference + * as to which side should be the main thread. + */ + static boolean separateServerThread = false; + + /* + * Where do we find the keystores? + */ + static String pathToStores = "../../../../etc"; + static String keyStoreFile = "keystore"; + static String trustStoreFile = "truststore"; + static String passwd = "passphrase"; + + /* + * Is the server ready to serve? + */ + volatile static boolean serverReady = false; + + /* + * Turn on SSL debugging? + */ + static boolean debug = false; + + /* + * If the client or server is doing some kind of object creation + * that the other side depends on, and that thread prematurely + * exits, you may experience a hang. The test harness will + * terminate all hung threads after its timeout has expired, + * currently 3 minutes by default, but you might try to be + * smart about it.... + */ + + /* + * Define the server side of the test. + * + * If the server prematurely exits, serverReady will be set to true + * to avoid infinite hangs. + */ + void doServerSide() throws Exception { + + ServerSocket serverSocket = new ServerSocket(serverPort); + + // Signal Client, we're ready for his connect. + serverPort = serverSocket.getLocalPort(); + serverReady = true; + + Socket socket = serverSocket.accept(); + InputStream ins = socket.getInputStream(); + + byte[] buffer = new byte[0xFF]; + int position = 0; + SSLCapabilities capabilities = null; + + // Read the header of TLS record + while (position < SSLExplorer.RECORD_HEADER_SIZE) { + int count = SSLExplorer.RECORD_HEADER_SIZE - position; + int n = ins.read(buffer, position, count); + if (n < 0) { + throw new Exception("unexpected end of stream!"); + } + position += n; + } + + int recordLength = SSLExplorer.getRequiredSize(buffer, 0, position); + if (buffer.length < recordLength) { + buffer = Arrays.copyOf(buffer, recordLength); + } + + while (position < recordLength) { + int count = recordLength - position; + int n = ins.read(buffer, position, count); + if (n < 0) { + throw new Exception("unexpected end of stream!"); + } + position += n; + } + + capabilities = SSLExplorer.explore(buffer, 0, recordLength);; + if (capabilities != null) { + System.out.println("Record version: " + + capabilities.getRecordVersion()); + System.out.println("Hello version: " + + capabilities.getHelloVersion()); + } + + SSLSocketFactory sslsf = + (SSLSocketFactory) SSLSocketFactory.getDefault(); + ByteArrayInputStream bais = + new ByteArrayInputStream(buffer, 0, position); + SSLSocket sslSocket = (SSLSocket)sslsf.createSocket(socket, bais, true); + + SNIMatcher matcher = SNIHostName.createSNIMatcher( + serverAcceptableHostname); + Collection matchers = new ArrayList<>(1); + matchers.add(matcher); + SSLParameters params = sslSocket.getSSLParameters(); + params.setSNIMatchers(matchers); + sslSocket.setSSLParameters(params); + + InputStream sslIS = sslSocket.getInputStream(); + OutputStream sslOS = sslSocket.getOutputStream(); + + sslIS.read(); + sslOS.write(85); + sslOS.flush(); + + ExtendedSSLSession session = (ExtendedSSLSession)sslSocket.getSession(); + checkCapabilities(capabilities, session); + + sslSocket.close(); + serverSocket.close(); + } + + + /* + * Define the client side of the test. + * + * If the server prematurely exits, serverReady will be set to true + * to avoid infinite hangs. + */ + void doClientSide() throws Exception { + + /* + * Wait for server to get started. + */ + while (!serverReady) { + Thread.sleep(50); + } + + SSLSocketFactory sslsf = + (SSLSocketFactory) SSLSocketFactory.getDefault(); + SSLSocket sslSocket = (SSLSocket) + sslsf.createSocket("localhost", serverPort); + + SNIHostName serverName = new SNIHostName(clientRequestedHostname); + List serverNames = new ArrayList<>(1); + serverNames.add(serverName); + SSLParameters params = sslSocket.getSSLParameters(); + params.setServerNames(serverNames); + sslSocket.setSSLParameters(params); + + InputStream sslIS = sslSocket.getInputStream(); + OutputStream sslOS = sslSocket.getOutputStream(); + + sslOS.write(280); + sslOS.flush(); + sslIS.read(); + + ExtendedSSLSession session = (ExtendedSSLSession)sslSocket.getSession(); + checkSNIInSession(session); + + sslSocket.close(); + } + + + void checkCapabilities(SSLCapabilities capabilities, + ExtendedSSLSession session) throws Exception { + + List sessionSNI = session.getRequestedServerNames(); + if (!sessionSNI.equals(capabilities.getServerNames())) { + for (SNIServerName sni : sessionSNI) { + System.out.println("SNI in session is " + sni); + } + + List capaSNI = capabilities.getServerNames(); + for (SNIServerName sni : capaSNI) { + System.out.println("SNI in session is " + sni); + } + + throw new Exception( + "server name indication does not match capabilities"); + } + + checkSNIInSession(session); + } + + void checkSNIInSession(ExtendedSSLSession session) throws Exception { + List sessionSNI = session.getRequestedServerNames(); + if (sessionSNI.isEmpty()) { + throw new Exception( + "unexpected empty request server name indication"); + } + + if (sessionSNI.size() != 1) { + throw new Exception( + "unexpected request server name indication"); + } + + SNIServerName serverName = sessionSNI.get(0); + if (!(serverName instanceof SNIHostName)) { + throw new Exception( + "unexpected instance of request server name indication"); + } + + String hostname = ((SNIHostName)serverName).getAsciiName(); + if (!clientRequestedHostname.equalsIgnoreCase(hostname)) { + throw new Exception( + "unexpected request server name indication value"); + } + } + + private static String clientRequestedHostname; + private static String serverAcceptableHostname; + + private static void parseArguments(String[] args) { + clientRequestedHostname = args[0]; + serverAcceptableHostname = args[1]; + } + + + /* + * ============================================================= + * The remainder is just support stuff + */ + + // use any free port by default + volatile int serverPort = 0; + + volatile Exception serverException = null; + volatile Exception clientException = null; + + + public static void main(String[] args) throws Exception { + String keyFilename = + System.getProperty("test.src", ".") + "/" + pathToStores + + "/" + keyStoreFile; + String trustFilename = + System.getProperty("test.src", ".") + "/" + pathToStores + + "/" + trustStoreFile; + + System.setProperty("javax.net.ssl.keyStore", keyFilename); + System.setProperty("javax.net.ssl.keyStorePassword", passwd); + System.setProperty("javax.net.ssl.trustStore", trustFilename); + System.setProperty("javax.net.ssl.trustStorePassword", passwd); + + if (debug) + System.setProperty("javax.net.debug", "all"); + + /* + * Get the customized arguments. + */ + parseArguments(args); + + /* + * Start the tests. + */ + new SSLSocketExplorerMatchedSNI(); + } + + Thread clientThread = null; + Thread serverThread = null; + + /* + * Primary constructor, used to drive remainder of the test. + * + * Fork off the other side, then do your work. + */ + SSLSocketExplorerMatchedSNI() throws Exception { + try { + if (separateServerThread) { + startServer(true); + startClient(false); + } else { + startClient(true); + startServer(false); + } + } catch (Exception e) { + // swallow for now. Show later + } + + /* + * Wait for other side to close down. + */ + if (separateServerThread) { + serverThread.join(); + } else { + clientThread.join(); + } + + /* + * When we get here, the test is pretty much over. + * Which side threw the error? + */ + Exception local; + Exception remote; + String whichRemote; + + if (separateServerThread) { + remote = serverException; + local = clientException; + whichRemote = "server"; + } else { + remote = clientException; + local = serverException; + whichRemote = "client"; + } + + /* + * If both failed, return the curthread's exception, but also + * print the remote side Exception + */ + if ((local != null) && (remote != null)) { + System.out.println(whichRemote + " also threw:"); + remote.printStackTrace(); + System.out.println(); + throw local; + } + + if (remote != null) { + throw remote; + } + + if (local != null) { + throw local; + } + } + + void startServer(boolean newThread) throws Exception { + if (newThread) { + serverThread = new Thread() { + public void run() { + try { + doServerSide(); + } catch (Exception e) { + /* + * Our server thread just died. + * + * Release the client, if not active already... + */ + System.err.println("Server died..."); + serverReady = true; + serverException = e; + } + } + }; + serverThread.start(); + } else { + try { + doServerSide(); + } catch (Exception e) { + serverException = e; + } finally { + serverReady = true; + } + } + } + + void startClient(boolean newThread) throws Exception { + if (newThread) { + clientThread = new Thread() { + public void run() { + try { + doClientSide(); + } catch (Exception e) { + /* + * Our client thread just died. + */ + System.err.println("Client died..."); + clientException = e; + } + } + }; + clientThread.start(); + } else { + try { + doClientSide(); + } catch (Exception e) { + clientException = e; + } + } + } +} diff --git a/jdk/test/sun/security/ssl/javax/net/ssl/ServerName/SSLSocketExplorerUnmatchedSNI.java b/jdk/test/sun/security/ssl/javax/net/ssl/ServerName/SSLSocketExplorerUnmatchedSNI.java new file mode 100644 index 00000000000..eab48002d6f --- /dev/null +++ b/jdk/test/sun/security/ssl/javax/net/ssl/ServerName/SSLSocketExplorerUnmatchedSNI.java @@ -0,0 +1,392 @@ +/* + * Copyright (c) 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. + */ + +// +// SunJSSE does not support dynamic system properties, no way to re-use +// system properties in samevm/agentvm mode. +// + +/** + * @test + * @bug 7068321 + * @summary Support TLS Server Name Indication (SNI) Extension in JSSE Server + * @library ../../../../templates + * @build SSLCapabilities SSLExplorer + * @run main/othervm SSLSocketExplorerUnmatchedSNI www.example.com + * www\.example\.org + */ + +import java.io.*; +import java.nio.*; +import java.nio.channels.*; +import java.util.*; +import java.net.*; +import javax.net.ssl.*; + +public class SSLSocketExplorerUnmatchedSNI { + + /* + * ============================================================= + * Set the various variables needed for the tests, then + * specify what tests to run on each side. + */ + + /* + * Should we run the client or server in a separate thread? + * Both sides can throw exceptions, but do you have a preference + * as to which side should be the main thread. + */ + static boolean separateServerThread = false; + + /* + * Where do we find the keystores? + */ + static String pathToStores = "../../../../etc"; + static String keyStoreFile = "keystore"; + static String trustStoreFile = "truststore"; + static String passwd = "passphrase"; + + /* + * Is the server ready to serve? + */ + volatile static boolean serverReady = false; + + /* + * Turn on SSL debugging? + */ + static boolean debug = false; + + /* + * If the client or server is doing some kind of object creation + * that the other side depends on, and that thread prematurely + * exits, you may experience a hang. The test harness will + * terminate all hung threads after its timeout has expired, + * currently 3 minutes by default, but you might try to be + * smart about it.... + */ + + /* + * Define the server side of the test. + * + * If the server prematurely exits, serverReady will be set to true + * to avoid infinite hangs. + */ + void doServerSide() throws Exception { + + ServerSocket serverSocket = new ServerSocket(serverPort); + + // Signal Client, we're ready for his connect. + serverPort = serverSocket.getLocalPort(); + serverReady = true; + + Socket socket = serverSocket.accept(); + InputStream ins = socket.getInputStream(); + + byte[] buffer = new byte[0xFF]; + int position = 0; + SSLCapabilities capabilities = null; + + // Read the header of TLS record + while (position < SSLExplorer.RECORD_HEADER_SIZE) { + int count = SSLExplorer.RECORD_HEADER_SIZE - position; + int n = ins.read(buffer, position, count); + if (n < 0) { + throw new Exception("unexpected end of stream!"); + } + position += n; + } + + int recordLength = SSLExplorer.getRequiredSize(buffer, 0, position); + if (buffer.length < recordLength) { + buffer = Arrays.copyOf(buffer, recordLength); + } + + while (position < recordLength) { + int count = recordLength - position; + int n = ins.read(buffer, position, count); + if (n < 0) { + throw new Exception("unexpected end of stream!"); + } + position += n; + } + + capabilities = SSLExplorer.explore(buffer, 0, recordLength);; + if (capabilities != null) { + System.out.println("Record version: " + + capabilities.getRecordVersion()); + System.out.println("Hello version: " + + capabilities.getHelloVersion()); + } + + SSLSocketFactory sslsf = + (SSLSocketFactory) SSLSocketFactory.getDefault(); + ByteArrayInputStream bais = + new ByteArrayInputStream(buffer, 0, position); + SSLSocket sslSocket = (SSLSocket)sslsf.createSocket(socket, bais, true); + + SNIMatcher matcher = SNIHostName.createSNIMatcher( + serverAcceptableHostname); + Collection matchers = new ArrayList<>(1); + matchers.add(matcher); + SSLParameters params = sslSocket.getSSLParameters(); + params.setSNIMatchers(matchers); + sslSocket.setSSLParameters(params); + + InputStream sslIS = sslSocket.getInputStream(); + OutputStream sslOS = sslSocket.getOutputStream(); + + try { + sslIS.read(); + sslOS.write(85); + sslOS.flush(); + + throw new Exception( + "Mismatched server name indication was accepted"); + } catch (SSLHandshakeException sslhe) { + // the expected unrecognized server name indication exception + } catch (IOException ioe) { + // the peer may have closed the socket because of the unmatched + // server name indication. + } finally { + sslSocket.close(); + serverSocket.close(); + } + } + + + /* + * Define the client side of the test. + * + * If the server prematurely exits, serverReady will be set to true + * to avoid infinite hangs. + */ + void doClientSide() throws Exception { + + /* + * Wait for server to get started. + */ + while (!serverReady) { + Thread.sleep(50); + } + + SSLSocketFactory sslsf = + (SSLSocketFactory) SSLSocketFactory.getDefault(); + SSLSocket sslSocket = (SSLSocket) + sslsf.createSocket("localhost", serverPort); + + SNIHostName serverName = new SNIHostName(clientRequestedHostname); + List serverNames = new ArrayList<>(1); + serverNames.add(serverName); + SSLParameters params = sslSocket.getSSLParameters(); + params.setServerNames(serverNames); + sslSocket.setSSLParameters(params); + + InputStream sslIS = sslSocket.getInputStream(); + OutputStream sslOS = sslSocket.getOutputStream(); + + try { + sslOS.write(280); + sslOS.flush(); + sslIS.read(); + + throw new Exception( + "Mismatched server name indication was accepted"); + } catch (SSLHandshakeException sslhe) { + // the expected unrecognized server name indication exception + } catch (IOException ioe) { + // the peer may have closed the socket because of the unmatched + // server name indication. + } finally { + sslSocket.close(); + } + } + + private static String clientRequestedHostname; + private static String serverAcceptableHostname; + + private static void parseArguments(String[] args) { + clientRequestedHostname = args[0]; + serverAcceptableHostname = args[1]; + } + + /* + * ============================================================= + * The remainder is just support stuff + */ + + // use any free port by default + volatile int serverPort = 0; + + volatile Exception serverException = null; + volatile Exception clientException = null; + + public static void main(String[] args) throws Exception { + String keyFilename = + System.getProperty("test.src", ".") + "/" + pathToStores + + "/" + keyStoreFile; + String trustFilename = + System.getProperty("test.src", ".") + "/" + pathToStores + + "/" + trustStoreFile; + + System.setProperty("javax.net.ssl.keyStore", keyFilename); + System.setProperty("javax.net.ssl.keyStorePassword", passwd); + System.setProperty("javax.net.ssl.trustStore", trustFilename); + System.setProperty("javax.net.ssl.trustStorePassword", passwd); + + if (debug) + System.setProperty("javax.net.debug", "all"); + + /* + * Get the customized arguments. + */ + parseArguments(args); + + /* + * Start the tests. + */ + new SSLSocketExplorerUnmatchedSNI(); + } + + Thread clientThread = null; + Thread serverThread = null; + + /* + * Primary constructor, used to drive remainder of the test. + * + * Fork off the other side, then do your work. + */ + SSLSocketExplorerUnmatchedSNI() throws Exception { + try { + if (separateServerThread) { + startServer(true); + startClient(false); + } else { + startClient(true); + startServer(false); + } + } catch (Exception e) { + // swallow for now. Show later + } + + /* + * Wait for other side to close down. + */ + if (separateServerThread) { + serverThread.join(); + } else { + clientThread.join(); + } + + /* + * When we get here, the test is pretty much over. + * Which side threw the error? + */ + Exception local; + Exception remote; + String whichRemote; + + if (separateServerThread) { + remote = serverException; + local = clientException; + whichRemote = "server"; + } else { + remote = clientException; + local = serverException; + whichRemote = "client"; + } + + /* + * If both failed, return the curthread's exception, but also + * print the remote side Exception + */ + if ((local != null) && (remote != null)) { + System.out.println(whichRemote + " also threw:"); + remote.printStackTrace(); + System.out.println(); + throw local; + } + + if (remote != null) { + throw remote; + } + + if (local != null) { + throw local; + } + } + + void startServer(boolean newThread) throws Exception { + if (newThread) { + serverThread = new Thread() { + public void run() { + try { + doServerSide(); + } catch (Exception e) { + /* + * Our server thread just died. + * + * Release the client, if not active already... + */ + System.err.println("Server died..."); + serverReady = true; + serverException = e; + } + } + }; + serverThread.start(); + } else { + try { + doServerSide(); + } catch (Exception e) { + serverException = e; + } finally { + serverReady = true; + } + } + } + + void startClient(boolean newThread) throws Exception { + if (newThread) { + clientThread = new Thread() { + public void run() { + try { + doClientSide(); + } catch (Exception e) { + /* + * Our client thread just died. + */ + System.err.println("Client died..."); + clientException = e; + } + } + }; + clientThread.start(); + } else { + try { + doClientSide(); + } catch (Exception e) { + clientException = e; + } + } + } +} diff --git a/jdk/test/sun/security/ssl/javax/net/ssl/ServerName/SSLSocketExplorerWithCliSNI.java b/jdk/test/sun/security/ssl/javax/net/ssl/ServerName/SSLSocketExplorerWithCliSNI.java new file mode 100644 index 00000000000..6933c9a9894 --- /dev/null +++ b/jdk/test/sun/security/ssl/javax/net/ssl/ServerName/SSLSocketExplorerWithCliSNI.java @@ -0,0 +1,407 @@ +/* + * Copyright (c) 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. + */ + +// +// SunJSSE does not support dynamic system properties, no way to re-use +// system properties in samevm/agentvm mode. +// + +/** + * @test + * @bug 7068321 + * @summary Support TLS Server Name Indication (SNI) Extension in JSSE Server + * @library ../../../../templates + * @build SSLCapabilities SSLExplorer + * @run main/othervm SSLSocketExplorerWithCliSNI + */ + +import java.io.*; +import java.nio.*; +import java.nio.channels.*; +import java.util.*; +import java.net.*; +import javax.net.ssl.*; + +public class SSLSocketExplorerWithCliSNI { + + /* + * ============================================================= + * Set the various variables needed for the tests, then + * specify what tests to run on each side. + */ + + /* + * Should we run the client or server in a separate thread? + * Both sides can throw exceptions, but do you have a preference + * as to which side should be the main thread. + */ + static boolean separateServerThread = true; + + /* + * Where do we find the keystores? + */ + static String pathToStores = "../../../../etc"; + static String keyStoreFile = "keystore"; + static String trustStoreFile = "truststore"; + static String passwd = "passphrase"; + + /* + * Is the server ready to serve? + */ + volatile static boolean serverReady = false; + + /* + * Turn on SSL debugging? + */ + static boolean debug = false; + + /* + * If the client or server is doing some kind of object creation + * that the other side depends on, and that thread prematurely + * exits, you may experience a hang. The test harness will + * terminate all hung threads after its timeout has expired, + * currently 3 minutes by default, but you might try to be + * smart about it.... + */ + + /* + * Define the server side of the test. + * + * If the server prematurely exits, serverReady will be set to true + * to avoid infinite hangs. + */ + void doServerSide() throws Exception { + + ServerSocket serverSocket = new ServerSocket(serverPort); + + // Signal Client, we're ready for his connect. + serverPort = serverSocket.getLocalPort(); + serverReady = true; + + Socket socket = serverSocket.accept(); + InputStream ins = socket.getInputStream(); + + byte[] buffer = new byte[0xFF]; + int position = 0; + SSLCapabilities capabilities = null; + + // Read the header of TLS record + while (position < SSLExplorer.RECORD_HEADER_SIZE) { + int count = SSLExplorer.RECORD_HEADER_SIZE - position; + int n = ins.read(buffer, position, count); + if (n < 0) { + throw new Exception("unexpected end of stream!"); + } + position += n; + } + + int recordLength = SSLExplorer.getRequiredSize(buffer, 0, position); + if (buffer.length < recordLength) { + buffer = Arrays.copyOf(buffer, recordLength); + } + + while (position < recordLength) { + int count = recordLength - position; + int n = ins.read(buffer, position, count); + if (n < 0) { + throw new Exception("unexpected end of stream!"); + } + position += n; + } + + capabilities = SSLExplorer.explore(buffer, 0, recordLength);; + if (capabilities != null) { + System.out.println("Record version: " + + capabilities.getRecordVersion()); + System.out.println("Hello version: " + + capabilities.getHelloVersion()); + } + + SSLSocketFactory sslsf = + (SSLSocketFactory) SSLSocketFactory.getDefault(); + ByteArrayInputStream bais = + new ByteArrayInputStream(buffer, 0, position); + SSLSocket sslSocket = (SSLSocket)sslsf.createSocket(socket, bais, true); + + InputStream sslIS = sslSocket.getInputStream(); + OutputStream sslOS = sslSocket.getOutputStream(); + + sslIS.read(); + sslOS.write(85); + sslOS.flush(); + + ExtendedSSLSession session = (ExtendedSSLSession)sslSocket.getSession(); + checkCapabilities(capabilities, session); + + sslSocket.close(); + serverSocket.close(); + } + + + /* + * Define the client side of the test. + * + * If the server prematurely exits, serverReady will be set to true + * to avoid infinite hangs. + */ + void doClientSide() throws Exception { + + /* + * Wait for server to get started. + */ + while (!serverReady) { + Thread.sleep(50); + } + + SSLSocketFactory sslsf = + (SSLSocketFactory) SSLSocketFactory.getDefault(); + SSLSocket sslSocket = (SSLSocket) + sslsf.createSocket("localhost", serverPort); + + SNIHostName serverName = new SNIHostName(clientRequestedHostname); + List serverNames = new ArrayList<>(1); + serverNames.add(serverName); + SSLParameters params = sslSocket.getSSLParameters(); + params.setServerNames(serverNames); + sslSocket.setSSLParameters(params); + + InputStream sslIS = sslSocket.getInputStream(); + OutputStream sslOS = sslSocket.getOutputStream(); + + sslOS.write(280); + sslOS.flush(); + sslIS.read(); + + ExtendedSSLSession session = (ExtendedSSLSession)sslSocket.getSession(); + checkSNIInSession(session); + + sslSocket.close(); + } + + private static String clientRequestedHostname = "www.example.com"; + private static String serverAcceptableHostname = + "www\\.example\\.(com|org)"; + + void checkCapabilities(SSLCapabilities capabilities, + ExtendedSSLSession session) throws Exception { + + List sessionSNI = session.getRequestedServerNames(); + if (!sessionSNI.equals(capabilities.getServerNames())) { + for (SNIServerName sni : sessionSNI) { + System.out.println("SNI in session is " + sni); + } + + List capaSNI = capabilities.getServerNames(); + for (SNIServerName sni : capaSNI) { + System.out.println("SNI in session is " + sni); + } + + throw new Exception( + "server name indication does not match capabilities"); + } + + checkSNIInSession(session); + } + + void checkSNIInSession(ExtendedSSLSession session) throws Exception { + List sessionSNI = session.getRequestedServerNames(); + if (sessionSNI.isEmpty()) { + throw new Exception( + "unexpected empty request server name indication"); + } + + if (sessionSNI.size() != 1) { + throw new Exception( + "unexpected request server name indication"); + } + + SNIServerName serverName = sessionSNI.get(0); + if (!(serverName instanceof SNIHostName)) { + throw new Exception( + "unexpected instance of request server name indication"); + } + + String hostname = ((SNIHostName)serverName).getAsciiName(); + if (!clientRequestedHostname.equalsIgnoreCase(hostname)) { + throw new Exception( + "unexpected request server name indication value"); + } + } + + + /* + * ============================================================= + * The remainder is just support stuff + */ + + // use any free port by default + volatile int serverPort = 0; + + volatile Exception serverException = null; + volatile Exception clientException = null; + + public static void main(String[] args) throws Exception { + String keyFilename = + System.getProperty("test.src", ".") + "/" + pathToStores + + "/" + keyStoreFile; + String trustFilename = + System.getProperty("test.src", ".") + "/" + pathToStores + + "/" + trustStoreFile; + + System.setProperty("javax.net.ssl.keyStore", keyFilename); + System.setProperty("javax.net.ssl.keyStorePassword", passwd); + System.setProperty("javax.net.ssl.trustStore", trustFilename); + System.setProperty("javax.net.ssl.trustStorePassword", passwd); + + if (debug) + System.setProperty("javax.net.debug", "all"); + + /* + * Start the tests. + */ + new SSLSocketExplorerWithCliSNI(); + } + + Thread clientThread = null; + Thread serverThread = null; + + /* + * Primary constructor, used to drive remainder of the test. + * + * Fork off the other side, then do your work. + */ + SSLSocketExplorerWithCliSNI() throws Exception { + try { + if (separateServerThread) { + startServer(true); + startClient(false); + } else { + startClient(true); + startServer(false); + } + } catch (Exception e) { + // swallow for now. Show later + } + + /* + * Wait for other side to close down. + */ + if (separateServerThread) { + serverThread.join(); + } else { + clientThread.join(); + } + + /* + * When we get here, the test is pretty much over. + * Which side threw the error? + */ + Exception local; + Exception remote; + String whichRemote; + + if (separateServerThread) { + remote = serverException; + local = clientException; + whichRemote = "server"; + } else { + remote = clientException; + local = serverException; + whichRemote = "client"; + } + + /* + * If both failed, return the curthread's exception, but also + * print the remote side Exception + */ + if ((local != null) && (remote != null)) { + System.out.println(whichRemote + " also threw:"); + remote.printStackTrace(); + System.out.println(); + throw local; + } + + if (remote != null) { + throw remote; + } + + if (local != null) { + throw local; + } + } + + void startServer(boolean newThread) throws Exception { + if (newThread) { + serverThread = new Thread() { + public void run() { + try { + doServerSide(); + } catch (Exception e) { + /* + * Our server thread just died. + * + * Release the client, if not active already... + */ + System.err.println("Server died..."); + serverReady = true; + serverException = e; + } + } + }; + serverThread.start(); + } else { + try { + doServerSide(); + } catch (Exception e) { + serverException = e; + } finally { + serverReady = true; + } + } + } + + void startClient(boolean newThread) throws Exception { + if (newThread) { + clientThread = new Thread() { + public void run() { + try { + doClientSide(); + } catch (Exception e) { + /* + * Our client thread just died. + */ + System.err.println("Client died..."); + clientException = e; + } + } + }; + clientThread.start(); + } else { + try { + doClientSide(); + } catch (Exception e) { + clientException = e; + } + } + } +} diff --git a/jdk/test/sun/security/ssl/javax/net/ssl/ServerName/SSLSocketExplorerWithSrvSNI.java b/jdk/test/sun/security/ssl/javax/net/ssl/ServerName/SSLSocketExplorerWithSrvSNI.java new file mode 100644 index 00000000000..64b1ae9a63b --- /dev/null +++ b/jdk/test/sun/security/ssl/javax/net/ssl/ServerName/SSLSocketExplorerWithSrvSNI.java @@ -0,0 +1,390 @@ +/* + * Copyright (c) 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. + */ + +// +// SunJSSE does not support dynamic system properties, no way to re-use +// system properties in samevm/agentvm mode. +// + +/** + * @test + * @bug 7068321 + * @summary Support TLS Server Name Indication (SNI) Extension in JSSE Server + * @library ../../../../templates + * @build SSLCapabilities SSLExplorer + * @run main/othervm SSLSocketExplorerWithSrvSNI + */ + +import java.io.*; +import java.nio.*; +import java.nio.channels.*; +import java.util.*; +import java.net.*; +import javax.net.ssl.*; + +public class SSLSocketExplorerWithSrvSNI { + + /* + * ============================================================= + * Set the various variables needed for the tests, then + * specify what tests to run on each side. + */ + + /* + * Should we run the client or server in a separate thread? + * Both sides can throw exceptions, but do you have a preference + * as to which side should be the main thread. + */ + static boolean separateServerThread = true; + + /* + * Where do we find the keystores? + */ + static String pathToStores = "../../../../etc"; + static String keyStoreFile = "keystore"; + static String trustStoreFile = "truststore"; + static String passwd = "passphrase"; + + /* + * Is the server ready to serve? + */ + volatile static boolean serverReady = false; + + /* + * Turn on SSL debugging? + */ + static boolean debug = false; + + /* + * If the client or server is doing some kind of object creation + * that the other side depends on, and that thread prematurely + * exits, you may experience a hang. The test harness will + * terminate all hung threads after its timeout has expired, + * currently 3 minutes by default, but you might try to be + * smart about it.... + */ + + /* + * Define the server side of the test. + * + * If the server prematurely exits, serverReady will be set to true + * to avoid infinite hangs. + */ + void doServerSide() throws Exception { + + ServerSocket serverSocket = new ServerSocket(serverPort); + + // Signal Client, we're ready for his connect. + serverPort = serverSocket.getLocalPort(); + serverReady = true; + + Socket socket = serverSocket.accept(); + InputStream ins = socket.getInputStream(); + + byte[] buffer = new byte[0xFF]; + int position = 0; + SSLCapabilities capabilities = null; + + // Read the header of TLS record + while (position < SSLExplorer.RECORD_HEADER_SIZE) { + int count = SSLExplorer.RECORD_HEADER_SIZE - position; + int n = ins.read(buffer, position, count); + if (n < 0) { + throw new Exception("unexpected end of stream!"); + } + position += n; + } + + int recordLength = SSLExplorer.getRequiredSize(buffer, 0, position); + if (buffer.length < recordLength) { + buffer = Arrays.copyOf(buffer, recordLength); + } + + while (position < recordLength) { + int count = recordLength - position; + int n = ins.read(buffer, position, count); + if (n < 0) { + throw new Exception("unexpected end of stream!"); + } + position += n; + } + + capabilities = SSLExplorer.explore(buffer, 0, recordLength);; + if (capabilities != null) { + System.out.println("Record version: " + + capabilities.getRecordVersion()); + System.out.println("Hello version: " + + capabilities.getHelloVersion()); + } + + SSLSocketFactory sslsf = + (SSLSocketFactory) SSLSocketFactory.getDefault(); + ByteArrayInputStream bais = + new ByteArrayInputStream(buffer, 0, position); + SSLSocket sslSocket = (SSLSocket)sslsf.createSocket(socket, bais, true); + + SNIMatcher matcher = SNIHostName.createSNIMatcher( + serverAcceptableHostname); + Collection matchers = new ArrayList<>(1); + matchers.add(matcher); + SSLParameters params = sslSocket.getSSLParameters(); + params.setSNIMatchers(matchers); + sslSocket.setSSLParameters(params); + + InputStream sslIS = sslSocket.getInputStream(); + OutputStream sslOS = sslSocket.getOutputStream(); + + sslIS.read(); + sslOS.write(85); + sslOS.flush(); + + ExtendedSSLSession session = (ExtendedSSLSession)sslSocket.getSession(); + checkCapabilities(capabilities, session); + + sslSocket.close(); + serverSocket.close(); + } + + + /* + * Define the client side of the test. + * + * If the server prematurely exits, serverReady will be set to true + * to avoid infinite hangs. + */ + void doClientSide() throws Exception { + + /* + * Wait for server to get started. + */ + while (!serverReady) { + Thread.sleep(50); + } + + SSLSocketFactory sslsf = + (SSLSocketFactory) SSLSocketFactory.getDefault(); + SSLSocket sslSocket = (SSLSocket) + sslsf.createSocket("localhost", serverPort); + + InputStream sslIS = sslSocket.getInputStream(); + OutputStream sslOS = sslSocket.getOutputStream(); + + sslOS.write(280); + sslOS.flush(); + sslIS.read(); + + ExtendedSSLSession session = (ExtendedSSLSession)sslSocket.getSession(); + checkSNIInSession(session); + + sslSocket.close(); + } + + private static String clientRequestedHostname = "www.example.com"; + private static String serverAcceptableHostname = + "www\\.example\\.(com|org)"; + + void checkCapabilities(SSLCapabilities capabilities, + ExtendedSSLSession session) throws Exception { + + List sessionSNI = session.getRequestedServerNames(); + if (!sessionSNI.equals(capabilities.getServerNames())) { + for (SNIServerName sni : sessionSNI) { + System.out.println("SNI in session is " + sni); + } + + List capaSNI = capabilities.getServerNames(); + for (SNIServerName sni : capaSNI) { + System.out.println("SNI in session is " + sni); + } + + throw new Exception( + "server name indication does not match capabilities"); + } + + checkSNIInSession(session); + } + + void checkSNIInSession(ExtendedSSLSession session) throws Exception { + List sessionSNI = session.getRequestedServerNames(); + if (!sessionSNI.isEmpty()) { + throw new Exception( + "should be empty request server name indication"); + } + } + + /* + * ============================================================= + * The remainder is just support stuff + */ + + // use any free port by default + volatile int serverPort = 0; + + volatile Exception serverException = null; + volatile Exception clientException = null; + + public static void main(String[] args) throws Exception { + String keyFilename = + System.getProperty("test.src", ".") + "/" + pathToStores + + "/" + keyStoreFile; + String trustFilename = + System.getProperty("test.src", ".") + "/" + pathToStores + + "/" + trustStoreFile; + + System.setProperty("javax.net.ssl.keyStore", keyFilename); + System.setProperty("javax.net.ssl.keyStorePassword", passwd); + System.setProperty("javax.net.ssl.trustStore", trustFilename); + System.setProperty("javax.net.ssl.trustStorePassword", passwd); + + if (debug) + System.setProperty("javax.net.debug", "all"); + + /* + * Start the tests. + */ + new SSLSocketExplorerWithSrvSNI(); + } + + Thread clientThread = null; + Thread serverThread = null; + + /* + * Primary constructor, used to drive remainder of the test. + * + * Fork off the other side, then do your work. + */ + SSLSocketExplorerWithSrvSNI() throws Exception { + try { + if (separateServerThread) { + startServer(true); + startClient(false); + } else { + startClient(true); + startServer(false); + } + } catch (Exception e) { + // swallow for now. Show later + } + + /* + * Wait for other side to close down. + */ + if (separateServerThread) { + serverThread.join(); + } else { + clientThread.join(); + } + + /* + * When we get here, the test is pretty much over. + * Which side threw the error? + */ + Exception local; + Exception remote; + String whichRemote; + + if (separateServerThread) { + remote = serverException; + local = clientException; + whichRemote = "server"; + } else { + remote = clientException; + local = serverException; + whichRemote = "client"; + } + + /* + * If both failed, return the curthread's exception, but also + * print the remote side Exception + */ + if ((local != null) && (remote != null)) { + System.out.println(whichRemote + " also threw:"); + remote.printStackTrace(); + System.out.println(); + throw local; + } + + if (remote != null) { + throw remote; + } + + if (local != null) { + throw local; + } + } + + void startServer(boolean newThread) throws Exception { + if (newThread) { + serverThread = new Thread() { + public void run() { + try { + doServerSide(); + } catch (Exception e) { + /* + * Our server thread just died. + * + * Release the client, if not active already... + */ + System.err.println("Server died..."); + serverReady = true; + serverException = e; + } + } + }; + serverThread.start(); + } else { + try { + doServerSide(); + } catch (Exception e) { + serverException = e; + } finally { + serverReady = true; + } + } + } + + void startClient(boolean newThread) throws Exception { + if (newThread) { + clientThread = new Thread() { + public void run() { + try { + doClientSide(); + } catch (Exception e) { + /* + * Our client thread just died. + */ + System.err.println("Client died..."); + clientException = e; + } + } + }; + clientThread.start(); + } else { + try { + doClientSide(); + } catch (Exception e) { + clientException = e; + } + } + } +} diff --git a/jdk/test/sun/security/ssl/javax/net/ssl/ServerName/SSLSocketInconsistentSNI.java b/jdk/test/sun/security/ssl/javax/net/ssl/ServerName/SSLSocketInconsistentSNI.java new file mode 100644 index 00000000000..6ba1dfd9c21 --- /dev/null +++ b/jdk/test/sun/security/ssl/javax/net/ssl/ServerName/SSLSocketInconsistentSNI.java @@ -0,0 +1,340 @@ +/* + * Copyright (c) 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. + */ + +// +// SunJSSE does not support dynamic system properties, no way to re-use +// system properties in samevm/agentvm mode. +// + +/** + * @test + * @bug 7068321 + * @summary Support TLS Server Name Indication (SNI) Extension in JSSE Server + * @run main/othervm SSLSocketInconsistentSNI + */ + +import java.io.*; +import java.nio.*; +import java.nio.channels.*; +import java.util.*; +import java.net.*; +import javax.net.ssl.*; + +public class SSLSocketInconsistentSNI { + + /* + * ============================================================= + * Set the various variables needed for the tests, then + * specify what tests to run on each side. + */ + + /* + * Should we run the client or server in a separate thread? + * Both sides can throw exceptions, but do you have a preference + * as to which side should be the main thread. + */ + static boolean separateServerThread = true; + + /* + * Where do we find the keystores? + */ + static String pathToStores = "../../../../etc"; + static String keyStoreFile = "keystore"; + static String trustStoreFile = "truststore"; + static String passwd = "passphrase"; + + /* + * Is the server ready to serve? + */ + volatile static boolean serverReady = false; + + /* + * Turn on SSL debugging? + */ + static boolean debug = false; + + /* + * If the client or server is doing some kind of object creation + * that the other side depends on, and that thread prematurely + * exits, you may experience a hang. The test harness will + * terminate all hung threads after its timeout has expired, + * currently 3 minutes by default, but you might try to be + * smart about it.... + */ + + /* + * Define the server side of the test. + * + * If the server prematurely exits, serverReady will be set to true + * to avoid infinite hangs. + */ + void doServerSide() throws Exception { + SSLServerSocketFactory sslssf = + (SSLServerSocketFactory) SSLServerSocketFactory.getDefault(); + SSLServerSocket sslServerSocket = + (SSLServerSocket) sslssf.createServerSocket(serverPort); + + SNIMatcher matcher = SNIHostName.createSNIMatcher( + serverAcceptableHostname); + Collection matchers = new ArrayList<>(1); + matchers.add(matcher); + SSLParameters params = sslServerSocket.getSSLParameters(); + params.setSNIMatchers(matchers); + sslServerSocket.setSSLParameters(params); + + serverPort = sslServerSocket.getLocalPort(); + + /* + * Signal Client, we're ready for his connect. + */ + serverReady = true; + + SSLSocket sslSocket = (SSLSocket) sslServerSocket.accept(); + try { + InputStream sslIS = sslSocket.getInputStream(); + OutputStream sslOS = sslSocket.getOutputStream(); + + sslIS.read(); + sslOS.write(85); + sslOS.flush(); + + throw new Exception( + "Mismatched server name indication was accepted"); + } catch (SSLHandshakeException sslhe) { + // the expected unrecognized server name indication exception + } catch (IOException ioe) { + // the peer may have closed the socket because of the unmatched + // server name indication. + } finally { + sslSocket.close(); + sslServerSocket.close(); + } + } + + + /* + * Define the client side of the test. + * + * If the server prematurely exits, serverReady will be set to true + * to avoid infinite hangs. + */ + void doClientSide() throws Exception { + + /* + * Wait for server to get started. + */ + while (!serverReady) { + Thread.sleep(50); + } + + SSLSocketFactory sslsf = + (SSLSocketFactory) SSLSocketFactory.getDefault(); + SSLSocket sslSocket = (SSLSocket) + sslsf.createSocket("localhost", serverPort); + + SNIHostName serverName = new SNIHostName(clientRequestedHostname); + List serverNames = new ArrayList<>(1); + serverNames.add(serverName); + SSLParameters params = sslSocket.getSSLParameters(); + params.setServerNames(serverNames); + sslSocket.setSSLParameters(params); + + try { + InputStream sslIS = sslSocket.getInputStream(); + OutputStream sslOS = sslSocket.getOutputStream(); + + sslOS.write(280); + sslOS.flush(); + sslIS.read(); + + throw new Exception( + "Mismatched server name indication was accepted"); + } catch (SSLHandshakeException sslhe) { + // the expected unrecognized server name indication exception + } catch (IOException ioe) { + // the peer may have closed the socket because of the unmatched + // server name indication. + } finally { + sslSocket.close(); + } + } + + private static String clientRequestedHostname = "www.example.com"; + private static String serverAcceptableHostname = "www\\.example\\.org"; + + /* + * ============================================================= + * The remainder is just support stuff + */ + + // use any free port by default + volatile int serverPort = 0; + + volatile Exception serverException = null; + volatile Exception clientException = null; + + public static void main(String[] args) throws Exception { + String keyFilename = + System.getProperty("test.src", ".") + "/" + pathToStores + + "/" + keyStoreFile; + String trustFilename = + System.getProperty("test.src", ".") + "/" + pathToStores + + "/" + trustStoreFile; + + System.setProperty("javax.net.ssl.keyStore", keyFilename); + System.setProperty("javax.net.ssl.keyStorePassword", passwd); + System.setProperty("javax.net.ssl.trustStore", trustFilename); + System.setProperty("javax.net.ssl.trustStorePassword", passwd); + + if (debug) + System.setProperty("javax.net.debug", "all"); + + /* + * Start the tests. + */ + new SSLSocketInconsistentSNI(); + } + + Thread clientThread = null; + Thread serverThread = null; + + /* + * Primary constructor, used to drive remainder of the test. + * + * Fork off the other side, then do your work. + */ + SSLSocketInconsistentSNI() throws Exception { + try { + if (separateServerThread) { + startServer(true); + startClient(false); + } else { + startClient(true); + startServer(false); + } + } catch (Exception e) { + // swallow for now. Show later + } + + /* + * Wait for other side to close down. + */ + if (separateServerThread) { + serverThread.join(); + } else { + clientThread.join(); + } + + /* + * When we get here, the test is pretty much over. + * Which side threw the error? + */ + Exception local; + Exception remote; + String whichRemote; + + if (separateServerThread) { + remote = serverException; + local = clientException; + whichRemote = "server"; + } else { + remote = clientException; + local = serverException; + whichRemote = "client"; + } + + /* + * If both failed, return the curthread's exception, but also + * print the remote side Exception + */ + if ((local != null) && (remote != null)) { + System.out.println(whichRemote + " also threw:"); + remote.printStackTrace(); + System.out.println(); + throw local; + } + + if (remote != null) { + throw remote; + } + + if (local != null) { + throw local; + } + } + + void startServer(boolean newThread) throws Exception { + if (newThread) { + serverThread = new Thread() { + public void run() { + try { + doServerSide(); + } catch (Exception e) { + /* + * Our server thread just died. + * + * Release the client, if not active already... + */ + System.err.println("Server died..."); + serverReady = true; + serverException = e; + } + } + }; + serverThread.start(); + } else { + try { + doServerSide(); + } catch (Exception e) { + serverException = e; + } finally { + serverReady = true; + } + } + } + + void startClient(boolean newThread) throws Exception { + if (newThread) { + clientThread = new Thread() { + public void run() { + try { + doClientSide(); + } catch (Exception e) { + /* + * Our client thread just died. + */ + System.err.println("Client died..."); + clientException = e; + } + } + }; + clientThread.start(); + } else { + try { + doClientSide(); + } catch (Exception e) { + clientException = e; + } + } + } +} diff --git a/jdk/test/sun/security/ssl/javax/net/ssl/ServerName/SSLSocketSNISensitive.java b/jdk/test/sun/security/ssl/javax/net/ssl/ServerName/SSLSocketSNISensitive.java new file mode 100644 index 00000000000..03a841bfd85 --- /dev/null +++ b/jdk/test/sun/security/ssl/javax/net/ssl/ServerName/SSLSocketSNISensitive.java @@ -0,0 +1,570 @@ +/* + * Copyright (c) 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. 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. + */ + +// +// SunJSSE does not support dynamic system properties, no way to re-use +// system properties in samevm/agentvm mode. +// + +/* + * @test + * @bug 7068321 + * @summary Support TLS Server Name Indication (SNI) Extension in JSSE Server + * @run main/othervm SSLSocketSNISensitive PKIX www.example.com + * @run main/othervm SSLSocketSNISensitive SunX509 www.example.com + * @run main/othervm SSLSocketSNISensitive PKIX www.example.net + * @run main/othervm SSLSocketSNISensitive SunX509 www.example.net + * @run main/othervm SSLSocketSNISensitive PKIX www.invalid.com + * @run main/othervm SSLSocketSNISensitive SunX509 www.invalid.com + */ + +import java.net.*; +import java.util.*; +import java.io.*; +import javax.net.ssl.*; +import java.security.KeyStore; +import java.security.KeyFactory; +import java.security.cert.Certificate; +import java.security.cert.X509Certificate; +import java.security.cert.CertificateFactory; +import java.security.spec.*; +import java.security.interfaces.*; +import sun.misc.BASE64Decoder; + + +public class SSLSocketSNISensitive { + + /* + * ============================================================= + * Set the various variables needed for the tests, then + * specify what tests to run on each side. + */ + + /* + * Should we run the client or server in a separate thread? + * Both sides can throw exceptions, but do you have a preference + * as to which side should be the main thread. + */ + static boolean separateServerThread = false; + + /* + * Where do we find the keystores? + */ + // Certificates and key used in the test. + static String trustedCertStr = + "-----BEGIN CERTIFICATE-----\n" + + "MIICkjCCAfugAwIBAgIBADANBgkqhkiG9w0BAQQFADA7MQswCQYDVQQGEwJVUzEN\n" + + "MAsGA1UEChMESmF2YTEdMBsGA1UECxMUU3VuSlNTRSBUZXN0IFNlcml2Y2UwHhcN\n" + + "MTIwNDE3MTIwNjA3WhcNMzMwMzI4MTIwNjA3WjA7MQswCQYDVQQGEwJVUzENMAsG\n" + + "A1UEChMESmF2YTEdMBsGA1UECxMUU3VuSlNTRSBUZXN0IFNlcml2Y2UwgZ8wDQYJ\n" + + "KoZIhvcNAQEBBQADgY0AMIGJAoGBANY+7Enp+1S566kLcKk+qe4Ki6BxaHGZ+v7r\n" + + "vLksx9IQZCbAEf4YLbrZhKzKD3SPIJXyxPFwknAknIh3Knk8mViOZks7T8L3GnJr\n" + + "TBaVvDyTzDJum/QYiahfO2qpfN/Oya2UILmqsBAeLyWpzbQsAyWBXfoUtkOUgnzK\n" + + "fk6QAKYrAgMBAAGjgaUwgaIwHQYDVR0OBBYEFEtmQi7jT1ijXOafPsfkrLwSVu9e\n" + + "MGMGA1UdIwRcMFqAFEtmQi7jT1ijXOafPsfkrLwSVu9eoT+kPTA7MQswCQYDVQQG\n" + + "EwJVUzENMAsGA1UEChMESmF2YTEdMBsGA1UECxMUU3VuSlNTRSBUZXN0IFNlcml2\n" + + "Y2WCAQAwDwYDVR0TAQH/BAUwAwEB/zALBgNVHQ8EBAMCAQYwDQYJKoZIhvcNAQEE\n" + + "BQADgYEAkKWxMc4+ODk5WwLXXweB8/IKfVfrizNn0KLEgsZ6xNXFIXDpiPGAFcgl\n" + + "MzFO424JgyvUulsUc/X16Cnuwwntkk6KUG7vEV7h4o9sAV7Cax3gfQE/EZFb4ybn\n" + + "aBm1UsujMKd/ovqbbbxJbmOWzCeo0QfIGleDEyh3NBBZ0i11Kiw=\n" + + "-----END CERTIFICATE-----"; + + // web server certificate, www.example.com + static String targetCertStr_A = + "-----BEGIN CERTIFICATE-----\n" + + "MIICVTCCAb6gAwIBAgIBAjANBgkqhkiG9w0BAQQFADA7MQswCQYDVQQGEwJVUzEN\n" + + "MAsGA1UEChMESmF2YTEdMBsGA1UECxMUU3VuSlNTRSBUZXN0IFNlcml2Y2UwHhcN\n" + + "MTIwNDE3MTIwNjA4WhcNMzIwMTAzMTIwNjA4WjBVMQswCQYDVQQGEwJVUzENMAsG\n" + + "A1UEChMESmF2YTEdMBsGA1UECxMUU3VuSlNTRSBUZXN0IFNlcml2Y2UxGDAWBgNV\n" + + "BAMTD3d3dy5leGFtcGxlLmNvbTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA\n" + + "4zFp3PZNzsd3ZwG6FNNWO9eSN+UBymlf8oCwpKJM2tIinmMWvWIXnlx/2UXIfSAq\n" + + "QEG3aXkAFyEiGGpQlBbqcfrESsHsiz2pnnm5dG2v/eS0Bwz1jmcuNmwnh3UQw2Vl\n" + + "+BLk8ukdrLjiCT8jARiHExYf1Xg+wUqQ9y8NV26hdaUCAwEAAaNPME0wCwYDVR0P\n" + + "BAQDAgPoMB0GA1UdDgQWBBQwtx+gqzn2w4y82brXlp7tqBYEZDAfBgNVHSMEGDAW\n" + + "gBRLZkIu409Yo1zmnz7H5Ky8ElbvXjANBgkqhkiG9w0BAQQFAAOBgQAJWo8B6Ud+\n" + + "/OU+UcZLihlfMX02OSlK2ZB7mfqpj2G3JT9yb0A+VbY3uuajmaYYIIxl3kXGz/n8\n" + + "M2Q/Ux/MDxG+IFKHC26Kuj4dAQgzjq2pILVPTE2QnaQTNCsgVZtTaC47SG9FRSoC\n" + + "qvnIvn/oTpKSqus76I1cR4joDtiV2OEuVw==\n" + + "-----END CERTIFICATE-----"; + + // Private key in the format of PKCS#8 + static String targetPrivateKey_A = + "MIICdgIBADANBgkqhkiG9w0BAQEFAASCAmAwggJcAgEAAoGBAOMxadz2Tc7Hd2cB\n" + + "uhTTVjvXkjflAcppX/KAsKSiTNrSIp5jFr1iF55cf9lFyH0gKkBBt2l5ABchIhhq\n" + + "UJQW6nH6xErB7Is9qZ55uXRtr/3ktAcM9Y5nLjZsJ4d1EMNlZfgS5PLpHay44gk/\n" + + "IwEYhxMWH9V4PsFKkPcvDVduoXWlAgMBAAECgYAqX2nuIyXp3fvgA0twXOYlbRRB\n" + + "Rn3qAXM6qFPJsNeCrFR2k+aG1cev6nKR1FkLNTeMGnWZv06MAcr5IML8i7WXyG4C\n" + + "LY/C0gedn94FDKFlln+bTENwQTGjn4lKysDA+IuNpasTeMCajbic+dPByhIdTOjZ\n" + + "iMCyxbLfpk40zQopVQJBAPyfGmkeHB3GjdbdgujWCGKb2UxBa4O8dy3O4l2yizTn\n" + + "uUqMGcwGY4ciNSVvZQ7jKo4vDmkSuYib4/woPChaNfMCQQDmO0BQuSWYGNtSwV35\n" + + "lafZfX1dNCLKm1iNA6A12evXgvQiE9WT4mqionig0VZW16HtiY4/BkHOcos/K9Um\n" + + "ARQHAkA8mkaRtSF1my5nv1gqVz5Hua+VdZQ/VDUbDiiL5cszc+ulkJqXsWirAG/T\n" + + "fTe3LJQG7A7+8fkEZrF4yoY0AAA1AkEAotokezULj5N9iAL5SzL9wIzQYV4ggfny\n" + + "YATBjXXxKccakwQ+ndWZIiMUeoS4ssLialhTgucVI0fIkU2a/r/ifwJAc6e+5Pvh\n" + + "MghQj/U788Od/v6rgqz/NGsduZ7uilCMcWiwA73OR2MHMH/OIuoofuEPrfuV9isV\n" + + "xVXhgpKfP/pdOA=="; + + // web server certificate, www.example.net + static String targetCertStr_B = + "-----BEGIN CERTIFICATE-----\n" + + "MIICVTCCAb6gAwIBAgIBBDANBgkqhkiG9w0BAQQFADA7MQswCQYDVQQGEwJVUzEN\n" + + "MAsGA1UEChMESmF2YTEdMBsGA1UECxMUU3VuSlNTRSBUZXN0IFNlcml2Y2UwHhcN\n" + + "MTIwNDE3MTIwNjA5WhcNMzIwMTAzMTIwNjA5WjBVMQswCQYDVQQGEwJVUzENMAsG\n" + + "A1UEChMESmF2YTEdMBsGA1UECxMUU3VuSlNTRSBUZXN0IFNlcml2Y2UxGDAWBgNV\n" + + "BAMTD3d3dy5leGFtcGxlLm5ldDCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA\n" + + "2VlzF1fvWYczDChrUeJiLJ1M/dIShCaOTfYGiXfQGEZCAWTacUclwr+rVMnZ75/c\n" + + "wwg5pNdXRijxMil8DBTS1gFcIFQhosLHvzIAe6ULlg/xB+/L6KBz+NTWfo/2KF6t\n" + + "xatmcToNrCcwi7eUOfbzQje65Tizs56jJYem2m7Rk0ECAwEAAaNPME0wCwYDVR0P\n" + + "BAQDAgPoMB0GA1UdDgQWBBQT/FR0cAWcZQ7h0X79KGki34OSQjAfBgNVHSMEGDAW\n" + + "gBRLZkIu409Yo1zmnz7H5Ky8ElbvXjANBgkqhkiG9w0BAQQFAAOBgQB67cPIT6fz\n" + + "6Ws8fBpYgW2ad4ci66i1WduBD9CpGFE+jRK2feRj6hvYBXocKj0AMWUFIEB2E3hA\n" + + "oIjxcf1GxIpHVl9DjlhxqXbA0Ktl7/NGNRlDSLTizOTl3FB1mMTlOGvXDVmpcFhl\n" + + "HuoP1hYvhTsBwPx5igGNchuPtDIUzL2mXw==\n" + + "-----END CERTIFICATE-----"; + + static String targetPrivateKey_B = + "MIICdgIBADANBgkqhkiG9w0BAQEFAASCAmAwggJcAgEAAoGBANlZcxdX71mHMwwo\n" + + "a1HiYiydTP3SEoQmjk32Bol30BhGQgFk2nFHJcK/q1TJ2e+f3MMIOaTXV0Yo8TIp\n" + + "fAwU0tYBXCBUIaLCx78yAHulC5YP8Qfvy+igc/jU1n6P9ihercWrZnE6DawnMIu3\n" + + "lDn280I3uuU4s7OeoyWHptpu0ZNBAgMBAAECgYEAl19H26sfhD+32rDPxZCgBShs\n" + + "dZ33zVe45i0Bcn4iTLWpxKTDyf7eGps4rO2DvfKdYqt40ggzvSZIjUH9JcDe8GmG\n" + + "d3m0ILB7pg4jsFlpyeHpTO8grPLxA1G9s3o0DoFpz/rooqgFfe/DrRDmRoOSkgfV\n" + + "/gseIbgJHRO/Ctyvdh0CQQD6uFd0HxhH1jl/JzvPzIH4LSnPcdEh9zsMEb6uzh75\n" + + "9qL+IHD5N2I/pYZTKqDFIwhJf701+LKag55AX/zrDt7rAkEA3e00AbnwanDMa6Wj\n" + + "+gFekUQveSVra38LiihzCkyVvQpFjbiF1rUhSNQ0dpU5/hmrYF0C6H9VXAesfkUY\n" + + "WhpDgwJAYjgZOop77piDycZK7isFt32p5XSHIzFBVocVFlH1XKM8UyXOXDNQL/Le\n" + + "XnJSrSf+NRzvuNcG0PVC56Ey6brXpQJAY4M4vcltt5zq3R5CQBmbGRJ1IyKXX3Vx\n" + + "bDslEqoyvri7ZYgnY5aG3UxiVgYmIf3KrgQnCLAIS6MZQumiuMxsFwJAK5pEG063\n" + + "9ngUof4fDMvZphqZjZR1zMKz/V/9ge0DWBINaqFgsgebNu+MyImsC8C6WKjGmV/2\n" + + "f1MY0D7sC2vU/Q=="; + + // web server certificate, www.invalid.com + static String targetCertStr_C = + "-----BEGIN CERTIFICATE-----\n" + + "MIICVTCCAb6gAwIBAgIBAzANBgkqhkiG9w0BAQQFADA7MQswCQYDVQQGEwJVUzEN\n" + + "MAsGA1UEChMESmF2YTEdMBsGA1UECxMUU3VuSlNTRSBUZXN0IFNlcml2Y2UwHhcN\n" + + "MTIwNDE3MTIwNjA5WhcNMzIwMTAzMTIwNjA5WjBVMQswCQYDVQQGEwJVUzENMAsG\n" + + "A1UEChMESmF2YTEdMBsGA1UECxMUU3VuSlNTRSBUZXN0IFNlcml2Y2UxGDAWBgNV\n" + + "BAMTD3d3dy5pbnZhbGlkLmNvbTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA\n" + + "q6MyQwzCr2nJ41l0frmHL0qULSyW51MhevBC+1W28i0LE/efrmpwV3LdnlQEGFak\n" + + "DLDwtnff3iru8dSMcA7KdWVkivsE7ZTP+qFDaWBAy7XXiSsv6yZ2Nh4jJb0YcD28\n" + + "45zk2nAl5Az1/PuoTi1vpQxzFZKuBm1HGgz3MEZvBvMCAwEAAaNPME0wCwYDVR0P\n" + + "BAQDAgPoMB0GA1UdDgQWBBRRMifrND015Nm8N6gV5X7cg1YjjjAfBgNVHSMEGDAW\n" + + "gBRLZkIu409Yo1zmnz7H5Ky8ElbvXjANBgkqhkiG9w0BAQQFAAOBgQBjkUO6Ri/B\n" + + "uDC2gDMIyL5+NTe/1dPPQYM4HhCNa/KQYvU5lzCKO9Vpa+i+nyrUNNXUu8Tkyq4Y\n" + + "A+aGSm6+FT/i9rFwkYUdorBtD3KfQiwTIWrVERXBkWI5iZNaVZhx0TFy4vUpf65d\n" + + "QtwkbHpC66fdKc2EdLXkuY9KkmtZZJJ7YA==\n" + + "-----END CERTIFICATE-----"; + + static String targetPrivateKey_C = + "MIICdwIBADANBgkqhkiG9w0BAQEFAASCAmEwggJdAgEAAoGBAKujMkMMwq9pyeNZ\n" + + "dH65hy9KlC0sludTIXrwQvtVtvItCxP3n65qcFdy3Z5UBBhWpAyw8LZ3394q7vHU\n" + + "jHAOynVlZIr7BO2Uz/qhQ2lgQMu114krL+smdjYeIyW9GHA9vOOc5NpwJeQM9fz7\n" + + "qE4tb6UMcxWSrgZtRxoM9zBGbwbzAgMBAAECgYASJDK40Y12Wvki1Z6xkkyOnBRj\n" + + "XfYpRykfxGtgA2RN3qLwHlk7Zzaul46DIKA6LlYynTUkJDF+Ww1cdDnP0lBlwcmM\n" + + "iD0ck3zYyYBLhQHuVbkK3SYE+ANRhM0icvvqANP2at/U4awQcPNEae/KCiecLNu3\n" + + "CJGqyhPDdrEAqPuJGQJBAN46pQC6l3yrcSYE2s53jSmsm2HVVOFlFXjU6k/RMTxG\n" + + "FfDJtGUAOQ37rPQ06ugr/gjLAmmPp+FXozaBdA32D80CQQDFuGRgv3WYqbglIcRL\n" + + "JRs6xlj9w1F97s/aiUenuwhIPNiUoRbV7mnNuZ/sGF0svOVE7SazRjuFX6UqL9Y9\n" + + "HzG/AkEA170pCI8cl4w8eUNHRB9trGKEKjMXhwVCFh7lJf2ZBcGodSzr8w2HVhrZ\n" + + "Ke7hiemDYffrbJ1oxmv05+o+x3r0lQJBAL6adVm2+FyFMFnLZXmzeb59O4jWY5bt\n" + + "Qz6/HG6bpO5OidMuP99YCHMkQQDOs/PO3Y5GuAoW6IY4n/Y9S2B80+0CQBl1/H9/\n" + + "0n/vrb6vW6Azds49tuS82RFAnOhtwTyBEajs08WF8rZQ3WD2RHJnH0+jjfL0anIp\n" + + "dQBSeNN7s7b6rRk="; + + // This is a certificate for client + static String targetCertStr_D= + "-----BEGIN CERTIFICATE-----\n" + + "MIICVDCCAb2gAwIBAgIBBTANBgkqhkiG9w0BAQQFADA7MQswCQYDVQQGEwJVUzEN\n" + + "MAsGA1UEChMESmF2YTEdMBsGA1UECxMUU3VuSlNTRSBUZXN0IFNlcml2Y2UwHhcN\n" + + "MTIwNDE3MTIwNjEwWhcNMzIwMTAzMTIwNjEwWjBUMQswCQYDVQQGEwJVUzENMAsG\n" + + "A1UEChMESmF2YTEdMBsGA1UECxMUU3VuSlNTRSBUZXN0IFNlcml2Y2UxFzAVBgNV\n" + + "BAMTDkludGVyT3AgVGVzdGVyMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDo\n" + + "Q/KoAIAC2ljFfW2KwjnxTzi4NQJeUuk2seqKpsAY8x4O5dvixzUl6142zmljapqi\n" + + "bJloQVpfB+CEc5/l4h5gzGRVzkuqP1oPzDrpZ5GsvmvuHenV/TzCIgX1cLETzQVt\n" + + "6Rk06okoBPnw3hDJEJiEc1Rv7HCE8p/p+SaiHrskwwIDAQABo08wTTALBgNVHQ8E\n" + + "BAMCA+gwHQYDVR0OBBYEFPr91O33RIGfFSqza2AwQIgE4QswMB8GA1UdIwQYMBaA\n" + + "FEtmQi7jT1ijXOafPsfkrLwSVu9eMA0GCSqGSIb3DQEBBAUAA4GBANIDFYgAhoj3\n" + + "B8u1YpqeoEp2Lt9TwrYBshaIrbmBPCwCGio0JIsoov3n8BCSg5F+8MnOtPl+TjeO\n" + + "0Ug+7guPdCk/wg8YNxLHgSsQlpcNJDjWiErqmUPVrg5BPPQb65qMund6KTmMN0y6\n" + + "4EbSmxRpZO/N0/5oK4umTk0EeXKNekBj\n" + + "-----END CERTIFICATE-----"; + + static String targetPrivateKey_D = + "MIICdQIBADANBgkqhkiG9w0BAQEFAASCAl8wggJbAgEAAoGBAOhD8qgAgALaWMV9\n" + + "bYrCOfFPOLg1Al5S6Tax6oqmwBjzHg7l2+LHNSXrXjbOaWNqmqJsmWhBWl8H4IRz\n" + + "n+XiHmDMZFXOS6o/Wg/MOulnkay+a+4d6dX9PMIiBfVwsRPNBW3pGTTqiSgE+fDe\n" + + "EMkQmIRzVG/scITyn+n5JqIeuyTDAgMBAAECgYBw37yIKp4LRONJLnhSq6sO+0n8\n" + + "Mz6waiiN/Q6XTQwj09pysQAYCGlqwSRrDAqpVsBJWO+Ae+oYLrLMi4hUZnwN75v3\n" + + "pe1nXlrD11RmPLXwBxqFxNSvAs2FgLHZEtwHI7Bn8KybT/8bGkQ8csLceInYtMDD\n" + + "MuTyy2KRk/pj60zIKQJBAPgebQiAH6viFQ88AwHaNvQhlUfwmSC1i6f8LVoeqaHC\n" + + "lnP0LJBwlyDeeEInhHrCR2ibnCB6I/Pig+49XQgabK8CQQDvpJwuGEbsOO+3rkJJ\n" + + "OpOw4toG0QJZdRnT6l8I6BlboQRZSfFh+lGGahvFXkxc4KdUpJ7QPtXU7HHk6Huk\n" + + "8RYtAkA9CW8VGj+wTuuTVdX/jKjcIa7RhbSFwWNbrcOSWdys+Gt+luCnn6rt4QyA\n" + + "aaxDbquWZkFgE+voQR7nap0KM0XtAkAznd0WAJymHM1lXt9gLoHJQ9N6TGKZKiPa\n" + + "BU1a+cMcfV4WbVrUo7oTnZ9Fr73681iXXq3mZOJh7lvJ1llreZIxAkBEnbiTgEf4\n" + + "tvku68jHcRbRPmdS7CBSWNEBaHLOm4pUSTcxVTKKMHw7vmM5/UYUxJ8QNKCYxn6O\n" + + "+vtiBwBawwzN"; + + static String[] serverCerts = {targetCertStr_A, + targetCertStr_B, targetCertStr_C}; + static String[] serverKeys = {targetPrivateKey_A, + targetPrivateKey_B, targetPrivateKey_C}; + static String[] clientCerts = {targetCertStr_D}; + static String[] clientKeys = {targetPrivateKey_D}; + + static char passphrase[] = "passphrase".toCharArray(); + + /* + * Is the server ready to serve? + */ + volatile static boolean serverReady = false; + + /* + * Turn on SSL debugging? + */ + static boolean debug = false; + + /* + * Define the server side of the test. + * + * If the server prematurely exits, serverReady will be set to true + * to avoid infinite hangs. + */ + void doServerSide() throws Exception { + SSLContext context = generateSSLContext(false); + SSLServerSocketFactory sslssf = context.getServerSocketFactory(); + SSLServerSocket sslServerSocket = + (SSLServerSocket)sslssf.createServerSocket(serverPort); + serverPort = sslServerSocket.getLocalPort(); + + /* + * Signal Client, we're ready for his connect. + */ + serverReady = true; + + SSLSocket sslSocket = (SSLSocket)sslServerSocket.accept(); + try { + sslSocket.setSoTimeout(5000); + sslSocket.setSoLinger(true, 5); + + InputStream sslIS = sslSocket.getInputStream(); + OutputStream sslOS = sslSocket.getOutputStream(); + + sslIS.read(); + sslOS.write('A'); + sslOS.flush(); + + SSLSession session = sslSocket.getSession(); + checkCertificate(session.getLocalCertificates(), + clientRequestedHostname); + } finally { + sslSocket.close(); + sslServerSocket.close(); + } + } + + /* + * Define the client side of the test. + * + * If the server prematurely exits, serverReady will be set to true + * to avoid infinite hangs. + */ + void doClientSide() throws Exception { + + /* + * Wait for server to get started. + */ + while (!serverReady) { + Thread.sleep(50); + } + + SSLContext context = generateSSLContext(true); + SSLSocketFactory sslsf = context.getSocketFactory(); + + SSLSocket sslSocket = + (SSLSocket)sslsf.createSocket("localhost", serverPort); + + SNIHostName serverName = new SNIHostName(clientRequestedHostname); + List serverNames = new ArrayList<>(1); + serverNames.add(serverName); + SSLParameters params = sslSocket.getSSLParameters(); + params.setServerNames(serverNames); + sslSocket.setSSLParameters(params); + + try { + sslSocket.setSoTimeout(5000); + sslSocket.setSoLinger(true, 5); + + InputStream sslIS = sslSocket.getInputStream(); + OutputStream sslOS = sslSocket.getOutputStream(); + + sslOS.write('B'); + sslOS.flush(); + sslIS.read(); + + SSLSession session = sslSocket.getSession(); + checkCertificate(session.getPeerCertificates(), + clientRequestedHostname); + } finally { + sslSocket.close(); + } + } + + private static void checkCertificate(Certificate[] certs, + String hostname) throws Exception { + if (certs != null && certs.length != 0) { + X509Certificate x509Cert = (X509Certificate)certs[0]; + + String subject = x509Cert.getSubjectX500Principal().getName(); + + if (!subject.contains(hostname)) { + throw new Exception( + "Not the expected certificate: " + subject); + } + } + } + + /* + * ============================================================= + * The remainder is just support stuff + */ + private static String tmAlgorithm; // trust manager + private static String clientRequestedHostname; // server name indication + + private static void parseArguments(String[] args) { + tmAlgorithm = args[0]; + clientRequestedHostname = args[1]; + } + + private static SSLContext generateSSLContext(boolean isClient) + throws Exception { + + // generate certificate from cert string + CertificateFactory cf = CertificateFactory.getInstance("X.509"); + + // create a key store + KeyStore ks = KeyStore.getInstance("JKS"); + ks.load(null, null); + + // import the trused cert + ByteArrayInputStream is = + new ByteArrayInputStream(trustedCertStr.getBytes()); + Certificate trusedCert = cf.generateCertificate(is); + is.close(); + + ks.setCertificateEntry("RSA Export Signer", trusedCert); + + String[] certStrs = null; + String[] keyStrs = null; + if (isClient) { + certStrs = clientCerts; + keyStrs = clientKeys; + } else { + certStrs = serverCerts; + keyStrs = serverKeys; + } + + for (int i = 0; i < certStrs.length; i++) { + // generate the private key. + String keySpecStr = keyStrs[i]; + PKCS8EncodedKeySpec priKeySpec = new PKCS8EncodedKeySpec( + new BASE64Decoder().decodeBuffer(keySpecStr)); + KeyFactory kf = KeyFactory.getInstance("RSA"); + RSAPrivateKey priKey = + (RSAPrivateKey)kf.generatePrivate(priKeySpec); + + // generate certificate chain + String keyCertStr = certStrs[i]; + is = new ByteArrayInputStream(keyCertStr.getBytes()); + Certificate keyCert = cf.generateCertificate(is); + is.close(); + + Certificate[] chain = new Certificate[2]; + chain[0] = keyCert; + chain[1] = trusedCert; + + // import the key entry. + ks.setKeyEntry("key-entry-" + i, priKey, passphrase, chain); + } + + // create SSL context + TrustManagerFactory tmf = TrustManagerFactory.getInstance(tmAlgorithm); + tmf.init(ks); + + SSLContext ctx = SSLContext.getInstance("TLS"); + KeyManagerFactory kmf = KeyManagerFactory.getInstance("NewSunX509"); + kmf.init(ks, passphrase); + + ctx.init(kmf.getKeyManagers(), tmf.getTrustManagers(), null); + ks = null; + + return ctx; + } + + // use any free port by default + volatile int serverPort = 0; + + volatile Exception serverException = null; + volatile Exception clientException = null; + + public static void main(String[] args) throws Exception { + if (debug) + System.setProperty("javax.net.debug", "all"); + + /* + * Get the customized arguments. + */ + parseArguments(args); + + /* + * Start the tests. + */ + new SSLSocketSNISensitive(); + } + + Thread clientThread = null; + Thread serverThread = null; + + /* + * Primary constructor, used to drive remainder of the test. + * + * Fork off the other side, then do your work. + */ + SSLSocketSNISensitive() throws Exception { + try { + if (separateServerThread) { + startServer(true); + startClient(false); + } else { + startClient(true); + startServer(false); + } + } catch (Exception e) { + // swallow for now. Show later + } + + /* + * Wait for other side to close down. + */ + if (separateServerThread) { + serverThread.join(); + } else { + clientThread.join(); + } + + /* + * When we get here, the test is pretty much over. + * Which side threw the error? + */ + Exception local; + Exception remote; + String whichRemote; + + if (separateServerThread) { + remote = serverException; + local = clientException; + whichRemote = "server"; + } else { + remote = clientException; + local = serverException; + whichRemote = "client"; + } + + /* + * If both failed, return the curthread's exception, but also + * print the remote side Exception + */ + if ((local != null) && (remote != null)) { + System.out.println(whichRemote + " also threw:"); + remote.printStackTrace(); + System.out.println(); + throw local; + } + + if (remote != null) { + throw remote; + } + + if (local != null) { + throw local; + } + } + + void startServer(boolean newThread) throws Exception { + if (newThread) { + serverThread = new Thread() { + public void run() { + try { + doServerSide(); + } catch (Exception e) { + /* + * Our server thread just died. + * + * Release the client, if not active already... + */ + System.err.println("Server died, because of " + e); + serverReady = true; + serverException = e; + } + } + }; + serverThread.start(); + } else { + try { + doServerSide(); + } catch (Exception e) { + serverException = e; + } finally { + serverReady = true; + } + } + } + + void startClient(boolean newThread) throws Exception { + if (newThread) { + clientThread = new Thread() { + public void run() { + try { + doClientSide(); + } catch (Exception e) { + /* + * Our client thread just died. + */ + System.err.println("Client died, because of " + e); + clientException = e; + } + } + }; + clientThread.start(); + } else { + try { + doClientSide(); + } catch (Exception e) { + clientException = e; + } + } + } +} diff --git a/jdk/test/sun/security/ssl/javax/net/ssl/TLSv11/EmptyCertificateAuthorities.java b/jdk/test/sun/security/ssl/javax/net/ssl/TLSv11/EmptyCertificateAuthorities.java index 01134a096a5..07503cb7c03 100644 --- a/jdk/test/sun/security/ssl/javax/net/ssl/TLSv11/EmptyCertificateAuthorities.java +++ b/jdk/test/sun/security/ssl/javax/net/ssl/TLSv11/EmptyCertificateAuthorities.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2010, 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 diff --git a/jdk/test/sun/security/ssl/javax/net/ssl/TLSv11/ExportableBlockCipher.java b/jdk/test/sun/security/ssl/javax/net/ssl/TLSv11/ExportableBlockCipher.java index c58a6e76e98..ad27a1e468f 100644 --- a/jdk/test/sun/security/ssl/javax/net/ssl/TLSv11/ExportableBlockCipher.java +++ b/jdk/test/sun/security/ssl/javax/net/ssl/TLSv11/ExportableBlockCipher.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2010, 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 diff --git a/jdk/test/sun/security/ssl/javax/net/ssl/TLSv11/ExportableStreamCipher.java b/jdk/test/sun/security/ssl/javax/net/ssl/TLSv11/ExportableStreamCipher.java index c8b19bdf370..3d15a7cf154 100644 --- a/jdk/test/sun/security/ssl/javax/net/ssl/TLSv11/ExportableStreamCipher.java +++ b/jdk/test/sun/security/ssl/javax/net/ssl/TLSv11/ExportableStreamCipher.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2010, 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 diff --git a/jdk/test/sun/security/ssl/javax/net/ssl/TLSv11/GenericBlockCipher.java b/jdk/test/sun/security/ssl/javax/net/ssl/TLSv11/GenericBlockCipher.java index 32e1fdbddd1..9a0a83e26e4 100644 --- a/jdk/test/sun/security/ssl/javax/net/ssl/TLSv11/GenericBlockCipher.java +++ b/jdk/test/sun/security/ssl/javax/net/ssl/TLSv11/GenericBlockCipher.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2010, 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 diff --git a/jdk/test/sun/security/ssl/javax/net/ssl/TLSv11/GenericStreamCipher.java b/jdk/test/sun/security/ssl/javax/net/ssl/TLSv11/GenericStreamCipher.java index 7ec0c49fa44..c96d8ec9cc8 100644 --- a/jdk/test/sun/security/ssl/javax/net/ssl/TLSv11/GenericStreamCipher.java +++ b/jdk/test/sun/security/ssl/javax/net/ssl/TLSv11/GenericStreamCipher.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2010, 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 diff --git a/jdk/test/sun/security/ssl/sanity/pluggability/CheckSSLContextExport.java b/jdk/test/sun/security/ssl/sanity/pluggability/CheckSSLContextExport.java index 3527c062e41..b9c949eaa7d 100644 --- a/jdk/test/sun/security/ssl/sanity/pluggability/CheckSSLContextExport.java +++ b/jdk/test/sun/security/ssl/sanity/pluggability/CheckSSLContextExport.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2002, 2005, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2002, 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 diff --git a/jdk/test/sun/security/ssl/sun/net/www/http/ChunkedOutputStream/Test.java b/jdk/test/sun/security/ssl/sun/net/www/http/ChunkedOutputStream/Test.java index 686411bf155..67fe5c229f7 100644 --- a/jdk/test/sun/security/ssl/sun/net/www/http/ChunkedOutputStream/Test.java +++ b/jdk/test/sun/security/ssl/sun/net/www/http/ChunkedOutputStream/Test.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2004, 2011, Oracle and/or its affiliates. All rights reserved. + * 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 diff --git a/jdk/test/sun/security/ssl/sun/net/www/httpstest/HttpTransaction.java b/jdk/test/sun/security/ssl/sun/net/www/httpstest/HttpTransaction.java index 5389d9f3fa3..ea90c267301 100644 --- a/jdk/test/sun/security/ssl/sun/net/www/httpstest/HttpTransaction.java +++ b/jdk/test/sun/security/ssl/sun/net/www/httpstest/HttpTransaction.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2002, 2004, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2002, 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 diff --git a/jdk/test/sun/security/ssl/sun/net/www/httpstest/TestHttpsServer.java b/jdk/test/sun/security/ssl/sun/net/www/httpstest/TestHttpsServer.java index 21fc8ab29c2..178ec9c7255 100644 --- a/jdk/test/sun/security/ssl/sun/net/www/httpstest/TestHttpsServer.java +++ b/jdk/test/sun/security/ssl/sun/net/www/httpstest/TestHttpsServer.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2002, 2004, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2002, 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 diff --git a/jdk/test/sun/security/ssl/sun/net/www/protocol/https/HttpsURLConnection/DNSIdentities.java b/jdk/test/sun/security/ssl/sun/net/www/protocol/https/HttpsURLConnection/DNSIdentities.java index 68647c5719a..4e740fa4d84 100644 --- a/jdk/test/sun/security/ssl/sun/net/www/protocol/https/HttpsURLConnection/DNSIdentities.java +++ b/jdk/test/sun/security/ssl/sun/net/www/protocol/https/HttpsURLConnection/DNSIdentities.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2010, 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 diff --git a/jdk/test/sun/security/ssl/sun/net/www/protocol/https/HttpsURLConnection/HttpsCreateSockTest.java b/jdk/test/sun/security/ssl/sun/net/www/protocol/https/HttpsURLConnection/HttpsCreateSockTest.java index 051e1bef83b..08d969d0579 100644 --- a/jdk/test/sun/security/ssl/sun/net/www/protocol/https/HttpsURLConnection/HttpsCreateSockTest.java +++ b/jdk/test/sun/security/ssl/sun/net/www/protocol/https/HttpsURLConnection/HttpsCreateSockTest.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2010, 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 diff --git a/jdk/test/sun/security/ssl/sun/net/www/protocol/https/HttpsURLConnection/HttpsSocketFacTest.java b/jdk/test/sun/security/ssl/sun/net/www/protocol/https/HttpsURLConnection/HttpsSocketFacTest.java index a32e77523fc..043f612cf3c 100644 --- a/jdk/test/sun/security/ssl/sun/net/www/protocol/https/HttpsURLConnection/HttpsSocketFacTest.java +++ b/jdk/test/sun/security/ssl/sun/net/www/protocol/https/HttpsURLConnection/HttpsSocketFacTest.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2010, 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 diff --git a/jdk/test/sun/security/ssl/sun/net/www/protocol/https/HttpsURLConnection/PostThruProxy.sh b/jdk/test/sun/security/ssl/sun/net/www/protocol/https/HttpsURLConnection/PostThruProxy.sh index 69bdc6cfb50..7696cbbd6b3 100644 --- a/jdk/test/sun/security/ssl/sun/net/www/protocol/https/HttpsURLConnection/PostThruProxy.sh +++ b/jdk/test/sun/security/ssl/sun/net/www/protocol/https/HttpsURLConnection/PostThruProxy.sh @@ -1,7 +1,7 @@ #!/bin/sh # -# Copyright (c) 2003, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2003, 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 diff --git a/jdk/test/sun/security/ssl/sun/net/www/protocol/https/HttpsURLConnection/PostThruProxyWithAuth.sh b/jdk/test/sun/security/ssl/sun/net/www/protocol/https/HttpsURLConnection/PostThruProxyWithAuth.sh index c7c9882c2ff..9e2ed3c4bf0 100644 --- a/jdk/test/sun/security/ssl/sun/net/www/protocol/https/HttpsURLConnection/PostThruProxyWithAuth.sh +++ b/jdk/test/sun/security/ssl/sun/net/www/protocol/https/HttpsURLConnection/PostThruProxyWithAuth.sh @@ -1,7 +1,7 @@ #!/bin/sh # -# Copyright (c) 2003, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2003, 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 diff --git a/jdk/test/sun/security/ssl/sun/net/www/protocol/https/NewImpl/ComHostnameVerifier.java b/jdk/test/sun/security/ssl/sun/net/www/protocol/https/NewImpl/ComHostnameVerifier.java index f0d7baca05d..ed4cf6836e0 100644 --- a/jdk/test/sun/security/ssl/sun/net/www/protocol/https/NewImpl/ComHostnameVerifier.java +++ b/jdk/test/sun/security/ssl/sun/net/www/protocol/https/NewImpl/ComHostnameVerifier.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2001, 2002, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2001, 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 diff --git a/jdk/test/sun/security/ssl/sun/net/www/protocol/https/NewImpl/JavaxHostnameVerifier.java b/jdk/test/sun/security/ssl/sun/net/www/protocol/https/NewImpl/JavaxHostnameVerifier.java index ac9b80437b7..3337871fbdf 100644 --- a/jdk/test/sun/security/ssl/sun/net/www/protocol/https/NewImpl/JavaxHostnameVerifier.java +++ b/jdk/test/sun/security/ssl/sun/net/www/protocol/https/NewImpl/JavaxHostnameVerifier.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2001, 2002, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2001, 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 diff --git a/jdk/test/sun/security/ssl/templates/SSLCapabilities.java b/jdk/test/sun/security/ssl/templates/SSLCapabilities.java new file mode 100644 index 00000000000..22ea3600054 --- /dev/null +++ b/jdk/test/sun/security/ssl/templates/SSLCapabilities.java @@ -0,0 +1,70 @@ +/* + * Copyright (c) 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. 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. + */ + +import java.util.List; +import javax.net.ssl.SNIServerName; + +/** + * Encapsulates the security capabilities of an SSL/TLS connection. + *

+ * The security capabilities are the list of ciphersuites to be accepted in + * an SSL/TLS handshake, the record version, the hello version, and server + * name indication, etc., of an SSL/TLS connection. + *

+ * SSLCapabilities can be retrieved by exploring the network + * data of an SSL/TLS connection via {@link SSLExplorer#explore(ByteBuffer)} + * or {@link SSLExplorer#explore(byte[], int, int)}. + * + * @see SSLExplorer + */ +public abstract class SSLCapabilities { + + /** + * Returns the record version of an SSL/TLS connection + * + * @return a non-null record version + */ + public abstract String getRecordVersion(); + + /** + * Returns the hello version of an SSL/TLS connection + * + * @return a non-null hello version + */ + public abstract String getHelloVersion(); + + /** + * Returns a List containing all {@link SNIServerName}s + * of the server name indication. + * + * @return a non-null immutable list of {@link SNIServerName}s + * of the server name indication parameter, may be empty + * if no server name indication. + * + * @see SNIServerName + */ + public abstract List getServerNames(); +} + diff --git a/jdk/test/sun/security/ssl/templates/SSLEngineTemplate.java b/jdk/test/sun/security/ssl/templates/SSLEngineTemplate.java index e5056c9d472..22fff98357b 100644 --- a/jdk/test/sun/security/ssl/templates/SSLEngineTemplate.java +++ b/jdk/test/sun/security/ssl/templates/SSLEngineTemplate.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, 2007, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 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 diff --git a/jdk/test/sun/security/ssl/templates/SSLExplorer.java b/jdk/test/sun/security/ssl/templates/SSLExplorer.java new file mode 100644 index 00000000000..9b912c850dd --- /dev/null +++ b/jdk/test/sun/security/ssl/templates/SSLExplorer.java @@ -0,0 +1,615 @@ +/* + * Copyright (c) 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. 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. + */ + +import java.nio.ByteBuffer; +import java.nio.BufferUnderflowException; +import java.io.IOException; +import javax.net.ssl.*; +import java.util.*; + +import sun.misc.HexDumpEncoder; + +/** + * Instances of this class acts as an explorer of the network data of an + * SSL/TLS connection. + */ +public final class SSLExplorer { + + // Private constructor prevents construction outside this class. + private SSLExplorer() { + } + + /** + * The header size of TLS/SSL records. + *

+ * The value of this constant is {@value}. + */ + public final static int RECORD_HEADER_SIZE = 0x05; + + /** + * Returns the required number of bytes in the {@code source} + * {@link ByteBuffer} necessary to explore SSL/TLS connection. + *

+ * This method tries to parse as few bytes as possible from + * {@code source} byte buffer to get the length of an + * SSL/TLS record. + *

+ * This method accesses the {@code source} parameter in read-only + * mode, and does not update the buffer's properties such as capacity, + * limit, position, and mark values. + * + * @param source + * a {@link ByteBuffer} containing + * inbound or outbound network data for an SSL/TLS connection. + * @throws BufferUnderflowException if less than {@code RECORD_HEADER_SIZE} + * bytes remaining in {@code source} + * @return the required size in byte to explore an SSL/TLS connection + */ + public final static int getRequiredSize(ByteBuffer source) { + + ByteBuffer input = source.duplicate(); + + // Do we have a complete header? + if (input.remaining() < RECORD_HEADER_SIZE) { + throw new BufferUnderflowException(); + } + + // Is it a handshake message? + byte firstByte = input.get(); + byte secondByte = input.get(); + byte thirdByte = input.get(); + if ((firstByte & 0x80) != 0 && thirdByte == 0x01) { + // looks like a V2ClientHello + // return (((firstByte & 0x7F) << 8) | (secondByte & 0xFF)) + 2; + return RECORD_HEADER_SIZE; // Only need the header fields + } else { + return (((input.get() & 0xFF) << 8) | (input.get() & 0xFF)) + 5; + } + } + + /** + * Returns the required number of bytes in the {@code source} byte array + * necessary to explore SSL/TLS connection. + *

+ * This method tries to parse as few bytes as possible from + * {@code source} byte array to get the length of an + * SSL/TLS record. + * + * @param source + * a byte array containing inbound or outbound network data for + * an SSL/TLS connection. + * @param offset + * the start offset in array {@code source} at which the + * network data is read from. + * @param length + * the maximum number of bytes to read. + * + * @throws BufferUnderflowException if less than {@code RECORD_HEADER_SIZE} + * bytes remaining in {@code source} + * @return the required size in byte to explore an SSL/TLS connection + */ + public final static int getRequiredSize(byte[] source, + int offset, int length) throws IOException { + + ByteBuffer byteBuffer = + ByteBuffer.wrap(source, offset, length).asReadOnlyBuffer(); + return getRequiredSize(byteBuffer); + } + + /** + * Launch and explore the security capabilities from byte buffer. + *

+ * This method tries to parse as few records as possible from + * {@code source} byte buffer to get the {@link SSLCapabilities} + * of an SSL/TLS connection. + *

+ * Please NOTE that this method must be called before any handshaking + * occurs. The behavior of this method is not defined in this release + * if the handshake has begun, or has completed. + *

+ * This method accesses the {@code source} parameter in read-only + * mode, and does not update the buffer's properties such as capacity, + * limit, position, and mark values. + * + * @param source + * a {@link ByteBuffer} containing + * inbound or outbound network data for an SSL/TLS connection. + * + * @throws IOException on network data error + * @throws BufferUnderflowException if not enough source bytes available + * to make a complete exploration. + * + * @return the explored {@link SSLCapabilities} of the SSL/TLS + * connection + */ + public final static SSLCapabilities explore(ByteBuffer source) + throws IOException { + + ByteBuffer input = source.duplicate(); + + // Do we have a complete header? + if (input.remaining() < RECORD_HEADER_SIZE) { + throw new BufferUnderflowException(); + } + + // Is it a handshake message? + byte firstByte = input.get(); + byte secondByte = input.get(); + byte thirdByte = input.get(); + if ((firstByte & 0x80) != 0 && thirdByte == 0x01) { + // looks like a V2ClientHello + return exploreV2HelloRecord(input, + firstByte, secondByte, thirdByte); + } else if (firstByte == 22) { // 22: handshake record + return exploreTLSRecord(input, + firstByte, secondByte, thirdByte); + } else { + throw new SSLException("Not handshake record"); + } + } + + /** + * Launch and explore the security capabilities from byte array. + *

+ * Please NOTE that this method must be called before any handshaking + * occurs. The behavior of this method is not defined in this release + * if the handshake has begun, or has completed. Once handshake has + * begun, or has completed, the security capabilities can not and + * should not be launched with this method. + * + * @param source + * a byte array containing inbound or outbound network data for + * an SSL/TLS connection. + * @param offset + * the start offset in array {@code source} at which the + * network data is read from. + * @param length + * the maximum number of bytes to read. + * + * @throws IOException on network data error + * @throws BufferUnderflowException if not enough source bytes available + * to make a complete exploration. + * @return the explored {@link SSLCapabilities} of the SSL/TLS + * connection + * + * @see #explore(ByteBuffer) + */ + public final static SSLCapabilities explore(byte[] source, + int offset, int length) throws IOException { + ByteBuffer byteBuffer = + ByteBuffer.wrap(source, offset, length).asReadOnlyBuffer(); + return explore(byteBuffer); + } + + /* + * uint8 V2CipherSpec[3]; + * struct { + * uint16 msg_length; // The highest bit MUST be 1; + * // the remaining bits contain the length + * // of the following data in bytes. + * uint8 msg_type; // MUST be 1 + * Version version; + * uint16 cipher_spec_length; // It cannot be zero and MUST be a + * // multiple of the V2CipherSpec length. + * uint16 session_id_length; // This field MUST be empty. + * uint16 challenge_length; // SHOULD use a 32-byte challenge + * V2CipherSpec cipher_specs[V2ClientHello.cipher_spec_length]; + * opaque session_id[V2ClientHello.session_id_length]; + * opaque challenge[V2ClientHello.challenge_length; + * } V2ClientHello; + */ + private static SSLCapabilities exploreV2HelloRecord( + ByteBuffer input, byte firstByte, byte secondByte, + byte thirdByte) throws IOException { + + // We only need the header. We have already had enough source bytes. + // int recordLength = (firstByte & 0x7F) << 8) | (secondByte & 0xFF); + try { + // Is it a V2ClientHello? + if (thirdByte != 0x01) { + throw new SSLException( + "Unsupported or Unrecognized SSL record"); + } + + // What's the hello version? + byte helloVersionMajor = input.get(); + byte helloVersionMinor = input.get(); + + // 0x00: major version of SSLv20 + // 0x02: minor version of SSLv20 + // + // SNIServerName is an extension, SSLv20 doesn't support extension. + return new SSLCapabilitiesImpl((byte)0x00, (byte)0x02, + helloVersionMajor, helloVersionMinor, + Collections.emptyList()); + } catch (BufferUnderflowException bufe) { + throw new SSLProtocolException( + "Invalid handshake record"); + } + } + + /* + * struct { + * uint8 major; + * uint8 minor; + * } ProtocolVersion; + * + * enum { + * change_cipher_spec(20), alert(21), handshake(22), + * application_data(23), (255) + * } ContentType; + * + * struct { + * ContentType type; + * ProtocolVersion version; + * uint16 length; + * opaque fragment[TLSPlaintext.length]; + * } TLSPlaintext; + */ + private static SSLCapabilities exploreTLSRecord( + ByteBuffer input, byte firstByte, byte secondByte, + byte thirdByte) throws IOException { + + // Is it a handshake message? + if (firstByte != 22) { // 22: handshake record + throw new SSLException("Not handshake record"); + } + + // We need the record version to construct SSLCapabilities. + byte recordMajorVersion = secondByte; + byte recordMinorVersion = thirdByte; + + // Is there enough data for a full record? + int recordLength = getInt16(input); + if (recordLength > input.remaining()) { + throw new BufferUnderflowException(); + } + + // We have already had enough source bytes. + try { + return exploreHandshake(input, + recordMajorVersion, recordMinorVersion, recordLength); + } catch (BufferUnderflowException bufe) { + throw new SSLProtocolException( + "Invalid handshake record"); + } + } + + /* + * enum { + * hello_request(0), client_hello(1), server_hello(2), + * certificate(11), server_key_exchange (12), + * certificate_request(13), server_hello_done(14), + * certificate_verify(15), client_key_exchange(16), + * finished(20) + * (255) + * } HandshakeType; + * + * struct { + * HandshakeType msg_type; + * uint24 length; + * select (HandshakeType) { + * case hello_request: HelloRequest; + * case client_hello: ClientHello; + * case server_hello: ServerHello; + * case certificate: Certificate; + * case server_key_exchange: ServerKeyExchange; + * case certificate_request: CertificateRequest; + * case server_hello_done: ServerHelloDone; + * case certificate_verify: CertificateVerify; + * case client_key_exchange: ClientKeyExchange; + * case finished: Finished; + * } body; + * } Handshake; + */ + private static SSLCapabilities exploreHandshake( + ByteBuffer input, byte recordMajorVersion, + byte recordMinorVersion, int recordLength) throws IOException { + + // What is the handshake type? + byte handshakeType = input.get(); + if (handshakeType != 0x01) { // 0x01: client_hello message + throw new IllegalStateException("Not initial handshaking"); + } + + // What is the handshake body length? + int handshakeLength = getInt24(input); + + // Theoretically, a single handshake message might span multiple + // records, but in practice this does not occur. + if (handshakeLength > (recordLength - 4)) { // 4: handshake header size + throw new SSLException("Handshake message spans multiple records"); + } + + input = input.duplicate(); + input.limit(handshakeLength + input.position()); + return exploreClientHello(input, + recordMajorVersion, recordMinorVersion); + } + + /* + * struct { + * uint32 gmt_unix_time; + * opaque random_bytes[28]; + * } Random; + * + * opaque SessionID<0..32>; + * + * uint8 CipherSuite[2]; + * + * enum { null(0), (255) } CompressionMethod; + * + * struct { + * ProtocolVersion client_version; + * Random random; + * SessionID session_id; + * CipherSuite cipher_suites<2..2^16-2>; + * CompressionMethod compression_methods<1..2^8-1>; + * select (extensions_present) { + * case false: + * struct {}; + * case true: + * Extension extensions<0..2^16-1>; + * }; + * } ClientHello; + */ + private static SSLCapabilities exploreClientHello( + ByteBuffer input, + byte recordMajorVersion, + byte recordMinorVersion) throws IOException { + + List snList = Collections.emptyList(); + + // client version + byte helloMajorVersion = input.get(); + byte helloMinorVersion = input.get(); + + // ignore random + int position = input.position(); + input.position(position + 32); // 32: the length of Random + + // ignore session id + ignoreByteVector8(input); + + // ignore cipher_suites + ignoreByteVector16(input); + + // ignore compression methods + ignoreByteVector8(input); + + if (input.remaining() > 0) { + snList = exploreExtensions(input); + } + + return new SSLCapabilitiesImpl( + recordMajorVersion, recordMinorVersion, + helloMajorVersion, helloMinorVersion, snList); + } + + /* + * struct { + * ExtensionType extension_type; + * opaque extension_data<0..2^16-1>; + * } Extension; + * + * enum { + * server_name(0), max_fragment_length(1), + * client_certificate_url(2), trusted_ca_keys(3), + * truncated_hmac(4), status_request(5), (65535) + * } ExtensionType; + */ + private static List exploreExtensions(ByteBuffer input) + throws IOException { + + int length = getInt16(input); // length of extensions + while (length > 0) { + int extType = getInt16(input); // extenson type + int extLen = getInt16(input); // length of extension data + + if (extType == 0x00) { // 0x00: type of server name indication + return exploreSNIExt(input, extLen); + } else { // ignore other extensions + ignoreByteVector(input, extLen); + } + + length -= extLen + 4; + } + + return Collections.emptyList(); + } + + /* + * struct { + * NameType name_type; + * select (name_type) { + * case host_name: HostName; + * } name; + * } ServerName; + * + * enum { + * host_name(0), (255) + * } NameType; + * + * opaque HostName<1..2^16-1>; + * + * struct { + * ServerName server_name_list<1..2^16-1> + * } ServerNameList; + */ + private static List exploreSNIExt(ByteBuffer input, + int extLen) throws IOException { + + Map sniMap = new LinkedHashMap<>(); + + int remains = extLen; + if (extLen >= 2) { // "server_name" extension in ClientHello + int listLen = getInt16(input); // length of server_name_list + if (listLen == 0 || listLen + 2 != extLen) { + throw new SSLProtocolException( + "Invalid server name indication extension"); + } + + remains -= 2; // 0x02: the length field of server_name_list + while (remains > 0) { + int code = getInt8(input); // name_type + int snLen = getInt16(input); // length field of server name + if (snLen > remains) { + throw new SSLProtocolException( + "Not enough data to fill declared vector size"); + } + byte[] encoded = new byte[snLen]; + input.get(encoded); + + SNIServerName serverName; + switch (code) { + case StandardConstants.SNI_HOST_NAME: + if (encoded.length == 0) { + throw new SSLProtocolException( + "Empty HostName in server name indication"); + } + serverName = new SNIHostName(encoded); + break; + default: + serverName = new UnknownServerName(code, encoded); + } + // check for duplicated server name type + if (sniMap.put(serverName.getType(), serverName) != null) { + throw new SSLProtocolException( + "Duplicated server name of type " + + serverName.getType()); + } + + remains -= encoded.length + 3; // NameType: 1 byte + // HostName length: 2 bytes + } + } else if (extLen == 0) { // "server_name" extension in ServerHello + throw new SSLProtocolException( + "Not server name indication extension in client"); + } + + if (remains != 0) { + throw new SSLProtocolException( + "Invalid server name indication extension"); + } + + return Collections.unmodifiableList( + new ArrayList<>(sniMap.values())); + } + + private static int getInt8(ByteBuffer input) { + return input.get(); + } + + private static int getInt16(ByteBuffer input) { + return ((input.get() & 0xFF) << 8) | (input.get() & 0xFF); + } + + private static int getInt24(ByteBuffer input) { + return ((input.get() & 0xFF) << 16) | ((input.get() & 0xFF) << 8) | + (input.get() & 0xFF); + } + + private static void ignoreByteVector8(ByteBuffer input) { + ignoreByteVector(input, getInt8(input)); + } + + private static void ignoreByteVector16(ByteBuffer input) { + ignoreByteVector(input, getInt16(input)); + } + + private static void ignoreByteVector24(ByteBuffer input) { + ignoreByteVector(input, getInt24(input)); + } + + private static void ignoreByteVector(ByteBuffer input, int length) { + if (length != 0) { + int position = input.position(); + input.position(position + length); + } + } + + private static class UnknownServerName extends SNIServerName { + UnknownServerName(int code, byte[] encoded) { + super(code, encoded); + } + } + + private static final class SSLCapabilitiesImpl extends SSLCapabilities { + private final static Map versionMap = new HashMap<>(5); + + private final String recordVersion; + private final String helloVersion; + List sniNames; + + static { + versionMap.put(0x0002, "SSLv2Hello"); + versionMap.put(0x0300, "SSLv3"); + versionMap.put(0x0301, "TLSv1"); + versionMap.put(0x0302, "TLSv1.1"); + versionMap.put(0x0303, "TLSv1.2"); + } + + SSLCapabilitiesImpl(byte recordMajorVersion, byte recordMinorVersion, + byte helloMajorVersion, byte helloMinorVersion, + List sniNames) { + + int version = (recordMajorVersion << 8) | recordMinorVersion; + this.recordVersion = versionMap.get(version) != null ? + versionMap.get(version) : + unknownVersion(recordMajorVersion, recordMinorVersion); + + version = (helloMajorVersion << 8) | helloMinorVersion; + this.helloVersion = versionMap.get(version) != null ? + versionMap.get(version) : + unknownVersion(helloMajorVersion, helloMinorVersion); + + this.sniNames = sniNames; + } + + @Override + public String getRecordVersion() { + return recordVersion; + } + + @Override + public String getHelloVersion() { + return helloVersion; + } + + @Override + public List getServerNames() { + if (!sniNames.isEmpty()) { + return Collections.unmodifiableList(sniNames); + } + + return sniNames; + } + + private static String unknownVersion(byte major, byte minor) { + return "Unknown-" + ((int)major) + "." + ((int)minor); + } + } +} + diff --git a/jdk/test/sun/security/ssl/templates/SSLSocketTemplate.java b/jdk/test/sun/security/ssl/templates/SSLSocketTemplate.java index 244b80444db..a31be5d3340 100644 --- a/jdk/test/sun/security/ssl/templates/SSLSocketTemplate.java +++ b/jdk/test/sun/security/ssl/templates/SSLSocketTemplate.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2001, 2005, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2001, 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 diff --git a/jdk/test/sun/security/tools/jarsigner/AlgOptions.sh b/jdk/test/sun/security/tools/jarsigner/AlgOptions.sh index 35bb1e7ea1f..b6f8c8b3ff2 100644 --- a/jdk/test/sun/security/tools/jarsigner/AlgOptions.sh +++ b/jdk/test/sun/security/tools/jarsigner/AlgOptions.sh @@ -1,5 +1,5 @@ # -# Copyright (c) 2005, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2005, 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 diff --git a/jdk/test/sun/security/tools/jarsigner/JarSigningNonAscii.java b/jdk/test/sun/security/tools/jarsigner/JarSigningNonAscii.java index c0cae086252..69bf09ed5bf 100644 --- a/jdk/test/sun/security/tools/jarsigner/JarSigningNonAscii.java +++ b/jdk/test/sun/security/tools/jarsigner/JarSigningNonAscii.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 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 @@ -62,7 +62,7 @@ public class JarSigningNonAscii { "-signedJar", signedJar, unsignedJar, "b" }; - JarSigner.main(jsArgs); + sun.security.tools.jarsigner.Main.main(jsArgs); // verify the signed jar file diff --git a/jdk/test/sun/security/tools/jarsigner/LargeJarEntry.java b/jdk/test/sun/security/tools/jarsigner/LargeJarEntry.java index 280160b2a13..4d4db3c68a0 100644 --- a/jdk/test/sun/security/tools/jarsigner/LargeJarEntry.java +++ b/jdk/test/sun/security/tools/jarsigner/LargeJarEntry.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2006, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2006, 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 @@ -35,7 +35,6 @@ import java.io.FileOutputStream; import java.util.jar.JarEntry; import java.util.jar.JarOutputStream; import java.util.zip.CRC32; -import sun.security.tools.JarSigner; public class LargeJarEntry { @@ -73,7 +72,7 @@ public class LargeJarEntry { jarName, "b" }; // now, try to sign it try { - JarSigner.main(jsArgs); + sun.security.tools.jarsigner.Main.main(jsArgs); } catch (OutOfMemoryError err) { throw new Exception("Test failed with OutOfMemoryError", err); } finally { diff --git a/jdk/test/sun/security/tools/jarsigner/PercentSign.sh b/jdk/test/sun/security/tools/jarsigner/PercentSign.sh index b29945262ee..559c0533e73 100644 --- a/jdk/test/sun/security/tools/jarsigner/PercentSign.sh +++ b/jdk/test/sun/security/tools/jarsigner/PercentSign.sh @@ -1,5 +1,5 @@ # -# Copyright (c) 2007, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2007, 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 diff --git a/jdk/test/sun/security/tools/jarsigner/concise_jarsigner.sh b/jdk/test/sun/security/tools/jarsigner/concise_jarsigner.sh index 298a0a7354e..c3eec5819e1 100644 --- a/jdk/test/sun/security/tools/jarsigner/concise_jarsigner.sh +++ b/jdk/test/sun/security/tools/jarsigner/concise_jarsigner.sh @@ -1,5 +1,5 @@ # -# Copyright (c) 2009, 2010, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2009, 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 diff --git a/jdk/test/sun/security/tools/jarsigner/diffend.sh b/jdk/test/sun/security/tools/jarsigner/diffend.sh index 0927b2db9ad..0f943796af4 100644 --- a/jdk/test/sun/security/tools/jarsigner/diffend.sh +++ b/jdk/test/sun/security/tools/jarsigner/diffend.sh @@ -1,5 +1,5 @@ # -# Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2010, 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 diff --git a/jdk/test/sun/security/tools/jarsigner/oldsig.sh b/jdk/test/sun/security/tools/jarsigner/oldsig.sh index a6c7464ad2f..aae758cb937 100644 --- a/jdk/test/sun/security/tools/jarsigner/oldsig.sh +++ b/jdk/test/sun/security/tools/jarsigner/oldsig.sh @@ -1,5 +1,5 @@ # -# Copyright (c) 2007, 2010, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2007, 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 diff --git a/jdk/test/sun/security/tools/keytool/AltProviderPath.sh b/jdk/test/sun/security/tools/keytool/AltProviderPath.sh index 05dc50c6ccb..067a5eb7bf0 100644 --- a/jdk/test/sun/security/tools/keytool/AltProviderPath.sh +++ b/jdk/test/sun/security/tools/keytool/AltProviderPath.sh @@ -1,5 +1,5 @@ # -# Copyright (c) 2004, 2005, Oracle and/or its affiliates. All rights reserved. +# 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 diff --git a/jdk/test/sun/security/tools/keytool/CloneKeyAskPassword.sh b/jdk/test/sun/security/tools/keytool/CloneKeyAskPassword.sh index bc3a868d0ae..0f9b82c84b8 100644 --- a/jdk/test/sun/security/tools/keytool/CloneKeyAskPassword.sh +++ b/jdk/test/sun/security/tools/keytool/CloneKeyAskPassword.sh @@ -1,5 +1,5 @@ # -# Copyright (c) 2004, Oracle and/or its affiliates. All rights reserved. +# 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 diff --git a/jdk/test/sun/security/tools/keytool/CloseFile.java b/jdk/test/sun/security/tools/keytool/CloseFile.java index b1b83a4bf0e..82c3e44a194 100644 --- a/jdk/test/sun/security/tools/keytool/CloseFile.java +++ b/jdk/test/sun/security/tools/keytool/CloseFile.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2006, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2006, 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 @@ -26,12 +26,13 @@ * @bug 6489721 * @summary keytool has not closed several file streams * @author weijun.wang + * @compile -XDignore.symbol.file CloseFile.java + * @run main CloseFile * * This test is only useful on Windows, which fails before the fix and succeeds * after it. On other platforms, it always passes. */ -import sun.security.tools.KeyTool; import java.io.*; public class CloseFile { @@ -58,7 +59,7 @@ public class CloseFile { } static void run(String s) throws Exception { - KeyTool.main((s+" -debug").split(" ")); + sun.security.tools.keytool.Main.main((s+" -debug").split(" ")); } static void remove(String filename, boolean check) { new File(filename).delete(); diff --git a/jdk/test/sun/security/tools/keytool/KeyToolTest.java b/jdk/test/sun/security/tools/keytool/KeyToolTest.java index 573f9be3bd7..e86af93ea24 100644 --- a/jdk/test/sun/security/tools/keytool/KeyToolTest.java +++ b/jdk/test/sun/security/tools/keytool/KeyToolTest.java @@ -56,7 +56,6 @@ */ import java.security.KeyStore; -import sun.security.tools.KeyTool; import sun.security.x509.*; import java.io.*; import java.security.KeyPairGenerator; @@ -149,12 +148,13 @@ public class KeyToolTest { System.setOut(new PrintStream(b1)); System.setErr(new PrintStream(b2)); - // since System.in is overrided, the KeyTool.main() method will + // since System.in is overrided, the + // sun.security.tools.keytool.Main.main() method will // never block at user input - // use -debug so that KeyTool.main() will throw an Exception + // use -debug so that main() will throw an Exception // instead of calling System.exit() - KeyTool.main(("-debug "+cmd).split("\\s+")); + sun.security.tools.keytool.Main.main(("-debug "+cmd).split("\\s+")); } finally { out = b1.toString(); err = b2.toString(); diff --git a/jdk/test/sun/security/tools/keytool/NewSize7.java b/jdk/test/sun/security/tools/keytool/NewSize7.java index ab8ef5cb59a..2e5ee6ef3af 100644 --- a/jdk/test/sun/security/tools/keytool/NewSize7.java +++ b/jdk/test/sun/security/tools/keytool/NewSize7.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2009, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2009, 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 @@ -25,6 +25,8 @@ * @test * @bug 6561126 * @summary keytool should use larger default keysize for keypairs + * @compile -XDignore.symbol.file NewSize7.java + * @run main NewSize7 */ import java.io.File; @@ -34,13 +36,13 @@ import java.nio.file.Paths; import java.security.KeyStore; import java.security.cert.X509Certificate; import java.security.interfaces.RSAPublicKey; -import sun.security.tools.KeyTool; public class NewSize7 { public static void main(String[] args) throws Exception { String FILE = "newsize7-ks"; new File(FILE).delete(); - KeyTool.main(("-debug -genkeypair -keystore " + FILE + + sun.security.tools.keytool.Main.main(("-debug -genkeypair -keystore " + + FILE + " -alias a -dname cn=c -storepass changeit" + " -keypass changeit -keyalg rsa").split(" ")); KeyStore ks = KeyStore.getInstance("JKS"); diff --git a/jdk/test/sun/security/tools/keytool/NoExtNPE.sh b/jdk/test/sun/security/tools/keytool/NoExtNPE.sh index f0af8227250..da63ed8ce3a 100644 --- a/jdk/test/sun/security/tools/keytool/NoExtNPE.sh +++ b/jdk/test/sun/security/tools/keytool/NoExtNPE.sh @@ -1,5 +1,5 @@ # -# Copyright (c) 2009, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2009, 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 diff --git a/jdk/test/sun/security/tools/keytool/SecretKeyKS.sh b/jdk/test/sun/security/tools/keytool/SecretKeyKS.sh index 98e3df4384a..6246d2bdbb1 100644 --- a/jdk/test/sun/security/tools/keytool/SecretKeyKS.sh +++ b/jdk/test/sun/security/tools/keytool/SecretKeyKS.sh @@ -1,5 +1,5 @@ # -# Copyright (c) 2002, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2002, 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 diff --git a/jdk/test/sun/security/tools/keytool/StandardAlgName.sh b/jdk/test/sun/security/tools/keytool/StandardAlgName.sh index b3d1c519c0e..8ac1324bc11 100644 --- a/jdk/test/sun/security/tools/keytool/StandardAlgName.sh +++ b/jdk/test/sun/security/tools/keytool/StandardAlgName.sh @@ -1,5 +1,5 @@ # -# Copyright (c) 2004, 2005, Oracle and/or its affiliates. All rights reserved. +# 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 diff --git a/jdk/test/sun/security/tools/keytool/StartDateTest.java b/jdk/test/sun/security/tools/keytool/StartDateTest.java index bb64480b1f0..597c74510fe 100644 --- a/jdk/test/sun/security/tools/keytool/StartDateTest.java +++ b/jdk/test/sun/security/tools/keytool/StartDateTest.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2007, 2008, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2007, 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 @@ -25,6 +25,8 @@ * @test * @bug 6468285 * @summary keytool ability to backdate self-signed certificates to compensate for clock skew + * @compile -XDignore.symbol.file StartDateTest.java + * @run main StartDateTest */ import java.io.File; @@ -35,7 +37,6 @@ import java.security.cert.X509Certificate; import java.util.Calendar; import java.util.Date; import java.util.GregorianCalendar; -import sun.security.tools.KeyTool; public class StartDateTest { public static void main(String[] args) throws Exception { @@ -66,7 +67,8 @@ public class StartDateTest { new File("jks").delete(); // Part 2: Test format - Method m = KeyTool.class.getDeclaredMethod("getStartDate", String.class); + Method m = sun.security.tools.keytool.Main.class.getDeclaredMethod( + "getStartDate", String.class); m.setAccessible(true); for (String s: new String[] { null, //NOW! @@ -127,7 +129,7 @@ public class StartDateTest { } static void run(String s) throws Exception { - KeyTool.main((s+" -debug").split(" ")); + sun.security.tools.keytool.Main.main((s+" -debug").split(" ")); } static Date getIssueDate() throws Exception { diff --git a/jdk/test/sun/security/tools/keytool/UnknownAndUnparseable.java b/jdk/test/sun/security/tools/keytool/UnknownAndUnparseable.java index 5c587ac548b..cb8cbad4159 100644 --- a/jdk/test/sun/security/tools/keytool/UnknownAndUnparseable.java +++ b/jdk/test/sun/security/tools/keytool/UnknownAndUnparseable.java @@ -25,12 +25,13 @@ * @test * @bug 7192202 * @summary Make sure keytool prints both unknown and unparseable extensions + * @compile -XDignore.symbol.file UnknownAndUnparseable.java + * @run main UnknownAndUnparseable */ import java.io.ByteArrayOutputStream; import java.io.File; import java.io.PrintStream; -import sun.security.tools.KeyTool; import sun.security.x509.PKIXExtensions; public class UnknownAndUnparseable { @@ -44,14 +45,14 @@ public class UnknownAndUnparseable { String genkey = s + "-genkeypair -alias a -dname CN=A -ext 1.2.3.4=1234 " + "-ext " + PKIXExtensions.KeyUsage_Id.toString() + "=5678"; - KeyTool.main(genkey.split(" ")); + sun.security.tools.keytool.Main.main(genkey.split(" ")); // Get the list output to a string String list = s + "-list -v"; ByteArrayOutputStream bout = new ByteArrayOutputStream(); PrintStream oldOut = System.out; System.setOut(new PrintStream(bout)); - KeyTool.main(list.split(" ")); + sun.security.tools.keytool.Main.main(list.split(" ")); System.setOut(oldOut); String out = bout.toString(); System.out.println(out); diff --git a/jdk/test/sun/security/tools/keytool/autotest.sh b/jdk/test/sun/security/tools/keytool/autotest.sh index ea4c3f2715f..56836d107c3 100644 --- a/jdk/test/sun/security/tools/keytool/autotest.sh +++ b/jdk/test/sun/security/tools/keytool/autotest.sh @@ -78,7 +78,7 @@ case "$OS" in esac if [ "$LIBNAME" = "" ]; then - echo "Cannot find LIBNAME" + echo "Cannot find libsoftokn3.so" exit 1 fi diff --git a/jdk/test/sun/security/tools/keytool/i18n.sh b/jdk/test/sun/security/tools/keytool/i18n.sh index 75610878f7d..8b9680ac204 100644 --- a/jdk/test/sun/security/tools/keytool/i18n.sh +++ b/jdk/test/sun/security/tools/keytool/i18n.sh @@ -1,5 +1,5 @@ # -# Copyright (c) 2000, 2003, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2000, 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 diff --git a/jdk/test/sun/security/tools/keytool/printssl.sh b/jdk/test/sun/security/tools/keytool/printssl.sh index b17113ab497..b750ffe8d2d 100644 --- a/jdk/test/sun/security/tools/keytool/printssl.sh +++ b/jdk/test/sun/security/tools/keytool/printssl.sh @@ -1,5 +1,5 @@ # -# Copyright (c) 2008, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2008, 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 diff --git a/jdk/test/sun/security/tools/keytool/resource.sh b/jdk/test/sun/security/tools/keytool/resource.sh index b21cf830f62..1256422144e 100644 --- a/jdk/test/sun/security/tools/keytool/resource.sh +++ b/jdk/test/sun/security/tools/keytool/resource.sh @@ -1,5 +1,5 @@ # -# Copyright (c) 2005, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2005, 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 diff --git a/jdk/test/sun/security/tools/keytool/standard.sh b/jdk/test/sun/security/tools/keytool/standard.sh index 98e3b03be89..756d2fb1f1e 100644 --- a/jdk/test/sun/security/tools/keytool/standard.sh +++ b/jdk/test/sun/security/tools/keytool/standard.sh @@ -1,5 +1,5 @@ # -# Copyright (c) 2009, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2009, 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 @@ -56,7 +56,7 @@ case "$OS" in ;; esac -${TESTJAVA}${FS}bin${FS}javac -d . ${TESTSRC}${FS}KeyToolTest.java || exit 10 +${TESTJAVA}${FS}bin${FS}javac -d . -XDignore.symbol.file ${TESTSRC}${FS}KeyToolTest.java || exit 10 echo | ${TESTJAVA}${FS}bin${FS}java -Dfile KeyToolTest status=$? diff --git a/jdk/test/sun/security/tools/policytool/Alias.sh b/jdk/test/sun/security/tools/policytool/Alias.sh index ee006958b4d..4db8c09b42a 100644 --- a/jdk/test/sun/security/tools/policytool/Alias.sh +++ b/jdk/test/sun/security/tools/policytool/Alias.sh @@ -1,5 +1,5 @@ # -# Copyright (c) 2001, 2002, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2001, 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 diff --git a/jdk/test/sun/security/tools/policytool/ChangeUI.sh b/jdk/test/sun/security/tools/policytool/ChangeUI.sh index b423c2371a9..95e25af1227 100644 --- a/jdk/test/sun/security/tools/policytool/ChangeUI.sh +++ b/jdk/test/sun/security/tools/policytool/ChangeUI.sh @@ -1,5 +1,5 @@ # -# Copyright (c) 2005, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2005, 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 diff --git a/jdk/test/sun/security/tools/policytool/OpenPolicy.sh b/jdk/test/sun/security/tools/policytool/OpenPolicy.sh index 34952e0d26a..5aca3324661 100644 --- a/jdk/test/sun/security/tools/policytool/OpenPolicy.sh +++ b/jdk/test/sun/security/tools/policytool/OpenPolicy.sh @@ -1,5 +1,5 @@ # -# Copyright (c) 1999, 2002, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 1999, 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 diff --git a/jdk/test/sun/security/tools/policytool/SaveAs.sh b/jdk/test/sun/security/tools/policytool/SaveAs.sh index fed21e40dfa..661ebd99a3e 100644 --- a/jdk/test/sun/security/tools/policytool/SaveAs.sh +++ b/jdk/test/sun/security/tools/policytool/SaveAs.sh @@ -1,5 +1,5 @@ # -# Copyright (c) 1999, 2002, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 1999, 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 diff --git a/jdk/test/sun/security/tools/policytool/UpdatePermissions.sh b/jdk/test/sun/security/tools/policytool/UpdatePermissions.sh index 81cf1f29186..eada9d734cd 100644 --- a/jdk/test/sun/security/tools/policytool/UpdatePermissions.sh +++ b/jdk/test/sun/security/tools/policytool/UpdatePermissions.sh @@ -1,5 +1,5 @@ # -# Copyright (c) 1999, 2002, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 1999, 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 diff --git a/jdk/test/sun/security/tools/policytool/UsePolicy.sh b/jdk/test/sun/security/tools/policytool/UsePolicy.sh index 697f8c46510..3422f2cfc15 100644 --- a/jdk/test/sun/security/tools/policytool/UsePolicy.sh +++ b/jdk/test/sun/security/tools/policytool/UsePolicy.sh @@ -1,5 +1,5 @@ # -# Copyright (c) 1999, 2002, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 1999, 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 diff --git a/jdk/test/sun/security/tools/policytool/i18n.sh b/jdk/test/sun/security/tools/policytool/i18n.sh index 5a30c02e20f..8537d48c708 100644 --- a/jdk/test/sun/security/tools/policytool/i18n.sh +++ b/jdk/test/sun/security/tools/policytool/i18n.sh @@ -1,5 +1,5 @@ # -# Copyright (c) 2000, 2002, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2000, 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 diff --git a/jdk/test/sun/security/util/Oid/S11N.sh b/jdk/test/sun/security/util/Oid/S11N.sh index 48a37114563..488c8959094 100644 --- a/jdk/test/sun/security/util/Oid/S11N.sh +++ b/jdk/test/sun/security/util/Oid/S11N.sh @@ -1,5 +1,5 @@ # -# Copyright (c) 2004, 2009, Oracle and/or its affiliates. All rights reserved. +# 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 diff --git a/jdk/test/sun/security/util/Resources/Format.java b/jdk/test/sun/security/util/Resources/Format.java index 5241d288e16..3cc8cd0125e 100644 --- a/jdk/test/sun/security/util/Resources/Format.java +++ b/jdk/test/sun/security/util/Resources/Format.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2000, 2004, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2000, 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 @@ -150,7 +150,7 @@ public class Format s.getPrivateCredentials().add(new Format()); System.out.println("Test 12, s.toString() = " + s.toString()); } catch (Exception e) { - throw new SecurityException("test 12 failed: e.toString()"); + throw new SecurityException("test 12 failed: e.toString()", e); } try { diff --git a/jdk/test/sun/security/util/Resources/NewNamesFormat.java b/jdk/test/sun/security/util/Resources/NewNamesFormat.java index 9c3b4521908..d984cfa0321 100644 --- a/jdk/test/sun/security/util/Resources/NewNamesFormat.java +++ b/jdk/test/sun/security/util/Resources/NewNamesFormat.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2010, 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 @@ -40,7 +40,9 @@ public class NewNamesFormat { public static void main(String[] args) throws Exception { checkRes("sun.security.util.Resources"); checkRes("sun.security.util.AuthResources"); - checkRes("sun.security.tools.JarSignerResources"); + checkRes("sun.security.tools.jarsigner.Resources"); + checkRes("sun.security.tools.keytool.Resources"); + checkRes("sun.security.tools.policytool.Resources"); } private static void checkRes(String resName) throws Exception { diff --git a/jdk/test/sun/security/util/Resources/NewResourcesNames.java b/jdk/test/sun/security/util/Resources/NewResourcesNames.java index 72078b5c333..c0db9544b17 100644 --- a/jdk/test/sun/security/util/Resources/NewResourcesNames.java +++ b/jdk/test/sun/security/util/Resources/NewResourcesNames.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2010, 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 @@ -59,7 +59,9 @@ class NewResourcesNames { static int MAXLEN = 127; static String[] resources = { - "sun/security/tools/JarSignerResources.java", + "sun/security/tools/jarsigner/Resources.java", + "sun/security/tools/keytool/Resources.java", + "sun/security/tools/policytool/Resources.java", "sun/security/util/Resources.java", "sun/security/util/AuthResources.java", }; @@ -94,7 +96,7 @@ class NewResourcesNames { // // This means a " exists right after getString(. Sometimes you see // - // Working on sun/security/tools/KeyTool.java + // Working on sun/security/tools/keytool/Main.java // BAD!! pmatch != match: 212 != 209 // Working on sun/security/provider/PolicyFile.java // BAD!! pmatch != match: 14 != 10 @@ -165,7 +167,7 @@ class NewResourcesNames { Set names = new HashSet(); - String file = "sun/security/tools/KeyTool.java"; + String file = "sun/security/tools/keytool/Main.java"; System.err.println("Working on " + file); File origFile = new File(file); File tmpFile = new File(file + ".tmp"); diff --git a/jdk/test/sun/security/x509/AlgorithmId/ExtensibleAlgorithmId.java b/jdk/test/sun/security/x509/AlgorithmId/ExtensibleAlgorithmId.java index b1ce9b795c7..2f85217f483 100644 --- a/jdk/test/sun/security/x509/AlgorithmId/ExtensibleAlgorithmId.java +++ b/jdk/test/sun/security/x509/AlgorithmId/ExtensibleAlgorithmId.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1998, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1998, 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 diff --git a/jdk/test/sun/security/x509/AlgorithmId/NonStandardNames.java b/jdk/test/sun/security/x509/AlgorithmId/NonStandardNames.java index 9870db335f5..c6ca55ce385 100644 --- a/jdk/test/sun/security/x509/AlgorithmId/NonStandardNames.java +++ b/jdk/test/sun/security/x509/AlgorithmId/NonStandardNames.java @@ -25,6 +25,8 @@ * @test * @bug 7180907 * @summary Jarsigner -verify fails if rsa file used sha-256 with authenticated attributes + * @compile -XDignore.symbol.file NonStandardNames.java + * @run main NonStandardNames */ import java.security.MessageDigest; @@ -35,7 +37,7 @@ import sun.security.pkcs.PKCS7; import sun.security.pkcs.PKCS9Attribute; import sun.security.pkcs.PKCS9Attributes; import sun.security.pkcs.SignerInfo; -import sun.security.tools.CertAndKeyGen; +import sun.security.tools.keytool.CertAndKeyGen; import sun.security.x509.AlgorithmId; import sun.security.x509.X500Name; diff --git a/jdk/test/sun/tools/common/CommonSetup.sh b/jdk/test/sun/tools/common/CommonSetup.sh index 7d37dbe51f3..db58377a668 100644 --- a/jdk/test/sun/tools/common/CommonSetup.sh +++ b/jdk/test/sun/tools/common/CommonSetup.sh @@ -1,7 +1,7 @@ #!/bin/sh # -# Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2005, 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 diff --git a/jdk/test/sun/tools/jcmd/jcmd-Defaults.sh b/jdk/test/sun/tools/jcmd/jcmd-Defaults.sh index cf791358922..2d6aa2ebe89 100644 --- a/jdk/test/sun/tools/jcmd/jcmd-Defaults.sh +++ b/jdk/test/sun/tools/jcmd/jcmd-Defaults.sh @@ -1,5 +1,5 @@ # -# Copyright (c) 2011, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2011, 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 diff --git a/jdk/test/sun/tools/jcmd/jcmd-f.sh b/jdk/test/sun/tools/jcmd/jcmd-f.sh index 5cbd1b93236..ad73bc750ee 100644 --- a/jdk/test/sun/tools/jcmd/jcmd-f.sh +++ b/jdk/test/sun/tools/jcmd/jcmd-f.sh @@ -1,7 +1,7 @@ #!/bin/sh # -# Copyright (c) 2011, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2011, 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 diff --git a/jdk/test/sun/tools/jcmd/jcmd-help-help.sh b/jdk/test/sun/tools/jcmd/jcmd-help-help.sh index b9545ff7f79..2f99b6faef7 100644 --- a/jdk/test/sun/tools/jcmd/jcmd-help-help.sh +++ b/jdk/test/sun/tools/jcmd/jcmd-help-help.sh @@ -1,7 +1,7 @@ #!/bin/sh # -# Copyright (c) 2011, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2011, 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 diff --git a/jdk/test/sun/tools/jcmd/jcmd-help.sh b/jdk/test/sun/tools/jcmd/jcmd-help.sh index e822a411042..b640776c367 100644 --- a/jdk/test/sun/tools/jcmd/jcmd-help.sh +++ b/jdk/test/sun/tools/jcmd/jcmd-help.sh @@ -1,5 +1,5 @@ # -# Copyright (c) 2011, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2011, 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 diff --git a/jdk/test/sun/tools/jcmd/jcmd-pid.sh b/jdk/test/sun/tools/jcmd/jcmd-pid.sh index eda230aa1f1..df397339327 100644 --- a/jdk/test/sun/tools/jcmd/jcmd-pid.sh +++ b/jdk/test/sun/tools/jcmd/jcmd-pid.sh @@ -1,7 +1,7 @@ #!/bin/sh # -# Copyright (c) 2011, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2011, 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 diff --git a/jdk/test/sun/tools/jcmd/jcmd_Output1.awk b/jdk/test/sun/tools/jcmd/jcmd_Output1.awk index 92bc9db6a29..986951dc178 100644 --- a/jdk/test/sun/tools/jcmd/jcmd_Output1.awk +++ b/jdk/test/sun/tools/jcmd/jcmd_Output1.awk @@ -16,7 +16,7 @@ BEGIN { } # or match on the condition that the class name is not available -/^[0-9]+ -- process information unavailable$/ { +/^[0-9]+ -- .*$/ { current=1; } diff --git a/jdk/test/sun/tools/jconsole/ImmutableResourceTest.sh b/jdk/test/sun/tools/jconsole/ImmutableResourceTest.sh index 414d02b9cbf..dedf21271b0 100644 --- a/jdk/test/sun/tools/jconsole/ImmutableResourceTest.sh +++ b/jdk/test/sun/tools/jconsole/ImmutableResourceTest.sh @@ -1,5 +1,5 @@ # -# Copyright (c) 2005, 2007, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2005, 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 diff --git a/jdk/test/sun/tools/jinfo/Basic.sh b/jdk/test/sun/tools/jinfo/Basic.sh index 639d1686ffc..0fdcb9e1e38 100644 --- a/jdk/test/sun/tools/jinfo/Basic.sh +++ b/jdk/test/sun/tools/jinfo/Basic.sh @@ -1,6 +1,6 @@ #!/bin/sh # -# Copyright (c) 2006, 2011, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2006, 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 diff --git a/jdk/test/sun/tools/jps/jps-l_Output1.awk b/jdk/test/sun/tools/jps/jps-l_Output1.awk index ed90256b8df..5280197ed6b 100644 --- a/jdk/test/sun/tools/jps/jps-l_Output1.awk +++ b/jdk/test/sun/tools/jps/jps-l_Output1.awk @@ -16,7 +16,7 @@ BEGIN { } # or match on the condition that the class name is not available -/^[0-9]+ -- process information unavailable$/ { +/^[0-9]+ -- .*$/ { matched++; } diff --git a/jdk/test/sun/tools/jps/jps_Output1.awk b/jdk/test/sun/tools/jps/jps_Output1.awk index 270889edfd9..1781bc560e3 100644 --- a/jdk/test/sun/tools/jps/jps_Output1.awk +++ b/jdk/test/sun/tools/jps/jps_Output1.awk @@ -16,7 +16,7 @@ BEGIN { } # or match on the condition that the class name is not available -/^[0-9]+ -- process information unavailable$/ { +/^[0-9]+ -- .*$/ { matched++; } diff --git a/jdk/test/sun/tools/jrunscript/common.sh b/jdk/test/sun/tools/jrunscript/common.sh index 8fd6df5c93e..a80157fd1c2 100644 --- a/jdk/test/sun/tools/jrunscript/common.sh +++ b/jdk/test/sun/tools/jrunscript/common.sh @@ -1,5 +1,5 @@ # -# Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2005, 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 diff --git a/jdk/test/sun/tools/jrunscript/jrunscript-argsTest.sh b/jdk/test/sun/tools/jrunscript/jrunscript-argsTest.sh index 68928de89de..55f3147039a 100644 --- a/jdk/test/sun/tools/jrunscript/jrunscript-argsTest.sh +++ b/jdk/test/sun/tools/jrunscript/jrunscript-argsTest.sh @@ -1,7 +1,7 @@ #!/bin/sh # -# Copyright (c) 2005, 2008, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2005, 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 diff --git a/jdk/test/sun/tools/jrunscript/jrunscript-eTest.sh b/jdk/test/sun/tools/jrunscript/jrunscript-eTest.sh index 625c6d40449..e9867b84ffa 100644 --- a/jdk/test/sun/tools/jrunscript/jrunscript-eTest.sh +++ b/jdk/test/sun/tools/jrunscript/jrunscript-eTest.sh @@ -1,7 +1,7 @@ #!/bin/sh # -# Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2005, 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 diff --git a/jdk/test/sun/tools/jrunscript/jrunscript-fTest.sh b/jdk/test/sun/tools/jrunscript/jrunscript-fTest.sh index a50d983c99f..170a7dd0d11 100644 --- a/jdk/test/sun/tools/jrunscript/jrunscript-fTest.sh +++ b/jdk/test/sun/tools/jrunscript/jrunscript-fTest.sh @@ -1,7 +1,7 @@ #!/bin/sh # -# Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2005, 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 diff --git a/jdk/test/sun/tools/jrunscript/jrunscriptTest.sh b/jdk/test/sun/tools/jrunscript/jrunscriptTest.sh index 2d1916a7cde..0a3237536db 100644 --- a/jdk/test/sun/tools/jrunscript/jrunscriptTest.sh +++ b/jdk/test/sun/tools/jrunscript/jrunscriptTest.sh @@ -1,7 +1,7 @@ #!/bin/sh # -# Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2005, 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 diff --git a/jdk/test/sun/tools/native2ascii/resources/ImmutableResourceTest.sh b/jdk/test/sun/tools/native2ascii/resources/ImmutableResourceTest.sh index 527de199bc9..fa312adad74 100644 --- a/jdk/test/sun/tools/native2ascii/resources/ImmutableResourceTest.sh +++ b/jdk/test/sun/tools/native2ascii/resources/ImmutableResourceTest.sh @@ -1,5 +1,5 @@ # -# Copyright (c) 2005, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2005, 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 diff --git a/jdk/test/sun/util/logging/PlatformLoggerTest.java b/jdk/test/sun/util/logging/PlatformLoggerTest.java index 9e7435d4045..25018874af4 100644 --- a/jdk/test/sun/util/logging/PlatformLoggerTest.java +++ b/jdk/test/sun/util/logging/PlatformLoggerTest.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2009, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2009, 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 diff --git a/jdk/test/tools/launcher/DefaultLocaleTest.java b/jdk/test/tools/launcher/DefaultLocaleTest.java index 1fbce312fb0..d962813bb21 100644 --- a/jdk/test/tools/launcher/DefaultLocaleTest.java +++ b/jdk/test/tools/launcher/DefaultLocaleTest.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2004, 2011, Oracle and/or its affiliates. All rights reserved. + * 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 diff --git a/jdk/test/tools/pack200/CommandLineTests.java b/jdk/test/tools/pack200/CommandLineTests.java index e32fadbf85b..4e0c8b1e003 100644 --- a/jdk/test/tools/pack200/CommandLineTests.java +++ b/jdk/test/tools/pack200/CommandLineTests.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2007, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2007, 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 diff --git a/jdk/test/tools/pack200/TimeStamp.java b/jdk/test/tools/pack200/TimeStamp.java index aa82fbb4e16..8dfc2d9bc2e 100644 --- a/jdk/test/tools/pack200/TimeStamp.java +++ b/jdk/test/tools/pack200/TimeStamp.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2010, 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 diff --git a/langtools/.hgtags b/langtools/.hgtags index 387f4d68b64..377c3143f47 100644 --- a/langtools/.hgtags +++ b/langtools/.hgtags @@ -184,3 +184,4 @@ f299927fc31689385f67ab7322c18eb41d8bd71e jdk8-b59 3d2b98ffcb534b0e5be87bb1f9f68d1518ad7729 jdk8-b60 26020b247ad3806dbca33e029ee12e1b191f59f9 jdk8-b61 b47bb81ba962ef80bb6f0b863c33a0afcfb0b49e jdk8-b62 +92e6f2190ca0567c857f85c3fb7a2be5adf079d0 jdk8-b63 diff --git a/langtools/makefiles/BuildLangtools.gmk b/langtools/makefiles/BuildLangtools.gmk new file mode 100644 index 00000000000..c5870703870 --- /dev/null +++ b/langtools/makefiles/BuildLangtools.gmk @@ -0,0 +1,205 @@ +# +# Copyright (c) 2011, 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. 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. +# + +# This must be the first rule +default: all + +include $(SPEC) +include MakeBase.gmk +include JavaCompilation.gmk + +# The BOOT_JAVAC setup uses the bootdir compiler to compile the tools +# and the bootstrap javac, to be run by the bootdir jvm. +$(eval $(call SetupJavaCompiler,BOOT_JAVAC,\ + JAVAC:=$(JAVAC),\ + SERVER_DIR:=$(SJAVAC_SERVER_DIR),\ + SERVER_JVM:=$(SJAVAC_SERVER_JAVA),\ + FLAGS:=-XDignore.symbol.file=true -g -Xlint:all$(COMMA)-deprecation -Werror)) + +# Now setup the compilation of the properties compilation tool. You can depend +# upon $(BUILD_TOOLS) to trigger a compilation of the tools. Note that we +# add src/share/classes to the sourcepath. This is necessary since the GenStubs +# program needs to be linked and run towards the new javac sources. +$(eval $(call SetupJavaCompilation,BUILD_TOOLS,\ + SETUP:=BOOT_JAVAC,\ + DISABLE_SJAVAC:=true,\ + ADD_JAVAC_FLAGS:=-Xprefer:source,\ + SRC:=$(LANGTOOLS_TOPDIR)/make/tools $(LANGTOOLS_TOPDIR)/src/share/classes,\ + INCLUDES:=compileproperties genstubs,\ + BIN:=$(LANGTOOLS_OUTPUTDIR)/btclasses)) + +# The compileprops tools compiles a properties file into a resource bundle. +TOOL_COMPILEPROPS_CMD:=$(JAVA) -cp $(LANGTOOLS_OUTPUTDIR)/btclasses compileproperties.CompileProperties -quiet +# Lookup the properties that need to be compiled into resource bundles. +PROPSOURCES:=$(shell find $(LANGTOOLS_TOPDIR)/src/share/classes -name "*.properties") +# Strip away prefix and suffix, leaving for example only: "com/sun/tools/javac/resources/javac_zh_CN" +PROPPATHS:=$(patsubst $(LANGTOOLS_TOPDIR)/src/share/classes/%.properties,%,$(PROPSOURCES)) +# Generate the list of java files to be created. +PROPJAVAS:=$(patsubst %,$(LANGTOOLS_OUTPUTDIR)/gensrc/%.java,$(PROPPATHS)) +# Generate the package dirs for the tobe generated java files. +PROPDIRS:=$(dir $(PROPJAVAS)) +# Now generate a sequence of "-compile ...javac_zh_CN.properties ...javac_zh_CN.java java.util.ListResourceBundle" +# suitable to be fed into the CompileProperties command. +PROPCMDLINE:=$(subst _SPACE_,$(SPACE),$(join $(addprefix -compile_SPACE_,$(PROPSOURCES)), \ + $(addsuffix _SPACE_java.util.ListResourceBundle,$(addprefix _SPACE_$(LANGTOOLS_OUTPUTDIR)/gensrc/,$(addsuffix .java,$(PROPPATHS)))))) + +# Now setup the rule for the generation of the resource bundles. +$(LANGTOOLS_OUTPUTDIR)/gensrc/_the_props.d : $(PROPSOURCES) $(BUILD_TOOLS) + rm -rf $(@D)/* + mkdir -p $(@D) $(PROPDIRS) + printf "jdk=$(JDK_VERSION)\nfull=$(FULL_VERSION)\nrelease=$(RELEASE)\n" > $(LANGTOOLS_OUTPUTDIR)/gensrc/com/sun/tools/javah/resources/version.properties + printf "jdk=$(JDK_VERSION)\nfull=$(FULL_VERSION)\nrelease=$(RELEASE)\n" > $(LANGTOOLS_OUTPUTDIR)/gensrc/com/sun/tools/javap/resources/version.properties + printf "jdk=$(JDK_VERSION)\nfull=$(FULL_VERSION)\nrelease=$(RELEASE)\n" > $(LANGTOOLS_OUTPUTDIR)/gensrc/com/sun/tools/javac/resources/version.properties + echo Compiling $(words $(PROPSOURCES) v1 v2 v3) properties into resource bundles + $(TOOL_COMPILEPROPS_CMD) $(PROPCMDLINE) \ + -compile $(LANGTOOLS_OUTPUTDIR)/gensrc/com/sun/tools/javah/resources/version.properties \ + $(LANGTOOLS_OUTPUTDIR)/gensrc/com/sun/tools/javah/resources/version.java \ + java.util.ListResourceBundle \ + -compile $(LANGTOOLS_OUTPUTDIR)/gensrc/com/sun/tools/javap/resources/version.properties \ + $(LANGTOOLS_OUTPUTDIR)/gensrc/com/sun/tools/javap/resources/version.java \ + java.util.ListResourceBundle \ + -compile $(LANGTOOLS_OUTPUTDIR)/gensrc/com/sun/tools/javac/resources/version.properties \ + $(LANGTOOLS_OUTPUTDIR)/gensrc/com/sun/tools/javac/resources/version.java \ + java.util.ListResourceBundle + echo PROPS_ARE_CREATED=yes > $@ + +# Trigger the generation of the resource bundles. After the resource bundles have +# been compiled, then the makefile will restart and the newly created java files +# will become part of the build further along in the makefile. +-include $(LANGTOOLS_OUTPUTDIR)/gensrc/_the_props.d + +ifeq ($(PROPS_ARE_CREATED),yes) + # Setup the rules to build a dist/bootstrap/lib/javac.jar, ie a smaller intermediate javac + # that can be compiled with an old javac. The intermediate javac is then used + # to compile javac again and to build the complete new jdk. + $(eval $(call SetupJavaCompilation,BUILD_BOOTSTRAP_LANGTOOLS,\ + SETUP:=BOOT_JAVAC,\ + DISABLE_SJAVAC:=true,\ + SRC:=$(LANGTOOLS_TOPDIR)/src/share/classes $(LANGTOOLS_OUTPUTDIR)/gensrc,\ + EXCLUDES:=com/sun/tools/javac/nio,\ + BIN:=$(LANGTOOLS_OUTPUTDIR)/btclasses/bootstrap)) + + $(eval $(call SetupArchive,ARCHIVE_BOOTSTRAP_JAVAC,$(BUILD_BOOTSTRAP_LANGTOOLS),\ + SRCS:=$(LANGTOOLS_OUTPUTDIR)/btclasses/bootstrap,\ + JAR:=$(LANGTOOLS_OUTPUTDIR)/dist/bootstrap/lib/javac.jar,\ + JARMAIN:=com.sun.tools.javac.Main)) + + $(eval $(call SetupArchive,ARCHIVE_BOOTSTRAP_JAVAH,$(BUILD_BOOTSTRAP_LANGTOOLS),\ + SRCS:=$(LANGTOOLS_OUTPUTDIR)/btclasses/bootstrap,\ + JAR:=$(LANGTOOLS_OUTPUTDIR)/dist/bootstrap/lib/javah.jar,\ + JARMAIN:=com.sun.tools.javah.Main)) + + $(eval $(call SetupArchive,ARCHIVE_BOOTSTRAP_JAVAP,$(BUILD_BOOTSTRAP_LANGTOOLS),\ + SRCS:=$(LANGTOOLS_OUTPUTDIR)/btclasses/bootstrap,\ + JAR:=$(LANGTOOLS_OUTPUTDIR)/dist/bootstrap/lib/javap.jar,\ + JARMAIN:=com.sun.tools.javap.Main)) + + $(eval $(call SetupArchive,ARCHIVE_BOOTSTRAP_JAVADOC,$(BUILD_BOOTSTRAP_LANGTOOLS),\ + SRCS:=$(LANGTOOLS_OUTPUTDIR)/btclasses/bootstrap,\ + JAR:=$(LANGTOOLS_OUTPUTDIR)/dist/bootstrap/lib/javadoc.jar,\ + JARMAIN:=com.sun.tools.javadoc.Main)) + + # GenStubs is used to bootstrap any dependencies from javac to the new JDK that is not + # yet built. It is currently not needed but might be again in the future. The following + # exercises the functionality to verify that it works. + TOOL_GENSTUBS_CMD=$(JAVA) \ + "-Xbootclasspath/p:$(LANGTOOLS_OUTPUTDIR)/dist/bootstrap/lib/javac.jar" \ + -classpath $(LANGTOOLS_OUTPUTDIR)/btclasses \ + genstubs.GenStubs + # We fetch source from the JDK... + JDKS=$(JDK_TOPDIR)/src/share/classes + # Build the list of classes to generate stubs from. java/util/Objects.java isn't + # currently needed, but is used as a demo for now. + STUBSOURCES:=$(shell $(FIND) $(JDKS) -name "*.java" | $(GREP) \ + -e "$(JDKS)/java/util/Objects.java") + # Rewrite the file names into class names because the GenStubs tool require this. + STUBCLASSES:=$(subst /,.,$(patsubst $(JDKS)/%.java,%,$(STUBSOURCES))) + + # Now setup the build recipe for genstubs. + $(LANGTOOLS_OUTPUTDIR)/genstubs/_the_stubs.d : $(STUBSOURCES) $(BUILD_TOOLS) \ + $(LANGTOOLS_OUTPUTDIR)/dist/bootstrap/lib/javac.jar \ + $(LANGTOOLS_OUTPUTDIR)/gensrc/_the_props.d + mkdir -p $(@D) + mkdir -p $(LANGTOOLS_OUTPUTDIR)/tmpstubs + echo $(LOG_INFO) Generating stubs from JDK sources. + ($(TOOL_GENSTUBS_CMD) -s $(LANGTOOLS_OUTPUTDIR)/tmpstubs -sourcepath $(JDKS) $(STUBCLASSES) && echo STUBS_ARE_CREATED=yes > $@) + if $(DIFF) -x "_the*" -rq $(LANGTOOLS_OUTPUTDIR)/tmpstubs $(LANGTOOLS_OUTPUTDIR)/genstubs > /dev/null 2>&1; then \ + echo $(LOG_INFO) No changes in the stubs!; \ + rm -rf $(LANGTOOLS_OUTPUTDIR)/tmpstubs; \ + else \ + echo $(LOG_INFO) Changes in stubs detected!; \ + rm -rf $(@D); \ + mv $(LANGTOOLS_OUTPUTDIR)/tmpstubs $(@D); \ + fi + echo STUBS_ARE_CREATED=yes > $@ + + # Trigger a generation of the genstubs java source code and a restart + # of the makefile to make sure that the following build setup use the + # newly created java files. + -include $(LANGTOOLS_OUTPUTDIR)/genstubs/_the_stubs.d + + ifeq ($(STUBS_ARE_CREATED),yes) + # Setup a compiler configuration using the intermediate javac in dist/bootstrap/lib/javac.jar + # that generates code for the new jdk that is being built. + # The code compiled by this compiler setup, cannot necessarily be run with the bootstrap jvm. + $(eval $(call SetupJavaCompiler,GENERATE_NEWBYTECODE,\ + JVM:=$(JAVA),\ + JAVAC:="-Xbootclasspath/p:$(LANGTOOLS_OUTPUTDIR)/dist/bootstrap/lib/javac.jar" \ + -jar $(LANGTOOLS_OUTPUTDIR)/dist/bootstrap/lib/javac.jar,\ + FLAGS:=-XDignore.symbol.file=true -Xlint:all$(COMMA)-deprecation -Werror,\ + SERVER_DIR:=$(SJAVAC_SERVER_DIR),\ + SERVER_JVM:=$(SJAVAC_SERVER_JAVA))) + + # javax.tools.JavaCompilerTool isn't really a suffix but this gets the file copied. + RESOURCE_SUFFIXES:=.gif .xml .css javax.tools.JavaCompilerTool + + $(eval $(call SetupJavaCompilation,BUILD_FULL_JAVAC,\ + SETUP:=GENERATE_NEWBYTECODE,\ + SRC:=$(LANGTOOLS_TOPDIR)/src/share/classes $(LANGTOOLS_OUTPUTDIR)/gensrc \ + $(LANGTOOLS_OUTPUTDIR)/genstubs,\ + EXCLUDES:=java/util java/io java/nio,\ + COPY:=$(RESOURCE_SUFFIXES),\ + BIN:=$(LANGTOOLS_OUTPUTDIR)/classes)) + + $(eval $(call SetupArchive,ARCHIVE_FULL_JAVAC,$(BUILD_FULL_JAVAC),\ + SETUP:=GENERATE_NEWBYTECODE,\ + SRCS:=$(LANGTOOLS_OUTPUTDIR)/classes,\ + SUFFIXES:=.class $(RESOURCE_SUFFIXES),\ + JAR:=$(LANGTOOLS_OUTPUTDIR)/dist/lib/classes.jar)) + + $(eval $(call SetupZipArchive,ZIP_FULL_JAVAC_SOURCE,\ + SRC:=$(LANGTOOLS_TOPDIR)/src/share/classes $(LANGTOOLS_OUTPUTDIR)/gensrc,\ + ZIP:=$(LANGTOOLS_OUTPUTDIR)/dist/lib/src.zip)) + + all: $(LANGTOOLS_OUTPUTDIR)/dist/lib/classes.jar \ + $(LANGTOOLS_OUTPUTDIR)/dist/lib/src.zip \ + $(LANGTOOLS_OUTPUTDIR)/dist/bootstrap/lib/javac.jar \ + $(LANGTOOLS_OUTPUTDIR)/dist/bootstrap/lib/javah.jar \ + $(LANGTOOLS_OUTPUTDIR)/dist/bootstrap/lib/javap.jar \ + $(LANGTOOLS_OUTPUTDIR)/dist/bootstrap/lib/javadoc.jar + + + endif +endif diff --git a/langtools/makefiles/Makefile b/langtools/makefiles/Makefile index 2f8b4e08bc3..9539fe0e255 100644 --- a/langtools/makefiles/Makefile +++ b/langtools/makefiles/Makefile @@ -1,5 +1,5 @@ # -# Copyright (c) 2011, 2012, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 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 @@ -23,183 +23,27 @@ # questions. # -# This must be the first rule -default: all - -include $(SPEC) -include MakeBase.gmk -include JavaCompilation.gmk - -# The BOOT_JAVAC setup uses the bootdir compiler to compile the tools -# and the bootstrap javac, to be run by the bootdir jvm. -$(eval $(call SetupJavaCompiler,BOOT_JAVAC,\ - JAVAC:=$(JAVAC),\ - SERVER_DIR:=$(SJAVAC_SERVER_DIR),\ - SERVER_JVM:=$(SJAVAC_SERVER_JAVA),\ - FLAGS:=-XDignore.symbol.file=true -g -Xlint:all$(COMMA)-deprecation -Werror)) - -# Now setup the compilation of the properties compilation tool. You can depend -# upon $(BUILD_TOOLS) to trigger a compilation of the tools. Note that we -# add src/share/classes to the sourcepath. This is necessary since the GenStubs -# program needs to be linked and run towards the new javac sources. -$(eval $(call SetupJavaCompilation,BUILD_TOOLS,\ - SETUP:=BOOT_JAVAC,\ - DISABLE_SJAVAC:=true,\ - ADD_JAVAC_FLAGS:=-Xprefer:source,\ - SRC:=$(LANGTOOLS_TOPDIR)/make/tools $(LANGTOOLS_TOPDIR)/src/share/classes,\ - INCLUDES:=compileproperties genstubs,\ - BIN:=$(LANGTOOLS_OUTPUTDIR)/btclasses)) - -# The compileprops tools compiles a properties file into a resource bundle. -TOOL_COMPILEPROPS_CMD:=$(JAVA) -cp $(LANGTOOLS_OUTPUTDIR)/btclasses compileproperties.CompileProperties -quiet -# Lookup the properties that need to be compiled into resource bundles. -PROPSOURCES:=$(shell find $(LANGTOOLS_TOPDIR)/src/share/classes -name "*.properties") -# Strip away prefix and suffix, leaving for example only: "com/sun/tools/javac/resources/javac_zh_CN" -PROPPATHS:=$(patsubst $(LANGTOOLS_TOPDIR)/src/share/classes/%.properties,%,$(PROPSOURCES)) -# Generate the list of java files to be created. -PROPJAVAS:=$(patsubst %,$(LANGTOOLS_OUTPUTDIR)/gensrc/%.java,$(PROPPATHS)) -# Generate the package dirs for the tobe generated java files. -PROPDIRS:=$(dir $(PROPJAVAS)) -# Now generate a sequence of "-compile ...javac_zh_CN.properties ...javac_zh_CN.java java.util.ListResourceBundle" -# suitable to be fed into the CompileProperties command. -PROPCMDLINE:=$(subst _SPACE_,$(SPACE),$(join $(addprefix -compile_SPACE_,$(PROPSOURCES)), \ - $(addsuffix _SPACE_java.util.ListResourceBundle,$(addprefix _SPACE_$(LANGTOOLS_OUTPUTDIR)/gensrc/,$(addsuffix .java,$(PROPPATHS)))))) - -# Now setup the rule for the generation of the resource bundles. -$(LANGTOOLS_OUTPUTDIR)/gensrc/_the_props.d : $(PROPSOURCES) $(BUILD_TOOLS) - rm -rf $(@D)/* - mkdir -p $(@D) $(PROPDIRS) - printf "jdk=$(JDK_VERSION)\nfull=$(FULL_VERSION)\nrelease=$(RELEASE)\n" > $(LANGTOOLS_OUTPUTDIR)/gensrc/com/sun/tools/javah/resources/version.properties - printf "jdk=$(JDK_VERSION)\nfull=$(FULL_VERSION)\nrelease=$(RELEASE)\n" > $(LANGTOOLS_OUTPUTDIR)/gensrc/com/sun/tools/javap/resources/version.properties - printf "jdk=$(JDK_VERSION)\nfull=$(FULL_VERSION)\nrelease=$(RELEASE)\n" > $(LANGTOOLS_OUTPUTDIR)/gensrc/com/sun/tools/javac/resources/version.properties - echo Compiling $(words $(PROPSOURCES) v1 v2 v3) properties into resource bundles - $(TOOL_COMPILEPROPS_CMD) $(PROPCMDLINE) \ - -compile $(LANGTOOLS_OUTPUTDIR)/gensrc/com/sun/tools/javah/resources/version.properties \ - $(LANGTOOLS_OUTPUTDIR)/gensrc/com/sun/tools/javah/resources/version.java \ - java.util.ListResourceBundle \ - -compile $(LANGTOOLS_OUTPUTDIR)/gensrc/com/sun/tools/javap/resources/version.properties \ - $(LANGTOOLS_OUTPUTDIR)/gensrc/com/sun/tools/javap/resources/version.java \ - java.util.ListResourceBundle \ - -compile $(LANGTOOLS_OUTPUTDIR)/gensrc/com/sun/tools/javac/resources/version.properties \ - $(LANGTOOLS_OUTPUTDIR)/gensrc/com/sun/tools/javac/resources/version.java \ - java.util.ListResourceBundle - echo PROPS_ARE_CREATED=yes > $@ - -# Trigger the generation of the resource bundles. After the resource bundles have -# been compiled, then the makefile will restart and the newly created java files -# will become part of the build further along in the makefile. --include $(LANGTOOLS_OUTPUTDIR)/gensrc/_the_props.d - -ifeq ($(PROPS_ARE_CREATED),yes) - # Setup the rules to build a dist/bootstrap/lib/javac.jar, ie a smaller intermediate javac - # that can be compiled with an old javac. The intermediate javac is then used - # to compile javac again and to build the complete new jdk. - $(eval $(call SetupJavaCompilation,BUILD_BOOTSTRAP_LANGTOOLS,\ - SETUP:=BOOT_JAVAC,\ - DISABLE_SJAVAC:=true,\ - SRC:=$(LANGTOOLS_TOPDIR)/src/share/classes $(LANGTOOLS_OUTPUTDIR)/gensrc,\ - EXCLUDES:=com/sun/tools/javac/nio,\ - BIN:=$(LANGTOOLS_OUTPUTDIR)/btclasses/bootstrap)) - - $(eval $(call SetupArchive,ARCHIVE_BOOTSTRAP_JAVAC,$(BUILD_BOOTSTRAP_LANGTOOLS),\ - SRCS:=$(LANGTOOLS_OUTPUTDIR)/btclasses/bootstrap,\ - JAR:=$(LANGTOOLS_OUTPUTDIR)/dist/bootstrap/lib/javac.jar,\ - JARMAIN:=com.sun.tools.javac.Main)) - - $(eval $(call SetupArchive,ARCHIVE_BOOTSTRAP_JAVAH,$(BUILD_BOOTSTRAP_LANGTOOLS),\ - SRCS:=$(LANGTOOLS_OUTPUTDIR)/btclasses/bootstrap,\ - JAR:=$(LANGTOOLS_OUTPUTDIR)/dist/bootstrap/lib/javah.jar,\ - JARMAIN:=com.sun.tools.javah.Main)) - - $(eval $(call SetupArchive,ARCHIVE_BOOTSTRAP_JAVAP,$(BUILD_BOOTSTRAP_LANGTOOLS),\ - SRCS:=$(LANGTOOLS_OUTPUTDIR)/btclasses/bootstrap,\ - JAR:=$(LANGTOOLS_OUTPUTDIR)/dist/bootstrap/lib/javap.jar,\ - JARMAIN:=com.sun.tools.javap.Main)) - - $(eval $(call SetupArchive,ARCHIVE_BOOTSTRAP_JAVADOC,$(BUILD_BOOTSTRAP_LANGTOOLS),\ - SRCS:=$(LANGTOOLS_OUTPUTDIR)/btclasses/bootstrap,\ - JAR:=$(LANGTOOLS_OUTPUTDIR)/dist/bootstrap/lib/javadoc.jar,\ - JARMAIN:=com.sun.tools.javadoc.Main)) - - # GenStubs is used to bootstrap any dependencies from javac to the new JDK that is not - # yet built. It is currently not needed but might be again in the future. The following - # exercises the functionality to verify that it works. - TOOL_GENSTUBS_CMD=$(JAVA) \ - "-Xbootclasspath/p:$(LANGTOOLS_OUTPUTDIR)/dist/bootstrap/lib/javac.jar" \ - -classpath $(LANGTOOLS_OUTPUTDIR)/btclasses \ - genstubs.GenStubs - # We fetch source from the JDK... - JDKS=$(JDK_TOPDIR)/src/share/classes - # Build the list of classes to generate stubs from. java/util/Objects.java isn't - # currently needed, but is used as a demo for now. - STUBSOURCES:=$(shell $(FIND) $(JDKS) -name "*.java" | $(GREP) \ - -e "$(JDKS)/java/util/Objects.java") - # Rewrite the file names into class names because the GenStubs tool require this. - STUBCLASSES:=$(subst /,.,$(patsubst $(JDKS)/%.java,%,$(STUBSOURCES))) - - # Now setup the build recipe for genstubs. - $(LANGTOOLS_OUTPUTDIR)/genstubs/_the_stubs.d : $(STUBSOURCES) $(BUILD_TOOLS) \ - $(LANGTOOLS_OUTPUTDIR)/dist/bootstrap/lib/javac.jar \ - $(LANGTOOLS_OUTPUTDIR)/gensrc/_the_props.d - mkdir -p $(@D) - mkdir -p $(LANGTOOLS_OUTPUTDIR)/tmpstubs - echo Generating stubs from JDK sources. - ($(TOOL_GENSTUBS_CMD) -s $(LANGTOOLS_OUTPUTDIR)/tmpstubs -sourcepath $(JDKS) $(STUBCLASSES) && echo STUBS_ARE_CREATED=yes > $@) - if $(DIFF) -x "_the*" -rq $(LANGTOOLS_OUTPUTDIR)/tmpstubs $(LANGTOOLS_OUTPUTDIR)/genstubs > /dev/null 2>&1; then \ - echo No changes in the stubs!; \ - rm -rf $(LANGTOOLS_OUTPUTDIR)/tmpstubs; \ - else \ - echo Changes in stubs detected!; \ - rm -rf $(@D); \ - mv $(LANGTOOLS_OUTPUTDIR)/tmpstubs $(@D); \ - fi - echo STUBS_ARE_CREATED=yes > $@ - - # Trigger a generation of the genstubs java source code and a restart - # of the makefile to make sure that the following build setup use the - # newly created java files. - -include $(LANGTOOLS_OUTPUTDIR)/genstubs/_the_stubs.d - - ifeq ($(STUBS_ARE_CREATED),yes) - # Setup a compiler configuration using the intermediate javac in dist/bootstrap/lib/javac.jar - # that generates code for the new jdk that is being built. - # The code compiled by this compiler setup, cannot necessarily be run with the bootstrap jvm. - $(eval $(call SetupJavaCompiler,GENERATE_NEWBYTECODE,\ - JVM:=$(JAVA),\ - JAVAC:="-Xbootclasspath/p:$(LANGTOOLS_OUTPUTDIR)/dist/bootstrap/lib/javac.jar" \ - -jar $(LANGTOOLS_OUTPUTDIR)/dist/bootstrap/lib/javac.jar,\ - FLAGS:=-XDignore.symbol.file=true -Xlint:all$(COMMA)-deprecation -Werror,\ - SERVER_DIR:=$(SJAVAC_SERVER_DIR),\ - SERVER_JVM:=$(SJAVAC_SERVER_JAVA))) - - # javax.tools.JavaCompilerTool isn't really a suffix but this gets the file copied. - RESOURCE_SUFFIXES:=.gif .xml .css javax.tools.JavaCompilerTool - - $(eval $(call SetupJavaCompilation,BUILD_FULL_JAVAC,\ - SETUP:=GENERATE_NEWBYTECODE,\ - SRC:=$(LANGTOOLS_TOPDIR)/src/share/classes $(LANGTOOLS_OUTPUTDIR)/gensrc \ - $(LANGTOOLS_OUTPUTDIR)/genstubs,\ - EXCLUDES:=java/util java/io java/nio,\ - COPY:=$(RESOURCE_SUFFIXES),\ - BIN:=$(LANGTOOLS_OUTPUTDIR)/classes)) - - $(eval $(call SetupArchive,ARCHIVE_FULL_JAVAC,$(BUILD_FULL_JAVAC),\ - SETUP:=GENERATE_NEWBYTECODE,\ - SRCS:=$(LANGTOOLS_OUTPUTDIR)/classes,\ - SUFFIXES:=.class $(RESOURCE_SUFFIXES),\ - JAR:=$(LANGTOOLS_OUTPUTDIR)/dist/lib/classes.jar)) - - $(eval $(call SetupZipArchive,ZIP_FULL_JAVAC_SOURCE,\ - SRC:=$(LANGTOOLS_TOPDIR)/src/share/classes $(LANGTOOLS_OUTPUTDIR)/gensrc,\ - ZIP:=$(LANGTOOLS_OUTPUTDIR)/dist/lib/src.zip)) - - all: $(LANGTOOLS_OUTPUTDIR)/dist/lib/classes.jar \ - $(LANGTOOLS_OUTPUTDIR)/dist/lib/src.zip \ - $(LANGTOOLS_OUTPUTDIR)/dist/bootstrap/lib/javac.jar \ - $(LANGTOOLS_OUTPUTDIR)/dist/bootstrap/lib/javah.jar \ - $(LANGTOOLS_OUTPUTDIR)/dist/bootstrap/lib/javap.jar \ - $(LANGTOOLS_OUTPUTDIR)/dist/bootstrap/lib/javadoc.jar - - - endif +# Locate this Makefile +ifeq ($(filter /%,$(lastword $(MAKEFILE_LIST))),) + makefile_path:=$(CURDIR)/$(lastword $(MAKEFILE_LIST)) +else + makefile_path:=$(lastword $(MAKEFILE_LIST)) endif +repo_dir:=$(patsubst %/makefiles/Makefile,%,$(makefile_path)) + +# What is the name of this subsystem (langtools, corba, etc)? +subsystem_name:=$(notdir $(repo_dir)) + +# Try to locate top-level makefile +top_level_makefile:=$(repo_dir)/../common/makefiles/Makefile +ifneq ($(wildcard $(top_level_makefile)),) + $(info Will run $(subsystem_name) target on top-level Makefile) + $(info WARNING: This is a non-recommended way of building!) + $(info ===================================================) +else + $(info Cannot locate top-level Makefile. Is this repo not checked out as part of a complete forest?) + $(error Build from top-level Makefile instead) +endif + +all: + @$(MAKE) -f $(top_level_makefile) $(subsystem_name) diff --git a/make/jprt.properties b/make/jprt.properties index 2b044f0a174..984c2b1b4e8 100644 --- a/make/jprt.properties +++ b/make/jprt.properties @@ -79,20 +79,18 @@ jprt.make.rule.core.test.targets= \ ${jprt.my.test.target.set:TESTNAME=jdk_util}, \ ${jprt.my.test.target.set:TESTNAME=jdk_io}, \ ${jprt.my.test.target.set:TESTNAME=jdk_net}, \ - ${jprt.my.test.target.set:TESTNAME=jdk_nio1}, \ - ${jprt.my.test.target.set:TESTNAME=jdk_nio2}, \ - ${jprt.my.test.target.set:TESTNAME=jdk_nio3}, \ + ${jprt.my.test.target.set:TESTNAME=jdk_nio}, \ ${jprt.my.test.target.set:TESTNAME=jdk_security1}, \ ${jprt.my.test.target.set:TESTNAME=jdk_security2}, \ ${jprt.my.test.target.set:TESTNAME=jdk_security3}, \ ${jprt.my.test.target.set:TESTNAME=jdk_rmi}, \ - ${jprt.my.test.target.set:TESTNAME=jdk_management1}, \ - ${jprt.my.test.target.set:TESTNAME=jdk_management2}, \ + ${jprt.my.test.target.set:TESTNAME=jdk_management}, \ + ${jprt.my.test.target.set:TESTNAME=jdk_jmx}, \ ${jprt.my.test.target.set:TESTNAME=jdk_text}, \ - ${jprt.my.test.target.set:TESTNAME=jdk_tools1}, \ - ${jprt.my.test.target.set:TESTNAME=jdk_tools2}, \ + ${jprt.my.test.target.set:TESTNAME=jdk_tools}, \ + ${jprt.my.test.target.set:TESTNAME=jdk_jdi}, \ ${jprt.my.test.target.set:TESTNAME=jdk_jfr}, \ - ${jprt.my.test.target.set:TESTNAME=jdk_misc} + ${jprt.my.test.target.set:TESTNAME=jdk_other} # All vm test targets (testset=all) jprt.vm.all.test.targets= \ diff --git a/make/scripts/vsvars.sh b/make/scripts/vsvars.sh index 928777cb54f..7a162de9377 100644 --- a/make/scripts/vsvars.sh +++ b/make/scripts/vsvars.sh @@ -183,6 +183,16 @@ else fi fi +# VS2012 (VC11) +if [ "${VS110COMNTOOLS}" = "" ] ; then + VS110COMNTOOLS="${progfiles32}/Microsoft Visual Studio 11.0/Common7/Tools/" + export VS110COMNTOOLS +fi +vc11Bin32Dir=`envpath "${VS110COMNTOOLS}"`/../../VC/Bin +vc11Bin64Dir="${vc11Bin32Dir}" +vc11vars32Bat="vcvars32.bat" +vc11vars64Bat="vcvars64.bat" + # VS2010 (VC10) if [ "${VS100COMNTOOLS}" = "" ] ; then VS100COMNTOOLS="${progfiles32}/Microsoft Visual Studio 10.0/Common7/Tools/" @@ -227,7 +237,7 @@ vc7vars64Bat="SetEnv.cmd /X64" vcSelection="" # Parse options -usage="Usage: $0 [-help] [-debug] [-v] [-c] [-s] [-p] [-v10] [-v9] [-v8] [-v7] [-32] [-64]" +usage="Usage: $0 [-help] [-debug] [-v] [-c] [-s] [-p] [-v11] [-v10] [-v9] [-v8] [-v7] [-32] [-64]" while [ $# -gt 0 ] ; do if [ "$1" = "-help" ] ; then msg "${usage}" @@ -237,6 +247,7 @@ while [ $# -gt 0 ] ; do msg " -c Print out csh style output" msg " -s Print out sh style output" msg " -p Print out properties style output" + msg " -v11 Use Visual Studio 11 VS2012" msg " -v10 Use Visual Studio 10 VS2010" msg " -v9 Use Visual Studio 9 VS2008" msg " -v8 Use Visual Studio 8 VS2005" @@ -259,6 +270,13 @@ while [ $# -gt 0 ] ; do elif [ "$1" = "-p" ] ; then shellStyle="props" shift + elif [ "$1" = "-v11" ] ; then + vcBin32Dir="${vc11Bin32Dir}" + vcBin64Dir="${vc11Bin64Dir}" + vcvars32Bat="${vc11vars32Bat}" + vcvars64Bat="${vc11vars64Bat}" + vcSelection="11" + shift elif [ "$1" = "-v10" ] ; then vcBin32Dir="${vc10Bin32Dir}" vcBin64Dir="${vc10Bin64Dir}" @@ -438,6 +456,8 @@ echo VS_VS90COMNTOOLS="%VS90COMNTOOLS%" echo export VS_VS90COMNTOOLS echo VS_VS100COMNTOOLS="%VS100COMNTOOLS%" echo export VS_VS100COMNTOOLS +echo VS_VS110COMNTOOLS="%VS110COMNTOOLS%" +echo export VS_VS110COMNTOOLS echo VS_VCINSTALLDIR="%VCINSTALLDIR%" echo export VS_VCINSTALLDIR echo VS_VSINSTALLDIR="%VSINSTALLDIR%" @@ -570,7 +590,9 @@ printEnv MSSDK mssdk VS_MSSDK "${VS_MSSDK}" printEnv MSTOOLS mstools VS_MSTOOLS "${VS_MSTOOLS}" printEnv DEVENVDIR devenvdir VS_DEVENVDIR "${VS_DEVENVDIR}" printEnv WINDOWSSDKDIR windowssdkdir VS_WINDOWSSDKDIR "${VS_WINDOWSSDKDIR}" -if [ "${vcSelection}" = "10" ] ; then +if [ "${vcSelection}" = "11" ] ; then + printEnv VS110COMNTOOLS vs110comntools VS_VS110COMNTOOLS "${VS_VS110COMNTOOLS}" +elif [ "${vcSelection}" = "10" ] ; then printEnv VS100COMNTOOLS vs100comntools VS_VS100COMNTOOLS "${VS_VS100COMNTOOLS}" elif [ "${vcSelection}" = "9" ] ; then printEnv VS90COMNTOOLS vs90comntools VS_VS90COMNTOOLS "${VS_VS90COMNTOOLS}" diff --git a/test/Makefile b/test/Makefile index f1dfe1dbd3c..9e4d509b550 100644 --- a/test/Makefile +++ b/test/Makefile @@ -58,9 +58,9 @@ JDK_DEFAULT_TEST_LIST = \ jdk_io \ jdk_lang \ jdk_math \ - jdk_misc \ + jdk_other \ jdk_net \ - jdk_nio1 jdk_nio2 jdk_nio3 \ + jdk_nio \ jdk_security1 \ jdk_text \ jdk_util @@ -69,12 +69,14 @@ JDK_DEFAULT_TEST_LIST = \ JDK_NONDEFAULT_TEST_LIST = \ jdk_awt \ jdk_beans2 jdk_beans3 \ - jdk_management1 jdk_management2 \ + jdk_management \ + jdk_jmx \ jdk_security2 jdk_security3 \ jdk_rmi \ jdk_sound \ jdk_swing \ - jdk_tools1 jdk_tools2 \ + jdk_tools \ + jdk_jdi \ jdk_jfr # All jdk tests