<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<!DOCTYPE bugzilla SYSTEM "https://bugs.webkit.org/page.cgi?id=bugzilla.dtd">

<bugzilla version="5.0.4.1"
          urlbase="https://bugs.webkit.org/"
          
          maintainer="admin@webkit.org"
>

    <bug>
          <bug_id>226185</bug_id>
          
          <creation_ts>2021-05-24 13:22:51 -0700</creation_ts>
          <short_desc>Re-land r276592 with a fix for put() override in prototype chain of a JSProxy</short_desc>
          <delta_ts>2022-02-10 16:28:09 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Alexey Shvayka">ashvayka</reporter>
          <assigned_to name="Alexey Shvayka">ashvayka</assigned_to>
          <cc>cdumez</cc>
    
    <cc>clopez</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>hi</cc>
    
    <cc>joepeck</cc>
    
    <cc>keith_miller</cc>
    
    <cc>mark.lam</cc>
    
    <cc>msaboff</cc>
    
    <cc>saam</cc>
    
    <cc>tzagallo</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>youennf</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1763227</commentid>
    <comment_count>0</comment_count>
    <who name="Alexey Shvayka">ashvayka</who>
    <bug_when>2021-05-24 13:22:51 -0700</bug_when>
    <thetext>Re-land r276592 with a fix for opaque API objects</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1763230</commentid>
    <comment_count>1</comment_count>
      <attachid>429557</attachid>
    <who name="Alexey Shvayka">ashvayka</who>
    <bug_when>2021-05-24 13:28:23 -0700</bug_when>
    <thetext>Created attachment 429557
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1763231</commentid>
    <comment_count>2</comment_count>
    <who name="EWS Watchlist">ews-watchlist</who>
    <bug_when>2021-05-24 13:29:28 -0700</bug_when>
    <thetext>This patch modifies the imported WPT tests. Please ensure that any changes on the tests (not coming from a WPT import) are exported to WPT. Please see https://trac.webkit.org/wiki/WPTExportProcess</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1765439</commentid>
    <comment_count>3</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2021-05-31 13:23:17 -0700</bug_when>
    <thetext>&lt;rdar://problem/78692802&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1767271</commentid>
    <comment_count>4</comment_count>
      <attachid>430703</attachid>
    <who name="Alexey Shvayka">ashvayka</who>
    <bug_when>2021-06-06 18:24:16 -0700</bug_when>
    <thetext>Created attachment 430703
Patch

Properly fix put() override in prototype chain of a JSProxy.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1767505</commentid>
    <comment_count>5</comment_count>
      <attachid>430770</attachid>
    <who name="Keith Miller">keith_miller</who>
    <bug_when>2021-06-07 11:59:57 -0700</bug_when>
    <thetext>Created attachment 430770
Original patch for diffing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1767632</commentid>
    <comment_count>6</comment_count>
    <who name="Alexey Shvayka">ashvayka</who>
    <bug_when>2021-06-07 18:53:53 -0700</bug_when>
    <thetext>Committed r278589 (238579@main): &lt;https://commits.webkit.org/238579@main&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>429557</attachid>
            <date>2021-05-24 13:28:23 -0700</date>
            <delta_ts>2021-06-06 18:24:11 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-226185-20210524232821.patch</filename>
            <type>text/plain</type>
            <size>175311</size>
            <attacher name="Alexey Shvayka">ashvayka</attacher>
            
              <data encoding="base64">SW5kZXg6IEpTVGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEpTVGVzdHMvQ2hhbmdlTG9n
CShyZXZpc2lvbiAyNzc5NjQpCisrKyBKU1Rlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpA
QCAtMSwzICsxLDI1IEBACisyMDIxLTA1LTI0ICBBbGV4ZXkgU2h2YXlrYSAgPHNodmFpa2FsZXNo
QGdtYWlsLmNvbT4KKworICAgICAgICBSZS1sYW5kIHIyNzY1OTIgd2l0aCBhIGZpeCBmb3Igb3Bh
cXVlIEFQSSBvYmplY3RzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0yMjYxODUKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICAqIG1pY3JvYmVuY2htYXJrcy9wdXQtc2xvdy1uby1jYWNoZS1hcnJheS5qczogQWRk
ZWQuCisgICAgICAgICogbWljcm9iZW5jaG1hcmtzL3B1dC1zbG93LW5vLWNhY2hlLWZ1bmN0aW9u
LmpzOiBBZGRlZC4KKyAgICAgICAgKiBtaWNyb2JlbmNobWFya3MvcHV0LXNsb3ctbm8tY2FjaGUt
anMtcHJveHkuanM6IEFkZGVkLgorICAgICAgICAqIG1pY3JvYmVuY2htYXJrcy9wdXQtc2xvdy1u
by1jYWNoZS1sb25nLXByb3RvdHlwZS1jaGFpbi5qczogQWRkZWQuCisgICAgICAgICogbWljcm9i
ZW5jaG1hcmtzL3B1dC1zbG93LW5vLWNhY2hlLmpzOiBBZGRlZC4KKyAgICAgICAgKiBtaWNyb2Jl
bmNobWFya3MvcmVmbGVjdC1zZXQtd2l0aC1yZWNlaXZlci5qczogQWRkZWQuCisgICAgICAgICog
c3RyZXNzL2N1c3RvbS1nZXQtc2V0LXByb3RvLWNoYWluLXB1dC5qczoKKyAgICAgICAgKiBzdHJl
c3MvbW9kdWxlLW5hbWVzcGFjZS1hY2Nlc3Mtc2V0LWZhaWxzLmpzOiBBZGRlZC4KKyAgICAgICAg
KiBzdHJlc3MvcHV0LW5vbi1yZWlmaWVkLXN0YXRpYy1hY2Nlc3Nvci1vci1jdXN0b20uanM6IEFk
ZGVkLgorICAgICAgICAqIHN0cmVzcy9wdXQtbm9uLXJlaWZpZWQtc3RhdGljLWZ1bmN0aW9uLW9y
LWN1c3RvbS5qczogQWRkZWQuCisgICAgICAgICogc3RyZXNzL3B1dC10by1wcmltaXRpdmUtbm9u
LXJlaWZpZWQtc3RhdGljLWN1c3RvbS5qczogQWRkZWQuCisgICAgICAgICogc3RyZXNzL3B1dC10
by1wcmltaXRpdmUuanM6IEFkZGVkLgorICAgICAgICAqIHN0cmVzcy9wdXQtdG8tcHJvdG8tY2hh
aW4tb3ZlcnJpZGVzLXB1dC5qczogQWRkZWQuCisgICAgICAgICogc3RyZXNzL3R5cGVkLWFycmF5
LWNhbm9uaWNhbC1udW1lcmljLWluZGV4LXN0cmluZy1zZXQuanM6IEFkZGVkLgorCiAyMDIxLTA1
LTIyICBSb3NzIEtpcnNsaW5nICA8cm9zcy5raXJzbGluZ0Bzb255LmNvbT4KIAogICAgICAgICBT
dXBwb3J0IEVyZ29ub21pYyBCcmFuZCBDaGVja3MgcHJvcG9zYWwgKGAjeCBpbiBvYmpgKQpJbmRl
eDogSlNUZXN0cy9taWNyb2JlbmNobWFya3MvcHV0LXNsb3ctbm8tY2FjaGUtYXJyYXkuanMKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gSlNUZXN0cy9taWNyb2JlbmNobWFya3MvcHV0LXNsb3ctbm8tY2FjaGUtYXJy
YXkuanMJKG5vbmV4aXN0ZW50KQorKysgSlNUZXN0cy9taWNyb2JlbmNobWFya3MvcHV0LXNsb3ct
bm8tY2FjaGUtYXJyYXkuanMJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw2IEBACisoZnVuY3Rp
b24oKSB7CisgICAgdmFyIGFycmF5ID0gW107CisKKyAgICBmb3IgKHZhciBqID0gMDsgaiA8IDFl
NTsgaisrKQorICAgICAgICBhcnJheVsiZm9vIiArIGpdID0gajsKK30pKCk7CkluZGV4OiBKU1Rl
c3RzL21pY3JvYmVuY2htYXJrcy9wdXQtc2xvdy1uby1jYWNoZS1mdW5jdGlvbi5qcwo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBKU1Rlc3RzL21pY3JvYmVuY2htYXJrcy9wdXQtc2xvdy1uby1jYWNoZS1mdW5jdGlv
bi5qcwkobm9uZXhpc3RlbnQpCisrKyBKU1Rlc3RzL21pY3JvYmVuY2htYXJrcy9wdXQtc2xvdy1u
by1jYWNoZS1mdW5jdGlvbi5qcwkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDggQEAKKyhmdW5j
dGlvbigpIHsKKyAgICBjbGFzcyBBIHt9CisgICAgY2xhc3MgQiBleHRlbmRzIEEge30KKyAgICBj
bGFzcyBDIGV4dGVuZHMgQiB7fQorCisgICAgZm9yICh2YXIgaiA9IDA7IGogPCAxZTU7IGorKykK
KyAgICAgICAgQ1siZm9vIiArIGpdID0gajsKK30pKCk7CkluZGV4OiBKU1Rlc3RzL21pY3JvYmVu
Y2htYXJrcy9wdXQtc2xvdy1uby1jYWNoZS1qcy1wcm94eS5qcwo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKU1Rl
c3RzL21pY3JvYmVuY2htYXJrcy9wdXQtc2xvdy1uby1jYWNoZS1qcy1wcm94eS5qcwkobm9uZXhp
c3RlbnQpCisrKyBKU1Rlc3RzL21pY3JvYmVuY2htYXJrcy9wdXQtc2xvdy1uby1jYWNoZS1qcy1w
cm94eS5qcwkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDYgQEAKKyhmdW5jdGlvbigpIHsKKyAg
ICB2YXIgcHJveHkgPSAkdm0uY3JlYXRlUHJveHkoeyBzZXQgZm9vKF92KSB7fSB9KTsKKworICAg
IGZvciAodmFyIGogPSAwOyBqIDwgMWU1OyBqKyspCisgICAgICAgIHByb3h5WyJmb28iICsgal0g
PSBqOworfSkoKTsKSW5kZXg6IEpTVGVzdHMvbWljcm9iZW5jaG1hcmtzL3B1dC1zbG93LW5vLWNh
Y2hlLWxvbmctcHJvdG90eXBlLWNoYWluLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEpTVGVzdHMvbWljcm9i
ZW5jaG1hcmtzL3B1dC1zbG93LW5vLWNhY2hlLWxvbmctcHJvdG90eXBlLWNoYWluLmpzCShub25l
eGlzdGVudCkKKysrIEpTVGVzdHMvbWljcm9iZW5jaG1hcmtzL3B1dC1zbG93LW5vLWNhY2hlLWxv
bmctcHJvdG90eXBlLWNoYWluLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsOCBAQAorKGZ1
bmN0aW9uKCkgeworICAgIHZhciBiYXNlID0geyBzZXQgZm9vKF92KSB7fSB9OworICAgIGZvciAo
dmFyIGkgPSAwOyBpIDwgMWUzOyBpKyspCisgICAgICAgIGJhc2UgPSBPYmplY3QuY3JlYXRlKGJh
c2UpOworCisgICAgZm9yICh2YXIgaiA9IDA7IGogPCAzZTM7IGorKykKKyAgICAgICAgYmFzZVsi
Zm9vIiArIGpdID0gajsKK30pKCk7CkluZGV4OiBKU1Rlc3RzL21pY3JvYmVuY2htYXJrcy9wdXQt
c2xvdy1uby1jYWNoZS5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKU1Rlc3RzL21pY3JvYmVuY2htYXJrcy9w
dXQtc2xvdy1uby1jYWNoZS5qcwkobm9uZXhpc3RlbnQpCisrKyBKU1Rlc3RzL21pY3JvYmVuY2ht
YXJrcy9wdXQtc2xvdy1uby1jYWNoZS5qcwkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDYgQEAK
KyhmdW5jdGlvbigpIHsKKyAgICB2YXIgYmFzZSA9IHsgc2V0IGZvbyhfdikge30gfTsKKworICAg
IGZvciAodmFyIGogPSAwOyBqIDwgMWU1OyBqKyspCisgICAgICAgIGJhc2VbImZvbyIgKyBqXSA9
IGo7Cit9KSgpOwpJbmRleDogSlNUZXN0cy9taWNyb2JlbmNobWFya3MvcmVmbGVjdC1zZXQtd2l0
aC1yZWNlaXZlci5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKU1Rlc3RzL21pY3JvYmVuY2htYXJrcy9yZWZs
ZWN0LXNldC13aXRoLXJlY2VpdmVyLmpzCShub25leGlzdGVudCkKKysrIEpTVGVzdHMvbWljcm9i
ZW5jaG1hcmtzL3JlZmxlY3Qtc2V0LXdpdGgtcmVjZWl2ZXIuanMJKHdvcmtpbmcgY29weSkKQEAg
LTAsMCArMSw2IEBACisoZnVuY3Rpb24oKSB7CisgICAgdmFyIHRhcmdldCA9IG5ldyAoY2xhc3Mg
e30pOworCisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCAxZTY7IGkrKykKKyAgICAgICAgUmVmbGVj
dC5zZXQodGFyZ2V0LCAiZm9vIiwgMSwge30pOworfSkoKTsKSW5kZXg6IEpTVGVzdHMvc3RyZXNz
L2N1c3RvbS1nZXQtc2V0LXByb3RvLWNoYWluLXB1dC5qcwo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKU1Rlc3Rz
L3N0cmVzcy9jdXN0b20tZ2V0LXNldC1wcm90by1jaGFpbi1wdXQuanMJKHJldmlzaW9uIDI3Nzk0
OCkKKysrIEpTVGVzdHMvc3RyZXNzL2N1c3RvbS1nZXQtc2V0LXByb3RvLWNoYWluLXB1dC5qcwko
d29ya2luZyBjb3B5KQpAQCAtMzcsOCArMzcsOCBAQCBmdW5jdGlvbiBnZXRPYmplY3RzKCkgewog
ICAgICAgICAuLi5wcmltaXRpdmVzLm1hcChPYmplY3QpLAogICAgICAgICBPYmplY3QuY3JlYXRl
KGN1c3RvbVRlc3RHZXR0ZXJTZXR0ZXIpLAogICAgICAgICBPYmplY3QuY3JlYXRlKE9iamVjdC5j
cmVhdGUoY3VzdG9tVGVzdEdldHRlclNldHRlcikpLAotICAgICAgICAvLyBGSVhNRTogb3JkaW5h
cnlTZXRTbG93KCkgc2hvdWxkIGhhbmRsZSBDdXN0b217QWNjZXNzb3IsVmFsdWV9IGRlc2NyaXB0
b3JzLgotICAgICAgICAvLyBuZXcgUHJveHkoY3VzdG9tVGVzdEdldHRlclNldHRlciwge30pLAor
ICAgICAgICBPYmplY3QuY3JlYXRlKG5ldyBQcm94eShjdXN0b21UZXN0R2V0dGVyU2V0dGVyLCB7
fSkpLAorICAgICAgICBPYmplY3QuY3JlYXRlKCR2bS5jcmVhdGVQcm94eShjdXN0b21UZXN0R2V0
dGVyU2V0dGVyKSksCiAgICAgXTsKIH0KIApAQCAtODUsMTMgKzg1LDEzIEBAIGZ1bmN0aW9uIGdl
dEJhc2VzKCkgewogfSkoKTsKIAogLy8gQ3VzdG9tVmFsdWU6IHNldHRlciByZXR1cm5zIHxmYWxz
ZXwKKy8vIEZJWE1FOiBPbmNlIGxlZ2FjeSBSZWdFeHAgZmVhdHVyZXMgYXJlIGltcGxlbWVudGVk
LCB0aGVyZSB3b3VsZCBiZSBubyB1c2UgY2FzZSBmb3IgY2FsbGluZyBDdXN0b21WYWx1ZSBzZXR0
ZXIgaWYgcmVjZWl2ZXIgaXMgYWx0ZXJlZC4KICgoKSA9PiB7CiAgICAgZm9yIChsZXQgYmFzZSBv
ZiBnZXRCYXNlcygpKSB7CiAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgMTAwOyArK2kpCiAg
ICAgICAgICAgICBiYXNlLmN1c3RvbVZhbHVlID0gMTsKLSAgICAgICAgLy8gVGhpcyBpcyB3ZWly
ZCwgYnV0IGl0IGlzbid0IGV4cG9zZWQgdG8gdXNlcmxhbmQgY29kZToKICAgICAgICAgYXNzZXJ0
KCFiYXNlLmhhc093blByb3BlcnR5KCJjdXN0b21WYWx1ZSIpKTsKLSAgICAgICAgYXNzZXJ0KCFS
ZWZsZWN0LnNldChPYmplY3QoYmFzZSksICJjdXN0b21WYWx1ZSIsIDEpKTsKKyAgICAgICAgYXNz
ZXJ0KFJlZmxlY3Quc2V0KE9iamVjdChiYXNlKSwgImN1c3RvbVZhbHVlIiwgMSkpOwogICAgIH0K
IH0pKCk7CiAKSW5kZXg6IEpTVGVzdHMvc3RyZXNzL21vZHVsZS1uYW1lc3BhY2UtYWNjZXNzLXNl
dC1mYWlscy5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKU1Rlc3RzL3N0cmVzcy9tb2R1bGUtbmFtZXNwYWNl
LWFjY2Vzcy1zZXQtZmFpbHMuanMJKG5vbmV4aXN0ZW50KQorKysgSlNUZXN0cy9zdHJlc3MvbW9k
dWxlLW5hbWVzcGFjZS1hY2Nlc3Mtc2V0LWZhaWxzLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAg
KzEsOTAgQEAKK2NvbnN0IGV4aXN0aW5nS2V5cyA9IFsiY29jb2EiLCAidGVzdCIsIFN5bWJvbC50
b1N0cmluZ1RhZ107Citjb25zdCBub25FeGlzdGluZ0tleXMgPSBbImZvbyIsIFN5bWJvbCgiZm9v
IildOworY29uc3QgYWxsS2V5cyA9IFsuLi5leGlzdGluZ0tleXMsIC4uLm5vbkV4aXN0aW5nS2V5
c107Citjb25zdCB0ZXN0VmFsdWUgPSBPYmplY3QuZnJlZXplKHt9KTsKKworZnVuY3Rpb24gYXNz
ZXJ0KHgsIGtleSkgeworICAgIGlmICgheCkKKyAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBCYWQg
YXNzZXJ0aW9uISBLZXk6ICR7U3RyaW5nKGtleSl9YCk7Cit9CisKK2Z1bmN0aW9uIHNob3VsZFRo
cm93KGZ1bmMsIGVycm9yTWVzc2FnZSkgeworICAgIGxldCBlcnJvclRocm93biA9IGZhbHNlOwor
ICAgIHRyeSB7CisgICAgICAgIGZ1bmMoKTsKKyAgICB9IGNhdGNoIChlcnJvcikgeworICAgICAg
ICBlcnJvclRocm93biA9IHRydWU7CisgICAgICAgIGlmIChTdHJpbmcoZXJyb3IpICE9PSBlcnJv
ck1lc3NhZ2UpCisgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEJhZCBlcnJvcjogJHtlcnJv
cn1gKTsKKyAgICB9CisgICAgaWYgKCFlcnJvclRocm93bikKKyAgICAgICAgdGhyb3cgbmV3IEVy
cm9yKCJEaWRuJ3QgdGhyb3chIik7Cit9CisKK2Z1bmN0aW9uIHRlc3REaXJlY3RTZXQobnMpIHsK
KyAgICBmb3IgKGNvbnN0IGtleSBvZiBhbGxLZXlzKSB7CisgICAgICAgIG5zW2tleV0gPSB0ZXN0
VmFsdWU7CisgICAgICAgIGFzc2VydChuc1trZXldICE9PSB0ZXN0VmFsdWUsIGtleSk7CisKKyAg
ICAgICAgc2hvdWxkVGhyb3coKCkgPT4geyAidXNlIHN0cmljdCI7IG5zW2tleV0gPSB0ZXN0VmFs
dWU7IH0sICJUeXBlRXJyb3I6IEF0dGVtcHRlZCB0byBhc3NpZ24gdG8gcmVhZG9ubHkgcHJvcGVy
dHkuIik7CisgICAgICAgIGFzc2VydChuc1trZXldICE9PSB0ZXN0VmFsdWUsIGtleSk7CisgICAg
fQorfQorCitmdW5jdGlvbiB0ZXN0UHJvdG90eXBlQ2hhaW5TZXQobnMpIHsKKyAgICBmb3IgKGNv
bnN0IGtleSBvZiBhbGxLZXlzKSB7CisgICAgICAgIGNvbnN0IGhlaXIgPSBPYmplY3QuY3JlYXRl
KG5zKTsKKworICAgICAgICBoZWlyW2tleV0gPSB0ZXN0VmFsdWU7CisgICAgICAgIGFzc2VydChP
YmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGhlaXIsIGtleSkgPT09IHVuZGVmaW5lZCwg
a2V5KTsKKworICAgICAgICBzaG91bGRUaHJvdygoKSA9PiB7ICJ1c2Ugc3RyaWN0IjsgaGVpcltr
ZXldID0gdGVzdFZhbHVlOyB9LCAiVHlwZUVycm9yOiBBdHRlbXB0ZWQgdG8gYXNzaWduIHRvIHJl
YWRvbmx5IHByb3BlcnR5LiIpOworICAgICAgICBhc3NlcnQoT2JqZWN0LmdldE93blByb3BlcnR5
RGVzY3JpcHRvcihoZWlyLCBrZXkpID09PSB1bmRlZmluZWQsIGtleSk7CisgICAgfQorfQorCitm
dW5jdGlvbiB0ZXN0UmVmbGVjdFNldChucykgeworICAgICJ1c2Ugc3RyaWN0IjsKKworICAgIGZv
ciAoY29uc3QgZXhpc3RpbmdLZXkgb2YgZXhpc3RpbmdLZXlzKSB7CisgICAgICAgIGFzc2VydCgh
UmVmbGVjdC5zZXQobnMsIGV4aXN0aW5nS2V5LCB0ZXN0VmFsdWUpLCBleGlzdGluZ0tleSk7CisK
KyAgICAgICAgY29uc3QgdGFyZ2V0ID0ge307CisgICAgICAgIGFzc2VydCghUmVmbGVjdC5zZXQo
dGFyZ2V0LCBleGlzdGluZ0tleSwgdGVzdFZhbHVlLCBucyksIGV4aXN0aW5nS2V5KTsKKworICAg
ICAgICBjb25zdCBpc1dyaXRhYmxlID0gZXhpc3RpbmdLZXkgIT09IFN5bWJvbC50b1N0cmluZ1Rh
ZzsKKyAgICAgICAgYXNzZXJ0KFJlZmxlY3Quc2V0KHRhcmdldCwgZXhpc3RpbmdLZXksIG5zW2V4
aXN0aW5nS2V5XSwgbnMpID09PSBpc1dyaXRhYmxlLCBleGlzdGluZ0tleSk7CisKKyAgICAgICAg
YXNzZXJ0KG5zW2V4aXN0aW5nS2V5XSAhPT0gdGVzdFZhbHVlLCBleGlzdGluZ0tleSk7CisgICAg
ICAgIGFzc2VydCh0YXJnZXRbZXhpc3RpbmdLZXldID09PSB1bmRlZmluZWQsIGV4aXN0aW5nS2V5
KTsKKyAgICB9CisKKyAgICBmb3IgKGNvbnN0IG5vbkV4aXN0aW5nS2V5IG9mIG5vbkV4aXN0aW5n
S2V5cykgeworICAgICAgICBhc3NlcnQoIVJlZmxlY3Quc2V0KG5zLCBub25FeGlzdGluZ0tleSwg
dGVzdFZhbHVlKSwgbm9uRXhpc3RpbmdLZXkpOworICAgICAgICBhc3NlcnQobnNbbm9uRXhpc3Rp
bmdLZXldID09PSB1bmRlZmluZWQsIG5vbkV4aXN0aW5nS2V5KTsKKworICAgICAgICBjb25zdCB0
YXJnZXQgPSB7fTsKKyAgICAgICAgYXNzZXJ0KCFSZWZsZWN0LnNldCh0YXJnZXQsIG5vbkV4aXN0
aW5nS2V5LCB0ZXN0VmFsdWUsIG5zKSwgbm9uRXhpc3RpbmdLZXkpOworICAgICAgICBhc3NlcnQo
dGFyZ2V0W25vbkV4aXN0aW5nS2V5XSA9PT0gdW5kZWZpbmVkLCBub25FeGlzdGluZ0tleSk7Cisg
ICAgfQorCisgICAgZm9yIChjb25zdCBrZXkgb2YgYWxsS2V5cykgeworICAgICAgICBjb25zdCB0
YXJnZXQgPSBPYmplY3QuY3JlYXRlKG5zKTsKKyAgICAgICAgY29uc3QgcmVjZWl2ZXIgPSB7fTsK
KworICAgICAgICBhc3NlcnQoIVJlZmxlY3Quc2V0KHRhcmdldCwga2V5LCB0ZXN0VmFsdWUsIHJl
Y2VpdmVyKSwga2V5KTsKKyAgICAgICAgYXNzZXJ0KE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2Ny
aXB0b3IodGFyZ2V0LCBrZXkpID09PSB1bmRlZmluZWQsIGtleSk7CisgICAgICAgIGFzc2VydChP
YmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHJlY2VpdmVyLCBrZXkpID09PSB1bmRlZmlu
ZWQsIGtleSk7CisgICAgfQorfQorCitpbXBvcnQoIi4vcmVzb3VyY2VzL21vZHVsZS1uYW1lc3Bh
Y2UtYWNjZXNzLmpzIikudGhlbihucyA9PiB7CisgICAgdGVzdERpcmVjdFNldChucyk7CisgICAg
dGVzdFByb3RvdHlwZUNoYWluU2V0KG5zKTsKKyAgICB0ZXN0UmVmbGVjdFNldChucyk7Cit9KS5j
YXRjaChlcnIgPT4geworICAgIHByaW50KGAhISEgJHtlcnJ9XG4ke2Vyci5zdGFja31gKTsKKyAg
ICAkdm0uYWJvcnQoKTsKK30pOworCitkcmFpbk1pY3JvdGFza3MoKTsKSW5kZXg6IEpTVGVzdHMv
c3RyZXNzL3B1dC1ub24tcmVpZmllZC1zdGF0aWMtYWNjZXNzb3Itb3ItY3VzdG9tLmpzCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIEpTVGVzdHMvc3RyZXNzL3B1dC1ub24tcmVpZmllZC1zdGF0aWMtYWNjZXNzb3It
b3ItY3VzdG9tLmpzCShub25leGlzdGVudCkKKysrIEpTVGVzdHMvc3RyZXNzL3B1dC1ub24tcmVp
ZmllZC1zdGF0aWMtYWNjZXNzb3Itb3ItY3VzdG9tLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAg
KzEsNTggQEAKKyJ1c2Ugc3RyaWN0IjsKK2NvbnN0IHRlc3RWYWx1ZSA9IE9iamVjdC5mcmVlemUo
e30pOworCitmdW5jdGlvbiBhc3NlcnQoeCwga2V5KSB7CisgICAgaWYgKCF4KQorICAgICAgICB0
aHJvdyBuZXcgRXJyb3IoYEtleTogIiR7a2V5fSIuIEJhZCBhc3NlcnRpb24hYCk7Cit9CisKK2Z1
bmN0aW9uKiB0ZXN0Q2FzZXMoKSB7CisgICAgZm9yIChjb25zdCBrZXkgb2YgWyJkZXNjcmlwdGlv
biJdKQorICAgICAgICB5aWVsZCBbJHZtLmNyZWF0ZUdsb2JhbE9iamVjdCgpLlN5bWJvbC5wcm90
b3R5cGUsIGtleV07CisgICAgZm9yIChjb25zdCBrZXkgb2YgWyJidWZmZXIiLCAiYnl0ZUxlbmd0
aCIsICJieXRlT2Zmc2V0Il0pCisgICAgICAgIHlpZWxkIFskdm0uY3JlYXRlR2xvYmFsT2JqZWN0
KCkuRGF0YVZpZXcucHJvdG90eXBlLCBrZXldOworICAgIGZvciAoY29uc3Qga2V5IG9mIFsiYmFz
ZU5hbWUiLCAiY2FzZUZpcnN0IiwgImhvdXJDeWNsZSIsICJudW1lcmljIiwgInJlZ2lvbiJdKQor
ICAgICAgICB5aWVsZCBbJHZtLmNyZWF0ZUdsb2JhbE9iamVjdCgpLkludGwuTG9jYWxlLnByb3Rv
dHlwZSwga2V5XTsKKworICAgIGZvciAoY29uc3Qga2V5IG9mIFsidGVzdFN0YXRpY0FjY2Vzc29y
RG9udEVudW0iLCAidGVzdFN0YXRpY0FjY2Vzc29yUmVhZE9ubHkiXSkKKyAgICAgICAgeWllbGQg
WyR2bS5jcmVhdGVTdGF0aWNDdXN0b21BY2Nlc3NvcigpLCBrZXldOworICAgIHlpZWxkIFskdm0u
Y3JlYXRlU3RhdGljQ3VzdG9tVmFsdWUoKSwgInRlc3RTdGF0aWNWYWx1ZVJlYWRPbmx5Il07Cit9
CisKK2ZvciAoY29uc3QgW29iamVjdCwga2V5XSBvZiB0ZXN0Q2FzZXMoKSkgeworICAgIGNvbnN0
IHRhcmdldCA9IHt9OworICAgIGFzc2VydCghUmVmbGVjdC5zZXQodGFyZ2V0LCBrZXksIHRlc3RW
YWx1ZSwgb2JqZWN0KSwga2V5KTsKKyAgICBhc3NlcnQoIXRhcmdldC5oYXNPd25Qcm9wZXJ0eShr
ZXkpLCBrZXkpOworICAgIGFzc2VydChPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG9i
amVjdCwga2V5KS52YWx1ZSAhPT0gdGVzdFZhbHVlLCBrZXkpOworfQorCitmb3IgKGNvbnN0IFtv
YmplY3QsIGtleV0gb2YgdGVzdENhc2VzKCkpIHsKKyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHko
b2JqZWN0LCBrZXksIHsgdmFsdWU6IHt9LCB3cml0YWJsZTogZmFsc2UgfSk7CisgICAgY29uc3Qg
dGFyZ2V0ID0ge307CisgICAgYXNzZXJ0KCFSZWZsZWN0LnNldCh0YXJnZXQsIGtleSwgdGVzdFZh
bHVlLCBvYmplY3QpLCBrZXkpOworICAgIGFzc2VydCghdGFyZ2V0Lmhhc093blByb3BlcnR5KGtl
eSksIGtleSk7CisgICAgYXNzZXJ0KE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iob2Jq
ZWN0LCBrZXkpLnZhbHVlICE9PSB0ZXN0VmFsdWUsIGtleSk7Cit9CisKK2ZvciAoY29uc3QgW29i
amVjdCwga2V5XSBvZiB0ZXN0Q2FzZXMoKSkgeworICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShv
YmplY3QsIGtleSwgeyB2YWx1ZToge30sIHdyaXRhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IGZh
bHNlIH0pOworICAgIG9iamVjdFtrZXldID0gdGVzdFZhbHVlOworCisgICAgY29uc3QgZGVzYyA9
IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0LCBrZXkpOworICAgIGFzc2Vy
dChkZXNjLnZhbHVlID09PSB0ZXN0VmFsdWUsIGtleSk7CisgICAgYXNzZXJ0KGRlc2Mud3JpdGFi
bGUsIGtleSk7CisgICAgYXNzZXJ0KCFkZXNjLmVudW1lcmFibGUsIGtleSk7CisgICAgYXNzZXJ0
KCFkZXNjLmNvbmZpZ3VyYWJsZSwga2V5KTsKK30KKworZm9yIChjb25zdCBbb2JqZWN0LCBrZXld
IG9mIHRlc3RDYXNlcygpKSB7CisgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iamVjdCwga2V5
LCB7IHZhbHVlOiB7fSwgd3JpdGFibGU6IHRydWUsIGVudW1lcmFibGU6IHRydWUgfSk7CisgICAg
Y29uc3QgdGFyZ2V0ID0ge307CisgICAgYXNzZXJ0KFJlZmxlY3Quc2V0KHRhcmdldCwga2V5LCB0
ZXN0VmFsdWUsIG9iamVjdCksIGtleSk7CisKKyAgICBjb25zdCBkZXNjID0gT2JqZWN0LmdldE93
blByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QsIGtleSk7CisgICAgYXNzZXJ0KGRlc2MudmFsdWUg
PT09IHRlc3RWYWx1ZSwga2V5KTsKKyAgICBhc3NlcnQoZGVzYy53cml0YWJsZSwga2V5KTsKKyAg
ICBhc3NlcnQoZGVzYy5lbnVtZXJhYmxlLCBrZXkpOworICAgIGFzc2VydChkZXNjLmNvbmZpZ3Vy
YWJsZSwga2V5KTsKK30KSW5kZXg6IEpTVGVzdHMvc3RyZXNzL3B1dC1ub24tcmVpZmllZC1zdGF0
aWMtZnVuY3Rpb24tb3ItY3VzdG9tLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEpTVGVzdHMvc3RyZXNzL3B1
dC1ub24tcmVpZmllZC1zdGF0aWMtZnVuY3Rpb24tb3ItY3VzdG9tLmpzCShub25leGlzdGVudCkK
KysrIEpTVGVzdHMvc3RyZXNzL3B1dC1ub24tcmVpZmllZC1zdGF0aWMtZnVuY3Rpb24tb3ItY3Vz
dG9tLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTQzIEBACisidXNlIHN0cmljdCI7Citj
b25zdCB0ZXN0VmFsdWUgPSBPYmplY3QuZnJlZXplKHt9KTsKKworZnVuY3Rpb24gYXNzZXJ0KHgs
IGtleSkgeworICAgIGlmICgheCkKKyAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBLZXk6ICIke2tl
eX0iLiBCYWQgYXNzZXJ0aW9uIWApOworfQorCitmdW5jdGlvbiBzaG91bGRUaHJvdyhmdW5jLCBl
cnJvck1lc3NhZ2UsIGtleSkgeworICAgIGxldCBlcnJvclRocm93biA9IGZhbHNlOworICAgIHRy
eSB7CisgICAgICAgIGZ1bmMoKTsKKyAgICB9IGNhdGNoIChlcnJvcikgeworICAgICAgICBlcnJv
clRocm93biA9IHRydWU7CisgICAgICAgIGlmIChTdHJpbmcoZXJyb3IpICE9PSBlcnJvck1lc3Nh
Z2UpCisgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEtleTogIiR7a2V5fSIuIEJhZCBlcnJv
cjogJHtlcnJvcn1gKTsKKyAgICB9CisgICAgaWYgKCFlcnJvclRocm93bikKKyAgICAgICAgdGhy
b3cgbmV3IEVycm9yKGBLZXk6ICIke2tleX0iLiBEaWRuJ3QgdGhyb3chYCk7Cit9CisKK2Z1bmN0
aW9uKiB0ZXN0Q2FzZXMoKSB7CisgICAgLy8gaGFzU2V0dGVyT3JSZWFkb25seVByb3BlcnRpZXM6
IGZhbHNlCisgICAgZm9yIChjb25zdCBrZXkgb2YgWyJpc0Zpbml0ZSIsICJldmFsIiwgImdsb2Jh
bFRoaXMiLCAicGFyc2VJbnQiLCAiRXZhbEVycm9yIiwgIkpTT04iLCAiVWludDhDbGFtcGVkQXJy
YXkiLCAiV2Vha01hcCJdKQorICAgICAgICB5aWVsZCBbJHZtLmNyZWF0ZUdsb2JhbE9iamVjdCgp
LCBrZXldOworICAgIGZvciAoY29uc3Qga2V5IG9mIFsic2VhbCIsICJpcyIsICJ2YWx1ZXMiLCAi
ZnJvbUVudHJpZXMiLCAiZGVmaW5lUHJvcGVydHkiLCAic2V0UHJvdG90eXBlT2YiXSkKKyAgICAg
ICAgeWllbGQgWyR2bS5jcmVhdGVHbG9iYWxPYmplY3QoKS5PYmplY3QsIGtleV07CisgICAgZm9y
IChjb25zdCBrZXkgb2YgWyJhcHBseSIsICJjb25zdHJ1Y3QiLCAiaGFzIiwgInByZXZlbnRFeHRl
bnNpb25zIiwgImdldFByb3RvdHlwZU9mIl0pCisgICAgICAgIHlpZWxkIFskdm0uY3JlYXRlR2xv
YmFsT2JqZWN0KCkuUmVmbGVjdCwga2V5XTsKKyAgICBmb3IgKGNvbnN0IGtleSBvZiBbInRvRGF0
ZVN0cmluZyIsICJ0b0xvY2FsZVN0cmluZyIsICJnZXRVVENNb250aCIsICJnZXREYXkiLCAic2V0
VVRDTWludXRlcyIsICJzZXRNb250aCJdKQorICAgICAgICB5aWVsZCBbJHZtLmNyZWF0ZUdsb2Jh
bE9iamVjdCgpLkRhdGUucHJvdG90eXBlLCBrZXldOworICAgIGZvciAoY29uc3Qga2V5IG9mIFsi
Y29uY2F0IiwgIm1hdGNoIiwgInBhZFN0YXJ0IiwgImJvbGQiLCAiZml4ZWQiLCAic21hbGwiLCAi
c3ViIl0pCisgICAgICAgIHlpZWxkIFskdm0uY3JlYXRlR2xvYmFsT2JqZWN0KCkuU3RyaW5nLnBy
b3RvdHlwZSwga2V5XTsKKworICAgIC8vIGhhc1NldHRlck9yUmVhZG9ubHlQcm9wZXJ0aWVzOiB0
cnVlCisgICAgZm9yIChjb25zdCBrZXkgb2YgWyJnZXRVaW50MTYiLCAic2V0SW50OCIsICJnZXRG
bG9hdDMyIiwgInNldEJpZ1VpbnQ2NCJdKQorICAgICAgICB5aWVsZCBbJHZtLmNyZWF0ZUdsb2Jh
bE9iamVjdCgpLkRhdGFWaWV3LnByb3RvdHlwZSwga2V5XTsKKyAgICBmb3IgKGNvbnN0IGtleSBv
ZiBbInRvU3RyaW5nIiwgInZhbHVlT2YiXSkKKyAgICAgICAgeWllbGQgWyR2bS5jcmVhdGVHbG9i
YWxPYmplY3QoKS5TeW1ib2wucHJvdG90eXBlLCBrZXldOworICAgIGZvciAoY29uc3Qga2V5IG9m
IFsiZm9ybWF0UmFuZ2UiLCAiZm9ybWF0VG9QYXJ0cyIsICJyZXNvbHZlZE9wdGlvbnMiXSkKKyAg
ICAgICAgeWllbGQgWyR2bS5jcmVhdGVHbG9iYWxPYmplY3QoKS5JbnRsLkRhdGVUaW1lRm9ybWF0
LnByb3RvdHlwZSwga2V5XTsKKyAgICBmb3IgKGNvbnN0IGtleSBvZiBbImZvcm1hdFRvUGFydHMi
LCAicmVzb2x2ZWRPcHRpb25zIl0pCisgICAgICAgIHlpZWxkIFskdm0uY3JlYXRlR2xvYmFsT2Jq
ZWN0KCkuSW50bC5OdW1iZXJGb3JtYXQucHJvdG90eXBlLCBrZXldOworICAgIGZvciAoY29uc3Qg
a2V5IG9mIFsibWF4aW1pemUiLCAibWluaW1pemUiLCAidG9TdHJpbmciXSkKKyAgICAgICAgeWll
bGQgWyR2bS5jcmVhdGVHbG9iYWxPYmplY3QoKS5JbnRsLkxvY2FsZS5wcm90b3R5cGUsIGtleV07
CisKKyAgICB5aWVsZCBbJHZtLmNyZWF0ZVN0YXRpY0N1c3RvbVZhbHVlKCksICJ0ZXN0U3RhdGlj
VmFsdWVOb1NldHRlciJdOworfQorCitmb3IgKGNvbnN0IFtvYmplY3QsIGtleV0gb2YgdGVzdENh
c2VzKCkpIHsKKyAgICBvYmplY3Rba2V5XSA9IHRlc3RWYWx1ZTsKKworICAgIGNvbnN0IGRlc2Mg
PSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCwga2V5KTsKKyAgICBhc3Nl
cnQoZGVzYy52YWx1ZSA9PT0gdGVzdFZhbHVlLCBrZXkpOworICAgIGFzc2VydChkZXNjLndyaXRh
YmxlLCBrZXkpOworICAgIGFzc2VydCghZGVzYy5lbnVtZXJhYmxlLCBrZXkpOworICAgIGFzc2Vy
dChkZXNjLmNvbmZpZ3VyYWJsZSwga2V5KTsKK30KKworZm9yIChjb25zdCBbb2JqZWN0LCBrZXld
IG9mIHRlc3RDYXNlcygpKSB7CisgICAgT2JqZWN0LnByZXZlbnRFeHRlbnNpb25zKG9iamVjdCk7
CisgICAgb2JqZWN0W2tleV0gPSB0ZXN0VmFsdWU7CisKKyAgICBjb25zdCBkZXNjID0gT2JqZWN0
LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QsIGtleSk7CisgICAgYXNzZXJ0KGRlc2Mu
dmFsdWUgPT09IHRlc3RWYWx1ZSwga2V5KTsKKyAgICBhc3NlcnQoZGVzYy53cml0YWJsZSwga2V5
KTsKKyAgICBhc3NlcnQoIWRlc2MuZW51bWVyYWJsZSwga2V5KTsKKyAgICBhc3NlcnQoZGVzYy5j
b25maWd1cmFibGUsIGtleSk7Cit9CisKK2ZvciAoY29uc3QgW29iamVjdCwga2V5XSBvZiB0ZXN0
Q2FzZXMoKSkgeworICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmplY3QsIGtleSwgeyBlbnVt
ZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IGZhbHNlIH0pOworICAgIG9iamVjdFtrZXldID0g
dGVzdFZhbHVlOworCisgICAgY29uc3QgZGVzYyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2Ny
aXB0b3Iob2JqZWN0LCBrZXkpOworICAgIGFzc2VydChkZXNjLnZhbHVlID09PSB0ZXN0VmFsdWUs
IGtleSk7CisgICAgYXNzZXJ0KGRlc2Mud3JpdGFibGUsIGtleSk7CisgICAgYXNzZXJ0KGRlc2Mu
ZW51bWVyYWJsZSwga2V5KTsKKyAgICBhc3NlcnQoIWRlc2MuY29uZmlndXJhYmxlLCBrZXkpOwor
fQorCitmb3IgKGNvbnN0IFtvYmplY3QsIGtleV0gb2YgdGVzdENhc2VzKCkpIHsKKyAgICBPYmpl
Y3QuZGVmaW5lUHJvcGVydHkob2JqZWN0LCBrZXksIHsgd3JpdGFibGU6IGZhbHNlIH0pOworICAg
IHNob3VsZFRocm93KCgpID0+IHsgb2JqZWN0W2tleV0gPSB0ZXN0VmFsdWU7IH0sICJUeXBlRXJy
b3I6IEF0dGVtcHRlZCB0byBhc3NpZ24gdG8gcmVhZG9ubHkgcHJvcGVydHkuIiwga2V5KTsKKwor
ICAgIGNvbnN0IGRlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCwg
a2V5KTsKKyAgICBhc3NlcnQoZGVzYy52YWx1ZSAhPT0gdGVzdFZhbHVlLCBrZXkpOworICAgIGFz
c2VydCghZGVzYy53cml0YWJsZSwga2V5KTsKKyAgICBhc3NlcnQoIWRlc2MuZW51bWVyYWJsZSwg
a2V5KTsKKyAgICBhc3NlcnQoZGVzYy5jb25maWd1cmFibGUsIGtleSk7Cit9CisKK2ZvciAoY29u
c3QgW29iamVjdCwga2V5XSBvZiB0ZXN0Q2FzZXMoKSkgeworICAgIGNvbnN0IGhlaXIgPSBPYmpl
Y3QuY3JlYXRlKG9iamVjdCk7CisgICAgaGVpcltrZXldID0gdGVzdFZhbHVlOworCisgICAgY29u
c3QgZGVzYyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoaGVpciwga2V5KTsKKyAg
ICBhc3NlcnQoZGVzYy52YWx1ZSA9PT0gdGVzdFZhbHVlLCBrZXkpOworICAgIGFzc2VydChkZXNj
LndyaXRhYmxlLCBrZXkpOworICAgIGFzc2VydChkZXNjLmVudW1lcmFibGUsIGtleSk7CisgICAg
YXNzZXJ0KGRlc2MuY29uZmlndXJhYmxlLCBrZXkpOworICAgIGFzc2VydChvYmplY3Rba2V5XSAh
PT0gdGVzdFZhbHVlLCBrZXkpOworfQorCitmb3IgKGNvbnN0IFtvYmplY3QsIGtleV0gb2YgdGVz
dENhc2VzKCkpIHsKKyAgICBjb25zdCBwcm90b3R5cGUgPSBPYmplY3QuZ2V0UHJvdG90eXBlT2Yo
b2JqZWN0KTsKKyAgICBpZiAocHJvdG90eXBlICE9PSBudWxsKSB7CisgICAgICAgIE9iamVjdC5k
ZWZpbmVQcm9wZXJ0eShwcm90b3R5cGUsIGtleSwgeworICAgICAgICAgICAgc2V0KCkgeyB0aHJv
dyBuZXcgRXJyb3IoYCIke2tleX0iIHNldHRlciBzaG91bGQgYmUgdW5yZWFjaGFibGUhYCk7IH0s
CisgICAgICAgIH0pOworICAgIH0KKworICAgIGNvbnN0IGhlaXIgPSBPYmplY3QuY3JlYXRlKG9i
amVjdCk7CisgICAgaGVpcltrZXldID0gdGVzdFZhbHVlOworCisgICAgY29uc3QgZGVzYyA9IE9i
amVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoaGVpciwga2V5KTsKKyAgICBhc3NlcnQoZGVz
Yy52YWx1ZSA9PT0gdGVzdFZhbHVlLCBrZXkpOworICAgIGFzc2VydChkZXNjLndyaXRhYmxlLCBr
ZXkpOworICAgIGFzc2VydChkZXNjLmVudW1lcmFibGUsIGtleSk7CisgICAgYXNzZXJ0KGRlc2Mu
Y29uZmlndXJhYmxlLCBrZXkpOworICAgIGFzc2VydChvYmplY3Rba2V5XSAhPT0gdGVzdFZhbHVl
LCBrZXkpOworfQorCitmb3IgKGNvbnN0IFtvYmplY3QsIGtleV0gb2YgdGVzdENhc2VzKCkpIHsK
KyAgICBjb25zdCBoZWlyID0gT2JqZWN0LmNyZWF0ZShvYmplY3QpOworICAgIE9iamVjdC5wcmV2
ZW50RXh0ZW5zaW9ucyhoZWlyKTsKKworICAgIHNob3VsZFRocm93KCgpID0+IHsgaGVpcltrZXld
ID0gdGVzdFZhbHVlOyB9LCAiVHlwZUVycm9yOiBBdHRlbXB0ZWQgdG8gYXNzaWduIHRvIHJlYWRv
bmx5IHByb3BlcnR5LiIsIGtleSk7CisgICAgYXNzZXJ0KGhlaXJba2V5XSAhPT0gdGVzdFZhbHVl
LCBrZXkpOworICAgIGFzc2VydChvYmplY3Rba2V5XSAhPT0gdGVzdFZhbHVlLCBrZXkpOworfQor
Citmb3IgKGNvbnN0IFtvYmplY3QsIGtleV0gb2YgdGVzdENhc2VzKCkpIHsKKyAgICBjb25zdCB0
YXJnZXQgPSB7fTsKKyAgICBhc3NlcnQoUmVmbGVjdC5zZXQodGFyZ2V0LCBrZXksIHRlc3RWYWx1
ZSwgb2JqZWN0KSwga2V5KTsKKyAgICBhc3NlcnQoIXRhcmdldC5oYXNPd25Qcm9wZXJ0eShrZXkp
LCBrZXkpOworCisgICAgY29uc3QgZGVzYyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0
b3Iob2JqZWN0LCBrZXkpOworICAgIGFzc2VydChkZXNjLnZhbHVlID09PSB0ZXN0VmFsdWUsIGtl
eSk7CisgICAgYXNzZXJ0KGRlc2Mud3JpdGFibGUsIGtleSk7CisgICAgYXNzZXJ0KCFkZXNjLmVu
dW1lcmFibGUsIGtleSk7CisgICAgYXNzZXJ0KGRlc2MuY29uZmlndXJhYmxlLCBrZXkpOworfQpJ
bmRleDogSlNUZXN0cy9zdHJlc3MvcHV0LXRvLXByaW1pdGl2ZS1ub24tcmVpZmllZC1zdGF0aWMt
Y3VzdG9tLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIEpTVGVzdHMvc3RyZXNzL3B1dC10by1wcmltaXRpdmUt
bm9uLXJlaWZpZWQtc3RhdGljLWN1c3RvbS5qcwkobm9uZXhpc3RlbnQpCisrKyBKU1Rlc3RzL3N0
cmVzcy9wdXQtdG8tcHJpbWl0aXZlLW5vbi1yZWlmaWVkLXN0YXRpYy1jdXN0b20uanMJKHdvcmtp
bmcgY29weSkKQEAgLTAsMCArMSw2NCBAQAorInVzZSBzdHJpY3QiOworCitmdW5jdGlvbiBzaG91
bGRCZShhY3R1YWwsIGV4cGVjdGVkKSB7CisgICAgaWYgKGFjdHVhbCAhPT0gZXhwZWN0ZWQpCisg
ICAgICAgIHRocm93IG5ldyBFcnJvcihgQmFkIHZhbHVlOiAke2FjdHVhbH0hYCk7Cit9CisKK2Z1
bmN0aW9uIHNob3VsZFRocm93KGZ1bmMsIGVycm9yTWVzc2FnZSkgeworICAgIGxldCBlcnJvclRo
cm93biA9IGZhbHNlOworICAgIHRyeSB7CisgICAgICAgIGZ1bmMoKTsKKyAgICB9IGNhdGNoIChl
cnJvcikgeworICAgICAgICBlcnJvclRocm93biA9IHRydWU7CisgICAgICAgIGlmIChTdHJpbmco
ZXJyb3IpICE9PSBlcnJvck1lc3NhZ2UpCisgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEJh
ZCBlcnJvcjogJHtlcnJvcn1gKTsKKyAgICB9CisgICAgaWYgKCFlcnJvclRocm93bikKKyAgICAg
ICAgdGhyb3cgbmV3IEVycm9yKCJEaWRuJ3QgdGhyb3chIik7Cit9CisKK2NvbnN0IHBvaXNvbmVk
U2V0dGVyID0geyBzZXQoKSB7IHRocm93IG5ldyBFcnJvcigiT2JqZWN0LnByb3RvdHlwZSBzZXR0
ZXIgc2hvdWxkIGJlIHVucmVhY2hhYmxlISIpOyB9IH07Citjb25zdCBwcmltaXRpdmVzID0gW3Ry
dWUsIDEsICIiLCBTeW1ib2woKSwgMG5dOworCisoZnVuY3Rpb24gdGVzdFN0YXRpY0N1c3RvbVZh
bHVlKCkgeworICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKE9iamVjdC5wcm90b3R5cGUsIHsK
KyAgICAgICAgdGVzdFN0YXRpY1ZhbHVlOiBwb2lzb25lZFNldHRlciwKKyAgICAgICAgdGVzdFN0
YXRpY1ZhbHVlTm9TZXR0ZXI6IHBvaXNvbmVkU2V0dGVyLAorICAgICAgICB0ZXN0U3RhdGljVmFs
dWVSZWFkT25seTogcG9pc29uZWRTZXR0ZXIsCisgICAgfSk7CisKKyAgICBmb3IgKGNvbnN0IHBy
aW1pdGl2ZSBvZiBwcmltaXRpdmVzKSB7CisgICAgICAgIGNvbnN0IHByaW1pdGl2ZVByb3RvdHlw
ZSA9IE9iamVjdC5nZXRQcm90b3R5cGVPZihwcmltaXRpdmUpOworICAgICAgICBjb25zdCBzdGF0
aWNDdXN0b21WYWx1ZSA9ICR2bS5jcmVhdGVTdGF0aWNDdXN0b21WYWx1ZSgpOworICAgICAgICBP
YmplY3Quc2V0UHJvdG90eXBlT2YocHJpbWl0aXZlUHJvdG90eXBlLCBzdGF0aWNDdXN0b21WYWx1
ZSk7CisKKyAgICAgICAgcHJpbWl0aXZlLnRlc3RTdGF0aWNWYWx1ZSA9IDE7CisgICAgICAgIHNo
b3VsZEJlKHN0YXRpY0N1c3RvbVZhbHVlLnRlc3RTdGF0aWNWYWx1ZSwgMSk7CisgICAgICAgIHNo
b3VsZFRocm93KCgpID0+IHsgcHJpbWl0aXZlLnRlc3RTdGF0aWNWYWx1ZSA9IDE7IH0sICJUeXBl
RXJyb3I6IEF0dGVtcHRlZCB0byBhc3NpZ24gdG8gcmVhZG9ubHkgcHJvcGVydHkuIik7CisKKyAg
ICAgICAgc2hvdWxkVGhyb3coKCkgPT4geyBwcmltaXRpdmUudGVzdFN0YXRpY1ZhbHVlTm9TZXR0
ZXIgPSAxOyB9LCAiVHlwZUVycm9yOiBBdHRlbXB0ZWQgdG8gYXNzaWduIHRvIHJlYWRvbmx5IHBy
b3BlcnR5LiIpOworICAgICAgICBzaG91bGRUaHJvdygoKSA9PiB7IHByaW1pdGl2ZS50ZXN0U3Rh
dGljVmFsdWVSZWFkT25seSA9IDE7IH0sICJUeXBlRXJyb3I6IEF0dGVtcHRlZCB0byBhc3NpZ24g
dG8gcmVhZG9ubHkgcHJvcGVydHkuIik7CisgICAgICAgIE9iamVjdC5zZXRQcm90b3R5cGVPZihw
cmltaXRpdmVQcm90b3R5cGUsIE9iamVjdC5wcm90b3R5cGUpOworICAgIH0KK30pKCk7CisKKyhm
dW5jdGlvbiB0ZXN0U3RhdGljQ3VzdG9tQWNjZXNzb3IoKSB7CisgICAgT2JqZWN0LmRlZmluZVBy
b3BlcnRpZXMoT2JqZWN0LnByb3RvdHlwZSwgeworICAgICAgICB0ZXN0U3RhdGljQWNjZXNzb3I6
IHBvaXNvbmVkU2V0dGVyLAorICAgICAgICB0ZXN0U3RhdGljQWNjZXNzb3JSZWFkT25seTogcG9p
c29uZWRTZXR0ZXIsCisgICAgfSk7CisKKyAgICBmb3IgKGNvbnN0IHByaW1pdGl2ZSBvZiBwcmlt
aXRpdmVzKSB7CisgICAgICAgIGNvbnN0IHByaW1pdGl2ZVByb3RvdHlwZSA9IE9iamVjdC5nZXRQ
cm90b3R5cGVPZihwcmltaXRpdmUpOworICAgICAgICBPYmplY3Quc2V0UHJvdG90eXBlT2YocHJp
bWl0aXZlUHJvdG90eXBlLCAkdm0uY3JlYXRlU3RhdGljQ3VzdG9tQWNjZXNzb3IoKSk7CisKKyAg
ICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCAxMDAwOyBpKyspIHsKKyAgICAgICAgICAgIHByaW1p
dGl2ZS50ZXN0U3RhdGljQWNjZXNzb3IgPSBpOworICAgICAgICAgICAgc2hvdWxkQmUocHJpbWl0
aXZlUHJvdG90eXBlLnRlc3RGaWVsZCwgaSk7CisgICAgICAgIH0KKworICAgICAgICBzaG91bGRU
aHJvdygoKSA9PiB7IHByaW1pdGl2ZS50ZXN0U3RhdGljQWNjZXNzb3JSZWFkT25seSA9IDE7IH0s
ICJUeXBlRXJyb3I6IEF0dGVtcHRlZCB0byBhc3NpZ24gdG8gcmVhZG9ubHkgcHJvcGVydHkuIik7
CisgICAgICAgIE9iamVjdC5zZXRQcm90b3R5cGVPZihwcmltaXRpdmVQcm90b3R5cGUsIE9iamVj
dC5wcm90b3R5cGUpOworICAgIH0KK30pKCk7CkluZGV4OiBKU1Rlc3RzL3N0cmVzcy9wdXQtdG8t
cHJpbWl0aXZlLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEpTVGVzdHMvc3RyZXNzL3B1dC10by1wcmltaXRp
dmUuanMJKG5vbmV4aXN0ZW50KQorKysgSlNUZXN0cy9zdHJlc3MvcHV0LXRvLXByaW1pdGl2ZS5q
cwkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDI3IEBACitmdW5jdGlvbiBzaG91bGRCZShhY3R1
YWwsIGV4cGVjdGVkKSB7CisgICAgaWYgKGFjdHVhbCAhPT0gZXhwZWN0ZWQpCisgICAgICAgIHRo
cm93IG5ldyBFcnJvcihgQmFkIHZhbHVlOiAke2FjdHVhbH0hYCk7Cit9CisKK2Z1bmN0aW9uIHNo
b3VsZFRocm93KGZ1bmMsIGVycm9yTWVzc2FnZSkgeworICAgIGxldCBlcnJvclRocm93biA9IGZh
bHNlOworICAgIHRyeSB7CisgICAgICAgIGZ1bmMoKTsKKyAgICB9IGNhdGNoIChlcnJvcikgewor
ICAgICAgICBlcnJvclRocm93biA9IHRydWU7CisgICAgICAgIGlmIChTdHJpbmcoZXJyb3IpICE9
PSBlcnJvck1lc3NhZ2UpCisgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEJhZCBlcnJvcjog
JHtlcnJvcn1gKTsKKyAgICB9CisgICAgaWYgKCFlcnJvclRocm93bikKKyAgICAgICAgdGhyb3cg
bmV3IEVycm9yKCJEaWRuJ3QgdGhyb3chIik7Cit9CisKKyhmdW5jdGlvbiBzdHJpbmdMZW5ndGgo
KSB7CisgICAgbGV0IHN0ciA9ICJmb28iOworCisgICAgZm9yIChsZXQgaSA9IDA7IGkgPCAxZTU7
IGkrKykgeworICAgICAgICBzdHIubGVuZ3RoID0gMDsKKyAgICAgICAgc2hvdWxkQmUoc3RyLmxl
bmd0aCwgMyk7CisgICAgICAgIHNob3VsZFRocm93KCgpID0+IHsgInVzZSBzdHJpY3QiOyAiYmFy
Ii5sZW5ndGggPSAzOyB9LCAiVHlwZUVycm9yOiBBdHRlbXB0ZWQgdG8gYXNzaWduIHRvIHJlYWRv
bmx5IHByb3BlcnR5LiIpOworICAgIH0KK30pKCk7CkluZGV4OiBKU1Rlc3RzL3N0cmVzcy9wdXQt
dG8tcHJvdG8tY2hhaW4tb3ZlcnJpZGVzLXB1dC5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKU1Rlc3RzL3N0
cmVzcy9wdXQtdG8tcHJvdG8tY2hhaW4tb3ZlcnJpZGVzLXB1dC5qcwkobm9uZXhpc3RlbnQpCisr
KyBKU1Rlc3RzL3N0cmVzcy9wdXQtdG8tcHJvdG8tY2hhaW4tb3ZlcnJpZGVzLXB1dC5qcwkod29y
a2luZyBjb3B5KQpAQCAtMCwwICsxLDE0MiBAQAorY29uc3QgVEVTVF9WQUxVRSA9IDEwNjI2MzA3
MTM7IC8vIEFycmF5J3MgImxlbmd0aCIgaXMgcmVxdWlyZWQgdG8gYmUgaW50MzIKKwordGVzdFNl
dFJlc3VsdChbMSwgMl0sICJsZW5ndGgiLCB0cnVlKTsKK3Rlc3RTZXRSZXN1bHQoCisgICAgT2Jq
ZWN0LmRlZmluZVByb3BlcnR5KG5ldyBBcnJheSwgImxlbmd0aCIsIHsgd3JpdGFibGU6IGZhbHNl
IH0pLAorICAgICJsZW5ndGgiLAorICAgIGZhbHNlLAorKTsKKwordGVzdFNldFJlc3VsdChuZXcg
U3RyaW5nLCAibGVuZ3RoIiwgZmFsc2UpOwordGVzdFNldFJlc3VsdChuZXcgUmVnRXhwLCAibGFz
dEluZGV4IiwgdHJ1ZSk7Cit0ZXN0U2V0UmVzdWx0KAorICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0
eSgvKD86KS9nLCAibGFzdEluZGV4IiwgeyB3cml0YWJsZTogZmFsc2UgfSksCisgICAgImxhc3RJ
bmRleCIsCisgICAgZmFsc2UsCispOworCitmb3IgKGNvbnN0IGtleSBvZiBbImxpbmUiLCAiY29s
dW1uIiwgInNvdXJjZVVSTCIsICJzdGFjayJdKQorICAgIHRlc3RTZXRSZXN1bHQobmV3IEVycm9y
LCBrZXksIHRydWUpOworCitjb25zdCBtYXBwZWRBcmd1bWVudHMgPSAoZnVuY3Rpb24oYSwgYikg
eyByZXR1cm4gYXJndW1lbnRzOyB9KSgxLCAyKTsKK3Rlc3RTZXRSZXN1bHQobWFwcGVkQXJndW1l
bnRzLCAiY2FsbGVlIiwgdHJ1ZSk7Cit0ZXN0U2V0UmVzdWx0KG1hcHBlZEFyZ3VtZW50cywgImxl
bmd0aCIsIHRydWUpOwordGVzdFNldFJlc3VsdChtYXBwZWRBcmd1bWVudHMsIFN5bWJvbC5pdGVy
YXRvciwgdHJ1ZSk7CisKK2NvbnN0IHVubWFwcGVkQXJndW1lbnRzID0gKGZ1bmN0aW9uKCkgeyAi
dXNlIHN0cmljdCI7IHJldHVybiBhcmd1bWVudHM7IH0pKCk7Cit0ZXN0U2V0UmVzdWx0KHVubWFw
cGVkQXJndW1lbnRzLCAibGVuZ3RoIiwgdHJ1ZSk7Cit0ZXN0U2V0UmVzdWx0KHVubWFwcGVkQXJn
dW1lbnRzLCBTeW1ib2wuaXRlcmF0b3IsIHRydWUpOworCit2YXIgZm9vOworZnVuY3Rpb24gYmFy
KCkge30KK2ZvciAoY29uc3Qga2V5IG9mIFsiZm9vIiwgImJhciIsICJwYXJzZUludCJdKQorICAg
IHRlc3RTZXRSZXN1bHQoZ2xvYmFsVGhpcywga2V5LCB0cnVlKTsKKworZm9yIChjb25zdCBrZXkg
b2YgWyJJbmZpbml0eSIsICJOYU4iLCAidW5kZWZpbmVkIl0pCisgICAgdGVzdFNldFJlc3VsdChn
bG9iYWxUaGlzLCBrZXksIGZhbHNlKTsKKworZm9yIChjb25zdCBrZXkgb2YgWyJuYW1lIiwgImxl
bmd0aCJdKSB7CisgICAgdGVzdFNldFJlc3VsdChmdW5jdGlvbigpIHt9LmJpbmQoKSwga2V5LCBm
YWxzZSk7CisgICAgdGVzdFNldFJlc3VsdCgKKyAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5
KGZ1bmN0aW9uKCkge30sIGtleSwgeyB3cml0YWJsZTogdHJ1ZSB9KSwKKyAgICAgICAga2V5LAor
ICAgICAgICB0cnVlLAorICAgICk7CisKKyAgICB0ZXN0U2V0UmVzdWx0KCgpID0+IHsgInVzZSBz
dHJpY3QiOyB9LCBrZXksIGZhbHNlKTsKKyAgICB0ZXN0U2V0UmVzdWx0KAorICAgICAgICBPYmpl
Y3QuZGVmaW5lUHJvcGVydHkocGFyc2VGbG9hdCwga2V5LCB7IHdyaXRhYmxlOiB0cnVlIH0pLAor
ICAgICAgICBrZXksCisgICAgICAgIHRydWUsCisgICAgKTsKK30KKwordGVzdFNldFJlc3VsdChm
dW5jdGlvbigpIHsgInVzZSBzdHJpY3QiOyB9LCAicHJvdG90eXBlIiwgdHJ1ZSk7Cit0ZXN0U2V0
UmVzdWx0KAorICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShmdW5jdGlvbigpIHt9LCAicHJvdG90
eXBlIiwgeyB3cml0YWJsZTogZmFsc2UgfSksCisgICAgInByb3RvdHlwZSIsCisgICAgZmFsc2Us
CispOworCit0ZXN0U2V0UmVzdWx0KGZ1bmN0aW9uKCkge30sICJhcmd1bWVudHMiLCBmYWxzZSk7
Cit0ZXN0U2V0UmVzdWx0KGZ1bmN0aW9uKCkge30sICJjYWxsZXIiLCBmYWxzZSk7CisKKy8vID09
PSBoYXJuZXNzID09PQorCitmdW5jdGlvbiB0ZXN0U2V0UmVzdWx0KHRhcmdldCwga2V5LCBleHBl
Y3RlZFJlc3VsdCkgeworICAgIGxldCBjbGVhblVwID0gcHV0U2V0dGVyT25Qcm90b3R5cGUodGFy
Z2V0LCBrZXksICgpID0+IHt9KTsKKworICAgIGZvciAoY29uc3QgcHJpbWl0aXZlIG9mIFt0cnVl
LCAxLCAiZm9vIiwgU3ltYm9sKCksIDBuXSkgeworICAgICAgICBjb25zdCBwcmltaXRpdmVQcm90
b3R5cGUgPSBPYmplY3QuZ2V0UHJvdG90eXBlT2YocHJpbWl0aXZlKTsKKyAgICAgICAgT2JqZWN0
LnNldFByb3RvdHlwZU9mKHByaW1pdGl2ZVByb3RvdHlwZSwgdGFyZ2V0KTsKKyAgICAgICAgdGVz
dFNldFJlc3VsdEludGVybmFsKHRhcmdldCwga2V5LCBwcmltaXRpdmUsIGZhbHNlKTsKKyAgICAg
ICAgT2JqZWN0LnNldFByb3RvdHlwZU9mKHByaW1pdGl2ZVByb3RvdHlwZSwgT2JqZWN0LnByb3Rv
dHlwZSk7CisgICAgfQorCisgICAgY2xlYW5VcCgpOworICAgIGNsZWFuVXAgPSBwdXRTZXR0ZXJP
blByb3RvdHlwZSh0YXJnZXQsIGtleSwgKCkgPT4geworICAgICAgICB0aHJvdyBuZXcgRXJyb3Io
YCR7U3RyaW5nKGtleSl9IHNldHRlciBzaG91bGQgYmUgdW5yZWFjaGFibGUhYCk7CisgICAgfSk7
CisKKyAgICBmb3IgKGNvbnN0IHJlY2VpdmVyIG9mIFsKKyAgICAgICAgT2JqZWN0LmNyZWF0ZSh0
YXJnZXQpLAorICAgICAgICBPYmplY3QuY3JlYXRlKE9iamVjdC5jcmVhdGUodGFyZ2V0KSksCisg
ICAgICAgIG5ldyBQcm94eSh0YXJnZXQsIHt9KSwKKyAgICAgICAgbmV3IFByb3h5KHRhcmdldCwg
UmVmbGVjdCksCisgICAgXSkKKyAgICAgICAgdGVzdFNldFJlc3VsdEludGVybmFsKHRhcmdldCwg
a2V5LCByZWNlaXZlciwgZXhwZWN0ZWRSZXN1bHQpOworCisgICAgY2xlYW5VcCgpOworfQorCitm
dW5jdGlvbiBwdXRTZXR0ZXJPblByb3RvdHlwZSh0YXJnZXQsIGtleSwgc2V0KSB7CisgICAgY29u
c3QgZGVzY3JpcHRvciA9IHsgc2V0LCBjb25maWd1cmFibGU6IHRydWUgfTsKKyAgICBjb25zdCBj
dXJyZW50UHJvdG90eXBlID0gT2JqZWN0LmdldFByb3RvdHlwZU9mKHRhcmdldCk7CisgICAgY29u
c3QgbmV3UHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShudWxsLCB7IFtrZXldOiBkZXNjcmlwdG9y
IH0pOworCisgICAgaWYgKFJlZmxlY3Quc2V0UHJvdG90eXBlT2YodGFyZ2V0LCBuZXdQcm90b3R5
cGUpKQorICAgICAgICByZXR1cm4gKCkgPT4geyBPYmplY3Quc2V0UHJvdG90eXBlT2YodGFyZ2V0
LCBjdXJyZW50UHJvdG90eXBlKTsgfTsKKworICAgIGlmIChjdXJyZW50UHJvdG90eXBlICE9PSBu
dWxsICYmIFJlZmxlY3QuZGVmaW5lUHJvcGVydHkoY3VycmVudFByb3RvdHlwZSwga2V5LCBkZXNj
cmlwdG9yKSkKKyAgICAgICAgcmV0dXJuICgpID0+IHsgInVzZSBzdHJpY3QiOyBkZWxldGUgY3Vy
cmVudFByb3RvdHlwZVtrZXldOyB9OworCisgICAgdGhyb3cgbmV3IEVycm9yKCJUaGlzIGlzIHVu
cmVhY2hhYmxlOiBhdCBsZWFzdCBvbmUgYXBwcm9hY2ggc2hvdWxkIHN1Y2NlZWQhIik7Cit9CisK
K2Z1bmN0aW9uIHRlc3RTZXRSZXN1bHRJbnRlcm5hbCh0YXJnZXQsIGtleSwgcmVjZWl2ZXIsIGV4
cGVjdGVkUmVzdWx0KSB7CisgICAgcmVjZWl2ZXJba2V5XSA9IFRFU1RfVkFMVUU7CisgICAgc2hv
dWxkQmUocmVjZWl2ZXJba2V5XSA9PT0gVEVTVF9WQUxVRSwgZXhwZWN0ZWRSZXN1bHQsIGtleSk7
CisKKyAgICB0ZXN0U2V0UmVzdWx0U3RyaWN0KHJlY2VpdmVyLCBrZXksIGV4cGVjdGVkUmVzdWx0
KTsKKworICAgIGlmIChyZWNlaXZlciA9PT0gT2JqZWN0KHJlY2VpdmVyKSkKKyAgICAgICAgc2hv
dWxkQmUoUmVmbGVjdC5zZXQocmVjZWl2ZXIsIGtleSwgVEVTVF9WQUxVRSksIGV4cGVjdGVkUmVz
dWx0LCBrZXkpOworICAgIHNob3VsZEJlKFJlZmxlY3Quc2V0KHRhcmdldCwga2V5LCBURVNUX1ZB
TFVFLCByZWNlaXZlciksIGV4cGVjdGVkUmVzdWx0LCBrZXkpOworfQorCitmdW5jdGlvbiB0ZXN0
U2V0UmVzdWx0U3RyaWN0KHJlY2VpdmVyLCBrZXksIGV4cGVjdGVkUmVzdWx0KSB7CisgICAgInVz
ZSBzdHJpY3QiOworICAgIGlmIChleHBlY3RlZFJlc3VsdCkgeworICAgICAgICByZWNlaXZlcltr
ZXldID0gVEVTVF9WQUxVRTsKKyAgICAgICAgc2hvdWxkQmUocmVjZWl2ZXJba2V5XSwgVEVTVF9W
QUxVRSwga2V5KTsKKyAgICB9IGVsc2UKKyAgICAgICAgc2hvdWxkVGhyb3dUeXBlRXJyb3IoKCkg
PT4geyByZWNlaXZlcltrZXldID0gVEVTVF9WQUxVRTsgfSwga2V5KTsKK30KKworZnVuY3Rpb24g
c2hvdWxkQmUoYWN0dWFsLCBleHBlY3RlZCwga2V5KSB7CisgICAgaWYgKGFjdHVhbCAhPT0gZXhw
ZWN0ZWQpCisgICAgICAgIHRocm93IG5ldyBFcnJvcihgS2V5OiAke1N0cmluZyhrZXkpfS4gJHth
Y3R1YWx9ICE9PSAke2V4cGVjdGVkfWApOworfQorCitmdW5jdGlvbiBzaG91bGRUaHJvd1R5cGVF
cnJvcihmdW5jLCBrZXkpIHsKKyAgICBsZXQgZXJyb3JUaHJvd24gPSBmYWxzZTsKKyAgICB0cnkg
eworICAgICAgICBmdW5jKCk7CisgICAgfSBjYXRjaCAoZXJyb3IpIHsKKyAgICAgICAgZXJyb3JU
aHJvd24gPSB0cnVlOworICAgICAgICBpZiAoZXJyb3IuY29uc3RydWN0b3IgIT09IFR5cGVFcnJv
cikKKyAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgS2V5OiAke1N0cmluZyhrZXkpfS4gQmFk
IGVycm9yOiAke2Vycm9yfWApOworICAgIH0KKyAgICBpZiAoIWVycm9yVGhyb3duKQorICAgICAg
ICB0aHJvdyBuZXcgRXJyb3IoYEtleTogJHtTdHJpbmcoa2V5KX0uIERpZG4ndCB0aHJvdyFgKTsK
K30KSW5kZXg6IEpTVGVzdHMvc3RyZXNzL3R5cGVkLWFycmF5LWNhbm9uaWNhbC1udW1lcmljLWlu
ZGV4LXN0cmluZy1zZXQuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSlNUZXN0cy9zdHJlc3MvdHlwZWQtYXJy
YXktY2Fub25pY2FsLW51bWVyaWMtaW5kZXgtc3RyaW5nLXNldC5qcwkobm9uZXhpc3RlbnQpCisr
KyBKU1Rlc3RzL3N0cmVzcy90eXBlZC1hcnJheS1jYW5vbmljYWwtbnVtZXJpYy1pbmRleC1zdHJp
bmctc2V0LmpzCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTggQEAKKyd1c2Ugc3RyaWN0JzsK
K2NvbnN0IFR5cGVkQXJyYXlzID0gW1VpbnQ4Q2xhbXBlZEFycmF5LCBVaW50OEFycmF5LCBVaW50
MTZBcnJheSwgVWludDMyQXJyYXksIEludDhBcnJheSwgSW50MTZBcnJheSwgSW50MzJBcnJheSwg
RmxvYXQzMkFycmF5LCBGbG9hdDY0QXJyYXldOworY29uc3QgY2Fub25pY2FsTnVtZXJpY0luZGV4
U3RyaW5ncyA9IFsnLTAnLCAnLTEnLCAnLTMuMTQnLCAnSW5maW5pdHknLCAnLUluZmluaXR5Jywg
J05hTicsICcwLjUnLCAnNDI5NDk2NzI5NScsICc0Mjk0OTY3Mjk2J107CisKK2Z1bmN0aW9uIGFz
c2VydCh4LCBrZXkpIHsKKyAgICBpZiAoIXgpCisgICAgICAgIHRocm93IG5ldyBFcnJvcihgQmFk
IGFzc2VydGlvbiEgS2V5OiAnJHtrZXl9J2ApOworfQorCitmb3IgKGNvbnN0IFR5cGVkQXJyYXkg
b2YgVHlwZWRBcnJheXMpIHsKKyAgICBmb3IgKGNvbnN0IGtleSBvZiBjYW5vbmljYWxOdW1lcmlj
SW5kZXhTdHJpbmdzKSB7CisgICAgICAgIGNvbnN0IGFzc2VydFByb3RvdHlwZVByb3BlcnR5SXNV
bnJlYWNoYWJsZSA9ICgpID0+IHsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBjb25z
dCB0QSA9IG5ldyBUeXBlZEFycmF5OworICAgICAgICAgICAgICAgIHRBW2tleV0gPSAxOworICAg
ICAgICAgICAgICAgIGFzc2VydCghdEEuaGFzT3duUHJvcGVydHkoa2V5KSwga2V5KTsKKyAgICAg
ICAgICAgIH0KKworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGNvbnN0IHRBID0gbmV3
IFR5cGVkQXJyYXk7CisgICAgICAgICAgICAgICAgY29uc3QgaGVpciA9IE9iamVjdC5jcmVhdGUo
dEEpOworICAgICAgICAgICAgICAgIGhlaXJba2V5XSA9IDI7CisKKyAgICAgICAgICAgICAgICBh
c3NlcnQoIXRBLmhhc093blByb3BlcnR5KGtleSksIGtleSk7CisgICAgICAgICAgICAgICAgYXNz
ZXJ0KCFoZWlyLmhhc093blByb3BlcnR5KGtleSksIGtleSk7CisgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBjb25zdCB0YXJnZXQgPSB7fTsKKyAgICAgICAg
ICAgICAgICBjb25zdCByZWNlaXZlciA9IG5ldyBUeXBlZEFycmF5OworCisgICAgICAgICAgICAg
ICAgYXNzZXJ0KCFSZWZsZWN0LnNldCh0YXJnZXQsIGtleSwgMywgcmVjZWl2ZXIpLCBrZXkpOwor
ICAgICAgICAgICAgICAgIGFzc2VydCghdGFyZ2V0Lmhhc093blByb3BlcnR5KGtleSksIGtleSk7
CisgICAgICAgICAgICAgICAgYXNzZXJ0KCFyZWNlaXZlci5oYXNPd25Qcm9wZXJ0eShrZXkpLCBr
ZXkpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgY29u
c3QgdEEgPSBuZXcgVHlwZWRBcnJheTsKKyAgICAgICAgICAgICAgICBjb25zdCB0YXJnZXQgPSBP
YmplY3QuY3JlYXRlKHRBKTsKKyAgICAgICAgICAgICAgICBjb25zdCByZWNlaXZlciA9IHt9Owor
CisgICAgICAgICAgICAgICAgYXNzZXJ0KFJlZmxlY3Quc2V0KHRhcmdldCwga2V5LCA0LCByZWNl
aXZlciksIGtleSk7CisgICAgICAgICAgICAgICAgYXNzZXJ0KCF0QS5oYXNPd25Qcm9wZXJ0eShr
ZXkpLCBrZXkpOworICAgICAgICAgICAgICAgIGFzc2VydCghdGFyZ2V0Lmhhc093blByb3BlcnR5
KGtleSksIGtleSk7CisgICAgICAgICAgICAgICAgYXNzZXJ0KCFyZWNlaXZlci5oYXNPd25Qcm9w
ZXJ0eShrZXkpLCBrZXkpOworICAgICAgICAgICAgfQorICAgICAgICB9OworCisgICAgICAgIE9i
amVjdC5kZWZpbmVQcm9wZXJ0eShUeXBlZEFycmF5LnByb3RvdHlwZSwga2V5LCB7CisgICAgICAg
ICAgICBzZXQoKSB7IHRocm93IG5ldyBFcnJvcihgJHtUeXBlZEFycmF5Lm5hbWV9LnByb3RvdHlw
ZVsnJHtrZXl9J10gc2V0dGVyIHNob3VsZCBiZSB1bnJlYWNoYWJsZSFgKTsgfSwKKyAgICAgICAg
ICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSwKKyAgICAgICAgfSk7CisgICAgICAgIGFzc2VydFByb3Rv
dHlwZVByb3BlcnR5SXNVbnJlYWNoYWJsZSgpOworCisgICAgICAgIE9iamVjdC5kZWZpbmVQcm9w
ZXJ0eShUeXBlZEFycmF5LnByb3RvdHlwZSwga2V5LCB7IHdyaXRhYmxlOiBmYWxzZSB9KTsKKyAg
ICAgICAgYXNzZXJ0UHJvdG90eXBlUHJvcGVydHlJc1VucmVhY2hhYmxlKCk7CisgICAgfQorfQpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCShyZXZpc2lvbiAyNzc5NDgpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTE3IEBA
CisyMDIxLTA1LTI0ICBBbGV4ZXkgU2h2YXlrYSAgPHNodmFpa2FsZXNoQGdtYWlsLmNvbT4KKwor
ICAgICAgICBSZS1sYW5kIHIyNzY1OTIgd2l0aCBhIGZpeCBmb3Igb3BhcXVlIEFQSSBvYmplY3Rz
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjYxODUK
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICByMjc2NTky
IGF0dGVtcHRlZCB0byBwcmVzZXJ2ZSBvbGQgYmVoYXZpb3IgZm9yIG9wYXF1ZSBvYmplY3RzIChs
aWtlIEpTQ2FsbGJhY2tPYmplY3QpCisgICAgICAgIGJ5IG1ha2luZyB0aGVtIGNhbGwgT3JkaW5h
cnlTZXQgZm9yIGFsdGVyZWQgcmVjZWl2ZXJzLgorCisgICAgICAgIEVpdGhlciB0aGF0IHdhc24n
dCBlcXVpdmFsZW50LCBvciBiZWNhdXNlIHN1Y2ggYSBjaGVjayB3YXMgZGVsaWJlcmF0ZWx5IG1p
c3NpbmcgZnJvbQorICAgICAgICBSdW50aW1lT2JqZWN0OjpwdXQoKSwgYSBmZXcgbmF0aXZlIGFw
cHMgKG5hbWVseSwgR29vZ2xlIFNoZWV0cyBhbmQgU25hcCBDYW1lcmEpIGRpZAorICAgICAgICBi
cmVhay4gUnVudGltZU9iamVjdCBpbnN0YW5jZXMgbWF5IGJlIGJlaGluZCBzb21lIGtpbmQgb2Yg
YSBwcm94eSB0aGF0IGNvdWxkbid0IGJlCisgICAgICAgIHVud3JhcHBlZCBmcm9tIEpTQy4KKwor
ICAgICAgICBUaGlzIHBhdGNoIHRha2VzIG11Y2ggc2FmZXIgYXBwcm9hY2ggYnkgbm90IGludm9r
aW5nIHB1dCgpIGZvciBzdWNoIG9iamVjdHMgaW4KKyAgICAgICAgcHJvdG90eXBlIGNoYWluLCBk
ZXRlY3RlZCB2aWEgb3V0IG9mIGxpbmUgdHlwZSBpbmZvIGZsYWcuCisKKyAgICAgICAgQWxzbywg
cmVtb3ZlcyBpbnZhcmlhbnQgdGhhdCBwdXQoKSBvdmVycmlkZSBpcyByZXF1aXJlZCB0byBpbXBs
ZW1lbnQgY3VzdG9tCisgICAgICAgIFtbRGVmaW5lT3duUHJvcGVydHldXSwgd2hpY2ggaXMgbm93
IGJyb2tlbiBieSBXaW5kb3dQcm9wZXJ0aWVzIG9iamVjdC4KKworICAgICAgICAqIEFQSS9KU0Nh
bGxiYWNrT2JqZWN0Lmg6CisgICAgICAgICogQVBJL3Rlc3RzL3Rlc3RhcGlTY3JpcHRzL3Rlc3Rh
cGkuanM6CisgICAgICAgICogZGVidWdnZXIvRGVidWdnZXJTY29wZS5oOgorICAgICAgICAqIHJ1
bnRpbWUvQ2xhc3NJbmZvLmg6CisgICAgICAgICogcnVudGltZS9DbG9uZWRBcmd1bWVudHMuaDoK
KyAgICAgICAgKiBydW50aW1lL0N1c3RvbUdldHRlclNldHRlci5jcHA6CisgICAgICAgIChKU0M6
OmNhbGxDdXN0b21TZXR0ZXIpOiBEZWxldGVkLgorICAgICAgICAqIHJ1bnRpbWUvQ3VzdG9tR2V0
dGVyU2V0dGVyLmg6CisgICAgICAgICogcnVudGltZS9FcnJvckNvbnN0cnVjdG9yLmg6CisgICAg
ICAgICogcnVudGltZS9FcnJvckluc3RhbmNlLmg6CisgICAgICAgICogcnVudGltZS9HZW5lcmlj
QXJndW1lbnRzLmg6CisgICAgICAgICogcnVudGltZS9HZW5lcmljQXJndW1lbnRzSW5saW5lcy5o
OgorICAgICAgICAoSlNDOjpHZW5lcmljQXJndW1lbnRzPFR5cGU+OjpwdXQpOgorICAgICAgICAq
IHJ1bnRpbWUvR2V0dGVyU2V0dGVyLmg6CisgICAgICAgICogcnVudGltZS9KU0FycmF5LmNwcDoK
KyAgICAgICAgKEpTQzo6SlNBcnJheTo6cHV0KToKKyAgICAgICAgKiBydW50aW1lL0pTQXJyYXku
aDoKKyAgICAgICAgKiBydW50aW1lL0pTQXJyYXlCdWZmZXJWaWV3LmNwcDoKKyAgICAgICAgKEpT
Qzo6SlNBcnJheUJ1ZmZlclZpZXc6OnB1dCk6IERlbGV0ZWQuCisgICAgICAgICogcnVudGltZS9K
U0FycmF5QnVmZmVyVmlldy5oOgorICAgICAgICAqIHJ1bnRpbWUvSlNDSlNWYWx1ZS5jcHA6Cisg
ICAgICAgIChKU0M6OkpTVmFsdWU6OnB1dFRvUHJpbWl0aXZlKToKKyAgICAgICAgKiBydW50aW1l
L0pTQ2VsbC5jcHA6CisgICAgICAgIChKU0M6OkpTQ2VsbDo6ZG9QdXRQcm9wZXJ0eVNlY3VyaXR5
Q2hlY2spOiBEZWxldGVkLgorICAgICAgICAqIHJ1bnRpbWUvSlNDZWxsLmg6CisgICAgICAgICog
cnVudGltZS9KU0Z1bmN0aW9uLmNwcDoKKyAgICAgICAgKEpTQzo6SlNGdW5jdGlvbjo6cHV0KToK
KyAgICAgICAgKiBydW50aW1lL0pTRnVuY3Rpb24uaDoKKyAgICAgICAgKiBydW50aW1lL0pTR2Vu
ZXJpY1R5cGVkQXJyYXlWaWV3Lmg6CisgICAgICAgICogcnVudGltZS9KU0dsb2JhbExleGljYWxF
bnZpcm9ubWVudC5oOgorICAgICAgICAqIHJ1bnRpbWUvSlNHbG9iYWxPYmplY3QuY3BwOgorICAg
ICAgICAoSlNDOjpKU0dsb2JhbE9iamVjdDo6cHV0KToKKyAgICAgICAgKiBydW50aW1lL0pTR2xv
YmFsT2JqZWN0Lmg6CisgICAgICAgICogcnVudGltZS9KU0xleGljYWxFbnZpcm9ubWVudC5oOgor
ICAgICAgICAqIHJ1bnRpbWUvSlNNb2R1bGVFbnZpcm9ubWVudC5oOgorICAgICAgICAqIHJ1bnRp
bWUvSlNNb2R1bGVOYW1lc3BhY2VPYmplY3QuaDoKKyAgICAgICAgKiBydW50aW1lL0pTT2JqZWN0
LmNwcDoKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmdldE93blByb3BlcnR5U2xvdCk6CisgICAg
ICAgIChKU0M6OkpTT2JqZWN0OjpwdXRJbmxpbmVTbG93KToKKyAgICAgICAgKEpTQzo6ZGVmaW5l
UHJvcGVydHlPblJlY2VpdmVyU2xvdyk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpkZWZpbmVQ
cm9wZXJ0eU9uUmVjZWl2ZXIpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6cHV0SW5saW5lRmFz
dFJlcGxhY2luZ1N0YXRpY1Byb3BlcnR5SWZOZWVkZWQpOgorICAgICAgICAoSlNDOjpKU09iamVj
dDo6aGFzRW51bWVyYWJsZVByb3BlcnR5IGNvbnN0KToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6
OmRvUHV0UHJvcGVydHlTZWN1cml0eUNoZWNrKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6SlNP
YmplY3Q6OnByb3RvdHlwZUNoYWluTWF5SW50ZXJjZXB0U3RvcmVUbyk6IERlbGV0ZWQuCisgICAg
ICAgICogcnVudGltZS9KU09iamVjdC5oOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6cHV0QnlJ
bmRleElubGluZSk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpoYXNOb25SZWlmaWVkU3RhdGlj
UHJvcGVydGllcyk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eVNsb3Qp
OgorICAgICAgICAoSlNDOjpKU09iamVjdDo6cHV0RGlyZWN0KToKKyAgICAgICAgKEpTQzo6SlNP
YmplY3Q6OmRvUHV0UHJvcGVydHlTZWN1cml0eUNoZWNrKTogRGVsZXRlZC4KKyAgICAgICAgKiBy
dW50aW1lL0pTT2JqZWN0SW5saW5lcy5oOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6Y2FuUGVy
Zm9ybUZhc3RQdXRJbmxpbmVFeGNsdWRpbmdQcm90byk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0
OjpwdXRJbmxpbmVGb3JKU09iamVjdCk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpwdXRJbmxp
bmVGYXN0KToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OnB1dERpcmVjdEludGVybmFsKToKKyAg
ICAgICAgKiBydW50aW1lL0pTUHJveHkuaDoKKyAgICAgICAgKiBydW50aW1lL0pTVHlwZUluZm8u
aDoKKyAgICAgICAgKEpTQzo6VHlwZUluZm86Omhhc1N0YXRpY1Byb3BlcnR5VGFibGUgY29uc3Qp
OgorICAgICAgICAoSlNDOjpUeXBlSW5mbzo6b3ZlcnJpZGVzUHV0IGNvbnN0KToKKyAgICAgICAg
KEpTQzo6VHlwZUluZm86OmlzT3BhcXVlQVBJT2JqZWN0IGNvbnN0KToKKyAgICAgICAgKEpTQzo6
VHlwZUluZm86OmdldE93blByb3BlcnR5U2xvdE1heUJlV3JvbmdBYm91dERvbnRFbnVtIGNvbnN0
KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6VHlwZUluZm86Omhhc1B1dFByb3BlcnR5U2VjdXJp
dHlDaGVjayBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgICogcnVudGltZS9Mb29rdXAuaDoKKyAg
ICAgICAgKEpTQzo6cHV0RW50cnkpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpsb29rdXBQdXQp
OiBEZWxldGVkLgorICAgICAgICAqIHJ1bnRpbWUvUHJvcGVydHlTbG90Lmg6CisgICAgICAgICog
cnVudGltZS9Qcm94eU9iamVjdC5jcHA6CisgICAgICAgIChKU0M6OlByb3h5T2JqZWN0OjpwdXQp
OgorICAgICAgICAqIHJ1bnRpbWUvUHJveHlPYmplY3QuaDoKKyAgICAgICAgKiBydW50aW1lL1B1
dFByb3BlcnR5U2xvdC5oOgorICAgICAgICAoSlNDOjpQdXRQcm9wZXJ0eVNsb3Q6OlB1dFByb3Bl
cnR5U2xvdCk6CisgICAgICAgIChKU0M6OlB1dFByb3BlcnR5U2xvdDo6Y29udGV4dCBjb25zdCk6
CisgICAgICAgIChKU0M6OlB1dFByb3BlcnR5U2xvdDo6aXNUYWludGVkQnlPcGFxdWVPYmplY3Qg
Y29uc3QpOgorICAgICAgICAoSlNDOjpQdXRQcm9wZXJ0eVNsb3Q6OnNldElzVGFpbnRlZEJ5T3Bh
cXVlT2JqZWN0KToKKyAgICAgICAgKiBydW50aW1lL1JlZmxlY3RPYmplY3QuY3BwOgorICAgICAg
ICAoSlNDOjpKU0NfREVGSU5FX0hPU1RfRlVOQ1RJT04pOgorICAgICAgICAqIHJ1bnRpbWUvUmVn
RXhwT2JqZWN0LmNwcDoKKyAgICAgICAgKEpTQzo6UmVnRXhwT2JqZWN0OjpwdXQpOgorICAgICAg
ICAqIHJ1bnRpbWUvUmVnRXhwT2JqZWN0Lmg6CisgICAgICAgICogcnVudGltZS9TdHJpbmdPYmpl
Y3QuY3BwOgorICAgICAgICAoSlNDOjpTdHJpbmdPYmplY3Q6OnB1dCk6CisgICAgICAgICogcnVu
dGltZS9TdHJpbmdPYmplY3QuaDoKKyAgICAgICAgKiBydW50aW1lL1N0cmluZ1Byb3RvdHlwZS5j
cHA6CisgICAgICAgIChKU0M6OlN0cmluZ1Byb3RvdHlwZTo6ZmluaXNoQ3JlYXRpb24pOgorICAg
ICAgICAoSlNDOjpTdHJpbmdQcm90b3R5cGU6OmNyZWF0ZSk6CisgICAgICAgICogcnVudGltZS9T
dHJpbmdQcm90b3R5cGUuaDoKKyAgICAgICAgKiBydW50aW1lL1N0cnVjdHVyZS5jcHA6CisgICAg
ICAgIChKU0M6OlN0cnVjdHVyZTo6dmFsaWRhdGVGbGFncyk6CisgICAgICAgICogcnVudGltZS9T
dHJ1Y3R1cmUuaDoKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlOjpoYXNOb25SZWlmaWVkU3RhdGlj
UHJvcGVydGllcyBjb25zdCk6CisgICAgICAgICogdG9vbHMvSlNEb2xsYXJWTS5jcHA6CisKIDIw
MjEtMDUtMjMgIENocmlzIER1bWV6ICA8Y2R1bWV6QGFwcGxlLmNvbT4KIAogICAgICAgICBNYWtl
IENoZWNrZWRMb2NrIHRoZSBkZWZhdWx0IExvY2sKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9BUEkvSlNDYWxsYmFja09iamVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9BUEkvSlNDYWxsYmFja09iamVjdC5oCShyZXZpc2lvbiAyNzc5NDgpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQVBJL0pTQ2FsbGJhY2tPYmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAt
MTI5LDcgKzEyOSw3IEBAIHRlbXBsYXRlIDxjbGFzcyBQYXJlbnQ+CiBjbGFzcyBKU0NhbGxiYWNr
T2JqZWN0IGZpbmFsIDogcHVibGljIFBhcmVudCB7CiBwdWJsaWM6CiAgICAgdXNpbmcgQmFzZSA9
IFBhcmVudDsKLSAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0g
QmFzZTo6U3RydWN0dXJlRmxhZ3MgfCBPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3QgfCBPdmVy
cmlkZXNHZXRPd25TcGVjaWFsUHJvcGVydHlOYW1lcyB8IE92ZXJyaWRlc0dldENhbGxEYXRhIHwg
SW50ZXJjZXB0c0dldE93blByb3BlcnR5U2xvdEJ5SW5kZXhFdmVuV2hlbkxlbmd0aElzTm90WmVy
byB8IEltcGxlbWVudHNIYXNJbnN0YW5jZSB8IFByb2hpYml0c1Byb3BlcnR5Q2FjaGluZyB8IEdl
dE93blByb3BlcnR5U2xvdE1heUJlV3JvbmdBYm91dERvbnRFbnVtOworICAgIHN0YXRpYyBjb25z
dGV4cHIgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8IE92
ZXJyaWRlc0dldE93blByb3BlcnR5U2xvdCB8IE92ZXJyaWRlc0dldE93blNwZWNpYWxQcm9wZXJ0
eU5hbWVzIHwgT3ZlcnJpZGVzR2V0Q2FsbERhdGEgfCBPdmVycmlkZXNQdXQgfCBJbnRlcmNlcHRz
R2V0T3duUHJvcGVydHlTbG90QnlJbmRleEV2ZW5XaGVuTGVuZ3RoSXNOb3RaZXJvIHwgSW1wbGVt
ZW50c0hhc0luc3RhbmNlIHwgUHJvaGliaXRzUHJvcGVydHlDYWNoaW5nIHwgSXNPcGFxdWVBUElP
YmplY3Q7CiAgICAgc3RhdGljX2Fzc2VydCghKFN0cnVjdHVyZUZsYWdzICYgSW1wbGVtZW50c0Rl
ZmF1bHRIYXNJbnN0YW5jZSksICJ1c2luZyBjdXN0b21IYXNJbnN0YW5jZSIpOwogCiAgICAgfkpT
Q2FsbGJhY2tPYmplY3QoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvdGVzdHMv
dGVzdGFwaVNjcmlwdHMvdGVzdGFwaS5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvQVBJL3Rlc3RzL3Rlc3RhcGlTY3JpcHRzL3Rlc3RhcGkuanMJKHJldmlzaW9uIDI3Nzk0
OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvdGVzdHMvdGVzdGFwaVNjcmlwdHMvdGVz
dGFwaS5qcwkod29ya2luZyBjb3B5KQpAQCAtMjQ2LDYgKzI0NiwyNiBAQCBzaG91bGRUaHJvdygi
KDAsIE15T2JqZWN0W1N5bWJvbC50b1ByaW1pCiBNeU9iamVjdFtTeW1ib2wudG9QcmltaXRpdmVd
ID0gKCkgPT4gbnVsbDsKIHNob3VsZEJlKCJNeU9iamVjdFtTeW1ib2wudG9QcmltaXRpdmVdKCdi
YXInKSIsIG51bGwpOwogCit2YXIgTXlPYmplY3RIZWlyID0gT2JqZWN0LmNyZWF0ZShNeU9iamVj
dCk7CitNeU9iamVjdEhlaXIudGhyb3dPblNldCA9IDIyOwordmFyIE15T2JqZWN0SGVpclRocm93
T25TZXREZXNjcmlwdG9yID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihNeU9iamVj
dEhlaXIsICJ0aHJvd09uU2V0Iik7CitzaG91bGRCZSgidHlwZW9mIE15T2JqZWN0SGVpclRocm93
T25TZXREZXNjcmlwdG9yIiwgIm9iamVjdCIpOworc2hvdWxkQmUoIk15T2JqZWN0SGVpclRocm93
T25TZXREZXNjcmlwdG9yLnZhbHVlIiwgMjIpOworc2hvdWxkQmUoIk15T2JqZWN0SGVpclRocm93
T25TZXREZXNjcmlwdG9yLndyaXRhYmxlIiwgdHJ1ZSk7CitzaG91bGRCZSgiTXlPYmplY3RIZWly
VGhyb3dPblNldERlc2NyaXB0b3IuZW51bWVyYWJsZSIsIHRydWUpOworc2hvdWxkQmUoIk15T2Jq
ZWN0SGVpclRocm93T25TZXREZXNjcmlwdG9yLmNvbmZpZ3VyYWJsZSIsIHRydWUpOworc2hvdWxk
VGhyb3coIk15T2JqZWN0LnRocm93T25TZXQgPSAyMiIpOworCit2YXIgZ2xvYmFsT2JqZWN0SGVp
ciA9IE9iamVjdC5jcmVhdGUodGhpcyk7CitnbG9iYWxPYmplY3RIZWlyLmdsb2JhbFN0YXRpY1Zh
bHVlMiA9IDMzOwordmFyIGdsb2JhbE9iamVjdEhlaXJHbG9iYWxTdGF0aWNWYWx1ZTJEZXNjcmlw
dG9yID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihnbG9iYWxPYmplY3RIZWlyLCAi
Z2xvYmFsU3RhdGljVmFsdWUyIik7CitzaG91bGRCZSgidHlwZW9mIGdsb2JhbE9iamVjdEhlaXJH
bG9iYWxTdGF0aWNWYWx1ZTJEZXNjcmlwdG9yIiwgIm9iamVjdCIpOworc2hvdWxkQmUoImdsb2Jh
bE9iamVjdEhlaXJHbG9iYWxTdGF0aWNWYWx1ZTJEZXNjcmlwdG9yLnZhbHVlIiwgMzMpOworc2hv
dWxkQmUoImdsb2JhbE9iamVjdEhlaXJHbG9iYWxTdGF0aWNWYWx1ZTJEZXNjcmlwdG9yLndyaXRh
YmxlIiwgdHJ1ZSk7CitzaG91bGRCZSgiZ2xvYmFsT2JqZWN0SGVpckdsb2JhbFN0YXRpY1ZhbHVl
MkRlc2NyaXB0b3IuZW51bWVyYWJsZSIsIHRydWUpOworc2hvdWxkQmUoImdsb2JhbE9iamVjdEhl
aXJHbG9iYWxTdGF0aWNWYWx1ZTJEZXNjcmlwdG9yLmNvbmZpZ3VyYWJsZSIsIHRydWUpOworc2hv
dWxkQmUoInRoaXMuZ2xvYmFsU3RhdGljVmFsdWUyIiwgMyk7CisKIGRlcml2ZWQgPSBuZXcgRGVy
aXZlZCgpOwogCiBzaG91bGRCZSgiZGVyaXZlZCBpbnN0YW5jZW9mIERlcml2ZWQiLCB0cnVlKTsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZWJ1Z2dlci9EZWJ1Z2dlclNjb3BlLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RlYnVnZ2VyL0RlYnVnZ2VyU2NvcGUu
aAkocmV2aXNpb24gMjc3OTQ4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RlYnVnZ2VyL0Rl
YnVnZ2VyU2NvcGUuaAkod29ya2luZyBjb3B5KQpAQCAtMzYsNyArMzYsNyBAQCBjbGFzcyBKU1Nj
b3BlOwogY2xhc3MgRGVidWdnZXJTY29wZSBmaW5hbCA6IHB1YmxpYyBKU05vbkZpbmFsT2JqZWN0
IHsKIHB1YmxpYzoKICAgICB1c2luZyBCYXNlID0gSlNOb25GaW5hbE9iamVjdDsKLSAgICBzdGF0
aWMgY29uc3RleHByIHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxh
Z3MgfCBPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3QgfCBPdmVycmlkZXNHZXRPd25Qcm9wZXJ0
eU5hbWVzOworICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBC
YXNlOjpTdHJ1Y3R1cmVGbGFncyB8IE92ZXJyaWRlc0dldE93blByb3BlcnR5U2xvdCB8IE92ZXJy
aWRlc0dldE93blByb3BlcnR5TmFtZXMgfCBPdmVycmlkZXNQdXQ7CiAKICAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBDZWxsVHlwZSwgU3Vic3BhY2VBY2Nlc3MgbW9kZT4KICAgICBzdGF0aWMgSXNvU3Vi
c3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0NsYXNzSW5mby5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0NsYXNzSW5mby5oCShyZXZpc2lvbiAyNzc5NDgpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9DbGFzc0luZm8uaAkod29ya2luZyBjb3B5KQpAQCAtNjgsOSArNjgsNiBA
QCBzdHJ1Y3QgTWV0aG9kVGFibGUgewogICAgIHVzaW5nIEdldE93blByb3BlcnR5U2xvdEJ5SW5k
ZXhGdW5jdGlvblB0ciA9IGJvb2wgKCopKEpTT2JqZWN0KiwgSlNHbG9iYWxPYmplY3QqLCB1bnNp
Z25lZCwgUHJvcGVydHlTbG90Jik7CiAgICAgR2V0T3duUHJvcGVydHlTbG90QnlJbmRleEZ1bmN0
aW9uUHRyIE1FVEhPRF9UQUJMRV9FTlRSWShnZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4KTsKIAot
ICAgIHVzaW5nIERvUHV0UHJvcGVydHlTZWN1cml0eUNoZWNrRnVuY3Rpb25QdHIgPSB2b2lkICgq
KShKU09iamVjdCosIEpTR2xvYmFsT2JqZWN0KiwgUHJvcGVydHlOYW1lLCBQdXRQcm9wZXJ0eVNs
b3QmKTsKLSAgICBEb1B1dFByb3BlcnR5U2VjdXJpdHlDaGVja0Z1bmN0aW9uUHRyIE1FVEhPRF9U
QUJMRV9FTlRSWShkb1B1dFByb3BlcnR5U2VjdXJpdHlDaGVjayk7Ci0KICAgICB1c2luZyBUb1Ro
aXNGdW5jdGlvblB0ciA9IEpTVmFsdWUgKCopKEpTQ2VsbCosIEpTR2xvYmFsT2JqZWN0KiwgRUNN
QU1vZGUpOwogICAgIFRvVGhpc0Z1bmN0aW9uUHRyIE1FVEhPRF9UQUJMRV9FTlRSWSh0b1RoaXMp
OwogCkBAIC0xNTUsNyArMTUyLDYgQEAgc3RydWN0IE1ldGhvZFRhYmxlIHsKICAgICAgICAgJkNs
YXNzTmFtZTo6ZGVsZXRlUHJvcGVydHlCeUluZGV4LCBcCiAgICAgICAgICZDbGFzc05hbWU6Omdl
dE93blByb3BlcnR5U2xvdCwgXAogICAgICAgICAmQ2xhc3NOYW1lOjpnZXRPd25Qcm9wZXJ0eVNs
b3RCeUluZGV4LCBcCi0gICAgICAgICZDbGFzc05hbWU6OmRvUHV0UHJvcGVydHlTZWN1cml0eUNo
ZWNrLCBcCiAgICAgICAgICZDbGFzc05hbWU6OnRvVGhpcywgXAogICAgICAgICAmQ2xhc3NOYW1l
OjpnZXRPd25Qcm9wZXJ0eU5hbWVzLCBcCiAgICAgICAgICZDbGFzc05hbWU6OmdldE93blNwZWNp
YWxQcm9wZXJ0eU5hbWVzLCBcCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9D
bG9uZWRBcmd1bWVudHMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9DbG9uZWRBcmd1bWVudHMuaAkocmV2aXNpb24gMjc3OTQ4KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvQ2xvbmVkQXJndW1lbnRzLmgJKHdvcmtpbmcgY29weSkKQEAgLTQw
LDcgKzQwLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiBjbGFzcyBDbG9uZWRBcmd1bWVudHMgZmluYWwg
OiBwdWJsaWMgSlNOb25GaW5hbE9iamVjdCB7CiBwdWJsaWM6CiAgICAgdXNpbmcgQmFzZSA9IEpT
Tm9uRmluYWxPYmplY3Q7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1cmVG
bGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwgT3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90
IHwgT3ZlcnJpZGVzR2V0T3duU3BlY2lhbFByb3BlcnR5TmFtZXM7CisgICAgc3RhdGljIGNvbnN0
ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwgT3Zl
cnJpZGVzR2V0T3duUHJvcGVydHlTbG90IHwgT3ZlcnJpZGVzR2V0T3duU3BlY2lhbFByb3BlcnR5
TmFtZXMgfCBPdmVycmlkZXNQdXQ7CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDZWxsVHlwZSwg
U3Vic3BhY2VBY2Nlc3MgbW9kZT4KICAgICBzdGF0aWMgSXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9y
KFZNJiB2bSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0N1c3RvbUdldHRl
clNldHRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
Q3VzdG9tR2V0dGVyU2V0dGVyLmNwcAkocmV2aXNpb24gMjc3OTQ4KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvQ3VzdG9tR2V0dGVyU2V0dGVyLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMjYsMjggKzI2LDEwIEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiQ3VzdG9t
R2V0dGVyU2V0dGVyLmgiCiAKLSNpbmNsdWRlICJKU0NKU1ZhbHVlSW5saW5lcy5oIgotI2luY2x1
ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+Ci0KIG5hbWVzcGFjZSBKU0MgewogCiBTVEFUSUNfQVNTRVJU
X0lTX1RSSVZJQUxMWV9ERVNUUlVDVElCTEUoQ3VzdG9tR2V0dGVyU2V0dGVyKTsKIAogY29uc3Qg
Q2xhc3NJbmZvIEN1c3RvbUdldHRlclNldHRlcjo6c19pbmZvID0geyAiQ3VzdG9tR2V0dGVyU2V0
dGVyIiwgbnVsbHB0ciwgbnVsbHB0ciwgbnVsbHB0ciwgQ1JFQVRFX01FVEhPRF9UQUJMRShDdXN0
b21HZXR0ZXJTZXR0ZXIpIH07CiAKLVRyaVN0YXRlIGNhbGxDdXN0b21TZXR0ZXIoSlNHbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjdCwgQ3VzdG9tR2V0dGVyU2V0dGVyOjpDdXN0b21TZXR0ZXIgc2V0
dGVyLCBib29sIGlzQWNjZXNzb3IsIEpTT2JqZWN0KiBzbG90QmFzZSwgSlNWYWx1ZSB0aGlzVmFs
dWUsIEpTVmFsdWUgdmFsdWUsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUpCi17Ci0gICAgaWYg
KGlzQWNjZXNzb3IpIHsKLSAgICAgICAgaWYgKCFzZXR0ZXIpCi0gICAgICAgICAgICByZXR1cm4g
VHJpU3RhdGU6OkZhbHNlOwotICAgICAgICBzZXR0ZXIoZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlOjpl
bmNvZGUodGhpc1ZhbHVlKSwgSlNWYWx1ZTo6ZW5jb2RlKHZhbHVlKSwgcHJvcGVydHlOYW1lKTsK
LSAgICAgICAgLy8gQWx3YXlzIHJldHVybiB0cnVlIGlmIHRoZXJlIGlzIGEgc2V0dGVyIGFuZCBp
dCBpcyBvYnNlcnZlZCBhcyBhbiBhY2Nlc3NvciB0byB1c2Vycy4KLSAgICAgICAgcmV0dXJuIFRy
aVN0YXRlOjpUcnVlOwotICAgIH0KLQotICAgIGlmICghc2V0dGVyKQotICAgICAgICByZXR1cm4g
VHJpU3RhdGU6OkluZGV0ZXJtaW5hdGU7Ci0gICAgcmV0dXJuIHRyaVN0YXRlKHNldHRlcihnbG9i
YWxPYmplY3QsIEpTVmFsdWU6OmVuY29kZShzbG90QmFzZSksIEpTVmFsdWU6OmVuY29kZSh2YWx1
ZSksIHByb3BlcnR5TmFtZSkpOwotfQotCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0N1c3RvbUdldHRlclNldHRlci5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0N1c3RvbUdldHRlclNldHRlci5oCShy
ZXZpc2lvbiAyNzc5NDgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9DdXN0b21H
ZXR0ZXJTZXR0ZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNzYsNiArNzYsNCBAQCBwcml2YXRlOgog
ICAgIEN1c3RvbVNldHRlciBtX3NldHRlcjsKIH07CiAKLUpTX0VYUE9SVF9QUklWQVRFIFRyaVN0
YXRlIGNhbGxDdXN0b21TZXR0ZXIoSlNHbG9iYWxPYmplY3QqLCBDdXN0b21HZXR0ZXJTZXR0ZXI6
OkN1c3RvbVNldHRlciwgYm9vbCBpc0FjY2Vzc29yLCBKU09iamVjdCogc2xvdEJhc2UsIEpTVmFs
dWUgdGhpc1ZhbHVlLCBKU1ZhbHVlLCBQcm9wZXJ0eU5hbWUpOwotCiB9IC8vIG5hbWVzcGFjZSBK
U0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Vycm9yQ29uc3RydWN0b3Iu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FcnJvckNvbnN0
cnVjdG9yLmgJKHJldmlzaW9uIDI3Nzk0OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0Vycm9yQ29uc3RydWN0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMzAsNiArMzAsNyBAQCBj
bGFzcyBHZXR0ZXJTZXR0ZXI7CiBjbGFzcyBFcnJvckNvbnN0cnVjdG9yIGZpbmFsIDogcHVibGlj
IEludGVybmFsRnVuY3Rpb24gewogcHVibGljOgogICAgIHVzaW5nIEJhc2UgPSBJbnRlcm5hbEZ1
bmN0aW9uOworICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBC
YXNlOjpTdHJ1Y3R1cmVGbGFncyB8IE92ZXJyaWRlc1B1dDsKIAogICAgIHN0YXRpYyBFcnJvckNv
bnN0cnVjdG9yKiBjcmVhdGUoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgRXJyb3JQcm90
b3R5cGUqIGVycm9yUHJvdG90eXBlLCBHZXR0ZXJTZXR0ZXIqKQogICAgIHsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Vycm9ySW5zdGFuY2UuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FcnJvckluc3RhbmNlLmgJKHJldmlzaW9uIDI3
Nzk0OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Vycm9ySW5zdGFuY2UuaAko
d29ya2luZyBjb3B5KQpAQCAtMzAsNyArMzAsNyBAQCBuYW1lc3BhY2UgSlNDIHsKIGNsYXNzIEVy
cm9ySW5zdGFuY2UgOiBwdWJsaWMgSlNOb25GaW5hbE9iamVjdCB7CiBwdWJsaWM6CiAgICAgdXNp
bmcgQmFzZSA9IEpTTm9uRmluYWxPYmplY3Q7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25l
ZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwgT3ZlcnJpZGVzR2V0T3du
UHJvcGVydHlTbG90IHwgT3ZlcnJpZGVzR2V0T3duU3BlY2lhbFByb3BlcnR5TmFtZXM7CisgICAg
c3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVy
ZUZsYWdzIHwgT3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90IHwgT3ZlcnJpZGVzR2V0T3duU3Bl
Y2lhbFByb3BlcnR5TmFtZXMgfCBPdmVycmlkZXNQdXQ7CiAgICAgc3RhdGljIGNvbnN0ZXhwciBi
b29sIG5lZWRzRGVzdHJ1Y3Rpb24gPSB0cnVlOwogCiAgICAgc3RhdGljIHZvaWQgZGVzdHJveShK
U0NlbGwqIGNlbGwpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9HZW5lcmlj
QXJndW1lbnRzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
R2VuZXJpY0FyZ3VtZW50cy5oCShyZXZpc2lvbiAyNzc5NDgpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9HZW5lcmljQXJndW1lbnRzLmgJKHdvcmtpbmcgY29weSkKQEAgLTM2LDcg
KzM2LDcgQEAgdGVtcGxhdGU8dHlwZW5hbWUgVHlwZT4KIGNsYXNzIEdlbmVyaWNBcmd1bWVudHMg
OiBwdWJsaWMgSlNOb25GaW5hbE9iamVjdCB7CiBwdWJsaWM6CiAgICAgdHlwZWRlZiBKU05vbkZp
bmFsT2JqZWN0IEJhc2U7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1cmVG
bGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwgT3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90
IHwgT3ZlcnJpZGVzR2V0T3duUHJvcGVydHlOYW1lcyB8IEludGVyY2VwdHNHZXRPd25Qcm9wZXJ0
eVNsb3RCeUluZGV4RXZlbldoZW5MZW5ndGhJc05vdFplcm87CisgICAgc3RhdGljIGNvbnN0ZXhw
ciB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwgT3ZlcnJp
ZGVzR2V0T3duUHJvcGVydHlTbG90IHwgT3ZlcnJpZGVzR2V0T3duUHJvcGVydHlOYW1lcyB8IE92
ZXJyaWRlc1B1dCB8IEludGVyY2VwdHNHZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4RXZlbldoZW5M
ZW5ndGhJc05vdFplcm87CiAKIHByb3RlY3RlZDoKICAgICBHZW5lcmljQXJndW1lbnRzKFZNJiB2
bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9HZW5lcmljQXJndW1lbnRzSW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0dlbmVyaWNBcmd1bWVudHNJbmxpbmVzLmgJKHJldmlzaW9uIDI3
Nzk0OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0dlbmVyaWNBcmd1bWVudHNJ
bmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTEzNCw4ICsxMzQsOCBAQCBib29sIEdlbmVyaWNB
cmd1bWVudHM8VHlwZT46OnB1dChKU0NlbGwqCiAKICAgICAvLyBodHRwczovL3RjMzkuZ2l0aHVi
LmlvL2VjbWEyNjIvI3NlYy1hcmd1bWVudHMtZXhvdGljLW9iamVjdHMtc2V0LXAtdi1yZWNlaXZl
cgogICAgIC8vIEZhbGwgYmFjayB0byB0aGUgT3JkaW5hcnlTZXQgd2hlbiB0aGUgcmVjZWl2ZXIg
aXMgYWx0ZXJlZCBmcm9tIHRoZSB0aGlzT2JqZWN0LgotICAgIGlmIChVTkxJS0VMWShpc1RoaXNW
YWx1ZUFsdGVyZWQoc2xvdCwgdGhpc09iamVjdCkpKQotICAgICAgICBSRUxFQVNFX0FORF9SRVRV
Uk4oc2NvcGUsIG9yZGluYXJ5U2V0U2xvdyhnbG9iYWxPYmplY3QsIHRoaXNPYmplY3QsIGlkZW50
LCB2YWx1ZSwgc2xvdC50aGlzVmFsdWUoKSwgc2xvdC5pc1N0cmljdE1vZGUoKSkpOworICAgIGlm
IChVTkxJS0VMWShzbG90LnRoaXNWYWx1ZSgpICE9IHRoaXNPYmplY3QpKQorICAgICAgICBSRUxF
QVNFX0FORF9SRVRVUk4oc2NvcGUsIEJhc2U6OnB1dCh0aGlzT2JqZWN0LCBnbG9iYWxPYmplY3Qs
IGlkZW50LCB2YWx1ZSwgc2xvdCkpOwogICAgIAogICAgIE9wdGlvbmFsPHVpbnQzMl90PiBpbmRl
eCA9IHBhcnNlSW5kZXgoaWRlbnQpOwogICAgIGlmIChpbmRleCAmJiB0aGlzT2JqZWN0LT5pc01h
cHBlZEFyZ3VtZW50KGluZGV4LnZhbHVlKCkpKSB7CkBAIC0xNDMsOSArMTQzLDcgQEAgYm9vbCBH
ZW5lcmljQXJndW1lbnRzPFR5cGU+OjpwdXQoSlNDZWxsKgogICAgICAgICByZXR1cm4gdHJ1ZTsK
ICAgICB9CiAKLSAgICBhdXRvIHJlc3VsdCA9IEJhc2U6OnB1dCh0aGlzT2JqZWN0LCBnbG9iYWxP
YmplY3QsIGlkZW50LCB2YWx1ZSwgc2xvdCk7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29w
ZSwgZmFsc2UpOwotICAgIFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwgcmVzdWx0KTsKKyAgICBS
RUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIEJhc2U6OnB1dCh0aGlzT2JqZWN0LCBnbG9iYWxPYmpl
Y3QsIGlkZW50LCB2YWx1ZSwgc2xvdCkpOwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBUeXBlPgpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvR2V0dGVyU2V0dGVyLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvR2V0dGVyU2V0dGVyLmgJKHJl
dmlzaW9uIDI3Nzk0OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0dldHRlclNl
dHRlci5oCSh3b3JraW5nIGNvcHkpCkBAIC01NCw3ICs1NCw3IEBAIHByaXZhdGU6CiAKIHB1Ymxp
YzoKIAotICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNl
OjpTdHJ1Y3R1cmVGbGFncyB8IE92ZXJyaWRlc0dldE93blByb3BlcnR5U2xvdCB8IFN0cnVjdHVy
ZUlzSW1tb3J0YWw7CisgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFn
cyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwgT3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90IHwg
T3ZlcnJpZGVzUHV0IHwgU3RydWN0dXJlSXNJbW1vcnRhbDsKIAogICAgIHRlbXBsYXRlPHR5cGVu
YW1lIENlbGxUeXBlLCBTdWJzcGFjZUFjY2Vzcz4KICAgICBzdGF0aWMgSXNvU3Vic3BhY2UqIHN1
YnNwYWNlRm9yKFZNJiB2bSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
QXJyYXkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
QXJyYXkuY3BwCShyZXZpc2lvbiAyNzc5NDgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU0FycmF5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjM4LDEwICsyMzgsNiBAQCBib29s
IEpTQXJyYXk6OnB1dChKU0NlbGwqIGNlbGwsIEpTR2xvYmFsCiAgICAgYXV0byBzY29wZSA9IERF
Q0xBUkVfVEhST1dfU0NPUEUodm0pOwogCiAgICAgSlNBcnJheSogdGhpc09iamVjdCA9IGpzQ2Fz
dDxKU0FycmF5Kj4oY2VsbCk7Ci0KLSAgICBpZiAoVU5MSUtFTFkoaXNUaGlzVmFsdWVBbHRlcmVk
KHNsb3QsIHRoaXNPYmplY3QpKSkKLSAgICAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBv
cmRpbmFyeVNldFNsb3coZ2xvYmFsT2JqZWN0LCB0aGlzT2JqZWN0LCBwcm9wZXJ0eU5hbWUsIHZh
bHVlLCBzbG90LnRoaXNWYWx1ZSgpLCBzbG90LmlzU3RyaWN0TW9kZSgpKSk7Ci0KICAgICB0aGlz
T2JqZWN0LT5lbnN1cmVXcml0YWJsZSh2bSk7CiAKICAgICBpZiAocHJvcGVydHlOYW1lID09IHZt
LnByb3BlcnR5TmFtZXMtPmxlbmd0aCkgewpAQCAtMjUxLDYgKzI0Nyw5IEBAIGJvb2wgSlNBcnJh
eTo6cHV0KEpTQ2VsbCogY2VsbCwgSlNHbG9iYWwKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
ICAgICAgICAgfQogCisgICAgICAgIGlmIChVTkxJS0VMWShzbG90LnRoaXNWYWx1ZSgpICE9IHRo
aXNPYmplY3QpKQorICAgICAgICAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBKU09iamVj
dDo6ZGVmaW5lUHJvcGVydHlPblJlY2VpdmVyKGdsb2JhbE9iamVjdCwgcHJvcGVydHlOYW1lLCB2
YWx1ZSwgc2xvdCkpOworCiAgICAgICAgIHVuc2lnbmVkIG5ld0xlbmd0aCA9IHZhbHVlLnRvVUlu
dDMyKGdsb2JhbE9iamVjdCk7CiAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGZh
bHNlKTsKICAgICAgICAgZG91YmxlIHZhbHVlQXNOdW1iZXIgPSB2YWx1ZS50b051bWJlcihnbG9i
YWxPYmplY3QpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXkuaAko
cmV2aXNpb24gMjc3OTQ4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJh
eS5oCSh3b3JraW5nIGNvcHkpCkBAIC00MCw3ICs0MCw3IEBAIGNsYXNzIEpTQXJyYXkgOiBwdWJs
aWMgSlNOb25GaW5hbE9iamVjdCAKIAogcHVibGljOgogICAgIHR5cGVkZWYgSlNOb25GaW5hbE9i
amVjdCBCYXNlOwotICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3Mg
PSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8IE92ZXJyaWRlc0dldE93blByb3BlcnR5U2xvdCB8IE92
ZXJyaWRlc0dldE93blNwZWNpYWxQcm9wZXJ0eU5hbWVzOworICAgIHN0YXRpYyBjb25zdGV4cHIg
dW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8IE92ZXJyaWRl
c0dldE93blByb3BlcnR5U2xvdCB8IE92ZXJyaWRlc0dldE93blNwZWNpYWxQcm9wZXJ0eU5hbWVz
IHwgT3ZlcnJpZGVzUHV0OwogCiAgICAgc3RhdGljIHNpemVfdCBhbGxvY2F0aW9uU2l6ZShDaGVj
a2VkPHNpemVfdD4gaW5saW5lQ2FwYWNpdHkpCiAgICAgewpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNBcnJheUJ1ZmZlclZpZXcuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXlCdWZmZXJWaWV3LmNwcAkocmV2aXNpb24g
Mjc3OTQ4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheUJ1ZmZlclZp
ZXcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNzIsMTggKzE3Miw2IEBAIHZvaWQgSlNBcnJheUJ1
ZmZlclZpZXc6OnZpc2l0Q2hpbGRyZW5JbXAKIAogREVGSU5FX1ZJU0lUX0NISUxEUkVOKEpTQXJy
YXlCdWZmZXJWaWV3KTsKIAotYm9vbCBKU0FycmF5QnVmZmVyVmlldzo6cHV0KAotICAgIEpTQ2Vs
bCogY2VsbCwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgUHJvcGVydHlOYW1lIHByb3Bl
cnR5TmFtZSwgSlNWYWx1ZSB2YWx1ZSwKLSAgICBQdXRQcm9wZXJ0eVNsb3QmIHNsb3QpCi17Ci0g
ICAgSlNBcnJheUJ1ZmZlclZpZXcqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNBcnJheUJ1ZmZlclZp
ZXcqPihjZWxsKTsKLQotICAgIGlmIChVTkxJS0VMWShpc1RoaXNWYWx1ZUFsdGVyZWQoc2xvdCwg
dGhpc09iamVjdCkpKQotICAgICAgICByZXR1cm4gb3JkaW5hcnlTZXRTbG93KGdsb2JhbE9iamVj
dCwgdGhpc09iamVjdCwgcHJvcGVydHlOYW1lLCB2YWx1ZSwgc2xvdC50aGlzVmFsdWUoKSwgc2xv
dC5pc1N0cmljdE1vZGUoKSk7Ci0gICAgCi0gICAgcmV0dXJuIEJhc2U6OnB1dCh0aGlzT2JqZWN0
LCBnbG9iYWxPYmplY3QsIHByb3BlcnR5TmFtZSwgdmFsdWUsIHNsb3QpOwotfQotCiBBcnJheUJ1
ZmZlciogSlNBcnJheUJ1ZmZlclZpZXc6OnVuc2hhcmVkQnVmZmVyKCkKIHsKICAgICBBcnJheUJ1
ZmZlciogcmVzdWx0ID0gcG9zc2libHlTaGFyZWRCdWZmZXIoKTsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXlCdWZmZXJWaWV3LmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheUJ1ZmZlclZpZXcuaAkocmV2aXNpb24g
Mjc3OTQ4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheUJ1ZmZlclZp
ZXcuaAkod29ya2luZyBjb3B5KQpAQCAtMTY5LDggKzE2OSw2IEBAIHByb3RlY3RlZDoKICAgICAK
ICAgICBKU19FWFBPUlRfUFJJVkFURSBKU0FycmF5QnVmZmVyVmlldyhWTSYsIENvbnN0cnVjdGlv
bkNvbnRleHQmKTsKICAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIGZpbmlzaENyZWF0aW9uKFZN
Jik7Ci0gICAgCi0gICAgc3RhdGljIGJvb2wgcHV0KEpTQ2VsbCosIEpTR2xvYmFsT2JqZWN0Kiwg
UHJvcGVydHlOYW1lLCBKU1ZhbHVlLCBQdXRQcm9wZXJ0eVNsb3QmKTsKIAogICAgIERFQ0xBUkVf
VklTSVRfQ0hJTERSRU47CiAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU0NKU1ZhbHVlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU0NKU1ZhbHVlLmNwcAkocmV2aXNpb24gMjc3OTQ4KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNDSlNWYWx1ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIxMiw3ICsy
MTIsNyBAQCBKU09iamVjdCogSlNWYWx1ZTo6c3ludGhlc2l6ZVByb3RvdHlwZShKCiAgICAgcmV0
dXJuIG51bGxwdHI7CiB9CiAKLS8vIEVDTUEgOC43LjIKKy8vIGh0dHBzOi8vdGMzOS5lcy9lY21h
MjYyLyNzZWMtb3JkaW5hcnlzZXQKIGJvb2wgSlNWYWx1ZTo6cHV0VG9QcmltaXRpdmUoSlNHbG9i
YWxPYmplY3QqIGdsb2JhbE9iamVjdCwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgSlNWYWx1
ZSB2YWx1ZSwgUHV0UHJvcGVydHlTbG90JiBzbG90KQogewogICAgIFZNJiB2bSA9IGdsb2JhbE9i
amVjdC0+dm0oKTsKQEAgLTIyMSw2OSArMjIxLDE0IEBAIGJvb2wgSlNWYWx1ZTo6cHV0VG9Qcmlt
aXRpdmUoSlNHbG9iYWxPYmoKICAgICBpZiAoT3B0aW9uYWw8dWludDMyX3Q+IGluZGV4ID0gcGFy
c2VJbmRleChwcm9wZXJ0eU5hbWUpKQogICAgICAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUs
IHB1dFRvUHJpbWl0aXZlQnlJbmRleChnbG9iYWxPYmplY3QsIGluZGV4LnZhbHVlKCksIHZhbHVl
LCBzbG90LmlzU3RyaWN0TW9kZSgpKSk7CiAKKyAgICBpZiAoaXNTdHJpbmcoKSAmJiBwcm9wZXJ0
eU5hbWUudWlkKCkgPT0gdm0ucHJvcGVydHlOYW1lcy0+bGVuZ3RoLmltcGwoKSkKKyAgICAgICAg
cmV0dXJuIHR5cGVFcnJvcihnbG9iYWxPYmplY3QsIHNjb3BlLCBzbG90LmlzU3RyaWN0TW9kZSgp
LCBSZWFkb25seVByb3BlcnR5V3JpdGVFcnJvcik7CiAgICAgLy8gQ2hlY2sgaWYgdGhlcmUgYXJl
IGFueSBzZXR0ZXJzIG9yIGdldHRlcnMgaW4gdGhlIHByb3RvdHlwZSBjaGFpbgogICAgIEpTT2Jq
ZWN0KiBvYmogPSBzeW50aGVzaXplUHJvdG90eXBlKGdsb2JhbE9iamVjdCk7CiAgICAgRVhDRVBU
SU9OX0FTU0VSVCghIXNjb3BlLmV4Y2VwdGlvbigpID09ICFvYmopOwogICAgIGlmIChVTkxJS0VM
WSghb2JqKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIEpTVmFsdWUgcHJvdG90eXBlOwot
ICAgIGlmIChwcm9wZXJ0eU5hbWUgIT0gdm0ucHJvcGVydHlOYW1lcy0+dW5kZXJzY29yZVByb3Rv
KSB7Ci0gICAgICAgIHdoaWxlICh0cnVlKSB7Ci0gICAgICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVj
dHVyZSA9IG9iai0+c3RydWN0dXJlKHZtKTsKLSAgICAgICAgICAgIGlmIChzdHJ1Y3R1cmUtPmhh
c1JlYWRPbmx5T3JHZXR0ZXJTZXR0ZXJQcm9wZXJ0aWVzRXhjbHVkaW5nUHJvdG8oKSB8fCBzdHJ1
Y3R1cmUtPnR5cGVJbmZvKCkuaGFzUHV0UHJvcGVydHlTZWN1cml0eUNoZWNrKCkpCi0gICAgICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBpZiAob2JqLT50eXBlKCkgPT0gUHJveHlPYmpl
Y3RUeXBlKSB7Ci0gICAgICAgICAgICAgICAgYXV0byogcHJveHkgPSBqc0Nhc3Q8UHJveHlPYmpl
Y3QqPihvYmopOwotICAgICAgICAgICAgICAgIFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwgcHJv
eHktPlByb3h5T2JqZWN0OjpwdXQocHJveHksIGdsb2JhbE9iamVjdCwgcHJvcGVydHlOYW1lLCB2
YWx1ZSwgc2xvdCkpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgcHJvdG90eXBlID0gb2Jq
LT5nZXRQcm90b3R5cGUodm0sIGdsb2JhbE9iamVjdCk7Ci0gICAgICAgICAgICBSRVRVUk5fSUZf
RVhDRVBUSU9OKHNjb3BlLCBmYWxzZSk7Ci0KLSAgICAgICAgICAgIGlmIChwcm90b3R5cGUuaXNO
dWxsKCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIHR5cGVFcnJvcihnbG9iYWxPYmplY3QsIHNj
b3BlLCBzbG90LmlzU3RyaWN0TW9kZSgpLCBSZWFkb25seVByb3BlcnR5V3JpdGVFcnJvcik7Ci0g
ICAgICAgICAgICBvYmogPSBhc09iamVjdChwcm90b3R5cGUpOwotICAgICAgICB9Ci0gICAgfQot
Ci0gICAgZm9yICg7IDsgb2JqID0gYXNPYmplY3QocHJvdG90eXBlKSkgewotICAgICAgICBTdHJ1
Y3R1cmUqIHN0cnVjdHVyZSA9IG9iai0+c3RydWN0dXJlKHZtKTsKLSAgICAgICAgaWYgKFVOTElL
RUxZKHN0cnVjdHVyZS0+dHlwZUluZm8oKS5oYXNQdXRQcm9wZXJ0eVNlY3VyaXR5Q2hlY2soKSkp
IHsKLSAgICAgICAgICAgIG9iai0+bWV0aG9kVGFibGUodm0pLT5kb1B1dFByb3BlcnR5U2VjdXJp
dHlDaGVjayhvYmosIGdsb2JhbE9iamVjdCwgcHJvcGVydHlOYW1lLCBzbG90KTsKLSAgICAgICAg
ICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGZhbHNlKTsKLSAgICAgICAgfQotICAgICAg
ICB1bnNpZ25lZCBhdHRyaWJ1dGVzOwotICAgICAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQgPSBz
dHJ1Y3R1cmUtPmdldCh2bSwgcHJvcGVydHlOYW1lLCBhdHRyaWJ1dGVzKTsKLSAgICAgICAgaWYg
KG9mZnNldCAhPSBpbnZhbGlkT2Zmc2V0KSB7Ci0gICAgICAgICAgICBpZiAoYXR0cmlidXRlcyAm
IFByb3BlcnR5QXR0cmlidXRlOjpSZWFkT25seSkKLSAgICAgICAgICAgICAgICByZXR1cm4gdHlw
ZUVycm9yKGdsb2JhbE9iamVjdCwgc2NvcGUsIHNsb3QuaXNTdHJpY3RNb2RlKCksIFJlYWRvbmx5
UHJvcGVydHlXcml0ZUVycm9yKTsKLQotICAgICAgICAgICAgSlNWYWx1ZSBncyA9IG9iai0+Z2V0
RGlyZWN0KG9mZnNldCk7Ci0gICAgICAgICAgICBpZiAoZ3MuaXNHZXR0ZXJTZXR0ZXIoKSkKLSAg
ICAgICAgICAgICAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIGpzQ2FzdDxHZXR0ZXJTZXR0
ZXIqPihncyktPmNhbGxTZXR0ZXIoZ2xvYmFsT2JqZWN0LCAqdGhpcywgdmFsdWUsIHNsb3QuaXNT
dHJpY3RNb2RlKCkpKTsKLQotICAgICAgICAgICAgaWYgKGdzLmlzQ3VzdG9tR2V0dGVyU2V0dGVy
KCkpIHsKLSAgICAgICAgICAgICAgICBhdXRvIHNldHRlciA9IGpzQ2FzdDxDdXN0b21HZXR0ZXJT
ZXR0ZXIqPihncy5hc0NlbGwoKSktPnNldHRlcigpOwotICAgICAgICAgICAgICAgIGJvb2wgaXNB
Y2Nlc3NvciA9IGF0dHJpYnV0ZXMgJiBQcm9wZXJ0eUF0dHJpYnV0ZTo6Q3VzdG9tQWNjZXNzb3I7
Ci0gICAgICAgICAgICAgICAgYXV0byByZXN1bHQgPSBjYWxsQ3VzdG9tU2V0dGVyKGdsb2JhbE9i
amVjdCwgc2V0dGVyLCBpc0FjY2Vzc29yLCBvYmosIHNsb3QudGhpc1ZhbHVlKCksIHZhbHVlLCBw
cm9wZXJ0eU5hbWUpOwotICAgICAgICAgICAgICAgIGlmIChyZXN1bHQgIT0gVHJpU3RhdGU6Oklu
ZGV0ZXJtaW5hdGUpCi0gICAgICAgICAgICAgICAgICAgIFJFTEVBU0VfQU5EX1JFVFVSTihzY29w
ZSwgcmVzdWx0ID09IFRyaVN0YXRlOjpUcnVlKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAg
ICAgLy8gSWYgdGhlcmUncyBhbiBleGlzdGluZyBwcm9wZXJ0eSBvbiB0aGUgb2JqZWN0IG9yIG9u
ZSBvZiBpdHMgCi0gICAgICAgICAgICAvLyBwcm90b3R5cGVzIGl0IHNob3VsZCBiZSByZXBsYWNl
ZCwgc28gYnJlYWsgaGVyZS4KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAg
IGlmIChvYmotPnR5cGUoKSA9PSBQcm94eU9iamVjdFR5cGUpIHsKLSAgICAgICAgICAgIGF1dG8q
IHByb3h5ID0ganNDYXN0PFByb3h5T2JqZWN0Kj4ob2JqKTsKLSAgICAgICAgICAgIFJFTEVBU0Vf
QU5EX1JFVFVSTihzY29wZSwgcHJveHktPlByb3h5T2JqZWN0OjpwdXQocHJveHksIGdsb2JhbE9i
amVjdCwgcHJvcGVydHlOYW1lLCB2YWx1ZSwgc2xvdCkpOwotICAgICAgICB9Ci0gICAgICAgIHBy
b3RvdHlwZSA9IG9iai0+Z2V0UHJvdG90eXBlKHZtLCBnbG9iYWxPYmplY3QpOwotICAgICAgICBS
RVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBmYWxzZSk7Ci0gICAgICAgIGlmIChwcm90b3R5cGUu
aXNOdWxsKCkpCi0gICAgICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgCi0gICAgcmV0dXJuIHR5
cGVFcnJvcihnbG9iYWxPYmplY3QsIHNjb3BlLCBzbG90LmlzU3RyaWN0TW9kZSgpLCBSZWFkb25s
eVByb3BlcnR5V3JpdGVFcnJvcik7CisgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBvYmot
Pm1ldGhvZFRhYmxlKHZtKS0+cHV0KG9iaiwgZ2xvYmFsT2JqZWN0LCBwcm9wZXJ0eU5hbWUsIHZh
bHVlLCBzbG90KSk7CiB9CiAKIGJvb2wgSlNWYWx1ZTo6cHV0VG9QcmltaXRpdmVCeUluZGV4KEpT
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIHVuc2lnbmVkIHByb3BlcnR5TmFtZSwgSlNWYWx1
ZSB2YWx1ZSwgYm9vbCBzaG91bGRUaHJvdykKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTQ2VsbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNDZWxsLmNwcAkocmV2aXNpb24gMjc3OTQ4KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNDZWxsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjAwLDExICsyMDAsNiBA
QCBib29sIEpTQ2VsbDo6Z2V0T3duUHJvcGVydHlTbG90QnlJbmRleChKCiAgICAgcmV0dXJuIGZh
bHNlOwogfQogCi12b2lkIEpTQ2VsbDo6ZG9QdXRQcm9wZXJ0eVNlY3VyaXR5Q2hlY2soSlNPYmpl
Y3QqLCBKU0dsb2JhbE9iamVjdCosIFByb3BlcnR5TmFtZSwgUHV0UHJvcGVydHlTbG90JikKLXsK
LSAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwotfQotCiB2b2lkIEpTQ2VsbDo6Z2V0
T3duUHJvcGVydHlOYW1lcyhKU09iamVjdCosIEpTR2xvYmFsT2JqZWN0KiwgUHJvcGVydHlOYW1l
QXJyYXkmLCBEb250RW51bVByb3BlcnRpZXNNb2RlKQogewogICAgIFJFTEVBU0VfQVNTRVJUX05P
VF9SRUFDSEVEKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NlbGwu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NlbGwuaAko
cmV2aXNpb24gMjc3OTQ4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDZWxs
LmgJKHdvcmtpbmcgY29weSkKQEAgLTI1Nyw3ICsyNTcsNiBAQCBwcm90ZWN0ZWQ6CiAgICAgc3Rh
dGljIGJvb2wgZGVmaW5lT3duUHJvcGVydHkoSlNPYmplY3QqLCBKU0dsb2JhbE9iamVjdCosIFBy
b3BlcnR5TmFtZSwgY29uc3QgUHJvcGVydHlEZXNjcmlwdG9yJiwgYm9vbCBzaG91bGRUaHJvdyk7
CiAgICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90KEpTT2JqZWN0KiwgSlNHbG9iYWxP
YmplY3QqLCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYpOwogICAgIHN0YXRpYyBib29sIGdl
dE93blByb3BlcnR5U2xvdEJ5SW5kZXgoSlNPYmplY3QqLCBKU0dsb2JhbE9iamVjdCosIHVuc2ln
bmVkIHByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90Jik7Ci0gICAgc3RhdGljIE5PX1JFVFVSTl9E
VUVfVE9fQ1JBU0ggdm9pZCBkb1B1dFByb3BlcnR5U2VjdXJpdHlDaGVjayhKU09iamVjdCosIEpT
R2xvYmFsT2JqZWN0KiwgUHJvcGVydHlOYW1lLCBQdXRQcm9wZXJ0eVNsb3QmKTsKIAogcHJpdmF0
ZToKICAgICBmcmllbmQgY2xhc3MgTExJbnRPZmZzZXRzRXh0cmFjdG9yOwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNGdW5jdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNGdW5jdGlvbi5jcHAJKHJldmlzaW9uIDI3Nzk0
OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRnVuY3Rpb24uY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC01MjksMTAgKzUyOSw2IEBAIGJvb2wgSlNGdW5jdGlvbjo6cHV0KEpTQ2Vs
bCogY2VsbCwgSlNHbG8KICAgICAgICAgICAgIHJhcmVEYXRhLT5zZXRIYXNNb2RpZmllZE5hbWVG
b3JOb25Ib3N0RnVuY3Rpb24oKTsKICAgICB9CiAKLSAgICBpZiAoVU5MSUtFTFkoaXNUaGlzVmFs
dWVBbHRlcmVkKHNsb3QsIHRoaXNPYmplY3QpKSkKLSAgICAgICAgUkVMRUFTRV9BTkRfUkVUVVJO
KHNjb3BlLCBvcmRpbmFyeVNldFNsb3coZ2xvYmFsT2JqZWN0LCB0aGlzT2JqZWN0LCBwcm9wZXJ0
eU5hbWUsIHZhbHVlLCBzbG90LnRoaXNWYWx1ZSgpLCBzbG90LmlzU3RyaWN0TW9kZSgpKSk7Ci0K
LQogICAgIGlmICh0aGlzT2JqZWN0LT5pc0hvc3RPckJ1aWx0aW5GdW5jdGlvbigpKSB7CiAgICAg
ICAgIFByb3BlcnR5U3RhdHVzIHByb3BlcnR5VHlwZSA9IHRoaXNPYmplY3QtPnJlaWZ5TGF6eVBy
b3BlcnR5Rm9ySG9zdE9yQnVpbHRpbklmTmVlZGVkKHZtLCBnbG9iYWxPYmplY3QsIHByb3BlcnR5
TmFtZSk7CiAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGZhbHNlKTsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRnVuY3Rpb24uaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Z1bmN0aW9uLmgJKHJldmlzaW9uIDI3
Nzk0OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRnVuY3Rpb24uaAkod29y
a2luZyBjb3B5KQpAQCAtNzAsNyArNzAsNyBAQCBwdWJsaWM6CiAgICAgfQogICAgIAogICAgIHR5
cGVkZWYgSlNDYWxsZWUgQmFzZTsKLSAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIFN0cnVj
dHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxhZ3MgfCBPdmVycmlkZXNHZXRPd25Qcm9wZXJ0
eVNsb3QgfCBPdmVycmlkZXNHZXRPd25TcGVjaWFsUHJvcGVydHlOYW1lcyB8IE92ZXJyaWRlc0dl
dENhbGxEYXRhOworICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3Mg
PSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8IE92ZXJyaWRlc0dldE93blByb3BlcnR5U2xvdCB8IE92
ZXJyaWRlc0dldE93blNwZWNpYWxQcm9wZXJ0eU5hbWVzIHwgT3ZlcnJpZGVzR2V0Q2FsbERhdGEg
fCBPdmVycmlkZXNQdXQ7CiAKICAgICBzdGF0aWMgc2l6ZV90IGFsbG9jYXRpb25TaXplKENoZWNr
ZWQ8c2l6ZV90PiBpbmxpbmVDYXBhY2l0eSkKICAgICB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU0dlbmVyaWNUeXBlZEFycmF5Vmlldy5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2VuZXJpY1R5cGVkQXJyYXlWaWV3LmgJKHJl
dmlzaW9uIDI3Nzk0OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2VuZXJp
Y1R5cGVkQXJyYXlWaWV3LmgJKHdvcmtpbmcgY29weSkKQEAgLTk5LDcgKzk5LDcgQEAgcHVibGlj
OgogICAgIHVzaW5nIEVsZW1lbnRUeXBlID0gdHlwZW5hbWUgQWRhcHRvcjo6VHlwZTsKICAgICBz
dGF0aWMgY29uc3RleHByIFR5cGVkQXJyYXlDb250ZW50VHlwZSBjb250ZW50VHlwZSA9IEFkYXB0
b3I6OmNvbnRlbnRUeXBlOwogCi0gICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1
cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwgT3ZlcnJpZGVzR2V0T3duUHJvcGVydHlT
bG90IHwgT3ZlcnJpZGVzR2V0T3duUHJvcGVydHlOYW1lcyB8IEludGVyY2VwdHNHZXRPd25Qcm9w
ZXJ0eVNsb3RCeUluZGV4RXZlbldoZW5MZW5ndGhJc05vdFplcm87CisgICAgc3RhdGljIGNvbnN0
ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwgT3Zl
cnJpZGVzR2V0T3duUHJvcGVydHlTbG90IHwgT3ZlcnJpZGVzR2V0T3duUHJvcGVydHlOYW1lcyB8
IE92ZXJyaWRlc1B1dCB8IEludGVyY2VwdHNHZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4RXZlbldo
ZW5MZW5ndGhJc05vdFplcm87CiAKICAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIGVsZW1l
bnRTaXplID0gc2l6ZW9mKHR5cGVuYW1lIEFkYXB0b3I6OlR5cGUpOwogCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbExleGljYWxFbnZpcm9ubWVudC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsTGV4aWNhbEVu
dmlyb25tZW50LmgJKHJldmlzaW9uIDI3Nzk0OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTR2xvYmFsTGV4aWNhbEVudmlyb25tZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTMz
LDcgKzMzLDcgQEAgY2xhc3MgSlNHbG9iYWxMZXhpY2FsRW52aXJvbm1lbnQgZmluYWwgOgogcHVi
bGljOgogICAgIHVzaW5nIEJhc2UgPSBKU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0OwogCi0gICAg
c3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVy
ZUZsYWdzIHwgT3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90OworICAgIHN0YXRpYyBjb25zdGV4
cHIgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8IE92ZXJy
aWRlc0dldE93blByb3BlcnR5U2xvdCB8IE92ZXJyaWRlc1B1dDsKIAogICAgIHRlbXBsYXRlPHR5
cGVuYW1lIENlbGxUeXBlLCBTdWJzcGFjZUFjY2VzcyBtb2RlPgogICAgIHN0YXRpYyBJc29TdWJz
cGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNHbG9iYWxPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmNwcAkocmV2aXNpb24gMjc3OTQ4KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xNTc2LDggKzE1NzYsMTUgQEAgYm9vbCBKU0dsb2JhbE9iamVjdDo6cHV0KEpTQ2Vs
bCogY2VsbCwgSgogICAgIEpTR2xvYmFsT2JqZWN0KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTR2xv
YmFsT2JqZWN0Kj4oY2VsbCk7CiAgICAgQVNTRVJUKCFIZWFwOjpoZWFwKHZhbHVlKSB8fCBIZWFw
OjpoZWFwKHZhbHVlKSA9PSBIZWFwOjpoZWFwKHRoaXNPYmplY3QpKTsKIAotICAgIGlmIChVTkxJ
S0VMWShpc1RoaXNWYWx1ZUFsdGVyZWQoc2xvdCwgdGhpc09iamVjdCkpKQotICAgICAgICBSRUxF
QVNFX0FORF9SRVRVUk4oc2NvcGUsIG9yZGluYXJ5U2V0U2xvdyhnbG9iYWxPYmplY3QsIHRoaXNP
YmplY3QsIHByb3BlcnR5TmFtZSwgdmFsdWUsIHNsb3QudGhpc1ZhbHVlKCksIHNsb3QuaXNTdHJp
Y3RNb2RlKCkpKTsKKyAgICBpZiAoVU5MSUtFTFkoaXNUaGlzVmFsdWVBbHRlcmVkKHNsb3QsIHRo
aXNPYmplY3QpKSkgeworICAgICAgICBTeW1ib2xUYWJsZUVudHJ5OjpGYXN0IGVudHJ5ID0gdGhp
c09iamVjdC0+c3ltYm9sVGFibGUoKS0+Z2V0KHByb3BlcnR5TmFtZS51aWQoKSk7CisgICAgICAg
IGlmICghZW50cnkuaXNOdWxsKCkpIHsKKyAgICAgICAgICAgIGlmIChlbnRyeS5pc1JlYWRPbmx5
KCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIHR5cGVFcnJvcihnbG9iYWxPYmplY3QsIHNjb3Bl
LCBzbG90LmlzU3RyaWN0TW9kZSgpLCBSZWFkb25seVByb3BlcnR5V3JpdGVFcnJvcik7CisgICAg
ICAgICAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIEpTT2JqZWN0OjpkZWZpbmVQcm9wZXJ0
eU9uUmVjZWl2ZXIoZ2xvYmFsT2JqZWN0LCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCBzbG90KSk7Cisg
ICAgICAgIH0KKyAgICAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBCYXNlOjpwdXQodGhp
c09iamVjdCwgZ2xvYmFsT2JqZWN0LCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCBzbG90KSk7CisgICAg
fQogCiAgICAgYm9vbCBzaG91bGRUaHJvd1JlYWRPbmx5RXJyb3IgPSBzbG90LmlzU3RyaWN0TW9k
ZSgpOwogICAgIGJvb2wgaWdub3JlUmVhZE9ubHlFcnJvcnMgPSBmYWxzZTsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuaAkocmV2aXNpb24g
Mjc3OTQ4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3Qu
aAkod29ya2luZyBjb3B5KQpAQCAtNTk2LDcgKzU5Niw3IEBAIHB1YmxpYzoKICAgICAgICAgCiBw
dWJsaWM6CiAgICAgdXNpbmcgQmFzZSA9IEpTU2VnbWVudGVkVmFyaWFibGVPYmplY3Q7Ci0gICAg
c3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVy
ZUZsYWdzIHwgSGFzU3RhdGljUHJvcGVydHlUYWJsZSB8IE92ZXJyaWRlc0dldE93blByb3BlcnR5
U2xvdCB8IElzSW1tdXRhYmxlUHJvdG90eXBlRXhvdGljT2JqZWN0OworICAgIHN0YXRpYyBjb25z
dGV4cHIgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8IEhh
c1N0YXRpY1Byb3BlcnR5VGFibGUgfCBPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3QgfCBPdmVy
cmlkZXNQdXQgfCBJc0ltbXV0YWJsZVByb3RvdHlwZUV4b3RpY09iamVjdDsKIAogICAgIHN0YXRp
YyBjb25zdGV4cHIgYm9vbCBuZWVkc0Rlc3RydWN0aW9uID0gdHJ1ZTsKICAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBDZWxsVHlwZSwgU3Vic3BhY2VBY2Nlc3MgbW9kZT4KSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTTGV4aWNhbEVudmlyb25tZW50LmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNMZXhpY2FsRW52aXJvbm1lbnQuaAkocmV2
aXNpb24gMjc3OTQ4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNMZXhpY2Fs
RW52aXJvbm1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtNDgsNyArNDgsNyBAQCBwdWJsaWM6CiAg
ICAgfQogCiAgICAgdXNpbmcgQmFzZSA9IEpTU3ltYm9sVGFibGVPYmplY3Q7Ci0gICAgc3RhdGlj
IGNvbnN0ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdz
IHwgT3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90IHwgT3ZlcnJpZGVzR2V0T3duU3BlY2lhbFBy
b3BlcnR5TmFtZXM7CisgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFn
cyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwgT3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90IHwg
T3ZlcnJpZGVzR2V0T3duU3BlY2lhbFByb3BlcnR5TmFtZXMgfCBPdmVycmlkZXNQdXQ7CiAKICAg
ICBXcml0ZUJhcnJpZXJCYXNlPFVua25vd24+KiB2YXJpYWJsZXMoKQogICAgIHsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTW9kdWxlRW52aXJvbm1lbnQuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU01vZHVsZUVudmlyb25tZW50
LmgJKHJldmlzaW9uIDI3Nzk0OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
TW9kdWxlRW52aXJvbm1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtNDAsNyArNDAsNyBAQCBjbGFz
cyBKU01vZHVsZUVudmlyb25tZW50IGZpbmFsIDogcHVibGljCiAgICAgZnJpZW5kIGNsYXNzIExM
SW50T2Zmc2V0c0V4dHJhY3RvcjsKIHB1YmxpYzoKICAgICB1c2luZyBCYXNlID0gSlNMZXhpY2Fs
RW52aXJvbm1lbnQ7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFn
cyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwgT3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90IHwg
T3ZlcnJpZGVzR2V0T3duU3BlY2lhbFByb3BlcnR5TmFtZXM7CisgICAgc3RhdGljIGNvbnN0ZXhw
ciB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwgT3ZlcnJp
ZGVzR2V0T3duUHJvcGVydHlTbG90IHwgT3ZlcnJpZGVzR2V0T3duU3BlY2lhbFByb3BlcnR5TmFt
ZXMgfCBPdmVycmlkZXNQdXQ7CiAKICAgICBzdGF0aWMgSlNNb2R1bGVFbnZpcm9ubWVudCogY3Jl
YXRlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNTY29wZSogY3VycmVu
dFNjb3BlLCBTeW1ib2xUYWJsZSogc3ltYm9sVGFibGUsIEpTVmFsdWUgaW5pdGlhbFZhbHVlLCBB
YnN0cmFjdE1vZHVsZVJlY29yZCogbW9kdWxlUmVjb3JkKQogICAgIHsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTW9kdWxlTmFtZXNwYWNlT2JqZWN0LmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNNb2R1bGVOYW1lc3BhY2VPYmpl
Y3QuaAkocmV2aXNpb24gMjc3OTQ4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNNb2R1bGVOYW1lc3BhY2VPYmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAtMzQsNyArMzQsNyBA
QCBuYW1lc3BhY2UgSlNDIHsKIGNsYXNzIEpTTW9kdWxlTmFtZXNwYWNlT2JqZWN0IGZpbmFsIDog
cHVibGljIEpTTm9uRmluYWxPYmplY3QgewogcHVibGljOgogICAgIHVzaW5nIEJhc2UgPSBKU05v
bkZpbmFsT2JqZWN0OwotICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgU3RydWN0dXJlRmxh
Z3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8IE92ZXJyaWRlc0dldE93blByb3BlcnR5U2xvdCB8
IE92ZXJyaWRlc0dldE93blByb3BlcnR5TmFtZXMgfCBJbnRlcmNlcHRzR2V0T3duUHJvcGVydHlT
bG90QnlJbmRleEV2ZW5XaGVuTGVuZ3RoSXNOb3RaZXJvIHwgR2V0T3duUHJvcGVydHlTbG90SXNJ
bXB1cmVGb3JQcm9wZXJ0eUFic2VuY2UgfCBJc0ltbXV0YWJsZVByb3RvdHlwZUV4b3RpY09iamVj
dDsKKyAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6
U3RydWN0dXJlRmxhZ3MgfCBPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3QgfCBPdmVycmlkZXNH
ZXRPd25Qcm9wZXJ0eU5hbWVzIHwgT3ZlcnJpZGVzUHV0IHwgSW50ZXJjZXB0c0dldE93blByb3Bl
cnR5U2xvdEJ5SW5kZXhFdmVuV2hlbkxlbmd0aElzTm90WmVybyB8IEdldE93blByb3BlcnR5U2xv
dElzSW1wdXJlRm9yUHJvcGVydHlBYnNlbmNlIHwgSXNJbW11dGFibGVQcm90b3R5cGVFeG90aWNP
YmplY3Q7CiAKICAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNEZXN0cnVjdGlvbiA9IHRy
dWU7CiAgICAgc3RhdGljIHZvaWQgZGVzdHJveShKU0NlbGwqKTsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5jcHAJKHJldmlzaW9uIDI3Nzk0OCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNjQ2LDEwICs2NDYsNiBAQCBib29sIEpTT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eVNsb3QoSlNP
YmplCiB7CiAgICAgcmV0dXJuIGdldE93blByb3BlcnR5U2xvdEltcGwob2JqZWN0LCBnbG9iYWxP
YmplY3QsIHByb3BlcnR5TmFtZSwgc2xvdCk7CiB9Ci0KLXZvaWQgSlNPYmplY3Q6OmRvUHV0UHJv
cGVydHlTZWN1cml0eUNoZWNrKEpTT2JqZWN0KiwgSlNHbG9iYWxPYmplY3QqLCBQcm9wZXJ0eU5h
bWUsIFB1dFByb3BlcnR5U2xvdCYpCi17Ci19CiAjZW5kaWYgLy8gQVNTRVJUX0VOQUJMRUQKIAog
Ly8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtb3JkaW5hcnlzZXQKQEAgLTc1
OCw3ICs3NTQsNyBAQCBib29sIG9yZGluYXJ5U2V0U2xvdyhKU0dsb2JhbE9iamVjdCogZ2xvCiAg
ICAgcmV0dXJuIHRydWU7CiB9CiAKLS8vIEVDTUEgOC42LjIuMgorLy8gaHR0cHM6Ly90YzM5LmVz
L2VjbWEyNjIvI3NlYy1vcmRpbmFyeXNldAogYm9vbCBKU09iamVjdDo6cHV0KEpTQ2VsbCogY2Vs
bCwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFt
ZSwgSlNWYWx1ZSB2YWx1ZSwgUHV0UHJvcGVydHlTbG90JiBzbG90KQogewogICAgIHJldHVybiBw
dXRJbmxpbmVGb3JKU09iamVjdChjZWxsLCBnbG9iYWxPYmplY3QsIHByb3BlcnR5TmFtZSwgdmFs
dWUsIHNsb3QpOwpAQCAtNzY2LDY2ICs3NjIsOTYgQEAgYm9vbCBKU09iamVjdDo6cHV0KEpTQ2Vs
bCogY2VsbCwgSlNHbG9iYQogCiBib29sIEpTT2JqZWN0OjpwdXRJbmxpbmVTbG93KEpTR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3QsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUg
dmFsdWUsIFB1dFByb3BlcnR5U2xvdCYgc2xvdCkKIHsKLSAgICBBU1NFUlQoIWlzVGhpc1ZhbHVl
QWx0ZXJlZChzbG90LCB0aGlzKSk7CisgICAgQVNTRVJUKCFwYXJzZUluZGV4KHByb3BlcnR5TmFt
ZSkpOwogCiAgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwogICAgIGF1dG8gc2NvcGUg
PSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAorICAgIGlmIChVTkxJS0VMWSghdm0uaXNTYWZl
VG9SZWN1cnNlU29mdCgpKSkgeworICAgICAgICB0aHJvd1N0YWNrT3ZlcmZsb3dFcnJvcihnbG9i
YWxPYmplY3QsIHNjb3BlKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKwogICAgIEpT
T2JqZWN0KiBvYmogPSB0aGlzOwogICAgIGZvciAoOzspIHsKICAgICAgICAgU3RydWN0dXJlKiBz
dHJ1Y3R1cmUgPSBvYmotPnN0cnVjdHVyZSh2bSk7Ci0gICAgICAgIGlmIChVTkxJS0VMWShzdHJ1
Y3R1cmUtPnR5cGVJbmZvKCkuaGFzUHV0UHJvcGVydHlTZWN1cml0eUNoZWNrKCkpKSB7Ci0gICAg
ICAgICAgICBvYmotPm1ldGhvZFRhYmxlKHZtKS0+ZG9QdXRQcm9wZXJ0eVNlY3VyaXR5Q2hlY2so
b2JqLCBnbG9iYWxPYmplY3QsIHByb3BlcnR5TmFtZSwgc2xvdCk7Ci0gICAgICAgICAgICBSRVRV
Uk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBmYWxzZSk7Ci0gICAgICAgIH0KKyAgICAgICAgLy8gRklY
TUU6IENhbiBvcGFxdWUgQVBJIG9iamVjdHMgcGVyZm9ybSBPcmRpbmFyeVNldCBmb3IgYWx0ZXJl
ZCByZWNlaXZlcnMgaW5zdGVhZCBvZiBza2lwcGluZyB0aGVtIGhlcmU/CisgICAgICAgIGlmIChv
YmogIT0gdGhpcyAmJiBzdHJ1Y3R1cmUtPnR5cGVJbmZvKCkub3ZlcnJpZGVzUHV0KCkgJiYgIXN0
cnVjdHVyZS0+dHlwZUluZm8oKS5pc09wYXF1ZUFQSU9iamVjdCgpKQorICAgICAgICAgICAgUkVM
RUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBvYmotPm1ldGhvZFRhYmxlKHZtKS0+cHV0KG9iaiwgZ2xv
YmFsT2JqZWN0LCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCBzbG90KSk7CisKKyAgICAgICAgYm9vbCBo
YXNQcm9wZXJ0eSA9IGZhbHNlOwogICAgICAgICB1bnNpZ25lZCBhdHRyaWJ1dGVzOworICAgICAg
ICBQdXRQcm9wZXJ0eVNsb3Q6OlB1dFZhbHVlRnVuYyBjdXN0b21TZXR0ZXIgPSBudWxscHRyOwog
ICAgICAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQgPSBzdHJ1Y3R1cmUtPmdldCh2bSwgcHJvcGVy
dHlOYW1lLCBhdHRyaWJ1dGVzKTsKICAgICAgICAgaWYgKGlzVmFsaWRPZmZzZXQob2Zmc2V0KSkg
ewotICAgICAgICAgICAgaWYgKGF0dHJpYnV0ZXMgJiBQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVhZE9u
bHkpIHsKLSAgICAgICAgICAgICAgICBBU1NFUlQodGhpcy0+cHJvdG90eXBlQ2hhaW5NYXlJbnRl
cmNlcHRTdG9yZVRvKHZtLCBwcm9wZXJ0eU5hbWUpIHx8IG9iaiA9PSB0aGlzKTsKLSAgICAgICAg
ICAgICAgICByZXR1cm4gdHlwZUVycm9yKGdsb2JhbE9iamVjdCwgc2NvcGUsIHNsb3QuaXNTdHJp
Y3RNb2RlKCksIFJlYWRvbmx5UHJvcGVydHlXcml0ZUVycm9yKTsKKyAgICAgICAgICAgIGhhc1By
b3BlcnR5ID0gdHJ1ZTsKKyAgICAgICAgICAgIGlmIChhdHRyaWJ1dGVzICYgUHJvcGVydHlBdHRy
aWJ1dGU6OkN1c3RvbUFjY2Vzc29yT3JWYWx1ZSkKKyAgICAgICAgICAgICAgICBjdXN0b21TZXR0
ZXIgPSBqc0Nhc3Q8Q3VzdG9tR2V0dGVyU2V0dGVyKj4ob2JqLT5nZXREaXJlY3Qob2Zmc2V0KSkt
PnNldHRlcigpOworICAgICAgICB9IGVsc2UgaWYgKHN0cnVjdHVyZS0+aGFzTm9uUmVpZmllZFN0
YXRpY1Byb3BlcnRpZXMoKSkgeworICAgICAgICAgICAgaWYgKGF1dG8gZW50cnkgPSBzdHJ1Y3R1
cmUtPmZpbmRQcm9wZXJ0eUhhc2hFbnRyeShwcm9wZXJ0eU5hbWUpKSB7CisgICAgICAgICAgICAg
ICAgaGFzUHJvcGVydHkgPSB0cnVlOworICAgICAgICAgICAgICAgIGF0dHJpYnV0ZXMgPSBlbnRy
eS0+dmFsdWUtPmF0dHJpYnV0ZXMoKTsKKworICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBSZW1v
dmUgdGhpcyBhZnRlciB3cml0YWJsZSBhY2Nlc3NvcnMgYXJlIGludHJvZHVjZWQgdG8gc3RhdGlj
IGhhc2ggdGFibGVzLgorICAgICAgICAgICAgICAgIGlmIChhdHRyaWJ1dGVzICYgUHJvcGVydHlB
dHRyaWJ1dGU6OkFjY2Vzc29yKQorICAgICAgICAgICAgICAgICAgICBhdHRyaWJ1dGVzIHw9IFBy
b3BlcnR5QXR0cmlidXRlOjpSZWFkT25seTsKKyAgICAgICAgICAgICAgICAvLyBGSVhNRTogUmVt
b3ZlIHRoaXMgYWZ0ZXIgd2Ugc3RvcCBkZWZhdWx0aW5nIHRvIEN1c3RvbVZhbHVlIGluIHN0YXRp
YyBoYXNoIHRhYmxlcy4KKyAgICAgICAgICAgICAgICBpZiAoIShhdHRyaWJ1dGVzICYgKFByb3Bl
cnR5QXR0cmlidXRlOjpDdXN0b21BY2Nlc3NvciB8IFByb3BlcnR5QXR0cmlidXRlOjpCdWlsdGlu
T3JGdW5jdGlvbk9yQWNjZXNzb3JPckxhenlQcm9wZXJ0eU9yQ29uc3RhbnQpKSkKKyAgICAgICAg
ICAgICAgICAgICAgYXR0cmlidXRlcyB8PSBQcm9wZXJ0eUF0dHJpYnV0ZTo6Q3VzdG9tVmFsdWU7
CisKKyAgICAgICAgICAgICAgICBpZiAoYXR0cmlidXRlcyAmIFByb3BlcnR5QXR0cmlidXRlOjpD
dXN0b21BY2Nlc3Nvck9yVmFsdWUpCisgICAgICAgICAgICAgICAgICAgIGN1c3RvbVNldHRlciA9
IGVudHJ5LT52YWx1ZS0+cHJvcGVydHlQdXR0ZXIoKTsKICAgICAgICAgICAgIH0KKyAgICAgICAg
fQogCi0gICAgICAgICAgICBKU1ZhbHVlIGdzID0gb2JqLT5nZXREaXJlY3Qob2Zmc2V0KTsKLSAg
ICAgICAgICAgIGlmIChncy5pc0dldHRlclNldHRlcigpKSB7CisgICAgICAgIGlmIChoYXNQcm9w
ZXJ0eSkgeworICAgICAgICAgICAgaWYgKGF0dHJpYnV0ZXMgJiBQcm9wZXJ0eUF0dHJpYnV0ZTo6
UmVhZE9ubHkpCisgICAgICAgICAgICAgICAgcmV0dXJuIHR5cGVFcnJvcihnbG9iYWxPYmplY3Qs
IHNjb3BlLCBzbG90LmlzU3RyaWN0TW9kZSgpLCBSZWFkb25seVByb3BlcnR5V3JpdGVFcnJvcik7
CisgICAgICAgICAgICBpZiAoYXR0cmlidXRlcyAmIFByb3BlcnR5QXR0cmlidXRlOjpBY2Nlc3Nv
cikgeworICAgICAgICAgICAgICAgIEFTU0VSVChpc1ZhbGlkT2Zmc2V0KG9mZnNldCkpOwogICAg
ICAgICAgICAgICAgIC8vIFdlIG5lZWQgdG8gbWFrZSBzdXJlIHRoYXQgd2UgZGVjaWRlIHRvIGNh
Y2hlIHRoaXMgcHJvcGVydHkgYmVmb3JlIHdlIHBvdGVudGlhbGx5IGV4ZWN1dGUgYXJpYml0cmFy
eSBKUy4KICAgICAgICAgICAgICAgICBpZiAoIXRoaXMtPnN0cnVjdHVyZSh2bSktPmlzVW5jYWNo
ZWFibGVEaWN0aW9uYXJ5KCkpCiAgICAgICAgICAgICAgICAgICAgIHNsb3Quc2V0Q2FjaGVhYmxl
U2V0dGVyKG9iaiwgb2Zmc2V0KTsKICAgICAgICAgICAgICAgICBSRUxFQVNFX0FORF9SRVRVUk4o
c2NvcGUsIGpzQ2FzdDxHZXR0ZXJTZXR0ZXIqPihvYmotPmdldERpcmVjdChvZmZzZXQpKS0+Y2Fs
bFNldHRlcihnbG9iYWxPYmplY3QsIHNsb3QudGhpc1ZhbHVlKCksIHZhbHVlLCBzbG90LmlzU3Ry
aWN0TW9kZSgpKSk7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoZ3MuaXNDdXN0b21H
ZXR0ZXJTZXR0ZXIoKSkgewotICAgICAgICAgICAgICAgIGJvb2wgaXNBY2Nlc3NvciA9IGF0dHJp
YnV0ZXMgJiBQcm9wZXJ0eUF0dHJpYnV0ZTo6Q3VzdG9tQWNjZXNzb3I7Ci0gICAgICAgICAgICAg
ICAgYXV0byBzZXR0ZXIgPSBqc0Nhc3Q8Q3VzdG9tR2V0dGVyU2V0dGVyKj4oZ3MuYXNDZWxsKCkp
LT5zZXR0ZXIoKTsKKyAgICAgICAgICAgIGlmIChhdHRyaWJ1dGVzICYgUHJvcGVydHlBdHRyaWJ1
dGU6OkN1c3RvbUFjY2Vzc29yKSB7CisgICAgICAgICAgICAgICAgLy8gRklYTUU6IFJlbW92ZSB0
aGlzIGFmdGVyIFdlYklETCBnZW5lcmF0b3IgaXMgZml4ZWQgdG8gc2V0IFJlYWRPbmx5IGZvciBb
UnVudGltZUNvbmRpdGlvbmFsbHlSZWFkV3JpdGVdIGF0dHJpYnV0ZXMuCisgICAgICAgICAgICAg
ICAgaWYgKCFjdXN0b21TZXR0ZXIpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICAgICAgICAgICAgICBBU1NFUlQoY3VzdG9tU2V0dGVyKTsKICAgICAgICAgICAgICAgICAv
LyBGSVhNRTogV2Ugc2hvdWxkIG9ubHkgYmUgY2FjaGluZyB0aGVzZSBpZiB3ZSdyZSBub3QgYW4g
dW5jYWNoZWFibGUgZGljdGlvbmFyeToKICAgICAgICAgICAgICAgICAvLyBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjE1MzQ3Ci0KLSAgICAgICAgICAgICAgICAvLyBX
ZSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGF0IHdlIGRlY2lkZSB0byBjYWNoZSB0aGlzIHByb3BlcnR5
IGJlZm9yZSB3ZSBwb3RlbnRpYWxseSBleGVjdXRlIGFyaWJpdHJhcnkgSlMuCi0gICAgICAgICAg
ICAgICAgaWYgKGlzQWNjZXNzb3IpCi0gICAgICAgICAgICAgICAgICAgIHNsb3Quc2V0Q3VzdG9t
QWNjZXNzb3Iob2JqLCBzZXR0ZXIpOwotICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAg
ICAgICAgICAgc2xvdC5zZXRDdXN0b21WYWx1ZShvYmosIHNldHRlcik7Ci0KLSAgICAgICAgICAg
ICAgICBhdXRvIHJlc3VsdCA9IGNhbGxDdXN0b21TZXR0ZXIoZ2xvYmFsT2JqZWN0LCBzZXR0ZXIs
IGlzQWNjZXNzb3IsIG9iaiwgc2xvdC50aGlzVmFsdWUoKSwgdmFsdWUsIHByb3BlcnR5TmFtZSk7
Ci0gICAgICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZmFsc2UpOwotICAg
ICAgICAgICAgICAgIGlmIChyZXN1bHQgIT0gVHJpU3RhdGU6OkluZGV0ZXJtaW5hdGUpCi0gICAg
ICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQgPT0gVHJpU3RhdGU6OlRydWU7CisgICAgICAg
ICAgICAgICAgc2xvdC5zZXRDdXN0b21BY2Nlc3NvcihvYmosIGN1c3RvbVNldHRlcik7CisgICAg
ICAgICAgICAgICAgc2NvcGUucmVsZWFzZSgpOworICAgICAgICAgICAgICAgIGN1c3RvbVNldHRl
cihnbG9iYWxPYmplY3QsIEpTVmFsdWU6OmVuY29kZShzbG90LnRoaXNWYWx1ZSgpKSwgSlNWYWx1
ZTo6ZW5jb2RlKHZhbHVlKSwgcHJvcGVydHlOYW1lKTsKKyAgICAgICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIEFTU0VSVCghKGF0dHJpYnV0ZXMgJiBQ
cm9wZXJ0eUF0dHJpYnV0ZTo6QWNjZXNzb3IpKTsKLQotICAgICAgICAgICAgLy8gSWYgdGhlcmUn
cyBhbiBleGlzdGluZyBwcm9wZXJ0eSBvbiB0aGUgYmFzZSBvYmplY3QsIG9yIG9uIG9uZSBvZiBp
dHMgCi0gICAgICAgICAgICAvLyBwcm90b3R5cGVzLCB3ZSBzaG91bGQgc3RvcmUgdGhlIHByb3Bl
cnR5IG9uIHRoZSAqYmFzZSogb2JqZWN0LgotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0K
LSAgICAgICAgaWYgKCFvYmotPnN0YXRpY1Byb3BlcnRpZXNSZWlmaWVkKHZtKSkgewotICAgICAg
ICAgICAgaWYgKG9iai0+Y2xhc3NJbmZvKHZtKS0+aGFzU3RhdGljU2V0dGVyT3JSZWFkb25seVBy
b3BlcnRpZXMoKSkgewotICAgICAgICAgICAgICAgIGlmIChhdXRvIGVudHJ5ID0gb2JqLT5maW5k
UHJvcGVydHlIYXNoRW50cnkodm0sIHByb3BlcnR5TmFtZSkpCi0gICAgICAgICAgICAgICAgICAg
IFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwgcHV0RW50cnkoZ2xvYmFsT2JqZWN0LCBlbnRyeS0+
dGFibGUtPmNsYXNzRm9yVGhpcywgZW50cnktPnZhbHVlLCBvYmosIHRoaXMsIHByb3BlcnR5TmFt
ZSwgdmFsdWUsIHNsb3QpKTsKKyAgICAgICAgICAgIGlmIChhdHRyaWJ1dGVzICYgUHJvcGVydHlB
dHRyaWJ1dGU6OkN1c3RvbVZhbHVlKSB7CisgICAgICAgICAgICAgICAgLy8gRklYTUU6IE9uY2Ug
bGVnYWN5IFJlZ0V4cCBmZWF0dXJlcyBhcmUgaW1wbGVtZW50ZWQsIHRoZXJlIHdvdWxkIGJlIG5v
IHVzZSBjYXNlIGZvciBjYWxsaW5nIEN1c3RvbVZhbHVlIHNldHRlciBpZiByZWNlaXZlciBpcyBh
bHRlcmVkLgorICAgICAgICAgICAgICAgIGlmIChjdXN0b21TZXR0ZXIgJiYgIShpc1RoaXNWYWx1
ZUFsdGVyZWQoc2xvdCwgb2JqKSAmJiBzbG90LmNvbnRleHQoKSA9PSBQdXRQcm9wZXJ0eVNsb3Q6
OlJlZmxlY3RTZXQpKSB7CisgICAgICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBXZSBzaG91bGQg
b25seSBiZSBjYWNoaW5nIHRoZXNlIGlmIHdlJ3JlIG5vdCBhbiB1bmNhY2hlYWJsZSBkaWN0aW9u
YXJ5OgorICAgICAgICAgICAgICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MjE1MzQ3CisgICAgICAgICAgICAgICAgICAgIHNsb3Quc2V0Q3VzdG9tVmFs
dWUob2JqLCBjdXN0b21TZXR0ZXIpOworICAgICAgICAgICAgICAgICAgICBSRUxFQVNFX0FORF9S
RVRVUk4oc2NvcGUsIGN1c3RvbVNldHRlcihnbG9iYWxPYmplY3QsIEpTVmFsdWU6OmVuY29kZShv
YmopLCBKU1ZhbHVlOjplbmNvZGUodmFsdWUpLCBwcm9wZXJ0eU5hbWUpKTsKKyAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgaWYgKCFpc1RoaXNWYWx1ZUFsdGVyZWQoc2xvdCwgb2Jq
KSkgeworICAgICAgICAgICAgICAgICAgICAvLyBBdm9pZCBQdXRNb2RlUHV0IGJlY2F1c2UgaXQg
ZmFpbHMgZm9yIG5vbi1leHRlbnNpYmxlIHN0cnVjdHVyZXMuCisgICAgICAgICAgICAgICAgICAg
IG9iai0+cHV0RGlyZWN0KHZtLCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCBhdHRyaWJ1dGVzRm9yU3Ry
dWN0dXJlKGF0dHJpYnV0ZXMpICYgflByb3BlcnR5QXR0cmlidXRlOjpDdXN0b21WYWx1ZSwgc2xv
dCk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChhdHRyaWJ1dGVzICYgUHJvcGVydHlBdHRy
aWJ1dGU6OkJ1aWx0aW5PckZ1bmN0aW9uT3JMYXp5UHJvcGVydHkpIHsKKyAgICAgICAgICAgICAg
ICBpZiAoIWlzVGhpc1ZhbHVlQWx0ZXJlZChzbG90LCBvYmopKSB7CisgICAgICAgICAgICAgICAg
ICAgIC8vIEF2b2lkIFB1dE1vZGVQdXQgYmVjYXVzZSBpdCBmYWlscyBmb3Igbm9uLWV4dGVuc2li
bGUgc3RydWN0dXJlcy4KKyAgICAgICAgICAgICAgICAgICAgb2JqLT5wdXREaXJlY3Qodm0sIHBy
b3BlcnR5TmFtZSwgdmFsdWUsIGF0dHJpYnV0ZXNGb3JTdHJ1Y3R1cmUoYXR0cmlidXRlcyksIHNs
b3QpOworICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICB9CisgICAgICAgICAgICAvLyBJZiB0aGVyZSdzIGFuIGV4aXN0aW5nIHdy
aXRhYmxlIHByb3BlcnR5IG9uIHRoZSBiYXNlIG9iamVjdCwgb3Igb24gb25lIG9mIGl0cyAKKyAg
ICAgICAgICAgIC8vIHByb3RvdHlwZXMsIHdlIHNob3VsZCBhdHRlbXB0IHRvIHN0b3JlIHRoZSBw
cm9wZXJ0eSBvbiB0aGUgcmVjZWl2ZXIuCisgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQot
ICAgICAgICBpZiAob2JqLT50eXBlKCkgPT0gUHJveHlPYmplY3RUeXBlKSB7Ci0gICAgICAgICAg
ICBhdXRvKiBwcm94eSA9IGpzQ2FzdDxQcm94eU9iamVjdCo+KG9iaik7Ci0gICAgICAgICAgICBS
RUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIHByb3h5LT5Qcm94eU9iamVjdDo6cHV0KHByb3h5LCBn
bG9iYWxPYmplY3QsIHByb3BlcnR5TmFtZSwgdmFsdWUsIHNsb3QpKTsKLSAgICAgICAgfQorCiAg
ICAgICAgIEpTVmFsdWUgcHJvdG90eXBlID0gb2JqLT5nZXRQcm90b3R5cGUodm0sIGdsb2JhbE9i
amVjdCk7CiAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGZhbHNlKTsKICAgICAg
ICAgaWYgKHByb3RvdHlwZS5pc051bGwoKSkKQEAgLTgzMyw5ICs4NTksODAgQEAgYm9vbCBKU09i
amVjdDo6cHV0SW5saW5lU2xvdyhKU0dsb2JhbE9iagogICAgICAgICBvYmogPSBhc09iamVjdChw
cm90b3R5cGUpOwogICAgIH0KIAotICAgIGlmICghcHV0RGlyZWN0SW50ZXJuYWw8UHV0TW9kZVB1
dD4odm0sIHByb3BlcnR5TmFtZSwgdmFsdWUsIDAsIHNsb3QpKQorICAgIHNjb3BlLnJlbGVhc2Uo
KTsKKyAgICBpZiAoVU5MSUtFTFkoaXNUaGlzVmFsdWVBbHRlcmVkKHNsb3QsIHRoaXMpKSkKKyAg
ICAgICAgcmV0dXJuIGRlZmluZVByb3BlcnR5T25SZWNlaXZlcihnbG9iYWxPYmplY3QsIHByb3Bl
cnR5TmFtZSwgdmFsdWUsIHNsb3QpOworICAgIHJldHVybiBwdXRJbmxpbmVGYXN0KGdsb2JhbE9i
amVjdCwgcHJvcGVydHlOYW1lLCB2YWx1ZSwgc2xvdCk7Cit9CisKK3N0YXRpYyBORVZFUl9JTkxJ
TkUgYm9vbCBkZWZpbmVQcm9wZXJ0eU9uUmVjZWl2ZXJTbG93KEpTR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUgdmFsdWUsIEpTT2Jq
ZWN0KiByZWNlaXZlciwgYm9vbCBzaG91bGRUaHJvdykKK3sKKyAgICBWTSYgdm0gPSBnbG9iYWxP
YmplY3QtPnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwor
CisgICAgUHJvcGVydHlTbG90IHNsb3QocmVjZWl2ZXIsIFByb3BlcnR5U2xvdDo6SW50ZXJuYWxN
ZXRob2RUeXBlOjpHZXRPd25Qcm9wZXJ0eSk7CisgICAgYm9vbCBoYXNQcm9wZXJ0eSA9IHJlY2Vp
dmVyLT5tZXRob2RUYWJsZSh2bSktPmdldE93blByb3BlcnR5U2xvdChyZWNlaXZlciwgZ2xvYmFs
T2JqZWN0LCBwcm9wZXJ0eU5hbWUsIHNsb3QpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2Nv
cGUsIGZhbHNlKTsKKworICAgIFByb3BlcnR5RGVzY3JpcHRvciBkZXNjcmlwdG9yOworICAgIGlm
IChoYXNQcm9wZXJ0eSkgeworICAgICAgICAvLyBGSVhNRTogRm9yIGFuIGFjY2Vzc29yIHdpdGgg
c2V0dGVyLCB0aGUgZXJyb3IgbWVzc2FnZSBpcyBtaXNsZWFkaW5nLgorICAgICAgICBpZiAoc2xv
dC5hdHRyaWJ1dGVzKCkgJiBQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVhZE9ubHlPckFjY2Vzc29yT3JD
dXN0b21BY2Nlc3NvcikKKyAgICAgICAgICAgIHJldHVybiB0eXBlRXJyb3IoZ2xvYmFsT2JqZWN0
LCBzY29wZSwgc2hvdWxkVGhyb3csIFJlYWRvbmx5UHJvcGVydHlXcml0ZUVycm9yKTsKKyAgICAg
ICAgZGVzY3JpcHRvci5zZXRWYWx1ZSh2YWx1ZSk7CisgICAgfSBlbHNlCisgICAgICAgIGRlc2Ny
aXB0b3Iuc2V0RGVzY3JpcHRvcih2YWx1ZSwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KFByb3BlcnR5
QXR0cmlidXRlOjpOb25lKSk7CisKKyAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIHJlY2Vp
dmVyLT5tZXRob2RUYWJsZSh2bSktPmRlZmluZU93blByb3BlcnR5KHJlY2VpdmVyLCBnbG9iYWxP
YmplY3QsIHByb3BlcnR5TmFtZSwgZGVzY3JpcHRvciwgc2hvdWxkVGhyb3cpKTsKK30KKworLy8g
aHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vcmRpbmFyeXNldCAoc3RlcCAzKQorYm9vbCBK
U09iamVjdDo6ZGVmaW5lUHJvcGVydHlPblJlY2VpdmVyKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmplY3QsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUgdmFsdWUsIFB1dFByb3Bl
cnR5U2xvdCYgc2xvdCkKK3sKKyAgICBBU1NFUlQoIXBhcnNlSW5kZXgocHJvcGVydHlOYW1lKSk7
CisKKyAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CisgICAgYXV0byBzY29wZSA9IERF
Q0xBUkVfVEhST1dfU0NPUEUodm0pOworCisgICAgSlNPYmplY3QqIHJlY2VpdmVyID0gc2xvdC50
aGlzVmFsdWUoKS5nZXRPYmplY3QoKTsKKyAgICAvLyBGSVhNRTogRm9yIGEgZmFpbHVyZSBkdWUg
dG8gcHJpbWl0aXZlIHJlY2VpdmVyLCB0aGUgZXJyb3IgbWVzc2FnZSBpcyBtaXNsZWFkaW5nLgor
ICAgIGlmICghcmVjZWl2ZXIpCiAgICAgICAgIHJldHVybiB0eXBlRXJyb3IoZ2xvYmFsT2JqZWN0
LCBzY29wZSwgc2xvdC5pc1N0cmljdE1vZGUoKSwgUmVhZG9ubHlQcm9wZXJ0eVdyaXRlRXJyb3Ip
OwotICAgIHJldHVybiB0cnVlOworICAgIHNjb3BlLnJlbGVhc2UoKTsKKworICAgIGlmIChzbG90
LmlzVGFpbnRlZEJ5T3BhcXVlT2JqZWN0KCkgfHwgc2xvdC5jb250ZXh0KCkgPT0gUHV0UHJvcGVy
dHlTbG90OjpSZWZsZWN0U2V0KSB7CisgICAgICAgIGlmIChyZWNlaXZlci0+bWV0aG9kVGFibGUo
dm0pLT5kZWZpbmVPd25Qcm9wZXJ0eSAhPSBKU09iamVjdDo6ZGVmaW5lT3duUHJvcGVydHkpCisg
ICAgICAgICAgICByZXR1cm4gZGVmaW5lUHJvcGVydHlPblJlY2VpdmVyU2xvdyhnbG9iYWxPYmpl
Y3QsIHByb3BlcnR5TmFtZSwgdmFsdWUsIHJlY2VpdmVyLCBzbG90LmlzU3RyaWN0TW9kZSgpKTsK
KyAgICB9CisKKyAgICBpZiAoVU5MSUtFTFkocmVjZWl2ZXItPmhhc05vblJlaWZpZWRTdGF0aWNQ
cm9wZXJ0aWVzKHZtKSkpCisgICAgICAgIHJldHVybiByZWNlaXZlci0+cHV0SW5saW5lRmFzdFJl
cGxhY2luZ1N0YXRpY1Byb3BlcnR5SWZOZWVkZWQoZ2xvYmFsT2JqZWN0LCBwcm9wZXJ0eU5hbWUs
IHZhbHVlLCBzbG90KTsKKyAgICByZXR1cm4gcmVjZWl2ZXItPnB1dElubGluZUZhc3QoZ2xvYmFs
T2JqZWN0LCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCBzbG90KTsKK30KKworYm9vbCBKU09iamVjdDo6
cHV0SW5saW5lRmFzdFJlcGxhY2luZ1N0YXRpY1Byb3BlcnR5SWZOZWVkZWQoSlNHbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSB2YWx1
ZSwgUHV0UHJvcGVydHlTbG90JiBzbG90KQoreworICAgIEFTU0VSVCghcGFyc2VJbmRleChwcm9w
ZXJ0eU5hbWUpKTsKKworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICBhdXRv
IHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKKyAgICBTdHJ1Y3R1cmUqIHN0cnVj
dHVyZSA9IHRoaXMtPnN0cnVjdHVyZSh2bSk7CisgICAgQVNTRVJUKHN0cnVjdHVyZS0+aGFzTm9u
UmVpZmllZFN0YXRpY1Byb3BlcnRpZXMoKSk7CisgICAgaWYgKCFpc1ZhbGlkT2Zmc2V0KHN0cnVj
dHVyZS0+Z2V0KHZtLCBwcm9wZXJ0eU5hbWUpKSkgeworICAgICAgICBpZiAoYXV0byBlbnRyeSA9
IHN0cnVjdHVyZS0+ZmluZFByb3BlcnR5SGFzaEVudHJ5KHByb3BlcnR5TmFtZSkpIHsKKyAgICAg
ICAgICAgIGlmIChlbnRyeS0+dmFsdWUtPmF0dHJpYnV0ZXMoKSAmIFByb3BlcnR5QXR0cmlidXRl
OjpSZWFkT25seU9yQWNjZXNzb3JPckN1c3RvbUFjY2Vzc29yKSB7CisgICAgICAgICAgICAgICAg
QVNTRVJUKHNsb3QuY29udGV4dCgpID09IFB1dFByb3BlcnR5U2xvdDo6UmVmbGVjdFNldCk7Cisg
ICAgICAgICAgICAgICAgLy8gRklYTUU6IEZvciBhbiBhY2Nlc3NvciB3aXRoIHNldHRlciwgdGhl
IGVycm9yIG1lc3NhZ2UgaXMgbWlzbGVhZGluZy4KKyAgICAgICAgICAgICAgICByZXR1cm4gdHlw
ZUVycm9yKGdsb2JhbE9iamVjdCwgc2NvcGUsIHNsb3QuaXNTdHJpY3RNb2RlKCksIFJlYWRvbmx5
UHJvcGVydHlXcml0ZUVycm9yKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIC8vIEF2b2lk
IFB1dE1vZGVQdXQgYmVjYXVzZSBpdCBmYWlscyBmb3Igbm9uLWV4dGVuc2libGUgc3RydWN0dXJl
cy4KKyAgICAgICAgICAgIHB1dERpcmVjdCh2bSwgcHJvcGVydHlOYW1lLCB2YWx1ZSwgYXR0cmli
dXRlc0ZvclN0cnVjdHVyZShlbnRyeS0+dmFsdWUtPmF0dHJpYnV0ZXMoKSkgJiB+UHJvcGVydHlB
dHRyaWJ1dGU6OkN1c3RvbVZhbHVlLCBzbG90KTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOwor
ICAgICAgICB9CisgICAgfQorCisgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBwdXRJbmxp
bmVGYXN0KGdsb2JhbE9iamVjdCwgcHJvcGVydHlOYW1lLCB2YWx1ZSwgc2xvdCkpOwogfQogCiBi
b29sIEpTT2JqZWN0OjpwdXRCeUluZGV4KEpTQ2VsbCogY2VsbCwgSlNHbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCwgdW5zaWduZWQgcHJvcGVydHlOYW1lLCBKU1ZhbHVlIHZhbHVlLCBib29sIHNo
b3VsZFRocm93KQpAQCAtMTk2Miw3ICsyMDU5LDcgQEAgYm9vbCBKU09iamVjdDo6aGFzRW51bWVy
YWJsZVByb3BlcnR5KEpTRwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGZhbHNlKTsK
ICAgICBpZiAoIWhhc1Byb3BlcnR5KQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgcmV0dXJu
ICEoc2xvdC5hdHRyaWJ1dGVzKCkgJiBQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pIHx8IChz
bG90LnNsb3RCYXNlKCkgJiYgc2xvdC5zbG90QmFzZSgpLT5zdHJ1Y3R1cmUodm0pLT50eXBlSW5m
bygpLmdldE93blByb3BlcnR5U2xvdE1heUJlV3JvbmdBYm91dERvbnRFbnVtKCkpOworICAgIHJl
dHVybiAhKHNsb3QuYXR0cmlidXRlcygpICYgUHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKSB8
fCAoc2xvdC5zbG90QmFzZSgpICYmIHNsb3Quc2xvdEJhc2UoKS0+c3RydWN0dXJlKHZtKS0+dHlw
ZUluZm8oKS5pc09wYXF1ZUFQSU9iamVjdCgpKTsKIH0KIAogYm9vbCBKU09iamVjdDo6aGFzRW51
bWVyYWJsZVByb3BlcnR5KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIHVuc2lnbmVkIHBy
b3BlcnR5TmFtZSkgY29uc3QKQEAgLTE5NzQsNyArMjA3MSw3IEBAIGJvb2wgSlNPYmplY3Q6Omhh
c0VudW1lcmFibGVQcm9wZXJ0eShKU0cKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBm
YWxzZSk7CiAgICAgaWYgKCFoYXNQcm9wZXJ0eSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
IHJldHVybiAhKHNsb3QuYXR0cmlidXRlcygpICYgUHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVt
KSB8fCAoc2xvdC5zbG90QmFzZSgpICYmIHNsb3Quc2xvdEJhc2UoKS0+c3RydWN0dXJlKHZtKS0+
dHlwZUluZm8oKS5nZXRPd25Qcm9wZXJ0eVNsb3RNYXlCZVdyb25nQWJvdXREb250RW51bSgpKTsK
KyAgICByZXR1cm4gIShzbG90LmF0dHJpYnV0ZXMoKSAmIFByb3BlcnR5QXR0cmlidXRlOjpEb250
RW51bSkgfHwgKHNsb3Quc2xvdEJhc2UoKSAmJiBzbG90LnNsb3RCYXNlKCktPnN0cnVjdHVyZSh2
bSktPnR5cGVJbmZvKCkuaXNPcGFxdWVBUElPYmplY3QoKSk7CiB9CiAKIC8vIEVDTUEgOC42LjIu
NQpAQCAtMzg0NCwzMCArMzk0MSw2IEBAIGJvb2wgSlNPYmplY3Q6OmFueU9iamVjdEluQ2hhaW5N
YXlJbnRlcmMKICAgICB9CiB9CiAKLWJvb2wgSlNPYmplY3Q6OnByb3RvdHlwZUNoYWluTWF5SW50
ZXJjZXB0U3RvcmVUbyhWTSYgdm0sIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUpCi17Ci0gICAg
aWYgKHBhcnNlSW5kZXgocHJvcGVydHlOYW1lKSkKLSAgICAgICAgcmV0dXJuIGFueU9iamVjdElu
Q2hhaW5NYXlJbnRlcmNlcHRJbmRleGVkQWNjZXNzZXModm0pOwotICAgIAotICAgIGZvciAoSlNP
YmplY3QqIGN1cnJlbnQgPSB0aGlzOyA7KSB7Ci0gICAgICAgIEpTVmFsdWUgcHJvdG90eXBlID0g
Y3VycmVudC0+Z2V0UHJvdG90eXBlRGlyZWN0KHZtKTsKLSAgICAgICAgaWYgKHByb3RvdHlwZS5p
c051bGwoKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgCi0gICAgICAgIGN1
cnJlbnQgPSBhc09iamVjdChwcm90b3R5cGUpOwotICAgICAgICAKLSAgICAgICAgdW5zaWduZWQg
YXR0cmlidXRlczsKLSAgICAgICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0ID0gY3VycmVudC0+c3Ry
dWN0dXJlKHZtKS0+Z2V0KHZtLCBwcm9wZXJ0eU5hbWUsIGF0dHJpYnV0ZXMpOwotICAgICAgICBp
ZiAoIUpTQzo6aXNWYWxpZE9mZnNldChvZmZzZXQpKQotICAgICAgICAgICAgY29udGludWU7Ci0g
ICAgICAgIAotICAgICAgICBpZiAoYXR0cmlidXRlcyAmIChQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVh
ZE9ubHkgfCBQcm9wZXJ0eUF0dHJpYnV0ZTo6QWNjZXNzb3IpKQotICAgICAgICAgICAgcmV0dXJu
IHRydWU7Ci0gICAgICAgIAotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotfQotCiBib29s
IEpTT2JqZWN0OjpuZWVkc1Nsb3dQdXRJbmRleGluZyhWTSYgdm0pIGNvbnN0CiB7CiAgICAgcmV0
dXJuIGFueU9iamVjdEluQ2hhaW5NYXlJbnRlcmNlcHRJbmRleGVkQWNjZXNzZXModm0pIHx8IGds
b2JhbE9iamVjdCh2bSktPmlzSGF2aW5nQUJhZFRpbWUoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuaAkocmV2aXNpb24gMjc3OTQ4KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAtMTcxLDcg
KzE3MSw2IEBAIHB1YmxpYzoKIAogICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBib29sIGdl
dE93blByb3BlcnR5U2xvdEJ5SW5kZXgoSlNPYmplY3QqLCBKU0dsb2JhbE9iamVjdCosIHVuc2ln
bmVkIHByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90Jik7CiAgICAgYm9vbCBnZXRPd25Qcm9wZXJ0
eVNsb3RJbmxpbmUoSlNHbG9iYWxPYmplY3QqLCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYp
OwotICAgIEpTX0VYUE9SVF9QUklWQVRFX0lGX0FTU0VSVF9FTkFCTEVEIHN0YXRpYyB2b2lkIGRv
UHV0UHJvcGVydHlTZWN1cml0eUNoZWNrKEpTT2JqZWN0KiwgSlNHbG9iYWxPYmplY3QqLCBQcm9w
ZXJ0eU5hbWUsIFB1dFByb3BlcnR5U2xvdCYpOwogCiAgICAgLy8gVGhlIGtleSBkaWZmZXJlbmNl
IGJldHdlZW4gdGhpcyBhbmQgZ2V0T3duUHJvcGVydHlTbG90IGlzIHRoYXQgZ2V0T3duUHJvcGVy
dHlTbG90CiAgICAgLy8gY3VycmVudGx5IHJldHVybnMgaW5jb3JyZWN0IHJlc3VsdHMgZm9yIHRo
ZSBET00gd2luZG93ICh3aXRoIG5vbi1vd24gcHJvcGVydGllcykKQEAgLTIwNCw2ICsyMDMsNyBA
QCBwdWJsaWM6CiAgICAgc3RhdGljIGJvb2wgcHV0SW5saW5lRm9ySlNPYmplY3QoSlNDZWxsKiwg
SlNHbG9iYWxPYmplY3QqLCBQcm9wZXJ0eU5hbWUsIEpTVmFsdWUsIFB1dFByb3BlcnR5U2xvdCYp
OwogICAgIAogICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBib29sIHB1dChKU0NlbGwqLCBK
U0dsb2JhbE9iamVjdCosIFByb3BlcnR5TmFtZSwgSlNWYWx1ZSwgUHV0UHJvcGVydHlTbG90Jik7
CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgTkVWRVJfSU5MSU5FIHN0YXRpYyBib29sIGRlZmluZVBy
b3BlcnR5T25SZWNlaXZlcihKU0dsb2JhbE9iamVjdCosIFByb3BlcnR5TmFtZSwgSlNWYWx1ZSwg
UHV0UHJvcGVydHlTbG90Jik7CiAgICAgLy8gcHV0QnlJbmRleCBhc3N1bWVzIHRoYXQgdGhlIHJl
Y2VpdmVyIGlzIHRoaXMgSlNDZWxsIG9iamVjdC4KICAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0
aWMgYm9vbCBwdXRCeUluZGV4KEpTQ2VsbCosIEpTR2xvYmFsT2JqZWN0KiwgdW5zaWduZWQgcHJv
cGVydHlOYW1lLCBKU1ZhbHVlLCBib29sIHNob3VsZFRocm93KTsKICAgICAgICAgCkBAIC0yMjAs
MTIgKzIyMCwxMyBAQCBwdWJsaWM6CiAKICAgICBBTFdBWVNfSU5MSU5FIGJvb2wgcHV0QnlJbmRl
eElubGluZShKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCB1aW50NjRfdCBwcm9wZXJ0eU5h
bWUsIEpTVmFsdWUgdmFsdWUsIGJvb2wgc2hvdWxkVGhyb3cpCiAgICAgeworICAgICAgICBWTSYg
dm0gPSBnZXRWTShnbG9iYWxPYmplY3QpOwogICAgICAgICBpZiAoTElLRUxZKHByb3BlcnR5TmFt
ZSA8PSBNQVhfQVJSQVlfSU5ERVgpKQogICAgICAgICAgICAgcmV0dXJuIHB1dEJ5SW5kZXhJbmxp
bmUoZ2xvYmFsT2JqZWN0LCBzdGF0aWNfY2FzdDx1aW50MzJfdD4ocHJvcGVydHlOYW1lKSwgdmFs
dWUsIHNob3VsZFRocm93KTsKIAogICAgICAgICBBU1NFUlQocHJvcGVydHlOYW1lIDw9IG1heFNh
ZmVJbnRlZ2VyKCkpOwogICAgICAgICBQdXRQcm9wZXJ0eVNsb3Qgc2xvdCh0aGlzLCBzaG91bGRU
aHJvdyk7Ci0gICAgICAgIHJldHVybiBwdXRJbmxpbmVGb3JKU09iamVjdCh0aGlzLCBnbG9iYWxP
YmplY3QsIElkZW50aWZpZXI6OmZyb20oZ2V0Vk0oZ2xvYmFsT2JqZWN0KSwgcHJvcGVydHlOYW1l
KSwgdmFsdWUsIHNsb3QpOworICAgICAgICByZXR1cm4gbWV0aG9kVGFibGUodm0pLT5wdXQodGhp
cywgZ2xvYmFsT2JqZWN0LCBJZGVudGlmaWVyOjpmcm9tKHZtLCBwcm9wZXJ0eU5hbWUpLCB2YWx1
ZSwgc2xvdCk7CiAgICAgfQogICAgICAgICAKICAgICAvLyBUaGlzIGlzIHNpbWlsYXIgdG8gdGhl
IHB1dERpcmVjdCogbWV0aG9kczoKQEAgLTY0NCw2ICs2NDUsNyBAQCBwdWJsaWM6CiAgICAgLy8g
IC0gYXR0cmlidXRlcyB3aWxsIGJlIHJlc3BlY3RlZCAoYWZ0ZXIgdGhlIGNhbGwgdGhlIHByb3Bl
cnR5IHdpbGwgZXhpc3Qgd2l0aCB0aGUgZ2l2ZW4gYXR0cmlidXRlcykKICAgICAvLyAgLSB0aGUg
cHJvcGVydHkgbmFtZSBpcyBhc3N1bWVkIHRvIG5vdCBiZSBhbiBpbmRleC4KICAgICBib29sIHB1
dERpcmVjdChWTSYsIFByb3BlcnR5TmFtZSwgSlNWYWx1ZSwgdW5zaWduZWQgYXR0cmlidXRlcyA9
IDApOworICAgIGJvb2wgcHV0RGlyZWN0KFZNJiwgUHJvcGVydHlOYW1lLCBKU1ZhbHVlLCB1bnNp
Z25lZCBhdHRyaWJ1dGVzLCBQdXRQcm9wZXJ0eVNsb3QmKTsKICAgICBib29sIHB1dERpcmVjdChW
TSYsIFByb3BlcnR5TmFtZSwgSlNWYWx1ZSwgUHV0UHJvcGVydHlTbG90Jik7CiAgICAgdm9pZCBw
dXREaXJlY3RXaXRob3V0VHJhbnNpdGlvbihWTSYsIFByb3BlcnR5TmFtZSwgSlNWYWx1ZSwgdW5z
aWduZWQgYXR0cmlidXRlcyA9IDApOwogICAgIGJvb2wgcHV0RGlyZWN0Tm9uSW5kZXhBY2Nlc3Nv
cihWTSYsIFByb3BlcnR5TmFtZSwgR2V0dGVyU2V0dGVyKiwgdW5zaWduZWQgYXR0cmlidXRlcyk7
CkBAIC03NzAsNiArNzcyLDExIEBAIHB1YmxpYzoKICAgICBib29sIGhhc0dldHRlclNldHRlclBy
b3BlcnRpZXMoVk0mIHZtKSB7IHJldHVybiBzdHJ1Y3R1cmUodm0pLT5oYXNHZXR0ZXJTZXR0ZXJQ
cm9wZXJ0aWVzKCk7IH0KICAgICBib29sIGhhc0N1c3RvbUdldHRlclNldHRlclByb3BlcnRpZXMo
Vk0mIHZtKSB7IHJldHVybiBzdHJ1Y3R1cmUodm0pLT5oYXNDdXN0b21HZXR0ZXJTZXR0ZXJQcm9w
ZXJ0aWVzKCk7IH0KIAorICAgIGJvb2wgaGFzTm9uUmVpZmllZFN0YXRpY1Byb3BlcnRpZXMoVk0m
IHZtKQorICAgIHsKKyAgICAgICAgcmV0dXJuIFR5cGVJbmZvOjpoYXNTdGF0aWNQcm9wZXJ0eVRh
YmxlKGlubGluZVR5cGVGbGFncygpKSAmJiAhc3RydWN0dXJlKHZtKS0+c3RhdGljUHJvcGVydGll
c1JlaWZpZWQoKTsKKyAgICB9CisKICAgICAvLyBwdXRPd25EYXRhUHJvcGVydHkgaGFzICdwdXQn
IGxpa2Ugc2VtYW50aWNzLCBob3dldmVyIHRoaXMgbWV0aG9kOgogICAgIC8vICAtIGFzc3VtZXMg
dGhlIG9iamVjdCBjb250YWlucyBubyBvd24gZ2V0dGVyL3NldHRlciBwcm9wZXJ0aWVzLgogICAg
IC8vICAtIHByb3ZpZGVzIG5vIHNwZWNpYWwgaGFuZGxpbmcgZm9yIF9fcHJvdG9fXwpAQCAtODE2
LDcgKzgyMyw2IEBAIHB1YmxpYzoKICAgICBib29sIGlzRnJvemVuKFZNJiB2bSkgeyByZXR1cm4g
c3RydWN0dXJlKHZtKS0+aXNGcm96ZW4odm0pOyB9CiAKICAgICBKU19FWFBPUlRfUFJJVkFURSBi
b29sIGFueU9iamVjdEluQ2hhaW5NYXlJbnRlcmNlcHRJbmRleGVkQWNjZXNzZXMoVk0mKSBjb25z
dDsKLSAgICBKU19FWFBPUlRfUFJJVkFURSBib29sIHByb3RvdHlwZUNoYWluTWF5SW50ZXJjZXB0
U3RvcmVUbyhWTSYsIFByb3BlcnR5TmFtZSk7CiAgICAgYm9vbCBuZWVkc1Nsb3dQdXRJbmRleGlu
ZyhWTSYpIGNvbnN0OwogCiBwcml2YXRlOgpAQCAtMTEwOSw2ICsxMTE1LDggQEAgcHJpdmF0ZToK
ICAgICBib29sIHB1dERpcmVjdEludGVybmFsKFZNJiwgUHJvcGVydHlOYW1lLCBKU1ZhbHVlLCB1
bnNpZ25lZCBhdHRyLCBQdXRQcm9wZXJ0eVNsb3QmKTsKIAogICAgIEpTX0VYUE9SVF9QUklWQVRF
IE5FVkVSX0lOTElORSBib29sIHB1dElubGluZVNsb3coSlNHbG9iYWxPYmplY3QqLCBQcm9wZXJ0
eU5hbWUsIEpTVmFsdWUsIFB1dFByb3BlcnR5U2xvdCYpOworICAgIEpTX0VYUE9SVF9QUklWQVRF
IE5FVkVSX0lOTElORSBib29sIHB1dElubGluZUZhc3RSZXBsYWNpbmdTdGF0aWNQcm9wZXJ0eUlm
TmVlZGVkKEpTR2xvYmFsT2JqZWN0KiwgUHJvcGVydHlOYW1lLCBKU1ZhbHVlLCBQdXRQcm9wZXJ0
eVNsb3QmKTsKKyAgICBib29sIHB1dElubGluZUZhc3QoSlNHbG9iYWxPYmplY3QqLCBQcm9wZXJ0
eU5hbWUsIEpTVmFsdWUsIFB1dFByb3BlcnR5U2xvdCYpOwogCiAgICAgYm9vbCBnZXROb25JbmRl
eFByb3BlcnR5U2xvdChKU0dsb2JhbE9iamVjdCosIFByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90
Jik7CiAgICAgYm9vbCBnZXRPd25Ob25JbmRleFByb3BlcnR5U2xvdChWTSYsIFN0cnVjdHVyZSos
IFByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90Jik7CkBAIC0xNDQxLDEwICsxNDQ5LDYgQEAgQUxX
QVlTX0lOTElORSBib29sIEpTT2JqZWN0OjpnZXRPd25Qcm9wZQogewogICAgIHJldHVybiBnZXRP
d25Qcm9wZXJ0eVNsb3RJbXBsKG9iamVjdCwgZ2xvYmFsT2JqZWN0LCBwcm9wZXJ0eU5hbWUsIHNs
b3QpOwogfQotCi1BTFdBWVNfSU5MSU5FIHZvaWQgSlNPYmplY3Q6OmRvUHV0UHJvcGVydHlTZWN1
cml0eUNoZWNrKEpTT2JqZWN0KiwgSlNHbG9iYWxPYmplY3QqLCBQcm9wZXJ0eU5hbWUsIFB1dFBy
b3BlcnR5U2xvdCYpCi17Ci19CiAjZW5kaWYKIAogLy8gSXQgbWF5IHNlZW0gY3JhenkgdG8gaW5s
aW5lIGEgZnVuY3Rpb24gdGhpcyBsYXJnZSBidXQgaXQgbWFrZXMgYSBiaWcgZGlmZmVyZW5jZQpA
QCAtMTU0MCw2ICsxNTQ0LDEzIEBAIGlubGluZSBib29sIEpTT2JqZWN0OjpwdXREaXJlY3QoVk0m
IHZtLCAKICAgICByZXR1cm4gcHV0RGlyZWN0SW50ZXJuYWw8UHV0TW9kZURlZmluZU93blByb3Bl
cnR5Pih2bSwgcHJvcGVydHlOYW1lLCB2YWx1ZSwgYXR0cmlidXRlcywgc2xvdCk7CiB9CiAKK2lu
bGluZSBib29sIEpTT2JqZWN0OjpwdXREaXJlY3QoVk0mIHZtLCBQcm9wZXJ0eU5hbWUgcHJvcGVy
dHlOYW1lLCBKU1ZhbHVlIHZhbHVlLCB1bnNpZ25lZCBhdHRyaWJ1dGVzLCBQdXRQcm9wZXJ0eVNs
b3QmIHNsb3QpCit7CisgICAgQVNTRVJUKCF2YWx1ZS5pc0dldHRlclNldHRlcigpKTsKKyAgICBB
U1NFUlQoIXZhbHVlLmlzQ3VzdG9tR2V0dGVyU2V0dGVyKCkpOworICAgIHJldHVybiBwdXREaXJl
Y3RJbnRlcm5hbDxQdXRNb2RlRGVmaW5lT3duUHJvcGVydHk+KHZtLCBwcm9wZXJ0eU5hbWUsIHZh
bHVlLCBhdHRyaWJ1dGVzLCBzbG90KTsKK30KKwogaW5saW5lIGJvb2wgSlNPYmplY3Q6OnB1dERp
cmVjdChWTSYgdm0sIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUgdmFsdWUsIFB1
dFByb3BlcnR5U2xvdCYgc2xvdCkKIHsKICAgICBBU1NFUlQoIXZhbHVlLmlzR2V0dGVyU2V0dGVy
KCkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3RJbmxpbmVz
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3RJ
bmxpbmVzLmgJKHJldmlzaW9uIDI3Nzk0OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTT2JqZWN0SW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC02OSw2ICs2OSw4IEBAIEFM
V0FZU19JTkxJTkUgYm9vbCBKU09iamVjdDo6Y2FuUGVyZm9ybUYKICAgICAgICAgU3RydWN0dXJl
KiBzdHJ1Y3R1cmUgPSBvYmotPnN0cnVjdHVyZSh2bSk7CiAgICAgICAgIGlmIChzdHJ1Y3R1cmUt
Pmhhc1JlYWRPbmx5T3JHZXR0ZXJTZXR0ZXJQcm9wZXJ0aWVzRXhjbHVkaW5nUHJvdG8oKSB8fCBz
dHJ1Y3R1cmUtPnR5cGVJbmZvKCkub3ZlcnJpZGVzR2V0UHJvdG90eXBlKCkpCiAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgICAgIGlmIChvYmogIT0gdGhpcyAmJiBzdHJ1Y3R1cmUtPnR5
cGVJbmZvKCkub3ZlcnJpZGVzUHV0KCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAg
ICAgICAgcHJvdG90eXBlID0gb2JqLT5nZXRQcm90b3R5cGVEaXJlY3Qodm0pOwogICAgICAgICBp
ZiAocHJvdG90eXBlLmlzTnVsbCgpKQpAQCAtMjQ5LDMyICsyNTEsNDEgQEAgQUxXQVlTX0lOTElO
RSBQcm9wZXJ0eU9mZnNldCBKU09iamVjdDo6cAogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLS8v
IEVDTUEgOC42LjIuMgorLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vcmRpbmFyeXNl
dAogQUxXQVlTX0lOTElORSBib29sIEpTT2JqZWN0OjpwdXRJbmxpbmVGb3JKU09iamVjdChKU0Nl
bGwqIGNlbGwsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFByb3BlcnR5TmFtZSBwcm9w
ZXJ0eU5hbWUsIEpTVmFsdWUgdmFsdWUsIFB1dFByb3BlcnR5U2xvdCYgc2xvdCkKIHsKICAgICBW
TSYgdm0gPSBnZXRWTShnbG9iYWxPYmplY3QpOwotICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RI
Uk9XX1NDT1BFKHZtKTsKIAogICAgIEpTT2JqZWN0KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTT2Jq
ZWN0Kj4oY2VsbCk7CiAgICAgQVNTRVJUKHZhbHVlKTsKICAgICBBU1NFUlQoIUhlYXA6OmhlYXAo
dmFsdWUpIHx8IEhlYXA6OmhlYXAodmFsdWUpID09IEhlYXA6OmhlYXAodGhpc09iamVjdCkpOwog
Ci0gICAgaWYgKFVOTElLRUxZKGlzVGhpc1ZhbHVlQWx0ZXJlZChzbG90LCB0aGlzT2JqZWN0KSkp
Ci0gICAgICAgIFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwgb3JkaW5hcnlTZXRTbG93KGdsb2Jh
bE9iamVjdCwgdGhpc09iamVjdCwgcHJvcGVydHlOYW1lLCB2YWx1ZSwgc2xvdC50aGlzVmFsdWUo
KSwgc2xvdC5pc1N0cmljdE1vZGUoKSkpOwotCiAgICAgLy8gVHJ5IGluZGV4ZWQgcHV0IGZpcnN0
LiBUaGlzIGlzIHJlcXVpcmVkIGZvciBjb3JyZWN0bmVzcywgc2luY2UgbG9hZHMgb24gcHJvcGVy
dHkgbmFtZXMgdGhhdCBhcHBlYXIgbGlrZQogICAgIC8vIHZhbGlkIGluZGljZXMgd2lsbCBuZXZl
ciBsb29rIGluIHRoZSBuYW1lZCBwcm9wZXJ0eSBzdG9yYWdlLgotICAgIGlmIChPcHRpb25hbDx1
aW50MzJfdD4gaW5kZXggPSBwYXJzZUluZGV4KHByb3BlcnR5TmFtZSkpCi0gICAgICAgIFJFTEVB
U0VfQU5EX1JFVFVSTihzY29wZSwgcHV0QnlJbmRleCh0aGlzT2JqZWN0LCBnbG9iYWxPYmplY3Qs
IGluZGV4LnZhbHVlKCksIHZhbHVlLCBzbG90LmlzU3RyaWN0TW9kZSgpKSk7Ci0KLSAgICBpZiAo
dGhpc09iamVjdC0+Y2FuUGVyZm9ybUZhc3RQdXRJbmxpbmUodm0sIHByb3BlcnR5TmFtZSkpIHsK
LSAgICAgICAgQVNTRVJUKCF0aGlzT2JqZWN0LT5wcm90b3R5cGVDaGFpbk1heUludGVyY2VwdFN0
b3JlVG8odm0sIHByb3BlcnR5TmFtZSkpOwotICAgICAgICBpZiAoIXRoaXNPYmplY3QtPnB1dERp
cmVjdEludGVybmFsPFB1dE1vZGVQdXQ+KHZtLCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCAwLCBzbG90
KSkKLSAgICAgICAgICAgIHJldHVybiB0eXBlRXJyb3IoZ2xvYmFsT2JqZWN0LCBzY29wZSwgc2xv
dC5pc1N0cmljdE1vZGUoKSwgUmVhZG9ubHlQcm9wZXJ0eVdyaXRlRXJyb3IpOwotICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICBpZiAoT3B0aW9uYWw8dWludDMyX3Q+IGluZGV4ID0gcGFyc2VJbmRl
eChwcm9wZXJ0eU5hbWUpKSB7CisgICAgICAgIGlmIChVTkxJS0VMWShpc1RoaXNWYWx1ZUFsdGVy
ZWQoc2xvdCwgdGhpc09iamVjdCkpKQorICAgICAgICAgICAgcmV0dXJuIG9yZGluYXJ5U2V0U2xv
dyhnbG9iYWxPYmplY3QsIHRoaXNPYmplY3QsIHByb3BlcnR5TmFtZSwgdmFsdWUsIHNsb3QudGhp
c1ZhbHVlKCksIHNsb3QuaXNTdHJpY3RNb2RlKCkpOworICAgICAgICByZXR1cm4gdGhpc09iamVj
dC0+bWV0aG9kVGFibGUodm0pLT5wdXRCeUluZGV4KHRoaXNPYmplY3QsIGdsb2JhbE9iamVjdCwg
aW5kZXgudmFsdWUoKSwgdmFsdWUsIHNsb3QuaXNTdHJpY3RNb2RlKCkpOwogICAgIH0KIAotICAg
IFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwgdGhpc09iamVjdC0+cHV0SW5saW5lU2xvdyhnbG9i
YWxPYmplY3QsIHByb3BlcnR5TmFtZSwgdmFsdWUsIHNsb3QpKTsKKyAgICBpZiAoIXRoaXNPYmpl
Y3QtPmNhblBlcmZvcm1GYXN0UHV0SW5saW5lKHZtLCBwcm9wZXJ0eU5hbWUpKQorICAgICAgICBy
ZXR1cm4gdGhpc09iamVjdC0+cHV0SW5saW5lU2xvdyhnbG9iYWxPYmplY3QsIHByb3BlcnR5TmFt
ZSwgdmFsdWUsIHNsb3QpOworICAgIGlmIChVTkxJS0VMWShpc1RoaXNWYWx1ZUFsdGVyZWQoc2xv
dCwgdGhpc09iamVjdCkpKQorICAgICAgICByZXR1cm4gZGVmaW5lUHJvcGVydHlPblJlY2VpdmVy
KGdsb2JhbE9iamVjdCwgcHJvcGVydHlOYW1lLCB2YWx1ZSwgc2xvdCk7CisgICAgaWYgKFVOTElL
RUxZKHRoaXNPYmplY3QtPmhhc05vblJlaWZpZWRTdGF0aWNQcm9wZXJ0aWVzKHZtKSkpCisgICAg
ICAgIHJldHVybiB0aGlzT2JqZWN0LT5wdXRJbmxpbmVGYXN0UmVwbGFjaW5nU3RhdGljUHJvcGVy
dHlJZk5lZWRlZChnbG9iYWxPYmplY3QsIHByb3BlcnR5TmFtZSwgdmFsdWUsIHNsb3QpOworICAg
IHJldHVybiB0aGlzT2JqZWN0LT5wdXRJbmxpbmVGYXN0KGdsb2JhbE9iamVjdCwgcHJvcGVydHlO
YW1lLCB2YWx1ZSwgc2xvdCk7Cit9CisKK0FMV0FZU19JTkxJTkUgYm9vbCBKU09iamVjdDo6cHV0
SW5saW5lRmFzdChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBQcm9wZXJ0eU5hbWUgcHJv
cGVydHlOYW1lLCBKU1ZhbHVlIHZhbHVlLCBQdXRQcm9wZXJ0eVNsb3QmIHNsb3QpCit7CisgICAg
Vk0mIHZtID0gZ2V0Vk0oZ2xvYmFsT2JqZWN0KTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9U
SFJPV19TQ09QRSh2bSk7CisKKyAgICAvLyBGSVhNRTogRm9yIGEgZmFpbHVyZSBkdWUgdG8gbm9u
LWV4dGVuc2libGUgc3RydWN0dXJlLCB0aGUgZXJyb3IgbWVzc2FnZSBpcyBtaXNsZWFkaW5nLgor
ICAgIGlmICghcHV0RGlyZWN0SW50ZXJuYWw8UHV0TW9kZVB1dD4odm0sIHByb3BlcnR5TmFtZSwg
dmFsdWUsIDAsIHNsb3QpKQorICAgICAgICByZXR1cm4gdHlwZUVycm9yKGdsb2JhbE9iamVjdCwg
c2NvcGUsIHNsb3QuaXNTdHJpY3RNb2RlKCksIFJlYWRvbmx5UHJvcGVydHlXcml0ZUVycm9yKTsK
KyAgICByZXR1cm4gdHJ1ZTsKIH0KIAogLy8gSGFzT3duUHJvcGVydHkoTywgUCkgZnJvbSBzZWN0
aW9uIDcuMy4xMSBpbiB0aGUgc3BlYy4KQEAgLTMxNyw3ICszMjgsNyBAQCBBTFdBWVNfSU5MSU5F
IGJvb2wgSlNPYmplY3Q6OnB1dERpcmVjdEluCiAgICAgICAgIHVuc2lnbmVkIGN1cnJlbnRBdHRy
aWJ1dGVzOwogICAgICAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQgPSBzdHJ1Y3R1cmUtPmdldCh2
bSwgcHJvcGVydHlOYW1lLCBjdXJyZW50QXR0cmlidXRlcyk7CiAgICAgICAgIGlmIChvZmZzZXQg
IT0gaW52YWxpZE9mZnNldCkgewotICAgICAgICAgICAgaWYgKChtb2RlID09IFB1dE1vZGVQdXQp
ICYmIGN1cnJlbnRBdHRyaWJ1dGVzICYgUHJvcGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5KQorICAg
ICAgICAgICAgaWYgKChtb2RlID09IFB1dE1vZGVQdXQpICYmIGN1cnJlbnRBdHRyaWJ1dGVzICYg
UHJvcGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5T3JBY2Nlc3Nvck9yQ3VzdG9tQWNjZXNzb3IpCiAg
ICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgICAgICAgICBwdXREaXJlY3Qodm0s
IG9mZnNldCwgdmFsdWUpOwpAQCAtMzc2LDcgKzM4Nyw3IEBAIEFMV0FZU19JTkxJTkUgYm9vbCBK
U09iamVjdDo6cHV0RGlyZWN0SW4KICAgICB1bnNpZ25lZCBjdXJyZW50QXR0cmlidXRlczsKICAg
ICBvZmZzZXQgPSBzdHJ1Y3R1cmUtPmdldCh2bSwgcHJvcGVydHlOYW1lLCBjdXJyZW50QXR0cmli
dXRlcyk7CiAgICAgaWYgKG9mZnNldCAhPSBpbnZhbGlkT2Zmc2V0KSB7Ci0gICAgICAgIGlmICgo
bW9kZSA9PSBQdXRNb2RlUHV0KSAmJiBjdXJyZW50QXR0cmlidXRlcyAmIFByb3BlcnR5QXR0cmli
dXRlOjpSZWFkT25seSkKKyAgICAgICAgaWYgKChtb2RlID09IFB1dE1vZGVQdXQpICYmIGN1cnJl
bnRBdHRyaWJ1dGVzICYgUHJvcGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5T3JBY2Nlc3Nvck9yQ3Vz
dG9tQWNjZXNzb3IpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICAgICAgc3RydWN0
dXJlLT5kaWRSZXBsYWNlUHJvcGVydHkob2Zmc2V0KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTUHJveHkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU1Byb3h5LmgJKHJldmlzaW9uIDI3Nzk0OCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTUHJveHkuaAkod29ya2luZyBjb3B5KQpAQCAtMzIsNyArMzIsNyBA
QCBuYW1lc3BhY2UgSlNDIHsKIGNsYXNzIEpTUHJveHkgOiBwdWJsaWMgSlNOb25GaW5hbE9iamVj
dCB7CiBwdWJsaWM6CiAgICAgdXNpbmcgQmFzZSA9IEpTTm9uRmluYWxPYmplY3Q7Ci0gICAgc3Rh
dGljIGNvbnN0ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZs
YWdzIHwgT3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90IHwgT3ZlcnJpZGVzR2V0T3duUHJvcGVy
dHlOYW1lcyB8IE92ZXJyaWRlc0dldFByb3RvdHlwZSB8IEludGVyY2VwdHNHZXRPd25Qcm9wZXJ0
eVNsb3RCeUluZGV4RXZlbldoZW5MZW5ndGhJc05vdFplcm87CisgICAgc3RhdGljIGNvbnN0ZXhw
ciB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwgT3ZlcnJp
ZGVzR2V0T3duUHJvcGVydHlTbG90IHwgT3ZlcnJpZGVzR2V0T3duUHJvcGVydHlOYW1lcyB8IE92
ZXJyaWRlc1B1dCB8IE92ZXJyaWRlc0dldFByb3RvdHlwZSB8IEludGVyY2VwdHNHZXRPd25Qcm9w
ZXJ0eVNsb3RCeUluZGV4RXZlbldoZW5MZW5ndGhJc05vdFplcm87CiAKICAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBDZWxsVHlwZSwgU3Vic3BhY2VBY2Nlc3M+CiAgICAgc3RhdGljIElzb1N1YnNwYWNl
KiBzdWJzcGFjZUZvcihWTSYgdm0pCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU1R5cGVJbmZvLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNUeXBlSW5mby5oCShyZXZpc2lvbiAyNzc5NDgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU1R5cGVJbmZvLmgJKHdvcmtpbmcgY29weSkKQEAgLTU3LDkgKzU3LDkgQEAg
c3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBJc0ltbXV0YWJsZVBybwogc3RhdGljIGNvbnN0ZXhw
ciB1bnNpZ25lZCBHZXRPd25Qcm9wZXJ0eVNsb3RJc0ltcHVyZUZvclByb3BlcnR5QWJzZW5jZSA9
IDEgPDwgMTU7CiBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIEludGVyY2VwdHNHZXRPd25Qcm9w
ZXJ0eVNsb3RCeUluZGV4RXZlbldoZW5MZW5ndGhJc05vdFplcm8gPSAxIDw8IDE2Owogc3RhdGlj
IGNvbnN0ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1cmVJc0ltbW9ydGFsID0gMSA8PCAxNzsKLXN0YXRp
YyBjb25zdGV4cHIgdW5zaWduZWQgSGFzUHV0UHJvcGVydHlTZWN1cml0eUNoZWNrID0gMSA8PCAx
ODsKK3N0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgT3ZlcnJpZGVzUHV0ID0gMSA8PCAxODsKIHN0
YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgT3ZlcnJpZGVzR2V0UHJvdG90eXBlID0gMSA8PCAxOTsK
LXN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgR2V0T3duUHJvcGVydHlTbG90TWF5QmVXcm9uZ0Fi
b3V0RG9udEVudW0gPSAxIDw8IDIwOworc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBJc09wYXF1
ZUFQSU9iamVjdCA9IDEgPDwgMjA7CiAKIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgbnVtYmVy
T2ZJbmxpbmVCaXRzID0gODsKIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgT3ZlcnJpZGVzR2V0
UHJvdG90eXBlT3V0T2ZMaW5lID0gT3ZlcnJpZGVzR2V0UHJvdG90eXBlID4+IG51bWJlck9mSW5s
aW5lQml0czsKQEAgLTk0LDYgKzk0LDcgQEAgcHVibGljOgogICAgIGJvb2wgaW1wbGVtZW50c0Rl
ZmF1bHRIYXNJbnN0YW5jZSgpIGNvbnN0IHsgcmV0dXJuIGlzU2V0T25GbGFnczE8SW1wbGVtZW50
c0RlZmF1bHRIYXNJbnN0YW5jZT4oKTsgfQogICAgIGJvb2wgb3ZlcnJpZGVzR2V0Q2FsbERhdGEo
KSBjb25zdCB7IHJldHVybiBpc1NldE9uRmxhZ3MxPE92ZXJyaWRlc0dldENhbGxEYXRhPigpOyB9
CiAgICAgYm9vbCBvdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3QoKSBjb25zdCB7IHJldHVybiBv
dmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3QoaW5saW5lVHlwZUZsYWdzKCkpOyB9CisgICAgYm9v
bCBoYXNTdGF0aWNQcm9wZXJ0eVRhYmxlKCkgY29uc3QgeyByZXR1cm4gaXNTZXRPbkZsYWdzMTxI
YXNTdGF0aWNQcm9wZXJ0eVRhYmxlPigpOyB9CiAgICAgc3RhdGljIGJvb2wgb3ZlcnJpZGVzR2V0
T3duUHJvcGVydHlTbG90KElubGluZVR5cGVGbGFncyBmbGFncykgeyByZXR1cm4gZmxhZ3MgJiBP
dmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3Q7IH0KICAgICBzdGF0aWMgYm9vbCBoYXNTdGF0aWNQ
cm9wZXJ0eVRhYmxlKElubGluZVR5cGVGbGFncyBmbGFncykgeyByZXR1cm4gZmxhZ3MgJiBIYXNT
dGF0aWNQcm9wZXJ0eVRhYmxlOyB9CiAgICAgc3RhdGljIGJvb2wgcGVyQ2VsbEJpdChJbmxpbmVU
eXBlRmxhZ3MgZmxhZ3MpIHsgcmV0dXJuIGZsYWdzICYgVHlwZUluZm9QZXJDZWxsQml0OyB9CkBA
IC0xMDIsMTIgKzEwMywxMiBAQCBwdWJsaWM6CiAgICAgYm9vbCBvdmVycmlkZXNHZXRPd25Qcm9w
ZXJ0eU5hbWVzKCkgY29uc3QgeyByZXR1cm4gaXNTZXRPbkZsYWdzMjxPdmVycmlkZXNHZXRPd25Q
cm9wZXJ0eU5hbWVzPigpOyB9CiAgICAgYm9vbCBvdmVycmlkZXNHZXRPd25TcGVjaWFsUHJvcGVy
dHlOYW1lcygpIGNvbnN0IHsgcmV0dXJuIGlzU2V0T25GbGFnczI8T3ZlcnJpZGVzR2V0T3duU3Bl
Y2lhbFByb3BlcnR5TmFtZXM+KCk7IH0KICAgICBib29sIG92ZXJyaWRlc0FueUZvcm1PZkdldE93
blByb3BlcnR5TmFtZXMoKSBjb25zdCB7IHJldHVybiBvdmVycmlkZXNHZXRPd25Qcm9wZXJ0eU5h
bWVzKCkgfHwgb3ZlcnJpZGVzR2V0T3duU3BlY2lhbFByb3BlcnR5TmFtZXMoKTsgfQorICAgIGJv
b2wgb3ZlcnJpZGVzUHV0KCkgY29uc3QgeyByZXR1cm4gaXNTZXRPbkZsYWdzMjxPdmVycmlkZXNQ
dXQ+KCk7IH0KICAgICBib29sIG92ZXJyaWRlc0dldFByb3RvdHlwZSgpIGNvbnN0IHsgcmV0dXJu
IGlzU2V0T25GbGFnczI8T3ZlcnJpZGVzR2V0UHJvdG90eXBlPigpOyB9CiAgICAgYm9vbCBwcm9o
aWJpdHNQcm9wZXJ0eUNhY2hpbmcoKSBjb25zdCB7IHJldHVybiBpc1NldE9uRmxhZ3MyPFByb2hp
Yml0c1Byb3BlcnR5Q2FjaGluZz4oKTsgfQogICAgIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90SXNJ
bXB1cmUoKSBjb25zdCB7IHJldHVybiBpc1NldE9uRmxhZ3MyPEdldE93blByb3BlcnR5U2xvdElz
SW1wdXJlPigpOyB9CiAgICAgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3RJc0ltcHVyZUZvclByb3Bl
cnR5QWJzZW5jZSgpIGNvbnN0IHsgcmV0dXJuIGlzU2V0T25GbGFnczI8R2V0T3duUHJvcGVydHlT
bG90SXNJbXB1cmVGb3JQcm9wZXJ0eUFic2VuY2U+KCk7IH0KLSAgICBib29sIGdldE93blByb3Bl
cnR5U2xvdE1heUJlV3JvbmdBYm91dERvbnRFbnVtKCkgY29uc3QgeyByZXR1cm4gaXNTZXRPbkZs
YWdzMjxHZXRPd25Qcm9wZXJ0eVNsb3RNYXlCZVdyb25nQWJvdXREb250RW51bT4oKTsgfQotICAg
IGJvb2wgaGFzUHV0UHJvcGVydHlTZWN1cml0eUNoZWNrKCkgY29uc3QgeyByZXR1cm4gaXNTZXRP
bkZsYWdzMjxIYXNQdXRQcm9wZXJ0eVNlY3VyaXR5Q2hlY2s+KCk7IH0KKyAgICBib29sIGlzT3Bh
cXVlQVBJT2JqZWN0KCkgY29uc3QgeyByZXR1cm4gaXNTZXRPbkZsYWdzMjxJc09wYXF1ZUFQSU9i
amVjdD4oKTsgfQogICAgIGJvb2wgbmV3SW1wdXJlUHJvcGVydHlGaXJlc1dhdGNocG9pbnRzKCkg
Y29uc3QgeyByZXR1cm4gaXNTZXRPbkZsYWdzMjxOZXdJbXB1cmVQcm9wZXJ0eUZpcmVzV2F0Y2hw
b2ludHM+KCk7IH0KICAgICBib29sIGlzSW1tdXRhYmxlUHJvdG90eXBlRXhvdGljT2JqZWN0KCkg
Y29uc3QgeyByZXR1cm4gaXNTZXRPbkZsYWdzMjxJc0ltbXV0YWJsZVByb3RvdHlwZUV4b3RpY09i
amVjdD4oKTsgfQogICAgIGJvb2wgaW50ZXJjZXB0c0dldE93blByb3BlcnR5U2xvdEJ5SW5kZXhF
dmVuV2hlbkxlbmd0aElzTm90WmVybygpIGNvbnN0IHsgcmV0dXJuIGlzU2V0T25GbGFnczI8SW50
ZXJjZXB0c0dldE93blByb3BlcnR5U2xvdEJ5SW5kZXhFdmVuV2hlbkxlbmd0aElzTm90WmVybz4o
KTsgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTG9va3VwLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTG9va3VwLmgJKHJldmlzaW9u
IDI3Nzk0OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0xvb2t1cC5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yNjIsNzAgKzI2Miw2IEBAIGlubGluZSBib29sIHJlcGxhY2VTdGF0aWNQ
cm9wZXJ0eVNsb3QoVk0KICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotLy8gJ2Jhc2UnIG1lYW5zIHRo
ZSBvYmplY3QgaG9sZGluZyB0aGUgcHJvcGVydHkgKHBvc3NpYmx5IGluIHRoZSBwcm90b3R5cGUg
Y2hhaW4gb2YgdGhlIG9iamVjdCBwdXQgd2FzIGNhbGxlZCBvbikuCi0vLyAndGhpc1ZhbHVlJyBp
cyB0aGUgb2JqZWN0IHRoYXQgcHV0IGlzIGJlaW5nIGFwcGxpZWQgdG8gKGluIHRoZSBjYXNlIG9m
IGEgcHJveHksIHRoZSBwcm94eSB0YXJnZXQpLgotLy8gJ3Nsb3QudGhpc1ZhbHVlKCknIGlzIHRo
ZSBvYmplY3QgdGhlIHB1dCB3YXMgb3JpZ2luYWxseSBwZXJmb3JtZWQgb24gKGluIHRoZSBjYXNl
IG9mIGEgcHJveHksIHRoZSBwcm94eSBpdHNlbGYpLgotaW5saW5lIGJvb2wgcHV0RW50cnkoSlNH
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgY29uc3QgQ2xhc3NJbmZvKiwgY29uc3QgSGFzaFRh
YmxlVmFsdWUqIGVudHJ5LCBKU09iamVjdCogYmFzZSwgSlNPYmplY3QqIHRoaXNWYWx1ZSwgUHJv
cGVydHlOYW1lIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSB2YWx1ZSwgUHV0UHJvcGVydHlTbG90JiBz
bG90KQotewotICAgIFZNJiB2bSA9IGdldFZNKGdsb2JhbE9iamVjdCk7Ci0gICAgYXV0byBzY29w
ZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotCi0gICAgaWYgKGVudHJ5LT5hdHRyaWJ1dGVz
KCkgJiBQcm9wZXJ0eUF0dHJpYnV0ZTo6QnVpbHRpbk9yRnVuY3Rpb25PckxhenlQcm9wZXJ0eSkg
ewotICAgICAgICBpZiAoIShlbnRyeS0+YXR0cmlidXRlcygpICYgUHJvcGVydHlBdHRyaWJ1dGU6
OlJlYWRPbmx5KSkgewotICAgICAgICAgICAgLy8gSWYgdGhpcyBpcyBhIGZ1bmN0aW9uIG9yIGxh
enkgcHJvcGVydHkgcHV0IHRoZW4gd2UganVzdCBkbyB0aGUgcHV0IGJlY2F1c2UKLSAgICAgICAg
ICAgIC8vIGxvZ2ljYWxseSB0aGUgb2JqZWN0IGFscmVhZHkgaGFkIHRoZSBwcm9wZXJ0eSwgc28g
dGhpcyBpcyBqdXN0IGEgcmVwbGFjZS4KLSAgICAgICAgICAgIC8vIEZJWE1FOiB0aGlzVmFsdWUg
bWF5IGJlIGFuIG9iamVjdCB3aXRoIG5vbi1leHRlbnNpYmxlIHN0cnVjdHVyZSB3ZSBtdXN0IHRo
cm93IGZvci4KLSAgICAgICAgICAgIGlmIChKU09iamVjdCogdGhpc09iamVjdCA9IGpzRHluYW1p
Y0Nhc3Q8SlNPYmplY3QqPih2bSwgdGhpc1ZhbHVlKSkKLSAgICAgICAgICAgICAgICB0aGlzT2Jq
ZWN0LT5wdXREaXJlY3Qodm0sIHByb3BlcnR5TmFtZSwgdmFsdWUpOwotICAgICAgICAgICAgcmV0
dXJuIHRydWU7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHR5cGVFcnJvcihnbG9iYWxPYmpl
Y3QsIHNjb3BlLCBzbG90LmlzU3RyaWN0TW9kZSgpLCBSZWFkb25seVByb3BlcnR5V3JpdGVFcnJv
cik7Ci0gICAgfQotCi0gICAgaWYgKGVudHJ5LT5hdHRyaWJ1dGVzKCkgJiBQcm9wZXJ0eUF0dHJp
YnV0ZTo6QWNjZXNzb3IpCi0gICAgICAgIHJldHVybiB0eXBlRXJyb3IoZ2xvYmFsT2JqZWN0LCBz
Y29wZSwgc2xvdC5pc1N0cmljdE1vZGUoKSwgUmVhZG9ubHlQcm9wZXJ0eVdyaXRlRXJyb3IpOwot
Ci0gICAgaWYgKCEoZW50cnktPmF0dHJpYnV0ZXMoKSAmIFByb3BlcnR5QXR0cmlidXRlOjpSZWFk
T25seSkpIHsKLSAgICAgICAgQVNTRVJUX1dJVEhfTUVTU0FHRSghKGVudHJ5LT5hdHRyaWJ1dGVz
KCkgJiBQcm9wZXJ0eUF0dHJpYnV0ZTo6RE9NSklUQXR0cmlidXRlKSwgIkRPTUpJVEF0dHJpYnV0
ZSBzdXBwb3J0cyByZWFkb25seSBhdHRyaWJ1dGVzIGN1cnJlbnRseS4iKTsKLSAgICAgICAgYm9v
bCBpc0FjY2Vzc29yID0gZW50cnktPmF0dHJpYnV0ZXMoKSAmIFByb3BlcnR5QXR0cmlidXRlOjpD
dXN0b21BY2Nlc3NvcjsKLSAgICAgICAgLy8gRklYTUU6IFdlIHNob3VsZCBvbmx5IGJlIGNhY2hp
bmcgdGhlc2UgaWYgd2UncmUgbm90IGFuIHVuY2FjaGVhYmxlIGRpY3Rpb25hcnk6Ci0gICAgICAg
IC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTUzNDcKLSAgICAg
ICAgLy8gV2UgbmVlZCB0byBtYWtlIHN1cmUgdGhhdCB3ZSBkZWNpZGUgdG8gY2FjaGUgdGhpcyBw
cm9wZXJ0eSBiZWZvcmUgd2UgcG90ZW50aWFsbHkgZXhlY3V0ZSBhcmliaXRyYXJ5IEpTLgotICAg
ICAgICBpZiAoaXNBY2Nlc3NvcikKLSAgICAgICAgICAgIHNsb3Quc2V0Q3VzdG9tQWNjZXNzb3Io
YmFzZSwgZW50cnktPnByb3BlcnR5UHV0dGVyKCkpOwotICAgICAgICBlbHNlCi0gICAgICAgICAg
ICBzbG90LnNldEN1c3RvbVZhbHVlKGJhc2UsIGVudHJ5LT5wcm9wZXJ0eVB1dHRlcigpKTsKLQot
ICAgICAgICBhdXRvIHJlc3VsdCA9IGNhbGxDdXN0b21TZXR0ZXIoZ2xvYmFsT2JqZWN0LCBlbnRy
eS0+cHJvcGVydHlQdXR0ZXIoKSwgaXNBY2Nlc3NvciwgYmFzZSwgc2xvdC50aGlzVmFsdWUoKSwg
dmFsdWUsIHByb3BlcnR5TmFtZSk7Ci0gICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUs
IGZhbHNlKTsKLSAgICAgICAgaWYgKHJlc3VsdCAhPSBUcmlTdGF0ZTo6SW5kZXRlcm1pbmF0ZSkK
LSAgICAgICAgICAgIHJldHVybiByZXN1bHQgPT0gVHJpU3RhdGU6OlRydWU7Ci0KLSAgICAgICAg
Ly8gRklYTUU6IHRoaXNWYWx1ZSBtYXkgYmUgYW4gb2JqZWN0IHdpdGggbm9uLWV4dGVuc2libGUg
c3RydWN0dXJlIHdlIG11c3QgdGhyb3cgZm9yLgotICAgICAgICBpZiAoSlNPYmplY3QqIHRoaXNP
YmplY3QgPSBqc0R5bmFtaWNDYXN0PEpTT2JqZWN0Kj4odm0sIHRoaXNWYWx1ZSkpCi0gICAgICAg
ICAgICB0aGlzT2JqZWN0LT5wdXREaXJlY3Qodm0sIHByb3BlcnR5TmFtZSwgdmFsdWUpOwotICAg
ICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICByZXR1cm4gdHlwZUVycm9yKGdsb2JhbE9i
amVjdCwgc2NvcGUsIHNsb3QuaXNTdHJpY3RNb2RlKCksIFJlYWRvbmx5UHJvcGVydHlXcml0ZUVy
cm9yKTsKLX0KLQotLyoqCi0gKiBUaGlzIG9uZSBpcyBmb3IgInB1dCIuCi0gKiBJdCBsb29rcyB1
cCBhIGhhc2ggZW50cnkgZm9yIHRoZSBwcm9wZXJ0eSB0byBiZSBzZXQuICBJZiBhbiBlbnRyeQot
ICogaXMgZm91bmQgaXQgc2V0cyB0aGUgdmFsdWUgYW5kIHJldHVybnMgdHJ1ZSwgZWxzZSBpdCBy
ZXR1cm5zIGZhbHNlLgotICovCi1pbmxpbmUgYm9vbCBsb29rdXBQdXQoSlNHbG9iYWxPYmplY3Qq
IGdsb2JhbE9iamVjdCwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgSlNPYmplY3QqIGJhc2Us
IEpTVmFsdWUgdmFsdWUsIGNvbnN0IEhhc2hUYWJsZSYgdGFibGUsIFB1dFByb3BlcnR5U2xvdCYg
c2xvdCwgYm9vbCYgcHV0UmVzdWx0KQotewotICAgIGNvbnN0IEhhc2hUYWJsZVZhbHVlKiBlbnRy
eSA9IHRhYmxlLmVudHJ5KHByb3BlcnR5TmFtZSk7Ci0KLSAgICBpZiAoIWVudHJ5KQotICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0KLSAgICBwdXRSZXN1bHQgPSBwdXRFbnRyeShnbG9iYWxPYmplY3Qs
IHRhYmxlLmNsYXNzRm9yVGhpcywgZW50cnksIGJhc2UsIGJhc2UsIHByb3BlcnR5TmFtZSwgdmFs
dWUsIHNsb3QpOwotICAgIHJldHVybiB0cnVlOwotfQotCiBpbmxpbmUgdm9pZCByZWlmeVN0YXRp
Y1Byb3BlcnR5KFZNJiB2bSwgY29uc3QgQ2xhc3NJbmZvKiBjbGFzc0luZm8sIGNvbnN0IFByb3Bl
cnR5TmFtZSYgcHJvcGVydHlOYW1lLCBjb25zdCBIYXNoVGFibGVWYWx1ZSYgdmFsdWUsIEpTT2Jq
ZWN0JiB0aGlzT2JqKQogewogICAgIGlmICh2YWx1ZS5hdHRyaWJ1dGVzKCkgJiBQcm9wZXJ0eUF0
dHJpYnV0ZTo6QnVpbHRpbikgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
UHJvcGVydHlTbG90LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvUHJvcGVydHlTbG90LmgJKHJldmlzaW9uIDI3Nzk0OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL1Byb3BlcnR5U2xvdC5oCSh3b3JraW5nIGNvcHkpCkBAIC00Nyw2ICs0Nyw3
IEBAIGVudW0gY2xhc3MgUHJvcGVydHlBdHRyaWJ1dGUgOiB1bnNpZ25lZCAKICAgICBDdXN0b21W
YWx1ZSAgICAgICA9IDEgPDwgNiwKICAgICBDdXN0b21BY2Nlc3Nvck9yVmFsdWUgPSBDdXN0b21B
Y2Nlc3NvciB8IEN1c3RvbVZhbHVlLAogICAgIEFjY2Vzc29yT3JDdXN0b21BY2Nlc3Nvck9yVmFs
dWUgPSBBY2Nlc3NvciB8IEN1c3RvbUFjY2Vzc29yIHwgQ3VzdG9tVmFsdWUsCisgICAgUmVhZE9u
bHlPckFjY2Vzc29yT3JDdXN0b21BY2Nlc3NvciA9IFJlYWRPbmx5IHwgQWNjZXNzb3IgfCBDdXN0
b21BY2Nlc3NvciwKIAogICAgIC8vIFRoaW5ncyB0aGF0IGFyZSB1c2VkIGJ5IHN0YXRpYyBoYXNo
dGFibGVzIGFyZSBub3QgaW4gdGhlIGF0dHJpYnV0ZXMgYnl0ZSBpbiBQcm9wZXJ0eU1hcEVudHJ5
LgogICAgIEZ1bmN0aW9uICAgICAgICAgID0gMSA8PCA4LCAgLy8gcHJvcGVydHkgaXMgYSBmdW5j
dGlvbiAtIG9ubHkgdXNlZCBieSBzdGF0aWMgaGFzaHRhYmxlcwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvUHJveHlPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb3h5T2JqZWN0LmNwcAkocmV2aXNpb24gMjc3OTQ4KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJveHlPYmplY3QuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC00NjQsNiArNDY0LDcgQEAgYm9vbCBQcm94eU9iamVjdDo6cHV0KEpTQ2VsbCog
Y2VsbCwgSlNHbAogewogICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKICAgICBzbG90
LmRpc2FibGVDYWNoaW5nKCk7CisgICAgc2xvdC5zZXRJc1RhaW50ZWRCeU9wYXF1ZU9iamVjdCgp
OwogCiAgICAgUHJveHlPYmplY3QqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8UHJveHlPYmplY3QqPihj
ZWxsKTsKICAgICBhdXRvIHBlcmZvcm1EZWZhdWx0UHV0ID0gWyZdICgpIHsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb3h5T2JqZWN0LmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJveHlPYmplY3QuaAkocmV2aXNpb24gMjc3OTQ4
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJveHlPYmplY3QuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMzQsNyArMzQsNyBAQCBjbGFzcyBQcm94eU9iamVjdCBmaW5hbCA6IHB1Ymxp
YyBKU05vbkZpCiBwdWJsaWM6CiAgICAgdHlwZWRlZiBKU05vbkZpbmFsT2JqZWN0IEJhc2U7CiAK
LSAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3Ry
dWN0dXJlRmxhZ3MgfCBPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3QgfCBPdmVycmlkZXNHZXRP
d25Qcm9wZXJ0eU5hbWVzIHwgT3ZlcnJpZGVzR2V0UHJvdG90eXBlIHwgT3ZlcnJpZGVzR2V0Q2Fs
bERhdGEgfCBJbnRlcmNlcHRzR2V0T3duUHJvcGVydHlTbG90QnlJbmRleEV2ZW5XaGVuTGVuZ3Ro
SXNOb3RaZXJvIHwgUHJvaGliaXRzUHJvcGVydHlDYWNoaW5nOworICAgIHN0YXRpYyBjb25zdGV4
cHIgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8IE92ZXJy
aWRlc0dldE93blByb3BlcnR5U2xvdCB8IE92ZXJyaWRlc0dldE93blByb3BlcnR5TmFtZXMgfCBP
dmVycmlkZXNHZXRQcm90b3R5cGUgfCBPdmVycmlkZXNHZXRDYWxsRGF0YSB8IE92ZXJyaWRlc1B1
dCB8IEludGVyY2VwdHNHZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4RXZlbldoZW5MZW5ndGhJc05v
dFplcm8gfCBQcm9oaWJpdHNQcm9wZXJ0eUNhY2hpbmc7CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBDZWxsVHlwZSwgU3Vic3BhY2VBY2Nlc3MgbW9kZT4KICAgICBzdGF0aWMgSXNvU3Vic3BhY2Uq
IHN1YnNwYWNlRm9yKFZNJiB2bSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1B1dFByb3BlcnR5U2xvdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1B1dFByb3BlcnR5U2xvdC5oCShyZXZpc2lvbiAyNzc5NDgpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9QdXRQcm9wZXJ0eVNsb3QuaAkod29ya2luZyBjb3B5KQpAQCAt
MzcsNyArMzcsNyBAQCBjbGFzcyBKU0Z1bmN0aW9uOwogY2xhc3MgUHV0UHJvcGVydHlTbG90IHsK
IHB1YmxpYzoKICAgICBlbnVtIFR5cGUgOiB1aW50OF90IHsgVW5jYWNoYWJsZSwgRXhpc3RpbmdQ
cm9wZXJ0eSwgTmV3UHJvcGVydHksIFNldHRlclByb3BlcnR5LCBDdXN0b21WYWx1ZSwgQ3VzdG9t
QWNjZXNzb3IgfTsKLSAgICBlbnVtIENvbnRleHQgeyBVbmtub3duQ29udGV4dCwgUHV0QnlJZCwg
UHV0QnlJZEV2YWwgfTsKKyAgICBlbnVtIENvbnRleHQgOiB1aW50OF90IHsgVW5rbm93bkNvbnRl
eHQsIFB1dEJ5SWQsIFB1dEJ5SWRFdmFsLCBSZWZsZWN0U2V0IH07CiAgICAgdXNpbmcgUHV0VmFs
dWVGdW5jID0gSlNDOjpQdXRWYWx1ZUZ1bmM7CiAgICAgdXNpbmcgUHV0VmFsdWVGdW5jV2l0aFB0
ciA9IEpTQzo6UHV0VmFsdWVGdW5jV2l0aFB0cjsKIApAQCAtNDcsNiArNDcsNyBAQCBwdWJsaWM6
CiAgICAgICAgICwgbV9vZmZzZXQoaW52YWxpZE9mZnNldCkKICAgICAgICAgLCBtX2lzU3RyaWN0
TW9kZShpc1N0cmljdE1vZGUpCiAgICAgICAgICwgbV9pc0luaXRpYWxpemF0aW9uKGlzSW5pdGlh
bGl6YXRpb24pCisgICAgICAgICwgbV9pc1RhaW50ZWRCeU9wYXF1ZU9iamVjdChmYWxzZSkKICAg
ICAgICAgLCBtX3R5cGUoVW5jYWNoYWJsZSkKICAgICAgICAgLCBtX2NvbnRleHQoY29udGV4dCkK
ICAgICAgICAgLCBtX2NhY2hlYWJpbGl0eShDYWNoaW5nQWxsb3dlZCkKQEAgLTEwNCw5ICsxMDUs
OCBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBtX3B1dEZ1bmN0aW9uOwogICAgIH0KIAotICAg
IENvbnRleHQgY29udGV4dCgpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PENvbnRleHQ+KG1f
Y29udGV4dCk7IH0KLQogICAgIFR5cGUgdHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fdHlwZTsgfQor
ICAgIENvbnRleHQgY29udGV4dCgpIGNvbnN0IHsgcmV0dXJuIG1fY29udGV4dDsgfQogICAgIEpT
T2JqZWN0KiBiYXNlKCkgY29uc3QgeyByZXR1cm4gbV9iYXNlOyB9CiAgICAgSlNWYWx1ZSB0aGlz
VmFsdWUoKSBjb25zdCB7IHJldHVybiBtX3RoaXNWYWx1ZTsgfQogCkBAIC0xMTYsNiArMTE2LDgg
QEAgcHVibGljOgogICAgIGJvb2wgaXNDYWNoZWFibGVDdXN0b20oKSBjb25zdCB7IHJldHVybiBp
c0NhY2hlYWJsZSgpICYmIChtX3R5cGUgPT0gQ3VzdG9tVmFsdWUgfHwgbV90eXBlID09IEN1c3Rv
bUFjY2Vzc29yKSAmJiAhIW1fcHV0RnVuY3Rpb247IH0KICAgICBib29sIGlzQ3VzdG9tQWNjZXNz
b3IoKSBjb25zdCB7IHJldHVybiBpc0NhY2hlYWJsZSgpICYmIG1fdHlwZSA9PSBDdXN0b21BY2Nl
c3NvcjsgfQogICAgIGJvb2wgaXNJbml0aWFsaXphdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1faXNJ
bml0aWFsaXphdGlvbjsgfQorICAgIGJvb2wgaXNUYWludGVkQnlPcGFxdWVPYmplY3QoKSBjb25z
dCB7IHJldHVybiBtX2lzVGFpbnRlZEJ5T3BhcXVlT2JqZWN0OyB9CisgICAgdm9pZCBzZXRJc1Rh
aW50ZWRCeU9wYXF1ZU9iamVjdCgpIHsgbV9pc1RhaW50ZWRCeU9wYXF1ZU9iamVjdCA9IHRydWU7
IH0KIAogICAgIFByb3BlcnR5T2Zmc2V0IGNhY2hlZE9mZnNldCgpIGNvbnN0CiAgICAgewpAQCAt
MTM1LDggKzEzNyw5IEBAIHByaXZhdGU6CiAgICAgUHJvcGVydHlPZmZzZXQgbV9vZmZzZXQ7CiAg
ICAgYm9vbCBtX2lzU3RyaWN0TW9kZSA6IDE7CiAgICAgYm9vbCBtX2lzSW5pdGlhbGl6YXRpb24g
OiAxOworICAgIGJvb2wgbV9pc1RhaW50ZWRCeU9wYXF1ZU9iamVjdCA6IDE7CiAgICAgVHlwZSBt
X3R5cGU7Ci0gICAgdWludDhfdCBtX2NvbnRleHQ7CisgICAgQ29udGV4dCBtX2NvbnRleHQ7CiAg
ICAgQ2FjaGVhYmlsaXR5VHlwZSBtX2NhY2hlYWJpbGl0eTsKICAgICBGdW5jdGlvblB0cjxDdXN0
b21BY2Nlc3NvclB0clRhZz4gbV9wdXRGdW5jdGlvbjsKIH07CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9SZWZsZWN0T2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWZsZWN0T2JqZWN0LmNwcAkocmV2aXNpb24gMjc3OTQ4
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVmbGVjdE9iamVjdC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTI2MCw3ICsyNjAsNyBAQCBKU0NfREVGSU5FX0hPU1RfRlVOQ1RJT04o
cmVmbGVjdE9iamVjdFNlCiAKICAgICAvLyBEbyBub3QgcmFpc2UgYW55IHJlYWRvbmx5IGVycm9y
cyB0aGF0IGhhcHBlbiBpbiBzdHJpY3QgbW9kZS4KICAgICBib29sIHNob3VsZFRocm93SWZDYW50
U2V0ID0gZmFsc2U7Ci0gICAgUHV0UHJvcGVydHlTbG90IHNsb3QocmVjZWl2ZXIsIHNob3VsZFRo
cm93SWZDYW50U2V0KTsKKyAgICBQdXRQcm9wZXJ0eVNsb3Qgc2xvdChyZWNlaXZlciwgc2hvdWxk
VGhyb3dJZkNhbnRTZXQsIFB1dFByb3BlcnR5U2xvdDo6UmVmbGVjdFNldCk7CiAgICAgUkVMRUFT
RV9BTkRfUkVUVVJOKHNjb3BlLCBKU1ZhbHVlOjplbmNvZGUoanNCb29sZWFuKHRhcmdldE9iamVj
dC0+bWV0aG9kVGFibGUodm0pLT5wdXQodGFyZ2V0T2JqZWN0LCBnbG9iYWxPYmplY3QsIHByb3Bl
cnR5TmFtZSwgY2FsbEZyYW1lLT5hcmd1bWVudCgyKSwgc2xvdCkpKSk7CiB9CiAKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cE9iamVjdC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwT2JqZWN0LmNwcAkocmV2aXNp
b24gMjc3OTQ4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwT2JqZWN0
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTM0LDE5ICsxMzQsMjQgQEAgSlNDX0RFRklORV9DVVNU
T01fU0VUVEVSKHJlZ0V4cE9iamVjdFNldAogYm9vbCBSZWdFeHBPYmplY3Q6OnB1dChKU0NlbGwq
IGNlbGwsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFByb3BlcnR5TmFtZSBwcm9wZXJ0
eU5hbWUsIEpTVmFsdWUgdmFsdWUsIFB1dFByb3BlcnR5U2xvdCYgc2xvdCkKIHsKICAgICBWTSYg
dm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1df
U0NPUEUodm0pOwogICAgIFJlZ0V4cE9iamVjdCogdGhpc09iamVjdCA9IGpzQ2FzdDxSZWdFeHBP
YmplY3QqPihjZWxsKTsKIAotICAgIGlmIChVTkxJS0VMWShpc1RoaXNWYWx1ZUFsdGVyZWQoc2xv
dCwgdGhpc09iamVjdCkpKQotICAgICAgICByZXR1cm4gb3JkaW5hcnlTZXRTbG93KGdsb2JhbE9i
amVjdCwgdGhpc09iamVjdCwgcHJvcGVydHlOYW1lLCB2YWx1ZSwgc2xvdC50aGlzVmFsdWUoKSwg
c2xvdC5pc1N0cmljdE1vZGUoKSk7Ci0KICAgICBpZiAocHJvcGVydHlOYW1lID09IHZtLnByb3Bl
cnR5TmFtZXMtPmxhc3RJbmRleCkgeworICAgICAgICBpZiAoIXRoaXNPYmplY3QtPmxhc3RJbmRl
eElzV3JpdGFibGUoKSkKKyAgICAgICAgICAgIHJldHVybiB0eXBlRXJyb3IoZ2xvYmFsT2JqZWN0
LCBzY29wZSwgc2xvdC5pc1N0cmljdE1vZGUoKSwgUmVhZG9ubHlQcm9wZXJ0eVdyaXRlRXJyb3Ip
OworCisgICAgICAgIGlmIChVTkxJS0VMWShzbG90LnRoaXNWYWx1ZSgpICE9IHRoaXNPYmplY3Qp
KQorICAgICAgICAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBKU09iamVjdDo6ZGVmaW5l
UHJvcGVydHlPblJlY2VpdmVyKGdsb2JhbE9iamVjdCwgcHJvcGVydHlOYW1lLCB2YWx1ZSwgc2xv
dCkpOworCiAgICAgICAgIGJvb2wgcmVzdWx0ID0gdGhpc09iamVjdC0+c2V0TGFzdEluZGV4KGds
b2JhbE9iamVjdCwgdmFsdWUsIHNsb3QuaXNTdHJpY3RNb2RlKCkpOworICAgICAgICBSRVRVUk5f
SUZfRVhDRVBUSU9OKHNjb3BlLCBmYWxzZSk7CiAgICAgICAgIHNsb3Quc2V0Q3VzdG9tVmFsdWUo
dGhpc09iamVjdCwgc2xvdC5pc1N0cmljdE1vZGUoKQogICAgICAgICAgICAgPyByZWdFeHBPYmpl
Y3RTZXRMYXN0SW5kZXhTdHJpY3QKICAgICAgICAgICAgIDogcmVnRXhwT2JqZWN0U2V0TGFzdElu
ZGV4Tm9uU3RyaWN0KTsKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9Ci0gICAgcmV0dXJu
IEJhc2U6OnB1dChjZWxsLCBnbG9iYWxPYmplY3QsIHByb3BlcnR5TmFtZSwgdmFsdWUsIHNsb3Qp
OworICAgIFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwgQmFzZTo6cHV0KGNlbGwsIGdsb2JhbE9i
amVjdCwgcHJvcGVydHlOYW1lLCB2YWx1ZSwgc2xvdCkpOwogfQogCiBKU1ZhbHVlIFJlZ0V4cE9i
amVjdDo6ZXhlYyhKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1N0cmluZyogc3RyaW5n
KQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwT2JqZWN0LmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwT2JqZWN0LmgJ
KHJldmlzaW9uIDI3Nzk0OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4
cE9iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw3ICszMCw3IEBAIG5hbWVzcGFjZSBKU0Mg
ewogY2xhc3MgUmVnRXhwT2JqZWN0IGZpbmFsIDogcHVibGljIEpTTm9uRmluYWxPYmplY3Qgewog
cHVibGljOgogICAgIHVzaW5nIEJhc2UgPSBKU05vbkZpbmFsT2JqZWN0OwotICAgIHN0YXRpYyBj
b25zdGV4cHIgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8
IE92ZXJyaWRlc0dldE93blByb3BlcnR5U2xvdCB8IE92ZXJyaWRlc0dldE93blNwZWNpYWxQcm9w
ZXJ0eU5hbWVzOworICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3Mg
PSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8IE92ZXJyaWRlc0dldE93blByb3BlcnR5U2xvdCB8IE92
ZXJyaWRlc0dldE93blNwZWNpYWxQcm9wZXJ0eU5hbWVzIHwgT3ZlcnJpZGVzUHV0OwogCiAgICAg
dGVtcGxhdGU8dHlwZW5hbWUgQ2VsbFR5cGUsIFN1YnNwYWNlQWNjZXNzIG1vZGU+CiAgICAgc3Rh
dGljIElzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9TdHJpbmdPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cmluZ09iamVjdC5jcHAJKHJldmlzaW9uIDI3Nzk0OCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cmluZ09iamVjdC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTY4LDExICs2OCwxMCBAQCBib29sIFN0cmluZ09iamVjdDo6cHV0KEpTQ2Vs
bCogY2VsbCwgSlNHCiAKICAgICBTdHJpbmdPYmplY3QqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8U3Ry
aW5nT2JqZWN0Kj4oY2VsbCk7CiAKLSAgICBpZiAoVU5MSUtFTFkoaXNUaGlzVmFsdWVBbHRlcmVk
KHNsb3QsIHRoaXNPYmplY3QpKSkgCi0gICAgICAgIFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwg
b3JkaW5hcnlTZXRTbG93KGdsb2JhbE9iamVjdCwgdGhpc09iamVjdCwgcHJvcGVydHlOYW1lLCB2
YWx1ZSwgc2xvdC50aGlzVmFsdWUoKSwgc2xvdC5pc1N0cmljdE1vZGUoKSkpOwotCiAgICAgaWYg
KHByb3BlcnR5TmFtZSA9PSB2bS5wcm9wZXJ0eU5hbWVzLT5sZW5ndGgpCiAgICAgICAgIHJldHVy
biB0eXBlRXJyb3IoZ2xvYmFsT2JqZWN0LCBzY29wZSwgc2xvdC5pc1N0cmljdE1vZGUoKSwgUmVh
ZG9ubHlQcm9wZXJ0eVdyaXRlRXJyb3IpOworICAgIGlmIChVTkxJS0VMWShzbG90LnRoaXNWYWx1
ZSgpICE9IHRoaXNPYmplY3QpKQorICAgICAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIEpT
T2JqZWN0OjpwdXQoY2VsbCwgZ2xvYmFsT2JqZWN0LCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCBzbG90
KSk7CiAgICAgaWYgKE9wdGlvbmFsPHVpbnQzMl90PiBpbmRleCA9IHBhcnNlSW5kZXgocHJvcGVy
dHlOYW1lKSkgCiAgICAgICAgIFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwgcHV0QnlJbmRleChj
ZWxsLCBnbG9iYWxPYmplY3QsIGluZGV4LnZhbHVlKCksIHZhbHVlLCBzbG90LmlzU3RyaWN0TW9k
ZSgpKSk7CiAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBKU09iamVjdDo6cHV0KGNlbGws
IGdsb2JhbE9iamVjdCwgcHJvcGVydHlOYW1lLCB2YWx1ZSwgc2xvdCkpOwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RyaW5nT2JqZWN0LmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RyaW5nT2JqZWN0LmgJKHJldmlzaW9uIDI3Nzk0
OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cmluZ09iamVjdC5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yOCw3ICsyOCw3IEBAIG5hbWVzcGFjZSBKU0MgewogY2xhc3MgU3RyaW5n
T2JqZWN0IDogcHVibGljIEpTV3JhcHBlck9iamVjdCB7CiBwdWJsaWM6CiAgICAgdXNpbmcgQmFz
ZSA9IEpTV3JhcHBlck9iamVjdDsKLSAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIFN0cnVj
dHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxhZ3MgfCBPdmVycmlkZXNHZXRPd25Qcm9wZXJ0
eVNsb3QgfCBPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eU5hbWVzIHwgSW50ZXJjZXB0c0dldE93blBy
b3BlcnR5U2xvdEJ5SW5kZXhFdmVuV2hlbkxlbmd0aElzTm90WmVybzsKKyAgICBzdGF0aWMgY29u
c3RleHByIHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxhZ3MgfCBP
dmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3QgfCBPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eU5hbWVz
IHwgT3ZlcnJpZGVzUHV0IHwgSW50ZXJjZXB0c0dldE93blByb3BlcnR5U2xvdEJ5SW5kZXhFdmVu
V2hlbkxlbmd0aElzTm90WmVybzsKIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lLCBTdWJzcGFjZUFj
Y2VzcyBtb2RlPgogICAgIHN0YXRpYyBJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RyaW5nUHJvdG90eXBlLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJpbmdQcm90b3R5
cGUuY3BwCShyZXZpc2lvbiAyNzc5NDgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9TdHJpbmdQcm90b3R5cGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjEsOSArMTIxLDkgQEAg
U3RyaW5nUHJvdG90eXBlOjpTdHJpbmdQcm90b3R5cGUoVk0mIHZtLAogewogfQogCi12b2lkIFN0
cmluZ1Byb3RvdHlwZTo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xv
YmFsT2JqZWN0LCBKU1N0cmluZyogbmFtZUFuZE1lc3NhZ2UpCit2b2lkIFN0cmluZ1Byb3RvdHlw
ZTo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQog
ewotICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKHZtLCBuYW1lQW5kTWVzc2FnZSk7CisgICAgQmFz
ZTo6ZmluaXNoQ3JlYXRpb24odm0sIGpzRW1wdHlTdHJpbmcodm0pKTsKICAgICBBU1NFUlQoaW5o
ZXJpdHModm0sIGluZm8oKSkpOwogCiAgICAgSlNDX05BVElWRV9JTlRSSU5TSUNfRlVOQ1RJT05f
V0lUSE9VVF9UUkFOU0lUSU9OKHZtLnByb3BlcnR5TmFtZXMtPnRvU3RyaW5nLCBzdHJpbmdQcm90
b0Z1bmNUb1N0cmluZywgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KFByb3BlcnR5QXR0cmlidXRlOjpE
b250RW51bSksIDAsIFN0cmluZ1Byb3RvdHlwZVZhbHVlT2ZJbnRyaW5zaWMpOwpAQCAtMTY1LDE0
ICsxNjUsMTIgQEAgdm9pZCBTdHJpbmdQcm90b3R5cGU6OmZpbmlzaENyZWF0aW9uKFZNJgogICAg
IHB1dERpcmVjdFdpdGhvdXRUcmFuc2l0aW9uKHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5pdGVyYXRv
clN5bWJvbCwgaXRlcmF0b3JGdW5jdGlvbiwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KFByb3BlcnR5
QXR0cmlidXRlOjpEb250RW51bSkpOwogCiAgICAgLy8gVGhlIGNvbnN0cnVjdG9yIHdpbGwgYmUg
YWRkZWQgbGF0ZXIsIGFmdGVyIFN0cmluZ0NvbnN0cnVjdG9yIGhhcyBiZWVuIGJ1aWx0Ci0gICAg
cHV0RGlyZWN0V2l0aG91dFRyYW5zaXRpb24odm0sIHZtLnByb3BlcnR5TmFtZXMtPmxlbmd0aCwg
anNOdW1iZXIoMCksIFByb3BlcnR5QXR0cmlidXRlOjpEb250RGVsZXRlIHwgUHJvcGVydHlBdHRy
aWJ1dGU6OlJlYWRPbmx5IHwgUHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKTsKIH0KIAogU3Ry
aW5nUHJvdG90eXBlKiBTdHJpbmdQcm90b3R5cGU6OmNyZWF0ZShWTSYgdm0sIEpTR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QsIFN0cnVjdHVyZSogc3RydWN0dXJlKQogewotICAgIEpTU3RyaW5n
KiBlbXB0eSA9IGpzRW1wdHlTdHJpbmcodm0pOwogICAgIFN0cmluZ1Byb3RvdHlwZSogcHJvdG90
eXBlID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8U3RyaW5nUHJvdG90eXBlPih2bS5oZWFw
KSkgU3RyaW5nUHJvdG90eXBlKHZtLCBzdHJ1Y3R1cmUpOwotICAgIHByb3RvdHlwZS0+ZmluaXNo
Q3JlYXRpb24odm0sIGdsb2JhbE9iamVjdCwgZW1wdHkpOworICAgIHByb3RvdHlwZS0+ZmluaXNo
Q3JlYXRpb24odm0sIGdsb2JhbE9iamVjdCk7CiAgICAgcmV0dXJuIHByb3RvdHlwZTsKIH0KIApJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RyaW5nUHJvdG90eXBlLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RyaW5nUHJvdG90eXBl
LmgJKHJldmlzaW9uIDI3Nzk0OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0
cmluZ1Byb3RvdHlwZS5oCSh3b3JraW5nIGNvcHkpCkBAIC00NSw3ICs0NSw3IEBAIHB1YmxpYzoK
IAogcHJpdmF0ZToKICAgICBTdHJpbmdQcm90b3R5cGUoVk0mLCBTdHJ1Y3R1cmUqKTsKLSAgICB2
b2lkIGZpbmlzaENyZWF0aW9uKFZNJiwgSlNHbG9iYWxPYmplY3QqLCBKU1N0cmluZyopOworICAg
IHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mLCBKU0dsb2JhbE9iamVjdCopOwogfTsKIFNUQVRJQ19B
U1NFUlRfSVNPX1NVQlNQQUNFX1NIQVJBQkxFKFN0cmluZ1Byb3RvdHlwZSwgU3RyaW5nT2JqZWN0
KTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmUuY3Bw
CShyZXZpc2lvbiAyNzc5NDgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1
Y3R1cmUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xOTAsMTEgKzE5MCw2IEBAIHZvaWQgU3RydWN0
dXJlOjp2YWxpZGF0ZUZsYWdzKCkKICAgICBpZiAob3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90
QnlJbmRleCkKICAgICAgICAgUkVMRUFTRV9BU1NFUlQodHlwZUluZm8oKS5pbnRlcmNlcHRzR2V0
T3duUHJvcGVydHlTbG90QnlJbmRleEV2ZW5XaGVuTGVuZ3RoSXNOb3RaZXJvKCkpOwogCi0gICAg
Ym9vbCBvdmVycmlkZXNQdXRQcm9wZXJ0eVNlY3VyaXR5Q2hlY2sgPQotICAgICAgICBtZXRob2RU
YWJsZS5kb1B1dFByb3BlcnR5U2VjdXJpdHlDaGVjayAhPSBKU09iamVjdDo6ZG9QdXRQcm9wZXJ0
eVNlY3VyaXR5Q2hlY2sKLSAgICAgICAgJiYgbWV0aG9kVGFibGUuZG9QdXRQcm9wZXJ0eVNlY3Vy
aXR5Q2hlY2sgIT0gSlNDZWxsOjpkb1B1dFByb3BlcnR5U2VjdXJpdHlDaGVjazsKLSAgICBSRUxF
QVNFX0FTU0VSVChvdmVycmlkZXNQdXRQcm9wZXJ0eVNlY3VyaXR5Q2hlY2sgPT0gdHlwZUluZm8o
KS5oYXNQdXRQcm9wZXJ0eVNlY3VyaXR5Q2hlY2soKSk7Ci0KICAgICBib29sIG92ZXJyaWRlc0dl
dE93blByb3BlcnR5TmFtZXMgPQogICAgICAgICBtZXRob2RUYWJsZS5nZXRPd25Qcm9wZXJ0eU5h
bWVzICE9IEpTT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eU5hbWVzCiAgICAgICAgICYmIG1ldGhvZFRh
YmxlLmdldE93blByb3BlcnR5TmFtZXMgIT0gSlNDZWxsOjpnZXRPd25Qcm9wZXJ0eU5hbWVzOwpA
QCAtMjA5LDYgKzIwNCwxMSBAQCB2b2lkIFN0cnVjdHVyZTo6dmFsaWRhdGVGbGFncygpCiAgICAg
ICAgIG1ldGhvZFRhYmxlLmdldFByb3RvdHlwZSAhPSBzdGF0aWNfY2FzdDxNZXRob2RUYWJsZTo6
R2V0UHJvdG90eXBlRnVuY3Rpb25QdHI+KEpTT2JqZWN0OjpnZXRQcm90b3R5cGUpCiAgICAgICAg
ICYmIG1ldGhvZFRhYmxlLmdldFByb3RvdHlwZSAhPSBKU0NlbGw6OmdldFByb3RvdHlwZTsKICAg
ICBSRUxFQVNFX0FTU0VSVChvdmVycmlkZXNHZXRQcm90b3R5cGUgPT0gdHlwZUluZm8oKS5vdmVy
cmlkZXNHZXRQcm90b3R5cGUoKSk7CisKKyAgICBib29sIG92ZXJyaWRlc1B1dCA9CisgICAgICAg
IG1ldGhvZFRhYmxlLnB1dCAhPSBKU09iamVjdDo6cHV0CisgICAgICAgICYmIG1ldGhvZFRhYmxl
LnB1dCAhPSBKU0NlbGw6OnB1dDsKKyAgICBSRUxFQVNFX0FTU0VSVChvdmVycmlkZXNQdXQgPT0g
dHlwZUluZm8oKS5vdmVycmlkZXNQdXQoKSk7CiB9CiAjZWxzZQogaW5saW5lIHZvaWQgU3RydWN0
dXJlOjp2YWxpZGF0ZUZsYWdzKCkgeyB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9TdHJ1Y3R1cmUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9TdHJ1Y3R1cmUuaAkocmV2aXNpb24gMjc3OTQ4KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvU3RydWN0dXJlLmgJKHdvcmtpbmcgY29weSkKQEAgLTI2OCw2ICsyNjgsMTEg
QEAgcHVibGljOgogICAgIHsKICAgICAgICAgcmV0dXJuIHR5cGVJbmZvKCkuZ2V0T3duUHJvcGVy
dHlTbG90SXNJbXB1cmUoKTsKICAgICB9CisKKyAgICBib29sIGhhc05vblJlaWZpZWRTdGF0aWNQ
cm9wZXJ0aWVzKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiB0eXBlSW5mbygpLmhhc1N0
YXRpY1Byb3BlcnR5VGFibGUoKSAmJiAhc3RhdGljUHJvcGVydGllc1JlaWZpZWQoKTsKKyAgICB9
CiAgICAgCiAgICAgLy8gVHlwZSBhY2Nlc3NvcnMuCiAgICAgVHlwZUluZm8gdHlwZUluZm8oKSBj
b25zdCB7IHJldHVybiBtX2Jsb2IudHlwZUluZm8obV9vdXRPZkxpbmVUeXBlRmxhZ3MpOyB9Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdG9vbHMvSlNEb2xsYXJWTS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3Rvb2xzL0pTRG9sbGFyVk0uY3BwCShyZXZpc2lv
biAyNzc5NDgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdG9vbHMvSlNEb2xsYXJWTS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTY4OSwxMSArNjg5LDYgQEAgSlNDX0RFRklORV9DVVNUT01fR0VU
VEVSKHJ1bnRpbWVBcnJheUxlbgogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNOdW1iZXIo
dGhpc09iamVjdC0+Z2V0TGVuZ3RoKCkpKTsKIH0KIAotc3RhdGljIGNvbnN0IHN0cnVjdCBDb21w
YWN0SGFzaEluZGV4IHN0YXRpY0N1c3RvbUFjY2Vzc29yVGFibGVJbmRleFsyXSA9IHsKLSAgICB7
IDAsIC0xIH0sCi0gICAgeyAtMSwgLTEgfSwKLX07Ci0KIHN0YXRpYyBKU0NfREVDTEFSRV9DVVNU
T01fR0VUVEVSKHRlc3RTdGF0aWNBY2Nlc3NvckdldHRlcik7CiBzdGF0aWMgSlNDX0RFQ0xBUkVf
Q1VTVE9NX1NFVFRFUih0ZXN0U3RhdGljQWNjZXNzb3JQdXR0ZXIpOwogCkBAIC03MTQsMTkgKzcw
OSwzNiBAQCBKU0NfREVGSU5FX0NVU1RPTV9TRVRURVIodGVzdFN0YXRpY0FjY2VzCiB7CiAgICAg
RG9sbGFyVk1Bc3NlcnRTY29wZSBhc3NlcnRTY29wZTsKICAgICBWTSYgdm0gPSBnbG9iYWxPYmpl
Y3QtPnZtKCk7CisgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7
CiAgICAgCi0gICAgSlNPYmplY3QqIHRoaXNPYmplY3QgPSBqc0R5bmFtaWNDYXN0PEpTT2JqZWN0
Kj4odm0sIEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKKyAgICBKU1ZhbHVlIHJlY2VpdmVy
ID0gSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSk7CisgICAgSlNPYmplY3QqIHRoaXNPYmplY3Qg
PSByZWNlaXZlci5pc09iamVjdCgpID8gYXNPYmplY3QocmVjZWl2ZXIpIDogcmVjZWl2ZXIuc3lu
dGhlc2l6ZVByb3RvdHlwZShnbG9iYWxPYmplY3QpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04o
dGhyb3dTY29wZSwgZmFsc2UpOwogICAgIFJFTEVBU0VfQVNTRVJUKHRoaXNPYmplY3QpOwogCiAg
ICAgcmV0dXJuIHRoaXNPYmplY3QtPnB1dERpcmVjdCh2bSwgUHJvcGVydHlOYW1lKElkZW50aWZp
ZXI6OmZyb21TdHJpbmcodm0sICJ0ZXN0RmllbGQiKSksIEpTVmFsdWU6OmRlY29kZSh2YWx1ZSkp
OwogfQogCi1zdGF0aWMgY29uc3Qgc3RydWN0IEhhc2hUYWJsZVZhbHVlIHN0YXRpY0N1c3RvbUFj
Y2Vzc29yVGFibGVWYWx1ZXNbMV0gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IENvbXBhY3RIYXNo
SW5kZXggc3RhdGljQ3VzdG9tQWNjZXNzb3JUYWJsZUluZGV4WzldID0geworICAgIHsgLTEsIC0x
IH0sCisgICAgeyAtMSwgLTEgfSwKKyAgICB7IDIsIC0xIH0sCisgICAgeyAtMSwgLTEgfSwKKyAg
ICB7IDAsIDggfSwKKyAgICB7IC0xLCAtMSB9LAorICAgIHsgLTEsIC0xIH0sCisgICAgeyAtMSwg
LTEgfSwKKyAgICB7IDEsIC0xIH0sCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IEhhc2hUYWJs
ZVZhbHVlIHN0YXRpY0N1c3RvbUFjY2Vzc29yVGFibGVWYWx1ZXNbM10gPSB7CiAgICAgeyAidGVz
dFN0YXRpY0FjY2Vzc29yIiwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KFByb3BlcnR5QXR0cmlidXRl
OjpDdXN0b21BY2Nlc3NvciksIE5vSW50cmluc2ljLCB7IChpbnRwdHJfdClzdGF0aWNfY2FzdDxQ
cm9wZXJ0eVNsb3Q6OkdldFZhbHVlRnVuYz4odGVzdFN0YXRpY0FjY2Vzc29yR2V0dGVyKSwgKGlu
dHB0cl90KXN0YXRpY19jYXN0PFB1dFByb3BlcnR5U2xvdDo6UHV0VmFsdWVGdW5jPih0ZXN0U3Rh
dGljQWNjZXNzb3JQdXR0ZXIpIH0gfSwKKyAgICB7ICJ0ZXN0U3RhdGljQWNjZXNzb3JEb250RW51
bSIsIFByb3BlcnR5QXR0cmlidXRlOjpDdXN0b21BY2Nlc3NvciB8IFByb3BlcnR5QXR0cmlidXRl
OjpEb250RW51bSwgTm9JbnRyaW5zaWMsIHsgKGludHB0cl90KXN0YXRpY19jYXN0PEdldFZhbHVl
RnVuYz4odGVzdFN0YXRpY0FjY2Vzc29yR2V0dGVyKSwgKGludHB0cl90KXN0YXRpY19jYXN0PFB1
dFZhbHVlRnVuYz4odGVzdFN0YXRpY0FjY2Vzc29yUHV0dGVyKSB9IH0sCisgICAgeyAidGVzdFN0
YXRpY0FjY2Vzc29yUmVhZE9ubHkiLCBQcm9wZXJ0eUF0dHJpYnV0ZTo6Q3VzdG9tQWNjZXNzb3Ig
fCBQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0gfCBQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVhZE9u
bHksIE5vSW50cmluc2ljLCB7IChpbnRwdHJfdClzdGF0aWNfY2FzdDxHZXRWYWx1ZUZ1bmM+KHRl
c3RTdGF0aWNBY2Nlc3NvckdldHRlciksIDAgfSB9LAogfTsKIAogc3RhdGljIGNvbnN0IHN0cnVj
dCBIYXNoVGFibGUgc3RhdGljQ3VzdG9tQWNjZXNzb3JUYWJsZSA9Ci0gICAgeyAxLCAxLCB0cnVl
LCBudWxscHRyLCBzdGF0aWNDdXN0b21BY2Nlc3NvclRhYmxlVmFsdWVzLCBzdGF0aWNDdXN0b21B
Y2Nlc3NvclRhYmxlSW5kZXggfTsKKyAgICB7IDMsIDcsIHRydWUsIG51bGxwdHIsIHN0YXRpY0N1
c3RvbUFjY2Vzc29yVGFibGVWYWx1ZXMsIHN0YXRpY0N1c3RvbUFjY2Vzc29yVGFibGVJbmRleCB9
OwogCiBjbGFzcyBTdGF0aWNDdXN0b21BY2Nlc3NvciA6IHB1YmxpYyBKU05vbkZpbmFsT2JqZWN0
IHsKICAgICB1c2luZyBCYXNlID0gSlNOb25GaW5hbE9iamVjdDsKQEAgLTc5MSwxNyArODAzLDI1
IEBAIEpTQ19ERUZJTkVfQ1VTVE9NX1NFVFRFUih0ZXN0U3RhdGljVmFsdWUKICAgICByZXR1cm4g
dGhpc09iamVjdC0+cHV0RGlyZWN0KHZtLCBQcm9wZXJ0eU5hbWUoSWRlbnRpZmllcjo6ZnJvbVN0
cmluZyh2bSwgInRlc3RTdGF0aWNWYWx1ZSIpKSwgSlNWYWx1ZTo6ZGVjb2RlKHZhbHVlKSk7CiB9
CiAKLXN0YXRpYyBjb25zdCBzdHJ1Y3QgQ29tcGFjdEhhc2hJbmRleCBzdGF0aWNDdXN0b21WYWx1
ZVRhYmxlSW5kZXhbMl0gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IENvbXBhY3RIYXNoSW5kZXgg
c3RhdGljQ3VzdG9tVmFsdWVUYWJsZUluZGV4WzhdID0geworICAgIHsgMSwgLTEgfSwKKyAgICB7
IC0xLCAtMSB9LAorICAgIHsgLTEsIC0xIH0sCisgICAgeyAtMSwgLTEgfSwKKyAgICB7IC0xLCAt
MSB9LAorICAgIHsgMiwgLTEgfSwKICAgICB7IDAsIC0xIH0sCiAgICAgeyAtMSwgLTEgfSwKIH07
CiAKLXN0YXRpYyBjb25zdCBzdHJ1Y3QgSGFzaFRhYmxlVmFsdWUgc3RhdGljQ3VzdG9tVmFsdWVU
YWJsZVZhbHVlc1sxXSA9IHsKLSAgICB7ICJ0ZXN0U3RhdGljVmFsdWUiLCBzdGF0aWNfY2FzdDx1
bnNpZ25lZD4oUHJvcGVydHlBdHRyaWJ1dGU6OkN1c3RvbUFjY2Vzc29yKSwgTm9JbnRyaW5zaWMs
IHsgKGludHB0cl90KXN0YXRpY19jYXN0PFByb3BlcnR5U2xvdDo6R2V0VmFsdWVGdW5jPih0ZXN0
U3RhdGljVmFsdWVHZXR0ZXIpLCAoaW50cHRyX3Qpc3RhdGljX2Nhc3Q8UHV0UHJvcGVydHlTbG90
OjpQdXRWYWx1ZUZ1bmM+KHRlc3RTdGF0aWNWYWx1ZVB1dHRlcikgfSB9LAorc3RhdGljIGNvbnN0
IHN0cnVjdCBIYXNoVGFibGVWYWx1ZSBzdGF0aWNDdXN0b21WYWx1ZVRhYmxlVmFsdWVzWzNdID0g
eworICAgIHsgInRlc3RTdGF0aWNWYWx1ZSIsIHN0YXRpY19jYXN0PHVuc2lnbmVkPihQcm9wZXJ0
eUF0dHJpYnV0ZTo6Q3VzdG9tVmFsdWUpLCBOb0ludHJpbnNpYywgeyAoaW50cHRyX3Qpc3RhdGlj
X2Nhc3Q8R2V0VmFsdWVGdW5jPih0ZXN0U3RhdGljVmFsdWVHZXR0ZXIpLCAoaW50cHRyX3Qpc3Rh
dGljX2Nhc3Q8UHV0VmFsdWVGdW5jPih0ZXN0U3RhdGljVmFsdWVQdXR0ZXIpIH0gfSwKKyAgICB7
ICJ0ZXN0U3RhdGljVmFsdWVOb1NldHRlciIsIFByb3BlcnR5QXR0cmlidXRlOjpDdXN0b21WYWx1
ZSB8IFByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSwgTm9JbnRyaW5zaWMsIHsgKGludHB0cl90
KXN0YXRpY19jYXN0PEdldFZhbHVlRnVuYz4odGVzdFN0YXRpY1ZhbHVlR2V0dGVyKSwgMCB9IH0s
CisgICAgeyAidGVzdFN0YXRpY1ZhbHVlUmVhZE9ubHkiLCBQcm9wZXJ0eUF0dHJpYnV0ZTo6Q3Vz
dG9tVmFsdWUgfCBQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0gfCBQcm9wZXJ0eUF0dHJpYnV0
ZTo6UmVhZE9ubHksIE5vSW50cmluc2ljLCB7IChpbnRwdHJfdClzdGF0aWNfY2FzdDxHZXRWYWx1
ZUZ1bmM+KHRlc3RTdGF0aWNWYWx1ZUdldHRlciksIDAgfSB9LAogfTsKIAogc3RhdGljIGNvbnN0
IHN0cnVjdCBIYXNoVGFibGUgc3RhdGljQ3VzdG9tVmFsdWVUYWJsZSA9Ci0gICAgeyAxLCAxLCB0
cnVlLCBudWxscHRyLCBzdGF0aWNDdXN0b21WYWx1ZVRhYmxlVmFsdWVzLCBzdGF0aWNDdXN0b21W
YWx1ZVRhYmxlSW5kZXggfTsKKyAgICB7IDMsIDcsIHRydWUsIG51bGxwdHIsIHN0YXRpY0N1c3Rv
bVZhbHVlVGFibGVWYWx1ZXMsIHN0YXRpY0N1c3RvbVZhbHVlVGFibGVJbmRleCB9OwogCiBjbGFz
cyBTdGF0aWNDdXN0b21WYWx1ZSA6IHB1YmxpYyBKU05vbkZpbmFsT2JqZWN0IHsKICAgICB1c2lu
ZyBCYXNlID0gSlNOb25GaW5hbE9iamVjdDsKQEAgLTgzOSw2ICs4NTksNyBAQCBwdWJsaWM6CiAK
IGNsYXNzIE9iamVjdERvaW5nU2lkZUVmZmVjdFB1dFdpdGhvdXRDb3JyZWN0U2xvdFN0YXR1cyA6
IHB1YmxpYyBKU05vbkZpbmFsT2JqZWN0IHsKICAgICB1c2luZyBCYXNlID0gSlNOb25GaW5hbE9i
amVjdDsKKyAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFz
ZTo6U3RydWN0dXJlRmxhZ3MgfCBPdmVycmlkZXNQdXQ7CiBwdWJsaWM6CiAgICAgdGVtcGxhdGU8
dHlwZW5hbWUgQ2VsbFR5cGUsIFN1YnNwYWNlQWNjZXNzPgogICAgIHN0YXRpYyBDb21wbGV0ZVN1
YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VM
b2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCShyZXZpc2lvbiAyNzc5
NDgpCisrKyBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyAr
MSwyOSBAQAorMjAyMS0wNS0yNCAgQWxleGV5IFNodmF5a2EgIDxzaHZhaWthbGVzaEBnbWFpbC5j
b20+CisKKyAgICAgICAgUmUtbGFuZCByMjc2NTkyIHdpdGggYSBmaXggZm9yIG9wYXF1ZSBBUEkg
b2JqZWN0cworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MjI2MTg1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
VGVzdHM6IGpzL2RvbS9zY3JpcHQtdGVzdHMvcmVmbGVjdC1zZXQtb250by1kb20uanMKKyAgICAg
ICAgICAgICAgIGltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvV2ViSURML2VjbWFzY3Jp
cHQtYmluZGluZy9pbnRlcmZhY2Utb2JqZWN0LXNldC1yZWNlaXZlci5odG1sCisgICAgICAgICAg
ICAgICBodHRwL3Rlc3RzL3NlY3VyaXR5L2Nyb3NzLWZyYW1lLWFjY2Vzcy1vYmplY3QtZ2V0UHJv
dG90eXBlT2YtaW4tcHV0Lmh0bWwKKworICAgICAgICAqIGJpbmRpbmdzL2pzL0pTRE9NV2luZG93
Q3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTRE9NV2luZG93OjpwdXQpOgorICAgICAg
ICAoV2ViQ29yZTo6SlNET01XaW5kb3c6OmRvUHV0UHJvcGVydHlTZWN1cml0eUNoZWNrKTogRGVs
ZXRlZC4KKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0xvY2F0aW9uQ3VzdG9tLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkpTTG9jYXRpb246OmRvUHV0UHJvcGVydHlTZWN1cml0eUNoZWNrKTogRGVs
ZXRlZC4KKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU1JlbW90ZURPTVdpbmRvd0N1c3RvbS5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpKU1JlbW90ZURPTVdpbmRvdzo6cHV0KToKKyAgICAgICAgKiBi
aW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5wbToKKyAgICAgICAgKEdlbmVyYXRlUHV0
KToKKyAgICAgICAgKEdlbmVyYXRlSGVhZGVyKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRz
L3Rlc3QvSlMvKjogVXBkYXRlZC4KKyAgICAgICAgKiBicmlkZ2Uvb2JqYy9vYmpjX3J1bnRpbWUu
aDoKKyAgICAgICAgKiBicmlkZ2UvcnVudGltZV9hcnJheS5oOgorICAgICAgICAqIGJyaWRnZS9y
dW50aW1lX29iamVjdC5oOgorCiAyMDIxLTA1LTI0ICBMYXVybyBNb3VyYSAgPGxtb3VyYUBpZ2Fs
aWEuY29tPgogCiAgICAgICAgIFtHU3RyZWFtZXJdIFdlYlByb2Nlc3MgY3Jhc2hlcyB3aGVuIGNl
cnRhaW4gZWxlbWVudHMgYXJlIG1pc3NpbmcKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2pzL0pTRE9NV2luZG93Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU0RPTVdpbmRvd0N1c3RvbS5jcHAJKHJldmlzaW9uIDI3Nzk0OCkKKysrIFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NV2luZG93Q3VzdG9tLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMjQ4LDIzICsyNDgsNiBAQCBib29sIEpTRE9NV2luZG93OjpnZXRPd25Qcm9wZXJ0
eVNsb3RCeUluCiAgICAgcmV0dXJuIEJhc2U6OmdldE93blByb3BlcnR5U2xvdEJ5SW5kZXgodGhp
c09iamVjdCwgbGV4aWNhbEdsb2JhbE9iamVjdCwgaW5kZXgsIHNsb3QpOwogfQogCi12b2lkIEpT
RE9NV2luZG93Ojpkb1B1dFByb3BlcnR5U2VjdXJpdHlDaGVjayhKU09iamVjdCogY2VsbCwgSlNH
bG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5h
bWUsIFB1dFByb3BlcnR5U2xvdCYpCi17Ci0gICAgVk0mIHZtID0gbGV4aWNhbEdsb2JhbE9iamVj
dC0+dm0oKTsKLSAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0KLSAg
ICBhdXRvKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTRE9NV2luZG93Kj4oY2VsbCk7Ci0KLSAgICBT
dHJpbmcgZXJyb3JNZXNzYWdlOwotICAgIGlmICghQmluZGluZ1NlY3VyaXR5OjpzaG91bGRBbGxv
d0FjY2Vzc1RvRE9NV2luZG93KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aGlzT2JqZWN0LT53cmFw
cGVkKCksIGVycm9yTWVzc2FnZSkpIHsKLSAgICAgICAgLy8gV2Ugb25seSBhbGxvdyBzZXR0aW5n
ICJsb2NhdGlvbiIgYXR0cmlidXRlIGNyb3NzLW9yaWdpbi4KLSAgICAgICAgaWYgKHByb3BlcnR5
TmFtZSA9PSBzdGF0aWNfY2FzdDxKU1ZNQ2xpZW50RGF0YSo+KHZtLmNsaWVudERhdGEpLT5idWls
dGluTmFtZXMoKS5sb2NhdGlvblB1YmxpY05hbWUoKSkKLSAgICAgICAgICAgIHJldHVybjsKLSAg
ICAgICAgdGhyb3dTZWN1cml0eUVycm9yKCpsZXhpY2FsR2xvYmFsT2JqZWN0LCBzY29wZSwgZXJy
b3JNZXNzYWdlKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLX0KLQogYm9vbCBKU0RPTVdpbmRv
dzo6cHV0KEpTQ2VsbCogY2VsbCwgSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3Qs
IFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUgdmFsdWUsIFB1dFByb3BlcnR5U2xv
dCYgc2xvdCkKIHsKICAgICBWTSYgdm0gPSBsZXhpY2FsR2xvYmFsT2JqZWN0LT52bSgpOwpAQCAt
MjcyLDE3ICsyNTUsMTAgQEAgYm9vbCBKU0RPTVdpbmRvdzo6cHV0KEpTQ2VsbCogY2VsbCwgSlNH
bAogCiAgICAgYXV0byogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0RPTVdpbmRvdyo+KGNlbGwpOwog
Ci0gICAgU3RyaW5nIGVycm9yTWVzc2FnZTsKLSAgICBpZiAoIUJpbmRpbmdTZWN1cml0eTo6c2hv
dWxkQWxsb3dBY2Nlc3NUb0RPTVdpbmRvdygqbGV4aWNhbEdsb2JhbE9iamVjdCwgdGhpc09iamVj
dC0+d3JhcHBlZCgpLCBlcnJvck1lc3NhZ2UpKSB7CisgICAgaWYgKHByb3BlcnR5TmFtZSAhPSBz
dGF0aWNfY2FzdDxKU1ZNQ2xpZW50RGF0YSo+KHZtLmNsaWVudERhdGEpLT5idWlsdGluTmFtZXMo
KS5sb2NhdGlvblB1YmxpY05hbWUoKSkgewogICAgICAgICAvLyBXZSBvbmx5IGFsbG93IHNldHRp
bmcgImxvY2F0aW9uIiBhdHRyaWJ1dGUgY3Jvc3Mtb3JpZ2luLgotICAgICAgICBpZiAocHJvcGVy
dHlOYW1lID09IHN0YXRpY19jYXN0PEpTVk1DbGllbnREYXRhKj4odm0uY2xpZW50RGF0YSktPmJ1
aWx0aW5OYW1lcygpLmxvY2F0aW9uUHVibGljTmFtZSgpKSB7Ci0gICAgICAgICAgICBib29sIHB1
dFJlc3VsdCA9IGZhbHNlOwotICAgICAgICAgICAgaWYgKGxvb2t1cFB1dChsZXhpY2FsR2xvYmFs
T2JqZWN0LCBwcm9wZXJ0eU5hbWUsIHRoaXNPYmplY3QsIHZhbHVlLCAqc19pbmZvLnN0YXRpY1By
b3BIYXNoVGFibGUsIHNsb3QsIHB1dFJlc3VsdCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIHB1
dFJlc3VsdDsKKyAgICAgICAgaWYgKCFCaW5kaW5nU2VjdXJpdHk6OnNob3VsZEFsbG93QWNjZXNz
VG9ET01XaW5kb3cobGV4aWNhbEdsb2JhbE9iamVjdCwgdGhpc09iamVjdC0+d3JhcHBlZCgpLCBU
aHJvd1NlY3VyaXR5RXJyb3IpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9
Ci0gICAgICAgIHRocm93U2VjdXJpdHlFcnJvcigqbGV4aWNhbEdsb2JhbE9iamVjdCwgc2NvcGUs
IGVycm9yTWVzc2FnZSk7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKICAgICBSRUxF
QVNFX0FORF9SRVRVUk4oc2NvcGUsIEJhc2U6OnB1dCh0aGlzT2JqZWN0LCBsZXhpY2FsR2xvYmFs
T2JqZWN0LCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCBzbG90KSk7CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU0xvY2F0aW9uQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU0xvY2F0aW9uQ3VzdG9tLmNwcAkocmV2aXNpb24gMjc3OTQ4
KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNMb2NhdGlvbkN1c3RvbS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTEwOCwyMyArMTA4LDYgQEAgYm9vbCBKU0xvY2F0aW9uOjpnZXRPd25Q
cm9wZXJ0eVNsb3RCeUluZAogICAgIFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwgSlNPYmplY3Q6
OmdldE93blByb3BlcnR5U2xvdEJ5SW5kZXgob2JqZWN0LCBsZXhpY2FsR2xvYmFsT2JqZWN0LCBp
bmRleCwgc2xvdCkpOwogfQogCi12b2lkIEpTTG9jYXRpb246OmRvUHV0UHJvcGVydHlTZWN1cml0
eUNoZWNrKEpTT2JqZWN0KiBvYmplY3QsIEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2Jq
ZWN0LCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBQdXRQcm9wZXJ0eVNsb3QmKQotewotICAg
IGF1dG8qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNMb2NhdGlvbio+KG9iamVjdCk7Ci0gICAgQVNT
RVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwotCi0gICAgVk0mIHZt
ID0gbGV4aWNhbEdsb2JhbE9iamVjdC0+dm0oKTsKLQotICAgIC8vIEFsd2F5cyBhbGxvdyBhc3Np
Z25pbmcgdG8gdGhlIHdob2xlIGxvY2F0aW9uLgotICAgIC8vIEhvd2V2ZXIsIGFsbGxvd2luZyBh
c3NpZ25pbmcgb2YgcGllY2VzIG1pZ2h0IGluYWR2ZXJ0ZW50bHkgZGlzY2xvc2UgcGFydHMgb2Yg
dGhlIG9yaWdpbmFsIGxvY2F0aW9uLgotICAgIC8vIFNvIGZhbGwgdGhyb3VnaCB0byB0aGUgYWNj
ZXNzIGNoZWNrIGZvciB0aG9zZS4KLSAgICBpZiAocHJvcGVydHlOYW1lID09IHN0YXRpY19jYXN0
PEpTVk1DbGllbnREYXRhKj4odm0uY2xpZW50RGF0YSktPmJ1aWx0aW5OYW1lcygpLmhyZWZQdWJs
aWNOYW1lKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIC8vIEJsb2NrIGFjY2VzcyBhbmQgdGhy
b3cgaWYgdGhlcmUgaXMgYSBzZWN1cml0eSBlcnJvci4KLSAgICBCaW5kaW5nU2VjdXJpdHk6OnNo
b3VsZEFsbG93QWNjZXNzVG9ET01XaW5kb3cobGV4aWNhbEdsb2JhbE9iamVjdCwgdGhpc09iamVj
dC0+d3JhcHBlZCgpLndpbmRvdygpLCBUaHJvd1NlY3VyaXR5RXJyb3IpOwotfQotCiBib29sIEpT
TG9jYXRpb246OnB1dChKU0NlbGwqIGNlbGwsIEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFs
T2JqZWN0LCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBKU1ZhbHVlIHZhbHVlLCBQdXRQcm9w
ZXJ0eVNsb3QmIHB1dFByb3BlcnR5U2xvdCkKIHsKICAgICBWTSYgdm0gPSBsZXhpY2FsR2xvYmFs
T2JqZWN0LT52bSgpOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNSZW1vdGVE
T01XaW5kb3dDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2pzL0pTUmVtb3RlRE9NV2luZG93Q3VzdG9tLmNwcAkocmV2aXNpb24gMjc3OTQ4KQorKysgU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNSZW1vdGVET01XaW5kb3dDdXN0b20uY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC02OCwxMSArNjgsMTIgQEAgYm9vbCBKU1JlbW90ZURPTVdpbmRvdzo6cHV0
KEpTQ2VsbCogY2VsbAogCiAgICAgLy8gV2Ugb25seSBhbGxvdyBzZXR0aW5nICJsb2NhdGlvbiIg
YXR0cmlidXRlIGNyb3NzLW9yaWdpbi4KICAgICBpZiAocHJvcGVydHlOYW1lID09IHN0YXRpY19j
YXN0PEpTVk1DbGllbnREYXRhKj4odm0uY2xpZW50RGF0YSktPmJ1aWx0aW5OYW1lcygpLmxvY2F0
aW9uUHVibGljTmFtZSgpKSB7Ci0gICAgICAgIGJvb2wgcHV0UmVzdWx0ID0gZmFsc2U7Ci0gICAg
ICAgIGlmIChsb29rdXBQdXQobGV4aWNhbEdsb2JhbE9iamVjdCwgcHJvcGVydHlOYW1lLCB0aGlz
T2JqZWN0LCB2YWx1ZSwgKnNfaW5mby5zdGF0aWNQcm9wSGFzaFRhYmxlLCBzbG90LCBwdXRSZXN1
bHQpKQotICAgICAgICAgICAgcmV0dXJuIHB1dFJlc3VsdDsKLSAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgICAgICBhdXRvKiBzZXR0ZXIgPSBzX2luZm8uc3RhdGljUHJvcEhhc2hUYWJsZS0+ZW50
cnkocHJvcGVydHlOYW1lKS0+cHJvcGVydHlQdXR0ZXIoKTsKKyAgICAgICAgc2NvcGUucmVsZWFz
ZSgpOworICAgICAgICBzZXR0ZXIobGV4aWNhbEdsb2JhbE9iamVjdCwgSlNWYWx1ZTo6ZW5jb2Rl
KHNsb3QudGhpc1ZhbHVlKCkpLCBKU1ZhbHVlOjplbmNvZGUodmFsdWUpLCBwcm9wZXJ0eU5hbWUp
OworICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CisKICAgICB0aHJvd1NlY3VyaXR5RXJyb3Io
KmxleGljYWxHbG9iYWxPYmplY3QsIHNjb3BlLCBlcnJvck1lc3NhZ2UpOwogICAgIHJldHVybiBm
YWxzZTsKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVy
YXRvckpTLnBtCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMv
Q29kZUdlbmVyYXRvckpTLnBtCShyZXZpc2lvbiAyNzc5NDgpCisrKyBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5wbQkod29ya2luZyBjb3B5KQpAQCAtMTE3
Myw2ICsxMTczLDggQEAgc3ViIEdlbmVyYXRlUHV0CiAgICAgcHVzaChAJG91dHB1dEFycmF5LCAi
e1xuIik7CiAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgIGF1dG8qIHRoaXNPYmplY3QgPSBq
c0Nhc3Q8JHtjbGFzc05hbWV9Kj4oY2VsbCk7XG4iKTsKICAgICBwdXNoKEAkb3V0cHV0QXJyYXks
ICIgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpO1xuXG4i
KTsKKyAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAgaWYgKFVOTElLRUxZKHRoaXNPYmplY3Qg
IT0gcHV0UHJvcGVydHlTbG90LnRoaXNWYWx1ZSgpKSlcbiIpOworICAgIHB1c2goQCRvdXRwdXRB
cnJheSwgIiAgICAgICAgcmV0dXJuIEpTT2JqZWN0OjpwdXQodGhpc09iamVjdCwgbGV4aWNhbEds
b2JhbE9iamVjdCwgcHJvcGVydHlOYW1lLCB2YWx1ZSwgcHV0UHJvcGVydHlTbG90KTtcbiIpOwog
CiAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVf
VEhST1dfU0NPUEUobGV4aWNhbEdsb2JhbE9iamVjdC0+dm0oKSk7XG5cbiIpOwogCkBAIC0yOTQ5
LDExICsyOTUxLDYgQEAgc3ViIEdlbmVyYXRlSGVhZGVyCiAgICAgICAgICRzdHJ1Y3R1cmVGbGFn
c3siSlNDOjpJbnRlcmNlcHRzR2V0T3duUHJvcGVydHlTbG90QnlJbmRleEV2ZW5XaGVuTGVuZ3Ro
SXNOb3RaZXJvIn0gPSAxOwogICAgIH0KIAotICAgIGlmICgkaW50ZXJmYWNlLT5leHRlbmRlZEF0
dHJpYnV0ZXMtPntDaGVja1NlY3VyaXR5fSkgewotICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50
LCAiICAgIHN0YXRpYyB2b2lkIGRvUHV0UHJvcGVydHlTZWN1cml0eUNoZWNrKEpTQzo6SlNPYmpl
Y3QqLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpQcm9wZXJ0eU5hbWUsIEpTQzo6UHV0UHJv
cGVydHlTbG90Jik7XG4iKTsKLSAgICAgICAgJHN0cnVjdHVyZUZsYWdzeyJKU0M6Okhhc1B1dFBy
b3BlcnR5U2VjdXJpdHlDaGVjayJ9ID0gMTsKLSAgICB9Ci0KICAgICBpZiAoJGludGVyZmFjZS0+
ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57UGx1Z2lufSB8fCBHZXROYW1lZFNldHRlck9wZXJhdGlvbigk
aW50ZXJmYWNlKSkgewogICAgICAgICAkc3RydWN0dXJlRmxhZ3N7IkpTQzo6UHJvaGliaXRzUHJv
cGVydHlDYWNoaW5nIn0gPSAxOwogICAgIH0KQEAgLTI5NjYsNiArMjk2Myw3IEBAIHN1YiBHZW5l
cmF0ZUhlYWRlcgogICAgIGlmIChJbnN0YW5jZU92ZXJyaWRlc1B1dCgkaW50ZXJmYWNlKSkgewog
ICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiICAgIHN0YXRpYyBib29sIHB1dChKU0M6OkpT
Q2VsbCosIEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OlByb3BlcnR5TmFtZSwgSlNDOjpKU1Zh
bHVlLCBKU0M6OlB1dFByb3BlcnR5U2xvdCYpO1xuIik7CiAgICAgICAgIHB1c2goQGhlYWRlckNv
bnRlbnQsICIgICAgc3RhdGljIGJvb2wgcHV0QnlJbmRleChKU0M6OkpTQ2VsbCosIEpTQzo6SlNH
bG9iYWxPYmplY3QqLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIEpTQzo6SlNWYWx1ZSwgYm9vbCBz
aG91bGRUaHJvdyk7XG4iKTsKKyAgICAgICAgJHN0cnVjdHVyZUZsYWdzeyJKU0M6Ok92ZXJyaWRl
c1B1dCJ9ID0gMTsKICAgICB9CiAgICAgCiAgICAgaWYgKEluc3RhbmNlT3ZlcnJpZGVzRGVmaW5l
T3duUHJvcGVydHkoJGludGVyZmFjZSkpIHsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3REb21haW5TZWN1cml0eS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3REb21haW5TZWN1cml0
eS5oCShyZXZpc2lvbiAyNzc5NDgpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRz
L3Rlc3QvSlMvSlNUZXN0RG9tYWluU2VjdXJpdHkuaAkod29ya2luZyBjb3B5KQpAQCAtMzksNyAr
MzksNiBAQCBwdWJsaWM6CiAgICAgc3RhdGljIEpTQzo6SlNPYmplY3QqIGNyZWF0ZVByb3RvdHlw
ZShKU0M6OlZNJiwgSlNET01HbG9iYWxPYmplY3QmKTsKICAgICBzdGF0aWMgSlNDOjpKU09iamVj
dCogcHJvdG90eXBlKEpTQzo6Vk0mLCBKU0RPTUdsb2JhbE9iamVjdCYpOwogICAgIHN0YXRpYyBU
ZXN0RG9tYWluU2VjdXJpdHkqIHRvV3JhcHBlZChKU0M6OlZNJiwgSlNDOjpKU1ZhbHVlKTsKLSAg
ICBzdGF0aWMgdm9pZCBkb1B1dFByb3BlcnR5U2VjdXJpdHlDaGVjayhKU0M6OkpTT2JqZWN0Kiwg
SlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6UHJvcGVydHlOYW1lLCBKU0M6OlB1dFByb3BlcnR5
U2xvdCYpOwogICAgIHN0YXRpYyB2b2lkIGRlc3Ryb3koSlNDOjpKU0NlbGwqKTsKIAogICAgIERF
Q0xBUkVfSU5GTzsKQEAgLTU5LDcgKzU4LDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBKU0M6Oklz
b1N1YnNwYWNlKiBzdWJzcGFjZUZvckltcGwoSlNDOjpWTSYgdm0pOwogICAgIHN0YXRpYyB2b2lk
IGFuYWx5emVIZWFwKEpTQ2VsbCosIEpTQzo6SGVhcEFuYWx5emVyJik7CiBwdWJsaWM6Ci0gICAg
c3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVy
ZUZsYWdzIHwgSlNDOjpIYXNQdXRQcm9wZXJ0eVNlY3VyaXR5Q2hlY2sgfCBKU0M6Okhhc1N0YXRp
Y1Byb3BlcnR5VGFibGU7CisgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1cmVG
bGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwgSlNDOjpIYXNTdGF0aWNQcm9wZXJ0eVRhYmxl
OwogcHJvdGVjdGVkOgogICAgIEpTVGVzdERvbWFpblNlY3VyaXR5KEpTQzo6U3RydWN0dXJlKiwg
SlNET01HbG9iYWxPYmplY3QmLCBSZWY8VGVzdERvbWFpblNlY3VyaXR5PiYmKTsKIApJbmRleDog
U291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEluZGV4ZWRTZXR0
ZXJOb0lkZW50aWZpZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RJbmRleGVkU2V0dGVyTm9JZGVudGlmaWVyLmNwcAkocmV2
aXNpb24gMjc3OTQ4KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pT
L0pTVGVzdEluZGV4ZWRTZXR0ZXJOb0lkZW50aWZpZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
OTksNiArMTk5LDggQEAgYm9vbCBKU1Rlc3RJbmRleGVkU2V0dGVyTm9JZGVudGlmaWVyOjpwdQog
ICAgIGF1dG8qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNUZXN0SW5kZXhlZFNldHRlck5vSWRlbnRp
Zmllcio+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwg
aW5mbygpKTsKIAorICAgIGlmIChVTkxJS0VMWSh0aGlzT2JqZWN0ICE9IHB1dFByb3BlcnR5U2xv
dC50aGlzVmFsdWUoKSkpCisgICAgICAgIHJldHVybiBKU09iamVjdDo6cHV0KHRoaXNPYmplY3Qs
IGxleGljYWxHbG9iYWxPYmplY3QsIHByb3BlcnR5TmFtZSwgdmFsdWUsIHB1dFByb3BlcnR5U2xv
dCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRShsZXhpY2FsR2xv
YmFsT2JqZWN0LT52bSgpKTsKIAogICAgIGlmIChhdXRvIGluZGV4ID0gcGFyc2VJbmRleChwcm9w
ZXJ0eU5hbWUpKSB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3Qv
SlMvSlNUZXN0SW5kZXhlZFNldHRlck5vSWRlbnRpZmllci5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RJbmRleGVkU2V0dGVyTm9J
ZGVudGlmaWVyLmgJKHJldmlzaW9uIDI3Nzk0OCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RJbmRleGVkU2V0dGVyTm9JZGVudGlmaWVyLmgJKHdvcmtp
bmcgY29weSkKQEAgLTY0LDcgKzY0LDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBKU0M6Oklzb1N1
YnNwYWNlKiBzdWJzcGFjZUZvckltcGwoSlNDOjpWTSYgdm0pOwogICAgIHN0YXRpYyB2b2lkIGFu
YWx5emVIZWFwKEpTQ2VsbCosIEpTQzo6SGVhcEFuYWx5emVyJik7CiBwdWJsaWM6Ci0gICAgc3Rh
dGljIGNvbnN0ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZs
YWdzIHwgSlNDOjpJbnRlcmNlcHRzR2V0T3duUHJvcGVydHlTbG90QnlJbmRleEV2ZW5XaGVuTGVu
Z3RoSXNOb3RaZXJvIHwgSlNDOjpPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eU5hbWVzIHwgSlNDOjpP
dmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3Q7CisgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25l
ZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwgSlNDOjpJbnRlcmNlcHRz
R2V0T3duUHJvcGVydHlTbG90QnlJbmRleEV2ZW5XaGVuTGVuZ3RoSXNOb3RaZXJvIHwgSlNDOjpP
dmVycmlkZXNHZXRPd25Qcm9wZXJ0eU5hbWVzIHwgSlNDOjpPdmVycmlkZXNHZXRPd25Qcm9wZXJ0
eVNsb3QgfCBKU0M6Ok92ZXJyaWRlc1B1dDsKIHByb3RlY3RlZDoKICAgICBKU1Rlc3RJbmRleGVk
U2V0dGVyTm9JZGVudGlmaWVyKEpTQzo6U3RydWN0dXJlKiwgSlNET01HbG9iYWxPYmplY3QmLCBS
ZWY8VGVzdEluZGV4ZWRTZXR0ZXJOb0lkZW50aWZpZXI+JiYpOwogCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0SW5kZXhlZFNldHRlclRocm93aW5n
RXhjZXB0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3Jp
cHRzL3Rlc3QvSlMvSlNUZXN0SW5kZXhlZFNldHRlclRocm93aW5nRXhjZXB0aW9uLmNwcAkocmV2
aXNpb24gMjc3OTQ4KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pT
L0pTVGVzdEluZGV4ZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbi5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTE5OSw2ICsxOTksOCBAQCBib29sIEpTVGVzdEluZGV4ZWRTZXR0ZXJUaHJvd2luZ0V4Y2Vw
dGlvCiAgICAgYXV0byogdGhpc09iamVjdCA9IGpzQ2FzdDxKU1Rlc3RJbmRleGVkU2V0dGVyVGhy
b3dpbmdFeGNlcHRpb24qPihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRo
aXNPYmplY3QsIGluZm8oKSk7CiAKKyAgICBpZiAoVU5MSUtFTFkodGhpc09iamVjdCAhPSBwdXRQ
cm9wZXJ0eVNsb3QudGhpc1ZhbHVlKCkpKQorICAgICAgICByZXR1cm4gSlNPYmplY3Q6OnB1dCh0
aGlzT2JqZWN0LCBsZXhpY2FsR2xvYmFsT2JqZWN0LCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCBwdXRQ
cm9wZXJ0eVNsb3QpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUo
bGV4aWNhbEdsb2JhbE9iamVjdC0+dm0oKSk7CiAKICAgICBpZiAoYXV0byBpbmRleCA9IHBhcnNl
SW5kZXgocHJvcGVydHlOYW1lKSkgewpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2Ny
aXB0cy90ZXN0L0pTL0pTVGVzdEluZGV4ZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbi5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RJ
bmRleGVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb24uaAkocmV2aXNpb24gMjc3OTQ4KQorKysgU291
cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEluZGV4ZWRTZXR0ZXJU
aHJvd2luZ0V4Y2VwdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC02NCw3ICs2NCw3IEBAIHB1Ymxp
YzoKICAgICBzdGF0aWMgSlNDOjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3JJbXBsKEpTQzo6Vk0m
IHZtKTsKICAgICBzdGF0aWMgdm9pZCBhbmFseXplSGVhcChKU0NlbGwqLCBKU0M6OkhlYXBBbmFs
eXplciYpOwogcHVibGljOgotICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgU3RydWN0dXJl
RmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8IEpTQzo6SW50ZXJjZXB0c0dldE93blByb3Bl
cnR5U2xvdEJ5SW5kZXhFdmVuV2hlbkxlbmd0aElzTm90WmVybyB8IEpTQzo6T3ZlcnJpZGVzR2V0
T3duUHJvcGVydHlOYW1lcyB8IEpTQzo6T3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90OworICAg
IHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1
cmVGbGFncyB8IEpTQzo6SW50ZXJjZXB0c0dldE93blByb3BlcnR5U2xvdEJ5SW5kZXhFdmVuV2hl
bkxlbmd0aElzTm90WmVybyB8IEpTQzo6T3ZlcnJpZGVzR2V0T3duUHJvcGVydHlOYW1lcyB8IEpT
Qzo6T3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90IHwgSlNDOjpPdmVycmlkZXNQdXQ7CiBwcm90
ZWN0ZWQ6CiAgICAgSlNUZXN0SW5kZXhlZFNldHRlclRocm93aW5nRXhjZXB0aW9uKEpTQzo6U3Ry
dWN0dXJlKiwgSlNET01HbG9iYWxPYmplY3QmLCBSZWY8VGVzdEluZGV4ZWRTZXR0ZXJUaHJvd2lu
Z0V4Y2VwdGlvbj4mJik7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMv
dGVzdC9KUy9KU1Rlc3RJbmRleGVkU2V0dGVyV2l0aElkZW50aWZpZXIuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RJbmRleGVk
U2V0dGVyV2l0aElkZW50aWZpZXIuY3BwCShyZXZpc2lvbiAyNzc5NDgpCisrKyBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0SW5kZXhlZFNldHRlcldpdGhJZGVu
dGlmaWVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjA4LDYgKzIwOCw4IEBAIGJvb2wgSlNUZXN0
SW5kZXhlZFNldHRlcldpdGhJZGVudGlmaWVyOjoKICAgICBhdXRvKiB0aGlzT2JqZWN0ID0ganND
YXN0PEpTVGVzdEluZGV4ZWRTZXR0ZXJXaXRoSWRlbnRpZmllcio+KGNlbGwpOwogICAgIEFTU0VS
VF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKIAorICAgIGlmIChVTkxJ
S0VMWSh0aGlzT2JqZWN0ICE9IHB1dFByb3BlcnR5U2xvdC50aGlzVmFsdWUoKSkpCisgICAgICAg
IHJldHVybiBKU09iamVjdDo6cHV0KHRoaXNPYmplY3QsIGxleGljYWxHbG9iYWxPYmplY3QsIHBy
b3BlcnR5TmFtZSwgdmFsdWUsIHB1dFByb3BlcnR5U2xvdCk7CiAgICAgYXV0byB0aHJvd1Njb3Bl
ID0gREVDTEFSRV9USFJPV19TQ09QRShsZXhpY2FsR2xvYmFsT2JqZWN0LT52bSgpKTsKIAogICAg
IGlmIChhdXRvIGluZGV4ID0gcGFyc2VJbmRleChwcm9wZXJ0eU5hbWUpKSB7CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0SW5kZXhlZFNldHRlcldp
dGhJZGVudGlmaWVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2Ny
aXB0cy90ZXN0L0pTL0pTVGVzdEluZGV4ZWRTZXR0ZXJXaXRoSWRlbnRpZmllci5oCShyZXZpc2lv
biAyNzc5NDgpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNU
ZXN0SW5kZXhlZFNldHRlcldpdGhJZGVudGlmaWVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTY0LDcg
KzY0LDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBKU0M6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZv
ckltcGwoSlNDOjpWTSYgdm0pOwogICAgIHN0YXRpYyB2b2lkIGFuYWx5emVIZWFwKEpTQ2VsbCos
IEpTQzo6SGVhcEFuYWx5emVyJik7CiBwdWJsaWM6Ci0gICAgc3RhdGljIGNvbnN0ZXhwciB1bnNp
Z25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwgSlNDOjpJbnRlcmNl
cHRzR2V0T3duUHJvcGVydHlTbG90QnlJbmRleEV2ZW5XaGVuTGVuZ3RoSXNOb3RaZXJvIHwgSlND
OjpPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eU5hbWVzIHwgSlNDOjpPdmVycmlkZXNHZXRPd25Qcm9w
ZXJ0eVNsb3Q7CisgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9
IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwgSlNDOjpJbnRlcmNlcHRzR2V0T3duUHJvcGVydHlTbG90
QnlJbmRleEV2ZW5XaGVuTGVuZ3RoSXNOb3RaZXJvIHwgSlNDOjpPdmVycmlkZXNHZXRPd25Qcm9w
ZXJ0eU5hbWVzIHwgSlNDOjpPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3QgfCBKU0M6Ok92ZXJy
aWRlc1B1dDsKIHByb3RlY3RlZDoKICAgICBKU1Rlc3RJbmRleGVkU2V0dGVyV2l0aElkZW50aWZp
ZXIoSlNDOjpTdHJ1Y3R1cmUqLCBKU0RPTUdsb2JhbE9iamVjdCYsIFJlZjxUZXN0SW5kZXhlZFNl
dHRlcldpdGhJZGVudGlmaWVyPiYmKTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
c2NyaXB0cy90ZXN0L0pTL0pTVGVzdEludGVyZmFjZS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RJbnRlcmZhY2UuaAkocmV2aXNp
b24gMjc3OTQ4KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pT
VGVzdEludGVyZmFjZS5oCSh3b3JraW5nIGNvcHkpCkBAIC04Myw2ICs4Myw4IEBAIHB1YmxpYzoK
ICNpZiBFTkFCTEUoQ29uZGl0aW9uMTEpIHx8IEVOQUJMRShDb25kaXRpb24xMikKICAgICBKU0M6
OkpTVmFsdWUgc3VwcGxlbWVudGFsTWV0aG9kMyhKU0M6OkpTR2xvYmFsT2JqZWN0JiwgSlNDOjpD
YWxsRnJhbWUmKTsKICNlbmRpZgorcHVibGljOgorICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWdu
ZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8IEpTQzo6T3ZlcnJpZGVz
UHV0OwogcHJvdGVjdGVkOgogICAgIEpTVGVzdEludGVyZmFjZShKU0M6OlN0cnVjdHVyZSosIEpT
RE9NR2xvYmFsT2JqZWN0JiwgUmVmPFRlc3RJbnRlcmZhY2U+JiYpOwogCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRBbmRJbmRleGVkU2V0
dGVyTm9JZGVudGlmaWVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyTm9JZGVudGlmaWVy
LmNwcAkocmV2aXNpb24gMjc3OTQ4KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L0pTL0pTVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlck5vSWRlbnRpZmllci5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTIyNSw2ICsyMjUsOCBAQCBib29sIEpTVGVzdE5hbWVkQW5kSW5kZXhl
ZFNldHRlck5vSWRlbnRpCiAgICAgYXV0byogdGhpc09iamVjdCA9IGpzQ2FzdDxKU1Rlc3ROYW1l
ZEFuZEluZGV4ZWRTZXR0ZXJOb0lkZW50aWZpZXIqPihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JK
RUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CiAKKyAgICBpZiAoVU5MSUtFTFkodGhp
c09iamVjdCAhPSBwdXRQcm9wZXJ0eVNsb3QudGhpc1ZhbHVlKCkpKQorICAgICAgICByZXR1cm4g
SlNPYmplY3Q6OnB1dCh0aGlzT2JqZWN0LCBsZXhpY2FsR2xvYmFsT2JqZWN0LCBwcm9wZXJ0eU5h
bWUsIHZhbHVlLCBwdXRQcm9wZXJ0eVNsb3QpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xB
UkVfVEhST1dfU0NPUEUobGV4aWNhbEdsb2JhbE9iamVjdC0+dm0oKSk7CiAKICAgICBpZiAoYXV0
byBpbmRleCA9IHBhcnNlSW5kZXgocHJvcGVydHlOYW1lKSkgewpJbmRleDogU291cmNlL1dlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlck5v
SWRlbnRpZmllci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Njcmlw
dHMvdGVzdC9KUy9KU1Rlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJOb0lkZW50aWZpZXIuaAkocmV2
aXNpb24gMjc3OTQ4KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pT
L0pTVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlck5vSWRlbnRpZmllci5oCSh3b3JraW5nIGNvcHkp
CkBAIC02NCw3ICs2NCw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgSlNDOjpJc29TdWJzcGFjZSog
c3Vic3BhY2VGb3JJbXBsKEpTQzo6Vk0mIHZtKTsKICAgICBzdGF0aWMgdm9pZCBhbmFseXplSGVh
cChKU0NlbGwqLCBKU0M6OkhlYXBBbmFseXplciYpOwogcHVibGljOgotICAgIHN0YXRpYyBjb25z
dGV4cHIgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8IEpT
Qzo6R2V0T3duUHJvcGVydHlTbG90SXNJbXB1cmVGb3JQcm9wZXJ0eUFic2VuY2UgfCBKU0M6Oklu
dGVyY2VwdHNHZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4RXZlbldoZW5MZW5ndGhJc05vdFplcm8g
fCBKU0M6Ok92ZXJyaWRlc0dldE93blByb3BlcnR5TmFtZXMgfCBKU0M6Ok92ZXJyaWRlc0dldE93
blByb3BlcnR5U2xvdCB8IEpTQzo6UHJvaGliaXRzUHJvcGVydHlDYWNoaW5nOworICAgIHN0YXRp
YyBjb25zdGV4cHIgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFn
cyB8IEpTQzo6R2V0T3duUHJvcGVydHlTbG90SXNJbXB1cmVGb3JQcm9wZXJ0eUFic2VuY2UgfCBK
U0M6OkludGVyY2VwdHNHZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4RXZlbldoZW5MZW5ndGhJc05v
dFplcm8gfCBKU0M6Ok92ZXJyaWRlc0dldE93blByb3BlcnR5TmFtZXMgfCBKU0M6Ok92ZXJyaWRl
c0dldE93blByb3BlcnR5U2xvdCB8IEpTQzo6T3ZlcnJpZGVzUHV0IHwgSlNDOjpQcm9oaWJpdHNQ
cm9wZXJ0eUNhY2hpbmc7CiBwcm90ZWN0ZWQ6CiAgICAgSlNUZXN0TmFtZWRBbmRJbmRleGVkU2V0
dGVyTm9JZGVudGlmaWVyKEpTQzo6U3RydWN0dXJlKiwgSlNET01HbG9iYWxPYmplY3QmLCBSZWY8
VGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlck5vSWRlbnRpZmllcj4mJik7CiAKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZEFuZEluZGV4ZWRT
ZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
YmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlclRocm93
aW5nRXhjZXB0aW9uLmNwcAkocmV2aXNpb24gMjc3OTQ4KQorKysgU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlclRocm93aW5n
RXhjZXB0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjI1LDYgKzIyNSw4IEBAIGJvb2wgSlNU
ZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyVGhyb3dpbmcKICAgICBhdXRvKiB0aGlzT2JqZWN0ID0g
anNDYXN0PEpTVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlclRocm93aW5nRXhjZXB0aW9uKj4oY2Vs
bCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwog
CisgICAgaWYgKFVOTElLRUxZKHRoaXNPYmplY3QgIT0gcHV0UHJvcGVydHlTbG90LnRoaXNWYWx1
ZSgpKSkKKyAgICAgICAgcmV0dXJuIEpTT2JqZWN0OjpwdXQodGhpc09iamVjdCwgbGV4aWNhbEds
b2JhbE9iamVjdCwgcHJvcGVydHlOYW1lLCB2YWx1ZSwgcHV0UHJvcGVydHlTbG90KTsKICAgICBh
dXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKGxleGljYWxHbG9iYWxPYmplY3Qt
PnZtKCkpOwogCiAgICAgaWYgKGF1dG8gaW5kZXggPSBwYXJzZUluZGV4KHByb3BlcnR5TmFtZSkp
IHsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RO
YW1lZEFuZEluZGV4ZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbi5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZEFuZEluZGV4
ZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbi5oCShyZXZpc2lvbiAyNzc5NDgpCisrKyBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRBbmRJbmRleGVkU2V0
dGVyVGhyb3dpbmdFeGNlcHRpb24uaAkod29ya2luZyBjb3B5KQpAQCAtNjQsNyArNjQsNyBAQCBw
dWJsaWM6CiAgICAgc3RhdGljIEpTQzo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9ySW1wbChKU0M6
OlZNJiB2bSk7CiAgICAgc3RhdGljIHZvaWQgYW5hbHl6ZUhlYXAoSlNDZWxsKiwgSlNDOjpIZWFw
QW5hbHl6ZXImKTsKIHB1YmxpYzoKLSAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIFN0cnVj
dHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxhZ3MgfCBKU0M6OkdldE93blByb3BlcnR5U2xv
dElzSW1wdXJlRm9yUHJvcGVydHlBYnNlbmNlIHwgSlNDOjpJbnRlcmNlcHRzR2V0T3duUHJvcGVy
dHlTbG90QnlJbmRleEV2ZW5XaGVuTGVuZ3RoSXNOb3RaZXJvIHwgSlNDOjpPdmVycmlkZXNHZXRP
d25Qcm9wZXJ0eU5hbWVzIHwgSlNDOjpPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3QgfCBKU0M6
OlByb2hpYml0c1Byb3BlcnR5Q2FjaGluZzsKKyAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVk
IFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxhZ3MgfCBKU0M6OkdldE93blByb3Bl
cnR5U2xvdElzSW1wdXJlRm9yUHJvcGVydHlBYnNlbmNlIHwgSlNDOjpJbnRlcmNlcHRzR2V0T3du
UHJvcGVydHlTbG90QnlJbmRleEV2ZW5XaGVuTGVuZ3RoSXNOb3RaZXJvIHwgSlNDOjpPdmVycmlk
ZXNHZXRPd25Qcm9wZXJ0eU5hbWVzIHwgSlNDOjpPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3Qg
fCBKU0M6Ok92ZXJyaWRlc1B1dCB8IEpTQzo6UHJvaGliaXRzUHJvcGVydHlDYWNoaW5nOwogcHJv
dGVjdGVkOgogICAgIEpTVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlclRocm93aW5nRXhjZXB0aW9u
KEpTQzo6U3RydWN0dXJlKiwgSlNET01HbG9iYWxPYmplY3QmLCBSZWY8VGVzdE5hbWVkQW5kSW5k
ZXhlZFNldHRlclRocm93aW5nRXhjZXB0aW9uPiYmKTsKIApJbmRleDogU291cmNlL1dlYkNvcmUv
YmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlcldpdGhJ
ZGVudGlmaWVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3Jp
cHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyV2l0aElkZW50aWZpZXIuY3Bw
CShyZXZpc2lvbiAyNzc5NDgpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvSlMvSlNUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyV2l0aElkZW50aWZpZXIuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yMzYsNiArMjM2LDggQEAgYm9vbCBKU1Rlc3ROYW1lZEFuZEluZGV4ZWRT
ZXR0ZXJXaXRoSWRlbgogICAgIGF1dG8qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNUZXN0TmFtZWRB
bmRJbmRleGVkU2V0dGVyV2l0aElkZW50aWZpZXIqPihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JK
RUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CiAKKyAgICBpZiAoVU5MSUtFTFkodGhp
c09iamVjdCAhPSBwdXRQcm9wZXJ0eVNsb3QudGhpc1ZhbHVlKCkpKQorICAgICAgICByZXR1cm4g
SlNPYmplY3Q6OnB1dCh0aGlzT2JqZWN0LCBsZXhpY2FsR2xvYmFsT2JqZWN0LCBwcm9wZXJ0eU5h
bWUsIHZhbHVlLCBwdXRQcm9wZXJ0eVNsb3QpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xB
UkVfVEhST1dfU0NPUEUobGV4aWNhbEdsb2JhbE9iamVjdC0+dm0oKSk7CiAKICAgICBpZiAoYXV0
byBpbmRleCA9IHBhcnNlSW5kZXgocHJvcGVydHlOYW1lKSkgewpJbmRleDogU291cmNlL1dlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlcldp
dGhJZGVudGlmaWVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2Ny
aXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlcldpdGhJZGVudGlmaWVyLmgJ
KHJldmlzaW9uIDI3Nzk0OCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVz
dC9KUy9KU1Rlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJXaXRoSWRlbnRpZmllci5oCSh3b3JraW5n
IGNvcHkpCkBAIC02NCw3ICs2NCw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgSlNDOjpJc29TdWJz
cGFjZSogc3Vic3BhY2VGb3JJbXBsKEpTQzo6Vk0mIHZtKTsKICAgICBzdGF0aWMgdm9pZCBhbmFs
eXplSGVhcChKU0NlbGwqLCBKU0M6OkhlYXBBbmFseXplciYpOwogcHVibGljOgotICAgIHN0YXRp
YyBjb25zdGV4cHIgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFn
cyB8IEpTQzo6R2V0T3duUHJvcGVydHlTbG90SXNJbXB1cmVGb3JQcm9wZXJ0eUFic2VuY2UgfCBK
U0M6OkludGVyY2VwdHNHZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4RXZlbldoZW5MZW5ndGhJc05v
dFplcm8gfCBKU0M6Ok92ZXJyaWRlc0dldE93blByb3BlcnR5TmFtZXMgfCBKU0M6Ok92ZXJyaWRl
c0dldE93blByb3BlcnR5U2xvdCB8IEpTQzo6UHJvaGliaXRzUHJvcGVydHlDYWNoaW5nOworICAg
IHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1
cmVGbGFncyB8IEpTQzo6R2V0T3duUHJvcGVydHlTbG90SXNJbXB1cmVGb3JQcm9wZXJ0eUFic2Vu
Y2UgfCBKU0M6OkludGVyY2VwdHNHZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4RXZlbldoZW5MZW5n
dGhJc05vdFplcm8gfCBKU0M6Ok92ZXJyaWRlc0dldE93blByb3BlcnR5TmFtZXMgfCBKU0M6Ok92
ZXJyaWRlc0dldE93blByb3BlcnR5U2xvdCB8IEpTQzo6T3ZlcnJpZGVzUHV0IHwgSlNDOjpQcm9o
aWJpdHNQcm9wZXJ0eUNhY2hpbmc7CiBwcm90ZWN0ZWQ6CiAgICAgSlNUZXN0TmFtZWRBbmRJbmRl
eGVkU2V0dGVyV2l0aElkZW50aWZpZXIoSlNDOjpTdHJ1Y3R1cmUqLCBKU0RPTUdsb2JhbE9iamVj
dCYsIFJlZjxUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyV2l0aElkZW50aWZpZXI+JiYpOwogCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRT
ZXR0ZXJOb0lkZW50aWZpZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZFNldHRlck5vSWRlbnRpZmllci5jcHAJKHJl
dmlzaW9uIDI3Nzk0OCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9K
Uy9KU1Rlc3ROYW1lZFNldHRlck5vSWRlbnRpZmllci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIw
NCw2ICsyMDQsOCBAQCBib29sIEpTVGVzdE5hbWVkU2V0dGVyTm9JZGVudGlmaWVyOjpwdXQoCiAg
ICAgYXV0byogdGhpc09iamVjdCA9IGpzQ2FzdDxKU1Rlc3ROYW1lZFNldHRlck5vSWRlbnRpZmll
cio+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5m
bygpKTsKIAorICAgIGlmIChVTkxJS0VMWSh0aGlzT2JqZWN0ICE9IHB1dFByb3BlcnR5U2xvdC50
aGlzVmFsdWUoKSkpCisgICAgICAgIHJldHVybiBKU09iamVjdDo6cHV0KHRoaXNPYmplY3QsIGxl
eGljYWxHbG9iYWxPYmplY3QsIHByb3BlcnR5TmFtZSwgdmFsdWUsIHB1dFByb3BlcnR5U2xvdCk7
CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRShsZXhpY2FsR2xvYmFs
T2JqZWN0LT52bSgpKTsKIAogICAgIGlmICghcHJvcGVydHlOYW1lLmlzU3ltYm9sKCkpIHsKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZFNl
dHRlck5vSWRlbnRpZmllci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZFNldHRlck5vSWRlbnRpZmllci5oCShyZXZpc2lv
biAyNzc5NDgpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNU
ZXN0TmFtZWRTZXR0ZXJOb0lkZW50aWZpZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNjQsNyArNjQs
NyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIEpTQzo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9ySW1w
bChKU0M6OlZNJiB2bSk7CiAgICAgc3RhdGljIHZvaWQgYW5hbHl6ZUhlYXAoSlNDZWxsKiwgSlND
OjpIZWFwQW5hbHl6ZXImKTsKIHB1YmxpYzoKLSAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVk
IFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxhZ3MgfCBKU0M6OkdldE93blByb3Bl
cnR5U2xvdElzSW1wdXJlRm9yUHJvcGVydHlBYnNlbmNlIHwgSlNDOjpJbnRlcmNlcHRzR2V0T3du
UHJvcGVydHlTbG90QnlJbmRleEV2ZW5XaGVuTGVuZ3RoSXNOb3RaZXJvIHwgSlNDOjpPdmVycmlk
ZXNHZXRPd25Qcm9wZXJ0eU5hbWVzIHwgSlNDOjpPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3Qg
fCBKU0M6OlByb2hpYml0c1Byb3BlcnR5Q2FjaGluZzsKKyAgICBzdGF0aWMgY29uc3RleHByIHVu
c2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxhZ3MgfCBKU0M6OkdldE93
blByb3BlcnR5U2xvdElzSW1wdXJlRm9yUHJvcGVydHlBYnNlbmNlIHwgSlNDOjpJbnRlcmNlcHRz
R2V0T3duUHJvcGVydHlTbG90QnlJbmRleEV2ZW5XaGVuTGVuZ3RoSXNOb3RaZXJvIHwgSlNDOjpP
dmVycmlkZXNHZXRPd25Qcm9wZXJ0eU5hbWVzIHwgSlNDOjpPdmVycmlkZXNHZXRPd25Qcm9wZXJ0
eVNsb3QgfCBKU0M6Ok92ZXJyaWRlc1B1dCB8IEpTQzo6UHJvaGliaXRzUHJvcGVydHlDYWNoaW5n
OwogcHJvdGVjdGVkOgogICAgIEpTVGVzdE5hbWVkU2V0dGVyTm9JZGVudGlmaWVyKEpTQzo6U3Ry
dWN0dXJlKiwgSlNET01HbG9iYWxPYmplY3QmLCBSZWY8VGVzdE5hbWVkU2V0dGVyTm9JZGVudGlm
aWVyPiYmKTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pT
L0pTVGVzdE5hbWVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb24uY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZFNldHRlclRo
cm93aW5nRXhjZXB0aW9uLmNwcAkocmV2aXNpb24gMjc3OTQ4KQorKysgU291cmNlL1dlYkNvcmUv
YmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkU2V0dGVyVGhyb3dpbmdFeGNlcHRp
b24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMDQsNiArMjA0LDggQEAgYm9vbCBKU1Rlc3ROYW1l
ZFNldHRlclRocm93aW5nRXhjZXB0aW9uOgogICAgIGF1dG8qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8
SlNUZXN0TmFtZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbio+KGNlbGwpOwogICAgIEFTU0VSVF9H
Q19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKIAorICAgIGlmIChVTkxJS0VM
WSh0aGlzT2JqZWN0ICE9IHB1dFByb3BlcnR5U2xvdC50aGlzVmFsdWUoKSkpCisgICAgICAgIHJl
dHVybiBKU09iamVjdDo6cHV0KHRoaXNPYmplY3QsIGxleGljYWxHbG9iYWxPYmplY3QsIHByb3Bl
cnR5TmFtZSwgdmFsdWUsIHB1dFByb3BlcnR5U2xvdCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0g
REVDTEFSRV9USFJPV19TQ09QRShsZXhpY2FsR2xvYmFsT2JqZWN0LT52bSgpKTsKIAogICAgIGlm
ICghcHJvcGVydHlOYW1lLmlzU3ltYm9sKCkpIHsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZFNldHRlclRocm93aW5nRXhjZXB0aW9uLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pT
VGVzdE5hbWVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb24uaAkocmV2aXNpb24gMjc3OTQ4KQorKysg
U291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkU2V0dGVy
VGhyb3dpbmdFeGNlcHRpb24uaAkod29ya2luZyBjb3B5KQpAQCAtNjQsNyArNjQsNyBAQCBwdWJs
aWM6CiAgICAgc3RhdGljIEpTQzo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9ySW1wbChKU0M6OlZN
JiB2bSk7CiAgICAgc3RhdGljIHZvaWQgYW5hbHl6ZUhlYXAoSlNDZWxsKiwgSlNDOjpIZWFwQW5h
bHl6ZXImKTsKIHB1YmxpYzoKLSAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIFN0cnVjdHVy
ZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxhZ3MgfCBKU0M6OkdldE93blByb3BlcnR5U2xvdElz
SW1wdXJlRm9yUHJvcGVydHlBYnNlbmNlIHwgSlNDOjpJbnRlcmNlcHRzR2V0T3duUHJvcGVydHlT
bG90QnlJbmRleEV2ZW5XaGVuTGVuZ3RoSXNOb3RaZXJvIHwgSlNDOjpPdmVycmlkZXNHZXRPd25Q
cm9wZXJ0eU5hbWVzIHwgSlNDOjpPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3QgfCBKU0M6OlBy
b2hpYml0c1Byb3BlcnR5Q2FjaGluZzsKKyAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIFN0
cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxhZ3MgfCBKU0M6OkdldE93blByb3BlcnR5
U2xvdElzSW1wdXJlRm9yUHJvcGVydHlBYnNlbmNlIHwgSlNDOjpJbnRlcmNlcHRzR2V0T3duUHJv
cGVydHlTbG90QnlJbmRleEV2ZW5XaGVuTGVuZ3RoSXNOb3RaZXJvIHwgSlNDOjpPdmVycmlkZXNH
ZXRPd25Qcm9wZXJ0eU5hbWVzIHwgSlNDOjpPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3QgfCBK
U0M6Ok92ZXJyaWRlc1B1dCB8IEpTQzo6UHJvaGliaXRzUHJvcGVydHlDYWNoaW5nOwogcHJvdGVj
dGVkOgogICAgIEpTVGVzdE5hbWVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb24oSlNDOjpTdHJ1Y3R1
cmUqLCBKU0RPTUdsb2JhbE9iamVjdCYsIFJlZjxUZXN0TmFtZWRTZXR0ZXJUaHJvd2luZ0V4Y2Vw
dGlvbj4mJik7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9K
Uy9KU1Rlc3ROYW1lZFNldHRlcldpdGhJZGVudGlmaWVyLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRTZXR0ZXJXaXRo
SWRlbnRpZmllci5jcHAJKHJldmlzaW9uIDI3Nzk0OCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZFNldHRlcldpdGhJZGVudGlmaWVyLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMjEyLDYgKzIxMiw4IEBAIGJvb2wgSlNUZXN0TmFtZWRTZXR0ZXJX
aXRoSWRlbnRpZmllcjo6cHUKICAgICBhdXRvKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTVGVzdE5h
bWVkU2V0dGVyV2l0aElkZW50aWZpZXIqPihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lO
SEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CiAKKyAgICBpZiAoVU5MSUtFTFkodGhpc09iamVj
dCAhPSBwdXRQcm9wZXJ0eVNsb3QudGhpc1ZhbHVlKCkpKQorICAgICAgICByZXR1cm4gSlNPYmpl
Y3Q6OnB1dCh0aGlzT2JqZWN0LCBsZXhpY2FsR2xvYmFsT2JqZWN0LCBwcm9wZXJ0eU5hbWUsIHZh
bHVlLCBwdXRQcm9wZXJ0eVNsb3QpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhS
T1dfU0NPUEUobGV4aWNhbEdsb2JhbE9iamVjdC0+dm0oKSk7CiAKICAgICBpZiAoIXByb3BlcnR5
TmFtZS5pc1N5bWJvbCgpKSB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRz
L3Rlc3QvSlMvSlNUZXN0TmFtZWRTZXR0ZXJXaXRoSWRlbnRpZmllci5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZFNldHRl
cldpdGhJZGVudGlmaWVyLmgJKHJldmlzaW9uIDI3Nzk0OCkKKysrIFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZFNldHRlcldpdGhJZGVudGlmaWVyLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTY0LDcgKzY0LDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBKU0M6
Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvckltcGwoSlNDOjpWTSYgdm0pOwogICAgIHN0YXRpYyB2
b2lkIGFuYWx5emVIZWFwKEpTQ2VsbCosIEpTQzo6SGVhcEFuYWx5emVyJik7CiBwdWJsaWM6Ci0g
ICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVj
dHVyZUZsYWdzIHwgSlNDOjpHZXRPd25Qcm9wZXJ0eVNsb3RJc0ltcHVyZUZvclByb3BlcnR5QWJz
ZW5jZSB8IEpTQzo6SW50ZXJjZXB0c0dldE93blByb3BlcnR5U2xvdEJ5SW5kZXhFdmVuV2hlbkxl
bmd0aElzTm90WmVybyB8IEpTQzo6T3ZlcnJpZGVzR2V0T3duUHJvcGVydHlOYW1lcyB8IEpTQzo6
T3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90IHwgSlNDOjpQcm9oaWJpdHNQcm9wZXJ0eUNhY2hp
bmc7CisgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6
OlN0cnVjdHVyZUZsYWdzIHwgSlNDOjpHZXRPd25Qcm9wZXJ0eVNsb3RJc0ltcHVyZUZvclByb3Bl
cnR5QWJzZW5jZSB8IEpTQzo6SW50ZXJjZXB0c0dldE93blByb3BlcnR5U2xvdEJ5SW5kZXhFdmVu
V2hlbkxlbmd0aElzTm90WmVybyB8IEpTQzo6T3ZlcnJpZGVzR2V0T3duUHJvcGVydHlOYW1lcyB8
IEpTQzo6T3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90IHwgSlNDOjpPdmVycmlkZXNQdXQgfCBK
U0M6OlByb2hpYml0c1Byb3BlcnR5Q2FjaGluZzsKIHByb3RlY3RlZDoKICAgICBKU1Rlc3ROYW1l
ZFNldHRlcldpdGhJZGVudGlmaWVyKEpTQzo6U3RydWN0dXJlKiwgSlNET01HbG9iYWxPYmplY3Qm
LCBSZWY8VGVzdE5hbWVkU2V0dGVyV2l0aElkZW50aWZpZXI+JiYpOwogCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRTZXR0ZXJXaXRoSW5k
ZXhlZEdldHRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2Ny
aXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkU2V0dGVyV2l0aEluZGV4ZWRHZXR0ZXIuY3BwCShyZXZp
c2lvbiAyNzc5NDgpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMv
SlNUZXN0TmFtZWRTZXR0ZXJXaXRoSW5kZXhlZEdldHRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTIzNiw2ICsyMzYsOCBAQCBib29sIEpTVGVzdE5hbWVkU2V0dGVyV2l0aEluZGV4ZWRHZXR0ZXI6
CiAgICAgYXV0byogdGhpc09iamVjdCA9IGpzQ2FzdDxKU1Rlc3ROYW1lZFNldHRlcldpdGhJbmRl
eGVkR2V0dGVyKj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2Jq
ZWN0LCBpbmZvKCkpOwogCisgICAgaWYgKFVOTElLRUxZKHRoaXNPYmplY3QgIT0gcHV0UHJvcGVy
dHlTbG90LnRoaXNWYWx1ZSgpKSkKKyAgICAgICAgcmV0dXJuIEpTT2JqZWN0OjpwdXQodGhpc09i
amVjdCwgbGV4aWNhbEdsb2JhbE9iamVjdCwgcHJvcGVydHlOYW1lLCB2YWx1ZSwgcHV0UHJvcGVy
dHlTbG90KTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKGxleGlj
YWxHbG9iYWxPYmplY3QtPnZtKCkpOwogCiAgICAgaWYgKCFwcm9wZXJ0eU5hbWUuaXNTeW1ib2wo
KSkgewpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVz
dE5hbWVkU2V0dGVyV2l0aEluZGV4ZWRHZXR0ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRTZXR0ZXJXaXRoSW5kZXhl
ZEdldHRlci5oCShyZXZpc2lvbiAyNzc5NDgpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRTZXR0ZXJXaXRoSW5kZXhlZEdldHRlci5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC02NCw3ICs2NCw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgSlNDOjpJc29T
dWJzcGFjZSogc3Vic3BhY2VGb3JJbXBsKEpTQzo6Vk0mIHZtKTsKICAgICBzdGF0aWMgdm9pZCBh
bmFseXplSGVhcChKU0NlbGwqLCBKU0M6OkhlYXBBbmFseXplciYpOwogcHVibGljOgotICAgIHN0
YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVG
bGFncyB8IEpTQzo6R2V0T3duUHJvcGVydHlTbG90SXNJbXB1cmVGb3JQcm9wZXJ0eUFic2VuY2Ug
fCBKU0M6OkludGVyY2VwdHNHZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4RXZlbldoZW5MZW5ndGhJ
c05vdFplcm8gfCBKU0M6Ok92ZXJyaWRlc0dldE93blByb3BlcnR5TmFtZXMgfCBKU0M6Ok92ZXJy
aWRlc0dldE93blByb3BlcnR5U2xvdCB8IEpTQzo6UHJvaGliaXRzUHJvcGVydHlDYWNoaW5nOwor
ICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1
Y3R1cmVGbGFncyB8IEpTQzo6R2V0T3duUHJvcGVydHlTbG90SXNJbXB1cmVGb3JQcm9wZXJ0eUFi
c2VuY2UgfCBKU0M6OkludGVyY2VwdHNHZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4RXZlbldoZW5M
ZW5ndGhJc05vdFplcm8gfCBKU0M6Ok92ZXJyaWRlc0dldE93blByb3BlcnR5TmFtZXMgfCBKU0M6
Ok92ZXJyaWRlc0dldE93blByb3BlcnR5U2xvdCB8IEpTQzo6T3ZlcnJpZGVzUHV0IHwgSlNDOjpQ
cm9oaWJpdHNQcm9wZXJ0eUNhY2hpbmc7CiBwcm90ZWN0ZWQ6CiAgICAgSlNUZXN0TmFtZWRTZXR0
ZXJXaXRoSW5kZXhlZEdldHRlcihKU0M6OlN0cnVjdHVyZSosIEpTRE9NR2xvYmFsT2JqZWN0Jiwg
UmVmPFRlc3ROYW1lZFNldHRlcldpdGhJbmRleGVkR2V0dGVyPiYmKTsKIApJbmRleDogU291cmNl
L1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkU2V0dGVyV2l0aElu
ZGV4ZWRHZXR0ZXJBbmRTZXR0ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZFNldHRlcldpdGhJbmRleGVkR2V0dGVy
QW5kU2V0dGVyLmNwcAkocmV2aXNpb24gMjc3OTQ4KQorKysgU291cmNlL1dlYkNvcmUvYmluZGlu
Z3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkU2V0dGVyV2l0aEluZGV4ZWRHZXR0ZXJBbmRT
ZXR0ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMzYsNiArMjM2LDggQEAgYm9vbCBKU1Rlc3RO
YW1lZFNldHRlcldpdGhJbmRleGVkR2V0dGVyQQogICAgIGF1dG8qIHRoaXNPYmplY3QgPSBqc0Nh
c3Q8SlNUZXN0TmFtZWRTZXR0ZXJXaXRoSW5kZXhlZEdldHRlckFuZFNldHRlcio+KGNlbGwpOwog
ICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKIAorICAg
IGlmIChVTkxJS0VMWSh0aGlzT2JqZWN0ICE9IHB1dFByb3BlcnR5U2xvdC50aGlzVmFsdWUoKSkp
CisgICAgICAgIHJldHVybiBKU09iamVjdDo6cHV0KHRoaXNPYmplY3QsIGxleGljYWxHbG9iYWxP
YmplY3QsIHByb3BlcnR5TmFtZSwgdmFsdWUsIHB1dFByb3BlcnR5U2xvdCk7CiAgICAgYXV0byB0
aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRShsZXhpY2FsR2xvYmFsT2JqZWN0LT52bSgp
KTsKIAogICAgIGlmIChhdXRvIGluZGV4ID0gcGFyc2VJbmRleChwcm9wZXJ0eU5hbWUpKSB7Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRT
ZXR0ZXJXaXRoSW5kZXhlZEdldHRlckFuZFNldHRlci5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZFNldHRlcldpdGhJbmRl
eGVkR2V0dGVyQW5kU2V0dGVyLmgJKHJldmlzaW9uIDI3Nzk0OCkKKysrIFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZFNldHRlcldpdGhJbmRleGVkR2V0
dGVyQW5kU2V0dGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTY0LDcgKzY0LDcgQEAgcHVibGljOgog
ICAgIHN0YXRpYyBKU0M6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvckltcGwoSlNDOjpWTSYgdm0p
OwogICAgIHN0YXRpYyB2b2lkIGFuYWx5emVIZWFwKEpTQ2VsbCosIEpTQzo6SGVhcEFuYWx5emVy
Jik7CiBwdWJsaWM6Ci0gICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFn
cyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwgSlNDOjpHZXRPd25Qcm9wZXJ0eVNsb3RJc0ltcHVy
ZUZvclByb3BlcnR5QWJzZW5jZSB8IEpTQzo6SW50ZXJjZXB0c0dldE93blByb3BlcnR5U2xvdEJ5
SW5kZXhFdmVuV2hlbkxlbmd0aElzTm90WmVybyB8IEpTQzo6T3ZlcnJpZGVzR2V0T3duUHJvcGVy
dHlOYW1lcyB8IEpTQzo6T3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90IHwgSlNDOjpQcm9oaWJp
dHNQcm9wZXJ0eUNhY2hpbmc7CisgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1
cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwgSlNDOjpHZXRPd25Qcm9wZXJ0eVNsb3RJ
c0ltcHVyZUZvclByb3BlcnR5QWJzZW5jZSB8IEpTQzo6SW50ZXJjZXB0c0dldE93blByb3BlcnR5
U2xvdEJ5SW5kZXhFdmVuV2hlbkxlbmd0aElzTm90WmVybyB8IEpTQzo6T3ZlcnJpZGVzR2V0T3du
UHJvcGVydHlOYW1lcyB8IEpTQzo6T3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90IHwgSlNDOjpP
dmVycmlkZXNQdXQgfCBKU0M6OlByb2hpYml0c1Byb3BlcnR5Q2FjaGluZzsKIHByb3RlY3RlZDoK
ICAgICBKU1Rlc3ROYW1lZFNldHRlcldpdGhJbmRleGVkR2V0dGVyQW5kU2V0dGVyKEpTQzo6U3Ry
dWN0dXJlKiwgSlNET01HbG9iYWxPYmplY3QmLCBSZWY8VGVzdE5hbWVkU2V0dGVyV2l0aEluZGV4
ZWRHZXR0ZXJBbmRTZXR0ZXI+JiYpOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRTZXR0ZXJXaXRoTGVnYWN5T3ZlcnJpZGVCdWlsdElu
cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L0pTL0pTVGVzdE5hbWVkU2V0dGVyV2l0aExlZ2FjeU92ZXJyaWRlQnVpbHRJbnMuY3BwCShyZXZp
c2lvbiAyNzc5NDgpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMv
SlNUZXN0TmFtZWRTZXR0ZXJXaXRoTGVnYWN5T3ZlcnJpZGVCdWlsdElucy5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTIwNCw2ICsyMDQsOCBAQCBib29sIEpTVGVzdE5hbWVkU2V0dGVyV2l0aExlZ2Fj
eU92ZXJyaWRlCiAgICAgYXV0byogdGhpc09iamVjdCA9IGpzQ2FzdDxKU1Rlc3ROYW1lZFNldHRl
cldpdGhMZWdhY3lPdmVycmlkZUJ1aWx0SW5zKj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVD
VF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwogCisgICAgaWYgKFVOTElLRUxZKHRoaXNP
YmplY3QgIT0gcHV0UHJvcGVydHlTbG90LnRoaXNWYWx1ZSgpKSkKKyAgICAgICAgcmV0dXJuIEpT
T2JqZWN0OjpwdXQodGhpc09iamVjdCwgbGV4aWNhbEdsb2JhbE9iamVjdCwgcHJvcGVydHlOYW1l
LCB2YWx1ZSwgcHV0UHJvcGVydHlTbG90KTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJF
X1RIUk9XX1NDT1BFKGxleGljYWxHbG9iYWxPYmplY3QtPnZtKCkpOwogCiAgICAgaWYgKCFwcm9w
ZXJ0eU5hbWUuaXNTeW1ib2woKSkgewpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2Ny
aXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkU2V0dGVyV2l0aExlZ2FjeU92ZXJyaWRlQnVpbHRJbnMu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMv
SlNUZXN0TmFtZWRTZXR0ZXJXaXRoTGVnYWN5T3ZlcnJpZGVCdWlsdElucy5oCShyZXZpc2lvbiAy
Nzc5NDgpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0
TmFtZWRTZXR0ZXJXaXRoTGVnYWN5T3ZlcnJpZGVCdWlsdElucy5oCSh3b3JraW5nIGNvcHkpCkBA
IC02NCw3ICs2NCw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgSlNDOjpJc29TdWJzcGFjZSogc3Vi
c3BhY2VGb3JJbXBsKEpTQzo6Vk0mIHZtKTsKICAgICBzdGF0aWMgdm9pZCBhbmFseXplSGVhcChK
U0NlbGwqLCBKU0M6OkhlYXBBbmFseXplciYpOwogcHVibGljOgotICAgIHN0YXRpYyBjb25zdGV4
cHIgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8IEpTQzo6
R2V0T3duUHJvcGVydHlTbG90SXNJbXB1cmUgfCBKU0M6OkludGVyY2VwdHNHZXRPd25Qcm9wZXJ0
eVNsb3RCeUluZGV4RXZlbldoZW5MZW5ndGhJc05vdFplcm8gfCBKU0M6Ok92ZXJyaWRlc0dldE93
blByb3BlcnR5TmFtZXMgfCBKU0M6Ok92ZXJyaWRlc0dldE93blByb3BlcnR5U2xvdCB8IEpTQzo6
UHJvaGliaXRzUHJvcGVydHlDYWNoaW5nOworICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQg
U3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8IEpTQzo6R2V0T3duUHJvcGVy
dHlTbG90SXNJbXB1cmUgfCBKU0M6OkludGVyY2VwdHNHZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4
RXZlbldoZW5MZW5ndGhJc05vdFplcm8gfCBKU0M6Ok92ZXJyaWRlc0dldE93blByb3BlcnR5TmFt
ZXMgfCBKU0M6Ok92ZXJyaWRlc0dldE93blByb3BlcnR5U2xvdCB8IEpTQzo6T3ZlcnJpZGVzUHV0
IHwgSlNDOjpQcm9oaWJpdHNQcm9wZXJ0eUNhY2hpbmc7CiBwcm90ZWN0ZWQ6CiAgICAgSlNUZXN0
TmFtZWRTZXR0ZXJXaXRoTGVnYWN5T3ZlcnJpZGVCdWlsdElucyhKU0M6OlN0cnVjdHVyZSosIEpT
RE9NR2xvYmFsT2JqZWN0JiwgUmVmPFRlc3ROYW1lZFNldHRlcldpdGhMZWdhY3lPdmVycmlkZUJ1
aWx0SW5zPiYmKTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L0pTL0pTVGVzdE5hbWVkU2V0dGVyV2l0aExlZ2FjeVVuZm9yZ2VhYmxlUHJvcGVydGllcy5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pT
VGVzdE5hbWVkU2V0dGVyV2l0aExlZ2FjeVVuZm9yZ2VhYmxlUHJvcGVydGllcy5jcHAJKHJldmlz
aW9uIDI3Nzk0OCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9K
U1Rlc3ROYW1lZFNldHRlcldpdGhMZWdhY3lVbmZvcmdlYWJsZVByb3BlcnRpZXMuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yMzAsNiArMjMwLDggQEAgYm9vbCBKU1Rlc3ROYW1lZFNldHRlcldpdGhM
ZWdhY3lVbmZvcmdlYQogICAgIGF1dG8qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNUZXN0TmFtZWRT
ZXR0ZXJXaXRoTGVnYWN5VW5mb3JnZWFibGVQcm9wZXJ0aWVzKj4oY2VsbCk7CiAgICAgQVNTRVJU
X0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwogCisgICAgaWYgKFVOTElL
RUxZKHRoaXNPYmplY3QgIT0gcHV0UHJvcGVydHlTbG90LnRoaXNWYWx1ZSgpKSkKKyAgICAgICAg
cmV0dXJuIEpTT2JqZWN0OjpwdXQodGhpc09iamVjdCwgbGV4aWNhbEdsb2JhbE9iamVjdCwgcHJv
cGVydHlOYW1lLCB2YWx1ZSwgcHV0UHJvcGVydHlTbG90KTsKICAgICBhdXRvIHRocm93U2NvcGUg
PSBERUNMQVJFX1RIUk9XX1NDT1BFKGxleGljYWxHbG9iYWxPYmplY3QtPnZtKCkpOwogCiAgICAg
aWYgKCFwcm9wZXJ0eU5hbWUuaXNTeW1ib2woKSkgewpJbmRleDogU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkU2V0dGVyV2l0aExlZ2FjeVVuZm9yZ2Vh
YmxlUHJvcGVydGllcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Nj
cmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZFNldHRlcldpdGhMZWdhY3lVbmZvcmdlYWJsZVByb3Bl
cnRpZXMuaAkocmV2aXNpb24gMjc3OTQ4KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2Ny
aXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkU2V0dGVyV2l0aExlZ2FjeVVuZm9yZ2VhYmxlUHJvcGVy
dGllcy5oCSh3b3JraW5nIGNvcHkpCkBAIC02NCw3ICs2NCw3IEBAIHB1YmxpYzoKICAgICBzdGF0
aWMgSlNDOjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3JJbXBsKEpTQzo6Vk0mIHZtKTsKICAgICBz
dGF0aWMgdm9pZCBhbmFseXplSGVhcChKU0NlbGwqLCBKU0M6OkhlYXBBbmFseXplciYpOwogcHVi
bGljOgotICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNl
OjpTdHJ1Y3R1cmVGbGFncyB8IEpTQzo6R2V0T3duUHJvcGVydHlTbG90SXNJbXB1cmVGb3JQcm9w
ZXJ0eUFic2VuY2UgfCBKU0M6Okhhc1N0YXRpY1Byb3BlcnR5VGFibGUgfCBKU0M6OkludGVyY2Vw
dHNHZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4RXZlbldoZW5MZW5ndGhJc05vdFplcm8gfCBKU0M6
Ok92ZXJyaWRlc0dldE93blByb3BlcnR5TmFtZXMgfCBKU0M6Ok92ZXJyaWRlc0dldE93blByb3Bl
cnR5U2xvdCB8IEpTQzo6UHJvaGliaXRzUHJvcGVydHlDYWNoaW5nOworICAgIHN0YXRpYyBjb25z
dGV4cHIgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8IEpT
Qzo6R2V0T3duUHJvcGVydHlTbG90SXNJbXB1cmVGb3JQcm9wZXJ0eUFic2VuY2UgfCBKU0M6Okhh
c1N0YXRpY1Byb3BlcnR5VGFibGUgfCBKU0M6OkludGVyY2VwdHNHZXRPd25Qcm9wZXJ0eVNsb3RC
eUluZGV4RXZlbldoZW5MZW5ndGhJc05vdFplcm8gfCBKU0M6Ok92ZXJyaWRlc0dldE93blByb3Bl
cnR5TmFtZXMgfCBKU0M6Ok92ZXJyaWRlc0dldE93blByb3BlcnR5U2xvdCB8IEpTQzo6T3ZlcnJp
ZGVzUHV0IHwgSlNDOjpQcm9oaWJpdHNQcm9wZXJ0eUNhY2hpbmc7CiBwcm90ZWN0ZWQ6CiAgICAg
SlNUZXN0TmFtZWRTZXR0ZXJXaXRoTGVnYWN5VW5mb3JnZWFibGVQcm9wZXJ0aWVzKEpTQzo6U3Ry
dWN0dXJlKiwgSlNET01HbG9iYWxPYmplY3QmLCBSZWY8VGVzdE5hbWVkU2V0dGVyV2l0aExlZ2Fj
eVVuZm9yZ2VhYmxlUHJvcGVydGllcz4mJik7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZFNldHRlcldpdGhMZWdhY3lVbmZvcmdlYWJs
ZVByb3BlcnRpZXNBbmRMZWdhY3lPdmVycmlkZUJ1aWx0SW5zLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRTZXR0ZXJX
aXRoTGVnYWN5VW5mb3JnZWFibGVQcm9wZXJ0aWVzQW5kTGVnYWN5T3ZlcnJpZGVCdWlsdElucy5j
cHAJKHJldmlzaW9uIDI3Nzk0OCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMv
dGVzdC9KUy9KU1Rlc3ROYW1lZFNldHRlcldpdGhMZWdhY3lVbmZvcmdlYWJsZVByb3BlcnRpZXNB
bmRMZWdhY3lPdmVycmlkZUJ1aWx0SW5zLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjMwLDYgKzIz
MCw4IEBAIGJvb2wgSlNUZXN0TmFtZWRTZXR0ZXJXaXRoTGVnYWN5VW5mb3JnZWEKICAgICBhdXRv
KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTVGVzdE5hbWVkU2V0dGVyV2l0aExlZ2FjeVVuZm9yZ2Vh
YmxlUHJvcGVydGllc0FuZExlZ2FjeU92ZXJyaWRlQnVpbHRJbnMqPihjZWxsKTsKICAgICBBU1NF
UlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CiAKKyAgICBpZiAoVU5M
SUtFTFkodGhpc09iamVjdCAhPSBwdXRQcm9wZXJ0eVNsb3QudGhpc1ZhbHVlKCkpKQorICAgICAg
ICByZXR1cm4gSlNPYmplY3Q6OnB1dCh0aGlzT2JqZWN0LCBsZXhpY2FsR2xvYmFsT2JqZWN0LCBw
cm9wZXJ0eU5hbWUsIHZhbHVlLCBwdXRQcm9wZXJ0eVNsb3QpOwogICAgIGF1dG8gdGhyb3dTY29w
ZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUobGV4aWNhbEdsb2JhbE9iamVjdC0+dm0oKSk7CiAKICAg
ICBpZiAoIXByb3BlcnR5TmFtZS5pc1N5bWJvbCgpKSB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRTZXR0ZXJXaXRoTGVnYWN5VW5mb3Jn
ZWFibGVQcm9wZXJ0aWVzQW5kTGVnYWN5T3ZlcnJpZGVCdWlsdElucy5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZFNldHRl
cldpdGhMZWdhY3lVbmZvcmdlYWJsZVByb3BlcnRpZXNBbmRMZWdhY3lPdmVycmlkZUJ1aWx0SW5z
LmgJKHJldmlzaW9uIDI3Nzk0OCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMv
dGVzdC9KUy9KU1Rlc3ROYW1lZFNldHRlcldpdGhMZWdhY3lVbmZvcmdlYWJsZVByb3BlcnRpZXNB
bmRMZWdhY3lPdmVycmlkZUJ1aWx0SW5zLmgJKHdvcmtpbmcgY29weSkKQEAgLTY0LDcgKzY0LDcg
QEAgcHVibGljOgogICAgIHN0YXRpYyBKU0M6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvckltcGwo
SlNDOjpWTSYgdm0pOwogICAgIHN0YXRpYyB2b2lkIGFuYWx5emVIZWFwKEpTQ2VsbCosIEpTQzo6
SGVhcEFuYWx5emVyJik7CiBwdWJsaWM6Ci0gICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBT
dHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwgSlNDOjpHZXRPd25Qcm9wZXJ0
eVNsb3RJc0ltcHVyZSB8IEpTQzo6SGFzU3RhdGljUHJvcGVydHlUYWJsZSB8IEpTQzo6SW50ZXJj
ZXB0c0dldE93blByb3BlcnR5U2xvdEJ5SW5kZXhFdmVuV2hlbkxlbmd0aElzTm90WmVybyB8IEpT
Qzo6T3ZlcnJpZGVzR2V0T3duUHJvcGVydHlOYW1lcyB8IEpTQzo6T3ZlcnJpZGVzR2V0T3duUHJv
cGVydHlTbG90IHwgSlNDOjpQcm9oaWJpdHNQcm9wZXJ0eUNhY2hpbmc7CisgICAgc3RhdGljIGNv
bnN0ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwg
SlNDOjpHZXRPd25Qcm9wZXJ0eVNsb3RJc0ltcHVyZSB8IEpTQzo6SGFzU3RhdGljUHJvcGVydHlU
YWJsZSB8IEpTQzo6SW50ZXJjZXB0c0dldE93blByb3BlcnR5U2xvdEJ5SW5kZXhFdmVuV2hlbkxl
bmd0aElzTm90WmVybyB8IEpTQzo6T3ZlcnJpZGVzR2V0T3duUHJvcGVydHlOYW1lcyB8IEpTQzo6
T3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90IHwgSlNDOjpPdmVycmlkZXNQdXQgfCBKU0M6OlBy
b2hpYml0c1Byb3BlcnR5Q2FjaGluZzsKIHByb3RlY3RlZDoKICAgICBKU1Rlc3ROYW1lZFNldHRl
cldpdGhMZWdhY3lVbmZvcmdlYWJsZVByb3BlcnRpZXNBbmRMZWdhY3lPdmVycmlkZUJ1aWx0SW5z
KEpTQzo6U3RydWN0dXJlKiwgSlNET01HbG9iYWxPYmplY3QmLCBSZWY8VGVzdE5hbWVkU2V0dGVy
V2l0aExlZ2FjeVVuZm9yZ2VhYmxlUHJvcGVydGllc0FuZExlZ2FjeU92ZXJyaWRlQnVpbHRJbnM+
JiYpOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNU
ZXN0UGx1Z2luSW50ZXJmYWNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0UGx1Z2luSW50ZXJmYWNlLmNwcAkocmV2aXNpb24g
Mjc3OTQ4KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVz
dFBsdWdpbkludGVyZmFjZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE4MSw2ICsxODEsOCBAQCBi
b29sIEpTVGVzdFBsdWdpbkludGVyZmFjZTo6cHV0KEpTQ2VsbCogCiAgICAgYXV0byogdGhpc09i
amVjdCA9IGpzQ2FzdDxKU1Rlc3RQbHVnaW5JbnRlcmZhY2UqPihjZWxsKTsKICAgICBBU1NFUlRf
R0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CiAKKyAgICBpZiAoVU5MSUtF
TFkodGhpc09iamVjdCAhPSBwdXRQcm9wZXJ0eVNsb3QudGhpc1ZhbHVlKCkpKQorICAgICAgICBy
ZXR1cm4gSlNPYmplY3Q6OnB1dCh0aGlzT2JqZWN0LCBsZXhpY2FsR2xvYmFsT2JqZWN0LCBwcm9w
ZXJ0eU5hbWUsIHZhbHVlLCBwdXRQcm9wZXJ0eVNsb3QpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9
IERFQ0xBUkVfVEhST1dfU0NPUEUobGV4aWNhbEdsb2JhbE9iamVjdC0+dm0oKSk7CiAKICAgICBi
b29sIHB1dFJlc3VsdCA9IGZhbHNlOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2Ny
aXB0cy90ZXN0L0pTL0pTVGVzdFBsdWdpbkludGVyZmFjZS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RQbHVnaW5JbnRlcmZhY2Uu
aAkocmV2aXNpb24gMjc3OTQ4KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L0pTL0pTVGVzdFBsdWdpbkludGVyZmFjZS5oCSh3b3JraW5nIGNvcHkpCkBAIC02Nyw3ICs2
Nyw3IEBAIHB1YmxpYzoKIAogICAgIHN0YXRpYyB2b2lkIGFuYWx5emVIZWFwKEpTQ2VsbCosIEpT
Qzo6SGVhcEFuYWx5emVyJik7CiBwdWJsaWM6Ci0gICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25l
ZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwgSlNDOjpJbnRlcmNlcHRz
R2V0T3duUHJvcGVydHlTbG90QnlJbmRleEV2ZW5XaGVuTGVuZ3RoSXNOb3RaZXJvIHwgSlNDOjpP
dmVycmlkZXNHZXRDYWxsRGF0YSB8IEpTQzo6T3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90IHwg
SlNDOjpQcm9oaWJpdHNQcm9wZXJ0eUNhY2hpbmc7CisgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNp
Z25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwgSlNDOjpJbnRlcmNl
cHRzR2V0T3duUHJvcGVydHlTbG90QnlJbmRleEV2ZW5XaGVuTGVuZ3RoSXNOb3RaZXJvIHwgSlND
OjpPdmVycmlkZXNHZXRDYWxsRGF0YSB8IEpTQzo6T3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90
IHwgSlNDOjpPdmVycmlkZXNQdXQgfCBKU0M6OlByb2hpYml0c1Byb3BlcnR5Q2FjaGluZzsKIHBy
b3RlY3RlZDoKICAgICBKU1Rlc3RQbHVnaW5JbnRlcmZhY2UoSlNDOjpTdHJ1Y3R1cmUqLCBKU0RP
TUdsb2JhbE9iamVjdCYsIFJlZjxUZXN0UGx1Z2luSW50ZXJmYWNlPiYmKTsKIApJbmRleDogU291
cmNlL1dlYkNvcmUvYnJpZGdlL3J1bnRpbWVfYXJyYXkuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9icmlkZ2UvcnVudGltZV9hcnJheS5oCShyZXZpc2lvbiAyNzc5NDgpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9icmlkZ2UvcnVudGltZV9hcnJheS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNSw3
ICszNSw3IEBAIG5hbWVzcGFjZSBKU0MgewogY2xhc3MgUnVudGltZUFycmF5IGZpbmFsIDogcHVi
bGljIEpTQXJyYXkgewogcHVibGljOgogICAgIHVzaW5nIEJhc2UgPSBKU0FycmF5OwotICAgIHN0
YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVG
bGFncyB8IE92ZXJyaWRlc0dldE93blByb3BlcnR5U2xvdCB8IE92ZXJyaWRlc0dldE93blByb3Bl
cnR5TmFtZXMgfCBJbnRlcmNlcHRzR2V0T3duUHJvcGVydHlTbG90QnlJbmRleEV2ZW5XaGVuTGVu
Z3RoSXNOb3RaZXJvOworICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgU3RydWN0dXJlRmxh
Z3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8IE92ZXJyaWRlc0dldE93blByb3BlcnR5U2xvdCB8
IE92ZXJyaWRlc0dldE93blByb3BlcnR5TmFtZXMgfCBPdmVycmlkZXNQdXQgfCBJbnRlcmNlcHRz
R2V0T3duUHJvcGVydHlTbG90QnlJbmRleEV2ZW5XaGVuTGVuZ3RoSXNOb3RaZXJvOwogICAgIHN0
YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0Rlc3RydWN0aW9uID0gdHJ1ZTsKIAogICAgIHRlbXBs
YXRlPHR5cGVuYW1lIENlbGxUeXBlLCBKU0M6OlN1YnNwYWNlQWNjZXNzPgpJbmRleDogU291cmNl
L1dlYkNvcmUvYnJpZGdlL3J1bnRpbWVfb2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvYnJpZGdlL3J1bnRpbWVfb2JqZWN0LmgJKHJldmlzaW9uIDI3Nzk0OCkKKysrIFNvdXJj
ZS9XZWJDb3JlL2JyaWRnZS9ydW50aW1lX29iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNyw3
ICszNyw3IEBAIEV4Y2VwdGlvbiogdGhyb3dSdW50aW1lT2JqZWN0SW52YWxpZEFjY2UKIGNsYXNz
IFdFQkNPUkVfRVhQT1JUIFJ1bnRpbWVPYmplY3QgOiBwdWJsaWMgSlNOb25GaW5hbE9iamVjdCB7
CiBwdWJsaWM6CiAgICAgdXNpbmcgQmFzZSA9IEpTTm9uRmluYWxPYmplY3Q7Ci0gICAgc3RhdGlj
IGNvbnN0ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdz
IHwgT3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90IHwgT3ZlcnJpZGVzR2V0T3duUHJvcGVydHlO
YW1lcyB8IE92ZXJyaWRlc0dldENhbGxEYXRhIHwgR2V0T3duUHJvcGVydHlTbG90TWF5QmVXcm9u
Z0Fib3V0RG9udEVudW07CisgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1cmVG
bGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwgT3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90
IHwgT3ZlcnJpZGVzR2V0T3duUHJvcGVydHlOYW1lcyB8IE92ZXJyaWRlc0dldENhbGxEYXRhIHwg
T3ZlcnJpZGVzUHV0IHwgSXNPcGFxdWVBUElPYmplY3Q7CiAgICAgc3RhdGljIGNvbnN0ZXhwciBi
b29sIG5lZWRzRGVzdHJ1Y3Rpb24gPSB0cnVlOwogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2Vs
bFR5cGUsIEpTQzo6U3Vic3BhY2VBY2Nlc3M+CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9icmlkZ2Uv
b2JqYy9vYmpjX3J1bnRpbWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9icmlkZ2Uv
b2JqYy9vYmpjX3J1bnRpbWUuaAkocmV2aXNpb24gMjc3OTQ4KQorKysgU291cmNlL1dlYkNvcmUv
YnJpZGdlL29iamMvb2JqY19ydW50aW1lLmgJKHdvcmtpbmcgY29weSkKQEAgLTkxLDcgKzkxLDcg
QEAgcHJpdmF0ZToKIGNsYXNzIE9iamNGYWxsYmFja09iamVjdEltcCBmaW5hbCA6IHB1YmxpYyBK
U0Rlc3RydWN0aWJsZU9iamVjdCB7CiBwdWJsaWM6CiAgICAgdXNpbmcgQmFzZSA9IEpTRGVzdHJ1
Y3RpYmxlT2JqZWN0OwotICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgU3RydWN0dXJlRmxh
Z3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8IE92ZXJyaWRlc0dldE93blByb3BlcnR5U2xvdCB8
IE92ZXJyaWRlc0dldENhbGxEYXRhOworICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgU3Ry
dWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8IE92ZXJyaWRlc0dldE93blByb3Bl
cnR5U2xvdCB8IE92ZXJyaWRlc0dldENhbGxEYXRhIHwgT3ZlcnJpZGVzUHV0OwogICAgIHN0YXRp
YyBjb25zdGV4cHIgYm9vbCBuZWVkc0Rlc3RydWN0aW9uID0gdHJ1ZTsKIAogICAgIHRlbXBsYXRl
PHR5cGVuYW1lIENlbGxUeXBlLCBKU0M6OlN1YnNwYWNlQWNjZXNzPgpJbmRleDogU291cmNlL1dl
YktpdC9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDI3Nzk0OCkKKysrIFNvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDMgKzEsMTIgQEAKKzIwMjEtMDUtMjQgIEFsZXhleSBTaHZheWthICA8c2h2YWlrYWxl
c2hAZ21haWwuY29tPgorCisgICAgICAgIFJlLWxhbmQgcjI3NjU5MiB3aXRoIGEgZml4IGZvciBv
cGFxdWUgQVBJIG9iamVjdHMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTIyNjE4NQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgICogV2ViUHJvY2Vzcy9QbHVnaW5zL05ldHNjYXBlL0pTTlBPYmplY3QuaDoKKwog
MjAyMS0wNS0yMyAgQ2hyaXMgRHVtZXogIDxjZHVtZXpAYXBwbGUuY29tPgogCiAgICAgICAgIE1h
a2UgQ2hlY2tlZExvY2sgdGhlIGRlZmF1bHQgTG9jawpJbmRleDogU291cmNlL1dlYktpdC9XZWJQ
cm9jZXNzL1BsdWdpbnMvTmV0c2NhcGUvSlNOUE9iamVjdC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJLaXQvV2ViUHJvY2Vzcy9QbHVnaW5zL05ldHNjYXBlL0pTTlBPYmplY3QuaAkocmV2aXNp
b24gMjc3OTQ4KQorKysgU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1BsdWdpbnMvTmV0c2NhcGUv
SlNOUE9iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC00NCw3ICs0NCw3IEBAIGNsYXNzIE5QUnVu
dGltZU9iamVjdE1hcDsKIGNsYXNzIEpTTlBPYmplY3QgZmluYWwgOiBwdWJsaWMgSlNDOjpKU0Rl
c3RydWN0aWJsZU9iamVjdCB7CiBwdWJsaWM6CiAgICAgdXNpbmcgQmFzZSA9IEpTQzo6SlNEZXN0
cnVjdGlibGVPYmplY3Q7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1cmVG
bGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwgSlNDOjpPdmVycmlkZXNHZXRPd25Qcm9wZXJ0
eVNsb3QgfCBKU0M6Ok92ZXJyaWRlc0dldE93blByb3BlcnR5TmFtZXMgfCBKU0M6Ok92ZXJyaWRl
c0dldENhbGxEYXRhIHwgSlNDOjpHZXRPd25Qcm9wZXJ0eVNsb3RNYXlCZVdyb25nQWJvdXREb250
RW51bTsKKyAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFz
ZTo6U3RydWN0dXJlRmxhZ3MgfCBKU0M6Ok92ZXJyaWRlc0dldE93blByb3BlcnR5U2xvdCB8IEpT
Qzo6T3ZlcnJpZGVzR2V0T3duUHJvcGVydHlOYW1lcyB8IEpTQzo6T3ZlcnJpZGVzR2V0Q2FsbERh
dGEgfCBKU0M6Ok92ZXJyaWRlc1B1dCB8IEpTQzo6SXNPcGFxdWVBUElPYmplY3Q7CiAKICAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBDZWxsVHlwZSwgSlNDOjpTdWJzcGFjZUFjY2Vzcz4KICAgICBzdGF0
aWMgSlNDOjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoSlNDOjpWTSYgdm0pCkluZGV4OiBMYXlv
dXRUZXN0cy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCShy
ZXZpc2lvbiAyNzc5NDgpCisrKyBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkK
QEAgLTEsMyArMSwxNSBAQAorMjAyMS0wNS0yNCAgQWxleGV5IFNodmF5a2EgIDxzaHZhaWthbGVz
aEBnbWFpbC5jb20+CisKKyAgICAgICAgUmUtbGFuZCByMjc2NTkyIHdpdGggYSBmaXggZm9yIG9w
YXF1ZSBBUEkgb2JqZWN0cworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MjI2MTg1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgKiBodHRwL3Rlc3RzL3NlY3VyaXR5L2Nyb3NzLWZyYW1lLWFjY2Vzcy1vYmplY3Qt
Z2V0UHJvdG90eXBlT2YtaW4tcHV0LWV4cGVjdGVkLnR4dDoKKyAgICAgICAgKiBodHRwL3Rlc3Rz
L3NlY3VyaXR5L2Nyb3NzLWZyYW1lLWFjY2Vzcy1vYmplY3QtZ2V0UHJvdG90eXBlT2YtaW4tcHV0
Lmh0bWw6CisgICAgICAgICoganMvZG9tL3JlZmxlY3Qtc2V0LW9udG8tZG9tLWV4cGVjdGVkLnR4
dDoKKyAgICAgICAgKiBqcy9kb20vc2NyaXB0LXRlc3RzL3JlZmxlY3Qtc2V0LW9udG8tZG9tLmpz
OgorCiAyMDIxLTA1LTI0ICBGdWppaSBIaXJvbm9yaSAgPEhpcm9ub3JpLkZ1amlpQHNvbnkuY29t
PgogCiAgICAgICAgIFtXaW5DYWlyb10gVW5yZXZpZXdlZCB0ZXN0IGdhcmRlbmluZwpJbmRleDog
TGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9zZWN1cml0eS9jcm9zcy1mcmFtZS1hY2Nlc3Mtb2JqZWN0
LWdldFByb3RvdHlwZU9mLWluLXB1dC1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0
VGVzdHMvaHR0cC90ZXN0cy9zZWN1cml0eS9jcm9zcy1mcmFtZS1hY2Nlc3Mtb2JqZWN0LWdldFBy
b3RvdHlwZU9mLWluLXB1dC1leHBlY3RlZC50eHQJKHJldmlzaW9uIDI3Nzk0OCkKKysrIExheW91
dFRlc3RzL2h0dHAvdGVzdHMvc2VjdXJpdHkvY3Jvc3MtZnJhbWUtYWNjZXNzLW9iamVjdC1nZXRQ
cm90b3R5cGVPZi1pbi1wdXQtZXhwZWN0ZWQudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEs
NyBAQAogVGhpcyB0ZXN0cyB0aGF0IHlvdSBjYW4ndCBnZXQgdGhlIHByb3RvdHlwZSBvZiB0aGUg
d2luZG93IGR1cmluZyBbW1B1dF1dIG9wZXJhdGlvbi4KIAorUEFTUyBhcnJheS5jb2NvYSA9IGNv
Y29hVmFsdWUgdGhyZXcgZXhjZXB0aW9uIFNlY3VyaXR5RXJyb3I6IEJsb2NrZWQgYSBmcmFtZSB3
aXRoIG9yaWdpbiAiaHR0cDovLzEyNy4wLjAuMTo4MDAwIiBmcm9tIGFjY2Vzc2luZyBhIGNyb3Nz
LW9yaWdpbiBmcmFtZS4gUHJvdG9jb2xzLCBkb21haW5zLCBhbmQgcG9ydHMgbXVzdCBtYXRjaC4u
CitQQVNTICdzdHInLmNvY29hID0gY29jb2FWYWx1ZSB0aHJldyBleGNlcHRpb24gU2VjdXJpdHlF
cnJvcjogQmxvY2tlZCBhIGZyYW1lIHdpdGggb3JpZ2luICJodHRwOi8vMTI3LjAuMC4xOjgwMDAi
IGZyb20gYWNjZXNzaW5nIGEgY3Jvc3Mtb3JpZ2luIGZyYW1lLiBQcm90b2NvbHMsIGRvbWFpbnMs
IGFuZCBwb3J0cyBtdXN0IG1hdGNoLi4KIFBBU1M6IHN1Y2Nlc3NmdWxseVBhcnNlZCBzaG91bGQg
YmUgJ3RydWUnIGFuZCBpcy4KIAogVEVTVCBDT01QTEVURQpJbmRleDogTGF5b3V0VGVzdHMvaHR0
cC90ZXN0cy9zZWN1cml0eS9jcm9zcy1mcmFtZS1hY2Nlc3Mtb2JqZWN0LWdldFByb3RvdHlwZU9m
LWluLXB1dC5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2h0dHAvdGVzdHMvc2VjdXJp
dHkvY3Jvc3MtZnJhbWUtYWNjZXNzLW9iamVjdC1nZXRQcm90b3R5cGVPZi1pbi1wdXQuaHRtbAko
cmV2aXNpb24gMjc3OTQ4KQorKysgTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9zZWN1cml0eS9jcm9z
cy1mcmFtZS1hY2Nlc3Mtb2JqZWN0LWdldFByb3RvdHlwZU9mLWluLXB1dC5odG1sCSh3b3JraW5n
IGNvcHkpCkBAIC0xNSw3ICsxNSw3IEBACiAgICAgICAgIGRvVGVzdCA9IGZ1bmN0aW9uKCkKICAg
ICAgICAgewogICAgICAgICAgICAgdGFyZ2V0V2luZG93ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5
SWQoInRhcmdldCIpLmNvbnRlbnRXaW5kb3c7Ci0gICAgICAgICAgICB2YXIgYXJyYXkgPSBbXTsK
KyAgICAgICAgICAgIGFycmF5ID0gW107CiAgICAgICAgICAgICBhcnJheS5fX3Byb3RvX18uX19w
cm90b19fID0gdGFyZ2V0V2luZG93OwogICAgICAgICAgICAgYXJyYXlbMF0gPSAxMS4xMTsKICAg
ICAgICAgICAgIGFycmF5WzJdID0gMjIuMjI7CkBAIC0yNCwxMSArMjQsMTUgQEAKICAgICAgICAg
ICAgICAgICAgICAgdGVzdEZhaWxlZCgidG9TdHJpbmcgaXMgY2FsbGVkIGJ5IDEwMTAxMDEwIHNl
dHRlciIpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH07Ci0gICAgICAgICAgICBh
cnJheVsiY29jb2EiXSA9IHsKKyAgICAgICAgICAgIGNvY29hVmFsdWUgPSB7CiAgICAgICAgICAg
ICAgICAgdG9TdHJpbmcoKSB7CiAgICAgICAgICAgICAgICAgICAgIHRlc3RGYWlsZWQoInRvU3Ry
aW5nIGlzIGNhbGxlZCBieSBjb2NvYSBzZXR0ZXIiKTsKICAgICAgICAgICAgICAgICB9CiAgICAg
ICAgICAgICB9OworICAgICAgICAgICAgc2hvdWxkVGhyb3dFcnJvck5hbWUoImFycmF5LmNvY29h
ID0gY29jb2FWYWx1ZSIsICJTZWN1cml0eUVycm9yIik7CisKKyAgICAgICAgICAgIE9iamVjdC5z
ZXRQcm90b3R5cGVPZihTdHJpbmcucHJvdG90eXBlLCB0YXJnZXRXaW5kb3cpOworICAgICAgICAg
ICAgc2hvdWxkVGhyb3dFcnJvck5hbWUoIidzdHInLmNvY29hID0gY29jb2FWYWx1ZSIsICJTZWN1
cml0eUVycm9yIik7CiAgICAgICAgICAgICBmaW5pc2hKU1Rlc3QoKTsKICAgICAgICAgfQogICAg
IDwvc2NyaXB0PgpJbmRleDogTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL0NoYW5nZUxvZwo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9pbXBvcnRlZC93M2MvQ2hhbmdlTG9nCShyZXZpc2lvbiAy
Nzc5NDgpCisrKyBMYXlvdXRUZXN0cy9pbXBvcnRlZC93M2MvQ2hhbmdlTG9nCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDMgKzEsMTYgQEAKKzIwMjEtMDUtMjQgIEFsZXhleSBTaHZheWthICA8c2h2YWlr
YWxlc2hAZ21haWwuY29tPgorCisgICAgICAgIFJlLWxhbmQgcjI3NjU5MiB3aXRoIGEgZml4IGZv
ciBvcGFxdWUgQVBJIG9iamVjdHMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTIyNjE4NQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgICogd2ViLXBsYXRmb3JtLXRlc3RzL1dlYklETC9lY21hc2NyaXB0LWJpbmRp
bmcvZ2xvYmFsLW9iamVjdC1pbXBsaWNpdC10aGlzLXZhbHVlLmFueS1leHBlY3RlZC50eHQ6Cisg
ICAgICAgICogd2ViLXBsYXRmb3JtLXRlc3RzL1dlYklETC9lY21hc2NyaXB0LWJpbmRpbmcvaW50
ZXJmYWNlLW9iamVjdC1zZXQtcmVjZWl2ZXItZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAg
KiB3ZWItcGxhdGZvcm0tdGVzdHMvV2ViSURML2VjbWFzY3JpcHQtYmluZGluZy9pbnRlcmZhY2Ut
b2JqZWN0LXNldC1yZWNlaXZlci5odG1sOiBBZGRlZC4KKyAgICAgICAgKiB3ZWItcGxhdGZvcm0t
dGVzdHMvV2ViSURML2VjbWFzY3JpcHQtYmluZGluZy9pbnRlcmZhY2UtcHJvdG90eXBlLWNvbnN0
cnVjdG9yLXNldC1yZWNlaXZlci1leHBlY3RlZC50eHQ6CisgICAgICAgICogd2ViLXBsYXRmb3Jt
LXRlc3RzL1dlYklETC9lY21hc2NyaXB0LWJpbmRpbmcvaW50ZXJmYWNlLXByb3RvdHlwZS1jb25z
dHJ1Y3Rvci1zZXQtcmVjZWl2ZXIuaHRtbDoKKwogMjAyMS0wNS0yMSAgUm9iIEJ1aXMgIDxyYnVp
c0BpZ2FsaWEuY29tPgogCiAgICAgICAgIGdyaWQgdHJhY2sgc2l6ZSBzaG91bGQgcmVqZWN0IHVu
aXRsZXNzIGxlbmd0aApJbmRleDogTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9y
bS10ZXN0cy9XZWJJREwvZWNtYXNjcmlwdC1iaW5kaW5nL2dsb2JhbC1vYmplY3QtaW1wbGljaXQt
dGhpcy12YWx1ZS5hbnktZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2lt
cG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvV2ViSURML2VjbWFzY3JpcHQtYmluZGluZy9n
bG9iYWwtb2JqZWN0LWltcGxpY2l0LXRoaXMtdmFsdWUuYW55LWV4cGVjdGVkLnR4dAkocmV2aXNp
b24gMjc3OTQ4KQorKysgTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0
cy9XZWJJREwvZWNtYXNjcmlwdC1iaW5kaW5nL2dsb2JhbC1vYmplY3QtaW1wbGljaXQtdGhpcy12
YWx1ZS5hbnktZXhwZWN0ZWQudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNiBAQAogCiBQ
QVNTIEdsb2JhbCBvYmplY3QncyBnZXR0ZXIgdGhyb3dzIHdoZW4gY2FsbGVkIG9uIGluY29tcGF0
aWJsZSBvYmplY3QKLUZBSUwgR2xvYmFsIG9iamVjdCdzIHNldHRlciB0aHJvd3Mgd2hlbiBjYWxs
ZWQgb24gaW5jb21wYXRpYmxlIG9iamVjdCBhc3NlcnRfdGhyb3dzX2pzOiBmdW5jdGlvbiAiKCkg
PT4geyBPYmplY3QuY3JlYXRlKGdsb2JhbFRoaXMpLm9yaWdpbiA9IG9yaWdpbjsgfSIgZGlkIG5v
dCB0aHJvdworUEFTUyBHbG9iYWwgb2JqZWN0J3Mgc2V0dGVyIHRocm93cyB3aGVuIGNhbGxlZCBv
biBpbmNvbXBhdGlibGUgb2JqZWN0CiBQQVNTIEdsb2JhbCBvYmplY3QncyBvcGVyYXRpb24gdGhy
b3dzIHdoZW4gY2FsbGVkIG9uIGluY29tcGF0aWJsZSBvYmplY3QKIFBBU1MgR2xvYmFsIG9iamVj
dCdzIGdldHRlciB0aHJvd3Mgd2hlbiBjYWxsZWQgb24gaW5jb21wYXRpYmxlIG9iamVjdCAoZG9j
dW1lbnQuYWxsKQogUEFTUyBHbG9iYWwgb2JqZWN0J3Mgc2V0dGVyIHRocm93cyB3aGVuIGNhbGxl
ZCBvbiBpbmNvbXBhdGlibGUgb2JqZWN0IChkb2N1bWVudC5hbGwpCkluZGV4OiBMYXlvdXRUZXN0
cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL1dlYklETC9lY21hc2NyaXB0LWJpbmRp
bmcvaW50ZXJmYWNlLW9iamVjdC1zZXQtcmVjZWl2ZXItZXhwZWN0ZWQudHh0Cj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIExheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvV2ViSURML2Vj
bWFzY3JpcHQtYmluZGluZy9pbnRlcmZhY2Utb2JqZWN0LXNldC1yZWNlaXZlci1leHBlY3RlZC50
eHQJKG5vbmV4aXN0ZW50KQorKysgTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9y
bS10ZXN0cy9XZWJJREwvZWNtYXNjcmlwdC1iaW5kaW5nL2ludGVyZmFjZS1vYmplY3Qtc2V0LXJl
Y2VpdmVyLWV4cGVjdGVkLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQgQEAKKworUEFT
UyBEaXJlY3QgW1tTZXRdXSBwcmVzZXJ2ZXMgW1tFbnVtZXJhYmxlXV06IGZhbHNlIHByb3BlcnR5
IGF0dHJpYnV0ZQorUEFTUyBQcm90b3R5cGUgY2hhaW4gW1tTZXRdXSBjcmVhdGVzIHByb3BlcnR5
IG9uIHJlY2VpdmVyCisKSW5kZXg6IExheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZv
cm0tdGVzdHMvV2ViSURML2VjbWFzY3JpcHQtYmluZGluZy9pbnRlcmZhY2Utb2JqZWN0LXNldC1y
ZWNlaXZlci5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWIt
cGxhdGZvcm0tdGVzdHMvV2ViSURML2VjbWFzY3JpcHQtYmluZGluZy9pbnRlcmZhY2Utb2JqZWN0
LXNldC1yZWNlaXZlci5odG1sCShub25leGlzdGVudCkKKysrIExheW91dFRlc3RzL2ltcG9ydGVk
L3czYy93ZWItcGxhdGZvcm0tdGVzdHMvV2ViSURML2VjbWFzY3JpcHQtYmluZGluZy9pbnRlcmZh
Y2Utb2JqZWN0LXNldC1yZWNlaXZlci5odG1sCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMzcg
QEAKKzwhRE9DVFlQRSBodG1sPgorPG1ldGEgY2hhcnNldD0idXRmLTgiPgorPHRpdGxlPndpbmRv
dy5JbnRlcmZhY2UgaXMgZGVmaW5lZCBvbiBbW1NldF1dIHJlY2VpdmVyPC90aXRsZT4KKzxsaW5r
IHJlbD0iaGVscCIgaHJlZj0iaHR0cHM6Ly9oZXljYW0uZ2l0aHViLmlvL3dlYmlkbC8jZGVmaW5l
LXRoZS1nbG9iYWwtcHJvcGVydHktcmVmZXJlbmNlcyI+Cis8c2NyaXB0IHNyYz0iL3Jlc291cmNl
cy90ZXN0aGFybmVzcy5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iL3Jlc291cmNlcy90ZXN0
aGFybmVzc3JlcG9ydC5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0PgorInVzZSBzdHJpY3QiOworY29u
c3QgdGVzdFZhbHVlID0gT2JqZWN0LmZyZWV6ZShmdW5jdGlvbigpIHt9KTsKKwordGVzdCgoKSA9
PiB7CisgIHdpbmRvdy5XaW5kb3cgPSB0ZXN0VmFsdWU7CisgIGFzc2VydF9mYWxzZSh3aW5kb3cu
cHJvcGVydHlJc0VudW1lcmFibGUoIldpbmRvdyIpKTsKKworICB3aW5kb3cuSGlzdG9yeSA9IHRl
c3RWYWx1ZTsKKyAgYXNzZXJ0X2ZhbHNlKHdpbmRvdy5wcm9wZXJ0eUlzRW51bWVyYWJsZSgiSGlz
dG9yeSIpKTsKKworICB3aW5kb3cuSFRNTERpdkVsZW1lbnQgPSB0ZXN0VmFsdWU7CisgIGFzc2Vy
dF9mYWxzZSh3aW5kb3cucHJvcGVydHlJc0VudW1lcmFibGUoIkhUTUxEaXZFbGVtZW50IikpCit9
LCAiRGlyZWN0IFtbU2V0XV0gcHJlc2VydmVzIFtbRW51bWVyYWJsZV1dOiBmYWxzZSBwcm9wZXJ0
eSBhdHRyaWJ1dGUiKTsKKwordGVzdCgoKSA9PiB7CisgIGNvbnN0IGhlaXIgPSBPYmplY3QuY3Jl
YXRlKHdpbmRvdyk7CisKKyAgaGVpci5Mb2NhdGlvbiA9IHRlc3RWYWx1ZTsKKyAgYXNzZXJ0X2Vx
dWFscyhoZWlyLkxvY2F0aW9uLCB0ZXN0VmFsdWUpOworICBhc3NlcnRfbm90X2VxdWFscyh3aW5k
b3cuTG9jYXRpb24sIHRlc3RWYWx1ZSk7CisKKyAgaGVpci5IVE1MRG9jdW1lbnQgPSB0ZXN0VmFs
dWU7CisgIGFzc2VydF9lcXVhbHMoaGVpci5IVE1MRG9jdW1lbnQsIHRlc3RWYWx1ZSk7CisgIGFz
c2VydF9ub3RfZXF1YWxzKHdpbmRvdy5IVE1MRG9jdW1lbnQsIHRlc3RWYWx1ZSk7CisKKyAgaGVp
ci5IVE1MUHJlRWxlbWVudCA9IHRlc3RWYWx1ZTsKKyAgYXNzZXJ0X2VxdWFscyhoZWlyLkhUTUxQ
cmVFbGVtZW50LCB0ZXN0VmFsdWUpOworICBhc3NlcnRfbm90X2VxdWFscyh3aW5kb3cuSFRNTFBy
ZUVsZW1lbnQsIHRlc3RWYWx1ZSk7Cit9LCAiUHJvdG90eXBlIGNoYWluIFtbU2V0XV0gY3JlYXRl
cyBwcm9wZXJ0eSBvbiByZWNlaXZlciIpOworPC9zY3JpcHQ+CkluZGV4OiBMYXlvdXRUZXN0cy9p
bXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL1dlYklETC9lY21hc2NyaXB0LWJpbmRpbmcv
aW50ZXJmYWNlLXByb3RvdHlwZS1jb25zdHJ1Y3Rvci1zZXQtcmVjZWl2ZXItZXhwZWN0ZWQudHh0
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVz
dHMvV2ViSURML2VjbWFzY3JpcHQtYmluZGluZy9pbnRlcmZhY2UtcHJvdG90eXBlLWNvbnN0cnVj
dG9yLXNldC1yZWNlaXZlci1leHBlY3RlZC50eHQJKHJldmlzaW9uIDI3Nzk0OCkKKysrIExheW91
dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvV2ViSURML2VjbWFzY3JpcHQt
YmluZGluZy9pbnRlcmZhY2UtcHJvdG90eXBlLWNvbnN0cnVjdG9yLXNldC1yZWNlaXZlci1leHBl
Y3RlZC50eHQJKHdvcmtpbmcgY29weSkKQEAgLTEsNCArMSw0IEBACiAKLVBBU1MgV2luZG93LCBM
b2NhdGlvbiwgTmF2aWdhdG9yLCBIVE1MRG9jdW1lbnQsIGFuZCBIVE1MSGVhZEVsZW1lbnQKLVBB
U1MgQWxsIHdpbmRvdy4qIGNvbnN0cnVjdG9ycworUEFTUyBEaXJlY3QgW1tTZXRdXSBwcmVzZXJ2
ZXMgW1tFbnVtZXJhYmxlXV06IGZhbHNlIHByb3BlcnR5IGF0dHJpYnV0ZQorUEFTUyBQcm90b3R5
cGUgY2hhaW4gW1tTZXRdXSBjcmVhdGVzIHByb3BlcnR5IG9uIHJlY2VpdmVyCiAKSW5kZXg6IExh
eW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvV2ViSURML2VjbWFzY3Jp
cHQtYmluZGluZy9pbnRlcmZhY2UtcHJvdG90eXBlLWNvbnN0cnVjdG9yLXNldC1yZWNlaXZlci5o
dG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0t
dGVzdHMvV2ViSURML2VjbWFzY3JpcHQtYmluZGluZy9pbnRlcmZhY2UtcHJvdG90eXBlLWNvbnN0
cnVjdG9yLXNldC1yZWNlaXZlci5odG1sCShyZXZpc2lvbiAyNzc5NDgpCisrKyBMYXlvdXRUZXN0
cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL1dlYklETC9lY21hc2NyaXB0LWJpbmRp
bmcvaW50ZXJmYWNlLXByb3RvdHlwZS1jb25zdHJ1Y3Rvci1zZXQtcmVjZWl2ZXIuaHRtbAkod29y
a2luZyBjb3B5KQpAQCAtNiw0MiArNiwzMSBAQAogPHNjcmlwdCBzcmM9Ii9yZXNvdXJjZXMvdGVz
dGhhcm5lc3NyZXBvcnQuanMiPjwvc2NyaXB0PgogPHNjcmlwdD4KICJ1c2Ugc3RyaWN0IjsKK2Nv
bnN0IHRlc3RWYWx1ZSA9IE9iamVjdC5mcmVlemUoZnVuY3Rpb24oKSB7fSk7CiAKIHRlc3QoKCkg
PT4gewotICB3aW5kb3cuY29uc3RydWN0b3IgPSBudWxsOwotICBhc3NlcnRfZXF1YWxzKFdpbmRv
dy5wcm90b3R5cGUuY29uc3RydWN0b3IsIFdpbmRvdyk7Ci0KLSAgbG9jYXRpb24uY29uc3RydWN0
b3IgPSBmYWxzZTsKLSAgYXNzZXJ0X2VxdWFscyhMb2NhdGlvbi5wcm90b3R5cGUuY29uc3RydWN0
b3IsIExvY2F0aW9uKTsKLQotICBuYXZpZ2F0b3IuY29uc3RydWN0b3IgPSAxOwotICBhc3NlcnRf
ZXF1YWxzKE5hdmlnYXRvci5wcm90b3R5cGUuY29uc3RydWN0b3IsIE5hdmlnYXRvcik7CisgIExv
Y2F0aW9uLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IHRlc3RWYWx1ZTsKKyAgYXNzZXJ0X2ZhbHNl
KExvY2F0aW9uLnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZSgiY29uc3RydWN0b3IiKSk7
CiAKLSAgZG9jdW1lbnQuY29uc3RydWN0b3IgPSB7fTsKLSAgYXNzZXJ0X2VxdWFscyhIVE1MRG9j
dW1lbnQucHJvdG90eXBlLmNvbnN0cnVjdG9yLCBIVE1MRG9jdW1lbnQpOworICBIVE1MRG9jdW1l
bnQucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gdGVzdFZhbHVlOworICBhc3NlcnRfZmFsc2UoSFRN
TERvY3VtZW50LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZSgiY29uc3RydWN0b3IiKSk7
CiAKLSAgZG9jdW1lbnQuaGVhZC5jb25zdHJ1Y3RvciA9IFtdOwotICBhc3NlcnRfZXF1YWxzKEhU
TUxIZWFkRWxlbWVudC5wcm90b3R5cGUuY29uc3RydWN0b3IsIEhUTUxIZWFkRWxlbWVudCk7Ci19
LCAiV2luZG93LCBMb2NhdGlvbiwgTmF2aWdhdG9yLCBIVE1MRG9jdW1lbnQsIGFuZCBIVE1MSGVh
ZEVsZW1lbnQiKTsKKyAgSFRNTERpdkVsZW1lbnQucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gdGVz
dFZhbHVlOworICBhc3NlcnRfZmFsc2UoSFRNTERpdkVsZW1lbnQucHJvdG90eXBlLnByb3BlcnR5
SXNFbnVtZXJhYmxlKCJjb25zdHJ1Y3RvciIpKTsKK30sICJEaXJlY3QgW1tTZXRdXSBwcmVzZXJ2
ZXMgW1tFbnVtZXJhYmxlXV06IGZhbHNlIHByb3BlcnR5IGF0dHJpYnV0ZSIpOwogCiB0ZXN0KCgp
ID0+IHsKLSAgZm9yIChsZXQga2V5IG9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHdpbmRv
dykpIHsKLSAgICBpZiAoIS9eW0EtWl0vLnRlc3Qoa2V5KSkgY29udGludWU7CisgIHdpbmRvdy5j
b25zdHJ1Y3RvciA9IHRlc3RWYWx1ZTsKKyAgYXNzZXJ0X2VxdWFscyh3aW5kb3cuY29uc3RydWN0
b3IsIHRlc3RWYWx1ZSk7CisgIGFzc2VydF9lcXVhbHMoV2luZG93LnByb3RvdHlwZS5jb25zdHJ1
Y3RvciwgV2luZG93KTsKKworICBuYXZpZ2F0b3IuY29uc3RydWN0b3IgPSB0ZXN0VmFsdWU7Cisg
IGFzc2VydF9lcXVhbHMobmF2aWdhdG9yLmNvbnN0cnVjdG9yLCB0ZXN0VmFsdWUpOworICBhc3Nl
cnRfZXF1YWxzKE5hdmlnYXRvci5wcm90b3R5cGUuY29uc3RydWN0b3IsIE5hdmlnYXRvcik7CiAK
LSAgICBsZXQgZGVzYyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iod2luZG93LCBr
ZXkpOwotICAgIGlmICghZGVzYyB8fCBkZXNjLmVudW1lcmFibGUpIGNvbnRpbnVlOwotICAgIGxl
dCB7dmFsdWV9ID0gZGVzYzsKLSAgICBpZiAodHlwZW9mIHZhbHVlICE9PSAiZnVuY3Rpb24iKSBj
b250aW51ZTsKLSAgICBsZXQge3Byb3RvdHlwZX0gPSB2YWx1ZTsKLSAgICBpZiAoIXByb3RvdHlw
ZSkgY29udGludWU7Ci0KLSAgICBsZXQgaGVpciA9IE9iamVjdC5jcmVhdGUocHJvdG90eXBlKTsK
LSAgICBsZXQgbmV3Q29uc3RydWN0b3IgPSBmdW5jdGlvbigpIHt9OwotICAgIGhlaXIuY29uc3Ry
dWN0b3IgPSBuZXdDb25zdHJ1Y3RvcjsKLQotICAgIGFzc2VydF9ub3RfZXF1YWxzKHByb3RvdHlw
ZS5jb25zdHJ1Y3RvciwgbmV3Q29uc3RydWN0b3IsIGtleSk7Ci0gICAgYXNzZXJ0X293bl9wcm9w
ZXJ0eShoZWlyLCAiY29uc3RydWN0b3IiLCBrZXkpOwotICAgIGFzc2VydF9lcXVhbHMoaGVpci5j
b25zdHJ1Y3RvciwgbmV3Q29uc3RydWN0b3IsIGtleSk7Ci0gIH0KLX0sICJBbGwgd2luZG93Liog
Y29uc3RydWN0b3JzIik7CisgIGNvbnN0IHNwYW4gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJz
cGFuIik7CisgIHNwYW4uY29uc3RydWN0b3IgPSB0ZXN0VmFsdWU7CisgIGFzc2VydF9lcXVhbHMo
c3Bhbi5jb25zdHJ1Y3RvciwgdGVzdFZhbHVlKTsKKyAgYXNzZXJ0X2VxdWFscyhIVE1MU3BhbkVs
ZW1lbnQucHJvdG90eXBlLmNvbnN0cnVjdG9yLCBIVE1MU3BhbkVsZW1lbnQpOworfSwgIlByb3Rv
dHlwZSBjaGFpbiBbW1NldF1dIGNyZWF0ZXMgcHJvcGVydHkgb24gcmVjZWl2ZXIiKTsKIDwvc2Ny
aXB0PgpJbmRleDogTGF5b3V0VGVzdHMvanMvZG9tL3JlZmxlY3Qtc2V0LW9udG8tZG9tLWV4cGVj
dGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9qcy9kb20vcmVmbGVjdC1zZXQtb250
by1kb20tZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAyNzc5NDgpCisrKyBMYXlvdXRUZXN0cy9qcy9k
b20vcmVmbGVjdC1zZXQtb250by1kb20tZXhwZWN0ZWQudHh0CSh3b3JraW5nIGNvcHkpCkBAIC05
MywxMyArOTMsMTMgQEAgUEFTUyBSZWZsZWN0LmdldChkb2N1bWVudC5ib2R5LmRhdGFzZXQsIAog
UEFTUyBSZWZsZWN0LnNldChkb2N1bWVudC5ib2R5LmRhdGFzZXQsICJjb2NvYS1jYXBwdWNjaW5v
IiwgInN3ZWV0IikgdGhyZXcgZXhjZXB0aW9uIFN5bnRheEVycm9yOiBUaGUgc3RyaW5nIGRpZCBu
b3QgbWF0Y2ggdGhlIGV4cGVjdGVkIHBhdHRlcm4uLgogUEFTUyBSZWZsZWN0LnNldChkb2N1bWVu
dC5ib2R5LmRhdGFzZXQsIDAsICJzd2VldCIpIGlzIHRydWUKIFBBU1MgUmVmbGVjdC5nZXQoZG9j
dW1lbnQuYm9keS5kYXRhc2V0LCAwKSBpcyAic3dlZXQiCi1ET01TdHJpbmdNYXAgaWdub3JlcyB0
aGUgcmVjZWl2ZXIuIFRoZXNlIHB1dERlbGVnYXRlIG9ubHkgd29yayB3aXRoIDo6cHV0IChub3Qg
OjpkZWZpbmVPd25Qcm9wZXJ0eSkuIFNvIHRoZXkgYmVoYXZlIGFzIHRoZSBzcGVjaWFsIHNldHRl
ciwgd2Ugc2hvdWxkIG5vdCBmYWxsYmFjayB0byB0aGUgT3JkaW5hcnlTZXQuCitET01TdHJpbmdN
YXAgZmFsbHMgYmFjayB0byBPcmRpbmFyeVNldCBpZiByZWNlaXZlciBpcyBhbHRlcmVkLgogUEFT
UyBSZWZsZWN0LnNldChkb2N1bWVudC5ib2R5LmRhdGFzZXQsICJjb2NvYSIsICJvayIsIHJlY2Vp
dmVyKSBpcyB0cnVlCi1QQVNTIFJlZmxlY3QuZ2V0KGRvY3VtZW50LmJvZHkuZGF0YXNldCwgImNv
Y29hIikgaXMgIm9rIgotUEFTUyBSZWZsZWN0LmdldChyZWNlaXZlciwgImNvY29hIikgaXMgdW5k
ZWZpbmVkCitQQVNTIFJlZmxlY3QuZ2V0KGRvY3VtZW50LmJvZHkuZGF0YXNldCwgImNvY29hIikg
aXMgInN3ZWV0IgorUEFTUyBSZWZsZWN0LmdldChyZWNlaXZlciwgImNvY29hIikgaXMgIm9rIgog
UEFTUyBSZWZsZWN0LnNldChkb2N1bWVudC5ib2R5LmRhdGFzZXQsIDAsICJvayIsIHJlY2VpdmVy
KSBpcyB0cnVlCi1QQVNTIFJlZmxlY3QuZ2V0KGRvY3VtZW50LmJvZHkuZGF0YXNldCwgMCkgaXMg
Im9rIgotUEFTUyBSZWZsZWN0LmdldChyZWNlaXZlciwgMCkgaXMgdW5kZWZpbmVkCitQQVNTIFJl
ZmxlY3QuZ2V0KGRvY3VtZW50LmJvZHkuZGF0YXNldCwgMCkgaXMgInN3ZWV0IgorUEFTUyBSZWZs
ZWN0LmdldChyZWNlaXZlciwgMCkgaXMgIm9rIgogQ3VzdG9tSW5kZXhlZFNldHRlcgogUEFTUyBS
ZWZsZWN0LmdldChzZWxlY3QsIDApLnZhbHVlIGlzICJjb2NvYSIKIFBBU1MgUmVmbGVjdC5nZXQo
c2VsZWN0LCAibGVuZ3RoIikgaXMgMwpAQCAtMTExLDEwICsxMTEsMTAgQEAgUEFTUyBSZWZsZWN0
LmdldChzZWxlY3QsICJsZW5ndGgiKSBpcyA0MgogUEFTUyBSZWZsZWN0LnNldChzZWxlY3QsIDQ0
LCBvcHRpb24yKSBpcyB0cnVlCiBQQVNTIFJlZmxlY3QuZ2V0KHNlbGVjdCwgNDQpLnZhbHVlIGlz
ICJraWxpbWFuamFybyIKIFBBU1MgUmVmbGVjdC5zZXQoc2VsZWN0LCAyMCwgIktpbGltYW5qYXJv
IikgdGhyZXcgZXhjZXB0aW9uIFR5cGVFcnJvcjogVHlwZSBlcnJvci4KLUN1c3RvbUluZGV4ZWRT
ZXR0ZXIgaWdub3JlcyB0aGUgcmVjZWl2ZXIuIFRoZXNlIG1ldGhvZHMgb25seSB3b3JrIHdpdGgg
OjpwdXQgKG5vdCA6OmRlZmluZU93blByb3BlcnR5KS4gU28gdGhleSBiZWhhdmUgYXMgdGhlIHNw
ZWNpYWwgc2V0dGVyLCB3ZSBzaG91bGQgbm90IGZhbGxiYWNrIHRvIHRoZSBPcmRpbmFyeVNldC4K
K0N1c3RvbUluZGV4ZWRTZXR0ZXIgZmFsbHMgYmFjayB0byBPcmRpbmFyeVNldCBpZiByZWNlaXZl
ciBpcyBhbHRlcmVkLgogUEFTUyBSZWZsZWN0LnNldChzZWxlY3QsIDAsIG9wdGlvbjMsIHJlY2Vp
dmVyKSBpcyB0cnVlCi1QQVNTIFJlZmxlY3QuZ2V0KHJlY2VpdmVyLCAwKSBpcyB1bmRlZmluZWQK
LVBBU1MgUmVmbGVjdC5nZXQoc2VsZWN0LCAwKSBpcyBvcHRpb24zCitQQVNTIFJlZmxlY3QuZ2V0
KHJlY2VpdmVyLCAwKSBpcyBvcHRpb24zCitQQVNTIFJlZmxlY3QuZ2V0KHNlbGVjdCwgMCkgaXMg
c2VsZWN0LmNoaWxkcmVuWzBdCiBQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCiAKIFRF
U1QgQ09NUExFVEUKSW5kZXg6IExheW91dFRlc3RzL2pzL2RvbS9zY3JpcHQtdGVzdHMvcmVmbGVj
dC1zZXQtb250by1kb20uanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvanMvZG9tL3Njcmlw
dC10ZXN0cy9yZWZsZWN0LXNldC1vbnRvLWRvbS5qcwkocmV2aXNpb24gMjc3OTQ4KQorKysgTGF5
b3V0VGVzdHMvanMvZG9tL3NjcmlwdC10ZXN0cy9yZWZsZWN0LXNldC1vbnRvLWRvbS5qcwkod29y
a2luZyBjb3B5KQpAQCAtMTE2LDE1ICsxMTYsMTUgQEAgc2hvdWxkVGhyb3coYFJlZmxlY3Quc2V0
KGRvY3VtZW50LmJvZHkuZAogc2hvdWxkQmUoYFJlZmxlY3Quc2V0KGRvY3VtZW50LmJvZHkuZGF0
YXNldCwgMCwgInN3ZWV0IilgLCBgdHJ1ZWApOwogc2hvdWxkQmUoYFJlZmxlY3QuZ2V0KGRvY3Vt
ZW50LmJvZHkuZGF0YXNldCwgMClgLCBgInN3ZWV0ImApOwogCi1kZWJ1ZygiRE9NU3RyaW5nTWFw
IGlnbm9yZXMgdGhlIHJlY2VpdmVyLiBUaGVzZSBwdXREZWxlZ2F0ZSBvbmx5IHdvcmsgd2l0aCA6
OnB1dCAobm90IDo6ZGVmaW5lT3duUHJvcGVydHkpLiBTbyB0aGV5IGJlaGF2ZSBhcyB0aGUgc3Bl
Y2lhbCBzZXR0ZXIsIHdlIHNob3VsZCBub3QgZmFsbGJhY2sgdG8gdGhlIE9yZGluYXJ5U2V0LiIp
OworZGVidWcoIkRPTVN0cmluZ01hcCBmYWxscyBiYWNrIHRvIE9yZGluYXJ5U2V0IGlmIHJlY2Vp
dmVyIGlzIGFsdGVyZWQuIik7CiB2YXIgcmVjZWl2ZXIgPSB7fTsKIHNob3VsZEJlKGBSZWZsZWN0
LnNldChkb2N1bWVudC5ib2R5LmRhdGFzZXQsICJjb2NvYSIsICJvayIsIHJlY2VpdmVyKWAsIGB0
cnVlYCk7Ci1zaG91bGRCZShgUmVmbGVjdC5nZXQoZG9jdW1lbnQuYm9keS5kYXRhc2V0LCAiY29j
b2EiKWAsIGAib2siYCk7Ci1zaG91bGRCZShgUmVmbGVjdC5nZXQocmVjZWl2ZXIsICJjb2NvYSIp
YCwgYHVuZGVmaW5lZGApOworc2hvdWxkQmUoYFJlZmxlY3QuZ2V0KGRvY3VtZW50LmJvZHkuZGF0
YXNldCwgImNvY29hIilgLCBgInN3ZWV0ImApOworc2hvdWxkQmUoYFJlZmxlY3QuZ2V0KHJlY2Vp
dmVyLCAiY29jb2EiKWAsIGAib2siYCk7CiB2YXIgcmVjZWl2ZXIgPSB7fTsKIHNob3VsZEJlKGBS
ZWZsZWN0LnNldChkb2N1bWVudC5ib2R5LmRhdGFzZXQsIDAsICJvayIsIHJlY2VpdmVyKWAsIGB0
cnVlYCk7Ci1zaG91bGRCZShgUmVmbGVjdC5nZXQoZG9jdW1lbnQuYm9keS5kYXRhc2V0LCAwKWAs
IGAib2siYCk7Ci1zaG91bGRCZShgUmVmbGVjdC5nZXQocmVjZWl2ZXIsIDApYCwgYHVuZGVmaW5l
ZGApOworc2hvdWxkQmUoYFJlZmxlY3QuZ2V0KGRvY3VtZW50LmJvZHkuZGF0YXNldCwgMClgLCBg
InN3ZWV0ImApOworc2hvdWxkQmUoYFJlZmxlY3QuZ2V0KHJlY2VpdmVyLCAwKWAsIGAib2siYCk7
CiAKIGRlYnVnKCJDdXN0b21JbmRleGVkU2V0dGVyIik7CiB2YXIgc2VsZWN0ID0gZG9jdW1lbnQu
Z2V0RWxlbWVudEJ5SWQoInRlc3RTZWxlY3QiKTsKQEAgLTE0NiwxMSArMTQ2LDExIEBAIHNob3Vs
ZEJlKGBSZWZsZWN0LnNldChzZWxlY3QsIDQ0LCBvcHRpb24KIHNob3VsZEJlKGBSZWZsZWN0Lmdl
dChzZWxlY3QsIDQ0KS52YWx1ZWAsIGAia2lsaW1hbmphcm8iYCk7CiBzaG91bGRUaHJvdyhgUmVm
bGVjdC5zZXQoc2VsZWN0LCAyMCwgIktpbGltYW5qYXJvIilgKTsKIAotZGVidWcoIkN1c3RvbUlu
ZGV4ZWRTZXR0ZXIgaWdub3JlcyB0aGUgcmVjZWl2ZXIuIFRoZXNlIG1ldGhvZHMgb25seSB3b3Jr
IHdpdGggOjpwdXQgKG5vdCA6OmRlZmluZU93blByb3BlcnR5KS4gU28gdGhleSBiZWhhdmUgYXMg
dGhlIHNwZWNpYWwgc2V0dGVyLCB3ZSBzaG91bGQgbm90IGZhbGxiYWNrIHRvIHRoZSBPcmRpbmFy
eVNldC4iKTsKK2RlYnVnKCJDdXN0b21JbmRleGVkU2V0dGVyIGZhbGxzIGJhY2sgdG8gT3JkaW5h
cnlTZXQgaWYgcmVjZWl2ZXIgaXMgYWx0ZXJlZC4iKTsKIHZhciBvcHRpb24zID0gZG9jdW1lbnQu
Y3JlYXRlRWxlbWVudCgib3B0aW9uIik7CiBvcHRpb24zLnZhbHVlID0gInJhYmJpdCI7CiBvcHRp
b24zLnRleHRDb250ZW50ID0gIlJhYmJpdCI7CiB2YXIgcmVjZWl2ZXIgPSB7fTsKIHNob3VsZEJl
KGBSZWZsZWN0LnNldChzZWxlY3QsIDAsIG9wdGlvbjMsIHJlY2VpdmVyKWAsIGB0cnVlYCk7Ci1z
aG91bGRCZShgUmVmbGVjdC5nZXQocmVjZWl2ZXIsIDApYCwgYHVuZGVmaW5lZGApOwotc2hvdWxk
QmUoYFJlZmxlY3QuZ2V0KHNlbGVjdCwgMClgLCBgb3B0aW9uM2ApOworc2hvdWxkQmUoYFJlZmxl
Y3QuZ2V0KHJlY2VpdmVyLCAwKWAsIGBvcHRpb24zYCk7CitzaG91bGRCZShgUmVmbGVjdC5nZXQo
c2VsZWN0LCAwKWAsIGBzZWxlY3QuY2hpbGRyZW5bMF1gKTsK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>430703</attachid>
            <date>2021-06-06 18:24:16 -0700</date>
            <delta_ts>2022-02-10 16:28:09 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-226185-20210607042414.patch</filename>
            <type>text/plain</type>
            <size>176823</size>
            <attacher name="Alexey Shvayka">ashvayka</attacher>
            
              <data encoding="base64">SW5kZXg6IEpTVGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEpTVGVzdHMvQ2hhbmdlTG9n
CShyZXZpc2lvbiAyNzg1MzkpCisrKyBKU1Rlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpA
QCAtMSwzICsxLDI3IEBACisyMDIxLTA2LTA2ICBBbGV4ZXkgU2h2YXlrYSAgPHNodmFpa2FsZXNo
QGdtYWlsLmNvbT4KKworICAgICAgICBSZS1sYW5kIHIyNzY1OTIgd2l0aCBhIGZpeCBmb3IgcHV0
KCkgb3ZlcnJpZGUgaW4gcHJvdG90eXBlIGNoYWluIG9mIGEgSlNQcm94eQorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjI2MTg1CisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBtaWNyb2JlbmNobWFya3MvcHV0
LXNsb3ctbm8tY2FjaGUtYXJyYXkuanM6IEFkZGVkLgorICAgICAgICAqIG1pY3JvYmVuY2htYXJr
cy9wdXQtc2xvdy1uby1jYWNoZS1mdW5jdGlvbi5qczogQWRkZWQuCisgICAgICAgICogbWljcm9i
ZW5jaG1hcmtzL3B1dC1zbG93LW5vLWNhY2hlLWpzLXByb3h5LmpzOiBBZGRlZC4KKyAgICAgICAg
KiBtaWNyb2JlbmNobWFya3MvcHV0LXNsb3ctbm8tY2FjaGUtbG9uZy1wcm90b3R5cGUtY2hhaW4u
anM6IEFkZGVkLgorICAgICAgICAqIG1pY3JvYmVuY2htYXJrcy9wdXQtc2xvdy1uby1jYWNoZS5q
czogQWRkZWQuCisgICAgICAgICogbWljcm9iZW5jaG1hcmtzL3JlZmxlY3Qtc2V0LXdpdGgtcmVj
ZWl2ZXIuanM6IEFkZGVkLgorICAgICAgICAqIHN0cmVzcy9jdXN0b20tZ2V0LXNldC1wcm90by1j
aGFpbi1wdXQuanM6CisgICAgICAgICogc3RyZXNzL21vZHVsZS1uYW1lc3BhY2UtYWNjZXNzLXNl
dC1mYWlscy5qczogQWRkZWQuCisgICAgICAgICogc3RyZXNzL3B1dC1ub24tcmVpZmllZC1zdGF0
aWMtYWNjZXNzb3Itb3ItY3VzdG9tLmpzOiBBZGRlZC4KKyAgICAgICAgKiBzdHJlc3MvcHV0LW5v
bi1yZWlmaWVkLXN0YXRpYy1mdW5jdGlvbi1vci1jdXN0b20uanM6IEFkZGVkLgorICAgICAgICAq
IHN0cmVzcy9wdXQtdG8tcHJpbWl0aXZlLW5vbi1yZWlmaWVkLXN0YXRpYy1jdXN0b20uanM6IEFk
ZGVkLgorICAgICAgICAqIHN0cmVzcy9wdXQtdG8tcHJpbWl0aXZlLmpzOiBBZGRlZC4KKyAgICAg
ICAgKiBzdHJlc3MvcHV0LXRvLXByb3RvLWNoYWluLW92ZXJyaWRlcy1wdXQuanM6CisgICAgICAg
IFJld29yayB0byBhbHdheXMgdGVzdCBuZXcgb2JqZWN0cywgYWRkIEpTUHJveHkgY292ZXJhZ2Us
IGFuZCBhc3NlcnQgdGhhdCByZWNlaXZlciBoYXMgb3duIHByb3BlcnR5LgorCisgICAgICAgICog
c3RyZXNzL3R5cGVkLWFycmF5LWNhbm9uaWNhbC1udW1lcmljLWluZGV4LXN0cmluZy1zZXQuanM6
IEFkZGVkLgorCiAyMDIxLTA2LTA0ICBZdXN1a2UgU3V6dWtpICA8eXN1enVraUBhcHBsZS5jb20+
CiAKICAgICAgICAgW0pTQ10gUHJpdmF0ZSBzdGF0aWMgbWV0aG9kIHNob3VsZCBkZWZpbmUgcHJp
dmF0ZUNsYXNzQnJhbmRJZGVudGlmaWVyIGluIGNsYXNzLXNjb3BlCkluZGV4OiBKU1Rlc3RzL21p
Y3JvYmVuY2htYXJrcy9wdXQtc2xvdy1uby1jYWNoZS1hcnJheS5qcwo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBK
U1Rlc3RzL21pY3JvYmVuY2htYXJrcy9wdXQtc2xvdy1uby1jYWNoZS1hcnJheS5qcwkobm9uZXhp
c3RlbnQpCisrKyBKU1Rlc3RzL21pY3JvYmVuY2htYXJrcy9wdXQtc2xvdy1uby1jYWNoZS1hcnJh
eS5qcwkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDYgQEAKKyhmdW5jdGlvbigpIHsKKyAgICB2
YXIgYXJyYXkgPSBbXTsKKworICAgIGZvciAodmFyIGogPSAwOyBqIDwgMWU1OyBqKyspCisgICAg
ICAgIGFycmF5WyJmb28iICsgal0gPSBqOworfSkoKTsKSW5kZXg6IEpTVGVzdHMvbWljcm9iZW5j
aG1hcmtzL3B1dC1zbG93LW5vLWNhY2hlLWZ1bmN0aW9uLmpzCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEpTVGVz
dHMvbWljcm9iZW5jaG1hcmtzL3B1dC1zbG93LW5vLWNhY2hlLWZ1bmN0aW9uLmpzCShub25leGlz
dGVudCkKKysrIEpTVGVzdHMvbWljcm9iZW5jaG1hcmtzL3B1dC1zbG93LW5vLWNhY2hlLWZ1bmN0
aW9uLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsOCBAQAorKGZ1bmN0aW9uKCkgeworICAg
IGNsYXNzIEEge30KKyAgICBjbGFzcyBCIGV4dGVuZHMgQSB7fQorICAgIGNsYXNzIEMgZXh0ZW5k
cyBCIHt9CisKKyAgICBmb3IgKHZhciBqID0gMDsgaiA8IDFlNTsgaisrKQorICAgICAgICBDWyJm
b28iICsgal0gPSBqOworfSkoKTsKSW5kZXg6IEpTVGVzdHMvbWljcm9iZW5jaG1hcmtzL3B1dC1z
bG93LW5vLWNhY2hlLWpzLXByb3h5LmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEpTVGVzdHMvbWljcm9iZW5j
aG1hcmtzL3B1dC1zbG93LW5vLWNhY2hlLWpzLXByb3h5LmpzCShub25leGlzdGVudCkKKysrIEpT
VGVzdHMvbWljcm9iZW5jaG1hcmtzL3B1dC1zbG93LW5vLWNhY2hlLWpzLXByb3h5LmpzCSh3b3Jr
aW5nIGNvcHkpCkBAIC0wLDAgKzEsNiBAQAorKGZ1bmN0aW9uKCkgeworICAgIHZhciBwcm94eSA9
ICR2bS5jcmVhdGVQcm94eSh7IHNldCBmb28oX3YpIHt9IH0pOworCisgICAgZm9yICh2YXIgaiA9
IDA7IGogPCAxZTU7IGorKykKKyAgICAgICAgcHJveHlbImZvbyIgKyBqXSA9IGo7Cit9KSgpOwpJ
bmRleDogSlNUZXN0cy9taWNyb2JlbmNobWFya3MvcHV0LXNsb3ctbm8tY2FjaGUtbG9uZy1wcm90
b3R5cGUtY2hhaW4uanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSlNUZXN0cy9taWNyb2JlbmNobWFya3MvcHV0
LXNsb3ctbm8tY2FjaGUtbG9uZy1wcm90b3R5cGUtY2hhaW4uanMJKG5vbmV4aXN0ZW50KQorKysg
SlNUZXN0cy9taWNyb2JlbmNobWFya3MvcHV0LXNsb3ctbm8tY2FjaGUtbG9uZy1wcm90b3R5cGUt
Y2hhaW4uanMJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw4IEBACisoZnVuY3Rpb24oKSB7Cisg
ICAgdmFyIGJhc2UgPSB7IHNldCBmb28oX3YpIHt9IH07CisgICAgZm9yICh2YXIgaSA9IDA7IGkg
PCAxZTM7IGkrKykKKyAgICAgICAgYmFzZSA9IE9iamVjdC5jcmVhdGUoYmFzZSk7CisKKyAgICBm
b3IgKHZhciBqID0gMDsgaiA8IDNlMzsgaisrKQorICAgICAgICBiYXNlWyJmb28iICsgal0gPSBq
OworfSkoKTsKSW5kZXg6IEpTVGVzdHMvbWljcm9iZW5jaG1hcmtzL3B1dC1zbG93LW5vLWNhY2hl
LmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIEpTVGVzdHMvbWljcm9iZW5jaG1hcmtzL3B1dC1zbG93LW5vLWNh
Y2hlLmpzCShub25leGlzdGVudCkKKysrIEpTVGVzdHMvbWljcm9iZW5jaG1hcmtzL3B1dC1zbG93
LW5vLWNhY2hlLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNiBAQAorKGZ1bmN0aW9uKCkg
eworICAgIHZhciBiYXNlID0geyBzZXQgZm9vKF92KSB7fSB9OworCisgICAgZm9yICh2YXIgaiA9
IDA7IGogPCAxZTU7IGorKykKKyAgICAgICAgYmFzZVsiZm9vIiArIGpdID0gajsKK30pKCk7Cklu
ZGV4OiBKU1Rlc3RzL21pY3JvYmVuY2htYXJrcy9yZWZsZWN0LXNldC13aXRoLXJlY2VpdmVyLmpz
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIEpTVGVzdHMvbWljcm9iZW5jaG1hcmtzL3JlZmxlY3Qtc2V0LXdpdGgt
cmVjZWl2ZXIuanMJKG5vbmV4aXN0ZW50KQorKysgSlNUZXN0cy9taWNyb2JlbmNobWFya3MvcmVm
bGVjdC1zZXQtd2l0aC1yZWNlaXZlci5qcwkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDYgQEAK
KyhmdW5jdGlvbigpIHsKKyAgICB2YXIgdGFyZ2V0ID0gbmV3IChjbGFzcyB7fSk7CisKKyAgICBm
b3IgKHZhciBpID0gMDsgaSA8IDFlNjsgaSsrKQorICAgICAgICBSZWZsZWN0LnNldCh0YXJnZXQs
ICJmb28iLCAxLCB7fSk7Cit9KSgpOwpJbmRleDogSlNUZXN0cy9zdHJlc3MvY3VzdG9tLWdldC1z
ZXQtcHJvdG8tY2hhaW4tcHV0LmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEpTVGVzdHMvc3RyZXNzL2N1c3Rv
bS1nZXQtc2V0LXByb3RvLWNoYWluLXB1dC5qcwkocmV2aXNpb24gMjc4NTM5KQorKysgSlNUZXN0
cy9zdHJlc3MvY3VzdG9tLWdldC1zZXQtcHJvdG8tY2hhaW4tcHV0LmpzCSh3b3JraW5nIGNvcHkp
CkBAIC0zNyw4ICszNyw4IEBAIGZ1bmN0aW9uIGdldE9iamVjdHMoKSB7CiAgICAgICAgIC4uLnBy
aW1pdGl2ZXMubWFwKE9iamVjdCksCiAgICAgICAgIE9iamVjdC5jcmVhdGUoY3VzdG9tVGVzdEdl
dHRlclNldHRlciksCiAgICAgICAgIE9iamVjdC5jcmVhdGUoT2JqZWN0LmNyZWF0ZShjdXN0b21U
ZXN0R2V0dGVyU2V0dGVyKSksCi0gICAgICAgIC8vIEZJWE1FOiBvcmRpbmFyeVNldFNsb3coKSBz
aG91bGQgaGFuZGxlIEN1c3RvbXtBY2Nlc3NvcixWYWx1ZX0gZGVzY3JpcHRvcnMuCi0gICAgICAg
IC8vIG5ldyBQcm94eShjdXN0b21UZXN0R2V0dGVyU2V0dGVyLCB7fSksCisgICAgICAgIE9iamVj
dC5jcmVhdGUobmV3IFByb3h5KGN1c3RvbVRlc3RHZXR0ZXJTZXR0ZXIsIHt9KSksCisgICAgICAg
IE9iamVjdC5jcmVhdGUoJHZtLmNyZWF0ZVByb3h5KGN1c3RvbVRlc3RHZXR0ZXJTZXR0ZXIpKSwK
ICAgICBdOwogfQogCkBAIC04NSwxMyArODUsMTMgQEAgZnVuY3Rpb24gZ2V0QmFzZXMoKSB7CiB9
KSgpOwogCiAvLyBDdXN0b21WYWx1ZTogc2V0dGVyIHJldHVybnMgfGZhbHNlfAorLy8gRklYTUU6
IE9uY2UgbGVnYWN5IFJlZ0V4cCBmZWF0dXJlcyBhcmUgaW1wbGVtZW50ZWQsIHRoZXJlIHdvdWxk
IGJlIG5vIHVzZSBjYXNlIGZvciBjYWxsaW5nIEN1c3RvbVZhbHVlIHNldHRlciBpZiByZWNlaXZl
ciBpcyBhbHRlcmVkLgogKCgpID0+IHsKICAgICBmb3IgKGxldCBiYXNlIG9mIGdldEJhc2VzKCkp
IHsKICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCAxMDA7ICsraSkKICAgICAgICAgICAgIGJh
c2UuY3VzdG9tVmFsdWUgPSAxOwotICAgICAgICAvLyBUaGlzIGlzIHdlaXJkLCBidXQgaXQgaXNu
J3QgZXhwb3NlZCB0byB1c2VybGFuZCBjb2RlOgogICAgICAgICBhc3NlcnQoIWJhc2UuaGFzT3du
UHJvcGVydHkoImN1c3RvbVZhbHVlIikpOwotICAgICAgICBhc3NlcnQoIVJlZmxlY3Quc2V0KE9i
amVjdChiYXNlKSwgImN1c3RvbVZhbHVlIiwgMSkpOworICAgICAgICBhc3NlcnQoUmVmbGVjdC5z
ZXQoT2JqZWN0KGJhc2UpLCAiY3VzdG9tVmFsdWUiLCAxKSk7CiAgICAgfQogfSkoKTsKIApJbmRl
eDogSlNUZXN0cy9zdHJlc3MvbW9kdWxlLW5hbWVzcGFjZS1hY2Nlc3Mtc2V0LWZhaWxzLmpzCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIEpTVGVzdHMvc3RyZXNzL21vZHVsZS1uYW1lc3BhY2UtYWNjZXNzLXNldC1m
YWlscy5qcwkobm9uZXhpc3RlbnQpCisrKyBKU1Rlc3RzL3N0cmVzcy9tb2R1bGUtbmFtZXNwYWNl
LWFjY2Vzcy1zZXQtZmFpbHMuanMJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw5MCBAQAorY29u
c3QgZXhpc3RpbmdLZXlzID0gWyJjb2NvYSIsICJ0ZXN0IiwgU3ltYm9sLnRvU3RyaW5nVGFnXTsK
K2NvbnN0IG5vbkV4aXN0aW5nS2V5cyA9IFsiZm9vIiwgU3ltYm9sKCJmb28iKV07Citjb25zdCBh
bGxLZXlzID0gWy4uLmV4aXN0aW5nS2V5cywgLi4ubm9uRXhpc3RpbmdLZXlzXTsKK2NvbnN0IHRl
c3RWYWx1ZSA9IE9iamVjdC5mcmVlemUoe30pOworCitmdW5jdGlvbiBhc3NlcnQoeCwga2V5KSB7
CisgICAgaWYgKCF4KQorICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEJhZCBhc3NlcnRpb24hIEtl
eTogJHtTdHJpbmcoa2V5KX1gKTsKK30KKworZnVuY3Rpb24gc2hvdWxkVGhyb3coZnVuYywgZXJy
b3JNZXNzYWdlKSB7CisgICAgbGV0IGVycm9yVGhyb3duID0gZmFsc2U7CisgICAgdHJ5IHsKKyAg
ICAgICAgZnVuYygpOworICAgIH0gY2F0Y2ggKGVycm9yKSB7CisgICAgICAgIGVycm9yVGhyb3du
ID0gdHJ1ZTsKKyAgICAgICAgaWYgKFN0cmluZyhlcnJvcikgIT09IGVycm9yTWVzc2FnZSkKKyAg
ICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgQmFkIGVycm9yOiAke2Vycm9yfWApOworICAgIH0K
KyAgICBpZiAoIWVycm9yVGhyb3duKQorICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIkRpZG4ndCB0
aHJvdyEiKTsKK30KKworZnVuY3Rpb24gdGVzdERpcmVjdFNldChucykgeworICAgIGZvciAoY29u
c3Qga2V5IG9mIGFsbEtleXMpIHsKKyAgICAgICAgbnNba2V5XSA9IHRlc3RWYWx1ZTsKKyAgICAg
ICAgYXNzZXJ0KG5zW2tleV0gIT09IHRlc3RWYWx1ZSwga2V5KTsKKworICAgICAgICBzaG91bGRU
aHJvdygoKSA9PiB7ICJ1c2Ugc3RyaWN0IjsgbnNba2V5XSA9IHRlc3RWYWx1ZTsgfSwgIlR5cGVF
cnJvcjogQXR0ZW1wdGVkIHRvIGFzc2lnbiB0byByZWFkb25seSBwcm9wZXJ0eS4iKTsKKyAgICAg
ICAgYXNzZXJ0KG5zW2tleV0gIT09IHRlc3RWYWx1ZSwga2V5KTsKKyAgICB9Cit9CisKK2Z1bmN0
aW9uIHRlc3RQcm90b3R5cGVDaGFpblNldChucykgeworICAgIGZvciAoY29uc3Qga2V5IG9mIGFs
bEtleXMpIHsKKyAgICAgICAgY29uc3QgaGVpciA9IE9iamVjdC5jcmVhdGUobnMpOworCisgICAg
ICAgIGhlaXJba2V5XSA9IHRlc3RWYWx1ZTsKKyAgICAgICAgYXNzZXJ0KE9iamVjdC5nZXRPd25Q
cm9wZXJ0eURlc2NyaXB0b3IoaGVpciwga2V5KSA9PT0gdW5kZWZpbmVkLCBrZXkpOworCisgICAg
ICAgIHNob3VsZFRocm93KCgpID0+IHsgInVzZSBzdHJpY3QiOyBoZWlyW2tleV0gPSB0ZXN0VmFs
dWU7IH0sICJUeXBlRXJyb3I6IEF0dGVtcHRlZCB0byBhc3NpZ24gdG8gcmVhZG9ubHkgcHJvcGVy
dHkuIik7CisgICAgICAgIGFzc2VydChPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGhl
aXIsIGtleSkgPT09IHVuZGVmaW5lZCwga2V5KTsKKyAgICB9Cit9CisKK2Z1bmN0aW9uIHRlc3RS
ZWZsZWN0U2V0KG5zKSB7CisgICAgInVzZSBzdHJpY3QiOworCisgICAgZm9yIChjb25zdCBleGlz
dGluZ0tleSBvZiBleGlzdGluZ0tleXMpIHsKKyAgICAgICAgYXNzZXJ0KCFSZWZsZWN0LnNldChu
cywgZXhpc3RpbmdLZXksIHRlc3RWYWx1ZSksIGV4aXN0aW5nS2V5KTsKKworICAgICAgICBjb25z
dCB0YXJnZXQgPSB7fTsKKyAgICAgICAgYXNzZXJ0KCFSZWZsZWN0LnNldCh0YXJnZXQsIGV4aXN0
aW5nS2V5LCB0ZXN0VmFsdWUsIG5zKSwgZXhpc3RpbmdLZXkpOworCisgICAgICAgIGNvbnN0IGlz
V3JpdGFibGUgPSBleGlzdGluZ0tleSAhPT0gU3ltYm9sLnRvU3RyaW5nVGFnOworICAgICAgICBh
c3NlcnQoUmVmbGVjdC5zZXQodGFyZ2V0LCBleGlzdGluZ0tleSwgbnNbZXhpc3RpbmdLZXldLCBu
cykgPT09IGlzV3JpdGFibGUsIGV4aXN0aW5nS2V5KTsKKworICAgICAgICBhc3NlcnQobnNbZXhp
c3RpbmdLZXldICE9PSB0ZXN0VmFsdWUsIGV4aXN0aW5nS2V5KTsKKyAgICAgICAgYXNzZXJ0KHRh
cmdldFtleGlzdGluZ0tleV0gPT09IHVuZGVmaW5lZCwgZXhpc3RpbmdLZXkpOworICAgIH0KKwor
ICAgIGZvciAoY29uc3Qgbm9uRXhpc3RpbmdLZXkgb2Ygbm9uRXhpc3RpbmdLZXlzKSB7CisgICAg
ICAgIGFzc2VydCghUmVmbGVjdC5zZXQobnMsIG5vbkV4aXN0aW5nS2V5LCB0ZXN0VmFsdWUpLCBu
b25FeGlzdGluZ0tleSk7CisgICAgICAgIGFzc2VydChuc1tub25FeGlzdGluZ0tleV0gPT09IHVu
ZGVmaW5lZCwgbm9uRXhpc3RpbmdLZXkpOworCisgICAgICAgIGNvbnN0IHRhcmdldCA9IHt9Owor
ICAgICAgICBhc3NlcnQoIVJlZmxlY3Quc2V0KHRhcmdldCwgbm9uRXhpc3RpbmdLZXksIHRlc3RW
YWx1ZSwgbnMpLCBub25FeGlzdGluZ0tleSk7CisgICAgICAgIGFzc2VydCh0YXJnZXRbbm9uRXhp
c3RpbmdLZXldID09PSB1bmRlZmluZWQsIG5vbkV4aXN0aW5nS2V5KTsKKyAgICB9CisKKyAgICBm
b3IgKGNvbnN0IGtleSBvZiBhbGxLZXlzKSB7CisgICAgICAgIGNvbnN0IHRhcmdldCA9IE9iamVj
dC5jcmVhdGUobnMpOworICAgICAgICBjb25zdCByZWNlaXZlciA9IHt9OworCisgICAgICAgIGFz
c2VydCghUmVmbGVjdC5zZXQodGFyZ2V0LCBrZXksIHRlc3RWYWx1ZSwgcmVjZWl2ZXIpLCBrZXkp
OworICAgICAgICBhc3NlcnQoT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0YXJnZXQs
IGtleSkgPT09IHVuZGVmaW5lZCwga2V5KTsKKyAgICAgICAgYXNzZXJ0KE9iamVjdC5nZXRPd25Q
cm9wZXJ0eURlc2NyaXB0b3IocmVjZWl2ZXIsIGtleSkgPT09IHVuZGVmaW5lZCwga2V5KTsKKyAg
ICB9Cit9CisKK2ltcG9ydCgiLi9yZXNvdXJjZXMvbW9kdWxlLW5hbWVzcGFjZS1hY2Nlc3MuanMi
KS50aGVuKG5zID0+IHsKKyAgICB0ZXN0RGlyZWN0U2V0KG5zKTsKKyAgICB0ZXN0UHJvdG90eXBl
Q2hhaW5TZXQobnMpOworICAgIHRlc3RSZWZsZWN0U2V0KG5zKTsKK30pLmNhdGNoKGVyciA9PiB7
CisgICAgcHJpbnQoYCEhISAke2Vycn1cbiR7ZXJyLnN0YWNrfWApOworICAgICR2bS5hYm9ydCgp
OworfSk7CisKK2RyYWluTWljcm90YXNrcygpOwpJbmRleDogSlNUZXN0cy9zdHJlc3MvcHV0LW5v
bi1yZWlmaWVkLXN0YXRpYy1hY2Nlc3Nvci1vci1jdXN0b20uanMKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSlNU
ZXN0cy9zdHJlc3MvcHV0LW5vbi1yZWlmaWVkLXN0YXRpYy1hY2Nlc3Nvci1vci1jdXN0b20uanMJ
KG5vbmV4aXN0ZW50KQorKysgSlNUZXN0cy9zdHJlc3MvcHV0LW5vbi1yZWlmaWVkLXN0YXRpYy1h
Y2Nlc3Nvci1vci1jdXN0b20uanMJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1OCBAQAorInVz
ZSBzdHJpY3QiOworY29uc3QgdGVzdFZhbHVlID0gT2JqZWN0LmZyZWV6ZSh7fSk7CisKK2Z1bmN0
aW9uIGFzc2VydCh4LCBrZXkpIHsKKyAgICBpZiAoIXgpCisgICAgICAgIHRocm93IG5ldyBFcnJv
cihgS2V5OiAiJHtrZXl9Ii4gQmFkIGFzc2VydGlvbiFgKTsKK30KKworZnVuY3Rpb24qIHRlc3RD
YXNlcygpIHsKKyAgICBmb3IgKGNvbnN0IGtleSBvZiBbImRlc2NyaXB0aW9uIl0pCisgICAgICAg
IHlpZWxkIFskdm0uY3JlYXRlR2xvYmFsT2JqZWN0KCkuU3ltYm9sLnByb3RvdHlwZSwga2V5XTsK
KyAgICBmb3IgKGNvbnN0IGtleSBvZiBbImJ1ZmZlciIsICJieXRlTGVuZ3RoIiwgImJ5dGVPZmZz
ZXQiXSkKKyAgICAgICAgeWllbGQgWyR2bS5jcmVhdGVHbG9iYWxPYmplY3QoKS5EYXRhVmlldy5w
cm90b3R5cGUsIGtleV07CisgICAgZm9yIChjb25zdCBrZXkgb2YgWyJiYXNlTmFtZSIsICJjYXNl
Rmlyc3QiLCAiaG91ckN5Y2xlIiwgIm51bWVyaWMiLCAicmVnaW9uIl0pCisgICAgICAgIHlpZWxk
IFskdm0uY3JlYXRlR2xvYmFsT2JqZWN0KCkuSW50bC5Mb2NhbGUucHJvdG90eXBlLCBrZXldOwor
CisgICAgZm9yIChjb25zdCBrZXkgb2YgWyJ0ZXN0U3RhdGljQWNjZXNzb3JEb250RW51bSIsICJ0
ZXN0U3RhdGljQWNjZXNzb3JSZWFkT25seSJdKQorICAgICAgICB5aWVsZCBbJHZtLmNyZWF0ZVN0
YXRpY0N1c3RvbUFjY2Vzc29yKCksIGtleV07CisgICAgeWllbGQgWyR2bS5jcmVhdGVTdGF0aWND
dXN0b21WYWx1ZSgpLCAidGVzdFN0YXRpY1ZhbHVlUmVhZE9ubHkiXTsKK30KKworZm9yIChjb25z
dCBbb2JqZWN0LCBrZXldIG9mIHRlc3RDYXNlcygpKSB7CisgICAgY29uc3QgdGFyZ2V0ID0ge307
CisgICAgYXNzZXJ0KCFSZWZsZWN0LnNldCh0YXJnZXQsIGtleSwgdGVzdFZhbHVlLCBvYmplY3Qp
LCBrZXkpOworICAgIGFzc2VydCghdGFyZ2V0Lmhhc093blByb3BlcnR5KGtleSksIGtleSk7Cisg
ICAgYXNzZXJ0KE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0LCBrZXkpLnZh
bHVlICE9PSB0ZXN0VmFsdWUsIGtleSk7Cit9CisKK2ZvciAoY29uc3QgW29iamVjdCwga2V5XSBv
ZiB0ZXN0Q2FzZXMoKSkgeworICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmplY3QsIGtleSwg
eyB2YWx1ZToge30sIHdyaXRhYmxlOiBmYWxzZSB9KTsKKyAgICBjb25zdCB0YXJnZXQgPSB7fTsK
KyAgICBhc3NlcnQoIVJlZmxlY3Quc2V0KHRhcmdldCwga2V5LCB0ZXN0VmFsdWUsIG9iamVjdCks
IGtleSk7CisgICAgYXNzZXJ0KCF0YXJnZXQuaGFzT3duUHJvcGVydHkoa2V5KSwga2V5KTsKKyAg
ICBhc3NlcnQoT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QsIGtleSkudmFs
dWUgIT09IHRlc3RWYWx1ZSwga2V5KTsKK30KKworZm9yIChjb25zdCBbb2JqZWN0LCBrZXldIG9m
IHRlc3RDYXNlcygpKSB7CisgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iamVjdCwga2V5LCB7
IHZhbHVlOiB7fSwgd3JpdGFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogZmFsc2UgfSk7CisgICAg
b2JqZWN0W2tleV0gPSB0ZXN0VmFsdWU7CisKKyAgICBjb25zdCBkZXNjID0gT2JqZWN0LmdldE93
blByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QsIGtleSk7CisgICAgYXNzZXJ0KGRlc2MudmFsdWUg
PT09IHRlc3RWYWx1ZSwga2V5KTsKKyAgICBhc3NlcnQoZGVzYy53cml0YWJsZSwga2V5KTsKKyAg
ICBhc3NlcnQoIWRlc2MuZW51bWVyYWJsZSwga2V5KTsKKyAgICBhc3NlcnQoIWRlc2MuY29uZmln
dXJhYmxlLCBrZXkpOworfQorCitmb3IgKGNvbnN0IFtvYmplY3QsIGtleV0gb2YgdGVzdENhc2Vz
KCkpIHsKKyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqZWN0LCBrZXksIHsgdmFsdWU6IHt9
LCB3cml0YWJsZTogdHJ1ZSwgZW51bWVyYWJsZTogdHJ1ZSB9KTsKKyAgICBjb25zdCB0YXJnZXQg
PSB7fTsKKyAgICBhc3NlcnQoUmVmbGVjdC5zZXQodGFyZ2V0LCBrZXksIHRlc3RWYWx1ZSwgb2Jq
ZWN0KSwga2V5KTsKKworICAgIGNvbnN0IGRlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNj
cmlwdG9yKG9iamVjdCwga2V5KTsKKyAgICBhc3NlcnQoZGVzYy52YWx1ZSA9PT0gdGVzdFZhbHVl
LCBrZXkpOworICAgIGFzc2VydChkZXNjLndyaXRhYmxlLCBrZXkpOworICAgIGFzc2VydChkZXNj
LmVudW1lcmFibGUsIGtleSk7CisgICAgYXNzZXJ0KGRlc2MuY29uZmlndXJhYmxlLCBrZXkpOwor
fQpJbmRleDogSlNUZXN0cy9zdHJlc3MvcHV0LW5vbi1yZWlmaWVkLXN0YXRpYy1mdW5jdGlvbi1v
ci1jdXN0b20uanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gSlNUZXN0cy9zdHJlc3MvcHV0LW5vbi1yZWlmaWVk
LXN0YXRpYy1mdW5jdGlvbi1vci1jdXN0b20uanMJKG5vbmV4aXN0ZW50KQorKysgSlNUZXN0cy9z
dHJlc3MvcHV0LW5vbi1yZWlmaWVkLXN0YXRpYy1mdW5jdGlvbi1vci1jdXN0b20uanMJKHdvcmtp
bmcgY29weSkKQEAgLTAsMCArMSwxNDMgQEAKKyJ1c2Ugc3RyaWN0IjsKK2NvbnN0IHRlc3RWYWx1
ZSA9IE9iamVjdC5mcmVlemUoe30pOworCitmdW5jdGlvbiBhc3NlcnQoeCwga2V5KSB7CisgICAg
aWYgKCF4KQorICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEtleTogIiR7a2V5fSIuIEJhZCBhc3Nl
cnRpb24hYCk7Cit9CisKK2Z1bmN0aW9uIHNob3VsZFRocm93KGZ1bmMsIGVycm9yTWVzc2FnZSwg
a2V5KSB7CisgICAgbGV0IGVycm9yVGhyb3duID0gZmFsc2U7CisgICAgdHJ5IHsKKyAgICAgICAg
ZnVuYygpOworICAgIH0gY2F0Y2ggKGVycm9yKSB7CisgICAgICAgIGVycm9yVGhyb3duID0gdHJ1
ZTsKKyAgICAgICAgaWYgKFN0cmluZyhlcnJvcikgIT09IGVycm9yTWVzc2FnZSkKKyAgICAgICAg
ICAgIHRocm93IG5ldyBFcnJvcihgS2V5OiAiJHtrZXl9Ii4gQmFkIGVycm9yOiAke2Vycm9yfWAp
OworICAgIH0KKyAgICBpZiAoIWVycm9yVGhyb3duKQorICAgICAgICB0aHJvdyBuZXcgRXJyb3Io
YEtleTogIiR7a2V5fSIuIERpZG4ndCB0aHJvdyFgKTsKK30KKworZnVuY3Rpb24qIHRlc3RDYXNl
cygpIHsKKyAgICAvLyBoYXNTZXR0ZXJPclJlYWRvbmx5UHJvcGVydGllczogZmFsc2UKKyAgICBm
b3IgKGNvbnN0IGtleSBvZiBbImlzRmluaXRlIiwgImV2YWwiLCAiZ2xvYmFsVGhpcyIsICJwYXJz
ZUludCIsICJFdmFsRXJyb3IiLCAiSlNPTiIsICJVaW50OENsYW1wZWRBcnJheSIsICJXZWFrTWFw
Il0pCisgICAgICAgIHlpZWxkIFskdm0uY3JlYXRlR2xvYmFsT2JqZWN0KCksIGtleV07CisgICAg
Zm9yIChjb25zdCBrZXkgb2YgWyJzZWFsIiwgImlzIiwgInZhbHVlcyIsICJmcm9tRW50cmllcyIs
ICJkZWZpbmVQcm9wZXJ0eSIsICJzZXRQcm90b3R5cGVPZiJdKQorICAgICAgICB5aWVsZCBbJHZt
LmNyZWF0ZUdsb2JhbE9iamVjdCgpLk9iamVjdCwga2V5XTsKKyAgICBmb3IgKGNvbnN0IGtleSBv
ZiBbImFwcGx5IiwgImNvbnN0cnVjdCIsICJoYXMiLCAicHJldmVudEV4dGVuc2lvbnMiLCAiZ2V0
UHJvdG90eXBlT2YiXSkKKyAgICAgICAgeWllbGQgWyR2bS5jcmVhdGVHbG9iYWxPYmplY3QoKS5S
ZWZsZWN0LCBrZXldOworICAgIGZvciAoY29uc3Qga2V5IG9mIFsidG9EYXRlU3RyaW5nIiwgInRv
TG9jYWxlU3RyaW5nIiwgImdldFVUQ01vbnRoIiwgImdldERheSIsICJzZXRVVENNaW51dGVzIiwg
InNldE1vbnRoIl0pCisgICAgICAgIHlpZWxkIFskdm0uY3JlYXRlR2xvYmFsT2JqZWN0KCkuRGF0
ZS5wcm90b3R5cGUsIGtleV07CisgICAgZm9yIChjb25zdCBrZXkgb2YgWyJjb25jYXQiLCAibWF0
Y2giLCAicGFkU3RhcnQiLCAiYm9sZCIsICJmaXhlZCIsICJzbWFsbCIsICJzdWIiXSkKKyAgICAg
ICAgeWllbGQgWyR2bS5jcmVhdGVHbG9iYWxPYmplY3QoKS5TdHJpbmcucHJvdG90eXBlLCBrZXld
OworCisgICAgLy8gaGFzU2V0dGVyT3JSZWFkb25seVByb3BlcnRpZXM6IHRydWUKKyAgICBmb3Ig
KGNvbnN0IGtleSBvZiBbImdldFVpbnQxNiIsICJzZXRJbnQ4IiwgImdldEZsb2F0MzIiLCAic2V0
QmlnVWludDY0Il0pCisgICAgICAgIHlpZWxkIFskdm0uY3JlYXRlR2xvYmFsT2JqZWN0KCkuRGF0
YVZpZXcucHJvdG90eXBlLCBrZXldOworICAgIGZvciAoY29uc3Qga2V5IG9mIFsidG9TdHJpbmci
LCAidmFsdWVPZiJdKQorICAgICAgICB5aWVsZCBbJHZtLmNyZWF0ZUdsb2JhbE9iamVjdCgpLlN5
bWJvbC5wcm90b3R5cGUsIGtleV07CisgICAgZm9yIChjb25zdCBrZXkgb2YgWyJmb3JtYXRSYW5n
ZSIsICJmb3JtYXRUb1BhcnRzIiwgInJlc29sdmVkT3B0aW9ucyJdKQorICAgICAgICB5aWVsZCBb
JHZtLmNyZWF0ZUdsb2JhbE9iamVjdCgpLkludGwuRGF0ZVRpbWVGb3JtYXQucHJvdG90eXBlLCBr
ZXldOworICAgIGZvciAoY29uc3Qga2V5IG9mIFsiZm9ybWF0VG9QYXJ0cyIsICJyZXNvbHZlZE9w
dGlvbnMiXSkKKyAgICAgICAgeWllbGQgWyR2bS5jcmVhdGVHbG9iYWxPYmplY3QoKS5JbnRsLk51
bWJlckZvcm1hdC5wcm90b3R5cGUsIGtleV07CisgICAgZm9yIChjb25zdCBrZXkgb2YgWyJtYXhp
bWl6ZSIsICJtaW5pbWl6ZSIsICJ0b1N0cmluZyJdKQorICAgICAgICB5aWVsZCBbJHZtLmNyZWF0
ZUdsb2JhbE9iamVjdCgpLkludGwuTG9jYWxlLnByb3RvdHlwZSwga2V5XTsKKworICAgIHlpZWxk
IFskdm0uY3JlYXRlU3RhdGljQ3VzdG9tVmFsdWUoKSwgInRlc3RTdGF0aWNWYWx1ZU5vU2V0dGVy
Il07Cit9CisKK2ZvciAoY29uc3QgW29iamVjdCwga2V5XSBvZiB0ZXN0Q2FzZXMoKSkgeworICAg
IG9iamVjdFtrZXldID0gdGVzdFZhbHVlOworCisgICAgY29uc3QgZGVzYyA9IE9iamVjdC5nZXRP
d25Qcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0LCBrZXkpOworICAgIGFzc2VydChkZXNjLnZhbHVl
ID09PSB0ZXN0VmFsdWUsIGtleSk7CisgICAgYXNzZXJ0KGRlc2Mud3JpdGFibGUsIGtleSk7Cisg
ICAgYXNzZXJ0KCFkZXNjLmVudW1lcmFibGUsIGtleSk7CisgICAgYXNzZXJ0KGRlc2MuY29uZmln
dXJhYmxlLCBrZXkpOworfQorCitmb3IgKGNvbnN0IFtvYmplY3QsIGtleV0gb2YgdGVzdENhc2Vz
KCkpIHsKKyAgICBPYmplY3QucHJldmVudEV4dGVuc2lvbnMob2JqZWN0KTsKKyAgICBvYmplY3Rb
a2V5XSA9IHRlc3RWYWx1ZTsKKworICAgIGNvbnN0IGRlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVy
dHlEZXNjcmlwdG9yKG9iamVjdCwga2V5KTsKKyAgICBhc3NlcnQoZGVzYy52YWx1ZSA9PT0gdGVz
dFZhbHVlLCBrZXkpOworICAgIGFzc2VydChkZXNjLndyaXRhYmxlLCBrZXkpOworICAgIGFzc2Vy
dCghZGVzYy5lbnVtZXJhYmxlLCBrZXkpOworICAgIGFzc2VydChkZXNjLmNvbmZpZ3VyYWJsZSwg
a2V5KTsKK30KKworZm9yIChjb25zdCBbb2JqZWN0LCBrZXldIG9mIHRlc3RDYXNlcygpKSB7Cisg
ICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iamVjdCwga2V5LCB7IGVudW1lcmFibGU6IHRydWUs
IGNvbmZpZ3VyYWJsZTogZmFsc2UgfSk7CisgICAgb2JqZWN0W2tleV0gPSB0ZXN0VmFsdWU7CisK
KyAgICBjb25zdCBkZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihvYmplY3Qs
IGtleSk7CisgICAgYXNzZXJ0KGRlc2MudmFsdWUgPT09IHRlc3RWYWx1ZSwga2V5KTsKKyAgICBh
c3NlcnQoZGVzYy53cml0YWJsZSwga2V5KTsKKyAgICBhc3NlcnQoZGVzYy5lbnVtZXJhYmxlLCBr
ZXkpOworICAgIGFzc2VydCghZGVzYy5jb25maWd1cmFibGUsIGtleSk7Cit9CisKK2ZvciAoY29u
c3QgW29iamVjdCwga2V5XSBvZiB0ZXN0Q2FzZXMoKSkgeworICAgIE9iamVjdC5kZWZpbmVQcm9w
ZXJ0eShvYmplY3QsIGtleSwgeyB3cml0YWJsZTogZmFsc2UgfSk7CisgICAgc2hvdWxkVGhyb3co
KCkgPT4geyBvYmplY3Rba2V5XSA9IHRlc3RWYWx1ZTsgfSwgIlR5cGVFcnJvcjogQXR0ZW1wdGVk
IHRvIGFzc2lnbiB0byByZWFkb25seSBwcm9wZXJ0eS4iLCBrZXkpOworCisgICAgY29uc3QgZGVz
YyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0LCBrZXkpOworICAgIGFz
c2VydChkZXNjLnZhbHVlICE9PSB0ZXN0VmFsdWUsIGtleSk7CisgICAgYXNzZXJ0KCFkZXNjLndy
aXRhYmxlLCBrZXkpOworICAgIGFzc2VydCghZGVzYy5lbnVtZXJhYmxlLCBrZXkpOworICAgIGFz
c2VydChkZXNjLmNvbmZpZ3VyYWJsZSwga2V5KTsKK30KKworZm9yIChjb25zdCBbb2JqZWN0LCBr
ZXldIG9mIHRlc3RDYXNlcygpKSB7CisgICAgY29uc3QgaGVpciA9IE9iamVjdC5jcmVhdGUob2Jq
ZWN0KTsKKyAgICBoZWlyW2tleV0gPSB0ZXN0VmFsdWU7CisKKyAgICBjb25zdCBkZXNjID0gT2Jq
ZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihoZWlyLCBrZXkpOworICAgIGFzc2VydChkZXNj
LnZhbHVlID09PSB0ZXN0VmFsdWUsIGtleSk7CisgICAgYXNzZXJ0KGRlc2Mud3JpdGFibGUsIGtl
eSk7CisgICAgYXNzZXJ0KGRlc2MuZW51bWVyYWJsZSwga2V5KTsKKyAgICBhc3NlcnQoZGVzYy5j
b25maWd1cmFibGUsIGtleSk7CisgICAgYXNzZXJ0KG9iamVjdFtrZXldICE9PSB0ZXN0VmFsdWUs
IGtleSk7Cit9CisKK2ZvciAoY29uc3QgW29iamVjdCwga2V5XSBvZiB0ZXN0Q2FzZXMoKSkgewor
ICAgIGNvbnN0IHByb3RvdHlwZSA9IE9iamVjdC5nZXRQcm90b3R5cGVPZihvYmplY3QpOworICAg
IGlmIChwcm90b3R5cGUgIT09IG51bGwpIHsKKyAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5
KHByb3RvdHlwZSwga2V5LCB7CisgICAgICAgICAgICBzZXQoKSB7IHRocm93IG5ldyBFcnJvcihg
IiR7a2V5fSIgc2V0dGVyIHNob3VsZCBiZSB1bnJlYWNoYWJsZSFgKTsgfSwKKyAgICAgICAgfSk7
CisgICAgfQorCisgICAgY29uc3QgaGVpciA9IE9iamVjdC5jcmVhdGUob2JqZWN0KTsKKyAgICBo
ZWlyW2tleV0gPSB0ZXN0VmFsdWU7CisKKyAgICBjb25zdCBkZXNjID0gT2JqZWN0LmdldE93blBy
b3BlcnR5RGVzY3JpcHRvcihoZWlyLCBrZXkpOworICAgIGFzc2VydChkZXNjLnZhbHVlID09PSB0
ZXN0VmFsdWUsIGtleSk7CisgICAgYXNzZXJ0KGRlc2Mud3JpdGFibGUsIGtleSk7CisgICAgYXNz
ZXJ0KGRlc2MuZW51bWVyYWJsZSwga2V5KTsKKyAgICBhc3NlcnQoZGVzYy5jb25maWd1cmFibGUs
IGtleSk7CisgICAgYXNzZXJ0KG9iamVjdFtrZXldICE9PSB0ZXN0VmFsdWUsIGtleSk7Cit9CisK
K2ZvciAoY29uc3QgW29iamVjdCwga2V5XSBvZiB0ZXN0Q2FzZXMoKSkgeworICAgIGNvbnN0IGhl
aXIgPSBPYmplY3QuY3JlYXRlKG9iamVjdCk7CisgICAgT2JqZWN0LnByZXZlbnRFeHRlbnNpb25z
KGhlaXIpOworCisgICAgc2hvdWxkVGhyb3coKCkgPT4geyBoZWlyW2tleV0gPSB0ZXN0VmFsdWU7
IH0sICJUeXBlRXJyb3I6IEF0dGVtcHRlZCB0byBhc3NpZ24gdG8gcmVhZG9ubHkgcHJvcGVydHku
Iiwga2V5KTsKKyAgICBhc3NlcnQoaGVpcltrZXldICE9PSB0ZXN0VmFsdWUsIGtleSk7CisgICAg
YXNzZXJ0KG9iamVjdFtrZXldICE9PSB0ZXN0VmFsdWUsIGtleSk7Cit9CisKK2ZvciAoY29uc3Qg
W29iamVjdCwga2V5XSBvZiB0ZXN0Q2FzZXMoKSkgeworICAgIGNvbnN0IHRhcmdldCA9IHt9Owor
ICAgIGFzc2VydChSZWZsZWN0LnNldCh0YXJnZXQsIGtleSwgdGVzdFZhbHVlLCBvYmplY3QpLCBr
ZXkpOworICAgIGFzc2VydCghdGFyZ2V0Lmhhc093blByb3BlcnR5KGtleSksIGtleSk7CisKKyAg
ICBjb25zdCBkZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QsIGtl
eSk7CisgICAgYXNzZXJ0KGRlc2MudmFsdWUgPT09IHRlc3RWYWx1ZSwga2V5KTsKKyAgICBhc3Nl
cnQoZGVzYy53cml0YWJsZSwga2V5KTsKKyAgICBhc3NlcnQoIWRlc2MuZW51bWVyYWJsZSwga2V5
KTsKKyAgICBhc3NlcnQoZGVzYy5jb25maWd1cmFibGUsIGtleSk7Cit9CkluZGV4OiBKU1Rlc3Rz
L3N0cmVzcy9wdXQtdG8tcHJpbWl0aXZlLW5vbi1yZWlmaWVkLXN0YXRpYy1jdXN0b20uanMKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gSlNUZXN0cy9zdHJlc3MvcHV0LXRvLXByaW1pdGl2ZS1ub24tcmVpZmllZC1z
dGF0aWMtY3VzdG9tLmpzCShub25leGlzdGVudCkKKysrIEpTVGVzdHMvc3RyZXNzL3B1dC10by1w
cmltaXRpdmUtbm9uLXJlaWZpZWQtc3RhdGljLWN1c3RvbS5qcwkod29ya2luZyBjb3B5KQpAQCAt
MCwwICsxLDY0IEBACisidXNlIHN0cmljdCI7CisKK2Z1bmN0aW9uIHNob3VsZEJlKGFjdHVhbCwg
ZXhwZWN0ZWQpIHsKKyAgICBpZiAoYWN0dWFsICE9PSBleHBlY3RlZCkKKyAgICAgICAgdGhyb3cg
bmV3IEVycm9yKGBCYWQgdmFsdWU6ICR7YWN0dWFsfSFgKTsKK30KKworZnVuY3Rpb24gc2hvdWxk
VGhyb3coZnVuYywgZXJyb3JNZXNzYWdlKSB7CisgICAgbGV0IGVycm9yVGhyb3duID0gZmFsc2U7
CisgICAgdHJ5IHsKKyAgICAgICAgZnVuYygpOworICAgIH0gY2F0Y2ggKGVycm9yKSB7CisgICAg
ICAgIGVycm9yVGhyb3duID0gdHJ1ZTsKKyAgICAgICAgaWYgKFN0cmluZyhlcnJvcikgIT09IGVy
cm9yTWVzc2FnZSkKKyAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgQmFkIGVycm9yOiAke2Vy
cm9yfWApOworICAgIH0KKyAgICBpZiAoIWVycm9yVGhyb3duKQorICAgICAgICB0aHJvdyBuZXcg
RXJyb3IoIkRpZG4ndCB0aHJvdyEiKTsKK30KKworY29uc3QgcG9pc29uZWRTZXR0ZXIgPSB7IHNl
dCgpIHsgdGhyb3cgbmV3IEVycm9yKCJPYmplY3QucHJvdG90eXBlIHNldHRlciBzaG91bGQgYmUg
dW5yZWFjaGFibGUhIik7IH0gfTsKK2NvbnN0IHByaW1pdGl2ZXMgPSBbdHJ1ZSwgMSwgIiIsIFN5
bWJvbCgpLCAwbl07CisKKyhmdW5jdGlvbiB0ZXN0U3RhdGljQ3VzdG9tVmFsdWUoKSB7CisgICAg
T2JqZWN0LmRlZmluZVByb3BlcnRpZXMoT2JqZWN0LnByb3RvdHlwZSwgeworICAgICAgICB0ZXN0
U3RhdGljVmFsdWU6IHBvaXNvbmVkU2V0dGVyLAorICAgICAgICB0ZXN0U3RhdGljVmFsdWVOb1Nl
dHRlcjogcG9pc29uZWRTZXR0ZXIsCisgICAgICAgIHRlc3RTdGF0aWNWYWx1ZVJlYWRPbmx5OiBw
b2lzb25lZFNldHRlciwKKyAgICB9KTsKKworICAgIGZvciAoY29uc3QgcHJpbWl0aXZlIG9mIHBy
aW1pdGl2ZXMpIHsKKyAgICAgICAgY29uc3QgcHJpbWl0aXZlUHJvdG90eXBlID0gT2JqZWN0Lmdl
dFByb3RvdHlwZU9mKHByaW1pdGl2ZSk7CisgICAgICAgIGNvbnN0IHN0YXRpY0N1c3RvbVZhbHVl
ID0gJHZtLmNyZWF0ZVN0YXRpY0N1c3RvbVZhbHVlKCk7CisgICAgICAgIE9iamVjdC5zZXRQcm90
b3R5cGVPZihwcmltaXRpdmVQcm90b3R5cGUsIHN0YXRpY0N1c3RvbVZhbHVlKTsKKworICAgICAg
ICBwcmltaXRpdmUudGVzdFN0YXRpY1ZhbHVlID0gMTsKKyAgICAgICAgc2hvdWxkQmUoc3RhdGlj
Q3VzdG9tVmFsdWUudGVzdFN0YXRpY1ZhbHVlLCAxKTsKKyAgICAgICAgc2hvdWxkVGhyb3coKCkg
PT4geyBwcmltaXRpdmUudGVzdFN0YXRpY1ZhbHVlID0gMTsgfSwgIlR5cGVFcnJvcjogQXR0ZW1w
dGVkIHRvIGFzc2lnbiB0byByZWFkb25seSBwcm9wZXJ0eS4iKTsKKworICAgICAgICBzaG91bGRU
aHJvdygoKSA9PiB7IHByaW1pdGl2ZS50ZXN0U3RhdGljVmFsdWVOb1NldHRlciA9IDE7IH0sICJU
eXBlRXJyb3I6IEF0dGVtcHRlZCB0byBhc3NpZ24gdG8gcmVhZG9ubHkgcHJvcGVydHkuIik7Cisg
ICAgICAgIHNob3VsZFRocm93KCgpID0+IHsgcHJpbWl0aXZlLnRlc3RTdGF0aWNWYWx1ZVJlYWRP
bmx5ID0gMTsgfSwgIlR5cGVFcnJvcjogQXR0ZW1wdGVkIHRvIGFzc2lnbiB0byByZWFkb25seSBw
cm9wZXJ0eS4iKTsKKyAgICAgICAgT2JqZWN0LnNldFByb3RvdHlwZU9mKHByaW1pdGl2ZVByb3Rv
dHlwZSwgT2JqZWN0LnByb3RvdHlwZSk7CisgICAgfQorfSkoKTsKKworKGZ1bmN0aW9uIHRlc3RT
dGF0aWNDdXN0b21BY2Nlc3NvcigpIHsKKyAgICBPYmplY3QuZGVmaW5lUHJvcGVydGllcyhPYmpl
Y3QucHJvdG90eXBlLCB7CisgICAgICAgIHRlc3RTdGF0aWNBY2Nlc3NvcjogcG9pc29uZWRTZXR0
ZXIsCisgICAgICAgIHRlc3RTdGF0aWNBY2Nlc3NvclJlYWRPbmx5OiBwb2lzb25lZFNldHRlciwK
KyAgICB9KTsKKworICAgIGZvciAoY29uc3QgcHJpbWl0aXZlIG9mIHByaW1pdGl2ZXMpIHsKKyAg
ICAgICAgY29uc3QgcHJpbWl0aXZlUHJvdG90eXBlID0gT2JqZWN0LmdldFByb3RvdHlwZU9mKHBy
aW1pdGl2ZSk7CisgICAgICAgIE9iamVjdC5zZXRQcm90b3R5cGVPZihwcmltaXRpdmVQcm90b3R5
cGUsICR2bS5jcmVhdGVTdGF0aWNDdXN0b21BY2Nlc3NvcigpKTsKKworICAgICAgICBmb3IgKGxl
dCBpID0gMDsgaSA8IDEwMDA7IGkrKykgeworICAgICAgICAgICAgcHJpbWl0aXZlLnRlc3RTdGF0
aWNBY2Nlc3NvciA9IGk7CisgICAgICAgICAgICBzaG91bGRCZShwcmltaXRpdmVQcm90b3R5cGUu
dGVzdEZpZWxkLCBpKTsKKyAgICAgICAgfQorCisgICAgICAgIHNob3VsZFRocm93KCgpID0+IHsg
cHJpbWl0aXZlLnRlc3RTdGF0aWNBY2Nlc3NvclJlYWRPbmx5ID0gMTsgfSwgIlR5cGVFcnJvcjog
QXR0ZW1wdGVkIHRvIGFzc2lnbiB0byByZWFkb25seSBwcm9wZXJ0eS4iKTsKKyAgICAgICAgT2Jq
ZWN0LnNldFByb3RvdHlwZU9mKHByaW1pdGl2ZVByb3RvdHlwZSwgT2JqZWN0LnByb3RvdHlwZSk7
CisgICAgfQorfSkoKTsKSW5kZXg6IEpTVGVzdHMvc3RyZXNzL3B1dC10by1wcmltaXRpdmUuanMK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gSlNUZXN0cy9zdHJlc3MvcHV0LXRvLXByaW1pdGl2ZS5qcwkobm9uZXhp
c3RlbnQpCisrKyBKU1Rlc3RzL3N0cmVzcy9wdXQtdG8tcHJpbWl0aXZlLmpzCSh3b3JraW5nIGNv
cHkpCkBAIC0wLDAgKzEsMjcgQEAKK2Z1bmN0aW9uIHNob3VsZEJlKGFjdHVhbCwgZXhwZWN0ZWQp
IHsKKyAgICBpZiAoYWN0dWFsICE9PSBleHBlY3RlZCkKKyAgICAgICAgdGhyb3cgbmV3IEVycm9y
KGBCYWQgdmFsdWU6ICR7YWN0dWFsfSFgKTsKK30KKworZnVuY3Rpb24gc2hvdWxkVGhyb3coZnVu
YywgZXJyb3JNZXNzYWdlKSB7CisgICAgbGV0IGVycm9yVGhyb3duID0gZmFsc2U7CisgICAgdHJ5
IHsKKyAgICAgICAgZnVuYygpOworICAgIH0gY2F0Y2ggKGVycm9yKSB7CisgICAgICAgIGVycm9y
VGhyb3duID0gdHJ1ZTsKKyAgICAgICAgaWYgKFN0cmluZyhlcnJvcikgIT09IGVycm9yTWVzc2Fn
ZSkKKyAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgQmFkIGVycm9yOiAke2Vycm9yfWApOwor
ICAgIH0KKyAgICBpZiAoIWVycm9yVGhyb3duKQorICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIkRp
ZG4ndCB0aHJvdyEiKTsKK30KKworKGZ1bmN0aW9uIHN0cmluZ0xlbmd0aCgpIHsKKyAgICBsZXQg
c3RyID0gImZvbyI7CisKKyAgICBmb3IgKGxldCBpID0gMDsgaSA8IDFlNTsgaSsrKSB7CisgICAg
ICAgIHN0ci5sZW5ndGggPSAwOworICAgICAgICBzaG91bGRCZShzdHIubGVuZ3RoLCAzKTsKKyAg
ICAgICAgc2hvdWxkVGhyb3coKCkgPT4geyAidXNlIHN0cmljdCI7ICJiYXIiLmxlbmd0aCA9IDM7
IH0sICJUeXBlRXJyb3I6IEF0dGVtcHRlZCB0byBhc3NpZ24gdG8gcmVhZG9ubHkgcHJvcGVydHku
Iik7CisgICAgfQorfSkoKTsKSW5kZXg6IEpTVGVzdHMvc3RyZXNzL3B1dC10by1wcm90by1jaGFp
bi1vdmVycmlkZXMtcHV0LmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEpTVGVzdHMvc3RyZXNzL3B1dC10by1w
cm90by1jaGFpbi1vdmVycmlkZXMtcHV0LmpzCShub25leGlzdGVudCkKKysrIEpTVGVzdHMvc3Ry
ZXNzL3B1dC10by1wcm90by1jaGFpbi1vdmVycmlkZXMtcHV0LmpzCSh3b3JraW5nIGNvcHkpCkBA
IC0wLDAgKzEsMTczIEBACitjb25zdCBURVNUX1ZBTFVFID0gMTA2MjYzMDcxMzsgLy8gQXJyYXkn
cyAibGVuZ3RoIiBpcyByZXF1aXJlZCB0byBiZSBpbnQzMgorY29uc3QgY2xlYW5VcE1hcCA9IG5l
dyBXZWFrTWFwOworY29uc3QgaGFzT3duID0gKG9iaiwga2V5KSA9PiBPYmplY3QucHJvdG90eXBl
Lmhhc093blByb3BlcnR5LmNhbGwob2JqLCBrZXkpOworCit0ZXN0U2V0UmVzdWx0KCgpID0+IFsx
LCAyXSwgImxlbmd0aCIsIHRydWUpOwordGVzdFNldFJlc3VsdCgKKyAgICAoKSA9PiBPYmplY3Qu
ZGVmaW5lUHJvcGVydHkobmV3IEFycmF5LCAibGVuZ3RoIiwgeyB3cml0YWJsZTogZmFsc2UgfSks
CisgICAgImxlbmd0aCIsCisgICAgZmFsc2UsCispOworCit0ZXN0U2V0UmVzdWx0KCgpID0+IG5l
dyBTdHJpbmcsICJsZW5ndGgiLCBmYWxzZSk7Cit0ZXN0U2V0UmVzdWx0KCgpID0+IG5ldyBSZWdF
eHAsICJsYXN0SW5kZXgiLCB0cnVlKTsKK3Rlc3RTZXRSZXN1bHQoCisgICAgKCkgPT4gT2JqZWN0
LmRlZmluZVByb3BlcnR5KC8oPzopL2csICJsYXN0SW5kZXgiLCB7IHdyaXRhYmxlOiBmYWxzZSB9
KSwKKyAgICAibGFzdEluZGV4IiwKKyAgICBmYWxzZSwKKyk7CisKK2ZvciAoY29uc3Qga2V5IG9m
IFsibGluZSIsICJjb2x1bW4iLCAic291cmNlVVJMIiwgInN0YWNrIl0pCisgICAgdGVzdFNldFJl
c3VsdCgoKSA9PiBuZXcgRXJyb3IsIGtleSwgdHJ1ZSk7CisKK2NvbnN0IG1hcHBlZEFyZ3VtZW50
cyA9ICgpID0+IChmdW5jdGlvbihhLCBiKSB7IHJldHVybiBhcmd1bWVudHM7IH0pKDEsIDIpOwor
dGVzdFNldFJlc3VsdChtYXBwZWRBcmd1bWVudHMsICJjYWxsZWUiLCB0cnVlKTsKK3Rlc3RTZXRS
ZXN1bHQobWFwcGVkQXJndW1lbnRzLCAibGVuZ3RoIiwgdHJ1ZSk7Cit0ZXN0U2V0UmVzdWx0KG1h
cHBlZEFyZ3VtZW50cywgU3ltYm9sLml0ZXJhdG9yLCB0cnVlKTsKKworY29uc3QgdW5tYXBwZWRB
cmd1bWVudHMgPSBmdW5jdGlvbigpIHsgInVzZSBzdHJpY3QiOyByZXR1cm4gYXJndW1lbnRzOyB9
OwordGVzdFNldFJlc3VsdCh1bm1hcHBlZEFyZ3VtZW50cywgImxlbmd0aCIsIHRydWUpOwordGVz
dFNldFJlc3VsdCh1bm1hcHBlZEFyZ3VtZW50cywgU3ltYm9sLml0ZXJhdG9yLCB0cnVlKTsKKwor
dmFyIGZvbzsKK2Z1bmN0aW9uIGJhcigpIHt9Citmb3IgKGNvbnN0IGtleSBvZiBbImZvbyIsICJi
YXIiLCAicGFyc2VJbnQiXSkKKyAgICB0ZXN0U2V0UmVzdWx0KCgpID0+IGdsb2JhbFRoaXMsIGtl
eSwgdHJ1ZSk7CisKK2ZvciAoY29uc3Qga2V5IG9mIFsiSW5maW5pdHkiLCAiTmFOIiwgInVuZGVm
aW5lZCJdKQorICAgIHRlc3RTZXRSZXN1bHQoKCkgPT4gJHZtLmNyZWF0ZUdsb2JhbE9iamVjdCgp
Lmdsb2JhbFRoaXMsIGtleSwgZmFsc2UpOworCitmb3IgKGNvbnN0IGtleSBvZiBbIm5hbWUiLCAi
bGVuZ3RoIl0pIHsKKyAgICB0ZXN0U2V0UmVzdWx0KCgpID0+IGZ1bmN0aW9uKCkge30uYmluZCgp
LCBrZXksIGZhbHNlKTsKKyAgICB0ZXN0U2V0UmVzdWx0KAorICAgICAgICAoKSA9PiBPYmplY3Qu
ZGVmaW5lUHJvcGVydHkoZnVuY3Rpb24oKSB7fSwga2V5LCB7IHdyaXRhYmxlOiB0cnVlIH0pLAor
ICAgICAgICBrZXksCisgICAgICAgIHRydWUsCisgICAgKTsKKworICAgIHRlc3RTZXRSZXN1bHQo
KCkgPT4gKCkgPT4geyAidXNlIHN0cmljdCI7IH0sIGtleSwgZmFsc2UpOworICAgIHRlc3RTZXRS
ZXN1bHQoCisgICAgICAgICgpID0+IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShwYXJzZUZsb2F0LCBr
ZXksIHsgd3JpdGFibGU6IHRydWUgfSksCisgICAgICAgIGtleSwKKyAgICAgICAgdHJ1ZSwKKyAg
ICApOworfQorCit0ZXN0U2V0UmVzdWx0KCgpID0+IGZ1bmN0aW9uKCkgeyAidXNlIHN0cmljdCI7
IH0sICJwcm90b3R5cGUiLCB0cnVlKTsKK3Rlc3RTZXRSZXN1bHQoCisgICAgKCkgPT4gT2JqZWN0
LmRlZmluZVByb3BlcnR5KGZ1bmN0aW9uKCkge30sICJwcm90b3R5cGUiLCB7IHdyaXRhYmxlOiBm
YWxzZSB9KSwKKyAgICAicHJvdG90eXBlIiwKKyAgICBmYWxzZSwKKyk7CisKK3Rlc3RTZXRSZXN1
bHQoKCkgPT4gZnVuY3Rpb24oKSB7fSwgImFyZ3VtZW50cyIsIGZhbHNlKTsKK3Rlc3RTZXRSZXN1
bHQoKCkgPT4gZnVuY3Rpb24oKSB7fSwgImNhbGxlciIsIGZhbHNlKTsKKworLy8gPT09IGhhcm5l
c3MgPT09CisKK2Z1bmN0aW9uIHRlc3RTZXRSZXN1bHQoZ2V0VGFyZ2V0LCBrZXksIGV4cGVjdGVk
UmVzdWx0KSB7CisgICAgZm9yIChjb25zdCBwcmltaXRpdmUgb2YgW3RydWUsIDEsICJmb28iLCBT
eW1ib2woKSwgMG5dKSB7CisgICAgICAgIGNvbnN0IHByaW1pdGl2ZVByb3RvdHlwZSA9IE9iamVj
dC5nZXRQcm90b3R5cGVPZihwcmltaXRpdmUpOworICAgICAgICBjb25zdCBnZXRUYXJnZXRXaXRo
RHVtbXlTZXR0ZXJPblByb3RvdHlwZSA9IHdpdGhTZXR0ZXJPblByb3RvdHlwZSgoKSA9PiB7Cisg
ICAgICAgICAgICBjb25zdCB0YXJnZXQgPSBnZXRUYXJnZXQoKTsKKyAgICAgICAgICAgIGlmIChP
YmplY3QuZ2V0UHJvdG90eXBlT2YodGFyZ2V0KSAhPT0gcHJpbWl0aXZlUHJvdG90eXBlKQorICAg
ICAgICAgICAgICAgIE9iamVjdC5zZXRQcm90b3R5cGVPZihwcmltaXRpdmVQcm90b3R5cGUsIHRh
cmdldCk7CisgICAgICAgICAgICByZXR1cm4gdGFyZ2V0OworICAgICAgICB9LCBrZXksICgpID0+
IHt9KTsKKworICAgICAgICB0ZXN0U2V0UmVzdWx0SW50ZXJuYWwoZ2V0VGFyZ2V0V2l0aER1bW15
U2V0dGVyT25Qcm90b3R5cGUsICgpID0+IHByaW1pdGl2ZSwga2V5LCBmYWxzZSk7CisgICAgICAg
IE9iamVjdC5zZXRQcm90b3R5cGVPZihwcmltaXRpdmVQcm90b3R5cGUsIE9iamVjdC5wcm90b3R5
cGUpOworICAgIH0KKworICAgIGNvbnN0IGdldFRhcmdldFdpdGhQb2lzb25lZFNldHRlck9uUHJv
dG90eXBlID0gd2l0aFNldHRlck9uUHJvdG90eXBlKGdldFRhcmdldCwga2V5LCAoKSA9PiB7IHRo
cm93IG5ldyBFcnJvcihgJHtTdHJpbmcoa2V5KX0gc2V0dGVyIHNob3VsZCBiZSB1bnJlYWNoYWJs
ZSFgKTsgfSk7CisgICAgdGVzdFNldFJlc3VsdEludGVybmFsKGdldFRhcmdldFdpdGhQb2lzb25l
ZFNldHRlck9uUHJvdG90eXBlLCB0ID0+IE9iamVjdC5jcmVhdGUodCksIGtleSwgZXhwZWN0ZWRS
ZXN1bHQpOworICAgIHRlc3RTZXRSZXN1bHRJbnRlcm5hbChnZXRUYXJnZXRXaXRoUG9pc29uZWRT
ZXR0ZXJPblByb3RvdHlwZSwgdCA9PiBPYmplY3QuY3JlYXRlKE9iamVjdC5jcmVhdGUodCkpLCBr
ZXksIGV4cGVjdGVkUmVzdWx0KTsKKyAgICB0ZXN0U2V0UmVzdWx0SW50ZXJuYWwoZ2V0VGFyZ2V0
V2l0aFBvaXNvbmVkU2V0dGVyT25Qcm90b3R5cGUsIHQgPT4gbmV3IFByb3h5KHQsIHt9KSwga2V5
LCBleHBlY3RlZFJlc3VsdCk7CisgICAgdGVzdFNldFJlc3VsdEludGVybmFsKGdldFRhcmdldFdp
dGhQb2lzb25lZFNldHRlck9uUHJvdG90eXBlLCB0ID0+IG5ldyBQcm94eSh0LCBSZWZsZWN0KSwg
a2V5LCBleHBlY3RlZFJlc3VsdCk7CisgICAgdGVzdFNldFJlc3VsdEludGVybmFsKGdldFRhcmdl
dFdpdGhQb2lzb25lZFNldHRlck9uUHJvdG90eXBlLCB0ID0+ICR2bS5jcmVhdGVQcm94eShPYmpl
Y3QuY3JlYXRlKHQpKSwga2V5LCBleHBlY3RlZFJlc3VsdCk7Cit9CisKK2Z1bmN0aW9uIHdpdGhT
ZXR0ZXJPblByb3RvdHlwZShnZXRUYXJnZXQsIGtleSwgc2V0KSB7CisgICAgInVzZSBzdHJpY3Qi
OworICAgIHJldHVybiAoKSA9PiB7CisgICAgICAgIGNvbnN0IHRhcmdldCA9IGdldFRhcmdldCgp
OworICAgICAgICBjb25zdCB0YXJnZXRQcm90b3R5cGUgPSBPYmplY3QuZ2V0UHJvdG90eXBlT2Yo
dGFyZ2V0KTsKKyAgICAgICAgY29uc3QgbmV3RGVzY3JpcHRvciA9IHsgc2V0LCBjb25maWd1cmFi
bGU6IHRydWUgfTsKKworICAgICAgICBpZiAoa2V5ID09PSAibGVuZ3RoIiAmJiAhT2JqZWN0Lmdl
dE93blByb3BlcnR5RGVzY3JpcHRvcih0YXJnZXQsIGtleSkuY29uZmlndXJhYmxlKSB7CisgICAg
ICAgICAgICBjb25zdCBuZXdQcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKG51bGwsIHsgW2tleV06
IG5ld0Rlc2NyaXB0b3IgfSk7CisgICAgICAgICAgICBPYmplY3Quc2V0UHJvdG90eXBlT2YodGFy
Z2V0LCBuZXdQcm90b3R5cGUpOworICAgICAgICAgICAgY2xlYW5VcE1hcC5zZXQodGFyZ2V0LCAo
KSA9PiB7IE9iamVjdC5zZXRQcm90b3R5cGVPZih0YXJnZXQsIHRhcmdldFByb3RvdHlwZSk7IH0p
OworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgY29uc3QgcHJldkRlc2NyaXB0b3IgPSBP
YmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRhcmdldFByb3RvdHlwZSwga2V5KTsKKyAg
ICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXRQcm90b3R5cGUsIGtleSwgbmV3
RGVzY3JpcHRvcik7CisgICAgICAgICAgICBjbGVhblVwTWFwLnNldCh0YXJnZXQsIHByZXZEZXNj
cmlwdG9yCisgICAgICAgICAgICAgICAgPyAoKSA9PiB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0
YXJnZXRQcm90b3R5cGUsIGtleSwgcHJldkRlc2NyaXB0b3IpOyB9CisgICAgICAgICAgICAgICAg
OiAoKSA9PiB7IGRlbGV0ZSB0YXJnZXRQcm90b3R5cGVba2V5XTsgfSk7CisgICAgICAgIH0KKwor
ICAgICAgICByZXR1cm4gdGFyZ2V0OworICAgIH07Cit9CisKK2Z1bmN0aW9uIHRlc3RTZXRSZXN1
bHRJbnRlcm5hbChnZXRUYXJnZXQsIGdldFJlY2VpdmVyLCBrZXksIGV4cGVjdGVkUmVzdWx0KSB7
CisgICAgdGVzdFNldFJlc3VsdFNsb3BweShnZXRUYXJnZXQsIGdldFJlY2VpdmVyLCBrZXksIGV4
cGVjdGVkUmVzdWx0KTsKKyAgICB0ZXN0U2V0UmVzdWx0U3RyaWN0KGdldFRhcmdldCwgZ2V0UmVj
ZWl2ZXIsIGtleSwgZXhwZWN0ZWRSZXN1bHQpOworICAgIHRlc3RTZXRSZXN1bHRSZWZsZWN0U2V0
KGdldFRhcmdldCwgZ2V0UmVjZWl2ZXIsIGtleSwgZXhwZWN0ZWRSZXN1bHQpOworfQorCitmdW5j
dGlvbiB0ZXN0U2V0UmVzdWx0U2xvcHB5KGdldFRhcmdldCwgZ2V0UmVjZWl2ZXIsIGtleSwgZXhw
ZWN0ZWRSZXN1bHQpIHsKKyAgICBjb25zdCB0YXJnZXQgPSBnZXRUYXJnZXQoKTsKKyAgICBjb25z
dCByZWNlaXZlciA9IGdldFJlY2VpdmVyKHRhcmdldCk7CisKKyAgICByZWNlaXZlcltrZXldID0g
VEVTVF9WQUxVRTsKKyAgICBzaG91bGRCZShyZWNlaXZlcltrZXldID09PSBURVNUX1ZBTFVFLCBl
eHBlY3RlZFJlc3VsdCwga2V5KTsKKyAgICBpZiAoZXhwZWN0ZWRSZXN1bHQpCisgICAgICAgIHNo
b3VsZEJlKGhhc093bihyZWNlaXZlciwga2V5KSwgdHJ1ZSwga2V5KTsKKyAgICBjbGVhblVwTWFw
LmdldCh0YXJnZXQpKCk7Cit9CisKK2Z1bmN0aW9uIHRlc3RTZXRSZXN1bHRTdHJpY3QoZ2V0VGFy
Z2V0LCBnZXRSZWNlaXZlciwga2V5LCBleHBlY3RlZFJlc3VsdCkgeworICAgICJ1c2Ugc3RyaWN0
IjsKKyAgICBjb25zdCB0YXJnZXQgPSBnZXRUYXJnZXQoKTsKKyAgICBjb25zdCByZWNlaXZlciA9
IGdldFJlY2VpdmVyKHRhcmdldCk7CisKKyAgICBpZiAoZXhwZWN0ZWRSZXN1bHQpIHsKKyAgICAg
ICAgcmVjZWl2ZXJba2V5XSA9IFRFU1RfVkFMVUU7CisgICAgICAgIHNob3VsZEJlKHJlY2VpdmVy
W2tleV0sIFRFU1RfVkFMVUUsIGtleSk7CisgICAgICAgIHNob3VsZEJlKGhhc093bihyZWNlaXZl
ciwga2V5KSwgdHJ1ZSwga2V5KTsKKyAgICB9IGVsc2UKKyAgICAgICAgc2hvdWxkVGhyb3dUeXBl
RXJyb3IoKCkgPT4geyByZWNlaXZlcltrZXldID0gVEVTVF9WQUxVRTsgfSwga2V5KTsKKyAgICBj
bGVhblVwTWFwLmdldCh0YXJnZXQpKCk7Cit9CisKK2Z1bmN0aW9uIHRlc3RTZXRSZXN1bHRSZWZs
ZWN0U2V0KGdldFRhcmdldCwgZ2V0UmVjZWl2ZXIsIGtleSwgZXhwZWN0ZWRSZXN1bHQpIHsKKyAg
ICAidXNlIHN0cmljdCI7CisgICAgY29uc3QgdGFyZ2V0ID0gZ2V0VGFyZ2V0KCk7CisgICAgY29u
c3QgcmVjZWl2ZXIgPSBnZXRSZWNlaXZlcih0YXJnZXQpOworCisgICAgaWYgKHJlY2VpdmVyID09
PSBPYmplY3QocmVjZWl2ZXIpKQorICAgICAgICBzaG91bGRCZShSZWZsZWN0LnNldChyZWNlaXZl
ciwga2V5LCBURVNUX1ZBTFVFKSwgZXhwZWN0ZWRSZXN1bHQsIGtleSk7CisgICAgc2hvdWxkQmUo
UmVmbGVjdC5zZXQodGFyZ2V0LCBrZXksIFRFU1RfVkFMVUUsIHJlY2VpdmVyKSwgZXhwZWN0ZWRS
ZXN1bHQsIGtleSk7CisgICAgaWYgKGV4cGVjdGVkUmVzdWx0KQorICAgICAgICBzaG91bGRCZSho
YXNPd24ocmVjZWl2ZXIsIGtleSksIHRydWUsIGtleSk7CisgICAgY2xlYW5VcE1hcC5nZXQodGFy
Z2V0KSgpOworfQorCitmdW5jdGlvbiBzaG91bGRCZShhY3R1YWwsIGV4cGVjdGVkLCBrZXkpIHsK
KyAgICBpZiAoYWN0dWFsICE9PSBleHBlY3RlZCkKKyAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBL
ZXk6ICR7U3RyaW5nKGtleSl9LiAke2FjdHVhbH0gIT09ICR7ZXhwZWN0ZWR9YCk7Cit9CisKK2Z1
bmN0aW9uIHNob3VsZFRocm93VHlwZUVycm9yKGZ1bmMsIGtleSkgeworICAgIGxldCBlcnJvclRo
cm93biA9IGZhbHNlOworICAgIHRyeSB7CisgICAgICAgIGZ1bmMoKTsKKyAgICB9IGNhdGNoIChl
cnJvcikgeworICAgICAgICBlcnJvclRocm93biA9IHRydWU7CisgICAgICAgIGlmIChlcnJvci5j
b25zdHJ1Y3RvciAhPT0gVHlwZUVycm9yKQorICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBL
ZXk6ICR7U3RyaW5nKGtleSl9LiBCYWQgZXJyb3I6ICR7ZXJyb3J9YCk7CisgICAgfQorICAgIGlm
ICghZXJyb3JUaHJvd24pCisgICAgICAgIHRocm93IG5ldyBFcnJvcihgS2V5OiAke1N0cmluZyhr
ZXkpfS4gRGlkbid0IHRocm93IWApOworfQpJbmRleDogSlNUZXN0cy9zdHJlc3MvdHlwZWQtYXJy
YXktY2Fub25pY2FsLW51bWVyaWMtaW5kZXgtc3RyaW5nLXNldC5qcwo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBK
U1Rlc3RzL3N0cmVzcy90eXBlZC1hcnJheS1jYW5vbmljYWwtbnVtZXJpYy1pbmRleC1zdHJpbmct
c2V0LmpzCShub25leGlzdGVudCkKKysrIEpTVGVzdHMvc3RyZXNzL3R5cGVkLWFycmF5LWNhbm9u
aWNhbC1udW1lcmljLWluZGV4LXN0cmluZy1zZXQuanMJKHdvcmtpbmcgY29weSkKQEAgLTAsMCAr
MSw1OCBAQAorJ3VzZSBzdHJpY3QnOworY29uc3QgVHlwZWRBcnJheXMgPSBbVWludDhDbGFtcGVk
QXJyYXksIFVpbnQ4QXJyYXksIFVpbnQxNkFycmF5LCBVaW50MzJBcnJheSwgSW50OEFycmF5LCBJ
bnQxNkFycmF5LCBJbnQzMkFycmF5LCBGbG9hdDMyQXJyYXksIEZsb2F0NjRBcnJheV07Citjb25z
dCBjYW5vbmljYWxOdW1lcmljSW5kZXhTdHJpbmdzID0gWyctMCcsICctMScsICctMy4xNCcsICdJ
bmZpbml0eScsICctSW5maW5pdHknLCAnTmFOJywgJzAuNScsICc0Mjk0OTY3Mjk1JywgJzQyOTQ5
NjcyOTYnXTsKKworZnVuY3Rpb24gYXNzZXJ0KHgsIGtleSkgeworICAgIGlmICgheCkKKyAgICAg
ICAgdGhyb3cgbmV3IEVycm9yKGBCYWQgYXNzZXJ0aW9uISBLZXk6ICcke2tleX0nYCk7Cit9CisK
K2ZvciAoY29uc3QgVHlwZWRBcnJheSBvZiBUeXBlZEFycmF5cykgeworICAgIGZvciAoY29uc3Qg
a2V5IG9mIGNhbm9uaWNhbE51bWVyaWNJbmRleFN0cmluZ3MpIHsKKyAgICAgICAgY29uc3QgYXNz
ZXJ0UHJvdG90eXBlUHJvcGVydHlJc1VucmVhY2hhYmxlID0gKCkgPT4geworICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgIGNvbnN0IHRBID0gbmV3IFR5cGVkQXJyYXk7CisgICAgICAgICAg
ICAgICAgdEFba2V5XSA9IDE7CisgICAgICAgICAgICAgICAgYXNzZXJ0KCF0QS5oYXNPd25Qcm9w
ZXJ0eShrZXkpLCBrZXkpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgY29uc3QgdEEgPSBuZXcgVHlwZWRBcnJheTsKKyAgICAgICAgICAgICAgICBjb25z
dCBoZWlyID0gT2JqZWN0LmNyZWF0ZSh0QSk7CisgICAgICAgICAgICAgICAgaGVpcltrZXldID0g
MjsKKworICAgICAgICAgICAgICAgIGFzc2VydCghdEEuaGFzT3duUHJvcGVydHkoa2V5KSwga2V5
KTsKKyAgICAgICAgICAgICAgICBhc3NlcnQoIWhlaXIuaGFzT3duUHJvcGVydHkoa2V5KSwga2V5
KTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGNvbnN0
IHRhcmdldCA9IHt9OworICAgICAgICAgICAgICAgIGNvbnN0IHJlY2VpdmVyID0gbmV3IFR5cGVk
QXJyYXk7CisKKyAgICAgICAgICAgICAgICBhc3NlcnQoIVJlZmxlY3Quc2V0KHRhcmdldCwga2V5
LCAzLCByZWNlaXZlciksIGtleSk7CisgICAgICAgICAgICAgICAgYXNzZXJ0KCF0YXJnZXQuaGFz
T3duUHJvcGVydHkoa2V5KSwga2V5KTsKKyAgICAgICAgICAgICAgICBhc3NlcnQoIXJlY2VpdmVy
Lmhhc093blByb3BlcnR5KGtleSksIGtleSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICBjb25zdCB0QSA9IG5ldyBUeXBlZEFycmF5OworICAgICAgICAg
ICAgICAgIGNvbnN0IHRhcmdldCA9IE9iamVjdC5jcmVhdGUodEEpOworICAgICAgICAgICAgICAg
IGNvbnN0IHJlY2VpdmVyID0ge307CisKKyAgICAgICAgICAgICAgICBhc3NlcnQoUmVmbGVjdC5z
ZXQodGFyZ2V0LCBrZXksIDQsIHJlY2VpdmVyKSwga2V5KTsKKyAgICAgICAgICAgICAgICBhc3Nl
cnQoIXRBLmhhc093blByb3BlcnR5KGtleSksIGtleSk7CisgICAgICAgICAgICAgICAgYXNzZXJ0
KCF0YXJnZXQuaGFzT3duUHJvcGVydHkoa2V5KSwga2V5KTsKKyAgICAgICAgICAgICAgICBhc3Nl
cnQoIXJlY2VpdmVyLmhhc093blByb3BlcnR5KGtleSksIGtleSk7CisgICAgICAgICAgICB9Cisg
ICAgICAgIH07CisKKyAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFR5cGVkQXJyYXkucHJv
dG90eXBlLCBrZXksIHsKKyAgICAgICAgICAgIHNldCgpIHsgdGhyb3cgbmV3IEVycm9yKGAke1R5
cGVkQXJyYXkubmFtZX0ucHJvdG90eXBlWycke2tleX0nXSBzZXR0ZXIgc2hvdWxkIGJlIHVucmVh
Y2hhYmxlIWApOyB9LAorICAgICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLAorICAgICAgICB9
KTsKKyAgICAgICAgYXNzZXJ0UHJvdG90eXBlUHJvcGVydHlJc1VucmVhY2hhYmxlKCk7CisKKyAg
ICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFR5cGVkQXJyYXkucHJvdG90eXBlLCBrZXksIHsg
d3JpdGFibGU6IGZhbHNlIH0pOworICAgICAgICBhc3NlcnRQcm90b3R5cGVQcm9wZXJ0eUlzVW5y
ZWFjaGFibGUoKTsKKyAgICB9Cit9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ2hhbmdl
TG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cJKHJldmlz
aW9uIDI3ODUzOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cJKHdvcmtpbmcg
Y29weSkKQEAgLTEsMyArMSwxMTQgQEAKKzIwMjEtMDYtMDYgIEFsZXhleSBTaHZheWthICA8c2h2
YWlrYWxlc2hAZ21haWwuY29tPgorCisgICAgICAgIFJlLWxhbmQgcjI3NjU5MiB3aXRoIGEgZml4
IGZvciBwdXQoKSBvdmVycmlkZSBpbiBwcm90b3R5cGUgY2hhaW4gb2YgYSBKU1Byb3h5CisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjYxODUKKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGUgQVBJIHRlc3Qg
YWRkZWQgaW4gcjI3ODM2NiByZXZlYWxlZCBhIGZsYXcgaW4gSlNPYmplY3Q6OmRlZmluZVByb3Bl
cnR5T25SZWNlaXZlcigpCisgICAgICAgIHRoYXQgY2F1c2VkIHB1dERpcmVjdEludGVybmFsKCkg
dG8gYmUgcGVyZm9ybWVkIG9uIGEgSlNQcm94eSBpbnN0ZWFkIG9mIGl0J3MgdGFyZ2V0LgorICAg
ICAgICBSZW1lZGllcyB0aGF0IHZpYSBhIHR5cGUgY2hlY2ssIGVuc3VyaW5nIHRoZSB0ZXN0IGFu
ZCBpT1MgYXBwcyBhcmUgZnVuY3Rpb25hbC4KKworICAgICAgICBUaGUgaXNzdWUgd2FzIG9yaWdp
bmFsbHkgbWlzc2VkIGJlY2F1c2UgdGhlIHByb3RvdHlwZSBjaGFpbiBvZiBhIGdsb2JhbCBvYmpl
Y3QgaXMgaW1tdXRhYmxlCisgICAgICAgIGFuZCBub25lIG9mIHRoZSBnbG9iYWwgb2JqZWN0J3Mg
cHJvdG90eXBlcyBvdmVycmlkZSBwdXQoKS4gT3BhcXVlSlNDbGFzczo6cHJvdG90eXBlKCkgc2V0
cworICAgICAgICB0aGUgW1tQcm90b3R5cGVdXSBkaXJlY3RseSwgaWdub3JpbmcgdGhlIElzSW1t
dXRhYmxlUHJvdG90eXBlRXhvdGljT2JqZWN0IHR5cGUgaW5mbyBmbGFnLgorCisgICAgICAgIEFs
c28sIGV4Y2x1ZGVzIGFuIGludmFyaWFudCBmcm9tIHRoZSBvcmlnaW5hbCBwYXRjaCB0aGF0IHJl
cXVpcmVkIHB1dCgpIHRvIGJlIG92ZXJyaWRlbgorICAgICAgICB3aGVuIGltcGxlbWVudGluZyBj
dXN0b20gW1tEZWZpbmVPd25Qcm9wZXJ0eV1dLiBJdCBpcyBub3cgYnJva2VuIGJ5IFdpbmRvd1By
b3BlcnRpZXMgb2JqZWN0LgorCisgICAgICAgICogQVBJL0pTQ2FsbGJhY2tPYmplY3QuaDoKKyAg
ICAgICAgKiBBUEkvSlNDYWxsYmFja09iamVjdEZ1bmN0aW9ucy5oOgorICAgICAgICAoSlNDOjpK
U0NhbGxiYWNrT2JqZWN0PFBhcmVudD46OnB1dCk6CisgICAgICAgICogQVBJL3Rlc3RzL3Rlc3Rh
cGlTY3JpcHRzL3Rlc3RhcGkuanM6CisgICAgICAgICogZGVidWdnZXIvRGVidWdnZXJTY29wZS5o
OgorICAgICAgICAqIHJ1bnRpbWUvQ2xhc3NJbmZvLmg6CisgICAgICAgICogcnVudGltZS9DbG9u
ZWRBcmd1bWVudHMuaDoKKyAgICAgICAgKiBydW50aW1lL0N1c3RvbUdldHRlclNldHRlci5jcHA6
CisgICAgICAgIChKU0M6OmNhbGxDdXN0b21TZXR0ZXIpOiBEZWxldGVkLgorICAgICAgICAqIHJ1
bnRpbWUvQ3VzdG9tR2V0dGVyU2V0dGVyLmg6CisgICAgICAgICogcnVudGltZS9FcnJvckNvbnN0
cnVjdG9yLmg6CisgICAgICAgICogcnVudGltZS9FcnJvckluc3RhbmNlLmg6CisgICAgICAgICog
cnVudGltZS9HZW5lcmljQXJndW1lbnRzLmg6CisgICAgICAgICogcnVudGltZS9HZW5lcmljQXJn
dW1lbnRzSW5saW5lcy5oOgorICAgICAgICAoSlNDOjpHZW5lcmljQXJndW1lbnRzPFR5cGU+Ojpw
dXQpOgorICAgICAgICAqIHJ1bnRpbWUvR2V0dGVyU2V0dGVyLmg6CisgICAgICAgICogcnVudGlt
ZS9KU0FycmF5LmNwcDoKKyAgICAgICAgKEpTQzo6SlNBcnJheTo6cHV0KToKKyAgICAgICAgKiBy
dW50aW1lL0pTQXJyYXkuaDoKKyAgICAgICAgKiBydW50aW1lL0pTQXJyYXlCdWZmZXJWaWV3LmNw
cDoKKyAgICAgICAgKEpTQzo6SlNBcnJheUJ1ZmZlclZpZXc6OnB1dCk6IERlbGV0ZWQuCisgICAg
ICAgICogcnVudGltZS9KU0FycmF5QnVmZmVyVmlldy5oOgorICAgICAgICAqIHJ1bnRpbWUvSlND
SlNWYWx1ZS5jcHA6CisgICAgICAgIChKU0M6OkpTVmFsdWU6OnB1dFRvUHJpbWl0aXZlKToKKyAg
ICAgICAgKiBydW50aW1lL0pTQ2VsbC5jcHA6CisgICAgICAgIChKU0M6OkpTQ2VsbDo6ZG9QdXRQ
cm9wZXJ0eVNlY3VyaXR5Q2hlY2spOiBEZWxldGVkLgorICAgICAgICAqIHJ1bnRpbWUvSlNDZWxs
Lmg6CisgICAgICAgICogcnVudGltZS9KU0Z1bmN0aW9uLmNwcDoKKyAgICAgICAgKEpTQzo6SlNG
dW5jdGlvbjo6cHV0KToKKyAgICAgICAgKiBydW50aW1lL0pTRnVuY3Rpb24uaDoKKyAgICAgICAg
KiBydW50aW1lL0pTR2VuZXJpY1R5cGVkQXJyYXlWaWV3Lmg6CisgICAgICAgICogcnVudGltZS9K
U0dsb2JhbExleGljYWxFbnZpcm9ubWVudC5oOgorICAgICAgICAqIHJ1bnRpbWUvSlNHbG9iYWxP
YmplY3QuY3BwOgorICAgICAgICAoSlNDOjpKU0dsb2JhbE9iamVjdDo6cHV0KToKKyAgICAgICAg
KiBydW50aW1lL0pTR2xvYmFsT2JqZWN0Lmg6CisgICAgICAgICogcnVudGltZS9KU0xleGljYWxF
bnZpcm9ubWVudC5oOgorICAgICAgICAqIHJ1bnRpbWUvSlNNb2R1bGVFbnZpcm9ubWVudC5oOgor
ICAgICAgICAqIHJ1bnRpbWUvSlNNb2R1bGVOYW1lc3BhY2VPYmplY3QuaDoKKyAgICAgICAgKiBy
dW50aW1lL0pTT2JqZWN0LmNwcDoKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmdldE93blByb3Bl
cnR5U2xvdCk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpwdXRJbmxpbmVTbG93KToKKyAgICAg
ICAgKEpTQzo6ZGVmaW5lUHJvcGVydHlPblJlY2VpdmVyU2xvdyk6CisgICAgICAgIChKU0M6OkpT
T2JqZWN0OjpkZWZpbmVQcm9wZXJ0eU9uUmVjZWl2ZXIpOgorICAgICAgICAoSlNDOjpKU09iamVj
dDo6cHV0SW5saW5lRmFzdFJlcGxhY2luZ1N0YXRpY1Byb3BlcnR5SWZOZWVkZWQpOgorICAgICAg
ICAoSlNDOjpKU09iamVjdDo6ZG9QdXRQcm9wZXJ0eVNlY3VyaXR5Q2hlY2spOiBEZWxldGVkLgor
ICAgICAgICAoSlNDOjpKU09iamVjdDo6cHJvdG90eXBlQ2hhaW5NYXlJbnRlcmNlcHRTdG9yZVRv
KTogRGVsZXRlZC4KKyAgICAgICAgKiBydW50aW1lL0pTT2JqZWN0Lmg6CisgICAgICAgIChKU0M6
OkpTT2JqZWN0OjpwdXRCeUluZGV4SW5saW5lKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6Omhh
c05vblJlaWZpZWRTdGF0aWNQcm9wZXJ0aWVzKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6Omdl
dE93blByb3BlcnR5U2xvdCk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpwdXREaXJlY3QpOgor
ICAgICAgICAoSlNDOjpKU09iamVjdDo6ZG9QdXRQcm9wZXJ0eVNlY3VyaXR5Q2hlY2spOiBEZWxl
dGVkLgorICAgICAgICAqIHJ1bnRpbWUvSlNPYmplY3RJbmxpbmVzLmg6CisgICAgICAgIChKU0M6
OkpTT2JqZWN0OjpjYW5QZXJmb3JtRmFzdFB1dElubGluZUV4Y2x1ZGluZ1Byb3RvKToKKyAgICAg
ICAgKEpTQzo6SlNPYmplY3Q6OnB1dElubGluZUZvckpTT2JqZWN0KToKKyAgICAgICAgKEpTQzo6
SlNPYmplY3Q6OnB1dElubGluZUZhc3QpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6cHV0RGly
ZWN0SW50ZXJuYWwpOgorICAgICAgICAqIHJ1bnRpbWUvSlNQcm94eS5oOgorICAgICAgICAqIHJ1
bnRpbWUvSlNUeXBlSW5mby5oOgorICAgICAgICAoSlNDOjpUeXBlSW5mbzo6aGFzU3RhdGljUHJv
cGVydHlUYWJsZSBjb25zdCk6CisgICAgICAgIChKU0M6OlR5cGVJbmZvOjpvdmVycmlkZXNQdXQg
Y29uc3QpOgorICAgICAgICAoSlNDOjpUeXBlSW5mbzo6Z2V0T3duUHJvcGVydHlTbG90TWF5QmVX
cm9uZ0Fib3V0RG9udEVudW0gY29uc3QpOgorICAgICAgICAoSlNDOjpUeXBlSW5mbzo6aGFzUHV0
UHJvcGVydHlTZWN1cml0eUNoZWNrIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKiBydW50aW1l
L0xvb2t1cC5oOgorICAgICAgICAoSlNDOjpwdXRFbnRyeSk6IERlbGV0ZWQuCisgICAgICAgIChK
U0M6Omxvb2t1cFB1dCk6IERlbGV0ZWQuCisgICAgICAgICogcnVudGltZS9Qcm9wZXJ0eVNsb3Qu
aDoKKyAgICAgICAgKiBydW50aW1lL1Byb3h5T2JqZWN0LmNwcDoKKyAgICAgICAgKEpTQzo6UHJv
eHlPYmplY3Q6OnB1dCk6CisgICAgICAgICogcnVudGltZS9Qcm94eU9iamVjdC5oOgorICAgICAg
ICAqIHJ1bnRpbWUvUHV0UHJvcGVydHlTbG90Lmg6CisgICAgICAgIChKU0M6OlB1dFByb3BlcnR5
U2xvdDo6UHV0UHJvcGVydHlTbG90KToKKyAgICAgICAgKEpTQzo6UHV0UHJvcGVydHlTbG90Ojpj
b250ZXh0IGNvbnN0KToKKyAgICAgICAgKEpTQzo6UHV0UHJvcGVydHlTbG90Ojppc1RhaW50ZWRC
eU9wYXF1ZU9iamVjdCBjb25zdCk6CisgICAgICAgIChKU0M6OlB1dFByb3BlcnR5U2xvdDo6c2V0
SXNUYWludGVkQnlPcGFxdWVPYmplY3QpOgorICAgICAgICAqIHJ1bnRpbWUvUmVmbGVjdE9iamVj
dC5jcHA6CisgICAgICAgIChKU0M6OkpTQ19ERUZJTkVfSE9TVF9GVU5DVElPTik6CisgICAgICAg
ICogcnVudGltZS9SZWdFeHBPYmplY3QuY3BwOgorICAgICAgICAoSlNDOjpSZWdFeHBPYmplY3Q6
OnB1dCk6CisgICAgICAgICogcnVudGltZS9SZWdFeHBPYmplY3QuaDoKKyAgICAgICAgKiBydW50
aW1lL1N0cmluZ09iamVjdC5jcHA6CisgICAgICAgIChKU0M6OlN0cmluZ09iamVjdDo6cHV0KToK
KyAgICAgICAgKiBydW50aW1lL1N0cmluZ09iamVjdC5oOgorICAgICAgICAqIHJ1bnRpbWUvU3Ry
aW5nUHJvdG90eXBlLmNwcDoKKyAgICAgICAgKEpTQzo6U3RyaW5nUHJvdG90eXBlOjpmaW5pc2hD
cmVhdGlvbik6CisgICAgICAgIChKU0M6OlN0cmluZ1Byb3RvdHlwZTo6Y3JlYXRlKToKKyAgICAg
ICAgKiBydW50aW1lL1N0cmluZ1Byb3RvdHlwZS5oOgorICAgICAgICAqIHJ1bnRpbWUvU3RydWN0
dXJlLmNwcDoKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlOjp2YWxpZGF0ZUZsYWdzKToKKyAgICAg
ICAgKiBydW50aW1lL1N0cnVjdHVyZS5oOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmU6Omhhc05v
blJlaWZpZWRTdGF0aWNQcm9wZXJ0aWVzIGNvbnN0KToKKyAgICAgICAgKiB0b29scy9KU0RvbGxh
clZNLmNwcDoKKwogMjAyMS0wNi0wNCAgQ2hyaXMgRHVtZXogIDxjZHVtZXpAYXBwbGUuY29tPgog
CiAgICAgICAgIEZpbGVTeXN0ZW06OnJlYWRGcm9tRmlsZSgpIHNob3VsZCByZXR1cm4gZGF0YSBh
cyBgdm9pZCpgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQ2FsbGJhY2tPYmpl
Y3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQ2FsbGJhY2tP
YmplY3QuaAkocmV2aXNpb24gMjc4NTM5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9K
U0NhbGxiYWNrT2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTEyOSw3ICsxMjksNyBAQCB0ZW1w
bGF0ZSA8Y2xhc3MgUGFyZW50PgogY2xhc3MgSlNDYWxsYmFja09iamVjdCBmaW5hbCA6IHB1Ymxp
YyBQYXJlbnQgewogcHVibGljOgogICAgIHVzaW5nIEJhc2UgPSBQYXJlbnQ7Ci0gICAgc3RhdGlj
IGNvbnN0ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdz
IHwgT3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90IHwgT3ZlcnJpZGVzR2V0T3duU3BlY2lhbFBy
b3BlcnR5TmFtZXMgfCBPdmVycmlkZXNHZXRDYWxsRGF0YSB8IEludGVyY2VwdHNHZXRPd25Qcm9w
ZXJ0eVNsb3RCeUluZGV4RXZlbldoZW5MZW5ndGhJc05vdFplcm8gfCBJbXBsZW1lbnRzSGFzSW5z
dGFuY2UgfCBQcm9oaWJpdHNQcm9wZXJ0eUNhY2hpbmcgfCBHZXRPd25Qcm9wZXJ0eVNsb3RNYXlC
ZVdyb25nQWJvdXREb250RW51bTsKKyAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIFN0cnVj
dHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxhZ3MgfCBPdmVycmlkZXNHZXRPd25Qcm9wZXJ0
eVNsb3QgfCBPdmVycmlkZXNHZXRPd25TcGVjaWFsUHJvcGVydHlOYW1lcyB8IE92ZXJyaWRlc0dl
dENhbGxEYXRhIHwgT3ZlcnJpZGVzUHV0IHwgSW50ZXJjZXB0c0dldE93blByb3BlcnR5U2xvdEJ5
SW5kZXhFdmVuV2hlbkxlbmd0aElzTm90WmVybyB8IEltcGxlbWVudHNIYXNJbnN0YW5jZSB8IFBy
b2hpYml0c1Byb3BlcnR5Q2FjaGluZyB8IEdldE93blByb3BlcnR5U2xvdE1heUJlV3JvbmdBYm91
dERvbnRFbnVtOwogICAgIHN0YXRpY19hc3NlcnQoIShTdHJ1Y3R1cmVGbGFncyAmIEltcGxlbWVu
dHNEZWZhdWx0SGFzSW5zdGFuY2UpLCAidXNpbmcgY3VzdG9tSGFzSW5zdGFuY2UiKTsKIAogICAg
IH5KU0NhbGxiYWNrT2JqZWN0KCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pT
Q2FsbGJhY2tPYmplY3RGdW5jdGlvbnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvQVBJL0pTQ2FsbGJhY2tPYmplY3RGdW5jdGlvbnMuaAkocmV2aXNpb24gMjc4NTM5KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0NhbGxiYWNrT2JqZWN0RnVuY3Rpb25zLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTI3MSw2ICsyNzEsOSBAQCBib29sIEpTQ2FsbGJhY2tPYmplY3Q8
UGFyZW50Pjo6cHV0KEpTQ2VsCiAgICAgSlNPYmplY3RSZWYgdGhpc1JlZiA9IHRvUmVmKGpzQ2Fz
dDxKU09iamVjdCo+KHRoaXNPYmplY3QpKTsKICAgICBSZWZQdHI8T3BhcXVlSlNTdHJpbmc+IHBy
b3BlcnR5TmFtZVJlZjsKICAgICBKU1ZhbHVlUmVmIHZhbHVlUmVmID0gdG9SZWYoZ2xvYmFsT2Jq
ZWN0LCB2YWx1ZSk7CisKKyAgICBpZiAoVU5MSUtFTFkoaXNUaGlzVmFsdWVBbHRlcmVkKHNsb3Qs
IHRoaXNPYmplY3QpKSkKKyAgICAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBQYXJlbnQ6
OnB1dCh0aGlzT2JqZWN0LCBnbG9iYWxPYmplY3QsIHByb3BlcnR5TmFtZSwgdmFsdWUsIHNsb3Qp
KTsKICAgICAKICAgICBpZiAoU3RyaW5nSW1wbCogbmFtZSA9IHByb3BlcnR5TmFtZS51aWQoKSkg
ewogICAgICAgICBmb3IgKEpTQ2xhc3NSZWYganNDbGFzcyA9IHRoaXNPYmplY3QtPmNsYXNzUmVm
KCk7IGpzQ2xhc3M7IGpzQ2xhc3MgPSBqc0NsYXNzLT5wYXJlbnRDbGFzcykgewpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL0FQSS90ZXN0cy90ZXN0YXBpU2NyaXB0cy90ZXN0YXBpLmpzCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvdGVzdHMvdGVzdGFwaVNjcmlw
dHMvdGVzdGFwaS5qcwkocmV2aXNpb24gMjc4NTM5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L0FQSS90ZXN0cy90ZXN0YXBpU2NyaXB0cy90ZXN0YXBpLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0y
NDYsNiArMjQ2LDE2IEBAIHNob3VsZFRocm93KCIoMCwgTXlPYmplY3RbU3ltYm9sLnRvUHJpbWkK
IE15T2JqZWN0W1N5bWJvbC50b1ByaW1pdGl2ZV0gPSAoKSA9PiBudWxsOwogc2hvdWxkQmUoIk15
T2JqZWN0W1N5bWJvbC50b1ByaW1pdGl2ZV0oJ2JhcicpIiwgbnVsbCk7CiAKK3ZhciBNeU9iamVj
dEhlaXIgPSBPYmplY3QuY3JlYXRlKE15T2JqZWN0KTsKK015T2JqZWN0SGVpci50aHJvd09uU2V0
ID0gMjI7Cit2YXIgTXlPYmplY3RIZWlyVGhyb3dPblNldERlc2NyaXB0b3IgPSBPYmplY3QuZ2V0
T3duUHJvcGVydHlEZXNjcmlwdG9yKE15T2JqZWN0SGVpciwgInRocm93T25TZXQiKTsKK3Nob3Vs
ZEJlKCJ0eXBlb2YgTXlPYmplY3RIZWlyVGhyb3dPblNldERlc2NyaXB0b3IiLCAib2JqZWN0Iik7
CitzaG91bGRCZSgiTXlPYmplY3RIZWlyVGhyb3dPblNldERlc2NyaXB0b3IudmFsdWUiLCAyMik7
CitzaG91bGRCZSgiTXlPYmplY3RIZWlyVGhyb3dPblNldERlc2NyaXB0b3Iud3JpdGFibGUiLCB0
cnVlKTsKK3Nob3VsZEJlKCJNeU9iamVjdEhlaXJUaHJvd09uU2V0RGVzY3JpcHRvci5lbnVtZXJh
YmxlIiwgdHJ1ZSk7CitzaG91bGRCZSgiTXlPYmplY3RIZWlyVGhyb3dPblNldERlc2NyaXB0b3Iu
Y29uZmlndXJhYmxlIiwgdHJ1ZSk7CitzaG91bGRUaHJvdygiTXlPYmplY3QudGhyb3dPblNldCA9
IDIyIik7CisKIGRlcml2ZWQgPSBuZXcgRGVyaXZlZCgpOwogCiBzaG91bGRCZSgiZGVyaXZlZCBp
bnN0YW5jZW9mIERlcml2ZWQiLCB0cnVlKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZWJ1Z2dlci9EZWJ1Z2dlclNjb3BlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2RlYnVnZ2VyL0RlYnVnZ2VyU2NvcGUuaAkocmV2aXNpb24gMjc4NTM5KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2RlYnVnZ2VyL0RlYnVnZ2VyU2NvcGUuaAkod29ya2luZyBjb3B5KQpA
QCAtMzYsNyArMzYsNyBAQCBjbGFzcyBKU1Njb3BlOwogY2xhc3MgRGVidWdnZXJTY29wZSBmaW5h
bCA6IHB1YmxpYyBKU05vbkZpbmFsT2JqZWN0IHsKIHB1YmxpYzoKICAgICB1c2luZyBCYXNlID0g
SlNOb25GaW5hbE9iamVjdDsKLSAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIFN0cnVjdHVy
ZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxhZ3MgfCBPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNs
b3QgfCBPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eU5hbWVzOworICAgIHN0YXRpYyBjb25zdGV4cHIg
dW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8IE92ZXJyaWRl
c0dldE93blByb3BlcnR5U2xvdCB8IE92ZXJyaWRlc0dldE93blByb3BlcnR5TmFtZXMgfCBPdmVy
cmlkZXNQdXQ7CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDZWxsVHlwZSwgU3Vic3BhY2VBY2Nl
c3MgbW9kZT4KICAgICBzdGF0aWMgSXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NsYXNzSW5mby5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NsYXNzSW5mby5oCShyZXZpc2lvbiAy
Nzg1MzkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9DbGFzc0luZm8uaAkod29y
a2luZyBjb3B5KQpAQCAtNjgsOSArNjgsNiBAQCBzdHJ1Y3QgTWV0aG9kVGFibGUgewogICAgIHVz
aW5nIEdldE93blByb3BlcnR5U2xvdEJ5SW5kZXhGdW5jdGlvblB0ciA9IGJvb2wgKCopKEpTT2Jq
ZWN0KiwgSlNHbG9iYWxPYmplY3QqLCB1bnNpZ25lZCwgUHJvcGVydHlTbG90Jik7CiAgICAgR2V0
T3duUHJvcGVydHlTbG90QnlJbmRleEZ1bmN0aW9uUHRyIE1FVEhPRF9UQUJMRV9FTlRSWShnZXRP
d25Qcm9wZXJ0eVNsb3RCeUluZGV4KTsKIAotICAgIHVzaW5nIERvUHV0UHJvcGVydHlTZWN1cml0
eUNoZWNrRnVuY3Rpb25QdHIgPSB2b2lkICgqKShKU09iamVjdCosIEpTR2xvYmFsT2JqZWN0Kiwg
UHJvcGVydHlOYW1lLCBQdXRQcm9wZXJ0eVNsb3QmKTsKLSAgICBEb1B1dFByb3BlcnR5U2VjdXJp
dHlDaGVja0Z1bmN0aW9uUHRyIE1FVEhPRF9UQUJMRV9FTlRSWShkb1B1dFByb3BlcnR5U2VjdXJp
dHlDaGVjayk7Ci0KICAgICB1c2luZyBUb1RoaXNGdW5jdGlvblB0ciA9IEpTVmFsdWUgKCopKEpT
Q2VsbCosIEpTR2xvYmFsT2JqZWN0KiwgRUNNQU1vZGUpOwogICAgIFRvVGhpc0Z1bmN0aW9uUHRy
IE1FVEhPRF9UQUJMRV9FTlRSWSh0b1RoaXMpOwogCkBAIC0xNTUsNyArMTUyLDYgQEAgc3RydWN0
IE1ldGhvZFRhYmxlIHsKICAgICAgICAgJkNsYXNzTmFtZTo6ZGVsZXRlUHJvcGVydHlCeUluZGV4
LCBcCiAgICAgICAgICZDbGFzc05hbWU6OmdldE93blByb3BlcnR5U2xvdCwgXAogICAgICAgICAm
Q2xhc3NOYW1lOjpnZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4LCBcCi0gICAgICAgICZDbGFzc05h
bWU6OmRvUHV0UHJvcGVydHlTZWN1cml0eUNoZWNrLCBcCiAgICAgICAgICZDbGFzc05hbWU6OnRv
VGhpcywgXAogICAgICAgICAmQ2xhc3NOYW1lOjpnZXRPd25Qcm9wZXJ0eU5hbWVzLCBcCiAgICAg
ICAgICZDbGFzc05hbWU6OmdldE93blNwZWNpYWxQcm9wZXJ0eU5hbWVzLCBcCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9DbG9uZWRBcmd1bWVudHMuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9DbG9uZWRBcmd1bWVudHMuaAkocmV2aXNp
b24gMjc4NTM5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2xvbmVkQXJndW1l
bnRzLmgJKHdvcmtpbmcgY29weSkKQEAgLTQwLDcgKzQwLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiBj
bGFzcyBDbG9uZWRBcmd1bWVudHMgZmluYWwgOiBwdWJsaWMgSlNOb25GaW5hbE9iamVjdCB7CiBw
dWJsaWM6CiAgICAgdXNpbmcgQmFzZSA9IEpTTm9uRmluYWxPYmplY3Q7Ci0gICAgc3RhdGljIGNv
bnN0ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwg
T3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90IHwgT3ZlcnJpZGVzR2V0T3duU3BlY2lhbFByb3Bl
cnR5TmFtZXM7CisgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9
IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwgT3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90IHwgT3Zl
cnJpZGVzR2V0T3duU3BlY2lhbFByb3BlcnR5TmFtZXMgfCBPdmVycmlkZXNQdXQ7CiAKICAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBDZWxsVHlwZSwgU3Vic3BhY2VBY2Nlc3MgbW9kZT4KICAgICBzdGF0
aWMgSXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0N1c3RvbUdldHRlclNldHRlci5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ3VzdG9tR2V0dGVyU2V0dGVyLmNwcAkocmV2aXNp
b24gMjc4NTM5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ3VzdG9tR2V0dGVy
U2V0dGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjYsMjggKzI2LDEwIEBACiAjaW5jbHVkZSAi
Y29uZmlnLmgiCiAjaW5jbHVkZSAiQ3VzdG9tR2V0dGVyU2V0dGVyLmgiCiAKLSNpbmNsdWRlICJK
U0NKU1ZhbHVlSW5saW5lcy5oIgotI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+Ci0KIG5hbWVz
cGFjZSBKU0MgewogCiBTVEFUSUNfQVNTRVJUX0lTX1RSSVZJQUxMWV9ERVNUUlVDVElCTEUoQ3Vz
dG9tR2V0dGVyU2V0dGVyKTsKIAogY29uc3QgQ2xhc3NJbmZvIEN1c3RvbUdldHRlclNldHRlcjo6
c19pbmZvID0geyAiQ3VzdG9tR2V0dGVyU2V0dGVyIiwgbnVsbHB0ciwgbnVsbHB0ciwgbnVsbHB0
ciwgQ1JFQVRFX01FVEhPRF9UQUJMRShDdXN0b21HZXR0ZXJTZXR0ZXIpIH07CiAKLVRyaVN0YXRl
IGNhbGxDdXN0b21TZXR0ZXIoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ3VzdG9tR2V0
dGVyU2V0dGVyOjpDdXN0b21TZXR0ZXIgc2V0dGVyLCBib29sIGlzQWNjZXNzb3IsIEpTT2JqZWN0
KiBzbG90QmFzZSwgSlNWYWx1ZSB0aGlzVmFsdWUsIEpTVmFsdWUgdmFsdWUsIFByb3BlcnR5TmFt
ZSBwcm9wZXJ0eU5hbWUpCi17Ci0gICAgaWYgKGlzQWNjZXNzb3IpIHsKLSAgICAgICAgaWYgKCFz
ZXR0ZXIpCi0gICAgICAgICAgICByZXR1cm4gVHJpU3RhdGU6OkZhbHNlOwotICAgICAgICBzZXR0
ZXIoZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlOjplbmNvZGUodGhpc1ZhbHVlKSwgSlNWYWx1ZTo6ZW5j
b2RlKHZhbHVlKSwgcHJvcGVydHlOYW1lKTsKLSAgICAgICAgLy8gQWx3YXlzIHJldHVybiB0cnVl
IGlmIHRoZXJlIGlzIGEgc2V0dGVyIGFuZCBpdCBpcyBvYnNlcnZlZCBhcyBhbiBhY2Nlc3NvciB0
byB1c2Vycy4KLSAgICAgICAgcmV0dXJuIFRyaVN0YXRlOjpUcnVlOwotICAgIH0KLQotICAgIGlm
ICghc2V0dGVyKQotICAgICAgICByZXR1cm4gVHJpU3RhdGU6OkluZGV0ZXJtaW5hdGU7Ci0gICAg
cmV0dXJuIHRyaVN0YXRlKHNldHRlcihnbG9iYWxPYmplY3QsIEpTVmFsdWU6OmVuY29kZShzbG90
QmFzZSksIEpTVmFsdWU6OmVuY29kZSh2YWx1ZSksIHByb3BlcnR5TmFtZSkpOwotfQotCiB9IC8v
IG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0N1c3Rv
bUdldHRlclNldHRlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0N1c3RvbUdldHRlclNldHRlci5oCShyZXZpc2lvbiAyNzg1MzkpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9DdXN0b21HZXR0ZXJTZXR0ZXIuaAkod29ya2luZyBjb3B5KQpA
QCAtNzYsNiArNzYsNCBAQCBwcml2YXRlOgogICAgIEN1c3RvbVNldHRlciBtX3NldHRlcjsKIH07
CiAKLUpTX0VYUE9SVF9QUklWQVRFIFRyaVN0YXRlIGNhbGxDdXN0b21TZXR0ZXIoSlNHbG9iYWxP
YmplY3QqLCBDdXN0b21HZXR0ZXJTZXR0ZXI6OkN1c3RvbVNldHRlciwgYm9vbCBpc0FjY2Vzc29y
LCBKU09iamVjdCogc2xvdEJhc2UsIEpTVmFsdWUgdGhpc1ZhbHVlLCBKU1ZhbHVlLCBQcm9wZXJ0
eU5hbWUpOwotCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0Vycm9yQ29uc3RydWN0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9FcnJvckNvbnN0cnVjdG9yLmgJKHJldmlzaW9uIDI3ODUzOSkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Vycm9yQ29uc3RydWN0b3IuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMzAsNiArMzAsNyBAQCBjbGFzcyBHZXR0ZXJTZXR0ZXI7CiBjbGFzcyBFcnJv
ckNvbnN0cnVjdG9yIGZpbmFsIDogcHVibGljIEludGVybmFsRnVuY3Rpb24gewogcHVibGljOgog
ICAgIHVzaW5nIEJhc2UgPSBJbnRlcm5hbEZ1bmN0aW9uOworICAgIHN0YXRpYyBjb25zdGV4cHIg
dW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8IE92ZXJyaWRl
c1B1dDsKIAogICAgIHN0YXRpYyBFcnJvckNvbnN0cnVjdG9yKiBjcmVhdGUoVk0mIHZtLCBTdHJ1
Y3R1cmUqIHN0cnVjdHVyZSwgRXJyb3JQcm90b3R5cGUqIGVycm9yUHJvdG90eXBlLCBHZXR0ZXJT
ZXR0ZXIqKQogICAgIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Vycm9y
SW5zdGFuY2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9F
cnJvckluc3RhbmNlLmgJKHJldmlzaW9uIDI3ODUzOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0Vycm9ySW5zdGFuY2UuaAkod29ya2luZyBjb3B5KQpAQCAtMzAsNyArMzAsNyBA
QCBuYW1lc3BhY2UgSlNDIHsKIGNsYXNzIEVycm9ySW5zdGFuY2UgOiBwdWJsaWMgSlNOb25GaW5h
bE9iamVjdCB7CiBwdWJsaWM6CiAgICAgdXNpbmcgQmFzZSA9IEpTTm9uRmluYWxPYmplY3Q7Ci0g
ICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVj
dHVyZUZsYWdzIHwgT3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90IHwgT3ZlcnJpZGVzR2V0T3du
U3BlY2lhbFByb3BlcnR5TmFtZXM7CisgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBTdHJ1
Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwgT3ZlcnJpZGVzR2V0T3duUHJvcGVy
dHlTbG90IHwgT3ZlcnJpZGVzR2V0T3duU3BlY2lhbFByb3BlcnR5TmFtZXMgfCBPdmVycmlkZXNQ
dXQ7CiAgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzRGVzdHJ1Y3Rpb24gPSB0cnVlOwog
CiAgICAgc3RhdGljIHZvaWQgZGVzdHJveShKU0NlbGwqIGNlbGwpCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9HZW5lcmljQXJndW1lbnRzLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvR2VuZXJpY0FyZ3VtZW50cy5oCShyZXZpc2lvbiAy
Nzg1MzkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9HZW5lcmljQXJndW1lbnRz
LmgJKHdvcmtpbmcgY29weSkKQEAgLTM2LDcgKzM2LDcgQEAgdGVtcGxhdGU8dHlwZW5hbWUgVHlw
ZT4KIGNsYXNzIEdlbmVyaWNBcmd1bWVudHMgOiBwdWJsaWMgSlNOb25GaW5hbE9iamVjdCB7CiBw
dWJsaWM6CiAgICAgdHlwZWRlZiBKU05vbkZpbmFsT2JqZWN0IEJhc2U7Ci0gICAgc3RhdGljIGNv
bnN0ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwg
T3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90IHwgT3ZlcnJpZGVzR2V0T3duUHJvcGVydHlOYW1l
cyB8IEludGVyY2VwdHNHZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4RXZlbldoZW5MZW5ndGhJc05v
dFplcm87CisgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJh
c2U6OlN0cnVjdHVyZUZsYWdzIHwgT3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90IHwgT3ZlcnJp
ZGVzR2V0T3duUHJvcGVydHlOYW1lcyB8IE92ZXJyaWRlc1B1dCB8IEludGVyY2VwdHNHZXRPd25Q
cm9wZXJ0eVNsb3RCeUluZGV4RXZlbldoZW5MZW5ndGhJc05vdFplcm87CiAKIHByb3RlY3RlZDoK
ICAgICBHZW5lcmljQXJndW1lbnRzKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9HZW5lcmljQXJndW1lbnRzSW5saW5lcy5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0dlbmVyaWNBcmd1
bWVudHNJbmxpbmVzLmgJKHJldmlzaW9uIDI3ODUzOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0dlbmVyaWNBcmd1bWVudHNJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTEz
NCw4ICsxMzQsOCBAQCBib29sIEdlbmVyaWNBcmd1bWVudHM8VHlwZT46OnB1dChKU0NlbGwqCiAK
ICAgICAvLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1hcmd1bWVudHMtZXhv
dGljLW9iamVjdHMtc2V0LXAtdi1yZWNlaXZlcgogICAgIC8vIEZhbGwgYmFjayB0byB0aGUgT3Jk
aW5hcnlTZXQgd2hlbiB0aGUgcmVjZWl2ZXIgaXMgYWx0ZXJlZCBmcm9tIHRoZSB0aGlzT2JqZWN0
LgotICAgIGlmIChVTkxJS0VMWShpc1RoaXNWYWx1ZUFsdGVyZWQoc2xvdCwgdGhpc09iamVjdCkp
KQotICAgICAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIG9yZGluYXJ5U2V0U2xvdyhnbG9i
YWxPYmplY3QsIHRoaXNPYmplY3QsIGlkZW50LCB2YWx1ZSwgc2xvdC50aGlzVmFsdWUoKSwgc2xv
dC5pc1N0cmljdE1vZGUoKSkpOworICAgIGlmIChVTkxJS0VMWShzbG90LnRoaXNWYWx1ZSgpICE9
IHRoaXNPYmplY3QpKQorICAgICAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIEJhc2U6OnB1
dCh0aGlzT2JqZWN0LCBnbG9iYWxPYmplY3QsIGlkZW50LCB2YWx1ZSwgc2xvdCkpOwogICAgIAog
ICAgIHN0ZDo6b3B0aW9uYWw8dWludDMyX3Q+IGluZGV4ID0gcGFyc2VJbmRleChpZGVudCk7CiAg
ICAgaWYgKGluZGV4ICYmIHRoaXNPYmplY3QtPmlzTWFwcGVkQXJndW1lbnQoaW5kZXgudmFsdWUo
KSkpIHsKQEAgLTE0Myw5ICsxNDMsNyBAQCBib29sIEdlbmVyaWNBcmd1bWVudHM8VHlwZT46OnB1
dChKU0NlbGwqCiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIAotICAgIGF1dG8gcmVzdWx0
ID0gQmFzZTo6cHV0KHRoaXNPYmplY3QsIGdsb2JhbE9iamVjdCwgaWRlbnQsIHZhbHVlLCBzbG90
KTsKLSAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBmYWxzZSk7Ci0gICAgUkVMRUFTRV9B
TkRfUkVUVVJOKHNjb3BlLCByZXN1bHQpOworICAgIFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwg
QmFzZTo6cHV0KHRoaXNPYmplY3QsIGdsb2JhbE9iamVjdCwgaWRlbnQsIHZhbHVlLCBzbG90KSk7
CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIFR5cGU+CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9HZXR0ZXJTZXR0ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9HZXR0ZXJTZXR0ZXIuaAkocmV2aXNpb24gMjc4NTM5KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvR2V0dGVyU2V0dGVyLmgJKHdvcmtpbmcgY29weSkKQEAg
LTU0LDcgKzU0LDcgQEAgcHJpdmF0ZToKIAogcHVibGljOgogCi0gICAgc3RhdGljIGNvbnN0ZXhw
ciB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwgT3ZlcnJp
ZGVzR2V0T3duUHJvcGVydHlTbG90IHwgU3RydWN0dXJlSXNJbW1vcnRhbDsKKyAgICBzdGF0aWMg
Y29uc3RleHByIHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxhZ3Mg
fCBPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3QgfCBPdmVycmlkZXNQdXQgfCBTdHJ1Y3R1cmVJ
c0ltbW9ydGFsOwogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2VsbFR5cGUsIFN1YnNwYWNlQWNj
ZXNzPgogICAgIHN0YXRpYyBJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheS5jcHAJKHJldmlzaW9uIDI3ODUz
OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXkuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0yMzgsMTAgKzIzOCw2IEBAIGJvb2wgSlNBcnJheTo6cHV0KEpTQ2VsbCogY2Vs
bCwgSlNHbG9iYWwKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAK
ICAgICBKU0FycmF5KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTQXJyYXkqPihjZWxsKTsKLQotICAg
IGlmIChVTkxJS0VMWShpc1RoaXNWYWx1ZUFsdGVyZWQoc2xvdCwgdGhpc09iamVjdCkpKQotICAg
ICAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIG9yZGluYXJ5U2V0U2xvdyhnbG9iYWxPYmpl
Y3QsIHRoaXNPYmplY3QsIHByb3BlcnR5TmFtZSwgdmFsdWUsIHNsb3QudGhpc1ZhbHVlKCksIHNs
b3QuaXNTdHJpY3RNb2RlKCkpKTsKLQogICAgIHRoaXNPYmplY3QtPmVuc3VyZVdyaXRhYmxlKHZt
KTsKIAogICAgIGlmIChwcm9wZXJ0eU5hbWUgPT0gdm0ucHJvcGVydHlOYW1lcy0+bGVuZ3RoKSB7
CkBAIC0yNTEsNiArMjQ3LDkgQEAgYm9vbCBKU0FycmF5OjpwdXQoSlNDZWxsKiBjZWxsLCBKU0ds
b2JhbAogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9CiAKKyAgICAgICAgaWYg
KFVOTElLRUxZKHNsb3QudGhpc1ZhbHVlKCkgIT0gdGhpc09iamVjdCkpCisgICAgICAgICAgICBS
RUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIEpTT2JqZWN0OjpkZWZpbmVQcm9wZXJ0eU9uUmVjZWl2
ZXIoZ2xvYmFsT2JqZWN0LCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCBzbG90KSk7CisKICAgICAgICAg
dW5zaWduZWQgbmV3TGVuZ3RoID0gdmFsdWUudG9VSW50MzIoZ2xvYmFsT2JqZWN0KTsKICAgICAg
ICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZmFsc2UpOwogICAgICAgICBkb3VibGUgdmFs
dWVBc051bWJlciA9IHZhbHVlLnRvTnVtYmVyKGdsb2JhbE9iamVjdCk7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5LmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheS5oCShyZXZpc2lvbiAyNzg1MzkpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5LmgJKHdvcmtpbmcgY29weSkKQEAgLTQw
LDcgKzQwLDcgQEAgY2xhc3MgSlNBcnJheSA6IHB1YmxpYyBKU05vbkZpbmFsT2JqZWN0IAogCiBw
dWJsaWM6CiAgICAgdHlwZWRlZiBKU05vbkZpbmFsT2JqZWN0IEJhc2U7Ci0gICAgc3RhdGljIGNv
bnN0ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwg
T3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90IHwgT3ZlcnJpZGVzR2V0T3duU3BlY2lhbFByb3Bl
cnR5TmFtZXM7CisgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9
IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwgT3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90IHwgT3Zl
cnJpZGVzR2V0T3duU3BlY2lhbFByb3BlcnR5TmFtZXMgfCBPdmVycmlkZXNQdXQ7CiAKICAgICBz
dGF0aWMgc2l6ZV90IGFsbG9jYXRpb25TaXplKENoZWNrZWQ8c2l6ZV90PiBpbmxpbmVDYXBhY2l0
eSkKICAgICB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5QnVm
ZmVyVmlldy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNBcnJheUJ1ZmZlclZpZXcuY3BwCShyZXZpc2lvbiAyNzg1MzkpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU0FycmF5QnVmZmVyVmlldy5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTE3MiwxOCArMTcyLDYgQEAgdm9pZCBKU0FycmF5QnVmZmVyVmlldzo6dmlzaXRDaGlsZHJlbklt
cAogCiBERUZJTkVfVklTSVRfQ0hJTERSRU4oSlNBcnJheUJ1ZmZlclZpZXcpOwogCi1ib29sIEpT
QXJyYXlCdWZmZXJWaWV3OjpwdXQoCi0gICAgSlNDZWxsKiBjZWxsLCBKU0dsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZWN0LCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBKU1ZhbHVlIHZhbHVlLAot
ICAgIFB1dFByb3BlcnR5U2xvdCYgc2xvdCkKLXsKLSAgICBKU0FycmF5QnVmZmVyVmlldyogdGhp
c09iamVjdCA9IGpzQ2FzdDxKU0FycmF5QnVmZmVyVmlldyo+KGNlbGwpOwotCi0gICAgaWYgKFVO
TElLRUxZKGlzVGhpc1ZhbHVlQWx0ZXJlZChzbG90LCB0aGlzT2JqZWN0KSkpCi0gICAgICAgIHJl
dHVybiBvcmRpbmFyeVNldFNsb3coZ2xvYmFsT2JqZWN0LCB0aGlzT2JqZWN0LCBwcm9wZXJ0eU5h
bWUsIHZhbHVlLCBzbG90LnRoaXNWYWx1ZSgpLCBzbG90LmlzU3RyaWN0TW9kZSgpKTsKLSAgICAK
LSAgICByZXR1cm4gQmFzZTo6cHV0KHRoaXNPYmplY3QsIGdsb2JhbE9iamVjdCwgcHJvcGVydHlO
YW1lLCB2YWx1ZSwgc2xvdCk7Ci19Ci0KIEFycmF5QnVmZmVyKiBKU0FycmF5QnVmZmVyVmlldzo6
dW5zaGFyZWRCdWZmZXIoKQogewogICAgIEFycmF5QnVmZmVyKiByZXN1bHQgPSBwb3NzaWJseVNo
YXJlZEJ1ZmZlcigpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJh
eUJ1ZmZlclZpZXcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU0FycmF5QnVmZmVyVmlldy5oCShyZXZpc2lvbiAyNzg1MzkpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU0FycmF5QnVmZmVyVmlldy5oCSh3b3JraW5nIGNvcHkpCkBAIC0x
NjksOCArMTY5LDYgQEAgcHJvdGVjdGVkOgogICAgIAogICAgIEpTX0VYUE9SVF9QUklWQVRFIEpT
QXJyYXlCdWZmZXJWaWV3KFZNJiwgQ29uc3RydWN0aW9uQ29udGV4dCYpOwogICAgIEpTX0VYUE9S
VF9QUklWQVRFIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mKTsKLSAgICAKLSAgICBzdGF0aWMgYm9v
bCBwdXQoSlNDZWxsKiwgSlNHbG9iYWxPYmplY3QqLCBQcm9wZXJ0eU5hbWUsIEpTVmFsdWUsIFB1
dFByb3BlcnR5U2xvdCYpOwogCiAgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsKICAgICAKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ0pTVmFsdWUuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ0pTVmFsdWUuY3BwCShyZXZp
c2lvbiAyNzg1MzkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NKU1ZhbHVl
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjEyLDcgKzIxMiw3IEBAIEpTT2JqZWN0KiBKU1ZhbHVl
OjpzeW50aGVzaXplUHJvdG90eXBlKEoKICAgICByZXR1cm4gbnVsbHB0cjsKIH0KIAotLy8gRUNN
QSA4LjcuMgorLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vcmRpbmFyeXNldAogYm9v
bCBKU1ZhbHVlOjpwdXRUb1ByaW1pdGl2ZShKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBQ
cm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBKU1ZhbHVlIHZhbHVlLCBQdXRQcm9wZXJ0eVNsb3Qm
IHNsb3QpCiB7CiAgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwpAQCAtMjIxLDY5ICsy
MjEsMTQgQEAgYm9vbCBKU1ZhbHVlOjpwdXRUb1ByaW1pdGl2ZShKU0dsb2JhbE9iagogICAgIGlm
IChzdGQ6Om9wdGlvbmFsPHVpbnQzMl90PiBpbmRleCA9IHBhcnNlSW5kZXgocHJvcGVydHlOYW1l
KSkKICAgICAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBwdXRUb1ByaW1pdGl2ZUJ5SW5k
ZXgoZ2xvYmFsT2JqZWN0LCBpbmRleC52YWx1ZSgpLCB2YWx1ZSwgc2xvdC5pc1N0cmljdE1vZGUo
KSkpOwogCisgICAgaWYgKGlzU3RyaW5nKCkgJiYgcHJvcGVydHlOYW1lLnVpZCgpID09IHZtLnBy
b3BlcnR5TmFtZXMtPmxlbmd0aC5pbXBsKCkpCisgICAgICAgIHJldHVybiB0eXBlRXJyb3IoZ2xv
YmFsT2JqZWN0LCBzY29wZSwgc2xvdC5pc1N0cmljdE1vZGUoKSwgUmVhZG9ubHlQcm9wZXJ0eVdy
aXRlRXJyb3IpOwogICAgIC8vIENoZWNrIGlmIHRoZXJlIGFyZSBhbnkgc2V0dGVycyBvciBnZXR0
ZXJzIGluIHRoZSBwcm90b3R5cGUgY2hhaW4KICAgICBKU09iamVjdCogb2JqID0gc3ludGhlc2l6
ZVByb3RvdHlwZShnbG9iYWxPYmplY3QpOwogICAgIEVYQ0VQVElPTl9BU1NFUlQoISFzY29wZS5l
eGNlcHRpb24oKSA9PSAhb2JqKTsKICAgICBpZiAoVU5MSUtFTFkoIW9iaikpCiAgICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICBKU1ZhbHVlIHByb3RvdHlwZTsKLSAgICBpZiAocHJvcGVydHlOYW1l
ICE9IHZtLnByb3BlcnR5TmFtZXMtPnVuZGVyc2NvcmVQcm90bykgewotICAgICAgICB3aGlsZSAo
dHJ1ZSkgewotICAgICAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBvYmotPnN0cnVjdHVy
ZSh2bSk7Ci0gICAgICAgICAgICBpZiAoc3RydWN0dXJlLT5oYXNSZWFkT25seU9yR2V0dGVyU2V0
dGVyUHJvcGVydGllc0V4Y2x1ZGluZ1Byb3RvKCkgfHwgc3RydWN0dXJlLT50eXBlSW5mbygpLmhh
c1B1dFByb3BlcnR5U2VjdXJpdHlDaGVjaygpKQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICAgICAgaWYgKG9iai0+dHlwZSgpID09IFByb3h5T2JqZWN0VHlwZSkgewotICAgICAgICAg
ICAgICAgIGF1dG8qIHByb3h5ID0ganNDYXN0PFByb3h5T2JqZWN0Kj4ob2JqKTsKLSAgICAgICAg
ICAgICAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIHByb3h5LT5Qcm94eU9iamVjdDo6cHV0
KHByb3h5LCBnbG9iYWxPYmplY3QsIHByb3BlcnR5TmFtZSwgdmFsdWUsIHNsb3QpKTsKLSAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgIHByb3RvdHlwZSA9IG9iai0+Z2V0UHJvdG90eXBlKHZtLCBn
bG9iYWxPYmplY3QpOwotICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZmFs
c2UpOwotCi0gICAgICAgICAgICBpZiAocHJvdG90eXBlLmlzTnVsbCgpKQotICAgICAgICAgICAg
ICAgIHJldHVybiB0eXBlRXJyb3IoZ2xvYmFsT2JqZWN0LCBzY29wZSwgc2xvdC5pc1N0cmljdE1v
ZGUoKSwgUmVhZG9ubHlQcm9wZXJ0eVdyaXRlRXJyb3IpOwotICAgICAgICAgICAgb2JqID0gYXNP
YmplY3QocHJvdG90eXBlKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGZvciAoOyA7IG9iaiA9
IGFzT2JqZWN0KHByb3RvdHlwZSkpIHsKLSAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBv
YmotPnN0cnVjdHVyZSh2bSk7Ci0gICAgICAgIGlmIChVTkxJS0VMWShzdHJ1Y3R1cmUtPnR5cGVJ
bmZvKCkuaGFzUHV0UHJvcGVydHlTZWN1cml0eUNoZWNrKCkpKSB7Ci0gICAgICAgICAgICBvYmot
Pm1ldGhvZFRhYmxlKHZtKS0+ZG9QdXRQcm9wZXJ0eVNlY3VyaXR5Q2hlY2sob2JqLCBnbG9iYWxP
YmplY3QsIHByb3BlcnR5TmFtZSwgc2xvdCk7Ci0gICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBU
SU9OKHNjb3BlLCBmYWxzZSk7Ci0gICAgICAgIH0KLSAgICAgICAgdW5zaWduZWQgYXR0cmlidXRl
czsKLSAgICAgICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0ID0gc3RydWN0dXJlLT5nZXQodm0sIHBy
b3BlcnR5TmFtZSwgYXR0cmlidXRlcyk7Ci0gICAgICAgIGlmIChvZmZzZXQgIT0gaW52YWxpZE9m
ZnNldCkgewotICAgICAgICAgICAgaWYgKGF0dHJpYnV0ZXMgJiBQcm9wZXJ0eUF0dHJpYnV0ZTo6
UmVhZE9ubHkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIHR5cGVFcnJvcihnbG9iYWxPYmplY3Qs
IHNjb3BlLCBzbG90LmlzU3RyaWN0TW9kZSgpLCBSZWFkb25seVByb3BlcnR5V3JpdGVFcnJvcik7
Ci0KLSAgICAgICAgICAgIEpTVmFsdWUgZ3MgPSBvYmotPmdldERpcmVjdChvZmZzZXQpOwotICAg
ICAgICAgICAgaWYgKGdzLmlzR2V0dGVyU2V0dGVyKCkpCi0gICAgICAgICAgICAgICAgUkVMRUFT
RV9BTkRfUkVUVVJOKHNjb3BlLCBqc0Nhc3Q8R2V0dGVyU2V0dGVyKj4oZ3MpLT5jYWxsU2V0dGVy
KGdsb2JhbE9iamVjdCwgKnRoaXMsIHZhbHVlLCBzbG90LmlzU3RyaWN0TW9kZSgpKSk7Ci0KLSAg
ICAgICAgICAgIGlmIChncy5pc0N1c3RvbUdldHRlclNldHRlcigpKSB7Ci0gICAgICAgICAgICAg
ICAgYXV0byBzZXR0ZXIgPSBqc0Nhc3Q8Q3VzdG9tR2V0dGVyU2V0dGVyKj4oZ3MuYXNDZWxsKCkp
LT5zZXR0ZXIoKTsKLSAgICAgICAgICAgICAgICBib29sIGlzQWNjZXNzb3IgPSBhdHRyaWJ1dGVz
ICYgUHJvcGVydHlBdHRyaWJ1dGU6OkN1c3RvbUFjY2Vzc29yOwotICAgICAgICAgICAgICAgIGF1
dG8gcmVzdWx0ID0gY2FsbEN1c3RvbVNldHRlcihnbG9iYWxPYmplY3QsIHNldHRlciwgaXNBY2Nl
c3Nvciwgb2JqLCBzbG90LnRoaXNWYWx1ZSgpLCB2YWx1ZSwgcHJvcGVydHlOYW1lKTsKLSAgICAg
ICAgICAgICAgICBpZiAocmVzdWx0ICE9IFRyaVN0YXRlOjpJbmRldGVybWluYXRlKQotICAgICAg
ICAgICAgICAgICAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIHJlc3VsdCA9PSBUcmlTdGF0
ZTo6VHJ1ZSk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIC8vIElmIHRoZXJlJ3MgYW4g
ZXhpc3RpbmcgcHJvcGVydHkgb24gdGhlIG9iamVjdCBvciBvbmUgb2YgaXRzIAotICAgICAgICAg
ICAgLy8gcHJvdG90eXBlcyBpdCBzaG91bGQgYmUgcmVwbGFjZWQsIHNvIGJyZWFrIGhlcmUuCi0g
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBpZiAob2JqLT50eXBlKCkgPT0g
UHJveHlPYmplY3RUeXBlKSB7Ci0gICAgICAgICAgICBhdXRvKiBwcm94eSA9IGpzQ2FzdDxQcm94
eU9iamVjdCo+KG9iaik7Ci0gICAgICAgICAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIHBy
b3h5LT5Qcm94eU9iamVjdDo6cHV0KHByb3h5LCBnbG9iYWxPYmplY3QsIHByb3BlcnR5TmFtZSwg
dmFsdWUsIHNsb3QpKTsKLSAgICAgICAgfQotICAgICAgICBwcm90b3R5cGUgPSBvYmotPmdldFBy
b3RvdHlwZSh2bSwgZ2xvYmFsT2JqZWN0KTsKLSAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihz
Y29wZSwgZmFsc2UpOwotICAgICAgICBpZiAocHJvdG90eXBlLmlzTnVsbCgpKQotICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgfQotICAgIAotICAgIHJldHVybiB0eXBlRXJyb3IoZ2xvYmFsT2JqZWN0
LCBzY29wZSwgc2xvdC5pc1N0cmljdE1vZGUoKSwgUmVhZG9ubHlQcm9wZXJ0eVdyaXRlRXJyb3Ip
OworICAgIFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwgb2JqLT5tZXRob2RUYWJsZSh2bSktPnB1
dChvYmosIGdsb2JhbE9iamVjdCwgcHJvcGVydHlOYW1lLCB2YWx1ZSwgc2xvdCkpOwogfQogCiBi
b29sIEpTVmFsdWU6OnB1dFRvUHJpbWl0aXZlQnlJbmRleChKU0dsb2JhbE9iamVjdCogZ2xvYmFs
T2JqZWN0LCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUgdmFsdWUsIGJvb2wgc2hvdWxk
VGhyb3cpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NlbGwuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ2VsbC5jcHAJKHJl
dmlzaW9uIDI3ODUzOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ2VsbC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTIwMCwxMSArMjAwLDYgQEAgYm9vbCBKU0NlbGw6OmdldE93
blByb3BlcnR5U2xvdEJ5SW5kZXgoSgogICAgIHJldHVybiBmYWxzZTsKIH0KIAotdm9pZCBKU0Nl
bGw6OmRvUHV0UHJvcGVydHlTZWN1cml0eUNoZWNrKEpTT2JqZWN0KiwgSlNHbG9iYWxPYmplY3Qq
LCBQcm9wZXJ0eU5hbWUsIFB1dFByb3BlcnR5U2xvdCYpCi17Ci0gICAgUkVMRUFTRV9BU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKLX0KLQogdm9pZCBKU0NlbGw6OmdldE93blByb3BlcnR5TmFtZXMoSlNP
YmplY3QqLCBKU0dsb2JhbE9iamVjdCosIFByb3BlcnR5TmFtZUFycmF5JiwgRG9udEVudW1Qcm9w
ZXJ0aWVzTW9kZSkKIHsKICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDZWxsLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDZWxsLmgJKHJldmlzaW9uIDI3ODUzOSkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ2VsbC5oCSh3b3JraW5nIGNvcHkpCkBA
IC0yNTcsNyArMjU3LDYgQEAgcHJvdGVjdGVkOgogICAgIHN0YXRpYyBib29sIGRlZmluZU93blBy
b3BlcnR5KEpTT2JqZWN0KiwgSlNHbG9iYWxPYmplY3QqLCBQcm9wZXJ0eU5hbWUsIGNvbnN0IFBy
b3BlcnR5RGVzY3JpcHRvciYsIGJvb2wgc2hvdWxkVGhyb3cpOwogICAgIHN0YXRpYyBib29sIGdl
dE93blByb3BlcnR5U2xvdChKU09iamVjdCosIEpTR2xvYmFsT2JqZWN0KiwgUHJvcGVydHlOYW1l
LCBQcm9wZXJ0eVNsb3QmKTsKICAgICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3RCeUlu
ZGV4KEpTT2JqZWN0KiwgSlNHbG9iYWxPYmplY3QqLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIFBy
b3BlcnR5U2xvdCYpOwotICAgIHN0YXRpYyBOT19SRVRVUk5fRFVFX1RPX0NSQVNIIHZvaWQgZG9Q
dXRQcm9wZXJ0eVNlY3VyaXR5Q2hlY2soSlNPYmplY3QqLCBKU0dsb2JhbE9iamVjdCosIFByb3Bl
cnR5TmFtZSwgUHV0UHJvcGVydHlTbG90Jik7CiAKIHByaXZhdGU6CiAgICAgZnJpZW5kIGNsYXNz
IExMSW50T2Zmc2V0c0V4dHJhY3RvcjsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTRnVuY3Rpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTRnVuY3Rpb24uY3BwCShyZXZpc2lvbiAyNzg1MzkpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU0Z1bmN0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTQ1LDEw
ICs1NDUsNiBAQCBib29sIEpTRnVuY3Rpb246OnB1dChKU0NlbGwqIGNlbGwsIEpTR2xvCiAgICAg
ICAgICAgICByYXJlRGF0YS0+c2V0SGFzTW9kaWZpZWROYW1lRm9yTm9uSG9zdEZ1bmN0aW9uKCk7
CiAgICAgfQogCi0gICAgaWYgKFVOTElLRUxZKGlzVGhpc1ZhbHVlQWx0ZXJlZChzbG90LCB0aGlz
T2JqZWN0KSkpCi0gICAgICAgIFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwgb3JkaW5hcnlTZXRT
bG93KGdsb2JhbE9iamVjdCwgdGhpc09iamVjdCwgcHJvcGVydHlOYW1lLCB2YWx1ZSwgc2xvdC50
aGlzVmFsdWUoKSwgc2xvdC5pc1N0cmljdE1vZGUoKSkpOwotCi0KICAgICBpZiAodGhpc09iamVj
dC0+aXNIb3N0T3JCdWlsdGluRnVuY3Rpb24oKSkgewogICAgICAgICBQcm9wZXJ0eVN0YXR1cyBw
cm9wZXJ0eVR5cGUgPSB0aGlzT2JqZWN0LT5yZWlmeUxhenlQcm9wZXJ0eUZvckhvc3RPckJ1aWx0
aW5JZk5lZWRlZCh2bSwgZ2xvYmFsT2JqZWN0LCBwcm9wZXJ0eU5hbWUpOwogICAgICAgICBSRVRV
Uk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBmYWxzZSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU0Z1bmN0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNGdW5jdGlvbi5oCShyZXZpc2lvbiAyNzg1MzkpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU0Z1bmN0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTcwLDcg
KzcwLDcgQEAgcHVibGljOgogICAgIH0KICAgICAKICAgICB0eXBlZGVmIEpTQ2FsbGVlIEJhc2U7
Ci0gICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0
cnVjdHVyZUZsYWdzIHwgT3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90IHwgT3ZlcnJpZGVzR2V0
T3duU3BlY2lhbFByb3BlcnR5TmFtZXMgfCBPdmVycmlkZXNHZXRDYWxsRGF0YTsKKyAgICBzdGF0
aWMgY29uc3RleHByIHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxh
Z3MgfCBPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3QgfCBPdmVycmlkZXNHZXRPd25TcGVjaWFs
UHJvcGVydHlOYW1lcyB8IE92ZXJyaWRlc0dldENhbGxEYXRhIHwgT3ZlcnJpZGVzUHV0OwogCiAg
ICAgc3RhdGljIHNpemVfdCBhbGxvY2F0aW9uU2l6ZShDaGVja2VkPHNpemVfdD4gaW5saW5lQ2Fw
YWNpdHkpCiAgICAgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHZW5l
cmljVHlwZWRBcnJheVZpZXcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU0dlbmVyaWNUeXBlZEFycmF5Vmlldy5oCShyZXZpc2lvbiAyNzg1MzkpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dlbmVyaWNUeXBlZEFycmF5Vmlldy5oCSh3
b3JraW5nIGNvcHkpCkBAIC05OSw3ICs5OSw3IEBAIHB1YmxpYzoKICAgICB1c2luZyBFbGVtZW50
VHlwZSA9IHR5cGVuYW1lIEFkYXB0b3I6OlR5cGU7CiAgICAgc3RhdGljIGNvbnN0ZXhwciBUeXBl
ZEFycmF5Q29udGVudFR5cGUgY29udGVudFR5cGUgPSBBZGFwdG9yOjpjb250ZW50VHlwZTsKIAot
ICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1
Y3R1cmVGbGFncyB8IE92ZXJyaWRlc0dldE93blByb3BlcnR5U2xvdCB8IE92ZXJyaWRlc0dldE93
blByb3BlcnR5TmFtZXMgfCBJbnRlcmNlcHRzR2V0T3duUHJvcGVydHlTbG90QnlJbmRleEV2ZW5X
aGVuTGVuZ3RoSXNOb3RaZXJvOworICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgU3RydWN0
dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8IE92ZXJyaWRlc0dldE93blByb3BlcnR5
U2xvdCB8IE92ZXJyaWRlc0dldE93blByb3BlcnR5TmFtZXMgfCBPdmVycmlkZXNQdXQgfCBJbnRl
cmNlcHRzR2V0T3duUHJvcGVydHlTbG90QnlJbmRleEV2ZW5XaGVuTGVuZ3RoSXNOb3RaZXJvOwog
CiAgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBlbGVtZW50U2l6ZSA9IHNpemVvZih0eXBl
bmFtZSBBZGFwdG9yOjpUeXBlKTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNHbG9iYWxMZXhpY2FsRW52aXJvbm1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbExleGljYWxFbnZpcm9ubWVudC5oCShyZXZpc2lv
biAyNzg1MzkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbExleGlj
YWxFbnZpcm9ubWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMyw3ICszMyw3IEBAIGNsYXNzIEpT
R2xvYmFsTGV4aWNhbEVudmlyb25tZW50IGZpbmFsIDoKIHB1YmxpYzoKICAgICB1c2luZyBCYXNl
ID0gSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdDsKIAotICAgIHN0YXRpYyBjb25zdGV4cHIgdW5z
aWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8IE92ZXJyaWRlc0dl
dE93blByb3BlcnR5U2xvdDsKKyAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIFN0cnVjdHVy
ZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxhZ3MgfCBPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNs
b3QgfCBPdmVycmlkZXNQdXQ7CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDZWxsVHlwZSwgU3Vi
c3BhY2VBY2Nlc3MgbW9kZT4KICAgICBzdGF0aWMgSXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZN
JiB2bSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2Jh
bE9iamVjdC5jcHAJKHJldmlzaW9uIDI3ODUzOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTR2xvYmFsT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTU3Niw4ICsxNTc2
LDE1IEBAIGJvb2wgSlNHbG9iYWxPYmplY3Q6OnB1dChKU0NlbGwqIGNlbGwsIEoKICAgICBKU0ds
b2JhbE9iamVjdCogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0dsb2JhbE9iamVjdCo+KGNlbGwpOwog
ICAgIEFTU0VSVCghSGVhcDo6aGVhcCh2YWx1ZSkgfHwgSGVhcDo6aGVhcCh2YWx1ZSkgPT0gSGVh
cDo6aGVhcCh0aGlzT2JqZWN0KSk7CiAKLSAgICBpZiAoVU5MSUtFTFkoaXNUaGlzVmFsdWVBbHRl
cmVkKHNsb3QsIHRoaXNPYmplY3QpKSkKLSAgICAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3Bl
LCBvcmRpbmFyeVNldFNsb3coZ2xvYmFsT2JqZWN0LCB0aGlzT2JqZWN0LCBwcm9wZXJ0eU5hbWUs
IHZhbHVlLCBzbG90LnRoaXNWYWx1ZSgpLCBzbG90LmlzU3RyaWN0TW9kZSgpKSk7CisgICAgaWYg
KFVOTElLRUxZKGlzVGhpc1ZhbHVlQWx0ZXJlZChzbG90LCB0aGlzT2JqZWN0KSkpIHsKKyAgICAg
ICAgU3ltYm9sVGFibGVFbnRyeTo6RmFzdCBlbnRyeSA9IHRoaXNPYmplY3QtPnN5bWJvbFRhYmxl
KCktPmdldChwcm9wZXJ0eU5hbWUudWlkKCkpOworICAgICAgICBpZiAoIWVudHJ5LmlzTnVsbCgp
KSB7CisgICAgICAgICAgICBpZiAoZW50cnkuaXNSZWFkT25seSgpKQorICAgICAgICAgICAgICAg
IHJldHVybiB0eXBlRXJyb3IoZ2xvYmFsT2JqZWN0LCBzY29wZSwgc2xvdC5pc1N0cmljdE1vZGUo
KSwgUmVhZG9ubHlQcm9wZXJ0eVdyaXRlRXJyb3IpOworICAgICAgICAgICAgUkVMRUFTRV9BTkRf
UkVUVVJOKHNjb3BlLCBKU09iamVjdDo6ZGVmaW5lUHJvcGVydHlPblJlY2VpdmVyKGdsb2JhbE9i
amVjdCwgcHJvcGVydHlOYW1lLCB2YWx1ZSwgc2xvdCkpOworICAgICAgICB9CisgICAgICAgIFJF
TEVBU0VfQU5EX1JFVFVSTihzY29wZSwgQmFzZTo6cHV0KHRoaXNPYmplY3QsIGdsb2JhbE9iamVj
dCwgcHJvcGVydHlOYW1lLCB2YWx1ZSwgc2xvdCkpOworICAgIH0KIAogICAgIGJvb2wgc2hvdWxk
VGhyb3dSZWFkT25seUVycm9yID0gc2xvdC5pc1N0cmljdE1vZGUoKTsKICAgICBib29sIGlnbm9y
ZVJlYWRPbmx5RXJyb3JzID0gZmFsc2U7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU0dsb2JhbE9iamVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmgJKHJldmlzaW9uIDI3ODUzOSkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAg
LTU5Niw3ICs1OTYsNyBAQCBwdWJsaWM6CiAgICAgICAgIAogcHVibGljOgogICAgIHVzaW5nIEJh
c2UgPSBKU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0OwotICAgIHN0YXRpYyBjb25zdGV4cHIgdW5z
aWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8IEhhc1N0YXRpY1By
b3BlcnR5VGFibGUgfCBPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3QgfCBJc0ltbXV0YWJsZVBy
b3RvdHlwZUV4b3RpY09iamVjdDsKKyAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIFN0cnVj
dHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxhZ3MgfCBIYXNTdGF0aWNQcm9wZXJ0eVRhYmxl
IHwgT3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90IHwgT3ZlcnJpZGVzUHV0IHwgSXNJbW11dGFi
bGVQcm90b3R5cGVFeG90aWNPYmplY3Q7CiAKICAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVl
ZHNEZXN0cnVjdGlvbiA9IHRydWU7CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2VsbFR5cGUsIFN1
YnNwYWNlQWNjZXNzIG1vZGU+CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U0xleGljYWxFbnZpcm9ubWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTTGV4aWNhbEVudmlyb25tZW50LmgJKHJldmlzaW9uIDI3ODUzOSkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTGV4aWNhbEVudmlyb25tZW50LmgJKHdvcmtp
bmcgY29weSkKQEAgLTQ4LDcgKzQ4LDcgQEAgcHVibGljOgogICAgIH0KIAogICAgIHVzaW5nIEJh
c2UgPSBKU1N5bWJvbFRhYmxlT2JqZWN0OwotICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQg
U3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8IE92ZXJyaWRlc0dldE93blBy
b3BlcnR5U2xvdCB8IE92ZXJyaWRlc0dldE93blNwZWNpYWxQcm9wZXJ0eU5hbWVzOworICAgIHN0
YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVG
bGFncyB8IE92ZXJyaWRlc0dldE93blByb3BlcnR5U2xvdCB8IE92ZXJyaWRlc0dldE93blNwZWNp
YWxQcm9wZXJ0eU5hbWVzIHwgT3ZlcnJpZGVzUHV0OwogCiAgICAgV3JpdGVCYXJyaWVyQmFzZTxV
bmtub3duPiogdmFyaWFibGVzKCkKICAgICB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU01vZHVsZUVudmlyb25tZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNNb2R1bGVFbnZpcm9ubWVudC5oCShyZXZpc2lvbiAyNzg1Mzkp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU01vZHVsZUVudmlyb25tZW50LmgJ
KHdvcmtpbmcgY29weSkKQEAgLTQwLDcgKzQwLDcgQEAgY2xhc3MgSlNNb2R1bGVFbnZpcm9ubWVu
dCBmaW5hbCA6IHB1YmxpYwogICAgIGZyaWVuZCBjbGFzcyBMTEludE9mZnNldHNFeHRyYWN0b3I7
CiBwdWJsaWM6CiAgICAgdXNpbmcgQmFzZSA9IEpTTGV4aWNhbEVudmlyb25tZW50OwotICAgIHN0
YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVG
bGFncyB8IE92ZXJyaWRlc0dldE93blByb3BlcnR5U2xvdCB8IE92ZXJyaWRlc0dldE93blNwZWNp
YWxQcm9wZXJ0eU5hbWVzOworICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgU3RydWN0dXJl
RmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8IE92ZXJyaWRlc0dldE93blByb3BlcnR5U2xv
dCB8IE92ZXJyaWRlc0dldE93blNwZWNpYWxQcm9wZXJ0eU5hbWVzIHwgT3ZlcnJpZGVzUHV0Owog
CiAgICAgc3RhdGljIEpTTW9kdWxlRW52aXJvbm1lbnQqIGNyZWF0ZShWTSYgdm0sIEpTR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTU2NvcGUqIGN1cnJlbnRTY29wZSwgU3ltYm9sVGFibGUq
IHN5bWJvbFRhYmxlLCBKU1ZhbHVlIGluaXRpYWxWYWx1ZSwgQWJzdHJhY3RNb2R1bGVSZWNvcmQq
IG1vZHVsZVJlY29yZCkKICAgICB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU01vZHVsZU5hbWVzcGFjZU9iamVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTTW9kdWxlTmFtZXNwYWNlT2JqZWN0LmgJKHJldmlzaW9uIDI3ODUz
OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTW9kdWxlTmFtZXNwYWNlT2Jq
ZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTM0LDcgKzM0LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiBj
bGFzcyBKU01vZHVsZU5hbWVzcGFjZU9iamVjdCBmaW5hbCA6IHB1YmxpYyBKU05vbkZpbmFsT2Jq
ZWN0IHsKIHB1YmxpYzoKICAgICB1c2luZyBCYXNlID0gSlNOb25GaW5hbE9iamVjdDsKLSAgICBz
dGF0aWMgY29uc3RleHByIHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJl
RmxhZ3MgfCBPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3QgfCBPdmVycmlkZXNHZXRPd25Qcm9w
ZXJ0eU5hbWVzIHwgSW50ZXJjZXB0c0dldE93blByb3BlcnR5U2xvdEJ5SW5kZXhFdmVuV2hlbkxl
bmd0aElzTm90WmVybyB8IEdldE93blByb3BlcnR5U2xvdElzSW1wdXJlRm9yUHJvcGVydHlBYnNl
bmNlIHwgSXNJbW11dGFibGVQcm90b3R5cGVFeG90aWNPYmplY3Q7CisgICAgc3RhdGljIGNvbnN0
ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwgT3Zl
cnJpZGVzR2V0T3duUHJvcGVydHlTbG90IHwgT3ZlcnJpZGVzR2V0T3duUHJvcGVydHlOYW1lcyB8
IE92ZXJyaWRlc1B1dCB8IEludGVyY2VwdHNHZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4RXZlbldo
ZW5MZW5ndGhJc05vdFplcm8gfCBHZXRPd25Qcm9wZXJ0eVNsb3RJc0ltcHVyZUZvclByb3BlcnR5
QWJzZW5jZSB8IElzSW1tdXRhYmxlUHJvdG90eXBlRXhvdGljT2JqZWN0OwogCiAgICAgc3RhdGlj
IGNvbnN0ZXhwciBib29sIG5lZWRzRGVzdHJ1Y3Rpb24gPSB0cnVlOwogICAgIHN0YXRpYyB2b2lk
IGRlc3Ryb3koSlNDZWxsKik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U09iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNPYmplY3QuY3BwCShyZXZpc2lvbiAyNzg1MzkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU09iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY0NiwxMCArNjQ2LDYgQEAg
Ym9vbCBKU09iamVjdDo6Z2V0T3duUHJvcGVydHlTbG90KEpTT2JqZQogewogICAgIHJldHVybiBn
ZXRPd25Qcm9wZXJ0eVNsb3RJbXBsKG9iamVjdCwgZ2xvYmFsT2JqZWN0LCBwcm9wZXJ0eU5hbWUs
IHNsb3QpOwogfQotCi12b2lkIEpTT2JqZWN0Ojpkb1B1dFByb3BlcnR5U2VjdXJpdHlDaGVjayhK
U09iamVjdCosIEpTR2xvYmFsT2JqZWN0KiwgUHJvcGVydHlOYW1lLCBQdXRQcm9wZXJ0eVNsb3Qm
KQotewotfQogI2VuZGlmIC8vIEFTU0VSVF9FTkFCTEVECiAKIC8vIGh0dHBzOi8vdGMzOS5naXRo
dWIuaW8vZWNtYTI2Mi8jc2VjLW9yZGluYXJ5c2V0CkBAIC03NTgsNyArNzU0LDcgQEAgYm9vbCBv
cmRpbmFyeVNldFNsb3coSlNHbG9iYWxPYmplY3QqIGdsbwogICAgIHJldHVybiB0cnVlOwogfQog
Ci0vLyBFQ01BIDguNi4yLjIKKy8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtb3JkaW5h
cnlzZXQKIGJvb2wgSlNPYmplY3Q6OnB1dChKU0NlbGwqIGNlbGwsIEpTR2xvYmFsT2JqZWN0KiBn
bG9iYWxPYmplY3QsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUgdmFsdWUsIFB1
dFByb3BlcnR5U2xvdCYgc2xvdCkKIHsKICAgICByZXR1cm4gcHV0SW5saW5lRm9ySlNPYmplY3Qo
Y2VsbCwgZ2xvYmFsT2JqZWN0LCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCBzbG90KTsKQEAgLTc2Niw2
NiArNzYyLDk1IEBAIGJvb2wgSlNPYmplY3Q6OnB1dChKU0NlbGwqIGNlbGwsIEpTR2xvYmEKIAog
Ym9vbCBKU09iamVjdDo6cHV0SW5saW5lU2xvdyhKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0
LCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBKU1ZhbHVlIHZhbHVlLCBQdXRQcm9wZXJ0eVNs
b3QmIHNsb3QpCiB7Ci0gICAgQVNTRVJUKCFpc1RoaXNWYWx1ZUFsdGVyZWQoc2xvdCwgdGhpcykp
OworICAgIEFTU0VSVCghcGFyc2VJbmRleChwcm9wZXJ0eU5hbWUpKTsKIAogICAgIFZNJiB2bSA9
IGdsb2JhbE9iamVjdC0+dm0oKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09Q
RSh2bSk7CiAKKyAgICBpZiAoVU5MSUtFTFkoIXZtLmlzU2FmZVRvUmVjdXJzZVNvZnQoKSkpIHsK
KyAgICAgICAgdGhyb3dTdGFja092ZXJmbG93RXJyb3IoZ2xvYmFsT2JqZWN0LCBzY29wZSk7Cisg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKICAgICBKU09iamVjdCogb2JqID0gdGhpczsK
ICAgICBmb3IgKDs7KSB7CiAgICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gb2JqLT5zdHJ1
Y3R1cmUodm0pOwotICAgICAgICBpZiAoVU5MSUtFTFkoc3RydWN0dXJlLT50eXBlSW5mbygpLmhh
c1B1dFByb3BlcnR5U2VjdXJpdHlDaGVjaygpKSkgewotICAgICAgICAgICAgb2JqLT5tZXRob2RU
YWJsZSh2bSktPmRvUHV0UHJvcGVydHlTZWN1cml0eUNoZWNrKG9iaiwgZ2xvYmFsT2JqZWN0LCBw
cm9wZXJ0eU5hbWUsIHNsb3QpOwotICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29w
ZSwgZmFsc2UpOwotICAgICAgICB9CisgICAgICAgIGlmIChvYmogIT0gdGhpcyAmJiBzdHJ1Y3R1
cmUtPnR5cGVJbmZvKCkub3ZlcnJpZGVzUHV0KCkpCisgICAgICAgICAgICBSRUxFQVNFX0FORF9S
RVRVUk4oc2NvcGUsIG9iai0+bWV0aG9kVGFibGUodm0pLT5wdXQob2JqLCBnbG9iYWxPYmplY3Qs
IHByb3BlcnR5TmFtZSwgdmFsdWUsIHNsb3QpKTsKKworICAgICAgICBib29sIGhhc1Byb3BlcnR5
ID0gZmFsc2U7CiAgICAgICAgIHVuc2lnbmVkIGF0dHJpYnV0ZXM7CisgICAgICAgIFB1dFByb3Bl
cnR5U2xvdDo6UHV0VmFsdWVGdW5jIGN1c3RvbVNldHRlciA9IG51bGxwdHI7CiAgICAgICAgIFBy
b3BlcnR5T2Zmc2V0IG9mZnNldCA9IHN0cnVjdHVyZS0+Z2V0KHZtLCBwcm9wZXJ0eU5hbWUsIGF0
dHJpYnV0ZXMpOwogICAgICAgICBpZiAoaXNWYWxpZE9mZnNldChvZmZzZXQpKSB7Ci0gICAgICAg
ICAgICBpZiAoYXR0cmlidXRlcyAmIFByb3BlcnR5QXR0cmlidXRlOjpSZWFkT25seSkgewotICAg
ICAgICAgICAgICAgIEFTU0VSVCh0aGlzLT5wcm90b3R5cGVDaGFpbk1heUludGVyY2VwdFN0b3Jl
VG8odm0sIHByb3BlcnR5TmFtZSkgfHwgb2JqID09IHRoaXMpOwotICAgICAgICAgICAgICAgIHJl
dHVybiB0eXBlRXJyb3IoZ2xvYmFsT2JqZWN0LCBzY29wZSwgc2xvdC5pc1N0cmljdE1vZGUoKSwg
UmVhZG9ubHlQcm9wZXJ0eVdyaXRlRXJyb3IpOworICAgICAgICAgICAgaGFzUHJvcGVydHkgPSB0
cnVlOworICAgICAgICAgICAgaWYgKGF0dHJpYnV0ZXMgJiBQcm9wZXJ0eUF0dHJpYnV0ZTo6Q3Vz
dG9tQWNjZXNzb3JPclZhbHVlKQorICAgICAgICAgICAgICAgIGN1c3RvbVNldHRlciA9IGpzQ2Fz
dDxDdXN0b21HZXR0ZXJTZXR0ZXIqPihvYmotPmdldERpcmVjdChvZmZzZXQpKS0+c2V0dGVyKCk7
CisgICAgICAgIH0gZWxzZSBpZiAoc3RydWN0dXJlLT5oYXNOb25SZWlmaWVkU3RhdGljUHJvcGVy
dGllcygpKSB7CisgICAgICAgICAgICBpZiAoYXV0byBlbnRyeSA9IHN0cnVjdHVyZS0+ZmluZFBy
b3BlcnR5SGFzaEVudHJ5KHByb3BlcnR5TmFtZSkpIHsKKyAgICAgICAgICAgICAgICBoYXNQcm9w
ZXJ0eSA9IHRydWU7CisgICAgICAgICAgICAgICAgYXR0cmlidXRlcyA9IGVudHJ5LT52YWx1ZS0+
YXR0cmlidXRlcygpOworCisgICAgICAgICAgICAgICAgLy8gRklYTUU6IFJlbW92ZSB0aGlzIGFm
dGVyIHdyaXRhYmxlIGFjY2Vzc29ycyBhcmUgaW50cm9kdWNlZCB0byBzdGF0aWMgaGFzaCB0YWJs
ZXMuCisgICAgICAgICAgICAgICAgaWYgKGF0dHJpYnV0ZXMgJiBQcm9wZXJ0eUF0dHJpYnV0ZTo6
QWNjZXNzb3IpCisgICAgICAgICAgICAgICAgICAgIGF0dHJpYnV0ZXMgfD0gUHJvcGVydHlBdHRy
aWJ1dGU6OlJlYWRPbmx5OworICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBSZW1vdmUgdGhpcyBh
ZnRlciB3ZSBzdG9wIGRlZmF1bHRpbmcgdG8gQ3VzdG9tVmFsdWUgaW4gc3RhdGljIGhhc2ggdGFi
bGVzLgorICAgICAgICAgICAgICAgIGlmICghKGF0dHJpYnV0ZXMgJiAoUHJvcGVydHlBdHRyaWJ1
dGU6OkN1c3RvbUFjY2Vzc29yIHwgUHJvcGVydHlBdHRyaWJ1dGU6OkJ1aWx0aW5PckZ1bmN0aW9u
T3JBY2Nlc3Nvck9yTGF6eVByb3BlcnR5T3JDb25zdGFudCkpKQorICAgICAgICAgICAgICAgICAg
ICBhdHRyaWJ1dGVzIHw9IFByb3BlcnR5QXR0cmlidXRlOjpDdXN0b21WYWx1ZTsKKworICAgICAg
ICAgICAgICAgIGlmIChhdHRyaWJ1dGVzICYgUHJvcGVydHlBdHRyaWJ1dGU6OkN1c3RvbUFjY2Vz
c29yT3JWYWx1ZSkKKyAgICAgICAgICAgICAgICAgICAgY3VzdG9tU2V0dGVyID0gZW50cnktPnZh
bHVlLT5wcm9wZXJ0eVB1dHRlcigpOwogICAgICAgICAgICAgfQorICAgICAgICB9CiAKLSAgICAg
ICAgICAgIEpTVmFsdWUgZ3MgPSBvYmotPmdldERpcmVjdChvZmZzZXQpOwotICAgICAgICAgICAg
aWYgKGdzLmlzR2V0dGVyU2V0dGVyKCkpIHsKKyAgICAgICAgaWYgKGhhc1Byb3BlcnR5KSB7Cisg
ICAgICAgICAgICBpZiAoYXR0cmlidXRlcyAmIFByb3BlcnR5QXR0cmlidXRlOjpSZWFkT25seSkK
KyAgICAgICAgICAgICAgICByZXR1cm4gdHlwZUVycm9yKGdsb2JhbE9iamVjdCwgc2NvcGUsIHNs
b3QuaXNTdHJpY3RNb2RlKCksIFJlYWRvbmx5UHJvcGVydHlXcml0ZUVycm9yKTsKKyAgICAgICAg
ICAgIGlmIChhdHRyaWJ1dGVzICYgUHJvcGVydHlBdHRyaWJ1dGU6OkFjY2Vzc29yKSB7CisgICAg
ICAgICAgICAgICAgQVNTRVJUKGlzVmFsaWRPZmZzZXQob2Zmc2V0KSk7CiAgICAgICAgICAgICAg
ICAgLy8gV2UgbmVlZCB0byBtYWtlIHN1cmUgdGhhdCB3ZSBkZWNpZGUgdG8gY2FjaGUgdGhpcyBw
cm9wZXJ0eSBiZWZvcmUgd2UgcG90ZW50aWFsbHkgZXhlY3V0ZSBhcmliaXRyYXJ5IEpTLgogICAg
ICAgICAgICAgICAgIGlmICghdGhpcy0+c3RydWN0dXJlKHZtKS0+aXNVbmNhY2hlYWJsZURpY3Rp
b25hcnkoKSkKICAgICAgICAgICAgICAgICAgICAgc2xvdC5zZXRDYWNoZWFibGVTZXR0ZXIob2Jq
LCBvZmZzZXQpOwogICAgICAgICAgICAgICAgIFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwganND
YXN0PEdldHRlclNldHRlcio+KG9iai0+Z2V0RGlyZWN0KG9mZnNldCkpLT5jYWxsU2V0dGVyKGds
b2JhbE9iamVjdCwgc2xvdC50aGlzVmFsdWUoKSwgdmFsdWUsIHNsb3QuaXNTdHJpY3RNb2RlKCkp
KTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChncy5pc0N1c3RvbUdldHRlclNldHRl
cigpKSB7Ci0gICAgICAgICAgICAgICAgYm9vbCBpc0FjY2Vzc29yID0gYXR0cmlidXRlcyAmIFBy
b3BlcnR5QXR0cmlidXRlOjpDdXN0b21BY2Nlc3NvcjsKLSAgICAgICAgICAgICAgICBhdXRvIHNl
dHRlciA9IGpzQ2FzdDxDdXN0b21HZXR0ZXJTZXR0ZXIqPihncy5hc0NlbGwoKSktPnNldHRlcigp
OworICAgICAgICAgICAgaWYgKGF0dHJpYnV0ZXMgJiBQcm9wZXJ0eUF0dHJpYnV0ZTo6Q3VzdG9t
QWNjZXNzb3IpIHsKKyAgICAgICAgICAgICAgICAvLyBGSVhNRTogUmVtb3ZlIHRoaXMgYWZ0ZXIg
V2ViSURMIGdlbmVyYXRvciBpcyBmaXhlZCB0byBzZXQgUmVhZE9ubHkgZm9yIFtSdW50aW1lQ29u
ZGl0aW9uYWxseVJlYWRXcml0ZV0gYXR0cmlidXRlcy4KKyAgICAgICAgICAgICAgICBpZiAoIWN1
c3RvbVNldHRlcikKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAg
ICAgICAgIEFTU0VSVChjdXN0b21TZXR0ZXIpOwogICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBX
ZSBzaG91bGQgb25seSBiZSBjYWNoaW5nIHRoZXNlIGlmIHdlJ3JlIG5vdCBhbiB1bmNhY2hlYWJs
ZSBkaWN0aW9uYXJ5OgogICAgICAgICAgICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0yMTUzNDcKLQotICAgICAgICAgICAgICAgIC8vIFdlIG5lZWQgdG8g
bWFrZSBzdXJlIHRoYXQgd2UgZGVjaWRlIHRvIGNhY2hlIHRoaXMgcHJvcGVydHkgYmVmb3JlIHdl
IHBvdGVudGlhbGx5IGV4ZWN1dGUgYXJpYml0cmFyeSBKUy4KLSAgICAgICAgICAgICAgICBpZiAo
aXNBY2Nlc3NvcikKLSAgICAgICAgICAgICAgICAgICAgc2xvdC5zZXRDdXN0b21BY2Nlc3Nvcihv
YmosIHNldHRlcik7Ci0gICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICBz
bG90LnNldEN1c3RvbVZhbHVlKG9iaiwgc2V0dGVyKTsKLQotICAgICAgICAgICAgICAgIGF1dG8g
cmVzdWx0ID0gY2FsbEN1c3RvbVNldHRlcihnbG9iYWxPYmplY3QsIHNldHRlciwgaXNBY2Nlc3Nv
ciwgb2JqLCBzbG90LnRoaXNWYWx1ZSgpLCB2YWx1ZSwgcHJvcGVydHlOYW1lKTsKLSAgICAgICAg
ICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBmYWxzZSk7Ci0gICAgICAgICAgICAg
ICAgaWYgKHJlc3VsdCAhPSBUcmlTdGF0ZTo6SW5kZXRlcm1pbmF0ZSkKLSAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIHJlc3VsdCA9PSBUcmlTdGF0ZTo6VHJ1ZTsKKyAgICAgICAgICAgICAgICBz
bG90LnNldEN1c3RvbUFjY2Vzc29yKG9iaiwgY3VzdG9tU2V0dGVyKTsKKyAgICAgICAgICAgICAg
ICBzY29wZS5yZWxlYXNlKCk7CisgICAgICAgICAgICAgICAgY3VzdG9tU2V0dGVyKGdsb2JhbE9i
amVjdCwgSlNWYWx1ZTo6ZW5jb2RlKHNsb3QudGhpc1ZhbHVlKCkpLCBKU1ZhbHVlOjplbmNvZGUo
dmFsdWUpLCBwcm9wZXJ0eU5hbWUpOworICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAg
ICAgICAgICAgfQotICAgICAgICAgICAgQVNTRVJUKCEoYXR0cmlidXRlcyAmIFByb3BlcnR5QXR0
cmlidXRlOjpBY2Nlc3NvcikpOwotCi0gICAgICAgICAgICAvLyBJZiB0aGVyZSdzIGFuIGV4aXN0
aW5nIHByb3BlcnR5IG9uIHRoZSBiYXNlIG9iamVjdCwgb3Igb24gb25lIG9mIGl0cyAKLSAgICAg
ICAgICAgIC8vIHByb3RvdHlwZXMsIHdlIHNob3VsZCBzdG9yZSB0aGUgcHJvcGVydHkgb24gdGhl
ICpiYXNlKiBvYmplY3QuCi0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBp
ZiAoIW9iai0+c3RhdGljUHJvcGVydGllc1JlaWZpZWQodm0pKSB7Ci0gICAgICAgICAgICBpZiAo
b2JqLT5jbGFzc0luZm8odm0pLT5oYXNTdGF0aWNTZXR0ZXJPclJlYWRvbmx5UHJvcGVydGllcygp
KSB7Ci0gICAgICAgICAgICAgICAgaWYgKGF1dG8gZW50cnkgPSBvYmotPmZpbmRQcm9wZXJ0eUhh
c2hFbnRyeSh2bSwgcHJvcGVydHlOYW1lKSkKLSAgICAgICAgICAgICAgICAgICAgUkVMRUFTRV9B
TkRfUkVUVVJOKHNjb3BlLCBwdXRFbnRyeShnbG9iYWxPYmplY3QsIGVudHJ5LT50YWJsZS0+Y2xh
c3NGb3JUaGlzLCBlbnRyeS0+dmFsdWUsIG9iaiwgdGhpcywgcHJvcGVydHlOYW1lLCB2YWx1ZSwg
c2xvdCkpOworICAgICAgICAgICAgaWYgKGF0dHJpYnV0ZXMgJiBQcm9wZXJ0eUF0dHJpYnV0ZTo6
Q3VzdG9tVmFsdWUpIHsKKyAgICAgICAgICAgICAgICAvLyBGSVhNRTogT25jZSBsZWdhY3kgUmVn
RXhwIGZlYXR1cmVzIGFyZSBpbXBsZW1lbnRlZCwgdGhlcmUgd291bGQgYmUgbm8gdXNlIGNhc2Ug
Zm9yIGNhbGxpbmcgQ3VzdG9tVmFsdWUgc2V0dGVyIGlmIHJlY2VpdmVyIGlzIGFsdGVyZWQuCisg
ICAgICAgICAgICAgICAgaWYgKGN1c3RvbVNldHRlciAmJiAhKGlzVGhpc1ZhbHVlQWx0ZXJlZChz
bG90LCBvYmopICYmIHNsb3QuY29udGV4dCgpID09IFB1dFByb3BlcnR5U2xvdDo6UmVmbGVjdFNl
dCkpIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gRklYTUU6IFdlIHNob3VsZCBvbmx5IGJlIGNh
Y2hpbmcgdGhlc2UgaWYgd2UncmUgbm90IGFuIHVuY2FjaGVhYmxlIGRpY3Rpb25hcnk6CisgICAg
ICAgICAgICAgICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0yMTUzNDcKKyAgICAgICAgICAgICAgICAgICAgc2xvdC5zZXRDdXN0b21WYWx1ZShvYmosIGN1
c3RvbVNldHRlcik7CisgICAgICAgICAgICAgICAgICAgIFJFTEVBU0VfQU5EX1JFVFVSTihzY29w
ZSwgY3VzdG9tU2V0dGVyKGdsb2JhbE9iamVjdCwgSlNWYWx1ZTo6ZW5jb2RlKG9iaiksIEpTVmFs
dWU6OmVuY29kZSh2YWx1ZSksIHByb3BlcnR5TmFtZSkpOworICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICBpZiAoIWlzVGhpc1ZhbHVlQWx0ZXJlZChzbG90LCBvYmopKSB7CisgICAg
ICAgICAgICAgICAgICAgIC8vIEF2b2lkIFB1dE1vZGVQdXQgYmVjYXVzZSBpdCBmYWlscyBmb3Ig
bm9uLWV4dGVuc2libGUgc3RydWN0dXJlcy4KKyAgICAgICAgICAgICAgICAgICAgb2JqLT5wdXRE
aXJlY3Qodm0sIHByb3BlcnR5TmFtZSwgdmFsdWUsIGF0dHJpYnV0ZXNGb3JTdHJ1Y3R1cmUoYXR0
cmlidXRlcykgJiB+UHJvcGVydHlBdHRyaWJ1dGU6OkN1c3RvbVZhbHVlLCBzbG90KTsKKyAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICAgICAgfQogICAgICAgICAg
ICAgfQorICAgICAgICAgICAgaWYgKGF0dHJpYnV0ZXMgJiBQcm9wZXJ0eUF0dHJpYnV0ZTo6QnVp
bHRpbk9yRnVuY3Rpb25PckxhenlQcm9wZXJ0eSkgeworICAgICAgICAgICAgICAgIGlmICghaXNU
aGlzVmFsdWVBbHRlcmVkKHNsb3QsIG9iaikpIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gQXZv
aWQgUHV0TW9kZVB1dCBiZWNhdXNlIGl0IGZhaWxzIGZvciBub24tZXh0ZW5zaWJsZSBzdHJ1Y3R1
cmVzLgorICAgICAgICAgICAgICAgICAgICBvYmotPnB1dERpcmVjdCh2bSwgcHJvcGVydHlOYW1l
LCB2YWx1ZSwgYXR0cmlidXRlc0ZvclN0cnVjdHVyZShhdHRyaWJ1dGVzKSwgc2xvdCk7CisgICAg
ICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIC8vIElmIHRoZXJlJ3MgYW4gZXhpc3Rpbmcgd3JpdGFibGUgcHJv
cGVydHkgb24gdGhlIGJhc2Ugb2JqZWN0LCBvciBvbiBvbmUgb2YgaXRzIAorICAgICAgICAgICAg
Ly8gcHJvdG90eXBlcywgd2Ugc2hvdWxkIGF0dGVtcHQgdG8gc3RvcmUgdGhlIHByb3BlcnR5IG9u
IHRoZSByZWNlaXZlci4KKyAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9Ci0gICAgICAgIGlm
IChvYmotPnR5cGUoKSA9PSBQcm94eU9iamVjdFR5cGUpIHsKLSAgICAgICAgICAgIGF1dG8qIHBy
b3h5ID0ganNDYXN0PFByb3h5T2JqZWN0Kj4ob2JqKTsKLSAgICAgICAgICAgIFJFTEVBU0VfQU5E
X1JFVFVSTihzY29wZSwgcHJveHktPlByb3h5T2JqZWN0OjpwdXQocHJveHksIGdsb2JhbE9iamVj
dCwgcHJvcGVydHlOYW1lLCB2YWx1ZSwgc2xvdCkpOwotICAgICAgICB9CisKICAgICAgICAgSlNW
YWx1ZSBwcm90b3R5cGUgPSBvYmotPmdldFByb3RvdHlwZSh2bSwgZ2xvYmFsT2JqZWN0KTsKICAg
ICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZmFsc2UpOwogICAgICAgICBpZiAocHJv
dG90eXBlLmlzTnVsbCgpKQpAQCAtODMzLDkgKzg1OCw4MiBAQCBib29sIEpTT2JqZWN0OjpwdXRJ
bmxpbmVTbG93KEpTR2xvYmFsT2JqCiAgICAgICAgIG9iaiA9IGFzT2JqZWN0KHByb3RvdHlwZSk7
CiAgICAgfQogCi0gICAgaWYgKCFwdXREaXJlY3RJbnRlcm5hbDxQdXRNb2RlUHV0Pih2bSwgcHJv
cGVydHlOYW1lLCB2YWx1ZSwgMCwgc2xvdCkpCisgICAgc2NvcGUucmVsZWFzZSgpOworICAgIGlm
IChVTkxJS0VMWShpc1RoaXNWYWx1ZUFsdGVyZWQoc2xvdCwgdGhpcykpKQorICAgICAgICByZXR1
cm4gZGVmaW5lUHJvcGVydHlPblJlY2VpdmVyKGdsb2JhbE9iamVjdCwgcHJvcGVydHlOYW1lLCB2
YWx1ZSwgc2xvdCk7CisgICAgcmV0dXJuIHB1dElubGluZUZhc3QoZ2xvYmFsT2JqZWN0LCBwcm9w
ZXJ0eU5hbWUsIHZhbHVlLCBzbG90KTsKK30KKworc3RhdGljIE5FVkVSX0lOTElORSBib29sIGRl
ZmluZVByb3BlcnR5T25SZWNlaXZlclNsb3coSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwg
UHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSB2YWx1ZSwgSlNPYmplY3QqIHJlY2Vp
dmVyLCBib29sIHNob3VsZFRocm93KQoreworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0o
KTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKKyAgICBQcm9w
ZXJ0eVNsb3Qgc2xvdChyZWNlaXZlciwgUHJvcGVydHlTbG90OjpJbnRlcm5hbE1ldGhvZFR5cGU6
OkdldE93blByb3BlcnR5KTsKKyAgICBib29sIGhhc1Byb3BlcnR5ID0gcmVjZWl2ZXItPm1ldGhv
ZFRhYmxlKHZtKS0+Z2V0T3duUHJvcGVydHlTbG90KHJlY2VpdmVyLCBnbG9iYWxPYmplY3QsIHBy
b3BlcnR5TmFtZSwgc2xvdCk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZmFsc2Up
OworCisgICAgUHJvcGVydHlEZXNjcmlwdG9yIGRlc2NyaXB0b3I7CisgICAgaWYgKGhhc1Byb3Bl
cnR5KSB7CisgICAgICAgIC8vIEZJWE1FOiBGb3IgYW4gYWNjZXNzb3Igd2l0aCBzZXR0ZXIsIHRo
ZSBlcnJvciBtZXNzYWdlIGlzIG1pc2xlYWRpbmcuCisgICAgICAgIGlmIChzbG90LmF0dHJpYnV0
ZXMoKSAmIFByb3BlcnR5QXR0cmlidXRlOjpSZWFkT25seU9yQWNjZXNzb3JPckN1c3RvbUFjY2Vz
c29yKQorICAgICAgICAgICAgcmV0dXJuIHR5cGVFcnJvcihnbG9iYWxPYmplY3QsIHNjb3BlLCBz
aG91bGRUaHJvdywgUmVhZG9ubHlQcm9wZXJ0eVdyaXRlRXJyb3IpOworICAgICAgICBkZXNjcmlw
dG9yLnNldFZhbHVlKHZhbHVlKTsKKyAgICB9IGVsc2UKKyAgICAgICAgZGVzY3JpcHRvci5zZXRE
ZXNjcmlwdG9yKHZhbHVlLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oUHJvcGVydHlBdHRyaWJ1dGU6
Ok5vbmUpKTsKKworICAgIFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwgcmVjZWl2ZXItPm1ldGhv
ZFRhYmxlKHZtKS0+ZGVmaW5lT3duUHJvcGVydHkocmVjZWl2ZXIsIGdsb2JhbE9iamVjdCwgcHJv
cGVydHlOYW1lLCBkZXNjcmlwdG9yLCBzaG91bGRUaHJvdykpOworfQorCisvLyBodHRwczovL3Rj
MzkuZXMvZWNtYTI2Mi8jc2VjLW9yZGluYXJ5c2V0IChzdGVwIDMpCitib29sIEpTT2JqZWN0Ojpk
ZWZpbmVQcm9wZXJ0eU9uUmVjZWl2ZXIoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgUHJv
cGVydHlOYW1lIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSB2YWx1ZSwgUHV0UHJvcGVydHlTbG90JiBz
bG90KQoreworICAgIEFTU0VSVCghcGFyc2VJbmRleChwcm9wZXJ0eU5hbWUpKTsKKworICAgIFZN
JiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJP
V19TQ09QRSh2bSk7CisKKyAgICBKU09iamVjdCogcmVjZWl2ZXIgPSBzbG90LnRoaXNWYWx1ZSgp
LmdldE9iamVjdCgpOworICAgIC8vIEZJWE1FOiBGb3IgYSBmYWlsdXJlIGR1ZSB0byBwcmltaXRp
dmUgcmVjZWl2ZXIsIHRoZSBlcnJvciBtZXNzYWdlIGlzIG1pc2xlYWRpbmcuCisgICAgaWYgKCFy
ZWNlaXZlcikKICAgICAgICAgcmV0dXJuIHR5cGVFcnJvcihnbG9iYWxPYmplY3QsIHNjb3BlLCBz
bG90LmlzU3RyaWN0TW9kZSgpLCBSZWFkb25seVByb3BlcnR5V3JpdGVFcnJvcik7Ci0gICAgcmV0
dXJuIHRydWU7CisgICAgc2NvcGUucmVsZWFzZSgpOworICAgIGlmIChyZWNlaXZlci0+dHlwZSgp
ID09IFB1cmVGb3J3YXJkaW5nUHJveHlUeXBlKQorICAgICAgICByZWNlaXZlciA9IGpzQ2FzdDxK
U1Byb3h5Kj4ocmVjZWl2ZXIpLT50YXJnZXQoKTsKKworICAgIGlmIChzbG90LmlzVGFpbnRlZEJ5
T3BhcXVlT2JqZWN0KCkgfHwgc2xvdC5jb250ZXh0KCkgPT0gUHV0UHJvcGVydHlTbG90OjpSZWZs
ZWN0U2V0KSB7CisgICAgICAgIGlmIChyZWNlaXZlci0+bWV0aG9kVGFibGUodm0pLT5kZWZpbmVP
d25Qcm9wZXJ0eSAhPSBKU09iamVjdDo6ZGVmaW5lT3duUHJvcGVydHkpCisgICAgICAgICAgICBy
ZXR1cm4gZGVmaW5lUHJvcGVydHlPblJlY2VpdmVyU2xvdyhnbG9iYWxPYmplY3QsIHByb3BlcnR5
TmFtZSwgdmFsdWUsIHJlY2VpdmVyLCBzbG90LmlzU3RyaWN0TW9kZSgpKTsKKyAgICB9CisKKyAg
ICBpZiAoVU5MSUtFTFkocmVjZWl2ZXItPmhhc05vblJlaWZpZWRTdGF0aWNQcm9wZXJ0aWVzKHZt
KSkpCisgICAgICAgIHJldHVybiByZWNlaXZlci0+cHV0SW5saW5lRmFzdFJlcGxhY2luZ1N0YXRp
Y1Byb3BlcnR5SWZOZWVkZWQoZ2xvYmFsT2JqZWN0LCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCBzbG90
KTsKKyAgICByZXR1cm4gcmVjZWl2ZXItPnB1dElubGluZUZhc3QoZ2xvYmFsT2JqZWN0LCBwcm9w
ZXJ0eU5hbWUsIHZhbHVlLCBzbG90KTsKK30KKworYm9vbCBKU09iamVjdDo6cHV0SW5saW5lRmFz
dFJlcGxhY2luZ1N0YXRpY1Byb3BlcnR5SWZOZWVkZWQoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSB2YWx1ZSwgUHV0UHJvcGVy
dHlTbG90JiBzbG90KQoreworICAgIEFTU0VSVCghcGFyc2VJbmRleChwcm9wZXJ0eU5hbWUpKTsK
KworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVD
TEFSRV9USFJPV19TQ09QRSh2bSk7CisKKyAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IHRoaXMt
PnN0cnVjdHVyZSh2bSk7CisgICAgQVNTRVJUKHN0cnVjdHVyZS0+aGFzTm9uUmVpZmllZFN0YXRp
Y1Byb3BlcnRpZXMoKSk7CisgICAgaWYgKCFpc1ZhbGlkT2Zmc2V0KHN0cnVjdHVyZS0+Z2V0KHZt
LCBwcm9wZXJ0eU5hbWUpKSkgeworICAgICAgICBpZiAoYXV0byBlbnRyeSA9IHN0cnVjdHVyZS0+
ZmluZFByb3BlcnR5SGFzaEVudHJ5KHByb3BlcnR5TmFtZSkpIHsKKyAgICAgICAgICAgIGlmIChl
bnRyeS0+dmFsdWUtPmF0dHJpYnV0ZXMoKSAmIFByb3BlcnR5QXR0cmlidXRlOjpSZWFkT25seU9y
QWNjZXNzb3JPckN1c3RvbUFjY2Vzc29yKSB7CisgICAgICAgICAgICAgICAgQVNTRVJUKHNsb3Qu
Y29udGV4dCgpID09IFB1dFByb3BlcnR5U2xvdDo6UmVmbGVjdFNldCk7CisgICAgICAgICAgICAg
ICAgLy8gRklYTUU6IEZvciBhbiBhY2Nlc3NvciB3aXRoIHNldHRlciwgdGhlIGVycm9yIG1lc3Nh
Z2UgaXMgbWlzbGVhZGluZy4KKyAgICAgICAgICAgICAgICByZXR1cm4gdHlwZUVycm9yKGdsb2Jh
bE9iamVjdCwgc2NvcGUsIHNsb3QuaXNTdHJpY3RNb2RlKCksIFJlYWRvbmx5UHJvcGVydHlXcml0
ZUVycm9yKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIC8vIEF2b2lkIFB1dE1vZGVQdXQg
YmVjYXVzZSBpdCBmYWlscyBmb3Igbm9uLWV4dGVuc2libGUgc3RydWN0dXJlcy4KKyAgICAgICAg
ICAgIHB1dERpcmVjdCh2bSwgcHJvcGVydHlOYW1lLCB2YWx1ZSwgYXR0cmlidXRlc0ZvclN0cnVj
dHVyZShlbnRyeS0+dmFsdWUtPmF0dHJpYnV0ZXMoKSkgJiB+UHJvcGVydHlBdHRyaWJ1dGU6OkN1
c3RvbVZhbHVlLCBzbG90KTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9Cisg
ICAgfQorCisgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBwdXRJbmxpbmVGYXN0KGdsb2Jh
bE9iamVjdCwgcHJvcGVydHlOYW1lLCB2YWx1ZSwgc2xvdCkpOwogfQogCiBib29sIEpTT2JqZWN0
OjpwdXRCeUluZGV4KEpTQ2VsbCogY2VsbCwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwg
dW5zaWduZWQgcHJvcGVydHlOYW1lLCBKU1ZhbHVlIHZhbHVlLCBib29sIHNob3VsZFRocm93KQpA
QCAtMzg0NCwzMCArMzk0Miw2IEBAIGJvb2wgSlNPYmplY3Q6OmFueU9iamVjdEluQ2hhaW5NYXlJ
bnRlcmMKICAgICB9CiB9CiAKLWJvb2wgSlNPYmplY3Q6OnByb3RvdHlwZUNoYWluTWF5SW50ZXJj
ZXB0U3RvcmVUbyhWTSYgdm0sIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUpCi17Ci0gICAgaWYg
KHBhcnNlSW5kZXgocHJvcGVydHlOYW1lKSkKLSAgICAgICAgcmV0dXJuIGFueU9iamVjdEluQ2hh
aW5NYXlJbnRlcmNlcHRJbmRleGVkQWNjZXNzZXModm0pOwotICAgIAotICAgIGZvciAoSlNPYmpl
Y3QqIGN1cnJlbnQgPSB0aGlzOyA7KSB7Ci0gICAgICAgIEpTVmFsdWUgcHJvdG90eXBlID0gY3Vy
cmVudC0+Z2V0UHJvdG90eXBlRGlyZWN0KHZtKTsKLSAgICAgICAgaWYgKHByb3RvdHlwZS5pc051
bGwoKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgCi0gICAgICAgIGN1cnJl
bnQgPSBhc09iamVjdChwcm90b3R5cGUpOwotICAgICAgICAKLSAgICAgICAgdW5zaWduZWQgYXR0
cmlidXRlczsKLSAgICAgICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0ID0gY3VycmVudC0+c3RydWN0
dXJlKHZtKS0+Z2V0KHZtLCBwcm9wZXJ0eU5hbWUsIGF0dHJpYnV0ZXMpOwotICAgICAgICBpZiAo
IUpTQzo6aXNWYWxpZE9mZnNldChvZmZzZXQpKQotICAgICAgICAgICAgY29udGludWU7Ci0gICAg
ICAgIAotICAgICAgICBpZiAoYXR0cmlidXRlcyAmIChQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVhZE9u
bHkgfCBQcm9wZXJ0eUF0dHJpYnV0ZTo6QWNjZXNzb3IpKQotICAgICAgICAgICAgcmV0dXJuIHRy
dWU7Ci0gICAgICAgIAotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotfQotCiBib29sIEpT
T2JqZWN0OjpuZWVkc1Nsb3dQdXRJbmRleGluZyhWTSYgdm0pIGNvbnN0CiB7CiAgICAgcmV0dXJu
IGFueU9iamVjdEluQ2hhaW5NYXlJbnRlcmNlcHRJbmRleGVkQWNjZXNzZXModm0pIHx8IGdsb2Jh
bE9iamVjdCh2bSktPmlzSGF2aW5nQUJhZFRpbWUoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTT2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNPYmplY3QuaAkocmV2aXNpb24gMjc4NTM5KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAtMTcxLDcgKzE3
MSw2IEBAIHB1YmxpYzoKIAogICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBib29sIGdldE93
blByb3BlcnR5U2xvdEJ5SW5kZXgoSlNPYmplY3QqLCBKU0dsb2JhbE9iamVjdCosIHVuc2lnbmVk
IHByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90Jik7CiAgICAgYm9vbCBnZXRPd25Qcm9wZXJ0eVNs
b3RJbmxpbmUoSlNHbG9iYWxPYmplY3QqLCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYpOwot
ICAgIEpTX0VYUE9SVF9QUklWQVRFX0lGX0FTU0VSVF9FTkFCTEVEIHN0YXRpYyB2b2lkIGRvUHV0
UHJvcGVydHlTZWN1cml0eUNoZWNrKEpTT2JqZWN0KiwgSlNHbG9iYWxPYmplY3QqLCBQcm9wZXJ0
eU5hbWUsIFB1dFByb3BlcnR5U2xvdCYpOwogCiAgICAgLy8gVGhlIGtleSBkaWZmZXJlbmNlIGJl
dHdlZW4gdGhpcyBhbmQgZ2V0T3duUHJvcGVydHlTbG90IGlzIHRoYXQgZ2V0T3duUHJvcGVydHlT
bG90CiAgICAgLy8gY3VycmVudGx5IHJldHVybnMgaW5jb3JyZWN0IHJlc3VsdHMgZm9yIHRoZSBE
T00gd2luZG93ICh3aXRoIG5vbi1vd24gcHJvcGVydGllcykKQEAgLTIwNCw2ICsyMDMsNyBAQCBw
dWJsaWM6CiAgICAgc3RhdGljIGJvb2wgcHV0SW5saW5lRm9ySlNPYmplY3QoSlNDZWxsKiwgSlNH
bG9iYWxPYmplY3QqLCBQcm9wZXJ0eU5hbWUsIEpTVmFsdWUsIFB1dFByb3BlcnR5U2xvdCYpOwog
ICAgIAogICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBib29sIHB1dChKU0NlbGwqLCBKU0ds
b2JhbE9iamVjdCosIFByb3BlcnR5TmFtZSwgSlNWYWx1ZSwgUHV0UHJvcGVydHlTbG90Jik7Cisg
ICAgSlNfRVhQT1JUX1BSSVZBVEUgTkVWRVJfSU5MSU5FIHN0YXRpYyBib29sIGRlZmluZVByb3Bl
cnR5T25SZWNlaXZlcihKU0dsb2JhbE9iamVjdCosIFByb3BlcnR5TmFtZSwgSlNWYWx1ZSwgUHV0
UHJvcGVydHlTbG90Jik7CiAgICAgLy8gcHV0QnlJbmRleCBhc3N1bWVzIHRoYXQgdGhlIHJlY2Vp
dmVyIGlzIHRoaXMgSlNDZWxsIG9iamVjdC4KICAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMg
Ym9vbCBwdXRCeUluZGV4KEpTQ2VsbCosIEpTR2xvYmFsT2JqZWN0KiwgdW5zaWduZWQgcHJvcGVy
dHlOYW1lLCBKU1ZhbHVlLCBib29sIHNob3VsZFRocm93KTsKICAgICAgICAgCkBAIC0yMjAsMTIg
KzIyMCwxMyBAQCBwdWJsaWM6CiAKICAgICBBTFdBWVNfSU5MSU5FIGJvb2wgcHV0QnlJbmRleElu
bGluZShKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCB1aW50NjRfdCBwcm9wZXJ0eU5hbWUs
IEpTVmFsdWUgdmFsdWUsIGJvb2wgc2hvdWxkVGhyb3cpCiAgICAgeworICAgICAgICBWTSYgdm0g
PSBnZXRWTShnbG9iYWxPYmplY3QpOwogICAgICAgICBpZiAoTElLRUxZKHByb3BlcnR5TmFtZSA8
PSBNQVhfQVJSQVlfSU5ERVgpKQogICAgICAgICAgICAgcmV0dXJuIHB1dEJ5SW5kZXhJbmxpbmUo
Z2xvYmFsT2JqZWN0LCBzdGF0aWNfY2FzdDx1aW50MzJfdD4ocHJvcGVydHlOYW1lKSwgdmFsdWUs
IHNob3VsZFRocm93KTsKIAogICAgICAgICBBU1NFUlQocHJvcGVydHlOYW1lIDw9IG1heFNhZmVJ
bnRlZ2VyKCkpOwogICAgICAgICBQdXRQcm9wZXJ0eVNsb3Qgc2xvdCh0aGlzLCBzaG91bGRUaHJv
dyk7Ci0gICAgICAgIHJldHVybiBwdXRJbmxpbmVGb3JKU09iamVjdCh0aGlzLCBnbG9iYWxPYmpl
Y3QsIElkZW50aWZpZXI6OmZyb20oZ2V0Vk0oZ2xvYmFsT2JqZWN0KSwgcHJvcGVydHlOYW1lKSwg
dmFsdWUsIHNsb3QpOworICAgICAgICByZXR1cm4gbWV0aG9kVGFibGUodm0pLT5wdXQodGhpcywg
Z2xvYmFsT2JqZWN0LCBJZGVudGlmaWVyOjpmcm9tKHZtLCBwcm9wZXJ0eU5hbWUpLCB2YWx1ZSwg
c2xvdCk7CiAgICAgfQogICAgICAgICAKICAgICAvLyBUaGlzIGlzIHNpbWlsYXIgdG8gdGhlIHB1
dERpcmVjdCogbWV0aG9kczoKQEAgLTY0NCw2ICs2NDUsNyBAQCBwdWJsaWM6CiAgICAgLy8gIC0g
YXR0cmlidXRlcyB3aWxsIGJlIHJlc3BlY3RlZCAoYWZ0ZXIgdGhlIGNhbGwgdGhlIHByb3BlcnR5
IHdpbGwgZXhpc3Qgd2l0aCB0aGUgZ2l2ZW4gYXR0cmlidXRlcykKICAgICAvLyAgLSB0aGUgcHJv
cGVydHkgbmFtZSBpcyBhc3N1bWVkIHRvIG5vdCBiZSBhbiBpbmRleC4KICAgICBib29sIHB1dERp
cmVjdChWTSYsIFByb3BlcnR5TmFtZSwgSlNWYWx1ZSwgdW5zaWduZWQgYXR0cmlidXRlcyA9IDAp
OworICAgIGJvb2wgcHV0RGlyZWN0KFZNJiwgUHJvcGVydHlOYW1lLCBKU1ZhbHVlLCB1bnNpZ25l
ZCBhdHRyaWJ1dGVzLCBQdXRQcm9wZXJ0eVNsb3QmKTsKICAgICBib29sIHB1dERpcmVjdChWTSYs
IFByb3BlcnR5TmFtZSwgSlNWYWx1ZSwgUHV0UHJvcGVydHlTbG90Jik7CiAgICAgdm9pZCBwdXRE
aXJlY3RXaXRob3V0VHJhbnNpdGlvbihWTSYsIFByb3BlcnR5TmFtZSwgSlNWYWx1ZSwgdW5zaWdu
ZWQgYXR0cmlidXRlcyA9IDApOwogICAgIGJvb2wgcHV0RGlyZWN0Tm9uSW5kZXhBY2Nlc3NvcihW
TSYsIFByb3BlcnR5TmFtZSwgR2V0dGVyU2V0dGVyKiwgdW5zaWduZWQgYXR0cmlidXRlcyk7CkBA
IC03NzAsNiArNzcyLDExIEBAIHB1YmxpYzoKICAgICBib29sIGhhc0dldHRlclNldHRlclByb3Bl
cnRpZXMoVk0mIHZtKSB7IHJldHVybiBzdHJ1Y3R1cmUodm0pLT5oYXNHZXR0ZXJTZXR0ZXJQcm9w
ZXJ0aWVzKCk7IH0KICAgICBib29sIGhhc0N1c3RvbUdldHRlclNldHRlclByb3BlcnRpZXMoVk0m
IHZtKSB7IHJldHVybiBzdHJ1Y3R1cmUodm0pLT5oYXNDdXN0b21HZXR0ZXJTZXR0ZXJQcm9wZXJ0
aWVzKCk7IH0KIAorICAgIGJvb2wgaGFzTm9uUmVpZmllZFN0YXRpY1Byb3BlcnRpZXMoVk0mIHZt
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIFR5cGVJbmZvOjpoYXNTdGF0aWNQcm9wZXJ0eVRhYmxl
KGlubGluZVR5cGVGbGFncygpKSAmJiAhc3RydWN0dXJlKHZtKS0+c3RhdGljUHJvcGVydGllc1Jl
aWZpZWQoKTsKKyAgICB9CisKICAgICAvLyBwdXRPd25EYXRhUHJvcGVydHkgaGFzICdwdXQnIGxp
a2Ugc2VtYW50aWNzLCBob3dldmVyIHRoaXMgbWV0aG9kOgogICAgIC8vICAtIGFzc3VtZXMgdGhl
IG9iamVjdCBjb250YWlucyBubyBvd24gZ2V0dGVyL3NldHRlciBwcm9wZXJ0aWVzLgogICAgIC8v
ICAtIHByb3ZpZGVzIG5vIHNwZWNpYWwgaGFuZGxpbmcgZm9yIF9fcHJvdG9fXwpAQCAtODE2LDcg
KzgyMyw2IEBAIHB1YmxpYzoKICAgICBib29sIGlzRnJvemVuKFZNJiB2bSkgeyByZXR1cm4gc3Ry
dWN0dXJlKHZtKS0+aXNGcm96ZW4odm0pOyB9CiAKICAgICBKU19FWFBPUlRfUFJJVkFURSBib29s
IGFueU9iamVjdEluQ2hhaW5NYXlJbnRlcmNlcHRJbmRleGVkQWNjZXNzZXMoVk0mKSBjb25zdDsK
LSAgICBKU19FWFBPUlRfUFJJVkFURSBib29sIHByb3RvdHlwZUNoYWluTWF5SW50ZXJjZXB0U3Rv
cmVUbyhWTSYsIFByb3BlcnR5TmFtZSk7CiAgICAgYm9vbCBuZWVkc1Nsb3dQdXRJbmRleGluZyhW
TSYpIGNvbnN0OwogCiBwcml2YXRlOgpAQCAtMTEwOSw2ICsxMTE1LDggQEAgcHJpdmF0ZToKICAg
ICBib29sIHB1dERpcmVjdEludGVybmFsKFZNJiwgUHJvcGVydHlOYW1lLCBKU1ZhbHVlLCB1bnNp
Z25lZCBhdHRyLCBQdXRQcm9wZXJ0eVNsb3QmKTsKIAogICAgIEpTX0VYUE9SVF9QUklWQVRFIE5F
VkVSX0lOTElORSBib29sIHB1dElubGluZVNsb3coSlNHbG9iYWxPYmplY3QqLCBQcm9wZXJ0eU5h
bWUsIEpTVmFsdWUsIFB1dFByb3BlcnR5U2xvdCYpOworICAgIEpTX0VYUE9SVF9QUklWQVRFIE5F
VkVSX0lOTElORSBib29sIHB1dElubGluZUZhc3RSZXBsYWNpbmdTdGF0aWNQcm9wZXJ0eUlmTmVl
ZGVkKEpTR2xvYmFsT2JqZWN0KiwgUHJvcGVydHlOYW1lLCBKU1ZhbHVlLCBQdXRQcm9wZXJ0eVNs
b3QmKTsKKyAgICBib29sIHB1dElubGluZUZhc3QoSlNHbG9iYWxPYmplY3QqLCBQcm9wZXJ0eU5h
bWUsIEpTVmFsdWUsIFB1dFByb3BlcnR5U2xvdCYpOwogCiAgICAgYm9vbCBnZXROb25JbmRleFBy
b3BlcnR5U2xvdChKU0dsb2JhbE9iamVjdCosIFByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90Jik7
CiAgICAgYm9vbCBnZXRPd25Ob25JbmRleFByb3BlcnR5U2xvdChWTSYsIFN0cnVjdHVyZSosIFBy
b3BlcnR5TmFtZSwgUHJvcGVydHlTbG90Jik7CkBAIC0xNDQxLDEwICsxNDQ5LDYgQEAgQUxXQVlT
X0lOTElORSBib29sIEpTT2JqZWN0OjpnZXRPd25Qcm9wZQogewogICAgIHJldHVybiBnZXRPd25Q
cm9wZXJ0eVNsb3RJbXBsKG9iamVjdCwgZ2xvYmFsT2JqZWN0LCBwcm9wZXJ0eU5hbWUsIHNsb3Qp
OwogfQotCi1BTFdBWVNfSU5MSU5FIHZvaWQgSlNPYmplY3Q6OmRvUHV0UHJvcGVydHlTZWN1cml0
eUNoZWNrKEpTT2JqZWN0KiwgSlNHbG9iYWxPYmplY3QqLCBQcm9wZXJ0eU5hbWUsIFB1dFByb3Bl
cnR5U2xvdCYpCi17Ci19CiAjZW5kaWYKIAogLy8gSXQgbWF5IHNlZW0gY3JhenkgdG8gaW5saW5l
IGEgZnVuY3Rpb24gdGhpcyBsYXJnZSBidXQgaXQgbWFrZXMgYSBiaWcgZGlmZmVyZW5jZQpAQCAt
MTU0MCw2ICsxNTQ0LDEzIEBAIGlubGluZSBib29sIEpTT2JqZWN0OjpwdXREaXJlY3QoVk0mIHZt
LCAKICAgICByZXR1cm4gcHV0RGlyZWN0SW50ZXJuYWw8UHV0TW9kZURlZmluZU93blByb3BlcnR5
Pih2bSwgcHJvcGVydHlOYW1lLCB2YWx1ZSwgYXR0cmlidXRlcywgc2xvdCk7CiB9CiAKK2lubGlu
ZSBib29sIEpTT2JqZWN0OjpwdXREaXJlY3QoVk0mIHZtLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlO
YW1lLCBKU1ZhbHVlIHZhbHVlLCB1bnNpZ25lZCBhdHRyaWJ1dGVzLCBQdXRQcm9wZXJ0eVNsb3Qm
IHNsb3QpCit7CisgICAgQVNTRVJUKCF2YWx1ZS5pc0dldHRlclNldHRlcigpKTsKKyAgICBBU1NF
UlQoIXZhbHVlLmlzQ3VzdG9tR2V0dGVyU2V0dGVyKCkpOworICAgIHJldHVybiBwdXREaXJlY3RJ
bnRlcm5hbDxQdXRNb2RlRGVmaW5lT3duUHJvcGVydHk+KHZtLCBwcm9wZXJ0eU5hbWUsIHZhbHVl
LCBhdHRyaWJ1dGVzLCBzbG90KTsKK30KKwogaW5saW5lIGJvb2wgSlNPYmplY3Q6OnB1dERpcmVj
dChWTSYgdm0sIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUgdmFsdWUsIFB1dFBy
b3BlcnR5U2xvdCYgc2xvdCkKIHsKICAgICBBU1NFUlQoIXZhbHVlLmlzR2V0dGVyU2V0dGVyKCkp
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3RJbmxpbmVzLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3RJbmxp
bmVzLmgJKHJldmlzaW9uIDI3ODUzOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTT2JqZWN0SW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC02OSw2ICs2OSw4IEBAIEFMV0FZ
U19JTkxJTkUgYm9vbCBKU09iamVjdDo6Y2FuUGVyZm9ybUYKICAgICAgICAgU3RydWN0dXJlKiBz
dHJ1Y3R1cmUgPSBvYmotPnN0cnVjdHVyZSh2bSk7CiAgICAgICAgIGlmIChzdHJ1Y3R1cmUtPmhh
c1JlYWRPbmx5T3JHZXR0ZXJTZXR0ZXJQcm9wZXJ0aWVzRXhjbHVkaW5nUHJvdG8oKSB8fCBzdHJ1
Y3R1cmUtPnR5cGVJbmZvKCkub3ZlcnJpZGVzR2V0UHJvdG90eXBlKCkpCiAgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgICAgIGlmIChvYmogIT0gdGhpcyAmJiBzdHJ1Y3R1cmUtPnR5cGVJ
bmZvKCkub3ZlcnJpZGVzUHV0KCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICAg
ICAgcHJvdG90eXBlID0gb2JqLT5nZXRQcm90b3R5cGVEaXJlY3Qodm0pOwogICAgICAgICBpZiAo
cHJvdG90eXBlLmlzTnVsbCgpKQpAQCAtMjQ5LDMyICsyNTEsNDEgQEAgQUxXQVlTX0lOTElORSBQ
cm9wZXJ0eU9mZnNldCBKU09iamVjdDo6cAogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLS8vIEVD
TUEgOC42LjIuMgorLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vcmRpbmFyeXNldAog
QUxXQVlTX0lOTElORSBib29sIEpTT2JqZWN0OjpwdXRJbmxpbmVGb3JKU09iamVjdChKU0NlbGwq
IGNlbGwsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFByb3BlcnR5TmFtZSBwcm9wZXJ0
eU5hbWUsIEpTVmFsdWUgdmFsdWUsIFB1dFByb3BlcnR5U2xvdCYgc2xvdCkKIHsKICAgICBWTSYg
dm0gPSBnZXRWTShnbG9iYWxPYmplY3QpOwotICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9X
X1NDT1BFKHZtKTsKIAogICAgIEpTT2JqZWN0KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTT2JqZWN0
Kj4oY2VsbCk7CiAgICAgQVNTRVJUKHZhbHVlKTsKICAgICBBU1NFUlQoIUhlYXA6OmhlYXAodmFs
dWUpIHx8IEhlYXA6OmhlYXAodmFsdWUpID09IEhlYXA6OmhlYXAodGhpc09iamVjdCkpOwogCi0g
ICAgaWYgKFVOTElLRUxZKGlzVGhpc1ZhbHVlQWx0ZXJlZChzbG90LCB0aGlzT2JqZWN0KSkpCi0g
ICAgICAgIFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwgb3JkaW5hcnlTZXRTbG93KGdsb2JhbE9i
amVjdCwgdGhpc09iamVjdCwgcHJvcGVydHlOYW1lLCB2YWx1ZSwgc2xvdC50aGlzVmFsdWUoKSwg
c2xvdC5pc1N0cmljdE1vZGUoKSkpOwotCiAgICAgLy8gVHJ5IGluZGV4ZWQgcHV0IGZpcnN0LiBU
aGlzIGlzIHJlcXVpcmVkIGZvciBjb3JyZWN0bmVzcywgc2luY2UgbG9hZHMgb24gcHJvcGVydHkg
bmFtZXMgdGhhdCBhcHBlYXIgbGlrZQogICAgIC8vIHZhbGlkIGluZGljZXMgd2lsbCBuZXZlciBs
b29rIGluIHRoZSBuYW1lZCBwcm9wZXJ0eSBzdG9yYWdlLgotICAgIGlmIChzdGQ6Om9wdGlvbmFs
PHVpbnQzMl90PiBpbmRleCA9IHBhcnNlSW5kZXgocHJvcGVydHlOYW1lKSkKLSAgICAgICAgUkVM
RUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBwdXRCeUluZGV4KHRoaXNPYmplY3QsIGdsb2JhbE9iamVj
dCwgaW5kZXgudmFsdWUoKSwgdmFsdWUsIHNsb3QuaXNTdHJpY3RNb2RlKCkpKTsKLQotICAgIGlm
ICh0aGlzT2JqZWN0LT5jYW5QZXJmb3JtRmFzdFB1dElubGluZSh2bSwgcHJvcGVydHlOYW1lKSkg
ewotICAgICAgICBBU1NFUlQoIXRoaXNPYmplY3QtPnByb3RvdHlwZUNoYWluTWF5SW50ZXJjZXB0
U3RvcmVUbyh2bSwgcHJvcGVydHlOYW1lKSk7Ci0gICAgICAgIGlmICghdGhpc09iamVjdC0+cHV0
RGlyZWN0SW50ZXJuYWw8UHV0TW9kZVB1dD4odm0sIHByb3BlcnR5TmFtZSwgdmFsdWUsIDAsIHNs
b3QpKQotICAgICAgICAgICAgcmV0dXJuIHR5cGVFcnJvcihnbG9iYWxPYmplY3QsIHNjb3BlLCBz
bG90LmlzU3RyaWN0TW9kZSgpLCBSZWFkb25seVByb3BlcnR5V3JpdGVFcnJvcik7Ci0gICAgICAg
IHJldHVybiB0cnVlOworICAgIGlmIChzdGQ6Om9wdGlvbmFsPHVpbnQzMl90PiBpbmRleCA9IHBh
cnNlSW5kZXgocHJvcGVydHlOYW1lKSkgeworICAgICAgICBpZiAoVU5MSUtFTFkoaXNUaGlzVmFs
dWVBbHRlcmVkKHNsb3QsIHRoaXNPYmplY3QpKSkKKyAgICAgICAgICAgIHJldHVybiBvcmRpbmFy
eVNldFNsb3coZ2xvYmFsT2JqZWN0LCB0aGlzT2JqZWN0LCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCBz
bG90LnRoaXNWYWx1ZSgpLCBzbG90LmlzU3RyaWN0TW9kZSgpKTsKKyAgICAgICAgcmV0dXJuIHRo
aXNPYmplY3QtPm1ldGhvZFRhYmxlKHZtKS0+cHV0QnlJbmRleCh0aGlzT2JqZWN0LCBnbG9iYWxP
YmplY3QsIGluZGV4LnZhbHVlKCksIHZhbHVlLCBzbG90LmlzU3RyaWN0TW9kZSgpKTsKICAgICB9
CiAKLSAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIHRoaXNPYmplY3QtPnB1dElubGluZVNs
b3coZ2xvYmFsT2JqZWN0LCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCBzbG90KSk7CisgICAgaWYgKCF0
aGlzT2JqZWN0LT5jYW5QZXJmb3JtRmFzdFB1dElubGluZSh2bSwgcHJvcGVydHlOYW1lKSkKKyAg
ICAgICAgcmV0dXJuIHRoaXNPYmplY3QtPnB1dElubGluZVNsb3coZ2xvYmFsT2JqZWN0LCBwcm9w
ZXJ0eU5hbWUsIHZhbHVlLCBzbG90KTsKKyAgICBpZiAoVU5MSUtFTFkoaXNUaGlzVmFsdWVBbHRl
cmVkKHNsb3QsIHRoaXNPYmplY3QpKSkKKyAgICAgICAgcmV0dXJuIGRlZmluZVByb3BlcnR5T25S
ZWNlaXZlcihnbG9iYWxPYmplY3QsIHByb3BlcnR5TmFtZSwgdmFsdWUsIHNsb3QpOworICAgIGlm
IChVTkxJS0VMWSh0aGlzT2JqZWN0LT5oYXNOb25SZWlmaWVkU3RhdGljUHJvcGVydGllcyh2bSkp
KQorICAgICAgICByZXR1cm4gdGhpc09iamVjdC0+cHV0SW5saW5lRmFzdFJlcGxhY2luZ1N0YXRp
Y1Byb3BlcnR5SWZOZWVkZWQoZ2xvYmFsT2JqZWN0LCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCBzbG90
KTsKKyAgICByZXR1cm4gdGhpc09iamVjdC0+cHV0SW5saW5lRmFzdChnbG9iYWxPYmplY3QsIHBy
b3BlcnR5TmFtZSwgdmFsdWUsIHNsb3QpOworfQorCitBTFdBWVNfSU5MSU5FIGJvb2wgSlNPYmpl
Y3Q6OnB1dElubGluZUZhc3QoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgUHJvcGVydHlO
YW1lIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSB2YWx1ZSwgUHV0UHJvcGVydHlTbG90JiBzbG90KQor
eworICAgIFZNJiB2bSA9IGdldFZNKGdsb2JhbE9iamVjdCk7CisgICAgYXV0byBzY29wZSA9IERF
Q0xBUkVfVEhST1dfU0NPUEUodm0pOworCisgICAgLy8gRklYTUU6IEZvciBhIGZhaWx1cmUgZHVl
IHRvIG5vbi1leHRlbnNpYmxlIHN0cnVjdHVyZSwgdGhlIGVycm9yIG1lc3NhZ2UgaXMgbWlzbGVh
ZGluZy4KKyAgICBpZiAoIXB1dERpcmVjdEludGVybmFsPFB1dE1vZGVQdXQ+KHZtLCBwcm9wZXJ0
eU5hbWUsIHZhbHVlLCAwLCBzbG90KSkKKyAgICAgICAgcmV0dXJuIHR5cGVFcnJvcihnbG9iYWxP
YmplY3QsIHNjb3BlLCBzbG90LmlzU3RyaWN0TW9kZSgpLCBSZWFkb25seVByb3BlcnR5V3JpdGVF
cnJvcik7CisgICAgcmV0dXJuIHRydWU7CiB9CiAKIC8vIEhhc093blByb3BlcnR5KE8sIFApIGZy
b20gc2VjdGlvbiA3LjMuMTEgaW4gdGhlIHNwZWMuCkBAIC0zMTcsNyArMzI4LDcgQEAgQUxXQVlT
X0lOTElORSBib29sIEpTT2JqZWN0OjpwdXREaXJlY3RJbgogICAgICAgICB1bnNpZ25lZCBjdXJy
ZW50QXR0cmlidXRlczsKICAgICAgICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0ID0gc3RydWN0dXJl
LT5nZXQodm0sIHByb3BlcnR5TmFtZSwgY3VycmVudEF0dHJpYnV0ZXMpOwogICAgICAgICBpZiAo
b2Zmc2V0ICE9IGludmFsaWRPZmZzZXQpIHsKLSAgICAgICAgICAgIGlmICgobW9kZSA9PSBQdXRN
b2RlUHV0KSAmJiBjdXJyZW50QXR0cmlidXRlcyAmIFByb3BlcnR5QXR0cmlidXRlOjpSZWFkT25s
eSkKKyAgICAgICAgICAgIGlmICgobW9kZSA9PSBQdXRNb2RlUHV0KSAmJiBjdXJyZW50QXR0cmli
dXRlcyAmIFByb3BlcnR5QXR0cmlidXRlOjpSZWFkT25seU9yQWNjZXNzb3JPckN1c3RvbUFjY2Vz
c29yKQogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgICAgICAgICAgcHV0RGly
ZWN0KHZtLCBvZmZzZXQsIHZhbHVlKTsKQEAgLTM3Niw3ICszODcsNyBAQCBBTFdBWVNfSU5MSU5F
IGJvb2wgSlNPYmplY3Q6OnB1dERpcmVjdEluCiAgICAgdW5zaWduZWQgY3VycmVudEF0dHJpYnV0
ZXM7CiAgICAgb2Zmc2V0ID0gc3RydWN0dXJlLT5nZXQodm0sIHByb3BlcnR5TmFtZSwgY3VycmVu
dEF0dHJpYnV0ZXMpOwogICAgIGlmIChvZmZzZXQgIT0gaW52YWxpZE9mZnNldCkgewotICAgICAg
ICBpZiAoKG1vZGUgPT0gUHV0TW9kZVB1dCkgJiYgY3VycmVudEF0dHJpYnV0ZXMgJiBQcm9wZXJ0
eUF0dHJpYnV0ZTo6UmVhZE9ubHkpCisgICAgICAgIGlmICgobW9kZSA9PSBQdXRNb2RlUHV0KSAm
JiBjdXJyZW50QXR0cmlidXRlcyAmIFByb3BlcnR5QXR0cmlidXRlOjpSZWFkT25seU9yQWNjZXNz
b3JPckN1c3RvbUFjY2Vzc29yKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgICAg
IHN0cnVjdHVyZS0+ZGlkUmVwbGFjZVByb3BlcnR5KG9mZnNldCk7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU1Byb3h5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNQcm94eS5oCShyZXZpc2lvbiAyNzg1MzkpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Byb3h5LmgJKHdvcmtpbmcgY29weSkKQEAgLTMyLDcg
KzMyLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiBjbGFzcyBKU1Byb3h5IDogcHVibGljIEpTTm9uRmlu
YWxPYmplY3QgewogcHVibGljOgogICAgIHVzaW5nIEJhc2UgPSBKU05vbkZpbmFsT2JqZWN0Owot
ICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1
Y3R1cmVGbGFncyB8IE92ZXJyaWRlc0dldE93blByb3BlcnR5U2xvdCB8IE92ZXJyaWRlc0dldE93
blByb3BlcnR5TmFtZXMgfCBPdmVycmlkZXNHZXRQcm90b3R5cGUgfCBJbnRlcmNlcHRzR2V0T3du
UHJvcGVydHlTbG90QnlJbmRleEV2ZW5XaGVuTGVuZ3RoSXNOb3RaZXJvOworICAgIHN0YXRpYyBj
b25zdGV4cHIgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8
IE92ZXJyaWRlc0dldE93blByb3BlcnR5U2xvdCB8IE92ZXJyaWRlc0dldE93blByb3BlcnR5TmFt
ZXMgfCBPdmVycmlkZXNQdXQgfCBPdmVycmlkZXNHZXRQcm90b3R5cGUgfCBJbnRlcmNlcHRzR2V0
T3duUHJvcGVydHlTbG90QnlJbmRleEV2ZW5XaGVuTGVuZ3RoSXNOb3RaZXJvOwogCiAgICAgdGVt
cGxhdGU8dHlwZW5hbWUgQ2VsbFR5cGUsIFN1YnNwYWNlQWNjZXNzPgogICAgIHN0YXRpYyBJc29T
dWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNUeXBlSW5mby5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTVHlwZUluZm8uaAkocmV2aXNpb24gMjc4NTM5KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNUeXBlSW5mby5oCSh3b3JraW5nIGNvcHkpCkBAIC01Nyw3ICs1
Nyw3IEBAIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgSXNJbW11dGFibGVQcm8KIHN0YXRpYyBj
b25zdGV4cHIgdW5zaWduZWQgR2V0T3duUHJvcGVydHlTbG90SXNJbXB1cmVGb3JQcm9wZXJ0eUFi
c2VuY2UgPSAxIDw8IDE1Owogc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBJbnRlcmNlcHRzR2V0
T3duUHJvcGVydHlTbG90QnlJbmRleEV2ZW5XaGVuTGVuZ3RoSXNOb3RaZXJvID0gMSA8PCAxNjsK
IHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgU3RydWN0dXJlSXNJbW1vcnRhbCA9IDEgPDwgMTc7
Ci1zdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIEhhc1B1dFByb3BlcnR5U2VjdXJpdHlDaGVjayA9
IDEgPDwgMTg7CitzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIE92ZXJyaWRlc1B1dCA9IDEgPDwg
MTg7CiBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIE92ZXJyaWRlc0dldFByb3RvdHlwZSA9IDEg
PDwgMTk7CiBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIEdldE93blByb3BlcnR5U2xvdE1heUJl
V3JvbmdBYm91dERvbnRFbnVtID0gMSA8PCAyMDsKIApAQCAtOTQsNiArOTQsNyBAQCBwdWJsaWM6
CiAgICAgYm9vbCBpbXBsZW1lbnRzRGVmYXVsdEhhc0luc3RhbmNlKCkgY29uc3QgeyByZXR1cm4g
aXNTZXRPbkZsYWdzMTxJbXBsZW1lbnRzRGVmYXVsdEhhc0luc3RhbmNlPigpOyB9CiAgICAgYm9v
bCBvdmVycmlkZXNHZXRDYWxsRGF0YSgpIGNvbnN0IHsgcmV0dXJuIGlzU2V0T25GbGFnczE8T3Zl
cnJpZGVzR2V0Q2FsbERhdGE+KCk7IH0KICAgICBib29sIG92ZXJyaWRlc0dldE93blByb3BlcnR5
U2xvdCgpIGNvbnN0IHsgcmV0dXJuIG92ZXJyaWRlc0dldE93blByb3BlcnR5U2xvdChpbmxpbmVU
eXBlRmxhZ3MoKSk7IH0KKyAgICBib29sIGhhc1N0YXRpY1Byb3BlcnR5VGFibGUoKSBjb25zdCB7
IHJldHVybiBpc1NldE9uRmxhZ3MxPEhhc1N0YXRpY1Byb3BlcnR5VGFibGU+KCk7IH0KICAgICBz
dGF0aWMgYm9vbCBvdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3QoSW5saW5lVHlwZUZsYWdzIGZs
YWdzKSB7IHJldHVybiBmbGFncyAmIE92ZXJyaWRlc0dldE93blByb3BlcnR5U2xvdDsgfQogICAg
IHN0YXRpYyBib29sIGhhc1N0YXRpY1Byb3BlcnR5VGFibGUoSW5saW5lVHlwZUZsYWdzIGZsYWdz
KSB7IHJldHVybiBmbGFncyAmIEhhc1N0YXRpY1Byb3BlcnR5VGFibGU7IH0KICAgICBzdGF0aWMg
Ym9vbCBwZXJDZWxsQml0KElubGluZVR5cGVGbGFncyBmbGFncykgeyByZXR1cm4gZmxhZ3MgJiBU
eXBlSW5mb1BlckNlbGxCaXQ7IH0KQEAgLTEwMiwxMiArMTAzLDEyIEBAIHB1YmxpYzoKICAgICBi
b29sIG92ZXJyaWRlc0dldE93blByb3BlcnR5TmFtZXMoKSBjb25zdCB7IHJldHVybiBpc1NldE9u
RmxhZ3MyPE92ZXJyaWRlc0dldE93blByb3BlcnR5TmFtZXM+KCk7IH0KICAgICBib29sIG92ZXJy
aWRlc0dldE93blNwZWNpYWxQcm9wZXJ0eU5hbWVzKCkgY29uc3QgeyByZXR1cm4gaXNTZXRPbkZs
YWdzMjxPdmVycmlkZXNHZXRPd25TcGVjaWFsUHJvcGVydHlOYW1lcz4oKTsgfQogICAgIGJvb2wg
b3ZlcnJpZGVzQW55Rm9ybU9mR2V0T3duUHJvcGVydHlOYW1lcygpIGNvbnN0IHsgcmV0dXJuIG92
ZXJyaWRlc0dldE93blByb3BlcnR5TmFtZXMoKSB8fCBvdmVycmlkZXNHZXRPd25TcGVjaWFsUHJv
cGVydHlOYW1lcygpOyB9CisgICAgYm9vbCBvdmVycmlkZXNQdXQoKSBjb25zdCB7IHJldHVybiBp
c1NldE9uRmxhZ3MyPE92ZXJyaWRlc1B1dD4oKTsgfQogICAgIGJvb2wgb3ZlcnJpZGVzR2V0UHJv
dG90eXBlKCkgY29uc3QgeyByZXR1cm4gaXNTZXRPbkZsYWdzMjxPdmVycmlkZXNHZXRQcm90b3R5
cGU+KCk7IH0KICAgICBib29sIHByb2hpYml0c1Byb3BlcnR5Q2FjaGluZygpIGNvbnN0IHsgcmV0
dXJuIGlzU2V0T25GbGFnczI8UHJvaGliaXRzUHJvcGVydHlDYWNoaW5nPigpOyB9CiAgICAgYm9v
bCBnZXRPd25Qcm9wZXJ0eVNsb3RJc0ltcHVyZSgpIGNvbnN0IHsgcmV0dXJuIGlzU2V0T25GbGFn
czI8R2V0T3duUHJvcGVydHlTbG90SXNJbXB1cmU+KCk7IH0KICAgICBib29sIGdldE93blByb3Bl
cnR5U2xvdElzSW1wdXJlRm9yUHJvcGVydHlBYnNlbmNlKCkgY29uc3QgeyByZXR1cm4gaXNTZXRP
bkZsYWdzMjxHZXRPd25Qcm9wZXJ0eVNsb3RJc0ltcHVyZUZvclByb3BlcnR5QWJzZW5jZT4oKTsg
fQogICAgIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90TWF5QmVXcm9uZ0Fib3V0RG9udEVudW0oKSBj
b25zdCB7IHJldHVybiBpc1NldE9uRmxhZ3MyPEdldE93blByb3BlcnR5U2xvdE1heUJlV3JvbmdB
Ym91dERvbnRFbnVtPigpOyB9Ci0gICAgYm9vbCBoYXNQdXRQcm9wZXJ0eVNlY3VyaXR5Q2hlY2so
KSBjb25zdCB7IHJldHVybiBpc1NldE9uRmxhZ3MyPEhhc1B1dFByb3BlcnR5U2VjdXJpdHlDaGVj
az4oKTsgfQogICAgIGJvb2wgbmV3SW1wdXJlUHJvcGVydHlGaXJlc1dhdGNocG9pbnRzKCkgY29u
c3QgeyByZXR1cm4gaXNTZXRPbkZsYWdzMjxOZXdJbXB1cmVQcm9wZXJ0eUZpcmVzV2F0Y2hwb2lu
dHM+KCk7IH0KICAgICBib29sIGlzSW1tdXRhYmxlUHJvdG90eXBlRXhvdGljT2JqZWN0KCkgY29u
c3QgeyByZXR1cm4gaXNTZXRPbkZsYWdzMjxJc0ltbXV0YWJsZVByb3RvdHlwZUV4b3RpY09iamVj
dD4oKTsgfQogICAgIGJvb2wgaW50ZXJjZXB0c0dldE93blByb3BlcnR5U2xvdEJ5SW5kZXhFdmVu
V2hlbkxlbmd0aElzTm90WmVybygpIGNvbnN0IHsgcmV0dXJuIGlzU2V0T25GbGFnczI8SW50ZXJj
ZXB0c0dldE93blByb3BlcnR5U2xvdEJ5SW5kZXhFdmVuV2hlbkxlbmd0aElzTm90WmVybz4oKTsg
fQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTG9va3VwLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTG9va3VwLmgJKHJldmlzaW9uIDI3
ODUzOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0xvb2t1cC5oCSh3b3JraW5n
IGNvcHkpCkBAIC0yNjIsNzAgKzI2Miw2IEBAIGlubGluZSBib29sIHJlcGxhY2VTdGF0aWNQcm9w
ZXJ0eVNsb3QoVk0KICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotLy8gJ2Jhc2UnIG1lYW5zIHRoZSBv
YmplY3QgaG9sZGluZyB0aGUgcHJvcGVydHkgKHBvc3NpYmx5IGluIHRoZSBwcm90b3R5cGUgY2hh
aW4gb2YgdGhlIG9iamVjdCBwdXQgd2FzIGNhbGxlZCBvbikuCi0vLyAndGhpc1ZhbHVlJyBpcyB0
aGUgb2JqZWN0IHRoYXQgcHV0IGlzIGJlaW5nIGFwcGxpZWQgdG8gKGluIHRoZSBjYXNlIG9mIGEg
cHJveHksIHRoZSBwcm94eSB0YXJnZXQpLgotLy8gJ3Nsb3QudGhpc1ZhbHVlKCknIGlzIHRoZSBv
YmplY3QgdGhlIHB1dCB3YXMgb3JpZ2luYWxseSBwZXJmb3JtZWQgb24gKGluIHRoZSBjYXNlIG9m
IGEgcHJveHksIHRoZSBwcm94eSBpdHNlbGYpLgotaW5saW5lIGJvb2wgcHV0RW50cnkoSlNHbG9i
YWxPYmplY3QqIGdsb2JhbE9iamVjdCwgY29uc3QgQ2xhc3NJbmZvKiwgY29uc3QgSGFzaFRhYmxl
VmFsdWUqIGVudHJ5LCBKU09iamVjdCogYmFzZSwgSlNPYmplY3QqIHRoaXNWYWx1ZSwgUHJvcGVy
dHlOYW1lIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSB2YWx1ZSwgUHV0UHJvcGVydHlTbG90JiBzbG90
KQotewotICAgIFZNJiB2bSA9IGdldFZNKGdsb2JhbE9iamVjdCk7Ci0gICAgYXV0byBzY29wZSA9
IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotCi0gICAgaWYgKGVudHJ5LT5hdHRyaWJ1dGVzKCkg
JiBQcm9wZXJ0eUF0dHJpYnV0ZTo6QnVpbHRpbk9yRnVuY3Rpb25PckxhenlQcm9wZXJ0eSkgewot
ICAgICAgICBpZiAoIShlbnRyeS0+YXR0cmlidXRlcygpICYgUHJvcGVydHlBdHRyaWJ1dGU6OlJl
YWRPbmx5KSkgewotICAgICAgICAgICAgLy8gSWYgdGhpcyBpcyBhIGZ1bmN0aW9uIG9yIGxhenkg
cHJvcGVydHkgcHV0IHRoZW4gd2UganVzdCBkbyB0aGUgcHV0IGJlY2F1c2UKLSAgICAgICAgICAg
IC8vIGxvZ2ljYWxseSB0aGUgb2JqZWN0IGFscmVhZHkgaGFkIHRoZSBwcm9wZXJ0eSwgc28gdGhp
cyBpcyBqdXN0IGEgcmVwbGFjZS4KLSAgICAgICAgICAgIC8vIEZJWE1FOiB0aGlzVmFsdWUgbWF5
IGJlIGFuIG9iamVjdCB3aXRoIG5vbi1leHRlbnNpYmxlIHN0cnVjdHVyZSB3ZSBtdXN0IHRocm93
IGZvci4KLSAgICAgICAgICAgIGlmIChKU09iamVjdCogdGhpc09iamVjdCA9IGpzRHluYW1pY0Nh
c3Q8SlNPYmplY3QqPih2bSwgdGhpc1ZhbHVlKSkKLSAgICAgICAgICAgICAgICB0aGlzT2JqZWN0
LT5wdXREaXJlY3Qodm0sIHByb3BlcnR5TmFtZSwgdmFsdWUpOwotICAgICAgICAgICAgcmV0dXJu
IHRydWU7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHR5cGVFcnJvcihnbG9iYWxPYmplY3Qs
IHNjb3BlLCBzbG90LmlzU3RyaWN0TW9kZSgpLCBSZWFkb25seVByb3BlcnR5V3JpdGVFcnJvcik7
Ci0gICAgfQotCi0gICAgaWYgKGVudHJ5LT5hdHRyaWJ1dGVzKCkgJiBQcm9wZXJ0eUF0dHJpYnV0
ZTo6QWNjZXNzb3IpCi0gICAgICAgIHJldHVybiB0eXBlRXJyb3IoZ2xvYmFsT2JqZWN0LCBzY29w
ZSwgc2xvdC5pc1N0cmljdE1vZGUoKSwgUmVhZG9ubHlQcm9wZXJ0eVdyaXRlRXJyb3IpOwotCi0g
ICAgaWYgKCEoZW50cnktPmF0dHJpYnV0ZXMoKSAmIFByb3BlcnR5QXR0cmlidXRlOjpSZWFkT25s
eSkpIHsKLSAgICAgICAgQVNTRVJUX1dJVEhfTUVTU0FHRSghKGVudHJ5LT5hdHRyaWJ1dGVzKCkg
JiBQcm9wZXJ0eUF0dHJpYnV0ZTo6RE9NSklUQXR0cmlidXRlKSwgIkRPTUpJVEF0dHJpYnV0ZSBz
dXBwb3J0cyByZWFkb25seSBhdHRyaWJ1dGVzIGN1cnJlbnRseS4iKTsKLSAgICAgICAgYm9vbCBp
c0FjY2Vzc29yID0gZW50cnktPmF0dHJpYnV0ZXMoKSAmIFByb3BlcnR5QXR0cmlidXRlOjpDdXN0
b21BY2Nlc3NvcjsKLSAgICAgICAgLy8gRklYTUU6IFdlIHNob3VsZCBvbmx5IGJlIGNhY2hpbmcg
dGhlc2UgaWYgd2UncmUgbm90IGFuIHVuY2FjaGVhYmxlIGRpY3Rpb25hcnk6Ci0gICAgICAgIC8v
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTUzNDcKLSAgICAgICAg
Ly8gV2UgbmVlZCB0byBtYWtlIHN1cmUgdGhhdCB3ZSBkZWNpZGUgdG8gY2FjaGUgdGhpcyBwcm9w
ZXJ0eSBiZWZvcmUgd2UgcG90ZW50aWFsbHkgZXhlY3V0ZSBhcmliaXRyYXJ5IEpTLgotICAgICAg
ICBpZiAoaXNBY2Nlc3NvcikKLSAgICAgICAgICAgIHNsb3Quc2V0Q3VzdG9tQWNjZXNzb3IoYmFz
ZSwgZW50cnktPnByb3BlcnR5UHV0dGVyKCkpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBz
bG90LnNldEN1c3RvbVZhbHVlKGJhc2UsIGVudHJ5LT5wcm9wZXJ0eVB1dHRlcigpKTsKLQotICAg
ICAgICBhdXRvIHJlc3VsdCA9IGNhbGxDdXN0b21TZXR0ZXIoZ2xvYmFsT2JqZWN0LCBlbnRyeS0+
cHJvcGVydHlQdXR0ZXIoKSwgaXNBY2Nlc3NvciwgYmFzZSwgc2xvdC50aGlzVmFsdWUoKSwgdmFs
dWUsIHByb3BlcnR5TmFtZSk7Ci0gICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGZh
bHNlKTsKLSAgICAgICAgaWYgKHJlc3VsdCAhPSBUcmlTdGF0ZTo6SW5kZXRlcm1pbmF0ZSkKLSAg
ICAgICAgICAgIHJldHVybiByZXN1bHQgPT0gVHJpU3RhdGU6OlRydWU7Ci0KLSAgICAgICAgLy8g
RklYTUU6IHRoaXNWYWx1ZSBtYXkgYmUgYW4gb2JqZWN0IHdpdGggbm9uLWV4dGVuc2libGUgc3Ry
dWN0dXJlIHdlIG11c3QgdGhyb3cgZm9yLgotICAgICAgICBpZiAoSlNPYmplY3QqIHRoaXNPYmpl
Y3QgPSBqc0R5bmFtaWNDYXN0PEpTT2JqZWN0Kj4odm0sIHRoaXNWYWx1ZSkpCi0gICAgICAgICAg
ICB0aGlzT2JqZWN0LT5wdXREaXJlY3Qodm0sIHByb3BlcnR5TmFtZSwgdmFsdWUpOwotICAgICAg
ICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICByZXR1cm4gdHlwZUVycm9yKGdsb2JhbE9iamVj
dCwgc2NvcGUsIHNsb3QuaXNTdHJpY3RNb2RlKCksIFJlYWRvbmx5UHJvcGVydHlXcml0ZUVycm9y
KTsKLX0KLQotLyoqCi0gKiBUaGlzIG9uZSBpcyBmb3IgInB1dCIuCi0gKiBJdCBsb29rcyB1cCBh
IGhhc2ggZW50cnkgZm9yIHRoZSBwcm9wZXJ0eSB0byBiZSBzZXQuICBJZiBhbiBlbnRyeQotICog
aXMgZm91bmQgaXQgc2V0cyB0aGUgdmFsdWUgYW5kIHJldHVybnMgdHJ1ZSwgZWxzZSBpdCByZXR1
cm5zIGZhbHNlLgotICovCi1pbmxpbmUgYm9vbCBsb29rdXBQdXQoSlNHbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgSlNPYmplY3QqIGJhc2UsIEpT
VmFsdWUgdmFsdWUsIGNvbnN0IEhhc2hUYWJsZSYgdGFibGUsIFB1dFByb3BlcnR5U2xvdCYgc2xv
dCwgYm9vbCYgcHV0UmVzdWx0KQotewotICAgIGNvbnN0IEhhc2hUYWJsZVZhbHVlKiBlbnRyeSA9
IHRhYmxlLmVudHJ5KHByb3BlcnR5TmFtZSk7Ci0KLSAgICBpZiAoIWVudHJ5KQotICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0KLSAgICBwdXRSZXN1bHQgPSBwdXRFbnRyeShnbG9iYWxPYmplY3QsIHRh
YmxlLmNsYXNzRm9yVGhpcywgZW50cnksIGJhc2UsIGJhc2UsIHByb3BlcnR5TmFtZSwgdmFsdWUs
IHNsb3QpOwotICAgIHJldHVybiB0cnVlOwotfQotCiBpbmxpbmUgdm9pZCByZWlmeVN0YXRpY1By
b3BlcnR5KFZNJiB2bSwgY29uc3QgQ2xhc3NJbmZvKiBjbGFzc0luZm8sIGNvbnN0IFByb3BlcnR5
TmFtZSYgcHJvcGVydHlOYW1lLCBjb25zdCBIYXNoVGFibGVWYWx1ZSYgdmFsdWUsIEpTT2JqZWN0
JiB0aGlzT2JqKQogewogICAgIGlmICh2YWx1ZS5hdHRyaWJ1dGVzKCkgJiBQcm9wZXJ0eUF0dHJp
YnV0ZTo6QnVpbHRpbikgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJv
cGVydHlTbG90LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
UHJvcGVydHlTbG90LmgJKHJldmlzaW9uIDI3ODUzOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1Byb3BlcnR5U2xvdC5oCSh3b3JraW5nIGNvcHkpCkBAIC00Nyw2ICs0Nyw3IEBA
IGVudW0gY2xhc3MgUHJvcGVydHlBdHRyaWJ1dGUgOiB1bnNpZ25lZCAKICAgICBDdXN0b21WYWx1
ZSAgICAgICA9IDEgPDwgNiwKICAgICBDdXN0b21BY2Nlc3Nvck9yVmFsdWUgPSBDdXN0b21BY2Nl
c3NvciB8IEN1c3RvbVZhbHVlLAogICAgIEFjY2Vzc29yT3JDdXN0b21BY2Nlc3Nvck9yVmFsdWUg
PSBBY2Nlc3NvciB8IEN1c3RvbUFjY2Vzc29yIHwgQ3VzdG9tVmFsdWUsCisgICAgUmVhZE9ubHlP
ckFjY2Vzc29yT3JDdXN0b21BY2Nlc3NvciA9IFJlYWRPbmx5IHwgQWNjZXNzb3IgfCBDdXN0b21B
Y2Nlc3NvciwKIAogICAgIC8vIFRoaW5ncyB0aGF0IGFyZSB1c2VkIGJ5IHN0YXRpYyBoYXNodGFi
bGVzIGFyZSBub3QgaW4gdGhlIGF0dHJpYnV0ZXMgYnl0ZSBpbiBQcm9wZXJ0eU1hcEVudHJ5Lgog
ICAgIEZ1bmN0aW9uICAgICAgICAgID0gMSA8PCA4LCAgLy8gcHJvcGVydHkgaXMgYSBmdW5jdGlv
biAtIG9ubHkgdXNlZCBieSBzdGF0aWMgaGFzaHRhYmxlcwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvUHJveHlPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1Byb3h5T2JqZWN0LmNwcAkocmV2aXNpb24gMjc4NTM5KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJveHlPYmplY3QuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC00NjQsNiArNDY0LDcgQEAgYm9vbCBQcm94eU9iamVjdDo6cHV0KEpTQ2VsbCogY2Vs
bCwgSlNHbAogewogICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKICAgICBzbG90LmRp
c2FibGVDYWNoaW5nKCk7CisgICAgc2xvdC5zZXRJc1RhaW50ZWRCeU9wYXF1ZU9iamVjdCgpOwog
CiAgICAgUHJveHlPYmplY3QqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8UHJveHlPYmplY3QqPihjZWxs
KTsKICAgICBhdXRvIHBlcmZvcm1EZWZhdWx0UHV0ID0gWyZdICgpIHsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb3h5T2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJveHlPYmplY3QuaAkocmV2aXNpb24gMjc4NTM5KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJveHlPYmplY3QuaAkod29ya2luZyBj
b3B5KQpAQCAtMzQsNyArMzQsNyBAQCBjbGFzcyBQcm94eU9iamVjdCBmaW5hbCA6IHB1YmxpYyBK
U05vbkZpCiBwdWJsaWM6CiAgICAgdHlwZWRlZiBKU05vbkZpbmFsT2JqZWN0IEJhc2U7CiAKLSAg
ICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0
dXJlRmxhZ3MgfCBPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3QgfCBPdmVycmlkZXNHZXRPd25Q
cm9wZXJ0eU5hbWVzIHwgT3ZlcnJpZGVzR2V0UHJvdG90eXBlIHwgT3ZlcnJpZGVzR2V0Q2FsbERh
dGEgfCBJbnRlcmNlcHRzR2V0T3duUHJvcGVydHlTbG90QnlJbmRleEV2ZW5XaGVuTGVuZ3RoSXNO
b3RaZXJvIHwgUHJvaGliaXRzUHJvcGVydHlDYWNoaW5nOworICAgIHN0YXRpYyBjb25zdGV4cHIg
dW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8IE92ZXJyaWRl
c0dldE93blByb3BlcnR5U2xvdCB8IE92ZXJyaWRlc0dldE93blByb3BlcnR5TmFtZXMgfCBPdmVy
cmlkZXNHZXRQcm90b3R5cGUgfCBPdmVycmlkZXNHZXRDYWxsRGF0YSB8IE92ZXJyaWRlc1B1dCB8
IEludGVyY2VwdHNHZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4RXZlbldoZW5MZW5ndGhJc05vdFpl
cm8gfCBQcm9oaWJpdHNQcm9wZXJ0eUNhY2hpbmc7CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBD
ZWxsVHlwZSwgU3Vic3BhY2VBY2Nlc3MgbW9kZT4KICAgICBzdGF0aWMgSXNvU3Vic3BhY2UqIHN1
YnNwYWNlRm9yKFZNJiB2bSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1B1
dFByb3BlcnR5U2xvdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL1B1dFByb3BlcnR5U2xvdC5oCShyZXZpc2lvbiAyNzg1MzkpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9QdXRQcm9wZXJ0eVNsb3QuaAkod29ya2luZyBjb3B5KQpAQCAtMzcs
NyArMzcsNyBAQCBjbGFzcyBKU0Z1bmN0aW9uOwogY2xhc3MgUHV0UHJvcGVydHlTbG90IHsKIHB1
YmxpYzoKICAgICBlbnVtIFR5cGUgOiB1aW50OF90IHsgVW5jYWNoYWJsZSwgRXhpc3RpbmdQcm9w
ZXJ0eSwgTmV3UHJvcGVydHksIFNldHRlclByb3BlcnR5LCBDdXN0b21WYWx1ZSwgQ3VzdG9tQWNj
ZXNzb3IgfTsKLSAgICBlbnVtIENvbnRleHQgeyBVbmtub3duQ29udGV4dCwgUHV0QnlJZCwgUHV0
QnlJZEV2YWwgfTsKKyAgICBlbnVtIENvbnRleHQgOiB1aW50OF90IHsgVW5rbm93bkNvbnRleHQs
IFB1dEJ5SWQsIFB1dEJ5SWRFdmFsLCBSZWZsZWN0U2V0IH07CiAgICAgdXNpbmcgUHV0VmFsdWVG
dW5jID0gSlNDOjpQdXRWYWx1ZUZ1bmM7CiAgICAgdXNpbmcgUHV0VmFsdWVGdW5jV2l0aFB0ciA9
IEpTQzo6UHV0VmFsdWVGdW5jV2l0aFB0cjsKIApAQCAtNDcsNiArNDcsNyBAQCBwdWJsaWM6CiAg
ICAgICAgICwgbV9vZmZzZXQoaW52YWxpZE9mZnNldCkKICAgICAgICAgLCBtX2lzU3RyaWN0TW9k
ZShpc1N0cmljdE1vZGUpCiAgICAgICAgICwgbV9pc0luaXRpYWxpemF0aW9uKGlzSW5pdGlhbGl6
YXRpb24pCisgICAgICAgICwgbV9pc1RhaW50ZWRCeU9wYXF1ZU9iamVjdChmYWxzZSkKICAgICAg
ICAgLCBtX3R5cGUoVW5jYWNoYWJsZSkKICAgICAgICAgLCBtX2NvbnRleHQoY29udGV4dCkKICAg
ICAgICAgLCBtX2NhY2hlYWJpbGl0eShDYWNoaW5nQWxsb3dlZCkKQEAgLTEwNCw5ICsxMDUsOCBA
QCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBtX3B1dEZ1bmN0aW9uOwogICAgIH0KIAotICAgIENv
bnRleHQgY29udGV4dCgpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PENvbnRleHQ+KG1fY29u
dGV4dCk7IH0KLQogICAgIFR5cGUgdHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fdHlwZTsgfQorICAg
IENvbnRleHQgY29udGV4dCgpIGNvbnN0IHsgcmV0dXJuIG1fY29udGV4dDsgfQogICAgIEpTT2Jq
ZWN0KiBiYXNlKCkgY29uc3QgeyByZXR1cm4gbV9iYXNlOyB9CiAgICAgSlNWYWx1ZSB0aGlzVmFs
dWUoKSBjb25zdCB7IHJldHVybiBtX3RoaXNWYWx1ZTsgfQogCkBAIC0xMTYsNiArMTE2LDggQEAg
cHVibGljOgogICAgIGJvb2wgaXNDYWNoZWFibGVDdXN0b20oKSBjb25zdCB7IHJldHVybiBpc0Nh
Y2hlYWJsZSgpICYmIChtX3R5cGUgPT0gQ3VzdG9tVmFsdWUgfHwgbV90eXBlID09IEN1c3RvbUFj
Y2Vzc29yKSAmJiAhIW1fcHV0RnVuY3Rpb247IH0KICAgICBib29sIGlzQ3VzdG9tQWNjZXNzb3Io
KSBjb25zdCB7IHJldHVybiBpc0NhY2hlYWJsZSgpICYmIG1fdHlwZSA9PSBDdXN0b21BY2Nlc3Nv
cjsgfQogICAgIGJvb2wgaXNJbml0aWFsaXphdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1faXNJbml0
aWFsaXphdGlvbjsgfQorICAgIGJvb2wgaXNUYWludGVkQnlPcGFxdWVPYmplY3QoKSBjb25zdCB7
IHJldHVybiBtX2lzVGFpbnRlZEJ5T3BhcXVlT2JqZWN0OyB9CisgICAgdm9pZCBzZXRJc1RhaW50
ZWRCeU9wYXF1ZU9iamVjdCgpIHsgbV9pc1RhaW50ZWRCeU9wYXF1ZU9iamVjdCA9IHRydWU7IH0K
IAogICAgIFByb3BlcnR5T2Zmc2V0IGNhY2hlZE9mZnNldCgpIGNvbnN0CiAgICAgewpAQCAtMTM1
LDggKzEzNyw5IEBAIHByaXZhdGU6CiAgICAgUHJvcGVydHlPZmZzZXQgbV9vZmZzZXQ7CiAgICAg
Ym9vbCBtX2lzU3RyaWN0TW9kZSA6IDE7CiAgICAgYm9vbCBtX2lzSW5pdGlhbGl6YXRpb24gOiAx
OworICAgIGJvb2wgbV9pc1RhaW50ZWRCeU9wYXF1ZU9iamVjdCA6IDE7CiAgICAgVHlwZSBtX3R5
cGU7Ci0gICAgdWludDhfdCBtX2NvbnRleHQ7CisgICAgQ29udGV4dCBtX2NvbnRleHQ7CiAgICAg
Q2FjaGVhYmlsaXR5VHlwZSBtX2NhY2hlYWJpbGl0eTsKICAgICBGdW5jdGlvblB0cjxDdXN0b21B
Y2Nlc3NvclB0clRhZz4gbV9wdXRGdW5jdGlvbjsKIH07CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9SZWZsZWN0T2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9SZWZsZWN0T2JqZWN0LmNwcAkocmV2aXNpb24gMjc4NTM5KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVmbGVjdE9iamVjdC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTI2MCw3ICsyNjAsNyBAQCBKU0NfREVGSU5FX0hPU1RfRlVOQ1RJT04ocmVm
bGVjdE9iamVjdFNlCiAKICAgICAvLyBEbyBub3QgcmFpc2UgYW55IHJlYWRvbmx5IGVycm9ycyB0
aGF0IGhhcHBlbiBpbiBzdHJpY3QgbW9kZS4KICAgICBib29sIHNob3VsZFRocm93SWZDYW50U2V0
ID0gZmFsc2U7Ci0gICAgUHV0UHJvcGVydHlTbG90IHNsb3QocmVjZWl2ZXIsIHNob3VsZFRocm93
SWZDYW50U2V0KTsKKyAgICBQdXRQcm9wZXJ0eVNsb3Qgc2xvdChyZWNlaXZlciwgc2hvdWxkVGhy
b3dJZkNhbnRTZXQsIFB1dFByb3BlcnR5U2xvdDo6UmVmbGVjdFNldCk7CiAgICAgUkVMRUFTRV9B
TkRfUkVUVVJOKHNjb3BlLCBKU1ZhbHVlOjplbmNvZGUoanNCb29sZWFuKHRhcmdldE9iamVjdC0+
bWV0aG9kVGFibGUodm0pLT5wdXQodGFyZ2V0T2JqZWN0LCBnbG9iYWxPYmplY3QsIHByb3BlcnR5
TmFtZSwgY2FsbEZyYW1lLT5hcmd1bWVudCgyKSwgc2xvdCkpKSk7CiB9CiAKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cE9iamVjdC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwT2JqZWN0LmNwcAkocmV2aXNpb24g
Mjc4NTM5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwT2JqZWN0LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMTM0LDE5ICsxMzQsMjQgQEAgSlNDX0RFRklORV9DVVNUT01f
U0VUVEVSKHJlZ0V4cE9iamVjdFNldAogYm9vbCBSZWdFeHBPYmplY3Q6OnB1dChKU0NlbGwqIGNl
bGwsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5h
bWUsIEpTVmFsdWUgdmFsdWUsIFB1dFByb3BlcnR5U2xvdCYgc2xvdCkKIHsKICAgICBWTSYgdm0g
PSBnbG9iYWxPYmplY3QtPnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NP
UEUodm0pOwogICAgIFJlZ0V4cE9iamVjdCogdGhpc09iamVjdCA9IGpzQ2FzdDxSZWdFeHBPYmpl
Y3QqPihjZWxsKTsKIAotICAgIGlmIChVTkxJS0VMWShpc1RoaXNWYWx1ZUFsdGVyZWQoc2xvdCwg
dGhpc09iamVjdCkpKQotICAgICAgICByZXR1cm4gb3JkaW5hcnlTZXRTbG93KGdsb2JhbE9iamVj
dCwgdGhpc09iamVjdCwgcHJvcGVydHlOYW1lLCB2YWx1ZSwgc2xvdC50aGlzVmFsdWUoKSwgc2xv
dC5pc1N0cmljdE1vZGUoKSk7Ci0KICAgICBpZiAocHJvcGVydHlOYW1lID09IHZtLnByb3BlcnR5
TmFtZXMtPmxhc3RJbmRleCkgeworICAgICAgICBpZiAoIXRoaXNPYmplY3QtPmxhc3RJbmRleElz
V3JpdGFibGUoKSkKKyAgICAgICAgICAgIHJldHVybiB0eXBlRXJyb3IoZ2xvYmFsT2JqZWN0LCBz
Y29wZSwgc2xvdC5pc1N0cmljdE1vZGUoKSwgUmVhZG9ubHlQcm9wZXJ0eVdyaXRlRXJyb3IpOwor
CisgICAgICAgIGlmIChVTkxJS0VMWShzbG90LnRoaXNWYWx1ZSgpICE9IHRoaXNPYmplY3QpKQor
ICAgICAgICAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBKU09iamVjdDo6ZGVmaW5lUHJv
cGVydHlPblJlY2VpdmVyKGdsb2JhbE9iamVjdCwgcHJvcGVydHlOYW1lLCB2YWx1ZSwgc2xvdCkp
OworCiAgICAgICAgIGJvb2wgcmVzdWx0ID0gdGhpc09iamVjdC0+c2V0TGFzdEluZGV4KGdsb2Jh
bE9iamVjdCwgdmFsdWUsIHNsb3QuaXNTdHJpY3RNb2RlKCkpOworICAgICAgICBSRVRVUk5fSUZf
RVhDRVBUSU9OKHNjb3BlLCBmYWxzZSk7CiAgICAgICAgIHNsb3Quc2V0Q3VzdG9tVmFsdWUodGhp
c09iamVjdCwgc2xvdC5pc1N0cmljdE1vZGUoKQogICAgICAgICAgICAgPyByZWdFeHBPYmplY3RT
ZXRMYXN0SW5kZXhTdHJpY3QKICAgICAgICAgICAgIDogcmVnRXhwT2JqZWN0U2V0TGFzdEluZGV4
Tm9uU3RyaWN0KTsKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9Ci0gICAgcmV0dXJuIEJh
c2U6OnB1dChjZWxsLCBnbG9iYWxPYmplY3QsIHByb3BlcnR5TmFtZSwgdmFsdWUsIHNsb3QpOwor
ICAgIFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwgQmFzZTo6cHV0KGNlbGwsIGdsb2JhbE9iamVj
dCwgcHJvcGVydHlOYW1lLCB2YWx1ZSwgc2xvdCkpOwogfQogCiBKU1ZhbHVlIFJlZ0V4cE9iamVj
dDo6ZXhlYyhKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1N0cmluZyogc3RyaW5nKQpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwT2JqZWN0LmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwT2JqZWN0LmgJKHJl
dmlzaW9uIDI3ODUzOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cE9i
amVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw3ICszMCw3IEBAIG5hbWVzcGFjZSBKU0Mgewog
Y2xhc3MgUmVnRXhwT2JqZWN0IGZpbmFsIDogcHVibGljIEpTTm9uRmluYWxPYmplY3QgewogcHVi
bGljOgogICAgIHVzaW5nIEJhc2UgPSBKU05vbkZpbmFsT2JqZWN0OwotICAgIHN0YXRpYyBjb25z
dGV4cHIgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8IE92
ZXJyaWRlc0dldE93blByb3BlcnR5U2xvdCB8IE92ZXJyaWRlc0dldE93blNwZWNpYWxQcm9wZXJ0
eU5hbWVzOworICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBC
YXNlOjpTdHJ1Y3R1cmVGbGFncyB8IE92ZXJyaWRlc0dldE93blByb3BlcnR5U2xvdCB8IE92ZXJy
aWRlc0dldE93blNwZWNpYWxQcm9wZXJ0eU5hbWVzIHwgT3ZlcnJpZGVzUHV0OwogCiAgICAgdGVt
cGxhdGU8dHlwZW5hbWUgQ2VsbFR5cGUsIFN1YnNwYWNlQWNjZXNzIG1vZGU+CiAgICAgc3RhdGlj
IElzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9TdHJpbmdPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1N0cmluZ09iamVjdC5jcHAJKHJldmlzaW9uIDI3ODUzOSkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cmluZ09iamVjdC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTY4LDExICs2OCwxMCBAQCBib29sIFN0cmluZ09iamVjdDo6cHV0KEpTQ2VsbCog
Y2VsbCwgSlNHCiAKICAgICBTdHJpbmdPYmplY3QqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8U3RyaW5n
T2JqZWN0Kj4oY2VsbCk7CiAKLSAgICBpZiAoVU5MSUtFTFkoaXNUaGlzVmFsdWVBbHRlcmVkKHNs
b3QsIHRoaXNPYmplY3QpKSkgCi0gICAgICAgIFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwgb3Jk
aW5hcnlTZXRTbG93KGdsb2JhbE9iamVjdCwgdGhpc09iamVjdCwgcHJvcGVydHlOYW1lLCB2YWx1
ZSwgc2xvdC50aGlzVmFsdWUoKSwgc2xvdC5pc1N0cmljdE1vZGUoKSkpOwotCiAgICAgaWYgKHBy
b3BlcnR5TmFtZSA9PSB2bS5wcm9wZXJ0eU5hbWVzLT5sZW5ndGgpCiAgICAgICAgIHJldHVybiB0
eXBlRXJyb3IoZ2xvYmFsT2JqZWN0LCBzY29wZSwgc2xvdC5pc1N0cmljdE1vZGUoKSwgUmVhZG9u
bHlQcm9wZXJ0eVdyaXRlRXJyb3IpOworICAgIGlmIChVTkxJS0VMWShzbG90LnRoaXNWYWx1ZSgp
ICE9IHRoaXNPYmplY3QpKQorICAgICAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIEpTT2Jq
ZWN0OjpwdXQoY2VsbCwgZ2xvYmFsT2JqZWN0LCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCBzbG90KSk7
CiAgICAgaWYgKHN0ZDo6b3B0aW9uYWw8dWludDMyX3Q+IGluZGV4ID0gcGFyc2VJbmRleChwcm9w
ZXJ0eU5hbWUpKSAKICAgICAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBwdXRCeUluZGV4
KGNlbGwsIGdsb2JhbE9iamVjdCwgaW5kZXgudmFsdWUoKSwgdmFsdWUsIHNsb3QuaXNTdHJpY3RN
b2RlKCkpKTsKICAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIEpTT2JqZWN0OjpwdXQoY2Vs
bCwgZ2xvYmFsT2JqZWN0LCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCBzbG90KSk7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJpbmdPYmplY3QuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJpbmdPYmplY3QuaAkocmV2aXNpb24gMjc4
NTM5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RyaW5nT2JqZWN0LmgJKHdv
cmtpbmcgY29weSkKQEAgLTI4LDcgKzI4LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiBjbGFzcyBTdHJp
bmdPYmplY3QgOiBwdWJsaWMgSlNXcmFwcGVyT2JqZWN0IHsKIHB1YmxpYzoKICAgICB1c2luZyBC
YXNlID0gSlNXcmFwcGVyT2JqZWN0OwotICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgU3Ry
dWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8IE92ZXJyaWRlc0dldE93blByb3Bl
cnR5U2xvdCB8IE92ZXJyaWRlc0dldE93blByb3BlcnR5TmFtZXMgfCBJbnRlcmNlcHRzR2V0T3du
UHJvcGVydHlTbG90QnlJbmRleEV2ZW5XaGVuTGVuZ3RoSXNOb3RaZXJvOworICAgIHN0YXRpYyBj
b25zdGV4cHIgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8
IE92ZXJyaWRlc0dldE93blByb3BlcnR5U2xvdCB8IE92ZXJyaWRlc0dldE93blByb3BlcnR5TmFt
ZXMgfCBPdmVycmlkZXNQdXQgfCBJbnRlcmNlcHRzR2V0T3duUHJvcGVydHlTbG90QnlJbmRleEV2
ZW5XaGVuTGVuZ3RoSXNOb3RaZXJvOwogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUsIFN1YnNwYWNl
QWNjZXNzIG1vZGU+CiAgICAgc3RhdGljIElzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0p
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJpbmdQcm90b3R5cGUuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cmluZ1Byb3Rv
dHlwZS5jcHAJKHJldmlzaW9uIDI3ODUzOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL1N0cmluZ1Byb3RvdHlwZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEyMSw5ICsxMjEsOSBA
QCBTdHJpbmdQcm90b3R5cGU6OlN0cmluZ1Byb3RvdHlwZShWTSYgdm0sCiB7CiB9CiAKLXZvaWQg
U3RyaW5nUHJvdG90eXBlOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBn
bG9iYWxPYmplY3QsIEpTU3RyaW5nKiBuYW1lQW5kTWVzc2FnZSkKK3ZvaWQgU3RyaW5nUHJvdG90
eXBlOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qp
CiB7Ci0gICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24odm0sIG5hbWVBbmRNZXNzYWdlKTsKKyAgICBC
YXNlOjpmaW5pc2hDcmVhdGlvbih2bSwganNFbXB0eVN0cmluZyh2bSkpOwogICAgIEFTU0VSVChp
bmhlcml0cyh2bSwgaW5mbygpKSk7CiAKICAgICBKU0NfTkFUSVZFX0lOVFJJTlNJQ19GVU5DVElP
Tl9XSVRIT1VUX1RSQU5TSVRJT04odm0ucHJvcGVydHlOYW1lcy0+dG9TdHJpbmcsIHN0cmluZ1By
b3RvRnVuY1RvU3RyaW5nLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oUHJvcGVydHlBdHRyaWJ1dGU6
OkRvbnRFbnVtKSwgMCwgU3RyaW5nUHJvdG90eXBlVmFsdWVPZkludHJpbnNpYyk7CkBAIC0xNjUs
MTQgKzE2NSwxMiBAQCB2b2lkIFN0cmluZ1Byb3RvdHlwZTo6ZmluaXNoQ3JlYXRpb24oVk0mCiAg
ICAgcHV0RGlyZWN0V2l0aG91dFRyYW5zaXRpb24odm0sIHZtLnByb3BlcnR5TmFtZXMtPml0ZXJh
dG9yU3ltYm9sLCBpdGVyYXRvckZ1bmN0aW9uLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oUHJvcGVy
dHlBdHRyaWJ1dGU6OkRvbnRFbnVtKSk7CiAKICAgICAvLyBUaGUgY29uc3RydWN0b3Igd2lsbCBi
ZSBhZGRlZCBsYXRlciwgYWZ0ZXIgU3RyaW5nQ29uc3RydWN0b3IgaGFzIGJlZW4gYnVpbHQKLSAg
ICBwdXREaXJlY3RXaXRob3V0VHJhbnNpdGlvbih2bSwgdm0ucHJvcGVydHlOYW1lcy0+bGVuZ3Ro
LCBqc051bWJlcigwKSwgUHJvcGVydHlBdHRyaWJ1dGU6OkRvbnREZWxldGUgfCBQcm9wZXJ0eUF0
dHJpYnV0ZTo6UmVhZE9ubHkgfCBQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pOwogfQogCiBT
dHJpbmdQcm90b3R5cGUqIFN0cmluZ1Byb3RvdHlwZTo6Y3JlYXRlKFZNJiB2bSwgSlNHbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjdCwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCiB7Ci0gICAgSlNTdHJp
bmcqIGVtcHR5ID0ganNFbXB0eVN0cmluZyh2bSk7CiAgICAgU3RyaW5nUHJvdG90eXBlKiBwcm90
b3R5cGUgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxTdHJpbmdQcm90b3R5cGU+KHZtLmhl
YXApKSBTdHJpbmdQcm90b3R5cGUodm0sIHN0cnVjdHVyZSk7Ci0gICAgcHJvdG90eXBlLT5maW5p
c2hDcmVhdGlvbih2bSwgZ2xvYmFsT2JqZWN0LCBlbXB0eSk7CisgICAgcHJvdG90eXBlLT5maW5p
c2hDcmVhdGlvbih2bSwgZ2xvYmFsT2JqZWN0KTsKICAgICByZXR1cm4gcHJvdG90eXBlOwogfQog
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJpbmdQcm90b3R5cGUuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJpbmdQcm90b3R5
cGUuaAkocmV2aXNpb24gMjc4NTM5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
U3RyaW5nUHJvdG90eXBlLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ1LDcgKzQ1LDcgQEAgcHVibGlj
OgogCiBwcml2YXRlOgogICAgIFN0cmluZ1Byb3RvdHlwZShWTSYsIFN0cnVjdHVyZSopOwotICAg
IHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mLCBKU0dsb2JhbE9iamVjdCosIEpTU3RyaW5nKik7Cisg
ICAgdm9pZCBmaW5pc2hDcmVhdGlvbihWTSYsIEpTR2xvYmFsT2JqZWN0Kik7CiB9OwogU1RBVElD
X0FTU0VSVF9JU09fU1VCU1BBQ0VfU0hBUkFCTEUoU3RyaW5nUHJvdG90eXBlLCBTdHJpbmdPYmpl
Y3QpOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmUuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5j
cHAJKHJldmlzaW9uIDI3ODUzOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0
cnVjdHVyZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE5MCwxMSArMTkwLDYgQEAgdm9pZCBTdHJ1
Y3R1cmU6OnZhbGlkYXRlRmxhZ3MoKQogICAgIGlmIChvdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNs
b3RCeUluZGV4KQogICAgICAgICBSRUxFQVNFX0FTU0VSVCh0eXBlSW5mbygpLmludGVyY2VwdHNH
ZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4RXZlbldoZW5MZW5ndGhJc05vdFplcm8oKSk7CiAKLSAg
ICBib29sIG92ZXJyaWRlc1B1dFByb3BlcnR5U2VjdXJpdHlDaGVjayA9Ci0gICAgICAgIG1ldGhv
ZFRhYmxlLmRvUHV0UHJvcGVydHlTZWN1cml0eUNoZWNrICE9IEpTT2JqZWN0Ojpkb1B1dFByb3Bl
cnR5U2VjdXJpdHlDaGVjawotICAgICAgICAmJiBtZXRob2RUYWJsZS5kb1B1dFByb3BlcnR5U2Vj
dXJpdHlDaGVjayAhPSBKU0NlbGw6OmRvUHV0UHJvcGVydHlTZWN1cml0eUNoZWNrOwotICAgIFJF
TEVBU0VfQVNTRVJUKG92ZXJyaWRlc1B1dFByb3BlcnR5U2VjdXJpdHlDaGVjayA9PSB0eXBlSW5m
bygpLmhhc1B1dFByb3BlcnR5U2VjdXJpdHlDaGVjaygpKTsKLQogICAgIGJvb2wgb3ZlcnJpZGVz
R2V0T3duUHJvcGVydHlOYW1lcyA9CiAgICAgICAgIG1ldGhvZFRhYmxlLmdldE93blByb3BlcnR5
TmFtZXMgIT0gSlNPYmplY3Q6OmdldE93blByb3BlcnR5TmFtZXMKICAgICAgICAgJiYgbWV0aG9k
VGFibGUuZ2V0T3duUHJvcGVydHlOYW1lcyAhPSBKU0NlbGw6OmdldE93blByb3BlcnR5TmFtZXM7
CkBAIC0yMDksNiArMjA0LDExIEBAIHZvaWQgU3RydWN0dXJlOjp2YWxpZGF0ZUZsYWdzKCkKICAg
ICAgICAgbWV0aG9kVGFibGUuZ2V0UHJvdG90eXBlICE9IHN0YXRpY19jYXN0PE1ldGhvZFRhYmxl
OjpHZXRQcm90b3R5cGVGdW5jdGlvblB0cj4oSlNPYmplY3Q6OmdldFByb3RvdHlwZSkKICAgICAg
ICAgJiYgbWV0aG9kVGFibGUuZ2V0UHJvdG90eXBlICE9IEpTQ2VsbDo6Z2V0UHJvdG90eXBlOwog
ICAgIFJFTEVBU0VfQVNTRVJUKG92ZXJyaWRlc0dldFByb3RvdHlwZSA9PSB0eXBlSW5mbygpLm92
ZXJyaWRlc0dldFByb3RvdHlwZSgpKTsKKworICAgIGJvb2wgb3ZlcnJpZGVzUHV0ID0KKyAgICAg
ICAgbWV0aG9kVGFibGUucHV0ICE9IEpTT2JqZWN0OjpwdXQKKyAgICAgICAgJiYgbWV0aG9kVGFi
bGUucHV0ICE9IEpTQ2VsbDo6cHV0OworICAgIFJFTEVBU0VfQVNTRVJUKG92ZXJyaWRlc1B1dCA9
PSB0eXBlSW5mbygpLm92ZXJyaWRlc1B1dCgpKTsKIH0KICNlbHNlCiBpbmxpbmUgdm9pZCBTdHJ1
Y3R1cmU6OnZhbGlkYXRlRmxhZ3MoKSB7IH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1N0cnVjdHVyZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1N0cnVjdHVyZS5oCShyZXZpc2lvbiAyNzg1MzkpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9TdHJ1Y3R1cmUuaAkod29ya2luZyBjb3B5KQpAQCAtMjY4LDYgKzI2OCwx
MSBAQCBwdWJsaWM6CiAgICAgewogICAgICAgICByZXR1cm4gdHlwZUluZm8oKS5nZXRPd25Qcm9w
ZXJ0eVNsb3RJc0ltcHVyZSgpOwogICAgIH0KKworICAgIGJvb2wgaGFzTm9uUmVpZmllZFN0YXRp
Y1Byb3BlcnRpZXMoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIHR5cGVJbmZvKCkuaGFz
U3RhdGljUHJvcGVydHlUYWJsZSgpICYmICFzdGF0aWNQcm9wZXJ0aWVzUmVpZmllZCgpOworICAg
IH0KICAgICAKICAgICAvLyBUeXBlIGFjY2Vzc29ycy4KICAgICBUeXBlSW5mbyB0eXBlSW5mbygp
IGNvbnN0IHsgcmV0dXJuIG1fYmxvYi50eXBlSW5mbyhtX291dE9mTGluZVR5cGVGbGFncyk7IH0K
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90b29scy9KU0RvbGxhclZNLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdG9vbHMvSlNEb2xsYXJWTS5jcHAJKHJldmlz
aW9uIDI3ODUzOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90b29scy9KU0RvbGxhclZNLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNjkwLDExICs2OTAsNiBAQCBKU0NfREVGSU5FX0NVU1RPTV9H
RVRURVIocnVudGltZUFycmF5TGVuCiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc051bWJl
cih0aGlzT2JqZWN0LT5nZXRMZW5ndGgoKSkpOwogfQogCi1zdGF0aWMgY29uc3Qgc3RydWN0IENv
bXBhY3RIYXNoSW5kZXggc3RhdGljQ3VzdG9tQWNjZXNzb3JUYWJsZUluZGV4WzJdID0gewotICAg
IHsgMCwgLTEgfSwKLSAgICB7IC0xLCAtMSB9LAotfTsKLQogc3RhdGljIEpTQ19ERUNMQVJFX0NV
U1RPTV9HRVRURVIodGVzdFN0YXRpY0FjY2Vzc29yR2V0dGVyKTsKIHN0YXRpYyBKU0NfREVDTEFS
RV9DVVNUT01fU0VUVEVSKHRlc3RTdGF0aWNBY2Nlc3NvclB1dHRlcik7CiAKQEAgLTcxOSwxOSAr
NzE0LDM0IEBAIEpTQ19ERUZJTkVfQ1VTVE9NX1NFVFRFUih0ZXN0U3RhdGljQWNjZXMKICAgICBW
TSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhS
T1dfU0NPUEUodm0pOwogICAgIAotICAgIEpTT2JqZWN0KiB0aGlzT2JqZWN0ID0ganNEeW5hbWlj
Q2FzdDxKU09iamVjdCo+KHZtLCBKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7Ci0gICAgaWYg
KCF0aGlzT2JqZWN0KQotICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihnbG9iYWxPYmpl
Y3QsIHNjb3BlKTsKKyAgICBKU1ZhbHVlIHJlY2VpdmVyID0gSlNWYWx1ZTo6ZGVjb2RlKHRoaXNW
YWx1ZSk7CisgICAgSlNPYmplY3QqIHRoaXNPYmplY3QgPSByZWNlaXZlci5pc09iamVjdCgpID8g
YXNPYmplY3QocmVjZWl2ZXIpIDogcmVjZWl2ZXIuc3ludGhlc2l6ZVByb3RvdHlwZShnbG9iYWxP
YmplY3QpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGZhbHNlKTsKKyAgICBSRUxF
QVNFX0FTU0VSVCh0aGlzT2JqZWN0KTsKIAogICAgIHJldHVybiB0aGlzT2JqZWN0LT5wdXREaXJl
Y3Qodm0sIFByb3BlcnR5TmFtZShJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAidGVzdEZpZWxk
IikpLCBKU1ZhbHVlOjpkZWNvZGUodmFsdWUpKTsKIH0KIAotc3RhdGljIGNvbnN0IHN0cnVjdCBI
YXNoVGFibGVWYWx1ZSBzdGF0aWNDdXN0b21BY2Nlc3NvclRhYmxlVmFsdWVzWzFdID0geworc3Rh
dGljIGNvbnN0IHN0cnVjdCBDb21wYWN0SGFzaEluZGV4IHN0YXRpY0N1c3RvbUFjY2Vzc29yVGFi
bGVJbmRleFs5XSA9IHsKKyAgICB7IC0xLCAtMSB9LAorICAgIHsgLTEsIC0xIH0sCisgICAgeyAy
LCAtMSB9LAorICAgIHsgLTEsIC0xIH0sCisgICAgeyAwLCA4IH0sCisgICAgeyAtMSwgLTEgfSwK
KyAgICB7IC0xLCAtMSB9LAorICAgIHsgLTEsIC0xIH0sCisgICAgeyAxLCAtMSB9LAorfTsKKwor
c3RhdGljIGNvbnN0IHN0cnVjdCBIYXNoVGFibGVWYWx1ZSBzdGF0aWNDdXN0b21BY2Nlc3NvclRh
YmxlVmFsdWVzWzNdID0gewogICAgIHsgInRlc3RTdGF0aWNBY2Nlc3NvciIsIHN0YXRpY19jYXN0
PHVuc2lnbmVkPihQcm9wZXJ0eUF0dHJpYnV0ZTo6Q3VzdG9tQWNjZXNzb3IpLCBOb0ludHJpbnNp
YywgeyAoaW50cHRyX3Qpc3RhdGljX2Nhc3Q8UHJvcGVydHlTbG90OjpHZXRWYWx1ZUZ1bmM+KHRl
c3RTdGF0aWNBY2Nlc3NvckdldHRlciksIChpbnRwdHJfdClzdGF0aWNfY2FzdDxQdXRQcm9wZXJ0
eVNsb3Q6OlB1dFZhbHVlRnVuYz4odGVzdFN0YXRpY0FjY2Vzc29yUHV0dGVyKSB9IH0sCisgICAg
eyAidGVzdFN0YXRpY0FjY2Vzc29yRG9udEVudW0iLCBQcm9wZXJ0eUF0dHJpYnV0ZTo6Q3VzdG9t
QWNjZXNzb3IgfCBQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0sIE5vSW50cmluc2ljLCB7IChp
bnRwdHJfdClzdGF0aWNfY2FzdDxHZXRWYWx1ZUZ1bmM+KHRlc3RTdGF0aWNBY2Nlc3NvckdldHRl
ciksIChpbnRwdHJfdClzdGF0aWNfY2FzdDxQdXRWYWx1ZUZ1bmM+KHRlc3RTdGF0aWNBY2Nlc3Nv
clB1dHRlcikgfSB9LAorICAgIHsgInRlc3RTdGF0aWNBY2Nlc3NvclJlYWRPbmx5IiwgUHJvcGVy
dHlBdHRyaWJ1dGU6OkN1c3RvbUFjY2Vzc29yIHwgUHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVt
IHwgUHJvcGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5LCBOb0ludHJpbnNpYywgeyAoaW50cHRyX3Qp
c3RhdGljX2Nhc3Q8R2V0VmFsdWVGdW5jPih0ZXN0U3RhdGljQWNjZXNzb3JHZXR0ZXIpLCAwIH0g
fSwKIH07CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgSGFzaFRhYmxlIHN0YXRpY0N1c3RvbUFjY2Vz
c29yVGFibGUgPQotICAgIHsgMSwgMSwgdHJ1ZSwgbnVsbHB0ciwgc3RhdGljQ3VzdG9tQWNjZXNz
b3JUYWJsZVZhbHVlcywgc3RhdGljQ3VzdG9tQWNjZXNzb3JUYWJsZUluZGV4IH07CisgICAgeyAz
LCA3LCB0cnVlLCBudWxscHRyLCBzdGF0aWNDdXN0b21BY2Nlc3NvclRhYmxlVmFsdWVzLCBzdGF0
aWNDdXN0b21BY2Nlc3NvclRhYmxlSW5kZXggfTsKIAogY2xhc3MgU3RhdGljQ3VzdG9tQWNjZXNz
b3IgOiBwdWJsaWMgSlNOb25GaW5hbE9iamVjdCB7CiAgICAgdXNpbmcgQmFzZSA9IEpTTm9uRmlu
YWxPYmplY3Q7CkBAIC03OTgsMTcgKzgwOCwyNSBAQCBKU0NfREVGSU5FX0NVU1RPTV9TRVRURVIo
dGVzdFN0YXRpY1ZhbHVlCiAgICAgcmV0dXJuIHRoaXNPYmplY3QtPnB1dERpcmVjdCh2bSwgUHJv
cGVydHlOYW1lKElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJ0ZXN0U3RhdGljVmFsdWUiKSks
IEpTVmFsdWU6OmRlY29kZSh2YWx1ZSkpOwogfQogCi1zdGF0aWMgY29uc3Qgc3RydWN0IENvbXBh
Y3RIYXNoSW5kZXggc3RhdGljQ3VzdG9tVmFsdWVUYWJsZUluZGV4WzJdID0geworc3RhdGljIGNv
bnN0IHN0cnVjdCBDb21wYWN0SGFzaEluZGV4IHN0YXRpY0N1c3RvbVZhbHVlVGFibGVJbmRleFs4
XSA9IHsKKyAgICB7IDEsIC0xIH0sCisgICAgeyAtMSwgLTEgfSwKKyAgICB7IC0xLCAtMSB9LAor
ICAgIHsgLTEsIC0xIH0sCisgICAgeyAtMSwgLTEgfSwKKyAgICB7IDIsIC0xIH0sCiAgICAgeyAw
LCAtMSB9LAogICAgIHsgLTEsIC0xIH0sCiB9OwogCi1zdGF0aWMgY29uc3Qgc3RydWN0IEhhc2hU
YWJsZVZhbHVlIHN0YXRpY0N1c3RvbVZhbHVlVGFibGVWYWx1ZXNbMV0gPSB7Ci0gICAgeyAidGVz
dFN0YXRpY1ZhbHVlIiwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KFByb3BlcnR5QXR0cmlidXRlOjpD
dXN0b21BY2Nlc3NvciksIE5vSW50cmluc2ljLCB7IChpbnRwdHJfdClzdGF0aWNfY2FzdDxQcm9w
ZXJ0eVNsb3Q6OkdldFZhbHVlRnVuYz4odGVzdFN0YXRpY1ZhbHVlR2V0dGVyKSwgKGludHB0cl90
KXN0YXRpY19jYXN0PFB1dFByb3BlcnR5U2xvdDo6UHV0VmFsdWVGdW5jPih0ZXN0U3RhdGljVmFs
dWVQdXR0ZXIpIH0gfSwKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgSGFzaFRhYmxlVmFsdWUgc3RhdGlj
Q3VzdG9tVmFsdWVUYWJsZVZhbHVlc1szXSA9IHsKKyAgICB7ICJ0ZXN0U3RhdGljVmFsdWUiLCBz
dGF0aWNfY2FzdDx1bnNpZ25lZD4oUHJvcGVydHlBdHRyaWJ1dGU6OkN1c3RvbVZhbHVlKSwgTm9J
bnRyaW5zaWMsIHsgKGludHB0cl90KXN0YXRpY19jYXN0PEdldFZhbHVlRnVuYz4odGVzdFN0YXRp
Y1ZhbHVlR2V0dGVyKSwgKGludHB0cl90KXN0YXRpY19jYXN0PFB1dFZhbHVlRnVuYz4odGVzdFN0
YXRpY1ZhbHVlUHV0dGVyKSB9IH0sCisgICAgeyAidGVzdFN0YXRpY1ZhbHVlTm9TZXR0ZXIiLCBQ
cm9wZXJ0eUF0dHJpYnV0ZTo6Q3VzdG9tVmFsdWUgfCBQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVu
dW0sIE5vSW50cmluc2ljLCB7IChpbnRwdHJfdClzdGF0aWNfY2FzdDxHZXRWYWx1ZUZ1bmM+KHRl
c3RTdGF0aWNWYWx1ZUdldHRlciksIDAgfSB9LAorICAgIHsgInRlc3RTdGF0aWNWYWx1ZVJlYWRP
bmx5IiwgUHJvcGVydHlBdHRyaWJ1dGU6OkN1c3RvbVZhbHVlIHwgUHJvcGVydHlBdHRyaWJ1dGU6
OkRvbnRFbnVtIHwgUHJvcGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5LCBOb0ludHJpbnNpYywgeyAo
aW50cHRyX3Qpc3RhdGljX2Nhc3Q8R2V0VmFsdWVGdW5jPih0ZXN0U3RhdGljVmFsdWVHZXR0ZXIp
LCAwIH0gfSwKIH07CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgSGFzaFRhYmxlIHN0YXRpY0N1c3Rv
bVZhbHVlVGFibGUgPQotICAgIHsgMSwgMSwgdHJ1ZSwgbnVsbHB0ciwgc3RhdGljQ3VzdG9tVmFs
dWVUYWJsZVZhbHVlcywgc3RhdGljQ3VzdG9tVmFsdWVUYWJsZUluZGV4IH07CisgICAgeyAzLCA3
LCB0cnVlLCBudWxscHRyLCBzdGF0aWNDdXN0b21WYWx1ZVRhYmxlVmFsdWVzLCBzdGF0aWNDdXN0
b21WYWx1ZVRhYmxlSW5kZXggfTsKIAogY2xhc3MgU3RhdGljQ3VzdG9tVmFsdWUgOiBwdWJsaWMg
SlNOb25GaW5hbE9iamVjdCB7CiAgICAgdXNpbmcgQmFzZSA9IEpTTm9uRmluYWxPYmplY3Q7CkBA
IC04NDYsNiArODY0LDcgQEAgcHVibGljOgogCiBjbGFzcyBPYmplY3REb2luZ1NpZGVFZmZlY3RQ
dXRXaXRob3V0Q29ycmVjdFNsb3RTdGF0dXMgOiBwdWJsaWMgSlNOb25GaW5hbE9iamVjdCB7CiAg
ICAgdXNpbmcgQmFzZSA9IEpTTm9uRmluYWxPYmplY3Q7CisgICAgc3RhdGljIGNvbnN0ZXhwciB1
bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwgT3ZlcnJpZGVz
UHV0OwogcHVibGljOgogICAgIHRlbXBsYXRlPHR5cGVuYW1lIENlbGxUeXBlLCBTdWJzcGFjZUFj
Y2Vzcz4KICAgICBzdGF0aWMgQ29tcGxldGVTdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQpJ
bmRleDogU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjc4NTM5KQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjkgQEAKKzIwMjEtMDYtMDYgIEFsZXhleSBT
aHZheWthICA8c2h2YWlrYWxlc2hAZ21haWwuY29tPgorCisgICAgICAgIFJlLWxhbmQgcjI3NjU5
MiB3aXRoIGEgZml4IGZvciBwdXQoKSBvdmVycmlkZSBpbiBwcm90b3R5cGUgY2hhaW4gb2YgYSBK
U1Byb3h5CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0y
MjYxODUKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBU
ZXN0czoganMvZG9tL3NjcmlwdC10ZXN0cy9yZWZsZWN0LXNldC1vbnRvLWRvbS5qcworICAgICAg
ICAgICAgICAgaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9XZWJJREwvZWNtYXNjcmlw
dC1iaW5kaW5nL2ludGVyZmFjZS1vYmplY3Qtc2V0LXJlY2VpdmVyLmh0bWwKKyAgICAgICAgICAg
ICAgIGh0dHAvdGVzdHMvc2VjdXJpdHkvY3Jvc3MtZnJhbWUtYWNjZXNzLW9iamVjdC1nZXRQcm90
b3R5cGVPZi1pbi1wdXQuaHRtbAorCisgICAgICAgICogYmluZGluZ3MvanMvSlNET01XaW5kb3dD
dXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNET01XaW5kb3c6OnB1dCk6CisgICAgICAg
IChXZWJDb3JlOjpKU0RPTVdpbmRvdzo6ZG9QdXRQcm9wZXJ0eVNlY3VyaXR5Q2hlY2spOiBEZWxl
dGVkLgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTTG9jYXRpb25DdXN0b20uY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6SlNMb2NhdGlvbjo6ZG9QdXRQcm9wZXJ0eVNlY3VyaXR5Q2hlY2spOiBEZWxl
dGVkLgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTUmVtb3RlRE9NV2luZG93Q3VzdG9tLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkpTUmVtb3RlRE9NV2luZG93OjpwdXQpOgorICAgICAgICAqIGJp
bmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckpTLnBtOgorICAgICAgICAoR2VuZXJhdGVQdXQp
OgorICAgICAgICAoR2VuZXJhdGVIZWFkZXIpOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMv
dGVzdC9KUy8qOiBVcGRhdGVkLgorICAgICAgICAqIGJyaWRnZS9vYmpjL29iamNfcnVudGltZS5o
OgorICAgICAgICAqIGJyaWRnZS9ydW50aW1lX2FycmF5Lmg6CisgICAgICAgICogYnJpZGdlL3J1
bnRpbWVfb2JqZWN0Lmg6CisKIDIwMjEtMDYtMDYgIEplYW4tWXZlcyBBdmVuYXJkICA8anlhQGFw
cGxlLmNvbT4KIAogICAgICAgICBbR1BVUF1bTVNFXSBRdW90YUV4Y2VlZGVkRXJyb3IgRXhjZXB0
aW9uIG5vdCB0aHJvd24gZXZlbiBpZiB0aGUgc3VtIG9mIHRvdGFsVHJhY2tCdWZmZXJTaXplIGFu
ZCBhcHBlbmRCdWZmZXIgc2l6ZSBleGNlZWRzIG1heGltdW1CdWZmZXJTaXplCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTVdpbmRvd0N1c3RvbS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01XaW5kb3dDdXN0b20uY3BwCShyZXZp
c2lvbiAyNzg1MzkpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTVdpbmRvd0N1
c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI0OCwyMyArMjQ4LDYgQEAgYm9vbCBKU0RPTVdp
bmRvdzo6Z2V0T3duUHJvcGVydHlTbG90QnlJbgogICAgIHJldHVybiBCYXNlOjpnZXRPd25Qcm9w
ZXJ0eVNsb3RCeUluZGV4KHRoaXNPYmplY3QsIGxleGljYWxHbG9iYWxPYmplY3QsIGluZGV4LCBz
bG90KTsKIH0KIAotdm9pZCBKU0RPTVdpbmRvdzo6ZG9QdXRQcm9wZXJ0eVNlY3VyaXR5Q2hlY2so
SlNPYmplY3QqIGNlbGwsIEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBQcm9w
ZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBQdXRQcm9wZXJ0eVNsb3QmKQotewotICAgIFZNJiB2bSA9
IGxleGljYWxHbG9iYWxPYmplY3QtPnZtKCk7Ci0gICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhS
T1dfU0NPUEUodm0pOwotCi0gICAgYXV0byogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0RPTVdpbmRv
dyo+KGNlbGwpOwotCi0gICAgU3RyaW5nIGVycm9yTWVzc2FnZTsKLSAgICBpZiAoIUJpbmRpbmdT
ZWN1cml0eTo6c2hvdWxkQWxsb3dBY2Nlc3NUb0RPTVdpbmRvdygqbGV4aWNhbEdsb2JhbE9iamVj
dCwgdGhpc09iamVjdC0+d3JhcHBlZCgpLCBlcnJvck1lc3NhZ2UpKSB7Ci0gICAgICAgIC8vIFdl
IG9ubHkgYWxsb3cgc2V0dGluZyAibG9jYXRpb24iIGF0dHJpYnV0ZSBjcm9zcy1vcmlnaW4uCi0g
ICAgICAgIGlmIChwcm9wZXJ0eU5hbWUgPT0gc3RhdGljX2Nhc3Q8SlNWTUNsaWVudERhdGEqPih2
bS5jbGllbnREYXRhKS0+YnVpbHRpbk5hbWVzKCkubG9jYXRpb25QdWJsaWNOYW1lKCkpCi0gICAg
ICAgICAgICByZXR1cm47Ci0gICAgICAgIHRocm93U2VjdXJpdHlFcnJvcigqbGV4aWNhbEdsb2Jh
bE9iamVjdCwgc2NvcGUsIGVycm9yTWVzc2FnZSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci19
Ci0KIGJvb2wgSlNET01XaW5kb3c6OnB1dChKU0NlbGwqIGNlbGwsIEpTR2xvYmFsT2JqZWN0KiBs
ZXhpY2FsR2xvYmFsT2JqZWN0LCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBKU1ZhbHVlIHZh
bHVlLCBQdXRQcm9wZXJ0eVNsb3QmIHNsb3QpCiB7CiAgICAgVk0mIHZtID0gbGV4aWNhbEdsb2Jh
bE9iamVjdC0+dm0oKTsKQEAgLTI3MiwxNyArMjU1LDEwIEBAIGJvb2wgSlNET01XaW5kb3c6OnB1
dChKU0NlbGwqIGNlbGwsIEpTR2wKIAogICAgIGF1dG8qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNE
T01XaW5kb3cqPihjZWxsKTsKIAotICAgIFN0cmluZyBlcnJvck1lc3NhZ2U7Ci0gICAgaWYgKCFC
aW5kaW5nU2VjdXJpdHk6OnNob3VsZEFsbG93QWNjZXNzVG9ET01XaW5kb3coKmxleGljYWxHbG9i
YWxPYmplY3QsIHRoaXNPYmplY3QtPndyYXBwZWQoKSwgZXJyb3JNZXNzYWdlKSkgeworICAgIGlm
IChwcm9wZXJ0eU5hbWUgIT0gc3RhdGljX2Nhc3Q8SlNWTUNsaWVudERhdGEqPih2bS5jbGllbnRE
YXRhKS0+YnVpbHRpbk5hbWVzKCkubG9jYXRpb25QdWJsaWNOYW1lKCkpIHsKICAgICAgICAgLy8g
V2Ugb25seSBhbGxvdyBzZXR0aW5nICJsb2NhdGlvbiIgYXR0cmlidXRlIGNyb3NzLW9yaWdpbi4K
LSAgICAgICAgaWYgKHByb3BlcnR5TmFtZSA9PSBzdGF0aWNfY2FzdDxKU1ZNQ2xpZW50RGF0YSo+
KHZtLmNsaWVudERhdGEpLT5idWlsdGluTmFtZXMoKS5sb2NhdGlvblB1YmxpY05hbWUoKSkgewot
ICAgICAgICAgICAgYm9vbCBwdXRSZXN1bHQgPSBmYWxzZTsKLSAgICAgICAgICAgIGlmIChsb29r
dXBQdXQobGV4aWNhbEdsb2JhbE9iamVjdCwgcHJvcGVydHlOYW1lLCB0aGlzT2JqZWN0LCB2YWx1
ZSwgKnNfaW5mby5zdGF0aWNQcm9wSGFzaFRhYmxlLCBzbG90LCBwdXRSZXN1bHQpKQotICAgICAg
ICAgICAgICAgIHJldHVybiBwdXRSZXN1bHQ7CisgICAgICAgIGlmICghQmluZGluZ1NlY3VyaXR5
OjpzaG91bGRBbGxvd0FjY2Vzc1RvRE9NV2luZG93KGxleGljYWxHbG9iYWxPYmplY3QsIHRoaXNP
YmplY3QtPndyYXBwZWQoKSwgVGhyb3dTZWN1cml0eUVycm9yKSkKICAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICAgICAgfQotICAgICAgICB0aHJvd1NlY3VyaXR5RXJyb3IoKmxleGljYWxH
bG9iYWxPYmplY3QsIHNjb3BlLCBlcnJvck1lc3NhZ2UpOwotICAgICAgICByZXR1cm4gZmFsc2U7
CiAgICAgfQogCiAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBCYXNlOjpwdXQodGhpc09i
amVjdCwgbGV4aWNhbEdsb2JhbE9iamVjdCwgcHJvcGVydHlOYW1lLCB2YWx1ZSwgc2xvdCkpOwpJ
bmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNMb2NhdGlvbkN1c3RvbS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNMb2NhdGlvbkN1c3RvbS5j
cHAJKHJldmlzaW9uIDI3ODUzOSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTG9j
YXRpb25DdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDgsMjMgKzEwOCw2IEBAIGJvb2wg
SlNMb2NhdGlvbjo6Z2V0T3duUHJvcGVydHlTbG90QnlJbmQKICAgICBSRUxFQVNFX0FORF9SRVRV
Uk4oc2NvcGUsIEpTT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4KG9iamVjdCwgbGV4
aWNhbEdsb2JhbE9iamVjdCwgaW5kZXgsIHNsb3QpKTsKIH0KIAotdm9pZCBKU0xvY2F0aW9uOjpk
b1B1dFByb3BlcnR5U2VjdXJpdHlDaGVjayhKU09iamVjdCogb2JqZWN0LCBKU0dsb2JhbE9iamVj
dCogbGV4aWNhbEdsb2JhbE9iamVjdCwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgUHV0UHJv
cGVydHlTbG90JikKLXsKLSAgICBhdXRvKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTTG9jYXRpb24q
PihvYmplY3QpOwotICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5m
bygpKTsKLQotICAgIFZNJiB2bSA9IGxleGljYWxHbG9iYWxPYmplY3QtPnZtKCk7Ci0KLSAgICAv
LyBBbHdheXMgYWxsb3cgYXNzaWduaW5nIHRvIHRoZSB3aG9sZSBsb2NhdGlvbi4KLSAgICAvLyBI
b3dldmVyLCBhbGxsb3dpbmcgYXNzaWduaW5nIG9mIHBpZWNlcyBtaWdodCBpbmFkdmVydGVudGx5
IGRpc2Nsb3NlIHBhcnRzIG9mIHRoZSBvcmlnaW5hbCBsb2NhdGlvbi4KLSAgICAvLyBTbyBmYWxs
IHRocm91Z2ggdG8gdGhlIGFjY2VzcyBjaGVjayBmb3IgdGhvc2UuCi0gICAgaWYgKHByb3BlcnR5
TmFtZSA9PSBzdGF0aWNfY2FzdDxKU1ZNQ2xpZW50RGF0YSo+KHZtLmNsaWVudERhdGEpLT5idWls
dGluTmFtZXMoKS5ocmVmUHVibGljTmFtZSgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICAvLyBC
bG9jayBhY2Nlc3MgYW5kIHRocm93IGlmIHRoZXJlIGlzIGEgc2VjdXJpdHkgZXJyb3IuCi0gICAg
QmluZGluZ1NlY3VyaXR5OjpzaG91bGRBbGxvd0FjY2Vzc1RvRE9NV2luZG93KGxleGljYWxHbG9i
YWxPYmplY3QsIHRoaXNPYmplY3QtPndyYXBwZWQoKS53aW5kb3coKSwgVGhyb3dTZWN1cml0eUVy
cm9yKTsKLX0KLQogYm9vbCBKU0xvY2F0aW9uOjpwdXQoSlNDZWxsKiBjZWxsLCBKU0dsb2JhbE9i
amVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgSlNW
YWx1ZSB2YWx1ZSwgUHV0UHJvcGVydHlTbG90JiBwdXRQcm9wZXJ0eVNsb3QpCiB7CiAgICAgVk0m
IHZtID0gbGV4aWNhbEdsb2JhbE9iamVjdC0+dm0oKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTUmVtb3RlRE9NV2luZG93Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1JlbW90ZURPTVdpbmRvd0N1c3RvbS5jcHAJKHJldmlz
aW9uIDI3ODUzOSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTUmVtb3RlRE9NV2lu
ZG93Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjgsMTEgKzY4LDEyIEBAIGJvb2wgSlNS
ZW1vdGVET01XaW5kb3c6OnB1dChKU0NlbGwqIGNlbGwKIAogICAgIC8vIFdlIG9ubHkgYWxsb3cg
c2V0dGluZyAibG9jYXRpb24iIGF0dHJpYnV0ZSBjcm9zcy1vcmlnaW4uCiAgICAgaWYgKHByb3Bl
cnR5TmFtZSA9PSBzdGF0aWNfY2FzdDxKU1ZNQ2xpZW50RGF0YSo+KHZtLmNsaWVudERhdGEpLT5i
dWlsdGluTmFtZXMoKS5sb2NhdGlvblB1YmxpY05hbWUoKSkgewotICAgICAgICBib29sIHB1dFJl
c3VsdCA9IGZhbHNlOwotICAgICAgICBpZiAobG9va3VwUHV0KGxleGljYWxHbG9iYWxPYmplY3Qs
IHByb3BlcnR5TmFtZSwgdGhpc09iamVjdCwgdmFsdWUsICpzX2luZm8uc3RhdGljUHJvcEhhc2hU
YWJsZSwgc2xvdCwgcHV0UmVzdWx0KSkKLSAgICAgICAgICAgIHJldHVybiBwdXRSZXN1bHQ7Ci0g
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgYXV0byogc2V0dGVyID0gc19pbmZvLnN0YXRp
Y1Byb3BIYXNoVGFibGUtPmVudHJ5KHByb3BlcnR5TmFtZSktPnByb3BlcnR5UHV0dGVyKCk7Cisg
ICAgICAgIHNjb3BlLnJlbGVhc2UoKTsKKyAgICAgICAgc2V0dGVyKGxleGljYWxHbG9iYWxPYmpl
Y3QsIEpTVmFsdWU6OmVuY29kZShzbG90LnRoaXNWYWx1ZSgpKSwgSlNWYWx1ZTo6ZW5jb2RlKHZh
bHVlKSwgcHJvcGVydHlOYW1lKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQorCiAgICAg
dGhyb3dTZWN1cml0eUVycm9yKCpsZXhpY2FsR2xvYmFsT2JqZWN0LCBzY29wZSwgZXJyb3JNZXNz
YWdlKTsKICAgICByZXR1cm4gZmFsc2U7CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5wbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5wbQkocmV2aXNpb24gMjc4NTM5KQor
KysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMucG0JKHdv
cmtpbmcgY29weSkKQEAgLTExNzMsNiArMTE3Myw4IEBAIHN1YiBHZW5lcmF0ZVB1dAogICAgIHB1
c2goQCRvdXRwdXRBcnJheSwgIntcbiIpOwogICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICBh
dXRvKiB0aGlzT2JqZWN0ID0ganNDYXN0PCR7Y2xhc3NOYW1lfSo+KGNlbGwpO1xuIik7CiAgICAg
cHVzaChAJG91dHB1dEFycmF5LCAiICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09i
amVjdCwgaW5mbygpKTtcblxuIik7CisgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgIGlmIChV
TkxJS0VMWSh0aGlzT2JqZWN0ICE9IHB1dFByb3BlcnR5U2xvdC50aGlzVmFsdWUoKSkpXG4iKTsK
KyAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAgICAgIHJldHVybiBKU09iamVjdDo6cHV0KHRo
aXNPYmplY3QsIGxleGljYWxHbG9iYWxPYmplY3QsIHByb3BlcnR5TmFtZSwgdmFsdWUsIHB1dFBy
b3BlcnR5U2xvdCk7XG4iKTsKIAogICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICBhdXRvIHRo
cm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKGxleGljYWxHbG9iYWxPYmplY3QtPnZtKCkp
O1xuXG4iKTsKIApAQCAtMjk0OSwxMSArMjk1MSw2IEBAIHN1YiBHZW5lcmF0ZUhlYWRlcgogICAg
ICAgICAkc3RydWN0dXJlRmxhZ3N7IkpTQzo6SW50ZXJjZXB0c0dldE93blByb3BlcnR5U2xvdEJ5
SW5kZXhFdmVuV2hlbkxlbmd0aElzTm90WmVybyJ9ID0gMTsKICAgICB9CiAKLSAgICBpZiAoJGlu
dGVyZmFjZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57Q2hlY2tTZWN1cml0eX0pIHsKLSAgICAgICAg
cHVzaChAaGVhZGVyQ29udGVudCwgIiAgICBzdGF0aWMgdm9pZCBkb1B1dFByb3BlcnR5U2VjdXJp
dHlDaGVjayhKU0M6OkpTT2JqZWN0KiwgSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6UHJvcGVy
dHlOYW1lLCBKU0M6OlB1dFByb3BlcnR5U2xvdCYpO1xuIik7Ci0gICAgICAgICRzdHJ1Y3R1cmVG
bGFnc3siSlNDOjpIYXNQdXRQcm9wZXJ0eVNlY3VyaXR5Q2hlY2sifSA9IDE7Ci0gICAgfQotCiAg
ICAgaWYgKCRpbnRlcmZhY2UtPmV4dGVuZGVkQXR0cmlidXRlcy0+e1BsdWdpbn0gfHwgR2V0TmFt
ZWRTZXR0ZXJPcGVyYXRpb24oJGludGVyZmFjZSkpIHsKICAgICAgICAgJHN0cnVjdHVyZUZsYWdz
eyJKU0M6OlByb2hpYml0c1Byb3BlcnR5Q2FjaGluZyJ9ID0gMTsKICAgICB9CkBAIC0yOTY2LDYg
KzI5NjMsNyBAQCBzdWIgR2VuZXJhdGVIZWFkZXIKICAgICBpZiAoSW5zdGFuY2VPdmVycmlkZXNQ
dXQoJGludGVyZmFjZSkpIHsKICAgICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIiAgICBzdGF0
aWMgYm9vbCBwdXQoSlNDOjpKU0NlbGwqLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpQcm9w
ZXJ0eU5hbWUsIEpTQzo6SlNWYWx1ZSwgSlNDOjpQdXRQcm9wZXJ0eVNsb3QmKTtcbiIpOwogICAg
ICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiICAgIHN0YXRpYyBib29sIHB1dEJ5SW5kZXgoSlND
OjpKU0NlbGwqLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiwgdW5zaWduZWQgcHJvcGVydHlOYW1lLCBK
U0M6OkpTVmFsdWUsIGJvb2wgc2hvdWxkVGhyb3cpO1xuIik7CisgICAgICAgICRzdHJ1Y3R1cmVG
bGFnc3siSlNDOjpPdmVycmlkZXNQdXQifSA9IDE7CiAgICAgfQogICAgIAogICAgIGlmIChJbnN0
YW5jZU92ZXJyaWRlc0RlZmluZU93blByb3BlcnR5KCRpbnRlcmZhY2UpKSB7CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0RG9tYWluU2VjdXJpdHku
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMv
SlNUZXN0RG9tYWluU2VjdXJpdHkuaAkocmV2aXNpb24gMjc4NTM5KQorKysgU291cmNlL1dlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdERvbWFpblNlY3VyaXR5LmgJKHdvcmtp
bmcgY29weSkKQEAgLTM5LDcgKzM5LDYgQEAgcHVibGljOgogICAgIHN0YXRpYyBKU0M6OkpTT2Jq
ZWN0KiBjcmVhdGVQcm90b3R5cGUoSlNDOjpWTSYsIEpTRE9NR2xvYmFsT2JqZWN0Jik7CiAgICAg
c3RhdGljIEpTQzo6SlNPYmplY3QqIHByb3RvdHlwZShKU0M6OlZNJiwgSlNET01HbG9iYWxPYmpl
Y3QmKTsKICAgICBzdGF0aWMgVGVzdERvbWFpblNlY3VyaXR5KiB0b1dyYXBwZWQoSlNDOjpWTSYs
IEpTQzo6SlNWYWx1ZSk7Ci0gICAgc3RhdGljIHZvaWQgZG9QdXRQcm9wZXJ0eVNlY3VyaXR5Q2hl
Y2soSlNDOjpKU09iamVjdCosIEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OlByb3BlcnR5TmFt
ZSwgSlNDOjpQdXRQcm9wZXJ0eVNsb3QmKTsKICAgICBzdGF0aWMgdm9pZCBkZXN0cm95KEpTQzo6
SlNDZWxsKik7CiAKICAgICBERUNMQVJFX0lORk87CkBAIC01OSw3ICs1OCw3IEBAIHB1YmxpYzoK
ICAgICBzdGF0aWMgSlNDOjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3JJbXBsKEpTQzo6Vk0mIHZt
KTsKICAgICBzdGF0aWMgdm9pZCBhbmFseXplSGVhcChKU0NlbGwqLCBKU0M6OkhlYXBBbmFseXpl
ciYpOwogcHVibGljOgotICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgU3RydWN0dXJlRmxh
Z3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8IEpTQzo6SGFzUHV0UHJvcGVydHlTZWN1cml0eUNo
ZWNrIHwgSlNDOjpIYXNTdGF0aWNQcm9wZXJ0eVRhYmxlOworICAgIHN0YXRpYyBjb25zdGV4cHIg
dW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8IEpTQzo6SGFz
U3RhdGljUHJvcGVydHlUYWJsZTsKIHByb3RlY3RlZDoKICAgICBKU1Rlc3REb21haW5TZWN1cml0
eShKU0M6OlN0cnVjdHVyZSosIEpTRE9NR2xvYmFsT2JqZWN0JiwgUmVmPFRlc3REb21haW5TZWN1
cml0eT4mJik7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9K
Uy9KU1Rlc3RJbmRleGVkU2V0dGVyTm9JZGVudGlmaWVyLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0SW5kZXhlZFNldHRlck5v
SWRlbnRpZmllci5jcHAJKHJldmlzaW9uIDI3ODUzOSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RJbmRleGVkU2V0dGVyTm9JZGVudGlmaWVyLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMTk5LDYgKzE5OSw4IEBAIGJvb2wgSlNUZXN0SW5kZXhlZFNldHRl
ck5vSWRlbnRpZmllcjo6cHUKICAgICBhdXRvKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTVGVzdElu
ZGV4ZWRTZXR0ZXJOb0lkZW50aWZpZXIqPihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lO
SEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CiAKKyAgICBpZiAoVU5MSUtFTFkodGhpc09iamVj
dCAhPSBwdXRQcm9wZXJ0eVNsb3QudGhpc1ZhbHVlKCkpKQorICAgICAgICByZXR1cm4gSlNPYmpl
Y3Q6OnB1dCh0aGlzT2JqZWN0LCBsZXhpY2FsR2xvYmFsT2JqZWN0LCBwcm9wZXJ0eU5hbWUsIHZh
bHVlLCBwdXRQcm9wZXJ0eVNsb3QpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhS
T1dfU0NPUEUobGV4aWNhbEdsb2JhbE9iamVjdC0+dm0oKSk7CiAKICAgICBpZiAoYXV0byBpbmRl
eCA9IHBhcnNlSW5kZXgocHJvcGVydHlOYW1lKSkgewpJbmRleDogU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEluZGV4ZWRTZXR0ZXJOb0lkZW50aWZpZXIuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNU
ZXN0SW5kZXhlZFNldHRlck5vSWRlbnRpZmllci5oCShyZXZpc2lvbiAyNzg1MzkpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0SW5kZXhlZFNldHRlck5v
SWRlbnRpZmllci5oCSh3b3JraW5nIGNvcHkpCkBAIC02NCw3ICs2NCw3IEBAIHB1YmxpYzoKICAg
ICBzdGF0aWMgSlNDOjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3JJbXBsKEpTQzo6Vk0mIHZtKTsK
ICAgICBzdGF0aWMgdm9pZCBhbmFseXplSGVhcChKU0NlbGwqLCBKU0M6OkhlYXBBbmFseXplciYp
OwogcHVibGljOgotICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3Mg
PSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8IEpTQzo6SW50ZXJjZXB0c0dldE93blByb3BlcnR5U2xv
dEJ5SW5kZXhFdmVuV2hlbkxlbmd0aElzTm90WmVybyB8IEpTQzo6T3ZlcnJpZGVzR2V0T3duUHJv
cGVydHlOYW1lcyB8IEpTQzo6T3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90OworICAgIHN0YXRp
YyBjb25zdGV4cHIgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFn
cyB8IEpTQzo6SW50ZXJjZXB0c0dldE93blByb3BlcnR5U2xvdEJ5SW5kZXhFdmVuV2hlbkxlbmd0
aElzTm90WmVybyB8IEpTQzo6T3ZlcnJpZGVzR2V0T3duUHJvcGVydHlOYW1lcyB8IEpTQzo6T3Zl
cnJpZGVzR2V0T3duUHJvcGVydHlTbG90IHwgSlNDOjpPdmVycmlkZXNQdXQ7CiBwcm90ZWN0ZWQ6
CiAgICAgSlNUZXN0SW5kZXhlZFNldHRlck5vSWRlbnRpZmllcihKU0M6OlN0cnVjdHVyZSosIEpT
RE9NR2xvYmFsT2JqZWN0JiwgUmVmPFRlc3RJbmRleGVkU2V0dGVyTm9JZGVudGlmaWVyPiYmKTsK
IApJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdElu
ZGV4ZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEluZGV4ZWRTZXR0ZXJUaHJvd2lu
Z0V4Y2VwdGlvbi5jcHAJKHJldmlzaW9uIDI3ODUzOSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RJbmRleGVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb24u
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xOTksNiArMTk5LDggQEAgYm9vbCBKU1Rlc3RJbmRleGVk
U2V0dGVyVGhyb3dpbmdFeGNlcHRpbwogICAgIGF1dG8qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNU
ZXN0SW5kZXhlZFNldHRlclRocm93aW5nRXhjZXB0aW9uKj4oY2VsbCk7CiAgICAgQVNTRVJUX0dD
X09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwogCisgICAgaWYgKFVOTElLRUxZ
KHRoaXNPYmplY3QgIT0gcHV0UHJvcGVydHlTbG90LnRoaXNWYWx1ZSgpKSkKKyAgICAgICAgcmV0
dXJuIEpTT2JqZWN0OjpwdXQodGhpc09iamVjdCwgbGV4aWNhbEdsb2JhbE9iamVjdCwgcHJvcGVy
dHlOYW1lLCB2YWx1ZSwgcHV0UHJvcGVydHlTbG90KTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBE
RUNMQVJFX1RIUk9XX1NDT1BFKGxleGljYWxHbG9iYWxPYmplY3QtPnZtKCkpOwogCiAgICAgaWYg
KGF1dG8gaW5kZXggPSBwYXJzZUluZGV4KHByb3BlcnR5TmFtZSkpIHsKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RJbmRleGVkU2V0dGVyVGhyb3dp
bmdFeGNlcHRpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3Jp
cHRzL3Rlc3QvSlMvSlNUZXN0SW5kZXhlZFNldHRlclRocm93aW5nRXhjZXB0aW9uLmgJKHJldmlz
aW9uIDI3ODUzOSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9K
U1Rlc3RJbmRleGVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb24uaAkod29ya2luZyBjb3B5KQpAQCAt
NjQsNyArNjQsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIEpTQzo6SXNvU3Vic3BhY2UqIHN1YnNw
YWNlRm9ySW1wbChKU0M6OlZNJiB2bSk7CiAgICAgc3RhdGljIHZvaWQgYW5hbHl6ZUhlYXAoSlND
ZWxsKiwgSlNDOjpIZWFwQW5hbHl6ZXImKTsKIHB1YmxpYzoKLSAgICBzdGF0aWMgY29uc3RleHBy
IHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxhZ3MgfCBKU0M6Oklu
dGVyY2VwdHNHZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4RXZlbldoZW5MZW5ndGhJc05vdFplcm8g
fCBKU0M6Ok92ZXJyaWRlc0dldE93blByb3BlcnR5TmFtZXMgfCBKU0M6Ok92ZXJyaWRlc0dldE93
blByb3BlcnR5U2xvdDsKKyAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIFN0cnVjdHVyZUZs
YWdzID0gQmFzZTo6U3RydWN0dXJlRmxhZ3MgfCBKU0M6OkludGVyY2VwdHNHZXRPd25Qcm9wZXJ0
eVNsb3RCeUluZGV4RXZlbldoZW5MZW5ndGhJc05vdFplcm8gfCBKU0M6Ok92ZXJyaWRlc0dldE93
blByb3BlcnR5TmFtZXMgfCBKU0M6Ok92ZXJyaWRlc0dldE93blByb3BlcnR5U2xvdCB8IEpTQzo6
T3ZlcnJpZGVzUHV0OwogcHJvdGVjdGVkOgogICAgIEpTVGVzdEluZGV4ZWRTZXR0ZXJUaHJvd2lu
Z0V4Y2VwdGlvbihKU0M6OlN0cnVjdHVyZSosIEpTRE9NR2xvYmFsT2JqZWN0JiwgUmVmPFRlc3RJ
bmRleGVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb24+JiYpOwogCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0SW5kZXhlZFNldHRlcldpdGhJZGVudGlm
aWVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvSlMvSlNUZXN0SW5kZXhlZFNldHRlcldpdGhJZGVudGlmaWVyLmNwcAkocmV2aXNpb24gMjc4
NTM5KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdElu
ZGV4ZWRTZXR0ZXJXaXRoSWRlbnRpZmllci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIwOCw2ICsy
MDgsOCBAQCBib29sIEpTVGVzdEluZGV4ZWRTZXR0ZXJXaXRoSWRlbnRpZmllcjo6CiAgICAgYXV0
byogdGhpc09iamVjdCA9IGpzQ2FzdDxKU1Rlc3RJbmRleGVkU2V0dGVyV2l0aElkZW50aWZpZXIq
PihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8o
KSk7CiAKKyAgICBpZiAoVU5MSUtFTFkodGhpc09iamVjdCAhPSBwdXRQcm9wZXJ0eVNsb3QudGhp
c1ZhbHVlKCkpKQorICAgICAgICByZXR1cm4gSlNPYmplY3Q6OnB1dCh0aGlzT2JqZWN0LCBsZXhp
Y2FsR2xvYmFsT2JqZWN0LCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCBwdXRQcm9wZXJ0eVNsb3QpOwog
ICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUobGV4aWNhbEdsb2JhbE9i
amVjdC0+dm0oKSk7CiAKICAgICBpZiAoYXV0byBpbmRleCA9IHBhcnNlSW5kZXgocHJvcGVydHlO
YW1lKSkgewpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pT
VGVzdEluZGV4ZWRTZXR0ZXJXaXRoSWRlbnRpZmllci5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RJbmRleGVkU2V0dGVyV2l0aElk
ZW50aWZpZXIuaAkocmV2aXNpb24gMjc4NTM5KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
c2NyaXB0cy90ZXN0L0pTL0pTVGVzdEluZGV4ZWRTZXR0ZXJXaXRoSWRlbnRpZmllci5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC02NCw3ICs2NCw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgSlNDOjpJc29T
dWJzcGFjZSogc3Vic3BhY2VGb3JJbXBsKEpTQzo6Vk0mIHZtKTsKICAgICBzdGF0aWMgdm9pZCBh
bmFseXplSGVhcChKU0NlbGwqLCBKU0M6OkhlYXBBbmFseXplciYpOwogcHVibGljOgotICAgIHN0
YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVG
bGFncyB8IEpTQzo6SW50ZXJjZXB0c0dldE93blByb3BlcnR5U2xvdEJ5SW5kZXhFdmVuV2hlbkxl
bmd0aElzTm90WmVybyB8IEpTQzo6T3ZlcnJpZGVzR2V0T3duUHJvcGVydHlOYW1lcyB8IEpTQzo6
T3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90OworICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWdu
ZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8IEpTQzo6SW50ZXJjZXB0
c0dldE93blByb3BlcnR5U2xvdEJ5SW5kZXhFdmVuV2hlbkxlbmd0aElzTm90WmVybyB8IEpTQzo6
T3ZlcnJpZGVzR2V0T3duUHJvcGVydHlOYW1lcyB8IEpTQzo6T3ZlcnJpZGVzR2V0T3duUHJvcGVy
dHlTbG90IHwgSlNDOjpPdmVycmlkZXNQdXQ7CiBwcm90ZWN0ZWQ6CiAgICAgSlNUZXN0SW5kZXhl
ZFNldHRlcldpdGhJZGVudGlmaWVyKEpTQzo6U3RydWN0dXJlKiwgSlNET01HbG9iYWxPYmplY3Qm
LCBSZWY8VGVzdEluZGV4ZWRTZXR0ZXJXaXRoSWRlbnRpZmllcj4mJik7CiAKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RJbnRlcmZhY2UuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0
SW50ZXJmYWNlLmgJKHJldmlzaW9uIDI3ODUzOSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RJbnRlcmZhY2UuaAkod29ya2luZyBjb3B5KQpAQCAtODMs
NiArODMsOCBAQCBwdWJsaWM6CiAjaWYgRU5BQkxFKENvbmRpdGlvbjExKSB8fCBFTkFCTEUoQ29u
ZGl0aW9uMTIpCiAgICAgSlNDOjpKU1ZhbHVlIHN1cHBsZW1lbnRhbE1ldGhvZDMoSlNDOjpKU0ds
b2JhbE9iamVjdCYsIEpTQzo6Q2FsbEZyYW1lJik7CiAjZW5kaWYKK3B1YmxpYzoKKyAgICBzdGF0
aWMgY29uc3RleHByIHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxh
Z3MgfCBKU0M6Ok92ZXJyaWRlc1B1dDsKIHByb3RlY3RlZDoKICAgICBKU1Rlc3RJbnRlcmZhY2Uo
SlNDOjpTdHJ1Y3R1cmUqLCBKU0RPTUdsb2JhbE9iamVjdCYsIFJlZjxUZXN0SW50ZXJmYWNlPiYm
KTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVz
dE5hbWVkQW5kSW5kZXhlZFNldHRlck5vSWRlbnRpZmllci5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkQW5kSW5kZXhl
ZFNldHRlck5vSWRlbnRpZmllci5jcHAJKHJldmlzaW9uIDI3ODUzOSkKKysrIFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJO
b0lkZW50aWZpZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMjUsNiArMjI1LDggQEAgYm9vbCBK
U1Rlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJOb0lkZW50aQogICAgIGF1dG8qIHRoaXNPYmplY3Qg
PSBqc0Nhc3Q8SlNUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyTm9JZGVudGlmaWVyKj4oY2VsbCk7
CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwogCisg
ICAgaWYgKFVOTElLRUxZKHRoaXNPYmplY3QgIT0gcHV0UHJvcGVydHlTbG90LnRoaXNWYWx1ZSgp
KSkKKyAgICAgICAgcmV0dXJuIEpTT2JqZWN0OjpwdXQodGhpc09iamVjdCwgbGV4aWNhbEdsb2Jh
bE9iamVjdCwgcHJvcGVydHlOYW1lLCB2YWx1ZSwgcHV0UHJvcGVydHlTbG90KTsKICAgICBhdXRv
IHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKGxleGljYWxHbG9iYWxPYmplY3QtPnZt
KCkpOwogCiAgICAgaWYgKGF1dG8gaW5kZXggPSBwYXJzZUluZGV4KHByb3BlcnR5TmFtZSkpIHsK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1l
ZEFuZEluZGV4ZWRTZXR0ZXJOb0lkZW50aWZpZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVy
Tm9JZGVudGlmaWVyLmgJKHJldmlzaW9uIDI3ODUzOSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJOb0lkZW50aWZp
ZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNjQsNyArNjQsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGlj
IEpTQzo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9ySW1wbChKU0M6OlZNJiB2bSk7CiAgICAgc3Rh
dGljIHZvaWQgYW5hbHl6ZUhlYXAoSlNDZWxsKiwgSlNDOjpIZWFwQW5hbHl6ZXImKTsKIHB1Ymxp
YzoKLSAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6
U3RydWN0dXJlRmxhZ3MgfCBKU0M6OkdldE93blByb3BlcnR5U2xvdElzSW1wdXJlRm9yUHJvcGVy
dHlBYnNlbmNlIHwgSlNDOjpJbnRlcmNlcHRzR2V0T3duUHJvcGVydHlTbG90QnlJbmRleEV2ZW5X
aGVuTGVuZ3RoSXNOb3RaZXJvIHwgSlNDOjpPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eU5hbWVzIHwg
SlNDOjpPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3QgfCBKU0M6OlByb2hpYml0c1Byb3BlcnR5
Q2FjaGluZzsKKyAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0g
QmFzZTo6U3RydWN0dXJlRmxhZ3MgfCBKU0M6OkdldE93blByb3BlcnR5U2xvdElzSW1wdXJlRm9y
UHJvcGVydHlBYnNlbmNlIHwgSlNDOjpJbnRlcmNlcHRzR2V0T3duUHJvcGVydHlTbG90QnlJbmRl
eEV2ZW5XaGVuTGVuZ3RoSXNOb3RaZXJvIHwgSlNDOjpPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eU5h
bWVzIHwgSlNDOjpPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3QgfCBKU0M6Ok92ZXJyaWRlc1B1
dCB8IEpTQzo6UHJvaGliaXRzUHJvcGVydHlDYWNoaW5nOwogcHJvdGVjdGVkOgogICAgIEpTVGVz
dE5hbWVkQW5kSW5kZXhlZFNldHRlck5vSWRlbnRpZmllcihKU0M6OlN0cnVjdHVyZSosIEpTRE9N
R2xvYmFsT2JqZWN0JiwgUmVmPFRlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJOb0lkZW50aWZpZXI+
JiYpOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNU
ZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb24uY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZEFu
ZEluZGV4ZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbi5jcHAJKHJldmlzaW9uIDI3ODUzOSkKKysr
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZEFuZElu
ZGV4ZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIyNSw2
ICsyMjUsOCBAQCBib29sIEpTVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlclRocm93aW5nCiAgICAg
YXV0byogdGhpc09iamVjdCA9IGpzQ2FzdDxKU1Rlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJUaHJv
d2luZ0V4Y2VwdGlvbio+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhp
c09iamVjdCwgaW5mbygpKTsKIAorICAgIGlmIChVTkxJS0VMWSh0aGlzT2JqZWN0ICE9IHB1dFBy
b3BlcnR5U2xvdC50aGlzVmFsdWUoKSkpCisgICAgICAgIHJldHVybiBKU09iamVjdDo6cHV0KHRo
aXNPYmplY3QsIGxleGljYWxHbG9iYWxPYmplY3QsIHByb3BlcnR5TmFtZSwgdmFsdWUsIHB1dFBy
b3BlcnR5U2xvdCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRShs
ZXhpY2FsR2xvYmFsT2JqZWN0LT52bSgpKTsKIAogICAgIGlmIChhdXRvIGluZGV4ID0gcGFyc2VJ
bmRleChwcm9wZXJ0eU5hbWUpKSB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3Jp
cHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb24u
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMv
SlNUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb24uaAkocmV2aXNpb24g
Mjc4NTM5KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVz
dE5hbWVkQW5kSW5kZXhlZFNldHRlclRocm93aW5nRXhjZXB0aW9uLmgJKHdvcmtpbmcgY29weSkK
QEAgLTY0LDcgKzY0LDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBKU0M6Oklzb1N1YnNwYWNlKiBz
dWJzcGFjZUZvckltcGwoSlNDOjpWTSYgdm0pOwogICAgIHN0YXRpYyB2b2lkIGFuYWx5emVIZWFw
KEpTQ2VsbCosIEpTQzo6SGVhcEFuYWx5emVyJik7CiBwdWJsaWM6Ci0gICAgc3RhdGljIGNvbnN0
ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwgSlND
OjpHZXRPd25Qcm9wZXJ0eVNsb3RJc0ltcHVyZUZvclByb3BlcnR5QWJzZW5jZSB8IEpTQzo6SW50
ZXJjZXB0c0dldE93blByb3BlcnR5U2xvdEJ5SW5kZXhFdmVuV2hlbkxlbmd0aElzTm90WmVybyB8
IEpTQzo6T3ZlcnJpZGVzR2V0T3duUHJvcGVydHlOYW1lcyB8IEpTQzo6T3ZlcnJpZGVzR2V0T3du
UHJvcGVydHlTbG90IHwgSlNDOjpQcm9oaWJpdHNQcm9wZXJ0eUNhY2hpbmc7CisgICAgc3RhdGlj
IGNvbnN0ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdz
IHwgSlNDOjpHZXRPd25Qcm9wZXJ0eVNsb3RJc0ltcHVyZUZvclByb3BlcnR5QWJzZW5jZSB8IEpT
Qzo6SW50ZXJjZXB0c0dldE93blByb3BlcnR5U2xvdEJ5SW5kZXhFdmVuV2hlbkxlbmd0aElzTm90
WmVybyB8IEpTQzo6T3ZlcnJpZGVzR2V0T3duUHJvcGVydHlOYW1lcyB8IEpTQzo6T3ZlcnJpZGVz
R2V0T3duUHJvcGVydHlTbG90IHwgSlNDOjpPdmVycmlkZXNQdXQgfCBKU0M6OlByb2hpYml0c1By
b3BlcnR5Q2FjaGluZzsKIHByb3RlY3RlZDoKICAgICBKU1Rlc3ROYW1lZEFuZEluZGV4ZWRTZXR0
ZXJUaHJvd2luZ0V4Y2VwdGlvbihKU0M6OlN0cnVjdHVyZSosIEpTRE9NR2xvYmFsT2JqZWN0Jiwg
UmVmPFRlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbj4mJik7CiAKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZEFu
ZEluZGV4ZWRTZXR0ZXJXaXRoSWRlbnRpZmllci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRl
cldpdGhJZGVudGlmaWVyLmNwcAkocmV2aXNpb24gMjc4NTM5KQorKysgU291cmNlL1dlYkNvcmUv
YmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlcldpdGhJ
ZGVudGlmaWVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjM2LDYgKzIzNiw4IEBAIGJvb2wgSlNU
ZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyV2l0aElkZW4KICAgICBhdXRvKiB0aGlzT2JqZWN0ID0g
anNDYXN0PEpTVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlcldpdGhJZGVudGlmaWVyKj4oY2VsbCk7
CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwogCisg
ICAgaWYgKFVOTElLRUxZKHRoaXNPYmplY3QgIT0gcHV0UHJvcGVydHlTbG90LnRoaXNWYWx1ZSgp
KSkKKyAgICAgICAgcmV0dXJuIEpTT2JqZWN0OjpwdXQodGhpc09iamVjdCwgbGV4aWNhbEdsb2Jh
bE9iamVjdCwgcHJvcGVydHlOYW1lLCB2YWx1ZSwgcHV0UHJvcGVydHlTbG90KTsKICAgICBhdXRv
IHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKGxleGljYWxHbG9iYWxPYmplY3QtPnZt
KCkpOwogCiAgICAgaWYgKGF1dG8gaW5kZXggPSBwYXJzZUluZGV4KHByb3BlcnR5TmFtZSkpIHsK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1l
ZEFuZEluZGV4ZWRTZXR0ZXJXaXRoSWRlbnRpZmllci5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZEFuZEluZGV4ZWRTZXR0
ZXJXaXRoSWRlbnRpZmllci5oCShyZXZpc2lvbiAyNzg1MzkpCisrKyBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyV2l0aElk
ZW50aWZpZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNjQsNyArNjQsNyBAQCBwdWJsaWM6CiAgICAg
c3RhdGljIEpTQzo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9ySW1wbChKU0M6OlZNJiB2bSk7CiAg
ICAgc3RhdGljIHZvaWQgYW5hbHl6ZUhlYXAoSlNDZWxsKiwgSlNDOjpIZWFwQW5hbHl6ZXImKTsK
IHB1YmxpYzoKLSAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0g
QmFzZTo6U3RydWN0dXJlRmxhZ3MgfCBKU0M6OkdldE93blByb3BlcnR5U2xvdElzSW1wdXJlRm9y
UHJvcGVydHlBYnNlbmNlIHwgSlNDOjpJbnRlcmNlcHRzR2V0T3duUHJvcGVydHlTbG90QnlJbmRl
eEV2ZW5XaGVuTGVuZ3RoSXNOb3RaZXJvIHwgSlNDOjpPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eU5h
bWVzIHwgSlNDOjpPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3QgfCBKU0M6OlByb2hpYml0c1By
b3BlcnR5Q2FjaGluZzsKKyAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIFN0cnVjdHVyZUZs
YWdzID0gQmFzZTo6U3RydWN0dXJlRmxhZ3MgfCBKU0M6OkdldE93blByb3BlcnR5U2xvdElzSW1w
dXJlRm9yUHJvcGVydHlBYnNlbmNlIHwgSlNDOjpJbnRlcmNlcHRzR2V0T3duUHJvcGVydHlTbG90
QnlJbmRleEV2ZW5XaGVuTGVuZ3RoSXNOb3RaZXJvIHwgSlNDOjpPdmVycmlkZXNHZXRPd25Qcm9w
ZXJ0eU5hbWVzIHwgSlNDOjpPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3QgfCBKU0M6Ok92ZXJy
aWRlc1B1dCB8IEpTQzo6UHJvaGliaXRzUHJvcGVydHlDYWNoaW5nOwogcHJvdGVjdGVkOgogICAg
IEpTVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlcldpdGhJZGVudGlmaWVyKEpTQzo6U3RydWN0dXJl
KiwgSlNET01HbG9iYWxPYmplY3QmLCBSZWY8VGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlcldpdGhJ
ZGVudGlmaWVyPiYmKTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L0pTL0pTVGVzdE5hbWVkU2V0dGVyTm9JZGVudGlmaWVyLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRTZXR0ZXJO
b0lkZW50aWZpZXIuY3BwCShyZXZpc2lvbiAyNzg1MzkpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRTZXR0ZXJOb0lkZW50aWZpZXIuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0yMDQsNiArMjA0LDggQEAgYm9vbCBKU1Rlc3ROYW1lZFNldHRlck5v
SWRlbnRpZmllcjo6cHV0KAogICAgIGF1dG8qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNUZXN0TmFt
ZWRTZXR0ZXJOb0lkZW50aWZpZXIqPihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVS
SVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CiAKKyAgICBpZiAoVU5MSUtFTFkodGhpc09iamVjdCAh
PSBwdXRQcm9wZXJ0eVNsb3QudGhpc1ZhbHVlKCkpKQorICAgICAgICByZXR1cm4gSlNPYmplY3Q6
OnB1dCh0aGlzT2JqZWN0LCBsZXhpY2FsR2xvYmFsT2JqZWN0LCBwcm9wZXJ0eU5hbWUsIHZhbHVl
LCBwdXRQcm9wZXJ0eVNsb3QpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1df
U0NPUEUobGV4aWNhbEdsb2JhbE9iamVjdC0+dm0oKSk7CiAKICAgICBpZiAoIXByb3BlcnR5TmFt
ZS5pc1N5bWJvbCgpKSB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvSlMvSlNUZXN0TmFtZWRTZXR0ZXJOb0lkZW50aWZpZXIuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRTZXR0ZXJOb0lk
ZW50aWZpZXIuaAkocmV2aXNpb24gMjc4NTM5KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
c2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkU2V0dGVyTm9JZGVudGlmaWVyLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTY0LDcgKzY0LDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBKU0M6Oklzb1N1YnNw
YWNlKiBzdWJzcGFjZUZvckltcGwoSlNDOjpWTSYgdm0pOwogICAgIHN0YXRpYyB2b2lkIGFuYWx5
emVIZWFwKEpTQ2VsbCosIEpTQzo6SGVhcEFuYWx5emVyJik7CiBwdWJsaWM6Ci0gICAgc3RhdGlj
IGNvbnN0ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdz
IHwgSlNDOjpHZXRPd25Qcm9wZXJ0eVNsb3RJc0ltcHVyZUZvclByb3BlcnR5QWJzZW5jZSB8IEpT
Qzo6SW50ZXJjZXB0c0dldE93blByb3BlcnR5U2xvdEJ5SW5kZXhFdmVuV2hlbkxlbmd0aElzTm90
WmVybyB8IEpTQzo6T3ZlcnJpZGVzR2V0T3duUHJvcGVydHlOYW1lcyB8IEpTQzo6T3ZlcnJpZGVz
R2V0T3duUHJvcGVydHlTbG90IHwgSlNDOjpQcm9oaWJpdHNQcm9wZXJ0eUNhY2hpbmc7CisgICAg
c3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVy
ZUZsYWdzIHwgSlNDOjpHZXRPd25Qcm9wZXJ0eVNsb3RJc0ltcHVyZUZvclByb3BlcnR5QWJzZW5j
ZSB8IEpTQzo6SW50ZXJjZXB0c0dldE93blByb3BlcnR5U2xvdEJ5SW5kZXhFdmVuV2hlbkxlbmd0
aElzTm90WmVybyB8IEpTQzo6T3ZlcnJpZGVzR2V0T3duUHJvcGVydHlOYW1lcyB8IEpTQzo6T3Zl
cnJpZGVzR2V0T3duUHJvcGVydHlTbG90IHwgSlNDOjpPdmVycmlkZXNQdXQgfCBKU0M6OlByb2hp
Yml0c1Byb3BlcnR5Q2FjaGluZzsKIHByb3RlY3RlZDoKICAgICBKU1Rlc3ROYW1lZFNldHRlck5v
SWRlbnRpZmllcihKU0M6OlN0cnVjdHVyZSosIEpTRE9NR2xvYmFsT2JqZWN0JiwgUmVmPFRlc3RO
YW1lZFNldHRlck5vSWRlbnRpZmllcj4mJik7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZFNldHRlclRocm93aW5nRXhjZXB0aW9uLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMv
SlNUZXN0TmFtZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbi5jcHAJKHJldmlzaW9uIDI3ODUzOSkK
KysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZFNl
dHRlclRocm93aW5nRXhjZXB0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjA0LDYgKzIwNCw4
IEBAIGJvb2wgSlNUZXN0TmFtZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbjoKICAgICBhdXRvKiB0
aGlzT2JqZWN0ID0ganNDYXN0PEpTVGVzdE5hbWVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb24qPihj
ZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7
CiAKKyAgICBpZiAoVU5MSUtFTFkodGhpc09iamVjdCAhPSBwdXRQcm9wZXJ0eVNsb3QudGhpc1Zh
bHVlKCkpKQorICAgICAgICByZXR1cm4gSlNPYmplY3Q6OnB1dCh0aGlzT2JqZWN0LCBsZXhpY2Fs
R2xvYmFsT2JqZWN0LCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCBwdXRQcm9wZXJ0eVNsb3QpOwogICAg
IGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUobGV4aWNhbEdsb2JhbE9iamVj
dC0+dm0oKSk7CiAKICAgICBpZiAoIXByb3BlcnR5TmFtZS5pc1N5bWJvbCgpKSB7CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRTZXR0ZXJU
aHJvd2luZ0V4Y2VwdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZFNldHRlclRocm93aW5nRXhjZXB0aW9uLmgJKHJl
dmlzaW9uIDI3ODUzOSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9K
Uy9KU1Rlc3ROYW1lZFNldHRlclRocm93aW5nRXhjZXB0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAg
LTY0LDcgKzY0LDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBKU0M6Oklzb1N1YnNwYWNlKiBzdWJz
cGFjZUZvckltcGwoSlNDOjpWTSYgdm0pOwogICAgIHN0YXRpYyB2b2lkIGFuYWx5emVIZWFwKEpT
Q2VsbCosIEpTQzo6SGVhcEFuYWx5emVyJik7CiBwdWJsaWM6Ci0gICAgc3RhdGljIGNvbnN0ZXhw
ciB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwgSlNDOjpH
ZXRPd25Qcm9wZXJ0eVNsb3RJc0ltcHVyZUZvclByb3BlcnR5QWJzZW5jZSB8IEpTQzo6SW50ZXJj
ZXB0c0dldE93blByb3BlcnR5U2xvdEJ5SW5kZXhFdmVuV2hlbkxlbmd0aElzTm90WmVybyB8IEpT
Qzo6T3ZlcnJpZGVzR2V0T3duUHJvcGVydHlOYW1lcyB8IEpTQzo6T3ZlcnJpZGVzR2V0T3duUHJv
cGVydHlTbG90IHwgSlNDOjpQcm9oaWJpdHNQcm9wZXJ0eUNhY2hpbmc7CisgICAgc3RhdGljIGNv
bnN0ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwg
SlNDOjpHZXRPd25Qcm9wZXJ0eVNsb3RJc0ltcHVyZUZvclByb3BlcnR5QWJzZW5jZSB8IEpTQzo6
SW50ZXJjZXB0c0dldE93blByb3BlcnR5U2xvdEJ5SW5kZXhFdmVuV2hlbkxlbmd0aElzTm90WmVy
byB8IEpTQzo6T3ZlcnJpZGVzR2V0T3duUHJvcGVydHlOYW1lcyB8IEpTQzo6T3ZlcnJpZGVzR2V0
T3duUHJvcGVydHlTbG90IHwgSlNDOjpPdmVycmlkZXNQdXQgfCBKU0M6OlByb2hpYml0c1Byb3Bl
cnR5Q2FjaGluZzsKIHByb3RlY3RlZDoKICAgICBKU1Rlc3ROYW1lZFNldHRlclRocm93aW5nRXhj
ZXB0aW9uKEpTQzo6U3RydWN0dXJlKiwgSlNET01HbG9iYWxPYmplY3QmLCBSZWY8VGVzdE5hbWVk
U2V0dGVyVGhyb3dpbmdFeGNlcHRpb24+JiYpOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRTZXR0ZXJXaXRoSWRlbnRpZmllci5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pT
VGVzdE5hbWVkU2V0dGVyV2l0aElkZW50aWZpZXIuY3BwCShyZXZpc2lvbiAyNzg1MzkpCisrKyBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRTZXR0ZXJX
aXRoSWRlbnRpZmllci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIxMiw2ICsyMTIsOCBAQCBib29s
IEpTVGVzdE5hbWVkU2V0dGVyV2l0aElkZW50aWZpZXI6OnB1CiAgICAgYXV0byogdGhpc09iamVj
dCA9IGpzQ2FzdDxKU1Rlc3ROYW1lZFNldHRlcldpdGhJZGVudGlmaWVyKj4oY2VsbCk7CiAgICAg
QVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwogCisgICAgaWYg
KFVOTElLRUxZKHRoaXNPYmplY3QgIT0gcHV0UHJvcGVydHlTbG90LnRoaXNWYWx1ZSgpKSkKKyAg
ICAgICAgcmV0dXJuIEpTT2JqZWN0OjpwdXQodGhpc09iamVjdCwgbGV4aWNhbEdsb2JhbE9iamVj
dCwgcHJvcGVydHlOYW1lLCB2YWx1ZSwgcHV0UHJvcGVydHlTbG90KTsKICAgICBhdXRvIHRocm93
U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKGxleGljYWxHbG9iYWxPYmplY3QtPnZtKCkpOwog
CiAgICAgaWYgKCFwcm9wZXJ0eU5hbWUuaXNTeW1ib2woKSkgewpJbmRleDogU291cmNlL1dlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkU2V0dGVyV2l0aElkZW50aWZp
ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3Qv
SlMvSlNUZXN0TmFtZWRTZXR0ZXJXaXRoSWRlbnRpZmllci5oCShyZXZpc2lvbiAyNzg1MzkpCisr
KyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRTZXR0
ZXJXaXRoSWRlbnRpZmllci5oCSh3b3JraW5nIGNvcHkpCkBAIC02NCw3ICs2NCw3IEBAIHB1Ymxp
YzoKICAgICBzdGF0aWMgSlNDOjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3JJbXBsKEpTQzo6Vk0m
IHZtKTsKICAgICBzdGF0aWMgdm9pZCBhbmFseXplSGVhcChKU0NlbGwqLCBKU0M6OkhlYXBBbmFs
eXplciYpOwogcHVibGljOgotICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgU3RydWN0dXJl
RmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8IEpTQzo6R2V0T3duUHJvcGVydHlTbG90SXNJ
bXB1cmVGb3JQcm9wZXJ0eUFic2VuY2UgfCBKU0M6OkludGVyY2VwdHNHZXRPd25Qcm9wZXJ0eVNs
b3RCeUluZGV4RXZlbldoZW5MZW5ndGhJc05vdFplcm8gfCBKU0M6Ok92ZXJyaWRlc0dldE93blBy
b3BlcnR5TmFtZXMgfCBKU0M6Ok92ZXJyaWRlc0dldE93blByb3BlcnR5U2xvdCB8IEpTQzo6UHJv
aGliaXRzUHJvcGVydHlDYWNoaW5nOworICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgU3Ry
dWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8IEpTQzo6R2V0T3duUHJvcGVydHlT
bG90SXNJbXB1cmVGb3JQcm9wZXJ0eUFic2VuY2UgfCBKU0M6OkludGVyY2VwdHNHZXRPd25Qcm9w
ZXJ0eVNsb3RCeUluZGV4RXZlbldoZW5MZW5ndGhJc05vdFplcm8gfCBKU0M6Ok92ZXJyaWRlc0dl
dE93blByb3BlcnR5TmFtZXMgfCBKU0M6Ok92ZXJyaWRlc0dldE93blByb3BlcnR5U2xvdCB8IEpT
Qzo6T3ZlcnJpZGVzUHV0IHwgSlNDOjpQcm9oaWJpdHNQcm9wZXJ0eUNhY2hpbmc7CiBwcm90ZWN0
ZWQ6CiAgICAgSlNUZXN0TmFtZWRTZXR0ZXJXaXRoSWRlbnRpZmllcihKU0M6OlN0cnVjdHVyZSos
IEpTRE9NR2xvYmFsT2JqZWN0JiwgUmVmPFRlc3ROYW1lZFNldHRlcldpdGhJZGVudGlmaWVyPiYm
KTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVz
dE5hbWVkU2V0dGVyV2l0aEluZGV4ZWRHZXR0ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZFNldHRlcldpdGhJbmRl
eGVkR2V0dGVyLmNwcAkocmV2aXNpb24gMjc4NTM5KQorKysgU291cmNlL1dlYkNvcmUvYmluZGlu
Z3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkU2V0dGVyV2l0aEluZGV4ZWRHZXR0ZXIuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0yMzYsNiArMjM2LDggQEAgYm9vbCBKU1Rlc3ROYW1lZFNldHRl
cldpdGhJbmRleGVkR2V0dGVyOgogICAgIGF1dG8qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNUZXN0
TmFtZWRTZXR0ZXJXaXRoSW5kZXhlZEdldHRlcio+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpF
Q1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKIAorICAgIGlmIChVTkxJS0VMWSh0aGlz
T2JqZWN0ICE9IHB1dFByb3BlcnR5U2xvdC50aGlzVmFsdWUoKSkpCisgICAgICAgIHJldHVybiBK
U09iamVjdDo6cHV0KHRoaXNPYmplY3QsIGxleGljYWxHbG9iYWxPYmplY3QsIHByb3BlcnR5TmFt
ZSwgdmFsdWUsIHB1dFByb3BlcnR5U2xvdCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFS
RV9USFJPV19TQ09QRShsZXhpY2FsR2xvYmFsT2JqZWN0LT52bSgpKTsKIAogICAgIGlmICghcHJv
cGVydHlOYW1lLmlzU3ltYm9sKCkpIHsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Nj
cmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZFNldHRlcldpdGhJbmRleGVkR2V0dGVyLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5h
bWVkU2V0dGVyV2l0aEluZGV4ZWRHZXR0ZXIuaAkocmV2aXNpb24gMjc4NTM5KQorKysgU291cmNl
L1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkU2V0dGVyV2l0aElu
ZGV4ZWRHZXR0ZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNjQsNyArNjQsNyBAQCBwdWJsaWM6CiAg
ICAgc3RhdGljIEpTQzo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9ySW1wbChKU0M6OlZNJiB2bSk7
CiAgICAgc3RhdGljIHZvaWQgYW5hbHl6ZUhlYXAoSlNDZWxsKiwgSlNDOjpIZWFwQW5hbHl6ZXIm
KTsKIHB1YmxpYzoKLSAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdz
ID0gQmFzZTo6U3RydWN0dXJlRmxhZ3MgfCBKU0M6OkdldE93blByb3BlcnR5U2xvdElzSW1wdXJl
Rm9yUHJvcGVydHlBYnNlbmNlIHwgSlNDOjpJbnRlcmNlcHRzR2V0T3duUHJvcGVydHlTbG90QnlJ
bmRleEV2ZW5XaGVuTGVuZ3RoSXNOb3RaZXJvIHwgSlNDOjpPdmVycmlkZXNHZXRPd25Qcm9wZXJ0
eU5hbWVzIHwgSlNDOjpPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3QgfCBKU0M6OlByb2hpYml0
c1Byb3BlcnR5Q2FjaGluZzsKKyAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIFN0cnVjdHVy
ZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxhZ3MgfCBKU0M6OkdldE93blByb3BlcnR5U2xvdElz
SW1wdXJlRm9yUHJvcGVydHlBYnNlbmNlIHwgSlNDOjpJbnRlcmNlcHRzR2V0T3duUHJvcGVydHlT
bG90QnlJbmRleEV2ZW5XaGVuTGVuZ3RoSXNOb3RaZXJvIHwgSlNDOjpPdmVycmlkZXNHZXRPd25Q
cm9wZXJ0eU5hbWVzIHwgSlNDOjpPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3QgfCBKU0M6Ok92
ZXJyaWRlc1B1dCB8IEpTQzo6UHJvaGliaXRzUHJvcGVydHlDYWNoaW5nOwogcHJvdGVjdGVkOgog
ICAgIEpTVGVzdE5hbWVkU2V0dGVyV2l0aEluZGV4ZWRHZXR0ZXIoSlNDOjpTdHJ1Y3R1cmUqLCBK
U0RPTUdsb2JhbE9iamVjdCYsIFJlZjxUZXN0TmFtZWRTZXR0ZXJXaXRoSW5kZXhlZEdldHRlcj4m
Jik7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rl
c3ROYW1lZFNldHRlcldpdGhJbmRleGVkR2V0dGVyQW5kU2V0dGVyLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRTZXR0
ZXJXaXRoSW5kZXhlZEdldHRlckFuZFNldHRlci5jcHAJKHJldmlzaW9uIDI3ODUzOSkKKysrIFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZFNldHRlcldp
dGhJbmRleGVkR2V0dGVyQW5kU2V0dGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjM2LDYgKzIz
Niw4IEBAIGJvb2wgSlNUZXN0TmFtZWRTZXR0ZXJXaXRoSW5kZXhlZEdldHRlckEKICAgICBhdXRv
KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTVGVzdE5hbWVkU2V0dGVyV2l0aEluZGV4ZWRHZXR0ZXJB
bmRTZXR0ZXIqPihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmpl
Y3QsIGluZm8oKSk7CiAKKyAgICBpZiAoVU5MSUtFTFkodGhpc09iamVjdCAhPSBwdXRQcm9wZXJ0
eVNsb3QudGhpc1ZhbHVlKCkpKQorICAgICAgICByZXR1cm4gSlNPYmplY3Q6OnB1dCh0aGlzT2Jq
ZWN0LCBsZXhpY2FsR2xvYmFsT2JqZWN0LCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCBwdXRQcm9wZXJ0
eVNsb3QpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUobGV4aWNh
bEdsb2JhbE9iamVjdC0+dm0oKSk7CiAKICAgICBpZiAoYXV0byBpbmRleCA9IHBhcnNlSW5kZXgo
cHJvcGVydHlOYW1lKSkgewpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L0pTL0pTVGVzdE5hbWVkU2V0dGVyV2l0aEluZGV4ZWRHZXR0ZXJBbmRTZXR0ZXIuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0
TmFtZWRTZXR0ZXJXaXRoSW5kZXhlZEdldHRlckFuZFNldHRlci5oCShyZXZpc2lvbiAyNzg1Mzkp
CisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRT
ZXR0ZXJXaXRoSW5kZXhlZEdldHRlckFuZFNldHRlci5oCSh3b3JraW5nIGNvcHkpCkBAIC02NCw3
ICs2NCw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgSlNDOjpJc29TdWJzcGFjZSogc3Vic3BhY2VG
b3JJbXBsKEpTQzo6Vk0mIHZtKTsKICAgICBzdGF0aWMgdm9pZCBhbmFseXplSGVhcChKU0NlbGwq
LCBKU0M6OkhlYXBBbmFseXplciYpOwogcHVibGljOgotICAgIHN0YXRpYyBjb25zdGV4cHIgdW5z
aWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8IEpTQzo6R2V0T3du
UHJvcGVydHlTbG90SXNJbXB1cmVGb3JQcm9wZXJ0eUFic2VuY2UgfCBKU0M6OkludGVyY2VwdHNH
ZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4RXZlbldoZW5MZW5ndGhJc05vdFplcm8gfCBKU0M6Ok92
ZXJyaWRlc0dldE93blByb3BlcnR5TmFtZXMgfCBKU0M6Ok92ZXJyaWRlc0dldE93blByb3BlcnR5
U2xvdCB8IEpTQzo6UHJvaGliaXRzUHJvcGVydHlDYWNoaW5nOworICAgIHN0YXRpYyBjb25zdGV4
cHIgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8IEpTQzo6
R2V0T3duUHJvcGVydHlTbG90SXNJbXB1cmVGb3JQcm9wZXJ0eUFic2VuY2UgfCBKU0M6OkludGVy
Y2VwdHNHZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4RXZlbldoZW5MZW5ndGhJc05vdFplcm8gfCBK
U0M6Ok92ZXJyaWRlc0dldE93blByb3BlcnR5TmFtZXMgfCBKU0M6Ok92ZXJyaWRlc0dldE93blBy
b3BlcnR5U2xvdCB8IEpTQzo6T3ZlcnJpZGVzUHV0IHwgSlNDOjpQcm9oaWJpdHNQcm9wZXJ0eUNh
Y2hpbmc7CiBwcm90ZWN0ZWQ6CiAgICAgSlNUZXN0TmFtZWRTZXR0ZXJXaXRoSW5kZXhlZEdldHRl
ckFuZFNldHRlcihKU0M6OlN0cnVjdHVyZSosIEpTRE9NR2xvYmFsT2JqZWN0JiwgUmVmPFRlc3RO
YW1lZFNldHRlcldpdGhJbmRleGVkR2V0dGVyQW5kU2V0dGVyPiYmKTsKIApJbmRleDogU291cmNl
L1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkU2V0dGVyV2l0aExl
Z2FjeU92ZXJyaWRlQnVpbHRJbnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZFNldHRlcldpdGhMZWdhY3lPdmVycmlk
ZUJ1aWx0SW5zLmNwcAkocmV2aXNpb24gMjc4NTM5KQorKysgU291cmNlL1dlYkNvcmUvYmluZGlu
Z3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkU2V0dGVyV2l0aExlZ2FjeU92ZXJyaWRlQnVp
bHRJbnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMDQsNiArMjA0LDggQEAgYm9vbCBKU1Rlc3RO
YW1lZFNldHRlcldpdGhMZWdhY3lPdmVycmlkZQogICAgIGF1dG8qIHRoaXNPYmplY3QgPSBqc0Nh
c3Q8SlNUZXN0TmFtZWRTZXR0ZXJXaXRoTGVnYWN5T3ZlcnJpZGVCdWlsdElucyo+KGNlbGwpOwog
ICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKIAorICAg
IGlmIChVTkxJS0VMWSh0aGlzT2JqZWN0ICE9IHB1dFByb3BlcnR5U2xvdC50aGlzVmFsdWUoKSkp
CisgICAgICAgIHJldHVybiBKU09iamVjdDo6cHV0KHRoaXNPYmplY3QsIGxleGljYWxHbG9iYWxP
YmplY3QsIHByb3BlcnR5TmFtZSwgdmFsdWUsIHB1dFByb3BlcnR5U2xvdCk7CiAgICAgYXV0byB0
aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRShsZXhpY2FsR2xvYmFsT2JqZWN0LT52bSgp
KTsKIAogICAgIGlmICghcHJvcGVydHlOYW1lLmlzU3ltYm9sKCkpIHsKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZFNldHRlcldpdGhMZWdh
Y3lPdmVycmlkZUJ1aWx0SW5zLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGlu
Z3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkU2V0dGVyV2l0aExlZ2FjeU92ZXJyaWRlQnVp
bHRJbnMuaAkocmV2aXNpb24gMjc4NTM5KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2Ny
aXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkU2V0dGVyV2l0aExlZ2FjeU92ZXJyaWRlQnVpbHRJbnMu
aAkod29ya2luZyBjb3B5KQpAQCAtNjQsNyArNjQsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIEpT
Qzo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9ySW1wbChKU0M6OlZNJiB2bSk7CiAgICAgc3RhdGlj
IHZvaWQgYW5hbHl6ZUhlYXAoSlNDZWxsKiwgSlNDOjpIZWFwQW5hbHl6ZXImKTsKIHB1YmxpYzoK
LSAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3Ry
dWN0dXJlRmxhZ3MgfCBKU0M6OkdldE93blByb3BlcnR5U2xvdElzSW1wdXJlIHwgSlNDOjpJbnRl
cmNlcHRzR2V0T3duUHJvcGVydHlTbG90QnlJbmRleEV2ZW5XaGVuTGVuZ3RoSXNOb3RaZXJvIHwg
SlNDOjpPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eU5hbWVzIHwgSlNDOjpPdmVycmlkZXNHZXRPd25Q
cm9wZXJ0eVNsb3QgfCBKU0M6OlByb2hpYml0c1Byb3BlcnR5Q2FjaGluZzsKKyAgICBzdGF0aWMg
Y29uc3RleHByIHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxhZ3Mg
fCBKU0M6OkdldE93blByb3BlcnR5U2xvdElzSW1wdXJlIHwgSlNDOjpJbnRlcmNlcHRzR2V0T3du
UHJvcGVydHlTbG90QnlJbmRleEV2ZW5XaGVuTGVuZ3RoSXNOb3RaZXJvIHwgSlNDOjpPdmVycmlk
ZXNHZXRPd25Qcm9wZXJ0eU5hbWVzIHwgSlNDOjpPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3Qg
fCBKU0M6Ok92ZXJyaWRlc1B1dCB8IEpTQzo6UHJvaGliaXRzUHJvcGVydHlDYWNoaW5nOwogcHJv
dGVjdGVkOgogICAgIEpTVGVzdE5hbWVkU2V0dGVyV2l0aExlZ2FjeU92ZXJyaWRlQnVpbHRJbnMo
SlNDOjpTdHJ1Y3R1cmUqLCBKU0RPTUdsb2JhbE9iamVjdCYsIFJlZjxUZXN0TmFtZWRTZXR0ZXJX
aXRoTGVnYWN5T3ZlcnJpZGVCdWlsdElucz4mJik7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZFNldHRlcldpdGhMZWdhY3lVbmZvcmdl
YWJsZVByb3BlcnRpZXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZFNldHRlcldpdGhMZWdhY3lVbmZvcmdlYWJsZVBy
b3BlcnRpZXMuY3BwCShyZXZpc2lvbiAyNzg1MzkpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRTZXR0ZXJXaXRoTGVnYWN5VW5mb3JnZWFibGVQ
cm9wZXJ0aWVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjMwLDYgKzIzMCw4IEBAIGJvb2wgSlNU
ZXN0TmFtZWRTZXR0ZXJXaXRoTGVnYWN5VW5mb3JnZWEKICAgICBhdXRvKiB0aGlzT2JqZWN0ID0g
anNDYXN0PEpTVGVzdE5hbWVkU2V0dGVyV2l0aExlZ2FjeVVuZm9yZ2VhYmxlUHJvcGVydGllcyo+
KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygp
KTsKIAorICAgIGlmIChVTkxJS0VMWSh0aGlzT2JqZWN0ICE9IHB1dFByb3BlcnR5U2xvdC50aGlz
VmFsdWUoKSkpCisgICAgICAgIHJldHVybiBKU09iamVjdDo6cHV0KHRoaXNPYmplY3QsIGxleGlj
YWxHbG9iYWxPYmplY3QsIHByb3BlcnR5TmFtZSwgdmFsdWUsIHB1dFByb3BlcnR5U2xvdCk7CiAg
ICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRShsZXhpY2FsR2xvYmFsT2Jq
ZWN0LT52bSgpKTsKIAogICAgIGlmICghcHJvcGVydHlOYW1lLmlzU3ltYm9sKCkpIHsKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZFNldHRl
cldpdGhMZWdhY3lVbmZvcmdlYWJsZVByb3BlcnRpZXMuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRTZXR0ZXJXaXRoTGVn
YWN5VW5mb3JnZWFibGVQcm9wZXJ0aWVzLmgJKHJldmlzaW9uIDI3ODUzOSkKKysrIFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZFNldHRlcldpdGhMZWdh
Y3lVbmZvcmdlYWJsZVByb3BlcnRpZXMuaAkod29ya2luZyBjb3B5KQpAQCAtNjQsNyArNjQsNyBA
QCBwdWJsaWM6CiAgICAgc3RhdGljIEpTQzo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9ySW1wbChK
U0M6OlZNJiB2bSk7CiAgICAgc3RhdGljIHZvaWQgYW5hbHl6ZUhlYXAoSlNDZWxsKiwgSlNDOjpI
ZWFwQW5hbHl6ZXImKTsKIHB1YmxpYzoKLSAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIFN0
cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxhZ3MgfCBKU0M6OkdldE93blByb3BlcnR5
U2xvdElzSW1wdXJlRm9yUHJvcGVydHlBYnNlbmNlIHwgSlNDOjpIYXNTdGF0aWNQcm9wZXJ0eVRh
YmxlIHwgSlNDOjpJbnRlcmNlcHRzR2V0T3duUHJvcGVydHlTbG90QnlJbmRleEV2ZW5XaGVuTGVu
Z3RoSXNOb3RaZXJvIHwgSlNDOjpPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eU5hbWVzIHwgSlNDOjpP
dmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3QgfCBKU0M6OlByb2hpYml0c1Byb3BlcnR5Q2FjaGlu
ZzsKKyAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6
U3RydWN0dXJlRmxhZ3MgfCBKU0M6OkdldE93blByb3BlcnR5U2xvdElzSW1wdXJlRm9yUHJvcGVy
dHlBYnNlbmNlIHwgSlNDOjpIYXNTdGF0aWNQcm9wZXJ0eVRhYmxlIHwgSlNDOjpJbnRlcmNlcHRz
R2V0T3duUHJvcGVydHlTbG90QnlJbmRleEV2ZW5XaGVuTGVuZ3RoSXNOb3RaZXJvIHwgSlNDOjpP
dmVycmlkZXNHZXRPd25Qcm9wZXJ0eU5hbWVzIHwgSlNDOjpPdmVycmlkZXNHZXRPd25Qcm9wZXJ0
eVNsb3QgfCBKU0M6Ok92ZXJyaWRlc1B1dCB8IEpTQzo6UHJvaGliaXRzUHJvcGVydHlDYWNoaW5n
OwogcHJvdGVjdGVkOgogICAgIEpTVGVzdE5hbWVkU2V0dGVyV2l0aExlZ2FjeVVuZm9yZ2VhYmxl
UHJvcGVydGllcyhKU0M6OlN0cnVjdHVyZSosIEpTRE9NR2xvYmFsT2JqZWN0JiwgUmVmPFRlc3RO
YW1lZFNldHRlcldpdGhMZWdhY3lVbmZvcmdlYWJsZVByb3BlcnRpZXM+JiYpOwogCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRTZXR0ZXJX
aXRoTGVnYWN5VW5mb3JnZWFibGVQcm9wZXJ0aWVzQW5kTGVnYWN5T3ZlcnJpZGVCdWlsdElucy5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pT
L0pTVGVzdE5hbWVkU2V0dGVyV2l0aExlZ2FjeVVuZm9yZ2VhYmxlUHJvcGVydGllc0FuZExlZ2Fj
eU92ZXJyaWRlQnVpbHRJbnMuY3BwCShyZXZpc2lvbiAyNzg1MzkpCisrKyBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRTZXR0ZXJXaXRoTGVnYWN5VW5m
b3JnZWFibGVQcm9wZXJ0aWVzQW5kTGVnYWN5T3ZlcnJpZGVCdWlsdElucy5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTIzMCw2ICsyMzAsOCBAQCBib29sIEpTVGVzdE5hbWVkU2V0dGVyV2l0aExlZ2Fj
eVVuZm9yZ2VhCiAgICAgYXV0byogdGhpc09iamVjdCA9IGpzQ2FzdDxKU1Rlc3ROYW1lZFNldHRl
cldpdGhMZWdhY3lVbmZvcmdlYWJsZVByb3BlcnRpZXNBbmRMZWdhY3lPdmVycmlkZUJ1aWx0SW5z
Kj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZv
KCkpOwogCisgICAgaWYgKFVOTElLRUxZKHRoaXNPYmplY3QgIT0gcHV0UHJvcGVydHlTbG90LnRo
aXNWYWx1ZSgpKSkKKyAgICAgICAgcmV0dXJuIEpTT2JqZWN0OjpwdXQodGhpc09iamVjdCwgbGV4
aWNhbEdsb2JhbE9iamVjdCwgcHJvcGVydHlOYW1lLCB2YWx1ZSwgcHV0UHJvcGVydHlTbG90KTsK
ICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKGxleGljYWxHbG9iYWxP
YmplY3QtPnZtKCkpOwogCiAgICAgaWYgKCFwcm9wZXJ0eU5hbWUuaXNTeW1ib2woKSkgewpJbmRl
eDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkU2V0
dGVyV2l0aExlZ2FjeVVuZm9yZ2VhYmxlUHJvcGVydGllc0FuZExlZ2FjeU92ZXJyaWRlQnVpbHRJ
bnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3Qv
SlMvSlNUZXN0TmFtZWRTZXR0ZXJXaXRoTGVnYWN5VW5mb3JnZWFibGVQcm9wZXJ0aWVzQW5kTGVn
YWN5T3ZlcnJpZGVCdWlsdElucy5oCShyZXZpc2lvbiAyNzg1MzkpCisrKyBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRTZXR0ZXJXaXRoTGVnYWN5VW5m
b3JnZWFibGVQcm9wZXJ0aWVzQW5kTGVnYWN5T3ZlcnJpZGVCdWlsdElucy5oCSh3b3JraW5nIGNv
cHkpCkBAIC02NCw3ICs2NCw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgSlNDOjpJc29TdWJzcGFj
ZSogc3Vic3BhY2VGb3JJbXBsKEpTQzo6Vk0mIHZtKTsKICAgICBzdGF0aWMgdm9pZCBhbmFseXpl
SGVhcChKU0NlbGwqLCBKU0M6OkhlYXBBbmFseXplciYpOwogcHVibGljOgotICAgIHN0YXRpYyBj
b25zdGV4cHIgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8
IEpTQzo6R2V0T3duUHJvcGVydHlTbG90SXNJbXB1cmUgfCBKU0M6Okhhc1N0YXRpY1Byb3BlcnR5
VGFibGUgfCBKU0M6OkludGVyY2VwdHNHZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4RXZlbldoZW5M
ZW5ndGhJc05vdFplcm8gfCBKU0M6Ok92ZXJyaWRlc0dldE93blByb3BlcnR5TmFtZXMgfCBKU0M6
Ok92ZXJyaWRlc0dldE93blByb3BlcnR5U2xvdCB8IEpTQzo6UHJvaGliaXRzUHJvcGVydHlDYWNo
aW5nOworICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNl
OjpTdHJ1Y3R1cmVGbGFncyB8IEpTQzo6R2V0T3duUHJvcGVydHlTbG90SXNJbXB1cmUgfCBKU0M6
Okhhc1N0YXRpY1Byb3BlcnR5VGFibGUgfCBKU0M6OkludGVyY2VwdHNHZXRPd25Qcm9wZXJ0eVNs
b3RCeUluZGV4RXZlbldoZW5MZW5ndGhJc05vdFplcm8gfCBKU0M6Ok92ZXJyaWRlc0dldE93blBy
b3BlcnR5TmFtZXMgfCBKU0M6Ok92ZXJyaWRlc0dldE93blByb3BlcnR5U2xvdCB8IEpTQzo6T3Zl
cnJpZGVzUHV0IHwgSlNDOjpQcm9oaWJpdHNQcm9wZXJ0eUNhY2hpbmc7CiBwcm90ZWN0ZWQ6CiAg
ICAgSlNUZXN0TmFtZWRTZXR0ZXJXaXRoTGVnYWN5VW5mb3JnZWFibGVQcm9wZXJ0aWVzQW5kTGVn
YWN5T3ZlcnJpZGVCdWlsdElucyhKU0M6OlN0cnVjdHVyZSosIEpTRE9NR2xvYmFsT2JqZWN0Jiwg
UmVmPFRlc3ROYW1lZFNldHRlcldpdGhMZWdhY3lVbmZvcmdlYWJsZVByb3BlcnRpZXNBbmRMZWdh
Y3lPdmVycmlkZUJ1aWx0SW5zPiYmKTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
c2NyaXB0cy90ZXN0L0pTL0pTVGVzdFBsdWdpbkludGVyZmFjZS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFBsdWdpbkludGVy
ZmFjZS5jcHAJKHJldmlzaW9uIDI3ODUzOSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Nj
cmlwdHMvdGVzdC9KUy9KU1Rlc3RQbHVnaW5JbnRlcmZhY2UuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xODEsNiArMTgxLDggQEAgYm9vbCBKU1Rlc3RQbHVnaW5JbnRlcmZhY2U6OnB1dChKU0NlbGwq
IAogICAgIGF1dG8qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNUZXN0UGx1Z2luSW50ZXJmYWNlKj4o
Y2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkp
OwogCisgICAgaWYgKFVOTElLRUxZKHRoaXNPYmplY3QgIT0gcHV0UHJvcGVydHlTbG90LnRoaXNW
YWx1ZSgpKSkKKyAgICAgICAgcmV0dXJuIEpTT2JqZWN0OjpwdXQodGhpc09iamVjdCwgbGV4aWNh
bEdsb2JhbE9iamVjdCwgcHJvcGVydHlOYW1lLCB2YWx1ZSwgcHV0UHJvcGVydHlTbG90KTsKICAg
ICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKGxleGljYWxHbG9iYWxPYmpl
Y3QtPnZtKCkpOwogCiAgICAgYm9vbCBwdXRSZXN1bHQgPSBmYWxzZTsKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RQbHVnaW5JbnRlcmZhY2UuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNU
ZXN0UGx1Z2luSW50ZXJmYWNlLmgJKHJldmlzaW9uIDI3ODUzOSkKKysrIFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RQbHVnaW5JbnRlcmZhY2UuaAkod29ya2lu
ZyBjb3B5KQpAQCAtNjcsNyArNjcsNyBAQCBwdWJsaWM6CiAKICAgICBzdGF0aWMgdm9pZCBhbmFs
eXplSGVhcChKU0NlbGwqLCBKU0M6OkhlYXBBbmFseXplciYpOwogcHVibGljOgotICAgIHN0YXRp
YyBjb25zdGV4cHIgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFn
cyB8IEpTQzo6SW50ZXJjZXB0c0dldE93blByb3BlcnR5U2xvdEJ5SW5kZXhFdmVuV2hlbkxlbmd0
aElzTm90WmVybyB8IEpTQzo6T3ZlcnJpZGVzR2V0Q2FsbERhdGEgfCBKU0M6Ok92ZXJyaWRlc0dl
dE93blByb3BlcnR5U2xvdCB8IEpTQzo6UHJvaGliaXRzUHJvcGVydHlDYWNoaW5nOworICAgIHN0
YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVG
bGFncyB8IEpTQzo6SW50ZXJjZXB0c0dldE93blByb3BlcnR5U2xvdEJ5SW5kZXhFdmVuV2hlbkxl
bmd0aElzTm90WmVybyB8IEpTQzo6T3ZlcnJpZGVzR2V0Q2FsbERhdGEgfCBKU0M6Ok92ZXJyaWRl
c0dldE93blByb3BlcnR5U2xvdCB8IEpTQzo6T3ZlcnJpZGVzUHV0IHwgSlNDOjpQcm9oaWJpdHNQ
cm9wZXJ0eUNhY2hpbmc7CiBwcm90ZWN0ZWQ6CiAgICAgSlNUZXN0UGx1Z2luSW50ZXJmYWNlKEpT
Qzo6U3RydWN0dXJlKiwgSlNET01HbG9iYWxPYmplY3QmLCBSZWY8VGVzdFBsdWdpbkludGVyZmFj
ZT4mJik7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9ydW50aW1lX2FycmF5LmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYnJpZGdlL3J1bnRpbWVfYXJyYXkuaAkocmV2aXNp
b24gMjc4NTM5KQorKysgU291cmNlL1dlYkNvcmUvYnJpZGdlL3J1bnRpbWVfYXJyYXkuaAkod29y
a2luZyBjb3B5KQpAQCAtMzUsNyArMzUsNyBAQCBuYW1lc3BhY2UgSlNDIHsKIGNsYXNzIFJ1bnRp
bWVBcnJheSBmaW5hbCA6IHB1YmxpYyBKU0FycmF5IHsKIHB1YmxpYzoKICAgICB1c2luZyBCYXNl
ID0gSlNBcnJheTsKLSAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdz
ID0gQmFzZTo6U3RydWN0dXJlRmxhZ3MgfCBPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3QgfCBP
dmVycmlkZXNHZXRPd25Qcm9wZXJ0eU5hbWVzIHwgSW50ZXJjZXB0c0dldE93blByb3BlcnR5U2xv
dEJ5SW5kZXhFdmVuV2hlbkxlbmd0aElzTm90WmVybzsKKyAgICBzdGF0aWMgY29uc3RleHByIHVu
c2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxhZ3MgfCBPdmVycmlkZXNH
ZXRPd25Qcm9wZXJ0eVNsb3QgfCBPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eU5hbWVzIHwgT3ZlcnJp
ZGVzUHV0IHwgSW50ZXJjZXB0c0dldE93blByb3BlcnR5U2xvdEJ5SW5kZXhFdmVuV2hlbkxlbmd0
aElzTm90WmVybzsKICAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNEZXN0cnVjdGlvbiA9
IHRydWU7CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDZWxsVHlwZSwgSlNDOjpTdWJzcGFjZUFj
Y2Vzcz4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9ydW50aW1lX29iamVjdC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9ydW50aW1lX29iamVjdC5oCShyZXZpc2lv
biAyNzg1MzkpCisrKyBTb3VyY2UvV2ViQ29yZS9icmlkZ2UvcnVudGltZV9vYmplY3QuaAkod29y
a2luZyBjb3B5KQpAQCAtMzcsNyArMzcsNyBAQCBFeGNlcHRpb24qIHRocm93UnVudGltZU9iamVj
dEludmFsaWRBY2NlCiBjbGFzcyBXRUJDT1JFX0VYUE9SVCBSdW50aW1lT2JqZWN0IDogcHVibGlj
IEpTTm9uRmluYWxPYmplY3QgewogcHVibGljOgogICAgIHVzaW5nIEJhc2UgPSBKU05vbkZpbmFs
T2JqZWN0OwotICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBC
YXNlOjpTdHJ1Y3R1cmVGbGFncyB8IE92ZXJyaWRlc0dldE93blByb3BlcnR5U2xvdCB8IE92ZXJy
aWRlc0dldE93blByb3BlcnR5TmFtZXMgfCBPdmVycmlkZXNHZXRDYWxsRGF0YSB8IEdldE93blBy
b3BlcnR5U2xvdE1heUJlV3JvbmdBYm91dERvbnRFbnVtOworICAgIHN0YXRpYyBjb25zdGV4cHIg
dW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8IE92ZXJyaWRl
c0dldE93blByb3BlcnR5U2xvdCB8IE92ZXJyaWRlc0dldE93blByb3BlcnR5TmFtZXMgfCBPdmVy
cmlkZXNHZXRDYWxsRGF0YSB8IE92ZXJyaWRlc1B1dCB8IEdldE93blByb3BlcnR5U2xvdE1heUJl
V3JvbmdBYm91dERvbnRFbnVtOwogICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0Rlc3Ry
dWN0aW9uID0gdHJ1ZTsKIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIENlbGxUeXBlLCBKU0M6OlN1
YnNwYWNlQWNjZXNzPgpJbmRleDogU291cmNlL1dlYkNvcmUvYnJpZGdlL29iamMvb2JqY19ydW50
aW1lLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYnJpZGdlL29iamMvb2JqY19ydW50
aW1lLmgJKHJldmlzaW9uIDI3ODUzOSkKKysrIFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9vYmpjL29i
amNfcnVudGltZS5oCSh3b3JraW5nIGNvcHkpCkBAIC05MSw3ICs5MSw3IEBAIHByaXZhdGU6CiBj
bGFzcyBPYmpjRmFsbGJhY2tPYmplY3RJbXAgZmluYWwgOiBwdWJsaWMgSlNEZXN0cnVjdGlibGVP
YmplY3QgewogcHVibGljOgogICAgIHVzaW5nIEJhc2UgPSBKU0Rlc3RydWN0aWJsZU9iamVjdDsK
LSAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3Ry
dWN0dXJlRmxhZ3MgfCBPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3QgfCBPdmVycmlkZXNHZXRD
YWxsRGF0YTsKKyAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0g
QmFzZTo6U3RydWN0dXJlRmxhZ3MgfCBPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3QgfCBPdmVy
cmlkZXNHZXRDYWxsRGF0YSB8IE92ZXJyaWRlc1B1dDsKICAgICBzdGF0aWMgY29uc3RleHByIGJv
b2wgbmVlZHNEZXN0cnVjdGlvbiA9IHRydWU7CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDZWxs
VHlwZSwgSlNDOjpTdWJzcGFjZUFjY2Vzcz4KSW5kZXg6IFNvdXJjZS9XZWJLaXQvQ2hhbmdlTG9n
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCShyZXZpc2lvbiAyNzg1Mzkp
CisrKyBTb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEy
IEBACisyMDIxLTA2LTA2ICBBbGV4ZXkgU2h2YXlrYSAgPHNodmFpa2FsZXNoQGdtYWlsLmNvbT4K
KworICAgICAgICBSZS1sYW5kIHIyNzY1OTIgd2l0aCBhIGZpeCBmb3IgcHV0KCkgb3ZlcnJpZGUg
aW4gcHJvdG90eXBlIGNoYWluIG9mIGEgSlNQcm94eQorICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjI2MTg1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgKiBXZWJQcm9jZXNzL1BsdWdpbnMvTmV0c2NhcGUvSlNO
UE9iamVjdC5oOgorCiAyMDIxLTA2LTA2ICBKZWFuLVl2ZXMgQXZlbmFyZCAgPGp5YUBhcHBsZS5j
b20+CiAKICAgICAgICAgW0dQVVBdW01TRV0gUXVvdGFFeGNlZWRlZEVycm9yIEV4Y2VwdGlvbiBu
b3QgdGhyb3duIGV2ZW4gaWYgdGhlIHN1bSBvZiB0b3RhbFRyYWNrQnVmZmVyU2l6ZSBhbmQgYXBw
ZW5kQnVmZmVyIHNpemUgZXhjZWVkcyBtYXhpbXVtQnVmZmVyU2l6ZQpJbmRleDogU291cmNlL1dl
YktpdC9XZWJQcm9jZXNzL1BsdWdpbnMvTmV0c2NhcGUvSlNOUE9iamVjdC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9QbHVnaW5zL05ldHNjYXBlL0pTTlBPYmplY3Qu
aAkocmV2aXNpb24gMjc4NTM5KQorKysgU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1BsdWdpbnMv
TmV0c2NhcGUvSlNOUE9iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC00NCw3ICs0NCw3IEBAIGNs
YXNzIE5QUnVudGltZU9iamVjdE1hcDsKIGNsYXNzIEpTTlBPYmplY3QgZmluYWwgOiBwdWJsaWMg
SlNDOjpKU0Rlc3RydWN0aWJsZU9iamVjdCB7CiBwdWJsaWM6CiAgICAgdXNpbmcgQmFzZSA9IEpT
Qzo6SlNEZXN0cnVjdGlibGVPYmplY3Q7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBT
dHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwgSlNDOjpPdmVycmlkZXNHZXRP
d25Qcm9wZXJ0eVNsb3QgfCBKU0M6Ok92ZXJyaWRlc0dldE93blByb3BlcnR5TmFtZXMgfCBKU0M6
Ok92ZXJyaWRlc0dldENhbGxEYXRhIHwgSlNDOjpHZXRPd25Qcm9wZXJ0eVNsb3RNYXlCZVdyb25n
QWJvdXREb250RW51bTsKKyAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIFN0cnVjdHVyZUZs
YWdzID0gQmFzZTo6U3RydWN0dXJlRmxhZ3MgfCBKU0M6Ok92ZXJyaWRlc0dldE93blByb3BlcnR5
U2xvdCB8IEpTQzo6T3ZlcnJpZGVzR2V0T3duUHJvcGVydHlOYW1lcyB8IEpTQzo6T3ZlcnJpZGVz
R2V0Q2FsbERhdGEgfCBKU0M6Ok92ZXJyaWRlc1B1dCB8IEpTQzo6R2V0T3duUHJvcGVydHlTbG90
TWF5QmVXcm9uZ0Fib3V0RG9udEVudW07CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDZWxsVHlw
ZSwgSlNDOjpTdWJzcGFjZUFjY2Vzcz4KICAgICBzdGF0aWMgSlNDOjpJc29TdWJzcGFjZSogc3Vi
c3BhY2VGb3IoSlNDOjpWTSYgdm0pCkluZGV4OiBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCShyZXZpc2lvbiAyNzg1MzkpCisrKyBMYXlv
dXRUZXN0cy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxNSBAQAorMjAyMS0w
Ni0wNiAgQWxleGV5IFNodmF5a2EgIDxzaHZhaWthbGVzaEBnbWFpbC5jb20+CisKKyAgICAgICAg
UmUtbGFuZCByMjc2NTkyIHdpdGggYSBmaXggZm9yIHB1dCgpIG92ZXJyaWRlIGluIHByb3RvdHlw
ZSBjaGFpbiBvZiBhIEpTUHJveHkKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTIyNjE4NQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgICogaHR0cC90ZXN0cy9zZWN1cml0eS9jcm9zcy1mcmFtZS1hY2Nlc3Mtb2Jq
ZWN0LWdldFByb3RvdHlwZU9mLWluLXB1dC1leHBlY3RlZC50eHQ6CisgICAgICAgICogaHR0cC90
ZXN0cy9zZWN1cml0eS9jcm9zcy1mcmFtZS1hY2Nlc3Mtb2JqZWN0LWdldFByb3RvdHlwZU9mLWlu
LXB1dC5odG1sOgorICAgICAgICAqIGpzL2RvbS9yZWZsZWN0LXNldC1vbnRvLWRvbS1leHBlY3Rl
ZC50eHQ6CisgICAgICAgICoganMvZG9tL3NjcmlwdC10ZXN0cy9yZWZsZWN0LXNldC1vbnRvLWRv
bS5qczoKKwogMjAyMS0wNi0wNiAgQWxhbiBCdWp0YXMgIDx6YWxhbkBhcHBsZS5jb20+CiAKICAg
ICAgICAgW0xGQ11bVEZDXSBBZG9wdCBhIGxlc3MgcXVpcmt5IGZpeGVkIGNvbHVtbiB3aWR0aCBz
cGFjZSBkaXN0cmlidXRpb24KSW5kZXg6IExheW91dFRlc3RzL2h0dHAvdGVzdHMvc2VjdXJpdHkv
Y3Jvc3MtZnJhbWUtYWNjZXNzLW9iamVjdC1nZXRQcm90b3R5cGVPZi1pbi1wdXQtZXhwZWN0ZWQu
dHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2h0dHAvdGVzdHMvc2VjdXJpdHkvY3Jvc3Mt
ZnJhbWUtYWNjZXNzLW9iamVjdC1nZXRQcm90b3R5cGVPZi1pbi1wdXQtZXhwZWN0ZWQudHh0CShy
ZXZpc2lvbiAyNzg1MzkpCisrKyBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3NlY3VyaXR5L2Nyb3Nz
LWZyYW1lLWFjY2Vzcy1vYmplY3QtZ2V0UHJvdG90eXBlT2YtaW4tcHV0LWV4cGVjdGVkLnR4dAko
d29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDcgQEAKIFRoaXMgdGVzdHMgdGhhdCB5b3UgY2FuJ3Qg
Z2V0IHRoZSBwcm90b3R5cGUgb2YgdGhlIHdpbmRvdyBkdXJpbmcgW1tQdXRdXSBvcGVyYXRpb24u
CiAKK1BBU1MgYXJyYXkuY29jb2EgPSBjb2NvYVZhbHVlIHRocmV3IGV4Y2VwdGlvbiBTZWN1cml0
eUVycm9yOiBCbG9ja2VkIGEgZnJhbWUgd2l0aCBvcmlnaW4gImh0dHA6Ly8xMjcuMC4wLjE6ODAw
MCIgZnJvbSBhY2Nlc3NpbmcgYSBjcm9zcy1vcmlnaW4gZnJhbWUuIFByb3RvY29scywgZG9tYWlu
cywgYW5kIHBvcnRzIG11c3QgbWF0Y2guLgorUEFTUyAnc3RyJy5jb2NvYSA9IGNvY29hVmFsdWUg
dGhyZXcgZXhjZXB0aW9uIFNlY3VyaXR5RXJyb3I6IEJsb2NrZWQgYSBmcmFtZSB3aXRoIG9yaWdp
biAiaHR0cDovLzEyNy4wLjAuMTo4MDAwIiBmcm9tIGFjY2Vzc2luZyBhIGNyb3NzLW9yaWdpbiBm
cmFtZS4gUHJvdG9jb2xzLCBkb21haW5zLCBhbmQgcG9ydHMgbXVzdCBtYXRjaC4uCiBQQVNTOiBz
dWNjZXNzZnVsbHlQYXJzZWQgc2hvdWxkIGJlICd0cnVlJyBhbmQgaXMuCiAKIFRFU1QgQ09NUExF
VEUKSW5kZXg6IExheW91dFRlc3RzL2h0dHAvdGVzdHMvc2VjdXJpdHkvY3Jvc3MtZnJhbWUtYWNj
ZXNzLW9iamVjdC1nZXRQcm90b3R5cGVPZi1pbi1wdXQuaHRtbAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlv
dXRUZXN0cy9odHRwL3Rlc3RzL3NlY3VyaXR5L2Nyb3NzLWZyYW1lLWFjY2Vzcy1vYmplY3QtZ2V0
UHJvdG90eXBlT2YtaW4tcHV0Lmh0bWwJKHJldmlzaW9uIDI3ODUzOSkKKysrIExheW91dFRlc3Rz
L2h0dHAvdGVzdHMvc2VjdXJpdHkvY3Jvc3MtZnJhbWUtYWNjZXNzLW9iamVjdC1nZXRQcm90b3R5
cGVPZi1pbi1wdXQuaHRtbAkod29ya2luZyBjb3B5KQpAQCAtMTUsNyArMTUsNyBAQAogICAgICAg
ICBkb1Rlc3QgPSBmdW5jdGlvbigpCiAgICAgICAgIHsKICAgICAgICAgICAgIHRhcmdldFdpbmRv
dyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJ0YXJnZXQiKS5jb250ZW50V2luZG93OwotICAg
ICAgICAgICAgdmFyIGFycmF5ID0gW107CisgICAgICAgICAgICBhcnJheSA9IFtdOwogICAgICAg
ICAgICAgYXJyYXkuX19wcm90b19fLl9fcHJvdG9fXyA9IHRhcmdldFdpbmRvdzsKICAgICAgICAg
ICAgIGFycmF5WzBdID0gMTEuMTE7CiAgICAgICAgICAgICBhcnJheVsyXSA9IDIyLjIyOwpAQCAt
MjQsMTEgKzI0LDE1IEBACiAgICAgICAgICAgICAgICAgICAgIHRlc3RGYWlsZWQoInRvU3RyaW5n
IGlzIGNhbGxlZCBieSAxMDEwMTAxMCBzZXR0ZXIiKTsKICAgICAgICAgICAgICAgICB9CiAgICAg
ICAgICAgICB9OwotICAgICAgICAgICAgYXJyYXlbImNvY29hIl0gPSB7CisgICAgICAgICAgICBj
b2NvYVZhbHVlID0gewogICAgICAgICAgICAgICAgIHRvU3RyaW5nKCkgewogICAgICAgICAgICAg
ICAgICAgICB0ZXN0RmFpbGVkKCJ0b1N0cmluZyBpcyBjYWxsZWQgYnkgY29jb2Egc2V0dGVyIik7
CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfTsKKyAgICAgICAgICAgIHNob3VsZFRo
cm93RXJyb3JOYW1lKCJhcnJheS5jb2NvYSA9IGNvY29hVmFsdWUiLCAiU2VjdXJpdHlFcnJvciIp
OworCisgICAgICAgICAgICBPYmplY3Quc2V0UHJvdG90eXBlT2YoU3RyaW5nLnByb3RvdHlwZSwg
dGFyZ2V0V2luZG93KTsKKyAgICAgICAgICAgIHNob3VsZFRocm93RXJyb3JOYW1lKCInc3RyJy5j
b2NvYSA9IGNvY29hVmFsdWUiLCAiU2VjdXJpdHlFcnJvciIpOwogICAgICAgICAgICAgZmluaXNo
SlNUZXN0KCk7CiAgICAgICAgIH0KICAgICA8L3NjcmlwdD4KSW5kZXg6IExheW91dFRlc3RzL2lt
cG9ydGVkL3czYy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvaW1wb3J0ZWQv
dzNjL0NoYW5nZUxvZwkocmV2aXNpb24gMjc4NTM5KQorKysgTGF5b3V0VGVzdHMvaW1wb3J0ZWQv
dzNjL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE2IEBACisyMDIxLTA2LTA2
ICBBbGV4ZXkgU2h2YXlrYSAgPHNodmFpa2FsZXNoQGdtYWlsLmNvbT4KKworICAgICAgICBSZS1s
YW5kIHIyNzY1OTIgd2l0aCBhIGZpeCBmb3IgcHV0KCkgb3ZlcnJpZGUgaW4gcHJvdG90eXBlIGNo
YWluIG9mIGEgSlNQcm94eQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MjI2MTg1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgKiB3ZWItcGxhdGZvcm0tdGVzdHMvV2ViSURML2VjbWFzY3JpcHQtYmluZGluZy9n
bG9iYWwtb2JqZWN0LWltcGxpY2l0LXRoaXMtdmFsdWUuYW55LWV4cGVjdGVkLnR4dDoKKyAgICAg
ICAgKiB3ZWItcGxhdGZvcm0tdGVzdHMvV2ViSURML2VjbWFzY3JpcHQtYmluZGluZy9pbnRlcmZh
Y2Utb2JqZWN0LXNldC1yZWNlaXZlci1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIHdl
Yi1wbGF0Zm9ybS10ZXN0cy9XZWJJREwvZWNtYXNjcmlwdC1iaW5kaW5nL2ludGVyZmFjZS1vYmpl
Y3Qtc2V0LXJlY2VpdmVyLmh0bWw6IEFkZGVkLgorICAgICAgICAqIHdlYi1wbGF0Zm9ybS10ZXN0
cy9XZWJJREwvZWNtYXNjcmlwdC1iaW5kaW5nL2ludGVyZmFjZS1wcm90b3R5cGUtY29uc3RydWN0
b3Itc2V0LXJlY2VpdmVyLWV4cGVjdGVkLnR4dDoKKyAgICAgICAgKiB3ZWItcGxhdGZvcm0tdGVz
dHMvV2ViSURML2VjbWFzY3JpcHQtYmluZGluZy9pbnRlcmZhY2UtcHJvdG90eXBlLWNvbnN0cnVj
dG9yLXNldC1yZWNlaXZlci5odG1sOgorCiAyMDIxLTA2LTA0ICBDaHJpcyBEdW1leiAgPGNkdW1l
ekBhcHBsZS5jb20+CiAKICAgICAgICAgV29ya2VyLmNvbnN0cnVjdG9yIHRocm93cyBhbiBleGNl
cHRpb24gd2hlbiB0aGUgdXJsIHBhcmFtIGlzIGFuIGVtcHR5IHN0cmluZwpJbmRleDogTGF5b3V0
VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9XZWJJREwvZWNtYXNjcmlwdC1i
aW5kaW5nL2dsb2JhbC1vYmplY3QtaW1wbGljaXQtdGhpcy12YWx1ZS5hbnktZXhwZWN0ZWQudHh0
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVz
dHMvV2ViSURML2VjbWFzY3JpcHQtYmluZGluZy9nbG9iYWwtb2JqZWN0LWltcGxpY2l0LXRoaXMt
dmFsdWUuYW55LWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMjc4NTM5KQorKysgTGF5b3V0VGVzdHMv
aW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9XZWJJREwvZWNtYXNjcmlwdC1iaW5kaW5n
L2dsb2JhbC1vYmplY3QtaW1wbGljaXQtdGhpcy12YWx1ZS5hbnktZXhwZWN0ZWQudHh0CSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDYgKzEsNiBAQAogCiBQQVNTIEdsb2JhbCBvYmplY3QncyBnZXR0ZXIg
dGhyb3dzIHdoZW4gY2FsbGVkIG9uIGluY29tcGF0aWJsZSBvYmplY3QKLUZBSUwgR2xvYmFsIG9i
amVjdCdzIHNldHRlciB0aHJvd3Mgd2hlbiBjYWxsZWQgb24gaW5jb21wYXRpYmxlIG9iamVjdCBh
c3NlcnRfdGhyb3dzX2pzOiBmdW5jdGlvbiAiKCkgPT4geyBPYmplY3QuY3JlYXRlKGdsb2JhbFRo
aXMpLm9yaWdpbiA9IG9yaWdpbjsgfSIgZGlkIG5vdCB0aHJvdworUEFTUyBHbG9iYWwgb2JqZWN0
J3Mgc2V0dGVyIHRocm93cyB3aGVuIGNhbGxlZCBvbiBpbmNvbXBhdGlibGUgb2JqZWN0CiBQQVNT
IEdsb2JhbCBvYmplY3QncyBvcGVyYXRpb24gdGhyb3dzIHdoZW4gY2FsbGVkIG9uIGluY29tcGF0
aWJsZSBvYmplY3QKIFBBU1MgR2xvYmFsIG9iamVjdCdzIGdldHRlciB0aHJvd3Mgd2hlbiBjYWxs
ZWQgb24gaW5jb21wYXRpYmxlIG9iamVjdCAoZG9jdW1lbnQuYWxsKQogUEFTUyBHbG9iYWwgb2Jq
ZWN0J3Mgc2V0dGVyIHRocm93cyB3aGVuIGNhbGxlZCBvbiBpbmNvbXBhdGlibGUgb2JqZWN0IChk
b2N1bWVudC5hbGwpCkluZGV4OiBMYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3Jt
LXRlc3RzL1dlYklETC9lY21hc2NyaXB0LWJpbmRpbmcvaW50ZXJmYWNlLW9iamVjdC1zZXQtcmVj
ZWl2ZXItZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2ltcG9ydGVkL3cz
Yy93ZWItcGxhdGZvcm0tdGVzdHMvV2ViSURML2VjbWFzY3JpcHQtYmluZGluZy9pbnRlcmZhY2Ut
b2JqZWN0LXNldC1yZWNlaXZlci1leHBlY3RlZC50eHQJKG5vbmV4aXN0ZW50KQorKysgTGF5b3V0
VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9XZWJJREwvZWNtYXNjcmlwdC1i
aW5kaW5nL2ludGVyZmFjZS1vYmplY3Qtc2V0LXJlY2VpdmVyLWV4cGVjdGVkLnR4dAkod29ya2lu
ZyBjb3B5KQpAQCAtMCwwICsxLDQgQEAKKworUEFTUyBEaXJlY3QgW1tTZXRdXSBwcmVzZXJ2ZXMg
W1tFbnVtZXJhYmxlXV06IGZhbHNlIHByb3BlcnR5IGF0dHJpYnV0ZQorUEFTUyBQcm90b3R5cGUg
Y2hhaW4gW1tTZXRdXSBjcmVhdGVzIHByb3BlcnR5IG9uIHJlY2VpdmVyCisKSW5kZXg6IExheW91
dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvV2ViSURML2VjbWFzY3JpcHQt
YmluZGluZy9pbnRlcmZhY2Utb2JqZWN0LXNldC1yZWNlaXZlci5odG1sCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IExheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvV2ViSURML2VjbWFz
Y3JpcHQtYmluZGluZy9pbnRlcmZhY2Utb2JqZWN0LXNldC1yZWNlaXZlci5odG1sCShub25leGlz
dGVudCkKKysrIExheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvV2Vi
SURML2VjbWFzY3JpcHQtYmluZGluZy9pbnRlcmZhY2Utb2JqZWN0LXNldC1yZWNlaXZlci5odG1s
CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMzcgQEAKKzwhRE9DVFlQRSBodG1sPgorPG1ldGEg
Y2hhcnNldD0idXRmLTgiPgorPHRpdGxlPndpbmRvdy5JbnRlcmZhY2UgaXMgZGVmaW5lZCBvbiBb
W1NldF1dIHJlY2VpdmVyPC90aXRsZT4KKzxsaW5rIHJlbD0iaGVscCIgaHJlZj0iaHR0cHM6Ly9o
ZXljYW0uZ2l0aHViLmlvL3dlYmlkbC8jZGVmaW5lLXRoZS1nbG9iYWwtcHJvcGVydHktcmVmZXJl
bmNlcyI+Cis8c2NyaXB0IHNyYz0iL3Jlc291cmNlcy90ZXN0aGFybmVzcy5qcyI+PC9zY3JpcHQ+
Cis8c2NyaXB0IHNyYz0iL3Jlc291cmNlcy90ZXN0aGFybmVzc3JlcG9ydC5qcyI+PC9zY3JpcHQ+
Cis8c2NyaXB0PgorInVzZSBzdHJpY3QiOworY29uc3QgdGVzdFZhbHVlID0gT2JqZWN0LmZyZWV6
ZShmdW5jdGlvbigpIHt9KTsKKwordGVzdCgoKSA9PiB7CisgIHdpbmRvdy5XaW5kb3cgPSB0ZXN0
VmFsdWU7CisgIGFzc2VydF9mYWxzZSh3aW5kb3cucHJvcGVydHlJc0VudW1lcmFibGUoIldpbmRv
dyIpKTsKKworICB3aW5kb3cuSGlzdG9yeSA9IHRlc3RWYWx1ZTsKKyAgYXNzZXJ0X2ZhbHNlKHdp
bmRvdy5wcm9wZXJ0eUlzRW51bWVyYWJsZSgiSGlzdG9yeSIpKTsKKworICB3aW5kb3cuSFRNTERp
dkVsZW1lbnQgPSB0ZXN0VmFsdWU7CisgIGFzc2VydF9mYWxzZSh3aW5kb3cucHJvcGVydHlJc0Vu
dW1lcmFibGUoIkhUTUxEaXZFbGVtZW50IikpCit9LCAiRGlyZWN0IFtbU2V0XV0gcHJlc2VydmVz
IFtbRW51bWVyYWJsZV1dOiBmYWxzZSBwcm9wZXJ0eSBhdHRyaWJ1dGUiKTsKKwordGVzdCgoKSA9
PiB7CisgIGNvbnN0IGhlaXIgPSBPYmplY3QuY3JlYXRlKHdpbmRvdyk7CisKKyAgaGVpci5Mb2Nh
dGlvbiA9IHRlc3RWYWx1ZTsKKyAgYXNzZXJ0X2VxdWFscyhoZWlyLkxvY2F0aW9uLCB0ZXN0VmFs
dWUpOworICBhc3NlcnRfbm90X2VxdWFscyh3aW5kb3cuTG9jYXRpb24sIHRlc3RWYWx1ZSk7CisK
KyAgaGVpci5IVE1MRG9jdW1lbnQgPSB0ZXN0VmFsdWU7CisgIGFzc2VydF9lcXVhbHMoaGVpci5I
VE1MRG9jdW1lbnQsIHRlc3RWYWx1ZSk7CisgIGFzc2VydF9ub3RfZXF1YWxzKHdpbmRvdy5IVE1M
RG9jdW1lbnQsIHRlc3RWYWx1ZSk7CisKKyAgaGVpci5IVE1MUHJlRWxlbWVudCA9IHRlc3RWYWx1
ZTsKKyAgYXNzZXJ0X2VxdWFscyhoZWlyLkhUTUxQcmVFbGVtZW50LCB0ZXN0VmFsdWUpOworICBh
c3NlcnRfbm90X2VxdWFscyh3aW5kb3cuSFRNTFByZUVsZW1lbnQsIHRlc3RWYWx1ZSk7Cit9LCAi
UHJvdG90eXBlIGNoYWluIFtbU2V0XV0gY3JlYXRlcyBwcm9wZXJ0eSBvbiByZWNlaXZlciIpOwor
PC9zY3JpcHQ+CkluZGV4OiBMYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRl
c3RzL1dlYklETC9lY21hc2NyaXB0LWJpbmRpbmcvaW50ZXJmYWNlLXByb3RvdHlwZS1jb25zdHJ1
Y3Rvci1zZXQtcmVjZWl2ZXItZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3Rz
L2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvV2ViSURML2VjbWFzY3JpcHQtYmluZGlu
Zy9pbnRlcmZhY2UtcHJvdG90eXBlLWNvbnN0cnVjdG9yLXNldC1yZWNlaXZlci1leHBlY3RlZC50
eHQJKHJldmlzaW9uIDI3ODUzOSkKKysrIExheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxh
dGZvcm0tdGVzdHMvV2ViSURML2VjbWFzY3JpcHQtYmluZGluZy9pbnRlcmZhY2UtcHJvdG90eXBl
LWNvbnN0cnVjdG9yLXNldC1yZWNlaXZlci1leHBlY3RlZC50eHQJKHdvcmtpbmcgY29weSkKQEAg
LTEsNCArMSw0IEBACiAKLVBBU1MgV2luZG93LCBMb2NhdGlvbiwgTmF2aWdhdG9yLCBIVE1MRG9j
dW1lbnQsIGFuZCBIVE1MSGVhZEVsZW1lbnQKLVBBU1MgQWxsIHdpbmRvdy4qIGNvbnN0cnVjdG9y
cworUEFTUyBEaXJlY3QgW1tTZXRdXSBwcmVzZXJ2ZXMgW1tFbnVtZXJhYmxlXV06IGZhbHNlIHBy
b3BlcnR5IGF0dHJpYnV0ZQorUEFTUyBQcm90b3R5cGUgY2hhaW4gW1tTZXRdXSBjcmVhdGVzIHBy
b3BlcnR5IG9uIHJlY2VpdmVyCiAKSW5kZXg6IExheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWIt
cGxhdGZvcm0tdGVzdHMvV2ViSURML2VjbWFzY3JpcHQtYmluZGluZy9pbnRlcmZhY2UtcHJvdG90
eXBlLWNvbnN0cnVjdG9yLXNldC1yZWNlaXZlci5odG1sCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRl
c3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvV2ViSURML2VjbWFzY3JpcHQtYmlu
ZGluZy9pbnRlcmZhY2UtcHJvdG90eXBlLWNvbnN0cnVjdG9yLXNldC1yZWNlaXZlci5odG1sCShy
ZXZpc2lvbiAyNzg1MzkpCisrKyBMYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3Jt
LXRlc3RzL1dlYklETC9lY21hc2NyaXB0LWJpbmRpbmcvaW50ZXJmYWNlLXByb3RvdHlwZS1jb25z
dHJ1Y3Rvci1zZXQtcmVjZWl2ZXIuaHRtbAkod29ya2luZyBjb3B5KQpAQCAtNiw0MiArNiwzMSBA
QAogPHNjcmlwdCBzcmM9Ii9yZXNvdXJjZXMvdGVzdGhhcm5lc3NyZXBvcnQuanMiPjwvc2NyaXB0
PgogPHNjcmlwdD4KICJ1c2Ugc3RyaWN0IjsKK2NvbnN0IHRlc3RWYWx1ZSA9IE9iamVjdC5mcmVl
emUoZnVuY3Rpb24oKSB7fSk7CiAKIHRlc3QoKCkgPT4gewotICB3aW5kb3cuY29uc3RydWN0b3Ig
PSBudWxsOwotICBhc3NlcnRfZXF1YWxzKFdpbmRvdy5wcm90b3R5cGUuY29uc3RydWN0b3IsIFdp
bmRvdyk7Ci0KLSAgbG9jYXRpb24uY29uc3RydWN0b3IgPSBmYWxzZTsKLSAgYXNzZXJ0X2VxdWFs
cyhMb2NhdGlvbi5wcm90b3R5cGUuY29uc3RydWN0b3IsIExvY2F0aW9uKTsKLQotICBuYXZpZ2F0
b3IuY29uc3RydWN0b3IgPSAxOwotICBhc3NlcnRfZXF1YWxzKE5hdmlnYXRvci5wcm90b3R5cGUu
Y29uc3RydWN0b3IsIE5hdmlnYXRvcik7CisgIExvY2F0aW9uLnByb3RvdHlwZS5jb25zdHJ1Y3Rv
ciA9IHRlc3RWYWx1ZTsKKyAgYXNzZXJ0X2ZhbHNlKExvY2F0aW9uLnByb3RvdHlwZS5wcm9wZXJ0
eUlzRW51bWVyYWJsZSgiY29uc3RydWN0b3IiKSk7CiAKLSAgZG9jdW1lbnQuY29uc3RydWN0b3Ig
PSB7fTsKLSAgYXNzZXJ0X2VxdWFscyhIVE1MRG9jdW1lbnQucHJvdG90eXBlLmNvbnN0cnVjdG9y
LCBIVE1MRG9jdW1lbnQpOworICBIVE1MRG9jdW1lbnQucHJvdG90eXBlLmNvbnN0cnVjdG9yID0g
dGVzdFZhbHVlOworICBhc3NlcnRfZmFsc2UoSFRNTERvY3VtZW50LnByb3RvdHlwZS5wcm9wZXJ0
eUlzRW51bWVyYWJsZSgiY29uc3RydWN0b3IiKSk7CiAKLSAgZG9jdW1lbnQuaGVhZC5jb25zdHJ1
Y3RvciA9IFtdOwotICBhc3NlcnRfZXF1YWxzKEhUTUxIZWFkRWxlbWVudC5wcm90b3R5cGUuY29u
c3RydWN0b3IsIEhUTUxIZWFkRWxlbWVudCk7Ci19LCAiV2luZG93LCBMb2NhdGlvbiwgTmF2aWdh
dG9yLCBIVE1MRG9jdW1lbnQsIGFuZCBIVE1MSGVhZEVsZW1lbnQiKTsKKyAgSFRNTERpdkVsZW1l
bnQucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gdGVzdFZhbHVlOworICBhc3NlcnRfZmFsc2UoSFRN
TERpdkVsZW1lbnQucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlKCJjb25zdHJ1Y3RvciIp
KTsKK30sICJEaXJlY3QgW1tTZXRdXSBwcmVzZXJ2ZXMgW1tFbnVtZXJhYmxlXV06IGZhbHNlIHBy
b3BlcnR5IGF0dHJpYnV0ZSIpOwogCiB0ZXN0KCgpID0+IHsKLSAgZm9yIChsZXQga2V5IG9mIE9i
amVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHdpbmRvdykpIHsKLSAgICBpZiAoIS9eW0EtWl0vLnRl
c3Qoa2V5KSkgY29udGludWU7CisgIHdpbmRvdy5jb25zdHJ1Y3RvciA9IHRlc3RWYWx1ZTsKKyAg
YXNzZXJ0X2VxdWFscyh3aW5kb3cuY29uc3RydWN0b3IsIHRlc3RWYWx1ZSk7CisgIGFzc2VydF9l
cXVhbHMoV2luZG93LnByb3RvdHlwZS5jb25zdHJ1Y3RvciwgV2luZG93KTsKKworICBuYXZpZ2F0
b3IuY29uc3RydWN0b3IgPSB0ZXN0VmFsdWU7CisgIGFzc2VydF9lcXVhbHMobmF2aWdhdG9yLmNv
bnN0cnVjdG9yLCB0ZXN0VmFsdWUpOworICBhc3NlcnRfZXF1YWxzKE5hdmlnYXRvci5wcm90b3R5
cGUuY29uc3RydWN0b3IsIE5hdmlnYXRvcik7CiAKLSAgICBsZXQgZGVzYyA9IE9iamVjdC5nZXRP
d25Qcm9wZXJ0eURlc2NyaXB0b3Iod2luZG93LCBrZXkpOwotICAgIGlmICghZGVzYyB8fCBkZXNj
LmVudW1lcmFibGUpIGNvbnRpbnVlOwotICAgIGxldCB7dmFsdWV9ID0gZGVzYzsKLSAgICBpZiAo
dHlwZW9mIHZhbHVlICE9PSAiZnVuY3Rpb24iKSBjb250aW51ZTsKLSAgICBsZXQge3Byb3RvdHlw
ZX0gPSB2YWx1ZTsKLSAgICBpZiAoIXByb3RvdHlwZSkgY29udGludWU7Ci0KLSAgICBsZXQgaGVp
ciA9IE9iamVjdC5jcmVhdGUocHJvdG90eXBlKTsKLSAgICBsZXQgbmV3Q29uc3RydWN0b3IgPSBm
dW5jdGlvbigpIHt9OwotICAgIGhlaXIuY29uc3RydWN0b3IgPSBuZXdDb25zdHJ1Y3RvcjsKLQot
ICAgIGFzc2VydF9ub3RfZXF1YWxzKHByb3RvdHlwZS5jb25zdHJ1Y3RvciwgbmV3Q29uc3RydWN0
b3IsIGtleSk7Ci0gICAgYXNzZXJ0X293bl9wcm9wZXJ0eShoZWlyLCAiY29uc3RydWN0b3IiLCBr
ZXkpOwotICAgIGFzc2VydF9lcXVhbHMoaGVpci5jb25zdHJ1Y3RvciwgbmV3Q29uc3RydWN0b3Is
IGtleSk7Ci0gIH0KLX0sICJBbGwgd2luZG93LiogY29uc3RydWN0b3JzIik7CisgIGNvbnN0IHNw
YW4gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzcGFuIik7CisgIHNwYW4uY29uc3RydWN0b3Ig
PSB0ZXN0VmFsdWU7CisgIGFzc2VydF9lcXVhbHMoc3Bhbi5jb25zdHJ1Y3RvciwgdGVzdFZhbHVl
KTsKKyAgYXNzZXJ0X2VxdWFscyhIVE1MU3BhbkVsZW1lbnQucHJvdG90eXBlLmNvbnN0cnVjdG9y
LCBIVE1MU3BhbkVsZW1lbnQpOworfSwgIlByb3RvdHlwZSBjaGFpbiBbW1NldF1dIGNyZWF0ZXMg
cHJvcGVydHkgb24gcmVjZWl2ZXIiKTsKIDwvc2NyaXB0PgpJbmRleDogTGF5b3V0VGVzdHMvanMv
ZG9tL3JlZmxlY3Qtc2V0LW9udG8tZG9tLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlv
dXRUZXN0cy9qcy9kb20vcmVmbGVjdC1zZXQtb250by1kb20tZXhwZWN0ZWQudHh0CShyZXZpc2lv
biAyNzg1MzkpCisrKyBMYXlvdXRUZXN0cy9qcy9kb20vcmVmbGVjdC1zZXQtb250by1kb20tZXhw
ZWN0ZWQudHh0CSh3b3JraW5nIGNvcHkpCkBAIC05MywxMyArOTMsMTMgQEAgUEFTUyBSZWZsZWN0
LmdldChkb2N1bWVudC5ib2R5LmRhdGFzZXQsIAogUEFTUyBSZWZsZWN0LnNldChkb2N1bWVudC5i
b2R5LmRhdGFzZXQsICJjb2NvYS1jYXBwdWNjaW5vIiwgInN3ZWV0IikgdGhyZXcgZXhjZXB0aW9u
IFN5bnRheEVycm9yOiBUaGUgc3RyaW5nIGRpZCBub3QgbWF0Y2ggdGhlIGV4cGVjdGVkIHBhdHRl
cm4uLgogUEFTUyBSZWZsZWN0LnNldChkb2N1bWVudC5ib2R5LmRhdGFzZXQsIDAsICJzd2VldCIp
IGlzIHRydWUKIFBBU1MgUmVmbGVjdC5nZXQoZG9jdW1lbnQuYm9keS5kYXRhc2V0LCAwKSBpcyAi
c3dlZXQiCi1ET01TdHJpbmdNYXAgaWdub3JlcyB0aGUgcmVjZWl2ZXIuIFRoZXNlIHB1dERlbGVn
YXRlIG9ubHkgd29yayB3aXRoIDo6cHV0IChub3QgOjpkZWZpbmVPd25Qcm9wZXJ0eSkuIFNvIHRo
ZXkgYmVoYXZlIGFzIHRoZSBzcGVjaWFsIHNldHRlciwgd2Ugc2hvdWxkIG5vdCBmYWxsYmFjayB0
byB0aGUgT3JkaW5hcnlTZXQuCitET01TdHJpbmdNYXAgZmFsbHMgYmFjayB0byBPcmRpbmFyeVNl
dCBpZiByZWNlaXZlciBpcyBhbHRlcmVkLgogUEFTUyBSZWZsZWN0LnNldChkb2N1bWVudC5ib2R5
LmRhdGFzZXQsICJjb2NvYSIsICJvayIsIHJlY2VpdmVyKSBpcyB0cnVlCi1QQVNTIFJlZmxlY3Qu
Z2V0KGRvY3VtZW50LmJvZHkuZGF0YXNldCwgImNvY29hIikgaXMgIm9rIgotUEFTUyBSZWZsZWN0
LmdldChyZWNlaXZlciwgImNvY29hIikgaXMgdW5kZWZpbmVkCitQQVNTIFJlZmxlY3QuZ2V0KGRv
Y3VtZW50LmJvZHkuZGF0YXNldCwgImNvY29hIikgaXMgInN3ZWV0IgorUEFTUyBSZWZsZWN0Lmdl
dChyZWNlaXZlciwgImNvY29hIikgaXMgIm9rIgogUEFTUyBSZWZsZWN0LnNldChkb2N1bWVudC5i
b2R5LmRhdGFzZXQsIDAsICJvayIsIHJlY2VpdmVyKSBpcyB0cnVlCi1QQVNTIFJlZmxlY3QuZ2V0
KGRvY3VtZW50LmJvZHkuZGF0YXNldCwgMCkgaXMgIm9rIgotUEFTUyBSZWZsZWN0LmdldChyZWNl
aXZlciwgMCkgaXMgdW5kZWZpbmVkCitQQVNTIFJlZmxlY3QuZ2V0KGRvY3VtZW50LmJvZHkuZGF0
YXNldCwgMCkgaXMgInN3ZWV0IgorUEFTUyBSZWZsZWN0LmdldChyZWNlaXZlciwgMCkgaXMgIm9r
IgogQ3VzdG9tSW5kZXhlZFNldHRlcgogUEFTUyBSZWZsZWN0LmdldChzZWxlY3QsIDApLnZhbHVl
IGlzICJjb2NvYSIKIFBBU1MgUmVmbGVjdC5nZXQoc2VsZWN0LCAibGVuZ3RoIikgaXMgMwpAQCAt
MTExLDEwICsxMTEsMTAgQEAgUEFTUyBSZWZsZWN0LmdldChzZWxlY3QsICJsZW5ndGgiKSBpcyA0
MgogUEFTUyBSZWZsZWN0LnNldChzZWxlY3QsIDQ0LCBvcHRpb24yKSBpcyB0cnVlCiBQQVNTIFJl
ZmxlY3QuZ2V0KHNlbGVjdCwgNDQpLnZhbHVlIGlzICJraWxpbWFuamFybyIKIFBBU1MgUmVmbGVj
dC5zZXQoc2VsZWN0LCAyMCwgIktpbGltYW5qYXJvIikgdGhyZXcgZXhjZXB0aW9uIFR5cGVFcnJv
cjogVHlwZSBlcnJvci4KLUN1c3RvbUluZGV4ZWRTZXR0ZXIgaWdub3JlcyB0aGUgcmVjZWl2ZXIu
IFRoZXNlIG1ldGhvZHMgb25seSB3b3JrIHdpdGggOjpwdXQgKG5vdCA6OmRlZmluZU93blByb3Bl
cnR5KS4gU28gdGhleSBiZWhhdmUgYXMgdGhlIHNwZWNpYWwgc2V0dGVyLCB3ZSBzaG91bGQgbm90
IGZhbGxiYWNrIHRvIHRoZSBPcmRpbmFyeVNldC4KK0N1c3RvbUluZGV4ZWRTZXR0ZXIgZmFsbHMg
YmFjayB0byBPcmRpbmFyeVNldCBpZiByZWNlaXZlciBpcyBhbHRlcmVkLgogUEFTUyBSZWZsZWN0
LnNldChzZWxlY3QsIDAsIG9wdGlvbjMsIHJlY2VpdmVyKSBpcyB0cnVlCi1QQVNTIFJlZmxlY3Qu
Z2V0KHJlY2VpdmVyLCAwKSBpcyB1bmRlZmluZWQKLVBBU1MgUmVmbGVjdC5nZXQoc2VsZWN0LCAw
KSBpcyBvcHRpb24zCitQQVNTIFJlZmxlY3QuZ2V0KHJlY2VpdmVyLCAwKSBpcyBvcHRpb24zCitQ
QVNTIFJlZmxlY3QuZ2V0KHNlbGVjdCwgMCkgaXMgc2VsZWN0LmNoaWxkcmVuWzBdCiBQQVNTIHN1
Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCiAKIFRFU1QgQ09NUExFVEUKSW5kZXg6IExheW91dFRl
c3RzL2pzL2RvbS9zY3JpcHQtdGVzdHMvcmVmbGVjdC1zZXQtb250by1kb20uanMKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gTGF5b3V0VGVzdHMvanMvZG9tL3NjcmlwdC10ZXN0cy9yZWZsZWN0LXNldC1vbnRvLWRv
bS5qcwkocmV2aXNpb24gMjc4NTM5KQorKysgTGF5b3V0VGVzdHMvanMvZG9tL3NjcmlwdC10ZXN0
cy9yZWZsZWN0LXNldC1vbnRvLWRvbS5qcwkod29ya2luZyBjb3B5KQpAQCAtMTE2LDE1ICsxMTYs
MTUgQEAgc2hvdWxkVGhyb3coYFJlZmxlY3Quc2V0KGRvY3VtZW50LmJvZHkuZAogc2hvdWxkQmUo
YFJlZmxlY3Quc2V0KGRvY3VtZW50LmJvZHkuZGF0YXNldCwgMCwgInN3ZWV0IilgLCBgdHJ1ZWAp
Owogc2hvdWxkQmUoYFJlZmxlY3QuZ2V0KGRvY3VtZW50LmJvZHkuZGF0YXNldCwgMClgLCBgInN3
ZWV0ImApOwogCi1kZWJ1ZygiRE9NU3RyaW5nTWFwIGlnbm9yZXMgdGhlIHJlY2VpdmVyLiBUaGVz
ZSBwdXREZWxlZ2F0ZSBvbmx5IHdvcmsgd2l0aCA6OnB1dCAobm90IDo6ZGVmaW5lT3duUHJvcGVy
dHkpLiBTbyB0aGV5IGJlaGF2ZSBhcyB0aGUgc3BlY2lhbCBzZXR0ZXIsIHdlIHNob3VsZCBub3Qg
ZmFsbGJhY2sgdG8gdGhlIE9yZGluYXJ5U2V0LiIpOworZGVidWcoIkRPTVN0cmluZ01hcCBmYWxs
cyBiYWNrIHRvIE9yZGluYXJ5U2V0IGlmIHJlY2VpdmVyIGlzIGFsdGVyZWQuIik7CiB2YXIgcmVj
ZWl2ZXIgPSB7fTsKIHNob3VsZEJlKGBSZWZsZWN0LnNldChkb2N1bWVudC5ib2R5LmRhdGFzZXQs
ICJjb2NvYSIsICJvayIsIHJlY2VpdmVyKWAsIGB0cnVlYCk7Ci1zaG91bGRCZShgUmVmbGVjdC5n
ZXQoZG9jdW1lbnQuYm9keS5kYXRhc2V0LCAiY29jb2EiKWAsIGAib2siYCk7Ci1zaG91bGRCZShg
UmVmbGVjdC5nZXQocmVjZWl2ZXIsICJjb2NvYSIpYCwgYHVuZGVmaW5lZGApOworc2hvdWxkQmUo
YFJlZmxlY3QuZ2V0KGRvY3VtZW50LmJvZHkuZGF0YXNldCwgImNvY29hIilgLCBgInN3ZWV0ImAp
Oworc2hvdWxkQmUoYFJlZmxlY3QuZ2V0KHJlY2VpdmVyLCAiY29jb2EiKWAsIGAib2siYCk7CiB2
YXIgcmVjZWl2ZXIgPSB7fTsKIHNob3VsZEJlKGBSZWZsZWN0LnNldChkb2N1bWVudC5ib2R5LmRh
dGFzZXQsIDAsICJvayIsIHJlY2VpdmVyKWAsIGB0cnVlYCk7Ci1zaG91bGRCZShgUmVmbGVjdC5n
ZXQoZG9jdW1lbnQuYm9keS5kYXRhc2V0LCAwKWAsIGAib2siYCk7Ci1zaG91bGRCZShgUmVmbGVj
dC5nZXQocmVjZWl2ZXIsIDApYCwgYHVuZGVmaW5lZGApOworc2hvdWxkQmUoYFJlZmxlY3QuZ2V0
KGRvY3VtZW50LmJvZHkuZGF0YXNldCwgMClgLCBgInN3ZWV0ImApOworc2hvdWxkQmUoYFJlZmxl
Y3QuZ2V0KHJlY2VpdmVyLCAwKWAsIGAib2siYCk7CiAKIGRlYnVnKCJDdXN0b21JbmRleGVkU2V0
dGVyIik7CiB2YXIgc2VsZWN0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInRlc3RTZWxlY3Qi
KTsKQEAgLTE0NiwxMSArMTQ2LDExIEBAIHNob3VsZEJlKGBSZWZsZWN0LnNldChzZWxlY3QsIDQ0
LCBvcHRpb24KIHNob3VsZEJlKGBSZWZsZWN0LmdldChzZWxlY3QsIDQ0KS52YWx1ZWAsIGAia2ls
aW1hbmphcm8iYCk7CiBzaG91bGRUaHJvdyhgUmVmbGVjdC5zZXQoc2VsZWN0LCAyMCwgIktpbGlt
YW5qYXJvIilgKTsKIAotZGVidWcoIkN1c3RvbUluZGV4ZWRTZXR0ZXIgaWdub3JlcyB0aGUgcmVj
ZWl2ZXIuIFRoZXNlIG1ldGhvZHMgb25seSB3b3JrIHdpdGggOjpwdXQgKG5vdCA6OmRlZmluZU93
blByb3BlcnR5KS4gU28gdGhleSBiZWhhdmUgYXMgdGhlIHNwZWNpYWwgc2V0dGVyLCB3ZSBzaG91
bGQgbm90IGZhbGxiYWNrIHRvIHRoZSBPcmRpbmFyeVNldC4iKTsKK2RlYnVnKCJDdXN0b21JbmRl
eGVkU2V0dGVyIGZhbGxzIGJhY2sgdG8gT3JkaW5hcnlTZXQgaWYgcmVjZWl2ZXIgaXMgYWx0ZXJl
ZC4iKTsKIHZhciBvcHRpb24zID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgib3B0aW9uIik7CiBv
cHRpb24zLnZhbHVlID0gInJhYmJpdCI7CiBvcHRpb24zLnRleHRDb250ZW50ID0gIlJhYmJpdCI7
CiB2YXIgcmVjZWl2ZXIgPSB7fTsKIHNob3VsZEJlKGBSZWZsZWN0LnNldChzZWxlY3QsIDAsIG9w
dGlvbjMsIHJlY2VpdmVyKWAsIGB0cnVlYCk7Ci1zaG91bGRCZShgUmVmbGVjdC5nZXQocmVjZWl2
ZXIsIDApYCwgYHVuZGVmaW5lZGApOwotc2hvdWxkQmUoYFJlZmxlY3QuZ2V0KHNlbGVjdCwgMClg
LCBgb3B0aW9uM2ApOworc2hvdWxkQmUoYFJlZmxlY3QuZ2V0KHJlY2VpdmVyLCAwKWAsIGBvcHRp
b24zYCk7CitzaG91bGRCZShgUmVmbGVjdC5nZXQoc2VsZWN0LCAwKWAsIGBzZWxlY3QuY2hpbGRy
ZW5bMF1gKTsK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>430770</attachid>
            <date>2021-06-07 11:59:57 -0700</date>
            <delta_ts>2021-06-07 11:59:57 -0700</delta_ts>
            <desc>Original patch for diffing</desc>
            <filename>bug-217916-20210426140540.patch</filename>
            <type>text/plain</type>
            <size>182824</size>
            <attacher name="Keith Miller">keith_miller</attacher>
            
              <data encoding="base64">SW5kZXg6IEpTVGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEpTVGVzdHMvQ2hhbmdlTG9n
CShyZXZpc2lvbiAyNzY1ODUpCisrKyBKU1Rlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpA
QCAtMSwzICsxLDI1IEBACisyMDIxLTA0LTI2ICBBbGV4ZXkgU2h2YXlrYSAgPHNodmFpa2FsZXNo
QGdtYWlsLmNvbT4KKworICAgICAgICBbSlNDXSBPcmRpbmFyeVNldCBzaG91bGQgaW52b2tlIGN1
c3RvbSBbW1NldF1dIG1ldGhvZHMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTIxNzkxNgorCisgICAgICAgIFJldmlld2VkIGJ5IFl1c3VrZSBTdXp1a2ku
CisKKyAgICAgICAgKiBtaWNyb2JlbmNobWFya3MvcHV0LXNsb3ctbm8tY2FjaGUtYXJyYXkuanM6
IEFkZGVkLgorICAgICAgICAqIG1pY3JvYmVuY2htYXJrcy9wdXQtc2xvdy1uby1jYWNoZS1mdW5j
dGlvbi5qczogQWRkZWQuCisgICAgICAgICogbWljcm9iZW5jaG1hcmtzL3B1dC1zbG93LW5vLWNh
Y2hlLWpzLXByb3h5LmpzOiBBZGRlZC4KKyAgICAgICAgKiBtaWNyb2JlbmNobWFya3MvcHV0LXNs
b3ctbm8tY2FjaGUtbG9uZy1wcm90b3R5cGUtY2hhaW4uanM6IEFkZGVkLgorICAgICAgICAqIG1p
Y3JvYmVuY2htYXJrcy9wdXQtc2xvdy1uby1jYWNoZS5qczogQWRkZWQuCisgICAgICAgICogbWlj
cm9iZW5jaG1hcmtzL3JlZmxlY3Qtc2V0LXdpdGgtcmVjZWl2ZXIuanM6IEFkZGVkLgorICAgICAg
ICAqIHN0cmVzcy9jdXN0b20tZ2V0LXNldC1wcm90by1jaGFpbi1wdXQuanM6CisgICAgICAgICog
c3RyZXNzL21vZHVsZS1uYW1lc3BhY2UtYWNjZXNzLXNldC1mYWlscy5qczogQWRkZWQuCisgICAg
ICAgICogc3RyZXNzL3B1dC1ub24tcmVpZmllZC1zdGF0aWMtYWNjZXNzb3Itb3ItY3VzdG9tLmpz
OiBBZGRlZC4KKyAgICAgICAgKiBzdHJlc3MvcHV0LW5vbi1yZWlmaWVkLXN0YXRpYy1mdW5jdGlv
bi1vci1jdXN0b20uanM6IEFkZGVkLgorICAgICAgICAqIHN0cmVzcy9wdXQtdG8tcHJpbWl0aXZl
LW5vbi1yZWlmaWVkLXN0YXRpYy1jdXN0b20uanM6IEFkZGVkLgorICAgICAgICAqIHN0cmVzcy9w
dXQtdG8tcHJpbWl0aXZlLmpzOiBBZGRlZC4KKyAgICAgICAgKiBzdHJlc3MvcHV0LXRvLXByb3Rv
LWNoYWluLW92ZXJyaWRlcy1wdXQuanM6IEFkZGVkLgorICAgICAgICAqIHN0cmVzcy90eXBlZC1h
cnJheS1jYW5vbmljYWwtbnVtZXJpYy1pbmRleC1zdHJpbmctc2V0LmpzOiBBZGRlZC4KKwogMjAy
MS0wNC0yMiAgWXVzdWtlIFN1enVraSAgPHlzdXp1a2lAYXBwbGUuY29tPgogCiAgICAgICAgIFtK
U0NdIEJhc2VsaW5lIHNob3VsZCBoYXZlIGZhc3QgcGF0aCBmb3Igc3dpdGNoX2ltbQpJbmRleDog
SlNUZXN0cy9taWNyb2JlbmNobWFya3MvcHV0LXNsb3ctbm8tY2FjaGUtYXJyYXkuanMKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gSlNUZXN0cy9taWNyb2JlbmNobWFya3MvcHV0LXNsb3ctbm8tY2FjaGUtYXJyYXku
anMJKG5vbmV4aXN0ZW50KQorKysgSlNUZXN0cy9taWNyb2JlbmNobWFya3MvcHV0LXNsb3ctbm8t
Y2FjaGUtYXJyYXkuanMJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw2IEBACisoZnVuY3Rpb24o
KSB7CisgICAgdmFyIGFycmF5ID0gW107CisKKyAgICBmb3IgKHZhciBqID0gMDsgaiA8IDFlNTsg
aisrKQorICAgICAgICBhcnJheVsiZm9vIiArIGpdID0gajsKK30pKCk7CkluZGV4OiBKU1Rlc3Rz
L21pY3JvYmVuY2htYXJrcy9wdXQtc2xvdy1uby1jYWNoZS1mdW5jdGlvbi5qcwo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBKU1Rlc3RzL21pY3JvYmVuY2htYXJrcy9wdXQtc2xvdy1uby1jYWNoZS1mdW5jdGlvbi5q
cwkobm9uZXhpc3RlbnQpCisrKyBKU1Rlc3RzL21pY3JvYmVuY2htYXJrcy9wdXQtc2xvdy1uby1j
YWNoZS1mdW5jdGlvbi5qcwkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDggQEAKKyhmdW5jdGlv
bigpIHsKKyAgICBjbGFzcyBBIHt9CisgICAgY2xhc3MgQiBleHRlbmRzIEEge30KKyAgICBjbGFz
cyBDIGV4dGVuZHMgQiB7fQorCisgICAgZm9yICh2YXIgaiA9IDA7IGogPCAxZTU7IGorKykKKyAg
ICAgICAgQ1siZm9vIiArIGpdID0gajsKK30pKCk7CkluZGV4OiBKU1Rlc3RzL21pY3JvYmVuY2ht
YXJrcy9wdXQtc2xvdy1uby1jYWNoZS1qcy1wcm94eS5qcwo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKU1Rlc3Rz
L21pY3JvYmVuY2htYXJrcy9wdXQtc2xvdy1uby1jYWNoZS1qcy1wcm94eS5qcwkobm9uZXhpc3Rl
bnQpCisrKyBKU1Rlc3RzL21pY3JvYmVuY2htYXJrcy9wdXQtc2xvdy1uby1jYWNoZS1qcy1wcm94
eS5qcwkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDYgQEAKKyhmdW5jdGlvbigpIHsKKyAgICB2
YXIgcHJveHkgPSAkdm0uY3JlYXRlUHJveHkoeyBzZXQgZm9vKF92KSB7fSB9KTsKKworICAgIGZv
ciAodmFyIGogPSAwOyBqIDwgMWU1OyBqKyspCisgICAgICAgIHByb3h5WyJmb28iICsgal0gPSBq
OworfSkoKTsKSW5kZXg6IEpTVGVzdHMvbWljcm9iZW5jaG1hcmtzL3B1dC1zbG93LW5vLWNhY2hl
LWxvbmctcHJvdG90eXBlLWNoYWluLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEpTVGVzdHMvbWljcm9iZW5j
aG1hcmtzL3B1dC1zbG93LW5vLWNhY2hlLWxvbmctcHJvdG90eXBlLWNoYWluLmpzCShub25leGlz
dGVudCkKKysrIEpTVGVzdHMvbWljcm9iZW5jaG1hcmtzL3B1dC1zbG93LW5vLWNhY2hlLWxvbmct
cHJvdG90eXBlLWNoYWluLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsOCBAQAorKGZ1bmN0
aW9uKCkgeworICAgIHZhciBiYXNlID0geyBzZXQgZm9vKF92KSB7fSB9OworICAgIGZvciAodmFy
IGkgPSAwOyBpIDwgMWUzOyBpKyspCisgICAgICAgIGJhc2UgPSBPYmplY3QuY3JlYXRlKGJhc2Up
OworCisgICAgZm9yICh2YXIgaiA9IDA7IGogPCAzZTM7IGorKykKKyAgICAgICAgYmFzZVsiZm9v
IiArIGpdID0gajsKK30pKCk7CkluZGV4OiBKU1Rlc3RzL21pY3JvYmVuY2htYXJrcy9wdXQtc2xv
dy1uby1jYWNoZS5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKU1Rlc3RzL21pY3JvYmVuY2htYXJrcy9wdXQt
c2xvdy1uby1jYWNoZS5qcwkobm9uZXhpc3RlbnQpCisrKyBKU1Rlc3RzL21pY3JvYmVuY2htYXJr
cy9wdXQtc2xvdy1uby1jYWNoZS5qcwkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDYgQEAKKyhm
dW5jdGlvbigpIHsKKyAgICB2YXIgYmFzZSA9IHsgc2V0IGZvbyhfdikge30gfTsKKworICAgIGZv
ciAodmFyIGogPSAwOyBqIDwgMWU1OyBqKyspCisgICAgICAgIGJhc2VbImZvbyIgKyBqXSA9IGo7
Cit9KSgpOwpJbmRleDogSlNUZXN0cy9taWNyb2JlbmNobWFya3MvcmVmbGVjdC1zZXQtd2l0aC1y
ZWNlaXZlci5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKU1Rlc3RzL21pY3JvYmVuY2htYXJrcy9yZWZsZWN0
LXNldC13aXRoLXJlY2VpdmVyLmpzCShub25leGlzdGVudCkKKysrIEpTVGVzdHMvbWljcm9iZW5j
aG1hcmtzL3JlZmxlY3Qtc2V0LXdpdGgtcmVjZWl2ZXIuanMJKHdvcmtpbmcgY29weSkKQEAgLTAs
MCArMSw2IEBACisoZnVuY3Rpb24oKSB7CisgICAgdmFyIHRhcmdldCA9IG5ldyAoY2xhc3Mge30p
OworCisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCAxZTY7IGkrKykKKyAgICAgICAgUmVmbGVjdC5z
ZXQodGFyZ2V0LCAiZm9vIiwgMSwge30pOworfSkoKTsKSW5kZXg6IEpTVGVzdHMvc3RyZXNzL2N1
c3RvbS1nZXQtc2V0LXByb3RvLWNoYWluLXB1dC5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKU1Rlc3RzL3N0
cmVzcy9jdXN0b20tZ2V0LXNldC1wcm90by1jaGFpbi1wdXQuanMJKHJldmlzaW9uIDI3NjU4NSkK
KysrIEpTVGVzdHMvc3RyZXNzL2N1c3RvbS1nZXQtc2V0LXByb3RvLWNoYWluLXB1dC5qcwkod29y
a2luZyBjb3B5KQpAQCAtMzcsOCArMzcsOCBAQCBmdW5jdGlvbiBnZXRPYmplY3RzKCkgewogICAg
ICAgICAuLi5wcmltaXRpdmVzLm1hcChPYmplY3QpLAogICAgICAgICBPYmplY3QuY3JlYXRlKGN1
c3RvbVRlc3RHZXR0ZXJTZXR0ZXIpLAogICAgICAgICBPYmplY3QuY3JlYXRlKE9iamVjdC5jcmVh
dGUoY3VzdG9tVGVzdEdldHRlclNldHRlcikpLAotICAgICAgICAvLyBGSVhNRTogb3JkaW5hcnlT
ZXRTbG93KCkgc2hvdWxkIGhhbmRsZSBDdXN0b217QWNjZXNzb3IsVmFsdWV9IGRlc2NyaXB0b3Jz
LgotICAgICAgICAvLyBuZXcgUHJveHkoY3VzdG9tVGVzdEdldHRlclNldHRlciwge30pLAorICAg
ICAgICBPYmplY3QuY3JlYXRlKG5ldyBQcm94eShjdXN0b21UZXN0R2V0dGVyU2V0dGVyLCB7fSkp
LAorICAgICAgICBPYmplY3QuY3JlYXRlKCR2bS5jcmVhdGVQcm94eShjdXN0b21UZXN0R2V0dGVy
U2V0dGVyKSksCiAgICAgXTsKIH0KIApAQCAtODUsMTMgKzg1LDEzIEBAIGZ1bmN0aW9uIGdldEJh
c2VzKCkgewogfSkoKTsKIAogLy8gQ3VzdG9tVmFsdWU6IHNldHRlciByZXR1cm5zIHxmYWxzZXwK
Ky8vIEZJWE1FOiBPbmNlIGxlZ2FjeSBSZWdFeHAgZmVhdHVyZXMgYXJlIGltcGxlbWVudGVkLCB0
aGVyZSB3b3VsZCBiZSBubyB1c2UgY2FzZSBmb3IgY2FsbGluZyBDdXN0b21WYWx1ZSBzZXR0ZXIg
aWYgcmVjZWl2ZXIgaXMgYWx0ZXJlZC4KICgoKSA9PiB7CiAgICAgZm9yIChsZXQgYmFzZSBvZiBn
ZXRCYXNlcygpKSB7CiAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgMTAwOyArK2kpCiAgICAg
ICAgICAgICBiYXNlLmN1c3RvbVZhbHVlID0gMTsKLSAgICAgICAgLy8gVGhpcyBpcyB3ZWlyZCwg
YnV0IGl0IGlzbid0IGV4cG9zZWQgdG8gdXNlcmxhbmQgY29kZToKICAgICAgICAgYXNzZXJ0KCFi
YXNlLmhhc093blByb3BlcnR5KCJjdXN0b21WYWx1ZSIpKTsKLSAgICAgICAgYXNzZXJ0KCFSZWZs
ZWN0LnNldChPYmplY3QoYmFzZSksICJjdXN0b21WYWx1ZSIsIDEpKTsKKyAgICAgICAgYXNzZXJ0
KFJlZmxlY3Quc2V0KE9iamVjdChiYXNlKSwgImN1c3RvbVZhbHVlIiwgMSkpOwogICAgIH0KIH0p
KCk7CiAKSW5kZXg6IEpTVGVzdHMvc3RyZXNzL21vZHVsZS1uYW1lc3BhY2UtYWNjZXNzLXNldC1m
YWlscy5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBKU1Rlc3RzL3N0cmVzcy9tb2R1bGUtbmFtZXNwYWNlLWFj
Y2Vzcy1zZXQtZmFpbHMuanMJKG5vbmV4aXN0ZW50KQorKysgSlNUZXN0cy9zdHJlc3MvbW9kdWxl
LW5hbWVzcGFjZS1hY2Nlc3Mtc2V0LWZhaWxzLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEs
OTAgQEAKK2NvbnN0IGV4aXN0aW5nS2V5cyA9IFsiY29jb2EiLCAidGVzdCIsIFN5bWJvbC50b1N0
cmluZ1RhZ107Citjb25zdCBub25FeGlzdGluZ0tleXMgPSBbImZvbyIsIFN5bWJvbCgiZm9vIild
OworY29uc3QgYWxsS2V5cyA9IFsuLi5leGlzdGluZ0tleXMsIC4uLm5vbkV4aXN0aW5nS2V5c107
Citjb25zdCB0ZXN0VmFsdWUgPSBPYmplY3QuZnJlZXplKHt9KTsKKworZnVuY3Rpb24gYXNzZXJ0
KHgsIGtleSkgeworICAgIGlmICgheCkKKyAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBCYWQgYXNz
ZXJ0aW9uISBLZXk6ICR7U3RyaW5nKGtleSl9YCk7Cit9CisKK2Z1bmN0aW9uIHNob3VsZFRocm93
KGZ1bmMsIGVycm9yTWVzc2FnZSkgeworICAgIGxldCBlcnJvclRocm93biA9IGZhbHNlOworICAg
IHRyeSB7CisgICAgICAgIGZ1bmMoKTsKKyAgICB9IGNhdGNoIChlcnJvcikgeworICAgICAgICBl
cnJvclRocm93biA9IHRydWU7CisgICAgICAgIGlmIChTdHJpbmcoZXJyb3IpICE9PSBlcnJvck1l
c3NhZ2UpCisgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEJhZCBlcnJvcjogJHtlcnJvcn1g
KTsKKyAgICB9CisgICAgaWYgKCFlcnJvclRocm93bikKKyAgICAgICAgdGhyb3cgbmV3IEVycm9y
KCJEaWRuJ3QgdGhyb3chIik7Cit9CisKK2Z1bmN0aW9uIHRlc3REaXJlY3RTZXQobnMpIHsKKyAg
ICBmb3IgKGNvbnN0IGtleSBvZiBhbGxLZXlzKSB7CisgICAgICAgIG5zW2tleV0gPSB0ZXN0VmFs
dWU7CisgICAgICAgIGFzc2VydChuc1trZXldICE9PSB0ZXN0VmFsdWUsIGtleSk7CisKKyAgICAg
ICAgc2hvdWxkVGhyb3coKCkgPT4geyAidXNlIHN0cmljdCI7IG5zW2tleV0gPSB0ZXN0VmFsdWU7
IH0sICJUeXBlRXJyb3I6IEF0dGVtcHRlZCB0byBhc3NpZ24gdG8gcmVhZG9ubHkgcHJvcGVydHku
Iik7CisgICAgICAgIGFzc2VydChuc1trZXldICE9PSB0ZXN0VmFsdWUsIGtleSk7CisgICAgfQor
fQorCitmdW5jdGlvbiB0ZXN0UHJvdG90eXBlQ2hhaW5TZXQobnMpIHsKKyAgICBmb3IgKGNvbnN0
IGtleSBvZiBhbGxLZXlzKSB7CisgICAgICAgIGNvbnN0IGhlaXIgPSBPYmplY3QuY3JlYXRlKG5z
KTsKKworICAgICAgICBoZWlyW2tleV0gPSB0ZXN0VmFsdWU7CisgICAgICAgIGFzc2VydChPYmpl
Y3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGhlaXIsIGtleSkgPT09IHVuZGVmaW5lZCwga2V5
KTsKKworICAgICAgICBzaG91bGRUaHJvdygoKSA9PiB7ICJ1c2Ugc3RyaWN0IjsgaGVpcltrZXld
ID0gdGVzdFZhbHVlOyB9LCAiVHlwZUVycm9yOiBBdHRlbXB0ZWQgdG8gYXNzaWduIHRvIHJlYWRv
bmx5IHByb3BlcnR5LiIpOworICAgICAgICBhc3NlcnQoT2JqZWN0LmdldE93blByb3BlcnR5RGVz
Y3JpcHRvcihoZWlyLCBrZXkpID09PSB1bmRlZmluZWQsIGtleSk7CisgICAgfQorfQorCitmdW5j
dGlvbiB0ZXN0UmVmbGVjdFNldChucykgeworICAgICJ1c2Ugc3RyaWN0IjsKKworICAgIGZvciAo
Y29uc3QgZXhpc3RpbmdLZXkgb2YgZXhpc3RpbmdLZXlzKSB7CisgICAgICAgIGFzc2VydCghUmVm
bGVjdC5zZXQobnMsIGV4aXN0aW5nS2V5LCB0ZXN0VmFsdWUpLCBleGlzdGluZ0tleSk7CisKKyAg
ICAgICAgY29uc3QgdGFyZ2V0ID0ge307CisgICAgICAgIGFzc2VydCghUmVmbGVjdC5zZXQodGFy
Z2V0LCBleGlzdGluZ0tleSwgdGVzdFZhbHVlLCBucyksIGV4aXN0aW5nS2V5KTsKKworICAgICAg
ICBjb25zdCBpc1dyaXRhYmxlID0gZXhpc3RpbmdLZXkgIT09IFN5bWJvbC50b1N0cmluZ1RhZzsK
KyAgICAgICAgYXNzZXJ0KFJlZmxlY3Quc2V0KHRhcmdldCwgZXhpc3RpbmdLZXksIG5zW2V4aXN0
aW5nS2V5XSwgbnMpID09PSBpc1dyaXRhYmxlLCBleGlzdGluZ0tleSk7CisKKyAgICAgICAgYXNz
ZXJ0KG5zW2V4aXN0aW5nS2V5XSAhPT0gdGVzdFZhbHVlLCBleGlzdGluZ0tleSk7CisgICAgICAg
IGFzc2VydCh0YXJnZXRbZXhpc3RpbmdLZXldID09PSB1bmRlZmluZWQsIGV4aXN0aW5nS2V5KTsK
KyAgICB9CisKKyAgICBmb3IgKGNvbnN0IG5vbkV4aXN0aW5nS2V5IG9mIG5vbkV4aXN0aW5nS2V5
cykgeworICAgICAgICBhc3NlcnQoIVJlZmxlY3Quc2V0KG5zLCBub25FeGlzdGluZ0tleSwgdGVz
dFZhbHVlKSwgbm9uRXhpc3RpbmdLZXkpOworICAgICAgICBhc3NlcnQobnNbbm9uRXhpc3RpbmdL
ZXldID09PSB1bmRlZmluZWQsIG5vbkV4aXN0aW5nS2V5KTsKKworICAgICAgICBjb25zdCB0YXJn
ZXQgPSB7fTsKKyAgICAgICAgYXNzZXJ0KCFSZWZsZWN0LnNldCh0YXJnZXQsIG5vbkV4aXN0aW5n
S2V5LCB0ZXN0VmFsdWUsIG5zKSwgbm9uRXhpc3RpbmdLZXkpOworICAgICAgICBhc3NlcnQodGFy
Z2V0W25vbkV4aXN0aW5nS2V5XSA9PT0gdW5kZWZpbmVkLCBub25FeGlzdGluZ0tleSk7CisgICAg
fQorCisgICAgZm9yIChjb25zdCBrZXkgb2YgYWxsS2V5cykgeworICAgICAgICBjb25zdCB0YXJn
ZXQgPSBPYmplY3QuY3JlYXRlKG5zKTsKKyAgICAgICAgY29uc3QgcmVjZWl2ZXIgPSB7fTsKKwor
ICAgICAgICBhc3NlcnQoIVJlZmxlY3Quc2V0KHRhcmdldCwga2V5LCB0ZXN0VmFsdWUsIHJlY2Vp
dmVyKSwga2V5KTsKKyAgICAgICAgYXNzZXJ0KE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0
b3IodGFyZ2V0LCBrZXkpID09PSB1bmRlZmluZWQsIGtleSk7CisgICAgICAgIGFzc2VydChPYmpl
Y3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHJlY2VpdmVyLCBrZXkpID09PSB1bmRlZmluZWQs
IGtleSk7CisgICAgfQorfQorCitpbXBvcnQoIi4vcmVzb3VyY2VzL21vZHVsZS1uYW1lc3BhY2Ut
YWNjZXNzLmpzIikudGhlbihucyA9PiB7CisgICAgdGVzdERpcmVjdFNldChucyk7CisgICAgdGVz
dFByb3RvdHlwZUNoYWluU2V0KG5zKTsKKyAgICB0ZXN0UmVmbGVjdFNldChucyk7Cit9KS5jYXRj
aChlcnIgPT4geworICAgIHByaW50KGAhISEgJHtlcnJ9XG4ke2Vyci5zdGFja31gKTsKKyAgICAk
dm0uYWJvcnQoKTsKK30pOworCitkcmFpbk1pY3JvdGFza3MoKTsKSW5kZXg6IEpTVGVzdHMvc3Ry
ZXNzL3B1dC1ub24tcmVpZmllZC1zdGF0aWMtYWNjZXNzb3Itb3ItY3VzdG9tLmpzCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIEpTVGVzdHMvc3RyZXNzL3B1dC1ub24tcmVpZmllZC1zdGF0aWMtYWNjZXNzb3Itb3It
Y3VzdG9tLmpzCShub25leGlzdGVudCkKKysrIEpTVGVzdHMvc3RyZXNzL3B1dC1ub24tcmVpZmll
ZC1zdGF0aWMtYWNjZXNzb3Itb3ItY3VzdG9tLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEs
NTggQEAKKyJ1c2Ugc3RyaWN0IjsKK2NvbnN0IHRlc3RWYWx1ZSA9IE9iamVjdC5mcmVlemUoe30p
OworCitmdW5jdGlvbiBhc3NlcnQoeCwga2V5KSB7CisgICAgaWYgKCF4KQorICAgICAgICB0aHJv
dyBuZXcgRXJyb3IoYEtleTogIiR7a2V5fSIuIEJhZCBhc3NlcnRpb24hYCk7Cit9CisKK2Z1bmN0
aW9uKiB0ZXN0Q2FzZXMoKSB7CisgICAgZm9yIChjb25zdCBrZXkgb2YgWyJkZXNjcmlwdGlvbiJd
KQorICAgICAgICB5aWVsZCBbJHZtLmNyZWF0ZUdsb2JhbE9iamVjdCgpLlN5bWJvbC5wcm90b3R5
cGUsIGtleV07CisgICAgZm9yIChjb25zdCBrZXkgb2YgWyJidWZmZXIiLCAiYnl0ZUxlbmd0aCIs
ICJieXRlT2Zmc2V0Il0pCisgICAgICAgIHlpZWxkIFskdm0uY3JlYXRlR2xvYmFsT2JqZWN0KCku
RGF0YVZpZXcucHJvdG90eXBlLCBrZXldOworICAgIGZvciAoY29uc3Qga2V5IG9mIFsiYmFzZU5h
bWUiLCAiY2FzZUZpcnN0IiwgImhvdXJDeWNsZSIsICJudW1lcmljIiwgInJlZ2lvbiJdKQorICAg
ICAgICB5aWVsZCBbJHZtLmNyZWF0ZUdsb2JhbE9iamVjdCgpLkludGwuTG9jYWxlLnByb3RvdHlw
ZSwga2V5XTsKKworICAgIGZvciAoY29uc3Qga2V5IG9mIFsidGVzdFN0YXRpY0FjY2Vzc29yRG9u
dEVudW0iLCAidGVzdFN0YXRpY0FjY2Vzc29yUmVhZE9ubHkiXSkKKyAgICAgICAgeWllbGQgWyR2
bS5jcmVhdGVTdGF0aWNDdXN0b21BY2Nlc3NvcigpLCBrZXldOworICAgIHlpZWxkIFskdm0uY3Jl
YXRlU3RhdGljQ3VzdG9tVmFsdWUoKSwgInRlc3RTdGF0aWNWYWx1ZVJlYWRPbmx5Il07Cit9CisK
K2ZvciAoY29uc3QgW29iamVjdCwga2V5XSBvZiB0ZXN0Q2FzZXMoKSkgeworICAgIGNvbnN0IHRh
cmdldCA9IHt9OworICAgIGFzc2VydCghUmVmbGVjdC5zZXQodGFyZ2V0LCBrZXksIHRlc3RWYWx1
ZSwgb2JqZWN0KSwga2V5KTsKKyAgICBhc3NlcnQoIXRhcmdldC5oYXNPd25Qcm9wZXJ0eShrZXkp
LCBrZXkpOworICAgIGFzc2VydChPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG9iamVj
dCwga2V5KS52YWx1ZSAhPT0gdGVzdFZhbHVlLCBrZXkpOworfQorCitmb3IgKGNvbnN0IFtvYmpl
Y3QsIGtleV0gb2YgdGVzdENhc2VzKCkpIHsKKyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkob2Jq
ZWN0LCBrZXksIHsgdmFsdWU6IHt9LCB3cml0YWJsZTogZmFsc2UgfSk7CisgICAgY29uc3QgdGFy
Z2V0ID0ge307CisgICAgYXNzZXJ0KCFSZWZsZWN0LnNldCh0YXJnZXQsIGtleSwgdGVzdFZhbHVl
LCBvYmplY3QpLCBrZXkpOworICAgIGFzc2VydCghdGFyZ2V0Lmhhc093blByb3BlcnR5KGtleSks
IGtleSk7CisgICAgYXNzZXJ0KE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0
LCBrZXkpLnZhbHVlICE9PSB0ZXN0VmFsdWUsIGtleSk7Cit9CisKK2ZvciAoY29uc3QgW29iamVj
dCwga2V5XSBvZiB0ZXN0Q2FzZXMoKSkgeworICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmpl
Y3QsIGtleSwgeyB2YWx1ZToge30sIHdyaXRhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IGZhbHNl
IH0pOworICAgIG9iamVjdFtrZXldID0gdGVzdFZhbHVlOworCisgICAgY29uc3QgZGVzYyA9IE9i
amVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0LCBrZXkpOworICAgIGFzc2VydChk
ZXNjLnZhbHVlID09PSB0ZXN0VmFsdWUsIGtleSk7CisgICAgYXNzZXJ0KGRlc2Mud3JpdGFibGUs
IGtleSk7CisgICAgYXNzZXJ0KCFkZXNjLmVudW1lcmFibGUsIGtleSk7CisgICAgYXNzZXJ0KCFk
ZXNjLmNvbmZpZ3VyYWJsZSwga2V5KTsKK30KKworZm9yIChjb25zdCBbb2JqZWN0LCBrZXldIG9m
IHRlc3RDYXNlcygpKSB7CisgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iamVjdCwga2V5LCB7
IHZhbHVlOiB7fSwgd3JpdGFibGU6IHRydWUsIGVudW1lcmFibGU6IHRydWUgfSk7CisgICAgY29u
c3QgdGFyZ2V0ID0ge307CisgICAgYXNzZXJ0KFJlZmxlY3Quc2V0KHRhcmdldCwga2V5LCB0ZXN0
VmFsdWUsIG9iamVjdCksIGtleSk7CisKKyAgICBjb25zdCBkZXNjID0gT2JqZWN0LmdldE93blBy
b3BlcnR5RGVzY3JpcHRvcihvYmplY3QsIGtleSk7CisgICAgYXNzZXJ0KGRlc2MudmFsdWUgPT09
IHRlc3RWYWx1ZSwga2V5KTsKKyAgICBhc3NlcnQoZGVzYy53cml0YWJsZSwga2V5KTsKKyAgICBh
c3NlcnQoZGVzYy5lbnVtZXJhYmxlLCBrZXkpOworICAgIGFzc2VydChkZXNjLmNvbmZpZ3VyYWJs
ZSwga2V5KTsKK30KSW5kZXg6IEpTVGVzdHMvc3RyZXNzL3B1dC1ub24tcmVpZmllZC1zdGF0aWMt
ZnVuY3Rpb24tb3ItY3VzdG9tLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEpTVGVzdHMvc3RyZXNzL3B1dC1u
b24tcmVpZmllZC1zdGF0aWMtZnVuY3Rpb24tb3ItY3VzdG9tLmpzCShub25leGlzdGVudCkKKysr
IEpTVGVzdHMvc3RyZXNzL3B1dC1ub24tcmVpZmllZC1zdGF0aWMtZnVuY3Rpb24tb3ItY3VzdG9t
LmpzCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTQzIEBACisidXNlIHN0cmljdCI7Citjb25z
dCB0ZXN0VmFsdWUgPSBPYmplY3QuZnJlZXplKHt9KTsKKworZnVuY3Rpb24gYXNzZXJ0KHgsIGtl
eSkgeworICAgIGlmICgheCkKKyAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBLZXk6ICIke2tleX0i
LiBCYWQgYXNzZXJ0aW9uIWApOworfQorCitmdW5jdGlvbiBzaG91bGRUaHJvdyhmdW5jLCBlcnJv
ck1lc3NhZ2UsIGtleSkgeworICAgIGxldCBlcnJvclRocm93biA9IGZhbHNlOworICAgIHRyeSB7
CisgICAgICAgIGZ1bmMoKTsKKyAgICB9IGNhdGNoIChlcnJvcikgeworICAgICAgICBlcnJvclRo
cm93biA9IHRydWU7CisgICAgICAgIGlmIChTdHJpbmcoZXJyb3IpICE9PSBlcnJvck1lc3NhZ2Up
CisgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEtleTogIiR7a2V5fSIuIEJhZCBlcnJvcjog
JHtlcnJvcn1gKTsKKyAgICB9CisgICAgaWYgKCFlcnJvclRocm93bikKKyAgICAgICAgdGhyb3cg
bmV3IEVycm9yKGBLZXk6ICIke2tleX0iLiBEaWRuJ3QgdGhyb3chYCk7Cit9CisKK2Z1bmN0aW9u
KiB0ZXN0Q2FzZXMoKSB7CisgICAgLy8gaGFzU2V0dGVyT3JSZWFkb25seVByb3BlcnRpZXM6IGZh
bHNlCisgICAgZm9yIChjb25zdCBrZXkgb2YgWyJpc0Zpbml0ZSIsICJldmFsIiwgImdsb2JhbFRo
aXMiLCAicGFyc2VJbnQiLCAiRXZhbEVycm9yIiwgIkpTT04iLCAiVWludDhDbGFtcGVkQXJyYXki
LCAiV2Vha01hcCJdKQorICAgICAgICB5aWVsZCBbJHZtLmNyZWF0ZUdsb2JhbE9iamVjdCgpLCBr
ZXldOworICAgIGZvciAoY29uc3Qga2V5IG9mIFsic2VhbCIsICJpcyIsICJ2YWx1ZXMiLCAiZnJv
bUVudHJpZXMiLCAiZGVmaW5lUHJvcGVydHkiLCAic2V0UHJvdG90eXBlT2YiXSkKKyAgICAgICAg
eWllbGQgWyR2bS5jcmVhdGVHbG9iYWxPYmplY3QoKS5PYmplY3QsIGtleV07CisgICAgZm9yIChj
b25zdCBrZXkgb2YgWyJhcHBseSIsICJjb25zdHJ1Y3QiLCAiaGFzIiwgInByZXZlbnRFeHRlbnNp
b25zIiwgImdldFByb3RvdHlwZU9mIl0pCisgICAgICAgIHlpZWxkIFskdm0uY3JlYXRlR2xvYmFs
T2JqZWN0KCkuUmVmbGVjdCwga2V5XTsKKyAgICBmb3IgKGNvbnN0IGtleSBvZiBbInRvRGF0ZVN0
cmluZyIsICJ0b0xvY2FsZVN0cmluZyIsICJnZXRVVENNb250aCIsICJnZXREYXkiLCAic2V0VVRD
TWludXRlcyIsICJzZXRNb250aCJdKQorICAgICAgICB5aWVsZCBbJHZtLmNyZWF0ZUdsb2JhbE9i
amVjdCgpLkRhdGUucHJvdG90eXBlLCBrZXldOworICAgIGZvciAoY29uc3Qga2V5IG9mIFsiY29u
Y2F0IiwgIm1hdGNoIiwgInBhZFN0YXJ0IiwgImJvbGQiLCAiZml4ZWQiLCAic21hbGwiLCAic3Vi
Il0pCisgICAgICAgIHlpZWxkIFskdm0uY3JlYXRlR2xvYmFsT2JqZWN0KCkuU3RyaW5nLnByb3Rv
dHlwZSwga2V5XTsKKworICAgIC8vIGhhc1NldHRlck9yUmVhZG9ubHlQcm9wZXJ0aWVzOiB0cnVl
CisgICAgZm9yIChjb25zdCBrZXkgb2YgWyJnZXRVaW50MTYiLCAic2V0SW50OCIsICJnZXRGbG9h
dDMyIiwgInNldEJpZ1VpbnQ2NCJdKQorICAgICAgICB5aWVsZCBbJHZtLmNyZWF0ZUdsb2JhbE9i
amVjdCgpLkRhdGFWaWV3LnByb3RvdHlwZSwga2V5XTsKKyAgICBmb3IgKGNvbnN0IGtleSBvZiBb
InRvU3RyaW5nIiwgInZhbHVlT2YiXSkKKyAgICAgICAgeWllbGQgWyR2bS5jcmVhdGVHbG9iYWxP
YmplY3QoKS5TeW1ib2wucHJvdG90eXBlLCBrZXldOworICAgIGZvciAoY29uc3Qga2V5IG9mIFsi
Zm9ybWF0UmFuZ2UiLCAiZm9ybWF0VG9QYXJ0cyIsICJyZXNvbHZlZE9wdGlvbnMiXSkKKyAgICAg
ICAgeWllbGQgWyR2bS5jcmVhdGVHbG9iYWxPYmplY3QoKS5JbnRsLkRhdGVUaW1lRm9ybWF0LnBy
b3RvdHlwZSwga2V5XTsKKyAgICBmb3IgKGNvbnN0IGtleSBvZiBbImZvcm1hdFRvUGFydHMiLCAi
cmVzb2x2ZWRPcHRpb25zIl0pCisgICAgICAgIHlpZWxkIFskdm0uY3JlYXRlR2xvYmFsT2JqZWN0
KCkuSW50bC5OdW1iZXJGb3JtYXQucHJvdG90eXBlLCBrZXldOworICAgIGZvciAoY29uc3Qga2V5
IG9mIFsibWF4aW1pemUiLCAibWluaW1pemUiLCAidG9TdHJpbmciXSkKKyAgICAgICAgeWllbGQg
WyR2bS5jcmVhdGVHbG9iYWxPYmplY3QoKS5JbnRsLkxvY2FsZS5wcm90b3R5cGUsIGtleV07CisK
KyAgICB5aWVsZCBbJHZtLmNyZWF0ZVN0YXRpY0N1c3RvbVZhbHVlKCksICJ0ZXN0U3RhdGljVmFs
dWVOb1NldHRlciJdOworfQorCitmb3IgKGNvbnN0IFtvYmplY3QsIGtleV0gb2YgdGVzdENhc2Vz
KCkpIHsKKyAgICBvYmplY3Rba2V5XSA9IHRlc3RWYWx1ZTsKKworICAgIGNvbnN0IGRlc2MgPSBP
YmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCwga2V5KTsKKyAgICBhc3NlcnQo
ZGVzYy52YWx1ZSA9PT0gdGVzdFZhbHVlLCBrZXkpOworICAgIGFzc2VydChkZXNjLndyaXRhYmxl
LCBrZXkpOworICAgIGFzc2VydCghZGVzYy5lbnVtZXJhYmxlLCBrZXkpOworICAgIGFzc2VydChk
ZXNjLmNvbmZpZ3VyYWJsZSwga2V5KTsKK30KKworZm9yIChjb25zdCBbb2JqZWN0LCBrZXldIG9m
IHRlc3RDYXNlcygpKSB7CisgICAgT2JqZWN0LnByZXZlbnRFeHRlbnNpb25zKG9iamVjdCk7Cisg
ICAgb2JqZWN0W2tleV0gPSB0ZXN0VmFsdWU7CisKKyAgICBjb25zdCBkZXNjID0gT2JqZWN0Lmdl
dE93blByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QsIGtleSk7CisgICAgYXNzZXJ0KGRlc2MudmFs
dWUgPT09IHRlc3RWYWx1ZSwga2V5KTsKKyAgICBhc3NlcnQoZGVzYy53cml0YWJsZSwga2V5KTsK
KyAgICBhc3NlcnQoIWRlc2MuZW51bWVyYWJsZSwga2V5KTsKKyAgICBhc3NlcnQoZGVzYy5jb25m
aWd1cmFibGUsIGtleSk7Cit9CisKK2ZvciAoY29uc3QgW29iamVjdCwga2V5XSBvZiB0ZXN0Q2Fz
ZXMoKSkgeworICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmplY3QsIGtleSwgeyBlbnVtZXJh
YmxlOiB0cnVlLCBjb25maWd1cmFibGU6IGZhbHNlIH0pOworICAgIG9iamVjdFtrZXldID0gdGVz
dFZhbHVlOworCisgICAgY29uc3QgZGVzYyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0
b3Iob2JqZWN0LCBrZXkpOworICAgIGFzc2VydChkZXNjLnZhbHVlID09PSB0ZXN0VmFsdWUsIGtl
eSk7CisgICAgYXNzZXJ0KGRlc2Mud3JpdGFibGUsIGtleSk7CisgICAgYXNzZXJ0KGRlc2MuZW51
bWVyYWJsZSwga2V5KTsKKyAgICBhc3NlcnQoIWRlc2MuY29uZmlndXJhYmxlLCBrZXkpOworfQor
Citmb3IgKGNvbnN0IFtvYmplY3QsIGtleV0gb2YgdGVzdENhc2VzKCkpIHsKKyAgICBPYmplY3Qu
ZGVmaW5lUHJvcGVydHkob2JqZWN0LCBrZXksIHsgd3JpdGFibGU6IGZhbHNlIH0pOworICAgIHNo
b3VsZFRocm93KCgpID0+IHsgb2JqZWN0W2tleV0gPSB0ZXN0VmFsdWU7IH0sICJUeXBlRXJyb3I6
IEF0dGVtcHRlZCB0byBhc3NpZ24gdG8gcmVhZG9ubHkgcHJvcGVydHkuIiwga2V5KTsKKworICAg
IGNvbnN0IGRlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCwga2V5
KTsKKyAgICBhc3NlcnQoZGVzYy52YWx1ZSAhPT0gdGVzdFZhbHVlLCBrZXkpOworICAgIGFzc2Vy
dCghZGVzYy53cml0YWJsZSwga2V5KTsKKyAgICBhc3NlcnQoIWRlc2MuZW51bWVyYWJsZSwga2V5
KTsKKyAgICBhc3NlcnQoZGVzYy5jb25maWd1cmFibGUsIGtleSk7Cit9CisKK2ZvciAoY29uc3Qg
W29iamVjdCwga2V5XSBvZiB0ZXN0Q2FzZXMoKSkgeworICAgIGNvbnN0IGhlaXIgPSBPYmplY3Qu
Y3JlYXRlKG9iamVjdCk7CisgICAgaGVpcltrZXldID0gdGVzdFZhbHVlOworCisgICAgY29uc3Qg
ZGVzYyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoaGVpciwga2V5KTsKKyAgICBh
c3NlcnQoZGVzYy52YWx1ZSA9PT0gdGVzdFZhbHVlLCBrZXkpOworICAgIGFzc2VydChkZXNjLndy
aXRhYmxlLCBrZXkpOworICAgIGFzc2VydChkZXNjLmVudW1lcmFibGUsIGtleSk7CisgICAgYXNz
ZXJ0KGRlc2MuY29uZmlndXJhYmxlLCBrZXkpOworICAgIGFzc2VydChvYmplY3Rba2V5XSAhPT0g
dGVzdFZhbHVlLCBrZXkpOworfQorCitmb3IgKGNvbnN0IFtvYmplY3QsIGtleV0gb2YgdGVzdENh
c2VzKCkpIHsKKyAgICBjb25zdCBwcm90b3R5cGUgPSBPYmplY3QuZ2V0UHJvdG90eXBlT2Yob2Jq
ZWN0KTsKKyAgICBpZiAocHJvdG90eXBlICE9PSBudWxsKSB7CisgICAgICAgIE9iamVjdC5kZWZp
bmVQcm9wZXJ0eShwcm90b3R5cGUsIGtleSwgeworICAgICAgICAgICAgc2V0KCkgeyB0aHJvdyBu
ZXcgRXJyb3IoYCIke2tleX0iIHNldHRlciBzaG91bGQgYmUgdW5yZWFjaGFibGUhYCk7IH0sCisg
ICAgICAgIH0pOworICAgIH0KKworICAgIGNvbnN0IGhlaXIgPSBPYmplY3QuY3JlYXRlKG9iamVj
dCk7CisgICAgaGVpcltrZXldID0gdGVzdFZhbHVlOworCisgICAgY29uc3QgZGVzYyA9IE9iamVj
dC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoaGVpciwga2V5KTsKKyAgICBhc3NlcnQoZGVzYy52
YWx1ZSA9PT0gdGVzdFZhbHVlLCBrZXkpOworICAgIGFzc2VydChkZXNjLndyaXRhYmxlLCBrZXkp
OworICAgIGFzc2VydChkZXNjLmVudW1lcmFibGUsIGtleSk7CisgICAgYXNzZXJ0KGRlc2MuY29u
ZmlndXJhYmxlLCBrZXkpOworICAgIGFzc2VydChvYmplY3Rba2V5XSAhPT0gdGVzdFZhbHVlLCBr
ZXkpOworfQorCitmb3IgKGNvbnN0IFtvYmplY3QsIGtleV0gb2YgdGVzdENhc2VzKCkpIHsKKyAg
ICBjb25zdCBoZWlyID0gT2JqZWN0LmNyZWF0ZShvYmplY3QpOworICAgIE9iamVjdC5wcmV2ZW50
RXh0ZW5zaW9ucyhoZWlyKTsKKworICAgIHNob3VsZFRocm93KCgpID0+IHsgaGVpcltrZXldID0g
dGVzdFZhbHVlOyB9LCAiVHlwZUVycm9yOiBBdHRlbXB0ZWQgdG8gYXNzaWduIHRvIHJlYWRvbmx5
IHByb3BlcnR5LiIsIGtleSk7CisgICAgYXNzZXJ0KGhlaXJba2V5XSAhPT0gdGVzdFZhbHVlLCBr
ZXkpOworICAgIGFzc2VydChvYmplY3Rba2V5XSAhPT0gdGVzdFZhbHVlLCBrZXkpOworfQorCitm
b3IgKGNvbnN0IFtvYmplY3QsIGtleV0gb2YgdGVzdENhc2VzKCkpIHsKKyAgICBjb25zdCB0YXJn
ZXQgPSB7fTsKKyAgICBhc3NlcnQoUmVmbGVjdC5zZXQodGFyZ2V0LCBrZXksIHRlc3RWYWx1ZSwg
b2JqZWN0KSwga2V5KTsKKyAgICBhc3NlcnQoIXRhcmdldC5oYXNPd25Qcm9wZXJ0eShrZXkpLCBr
ZXkpOworCisgICAgY29uc3QgZGVzYyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Io
b2JqZWN0LCBrZXkpOworICAgIGFzc2VydChkZXNjLnZhbHVlID09PSB0ZXN0VmFsdWUsIGtleSk7
CisgICAgYXNzZXJ0KGRlc2Mud3JpdGFibGUsIGtleSk7CisgICAgYXNzZXJ0KCFkZXNjLmVudW1l
cmFibGUsIGtleSk7CisgICAgYXNzZXJ0KGRlc2MuY29uZmlndXJhYmxlLCBrZXkpOworfQpJbmRl
eDogSlNUZXN0cy9zdHJlc3MvcHV0LXRvLXByaW1pdGl2ZS1ub24tcmVpZmllZC1zdGF0aWMtY3Vz
dG9tLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIEpTVGVzdHMvc3RyZXNzL3B1dC10by1wcmltaXRpdmUtbm9u
LXJlaWZpZWQtc3RhdGljLWN1c3RvbS5qcwkobm9uZXhpc3RlbnQpCisrKyBKU1Rlc3RzL3N0cmVz
cy9wdXQtdG8tcHJpbWl0aXZlLW5vbi1yZWlmaWVkLXN0YXRpYy1jdXN0b20uanMJKHdvcmtpbmcg
Y29weSkKQEAgLTAsMCArMSw2NCBAQAorInVzZSBzdHJpY3QiOworCitmdW5jdGlvbiBzaG91bGRC
ZShhY3R1YWwsIGV4cGVjdGVkKSB7CisgICAgaWYgKGFjdHVhbCAhPT0gZXhwZWN0ZWQpCisgICAg
ICAgIHRocm93IG5ldyBFcnJvcihgQmFkIHZhbHVlOiAke2FjdHVhbH0hYCk7Cit9CisKK2Z1bmN0
aW9uIHNob3VsZFRocm93KGZ1bmMsIGVycm9yTWVzc2FnZSkgeworICAgIGxldCBlcnJvclRocm93
biA9IGZhbHNlOworICAgIHRyeSB7CisgICAgICAgIGZ1bmMoKTsKKyAgICB9IGNhdGNoIChlcnJv
cikgeworICAgICAgICBlcnJvclRocm93biA9IHRydWU7CisgICAgICAgIGlmIChTdHJpbmcoZXJy
b3IpICE9PSBlcnJvck1lc3NhZ2UpCisgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEJhZCBl
cnJvcjogJHtlcnJvcn1gKTsKKyAgICB9CisgICAgaWYgKCFlcnJvclRocm93bikKKyAgICAgICAg
dGhyb3cgbmV3IEVycm9yKCJEaWRuJ3QgdGhyb3chIik7Cit9CisKK2NvbnN0IHBvaXNvbmVkU2V0
dGVyID0geyBzZXQoKSB7IHRocm93IG5ldyBFcnJvcigiT2JqZWN0LnByb3RvdHlwZSBzZXR0ZXIg
c2hvdWxkIGJlIHVucmVhY2hhYmxlISIpOyB9IH07Citjb25zdCBwcmltaXRpdmVzID0gW3RydWUs
IDEsICIiLCBTeW1ib2woKSwgMG5dOworCisoZnVuY3Rpb24gdGVzdFN0YXRpY0N1c3RvbVZhbHVl
KCkgeworICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKE9iamVjdC5wcm90b3R5cGUsIHsKKyAg
ICAgICAgdGVzdFN0YXRpY1ZhbHVlOiBwb2lzb25lZFNldHRlciwKKyAgICAgICAgdGVzdFN0YXRp
Y1ZhbHVlTm9TZXR0ZXI6IHBvaXNvbmVkU2V0dGVyLAorICAgICAgICB0ZXN0U3RhdGljVmFsdWVS
ZWFkT25seTogcG9pc29uZWRTZXR0ZXIsCisgICAgfSk7CisKKyAgICBmb3IgKGNvbnN0IHByaW1p
dGl2ZSBvZiBwcmltaXRpdmVzKSB7CisgICAgICAgIGNvbnN0IHByaW1pdGl2ZVByb3RvdHlwZSA9
IE9iamVjdC5nZXRQcm90b3R5cGVPZihwcmltaXRpdmUpOworICAgICAgICBjb25zdCBzdGF0aWND
dXN0b21WYWx1ZSA9ICR2bS5jcmVhdGVTdGF0aWNDdXN0b21WYWx1ZSgpOworICAgICAgICBPYmpl
Y3Quc2V0UHJvdG90eXBlT2YocHJpbWl0aXZlUHJvdG90eXBlLCBzdGF0aWNDdXN0b21WYWx1ZSk7
CisKKyAgICAgICAgcHJpbWl0aXZlLnRlc3RTdGF0aWNWYWx1ZSA9IDE7CisgICAgICAgIHNob3Vs
ZEJlKHN0YXRpY0N1c3RvbVZhbHVlLnRlc3RTdGF0aWNWYWx1ZSwgMSk7CisgICAgICAgIHNob3Vs
ZFRocm93KCgpID0+IHsgcHJpbWl0aXZlLnRlc3RTdGF0aWNWYWx1ZSA9IDE7IH0sICJUeXBlRXJy
b3I6IEF0dGVtcHRlZCB0byBhc3NpZ24gdG8gcmVhZG9ubHkgcHJvcGVydHkuIik7CisKKyAgICAg
ICAgc2hvdWxkVGhyb3coKCkgPT4geyBwcmltaXRpdmUudGVzdFN0YXRpY1ZhbHVlTm9TZXR0ZXIg
PSAxOyB9LCAiVHlwZUVycm9yOiBBdHRlbXB0ZWQgdG8gYXNzaWduIHRvIHJlYWRvbmx5IHByb3Bl
cnR5LiIpOworICAgICAgICBzaG91bGRUaHJvdygoKSA9PiB7IHByaW1pdGl2ZS50ZXN0U3RhdGlj
VmFsdWVSZWFkT25seSA9IDE7IH0sICJUeXBlRXJyb3I6IEF0dGVtcHRlZCB0byBhc3NpZ24gdG8g
cmVhZG9ubHkgcHJvcGVydHkuIik7CisgICAgICAgIE9iamVjdC5zZXRQcm90b3R5cGVPZihwcmlt
aXRpdmVQcm90b3R5cGUsIE9iamVjdC5wcm90b3R5cGUpOworICAgIH0KK30pKCk7CisKKyhmdW5j
dGlvbiB0ZXN0U3RhdGljQ3VzdG9tQWNjZXNzb3IoKSB7CisgICAgT2JqZWN0LmRlZmluZVByb3Bl
cnRpZXMoT2JqZWN0LnByb3RvdHlwZSwgeworICAgICAgICB0ZXN0U3RhdGljQWNjZXNzb3I6IHBv
aXNvbmVkU2V0dGVyLAorICAgICAgICB0ZXN0U3RhdGljQWNjZXNzb3JSZWFkT25seTogcG9pc29u
ZWRTZXR0ZXIsCisgICAgfSk7CisKKyAgICBmb3IgKGNvbnN0IHByaW1pdGl2ZSBvZiBwcmltaXRp
dmVzKSB7CisgICAgICAgIGNvbnN0IHByaW1pdGl2ZVByb3RvdHlwZSA9IE9iamVjdC5nZXRQcm90
b3R5cGVPZihwcmltaXRpdmUpOworICAgICAgICBPYmplY3Quc2V0UHJvdG90eXBlT2YocHJpbWl0
aXZlUHJvdG90eXBlLCAkdm0uY3JlYXRlU3RhdGljQ3VzdG9tQWNjZXNzb3IoKSk7CisKKyAgICAg
ICAgZm9yIChsZXQgaSA9IDA7IGkgPCAxMDAwOyBpKyspIHsKKyAgICAgICAgICAgIHByaW1pdGl2
ZS50ZXN0U3RhdGljQWNjZXNzb3IgPSBpOworICAgICAgICAgICAgc2hvdWxkQmUocHJpbWl0aXZl
UHJvdG90eXBlLnRlc3RGaWVsZCwgaSk7CisgICAgICAgIH0KKworICAgICAgICBzaG91bGRUaHJv
dygoKSA9PiB7IHByaW1pdGl2ZS50ZXN0U3RhdGljQWNjZXNzb3JSZWFkT25seSA9IDE7IH0sICJU
eXBlRXJyb3I6IEF0dGVtcHRlZCB0byBhc3NpZ24gdG8gcmVhZG9ubHkgcHJvcGVydHkuIik7Cisg
ICAgICAgIE9iamVjdC5zZXRQcm90b3R5cGVPZihwcmltaXRpdmVQcm90b3R5cGUsIE9iamVjdC5w
cm90b3R5cGUpOworICAgIH0KK30pKCk7CkluZGV4OiBKU1Rlc3RzL3N0cmVzcy9wdXQtdG8tcHJp
bWl0aXZlLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIEpTVGVzdHMvc3RyZXNzL3B1dC10by1wcmltaXRpdmUu
anMJKG5vbmV4aXN0ZW50KQorKysgSlNUZXN0cy9zdHJlc3MvcHV0LXRvLXByaW1pdGl2ZS5qcwko
d29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDI3IEBACitmdW5jdGlvbiBzaG91bGRCZShhY3R1YWws
IGV4cGVjdGVkKSB7CisgICAgaWYgKGFjdHVhbCAhPT0gZXhwZWN0ZWQpCisgICAgICAgIHRocm93
IG5ldyBFcnJvcihgQmFkIHZhbHVlOiAke2FjdHVhbH0hYCk7Cit9CisKK2Z1bmN0aW9uIHNob3Vs
ZFRocm93KGZ1bmMsIGVycm9yTWVzc2FnZSkgeworICAgIGxldCBlcnJvclRocm93biA9IGZhbHNl
OworICAgIHRyeSB7CisgICAgICAgIGZ1bmMoKTsKKyAgICB9IGNhdGNoIChlcnJvcikgeworICAg
ICAgICBlcnJvclRocm93biA9IHRydWU7CisgICAgICAgIGlmIChTdHJpbmcoZXJyb3IpICE9PSBl
cnJvck1lc3NhZ2UpCisgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEJhZCBlcnJvcjogJHtl
cnJvcn1gKTsKKyAgICB9CisgICAgaWYgKCFlcnJvclRocm93bikKKyAgICAgICAgdGhyb3cgbmV3
IEVycm9yKCJEaWRuJ3QgdGhyb3chIik7Cit9CisKKyhmdW5jdGlvbiBzdHJpbmdMZW5ndGgoKSB7
CisgICAgbGV0IHN0ciA9ICJmb28iOworCisgICAgZm9yIChsZXQgaSA9IDA7IGkgPCAxZTU7IGkr
KykgeworICAgICAgICBzdHIubGVuZ3RoID0gMDsKKyAgICAgICAgc2hvdWxkQmUoc3RyLmxlbmd0
aCwgMyk7CisgICAgICAgIHNob3VsZFRocm93KCgpID0+IHsgInVzZSBzdHJpY3QiOyAiYmFyIi5s
ZW5ndGggPSAzOyB9LCAiVHlwZUVycm9yOiBBdHRlbXB0ZWQgdG8gYXNzaWduIHRvIHJlYWRvbmx5
IHByb3BlcnR5LiIpOworICAgIH0KK30pKCk7CkluZGV4OiBKU1Rlc3RzL3N0cmVzcy9wdXQtdG8t
cHJvdG8tY2hhaW4tb3ZlcnJpZGVzLXB1dC5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKU1Rlc3RzL3N0cmVz
cy9wdXQtdG8tcHJvdG8tY2hhaW4tb3ZlcnJpZGVzLXB1dC5qcwkobm9uZXhpc3RlbnQpCisrKyBK
U1Rlc3RzL3N0cmVzcy9wdXQtdG8tcHJvdG8tY2hhaW4tb3ZlcnJpZGVzLXB1dC5qcwkod29ya2lu
ZyBjb3B5KQpAQCAtMCwwICsxLDE0MiBAQAorY29uc3QgVEVTVF9WQUxVRSA9IDEwNjI2MzA3MTM7
IC8vIEFycmF5J3MgImxlbmd0aCIgaXMgcmVxdWlyZWQgdG8gYmUgaW50MzIKKwordGVzdFNldFJl
c3VsdChbMSwgMl0sICJsZW5ndGgiLCB0cnVlKTsKK3Rlc3RTZXRSZXN1bHQoCisgICAgT2JqZWN0
LmRlZmluZVByb3BlcnR5KG5ldyBBcnJheSwgImxlbmd0aCIsIHsgd3JpdGFibGU6IGZhbHNlIH0p
LAorICAgICJsZW5ndGgiLAorICAgIGZhbHNlLAorKTsKKwordGVzdFNldFJlc3VsdChuZXcgU3Ry
aW5nLCAibGVuZ3RoIiwgZmFsc2UpOwordGVzdFNldFJlc3VsdChuZXcgUmVnRXhwLCAibGFzdElu
ZGV4IiwgdHJ1ZSk7Cit0ZXN0U2V0UmVzdWx0KAorICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSgv
KD86KS9nLCAibGFzdEluZGV4IiwgeyB3cml0YWJsZTogZmFsc2UgfSksCisgICAgImxhc3RJbmRl
eCIsCisgICAgZmFsc2UsCispOworCitmb3IgKGNvbnN0IGtleSBvZiBbImxpbmUiLCAiY29sdW1u
IiwgInNvdXJjZVVSTCIsICJzdGFjayJdKQorICAgIHRlc3RTZXRSZXN1bHQobmV3IEVycm9yLCBr
ZXksIHRydWUpOworCitjb25zdCBtYXBwZWRBcmd1bWVudHMgPSAoZnVuY3Rpb24oYSwgYikgeyBy
ZXR1cm4gYXJndW1lbnRzOyB9KSgxLCAyKTsKK3Rlc3RTZXRSZXN1bHQobWFwcGVkQXJndW1lbnRz
LCAiY2FsbGVlIiwgdHJ1ZSk7Cit0ZXN0U2V0UmVzdWx0KG1hcHBlZEFyZ3VtZW50cywgImxlbmd0
aCIsIHRydWUpOwordGVzdFNldFJlc3VsdChtYXBwZWRBcmd1bWVudHMsIFN5bWJvbC5pdGVyYXRv
ciwgdHJ1ZSk7CisKK2NvbnN0IHVubWFwcGVkQXJndW1lbnRzID0gKGZ1bmN0aW9uKCkgeyAidXNl
IHN0cmljdCI7IHJldHVybiBhcmd1bWVudHM7IH0pKCk7Cit0ZXN0U2V0UmVzdWx0KHVubWFwcGVk
QXJndW1lbnRzLCAibGVuZ3RoIiwgdHJ1ZSk7Cit0ZXN0U2V0UmVzdWx0KHVubWFwcGVkQXJndW1l
bnRzLCBTeW1ib2wuaXRlcmF0b3IsIHRydWUpOworCit2YXIgZm9vOworZnVuY3Rpb24gYmFyKCkg
e30KK2ZvciAoY29uc3Qga2V5IG9mIFsiZm9vIiwgImJhciIsICJwYXJzZUludCJdKQorICAgIHRl
c3RTZXRSZXN1bHQoZ2xvYmFsVGhpcywga2V5LCB0cnVlKTsKKworZm9yIChjb25zdCBrZXkgb2Yg
WyJJbmZpbml0eSIsICJOYU4iLCAidW5kZWZpbmVkIl0pCisgICAgdGVzdFNldFJlc3VsdChnbG9i
YWxUaGlzLCBrZXksIGZhbHNlKTsKKworZm9yIChjb25zdCBrZXkgb2YgWyJuYW1lIiwgImxlbmd0
aCJdKSB7CisgICAgdGVzdFNldFJlc3VsdChmdW5jdGlvbigpIHt9LmJpbmQoKSwga2V5LCBmYWxz
ZSk7CisgICAgdGVzdFNldFJlc3VsdCgKKyAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGZ1
bmN0aW9uKCkge30sIGtleSwgeyB3cml0YWJsZTogdHJ1ZSB9KSwKKyAgICAgICAga2V5LAorICAg
ICAgICB0cnVlLAorICAgICk7CisKKyAgICB0ZXN0U2V0UmVzdWx0KCgpID0+IHsgInVzZSBzdHJp
Y3QiOyB9LCBrZXksIGZhbHNlKTsKKyAgICB0ZXN0U2V0UmVzdWx0KAorICAgICAgICBPYmplY3Qu
ZGVmaW5lUHJvcGVydHkocGFyc2VGbG9hdCwga2V5LCB7IHdyaXRhYmxlOiB0cnVlIH0pLAorICAg
ICAgICBrZXksCisgICAgICAgIHRydWUsCisgICAgKTsKK30KKwordGVzdFNldFJlc3VsdChmdW5j
dGlvbigpIHsgInVzZSBzdHJpY3QiOyB9LCAicHJvdG90eXBlIiwgdHJ1ZSk7Cit0ZXN0U2V0UmVz
dWx0KAorICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShmdW5jdGlvbigpIHt9LCAicHJvdG90eXBl
IiwgeyB3cml0YWJsZTogZmFsc2UgfSksCisgICAgInByb3RvdHlwZSIsCisgICAgZmFsc2UsCisp
OworCit0ZXN0U2V0UmVzdWx0KGZ1bmN0aW9uKCkge30sICJhcmd1bWVudHMiLCBmYWxzZSk7Cit0
ZXN0U2V0UmVzdWx0KGZ1bmN0aW9uKCkge30sICJjYWxsZXIiLCBmYWxzZSk7CisKKy8vID09PSBo
YXJuZXNzID09PQorCitmdW5jdGlvbiB0ZXN0U2V0UmVzdWx0KHRhcmdldCwga2V5LCBleHBlY3Rl
ZFJlc3VsdCkgeworICAgIGxldCBjbGVhblVwID0gcHV0U2V0dGVyT25Qcm90b3R5cGUodGFyZ2V0
LCBrZXksICgpID0+IHt9KTsKKworICAgIGZvciAoY29uc3QgcHJpbWl0aXZlIG9mIFt0cnVlLCAx
LCAiZm9vIiwgU3ltYm9sKCksIDBuXSkgeworICAgICAgICBjb25zdCBwcmltaXRpdmVQcm90b3R5
cGUgPSBPYmplY3QuZ2V0UHJvdG90eXBlT2YocHJpbWl0aXZlKTsKKyAgICAgICAgT2JqZWN0LnNl
dFByb3RvdHlwZU9mKHByaW1pdGl2ZVByb3RvdHlwZSwgdGFyZ2V0KTsKKyAgICAgICAgdGVzdFNl
dFJlc3VsdEludGVybmFsKHRhcmdldCwga2V5LCBwcmltaXRpdmUsIGZhbHNlKTsKKyAgICAgICAg
T2JqZWN0LnNldFByb3RvdHlwZU9mKHByaW1pdGl2ZVByb3RvdHlwZSwgT2JqZWN0LnByb3RvdHlw
ZSk7CisgICAgfQorCisgICAgY2xlYW5VcCgpOworICAgIGNsZWFuVXAgPSBwdXRTZXR0ZXJPblBy
b3RvdHlwZSh0YXJnZXQsIGtleSwgKCkgPT4geworICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYCR7
U3RyaW5nKGtleSl9IHNldHRlciBzaG91bGQgYmUgdW5yZWFjaGFibGUhYCk7CisgICAgfSk7CisK
KyAgICBmb3IgKGNvbnN0IHJlY2VpdmVyIG9mIFsKKyAgICAgICAgT2JqZWN0LmNyZWF0ZSh0YXJn
ZXQpLAorICAgICAgICBPYmplY3QuY3JlYXRlKE9iamVjdC5jcmVhdGUodGFyZ2V0KSksCisgICAg
ICAgIG5ldyBQcm94eSh0YXJnZXQsIHt9KSwKKyAgICAgICAgbmV3IFByb3h5KHRhcmdldCwgUmVm
bGVjdCksCisgICAgXSkKKyAgICAgICAgdGVzdFNldFJlc3VsdEludGVybmFsKHRhcmdldCwga2V5
LCByZWNlaXZlciwgZXhwZWN0ZWRSZXN1bHQpOworCisgICAgY2xlYW5VcCgpOworfQorCitmdW5j
dGlvbiBwdXRTZXR0ZXJPblByb3RvdHlwZSh0YXJnZXQsIGtleSwgc2V0KSB7CisgICAgY29uc3Qg
ZGVzY3JpcHRvciA9IHsgc2V0LCBjb25maWd1cmFibGU6IHRydWUgfTsKKyAgICBjb25zdCBjdXJy
ZW50UHJvdG90eXBlID0gT2JqZWN0LmdldFByb3RvdHlwZU9mKHRhcmdldCk7CisgICAgY29uc3Qg
bmV3UHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShudWxsLCB7IFtrZXldOiBkZXNjcmlwdG9yIH0p
OworCisgICAgaWYgKFJlZmxlY3Quc2V0UHJvdG90eXBlT2YodGFyZ2V0LCBuZXdQcm90b3R5cGUp
KQorICAgICAgICByZXR1cm4gKCkgPT4geyBPYmplY3Quc2V0UHJvdG90eXBlT2YodGFyZ2V0LCBj
dXJyZW50UHJvdG90eXBlKTsgfTsKKworICAgIGlmIChjdXJyZW50UHJvdG90eXBlICE9PSBudWxs
ICYmIFJlZmxlY3QuZGVmaW5lUHJvcGVydHkoY3VycmVudFByb3RvdHlwZSwga2V5LCBkZXNjcmlw
dG9yKSkKKyAgICAgICAgcmV0dXJuICgpID0+IHsgInVzZSBzdHJpY3QiOyBkZWxldGUgY3VycmVu
dFByb3RvdHlwZVtrZXldOyB9OworCisgICAgdGhyb3cgbmV3IEVycm9yKCJUaGlzIGlzIHVucmVh
Y2hhYmxlOiBhdCBsZWFzdCBvbmUgYXBwcm9hY2ggc2hvdWxkIHN1Y2NlZWQhIik7Cit9CisKK2Z1
bmN0aW9uIHRlc3RTZXRSZXN1bHRJbnRlcm5hbCh0YXJnZXQsIGtleSwgcmVjZWl2ZXIsIGV4cGVj
dGVkUmVzdWx0KSB7CisgICAgcmVjZWl2ZXJba2V5XSA9IFRFU1RfVkFMVUU7CisgICAgc2hvdWxk
QmUocmVjZWl2ZXJba2V5XSA9PT0gVEVTVF9WQUxVRSwgZXhwZWN0ZWRSZXN1bHQsIGtleSk7CisK
KyAgICB0ZXN0U2V0UmVzdWx0U3RyaWN0KHJlY2VpdmVyLCBrZXksIGV4cGVjdGVkUmVzdWx0KTsK
KworICAgIGlmIChyZWNlaXZlciA9PT0gT2JqZWN0KHJlY2VpdmVyKSkKKyAgICAgICAgc2hvdWxk
QmUoUmVmbGVjdC5zZXQocmVjZWl2ZXIsIGtleSwgVEVTVF9WQUxVRSksIGV4cGVjdGVkUmVzdWx0
LCBrZXkpOworICAgIHNob3VsZEJlKFJlZmxlY3Quc2V0KHRhcmdldCwga2V5LCBURVNUX1ZBTFVF
LCByZWNlaXZlciksIGV4cGVjdGVkUmVzdWx0LCBrZXkpOworfQorCitmdW5jdGlvbiB0ZXN0U2V0
UmVzdWx0U3RyaWN0KHJlY2VpdmVyLCBrZXksIGV4cGVjdGVkUmVzdWx0KSB7CisgICAgInVzZSBz
dHJpY3QiOworICAgIGlmIChleHBlY3RlZFJlc3VsdCkgeworICAgICAgICByZWNlaXZlcltrZXld
ID0gVEVTVF9WQUxVRTsKKyAgICAgICAgc2hvdWxkQmUocmVjZWl2ZXJba2V5XSwgVEVTVF9WQUxV
RSwga2V5KTsKKyAgICB9IGVsc2UKKyAgICAgICAgc2hvdWxkVGhyb3dUeXBlRXJyb3IoKCkgPT4g
eyByZWNlaXZlcltrZXldID0gVEVTVF9WQUxVRTsgfSwga2V5KTsKK30KKworZnVuY3Rpb24gc2hv
dWxkQmUoYWN0dWFsLCBleHBlY3RlZCwga2V5KSB7CisgICAgaWYgKGFjdHVhbCAhPT0gZXhwZWN0
ZWQpCisgICAgICAgIHRocm93IG5ldyBFcnJvcihgS2V5OiAke1N0cmluZyhrZXkpfS4gJHthY3R1
YWx9ICE9PSAke2V4cGVjdGVkfWApOworfQorCitmdW5jdGlvbiBzaG91bGRUaHJvd1R5cGVFcnJv
cihmdW5jLCBrZXkpIHsKKyAgICBsZXQgZXJyb3JUaHJvd24gPSBmYWxzZTsKKyAgICB0cnkgewor
ICAgICAgICBmdW5jKCk7CisgICAgfSBjYXRjaCAoZXJyb3IpIHsKKyAgICAgICAgZXJyb3JUaHJv
d24gPSB0cnVlOworICAgICAgICBpZiAoZXJyb3IuY29uc3RydWN0b3IgIT09IFR5cGVFcnJvcikK
KyAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgS2V5OiAke1N0cmluZyhrZXkpfS4gQmFkIGVy
cm9yOiAke2Vycm9yfWApOworICAgIH0KKyAgICBpZiAoIWVycm9yVGhyb3duKQorICAgICAgICB0
aHJvdyBuZXcgRXJyb3IoYEtleTogJHtTdHJpbmcoa2V5KX0uIERpZG4ndCB0aHJvdyFgKTsKK30K
SW5kZXg6IEpTVGVzdHMvc3RyZXNzL3R5cGVkLWFycmF5LWNhbm9uaWNhbC1udW1lcmljLWluZGV4
LXN0cmluZy1zZXQuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSlNUZXN0cy9zdHJlc3MvdHlwZWQtYXJyYXkt
Y2Fub25pY2FsLW51bWVyaWMtaW5kZXgtc3RyaW5nLXNldC5qcwkobm9uZXhpc3RlbnQpCisrKyBK
U1Rlc3RzL3N0cmVzcy90eXBlZC1hcnJheS1jYW5vbmljYWwtbnVtZXJpYy1pbmRleC1zdHJpbmct
c2V0LmpzCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTggQEAKKyd1c2Ugc3RyaWN0JzsKK2Nv
bnN0IFR5cGVkQXJyYXlzID0gW1VpbnQ4Q2xhbXBlZEFycmF5LCBVaW50OEFycmF5LCBVaW50MTZB
cnJheSwgVWludDMyQXJyYXksIEludDhBcnJheSwgSW50MTZBcnJheSwgSW50MzJBcnJheSwgRmxv
YXQzMkFycmF5LCBGbG9hdDY0QXJyYXldOworY29uc3QgY2Fub25pY2FsTnVtZXJpY0luZGV4U3Ry
aW5ncyA9IFsnLTAnLCAnLTEnLCAnLTMuMTQnLCAnSW5maW5pdHknLCAnLUluZmluaXR5JywgJ05h
TicsICcwLjUnLCAnNDI5NDk2NzI5NScsICc0Mjk0OTY3Mjk2J107CisKK2Z1bmN0aW9uIGFzc2Vy
dCh4LCBrZXkpIHsKKyAgICBpZiAoIXgpCisgICAgICAgIHRocm93IG5ldyBFcnJvcihgQmFkIGFz
c2VydGlvbiEgS2V5OiAnJHtrZXl9J2ApOworfQorCitmb3IgKGNvbnN0IFR5cGVkQXJyYXkgb2Yg
VHlwZWRBcnJheXMpIHsKKyAgICBmb3IgKGNvbnN0IGtleSBvZiBjYW5vbmljYWxOdW1lcmljSW5k
ZXhTdHJpbmdzKSB7CisgICAgICAgIGNvbnN0IGFzc2VydFByb3RvdHlwZVByb3BlcnR5SXNVbnJl
YWNoYWJsZSA9ICgpID0+IHsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBjb25zdCB0
QSA9IG5ldyBUeXBlZEFycmF5OworICAgICAgICAgICAgICAgIHRBW2tleV0gPSAxOworICAgICAg
ICAgICAgICAgIGFzc2VydCghdEEuaGFzT3duUHJvcGVydHkoa2V5KSwga2V5KTsKKyAgICAgICAg
ICAgIH0KKworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGNvbnN0IHRBID0gbmV3IFR5
cGVkQXJyYXk7CisgICAgICAgICAgICAgICAgY29uc3QgaGVpciA9IE9iamVjdC5jcmVhdGUodEEp
OworICAgICAgICAgICAgICAgIGhlaXJba2V5XSA9IDI7CisKKyAgICAgICAgICAgICAgICBhc3Nl
cnQoIXRBLmhhc093blByb3BlcnR5KGtleSksIGtleSk7CisgICAgICAgICAgICAgICAgYXNzZXJ0
KCFoZWlyLmhhc093blByb3BlcnR5KGtleSksIGtleSk7CisgICAgICAgICAgICB9CisKKyAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICBjb25zdCB0YXJnZXQgPSB7fTsKKyAgICAgICAgICAg
ICAgICBjb25zdCByZWNlaXZlciA9IG5ldyBUeXBlZEFycmF5OworCisgICAgICAgICAgICAgICAg
YXNzZXJ0KCFSZWZsZWN0LnNldCh0YXJnZXQsIGtleSwgMywgcmVjZWl2ZXIpLCBrZXkpOworICAg
ICAgICAgICAgICAgIGFzc2VydCghdGFyZ2V0Lmhhc093blByb3BlcnR5KGtleSksIGtleSk7Cisg
ICAgICAgICAgICAgICAgYXNzZXJ0KCFyZWNlaXZlci5oYXNPd25Qcm9wZXJ0eShrZXkpLCBrZXkp
OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgY29uc3Qg
dEEgPSBuZXcgVHlwZWRBcnJheTsKKyAgICAgICAgICAgICAgICBjb25zdCB0YXJnZXQgPSBPYmpl
Y3QuY3JlYXRlKHRBKTsKKyAgICAgICAgICAgICAgICBjb25zdCByZWNlaXZlciA9IHt9OworCisg
ICAgICAgICAgICAgICAgYXNzZXJ0KFJlZmxlY3Quc2V0KHRhcmdldCwga2V5LCA0LCByZWNlaXZl
ciksIGtleSk7CisgICAgICAgICAgICAgICAgYXNzZXJ0KCF0QS5oYXNPd25Qcm9wZXJ0eShrZXkp
LCBrZXkpOworICAgICAgICAgICAgICAgIGFzc2VydCghdGFyZ2V0Lmhhc093blByb3BlcnR5KGtl
eSksIGtleSk7CisgICAgICAgICAgICAgICAgYXNzZXJ0KCFyZWNlaXZlci5oYXNPd25Qcm9wZXJ0
eShrZXkpLCBrZXkpOworICAgICAgICAgICAgfQorICAgICAgICB9OworCisgICAgICAgIE9iamVj
dC5kZWZpbmVQcm9wZXJ0eShUeXBlZEFycmF5LnByb3RvdHlwZSwga2V5LCB7CisgICAgICAgICAg
ICBzZXQoKSB7IHRocm93IG5ldyBFcnJvcihgJHtUeXBlZEFycmF5Lm5hbWV9LnByb3RvdHlwZVsn
JHtrZXl9J10gc2V0dGVyIHNob3VsZCBiZSB1bnJlYWNoYWJsZSFgKTsgfSwKKyAgICAgICAgICAg
IGNvbmZpZ3VyYWJsZTogdHJ1ZSwKKyAgICAgICAgfSk7CisgICAgICAgIGFzc2VydFByb3RvdHlw
ZVByb3BlcnR5SXNVbnJlYWNoYWJsZSgpOworCisgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0
eShUeXBlZEFycmF5LnByb3RvdHlwZSwga2V5LCB7IHdyaXRhYmxlOiBmYWxzZSB9KTsKKyAgICAg
ICAgYXNzZXJ0UHJvdG90eXBlUHJvcGVydHlJc1VucmVhY2hhYmxlKCk7CisgICAgfQorfQpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCShyZXZpc2lvbiAyNzY1ODUpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTU3IEBACisy
MDIxLTA0LTI2ICBBbGV4ZXkgU2h2YXlrYSAgPHNodmFpa2FsZXNoQGdtYWlsLmNvbT4KKworICAg
ICAgICBbSlNDXSBPcmRpbmFyeVNldCBzaG91bGQgaW52b2tlIGN1c3RvbSBbW1NldF1dIG1ldGhv
ZHMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIxNzkx
NgorCisgICAgICAgIFJldmlld2VkIGJ5IFl1c3VrZSBTdXp1a2kuCisKKyAgICAgICAgVGhpcyBw
YXRjaCBmaXhlcyBwdXRJbmxpbmVTbG93KCkgdG8gaGFuZGxlIHNwZWNpYWwgcHJvcGVydGllcyAo
bGlrZSBKU0Z1bmN0aW9uJ3MgIm5hbWUiCisgICAgICAgIGFuZCBKU0FycmF5J3MgImxlbmd0aCIp
IGluIHByb3RvdHlwZSBjaGFpbi4gV2hlbiBzdWNoIHByb3BlcnR5IGlzIGVuY291bnRlcmVkLCBw
cm90b3R5cGUKKyAgICAgICAgY2hhaW4gdHJhdmVyc2FsIGlzIHN0b3BwZWQ7IGlmIGl0J3MgcmVh
ZC1vbmx5LCBhIFR5cGVFcnJvciBpcyB0aHJvd24gaW4gc3RyaWN0IG1vZGUuCisKKyAgICAgICAg
VGhpcyBjaGFuZ2UgYWRkcyBPdmVycmlkZXNQdXQgb3V0IG9mIGxpbmUgdHlwZSBpbmZvIGZsYWcs
IGFuZCB1dGlsaXplcyBpdCBpbiBwdXRJbmxpbmVTbG93KCkKKyAgICAgICAgdG8gaW52b2tlIG92
ZXJyaWRlbiBtZXRob2RzLiBXaGlsZSB0aGlzIGFwcHJvYWNoIHJlcXVpcmVzIHB1dCgpIG1ldGhv
ZHMgdG8gYmUgYXdhcmUgb2YKKyAgICAgICAgYWx0ZXJlZCByZWNlaXZlcnMsIGl0IHJlbmRlcnMg
c2V2ZXJhbCBiZW5lZml0czoKKyAgICAgICAgICAxLiBwdXQoKSBtZXRob2QgY2FuIGJlIHVzZWQg
Zm9yIGJvdGggInJlYWwiIFtbU2V0XV0gb3ZlcnJpZGVzIGFuZCBzcGVjaWFsIHByb3BlcnRpZXMs
CisgICAgICAgICAgICAgd2l0aCBpdHMgcmV0dXJuIHZhbHVlIHJlbWFpbmluZyBgYm9vbGA7Cisg
ICAgICAgICAgMi4gaXQgaXMgc2ltcGxlciwgZmFzdGVyLCBhbmQgbW9yZSBwcmVkaWN0YWJsZSB0
aGFuIGNhbGxpbmcgW1tHZXRPd25Qcm9wZXJ0eV1dIGluCisgICAgICAgICAgICAgcHV0SW5saW5l
U2xvdygpIG9yIGFkZGluZyBkZWZpbmVPd25Qcm9wZXJ0eVZpYVB1dCgpIHRvIHRoZSBtZXRob2Qg
dGFibGUuCisKKyAgICAgICAgUmVtb3ZlcyBvcmRpbmFyeVNldFNsb3coKSBmb3Igbm9uLWluZGV4
IHByb3BlcnRpZXMsIHdoaWNoIGRpZG4ndCBpbnZva2Ugc29tZSBbW1NldF1dCisgICAgICAgIG1l
dGhvZHMgYXMgd2VsbC4gSW5zdGVhZCwgZGVmaW5lUHJvcGVydHlPblJlY2VpdmVyKCkgaXMgaW50
cm9kdWNlZCBmb3IgYWx0ZXJlZCByZWNlaXZlcnMsCisgICAgICAgIHdoaWNoIHBlcmZvcm1zIGNv
cnJlY3RseSB3aGVuIHJlYWNoZWQgYmVjYXVzZToKKyAgICAgICAgICAxLiBhbGwgc3BlY2lhbCBw
cm9wZXJ0aWVzIHdlcmUgYWxyZWFkeSBoYW5kbGVkICh1bmxlc3MgaXQncyBSZWZsZWN0LnNldCk7
CisgICAgICAgICAgMi4gcGVyZm9ybWluZyBwdXREaXJlY3RJbnRlcm5hbCgpIGlzIHVub2JzZXJ2
YWJsZSAodW5sZXNzIFByb3h5T2JqZWN0IHdhcyBzZWVuKTsKKyAgICAgICAgICAzLiBwdXREaXJl
Y3RJbnRlcm5hbCgpIG5vdyBmdWxseSBpbXBsZW1lbnRzIHByb3BlcnR5IGRlZmluaXRpb24gb2Yg
T3JkaW5hcnlTZXQgWzFdOworICAgICAgICAgIDQuIHB1dCgpIG92ZXJyaWRlIGlzIHJlcXVpcmVk
IGlmIGEgc3BlYyBkZWZpbmVzIGN1c3RvbSBbW0RlZmluZU93blByb3BlcnR5XV0uCisKKyAgICAg
ICAgU2luY2UgaW5kZXhlZCBwdXRzIGhhbmRsZSBvdmVycmlkZXMgLyBhbHRlcmVkIHJlY2VpdmVy
cyBxdWl0ZSBkaWZmZXJlbnRseSwgdGhleSB3aWxsCisgICAgICAgIGJlIGZpeGVkIGluIGEgZm9s
bG93LXVwLCBjb21wbGV0ZWx5IHJlbW92aW5nIG9yZGluYXJ5U2V0U2xvdygpLgorCisgICAgICAg
IEFsc28sIGJ5IG1lcmdpbmcgcHV0RW50cnkoKSAvIHB1dFRvUHJpbWl0aXZlKCkgaW50byBwdXRJ
bmxpbmVTbG93KCkgYW5kIGludHJvZHVjaW5nCisgICAgICAgIHB1dElubGluZUZhc3RSZXBsYWNp
bmdTdGF0aWNQcm9wZXJ0eUlmTmVlZGVkKCkgaGVscGVyLCB0aGlzIHBhdGNoIGZpeGVzIGEgZmV3
IGJ1Z3M6CisgICAgICAgICAgMS4gRGlyZWN0IFtbU2V0XV0gdG8gbm9uLXJlaWZpZWQgc3RhdGlj
IHByb3BlcnR5IG5vdyBwcmVzZXJ2ZXMgaXRzIGF0dHJpYnV0ZXMgd2hlbiByZXBsYWNpbmcgW1tW
YWx1ZV1dLgorICAgICAgICAgIDIuIFByb3RvdHlwZSBjaGFpbiBbW1NldF1dIHRvIG5vbi1yZWlm
aWVkIHN0YXRpYyBwcm9wZXJ0eSBub3cgdGhyb3dzIGlmIHJlY2VpdmVyIGlzIG5vbi1leHRlbnNp
YmxlLgorICAgICAgICAgIDMuIE5vbi1yZWlmaWVkIHN0YXRpYyB3cml0YWJsZSBwcm9wZXJ0eSBu
b3cgc2hhZG93cyByZWFkLW9ubHkgb25lIHRoYXQgaXMgZnVydGhlciBpbiBwcm90b3R5cGUgY2hh
aW4uCisgICAgICAgICAgNC4gTm9uLXJlaWZpZWQgc3RhdGljIHByb3BlcnRpZXMgaW4gcHJvdG90
eXBlIGNoYWluIG9mIGEgcHJpbWl0aXZlIGFyZSBub3cgY29uc2lkZXJlZC4KKworICAgICAgICBG
aXhlcyBhIGZldyBpc3N1ZXMgdGhhdCB3ZXJlIHByZXZpb3VzbHkgdW5vYnNlcnZhYmxlOgorICAg
ICAgICAgIDEuIFByb3BlcnR5QXR0cmlidXRlOjpDdXN0b21WYWx1ZSBpcyBub3cgdW5zZXQgd2hl
biBhIHNldHRlci1sZXNzIHByb3BlcnR5IGlzIHJlYXNzaWduZWQuCisgICAgICAgICAgMi4gdWlu
dDY0X3QgcHV0QnlJbmRleElubGluZSgpIG5vdyBjYWxscyBwdXQoKSB2aWEgbWV0aG9kIHRhYmxl
IGxpa2UgdWludDMyX3QgY291bnRlcnBhcnQuCisKKyAgICAgICAgT3RoZXIgbm90YWJsZSByZWZh
Y3RvcnM6CisgICAgICAgICAgMS4gSW5saW5lcyBjYWxsQ3VzdG9tU2V0dGVyKCksIGRyb3BwaW5n
IHdlaXJkIFRyaVN0YXRlIHJldHVybiB2YWx1ZS4KKyAgICAgICAgICAyLiBTaW1wbGlmaWVzIGlu
aXRpYWxpemF0aW9uIG9mIFN0cmluZ1Byb3RvdHlwZS4KKyAgICAgICAgICAzLiBTaW1wbGlmaWVz
IGlzVGhpc1ZhbHVlQWx0ZXJlZCgpIHRvIHBvaW50ZXIgY29tcGFyaXNvbnMgYXQgbm9uLUpTUHJv
eHkgY2FsbCBzaXRlcy4KKyAgICAgICAgICA0LiBSZW1vdmVzIGRvUHV0UHJvcGVydHlTZWN1cml0
eUNoZWNrKCkgbWV0aG9kcyBhcyB0aGUgc2FtZSBjaGVja3MgYXJlIHBlcmZvcm1lZCBieSBwdXQo
KSBtZXRob2RzLgorICAgICAgICAgIDUuIFJlbW92ZXMgcHJvdG90eXBlQ2hhaW5NYXlJbnRlcmNl
cHRTdG9yZVRvKCksIHdoaWNoIHByZXR0eSBtdWNoIGR1cGxpY2F0ZWQgY2FuUGVyZm9ybUZhc3RQ
dXRJbmxpbmUoKS4KKyAgICAgICAgICA2LiBSZW1vdmVzIGR1bW15IEpTQXJyYXlCdWZmZXJWaWV3
OjpwdXQoKSBtZXRob2QuCisgICAgICAgICAgNy4gUmVtb3ZlcyBub3cgdW51c2VkIGxvb2t1cFB1
dCgpLgorCisgICAgICAgIEFsaWducyBKU0Mgd2l0aCBWOCBhbmQgU3BpZGVyTW9ua2V5LgorCisg
ICAgICAgIFRoaXMgcGF0Y2ggY2FyZWZ1bGx5IHByZXNlcnZlcyB0aGUgY3VycmVudCBiZWhhdmlv
ciBvZiBSZWZsZWN0LnNldCB3aXRoIEN1c3RvbVZhbHVlCisgICAgICAgIGFuZCBwcm90b3R5cGUg
Y2hhaW4gW1tTZXRdXSB0byBhIEpTQ2FsbGJhY2tPYmplY3QgLyBsZWdhY3kgcGxhdGZvcm0gb2Jq
ZWN0LgorCisgICAgICAgIFRoaXMgY2hhbmdlIGlzIHBlcmZvcm1hbmNlLW5ldXRyYWwgb24gL3B1
dC8gbWljcm9iZW5jaG1hcmtzIGFzIGl0IGRvZXNuJ3QgYWZmZWN0CisgICAgICAgIGNhY2hpbmcs
IG9ubHkgdGhlIHNsb3cgcGF0aC4gUmVmbGVjdC5zZXQgd2l0aCBKU0ZpbmFsT2JqZWN0IHJlY2Vp
dmVyIGlzIDEzMCUgZmFzdGVyLgorICAgICAgICBwdXRJbmxpbmVTbG93KCkgbWljcm9iZW5jaG1h
cmtzIHByb2dyZXNzIGJ5IDQtMTglLgorCisgICAgICAgIFsxXTogaHR0cHM6Ly90YzM5LmVzL2Vj
bWEyNjIvI3NlYy1vcmRpbmFyeXNldHdpdGhvd25kZXNjcmlwdG9yIChzdGVwIDMpCisKKyAgICAg
ICAgKiBBUEkvSlNDYWxsYmFja09iamVjdC5oOgorICAgICAgICAqIEFQSS9KU0NhbGxiYWNrT2Jq
ZWN0RnVuY3Rpb25zLmg6CisgICAgICAgIChKU0M6OkpTQ2FsbGJhY2tPYmplY3Q8UGFyZW50Pjo6
cHV0KToKKyAgICAgICAgKiBBUEkvdGVzdHMvdGVzdGFwaVNjcmlwdHMvdGVzdGFwaS5qczoKKyAg
ICAgICAgKiBkZWJ1Z2dlci9EZWJ1Z2dlclNjb3BlLmg6CisgICAgICAgICogcnVudGltZS9DbGFz
c0luZm8uaDoKKyAgICAgICAgKiBydW50aW1lL0Nsb25lZEFyZ3VtZW50cy5oOgorICAgICAgICAq
IHJ1bnRpbWUvQ3VzdG9tR2V0dGVyU2V0dGVyLmNwcDoKKyAgICAgICAgKEpTQzo6Y2FsbEN1c3Rv
bVNldHRlcik6IERlbGV0ZWQuCisgICAgICAgICogcnVudGltZS9DdXN0b21HZXR0ZXJTZXR0ZXIu
aDoKKyAgICAgICAgKiBydW50aW1lL0Vycm9yQ29uc3RydWN0b3IuaDoKKyAgICAgICAgKiBydW50
aW1lL0Vycm9ySW5zdGFuY2UuaDoKKyAgICAgICAgKiBydW50aW1lL0dlbmVyaWNBcmd1bWVudHMu
aDoKKyAgICAgICAgKiBydW50aW1lL0dlbmVyaWNBcmd1bWVudHNJbmxpbmVzLmg6CisgICAgICAg
IChKU0M6OkdlbmVyaWNBcmd1bWVudHM8VHlwZT46OnB1dCk6CisgICAgICAgICogcnVudGltZS9H
ZXR0ZXJTZXR0ZXIuaDoKKyAgICAgICAgKiBydW50aW1lL0pTQXJyYXkuY3BwOgorICAgICAgICAo
SlNDOjpKU0FycmF5OjpwdXQpOgorICAgICAgICAqIHJ1bnRpbWUvSlNBcnJheS5oOgorICAgICAg
ICAqIHJ1bnRpbWUvSlNBcnJheUJ1ZmZlclZpZXcuY3BwOgorICAgICAgICAoSlNDOjpKU0FycmF5
QnVmZmVyVmlldzo6cHV0KTogRGVsZXRlZC4KKyAgICAgICAgKiBydW50aW1lL0pTQXJyYXlCdWZm
ZXJWaWV3Lmg6CisgICAgICAgICogcnVudGltZS9KU0NKU1ZhbHVlLmNwcDoKKyAgICAgICAgKEpT
Qzo6SlNWYWx1ZTo6cHV0VG9QcmltaXRpdmUpOgorICAgICAgICAqIHJ1bnRpbWUvSlNDZWxsLmNw
cDoKKyAgICAgICAgKEpTQzo6SlNDZWxsOjpkb1B1dFByb3BlcnR5U2VjdXJpdHlDaGVjayk6IERl
bGV0ZWQuCisgICAgICAgICogcnVudGltZS9KU0NlbGwuaDoKKyAgICAgICAgKiBydW50aW1lL0pT
RnVuY3Rpb24uY3BwOgorICAgICAgICAoSlNDOjpKU0Z1bmN0aW9uOjpwdXQpOgorICAgICAgICAq
IHJ1bnRpbWUvSlNGdW5jdGlvbi5oOgorICAgICAgICAqIHJ1bnRpbWUvSlNHZW5lcmljVHlwZWRB
cnJheVZpZXcuaDoKKyAgICAgICAgKiBydW50aW1lL0pTR2xvYmFsTGV4aWNhbEVudmlyb25tZW50
Lmg6CisgICAgICAgICogcnVudGltZS9KU0dsb2JhbE9iamVjdC5jcHA6CisgICAgICAgIChKU0M6
OkpTR2xvYmFsT2JqZWN0OjpwdXQpOgorICAgICAgICAqIHJ1bnRpbWUvSlNHbG9iYWxPYmplY3Qu
aDoKKyAgICAgICAgKiBydW50aW1lL0pTTGV4aWNhbEVudmlyb25tZW50Lmg6CisgICAgICAgICog
cnVudGltZS9KU01vZHVsZUVudmlyb25tZW50Lmg6CisgICAgICAgICogcnVudGltZS9KU01vZHVs
ZU5hbWVzcGFjZU9iamVjdC5oOgorICAgICAgICAqIHJ1bnRpbWUvSlNPYmplY3QuY3BwOgorICAg
ICAgICAoSlNDOjpKU09iamVjdDo6Z2V0T3duUHJvcGVydHlTbG90KToKKyAgICAgICAgKEpTQzo6
SlNPYmplY3Q6OnB1dElubGluZVNsb3cpOgorICAgICAgICAoSlNDOjpkZWZpbmVQcm9wZXJ0eU9u
UmVjZWl2ZXJTbG93KToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmRlZmluZVByb3BlcnR5T25S
ZWNlaXZlcik6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpwdXRJbmxpbmVGYXN0UmVwbGFjaW5n
U3RhdGljUHJvcGVydHlJZk5lZWRlZCk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0Ojpkb1B1dFBy
b3BlcnR5U2VjdXJpdHlDaGVjayk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkpTT2JqZWN0Ojpw
cm90b3R5cGVDaGFpbk1heUludGVyY2VwdFN0b3JlVG8pOiBEZWxldGVkLgorICAgICAgICAqIHJ1
bnRpbWUvSlNPYmplY3QuaDoKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OnB1dEJ5SW5kZXhJbmxp
bmUpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6aGFzTm9uUmVpZmllZFN0YXRpY1Byb3BlcnRp
ZXMpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6Z2V0T3duUHJvcGVydHlTbG90KToKKyAgICAg
ICAgKEpTQzo6SlNPYmplY3Q6OnB1dERpcmVjdCk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0Ojpk
b1B1dFByb3BlcnR5U2VjdXJpdHlDaGVjayk6IERlbGV0ZWQuCisgICAgICAgICogcnVudGltZS9K
U09iamVjdElubGluZXMuaDoKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmNhblBlcmZvcm1GYXN0
UHV0SW5saW5lRXhjbHVkaW5nUHJvdG8pOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6cHV0SW5s
aW5lRm9ySlNPYmplY3QpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6cHV0SW5saW5lRmFzdCk6
CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpwdXREaXJlY3RJbnRlcm5hbCk6CisgICAgICAgICog
cnVudGltZS9KU1Byb3h5Lmg6CisgICAgICAgICogcnVudGltZS9KU1R5cGVJbmZvLmg6CisgICAg
ICAgIChKU0M6OlR5cGVJbmZvOjpoYXNTdGF0aWNQcm9wZXJ0eVRhYmxlIGNvbnN0KToKKyAgICAg
ICAgKEpTQzo6VHlwZUluZm86Om92ZXJyaWRlc1B1dCBjb25zdCk6CisgICAgICAgIChKU0M6OlR5
cGVJbmZvOjpnZXRPd25Qcm9wZXJ0eVNsb3RNYXlCZVdyb25nQWJvdXREb250RW51bSBjb25zdCk6
CisgICAgICAgIChKU0M6OlR5cGVJbmZvOjpoYXNQdXRQcm9wZXJ0eVNlY3VyaXR5Q2hlY2sgY29u
c3QpOiBEZWxldGVkLgorICAgICAgICAqIHJ1bnRpbWUvTG9va3VwLmg6CisgICAgICAgIChKU0M6
OnB1dEVudHJ5KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6bG9va3VwUHV0KTogRGVsZXRlZC4K
KyAgICAgICAgKiBydW50aW1lL1Byb3BlcnR5U2xvdC5oOgorICAgICAgICAqIHJ1bnRpbWUvUHJv
eHlPYmplY3QuY3BwOgorICAgICAgICAoSlNDOjpQcm94eU9iamVjdDo6cHV0KToKKyAgICAgICAg
KiBydW50aW1lL1Byb3h5T2JqZWN0Lmg6CisgICAgICAgICogcnVudGltZS9QdXRQcm9wZXJ0eVNs
b3QuaDoKKyAgICAgICAgKEpTQzo6UHV0UHJvcGVydHlTbG90OjpQdXRQcm9wZXJ0eVNsb3QpOgor
ICAgICAgICAoSlNDOjpQdXRQcm9wZXJ0eVNsb3Q6OmNvbnRleHQgY29uc3QpOgorICAgICAgICAo
SlNDOjpQdXRQcm9wZXJ0eVNsb3Q6OmlzVGFpbnRlZEJ5T3BhcXVlT2JqZWN0IGNvbnN0KToKKyAg
ICAgICAgKEpTQzo6UHV0UHJvcGVydHlTbG90OjpzZXRJc1RhaW50ZWRCeU9wYXF1ZU9iamVjdCk6
CisgICAgICAgICogcnVudGltZS9SZWZsZWN0T2JqZWN0LmNwcDoKKyAgICAgICAgKEpTQzo6SlND
X0RFRklORV9IT1NUX0ZVTkNUSU9OKToKKyAgICAgICAgKiBydW50aW1lL1JlZ0V4cE9iamVjdC5j
cHA6CisgICAgICAgIChKU0M6OlJlZ0V4cE9iamVjdDo6cHV0KToKKyAgICAgICAgKiBydW50aW1l
L1JlZ0V4cE9iamVjdC5oOgorICAgICAgICAqIHJ1bnRpbWUvU3RyaW5nT2JqZWN0LmNwcDoKKyAg
ICAgICAgKEpTQzo6U3RyaW5nT2JqZWN0OjpwdXQpOgorICAgICAgICAqIHJ1bnRpbWUvU3RyaW5n
T2JqZWN0Lmg6CisgICAgICAgICogcnVudGltZS9TdHJpbmdQcm90b3R5cGUuY3BwOgorICAgICAg
ICAoSlNDOjpTdHJpbmdQcm90b3R5cGU6OmZpbmlzaENyZWF0aW9uKToKKyAgICAgICAgKEpTQzo6
U3RyaW5nUHJvdG90eXBlOjpjcmVhdGUpOgorICAgICAgICAqIHJ1bnRpbWUvU3RyaW5nUHJvdG90
eXBlLmg6CisgICAgICAgICogcnVudGltZS9TdHJ1Y3R1cmUuY3BwOgorICAgICAgICAoSlNDOjpT
dHJ1Y3R1cmU6OnZhbGlkYXRlRmxhZ3MpOgorICAgICAgICAqIHJ1bnRpbWUvU3RydWN0dXJlLmg6
CisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6aGFzTm9uUmVpZmllZFN0YXRpY1Byb3BlcnRpZXMg
Y29uc3QpOgorICAgICAgICAqIHRvb2xzL0pTRG9sbGFyVk0uY3BwOgorCiAyMDIxLTA0LTIzICBN
aWNoYWVsIFNhYm9mZiAgPG1zYWJvZmZAYXBwbGUuY29tPgogCiAgICAgICAgIFtZQVJSIEludGVy
cHJldGVyXSBJbXByb3BlciBiYWNrdHJhY2sgb2YgcGFyZW50aGVzZXMgd2l0aCBub24temVybyBi
YXNlZCBncmVlZHkgcXVhbnRpZmllcnMKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkv
SlNDYWxsYmFja09iamVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9B
UEkvSlNDYWxsYmFja09iamVjdC5oCShyZXZpc2lvbiAyNzY1ODUpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvQVBJL0pTQ2FsbGJhY2tPYmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAtMTI5LDcg
KzEyOSw3IEBAIHRlbXBsYXRlIDxjbGFzcyBQYXJlbnQ+CiBjbGFzcyBKU0NhbGxiYWNrT2JqZWN0
IGZpbmFsIDogcHVibGljIFBhcmVudCB7CiBwdWJsaWM6CiAgICAgdXNpbmcgQmFzZSA9IFBhcmVu
dDsKLSAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6
U3RydWN0dXJlRmxhZ3MgfCBPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3QgfCBPdmVycmlkZXNH
ZXRPd25TcGVjaWFsUHJvcGVydHlOYW1lcyB8IE92ZXJyaWRlc0dldENhbGxEYXRhIHwgSW50ZXJj
ZXB0c0dldE93blByb3BlcnR5U2xvdEJ5SW5kZXhFdmVuV2hlbkxlbmd0aElzTm90WmVybyB8IElt
cGxlbWVudHNIYXNJbnN0YW5jZSB8IFByb2hpYml0c1Byb3BlcnR5Q2FjaGluZyB8IEdldE93blBy
b3BlcnR5U2xvdE1heUJlV3JvbmdBYm91dERvbnRFbnVtOworICAgIHN0YXRpYyBjb25zdGV4cHIg
dW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8IE92ZXJyaWRl
c0dldE93blByb3BlcnR5U2xvdCB8IE92ZXJyaWRlc0dldE93blNwZWNpYWxQcm9wZXJ0eU5hbWVz
IHwgT3ZlcnJpZGVzR2V0Q2FsbERhdGEgfCBPdmVycmlkZXNQdXQgfCBJbnRlcmNlcHRzR2V0T3du
UHJvcGVydHlTbG90QnlJbmRleEV2ZW5XaGVuTGVuZ3RoSXNOb3RaZXJvIHwgSW1wbGVtZW50c0hh
c0luc3RhbmNlIHwgUHJvaGliaXRzUHJvcGVydHlDYWNoaW5nIHwgR2V0T3duUHJvcGVydHlTbG90
TWF5QmVXcm9uZ0Fib3V0RG9udEVudW07CiAgICAgc3RhdGljX2Fzc2VydCghKFN0cnVjdHVyZUZs
YWdzICYgSW1wbGVtZW50c0RlZmF1bHRIYXNJbnN0YW5jZSksICJ1c2luZyBjdXN0b21IYXNJbnN0
YW5jZSIpOwogCiAgICAgfkpTQ2FsbGJhY2tPYmplY3QoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9BUEkvSlNDYWxsYmFja09iamVjdEZ1bmN0aW9ucy5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNDYWxsYmFja09iamVjdEZ1bmN0aW9ucy5oCShyZXZp
c2lvbiAyNzY1ODUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQ2FsbGJhY2tPYmpl
Y3RGdW5jdGlvbnMuaAkod29ya2luZyBjb3B5KQpAQCAtMjU0LDYgKzI1NCw5IEBAIGJvb2wgSlND
YWxsYmFja09iamVjdDxQYXJlbnQ+OjpwdXQoSlNDZWwKICAgICBKU09iamVjdFJlZiB0aGlzUmVm
ID0gdG9SZWYoanNDYXN0PEpTT2JqZWN0Kj4odGhpc09iamVjdCkpOwogICAgIFJlZlB0cjxPcGFx
dWVKU1N0cmluZz4gcHJvcGVydHlOYW1lUmVmOwogICAgIEpTVmFsdWVSZWYgdmFsdWVSZWYgPSB0
b1JlZihnbG9iYWxPYmplY3QsIHZhbHVlKTsKKworICAgIGlmIChVTkxJS0VMWShpc1RoaXNWYWx1
ZUFsdGVyZWQoc2xvdCwgdGhpc09iamVjdCkpKQorICAgICAgICBSRUxFQVNFX0FORF9SRVRVUk4o
c2NvcGUsIFBhcmVudDo6cHV0KHRoaXNPYmplY3QsIGdsb2JhbE9iamVjdCwgcHJvcGVydHlOYW1l
LCB2YWx1ZSwgc2xvdCkpOwogICAgIAogICAgIGlmIChTdHJpbmdJbXBsKiBuYW1lID0gcHJvcGVy
dHlOYW1lLnVpZCgpKSB7CiAgICAgICAgIGZvciAoSlNDbGFzc1JlZiBqc0NsYXNzID0gdGhpc09i
amVjdC0+Y2xhc3NSZWYoKTsganNDbGFzczsganNDbGFzcyA9IGpzQ2xhc3MtPnBhcmVudENsYXNz
KSB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL3Rlc3RzL3Rlc3RhcGlTY3JpcHRz
L3Rlc3RhcGkuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS90ZXN0
cy90ZXN0YXBpU2NyaXB0cy90ZXN0YXBpLmpzCShyZXZpc2lvbiAyNzY1ODUpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQVBJL3Rlc3RzL3Rlc3RhcGlTY3JpcHRzL3Rlc3RhcGkuanMJKHdvcmtp
bmcgY29weSkKQEAgLTIwOCw2ICsyMDgsMjYgQEAgc2hvdWxkQmUoInN5bWJvbFRvU3RyaW5nVGFn
RGVzY3JpcHRvci5jbwogTXlPYmplY3RbU3ltYm9sLnRvU3RyaW5nVGFnXSA9ICJGb28iOwogc2hv
dWxkQmUoIk9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChNeU9iamVjdCkiLCAiW29iamVj
dCBGb29dIik7CiAKK3ZhciBNeU9iamVjdEhlaXIgPSBPYmplY3QuY3JlYXRlKE15T2JqZWN0KTsK
K015T2JqZWN0SGVpci50aHJvd09uU2V0ID0gMjI7Cit2YXIgTXlPYmplY3RIZWlyVGhyb3dPblNl
dERlc2NyaXB0b3IgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKE15T2JqZWN0SGVp
ciwgInRocm93T25TZXQiKTsKK3Nob3VsZEJlKCJ0eXBlb2YgTXlPYmplY3RIZWlyVGhyb3dPblNl
dERlc2NyaXB0b3IiLCAib2JqZWN0Iik7CitzaG91bGRCZSgiTXlPYmplY3RIZWlyVGhyb3dPblNl
dERlc2NyaXB0b3IudmFsdWUiLCAyMik7CitzaG91bGRCZSgiTXlPYmplY3RIZWlyVGhyb3dPblNl
dERlc2NyaXB0b3Iud3JpdGFibGUiLCB0cnVlKTsKK3Nob3VsZEJlKCJNeU9iamVjdEhlaXJUaHJv
d09uU2V0RGVzY3JpcHRvci5lbnVtZXJhYmxlIiwgdHJ1ZSk7CitzaG91bGRCZSgiTXlPYmplY3RI
ZWlyVGhyb3dPblNldERlc2NyaXB0b3IuY29uZmlndXJhYmxlIiwgdHJ1ZSk7CitzaG91bGRUaHJv
dygiTXlPYmplY3QudGhyb3dPblNldCA9IDIyIik7CisKK3ZhciBnbG9iYWxPYmplY3RIZWlyID0g
T2JqZWN0LmNyZWF0ZSh0aGlzKTsKK2dsb2JhbE9iamVjdEhlaXIuZ2xvYmFsU3RhdGljVmFsdWUy
ID0gMzM7Cit2YXIgZ2xvYmFsT2JqZWN0SGVpckdsb2JhbFN0YXRpY1ZhbHVlMkRlc2NyaXB0b3Ig
PSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGdsb2JhbE9iamVjdEhlaXIsICJnbG9i
YWxTdGF0aWNWYWx1ZTIiKTsKK3Nob3VsZEJlKCJ0eXBlb2YgZ2xvYmFsT2JqZWN0SGVpckdsb2Jh
bFN0YXRpY1ZhbHVlMkRlc2NyaXB0b3IiLCAib2JqZWN0Iik7CitzaG91bGRCZSgiZ2xvYmFsT2Jq
ZWN0SGVpckdsb2JhbFN0YXRpY1ZhbHVlMkRlc2NyaXB0b3IudmFsdWUiLCAzMyk7CitzaG91bGRC
ZSgiZ2xvYmFsT2JqZWN0SGVpckdsb2JhbFN0YXRpY1ZhbHVlMkRlc2NyaXB0b3Iud3JpdGFibGUi
LCB0cnVlKTsKK3Nob3VsZEJlKCJnbG9iYWxPYmplY3RIZWlyR2xvYmFsU3RhdGljVmFsdWUyRGVz
Y3JpcHRvci5lbnVtZXJhYmxlIiwgdHJ1ZSk7CitzaG91bGRCZSgiZ2xvYmFsT2JqZWN0SGVpckds
b2JhbFN0YXRpY1ZhbHVlMkRlc2NyaXB0b3IuY29uZmlndXJhYmxlIiwgdHJ1ZSk7CitzaG91bGRC
ZSgidGhpcy5nbG9iYWxTdGF0aWNWYWx1ZTIiLCAzKTsKKwogZGVyaXZlZCA9IG5ldyBEZXJpdmVk
KCk7CiAKIHNob3VsZEJlKCJkZXJpdmVkIGluc3RhbmNlb2YgRGVyaXZlZCIsIHRydWUpOwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RlYnVnZ2VyL0RlYnVnZ2VyU2NvcGUuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGVidWdnZXIvRGVidWdnZXJTY29wZS5oCShy
ZXZpc2lvbiAyNzY1ODUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGVidWdnZXIvRGVidWdn
ZXJTY29wZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNiw3ICszNiw3IEBAIGNsYXNzIEpTU2NvcGU7
CiBjbGFzcyBEZWJ1Z2dlclNjb3BlIGZpbmFsIDogcHVibGljIEpTTm9uRmluYWxPYmplY3Qgewog
cHVibGljOgogICAgIHVzaW5nIEJhc2UgPSBKU05vbkZpbmFsT2JqZWN0OwotICAgIHN0YXRpYyBj
b25zdGV4cHIgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8
IE92ZXJyaWRlc0dldE93blByb3BlcnR5U2xvdCB8IE92ZXJyaWRlc0dldE93blByb3BlcnR5TmFt
ZXM7CisgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6
OlN0cnVjdHVyZUZsYWdzIHwgT3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90IHwgT3ZlcnJpZGVz
R2V0T3duUHJvcGVydHlOYW1lcyB8IE92ZXJyaWRlc1B1dDsKIAogICAgIHRlbXBsYXRlPHR5cGVu
YW1lIENlbGxUeXBlLCBTdWJzcGFjZUFjY2VzcyBtb2RlPgogICAgIHN0YXRpYyBJc29TdWJzcGFj
ZSogc3Vic3BhY2VGb3IoVk0mIHZtKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvQ2xhc3NJbmZvLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvQ2xhc3NJbmZvLmgJKHJldmlzaW9uIDI3NjU4NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0NsYXNzSW5mby5oCSh3b3JraW5nIGNvcHkpCkBAIC02OCw5ICs2OCw2IEBAIHN0
cnVjdCBNZXRob2RUYWJsZSB7CiAgICAgdXNpbmcgR2V0T3duUHJvcGVydHlTbG90QnlJbmRleEZ1
bmN0aW9uUHRyID0gYm9vbCAoKikoSlNPYmplY3QqLCBKU0dsb2JhbE9iamVjdCosIHVuc2lnbmVk
LCBQcm9wZXJ0eVNsb3QmKTsKICAgICBHZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4RnVuY3Rpb25Q
dHIgTUVUSE9EX1RBQkxFX0VOVFJZKGdldE93blByb3BlcnR5U2xvdEJ5SW5kZXgpOwogCi0gICAg
dXNpbmcgRG9QdXRQcm9wZXJ0eVNlY3VyaXR5Q2hlY2tGdW5jdGlvblB0ciA9IHZvaWQgKCopKEpT
T2JqZWN0KiwgSlNHbG9iYWxPYmplY3QqLCBQcm9wZXJ0eU5hbWUsIFB1dFByb3BlcnR5U2xvdCYp
OwotICAgIERvUHV0UHJvcGVydHlTZWN1cml0eUNoZWNrRnVuY3Rpb25QdHIgTUVUSE9EX1RBQkxF
X0VOVFJZKGRvUHV0UHJvcGVydHlTZWN1cml0eUNoZWNrKTsKLQogICAgIHVzaW5nIFRvVGhpc0Z1
bmN0aW9uUHRyID0gSlNWYWx1ZSAoKikoSlNDZWxsKiwgSlNHbG9iYWxPYmplY3QqLCBFQ01BTW9k
ZSk7CiAgICAgVG9UaGlzRnVuY3Rpb25QdHIgTUVUSE9EX1RBQkxFX0VOVFJZKHRvVGhpcyk7CiAK
QEAgLTE1OCw3ICsxNTUsNiBAQCBzdHJ1Y3QgTWV0aG9kVGFibGUgewogICAgICAgICAmQ2xhc3NO
YW1lOjpkZWxldGVQcm9wZXJ0eUJ5SW5kZXgsIFwKICAgICAgICAgJkNsYXNzTmFtZTo6Z2V0T3du
UHJvcGVydHlTbG90LCBcCiAgICAgICAgICZDbGFzc05hbWU6OmdldE93blByb3BlcnR5U2xvdEJ5
SW5kZXgsIFwKLSAgICAgICAgJkNsYXNzTmFtZTo6ZG9QdXRQcm9wZXJ0eVNlY3VyaXR5Q2hlY2ss
IFwKICAgICAgICAgJkNsYXNzTmFtZTo6dG9UaGlzLCBcCiAgICAgICAgICZDbGFzc05hbWU6OmRl
ZmF1bHRWYWx1ZSwgXAogICAgICAgICAmQ2xhc3NOYW1lOjpnZXRPd25Qcm9wZXJ0eU5hbWVzLCBc
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9DbG9uZWRBcmd1bWVudHMuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9DbG9uZWRBcmd1bWVu
dHMuaAkocmV2aXNpb24gMjc2NTg1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
Q2xvbmVkQXJndW1lbnRzLmgJKHdvcmtpbmcgY29weSkKQEAgLTQwLDcgKzQwLDcgQEAgbmFtZXNw
YWNlIEpTQyB7CiBjbGFzcyBDbG9uZWRBcmd1bWVudHMgZmluYWwgOiBwdWJsaWMgSlNOb25GaW5h
bE9iamVjdCB7CiBwdWJsaWM6CiAgICAgdXNpbmcgQmFzZSA9IEpTTm9uRmluYWxPYmplY3Q7Ci0g
ICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVj
dHVyZUZsYWdzIHwgT3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90IHwgT3ZlcnJpZGVzR2V0T3du
U3BlY2lhbFByb3BlcnR5TmFtZXM7CisgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBTdHJ1
Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwgT3ZlcnJpZGVzR2V0T3duUHJvcGVy
dHlTbG90IHwgT3ZlcnJpZGVzR2V0T3duU3BlY2lhbFByb3BlcnR5TmFtZXMgfCBPdmVycmlkZXNQ
dXQ7CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDZWxsVHlwZSwgU3Vic3BhY2VBY2Nlc3MgbW9k
ZT4KICAgICBzdGF0aWMgSXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0N1c3RvbUdldHRlclNldHRlci5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ3VzdG9tR2V0dGVyU2V0dGVy
LmNwcAkocmV2aXNpb24gMjc2NTg1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
Q3VzdG9tR2V0dGVyU2V0dGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjYsMjggKzI2LDEwIEBA
CiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiQ3VzdG9tR2V0dGVyU2V0dGVyLmgiCiAK
LSNpbmNsdWRlICJKU0NKU1ZhbHVlSW5saW5lcy5oIgotI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25z
Lmg+Ci0KIG5hbWVzcGFjZSBKU0MgewogCiBTVEFUSUNfQVNTRVJUX0lTX1RSSVZJQUxMWV9ERVNU
UlVDVElCTEUoQ3VzdG9tR2V0dGVyU2V0dGVyKTsKIAogY29uc3QgQ2xhc3NJbmZvIEN1c3RvbUdl
dHRlclNldHRlcjo6c19pbmZvID0geyAiQ3VzdG9tR2V0dGVyU2V0dGVyIiwgbnVsbHB0ciwgbnVs
bHB0ciwgbnVsbHB0ciwgQ1JFQVRFX01FVEhPRF9UQUJMRShDdXN0b21HZXR0ZXJTZXR0ZXIpIH07
CiAKLVRyaVN0YXRlIGNhbGxDdXN0b21TZXR0ZXIoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dCwgQ3VzdG9tR2V0dGVyU2V0dGVyOjpDdXN0b21TZXR0ZXIgc2V0dGVyLCBib29sIGlzQWNjZXNz
b3IsIEpTT2JqZWN0KiBzbG90QmFzZSwgSlNWYWx1ZSB0aGlzVmFsdWUsIEpTVmFsdWUgdmFsdWUs
IFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUpCi17Ci0gICAgaWYgKGlzQWNjZXNzb3IpIHsKLSAg
ICAgICAgaWYgKCFzZXR0ZXIpCi0gICAgICAgICAgICByZXR1cm4gVHJpU3RhdGU6OkZhbHNlOwot
ICAgICAgICBzZXR0ZXIoZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlOjplbmNvZGUodGhpc1ZhbHVlKSwg
SlNWYWx1ZTo6ZW5jb2RlKHZhbHVlKSwgcHJvcGVydHlOYW1lKTsKLSAgICAgICAgLy8gQWx3YXlz
IHJldHVybiB0cnVlIGlmIHRoZXJlIGlzIGEgc2V0dGVyIGFuZCBpdCBpcyBvYnNlcnZlZCBhcyBh
biBhY2Nlc3NvciB0byB1c2Vycy4KLSAgICAgICAgcmV0dXJuIFRyaVN0YXRlOjpUcnVlOwotICAg
IH0KLQotICAgIGlmICghc2V0dGVyKQotICAgICAgICByZXR1cm4gVHJpU3RhdGU6OkluZGV0ZXJt
aW5hdGU7Ci0gICAgcmV0dXJuIHRyaVN0YXRlKHNldHRlcihnbG9iYWxPYmplY3QsIEpTVmFsdWU6
OmVuY29kZShzbG90QmFzZSksIEpTVmFsdWU6OmVuY29kZSh2YWx1ZSksIHByb3BlcnR5TmFtZSkp
OwotfQotCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0N1c3RvbUdldHRlclNldHRlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0N1c3RvbUdldHRlclNldHRlci5oCShyZXZpc2lvbiAyNzY1ODUpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9DdXN0b21HZXR0ZXJTZXR0ZXIuaAkod29y
a2luZyBjb3B5KQpAQCAtNzYsNiArNzYsNCBAQCBwcml2YXRlOgogICAgIEN1c3RvbVNldHRlciBt
X3NldHRlcjsKIH07CiAKLUpTX0VYUE9SVF9QUklWQVRFIFRyaVN0YXRlIGNhbGxDdXN0b21TZXR0
ZXIoSlNHbG9iYWxPYmplY3QqLCBDdXN0b21HZXR0ZXJTZXR0ZXI6OkN1c3RvbVNldHRlciwgYm9v
bCBpc0FjY2Vzc29yLCBKU09iamVjdCogc2xvdEJhc2UsIEpTVmFsdWUgdGhpc1ZhbHVlLCBKU1Zh
bHVlLCBQcm9wZXJ0eU5hbWUpOwotCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0Vycm9yQ29uc3RydWN0b3IuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FcnJvckNvbnN0cnVjdG9yLmgJKHJldmlzaW9u
IDI3NjU4NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Vycm9yQ29uc3RydWN0
b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMzAsNiArMzAsNyBAQCBjbGFzcyBHZXR0ZXJTZXR0ZXI7
CiBjbGFzcyBFcnJvckNvbnN0cnVjdG9yIGZpbmFsIDogcHVibGljIEludGVybmFsRnVuY3Rpb24g
ewogcHVibGljOgogICAgIHVzaW5nIEJhc2UgPSBJbnRlcm5hbEZ1bmN0aW9uOworICAgIHN0YXRp
YyBjb25zdGV4cHIgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFn
cyB8IE92ZXJyaWRlc1B1dDsKIAogICAgIHN0YXRpYyBFcnJvckNvbnN0cnVjdG9yKiBjcmVhdGUo
Vk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgRXJyb3JQcm90b3R5cGUqIGVycm9yUHJvdG90
eXBlLCBHZXR0ZXJTZXR0ZXIqKQogICAgIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0Vycm9ySW5zdGFuY2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9FcnJvckluc3RhbmNlLmgJKHJldmlzaW9uIDI3NjU4NSkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0Vycm9ySW5zdGFuY2UuaAkod29ya2luZyBjb3B5KQpAQCAt
MzAsNyArMzAsNyBAQCBuYW1lc3BhY2UgSlNDIHsKIGNsYXNzIEVycm9ySW5zdGFuY2UgOiBwdWJs
aWMgSlNOb25GaW5hbE9iamVjdCB7CiBwdWJsaWM6CiAgICAgdXNpbmcgQmFzZSA9IEpTTm9uRmlu
YWxPYmplY3Q7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9
IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwgT3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90IHwgT3Zl
cnJpZGVzR2V0T3duU3BlY2lhbFByb3BlcnR5TmFtZXM7CisgICAgc3RhdGljIGNvbnN0ZXhwciB1
bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwgT3ZlcnJpZGVz
R2V0T3duUHJvcGVydHlTbG90IHwgT3ZlcnJpZGVzR2V0T3duU3BlY2lhbFByb3BlcnR5TmFtZXMg
fCBPdmVycmlkZXNQdXQ7CiAgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzRGVzdHJ1Y3Rp
b24gPSB0cnVlOwogCiAgICAgc3RhdGljIHZvaWQgZGVzdHJveShKU0NlbGwqIGNlbGwpCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9HZW5lcmljQXJndW1lbnRzLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvR2VuZXJpY0FyZ3VtZW50cy5o
CShyZXZpc2lvbiAyNzY1ODUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9HZW5l
cmljQXJndW1lbnRzLmgJKHdvcmtpbmcgY29weSkKQEAgLTM2LDcgKzM2LDcgQEAgdGVtcGxhdGU8
dHlwZW5hbWUgVHlwZT4KIGNsYXNzIEdlbmVyaWNBcmd1bWVudHMgOiBwdWJsaWMgSlNOb25GaW5h
bE9iamVjdCB7CiBwdWJsaWM6CiAgICAgdHlwZWRlZiBKU05vbkZpbmFsT2JqZWN0IEJhc2U7Ci0g
ICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVj
dHVyZUZsYWdzIHwgT3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90IHwgT3ZlcnJpZGVzR2V0T3du
UHJvcGVydHlOYW1lcyB8IEludGVyY2VwdHNHZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4RXZlbldo
ZW5MZW5ndGhJc05vdFplcm87CisgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1
cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwgT3ZlcnJpZGVzR2V0T3duUHJvcGVydHlT
bG90IHwgT3ZlcnJpZGVzR2V0T3duUHJvcGVydHlOYW1lcyB8IE92ZXJyaWRlc1B1dCB8IEludGVy
Y2VwdHNHZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4RXZlbldoZW5MZW5ndGhJc05vdFplcm87CiAK
IHByb3RlY3RlZDoKICAgICBHZW5lcmljQXJndW1lbnRzKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1
Y3R1cmUpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9HZW5lcmljQXJndW1l
bnRzSW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0dlbmVyaWNBcmd1bWVudHNJbmxpbmVzLmgJKHJldmlzaW9uIDI3NjU4NSkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0dlbmVyaWNBcmd1bWVudHNJbmxpbmVzLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTEzNCw4ICsxMzQsOCBAQCBib29sIEdlbmVyaWNBcmd1bWVudHM8VHlwZT46OnB1
dChKU0NlbGwqCiAKICAgICAvLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1h
cmd1bWVudHMtZXhvdGljLW9iamVjdHMtc2V0LXAtdi1yZWNlaXZlcgogICAgIC8vIEZhbGwgYmFj
ayB0byB0aGUgT3JkaW5hcnlTZXQgd2hlbiB0aGUgcmVjZWl2ZXIgaXMgYWx0ZXJlZCBmcm9tIHRo
ZSB0aGlzT2JqZWN0LgotICAgIGlmIChVTkxJS0VMWShpc1RoaXNWYWx1ZUFsdGVyZWQoc2xvdCwg
dGhpc09iamVjdCkpKQotICAgICAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIG9yZGluYXJ5
U2V0U2xvdyhnbG9iYWxPYmplY3QsIHRoaXNPYmplY3QsIGlkZW50LCB2YWx1ZSwgc2xvdC50aGlz
VmFsdWUoKSwgc2xvdC5pc1N0cmljdE1vZGUoKSkpOworICAgIGlmIChVTkxJS0VMWShzbG90LnRo
aXNWYWx1ZSgpICE9IHRoaXNPYmplY3QpKQorICAgICAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2Nv
cGUsIEJhc2U6OnB1dCh0aGlzT2JqZWN0LCBnbG9iYWxPYmplY3QsIGlkZW50LCB2YWx1ZSwgc2xv
dCkpOwogICAgIAogICAgIE9wdGlvbmFsPHVpbnQzMl90PiBpbmRleCA9IHBhcnNlSW5kZXgoaWRl
bnQpOwogICAgIGlmIChpbmRleCAmJiB0aGlzT2JqZWN0LT5pc01hcHBlZEFyZ3VtZW50KGluZGV4
LnZhbHVlKCkpKSB7CkBAIC0xNDMsOSArMTQzLDcgQEAgYm9vbCBHZW5lcmljQXJndW1lbnRzPFR5
cGU+OjpwdXQoSlNDZWxsKgogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKLSAgICBhdXRv
IHJlc3VsdCA9IEJhc2U6OnB1dCh0aGlzT2JqZWN0LCBnbG9iYWxPYmplY3QsIGlkZW50LCB2YWx1
ZSwgc2xvdCk7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZmFsc2UpOwotICAgIFJF
TEVBU0VfQU5EX1JFVFVSTihzY29wZSwgcmVzdWx0KTsKKyAgICBSRUxFQVNFX0FORF9SRVRVUk4o
c2NvcGUsIEJhc2U6OnB1dCh0aGlzT2JqZWN0LCBnbG9iYWxPYmplY3QsIGlkZW50LCB2YWx1ZSwg
c2xvdCkpOwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBUeXBlPgpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvR2V0dGVyU2V0dGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvR2V0dGVyU2V0dGVyLmgJKHJldmlzaW9uIDI3NjU4NSkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0dldHRlclNldHRlci5oCSh3b3JraW5nIGNv
cHkpCkBAIC01NCw3ICs1NCw3IEBAIHByaXZhdGU6CiAKIHB1YmxpYzoKIAotICAgIHN0YXRpYyBj
b25zdGV4cHIgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8
IE92ZXJyaWRlc0dldE93blByb3BlcnR5U2xvdCB8IFN0cnVjdHVyZUlzSW1tb3J0YWw7CisgICAg
c3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVy
ZUZsYWdzIHwgT3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90IHwgT3ZlcnJpZGVzUHV0IHwgU3Ry
dWN0dXJlSXNJbW1vcnRhbDsKIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIENlbGxUeXBlLCBTdWJz
cGFjZUFjY2Vzcz4KICAgICBzdGF0aWMgSXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXkuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXkuY3BwCShyZXZpc2lv
biAyNzY1ODUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMjM4LDEwICsyMzgsNiBAQCBib29sIEpTQXJyYXk6OnB1dChKU0Nl
bGwqIGNlbGwsIEpTR2xvYmFsCiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUo
dm0pOwogCiAgICAgSlNBcnJheSogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0FycmF5Kj4oY2VsbCk7
Ci0KLSAgICBpZiAoVU5MSUtFTFkoaXNUaGlzVmFsdWVBbHRlcmVkKHNsb3QsIHRoaXNPYmplY3Qp
KSkKLSAgICAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBvcmRpbmFyeVNldFNsb3coZ2xv
YmFsT2JqZWN0LCB0aGlzT2JqZWN0LCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCBzbG90LnRoaXNWYWx1
ZSgpLCBzbG90LmlzU3RyaWN0TW9kZSgpKSk7Ci0KICAgICB0aGlzT2JqZWN0LT5lbnN1cmVXcml0
YWJsZSh2bSk7CiAKICAgICBpZiAocHJvcGVydHlOYW1lID09IHZtLnByb3BlcnR5TmFtZXMtPmxl
bmd0aCkgewpAQCAtMjUxLDYgKzI0Nyw5IEBAIGJvb2wgSlNBcnJheTo6cHV0KEpTQ2VsbCogY2Vs
bCwgSlNHbG9iYWwKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQogCisgICAg
ICAgIGlmIChVTkxJS0VMWShzbG90LnRoaXNWYWx1ZSgpICE9IHRoaXNPYmplY3QpKQorICAgICAg
ICAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBKU09iamVjdDo6ZGVmaW5lUHJvcGVydHlP
blJlY2VpdmVyKGdsb2JhbE9iamVjdCwgcHJvcGVydHlOYW1lLCB2YWx1ZSwgc2xvdCkpOworCiAg
ICAgICAgIHVuc2lnbmVkIG5ld0xlbmd0aCA9IHZhbHVlLnRvVUludDMyKGdsb2JhbE9iamVjdCk7
CiAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGZhbHNlKTsKICAgICAgICAgZG91
YmxlIHZhbHVlQXNOdW1iZXIgPSB2YWx1ZS50b051bWJlcihnbG9iYWxPYmplY3QpOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXkuaAkocmV2aXNpb24gMjc2NTg1KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheS5oCSh3b3JraW5nIGNvcHkp
CkBAIC00MCw3ICs0MCw3IEBAIGNsYXNzIEpTQXJyYXkgOiBwdWJsaWMgSlNOb25GaW5hbE9iamVj
dCAKIAogcHVibGljOgogICAgIHR5cGVkZWYgSlNOb25GaW5hbE9iamVjdCBCYXNlOwotICAgIHN0
YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVG
bGFncyB8IE92ZXJyaWRlc0dldE93blByb3BlcnR5U2xvdCB8IE92ZXJyaWRlc0dldE93blNwZWNp
YWxQcm9wZXJ0eU5hbWVzOworICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgU3RydWN0dXJl
RmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8IE92ZXJyaWRlc0dldE93blByb3BlcnR5U2xv
dCB8IE92ZXJyaWRlc0dldE93blNwZWNpYWxQcm9wZXJ0eU5hbWVzIHwgT3ZlcnJpZGVzUHV0Owog
CiAgICAgc3RhdGljIHNpemVfdCBhbGxvY2F0aW9uU2l6ZShDaGVja2VkPHNpemVfdD4gaW5saW5l
Q2FwYWNpdHkpCiAgICAgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNB
cnJheUJ1ZmZlclZpZXcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTQXJyYXlCdWZmZXJWaWV3LmNwcAkocmV2aXNpb24gMjc2NTg1KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheUJ1ZmZlclZpZXcuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xNzIsMTggKzE3Miw2IEBAIHZvaWQgSlNBcnJheUJ1ZmZlclZpZXc6OnZpc2l0Q2hp
bGRyZW5JbXAKIAogREVGSU5FX1ZJU0lUX0NISUxEUkVOKEpTQXJyYXlCdWZmZXJWaWV3KTsKIAot
Ym9vbCBKU0FycmF5QnVmZmVyVmlldzo6cHV0KAotICAgIEpTQ2VsbCogY2VsbCwgSlNHbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjdCwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSB2
YWx1ZSwKLSAgICBQdXRQcm9wZXJ0eVNsb3QmIHNsb3QpCi17Ci0gICAgSlNBcnJheUJ1ZmZlclZp
ZXcqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNBcnJheUJ1ZmZlclZpZXcqPihjZWxsKTsKLQotICAg
IGlmIChVTkxJS0VMWShpc1RoaXNWYWx1ZUFsdGVyZWQoc2xvdCwgdGhpc09iamVjdCkpKQotICAg
ICAgICByZXR1cm4gb3JkaW5hcnlTZXRTbG93KGdsb2JhbE9iamVjdCwgdGhpc09iamVjdCwgcHJv
cGVydHlOYW1lLCB2YWx1ZSwgc2xvdC50aGlzVmFsdWUoKSwgc2xvdC5pc1N0cmljdE1vZGUoKSk7
Ci0gICAgCi0gICAgcmV0dXJuIEJhc2U6OnB1dCh0aGlzT2JqZWN0LCBnbG9iYWxPYmplY3QsIHBy
b3BlcnR5TmFtZSwgdmFsdWUsIHNsb3QpOwotfQotCiBBcnJheUJ1ZmZlciogSlNBcnJheUJ1ZmZl
clZpZXc6OnVuc2hhcmVkQnVmZmVyKCkKIHsKICAgICBBcnJheUJ1ZmZlciogcmVzdWx0ID0gcG9z
c2libHlTaGFyZWRCdWZmZXIoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTQXJyYXlCdWZmZXJWaWV3LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNBcnJheUJ1ZmZlclZpZXcuaAkocmV2aXNpb24gMjc2NTg1KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheUJ1ZmZlclZpZXcuaAkod29ya2luZyBjb3B5
KQpAQCAtMTY5LDggKzE2OSw2IEBAIHByb3RlY3RlZDoKICAgICAKICAgICBKU19FWFBPUlRfUFJJ
VkFURSBKU0FycmF5QnVmZmVyVmlldyhWTSYsIENvbnN0cnVjdGlvbkNvbnRleHQmKTsKICAgICBK
U19FWFBPUlRfUFJJVkFURSB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJik7Ci0gICAgCi0gICAgc3Rh
dGljIGJvb2wgcHV0KEpTQ2VsbCosIEpTR2xvYmFsT2JqZWN0KiwgUHJvcGVydHlOYW1lLCBKU1Zh
bHVlLCBQdXRQcm9wZXJ0eVNsb3QmKTsKIAogICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CiAg
ICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NKU1ZhbHVlLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NKU1ZhbHVlLmNw
cAkocmV2aXNpb24gMjc2NTg1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlND
SlNWYWx1ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIxMiw3ICsyMTIsNyBAQCBKU09iamVjdCog
SlNWYWx1ZTo6c3ludGhlc2l6ZVByb3RvdHlwZShKCiAgICAgcmV0dXJuIG51bGxwdHI7CiB9CiAK
LS8vIEVDTUEgOC43LjIKKy8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtb3JkaW5hcnlz
ZXQKIGJvb2wgSlNWYWx1ZTo6cHV0VG9QcmltaXRpdmUoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSB2YWx1ZSwgUHV0UHJvcGVy
dHlTbG90JiBzbG90KQogewogICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKQEAgLTIy
MSw2OSArMjIxLDE0IEBAIGJvb2wgSlNWYWx1ZTo6cHV0VG9QcmltaXRpdmUoSlNHbG9iYWxPYmoK
ICAgICBpZiAoT3B0aW9uYWw8dWludDMyX3Q+IGluZGV4ID0gcGFyc2VJbmRleChwcm9wZXJ0eU5h
bWUpKQogICAgICAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIHB1dFRvUHJpbWl0aXZlQnlJ
bmRleChnbG9iYWxPYmplY3QsIGluZGV4LnZhbHVlKCksIHZhbHVlLCBzbG90LmlzU3RyaWN0TW9k
ZSgpKSk7CiAKKyAgICBpZiAoaXNTdHJpbmcoKSAmJiBwcm9wZXJ0eU5hbWUudWlkKCkgPT0gdm0u
cHJvcGVydHlOYW1lcy0+bGVuZ3RoLmltcGwoKSkKKyAgICAgICAgcmV0dXJuIHR5cGVFcnJvcihn
bG9iYWxPYmplY3QsIHNjb3BlLCBzbG90LmlzU3RyaWN0TW9kZSgpLCBSZWFkb25seVByb3BlcnR5
V3JpdGVFcnJvcik7CiAgICAgLy8gQ2hlY2sgaWYgdGhlcmUgYXJlIGFueSBzZXR0ZXJzIG9yIGdl
dHRlcnMgaW4gdGhlIHByb3RvdHlwZSBjaGFpbgogICAgIEpTT2JqZWN0KiBvYmogPSBzeW50aGVz
aXplUHJvdG90eXBlKGdsb2JhbE9iamVjdCk7CiAgICAgRVhDRVBUSU9OX0FTU0VSVCghIXNjb3Bl
LmV4Y2VwdGlvbigpID09ICFvYmopOwogICAgIGlmIChVTkxJS0VMWSghb2JqKSkKICAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgIEpTVmFsdWUgcHJvdG90eXBlOwotICAgIGlmIChwcm9wZXJ0eU5h
bWUgIT0gdm0ucHJvcGVydHlOYW1lcy0+dW5kZXJzY29yZVByb3RvKSB7Ci0gICAgICAgIHdoaWxl
ICh0cnVlKSB7Ci0gICAgICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IG9iai0+c3RydWN0
dXJlKHZtKTsKLSAgICAgICAgICAgIGlmIChzdHJ1Y3R1cmUtPmhhc1JlYWRPbmx5T3JHZXR0ZXJT
ZXR0ZXJQcm9wZXJ0aWVzRXhjbHVkaW5nUHJvdG8oKSB8fCBzdHJ1Y3R1cmUtPnR5cGVJbmZvKCku
aGFzUHV0UHJvcGVydHlTZWN1cml0eUNoZWNrKCkpCi0gICAgICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgICAgICBpZiAob2JqLT50eXBlKCkgPT0gUHJveHlPYmplY3RUeXBlKSB7Ci0gICAgICAg
ICAgICAgICAgYXV0byogcHJveHkgPSBqc0Nhc3Q8UHJveHlPYmplY3QqPihvYmopOwotICAgICAg
ICAgICAgICAgIFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwgcHJveHktPlByb3h5T2JqZWN0Ojpw
dXQocHJveHksIGdsb2JhbE9iamVjdCwgcHJvcGVydHlOYW1lLCB2YWx1ZSwgc2xvdCkpOwotICAg
ICAgICAgICAgfQotICAgICAgICAgICAgcHJvdG90eXBlID0gb2JqLT5nZXRQcm90b3R5cGUodm0s
IGdsb2JhbE9iamVjdCk7Ci0gICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBm
YWxzZSk7Ci0KLSAgICAgICAgICAgIGlmIChwcm90b3R5cGUuaXNOdWxsKCkpCi0gICAgICAgICAg
ICAgICAgcmV0dXJuIHR5cGVFcnJvcihnbG9iYWxPYmplY3QsIHNjb3BlLCBzbG90LmlzU3RyaWN0
TW9kZSgpLCBSZWFkb25seVByb3BlcnR5V3JpdGVFcnJvcik7Ci0gICAgICAgICAgICBvYmogPSBh
c09iamVjdChwcm90b3R5cGUpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgZm9yICg7IDsgb2Jq
ID0gYXNPYmplY3QocHJvdG90eXBlKSkgewotICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9
IG9iai0+c3RydWN0dXJlKHZtKTsKLSAgICAgICAgaWYgKFVOTElLRUxZKHN0cnVjdHVyZS0+dHlw
ZUluZm8oKS5oYXNQdXRQcm9wZXJ0eVNlY3VyaXR5Q2hlY2soKSkpIHsKLSAgICAgICAgICAgIG9i
ai0+bWV0aG9kVGFibGUodm0pLT5kb1B1dFByb3BlcnR5U2VjdXJpdHlDaGVjayhvYmosIGdsb2Jh
bE9iamVjdCwgcHJvcGVydHlOYW1lLCBzbG90KTsKLSAgICAgICAgICAgIFJFVFVSTl9JRl9FWENF
UFRJT04oc2NvcGUsIGZhbHNlKTsKLSAgICAgICAgfQotICAgICAgICB1bnNpZ25lZCBhdHRyaWJ1
dGVzOwotICAgICAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQgPSBzdHJ1Y3R1cmUtPmdldCh2bSwg
cHJvcGVydHlOYW1lLCBhdHRyaWJ1dGVzKTsKLSAgICAgICAgaWYgKG9mZnNldCAhPSBpbnZhbGlk
T2Zmc2V0KSB7Ci0gICAgICAgICAgICBpZiAoYXR0cmlidXRlcyAmIFByb3BlcnR5QXR0cmlidXRl
OjpSZWFkT25seSkKLSAgICAgICAgICAgICAgICByZXR1cm4gdHlwZUVycm9yKGdsb2JhbE9iamVj
dCwgc2NvcGUsIHNsb3QuaXNTdHJpY3RNb2RlKCksIFJlYWRvbmx5UHJvcGVydHlXcml0ZUVycm9y
KTsKLQotICAgICAgICAgICAgSlNWYWx1ZSBncyA9IG9iai0+Z2V0RGlyZWN0KG9mZnNldCk7Ci0g
ICAgICAgICAgICBpZiAoZ3MuaXNHZXR0ZXJTZXR0ZXIoKSkKLSAgICAgICAgICAgICAgICBSRUxF
QVNFX0FORF9SRVRVUk4oc2NvcGUsIGNhbGxTZXR0ZXIoZ2xvYmFsT2JqZWN0LCAqdGhpcywgZ3Ms
IHZhbHVlLCBzbG90LmlzU3RyaWN0TW9kZSgpID8gRUNNQU1vZGU6OnN0cmljdCgpIDogRUNNQU1v
ZGU6OnNsb3BweSgpKSk7Ci0KLSAgICAgICAgICAgIGlmIChncy5pc0N1c3RvbUdldHRlclNldHRl
cigpKSB7Ci0gICAgICAgICAgICAgICAgYXV0byBzZXR0ZXIgPSBqc0Nhc3Q8Q3VzdG9tR2V0dGVy
U2V0dGVyKj4oZ3MuYXNDZWxsKCkpLT5zZXR0ZXIoKTsKLSAgICAgICAgICAgICAgICBib29sIGlz
QWNjZXNzb3IgPSBhdHRyaWJ1dGVzICYgUHJvcGVydHlBdHRyaWJ1dGU6OkN1c3RvbUFjY2Vzc29y
OwotICAgICAgICAgICAgICAgIGF1dG8gcmVzdWx0ID0gY2FsbEN1c3RvbVNldHRlcihnbG9iYWxP
YmplY3QsIHNldHRlciwgaXNBY2Nlc3Nvciwgb2JqLCBzbG90LnRoaXNWYWx1ZSgpLCB2YWx1ZSwg
cHJvcGVydHlOYW1lKTsKLSAgICAgICAgICAgICAgICBpZiAocmVzdWx0ICE9IFRyaVN0YXRlOjpJ
bmRldGVybWluYXRlKQotICAgICAgICAgICAgICAgICAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2Nv
cGUsIHJlc3VsdCA9PSBUcmlTdGF0ZTo6VHJ1ZSk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAg
ICAgIC8vIElmIHRoZXJlJ3MgYW4gZXhpc3RpbmcgcHJvcGVydHkgb24gdGhlIG9iamVjdCBvciBv
bmUgb2YgaXRzIAotICAgICAgICAgICAgLy8gcHJvdG90eXBlcyBpdCBzaG91bGQgYmUgcmVwbGFj
ZWQsIHNvIGJyZWFrIGhlcmUuCi0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAg
ICBpZiAob2JqLT50eXBlKCkgPT0gUHJveHlPYmplY3RUeXBlKSB7Ci0gICAgICAgICAgICBhdXRv
KiBwcm94eSA9IGpzQ2FzdDxQcm94eU9iamVjdCo+KG9iaik7Ci0gICAgICAgICAgICBSRUxFQVNF
X0FORF9SRVRVUk4oc2NvcGUsIHByb3h5LT5Qcm94eU9iamVjdDo6cHV0KHByb3h5LCBnbG9iYWxP
YmplY3QsIHByb3BlcnR5TmFtZSwgdmFsdWUsIHNsb3QpKTsKLSAgICAgICAgfQotICAgICAgICBw
cm90b3R5cGUgPSBvYmotPmdldFByb3RvdHlwZSh2bSwgZ2xvYmFsT2JqZWN0KTsKLSAgICAgICAg
UkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZmFsc2UpOwotICAgICAgICBpZiAocHJvdG90eXBl
LmlzTnVsbCgpKQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIAotICAgIHJldHVybiB0
eXBlRXJyb3IoZ2xvYmFsT2JqZWN0LCBzY29wZSwgc2xvdC5pc1N0cmljdE1vZGUoKSwgUmVhZG9u
bHlQcm9wZXJ0eVdyaXRlRXJyb3IpOworICAgIFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwgb2Jq
LT5tZXRob2RUYWJsZSh2bSktPnB1dChvYmosIGdsb2JhbE9iamVjdCwgcHJvcGVydHlOYW1lLCB2
YWx1ZSwgc2xvdCkpOwogfQogCiBib29sIEpTVmFsdWU6OnB1dFRvUHJpbWl0aXZlQnlJbmRleChK
U0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIEpTVmFs
dWUgdmFsdWUsIGJvb2wgc2hvdWxkVGhyb3cpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU0NlbGwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTQ2VsbC5jcHAJKHJldmlzaW9uIDI3NjU4NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTQ2VsbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIwMSwxMSArMjAxLDYg
QEAgYm9vbCBKU0NlbGw6OmdldE93blByb3BlcnR5U2xvdEJ5SW5kZXgoSgogICAgIHJldHVybiBm
YWxzZTsKIH0KIAotdm9pZCBKU0NlbGw6OmRvUHV0UHJvcGVydHlTZWN1cml0eUNoZWNrKEpTT2Jq
ZWN0KiwgSlNHbG9iYWxPYmplY3QqLCBQcm9wZXJ0eU5hbWUsIFB1dFByb3BlcnR5U2xvdCYpCi17
Ci0gICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLX0KLQogdm9pZCBKU0NlbGw6Omdl
dE93blByb3BlcnR5TmFtZXMoSlNPYmplY3QqLCBKU0dsb2JhbE9iamVjdCosIFByb3BlcnR5TmFt
ZUFycmF5JiwgRG9udEVudW1Qcm9wZXJ0aWVzTW9kZSkKIHsKICAgICBSRUxFQVNFX0FTU0VSVF9O
T1RfUkVBQ0hFRCgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDZWxs
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDZWxsLmgJ
KHJldmlzaW9uIDI3NjU4NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ2Vs
bC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNTcsNyArMjU3LDYgQEAgcHJvdGVjdGVkOgogICAgIHN0
YXRpYyBib29sIGRlZmluZU93blByb3BlcnR5KEpTT2JqZWN0KiwgSlNHbG9iYWxPYmplY3QqLCBQ
cm9wZXJ0eU5hbWUsIGNvbnN0IFByb3BlcnR5RGVzY3JpcHRvciYsIGJvb2wgc2hvdWxkVGhyb3cp
OwogICAgIHN0YXRpYyBib29sIGdldE93blByb3BlcnR5U2xvdChKU09iamVjdCosIEpTR2xvYmFs
T2JqZWN0KiwgUHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmKTsKICAgICBzdGF0aWMgYm9vbCBn
ZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4KEpTT2JqZWN0KiwgSlNHbG9iYWxPYmplY3QqLCB1bnNp
Z25lZCBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYpOwotICAgIHN0YXRpYyBOT19SRVRVUk5f
RFVFX1RPX0NSQVNIIHZvaWQgZG9QdXRQcm9wZXJ0eVNlY3VyaXR5Q2hlY2soSlNPYmplY3QqLCBK
U0dsb2JhbE9iamVjdCosIFByb3BlcnR5TmFtZSwgUHV0UHJvcGVydHlTbG90Jik7CiAKIHByaXZh
dGU6CiAgICAgZnJpZW5kIGNsYXNzIExMSW50T2Zmc2V0c0V4dHJhY3RvcjsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRnVuY3Rpb24uY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRnVuY3Rpb24uY3BwCShyZXZpc2lvbiAyNzY1
ODUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Z1bmN0aW9uLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNTE5LDEwICs1MTksNiBAQCBib29sIEpTRnVuY3Rpb246OnB1dChKU0Nl
bGwqIGNlbGwsIEpTR2xvCiAgICAgICAgICAgICByYXJlRGF0YS0+c2V0SGFzTW9kaWZpZWROYW1l
Rm9yTm9uSG9zdEZ1bmN0aW9uKCk7CiAgICAgfQogCi0gICAgaWYgKFVOTElLRUxZKGlzVGhpc1Zh
bHVlQWx0ZXJlZChzbG90LCB0aGlzT2JqZWN0KSkpCi0gICAgICAgIFJFTEVBU0VfQU5EX1JFVFVS
TihzY29wZSwgb3JkaW5hcnlTZXRTbG93KGdsb2JhbE9iamVjdCwgdGhpc09iamVjdCwgcHJvcGVy
dHlOYW1lLCB2YWx1ZSwgc2xvdC50aGlzVmFsdWUoKSwgc2xvdC5pc1N0cmljdE1vZGUoKSkpOwot
Ci0KICAgICBpZiAodGhpc09iamVjdC0+aXNIb3N0T3JCdWlsdGluRnVuY3Rpb24oKSkgewogICAg
ICAgICBQcm9wZXJ0eVN0YXR1cyBwcm9wZXJ0eVR5cGUgPSB0aGlzT2JqZWN0LT5yZWlmeUxhenlQ
cm9wZXJ0eUZvckhvc3RPckJ1aWx0aW5JZk5lZWRlZCh2bSwgZ2xvYmFsT2JqZWN0LCBwcm9wZXJ0
eU5hbWUpOwogICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBmYWxzZSk7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Z1bmN0aW9uLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNGdW5jdGlvbi5oCShyZXZpc2lvbiAy
NzY1ODUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Z1bmN0aW9uLmgJKHdv
cmtpbmcgY29weSkKQEAgLTcwLDcgKzcwLDcgQEAgcHVibGljOgogICAgIH0KICAgICAKICAgICB0
eXBlZGVmIEpTQ2FsbGVlIEJhc2U7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBTdHJ1
Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwgT3ZlcnJpZGVzR2V0T3duUHJvcGVy
dHlTbG90IHwgT3ZlcnJpZGVzR2V0T3duU3BlY2lhbFByb3BlcnR5TmFtZXMgfCBPdmVycmlkZXNH
ZXRDYWxsRGF0YTsKKyAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdz
ID0gQmFzZTo6U3RydWN0dXJlRmxhZ3MgfCBPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3QgfCBP
dmVycmlkZXNHZXRPd25TcGVjaWFsUHJvcGVydHlOYW1lcyB8IE92ZXJyaWRlc0dldENhbGxEYXRh
IHwgT3ZlcnJpZGVzUHV0OwogCiAgICAgc3RhdGljIHNpemVfdCBhbGxvY2F0aW9uU2l6ZShDaGVj
a2VkPHNpemVfdD4gaW5saW5lQ2FwYWNpdHkpCiAgICAgewpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNHZW5lcmljVHlwZWRBcnJheVZpZXcuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dlbmVyaWNUeXBlZEFycmF5Vmlldy5oCShy
ZXZpc2lvbiAyNzY1ODUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dlbmVy
aWNUeXBlZEFycmF5Vmlldy5oCSh3b3JraW5nIGNvcHkpCkBAIC05OSw3ICs5OSw3IEBAIHB1Ymxp
YzoKICAgICB1c2luZyBFbGVtZW50VHlwZSA9IHR5cGVuYW1lIEFkYXB0b3I6OlR5cGU7CiAgICAg
c3RhdGljIGNvbnN0ZXhwciBUeXBlZEFycmF5Q29udGVudFR5cGUgY29udGVudFR5cGUgPSBBZGFw
dG9yOjpjb250ZW50VHlwZTsKIAotICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgU3RydWN0
dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8IE92ZXJyaWRlc0dldE93blByb3BlcnR5
U2xvdCB8IE92ZXJyaWRlc0dldE93blByb3BlcnR5TmFtZXMgfCBJbnRlcmNlcHRzR2V0T3duUHJv
cGVydHlTbG90QnlJbmRleEV2ZW5XaGVuTGVuZ3RoSXNOb3RaZXJvOworICAgIHN0YXRpYyBjb25z
dGV4cHIgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8IE92
ZXJyaWRlc0dldE93blByb3BlcnR5U2xvdCB8IE92ZXJyaWRlc0dldE93blByb3BlcnR5TmFtZXMg
fCBPdmVycmlkZXNQdXQgfCBJbnRlcmNlcHRzR2V0T3duUHJvcGVydHlTbG90QnlJbmRleEV2ZW5X
aGVuTGVuZ3RoSXNOb3RaZXJvOwogCiAgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBlbGVt
ZW50U2l6ZSA9IHNpemVvZih0eXBlbmFtZSBBZGFwdG9yOjpUeXBlKTsKIApJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxMZXhpY2FsRW52aXJvbm1lbnQuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbExleGljYWxF
bnZpcm9ubWVudC5oCShyZXZpc2lvbiAyNzY1ODUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU0dsb2JhbExleGljYWxFbnZpcm9ubWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0z
Myw3ICszMyw3IEBAIGNsYXNzIEpTR2xvYmFsTGV4aWNhbEVudmlyb25tZW50IGZpbmFsIDoKIHB1
YmxpYzoKICAgICB1c2luZyBCYXNlID0gSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdDsKIAotICAg
IHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1
cmVGbGFncyB8IE92ZXJyaWRlc0dldE93blByb3BlcnR5U2xvdDsKKyAgICBzdGF0aWMgY29uc3Rl
eHByIHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxhZ3MgfCBPdmVy
cmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3QgfCBPdmVycmlkZXNQdXQ7CiAKICAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBDZWxsVHlwZSwgU3Vic3BhY2VBY2Nlc3MgbW9kZT4KICAgICBzdGF0aWMgSXNvU3Vi
c3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTR2xvYmFsT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5jcHAJKHJldmlzaW9uIDI3NjU4NSkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMTQ3Niw4ICsxNDc2LDE1IEBAIGJvb2wgSlNHbG9iYWxPYmplY3Q6OnB1dChKU0Nl
bGwqIGNlbGwsIEoKICAgICBKU0dsb2JhbE9iamVjdCogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0ds
b2JhbE9iamVjdCo+KGNlbGwpOwogICAgIEFTU0VSVCghSGVhcDo6aGVhcCh2YWx1ZSkgfHwgSGVh
cDo6aGVhcCh2YWx1ZSkgPT0gSGVhcDo6aGVhcCh0aGlzT2JqZWN0KSk7CiAKLSAgICBpZiAoVU5M
SUtFTFkoaXNUaGlzVmFsdWVBbHRlcmVkKHNsb3QsIHRoaXNPYmplY3QpKSkKLSAgICAgICAgUkVM
RUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBvcmRpbmFyeVNldFNsb3coZ2xvYmFsT2JqZWN0LCB0aGlz
T2JqZWN0LCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCBzbG90LnRoaXNWYWx1ZSgpLCBzbG90LmlzU3Ry
aWN0TW9kZSgpKSk7CisgICAgaWYgKFVOTElLRUxZKGlzVGhpc1ZhbHVlQWx0ZXJlZChzbG90LCB0
aGlzT2JqZWN0KSkpIHsKKyAgICAgICAgU3ltYm9sVGFibGVFbnRyeTo6RmFzdCBlbnRyeSA9IHRo
aXNPYmplY3QtPnN5bWJvbFRhYmxlKCktPmdldChwcm9wZXJ0eU5hbWUudWlkKCkpOworICAgICAg
ICBpZiAoIWVudHJ5LmlzTnVsbCgpKSB7CisgICAgICAgICAgICBpZiAoZW50cnkuaXNSZWFkT25s
eSgpKQorICAgICAgICAgICAgICAgIHJldHVybiB0eXBlRXJyb3IoZ2xvYmFsT2JqZWN0LCBzY29w
ZSwgc2xvdC5pc1N0cmljdE1vZGUoKSwgUmVhZG9ubHlQcm9wZXJ0eVdyaXRlRXJyb3IpOworICAg
ICAgICAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBKU09iamVjdDo6ZGVmaW5lUHJvcGVy
dHlPblJlY2VpdmVyKGdsb2JhbE9iamVjdCwgcHJvcGVydHlOYW1lLCB2YWx1ZSwgc2xvdCkpOwor
ICAgICAgICB9CisgICAgICAgIFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwgQmFzZTo6cHV0KHRo
aXNPYmplY3QsIGdsb2JhbE9iamVjdCwgcHJvcGVydHlOYW1lLCB2YWx1ZSwgc2xvdCkpOworICAg
IH0KIAogICAgIGJvb2wgc2hvdWxkVGhyb3dSZWFkT25seUVycm9yID0gc2xvdC5pc1N0cmljdE1v
ZGUoKTsKICAgICBib29sIGlnbm9yZVJlYWRPbmx5RXJyb3JzID0gZmFsc2U7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmgJKHJldmlzaW9u
IDI3NjU4NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0
LmgJKHdvcmtpbmcgY29weSkKQEAgLTU5Niw3ICs1OTYsNyBAQCBwdWJsaWM6CiAgICAgICAgIAog
cHVibGljOgogICAgIHVzaW5nIEJhc2UgPSBKU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0OwotICAg
IHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1
cmVGbGFncyB8IEhhc1N0YXRpY1Byb3BlcnR5VGFibGUgfCBPdmVycmlkZXNHZXRPd25Qcm9wZXJ0
eVNsb3QgfCBJc0ltbXV0YWJsZVByb3RvdHlwZUV4b3RpY09iamVjdDsKKyAgICBzdGF0aWMgY29u
c3RleHByIHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxhZ3MgfCBI
YXNTdGF0aWNQcm9wZXJ0eVRhYmxlIHwgT3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90IHwgT3Zl
cnJpZGVzUHV0IHwgSXNJbW11dGFibGVQcm90b3R5cGVFeG90aWNPYmplY3Q7CiAKICAgICBzdGF0
aWMgY29uc3RleHByIGJvb2wgbmVlZHNEZXN0cnVjdGlvbiA9IHRydWU7CiAgICAgdGVtcGxhdGU8
dHlwZW5hbWUgQ2VsbFR5cGUsIFN1YnNwYWNlQWNjZXNzIG1vZGU+CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU0xleGljYWxFbnZpcm9ubWVudC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTGV4aWNhbEVudmlyb25tZW50LmgJKHJl
dmlzaW9uIDI3NjU4NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTGV4aWNh
bEVudmlyb25tZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTQ4LDcgKzQ4LDcgQEAgcHVibGljOgog
ICAgIH0KIAogICAgIHVzaW5nIEJhc2UgPSBKU1N5bWJvbFRhYmxlT2JqZWN0OwotICAgIHN0YXRp
YyBjb25zdGV4cHIgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFn
cyB8IE92ZXJyaWRlc0dldE93blByb3BlcnR5U2xvdCB8IE92ZXJyaWRlc0dldE93blNwZWNpYWxQ
cm9wZXJ0eU5hbWVzOworICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgU3RydWN0dXJlRmxh
Z3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8IE92ZXJyaWRlc0dldE93blByb3BlcnR5U2xvdCB8
IE92ZXJyaWRlc0dldE93blNwZWNpYWxQcm9wZXJ0eU5hbWVzIHwgT3ZlcnJpZGVzUHV0OwogCiAg
ICAgV3JpdGVCYXJyaWVyQmFzZTxVbmtub3duPiogdmFyaWFibGVzKCkKICAgICB7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU01vZHVsZUVudmlyb25tZW50LmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNNb2R1bGVFbnZpcm9ubWVu
dC5oCShyZXZpc2lvbiAyNzY1ODUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U01vZHVsZUVudmlyb25tZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTQwLDcgKzQwLDcgQEAgY2xh
c3MgSlNNb2R1bGVFbnZpcm9ubWVudCBmaW5hbCA6IHB1YmxpYwogICAgIGZyaWVuZCBjbGFzcyBM
TEludE9mZnNldHNFeHRyYWN0b3I7CiBwdWJsaWM6CiAgICAgdXNpbmcgQmFzZSA9IEpTTGV4aWNh
bEVudmlyb25tZW50OwotICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgU3RydWN0dXJlRmxh
Z3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8IE92ZXJyaWRlc0dldE93blByb3BlcnR5U2xvdCB8
IE92ZXJyaWRlc0dldE93blNwZWNpYWxQcm9wZXJ0eU5hbWVzOworICAgIHN0YXRpYyBjb25zdGV4
cHIgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8IE92ZXJy
aWRlc0dldE93blByb3BlcnR5U2xvdCB8IE92ZXJyaWRlc0dldE93blNwZWNpYWxQcm9wZXJ0eU5h
bWVzIHwgT3ZlcnJpZGVzUHV0OwogCiAgICAgc3RhdGljIEpTTW9kdWxlRW52aXJvbm1lbnQqIGNy
ZWF0ZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTU2NvcGUqIGN1cnJl
bnRTY29wZSwgU3ltYm9sVGFibGUqIHN5bWJvbFRhYmxlLCBKU1ZhbHVlIGluaXRpYWxWYWx1ZSwg
QWJzdHJhY3RNb2R1bGVSZWNvcmQqIG1vZHVsZVJlY29yZCkKICAgICB7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU01vZHVsZU5hbWVzcGFjZU9iamVjdC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTW9kdWxlTmFtZXNwYWNlT2Jq
ZWN0LmgJKHJldmlzaW9uIDI3NjU4NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTTW9kdWxlTmFtZXNwYWNlT2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTM0LDcgKzM0LDcg
QEAgbmFtZXNwYWNlIEpTQyB7CiBjbGFzcyBKU01vZHVsZU5hbWVzcGFjZU9iamVjdCBmaW5hbCA6
IHB1YmxpYyBKU05vbkZpbmFsT2JqZWN0IHsKIHB1YmxpYzoKICAgICB1c2luZyBCYXNlID0gSlNO
b25GaW5hbE9iamVjdDsKLSAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIFN0cnVjdHVyZUZs
YWdzID0gQmFzZTo6U3RydWN0dXJlRmxhZ3MgfCBPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3Qg
fCBPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eU5hbWVzIHwgSW50ZXJjZXB0c0dldE93blByb3BlcnR5
U2xvdEJ5SW5kZXhFdmVuV2hlbkxlbmd0aElzTm90WmVybyB8IEdldE93blByb3BlcnR5U2xvdElz
SW1wdXJlRm9yUHJvcGVydHlBYnNlbmNlIHwgSXNJbW11dGFibGVQcm90b3R5cGVFeG90aWNPYmpl
Y3Q7CisgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6
OlN0cnVjdHVyZUZsYWdzIHwgT3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90IHwgT3ZlcnJpZGVz
R2V0T3duUHJvcGVydHlOYW1lcyB8IE92ZXJyaWRlc1B1dCB8IEludGVyY2VwdHNHZXRPd25Qcm9w
ZXJ0eVNsb3RCeUluZGV4RXZlbldoZW5MZW5ndGhJc05vdFplcm8gfCBHZXRPd25Qcm9wZXJ0eVNs
b3RJc0ltcHVyZUZvclByb3BlcnR5QWJzZW5jZSB8IElzSW1tdXRhYmxlUHJvdG90eXBlRXhvdGlj
T2JqZWN0OwogCiAgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzRGVzdHJ1Y3Rpb24gPSB0
cnVlOwogICAgIHN0YXRpYyB2b2lkIGRlc3Ryb3koSlNDZWxsKik7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuY3BwCShyZXZpc2lvbiAyNzY1ODUpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTY0NiwxMCArNjQ2LDYgQEAgYm9vbCBKU09iamVjdDo6Z2V0T3duUHJvcGVydHlTbG90KEpT
T2JqZQogewogICAgIHJldHVybiBnZXRPd25Qcm9wZXJ0eVNsb3RJbXBsKG9iamVjdCwgZ2xvYmFs
T2JqZWN0LCBwcm9wZXJ0eU5hbWUsIHNsb3QpOwogfQotCi12b2lkIEpTT2JqZWN0Ojpkb1B1dFBy
b3BlcnR5U2VjdXJpdHlDaGVjayhKU09iamVjdCosIEpTR2xvYmFsT2JqZWN0KiwgUHJvcGVydHlO
YW1lLCBQdXRQcm9wZXJ0eVNsb3QmKQotewotfQogI2VuZGlmIC8vIEFTU0VSVF9FTkFCTEVECiAK
IC8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLW9yZGluYXJ5c2V0CkBAIC03
NTgsNyArNzU0LDcgQEAgYm9vbCBvcmRpbmFyeVNldFNsb3coSlNHbG9iYWxPYmplY3QqIGdsbwog
ICAgIHJldHVybiB0cnVlOwogfQogCi0vLyBFQ01BIDguNi4yLjIKKy8vIGh0dHBzOi8vdGMzOS5l
cy9lY21hMjYyLyNzZWMtb3JkaW5hcnlzZXQKIGJvb2wgSlNPYmplY3Q6OnB1dChKU0NlbGwqIGNl
bGwsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5h
bWUsIEpTVmFsdWUgdmFsdWUsIFB1dFByb3BlcnR5U2xvdCYgc2xvdCkKIHsKICAgICByZXR1cm4g
cHV0SW5saW5lRm9ySlNPYmplY3QoY2VsbCwgZ2xvYmFsT2JqZWN0LCBwcm9wZXJ0eU5hbWUsIHZh
bHVlLCBzbG90KTsKQEAgLTc2Niw2OSArNzYyLDk2IEBAIGJvb2wgSlNPYmplY3Q6OnB1dChKU0Nl
bGwqIGNlbGwsIEpTR2xvYmEKIAogYm9vbCBKU09iamVjdDo6cHV0SW5saW5lU2xvdyhKU0dsb2Jh
bE9iamVjdCogZ2xvYmFsT2JqZWN0LCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBKU1ZhbHVl
IHZhbHVlLCBQdXRQcm9wZXJ0eVNsb3QmIHNsb3QpCiB7Ci0gICAgQVNTRVJUKCFpc1RoaXNWYWx1
ZUFsdGVyZWQoc2xvdCwgdGhpcykpOworICAgIEFTU0VSVCghcGFyc2VJbmRleChwcm9wZXJ0eU5h
bWUpKTsKIAogICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKICAgICBhdXRvIHNjb3Bl
ID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAKKyAgICBpZiAoVU5MSUtFTFkoIXZtLmlzU2Fm
ZVRvUmVjdXJzZVNvZnQoKSkpIHsKKyAgICAgICAgdGhyb3dTdGFja092ZXJmbG93RXJyb3IoZ2xv
YmFsT2JqZWN0LCBzY29wZSk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKICAgICBK
U09iamVjdCogb2JqID0gdGhpczsKICAgICBmb3IgKDs7KSB7CiAgICAgICAgIFN0cnVjdHVyZSog
c3RydWN0dXJlID0gb2JqLT5zdHJ1Y3R1cmUodm0pOwotICAgICAgICBpZiAoVU5MSUtFTFkoc3Ry
dWN0dXJlLT50eXBlSW5mbygpLmhhc1B1dFByb3BlcnR5U2VjdXJpdHlDaGVjaygpKSkgewotICAg
ICAgICAgICAgb2JqLT5tZXRob2RUYWJsZSh2bSktPmRvUHV0UHJvcGVydHlTZWN1cml0eUNoZWNr
KG9iaiwgZ2xvYmFsT2JqZWN0LCBwcm9wZXJ0eU5hbWUsIHNsb3QpOwotICAgICAgICAgICAgUkVU
VVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZmFsc2UpOwotICAgICAgICB9CisgICAgICAgIGlmIChv
YmogIT0gdGhpcyAmJiBzdHJ1Y3R1cmUtPnR5cGVJbmZvKCkub3ZlcnJpZGVzUHV0KCkpCisgICAg
ICAgICAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIG9iai0+bWV0aG9kVGFibGUodm0pLT5w
dXQob2JqLCBnbG9iYWxPYmplY3QsIHByb3BlcnR5TmFtZSwgdmFsdWUsIHNsb3QpKTsKKworICAg
ICAgICBib29sIGhhc1Byb3BlcnR5ID0gZmFsc2U7CiAgICAgICAgIHVuc2lnbmVkIGF0dHJpYnV0
ZXM7CisgICAgICAgIFB1dFByb3BlcnR5U2xvdDo6UHV0VmFsdWVGdW5jIGN1c3RvbVNldHRlciA9
IG51bGxwdHI7CiAgICAgICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldCA9IHN0cnVjdHVyZS0+Z2V0
KHZtLCBwcm9wZXJ0eU5hbWUsIGF0dHJpYnV0ZXMpOwogICAgICAgICBpZiAoaXNWYWxpZE9mZnNl
dChvZmZzZXQpKSB7Ci0gICAgICAgICAgICBpZiAoYXR0cmlidXRlcyAmIFByb3BlcnR5QXR0cmli
dXRlOjpSZWFkT25seSkgewotICAgICAgICAgICAgICAgIEFTU0VSVCh0aGlzLT5wcm90b3R5cGVD
aGFpbk1heUludGVyY2VwdFN0b3JlVG8odm0sIHByb3BlcnR5TmFtZSkgfHwgb2JqID09IHRoaXMp
OwotICAgICAgICAgICAgICAgIHJldHVybiB0eXBlRXJyb3IoZ2xvYmFsT2JqZWN0LCBzY29wZSwg
c2xvdC5pc1N0cmljdE1vZGUoKSwgUmVhZG9ubHlQcm9wZXJ0eVdyaXRlRXJyb3IpOworICAgICAg
ICAgICAgaGFzUHJvcGVydHkgPSB0cnVlOworICAgICAgICAgICAgaWYgKGF0dHJpYnV0ZXMgJiBQ
cm9wZXJ0eUF0dHJpYnV0ZTo6Q3VzdG9tQWNjZXNzb3JPclZhbHVlKQorICAgICAgICAgICAgICAg
IGN1c3RvbVNldHRlciA9IGpzQ2FzdDxDdXN0b21HZXR0ZXJTZXR0ZXIqPihvYmotPmdldERpcmVj
dChvZmZzZXQpKS0+c2V0dGVyKCk7CisgICAgICAgIH0gZWxzZSBpZiAoc3RydWN0dXJlLT5oYXNO
b25SZWlmaWVkU3RhdGljUHJvcGVydGllcygpKSB7CisgICAgICAgICAgICBpZiAoYXV0byBlbnRy
eSA9IHN0cnVjdHVyZS0+ZmluZFByb3BlcnR5SGFzaEVudHJ5KHByb3BlcnR5TmFtZSkpIHsKKyAg
ICAgICAgICAgICAgICBoYXNQcm9wZXJ0eSA9IHRydWU7CisgICAgICAgICAgICAgICAgYXR0cmli
dXRlcyA9IGVudHJ5LT52YWx1ZS0+YXR0cmlidXRlcygpOworCisgICAgICAgICAgICAgICAgLy8g
RklYTUU6IFJlbW92ZSB0aGlzIGFmdGVyIHdyaXRhYmxlIGFjY2Vzc29ycyBhcmUgaW50cm9kdWNl
ZCB0byBzdGF0aWMgaGFzaCB0YWJsZXMuCisgICAgICAgICAgICAgICAgaWYgKGF0dHJpYnV0ZXMg
JiBQcm9wZXJ0eUF0dHJpYnV0ZTo6QWNjZXNzb3IpCisgICAgICAgICAgICAgICAgICAgIGF0dHJp
YnV0ZXMgfD0gUHJvcGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5OworICAgICAgICAgICAgICAgIC8v
IEZJWE1FOiBSZW1vdmUgdGhpcyBhZnRlciB3ZSBzdG9wIGRlZmF1bHRpbmcgdG8gQ3VzdG9tVmFs
dWUgaW4gc3RhdGljIGhhc2ggdGFibGVzLgorICAgICAgICAgICAgICAgIGlmICghKGF0dHJpYnV0
ZXMgJiAoUHJvcGVydHlBdHRyaWJ1dGU6OkN1c3RvbUFjY2Vzc29yIHwgUHJvcGVydHlBdHRyaWJ1
dGU6OkJ1aWx0aW5PckZ1bmN0aW9uT3JBY2Nlc3Nvck9yTGF6eVByb3BlcnR5T3JDb25zdGFudCkp
KQorICAgICAgICAgICAgICAgICAgICBhdHRyaWJ1dGVzIHw9IFByb3BlcnR5QXR0cmlidXRlOjpD
dXN0b21WYWx1ZTsKKworICAgICAgICAgICAgICAgIGlmIChhdHRyaWJ1dGVzICYgUHJvcGVydHlB
dHRyaWJ1dGU6OkN1c3RvbUFjY2Vzc29yT3JWYWx1ZSkKKyAgICAgICAgICAgICAgICAgICAgY3Vz
dG9tU2V0dGVyID0gZW50cnktPnZhbHVlLT5wcm9wZXJ0eVB1dHRlcigpOwogICAgICAgICAgICAg
fQorICAgICAgICB9CiAKLSAgICAgICAgICAgIEpTVmFsdWUgZ3MgPSBvYmotPmdldERpcmVjdChv
ZmZzZXQpOwotICAgICAgICAgICAgaWYgKGdzLmlzR2V0dGVyU2V0dGVyKCkpIHsKKyAgICAgICAg
aWYgKGhhc1Byb3BlcnR5KSB7CisgICAgICAgICAgICBpZiAoYXR0cmlidXRlcyAmIFByb3BlcnR5
QXR0cmlidXRlOjpSZWFkT25seSkKKyAgICAgICAgICAgICAgICByZXR1cm4gdHlwZUVycm9yKGds
b2JhbE9iamVjdCwgc2NvcGUsIHNsb3QuaXNTdHJpY3RNb2RlKCksIFJlYWRvbmx5UHJvcGVydHlX
cml0ZUVycm9yKTsKKyAgICAgICAgICAgIGlmIChhdHRyaWJ1dGVzICYgUHJvcGVydHlBdHRyaWJ1
dGU6OkFjY2Vzc29yKSB7CisgICAgICAgICAgICAgICAgQVNTRVJUKGlzVmFsaWRPZmZzZXQob2Zm
c2V0KSk7CiAgICAgICAgICAgICAgICAgLy8gV2UgbmVlZCB0byBtYWtlIHN1cmUgdGhhdCB3ZSBk
ZWNpZGUgdG8gY2FjaGUgdGhpcyBwcm9wZXJ0eSBiZWZvcmUgd2UgcG90ZW50aWFsbHkgZXhlY3V0
ZSBhcmliaXRyYXJ5IEpTLgogICAgICAgICAgICAgICAgIGlmICghdGhpcy0+c3RydWN0dXJlKHZt
KS0+aXNVbmNhY2hlYWJsZURpY3Rpb25hcnkoKSkKICAgICAgICAgICAgICAgICAgICAgc2xvdC5z
ZXRDYWNoZWFibGVTZXR0ZXIob2JqLCBvZmZzZXQpOwotCi0gICAgICAgICAgICAgICAgYm9vbCBy
ZXN1bHQgPSBjYWxsU2V0dGVyKGdsb2JhbE9iamVjdCwgc2xvdC50aGlzVmFsdWUoKSwgZ3MsIHZh
bHVlLCBzbG90LmlzU3RyaWN0TW9kZSgpID8gRUNNQU1vZGU6OnN0cmljdCgpIDogRUNNQU1vZGU6
OnNsb3BweSgpKTsKLSAgICAgICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBm
YWxzZSk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgICAgICAgICBK
U1ZhbHVlIGdzID0gb2JqLT5nZXREaXJlY3Qob2Zmc2V0KTsKKyAgICAgICAgICAgICAgICBSRUxF
QVNFX0FORF9SRVRVUk4oc2NvcGUsIGNhbGxTZXR0ZXIoZ2xvYmFsT2JqZWN0LCBzbG90LnRoaXNW
YWx1ZSgpLCBncywgdmFsdWUsIHNsb3QuaXNTdHJpY3RNb2RlKCkgPyBFQ01BTW9kZTo6c3RyaWN0
KCkgOiBFQ01BTW9kZTo6c2xvcHB5KCkpKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlm
IChncy5pc0N1c3RvbUdldHRlclNldHRlcigpKSB7Ci0gICAgICAgICAgICAgICAgYm9vbCBpc0Fj
Y2Vzc29yID0gYXR0cmlidXRlcyAmIFByb3BlcnR5QXR0cmlidXRlOjpDdXN0b21BY2Nlc3NvcjsK
LSAgICAgICAgICAgICAgICBhdXRvIHNldHRlciA9IGpzQ2FzdDxDdXN0b21HZXR0ZXJTZXR0ZXIq
Pihncy5hc0NlbGwoKSktPnNldHRlcigpOworICAgICAgICAgICAgaWYgKGF0dHJpYnV0ZXMgJiBQ
cm9wZXJ0eUF0dHJpYnV0ZTo6Q3VzdG9tQWNjZXNzb3IpIHsKKyAgICAgICAgICAgICAgICAvLyBG
SVhNRTogUmVtb3ZlIHRoaXMgYWZ0ZXIgV2ViSURMIGdlbmVyYXRvciBpcyBmaXhlZCB0byBzZXQg
UmVhZE9ubHkgZm9yIFtSdW50aW1lQ29uZGl0aW9uYWxseVJlYWRXcml0ZV0gYXR0cmlidXRlcy4K
KyAgICAgICAgICAgICAgICBpZiAoIWN1c3RvbVNldHRlcikKKyAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAgIEFTU0VSVChjdXN0b21TZXR0ZXIpOwogICAg
ICAgICAgICAgICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgb25seSBiZSBjYWNoaW5nIHRoZXNlIGlm
IHdlJ3JlIG5vdCBhbiB1bmNhY2hlYWJsZSBkaWN0aW9uYXJ5OgogICAgICAgICAgICAgICAgIC8v
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTUzNDcKLQotICAgICAg
ICAgICAgICAgIC8vIFdlIG5lZWQgdG8gbWFrZSBzdXJlIHRoYXQgd2UgZGVjaWRlIHRvIGNhY2hl
IHRoaXMgcHJvcGVydHkgYmVmb3JlIHdlIHBvdGVudGlhbGx5IGV4ZWN1dGUgYXJpYml0cmFyeSBK
Uy4KLSAgICAgICAgICAgICAgICBpZiAoaXNBY2Nlc3NvcikKLSAgICAgICAgICAgICAgICAgICAg
c2xvdC5zZXRDdXN0b21BY2Nlc3NvcihvYmosIHNldHRlcik7Ci0gICAgICAgICAgICAgICAgZWxz
ZQotICAgICAgICAgICAgICAgICAgICBzbG90LnNldEN1c3RvbVZhbHVlKG9iaiwgc2V0dGVyKTsK
LQotICAgICAgICAgICAgICAgIGF1dG8gcmVzdWx0ID0gY2FsbEN1c3RvbVNldHRlcihnbG9iYWxP
YmplY3QsIHNldHRlciwgaXNBY2Nlc3Nvciwgb2JqLCBzbG90LnRoaXNWYWx1ZSgpLCB2YWx1ZSwg
cHJvcGVydHlOYW1lKTsKLSAgICAgICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3Bl
LCBmYWxzZSk7Ci0gICAgICAgICAgICAgICAgaWYgKHJlc3VsdCAhPSBUcmlTdGF0ZTo6SW5kZXRl
cm1pbmF0ZSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdCA9PSBUcmlTdGF0ZTo6
VHJ1ZTsKKyAgICAgICAgICAgICAgICBzbG90LnNldEN1c3RvbUFjY2Vzc29yKG9iaiwgY3VzdG9t
U2V0dGVyKTsKKyAgICAgICAgICAgICAgICBzY29wZS5yZWxlYXNlKCk7CisgICAgICAgICAgICAg
ICAgY3VzdG9tU2V0dGVyKGdsb2JhbE9iamVjdCwgSlNWYWx1ZTo6ZW5jb2RlKHNsb3QudGhpc1Zh
bHVlKCkpLCBKU1ZhbHVlOjplbmNvZGUodmFsdWUpLCBwcm9wZXJ0eU5hbWUpOworICAgICAgICAg
ICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgQVNTRVJUKCEo
YXR0cmlidXRlcyAmIFByb3BlcnR5QXR0cmlidXRlOjpBY2Nlc3NvcikpOwotCi0gICAgICAgICAg
ICAvLyBJZiB0aGVyZSdzIGFuIGV4aXN0aW5nIHByb3BlcnR5IG9uIHRoZSBiYXNlIG9iamVjdCwg
b3Igb24gb25lIG9mIGl0cyAKLSAgICAgICAgICAgIC8vIHByb3RvdHlwZXMsIHdlIHNob3VsZCBz
dG9yZSB0aGUgcHJvcGVydHkgb24gdGhlICpiYXNlKiBvYmplY3QuCi0gICAgICAgICAgICBicmVh
azsKLSAgICAgICAgfQotICAgICAgICBpZiAoIW9iai0+c3RhdGljUHJvcGVydGllc1JlaWZpZWQo
dm0pKSB7Ci0gICAgICAgICAgICBpZiAob2JqLT5jbGFzc0luZm8odm0pLT5oYXNTdGF0aWNTZXR0
ZXJPclJlYWRvbmx5UHJvcGVydGllcygpKSB7Ci0gICAgICAgICAgICAgICAgaWYgKGF1dG8gZW50
cnkgPSBvYmotPmZpbmRQcm9wZXJ0eUhhc2hFbnRyeSh2bSwgcHJvcGVydHlOYW1lKSkKLSAgICAg
ICAgICAgICAgICAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBwdXRFbnRyeShnbG9iYWxP
YmplY3QsIGVudHJ5LT50YWJsZS0+Y2xhc3NGb3JUaGlzLCBlbnRyeS0+dmFsdWUsIG9iaiwgdGhp
cywgcHJvcGVydHlOYW1lLCB2YWx1ZSwgc2xvdCkpOworICAgICAgICAgICAgaWYgKGF0dHJpYnV0
ZXMgJiBQcm9wZXJ0eUF0dHJpYnV0ZTo6Q3VzdG9tVmFsdWUpIHsKKyAgICAgICAgICAgICAgICAv
LyBGSVhNRTogT25jZSBsZWdhY3kgUmVnRXhwIGZlYXR1cmVzIGFyZSBpbXBsZW1lbnRlZCwgdGhl
cmUgd291bGQgYmUgbm8gdXNlIGNhc2UgZm9yIGNhbGxpbmcgQ3VzdG9tVmFsdWUgc2V0dGVyIGlm
IHJlY2VpdmVyIGlzIGFsdGVyZWQuCisgICAgICAgICAgICAgICAgaWYgKGN1c3RvbVNldHRlciAm
JiAhKGlzVGhpc1ZhbHVlQWx0ZXJlZChzbG90LCBvYmopICYmIHNsb3QuY29udGV4dCgpID09IFB1
dFByb3BlcnR5U2xvdDo6UmVmbGVjdFNldCkpIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gRklY
TUU6IFdlIHNob3VsZCBvbmx5IGJlIGNhY2hpbmcgdGhlc2UgaWYgd2UncmUgbm90IGFuIHVuY2Fj
aGVhYmxlIGRpY3Rpb25hcnk6CisgICAgICAgICAgICAgICAgICAgIC8vIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTUzNDcKKyAgICAgICAgICAgICAgICAgICAgc2xv
dC5zZXRDdXN0b21WYWx1ZShvYmosIGN1c3RvbVNldHRlcik7CisgICAgICAgICAgICAgICAgICAg
IFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwgY3VzdG9tU2V0dGVyKGdsb2JhbE9iamVjdCwgSlNW
YWx1ZTo6ZW5jb2RlKG9iaiksIEpTVmFsdWU6OmVuY29kZSh2YWx1ZSksIHByb3BlcnR5TmFtZSkp
OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAoIWlzVGhpc1ZhbHVlQWx0
ZXJlZChzbG90LCBvYmopKSB7CisgICAgICAgICAgICAgICAgICAgIC8vIEF2b2lkIFB1dE1vZGVQ
dXQgYmVjYXVzZSBpdCBmYWlscyBmb3Igbm9uLWV4dGVuc2libGUgc3RydWN0dXJlcy4KKyAgICAg
ICAgICAgICAgICAgICAgb2JqLT5wdXREaXJlY3Qodm0sIHByb3BlcnR5TmFtZSwgdmFsdWUsIGF0
dHJpYnV0ZXNGb3JTdHJ1Y3R1cmUoYXR0cmlidXRlcykgJiB+UHJvcGVydHlBdHRyaWJ1dGU6OkN1
c3RvbVZhbHVlLCBzbG90KTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAg
ICAgICAgICAgICAgfQogICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKGF0dHJpYnV0ZXMg
JiBQcm9wZXJ0eUF0dHJpYnV0ZTo6QnVpbHRpbk9yRnVuY3Rpb25PckxhenlQcm9wZXJ0eSkgewor
ICAgICAgICAgICAgICAgIGlmICghaXNUaGlzVmFsdWVBbHRlcmVkKHNsb3QsIG9iaikpIHsKKyAg
ICAgICAgICAgICAgICAgICAgLy8gQXZvaWQgUHV0TW9kZVB1dCBiZWNhdXNlIGl0IGZhaWxzIGZv
ciBub24tZXh0ZW5zaWJsZSBzdHJ1Y3R1cmVzLgorICAgICAgICAgICAgICAgICAgICBvYmotPnB1
dERpcmVjdCh2bSwgcHJvcGVydHlOYW1lLCB2YWx1ZSwgYXR0cmlidXRlc0ZvclN0cnVjdHVyZShh
dHRyaWJ1dGVzKSwgc2xvdCk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIC8vIElmIHRoZXJlJ3Mg
YW4gZXhpc3Rpbmcgd3JpdGFibGUgcHJvcGVydHkgb24gdGhlIGJhc2Ugb2JqZWN0LCBvciBvbiBv
bmUgb2YgaXRzIAorICAgICAgICAgICAgLy8gcHJvdG90eXBlcywgd2Ugc2hvdWxkIGF0dGVtcHQg
dG8gc3RvcmUgdGhlIHByb3BlcnR5IG9uIHRoZSByZWNlaXZlci4KKyAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICB9Ci0gICAgICAgIGlmIChvYmotPnR5cGUoKSA9PSBQcm94eU9iamVjdFR5cGUp
IHsKLSAgICAgICAgICAgIGF1dG8qIHByb3h5ID0ganNDYXN0PFByb3h5T2JqZWN0Kj4ob2JqKTsK
LSAgICAgICAgICAgIFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwgcHJveHktPlByb3h5T2JqZWN0
OjpwdXQocHJveHksIGdsb2JhbE9iamVjdCwgcHJvcGVydHlOYW1lLCB2YWx1ZSwgc2xvdCkpOwot
ICAgICAgICB9CisKICAgICAgICAgSlNWYWx1ZSBwcm90b3R5cGUgPSBvYmotPmdldFByb3RvdHlw
ZSh2bSwgZ2xvYmFsT2JqZWN0KTsKICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwg
ZmFsc2UpOwogICAgICAgICBpZiAocHJvdG90eXBlLmlzTnVsbCgpKQpAQCAtODM2LDkgKzg1OSw4
MCBAQCBib29sIEpTT2JqZWN0OjpwdXRJbmxpbmVTbG93KEpTR2xvYmFsT2JqCiAgICAgICAgIG9i
aiA9IGFzT2JqZWN0KHByb3RvdHlwZSk7CiAgICAgfQogCi0gICAgaWYgKCFwdXREaXJlY3RJbnRl
cm5hbDxQdXRNb2RlUHV0Pih2bSwgcHJvcGVydHlOYW1lLCB2YWx1ZSwgMCwgc2xvdCkpCisgICAg
c2NvcGUucmVsZWFzZSgpOworICAgIGlmIChVTkxJS0VMWShpc1RoaXNWYWx1ZUFsdGVyZWQoc2xv
dCwgdGhpcykpKQorICAgICAgICByZXR1cm4gZGVmaW5lUHJvcGVydHlPblJlY2VpdmVyKGdsb2Jh
bE9iamVjdCwgcHJvcGVydHlOYW1lLCB2YWx1ZSwgc2xvdCk7CisgICAgcmV0dXJuIHB1dElubGlu
ZUZhc3QoZ2xvYmFsT2JqZWN0LCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCBzbG90KTsKK30KKworc3Rh
dGljIE5FVkVSX0lOTElORSBib29sIGRlZmluZVByb3BlcnR5T25SZWNlaXZlclNsb3coSlNHbG9i
YWxPYmplY3QqIGdsb2JhbE9iamVjdCwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgSlNWYWx1
ZSB2YWx1ZSwgSlNPYmplY3QqIHJlY2VpdmVyLCBib29sIHNob3VsZFRocm93KQoreworICAgIFZN
JiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJP
V19TQ09QRSh2bSk7CisKKyAgICBQcm9wZXJ0eVNsb3Qgc2xvdChyZWNlaXZlciwgUHJvcGVydHlT
bG90OjpJbnRlcm5hbE1ldGhvZFR5cGU6OkdldE93blByb3BlcnR5KTsKKyAgICBib29sIGhhc1By
b3BlcnR5ID0gcmVjZWl2ZXItPm1ldGhvZFRhYmxlKHZtKS0+Z2V0T3duUHJvcGVydHlTbG90KHJl
Y2VpdmVyLCBnbG9iYWxPYmplY3QsIHByb3BlcnR5TmFtZSwgc2xvdCk7CisgICAgUkVUVVJOX0lG
X0VYQ0VQVElPTihzY29wZSwgZmFsc2UpOworCisgICAgUHJvcGVydHlEZXNjcmlwdG9yIGRlc2Ny
aXB0b3I7CisgICAgaWYgKGhhc1Byb3BlcnR5KSB7CisgICAgICAgIC8vIEZJWE1FOiBGb3IgYW4g
YWNjZXNzb3Igd2l0aCBzZXR0ZXIsIHRoZSBlcnJvciBtZXNzYWdlIGlzIG1pc2xlYWRpbmcuCisg
ICAgICAgIGlmIChzbG90LmF0dHJpYnV0ZXMoKSAmIFByb3BlcnR5QXR0cmlidXRlOjpSZWFkT25s
eU9yQWNjZXNzb3JPckN1c3RvbUFjY2Vzc29yKQorICAgICAgICAgICAgcmV0dXJuIHR5cGVFcnJv
cihnbG9iYWxPYmplY3QsIHNjb3BlLCBzaG91bGRUaHJvdywgUmVhZG9ubHlQcm9wZXJ0eVdyaXRl
RXJyb3IpOworICAgICAgICBkZXNjcmlwdG9yLnNldFZhbHVlKHZhbHVlKTsKKyAgICB9IGVsc2UK
KyAgICAgICAgZGVzY3JpcHRvci5zZXREZXNjcmlwdG9yKHZhbHVlLCBzdGF0aWNfY2FzdDx1bnNp
Z25lZD4oUHJvcGVydHlBdHRyaWJ1dGU6Ok5vbmUpKTsKKworICAgIFJFTEVBU0VfQU5EX1JFVFVS
TihzY29wZSwgcmVjZWl2ZXItPm1ldGhvZFRhYmxlKHZtKS0+ZGVmaW5lT3duUHJvcGVydHkocmVj
ZWl2ZXIsIGdsb2JhbE9iamVjdCwgcHJvcGVydHlOYW1lLCBkZXNjcmlwdG9yLCBzaG91bGRUaHJv
dykpOworfQorCisvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9yZGluYXJ5c2V0IChz
dGVwIDMpCitib29sIEpTT2JqZWN0OjpkZWZpbmVQcm9wZXJ0eU9uUmVjZWl2ZXIoSlNHbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjdCwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSB2
YWx1ZSwgUHV0UHJvcGVydHlTbG90JiBzbG90KQoreworICAgIEFTU0VSVCghcGFyc2VJbmRleChw
cm9wZXJ0eU5hbWUpKTsKKworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICBh
dXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKKyAgICBKU09iamVjdCogcmVj
ZWl2ZXIgPSBzbG90LnRoaXNWYWx1ZSgpLmdldE9iamVjdCgpOworICAgIC8vIEZJWE1FOiBGb3Ig
YSBmYWlsdXJlIGR1ZSB0byBwcmltaXRpdmUgcmVjZWl2ZXIsIHRoZSBlcnJvciBtZXNzYWdlIGlz
IG1pc2xlYWRpbmcuCisgICAgaWYgKCFyZWNlaXZlcikKICAgICAgICAgcmV0dXJuIHR5cGVFcnJv
cihnbG9iYWxPYmplY3QsIHNjb3BlLCBzbG90LmlzU3RyaWN0TW9kZSgpLCBSZWFkb25seVByb3Bl
cnR5V3JpdGVFcnJvcik7Ci0gICAgcmV0dXJuIHRydWU7CisgICAgc2NvcGUucmVsZWFzZSgpOwor
CisgICAgaWYgKHNsb3QuaXNUYWludGVkQnlPcGFxdWVPYmplY3QoKSB8fCBzbG90LmNvbnRleHQo
KSA9PSBQdXRQcm9wZXJ0eVNsb3Q6OlJlZmxlY3RTZXQpIHsKKyAgICAgICAgaWYgKHJlY2VpdmVy
LT5tZXRob2RUYWJsZSh2bSktPmRlZmluZU93blByb3BlcnR5ICE9IEpTT2JqZWN0OjpkZWZpbmVP
d25Qcm9wZXJ0eSkKKyAgICAgICAgICAgIHJldHVybiBkZWZpbmVQcm9wZXJ0eU9uUmVjZWl2ZXJT
bG93KGdsb2JhbE9iamVjdCwgcHJvcGVydHlOYW1lLCB2YWx1ZSwgcmVjZWl2ZXIsIHNsb3QuaXNT
dHJpY3RNb2RlKCkpOworICAgIH0KKworICAgIGlmIChVTkxJS0VMWShyZWNlaXZlci0+aGFzTm9u
UmVpZmllZFN0YXRpY1Byb3BlcnRpZXModm0pKSkKKyAgICAgICAgcmV0dXJuIHJlY2VpdmVyLT5w
dXRJbmxpbmVGYXN0UmVwbGFjaW5nU3RhdGljUHJvcGVydHlJZk5lZWRlZChnbG9iYWxPYmplY3Qs
IHByb3BlcnR5TmFtZSwgdmFsdWUsIHNsb3QpOworICAgIHJldHVybiByZWNlaXZlci0+cHV0SW5s
aW5lRmFzdChnbG9iYWxPYmplY3QsIHByb3BlcnR5TmFtZSwgdmFsdWUsIHNsb3QpOworfQorCiti
b29sIEpTT2JqZWN0OjpwdXRJbmxpbmVGYXN0UmVwbGFjaW5nU3RhdGljUHJvcGVydHlJZk5lZWRl
ZChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1l
LCBKU1ZhbHVlIHZhbHVlLCBQdXRQcm9wZXJ0eVNsb3QmIHNsb3QpCit7CisgICAgQVNTRVJUKCFw
YXJzZUluZGV4KHByb3BlcnR5TmFtZSkpOworCisgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52
bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKworICAgIFN0
cnVjdHVyZSogc3RydWN0dXJlID0gdGhpcy0+c3RydWN0dXJlKHZtKTsKKyAgICBBU1NFUlQoc3Ry
dWN0dXJlLT5oYXNOb25SZWlmaWVkU3RhdGljUHJvcGVydGllcygpKTsKKyAgICBpZiAoIWlzVmFs
aWRPZmZzZXQoc3RydWN0dXJlLT5nZXQodm0sIHByb3BlcnR5TmFtZSkpKSB7CisgICAgICAgIGlm
IChhdXRvIGVudHJ5ID0gc3RydWN0dXJlLT5maW5kUHJvcGVydHlIYXNoRW50cnkocHJvcGVydHlO
YW1lKSkgeworICAgICAgICAgICAgaWYgKGVudHJ5LT52YWx1ZS0+YXR0cmlidXRlcygpICYgUHJv
cGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5T3JBY2Nlc3Nvck9yQ3VzdG9tQWNjZXNzb3IpIHsKKyAg
ICAgICAgICAgICAgICBBU1NFUlQoc2xvdC5jb250ZXh0KCkgPT0gUHV0UHJvcGVydHlTbG90OjpS
ZWZsZWN0U2V0KTsKKyAgICAgICAgICAgICAgICAvLyBGSVhNRTogRm9yIGFuIGFjY2Vzc29yIHdp
dGggc2V0dGVyLCB0aGUgZXJyb3IgbWVzc2FnZSBpcyBtaXNsZWFkaW5nLgorICAgICAgICAgICAg
ICAgIHJldHVybiB0eXBlRXJyb3IoZ2xvYmFsT2JqZWN0LCBzY29wZSwgc2xvdC5pc1N0cmljdE1v
ZGUoKSwgUmVhZG9ubHlQcm9wZXJ0eVdyaXRlRXJyb3IpOworICAgICAgICAgICAgfQorICAgICAg
ICAgICAgLy8gQXZvaWQgUHV0TW9kZVB1dCBiZWNhdXNlIGl0IGZhaWxzIGZvciBub24tZXh0ZW5z
aWJsZSBzdHJ1Y3R1cmVzLgorICAgICAgICAgICAgcHV0RGlyZWN0KHZtLCBwcm9wZXJ0eU5hbWUs
IHZhbHVlLCBhdHRyaWJ1dGVzRm9yU3RydWN0dXJlKGVudHJ5LT52YWx1ZS0+YXR0cmlidXRlcygp
KSAmIH5Qcm9wZXJ0eUF0dHJpYnV0ZTo6Q3VzdG9tVmFsdWUsIHNsb3QpOworICAgICAgICAgICAg
cmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBSRUxFQVNFX0FORF9SRVRVUk4o
c2NvcGUsIHB1dElubGluZUZhc3QoZ2xvYmFsT2JqZWN0LCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCBz
bG90KSk7CiB9CiAKIGJvb2wgSlNPYmplY3Q6OnB1dEJ5SW5kZXgoSlNDZWxsKiBjZWxsLCBKU0ds
b2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUg
dmFsdWUsIGJvb2wgc2hvdWxkVGhyb3cpCkBAIC0zODUyLDMwICszOTQ2LDYgQEAgYm9vbCBKU09i
amVjdDo6YW55T2JqZWN0SW5DaGFpbk1heUludGVyYwogICAgIH0KIH0KIAotYm9vbCBKU09iamVj
dDo6cHJvdG90eXBlQ2hhaW5NYXlJbnRlcmNlcHRTdG9yZVRvKFZNJiB2bSwgUHJvcGVydHlOYW1l
IHByb3BlcnR5TmFtZSkKLXsKLSAgICBpZiAocGFyc2VJbmRleChwcm9wZXJ0eU5hbWUpKQotICAg
ICAgICByZXR1cm4gYW55T2JqZWN0SW5DaGFpbk1heUludGVyY2VwdEluZGV4ZWRBY2Nlc3Nlcyh2
bSk7Ci0gICAgCi0gICAgZm9yIChKU09iamVjdCogY3VycmVudCA9IHRoaXM7IDspIHsKLSAgICAg
ICAgSlNWYWx1ZSBwcm90b3R5cGUgPSBjdXJyZW50LT5nZXRQcm90b3R5cGVEaXJlY3Qodm0pOwot
ICAgICAgICBpZiAocHJvdG90eXBlLmlzTnVsbCgpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgICAgICAKLSAgICAgICAgY3VycmVudCA9IGFzT2JqZWN0KHByb3RvdHlwZSk7Ci0gICAg
ICAgIAotICAgICAgICB1bnNpZ25lZCBhdHRyaWJ1dGVzOwotICAgICAgICBQcm9wZXJ0eU9mZnNl
dCBvZmZzZXQgPSBjdXJyZW50LT5zdHJ1Y3R1cmUodm0pLT5nZXQodm0sIHByb3BlcnR5TmFtZSwg
YXR0cmlidXRlcyk7Ci0gICAgICAgIGlmICghSlNDOjppc1ZhbGlkT2Zmc2V0KG9mZnNldCkpCi0g
ICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgCi0gICAgICAgIGlmIChhdHRyaWJ1dGVzICYg
KFByb3BlcnR5QXR0cmlidXRlOjpSZWFkT25seSB8IFByb3BlcnR5QXR0cmlidXRlOjpBY2Nlc3Nv
cikpCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgCi0gICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICB9Ci19Ci0KIGJvb2wgSlNPYmplY3Q6Om5lZWRzU2xvd1B1dEluZGV4aW5nKFZN
JiB2bSkgY29uc3QKIHsKICAgICByZXR1cm4gYW55T2JqZWN0SW5DaGFpbk1heUludGVyY2VwdElu
ZGV4ZWRBY2Nlc3Nlcyh2bSkgfHwgZ2xvYmFsT2JqZWN0KHZtKS0+aXNIYXZpbmdBQmFkVGltZSgp
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5oCShyZXZpc2lv
biAyNzY1ODUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5oCSh3
b3JraW5nIGNvcHkpCkBAIC0xNjYsNyArMTY2LDYgQEAgcHVibGljOgogCiAgICAgSlNfRVhQT1JU
X1BSSVZBVEUgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90QnlJbmRleChKU09iamVjdCos
IEpTR2xvYmFsT2JqZWN0KiwgdW5zaWduZWQgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmKTsK
ICAgICBib29sIGdldE93blByb3BlcnR5U2xvdElubGluZShKU0dsb2JhbE9iamVjdCosIFByb3Bl
cnR5TmFtZSwgUHJvcGVydHlTbG90Jik7Ci0gICAgSlNfRVhQT1JUX1BSSVZBVEVfSUZfQVNTRVJU
X0VOQUJMRUQgc3RhdGljIHZvaWQgZG9QdXRQcm9wZXJ0eVNlY3VyaXR5Q2hlY2soSlNPYmplY3Qq
LCBKU0dsb2JhbE9iamVjdCosIFByb3BlcnR5TmFtZSwgUHV0UHJvcGVydHlTbG90Jik7CiAKICAg
ICAvLyBUaGUga2V5IGRpZmZlcmVuY2UgYmV0d2VlbiB0aGlzIGFuZCBnZXRPd25Qcm9wZXJ0eVNs
b3QgaXMgdGhhdCBnZXRPd25Qcm9wZXJ0eVNsb3QKICAgICAvLyBjdXJyZW50bHkgcmV0dXJucyBp
bmNvcnJlY3QgcmVzdWx0cyBmb3IgdGhlIERPTSB3aW5kb3cgKHdpdGggbm9uLW93biBwcm9wZXJ0
aWVzKQpAQCAtMTk3LDYgKzE5Niw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgYm9vbCBwdXRJbmxp
bmVGb3JKU09iamVjdChKU0NlbGwqLCBKU0dsb2JhbE9iamVjdCosIFByb3BlcnR5TmFtZSwgSlNW
YWx1ZSwgUHV0UHJvcGVydHlTbG90Jik7CiAgICAgCiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3Rh
dGljIGJvb2wgcHV0KEpTQ2VsbCosIEpTR2xvYmFsT2JqZWN0KiwgUHJvcGVydHlOYW1lLCBKU1Zh
bHVlLCBQdXRQcm9wZXJ0eVNsb3QmKTsKKyAgICBKU19FWFBPUlRfUFJJVkFURSBORVZFUl9JTkxJ
TkUgc3RhdGljIGJvb2wgZGVmaW5lUHJvcGVydHlPblJlY2VpdmVyKEpTR2xvYmFsT2JqZWN0Kiwg
UHJvcGVydHlOYW1lLCBKU1ZhbHVlLCBQdXRQcm9wZXJ0eVNsb3QmKTsKICAgICAvLyBwdXRCeUlu
ZGV4IGFzc3VtZXMgdGhhdCB0aGUgcmVjZWl2ZXIgaXMgdGhpcyBKU0NlbGwgb2JqZWN0LgogICAg
IEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBib29sIHB1dEJ5SW5kZXgoSlNDZWxsKiwgSlNHbG9i
YWxPYmplY3QqLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUsIGJvb2wgc2hvdWxkVGhy
b3cpOwogICAgICAgICAKQEAgLTIxMywxMiArMjEzLDEzIEBAIHB1YmxpYzoKIAogICAgIEFMV0FZ
U19JTkxJTkUgYm9vbCBwdXRCeUluZGV4SW5saW5lKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmpl
Y3QsIHVpbnQ2NF90IHByb3BlcnR5TmFtZSwgSlNWYWx1ZSB2YWx1ZSwgYm9vbCBzaG91bGRUaHJv
dykKICAgICB7CisgICAgICAgIFZNJiB2bSA9IGdldFZNKGdsb2JhbE9iamVjdCk7CiAgICAgICAg
IGlmIChMSUtFTFkocHJvcGVydHlOYW1lIDw9IE1BWF9BUlJBWV9JTkRFWCkpCiAgICAgICAgICAg
ICByZXR1cm4gcHV0QnlJbmRleElubGluZShnbG9iYWxPYmplY3QsIHN0YXRpY19jYXN0PHVpbnQz
Ml90Pihwcm9wZXJ0eU5hbWUpLCB2YWx1ZSwgc2hvdWxkVGhyb3cpOwogCiAgICAgICAgIEFTU0VS
VChwcm9wZXJ0eU5hbWUgPD0gbWF4U2FmZUludGVnZXIoKSk7CiAgICAgICAgIFB1dFByb3BlcnR5
U2xvdCBzbG90KHRoaXMsIHNob3VsZFRocm93KTsKLSAgICAgICAgcmV0dXJuIHB1dElubGluZUZv
ckpTT2JqZWN0KHRoaXMsIGdsb2JhbE9iamVjdCwgSWRlbnRpZmllcjo6ZnJvbShnZXRWTShnbG9i
YWxPYmplY3QpLCBwcm9wZXJ0eU5hbWUpLCB2YWx1ZSwgc2xvdCk7CisgICAgICAgIHJldHVybiBt
ZXRob2RUYWJsZSh2bSktPnB1dCh0aGlzLCBnbG9iYWxPYmplY3QsIElkZW50aWZpZXI6OmZyb20o
dm0sIHByb3BlcnR5TmFtZSksIHZhbHVlLCBzbG90KTsKICAgICB9CiAgICAgICAgIAogICAgIC8v
IFRoaXMgaXMgc2ltaWxhciB0byB0aGUgcHV0RGlyZWN0KiBtZXRob2RzOgpAQCAtNjM3LDYgKzYz
OCw3IEBAIHB1YmxpYzoKICAgICAvLyAgLSBhdHRyaWJ1dGVzIHdpbGwgYmUgcmVzcGVjdGVkIChh
ZnRlciB0aGUgY2FsbCB0aGUgcHJvcGVydHkgd2lsbCBleGlzdCB3aXRoIHRoZSBnaXZlbiBhdHRy
aWJ1dGVzKQogICAgIC8vICAtIHRoZSBwcm9wZXJ0eSBuYW1lIGlzIGFzc3VtZWQgdG8gbm90IGJl
IGFuIGluZGV4LgogICAgIGJvb2wgcHV0RGlyZWN0KFZNJiwgUHJvcGVydHlOYW1lLCBKU1ZhbHVl
LCB1bnNpZ25lZCBhdHRyaWJ1dGVzID0gMCk7CisgICAgYm9vbCBwdXREaXJlY3QoVk0mLCBQcm9w
ZXJ0eU5hbWUsIEpTVmFsdWUsIHVuc2lnbmVkIGF0dHJpYnV0ZXMsIFB1dFByb3BlcnR5U2xvdCYp
OwogICAgIGJvb2wgcHV0RGlyZWN0KFZNJiwgUHJvcGVydHlOYW1lLCBKU1ZhbHVlLCBQdXRQcm9w
ZXJ0eVNsb3QmKTsKICAgICB2b2lkIHB1dERpcmVjdFdpdGhvdXRUcmFuc2l0aW9uKFZNJiwgUHJv
cGVydHlOYW1lLCBKU1ZhbHVlLCB1bnNpZ25lZCBhdHRyaWJ1dGVzID0gMCk7CiAgICAgYm9vbCBw
dXREaXJlY3ROb25JbmRleEFjY2Vzc29yKFZNJiwgUHJvcGVydHlOYW1lLCBHZXR0ZXJTZXR0ZXIq
LCB1bnNpZ25lZCBhdHRyaWJ1dGVzKTsKQEAgLTc2NCw2ICs3NjYsMTEgQEAgcHVibGljOgogICAg
IGJvb2wgaGFzR2V0dGVyU2V0dGVyUHJvcGVydGllcyhWTSYgdm0pIHsgcmV0dXJuIHN0cnVjdHVy
ZSh2bSktPmhhc0dldHRlclNldHRlclByb3BlcnRpZXMoKTsgfQogICAgIGJvb2wgaGFzQ3VzdG9t
R2V0dGVyU2V0dGVyUHJvcGVydGllcyhWTSYgdm0pIHsgcmV0dXJuIHN0cnVjdHVyZSh2bSktPmhh
c0N1c3RvbUdldHRlclNldHRlclByb3BlcnRpZXMoKTsgfQogCisgICAgYm9vbCBoYXNOb25SZWlm
aWVkU3RhdGljUHJvcGVydGllcyhWTSYgdm0pCisgICAgeworICAgICAgICByZXR1cm4gVHlwZUlu
Zm86Omhhc1N0YXRpY1Byb3BlcnR5VGFibGUoaW5saW5lVHlwZUZsYWdzKCkpICYmICFzdHJ1Y3R1
cmUodm0pLT5zdGF0aWNQcm9wZXJ0aWVzUmVpZmllZCgpOworICAgIH0KKwogICAgIC8vIHB1dE93
bkRhdGFQcm9wZXJ0eSBoYXMgJ3B1dCcgbGlrZSBzZW1hbnRpY3MsIGhvd2V2ZXIgdGhpcyBtZXRo
b2Q6CiAgICAgLy8gIC0gYXNzdW1lcyB0aGUgb2JqZWN0IGNvbnRhaW5zIG5vIG93biBnZXR0ZXIv
c2V0dGVyIHByb3BlcnRpZXMuCiAgICAgLy8gIC0gcHJvdmlkZXMgbm8gc3BlY2lhbCBoYW5kbGlu
ZyBmb3IgX19wcm90b19fCkBAIC04MTAsNyArODE3LDYgQEAgcHVibGljOgogICAgIGJvb2wgaXNG
cm96ZW4oVk0mIHZtKSB7IHJldHVybiBzdHJ1Y3R1cmUodm0pLT5pc0Zyb3plbih2bSk7IH0KIAog
ICAgIEpTX0VYUE9SVF9QUklWQVRFIGJvb2wgYW55T2JqZWN0SW5DaGFpbk1heUludGVyY2VwdElu
ZGV4ZWRBY2Nlc3NlcyhWTSYpIGNvbnN0OwotICAgIEpTX0VYUE9SVF9QUklWQVRFIGJvb2wgcHJv
dG90eXBlQ2hhaW5NYXlJbnRlcmNlcHRTdG9yZVRvKFZNJiwgUHJvcGVydHlOYW1lKTsKICAgICBi
b29sIG5lZWRzU2xvd1B1dEluZGV4aW5nKFZNJikgY29uc3Q7CiAKIHByaXZhdGU6CkBAIC0xMTAz
LDYgKzExMDksOCBAQCBwcml2YXRlOgogICAgIGJvb2wgcHV0RGlyZWN0SW50ZXJuYWwoVk0mLCBQ
cm9wZXJ0eU5hbWUsIEpTVmFsdWUsIHVuc2lnbmVkIGF0dHIsIFB1dFByb3BlcnR5U2xvdCYpOwog
CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgTkVWRVJfSU5MSU5FIGJvb2wgcHV0SW5saW5lU2xvdyhK
U0dsb2JhbE9iamVjdCosIFByb3BlcnR5TmFtZSwgSlNWYWx1ZSwgUHV0UHJvcGVydHlTbG90Jik7
CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgTkVWRVJfSU5MSU5FIGJvb2wgcHV0SW5saW5lRmFzdFJl
cGxhY2luZ1N0YXRpY1Byb3BlcnR5SWZOZWVkZWQoSlNHbG9iYWxPYmplY3QqLCBQcm9wZXJ0eU5h
bWUsIEpTVmFsdWUsIFB1dFByb3BlcnR5U2xvdCYpOworICAgIGJvb2wgcHV0SW5saW5lRmFzdChK
U0dsb2JhbE9iamVjdCosIFByb3BlcnR5TmFtZSwgSlNWYWx1ZSwgUHV0UHJvcGVydHlTbG90Jik7
CiAKICAgICBib29sIGdldE5vbkluZGV4UHJvcGVydHlTbG90KEpTR2xvYmFsT2JqZWN0KiwgUHJv
cGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmKTsKICAgICBib29sIGdldE93bk5vbkluZGV4UHJvcGVy
dHlTbG90KFZNJiwgU3RydWN0dXJlKiwgUHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmKTsKQEAg
LTE0MzUsMTAgKzE0NDMsNiBAQCBBTFdBWVNfSU5MSU5FIGJvb2wgSlNPYmplY3Q6OmdldE93blBy
b3BlCiB7CiAgICAgcmV0dXJuIGdldE93blByb3BlcnR5U2xvdEltcGwob2JqZWN0LCBnbG9iYWxP
YmplY3QsIHByb3BlcnR5TmFtZSwgc2xvdCk7CiB9Ci0KLUFMV0FZU19JTkxJTkUgdm9pZCBKU09i
amVjdDo6ZG9QdXRQcm9wZXJ0eVNlY3VyaXR5Q2hlY2soSlNPYmplY3QqLCBKU0dsb2JhbE9iamVj
dCosIFByb3BlcnR5TmFtZSwgUHV0UHJvcGVydHlTbG90JikKLXsKLX0KICNlbmRpZgogCiAvLyBJ
dCBtYXkgc2VlbSBjcmF6eSB0byBpbmxpbmUgYSBmdW5jdGlvbiB0aGlzIGxhcmdlIGJ1dCBpdCBt
YWtlcyBhIGJpZyBkaWZmZXJlbmNlCkBAIC0xNTIyLDYgKzE1MjYsMTMgQEAgaW5saW5lIGJvb2wg
SlNPYmplY3Q6OnB1dERpcmVjdChWTSYgdm0sIAogICAgIHJldHVybiBwdXREaXJlY3RJbnRlcm5h
bDxQdXRNb2RlRGVmaW5lT3duUHJvcGVydHk+KHZtLCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCBhdHRy
aWJ1dGVzLCBzbG90KTsKIH0KIAoraW5saW5lIGJvb2wgSlNPYmplY3Q6OnB1dERpcmVjdChWTSYg
dm0sIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUgdmFsdWUsIHVuc2lnbmVkIGF0
dHJpYnV0ZXMsIFB1dFByb3BlcnR5U2xvdCYgc2xvdCkKK3sKKyAgICBBU1NFUlQoIXZhbHVlLmlz
R2V0dGVyU2V0dGVyKCkpOworICAgIEFTU0VSVCghdmFsdWUuaXNDdXN0b21HZXR0ZXJTZXR0ZXIo
KSk7CisgICAgcmV0dXJuIHB1dERpcmVjdEludGVybmFsPFB1dE1vZGVEZWZpbmVPd25Qcm9wZXJ0
eT4odm0sIHByb3BlcnR5TmFtZSwgdmFsdWUsIGF0dHJpYnV0ZXMsIHNsb3QpOworfQorCiBpbmxp
bmUgYm9vbCBKU09iamVjdDo6cHV0RGlyZWN0KFZNJiB2bSwgUHJvcGVydHlOYW1lIHByb3BlcnR5
TmFtZSwgSlNWYWx1ZSB2YWx1ZSwgUHV0UHJvcGVydHlTbG90JiBzbG90KQogewogICAgIEFTU0VS
VCghdmFsdWUuaXNHZXR0ZXJTZXR0ZXIoKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU09iamVjdElubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU09iamVjdElubGluZXMuaAkocmV2aXNpb24gMjc2NTg1KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3RJbmxpbmVzLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTY5LDYgKzY5LDggQEAgQUxXQVlTX0lOTElORSBib29sIEpTT2JqZWN0OjpjYW5QZXJm
b3JtRgogICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IG9iai0+c3RydWN0dXJlKHZtKTsK
ICAgICAgICAgaWYgKHN0cnVjdHVyZS0+aGFzUmVhZE9ubHlPckdldHRlclNldHRlclByb3BlcnRp
ZXNFeGNsdWRpbmdQcm90bygpIHx8IHN0cnVjdHVyZS0+dHlwZUluZm8oKS5vdmVycmlkZXNHZXRQ
cm90b3R5cGUoKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgaWYgKG9iaiAh
PSB0aGlzICYmIHN0cnVjdHVyZS0+dHlwZUluZm8oKS5vdmVycmlkZXNQdXQoKSkKKyAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKIAogICAgICAgICBwcm90b3R5cGUgPSBvYmotPmdldFByb3RvdHlw
ZURpcmVjdCh2bSk7CiAgICAgICAgIGlmIChwcm90b3R5cGUuaXNOdWxsKCkpCkBAIC0yMzEsMzIg
KzIzMyw0MyBAQCBBTFdBWVNfSU5MSU5FIFByb3BlcnR5T2Zmc2V0IEpTT2JqZWN0OjpwCiAgICAg
cmV0dXJuIHJlc3VsdDsKIH0KIAotLy8gRUNNQSA4LjYuMi4yCisvLyBodHRwczovL3RjMzkuZXMv
ZWNtYTI2Mi8jc2VjLW9yZGluYXJ5c2V0CiBBTFdBWVNfSU5MSU5FIGJvb2wgSlNPYmplY3Q6OnB1
dElubGluZUZvckpTT2JqZWN0KEpTQ2VsbCogY2VsbCwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSB2YWx1ZSwgUHV0UHJvcGVy
dHlTbG90JiBzbG90KQogewogICAgIFZNJiB2bSA9IGdldFZNKGdsb2JhbE9iamVjdCk7Ci0gICAg
YXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogCiAgICAgSlNPYmplY3QqIHRo
aXNPYmplY3QgPSBqc0Nhc3Q8SlNPYmplY3QqPihjZWxsKTsKICAgICBBU1NFUlQodmFsdWUpOwog
ICAgIEFTU0VSVCghSGVhcDo6aGVhcCh2YWx1ZSkgfHwgSGVhcDo6aGVhcCh2YWx1ZSkgPT0gSGVh
cDo6aGVhcCh0aGlzT2JqZWN0KSk7CiAKLSAgICBpZiAoVU5MSUtFTFkoaXNUaGlzVmFsdWVBbHRl
cmVkKHNsb3QsIHRoaXNPYmplY3QpKSkKLSAgICAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3Bl
LCBvcmRpbmFyeVNldFNsb3coZ2xvYmFsT2JqZWN0LCB0aGlzT2JqZWN0LCBwcm9wZXJ0eU5hbWUs
IHZhbHVlLCBzbG90LnRoaXNWYWx1ZSgpLCBzbG90LmlzU3RyaWN0TW9kZSgpKSk7Ci0KICAgICAv
LyBUcnkgaW5kZXhlZCBwdXQgZmlyc3QuIFRoaXMgaXMgcmVxdWlyZWQgZm9yIGNvcnJlY3RuZXNz
LCBzaW5jZSBsb2FkcyBvbiBwcm9wZXJ0eSBuYW1lcyB0aGF0IGFwcGVhciBsaWtlCiAgICAgLy8g
dmFsaWQgaW5kaWNlcyB3aWxsIG5ldmVyIGxvb2sgaW4gdGhlIG5hbWVkIHByb3BlcnR5IHN0b3Jh
Z2UuCi0gICAgaWYgKE9wdGlvbmFsPHVpbnQzMl90PiBpbmRleCA9IHBhcnNlSW5kZXgocHJvcGVy
dHlOYW1lKSkKLSAgICAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBwdXRCeUluZGV4KHRo
aXNPYmplY3QsIGdsb2JhbE9iamVjdCwgaW5kZXgudmFsdWUoKSwgdmFsdWUsIHNsb3QuaXNTdHJp
Y3RNb2RlKCkpKTsKLQotICAgIGlmICh0aGlzT2JqZWN0LT5jYW5QZXJmb3JtRmFzdFB1dElubGlu
ZSh2bSwgcHJvcGVydHlOYW1lKSkgewotICAgICAgICBBU1NFUlQoIXRoaXNPYmplY3QtPnByb3Rv
dHlwZUNoYWluTWF5SW50ZXJjZXB0U3RvcmVUbyh2bSwgcHJvcGVydHlOYW1lKSk7Ci0gICAgICAg
IGlmICghdGhpc09iamVjdC0+cHV0RGlyZWN0SW50ZXJuYWw8UHV0TW9kZVB1dD4odm0sIHByb3Bl
cnR5TmFtZSwgdmFsdWUsIDAsIHNsb3QpKQotICAgICAgICAgICAgcmV0dXJuIHR5cGVFcnJvcihn
bG9iYWxPYmplY3QsIHNjb3BlLCBzbG90LmlzU3RyaWN0TW9kZSgpLCBSZWFkb25seVByb3BlcnR5
V3JpdGVFcnJvcik7Ci0gICAgICAgIHJldHVybiB0cnVlOworICAgIGlmIChPcHRpb25hbDx1aW50
MzJfdD4gaW5kZXggPSBwYXJzZUluZGV4KHByb3BlcnR5TmFtZSkpIHsKKyAgICAgICAgaWYgKFVO
TElLRUxZKGlzVGhpc1ZhbHVlQWx0ZXJlZChzbG90LCB0aGlzT2JqZWN0KSkpCisgICAgICAgICAg
ICByZXR1cm4gb3JkaW5hcnlTZXRTbG93KGdsb2JhbE9iamVjdCwgdGhpc09iamVjdCwgcHJvcGVy
dHlOYW1lLCB2YWx1ZSwgc2xvdC50aGlzVmFsdWUoKSwgc2xvdC5pc1N0cmljdE1vZGUoKSk7Cisg
ICAgICAgIHJldHVybiB0aGlzT2JqZWN0LT5tZXRob2RUYWJsZSh2bSktPnB1dEJ5SW5kZXgodGhp
c09iamVjdCwgZ2xvYmFsT2JqZWN0LCBpbmRleC52YWx1ZSgpLCB2YWx1ZSwgc2xvdC5pc1N0cmlj
dE1vZGUoKSk7CiAgICAgfQogCi0gICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCB0aGlzT2Jq
ZWN0LT5wdXRJbmxpbmVTbG93KGdsb2JhbE9iamVjdCwgcHJvcGVydHlOYW1lLCB2YWx1ZSwgc2xv
dCkpOworICAgIGlmICghdGhpc09iamVjdC0+Y2FuUGVyZm9ybUZhc3RQdXRJbmxpbmUodm0sIHBy
b3BlcnR5TmFtZSkpCisgICAgICAgIHJldHVybiB0aGlzT2JqZWN0LT5wdXRJbmxpbmVTbG93KGds
b2JhbE9iamVjdCwgcHJvcGVydHlOYW1lLCB2YWx1ZSwgc2xvdCk7CisgICAgaWYgKFVOTElLRUxZ
KGlzVGhpc1ZhbHVlQWx0ZXJlZChzbG90LCB0aGlzT2JqZWN0KSkpCisgICAgICAgIHJldHVybiBk
ZWZpbmVQcm9wZXJ0eU9uUmVjZWl2ZXIoZ2xvYmFsT2JqZWN0LCBwcm9wZXJ0eU5hbWUsIHZhbHVl
LCBzbG90KTsKKyAgICBpZiAoVU5MSUtFTFkodGhpc09iamVjdC0+aGFzTm9uUmVpZmllZFN0YXRp
Y1Byb3BlcnRpZXModm0pKSkKKyAgICAgICAgcmV0dXJuIHRoaXNPYmplY3QtPnB1dElubGluZUZh
c3RSZXBsYWNpbmdTdGF0aWNQcm9wZXJ0eUlmTmVlZGVkKGdsb2JhbE9iamVjdCwgcHJvcGVydHlO
YW1lLCB2YWx1ZSwgc2xvdCk7CisgICAgcmV0dXJuIHRoaXNPYmplY3QtPnB1dElubGluZUZhc3Qo
Z2xvYmFsT2JqZWN0LCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCBzbG90KTsKK30KKworQUxXQVlTX0lO
TElORSBib29sIEpTT2JqZWN0OjpwdXRJbmxpbmVGYXN0KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmplY3QsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUgdmFsdWUsIFB1dFByb3Bl
cnR5U2xvdCYgc2xvdCkKK3sKKyAgICBBU1NFUlQoIXBhcnNlSW5kZXgocHJvcGVydHlOYW1lKSk7
CisKKyAgICBWTSYgdm0gPSBnZXRWTShnbG9iYWxPYmplY3QpOworICAgIGF1dG8gc2NvcGUgPSBE
RUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKworICAgIC8vIEZJWE1FOiBGb3IgYSBmYWlsdXJlIGR1
ZSB0byBub24tZXh0ZW5zaWJsZSBzdHJ1Y3R1cmUsIHRoZSBlcnJvciBtZXNzYWdlIGlzIG1pc2xl
YWRpbmcuCisgICAgaWYgKCFwdXREaXJlY3RJbnRlcm5hbDxQdXRNb2RlUHV0Pih2bSwgcHJvcGVy
dHlOYW1lLCB2YWx1ZSwgMCwgc2xvdCkpCisgICAgICAgIHJldHVybiB0eXBlRXJyb3IoZ2xvYmFs
T2JqZWN0LCBzY29wZSwgc2xvdC5pc1N0cmljdE1vZGUoKSwgUmVhZG9ubHlQcm9wZXJ0eVdyaXRl
RXJyb3IpOworICAgIHJldHVybiB0cnVlOwogfQogCiAvLyBIYXNPd25Qcm9wZXJ0eShPLCBQKSBm
cm9tIHNlY3Rpb24gNy4zLjExIGluIHRoZSBzcGVjLgpAQCAtMjk5LDcgKzMxMiw3IEBAIEFMV0FZ
U19JTkxJTkUgYm9vbCBKU09iamVjdDo6cHV0RGlyZWN0SW4KICAgICAgICAgdW5zaWduZWQgY3Vy
cmVudEF0dHJpYnV0ZXM7CiAgICAgICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldCA9IHN0cnVjdHVy
ZS0+Z2V0KHZtLCBwcm9wZXJ0eU5hbWUsIGN1cnJlbnRBdHRyaWJ1dGVzKTsKICAgICAgICAgaWYg
KG9mZnNldCAhPSBpbnZhbGlkT2Zmc2V0KSB7Ci0gICAgICAgICAgICBpZiAoKG1vZGUgPT0gUHV0
TW9kZVB1dCkgJiYgY3VycmVudEF0dHJpYnV0ZXMgJiBQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVhZE9u
bHkpCisgICAgICAgICAgICBpZiAoKG1vZGUgPT0gUHV0TW9kZVB1dCkgJiYgY3VycmVudEF0dHJp
YnV0ZXMgJiBQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVhZE9ubHlPckFjY2Vzc29yT3JDdXN0b21BY2Nl
c3NvcikKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICAgICAgICAgIHB1dERp
cmVjdCh2bSwgb2Zmc2V0LCB2YWx1ZSk7CkBAIC0zNTgsNyArMzcxLDcgQEAgQUxXQVlTX0lOTElO
RSBib29sIEpTT2JqZWN0OjpwdXREaXJlY3RJbgogICAgIHVuc2lnbmVkIGN1cnJlbnRBdHRyaWJ1
dGVzOwogICAgIG9mZnNldCA9IHN0cnVjdHVyZS0+Z2V0KHZtLCBwcm9wZXJ0eU5hbWUsIGN1cnJl
bnRBdHRyaWJ1dGVzKTsKICAgICBpZiAob2Zmc2V0ICE9IGludmFsaWRPZmZzZXQpIHsKLSAgICAg
ICAgaWYgKChtb2RlID09IFB1dE1vZGVQdXQpICYmIGN1cnJlbnRBdHRyaWJ1dGVzICYgUHJvcGVy
dHlBdHRyaWJ1dGU6OlJlYWRPbmx5KQorICAgICAgICBpZiAoKG1vZGUgPT0gUHV0TW9kZVB1dCkg
JiYgY3VycmVudEF0dHJpYnV0ZXMgJiBQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVhZE9ubHlPckFjY2Vz
c29yT3JDdXN0b21BY2Nlc3NvcikKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgICAg
ICBzdHJ1Y3R1cmUtPmRpZFJlcGxhY2VQcm9wZXJ0eShvZmZzZXQpOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNQcm94eS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTUHJveHkuaAkocmV2aXNpb24gMjc2NTg1KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNQcm94eS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw3
ICszMiw3IEBAIG5hbWVzcGFjZSBKU0MgewogY2xhc3MgSlNQcm94eSA6IHB1YmxpYyBKU05vbkZp
bmFsT2JqZWN0IHsKIHB1YmxpYzoKICAgICB1c2luZyBCYXNlID0gSlNOb25GaW5hbE9iamVjdDsK
LSAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3Ry
dWN0dXJlRmxhZ3MgfCBPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3QgfCBPdmVycmlkZXNHZXRP
d25Qcm9wZXJ0eU5hbWVzIHwgT3ZlcnJpZGVzR2V0UHJvdG90eXBlIHwgSW50ZXJjZXB0c0dldE93
blByb3BlcnR5U2xvdEJ5SW5kZXhFdmVuV2hlbkxlbmd0aElzTm90WmVybzsKKyAgICBzdGF0aWMg
Y29uc3RleHByIHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxhZ3Mg
fCBPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3QgfCBPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eU5h
bWVzIHwgT3ZlcnJpZGVzUHV0IHwgT3ZlcnJpZGVzR2V0UHJvdG90eXBlIHwgSW50ZXJjZXB0c0dl
dE93blByb3BlcnR5U2xvdEJ5SW5kZXhFdmVuV2hlbkxlbmd0aElzTm90WmVybzsKIAogICAgIHRl
bXBsYXRlPHR5cGVuYW1lIENlbGxUeXBlLCBTdWJzcGFjZUFjY2Vzcz4KICAgICBzdGF0aWMgSXNv
U3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTVHlwZUluZm8uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU1R5cGVJbmZvLmgJKHJldmlzaW9uIDI3NjU4NSkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTVHlwZUluZm8uaAkod29ya2luZyBjb3B5KQpAQCAtNTcsNyAr
NTcsNyBAQCBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIElzSW1tdXRhYmxlUHJvCiBzdGF0aWMg
Y29uc3RleHByIHVuc2lnbmVkIEdldE93blByb3BlcnR5U2xvdElzSW1wdXJlRm9yUHJvcGVydHlB
YnNlbmNlID0gMSA8PCAxNTsKIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgSW50ZXJjZXB0c0dl
dE93blByb3BlcnR5U2xvdEJ5SW5kZXhFdmVuV2hlbkxlbmd0aElzTm90WmVybyA9IDEgPDwgMTY7
CiBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIFN0cnVjdHVyZUlzSW1tb3J0YWwgPSAxIDw8IDE3
Owotc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBIYXNQdXRQcm9wZXJ0eVNlY3VyaXR5Q2hlY2sg
PSAxIDw8IDE4Oworc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBPdmVycmlkZXNQdXQgPSAxIDw8
IDE4Owogc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBPdmVycmlkZXNHZXRQcm90b3R5cGUgPSAx
IDw8IDE5Owogc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBHZXRPd25Qcm9wZXJ0eVNsb3RNYXlC
ZVdyb25nQWJvdXREb250RW51bSA9IDEgPDwgMjA7CiAKQEAgLTk0LDYgKzk0LDcgQEAgcHVibGlj
OgogICAgIGJvb2wgaW1wbGVtZW50c0RlZmF1bHRIYXNJbnN0YW5jZSgpIGNvbnN0IHsgcmV0dXJu
IGlzU2V0T25GbGFnczE8SW1wbGVtZW50c0RlZmF1bHRIYXNJbnN0YW5jZT4oKTsgfQogICAgIGJv
b2wgb3ZlcnJpZGVzR2V0Q2FsbERhdGEoKSBjb25zdCB7IHJldHVybiBpc1NldE9uRmxhZ3MxPE92
ZXJyaWRlc0dldENhbGxEYXRhPigpOyB9CiAgICAgYm9vbCBvdmVycmlkZXNHZXRPd25Qcm9wZXJ0
eVNsb3QoKSBjb25zdCB7IHJldHVybiBvdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3QoaW5saW5l
VHlwZUZsYWdzKCkpOyB9CisgICAgYm9vbCBoYXNTdGF0aWNQcm9wZXJ0eVRhYmxlKCkgY29uc3Qg
eyByZXR1cm4gaXNTZXRPbkZsYWdzMTxIYXNTdGF0aWNQcm9wZXJ0eVRhYmxlPigpOyB9CiAgICAg
c3RhdGljIGJvb2wgb3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90KElubGluZVR5cGVGbGFncyBm
bGFncykgeyByZXR1cm4gZmxhZ3MgJiBPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3Q7IH0KICAg
ICBzdGF0aWMgYm9vbCBoYXNTdGF0aWNQcm9wZXJ0eVRhYmxlKElubGluZVR5cGVGbGFncyBmbGFn
cykgeyByZXR1cm4gZmxhZ3MgJiBIYXNTdGF0aWNQcm9wZXJ0eVRhYmxlOyB9CiAgICAgc3RhdGlj
IGJvb2wgcGVyQ2VsbEJpdChJbmxpbmVUeXBlRmxhZ3MgZmxhZ3MpIHsgcmV0dXJuIGZsYWdzICYg
VHlwZUluZm9QZXJDZWxsQml0OyB9CkBAIC0xMDIsMTIgKzEwMywxMiBAQCBwdWJsaWM6CiAgICAg
Ym9vbCBvdmVycmlkZXNHZXRPd25Qcm9wZXJ0eU5hbWVzKCkgY29uc3QgeyByZXR1cm4gaXNTZXRP
bkZsYWdzMjxPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eU5hbWVzPigpOyB9CiAgICAgYm9vbCBvdmVy
cmlkZXNHZXRPd25TcGVjaWFsUHJvcGVydHlOYW1lcygpIGNvbnN0IHsgcmV0dXJuIGlzU2V0T25G
bGFnczI8T3ZlcnJpZGVzR2V0T3duU3BlY2lhbFByb3BlcnR5TmFtZXM+KCk7IH0KICAgICBib29s
IG92ZXJyaWRlc0FueUZvcm1PZkdldE93blByb3BlcnR5TmFtZXMoKSBjb25zdCB7IHJldHVybiBv
dmVycmlkZXNHZXRPd25Qcm9wZXJ0eU5hbWVzKCkgfHwgb3ZlcnJpZGVzR2V0T3duU3BlY2lhbFBy
b3BlcnR5TmFtZXMoKTsgfQorICAgIGJvb2wgb3ZlcnJpZGVzUHV0KCkgY29uc3QgeyByZXR1cm4g
aXNTZXRPbkZsYWdzMjxPdmVycmlkZXNQdXQ+KCk7IH0KICAgICBib29sIG92ZXJyaWRlc0dldFBy
b3RvdHlwZSgpIGNvbnN0IHsgcmV0dXJuIGlzU2V0T25GbGFnczI8T3ZlcnJpZGVzR2V0UHJvdG90
eXBlPigpOyB9CiAgICAgYm9vbCBwcm9oaWJpdHNQcm9wZXJ0eUNhY2hpbmcoKSBjb25zdCB7IHJl
dHVybiBpc1NldE9uRmxhZ3MyPFByb2hpYml0c1Byb3BlcnR5Q2FjaGluZz4oKTsgfQogICAgIGJv
b2wgZ2V0T3duUHJvcGVydHlTbG90SXNJbXB1cmUoKSBjb25zdCB7IHJldHVybiBpc1NldE9uRmxh
Z3MyPEdldE93blByb3BlcnR5U2xvdElzSW1wdXJlPigpOyB9CiAgICAgYm9vbCBnZXRPd25Qcm9w
ZXJ0eVNsb3RJc0ltcHVyZUZvclByb3BlcnR5QWJzZW5jZSgpIGNvbnN0IHsgcmV0dXJuIGlzU2V0
T25GbGFnczI8R2V0T3duUHJvcGVydHlTbG90SXNJbXB1cmVGb3JQcm9wZXJ0eUFic2VuY2U+KCk7
IH0KICAgICBib29sIGdldE93blByb3BlcnR5U2xvdE1heUJlV3JvbmdBYm91dERvbnRFbnVtKCkg
Y29uc3QgeyByZXR1cm4gaXNTZXRPbkZsYWdzMjxHZXRPd25Qcm9wZXJ0eVNsb3RNYXlCZVdyb25n
QWJvdXREb250RW51bT4oKTsgfQotICAgIGJvb2wgaGFzUHV0UHJvcGVydHlTZWN1cml0eUNoZWNr
KCkgY29uc3QgeyByZXR1cm4gaXNTZXRPbkZsYWdzMjxIYXNQdXRQcm9wZXJ0eVNlY3VyaXR5Q2hl
Y2s+KCk7IH0KICAgICBib29sIG5ld0ltcHVyZVByb3BlcnR5RmlyZXNXYXRjaHBvaW50cygpIGNv
bnN0IHsgcmV0dXJuIGlzU2V0T25GbGFnczI8TmV3SW1wdXJlUHJvcGVydHlGaXJlc1dhdGNocG9p
bnRzPigpOyB9CiAgICAgYm9vbCBpc0ltbXV0YWJsZVByb3RvdHlwZUV4b3RpY09iamVjdCgpIGNv
bnN0IHsgcmV0dXJuIGlzU2V0T25GbGFnczI8SXNJbW11dGFibGVQcm90b3R5cGVFeG90aWNPYmpl
Y3Q+KCk7IH0KICAgICBib29sIGludGVyY2VwdHNHZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4RXZl
bldoZW5MZW5ndGhJc05vdFplcm8oKSBjb25zdCB7IHJldHVybiBpc1NldE9uRmxhZ3MyPEludGVy
Y2VwdHNHZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4RXZlbldoZW5MZW5ndGhJc05vdFplcm8+KCk7
IH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0xvb2t1cC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0xvb2t1cC5oCShyZXZpc2lvbiAy
NzY1ODUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Mb29rdXAuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMjYyLDcwICsyNjIsNiBAQCBpbmxpbmUgYm9vbCByZXBsYWNlU3RhdGljUHJv
cGVydHlTbG90KFZNCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLS8vICdiYXNlJyBtZWFucyB0aGUg
b2JqZWN0IGhvbGRpbmcgdGhlIHByb3BlcnR5IChwb3NzaWJseSBpbiB0aGUgcHJvdG90eXBlIGNo
YWluIG9mIHRoZSBvYmplY3QgcHV0IHdhcyBjYWxsZWQgb24pLgotLy8gJ3RoaXNWYWx1ZScgaXMg
dGhlIG9iamVjdCB0aGF0IHB1dCBpcyBiZWluZyBhcHBsaWVkIHRvIChpbiB0aGUgY2FzZSBvZiBh
IHByb3h5LCB0aGUgcHJveHkgdGFyZ2V0KS4KLS8vICdzbG90LnRoaXNWYWx1ZSgpJyBpcyB0aGUg
b2JqZWN0IHRoZSBwdXQgd2FzIG9yaWdpbmFsbHkgcGVyZm9ybWVkIG9uIChpbiB0aGUgY2FzZSBv
ZiBhIHByb3h5LCB0aGUgcHJveHkgaXRzZWxmKS4KLWlubGluZSBib29sIHB1dEVudHJ5KEpTR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIGNvbnN0IENsYXNzSW5mbyosIGNvbnN0IEhhc2hUYWJs
ZVZhbHVlKiBlbnRyeSwgSlNPYmplY3QqIGJhc2UsIEpTT2JqZWN0KiB0aGlzVmFsdWUsIFByb3Bl
cnR5TmFtZSBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUgdmFsdWUsIFB1dFByb3BlcnR5U2xvdCYgc2xv
dCkKLXsKLSAgICBWTSYgdm0gPSBnZXRWTShnbG9iYWxPYmplY3QpOwotICAgIGF1dG8gc2NvcGUg
PSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLQotICAgIGlmIChlbnRyeS0+YXR0cmlidXRlcygp
ICYgUHJvcGVydHlBdHRyaWJ1dGU6OkJ1aWx0aW5PckZ1bmN0aW9uT3JMYXp5UHJvcGVydHkpIHsK
LSAgICAgICAgaWYgKCEoZW50cnktPmF0dHJpYnV0ZXMoKSAmIFByb3BlcnR5QXR0cmlidXRlOjpS
ZWFkT25seSkpIHsKLSAgICAgICAgICAgIC8vIElmIHRoaXMgaXMgYSBmdW5jdGlvbiBvciBsYXp5
IHByb3BlcnR5IHB1dCB0aGVuIHdlIGp1c3QgZG8gdGhlIHB1dCBiZWNhdXNlCi0gICAgICAgICAg
ICAvLyBsb2dpY2FsbHkgdGhlIG9iamVjdCBhbHJlYWR5IGhhZCB0aGUgcHJvcGVydHksIHNvIHRo
aXMgaXMganVzdCBhIHJlcGxhY2UuCi0gICAgICAgICAgICAvLyBGSVhNRTogdGhpc1ZhbHVlIG1h
eSBiZSBhbiBvYmplY3Qgd2l0aCBub24tZXh0ZW5zaWJsZSBzdHJ1Y3R1cmUgd2UgbXVzdCB0aHJv
dyBmb3IuCi0gICAgICAgICAgICBpZiAoSlNPYmplY3QqIHRoaXNPYmplY3QgPSBqc0R5bmFtaWND
YXN0PEpTT2JqZWN0Kj4odm0sIHRoaXNWYWx1ZSkpCi0gICAgICAgICAgICAgICAgdGhpc09iamVj
dC0+cHV0RGlyZWN0KHZtLCBwcm9wZXJ0eU5hbWUsIHZhbHVlKTsKLSAgICAgICAgICAgIHJldHVy
biB0cnVlOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiB0eXBlRXJyb3IoZ2xvYmFsT2JqZWN0
LCBzY29wZSwgc2xvdC5pc1N0cmljdE1vZGUoKSwgUmVhZG9ubHlQcm9wZXJ0eVdyaXRlRXJyb3Ip
OwotICAgIH0KLQotICAgIGlmIChlbnRyeS0+YXR0cmlidXRlcygpICYgUHJvcGVydHlBdHRyaWJ1
dGU6OkFjY2Vzc29yKQotICAgICAgICByZXR1cm4gdHlwZUVycm9yKGdsb2JhbE9iamVjdCwgc2Nv
cGUsIHNsb3QuaXNTdHJpY3RNb2RlKCksIFJlYWRvbmx5UHJvcGVydHlXcml0ZUVycm9yKTsKLQot
ICAgIGlmICghKGVudHJ5LT5hdHRyaWJ1dGVzKCkgJiBQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVhZE9u
bHkpKSB7Ci0gICAgICAgIEFTU0VSVF9XSVRIX01FU1NBR0UoIShlbnRyeS0+YXR0cmlidXRlcygp
ICYgUHJvcGVydHlBdHRyaWJ1dGU6OkRPTUpJVEF0dHJpYnV0ZSksICJET01KSVRBdHRyaWJ1dGUg
c3VwcG9ydHMgcmVhZG9ubHkgYXR0cmlidXRlcyBjdXJyZW50bHkuIik7Ci0gICAgICAgIGJvb2wg
aXNBY2Nlc3NvciA9IGVudHJ5LT5hdHRyaWJ1dGVzKCkgJiBQcm9wZXJ0eUF0dHJpYnV0ZTo6Q3Vz
dG9tQWNjZXNzb3I7Ci0gICAgICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgb25seSBiZSBjYWNoaW5n
IHRoZXNlIGlmIHdlJ3JlIG5vdCBhbiB1bmNhY2hlYWJsZSBkaWN0aW9uYXJ5OgotICAgICAgICAv
LyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjE1MzQ3Ci0gICAgICAg
IC8vIFdlIG5lZWQgdG8gbWFrZSBzdXJlIHRoYXQgd2UgZGVjaWRlIHRvIGNhY2hlIHRoaXMgcHJv
cGVydHkgYmVmb3JlIHdlIHBvdGVudGlhbGx5IGV4ZWN1dGUgYXJpYml0cmFyeSBKUy4KLSAgICAg
ICAgaWYgKGlzQWNjZXNzb3IpCi0gICAgICAgICAgICBzbG90LnNldEN1c3RvbUFjY2Vzc29yKGJh
c2UsIGVudHJ5LT5wcm9wZXJ0eVB1dHRlcigpKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAg
c2xvdC5zZXRDdXN0b21WYWx1ZShiYXNlLCBlbnRyeS0+cHJvcGVydHlQdXR0ZXIoKSk7Ci0KLSAg
ICAgICAgYXV0byByZXN1bHQgPSBjYWxsQ3VzdG9tU2V0dGVyKGdsb2JhbE9iamVjdCwgZW50cnkt
PnByb3BlcnR5UHV0dGVyKCksIGlzQWNjZXNzb3IsIGJhc2UsIHNsb3QudGhpc1ZhbHVlKCksIHZh
bHVlLCBwcm9wZXJ0eU5hbWUpOwotICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBm
YWxzZSk7Ci0gICAgICAgIGlmIChyZXN1bHQgIT0gVHJpU3RhdGU6OkluZGV0ZXJtaW5hdGUpCi0g
ICAgICAgICAgICByZXR1cm4gcmVzdWx0ID09IFRyaVN0YXRlOjpUcnVlOwotCi0gICAgICAgIC8v
IEZJWE1FOiB0aGlzVmFsdWUgbWF5IGJlIGFuIG9iamVjdCB3aXRoIG5vbi1leHRlbnNpYmxlIHN0
cnVjdHVyZSB3ZSBtdXN0IHRocm93IGZvci4KLSAgICAgICAgaWYgKEpTT2JqZWN0KiB0aGlzT2Jq
ZWN0ID0ganNEeW5hbWljQ2FzdDxKU09iamVjdCo+KHZtLCB0aGlzVmFsdWUpKQotICAgICAgICAg
ICAgdGhpc09iamVjdC0+cHV0RGlyZWN0KHZtLCBwcm9wZXJ0eU5hbWUsIHZhbHVlKTsKLSAgICAg
ICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgcmV0dXJuIHR5cGVFcnJvcihnbG9iYWxPYmpl
Y3QsIHNjb3BlLCBzbG90LmlzU3RyaWN0TW9kZSgpLCBSZWFkb25seVByb3BlcnR5V3JpdGVFcnJv
cik7Ci19Ci0KLS8qKgotICogVGhpcyBvbmUgaXMgZm9yICJwdXQiLgotICogSXQgbG9va3MgdXAg
YSBoYXNoIGVudHJ5IGZvciB0aGUgcHJvcGVydHkgdG8gYmUgc2V0LiAgSWYgYW4gZW50cnkKLSAq
IGlzIGZvdW5kIGl0IHNldHMgdGhlIHZhbHVlIGFuZCByZXR1cm5zIHRydWUsIGVsc2UgaXQgcmV0
dXJucyBmYWxzZS4KLSAqLwotaW5saW5lIGJvb2wgbG9va3VwUHV0KEpTR2xvYmFsT2JqZWN0KiBn
bG9iYWxPYmplY3QsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIEpTT2JqZWN0KiBiYXNlLCBK
U1ZhbHVlIHZhbHVlLCBjb25zdCBIYXNoVGFibGUmIHRhYmxlLCBQdXRQcm9wZXJ0eVNsb3QmIHNs
b3QsIGJvb2wmIHB1dFJlc3VsdCkKLXsKLSAgICBjb25zdCBIYXNoVGFibGVWYWx1ZSogZW50cnkg
PSB0YWJsZS5lbnRyeShwcm9wZXJ0eU5hbWUpOwotCi0gICAgaWYgKCFlbnRyeSkKLSAgICAgICAg
cmV0dXJuIGZhbHNlOwotCi0gICAgcHV0UmVzdWx0ID0gcHV0RW50cnkoZ2xvYmFsT2JqZWN0LCB0
YWJsZS5jbGFzc0ZvclRoaXMsIGVudHJ5LCBiYXNlLCBiYXNlLCBwcm9wZXJ0eU5hbWUsIHZhbHVl
LCBzbG90KTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQogaW5saW5lIHZvaWQgcmVpZnlTdGF0aWNQ
cm9wZXJ0eShWTSYgdm0sIGNvbnN0IENsYXNzSW5mbyogY2xhc3NJbmZvLCBjb25zdCBQcm9wZXJ0
eU5hbWUmIHByb3BlcnR5TmFtZSwgY29uc3QgSGFzaFRhYmxlVmFsdWUmIHZhbHVlLCBKU09iamVj
dCYgdGhpc09iaikKIHsKICAgICBpZiAodmFsdWUuYXR0cmlidXRlcygpICYgUHJvcGVydHlBdHRy
aWJ1dGU6OkJ1aWx0aW4pIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1By
b3BlcnR5U2xvdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1Byb3BlcnR5U2xvdC5oCShyZXZpc2lvbiAyNzY1ODUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9Qcm9wZXJ0eVNsb3QuaAkod29ya2luZyBjb3B5KQpAQCAtNDcsNiArNDcsNyBA
QCBlbnVtIGNsYXNzIFByb3BlcnR5QXR0cmlidXRlIDogdW5zaWduZWQgCiAgICAgQ3VzdG9tVmFs
dWUgICAgICAgPSAxIDw8IDYsCiAgICAgQ3VzdG9tQWNjZXNzb3JPclZhbHVlID0gQ3VzdG9tQWNj
ZXNzb3IgfCBDdXN0b21WYWx1ZSwKICAgICBBY2Nlc3Nvck9yQ3VzdG9tQWNjZXNzb3JPclZhbHVl
ID0gQWNjZXNzb3IgfCBDdXN0b21BY2Nlc3NvciB8IEN1c3RvbVZhbHVlLAorICAgIFJlYWRPbmx5
T3JBY2Nlc3Nvck9yQ3VzdG9tQWNjZXNzb3IgPSBSZWFkT25seSB8IEFjY2Vzc29yIHwgQ3VzdG9t
QWNjZXNzb3IsCiAKICAgICAvLyBUaGluZ3MgdGhhdCBhcmUgdXNlZCBieSBzdGF0aWMgaGFzaHRh
YmxlcyBhcmUgbm90IGluIHRoZSBhdHRyaWJ1dGVzIGJ5dGUgaW4gUHJvcGVydHlNYXBFbnRyeS4K
ICAgICBGdW5jdGlvbiAgICAgICAgICA9IDEgPDwgOCwgIC8vIHByb3BlcnR5IGlzIGEgZnVuY3Rp
b24gLSBvbmx5IHVzZWQgYnkgc3RhdGljIGhhc2h0YWJsZXMKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1Byb3h5T2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9Qcm94eU9iamVjdC5jcHAJKHJldmlzaW9uIDI3NjU4NSkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb3h5T2JqZWN0LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNDY0LDYgKzQ2NCw3IEBAIGJvb2wgUHJveHlPYmplY3Q6OnB1dChKU0NlbGwqIGNl
bGwsIEpTR2wKIHsKICAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CiAgICAgc2xvdC5k
aXNhYmxlQ2FjaGluZygpOworICAgIHNsb3Quc2V0SXNUYWludGVkQnlPcGFxdWVPYmplY3QoKTsK
IAogICAgIFByb3h5T2JqZWN0KiB0aGlzT2JqZWN0ID0ganNDYXN0PFByb3h5T2JqZWN0Kj4oY2Vs
bCk7CiAgICAgYXV0byBwZXJmb3JtRGVmYXVsdFB1dCA9IFsmXSAoKSB7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm94eU9iamVjdC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb3h5T2JqZWN0LmgJKHJldmlzaW9uIDI3NjU4NSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb3h5T2JqZWN0LmgJKHdvcmtpbmcg
Y29weSkKQEAgLTM0LDcgKzM0LDcgQEAgY2xhc3MgUHJveHlPYmplY3QgZmluYWwgOiBwdWJsaWMg
SlNOb25GaQogcHVibGljOgogICAgIHR5cGVkZWYgSlNOb25GaW5hbE9iamVjdCBCYXNlOwogCi0g
ICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVj
dHVyZUZsYWdzIHwgT3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90IHwgT3ZlcnJpZGVzR2V0T3du
UHJvcGVydHlOYW1lcyB8IE92ZXJyaWRlc0dldFByb3RvdHlwZSB8IE92ZXJyaWRlc0dldENhbGxE
YXRhIHwgSW50ZXJjZXB0c0dldE93blByb3BlcnR5U2xvdEJ5SW5kZXhFdmVuV2hlbkxlbmd0aElz
Tm90WmVybyB8IFByb2hpYml0c1Byb3BlcnR5Q2FjaGluZzsKKyAgICBzdGF0aWMgY29uc3RleHBy
IHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxhZ3MgfCBPdmVycmlk
ZXNHZXRPd25Qcm9wZXJ0eVNsb3QgfCBPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eU5hbWVzIHwgT3Zl
cnJpZGVzR2V0UHJvdG90eXBlIHwgT3ZlcnJpZGVzR2V0Q2FsbERhdGEgfCBPdmVycmlkZXNQdXQg
fCBJbnRlcmNlcHRzR2V0T3duUHJvcGVydHlTbG90QnlJbmRleEV2ZW5XaGVuTGVuZ3RoSXNOb3Ra
ZXJvIHwgUHJvaGliaXRzUHJvcGVydHlDYWNoaW5nOwogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUg
Q2VsbFR5cGUsIFN1YnNwYWNlQWNjZXNzIG1vZGU+CiAgICAgc3RhdGljIElzb1N1YnNwYWNlKiBz
dWJzcGFjZUZvcihWTSYgdm0pCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Q
dXRQcm9wZXJ0eVNsb3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9QdXRQcm9wZXJ0eVNsb3QuaAkocmV2aXNpb24gMjc2NTg1KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvUHV0UHJvcGVydHlTbG90LmgJKHdvcmtpbmcgY29weSkKQEAgLTM3
LDcgKzM3LDcgQEAgY2xhc3MgSlNGdW5jdGlvbjsKIGNsYXNzIFB1dFByb3BlcnR5U2xvdCB7CiBw
dWJsaWM6CiAgICAgZW51bSBUeXBlIDogdWludDhfdCB7IFVuY2FjaGFibGUsIEV4aXN0aW5nUHJv
cGVydHksIE5ld1Byb3BlcnR5LCBTZXR0ZXJQcm9wZXJ0eSwgQ3VzdG9tVmFsdWUsIEN1c3RvbUFj
Y2Vzc29yIH07Ci0gICAgZW51bSBDb250ZXh0IHsgVW5rbm93bkNvbnRleHQsIFB1dEJ5SWQsIFB1
dEJ5SWRFdmFsIH07CisgICAgZW51bSBDb250ZXh0IDogdWludDhfdCB7IFVua25vd25Db250ZXh0
LCBQdXRCeUlkLCBQdXRCeUlkRXZhbCwgUmVmbGVjdFNldCB9OwogICAgIHVzaW5nIFB1dFZhbHVl
RnVuYyA9IEpTQzo6UHV0VmFsdWVGdW5jOwogICAgIHVzaW5nIFB1dFZhbHVlRnVuY1dpdGhQdHIg
PSBKU0M6OlB1dFZhbHVlRnVuY1dpdGhQdHI7CiAKQEAgLTQ3LDYgKzQ3LDcgQEAgcHVibGljOgog
ICAgICAgICAsIG1fb2Zmc2V0KGludmFsaWRPZmZzZXQpCiAgICAgICAgICwgbV9pc1N0cmljdE1v
ZGUoaXNTdHJpY3RNb2RlKQogICAgICAgICAsIG1faXNJbml0aWFsaXphdGlvbihpc0luaXRpYWxp
emF0aW9uKQorICAgICAgICAsIG1faXNUYWludGVkQnlPcGFxdWVPYmplY3QoZmFsc2UpCiAgICAg
ICAgICwgbV90eXBlKFVuY2FjaGFibGUpCiAgICAgICAgICwgbV9jb250ZXh0KGNvbnRleHQpCiAg
ICAgICAgICwgbV9jYWNoZWFiaWxpdHkoQ2FjaGluZ0FsbG93ZWQpCkBAIC0xMDQsOSArMTA1LDgg
QEAgcHVibGljOgogICAgICAgICByZXR1cm4gbV9wdXRGdW5jdGlvbjsKICAgICB9CiAKLSAgICBD
b250ZXh0IGNvbnRleHQoKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxDb250ZXh0PihtX2Nv
bnRleHQpOyB9Ci0KICAgICBUeXBlIHR5cGUoKSBjb25zdCB7IHJldHVybiBtX3R5cGU7IH0KKyAg
ICBDb250ZXh0IGNvbnRleHQoKSBjb25zdCB7IHJldHVybiBtX2NvbnRleHQ7IH0KICAgICBKU09i
amVjdCogYmFzZSgpIGNvbnN0IHsgcmV0dXJuIG1fYmFzZTsgfQogICAgIEpTVmFsdWUgdGhpc1Zh
bHVlKCkgY29uc3QgeyByZXR1cm4gbV90aGlzVmFsdWU7IH0KIApAQCAtMTE2LDYgKzExNiw4IEBA
IHB1YmxpYzoKICAgICBib29sIGlzQ2FjaGVhYmxlQ3VzdG9tKCkgY29uc3QgeyByZXR1cm4gaXND
YWNoZWFibGUoKSAmJiAobV90eXBlID09IEN1c3RvbVZhbHVlIHx8IG1fdHlwZSA9PSBDdXN0b21B
Y2Nlc3NvcikgJiYgISFtX3B1dEZ1bmN0aW9uOyB9CiAgICAgYm9vbCBpc0N1c3RvbUFjY2Vzc29y
KCkgY29uc3QgeyByZXR1cm4gaXNDYWNoZWFibGUoKSAmJiBtX3R5cGUgPT0gQ3VzdG9tQWNjZXNz
b3I7IH0KICAgICBib29sIGlzSW5pdGlhbGl6YXRpb24oKSBjb25zdCB7IHJldHVybiBtX2lzSW5p
dGlhbGl6YXRpb247IH0KKyAgICBib29sIGlzVGFpbnRlZEJ5T3BhcXVlT2JqZWN0KCkgY29uc3Qg
eyByZXR1cm4gbV9pc1RhaW50ZWRCeU9wYXF1ZU9iamVjdDsgfQorICAgIHZvaWQgc2V0SXNUYWlu
dGVkQnlPcGFxdWVPYmplY3QoKSB7IG1faXNUYWludGVkQnlPcGFxdWVPYmplY3QgPSB0cnVlOyB9
CiAKICAgICBQcm9wZXJ0eU9mZnNldCBjYWNoZWRPZmZzZXQoKSBjb25zdAogICAgIHsKQEAgLTEz
NSw4ICsxMzcsOSBAQCBwcml2YXRlOgogICAgIFByb3BlcnR5T2Zmc2V0IG1fb2Zmc2V0OwogICAg
IGJvb2wgbV9pc1N0cmljdE1vZGUgOiAxOwogICAgIGJvb2wgbV9pc0luaXRpYWxpemF0aW9uIDog
MTsKKyAgICBib29sIG1faXNUYWludGVkQnlPcGFxdWVPYmplY3QgOiAxOwogICAgIFR5cGUgbV90
eXBlOwotICAgIHVpbnQ4X3QgbV9jb250ZXh0OworICAgIENvbnRleHQgbV9jb250ZXh0OwogICAg
IENhY2hlYWJpbGl0eVR5cGUgbV9jYWNoZWFiaWxpdHk7CiAgICAgRnVuY3Rpb25QdHI8Q3VzdG9t
QWNjZXNzb3JQdHJUYWc+IG1fcHV0RnVuY3Rpb247CiB9OwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvUmVmbGVjdE9iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVmbGVjdE9iamVjdC5jcHAJKHJldmlzaW9uIDI3NjU4NSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZmxlY3RPYmplY3QuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yNjAsNyArMjYwLDcgQEAgSlNDX0RFRklORV9IT1NUX0ZVTkNUSU9OKHJl
ZmxlY3RPYmplY3RTZQogCiAgICAgLy8gRG8gbm90IHJhaXNlIGFueSByZWFkb25seSBlcnJvcnMg
dGhhdCBoYXBwZW4gaW4gc3RyaWN0IG1vZGUuCiAgICAgYm9vbCBzaG91bGRUaHJvd0lmQ2FudFNl
dCA9IGZhbHNlOwotICAgIFB1dFByb3BlcnR5U2xvdCBzbG90KHJlY2VpdmVyLCBzaG91bGRUaHJv
d0lmQ2FudFNldCk7CisgICAgUHV0UHJvcGVydHlTbG90IHNsb3QocmVjZWl2ZXIsIHNob3VsZFRo
cm93SWZDYW50U2V0LCBQdXRQcm9wZXJ0eVNsb3Q6OlJlZmxlY3RTZXQpOwogICAgIFJFTEVBU0Vf
QU5EX1JFVFVSTihzY29wZSwgSlNWYWx1ZTo6ZW5jb2RlKGpzQm9vbGVhbih0YXJnZXRPYmplY3Qt
Pm1ldGhvZFRhYmxlKHZtKS0+cHV0KHRhcmdldE9iamVjdCwgZ2xvYmFsT2JqZWN0LCBwcm9wZXJ0
eU5hbWUsIGNhbGxGcmFtZS0+YXJndW1lbnQoMiksIHNsb3QpKSkpOwogfQogCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBPYmplY3QuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cE9iamVjdC5jcHAJKHJldmlzaW9u
IDI3NjU4NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cE9iamVjdC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTEzNCwxOSArMTM0LDI0IEBAIEpTQ19ERUZJTkVfQ1VTVE9N
X1NFVFRFUihyZWdFeHBPYmplY3RTZXQKIGJvb2wgUmVnRXhwT2JqZWN0OjpwdXQoSlNDZWxsKiBj
ZWxsLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlO
YW1lLCBKU1ZhbHVlIHZhbHVlLCBQdXRQcm9wZXJ0eVNsb3QmIHNsb3QpCiB7CiAgICAgVk0mIHZt
ID0gZ2xvYmFsT2JqZWN0LT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1ND
T1BFKHZtKTsKICAgICBSZWdFeHBPYmplY3QqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8UmVnRXhwT2Jq
ZWN0Kj4oY2VsbCk7CiAKLSAgICBpZiAoVU5MSUtFTFkoaXNUaGlzVmFsdWVBbHRlcmVkKHNsb3Qs
IHRoaXNPYmplY3QpKSkKLSAgICAgICAgcmV0dXJuIG9yZGluYXJ5U2V0U2xvdyhnbG9iYWxPYmpl
Y3QsIHRoaXNPYmplY3QsIHByb3BlcnR5TmFtZSwgdmFsdWUsIHNsb3QudGhpc1ZhbHVlKCksIHNs
b3QuaXNTdHJpY3RNb2RlKCkpOwotCiAgICAgaWYgKHByb3BlcnR5TmFtZSA9PSB2bS5wcm9wZXJ0
eU5hbWVzLT5sYXN0SW5kZXgpIHsKKyAgICAgICAgaWYgKCF0aGlzT2JqZWN0LT5sYXN0SW5kZXhJ
c1dyaXRhYmxlKCkpCisgICAgICAgICAgICByZXR1cm4gdHlwZUVycm9yKGdsb2JhbE9iamVjdCwg
c2NvcGUsIHNsb3QuaXNTdHJpY3RNb2RlKCksIFJlYWRvbmx5UHJvcGVydHlXcml0ZUVycm9yKTsK
KworICAgICAgICBpZiAoVU5MSUtFTFkoc2xvdC50aGlzVmFsdWUoKSAhPSB0aGlzT2JqZWN0KSkK
KyAgICAgICAgICAgIFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwgSlNPYmplY3Q6OmRlZmluZVBy
b3BlcnR5T25SZWNlaXZlcihnbG9iYWxPYmplY3QsIHByb3BlcnR5TmFtZSwgdmFsdWUsIHNsb3Qp
KTsKKwogICAgICAgICBib29sIHJlc3VsdCA9IHRoaXNPYmplY3QtPnNldExhc3RJbmRleChnbG9i
YWxPYmplY3QsIHZhbHVlLCBzbG90LmlzU3RyaWN0TW9kZSgpKTsKKyAgICAgICAgUkVUVVJOX0lG
X0VYQ0VQVElPTihzY29wZSwgZmFsc2UpOwogICAgICAgICBzbG90LnNldEN1c3RvbVZhbHVlKHRo
aXNPYmplY3QsIHNsb3QuaXNTdHJpY3RNb2RlKCkKICAgICAgICAgICAgID8gcmVnRXhwT2JqZWN0
U2V0TGFzdEluZGV4U3RyaWN0CiAgICAgICAgICAgICA6IHJlZ0V4cE9iamVjdFNldExhc3RJbmRl
eE5vblN0cmljdCk7CiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQotICAgIHJldHVybiBC
YXNlOjpwdXQoY2VsbCwgZ2xvYmFsT2JqZWN0LCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCBzbG90KTsK
KyAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIEJhc2U6OnB1dChjZWxsLCBnbG9iYWxPYmpl
Y3QsIHByb3BlcnR5TmFtZSwgdmFsdWUsIHNsb3QpKTsKIH0KIAogSlNWYWx1ZSBSZWdFeHBPYmpl
Y3Q6OmV4ZWMoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNTdHJpbmcqIHN0cmluZykK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cE9iamVjdC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cE9iamVjdC5oCShy
ZXZpc2lvbiAyNzY1ODUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBP
YmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAtMzAsNyArMzAsNyBAQCBuYW1lc3BhY2UgSlNDIHsK
IGNsYXNzIFJlZ0V4cE9iamVjdCBmaW5hbCA6IHB1YmxpYyBKU05vbkZpbmFsT2JqZWN0IHsKIHB1
YmxpYzoKICAgICB1c2luZyBCYXNlID0gSlNOb25GaW5hbE9iamVjdDsKLSAgICBzdGF0aWMgY29u
c3RleHByIHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxhZ3MgfCBP
dmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3QgfCBPdmVycmlkZXNHZXRPd25TcGVjaWFsUHJvcGVy
dHlOYW1lczsKKyAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0g
QmFzZTo6U3RydWN0dXJlRmxhZ3MgfCBPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3QgfCBPdmVy
cmlkZXNHZXRPd25TcGVjaWFsUHJvcGVydHlOYW1lcyB8IE92ZXJyaWRlc1B1dDsKIAogICAgIHRl
bXBsYXRlPHR5cGVuYW1lIENlbGxUeXBlLCBTdWJzcGFjZUFjY2VzcyBtb2RlPgogICAgIHN0YXRp
YyBJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvU3RyaW5nT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9TdHJpbmdPYmplY3QuY3BwCShyZXZpc2lvbiAyNzY1ODUpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJpbmdPYmplY3QuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC02OCwxMSArNjgsMTAgQEAgYm9vbCBTdHJpbmdPYmplY3Q6OnB1dChKU0NlbGwq
IGNlbGwsIEpTRwogCiAgICAgU3RyaW5nT2JqZWN0KiB0aGlzT2JqZWN0ID0ganNDYXN0PFN0cmlu
Z09iamVjdCo+KGNlbGwpOwogCi0gICAgaWYgKFVOTElLRUxZKGlzVGhpc1ZhbHVlQWx0ZXJlZChz
bG90LCB0aGlzT2JqZWN0KSkpIAotICAgICAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIG9y
ZGluYXJ5U2V0U2xvdyhnbG9iYWxPYmplY3QsIHRoaXNPYmplY3QsIHByb3BlcnR5TmFtZSwgdmFs
dWUsIHNsb3QudGhpc1ZhbHVlKCksIHNsb3QuaXNTdHJpY3RNb2RlKCkpKTsKLQogICAgIGlmIChw
cm9wZXJ0eU5hbWUgPT0gdm0ucHJvcGVydHlOYW1lcy0+bGVuZ3RoKQogICAgICAgICByZXR1cm4g
dHlwZUVycm9yKGdsb2JhbE9iamVjdCwgc2NvcGUsIHNsb3QuaXNTdHJpY3RNb2RlKCksIFJlYWRv
bmx5UHJvcGVydHlXcml0ZUVycm9yKTsKKyAgICBpZiAoVU5MSUtFTFkoc2xvdC50aGlzVmFsdWUo
KSAhPSB0aGlzT2JqZWN0KSkKKyAgICAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBKU09i
amVjdDo6cHV0KGNlbGwsIGdsb2JhbE9iamVjdCwgcHJvcGVydHlOYW1lLCB2YWx1ZSwgc2xvdCkp
OwogICAgIGlmIChPcHRpb25hbDx1aW50MzJfdD4gaW5kZXggPSBwYXJzZUluZGV4KHByb3BlcnR5
TmFtZSkpIAogICAgICAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIHB1dEJ5SW5kZXgoY2Vs
bCwgZ2xvYmFsT2JqZWN0LCBpbmRleC52YWx1ZSgpLCB2YWx1ZSwgc2xvdC5pc1N0cmljdE1vZGUo
KSkpOwogICAgIFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwgSlNPYmplY3Q6OnB1dChjZWxsLCBn
bG9iYWxPYmplY3QsIHByb3BlcnR5TmFtZSwgdmFsdWUsIHNsb3QpKTsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cmluZ09iamVjdC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cmluZ09iamVjdC5oCShyZXZpc2lvbiAyNzY1ODUp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJpbmdPYmplY3QuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMjgsNyArMjgsNyBAQCBuYW1lc3BhY2UgSlNDIHsKIGNsYXNzIFN0cmluZ09i
amVjdCA6IHB1YmxpYyBKU1dyYXBwZXJPYmplY3QgewogcHVibGljOgogICAgIHVzaW5nIEJhc2Ug
PSBKU1dyYXBwZXJPYmplY3Q7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1
cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwgT3ZlcnJpZGVzR2V0T3duUHJvcGVydHlT
bG90IHwgT3ZlcnJpZGVzR2V0T3duUHJvcGVydHlOYW1lcyB8IEludGVyY2VwdHNHZXRPd25Qcm9w
ZXJ0eVNsb3RCeUluZGV4RXZlbldoZW5MZW5ndGhJc05vdFplcm87CisgICAgc3RhdGljIGNvbnN0
ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwgT3Zl
cnJpZGVzR2V0T3duUHJvcGVydHlTbG90IHwgT3ZlcnJpZGVzR2V0T3duUHJvcGVydHlOYW1lcyB8
IE92ZXJyaWRlc1B1dCB8IEludGVyY2VwdHNHZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4RXZlbldo
ZW5MZW5ndGhJc05vdFplcm87CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSwgU3Vic3BhY2VBY2Nl
c3MgbW9kZT4KICAgICBzdGF0aWMgSXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cmluZ1Byb3RvdHlwZS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RyaW5nUHJvdG90eXBl
LmNwcAkocmV2aXNpb24gMjc2NTg1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
U3RyaW5nUHJvdG90eXBlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTIxLDkgKzEyMSw5IEBAIFN0
cmluZ1Byb3RvdHlwZTo6U3RyaW5nUHJvdG90eXBlKFZNJiB2bSwKIHsKIH0KIAotdm9pZCBTdHJp
bmdQcm90b3R5cGU6OmZpbmlzaENyZWF0aW9uKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2Jh
bE9iamVjdCwgSlNTdHJpbmcqIG5hbWVBbmRNZXNzYWdlKQordm9pZCBTdHJpbmdQcm90b3R5cGU6
OmZpbmlzaENyZWF0aW9uKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCkKIHsK
LSAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbih2bSwgbmFtZUFuZE1lc3NhZ2UpOworICAgIEJhc2U6
OmZpbmlzaENyZWF0aW9uKHZtLCBqc0VtcHR5U3RyaW5nKHZtKSk7CiAgICAgQVNTRVJUKGluaGVy
aXRzKHZtLCBpbmZvKCkpKTsKIAogICAgIEpTQ19OQVRJVkVfSU5UUklOU0lDX0ZVTkNUSU9OX1dJ
VEhPVVRfVFJBTlNJVElPTih2bS5wcm9wZXJ0eU5hbWVzLT50b1N0cmluZywgc3RyaW5nUHJvdG9G
dW5jVG9TdHJpbmcsIHN0YXRpY19jYXN0PHVuc2lnbmVkPihQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9u
dEVudW0pLCAwLCBTdHJpbmdQcm90b3R5cGVWYWx1ZU9mSW50cmluc2ljKTsKQEAgLTE2NSwxNCAr
MTY1LDEyIEBAIHZvaWQgU3RyaW5nUHJvdG90eXBlOjpmaW5pc2hDcmVhdGlvbihWTSYKICAgICBw
dXREaXJlY3RXaXRob3V0VHJhbnNpdGlvbih2bSwgdm0ucHJvcGVydHlOYW1lcy0+aXRlcmF0b3JT
eW1ib2wsIGl0ZXJhdG9yRnVuY3Rpb24sIHN0YXRpY19jYXN0PHVuc2lnbmVkPihQcm9wZXJ0eUF0
dHJpYnV0ZTo6RG9udEVudW0pKTsKIAogICAgIC8vIFRoZSBjb25zdHJ1Y3RvciB3aWxsIGJlIGFk
ZGVkIGxhdGVyLCBhZnRlciBTdHJpbmdDb25zdHJ1Y3RvciBoYXMgYmVlbiBidWlsdAotICAgIHB1
dERpcmVjdFdpdGhvdXRUcmFuc2l0aW9uKHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5sZW5ndGgsIGpz
TnVtYmVyKDApLCBQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udERlbGV0ZSB8IFByb3BlcnR5QXR0cmli
dXRlOjpSZWFkT25seSB8IFByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSk7CiB9CiAKIFN0cmlu
Z1Byb3RvdHlwZSogU3RyaW5nUHJvdG90eXBlOjpjcmVhdGUoVk0mIHZtLCBKU0dsb2JhbE9iamVj
dCogZ2xvYmFsT2JqZWN0LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKIHsKLSAgICBKU1N0cmluZyog
ZW1wdHkgPSBqc0VtcHR5U3RyaW5nKHZtKTsKICAgICBTdHJpbmdQcm90b3R5cGUqIHByb3RvdHlw
ZSA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPFN0cmluZ1Byb3RvdHlwZT4odm0uaGVhcCkp
IFN0cmluZ1Byb3RvdHlwZSh2bSwgc3RydWN0dXJlKTsKLSAgICBwcm90b3R5cGUtPmZpbmlzaENy
ZWF0aW9uKHZtLCBnbG9iYWxPYmplY3QsIGVtcHR5KTsKKyAgICBwcm90b3R5cGUtPmZpbmlzaENy
ZWF0aW9uKHZtLCBnbG9iYWxPYmplY3QpOwogICAgIHJldHVybiBwcm90b3R5cGU7CiB9CiAKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cmluZ1Byb3RvdHlwZS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cmluZ1Byb3RvdHlwZS5o
CShyZXZpc2lvbiAyNzY1ODUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJp
bmdQcm90b3R5cGUuaAkod29ya2luZyBjb3B5KQpAQCAtNDUsNyArNDUsNyBAQCBwdWJsaWM6CiAK
IHByaXZhdGU6CiAgICAgU3RyaW5nUHJvdG90eXBlKFZNJiwgU3RydWN0dXJlKik7Ci0gICAgdm9p
ZCBmaW5pc2hDcmVhdGlvbihWTSYsIEpTR2xvYmFsT2JqZWN0KiwgSlNTdHJpbmcqKTsKKyAgICB2
b2lkIGZpbmlzaENyZWF0aW9uKFZNJiwgSlNHbG9iYWxPYmplY3QqKTsKIH07CiBTVEFUSUNfQVNT
RVJUX0lTT19TVUJTUEFDRV9TSEFSQUJMRShTdHJpbmdQcm90b3R5cGUsIFN0cmluZ09iamVjdCk7
CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlLmNwcAko
cmV2aXNpb24gMjc2NTg1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0
dXJlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTkwLDExICsxOTAsNiBAQCB2b2lkIFN0cnVjdHVy
ZTo6dmFsaWRhdGVGbGFncygpCiAgICAgaWYgKG92ZXJyaWRlc0dldE93blByb3BlcnR5U2xvdEJ5
SW5kZXgpCiAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHR5cGVJbmZvKCkuaW50ZXJjZXB0c0dldE93
blByb3BlcnR5U2xvdEJ5SW5kZXhFdmVuV2hlbkxlbmd0aElzTm90WmVybygpKTsKIAotICAgIGJv
b2wgb3ZlcnJpZGVzUHV0UHJvcGVydHlTZWN1cml0eUNoZWNrID0KLSAgICAgICAgbWV0aG9kVGFi
bGUuZG9QdXRQcm9wZXJ0eVNlY3VyaXR5Q2hlY2sgIT0gSlNPYmplY3Q6OmRvUHV0UHJvcGVydHlT
ZWN1cml0eUNoZWNrCi0gICAgICAgICYmIG1ldGhvZFRhYmxlLmRvUHV0UHJvcGVydHlTZWN1cml0
eUNoZWNrICE9IEpTQ2VsbDo6ZG9QdXRQcm9wZXJ0eVNlY3VyaXR5Q2hlY2s7Ci0gICAgUkVMRUFT
RV9BU1NFUlQob3ZlcnJpZGVzUHV0UHJvcGVydHlTZWN1cml0eUNoZWNrID09IHR5cGVJbmZvKCku
aGFzUHV0UHJvcGVydHlTZWN1cml0eUNoZWNrKCkpOwotCiAgICAgYm9vbCBvdmVycmlkZXNHZXRP
d25Qcm9wZXJ0eU5hbWVzID0KICAgICAgICAgbWV0aG9kVGFibGUuZ2V0T3duUHJvcGVydHlOYW1l
cyAhPSBKU09iamVjdDo6Z2V0T3duUHJvcGVydHlOYW1lcwogICAgICAgICAmJiBtZXRob2RUYWJs
ZS5nZXRPd25Qcm9wZXJ0eU5hbWVzICE9IEpTQ2VsbDo6Z2V0T3duUHJvcGVydHlOYW1lczsKQEAg
LTIwOSw2ICsyMDQsMTggQEAgdm9pZCBTdHJ1Y3R1cmU6OnZhbGlkYXRlRmxhZ3MoKQogICAgICAg
ICBtZXRob2RUYWJsZS5nZXRQcm90b3R5cGUgIT0gc3RhdGljX2Nhc3Q8TWV0aG9kVGFibGU6Okdl
dFByb3RvdHlwZUZ1bmN0aW9uUHRyPihKU09iamVjdDo6Z2V0UHJvdG90eXBlKQogICAgICAgICAm
JiBtZXRob2RUYWJsZS5nZXRQcm90b3R5cGUgIT0gSlNDZWxsOjpnZXRQcm90b3R5cGU7CiAgICAg
UkVMRUFTRV9BU1NFUlQob3ZlcnJpZGVzR2V0UHJvdG90eXBlID09IHR5cGVJbmZvKCkub3ZlcnJp
ZGVzR2V0UHJvdG90eXBlKCkpOworCisgICAgYm9vbCBvdmVycmlkZXNQdXQgPQorICAgICAgICBt
ZXRob2RUYWJsZS5wdXQgIT0gSlNPYmplY3Q6OnB1dAorICAgICAgICAmJiBtZXRob2RUYWJsZS5w
dXQgIT0gSlNDZWxsOjpwdXQ7CisgICAgUkVMRUFTRV9BU1NFUlQob3ZlcnJpZGVzUHV0ID09IHR5
cGVJbmZvKCkub3ZlcnJpZGVzUHV0KCkpOworCisgICAgYm9vbCBvdmVycmlkZXNEZWZpbmVPd25Q
cm9wZXJ0eSA9CisgICAgICAgIG1ldGhvZFRhYmxlLmRlZmluZU93blByb3BlcnR5ICE9IEpTT2Jq
ZWN0OjpkZWZpbmVPd25Qcm9wZXJ0eQorICAgICAgICAmJiBtZXRob2RUYWJsZS5kZWZpbmVPd25Q
cm9wZXJ0eSAhPSBKU0NlbGw6OmRlZmluZU93blByb3BlcnR5OworCisgICAgaWYgKG92ZXJyaWRl
c0RlZmluZU93blByb3BlcnR5KQorICAgICAgICBSRUxFQVNFX0FTU0VSVChvdmVycmlkZXNQdXQp
OwogfQogI2Vsc2UKIGlubGluZSB2b2lkIFN0cnVjdHVyZTo6dmFsaWRhdGVGbGFncygpIHsgfQpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlLmgJKHJldmlzaW9u
IDI3NjU4NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5oCSh3
b3JraW5nIGNvcHkpCkBAIC0yNjcsNiArMjY3LDExIEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAg
IHJldHVybiB0eXBlSW5mbygpLmdldE93blByb3BlcnR5U2xvdElzSW1wdXJlKCk7CiAgICAgfQor
CisgICAgYm9vbCBoYXNOb25SZWlmaWVkU3RhdGljUHJvcGVydGllcygpIGNvbnN0CisgICAgewor
ICAgICAgICByZXR1cm4gdHlwZUluZm8oKS5oYXNTdGF0aWNQcm9wZXJ0eVRhYmxlKCkgJiYgIXN0
YXRpY1Byb3BlcnRpZXNSZWlmaWVkKCk7CisgICAgfQogICAgIAogICAgIC8vIFR5cGUgYWNjZXNz
b3JzLgogICAgIFR5cGVJbmZvIHR5cGVJbmZvKCkgY29uc3QgeyByZXR1cm4gbV9ibG9iLnR5cGVJ
bmZvKG1fb3V0T2ZMaW5lVHlwZUZsYWdzKTsgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3Rvb2xzL0pTRG9sbGFyVk0uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS90b29scy9KU0RvbGxhclZNLmNwcAkocmV2aXNpb24gMjc2NTg1KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3Rvb2xzL0pTRG9sbGFyVk0uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02ODcsMTEg
KzY4Nyw2IEBAIEpTQ19ERUZJTkVfQ1VTVE9NX0dFVFRFUihydW50aW1lQXJyYXlMZW4KICAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTnVtYmVyKHRoaXNPYmplY3QtPmdldExlbmd0aCgpKSk7
CiB9CiAKLXN0YXRpYyBjb25zdCBzdHJ1Y3QgQ29tcGFjdEhhc2hJbmRleCBzdGF0aWNDdXN0b21B
Y2Nlc3NvclRhYmxlSW5kZXhbMl0gPSB7Ci0gICAgeyAwLCAtMSB9LAotICAgIHsgLTEsIC0xIH0s
Ci19OwotCiBzdGF0aWMgSlNDX0RFQ0xBUkVfQ1VTVE9NX0dFVFRFUih0ZXN0U3RhdGljQWNjZXNz
b3JHZXR0ZXIpOwogc3RhdGljIEpTQ19ERUNMQVJFX0NVU1RPTV9TRVRURVIodGVzdFN0YXRpY0Fj
Y2Vzc29yUHV0dGVyKTsKIApAQCAtNzEyLDE5ICs3MDcsMzYgQEAgSlNDX0RFRklORV9DVVNUT01f
U0VUVEVSKHRlc3RTdGF0aWNBY2NlcwogewogICAgIERvbGxhclZNQXNzZXJ0U2NvcGUgYXNzZXJ0
U2NvcGU7CiAgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOworICAgIGF1dG8gdGhyb3dT
Y29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIAotICAgIEpTT2JqZWN0KiB0aGlz
T2JqZWN0ID0ganNEeW5hbWljQ2FzdDxKU09iamVjdCo+KHZtLCBKU1ZhbHVlOjpkZWNvZGUodGhp
c1ZhbHVlKSk7CisgICAgSlNWYWx1ZSByZWNlaXZlciA9IEpTVmFsdWU6OmRlY29kZSh0aGlzVmFs
dWUpOworICAgIEpTT2JqZWN0KiB0aGlzT2JqZWN0ID0gcmVjZWl2ZXIuaXNPYmplY3QoKSA/IGFz
T2JqZWN0KHJlY2VpdmVyKSA6IHJlY2VpdmVyLnN5bnRoZXNpemVQcm90b3R5cGUoZ2xvYmFsT2Jq
ZWN0KTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGZhbHNlKTsKICAgICBS
RUxFQVNFX0FTU0VSVCh0aGlzT2JqZWN0KTsKIAogICAgIHJldHVybiB0aGlzT2JqZWN0LT5wdXRE
aXJlY3Qodm0sIFByb3BlcnR5TmFtZShJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAidGVzdEZp
ZWxkIikpLCBKU1ZhbHVlOjpkZWNvZGUodmFsdWUpKTsKIH0KIAotc3RhdGljIGNvbnN0IHN0cnVj
dCBIYXNoVGFibGVWYWx1ZSBzdGF0aWNDdXN0b21BY2Nlc3NvclRhYmxlVmFsdWVzWzFdID0gewor
c3RhdGljIGNvbnN0IHN0cnVjdCBDb21wYWN0SGFzaEluZGV4IHN0YXRpY0N1c3RvbUFjY2Vzc29y
VGFibGVJbmRleFs5XSA9IHsKKyAgICB7IC0xLCAtMSB9LAorICAgIHsgLTEsIC0xIH0sCisgICAg
eyAyLCAtMSB9LAorICAgIHsgLTEsIC0xIH0sCisgICAgeyAwLCA4IH0sCisgICAgeyAtMSwgLTEg
fSwKKyAgICB7IC0xLCAtMSB9LAorICAgIHsgLTEsIC0xIH0sCisgICAgeyAxLCAtMSB9LAorfTsK
Kworc3RhdGljIGNvbnN0IHN0cnVjdCBIYXNoVGFibGVWYWx1ZSBzdGF0aWNDdXN0b21BY2Nlc3Nv
clRhYmxlVmFsdWVzWzNdID0gewogICAgIHsgInRlc3RTdGF0aWNBY2Nlc3NvciIsIHN0YXRpY19j
YXN0PHVuc2lnbmVkPihQcm9wZXJ0eUF0dHJpYnV0ZTo6Q3VzdG9tQWNjZXNzb3IpLCBOb0ludHJp
bnNpYywgeyAoaW50cHRyX3Qpc3RhdGljX2Nhc3Q8UHJvcGVydHlTbG90OjpHZXRWYWx1ZUZ1bmM+
KHRlc3RTdGF0aWNBY2Nlc3NvckdldHRlciksIChpbnRwdHJfdClzdGF0aWNfY2FzdDxQdXRQcm9w
ZXJ0eVNsb3Q6OlB1dFZhbHVlRnVuYz4odGVzdFN0YXRpY0FjY2Vzc29yUHV0dGVyKSB9IH0sCisg
ICAgeyAidGVzdFN0YXRpY0FjY2Vzc29yRG9udEVudW0iLCBQcm9wZXJ0eUF0dHJpYnV0ZTo6Q3Vz
dG9tQWNjZXNzb3IgfCBQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0sIE5vSW50cmluc2ljLCB7
IChpbnRwdHJfdClzdGF0aWNfY2FzdDxHZXRWYWx1ZUZ1bmM+KHRlc3RTdGF0aWNBY2Nlc3Nvckdl
dHRlciksIChpbnRwdHJfdClzdGF0aWNfY2FzdDxQdXRWYWx1ZUZ1bmM+KHRlc3RTdGF0aWNBY2Nl
c3NvclB1dHRlcikgfSB9LAorICAgIHsgInRlc3RTdGF0aWNBY2Nlc3NvclJlYWRPbmx5IiwgUHJv
cGVydHlBdHRyaWJ1dGU6OkN1c3RvbUFjY2Vzc29yIHwgUHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRF
bnVtIHwgUHJvcGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5LCBOb0ludHJpbnNpYywgeyAoaW50cHRy
X3Qpc3RhdGljX2Nhc3Q8R2V0VmFsdWVGdW5jPih0ZXN0U3RhdGljQWNjZXNzb3JHZXR0ZXIpLCAw
IH0gfSwKIH07CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgSGFzaFRhYmxlIHN0YXRpY0N1c3RvbUFj
Y2Vzc29yVGFibGUgPQotICAgIHsgMSwgMSwgdHJ1ZSwgbnVsbHB0ciwgc3RhdGljQ3VzdG9tQWNj
ZXNzb3JUYWJsZVZhbHVlcywgc3RhdGljQ3VzdG9tQWNjZXNzb3JUYWJsZUluZGV4IH07CisgICAg
eyAzLCA3LCB0cnVlLCBudWxscHRyLCBzdGF0aWNDdXN0b21BY2Nlc3NvclRhYmxlVmFsdWVzLCBz
dGF0aWNDdXN0b21BY2Nlc3NvclRhYmxlSW5kZXggfTsKIAogY2xhc3MgU3RhdGljQ3VzdG9tQWNj
ZXNzb3IgOiBwdWJsaWMgSlNOb25GaW5hbE9iamVjdCB7CiAgICAgdXNpbmcgQmFzZSA9IEpTTm9u
RmluYWxPYmplY3Q7CkBAIC03ODksMTcgKzgwMSwyNSBAQCBKU0NfREVGSU5FX0NVU1RPTV9TRVRU
RVIodGVzdFN0YXRpY1ZhbHVlCiAgICAgcmV0dXJuIHRoaXNPYmplY3QtPnB1dERpcmVjdCh2bSwg
UHJvcGVydHlOYW1lKElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJ0ZXN0U3RhdGljVmFsdWUi
KSksIEpTVmFsdWU6OmRlY29kZSh2YWx1ZSkpOwogfQogCi1zdGF0aWMgY29uc3Qgc3RydWN0IENv
bXBhY3RIYXNoSW5kZXggc3RhdGljQ3VzdG9tVmFsdWVUYWJsZUluZGV4WzJdID0geworc3RhdGlj
IGNvbnN0IHN0cnVjdCBDb21wYWN0SGFzaEluZGV4IHN0YXRpY0N1c3RvbVZhbHVlVGFibGVJbmRl
eFs4XSA9IHsKKyAgICB7IDEsIC0xIH0sCisgICAgeyAtMSwgLTEgfSwKKyAgICB7IC0xLCAtMSB9
LAorICAgIHsgLTEsIC0xIH0sCisgICAgeyAtMSwgLTEgfSwKKyAgICB7IDIsIC0xIH0sCiAgICAg
eyAwLCAtMSB9LAogICAgIHsgLTEsIC0xIH0sCiB9OwogCi1zdGF0aWMgY29uc3Qgc3RydWN0IEhh
c2hUYWJsZVZhbHVlIHN0YXRpY0N1c3RvbVZhbHVlVGFibGVWYWx1ZXNbMV0gPSB7Ci0gICAgeyAi
dGVzdFN0YXRpY1ZhbHVlIiwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KFByb3BlcnR5QXR0cmlidXRl
OjpDdXN0b21BY2Nlc3NvciksIE5vSW50cmluc2ljLCB7IChpbnRwdHJfdClzdGF0aWNfY2FzdDxQ
cm9wZXJ0eVNsb3Q6OkdldFZhbHVlRnVuYz4odGVzdFN0YXRpY1ZhbHVlR2V0dGVyKSwgKGludHB0
cl90KXN0YXRpY19jYXN0PFB1dFByb3BlcnR5U2xvdDo6UHV0VmFsdWVGdW5jPih0ZXN0U3RhdGlj
VmFsdWVQdXR0ZXIpIH0gfSwKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgSGFzaFRhYmxlVmFsdWUgc3Rh
dGljQ3VzdG9tVmFsdWVUYWJsZVZhbHVlc1szXSA9IHsKKyAgICB7ICJ0ZXN0U3RhdGljVmFsdWUi
LCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oUHJvcGVydHlBdHRyaWJ1dGU6OkN1c3RvbVZhbHVlKSwg
Tm9JbnRyaW5zaWMsIHsgKGludHB0cl90KXN0YXRpY19jYXN0PEdldFZhbHVlRnVuYz4odGVzdFN0
YXRpY1ZhbHVlR2V0dGVyKSwgKGludHB0cl90KXN0YXRpY19jYXN0PFB1dFZhbHVlRnVuYz4odGVz
dFN0YXRpY1ZhbHVlUHV0dGVyKSB9IH0sCisgICAgeyAidGVzdFN0YXRpY1ZhbHVlTm9TZXR0ZXIi
LCBQcm9wZXJ0eUF0dHJpYnV0ZTo6Q3VzdG9tVmFsdWUgfCBQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9u
dEVudW0sIE5vSW50cmluc2ljLCB7IChpbnRwdHJfdClzdGF0aWNfY2FzdDxHZXRWYWx1ZUZ1bmM+
KHRlc3RTdGF0aWNWYWx1ZUdldHRlciksIDAgfSB9LAorICAgIHsgInRlc3RTdGF0aWNWYWx1ZVJl
YWRPbmx5IiwgUHJvcGVydHlBdHRyaWJ1dGU6OkN1c3RvbVZhbHVlIHwgUHJvcGVydHlBdHRyaWJ1
dGU6OkRvbnRFbnVtIHwgUHJvcGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5LCBOb0ludHJpbnNpYywg
eyAoaW50cHRyX3Qpc3RhdGljX2Nhc3Q8R2V0VmFsdWVGdW5jPih0ZXN0U3RhdGljVmFsdWVHZXR0
ZXIpLCAwIH0gfSwKIH07CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgSGFzaFRhYmxlIHN0YXRpY0N1
c3RvbVZhbHVlVGFibGUgPQotICAgIHsgMSwgMSwgdHJ1ZSwgbnVsbHB0ciwgc3RhdGljQ3VzdG9t
VmFsdWVUYWJsZVZhbHVlcywgc3RhdGljQ3VzdG9tVmFsdWVUYWJsZUluZGV4IH07CisgICAgeyAz
LCA3LCB0cnVlLCBudWxscHRyLCBzdGF0aWNDdXN0b21WYWx1ZVRhYmxlVmFsdWVzLCBzdGF0aWND
dXN0b21WYWx1ZVRhYmxlSW5kZXggfTsKIAogY2xhc3MgU3RhdGljQ3VzdG9tVmFsdWUgOiBwdWJs
aWMgSlNOb25GaW5hbE9iamVjdCB7CiAgICAgdXNpbmcgQmFzZSA9IEpTTm9uRmluYWxPYmplY3Q7
CkBAIC04MzcsNiArODU3LDcgQEAgcHVibGljOgogCiBjbGFzcyBPYmplY3REb2luZ1NpZGVFZmZl
Y3RQdXRXaXRob3V0Q29ycmVjdFNsb3RTdGF0dXMgOiBwdWJsaWMgSlNOb25GaW5hbE9iamVjdCB7
CiAgICAgdXNpbmcgQmFzZSA9IEpTTm9uRmluYWxPYmplY3Q7CisgICAgc3RhdGljIGNvbnN0ZXhw
ciB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwgT3ZlcnJp
ZGVzUHV0OwogcHVibGljOgogICAgIHRlbXBsYXRlPHR5cGVuYW1lIENlbGxUeXBlLCBTdWJzcGFj
ZUFjY2Vzcz4KICAgICBzdGF0aWMgQ29tcGxldGVTdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZt
KQpJbmRleDogU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjc2NTg1KQorKysgU291cmNlL1dlYkNvcmUvQ2hh
bmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTIyIEBACisyMDIxLTA0LTI2ICBBbGV4
ZXkgU2h2YXlrYSAgPHNodmFpa2FsZXNoQGdtYWlsLmNvbT4KKworICAgICAgICBbSlNDXSBPcmRp
bmFyeVNldCBzaG91bGQgaW52b2tlIGN1c3RvbSBbW1NldF1dIG1ldGhvZHMKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIxNzkxNgorCisgICAgICAgIFJl
dmlld2VkIGJ5IFl1c3VrZSBTdXp1a2kuCisKKyAgICAgICAgRml4ZXM6CisgICAgICAgICAgMS4g
TGVnYWN5IHBsYXRmb3JtIG9iamVjdCdzIFtbU2V0XV0gbm93IGd1YXJkcyBhZ2FpbnN0IGFsdGVy
ZWQgcmVjZWl2ZXIgWzFdLgorICAgICAgICAgICAgIChhbGlnbnMgd2l0aCBCbGluaykuCisgICAg
ICAgICAgMi4gRGlyZWN0IFtbU2V0XV0gdG8gd2luZG93LiVJbnRlcmZhY2UlIGNvbnN0cnVjdG9y
IG5vdyBwcmVzZXJ2ZXMgRG9udEVudW0gYXR0cmlidXRlIFsyXS4KKyAgICAgICAgICAgICAoYWxp
Z25zIHdpdGggQmxpbmsgYW5kIEdlY2tvKS4KKyAgICAgICAgICAzLiBDcm9zcy1vcmlnaW4gbm9u
LWluZGV4IHB1dCgpIG5vdyB0aHJvd3MgU2VjdXJpdHlFcnJvciBpbnN0ZWFkIG9mIHNpbGVudGx5
IGZhaWxpbmcgWzNdLgorICAgICAgICAgICAgIChhbGlnbnMgd2l0aCBCbGluayBhbmQgR2Vja28p
LgorCisgICAgICAgIFJlZmFjdG9yczoKKyAgICAgICAgICAxLiBTaW1wbGlmaWVzIGNyb3NzLW9y
aWdpbiBKU0RPTVdpbmRvdzo6cHV0KCksIGFsaWduaW5nIGl0IHdpdGggSlNMb2NhdGlvbjo6cHV0
KCkuCisgICAgICAgICAgMi4gUmVwbGFjZXMgbG9va3VwUHV0KCkgd2l0aCBkaXJlY3Qgc2V0dGVy
IGNhbGwgaW4gSlNSZW1vdGVET01XaW5kb3c6OnB1dCgpLgorICAgICAgICAgIDMuIFJlbW92ZXMg
bm93IHVudXNlZCBkb1B1dFByb3BlcnR5U2VjdXJpdHlDaGVjaygpIG1ldGhvZHMuCisKKyAgICAg
ICAgVGVzdHM6IGpzL2RvbS9zY3JpcHQtdGVzdHMvcmVmbGVjdC1zZXQtb250by1kb20uanMKKyAg
ICAgICAgICAgICAgIGltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvV2ViSURML2VjbWFz
Y3JpcHQtYmluZGluZy9pbnRlcmZhY2Utb2JqZWN0LXNldC1yZWNlaXZlci5odG1sCisgICAgICAg
ICAgICAgICBodHRwL3Rlc3RzL3NlY3VyaXR5L2Nyb3NzLWZyYW1lLWFjY2Vzcy1vYmplY3QtZ2V0
UHJvdG90eXBlT2YtaW4tcHV0Lmh0bWwKKworICAgICAgICBbMV0gaHR0cHM6Ly9oZXljYW0uZ2l0
aHViLmlvL3dlYmlkbC8jbGVnYWN5LXBsYXRmb3JtLW9iamVjdC1zZXQgKHN0ZXAgMSkKKyAgICAg
ICAgWzJdIGh0dHBzOi8vaGV5Y2FtLmdpdGh1Yi5pby93ZWJpZGwvI2RlZmluZS10aGUtZ2xvYmFs
LXByb3BlcnR5LXJlZmVyZW5jZXMgKHN0ZXAgMy4xLjMpCisgICAgICAgIFszXSBodHRwczovL2h0
bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS9icm93c2Vycy5odG1sI2Nyb3Nzb3JpZ2luc2V0
LSgtbywtcCwtdiwtcmVjZWl2ZXItKSAoc3RlcCA0KQorCisgICAgICAgICogYmluZGluZ3MvanMv
SlNET01XaW5kb3dDdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNET01XaW5kb3c6OnB1
dCk6CisgICAgICAgIChXZWJDb3JlOjpKU0RPTVdpbmRvdzo6ZG9QdXRQcm9wZXJ0eVNlY3VyaXR5
Q2hlY2spOiBEZWxldGVkLgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTTG9jYXRpb25DdXN0b20u
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNMb2NhdGlvbjo6ZG9QdXRQcm9wZXJ0eVNlY3VyaXR5
Q2hlY2spOiBEZWxldGVkLgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTUmVtb3RlRE9NV2luZG93
Q3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTUmVtb3RlRE9NV2luZG93OjpwdXQpOgor
ICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckpTLnBtOgorICAgICAgICAo
R2VuZXJhdGVQdXQpOgorICAgICAgICAoR2VuZXJhdGVIZWFkZXIpOgorICAgICAgICAqIGJpbmRp
bmdzL3NjcmlwdHMvdGVzdC9KUy8qOiBVcGRhdGVkLgorICAgICAgICAqIGJyaWRnZS9vYmpjL29i
amNfcnVudGltZS5oOgorICAgICAgICAqIGJyaWRnZS9ydW50aW1lX2FycmF5Lmg6CisgICAgICAg
ICogYnJpZGdlL3J1bnRpbWVfb2JqZWN0Lmg6CisKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0RP
TVdpbmRvd0N1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU0RPTVdpbmRvdzo6cHV0KToK
KyAgICAgICAgKFdlYkNvcmU6OkpTRE9NV2luZG93Ojpkb1B1dFByb3BlcnR5U2VjdXJpdHlDaGVj
ayk6IERlbGV0ZWQuCisgICAgICAgICogYmluZGluZ3MvanMvSlNMb2NhdGlvbkN1c3RvbS5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpKU0xvY2F0aW9uOjpkb1B1dFByb3BlcnR5U2VjdXJpdHlDaGVj
ayk6IERlbGV0ZWQuCisgICAgICAgICogYmluZGluZ3MvanMvSlNSZW1vdGVET01XaW5kb3dDdXN0
b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNSZW1vdGVET01XaW5kb3c6OnB1dCk6CisgICAg
ICAgICogYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMucG06CisgICAgICAgIChHZW5l
cmF0ZVB1dCk6CisgICAgICAgIChHZW5lcmF0ZUhlYWRlcik6CisgICAgICAgICogYmluZGluZ3Mv
c2NyaXB0cy90ZXN0L0pTLyo6IFVwZGF0ZWQuCisgICAgICAgICogYnJpZGdlL29iamMvb2JqY19y
dW50aW1lLmg6CisgICAgICAgICogYnJpZGdlL3J1bnRpbWVfYXJyYXkuaDoKKyAgICAgICAgKiBi
cmlkZ2UvcnVudGltZV9vYmplY3QuaDoKKworICAgICAgICAqIGJpbmRpbmdzL2pzL0pTRE9NV2lu
ZG93Q3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTRE9NV2luZG93OjpwdXQpOgorICAg
ICAgICAoV2ViQ29yZTo6SlNET01XaW5kb3c6OmRvUHV0UHJvcGVydHlTZWN1cml0eUNoZWNrKTog
RGVsZXRlZC4KKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0xvY2F0aW9uQ3VzdG9tLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkpTTG9jYXRpb246OmRvUHV0UHJvcGVydHlTZWN1cml0eUNoZWNrKTog
RGVsZXRlZC4KKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU1JlbW90ZURPTVdpbmRvd0N1c3RvbS5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpKU1JlbW90ZURPTVdpbmRvdzo6cHV0KToKKyAgICAgICAg
KiBiaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5wbToKKyAgICAgICAgKEdlbmVyYXRl
UHV0KToKKyAgICAgICAgKEdlbmVyYXRlSGVhZGVyKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3Jp
cHRzL3Rlc3QvSlMvSlNUZXN0RG9tYWluU2VjdXJpdHkuaDoKKyAgICAgICAgKiBiaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvSlMvSlNUZXN0SW5kZXhlZFNldHRlck5vSWRlbnRpZmllci5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpKU1Rlc3RJbmRleGVkU2V0dGVyTm9JZGVudGlmaWVyOjpwdXQpOgorICAg
ICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RJbmRleGVkU2V0dGVyTm9JZGVu
dGlmaWVyLmg6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEluZGV4
ZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RJ
bmRleGVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb246OnB1dCk6CisgICAgICAgICogYmluZGluZ3Mv
c2NyaXB0cy90ZXN0L0pTL0pTVGVzdEluZGV4ZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbi5oOgor
ICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RJbmRleGVkU2V0dGVyV2l0
aElkZW50aWZpZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0SW5kZXhlZFNldHRlcldp
dGhJZGVudGlmaWVyOjpwdXQpOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9K
U1Rlc3RJbmRleGVkU2V0dGVyV2l0aElkZW50aWZpZXIuaDoKKyAgICAgICAgKiBiaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvSlMvSlNUZXN0SW50ZXJmYWNlLmg6CisgICAgICAgICogYmluZGluZ3Mvc2Ny
aXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlck5vSWRlbnRpZmllci5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJOb0lkZW50aWZp
ZXI6OnB1dCk6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVk
QW5kSW5kZXhlZFNldHRlck5vSWRlbnRpZmllci5oOgorICAgICAgICAqIGJpbmRpbmdzL3Njcmlw
dHMvdGVzdC9KUy9KU1Rlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbi5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJUaHJvd2lu
Z0V4Y2VwdGlvbjo6cHV0KToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNU
ZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb24uaDoKKyAgICAgICAgKiBi
aW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyV2l0aElk
ZW50aWZpZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0TmFtZWRBbmRJbmRleGVkU2V0
dGVyV2l0aElkZW50aWZpZXI6OnB1dCk6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L0pTL0pTVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlcldpdGhJZGVudGlmaWVyLmg6CisgICAgICAg
ICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkU2V0dGVyTm9JZGVudGlmaWVy
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdE5hbWVkU2V0dGVyTm9JZGVudGlmaWVyOjpw
dXQpOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZFNldHRl
ck5vSWRlbnRpZmllci5oOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rl
c3ROYW1lZFNldHRlclRocm93aW5nRXhjZXB0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpT
VGVzdE5hbWVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb246OnB1dCk6CisgICAgICAgICogYmluZGlu
Z3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb24uaDoK
KyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRTZXR0ZXJXaXRo
SWRlbnRpZmllci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3ROYW1lZFNldHRlcldpdGhJ
ZGVudGlmaWVyOjpwdXQpOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rl
c3ROYW1lZFNldHRlcldpdGhJZGVudGlmaWVyLmg6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L0pTL0pTVGVzdE5hbWVkU2V0dGVyV2l0aEluZGV4ZWRHZXR0ZXIuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6SlNUZXN0TmFtZWRTZXR0ZXJXaXRoSW5kZXhlZEdldHRlcjo6cHV0KToKKyAg
ICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRTZXR0ZXJXaXRoSW5k
ZXhlZEdldHRlci5oOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RO
YW1lZFNldHRlcldpdGhJbmRleGVkR2V0dGVyQW5kU2V0dGVyLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkpTVGVzdE5hbWVkU2V0dGVyV2l0aEluZGV4ZWRHZXR0ZXJBbmRTZXR0ZXI6OnB1dCk6Cisg
ICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkU2V0dGVyV2l0aElu
ZGV4ZWRHZXR0ZXJBbmRTZXR0ZXIuaDoKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3Qv
SlMvSlNUZXN0TmFtZWRTZXR0ZXJXaXRoTGVnYWN5T3ZlcnJpZGVCdWlsdElucy5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpKU1Rlc3ROYW1lZFNldHRlcldpdGhMZWdhY3lPdmVycmlkZUJ1aWx0SW5z
OjpwdXQpOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZFNl
dHRlcldpdGhMZWdhY3lPdmVycmlkZUJ1aWx0SW5zLmg6CisgICAgICAgICogYmluZGluZ3Mvc2Ny
aXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkU2V0dGVyV2l0aExlZ2FjeVVuZm9yZ2VhYmxlUHJvcGVy
dGllcy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3ROYW1lZFNldHRlcldpdGhMZWdhY3lV
bmZvcmdlYWJsZVByb3BlcnRpZXM6OnB1dCk6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L0pTL0pTVGVzdE5hbWVkU2V0dGVyV2l0aExlZ2FjeVVuZm9yZ2VhYmxlUHJvcGVydGllcy5o
OgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZFNldHRlcldp
dGhMZWdhY3lVbmZvcmdlYWJsZVByb3BlcnRpZXNBbmRMZWdhY3lPdmVycmlkZUJ1aWx0SW5zLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdE5hbWVkU2V0dGVyV2l0aExlZ2FjeVVuZm9yZ2Vh
YmxlUHJvcGVydGllc0FuZExlZ2FjeU92ZXJyaWRlQnVpbHRJbnM6OnB1dCk6CisgICAgICAgICog
YmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkU2V0dGVyV2l0aExlZ2FjeVVuZm9y
Z2VhYmxlUHJvcGVydGllc0FuZExlZ2FjeU92ZXJyaWRlQnVpbHRJbnMuaDoKKyAgICAgICAgKiBi
aW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0UGx1Z2luSW50ZXJmYWNlLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkpTVGVzdFBsdWdpbkludGVyZmFjZTo6cHV0KToKKyAgICAgICAgKiBiaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0UGx1Z2luSW50ZXJmYWNlLmg6CisgICAgICAgICog
YnJpZGdlL29iamMvb2JqY19ydW50aW1lLmg6CisgICAgICAgICogYnJpZGdlL3J1bnRpbWVfYXJy
YXkuaDoKKyAgICAgICAgKiBicmlkZ2UvcnVudGltZV9vYmplY3QuaDoKKwogMjAyMS0wNC0yNiAg
Unlvc3VrZSBOaXdhICA8cm5pd2FAd2Via2l0Lm9yZz4KIAogICAgICAgICBJbXBsZW1lbnQgU2hh
ZG93Um9vdC5wcm90b3R5cGUuZGVsZWdhdGVzRm9jdXMgYXR0cmlidXRlCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTVdpbmRvd0N1c3RvbS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01XaW5kb3dDdXN0b20uY3BwCShyZXZpc2lv
biAyNzY1ODUpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTVdpbmRvd0N1c3Rv
bS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI0OCwyMyArMjQ4LDYgQEAgYm9vbCBKU0RPTVdpbmRv
dzo6Z2V0T3duUHJvcGVydHlTbG90QnlJbgogICAgIHJldHVybiBCYXNlOjpnZXRPd25Qcm9wZXJ0
eVNsb3RCeUluZGV4KHRoaXNPYmplY3QsIGxleGljYWxHbG9iYWxPYmplY3QsIGluZGV4LCBzbG90
KTsKIH0KIAotdm9pZCBKU0RPTVdpbmRvdzo6ZG9QdXRQcm9wZXJ0eVNlY3VyaXR5Q2hlY2soSlNP
YmplY3QqIGNlbGwsIEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBQcm9wZXJ0
eU5hbWUgcHJvcGVydHlOYW1lLCBQdXRQcm9wZXJ0eVNsb3QmKQotewotICAgIFZNJiB2bSA9IGxl
eGljYWxHbG9iYWxPYmplY3QtPnZtKCk7Ci0gICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1df
U0NPUEUodm0pOwotCi0gICAgYXV0byogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0RPTVdpbmRvdyo+
KGNlbGwpOwotCi0gICAgU3RyaW5nIGVycm9yTWVzc2FnZTsKLSAgICBpZiAoIUJpbmRpbmdTZWN1
cml0eTo6c2hvdWxkQWxsb3dBY2Nlc3NUb0RPTVdpbmRvdygqbGV4aWNhbEdsb2JhbE9iamVjdCwg
dGhpc09iamVjdC0+d3JhcHBlZCgpLCBlcnJvck1lc3NhZ2UpKSB7Ci0gICAgICAgIC8vIFdlIG9u
bHkgYWxsb3cgc2V0dGluZyAibG9jYXRpb24iIGF0dHJpYnV0ZSBjcm9zcy1vcmlnaW4uCi0gICAg
ICAgIGlmIChwcm9wZXJ0eU5hbWUgPT0gc3RhdGljX2Nhc3Q8SlNWTUNsaWVudERhdGEqPih2bS5j
bGllbnREYXRhKS0+YnVpbHRpbk5hbWVzKCkubG9jYXRpb25QdWJsaWNOYW1lKCkpCi0gICAgICAg
ICAgICByZXR1cm47Ci0gICAgICAgIHRocm93U2VjdXJpdHlFcnJvcigqbGV4aWNhbEdsb2JhbE9i
amVjdCwgc2NvcGUsIGVycm9yTWVzc2FnZSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci19Ci0K
IGJvb2wgSlNET01XaW5kb3c6OnB1dChKU0NlbGwqIGNlbGwsIEpTR2xvYmFsT2JqZWN0KiBsZXhp
Y2FsR2xvYmFsT2JqZWN0LCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBKU1ZhbHVlIHZhbHVl
LCBQdXRQcm9wZXJ0eVNsb3QmIHNsb3QpCiB7CiAgICAgVk0mIHZtID0gbGV4aWNhbEdsb2JhbE9i
amVjdC0+dm0oKTsKQEAgLTI3MiwxNyArMjU1LDEwIEBAIGJvb2wgSlNET01XaW5kb3c6OnB1dChK
U0NlbGwqIGNlbGwsIEpTR2wKIAogICAgIGF1dG8qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNET01X
aW5kb3cqPihjZWxsKTsKIAotICAgIFN0cmluZyBlcnJvck1lc3NhZ2U7Ci0gICAgaWYgKCFCaW5k
aW5nU2VjdXJpdHk6OnNob3VsZEFsbG93QWNjZXNzVG9ET01XaW5kb3coKmxleGljYWxHbG9iYWxP
YmplY3QsIHRoaXNPYmplY3QtPndyYXBwZWQoKSwgZXJyb3JNZXNzYWdlKSkgeworICAgIGlmIChw
cm9wZXJ0eU5hbWUgIT0gc3RhdGljX2Nhc3Q8SlNWTUNsaWVudERhdGEqPih2bS5jbGllbnREYXRh
KS0+YnVpbHRpbk5hbWVzKCkubG9jYXRpb25QdWJsaWNOYW1lKCkpIHsKICAgICAgICAgLy8gV2Ug
b25seSBhbGxvdyBzZXR0aW5nICJsb2NhdGlvbiIgYXR0cmlidXRlIGNyb3NzLW9yaWdpbi4KLSAg
ICAgICAgaWYgKHByb3BlcnR5TmFtZSA9PSBzdGF0aWNfY2FzdDxKU1ZNQ2xpZW50RGF0YSo+KHZt
LmNsaWVudERhdGEpLT5idWlsdGluTmFtZXMoKS5sb2NhdGlvblB1YmxpY05hbWUoKSkgewotICAg
ICAgICAgICAgYm9vbCBwdXRSZXN1bHQgPSBmYWxzZTsKLSAgICAgICAgICAgIGlmIChsb29rdXBQ
dXQobGV4aWNhbEdsb2JhbE9iamVjdCwgcHJvcGVydHlOYW1lLCB0aGlzT2JqZWN0LCB2YWx1ZSwg
KnNfaW5mby5zdGF0aWNQcm9wSGFzaFRhYmxlLCBzbG90LCBwdXRSZXN1bHQpKQotICAgICAgICAg
ICAgICAgIHJldHVybiBwdXRSZXN1bHQ7CisgICAgICAgIGlmICghQmluZGluZ1NlY3VyaXR5Ojpz
aG91bGRBbGxvd0FjY2Vzc1RvRE9NV2luZG93KGxleGljYWxHbG9iYWxPYmplY3QsIHRoaXNPYmpl
Y3QtPndyYXBwZWQoKSwgVGhyb3dTZWN1cml0eUVycm9yKSkKICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICAgICAgfQotICAgICAgICB0aHJvd1NlY3VyaXR5RXJyb3IoKmxleGljYWxHbG9i
YWxPYmplY3QsIHNjb3BlLCBlcnJvck1lc3NhZ2UpOwotICAgICAgICByZXR1cm4gZmFsc2U7CiAg
ICAgfQogCiAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBCYXNlOjpwdXQodGhpc09iamVj
dCwgbGV4aWNhbEdsb2JhbE9iamVjdCwgcHJvcGVydHlOYW1lLCB2YWx1ZSwgc2xvdCkpOwpJbmRl
eDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNMb2NhdGlvbkN1c3RvbS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNMb2NhdGlvbkN1c3RvbS5jcHAJ
KHJldmlzaW9uIDI3NjU4NSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTG9jYXRp
b25DdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDgsMjMgKzEwOCw2IEBAIGJvb2wgSlNM
b2NhdGlvbjo6Z2V0T3duUHJvcGVydHlTbG90QnlJbmQKICAgICBSRUxFQVNFX0FORF9SRVRVUk4o
c2NvcGUsIEpTT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4KG9iamVjdCwgbGV4aWNh
bEdsb2JhbE9iamVjdCwgaW5kZXgsIHNsb3QpKTsKIH0KIAotdm9pZCBKU0xvY2F0aW9uOjpkb1B1
dFByb3BlcnR5U2VjdXJpdHlDaGVjayhKU09iamVjdCogb2JqZWN0LCBKU0dsb2JhbE9iamVjdCog
bGV4aWNhbEdsb2JhbE9iamVjdCwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgUHV0UHJvcGVy
dHlTbG90JikKLXsKLSAgICBhdXRvKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTTG9jYXRpb24qPihv
YmplY3QpOwotICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygp
KTsKLQotICAgIFZNJiB2bSA9IGxleGljYWxHbG9iYWxPYmplY3QtPnZtKCk7Ci0KLSAgICAvLyBB
bHdheXMgYWxsb3cgYXNzaWduaW5nIHRvIHRoZSB3aG9sZSBsb2NhdGlvbi4KLSAgICAvLyBIb3dl
dmVyLCBhbGxsb3dpbmcgYXNzaWduaW5nIG9mIHBpZWNlcyBtaWdodCBpbmFkdmVydGVudGx5IGRp
c2Nsb3NlIHBhcnRzIG9mIHRoZSBvcmlnaW5hbCBsb2NhdGlvbi4KLSAgICAvLyBTbyBmYWxsIHRo
cm91Z2ggdG8gdGhlIGFjY2VzcyBjaGVjayBmb3IgdGhvc2UuCi0gICAgaWYgKHByb3BlcnR5TmFt
ZSA9PSBzdGF0aWNfY2FzdDxKU1ZNQ2xpZW50RGF0YSo+KHZtLmNsaWVudERhdGEpLT5idWlsdGlu
TmFtZXMoKS5ocmVmUHVibGljTmFtZSgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICAvLyBCbG9j
ayBhY2Nlc3MgYW5kIHRocm93IGlmIHRoZXJlIGlzIGEgc2VjdXJpdHkgZXJyb3IuCi0gICAgQmlu
ZGluZ1NlY3VyaXR5OjpzaG91bGRBbGxvd0FjY2Vzc1RvRE9NV2luZG93KGxleGljYWxHbG9iYWxP
YmplY3QsIHRoaXNPYmplY3QtPndyYXBwZWQoKS53aW5kb3coKSwgVGhyb3dTZWN1cml0eUVycm9y
KTsKLX0KLQogYm9vbCBKU0xvY2F0aW9uOjpwdXQoSlNDZWxsKiBjZWxsLCBKU0dsb2JhbE9iamVj
dCogbGV4aWNhbEdsb2JhbE9iamVjdCwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgSlNWYWx1
ZSB2YWx1ZSwgUHV0UHJvcGVydHlTbG90JiBwdXRQcm9wZXJ0eVNsb3QpCiB7CiAgICAgVk0mIHZt
ID0gbGV4aWNhbEdsb2JhbE9iamVjdC0+dm0oKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2pzL0pTUmVtb3RlRE9NV2luZG93Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU1JlbW90ZURPTVdpbmRvd0N1c3RvbS5jcHAJKHJldmlzaW9u
IDI3NjU4NSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTUmVtb3RlRE9NV2luZG93
Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjgsMTEgKzY4LDEyIEBAIGJvb2wgSlNSZW1v
dGVET01XaW5kb3c6OnB1dChKU0NlbGwqIGNlbGwKIAogICAgIC8vIFdlIG9ubHkgYWxsb3cgc2V0
dGluZyAibG9jYXRpb24iIGF0dHJpYnV0ZSBjcm9zcy1vcmlnaW4uCiAgICAgaWYgKHByb3BlcnR5
TmFtZSA9PSBzdGF0aWNfY2FzdDxKU1ZNQ2xpZW50RGF0YSo+KHZtLmNsaWVudERhdGEpLT5idWls
dGluTmFtZXMoKS5sb2NhdGlvblB1YmxpY05hbWUoKSkgewotICAgICAgICBib29sIHB1dFJlc3Vs
dCA9IGZhbHNlOwotICAgICAgICBpZiAobG9va3VwUHV0KGxleGljYWxHbG9iYWxPYmplY3QsIHBy
b3BlcnR5TmFtZSwgdGhpc09iamVjdCwgdmFsdWUsICpzX2luZm8uc3RhdGljUHJvcEhhc2hUYWJs
ZSwgc2xvdCwgcHV0UmVzdWx0KSkKLSAgICAgICAgICAgIHJldHVybiBwdXRSZXN1bHQ7Ci0gICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgYXV0byogc2V0dGVyID0gc19pbmZvLnN0YXRpY1By
b3BIYXNoVGFibGUtPmVudHJ5KHByb3BlcnR5TmFtZSktPnByb3BlcnR5UHV0dGVyKCk7CisgICAg
ICAgIHNjb3BlLnJlbGVhc2UoKTsKKyAgICAgICAgc2V0dGVyKGxleGljYWxHbG9iYWxPYmplY3Qs
IEpTVmFsdWU6OmVuY29kZShzbG90LnRoaXNWYWx1ZSgpKSwgSlNWYWx1ZTo6ZW5jb2RlKHZhbHVl
KSwgcHJvcGVydHlOYW1lKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQorCiAgICAgdGhy
b3dTZWN1cml0eUVycm9yKCpsZXhpY2FsR2xvYmFsT2JqZWN0LCBzY29wZSwgZXJyb3JNZXNzYWdl
KTsKICAgICByZXR1cm4gZmFsc2U7CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9z
Y3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5wbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5wbQkocmV2aXNpb24gMjc2NTg1KQorKysg
U291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMucG0JKHdvcmtp
bmcgY29weSkKQEAgLTExODEsNiArMTE4MSw4IEBAIHN1YiBHZW5lcmF0ZVB1dAogICAgIHB1c2go
QCRvdXRwdXRBcnJheSwgIntcbiIpOwogICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICBhdXRv
KiB0aGlzT2JqZWN0ID0ganNDYXN0PCR7Y2xhc3NOYW1lfSo+KGNlbGwpO1xuIik7CiAgICAgcHVz
aChAJG91dHB1dEFycmF5LCAiICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVj
dCwgaW5mbygpKTtcblxuIik7CisgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgIGlmIChVTkxJ
S0VMWSh0aGlzT2JqZWN0ICE9IHB1dFByb3BlcnR5U2xvdC50aGlzVmFsdWUoKSkpXG4iKTsKKyAg
ICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAgICAgIHJldHVybiBKU09iamVjdDo6cHV0KHRoaXNP
YmplY3QsIGxleGljYWxHbG9iYWxPYmplY3QsIHByb3BlcnR5TmFtZSwgdmFsdWUsIHB1dFByb3Bl
cnR5U2xvdCk7XG4iKTsKIAogICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICBhdXRvIHRocm93
U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKGxleGljYWxHbG9iYWxPYmplY3QtPnZtKCkpO1xu
XG4iKTsKIApAQCAtMjk1NCwxMSArMjk1Niw2IEBAIHN1YiBHZW5lcmF0ZUhlYWRlcgogICAgICAg
ICAkc3RydWN0dXJlRmxhZ3N7IkpTQzo6SW50ZXJjZXB0c0dldE93blByb3BlcnR5U2xvdEJ5SW5k
ZXhFdmVuV2hlbkxlbmd0aElzTm90WmVybyJ9ID0gMTsKICAgICB9CiAKLSAgICBpZiAoJGludGVy
ZmFjZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57Q2hlY2tTZWN1cml0eX0pIHsKLSAgICAgICAgcHVz
aChAaGVhZGVyQ29udGVudCwgIiAgICBzdGF0aWMgdm9pZCBkb1B1dFByb3BlcnR5U2VjdXJpdHlD
aGVjayhKU0M6OkpTT2JqZWN0KiwgSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6UHJvcGVydHlO
YW1lLCBKU0M6OlB1dFByb3BlcnR5U2xvdCYpO1xuIik7Ci0gICAgICAgICRzdHJ1Y3R1cmVGbGFn
c3siSlNDOjpIYXNQdXRQcm9wZXJ0eVNlY3VyaXR5Q2hlY2sifSA9IDE7Ci0gICAgfQotCiAgICAg
aWYgKCRpbnRlcmZhY2UtPmV4dGVuZGVkQXR0cmlidXRlcy0+e1BsdWdpbn0gfHwgR2V0TmFtZWRT
ZXR0ZXJPcGVyYXRpb24oJGludGVyZmFjZSkpIHsKICAgICAgICAgJHN0cnVjdHVyZUZsYWdzeyJK
U0M6OlByb2hpYml0c1Byb3BlcnR5Q2FjaGluZyJ9ID0gMTsKICAgICB9CkBAIC0yOTcxLDYgKzI5
NjgsNyBAQCBzdWIgR2VuZXJhdGVIZWFkZXIKICAgICBpZiAoSW5zdGFuY2VPdmVycmlkZXNQdXQo
JGludGVyZmFjZSkpIHsKICAgICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIiAgICBzdGF0aWMg
Ym9vbCBwdXQoSlNDOjpKU0NlbGwqLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpQcm9wZXJ0
eU5hbWUsIEpTQzo6SlNWYWx1ZSwgSlNDOjpQdXRQcm9wZXJ0eVNsb3QmKTtcbiIpOwogICAgICAg
ICBwdXNoKEBoZWFkZXJDb250ZW50LCAiICAgIHN0YXRpYyBib29sIHB1dEJ5SW5kZXgoSlNDOjpK
U0NlbGwqLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiwgdW5zaWduZWQgcHJvcGVydHlOYW1lLCBKU0M6
OkpTVmFsdWUsIGJvb2wgc2hvdWxkVGhyb3cpO1xuIik7CisgICAgICAgICRzdHJ1Y3R1cmVGbGFn
c3siSlNDOjpPdmVycmlkZXNQdXQifSA9IDE7CiAgICAgfQogICAgIAogICAgIGlmIChJbnN0YW5j
ZU92ZXJyaWRlc0RlZmluZU93blByb3BlcnR5KCRpbnRlcmZhY2UpKSB7CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0RG9tYWluU2VjdXJpdHkuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNU
ZXN0RG9tYWluU2VjdXJpdHkuaAkocmV2aXNpb24gMjc2NTg1KQorKysgU291cmNlL1dlYkNvcmUv
YmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdERvbWFpblNlY3VyaXR5LmgJKHdvcmtpbmcg
Y29weSkKQEAgLTM5LDcgKzM5LDYgQEAgcHVibGljOgogICAgIHN0YXRpYyBKU0M6OkpTT2JqZWN0
KiBjcmVhdGVQcm90b3R5cGUoSlNDOjpWTSYsIEpTRE9NR2xvYmFsT2JqZWN0Jik7CiAgICAgc3Rh
dGljIEpTQzo6SlNPYmplY3QqIHByb3RvdHlwZShKU0M6OlZNJiwgSlNET01HbG9iYWxPYmplY3Qm
KTsKICAgICBzdGF0aWMgVGVzdERvbWFpblNlY3VyaXR5KiB0b1dyYXBwZWQoSlNDOjpWTSYsIEpT
Qzo6SlNWYWx1ZSk7Ci0gICAgc3RhdGljIHZvaWQgZG9QdXRQcm9wZXJ0eVNlY3VyaXR5Q2hlY2so
SlNDOjpKU09iamVjdCosIEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OlByb3BlcnR5TmFtZSwg
SlNDOjpQdXRQcm9wZXJ0eVNsb3QmKTsKICAgICBzdGF0aWMgdm9pZCBkZXN0cm95KEpTQzo6SlND
ZWxsKik7CiAKICAgICBERUNMQVJFX0lORk87CkBAIC01OSw3ICs1OCw3IEBAIHB1YmxpYzoKICAg
ICBzdGF0aWMgSlNDOjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3JJbXBsKEpTQzo6Vk0mIHZtKTsK
ICAgICBzdGF0aWMgdm9pZCBhbmFseXplSGVhcChKU0NlbGwqLCBKU0M6OkhlYXBBbmFseXplciYp
OwogcHVibGljOgotICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3Mg
PSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8IEpTQzo6SGFzUHV0UHJvcGVydHlTZWN1cml0eUNoZWNr
IHwgSlNDOjpIYXNTdGF0aWNQcm9wZXJ0eVRhYmxlOworICAgIHN0YXRpYyBjb25zdGV4cHIgdW5z
aWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8IEpTQzo6SGFzU3Rh
dGljUHJvcGVydHlUYWJsZTsKIHByb3RlY3RlZDoKICAgICBKU1Rlc3REb21haW5TZWN1cml0eShK
U0M6OlN0cnVjdHVyZSosIEpTRE9NR2xvYmFsT2JqZWN0JiwgUmVmPFRlc3REb21haW5TZWN1cml0
eT4mJik7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9K
U1Rlc3RJbmRleGVkU2V0dGVyTm9JZGVudGlmaWVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0SW5kZXhlZFNldHRlck5vSWRl
bnRpZmllci5jcHAJKHJldmlzaW9uIDI3NjU4NSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RJbmRleGVkU2V0dGVyTm9JZGVudGlmaWVyLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMTk5LDYgKzE5OSw4IEBAIGJvb2wgSlNUZXN0SW5kZXhlZFNldHRlck5v
SWRlbnRpZmllcjo6cHUKICAgICBhdXRvKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTVGVzdEluZGV4
ZWRTZXR0ZXJOb0lkZW50aWZpZXIqPihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVS
SVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CiAKKyAgICBpZiAoVU5MSUtFTFkodGhpc09iamVjdCAh
PSBwdXRQcm9wZXJ0eVNsb3QudGhpc1ZhbHVlKCkpKQorICAgICAgICByZXR1cm4gSlNPYmplY3Q6
OnB1dCh0aGlzT2JqZWN0LCBsZXhpY2FsR2xvYmFsT2JqZWN0LCBwcm9wZXJ0eU5hbWUsIHZhbHVl
LCBwdXRQcm9wZXJ0eVNsb3QpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1df
U0NPUEUobGV4aWNhbEdsb2JhbE9iamVjdC0+dm0oKSk7CiAKICAgICBpZiAoYXV0byBpbmRleCA9
IHBhcnNlSW5kZXgocHJvcGVydHlOYW1lKSkgewpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGlu
Z3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEluZGV4ZWRTZXR0ZXJOb0lkZW50aWZpZXIuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0
SW5kZXhlZFNldHRlck5vSWRlbnRpZmllci5oCShyZXZpc2lvbiAyNzY1ODUpCisrKyBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0SW5kZXhlZFNldHRlck5vSWRl
bnRpZmllci5oCSh3b3JraW5nIGNvcHkpCkBAIC02NCw3ICs2NCw3IEBAIHB1YmxpYzoKICAgICBz
dGF0aWMgSlNDOjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3JJbXBsKEpTQzo6Vk0mIHZtKTsKICAg
ICBzdGF0aWMgdm9pZCBhbmFseXplSGVhcChKU0NlbGwqLCBKU0M6OkhlYXBBbmFseXplciYpOwog
cHVibGljOgotICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBC
YXNlOjpTdHJ1Y3R1cmVGbGFncyB8IEpTQzo6SW50ZXJjZXB0c0dldE93blByb3BlcnR5U2xvdEJ5
SW5kZXhFdmVuV2hlbkxlbmd0aElzTm90WmVybyB8IEpTQzo6T3ZlcnJpZGVzR2V0T3duUHJvcGVy
dHlOYW1lcyB8IEpTQzo6T3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90OworICAgIHN0YXRpYyBj
b25zdGV4cHIgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8
IEpTQzo6SW50ZXJjZXB0c0dldE93blByb3BlcnR5U2xvdEJ5SW5kZXhFdmVuV2hlbkxlbmd0aElz
Tm90WmVybyB8IEpTQzo6T3ZlcnJpZGVzR2V0T3duUHJvcGVydHlOYW1lcyB8IEpTQzo6T3ZlcnJp
ZGVzR2V0T3duUHJvcGVydHlTbG90IHwgSlNDOjpPdmVycmlkZXNQdXQ7CiBwcm90ZWN0ZWQ6CiAg
ICAgSlNUZXN0SW5kZXhlZFNldHRlck5vSWRlbnRpZmllcihKU0M6OlN0cnVjdHVyZSosIEpTRE9N
R2xvYmFsT2JqZWN0JiwgUmVmPFRlc3RJbmRleGVkU2V0dGVyTm9JZGVudGlmaWVyPiYmKTsKIApJ
bmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEluZGV4
ZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEluZGV4ZWRTZXR0ZXJUaHJvd2luZ0V4
Y2VwdGlvbi5jcHAJKHJldmlzaW9uIDI3NjU4NSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RJbmRleGVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb24uY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xOTksNiArMTk5LDggQEAgYm9vbCBKU1Rlc3RJbmRleGVkU2V0
dGVyVGhyb3dpbmdFeGNlcHRpbwogICAgIGF1dG8qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNUZXN0
SW5kZXhlZFNldHRlclRocm93aW5nRXhjZXB0aW9uKj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09C
SkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwogCisgICAgaWYgKFVOTElLRUxZKHRo
aXNPYmplY3QgIT0gcHV0UHJvcGVydHlTbG90LnRoaXNWYWx1ZSgpKSkKKyAgICAgICAgcmV0dXJu
IEpTT2JqZWN0OjpwdXQodGhpc09iamVjdCwgbGV4aWNhbEdsb2JhbE9iamVjdCwgcHJvcGVydHlO
YW1lLCB2YWx1ZSwgcHV0UHJvcGVydHlTbG90KTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNM
QVJFX1RIUk9XX1NDT1BFKGxleGljYWxHbG9iYWxPYmplY3QtPnZtKCkpOwogCiAgICAgaWYgKGF1
dG8gaW5kZXggPSBwYXJzZUluZGV4KHByb3BlcnR5TmFtZSkpIHsKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RJbmRleGVkU2V0dGVyVGhyb3dpbmdF
eGNlcHRpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRz
L3Rlc3QvSlMvSlNUZXN0SW5kZXhlZFNldHRlclRocm93aW5nRXhjZXB0aW9uLmgJKHJldmlzaW9u
IDI3NjU4NSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rl
c3RJbmRleGVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb24uaAkod29ya2luZyBjb3B5KQpAQCAtNjQs
NyArNjQsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIEpTQzo6SXNvU3Vic3BhY2UqIHN1YnNwYWNl
Rm9ySW1wbChKU0M6OlZNJiB2bSk7CiAgICAgc3RhdGljIHZvaWQgYW5hbHl6ZUhlYXAoSlNDZWxs
KiwgSlNDOjpIZWFwQW5hbHl6ZXImKTsKIHB1YmxpYzoKLSAgICBzdGF0aWMgY29uc3RleHByIHVu
c2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxhZ3MgfCBKU0M6OkludGVy
Y2VwdHNHZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4RXZlbldoZW5MZW5ndGhJc05vdFplcm8gfCBK
U0M6Ok92ZXJyaWRlc0dldE93blByb3BlcnR5TmFtZXMgfCBKU0M6Ok92ZXJyaWRlc0dldE93blBy
b3BlcnR5U2xvdDsKKyAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdz
ID0gQmFzZTo6U3RydWN0dXJlRmxhZ3MgfCBKU0M6OkludGVyY2VwdHNHZXRPd25Qcm9wZXJ0eVNs
b3RCeUluZGV4RXZlbldoZW5MZW5ndGhJc05vdFplcm8gfCBKU0M6Ok92ZXJyaWRlc0dldE93blBy
b3BlcnR5TmFtZXMgfCBKU0M6Ok92ZXJyaWRlc0dldE93blByb3BlcnR5U2xvdCB8IEpTQzo6T3Zl
cnJpZGVzUHV0OwogcHJvdGVjdGVkOgogICAgIEpTVGVzdEluZGV4ZWRTZXR0ZXJUaHJvd2luZ0V4
Y2VwdGlvbihKU0M6OlN0cnVjdHVyZSosIEpTRE9NR2xvYmFsT2JqZWN0JiwgUmVmPFRlc3RJbmRl
eGVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb24+JiYpOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0SW5kZXhlZFNldHRlcldpdGhJZGVudGlmaWVy
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3Qv
SlMvSlNUZXN0SW5kZXhlZFNldHRlcldpdGhJZGVudGlmaWVyLmNwcAkocmV2aXNpb24gMjc2NTg1
KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEluZGV4
ZWRTZXR0ZXJXaXRoSWRlbnRpZmllci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIwOCw2ICsyMDgs
OCBAQCBib29sIEpTVGVzdEluZGV4ZWRTZXR0ZXJXaXRoSWRlbnRpZmllcjo6CiAgICAgYXV0byog
dGhpc09iamVjdCA9IGpzQ2FzdDxKU1Rlc3RJbmRleGVkU2V0dGVyV2l0aElkZW50aWZpZXIqPihj
ZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7
CiAKKyAgICBpZiAoVU5MSUtFTFkodGhpc09iamVjdCAhPSBwdXRQcm9wZXJ0eVNsb3QudGhpc1Zh
bHVlKCkpKQorICAgICAgICByZXR1cm4gSlNPYmplY3Q6OnB1dCh0aGlzT2JqZWN0LCBsZXhpY2Fs
R2xvYmFsT2JqZWN0LCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCBwdXRQcm9wZXJ0eVNsb3QpOwogICAg
IGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUobGV4aWNhbEdsb2JhbE9iamVj
dC0+dm0oKSk7CiAKICAgICBpZiAoYXV0byBpbmRleCA9IHBhcnNlSW5kZXgocHJvcGVydHlOYW1l
KSkgewpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVz
dEluZGV4ZWRTZXR0ZXJXaXRoSWRlbnRpZmllci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RJbmRleGVkU2V0dGVyV2l0aElkZW50
aWZpZXIuaAkocmV2aXNpb24gMjc2NTg1KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2Ny
aXB0cy90ZXN0L0pTL0pTVGVzdEluZGV4ZWRTZXR0ZXJXaXRoSWRlbnRpZmllci5oCSh3b3JraW5n
IGNvcHkpCkBAIC02NCw3ICs2NCw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgSlNDOjpJc29TdWJz
cGFjZSogc3Vic3BhY2VGb3JJbXBsKEpTQzo6Vk0mIHZtKTsKICAgICBzdGF0aWMgdm9pZCBhbmFs
eXplSGVhcChKU0NlbGwqLCBKU0M6OkhlYXBBbmFseXplciYpOwogcHVibGljOgotICAgIHN0YXRp
YyBjb25zdGV4cHIgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFn
cyB8IEpTQzo6SW50ZXJjZXB0c0dldE93blByb3BlcnR5U2xvdEJ5SW5kZXhFdmVuV2hlbkxlbmd0
aElzTm90WmVybyB8IEpTQzo6T3ZlcnJpZGVzR2V0T3duUHJvcGVydHlOYW1lcyB8IEpTQzo6T3Zl
cnJpZGVzR2V0T3duUHJvcGVydHlTbG90OworICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQg
U3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8IEpTQzo6SW50ZXJjZXB0c0dl
dE93blByb3BlcnR5U2xvdEJ5SW5kZXhFdmVuV2hlbkxlbmd0aElzTm90WmVybyB8IEpTQzo6T3Zl
cnJpZGVzR2V0T3duUHJvcGVydHlOYW1lcyB8IEpTQzo6T3ZlcnJpZGVzR2V0T3duUHJvcGVydHlT
bG90IHwgSlNDOjpPdmVycmlkZXNQdXQ7CiBwcm90ZWN0ZWQ6CiAgICAgSlNUZXN0SW5kZXhlZFNl
dHRlcldpdGhJZGVudGlmaWVyKEpTQzo6U3RydWN0dXJlKiwgSlNET01HbG9iYWxPYmplY3QmLCBS
ZWY8VGVzdEluZGV4ZWRTZXR0ZXJXaXRoSWRlbnRpZmllcj4mJik7CiAKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RJbnRlcmZhY2UuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0SW50
ZXJmYWNlLmgJKHJldmlzaW9uIDI3NjU4NSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Nj
cmlwdHMvdGVzdC9KUy9KU1Rlc3RJbnRlcmZhY2UuaAkod29ya2luZyBjb3B5KQpAQCAtODMsNiAr
ODMsOCBAQCBwdWJsaWM6CiAjaWYgRU5BQkxFKENvbmRpdGlvbjExKSB8fCBFTkFCTEUoQ29uZGl0
aW9uMTIpCiAgICAgSlNDOjpKU1ZhbHVlIHN1cHBsZW1lbnRhbE1ldGhvZDMoSlNDOjpKU0dsb2Jh
bE9iamVjdCYsIEpTQzo6Q2FsbEZyYW1lJik7CiAjZW5kaWYKK3B1YmxpYzoKKyAgICBzdGF0aWMg
Y29uc3RleHByIHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxhZ3Mg
fCBKU0M6Ok92ZXJyaWRlc1B1dDsKIHByb3RlY3RlZDoKICAgICBKU1Rlc3RJbnRlcmZhY2UoSlND
OjpTdHJ1Y3R1cmUqLCBKU0RPTUdsb2JhbE9iamVjdCYsIFJlZjxUZXN0SW50ZXJmYWNlPiYmKTsK
IApJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5h
bWVkQW5kSW5kZXhlZFNldHRlck5vSWRlbnRpZmllci5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkQW5kSW5kZXhlZFNl
dHRlck5vSWRlbnRpZmllci5jcHAJKHJldmlzaW9uIDI3NjU4NSkKKysrIFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJOb0lk
ZW50aWZpZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMjUsNiArMjI1LDggQEAgYm9vbCBKU1Rl
c3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJOb0lkZW50aQogICAgIGF1dG8qIHRoaXNPYmplY3QgPSBq
c0Nhc3Q8SlNUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyTm9JZGVudGlmaWVyKj4oY2VsbCk7CiAg
ICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwogCisgICAg
aWYgKFVOTElLRUxZKHRoaXNPYmplY3QgIT0gcHV0UHJvcGVydHlTbG90LnRoaXNWYWx1ZSgpKSkK
KyAgICAgICAgcmV0dXJuIEpTT2JqZWN0OjpwdXQodGhpc09iamVjdCwgbGV4aWNhbEdsb2JhbE9i
amVjdCwgcHJvcGVydHlOYW1lLCB2YWx1ZSwgcHV0UHJvcGVydHlTbG90KTsKICAgICBhdXRvIHRo
cm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKGxleGljYWxHbG9iYWxPYmplY3QtPnZtKCkp
OwogCiAgICAgaWYgKGF1dG8gaW5kZXggPSBwYXJzZUluZGV4KHByb3BlcnR5TmFtZSkpIHsKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZEFu
ZEluZGV4ZWRTZXR0ZXJOb0lkZW50aWZpZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyTm9J
ZGVudGlmaWVyLmgJKHJldmlzaW9uIDI3NjU4NSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJOb0lkZW50aWZpZXIu
aAkod29ya2luZyBjb3B5KQpAQCAtNjQsNyArNjQsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIEpT
Qzo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9ySW1wbChKU0M6OlZNJiB2bSk7CiAgICAgc3RhdGlj
IHZvaWQgYW5hbHl6ZUhlYXAoSlNDZWxsKiwgSlNDOjpIZWFwQW5hbHl6ZXImKTsKIHB1YmxpYzoK
LSAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3Ry
dWN0dXJlRmxhZ3MgfCBKU0M6OkdldE93blByb3BlcnR5U2xvdElzSW1wdXJlRm9yUHJvcGVydHlB
YnNlbmNlIHwgSlNDOjpJbnRlcmNlcHRzR2V0T3duUHJvcGVydHlTbG90QnlJbmRleEV2ZW5XaGVu
TGVuZ3RoSXNOb3RaZXJvIHwgSlNDOjpPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eU5hbWVzIHwgSlND
OjpPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3QgfCBKU0M6OlByb2hpYml0c1Byb3BlcnR5Q2Fj
aGluZzsKKyAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFz
ZTo6U3RydWN0dXJlRmxhZ3MgfCBKU0M6OkdldE93blByb3BlcnR5U2xvdElzSW1wdXJlRm9yUHJv
cGVydHlBYnNlbmNlIHwgSlNDOjpJbnRlcmNlcHRzR2V0T3duUHJvcGVydHlTbG90QnlJbmRleEV2
ZW5XaGVuTGVuZ3RoSXNOb3RaZXJvIHwgSlNDOjpPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eU5hbWVz
IHwgSlNDOjpPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3QgfCBKU0M6Ok92ZXJyaWRlc1B1dCB8
IEpTQzo6UHJvaGliaXRzUHJvcGVydHlDYWNoaW5nOwogcHJvdGVjdGVkOgogICAgIEpTVGVzdE5h
bWVkQW5kSW5kZXhlZFNldHRlck5vSWRlbnRpZmllcihKU0M6OlN0cnVjdHVyZSosIEpTRE9NR2xv
YmFsT2JqZWN0JiwgUmVmPFRlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJOb0lkZW50aWZpZXI+JiYp
OwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0
TmFtZWRBbmRJbmRleGVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb24uY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZEFuZElu
ZGV4ZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbi5jcHAJKHJldmlzaW9uIDI3NjU4NSkKKysrIFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZEFuZEluZGV4
ZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIyNSw2ICsy
MjUsOCBAQCBib29sIEpTVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlclRocm93aW5nCiAgICAgYXV0
byogdGhpc09iamVjdCA9IGpzQ2FzdDxKU1Rlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJUaHJvd2lu
Z0V4Y2VwdGlvbio+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09i
amVjdCwgaW5mbygpKTsKIAorICAgIGlmIChVTkxJS0VMWSh0aGlzT2JqZWN0ICE9IHB1dFByb3Bl
cnR5U2xvdC50aGlzVmFsdWUoKSkpCisgICAgICAgIHJldHVybiBKU09iamVjdDo6cHV0KHRoaXNP
YmplY3QsIGxleGljYWxHbG9iYWxPYmplY3QsIHByb3BlcnR5TmFtZSwgdmFsdWUsIHB1dFByb3Bl
cnR5U2xvdCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRShsZXhp
Y2FsR2xvYmFsT2JqZWN0LT52bSgpKTsKIAogICAgIGlmIChhdXRvIGluZGV4ID0gcGFyc2VJbmRl
eChwcm9wZXJ0eU5hbWUpKSB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRz
L3Rlc3QvSlMvSlNUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb24uaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNU
ZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb24uaAkocmV2aXNpb24gMjc2
NTg1KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5h
bWVkQW5kSW5kZXhlZFNldHRlclRocm93aW5nRXhjZXB0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAg
LTY0LDcgKzY0LDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBKU0M6Oklzb1N1YnNwYWNlKiBzdWJz
cGFjZUZvckltcGwoSlNDOjpWTSYgdm0pOwogICAgIHN0YXRpYyB2b2lkIGFuYWx5emVIZWFwKEpT
Q2VsbCosIEpTQzo6SGVhcEFuYWx5emVyJik7CiBwdWJsaWM6Ci0gICAgc3RhdGljIGNvbnN0ZXhw
ciB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwgSlNDOjpH
ZXRPd25Qcm9wZXJ0eVNsb3RJc0ltcHVyZUZvclByb3BlcnR5QWJzZW5jZSB8IEpTQzo6SW50ZXJj
ZXB0c0dldE93blByb3BlcnR5U2xvdEJ5SW5kZXhFdmVuV2hlbkxlbmd0aElzTm90WmVybyB8IEpT
Qzo6T3ZlcnJpZGVzR2V0T3duUHJvcGVydHlOYW1lcyB8IEpTQzo6T3ZlcnJpZGVzR2V0T3duUHJv
cGVydHlTbG90IHwgSlNDOjpQcm9oaWJpdHNQcm9wZXJ0eUNhY2hpbmc7CisgICAgc3RhdGljIGNv
bnN0ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwg
SlNDOjpHZXRPd25Qcm9wZXJ0eVNsb3RJc0ltcHVyZUZvclByb3BlcnR5QWJzZW5jZSB8IEpTQzo6
SW50ZXJjZXB0c0dldE93blByb3BlcnR5U2xvdEJ5SW5kZXhFdmVuV2hlbkxlbmd0aElzTm90WmVy
byB8IEpTQzo6T3ZlcnJpZGVzR2V0T3duUHJvcGVydHlOYW1lcyB8IEpTQzo6T3ZlcnJpZGVzR2V0
T3duUHJvcGVydHlTbG90IHwgSlNDOjpPdmVycmlkZXNQdXQgfCBKU0M6OlByb2hpYml0c1Byb3Bl
cnR5Q2FjaGluZzsKIHByb3RlY3RlZDoKICAgICBKU1Rlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJU
aHJvd2luZ0V4Y2VwdGlvbihKU0M6OlN0cnVjdHVyZSosIEpTRE9NR2xvYmFsT2JqZWN0JiwgUmVm
PFRlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbj4mJik7CiAKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZEFuZElu
ZGV4ZWRTZXR0ZXJXaXRoSWRlbnRpZmllci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlcldp
dGhJZGVudGlmaWVyLmNwcAkocmV2aXNpb24gMjc2NTg1KQorKysgU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlcldpdGhJZGVu
dGlmaWVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjM2LDYgKzIzNiw4IEBAIGJvb2wgSlNUZXN0
TmFtZWRBbmRJbmRleGVkU2V0dGVyV2l0aElkZW4KICAgICBhdXRvKiB0aGlzT2JqZWN0ID0ganND
YXN0PEpTVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlcldpdGhJZGVudGlmaWVyKj4oY2VsbCk7CiAg
ICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwogCisgICAg
aWYgKFVOTElLRUxZKHRoaXNPYmplY3QgIT0gcHV0UHJvcGVydHlTbG90LnRoaXNWYWx1ZSgpKSkK
KyAgICAgICAgcmV0dXJuIEpTT2JqZWN0OjpwdXQodGhpc09iamVjdCwgbGV4aWNhbEdsb2JhbE9i
amVjdCwgcHJvcGVydHlOYW1lLCB2YWx1ZSwgcHV0UHJvcGVydHlTbG90KTsKICAgICBhdXRvIHRo
cm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKGxleGljYWxHbG9iYWxPYmplY3QtPnZtKCkp
OwogCiAgICAgaWYgKGF1dG8gaW5kZXggPSBwYXJzZUluZGV4KHByb3BlcnR5TmFtZSkpIHsKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZEFu
ZEluZGV4ZWRTZXR0ZXJXaXRoSWRlbnRpZmllci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJX
aXRoSWRlbnRpZmllci5oCShyZXZpc2lvbiAyNzY1ODUpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyV2l0aElkZW50
aWZpZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNjQsNyArNjQsNyBAQCBwdWJsaWM6CiAgICAgc3Rh
dGljIEpTQzo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9ySW1wbChKU0M6OlZNJiB2bSk7CiAgICAg
c3RhdGljIHZvaWQgYW5hbHl6ZUhlYXAoSlNDZWxsKiwgSlNDOjpIZWFwQW5hbHl6ZXImKTsKIHB1
YmxpYzoKLSAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFz
ZTo6U3RydWN0dXJlRmxhZ3MgfCBKU0M6OkdldE93blByb3BlcnR5U2xvdElzSW1wdXJlRm9yUHJv
cGVydHlBYnNlbmNlIHwgSlNDOjpJbnRlcmNlcHRzR2V0T3duUHJvcGVydHlTbG90QnlJbmRleEV2
ZW5XaGVuTGVuZ3RoSXNOb3RaZXJvIHwgSlNDOjpPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eU5hbWVz
IHwgSlNDOjpPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3QgfCBKU0M6OlByb2hpYml0c1Byb3Bl
cnR5Q2FjaGluZzsKKyAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdz
ID0gQmFzZTo6U3RydWN0dXJlRmxhZ3MgfCBKU0M6OkdldE93blByb3BlcnR5U2xvdElzSW1wdXJl
Rm9yUHJvcGVydHlBYnNlbmNlIHwgSlNDOjpJbnRlcmNlcHRzR2V0T3duUHJvcGVydHlTbG90QnlJ
bmRleEV2ZW5XaGVuTGVuZ3RoSXNOb3RaZXJvIHwgSlNDOjpPdmVycmlkZXNHZXRPd25Qcm9wZXJ0
eU5hbWVzIHwgSlNDOjpPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3QgfCBKU0M6Ok92ZXJyaWRl
c1B1dCB8IEpTQzo6UHJvaGliaXRzUHJvcGVydHlDYWNoaW5nOwogcHJvdGVjdGVkOgogICAgIEpT
VGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlcldpdGhJZGVudGlmaWVyKEpTQzo6U3RydWN0dXJlKiwg
SlNET01HbG9iYWxPYmplY3QmLCBSZWY8VGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlcldpdGhJZGVu
dGlmaWVyPiYmKTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L0pTL0pTVGVzdE5hbWVkU2V0dGVyTm9JZGVudGlmaWVyLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRTZXR0ZXJOb0lk
ZW50aWZpZXIuY3BwCShyZXZpc2lvbiAyNzY1ODUpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRTZXR0ZXJOb0lkZW50aWZpZXIuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yMDQsNiArMjA0LDggQEAgYm9vbCBKU1Rlc3ROYW1lZFNldHRlck5vSWRl
bnRpZmllcjo6cHV0KAogICAgIGF1dG8qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNUZXN0TmFtZWRT
ZXR0ZXJOb0lkZW50aWZpZXIqPihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRT
KHRoaXNPYmplY3QsIGluZm8oKSk7CiAKKyAgICBpZiAoVU5MSUtFTFkodGhpc09iamVjdCAhPSBw
dXRQcm9wZXJ0eVNsb3QudGhpc1ZhbHVlKCkpKQorICAgICAgICByZXR1cm4gSlNPYmplY3Q6OnB1
dCh0aGlzT2JqZWN0LCBsZXhpY2FsR2xvYmFsT2JqZWN0LCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCBw
dXRQcm9wZXJ0eVNsb3QpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NP
UEUobGV4aWNhbEdsb2JhbE9iamVjdC0+dm0oKSk7CiAKICAgICBpZiAoIXByb3BlcnR5TmFtZS5p
c1N5bWJvbCgpKSB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3Qv
SlMvSlNUZXN0TmFtZWRTZXR0ZXJOb0lkZW50aWZpZXIuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRTZXR0ZXJOb0lkZW50
aWZpZXIuaAkocmV2aXNpb24gMjc2NTg1KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2Ny
aXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkU2V0dGVyTm9JZGVudGlmaWVyLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTY0LDcgKzY0LDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBKU0M6Oklzb1N1YnNwYWNl
KiBzdWJzcGFjZUZvckltcGwoSlNDOjpWTSYgdm0pOwogICAgIHN0YXRpYyB2b2lkIGFuYWx5emVI
ZWFwKEpTQ2VsbCosIEpTQzo6SGVhcEFuYWx5emVyJik7CiBwdWJsaWM6Ci0gICAgc3RhdGljIGNv
bnN0ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwg
SlNDOjpHZXRPd25Qcm9wZXJ0eVNsb3RJc0ltcHVyZUZvclByb3BlcnR5QWJzZW5jZSB8IEpTQzo6
SW50ZXJjZXB0c0dldE93blByb3BlcnR5U2xvdEJ5SW5kZXhFdmVuV2hlbkxlbmd0aElzTm90WmVy
byB8IEpTQzo6T3ZlcnJpZGVzR2V0T3duUHJvcGVydHlOYW1lcyB8IEpTQzo6T3ZlcnJpZGVzR2V0
T3duUHJvcGVydHlTbG90IHwgSlNDOjpQcm9oaWJpdHNQcm9wZXJ0eUNhY2hpbmc7CisgICAgc3Rh
dGljIGNvbnN0ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZs
YWdzIHwgSlNDOjpHZXRPd25Qcm9wZXJ0eVNsb3RJc0ltcHVyZUZvclByb3BlcnR5QWJzZW5jZSB8
IEpTQzo6SW50ZXJjZXB0c0dldE93blByb3BlcnR5U2xvdEJ5SW5kZXhFdmVuV2hlbkxlbmd0aElz
Tm90WmVybyB8IEpTQzo6T3ZlcnJpZGVzR2V0T3duUHJvcGVydHlOYW1lcyB8IEpTQzo6T3ZlcnJp
ZGVzR2V0T3duUHJvcGVydHlTbG90IHwgSlNDOjpPdmVycmlkZXNQdXQgfCBKU0M6OlByb2hpYml0
c1Byb3BlcnR5Q2FjaGluZzsKIHByb3RlY3RlZDoKICAgICBKU1Rlc3ROYW1lZFNldHRlck5vSWRl
bnRpZmllcihKU0M6OlN0cnVjdHVyZSosIEpTRE9NR2xvYmFsT2JqZWN0JiwgUmVmPFRlc3ROYW1l
ZFNldHRlck5vSWRlbnRpZmllcj4mJik7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZFNldHRlclRocm93aW5nRXhjZXB0aW9uLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNU
ZXN0TmFtZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbi5jcHAJKHJldmlzaW9uIDI3NjU4NSkKKysr
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZFNldHRl
clRocm93aW5nRXhjZXB0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjA0LDYgKzIwNCw4IEBA
IGJvb2wgSlNUZXN0TmFtZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbjoKICAgICBhdXRvKiB0aGlz
T2JqZWN0ID0ganNDYXN0PEpTVGVzdE5hbWVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb24qPihjZWxs
KTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CiAK
KyAgICBpZiAoVU5MSUtFTFkodGhpc09iamVjdCAhPSBwdXRQcm9wZXJ0eVNsb3QudGhpc1ZhbHVl
KCkpKQorICAgICAgICByZXR1cm4gSlNPYmplY3Q6OnB1dCh0aGlzT2JqZWN0LCBsZXhpY2FsR2xv
YmFsT2JqZWN0LCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCBwdXRQcm9wZXJ0eVNsb3QpOwogICAgIGF1
dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUobGV4aWNhbEdsb2JhbE9iamVjdC0+
dm0oKSk7CiAKICAgICBpZiAoIXByb3BlcnR5TmFtZS5pc1N5bWJvbCgpKSB7CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRTZXR0ZXJUaHJv
d2luZ0V4Y2VwdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Nj
cmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZFNldHRlclRocm93aW5nRXhjZXB0aW9uLmgJKHJldmlz
aW9uIDI3NjU4NSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9K
U1Rlc3ROYW1lZFNldHRlclRocm93aW5nRXhjZXB0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTY0
LDcgKzY0LDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBKU0M6Oklzb1N1YnNwYWNlKiBzdWJzcGFj
ZUZvckltcGwoSlNDOjpWTSYgdm0pOwogICAgIHN0YXRpYyB2b2lkIGFuYWx5emVIZWFwKEpTQ2Vs
bCosIEpTQzo6SGVhcEFuYWx5emVyJik7CiBwdWJsaWM6Ci0gICAgc3RhdGljIGNvbnN0ZXhwciB1
bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwgSlNDOjpHZXRP
d25Qcm9wZXJ0eVNsb3RJc0ltcHVyZUZvclByb3BlcnR5QWJzZW5jZSB8IEpTQzo6SW50ZXJjZXB0
c0dldE93blByb3BlcnR5U2xvdEJ5SW5kZXhFdmVuV2hlbkxlbmd0aElzTm90WmVybyB8IEpTQzo6
T3ZlcnJpZGVzR2V0T3duUHJvcGVydHlOYW1lcyB8IEpTQzo6T3ZlcnJpZGVzR2V0T3duUHJvcGVy
dHlTbG90IHwgSlNDOjpQcm9oaWJpdHNQcm9wZXJ0eUNhY2hpbmc7CisgICAgc3RhdGljIGNvbnN0
ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwgSlND
OjpHZXRPd25Qcm9wZXJ0eVNsb3RJc0ltcHVyZUZvclByb3BlcnR5QWJzZW5jZSB8IEpTQzo6SW50
ZXJjZXB0c0dldE93blByb3BlcnR5U2xvdEJ5SW5kZXhFdmVuV2hlbkxlbmd0aElzTm90WmVybyB8
IEpTQzo6T3ZlcnJpZGVzR2V0T3duUHJvcGVydHlOYW1lcyB8IEpTQzo6T3ZlcnJpZGVzR2V0T3du
UHJvcGVydHlTbG90IHwgSlNDOjpPdmVycmlkZXNQdXQgfCBKU0M6OlByb2hpYml0c1Byb3BlcnR5
Q2FjaGluZzsKIHByb3RlY3RlZDoKICAgICBKU1Rlc3ROYW1lZFNldHRlclRocm93aW5nRXhjZXB0
aW9uKEpTQzo6U3RydWN0dXJlKiwgSlNET01HbG9iYWxPYmplY3QmLCBSZWY8VGVzdE5hbWVkU2V0
dGVyVGhyb3dpbmdFeGNlcHRpb24+JiYpOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRTZXR0ZXJXaXRoSWRlbnRpZmllci5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVz
dE5hbWVkU2V0dGVyV2l0aElkZW50aWZpZXIuY3BwCShyZXZpc2lvbiAyNzY1ODUpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRTZXR0ZXJXaXRo
SWRlbnRpZmllci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIxMiw2ICsyMTIsOCBAQCBib29sIEpT
VGVzdE5hbWVkU2V0dGVyV2l0aElkZW50aWZpZXI6OnB1CiAgICAgYXV0byogdGhpc09iamVjdCA9
IGpzQ2FzdDxKU1Rlc3ROYW1lZFNldHRlcldpdGhJZGVudGlmaWVyKj4oY2VsbCk7CiAgICAgQVNT
RVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwogCisgICAgaWYgKFVO
TElLRUxZKHRoaXNPYmplY3QgIT0gcHV0UHJvcGVydHlTbG90LnRoaXNWYWx1ZSgpKSkKKyAgICAg
ICAgcmV0dXJuIEpTT2JqZWN0OjpwdXQodGhpc09iamVjdCwgbGV4aWNhbEdsb2JhbE9iamVjdCwg
cHJvcGVydHlOYW1lLCB2YWx1ZSwgcHV0UHJvcGVydHlTbG90KTsKICAgICBhdXRvIHRocm93U2Nv
cGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKGxleGljYWxHbG9iYWxPYmplY3QtPnZtKCkpOwogCiAg
ICAgaWYgKCFwcm9wZXJ0eU5hbWUuaXNTeW1ib2woKSkgewpJbmRleDogU291cmNlL1dlYkNvcmUv
YmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkU2V0dGVyV2l0aElkZW50aWZpZXIu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMv
SlNUZXN0TmFtZWRTZXR0ZXJXaXRoSWRlbnRpZmllci5oCShyZXZpc2lvbiAyNzY1ODUpCisrKyBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRTZXR0ZXJX
aXRoSWRlbnRpZmllci5oCSh3b3JraW5nIGNvcHkpCkBAIC02NCw3ICs2NCw3IEBAIHB1YmxpYzoK
ICAgICBzdGF0aWMgSlNDOjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3JJbXBsKEpTQzo6Vk0mIHZt
KTsKICAgICBzdGF0aWMgdm9pZCBhbmFseXplSGVhcChKU0NlbGwqLCBKU0M6OkhlYXBBbmFseXpl
ciYpOwogcHVibGljOgotICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgU3RydWN0dXJlRmxh
Z3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8IEpTQzo6R2V0T3duUHJvcGVydHlTbG90SXNJbXB1
cmVGb3JQcm9wZXJ0eUFic2VuY2UgfCBKU0M6OkludGVyY2VwdHNHZXRPd25Qcm9wZXJ0eVNsb3RC
eUluZGV4RXZlbldoZW5MZW5ndGhJc05vdFplcm8gfCBKU0M6Ok92ZXJyaWRlc0dldE93blByb3Bl
cnR5TmFtZXMgfCBKU0M6Ok92ZXJyaWRlc0dldE93blByb3BlcnR5U2xvdCB8IEpTQzo6UHJvaGli
aXRzUHJvcGVydHlDYWNoaW5nOworICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgU3RydWN0
dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8IEpTQzo6R2V0T3duUHJvcGVydHlTbG90
SXNJbXB1cmVGb3JQcm9wZXJ0eUFic2VuY2UgfCBKU0M6OkludGVyY2VwdHNHZXRPd25Qcm9wZXJ0
eVNsb3RCeUluZGV4RXZlbldoZW5MZW5ndGhJc05vdFplcm8gfCBKU0M6Ok92ZXJyaWRlc0dldE93
blByb3BlcnR5TmFtZXMgfCBKU0M6Ok92ZXJyaWRlc0dldE93blByb3BlcnR5U2xvdCB8IEpTQzo6
T3ZlcnJpZGVzUHV0IHwgSlNDOjpQcm9oaWJpdHNQcm9wZXJ0eUNhY2hpbmc7CiBwcm90ZWN0ZWQ6
CiAgICAgSlNUZXN0TmFtZWRTZXR0ZXJXaXRoSWRlbnRpZmllcihKU0M6OlN0cnVjdHVyZSosIEpT
RE9NR2xvYmFsT2JqZWN0JiwgUmVmPFRlc3ROYW1lZFNldHRlcldpdGhJZGVudGlmaWVyPiYmKTsK
IApJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5h
bWVkU2V0dGVyV2l0aEluZGV4ZWRHZXR0ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZFNldHRlcldpdGhJbmRleGVk
R2V0dGVyLmNwcAkocmV2aXNpb24gMjc2NTg1KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
c2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkU2V0dGVyV2l0aEluZGV4ZWRHZXR0ZXIuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0yMzYsNiArMjM2LDggQEAgYm9vbCBKU1Rlc3ROYW1lZFNldHRlcldp
dGhJbmRleGVkR2V0dGVyOgogICAgIGF1dG8qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNUZXN0TmFt
ZWRTZXR0ZXJXaXRoSW5kZXhlZEdldHRlcio+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1Rf
SU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKIAorICAgIGlmIChVTkxJS0VMWSh0aGlzT2Jq
ZWN0ICE9IHB1dFByb3BlcnR5U2xvdC50aGlzVmFsdWUoKSkpCisgICAgICAgIHJldHVybiBKU09i
amVjdDo6cHV0KHRoaXNPYmplY3QsIGxleGljYWxHbG9iYWxPYmplY3QsIHByb3BlcnR5TmFtZSwg
dmFsdWUsIHB1dFByb3BlcnR5U2xvdCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9U
SFJPV19TQ09QRShsZXhpY2FsR2xvYmFsT2JqZWN0LT52bSgpKTsKIAogICAgIGlmICghcHJvcGVy
dHlOYW1lLmlzU3ltYm9sKCkpIHsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Njcmlw
dHMvdGVzdC9KUy9KU1Rlc3ROYW1lZFNldHRlcldpdGhJbmRleGVkR2V0dGVyLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVk
U2V0dGVyV2l0aEluZGV4ZWRHZXR0ZXIuaAkocmV2aXNpb24gMjc2NTg1KQorKysgU291cmNlL1dl
YkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkU2V0dGVyV2l0aEluZGV4
ZWRHZXR0ZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNjQsNyArNjQsNyBAQCBwdWJsaWM6CiAgICAg
c3RhdGljIEpTQzo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9ySW1wbChKU0M6OlZNJiB2bSk7CiAg
ICAgc3RhdGljIHZvaWQgYW5hbHl6ZUhlYXAoSlNDZWxsKiwgSlNDOjpIZWFwQW5hbHl6ZXImKTsK
IHB1YmxpYzoKLSAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0g
QmFzZTo6U3RydWN0dXJlRmxhZ3MgfCBKU0M6OkdldE93blByb3BlcnR5U2xvdElzSW1wdXJlRm9y
UHJvcGVydHlBYnNlbmNlIHwgSlNDOjpJbnRlcmNlcHRzR2V0T3duUHJvcGVydHlTbG90QnlJbmRl
eEV2ZW5XaGVuTGVuZ3RoSXNOb3RaZXJvIHwgSlNDOjpPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eU5h
bWVzIHwgSlNDOjpPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3QgfCBKU0M6OlByb2hpYml0c1By
b3BlcnR5Q2FjaGluZzsKKyAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIFN0cnVjdHVyZUZs
YWdzID0gQmFzZTo6U3RydWN0dXJlRmxhZ3MgfCBKU0M6OkdldE93blByb3BlcnR5U2xvdElzSW1w
dXJlRm9yUHJvcGVydHlBYnNlbmNlIHwgSlNDOjpJbnRlcmNlcHRzR2V0T3duUHJvcGVydHlTbG90
QnlJbmRleEV2ZW5XaGVuTGVuZ3RoSXNOb3RaZXJvIHwgSlNDOjpPdmVycmlkZXNHZXRPd25Qcm9w
ZXJ0eU5hbWVzIHwgSlNDOjpPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3QgfCBKU0M6Ok92ZXJy
aWRlc1B1dCB8IEpTQzo6UHJvaGliaXRzUHJvcGVydHlDYWNoaW5nOwogcHJvdGVjdGVkOgogICAg
IEpTVGVzdE5hbWVkU2V0dGVyV2l0aEluZGV4ZWRHZXR0ZXIoSlNDOjpTdHJ1Y3R1cmUqLCBKU0RP
TUdsb2JhbE9iamVjdCYsIFJlZjxUZXN0TmFtZWRTZXR0ZXJXaXRoSW5kZXhlZEdldHRlcj4mJik7
CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RO
YW1lZFNldHRlcldpdGhJbmRleGVkR2V0dGVyQW5kU2V0dGVyLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRTZXR0ZXJX
aXRoSW5kZXhlZEdldHRlckFuZFNldHRlci5jcHAJKHJldmlzaW9uIDI3NjU4NSkKKysrIFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZFNldHRlcldpdGhJ
bmRleGVkR2V0dGVyQW5kU2V0dGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjM2LDYgKzIzNiw4
IEBAIGJvb2wgSlNUZXN0TmFtZWRTZXR0ZXJXaXRoSW5kZXhlZEdldHRlckEKICAgICBhdXRvKiB0
aGlzT2JqZWN0ID0ganNDYXN0PEpTVGVzdE5hbWVkU2V0dGVyV2l0aEluZGV4ZWRHZXR0ZXJBbmRT
ZXR0ZXIqPihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3Qs
IGluZm8oKSk7CiAKKyAgICBpZiAoVU5MSUtFTFkodGhpc09iamVjdCAhPSBwdXRQcm9wZXJ0eVNs
b3QudGhpc1ZhbHVlKCkpKQorICAgICAgICByZXR1cm4gSlNPYmplY3Q6OnB1dCh0aGlzT2JqZWN0
LCBsZXhpY2FsR2xvYmFsT2JqZWN0LCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCBwdXRQcm9wZXJ0eVNs
b3QpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUobGV4aWNhbEds
b2JhbE9iamVjdC0+dm0oKSk7CiAKICAgICBpZiAoYXV0byBpbmRleCA9IHBhcnNlSW5kZXgocHJv
cGVydHlOYW1lKSkgewpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L0pTL0pTVGVzdE5hbWVkU2V0dGVyV2l0aEluZGV4ZWRHZXR0ZXJBbmRTZXR0ZXIuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFt
ZWRTZXR0ZXJXaXRoSW5kZXhlZEdldHRlckFuZFNldHRlci5oCShyZXZpc2lvbiAyNzY1ODUpCisr
KyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRTZXR0
ZXJXaXRoSW5kZXhlZEdldHRlckFuZFNldHRlci5oCSh3b3JraW5nIGNvcHkpCkBAIC02NCw3ICs2
NCw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgSlNDOjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3JJ
bXBsKEpTQzo6Vk0mIHZtKTsKICAgICBzdGF0aWMgdm9pZCBhbmFseXplSGVhcChKU0NlbGwqLCBK
U0M6OkhlYXBBbmFseXplciYpOwogcHVibGljOgotICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWdu
ZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8IEpTQzo6R2V0T3duUHJv
cGVydHlTbG90SXNJbXB1cmVGb3JQcm9wZXJ0eUFic2VuY2UgfCBKU0M6OkludGVyY2VwdHNHZXRP
d25Qcm9wZXJ0eVNsb3RCeUluZGV4RXZlbldoZW5MZW5ndGhJc05vdFplcm8gfCBKU0M6Ok92ZXJy
aWRlc0dldE93blByb3BlcnR5TmFtZXMgfCBKU0M6Ok92ZXJyaWRlc0dldE93blByb3BlcnR5U2xv
dCB8IEpTQzo6UHJvaGliaXRzUHJvcGVydHlDYWNoaW5nOworICAgIHN0YXRpYyBjb25zdGV4cHIg
dW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8IEpTQzo6R2V0
T3duUHJvcGVydHlTbG90SXNJbXB1cmVGb3JQcm9wZXJ0eUFic2VuY2UgfCBKU0M6OkludGVyY2Vw
dHNHZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4RXZlbldoZW5MZW5ndGhJc05vdFplcm8gfCBKU0M6
Ok92ZXJyaWRlc0dldE93blByb3BlcnR5TmFtZXMgfCBKU0M6Ok92ZXJyaWRlc0dldE93blByb3Bl
cnR5U2xvdCB8IEpTQzo6T3ZlcnJpZGVzUHV0IHwgSlNDOjpQcm9oaWJpdHNQcm9wZXJ0eUNhY2hp
bmc7CiBwcm90ZWN0ZWQ6CiAgICAgSlNUZXN0TmFtZWRTZXR0ZXJXaXRoSW5kZXhlZEdldHRlckFu
ZFNldHRlcihKU0M6OlN0cnVjdHVyZSosIEpTRE9NR2xvYmFsT2JqZWN0JiwgUmVmPFRlc3ROYW1l
ZFNldHRlcldpdGhJbmRleGVkR2V0dGVyQW5kU2V0dGVyPiYmKTsKIApJbmRleDogU291cmNlL1dl
YkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkU2V0dGVyV2l0aExlZ2Fj
eU92ZXJyaWRlQnVpbHRJbnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZFNldHRlcldpdGhMZWdhY3lPdmVycmlkZUJ1
aWx0SW5zLmNwcAkocmV2aXNpb24gMjc2NTg1KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
c2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkU2V0dGVyV2l0aExlZ2FjeU92ZXJyaWRlQnVpbHRJ
bnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMDQsNiArMjA0LDggQEAgYm9vbCBKU1Rlc3ROYW1l
ZFNldHRlcldpdGhMZWdhY3lPdmVycmlkZQogICAgIGF1dG8qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8
SlNUZXN0TmFtZWRTZXR0ZXJXaXRoTGVnYWN5T3ZlcnJpZGVCdWlsdElucyo+KGNlbGwpOwogICAg
IEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKIAorICAgIGlm
IChVTkxJS0VMWSh0aGlzT2JqZWN0ICE9IHB1dFByb3BlcnR5U2xvdC50aGlzVmFsdWUoKSkpCisg
ICAgICAgIHJldHVybiBKU09iamVjdDo6cHV0KHRoaXNPYmplY3QsIGxleGljYWxHbG9iYWxPYmpl
Y3QsIHByb3BlcnR5TmFtZSwgdmFsdWUsIHB1dFByb3BlcnR5U2xvdCk7CiAgICAgYXV0byB0aHJv
d1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRShsZXhpY2FsR2xvYmFsT2JqZWN0LT52bSgpKTsK
IAogICAgIGlmICghcHJvcGVydHlOYW1lLmlzU3ltYm9sKCkpIHsKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZFNldHRlcldpdGhMZWdhY3lP
dmVycmlkZUJ1aWx0SW5zLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
c2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkU2V0dGVyV2l0aExlZ2FjeU92ZXJyaWRlQnVpbHRJ
bnMuaAkocmV2aXNpb24gMjc2NTg1KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L0pTL0pTVGVzdE5hbWVkU2V0dGVyV2l0aExlZ2FjeU92ZXJyaWRlQnVpbHRJbnMuaAko
d29ya2luZyBjb3B5KQpAQCAtNjQsNyArNjQsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIEpTQzo6
SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9ySW1wbChKU0M6OlZNJiB2bSk7CiAgICAgc3RhdGljIHZv
aWQgYW5hbHl6ZUhlYXAoSlNDZWxsKiwgSlNDOjpIZWFwQW5hbHl6ZXImKTsKIHB1YmxpYzoKLSAg
ICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0
dXJlRmxhZ3MgfCBKU0M6OkdldE93blByb3BlcnR5U2xvdElzSW1wdXJlIHwgSlNDOjpJbnRlcmNl
cHRzR2V0T3duUHJvcGVydHlTbG90QnlJbmRleEV2ZW5XaGVuTGVuZ3RoSXNOb3RaZXJvIHwgSlND
OjpPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eU5hbWVzIHwgSlNDOjpPdmVycmlkZXNHZXRPd25Qcm9w
ZXJ0eVNsb3QgfCBKU0M6OlByb2hpYml0c1Byb3BlcnR5Q2FjaGluZzsKKyAgICBzdGF0aWMgY29u
c3RleHByIHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxhZ3MgfCBK
U0M6OkdldE93blByb3BlcnR5U2xvdElzSW1wdXJlIHwgSlNDOjpJbnRlcmNlcHRzR2V0T3duUHJv
cGVydHlTbG90QnlJbmRleEV2ZW5XaGVuTGVuZ3RoSXNOb3RaZXJvIHwgSlNDOjpPdmVycmlkZXNH
ZXRPd25Qcm9wZXJ0eU5hbWVzIHwgSlNDOjpPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3QgfCBK
U0M6Ok92ZXJyaWRlc1B1dCB8IEpTQzo6UHJvaGliaXRzUHJvcGVydHlDYWNoaW5nOwogcHJvdGVj
dGVkOgogICAgIEpTVGVzdE5hbWVkU2V0dGVyV2l0aExlZ2FjeU92ZXJyaWRlQnVpbHRJbnMoSlND
OjpTdHJ1Y3R1cmUqLCBKU0RPTUdsb2JhbE9iamVjdCYsIFJlZjxUZXN0TmFtZWRTZXR0ZXJXaXRo
TGVnYWN5T3ZlcnJpZGVCdWlsdElucz4mJik7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZFNldHRlcldpdGhMZWdhY3lVbmZvcmdlYWJs
ZVByb3BlcnRpZXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Nj
cmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZFNldHRlcldpdGhMZWdhY3lVbmZvcmdlYWJsZVByb3Bl
cnRpZXMuY3BwCShyZXZpc2lvbiAyNzY1ODUpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRTZXR0ZXJXaXRoTGVnYWN5VW5mb3JnZWFibGVQcm9w
ZXJ0aWVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjMwLDYgKzIzMCw4IEBAIGJvb2wgSlNUZXN0
TmFtZWRTZXR0ZXJXaXRoTGVnYWN5VW5mb3JnZWEKICAgICBhdXRvKiB0aGlzT2JqZWN0ID0ganND
YXN0PEpTVGVzdE5hbWVkU2V0dGVyV2l0aExlZ2FjeVVuZm9yZ2VhYmxlUHJvcGVydGllcyo+KGNl
bGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsK
IAorICAgIGlmIChVTkxJS0VMWSh0aGlzT2JqZWN0ICE9IHB1dFByb3BlcnR5U2xvdC50aGlzVmFs
dWUoKSkpCisgICAgICAgIHJldHVybiBKU09iamVjdDo6cHV0KHRoaXNPYmplY3QsIGxleGljYWxH
bG9iYWxPYmplY3QsIHByb3BlcnR5TmFtZSwgdmFsdWUsIHB1dFByb3BlcnR5U2xvdCk7CiAgICAg
YXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRShsZXhpY2FsR2xvYmFsT2JqZWN0
LT52bSgpKTsKIAogICAgIGlmICghcHJvcGVydHlOYW1lLmlzU3ltYm9sKCkpIHsKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZFNldHRlcldp
dGhMZWdhY3lVbmZvcmdlYWJsZVByb3BlcnRpZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRTZXR0ZXJXaXRoTGVnYWN5
VW5mb3JnZWFibGVQcm9wZXJ0aWVzLmgJKHJldmlzaW9uIDI3NjU4NSkKKysrIFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZFNldHRlcldpdGhMZWdhY3lV
bmZvcmdlYWJsZVByb3BlcnRpZXMuaAkod29ya2luZyBjb3B5KQpAQCAtNjQsNyArNjQsNyBAQCBw
dWJsaWM6CiAgICAgc3RhdGljIEpTQzo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9ySW1wbChKU0M6
OlZNJiB2bSk7CiAgICAgc3RhdGljIHZvaWQgYW5hbHl6ZUhlYXAoSlNDZWxsKiwgSlNDOjpIZWFw
QW5hbHl6ZXImKTsKIHB1YmxpYzoKLSAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIFN0cnVj
dHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxhZ3MgfCBKU0M6OkdldE93blByb3BlcnR5U2xv
dElzSW1wdXJlRm9yUHJvcGVydHlBYnNlbmNlIHwgSlNDOjpIYXNTdGF0aWNQcm9wZXJ0eVRhYmxl
IHwgSlNDOjpJbnRlcmNlcHRzR2V0T3duUHJvcGVydHlTbG90QnlJbmRleEV2ZW5XaGVuTGVuZ3Ro
SXNOb3RaZXJvIHwgSlNDOjpPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eU5hbWVzIHwgSlNDOjpPdmVy
cmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3QgfCBKU0M6OlByb2hpYml0c1Byb3BlcnR5Q2FjaGluZzsK
KyAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3Ry
dWN0dXJlRmxhZ3MgfCBKU0M6OkdldE93blByb3BlcnR5U2xvdElzSW1wdXJlRm9yUHJvcGVydHlB
YnNlbmNlIHwgSlNDOjpIYXNTdGF0aWNQcm9wZXJ0eVRhYmxlIHwgSlNDOjpJbnRlcmNlcHRzR2V0
T3duUHJvcGVydHlTbG90QnlJbmRleEV2ZW5XaGVuTGVuZ3RoSXNOb3RaZXJvIHwgSlNDOjpPdmVy
cmlkZXNHZXRPd25Qcm9wZXJ0eU5hbWVzIHwgSlNDOjpPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNs
b3QgfCBKU0M6Ok92ZXJyaWRlc1B1dCB8IEpTQzo6UHJvaGliaXRzUHJvcGVydHlDYWNoaW5nOwog
cHJvdGVjdGVkOgogICAgIEpTVGVzdE5hbWVkU2V0dGVyV2l0aExlZ2FjeVVuZm9yZ2VhYmxlUHJv
cGVydGllcyhKU0M6OlN0cnVjdHVyZSosIEpTRE9NR2xvYmFsT2JqZWN0JiwgUmVmPFRlc3ROYW1l
ZFNldHRlcldpdGhMZWdhY3lVbmZvcmdlYWJsZVByb3BlcnRpZXM+JiYpOwogCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRTZXR0ZXJXaXRo
TGVnYWN5VW5mb3JnZWFibGVQcm9wZXJ0aWVzQW5kTGVnYWN5T3ZlcnJpZGVCdWlsdElucy5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pT
VGVzdE5hbWVkU2V0dGVyV2l0aExlZ2FjeVVuZm9yZ2VhYmxlUHJvcGVydGllc0FuZExlZ2FjeU92
ZXJyaWRlQnVpbHRJbnMuY3BwCShyZXZpc2lvbiAyNzY1ODUpCisrKyBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRTZXR0ZXJXaXRoTGVnYWN5VW5mb3Jn
ZWFibGVQcm9wZXJ0aWVzQW5kTGVnYWN5T3ZlcnJpZGVCdWlsdElucy5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTIzMCw2ICsyMzAsOCBAQCBib29sIEpTVGVzdE5hbWVkU2V0dGVyV2l0aExlZ2FjeVVu
Zm9yZ2VhCiAgICAgYXV0byogdGhpc09iamVjdCA9IGpzQ2FzdDxKU1Rlc3ROYW1lZFNldHRlcldp
dGhMZWdhY3lVbmZvcmdlYWJsZVByb3BlcnRpZXNBbmRMZWdhY3lPdmVycmlkZUJ1aWx0SW5zKj4o
Y2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkp
OwogCisgICAgaWYgKFVOTElLRUxZKHRoaXNPYmplY3QgIT0gcHV0UHJvcGVydHlTbG90LnRoaXNW
YWx1ZSgpKSkKKyAgICAgICAgcmV0dXJuIEpTT2JqZWN0OjpwdXQodGhpc09iamVjdCwgbGV4aWNh
bEdsb2JhbE9iamVjdCwgcHJvcGVydHlOYW1lLCB2YWx1ZSwgcHV0UHJvcGVydHlTbG90KTsKICAg
ICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKGxleGljYWxHbG9iYWxPYmpl
Y3QtPnZtKCkpOwogCiAgICAgaWYgKCFwcm9wZXJ0eU5hbWUuaXNTeW1ib2woKSkgewpJbmRleDog
U291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkU2V0dGVy
V2l0aExlZ2FjeVVuZm9yZ2VhYmxlUHJvcGVydGllc0FuZExlZ2FjeU92ZXJyaWRlQnVpbHRJbnMu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMv
SlNUZXN0TmFtZWRTZXR0ZXJXaXRoTGVnYWN5VW5mb3JnZWFibGVQcm9wZXJ0aWVzQW5kTGVnYWN5
T3ZlcnJpZGVCdWlsdElucy5oCShyZXZpc2lvbiAyNzY1ODUpCisrKyBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRTZXR0ZXJXaXRoTGVnYWN5VW5mb3Jn
ZWFibGVQcm9wZXJ0aWVzQW5kTGVnYWN5T3ZlcnJpZGVCdWlsdElucy5oCSh3b3JraW5nIGNvcHkp
CkBAIC02NCw3ICs2NCw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgSlNDOjpJc29TdWJzcGFjZSog
c3Vic3BhY2VGb3JJbXBsKEpTQzo6Vk0mIHZtKTsKICAgICBzdGF0aWMgdm9pZCBhbmFseXplSGVh
cChKU0NlbGwqLCBKU0M6OkhlYXBBbmFseXplciYpOwogcHVibGljOgotICAgIHN0YXRpYyBjb25z
dGV4cHIgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8IEpT
Qzo6R2V0T3duUHJvcGVydHlTbG90SXNJbXB1cmUgfCBKU0M6Okhhc1N0YXRpY1Byb3BlcnR5VGFi
bGUgfCBKU0M6OkludGVyY2VwdHNHZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4RXZlbldoZW5MZW5n
dGhJc05vdFplcm8gfCBKU0M6Ok92ZXJyaWRlc0dldE93blByb3BlcnR5TmFtZXMgfCBKU0M6Ok92
ZXJyaWRlc0dldE93blByb3BlcnR5U2xvdCB8IEpTQzo6UHJvaGliaXRzUHJvcGVydHlDYWNoaW5n
OworICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpT
dHJ1Y3R1cmVGbGFncyB8IEpTQzo6R2V0T3duUHJvcGVydHlTbG90SXNJbXB1cmUgfCBKU0M6Okhh
c1N0YXRpY1Byb3BlcnR5VGFibGUgfCBKU0M6OkludGVyY2VwdHNHZXRPd25Qcm9wZXJ0eVNsb3RC
eUluZGV4RXZlbldoZW5MZW5ndGhJc05vdFplcm8gfCBKU0M6Ok92ZXJyaWRlc0dldE93blByb3Bl
cnR5TmFtZXMgfCBKU0M6Ok92ZXJyaWRlc0dldE93blByb3BlcnR5U2xvdCB8IEpTQzo6T3ZlcnJp
ZGVzUHV0IHwgSlNDOjpQcm9oaWJpdHNQcm9wZXJ0eUNhY2hpbmc7CiBwcm90ZWN0ZWQ6CiAgICAg
SlNUZXN0TmFtZWRTZXR0ZXJXaXRoTGVnYWN5VW5mb3JnZWFibGVQcm9wZXJ0aWVzQW5kTGVnYWN5
T3ZlcnJpZGVCdWlsdElucyhKU0M6OlN0cnVjdHVyZSosIEpTRE9NR2xvYmFsT2JqZWN0JiwgUmVm
PFRlc3ROYW1lZFNldHRlcldpdGhMZWdhY3lVbmZvcmdlYWJsZVByb3BlcnRpZXNBbmRMZWdhY3lP
dmVycmlkZUJ1aWx0SW5zPiYmKTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2Ny
aXB0cy90ZXN0L0pTL0pTVGVzdFBsdWdpbkludGVyZmFjZS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFBsdWdpbkludGVyZmFj
ZS5jcHAJKHJldmlzaW9uIDI3NjU4NSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Njcmlw
dHMvdGVzdC9KUy9KU1Rlc3RQbHVnaW5JbnRlcmZhY2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
ODEsNiArMTgxLDggQEAgYm9vbCBKU1Rlc3RQbHVnaW5JbnRlcmZhY2U6OnB1dChKU0NlbGwqIAog
ICAgIGF1dG8qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNUZXN0UGx1Z2luSW50ZXJmYWNlKj4oY2Vs
bCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwog
CisgICAgaWYgKFVOTElLRUxZKHRoaXNPYmplY3QgIT0gcHV0UHJvcGVydHlTbG90LnRoaXNWYWx1
ZSgpKSkKKyAgICAgICAgcmV0dXJuIEpTT2JqZWN0OjpwdXQodGhpc09iamVjdCwgbGV4aWNhbEds
b2JhbE9iamVjdCwgcHJvcGVydHlOYW1lLCB2YWx1ZSwgcHV0UHJvcGVydHlTbG90KTsKICAgICBh
dXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKGxleGljYWxHbG9iYWxPYmplY3Qt
PnZtKCkpOwogCiAgICAgYm9vbCBwdXRSZXN1bHQgPSBmYWxzZTsKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RQbHVnaW5JbnRlcmZhY2UuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0
UGx1Z2luSW50ZXJmYWNlLmgJKHJldmlzaW9uIDI3NjU4NSkKKysrIFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RQbHVnaW5JbnRlcmZhY2UuaAkod29ya2luZyBj
b3B5KQpAQCAtNjcsNyArNjcsNyBAQCBwdWJsaWM6CiAKICAgICBzdGF0aWMgdm9pZCBhbmFseXpl
SGVhcChKU0NlbGwqLCBKU0M6OkhlYXBBbmFseXplciYpOwogcHVibGljOgotICAgIHN0YXRpYyBj
b25zdGV4cHIgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8
IEpTQzo6SW50ZXJjZXB0c0dldE93blByb3BlcnR5U2xvdEJ5SW5kZXhFdmVuV2hlbkxlbmd0aElz
Tm90WmVybyB8IEpTQzo6T3ZlcnJpZGVzR2V0Q2FsbERhdGEgfCBKU0M6Ok92ZXJyaWRlc0dldE93
blByb3BlcnR5U2xvdCB8IEpTQzo6UHJvaGliaXRzUHJvcGVydHlDYWNoaW5nOworICAgIHN0YXRp
YyBjb25zdGV4cHIgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFn
cyB8IEpTQzo6SW50ZXJjZXB0c0dldE93blByb3BlcnR5U2xvdEJ5SW5kZXhFdmVuV2hlbkxlbmd0
aElzTm90WmVybyB8IEpTQzo6T3ZlcnJpZGVzR2V0Q2FsbERhdGEgfCBKU0M6Ok92ZXJyaWRlc0dl
dE93blByb3BlcnR5U2xvdCB8IEpTQzo6T3ZlcnJpZGVzUHV0IHwgSlNDOjpQcm9oaWJpdHNQcm9w
ZXJ0eUNhY2hpbmc7CiBwcm90ZWN0ZWQ6CiAgICAgSlNUZXN0UGx1Z2luSW50ZXJmYWNlKEpTQzo6
U3RydWN0dXJlKiwgSlNET01HbG9iYWxPYmplY3QmLCBSZWY8VGVzdFBsdWdpbkludGVyZmFjZT4m
Jik7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9ydW50aW1lX2FycmF5LmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvYnJpZGdlL3J1bnRpbWVfYXJyYXkuaAkocmV2aXNpb24g
Mjc2NTg1KQorKysgU291cmNlL1dlYkNvcmUvYnJpZGdlL3J1bnRpbWVfYXJyYXkuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMzUsNyArMzUsNyBAQCBuYW1lc3BhY2UgSlNDIHsKIGNsYXNzIFJ1bnRpbWVB
cnJheSBmaW5hbCA6IHB1YmxpYyBKU0FycmF5IHsKIHB1YmxpYzoKICAgICB1c2luZyBCYXNlID0g
SlNBcnJheTsKLSAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0g
QmFzZTo6U3RydWN0dXJlRmxhZ3MgfCBPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3QgfCBPdmVy
cmlkZXNHZXRPd25Qcm9wZXJ0eU5hbWVzIHwgSW50ZXJjZXB0c0dldE93blByb3BlcnR5U2xvdEJ5
SW5kZXhFdmVuV2hlbkxlbmd0aElzTm90WmVybzsKKyAgICBzdGF0aWMgY29uc3RleHByIHVuc2ln
bmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxhZ3MgfCBPdmVycmlkZXNHZXRP
d25Qcm9wZXJ0eVNsb3QgfCBPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eU5hbWVzIHwgT3ZlcnJpZGVz
UHV0IHwgSW50ZXJjZXB0c0dldE93blByb3BlcnR5U2xvdEJ5SW5kZXhFdmVuV2hlbkxlbmd0aElz
Tm90WmVybzsKICAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNEZXN0cnVjdGlvbiA9IHRy
dWU7CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDZWxsVHlwZSwgSlNDOjpTdWJzcGFjZUFjY2Vz
cz4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9ydW50aW1lX29iamVjdC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9ydW50aW1lX29iamVjdC5oCShyZXZpc2lvbiAy
NzY1ODUpCisrKyBTb3VyY2UvV2ViQ29yZS9icmlkZ2UvcnVudGltZV9vYmplY3QuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMzcsNyArMzcsNyBAQCBFeGNlcHRpb24qIHRocm93UnVudGltZU9iamVjdElu
dmFsaWRBY2NlCiBjbGFzcyBXRUJDT1JFX0VYUE9SVCBSdW50aW1lT2JqZWN0IDogcHVibGljIEpT
Tm9uRmluYWxPYmplY3QgewogcHVibGljOgogICAgIHVzaW5nIEJhc2UgPSBKU05vbkZpbmFsT2Jq
ZWN0OwotICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNl
OjpTdHJ1Y3R1cmVGbGFncyB8IE92ZXJyaWRlc0dldE93blByb3BlcnR5U2xvdCB8IE92ZXJyaWRl
c0dldE93blByb3BlcnR5TmFtZXMgfCBPdmVycmlkZXNHZXRDYWxsRGF0YSB8IEdldE93blByb3Bl
cnR5U2xvdE1heUJlV3JvbmdBYm91dERvbnRFbnVtOworICAgIHN0YXRpYyBjb25zdGV4cHIgdW5z
aWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8IE92ZXJyaWRlc0dl
dE93blByb3BlcnR5U2xvdCB8IE92ZXJyaWRlc0dldE93blByb3BlcnR5TmFtZXMgfCBPdmVycmlk
ZXNHZXRDYWxsRGF0YSB8IE92ZXJyaWRlc1B1dCB8IEdldE93blByb3BlcnR5U2xvdE1heUJlV3Jv
bmdBYm91dERvbnRFbnVtOwogICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0Rlc3RydWN0
aW9uID0gdHJ1ZTsKIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIENlbGxUeXBlLCBKU0M6OlN1YnNw
YWNlQWNjZXNzPgpJbmRleDogU291cmNlL1dlYkNvcmUvYnJpZGdlL29iamMvb2JqY19ydW50aW1l
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYnJpZGdlL29iamMvb2JqY19ydW50aW1l
LmgJKHJldmlzaW9uIDI3NjU4NSkKKysrIFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9vYmpjL29iamNf
cnVudGltZS5oCSh3b3JraW5nIGNvcHkpCkBAIC05MSw3ICs5MSw3IEBAIHByaXZhdGU6CiBjbGFz
cyBPYmpjRmFsbGJhY2tPYmplY3RJbXAgZmluYWwgOiBwdWJsaWMgSlNEZXN0cnVjdGlibGVPYmpl
Y3QgewogcHVibGljOgogICAgIHVzaW5nIEJhc2UgPSBKU0Rlc3RydWN0aWJsZU9iamVjdDsKLSAg
ICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0
dXJlRmxhZ3MgfCBPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3QgfCBPdmVycmlkZXNHZXRDYWxs
RGF0YTsKKyAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFz
ZTo6U3RydWN0dXJlRmxhZ3MgfCBPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3QgfCBPdmVycmlk
ZXNHZXRDYWxsRGF0YSB8IE92ZXJyaWRlc1B1dDsKICAgICBzdGF0aWMgY29uc3RleHByIGJvb2wg
bmVlZHNEZXN0cnVjdGlvbiA9IHRydWU7CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDZWxsVHlw
ZSwgSlNDOjpTdWJzcGFjZUFjY2Vzcz4KSW5kZXg6IFNvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCShyZXZpc2lvbiAyNzY1ODUpCisr
KyBTb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEyIEBA
CisyMDIxLTA0LTI2ICBBbGV4ZXkgU2h2YXlrYSAgPHNodmFpa2FsZXNoQGdtYWlsLmNvbT4KKwor
ICAgICAgICBbSlNDXSBPcmRpbmFyeVNldCBzaG91bGQgaW52b2tlIGN1c3RvbSBbW1NldF1dIG1l
dGhvZHMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIx
NzkxNgorCisgICAgICAgIFJldmlld2VkIGJ5IFl1c3VrZSBTdXp1a2kuCisKKyAgICAgICAgKiBX
ZWJQcm9jZXNzL1BsdWdpbnMvTmV0c2NhcGUvSlNOUE9iamVjdC5oOgorCiAyMDIxLTA0LTI1ICBE
ZXZpbiBSb3Vzc28gIDxkcm91c3NvQGFwcGxlLmNvbT4KIAogICAgICAgICBBZGQgYEFMV0FZU19M
T0dfV0lUSF9TVFJFQU1gIG1hY3JvIGZvciBlYXNpZXIgZGV2ZWxvcG1lbnQvZGVidWdnaW5nCklu
ZGV4OiBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvUGx1Z2lucy9OZXRzY2FwZS9KU05QT2JqZWN0
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1BsdWdpbnMvTmV0c2Nh
cGUvSlNOUE9iamVjdC5oCShyZXZpc2lvbiAyNzY1ODUpCisrKyBTb3VyY2UvV2ViS2l0L1dlYlBy
b2Nlc3MvUGx1Z2lucy9OZXRzY2FwZS9KU05QT2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTQ0
LDcgKzQ0LDcgQEAgY2xhc3MgTlBSdW50aW1lT2JqZWN0TWFwOwogY2xhc3MgSlNOUE9iamVjdCBm
aW5hbCA6IHB1YmxpYyBKU0M6OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0IHsKIHB1YmxpYzoKICAgICB1
c2luZyBCYXNlID0gSlNDOjpKU0Rlc3RydWN0aWJsZU9iamVjdDsKLSAgICBzdGF0aWMgY29uc3Rl
eHByIHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxhZ3MgfCBKU0M6
Ok92ZXJyaWRlc0dldE93blByb3BlcnR5U2xvdCB8IEpTQzo6T3ZlcnJpZGVzR2V0T3duUHJvcGVy
dHlOYW1lcyB8IEpTQzo6T3ZlcnJpZGVzR2V0Q2FsbERhdGEgfCBKU0M6OkdldE93blByb3BlcnR5
U2xvdE1heUJlV3JvbmdBYm91dERvbnRFbnVtOworICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWdu
ZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8IEpTQzo6T3ZlcnJpZGVz
R2V0T3duUHJvcGVydHlTbG90IHwgSlNDOjpPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eU5hbWVzIHwg
SlNDOjpPdmVycmlkZXNHZXRDYWxsRGF0YSB8IEpTQzo6T3ZlcnJpZGVzUHV0IHwgSlNDOjpHZXRP
d25Qcm9wZXJ0eVNsb3RNYXlCZVdyb25nQWJvdXREb250RW51bTsKIAogICAgIHRlbXBsYXRlPHR5
cGVuYW1lIENlbGxUeXBlLCBKU0M6OlN1YnNwYWNlQWNjZXNzPgogICAgIHN0YXRpYyBKU0M6Oklz
b1N1YnNwYWNlKiBzdWJzcGFjZUZvcihKU0M6OlZNJiB2bSkKSW5kZXg6IExheW91dFRlc3RzL0No
YW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHJldmlzaW9uIDI3
NjU4NSkKKysrIExheW91dFRlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsx
LDE1IEBACisyMDIxLTA0LTI2ICBBbGV4ZXkgU2h2YXlrYSAgPHNodmFpa2FsZXNoQGdtYWlsLmNv
bT4KKworICAgICAgICBbSlNDXSBPcmRpbmFyeVNldCBzaG91bGQgaW52b2tlIGN1c3RvbSBbW1Nl
dF1dIG1ldGhvZHMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTIxNzkxNgorCisgICAgICAgIFJldmlld2VkIGJ5IFl1c3VrZSBTdXp1a2kuCisKKyAgICAg
ICAgKiBodHRwL3Rlc3RzL3NlY3VyaXR5L2Nyb3NzLWZyYW1lLWFjY2Vzcy1vYmplY3QtZ2V0UHJv
dG90eXBlT2YtaW4tcHV0LWV4cGVjdGVkLnR4dDoKKyAgICAgICAgKiBodHRwL3Rlc3RzL3NlY3Vy
aXR5L2Nyb3NzLWZyYW1lLWFjY2Vzcy1vYmplY3QtZ2V0UHJvdG90eXBlT2YtaW4tcHV0Lmh0bWw6
CisgICAgICAgICoganMvZG9tL3JlZmxlY3Qtc2V0LW9udG8tZG9tLWV4cGVjdGVkLnR4dDoKKyAg
ICAgICAgKiBqcy9kb20vc2NyaXB0LXRlc3RzL3JlZmxlY3Qtc2V0LW9udG8tZG9tLmpzOgorCiAy
MDIxLTA0LTI1ICBSeW9zdWtlIE5pd2EgIDxybml3YUB3ZWJraXQub3JnPgogCiAgICAgICAgIFJl
c3luYyBXUFQgc2hhZG93IERPTSB0ZXN0cyBhcyBvZiAwMmYwY2MxMApJbmRleDogTGF5b3V0VGVz
dHMvaHR0cC90ZXN0cy9zZWN1cml0eS9jcm9zcy1mcmFtZS1hY2Nlc3Mtb2JqZWN0LWdldFByb3Rv
dHlwZU9mLWluLXB1dC1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvaHR0
cC90ZXN0cy9zZWN1cml0eS9jcm9zcy1mcmFtZS1hY2Nlc3Mtb2JqZWN0LWdldFByb3RvdHlwZU9m
LWluLXB1dC1leHBlY3RlZC50eHQJKHJldmlzaW9uIDI3NjU4NSkKKysrIExheW91dFRlc3RzL2h0
dHAvdGVzdHMvc2VjdXJpdHkvY3Jvc3MtZnJhbWUtYWNjZXNzLW9iamVjdC1nZXRQcm90b3R5cGVP
Zi1pbi1wdXQtZXhwZWN0ZWQudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNyBAQAogVGhp
cyB0ZXN0cyB0aGF0IHlvdSBjYW4ndCBnZXQgdGhlIHByb3RvdHlwZSBvZiB0aGUgd2luZG93IGR1
cmluZyBbW1B1dF1dIG9wZXJhdGlvbi4KIAorUEFTUyBhcnJheS5jb2NvYSA9IGNvY29hVmFsdWUg
dGhyZXcgZXhjZXB0aW9uIFNlY3VyaXR5RXJyb3I6IEJsb2NrZWQgYSBmcmFtZSB3aXRoIG9yaWdp
biAiaHR0cDovLzEyNy4wLjAuMTo4MDAwIiBmcm9tIGFjY2Vzc2luZyBhIGNyb3NzLW9yaWdpbiBm
cmFtZS4gUHJvdG9jb2xzLCBkb21haW5zLCBhbmQgcG9ydHMgbXVzdCBtYXRjaC4uCitQQVNTICdz
dHInLmNvY29hID0gY29jb2FWYWx1ZSB0aHJldyBleGNlcHRpb24gU2VjdXJpdHlFcnJvcjogQmxv
Y2tlZCBhIGZyYW1lIHdpdGggb3JpZ2luICJodHRwOi8vMTI3LjAuMC4xOjgwMDAiIGZyb20gYWNj
ZXNzaW5nIGEgY3Jvc3Mtb3JpZ2luIGZyYW1lLiBQcm90b2NvbHMsIGRvbWFpbnMsIGFuZCBwb3J0
cyBtdXN0IG1hdGNoLi4KIFBBU1M6IHN1Y2Nlc3NmdWxseVBhcnNlZCBzaG91bGQgYmUgJ3RydWUn
IGFuZCBpcy4KIAogVEVTVCBDT01QTEVURQpJbmRleDogTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9z
ZWN1cml0eS9jcm9zcy1mcmFtZS1hY2Nlc3Mtb2JqZWN0LWdldFByb3RvdHlwZU9mLWluLXB1dC5o
dG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2h0dHAvdGVzdHMvc2VjdXJpdHkvY3Jvc3Mt
ZnJhbWUtYWNjZXNzLW9iamVjdC1nZXRQcm90b3R5cGVPZi1pbi1wdXQuaHRtbAkocmV2aXNpb24g
Mjc2NTg1KQorKysgTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9zZWN1cml0eS9jcm9zcy1mcmFtZS1h
Y2Nlc3Mtb2JqZWN0LWdldFByb3RvdHlwZU9mLWluLXB1dC5odG1sCSh3b3JraW5nIGNvcHkpCkBA
IC0xNSw3ICsxNSw3IEBACiAgICAgICAgIGRvVGVzdCA9IGZ1bmN0aW9uKCkKICAgICAgICAgewog
ICAgICAgICAgICAgdGFyZ2V0V2luZG93ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInRhcmdl
dCIpLmNvbnRlbnRXaW5kb3c7Ci0gICAgICAgICAgICB2YXIgYXJyYXkgPSBbXTsKKyAgICAgICAg
ICAgIGFycmF5ID0gW107CiAgICAgICAgICAgICBhcnJheS5fX3Byb3RvX18uX19wcm90b19fID0g
dGFyZ2V0V2luZG93OwogICAgICAgICAgICAgYXJyYXlbMF0gPSAxMS4xMTsKICAgICAgICAgICAg
IGFycmF5WzJdID0gMjIuMjI7CkBAIC0yNCwxMSArMjQsMTUgQEAKICAgICAgICAgICAgICAgICAg
ICAgdGVzdEZhaWxlZCgidG9TdHJpbmcgaXMgY2FsbGVkIGJ5IDEwMTAxMDEwIHNldHRlciIpOwog
ICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH07Ci0gICAgICAgICAgICBhcnJheVsiY29j
b2EiXSA9IHsKKyAgICAgICAgICAgIGNvY29hVmFsdWUgPSB7CiAgICAgICAgICAgICAgICAgdG9T
dHJpbmcoKSB7CiAgICAgICAgICAgICAgICAgICAgIHRlc3RGYWlsZWQoInRvU3RyaW5nIGlzIGNh
bGxlZCBieSBjb2NvYSBzZXR0ZXIiKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9
OworICAgICAgICAgICAgc2hvdWxkVGhyb3dFcnJvck5hbWUoImFycmF5LmNvY29hID0gY29jb2FW
YWx1ZSIsICJTZWN1cml0eUVycm9yIik7CisKKyAgICAgICAgICAgIE9iamVjdC5zZXRQcm90b3R5
cGVPZihTdHJpbmcucHJvdG90eXBlLCB0YXJnZXRXaW5kb3cpOworICAgICAgICAgICAgc2hvdWxk
VGhyb3dFcnJvck5hbWUoIidzdHInLmNvY29hID0gY29jb2FWYWx1ZSIsICJTZWN1cml0eUVycm9y
Iik7CiAgICAgICAgICAgICBmaW5pc2hKU1Rlc3QoKTsKICAgICAgICAgfQogICAgIDwvc2NyaXB0
PgpJbmRleDogTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL0NoYW5nZUxvZwo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBMYXlvdXRUZXN0cy9pbXBvcnRlZC93M2MvQ2hhbmdlTG9nCShyZXZpc2lvbiAyNzY1ODUpCisr
KyBMYXlvdXRUZXN0cy9pbXBvcnRlZC93M2MvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDMgKzEsMTUgQEAKKzIwMjEtMDQtMjYgIEFsZXhleSBTaHZheWthICA8c2h2YWlrYWxlc2hAZ21h
aWwuY29tPgorCisgICAgICAgIFtKU0NdIE9yZGluYXJ5U2V0IHNob3VsZCBpbnZva2UgY3VzdG9t
IFtbU2V0XV0gbWV0aG9kcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MjE3OTE2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgWXVzdWtlIFN1enVraS4KKwor
ICAgICAgICAqIHdlYi1wbGF0Zm9ybS10ZXN0cy9XZWJJREwvZWNtYXNjcmlwdC1iaW5kaW5nL2lu
dGVyZmFjZS1vYmplY3Qtc2V0LXJlY2VpdmVyLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAg
ICogd2ViLXBsYXRmb3JtLXRlc3RzL1dlYklETC9lY21hc2NyaXB0LWJpbmRpbmcvaW50ZXJmYWNl
LW9iamVjdC1zZXQtcmVjZWl2ZXIuaHRtbDogQWRkZWQuCisgICAgICAgICogd2ViLXBsYXRmb3Jt
LXRlc3RzL1dlYklETC9lY21hc2NyaXB0LWJpbmRpbmcvaW50ZXJmYWNlLXByb3RvdHlwZS1jb25z
dHJ1Y3Rvci1zZXQtcmVjZWl2ZXItZXhwZWN0ZWQudHh0OgorICAgICAgICAqIHdlYi1wbGF0Zm9y
bS10ZXN0cy9XZWJJREwvZWNtYXNjcmlwdC1iaW5kaW5nL2ludGVyZmFjZS1wcm90b3R5cGUtY29u
c3RydWN0b3Itc2V0LXJlY2VpdmVyLmh0bWw6CisKIDIwMjEtMDQtMjYgIFJ5b3N1a2UgTml3YSAg
PHJuaXdhQHdlYmtpdC5vcmc+CiAKICAgICAgICAgSW1wbGVtZW50IFNoYWRvd1Jvb3QucHJvdG90
eXBlLmRlbGVnYXRlc0ZvY3VzIGF0dHJpYnV0ZQpJbmRleDogTGF5b3V0VGVzdHMvaW1wb3J0ZWQv
dzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9XZWJJREwvZWNtYXNjcmlwdC1iaW5kaW5nL2ludGVyZmFj
ZS1vYmplY3Qtc2V0LXJlY2VpdmVyLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRU
ZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL1dlYklETC9lY21hc2NyaXB0LWJp
bmRpbmcvaW50ZXJmYWNlLW9iamVjdC1zZXQtcmVjZWl2ZXItZXhwZWN0ZWQudHh0CShub25leGlz
dGVudCkKKysrIExheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvV2Vi
SURML2VjbWFzY3JpcHQtYmluZGluZy9pbnRlcmZhY2Utb2JqZWN0LXNldC1yZWNlaXZlci1leHBl
Y3RlZC50eHQJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0IEBACisKK1BBU1MgRGlyZWN0IFtb
U2V0XV0gcHJlc2VydmVzIFtbRW51bWVyYWJsZV1dOiBmYWxzZSBwcm9wZXJ0eSBhdHRyaWJ1dGUK
K1BBU1MgUHJvdG90eXBlIGNoYWluIFtbU2V0XV0gY3JlYXRlcyBwcm9wZXJ0eSBvbiByZWNlaXZl
cgorCkluZGV4OiBMYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL1dl
YklETC9lY21hc2NyaXB0LWJpbmRpbmcvaW50ZXJmYWNlLW9iamVjdC1zZXQtcmVjZWl2ZXIuaHRt
bAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRl
c3RzL1dlYklETC9lY21hc2NyaXB0LWJpbmRpbmcvaW50ZXJmYWNlLW9iamVjdC1zZXQtcmVjZWl2
ZXIuaHRtbAkobm9uZXhpc3RlbnQpCisrKyBMYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBs
YXRmb3JtLXRlc3RzL1dlYklETC9lY21hc2NyaXB0LWJpbmRpbmcvaW50ZXJmYWNlLW9iamVjdC1z
ZXQtcmVjZWl2ZXIuaHRtbAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDM3IEBACis8IURPQ1RZ
UEUgaHRtbD4KKzxtZXRhIGNoYXJzZXQ9InV0Zi04Ij4KKzx0aXRsZT53aW5kb3cuSW50ZXJmYWNl
IGlzIGRlZmluZWQgb24gW1tTZXRdXSByZWNlaXZlcjwvdGl0bGU+Cis8bGluayByZWw9ImhlbHAi
IGhyZWY9Imh0dHBzOi8vaGV5Y2FtLmdpdGh1Yi5pby93ZWJpZGwvI2RlZmluZS10aGUtZ2xvYmFs
LXByb3BlcnR5LXJlZmVyZW5jZXMiPgorPHNjcmlwdCBzcmM9Ii9yZXNvdXJjZXMvdGVzdGhhcm5l
c3MuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii9yZXNvdXJjZXMvdGVzdGhhcm5lc3NyZXBv
cnQuanMiPjwvc2NyaXB0PgorPHNjcmlwdD4KKyJ1c2Ugc3RyaWN0IjsKK2NvbnN0IHRlc3RWYWx1
ZSA9IE9iamVjdC5mcmVlemUoZnVuY3Rpb24oKSB7fSk7CisKK3Rlc3QoKCkgPT4geworICB3aW5k
b3cuV2luZG93ID0gdGVzdFZhbHVlOworICBhc3NlcnRfZmFsc2Uod2luZG93LnByb3BlcnR5SXNF
bnVtZXJhYmxlKCJXaW5kb3ciKSk7CisKKyAgd2luZG93Lkhpc3RvcnkgPSB0ZXN0VmFsdWU7Cisg
IGFzc2VydF9mYWxzZSh3aW5kb3cucHJvcGVydHlJc0VudW1lcmFibGUoIkhpc3RvcnkiKSk7CisK
KyAgd2luZG93LkhUTUxEaXZFbGVtZW50ID0gdGVzdFZhbHVlOworICBhc3NlcnRfZmFsc2Uod2lu
ZG93LnByb3BlcnR5SXNFbnVtZXJhYmxlKCJIVE1MRGl2RWxlbWVudCIpKQorfSwgIkRpcmVjdCBb
W1NldF1dIHByZXNlcnZlcyBbW0VudW1lcmFibGVdXTogZmFsc2UgcHJvcGVydHkgYXR0cmlidXRl
Iik7CisKK3Rlc3QoKCkgPT4geworICBjb25zdCBoZWlyID0gT2JqZWN0LmNyZWF0ZSh3aW5kb3cp
OworCisgIGhlaXIuTG9jYXRpb24gPSB0ZXN0VmFsdWU7CisgIGFzc2VydF9lcXVhbHMoaGVpci5M
b2NhdGlvbiwgdGVzdFZhbHVlKTsKKyAgYXNzZXJ0X25vdF9lcXVhbHMod2luZG93LkxvY2F0aW9u
LCB0ZXN0VmFsdWUpOworCisgIGhlaXIuSFRNTERvY3VtZW50ID0gdGVzdFZhbHVlOworICBhc3Nl
cnRfZXF1YWxzKGhlaXIuSFRNTERvY3VtZW50LCB0ZXN0VmFsdWUpOworICBhc3NlcnRfbm90X2Vx
dWFscyh3aW5kb3cuSFRNTERvY3VtZW50LCB0ZXN0VmFsdWUpOworCisgIGhlaXIuSFRNTFByZUVs
ZW1lbnQgPSB0ZXN0VmFsdWU7CisgIGFzc2VydF9lcXVhbHMoaGVpci5IVE1MUHJlRWxlbWVudCwg
dGVzdFZhbHVlKTsKKyAgYXNzZXJ0X25vdF9lcXVhbHMod2luZG93LkhUTUxQcmVFbGVtZW50LCB0
ZXN0VmFsdWUpOworfSwgIlByb3RvdHlwZSBjaGFpbiBbW1NldF1dIGNyZWF0ZXMgcHJvcGVydHkg
b24gcmVjZWl2ZXIiKTsKKzwvc2NyaXB0PgpJbmRleDogTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNj
L3dlYi1wbGF0Zm9ybS10ZXN0cy9XZWJJREwvZWNtYXNjcmlwdC1iaW5kaW5nL2ludGVyZmFjZS1w
cm90b3R5cGUtY29uc3RydWN0b3Itc2V0LXJlY2VpdmVyLWV4cGVjdGVkLnR4dAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBMYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL1dlYklETC9l
Y21hc2NyaXB0LWJpbmRpbmcvaW50ZXJmYWNlLXByb3RvdHlwZS1jb25zdHJ1Y3Rvci1zZXQtcmVj
ZWl2ZXItZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAyNzY1ODUpCisrKyBMYXlvdXRUZXN0cy9pbXBv
cnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL1dlYklETC9lY21hc2NyaXB0LWJpbmRpbmcvaW50
ZXJmYWNlLXByb3RvdHlwZS1jb25zdHJ1Y3Rvci1zZXQtcmVjZWl2ZXItZXhwZWN0ZWQudHh0CSh3
b3JraW5nIGNvcHkpCkBAIC0xLDQgKzEsNCBAQAogCi1QQVNTIFdpbmRvdywgTG9jYXRpb24sIE5h
dmlnYXRvciwgSFRNTERvY3VtZW50LCBhbmQgSFRNTEhlYWRFbGVtZW50Ci1QQVNTIEFsbCB3aW5k
b3cuKiBjb25zdHJ1Y3RvcnMKK1BBU1MgRGlyZWN0IFtbU2V0XV0gcHJlc2VydmVzIFtbRW51bWVy
YWJsZV1dOiBmYWxzZSBwcm9wZXJ0eSBhdHRyaWJ1dGUKK1BBU1MgUHJvdG90eXBlIGNoYWluIFtb
U2V0XV0gY3JlYXRlcyBwcm9wZXJ0eSBvbiByZWNlaXZlcgogCkluZGV4OiBMYXlvdXRUZXN0cy9p
bXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL1dlYklETC9lY21hc2NyaXB0LWJpbmRpbmcv
aW50ZXJmYWNlLXByb3RvdHlwZS1jb25zdHJ1Y3Rvci1zZXQtcmVjZWl2ZXIuaHRtbAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBMYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL1dlYklE
TC9lY21hc2NyaXB0LWJpbmRpbmcvaW50ZXJmYWNlLXByb3RvdHlwZS1jb25zdHJ1Y3Rvci1zZXQt
cmVjZWl2ZXIuaHRtbAkocmV2aXNpb24gMjc2NTg1KQorKysgTGF5b3V0VGVzdHMvaW1wb3J0ZWQv
dzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9XZWJJREwvZWNtYXNjcmlwdC1iaW5kaW5nL2ludGVyZmFj
ZS1wcm90b3R5cGUtY29uc3RydWN0b3Itc2V0LXJlY2VpdmVyLmh0bWwJKHdvcmtpbmcgY29weSkK
QEAgLTYsNDIgKzYsMzEgQEAKIDxzY3JpcHQgc3JjPSIvcmVzb3VyY2VzL3Rlc3RoYXJuZXNzcmVw
b3J0LmpzIj48L3NjcmlwdD4KIDxzY3JpcHQ+CiAidXNlIHN0cmljdCI7Citjb25zdCB0ZXN0VmFs
dWUgPSBPYmplY3QuZnJlZXplKGZ1bmN0aW9uKCkge30pOwogCiB0ZXN0KCgpID0+IHsKLSAgd2lu
ZG93LmNvbnN0cnVjdG9yID0gbnVsbDsKLSAgYXNzZXJ0X2VxdWFscyhXaW5kb3cucHJvdG90eXBl
LmNvbnN0cnVjdG9yLCBXaW5kb3cpOwotCi0gIGxvY2F0aW9uLmNvbnN0cnVjdG9yID0gZmFsc2U7
Ci0gIGFzc2VydF9lcXVhbHMoTG9jYXRpb24ucHJvdG90eXBlLmNvbnN0cnVjdG9yLCBMb2NhdGlv
bik7Ci0KLSAgbmF2aWdhdG9yLmNvbnN0cnVjdG9yID0gMTsKLSAgYXNzZXJ0X2VxdWFscyhOYXZp
Z2F0b3IucHJvdG90eXBlLmNvbnN0cnVjdG9yLCBOYXZpZ2F0b3IpOworICBMb2NhdGlvbi5wcm90
b3R5cGUuY29uc3RydWN0b3IgPSB0ZXN0VmFsdWU7CisgIGFzc2VydF9mYWxzZShMb2NhdGlvbi5w
cm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUoImNvbnN0cnVjdG9yIikpOwogCi0gIGRvY3Vt
ZW50LmNvbnN0cnVjdG9yID0ge307Ci0gIGFzc2VydF9lcXVhbHMoSFRNTERvY3VtZW50LnByb3Rv
dHlwZS5jb25zdHJ1Y3RvciwgSFRNTERvY3VtZW50KTsKKyAgSFRNTERvY3VtZW50LnByb3RvdHlw
ZS5jb25zdHJ1Y3RvciA9IHRlc3RWYWx1ZTsKKyAgYXNzZXJ0X2ZhbHNlKEhUTUxEb2N1bWVudC5w
cm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUoImNvbnN0cnVjdG9yIikpOwogCi0gIGRvY3Vt
ZW50LmhlYWQuY29uc3RydWN0b3IgPSBbXTsKLSAgYXNzZXJ0X2VxdWFscyhIVE1MSGVhZEVsZW1l
bnQucHJvdG90eXBlLmNvbnN0cnVjdG9yLCBIVE1MSGVhZEVsZW1lbnQpOwotfSwgIldpbmRvdywg
TG9jYXRpb24sIE5hdmlnYXRvciwgSFRNTERvY3VtZW50LCBhbmQgSFRNTEhlYWRFbGVtZW50Iik7
CisgIEhUTUxEaXZFbGVtZW50LnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IHRlc3RWYWx1ZTsKKyAg
YXNzZXJ0X2ZhbHNlKEhUTUxEaXZFbGVtZW50LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJs
ZSgiY29uc3RydWN0b3IiKSk7Cit9LCAiRGlyZWN0IFtbU2V0XV0gcHJlc2VydmVzIFtbRW51bWVy
YWJsZV1dOiBmYWxzZSBwcm9wZXJ0eSBhdHRyaWJ1dGUiKTsKIAogdGVzdCgoKSA9PiB7Ci0gIGZv
ciAobGV0IGtleSBvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyh3aW5kb3cpKSB7Ci0gICAg
aWYgKCEvXltBLVpdLy50ZXN0KGtleSkpIGNvbnRpbnVlOworICB3aW5kb3cuY29uc3RydWN0b3Ig
PSB0ZXN0VmFsdWU7CisgIGFzc2VydF9lcXVhbHMod2luZG93LmNvbnN0cnVjdG9yLCB0ZXN0VmFs
dWUpOworICBhc3NlcnRfZXF1YWxzKFdpbmRvdy5wcm90b3R5cGUuY29uc3RydWN0b3IsIFdpbmRv
dyk7CisKKyAgbmF2aWdhdG9yLmNvbnN0cnVjdG9yID0gdGVzdFZhbHVlOworICBhc3NlcnRfZXF1
YWxzKG5hdmlnYXRvci5jb25zdHJ1Y3RvciwgdGVzdFZhbHVlKTsKKyAgYXNzZXJ0X2VxdWFscyhO
YXZpZ2F0b3IucHJvdG90eXBlLmNvbnN0cnVjdG9yLCBOYXZpZ2F0b3IpOwogCi0gICAgbGV0IGRl
c2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHdpbmRvdywga2V5KTsKLSAgICBp
ZiAoIWRlc2MgfHwgZGVzYy5lbnVtZXJhYmxlKSBjb250aW51ZTsKLSAgICBsZXQge3ZhbHVlfSA9
IGRlc2M7Ci0gICAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gImZ1bmN0aW9uIikgY29udGludWU7Ci0g
ICAgbGV0IHtwcm90b3R5cGV9ID0gdmFsdWU7Ci0gICAgaWYgKCFwcm90b3R5cGUpIGNvbnRpbnVl
OwotCi0gICAgbGV0IGhlaXIgPSBPYmplY3QuY3JlYXRlKHByb3RvdHlwZSk7Ci0gICAgbGV0IG5l
d0NvbnN0cnVjdG9yID0gZnVuY3Rpb24oKSB7fTsKLSAgICBoZWlyLmNvbnN0cnVjdG9yID0gbmV3
Q29uc3RydWN0b3I7Ci0KLSAgICBhc3NlcnRfbm90X2VxdWFscyhwcm90b3R5cGUuY29uc3RydWN0
b3IsIG5ld0NvbnN0cnVjdG9yLCBrZXkpOwotICAgIGFzc2VydF9vd25fcHJvcGVydHkoaGVpciwg
ImNvbnN0cnVjdG9yIiwga2V5KTsKLSAgICBhc3NlcnRfZXF1YWxzKGhlaXIuY29uc3RydWN0b3Is
IG5ld0NvbnN0cnVjdG9yLCBrZXkpOwotICB9Ci19LCAiQWxsIHdpbmRvdy4qIGNvbnN0cnVjdG9y
cyIpOworICBjb25zdCBzcGFuID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic3BhbiIpOworICBz
cGFuLmNvbnN0cnVjdG9yID0gdGVzdFZhbHVlOworICBhc3NlcnRfZXF1YWxzKHNwYW4uY29uc3Ry
dWN0b3IsIHRlc3RWYWx1ZSk7CisgIGFzc2VydF9lcXVhbHMoSFRNTFNwYW5FbGVtZW50LnByb3Rv
dHlwZS5jb25zdHJ1Y3RvciwgSFRNTFNwYW5FbGVtZW50KTsKK30sICJQcm90b3R5cGUgY2hhaW4g
W1tTZXRdXSBjcmVhdGVzIHByb3BlcnR5IG9uIHJlY2VpdmVyIik7CiA8L3NjcmlwdD4KSW5kZXg6
IExheW91dFRlc3RzL2pzL2RvbS9yZWZsZWN0LXNldC1vbnRvLWRvbS1leHBlY3RlZC50eHQKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gTGF5b3V0VGVzdHMvanMvZG9tL3JlZmxlY3Qtc2V0LW9udG8tZG9tLWV4cGVj
dGVkLnR4dAkocmV2aXNpb24gMjc2NTg1KQorKysgTGF5b3V0VGVzdHMvanMvZG9tL3JlZmxlY3Qt
c2V0LW9udG8tZG9tLWV4cGVjdGVkLnR4dAkod29ya2luZyBjb3B5KQpAQCAtOTMsMTMgKzkzLDEz
IEBAIFBBU1MgUmVmbGVjdC5nZXQoZG9jdW1lbnQuYm9keS5kYXRhc2V0LCAKIFBBU1MgUmVmbGVj
dC5zZXQoZG9jdW1lbnQuYm9keS5kYXRhc2V0LCAiY29jb2EtY2FwcHVjY2lubyIsICJzd2VldCIp
IHRocmV3IGV4Y2VwdGlvbiBTeW50YXhFcnJvcjogVGhlIHN0cmluZyBkaWQgbm90IG1hdGNoIHRo
ZSBleHBlY3RlZCBwYXR0ZXJuLi4KIFBBU1MgUmVmbGVjdC5zZXQoZG9jdW1lbnQuYm9keS5kYXRh
c2V0LCAwLCAic3dlZXQiKSBpcyB0cnVlCiBQQVNTIFJlZmxlY3QuZ2V0KGRvY3VtZW50LmJvZHku
ZGF0YXNldCwgMCkgaXMgInN3ZWV0IgotRE9NU3RyaW5nTWFwIGlnbm9yZXMgdGhlIHJlY2VpdmVy
LiBUaGVzZSBwdXREZWxlZ2F0ZSBvbmx5IHdvcmsgd2l0aCA6OnB1dCAobm90IDo6ZGVmaW5lT3du
UHJvcGVydHkpLiBTbyB0aGV5IGJlaGF2ZSBhcyB0aGUgc3BlY2lhbCBzZXR0ZXIsIHdlIHNob3Vs
ZCBub3QgZmFsbGJhY2sgdG8gdGhlIE9yZGluYXJ5U2V0LgorRE9NU3RyaW5nTWFwIGZhbGxzIGJh
Y2sgdG8gT3JkaW5hcnlTZXQgaWYgcmVjZWl2ZXIgaXMgYWx0ZXJlZC4KIFBBU1MgUmVmbGVjdC5z
ZXQoZG9jdW1lbnQuYm9keS5kYXRhc2V0LCAiY29jb2EiLCAib2siLCByZWNlaXZlcikgaXMgdHJ1
ZQotUEFTUyBSZWZsZWN0LmdldChkb2N1bWVudC5ib2R5LmRhdGFzZXQsICJjb2NvYSIpIGlzICJv
ayIKLVBBU1MgUmVmbGVjdC5nZXQocmVjZWl2ZXIsICJjb2NvYSIpIGlzIHVuZGVmaW5lZAorUEFT
UyBSZWZsZWN0LmdldChkb2N1bWVudC5ib2R5LmRhdGFzZXQsICJjb2NvYSIpIGlzICJzd2VldCIK
K1BBU1MgUmVmbGVjdC5nZXQocmVjZWl2ZXIsICJjb2NvYSIpIGlzICJvayIKIFBBU1MgUmVmbGVj
dC5zZXQoZG9jdW1lbnQuYm9keS5kYXRhc2V0LCAwLCAib2siLCByZWNlaXZlcikgaXMgdHJ1ZQot
UEFTUyBSZWZsZWN0LmdldChkb2N1bWVudC5ib2R5LmRhdGFzZXQsIDApIGlzICJvayIKLVBBU1Mg
UmVmbGVjdC5nZXQocmVjZWl2ZXIsIDApIGlzIHVuZGVmaW5lZAorUEFTUyBSZWZsZWN0LmdldChk
b2N1bWVudC5ib2R5LmRhdGFzZXQsIDApIGlzICJzd2VldCIKK1BBU1MgUmVmbGVjdC5nZXQocmVj
ZWl2ZXIsIDApIGlzICJvayIKIEN1c3RvbUluZGV4ZWRTZXR0ZXIKIFBBU1MgUmVmbGVjdC5nZXQo
c2VsZWN0LCAwKS52YWx1ZSBpcyAiY29jb2EiCiBQQVNTIFJlZmxlY3QuZ2V0KHNlbGVjdCwgImxl
bmd0aCIpIGlzIDMKQEAgLTExMSwxMCArMTExLDEwIEBAIFBBU1MgUmVmbGVjdC5nZXQoc2VsZWN0
LCAibGVuZ3RoIikgaXMgNDIKIFBBU1MgUmVmbGVjdC5zZXQoc2VsZWN0LCA0NCwgb3B0aW9uMikg
aXMgdHJ1ZQogUEFTUyBSZWZsZWN0LmdldChzZWxlY3QsIDQ0KS52YWx1ZSBpcyAia2lsaW1hbmph
cm8iCiBQQVNTIFJlZmxlY3Quc2V0KHNlbGVjdCwgMjAsICJLaWxpbWFuamFybyIpIHRocmV3IGV4
Y2VwdGlvbiBUeXBlRXJyb3I6IFR5cGUgZXJyb3IuCi1DdXN0b21JbmRleGVkU2V0dGVyIGlnbm9y
ZXMgdGhlIHJlY2VpdmVyLiBUaGVzZSBtZXRob2RzIG9ubHkgd29yayB3aXRoIDo6cHV0IChub3Qg
OjpkZWZpbmVPd25Qcm9wZXJ0eSkuIFNvIHRoZXkgYmVoYXZlIGFzIHRoZSBzcGVjaWFsIHNldHRl
ciwgd2Ugc2hvdWxkIG5vdCBmYWxsYmFjayB0byB0aGUgT3JkaW5hcnlTZXQuCitDdXN0b21JbmRl
eGVkU2V0dGVyIGZhbGxzIGJhY2sgdG8gT3JkaW5hcnlTZXQgaWYgcmVjZWl2ZXIgaXMgYWx0ZXJl
ZC4KIFBBU1MgUmVmbGVjdC5zZXQoc2VsZWN0LCAwLCBvcHRpb24zLCByZWNlaXZlcikgaXMgdHJ1
ZQotUEFTUyBSZWZsZWN0LmdldChyZWNlaXZlciwgMCkgaXMgdW5kZWZpbmVkCi1QQVNTIFJlZmxl
Y3QuZ2V0KHNlbGVjdCwgMCkgaXMgb3B0aW9uMworUEFTUyBSZWZsZWN0LmdldChyZWNlaXZlciwg
MCkgaXMgb3B0aW9uMworUEFTUyBSZWZsZWN0LmdldChzZWxlY3QsIDApIGlzIHNlbGVjdC5jaGls
ZHJlblswXQogUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQogCiBURVNUIENPTVBMRVRF
CkluZGV4OiBMYXlvdXRUZXN0cy9qcy9kb20vc2NyaXB0LXRlc3RzL3JlZmxlY3Qtc2V0LW9udG8t
ZG9tLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2pzL2RvbS9zY3JpcHQtdGVzdHMvcmVm
bGVjdC1zZXQtb250by1kb20uanMJKHJldmlzaW9uIDI3NjU4NSkKKysrIExheW91dFRlc3RzL2pz
L2RvbS9zY3JpcHQtdGVzdHMvcmVmbGVjdC1zZXQtb250by1kb20uanMJKHdvcmtpbmcgY29weSkK
QEAgLTExNiwxNSArMTE2LDE1IEBAIHNob3VsZFRocm93KGBSZWZsZWN0LnNldChkb2N1bWVudC5i
b2R5LmQKIHNob3VsZEJlKGBSZWZsZWN0LnNldChkb2N1bWVudC5ib2R5LmRhdGFzZXQsIDAsICJz
d2VldCIpYCwgYHRydWVgKTsKIHNob3VsZEJlKGBSZWZsZWN0LmdldChkb2N1bWVudC5ib2R5LmRh
dGFzZXQsIDApYCwgYCJzd2VldCJgKTsKIAotZGVidWcoIkRPTVN0cmluZ01hcCBpZ25vcmVzIHRo
ZSByZWNlaXZlci4gVGhlc2UgcHV0RGVsZWdhdGUgb25seSB3b3JrIHdpdGggOjpwdXQgKG5vdCA6
OmRlZmluZU93blByb3BlcnR5KS4gU28gdGhleSBiZWhhdmUgYXMgdGhlIHNwZWNpYWwgc2V0dGVy
LCB3ZSBzaG91bGQgbm90IGZhbGxiYWNrIHRvIHRoZSBPcmRpbmFyeVNldC4iKTsKK2RlYnVnKCJE
T01TdHJpbmdNYXAgZmFsbHMgYmFjayB0byBPcmRpbmFyeVNldCBpZiByZWNlaXZlciBpcyBhbHRl
cmVkLiIpOwogdmFyIHJlY2VpdmVyID0ge307CiBzaG91bGRCZShgUmVmbGVjdC5zZXQoZG9jdW1l
bnQuYm9keS5kYXRhc2V0LCAiY29jb2EiLCAib2siLCByZWNlaXZlcilgLCBgdHJ1ZWApOwotc2hv
dWxkQmUoYFJlZmxlY3QuZ2V0KGRvY3VtZW50LmJvZHkuZGF0YXNldCwgImNvY29hIilgLCBgIm9r
ImApOwotc2hvdWxkQmUoYFJlZmxlY3QuZ2V0KHJlY2VpdmVyLCAiY29jb2EiKWAsIGB1bmRlZmlu
ZWRgKTsKK3Nob3VsZEJlKGBSZWZsZWN0LmdldChkb2N1bWVudC5ib2R5LmRhdGFzZXQsICJjb2Nv
YSIpYCwgYCJzd2VldCJgKTsKK3Nob3VsZEJlKGBSZWZsZWN0LmdldChyZWNlaXZlciwgImNvY29h
IilgLCBgIm9rImApOwogdmFyIHJlY2VpdmVyID0ge307CiBzaG91bGRCZShgUmVmbGVjdC5zZXQo
ZG9jdW1lbnQuYm9keS5kYXRhc2V0LCAwLCAib2siLCByZWNlaXZlcilgLCBgdHJ1ZWApOwotc2hv
dWxkQmUoYFJlZmxlY3QuZ2V0KGRvY3VtZW50LmJvZHkuZGF0YXNldCwgMClgLCBgIm9rImApOwot
c2hvdWxkQmUoYFJlZmxlY3QuZ2V0KHJlY2VpdmVyLCAwKWAsIGB1bmRlZmluZWRgKTsKK3Nob3Vs
ZEJlKGBSZWZsZWN0LmdldChkb2N1bWVudC5ib2R5LmRhdGFzZXQsIDApYCwgYCJzd2VldCJgKTsK
K3Nob3VsZEJlKGBSZWZsZWN0LmdldChyZWNlaXZlciwgMClgLCBgIm9rImApOwogCiBkZWJ1Zygi
Q3VzdG9tSW5kZXhlZFNldHRlciIpOwogdmFyIHNlbGVjdCA9IGRvY3VtZW50LmdldEVsZW1lbnRC
eUlkKCJ0ZXN0U2VsZWN0Iik7CkBAIC0xNDYsMTEgKzE0NiwxMSBAQCBzaG91bGRCZShgUmVmbGVj
dC5zZXQoc2VsZWN0LCA0NCwgb3B0aW9uCiBzaG91bGRCZShgUmVmbGVjdC5nZXQoc2VsZWN0LCA0
NCkudmFsdWVgLCBgImtpbGltYW5qYXJvImApOwogc2hvdWxkVGhyb3coYFJlZmxlY3Quc2V0KHNl
bGVjdCwgMjAsICJLaWxpbWFuamFybyIpYCk7CiAKLWRlYnVnKCJDdXN0b21JbmRleGVkU2V0dGVy
IGlnbm9yZXMgdGhlIHJlY2VpdmVyLiBUaGVzZSBtZXRob2RzIG9ubHkgd29yayB3aXRoIDo6cHV0
IChub3QgOjpkZWZpbmVPd25Qcm9wZXJ0eSkuIFNvIHRoZXkgYmVoYXZlIGFzIHRoZSBzcGVjaWFs
IHNldHRlciwgd2Ugc2hvdWxkIG5vdCBmYWxsYmFjayB0byB0aGUgT3JkaW5hcnlTZXQuIik7Citk
ZWJ1ZygiQ3VzdG9tSW5kZXhlZFNldHRlciBmYWxscyBiYWNrIHRvIE9yZGluYXJ5U2V0IGlmIHJl
Y2VpdmVyIGlzIGFsdGVyZWQuIik7CiB2YXIgb3B0aW9uMyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1l
bnQoIm9wdGlvbiIpOwogb3B0aW9uMy52YWx1ZSA9ICJyYWJiaXQiOwogb3B0aW9uMy50ZXh0Q29u
dGVudCA9ICJSYWJiaXQiOwogdmFyIHJlY2VpdmVyID0ge307CiBzaG91bGRCZShgUmVmbGVjdC5z
ZXQoc2VsZWN0LCAwLCBvcHRpb24zLCByZWNlaXZlcilgLCBgdHJ1ZWApOwotc2hvdWxkQmUoYFJl
ZmxlY3QuZ2V0KHJlY2VpdmVyLCAwKWAsIGB1bmRlZmluZWRgKTsKLXNob3VsZEJlKGBSZWZsZWN0
LmdldChzZWxlY3QsIDApYCwgYG9wdGlvbjNgKTsKK3Nob3VsZEJlKGBSZWZsZWN0LmdldChyZWNl
aXZlciwgMClgLCBgb3B0aW9uM2ApOworc2hvdWxkQmUoYFJlZmxlY3QuZ2V0KHNlbGVjdCwgMClg
LCBgc2VsZWN0LmNoaWxkcmVuWzBdYCk7Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>