view patches/openjdk/7170638-systemtap.patch @ 3235:cf098836ecbb

Update to build against April 2016 security fixes. Upstream changes: - S4459600: java -jar fails to run Main-Class if classname followed by whitespace. - S4963723: Implement SHA-224 - S6378099: RFE: Use libfontconfig to create/synthesise a fontconfig.properties - S6414899: P11Digest should support cloning - S6452854: Provide a flag to print the java configuration - S6578658: Request for raw RSA (NONEwithRSA) Signature support in SunMSCAPI - S6604496: Support for CKM_AES_CTR (counter mode) - S6742159: (launcher) improve the java launching mechanism - S6752622: java.awt.Font.getPeer throws "java.lang.InternalError: Not implemented" on Linux - S6753664: Support SHA256 (and higher) in SunMSCAPI - S6758881: (launcher) needs to throw NoClassDefFoundError instead of JavaRuntimeException - S6812738: SSL stress test with GF leads to 32 bit max process size in less than 5 minutes with PCKS11 provider - S6856415: Enabling java security manager will make program thrown wrong exception ( main method not found ) - S6892493: potential memory leaks in 2D font code indentified by parfait. - S6924489: sun.security.pkcs11.wrapper.PKCS11Exception: CKR_OPERATION_NOT_INITIALIZED - S6925851: Localize JRE into pt_BR - S6956398: make ephemeral DH key match the length of the certificate key - S6968053: (launcher) hide exceptions under certain launcher failures - S6977738: Deadlock between java.lang.ClassLoader and java.util.Properties - S6981001: (launcher) EnsureJREInstallation is not being called in order - S7017734: jdk7 message drop 1 translation integration - S7026184: (launcher) Regression: class with unicode name can't be launched by java. - S7033170: Cipher.getMaxAllowedKeyLength(String) throws NoSuchAlgorithmException - S7044060: Need to support NSA Suite B Cryptography algorithms - S7104161: test/sun/tools/jinfo/Basic.sh fails on Ubuntu - S7106773: 512 bits RSA key cannot work with SHA384 and SHA512 - S7125442: jar application located in two bytes character named folder cannot be run with JRE 7 u1/u2 - S7127906: (launcher) convert the launcher regression tests to java - S7141141: Add 3 new test scenarios for testing Main-Class attribute in jar manifest file - S7158988: jvm crashes while debugging on x86_32 and x86_64 - S7189944: (launcher) test/tools/launcher/Arrrrghs.java needs a couple of minor fixes - S7193318: C2: remove number of inputs requirement from Node's new operator - S8002116: This JdbReadTwiceTest.sh gets an exit 1 - S8004007: test/sun/tools/jinfo/Basic.sh fails on when runSA is set to true - S8006935: Need to take care of long secret keys in HMAC/PRF compuation - S8023990: Regression: postscript size increase from 6u18 - S8027705: com/sun/jdi/JdbMethodExitTest.sh fails when a background thread is generating events. - S8028537: PPC64: Updated the JDK regression tests to run on AIX - S8036132: Tab characters in test/com/sun/jdi files - S8038963: com/sun/jdi tests fail because cygwin's ps sometimes misses processes - S8039921: SHA1WithDSA with key > 1024 bits not working - S8044419: TEST_BUG: com/sun/jdi/JdbReadTwiceTest.sh fails when run under root - S8059661: Test SoftReference and OOM behavior - S8067364: Printing to Postscript doesn't support dieresis - S8072753: Nondeterministic wrong answer on arithmetic - S8073735: [TEST_BUG] compiler/loopopts/CountedLoopProblem.java got OOME - S8074146: [TEST_BUG] jdb has succeded to read an unreadable file - S8075584: test for 8067364 depends on hardwired text advance - S8087120: [GCC5] java.lang.StackOverflowError on Zero JVM initialization on non x86 platforms. - S8129952: Ensure thread consistency - S8132051: Better byte behavior - S8134297: NPE in GSSNameElement nameType check - S8134650: Xsl transformation gives different results in 8u66 - S8138593: Make DSA more fair - S8141229: [Parfait] Null pointer dereference in cmsstrcasecmp of cmserr.c - S8143002: [Parfait] JNI exception pending in fontpath.c:1300 - S8143167: Better buffering of XML strings - S8144430: Improve JMX connections - S8146477: [TEST_BUG] ClientJSSEServerJSSE.java failing again - S8146494: Better ligature substitution - S8146498: Better device table adjustments - S8146967: [TEST_BUG] javax/security/auth/SubjectDomainCombiner/Optimize.java should use 4-args ProtectionDomain constructor - S8147567: InterpreterRuntime::post_field_access not updated for boolean in JDK-8132051 - S8148446: (tz) Support tzdata2016a - S8148475: Missing SA Bytecode updates. - S8149170: Better byte behavior for native arguments - S8149367: PolicyQualifierInfo/index_Ctor JCk test fails with IOE: Invalid encoding for PolicyQualifierInfo - S8150012: Better byte behavior for reflection - S8150790: 8u75 L10n resource file translation update - S8154210: Zero: Better byte behaviour - S8155261: Zero broken since HS23 update - S8155699: Resolve issues created by backports in OpenJDK 6 b39 - S8155699: Resolve issues created by backports in OpenJDK 6 b39, part 2 - S8155746: Sync Windows export list in make/java/jli/Makefile with make/java/jli/mapfile-vers ChangeLog: 2016-05-03 Andrew John Hughes <gnu.andrew@member.fsf.org> * patches/openjdk/4963723-implement_sha-224.patch, * patches/openjdk/6578658-sunmscapi_nonewithrsa.patch, * patches/openjdk/6753664-sunmscapi_sha-256.patch, * patches/openjdk/6956398-ephemeraldhkeysize.patch, * patches/openjdk/7033170-getmaxallowedkeylength_throws_exception.patch, * patches/openjdk/7044060-support_nsa_suite_b.patch, * patches/openjdk/7106773-512_bits_rsa.patch, * patches/openjdk/8006935-long_keys_in_hmac_prf.patch, * patches/openjdk/8087120-zero_gcc5.patch, * patches/openjdk/p11cipher-6414899-p11digest_should_support_cloning.patch, * patches/openjdk/p11cipher-6604496-support_ckm_aes_ctr.patch, * patches/openjdk/p11cipher-6812738-native_cleanup.patch, * patches/openjdk/p11cipher-6924489-ckr_operation_not_initialized.patch, * patches/pr2486-768_dh.patch, * patches/pr2488-1024_dh.patch: Remove patches upstreamed in b39. * Makefile.am: (ICEDTEA_PATCHES): Remove above patches. * NEWS: Updated. * patches/openjdk/7170638-systemtap.patch: Regenerated due to copyright header change in jni.cpp.
author Andrew John Hughes <gnu.andrew@redhat.com>
date Wed, 04 May 2016 02:03:54 +0100
parents 4c54ff50c546
children
line wrap: on
line source

# HG changeset patch
# User coleenp
# Date 1349702334 14400
#      Mon Oct 08 09:18:54 2012 -0400
# Node ID c707a5af0d71958eb3f4e9512c7d3a71c06450e0
# Parent  9e00e448460e8bf3a4c0b7a7894c073907997c1e
7170638, PR2495: Use DTRACE_PROBE[N] in JNI Set and SetStatic Field.
Summary: Don't use HS_DTRACE_PROBE_CDECL_N and HS_DTRACE_PROBE_N directly.
Reviewed-by: coleenp, kamg, dholmes, sspitsyn
Contributed-by: Mark Wielaard <mjw@redhat.com>

diff -Nru openjdk.orig/hotspot/make/bsd/makefiles/buildtree.make openjdk/hotspot/make/bsd/makefiles/buildtree.make
--- openjdk.orig/hotspot/make/bsd/makefiles/buildtree.make	2016-05-03 23:39:23.113016118 +0100
+++ openjdk/hotspot/make/bsd/makefiles/buildtree.make	2016-05-04 00:26:06.226759102 +0100
@@ -162,6 +162,13 @@
   endif
 endif
 
+# if hotspot-only build and/or OPENJDK isn't passed down, need to set OPENJDK
+ifndef OPENJDK
+  ifneq ($(call if-has-altsrc,$(HS_COMMON_SRC)/,true,false),true)
+    OPENJDK=true
+  endif
+endif
+
 BUILDTREE_VARS += HOTSPOT_RELEASE_VERSION=$(HS_BUILD_VER) HOTSPOT_BUILD_VERSION=  JRE_RELEASE_VERSION=$(JRE_RELEASE_VERSION)
 
 BUILDTREE	= \
@@ -204,6 +211,7 @@
 	echo "SA_BUILD_VERSION = $(HS_BUILD_VER)"; \
 	echo "HOTSPOT_BUILD_USER = $(HOTSPOT_BUILD_USER)"; \
 	echo "HOTSPOT_VM_DISTRO = $(HOTSPOT_VM_DISTRO)"; \
+	echo "OPENJDK = $(OPENJDK)"; \
 	echo; \
 	echo "# Used for platform dispatching"; \
 	echo "TARGET_DEFINES  = -DTARGET_OS_FAMILY_\$$(Platform_os_family)"; \
diff -Nru openjdk.orig/hotspot/make/linux/makefiles/buildtree.make openjdk/hotspot/make/linux/makefiles/buildtree.make
--- openjdk.orig/hotspot/make/linux/makefiles/buildtree.make	2016-05-04 00:25:18.651544017 +0100
+++ openjdk/hotspot/make/linux/makefiles/buildtree.make	2016-05-04 00:26:06.226759102 +0100
@@ -155,6 +155,13 @@
   endif
 endif
 
+# if hotspot-only build and/or OPENJDK isn't passed down, need to set OPENJDK
+ifndef OPENJDK
+  ifneq ($(call if-has-altsrc,$(HS_COMMON_SRC)/,true,false),true)
+    OPENJDK=true
+  endif
+endif
+
 BUILDTREE_VARS += HOTSPOT_RELEASE_VERSION=$(HS_BUILD_VER) HOTSPOT_BUILD_VERSION=  JRE_RELEASE_VERSION=$(JRE_RELEASE_VERSION)
 
 BUILDTREE	= \
@@ -197,6 +204,7 @@
 	echo "SA_BUILD_VERSION = $(HS_BUILD_VER)"; \
 	echo "HOTSPOT_BUILD_USER = $(HOTSPOT_BUILD_USER)"; \
 	echo "HOTSPOT_VM_DISTRO = $(HOTSPOT_VM_DISTRO)"; \
+	echo "OPENJDK = $(OPENJDK)"; \
 	echo "DERIVATIVE_ID = $(DERIVATIVE_ID)"; \
 	echo "DISTRIBUTION_ID = $(DISTRIBUTION_ID)"; \
 	echo; \
diff -Nru openjdk.orig/hotspot/make/linux/makefiles/dtrace.make openjdk/hotspot/make/linux/makefiles/dtrace.make
--- openjdk.orig/hotspot/make/linux/makefiles/dtrace.make	2016-05-03 23:39:06.653287621 +0100
+++ openjdk/hotspot/make/linux/makefiles/dtrace.make	2016-05-04 00:26:06.226759102 +0100
@@ -1,5 +1,6 @@
 #
-# Copyright (c) 2005, 2008, Oracle and/or its affiliates. All rights reserved.
+# Copyright (c) 2005, 2012, Oracle and/or its affiliates. All rights reserved.
+# Copyright (c) 2012 Red Hat, Inc.
 # 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,3 +26,40 @@
 # Linux does not build jvm_db
 LIBJVM_DB =
 
+# Only OPENJDK builds test and support SDT probes currently.
+ifndef OPENJDK
+REASON = "This JDK does not support SDT probes"
+else
+
+# We need a recent GCC for the default
+ifeq "$(shell expr \( $(CC_VER_MAJOR) \>= 4 \) \& \( $(CC_VER_MINOR) \>= 4 \) )" "0"
+REASON = "gcc version is too old"
+else
+
+# But it does have a SystemTap dtrace compatible sys/sdt.h
+ifneq ($(ALT_SDT_H),)
+  SDT_H_FILE = $(ALT_SDT_H)
+else
+  SDT_H_FILE = /usr/include/sys/sdt.h
+endif
+DTRACE_ENABLED = $(shell test -f $(SDT_H_FILE) && echo $(SDT_H_FILE))
+REASON = "$(SDT_H_FILE) not found"
+
+ifneq ($(DTRACE_ENABLED),)
+  CFLAGS += -DDTRACE_ENABLED
+endif
+
+endif
+endif
+
+# Phony target used in vm.make build target to check whether enabled.
+.PHONY: dtraceCheck
+ifeq ($(DTRACE_ENABLED),)
+dtraceCheck:
+	$(QUIETLY) echo "**NOTICE** Dtrace support disabled: $(REASON)"
+else
+dtraceCheck:
+endif
+
+# It doesn't support HAVE_DTRACE_H though.
+
diff -Nru openjdk.orig/hotspot/make/linux/makefiles/vm.make openjdk/hotspot/make/linux/makefiles/vm.make
--- openjdk.orig/hotspot/make/linux/makefiles/vm.make	2016-05-04 00:25:18.651544017 +0100
+++ openjdk/hotspot/make/linux/makefiles/vm.make	2016-05-04 00:26:06.226759102 +0100
@@ -394,7 +394,7 @@
 
 #----------------------------------------------------------------------
 
-build: $(LIBJVM) $(LAUNCHER) $(LIBJSIG) $(LIBJVM_DB) $(BUILDLIBSAPROC)
+build: $(LIBJVM) $(LAUNCHER) $(LIBJSIG) $(LIBJVM_DB) $(BUILDLIBSAPROC) dtraceCheck
 
 install: install_jvm install_jsig install_saproc
 
diff -Nru openjdk.orig/hotspot/make/solaris/makefiles/buildtree.make openjdk/hotspot/make/solaris/makefiles/buildtree.make
--- openjdk.orig/hotspot/make/solaris/makefiles/buildtree.make	2016-05-03 23:39:09.757236421 +0100
+++ openjdk/hotspot/make/solaris/makefiles/buildtree.make	2016-05-04 00:26:06.226759102 +0100
@@ -147,6 +147,13 @@
   endif
 endif
 
+# if hotspot-only build and/or OPENJDK isn't passed down, need to set OPENJDK
+ifndef OPENJDK
+  ifneq ($(call if-has-altsrc,$(HS_COMMON_SRC)/,true,false),true)
+    OPENJDK=true
+  endif
+endif
+
 BUILDTREE_VARS += HOTSPOT_RELEASE_VERSION=$(HS_BUILD_VER) HOTSPOT_BUILD_VERSION= JRE_RELEASE_VERSION=$(JRE_RELEASE_VERSION) 
 
 BUILDTREE	= \
@@ -189,6 +196,7 @@
 	echo "SA_BUILD_VERSION = $(HS_BUILD_VER)"; \
 	echo "HOTSPOT_BUILD_USER = $(HOTSPOT_BUILD_USER)"; \
 	echo "HOTSPOT_VM_DISTRO = $(HOTSPOT_VM_DISTRO)"; \
+	echo "OPENJDK = $(OPENJDK)"; \
 	echo "$(LP64_SETTING/$(DATA_MODE))"; \
 	echo; \
 	echo "# Used for platform dispatching"; \
diff -Nru openjdk.orig/hotspot/src/share/vm/prims/jni.cpp openjdk/hotspot/src/share/vm/prims/jni.cpp
--- openjdk.orig/hotspot/src/share/vm/prims/jni.cpp	2016-05-03 23:59:23.705202879 +0100
+++ openjdk/hotspot/src/share/vm/prims/jni.cpp	2016-05-04 00:26:20.690520468 +0100
@@ -1,5 +1,6 @@
 /*
  * Copyright (c) 1997, 2016, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2012 Red Hat, Inc.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -2841,10 +2842,9 @@
 JNI_QUICK_ENTRY(void, jni_Set##Result##Field(JNIEnv *env, jobject obj, jfieldID fieldID, Argument value)) \
   JNIWrapper("Set" XSTR(Result) "Field"); \
 \
-  HS_DTRACE_PROBE_CDECL_N(hotspot_jni, Set##Result##Field__entry, \
-    ( JNIEnv*, jobject, jfieldID FP_SELECT_##Result(COMMA Argument,/*empty*/) ) ); \
-  HS_DTRACE_PROBE_N(hotspot_jni, Set##Result##Field__entry, \
-    ( env, obj, fieldID FP_SELECT_##Result(COMMA value,/*empty*/) ) ); \
+  FP_SELECT_##Result( \
+    DTRACE_PROBE4(hotspot_jni, Set##Result##Field__entry, env, obj, fieldID, value), \
+    DTRACE_PROBE3(hotspot_jni, Set##Result##Field__entry, env, obj, fieldID)); \
 \
   oop o = JNIHandles::resolve_non_null(obj); \
   klassOop k = o->klass(); \
@@ -3152,10 +3152,9 @@
 \
 JNI_ENTRY(void, jni_SetStatic##Result##Field(JNIEnv *env, jclass clazz, jfieldID fieldID, Argument value)) \
   JNIWrapper("SetStatic" XSTR(Result) "Field"); \
-  HS_DTRACE_PROBE_CDECL_N(hotspot_jni, SetStatic##Result##Field__entry,\
-    ( JNIEnv*, jclass, jfieldID FP_SELECT_##Result(COMMA Argument,/*empty*/) ) ); \
-  HS_DTRACE_PROBE_N(hotspot_jni, SetStatic##Result##Field__entry, \
-    ( env, clazz, fieldID FP_SELECT_##Result(COMMA value,/*empty*/) ) ); \
+  FP_SELECT_##Result( \
+     DTRACE_PROBE4(hotspot_jni, SetStatic##Result##Field__entry, env, clazz, fieldID, value), \
+     DTRACE_PROBE3(hotspot_jni, SetStatic##Result##Field__entry, env, clazz, fieldID)); \
 \
   JNIid* id = jfieldIDWorkaround::from_static_jfieldID(fieldID); \
   assert(id->is_static_field_id(), "invalid static field id"); \
diff -Nru openjdk.orig/hotspot/src/share/vm/utilities/dtrace.hpp openjdk/hotspot/src/share/vm/utilities/dtrace.hpp
--- openjdk.orig/hotspot/src/share/vm/utilities/dtrace.hpp	2016-05-03 23:39:18.405093776 +0100
+++ openjdk/hotspot/src/share/vm/utilities/dtrace.hpp	2016-05-04 00:26:06.226759102 +0100
@@ -1,5 +1,6 @@
 /*
- * Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2005, 2012, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2009, 2012 Red Hat, Inc.
  * 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,13 +33,17 @@
 #define DTRACE_ONLY(x) x
 #define NOT_DTRACE(x)
 
+#if defined(SOLARIS)
 // Work around dtrace tail call bug 6672627 until it is fixed in solaris 10.
 #define HS_DTRACE_WORKAROUND_TAIL_CALL_BUG() \
   do { volatile size_t dtrace_workaround_tail_call_bug = 1; } while (0)
 
-#if defined(SOLARIS)
+#define USDT1 1
+#elif defined(LINUX)
+#define HS_DTRACE_WORKAROUND_TAIL_CALL_BUG()
 #define USDT1 1
 #elif defined(__APPLE__)
+#define HS_DTRACE_WORKAROUND_TAIL_CALL_BUG()
 #define USDT2 1
 #include <sys/types.h>
 #include "dtracefiles/hotspot.h"
@@ -63,6 +68,11 @@
 #define DTRACE_PROBE3(a,b,c,d,e) {;}
 #define DTRACE_PROBE4(a,b,c,d,e,f) {;}
 #define DTRACE_PROBE5(a,b,c,d,e,f,g) {;}
+#define DTRACE_PROBE6(a,b,c,d,e,f,g,h) {;}
+#define DTRACE_PROBE7(a,b,c,d,e,f,g,h,i) {;}
+#define DTRACE_PROBE8(a,b,c,d,e,f,g,h,i,j) {;}
+#define DTRACE_PROBE9(a,b,c,d,e,f,g,h,i,j,k) {;}
+#define DTRACE_PROBE10(a,b,c,d,e,f,g,h,i,j,k,l) {;}
 
 #else /* USDT2 */
 
@@ -76,10 +86,18 @@
 #define HS_DTRACE_PROBE_FN(provider,name)\
   __dtrace_##provider##___##name
 
+#ifdef SOLARIS
+// Solaris dtrace needs actual extern function decls.
 #define HS_DTRACE_PROBE_DECL_N(provider,name,args) \
   DTRACE_ONLY(extern "C" void HS_DTRACE_PROBE_FN(provider,name) args)
 #define HS_DTRACE_PROBE_CDECL_N(provider,name,args) \
   DTRACE_ONLY(extern void HS_DTRACE_PROBE_FN(provider,name) args)
+#else
+// Systemtap dtrace compatible probes on GNU/Linux don't.
+// If dtrace is disabled this macro becomes NULL
+#define HS_DTRACE_PROBE_DECL_N(provider,name,args)
+#define HS_DTRACE_PROBE_CDECL_N(provider,name,args)
+#endif
 
 /* Dtrace probe declarations */
 #define HS_DTRACE_PROBE_DECL(provider,name) \
@@ -118,6 +136,8 @@
     uintptr_t,uintptr_t,uintptr_t))
 
 /* Dtrace probe definitions */
+#if defined(SOLARIS)
+// Solaris dtrace uses actual function calls.
 #define HS_DTRACE_PROBE_N(provider,name, args) \
   DTRACE_ONLY(HS_DTRACE_PROBE_FN(provider,name) args)
 
@@ -153,6 +173,33 @@
   HS_DTRACE_PROBE_N(provider,name,((uintptr_t)a0,(uintptr_t)a1,(uintptr_t)a2,\
     (uintptr_t)a3,(uintptr_t)a4,(uintptr_t)a5,(uintptr_t)a6,(uintptr_t)a7,\
     (uintptr_t)a8,(uintptr_t)a9))
+#else
+// Systemtap dtrace compatible probes on GNU/Linux use direct macros.
+// If dtrace is disabled this macro becomes NULL
+#define HS_DTRACE_PROBE(provider,name) HS_DTRACE_PROBE0(provider,name)
+#define HS_DTRACE_PROBE0(provider,name)\
+  DTRACE_PROBE(provider,name)
+#define HS_DTRACE_PROBE1(provider,name,a0)\
+  DTRACE_PROBE1(provider,name,a0)
+#define HS_DTRACE_PROBE2(provider,name,a0,a1)\
+  DTRACE_PROBE2(provider,name,a0,a1)
+#define HS_DTRACE_PROBE3(provider,name,a0,a1,a2)\
+  DTRACE_PROBE3(provider,name,a0,a1,a2)
+#define HS_DTRACE_PROBE4(provider,name,a0,a1,a2,a3)\
+  DTRACE_PROBE4(provider,name,a0,a1,a2,a3)
+#define HS_DTRACE_PROBE5(provider,name,a0,a1,a2,a3,a4)\
+  DTRACE_PROBE5(provider,name,a0,a1,a2,a3,a4)
+#define HS_DTRACE_PROBE6(provider,name,a0,a1,a2,a3,a4,a5)\
+  DTRACE_PROBE6(provider,name,a0,a1,a2,a3,a4,a5)
+#define HS_DTRACE_PROBE7(provider,name,a0,a1,a2,a3,a4,a5,a6)\
+  DTRACE_PROBE7(provider,name,a0,a1,a2,a3,a4,a5,a6)
+#define HS_DTRACE_PROBE8(provider,name,a0,a1,a2,a3,a4,a5,a6,a7)\
+  DTRACE_PROBE8(provider,name,a0,a1,a2,a3,a4,a5,a6,a7)
+#define HS_DTRACE_PROBE9(provider,name,a0,a1,a2,a3,a4,a5,a6,a7,a8)\
+  DTRACE_PROBE9(provider,name,a0,a1,a2,a3,a4,a5,a6,a7,a8)
+#define HS_DTRACE_PROBE10(provider,name,a0,a1,a2,a3,a4,a5,a6,a7,a8,a9)\
+  DTRACE_PROBE10(provider,name,a0,a1,a2,a3,a4,a5,a6,a7,a8,a9)
+#endif
 
 #endif /* !USDT2 */