<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<!DOCTYPE bugzilla SYSTEM "http://bugs.gentoo.org/bugzilla.dtd">

<bugzilla version="2.22.7"
          urlbase="http://bugs.gentoo.org/"
          maintainer="bugzilla@gentoo.org"
>

    <bug>
          <bug_id>55934</bug_id>
          
          <creation_ts>2004-07-02 21:55 0000</creation_ts>
          <short_desc>dev-java/bsf-2.3.0 won&apos;t compile with Rhino 1.4+</short_desc>
          <delta_ts>2004-08-01 09:18:48 0000</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>Gentoo Linux</product>
          <component>Applications</component>
          <version>unspecified</version>
          <rep_platform>All</rep_platform>
          <op_sys>Linux</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          
          <priority>P2</priority>
          <bug_severity>normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          
          <everconfirmed>1</everconfirmed>
          <reporter>howard_b_golden@yahoo.com</reporter>
          <assigned_to>karltk@gentoo.org</assigned_to>
          

      

      
          <long_desc isprivate="0">
            <who>howard_b_golden@yahoo.com</who>
            <bug_when>2004-07-02 21:55:03 0000</bug_when>
            <thetext>See bug #52121

This is an upstream bug in bsf. See http://nagoya.apache.org/bugzilla/show_bug.cgi?id=22558

According to the upstream diagnosis, the rhino DebuggableEngine interface was changed in 1.5. A correction is in the upstream CVS according to the upstream bugzilla.


Reproducible: Always
Steps to Reproduce:
1. emerge bsf # with rhino-1.5_rc5 in my case

Actual Results:  
Build compile fails. See bug #52121 for complete error listing. My error listing
is identical.

Expected Results:  
Should have compiled successfully,

This problem was found with several JDKs: blackdown-1.4.1, blackdown-1.4.2_rc1.

See upstream bug: http://nagoya.apache.org/bugzilla/show_bug.cgi?id=22558.

Portage 2.0.50-r8 (default-x86-1.4, gcc-3.3.3, glibc-2.3.3.20040420-r0,
2.6.5-gentoo)
=================================================================
System uname: 2.6.5-gentoo i686 AMD Athlon(tm) XP 2200+
Gentoo Base System version 1.5.1
Autoconf: sys-devel/autoconf-2.59-r4
Automake: sys-devel/automake-1.8.5-r1
ACCEPT_KEYWORDS=&quot;x86 ~x86&quot;
AUTOCLEAN=&quot;yes&quot;
CFLAGS=&quot;-mcpu=athlon-xp -O2 -pipe&quot;
CHOST=&quot;i686-pc-linux-gnu&quot;
COMPILER=&quot;gcc3&quot;
CONFIG_PROTECT=&quot;/etc /etc/tomcat /usr/X11R6/lib/X11/xkb /usr/kde/2/share/config
/usr/kde/3.2/share/config /usr/kde/3/share/config /usr/lib/mozilla/defaults/pref
/usr/share/config /usr/share/texmf/dvipdfm/config/
/usr/share/texmf/dvips/config/ /usr/share/texmf/tex/generic/config/
/usr/share/texmf/tex/platex/config/ /usr/share/texmf/xdvi/ /var/bind
/var/qmail/alias /var/qmail/control /var/vpopmail/domains /var/vpopmail/etc&quot;
CONFIG_PROTECT_MASK=&quot;/etc/gconf /etc/terminfo /etc/env.d&quot;
CXXFLAGS=&quot;-mcpu=athlon-xp -O2 -pipe&quot;
DISTDIR=&quot;/usr/portage/distfiles&quot;
FEATURES=&quot;autoaddcvs ccache sandbox usersandbox&quot;
GENTOO_MIRRORS=&quot;http://gentoo.binarycompass.org ftp://gentoo.ccccom.com
http://128.213.5.34/gentoo/ http://gentoo.seren.com/gentoo http://gentoo.ccccom.com&quot;
MAKEOPTS=&quot;-j1&quot;
PKGDIR=&quot;/usr/portage/packages&quot;
PORTAGE_TMPDIR=&quot;/var/tmp&quot;
PORTDIR=&quot;/usr/portage&quot;
PORTDIR_OVERLAY=&quot;/usr/local/portage&quot;
SYNC=&quot;rsync://rsync.gentoo.org/gentoo-portage&quot;
USE=&quot;3dnow X Xaw3d acl acpi acpi4linux alsa amd antlr apache2 apm arts
artswrappersuid avi berkdb bonobo caps cdr clamav crypt cups directfb dnd doc
droproot dv dvd dvdr encode esd ethereal evo expat f77 fbcon foomaticdb
foreign-package foreign-sysvinit freetds gb gcj gd gd-external gdbm gif ginac
gnome gnomedb gnuplot gpm gstreamer gtk gtk2 gtkhtml guile idea imap imlib
innodb ipv6 jabber jack java javamail jdepend jpeg jsch junit jython kde
kerberos ldap libg++ libgda libwww lids live log4j ltsp lua lzw-tiff mad maildir
matroska mbox mcal mdb memlimit mikmod mmx motif mozilla moznoirc moznomail mpeg
mysql ncurses nls nptl oav objc ocaml oci8 odbc ofx oggvorbis ooo-kde opengl
openssh oss pam parse-clocks pda pdflib pear-db perl pg-hier pic pie plotutils
png postgres ppds python qt quicktime radeon readline ruby ruby18 samba sasl sdk
sdl skey slang slp snmp speex spell sse ssl svga tcltk tcpd tetex theora tiff
truetype type1 unicode usb utf8 video_cards_radeon wmf wxwin wxwindows x86 xalan
xemacs xerces xml xml2 xmms xprint xv yahoo yv12 zeo zlib&quot;</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <who>howard_b_golden@yahoo.com</who>
            <bug_when>2004-07-03 21:00:58 0000</bug_when>
            <thetext>Created an attachment (id=34750)
Patch to allow compilation with Rhino 1.5_rc5.

I am attaching a diff file that consists of all patches to allow compilation
with Rhino-1.5_rc5. These patches were developed by Igor Bukanov, and are from
the BSF CVS on apache.org.</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <who>jack@jugband.net</who>
            <bug_when>2004-07-07 20:16:44 0000</bug_when>
            <thetext>Created an attachment (id=34975)
Same patch as in previous message, only for the actual package, not CVS

I have tested this patch with the existing ebuild and it seems to work fine.
</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <who>karltk@gentoo.org</who>
            <bug_when>2004-07-31 14:08:52 0000</bug_when>
            <thetext>Let me give this a bash.</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <who>karltk@gentoo.org</who>
            <bug_when>2004-08-01 09:08:01 0000</bug_when>
            <thetext>bsf will not even look for rhino at compile time, so I&apos;m stomped on how yo
manage to get into this problem.

I can only assume you have rhino in your system classpath.

I will look into fixing this.</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <who>karltk@gentoo.org</who>
            <bug_when>2004-08-01 09:18:48 0000</bug_when>
            <thetext>Fixed. Available for testing as dev-java/bsf-2.3.0-r1. Thanks a bundle!</thetext>
          </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>34750</attachid>
            <date>2004-07-03 21:00 0000</date>
            <desc>Patch to allow compilation with Rhino 1.5_rc5.</desc>
            <filename>Rhino-1.5.diff</filename>
            <type>text/plain</type>
            <data encoding="base64">PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQpSQ1MgZmlsZTogL2hvbWUvY3ZzcHVibGljL2pha2FydGEtYnNmL3NyYy9ic2Yt
Mi4zL2JzZi9zcmMvb3JnL2FwYWNoZS9ic2YvZW5naW5lcy9qYXZhc2NyaXB0L0F0dGljL0NvbXBp
bGF0aW9uVW5pdC5qYXZhLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjIKcmV0cmlldmluZyByZXZp
c2lvbiAxLjMKZGlmZiAtdSAtcjEuMiAtcjEuMwotLS0gamFrYXJ0YS1ic2Yvc3JjL2JzZi0yLjMv
YnNmL3NyYy9vcmcvYXBhY2hlL2JzZi9lbmdpbmVzL2phdmFzY3JpcHQvQXR0aWMvQ29tcGlsYXRp
b25Vbml0LmphdmEJMjAwMi8xMS8wNyAwMTo0OToxMgkxLjIKKysrIGpha2FydGEtYnNmL3NyYy9i
c2YtMi4zL2JzZi9zcmMvb3JnL2FwYWNoZS9ic2YvZW5naW5lcy9qYXZhc2NyaXB0L0F0dGljL0Nv
bXBpbGF0aW9uVW5pdC5qYXZhCTIwMDMvMDMvMTAgMDU6NTI6MzgJMS4zCkBAIC03NCw3ICs3NCw3
IEBACiAgKiBvZiBzY3JpcHQgaXMgc2xpY2VkIGludG8gY29tcGlsYXRpb24gdW5pdHMuCiAgKiBG
b3IgaW5zdGFuY2UsIHRoZSBzY3JpcHQgdGV4dCBtYXkgY29udGFpbiBhIGZ1bmN0aW9uCiAgKiBk
ZWNsYXJhdGlvbiBhbmQgYW4gZXhwcmVzc2lvbiB0byBldmFsLiBUaGUgY29tcGlsYXRpb24KLSAq
IHdpbGwgcmVzdWx0IGluIHR3byBjb21waWxhdGlvbiB1bml0czogdGhlIGZ1bmN0aW9uIGFuZCAK
KyAqIHdpbGwgcmVzdWx0IGluIHR3byBjb21waWxhdGlvbiB1bml0czogdGhlIGZ1bmN0aW9uIGFu
ZAogICogdGhlIGV4cHJlc3Npb24uIEVhY2ggY29tcGlsYXRpb24gdW5pdCB3aWxsIGNvcnJlc3Bv
bmQKICAqIHRvIGEgcmFuZ2Ugb2YgdGhlIGxpbmVzIG9mIHRoZSBvcmlnaW5hbCBzY3JpcHQgY29t
cGlsZWQuCiAgKiBBbGwgbGluZSBudW1iZXJzIGFyZSBnbG9iYWwgdG8gdGhlIGRvY3VtZW50IHRo
ZSBjb21waWxlZApAQCAtODIsODkgKzgyLDk1IEBACiAgKiBJdCBpcyBvbiBjb21waWxhdGlvbiB1
bml0cyB0aGF0IGJyZWFrcG9pbnRzIGNhbiBiZSBzZXQKICAqIG9yIHJlbW92ZWQsIG1vcmUgZXhh
Y3RseSBvbiB0aGUgRGVidWdnYWJsZVNjcmlwdCBhdHRhY2hlZAogICogdG8gdGhlbS4gU2VlIFJo
aW5vIGZvciBtb3JlIGRldGFpbHMuCi0gKiAKKyAqCiAgKiBAYXV0aG9yOiBPbGl2aWVyIEdydWJl
ci4KLSAqLyAKKyAqLwogcHVibGljIGNsYXNzIENvbXBpbGF0aW9uVW5pdCB7CiAKLQlGbk9yU2Ny
aXB0IG1fZm5PclNjcmlwdDsKLQlpbnQgbV9maXJzdExpbmU7Ci0JaW50IG1fbGluZUNvdW50Owot
CVN0cmluZyBtX2ZuTmFtZTsKLQlEZWJ1Z2dhYmxlU2NyaXB0IG1fZGJnU2NyaXB0OwotCWludCBt
X3ZhbGlkQnJrcHRMaW5lc1tdOwotCi0JLyoqCi0JICogQ29tcGlsYXRpb25Vbml0IGNvbnN0cnVj
dG9yIGNvbW1lbnQuCi0JICovCi0JcHVibGljIENvbXBpbGF0aW9uVW5pdChGbk9yU2NyaXB0IGZu
T3JTY3JpcHQsIERlYnVnZ2FibGVTY3JpcHQgZGJnU2NyaXB0KSB7Ci0KLQkJaW50IGxhc3RMaW5l
LCBsaW5lbm87Ci0KLQkJbV9mbk9yU2NyaXB0ID0gZm5PclNjcmlwdDsKLQkJbV9kYmdTY3JpcHQg
PSBkYmdTY3JpcHQ7Ci0KLQkJdHJ5IHsKLQkJCW1fdmFsaWRCcmtwdExpbmVzID0gZGJnU2NyaXB0
LmdldExpbmVOdW1iZXJzKCk7Ci0JCQltX2ZpcnN0TGluZSA9IDk5OTk5OwotCQkJbGFzdExpbmUg
PSAwOwotCQkJZm9yIChpbnQgbCA9IDA7IGwgPCBtX3ZhbGlkQnJrcHRMaW5lcy5sZW5ndGg7IGwr
KykgewotCQkJCWxpbmVubyA9IG1fdmFsaWRCcmtwdExpbmVzW2xdOwotCQkJCWlmIChtX2ZpcnN0
TGluZSA+IGxpbmVubykKLQkJCQkJbV9maXJzdExpbmUgPSBsaW5lbm87Ci0JCQkJaWYgKGxhc3RM
aW5lIDwgbGluZW5vKQotCQkJCQlsYXN0TGluZSA9IGxpbmVubzsKLQkJCX0KLQkJCW1fbGluZUNv
dW50ID0gbGFzdExpbmUgLSBtX2ZpcnN0TGluZSArIDE7Ci0JCX0gY2F0Y2ggKFRocm93YWJsZSB0
KSB7Ci0JCQlEZWJ1Z0xvZy5zdGRlcnJQcmludGxuKCJcbldhcm5pbmc6IGNhbid0IGdldCB2YWxp
ZCBsaW5lIG51bWJlcnMgZm9yIGJyZWFrcG9pbnRzLiIsIERlYnVnTG9nLkJTRl9MT0dfTDIpOwot
CQkJbV92YWxpZEJya3B0TGluZXMgPSBudWxsOwotCQl9Ci0KLQkJU2NyaXB0YWJsZSBzY3JpcHRh
YmxlID0gZGJnU2NyaXB0LmdldFNjcmlwdGFibGUoKTsKLQkJaWYgKHNjcmlwdGFibGUgaW5zdGFu
Y2VvZiBOYXRpdmVGdW5jdGlvbikgewotCQkJTmF0aXZlRnVuY3Rpb24gZiA9IChOYXRpdmVGdW5j
dGlvbikgc2NyaXB0YWJsZTsKLQkJCVN0cmluZyBuYW1lID0gZi5nZXRGdW5jdGlvbk5hbWUoKTsK
LQkJCWlmIChuYW1lLmxlbmd0aCgpID4gMCAmJiAhbmFtZS5lcXVhbHMoImFub255bW91cyIpKSB7
Ci0JCQkJbV9mbk5hbWUgPSBuYW1lOwotCQkJfQotCQl9Ci0JfQotCS8vLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCWJvb2xlYW4gY29u
dGFpbnMoaW50IGxpbmVubykgewotCQlyZXR1cm4gKG1fZmlyc3RMaW5lIDw9IGxpbmVubyAmJiBs
aW5lbm8gPCBtX2ZpcnN0TGluZSArIG1fbGluZUNvdW50KTsKLQl9Ci0JLyoqCi0JICogUmV0dXJu
cyB0cnVlIGlmIHRoZSBjb21waWxhdGlvbiB1bml0IGNvbnRhaW5zCi0JICogdGhlIGJyZWFrcG9p
bnQuIAotCSAqIE5vdGljZSBvbmx5IGJyZWFrcG9pbnQgZGVmaW5lZCBhdCBhIGxpbmUgbnVtYmVy
Ci0JICogYXJlIHN1cHBvcnRlZCBoZXJlLgotCSAqLwotCWJvb2xlYW4gY29udGFpbnMoQnJlYWtQ
b2ludCBicCkgewotCQl0cnkgewotCQkJcmV0dXJuIGNvbnRhaW5zKGJwLmdldExpbmVObygpKTsK
LQkJfSBjYXRjaCAoQlNGRXhjZXB0aW9uIGV4KSB7Ci0JCQlyZXR1cm4gZmFsc2U7Ci0JCX0KLQl9
Ci0JLyoqCi0JICogUHJvcGFnYXRlcyAoaS5lLiBzZXQpIHRoaXMgYnJlYWtwb2ludCB0byB0aGUg
dW5kZXJseWluZyBSaGlubwotCSAqIGVuZ2luZSBpZiBSaGlubyBoYXMgcHJvdmlkZWQgdXMgd2l0
aCB0aGUgdmFsaWQgbGluZXMKLQkgKiBpbmZvcm1hdGlvbi4gT3RoZXJ3aXNlLCBSaGlubyBjcmFz
aGVzIHdpdGggYSBOdWxsUG9pbnRlckV4Y2VwdGlvbi4KLQkgKi8KLQl2b2lkIHByb3BhZ2F0ZShp
bnQgbGluZW5vKSB7Ci0JCWlmIChtX3ZhbGlkQnJrcHRMaW5lcyAhPSBudWxsKSB7Ci0JCQltX2Ri
Z1NjcmlwdC5wbGFjZUJyZWFrcG9pbnQobGluZW5vKTsKLQkJfQotCX0KLQkvKioKLQkgKiBVbnBy
b3BhZ2F0ZXMgKGkuZS4gdW5zZXQpIHRoaXMgYnJlYWtwb2ludCB0byB0aGUgdW5kZXJseWluZyBS
aGlubwotCSAqIGVuZ2luZSBpZiBSaGlubyBoYXMgcHJvdmlkZWQgdXMgd2l0aCB0aGUgdmFsaWQg
bGluZXMKLQkgKiBpbmZvcm1hdGlvbi4gT3RoZXJ3aXNlLCBSaGlubyBjcmFzaGVzIHdpdGggYSBO
dWxsUG9pbnRlckV4Y2VwdGlvbi4KLQkgKi8KLQl2b2lkIHVucHJvcGFnYXRlKGludCBsaW5lbm8p
IHsKLQkJaWYgKG1fdmFsaWRCcmtwdExpbmVzICE9IG51bGwpIHsKLQkJCW1fZGJnU2NyaXB0LnJl
bW92ZUJyZWFrcG9pbnQobGluZW5vKTsKLQkJfQotCX0KKyAgICBGbk9yU2NyaXB0IG1fZm5PclNj
cmlwdDsKKyAgICBpbnQgbV9maXJzdExpbmU7CisgICAgaW50IG1fbGluZUNvdW50OworICAgIFN0
cmluZyBtX2ZuTmFtZTsKKyAgICBEZWJ1Z2dhYmxlU2NyaXB0IG1fZGJnU2NyaXB0OworICAgIGJv
b2xlYW5bXSBtX2JyZWFrcG9pbnRzOworCisgICAgLyoqCisgICAgICogQ29tcGlsYXRpb25Vbml0
IGNvbnN0cnVjdG9yIGNvbW1lbnQuCisgICAgICovCisgICAgcHVibGljIENvbXBpbGF0aW9uVW5p
dChGbk9yU2NyaXB0IGZuT3JTY3JpcHQsIERlYnVnZ2FibGVTY3JpcHQgZGJnU2NyaXB0KSB7CisK
KyAgICAgICAgbV9mbk9yU2NyaXB0ID0gZm5PclNjcmlwdDsKKyAgICAgICAgbV9kYmdTY3JpcHQg
PSBkYmdTY3JpcHQ7CisKKyAgICAgICAgaW50W10gbGluZXMgPSBkYmdTY3JpcHQuZ2V0TGluZU51
bWJlcnMoKTsKKyAgICAgICAgaWYgKGxpbmVzLmxlbmd0aCAhPSAwKSB7CisgICAgICAgICAgICBp
bnQgbGFzdExpbmU7CisgICAgICAgICAgICBtX2ZpcnN0TGluZSA9IGxpbmVzWzBdOworICAgICAg
ICAgICAgbGFzdExpbmUgPSBtX2ZpcnN0TGluZTsKKyAgICAgICAgICAgIGZvciAoaW50IGkgPSAx
OyBpICE9IGxpbmVzLmxlbmd0aDsgKytpKSB7CisgICAgICAgICAgICAgICAgaW50IGxpbmVubyA9
IGxpbmVzW2ldOworICAgICAgICAgICAgICAgIGlmIChtX2ZpcnN0TGluZSA+IGxpbmVubykgewor
ICAgICAgICAgICAgICAgICAgICBtX2ZpcnN0TGluZSA9IGxpbmVubzsKKyAgICAgICAgICAgICAg
ICB9IGVsc2UgaWYgKGxhc3RMaW5lIDwgbGluZW5vKSB7CisgICAgICAgICAgICAgICAgICAgIGxh
c3RMaW5lID0gbGluZW5vOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIG1fbGluZUNvdW50ID0gbGFzdExpbmUgLSBtX2ZpcnN0TGluZSArIDE7CisgICAgICAg
ICAgICBtX2JyZWFrcG9pbnRzID0gbmV3IGJvb2xlYW5bbV9saW5lQ291bnRdOworICAgICAgICB9
CisKKyAgICAgICAgU3RyaW5nIG5hbWUgPSBkYmdTY3JpcHQuZ2V0RnVuY3Rpb25OYW1lKCk7Cisg
ICAgICAgIGlmIChuYW1lICE9IG51bGwgJiYgbmFtZS5sZW5ndGgoKSAhPSAwICYmICFuYW1lLmVx
dWFscygiYW5vbnltb3VzIikpIHsKKyAgICAgICAgICAgIG1fZm5OYW1lID0gbmFtZTsKKyAgICAg
ICAgfQorICAgIH0KKyAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICBib29sZWFuIGNvbnRhaW5zKGludCBsaW5lbm8pIHsK
KyAgICAgICAgcmV0dXJuIChtX2ZpcnN0TGluZSA8PSBsaW5lbm8gJiYgbGluZW5vIDwgbV9maXJz
dExpbmUgKyBtX2xpbmVDb3VudCk7CisgICAgfQorICAgIC8qKgorICAgICAqIFJldHVybnMgdHJ1
ZSBpZiB0aGUgY29tcGlsYXRpb24gdW5pdCBjb250YWlucworICAgICAqIHRoZSBicmVha3BvaW50
LgorICAgICAqIE5vdGljZSBvbmx5IGJyZWFrcG9pbnQgZGVmaW5lZCBhdCBhIGxpbmUgbnVtYmVy
CisgICAgICogYXJlIHN1cHBvcnRlZCBoZXJlLgorICAgICAqLworICAgIGJvb2xlYW4gY29udGFp
bnMoQnJlYWtQb2ludCBicCkgeworICAgICAgICB0cnkgeworICAgICAgICAgICAgcmV0dXJuIGNv
bnRhaW5zKGJwLmdldExpbmVObygpKTsKKyAgICAgICAgfSBjYXRjaCAoQlNGRXhjZXB0aW9uIGV4
KSB7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICB9CisgICAgLyoq
CisgICAgICogU2V0IGEgYnJlYWtwb2ludCBhdCB0aGUgZ2l2ZW4gbGluZSBpZiBSaGlubyBoYXMg
cHJvdmlkZWQgdXMgd2l0aCB0aGUKKyAgICAgKiB2YWxpZCBsaW5lcyBpbmZvcm1hdGlvbi4KKyAg
ICAgKi8KKyAgICB2b2lkIHByb3BhZ2F0ZShpbnQgbGluZW5vKSB7CisgICAgICAgIGlmIChtX2Jy
ZWFrcG9pbnRzICE9IG51bGwpIHsKKyAgICAgICAgICAgIGludCBpID0gbGluZW5vIC0gbV9maXJz
dExpbmU7CisgICAgICAgICAgICBpZiAoMCA8PSBpICYmIGkgPCBtX2xpbmVDb3VudCkgeworICAg
ICAgICAgICAgICAgIG1fYnJlYWtwb2ludHNbaV0gPSB0cnVlOworICAgICAgICAgICAgfQorICAg
ICAgICB9CisgICAgfQorICAgIC8qKgorICAgICAqIENsZWFyIGEgYnJlYWtwb2ludCBhdCB0aGUg
Z2l2ZW4gbGluZSBpZiBSaGlubyBoYXMgcHJvdmlkZWQgdXMgd2l0aCB0aGUKKyAgICAgKiB2YWxp
ZCBsaW5lcyBpbmZvcm1hdGlvbi4KKyAgICAgKi8KKyAgICB2b2lkIHVucHJvcGFnYXRlKGludCBs
aW5lbm8pIHsKKyAgICAgICAgaWYgKG1fYnJlYWtwb2ludHMgIT0gbnVsbCkgeworICAgICAgICAg
ICAgaW50IGkgPSBsaW5lbm8gLSBtX2ZpcnN0TGluZTsKKyAgICAgICAgICAgIGlmICgwIDw9IGkg
JiYgaSA8IG1fbGluZUNvdW50KSB7CisgICAgICAgICAgICAgICAgbV9icmVha3BvaW50c1tpXSA9
IGZhbHNlOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgYm9vbGVhbiBo
YXNCcmVha3BvaW50KGludCBsaW5lbm8pIHsKKyAgICAgICAgaWYgKG1fYnJlYWtwb2ludHMgIT0g
bnVsbCkgeworICAgICAgICAgICAgaW50IGkgPSBsaW5lbm8gLSBtX2ZpcnN0TGluZTsKKyAgICAg
ICAgICAgIHJldHVybiAwIDw9IGkgJiYgaSA8IG1fbGluZUNvdW50ICYmIG1fYnJlYWtwb2ludHNb
aV07CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KIH0KPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQpSQ1MgZmlsZTogL2hvbWUvY3ZzcHVibGljL2pha2FydGEtYnNmL3NyYy9ic2YtMi4zL2JzZi9z
cmMvb3JnL2FwYWNoZS9ic2YvZW5naW5lcy9qYXZhc2NyaXB0L0F0dGljL0ZuT3JTY3JpcHQuamF2
YSx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4yCnJldHJpZXZpbmcgcmV2aXNpb24gMS4zCmRpZmYg
LXUgLXIxLjIgLXIxLjMKLS0tIGpha2FydGEtYnNmL3NyYy9ic2YtMi4zL2JzZi9zcmMvb3JnL2Fw
YWNoZS9ic2YvZW5naW5lcy9qYXZhc2NyaXB0L0F0dGljL0ZuT3JTY3JpcHQuamF2YQkyMDAyLzEx
LzA3IDAxOjQ5OjEyCTEuMgorKysgamFrYXJ0YS1ic2Yvc3JjL2JzZi0yLjMvYnNmL3NyYy9vcmcv
YXBhY2hlL2JzZi9lbmdpbmVzL2phdmFzY3JpcHQvQXR0aWMvRm5PclNjcmlwdC5qYXZhCTIwMDMv
MDMvMTAgMDU6NTI6MzgJMS4zCkBAIC03MSwyNSArNzEsMjUgQEAKICAqIFRoaXMgY2xhc3MgcmVw
cmVzZW50cyBhIGZ1bmN0aW9uIG9yIHNjcmlwdCwgdGhhdCBpcywKICAqIGEgcGllY2Ugb2YgYSBk
b2N1bWVudCB0aGF0IGlzIHByb3ZpZGVkIHRvIHRoZSBKYXZhU2NyaXB0CiAgKiBlbmdpbmUgZm9y
IGV2YWx1YXRpb24sIGV4ZWN1dGlvbiwgb3Igc2ltcGx5IGNvbXBpbGF0aW9uLgotICogCisgKgog
ICogQSBGbk9yU2NyaXB0IHJlcHJlc2VudHMgYSByYW5nZSBvZiBsaW5lcyBvciBjaGFyYWN0ZXJz
Ci0gKiBpbiBpdHMgZG9jdW1lbnQuIEZvciBub3csIFJoaW5vIG9ubHkgc3VwcG9ydHMgcmFuZ2Vz
IAorICogaW4gaXRzIGRvY3VtZW50LiBGb3Igbm93LCBSaGlubyBvbmx5IHN1cHBvcnRzIHJhbmdl
cwogICogb2YgbGluZXMsIHJlYWxseSwgYnV0IHRoZSBjb2RlIGZvciBvZmZzZXRzIGlzIHRoZXJl
IGFueXdheS4KICAqCiAgKiBXYXJuaW5nOiBPZmZzZXRzIGhhdmUgbmV2ZXIgYmVlbiBxdWl0ZSB0
ZXN0ZWQgeWV0Li4uCi0gKiAKKyAqCiAgKiBBIEZuT3JTY3JpcHQgaGFzIGNvbXBpbGF0aW9uIHVu
aXRzLiBXaGVuIFJoaW5vIGNvbXBpbGVzCiAgKiBhIGZ1bmN0aW9uIG9yIGEgc2NyaXB0LCBldmVu
IGluIGludGVycHJldGVkIG1vZGUgd2hlcmUgdGhlCiAgKiBjb21waWxhdGlvbiBpcyBkb25lIHRv
IEphdmFTY3JpcHQgYnl0ZWNvZGUsIGl0IGNhbGxzIGJhY2sKLSAqIGl0cyBkZWJ1Z2dlciB3aXRo
IGRpZmZlcmVudCBjb21waWxhdGlvbiB1bml0czsgc2VlIAorICogaXRzIGRlYnVnZ2VyIHdpdGgg
ZGlmZmVyZW50IGNvbXBpbGF0aW9uIHVuaXRzOyBzZWUKICAqIERlYnVnZ2VyOjpoYW5kbGVDb21w
aWxhdGlvbkRvbmUgbWV0aG9kIG9uIHRoZSBSaGlub0VuZ2luZURlYnVnZ2VyCiAgKiBjbGFzcy4K
ICAqCiAgKiBBIEZuT3JTY3JpcHQgYWxzbyBrZWVwcyB0cmFjayBvZiB0aGUga25vd24gYnJlYWtw
b2ludHMKICAqIGluIGl0cyByYW5nZSBvZiBsaW5lcyBvciBjaGFyYWN0ZXJzLiBJdCBtYWtlcyBz
dXJlCi0gKiB0aGF0IHRoZXkgYXJlIHByb3BhZ2F0ZWQgdG8gdGhlIHVuZGVybHlpbmcgUmhpbm8g
CisgKiB0aGF0IHRoZXkgYXJlIHByb3BhZ2F0ZWQgdG8gdGhlIHVuZGVybHlpbmcgUmhpbm8KICAq
IGVuZ2luZSAoaS5lLiBzZXQpIGFzIHdlbGwgYXMgdW5wcm9wYWdhdGVkIChpLmUuIHVuc2V0KS4K
LSAqICAKKyAqCiAgKiBAYXV0aG9yOiBPbGl2aWVyIEdydWJlcgogICovCiBwdWJsaWMgY2xhc3Mg
Rm5PclNjcmlwdCB7CkBAIC0xMDMsOSArMTAzLDExIEBACiAKICAgICBwcm90ZWN0ZWQgU3RyaW5n
QnVmZmVyIG1fdGV4dDsKIAotICAgIHByb3RlY3RlZCBWZWN0b3IgbV91bml0czsgLy8gb2YgQ29t
cGlsYXRpb25Vbml0LgogICAgIHByb3RlY3RlZCBTY3JpcHQgbV9zY3JpcHQ7CiAKKyAgICBwcml2
YXRlIFZlY3RvciBtX3VuaXRzOyAvLyBvZiBDb21waWxhdGlvblVuaXQuCisgICAgcHJpdmF0ZSBI
YXNodGFibGUgbV9mdW5jdGlvblRvVW5pdDsKKwogICAgIHByb3RlY3RlZCBIYXNodGFibGUgbV9m
dW5jdGlvbk1hcDsKIAogICAgIHB1YmxpYyBGbk9yU2NyaXB0KERvY3VtZW50Q2VsbCBjZWxsKSB7
CkBAIC0xMTYsOCArMTE4LDkgQEAKICAgICAgICAgbV9saW5lQ291bnQgPSAwOwogICAgICAgICBt
X2JyZWFrcG9pbnRzID0gbmV3IFZlY3RvcigpOwogICAgICAgICBtX3RleHQgPSBuZXcgU3RyaW5n
QnVmZmVyKCk7Ci0JCisKICAgICAgICAgbV91bml0cyA9IG5ldyBWZWN0b3IoKTsKKyAgICAgICAg
bV9mdW5jdGlvblRvVW5pdCA9IG5ldyBIYXNodGFibGUoKTsKICAgICAgICAgbV9mdW5jdGlvbk1h
cCA9IG5ldyBIYXNodGFibGUoKTsKICAgICB9CiAKQEAgLTEzMSw3ICsxMzQsNyBAQAogCiAgICAg
ICAgIG1fYnJlYWtwb2ludHMuYWRkRWxlbWVudChicCk7CiAKLSAgICAgICAgLy8gbm93LCBsb29r
IGZvciBhIHVuaXQgY29udGFpbmluZyBpdCBhbmQgCisgICAgICAgIC8vIG5vdywgbG9vayBmb3Ig
YSB1bml0IGNvbnRhaW5pbmcgaXQgYW5kCiAgICAgICAgIC8vIGlmIG9uZSBpcyBmb3VuZCwgc2V0
IHRoZSBicmVha3BvaW50IHVuaXQKICAgICAgICAgLy8gYW5kIHByb3BhZ2F0ZS4uLgogICAgICAg
ICBFbnVtZXJhdGlvbiBlOwpAQCAtMTQ3LDcgKzE1MCw3IEBACiAgICAgICAgIH0KICAgICAgICAg
cmV0dXJuIGJwOwogICAgIH0KLQkKKwogICAgIHByaXZhdGUgQnJlYWtQb2ludCBfcmVtb3ZlQnJl
YWtwb2ludChpbnQgYnJrcHRJZCkgewogICAgICAgICBFbnVtZXJhdGlvbiBlOwogICAgICAgICBC
cmVha1BvaW50IGJwOwpAQCAtMTczLDEzICsxNzYsMTMgQEAKICAgICAgICAgICAgIGJwID0gKEJy
ZWFrUG9pbnQpIGUubmV4dEVsZW1lbnQoKTsKICAgICAgICAgICAgIGlmIChicGlkID09IGJwLmdl
dElkKCkpIHsKICAgICAgICAgICAgICAgICBtX2JyZWFrcG9pbnRzLnJlbW92ZUVsZW1lbnQoYnAp
OwotICAgICAgICAgICAgICAgIGJwLnVucHJvcGFnYXRlKCk7CQorICAgICAgICAgICAgICAgIGJw
LnVucHJvcGFnYXRlKCk7CiAgICAgICAgICAgICAgICAgcmV0dXJuIGJwOwogICAgICAgICAgICAg
fQogICAgICAgICB9CiAgICAgICAgIHJldHVybiBudWxsOwogICAgIH0KLQkKKwogICAgIGJvb2xl
YW4gY29udGFpbnMoQnJlYWtQb2ludCBicCkgdGhyb3dzIEJTRkV4Y2VwdGlvbiB7CiAgICAgICAg
IGlmIChtX2xpbmVEZWZpbmVkKSB7CiAgICAgICAgICAgICBpbnQgbGluZSA9IGJwLmdldExpbmVO
bygpOwpAQCAtMTk0LDcgKzE5Nyw3IEBACiAgICAgLy8gVGhpcyBwcm90ZWN0ZWQgbWV0aG9kIHdv
cmtzIGFzIGEgZmFjdG9yeQogICAgIC8vIGZvciBsYW5ndWFnZS1zcGVjaWZpYyBicmVha3BvaW50
cy4KICAgICAvLyBUaGUgZGVmYXVsdCBiZWhhdmlvciBpcyB0byB1c2UgdGhlIHByb3ZpZGVkCi0g
ICAgLy8gZ2VuZXJpYyBicmVha3BvaW50LiAKKyAgICAvLyBnZW5lcmljIGJyZWFrcG9pbnQuCiAg
ICAgLy8gU2VlIGphdmFzY3JpcHQgZm9yIGFuIGV4YW1wbGUgb2YgbGFuZ3VhZ2Utc3BlY2lmaWMK
ICAgICAvLyBicmVha3BvaW50cy4KIApAQCAtMzYwLDE3ICszNjMsMTggQEAKIAogICAgIHB1Ymxp
YyB2b2lkIGFkZENvbXBpbGF0aW9uVW5pdChDb250ZXh0IGN4LAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBEZWJ1Z2dhYmxlU2NyaXB0IGRiZ1NjcmlwdCwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nQnVmZmVyIHNvdXJjZSkgeworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmcgc291cmNlKSB7CiAKICAgICAgICAgQ29t
cGlsYXRpb25Vbml0IHVuaXQ7CiAKICAgICAgICAgdW5pdCA9IG5ldyBDb21waWxhdGlvblVuaXQo
dGhpcywgZGJnU2NyaXB0KTsKICAgICAgICAgbV91bml0cy5hZGRFbGVtZW50KHVuaXQpOworICAg
ICAgICBtX2Z1bmN0aW9uVG9Vbml0LnB1dChkYmdTY3JpcHQsIHVuaXQpOwogICAgICAgICBpZiAo
dW5pdC5tX2ZuTmFtZSAhPSBudWxsKSB7CiAgICAgICAgICAgICBtX2Z1bmN0aW9uTWFwLnB1dCh1
bml0Lm1fZm5OYW1lLCB1bml0KTsKICAgICAgICAgfQogCi0gICAgICAgIC8vIEFzc29jaWF0ZSBi
cmVha3BvaW50cyB0byB0aGlzIHVuaXQgaWYgCisgICAgICAgIC8vIEFzc29jaWF0ZSBicmVha3Bv
aW50cyB0byB0aGlzIHVuaXQgaWYKICAgICAgICAgLy8gdGhlIHVuaXQgY29udGFpbnMgdGhlbS4u
LgogICAgICAgICBFbnVtZXJhdGlvbiBlOwogICAgICAgICBCcmVha1BvaW50IGJwOwpAQCAtMzgz
LDEzICszODcsMTcgQEAKICAgICAgICAgcHJvcGFnYXRlQWxsKCk7CiAgICAgfQogCisgICAgQ29t
cGlsYXRpb25Vbml0IGdldENvbXBpbGF0aW9uVW5pdChEZWJ1Z2dhYmxlU2NyaXB0IGRiZ1Njcmlw
dCkgeworICAgICAgICByZXR1cm4gKENvbXBpbGF0aW9uVW5pdCltX2Z1bmN0aW9uVG9Vbml0Lmdl
dChkYmdTY3JpcHQpOworICAgIH0KKwogICAgIHB1YmxpYyB2b2lkIGNvbXBpbGUoQ29udGV4dCBj
eCwgU2NyaXB0YWJsZSBnbG9iYWwpCiAgICAgICAgIHRocm93cyBCU0ZFeGNlcHRpb24sIElPRXhj
ZXB0aW9uIHsKIAogICAgICAgICBFbnVtZXJhdGlvbiBlOwogICAgICAgICBSZWFkZXIgcmVhZGVy
ID0gbmV3IFN0cmluZ1JlYWRlcihtX3RleHQudG9TdHJpbmcoKSk7CiAgICAgICAgIG1fc2NyaXB0
ID0KLSAgICAgICAgICAgIGN4LmNvbXBpbGVSZWFkZXIoZ2xvYmFsLCByZWFkZXIsIG1fY2VsbC5n
ZXROYW1lKCksIAorICAgICAgICAgICAgY3guY29tcGlsZVJlYWRlcihnbG9iYWwsIHJlYWRlciwg
bV9jZWxsLmdldE5hbWUoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9zdGFydExp
bmUsIG51bGwpOwogICAgICAgICBpZiAobV9zY3JpcHQgPT0gbnVsbCkKICAgICAgICAgICAgIHRo
cm93IG5ldyBCU0ZFeGNlcHRpb24oIkNvbXBpbGF0aW9uIG9mIHRoZSBzY3JpcHQgIgo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09ClJDUyBmaWxlOiAvaG9tZS9jdnNwdWJsaWMvamFrYXJ0YS1ic2Yvc3JjL2JzZi0yLjMvYnNm
L3NyYy9vcmcvYXBhY2hlL2JzZi9lbmdpbmVzL2phdmFzY3JpcHQvQXR0aWMvSmF2YVNjcmlwdEVu
Z2luZS5qYXZhLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjIKcmV0cmlldmluZyByZXZpc2lvbiAx
LjQKZGlmZiAtdSAtcjEuMiAtcjEuNAotLS0gamFrYXJ0YS1ic2Yvc3JjL2JzZi0yLjMvYnNmL3Ny
Yy9vcmcvYXBhY2hlL2JzZi9lbmdpbmVzL2phdmFzY3JpcHQvQXR0aWMvSmF2YVNjcmlwdEVuZ2lu
ZS5qYXZhCTIwMDIvMTEvMDcgMDE6NDk6MTIJMS4yCisrKyBqYWthcnRhLWJzZi9zcmMvYnNmLTIu
My9ic2Yvc3JjL29yZy9hcGFjaGUvYnNmL2VuZ2luZXMvamF2YXNjcmlwdC9BdHRpYy9KYXZhU2Ny
aXB0RW5naW5lLmphdmEJMjAwMy8wMy8xMCAwNTo1MjozOAkxLjQKQEAgLTEwNCw3ICsxMDQsNyBA
QAogICAgIHB1YmxpYyB2b2lkIGRpc2Nvbm5lY3RlZERlYnVnZ2VyTm90aWZ5KCkgewogICAgICAg
ICBtX3JoaW5vRGJnLmRpc2Nvbm5lY3RlZERlYnVnZ2VyTm90aWZ5KCk7CiAgICAgfQotCQorCiAg
ICAgQlNGRGVidWdNYW5hZ2VySW1wbCBnZXREZWJ1Z01hbmFnZXIoKSB7CiAgICAgICAgIHJldHVy
biBkYmdtZ3I7CiAgICAgfQpAQCAtMTE0LDcgKzExNCw3IEBACiAgICAgICAgIG1fcmhpbm9EYmcu
cGxhY2VCcmVha3BvaW50QXRMaW5lKGJya3B0aWQsIGRvY25hbWUsIGxpbmVubyk7CiAgICAgfQog
Ci0gICAgcHVibGljIHZvaWQgcGxhY2VCcmVha3BvaW50QXRPZmZzZXQoaW50IGJya3B0aWQsIFN0
cmluZyBkb2NuYW1lLCAKKyAgICBwdWJsaWMgdm9pZCBwbGFjZUJyZWFrcG9pbnRBdE9mZnNldChp
bnQgYnJrcHRpZCwgU3RyaW5nIGRvY25hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgaW50IG9mZnNldCkgdGhyb3dzIEJTRkV4Y2VwdGlvbiB7CiAgICAgICAgIG1f
cmhpbm9EYmcucGxhY2VCcmVha3BvaW50QXRPZmZzZXQoYnJrcHRpZCwgZG9jbmFtZSwgb2Zmc2V0
KTsKICAgICB9CkBAIC0xNDAsNyArMTQwLDYgQEAKICAgICBwdWJsaWMgT2JqZWN0IGNhbGwoT2Jq
ZWN0IG9iamVjdCwgU3RyaW5nIG1ldGhvZCwgT2JqZWN0W10gYXJncykKICAgICAgICAgdGhyb3dz
IEJTRkV4Y2VwdGlvbiB7CiAgICAgICAgIE9iamVjdCB0aGVSZXR1cm5WYWx1ZSA9IG51bGw7Ci0g
ICAgICAgIERlYnVnZ2FibGVFbmdpbmUgZW5naW5lOwogICAgICAgICBDb250ZXh0IGN4OwogICAg
ICAgICB0cnkgewogCkBAIC0xNjAsMTMgKzE1OSwxMiBAQAogCiAgICAgICAgICAgICAgICAgY3gu
c2V0T3B0aW1pemF0aW9uTGV2ZWwoLTEpOwogCi0gICAgICAgICAgICAgICAgZW5naW5lID0gY3gu
Z2V0RGVidWdnYWJsZUVuZ2luZSgpOwotICAgICAgICAgICAgICAgIGVuZ2luZS5zZXREZWJ1Z2dl
cihtX3JoaW5vRGJnKTsKKyAgICAgICAgICAgICAgICBjeC5zZXREZWJ1Z2dlcihtX3JoaW5vRGJn
LCBuZXcgUmhpbm9Db250ZXh0UHJveHkobV9yaGlub0RiZykpOwogCi0gICAgICAgICAgICAgICAg
dGhlUmV0dXJuVmFsdWUgPSBTY3JpcHRSdW50aW1lLmNhbGwoY3gsIGZ1biwgZ2xvYmFsLCBhcmdz
LCAKKyAgICAgICAgICAgICAgICB0aGVSZXR1cm5WYWx1ZSA9IFNjcmlwdFJ1bnRpbWUuY2FsbChj
eCwgZnVuLCBnbG9iYWwsIGFyZ3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgbnVsbCk7CiAKLSAgICAgICAgICAgIH0gCisgICAgICAgICAgICB9
CiAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICBjeC5zZXRPcHRpbWl6YXRpb25M
ZXZlbCgtMSk7CiAKQEAgLTE3NSwxMCArMTczLDkgQEAKIAogICAgICAgICAgICAgICAgIGN4LnNl
dE9wdGltaXphdGlvbkxldmVsKDApOwogCi0gICAgICAgICAgICAgICAgZW5naW5lID0gY3guZ2V0
RGVidWdnYWJsZUVuZ2luZSgpOwotICAgICAgICAgICAgICAgIGVuZ2luZS5zZXREZWJ1Z2dlcihu
dWxsKTsKKyAgICAgICAgICAgICAgICBjeC5zZXREZWJ1Z2dlcihudWxsLCBudWxsKTsKIAotICAg
ICAgICAgICAgICAgIHRoZVJldHVyblZhbHVlID0gU2NyaXB0UnVudGltZS5jYWxsKGN4LCBmdW4s
IGdsb2JhbCwgYXJncywgCisgICAgICAgICAgICAgICAgdGhlUmV0dXJuVmFsdWUgPSBTY3JpcHRS
dW50aW1lLmNhbGwoY3gsIGZ1biwgZ2xvYmFsLCBhcmdzLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bGwpOwogICAgICAgICAgICAgfQogICAg
ICAgICAgICAgaWYgKHRoZVJldHVyblZhbHVlIGluc3RhbmNlb2YgV3JhcHBlcikgewpAQCAtMTkz
LDkgKzE5MCwxNSBAQAogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIGRlY2xhcmVCZWFuKEJTRkRl
Y2xhcmVkQmVhbiBiZWFuKSB0aHJvd3MgQlNGRXhjZXB0aW9uIHsKLSAgICAgICAgLy8gTXVzdCB3
cmFwIG5vbi1zY3JpcHRhYmxlIG9iamVjdHMgYmVmb3JlIHByZXNlbnRpbmcgdG8gUmhpbm8KLSAg
ICAgICAgU2NyaXB0YWJsZSB3cmFwcGVkID0gQ29udGV4dC50b09iamVjdChiZWFuLmJlYW4sIGds
b2JhbCk7Ci0gICAgICAgIGdsb2JhbC5wdXQoYmVhbi5uYW1lLCBnbG9iYWwsIHdyYXBwZWQpOwor
ICAgICAgICBpZiAoKGJlYW4uYmVhbiBpbnN0YW5jZW9mIE51bWJlcikgfHwKKyAgICAgICAgICAg
IChiZWFuLmJlYW4gaW5zdGFuY2VvZiBTdHJpbmcpIHx8CisgICAgICAgICAgICAoYmVhbi5iZWFu
IGluc3RhbmNlb2YgQm9vbGVhbikpIHsKKyAgICAgICAgICAgIGdsb2JhbC5wdXQoYmVhbi5uYW1l
LCBnbG9iYWwsIGJlYW4uYmVhbik7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAvLyBN
dXN0IHdyYXAgbm9uLXNjcmlwdGFibGUgb2JqZWN0cyBiZWZvcmUgcHJlc2VudGluZyB0byBSaGlu
bworICAgICAgICAgICAgU2NyaXB0YWJsZSB3cmFwcGVkID0gQ29udGV4dC50b09iamVjdChiZWFu
LmJlYW4sIGdsb2JhbCk7CisgICAgICAgICAgICBnbG9iYWwucHV0KGJlYW4ubmFtZSwgZ2xvYmFs
LCB3cmFwcGVkKTsKKyAgICAgICAgfQogICAgIH0KIAogICAgIC8qKgpAQCAtMjEwLDcgKzIxMyw2
IEBACiAgICAgICAgIERvY3VtZW50Q2VsbCBjZWxsOwogICAgICAgICBGbk9yU2NyaXB0IGZuT3JT
Y3JpcHQ7CiAgICAgICAgIFNjcmlwdCBzY3JpcHQ7Ci0gICAgICAgIERlYnVnZ2FibGVFbmdpbmUg
ZW5naW5lOwogICAgICAgICBDb250ZXh0IGN4OwogCiAgICAgICAgIHRyeSB7CkBAIC0yMzEsMTMg
KzIzMyw3IEBACiAKICAgICAgICAgICAgICAgICBjeC5zZXRPcHRpbWl6YXRpb25MZXZlbCgtMSk7
CiAKLSAgICAgICAgICAgICAgICBlbmdpbmUgPSBjeC5nZXREZWJ1Z2dhYmxlRW5naW5lKCk7Ci0g
ICAgICAgICAgICAgICAgZW5naW5lLnNldERlYnVnZ2VyKG1fcmhpbm9EYmcpOwotCi0gICAgICAg
ICAgICAgICAgLy8gTXVjayB3LyB0aGlzIGlmZiBzb21lb25lIGVsc2UgaGFzbid0IGFscmVhZHkg
Z290IGl0IHRydWUKLSAgICAgICAgICAgICAgICBpZiAoIWVuZ2luZS5nZXRCcmVha05leHRMaW5l
KCkpIHsKLSAgICAgICAgICAgICAgICAgICAgZW5naW5lLnNldEJyZWFrTmV4dExpbmUoY2VsbC5n
ZXRFbnRyeUV4aXQoKSk7Ci0gICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGN4LnNl
dERlYnVnZ2VyKG1fcmhpbm9EYmcsIG5ldyBSaGlub0NvbnRleHRQcm94eShtX3JoaW5vRGJnKSk7
CiAKICAgICAgICAgICAgICAgICBmbk9yU2NyaXB0LmNvbXBpbGUoY3gsIGdsb2JhbCk7CiAgICAg
ICAgICAgICAgICAgbV9yaGlub0RiZy5zZXRDb21waWxpbmdGbk9yU2NyaXB0KG51bGwpOwpAQCAt
MjQ1LDcgKzI0MSw3IEBACiAKICAgICAgICAgICAgICAgICBpZiAoc2NyaXB0ICE9IG51bGwpIHJl
dHZhbCA9IHNjcmlwdC5leGVjKGN4LCBnbG9iYWwpOwogICAgICAgICAgICAgICAgIGVsc2UgcmV0
dmFsID0gbnVsbDsKLSAgICAgICAgICAgIH0gCisgICAgICAgICAgICB9CiAgICAgICAgICAgICBl
bHNlIHsKICAgICAgICAgICAgICAgICBjeC5zZXRPcHRpbWl6YXRpb25MZXZlbCgtMSk7CiAKQEAg
LTI1NCwxMSArMjUwLDEwIEBACiAKICAgICAgICAgICAgICAgICBjeC5zZXRPcHRpbWl6YXRpb25M
ZXZlbCgwKTsKIAotICAgICAgICAgICAgICAgIGVuZ2luZSA9IGN4LmdldERlYnVnZ2FibGVFbmdp
bmUoKTsKLSAgICAgICAgICAgICAgICBlbmdpbmUuc2V0RGVidWdnZXIobnVsbCk7CisgICAgICAg
ICAgICAgICAgY3guc2V0RGVidWdnZXIobnVsbCwgbnVsbCk7CiAKICAgICAgICAgICAgICAgICBy
ZXR2YWwgPSBjeC5ldmFsdWF0ZVN0cmluZyhnbG9iYWwsIHNjcmlwdFRleHQsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc291cmNlLCBsaW5lTm8sIAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvdXJjZSwgbGluZU5vLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bGwpOwogICAgICAgICAg
ICAgfQogCkBAIC0yOTYsMTQgKzI5MSwxNCBAQAogICAgICAgICAgICAgICAgIC8vIERpc3BsYXkg
aXRzIHN0YWNrIHRyYWNlIGFzIGEgZGlhZ25vc3RpYwogICAgICAgICAgICAgICAgIHRhcmdldCA9
IChUaHJvd2FibGUpIHZhbHVlOwogICAgICAgICAgICAgfQotICAgICAgICB9IAotICAgICAgICBl
bHNlIGlmICh0IGluc3RhbmNlb2YgRXZhbHVhdG9yRXhjZXB0aW9uIHx8IAorICAgICAgICB9Cisg
ICAgICAgIGVsc2UgaWYgKHQgaW5zdGFuY2VvZiBFdmFsdWF0b3JFeGNlcHRpb24gfHwKICAgICAg
ICAgICAgICAgICAgdCBpbnN0YW5jZW9mIFNlY3VyaXR5RXhjZXB0aW9uKSB7CiAgICAgICAgICAg
ICBtZXNzYWdlID0gdC5nZXRMb2NhbGl6ZWRNZXNzYWdlKCk7Ci0gICAgICAgIH0gCisgICAgICAg
IH0KICAgICAgICAgZWxzZSBpZiAodCBpbnN0YW5jZW9mIFJ1bnRpbWVFeGNlcHRpb24pIHsKICAg
ICAgICAgICAgIG1lc3NhZ2UgPSAiSW50ZXJuYWwgRXJyb3I6ICIgKyB0LnRvU3RyaW5nKCk7Ci0g
ICAgICAgIH0gCisgICAgICAgIH0KICAgICAgICAgZWxzZSBpZiAodCBpbnN0YW5jZW9mIFN0YWNr
T3ZlcmZsb3dFcnJvcikgewogICAgICAgICAgICAgbWVzc2FnZSA9ICJTdGFjayBPdmVyZmxvdyI7
CiAgICAgICAgIH0KQEAgLTMxMyw3ICszMDgsNyBAQAogICAgICAgICB9CiAKICAgICAgICAgLy9S
RU1JTkQ6IGNhbiB3ZSByZWNvdmVyIHRoZSBsaW5lIG51bWJlciBoZXJlPyAgSSB0aGluawotICAg
ICAgICAvLyBSaGlubyBkb2VzIHRoaXMgYnkgbG9va2luZyB1cCB0aGUgc3RhY2sgZm9yIGJ5dGVj
b2RlIAorICAgICAgICAvLyBSaGlubyBkb2VzIHRoaXMgYnkgbG9va2luZyB1cCB0aGUgc3RhY2sg
Zm9yIGJ5dGVjb2RlCiAgICAgICAgIC8vIHNlZSBDb250ZXh0LmdldFNvdXJjZVBvc2l0aW9uRnJv
bVN0YWNrKCkKICAgICAgICAgLy8gYnV0IEkgZG9uJ3QgdGhpbmsgdGhpcyB3b3VsZCB3b3JrIGlu
IGludGVycHJldGVkIG1vZGUKIApAQCAtMzIzLDcgKzMxOCw3IEBACiAgICAgICAgICAgICAvLyBj
b3JyZWN0ZWQgdGhlIHNpdHVhdGlvbiBieSBhYm9ydGluZyB0aGUgbG9vcCBhbmQKICAgICAgICAg
ICAgIC8vIGEgbG9uZyBzdGFja3RyYWNlIHdvdWxkIGVuZCB1cCBvbiB0aGUgdXNlcidzIGNvbnNv
bGUKICAgICAgICAgICAgIHRocm93IChFcnJvcikgdDsKLSAgICAgICAgfSAKKyAgICAgICAgfQog
ICAgICAgICBlbHNlIHsKICAgICAgICAgICAgIHRocm93IG5ldyBCU0ZFeGNlcHRpb24oQlNGRXhj
ZXB0aW9uLlJFQVNPTl9PVEhFUl9FUlJPUiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIkphdmFTY3JpcHQgRXJyb3I6ICIgKyBtZXNzYWdlLApAQCAtMzMzLDcgKzMyOCw3IEBA
CiAKICAgICAvKioKICAgICAgKiBpbml0aWFsaXplIHRoZSBlbmdpbmUuIHB1dCB0aGUgbWFuYWdl
ciBpbnRvIHRoZSBjb250ZXh0IC0+IG1hbmFnZXIKLSAgICAgKiBtYXAgaGFzaHRhYmxlIHRvby4g
CisgICAgICogbWFwIGhhc2h0YWJsZSB0b28uCiAgICAgICovCiAgICAgcHVibGljIHZvaWQgaW5p
dGlhbGl6ZShCU0ZNYW5hZ2VyIG1nciwgU3RyaW5nIGxhbmcsIFZlY3RvciBkZWNsYXJlZEJlYW5z
KQogICAgICAgICB0aHJvd3MgQlNGRXhjZXB0aW9uIHsKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2hv
bWUvY3ZzcHVibGljL2pha2FydGEtYnNmL3NyYy9ic2YtMi4zL2JzZi9zcmMvb3JnL2FwYWNoZS9i
c2YvZW5naW5lcy9qYXZhc2NyaXB0L0F0dGljL0pzQ29udGV4dFN0dWIuamF2YSx2CnJldHJpZXZp
bmcgcmV2aXNpb24gMS4yCnJldHJpZXZpbmcgcmV2aXNpb24gMS4zCmRpZmYgLXUgLXIxLjIgLXIx
LjMKLS0tIGpha2FydGEtYnNmL3NyYy9ic2YtMi4zL2JzZi9zcmMvb3JnL2FwYWNoZS9ic2YvZW5n
aW5lcy9qYXZhc2NyaXB0L0F0dGljL0pzQ29udGV4dFN0dWIuamF2YQkyMDAyLzExLzA3IDAxOjQ5
OjEyCTEuMgorKysgamFrYXJ0YS1ic2Yvc3JjL2JzZi0yLjMvYnNmL3NyYy9vcmcvYXBhY2hlL2Jz
Zi9lbmdpbmVzL2phdmFzY3JpcHQvQXR0aWMvSnNDb250ZXh0U3R1Yi5qYXZhCTIwMDMvMDMvMTAg
MDU6NTI6MzgJMS4zCkBAIC02OCwyMzUgKzY4LDI2NyBAQAogKiBAYXV0aG9yOiBBZG1pbmlzdHJh
dG9yCiAqLwogCi1wdWJsaWMgY2xhc3MgSnNDb250ZXh0U3R1YiAKK3B1YmxpYyBjbGFzcyBKc0Nv
bnRleHRTdHViCiBleHRlbmRzIG9yZy5hcGFjaGUuYnNmLmRlYnVnLnV0aWwuU2tlbGV0b24KICAg
IGltcGxlbWVudHMgSnNDb250ZXh0IHsKIAotCVJoaW5vQ29udGV4dFByb3h5IG1fcmNwOwotCVJo
aW5vRW5naW5lRGVidWdnZXIgbV9yaGlub0RiZzsKLQlEZWJ1Z0ZyYW1lIG1fZnJhbWU7Ci0JaW50
IG1fZnJhbWVubzsKLQlib29sZWFuIG1fYXRCcmVha3BvaW50OwotCWJvb2xlYW4gbV9pbnZhbGlk
OwotCi0JLyoqCi0JICogSnNDb250ZXh0U3R1YiBjb25zdHJ1Y3RvciBjb21tZW50LgotCSAqLwot
CXB1YmxpYyBKc0NvbnRleHRTdHViKFJoaW5vQ29udGV4dFByb3h5IHJjcCwgRGVidWdGcmFtZSBm
cmFtZSwgaW50IGZyYW1lbm8pCi0JdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbiB7Ci0JCQlzdXBlcihv
cmcuYXBhY2hlLmJzZi5kZWJ1Zy51dGlsLkRlYnVnQ29uc3RhbnRzLkpTX0NPTlRFWFRfVElEKTsK
LQkJCi0JCW1fcmhpbm9EYmcgPSByY3AuZ2V0Umhpbm9FbmdpbmVEZWJ1Z2dlcigpOwotCQltX3Jj
cCA9IHJjcDsKLQkJbV9mcmFtZSA9IGZyYW1lOwotCQltX2ZyYW1lbm8gPSBmcmFtZW5vOwotCQlt
X2ludmFsaWQgPSBmYWxzZTsKLQkJbV9hdEJyZWFrcG9pbnQgPSB0cnVlOwotCX0KLQkvLy0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0Jdm9pZCBhdEJy
ZWFrcG9pbnQoYm9vbGVhbiBhdGJya3B0KSB7Ci0JCW1fYXRCcmVha3BvaW50ID0gYXRicmtwdDsK
LQl9Ci0JcHVibGljIEpzT2JqZWN0IGJpbmQoU3RyaW5nIGlkKSB0aHJvd3MgUmVtb3RlRXhjZXB0
aW9uIHsKLQkJdHJ5IHsKLQkJCUNvbnRleHQuZW50ZXIoKTsKLQkJCVNjcmlwdGFibGUgb2JqID0g
bV9mcmFtZS5nZXRWYXJpYWJsZU9iamVjdCgpOwotCQkJT2JqZWN0IHByb3A7Ci0JCQl3aGlsZSAo
b2JqICE9IG51bGwpIHsKLQkJCQlTY3JpcHRhYmxlIG0gPSBvYmo7Ci0JCQkJZG8gewotCQkJCQlp
ZiAobS5oYXMoaWQsIG9iaikpCi0JCQkJCQlyZXR1cm4gbV9yaGlub0RiZy5tYXJzaGFsbFNjcmlw
dGFibGUob2JqKTsKLQkJCQkJbSA9IG0uZ2V0UHJvdG90eXBlKCk7Ci0JCQkJfSB3aGlsZSAobSAh
PSBudWxsKTsKLQkJCQlvYmogPSBvYmouZ2V0UGFyZW50U2NvcGUoKTsKLQkJCX0KLQkJCXRocm93
IG5ldyBKc2RpRXhjZXB0aW9uKCJOYW1lIG5vdCBpbiBzY29wZS4iKTsKLQkJfSBmaW5hbGx5IHsK
LQkJCUNvbnRleHQuZXhpdCgpOwotCQl9Ci0JfQotCS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQlwdWJsaWMgSnNDb2RlIGdldENvZGUoKSB7Ci0J
CWlmIChtX2ludmFsaWQpCi0JCQl0aHJvdyBuZXcgSnNkaUV4Y2VwdGlvbigiVGhpcyBjb250ZXh0
IG5vIGxvbmdlciBleGlzdHMuIik7Ci0JCWlmICghbV9hdEJyZWFrcG9pbnQpCi0JCQl0aHJvdyBu
ZXcgSnNkaUV4Y2VwdGlvbigiUmVzdW1lZCBjb250ZXh0LCBjYW4ndCBnZXQgdGhlIGNvZGUuIik7
Ci0KLQkJdHJ5IHsKLQkJCUNvbnRleHQuZW50ZXIoKTsKLQkJCXJldHVybiBudWxsOwotCQl9IGZp
bmFsbHkgewotCQkJQ29udGV4dC5leGl0KCk7Ci0JCX0KLQl9Ci0JcHVibGljIGludCBnZXREZXB0
aCgpIHsKLQkJcmV0dXJuIG1fZnJhbWVubzsKLQl9Ci0JLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCXB1YmxpYyBKc0VuZ2luZSBnZXRFbmdpbmUo
KSB7Ci0JCVJoaW5vRW5naW5lRGVidWdnZXIgcmVkYmc7Ci0JCXJlZGJnID0gbV9yY3AuZ2V0Umhp
bm9FbmdpbmVEZWJ1Z2dlcigpOwotCQlyZXR1cm4gKEpzRW5naW5lKSByZWRiZy5nZXREZWJ1Z0lu
dGVyZmFjZSgpOyAKLQkJCi0JfQotCS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0KLQlwdWJsaWMgaW50IGdldExpbmVOdW1iZXIoKSB7Ci0JCWlmICht
X2ludmFsaWQpCi0JCQl0aHJvdyBuZXcgSnNkaUV4Y2VwdGlvbigiVGhpcyBjb250ZXh0IG5vIGxv
bmdlciBleGlzdHMuIik7Ci0JCWlmICghbV9hdEJyZWFrcG9pbnQpCi0JCQl0aHJvdyBuZXcgSnNk
aUV4Y2VwdGlvbigiUmVzdW1lZCBjb250ZXh0LCBjYW4ndCBnZXQgbGluZSBudW1iZXIuIik7Ci0K
LQkJdHJ5IHsKLQkJCUNvbnRleHQuZW50ZXIoKTsKLQkJCXJldHVybiBtX2ZyYW1lLmdldExpbmVO
dW1iZXIoKTsKLQkJfSBmaW5hbGx5IHsKLQkJCUNvbnRleHQuZXhpdCgpOwotCQl9Ci0JfQotCS8v
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICAK
LQlwdWJsaWMgSnNPYmplY3QgZ2V0U2NvcGUoKSB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uIHsKLQot
CQlpZiAobV9pbnZhbGlkKQotCQkJdGhyb3cgbmV3IEpzZGlFeGNlcHRpb24oIlRoaXMgY29udGV4
dCBubyBsb25nZXIgZXhpc3RzLiIpOwotCQlpZiAoIW1fYXRCcmVha3BvaW50KQotCQkJdGhyb3cg
bmV3IEpzZGlFeGNlcHRpb24oIlJlc3VtZWQgY29udGV4dCwgY2FuJ3QgZ2V0IGxpbmUgbnVtYmVy
LiIpOwotCi0JCXRyeSB7Ci0JCQlDb250ZXh0LmVudGVyKCk7Ci0JCQlTY3JpcHRhYmxlIHZhcm9i
aiA9IG1fZnJhbWUuZ2V0VmFyaWFibGVPYmplY3QoKTsKLQkJCUpzT2JqZWN0IHNjb3BlID0gbV9y
aGlub0RiZy5tYXJzaGFsbFNjcmlwdGFibGUodmFyb2JqKTsKLQkJCXJldHVybiBzY29wZTsKLQkJ
fSBmaW5hbGx5IHsKLQkJCUNvbnRleHQuZXhpdCgpOwotCQl9Ci0JfQotCS8vLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICAKLQlwdWJsaWMgU3Ry
aW5nIGdldFNvdXJjZU5hbWUoKSB7Ci0JCWlmIChtX2ludmFsaWQpCi0JCQl0aHJvdyBuZXcgSnNk
aUV4Y2VwdGlvbigiVGhpcyBjb250ZXh0IG5vIGxvbmdlciBleGlzdHMuIik7Ci0JCWlmICghbV9h
dEJyZWFrcG9pbnQpCi0JCQl0aHJvdyBuZXcgSnNkaUV4Y2VwdGlvbigiUmVzdW1lZCBjb250ZXh0
LCBjYW4ndCBnZXQgbGluZSBudW1iZXIuIik7Ci0KLQkJdHJ5IHsKLQkJCUNvbnRleHQuZW50ZXIo
KTsKLQkJCXJldHVybiBtX2ZyYW1lLmdldFNvdXJjZU5hbWUoKTsKLQkJfSBmaW5hbGx5IHsKLQkJ
CUNvbnRleHQuZXhpdCgpOwotCQl9Ci0JfQotCS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICAKLQlwdWJsaWMgSnNPYmplY3QgZ2V0VGhpcygp
IHRocm93cyBSZW1vdGVFeGNlcHRpb24gewotCi0JCWlmIChtX2ludmFsaWQpCi0JCQl0aHJvdyBu
ZXcgSnNkaUV4Y2VwdGlvbigiVGhpcyBjb250ZXh0IG5vIGxvbmdlciBleGlzdHMuIik7Ci0JCWlm
ICghbV9hdEJyZWFrcG9pbnQpCi0JCQl0aHJvdyBuZXcgSnNkaUV4Y2VwdGlvbigiUmVzdW1lZCBj
b250ZXh0LCBjYW4ndCBnZXQgbGluZSBudW1iZXIuIik7Ci0KLQkJdHJ5IHsKLQkJCUNvbnRleHQu
ZW50ZXIoKTsKLQkJCUpzT2JqZWN0IHRoaXNvYmogPSBudWxsOwotCQkJU2NyaXB0YWJsZSBvYmog
PSBudWxsOwotCQkJTmF0aXZlQ2FsbCBjYWxsID0gbnVsbDsKLQkJCVNjcmlwdGFibGUgdmFyb2Jq
ID0gbV9mcmFtZS5nZXRWYXJpYWJsZU9iamVjdCgpOwotCQkJaWYgKHZhcm9iaiBpbnN0YW5jZW9m
IE5hdGl2ZUNhbGwpIHsKLQkJCQljYWxsID0gKE5hdGl2ZUNhbGwpIHZhcm9iajsKLQkJCQlvYmog
PSBjYWxsLmdldFRoaXNPYmooKTsKLQkJCQl0aGlzb2JqID0gbV9yaGlub0RiZy5tYXJzaGFsbFNj
cmlwdGFibGUodmFyb2JqKTsKLQkJCX0KLQkJCXJldHVybiB0aGlzb2JqOwotCQl9IGZpbmFsbHkg
ewotCQkJQ29udGV4dC5leGl0KCk7Ci0JCX0KLQl9Ci0JLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCXZvaWQgaW52YWxpZGF0ZSgpIHsKLQkJbV9p
bnZhbGlkID0gdHJ1ZTsKLQl9Ci0JLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0gIAotCXB1YmxpYyBib29sZWFuIGlzRXZhbENvbnRleHQoKSB7
Ci0JCWlmIChtX2ludmFsaWQpCi0JCQl0aHJvdyBuZXcgSnNkaUV4Y2VwdGlvbigiVGhpcyBjb250
ZXh0IG5vIGxvbmdlciBleGlzdHMuIik7Ci0JCWlmICghbV9hdEJyZWFrcG9pbnQpCi0JCQl0aHJv
dyBuZXcgSnNkaUV4Y2VwdGlvbigiUmVzdW1lZCBjb250ZXh0LCBjYW4ndCBnZXQgbGluZSBudW1i
ZXIuIik7Ci0KLQkJdHJ5IHsKLQkJCUNvbnRleHQuZW50ZXIoKTsKLQkJCXJldHVybiBmYWxzZTsK
LQkJfSBmaW5hbGx5IHsKLQkJCUNvbnRleHQuZXhpdCgpOwotCQl9Ci0JfQotCS8vLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICAKLQlwdWJsaWMg
Ym9vbGVhbiBpc0Z1bmN0aW9uQ29udGV4dCgpIHsKLQkJaWYgKG1faW52YWxpZCkKLQkJCXRocm93
IG5ldyBKc2RpRXhjZXB0aW9uKCJUaGlzIGNvbnRleHQgbm8gbG9uZ2VyIGV4aXN0cy4iKTsKLQkJ
aWYgKCFtX2F0QnJlYWtwb2ludCkKLQkJCXRocm93IG5ldyBKc2RpRXhjZXB0aW9uKCJSZXN1bWVk
IGNvbnRleHQsIGNhbid0IGdldCBsaW5lIG51bWJlci4iKTsKLQotCQl0cnkgewotCQkJQ29udGV4
dC5lbnRlcigpOwotCQkJcmV0dXJuIGZhbHNlOwotCQl9IGZpbmFsbHkgewotCQkJQ29udGV4dC5l
eGl0KCk7Ci0JCX0KLQl9Ci0JLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0gIAotCXB1YmxpYyBib29sZWFuIGlzU2NyaXB0Q29udGV4dCgpIHsK
LQkJaWYgKG1faW52YWxpZCkKLQkJCXRocm93IG5ldyBKc2RpRXhjZXB0aW9uKCJUaGlzIGNvbnRl
eHQgbm8gbG9uZ2VyIGV4aXN0cy4iKTsKLQkJaWYgKCFtX2F0QnJlYWtwb2ludCkKLQkJCXRocm93
IG5ldyBKc2RpRXhjZXB0aW9uKCJSZXN1bWVkIGNvbnRleHQsIGNhbid0IGdldCBsaW5lIG51bWJl
ci4iKTsKLQkJdHJ5IHsKLQkJCUNvbnRleHQuZW50ZXIoKTsKLQkJCXJldHVybiB0cnVlOwotCQl9
IGZpbmFsbHkgewotCQkJQ29udGV4dC5leGl0KCk7Ci0JCX0KLQl9Ci0JcHVibGljIE9iamVjdCBs
b29rdXBOYW1lKFN0cmluZyBuYW1lKSB7Ci0KLQkJdHJ5IHsKLQkJCUNvbnRleHQuZW50ZXIoKTsK
LQkJCVNjcmlwdGFibGUgb2JqID0gbV9mcmFtZS5nZXRWYXJpYWJsZU9iamVjdCgpOwotCQkJT2Jq
ZWN0IHByb3A7Ci0JCQl3aGlsZSAob2JqICE9IG51bGwpIHsKLQkJCQlTY3JpcHRhYmxlIG0gPSBv
Ymo7Ci0JCQkJZG8gewotCQkJCQlPYmplY3QgcmVzdWx0ID0gbS5nZXQobmFtZSwgb2JqKTsKLQkJ
CQkJaWYgKHJlc3VsdCAhPSBTY3JpcHRhYmxlLk5PVF9GT1VORCkKLQkJCQkJCXJldHVybiByZXN1
bHQ7Ci0JCQkJCW0gPSBtLmdldFByb3RvdHlwZSgpOwotCQkJCX0gd2hpbGUgKG0gIT0gbnVsbCk7
Ci0JCQkJb2JqID0gb2JqLmdldFBhcmVudFNjb3BlKCk7Ci0JCQl9Ci0JCQl0aHJvdyBuZXcgSnNk
aUV4Y2VwdGlvbigiTmFtZSBpcyBub3QgaW4gc2NvcGUuIik7Ci0JCX0gZmluYWxseSB7Ci0JCQlD
b250ZXh0LmV4aXQoKTsKLQkJfQotCX0KLQkvKioKLQkgKiBMb29rcyB1cCBhIG5hbWUgaW4gdGhl
IHNjb3BlIGNoYWluIGFuZCByZXR1cm5zIGl0cyB2YWx1ZS4KLQkgKi8KLQlwdWJsaWMgT2JqZWN0
IGxvb2t1cE5hbWUoU2NyaXB0YWJsZSBzY29wZUNoYWluLCBTdHJpbmcgaWQpIHsKLQotCQl0cnkg
ewotCQkJQ29udGV4dC5lbnRlcigpOwotCQkJU2NyaXB0YWJsZSBvYmogPSBzY29wZUNoYWluOwot
CQkJT2JqZWN0IHByb3A7Ci0JCQl3aGlsZSAob2JqICE9IG51bGwpIHsKLQkJCQlTY3JpcHRhYmxl
IG0gPSBvYmo7Ci0JCQkJZG8gewotCQkJCQlPYmplY3QgcmVzdWx0ID0gbS5nZXQoaWQsIG9iaik7
Ci0JCQkJCWlmIChyZXN1bHQgIT0gU2NyaXB0YWJsZS5OT1RfRk9VTkQpCi0JCQkJCQlyZXR1cm4g
cmVzdWx0OwotCQkJCQltID0gbS5nZXRQcm90b3R5cGUoKTsKLQkJCQl9IHdoaWxlIChtICE9IG51
bGwpOwotCQkJCW9iaiA9IG9iai5nZXRQYXJlbnRTY29wZSgpOwotCQkJfQotCQkJcmV0dXJuIG51
bGw7Ci0JCX0gZmluYWxseSB7Ci0JCQlDb250ZXh0LmV4aXQoKTsKLQkJfQotCX0KKyAgICBSaGlu
b0NvbnRleHRQcm94eSBtX3JjcDsKKyAgICBSaGlub0VuZ2luZURlYnVnZ2VyIG1fcmhpbm9EYmc7
CisgICAgaW50IG1fZnJhbWVubzsKKyAgICBpbnQgbV9saW5lbm87CisgICAgYm9vbGVhbiBtX2F0
QnJlYWtwb2ludDsKKyAgICBib29sZWFuIG1faW52YWxpZDsKKworICAgIENvbXBpbGF0aW9uVW5p
dCBtX3VuaXQ7CisgICAgU2NyaXB0YWJsZSBtX3ZhcmlhYmxlT2JqZWN0OworICAgIFNjcmlwdGFi
bGUgbV90aGlzT2JqOworCisgICAgLyoqCisgICAgICogSnNDb250ZXh0U3R1YiBjb25zdHJ1Y3Rv
ciBjb21tZW50LgorICAgICAqLworICAgIEpzQ29udGV4dFN0dWIoUmhpbm9Db250ZXh0UHJveHkg
cmNwLCBDb21waWxhdGlvblVuaXQgdW5pdCkKKyAgICB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uIHsK
KyAgICAgICAgc3VwZXIob3JnLmFwYWNoZS5ic2YuZGVidWcudXRpbC5EZWJ1Z0NvbnN0YW50cy5K
U19DT05URVhUX1RJRCk7CisKKyAgICAgICAgbV9yaGlub0RiZyA9IHJjcC5nZXRSaGlub0VuZ2lu
ZURlYnVnZ2VyKCk7CisgICAgICAgIG1fcmNwID0gcmNwOworICAgICAgICBtX3VuaXQgPSB1bml0
OworICAgICAgICBtX2ludmFsaWQgPSBmYWxzZTsKKyAgICAgICAgbV9hdEJyZWFrcG9pbnQgPSB0
cnVlOworICAgIH0KKworICAgIERlYnVnRnJhbWUgZ2V0Umhpbm9EZWJ1Z0ZyYW1lKCkgeworICAg
ICAgICByZXR1cm4gbmV3IFJoaW5vRGVidWdGcmFtZSh0aGlzKTsKKyAgICB9CisKKyAgICAvLy0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgdm9p
ZCBhdEJyZWFrcG9pbnQoYm9vbGVhbiBhdGJya3B0KSB7CisgICAgICAgIG1fYXRCcmVha3BvaW50
ID0gYXRicmtwdDsKKyAgICB9CisgICAgcHVibGljIEpzT2JqZWN0IGJpbmQoU3RyaW5nIGlkKSB0
aHJvd3MgUmVtb3RlRXhjZXB0aW9uIHsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIENvbnRl
eHQuZW50ZXIoKTsKKyAgICAgICAgICAgIFNjcmlwdGFibGUgb2JqID0gbV92YXJpYWJsZU9iamVj
dDsKKyAgICAgICAgICAgIE9iamVjdCBwcm9wOworICAgICAgICAgICAgd2hpbGUgKG9iaiAhPSBu
dWxsKSB7CisgICAgICAgICAgICAgICAgU2NyaXB0YWJsZSBtID0gb2JqOworICAgICAgICAgICAg
ICAgIGRvIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKG0uaGFzKGlkLCBvYmopKQorICAgICAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIG1fcmhpbm9EYmcubWFyc2hhbGxTY3JpcHRhYmxlKG9i
aik7CisgICAgICAgICAgICAgICAgICAgIG0gPSBtLmdldFByb3RvdHlwZSgpOworICAgICAgICAg
ICAgICAgIH0gd2hpbGUgKG0gIT0gbnVsbCk7CisgICAgICAgICAgICAgICAgb2JqID0gb2JqLmdl
dFBhcmVudFNjb3BlKCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICB0aHJvdyBuZXcgSnNk
aUV4Y2VwdGlvbigiTmFtZSBub3QgaW4gc2NvcGUuIik7CisgICAgICAgIH0gZmluYWxseSB7Cisg
ICAgICAgICAgICBDb250ZXh0LmV4aXQoKTsKKyAgICAgICAgfQorICAgIH0KKyAgICAvLy0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgcHVibGlj
IEpzQ29kZSBnZXRDb2RlKCkgeworICAgICAgICBpZiAobV9pbnZhbGlkKQorICAgICAgICAgICAg
dGhyb3cgbmV3IEpzZGlFeGNlcHRpb24oIlRoaXMgY29udGV4dCBubyBsb25nZXIgZXhpc3RzLiIp
OworICAgICAgICBpZiAoIW1fYXRCcmVha3BvaW50KQorICAgICAgICAgICAgdGhyb3cgbmV3IEpz
ZGlFeGNlcHRpb24oIlJlc3VtZWQgY29udGV4dCwgY2FuJ3QgZ2V0IHRoZSBjb2RlLiIpOworCisg
ICAgICAgIHRyeSB7CisgICAgICAgICAgICBDb250ZXh0LmVudGVyKCk7CisgICAgICAgICAgICBy
ZXR1cm4gbnVsbDsKKyAgICAgICAgfSBmaW5hbGx5IHsKKyAgICAgICAgICAgIENvbnRleHQuZXhp
dCgpOworICAgICAgICB9CisgICAgfQorICAgIHB1YmxpYyBpbnQgZ2V0RGVwdGgoKSB7CisgICAg
ICAgIHJldHVybiBtX2ZyYW1lbm87CisgICAgfQorICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICBwdWJsaWMgSnNFbmdpbmUgZ2V0RW5n
aW5lKCkgeworICAgICAgICBSaGlub0VuZ2luZURlYnVnZ2VyIHJlZGJnOworICAgICAgICByZWRi
ZyA9IG1fcmNwLmdldFJoaW5vRW5naW5lRGVidWdnZXIoKTsKKyAgICAgICAgcmV0dXJuIChKc0Vu
Z2luZSkgcmVkYmcuZ2V0RGVidWdJbnRlcmZhY2UoKTsKKworICAgIH0KKyAgICAvLy0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgcHVibGljIGlu
dCBnZXRMaW5lTnVtYmVyKCkgeworICAgICAgICBpZiAobV9pbnZhbGlkKQorICAgICAgICAgICAg
dGhyb3cgbmV3IEpzZGlFeGNlcHRpb24oIlRoaXMgY29udGV4dCBubyBsb25nZXIgZXhpc3RzLiIp
OworICAgICAgICBpZiAoIW1fYXRCcmVha3BvaW50KQorICAgICAgICAgICAgdGhyb3cgbmV3IEpz
ZGlFeGNlcHRpb24oIlJlc3VtZWQgY29udGV4dCwgY2FuJ3QgZ2V0IGxpbmUgbnVtYmVyLiIpOwor
CisgICAgICAgIHJldHVybiBtX2xpbmVubzsKKyAgICB9CisgICAgLy8tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICBwdWJsaWMgSnNPYmpl
Y3QgZ2V0U2NvcGUoKSB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uIHsKKworICAgICAgICBpZiAobV9p
bnZhbGlkKQorICAgICAgICAgICAgdGhyb3cgbmV3IEpzZGlFeGNlcHRpb24oIlRoaXMgY29udGV4
dCBubyBsb25nZXIgZXhpc3RzLiIpOworICAgICAgICBpZiAoIW1fYXRCcmVha3BvaW50KQorICAg
ICAgICAgICAgdGhyb3cgbmV3IEpzZGlFeGNlcHRpb24oIlJlc3VtZWQgY29udGV4dCwgY2FuJ3Qg
Z2V0IGxpbmUgbnVtYmVyLiIpOworCisgICAgICAgIHRyeSB7CisgICAgICAgICAgICBDb250ZXh0
LmVudGVyKCk7CisgICAgICAgICAgICBKc09iamVjdCBzY29wZSA9IG1fcmhpbm9EYmcubWFyc2hh
bGxTY3JpcHRhYmxlKG1fdmFyaWFibGVPYmplY3QpOworICAgICAgICAgICAgcmV0dXJuIHNjb3Bl
OworICAgICAgICB9IGZpbmFsbHkgeworICAgICAgICAgICAgQ29udGV4dC5leGl0KCk7CisgICAg
ICAgIH0KKyAgICB9CisgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0KKyAgICBwdWJsaWMgU3RyaW5nIGdldFNvdXJjZU5hbWUoKSB7Cisg
ICAgICAgIGlmIChtX2ludmFsaWQpCisgICAgICAgICAgICB0aHJvdyBuZXcgSnNkaUV4Y2VwdGlv
bigiVGhpcyBjb250ZXh0IG5vIGxvbmdlciBleGlzdHMuIik7CisgICAgICAgIGlmICghbV9hdEJy
ZWFrcG9pbnQpCisgICAgICAgICAgICB0aHJvdyBuZXcgSnNkaUV4Y2VwdGlvbigiUmVzdW1lZCBj
b250ZXh0LCBjYW4ndCBnZXQgbGluZSBudW1iZXIuIik7CisKKyAgICAgICAgcmV0dXJuIG1fdW5p
dC5tX2RiZ1NjcmlwdC5nZXRTb3VyY2VOYW1lKCk7CisgICAgfQorICAgIC8vLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgcHVibGljIEpz
T2JqZWN0IGdldFRoaXMoKSB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uIHsKKworICAgICAgICBpZiAo
bV9pbnZhbGlkKQorICAgICAgICAgICAgdGhyb3cgbmV3IEpzZGlFeGNlcHRpb24oIlRoaXMgY29u
dGV4dCBubyBsb25nZXIgZXhpc3RzLiIpOworICAgICAgICBpZiAoIW1fYXRCcmVha3BvaW50KQor
ICAgICAgICAgICAgdGhyb3cgbmV3IEpzZGlFeGNlcHRpb24oIlJlc3VtZWQgY29udGV4dCwgY2Fu
J3QgZ2V0IGxpbmUgbnVtYmVyLiIpOworCisgICAgICAgIHRyeSB7CisgICAgICAgICAgICBDb250
ZXh0LmVudGVyKCk7CisgICAgICAgICAgICBKc09iamVjdCB0aGlzb2JqID0gbnVsbDsKKyAgICAg
ICAgICAgIFNjcmlwdGFibGUgb2JqID0gbnVsbDsKKyAgICAgICAgICAgIE5hdGl2ZUNhbGwgY2Fs
bCA9IG51bGw7CisgICAgICAgICAgICBTY3JpcHRhYmxlIHZhcm9iaiA9IG1fdmFyaWFibGVPYmpl
Y3Q7CisgICAgICAgICAgICBpZiAodmFyb2JqIGluc3RhbmNlb2YgTmF0aXZlQ2FsbCkgeworICAg
ICAgICAgICAgICAgIGNhbGwgPSAoTmF0aXZlQ2FsbCkgdmFyb2JqOworICAgICAgICAgICAgICAg
IG9iaiA9IGNhbGwuZ2V0VGhpc09iaigpOworICAgICAgICAgICAgICAgIHRoaXNvYmogPSBtX3Jo
aW5vRGJnLm1hcnNoYWxsU2NyaXB0YWJsZSh2YXJvYmopOworICAgICAgICAgICAgfQorICAgICAg
ICAgICAgcmV0dXJuIHRoaXNvYmo7CisgICAgICAgIH0gZmluYWxseSB7CisgICAgICAgICAgICBD
b250ZXh0LmV4aXQoKTsKKyAgICAgICAgfQorICAgIH0KKyAgICAvLy0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgdm9pZCBpbnZhbGlkYXRlKCkg
eworICAgICAgICBtX2ludmFsaWQgPSB0cnVlOworICAgIH0KKyAgICAvLy0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgIHB1YmxpYyBib29s
ZWFuIGlzRXZhbENvbnRleHQoKSB7CisgICAgICAgIGlmIChtX2ludmFsaWQpCisgICAgICAgICAg
ICB0aHJvdyBuZXcgSnNkaUV4Y2VwdGlvbigiVGhpcyBjb250ZXh0IG5vIGxvbmdlciBleGlzdHMu
Iik7CisgICAgICAgIGlmICghbV9hdEJyZWFrcG9pbnQpCisgICAgICAgICAgICB0aHJvdyBuZXcg
SnNkaUV4Y2VwdGlvbigiUmVzdW1lZCBjb250ZXh0LCBjYW4ndCBnZXQgbGluZSBudW1iZXIuIik7
CisKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIENvbnRleHQuZW50ZXIoKTsKKyAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfSBmaW5hbGx5IHsKKyAgICAgICAgICAgIENvbnRl
eHQuZXhpdCgpOworICAgICAgICB9CisgICAgfQorICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgcHVibGljIGJvb2xlYW4gaXNG
dW5jdGlvbkNvbnRleHQoKSB7CisgICAgICAgIGlmIChtX2ludmFsaWQpCisgICAgICAgICAgICB0
aHJvdyBuZXcgSnNkaUV4Y2VwdGlvbigiVGhpcyBjb250ZXh0IG5vIGxvbmdlciBleGlzdHMuIik7
CisgICAgICAgIGlmICghbV9hdEJyZWFrcG9pbnQpCisgICAgICAgICAgICB0aHJvdyBuZXcgSnNk
aUV4Y2VwdGlvbigiUmVzdW1lZCBjb250ZXh0LCBjYW4ndCBnZXQgbGluZSBudW1iZXIuIik7CisK
KyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIENvbnRleHQuZW50ZXIoKTsKKyAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICAgICAgfSBmaW5hbGx5IHsKKyAgICAgICAgICAgIENvbnRleHQu
ZXhpdCgpOworICAgICAgICB9CisgICAgfQorICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgcHVibGljIGJvb2xlYW4gaXNTY3Jp
cHRDb250ZXh0KCkgeworICAgICAgICBpZiAobV9pbnZhbGlkKQorICAgICAgICAgICAgdGhyb3cg
bmV3IEpzZGlFeGNlcHRpb24oIlRoaXMgY29udGV4dCBubyBsb25nZXIgZXhpc3RzLiIpOworICAg
ICAgICBpZiAoIW1fYXRCcmVha3BvaW50KQorICAgICAgICAgICAgdGhyb3cgbmV3IEpzZGlFeGNl
cHRpb24oIlJlc3VtZWQgY29udGV4dCwgY2FuJ3QgZ2V0IGxpbmUgbnVtYmVyLiIpOworICAgICAg
ICB0cnkgeworICAgICAgICAgICAgQ29udGV4dC5lbnRlcigpOworICAgICAgICAgICAgcmV0dXJu
IHRydWU7CisgICAgICAgIH0gZmluYWxseSB7CisgICAgICAgICAgICBDb250ZXh0LmV4aXQoKTsK
KyAgICAgICAgfQorICAgIH0KKyAgICBwdWJsaWMgT2JqZWN0IGxvb2t1cE5hbWUoU3RyaW5nIG5h
bWUpIHsKKworICAgICAgICB0cnkgeworICAgICAgICAgICAgQ29udGV4dC5lbnRlcigpOworICAg
ICAgICAgICAgU2NyaXB0YWJsZSBvYmogPSBtX3ZhcmlhYmxlT2JqZWN0OworICAgICAgICAgICAg
T2JqZWN0IHByb3A7CisgICAgICAgICAgICB3aGlsZSAob2JqICE9IG51bGwpIHsKKyAgICAgICAg
ICAgICAgICBTY3JpcHRhYmxlIG0gPSBvYmo7CisgICAgICAgICAgICAgICAgZG8geworICAgICAg
ICAgICAgICAgICAgICBPYmplY3QgcmVzdWx0ID0gbS5nZXQobmFtZSwgb2JqKTsKKyAgICAgICAg
ICAgICAgICAgICAgaWYgKHJlc3VsdCAhPSBTY3JpcHRhYmxlLk5PVF9GT1VORCkKKyAgICAgICAg
ICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgICAgICAgICAgICAgIG0gPSBt
LmdldFByb3RvdHlwZSgpOworICAgICAgICAgICAgICAgIH0gd2hpbGUgKG0gIT0gbnVsbCk7Cisg
ICAgICAgICAgICAgICAgb2JqID0gb2JqLmdldFBhcmVudFNjb3BlKCk7CisgICAgICAgICAgICB9
CisgICAgICAgICAgICB0aHJvdyBuZXcgSnNkaUV4Y2VwdGlvbigiTmFtZSBpcyBub3QgaW4gc2Nv
cGUuIik7CisgICAgICAgIH0gZmluYWxseSB7CisgICAgICAgICAgICBDb250ZXh0LmV4aXQoKTsK
KyAgICAgICAgfQorICAgIH0KKyAgICAvKioKKyAgICAgKiBMb29rcyB1cCBhIG5hbWUgaW4gdGhl
IHNjb3BlIGNoYWluIGFuZCByZXR1cm5zIGl0cyB2YWx1ZS4KKyAgICAgKi8KKyAgICBwdWJsaWMg
T2JqZWN0IGxvb2t1cE5hbWUoU2NyaXB0YWJsZSBzY29wZUNoYWluLCBTdHJpbmcgaWQpIHsKKwor
ICAgICAgICB0cnkgeworICAgICAgICAgICAgQ29udGV4dC5lbnRlcigpOworICAgICAgICAgICAg
U2NyaXB0YWJsZSBvYmogPSBzY29wZUNoYWluOworICAgICAgICAgICAgT2JqZWN0IHByb3A7Cisg
ICAgICAgICAgICB3aGlsZSAob2JqICE9IG51bGwpIHsKKyAgICAgICAgICAgICAgICBTY3JpcHRh
YmxlIG0gPSBvYmo7CisgICAgICAgICAgICAgICAgZG8geworICAgICAgICAgICAgICAgICAgICBP
YmplY3QgcmVzdWx0ID0gbS5nZXQoaWQsIG9iaik7CisgICAgICAgICAgICAgICAgICAgIGlmIChy
ZXN1bHQgIT0gU2NyaXB0YWJsZS5OT1RfRk9VTkQpCisgICAgICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gcmVzdWx0OworICAgICAgICAgICAgICAgICAgICBtID0gbS5nZXRQcm90b3R5cGUoKTsK
KyAgICAgICAgICAgICAgICB9IHdoaWxlIChtICE9IG51bGwpOworICAgICAgICAgICAgICAgIG9i
aiA9IG9iai5nZXRQYXJlbnRTY29wZSgpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0
dXJuIG51bGw7CisgICAgICAgIH0gZmluYWxseSB7CisgICAgICAgICAgICBDb250ZXh0LmV4aXQo
KTsKKyAgICAgICAgfQorICAgIH0KK30KKworY2xhc3MgUmhpbm9EZWJ1Z0ZyYW1lIGltcGxlbWVu
dHMgRGVidWdGcmFtZSB7CisKKyAgICBKc0NvbnRleHRTdHViIG1fc3R1YjsKKworICAgIFJoaW5v
RGVidWdGcmFtZShKc0NvbnRleHRTdHViIHN0dWIpIHsKKyAgICAgICAgbV9zdHViID0gc3R1YjsK
KyAgICB9CisKKyAgICBwdWJsaWMgdm9pZCBvbkVudGVyKENvbnRleHQgY3gsIFNjcmlwdGFibGUg
YWN0aXZhdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgIFNjcmlwdGFibGUgdGhpc09iaiwg
T2JqZWN0W10gYXJncykKKyAgICB7CisgICAgICAgIG1fc3R1Yi5tX3ZhcmlhYmxlT2JqZWN0ID0g
YWN0aXZhdGlvbjsKKyAgICAgICAgbV9zdHViLm1fdGhpc09iaiA9IHRoaXNPYmo7CisgICAgICAg
IG1fc3R1Yi5tX2ZyYW1lbm8gPSBtX3N0dWIubV9yY3AubV9mcmFtZVN0YWNrLnNpemUoKTsKKyAg
ICAgICAgbV9zdHViLm1fcmNwLm1fZnJhbWVTdGFjay5wdXNoKG1fc3R1Yik7CisgICAgfQorCisg
ICAgcHVibGljIHZvaWQgb25FeGl0KENvbnRleHQgY3gsIGJvb2xlYW4gYnlUaHJvdywgT2JqZWN0
IHJlc3VsdE9yRXhjZXB0aW9uKQorICAgIHsKKyAgICAgICAgbV9zdHViLm1fcmNwLm1fZnJhbWVT
dGFjay5wb3AoKTsKKyAgICAgICAgbV9zdHViLmludmFsaWRhdGUoKTsKKyAgICB9CisKKyAgICBw
dWJsaWMgdm9pZCBvbkV4Y2VwdGlvblRocm93bihDb250ZXh0IGN4LCBUaHJvd2FibGUgZXgpIHsK
KyAgICAgICAgbV9zdHViLm1fcmNwLm1fcmVEYmcuaGFuZGxlRXhjZXB0aW9uVGhyb3duKGN4LCBt
X3N0dWIubV9yY3AsIGV4KTsKKyAgICB9CisKKyAgICBwdWJsaWMgdm9pZCBvbkxpbmVDaGFuZ2Uo
Q29udGV4dCBjeCwgaW50IGxpbmVOdW1iZXIpIHsKKyAgICAgICAgbV9zdHViLm1fbGluZW5vID0g
bGluZU51bWJlcjsKKyAgICAgICAgaWYgKG1fc3R1Yi5tX3VuaXQuaGFzQnJlYWtwb2ludChsaW5l
TnVtYmVyKSkgeworICAgICAgICAgICAgbV9zdHViLm1fcmNwLm1fcmVEYmcuaGFuZGxlQnJlYWtw
b2ludEhpdChjeCwgbV9zdHViLm1fcmNwKTsKKyAgICAgICAgfQorICAgIH0KIH0KPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQpSQ1MgZmlsZTogL2hvbWUvY3ZzcHVibGljL2pha2FydGEtYnNmL3NyYy9ic2YtMi4zL2JzZi9z
cmMvb3JnL2FwYWNoZS9ic2YvZW5naW5lcy9qYXZhc2NyaXB0L0F0dGljL0pzRW5naW5lU3R1Yi5q
YXZhLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjIKcmV0cmlldmluZyByZXZpc2lvbiAxLjMKZGlm
ZiAtdSAtcjEuMiAtcjEuMwotLS0gamFrYXJ0YS1ic2Yvc3JjL2JzZi0yLjMvYnNmL3NyYy9vcmcv
YXBhY2hlL2JzZi9lbmdpbmVzL2phdmFzY3JpcHQvQXR0aWMvSnNFbmdpbmVTdHViLmphdmEJMjAw
Mi8xMS8wNyAwMTo0OToxMgkxLjIKKysrIGpha2FydGEtYnNmL3NyYy9ic2YtMi4zL2JzZi9zcmMv
b3JnL2FwYWNoZS9ic2YvZW5naW5lcy9qYXZhc2NyaXB0L0F0dGljL0pzRW5naW5lU3R1Yi5qYXZh
CTIwMDMvMDMvMTAgMDU6NTI6MzgJMS4zCkBAIC02MiwzOCArNjIsMzcgQEAKIGltcG9ydCBvcmcu
YXBhY2hlLmJzZi5kZWJ1Zy5qc2RpLio7CiBpbXBvcnQgb3JnLm1vemlsbGEuamF2YXNjcmlwdC5D
b250ZXh0OwogaW1wb3J0IG9yZy5tb3ppbGxhLmphdmFzY3JpcHQuU2NyaXB0OwotaW1wb3J0IG9y
Zy5tb3ppbGxhLmphdmFzY3JpcHQuZGVidWcuRGVidWdnYWJsZUVuZ2luZTsKIAogLyoqCiAgKiBJ
bnNlcnQgdGhlIHR5cGUncyBkZXNjcmlwdGlvbiBoZXJlLgogICogQ3JlYXRpb24gZGF0ZTogKDkv
Ni8yMDAxIDE6MjE6NDYgUE0pCiAgKiBAYXV0aG9yOiBBZG1pbmlzdHJhdG9yCiAgKi8KLXB1Ymxp
YyBjbGFzcyBKc0VuZ2luZVN0dWIgCitwdWJsaWMgY2xhc3MgSnNFbmdpbmVTdHViCiAgICAgZXh0
ZW5kcyBvcmcuYXBhY2hlLmJzZi5kZWJ1Zy51dGlsLlNrZWxldG9uCiAgICAgaW1wbGVtZW50cyBK
c0VuZ2luZSB7CiAKICAgICBSaGlub0VuZ2luZURlYnVnZ2VyIG1fcmhpbm9EYmc7CiAgICAgYm9v
bGVhbiBtX2luQ2FsbGJhY2s7CiAgICAgYm9vbGVhbiBtX3Jlc3VtZUV4ZWN1dGlvbjsKLSAgICBP
YmplY3QgIG1fbG9jazsJCi0JCisgICAgT2JqZWN0ICBtX2xvY2s7CisKICAgICAvKioKICAgICAg
KiBKc0VuZ2luZVN0dWIgY29uc3RydWN0b3IgY29tbWVudC4KICAgICAgKi8KLSAgICBwdWJsaWMg
SnNFbmdpbmVTdHViKFJoaW5vRW5naW5lRGVidWdnZXIgcmhpbm9EYmcpIAorICAgIHB1YmxpYyBK
c0VuZ2luZVN0dWIoUmhpbm9FbmdpbmVEZWJ1Z2dlciByaGlub0RiZykKICAgICAgICAgdGhyb3dz
IFJlbW90ZUV4Y2VwdGlvbiB7CiAgICAgICAgIHN1cGVyKG9yZy5hcGFjaGUuYnNmLmRlYnVnLnV0
aWwuRGVidWdDb25zdGFudHMuSlNfRU5HSU5FX1RJRCk7CiAgICAgICAgIG1fcmhpbm9EYmcgPSBy
aGlub0RiZzsKICAgICAgICAgbV9sb2NrID0gbmV3IE9iamVjdCgpOwogICAgIH0KLQkKKwogICAg
IHB1YmxpYyBib29sZWFuIGlzU3VzcGVuZGVkKCkgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbiB7CiAg
ICAgICAgIHJldHVybiBtX2luQ2FsbGJhY2s7CiAgICAgfQotCQorCiAgICAgcHVibGljIGJvb2xl
YW4gcG9sbCgpIHsgcmV0dXJuIHRydWU7IH0KLQkKKwogICAgIHB1YmxpYyBPYmplY3QgZXZhbChT
dHJpbmcgZG9jbmFtZSwgU3RyaW5nIGV4cCwgaW50IGxpbmVObykKICAgICAgICAgdGhyb3dzIFJl
bW90ZUV4Y2VwdGlvbiB7CiAKQEAgLTEyNSw3ICsxMjQsNyBAQAogICAgICAgICB0cnkgewogICAg
ICAgICAgICAgQ29udGV4dC5lbnRlcigpOwogICAgICAgICAgICAgY291bnQgPSBtX3JoaW5vRGJn
LmdldENvbnRleHRDb3VudCgpOwotICAgICAgICAgICAgRGVidWdMb2cuc3Rkb3V0UHJpbnRsbigi
CWNvdW50ID0gIitjb3VudCwgCisgICAgICAgICAgICBEZWJ1Z0xvZy5zdGRvdXRQcmludGxuKCIg
ICAgY291bnQgPSAiK2NvdW50LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBE
ZWJ1Z0xvZy5CU0ZfTE9HX0wzKTsKICAgICAgICAgICAgIHJldHVybiBjb3VudDsKICAgICAgICAg
fSBmaW5hbGx5IHsKQEAgLTEzMyw3ICsxMzIsNyBAQAogICAgICAgICB9CiAKICAgICB9Ci0gIAor
CiAgICAgcHVibGljIFN0cmluZyBnZXRUaHJlYWQoKSB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uIHsK
ICAgICAgICAgcmV0dXJuIG1fcmhpbm9EYmcuZ2V0VGhyZWFkKCk7CiAgICAgfQpAQCAtMjAzLDcg
KzIwMiw3IEBACiAgICAgcHVibGljIHZvaWQgc3RlcEluKCkgdGhyb3dzIFJlbW90ZUV4Y2VwdGlv
biB7CiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBDb250ZXh0LmVudGVyKCk7Ci0gICAgICAg
ICAgICBEZWJ1Z0xvZy5zdGRvdXRQcmludGxuKCJTdGVwIEluIGNvbW1hbmQgb24gIit0aGlzLCAK
KyAgICAgICAgICAgIERlYnVnTG9nLnN0ZG91dFByaW50bG4oIlN0ZXAgSW4gY29tbWFuZCBvbiAi
K3RoaXMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERlYnVnTG9nLkJTRl9M
T0dfTDMpOwogICAgICAgICAgICAgbV9yaGlub0RiZy5zdGVwSW4odGhpcyk7CiAgICAgICAgIH0g
Y2F0Y2ggKEV4Y2VwdGlvbiBleCkgewpAQCAtMjI1LDcgKzIyNCw2IEBACiAgICAgfQogCiAgICAg
cHVibGljIHZvaWQgc3RlcE92ZXIoKSB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uIHsKLSAgICAgICAg
Umhpbm9Db250ZXh0UHJveHkgcmNwOwogICAgICAgICB0cnkgewogICAgICAgICAgICAgQ29udGV4
dC5lbnRlcigpOwogICAgICAgICAgICAgbV9yaGlub0RiZy5zdGVwT3Zlcih0aGlzKTsKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQpSQ1MgZmlsZTogL2hvbWUvY3ZzcHVibGljL2pha2FydGEtYnNmL3NyYy9ic2YtMi4zL2Jz
Zi9zcmMvb3JnL2FwYWNoZS9ic2YvZW5naW5lcy9qYXZhc2NyaXB0L0F0dGljL1JoaW5vQ29udGV4
dFByb3h5LmphdmEsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMgpyZXRyaWV2aW5nIHJldmlzaW9u
IDEuNApkaWZmIC11IC1yMS4yIC1yMS40Ci0tLSBqYWthcnRhLWJzZi9zcmMvYnNmLTIuMy9ic2Yv
c3JjL29yZy9hcGFjaGUvYnNmL2VuZ2luZXMvamF2YXNjcmlwdC9BdHRpYy9SaGlub0NvbnRleHRQ
cm94eS5qYXZhCTIwMDIvMTEvMDcgMDE6NDk6MTIJMS4yCisrKyBqYWthcnRhLWJzZi9zcmMvYnNm
LTIuMy9ic2Yvc3JjL29yZy9hcGFjaGUvYnNmL2VuZ2luZXMvamF2YXNjcmlwdC9BdHRpYy9SaGlu
b0NvbnRleHRQcm94eS5qYXZhCTIwMDMvMDMvMTAgMDU6NTI6MzgJMS40CkBAIC03MCwxMzMgKzcw
LDEwNyBAQAogCiBpbXBvcnQgamF2YS5ybWkuUmVtb3RlRXhjZXB0aW9uOwogCi1wdWJsaWMgY2xh
c3MgUmhpbm9Db250ZXh0UHJveHkgeworY2xhc3MgUmhpbm9Db250ZXh0UHJveHkgewogCiAgICAg
Umhpbm9FbmdpbmVEZWJ1Z2dlciBtX3JlRGJnOwotICAgIENvbnRleHQgbV9jb250ZXh0OwotICAg
IEpzQ29udGV4dFN0dWIgbV9jb250ZXh0U3R1YjsKIAotICAgIERlYnVnZ2FibGVFbmdpbmUgbV9l
bmdpbmU7Ci0KLSAgICBib29sZWFuIG1fYXRCcmVha3BvaW50OwotICAgIGludCBtX2ZyYW1lQ291
bnQ7Ci0gICAgSnNDb250ZXh0U3R1YiBtX2ZyYW1lc1tdOworICAgIE9iakFycmF5IG1fZnJhbWVT
dGFjayA9IG5ldyBPYmpBcnJheSgpOwogCiAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IE5P
X1NURVAgPSAwLCBTVEVQX0lOID0gMSwgU1RFUF9PVkVSID0gMiwKICAgICAgICAgU1RFUF9PVVQg
PSAzLCBTVE9QX0VOR0lORSA9IDQsIFJVTk5JTkcgPSA1OwogCiAgICAgcHJpdmF0ZSBpbnQgbV9z
dGVwQ21kLCBtX3N0ZXBEZXB0aDsKIAotICAgIFJoaW5vQ29udGV4dFByb3h5KFJoaW5vRW5naW5l
RGVidWdnZXIgcmVEYmcsIENvbnRleHQgY3gpIHsKKyAgICBSaGlub0NvbnRleHRQcm94eShSaGlu
b0VuZ2luZURlYnVnZ2VyIHJlRGJnKSB7CiAgICAgICAgIG1fcmVEYmcgPSByZURiZzsKLSAgICAg
ICAgbV9jb250ZXh0ID0gY3g7Ci0gICAgICAgIG1fZW5naW5lID0gY3guZ2V0RGVidWdnYWJsZUVu
Z2luZSgpOwogICAgIH0KIAotICAgIHB1YmxpYyB2b2lkIGNhbmNlbFN0ZXBwaW5nKCkgeworICAg
IHN0YXRpYyBSaGlub0NvbnRleHRQcm94eSBnZXRDdXJyZW50KCkgeworICAgICAgICBDb250ZXh0
IGN4ID0gQ29udGV4dC5nZXRDdXJyZW50Q29udGV4dCgpOworICAgICAgICBpZiAoY3ggPT0gbnVs
bCkgeyByZXR1cm4gbnVsbDsgfQorICAgICAgICByZXR1cm4gKFJoaW5vQ29udGV4dFByb3h5KWN4
LmdldERlYnVnZ2VyQ29udGV4dERhdGEoKTsKKyAgICB9CisKKyAgICB2b2lkIGNhbmNlbFN0ZXBw
aW5nKCkgewogICAgICAgICBtX3N0ZXBDbWQgPSBOT19TVEVQOwogICAgICAgICBtX3N0ZXBEZXB0
aCA9IC0xOwotICAgICAgICBtX2VuZ2luZS5zZXRCcmVha05leHRMaW5lKGZhbHNlKTsKICAgICB9
CiAKLSAgICBwdWJsaWMgSnNDb250ZXh0U3R1YiBnZXRDb250ZXh0KGludCBkZXB0aCkgewotICAg
ICAgICByZXR1cm4gbV9mcmFtZXNbZGVwdGhdOworICAgIGludCBnZXRDb250ZXh0Q291bnQoKSB7
CisgICAgICAgIHJldHVybiBtX2ZyYW1lU3RhY2suc2l6ZSgpOwogICAgIH0KIAotICAgIHB1Ymxp
YyBpbnQgZ2V0Q29udGV4dENvdW50KCkgewotICAgICAgICByZXR1cm4gbV9mcmFtZUNvdW50Owor
ICAgIEpzQ29udGV4dFN0dWIgZ2V0Q29udGV4dFN0dWIoaW50IG5vKSB7CisgICAgICAgIGlmICgh
KDAgPD0gbm8gJiYgbm8gPCBtX2ZyYW1lU3RhY2suc2l6ZSgpKSkgeyByZXR1cm4gbnVsbDsgfQor
ICAgICAgICByZXR1cm4gKEpzQ29udGV4dFN0dWIpbV9mcmFtZVN0YWNrLmdldChubyk7CiAgICAg
fQogCi0gICAgcHVibGljIEpzQ29udGV4dFN0dWIgZ2V0RnJhbWUoaW50IG5vKSB7Ci0gICAgICAg
IGlmIChubyA8IDAgfHwgbm8gPiBtX2ZyYW1lQ291bnQpCi0gICAgICAgICAgICByZXR1cm4gbnVs
bDsKLSAgICAgICAgaWYgKG5vID09IG1fZnJhbWVDb3VudCkKLSAgICAgICAgICAgIHJldHVybiBt
X2NvbnRleHRTdHViOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICByZXR1cm4gbV9mcmFtZXNb
bm9dOworICAgIEpzQ29udGV4dFN0dWIgZ2V0VG9wQ29udGV4dFN0dWIoKSB7CisgICAgICAgIHJl
dHVybiBnZXRDb250ZXh0U3R1YihtX2ZyYW1lU3RhY2suc2l6ZSgpIC0gMSk7CiAgICAgfQogCi0g
ICAgcHVibGljIGludCBnZXRMaW5lTnVtYmVyKCkgewotICAgICAgICBEZWJ1Z0ZyYW1lIGZyYW1l
ID0gbV9lbmdpbmUuZ2V0RnJhbWUoMCk7Ci0KLSAgICAgICAgcmV0dXJuIGZyYW1lLmdldExpbmVO
dW1iZXIoKTsKKyAgICBpbnQgZ2V0TGluZU51bWJlcigpIHsKKyAgICAgICAgSnNDb250ZXh0U3R1
YiBzdHViID0gZ2V0VG9wQ29udGV4dFN0dWIoKTsKKyAgICAgICAgcmV0dXJuIHN0dWIubV9saW5l
bm87CiAgICAgfQogCi0gICAgcHVibGljIFJoaW5vRW5naW5lRGVidWdnZXIgZ2V0Umhpbm9Fbmdp
bmVEZWJ1Z2dlcigpIHsKKyAgICBSaGlub0VuZ2luZURlYnVnZ2VyIGdldFJoaW5vRW5naW5lRGVi
dWdnZXIoKSB7CiAgICAgICAgIHJldHVybiBtX3JlRGJnOwogICAgIH0KIAogICAgIFN0cmluZyBn
ZXRTb3VyY2VOYW1lKCkgewotICAgICAgICBEZWJ1Z0ZyYW1lIGZyYW1lID0gbV9lbmdpbmUuZ2V0
RnJhbWUoMCk7Ci0KLSAgICAgICAgcmV0dXJuIGZyYW1lLmdldFNvdXJjZU5hbWUoKTsKKyAgICAg
ICAgSnNDb250ZXh0U3R1YiBzdHViID0gZ2V0VG9wQ29udGV4dFN0dWIoKTsKKyAgICAgICAgcmV0
dXJuIHN0dWIubV91bml0Lm1fZGJnU2NyaXB0LmdldFNvdXJjZU5hbWUoKTsKICAgICB9CiAKLQog
ICAgIC8vIFdlIGhpdCBhIGtub3duIGJyZWFrcG9pbnQuCiAgICAgLy8gV2UgbmVlZCB0byB1cGRh
dGUgdGhlIHN0YWNrLgogICAgIC8vIEFsc28sIGNhbmNlbCBhbnkgcGVuZGluZyBzdGVwcGluZyBv
cGVyYXRpb24uCi0gICAgcHVibGljIEpzQ29udGV4dFN0dWIgaGl0QnJlYWtwb2ludCgpIHRocm93
cyBSZW1vdGVFeGNlcHRpb24geworICAgIEpzQ29udGV4dFN0dWIgaGl0QnJlYWtwb2ludCgpIHRo
cm93cyBSZW1vdGVFeGNlcHRpb24gewogICAgICAgICBjYW5jZWxTdGVwcGluZygpOwotICAgICAg
ICB1cGRhdGVTdGFjaygpOwotICAgICAgICByZXR1cm4gbV9mcmFtZXNbMF07CisgICAgICAgIHJl
dHVybiBnZXRUb3BDb250ZXh0U3R1YigpOwogICAgIH0KIAotCi0gICAgcHVibGljIEpzQ29udGV4
dFN0dWIgZXhjZXB0aW9uVGhyb3duKCkgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbiB7CisgICAgSnND
b250ZXh0U3R1YiBleGNlcHRpb25UaHJvd24oKSB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uIHsKICAg
ICAgICAgY2FuY2VsU3RlcHBpbmcoKTsKLSAgICAgICAgdXBkYXRlU3RhY2soKTsKLSAgICAgICAg
cmV0dXJuIG1fZnJhbWVzWzBdOworICAgICAgICByZXR1cm4gZ2V0VG9wQ29udGV4dFN0dWIoKTsK
ICAgICB9CiAKLSAgICBwdWJsaWMgdm9pZCByZXN1bWVkKCkgewotICAgICAgICBKc0NvbnRleHRT
dHViIHN0dWI7Ci0gICAgICAgIERlYnVnRnJhbWUgZnJhbWU7Ci0KLSAgICAgICAgbV9hdEJyZWFr
cG9pbnQgPSBmYWxzZTsKLQotICAgICAgICBmb3IgKGludCBmID0gMDsgZiA8IG1fZnJhbWVDb3Vu
dDsgZisrKSB7Ci0gICAgICAgICAgICBzdHViID0gbV9mcmFtZXNbZl07Ci0gICAgICAgICAgICBz
dHViLmF0QnJlYWtwb2ludChmYWxzZSk7CisgICAgdm9pZCByZXN1bWVkKCkgeworICAgICAgICBm
b3IgKGludCBmID0gMCwgTiA9IGdldENvbnRleHRDb3VudCgpOyBmICE9IE47ICsrZikgeworICAg
ICAgICAgICAgZ2V0Q29udGV4dFN0dWIoZikuYXRCcmVha3BvaW50KGZhbHNlKTsKICAgICAgICAg
fQogICAgIH0KIAotICAgIHB1YmxpYyB2b2lkIHJ1bigpIHsKLSAgICAgICAgbV9lbmdpbmUuc2V0
QnJlYWtOZXh0TGluZShmYWxzZSk7CisgICAgdm9pZCBydW4oKSB7CiAgICAgICAgIG1fc3RlcENt
ZCA9IFJVTk5JTkc7CiAgICAgICAgIG1fc3RlcERlcHRoID0gLTE7Ci0KICAgICB9CiAKLSAgICBw
dWJsaWMgdm9pZCBzdGVwSW4oKSB7Ci0gICAgICAgIG1fZW5naW5lLnNldEJyZWFrTmV4dExpbmUo
dHJ1ZSk7CisgICAgdm9pZCBzdGVwSW4oKSB7CiAgICAgICAgIG1fc3RlcENtZCA9IFNURVBfSU47
Ci0gICAgICAgIG1fc3RlcERlcHRoID0gbV9mcmFtZUNvdW50OworICAgICAgICBtX3N0ZXBEZXB0
aCA9IGdldENvbnRleHRDb3VudCgpOwogICAgIH0KIAotICAgIHB1YmxpYyB2b2lkIHN0ZXBPdXQo
KSB7Ci0gICAgICAgIG1fZW5naW5lLnNldEJyZWFrTmV4dExpbmUodHJ1ZSk7CisgICAgdm9pZCBz
dGVwT3V0KCkgewogICAgICAgICBtX3N0ZXBDbWQgPSBTVEVQX09VVDsKLSAgICAgICAgbV9zdGVw
RGVwdGggPSBtX2ZyYW1lQ291bnQ7Ci0KKyAgICAgICAgbV9zdGVwRGVwdGggPSBnZXRDb250ZXh0
Q291bnQoKTsKICAgICB9CiAKLSAgICBwdWJsaWMgdm9pZCBzdGVwT3ZlcigpIHsKLSAgICAgICAg
bV9lbmdpbmUuc2V0QnJlYWtOZXh0TGluZSh0cnVlKTsKKyAgICB2b2lkIHN0ZXBPdmVyKCkgewog
ICAgICAgICBtX3N0ZXBDbWQgPSBTVEVQX09WRVI7Ci0gICAgICAgIG1fc3RlcERlcHRoID0gbV9m
cmFtZUNvdW50OworICAgICAgICBtX3N0ZXBEZXB0aCA9IGdldENvbnRleHRDb3VudCgpOwogICAg
IH0KIAotICAgIHB1YmxpYyBKc0NvbnRleHRTdHViIGVudHJ5X2V4aXRfbW9kZSgpIHRocm93cyBS
ZW1vdGVFeGNlcHRpb24geworICAgIEpzQ29udGV4dFN0dWIgZW50cnlfZXhpdF9tb2RlKCkgdGhy
b3dzIFJlbW90ZUV4Y2VwdGlvbiB7CiAgICAgICAgIGNhbmNlbFN0ZXBwaW5nKCk7Ci0gICAgICAg
IHVwZGF0ZVN0YWNrKCk7Ci0gICAgICAgIHJldHVybiBtX2ZyYW1lc1swXTsKKyAgICAgICAgcmV0
dXJuIGdldFRvcENvbnRleHRTdHViKCk7CiAgICAgfQogCi0gICAgcHVibGljIEpzQ29udGV4dFN0
dWIgc3RlcHBpbmcoKSB7CisgICAgSnNDb250ZXh0U3R1YiBzdGVwcGluZygpIHsKICAgICAgICAg
Ly8gRGlkIHdlIGhpdCBhIGtub3duIGJyZWFrcG9pbnQ/CiAKLSAgICAgICAgaW50IGZyYW1lQ291
bnQgPSBtX2VuZ2luZS5nZXRGcmFtZUNvdW50KCk7CisgICAgICAgIGludCBmcmFtZUNvdW50ID0g
Z2V0Q29udGV4dENvdW50KCk7CiAKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIHN3aXRjaCAo
bV9zdGVwQ21kKSB7CkBAIC0yMDQsMzkgKzE3OCwzMSBAQAogICAgICAgICAgICAgICAgIGNhbmNl
bFN0ZXBwaW5nKCk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBjYXNlIFNU
T1BfRU5HSU5FIDoKLSAgICAgICAgICAgICAgICB1cGRhdGVTdGFjaygpOwogICAgICAgICAgICAg
ICAgIGNhbmNlbFN0ZXBwaW5nKCk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIG1fZnJhbWVzWzBd
OworICAgICAgICAgICAgICAgIHJldHVybiBnZXRUb3BDb250ZXh0U3R1YigpOwogICAgICAgICAg
ICAgY2FzZSBTVEVQX0lOIDoKLSAgICAgICAgICAgICAgICAvLyBPRyBpZiAoKGZyYW1lQ291bnQg
PT0gbV9zdGVwRGVwdGggKyAxKSB8fCAKKyAgICAgICAgICAgICAgICAvLyBPRyBpZiAoKGZyYW1l
Q291bnQgPT0gbV9zdGVwRGVwdGggKyAxKSB8fAogICAgICAgICAgICAgICAgIC8vIChmcmFtZUNv
dW50ID09IG1fc3RlcERlcHRoKSkgewogICAgICAgICAgICAgICAgIC8vIHN0ZXAgaWYgd2UgYXJl
IGluIHRoZSBzYW1lIGZyYW1lIChub3RoaW5nIHRvIHN0ZXAgaW4uLi4gOi0pCiAgICAgICAgICAg
ICAgICAgLy8gaWYgd2UgYXJlIGluIGEgY2FsbGVkIGZyYW1lLi4uCiAgICAgICAgICAgICAgICAg
Ly8gYnV0IGFsc28gaWYgd2Ugc3RlcHBlZCBvdXQgb2YgdGhlIGN1cnJlbnQgZnJhbWUuLi4KLSAg
ICAgICAgICAgICAgICBpZiAoKGZyYW1lQ291bnQgPj0gbV9zdGVwRGVwdGgpIAotICAgICAgICAg
ICAgICAgICAgICB8fCAoZnJhbWVDb3VudCA8IG1fc3RlcERlcHRoKSkgewotICAgICAgICAgICAg
ICAgICAgICB1cGRhdGVTdGFjaygpOwogICAgICAgICAgICAgICAgICAgICBjYW5jZWxTdGVwcGlu
ZygpOwotICAgICAgICAgICAgICAgICAgICByZXR1cm4gbV9mcmFtZXNbMF07Ci0gICAgICAgICAg
ICAgICAgfQotICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICByZXR1
cm4gZ2V0VG9wQ29udGV4dFN0dWIoKTsKICAgICAgICAgICAgIGNhc2UgU1RFUF9PVkVSIDoKICAg
ICAgICAgICAgICAgICAvLyBPRyBpZiAoZnJhbWVDb3VudCA9PSBtX3N0ZXBEZXB0aCkgewogICAg
ICAgICAgICAgICAgIC8vIHN0ZXAgaWYgd2UgYXJlIGluIHRoZSBzYW1lIGZyYW1lIG9yIGFib3Zl
Li4uCi0gICAgICAgICAgICAgICAgLy8gdGhpcyBiYXNpY2FsbHkgYXZvaWRzIGFueSBjaGlsZHJl
biBmcmFtZSBidXQgCisgICAgICAgICAgICAgICAgLy8gdGhpcyBiYXNpY2FsbHkgYXZvaWRzIGFu
eSBjaGlsZHJlbiBmcmFtZSBidXQKICAgICAgICAgICAgICAgICAvLyBjb3ZlcnMgdGhlIHJldHVy
biBvZiB0aGUgY3VycmVudCBmcmFtZS4KICAgICAgICAgICAgICAgICBpZiAoZnJhbWVDb3VudCA8
PSBtX3N0ZXBEZXB0aCkgewotICAgICAgICAgICAgICAgICAgICB1cGRhdGVTdGFjaygpOwogICAg
ICAgICAgICAgICAgICAgICBjYW5jZWxTdGVwcGluZygpOwotICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gbV9mcmFtZXNbMF07CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBnZXRUb3BDb250
ZXh0U3R1YigpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgICAgIGNhc2UgU1RFUF9PVVQgOgogICAgICAgICAgICAgICAgIC8vIE9HIGlmIChmcmFt
ZUNvdW50ID09IG1fc3RlcERlcHRoIC0gMSkgewogICAgICAgICAgICAgICAgIGlmIChmcmFtZUNv
dW50IDwgbV9zdGVwRGVwdGgpIHsKLSAgICAgICAgICAgICAgICAgICAgdXBkYXRlU3RhY2soKTsK
ICAgICAgICAgICAgICAgICAgICAgY2FuY2VsU3RlcHBpbmcoKTsKLSAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIG1fZnJhbWVzWzBdOworICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2V0VG9w
Q29udGV4dFN0dWIoKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgICAgICBkZWZhdWx0IDoKQEAgLTI0OSw1NSArMjE1LDggQEAKICAgICAgICAgcmV0
dXJuIG51bGw7CiAgICAgfQogCi0gICAgcHVibGljIHZvaWQgc3RvcEVuZ2luZSgpIHsKLSAgICAg
ICAgbV9lbmdpbmUuc2V0QnJlYWtOZXh0TGluZSh0cnVlKTsKKyAgICB2b2lkIHN0b3BFbmdpbmUo
KSB7CiAgICAgICAgIG1fc3RlcENtZCA9IFNUT1BfRU5HSU5FOwogICAgICAgICBtX3N0ZXBEZXB0
aCA9IC0xOwotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIHVwZGF0ZVN0YWNrKCkgdGhyb3dzIFJl
bW90ZUV4Y2VwdGlvbiB7Ci0gICAgICAgIEpzQ29udGV4dFN0dWIgZnJhbWVzW107Ci0gICAgICAg
IEpzQ29udGV4dFN0dWIgc3R1YjsKLSAgICAgICAgRGVidWdGcmFtZSBmcmFtZTsKLSAgICAgICAg
aW50IG5mLCBvZiwgZnJhbWVDb3VudDsKLQotICAgICAgICBtX2F0QnJlYWtwb2ludCA9IHRydWU7
Ci0KLSAgICAgICAgZnJhbWVDb3VudCA9IG1fZW5naW5lLmdldEZyYW1lQ291bnQoKTsKLSAgICAg
ICAgZnJhbWVzID0gbmV3IEpzQ29udGV4dFN0dWJbZnJhbWVDb3VudF07Ci0KLSAgICAgICAgLy8g
c2NhbiB0aGUgc3RhY2tzIGZyb20gdGhlIG91dGVyIGZyYW1lIGRvd24KLSAgICAgICAgLy8gdG8g
dGhlIGlubmVyIG9uZSBvZiB0aGUgc2hvcnRlc3Qgb2YgdGhlIG9sZAotICAgICAgICAvLyBhbmQg
dGhlIG5ldyBrbm93biBzdGFjay4KLSAgICAgICAgLy8gVGhlIGdvYWwgaXMgdG8gcmVjb2duaXpl
IHRoZSBEZWJ1Z0ZyYW1lIG9iamVjdHMKLSAgICAgICAgLy8gdGhhdCBhcmUgdGhlIHNhbWVzIHNv
IHRoYXQgd2UgY2FuIHJldXNlIHRoZSAKLSAgICAgICAgLy8gc3R1YnMgZm9yIHRob3NlLiAKLSAg
ICAgICAgLy8gQXMgc29vbiBhcyBhIERlYnVnRnJhbWUgb2JqZWN0IGlzIGZvdW5kIGRpZmZlcmVu
dCwKLSAgICAgICAgLy8gdGhlIHJlc3Qgb2YgdGhlIHN0YWNrIGlzIGRpZmZlcmVudCwgYWxsIHRo
ZSBvbGQKLSAgICAgICAgLy8gc3R1YnMgY2FuIGJlIGRyb3BwZWQgYW5kIGludmFsaWRhdGVkLCBu
ZXcgb25lcwotICAgICAgICAvLyBtdXN0IGJlIGNyZWF0ZWQuCi0KLSAgICAgICAgZm9yIChuZiA9
IGZyYW1lQ291bnQgLSAxLCBvZiA9IG1fZnJhbWVDb3VudCAtIDE7Ci0gICAgICAgICAgICAgbmYg
Pj0gMCAmJiBvZiA+PSAwOwotICAgICAgICAgICAgIG5mLS0sIG9mLS0pIHsKLSAgICAgICAgICAg
IGZyYW1lID0gbV9lbmdpbmUuZ2V0RnJhbWUobmYpOwotICAgICAgICAgICAgaWYgKGZyYW1lID09
IG1fZnJhbWVzW29mXS5tX2ZyYW1lKSB7Ci0gICAgICAgICAgICAgICAgZnJhbWVzW25mXSA9IG1f
ZnJhbWVzW29mXTsKLSAgICAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICB9Ci0gICAgICAgIC8vIG5vdyBkcm9wIGFsbCBvbGQgZnJhbWVzIHRoYXQgZGl2ZXJn
ZWQuCi0gICAgICAgIC8vIEFsc28gaW52YWxpZGF0ZSB0aGUgZnJhbWUgc3R1YnMgc28gdG8KLSAg
ICAgICAgLy8gdHJhY2tlZCB0aGF0IHRoZXkgYXJlIG5vIGxvbmdlciB2YWxpZC4KLSAgICAgICAg
Zm9yICg7IG9mID49IDA7IG9mLS0pIHsKLSAgICAgICAgICAgIG1fcmVEYmcuZHJvcFN0dWIobV9m
cmFtZXNbb2ZdLm1fZnJhbWUpOwotICAgICAgICAgICAgbV9mcmFtZXNbb2ZdLmludmFsaWRhdGUo
KTsKLSAgICAgICAgfQotICAgICAgICBmb3IgKDsgbmYgPj0gMDsgbmYtLSkgewotICAgICAgICAg
ICAgZnJhbWUgPSBtX2VuZ2luZS5nZXRGcmFtZShuZik7Ci0gICAgICAgICAgICBmcmFtZXNbbmZd
ID0gbmV3IEpzQ29udGV4dFN0dWIodGhpcywgZnJhbWUsIG5mKTsKLSAgICAgICAgfQotICAgICAg
ICBtX2ZyYW1lcyA9IGZyYW1lczsKLSAgICAgICAgbV9mcmFtZUNvdW50ID0gZnJhbWVDb3VudDsK
ICAgICB9CiB9Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9ob21lL2N2c3B1YmxpYy9qYWthcnRhLWJz
Zi9zcmMvYnNmLTIuMy9ic2Yvc3JjL29yZy9hcGFjaGUvYnNmL2VuZ2luZXMvamF2YXNjcmlwdC9B
dHRpYy9SaGlub0VuZ2luZURlYnVnZ2VyLmphdmEsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMgpy
ZXRyaWV2aW5nIHJldmlzaW9uIDEuMwpkaWZmIC11IC1yMS4yIC1yMS4zCi0tLSBqYWthcnRhLWJz
Zi9zcmMvYnNmLTIuMy9ic2Yvc3JjL29yZy9hcGFjaGUvYnNmL2VuZ2luZXMvamF2YXNjcmlwdC9B
dHRpYy9SaGlub0VuZ2luZURlYnVnZ2VyLmphdmEJMjAwMi8xMS8wNyAwMTo0OToxMgkxLjIKKysr
IGpha2FydGEtYnNmL3NyYy9ic2YtMi4zL2JzZi9zcmMvb3JnL2FwYWNoZS9ic2YvZW5naW5lcy9q
YXZhc2NyaXB0L0F0dGljL1JoaW5vRW5naW5lRGVidWdnZXIuamF2YQkyMDAzLzAzLzEwIDA1OjUy
OjM4CTEuMwpAQCAtNzQsMjQgKzc0LDIzIEBACiBpbXBvcnQgb3JnLmFwYWNoZS5ic2YuZGVidWcu
KjsKIGltcG9ydCBvcmcuYXBhY2hlLmJzZi5kZWJ1Zy5qc2RpLio7CiAKLXB1YmxpYyBjbGFzcyBS
aGlub0VuZ2luZURlYnVnZ2VyIGltcGxlbWVudHMgRGVidWdnZXIgeworY2xhc3MgUmhpbm9Fbmdp
bmVEZWJ1Z2dlciBpbXBsZW1lbnRzIERlYnVnZ2VyIHsKIAogICAgIC8qKiBUaGUgZ2xvYmFsIHNj
cmlwdCBvYmplY3QsIHdoZXJlIGFsbCBlbWJlZGRlZCBmdW5jdGlvbnMgYXJlIGRlZmluZWQsCiAg
ICAgICogYXMgd2VsbCBhcyB0aGUgc3RhbmRhcmQgRUNNQSAiY29yZSIgb2JqZWN0cy4KLSAgICAg
Ki8JCisgICAgICovCiAgICAgcHJpdmF0ZSBTY3JpcHRhYmxlIGdsb2JhbDsKICAgICBwcml2YXRl
IEpzT2JqZWN0IGdsb2JhbHN0dWI7CiAKLSAgICBwcml2YXRlIFJoaW5vQ29udGV4dFByb3h5IG1f
cmNwOwogICAgIHByaXZhdGUgU2NyaXB0YWJsZSB1bmRlZmluZWQ7CiAgICAgcHJpdmF0ZSBKc09i
amVjdCB1bmRlZmluZWRTdHViOwogCi0gICAgLyoqIAorICAgIC8qKgogICAgICAqICBIYXNodGFi
bGUgYWxsb3dpbmcgdG8gZmluZCB0aGUgc3R1YiBmb3IgYW4gb2JqZWN0IGluIHRoZSBKYXZhU2Ny
aXB0CiAgICAgICogIGVudmlyb25tZW50IGlmIG9uZSBleGlzdHMuCiAgICAgICogIFR5cGljYWxs
eTogU2NyaXB0YWJsZSwgRnVuY3Rpb24sIFNjcmlwdCwgZXRjLgogICAgICAqICBUaGlzIGlzIG5v
dCB1c2VkIGZvciBDb250ZXh0IGFuZCBEZWJ1Z0ZyYW1lLgotICAgICAqICBUaGV5IHR5cGljYWxs
eSBjb250YWlucyBKc09iamVjdCBhc3NvY2lhdGVkIHRvIAorICAgICAqICBUaGV5IHR5cGljYWxs
eSBjb250YWlucyBKc09iamVjdCBhc3NvY2lhdGVkIHRvCiAgICAgICogIG9yZy5tb3ppbGxhLmph
dmFzY3JpcHQuU2NyaXB0YWJsZU9iamVjdAogICAgICAqLwogICAgIHByaXZhdGUgSGFzaHRhYmxl
IHN0dWJzOwpAQCAtMTAyLDE2ICsxMDEsMTMgQEAKICAgICBwcml2YXRlIEZuT3JTY3JpcHQgbV9j
b21waWxpbmdGbk9yU2NyaXB0OwogICAgIHByaXZhdGUgSmF2YVNjcmlwdEVuZ2luZSBtX2VuZzsK
IAotICAgIHByaXZhdGUgVGhyZWFkIG1fdGhyZWFkOwotCiAgICAgcHJpdmF0ZSBIYXNodGFibGUg
bV9kb2N1bWVudHM7CiAKICAgICBCU0ZEZWJ1Z01hbmFnZXJJbXBsIGRiZ21ncjsKIAotICAgIHB1
YmxpYyBSaGlub0VuZ2luZURlYnVnZ2VyKEphdmFTY3JpcHRFbmdpbmUgZW5nKSAKKyAgICBSaGlu
b0VuZ2luZURlYnVnZ2VyKEphdmFTY3JpcHRFbmdpbmUgZW5nKQogICAgICAgICB0aHJvd3MgUmVt
b3RlRXhjZXB0aW9uIHsKICAgICAgICAgc3VwZXIoKTsKLSAgICAgICAgbV90aHJlYWQgPSBUaHJl
YWQuY3VycmVudFRocmVhZCgpOwogICAgICAgICBtX2VuZyA9IGVuZzsKICAgICAgICAgZGJnbWdy
ID0gZW5nLmdldERlYnVnTWFuYWdlcigpOwogCkBAIC0xMjcsNDUgKzEyMywzNyBAQAogICAgIC8q
KgogICAgICAqIENhbGxlZCB3aGVuIG91ciBkZWJ1Z2dlciBoYXMgYmVlbiBkaXNjb25uZWN0ZWQu
CiAgICAgICovCi0gICAgcHVibGljIHZvaWQgZGlzY29ubmVjdGVkRGVidWdnZXJOb3RpZnkoKSB7
CisgICAgdm9pZCBkaXNjb25uZWN0ZWREZWJ1Z2dlck5vdGlmeSgpIHsKICAgICAgICAgbV9jYWxs
YmFja3MgPSBudWxsOwogICAgIH0KIAotICAgIHZvaWQgYWRkU3R1YihDb250ZXh0IGN4LCBSaGlu
b0NvbnRleHRQcm94eSBqc2N4KSB7Ci0gICAgICAgIHN0dWJzLnB1dChjeCwganNjeCk7Ci0gICAg
fQotCi0gICAgdm9pZCBhZGRTdHViKERlYnVnRnJhbWUgZnJhbWUsIEpzQ29udGV4dFN0dWIgc3R1
YikgewotICAgICAgICBzdHVicy5wdXQoZnJhbWUsIHN0dWIpOwotICAgIH0KLQogICAgIHZvaWQg
YWRkU3R1YihTY3JpcHRhYmxlIHNvYmosIEpzT2JqZWN0IGpzb2JqKSB7CiAgICAgICAgIHN0dWJz
LnB1dChzb2JqLCBqc29iaik7CiAgICAgfQogCi0gICAgdm9pZCBkcm9wU3R1YihPYmplY3Qga2V5
KSB7CisgICAgdm9pZCBkcm9wU3R1YihTY3JpcHRhYmxlIGtleSkgewogICAgICAgICBzdHVicy5y
ZW1vdmUoa2V5KTsKICAgICB9CiAKLSAgICBwdWJsaWMgc3luY2hyb25pemVkIERvY3VtZW50Q2Vs
bCBnZXREb2N1bWVudENlbGwoU3RyaW5nIG5hbWUpIHsKKyAgICBzeW5jaHJvbml6ZWQgRG9jdW1l
bnRDZWxsIGdldERvY3VtZW50Q2VsbChTdHJpbmcgbmFtZSkgewogICAgICAgICByZXR1cm4gKERv
Y3VtZW50Q2VsbCkgbV9kb2N1bWVudHMuZ2V0KG5hbWUpOwogICAgIH0KIAogICAgIC8vIENhbGxl
ZCB1cG9uIGNyZWF0aW9uIG9mIGEgQlNGTWFuYWdlci4KLSAgICBwdWJsaWMgc3luY2hyb25pemVk
IERvY3VtZW50Q2VsbCBsb2FkRG9jdW1lbnROb3RpZnkoU3RyaW5nIG5hbWUpIHsKKyAgICBzeW5j
aHJvbml6ZWQgRG9jdW1lbnRDZWxsIGxvYWREb2N1bWVudE5vdGlmeShTdHJpbmcgbmFtZSkgewog
ICAgICAgICBEb2N1bWVudENlbGwgY2VsbDsKIAogICAgICAgICBjZWxsID0gKERvY3VtZW50Q2Vs
bCkgbV9kb2N1bWVudHMuZ2V0KG5hbWUpOwogICAgICAgICBpZiAoY2VsbCA9PSBudWxsKSB7CiAg
ICAgICAgICAgICBjZWxsID0gbmV3IERvY3VtZW50Q2VsbCh0aGlzLCBuYW1lKTsKICAgICAgICAg
ICAgIG1fZG9jdW1lbnRzLnB1dChuYW1lLCBjZWxsKTsKLSAgICAgICAgICAgIGlmIChkYmdtZ3Ih
PW51bGwpIAorICAgICAgICAgICAgaWYgKGRiZ21nciE9bnVsbCkKICAgICAgICAgICAgICAgICBk
YmdtZ3IubG9hZERvY3VtZW50Tm90aWZ5KG1fZW5nLCBuYW1lKTsKICAgICAgICAgfQogICAgICAg
ICByZXR1cm4gY2VsbDsKICAgICB9CiAKLSAgICBwdWJsaWMgc3luY2hyb25pemVkIHZvaWQgcGxh
Y2VCcmVha3BvaW50QXRMaW5lKGludCBicmtwdGlkLAorICAgIHN5bmNocm9uaXplZCB2b2lkIHBs
YWNlQnJlYWtwb2ludEF0TGluZShpbnQgYnJrcHRpZCwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZyBkb2NuYW1lLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGxpbmVubykgewogCkBA
IC0xNzQsNyArMTYyLDcgQEAKICAgICAgICAgY2VsbC5hZGRCcmVha3BvaW50QXRMaW5lKGJya3B0
aWQsIGxpbmVubyk7CiAgICAgfQogCi0gICAgcHVibGljIHN5bmNocm9uaXplZCB2b2lkIHBsYWNl
QnJlYWtwb2ludEF0T2Zmc2V0KGludCBicmtwdGlkLAorICAgIHN5bmNocm9uaXplZCB2b2lkIHBs
YWNlQnJlYWtwb2ludEF0T2Zmc2V0KGludCBicmtwdGlkLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmcgZG9jbmFtZSwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IG9mZnNldCkg
ewogCkBAIC0xODMsNyArMTcxLDcgQEAKICAgICAgICAgY2VsbC5hZGRCcmVha3BvaW50QXRPZmZz
ZXQoYnJrcHRpZCwgb2Zmc2V0KTsKICAgICB9CiAKLSAgICBwdWJsaWMgdm9pZCByZW1vdmVCcmVh
a3BvaW50KFN0cmluZyBkb2NuYW1lLCBpbnQgYnJrcHRpZCkKKyAgICB2b2lkIHJlbW92ZUJyZWFr
cG9pbnQoU3RyaW5nIGRvY25hbWUsIGludCBicmtwdGlkKQogICAgICAgICB0aHJvd3MgQlNGRXhj
ZXB0aW9uIHsKIAogICAgICAgICBEb2N1bWVudENlbGwgY2VsbDsKQEAgLTE5MSw3ICsxNzksNyBA
QAogICAgICAgICBjZWxsLnJlbW92ZUJyZWFrcG9pbnQoYnJrcHRpZCk7CiAgICAgfQogCi0gICAg
cHVibGljIHZvaWQgc2V0RW50cnlFeGl0KFN0cmluZyBkb2NuYW1lLCBib29sZWFuIG9uKQorICAg
IHZvaWQgc2V0RW50cnlFeGl0KFN0cmluZyBkb2NuYW1lLCBib29sZWFuIG9uKQogICAgICAgICB0
aHJvd3MgQlNGRXhjZXB0aW9uIHsKIAogICAgICAgICBEb2N1bWVudENlbGwgY2VsbDsKQEAgLTE5
OSw3ICsxODcsNyBAQAogICAgICAgICBjZWxsLnNldEVudHJ5RXhpdChvbik7CiAgICAgfQogCi0g
ICAgcHVibGljIE9iamVjdCBldmFsKFN0cmluZyBkb2NuYW1lLCBTdHJpbmcgZm5PclNjcmlwdCwg
aW50IGxpbmVubykKKyAgICBPYmplY3QgZXZhbChTdHJpbmcgZG9jbmFtZSwgU3RyaW5nIGZuT3JT
Y3JpcHQsIGludCBsaW5lbm8pCiAgICAgICAgIHRocm93cyBSZW1vdGVFeGNlcHRpb24gewogICAg
ICAgICBPYmplY3QgcmV0dmFsOwogICAgICAgICB0cnkgewpAQCAtMjEwLDEzICsxOTgsMTUgQEAK
ICAgICAgICAgfQogICAgIH0KIAotICAgIHB1YmxpYyBKc0NvbnRleHQgZ2V0Q29udGV4dChpbnQg
ZGVwdGgpIHsKLSAgICAgICAgaWYgKG1fcmNwICE9IG51bGwpIHJldHVybiBtX3JjcC5nZXRDb250
ZXh0KGRlcHRoKTsKKyAgICBKc0NvbnRleHQgZ2V0Q29udGV4dChpbnQgZGVwdGgpIHsKKyAgICAg
ICAgUmhpbm9Db250ZXh0UHJveHkgcmNwID0gUmhpbm9Db250ZXh0UHJveHkuZ2V0Q3VycmVudCgp
OworICAgICAgICBpZiAocmNwICE9IG51bGwpIHJldHVybiByY3AuZ2V0Q29udGV4dFN0dWIoZGVw
dGgpOwogICAgICAgICByZXR1cm4gbnVsbDsKICAgICB9CiAKLSAgICBwdWJsaWMgaW50IGdldENv
bnRleHRDb3VudCgpIHsKLSAgICAgICAgaWYgKG1fcmNwICE9IG51bGwpIHJldHVybiBtX3JjcC5n
ZXRDb250ZXh0Q291bnQoKTsKKyAgICBpbnQgZ2V0Q29udGV4dENvdW50KCkgeworICAgICAgICBS
aGlub0NvbnRleHRQcm94eSByY3AgPSBSaGlub0NvbnRleHRQcm94eS5nZXRDdXJyZW50KCk7Cisg
ICAgICAgIGlmIChyY3AgIT0gbnVsbCkgcmV0dXJuIHJjcC5nZXRDb250ZXh0Q291bnQoKTsKICAg
ICAgICAgcmV0dXJuIC0xOwogICAgIH0KIApAQCAtMjI0LDI0ICsyMTQsMjAgQEAKICAgICAgKiBS
ZXR1cm4gdGhlIGN1cnJlbnQgZGVidWdnZXIuCiAgICAgICogQHJldHVybiB0aGUgZGVidWdnZXIs
IG9yIG51bGwgaWYgbm9uZSBpcyBhdHRhY2hlZC4KICAgICAgKi8KLSAgICBwdWJsaWMgSnNDYWxs
YmFja3MgZ2V0RGVidWdnZXIoKSB7CisgICAgSnNDYWxsYmFja3MgZ2V0RGVidWdnZXIoKSB7CiAg
ICAgICAgIHJldHVybiBtX2NhbGxiYWNrczsKICAgICB9CiAKLSAgICBwdWJsaWMgT2JqZWN0IGdl
dERlYnVnSW50ZXJmYWNlKCkgeworICAgIE9iamVjdCBnZXREZWJ1Z0ludGVyZmFjZSgpIHsKICAg
ICAgICAgcmV0dXJuIGVuZ2luZVN0dWI7CiAgICAgfQogCi0gICAgcHVibGljIEpzT2JqZWN0IGdl
dEdsb2JhbE9iamVjdCgpIHsKKyAgICBKc09iamVjdCBnZXRHbG9iYWxPYmplY3QoKSB7CiAgICAg
ICAgIHJldHVybiBnbG9iYWxzdHViOwogICAgIH0KIAotICAgIHB1YmxpYyBSaGlub0NvbnRleHRQ
cm94eSBnZXRSaGlub0NvbnRleHRQcm94eSgpIHsKLSAgICAgICAgcmV0dXJuIG1fcmNwOwotICAg
IH0KLQogICAgIFJoaW5vQ29udGV4dFByb3h5IGdldFN0dWIoQ29udGV4dCBjeCkgewotICAgICAg
ICByZXR1cm4gKFJoaW5vQ29udGV4dFByb3h5KSBzdHVicy5nZXQoY3gpOworICAgICAgICByZXR1
cm4gKFJoaW5vQ29udGV4dFByb3h5KWN4LmdldERlYnVnZ2VyQ29udGV4dERhdGEoKTsKICAgICB9
CiAKICAgICBKc0NvbnRleHRTdHViIGdldFN0dWIoRGVidWdGcmFtZSBmcmFtZSkgewpAQCAtMjUy
LDE5ICsyMzgsMjAgQEAKICAgICAgICAgcmV0dXJuIChKc09iamVjdCkgc3R1YnMuZ2V0KHNvYmop
OwogICAgIH0KIAotICAgIHB1YmxpYyBKc09iamVjdCBnZXRVbmRlZmluZWRWYWx1ZSgpIHsKKyAg
ICBKc09iamVjdCBnZXRVbmRlZmluZWRWYWx1ZSgpIHsKICAgICAgICAgcmV0dXJuIHVuZGVmaW5l
ZFN0dWI7CiAgICAgfQogCi0gICAgcHVibGljIFN0cmluZyBnZXRUaHJlYWQoKSB7CisgICAgU3Ry
aW5nIGdldFRocmVhZCgpIHsKKyAgICAgICAgQ29udGV4dCBjeCA9IENvbnRleHQuZ2V0Q3VycmVu
dENvbnRleHQoKTsKICAgICAgICAgU3RyaW5nIHJlc3VsdHN0ciA9ICIiOwogCi0gICAgICAgIGlm
IChtX3RocmVhZCAhPSBudWxsKSB7CisgICAgICAgIGlmIChjeCAhPSBudWxsKSB7CiAgICAgICAg
ICAgICB0cnkgewogICAgICAgICAgICAgICAgIGZpbmFsIFN0cmluZyByZXN1bHRzdHJmID0gKFN0
cmluZykKICAgICAgICAgICAgICAgICBBY2Nlc3NDb250cm9sbGVyLmRvUHJpdmlsZWdlZChuZXcg
UHJpdmlsZWdlZEV4Y2VwdGlvbkFjdGlvbigpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIHB1
YmxpYyBPYmplY3QgcnVuKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIG1fdGhyZWFkLmdldE5hbWUoKTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gVGhyZWFkLmN1cnJlbnRUaHJlYWQoKS5nZXROYW1lKCk7CiAgICAgICAg
ICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAg
cmVzdWx0c3RyID0gcmVzdWx0c3RyZjsKQEAgLTI3NywxNSArMjY0LDE3IEBACiAgICAgICAgIHJl
dHVybiByZXN1bHRzdHI7CiAgICAgfQogCi0gICAgcHVibGljIFN0cmluZyBnZXRUaHJlYWRHcm91
cCgpIHsKKyAgICBTdHJpbmcgZ2V0VGhyZWFkR3JvdXAoKSB7CisgICAgICAgIENvbnRleHQgY3gg
PSBDb250ZXh0LmdldEN1cnJlbnRDb250ZXh0KCk7CiAgICAgICAgIFN0cmluZyByZXN1bHRzdHIg
PSAiIjsKIAotICAgICAgICBpZiAobV90aHJlYWQgIT0gbnVsbCkgeworICAgICAgICBpZiAoY3gg
IT0gbnVsbCkgewogICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICAgICBmaW5hbCBTdHJp
bmcgcmVzdWx0c3RyZiA9IChTdHJpbmcpCiAgICAgICAgICAgICAgICAgQWNjZXNzQ29udHJvbGxl
ci5kb1ByaXZpbGVnZWQobmV3IFByaXZpbGVnZWRFeGNlcHRpb25BY3Rpb24oKSB7CiAgICAgICAg
ICAgICAgICAgICAgICAgICBwdWJsaWMgT2JqZWN0IHJ1bigpIHRocm93cyBFeGNlcHRpb24gewot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBtX3RocmVhZC5nZXRUaHJlYWRHcm91
cCgpLmdldE5hbWUoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gVGhyZWFk
LmN1cnJlbnRUaHJlYWQoKS5nZXRUaHJlYWRHcm91cCgpLgorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGdldE5hbWUoKTsKICAgICAgICAgICAgICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICByZXN1bHRzdHIgPSByZXN1bHRz
dHJmOwpAQCAtMzA1LDcgKzI5NCw3IEBACiAgICAgLy8gdG8gaW1wbGVtZW50IFNURVBfSU4sIFNU
RVBfT1VULCBhbmQgU1RFUF9PVkVSLgogICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLSAgICBwdWJsaWMgdm9pZCBoYW5kbGVC
cmVha3BvaW50SGl0KENvbnRleHQgY3gpIHsKKyAgICB2b2lkIGhhbmRsZUJyZWFrcG9pbnRIaXQo
Q29udGV4dCBjeCwgUmhpbm9Db250ZXh0UHJveHkgcmNwKSB7CiAgICAgICAgIEpzQ2FsbGJhY2tz
IGRlYnVnZ2VyOwogICAgICAgICBCcmVha1BvaW50IGJwOwogICAgICAgICBFbnVtZXJhdGlvbiBl
OwpAQCAtMzEzLDQ4ICszMDIsNDEgQEAKICAgICAgICAgYm9vbGVhbiBicmVha3BvaW50Rm91bmQ9
ZmFsc2U7CiAgICAgICAgIFN0cmluZyBuYW1lOwogICAgICAgICBpbnQgbGluZW5vOwotICAgICAg
ICBib29sZWFuIHN1c3BlbmQ9ZmFsc2U7Ci0JCQotICAgICAgICBtX3RocmVhZCA9IFRocmVhZC5j
dXJyZW50VGhyZWFkKCk7Ci0gICAgICAgIERlYnVnTG9nLnN0ZG91dFByaW50bG4oIioqKiogSGFu
ZGxpbmcgYSBicmVha3BvaW50IGhpdC4uLiIsIAorCisgICAgICAgIERlYnVnTG9nLnN0ZG91dFBy
aW50bG4oIioqKiogSGFuZGxpbmcgYSBicmVha3BvaW50IGhpdC4uLiIsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgRGVidWdMb2cuQlNGX0xPR19MMyk7Ci0gICAgICAgIG1fcmNwID0g
Z2V0U3R1YihjeCk7Ci0gICAgICAgIGlmIChtX3JjcCA9PSBudWxsKSB7Ci0gICAgICAgICAgICBt
X3JjcCA9IG5ldyBSaGlub0NvbnRleHRQcm94eSh0aGlzLCBjeCk7Ci0gICAgICAgICAgICBhZGRT
dHViKGN4LCBtX3JjcCk7Ci0gICAgICAgIH0KLSAgICAgICAgLy8gaWYgd2UgaGF2ZSBubyBjYWxs
YmFja3MuLi4gdGhlbiBqdXN0IAorICAgICAgICAvLyBpZiB3ZSBoYXZlIG5vIGNhbGxiYWNrcy4u
LiB0aGVuIGp1c3QKICAgICAgICAgLy8gaWdub3JlIHRoZSBicmVha3BvaW50IGhpdCwgZG8gYSBy
dW4KICAgICAgICAgLy8gc28gdGhhdCBleGVjdXRpb24gcmVzdW1lcy4uLgogICAgICAgICBpZiAo
bV9jYWxsYmFja3M9PW51bGwpIHsKLSAgICAgICAgICAgIERlYnVnTG9nLnN0ZG91dFByaW50bG4o
IglObyBjYWxsYmFja3MsIHJlc3VtaW5nLi4uIiwgRGVidWdMb2cuQlNGX0xPR19MMyk7Ci0gICAg
ICAgICAgICBtX3JjcC5ydW4oKTsKKyAgICAgICAgICAgIERlYnVnTG9nLnN0ZG91dFByaW50bG4o
IiAgICBObyBjYWxsYmFja3MsIHJlc3VtaW5nLi4uIiwgRGVidWdMb2cuQlNGX0xPR19MMyk7Cisg
ICAgICAgICAgICByY3AucnVuKCk7CiAKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIC8v
IEZpcnN0LCBjaGVjayB0aGF0IHdlIGRpZG4ndCBoaXQgYSBrbm93biBicmVha3BvaW50LgogICAg
ICAgICAgICAgLy8gRmlyc3QsIHNlYXJjaCBpZiB3ZSBoYXZlIGJyZWFrcG9pbnRzIGZvciB0aGUg
Y3VycmVudCBkb2N1bWVudHMKIAotICAgICAgICAgICAgbmFtZSA9IG1fcmNwLmdldFNvdXJjZU5h
bWUoKTsKLSAgICAgICAgICAgIGxpbmVubyA9IG1fcmNwLmdldExpbmVOdW1iZXIoKTsKKyAgICAg
ICAgICAgIG5hbWUgPSByY3AuZ2V0U291cmNlTmFtZSgpOworICAgICAgICAgICAgbGluZW5vID0g
cmNwLmdldExpbmVOdW1iZXIoKTsKIAotICAgICAgICAgICAgRGVidWdMb2cuc3Rkb3V0UHJpbnRs
bigiCWluICIrbmFtZSsiIGF0ICIrbGluZW5vLCBEZWJ1Z0xvZy5CU0ZfTE9HX0wzKTsKKyAgICAg
ICAgICAgIERlYnVnTG9nLnN0ZG91dFByaW50bG4oIiAgICBpbiAiK25hbWUrIiBhdCAiK2xpbmVu
bywgRGVidWdMb2cuQlNGX0xPR19MMyk7CiAKICAgICAgICAgICAgIGNlbGwgPSBnZXREb2N1bWVu
dENlbGwobmFtZSk7Ci0gICAgICAgICAgICBpZiAoY2VsbCAhPSBudWxsKSAKLSAgICAgICAgICAg
ICAgICBfaGFuZGxlQnJlYWtwb2ludEhpdChjZWxsLGxpbmVubyk7Ci0gICAgICAgIH0gCi0gICAg
ICAgIG1fcmNwID0gbnVsbDsKKyAgICAgICAgICAgIGlmIChjZWxsICE9IG51bGwpCisgICAgICAg
ICAgICAgICAgX2hhbmRsZUJyZWFrcG9pbnRIaXQocmNwLGNlbGwsbGluZW5vKTsKKyAgICAgICAg
fQogICAgIH0KIAotICAgIHB1YmxpYyB2b2lkIF9oYW5kbGVCcmVha3BvaW50SGl0KERvY3VtZW50
Q2VsbCBjZWxsLCBpbnQgbGluZW5vKSB7Ci0KKyAgICB2b2lkIF9oYW5kbGVCcmVha3BvaW50SGl0
KFJoaW5vQ29udGV4dFByb3h5IHJjcCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERv
Y3VtZW50Q2VsbCBjZWxsLCBpbnQgbGluZW5vKQorICAgIHsKICAgICAgICAgSnNDYWxsYmFja3Mg
ZGVidWdnZXI7CiAgICAgICAgIEJyZWFrUG9pbnQgYnA7CiAgICAgICAgIEVudW1lcmF0aW9uIGU7
CiAgICAgICAgIEpzQ29udGV4dCBzdHViPW51bGw7CiAgICAgICAgIGJvb2xlYW4gYnJlYWtwb2lu
dEZvdW5kPWZhbHNlOwogICAgICAgICBib29sZWFuIHN1c3BlbmQ9ZmFsc2U7Ci0JCQorCiAgICAg
ICAgIHRyeSB7CiAgICAgICAgICAgICBicCA9IGNlbGwuZmluZEJyZWFrcG9pbnRBdExpbmUobGlu
ZW5vKTsKICAgICAgICAgfSBjYXRjaCAoQlNGRXhjZXB0aW9uIGJzZmV4KSB7CkBAIC0zNjMsMTkg
KzM0NSwxOSBAQAogICAgICAgICBpZiAoYnAgIT0gbnVsbCkgewogICAgICAgICAgICAgYnJlYWtw
b2ludEZvdW5kID0gdHJ1ZTsKICAgICAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgICAgICAgc3R1
YiA9IG1fcmNwLmhpdEJyZWFrcG9pbnQoKTsKLSAgICAgICAgICAgICAgICBEZWJ1Z0xvZy5zdGRv
dXRQcmludGxuKCIJYnJlYWtwb2ludCBjYWxsYmFjay4uLiIsIERlYnVnTG9nLkJTRl9MT0dfTDMp
OwotICAgICAgICAgICAgIAltX2NhbGxiYWNrcy5jcmVhdGVGdXR1cmUobV9yY3ApOworICAgICAg
ICAgICAgICAgIHN0dWIgPSByY3AuaGl0QnJlYWtwb2ludCgpOworICAgICAgICAgICAgICAgIERl
YnVnTG9nLnN0ZG91dFByaW50bG4oIiAgICBicmVha3BvaW50IGNhbGxiYWNrLi4uIiwgRGVidWdM
b2cuQlNGX0xPR19MMyk7CisgICAgICAgICAgICAgICAgIG1fY2FsbGJhY2tzLmNyZWF0ZUZ1dHVy
ZShyY3ApOwogICAgICAgICAgICAgICAgIG1fY2FsbGJhY2tzLmhhbmRsZUJyZWFrcG9pbnRIaXQo
c3R1Yik7CiAgICAgICAgICAgICAgICAgc3VzcGVuZCA9IHRydWU7CiAgICAgICAgICAgICB9IGNh
dGNoIChSZW1vdGVFeGNlcHRpb24gcmV4KSB7Ci0gICAgICAgICAgICAgICAgRGVidWdMb2cuc3Rk
ZXJyUHJpbnRsbigiCUVYQ0VQVElPTiBPQ0NVUkVEIERVUklORyBCUkVBS1BPSU5UIENBTExCQUNL
IiwgRGVidWdMb2cuQlNGX0xPR19MMCk7CQkJCQorICAgICAgICAgICAgICAgIERlYnVnTG9nLnN0
ZGVyclByaW50bG4oIiAgICBFWENFUFRJT04gT0NDVVJFRCBEVVJJTkcgQlJFQUtQT0lOVCBDQUxM
QkFDSyIsIERlYnVnTG9nLkJTRl9MT0dfTDApOwogICAgICAgICAgICAgICAgIERlYnVnTG9nLnN0
ZGVyclByaW50bG4ocmV4LmdldE1lc3NhZ2UoKSwgRGVidWdMb2cuQlNGX0xPR19MMCk7CiAgICAg
ICAgICAgICAgICAgcmV4LnByaW50U3RhY2tUcmFjZSgpOwogICAgICAgICAgICAgICAgIHN1c3Bl
bmQgPSBmYWxzZTsKICAgICAgICAgICAgIH0KICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAg
IERlYnVnTG9nLnN0ZG91dFByaW50bG4oIglkaWRuJ3QgZmluZCBhIGJyZWFrcG9pbnQuLi4iLCBE
ZWJ1Z0xvZy5CU0ZfTE9HX0wzKTsKKyAgICAgICAgICAgIERlYnVnTG9nLnN0ZG91dFByaW50bG4o
IiAgICBkaWRuJ3QgZmluZCBhIGJyZWFrcG9pbnQuLi4iLCBEZWJ1Z0xvZy5CU0ZfTE9HX0wzKTsK
ICAgICAgICAgICAgIGJyZWFrcG9pbnRGb3VuZCA9IGZhbHNlOwogICAgICAgICB9CiAKQEAgLTM4
NCw4NyArMzY2LDEwNyBAQAogICAgICAgICAgICAgLy8gbGluZSBpbiB0aGUgY3VycmVudCBkb2N1
bWVudCwgd2UgbXVzdCBiZSBzdGVwcGluZwogICAgICAgICAgICAgLy8gb3IgaW4gZW50cnkvZXhp
dCBtb2RlCiAgICAgICAgICAgICB0cnkgewotICAgICAgICAgICAgICAgIHN0dWIgPSBtX3JjcC5z
dGVwcGluZygpOworICAgICAgICAgICAgICAgIHN0dWIgPSByY3Auc3RlcHBpbmcoKTsKICAgICAg
ICAgICAgICAgICBGbk9yU2NyaXB0IGN1cnJlbnQgPSBjZWxsLmZpbmRGbk9yU2NyaXB0Q29udGFp
bmluZyhsaW5lbm8pOwogICAgICAgICAgICAgICAgIGlmIChzdHViICE9IG51bGwpIHsKICAgICAg
ICAgICAgICAgICAgICAgY2VsbC5zZXRMYXN0Rm5PclNjcmlwdChjdXJyZW50KTsKLSAgICAgICAg
ICAgICAgICAgICAgRGVidWdMb2cuc3Rkb3V0UHJpbnRsbigiCXN0ZXBwaW5nLWRvbmUgY2FsbGJh
Y2suLi4iLCAKKyAgICAgICAgICAgICAgICAgICAgRGVidWdMb2cuc3Rkb3V0UHJpbnRsbigiICAg
IHN0ZXBwaW5nLWRvbmUgY2FsbGJhY2suLi4iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIERlYnVnTG9nLkJTRl9MT0dfTDMpOwotICAgICAgICAgICAgICAgIAlt
X2NhbGxiYWNrcy5jcmVhdGVGdXR1cmUobV9yY3ApOworICAgICAgICAgICAgICAgICAgICBtX2Nh
bGxiYWNrcy5jcmVhdGVGdXR1cmUocmNwKTsKICAgICAgICAgICAgICAgICAgICAgbV9jYWxsYmFj
a3MuaGFuZGxlU3RlcHBpbmdEb25lKHN0dWIpOwogICAgICAgICAgICAgICAgICAgICBzdXNwZW5k
ID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICB9IAorICAgICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgICAgICBlbHNlIGlmIChjZWxsLmdldEVudHJ5RXhpdCgpICYmCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgKGN1cnJlbnQgIT0gY2VsbC5nZXRMYXN0Rm5PclNjcmlwdCgpKSAmJgotICAgICAg
ICAgICAgICAgICAgICAgICAgIChtX3JjcC5nZXRDb250ZXh0Q291bnQoKSA9PSAwKSkgeworICAg
ICAgICAgICAgICAgICAgICAgICAgIChyY3AuZ2V0Q29udGV4dENvdW50KCkgPT0gMCkpIHsKICAg
ICAgICAgICAgICAgICAgICAgY2VsbC5zZXRMYXN0Rm5PclNjcmlwdChjdXJyZW50KTsKLSAgICAg
ICAgICAgICAgICAgICAgc3R1YiA9IG1fcmNwLmVudHJ5X2V4aXRfbW9kZSgpOwotICAgICAgICAg
ICAgICAgICAgICBEZWJ1Z0xvZy5zdGRvdXRQcmludGxuKCIgICAgZW50cnkvZXhpdCBtb2RlLi4u
IiwgCisgICAgICAgICAgICAgICAgICAgIHN0dWIgPSByY3AuZW50cnlfZXhpdF9tb2RlKCk7Cisg
ICAgICAgICAgICAgICAgICAgIERlYnVnTG9nLnN0ZG91dFByaW50bG4oIiAgICBlbnRyeS9leGl0
IG1vZGUuLi4iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERl
YnVnTG9nLkJTRl9MT0dfTDMpOwotICAgICAgICAgICAgICAgIAltX2NhbGxiYWNrcy5jcmVhdGVG
dXR1cmUobV9yY3ApOworICAgICAgICAgICAgICAgICAgICBtX2NhbGxiYWNrcy5jcmVhdGVGdXR1
cmUocmNwKTsKICAgICAgICAgICAgICAgICAgICAgbV9jYWxsYmFja3MuaGFuZGxlU3RlcHBpbmdE
b25lKHN0dWIpOwogICAgICAgICAgICAgICAgICAgICBzdXNwZW5kID0gdHJ1ZTsKICAgICAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIERl
YnVnTG9nLnN0ZG91dFByaW50bG4oIglObyByZWFzb24gdG8gc3VzcGVuZCBleGVjdXRpb24uIiwg
RGVidWdMb2cuQlNGX0xPR19MMyk7CQkJCQorICAgICAgICAgICAgICAgICAgICBEZWJ1Z0xvZy5z
dGRvdXRQcmludGxuKCIgICAgTm8gcmVhc29uIHRvIHN1c3BlbmQgZXhlY3V0aW9uLiIsIERlYnVn
TG9nLkJTRl9MT0dfTDMpOwogICAgICAgICAgICAgICAgICAgICBzdXNwZW5kID0gZmFsc2U7CiAg
ICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfSBjYXRjaCAoUmVtb3RlRXhjZXB0aW9uIHJl
eCkgewotICAgICAgICAgICAgICAgIERlYnVnTG9nLnN0ZGVyclByaW50bG4oIglFWENFUFRJT04g
T0NDVVJFRCBEVVJJTkcgU1RFUFBJTkctRE9ORSBDQUxMQkFDSyIsIERlYnVnTG9nLkJTRl9MT0df
TDApOwkJCQkKKyAgICAgICAgICAgICAgICBEZWJ1Z0xvZy5zdGRlcnJQcmludGxuKCIgICAgRVhD
RVBUSU9OIE9DQ1VSRUQgRFVSSU5HIFNURVBQSU5HLURPTkUgQ0FMTEJBQ0siLCBEZWJ1Z0xvZy5C
U0ZfTE9HX0wwKTsKICAgICAgICAgICAgICAgICBEZWJ1Z0xvZy5zdGRlcnJQcmludGxuKHJleC5n
ZXRNZXNzYWdlKCksIERlYnVnTG9nLkJTRl9MT0dfTDApOwogICAgICAgICAgICAgICAgIHJleC5w
cmludFN0YWNrVHJhY2UoKTsKICAgICAgICAgICAgICAgICBzdXNwZW5kID0gZmFsc2U7CiAgICAg
ICAgICAgICB9CiAgICAgICAgIH0KICAgICAgICAgaWYgKHN1c3BlbmQpIHsKLSAgICAgICAgICAg
IC8vIG5vdywgc3VzcGVuZCB0aGlzIHRocmVhZC4uLiB1bnRpbCAKKyAgICAgICAgICAgIC8vIG5v
dywgc3VzcGVuZCB0aGlzIHRocmVhZC4uLiB1bnRpbAogICAgICAgICAgICAgLy8gd2UgcmVzdGFy
dC4KICAgICAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgICAgICAgbV9jYWxsYmFja3Muc3VzcGVu
ZEZ1dHVyZShtX3JjcCk7CisgICAgICAgICAgICAgICAgbV9jYWxsYmFja3Muc3VzcGVuZEZ1dHVy
ZShyY3ApOwogICAgICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7CiAgICAgICAgICAg
ICAgICAgRGVidWdMb2cuc3Rkb3V0UHJpbnRsbigiRnV0dXJlIGNyZWF0aW9uIGZhaWxlZC4uLiBy
ZWxlYXNpbmcgdGhlIGVuZ2luZSIsIERlYnVnTG9nLkJTRl9MT0dfTDMpOwotICAgICAgICAgICAg
ICAgIG1fcmNwLnJ1bigpOworICAgICAgICAgICAgICAgIHJjcC5ydW4oKTsKICAgICAgICAgICAg
IH0KLSAgICAgICAgfQkJCQorICAgICAgICB9CiAgICAgfQogCi0gICAgcHVibGljIHZvaWQgcnVu
KEpzRW5naW5lU3R1YiBlbmcpIHRocm93cyBFeGNlcHRpb24geworICAgIHZvaWQgcnVuKEpzRW5n
aW5lU3R1YiBlbmcpIHRocm93cyBFeGNlcHRpb24gewogICAgICAgICBEZWJ1Z0xvZy5zdGRvdXRQ
cmludGxuKCJSaGlub0VuZ2luZURlYnVnZ2VyOjpydW4oKS4uLiIsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgRGVidWdMb2cuQlNGX0xPR19MMyk7Ci0gICAgICAgIG1fcmNwLnJ1bigp
OyAKLSAgICAgICAgbV9jYWxsYmFja3MuY29tcGxldGVGdXR1cmUobV9yY3ApOworICAgICAgICBS
aGlub0NvbnRleHRQcm94eSByY3AgPSBSaGlub0NvbnRleHRQcm94eS5nZXRDdXJyZW50KCk7Cisg
ICAgICAgIHJjcC5ydW4oKTsKKyAgICAgICAgbV9jYWxsYmFja3MuY29tcGxldGVGdXR1cmUocmNw
KTsKICAgICB9CiAKLSAgICBwdWJsaWMgdm9pZCBzdGVwSW4oSnNFbmdpbmVTdHViIGVuZykgdGhy
b3dzIEV4Y2VwdGlvbiB7CisgICAgdm9pZCBzdGVwSW4oSnNFbmdpbmVTdHViIGVuZykgdGhyb3dz
IEV4Y2VwdGlvbiB7CiAgICAgICAgIERlYnVnTG9nLnN0ZG91dFByaW50bG4oIlJoaW5vRW5naW5l
RGVidWdnZXI6OnN0ZXBJbigpLi4uIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBE
ZWJ1Z0xvZy5CU0ZfTE9HX0wzKTsKLSAgICAgICAgbV9yY3Auc3RlcEluKCk7Ci0gICAgICAgIG1f
Y2FsbGJhY2tzLmNvbXBsZXRlRnV0dXJlKG1fcmNwKTsKKyAgICAgICAgUmhpbm9Db250ZXh0UHJv
eHkgcmNwID0gUmhpbm9Db250ZXh0UHJveHkuZ2V0Q3VycmVudCgpOworICAgICAgICByY3Auc3Rl
cEluKCk7CisgICAgICAgIG1fY2FsbGJhY2tzLmNvbXBsZXRlRnV0dXJlKHJjcCk7CiAgICAgfQog
Ci0gICAgcHVibGljIHZvaWQgc3RlcE91dChKc0VuZ2luZVN0dWIgZW5nKSB0aHJvd3MgRXhjZXB0
aW9uIHsKKyAgICB2b2lkIHN0ZXBPdXQoSnNFbmdpbmVTdHViIGVuZykgdGhyb3dzIEV4Y2VwdGlv
biB7CiAgICAgICAgIERlYnVnTG9nLnN0ZG91dFByaW50bG4oIlJoaW5vRW5naW5lRGVidWdnZXI6
OnN0ZXBPdXQoKS4uLiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRGVidWdMb2cu
QlNGX0xPR19MMyk7Ci0gICAgICAgIG1fcmNwLnN0ZXBPdXQoKTsKLSAgICAgICAgbV9jYWxsYmFj
a3MuY29tcGxldGVGdXR1cmUobV9yY3ApOworICAgICAgICBSaGlub0NvbnRleHRQcm94eSByY3Ag
PSBSaGlub0NvbnRleHRQcm94eS5nZXRDdXJyZW50KCk7CisgICAgICAgIHJjcC5zdGVwT3V0KCk7
CisgICAgICAgIG1fY2FsbGJhY2tzLmNvbXBsZXRlRnV0dXJlKHJjcCk7CiAgICAgfQotICAgIHB1
YmxpYyB2b2lkIHN0ZXBPdmVyKEpzRW5naW5lU3R1YiBlbmcpIHRocm93cyBFeGNlcHRpb24gewor
ICAgIHZvaWQgc3RlcE92ZXIoSnNFbmdpbmVTdHViIGVuZykgdGhyb3dzIEV4Y2VwdGlvbiB7CiAK
ICAgICAgICAgRGVidWdMb2cuc3Rkb3V0UHJpbnRsbigiUmhpbm9FbmdpbmVEZWJ1Z2dlcjo6c3Rl
cE92ZXIoKS4uLiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRGVidWdMb2cuQlNG
X0xPR19MMyk7Ci0gICAgICAgIG1fcmNwLnN0ZXBPdmVyKCk7Ci0gICAgICAgIG1fY2FsbGJhY2tz
LmNvbXBsZXRlRnV0dXJlKG1fcmNwKTsKKyAgICAgICAgUmhpbm9Db250ZXh0UHJveHkgcmNwID0g
Umhpbm9Db250ZXh0UHJveHkuZ2V0Q3VycmVudCgpOworICAgICAgICByY3Auc3RlcE92ZXIoKTsK
KyAgICAgICAgbV9jYWxsYmFja3MuY29tcGxldGVGdXR1cmUocmNwKTsKICAgICB9Ci0JCisKICAg
ICBwdWJsaWMgdm9pZCBoYW5kbGVDb21waWxhdGlvbkRvbmUoQ29udGV4dCBjeCwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRGVidWdnYWJsZVNjcmlwdCBmbk9yU2NyaXB0
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmdCdWZmZXIgc291
cmNlKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZyBzb3Vy
Y2UpIHsKIAotICAgICAgICBtX3RocmVhZCA9IFRocmVhZC5jdXJyZW50VGhyZWFkKCk7CiAgICAg
ICAgIG1fY29tcGlsaW5nRm5PclNjcmlwdC5hZGRDb21waWxhdGlvblVuaXQoY3gsIGZuT3JTY3Jp
cHQsIHNvdXJjZSk7CiAgICAgfQogCi0gICAgcHVibGljIHZvaWQgaGFuZGxlRXhjZXB0aW9uVGhy
b3duKENvbnRleHQgY3gsIE9iamVjdCBleGNlcHRpb25UaHJvd24pIHsKKyAgICBwdWJsaWMgRGVi
dWdGcmFtZSBnZXRGcmFtZShDb250ZXh0IGN4LCBEZWJ1Z2dhYmxlU2NyaXB0IGZuT3JTY3JpcHQp
IHsKKyAgICAgICAgQ29tcGlsYXRpb25Vbml0IHVuaXQ7CisgICAgICAgIHVuaXQgPSBtX2NvbXBp
bGluZ0ZuT3JTY3JpcHQuZ2V0Q29tcGlsYXRpb25Vbml0KGZuT3JTY3JpcHQpOworICAgICAgICBS
aGlub0NvbnRleHRQcm94eSByY3AgPSBnZXRTdHViKGN4KTsKKyAgICAgICAgdHJ5IHsKKyAgICAg
ICAgICAgIEpzQ29udGV4dFN0dWIgc3R1YiA9IG5ldyBKc0NvbnRleHRTdHViKHJjcCwgdW5pdCk7
CisgICAgICAgICAgICByZXR1cm4gc3R1Yi5nZXRSaGlub0RlYnVnRnJhbWUoKTsKKyAgICAgICAg
fSBjYXRjaCAoUmVtb3RlRXhjZXB0aW9uIHJleCkgeworICAgICAgICAgICAgRGVidWdMb2cuc3Rk
ZXJyUHJpbnRsbigiICAgIEVYQ0VQVElPTiBPQ0NVUkVEIERVUklORyBGUkFNRSBJTklUSUFMSVpB
VElPTiIsIERlYnVnTG9nLkJTRl9MT0dfTDApOworICAgICAgICAgICAgRGVidWdMb2cuc3RkZXJy
UHJpbnRsbihyZXguZ2V0TWVzc2FnZSgpLCBEZWJ1Z0xvZy5CU0ZfTE9HX0wwKTsKKyAgICAgICAg
ICAgIHJleC5wcmludFN0YWNrVHJhY2UoKTsKKyAgICAgICAgICAgIHJldHVybiBudWxsOworICAg
ICAgICB9CisgICAgfQorCisgICAgdm9pZCBoYW5kbGVFeGNlcHRpb25UaHJvd24oQ29udGV4dCBj
eCwgUmhpbm9Db250ZXh0UHJveHkgcmNwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFRocm93YWJsZSBleGNlcHRpb25UaHJvd24pCisgICAgewogICAgICAgICBKc0NvbnRleHQgc3R1
YjsKICAgICAgICAgSnNDYWxsYmFja3MgZGVidWdnZXI7CiAgICAgICAgIEJyZWFrUG9pbnQgYnA7
CkBAIC00NzMsNTMgKzQ3NSw0MCBAQAogICAgICAgICBTdHJpbmcgbmFtZSxtc2c7CiAgICAgICAg
IEV4Y2VwdGlvbiBleDsKICAgICAgICAgaW50IGxpbmVubzsKLSAgICAgICAgTmF0aXZlRXJyb3Ig
ZXJyb3I7Ci0JCQotICAgICAgICBtX3RocmVhZCA9IFRocmVhZC5jdXJyZW50VGhyZWFkKCk7Ci0g
ICAgICAgIG1fcmNwID0gZ2V0U3R1YihjeCk7Ci0gICAgICAgIGlmIChtX3JjcCA9PSBudWxsKSB7
Ci0gICAgICAgICAgICBtX3JjcCA9IG5ldyBSaGlub0NvbnRleHRQcm94eSh0aGlzLCBjeCk7Ci0g
ICAgICAgICAgICBhZGRTdHViKGN4LCBtX3JjcCk7CisKKyAgICAgICAgLy8gaWYgd2UgaGF2ZSBu
byBjYWxsYmFja3MuLi4gdGhlbiBqdXN0CisgICAgICAgIC8vIGlnbm9yZSB0aGUgYnJlYWtwb2lu
dCBoaXQsIGRvIGEgcnVuCisgICAgICAgIC8vIHNvIHRoYXQgZXhlY3V0aW9uIHJlc3VtZXMuLi4K
KyAgICAgICAgaWYgKG1fY2FsbGJhY2tzPT1udWxsKSB7CisgICAgICAgICAgICByY3AucnVuKCk7
CisgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KLSAgICAgICAgdHJ5IHsKLSAgICAgICAg
ICAgIC8vIGlmIHdlIGhhdmUgbm8gY2FsbGJhY2tzLi4uIHRoZW4ganVzdCAKLSAgICAgICAgICAg
IC8vIGlnbm9yZSB0aGUgYnJlYWtwb2ludCBoaXQsIGRvIGEgcnVuCi0gICAgICAgICAgICAvLyBz
byB0aGF0IGV4ZWN1dGlvbiByZXN1bWVzLi4uCi0gICAgICAgICAgICBpZiAobV9jYWxsYmFja3M9
PW51bGwpIHsKLSAgICAgICAgICAgICAgICBtX3JjcC5ydW4oKTsKLSAgICAgICAgICAgICAgICBy
ZXR1cm47Ci0gICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIC8vIEZpcnN0LCBjaGVjayB0aGF0
IHdlIGRpZG4ndCBoaXQgYSBrbm93biBicmVha3BvaW50LgotICAgICAgICAgICAgLy8gRmlyc3Qs
IHNlYXJjaCBpZiB3ZSBoYXZlIGJyZWFrcG9pbnRzIGZvciB0aGUgY3VycmVudCBkb2N1bWVudHMK
LSAgICAgICAgICAgIG5hbWUgPSBtX3JjcC5nZXRTb3VyY2VOYW1lKCk7Ci0gICAgICAgICAgICBs
aW5lbm8gPSBtX3JjcC5nZXRMaW5lTnVtYmVyKCk7Ci0gICAgICAgICAgICB0cnkgewotICAgICAg
ICAgICAgICAgIGVycm9yID0gKE5hdGl2ZUVycm9yKWV4Y2VwdGlvblRocm93bjsKLSAgICAgICAg
ICAgICAgICBtc2cgPSBlcnJvci5nZXROYW1lKCkgKyAiOiAiICsgZXJyb3IuZ2V0TWVzc2FnZSgp
OwotICAgICAgICAgICAgfSBjYXRjaCAoQ2xhc3NDYXN0RXhjZXB0aW9uIGNjZXgpIHsKLSAgICAg
ICAgICAgICAgICBtc2cgPSAiVW5rbm93biBKYXZhU2NyaXB0IEV4Y2VwdGlvbiI7Ci0gICAgICAg
ICAgICB9Ci0gICAgICAgICAgICBleCA9IG5ldyBFeGNlcHRpb24obXNnKTsKKyAgICAgICAgLy8g
Rmlyc3QsIGNoZWNrIHRoYXQgd2UgZGlkbid0IGhpdCBhIGtub3duIGJyZWFrcG9pbnQuCisgICAg
ICAgIC8vIEZpcnN0LCBzZWFyY2ggaWYgd2UgaGF2ZSBicmVha3BvaW50cyBmb3IgdGhlIGN1cnJl
bnQgZG9jdW1lbnRzCisgICAgICAgIG5hbWUgPSByY3AuZ2V0U291cmNlTmFtZSgpOworICAgICAg
ICBsaW5lbm8gPSByY3AuZ2V0TGluZU51bWJlcigpOworICAgICAgICBpZiAoZXhjZXB0aW9uVGhy
b3duIGluc3RhbmNlb2YgRWNtYUVycm9yKSB7CisgICAgICAgICAgICBtc2cgPSAoKEVjbWFFcnJv
cilleGNlcHRpb25UaHJvd24pLmdldEVycm9yT2JqZWN0KCkudG9TdHJpbmcoKTsKKyAgICAgICAg
fSBlbHNlIHsKKyAgICAgICAgICAgIG1zZyA9IGV4Y2VwdGlvblRocm93bi50b1N0cmluZygpOwor
ICAgICAgICB9CisgICAgICAgIGV4ID0gbmV3IEV4Y2VwdGlvbihtc2cpOwogCi0gICAgICAgICAg
ICBjZWxsID0gZ2V0RG9jdW1lbnRDZWxsKG5hbWUpOwotICAgICAgICAgICAgaWYgKGNlbGwgPT0g
bnVsbCkgcmV0dXJuOworICAgICAgICBjZWxsID0gZ2V0RG9jdW1lbnRDZWxsKG5hbWUpOworICAg
ICAgICBpZiAoY2VsbCA9PSBudWxsKSByZXR1cm47CiAKLSAgICAgICAgICAgIHRyeSB7Ci0gICAg
ICAgICAgICAgICAgc3R1YiA9IG1fcmNwLmV4Y2VwdGlvblRocm93bigpOwkKLSAgICAgICAgICAg
ICAgICBtX2NhbGxiYWNrcy5jcmVhdGVGdXR1cmUobV9yY3ApOwotICAgICAgICAgICAgICAgIG1f
Y2FsbGJhY2tzLmhhbmRsZUV4Y2VwdGlvblRocm93bihzdHViLGV4KTsKLQkJCQkKLSAgICAgICAg
ICAgICAgICAvLyBub3csIHN1c3BlbmQgdGhpcyB0aHJlYWQuLi4gdW50aWwgCi0gICAgICAgICAg
ICAgICAgLy8gd2UgcmVzdGFydC4KLSAgICAgICAgICAgICAgICBtX2NhbGxiYWNrcy5zdXNwZW5k
RnV0dXJlKG1fcmNwKTsKLQkJCQkKLSAgICAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleDIp
IHsKLSAgICAgICAgICAgICAgICBtX3JjcC5ydW4oKTsKLQkJCQkKLSAgICAgICAgICAgIH0KLSAg
ICAgICAgfSBmaW5hbGx5IHsKLSAgICAgICAgICAgIG1fcmNwID0gbnVsbDsKKyAgICAgICAgdHJ5
IHsKKyAgICAgICAgICAgIHN0dWIgPSByY3AuZXhjZXB0aW9uVGhyb3duKCk7CisgICAgICAgICAg
ICBtX2NhbGxiYWNrcy5jcmVhdGVGdXR1cmUocmNwKTsKKyAgICAgICAgICAgIG1fY2FsbGJhY2tz
LmhhbmRsZUV4Y2VwdGlvblRocm93bihzdHViLGV4KTsKKworICAgICAgICAgICAgLy8gbm93LCBz
dXNwZW5kIHRoaXMgdGhyZWFkLi4uIHVudGlsCisgICAgICAgICAgICAvLyB3ZSByZXN0YXJ0Lgor
ICAgICAgICAgICAgbV9jYWxsYmFja3Muc3VzcGVuZEZ1dHVyZShyY3ApOworCisgICAgICAgIH0g
Y2F0Y2ggKEV4Y2VwdGlvbiBleDIpIHsKKyAgICAgICAgICAgIHJjcC5ydW4oKTsKICAgICAgICAg
fQogICAgIH0KIApAQCAtNTY4LDEwICs1NTcsMTAgQEAKICAgICAgKiBUaGUgZW5naW5lIHdpbGwg
Y2FsbCB0aGUgYXR0YWNoZWQgZGVidWdnZXIncyBoYW5kbGVCcmVha3BvaW50SGl0CiAgICAgICog
bWV0aG9kIG9uIHRoZSBuZXh0IGxpbmUgaXQgZXhlY3V0ZXMgaWYgaXNMaW5lU3RlcCBpcyB0cnVl
LgogICAgICAqIE1heSBiZSB1c2VkIGZyb20gYW5vdGhlciB0aHJlYWQgdG8gaW50ZXJydXB0IGV4
ZWN1dGlvbi4KLSAgICAgKiAKKyAgICAgKgogICAgICAqIEBwYXJhbSBpc0xpbmVTdGVwIGlmIHRy
dWUsIGJyZWFrIG5leHQgbGluZQogICAgICAqLwotICAgIHB1YmxpYyB2b2lkIHNldEJyZWFrTmV4
dExpbmUoSnNDb250ZXh0IGNvbnRleHQsIGJvb2xlYW4gaXNMaW5lU3RlcCkgeworICAgIHZvaWQg
c2V0QnJlYWtOZXh0TGluZShKc0NvbnRleHQgY29udGV4dCwgYm9vbGVhbiBpc0xpbmVTdGVwKSB7
CiAgICAgfQogCiAgICAgdm9pZCBzZXRDb21waWxpbmdGbk9yU2NyaXB0KEZuT3JTY3JpcHQgZm5P
clNjcmlwdCkgewpAQCAtNTgzLDcgKzU3Miw3IEBACiAgICAgICogQHBhcmFtIGRlYnVnZ2VyIHRo
ZSBkZWJ1Z2dlciB0byBiZSB1c2VkIG9uIGNhbGxiYWNrcyBmcm9tCiAgICAgICogdGhlIGVuZ2lu
ZS4KICAgICAgKi8KLSAgICBwdWJsaWMgdm9pZCBzZXREZWJ1Z2dlcihKc0NhbGxiYWNrcyBkZWJ1
Z2dlcikgeworICAgIHZvaWQgc2V0RGVidWdnZXIoSnNDYWxsYmFja3MgZGVidWdnZXIpIHsKICAg
ICAgICAgbV9jYWxsYmFja3MgPSBkZWJ1Z2dlcjsKICAgICB9CiB9Cg==
</data>        

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>34975</attachid>
            <date>2004-07-07 20:16 0000</date>
            <desc>Same patch as in previous message, only for the actual package, not CVS</desc>
            <filename>bsf-rhino-1.5.patch</filename>
            <type>text/plain</type>
            <data encoding="base64">ZGlmZiAtdXJOIGJzZi0yLjMuMC9zcmMvYnNmL3NyYy9vcmcvYXBhY2hlL2JzZi9lbmdpbmVzL2ph
dmFzY3JpcHQvQ29tcGlsYXRpb25Vbml0LmphdmEgYnNmLTIuMy4wLnBhdGNoZWQvc3JjL2JzZi9z
cmMvb3JnL2FwYWNoZS9ic2YvZW5naW5lcy9qYXZhc2NyaXB0L0NvbXBpbGF0aW9uVW5pdC5qYXZh
Ci0tLSBic2YtMi4zLjAvc3JjL2JzZi9zcmMvb3JnL2FwYWNoZS9ic2YvZW5naW5lcy9qYXZhc2Ny
aXB0L0NvbXBpbGF0aW9uVW5pdC5qYXZhCTIwMDItMTEtMTIgMjM6Mjg6NTQuMDAwMDAwMDAwIC0w
NzAwCisrKyBic2YtMi4zLjAucGF0Y2hlZC9zcmMvYnNmL3NyYy9vcmcvYXBhY2hlL2JzZi9lbmdp
bmVzL2phdmFzY3JpcHQvQ29tcGlsYXRpb25Vbml0LmphdmEJMjAwNC0wNy0wNyAyMToxMjoxNi4x
MzE4MTg3OTIgLTA2MDAKQEAgLTc0LDcgKzc0LDcgQEAKICAqIG9mIHNjcmlwdCBpcyBzbGljZWQg
aW50byBjb21waWxhdGlvbiB1bml0cy4KICAqIEZvciBpbnN0YW5jZSwgdGhlIHNjcmlwdCB0ZXh0
IG1heSBjb250YWluIGEgZnVuY3Rpb24KICAqIGRlY2xhcmF0aW9uIGFuZCBhbiBleHByZXNzaW9u
IHRvIGV2YWwuIFRoZSBjb21waWxhdGlvbgotICogd2lsbCByZXN1bHQgaW4gdHdvIGNvbXBpbGF0
aW9uIHVuaXRzOiB0aGUgZnVuY3Rpb24gYW5kIAorICogd2lsbCByZXN1bHQgaW4gdHdvIGNvbXBp
bGF0aW9uIHVuaXRzOiB0aGUgZnVuY3Rpb24gYW5kCiAgKiB0aGUgZXhwcmVzc2lvbi4gRWFjaCBj
b21waWxhdGlvbiB1bml0IHdpbGwgY29ycmVzcG9uZAogICogdG8gYSByYW5nZSBvZiB0aGUgbGlu
ZXMgb2YgdGhlIG9yaWdpbmFsIHNjcmlwdCBjb21waWxlZC4KICAqIEFsbCBsaW5lIG51bWJlcnMg
YXJlIGdsb2JhbCB0byB0aGUgZG9jdW1lbnQgdGhlIGNvbXBpbGVkCkBAIC04Miw4OSArODIsOTUg
QEAKICAqIEl0IGlzIG9uIGNvbXBpbGF0aW9uIHVuaXRzIHRoYXQgYnJlYWtwb2ludHMgY2FuIGJl
IHNldAogICogb3IgcmVtb3ZlZCwgbW9yZSBleGFjdGx5IG9uIHRoZSBEZWJ1Z2dhYmxlU2NyaXB0
IGF0dGFjaGVkCiAgKiB0byB0aGVtLiBTZWUgUmhpbm8gZm9yIG1vcmUgZGV0YWlscy4KLSAqIAor
ICoKICAqIEBhdXRob3I6IE9saXZpZXIgR3J1YmVyLgotICovIAorICovCiBwdWJsaWMgY2xhc3Mg
Q29tcGlsYXRpb25Vbml0IHsKIAotCUZuT3JTY3JpcHQgbV9mbk9yU2NyaXB0OwotCWludCBtX2Zp
cnN0TGluZTsKLQlpbnQgbV9saW5lQ291bnQ7Ci0JU3RyaW5nIG1fZm5OYW1lOwotCURlYnVnZ2Fi
bGVTY3JpcHQgbV9kYmdTY3JpcHQ7Ci0JaW50IG1fdmFsaWRCcmtwdExpbmVzW107Ci0KLQkvKioK
LQkgKiBDb21waWxhdGlvblVuaXQgY29uc3RydWN0b3IgY29tbWVudC4KLQkgKi8KLQlwdWJsaWMg
Q29tcGlsYXRpb25Vbml0KEZuT3JTY3JpcHQgZm5PclNjcmlwdCwgRGVidWdnYWJsZVNjcmlwdCBk
YmdTY3JpcHQpIHsKLQotCQlpbnQgbGFzdExpbmUsIGxpbmVubzsKLQotCQltX2ZuT3JTY3JpcHQg
PSBmbk9yU2NyaXB0OwotCQltX2RiZ1NjcmlwdCA9IGRiZ1NjcmlwdDsKLQotCQl0cnkgewotCQkJ
bV92YWxpZEJya3B0TGluZXMgPSBkYmdTY3JpcHQuZ2V0TGluZU51bWJlcnMoKTsKLQkJCW1fZmly
c3RMaW5lID0gOTk5OTk7Ci0JCQlsYXN0TGluZSA9IDA7Ci0JCQlmb3IgKGludCBsID0gMDsgbCA8
IG1fdmFsaWRCcmtwdExpbmVzLmxlbmd0aDsgbCsrKSB7Ci0JCQkJbGluZW5vID0gbV92YWxpZEJy
a3B0TGluZXNbbF07Ci0JCQkJaWYgKG1fZmlyc3RMaW5lID4gbGluZW5vKQotCQkJCQltX2ZpcnN0
TGluZSA9IGxpbmVubzsKLQkJCQlpZiAobGFzdExpbmUgPCBsaW5lbm8pCi0JCQkJCWxhc3RMaW5l
ID0gbGluZW5vOwotCQkJfQotCQkJbV9saW5lQ291bnQgPSBsYXN0TGluZSAtIG1fZmlyc3RMaW5l
ICsgMTsKLQkJfSBjYXRjaCAoVGhyb3dhYmxlIHQpIHsKLQkJCURlYnVnTG9nLnN0ZGVyclByaW50
bG4oIlxuV2FybmluZzogY2FuJ3QgZ2V0IHZhbGlkIGxpbmUgbnVtYmVycyBmb3IgYnJlYWtwb2lu
dHMuIiwgRGVidWdMb2cuQlNGX0xPR19MMik7Ci0JCQltX3ZhbGlkQnJrcHRMaW5lcyA9IG51bGw7
Ci0JCX0KLQotCQlTY3JpcHRhYmxlIHNjcmlwdGFibGUgPSBkYmdTY3JpcHQuZ2V0U2NyaXB0YWJs
ZSgpOwotCQlpZiAoc2NyaXB0YWJsZSBpbnN0YW5jZW9mIE5hdGl2ZUZ1bmN0aW9uKSB7Ci0JCQlO
YXRpdmVGdW5jdGlvbiBmID0gKE5hdGl2ZUZ1bmN0aW9uKSBzY3JpcHRhYmxlOwotCQkJU3RyaW5n
IG5hbWUgPSBmLmdldEZ1bmN0aW9uTmFtZSgpOwotCQkJaWYgKG5hbWUubGVuZ3RoKCkgPiAwICYm
ICFuYW1lLmVxdWFscygiYW5vbnltb3VzIikpIHsKLQkJCQltX2ZuTmFtZSA9IG5hbWU7Ci0JCQl9
Ci0JCX0KLQl9Ci0JLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tCi0JYm9vbGVhbiBjb250YWlucyhpbnQgbGluZW5vKSB7Ci0JCXJldHVy
biAobV9maXJzdExpbmUgPD0gbGluZW5vICYmIGxpbmVubyA8IG1fZmlyc3RMaW5lICsgbV9saW5l
Q291bnQpOwotCX0KLQkvKioKLQkgKiBSZXR1cm5zIHRydWUgaWYgdGhlIGNvbXBpbGF0aW9uIHVu
aXQgY29udGFpbnMKLQkgKiB0aGUgYnJlYWtwb2ludC4gCi0JICogTm90aWNlIG9ubHkgYnJlYWtw
b2ludCBkZWZpbmVkIGF0IGEgbGluZSBudW1iZXIKLQkgKiBhcmUgc3VwcG9ydGVkIGhlcmUuCi0J
ICovCi0JYm9vbGVhbiBjb250YWlucyhCcmVha1BvaW50IGJwKSB7Ci0JCXRyeSB7Ci0JCQlyZXR1
cm4gY29udGFpbnMoYnAuZ2V0TGluZU5vKCkpOwotCQl9IGNhdGNoIChCU0ZFeGNlcHRpb24gZXgp
IHsKLQkJCXJldHVybiBmYWxzZTsKLQkJfQotCX0KLQkvKioKLQkgKiBQcm9wYWdhdGVzIChpLmUu
IHNldCkgdGhpcyBicmVha3BvaW50IHRvIHRoZSB1bmRlcmx5aW5nIFJoaW5vCi0JICogZW5naW5l
IGlmIFJoaW5vIGhhcyBwcm92aWRlZCB1cyB3aXRoIHRoZSB2YWxpZCBsaW5lcwotCSAqIGluZm9y
bWF0aW9uLiBPdGhlcndpc2UsIFJoaW5vIGNyYXNoZXMgd2l0aCBhIE51bGxQb2ludGVyRXhjZXB0
aW9uLgotCSAqLwotCXZvaWQgcHJvcGFnYXRlKGludCBsaW5lbm8pIHsKLQkJaWYgKG1fdmFsaWRC
cmtwdExpbmVzICE9IG51bGwpIHsKLQkJCW1fZGJnU2NyaXB0LnBsYWNlQnJlYWtwb2ludChsaW5l
bm8pOwotCQl9Ci0JfQotCS8qKgotCSAqIFVucHJvcGFnYXRlcyAoaS5lLiB1bnNldCkgdGhpcyBi
cmVha3BvaW50IHRvIHRoZSB1bmRlcmx5aW5nIFJoaW5vCi0JICogZW5naW5lIGlmIFJoaW5vIGhh
cyBwcm92aWRlZCB1cyB3aXRoIHRoZSB2YWxpZCBsaW5lcwotCSAqIGluZm9ybWF0aW9uLiBPdGhl
cndpc2UsIFJoaW5vIGNyYXNoZXMgd2l0aCBhIE51bGxQb2ludGVyRXhjZXB0aW9uLgotCSAqLwot
CXZvaWQgdW5wcm9wYWdhdGUoaW50IGxpbmVubykgewotCQlpZiAobV92YWxpZEJya3B0TGluZXMg
IT0gbnVsbCkgewotCQkJbV9kYmdTY3JpcHQucmVtb3ZlQnJlYWtwb2ludChsaW5lbm8pOwotCQl9
Ci0JfQorICAgIEZuT3JTY3JpcHQgbV9mbk9yU2NyaXB0OworICAgIGludCBtX2ZpcnN0TGluZTsK
KyAgICBpbnQgbV9saW5lQ291bnQ7CisgICAgU3RyaW5nIG1fZm5OYW1lOworICAgIERlYnVnZ2Fi
bGVTY3JpcHQgbV9kYmdTY3JpcHQ7CisgICAgYm9vbGVhbltdIG1fYnJlYWtwb2ludHM7CisKKyAg
ICAvKioKKyAgICAgKiBDb21waWxhdGlvblVuaXQgY29uc3RydWN0b3IgY29tbWVudC4KKyAgICAg
Ki8KKyAgICBwdWJsaWMgQ29tcGlsYXRpb25Vbml0KEZuT3JTY3JpcHQgZm5PclNjcmlwdCwgRGVi
dWdnYWJsZVNjcmlwdCBkYmdTY3JpcHQpIHsKKworICAgICAgICBtX2ZuT3JTY3JpcHQgPSBmbk9y
U2NyaXB0OworICAgICAgICBtX2RiZ1NjcmlwdCA9IGRiZ1NjcmlwdDsKKworICAgICAgICBpbnRb
XSBsaW5lcyA9IGRiZ1NjcmlwdC5nZXRMaW5lTnVtYmVycygpOworICAgICAgICBpZiAobGluZXMu
bGVuZ3RoICE9IDApIHsKKyAgICAgICAgICAgIGludCBsYXN0TGluZTsKKyAgICAgICAgICAgIG1f
Zmlyc3RMaW5lID0gbGluZXNbMF07CisgICAgICAgICAgICBsYXN0TGluZSA9IG1fZmlyc3RMaW5l
OworICAgICAgICAgICAgZm9yIChpbnQgaSA9IDE7IGkgIT0gbGluZXMubGVuZ3RoOyArK2kpIHsK
KyAgICAgICAgICAgICAgICBpbnQgbGluZW5vID0gbGluZXNbaV07CisgICAgICAgICAgICAgICAg
aWYgKG1fZmlyc3RMaW5lID4gbGluZW5vKSB7CisgICAgICAgICAgICAgICAgICAgIG1fZmlyc3RM
aW5lID0gbGluZW5vOworICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAobGFzdExpbmUgPCBsaW5l
bm8pIHsKKyAgICAgICAgICAgICAgICAgICAgbGFzdExpbmUgPSBsaW5lbm87CisgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgbV9saW5lQ291bnQgPSBsYXN0TGlu
ZSAtIG1fZmlyc3RMaW5lICsgMTsKKyAgICAgICAgICAgIG1fYnJlYWtwb2ludHMgPSBuZXcgYm9v
bGVhblttX2xpbmVDb3VudF07CisgICAgICAgIH0KKworICAgICAgICBTdHJpbmcgbmFtZSA9IGRi
Z1NjcmlwdC5nZXRGdW5jdGlvbk5hbWUoKTsKKyAgICAgICAgaWYgKG5hbWUgIT0gbnVsbCAmJiBu
YW1lLmxlbmd0aCgpICE9IDAgJiYgIW5hbWUuZXF1YWxzKCJhbm9ueW1vdXMiKSkgeworICAgICAg
ICAgICAgbV9mbk5hbWUgPSBuYW1lOworICAgICAgICB9CisgICAgfQorICAgIC8vLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgIGJv
b2xlYW4gY29udGFpbnMoaW50IGxpbmVubykgeworICAgICAgICByZXR1cm4gKG1fZmlyc3RMaW5l
IDw9IGxpbmVubyAmJiBsaW5lbm8gPCBtX2ZpcnN0TGluZSArIG1fbGluZUNvdW50KTsKKyAgICB9
CisgICAgLyoqCisgICAgICogUmV0dXJucyB0cnVlIGlmIHRoZSBjb21waWxhdGlvbiB1bml0IGNv
bnRhaW5zCisgICAgICogdGhlIGJyZWFrcG9pbnQuCisgICAgICogTm90aWNlIG9ubHkgYnJlYWtw
b2ludCBkZWZpbmVkIGF0IGEgbGluZSBudW1iZXIKKyAgICAgKiBhcmUgc3VwcG9ydGVkIGhlcmUu
CisgICAgICovCisgICAgYm9vbGVhbiBjb250YWlucyhCcmVha1BvaW50IGJwKSB7CisgICAgICAg
IHRyeSB7CisgICAgICAgICAgICByZXR1cm4gY29udGFpbnMoYnAuZ2V0TGluZU5vKCkpOworICAg
ICAgICB9IGNhdGNoIChCU0ZFeGNlcHRpb24gZXgpIHsKKyAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICAgICAgfQorICAgIH0KKyAgICAvKioKKyAgICAgKiBTZXQgYSBicmVha3BvaW50IGF0
IHRoZSBnaXZlbiBsaW5lIGlmIFJoaW5vIGhhcyBwcm92aWRlZCB1cyB3aXRoIHRoZQorICAgICAq
IHZhbGlkIGxpbmVzIGluZm9ybWF0aW9uLgorICAgICAqLworICAgIHZvaWQgcHJvcGFnYXRlKGlu
dCBsaW5lbm8pIHsKKyAgICAgICAgaWYgKG1fYnJlYWtwb2ludHMgIT0gbnVsbCkgeworICAgICAg
ICAgICAgaW50IGkgPSBsaW5lbm8gLSBtX2ZpcnN0TGluZTsKKyAgICAgICAgICAgIGlmICgwIDw9
IGkgJiYgaSA8IG1fbGluZUNvdW50KSB7CisgICAgICAgICAgICAgICAgbV9icmVha3BvaW50c1tp
XSA9IHRydWU7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgLyoqCisgICAg
ICogQ2xlYXIgYSBicmVha3BvaW50IGF0IHRoZSBnaXZlbiBsaW5lIGlmIFJoaW5vIGhhcyBwcm92
aWRlZCB1cyB3aXRoIHRoZQorICAgICAqIHZhbGlkIGxpbmVzIGluZm9ybWF0aW9uLgorICAgICAq
LworICAgIHZvaWQgdW5wcm9wYWdhdGUoaW50IGxpbmVubykgeworICAgICAgICBpZiAobV9icmVh
a3BvaW50cyAhPSBudWxsKSB7CisgICAgICAgICAgICBpbnQgaSA9IGxpbmVubyAtIG1fZmlyc3RM
aW5lOworICAgICAgICAgICAgaWYgKDAgPD0gaSAmJiBpIDwgbV9saW5lQ291bnQpIHsKKyAgICAg
ICAgICAgICAgICBtX2JyZWFrcG9pbnRzW2ldID0gZmFsc2U7CisgICAgICAgICAgICB9CisgICAg
ICAgIH0KKyAgICB9CisKKyAgICBib29sZWFuIGhhc0JyZWFrcG9pbnQoaW50IGxpbmVubykgewor
ICAgICAgICBpZiAobV9icmVha3BvaW50cyAhPSBudWxsKSB7CisgICAgICAgICAgICBpbnQgaSA9
IGxpbmVubyAtIG1fZmlyc3RMaW5lOworICAgICAgICAgICAgcmV0dXJuIDAgPD0gaSAmJiBpIDwg
bV9saW5lQ291bnQgJiYgbV9icmVha3BvaW50c1tpXTsKKyAgICAgICAgfQorICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgfQogfQpkaWZmIC11ck4gYnNmLTIuMy4wL3NyYy9ic2Yvc3JjL29yZy9h
cGFjaGUvYnNmL2VuZ2luZXMvamF2YXNjcmlwdC9Gbk9yU2NyaXB0LmphdmEgYnNmLTIuMy4wLnBh
dGNoZWQvc3JjL2JzZi9zcmMvb3JnL2FwYWNoZS9ic2YvZW5naW5lcy9qYXZhc2NyaXB0L0ZuT3JT
Y3JpcHQuamF2YQotLS0gYnNmLTIuMy4wL3NyYy9ic2Yvc3JjL29yZy9hcGFjaGUvYnNmL2VuZ2lu
ZXMvamF2YXNjcmlwdC9Gbk9yU2NyaXB0LmphdmEJMjAwMi0xMS0xMiAyMzoyODo1NC4wMDAwMDAw
MDAgLTA3MDAKKysrIGJzZi0yLjMuMC5wYXRjaGVkL3NyYy9ic2Yvc3JjL29yZy9hcGFjaGUvYnNm
L2VuZ2luZXMvamF2YXNjcmlwdC9Gbk9yU2NyaXB0LmphdmEJMjAwNC0wNy0wNyAyMToxMjoxNi4x
MzI4MTg2NDAgLTA2MDAKQEAgLTcxLDI1ICs3MSwyNSBAQAogICogVGhpcyBjbGFzcyByZXByZXNl
bnRzIGEgZnVuY3Rpb24gb3Igc2NyaXB0LCB0aGF0IGlzLAogICogYSBwaWVjZSBvZiBhIGRvY3Vt
ZW50IHRoYXQgaXMgcHJvdmlkZWQgdG8gdGhlIEphdmFTY3JpcHQKICAqIGVuZ2luZSBmb3IgZXZh
bHVhdGlvbiwgZXhlY3V0aW9uLCBvciBzaW1wbHkgY29tcGlsYXRpb24uCi0gKiAKKyAqCiAgKiBB
IEZuT3JTY3JpcHQgcmVwcmVzZW50cyBhIHJhbmdlIG9mIGxpbmVzIG9yIGNoYXJhY3RlcnMKLSAq
IGluIGl0cyBkb2N1bWVudC4gRm9yIG5vdywgUmhpbm8gb25seSBzdXBwb3J0cyByYW5nZXMgCisg
KiBpbiBpdHMgZG9jdW1lbnQuIEZvciBub3csIFJoaW5vIG9ubHkgc3VwcG9ydHMgcmFuZ2VzCiAg
KiBvZiBsaW5lcywgcmVhbGx5LCBidXQgdGhlIGNvZGUgZm9yIG9mZnNldHMgaXMgdGhlcmUgYW55
d2F5LgogICoKICAqIFdhcm5pbmc6IE9mZnNldHMgaGF2ZSBuZXZlciBiZWVuIHF1aXRlIHRlc3Rl
ZCB5ZXQuLi4KLSAqIAorICoKICAqIEEgRm5PclNjcmlwdCBoYXMgY29tcGlsYXRpb24gdW5pdHMu
IFdoZW4gUmhpbm8gY29tcGlsZXMKICAqIGEgZnVuY3Rpb24gb3IgYSBzY3JpcHQsIGV2ZW4gaW4g
aW50ZXJwcmV0ZWQgbW9kZSB3aGVyZSB0aGUKICAqIGNvbXBpbGF0aW9uIGlzIGRvbmUgdG8gSmF2
YVNjcmlwdCBieXRlY29kZSwgaXQgY2FsbHMgYmFjawotICogaXRzIGRlYnVnZ2VyIHdpdGggZGlm
ZmVyZW50IGNvbXBpbGF0aW9uIHVuaXRzOyBzZWUgCisgKiBpdHMgZGVidWdnZXIgd2l0aCBkaWZm
ZXJlbnQgY29tcGlsYXRpb24gdW5pdHM7IHNlZQogICogRGVidWdnZXI6OmhhbmRsZUNvbXBpbGF0
aW9uRG9uZSBtZXRob2Qgb24gdGhlIFJoaW5vRW5naW5lRGVidWdnZXIKICAqIGNsYXNzLgogICoK
ICAqIEEgRm5PclNjcmlwdCBhbHNvIGtlZXBzIHRyYWNrIG9mIHRoZSBrbm93biBicmVha3BvaW50
cwogICogaW4gaXRzIHJhbmdlIG9mIGxpbmVzIG9yIGNoYXJhY3RlcnMuIEl0IG1ha2VzIHN1cmUK
LSAqIHRoYXQgdGhleSBhcmUgcHJvcGFnYXRlZCB0byB0aGUgdW5kZXJseWluZyBSaGlubyAKKyAq
IHRoYXQgdGhleSBhcmUgcHJvcGFnYXRlZCB0byB0aGUgdW5kZXJseWluZyBSaGlubwogICogZW5n
aW5lIChpLmUuIHNldCkgYXMgd2VsbCBhcyB1bnByb3BhZ2F0ZWQgKGkuZS4gdW5zZXQpLgotICog
IAorICoKICAqIEBhdXRob3I6IE9saXZpZXIgR3J1YmVyCiAgKi8KIHB1YmxpYyBjbGFzcyBGbk9y
U2NyaXB0IHsKQEAgLTEwMyw5ICsxMDMsMTEgQEAKIAogICAgIHByb3RlY3RlZCBTdHJpbmdCdWZm
ZXIgbV90ZXh0OwogCi0gICAgcHJvdGVjdGVkIFZlY3RvciBtX3VuaXRzOyAvLyBvZiBDb21waWxh
dGlvblVuaXQuCiAgICAgcHJvdGVjdGVkIFNjcmlwdCBtX3NjcmlwdDsKIAorICAgIHByaXZhdGUg
VmVjdG9yIG1fdW5pdHM7IC8vIG9mIENvbXBpbGF0aW9uVW5pdC4KKyAgICBwcml2YXRlIEhhc2h0
YWJsZSBtX2Z1bmN0aW9uVG9Vbml0OworCiAgICAgcHJvdGVjdGVkIEhhc2h0YWJsZSBtX2Z1bmN0
aW9uTWFwOwogCiAgICAgcHVibGljIEZuT3JTY3JpcHQoRG9jdW1lbnRDZWxsIGNlbGwpIHsKQEAg
LTExNiw4ICsxMTgsOSBAQAogICAgICAgICBtX2xpbmVDb3VudCA9IDA7CiAgICAgICAgIG1fYnJl
YWtwb2ludHMgPSBuZXcgVmVjdG9yKCk7CiAgICAgICAgIG1fdGV4dCA9IG5ldyBTdHJpbmdCdWZm
ZXIoKTsKLQkKKwogICAgICAgICBtX3VuaXRzID0gbmV3IFZlY3RvcigpOworICAgICAgICBtX2Z1
bmN0aW9uVG9Vbml0ID0gbmV3IEhhc2h0YWJsZSgpOwogICAgICAgICBtX2Z1bmN0aW9uTWFwID0g
bmV3IEhhc2h0YWJsZSgpOwogICAgIH0KIApAQCAtMTMxLDcgKzEzNCw3IEBACiAKICAgICAgICAg
bV9icmVha3BvaW50cy5hZGRFbGVtZW50KGJwKTsKIAotICAgICAgICAvLyBub3csIGxvb2sgZm9y
IGEgdW5pdCBjb250YWluaW5nIGl0IGFuZCAKKyAgICAgICAgLy8gbm93LCBsb29rIGZvciBhIHVu
aXQgY29udGFpbmluZyBpdCBhbmQKICAgICAgICAgLy8gaWYgb25lIGlzIGZvdW5kLCBzZXQgdGhl
IGJyZWFrcG9pbnQgdW5pdAogICAgICAgICAvLyBhbmQgcHJvcGFnYXRlLi4uCiAgICAgICAgIEVu
dW1lcmF0aW9uIGU7CkBAIC0xNDcsNyArMTUwLDcgQEAKICAgICAgICAgfQogICAgICAgICByZXR1
cm4gYnA7CiAgICAgfQotCQorCiAgICAgcHJpdmF0ZSBCcmVha1BvaW50IF9yZW1vdmVCcmVha3Bv
aW50KGludCBicmtwdElkKSB7CiAgICAgICAgIEVudW1lcmF0aW9uIGU7CiAgICAgICAgIEJyZWFr
UG9pbnQgYnA7CkBAIC0xNzMsMTMgKzE3NiwxMyBAQAogICAgICAgICAgICAgYnAgPSAoQnJlYWtQ
b2ludCkgZS5uZXh0RWxlbWVudCgpOwogICAgICAgICAgICAgaWYgKGJwaWQgPT0gYnAuZ2V0SWQo
KSkgewogICAgICAgICAgICAgICAgIG1fYnJlYWtwb2ludHMucmVtb3ZlRWxlbWVudChicCk7Ci0g
ICAgICAgICAgICAgICAgYnAudW5wcm9wYWdhdGUoKTsJCisgICAgICAgICAgICAgICAgYnAudW5w
cm9wYWdhdGUoKTsKICAgICAgICAgICAgICAgICByZXR1cm4gYnA7CiAgICAgICAgICAgICB9CiAg
ICAgICAgIH0KICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgfQotCQorCiAgICAgYm9vbGVhbiBj
b250YWlucyhCcmVha1BvaW50IGJwKSB0aHJvd3MgQlNGRXhjZXB0aW9uIHsKICAgICAgICAgaWYg
KG1fbGluZURlZmluZWQpIHsKICAgICAgICAgICAgIGludCBsaW5lID0gYnAuZ2V0TGluZU5vKCk7
CkBAIC0xOTQsNyArMTk3LDcgQEAKICAgICAvLyBUaGlzIHByb3RlY3RlZCBtZXRob2Qgd29ya3Mg
YXMgYSBmYWN0b3J5CiAgICAgLy8gZm9yIGxhbmd1YWdlLXNwZWNpZmljIGJyZWFrcG9pbnRzLgog
ICAgIC8vIFRoZSBkZWZhdWx0IGJlaGF2aW9yIGlzIHRvIHVzZSB0aGUgcHJvdmlkZWQKLSAgICAv
LyBnZW5lcmljIGJyZWFrcG9pbnQuIAorICAgIC8vIGdlbmVyaWMgYnJlYWtwb2ludC4KICAgICAv
LyBTZWUgamF2YXNjcmlwdCBmb3IgYW4gZXhhbXBsZSBvZiBsYW5ndWFnZS1zcGVjaWZpYwogICAg
IC8vIGJyZWFrcG9pbnRzLgogCkBAIC0zNjAsMTcgKzM2MywxOCBAQAogCiAgICAgcHVibGljIHZv
aWQgYWRkQ29tcGlsYXRpb25Vbml0KENvbnRleHQgY3gsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIERlYnVnZ2FibGVTY3JpcHQgZGJnU2NyaXB0LAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBTdHJpbmdCdWZmZXIgc291cmNlKSB7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFN0cmluZyBzb3VyY2UpIHsKIAogICAgICAgICBDb21waWxh
dGlvblVuaXQgdW5pdDsKIAogICAgICAgICB1bml0ID0gbmV3IENvbXBpbGF0aW9uVW5pdCh0aGlz
LCBkYmdTY3JpcHQpOwogICAgICAgICBtX3VuaXRzLmFkZEVsZW1lbnQodW5pdCk7CisgICAgICAg
IG1fZnVuY3Rpb25Ub1VuaXQucHV0KGRiZ1NjcmlwdCwgdW5pdCk7CiAgICAgICAgIGlmICh1bml0
Lm1fZm5OYW1lICE9IG51bGwpIHsKICAgICAgICAgICAgIG1fZnVuY3Rpb25NYXAucHV0KHVuaXQu
bV9mbk5hbWUsIHVuaXQpOwogICAgICAgICB9CiAKLSAgICAgICAgLy8gQXNzb2NpYXRlIGJyZWFr
cG9pbnRzIHRvIHRoaXMgdW5pdCBpZiAKKyAgICAgICAgLy8gQXNzb2NpYXRlIGJyZWFrcG9pbnRz
IHRvIHRoaXMgdW5pdCBpZgogICAgICAgICAvLyB0aGUgdW5pdCBjb250YWlucyB0aGVtLi4uCiAg
ICAgICAgIEVudW1lcmF0aW9uIGU7CiAgICAgICAgIEJyZWFrUG9pbnQgYnA7CkBAIC0zODMsMTMg
KzM4NywxNyBAQAogICAgICAgICBwcm9wYWdhdGVBbGwoKTsKICAgICB9CiAKKyAgICBDb21waWxh
dGlvblVuaXQgZ2V0Q29tcGlsYXRpb25Vbml0KERlYnVnZ2FibGVTY3JpcHQgZGJnU2NyaXB0KSB7
CisgICAgICAgIHJldHVybiAoQ29tcGlsYXRpb25Vbml0KW1fZnVuY3Rpb25Ub1VuaXQuZ2V0KGRi
Z1NjcmlwdCk7CisgICAgfQorCiAgICAgcHVibGljIHZvaWQgY29tcGlsZShDb250ZXh0IGN4LCBT
Y3JpcHRhYmxlIGdsb2JhbCkKICAgICAgICAgdGhyb3dzIEJTRkV4Y2VwdGlvbiwgSU9FeGNlcHRp
b24gewogCiAgICAgICAgIEVudW1lcmF0aW9uIGU7CiAgICAgICAgIFJlYWRlciByZWFkZXIgPSBu
ZXcgU3RyaW5nUmVhZGVyKG1fdGV4dC50b1N0cmluZygpKTsKICAgICAgICAgbV9zY3JpcHQgPQot
ICAgICAgICAgICAgY3guY29tcGlsZVJlYWRlcihnbG9iYWwsIHJlYWRlciwgbV9jZWxsLmdldE5h
bWUoKSwgCisgICAgICAgICAgICBjeC5jb21waWxlUmVhZGVyKGdsb2JhbCwgcmVhZGVyLCBtX2Nl
bGwuZ2V0TmFtZSgpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX3N0YXJ0TGluZSwg
bnVsbCk7CiAgICAgICAgIGlmIChtX3NjcmlwdCA9PSBudWxsKQogICAgICAgICAgICAgdGhyb3cg
bmV3IEJTRkV4Y2VwdGlvbigiQ29tcGlsYXRpb24gb2YgdGhlIHNjcmlwdCAiCmRpZmYgLXVyTiBi
c2YtMi4zLjAvc3JjL2JzZi9zcmMvb3JnL2FwYWNoZS9ic2YvZW5naW5lcy9qYXZhc2NyaXB0L0ph
dmFTY3JpcHRFbmdpbmUuamF2YSBic2YtMi4zLjAucGF0Y2hlZC9zcmMvYnNmL3NyYy9vcmcvYXBh
Y2hlL2JzZi9lbmdpbmVzL2phdmFzY3JpcHQvSmF2YVNjcmlwdEVuZ2luZS5qYXZhCi0tLSBic2Yt
Mi4zLjAvc3JjL2JzZi9zcmMvb3JnL2FwYWNoZS9ic2YvZW5naW5lcy9qYXZhc2NyaXB0L0phdmFT
Y3JpcHRFbmdpbmUuamF2YQkyMDAyLTExLTEyIDIzOjI4OjU0LjAwMDAwMDAwMCAtMDcwMAorKysg
YnNmLTIuMy4wLnBhdGNoZWQvc3JjL2JzZi9zcmMvb3JnL2FwYWNoZS9ic2YvZW5naW5lcy9qYXZh
c2NyaXB0L0phdmFTY3JpcHRFbmdpbmUuamF2YQkyMDA0LTA3LTA3IDIxOjEyOjE2LjEzMzgxODQ4
OCAtMDYwMApAQCAtMTA0LDcgKzEwNCw3IEBACiAgICAgcHVibGljIHZvaWQgZGlzY29ubmVjdGVk
RGVidWdnZXJOb3RpZnkoKSB7CiAgICAgICAgIG1fcmhpbm9EYmcuZGlzY29ubmVjdGVkRGVidWdn
ZXJOb3RpZnkoKTsKICAgICB9Ci0JCisKICAgICBCU0ZEZWJ1Z01hbmFnZXJJbXBsIGdldERlYnVn
TWFuYWdlcigpIHsKICAgICAgICAgcmV0dXJuIGRiZ21ncjsKICAgICB9CkBAIC0xMTQsNyArMTE0
LDcgQEAKICAgICAgICAgbV9yaGlub0RiZy5wbGFjZUJyZWFrcG9pbnRBdExpbmUoYnJrcHRpZCwg
ZG9jbmFtZSwgbGluZW5vKTsKICAgICB9CiAKLSAgICBwdWJsaWMgdm9pZCBwbGFjZUJyZWFrcG9p
bnRBdE9mZnNldChpbnQgYnJrcHRpZCwgU3RyaW5nIGRvY25hbWUsIAorICAgIHB1YmxpYyB2b2lk
IHBsYWNlQnJlYWtwb2ludEF0T2Zmc2V0KGludCBicmtwdGlkLCBTdHJpbmcgZG9jbmFtZSwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgb2Zmc2V0KSB0aHJvd3Mg
QlNGRXhjZXB0aW9uIHsKICAgICAgICAgbV9yaGlub0RiZy5wbGFjZUJyZWFrcG9pbnRBdE9mZnNl
dChicmtwdGlkLCBkb2NuYW1lLCBvZmZzZXQpOwogICAgIH0KQEAgLTE0MCw3ICsxNDAsNiBAQAog
ICAgIHB1YmxpYyBPYmplY3QgY2FsbChPYmplY3Qgb2JqZWN0LCBTdHJpbmcgbWV0aG9kLCBPYmpl
Y3RbXSBhcmdzKQogICAgICAgICB0aHJvd3MgQlNGRXhjZXB0aW9uIHsKICAgICAgICAgT2JqZWN0
IHRoZVJldHVyblZhbHVlID0gbnVsbDsKLSAgICAgICAgRGVidWdnYWJsZUVuZ2luZSBlbmdpbmU7
CiAgICAgICAgIENvbnRleHQgY3g7CiAgICAgICAgIHRyeSB7CiAKQEAgLTE2MCwxMyArMTU5LDEy
IEBACiAKICAgICAgICAgICAgICAgICBjeC5zZXRPcHRpbWl6YXRpb25MZXZlbCgtMSk7CiAKLSAg
ICAgICAgICAgICAgICBlbmdpbmUgPSBjeC5nZXREZWJ1Z2dhYmxlRW5naW5lKCk7Ci0gICAgICAg
ICAgICAgICAgZW5naW5lLnNldERlYnVnZ2VyKG1fcmhpbm9EYmcpOworICAgICAgICAgICAgICAg
IGN4LnNldERlYnVnZ2VyKG1fcmhpbm9EYmcsIG5ldyBSaGlub0NvbnRleHRQcm94eShtX3JoaW5v
RGJnKSk7CiAKLSAgICAgICAgICAgICAgICB0aGVSZXR1cm5WYWx1ZSA9IFNjcmlwdFJ1bnRpbWUu
Y2FsbChjeCwgZnVuLCBnbG9iYWwsIGFyZ3MsIAorICAgICAgICAgICAgICAgIHRoZVJldHVyblZh
bHVlID0gU2NyaXB0UnVudGltZS5jYWxsKGN4LCBmdW4sIGdsb2JhbCwgYXJncywKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBudWxsKTsKIAotICAg
ICAgICAgICAgfSAKKyAgICAgICAgICAgIH0KICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAg
ICAgICAgIGN4LnNldE9wdGltaXphdGlvbkxldmVsKC0xKTsKIApAQCAtMTc1LDEwICsxNzMsOSBA
QAogCiAgICAgICAgICAgICAgICAgY3guc2V0T3B0aW1pemF0aW9uTGV2ZWwoMCk7CiAKLSAgICAg
ICAgICAgICAgICBlbmdpbmUgPSBjeC5nZXREZWJ1Z2dhYmxlRW5naW5lKCk7Ci0gICAgICAgICAg
ICAgICAgZW5naW5lLnNldERlYnVnZ2VyKG51bGwpOworICAgICAgICAgICAgICAgIGN4LnNldERl
YnVnZ2VyKG51bGwsIG51bGwpOwogCi0gICAgICAgICAgICAgICAgdGhlUmV0dXJuVmFsdWUgPSBT
Y3JpcHRSdW50aW1lLmNhbGwoY3gsIGZ1biwgZ2xvYmFsLCBhcmdzLCAKKyAgICAgICAgICAgICAg
ICB0aGVSZXR1cm5WYWx1ZSA9IFNjcmlwdFJ1bnRpbWUuY2FsbChjeCwgZnVuLCBnbG9iYWwsIGFy
Z3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
bnVsbCk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBpZiAodGhlUmV0dXJuVmFsdWUgaW5z
dGFuY2VvZiBXcmFwcGVyKSB7CkBAIC0xOTMsOSArMTkwLDE1IEBACiAgICAgfQogCiAgICAgcHVi
bGljIHZvaWQgZGVjbGFyZUJlYW4oQlNGRGVjbGFyZWRCZWFuIGJlYW4pIHRocm93cyBCU0ZFeGNl
cHRpb24gewotICAgICAgICAvLyBNdXN0IHdyYXAgbm9uLXNjcmlwdGFibGUgb2JqZWN0cyBiZWZv
cmUgcHJlc2VudGluZyB0byBSaGlubwotICAgICAgICBTY3JpcHRhYmxlIHdyYXBwZWQgPSBDb250
ZXh0LnRvT2JqZWN0KGJlYW4uYmVhbiwgZ2xvYmFsKTsKLSAgICAgICAgZ2xvYmFsLnB1dChiZWFu
Lm5hbWUsIGdsb2JhbCwgd3JhcHBlZCk7CisgICAgICAgIGlmICgoYmVhbi5iZWFuIGluc3RhbmNl
b2YgTnVtYmVyKSB8fAorICAgICAgICAgICAgKGJlYW4uYmVhbiBpbnN0YW5jZW9mIFN0cmluZykg
fHwKKyAgICAgICAgICAgIChiZWFuLmJlYW4gaW5zdGFuY2VvZiBCb29sZWFuKSkgeworICAgICAg
ICAgICAgZ2xvYmFsLnB1dChiZWFuLm5hbWUsIGdsb2JhbCwgYmVhbi5iZWFuKTsKKyAgICAgICAg
fSBlbHNlIHsKKyAgICAgICAgICAgIC8vIE11c3Qgd3JhcCBub24tc2NyaXB0YWJsZSBvYmplY3Rz
IGJlZm9yZSBwcmVzZW50aW5nIHRvIFJoaW5vCisgICAgICAgICAgICBTY3JpcHRhYmxlIHdyYXBw
ZWQgPSBDb250ZXh0LnRvT2JqZWN0KGJlYW4uYmVhbiwgZ2xvYmFsKTsKKyAgICAgICAgICAgIGds
b2JhbC5wdXQoYmVhbi5uYW1lLCBnbG9iYWwsIHdyYXBwZWQpOworICAgICAgICB9CiAgICAgfQog
CiAgICAgLyoqCkBAIC0yMTAsNyArMjEzLDYgQEAKICAgICAgICAgRG9jdW1lbnRDZWxsIGNlbGw7
CiAgICAgICAgIEZuT3JTY3JpcHQgZm5PclNjcmlwdDsKICAgICAgICAgU2NyaXB0IHNjcmlwdDsK
LSAgICAgICAgRGVidWdnYWJsZUVuZ2luZSBlbmdpbmU7CiAgICAgICAgIENvbnRleHQgY3g7CiAK
ICAgICAgICAgdHJ5IHsKQEAgLTIzMSwxMyArMjMzLDcgQEAKIAogICAgICAgICAgICAgICAgIGN4
LnNldE9wdGltaXphdGlvbkxldmVsKC0xKTsKIAotICAgICAgICAgICAgICAgIGVuZ2luZSA9IGN4
LmdldERlYnVnZ2FibGVFbmdpbmUoKTsKLSAgICAgICAgICAgICAgICBlbmdpbmUuc2V0RGVidWdn
ZXIobV9yaGlub0RiZyk7Ci0KLSAgICAgICAgICAgICAgICAvLyBNdWNrIHcvIHRoaXMgaWZmIHNv
bWVvbmUgZWxzZSBoYXNuJ3QgYWxyZWFkeSBnb3QgaXQgdHJ1ZQotICAgICAgICAgICAgICAgIGlm
ICghZW5naW5lLmdldEJyZWFrTmV4dExpbmUoKSkgewotICAgICAgICAgICAgICAgICAgICBlbmdp
bmUuc2V0QnJlYWtOZXh0TGluZShjZWxsLmdldEVudHJ5RXhpdCgpKTsKLSAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgY3guc2V0RGVidWdnZXIobV9yaGlub0RiZywgbmV3IFJoaW5v
Q29udGV4dFByb3h5KG1fcmhpbm9EYmcpKTsKIAogICAgICAgICAgICAgICAgIGZuT3JTY3JpcHQu
Y29tcGlsZShjeCwgZ2xvYmFsKTsKICAgICAgICAgICAgICAgICBtX3JoaW5vRGJnLnNldENvbXBp
bGluZ0ZuT3JTY3JpcHQobnVsbCk7CkBAIC0yNDUsNyArMjQxLDcgQEAKIAogICAgICAgICAgICAg
ICAgIGlmIChzY3JpcHQgIT0gbnVsbCkgcmV0dmFsID0gc2NyaXB0LmV4ZWMoY3gsIGdsb2JhbCk7
CiAgICAgICAgICAgICAgICAgZWxzZSByZXR2YWwgPSBudWxsOwotICAgICAgICAgICAgfSAKKyAg
ICAgICAgICAgIH0KICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgIGN4LnNldE9w
dGltaXphdGlvbkxldmVsKC0xKTsKIApAQCAtMjU0LDExICsyNTAsMTAgQEAKIAogICAgICAgICAg
ICAgICAgIGN4LnNldE9wdGltaXphdGlvbkxldmVsKDApOwogCi0gICAgICAgICAgICAgICAgZW5n
aW5lID0gY3guZ2V0RGVidWdnYWJsZUVuZ2luZSgpOwotICAgICAgICAgICAgICAgIGVuZ2luZS5z
ZXREZWJ1Z2dlcihudWxsKTsKKyAgICAgICAgICAgICAgICBjeC5zZXREZWJ1Z2dlcihudWxsLCBu
dWxsKTsKIAogICAgICAgICAgICAgICAgIHJldHZhbCA9IGN4LmV2YWx1YXRlU3RyaW5nKGdsb2Jh
bCwgc2NyaXB0VGV4dCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBzb3VyY2UsIGxpbmVObywgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgc291cmNlLCBsaW5lTm8sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgbnVsbCk7CiAgICAgICAgICAgICB9CiAKQEAgLTI5NiwxNCArMjkxLDE0IEBACiAg
ICAgICAgICAgICAgICAgLy8gRGlzcGxheSBpdHMgc3RhY2sgdHJhY2UgYXMgYSBkaWFnbm9zdGlj
CiAgICAgICAgICAgICAgICAgdGFyZ2V0ID0gKFRocm93YWJsZSkgdmFsdWU7CiAgICAgICAgICAg
ICB9Ci0gICAgICAgIH0gCi0gICAgICAgIGVsc2UgaWYgKHQgaW5zdGFuY2VvZiBFdmFsdWF0b3JF
eGNlcHRpb24gfHwgCisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAodCBpbnN0YW5jZW9mIEV2
YWx1YXRvckV4Y2VwdGlvbiB8fAogICAgICAgICAgICAgICAgICB0IGluc3RhbmNlb2YgU2VjdXJp
dHlFeGNlcHRpb24pIHsKICAgICAgICAgICAgIG1lc3NhZ2UgPSB0LmdldExvY2FsaXplZE1lc3Nh
Z2UoKTsKLSAgICAgICAgfSAKKyAgICAgICAgfQogICAgICAgICBlbHNlIGlmICh0IGluc3RhbmNl
b2YgUnVudGltZUV4Y2VwdGlvbikgewogICAgICAgICAgICAgbWVzc2FnZSA9ICJJbnRlcm5hbCBF
cnJvcjogIiArIHQudG9TdHJpbmcoKTsKLSAgICAgICAgfSAKKyAgICAgICAgfQogICAgICAgICBl
bHNlIGlmICh0IGluc3RhbmNlb2YgU3RhY2tPdmVyZmxvd0Vycm9yKSB7CiAgICAgICAgICAgICBt
ZXNzYWdlID0gIlN0YWNrIE92ZXJmbG93IjsKICAgICAgICAgfQpAQCAtMzEzLDcgKzMwOCw3IEBA
CiAgICAgICAgIH0KIAogICAgICAgICAvL1JFTUlORDogY2FuIHdlIHJlY292ZXIgdGhlIGxpbmUg
bnVtYmVyIGhlcmU/ICBJIHRoaW5rCi0gICAgICAgIC8vIFJoaW5vIGRvZXMgdGhpcyBieSBsb29r
aW5nIHVwIHRoZSBzdGFjayBmb3IgYnl0ZWNvZGUgCisgICAgICAgIC8vIFJoaW5vIGRvZXMgdGhp
cyBieSBsb29raW5nIHVwIHRoZSBzdGFjayBmb3IgYnl0ZWNvZGUKICAgICAgICAgLy8gc2VlIENv
bnRleHQuZ2V0U291cmNlUG9zaXRpb25Gcm9tU3RhY2soKQogICAgICAgICAvLyBidXQgSSBkb24n
dCB0aGluayB0aGlzIHdvdWxkIHdvcmsgaW4gaW50ZXJwcmV0ZWQgbW9kZQogCkBAIC0zMjMsNyAr
MzE4LDcgQEAKICAgICAgICAgICAgIC8vIGNvcnJlY3RlZCB0aGUgc2l0dWF0aW9uIGJ5IGFib3J0
aW5nIHRoZSBsb29wIGFuZAogICAgICAgICAgICAgLy8gYSBsb25nIHN0YWNrdHJhY2Ugd291bGQg
ZW5kIHVwIG9uIHRoZSB1c2VyJ3MgY29uc29sZQogICAgICAgICAgICAgdGhyb3cgKEVycm9yKSB0
OwotICAgICAgICB9IAorICAgICAgICB9CiAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgdGhy
b3cgbmV3IEJTRkV4Y2VwdGlvbihCU0ZFeGNlcHRpb24uUkVBU09OX09USEVSX0VSUk9SLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiSmF2YVNjcmlwdCBFcnJvcjogIiArIG1l
c3NhZ2UsCkBAIC0zMzMsNyArMzI4LDcgQEAKIAogICAgIC8qKgogICAgICAqIGluaXRpYWxpemUg
dGhlIGVuZ2luZS4gcHV0IHRoZSBtYW5hZ2VyIGludG8gdGhlIGNvbnRleHQgLT4gbWFuYWdlcgot
ICAgICAqIG1hcCBoYXNodGFibGUgdG9vLiAKKyAgICAgKiBtYXAgaGFzaHRhYmxlIHRvby4KICAg
ICAgKi8KICAgICBwdWJsaWMgdm9pZCBpbml0aWFsaXplKEJTRk1hbmFnZXIgbWdyLCBTdHJpbmcg
bGFuZywgVmVjdG9yIGRlY2xhcmVkQmVhbnMpCiAgICAgICAgIHRocm93cyBCU0ZFeGNlcHRpb24g
ewpkaWZmIC11ck4gYnNmLTIuMy4wL3NyYy9ic2Yvc3JjL29yZy9hcGFjaGUvYnNmL2VuZ2luZXMv
amF2YXNjcmlwdC9Kc0NvbnRleHRTdHViLmphdmEgYnNmLTIuMy4wLnBhdGNoZWQvc3JjL2JzZi9z
cmMvb3JnL2FwYWNoZS9ic2YvZW5naW5lcy9qYXZhc2NyaXB0L0pzQ29udGV4dFN0dWIuamF2YQot
LS0gYnNmLTIuMy4wL3NyYy9ic2Yvc3JjL29yZy9hcGFjaGUvYnNmL2VuZ2luZXMvamF2YXNjcmlw
dC9Kc0NvbnRleHRTdHViLmphdmEJMjAwMi0xMS0xMiAyMzoyODo1NC4wMDAwMDAwMDAgLTA3MDAK
KysrIGJzZi0yLjMuMC5wYXRjaGVkL3NyYy9ic2Yvc3JjL29yZy9hcGFjaGUvYnNmL2VuZ2luZXMv
amF2YXNjcmlwdC9Kc0NvbnRleHRTdHViLmphdmEJMjAwNC0wNy0wNyAyMToxMjoxNi4xMzU4MTgx
ODQgLTA2MDAKQEAgLTY4LDIzNSArNjgsMjY3IEBACiAqIEBhdXRob3I6IEFkbWluaXN0cmF0b3IK
ICovCiAKLXB1YmxpYyBjbGFzcyBKc0NvbnRleHRTdHViIAorcHVibGljIGNsYXNzIEpzQ29udGV4
dFN0dWIKIGV4dGVuZHMgb3JnLmFwYWNoZS5ic2YuZGVidWcudXRpbC5Ta2VsZXRvbgogICAgaW1w
bGVtZW50cyBKc0NvbnRleHQgewogCi0JUmhpbm9Db250ZXh0UHJveHkgbV9yY3A7Ci0JUmhpbm9F
bmdpbmVEZWJ1Z2dlciBtX3JoaW5vRGJnOwotCURlYnVnRnJhbWUgbV9mcmFtZTsKLQlpbnQgbV9m
cmFtZW5vOwotCWJvb2xlYW4gbV9hdEJyZWFrcG9pbnQ7Ci0JYm9vbGVhbiBtX2ludmFsaWQ7Ci0K
LQkvKioKLQkgKiBKc0NvbnRleHRTdHViIGNvbnN0cnVjdG9yIGNvbW1lbnQuCi0JICovCi0JcHVi
bGljIEpzQ29udGV4dFN0dWIoUmhpbm9Db250ZXh0UHJveHkgcmNwLCBEZWJ1Z0ZyYW1lIGZyYW1l
LCBpbnQgZnJhbWVubykKLQl0aHJvd3MgUmVtb3RlRXhjZXB0aW9uIHsKLQkJCXN1cGVyKG9yZy5h
cGFjaGUuYnNmLmRlYnVnLnV0aWwuRGVidWdDb25zdGFudHMuSlNfQ09OVEVYVF9USUQpOwotCQkK
LQkJbV9yaGlub0RiZyA9IHJjcC5nZXRSaGlub0VuZ2luZURlYnVnZ2VyKCk7Ci0JCW1fcmNwID0g
cmNwOwotCQltX2ZyYW1lID0gZnJhbWU7Ci0JCW1fZnJhbWVubyA9IGZyYW1lbm87Ci0JCW1faW52
YWxpZCA9IGZhbHNlOwotCQltX2F0QnJlYWtwb2ludCA9IHRydWU7Ci0JfQotCS8vLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQl2b2lkIGF0QnJlYWtw
b2ludChib29sZWFuIGF0YnJrcHQpIHsKLQkJbV9hdEJyZWFrcG9pbnQgPSBhdGJya3B0OwotCX0K
LQlwdWJsaWMgSnNPYmplY3QgYmluZChTdHJpbmcgaWQpIHRocm93cyBSZW1vdGVFeGNlcHRpb24g
ewotCQl0cnkgewotCQkJQ29udGV4dC5lbnRlcigpOwotCQkJU2NyaXB0YWJsZSBvYmogPSBtX2Zy
YW1lLmdldFZhcmlhYmxlT2JqZWN0KCk7Ci0JCQlPYmplY3QgcHJvcDsKLQkJCXdoaWxlIChvYmog
IT0gbnVsbCkgewotCQkJCVNjcmlwdGFibGUgbSA9IG9iajsKLQkJCQlkbyB7Ci0JCQkJCWlmICht
LmhhcyhpZCwgb2JqKSkKLQkJCQkJCXJldHVybiBtX3JoaW5vRGJnLm1hcnNoYWxsU2NyaXB0YWJs
ZShvYmopOwotCQkJCQltID0gbS5nZXRQcm90b3R5cGUoKTsKLQkJCQl9IHdoaWxlIChtICE9IG51
bGwpOwotCQkJCW9iaiA9IG9iai5nZXRQYXJlbnRTY29wZSgpOwotCQkJfQotCQkJdGhyb3cgbmV3
IEpzZGlFeGNlcHRpb24oIk5hbWUgbm90IGluIHNjb3BlLiIpOwotCQl9IGZpbmFsbHkgewotCQkJ
Q29udGV4dC5leGl0KCk7Ci0JCX0KLQl9Ci0JLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCXB1YmxpYyBKc0NvZGUgZ2V0Q29kZSgpIHsKLQkJaWYg
KG1faW52YWxpZCkKLQkJCXRocm93IG5ldyBKc2RpRXhjZXB0aW9uKCJUaGlzIGNvbnRleHQgbm8g
bG9uZ2VyIGV4aXN0cy4iKTsKLQkJaWYgKCFtX2F0QnJlYWtwb2ludCkKLQkJCXRocm93IG5ldyBK
c2RpRXhjZXB0aW9uKCJSZXN1bWVkIGNvbnRleHQsIGNhbid0IGdldCB0aGUgY29kZS4iKTsKLQot
CQl0cnkgewotCQkJQ29udGV4dC5lbnRlcigpOwotCQkJcmV0dXJuIG51bGw7Ci0JCX0gZmluYWxs
eSB7Ci0JCQlDb250ZXh0LmV4aXQoKTsKLQkJfQotCX0KLQlwdWJsaWMgaW50IGdldERlcHRoKCkg
ewotCQlyZXR1cm4gbV9mcmFtZW5vOwotCX0KLQkvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0JcHVibGljIEpzRW5naW5lIGdldEVuZ2luZSgpIHsK
LQkJUmhpbm9FbmdpbmVEZWJ1Z2dlciByZWRiZzsKLQkJcmVkYmcgPSBtX3JjcC5nZXRSaGlub0Vu
Z2luZURlYnVnZ2VyKCk7Ci0JCXJldHVybiAoSnNFbmdpbmUpIHJlZGJnLmdldERlYnVnSW50ZXJm
YWNlKCk7IAotCQkKLQl9Ci0JLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLQotCXB1YmxpYyBpbnQgZ2V0TGluZU51bWJlcigpIHsKLQkJaWYgKG1faW52
YWxpZCkKLQkJCXRocm93IG5ldyBKc2RpRXhjZXB0aW9uKCJUaGlzIGNvbnRleHQgbm8gbG9uZ2Vy
IGV4aXN0cy4iKTsKLQkJaWYgKCFtX2F0QnJlYWtwb2ludCkKLQkJCXRocm93IG5ldyBKc2RpRXhj
ZXB0aW9uKCJSZXN1bWVkIGNvbnRleHQsIGNhbid0IGdldCBsaW5lIG51bWJlci4iKTsKLQotCQl0
cnkgewotCQkJQ29udGV4dC5lbnRlcigpOwotCQkJcmV0dXJuIG1fZnJhbWUuZ2V0TGluZU51bWJl
cigpOwotCQl9IGZpbmFsbHkgewotCQkJQ29udGV4dC5leGl0KCk7Ci0JCX0KLQl9Ci0JLy8tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIAotCXB1
YmxpYyBKc09iamVjdCBnZXRTY29wZSgpIHRocm93cyBSZW1vdGVFeGNlcHRpb24gewotCi0JCWlm
IChtX2ludmFsaWQpCi0JCQl0aHJvdyBuZXcgSnNkaUV4Y2VwdGlvbigiVGhpcyBjb250ZXh0IG5v
IGxvbmdlciBleGlzdHMuIik7Ci0JCWlmICghbV9hdEJyZWFrcG9pbnQpCi0JCQl0aHJvdyBuZXcg
SnNkaUV4Y2VwdGlvbigiUmVzdW1lZCBjb250ZXh0LCBjYW4ndCBnZXQgbGluZSBudW1iZXIuIik7
Ci0KLQkJdHJ5IHsKLQkJCUNvbnRleHQuZW50ZXIoKTsKLQkJCVNjcmlwdGFibGUgdmFyb2JqID0g
bV9mcmFtZS5nZXRWYXJpYWJsZU9iamVjdCgpOwotCQkJSnNPYmplY3Qgc2NvcGUgPSBtX3JoaW5v
RGJnLm1hcnNoYWxsU2NyaXB0YWJsZSh2YXJvYmopOwotCQkJcmV0dXJuIHNjb3BlOwotCQl9IGZp
bmFsbHkgewotCQkJQ29udGV4dC5leGl0KCk7Ci0JCX0KLQl9Ci0JLy8tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIAotCXB1YmxpYyBTdHJpbmcg
Z2V0U291cmNlTmFtZSgpIHsKLQkJaWYgKG1faW52YWxpZCkKLQkJCXRocm93IG5ldyBKc2RpRXhj
ZXB0aW9uKCJUaGlzIGNvbnRleHQgbm8gbG9uZ2VyIGV4aXN0cy4iKTsKLQkJaWYgKCFtX2F0QnJl
YWtwb2ludCkKLQkJCXRocm93IG5ldyBKc2RpRXhjZXB0aW9uKCJSZXN1bWVkIGNvbnRleHQsIGNh
bid0IGdldCBsaW5lIG51bWJlci4iKTsKLQotCQl0cnkgewotCQkJQ29udGV4dC5lbnRlcigpOwot
CQkJcmV0dXJuIG1fZnJhbWUuZ2V0U291cmNlTmFtZSgpOwotCQl9IGZpbmFsbHkgewotCQkJQ29u
dGV4dC5leGl0KCk7Ci0JCX0KLQl9Ci0JLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIAotCXB1YmxpYyBKc09iamVjdCBnZXRUaGlzKCkgdGhy
b3dzIFJlbW90ZUV4Y2VwdGlvbiB7Ci0KLQkJaWYgKG1faW52YWxpZCkKLQkJCXRocm93IG5ldyBK
c2RpRXhjZXB0aW9uKCJUaGlzIGNvbnRleHQgbm8gbG9uZ2VyIGV4aXN0cy4iKTsKLQkJaWYgKCFt
X2F0QnJlYWtwb2ludCkKLQkJCXRocm93IG5ldyBKc2RpRXhjZXB0aW9uKCJSZXN1bWVkIGNvbnRl
eHQsIGNhbid0IGdldCBsaW5lIG51bWJlci4iKTsKLQotCQl0cnkgewotCQkJQ29udGV4dC5lbnRl
cigpOwotCQkJSnNPYmplY3QgdGhpc29iaiA9IG51bGw7Ci0JCQlTY3JpcHRhYmxlIG9iaiA9IG51
bGw7Ci0JCQlOYXRpdmVDYWxsIGNhbGwgPSBudWxsOwotCQkJU2NyaXB0YWJsZSB2YXJvYmogPSBt
X2ZyYW1lLmdldFZhcmlhYmxlT2JqZWN0KCk7Ci0JCQlpZiAodmFyb2JqIGluc3RhbmNlb2YgTmF0
aXZlQ2FsbCkgewotCQkJCWNhbGwgPSAoTmF0aXZlQ2FsbCkgdmFyb2JqOwotCQkJCW9iaiA9IGNh
bGwuZ2V0VGhpc09iaigpOwotCQkJCXRoaXNvYmogPSBtX3JoaW5vRGJnLm1hcnNoYWxsU2NyaXB0
YWJsZSh2YXJvYmopOwotCQkJfQotCQkJcmV0dXJuIHRoaXNvYmo7Ci0JCX0gZmluYWxseSB7Ci0J
CQlDb250ZXh0LmV4aXQoKTsKLQkJfQotCX0KLQkvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0Jdm9pZCBpbnZhbGlkYXRlKCkgewotCQltX2ludmFs
aWQgPSB0cnVlOwotCX0KLQkvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLSAgCi0JcHVibGljIGJvb2xlYW4gaXNFdmFsQ29udGV4dCgpIHsKLQkJ
aWYgKG1faW52YWxpZCkKLQkJCXRocm93IG5ldyBKc2RpRXhjZXB0aW9uKCJUaGlzIGNvbnRleHQg
bm8gbG9uZ2VyIGV4aXN0cy4iKTsKLQkJaWYgKCFtX2F0QnJlYWtwb2ludCkKLQkJCXRocm93IG5l
dyBKc2RpRXhjZXB0aW9uKCJSZXN1bWVkIGNvbnRleHQsIGNhbid0IGdldCBsaW5lIG51bWJlci4i
KTsKLQotCQl0cnkgewotCQkJQ29udGV4dC5lbnRlcigpOwotCQkJcmV0dXJuIGZhbHNlOwotCQl9
IGZpbmFsbHkgewotCQkJQ29udGV4dC5leGl0KCk7Ci0JCX0KLQl9Ci0JLy8tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIAotCXB1YmxpYyBib29s
ZWFuIGlzRnVuY3Rpb25Db250ZXh0KCkgewotCQlpZiAobV9pbnZhbGlkKQotCQkJdGhyb3cgbmV3
IEpzZGlFeGNlcHRpb24oIlRoaXMgY29udGV4dCBubyBsb25nZXIgZXhpc3RzLiIpOwotCQlpZiAo
IW1fYXRCcmVha3BvaW50KQotCQkJdGhyb3cgbmV3IEpzZGlFeGNlcHRpb24oIlJlc3VtZWQgY29u
dGV4dCwgY2FuJ3QgZ2V0IGxpbmUgbnVtYmVyLiIpOwotCi0JCXRyeSB7Ci0JCQlDb250ZXh0LmVu
dGVyKCk7Ci0JCQlyZXR1cm4gZmFsc2U7Ci0JCX0gZmluYWxseSB7Ci0JCQlDb250ZXh0LmV4aXQo
KTsKLQkJfQotCX0KLQkvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLSAgCi0JcHVibGljIGJvb2xlYW4gaXNTY3JpcHRDb250ZXh0KCkgewotCQlp
ZiAobV9pbnZhbGlkKQotCQkJdGhyb3cgbmV3IEpzZGlFeGNlcHRpb24oIlRoaXMgY29udGV4dCBu
byBsb25nZXIgZXhpc3RzLiIpOwotCQlpZiAoIW1fYXRCcmVha3BvaW50KQotCQkJdGhyb3cgbmV3
IEpzZGlFeGNlcHRpb24oIlJlc3VtZWQgY29udGV4dCwgY2FuJ3QgZ2V0IGxpbmUgbnVtYmVyLiIp
OwotCQl0cnkgewotCQkJQ29udGV4dC5lbnRlcigpOwotCQkJcmV0dXJuIHRydWU7Ci0JCX0gZmlu
YWxseSB7Ci0JCQlDb250ZXh0LmV4aXQoKTsKLQkJfQotCX0KLQlwdWJsaWMgT2JqZWN0IGxvb2t1
cE5hbWUoU3RyaW5nIG5hbWUpIHsKLQotCQl0cnkgewotCQkJQ29udGV4dC5lbnRlcigpOwotCQkJ
U2NyaXB0YWJsZSBvYmogPSBtX2ZyYW1lLmdldFZhcmlhYmxlT2JqZWN0KCk7Ci0JCQlPYmplY3Qg
cHJvcDsKLQkJCXdoaWxlIChvYmogIT0gbnVsbCkgewotCQkJCVNjcmlwdGFibGUgbSA9IG9iajsK
LQkJCQlkbyB7Ci0JCQkJCU9iamVjdCByZXN1bHQgPSBtLmdldChuYW1lLCBvYmopOwotCQkJCQlp
ZiAocmVzdWx0ICE9IFNjcmlwdGFibGUuTk9UX0ZPVU5EKQotCQkJCQkJcmV0dXJuIHJlc3VsdDsK
LQkJCQkJbSA9IG0uZ2V0UHJvdG90eXBlKCk7Ci0JCQkJfSB3aGlsZSAobSAhPSBudWxsKTsKLQkJ
CQlvYmogPSBvYmouZ2V0UGFyZW50U2NvcGUoKTsKLQkJCX0KLQkJCXRocm93IG5ldyBKc2RpRXhj
ZXB0aW9uKCJOYW1lIGlzIG5vdCBpbiBzY29wZS4iKTsKLQkJfSBmaW5hbGx5IHsKLQkJCUNvbnRl
eHQuZXhpdCgpOwotCQl9Ci0JfQotCS8qKgotCSAqIExvb2tzIHVwIGEgbmFtZSBpbiB0aGUgc2Nv
cGUgY2hhaW4gYW5kIHJldHVybnMgaXRzIHZhbHVlLgotCSAqLwotCXB1YmxpYyBPYmplY3QgbG9v
a3VwTmFtZShTY3JpcHRhYmxlIHNjb3BlQ2hhaW4sIFN0cmluZyBpZCkgewotCi0JCXRyeSB7Ci0J
CQlDb250ZXh0LmVudGVyKCk7Ci0JCQlTY3JpcHRhYmxlIG9iaiA9IHNjb3BlQ2hhaW47Ci0JCQlP
YmplY3QgcHJvcDsKLQkJCXdoaWxlIChvYmogIT0gbnVsbCkgewotCQkJCVNjcmlwdGFibGUgbSA9
IG9iajsKLQkJCQlkbyB7Ci0JCQkJCU9iamVjdCByZXN1bHQgPSBtLmdldChpZCwgb2JqKTsKLQkJ
CQkJaWYgKHJlc3VsdCAhPSBTY3JpcHRhYmxlLk5PVF9GT1VORCkKLQkJCQkJCXJldHVybiByZXN1
bHQ7Ci0JCQkJCW0gPSBtLmdldFByb3RvdHlwZSgpOwotCQkJCX0gd2hpbGUgKG0gIT0gbnVsbCk7
Ci0JCQkJb2JqID0gb2JqLmdldFBhcmVudFNjb3BlKCk7Ci0JCQl9Ci0JCQlyZXR1cm4gbnVsbDsK
LQkJfSBmaW5hbGx5IHsKLQkJCUNvbnRleHQuZXhpdCgpOwotCQl9Ci0JfQorICAgIFJoaW5vQ29u
dGV4dFByb3h5IG1fcmNwOworICAgIFJoaW5vRW5naW5lRGVidWdnZXIgbV9yaGlub0RiZzsKKyAg
ICBpbnQgbV9mcmFtZW5vOworICAgIGludCBtX2xpbmVubzsKKyAgICBib29sZWFuIG1fYXRCcmVh
a3BvaW50OworICAgIGJvb2xlYW4gbV9pbnZhbGlkOworCisgICAgQ29tcGlsYXRpb25Vbml0IG1f
dW5pdDsKKyAgICBTY3JpcHRhYmxlIG1fdmFyaWFibGVPYmplY3Q7CisgICAgU2NyaXB0YWJsZSBt
X3RoaXNPYmo7CisKKyAgICAvKioKKyAgICAgKiBKc0NvbnRleHRTdHViIGNvbnN0cnVjdG9yIGNv
bW1lbnQuCisgICAgICovCisgICAgSnNDb250ZXh0U3R1YihSaGlub0NvbnRleHRQcm94eSByY3As
IENvbXBpbGF0aW9uVW5pdCB1bml0KQorICAgIHRocm93cyBSZW1vdGVFeGNlcHRpb24geworICAg
ICAgICBzdXBlcihvcmcuYXBhY2hlLmJzZi5kZWJ1Zy51dGlsLkRlYnVnQ29uc3RhbnRzLkpTX0NP
TlRFWFRfVElEKTsKKworICAgICAgICBtX3JoaW5vRGJnID0gcmNwLmdldFJoaW5vRW5naW5lRGVi
dWdnZXIoKTsKKyAgICAgICAgbV9yY3AgPSByY3A7CisgICAgICAgIG1fdW5pdCA9IHVuaXQ7Cisg
ICAgICAgIG1faW52YWxpZCA9IGZhbHNlOworICAgICAgICBtX2F0QnJlYWtwb2ludCA9IHRydWU7
CisgICAgfQorCisgICAgRGVidWdGcmFtZSBnZXRSaGlub0RlYnVnRnJhbWUoKSB7CisgICAgICAg
IHJldHVybiBuZXcgUmhpbm9EZWJ1Z0ZyYW1lKHRoaXMpOworICAgIH0KKworICAgIC8vLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICB2b2lkIGF0
QnJlYWtwb2ludChib29sZWFuIGF0YnJrcHQpIHsKKyAgICAgICAgbV9hdEJyZWFrcG9pbnQgPSBh
dGJya3B0OworICAgIH0KKyAgICBwdWJsaWMgSnNPYmplY3QgYmluZChTdHJpbmcgaWQpIHRocm93
cyBSZW1vdGVFeGNlcHRpb24geworICAgICAgICB0cnkgeworICAgICAgICAgICAgQ29udGV4dC5l
bnRlcigpOworICAgICAgICAgICAgU2NyaXB0YWJsZSBvYmogPSBtX3ZhcmlhYmxlT2JqZWN0Owor
ICAgICAgICAgICAgT2JqZWN0IHByb3A7CisgICAgICAgICAgICB3aGlsZSAob2JqICE9IG51bGwp
IHsKKyAgICAgICAgICAgICAgICBTY3JpcHRhYmxlIG0gPSBvYmo7CisgICAgICAgICAgICAgICAg
ZG8geworICAgICAgICAgICAgICAgICAgICBpZiAobS5oYXMoaWQsIG9iaikpCisgICAgICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gbV9yaGlub0RiZy5tYXJzaGFsbFNjcmlwdGFibGUob2JqKTsK
KyAgICAgICAgICAgICAgICAgICAgbSA9IG0uZ2V0UHJvdG90eXBlKCk7CisgICAgICAgICAgICAg
ICAgfSB3aGlsZSAobSAhPSBudWxsKTsKKyAgICAgICAgICAgICAgICBvYmogPSBvYmouZ2V0UGFy
ZW50U2NvcGUoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHRocm93IG5ldyBKc2RpRXhj
ZXB0aW9uKCJOYW1lIG5vdCBpbiBzY29wZS4iKTsKKyAgICAgICAgfSBmaW5hbGx5IHsKKyAgICAg
ICAgICAgIENvbnRleHQuZXhpdCgpOworICAgICAgICB9CisgICAgfQorICAgIC8vLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICBwdWJsaWMgSnND
b2RlIGdldENvZGUoKSB7CisgICAgICAgIGlmIChtX2ludmFsaWQpCisgICAgICAgICAgICB0aHJv
dyBuZXcgSnNkaUV4Y2VwdGlvbigiVGhpcyBjb250ZXh0IG5vIGxvbmdlciBleGlzdHMuIik7Cisg
ICAgICAgIGlmICghbV9hdEJyZWFrcG9pbnQpCisgICAgICAgICAgICB0aHJvdyBuZXcgSnNkaUV4
Y2VwdGlvbigiUmVzdW1lZCBjb250ZXh0LCBjYW4ndCBnZXQgdGhlIGNvZGUuIik7CisKKyAgICAg
ICAgdHJ5IHsKKyAgICAgICAgICAgIENvbnRleHQuZW50ZXIoKTsKKyAgICAgICAgICAgIHJldHVy
biBudWxsOworICAgICAgICB9IGZpbmFsbHkgeworICAgICAgICAgICAgQ29udGV4dC5leGl0KCk7
CisgICAgICAgIH0KKyAgICB9CisgICAgcHVibGljIGludCBnZXREZXB0aCgpIHsKKyAgICAgICAg
cmV0dXJuIG1fZnJhbWVubzsKKyAgICB9CisgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgIHB1YmxpYyBKc0VuZ2luZSBnZXRFbmdpbmUo
KSB7CisgICAgICAgIFJoaW5vRW5naW5lRGVidWdnZXIgcmVkYmc7CisgICAgICAgIHJlZGJnID0g
bV9yY3AuZ2V0Umhpbm9FbmdpbmVEZWJ1Z2dlcigpOworICAgICAgICByZXR1cm4gKEpzRW5naW5l
KSByZWRiZy5nZXREZWJ1Z0ludGVyZmFjZSgpOworCisgICAgfQorICAgIC8vLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICBwdWJsaWMgaW50IGdl
dExpbmVOdW1iZXIoKSB7CisgICAgICAgIGlmIChtX2ludmFsaWQpCisgICAgICAgICAgICB0aHJv
dyBuZXcgSnNkaUV4Y2VwdGlvbigiVGhpcyBjb250ZXh0IG5vIGxvbmdlciBleGlzdHMuIik7Cisg
ICAgICAgIGlmICghbV9hdEJyZWFrcG9pbnQpCisgICAgICAgICAgICB0aHJvdyBuZXcgSnNkaUV4
Y2VwdGlvbigiUmVzdW1lZCBjb250ZXh0LCBjYW4ndCBnZXQgbGluZSBudW1iZXIuIik7CisKKyAg
ICAgICAgcmV0dXJuIG1fbGluZW5vOworICAgIH0KKyAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgIHB1YmxpYyBKc09iamVjdCBn
ZXRTY29wZSgpIHRocm93cyBSZW1vdGVFeGNlcHRpb24geworCisgICAgICAgIGlmIChtX2ludmFs
aWQpCisgICAgICAgICAgICB0aHJvdyBuZXcgSnNkaUV4Y2VwdGlvbigiVGhpcyBjb250ZXh0IG5v
IGxvbmdlciBleGlzdHMuIik7CisgICAgICAgIGlmICghbV9hdEJyZWFrcG9pbnQpCisgICAgICAg
ICAgICB0aHJvdyBuZXcgSnNkaUV4Y2VwdGlvbigiUmVzdW1lZCBjb250ZXh0LCBjYW4ndCBnZXQg
bGluZSBudW1iZXIuIik7CisKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIENvbnRleHQuZW50
ZXIoKTsKKyAgICAgICAgICAgIEpzT2JqZWN0IHNjb3BlID0gbV9yaGlub0RiZy5tYXJzaGFsbFNj
cmlwdGFibGUobV92YXJpYWJsZU9iamVjdCk7CisgICAgICAgICAgICByZXR1cm4gc2NvcGU7Cisg
ICAgICAgIH0gZmluYWxseSB7CisgICAgICAgICAgICBDb250ZXh0LmV4aXQoKTsKKyAgICAgICAg
fQorICAgIH0KKyAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLQorICAgIHB1YmxpYyBTdHJpbmcgZ2V0U291cmNlTmFtZSgpIHsKKyAgICAg
ICAgaWYgKG1faW52YWxpZCkKKyAgICAgICAgICAgIHRocm93IG5ldyBKc2RpRXhjZXB0aW9uKCJU
aGlzIGNvbnRleHQgbm8gbG9uZ2VyIGV4aXN0cy4iKTsKKyAgICAgICAgaWYgKCFtX2F0QnJlYWtw
b2ludCkKKyAgICAgICAgICAgIHRocm93IG5ldyBKc2RpRXhjZXB0aW9uKCJSZXN1bWVkIGNvbnRl
eHQsIGNhbid0IGdldCBsaW5lIG51bWJlci4iKTsKKworICAgICAgICByZXR1cm4gbV91bml0Lm1f
ZGJnU2NyaXB0LmdldFNvdXJjZU5hbWUoKTsKKyAgICB9CisgICAgLy8tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICBwdWJsaWMgSnNPYmpl
Y3QgZ2V0VGhpcygpIHRocm93cyBSZW1vdGVFeGNlcHRpb24geworCisgICAgICAgIGlmIChtX2lu
dmFsaWQpCisgICAgICAgICAgICB0aHJvdyBuZXcgSnNkaUV4Y2VwdGlvbigiVGhpcyBjb250ZXh0
IG5vIGxvbmdlciBleGlzdHMuIik7CisgICAgICAgIGlmICghbV9hdEJyZWFrcG9pbnQpCisgICAg
ICAgICAgICB0aHJvdyBuZXcgSnNkaUV4Y2VwdGlvbigiUmVzdW1lZCBjb250ZXh0LCBjYW4ndCBn
ZXQgbGluZSBudW1iZXIuIik7CisKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIENvbnRleHQu
ZW50ZXIoKTsKKyAgICAgICAgICAgIEpzT2JqZWN0IHRoaXNvYmogPSBudWxsOworICAgICAgICAg
ICAgU2NyaXB0YWJsZSBvYmogPSBudWxsOworICAgICAgICAgICAgTmF0aXZlQ2FsbCBjYWxsID0g
bnVsbDsKKyAgICAgICAgICAgIFNjcmlwdGFibGUgdmFyb2JqID0gbV92YXJpYWJsZU9iamVjdDsK
KyAgICAgICAgICAgIGlmICh2YXJvYmogaW5zdGFuY2VvZiBOYXRpdmVDYWxsKSB7CisgICAgICAg
ICAgICAgICAgY2FsbCA9IChOYXRpdmVDYWxsKSB2YXJvYmo7CisgICAgICAgICAgICAgICAgb2Jq
ID0gY2FsbC5nZXRUaGlzT2JqKCk7CisgICAgICAgICAgICAgICAgdGhpc29iaiA9IG1fcmhpbm9E
YmcubWFyc2hhbGxTY3JpcHRhYmxlKHZhcm9iaik7CisgICAgICAgICAgICB9CisgICAgICAgICAg
ICByZXR1cm4gdGhpc29iajsKKyAgICAgICAgfSBmaW5hbGx5IHsKKyAgICAgICAgICAgIENvbnRl
eHQuZXhpdCgpOworICAgICAgICB9CisgICAgfQorICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICB2b2lkIGludmFsaWRhdGUoKSB7Cisg
ICAgICAgIG1faW52YWxpZCA9IHRydWU7CisgICAgfQorICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgcHVibGljIGJvb2xlYW4g
aXNFdmFsQ29udGV4dCgpIHsKKyAgICAgICAgaWYgKG1faW52YWxpZCkKKyAgICAgICAgICAgIHRo
cm93IG5ldyBKc2RpRXhjZXB0aW9uKCJUaGlzIGNvbnRleHQgbm8gbG9uZ2VyIGV4aXN0cy4iKTsK
KyAgICAgICAgaWYgKCFtX2F0QnJlYWtwb2ludCkKKyAgICAgICAgICAgIHRocm93IG5ldyBKc2Rp
RXhjZXB0aW9uKCJSZXN1bWVkIGNvbnRleHQsIGNhbid0IGdldCBsaW5lIG51bWJlci4iKTsKKwor
ICAgICAgICB0cnkgeworICAgICAgICAgICAgQ29udGV4dC5lbnRlcigpOworICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgICAgICB9IGZpbmFsbHkgeworICAgICAgICAgICAgQ29udGV4dC5l
eGl0KCk7CisgICAgICAgIH0KKyAgICB9CisgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICBwdWJsaWMgYm9vbGVhbiBpc0Z1bmN0
aW9uQ29udGV4dCgpIHsKKyAgICAgICAgaWYgKG1faW52YWxpZCkKKyAgICAgICAgICAgIHRocm93
IG5ldyBKc2RpRXhjZXB0aW9uKCJUaGlzIGNvbnRleHQgbm8gbG9uZ2VyIGV4aXN0cy4iKTsKKyAg
ICAgICAgaWYgKCFtX2F0QnJlYWtwb2ludCkKKyAgICAgICAgICAgIHRocm93IG5ldyBKc2RpRXhj
ZXB0aW9uKCJSZXN1bWVkIGNvbnRleHQsIGNhbid0IGdldCBsaW5lIG51bWJlci4iKTsKKworICAg
ICAgICB0cnkgeworICAgICAgICAgICAgQ29udGV4dC5lbnRlcigpOworICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgICAgICB9IGZpbmFsbHkgeworICAgICAgICAgICAgQ29udGV4dC5leGl0
KCk7CisgICAgICAgIH0KKyAgICB9CisgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICBwdWJsaWMgYm9vbGVhbiBpc1NjcmlwdENv
bnRleHQoKSB7CisgICAgICAgIGlmIChtX2ludmFsaWQpCisgICAgICAgICAgICB0aHJvdyBuZXcg
SnNkaUV4Y2VwdGlvbigiVGhpcyBjb250ZXh0IG5vIGxvbmdlciBleGlzdHMuIik7CisgICAgICAg
IGlmICghbV9hdEJyZWFrcG9pbnQpCisgICAgICAgICAgICB0aHJvdyBuZXcgSnNkaUV4Y2VwdGlv
bigiUmVzdW1lZCBjb250ZXh0LCBjYW4ndCBnZXQgbGluZSBudW1iZXIuIik7CisgICAgICAgIHRy
eSB7CisgICAgICAgICAgICBDb250ZXh0LmVudGVyKCk7CisgICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICAgICAgfSBmaW5hbGx5IHsKKyAgICAgICAgICAgIENvbnRleHQuZXhpdCgpOworICAg
ICAgICB9CisgICAgfQorICAgIHB1YmxpYyBPYmplY3QgbG9va3VwTmFtZShTdHJpbmcgbmFtZSkg
eworCisgICAgICAgIHRyeSB7CisgICAgICAgICAgICBDb250ZXh0LmVudGVyKCk7CisgICAgICAg
ICAgICBTY3JpcHRhYmxlIG9iaiA9IG1fdmFyaWFibGVPYmplY3Q7CisgICAgICAgICAgICBPYmpl
Y3QgcHJvcDsKKyAgICAgICAgICAgIHdoaWxlIChvYmogIT0gbnVsbCkgeworICAgICAgICAgICAg
ICAgIFNjcmlwdGFibGUgbSA9IG9iajsKKyAgICAgICAgICAgICAgICBkbyB7CisgICAgICAgICAg
ICAgICAgICAgIE9iamVjdCByZXN1bHQgPSBtLmdldChuYW1lLCBvYmopOworICAgICAgICAgICAg
ICAgICAgICBpZiAocmVzdWx0ICE9IFNjcmlwdGFibGUuTk9UX0ZPVU5EKQorICAgICAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgICAgICAgICAgICAgbSA9IG0uZ2V0
UHJvdG90eXBlKCk7CisgICAgICAgICAgICAgICAgfSB3aGlsZSAobSAhPSBudWxsKTsKKyAgICAg
ICAgICAgICAgICBvYmogPSBvYmouZ2V0UGFyZW50U2NvcGUoKTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIHRocm93IG5ldyBKc2RpRXhjZXB0aW9uKCJOYW1lIGlzIG5vdCBpbiBzY29wZS4i
KTsKKyAgICAgICAgfSBmaW5hbGx5IHsKKyAgICAgICAgICAgIENvbnRleHQuZXhpdCgpOworICAg
ICAgICB9CisgICAgfQorICAgIC8qKgorICAgICAqIExvb2tzIHVwIGEgbmFtZSBpbiB0aGUgc2Nv
cGUgY2hhaW4gYW5kIHJldHVybnMgaXRzIHZhbHVlLgorICAgICAqLworICAgIHB1YmxpYyBPYmpl
Y3QgbG9va3VwTmFtZShTY3JpcHRhYmxlIHNjb3BlQ2hhaW4sIFN0cmluZyBpZCkgeworCisgICAg
ICAgIHRyeSB7CisgICAgICAgICAgICBDb250ZXh0LmVudGVyKCk7CisgICAgICAgICAgICBTY3Jp
cHRhYmxlIG9iaiA9IHNjb3BlQ2hhaW47CisgICAgICAgICAgICBPYmplY3QgcHJvcDsKKyAgICAg
ICAgICAgIHdoaWxlIChvYmogIT0gbnVsbCkgeworICAgICAgICAgICAgICAgIFNjcmlwdGFibGUg
bSA9IG9iajsKKyAgICAgICAgICAgICAgICBkbyB7CisgICAgICAgICAgICAgICAgICAgIE9iamVj
dCByZXN1bHQgPSBtLmdldChpZCwgb2JqKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3Vs
dCAhPSBTY3JpcHRhYmxlLk5PVF9GT1VORCkKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVy
biByZXN1bHQ7CisgICAgICAgICAgICAgICAgICAgIG0gPSBtLmdldFByb3RvdHlwZSgpOworICAg
ICAgICAgICAgICAgIH0gd2hpbGUgKG0gIT0gbnVsbCk7CisgICAgICAgICAgICAgICAgb2JqID0g
b2JqLmdldFBhcmVudFNjb3BlKCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4g
bnVsbDsKKyAgICAgICAgfSBmaW5hbGx5IHsKKyAgICAgICAgICAgIENvbnRleHQuZXhpdCgpOwor
ICAgICAgICB9CisgICAgfQorfQorCitjbGFzcyBSaGlub0RlYnVnRnJhbWUgaW1wbGVtZW50cyBE
ZWJ1Z0ZyYW1lIHsKKworICAgIEpzQ29udGV4dFN0dWIgbV9zdHViOworCisgICAgUmhpbm9EZWJ1
Z0ZyYW1lKEpzQ29udGV4dFN0dWIgc3R1YikgeworICAgICAgICBtX3N0dWIgPSBzdHViOworICAg
IH0KKworICAgIHB1YmxpYyB2b2lkIG9uRW50ZXIoQ29udGV4dCBjeCwgU2NyaXB0YWJsZSBhY3Rp
dmF0aW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgU2NyaXB0YWJsZSB0aGlzT2JqLCBPYmpl
Y3RbXSBhcmdzKQorICAgIHsKKyAgICAgICAgbV9zdHViLm1fdmFyaWFibGVPYmplY3QgPSBhY3Rp
dmF0aW9uOworICAgICAgICBtX3N0dWIubV90aGlzT2JqID0gdGhpc09iajsKKyAgICAgICAgbV9z
dHViLm1fZnJhbWVubyA9IG1fc3R1Yi5tX3JjcC5tX2ZyYW1lU3RhY2suc2l6ZSgpOworICAgICAg
ICBtX3N0dWIubV9yY3AubV9mcmFtZVN0YWNrLnB1c2gobV9zdHViKTsKKyAgICB9CisKKyAgICBw
dWJsaWMgdm9pZCBvbkV4aXQoQ29udGV4dCBjeCwgYm9vbGVhbiBieVRocm93LCBPYmplY3QgcmVz
dWx0T3JFeGNlcHRpb24pCisgICAgeworICAgICAgICBtX3N0dWIubV9yY3AubV9mcmFtZVN0YWNr
LnBvcCgpOworICAgICAgICBtX3N0dWIuaW52YWxpZGF0ZSgpOworICAgIH0KKworICAgIHB1Ymxp
YyB2b2lkIG9uRXhjZXB0aW9uVGhyb3duKENvbnRleHQgY3gsIFRocm93YWJsZSBleCkgeworICAg
ICAgICBtX3N0dWIubV9yY3AubV9yZURiZy5oYW5kbGVFeGNlcHRpb25UaHJvd24oY3gsIG1fc3R1
Yi5tX3JjcCwgZXgpOworICAgIH0KKworICAgIHB1YmxpYyB2b2lkIG9uTGluZUNoYW5nZShDb250
ZXh0IGN4LCBpbnQgbGluZU51bWJlcikgeworICAgICAgICBtX3N0dWIubV9saW5lbm8gPSBsaW5l
TnVtYmVyOworICAgICAgICBpZiAobV9zdHViLm1fdW5pdC5oYXNCcmVha3BvaW50KGxpbmVOdW1i
ZXIpKSB7CisgICAgICAgICAgICBtX3N0dWIubV9yY3AubV9yZURiZy5oYW5kbGVCcmVha3BvaW50
SGl0KGN4LCBtX3N0dWIubV9yY3ApOworICAgICAgICB9CisgICAgfQogfQpkaWZmIC11ck4gYnNm
LTIuMy4wL3NyYy9ic2Yvc3JjL29yZy9hcGFjaGUvYnNmL2VuZ2luZXMvamF2YXNjcmlwdC9Kc0Vu
Z2luZVN0dWIuamF2YSBic2YtMi4zLjAucGF0Y2hlZC9zcmMvYnNmL3NyYy9vcmcvYXBhY2hlL2Jz
Zi9lbmdpbmVzL2phdmFzY3JpcHQvSnNFbmdpbmVTdHViLmphdmEKLS0tIGJzZi0yLjMuMC9zcmMv
YnNmL3NyYy9vcmcvYXBhY2hlL2JzZi9lbmdpbmVzL2phdmFzY3JpcHQvSnNFbmdpbmVTdHViLmph
dmEJMjAwMi0xMS0xMiAyMzoyODo1NC4wMDAwMDAwMDAgLTA3MDAKKysrIGJzZi0yLjMuMC5wYXRj
aGVkL3NyYy9ic2Yvc3JjL29yZy9hcGFjaGUvYnNmL2VuZ2luZXMvamF2YXNjcmlwdC9Kc0VuZ2lu
ZVN0dWIuamF2YQkyMDA0LTA3LTA3IDIxOjEyOjE2LjEzNTgxODE4NCAtMDYwMApAQCAtNjIsMzgg
KzYyLDM3IEBACiBpbXBvcnQgb3JnLmFwYWNoZS5ic2YuZGVidWcuanNkaS4qOwogaW1wb3J0IG9y
Zy5tb3ppbGxhLmphdmFzY3JpcHQuQ29udGV4dDsKIGltcG9ydCBvcmcubW96aWxsYS5qYXZhc2Ny
aXB0LlNjcmlwdDsKLWltcG9ydCBvcmcubW96aWxsYS5qYXZhc2NyaXB0LmRlYnVnLkRlYnVnZ2Fi
bGVFbmdpbmU7CiAKIC8qKgogICogSW5zZXJ0IHRoZSB0eXBlJ3MgZGVzY3JpcHRpb24gaGVyZS4K
ICAqIENyZWF0aW9uIGRhdGU6ICg5LzYvMjAwMSAxOjIxOjQ2IFBNKQogICogQGF1dGhvcjogQWRt
aW5pc3RyYXRvcgogICovCi1wdWJsaWMgY2xhc3MgSnNFbmdpbmVTdHViIAorcHVibGljIGNsYXNz
IEpzRW5naW5lU3R1YgogICAgIGV4dGVuZHMgb3JnLmFwYWNoZS5ic2YuZGVidWcudXRpbC5Ta2Vs
ZXRvbgogICAgIGltcGxlbWVudHMgSnNFbmdpbmUgewogCiAgICAgUmhpbm9FbmdpbmVEZWJ1Z2dl
ciBtX3JoaW5vRGJnOwogICAgIGJvb2xlYW4gbV9pbkNhbGxiYWNrOwogICAgIGJvb2xlYW4gbV9y
ZXN1bWVFeGVjdXRpb247Ci0gICAgT2JqZWN0ICBtX2xvY2s7CQotCQorICAgIE9iamVjdCAgbV9s
b2NrOworCiAgICAgLyoqCiAgICAgICogSnNFbmdpbmVTdHViIGNvbnN0cnVjdG9yIGNvbW1lbnQu
CiAgICAgICovCi0gICAgcHVibGljIEpzRW5naW5lU3R1YihSaGlub0VuZ2luZURlYnVnZ2VyIHJo
aW5vRGJnKSAKKyAgICBwdWJsaWMgSnNFbmdpbmVTdHViKFJoaW5vRW5naW5lRGVidWdnZXIgcmhp
bm9EYmcpCiAgICAgICAgIHRocm93cyBSZW1vdGVFeGNlcHRpb24gewogICAgICAgICBzdXBlcihv
cmcuYXBhY2hlLmJzZi5kZWJ1Zy51dGlsLkRlYnVnQ29uc3RhbnRzLkpTX0VOR0lORV9USUQpOwog
ICAgICAgICBtX3JoaW5vRGJnID0gcmhpbm9EYmc7CiAgICAgICAgIG1fbG9jayA9IG5ldyBPYmpl
Y3QoKTsKICAgICB9Ci0JCisKICAgICBwdWJsaWMgYm9vbGVhbiBpc1N1c3BlbmRlZCgpIHRocm93
cyBSZW1vdGVFeGNlcHRpb24gewogICAgICAgICByZXR1cm4gbV9pbkNhbGxiYWNrOwogICAgIH0K
LQkKKwogICAgIHB1YmxpYyBib29sZWFuIHBvbGwoKSB7IHJldHVybiB0cnVlOyB9Ci0JCisKICAg
ICBwdWJsaWMgT2JqZWN0IGV2YWwoU3RyaW5nIGRvY25hbWUsIFN0cmluZyBleHAsIGludCBsaW5l
Tm8pCiAgICAgICAgIHRocm93cyBSZW1vdGVFeGNlcHRpb24gewogCkBAIC0xMjUsNyArMTI0LDcg
QEAKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIENvbnRleHQuZW50ZXIoKTsKICAgICAgICAg
ICAgIGNvdW50ID0gbV9yaGlub0RiZy5nZXRDb250ZXh0Q291bnQoKTsKLSAgICAgICAgICAgIERl
YnVnTG9nLnN0ZG91dFByaW50bG4oIgljb3VudCA9ICIrY291bnQsIAorICAgICAgICAgICAgRGVi
dWdMb2cuc3Rkb3V0UHJpbnRsbigiICAgIGNvdW50ID0gIitjb3VudCwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgRGVidWdMb2cuQlNGX0xPR19MMyk7CiAgICAgICAgICAgICBy
ZXR1cm4gY291bnQ7CiAgICAgICAgIH0gZmluYWxseSB7CkBAIC0xMzMsNyArMTMyLDcgQEAKICAg
ICAgICAgfQogCiAgICAgfQotICAKKwogICAgIHB1YmxpYyBTdHJpbmcgZ2V0VGhyZWFkKCkgdGhy
b3dzIFJlbW90ZUV4Y2VwdGlvbiB7CiAgICAgICAgIHJldHVybiBtX3JoaW5vRGJnLmdldFRocmVh
ZCgpOwogICAgIH0KQEAgLTIwMyw3ICsyMDIsNyBAQAogICAgIHB1YmxpYyB2b2lkIHN0ZXBJbigp
IHRocm93cyBSZW1vdGVFeGNlcHRpb24gewogICAgICAgICB0cnkgewogICAgICAgICAgICAgQ29u
dGV4dC5lbnRlcigpOwotICAgICAgICAgICAgRGVidWdMb2cuc3Rkb3V0UHJpbnRsbigiU3RlcCBJ
biBjb21tYW5kIG9uICIrdGhpcywgCisgICAgICAgICAgICBEZWJ1Z0xvZy5zdGRvdXRQcmludGxu
KCJTdGVwIEluIGNvbW1hbmQgb24gIit0aGlzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBEZWJ1Z0xvZy5CU0ZfTE9HX0wzKTsKICAgICAgICAgICAgIG1fcmhpbm9EYmcuc3Rl
cEluKHRoaXMpOwogICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKQEAgLTIyNSw3ICsy
MjQsNiBAQAogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIHN0ZXBPdmVyKCkgdGhyb3dzIFJlbW90
ZUV4Y2VwdGlvbiB7Ci0gICAgICAgIFJoaW5vQ29udGV4dFByb3h5IHJjcDsKICAgICAgICAgdHJ5
IHsKICAgICAgICAgICAgIENvbnRleHQuZW50ZXIoKTsKICAgICAgICAgICAgIG1fcmhpbm9EYmcu
c3RlcE92ZXIodGhpcyk7CmRpZmYgLXVyTiBic2YtMi4zLjAvc3JjL2JzZi9zcmMvb3JnL2FwYWNo
ZS9ic2YvZW5naW5lcy9qYXZhc2NyaXB0L1JoaW5vQ29udGV4dFByb3h5LmphdmEgYnNmLTIuMy4w
LnBhdGNoZWQvc3JjL2JzZi9zcmMvb3JnL2FwYWNoZS9ic2YvZW5naW5lcy9qYXZhc2NyaXB0L1Jo
aW5vQ29udGV4dFByb3h5LmphdmEKLS0tIGJzZi0yLjMuMC9zcmMvYnNmL3NyYy9vcmcvYXBhY2hl
L2JzZi9lbmdpbmVzL2phdmFzY3JpcHQvUmhpbm9Db250ZXh0UHJveHkuamF2YQkyMDAyLTExLTEy
IDIzOjI4OjUzLjAwMDAwMDAwMCAtMDcwMAorKysgYnNmLTIuMy4wLnBhdGNoZWQvc3JjL2JzZi9z
cmMvb3JnL2FwYWNoZS9ic2YvZW5naW5lcy9qYXZhc2NyaXB0L1JoaW5vQ29udGV4dFByb3h5Lmph
dmEJMjAwNC0wNy0wNyAyMToxMjoxNi4xMzY4MTgwMzIgLTA2MDAKQEAgLTcwLDEzMyArNzAsMTA3
IEBACiAKIGltcG9ydCBqYXZhLnJtaS5SZW1vdGVFeGNlcHRpb247CiAKLXB1YmxpYyBjbGFzcyBS
aGlub0NvbnRleHRQcm94eSB7CitjbGFzcyBSaGlub0NvbnRleHRQcm94eSB7CiAKICAgICBSaGlu
b0VuZ2luZURlYnVnZ2VyIG1fcmVEYmc7Ci0gICAgQ29udGV4dCBtX2NvbnRleHQ7Ci0gICAgSnND
b250ZXh0U3R1YiBtX2NvbnRleHRTdHViOwogCi0gICAgRGVidWdnYWJsZUVuZ2luZSBtX2VuZ2lu
ZTsKLQotICAgIGJvb2xlYW4gbV9hdEJyZWFrcG9pbnQ7Ci0gICAgaW50IG1fZnJhbWVDb3VudDsK
LSAgICBKc0NvbnRleHRTdHViIG1fZnJhbWVzW107CisgICAgT2JqQXJyYXkgbV9mcmFtZVN0YWNr
ID0gbmV3IE9iakFycmF5KCk7CiAKICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgTk9fU1RF
UCA9IDAsIFNURVBfSU4gPSAxLCBTVEVQX09WRVIgPSAyLAogICAgICAgICBTVEVQX09VVCA9IDMs
IFNUT1BfRU5HSU5FID0gNCwgUlVOTklORyA9IDU7CiAKICAgICBwcml2YXRlIGludCBtX3N0ZXBD
bWQsIG1fc3RlcERlcHRoOwogCi0gICAgUmhpbm9Db250ZXh0UHJveHkoUmhpbm9FbmdpbmVEZWJ1
Z2dlciByZURiZywgQ29udGV4dCBjeCkgeworICAgIFJoaW5vQ29udGV4dFByb3h5KFJoaW5vRW5n
aW5lRGVidWdnZXIgcmVEYmcpIHsKICAgICAgICAgbV9yZURiZyA9IHJlRGJnOwotICAgICAgICBt
X2NvbnRleHQgPSBjeDsKLSAgICAgICAgbV9lbmdpbmUgPSBjeC5nZXREZWJ1Z2dhYmxlRW5naW5l
KCk7CiAgICAgfQogCi0gICAgcHVibGljIHZvaWQgY2FuY2VsU3RlcHBpbmcoKSB7CisgICAgc3Rh
dGljIFJoaW5vQ29udGV4dFByb3h5IGdldEN1cnJlbnQoKSB7CisgICAgICAgIENvbnRleHQgY3gg
PSBDb250ZXh0LmdldEN1cnJlbnRDb250ZXh0KCk7CisgICAgICAgIGlmIChjeCA9PSBudWxsKSB7
IHJldHVybiBudWxsOyB9CisgICAgICAgIHJldHVybiAoUmhpbm9Db250ZXh0UHJveHkpY3guZ2V0
RGVidWdnZXJDb250ZXh0RGF0YSgpOworICAgIH0KKworICAgIHZvaWQgY2FuY2VsU3RlcHBpbmco
KSB7CiAgICAgICAgIG1fc3RlcENtZCA9IE5PX1NURVA7CiAgICAgICAgIG1fc3RlcERlcHRoID0g
LTE7Ci0gICAgICAgIG1fZW5naW5lLnNldEJyZWFrTmV4dExpbmUoZmFsc2UpOwogICAgIH0KIAot
ICAgIHB1YmxpYyBKc0NvbnRleHRTdHViIGdldENvbnRleHQoaW50IGRlcHRoKSB7Ci0gICAgICAg
IHJldHVybiBtX2ZyYW1lc1tkZXB0aF07CisgICAgaW50IGdldENvbnRleHRDb3VudCgpIHsKKyAg
ICAgICAgcmV0dXJuIG1fZnJhbWVTdGFjay5zaXplKCk7CiAgICAgfQogCi0gICAgcHVibGljIGlu
dCBnZXRDb250ZXh0Q291bnQoKSB7Ci0gICAgICAgIHJldHVybiBtX2ZyYW1lQ291bnQ7CisgICAg
SnNDb250ZXh0U3R1YiBnZXRDb250ZXh0U3R1YihpbnQgbm8pIHsKKyAgICAgICAgaWYgKCEoMCA8
PSBubyAmJiBubyA8IG1fZnJhbWVTdGFjay5zaXplKCkpKSB7IHJldHVybiBudWxsOyB9CisgICAg
ICAgIHJldHVybiAoSnNDb250ZXh0U3R1YiltX2ZyYW1lU3RhY2suZ2V0KG5vKTsKICAgICB9CiAK
LSAgICBwdWJsaWMgSnNDb250ZXh0U3R1YiBnZXRGcmFtZShpbnQgbm8pIHsKLSAgICAgICAgaWYg
KG5vIDwgMCB8fCBubyA+IG1fZnJhbWVDb3VudCkKLSAgICAgICAgICAgIHJldHVybiBudWxsOwot
ICAgICAgICBpZiAobm8gPT0gbV9mcmFtZUNvdW50KQotICAgICAgICAgICAgcmV0dXJuIG1fY29u
dGV4dFN0dWI7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHJldHVybiBtX2ZyYW1lc1tub107
CisgICAgSnNDb250ZXh0U3R1YiBnZXRUb3BDb250ZXh0U3R1YigpIHsKKyAgICAgICAgcmV0dXJu
IGdldENvbnRleHRTdHViKG1fZnJhbWVTdGFjay5zaXplKCkgLSAxKTsKICAgICB9CiAKLSAgICBw
dWJsaWMgaW50IGdldExpbmVOdW1iZXIoKSB7Ci0gICAgICAgIERlYnVnRnJhbWUgZnJhbWUgPSBt
X2VuZ2luZS5nZXRGcmFtZSgwKTsKLQotICAgICAgICByZXR1cm4gZnJhbWUuZ2V0TGluZU51bWJl
cigpOworICAgIGludCBnZXRMaW5lTnVtYmVyKCkgeworICAgICAgICBKc0NvbnRleHRTdHViIHN0
dWIgPSBnZXRUb3BDb250ZXh0U3R1YigpOworICAgICAgICByZXR1cm4gc3R1Yi5tX2xpbmVubzsK
ICAgICB9CiAKLSAgICBwdWJsaWMgUmhpbm9FbmdpbmVEZWJ1Z2dlciBnZXRSaGlub0VuZ2luZURl
YnVnZ2VyKCkgeworICAgIFJoaW5vRW5naW5lRGVidWdnZXIgZ2V0Umhpbm9FbmdpbmVEZWJ1Z2dl
cigpIHsKICAgICAgICAgcmV0dXJuIG1fcmVEYmc7CiAgICAgfQogCiAgICAgU3RyaW5nIGdldFNv
dXJjZU5hbWUoKSB7Ci0gICAgICAgIERlYnVnRnJhbWUgZnJhbWUgPSBtX2VuZ2luZS5nZXRGcmFt
ZSgwKTsKLQotICAgICAgICByZXR1cm4gZnJhbWUuZ2V0U291cmNlTmFtZSgpOworICAgICAgICBK
c0NvbnRleHRTdHViIHN0dWIgPSBnZXRUb3BDb250ZXh0U3R1YigpOworICAgICAgICByZXR1cm4g
c3R1Yi5tX3VuaXQubV9kYmdTY3JpcHQuZ2V0U291cmNlTmFtZSgpOwogICAgIH0KIAotCiAgICAg
Ly8gV2UgaGl0IGEga25vd24gYnJlYWtwb2ludC4KICAgICAvLyBXZSBuZWVkIHRvIHVwZGF0ZSB0
aGUgc3RhY2suCiAgICAgLy8gQWxzbywgY2FuY2VsIGFueSBwZW5kaW5nIHN0ZXBwaW5nIG9wZXJh
dGlvbi4KLSAgICBwdWJsaWMgSnNDb250ZXh0U3R1YiBoaXRCcmVha3BvaW50KCkgdGhyb3dzIFJl
bW90ZUV4Y2VwdGlvbiB7CisgICAgSnNDb250ZXh0U3R1YiBoaXRCcmVha3BvaW50KCkgdGhyb3dz
IFJlbW90ZUV4Y2VwdGlvbiB7CiAgICAgICAgIGNhbmNlbFN0ZXBwaW5nKCk7Ci0gICAgICAgIHVw
ZGF0ZVN0YWNrKCk7Ci0gICAgICAgIHJldHVybiBtX2ZyYW1lc1swXTsKKyAgICAgICAgcmV0dXJu
IGdldFRvcENvbnRleHRTdHViKCk7CiAgICAgfQogCi0KLSAgICBwdWJsaWMgSnNDb250ZXh0U3R1
YiBleGNlcHRpb25UaHJvd24oKSB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uIHsKKyAgICBKc0NvbnRl
eHRTdHViIGV4Y2VwdGlvblRocm93bigpIHRocm93cyBSZW1vdGVFeGNlcHRpb24gewogICAgICAg
ICBjYW5jZWxTdGVwcGluZygpOwotICAgICAgICB1cGRhdGVTdGFjaygpOwotICAgICAgICByZXR1
cm4gbV9mcmFtZXNbMF07CisgICAgICAgIHJldHVybiBnZXRUb3BDb250ZXh0U3R1YigpOwogICAg
IH0KIAotICAgIHB1YmxpYyB2b2lkIHJlc3VtZWQoKSB7Ci0gICAgICAgIEpzQ29udGV4dFN0dWIg
c3R1YjsKLSAgICAgICAgRGVidWdGcmFtZSBmcmFtZTsKLQotICAgICAgICBtX2F0QnJlYWtwb2lu
dCA9IGZhbHNlOwotCi0gICAgICAgIGZvciAoaW50IGYgPSAwOyBmIDwgbV9mcmFtZUNvdW50OyBm
KyspIHsKLSAgICAgICAgICAgIHN0dWIgPSBtX2ZyYW1lc1tmXTsKLSAgICAgICAgICAgIHN0dWIu
YXRCcmVha3BvaW50KGZhbHNlKTsKKyAgICB2b2lkIHJlc3VtZWQoKSB7CisgICAgICAgIGZvciAo
aW50IGYgPSAwLCBOID0gZ2V0Q29udGV4dENvdW50KCk7IGYgIT0gTjsgKytmKSB7CisgICAgICAg
ICAgICBnZXRDb250ZXh0U3R1YihmKS5hdEJyZWFrcG9pbnQoZmFsc2UpOwogICAgICAgICB9CiAg
ICAgfQogCi0gICAgcHVibGljIHZvaWQgcnVuKCkgewotICAgICAgICBtX2VuZ2luZS5zZXRCcmVh
a05leHRMaW5lKGZhbHNlKTsKKyAgICB2b2lkIHJ1bigpIHsKICAgICAgICAgbV9zdGVwQ21kID0g
UlVOTklORzsKICAgICAgICAgbV9zdGVwRGVwdGggPSAtMTsKLQogICAgIH0KIAotICAgIHB1Ymxp
YyB2b2lkIHN0ZXBJbigpIHsKLSAgICAgICAgbV9lbmdpbmUuc2V0QnJlYWtOZXh0TGluZSh0cnVl
KTsKKyAgICB2b2lkIHN0ZXBJbigpIHsKICAgICAgICAgbV9zdGVwQ21kID0gU1RFUF9JTjsKLSAg
ICAgICAgbV9zdGVwRGVwdGggPSBtX2ZyYW1lQ291bnQ7CisgICAgICAgIG1fc3RlcERlcHRoID0g
Z2V0Q29udGV4dENvdW50KCk7CiAgICAgfQogCi0gICAgcHVibGljIHZvaWQgc3RlcE91dCgpIHsK
LSAgICAgICAgbV9lbmdpbmUuc2V0QnJlYWtOZXh0TGluZSh0cnVlKTsKKyAgICB2b2lkIHN0ZXBP
dXQoKSB7CiAgICAgICAgIG1fc3RlcENtZCA9IFNURVBfT1VUOwotICAgICAgICBtX3N0ZXBEZXB0
aCA9IG1fZnJhbWVDb3VudDsKLQorICAgICAgICBtX3N0ZXBEZXB0aCA9IGdldENvbnRleHRDb3Vu
dCgpOwogICAgIH0KIAotICAgIHB1YmxpYyB2b2lkIHN0ZXBPdmVyKCkgewotICAgICAgICBtX2Vu
Z2luZS5zZXRCcmVha05leHRMaW5lKHRydWUpOworICAgIHZvaWQgc3RlcE92ZXIoKSB7CiAgICAg
ICAgIG1fc3RlcENtZCA9IFNURVBfT1ZFUjsKLSAgICAgICAgbV9zdGVwRGVwdGggPSBtX2ZyYW1l
Q291bnQ7CisgICAgICAgIG1fc3RlcERlcHRoID0gZ2V0Q29udGV4dENvdW50KCk7CiAgICAgfQog
Ci0gICAgcHVibGljIEpzQ29udGV4dFN0dWIgZW50cnlfZXhpdF9tb2RlKCkgdGhyb3dzIFJlbW90
ZUV4Y2VwdGlvbiB7CisgICAgSnNDb250ZXh0U3R1YiBlbnRyeV9leGl0X21vZGUoKSB0aHJvd3Mg
UmVtb3RlRXhjZXB0aW9uIHsKICAgICAgICAgY2FuY2VsU3RlcHBpbmcoKTsKLSAgICAgICAgdXBk
YXRlU3RhY2soKTsKLSAgICAgICAgcmV0dXJuIG1fZnJhbWVzWzBdOworICAgICAgICByZXR1cm4g
Z2V0VG9wQ29udGV4dFN0dWIoKTsKICAgICB9CiAKLSAgICBwdWJsaWMgSnNDb250ZXh0U3R1YiBz
dGVwcGluZygpIHsKKyAgICBKc0NvbnRleHRTdHViIHN0ZXBwaW5nKCkgewogICAgICAgICAvLyBE
aWQgd2UgaGl0IGEga25vd24gYnJlYWtwb2ludD8KIAotICAgICAgICBpbnQgZnJhbWVDb3VudCA9
IG1fZW5naW5lLmdldEZyYW1lQ291bnQoKTsKKyAgICAgICAgaW50IGZyYW1lQ291bnQgPSBnZXRD
b250ZXh0Q291bnQoKTsKIAogICAgICAgICB0cnkgewogICAgICAgICAgICAgc3dpdGNoIChtX3N0
ZXBDbWQpIHsKQEAgLTIwNCwzOSArMTc4LDMxIEBACiAgICAgICAgICAgICAgICAgY2FuY2VsU3Rl
cHBpbmcoKTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIGNhc2UgU1RPUF9F
TkdJTkUgOgotICAgICAgICAgICAgICAgIHVwZGF0ZVN0YWNrKCk7CiAgICAgICAgICAgICAgICAg
Y2FuY2VsU3RlcHBpbmcoKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gbV9mcmFtZXNbMF07Cisg
ICAgICAgICAgICAgICAgcmV0dXJuIGdldFRvcENvbnRleHRTdHViKCk7CiAgICAgICAgICAgICBj
YXNlIFNURVBfSU4gOgotICAgICAgICAgICAgICAgIC8vIE9HIGlmICgoZnJhbWVDb3VudCA9PSBt
X3N0ZXBEZXB0aCArIDEpIHx8IAorICAgICAgICAgICAgICAgIC8vIE9HIGlmICgoZnJhbWVDb3Vu
dCA9PSBtX3N0ZXBEZXB0aCArIDEpIHx8CiAgICAgICAgICAgICAgICAgLy8gKGZyYW1lQ291bnQg
PT0gbV9zdGVwRGVwdGgpKSB7CiAgICAgICAgICAgICAgICAgLy8gc3RlcCBpZiB3ZSBhcmUgaW4g
dGhlIHNhbWUgZnJhbWUgKG5vdGhpbmcgdG8gc3RlcCBpbi4uLiA6LSkKICAgICAgICAgICAgICAg
ICAvLyBpZiB3ZSBhcmUgaW4gYSBjYWxsZWQgZnJhbWUuLi4KICAgICAgICAgICAgICAgICAvLyBi
dXQgYWxzbyBpZiB3ZSBzdGVwcGVkIG91dCBvZiB0aGUgY3VycmVudCBmcmFtZS4uLgotICAgICAg
ICAgICAgICAgIGlmICgoZnJhbWVDb3VudCA+PSBtX3N0ZXBEZXB0aCkgCi0gICAgICAgICAgICAg
ICAgICAgIHx8IChmcmFtZUNvdW50IDwgbV9zdGVwRGVwdGgpKSB7Ci0gICAgICAgICAgICAgICAg
ICAgIHVwZGF0ZVN0YWNrKCk7CiAgICAgICAgICAgICAgICAgICAgIGNhbmNlbFN0ZXBwaW5nKCk7
Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBtX2ZyYW1lc1swXTsKLSAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBn
ZXRUb3BDb250ZXh0U3R1YigpOwogICAgICAgICAgICAgY2FzZSBTVEVQX09WRVIgOgogICAgICAg
ICAgICAgICAgIC8vIE9HIGlmIChmcmFtZUNvdW50ID09IG1fc3RlcERlcHRoKSB7CiAgICAgICAg
ICAgICAgICAgLy8gc3RlcCBpZiB3ZSBhcmUgaW4gdGhlIHNhbWUgZnJhbWUgb3IgYWJvdmUuLi4K
LSAgICAgICAgICAgICAgICAvLyB0aGlzIGJhc2ljYWxseSBhdm9pZHMgYW55IGNoaWxkcmVuIGZy
YW1lIGJ1dCAKKyAgICAgICAgICAgICAgICAvLyB0aGlzIGJhc2ljYWxseSBhdm9pZHMgYW55IGNo
aWxkcmVuIGZyYW1lIGJ1dAogICAgICAgICAgICAgICAgIC8vIGNvdmVycyB0aGUgcmV0dXJuIG9m
IHRoZSBjdXJyZW50IGZyYW1lLgogICAgICAgICAgICAgICAgIGlmIChmcmFtZUNvdW50IDw9IG1f
c3RlcERlcHRoKSB7Ci0gICAgICAgICAgICAgICAgICAgIHVwZGF0ZVN0YWNrKCk7CiAgICAgICAg
ICAgICAgICAgICAgIGNhbmNlbFN0ZXBwaW5nKCk7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVy
biBtX2ZyYW1lc1swXTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdldFRvcENvbnRleHRT
dHViKCk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICAgICAgY2FzZSBTVEVQX09VVCA6CiAgICAgICAgICAgICAgICAgLy8gT0cgaWYgKGZyYW1lQ291
bnQgPT0gbV9zdGVwRGVwdGggLSAxKSB7CiAgICAgICAgICAgICAgICAgaWYgKGZyYW1lQ291bnQg
PCBtX3N0ZXBEZXB0aCkgewotICAgICAgICAgICAgICAgICAgICB1cGRhdGVTdGFjaygpOwogICAg
ICAgICAgICAgICAgICAgICBjYW5jZWxTdGVwcGluZygpOwotICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gbV9mcmFtZXNbMF07CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBnZXRUb3BDb250
ZXh0U3R1YigpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgICAgIGRlZmF1bHQgOgpAQCAtMjQ5LDU1ICsyMTUsOCBAQAogICAgICAgICByZXR1cm4g
bnVsbDsKICAgICB9CiAKLSAgICBwdWJsaWMgdm9pZCBzdG9wRW5naW5lKCkgewotICAgICAgICBt
X2VuZ2luZS5zZXRCcmVha05leHRMaW5lKHRydWUpOworICAgIHZvaWQgc3RvcEVuZ2luZSgpIHsK
ICAgICAgICAgbV9zdGVwQ21kID0gU1RPUF9FTkdJTkU7CiAgICAgICAgIG1fc3RlcERlcHRoID0g
LTE7CiAgICAgfQotCi0gICAgcHVibGljIHZvaWQgdXBkYXRlU3RhY2soKSB0aHJvd3MgUmVtb3Rl
RXhjZXB0aW9uIHsKLSAgICAgICAgSnNDb250ZXh0U3R1YiBmcmFtZXNbXTsKLSAgICAgICAgSnND
b250ZXh0U3R1YiBzdHViOwotICAgICAgICBEZWJ1Z0ZyYW1lIGZyYW1lOwotICAgICAgICBpbnQg
bmYsIG9mLCBmcmFtZUNvdW50OwotCi0gICAgICAgIG1fYXRCcmVha3BvaW50ID0gdHJ1ZTsKLQot
ICAgICAgICBmcmFtZUNvdW50ID0gbV9lbmdpbmUuZ2V0RnJhbWVDb3VudCgpOwotICAgICAgICBm
cmFtZXMgPSBuZXcgSnNDb250ZXh0U3R1YltmcmFtZUNvdW50XTsKLQotICAgICAgICAvLyBzY2Fu
IHRoZSBzdGFja3MgZnJvbSB0aGUgb3V0ZXIgZnJhbWUgZG93bgotICAgICAgICAvLyB0byB0aGUg
aW5uZXIgb25lIG9mIHRoZSBzaG9ydGVzdCBvZiB0aGUgb2xkCi0gICAgICAgIC8vIGFuZCB0aGUg
bmV3IGtub3duIHN0YWNrLgotICAgICAgICAvLyBUaGUgZ29hbCBpcyB0byByZWNvZ25pemUgdGhl
IERlYnVnRnJhbWUgb2JqZWN0cwotICAgICAgICAvLyB0aGF0IGFyZSB0aGUgc2FtZXMgc28gdGhh
dCB3ZSBjYW4gcmV1c2UgdGhlIAotICAgICAgICAvLyBzdHVicyBmb3IgdGhvc2UuIAotICAgICAg
ICAvLyBBcyBzb29uIGFzIGEgRGVidWdGcmFtZSBvYmplY3QgaXMgZm91bmQgZGlmZmVyZW50LAot
ICAgICAgICAvLyB0aGUgcmVzdCBvZiB0aGUgc3RhY2sgaXMgZGlmZmVyZW50LCBhbGwgdGhlIG9s
ZAotICAgICAgICAvLyBzdHVicyBjYW4gYmUgZHJvcHBlZCBhbmQgaW52YWxpZGF0ZWQsIG5ldyBv
bmVzCi0gICAgICAgIC8vIG11c3QgYmUgY3JlYXRlZC4KLQotICAgICAgICBmb3IgKG5mID0gZnJh
bWVDb3VudCAtIDEsIG9mID0gbV9mcmFtZUNvdW50IC0gMTsKLSAgICAgICAgICAgICBuZiA+PSAw
ICYmIG9mID49IDA7Ci0gICAgICAgICAgICAgbmYtLSwgb2YtLSkgewotICAgICAgICAgICAgZnJh
bWUgPSBtX2VuZ2luZS5nZXRGcmFtZShuZik7Ci0gICAgICAgICAgICBpZiAoZnJhbWUgPT0gbV9m
cmFtZXNbb2ZdLm1fZnJhbWUpIHsKLSAgICAgICAgICAgICAgICBmcmFtZXNbbmZdID0gbV9mcmFt
ZXNbb2ZdOwotICAgICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgIH0KLSAgICAgICAgLy8gbm93IGRyb3AgYWxsIG9sZCBmcmFtZXMgdGhhdCBkaXZlcmdlZC4K
LSAgICAgICAgLy8gQWxzbyBpbnZhbGlkYXRlIHRoZSBmcmFtZSBzdHVicyBzbyB0bwotICAgICAg
ICAvLyB0cmFja2VkIHRoYXQgdGhleSBhcmUgbm8gbG9uZ2VyIHZhbGlkLgotICAgICAgICBmb3Ig
KDsgb2YgPj0gMDsgb2YtLSkgewotICAgICAgICAgICAgbV9yZURiZy5kcm9wU3R1YihtX2ZyYW1l
c1tvZl0ubV9mcmFtZSk7Ci0gICAgICAgICAgICBtX2ZyYW1lc1tvZl0uaW52YWxpZGF0ZSgpOwot
ICAgICAgICB9Ci0gICAgICAgIGZvciAoOyBuZiA+PSAwOyBuZi0tKSB7Ci0gICAgICAgICAgICBm
cmFtZSA9IG1fZW5naW5lLmdldEZyYW1lKG5mKTsKLSAgICAgICAgICAgIGZyYW1lc1tuZl0gPSBu
ZXcgSnNDb250ZXh0U3R1Yih0aGlzLCBmcmFtZSwgbmYpOwotICAgICAgICB9Ci0gICAgICAgIG1f
ZnJhbWVzID0gZnJhbWVzOwotICAgICAgICBtX2ZyYW1lQ291bnQgPSBmcmFtZUNvdW50OwotICAg
IH0KIH0KZGlmZiAtdXJOIGJzZi0yLjMuMC9zcmMvYnNmL3NyYy9vcmcvYXBhY2hlL2JzZi9lbmdp
bmVzL2phdmFzY3JpcHQvUmhpbm9FbmdpbmVEZWJ1Z2dlci5qYXZhIGJzZi0yLjMuMC5wYXRjaGVk
L3NyYy9ic2Yvc3JjL29yZy9hcGFjaGUvYnNmL2VuZ2luZXMvamF2YXNjcmlwdC9SaGlub0VuZ2lu
ZURlYnVnZ2VyLmphdmEKLS0tIGJzZi0yLjMuMC9zcmMvYnNmL3NyYy9vcmcvYXBhY2hlL2JzZi9l
bmdpbmVzL2phdmFzY3JpcHQvUmhpbm9FbmdpbmVEZWJ1Z2dlci5qYXZhCTIwMDItMTEtMTIgMjM6
Mjg6NTUuMDAwMDAwMDAwIC0wNzAwCisrKyBic2YtMi4zLjAucGF0Y2hlZC9zcmMvYnNmL3NyYy9v
cmcvYXBhY2hlL2JzZi9lbmdpbmVzL2phdmFzY3JpcHQvUmhpbm9FbmdpbmVEZWJ1Z2dlci5qYXZh
CTIwMDQtMDctMDcgMjE6MTI6MTYuMTM4ODE3NzI4IC0wNjAwCkBAIC03NCwyNCArNzQsMjMgQEAK
IGltcG9ydCBvcmcuYXBhY2hlLmJzZi5kZWJ1Zy4qOwogaW1wb3J0IG9yZy5hcGFjaGUuYnNmLmRl
YnVnLmpzZGkuKjsKIAotcHVibGljIGNsYXNzIFJoaW5vRW5naW5lRGVidWdnZXIgaW1wbGVtZW50
cyBEZWJ1Z2dlciB7CitjbGFzcyBSaGlub0VuZ2luZURlYnVnZ2VyIGltcGxlbWVudHMgRGVidWdn
ZXIgewogCiAgICAgLyoqIFRoZSBnbG9iYWwgc2NyaXB0IG9iamVjdCwgd2hlcmUgYWxsIGVtYmVk
ZGVkIGZ1bmN0aW9ucyBhcmUgZGVmaW5lZCwKICAgICAgKiBhcyB3ZWxsIGFzIHRoZSBzdGFuZGFy
ZCBFQ01BICJjb3JlIiBvYmplY3RzLgotICAgICAqLwkKKyAgICAgKi8KICAgICBwcml2YXRlIFNj
cmlwdGFibGUgZ2xvYmFsOwogICAgIHByaXZhdGUgSnNPYmplY3QgZ2xvYmFsc3R1YjsKIAotICAg
IHByaXZhdGUgUmhpbm9Db250ZXh0UHJveHkgbV9yY3A7CiAgICAgcHJpdmF0ZSBTY3JpcHRhYmxl
IHVuZGVmaW5lZDsKICAgICBwcml2YXRlIEpzT2JqZWN0IHVuZGVmaW5lZFN0dWI7CiAKLSAgICAv
KiogCisgICAgLyoqCiAgICAgICogIEhhc2h0YWJsZSBhbGxvd2luZyB0byBmaW5kIHRoZSBzdHVi
IGZvciBhbiBvYmplY3QgaW4gdGhlIEphdmFTY3JpcHQKICAgICAgKiAgZW52aXJvbm1lbnQgaWYg
b25lIGV4aXN0cy4KICAgICAgKiAgVHlwaWNhbGx5OiBTY3JpcHRhYmxlLCBGdW5jdGlvbiwgU2Ny
aXB0LCBldGMuCiAgICAgICogIFRoaXMgaXMgbm90IHVzZWQgZm9yIENvbnRleHQgYW5kIERlYnVn
RnJhbWUuCi0gICAgICogIFRoZXkgdHlwaWNhbGx5IGNvbnRhaW5zIEpzT2JqZWN0IGFzc29jaWF0
ZWQgdG8gCisgICAgICogIFRoZXkgdHlwaWNhbGx5IGNvbnRhaW5zIEpzT2JqZWN0IGFzc29jaWF0
ZWQgdG8KICAgICAgKiAgb3JnLm1vemlsbGEuamF2YXNjcmlwdC5TY3JpcHRhYmxlT2JqZWN0CiAg
ICAgICovCiAgICAgcHJpdmF0ZSBIYXNodGFibGUgc3R1YnM7CkBAIC0xMDIsMTYgKzEwMSwxMyBA
QAogICAgIHByaXZhdGUgRm5PclNjcmlwdCBtX2NvbXBpbGluZ0ZuT3JTY3JpcHQ7CiAgICAgcHJp
dmF0ZSBKYXZhU2NyaXB0RW5naW5lIG1fZW5nOwogCi0gICAgcHJpdmF0ZSBUaHJlYWQgbV90aHJl
YWQ7Ci0KICAgICBwcml2YXRlIEhhc2h0YWJsZSBtX2RvY3VtZW50czsKIAogICAgIEJTRkRlYnVn
TWFuYWdlckltcGwgZGJnbWdyOwogCi0gICAgcHVibGljIFJoaW5vRW5naW5lRGVidWdnZXIoSmF2
YVNjcmlwdEVuZ2luZSBlbmcpIAorICAgIFJoaW5vRW5naW5lRGVidWdnZXIoSmF2YVNjcmlwdEVu
Z2luZSBlbmcpCiAgICAgICAgIHRocm93cyBSZW1vdGVFeGNlcHRpb24gewogICAgICAgICBzdXBl
cigpOwotICAgICAgICBtX3RocmVhZCA9IFRocmVhZC5jdXJyZW50VGhyZWFkKCk7CiAgICAgICAg
IG1fZW5nID0gZW5nOwogICAgICAgICBkYmdtZ3IgPSBlbmcuZ2V0RGVidWdNYW5hZ2VyKCk7CiAK
QEAgLTEyNyw0NSArMTIzLDM3IEBACiAgICAgLyoqCiAgICAgICogQ2FsbGVkIHdoZW4gb3VyIGRl
YnVnZ2VyIGhhcyBiZWVuIGRpc2Nvbm5lY3RlZC4KICAgICAgKi8KLSAgICBwdWJsaWMgdm9pZCBk
aXNjb25uZWN0ZWREZWJ1Z2dlck5vdGlmeSgpIHsKKyAgICB2b2lkIGRpc2Nvbm5lY3RlZERlYnVn
Z2VyTm90aWZ5KCkgewogICAgICAgICBtX2NhbGxiYWNrcyA9IG51bGw7CiAgICAgfQogCi0gICAg
dm9pZCBhZGRTdHViKENvbnRleHQgY3gsIFJoaW5vQ29udGV4dFByb3h5IGpzY3gpIHsKLSAgICAg
ICAgc3R1YnMucHV0KGN4LCBqc2N4KTsKLSAgICB9Ci0KLSAgICB2b2lkIGFkZFN0dWIoRGVidWdG
cmFtZSBmcmFtZSwgSnNDb250ZXh0U3R1YiBzdHViKSB7Ci0gICAgICAgIHN0dWJzLnB1dChmcmFt
ZSwgc3R1Yik7Ci0gICAgfQotCiAgICAgdm9pZCBhZGRTdHViKFNjcmlwdGFibGUgc29iaiwgSnNP
YmplY3QganNvYmopIHsKICAgICAgICAgc3R1YnMucHV0KHNvYmosIGpzb2JqKTsKICAgICB9CiAK
LSAgICB2b2lkIGRyb3BTdHViKE9iamVjdCBrZXkpIHsKKyAgICB2b2lkIGRyb3BTdHViKFNjcmlw
dGFibGUga2V5KSB7CiAgICAgICAgIHN0dWJzLnJlbW92ZShrZXkpOwogICAgIH0KIAotICAgIHB1
YmxpYyBzeW5jaHJvbml6ZWQgRG9jdW1lbnRDZWxsIGdldERvY3VtZW50Q2VsbChTdHJpbmcgbmFt
ZSkgeworICAgIHN5bmNocm9uaXplZCBEb2N1bWVudENlbGwgZ2V0RG9jdW1lbnRDZWxsKFN0cmlu
ZyBuYW1lKSB7CiAgICAgICAgIHJldHVybiAoRG9jdW1lbnRDZWxsKSBtX2RvY3VtZW50cy5nZXQo
bmFtZSk7CiAgICAgfQogCiAgICAgLy8gQ2FsbGVkIHVwb24gY3JlYXRpb24gb2YgYSBCU0ZNYW5h
Z2VyLgotICAgIHB1YmxpYyBzeW5jaHJvbml6ZWQgRG9jdW1lbnRDZWxsIGxvYWREb2N1bWVudE5v
dGlmeShTdHJpbmcgbmFtZSkgeworICAgIHN5bmNocm9uaXplZCBEb2N1bWVudENlbGwgbG9hZERv
Y3VtZW50Tm90aWZ5KFN0cmluZyBuYW1lKSB7CiAgICAgICAgIERvY3VtZW50Q2VsbCBjZWxsOwog
CiAgICAgICAgIGNlbGwgPSAoRG9jdW1lbnRDZWxsKSBtX2RvY3VtZW50cy5nZXQobmFtZSk7CiAg
ICAgICAgIGlmIChjZWxsID09IG51bGwpIHsKICAgICAgICAgICAgIGNlbGwgPSBuZXcgRG9jdW1l
bnRDZWxsKHRoaXMsIG5hbWUpOwogICAgICAgICAgICAgbV9kb2N1bWVudHMucHV0KG5hbWUsIGNl
bGwpOwotICAgICAgICAgICAgaWYgKGRiZ21nciE9bnVsbCkgCisgICAgICAgICAgICBpZiAoZGJn
bWdyIT1udWxsKQogICAgICAgICAgICAgICAgIGRiZ21nci5sb2FkRG9jdW1lbnROb3RpZnkobV9l
bmcsIG5hbWUpOwogICAgICAgICB9CiAgICAgICAgIHJldHVybiBjZWxsOwogICAgIH0KIAotICAg
IHB1YmxpYyBzeW5jaHJvbml6ZWQgdm9pZCBwbGFjZUJyZWFrcG9pbnRBdExpbmUoaW50IGJya3B0
aWQsCisgICAgc3luY2hyb25pemVkIHZvaWQgcGxhY2VCcmVha3BvaW50QXRMaW5lKGludCBicmtw
dGlkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
U3RyaW5nIGRvY25hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBpbnQgbGluZW5vKSB7CiAKQEAgLTE3NCw3ICsxNjIsNyBAQAogICAgICAgICBj
ZWxsLmFkZEJyZWFrcG9pbnRBdExpbmUoYnJrcHRpZCwgbGluZW5vKTsKICAgICB9CiAKLSAgICBw
dWJsaWMgc3luY2hyb25pemVkIHZvaWQgcGxhY2VCcmVha3BvaW50QXRPZmZzZXQoaW50IGJya3B0
aWQsCisgICAgc3luY2hyb25pemVkIHZvaWQgcGxhY2VCcmVha3BvaW50QXRPZmZzZXQoaW50IGJy
a3B0aWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFN0cmluZyBkb2NuYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBpbnQgb2Zmc2V0KSB7CiAKQEAgLTE4Myw3ICsxNzEsNyBAQAogICAg
ICAgICBjZWxsLmFkZEJyZWFrcG9pbnRBdE9mZnNldChicmtwdGlkLCBvZmZzZXQpOwogICAgIH0K
IAotICAgIHB1YmxpYyB2b2lkIHJlbW92ZUJyZWFrcG9pbnQoU3RyaW5nIGRvY25hbWUsIGludCBi
cmtwdGlkKQorICAgIHZvaWQgcmVtb3ZlQnJlYWtwb2ludChTdHJpbmcgZG9jbmFtZSwgaW50IGJy
a3B0aWQpCiAgICAgICAgIHRocm93cyBCU0ZFeGNlcHRpb24gewogCiAgICAgICAgIERvY3VtZW50
Q2VsbCBjZWxsOwpAQCAtMTkxLDcgKzE3OSw3IEBACiAgICAgICAgIGNlbGwucmVtb3ZlQnJlYWtw
b2ludChicmtwdGlkKTsKICAgICB9CiAKLSAgICBwdWJsaWMgdm9pZCBzZXRFbnRyeUV4aXQoU3Ry
aW5nIGRvY25hbWUsIGJvb2xlYW4gb24pCisgICAgdm9pZCBzZXRFbnRyeUV4aXQoU3RyaW5nIGRv
Y25hbWUsIGJvb2xlYW4gb24pCiAgICAgICAgIHRocm93cyBCU0ZFeGNlcHRpb24gewogCiAgICAg
ICAgIERvY3VtZW50Q2VsbCBjZWxsOwpAQCAtMTk5LDcgKzE4Nyw3IEBACiAgICAgICAgIGNlbGwu
c2V0RW50cnlFeGl0KG9uKTsKICAgICB9CiAKLSAgICBwdWJsaWMgT2JqZWN0IGV2YWwoU3RyaW5n
IGRvY25hbWUsIFN0cmluZyBmbk9yU2NyaXB0LCBpbnQgbGluZW5vKQorICAgIE9iamVjdCBldmFs
KFN0cmluZyBkb2NuYW1lLCBTdHJpbmcgZm5PclNjcmlwdCwgaW50IGxpbmVubykKICAgICAgICAg
dGhyb3dzIFJlbW90ZUV4Y2VwdGlvbiB7CiAgICAgICAgIE9iamVjdCByZXR2YWw7CiAgICAgICAg
IHRyeSB7CkBAIC0yMTAsMTMgKzE5OCwxNSBAQAogICAgICAgICB9CiAgICAgfQogCi0gICAgcHVi
bGljIEpzQ29udGV4dCBnZXRDb250ZXh0KGludCBkZXB0aCkgewotICAgICAgICBpZiAobV9yY3Ag
IT0gbnVsbCkgcmV0dXJuIG1fcmNwLmdldENvbnRleHQoZGVwdGgpOworICAgIEpzQ29udGV4dCBn
ZXRDb250ZXh0KGludCBkZXB0aCkgeworICAgICAgICBSaGlub0NvbnRleHRQcm94eSByY3AgPSBS
aGlub0NvbnRleHRQcm94eS5nZXRDdXJyZW50KCk7CisgICAgICAgIGlmIChyY3AgIT0gbnVsbCkg
cmV0dXJuIHJjcC5nZXRDb250ZXh0U3R1YihkZXB0aCk7CiAgICAgICAgIHJldHVybiBudWxsOwog
ICAgIH0KIAotICAgIHB1YmxpYyBpbnQgZ2V0Q29udGV4dENvdW50KCkgewotICAgICAgICBpZiAo
bV9yY3AgIT0gbnVsbCkgcmV0dXJuIG1fcmNwLmdldENvbnRleHRDb3VudCgpOworICAgIGludCBn
ZXRDb250ZXh0Q291bnQoKSB7CisgICAgICAgIFJoaW5vQ29udGV4dFByb3h5IHJjcCA9IFJoaW5v
Q29udGV4dFByb3h5LmdldEN1cnJlbnQoKTsKKyAgICAgICAgaWYgKHJjcCAhPSBudWxsKSByZXR1
cm4gcmNwLmdldENvbnRleHRDb3VudCgpOwogICAgICAgICByZXR1cm4gLTE7CiAgICAgfQogCkBA
IC0yMjQsMjQgKzIxNCwyMCBAQAogICAgICAqIFJldHVybiB0aGUgY3VycmVudCBkZWJ1Z2dlci4K
ICAgICAgKiBAcmV0dXJuIHRoZSBkZWJ1Z2dlciwgb3IgbnVsbCBpZiBub25lIGlzIGF0dGFjaGVk
LgogICAgICAqLwotICAgIHB1YmxpYyBKc0NhbGxiYWNrcyBnZXREZWJ1Z2dlcigpIHsKKyAgICBK
c0NhbGxiYWNrcyBnZXREZWJ1Z2dlcigpIHsKICAgICAgICAgcmV0dXJuIG1fY2FsbGJhY2tzOwog
ICAgIH0KIAotICAgIHB1YmxpYyBPYmplY3QgZ2V0RGVidWdJbnRlcmZhY2UoKSB7CisgICAgT2Jq
ZWN0IGdldERlYnVnSW50ZXJmYWNlKCkgewogICAgICAgICByZXR1cm4gZW5naW5lU3R1YjsKICAg
ICB9CiAKLSAgICBwdWJsaWMgSnNPYmplY3QgZ2V0R2xvYmFsT2JqZWN0KCkgeworICAgIEpzT2Jq
ZWN0IGdldEdsb2JhbE9iamVjdCgpIHsKICAgICAgICAgcmV0dXJuIGdsb2JhbHN0dWI7CiAgICAg
fQogCi0gICAgcHVibGljIFJoaW5vQ29udGV4dFByb3h5IGdldFJoaW5vQ29udGV4dFByb3h5KCkg
ewotICAgICAgICByZXR1cm4gbV9yY3A7Ci0gICAgfQotCiAgICAgUmhpbm9Db250ZXh0UHJveHkg
Z2V0U3R1YihDb250ZXh0IGN4KSB7Ci0gICAgICAgIHJldHVybiAoUmhpbm9Db250ZXh0UHJveHkp
IHN0dWJzLmdldChjeCk7CisgICAgICAgIHJldHVybiAoUmhpbm9Db250ZXh0UHJveHkpY3guZ2V0
RGVidWdnZXJDb250ZXh0RGF0YSgpOwogICAgIH0KIAogICAgIEpzQ29udGV4dFN0dWIgZ2V0U3R1
YihEZWJ1Z0ZyYW1lIGZyYW1lKSB7CkBAIC0yNTIsMTkgKzIzOCwyMCBAQAogICAgICAgICByZXR1
cm4gKEpzT2JqZWN0KSBzdHVicy5nZXQoc29iaik7CiAgICAgfQogCi0gICAgcHVibGljIEpzT2Jq
ZWN0IGdldFVuZGVmaW5lZFZhbHVlKCkgeworICAgIEpzT2JqZWN0IGdldFVuZGVmaW5lZFZhbHVl
KCkgewogICAgICAgICByZXR1cm4gdW5kZWZpbmVkU3R1YjsKICAgICB9CiAKLSAgICBwdWJsaWMg
U3RyaW5nIGdldFRocmVhZCgpIHsKKyAgICBTdHJpbmcgZ2V0VGhyZWFkKCkgeworICAgICAgICBD
b250ZXh0IGN4ID0gQ29udGV4dC5nZXRDdXJyZW50Q29udGV4dCgpOwogICAgICAgICBTdHJpbmcg
cmVzdWx0c3RyID0gIiI7CiAKLSAgICAgICAgaWYgKG1fdGhyZWFkICE9IG51bGwpIHsKKyAgICAg
ICAgaWYgKGN4ICE9IG51bGwpIHsKICAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICAg
ZmluYWwgU3RyaW5nIHJlc3VsdHN0cmYgPSAoU3RyaW5nKQogICAgICAgICAgICAgICAgIEFjY2Vz
c0NvbnRyb2xsZXIuZG9Qcml2aWxlZ2VkKG5ldyBQcml2aWxlZ2VkRXhjZXB0aW9uQWN0aW9uKCkg
ewogICAgICAgICAgICAgICAgICAgICAgICAgcHVibGljIE9iamVjdCBydW4oKSB0aHJvd3MgRXhj
ZXB0aW9uIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbV90aHJlYWQuZ2V0
TmFtZSgpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBUaHJlYWQuY3VycmVu
dFRocmVhZCgpLmdldE5hbWUoKTsKICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICByZXN1bHRzdHIgPSByZXN1bHRzdHJmOwpAQCAt
Mjc3LDE1ICsyNjQsMTcgQEAKICAgICAgICAgcmV0dXJuIHJlc3VsdHN0cjsKICAgICB9CiAKLSAg
ICBwdWJsaWMgU3RyaW5nIGdldFRocmVhZEdyb3VwKCkgeworICAgIFN0cmluZyBnZXRUaHJlYWRH
cm91cCgpIHsKKyAgICAgICAgQ29udGV4dCBjeCA9IENvbnRleHQuZ2V0Q3VycmVudENvbnRleHQo
KTsKICAgICAgICAgU3RyaW5nIHJlc3VsdHN0ciA9ICIiOwogCi0gICAgICAgIGlmIChtX3RocmVh
ZCAhPSBudWxsKSB7CisgICAgICAgIGlmIChjeCAhPSBudWxsKSB7CiAgICAgICAgICAgICB0cnkg
ewogICAgICAgICAgICAgICAgIGZpbmFsIFN0cmluZyByZXN1bHRzdHJmID0gKFN0cmluZykKICAg
ICAgICAgICAgICAgICBBY2Nlc3NDb250cm9sbGVyLmRvUHJpdmlsZWdlZChuZXcgUHJpdmlsZWdl
ZEV4Y2VwdGlvbkFjdGlvbigpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIHB1YmxpYyBPYmpl
Y3QgcnVuKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIG1fdGhyZWFkLmdldFRocmVhZEdyb3VwKCkuZ2V0TmFtZSgpOworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHJldHVybiBUaHJlYWQuY3VycmVudFRocmVhZCgpLmdldFRocmVhZEdy
b3VwKCkuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0TmFtZSgp
OwogICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICB9KTsKICAg
ICAgICAgICAgIHJlc3VsdHN0ciA9IHJlc3VsdHN0cmY7CkBAIC0zMDUsNyArMjk0LDcgQEAKICAg
ICAvLyB0byBpbXBsZW1lbnQgU1RFUF9JTiwgU1RFUF9PVVQsIGFuZCBTVEVQX09WRVIuCiAgICAg
Ly8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0KIAotICAgIHB1YmxpYyB2b2lkIGhhbmRsZUJyZWFrcG9pbnRIaXQoQ29udGV4dCBjeCkgewor
ICAgIHZvaWQgaGFuZGxlQnJlYWtwb2ludEhpdChDb250ZXh0IGN4LCBSaGlub0NvbnRleHRQcm94
eSByY3ApIHsKICAgICAgICAgSnNDYWxsYmFja3MgZGVidWdnZXI7CiAgICAgICAgIEJyZWFrUG9p
bnQgYnA7CiAgICAgICAgIEVudW1lcmF0aW9uIGU7CkBAIC0zMTMsNDggKzMwMiw0MSBAQAogICAg
ICAgICBib29sZWFuIGJyZWFrcG9pbnRGb3VuZD1mYWxzZTsKICAgICAgICAgU3RyaW5nIG5hbWU7
CiAgICAgICAgIGludCBsaW5lbm87Ci0gICAgICAgIGJvb2xlYW4gc3VzcGVuZD1mYWxzZTsKLQkJ
Ci0gICAgICAgIG1fdGhyZWFkID0gVGhyZWFkLmN1cnJlbnRUaHJlYWQoKTsKLSAgICAgICAgRGVi
dWdMb2cuc3Rkb3V0UHJpbnRsbigiKioqKiBIYW5kbGluZyBhIGJyZWFrcG9pbnQgaGl0Li4uIiwg
CisKKyAgICAgICAgRGVidWdMb2cuc3Rkb3V0UHJpbnRsbigiKioqKiBIYW5kbGluZyBhIGJyZWFr
cG9pbnQgaGl0Li4uIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEZWJ1Z0xvZy5C
U0ZfTE9HX0wzKTsKLSAgICAgICAgbV9yY3AgPSBnZXRTdHViKGN4KTsKLSAgICAgICAgaWYgKG1f
cmNwID09IG51bGwpIHsKLSAgICAgICAgICAgIG1fcmNwID0gbmV3IFJoaW5vQ29udGV4dFByb3h5
KHRoaXMsIGN4KTsKLSAgICAgICAgICAgIGFkZFN0dWIoY3gsIG1fcmNwKTsKLSAgICAgICAgfQot
ICAgICAgICAvLyBpZiB3ZSBoYXZlIG5vIGNhbGxiYWNrcy4uLiB0aGVuIGp1c3QgCisgICAgICAg
IC8vIGlmIHdlIGhhdmUgbm8gY2FsbGJhY2tzLi4uIHRoZW4ganVzdAogICAgICAgICAvLyBpZ25v
cmUgdGhlIGJyZWFrcG9pbnQgaGl0LCBkbyBhIHJ1bgogICAgICAgICAvLyBzbyB0aGF0IGV4ZWN1
dGlvbiByZXN1bWVzLi4uCiAgICAgICAgIGlmIChtX2NhbGxiYWNrcz09bnVsbCkgewotICAgICAg
ICAgICAgRGVidWdMb2cuc3Rkb3V0UHJpbnRsbigiCU5vIGNhbGxiYWNrcywgcmVzdW1pbmcuLi4i
LCBEZWJ1Z0xvZy5CU0ZfTE9HX0wzKTsKLSAgICAgICAgICAgIG1fcmNwLnJ1bigpOworICAgICAg
ICAgICAgRGVidWdMb2cuc3Rkb3V0UHJpbnRsbigiICAgIE5vIGNhbGxiYWNrcywgcmVzdW1pbmcu
Li4iLCBEZWJ1Z0xvZy5CU0ZfTE9HX0wzKTsKKyAgICAgICAgICAgIHJjcC5ydW4oKTsKIAogICAg
ICAgICB9IGVsc2UgewogICAgICAgICAgICAgLy8gRmlyc3QsIGNoZWNrIHRoYXQgd2UgZGlkbid0
IGhpdCBhIGtub3duIGJyZWFrcG9pbnQuCiAgICAgICAgICAgICAvLyBGaXJzdCwgc2VhcmNoIGlm
IHdlIGhhdmUgYnJlYWtwb2ludHMgZm9yIHRoZSBjdXJyZW50IGRvY3VtZW50cwogCi0gICAgICAg
ICAgICBuYW1lID0gbV9yY3AuZ2V0U291cmNlTmFtZSgpOwotICAgICAgICAgICAgbGluZW5vID0g
bV9yY3AuZ2V0TGluZU51bWJlcigpOworICAgICAgICAgICAgbmFtZSA9IHJjcC5nZXRTb3VyY2VO
YW1lKCk7CisgICAgICAgICAgICBsaW5lbm8gPSByY3AuZ2V0TGluZU51bWJlcigpOwogCi0gICAg
ICAgICAgICBEZWJ1Z0xvZy5zdGRvdXRQcmludGxuKCIJaW4gIituYW1lKyIgYXQgIitsaW5lbm8s
IERlYnVnTG9nLkJTRl9MT0dfTDMpOworICAgICAgICAgICAgRGVidWdMb2cuc3Rkb3V0UHJpbnRs
bigiICAgIGluICIrbmFtZSsiIGF0ICIrbGluZW5vLCBEZWJ1Z0xvZy5CU0ZfTE9HX0wzKTsKIAog
ICAgICAgICAgICAgY2VsbCA9IGdldERvY3VtZW50Q2VsbChuYW1lKTsKLSAgICAgICAgICAgIGlm
IChjZWxsICE9IG51bGwpIAotICAgICAgICAgICAgICAgIF9oYW5kbGVCcmVha3BvaW50SGl0KGNl
bGwsbGluZW5vKTsKLSAgICAgICAgfSAKLSAgICAgICAgbV9yY3AgPSBudWxsOworICAgICAgICAg
ICAgaWYgKGNlbGwgIT0gbnVsbCkKKyAgICAgICAgICAgICAgICBfaGFuZGxlQnJlYWtwb2ludEhp
dChyY3AsY2VsbCxsaW5lbm8pOworICAgICAgICB9CiAgICAgfQogCi0gICAgcHVibGljIHZvaWQg
X2hhbmRsZUJyZWFrcG9pbnRIaXQoRG9jdW1lbnRDZWxsIGNlbGwsIGludCBsaW5lbm8pIHsKLQor
ICAgIHZvaWQgX2hhbmRsZUJyZWFrcG9pbnRIaXQoUmhpbm9Db250ZXh0UHJveHkgcmNwLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgRG9jdW1lbnRDZWxsIGNlbGwsIGludCBsaW5lbm8p
CisgICAgewogICAgICAgICBKc0NhbGxiYWNrcyBkZWJ1Z2dlcjsKICAgICAgICAgQnJlYWtQb2lu
dCBicDsKICAgICAgICAgRW51bWVyYXRpb24gZTsKICAgICAgICAgSnNDb250ZXh0IHN0dWI9bnVs
bDsKICAgICAgICAgYm9vbGVhbiBicmVha3BvaW50Rm91bmQ9ZmFsc2U7CiAgICAgICAgIGJvb2xl
YW4gc3VzcGVuZD1mYWxzZTsKLQkJCisKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIGJwID0g
Y2VsbC5maW5kQnJlYWtwb2ludEF0TGluZShsaW5lbm8pOwogICAgICAgICB9IGNhdGNoIChCU0ZF
eGNlcHRpb24gYnNmZXgpIHsKQEAgLTM2MywxOSArMzQ1LDE5IEBACiAgICAgICAgIGlmIChicCAh
PSBudWxsKSB7CiAgICAgICAgICAgICBicmVha3BvaW50Rm91bmQgPSB0cnVlOwogICAgICAgICAg
ICAgdHJ5IHsKLSAgICAgICAgICAgICAgICBzdHViID0gbV9yY3AuaGl0QnJlYWtwb2ludCgpOwot
ICAgICAgICAgICAgICAgIERlYnVnTG9nLnN0ZG91dFByaW50bG4oIglicmVha3BvaW50IGNhbGxi
YWNrLi4uIiwgRGVidWdMb2cuQlNGX0xPR19MMyk7Ci0gICAgICAgICAgICAgCW1fY2FsbGJhY2tz
LmNyZWF0ZUZ1dHVyZShtX3JjcCk7CisgICAgICAgICAgICAgICAgc3R1YiA9IHJjcC5oaXRCcmVh
a3BvaW50KCk7CisgICAgICAgICAgICAgICAgRGVidWdMb2cuc3Rkb3V0UHJpbnRsbigiICAgIGJy
ZWFrcG9pbnQgY2FsbGJhY2suLi4iLCBEZWJ1Z0xvZy5CU0ZfTE9HX0wzKTsKKyAgICAgICAgICAg
ICAgICAgbV9jYWxsYmFja3MuY3JlYXRlRnV0dXJlKHJjcCk7CiAgICAgICAgICAgICAgICAgbV9j
YWxsYmFja3MuaGFuZGxlQnJlYWtwb2ludEhpdChzdHViKTsKICAgICAgICAgICAgICAgICBzdXNw
ZW5kID0gdHJ1ZTsKICAgICAgICAgICAgIH0gY2F0Y2ggKFJlbW90ZUV4Y2VwdGlvbiByZXgpIHsK
LSAgICAgICAgICAgICAgICBEZWJ1Z0xvZy5zdGRlcnJQcmludGxuKCIJRVhDRVBUSU9OIE9DQ1VS
RUQgRFVSSU5HIEJSRUFLUE9JTlQgQ0FMTEJBQ0siLCBEZWJ1Z0xvZy5CU0ZfTE9HX0wwKTsJCQkJ
CisgICAgICAgICAgICAgICAgRGVidWdMb2cuc3RkZXJyUHJpbnRsbigiICAgIEVYQ0VQVElPTiBP
Q0NVUkVEIERVUklORyBCUkVBS1BPSU5UIENBTExCQUNLIiwgRGVidWdMb2cuQlNGX0xPR19MMCk7
CiAgICAgICAgICAgICAgICAgRGVidWdMb2cuc3RkZXJyUHJpbnRsbihyZXguZ2V0TWVzc2FnZSgp
LCBEZWJ1Z0xvZy5CU0ZfTE9HX0wwKTsKICAgICAgICAgICAgICAgICByZXgucHJpbnRTdGFja1Ry
YWNlKCk7CiAgICAgICAgICAgICAgICAgc3VzcGVuZCA9IGZhbHNlOwogICAgICAgICAgICAgfQog
ICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgRGVidWdMb2cuc3Rkb3V0UHJpbnRsbigiCWRp
ZG4ndCBmaW5kIGEgYnJlYWtwb2ludC4uLiIsIERlYnVnTG9nLkJTRl9MT0dfTDMpOworICAgICAg
ICAgICAgRGVidWdMb2cuc3Rkb3V0UHJpbnRsbigiICAgIGRpZG4ndCBmaW5kIGEgYnJlYWtwb2lu
dC4uLiIsIERlYnVnTG9nLkJTRl9MT0dfTDMpOwogICAgICAgICAgICAgYnJlYWtwb2ludEZvdW5k
ID0gZmFsc2U7CiAgICAgICAgIH0KIApAQCAtMzg0LDg3ICszNjYsMTA3IEBACiAgICAgICAgICAg
ICAvLyBsaW5lIGluIHRoZSBjdXJyZW50IGRvY3VtZW50LCB3ZSBtdXN0IGJlIHN0ZXBwaW5nCiAg
ICAgICAgICAgICAvLyBvciBpbiBlbnRyeS9leGl0IG1vZGUKICAgICAgICAgICAgIHRyeSB7Ci0g
ICAgICAgICAgICAgICAgc3R1YiA9IG1fcmNwLnN0ZXBwaW5nKCk7CisgICAgICAgICAgICAgICAg
c3R1YiA9IHJjcC5zdGVwcGluZygpOwogICAgICAgICAgICAgICAgIEZuT3JTY3JpcHQgY3VycmVu
dCA9IGNlbGwuZmluZEZuT3JTY3JpcHRDb250YWluaW5nKGxpbmVubyk7CiAgICAgICAgICAgICAg
ICAgaWYgKHN0dWIgIT0gbnVsbCkgewogICAgICAgICAgICAgICAgICAgICBjZWxsLnNldExhc3RG
bk9yU2NyaXB0KGN1cnJlbnQpOwotICAgICAgICAgICAgICAgICAgICBEZWJ1Z0xvZy5zdGRvdXRQ
cmludGxuKCIJc3RlcHBpbmctZG9uZSBjYWxsYmFjay4uLiIsIAorICAgICAgICAgICAgICAgICAg
ICBEZWJ1Z0xvZy5zdGRvdXRQcmludGxuKCIgICAgc3RlcHBpbmctZG9uZSBjYWxsYmFjay4uLiIs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRGVidWdMb2cuQlNG
X0xPR19MMyk7Ci0gICAgICAgICAgICAgICAgCW1fY2FsbGJhY2tzLmNyZWF0ZUZ1dHVyZShtX3Jj
cCk7CisgICAgICAgICAgICAgICAgICAgIG1fY2FsbGJhY2tzLmNyZWF0ZUZ1dHVyZShyY3ApOwog
ICAgICAgICAgICAgICAgICAgICBtX2NhbGxiYWNrcy5oYW5kbGVTdGVwcGluZ0RvbmUoc3R1Yik7
CiAgICAgICAgICAgICAgICAgICAgIHN1c3BlbmQgPSB0cnVlOwotICAgICAgICAgICAgICAgIH0g
CisgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIGVsc2UgaWYgKGNlbGwuZ2V0RW50
cnlFeGl0KCkgJiYKICAgICAgICAgICAgICAgICAgICAgICAgICAoY3VycmVudCAhPSBjZWxsLmdl
dExhc3RGbk9yU2NyaXB0KCkpICYmCi0gICAgICAgICAgICAgICAgICAgICAgICAgKG1fcmNwLmdl
dENvbnRleHRDb3VudCgpID09IDApKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgKHJjcC5n
ZXRDb250ZXh0Q291bnQoKSA9PSAwKSkgewogICAgICAgICAgICAgICAgICAgICBjZWxsLnNldExh
c3RGbk9yU2NyaXB0KGN1cnJlbnQpOwotICAgICAgICAgICAgICAgICAgICBzdHViID0gbV9yY3Au
ZW50cnlfZXhpdF9tb2RlKCk7Ci0gICAgICAgICAgICAgICAgICAgIERlYnVnTG9nLnN0ZG91dFBy
aW50bG4oIiAgICBlbnRyeS9leGl0IG1vZGUuLi4iLCAKKyAgICAgICAgICAgICAgICAgICAgc3R1
YiA9IHJjcC5lbnRyeV9leGl0X21vZGUoKTsKKyAgICAgICAgICAgICAgICAgICAgRGVidWdMb2cu
c3Rkb3V0UHJpbnRsbigiICAgIGVudHJ5L2V4aXQgbW9kZS4uLiIsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgRGVidWdMb2cuQlNGX0xPR19MMyk7Ci0gICAgICAg
ICAgICAgICAgCW1fY2FsbGJhY2tzLmNyZWF0ZUZ1dHVyZShtX3JjcCk7CisgICAgICAgICAgICAg
ICAgICAgIG1fY2FsbGJhY2tzLmNyZWF0ZUZ1dHVyZShyY3ApOwogICAgICAgICAgICAgICAgICAg
ICBtX2NhbGxiYWNrcy5oYW5kbGVTdGVwcGluZ0RvbmUoc3R1Yik7CiAgICAgICAgICAgICAgICAg
ICAgIHN1c3BlbmQgPSB0cnVlOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBl
bHNlIHsKLSAgICAgICAgICAgICAgICAgICAgRGVidWdMb2cuc3Rkb3V0UHJpbnRsbigiCU5vIHJl
YXNvbiB0byBzdXNwZW5kIGV4ZWN1dGlvbi4iLCBEZWJ1Z0xvZy5CU0ZfTE9HX0wzKTsJCQkJCisg
ICAgICAgICAgICAgICAgICAgIERlYnVnTG9nLnN0ZG91dFByaW50bG4oIiAgICBObyByZWFzb24g
dG8gc3VzcGVuZCBleGVjdXRpb24uIiwgRGVidWdMb2cuQlNGX0xPR19MMyk7CiAgICAgICAgICAg
ICAgICAgICAgIHN1c3BlbmQgPSBmYWxzZTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAg
ICB9IGNhdGNoIChSZW1vdGVFeGNlcHRpb24gcmV4KSB7Ci0gICAgICAgICAgICAgICAgRGVidWdM
b2cuc3RkZXJyUHJpbnRsbigiCUVYQ0VQVElPTiBPQ0NVUkVEIERVUklORyBTVEVQUElORy1ET05F
IENBTExCQUNLIiwgRGVidWdMb2cuQlNGX0xPR19MMCk7CQkJCQorICAgICAgICAgICAgICAgIERl
YnVnTG9nLnN0ZGVyclByaW50bG4oIiAgICBFWENFUFRJT04gT0NDVVJFRCBEVVJJTkcgU1RFUFBJ
TkctRE9ORSBDQUxMQkFDSyIsIERlYnVnTG9nLkJTRl9MT0dfTDApOwogICAgICAgICAgICAgICAg
IERlYnVnTG9nLnN0ZGVyclByaW50bG4ocmV4LmdldE1lc3NhZ2UoKSwgRGVidWdMb2cuQlNGX0xP
R19MMCk7CiAgICAgICAgICAgICAgICAgcmV4LnByaW50U3RhY2tUcmFjZSgpOwogICAgICAgICAg
ICAgICAgIHN1c3BlbmQgPSBmYWxzZTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAg
ICBpZiAoc3VzcGVuZCkgewotICAgICAgICAgICAgLy8gbm93LCBzdXNwZW5kIHRoaXMgdGhyZWFk
Li4uIHVudGlsIAorICAgICAgICAgICAgLy8gbm93LCBzdXNwZW5kIHRoaXMgdGhyZWFkLi4uIHVu
dGlsCiAgICAgICAgICAgICAvLyB3ZSByZXN0YXJ0LgogICAgICAgICAgICAgdHJ5IHsKLSAgICAg
ICAgICAgICAgICBtX2NhbGxiYWNrcy5zdXNwZW5kRnV0dXJlKG1fcmNwKTsKKyAgICAgICAgICAg
ICAgICBtX2NhbGxiYWNrcy5zdXNwZW5kRnV0dXJlKHJjcCk7CiAgICAgICAgICAgICB9IGNhdGNo
IChFeGNlcHRpb24gZXgpIHsKICAgICAgICAgICAgICAgICBEZWJ1Z0xvZy5zdGRvdXRQcmludGxu
KCJGdXR1cmUgY3JlYXRpb24gZmFpbGVkLi4uIHJlbGVhc2luZyB0aGUgZW5naW5lIiwgRGVidWdM
b2cuQlNGX0xPR19MMyk7Ci0gICAgICAgICAgICAgICAgbV9yY3AucnVuKCk7CisgICAgICAgICAg
ICAgICAgcmNwLnJ1bigpOwogICAgICAgICAgICAgfQotICAgICAgICB9CQkJCisgICAgICAgIH0K
ICAgICB9CiAKLSAgICBwdWJsaWMgdm9pZCBydW4oSnNFbmdpbmVTdHViIGVuZykgdGhyb3dzIEV4
Y2VwdGlvbiB7CisgICAgdm9pZCBydW4oSnNFbmdpbmVTdHViIGVuZykgdGhyb3dzIEV4Y2VwdGlv
biB7CiAgICAgICAgIERlYnVnTG9nLnN0ZG91dFByaW50bG4oIlJoaW5vRW5naW5lRGVidWdnZXI6
OnJ1bigpLi4uIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEZWJ1Z0xvZy5CU0Zf
TE9HX0wzKTsKLSAgICAgICAgbV9yY3AucnVuKCk7IAotICAgICAgICBtX2NhbGxiYWNrcy5jb21w
bGV0ZUZ1dHVyZShtX3JjcCk7CisgICAgICAgIFJoaW5vQ29udGV4dFByb3h5IHJjcCA9IFJoaW5v
Q29udGV4dFByb3h5LmdldEN1cnJlbnQoKTsKKyAgICAgICAgcmNwLnJ1bigpOworICAgICAgICBt
X2NhbGxiYWNrcy5jb21wbGV0ZUZ1dHVyZShyY3ApOwogICAgIH0KIAotICAgIHB1YmxpYyB2b2lk
IHN0ZXBJbihKc0VuZ2luZVN0dWIgZW5nKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICB2b2lkIHN0
ZXBJbihKc0VuZ2luZVN0dWIgZW5nKSB0aHJvd3MgRXhjZXB0aW9uIHsKICAgICAgICAgRGVidWdM
b2cuc3Rkb3V0UHJpbnRsbigiUmhpbm9FbmdpbmVEZWJ1Z2dlcjo6c3RlcEluKCkuLi4iLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIERlYnVnTG9nLkJTRl9MT0dfTDMpOwotICAgICAg
ICBtX3JjcC5zdGVwSW4oKTsKLSAgICAgICAgbV9jYWxsYmFja3MuY29tcGxldGVGdXR1cmUobV9y
Y3ApOworICAgICAgICBSaGlub0NvbnRleHRQcm94eSByY3AgPSBSaGlub0NvbnRleHRQcm94eS5n
ZXRDdXJyZW50KCk7CisgICAgICAgIHJjcC5zdGVwSW4oKTsKKyAgICAgICAgbV9jYWxsYmFja3Mu
Y29tcGxldGVGdXR1cmUocmNwKTsKICAgICB9CiAKLSAgICBwdWJsaWMgdm9pZCBzdGVwT3V0KEpz
RW5naW5lU3R1YiBlbmcpIHRocm93cyBFeGNlcHRpb24geworICAgIHZvaWQgc3RlcE91dChKc0Vu
Z2luZVN0dWIgZW5nKSB0aHJvd3MgRXhjZXB0aW9uIHsKICAgICAgICAgRGVidWdMb2cuc3Rkb3V0
UHJpbnRsbigiUmhpbm9FbmdpbmVEZWJ1Z2dlcjo6c3RlcE91dCgpLi4uIiwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBEZWJ1Z0xvZy5CU0ZfTE9HX0wzKTsKLSAgICAgICAgbV9yY3Au
c3RlcE91dCgpOwotICAgICAgICBtX2NhbGxiYWNrcy5jb21wbGV0ZUZ1dHVyZShtX3JjcCk7Cisg
ICAgICAgIFJoaW5vQ29udGV4dFByb3h5IHJjcCA9IFJoaW5vQ29udGV4dFByb3h5LmdldEN1cnJl
bnQoKTsKKyAgICAgICAgcmNwLnN0ZXBPdXQoKTsKKyAgICAgICAgbV9jYWxsYmFja3MuY29tcGxl
dGVGdXR1cmUocmNwKTsKICAgICB9Ci0gICAgcHVibGljIHZvaWQgc3RlcE92ZXIoSnNFbmdpbmVT
dHViIGVuZykgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgdm9pZCBzdGVwT3ZlcihKc0VuZ2luZVN0
dWIgZW5nKSB0aHJvd3MgRXhjZXB0aW9uIHsKIAogICAgICAgICBEZWJ1Z0xvZy5zdGRvdXRQcmlu
dGxuKCJSaGlub0VuZ2luZURlYnVnZ2VyOjpzdGVwT3ZlcigpLi4uIiwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBEZWJ1Z0xvZy5CU0ZfTE9HX0wzKTsKLSAgICAgICAgbV9yY3Auc3Rl
cE92ZXIoKTsKLSAgICAgICAgbV9jYWxsYmFja3MuY29tcGxldGVGdXR1cmUobV9yY3ApOworICAg
ICAgICBSaGlub0NvbnRleHRQcm94eSByY3AgPSBSaGlub0NvbnRleHRQcm94eS5nZXRDdXJyZW50
KCk7CisgICAgICAgIHJjcC5zdGVwT3ZlcigpOworICAgICAgICBtX2NhbGxiYWNrcy5jb21wbGV0
ZUZ1dHVyZShyY3ApOwogICAgIH0KLQkKKwogICAgIHB1YmxpYyB2b2lkIGhhbmRsZUNvbXBpbGF0
aW9uRG9uZShDb250ZXh0IGN4LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBEZWJ1Z2dhYmxlU2NyaXB0IGZuT3JTY3JpcHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFN0cmluZ0J1ZmZlciBzb3VyY2UpIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgU3RyaW5nIHNvdXJjZSkgewogCi0gICAgICAgIG1fdGhyZWFkID0g
VGhyZWFkLmN1cnJlbnRUaHJlYWQoKTsKICAgICAgICAgbV9jb21waWxpbmdGbk9yU2NyaXB0LmFk
ZENvbXBpbGF0aW9uVW5pdChjeCwgZm5PclNjcmlwdCwgc291cmNlKTsKICAgICB9CiAKLSAgICBw
dWJsaWMgdm9pZCBoYW5kbGVFeGNlcHRpb25UaHJvd24oQ29udGV4dCBjeCwgT2JqZWN0IGV4Y2Vw
dGlvblRocm93bikgeworICAgIHB1YmxpYyBEZWJ1Z0ZyYW1lIGdldEZyYW1lKENvbnRleHQgY3gs
IERlYnVnZ2FibGVTY3JpcHQgZm5PclNjcmlwdCkgeworICAgICAgICBDb21waWxhdGlvblVuaXQg
dW5pdDsKKyAgICAgICAgdW5pdCA9IG1fY29tcGlsaW5nRm5PclNjcmlwdC5nZXRDb21waWxhdGlv
blVuaXQoZm5PclNjcmlwdCk7CisgICAgICAgIFJoaW5vQ29udGV4dFByb3h5IHJjcCA9IGdldFN0
dWIoY3gpOworICAgICAgICB0cnkgeworICAgICAgICAgICAgSnNDb250ZXh0U3R1YiBzdHViID0g
bmV3IEpzQ29udGV4dFN0dWIocmNwLCB1bml0KTsKKyAgICAgICAgICAgIHJldHVybiBzdHViLmdl
dFJoaW5vRGVidWdGcmFtZSgpOworICAgICAgICB9IGNhdGNoIChSZW1vdGVFeGNlcHRpb24gcmV4
KSB7CisgICAgICAgICAgICBEZWJ1Z0xvZy5zdGRlcnJQcmludGxuKCIgICAgRVhDRVBUSU9OIE9D
Q1VSRUQgRFVSSU5HIEZSQU1FIElOSVRJQUxJWkFUSU9OIiwgRGVidWdMb2cuQlNGX0xPR19MMCk7
CisgICAgICAgICAgICBEZWJ1Z0xvZy5zdGRlcnJQcmludGxuKHJleC5nZXRNZXNzYWdlKCksIERl
YnVnTG9nLkJTRl9MT0dfTDApOworICAgICAgICAgICAgcmV4LnByaW50U3RhY2tUcmFjZSgpOwor
ICAgICAgICAgICAgcmV0dXJuIG51bGw7CisgICAgICAgIH0KKyAgICB9CisKKyAgICB2b2lkIGhh
bmRsZUV4Y2VwdGlvblRocm93bihDb250ZXh0IGN4LCBSaGlub0NvbnRleHRQcm94eSByY3AsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhyb3dhYmxlIGV4Y2VwdGlvblRocm93bikK
KyAgICB7CiAgICAgICAgIEpzQ29udGV4dCBzdHViOwogICAgICAgICBKc0NhbGxiYWNrcyBkZWJ1
Z2dlcjsKICAgICAgICAgQnJlYWtQb2ludCBicDsKQEAgLTQ3Myw1MyArNDc1LDQwIEBACiAgICAg
ICAgIFN0cmluZyBuYW1lLG1zZzsKICAgICAgICAgRXhjZXB0aW9uIGV4OwogICAgICAgICBpbnQg
bGluZW5vOwotICAgICAgICBOYXRpdmVFcnJvciBlcnJvcjsKLQkJCi0gICAgICAgIG1fdGhyZWFk
ID0gVGhyZWFkLmN1cnJlbnRUaHJlYWQoKTsKLSAgICAgICAgbV9yY3AgPSBnZXRTdHViKGN4KTsK
LSAgICAgICAgaWYgKG1fcmNwID09IG51bGwpIHsKLSAgICAgICAgICAgIG1fcmNwID0gbmV3IFJo
aW5vQ29udGV4dFByb3h5KHRoaXMsIGN4KTsKLSAgICAgICAgICAgIGFkZFN0dWIoY3gsIG1fcmNw
KTsKKworICAgICAgICAvLyBpZiB3ZSBoYXZlIG5vIGNhbGxiYWNrcy4uLiB0aGVuIGp1c3QKKyAg
ICAgICAgLy8gaWdub3JlIHRoZSBicmVha3BvaW50IGhpdCwgZG8gYSBydW4KKyAgICAgICAgLy8g
c28gdGhhdCBleGVjdXRpb24gcmVzdW1lcy4uLgorICAgICAgICBpZiAobV9jYWxsYmFja3M9PW51
bGwpIHsKKyAgICAgICAgICAgIHJjcC5ydW4oKTsKKyAgICAgICAgICAgIHJldHVybjsKICAgICAg
ICAgfQotICAgICAgICB0cnkgewotICAgICAgICAgICAgLy8gaWYgd2UgaGF2ZSBubyBjYWxsYmFj
a3MuLi4gdGhlbiBqdXN0IAotICAgICAgICAgICAgLy8gaWdub3JlIHRoZSBicmVha3BvaW50IGhp
dCwgZG8gYSBydW4KLSAgICAgICAgICAgIC8vIHNvIHRoYXQgZXhlY3V0aW9uIHJlc3VtZXMuLi4K
LSAgICAgICAgICAgIGlmIChtX2NhbGxiYWNrcz09bnVsbCkgewotICAgICAgICAgICAgICAgIG1f
cmNwLnJ1bigpOwotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIH0KIAotICAg
ICAgICAgICAgLy8gRmlyc3QsIGNoZWNrIHRoYXQgd2UgZGlkbid0IGhpdCBhIGtub3duIGJyZWFr
cG9pbnQuCi0gICAgICAgICAgICAvLyBGaXJzdCwgc2VhcmNoIGlmIHdlIGhhdmUgYnJlYWtwb2lu
dHMgZm9yIHRoZSBjdXJyZW50IGRvY3VtZW50cwotICAgICAgICAgICAgbmFtZSA9IG1fcmNwLmdl
dFNvdXJjZU5hbWUoKTsKLSAgICAgICAgICAgIGxpbmVubyA9IG1fcmNwLmdldExpbmVOdW1iZXIo
KTsKLSAgICAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgICAgICAgZXJyb3IgPSAoTmF0aXZlRXJy
b3IpZXhjZXB0aW9uVGhyb3duOwotICAgICAgICAgICAgICAgIG1zZyA9IGVycm9yLmdldE5hbWUo
KSArICI6ICIgKyBlcnJvci5nZXRNZXNzYWdlKCk7Ci0gICAgICAgICAgICB9IGNhdGNoIChDbGFz
c0Nhc3RFeGNlcHRpb24gY2NleCkgewotICAgICAgICAgICAgICAgIG1zZyA9ICJVbmtub3duIEph
dmFTY3JpcHQgRXhjZXB0aW9uIjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGV4ID0gbmV3
IEV4Y2VwdGlvbihtc2cpOworICAgICAgICAvLyBGaXJzdCwgY2hlY2sgdGhhdCB3ZSBkaWRuJ3Qg
aGl0IGEga25vd24gYnJlYWtwb2ludC4KKyAgICAgICAgLy8gRmlyc3QsIHNlYXJjaCBpZiB3ZSBo
YXZlIGJyZWFrcG9pbnRzIGZvciB0aGUgY3VycmVudCBkb2N1bWVudHMKKyAgICAgICAgbmFtZSA9
IHJjcC5nZXRTb3VyY2VOYW1lKCk7CisgICAgICAgIGxpbmVubyA9IHJjcC5nZXRMaW5lTnVtYmVy
KCk7CisgICAgICAgIGlmIChleGNlcHRpb25UaHJvd24gaW5zdGFuY2VvZiBFY21hRXJyb3IpIHsK
KyAgICAgICAgICAgIG1zZyA9ICgoRWNtYUVycm9yKWV4Y2VwdGlvblRocm93bikuZ2V0RXJyb3JP
YmplY3QoKS50b1N0cmluZygpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgbXNnID0g
ZXhjZXB0aW9uVGhyb3duLnRvU3RyaW5nKCk7CisgICAgICAgIH0KKyAgICAgICAgZXggPSBuZXcg
RXhjZXB0aW9uKG1zZyk7CiAKLSAgICAgICAgICAgIGNlbGwgPSBnZXREb2N1bWVudENlbGwobmFt
ZSk7Ci0gICAgICAgICAgICBpZiAoY2VsbCA9PSBudWxsKSByZXR1cm47CisgICAgICAgIGNlbGwg
PSBnZXREb2N1bWVudENlbGwobmFtZSk7CisgICAgICAgIGlmIChjZWxsID09IG51bGwpIHJldHVy
bjsKIAotICAgICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgICAgICBzdHViID0gbV9yY3AuZXhj
ZXB0aW9uVGhyb3duKCk7CQotICAgICAgICAgICAgICAgIG1fY2FsbGJhY2tzLmNyZWF0ZUZ1dHVy
ZShtX3JjcCk7Ci0gICAgICAgICAgICAgICAgbV9jYWxsYmFja3MuaGFuZGxlRXhjZXB0aW9uVGhy
b3duKHN0dWIsZXgpOwotCQkJCQotICAgICAgICAgICAgICAgIC8vIG5vdywgc3VzcGVuZCB0aGlz
IHRocmVhZC4uLiB1bnRpbCAKLSAgICAgICAgICAgICAgICAvLyB3ZSByZXN0YXJ0LgotICAgICAg
ICAgICAgICAgIG1fY2FsbGJhY2tzLnN1c3BlbmRGdXR1cmUobV9yY3ApOwotCQkJCQotICAgICAg
ICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4MikgewotICAgICAgICAgICAgICAgIG1fcmNwLnJ1
bigpOwotCQkJCQotICAgICAgICAgICAgfQotICAgICAgICB9IGZpbmFsbHkgewotICAgICAgICAg
ICAgbV9yY3AgPSBudWxsOworICAgICAgICB0cnkgeworICAgICAgICAgICAgc3R1YiA9IHJjcC5l
eGNlcHRpb25UaHJvd24oKTsKKyAgICAgICAgICAgIG1fY2FsbGJhY2tzLmNyZWF0ZUZ1dHVyZShy
Y3ApOworICAgICAgICAgICAgbV9jYWxsYmFja3MuaGFuZGxlRXhjZXB0aW9uVGhyb3duKHN0dWIs
ZXgpOworCisgICAgICAgICAgICAvLyBub3csIHN1c3BlbmQgdGhpcyB0aHJlYWQuLi4gdW50aWwK
KyAgICAgICAgICAgIC8vIHdlIHJlc3RhcnQuCisgICAgICAgICAgICBtX2NhbGxiYWNrcy5zdXNw
ZW5kRnV0dXJlKHJjcCk7CisKKyAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4MikgeworICAg
ICAgICAgICAgcmNwLnJ1bigpOwogICAgICAgICB9CiAgICAgfQogCkBAIC01NjgsMTAgKzU1Nywx
MCBAQAogICAgICAqIFRoZSBlbmdpbmUgd2lsbCBjYWxsIHRoZSBhdHRhY2hlZCBkZWJ1Z2dlcidz
IGhhbmRsZUJyZWFrcG9pbnRIaXQKICAgICAgKiBtZXRob2Qgb24gdGhlIG5leHQgbGluZSBpdCBl
eGVjdXRlcyBpZiBpc0xpbmVTdGVwIGlzIHRydWUuCiAgICAgICogTWF5IGJlIHVzZWQgZnJvbSBh
bm90aGVyIHRocmVhZCB0byBpbnRlcnJ1cHQgZXhlY3V0aW9uLgotICAgICAqIAorICAgICAqCiAg
ICAgICogQHBhcmFtIGlzTGluZVN0ZXAgaWYgdHJ1ZSwgYnJlYWsgbmV4dCBsaW5lCiAgICAgICov
Ci0gICAgcHVibGljIHZvaWQgc2V0QnJlYWtOZXh0TGluZShKc0NvbnRleHQgY29udGV4dCwgYm9v
bGVhbiBpc0xpbmVTdGVwKSB7CisgICAgdm9pZCBzZXRCcmVha05leHRMaW5lKEpzQ29udGV4dCBj
b250ZXh0LCBib29sZWFuIGlzTGluZVN0ZXApIHsKICAgICB9CiAKICAgICB2b2lkIHNldENvbXBp
bGluZ0ZuT3JTY3JpcHQoRm5PclNjcmlwdCBmbk9yU2NyaXB0KSB7CkBAIC01ODMsNyArNTcyLDcg
QEAKICAgICAgKiBAcGFyYW0gZGVidWdnZXIgdGhlIGRlYnVnZ2VyIHRvIGJlIHVzZWQgb24gY2Fs
bGJhY2tzIGZyb20KICAgICAgKiB0aGUgZW5naW5lLgogICAgICAqLwotICAgIHB1YmxpYyB2b2lk
IHNldERlYnVnZ2VyKEpzQ2FsbGJhY2tzIGRlYnVnZ2VyKSB7CisgICAgdm9pZCBzZXREZWJ1Z2dl
cihKc0NhbGxiYWNrcyBkZWJ1Z2dlcikgewogICAgICAgICBtX2NhbGxiYWNrcyA9IGRlYnVnZ2Vy
OwogICAgIH0KIH0K
</data>        

          </attachment>
    </bug>

</bugzilla>