<?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>21403</bug_id>
          
          <creation_ts>2008-10-06 10:28:33 -0700</creation_ts>
          <short_desc>use new CallFrame class rather than Register* for call frame manipulation</short_desc>
          <delta_ts>2008-10-08 17:41:38 -0700</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>528+ (Nightly build)</version>
          <rep_platform>Mac</rep_platform>
          <op_sys>OS X 10.5</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Enhancement</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Darin Adler">darin</reporter>
          <assigned_to name="Darin Adler">darin</assigned_to>
          <cc>zwarich</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>94236</commentid>
    <comment_count>0</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2008-10-06 10:28:33 -0700</bug_when>
    <thetext>This is some cleanup I discussed with Geoff and Cameron.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>94237</commentid>
    <comment_count>1</comment_count>
      <attachid>24115</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2008-10-06 10:29:08 -0700</bug_when>
    <thetext>Created attachment 24115
work in progress</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>94290</commentid>
    <comment_count>2</comment_count>
      <attachid>24128</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2008-10-06 16:19:09 -0700</bug_when>
    <thetext>Created attachment 24128
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>94449</commentid>
    <comment_count>3</comment_count>
      <attachid>24128</attachid>
    <who name="Cameron Zwarich (cpst)">zwarich</who>
    <bug_when>2008-10-07 14:25:10 -0700</bug_when>
    <thetext>Comment on attachment 24128
patch

r=me

However, isn&apos;t it valid to use the BSD license on ExecState.cpp rather than the LGPL?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>94556</commentid>
    <comment_count>4</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2008-10-08 10:03:44 -0700</bug_when>
    <thetext>http://trac.webkit.org/changeset/37427</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>94575</commentid>
    <comment_count>5</comment_count>
    <who name="Timothy Hatcher">timothy</who>
    <bug_when>2008-10-08 10:59:23 -0700</bug_when>
    <thetext>Reopening because of the issues found in bug 21476.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>94653</commentid>
    <comment_count>6</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2008-10-08 17:41:38 -0700</bug_when>
    <thetext>Landed the corrected version.

http://trac.webkit.org/changeset/37433
</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>24115</attachid>
            <date>2008-10-06 10:29:08 -0700</date>
            <delta_ts>2008-10-06 16:19:09 -0700</delta_ts>
            <desc>work in progress</desc>
            <filename>ExecStateCleanupPatch.txt</filename>
            <type>text/plain</type>
            <size>291589</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">SW5kZXg6IEphdmFTY3JpcHRDb3JlL0FQSS9KU09iamVjdFJlZi5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
SmF2YVNjcmlwdENvcmUvQVBJL0pTT2JqZWN0UmVmLmNwcAkocmV2aXNpb24gMzczMzApCisrKyBK
YXZhU2NyaXB0Q29yZS9BUEkvSlNPYmplY3RSZWYuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05Miw3
ICs5Miw3IEBAIEpTT2JqZWN0UmVmIEpTT2JqZWN0TWFrZUZ1bmN0aW9uV2l0aENhbGwKICAgICBl
eGVjLT5nbG9iYWxEYXRhKCkuaGVhcC5yZWdpc3RlclRocmVhZCgpOwogICAgIEpTTG9jayBsb2Nr
KGV4ZWMpOwogCi0gICAgSWRlbnRpZmllciBuYW1lSUQgPSBuYW1lID8gbmFtZS0+aWRlbnRpZmll
cihleGVjKSA6IElkZW50aWZpZXIoZXhlYywgImFub255bW91cyIpOworICAgIElkZW50aWZpZXIg
bmFtZUlEID0gbmFtZSA/IG5hbWUtPmlkZW50aWZpZXIoJmV4ZWMtPmdsb2JhbERhdGEoKSkgOiBJ
ZGVudGlmaWVyKGV4ZWMsICJhbm9ueW1vdXMiKTsKICAgICAKICAgICByZXR1cm4gdG9SZWYobmV3
IChleGVjKSBKU0NhbGxiYWNrRnVuY3Rpb24oZXhlYywgY2FsbEFzRnVuY3Rpb24sIG5hbWVJRCkp
OwogfQpAQCAtMTE4LDcgKzExOCw3IEBAIEpTT2JqZWN0UmVmIEpTT2JqZWN0TWFrZUZ1bmN0aW9u
KEpTQ29udGUKICAgICBleGVjLT5nbG9iYWxEYXRhKCkuaGVhcC5yZWdpc3RlclRocmVhZCgpOwog
ICAgIEpTTG9jayBsb2NrKGV4ZWMpOwogCi0gICAgSWRlbnRpZmllciBuYW1lSUQgPSBuYW1lID8g
bmFtZS0+aWRlbnRpZmllcihleGVjKSA6IElkZW50aWZpZXIoZXhlYywgImFub255bW91cyIpOwor
ICAgIElkZW50aWZpZXIgbmFtZUlEID0gbmFtZSA/IG5hbWUtPmlkZW50aWZpZXIoJmV4ZWMtPmds
b2JhbERhdGEoKSkgOiBJZGVudGlmaWVyKGV4ZWMsICJhbm9ueW1vdXMiKTsKICAgICAKICAgICBB
cmdMaXN0IGFyZ3M7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHBhcmFtZXRlckNvdW50
OyBpKyspCkBAIC0yNDYsNyArMjQ2LDcgQEAgYm9vbCBKU09iamVjdEhhc1Byb3BlcnR5KEpTQ29u
dGV4dFJlZiBjdAogCiAgICAgSlNPYmplY3QqIGpzT2JqZWN0ID0gdG9KUyhvYmplY3QpOwogICAg
IAotICAgIHJldHVybiBqc09iamVjdC0+aGFzUHJvcGVydHkoZXhlYywgcHJvcGVydHlOYW1lLT5p
ZGVudGlmaWVyKGV4ZWMpKTsKKyAgICByZXR1cm4ganNPYmplY3QtPmhhc1Byb3BlcnR5KGV4ZWMs
IHByb3BlcnR5TmFtZS0+aWRlbnRpZmllcigmZXhlYy0+Z2xvYmFsRGF0YSgpKSk7CiB9CiAKIEpT
VmFsdWVSZWYgSlNPYmplY3RHZXRQcm9wZXJ0eShKU0NvbnRleHRSZWYgY3R4LCBKU09iamVjdFJl
ZiBvYmplY3QsIEpTU3RyaW5nUmVmIHByb3BlcnR5TmFtZSwgSlNWYWx1ZVJlZiogZXhjZXB0aW9u
KQpAQCAtMjU3LDcgKzI1Nyw3IEBAIEpTVmFsdWVSZWYgSlNPYmplY3RHZXRQcm9wZXJ0eShKU0Nv
bnRleHQKIAogICAgIEpTT2JqZWN0KiBqc09iamVjdCA9IHRvSlMob2JqZWN0KTsKIAotICAgIEpT
VmFsdWUqIGpzVmFsdWUgPSBqc09iamVjdC0+Z2V0KGV4ZWMsIHByb3BlcnR5TmFtZS0+aWRlbnRp
ZmllcihleGVjKSk7CisgICAgSlNWYWx1ZSoganNWYWx1ZSA9IGpzT2JqZWN0LT5nZXQoZXhlYywg
cHJvcGVydHlOYW1lLT5pZGVudGlmaWVyKCZleGVjLT5nbG9iYWxEYXRhKCkpKTsKICAgICBpZiAo
ZXhlYy0+aGFkRXhjZXB0aW9uKCkpIHsKICAgICAgICAgaWYgKGV4Y2VwdGlvbikKICAgICAgICAg
ICAgICpleGNlcHRpb24gPSB0b1JlZihleGVjLT5leGNlcHRpb24oKSk7CkBAIC0yNzMsNyArMjcz
LDcgQEAgdm9pZCBKU09iamVjdFNldFByb3BlcnR5KEpTQ29udGV4dFJlZiBjdAogICAgIEpTTG9j
ayBsb2NrKGV4ZWMpOwogCiAgICAgSlNPYmplY3QqIGpzT2JqZWN0ID0gdG9KUyhvYmplY3QpOwot
ICAgIElkZW50aWZpZXIgbmFtZShwcm9wZXJ0eU5hbWUtPmlkZW50aWZpZXIoZXhlYykpOworICAg
IElkZW50aWZpZXIgbmFtZShwcm9wZXJ0eU5hbWUtPmlkZW50aWZpZXIoJmV4ZWMtPmdsb2JhbERh
dGEoKSkpOwogICAgIEpTVmFsdWUqIGpzVmFsdWUgPSB0b0pTKHZhbHVlKTsKIAogICAgIGlmIChh
dHRyaWJ1dGVzICYmICFqc09iamVjdC0+aGFzUHJvcGVydHkoZXhlYywgbmFtZSkpCkBAIC0zMzMs
NyArMzMzLDcgQEAgYm9vbCBKU09iamVjdERlbGV0ZVByb3BlcnR5KEpTQ29udGV4dFJlZgogCiAg
ICAgSlNPYmplY3QqIGpzT2JqZWN0ID0gdG9KUyhvYmplY3QpOwogCi0gICAgYm9vbCByZXN1bHQg
PSBqc09iamVjdC0+ZGVsZXRlUHJvcGVydHkoZXhlYywgIHByb3BlcnR5TmFtZS0+aWRlbnRpZmll
cihleGVjKSk7CisgICAgYm9vbCByZXN1bHQgPSBqc09iamVjdC0+ZGVsZXRlUHJvcGVydHkoZXhl
YywgcHJvcGVydHlOYW1lLT5pZGVudGlmaWVyKCZleGVjLT5nbG9iYWxEYXRhKCkpKTsKICAgICBp
ZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpIHsKICAgICAgICAgaWYgKGV4Y2VwdGlvbikKICAgICAg
ICAgICAgICpleGNlcHRpb24gPSB0b1JlZihleGVjLT5leGNlcHRpb24oKSk7CkluZGV4OiBKYXZh
U2NyaXB0Q29yZS9BUEkvT3BhcXVlSlNTdHJpbmcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3Jp
cHRDb3JlL0FQSS9PcGFxdWVKU1N0cmluZy5jcHAJKHJldmlzaW9uIDM3MzMwKQorKysgSmF2YVNj
cmlwdENvcmUvQVBJL09wYXF1ZUpTU3RyaW5nLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDYsMTEg
KzQ2LDYgQEAgVVN0cmluZyBPcGFxdWVKU1N0cmluZzo6dXN0cmluZygpIGNvbnN0CiAgICAgcmV0
dXJuIFVTdHJpbmc6Om51bGwoKTsKIH0KIAotSWRlbnRpZmllciBPcGFxdWVKU1N0cmluZzo6aWRl
bnRpZmllcihFeGVjU3RhdGUqIGV4ZWMpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGlkZW50aWZpZXIo
JmV4ZWMtPmdsb2JhbERhdGEoKSk7Ci19Ci0KIElkZW50aWZpZXIgT3BhcXVlSlNTdHJpbmc6Omlk
ZW50aWZpZXIoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhKSBjb25zdAogewogICAgIGlmICghdGhp
cyB8fCAhbV9jaGFyYWN0ZXJzKQpJbmRleDogSmF2YVNjcmlwdENvcmUvQVBJL09wYXF1ZUpTU3Ry
aW5nLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvQVBJL09wYXF1ZUpTU3RyaW5nLmgJ
KHJldmlzaW9uIDM3MzMwKQorKysgSmF2YVNjcmlwdENvcmUvQVBJL09wYXF1ZUpTU3RyaW5nLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTI5LDEwICsyOSw5IEBACiAjaW5jbHVkZSA8a2pzL3VzdHJpbmcu
aD4KIAogbmFtZXNwYWNlIEpTQyB7Ci0gICAgY2xhc3MgRXhlY1N0YXRlOwogICAgIGNsYXNzIElk
ZW50aWZpZXI7CiAgICAgY2xhc3MgSlNHbG9iYWxEYXRhOwotfTsKK30KIAogc3RydWN0IE9wYXF1
ZUpTU3RyaW5nIDogcHVibGljIFRocmVhZFNhZmVTaGFyZWQ8T3BhcXVlSlNTdHJpbmc+IHsKIApA
QCAtNTIsOCArNTEsNiBAQCBzdHJ1Y3QgT3BhcXVlSlNTdHJpbmcgOiBwdWJsaWMgVGhyZWFkU2Fm
CiAgICAgdW5zaWduZWQgbGVuZ3RoKCkgeyByZXR1cm4gdGhpcyA/IG1fbGVuZ3RoIDogMDsgfQog
CiAgICAgSlNDOjpVU3RyaW5nIHVzdHJpbmcoKSBjb25zdDsKLQotICAgIEpTQzo6SWRlbnRpZmll
ciBpZGVudGlmaWVyKEpTQzo6RXhlY1N0YXRlKikgY29uc3Q7CiAgICAgSlNDOjpJZGVudGlmaWVy
IGlkZW50aWZpZXIoSlNDOjpKU0dsb2JhbERhdGEqKSBjb25zdDsKIAogcHJpdmF0ZToKSW5kZXg6
IEphdmFTY3JpcHRDb3JlL1ZNL0NUSS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUv
Vk0vQ1RJLmNwcAkocmV2aXNpb24gMzczMzApCisrKyBKYXZhU2NyaXB0Q29yZS9WTS9DVEkuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xNDEsOSArMTQxLDkgQEAgQUxXQVlTX0lOTElORSBib29sIENU
STo6aXNDb25zdGFudChpbnQgcwogICAgIHJldHVybiBzcmMgPj0gbV9jb2RlQmxvY2stPm51bVZh
cnMgJiYgc3JjIDwgbV9jb2RlQmxvY2stPm51bVZhcnMgKyBtX2NvZGVCbG9jay0+bnVtQ29uc3Rh
bnRzOwogfQogCi1BTFdBWVNfSU5MSU5FIEpTVmFsdWUqIENUSTo6Z2V0Q29uc3RhbnQoRXhlY1N0
YXRlKiBleGVjLCBpbnQgc3JjKQorQUxXQVlTX0lOTElORSBKU1ZhbHVlKiBDVEk6OmdldENvbnN0
YW50KENhbGxGcmFtZSogY2FsbEZyYW1lLCBpbnQgc3JjKQogewotICAgIHJldHVybiBtX2NvZGVC
bG9jay0+Y29uc3RhbnRSZWdpc3RlcnNbc3JjIC0gbV9jb2RlQmxvY2stPm51bVZhcnNdLmpzVmFs
dWUoZXhlYyk7CisgICAgcmV0dXJuIG1fY29kZUJsb2NrLT5jb25zdGFudFJlZ2lzdGVyc1tzcmMg
LSBtX2NvZGVCbG9jay0+bnVtVmFyc10uanNWYWx1ZShjYWxsRnJhbWUpOwogfQogCiAvLyBnZXQg
YXJnIHB1dHMgYW4gYXJnIGZyb20gdGhlIFNGIHJlZ2lzdGVyIGFycmF5IGludG8gYSBoL3cgcmVn
aXN0ZXIKQEAgLTE1MSw3ICsxNTEsNyBAQCBBTFdBWVNfSU5MSU5FIHZvaWQgQ1RJOjplbWl0R2V0
QXJnKGludCBzCiB7CiAgICAgLy8gVE9ETzogd2Ugd2FudCB0byByZXVzZSB2YWx1ZXMgdGhhdCBh
cmUgYWxyZWFkeSBpbiByZWdpc3RlcnMgaWYgd2UgY2FuIC0gYWRkIGEgcmVnaXN0ZXIgYWxsb2Nh
dG9yIQogICAgIGlmIChpc0NvbnN0YW50KHNyYykpIHsKLSAgICAgICAgSlNWYWx1ZSoganMgPSBn
ZXRDb25zdGFudChtX2V4ZWMsIHNyYyk7CisgICAgICAgIEpTVmFsdWUqIGpzID0gZ2V0Q29uc3Rh
bnQobV9jYWxsRnJhbWUsIHNyYyk7CiAgICAgICAgIG1faml0Lm1vdmxfaTMycihyZWludGVycHJl
dF9jYXN0PHVuc2lnbmVkPihqcyksIGRzdCk7CiAgICAgfSBlbHNlCiAgICAgICAgIG1faml0Lm1v
dmxfbXIoc3JjICogc2l6ZW9mKFJlZ2lzdGVyKSwgWDg2OjplZGksIGRzdCk7CkBAIC0xNjEsNyAr
MTYxLDcgQEAgQUxXQVlTX0lOTElORSB2b2lkIENUSTo6ZW1pdEdldEFyZyhpbnQgcwogQUxXQVlT
X0lOTElORSB2b2lkIENUSTo6ZW1pdEdldFB1dEFyZyh1bnNpZ25lZCBzcmMsIHVuc2lnbmVkIG9m
ZnNldCwgWDg2QXNzZW1ibGVyOjpSZWdpc3RlcklEIHNjcmF0Y2gpCiB7CiAgICAgaWYgKGlzQ29u
c3RhbnQoc3JjKSkgewotICAgICAgICBKU1ZhbHVlKiBqcyA9IGdldENvbnN0YW50KG1fZXhlYywg
c3JjKTsKKyAgICAgICAgSlNWYWx1ZSoganMgPSBnZXRDb25zdGFudChtX2NhbGxGcmFtZSwgc3Jj
KTsKICAgICAgICAgbV9qaXQubW92bF9pMzJtKHJlaW50ZXJwcmV0X2Nhc3Q8dW5zaWduZWQ+KGpz
KSwgb2Zmc2V0ICsgc2l6ZW9mKHZvaWQqKSwgWDg2Ojplc3ApOwogICAgIH0gZWxzZSB7CiAgICAg
ICAgIG1faml0Lm1vdmxfbXIoc3JjICogc2l6ZW9mKFJlZ2lzdGVyKSwgWDg2OjplZGksIHNjcmF0
Y2gpOwpAQCAtMTgzLDcgKzE4Myw3IEBAIEFMV0FZU19JTkxJTkUgdm9pZCBDVEk6OmVtaXRQdXRB
cmdDb25zdGEKIEFMV0FZU19JTkxJTkUgSlNWYWx1ZSogQ1RJOjpnZXRDb25zdGFudEltbWVkaWF0
ZU51bWVyaWNBcmcodW5zaWduZWQgc3JjKQogewogICAgIGlmIChpc0NvbnN0YW50KHNyYykpIHsK
LSAgICAgICAgSlNWYWx1ZSoganMgPSBnZXRDb25zdGFudChtX2V4ZWMsIHNyYyk7CisgICAgICAg
IEpTVmFsdWUqIGpzID0gZ2V0Q29uc3RhbnQobV9jYWxsRnJhbWUsIHNyYyk7CiAgICAgICAgIHJl
dHVybiBKU0ltbWVkaWF0ZTo6aXNOdW1iZXIoanMpID8ganMgOiAwOwogICAgIH0KICAgICByZXR1
cm4gMDsKQEAgLTI0Niw3ICsyNDYsNyBAQCB2b2lkIENUSTo6cHJpbnRPcGNvZGVPcGVyYW5kVHlw
ZXModW5zaWduCiB7CiAgICAgY2hhciB3aGljaDEgPSAnKic7CiAgICAgaWYgKGlzQ29uc3RhbnQo
c3JjMSkpIHsKLSAgICAgICAgSlNWYWx1ZSoganMgPSBnZXRDb25zdGFudChtX2V4ZWMsIHNyYzEp
OworICAgICAgICBKU1ZhbHVlKiBqcyA9IGdldENvbnN0YW50KG1fY2FsbEZyYW1lLCBzcmMxKTsK
ICAgICAgICAgd2hpY2gxID0gCiAgICAgICAgICAgICBKU0ltbWVkaWF0ZTo6aXNJbW1lZGlhdGUo
anMpID8KICAgICAgICAgICAgICAgICAoSlNJbW1lZGlhdGU6OmlzTnVtYmVyKGpzKSA/ICdpJyA6
CkBAIC0yNjAsNyArMjYwLDcgQEAgdm9pZCBDVEk6OnByaW50T3Bjb2RlT3BlcmFuZFR5cGVzKHVu
c2lnbgogICAgIH0KICAgICBjaGFyIHdoaWNoMiA9ICcqJzsKICAgICBpZiAoaXNDb25zdGFudChz
cmMyKSkgewotICAgICAgICBKU1ZhbHVlKiBqcyA9IGdldENvbnN0YW50KG1fZXhlYywgc3JjMik7
CisgICAgICAgIEpTVmFsdWUqIGpzID0gZ2V0Q29uc3RhbnQobV9jYWxsRnJhbWUsIHNyYzIpOwog
ICAgICAgICB3aGljaDIgPSAKICAgICAgICAgICAgIEpTSW1tZWRpYXRlOjppc0ltbWVkaWF0ZShq
cykgPwogICAgICAgICAgICAgICAgIChKU0ltbWVkaWF0ZTo6aXNOdW1iZXIoanMpID8gJ2knIDoK
QEAgLTQyNywxMCArNDI3LDEwIEBAIEFMV0FZU19JTkxJTkUgdm9pZCBDVEk6OmVtaXRUYWdBc0Jv
b2xJbW0KICAgICBtX2ppdC5vcmxfaTMycihKU0ltbWVkaWF0ZTo6RnVsbFRhZ1R5cGVCb29sLCBy
ZWcpOwogfQogCi1DVEk6OkNUSShNYWNoaW5lKiBtYWNoaW5lLCBFeGVjU3RhdGUqIGV4ZWMsIENv
ZGVCbG9jayogY29kZUJsb2NrKQorQ1RJOjpDVEkoTWFjaGluZSogbWFjaGluZSwgQ2FsbEZyYW1l
KiBjYWxsRnJhbWUsIENvZGVCbG9jayogY29kZUJsb2NrKQogICAgIDogbV9qaXQobWFjaGluZS0+
aml0Q29kZUJ1ZmZlcigpKQogICAgICwgbV9tYWNoaW5lKG1hY2hpbmUpCi0gICAgLCBtX2V4ZWMo
ZXhlYykKKyAgICAsIG1fY2FsbEZyYW1lKGNhbGxGcmFtZSkKICAgICAsIG1fY29kZUJsb2NrKGNv
ZGVCbG9jaykKICAgICAsIG1fbGFiZWxzKGNvZGVCbG9jayA/IGNvZGVCbG9jay0+aW5zdHJ1Y3Rp
b25zLnNpemUoKSA6IDApCiAgICAgLCBtX3N0cnVjdHVyZVN0dWJDb21waWxhdGlvbkluZm8oY29k
ZUJsb2NrID8gY29kZUJsb2NrLT5zdHJ1Y3R1cmVJREluc3RydWN0aW9ucy5zaXplKCkgOiAwKQpA
QCAtNDgzLDggKzQ4Myw4IEBAIHZvaWQgQ1RJOjpjb21waWxlT3BDYWxsKEluc3RydWN0aW9uKiBp
bnMKIAogICAgICAgICBpbnQgdGhpc1ZhbCA9IGluc3RydWN0aW9uW2kgKyAzXS51Lm9wZXJhbmQ7
CiAgICAgICAgIGlmICh0aGlzVmFsID09IG1pc3NpbmdUaGlzT2JqZWN0TWFya2VyKCkpIHsKLSAg
ICAgICAgICAgIC8vIEZJWE1FOiBzaG91bGQgdGhpcyBiZSBsb2FkZWQgZHluYW1pY2FsbHkgb2Zm
IG1fZXhlYz8KLSAgICAgICAgICAgIG1faml0Lm1vdmxfaTMybShyZWludGVycHJldF9jYXN0PHVu
c2lnbmVkPihtX2V4ZWMtPmdsb2JhbFRoaXNWYWx1ZSgpKSwgZmlyc3RBcmcgKiBzaXplb2YoUmVn
aXN0ZXIpLCBYODY6OmVkaSk7CisgICAgICAgICAgICAvLyBGSVhNRTogc2hvdWxkIHRoaXMgYmUg
bG9hZGVkIGR5bmFtaWNhbGx5IG9mZiBtX2NhbGxGcmFtZT8KKyAgICAgICAgICAgIG1faml0Lm1v
dmxfaTMybShyZWludGVycHJldF9jYXN0PHVuc2lnbmVkPihtX2NhbGxGcmFtZS0+Z2xvYmFsVGhp
c1ZhbHVlKCkpLCBmaXJzdEFyZyAqIHNpemVvZihSZWdpc3RlciksIFg4Njo6ZWRpKTsKICAgICAg
ICAgfSBlbHNlIHsKICAgICAgICAgICAgIGVtaXRHZXRBcmcodGhpc1ZhbCwgWDg2OjplY3gpOwog
ICAgICAgICAgICAgZW1pdFB1dFJlc3VsdChmaXJzdEFyZywgWDg2OjplY3gpOwpAQCAtNDk2LDcg
KzQ5Niw3IEBAIHZvaWQgQ1RJOjpjb21waWxlT3BDYWxsKEluc3RydWN0aW9uKiBpbnMKICAgICAg
ICAgZW1pdEdldFB1dEFyZyhpbnN0cnVjdGlvbltpICsgMl0udS5vcGVyYW5kLCAwLCBYODY6OmVj
eCk7CiAgICAgICAgIGVtaXRDYWxsKGksIE1hY2hpbmU6OmN0aV9vcF9jYWxsX2V2YWwpOwogCi0g
ICAgICAgIGVtaXRHZXRDVElQYXJhbShDVElfQVJHU19yLCBYODY6OmVkaSk7IC8vIGVkaSA6PSBy
CisgICAgICAgIGVtaXRHZXRDVElQYXJhbShDVElfQVJHU19jYWxsRnJhbWUsIFg4Njo6ZWRpKTsg
Ly8gZWRpIDo9IHIKIAogICAgICAgICBtX2ppdC5jbXBsX2kzMnIocmVpbnRlcnByZXRfY2FzdDx1
bnNpZ25lZD4oSlNJbW1lZGlhdGU6OmltcG9zc2libGVWYWx1ZSgpKSwgWDg2OjplYXgpOwogICAg
ICAgICB3YXNFdmFsID0gbV9qaXQuZW1pdFVubGlua2VkSm5lKCk7CkBAIC02NDYsNyArNjQ2LDcg
QEAgdm9pZCBDVEk6OnB1dERvdWJsZVJlc3VsdFRvSlNOdW1iZXJDZWxsTwogCiB2b2lkIENUSTo6
Y29tcGlsZUJpbmFyeUFyaXRoT3AoT3Bjb2RlSUQgb3Bjb2RlSUQsIHVuc2lnbmVkIGRzdCwgdW5z
aWduZWQgc3JjMSwgdW5zaWduZWQgc3JjMiwgT3BlcmFuZFR5cGVzIHR5cGVzLCB1bnNpZ25lZCBp
KQogewotICAgIFN0cnVjdHVyZUlEKiBudW1iZXJTdHJ1Y3R1cmVJRCA9IG1fZXhlYy0+Z2xvYmFs
RGF0YSgpLm51bWJlclN0cnVjdHVyZUlELmdldCgpOworICAgIFN0cnVjdHVyZUlEKiBudW1iZXJT
dHJ1Y3R1cmVJRCA9IG1fY2FsbEZyYW1lLT5nbG9iYWxEYXRhKCkubnVtYmVyU3RydWN0dXJlSUQu
Z2V0KCk7CiAgICAgWDg2QXNzZW1ibGVyOjpKbXBTcmMgd2FzSlNOdW1iZXJDZWxsMSwgd2FzSlNO
dW1iZXJDZWxsMWIsIHdhc0pTTnVtYmVyQ2VsbDIsIHdhc0pTTnVtYmVyQ2VsbDJiOwogCiAgICAg
ZW1pdEdldEFyZyhzcmMxLCBYODY6OmVheCk7CkBAIC04MzksNyArODM5LDcgQEAgdm9pZCBDVEk6
OnByaXZhdGVDb21waWxlTWFpblBhc3MoKQogICAgICAgICBjYXNlIG9wX21vdjogewogICAgICAg
ICAgICAgdW5zaWduZWQgc3JjID0gaW5zdHJ1Y3Rpb25baSArIDJdLnUub3BlcmFuZDsKICAgICAg
ICAgICAgIGlmIChpc0NvbnN0YW50KHNyYykpCi0gICAgICAgICAgICAgICAgbV9qaXQubW92bF9p
MzJyKHJlaW50ZXJwcmV0X2Nhc3Q8dW5zaWduZWQ+KGdldENvbnN0YW50KG1fZXhlYywgc3JjKSks
IFg4Njo6ZWR4KTsKKyAgICAgICAgICAgICAgICBtX2ppdC5tb3ZsX2kzMnIocmVpbnRlcnByZXRf
Y2FzdDx1bnNpZ25lZD4oZ2V0Q29uc3RhbnQobV9jYWxsRnJhbWUsIHNyYykpLCBYODY6OmVkeCk7
CiAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgZW1pdEdldEFyZyhzcmMsIFg4Njo6
ZWR4KTsKICAgICAgICAgICAgIGVtaXRQdXRSZXN1bHQoaW5zdHJ1Y3Rpb25baSArIDFdLnUub3Bl
cmFuZCwgWDg2OjplZHgpOwpAQCAtMTE5OCw4ICsxMTk4LDggQEAgdm9pZCBDVEk6OnByaXZhdGVD
b21waWxlTWFpblBhc3MoKQogICAgICAgICAgICAgZW1pdEdldEFyZyhSZWdpc3RlckZpbGU6OlJl
dHVyblBDLCBYODY6OmVkeCk7CiAKICAgICAgICAgICAgIC8vIFJlc3RvcmUgb3VyIGNhbGxlcidz
ICJyIi4KLSAgICAgICAgICAgIGVtaXRHZXRBcmcoUmVnaXN0ZXJGaWxlOjpDYWxsZXJSZWdpc3Rl
cnMsIFg4Njo6ZWRpKTsKLSAgICAgICAgICAgIGVtaXRQdXRDVElQYXJhbShYODY6OmVkaSwgQ1RJ
X0FSR1Nfcik7CisgICAgICAgICAgICBlbWl0R2V0QXJnKFJlZ2lzdGVyRmlsZTo6Q2FsbGVyRnJh
bWUsIFg4Njo6ZWRpKTsKKyAgICAgICAgICAgIGVtaXRQdXRDVElQYXJhbShYODY6OmVkaSwgQ1RJ
X0FSR1NfY2FsbEZyYW1lKTsKIAogICAgICAgICAgICAgLy8gUmV0dXJuLgogICAgICAgICAgICAg
bV9qaXQucHVzaGxfcihYODY6OmVkeCk7CkBAIC0xNzUzLDcgKzE3NTMsNyBAQCB2b2lkIENUSTo6
cHJpdmF0ZUNvbXBpbGVNYWluUGFzcygpCiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQog
ICAgICAgICBjYXNlIG9wX2NhdGNoOiB7Ci0gICAgICAgICAgICBlbWl0R2V0Q1RJUGFyYW0oQ1RJ
X0FSR1NfciwgWDg2OjplZGkpOyAvLyBlZGkgOj0gcgorICAgICAgICAgICAgZW1pdEdldENUSVBh
cmFtKENUSV9BUkdTX2NhbGxGcmFtZSwgWDg2OjplZGkpOyAvLyBlZGkgOj0gcgogICAgICAgICAg
ICAgZW1pdFB1dFJlc3VsdChpbnN0cnVjdGlvbltpICsgMV0udS5vcGVyYW5kKTsKICAgICAgICAg
ICAgIGkgKz0gMjsKICAgICAgICAgICAgIGJyZWFrOwpAQCAtMjQ5Nyw3ICsyNDk3LDcgQEAgdm9p
ZCBDVEk6OnByaXZhdGVDb21waWxlKCkKIHsKICAgICAvLyBDb3VsZCB1c2UgYSBwb3BsX20sIGJ1
dCB3b3VsZCBuZWVkIHRvIG9mZnNldCB0aGUgZm9sbG93aW5nIGluc3RydWN0aW9uIGlmIHNvLgog
ICAgIG1faml0LnBvcGxfcihYODY6OmVjeCk7Ci0gICAgZW1pdEdldENUSVBhcmFtKENUSV9BUkdT
X3IsIFg4Njo6ZWRpKTsgLy8gZWRpIDo9IHIKKyAgICBlbWl0R2V0Q1RJUGFyYW0oQ1RJX0FSR1Nf
Y2FsbEZyYW1lLCBYODY6OmVkaSk7IC8vIGVkaSA6PSByCiAgICAgZW1pdFB1dFRvQ2FsbEZyYW1l
SGVhZGVyKFg4Njo6ZWN4LCBSZWdpc3RlckZpbGU6OlJldHVyblBDKTsKIAogICAgIHByaXZhdGVD
b21waWxlTWFpblBhc3MoKTsKQEAgLTI1OTMsNyArMjU5Myw3IEBAIHZvaWQgQ1RJOjpwcml2YXRl
Q29tcGlsZUdldEJ5SWRQcm90byhTdHIKIAogICAgIC8vIFRoZSBwcm90b3R5cGUgb2JqZWN0IGRl
ZmluaXRlbHkgZXhpc3RzIChpZiB0aGlzIHN0dWIgZXhpc3RzIHRoZSBDb2RlQmxvY2sgaXMgcmVm
ZXJlbmNpbmcgYSBTdHJ1Y3R1cmVJRCB0aGF0IGlzCiAgICAgLy8gcmVmZXJlbmNpbmcgdGhlIHBy
b3RvdHlwZSBvYmplY3QgLSBsZXQncyBzcGVjdWxhdGl2ZWx5IGxvYWQgaXQncyB0YWJsZSBuaWNl
IGFuZCBlYXJseSEpCi0gICAgSlNPYmplY3QqIHByb3RvT2JqZWN0ID0gc3RhdGljX2Nhc3Q8SlNP
YmplY3QqPihzdHJ1Y3R1cmVJRC0+cHJvdG90eXBlRm9yTG9va3VwKG1fZXhlYykpOworICAgIEpT
T2JqZWN0KiBwcm90b09iamVjdCA9IHN0YXRpY19jYXN0PEpTT2JqZWN0Kj4oc3RydWN0dXJlSUQt
PnByb3RvdHlwZUZvckxvb2t1cChtX2NhbGxGcmFtZSkpOwogICAgIFByb3BlcnR5U3RvcmFnZSog
cHJvdG9Qcm9wZXJ0eVN0b3JhZ2UgPSAmcHJvdG9PYmplY3QtPm1fcHJvcGVydHlTdG9yYWdlOwog
ICAgIG1faml0Lm1vdmxfbXIoc3RhdGljX2Nhc3Q8dm9pZCo+KHByb3RvUHJvcGVydHlTdG9yYWdl
KSwgWDg2OjplZHgpOwogCkBAIC0yNjM2LDcgKzI2MzYsNyBAQCB2b2lkIENUSTo6cHJpdmF0ZUNv
bXBpbGVHZXRCeUlkUHJvdG8oU3RyCiAjZWxzZQogICAgIC8vIFRoZSBwcm90b3R5cGUgb2JqZWN0
IGRlZmluaXRlbHkgZXhpc3RzIChpZiB0aGlzIHN0dWIgZXhpc3RzIHRoZSBDb2RlQmxvY2sgaXMg
cmVmZXJlbmNpbmcgYSBTdHJ1Y3R1cmVJRCB0aGF0IGlzCiAgICAgLy8gcmVmZXJlbmNpbmcgdGhl
IHByb3RvdHlwZSBvYmplY3QgLSBsZXQncyBzcGVjdWxhdGl2ZWx5IGxvYWQgaXQncyB0YWJsZSBu
aWNlIGFuZCBlYXJseSEpCi0gICAgSlNPYmplY3QqIHByb3RvT2JqZWN0ID0gc3RhdGljX2Nhc3Q8
SlNPYmplY3QqPihzdHJ1Y3R1cmVJRC0+cHJvdG90eXBlRm9yTG9va3VwKG1fZXhlYykpOworICAg
IEpTT2JqZWN0KiBwcm90b09iamVjdCA9IHN0YXRpY19jYXN0PEpTT2JqZWN0Kj4oc3RydWN0dXJl
SUQtPnByb3RvdHlwZUZvckxvb2t1cChtX2NhbGxGcmFtZSkpOwogICAgIFByb3BlcnR5U3RvcmFn
ZSogcHJvdG9Qcm9wZXJ0eVN0b3JhZ2UgPSAmcHJvdG9PYmplY3QtPm1fcHJvcGVydHlTdG9yYWdl
OwogICAgIG1faml0Lm1vdmxfbXIoc3RhdGljX2Nhc3Q8dm9pZCo+KHByb3RvUHJvcGVydHlTdG9y
YWdlKSwgWDg2OjplZHgpOwogCkBAIC0yNjg1LDcgKzI2ODUsNyBAQCB2b2lkIENUSTo6cHJpdmF0
ZUNvbXBpbGVHZXRCeUlkQ2hhaW4oU3RyCiAgICAgUmVmUHRyPFN0cnVjdHVyZUlEPiogY2hhaW5F
bnRyaWVzID0gY2hhaW4tPmhlYWQoKTsKICAgICBKU09iamVjdCogcHJvdG9PYmplY3QgPSAwOwog
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGk8Y291bnQ7ICsraSkgewotICAgICAgICBwcm90b09i
amVjdCA9IHN0YXRpY19jYXN0PEpTT2JqZWN0Kj4oY3VyclN0cnVjdHVyZUlELT5wcm90b3R5cGVG
b3JMb29rdXAobV9leGVjKSk7CisgICAgICAgIHByb3RvT2JqZWN0ID0gc3RhdGljX2Nhc3Q8SlNP
YmplY3QqPihjdXJyU3RydWN0dXJlSUQtPnByb3RvdHlwZUZvckxvb2t1cChtX2NhbGxGcmFtZSkp
OwogICAgICAgICBjdXJyU3RydWN0dXJlSUQgPSBjaGFpbkVudHJpZXNbaV0uZ2V0KCk7CiAKICAg
ICAgICAgLy8gQ2hlY2sgdGhlIHByb3RvdHlwZSBvYmplY3QncyBTdHJ1Y3R1cmVJRCBoYWQgbm90
IGNoYW5nZWQuCkBAIC0yOTg3LDcgKzI5ODcsNyBAQCB2b2lkIENUSTo6ZW1pdFB1dFZhcmlhYmxl
T2JqZWN0UmVnaXN0ZXIoCiAKICNpZiBFTkFCTEUoV1JFQykKIAotdm9pZCogQ1RJOjpjb21waWxl
UmVnRXhwKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgVVN0cmluZyYgcGF0dGVybiwgdW5zaWduZWQq
IG51bVN1YnBhdHRlcm5zX3B0ciwgY29uc3QgY2hhcioqIGVycm9yX3B0ciwgYm9vbCBpZ25vcmVD
YXNlLCBib29sIG11bHRpbGluZSkKK3ZvaWQqIENUSTo6Y29tcGlsZVJlZ0V4cChNYWNoaW5lKiBt
YWNoaW5lLCBjb25zdCBVU3RyaW5nJiBwYXR0ZXJuLCB1bnNpZ25lZCogbnVtU3VicGF0dGVybnNf
cHRyLCBjb25zdCBjaGFyKiogZXJyb3JfcHRyLCBib29sIGlnbm9yZUNhc2UsIGJvb2wgbXVsdGls
aW5lKQogewogICAgIC8vIFRPRE86IGJldHRlciBlcnJvciBtZXNzYWdlcwogICAgIGlmIChwYXR0
ZXJuLnNpemUoKSA+IE1heFBhdHRlcm5TaXplKSB7CkBAIC0yOTk1LDcgKzI5OTUsNyBAQCB2b2lk
KiBDVEk6OmNvbXBpbGVSZWdFeHAoRXhlY1N0YXRlKiBleGVjCiAgICAgICAgIHJldHVybiAwOwog
ICAgIH0KIAotICAgIFg4NkFzc2VtYmxlciBqaXQoZXhlYy0+bWFjaGluZSgpLT5qaXRDb2RlQnVm
ZmVyKCkpOworICAgIFg4NkFzc2VtYmxlciBqaXQobWFjaGluZS0+aml0Q29kZUJ1ZmZlcigpKTsK
ICAgICBXUkVDUGFyc2VyIHBhcnNlcihwYXR0ZXJuLCBpZ25vcmVDYXNlLCBtdWx0aWxpbmUsIGpp
dCk7CiAgICAgCiAgICAgaml0LmVtaXRDb252ZXJ0VG9GYXN0Q2FsbCgpOwpJbmRleDogSmF2YVNj
cmlwdENvcmUvVk0vQ1RJLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvVk0vQ1RJLmgJ
KHJldmlzaW9uIDM3MzMwKQorKysgSmF2YVNjcmlwdENvcmUvVk0vQ1RJLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTQ5LDIwICs0OSwxOCBAQAogCiAjZGVmaW5lIENUSV9BUkdTX2NvZGUgMHgwQwogI2Rl
ZmluZSBDVElfQVJHU19yZWdpc3RlckZpbGUgMHgwRAotI2RlZmluZSBDVElfQVJHU19yIDB4MEUK
KyNkZWZpbmUgQ1RJX0FSR1NfY2FsbEZyYW1lIDB4MEUKICNkZWZpbmUgQ1RJX0FSR1NfZXhjZXB0
aW9uIDB4MEYKICNkZWZpbmUgQ1RJX0FSR1NfcHJvZmlsZXJSZWZlcmVuY2UgMHgxMAogI2RlZmlu
ZSBDVElfQVJHU19nbG9iYWxEYXRhIDB4MTEKICNkZWZpbmUgQVJHX3JlZ2lzdGVyRmlsZSAoKFJl
Z2lzdGVyRmlsZSopKEFSR1MpW0NUSV9BUkdTX3JlZ2lzdGVyRmlsZV0pCi0jZGVmaW5lIEFSR19y
ICgoUmVnaXN0ZXIqKShBUkdTKVtDVElfQVJHU19yXSkKKyNkZWZpbmUgQVJHX2NhbGxGcmFtZSAo
KENhbGxGcmFtZSopKEFSR1MpW0NUSV9BUkdTX2NhbGxGcmFtZV0pCiAjZGVmaW5lIEFSR19leGNl
cHRpb24gKChKU1ZhbHVlKiopKEFSR1MpW0NUSV9BUkdTX2V4Y2VwdGlvbl0pCiAjZGVmaW5lIEFS
R19wcm9maWxlclJlZmVyZW5jZSAoKFByb2ZpbGVyKiopKEFSR1MpW0NUSV9BUkdTX3Byb2ZpbGVy
UmVmZXJlbmNlXSkKICNkZWZpbmUgQVJHX2dsb2JhbERhdGEgKChKU0dsb2JhbERhdGEqKShBUkdT
KVtDVElfQVJHU19nbG9iYWxEYXRhXSkKIAotI2RlZmluZSBBUkdfZXhlYyBDYWxsRnJhbWU6OmNy
ZWF0ZShBUkdfcikKLQotI2RlZmluZSBBUkdfc2V0UihuZXdSKSAoKihSZWdpc3RlcioqKSYoQVJH
UylbQ1RJX0FSR1Nfcl0gPSBuZXdSKQotI2RlZmluZSBBUkdfc2V0Mm5kUmVzdWx0KG5ldzJuZFJl
c3VsdCkgKCooSlNWYWx1ZSoqKSYoQVJHUylbQ1RJX0FSR1NfMm5kUmVzdWx0XSA9IG5ldzJuZFJl
c3VsdCkKKyNkZWZpbmUgQVJHX3NldENhbGxGcmFtZShuZXdDYWxsRnJhbWUpICgqKENhbGxGcmFt
ZSoqKSYoQVJHUylbQ1RJX0FSR1NfY2FsbEZyYW1lXSA9IChuZXdDYWxsRnJhbWUpKQorI2RlZmlu
ZSBBUkdfc2V0Mm5kUmVzdWx0KG5ldzJuZFJlc3VsdCkgKCooSlNWYWx1ZSoqKSYoQVJHUylbQ1RJ
X0FSR1NfMm5kUmVzdWx0XSA9IChuZXcybmRSZXN1bHQpKQogCiAjZGVmaW5lIEFSR19zcmMxICgo
SlNWYWx1ZSopKChBUkdTKVsxXSkpCiAjZGVmaW5lIEFSR19zcmMyICgoSlNWYWx1ZSopKChBUkdT
KVsyXSkpCkBAIC0yMzAsNyArMjI4LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgfTsKIAogICAg
IGV4dGVybiAiQyIgewotICAgICAgICBKU1ZhbHVlKiBjdGlUcmFtcG9saW5lKHZvaWQqIGNvZGUs
IFJlZ2lzdGVyRmlsZSosIFJlZ2lzdGVyKiBjYWxsRnJhbWUsIEpTVmFsdWUqKiBleGNlcHRpb24s
IFByb2ZpbGVyKiosIEpTR2xvYmFsRGF0YSopOworICAgICAgICBKU1ZhbHVlKiBjdGlUcmFtcG9s
aW5lKHZvaWQqIGNvZGUsIFJlZ2lzdGVyRmlsZSosIENhbGxGcmFtZSosIEpTVmFsdWUqKiBleGNl
cHRpb24sIFByb2ZpbGVyKiosIEpTR2xvYmFsRGF0YSopOwogICAgICAgICB2b2lkIGN0aVZNVGhy
b3dUcmFtcG9saW5lKCk7CiAgICAgfTsKIApAQCAtMjY5LDcgKzI2Nyw3IEBAIG5hbWVzcGFjZSBK
U0MgewogICAgICAgICB9CiAKICNpZiBFTkFCTEUoV1JFQykKLSAgICAgICAgc3RhdGljIHZvaWQq
IGNvbXBpbGVSZWdFeHAoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBVU3RyaW5nJiBwYXR0ZXJuLCB1
bnNpZ25lZCogbnVtU3VicGF0dGVybnNfcHRyLCBjb25zdCBjaGFyKiogZXJyb3JfcHRyLCBib29s
IGlnbm9yZUNhc2UgPSBmYWxzZSwgYm9vbCBtdWx0aWxpbmUgPSBmYWxzZSk7CisgICAgICAgIHN0
YXRpYyB2b2lkKiBjb21waWxlUmVnRXhwKE1hY2hpbmUqLCBjb25zdCBVU3RyaW5nJiBwYXR0ZXJu
LCB1bnNpZ25lZCogbnVtU3VicGF0dGVybnNfcHRyLCBjb25zdCBjaGFyKiogZXJyb3JfcHRyLCBi
b29sIGlnbm9yZUNhc2UgPSBmYWxzZSwgYm9vbCBtdWx0aWxpbmUgPSBmYWxzZSk7CiAjZW5kaWYK
IAogICAgICAgICBzdGF0aWMgdm9pZCBjb21waWxlR2V0QnlJZFNlbGYoTWFjaGluZSogbWFjaGlu
ZSwgRXhlY1N0YXRlKiBleGVjLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgU3RydWN0dXJlSUQqIHN0
cnVjdHVyZUlELCBzaXplX3QgY2FjaGVkT2Zmc2V0LCB2b2lkKiByZXR1cm5BZGRyZXNzKQpAQCAt
MzIzLDkgKzMyMSw5IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAgICAgcmV0dXJuIGN0aS5w
cml2YXRlQ29tcGlsZVBhdGNoR2V0QXJyYXlMZW5ndGgocmV0dXJuQWRkcmVzcyk7CiAgICAgICAg
IH0KIAotICAgICAgICBpbmxpbmUgc3RhdGljIEpTVmFsdWUqIGV4ZWN1dGUodm9pZCogY29kZSwg
UmVnaXN0ZXJGaWxlKiByZWdpc3RlckZpbGUsIFJlZ2lzdGVyKiByLCBKU0dsb2JhbERhdGEqIGds
b2JhbERhdGEsIEpTVmFsdWUqKiBleGNlcHRpb24pCisgICAgICAgIGlubGluZSBzdGF0aWMgSlNW
YWx1ZSogZXhlY3V0ZSh2b2lkKiBjb2RlLCBSZWdpc3RlckZpbGUqIHJlZ2lzdGVyRmlsZSwgQ2Fs
bEZyYW1lKiBjYWxsRnJhbWUsIEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgSlNWYWx1ZSoqIGV4
Y2VwdGlvbikKICAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGN0aVRyYW1wb2xpbmUoY29k
ZSwgcmVnaXN0ZXJGaWxlLCByLCBleGNlcHRpb24sIFByb2ZpbGVyOjplbmFibGVkUHJvZmlsZXJS
ZWZlcmVuY2UoKSwgZ2xvYmFsRGF0YSk7CisgICAgICAgICAgICByZXR1cm4gY3RpVHJhbXBvbGlu
ZShjb2RlLCByZWdpc3RlckZpbGUsIGNhbGxGcmFtZSwgZXhjZXB0aW9uLCBQcm9maWxlcjo6ZW5h
YmxlZFByb2ZpbGVyUmVmZXJlbmNlKCksIGdsb2JhbERhdGEpOwogICAgICAgICB9CiAKICAgICBw
cml2YXRlOgpAQCAtMzY4LDggKzM2Niw4IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2b2lk
IGVtaXRQdXRDVElQYXJhbShYODZBc3NlbWJsZXI6OlJlZ2lzdGVySUQgZnJvbSwgdW5zaWduZWQg
bmFtZSk7CiAgICAgICAgIHZvaWQgZW1pdEdldENUSVBhcmFtKHVuc2lnbmVkIG5hbWUsIFg4NkFz
c2VtYmxlcjo6UmVnaXN0ZXJJRCB0byk7CiAKLSAgICAgICAgdm9pZCBlbWl0UHV0VG9DYWxsRnJh
bWVIZWFkZXIoWDg2QXNzZW1ibGVyOjpSZWdpc3RlcklEIGZyb20sIFJlZ2lzdGVyRmlsZTo6Q2Fs
bEZyYW1lSGVhZGVyRW50cnkgZW50cnkpOwotICAgICAgICB2b2lkIGVtaXRHZXRGcm9tQ2FsbEZy
YW1lSGVhZGVyKFJlZ2lzdGVyRmlsZTo6Q2FsbEZyYW1lSGVhZGVyRW50cnkgZW50cnksIFg4NkFz
c2VtYmxlcjo6UmVnaXN0ZXJJRCB0byk7CisgICAgICAgIHZvaWQgZW1pdFB1dFRvQ2FsbEZyYW1l
SGVhZGVyKFg4NkFzc2VtYmxlcjo6UmVnaXN0ZXJJRCBmcm9tLCBSZWdpc3RlckZpbGU6OkNhbGxG
cmFtZUhlYWRlckVudHJ5IHRvKTsKKyAgICAgICAgdm9pZCBlbWl0R2V0RnJvbUNhbGxGcmFtZUhl
YWRlcihSZWdpc3RlckZpbGU6OkNhbGxGcmFtZUhlYWRlckVudHJ5IGZyb20sIFg4NkFzc2VtYmxl
cjo6UmVnaXN0ZXJJRCB0byk7CiAKICAgICAgICAgSlNWYWx1ZSogZ2V0Q29uc3RhbnRJbW1lZGlh
dGVOdW1lcmljQXJnKHVuc2lnbmVkIHNyYyk7CiAgICAgICAgIHVuc2lnbmVkIGdldERlVGFnZ2Vk
Q29uc3RhbnRJbW1lZGlhdGUoSlNWYWx1ZSogaW1tKTsKQEAgLTQwNiw3ICs0MDQsNyBAQCBuYW1l
c3BhY2UgSlNDIHsKIAogICAgICAgICBYODZBc3NlbWJsZXIgbV9qaXQ7CiAgICAgICAgIE1hY2hp
bmUqIG1fbWFjaGluZTsKLSAgICAgICAgRXhlY1N0YXRlKiBtX2V4ZWM7CisgICAgICAgIEV4ZWNT
dGF0ZSogbV9jYWxsRnJhbWU7CiAgICAgICAgIENvZGVCbG9jayogbV9jb2RlQmxvY2s7CiAKICAg
ICAgICAgVmVjdG9yPENhbGxSZWNvcmQ+IG1fY2FsbHM7CkluZGV4OiBKYXZhU2NyaXB0Q29yZS9W
TS9Db2RlQmxvY2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9WTS9Db2RlQmxvY2su
aAkocmV2aXNpb24gMzczMzApCisrKyBKYXZhU2NyaXB0Q29yZS9WTS9Db2RlQmxvY2suaAkod29y
a2luZyBjb3B5KQpAQCAtMTYxLDcgKzE2MSw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAg
ICAgICAgIFVTdHJpbmcgZXJyTXNnOwogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAg
IFNvdXJjZUNvZGUgc291cmNlID0gbWFrZVNvdXJjZShldmFsU291cmNlKTsKLSAgICAgICAgICAg
ICAgICBldmFsTm9kZSA9IGV4ZWMtPnBhcnNlcigpLT5wYXJzZTxFdmFsTm9kZT4oZXhlYywgc291
cmNlLCAmZXJyTGluZSwgJmVyck1zZyk7CisgICAgICAgICAgICAgICAgZXZhbE5vZGUgPSBleGVj
LT5nbG9iYWxEYXRhKCkucGFyc2VyLT5wYXJzZTxFdmFsTm9kZT4oZXhlYywgc291cmNlLCAmZXJy
TGluZSwgJmVyck1zZyk7CiAgICAgICAgICAgICAgICAgaWYgKGV2YWxOb2RlKSB7CiAgICAgICAg
ICAgICAgICAgICAgIGlmIChldmFsU291cmNlLnNpemUoKSA8IG1heENhY2hlYWJsZVNvdXJjZUxl
bmd0aCAmJiAoKnNjb3BlQ2hhaW4tPmJlZ2luKCkpLT5pc1ZhcmlhYmxlT2JqZWN0KCkgJiYgY2Fj
aGVNYXAuc2l6ZSgpIDwgbWF4Q2FjaGVFbnRyaWVzKQogICAgICAgICAgICAgICAgICAgICAgICAg
Y2FjaGVNYXAuc2V0KGV2YWxTb3VyY2UucmVwKCksIGV2YWxOb2RlKTsKSW5kZXg6IEphdmFTY3Jp
cHRDb3JlL1ZNL0NvZGVHZW5lcmF0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3Jl
L1ZNL0NvZGVHZW5lcmF0b3IuY3BwCShyZXZpc2lvbiAzNzMzMCkKKysrIEphdmFTY3JpcHRDb3Jl
L1ZNL0NvZGVHZW5lcmF0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03MTMsOCArNzEzLDggQEAg
UmVnaXN0ZXJJRCogQ29kZUdlbmVyYXRvcjo6ZW1pdEVxdWFsaXR5TwogICAgICAgICBpZiAoc3Jj
MS0+aW5kZXgoKSA9PSBkc3RJbmRleAogICAgICAgICAgICAgJiYgc3JjMS0+aXNUZW1wb3Jhcnko
KQogICAgICAgICAgICAgJiYgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHNyYzItPmluZGV4KCkpIDwg
bV9jb2RlQmxvY2stPmNvbnN0YW50UmVnaXN0ZXJzLnNpemUoKQotICAgICAgICAgICAgJiYgbV9j
b2RlQmxvY2stPmNvbnN0YW50UmVnaXN0ZXJzW3NyYzItPmluZGV4KCldLmpzVmFsdWUoZ2xvYmFs
RXhlYygpKS0+aXNTdHJpbmcoKSkgewotICAgICAgICAgICAgY29uc3QgVVN0cmluZyYgdmFsdWUg
PSBzdGF0aWNfY2FzdDxKU1N0cmluZyo+KG1fY29kZUJsb2NrLT5jb25zdGFudFJlZ2lzdGVyc1tz
cmMyLT5pbmRleCgpXS5qc1ZhbHVlKGdsb2JhbEV4ZWMoKSkpLT52YWx1ZSgpOworICAgICAgICAg
ICAgJiYgbV9jb2RlQmxvY2stPmNvbnN0YW50UmVnaXN0ZXJzW3NyYzItPmluZGV4KCldLmpzVmFs
dWUobV9zY29wZUNoYWluLT5nbG9iYWxPYmplY3QoKS0+Z2xvYmFsRXhlYygpKS0+aXNTdHJpbmco
KSkgeworICAgICAgICAgICAgY29uc3QgVVN0cmluZyYgdmFsdWUgPSBzdGF0aWNfY2FzdDxKU1N0
cmluZyo+KG1fY29kZUJsb2NrLT5jb25zdGFudFJlZ2lzdGVyc1tzcmMyLT5pbmRleCgpXS5qc1Zh
bHVlKG1fc2NvcGVDaGFpbi0+Z2xvYmFsT2JqZWN0KCktPmdsb2JhbEV4ZWMoKSkpLT52YWx1ZSgp
OwogICAgICAgICAgICAgaWYgKHZhbHVlID09ICJ1bmRlZmluZWQiKSB7CiAgICAgICAgICAgICAg
ICAgcmV3aW5kVW5hcnlPcCgpOwogICAgICAgICAgICAgICAgIGVtaXRPcGNvZGUob3BfaXNfdW5k
ZWZpbmVkKTsKQEAgLTc3NywxMCArNzc3LDEwIEBAIFJlZ2lzdGVySUQqIENvZGVHZW5lcmF0b3I6
OmVtaXRMb2FkKFJlZ2kKICAgICAvLyBGSVhNRTogT3VyIGhhc2ggdGFibGVzIHdvbid0IGhvbGQg
aW5maW5pdHksIHNvIHdlIG1ha2UgYSBuZXcgSlNOdW1iZXJDZWxsIGVhY2ggdGltZS4KICAgICAv
LyBMYXRlciB3ZSBjYW4gZG8gdGhlIGV4dHJhIHdvcmsgdG8gaGFuZGxlIHRoYXQgbGlrZSB0aGUg
b3RoZXIgY2FzZXMuCiAgICAgaWYgKG51bWJlciA9PSBIYXNoVHJhaXRzPGRvdWJsZT46OmVtcHR5
VmFsdWUoKSB8fCBIYXNoVHJhaXRzPGRvdWJsZT46OmlzRGVsZXRlZFZhbHVlKG51bWJlcikpCi0g
ICAgICAgIHJldHVybiBlbWl0TG9hZChkc3QsIGpzTnVtYmVyKGdsb2JhbEV4ZWMoKSwgbnVtYmVy
KSk7CisgICAgICAgIHJldHVybiBlbWl0TG9hZChkc3QsIGpzTnVtYmVyKGdsb2JhbERhdGEoKSwg
bnVtYmVyKSk7CiAgICAgSlNWYWx1ZSomIHZhbHVlSW5NYXAgPSBtX251bWJlck1hcC5hZGQobnVt
YmVyLCAwKS5maXJzdC0+c2Vjb25kOwogICAgIGlmICghdmFsdWVJbk1hcCkKLSAgICAgICAgdmFs
dWVJbk1hcCA9IGpzTnVtYmVyKGdsb2JhbEV4ZWMoKSwgbnVtYmVyKTsKKyAgICAgICAgdmFsdWVJ
bk1hcCA9IGpzTnVtYmVyKGdsb2JhbERhdGEoKSwgbnVtYmVyKTsKICAgICByZXR1cm4gZW1pdExv
YWQoZHN0LCB2YWx1ZUluTWFwKTsKIH0KIApAQCAtNzg4LDcgKzc4OCw3IEBAIFJlZ2lzdGVySUQq
IENvZGVHZW5lcmF0b3I6OmVtaXRMb2FkKFJlZ2kKIHsKICAgICBKU1N0cmluZyomIHZhbHVlSW5N
YXAgPSBtX3N0cmluZ01hcC5hZGQoaWRlbnRpZmllci51c3RyaW5nKCkucmVwKCksIDApLmZpcnN0
LT5zZWNvbmQ7CiAgICAgaWYgKCF2YWx1ZUluTWFwKQotICAgICAgICB2YWx1ZUluTWFwID0ganNP
d25lZFN0cmluZyhnbG9iYWxFeGVjKCksIGlkZW50aWZpZXIudXN0cmluZygpKTsKKyAgICAgICAg
dmFsdWVJbk1hcCA9IGpzT3duZWRTdHJpbmcoZ2xvYmFsRGF0YSgpLCBpZGVudGlmaWVyLnVzdHJp
bmcoKSk7CiAgICAgcmV0dXJuIGVtaXRMb2FkKGRzdCwgdmFsdWVJbk1hcCk7CiB9CiAKQEAgLTgx
Miw3ICs4MTIsNyBAQCBSZWdpc3RlcklEKiBDb2RlR2VuZXJhdG9yOjplbWl0VW5leHBlY3RlCiB7
CiAgICAgZW1pdE9wY29kZShvcF91bmV4cGVjdGVkX2xvYWQpOwogICAgIGluc3RydWN0aW9ucygp
LmFwcGVuZChkc3QtPmluZGV4KCkpOwotICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChhZGRVbmV4
cGVjdGVkQ29uc3RhbnQoanNOdW1iZXIoZ2xvYmFsRXhlYygpLCBkKSkpOworICAgIGluc3RydWN0
aW9ucygpLmFwcGVuZChhZGRVbmV4cGVjdGVkQ29uc3RhbnQoanNOdW1iZXIoZ2xvYmFsRGF0YSgp
LCBkKSkpOwogICAgIHJldHVybiBkc3Q7CiB9CiAKQEAgLTExODIsNyArMTE4Miw3IEBAIFJlZ2lz
dGVySUQqIENvZGVHZW5lcmF0b3I6OmVtaXRDb25zdHJ1Y3QKICAgICAvLyBMb2FkIHByb3RvdHlw
ZS4KICAgICBlbWl0RXhwcmVzc2lvbkluZm8oZGl2b3QsIHN0YXJ0T2Zmc2V0LCBlbmRPZmZzZXQp
OwogICAgIFJlZlB0cjxSZWdpc3RlcklEPiBmdW5jUHJvdG8gPSBuZXdUZW1wb3JhcnkoKTsKLSAg
ICBlbWl0R2V0QnlJZChmdW5jUHJvdG8uZ2V0KCksIGZ1bmMsIGdsb2JhbEV4ZWMoKS0+cHJvcGVy
dHlOYW1lcygpLnByb3RvdHlwZSk7CisgICAgZW1pdEdldEJ5SWQoZnVuY1Byb3RvLmdldCgpLCBm
dW5jLCBnbG9iYWxEYXRhKCktPnByb3BlcnR5TmFtZXMtPnByb3RvdHlwZSk7CiAKICAgICAvLyBH
ZW5lcmF0ZSBjb2RlIGZvciBhcmd1bWVudHMuCiAgICAgVmVjdG9yPFJlZlB0cjxSZWdpc3RlcklE
PiwgMTY+IGFyZ3Y7CkluZGV4OiBKYXZhU2NyaXB0Q29yZS9WTS9Db2RlR2VuZXJhdG9yLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvVk0vQ29kZUdlbmVyYXRvci5oCShyZXZpc2lvbiAz
NzMzMCkKKysrIEphdmFTY3JpcHRDb3JlL1ZNL0NvZGVHZW5lcmF0b3IuaAkod29ya2luZyBjb3B5
KQpAQCAtMzIwLDggKzMyMCw2IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgICAgIENvZGVUeXBl
IGNvZGVUeXBlKCkgY29uc3QgeyByZXR1cm4gbV9jb2RlVHlwZTsgfQogCi0gICAgICAgIEV4ZWNT
dGF0ZSogZ2xvYmFsRXhlYygpIHsgcmV0dXJuIG1fc2NvcGVDaGFpbi0+Z2xvYmFsT2JqZWN0KCkt
Pmdsb2JhbEV4ZWMoKTsgfQotCiAgICAgcHJpdmF0ZToKICAgICAgICAgdm9pZCBlbWl0T3Bjb2Rl
KE9wY29kZUlEKTsKICAgICAgICAgdm9pZCByZXRyaWV2ZUxhc3RCaW5hcnlPcChpbnQmIGRzdElu
ZGV4LCBpbnQmIHNyYzFJbmRleCwgaW50JiBzcmMySW5kZXgpOwpJbmRleDogSmF2YVNjcmlwdENv
cmUvVk0vTWFjaGluZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvVk0vTWFjaGlu
ZS5jcHAJKHJldmlzaW9uIDM3MzMwKQorKysgSmF2YVNjcmlwdENvcmUvVk0vTWFjaGluZS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTE2Miw3ICsxNjIsNyBAQCBzdGF0aWMgQUxXQVlTX0lOTElORSBi
b29sIGZhc3RUb1VJbnQzMihKCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXN0YXRpYyBpbmxpbmUg
Ym9vbCBqc0xlc3MoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlKiB2MSwgSlNWYWx1ZSogdjIpCitz
dGF0aWMgaW5saW5lIGJvb2wganNMZXNzKENhbGxGcmFtZSogY2FsbEZyYW1lLCBKU1ZhbHVlKiB2
MSwgSlNWYWx1ZSogdjIpCiB7CiAgICAgaWYgKEpTSW1tZWRpYXRlOjphcmVCb3RoSW1tZWRpYXRl
TnVtYmVycyh2MSwgdjIpKQogICAgICAgICByZXR1cm4gSlNJbW1lZGlhdGU6OmdldFRydW5jYXRl
ZEludDMyKHYxKSA8IEpTSW1tZWRpYXRlOjpnZXRUcnVuY2F0ZWRJbnQzMih2Mik7CkBAIC0xNzIs
MTQgKzE3MiwxNCBAQCBzdGF0aWMgaW5saW5lIGJvb2wganNMZXNzKEV4ZWNTdGF0ZSogZXhlCiAg
ICAgaWYgKGZhc3RJc051bWJlcih2MSwgbjEpICYmIGZhc3RJc051bWJlcih2MiwgbjIpKQogICAg
ICAgICByZXR1cm4gbjEgPCBuMjsKIAotICAgIE1hY2hpbmUqIG1hY2hpbmUgPSBleGVjLT5tYWNo
aW5lKCk7CisgICAgTWFjaGluZSogbWFjaGluZSA9IGNhbGxGcmFtZS0+bWFjaGluZSgpOwogICAg
IGlmIChtYWNoaW5lLT5pc0pTU3RyaW5nKHYxKSAmJiBtYWNoaW5lLT5pc0pTU3RyaW5nKHYyKSkK
ICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGNvbnN0IEpTU3RyaW5nKj4odjEpLT52YWx1ZSgp
IDwgc3RhdGljX2Nhc3Q8Y29uc3QgSlNTdHJpbmcqPih2MiktPnZhbHVlKCk7CiAKICAgICBKU1Zh
bHVlKiBwMTsKICAgICBKU1ZhbHVlKiBwMjsKLSAgICBib29sIHdhc05vdFN0cmluZzEgPSB2MS0+
Z2V0UHJpbWl0aXZlTnVtYmVyKGV4ZWMsIG4xLCBwMSk7Ci0gICAgYm9vbCB3YXNOb3RTdHJpbmcy
ID0gdjItPmdldFByaW1pdGl2ZU51bWJlcihleGVjLCBuMiwgcDIpOworICAgIGJvb2wgd2FzTm90
U3RyaW5nMSA9IHYxLT5nZXRQcmltaXRpdmVOdW1iZXIoY2FsbEZyYW1lLCBuMSwgcDEpOworICAg
IGJvb2wgd2FzTm90U3RyaW5nMiA9IHYyLT5nZXRQcmltaXRpdmVOdW1iZXIoY2FsbEZyYW1lLCBu
MiwgcDIpOwogCiAgICAgaWYgKHdhc05vdFN0cmluZzEgfCB3YXNOb3RTdHJpbmcyKQogICAgICAg
ICByZXR1cm4gbjEgPCBuMjsKQEAgLTE4Nyw3ICsxODcsNyBAQCBzdGF0aWMgaW5saW5lIGJvb2wg
anNMZXNzKEV4ZWNTdGF0ZSogZXhlCiAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGNvbnN0IEpTU3Ry
aW5nKj4ocDEpLT52YWx1ZSgpIDwgc3RhdGljX2Nhc3Q8Y29uc3QgSlNTdHJpbmcqPihwMiktPnZh
bHVlKCk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgYm9vbCBqc0xlc3NFcShFeGVjU3RhdGUqIGV4ZWMs
IEpTVmFsdWUqIHYxLCBKU1ZhbHVlKiB2MikKK3N0YXRpYyBpbmxpbmUgYm9vbCBqc0xlc3NFcShD
YWxsRnJhbWUqIGNhbGxGcmFtZSwgSlNWYWx1ZSogdjEsIEpTVmFsdWUqIHYyKQogewogICAgIGlm
IChKU0ltbWVkaWF0ZTo6YXJlQm90aEltbWVkaWF0ZU51bWJlcnModjEsIHYyKSkKICAgICAgICAg
cmV0dXJuIEpTSW1tZWRpYXRlOjpnZXRUcnVuY2F0ZWRJbnQzMih2MSkgPD0gSlNJbW1lZGlhdGU6
OmdldFRydW5jYXRlZEludDMyKHYyKTsKQEAgLTE5NywxNCArMTk3LDE0IEBAIHN0YXRpYyBpbmxp
bmUgYm9vbCBqc0xlc3NFcShFeGVjU3RhdGUqIGUKICAgICBpZiAoZmFzdElzTnVtYmVyKHYxLCBu
MSkgJiYgZmFzdElzTnVtYmVyKHYyLCBuMikpCiAgICAgICAgIHJldHVybiBuMSA8PSBuMjsKIAot
ICAgIE1hY2hpbmUqIG1hY2hpbmUgPSBleGVjLT5tYWNoaW5lKCk7CisgICAgTWFjaGluZSogbWFj
aGluZSA9IGNhbGxGcmFtZS0+bWFjaGluZSgpOwogICAgIGlmIChtYWNoaW5lLT5pc0pTU3RyaW5n
KHYxKSAmJiBtYWNoaW5lLT5pc0pTU3RyaW5nKHYyKSkKICAgICAgICAgcmV0dXJuICEoc3RhdGlj
X2Nhc3Q8Y29uc3QgSlNTdHJpbmcqPih2MiktPnZhbHVlKCkgPCBzdGF0aWNfY2FzdDxjb25zdCBK
U1N0cmluZyo+KHYxKS0+dmFsdWUoKSk7CiAKICAgICBKU1ZhbHVlKiBwMTsKICAgICBKU1ZhbHVl
KiBwMjsKLSAgICBib29sIHdhc05vdFN0cmluZzEgPSB2MS0+Z2V0UHJpbWl0aXZlTnVtYmVyKGV4
ZWMsIG4xLCBwMSk7Ci0gICAgYm9vbCB3YXNOb3RTdHJpbmcyID0gdjItPmdldFByaW1pdGl2ZU51
bWJlcihleGVjLCBuMiwgcDIpOworICAgIGJvb2wgd2FzTm90U3RyaW5nMSA9IHYxLT5nZXRQcmlt
aXRpdmVOdW1iZXIoY2FsbEZyYW1lLCBuMSwgcDEpOworICAgIGJvb2wgd2FzTm90U3RyaW5nMiA9
IHYyLT5nZXRQcmltaXRpdmVOdW1iZXIoY2FsbEZyYW1lLCBuMiwgcDIpOwogCiAgICAgaWYgKHdh
c05vdFN0cmluZzEgfCB3YXNOb3RTdHJpbmcyKQogICAgICAgICByZXR1cm4gbjEgPD0gbjI7CkBA
IC0yMTIsMjAgKzIxMiwyMCBAQCBzdGF0aWMgaW5saW5lIGJvb2wganNMZXNzRXEoRXhlY1N0YXRl
KiBlCiAgICAgcmV0dXJuICEoc3RhdGljX2Nhc3Q8Y29uc3QgSlNTdHJpbmcqPihwMiktPnZhbHVl
KCkgPCBzdGF0aWNfY2FzdDxjb25zdCBKU1N0cmluZyo+KHAxKS0+dmFsdWUoKSk7CiB9CiAKLXN0
YXRpYyBORVZFUl9JTkxJTkUgSlNWYWx1ZSoganNBZGRTbG93Q2FzZShFeGVjU3RhdGUqIGV4ZWMs
IEpTVmFsdWUqIHYxLCBKU1ZhbHVlKiB2MikKK3N0YXRpYyBORVZFUl9JTkxJTkUgSlNWYWx1ZSog
anNBZGRTbG93Q2FzZShDYWxsRnJhbWUqIGNhbGxGcmFtZSwgSlNWYWx1ZSogdjEsIEpTVmFsdWUq
IHYyKQogewogICAgIC8vIGV4Y2VwdGlvbiBmb3IgdGhlIERhdGUgZXhjZXB0aW9uIGluIGRlZmF1
bHRWYWx1ZSgpCi0gICAgSlNWYWx1ZSogcDEgPSB2MS0+dG9QcmltaXRpdmUoZXhlYyk7Ci0gICAg
SlNWYWx1ZSogcDIgPSB2Mi0+dG9QcmltaXRpdmUoZXhlYyk7CisgICAgSlNWYWx1ZSogcDEgPSB2
MS0+dG9QcmltaXRpdmUoY2FsbEZyYW1lKTsKKyAgICBKU1ZhbHVlKiBwMiA9IHYyLT50b1ByaW1p
dGl2ZShjYWxsRnJhbWUpOwogCiAgICAgaWYgKHAxLT5pc1N0cmluZygpIHx8IHAyLT5pc1N0cmlu
ZygpKSB7Ci0gICAgICAgIFJlZlB0cjxVU3RyaW5nOjpSZXA+IHZhbHVlID0gY29uY2F0ZW5hdGUo
cDEtPnRvU3RyaW5nKGV4ZWMpLnJlcCgpLCBwMi0+dG9TdHJpbmcoZXhlYykucmVwKCkpOworICAg
ICAgICBSZWZQdHI8VVN0cmluZzo6UmVwPiB2YWx1ZSA9IGNvbmNhdGVuYXRlKHAxLT50b1N0cmlu
ZyhjYWxsRnJhbWUpLnJlcCgpLCBwMi0+dG9TdHJpbmcoY2FsbEZyYW1lKS5yZXAoKSk7CiAgICAg
ICAgIGlmICghdmFsdWUpCi0gICAgICAgICAgICByZXR1cm4gdGhyb3dPdXRPZk1lbW9yeUVycm9y
KGV4ZWMpOwotICAgICAgICByZXR1cm4ganNTdHJpbmcoZXhlYywgdmFsdWUucmVsZWFzZSgpKTsK
KyAgICAgICAgICAgIHJldHVybiB0aHJvd091dE9mTWVtb3J5RXJyb3IoY2FsbEZyYW1lKTsKKyAg
ICAgICAgcmV0dXJuIGpzU3RyaW5nKGNhbGxGcmFtZSwgdmFsdWUucmVsZWFzZSgpKTsKICAgICB9
CiAKLSAgICByZXR1cm4ganNOdW1iZXIoZXhlYywgcDEtPnRvTnVtYmVyKGV4ZWMpICsgcDItPnRv
TnVtYmVyKGV4ZWMpKTsKKyAgICByZXR1cm4ganNOdW1iZXIoY2FsbEZyYW1lLCBwMS0+dG9OdW1i
ZXIoY2FsbEZyYW1lKSArIHAyLT50b051bWJlcihjYWxsRnJhbWUpKTsKIH0KIAogLy8gRmFzdC1w
YXRoIGNob2ljZXMgaGVyZSBhcmUgYmFzZWQgb24gZnJlcXVlbmN5IGRhdGEgZnJvbSBTdW5TcGlk
ZXI6CkBAIC0yMzcsMjEgKzIzNywyMSBAQCBzdGF0aWMgTkVWRVJfSU5MSU5FIEpTVmFsdWUqIGpz
QWRkU2xvd0NhCiAvLyAgICAxMzk2MiAgIEFkZCBjYXNlOiA1IDMKIC8vICAgIDQwMDAgICAgQWRk
IGNhc2U6IDMgNQogCi1zdGF0aWMgQUxXQVlTX0lOTElORSBKU1ZhbHVlKiBqc0FkZChFeGVjU3Rh
dGUqIGV4ZWMsIEpTVmFsdWUqIHYxLCBKU1ZhbHVlKiB2MikKK3N0YXRpYyBBTFdBWVNfSU5MSU5F
IEpTVmFsdWUqIGpzQWRkKENhbGxGcmFtZSogY2FsbEZyYW1lLCBKU1ZhbHVlKiB2MSwgSlNWYWx1
ZSogdjIpCiB7CiAgICAgZG91YmxlIGxlZnQ7CiAgICAgZG91YmxlIHJpZ2h0ID0gMC4wOwogCiAg
ICAgYm9vbCByaWdodElzTnVtYmVyID0gZmFzdElzTnVtYmVyKHYyLCByaWdodCk7CiAgICAgaWYg
KHJpZ2h0SXNOdW1iZXIgJiYgZmFzdElzTnVtYmVyKHYxLCBsZWZ0KSkKLSAgICAgICAgcmV0dXJu
IGpzTnVtYmVyKGV4ZWMsIGxlZnQgKyByaWdodCk7CisgICAgICAgIHJldHVybiBqc051bWJlcihj
YWxsRnJhbWUsIGxlZnQgKyByaWdodCk7CiAgICAgCiAgICAgYm9vbCBsZWZ0SXNTdHJpbmcgPSB2
MS0+aXNTdHJpbmcoKTsKICAgICBpZiAobGVmdElzU3RyaW5nICYmIHYyLT5pc1N0cmluZygpKSB7
CiAgICAgICAgIFJlZlB0cjxVU3RyaW5nOjpSZXA+IHZhbHVlID0gY29uY2F0ZW5hdGUoc3RhdGlj
X2Nhc3Q8SlNTdHJpbmcqPih2MSktPnZhbHVlKCkucmVwKCksIHN0YXRpY19jYXN0PEpTU3RyaW5n
Kj4odjIpLT52YWx1ZSgpLnJlcCgpKTsKICAgICAgICAgaWYgKCF2YWx1ZSkKLSAgICAgICAgICAg
IHJldHVybiB0aHJvd091dE9mTWVtb3J5RXJyb3IoZXhlYyk7Ci0gICAgICAgIHJldHVybiBqc1N0
cmluZyhleGVjLCB2YWx1ZS5yZWxlYXNlKCkpOworICAgICAgICAgICAgcmV0dXJuIHRocm93T3V0
T2ZNZW1vcnlFcnJvcihjYWxsRnJhbWUpOworICAgICAgICByZXR1cm4ganNTdHJpbmcoY2FsbEZy
YW1lLCB2YWx1ZS5yZWxlYXNlKCkpOwogICAgIH0KIAogICAgIGlmIChyaWdodElzTnVtYmVyICYg
bGVmdElzU3RyaW5nKSB7CkBAIC0yNjAsMzQgKzI2MCwzNCBAQCBzdGF0aWMgQUxXQVlTX0lOTElO
RSBKU1ZhbHVlKiBqc0FkZChFeGVjCiAgICAgICAgICAgICBjb25jYXRlbmF0ZShzdGF0aWNfY2Fz
dDxKU1N0cmluZyo+KHYxKS0+dmFsdWUoKS5yZXAoKSwgcmlnaHQpOwogCiAgICAgICAgIGlmICgh
dmFsdWUpCi0gICAgICAgICAgICByZXR1cm4gdGhyb3dPdXRPZk1lbW9yeUVycm9yKGV4ZWMpOwot
ICAgICAgICByZXR1cm4ganNTdHJpbmcoZXhlYywgdmFsdWUucmVsZWFzZSgpKTsKKyAgICAgICAg
ICAgIHJldHVybiB0aHJvd091dE9mTWVtb3J5RXJyb3IoY2FsbEZyYW1lKTsKKyAgICAgICAgcmV0
dXJuIGpzU3RyaW5nKGNhbGxGcmFtZSwgdmFsdWUucmVsZWFzZSgpKTsKICAgICB9CiAKICAgICAv
LyBBbGwgb3RoZXIgY2FzZXMgYXJlIHByZXR0eSB1bmNvbW1vbgotICAgIHJldHVybiBqc0FkZFNs
b3dDYXNlKGV4ZWMsIHYxLCB2Mik7CisgICAgcmV0dXJuIGpzQWRkU2xvd0Nhc2UoY2FsbEZyYW1l
LCB2MSwgdjIpOwogfQogCi1zdGF0aWMgSlNWYWx1ZSoganNUeXBlU3RyaW5nRm9yVmFsdWUoRXhl
Y1N0YXRlKiBleGVjLCBKU1ZhbHVlKiB2KQorc3RhdGljIEpTVmFsdWUqIGpzVHlwZVN0cmluZ0Zv
clZhbHVlKENhbGxGcmFtZSogY2FsbEZyYW1lLCBKU1ZhbHVlKiB2KQogewogICAgIGlmICh2LT5p
c1VuZGVmaW5lZCgpKQotICAgICAgICByZXR1cm4ganNOb250cml2aWFsU3RyaW5nKGV4ZWMsICJ1
bmRlZmluZWQiKTsKKyAgICAgICAgcmV0dXJuIGpzTm9udHJpdmlhbFN0cmluZyhjYWxsRnJhbWUs
ICJ1bmRlZmluZWQiKTsKICAgICBpZiAodi0+aXNCb29sZWFuKCkpCi0gICAgICAgIHJldHVybiBq
c05vbnRyaXZpYWxTdHJpbmcoZXhlYywgImJvb2xlYW4iKTsKKyAgICAgICAgcmV0dXJuIGpzTm9u
dHJpdmlhbFN0cmluZyhjYWxsRnJhbWUsICJib29sZWFuIik7CiAgICAgaWYgKHYtPmlzTnVtYmVy
KCkpCi0gICAgICAgIHJldHVybiBqc05vbnRyaXZpYWxTdHJpbmcoZXhlYywgIm51bWJlciIpOwor
ICAgICAgICByZXR1cm4ganNOb250cml2aWFsU3RyaW5nKGNhbGxGcmFtZSwgIm51bWJlciIpOwog
ICAgIGlmICh2LT5pc1N0cmluZygpKQotICAgICAgICByZXR1cm4ganNOb250cml2aWFsU3RyaW5n
KGV4ZWMsICJzdHJpbmciKTsKKyAgICAgICAgcmV0dXJuIGpzTm9udHJpdmlhbFN0cmluZyhjYWxs
RnJhbWUsICJzdHJpbmciKTsKICAgICBpZiAodi0+aXNPYmplY3QoKSkgewogICAgICAgICAvLyBS
ZXR1cm4gInVuZGVmaW5lZCIgZm9yIG9iamVjdHMgdGhhdCBzaG91bGQgYmUgdHJlYXRlZAogICAg
ICAgICAvLyBhcyBudWxsIHdoZW4gZG9pbmcgY29tcGFyaXNvbnMuCiAgICAgICAgIGlmIChzdGF0
aWNfY2FzdDxKU09iamVjdCo+KHYpLT5zdHJ1Y3R1cmVJRCgpLT50eXBlSW5mbygpLm1hc3F1ZXJh
ZGVzQXNVbmRlZmluZWQoKSkKLSAgICAgICAgICAgIHJldHVybiBqc05vbnRyaXZpYWxTdHJpbmco
ZXhlYywgInVuZGVmaW5lZCIpOworICAgICAgICAgICAgcmV0dXJuIGpzTm9udHJpdmlhbFN0cmlu
ZyhjYWxsRnJhbWUsICJ1bmRlZmluZWQiKTsKICAgICAgICAgQ2FsbERhdGEgY2FsbERhdGE7CiAg
ICAgICAgIGlmIChzdGF0aWNfY2FzdDxKU09iamVjdCo+KHYpLT5nZXRDYWxsRGF0YShjYWxsRGF0
YSkgIT0gQ2FsbFR5cGVOb25lKQotICAgICAgICAgICAgcmV0dXJuIGpzTm9udHJpdmlhbFN0cmlu
ZyhleGVjLCAiZnVuY3Rpb24iKTsKKyAgICAgICAgICAgIHJldHVybiBqc05vbnRyaXZpYWxTdHJp
bmcoY2FsbEZyYW1lLCAiZnVuY3Rpb24iKTsKICAgICB9Ci0gICAgcmV0dXJuIGpzTm9udHJpdmlh
bFN0cmluZyhleGVjLCAib2JqZWN0Iik7CisgICAgcmV0dXJuIGpzTm9udHJpdmlhbFN0cmluZyhj
YWxsRnJhbWUsICJvYmplY3QiKTsKIH0KIAogc3RhdGljIGJvb2wganNJc09iamVjdFR5cGUoSlNW
YWx1ZSogdikKQEAgLTMxOCw0MyArMzE4LDQzIEBAIHN0YXRpYyBib29sIGpzSXNGdW5jdGlvblR5
cGUoSlNWYWx1ZSogdikKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLU5FVkVSX0lOTElORSBib29s
IE1hY2hpbmU6OnJlc29sdmUoRXhlY1N0YXRlKiBleGVjLCBJbnN0cnVjdGlvbiogdlBDLCBSZWdp
c3RlciogciwgSlNWYWx1ZSomIGV4Y2VwdGlvblZhbHVlKQorTkVWRVJfSU5MSU5FIGJvb2wgTWFj
aGluZTo6cmVzb2x2ZShDYWxsRnJhbWUqIGNhbGxGcmFtZSwgSW5zdHJ1Y3Rpb24qIHZQQywgSlNW
YWx1ZSomIGV4Y2VwdGlvblZhbHVlKQogewogICAgIGludCBkc3QgPSAodlBDICsgMSktPnUub3Bl
cmFuZDsKICAgICBpbnQgcHJvcGVydHkgPSAodlBDICsgMiktPnUub3BlcmFuZDsKIAotICAgIFNj
b3BlQ2hhaW5Ob2RlKiBzY29wZUNoYWluID0gdGhpcy0+c2NvcGVDaGFpbihyKTsKKyAgICBTY29w
ZUNoYWluTm9kZSogc2NvcGVDaGFpbiA9IGNhbGxGcmFtZS0+c2NvcGVDaGFpbigpOwogICAgIFNj
b3BlQ2hhaW5JdGVyYXRvciBpdGVyID0gc2NvcGVDaGFpbi0+YmVnaW4oKTsKICAgICBTY29wZUNo
YWluSXRlcmF0b3IgZW5kID0gc2NvcGVDaGFpbi0+ZW5kKCk7CiAgICAgQVNTRVJUKGl0ZXIgIT0g
ZW5kKTsKIAotICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gdGhpcy0+Y29kZUJsb2NrKHIpOwor
ICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gY2FsbEZyYW1lLT5jb2RlQmxvY2soKTsKICAgICBJ
ZGVudGlmaWVyJiBpZGVudCA9IGNvZGVCbG9jay0+aWRlbnRpZmllcnNbcHJvcGVydHldOwogICAg
IGRvIHsKICAgICAgICAgSlNPYmplY3QqIG8gPSAqaXRlcjsKICAgICAgICAgUHJvcGVydHlTbG90
IHNsb3Qobyk7Ci0gICAgICAgIGlmIChvLT5nZXRQcm9wZXJ0eVNsb3QoZXhlYywgaWRlbnQsIHNs
b3QpKSB7Ci0gICAgICAgICAgICBKU1ZhbHVlKiByZXN1bHQgPSBzbG90LmdldFZhbHVlKGV4ZWMs
IGlkZW50KTsKLSAgICAgICAgICAgIGV4Y2VwdGlvblZhbHVlID0gZXhlYy0+ZXhjZXB0aW9uKCk7
CisgICAgICAgIGlmIChvLT5nZXRQcm9wZXJ0eVNsb3QoY2FsbEZyYW1lLCBpZGVudCwgc2xvdCkp
IHsKKyAgICAgICAgICAgIEpTVmFsdWUqIHJlc3VsdCA9IHNsb3QuZ2V0VmFsdWUoY2FsbEZyYW1l
LCBpZGVudCk7CisgICAgICAgICAgICBleGNlcHRpb25WYWx1ZSA9IGNhbGxGcmFtZS0+ZXhjZXB0
aW9uKCk7CiAgICAgICAgICAgICBpZiAoZXhjZXB0aW9uVmFsdWUpCiAgICAgICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgcltkc3RdID0gcmVzdWx0OworICAgICAgICAgICAg
Y2FsbEZyYW1lLT5yZWdpc3RlcnMoKVtkc3RdID0gcmVzdWx0OwogICAgICAgICAgICAgcmV0dXJu
IHRydWU7CiAgICAgICAgIH0KICAgICB9IHdoaWxlICgrK2l0ZXIgIT0gZW5kKTsKLSAgICBleGNl
cHRpb25WYWx1ZSA9IGNyZWF0ZVVuZGVmaW5lZFZhcmlhYmxlRXJyb3IoZXhlYywgaWRlbnQsIHZQ
QywgY29kZUJsb2NrKTsKKyAgICBleGNlcHRpb25WYWx1ZSA9IGNyZWF0ZVVuZGVmaW5lZFZhcmlh
YmxlRXJyb3IoY2FsbEZyYW1lLCBpZGVudCwgdlBDLCBjb2RlQmxvY2spOwogICAgIHJldHVybiBm
YWxzZTsKIH0KIAotTkVWRVJfSU5MSU5FIGJvb2wgTWFjaGluZTo6cmVzb2x2ZVNraXAoRXhlY1N0
YXRlKiBleGVjLCBJbnN0cnVjdGlvbiogdlBDLCBSZWdpc3RlciogciwgSlNWYWx1ZSomIGV4Y2Vw
dGlvblZhbHVlKQorTkVWRVJfSU5MSU5FIGJvb2wgTWFjaGluZTo6cmVzb2x2ZVNraXAoQ2FsbEZy
YW1lKiBjYWxsRnJhbWUsIEluc3RydWN0aW9uKiB2UEMsIEpTVmFsdWUqJiBleGNlcHRpb25WYWx1
ZSkKIHsKLSAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IHRoaXMtPmNvZGVCbG9jayhyKTsKKyAg
ICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IGNhbGxGcmFtZS0+Y29kZUJsb2NrKCk7CiAKICAgICBp
bnQgZHN0ID0gKHZQQyArIDEpLT51Lm9wZXJhbmQ7CiAgICAgaW50IHByb3BlcnR5ID0gKHZQQyAr
IDIpLT51Lm9wZXJhbmQ7CiAgICAgaW50IHNraXAgPSAodlBDICsgMyktPnUub3BlcmFuZCArIGNv
ZGVCbG9jay0+bmVlZHNGdWxsU2NvcGVDaGFpbjsKIAotICAgIFNjb3BlQ2hhaW5Ob2RlKiBzY29w
ZUNoYWluID0gdGhpcy0+c2NvcGVDaGFpbihyKTsKKyAgICBTY29wZUNoYWluTm9kZSogc2NvcGVD
aGFpbiA9IGNhbGxGcmFtZS0+c2NvcGVDaGFpbigpOwogICAgIFNjb3BlQ2hhaW5JdGVyYXRvciBp
dGVyID0gc2NvcGVDaGFpbi0+YmVnaW4oKTsKICAgICBTY29wZUNoYWluSXRlcmF0b3IgZW5kID0g
c2NvcGVDaGFpbi0+ZW5kKCk7CiAgICAgQVNTRVJUKGl0ZXIgIT0gZW5kKTsKQEAgLTM2NiwyMCAr
MzY2LDIwIEBAIE5FVkVSX0lOTElORSBib29sIE1hY2hpbmU6OnJlc29sdmVTa2lwKEUKICAgICBk
byB7CiAgICAgICAgIEpTT2JqZWN0KiBvID0gKml0ZXI7CiAgICAgICAgIFByb3BlcnR5U2xvdCBz
bG90KG8pOwotICAgICAgICBpZiAoby0+Z2V0UHJvcGVydHlTbG90KGV4ZWMsIGlkZW50LCBzbG90
KSkgewotICAgICAgICAgICAgSlNWYWx1ZSogcmVzdWx0ID0gc2xvdC5nZXRWYWx1ZShleGVjLCBp
ZGVudCk7Ci0gICAgICAgICAgICBleGNlcHRpb25WYWx1ZSA9IGV4ZWMtPmV4Y2VwdGlvbigpOwor
ICAgICAgICBpZiAoby0+Z2V0UHJvcGVydHlTbG90KGNhbGxGcmFtZSwgaWRlbnQsIHNsb3QpKSB7
CisgICAgICAgICAgICBKU1ZhbHVlKiByZXN1bHQgPSBzbG90LmdldFZhbHVlKGNhbGxGcmFtZSwg
aWRlbnQpOworICAgICAgICAgICAgZXhjZXB0aW9uVmFsdWUgPSBjYWxsRnJhbWUtPmV4Y2VwdGlv
bigpOwogICAgICAgICAgICAgaWYgKGV4Y2VwdGlvblZhbHVlKQogICAgICAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICAgICAgICAgIHJbZHN0XSA9IHJlc3VsdDsKKyAgICAgICAgICAgIGNh
bGxGcmFtZS0+cmVnaXN0ZXJzKClbZHN0XSA9IHJlc3VsdDsKICAgICAgICAgICAgIHJldHVybiB0
cnVlOwogICAgICAgICB9CiAgICAgfSB3aGlsZSAoKytpdGVyICE9IGVuZCk7Ci0gICAgZXhjZXB0
aW9uVmFsdWUgPSBjcmVhdGVVbmRlZmluZWRWYXJpYWJsZUVycm9yKGV4ZWMsIGlkZW50LCB2UEMs
IGNvZGVCbG9jayk7CisgICAgZXhjZXB0aW9uVmFsdWUgPSBjcmVhdGVVbmRlZmluZWRWYXJpYWJs
ZUVycm9yKGNhbGxGcmFtZSwgaWRlbnQsIHZQQywgY29kZUJsb2NrKTsKICAgICByZXR1cm4gZmFs
c2U7CiB9CiAKLU5FVkVSX0lOTElORSBib29sIE1hY2hpbmU6OnJlc29sdmVHbG9iYWwoRXhlY1N0
YXRlKiBleGVjLCBJbnN0cnVjdGlvbiogdlBDLCBSZWdpc3RlciogciwgSlNWYWx1ZSomIGV4Y2Vw
dGlvblZhbHVlKQorTkVWRVJfSU5MSU5FIGJvb2wgTWFjaGluZTo6cmVzb2x2ZUdsb2JhbChDYWxs
RnJhbWUqIGNhbGxGcmFtZSwgSW5zdHJ1Y3Rpb24qIHZQQywgSlNWYWx1ZSomIGV4Y2VwdGlvblZh
bHVlKQogewogICAgIGludCBkc3QgPSAodlBDICsgMSktPnUub3BlcmFuZDsKICAgICBKU0dsb2Jh
bE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gc3RhdGljX2Nhc3Q8SlNHbG9iYWxPYmplY3QqPigodlBD
ICsgMiktPnUuanNDZWxsKTsKQEAgLTM4OSwzNyArMzg5LDM3IEBAIE5FVkVSX0lOTElORSBib29s
IE1hY2hpbmU6OnJlc29sdmVHbG9iYWwKICAgICBpbnQgb2Zmc2V0ID0gKHZQQyArIDUpLT51Lm9w
ZXJhbmQ7CiAKICAgICBpZiAoc3RydWN0dXJlSUQgPT0gZ2xvYmFsT2JqZWN0LT5zdHJ1Y3R1cmVJ
RCgpKSB7Ci0gICAgICAgIHJbZHN0XSA9IGdsb2JhbE9iamVjdC0+Z2V0RGlyZWN0T2Zmc2V0KG9m
ZnNldCk7CisgICAgICAgIGNhbGxGcmFtZS0+cmVnaXN0ZXJzKClbZHN0XSA9IGdsb2JhbE9iamVj
dC0+Z2V0RGlyZWN0T2Zmc2V0KG9mZnNldCk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0K
IAotICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gdGhpcy0+Y29kZUJsb2NrKHIpOworICAgIENv
ZGVCbG9jayogY29kZUJsb2NrID0gY2FsbEZyYW1lLT5jb2RlQmxvY2soKTsKICAgICBJZGVudGlm
aWVyJiBpZGVudCA9IGNvZGVCbG9jay0+aWRlbnRpZmllcnNbcHJvcGVydHldOwogICAgIFByb3Bl
cnR5U2xvdCBzbG90KGdsb2JhbE9iamVjdCk7Ci0gICAgaWYgKGdsb2JhbE9iamVjdC0+Z2V0UHJv
cGVydHlTbG90KGV4ZWMsIGlkZW50LCBzbG90KSkgewotICAgICAgICBKU1ZhbHVlKiByZXN1bHQg
PSBzbG90LmdldFZhbHVlKGV4ZWMsIGlkZW50KTsKKyAgICBpZiAoZ2xvYmFsT2JqZWN0LT5nZXRQ
cm9wZXJ0eVNsb3QoY2FsbEZyYW1lLCBpZGVudCwgc2xvdCkpIHsKKyAgICAgICAgSlNWYWx1ZSog
cmVzdWx0ID0gc2xvdC5nZXRWYWx1ZShjYWxsRnJhbWUsIGlkZW50KTsKICAgICAgICAgaWYgKHNs
b3QuaXNDYWNoZWFibGUoKSkgewogICAgICAgICAgICAgaWYgKHZQQ1s0XS51LnN0cnVjdHVyZUlE
KQogICAgICAgICAgICAgICAgIHZQQ1s0XS51LnN0cnVjdHVyZUlELT5kZXJlZigpOwogICAgICAg
ICAgICAgZ2xvYmFsT2JqZWN0LT5zdHJ1Y3R1cmVJRCgpLT5yZWYoKTsKICAgICAgICAgICAgIHZQ
Q1s0XSA9IGdsb2JhbE9iamVjdC0+c3RydWN0dXJlSUQoKTsKICAgICAgICAgICAgIHZQQ1s1XSA9
IHNsb3QuY2FjaGVkT2Zmc2V0KCk7Ci0gICAgICAgICAgICByW2RzdF0gPSByZXN1bHQ7CisgICAg
ICAgICAgICBjYWxsRnJhbWUtPnJlZ2lzdGVycygpW2RzdF0gPSByZXN1bHQ7CiAgICAgICAgICAg
ICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfQogCi0gICAgICAgIGV4Y2VwdGlvblZhbHVlID0gZXhl
Yy0+ZXhjZXB0aW9uKCk7CisgICAgICAgIGV4Y2VwdGlvblZhbHVlID0gY2FsbEZyYW1lLT5leGNl
cHRpb24oKTsKICAgICAgICAgaWYgKGV4Y2VwdGlvblZhbHVlKQogICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgICAgICByW2RzdF0gPSByZXN1bHQ7CisgICAgICAgIGNhbGxGcmFtZS0+cmVn
aXN0ZXJzKClbZHN0XSA9IHJlc3VsdDsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCi0g
ICAgZXhjZXB0aW9uVmFsdWUgPSBjcmVhdGVVbmRlZmluZWRWYXJpYWJsZUVycm9yKGV4ZWMsIGlk
ZW50LCB2UEMsIGNvZGVCbG9jayk7CisgICAgZXhjZXB0aW9uVmFsdWUgPSBjcmVhdGVVbmRlZmlu
ZWRWYXJpYWJsZUVycm9yKGNhbGxGcmFtZSwgaWRlbnQsIHZQQywgY29kZUJsb2NrKTsKICAgICBy
ZXR1cm4gZmFsc2U7CiB9CiAKLUFMV0FZU19JTkxJTkUgc3RhdGljIEpTVmFsdWUqIGlubGluZVJl
c29sdmVCYXNlKEV4ZWNTdGF0ZSogZXhlYywgSWRlbnRpZmllciYgcHJvcGVydHksIFNjb3BlQ2hh
aW5Ob2RlKiBzY29wZUNoYWluKQorQUxXQVlTX0lOTElORSBzdGF0aWMgSlNWYWx1ZSogaW5saW5l
UmVzb2x2ZUJhc2UoQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIElkZW50aWZpZXImIHByb3BlcnR5LCBT
Y29wZUNoYWluTm9kZSogc2NvcGVDaGFpbikKIHsKICAgICBTY29wZUNoYWluSXRlcmF0b3IgaXRl
ciA9IHNjb3BlQ2hhaW4tPmJlZ2luKCk7CiAgICAgU2NvcGVDaGFpbkl0ZXJhdG9yIG5leHQgPSBp
dGVyOwpAQCAtNDMxLDcgKzQzMSw3IEBAIEFMV0FZU19JTkxJTkUgc3RhdGljIEpTVmFsdWUqIGlu
bGluZVJlc28KICAgICBKU09iamVjdCogYmFzZTsKICAgICB3aGlsZSAodHJ1ZSkgewogICAgICAg
ICBiYXNlID0gKml0ZXI7Ci0gICAgICAgIGlmIChuZXh0ID09IGVuZCB8fCBiYXNlLT5nZXRQcm9w
ZXJ0eVNsb3QoZXhlYywgcHJvcGVydHksIHNsb3QpKQorICAgICAgICBpZiAobmV4dCA9PSBlbmQg
fHwgYmFzZS0+Z2V0UHJvcGVydHlTbG90KGNhbGxGcmFtZSwgcHJvcGVydHksIHNsb3QpKQogICAg
ICAgICAgICAgcmV0dXJuIGJhc2U7CiAKICAgICAgICAgaXRlciA9IG5leHQ7CkBAIC00NDIsMjIg
KzQ0MiwyMCBAQCBBTFdBWVNfSU5MSU5FIHN0YXRpYyBKU1ZhbHVlKiBpbmxpbmVSZXNvCiAgICAg
cmV0dXJuIDA7CiB9CiAKLU5FVkVSX0lOTElORSB2b2lkIE1hY2hpbmU6OnJlc29sdmVCYXNlKEV4
ZWNTdGF0ZSogZXhlYywgSW5zdHJ1Y3Rpb24qIHZQQywgUmVnaXN0ZXIqIHIpCitORVZFUl9JTkxJ
TkUgdm9pZCBNYWNoaW5lOjpyZXNvbHZlQmFzZShDYWxsRnJhbWUqIGNhbGxGcmFtZSwgSW5zdHJ1
Y3Rpb24qIHZQQykKIHsKICAgICBpbnQgZHN0ID0gKHZQQyArIDEpLT51Lm9wZXJhbmQ7CiAgICAg
aW50IHByb3BlcnR5ID0gKHZQQyArIDIpLT51Lm9wZXJhbmQ7Ci0gICAgQ29kZUJsb2NrKiBjb2Rl
QmxvY2sgPSB0aGlzLT5jb2RlQmxvY2socik7Ci0gICAgU2NvcGVDaGFpbk5vZGUqIHNjb3BlQ2hh
aW4gPSB0aGlzLT5zY29wZUNoYWluKHIpOwotICAgIHJbZHN0XSA9IGlubGluZVJlc29sdmVCYXNl
KGV4ZWMsIGNvZGVCbG9jay0+aWRlbnRpZmllcnNbcHJvcGVydHldLCBzY29wZUNoYWluKTsKKyAg
ICBjYWxsRnJhbWUtPnJlZ2lzdGVycygpW2RzdF0gPSBpbmxpbmVSZXNvbHZlQmFzZShjYWxsRnJh
bWUsIGNhbGxGcmFtZS0+Y29kZUJsb2NrKCktPmlkZW50aWZpZXJzW3Byb3BlcnR5XSwgY2FsbEZy
YW1lLT5zY29wZUNoYWluKCkpOwogfQogCi1ORVZFUl9JTkxJTkUgYm9vbCBNYWNoaW5lOjpyZXNv
bHZlQmFzZUFuZFByb3BlcnR5KEV4ZWNTdGF0ZSogZXhlYywgSW5zdHJ1Y3Rpb24qIHZQQywgUmVn
aXN0ZXIqIHIsIEpTVmFsdWUqJiBleGNlcHRpb25WYWx1ZSkKK05FVkVSX0lOTElORSBib29sIE1h
Y2hpbmU6OnJlc29sdmVCYXNlQW5kUHJvcGVydHkoQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIEluc3Ry
dWN0aW9uKiB2UEMsIEpTVmFsdWUqJiBleGNlcHRpb25WYWx1ZSkKIHsKICAgICBpbnQgYmFzZURz
dCA9ICh2UEMgKyAxKS0+dS5vcGVyYW5kOwogICAgIGludCBwcm9wRHN0ID0gKHZQQyArIDIpLT51
Lm9wZXJhbmQ7CiAgICAgaW50IHByb3BlcnR5ID0gKHZQQyArIDMpLT51Lm9wZXJhbmQ7CiAKLSAg
ICBTY29wZUNoYWluTm9kZSogc2NvcGVDaGFpbiA9IHRoaXMtPnNjb3BlQ2hhaW4ocik7CisgICAg
U2NvcGVDaGFpbk5vZGUqIHNjb3BlQ2hhaW4gPSBjYWxsRnJhbWUtPnNjb3BlQ2hhaW4oKTsKICAg
ICBTY29wZUNoYWluSXRlcmF0b3IgaXRlciA9IHNjb3BlQ2hhaW4tPmJlZ2luKCk7CiAgICAgU2Nv
cGVDaGFpbkl0ZXJhdG9yIGVuZCA9IHNjb3BlQ2hhaW4tPmVuZCgpOwogCkBAIC00NjUsMzUgKzQ2
MywzNSBAQCBORVZFUl9JTkxJTkUgYm9vbCBNYWNoaW5lOjpyZXNvbHZlQmFzZUFuCiAKICAgICBB
U1NFUlQoaXRlciAhPSBlbmQpOwogCi0gICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSB0aGlzLT5j
b2RlQmxvY2socik7CisgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBjYWxsRnJhbWUtPmNvZGVC
bG9jaygpOwogICAgIElkZW50aWZpZXImIGlkZW50ID0gY29kZUJsb2NrLT5pZGVudGlmaWVyc1tw
cm9wZXJ0eV07CiAgICAgSlNPYmplY3QqIGJhc2U7CiAgICAgZG8gewogICAgICAgICBiYXNlID0g
Kml0ZXI7CiAgICAgICAgIFByb3BlcnR5U2xvdCBzbG90KGJhc2UpOwotICAgICAgICBpZiAoYmFz
ZS0+Z2V0UHJvcGVydHlTbG90KGV4ZWMsIGlkZW50LCBzbG90KSkgewotICAgICAgICAgICAgSlNW
YWx1ZSogcmVzdWx0ID0gc2xvdC5nZXRWYWx1ZShleGVjLCBpZGVudCk7Ci0gICAgICAgICAgICBl
eGNlcHRpb25WYWx1ZSA9IGV4ZWMtPmV4Y2VwdGlvbigpOworICAgICAgICBpZiAoYmFzZS0+Z2V0
UHJvcGVydHlTbG90KGNhbGxGcmFtZSwgaWRlbnQsIHNsb3QpKSB7CisgICAgICAgICAgICBKU1Zh
bHVlKiByZXN1bHQgPSBzbG90LmdldFZhbHVlKGNhbGxGcmFtZSwgaWRlbnQpOworICAgICAgICAg
ICAgZXhjZXB0aW9uVmFsdWUgPSBjYWxsRnJhbWUtPmV4Y2VwdGlvbigpOwogICAgICAgICAgICAg
aWYgKGV4Y2VwdGlvblZhbHVlKQogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAg
ICAgICAgIHJbcHJvcERzdF0gPSByZXN1bHQ7Ci0gICAgICAgICAgICByW2Jhc2VEc3RdID0gYmFz
ZTsKKyAgICAgICAgICAgIGNhbGxGcmFtZS0+cmVnaXN0ZXJzKClbcHJvcERzdF0gPSByZXN1bHQ7
CisgICAgICAgICAgICBjYWxsRnJhbWUtPnJlZ2lzdGVycygpW2Jhc2VEc3RdID0gYmFzZTsKICAg
ICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9CiAgICAgICAgICsraXRlcjsKICAgICB9
IHdoaWxlIChpdGVyICE9IGVuZCk7CiAKLSAgICBleGNlcHRpb25WYWx1ZSA9IGNyZWF0ZVVuZGVm
aW5lZFZhcmlhYmxlRXJyb3IoZXhlYywgaWRlbnQsIHZQQywgY29kZUJsb2NrKTsKKyAgICBleGNl
cHRpb25WYWx1ZSA9IGNyZWF0ZVVuZGVmaW5lZFZhcmlhYmxlRXJyb3IoY2FsbEZyYW1lLCBpZGVu
dCwgdlBDLCBjb2RlQmxvY2spOwogICAgIHJldHVybiBmYWxzZTsKIH0KIAotTkVWRVJfSU5MSU5F
IGJvb2wgTWFjaGluZTo6cmVzb2x2ZUJhc2VBbmRGdW5jKEV4ZWNTdGF0ZSogZXhlYywgSW5zdHJ1
Y3Rpb24qIHZQQywgUmVnaXN0ZXIqIHIsIEpTVmFsdWUqJiBleGNlcHRpb25WYWx1ZSkKK05FVkVS
X0lOTElORSBib29sIE1hY2hpbmU6OnJlc29sdmVCYXNlQW5kRnVuYyhDYWxsRnJhbWUqIGNhbGxG
cmFtZSwgSW5zdHJ1Y3Rpb24qIHZQQywgSlNWYWx1ZSomIGV4Y2VwdGlvblZhbHVlKQogewogICAg
IGludCBiYXNlRHN0ID0gKHZQQyArIDEpLT51Lm9wZXJhbmQ7CiAgICAgaW50IGZ1bmNEc3QgPSAo
dlBDICsgMiktPnUub3BlcmFuZDsKICAgICBpbnQgcHJvcGVydHkgPSAodlBDICsgMyktPnUub3Bl
cmFuZDsKIAotICAgIFNjb3BlQ2hhaW5Ob2RlKiBzY29wZUNoYWluID0gdGhpcy0+c2NvcGVDaGFp
bihyKTsKKyAgICBTY29wZUNoYWluTm9kZSogc2NvcGVDaGFpbiA9IGNhbGxGcmFtZS0+c2NvcGVD
aGFpbigpOwogICAgIFNjb3BlQ2hhaW5JdGVyYXRvciBpdGVyID0gc2NvcGVDaGFpbi0+YmVnaW4o
KTsKICAgICBTY29wZUNoYWluSXRlcmF0b3IgZW5kID0gc2NvcGVDaGFpbi0+ZW5kKCk7CiAKQEAg
LTUwMSwxMyArNDk5LDEzIEBAIE5FVkVSX0lOTElORSBib29sIE1hY2hpbmU6OnJlc29sdmVCYXNl
QW4KIAogICAgIEFTU0VSVChpdGVyICE9IGVuZCk7CiAKLSAgICBDb2RlQmxvY2sqIGNvZGVCbG9j
ayA9IHRoaXMtPmNvZGVCbG9jayhyKTsKKyAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IGNhbGxG
cmFtZS0+Y29kZUJsb2NrKCk7CiAgICAgSWRlbnRpZmllciYgaWRlbnQgPSBjb2RlQmxvY2stPmlk
ZW50aWZpZXJzW3Byb3BlcnR5XTsKICAgICBKU09iamVjdCogYmFzZTsKICAgICBkbyB7CiAgICAg
ICAgIGJhc2UgPSAqaXRlcjsKICAgICAgICAgUHJvcGVydHlTbG90IHNsb3QoYmFzZSk7Ci0gICAg
ICAgIGlmIChiYXNlLT5nZXRQcm9wZXJ0eVNsb3QoZXhlYywgaWRlbnQsIHNsb3QpKSB7ICAgICAg
ICAgICAgCisgICAgICAgIGlmIChiYXNlLT5nZXRQcm9wZXJ0eVNsb3QoY2FsbEZyYW1lLCBpZGVu
dCwgc2xvdCkpIHsgICAgICAgICAgICAKICAgICAgICAgICAgIC8vIEVDTUEgMTEuMi4zIHNheXMg
dGhhdCBpZiB3ZSBoaXQgYW4gYWN0aXZhdGlvbiB0aGUgdGhpcyB2YWx1ZSBzaG91bGQgYmUgbnVs
bC4KICAgICAgICAgICAgIC8vIEhvd2V2ZXIsIHNlY3Rpb24gMTAuMi4zIHNheXMgdGhhdCBpbiB0
aGUgY2FzZSB3aGVyZSB0aGUgdmFsdWUgcHJvdmlkZWQKICAgICAgICAgICAgIC8vIGJ5IHRoZSBj
YWxsZXIgaXMgbnVsbCwgdGhlIGdsb2JhbCBvYmplY3Qgc2hvdWxkIGJlIHVzZWQuIEl0IGFsc28g
c2F5cwpAQCAtNTE1LDI1ICs1MTMsMjYgQEAgTkVWRVJfSU5MSU5FIGJvb2wgTWFjaGluZTo6cmVz
b2x2ZUJhc2VBbgogICAgICAgICAgICAgLy8gb2YgaW1wbGVtZW50YXRpb24gd2UgdXNlIHRoZSBn
bG9iYWwgb2JqZWN0IGFueXdheSBoZXJlLiBUaGlzIGd1YXJhbnRlZXMKICAgICAgICAgICAgIC8v
IHRoYXQgaW4gaG9zdCBvYmplY3RzIHlvdSBhbHdheXMgZ2V0IGEgdmFsaWQgb2JqZWN0IGZvciB0
aGlzLgogICAgICAgICAgICAgLy8gV2UgYWxzbyBoYW5kbGUgd3JhcHBlciBzdWJzdGl0dXRpb24g
Zm9yIHRoZSBnbG9iYWwgb2JqZWN0IGF0IHRoZSBzYW1lIHRpbWUuCi0gICAgICAgICAgICBKU09i
amVjdCogdGhpc09iaiA9IGJhc2UtPnRvVGhpc09iamVjdChleGVjKTsKLSAgICAgICAgICAgIEpT
VmFsdWUqIHJlc3VsdCA9IHNsb3QuZ2V0VmFsdWUoZXhlYywgaWRlbnQpOwotICAgICAgICAgICAg
ZXhjZXB0aW9uVmFsdWUgPSBleGVjLT5leGNlcHRpb24oKTsKKyAgICAgICAgICAgIEpTT2JqZWN0
KiB0aGlzT2JqID0gYmFzZS0+dG9UaGlzT2JqZWN0KGNhbGxGcmFtZSk7CisgICAgICAgICAgICBK
U1ZhbHVlKiByZXN1bHQgPSBzbG90LmdldFZhbHVlKGNhbGxGcmFtZSwgaWRlbnQpOworICAgICAg
ICAgICAgZXhjZXB0aW9uVmFsdWUgPSBjYWxsRnJhbWUtPmV4Y2VwdGlvbigpOwogICAgICAgICAg
ICAgaWYgKGV4Y2VwdGlvblZhbHVlKQogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIAot
ICAgICAgICAgICAgcltiYXNlRHN0XSA9IHRoaXNPYmo7Ci0gICAgICAgICAgICByW2Z1bmNEc3Rd
ID0gcmVzdWx0OworICAgICAgICAgICAgY2FsbEZyYW1lLT5yZWdpc3RlcnMoKVtiYXNlRHN0XSA9
IHRoaXNPYmo7CisgICAgICAgICAgICBjYWxsRnJhbWUtPnJlZ2lzdGVycygpW2Z1bmNEc3RdID0g
cmVzdWx0OwogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0KICAgICAgICAgKytp
dGVyOwogICAgIH0gd2hpbGUgKGl0ZXIgIT0gZW5kKTsKIAotICAgIGV4Y2VwdGlvblZhbHVlID0g
Y3JlYXRlVW5kZWZpbmVkVmFyaWFibGVFcnJvcihleGVjLCBpZGVudCwgdlBDLCBjb2RlQmxvY2sp
OworICAgIGV4Y2VwdGlvblZhbHVlID0gY3JlYXRlVW5kZWZpbmVkVmFyaWFibGVFcnJvcihjYWxs
RnJhbWUsIGlkZW50LCB2UEMsIGNvZGVCbG9jayk7CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1B
TFdBWVNfSU5MSU5FIFJlZ2lzdGVyKiBzbGlkZVJlZ2lzdGVyV2luZG93Rm9yQ2FsbChDb2RlQmxv
Y2sqIG5ld0NvZGVCbG9jaywgUmVnaXN0ZXJGaWxlKiByZWdpc3RlckZpbGUsIFJlZ2lzdGVyKiBy
LCBzaXplX3QgcmVnaXN0ZXJPZmZzZXQsIGludCBhcmdjKQorQUxXQVlTX0lOTElORSBDYWxsRnJh
bWUqIHNsaWRlUmVnaXN0ZXJXaW5kb3dGb3JDYWxsKENvZGVCbG9jayogbmV3Q29kZUJsb2NrLCBS
ZWdpc3RlckZpbGUqIHJlZ2lzdGVyRmlsZSwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIHNpemVfdCBy
ZWdpc3Rlck9mZnNldCwgaW50IGFyZ2MpCiB7CisgICAgUmVnaXN0ZXIqIHIgPSBjYWxsRnJhbWUt
PnJlZ2lzdGVycygpOwogICAgIFJlZ2lzdGVyKiBuZXdFbmQgPSByICsgcmVnaXN0ZXJPZmZzZXQg
KyBuZXdDb2RlQmxvY2stPm51bUNhbGxlZVJlZ2lzdGVyczsKIAogICAgIGlmIChMSUtFTFkoYXJn
YyA9PSBuZXdDb2RlQmxvY2stPm51bVBhcmFtZXRlcnMpKSB7IC8vIGNvcnJlY3QgbnVtYmVyIG9m
IGFyZ3VtZW50cwpAQCAtNTY1LDQyICs1NjQsNDIgQEAgQUxXQVlTX0lOTElORSBSZWdpc3Rlciog
c2xpZGVSZWdpc3RlcldpbgogICAgICAgICAgICAgYXJndltpICsgYXJnY10gPSBhcmd2W2ldOwog
ICAgIH0KIAotICAgIHJldHVybiByOworICAgIHJldHVybiBjYWxsRnJhbWU7CiB9CiAKLXN0YXRp
YyBORVZFUl9JTkxJTkUgYm9vbCBpc05vdE9iamVjdChFeGVjU3RhdGUqIGV4ZWMsIGJvb2wgZm9y
SW5zdGFuY2VPZiwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIGNvbnN0IEluc3RydWN0aW9uKiB2UEMs
IEpTVmFsdWUqIHZhbHVlLCBKU1ZhbHVlKiYgZXhjZXB0aW9uRGF0YSkKK3N0YXRpYyBORVZFUl9J
TkxJTkUgYm9vbCBpc05vdE9iamVjdChDYWxsRnJhbWUqIGNhbGxGcmFtZSwgYm9vbCBmb3JJbnN0
YW5jZU9mLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgY29uc3QgSW5zdHJ1Y3Rpb24qIHZQQywgSlNW
YWx1ZSogdmFsdWUsIEpTVmFsdWUqJiBleGNlcHRpb25EYXRhKQogewogICAgIGlmICh2YWx1ZS0+
aXNPYmplY3QoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGV4Y2VwdGlvbkRhdGEgPSBj
cmVhdGVJbnZhbGlkUGFyYW1FcnJvcihleGVjLCBmb3JJbnN0YW5jZU9mID8gImluc3RhbmNlb2Yi
IDogImluIiAsIHZhbHVlLCB2UEMsIGNvZGVCbG9jayk7CisgICAgZXhjZXB0aW9uRGF0YSA9IGNy
ZWF0ZUludmFsaWRQYXJhbUVycm9yKGNhbGxGcmFtZSwgZm9ySW5zdGFuY2VPZiA/ICJpbnN0YW5j
ZW9mIiA6ICJpbiIgLCB2YWx1ZSwgdlBDLCBjb2RlQmxvY2spOwogICAgIHJldHVybiB0cnVlOwog
fQogCi1ORVZFUl9JTkxJTkUgSlNWYWx1ZSogTWFjaGluZTo6Y2FsbEV2YWwoRXhlY1N0YXRlKiBl
eGVjLCBKU09iamVjdCogdGhpc09iaiwgU2NvcGVDaGFpbk5vZGUqIHNjb3BlQ2hhaW4sIFJlZ2lz
dGVyRmlsZSogcmVnaXN0ZXJGaWxlLCBSZWdpc3RlciogciwgaW50IGFyZ3YsIGludCBhcmdjLCBK
U1ZhbHVlKiYgZXhjZXB0aW9uVmFsdWUpCitORVZFUl9JTkxJTkUgSlNWYWx1ZSogTWFjaGluZTo6
Y2FsbEV2YWwoQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIEpTT2JqZWN0KiB0aGlzT2JqLCBTY29wZUNo
YWluTm9kZSogc2NvcGVDaGFpbiwgUmVnaXN0ZXJGaWxlKiByZWdpc3RlckZpbGUsIGludCBhcmd2
LCBpbnQgYXJnYywgSlNWYWx1ZSomIGV4Y2VwdGlvblZhbHVlKQogewogICAgIGlmIChhcmdjIDwg
MikKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAKLSAgICBKU1ZhbHVlKiBwcm9ncmFt
ID0gclthcmd2ICsgMV0uanNWYWx1ZShleGVjKTsKKyAgICBKU1ZhbHVlKiBwcm9ncmFtID0gY2Fs
bEZyYW1lLT5yZWdpc3RlcnMoKVthcmd2ICsgMV0uanNWYWx1ZShjYWxsRnJhbWUpOwogCiAgICAg
aWYgKCFwcm9ncmFtLT5pc1N0cmluZygpKQogICAgICAgICByZXR1cm4gcHJvZ3JhbTsKIAogICAg
IFByb2ZpbGVyKiogcHJvZmlsZXIgPSBQcm9maWxlcjo6ZW5hYmxlZFByb2ZpbGVyUmVmZXJlbmNl
KCk7CiAgICAgaWYgKCpwcm9maWxlcikKLSAgICAgICAgKCpwcm9maWxlciktPndpbGxFeGVjdXRl
KGV4ZWMsIHNjb3BlQ2hhaW4tPmdsb2JhbE9iamVjdCgpLT5ldmFsRnVuY3Rpb24oKSk7CisgICAg
ICAgICgqcHJvZmlsZXIpLT53aWxsRXhlY3V0ZShjYWxsRnJhbWUsIHNjb3BlQ2hhaW4tPmdsb2Jh
bE9iamVjdCgpLT5ldmFsRnVuY3Rpb24oKSk7CiAKICAgICBVU3RyaW5nIHByb2dyYW1Tb3VyY2Ug
PSBzdGF0aWNfY2FzdDxKU1N0cmluZyo+KHByb2dyYW0pLT52YWx1ZSgpOwogCi0gICAgQ29kZUJs
b2NrKiBjb2RlQmxvY2sgPSB0aGlzLT5jb2RlQmxvY2socik7Ci0gICAgUmVmUHRyPEV2YWxOb2Rl
PiBldmFsTm9kZSA9IGNvZGVCbG9jay0+ZXZhbENvZGVDYWNoZS5nZXQoZXhlYywgcHJvZ3JhbVNv
dXJjZSwgc2NvcGVDaGFpbiwgZXhjZXB0aW9uVmFsdWUpOworICAgIENvZGVCbG9jayogY29kZUJs
b2NrID0gY2FsbEZyYW1lLT5jb2RlQmxvY2soKTsKKyAgICBSZWZQdHI8RXZhbE5vZGU+IGV2YWxO
b2RlID0gY29kZUJsb2NrLT5ldmFsQ29kZUNhY2hlLmdldChjYWxsRnJhbWUsIHByb2dyYW1Tb3Vy
Y2UsIHNjb3BlQ2hhaW4sIGV4Y2VwdGlvblZhbHVlKTsKIAogICAgIEpTVmFsdWUqIHJlc3VsdCA9
IDA7CiAgICAgaWYgKGV2YWxOb2RlKQotICAgICAgICByZXN1bHQgPSBleGVjLT5nbG9iYWxEYXRh
KCkubWFjaGluZS0+ZXhlY3V0ZShldmFsTm9kZS5nZXQoKSwgZXhlYywgdGhpc09iaiwgciAtIHJl
Z2lzdGVyRmlsZS0+c3RhcnQoKSArIGFyZ3YgKyAxICsgUmVnaXN0ZXJGaWxlOjpDYWxsRnJhbWVI
ZWFkZXJTaXplLCBzY29wZUNoYWluLCAmZXhjZXB0aW9uVmFsdWUpOworICAgICAgICByZXN1bHQg
PSBjYWxsRnJhbWUtPmdsb2JhbERhdGEoKS5tYWNoaW5lLT5leGVjdXRlKGV2YWxOb2RlLmdldCgp
LCBjYWxsRnJhbWUsIHRoaXNPYmosIGNhbGxGcmFtZS0+cmVnaXN0ZXJzKCkgLSByZWdpc3RlckZp
bGUtPnN0YXJ0KCkgKyBhcmd2ICsgMSArIFJlZ2lzdGVyRmlsZTo6Q2FsbEZyYW1lSGVhZGVyU2l6
ZSwgc2NvcGVDaGFpbiwgJmV4Y2VwdGlvblZhbHVlKTsKIAogICAgIGlmICgqcHJvZmlsZXIpCi0g
ICAgICAgICgqcHJvZmlsZXIpLT5kaWRFeGVjdXRlKGV4ZWMsIHNjb3BlQ2hhaW4tPmdsb2JhbE9i
amVjdCgpLT5ldmFsRnVuY3Rpb24oKSk7CisgICAgICAgICgqcHJvZmlsZXIpLT5kaWRFeGVjdXRl
KGNhbGxGcmFtZSwgc2NvcGVDaGFpbi0+Z2xvYmFsT2JqZWN0KCktPmV2YWxGdW5jdGlvbigpKTsK
IAogICAgIHJldHVybiByZXN1bHQ7CiB9CkBAIC02NTIsMjQgKzY1MSwyNCBAQCBNYWNoaW5lOjp+
TWFjaGluZSgpCiAKICNpZm5kZWYgTkRFQlVHCiAKLXZvaWQgTWFjaGluZTo6ZHVtcENhbGxGcmFt
ZShjb25zdCBSZWdpc3RlckZpbGUqIHJlZ2lzdGVyRmlsZSwgY29uc3QgUmVnaXN0ZXIqIHIpCit2
b2lkIE1hY2hpbmU6OmR1bXBDYWxsRnJhbWUoY29uc3QgUmVnaXN0ZXJGaWxlKiByZWdpc3RlckZp
bGUsIENhbGxGcmFtZSogY2FsbEZyYW1lKQogewotICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmplY3QgPSBzY29wZUNoYWluKHIpLT5nbG9iYWxPYmplY3QoKTsKKyAgICBKU0dsb2JhbE9iamVj
dCogZ2xvYmFsT2JqZWN0ID0gY2FsbEZyYW1lLT5zY29wZUNoYWluKCktPmdsb2JhbE9iamVjdCgp
OwogCi0gICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSB0aGlzLT5jb2RlQmxvY2socik7CisgICAg
Q29kZUJsb2NrKiBjb2RlQmxvY2sgPSBjYWxsRnJhbWUtPmNvZGVCbG9jaygpOwogICAgIGNvZGVC
bG9jay0+ZHVtcChnbG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMoKSk7CiAKLSAgICBkdW1wUmVnaXN0
ZXJzKHJlZ2lzdGVyRmlsZSwgcik7CisgICAgZHVtcFJlZ2lzdGVycyhyZWdpc3RlckZpbGUsIGNh
bGxGcmFtZSk7CiB9CiAKLXZvaWQgTWFjaGluZTo6ZHVtcFJlZ2lzdGVycyhjb25zdCBSZWdpc3Rl
ckZpbGUqIHJlZ2lzdGVyRmlsZSwgY29uc3QgUmVnaXN0ZXIqIHIpCit2b2lkIE1hY2hpbmU6OmR1
bXBSZWdpc3RlcnMoY29uc3QgUmVnaXN0ZXJGaWxlKiByZWdpc3RlckZpbGUsIENhbGxGcmFtZSog
Y2FsbEZyYW1lKQogewogICAgIHByaW50ZigiUmVnaXN0ZXIgZnJhbWU6IFxuXG4iKTsKICAgICBw
cmludGYoIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS1cbiIpOwogICAgIHByaW50ZigiICAgICAgICAgICAgdXNlICAgICAgICAgICAgfCAgIGFkZHJl
c3MgIHwgICB2YWx1ZSAgIFxuIik7CiAgICAgcHJpbnRmKCItLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4iKTsKIAotICAgIENvZGVCbG9jayogY29k
ZUJsb2NrID0gdGhpcy0+Y29kZUJsb2NrKHIpOworICAgIENvZGVCbG9jayogY29kZUJsb2NrID0g
Y2FsbEZyYW1lLT5jb2RlQmxvY2soKTsKICAgICBjb25zdCBSZWdpc3RlciogaXQ7CiAgICAgY29u
c3QgUmVnaXN0ZXIqIGVuZDsKIApAQCAtNjgzLDcgKzY4Miw3IEBAIHZvaWQgTWFjaGluZTo6ZHVt
cFJlZ2lzdGVycyhjb25zdCBSZWdpc3QKICAgICAgICAgcHJpbnRmKCItLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4iKTsKICAgICB9CiAgICAgCi0g
ICAgaXQgPSByIC0gUmVnaXN0ZXJGaWxlOjpDYWxsRnJhbWVIZWFkZXJTaXplIC0gY29kZUJsb2Nr
LT5udW1QYXJhbWV0ZXJzOworICAgIGl0ID0gY2FsbEZyYW1lLT5yZWdpc3RlcnMoKSAtIFJlZ2lz
dGVyRmlsZTo6Q2FsbEZyYW1lSGVhZGVyU2l6ZSAtIGNvZGVCbG9jay0+bnVtUGFyYW1ldGVyczsK
ICAgICBwcmludGYoIlt0aGlzXSAgICAgICAgICAgICAgICAgICAgIHwgJTEwcCB8ICUxMHAgXG4i
LCBpdCwgKCppdCkudigpKTsgKytpdDsKICAgICBlbmQgPSBpdCArIG1heChjb2RlQmxvY2stPm51
bVBhcmFtZXRlcnMgLSAxLCAwKTsgLy8gLSAxIHRvIHNraXAgInRoaXMiCiAgICAgaWYgKGl0ICE9
IGVuZCkgewpAQCAtNzQwLDggKzczOSw2IEBAIHZvaWQgTWFjaGluZTo6ZHVtcFJlZ2lzdGVycyhj
b25zdCBSZWdpc3QKIAogI2VuZGlmCiAKLS8vI2lmICFkZWZpbmVkKE5ERUJVRykgfHwgRU5BQkxF
KFNBTVBMSU5HX1RPT0wpCi0KIGJvb2wgTWFjaGluZTo6aXNPcGNvZGUoT3Bjb2RlIG9wY29kZSkK
IHsKICNpZiBIQVZFKENPTVBVVEVEX0dPVE8pCkBAIC03NTMsOTAgKzc1MCw4MyBAQCBib29sIE1h
Y2hpbmU6OmlzT3Bjb2RlKE9wY29kZSBvcGNvZGUpCiAjZW5kaWYKIH0KIAotLy8jZW5kaWYKLQot
TkVWRVJfSU5MSU5FIGJvb2wgTWFjaGluZTo6dW53aW5kQ2FsbEZyYW1lKEV4ZWNTdGF0ZSomIGV4
ZWMsIEpTVmFsdWUqIGV4Y2VwdGlvblZhbHVlLCBjb25zdCBJbnN0cnVjdGlvbiomIHZQQywgQ29k
ZUJsb2NrKiYgY29kZUJsb2NrLCBSZWdpc3RlciomIHIpCitORVZFUl9JTkxJTkUgYm9vbCBNYWNo
aW5lOjp1bndpbmRDYWxsRnJhbWUoQ2FsbEZyYW1lKiYgY2FsbEZyYW1lLCBKU1ZhbHVlKiBleGNl
cHRpb25WYWx1ZSwgY29uc3QgSW5zdHJ1Y3Rpb24qJiB2UEMsIENvZGVCbG9jayomIGNvZGVCbG9j
aykKIHsKICAgICBDb2RlQmxvY2sqIG9sZENvZGVCbG9jayA9IGNvZGVCbG9jazsKLSAgICBTY29w
ZUNoYWluTm9kZSogc2NvcGVDaGFpbiA9IHRoaXMtPnNjb3BlQ2hhaW4ocik7CisgICAgU2NvcGVD
aGFpbk5vZGUqIHNjb3BlQ2hhaW4gPSBjYWxsRnJhbWUtPnNjb3BlQ2hhaW4oKTsKIAotICAgIGlm
IChEZWJ1Z2dlciogZGVidWdnZXIgPSBleGVjLT5keW5hbWljR2xvYmFsT2JqZWN0KCktPmRlYnVn
Z2VyKCkpIHsKLSAgICAgICAgRGVidWdnZXJDYWxsRnJhbWUgZGVidWdnZXJDYWxsRnJhbWUoZXhl
Yy0+ZHluYW1pY0dsb2JhbE9iamVjdCgpLCBjb2RlQmxvY2ssIHNjb3BlQ2hhaW4sIHIsIGV4Y2Vw
dGlvblZhbHVlKTsKLSAgICAgICAgaWYgKHJbUmVnaXN0ZXJGaWxlOjpDYWxsZWVdLmpzVmFsdWUo
ZXhlYykpCisgICAgaWYgKERlYnVnZ2VyKiBkZWJ1Z2dlciA9IGNhbGxGcmFtZS0+ZHluYW1pY0ds
b2JhbE9iamVjdCgpLT5kZWJ1Z2dlcigpKSB7CisgICAgICAgIERlYnVnZ2VyQ2FsbEZyYW1lIGRl
YnVnZ2VyQ2FsbEZyYW1lKGNhbGxGcmFtZSwgZXhjZXB0aW9uVmFsdWUpOworICAgICAgICBpZiAo
Y2FsbEZyYW1lLT5jYWxsZWUoKSkKICAgICAgICAgICAgIGRlYnVnZ2VyLT5yZXR1cm5FdmVudChk
ZWJ1Z2dlckNhbGxGcmFtZSwgY29kZUJsb2NrLT5vd25lck5vZGUtPnNvdXJjZUlEKCksIGNvZGVC
bG9jay0+b3duZXJOb2RlLT5sYXN0TGluZSgpKTsKICAgICAgICAgZWxzZQogICAgICAgICAgICAg
ZGVidWdnZXItPmRpZEV4ZWN1dGVQcm9ncmFtKGRlYnVnZ2VyQ2FsbEZyYW1lLCBjb2RlQmxvY2st
Pm93bmVyTm9kZS0+c291cmNlSUQoKSwgY29kZUJsb2NrLT5vd25lck5vZGUtPmxhc3RMaW5lKCkp
OwogICAgIH0KIAogICAgIGlmIChQcm9maWxlciogcHJvZmlsZXIgPSAqUHJvZmlsZXI6OmVuYWJs
ZWRQcm9maWxlclJlZmVyZW5jZSgpKSB7Ci0gICAgICAgIGlmIChyW1JlZ2lzdGVyRmlsZTo6Q2Fs
bGVlXS5qc1ZhbHVlKGV4ZWMpKQotICAgICAgICAgICAgcHJvZmlsZXItPmRpZEV4ZWN1dGUoZXhl
Yywgc3RhdGljX2Nhc3Q8SlNPYmplY3QqPihyW1JlZ2lzdGVyRmlsZTo6Q2FsbGVlXS5qc1ZhbHVl
KGV4ZWMpKSk7CisgICAgICAgIGlmIChjYWxsRnJhbWUtPmNhbGxlZSgpKQorICAgICAgICAgICAg
cHJvZmlsZXItPmRpZEV4ZWN1dGUoY2FsbEZyYW1lLCBjYWxsRnJhbWUtPmNhbGxlZSgpKTsKICAg
ICAgICAgZWxzZQotICAgICAgICAgICAgcHJvZmlsZXItPmRpZEV4ZWN1dGUoZXhlYywgY29kZUJs
b2NrLT5vd25lck5vZGUtPnNvdXJjZVVSTCgpLCBjb2RlQmxvY2stPm93bmVyTm9kZS0+bGluZU5v
KCkpOworICAgICAgICAgICAgcHJvZmlsZXItPmRpZEV4ZWN1dGUoY2FsbEZyYW1lLCBjb2RlQmxv
Y2stPm93bmVyTm9kZS0+c291cmNlVVJMKCksIGNvZGVCbG9jay0+b3duZXJOb2RlLT5saW5lTm8o
KSk7CiAgICAgfQogCiAgICAgaWYgKG9sZENvZGVCbG9jay0+bmVlZHNGdWxsU2NvcGVDaGFpbikK
ICAgICAgICAgc2NvcGVDaGFpbi0+ZGVyZWYoKTsKIAogICAgIC8vIElmIHRoaXMgY2FsbCBmcmFt
ZSBjcmVhdGVkIGFuIGFjdGl2YXRpb24gb3IgYW4gJ2FyZ3VtZW50cycgb2JqZWN0LCB0ZWFyIGl0
IG9mZi4KLSAgICBpZiAoSlNBY3RpdmF0aW9uKiBhY3RpdmF0aW9uID0gc3RhdGljX2Nhc3Q8SlNB
Y3RpdmF0aW9uKj4ocltSZWdpc3RlckZpbGU6Ok9wdGlvbmFsQ2FsbGVlQWN0aXZhdGlvbl0uZ2V0
SlNWYWx1ZSgpKSkgewotICAgICAgICBBU1NFUlQoYWN0aXZhdGlvbi0+aXNPYmplY3QoJkpTQWN0
aXZhdGlvbjo6aW5mbykpOwotICAgICAgICBBcmd1bWVudHMqIGFyZ3VtZW50cyA9IHN0YXRpY19j
YXN0PEFyZ3VtZW50cyo+KHJbUmVnaXN0ZXJGaWxlOjpPcHRpb25hbENhbGxlZUFyZ3VtZW50c10u
Z2V0SlNWYWx1ZSgpKTsKLSAgICAgICAgQVNTRVJUKCFhcmd1bWVudHMgfHwgYXJndW1lbnRzLT5p
c09iamVjdCgmQXJndW1lbnRzOjppbmZvKSk7Ci0gICAgICAgIGFjdGl2YXRpb24tPmNvcHlSZWdp
c3RlcnMoYXJndW1lbnRzKTsKLSAgICB9IGVsc2UgaWYgKEFyZ3VtZW50cyogYXJndW1lbnRzID0g
c3RhdGljX2Nhc3Q8QXJndW1lbnRzKj4ocltSZWdpc3RlckZpbGU6Ok9wdGlvbmFsQ2FsbGVlQXJn
dW1lbnRzXS5nZXRKU1ZhbHVlKCkpKSB7Ci0gICAgICAgIEFTU0VSVChhcmd1bWVudHMtPmlzT2Jq
ZWN0KCZBcmd1bWVudHM6OmluZm8pKTsKKyAgICBpZiAoSlNBY3RpdmF0aW9uKiBhY3RpdmF0aW9u
ID0gY2FsbEZyYW1lLT5vcHRpb25hbENhbGxlZUFjdGl2YXRpb24oKSkKKyAgICAgICAgYWN0aXZh
dGlvbi0+Y29weVJlZ2lzdGVycyhjYWxsRnJhbWUtPm9wdGlvbmFsQ2FsbGVlQXJndW1lbnRzKCkp
OworICAgIGVsc2UgaWYgKEFyZ3VtZW50cyogYXJndW1lbnRzID0gY2FsbEZyYW1lLT5vcHRpb25h
bENhbGxlZUFyZ3VtZW50cygpKSB7CiAgICAgICAgIGlmICghYXJndW1lbnRzLT5pc1Rvcm5PZmYo
KSkKICAgICAgICAgICAgIGFyZ3VtZW50cy0+Y29weVJlZ2lzdGVycygpOwogICAgIH0KICAgICAK
LSAgICB2b2lkKiByZXR1cm5QQyA9IHJbUmVnaXN0ZXJGaWxlOjpSZXR1cm5QQ10udigpOwotICAg
IHIgPSByW1JlZ2lzdGVyRmlsZTo6Q2FsbGVyUmVnaXN0ZXJzXS5yKCk7Ci0gICAgZXhlYyA9IENh
bGxGcmFtZTo6Y3JlYXRlKHIpOwotICAgIGlmIChpc0hvc3RDYWxsRnJhbWUocikpCisgICAgdm9p
ZCogcmV0dXJuUEMgPSBjYWxsRnJhbWUtPnJldHVyblBDKCk7CisgICAgY2FsbEZyYW1lID0gY2Fs
bEZyYW1lLT5jYWxsZXJGcmFtZSgpOworICAgIGlmIChjYWxsRnJhbWUtPmhhc0hvc3RDYWxsRnJh
bWVGbGFnKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIGNvZGVCbG9jayA9IHRoaXMt
PmNvZGVCbG9jayhyKTsKKyAgICBjb2RlQmxvY2sgPSBjYWxsRnJhbWUtPmNvZGVCbG9jaygpOwog
ICAgIHZQQyA9IHZQQ0ZvclBDKGNvZGVCbG9jaywgcmV0dXJuUEMpOwogICAgIHJldHVybiB0cnVl
OwogfQogCi1ORVZFUl9JTkxJTkUgSW5zdHJ1Y3Rpb24qIE1hY2hpbmU6OnRocm93RXhjZXB0aW9u
KEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSomIGV4Y2VwdGlvblZhbHVlLCBjb25zdCBJbnN0cnVj
dGlvbiogdlBDLCBSZWdpc3RlciomIHIsIGJvb2wgZXhwbGljaXRUaHJvdykKK05FVkVSX0lOTElO
RSBJbnN0cnVjdGlvbiogTWFjaGluZTo6dGhyb3dFeGNlcHRpb24oQ2FsbEZyYW1lKiYgY2FsbEZy
YW1lLCBKU1ZhbHVlKiYgZXhjZXB0aW9uVmFsdWUsIGNvbnN0IEluc3RydWN0aW9uKiB2UEMsIGJv
b2wgZXhwbGljaXRUaHJvdykKIHsKICAgICAvLyBTZXQgdXAgdGhlIGV4Y2VwdGlvbiBvYmplY3QK
ICAgICAKLSAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IHRoaXMtPmNvZGVCbG9jayhyKTsKKyAg
ICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IGNhbGxGcmFtZS0+Y29kZUJsb2NrKCk7CiAgICAgaWYg
KGV4Y2VwdGlvblZhbHVlLT5pc09iamVjdCgpKSB7CiAgICAgICAgIEpTT2JqZWN0KiBleGNlcHRp
b24gPSBzdGF0aWNfY2FzdDxKU09iamVjdCo+KGV4Y2VwdGlvblZhbHVlKTsKICAgICAgICAgaWYg
KGV4Y2VwdGlvbi0+aXNOb3RBbk9iamVjdEVycm9yU3R1YigpKSB7Ci0gICAgICAgICAgICBleGNl
cHRpb24gPSBjcmVhdGVOb3RBbk9iamVjdEVycm9yKGV4ZWMsIHN0YXRpY19jYXN0PEpTTm90QW5P
YmplY3RFcnJvclN0dWIqPihleGNlcHRpb24pLCB2UEMsIGNvZGVCbG9jayk7CisgICAgICAgICAg
ICBleGNlcHRpb24gPSBjcmVhdGVOb3RBbk9iamVjdEVycm9yKGNhbGxGcmFtZSwgc3RhdGljX2Nh
c3Q8SlNOb3RBbk9iamVjdEVycm9yU3R1Yio+KGV4Y2VwdGlvbiksIHZQQywgY29kZUJsb2NrKTsK
ICAgICAgICAgICAgIGV4Y2VwdGlvblZhbHVlID0gZXhjZXB0aW9uOwogICAgICAgICB9IGVsc2Ug
ewotICAgICAgICAgICAgaWYgKCFleGNlcHRpb24tPmhhc1Byb3BlcnR5KGV4ZWMsIElkZW50aWZp
ZXIoZXhlYywgImxpbmUiKSkgJiYgCi0gICAgICAgICAgICAgICAgIWV4Y2VwdGlvbi0+aGFzUHJv
cGVydHkoZXhlYywgSWRlbnRpZmllcihleGVjLCAic291cmNlSWQiKSkgJiYgCi0gICAgICAgICAg
ICAgICAgIWV4Y2VwdGlvbi0+aGFzUHJvcGVydHkoZXhlYywgSWRlbnRpZmllcihleGVjLCAic291
cmNlVVJMIikpICYmIAotICAgICAgICAgICAgICAgICFleGNlcHRpb24tPmhhc1Byb3BlcnR5KGV4
ZWMsIElkZW50aWZpZXIoZXhlYywgZXhwcmVzc2lvbkJlZ2luT2Zmc2V0UHJvcGVydHlOYW1lKSkg
JiYgCi0gICAgICAgICAgICAgICAgIWV4Y2VwdGlvbi0+aGFzUHJvcGVydHkoZXhlYywgSWRlbnRp
ZmllcihleGVjLCBleHByZXNzaW9uQ2FyZXRPZmZzZXRQcm9wZXJ0eU5hbWUpKSAmJiAKLSAgICAg
ICAgICAgICAgICAhZXhjZXB0aW9uLT5oYXNQcm9wZXJ0eShleGVjLCBJZGVudGlmaWVyKGV4ZWMs
IGV4cHJlc3Npb25FbmRPZmZzZXRQcm9wZXJ0eU5hbWUpKSkgeworICAgICAgICAgICAgaWYgKCFl
eGNlcHRpb24tPmhhc1Byb3BlcnR5KGNhbGxGcmFtZSwgSWRlbnRpZmllcihjYWxsRnJhbWUsICJs
aW5lIikpICYmIAorICAgICAgICAgICAgICAgICFleGNlcHRpb24tPmhhc1Byb3BlcnR5KGNhbGxG
cmFtZSwgSWRlbnRpZmllcihjYWxsRnJhbWUsICJzb3VyY2VJZCIpKSAmJiAKKyAgICAgICAgICAg
ICAgICAhZXhjZXB0aW9uLT5oYXNQcm9wZXJ0eShjYWxsRnJhbWUsIElkZW50aWZpZXIoY2FsbEZy
YW1lLCAic291cmNlVVJMIikpICYmIAorICAgICAgICAgICAgICAgICFleGNlcHRpb24tPmhhc1By
b3BlcnR5KGNhbGxGcmFtZSwgSWRlbnRpZmllcihjYWxsRnJhbWUsIGV4cHJlc3Npb25CZWdpbk9m
ZnNldFByb3BlcnR5TmFtZSkpICYmIAorICAgICAgICAgICAgICAgICFleGNlcHRpb24tPmhhc1By
b3BlcnR5KGNhbGxGcmFtZSwgSWRlbnRpZmllcihjYWxsRnJhbWUsIGV4cHJlc3Npb25DYXJldE9m
ZnNldFByb3BlcnR5TmFtZSkpICYmIAorICAgICAgICAgICAgICAgICFleGNlcHRpb24tPmhhc1By
b3BlcnR5KGNhbGxGcmFtZSwgSWRlbnRpZmllcihjYWxsRnJhbWUsIGV4cHJlc3Npb25FbmRPZmZz
ZXRQcm9wZXJ0eU5hbWUpKSkgewogICAgICAgICAgICAgICAgIGlmIChleHBsaWNpdFRocm93KSB7
CiAgICAgICAgICAgICAgICAgICAgIGludCBzdGFydE9mZnNldCA9IDA7CiAgICAgICAgICAgICAg
ICAgICAgIGludCBlbmRPZmZzZXQgPSAwOwogICAgICAgICAgICAgICAgICAgICBpbnQgZGl2b3RQ
b2ludCA9IDA7CiAgICAgICAgICAgICAgICAgICAgIGludCBsaW5lID0gY29kZUJsb2NrLT5leHBy
ZXNzaW9uUmFuZ2VGb3JWUEModlBDLCBkaXZvdFBvaW50LCBzdGFydE9mZnNldCwgZW5kT2Zmc2V0
KTsKLSAgICAgICAgICAgICAgICAgICAgZXhjZXB0aW9uLT5wdXRXaXRoQXR0cmlidXRlcyhleGVj
LCBJZGVudGlmaWVyKGV4ZWMsICJsaW5lIiksIGpzTnVtYmVyKGV4ZWMsIGxpbmUpLCBSZWFkT25s
eSB8IERvbnREZWxldGUpOworICAgICAgICAgICAgICAgICAgICBleGNlcHRpb24tPnB1dFdpdGhB
dHRyaWJ1dGVzKGNhbGxGcmFtZSwgSWRlbnRpZmllcihjYWxsRnJhbWUsICJsaW5lIiksIGpzTnVt
YmVyKGNhbGxGcmFtZSwgbGluZSksIFJlYWRPbmx5IHwgRG9udERlbGV0ZSk7CiAgICAgICAgICAg
ICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAvLyBXZSBvbmx5IGhpdCB0aGlzIHBhdGgg
Zm9yIGVycm9yIG1lc3NhZ2VzIGFuZCB0aHJvdyBzdGF0ZW1lbnRzLCB3aGljaCBkb24ndCBoYXZl
IGEgc3BlY2lmaWMgZmFpbHVyZSBwb3NpdGlvbgogICAgICAgICAgICAgICAgICAgICAvLyBTbyB3
ZSBqdXN0IGdpdmUgdGhlIGZ1bGwgcmFuZ2Ugb2YgdGhlIGVycm9yL3Rocm93IHN0YXRlbWVudC4K
LSAgICAgICAgICAgICAgICAgICAgZXhjZXB0aW9uLT5wdXRXaXRoQXR0cmlidXRlcyhleGVjLCBJ
ZGVudGlmaWVyKGV4ZWMsIGV4cHJlc3Npb25CZWdpbk9mZnNldFByb3BlcnR5TmFtZSksIGpzTnVt
YmVyKGV4ZWMsIGRpdm90UG9pbnQgLSBzdGFydE9mZnNldCksIFJlYWRPbmx5IHwgRG9udERlbGV0
ZSk7Ci0gICAgICAgICAgICAgICAgICAgIGV4Y2VwdGlvbi0+cHV0V2l0aEF0dHJpYnV0ZXMoZXhl
YywgSWRlbnRpZmllcihleGVjLCBleHByZXNzaW9uRW5kT2Zmc2V0UHJvcGVydHlOYW1lKSwganNO
dW1iZXIoZXhlYywgZGl2b3RQb2ludCArIGVuZE9mZnNldCksIFJlYWRPbmx5IHwgRG9udERlbGV0
ZSk7CisgICAgICAgICAgICAgICAgICAgIGV4Y2VwdGlvbi0+cHV0V2l0aEF0dHJpYnV0ZXMoY2Fs
bEZyYW1lLCBJZGVudGlmaWVyKGNhbGxGcmFtZSwgZXhwcmVzc2lvbkJlZ2luT2Zmc2V0UHJvcGVy
dHlOYW1lKSwganNOdW1iZXIoY2FsbEZyYW1lLCBkaXZvdFBvaW50IC0gc3RhcnRPZmZzZXQpLCBS
ZWFkT25seSB8IERvbnREZWxldGUpOworICAgICAgICAgICAgICAgICAgICBleGNlcHRpb24tPnB1
dFdpdGhBdHRyaWJ1dGVzKGNhbGxGcmFtZSwgSWRlbnRpZmllcihjYWxsRnJhbWUsIGV4cHJlc3Np
b25FbmRPZmZzZXRQcm9wZXJ0eU5hbWUpLCBqc051bWJlcihjYWxsRnJhbWUsIGRpdm90UG9pbnQg
KyBlbmRPZmZzZXQpLCBSZWFkT25seSB8IERvbnREZWxldGUpOwogICAgICAgICAgICAgICAgIH0g
ZWxzZQotICAgICAgICAgICAgICAgICAgICBleGNlcHRpb24tPnB1dFdpdGhBdHRyaWJ1dGVzKGV4
ZWMsIElkZW50aWZpZXIoZXhlYywgImxpbmUiKSwganNOdW1iZXIoZXhlYywgY29kZUJsb2NrLT5s
aW5lTnVtYmVyRm9yVlBDKHZQQykpLCBSZWFkT25seSB8IERvbnREZWxldGUpOwotICAgICAgICAg
ICAgICAgIGV4Y2VwdGlvbi0+cHV0V2l0aEF0dHJpYnV0ZXMoZXhlYywgSWRlbnRpZmllcihleGVj
LCAic291cmNlSWQiKSwganNOdW1iZXIoZXhlYywgY29kZUJsb2NrLT5vd25lck5vZGUtPnNvdXJj
ZUlEKCkpLCBSZWFkT25seSB8IERvbnREZWxldGUpOwotICAgICAgICAgICAgICAgIGV4Y2VwdGlv
bi0+cHV0V2l0aEF0dHJpYnV0ZXMoZXhlYywgSWRlbnRpZmllcihleGVjLCAic291cmNlVVJMIiks
IGpzT3duZWRTdHJpbmcoZXhlYywgY29kZUJsb2NrLT5vd25lck5vZGUtPnNvdXJjZVVSTCgpKSwg
UmVhZE9ubHkgfCBEb250RGVsZXRlKTsKKyAgICAgICAgICAgICAgICAgICAgZXhjZXB0aW9uLT5w
dXRXaXRoQXR0cmlidXRlcyhjYWxsRnJhbWUsIElkZW50aWZpZXIoY2FsbEZyYW1lLCAibGluZSIp
LCBqc051bWJlcihjYWxsRnJhbWUsIGNvZGVCbG9jay0+bGluZU51bWJlckZvclZQQyh2UEMpKSwg
UmVhZE9ubHkgfCBEb250RGVsZXRlKTsKKyAgICAgICAgICAgICAgICBleGNlcHRpb24tPnB1dFdp
dGhBdHRyaWJ1dGVzKGNhbGxGcmFtZSwgSWRlbnRpZmllcihjYWxsRnJhbWUsICJzb3VyY2VJZCIp
LCBqc051bWJlcihjYWxsRnJhbWUsIGNvZGVCbG9jay0+b3duZXJOb2RlLT5zb3VyY2VJRCgpKSwg
UmVhZE9ubHkgfCBEb250RGVsZXRlKTsKKyAgICAgICAgICAgICAgICBleGNlcHRpb24tPnB1dFdp
dGhBdHRyaWJ1dGVzKGNhbGxGcmFtZSwgSWRlbnRpZmllcihjYWxsRnJhbWUsICJzb3VyY2VVUkwi
KSwganNPd25lZFN0cmluZyhjYWxsRnJhbWUsIGNvZGVCbG9jay0+b3duZXJOb2RlLT5zb3VyY2VV
UkwoKSksIFJlYWRPbmx5IHwgRG9udERlbGV0ZSk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAg
ICAKICAgICAgICAgICAgIGlmIChleGNlcHRpb24tPmlzV2F0Y2hkb2dFeGNlcHRpb24oKSkgewot
ICAgICAgICAgICAgICAgIHdoaWxlICh1bndpbmRDYWxsRnJhbWUoZXhlYywgZXhjZXB0aW9uVmFs
dWUsIHZQQywgY29kZUJsb2NrLCByKSkgeworICAgICAgICAgICAgICAgIHdoaWxlICh1bndpbmRD
YWxsRnJhbWUoY2FsbEZyYW1lLCBleGNlcHRpb25WYWx1ZSwgdlBDLCBjb2RlQmxvY2spKSB7CiAg
ICAgICAgICAgICAgICAgICAgIC8vIERvbid0IG5lZWQgaGFuZGxlciBjaGVja3Mgb3IgYW55dGhp
bmcsIHdlIGp1c3Qgd2FudCB0byB1bnJvbGwgYWxsIHRoZSBKUyBjYWxsZnJhbWVzIHBvc3NpYmxl
LgogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICByZXR1cm4gMDsKQEAgLTg0NCw5
ICs4MzQsOCBAQCBORVZFUl9JTkxJTkUgSW5zdHJ1Y3Rpb24qIE1hY2hpbmU6OnRocm93CiAgICAg
ICAgIH0KICAgICB9CiAKLSAgICBpZiAoRGVidWdnZXIqIGRlYnVnZ2VyID0gZXhlYy0+ZHluYW1p
Y0dsb2JhbE9iamVjdCgpLT5kZWJ1Z2dlcigpKSB7Ci0gICAgICAgIFNjb3BlQ2hhaW5Ob2RlKiBz
Y29wZUNoYWluID0gdGhpcy0+c2NvcGVDaGFpbihyKTsKLSAgICAgICAgRGVidWdnZXJDYWxsRnJh
bWUgZGVidWdnZXJDYWxsRnJhbWUoZXhlYy0+ZHluYW1pY0dsb2JhbE9iamVjdCgpLCBjb2RlQmxv
Y2ssIHNjb3BlQ2hhaW4sIHIsIGV4Y2VwdGlvblZhbHVlKTsKKyAgICBpZiAoRGVidWdnZXIqIGRl
YnVnZ2VyID0gY2FsbEZyYW1lLT5keW5hbWljR2xvYmFsT2JqZWN0KCktPmRlYnVnZ2VyKCkpIHsK
KyAgICAgICAgRGVidWdnZXJDYWxsRnJhbWUgZGVidWdnZXJDYWxsRnJhbWUoY2FsbEZyYW1lLCBl
eGNlcHRpb25WYWx1ZSk7CiAgICAgICAgIGRlYnVnZ2VyLT5leGNlcHRpb24oZGVidWdnZXJDYWxs
RnJhbWUsIGNvZGVCbG9jay0+b3duZXJOb2RlLT5zb3VyY2VJRCgpLCBjb2RlQmxvY2stPmxpbmVO
dW1iZXJGb3JWUEModlBDKSk7CiAgICAgfQogCkBAIC04NTYsNDcgKzg0NSw0NyBAQCBORVZFUl9J
TkxJTkUgSW5zdHJ1Y3Rpb24qIE1hY2hpbmU6OnRocm93CiAgICAgSW5zdHJ1Y3Rpb24qIGhhbmRs
ZXJWUEM7CiAKICAgICB3aGlsZSAoIWNvZGVCbG9jay0+Z2V0SGFuZGxlckZvclZQQyh2UEMsIGhh
bmRsZXJWUEMsIHNjb3BlRGVwdGgpKSB7Ci0gICAgICAgIGlmICghdW53aW5kQ2FsbEZyYW1lKGV4
ZWMsIGV4Y2VwdGlvblZhbHVlLCB2UEMsIGNvZGVCbG9jaywgcikpCisgICAgICAgIGlmICghdW53
aW5kQ2FsbEZyYW1lKGNhbGxGcmFtZSwgZXhjZXB0aW9uVmFsdWUsIHZQQywgY29kZUJsb2NrKSkK
ICAgICAgICAgICAgIHJldHVybiAwOwogICAgIH0KIAogICAgIC8vIE5vdyB1bndpbmQgdGhlIHNj
b3BlIGNoYWluIHdpdGhpbiB0aGUgZXhjZXB0aW9uIGhhbmRsZXIncyBjYWxsIGZyYW1lLgogCi0g
ICAgU2NvcGVDaGFpbiBzYyh0aGlzLT5zY29wZUNoYWluKHIpKTsKKyAgICBTY29wZUNoYWluIHNj
KGNhbGxGcmFtZS0+c2NvcGVDaGFpbigpKTsKICAgICBpbnQgc2NvcGVEZWx0YSA9IGRlcHRoKGNv
ZGVCbG9jaywgc2MpIC0gc2NvcGVEZXB0aDsKICAgICBBU1NFUlQoc2NvcGVEZWx0YSA+PSAwKTsK
ICAgICB3aGlsZSAoc2NvcGVEZWx0YS0tKQogICAgICAgICBzYy5wb3AoKTsKLSAgICByW1JlZ2lz
dGVyRmlsZTo6U2NvcGVDaGFpbl0gPSBzYy5ub2RlKCk7CisgICAgY2FsbEZyYW1lLT5zZXRTY29w
ZUNoYWluKHNjLm5vZGUoKSk7CiAKICAgICByZXR1cm4gaGFuZGxlclZQQzsKIH0KIAotY2xhc3Mg
RHluYW1pY0dsb2JhbE9iamVjdFNjb3BlIHsKK2NsYXNzIER5bmFtaWNHbG9iYWxPYmplY3RTY29w
ZSA6IE5vbmNvcHlhYmxlIHsKIHB1YmxpYzoKLSAgICBEeW5hbWljR2xvYmFsT2JqZWN0U2NvcGUo
RXhlY1N0YXRlKiBleGVjLCBKU0dsb2JhbE9iamVjdCogZHluYW1pY0dsb2JhbE9iamVjdCkgCi0g
ICAgICAgIDogbV9leGVjKGV4ZWMpCi0gICAgICAgICwgbV9zYXZlZEdsb2JhbE9iamVjdChleGVj
LT5nbG9iYWxEYXRhKCkuZHluYW1pY0dsb2JhbE9iamVjdCkKKyAgICBEeW5hbWljR2xvYmFsT2Jq
ZWN0U2NvcGUoQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIEpTR2xvYmFsT2JqZWN0KiBkeW5hbWljR2xv
YmFsT2JqZWN0KSAKKyAgICAgICAgOiBtX2R5bmFtaWNHbG9iYWxPYmplY3RTbG90KGNhbGxGcmFt
ZS0+Z2xvYmFsRGF0YSgpLmR5bmFtaWNHbG9iYWxPYmplY3QpCisgICAgICAgICwgbV9zYXZlZER5
bmFtaWNHbG9iYWxPYmplY3QobV9keW5hbWljR2xvYmFsT2JqZWN0U2xvdCkKICAgICB7Ci0gICAg
ICAgIGV4ZWMtPmdsb2JhbERhdGEoKS5keW5hbWljR2xvYmFsT2JqZWN0ID0gZHluYW1pY0dsb2Jh
bE9iamVjdDsKKyAgICAgICAgbV9keW5hbWljR2xvYmFsT2JqZWN0U2xvdCA9IGR5bmFtaWNHbG9i
YWxPYmplY3Q7CiAgICAgfQogCiAgICAgfkR5bmFtaWNHbG9iYWxPYmplY3RTY29wZSgpCiAgICAg
ewotICAgICAgICBtX2V4ZWMtPmdsb2JhbERhdGEoKS5keW5hbWljR2xvYmFsT2JqZWN0ID0gbV9z
YXZlZEdsb2JhbE9iamVjdDsKKyAgICAgICAgbV9keW5hbWljR2xvYmFsT2JqZWN0U2xvdCA9IG1f
c2F2ZWREeW5hbWljR2xvYmFsT2JqZWN0OwogICAgIH0KIAogcHJpdmF0ZToKLSAgICBFeGVjU3Rh
dGUqIG1fZXhlYzsKLSAgICBKU0dsb2JhbE9iamVjdCogbV9zYXZlZEdsb2JhbE9iamVjdDsKKyAg
ICBKU0dsb2JhbE9iamVjdComIG1fZHluYW1pY0dsb2JhbE9iamVjdFNsb3Q7CisgICAgSlNHbG9i
YWxPYmplY3QqIG1fc2F2ZWREeW5hbWljR2xvYmFsT2JqZWN0OwogfTsKIAotSlNWYWx1ZSogTWFj
aGluZTo6ZXhlY3V0ZShQcm9ncmFtTm9kZSogcHJvZ3JhbU5vZGUsIEV4ZWNTdGF0ZSogZXhlYywg
U2NvcGVDaGFpbk5vZGUqIHNjb3BlQ2hhaW4sIEpTT2JqZWN0KiB0aGlzT2JqLCBKU1ZhbHVlKiog
ZXhjZXB0aW9uKQorSlNWYWx1ZSogTWFjaGluZTo6ZXhlY3V0ZShQcm9ncmFtTm9kZSogcHJvZ3Jh
bU5vZGUsIENhbGxGcmFtZSogY2FsbEZyYW1lLCBTY29wZUNoYWluTm9kZSogc2NvcGVDaGFpbiwg
SlNPYmplY3QqIHRoaXNPYmosIEpTVmFsdWUqKiBleGNlcHRpb24pCiB7Ci0gICAgQVNTRVJUKCFl
eGVjLT5oYWRFeGNlcHRpb24oKSk7CisgICAgQVNTRVJUKCFjYWxsRnJhbWUtPmhhZEV4Y2VwdGlv
bigpKTsKIAogICAgIGlmIChtX3JlZW50cnlEZXB0aCA+PSBNYXhSZWVudHJ5RGVwdGgpIHsKLSAg
ICAgICAgKmV4Y2VwdGlvbiA9IGNyZWF0ZVN0YWNrT3ZlcmZsb3dFcnJvcihleGVjKTsKKyAgICAg
ICAgKmV4Y2VwdGlvbiA9IGNyZWF0ZVN0YWNrT3ZlcmZsb3dFcnJvcihjYWxsRnJhbWUpOwogICAg
ICAgICByZXR1cm4ganNOdWxsKCk7CiAgICAgfQogCkBAIC05MDUsNDEgKzg5NCw0MSBAQCBKU1Zh
bHVlKiBNYWNoaW5lOjpleGVjdXRlKFByb2dyYW1Ob2RlKiBwCiAgICAgUmVnaXN0ZXIqIG9sZEVu
ZCA9IG1fcmVnaXN0ZXJGaWxlLmVuZCgpOwogICAgIFJlZ2lzdGVyKiBuZXdFbmQgPSBvbGRFbmQg
KyBjb2RlQmxvY2stPm51bVBhcmFtZXRlcnMgKyBSZWdpc3RlckZpbGU6OkNhbGxGcmFtZUhlYWRl
clNpemUgKyBjb2RlQmxvY2stPm51bUNhbGxlZVJlZ2lzdGVyczsKICAgICBpZiAoIW1fcmVnaXN0
ZXJGaWxlLmdyb3cobmV3RW5kKSkgewotICAgICAgICAqZXhjZXB0aW9uID0gY3JlYXRlU3RhY2tP
dmVyZmxvd0Vycm9yKGV4ZWMpOworICAgICAgICAqZXhjZXB0aW9uID0gY3JlYXRlU3RhY2tPdmVy
Zmxvd0Vycm9yKGNhbGxGcmFtZSk7CiAgICAgICAgIHJldHVybiBqc051bGwoKTsKICAgICB9CiAK
LSAgICBEeW5hbWljR2xvYmFsT2JqZWN0U2NvcGUgZ2xvYmFsT2JqZWN0U2NvcGUoZXhlYywgc2Nv
cGVDaGFpbi0+Z2xvYmFsT2JqZWN0KCkpOworICAgIER5bmFtaWNHbG9iYWxPYmplY3RTY29wZSBn
bG9iYWxPYmplY3RTY29wZShjYWxsRnJhbWUsIHNjb3BlQ2hhaW4tPmdsb2JhbE9iamVjdCgpKTsK
IAogICAgIEpTR2xvYmFsT2JqZWN0KiBsYXN0R2xvYmFsT2JqZWN0ID0gbV9yZWdpc3RlckZpbGUu
Z2xvYmFsT2JqZWN0KCk7Ci0gICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IGV4ZWMt
PmR5bmFtaWNHbG9iYWxPYmplY3QoKTsKKyAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0
ID0gY2FsbEZyYW1lLT5keW5hbWljR2xvYmFsT2JqZWN0KCk7CiAgICAgZ2xvYmFsT2JqZWN0LT5j
b3B5R2xvYmFsc1RvKG1fcmVnaXN0ZXJGaWxlKTsKIAotICAgIFJlZ2lzdGVyKiByID0gb2xkRW5k
ICsgY29kZUJsb2NrLT5udW1QYXJhbWV0ZXJzICsgUmVnaXN0ZXJGaWxlOjpDYWxsRnJhbWVIZWFk
ZXJTaXplOwotICAgIHJbY29kZUJsb2NrLT50aGlzUmVnaXN0ZXJdID0gdGhpc09iajsKLSAgICBp
bml0aWFsaXplQ2FsbEZyYW1lKHIsIGNvZGVCbG9jaywgMCwgc2NvcGVDaGFpbiwgbWFrZUhvc3RD
YWxsRnJhbWVQb2ludGVyKDApLCAwLCAwLCAwKTsKKyAgICBDYWxsRnJhbWUqIG5ld0NhbGxGcmFt
ZSA9IENhbGxGcmFtZTo6Y3JlYXRlKG9sZEVuZCArIGNvZGVCbG9jay0+bnVtUGFyYW1ldGVycyAr
IFJlZ2lzdGVyRmlsZTo6Q2FsbEZyYW1lSGVhZGVyU2l6ZSk7CisgICAgbmV3Q2FsbEZyYW1lLT5y
ZWdpc3RlcnMoKVtjb2RlQmxvY2stPnRoaXNSZWdpc3Rlcl0gPSB0aGlzT2JqOworICAgIG5ld0Nh
bGxGcmFtZS0+aW5pdChjb2RlQmxvY2ssIDAsIHNjb3BlQ2hhaW4sIENhbGxGcmFtZTo6bm9DYWxs
ZXIoKSwgMCwgMCwgMCk7CiAKICAgICBpZiAoY29kZUJsb2NrLT5uZWVkc0Z1bGxTY29wZUNoYWlu
KQogICAgICAgICBzY29wZUNoYWluID0gc2NvcGVDaGFpbi0+Y29weSgpOwogCiAgICAgUHJvZmls
ZXIqKiBwcm9maWxlciA9IFByb2ZpbGVyOjplbmFibGVkUHJvZmlsZXJSZWZlcmVuY2UoKTsKICAg
ICBpZiAoKnByb2ZpbGVyKQotICAgICAgICAoKnByb2ZpbGVyKS0+d2lsbEV4ZWN1dGUoZXhlYywg
cHJvZ3JhbU5vZGUtPnNvdXJjZVVSTCgpLCBwcm9ncmFtTm9kZS0+bGluZU5vKCkpOworICAgICAg
ICAoKnByb2ZpbGVyKS0+d2lsbEV4ZWN1dGUoY2FsbEZyYW1lLCBwcm9ncmFtTm9kZS0+c291cmNl
VVJMKCksIHByb2dyYW1Ob2RlLT5saW5lTm8oKSk7CiAKICAgICBtX3JlZW50cnlEZXB0aCsrOwog
I2lmIEVOQUJMRShDVEkpCiAgICAgaWYgKCFjb2RlQmxvY2stPmN0aUNvZGUpCi0gICAgICAgIENU
STo6Y29tcGlsZSh0aGlzLCBleGVjLCBjb2RlQmxvY2spOwotICAgIEpTVmFsdWUqIHJlc3VsdCA9
IENUSTo6ZXhlY3V0ZShjb2RlQmxvY2stPmN0aUNvZGUsICZtX3JlZ2lzdGVyRmlsZSwgciwgc2Nv
cGVDaGFpbi0+Z2xvYmFsRGF0YSwgZXhjZXB0aW9uKTsKKyAgICAgICAgQ1RJOjpjb21waWxlKHRo
aXMsIGNhbGxGcmFtZSwgY29kZUJsb2NrKTsKKyAgICBKU1ZhbHVlKiByZXN1bHQgPSBDVEk6OmV4
ZWN1dGUoY29kZUJsb2NrLT5jdGlDb2RlLCAmbV9yZWdpc3RlckZpbGUsIGNhbGxGcmFtZSwgc2Nv
cGVDaGFpbi0+Z2xvYmFsRGF0YSwgZXhjZXB0aW9uKTsKICNlbHNlCi0gICAgSlNWYWx1ZSogcmVz
dWx0ID0gcHJpdmF0ZUV4ZWN1dGUoTm9ybWFsLCAmbV9yZWdpc3RlckZpbGUsIHIsIGV4Y2VwdGlv
bik7CisgICAgSlNWYWx1ZSogcmVzdWx0ID0gcHJpdmF0ZUV4ZWN1dGUoTm9ybWFsLCAmbV9yZWdp
c3RlckZpbGUsIGNhbGxGcmFtZSwgZXhjZXB0aW9uKTsKICNlbmRpZgogICAgIG1fcmVlbnRyeURl
cHRoLS07CiAKICAgICBNQUNISU5FX1NBTVBMSU5HX3ByaXZhdGVFeGVjdXRlUmV0dXJuZWQoKTsK
IAogICAgIGlmICgqcHJvZmlsZXIpCi0gICAgICAgICgqcHJvZmlsZXIpLT5kaWRFeGVjdXRlKGV4
ZWMsIHByb2dyYW1Ob2RlLT5zb3VyY2VVUkwoKSwgcHJvZ3JhbU5vZGUtPmxpbmVObygpKTsKKyAg
ICAgICAgKCpwcm9maWxlciktPmRpZEV4ZWN1dGUoY2FsbEZyYW1lLCBwcm9ncmFtTm9kZS0+c291
cmNlVVJMKCksIHByb2dyYW1Ob2RlLT5saW5lTm8oKSk7CiAKICAgICBpZiAobV9yZWVudHJ5RGVw
dGggJiYgbGFzdEdsb2JhbE9iamVjdCAmJiBnbG9iYWxPYmplY3QgIT0gbGFzdEdsb2JhbE9iamVj
dCkKICAgICAgICAgbGFzdEdsb2JhbE9iamVjdC0+Y29weUdsb2JhbHNUbyhtX3JlZ2lzdGVyRmls
ZSk7CkBAIC05NDksMTIgKzkzOCwxMiBAQCBKU1ZhbHVlKiBNYWNoaW5lOjpleGVjdXRlKFByb2dy
YW1Ob2RlKiBwCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotSlNWYWx1ZSogTWFjaGluZTo6ZXhl
Y3V0ZShGdW5jdGlvbkJvZHlOb2RlKiBmdW5jdGlvbkJvZHlOb2RlLCBFeGVjU3RhdGUqIGV4ZWMs
IEpTRnVuY3Rpb24qIGZ1bmN0aW9uLCBKU09iamVjdCogdGhpc09iaiwgY29uc3QgQXJnTGlzdCYg
YXJncywgU2NvcGVDaGFpbk5vZGUqIHNjb3BlQ2hhaW4sIEpTVmFsdWUqKiBleGNlcHRpb24pCitK
U1ZhbHVlKiBNYWNoaW5lOjpleGVjdXRlKEZ1bmN0aW9uQm9keU5vZGUqIGZ1bmN0aW9uQm9keU5v
ZGUsIENhbGxGcmFtZSogY2FsbEZyYW1lLCBKU0Z1bmN0aW9uKiBmdW5jdGlvbiwgSlNPYmplY3Qq
IHRoaXNPYmosIGNvbnN0IEFyZ0xpc3QmIGFyZ3MsIFNjb3BlQ2hhaW5Ob2RlKiBzY29wZUNoYWlu
LCBKU1ZhbHVlKiogZXhjZXB0aW9uKQogewotICAgIEFTU0VSVCghZXhlYy0+aGFkRXhjZXB0aW9u
KCkpOworICAgIEFTU0VSVCghY2FsbEZyYW1lLT5oYWRFeGNlcHRpb24oKSk7CiAKICAgICBpZiAo
bV9yZWVudHJ5RGVwdGggPj0gTWF4UmVlbnRyeURlcHRoKSB7Ci0gICAgICAgICpleGNlcHRpb24g
PSBjcmVhdGVTdGFja092ZXJmbG93RXJyb3IoZXhlYyk7CisgICAgICAgICpleGNlcHRpb24gPSBj
cmVhdGVTdGFja092ZXJmbG93RXJyb3IoY2FsbEZyYW1lKTsKICAgICAgICAgcmV0dXJuIGpzTnVs
bCgpOwogICAgIH0KIApAQCAtOTYyLDExICs5NTEsMTEgQEAgSlNWYWx1ZSogTWFjaGluZTo6ZXhl
Y3V0ZShGdW5jdGlvbkJvZHlObwogICAgIGludCBhcmdjID0gMSArIGFyZ3Muc2l6ZSgpOyAvLyBp
bXBsaWNpdCAidGhpcyIgcGFyYW1ldGVyCiAKICAgICBpZiAoIW1fcmVnaXN0ZXJGaWxlLmdyb3co
b2xkRW5kICsgYXJnYykpIHsKLSAgICAgICAgKmV4Y2VwdGlvbiA9IGNyZWF0ZVN0YWNrT3ZlcmZs
b3dFcnJvcihleGVjKTsKKyAgICAgICAgKmV4Y2VwdGlvbiA9IGNyZWF0ZVN0YWNrT3ZlcmZsb3dF
cnJvcihjYWxsRnJhbWUpOwogICAgICAgICByZXR1cm4ganNOdWxsKCk7CiAgICAgfQogCi0gICAg
RHluYW1pY0dsb2JhbE9iamVjdFNjb3BlIGdsb2JhbE9iamVjdFNjb3BlKGV4ZWMsIGV4ZWMtPmds
b2JhbERhdGEoKS5keW5hbWljR2xvYmFsT2JqZWN0ID8gZXhlYy0+Z2xvYmFsRGF0YSgpLmR5bmFt
aWNHbG9iYWxPYmplY3QgOiBzY29wZUNoYWluLT5nbG9iYWxPYmplY3QoKSk7CisgICAgRHluYW1p
Y0dsb2JhbE9iamVjdFNjb3BlIGdsb2JhbE9iamVjdFNjb3BlKGNhbGxGcmFtZSwgY2FsbEZyYW1l
LT5nbG9iYWxEYXRhKCkuZHluYW1pY0dsb2JhbE9iamVjdCA/IGNhbGxGcmFtZS0+Z2xvYmFsRGF0
YSgpLmR5bmFtaWNHbG9iYWxPYmplY3QgOiBzY29wZUNoYWluLT5nbG9iYWxPYmplY3QoKSk7CiAK
ICAgICBSZWdpc3RlciogYXJndiA9IG9sZEVuZDsKICAgICBzaXplX3QgZHN0ID0gMDsKQEAgLTk3
NywyNiArOTY2LDI2IEBAIEpTVmFsdWUqIE1hY2hpbmU6OmV4ZWN1dGUoRnVuY3Rpb25Cb2R5Tm8K
ICAgICAgICAgYXJndlsrK2RzdF0gPSAqaXQ7CiAKICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9
ICZmdW5jdGlvbkJvZHlOb2RlLT5ieXRlQ29kZShzY29wZUNoYWluKTsKLSAgICBSZWdpc3Rlciog
ciA9IHNsaWRlUmVnaXN0ZXJXaW5kb3dGb3JDYWxsKGNvZGVCbG9jaywgJm1fcmVnaXN0ZXJGaWxl
LCBhcmd2LCBhcmdjICsgUmVnaXN0ZXJGaWxlOjpDYWxsRnJhbWVIZWFkZXJTaXplLCBhcmdjKTsK
LSAgICBpZiAoVU5MSUtFTFkoIXIpKSB7Ci0gICAgICAgICpleGNlcHRpb24gPSBjcmVhdGVTdGFj
a092ZXJmbG93RXJyb3IoZXhlYyk7CisgICAgY2FsbEZyYW1lID0gc2xpZGVSZWdpc3RlcldpbmRv
d0ZvckNhbGwoY29kZUJsb2NrLCAmbV9yZWdpc3RlckZpbGUsIENhbGxGcmFtZTo6Y3JlYXRlKGFy
Z3YpLCBhcmdjICsgUmVnaXN0ZXJGaWxlOjpDYWxsRnJhbWVIZWFkZXJTaXplLCBhcmdjKTsKKyAg
ICBpZiAoVU5MSUtFTFkoIWNhbGxGcmFtZSkpIHsKKyAgICAgICAgKmV4Y2VwdGlvbiA9IGNyZWF0
ZVN0YWNrT3ZlcmZsb3dFcnJvcihjYWxsRnJhbWUpOwogICAgICAgICBtX3JlZ2lzdGVyRmlsZS5z
aHJpbmsob2xkRW5kKTsKICAgICAgICAgcmV0dXJuIGpzTnVsbCgpOwogICAgIH0KICAgICAvLyBh
IDAgY29kZUJsb2NrIGluZGljYXRlcyBhIGJ1aWx0LWluIGNhbGxlcgotICAgIGluaXRpYWxpemVD
YWxsRnJhbWUociwgY29kZUJsb2NrLCAwLCBzY29wZUNoYWluLCBtYWtlSG9zdENhbGxGcmFtZVBv
aW50ZXIoZXhlYy0+cmVnaXN0ZXJzKCkpLCAwLCBhcmdjLCBmdW5jdGlvbik7CisgICAgY2FsbEZy
YW1lLT5pbml0KGNvZGVCbG9jaywgMCwgc2NvcGVDaGFpbiwgQ2FsbEZyYW1lOjpjcmVhdGUoYXJn
diktPmFkZEhvc3RDYWxsRnJhbWVGbGFnKCksIDAsIGFyZ2MsIGZ1bmN0aW9uKTsKIAogICAgIFBy
b2ZpbGVyKiogcHJvZmlsZXIgPSBQcm9maWxlcjo6ZW5hYmxlZFByb2ZpbGVyUmVmZXJlbmNlKCk7
CiAgICAgaWYgKCpwcm9maWxlcikKLSAgICAgICAgKCpwcm9maWxlciktPndpbGxFeGVjdXRlKGV4
ZWMsIGZ1bmN0aW9uKTsKKyAgICAgICAgKCpwcm9maWxlciktPndpbGxFeGVjdXRlKGNhbGxGcmFt
ZSwgZnVuY3Rpb24pOwogCiAgICAgbV9yZWVudHJ5RGVwdGgrKzsKICNpZiBFTkFCTEUoQ1RJKQog
ICAgIGlmICghY29kZUJsb2NrLT5jdGlDb2RlKQotICAgICAgICBDVEk6OmNvbXBpbGUodGhpcywg
ZXhlYywgY29kZUJsb2NrKTsKLSAgICBKU1ZhbHVlKiByZXN1bHQgPSBDVEk6OmV4ZWN1dGUoY29k
ZUJsb2NrLT5jdGlDb2RlLCAmbV9yZWdpc3RlckZpbGUsIHIsIHNjb3BlQ2hhaW4tPmdsb2JhbERh
dGEsIGV4Y2VwdGlvbik7CisgICAgICAgIENUSTo6Y29tcGlsZSh0aGlzLCBjYWxsRnJhbWUsIGNv
ZGVCbG9jayk7CisgICAgSlNWYWx1ZSogcmVzdWx0ID0gQ1RJOjpleGVjdXRlKGNvZGVCbG9jay0+
Y3RpQ29kZSwgJm1fcmVnaXN0ZXJGaWxlLCBjYWxsRnJhbWUsIHNjb3BlQ2hhaW4tPmdsb2JhbERh
dGEsIGV4Y2VwdGlvbik7CiAjZWxzZQotICAgIEpTVmFsdWUqIHJlc3VsdCA9IHByaXZhdGVFeGVj
dXRlKE5vcm1hbCwgJm1fcmVnaXN0ZXJGaWxlLCByLCBleGNlcHRpb24pOworICAgIEpTVmFsdWUq
IHJlc3VsdCA9IHByaXZhdGVFeGVjdXRlKE5vcm1hbCwgJm1fcmVnaXN0ZXJGaWxlLCBjYWxsRnJh
bWUsIGV4Y2VwdGlvbik7CiAjZW5kaWYKICAgICBtX3JlZW50cnlEZXB0aC0tOwogCkBAIC0xMDA2
LDIxICs5OTUsMjEgQEAgSlNWYWx1ZSogTWFjaGluZTo6ZXhlY3V0ZShGdW5jdGlvbkJvZHlObwog
ICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLUpTVmFsdWUqIE1hY2hpbmU6OmV4ZWN1dGUoRXZhbE5v
ZGUqIGV2YWxOb2RlLCBFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiB0aGlzT2JqLCBTY29wZUNo
YWluTm9kZSogc2NvcGVDaGFpbiwgSlNWYWx1ZSoqIGV4Y2VwdGlvbikKK0pTVmFsdWUqIE1hY2hp
bmU6OmV4ZWN1dGUoRXZhbE5vZGUqIGV2YWxOb2RlLCBDYWxsRnJhbWUqIGNhbGxGcmFtZSwgSlNP
YmplY3QqIHRoaXNPYmosIFNjb3BlQ2hhaW5Ob2RlKiBzY29wZUNoYWluLCBKU1ZhbHVlKiogZXhj
ZXB0aW9uKQogewotICAgIHJldHVybiBleGVjdXRlKGV2YWxOb2RlLCBleGVjLCB0aGlzT2JqLCBt
X3JlZ2lzdGVyRmlsZS5zaXplKCkgKyBldmFsTm9kZS0+Ynl0ZUNvZGUoc2NvcGVDaGFpbikubnVt
UGFyYW1ldGVycyArIFJlZ2lzdGVyRmlsZTo6Q2FsbEZyYW1lSGVhZGVyU2l6ZSwgc2NvcGVDaGFp
biwgZXhjZXB0aW9uKTsKKyAgICByZXR1cm4gZXhlY3V0ZShldmFsTm9kZSwgY2FsbEZyYW1lLCB0
aGlzT2JqLCBtX3JlZ2lzdGVyRmlsZS5zaXplKCkgKyBldmFsTm9kZS0+Ynl0ZUNvZGUoc2NvcGVD
aGFpbikubnVtUGFyYW1ldGVycyArIFJlZ2lzdGVyRmlsZTo6Q2FsbEZyYW1lSGVhZGVyU2l6ZSwg
c2NvcGVDaGFpbiwgZXhjZXB0aW9uKTsKIH0KIAotSlNWYWx1ZSogTWFjaGluZTo6ZXhlY3V0ZShF
dmFsTm9kZSogZXZhbE5vZGUsIEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIHRoaXNPYmosIGlu
dCByZWdpc3Rlck9mZnNldCwgU2NvcGVDaGFpbk5vZGUqIHNjb3BlQ2hhaW4sIEpTVmFsdWUqKiBl
eGNlcHRpb24pCitKU1ZhbHVlKiBNYWNoaW5lOjpleGVjdXRlKEV2YWxOb2RlKiBldmFsTm9kZSwg
Q2FsbEZyYW1lKiBjYWxsRnJhbWUsIEpTT2JqZWN0KiB0aGlzT2JqLCBpbnQgcmVnaXN0ZXJPZmZz
ZXQsIFNjb3BlQ2hhaW5Ob2RlKiBzY29wZUNoYWluLCBKU1ZhbHVlKiogZXhjZXB0aW9uKQogewot
ICAgIEFTU0VSVCghZXhlYy0+aGFkRXhjZXB0aW9uKCkpOworICAgIEFTU0VSVCghY2FsbEZyYW1l
LT5oYWRFeGNlcHRpb24oKSk7CiAKICAgICBpZiAobV9yZWVudHJ5RGVwdGggPj0gTWF4UmVlbnRy
eURlcHRoKSB7Ci0gICAgICAgICpleGNlcHRpb24gPSBjcmVhdGVTdGFja092ZXJmbG93RXJyb3Io
ZXhlYyk7CisgICAgICAgICpleGNlcHRpb24gPSBjcmVhdGVTdGFja092ZXJmbG93RXJyb3IoY2Fs
bEZyYW1lKTsKICAgICAgICAgcmV0dXJuIGpzTnVsbCgpOwogICAgIH0KIAotICAgIER5bmFtaWNH
bG9iYWxPYmplY3RTY29wZSBnbG9iYWxPYmplY3RTY29wZShleGVjLCBleGVjLT5nbG9iYWxEYXRh
KCkuZHluYW1pY0dsb2JhbE9iamVjdCA/IGV4ZWMtPmdsb2JhbERhdGEoKS5keW5hbWljR2xvYmFs
T2JqZWN0IDogc2NvcGVDaGFpbi0+Z2xvYmFsT2JqZWN0KCkpOworICAgIER5bmFtaWNHbG9iYWxP
YmplY3RTY29wZSBnbG9iYWxPYmplY3RTY29wZShjYWxsRnJhbWUsIGNhbGxGcmFtZS0+Z2xvYmFs
RGF0YSgpLmR5bmFtaWNHbG9iYWxPYmplY3QgPyBjYWxsRnJhbWUtPmdsb2JhbERhdGEoKS5keW5h
bWljR2xvYmFsT2JqZWN0IDogc2NvcGVDaGFpbi0+Z2xvYmFsT2JqZWN0KCkpOwogCiAgICAgRXZh
bENvZGVCbG9jayogY29kZUJsb2NrID0gJmV2YWxOb2RlLT5ieXRlQ29kZShzY29wZUNoYWluKTsK
IApAQCAtMTA0MSw5ICsxMDMwLDkgQEAgSlNWYWx1ZSogTWFjaGluZTo6ZXhlY3V0ZShFdmFsTm9k
ZSogZXZhbAogICAgICAgICBOb2RlOjpWYXJTdGFjazo6Y29uc3RfaXRlcmF0b3IgdmFyU3RhY2tF
bmQgPSB2YXJTdGFjay5lbmQoKTsKICAgICAgICAgZm9yIChOb2RlOjpWYXJTdGFjazo6Y29uc3Rf
aXRlcmF0b3IgaXQgPSB2YXJTdGFjay5iZWdpbigpOyBpdCAhPSB2YXJTdGFja0VuZDsgKytpdCkg
ewogICAgICAgICAgICAgY29uc3QgSWRlbnRpZmllciYgaWRlbnQgPSAoKml0KS5maXJzdDsKLSAg
ICAgICAgICAgIGlmICghdmFyaWFibGVPYmplY3QtPmhhc1Byb3BlcnR5KGV4ZWMsIGlkZW50KSkg
eworICAgICAgICAgICAgaWYgKCF2YXJpYWJsZU9iamVjdC0+aGFzUHJvcGVydHkoY2FsbEZyYW1l
LCBpZGVudCkpIHsKICAgICAgICAgICAgICAgICBQdXRQcm9wZXJ0eVNsb3Qgc2xvdDsKLSAgICAg
ICAgICAgICAgICB2YXJpYWJsZU9iamVjdC0+cHV0KGV4ZWMsIGlkZW50LCBqc1VuZGVmaW5lZCgp
LCBzbG90KTsKKyAgICAgICAgICAgICAgICB2YXJpYWJsZU9iamVjdC0+cHV0KGNhbGxGcmFtZSwg
aWRlbnQsIGpzVW5kZWZpbmVkKCksIHNsb3QpOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAK
QEAgLTEwNTEsNyArMTA0MCw3IEBAIEpTVmFsdWUqIE1hY2hpbmU6OmV4ZWN1dGUoRXZhbE5vZGUq
IGV2YWwKICAgICAgICAgTm9kZTo6RnVuY3Rpb25TdGFjazo6Y29uc3RfaXRlcmF0b3IgZnVuY3Rp
b25TdGFja0VuZCA9IGZ1bmN0aW9uU3RhY2suZW5kKCk7CiAgICAgICAgIGZvciAoTm9kZTo6RnVu
Y3Rpb25TdGFjazo6Y29uc3RfaXRlcmF0b3IgaXQgPSBmdW5jdGlvblN0YWNrLmJlZ2luKCk7IGl0
ICE9IGZ1bmN0aW9uU3RhY2tFbmQ7ICsraXQpIHsKICAgICAgICAgICAgIFB1dFByb3BlcnR5U2xv
dCBzbG90OwotICAgICAgICAgICAgdmFyaWFibGVPYmplY3QtPnB1dChleGVjLCAoKml0KS0+bV9p
ZGVudCwgKCppdCktPm1ha2VGdW5jdGlvbihleGVjLCBzY29wZUNoYWluKSwgc2xvdCk7CisgICAg
ICAgICAgICB2YXJpYWJsZU9iamVjdC0+cHV0KGNhbGxGcmFtZSwgKCppdCktPm1faWRlbnQsICgq
aXQpLT5tYWtlRnVuY3Rpb24oY2FsbEZyYW1lLCBzY29wZUNoYWluKSwgc2xvdCk7CiAgICAgICAg
IH0KIAogICAgIH0KQEAgLTEwNTksNzAgKzEwNDgsNjYgQEAgSlNWYWx1ZSogTWFjaGluZTo6ZXhl
Y3V0ZShFdmFsTm9kZSogZXZhbAogICAgIFJlZ2lzdGVyKiBvbGRFbmQgPSBtX3JlZ2lzdGVyRmls
ZS5lbmQoKTsKICAgICBSZWdpc3RlciogbmV3RW5kID0gbV9yZWdpc3RlckZpbGUuc3RhcnQoKSAr
IHJlZ2lzdGVyT2Zmc2V0ICsgY29kZUJsb2NrLT5udW1DYWxsZWVSZWdpc3RlcnM7CiAgICAgaWYg
KCFtX3JlZ2lzdGVyRmlsZS5ncm93KG5ld0VuZCkpIHsKLSAgICAgICAgKmV4Y2VwdGlvbiA9IGNy
ZWF0ZVN0YWNrT3ZlcmZsb3dFcnJvcihleGVjKTsKKyAgICAgICAgKmV4Y2VwdGlvbiA9IGNyZWF0
ZVN0YWNrT3ZlcmZsb3dFcnJvcihjYWxsRnJhbWUpOwogICAgICAgICByZXR1cm4ganNOdWxsKCk7
CiAgICAgfQogCi0gICAgUmVnaXN0ZXIqIHIgPSBtX3JlZ2lzdGVyRmlsZS5zdGFydCgpICsgcmVn
aXN0ZXJPZmZzZXQ7CisgICAgQ2FsbEZyYW1lKiBuZXdDYWxsRnJhbWUgPSBDYWxsRnJhbWU6OmNy
ZWF0ZShtX3JlZ2lzdGVyRmlsZS5zdGFydCgpICsgcmVnaXN0ZXJPZmZzZXQpOwogCiAgICAgLy8g
YSAwIGNvZGVCbG9jayBpbmRpY2F0ZXMgYSBidWlsdC1pbiBjYWxsZXIKLSAgICByW2NvZGVCbG9j
ay0+dGhpc1JlZ2lzdGVyXSA9IHRoaXNPYmo7Ci0gICAgaW5pdGlhbGl6ZUNhbGxGcmFtZShyLCBj
b2RlQmxvY2ssIDAsIHNjb3BlQ2hhaW4sIG1ha2VIb3N0Q2FsbEZyYW1lUG9pbnRlcihleGVjLT5y
ZWdpc3RlcnMoKSksIDAsIDAsIDApOworICAgIG5ld0NhbGxGcmFtZS0+cmVnaXN0ZXJzKClbY29k
ZUJsb2NrLT50aGlzUmVnaXN0ZXJdID0gdGhpc09iajsKKyAgICBuZXdDYWxsRnJhbWUtPmluaXQo
Y29kZUJsb2NrLCAwLCBzY29wZUNoYWluLCBjYWxsRnJhbWUtPmFkZEhvc3RDYWxsRnJhbWVGbGFn
KCksIDAsIDAsIDApOwogCiAgICAgaWYgKGNvZGVCbG9jay0+bmVlZHNGdWxsU2NvcGVDaGFpbikK
ICAgICAgICAgc2NvcGVDaGFpbiA9IHNjb3BlQ2hhaW4tPmNvcHkoKTsKIAogICAgIFByb2ZpbGVy
KiogcHJvZmlsZXIgPSBQcm9maWxlcjo6ZW5hYmxlZFByb2ZpbGVyUmVmZXJlbmNlKCk7CiAgICAg
aWYgKCpwcm9maWxlcikKLSAgICAgICAgKCpwcm9maWxlciktPndpbGxFeGVjdXRlKGV4ZWMsIGV2
YWxOb2RlLT5zb3VyY2VVUkwoKSwgZXZhbE5vZGUtPmxpbmVObygpKTsKKyAgICAgICAgKCpwcm9m
aWxlciktPndpbGxFeGVjdXRlKG5ld0NhbGxGcmFtZSwgZXZhbE5vZGUtPnNvdXJjZVVSTCgpLCBl
dmFsTm9kZS0+bGluZU5vKCkpOwogCiAgICAgbV9yZWVudHJ5RGVwdGgrKzsKICNpZiBFTkFCTEUo
Q1RJKQogICAgIGlmICghY29kZUJsb2NrLT5jdGlDb2RlKQotICAgICAgICBDVEk6OmNvbXBpbGUo
dGhpcywgZXhlYywgY29kZUJsb2NrKTsKLSAgICBKU1ZhbHVlKiByZXN1bHQgPSBDVEk6OmV4ZWN1
dGUoY29kZUJsb2NrLT5jdGlDb2RlLCAmbV9yZWdpc3RlckZpbGUsIHIsIHNjb3BlQ2hhaW4tPmds
b2JhbERhdGEsIGV4Y2VwdGlvbik7CisgICAgICAgIENUSTo6Y29tcGlsZSh0aGlzLCBuZXdDYWxs
RnJhbWUsIGNvZGVCbG9jayk7CisgICAgSlNWYWx1ZSogcmVzdWx0ID0gQ1RJOjpleGVjdXRlKGNv
ZGVCbG9jay0+Y3RpQ29kZSwgJm1fcmVnaXN0ZXJGaWxlLCBuZXdDYWxsRnJhbWUsIHNjb3BlQ2hh
aW4tPmdsb2JhbERhdGEsIGV4Y2VwdGlvbik7CiAjZWxzZQotICAgIEpTVmFsdWUqIHJlc3VsdCA9
IHByaXZhdGVFeGVjdXRlKE5vcm1hbCwgJm1fcmVnaXN0ZXJGaWxlLCByLCBleGNlcHRpb24pOwor
ICAgIEpTVmFsdWUqIHJlc3VsdCA9IHByaXZhdGVFeGVjdXRlKE5vcm1hbCwgJm1fcmVnaXN0ZXJG
aWxlLCBuZXdDYWxsRnJhbWUsIGV4Y2VwdGlvbik7CiAjZW5kaWYKICAgICBtX3JlZW50cnlEZXB0
aC0tOwogCiAgICAgTUFDSElORV9TQU1QTElOR19wcml2YXRlRXhlY3V0ZVJldHVybmVkKCk7CiAK
ICAgICBpZiAoKnByb2ZpbGVyKQotICAgICAgICAoKnByb2ZpbGVyKS0+ZGlkRXhlY3V0ZShleGVj
LCBldmFsTm9kZS0+c291cmNlVVJMKCksIGV2YWxOb2RlLT5saW5lTm8oKSk7CisgICAgICAgICgq
cHJvZmlsZXIpLT5kaWRFeGVjdXRlKGNhbGxGcmFtZSwgZXZhbE5vZGUtPnNvdXJjZVVSTCgpLCBl
dmFsTm9kZS0+bGluZU5vKCkpOwogCiAgICAgbV9yZWdpc3RlckZpbGUuc2hyaW5rKG9sZEVuZCk7
CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotTkVWRVJfSU5MSU5FIHZvaWQgTWFjaGluZTo6ZGVi
dWcoRXhlY1N0YXRlKiBleGVjLCBSZWdpc3RlciogciwgRGVidWdIb29rSUQgZGVidWdIb29rSUQs
IGludCBmaXJzdExpbmUsIGludCBsYXN0TGluZSkKK05FVkVSX0lOTElORSB2b2lkIE1hY2hpbmU6
OmRlYnVnKENhbGxGcmFtZSogY2FsbEZyYW1lLCBEZWJ1Z0hvb2tJRCBkZWJ1Z0hvb2tJRCwgaW50
IGZpcnN0TGluZSwgaW50IGxhc3RMaW5lKQogewotICAgIERlYnVnZ2VyKiBkZWJ1Z2dlciA9IGV4
ZWMtPmR5bmFtaWNHbG9iYWxPYmplY3QoKS0+ZGVidWdnZXIoKTsKKyAgICBEZWJ1Z2dlciogZGVi
dWdnZXIgPSBjYWxsRnJhbWUtPmR5bmFtaWNHbG9iYWxPYmplY3QoKS0+ZGVidWdnZXIoKTsKICAg
ICBpZiAoIWRlYnVnZ2VyKQogICAgICAgICByZXR1cm47CiAKLSAgICBDb2RlQmxvY2sqIGNvZGVC
bG9jayA9IHRoaXMtPmNvZGVCbG9jayhyKTsKLSAgICBTY29wZUNoYWluTm9kZSogc2NvcGVDaGFp
biA9IHRoaXMtPnNjb3BlQ2hhaW4ocik7Ci0gICAgRGVidWdnZXJDYWxsRnJhbWUgZGVidWdnZXJD
YWxsRnJhbWUoZXhlYy0+ZHluYW1pY0dsb2JhbE9iamVjdCgpLCBjb2RlQmxvY2ssIHNjb3BlQ2hh
aW4sIHIsIDApOwotCiAgICAgc3dpdGNoIChkZWJ1Z0hvb2tJRCkgewogICAgICAgICBjYXNlIERp
ZEVudGVyQ2FsbEZyYW1lOgotICAgICAgICAgICAgZGVidWdnZXItPmNhbGxFdmVudChkZWJ1Z2dl
ckNhbGxGcmFtZSwgY29kZUJsb2NrLT5vd25lck5vZGUtPnNvdXJjZUlEKCksIGZpcnN0TGluZSk7
CisgICAgICAgICAgICBkZWJ1Z2dlci0+Y2FsbEV2ZW50KERlYnVnZ2VyQ2FsbEZyYW1lKGNhbGxG
cmFtZSwgMCksIGNhbGxGcmFtZS0+Y29kZUJsb2NrKCktPm93bmVyTm9kZS0+c291cmNlSUQoKSwg
Zmlyc3RMaW5lKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgY2FzZSBXaWxsTGVhdmVD
YWxsRnJhbWU6Ci0gICAgICAgICAgICBkZWJ1Z2dlci0+cmV0dXJuRXZlbnQoZGVidWdnZXJDYWxs
RnJhbWUsIGNvZGVCbG9jay0+b3duZXJOb2RlLT5zb3VyY2VJRCgpLCBsYXN0TGluZSk7CisgICAg
ICAgICAgICBkZWJ1Z2dlci0+cmV0dXJuRXZlbnQoRGVidWdnZXJDYWxsRnJhbWUoY2FsbEZyYW1l
LCAwKSwgY2FsbEZyYW1lLT5jb2RlQmxvY2soKS0+b3duZXJOb2RlLT5zb3VyY2VJRCgpLCBsYXN0
TGluZSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIGNhc2UgV2lsbEV4ZWN1dGVTdGF0
ZW1lbnQ6Ci0gICAgICAgICAgICBkZWJ1Z2dlci0+YXRTdGF0ZW1lbnQoZGVidWdnZXJDYWxsRnJh
bWUsIGNvZGVCbG9jay0+b3duZXJOb2RlLT5zb3VyY2VJRCgpLCBmaXJzdExpbmUpOworICAgICAg
ICAgICAgZGVidWdnZXItPmF0U3RhdGVtZW50KERlYnVnZ2VyQ2FsbEZyYW1lKGNhbGxGcmFtZSwg
MCksIGNhbGxGcmFtZS0+Y29kZUJsb2NrKCktPm93bmVyTm9kZS0+c291cmNlSUQoKSwgZmlyc3RM
aW5lKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgY2FzZSBXaWxsRXhlY3V0ZVByb2dy
YW06Ci0gICAgICAgICAgICBkZWJ1Z2dlci0+d2lsbEV4ZWN1dGVQcm9ncmFtKGRlYnVnZ2VyQ2Fs
bEZyYW1lLCBjb2RlQmxvY2stPm93bmVyTm9kZS0+c291cmNlSUQoKSwgZmlyc3RMaW5lKTsKKyAg
ICAgICAgICAgIGRlYnVnZ2VyLT53aWxsRXhlY3V0ZVByb2dyYW0oRGVidWdnZXJDYWxsRnJhbWUo
Y2FsbEZyYW1lLCAwKSwgY2FsbEZyYW1lLT5jb2RlQmxvY2soKS0+b3duZXJOb2RlLT5zb3VyY2VJ
RCgpLCBmaXJzdExpbmUpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICBjYXNlIERpZEV4
ZWN1dGVQcm9ncmFtOgotICAgICAgICAgICAgZGVidWdnZXItPmRpZEV4ZWN1dGVQcm9ncmFtKGRl
YnVnZ2VyQ2FsbEZyYW1lLCBjb2RlQmxvY2stPm93bmVyTm9kZS0+c291cmNlSUQoKSwgbGFzdExp
bmUpOworICAgICAgICAgICAgZGVidWdnZXItPmRpZEV4ZWN1dGVQcm9ncmFtKERlYnVnZ2VyQ2Fs
bEZyYW1lKGNhbGxGcmFtZSwgMCksIGNhbGxGcmFtZS0+Y29kZUJsb2NrKCktPm93bmVyTm9kZS0+
c291cmNlSUQoKSwgbGFzdExpbmUpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICBjYXNl
IERpZFJlYWNoQnJlYWtwb2ludDoKLSAgICAgICAgICAgIGRlYnVnZ2VyLT5kaWRSZWFjaEJyZWFr
cG9pbnQoZGVidWdnZXJDYWxsRnJhbWUsIGNvZGVCbG9jay0+b3duZXJOb2RlLT5zb3VyY2VJRCgp
LCBsYXN0TGluZSk7CisgICAgICAgICAgICBkZWJ1Z2dlci0+ZGlkUmVhY2hCcmVha3BvaW50KERl
YnVnZ2VyQ2FsbEZyYW1lKGNhbGxGcmFtZSwgMCksIGNhbGxGcmFtZS0+Y29kZUJsb2NrKCktPm93
bmVyTm9kZS0+c291cmNlSUQoKSwgbGFzdExpbmUpOwogICAgICAgICAgICAgcmV0dXJuOwogICAg
IH0KIH0KQEAgLTEyMTIsMjEgKzExOTcsMjEgQEAgQUxXQVlTX0lOTElORSBKU1ZhbHVlKiBNYWNo
aW5lOjpjaGVja1RpbQogICAgIHJldHVybiAwOwogfQogCi1ORVZFUl9JTkxJTkUgU2NvcGVDaGFp
bk5vZGUqIE1hY2hpbmU6OmNyZWF0ZUV4Y2VwdGlvblNjb3BlKEV4ZWNTdGF0ZSogZXhlYywgY29u
c3QgSW5zdHJ1Y3Rpb24qIHZQQywgUmVnaXN0ZXIqIHIpCitORVZFUl9JTkxJTkUgU2NvcGVDaGFp
bk5vZGUqIE1hY2hpbmU6OmNyZWF0ZUV4Y2VwdGlvblNjb3BlKENhbGxGcmFtZSogY2FsbEZyYW1l
LCBjb25zdCBJbnN0cnVjdGlvbiogdlBDKQogewogICAgIGludCBkc3QgPSAoKyt2UEMpLT51Lm9w
ZXJhbmQ7Ci0gICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSB0aGlzLT5jb2RlQmxvY2socik7Cisg
ICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBjYWxsRnJhbWUtPmNvZGVCbG9jaygpOwogICAgIElk
ZW50aWZpZXImIHByb3BlcnR5ID0gY29kZUJsb2NrLT5pZGVudGlmaWVyc1soKyt2UEMpLT51Lm9w
ZXJhbmRdOwotICAgIEpTVmFsdWUqIHZhbHVlID0gclsoKyt2UEMpLT51Lm9wZXJhbmRdLmpzVmFs
dWUoZXhlYyk7Ci0gICAgSlNPYmplY3QqIHNjb3BlID0gbmV3IChleGVjKSBKU1N0YXRpY1Njb3Bl
T2JqZWN0KGV4ZWMsIHByb3BlcnR5LCB2YWx1ZSwgRG9udERlbGV0ZSk7Ci0gICAgcltkc3RdID0g
c2NvcGU7CisgICAgSlNWYWx1ZSogdmFsdWUgPSBjYWxsRnJhbWUtPnJlZ2lzdGVycygpWygrK3ZQ
QyktPnUub3BlcmFuZF0uanNWYWx1ZShjYWxsRnJhbWUpOworICAgIEpTT2JqZWN0KiBzY29wZSA9
IG5ldyAoY2FsbEZyYW1lKSBKU1N0YXRpY1Njb3BlT2JqZWN0KGNhbGxGcmFtZSwgcHJvcGVydHks
IHZhbHVlLCBEb250RGVsZXRlKTsKKyAgICBjYWxsRnJhbWUtPnJlZ2lzdGVycygpW2RzdF0gPSBz
Y29wZTsKIAotICAgIHJldHVybiBzY29wZUNoYWluKHIpLT5wdXNoKHNjb3BlKTsKKyAgICByZXR1
cm4gY2FsbEZyYW1lLT5zY29wZUNoYWluKCktPnB1c2goc2NvcGUpOwogfQogCi1zdGF0aWMgU3Ry
dWN0dXJlSURDaGFpbiogY2FjaGVQcm90b3R5cGVDaGFpbihFeGVjU3RhdGUqIGV4ZWMsIFN0cnVj
dHVyZUlEKiBzdHJ1Y3R1cmVJRCkKK3N0YXRpYyBTdHJ1Y3R1cmVJRENoYWluKiBjYWNoZVByb3Rv
dHlwZUNoYWluKENhbGxGcmFtZSogY2FsbEZyYW1lLCBTdHJ1Y3R1cmVJRCogc3RydWN0dXJlSUQp
CiB7Ci0gICAgSlNWYWx1ZSogcHJvdG90eXBlID0gc3RydWN0dXJlSUQtPnByb3RvdHlwZUZvckxv
b2t1cChleGVjKTsKKyAgICBKU1ZhbHVlKiBwcm90b3R5cGUgPSBzdHJ1Y3R1cmVJRC0+cHJvdG90
eXBlRm9yTG9va3VwKGNhbGxGcmFtZSk7CiAgICAgaWYgKEpTSW1tZWRpYXRlOjppc0ltbWVkaWF0
ZShwcm90b3R5cGUpKQogICAgICAgICByZXR1cm4gMDsKICAgICBSZWZQdHI8U3RydWN0dXJlSURD
aGFpbj4gY2hhaW4gPSBTdHJ1Y3R1cmVJRENoYWluOjpjcmVhdGUoc3RhdGljX2Nhc3Q8SlNPYmpl
Y3QqPihwcm90b3R5cGUpLT5zdHJ1Y3R1cmVJRCgpKTsKQEAgLTEyMzQsNyArMTIxOSw3IEBAIHN0
YXRpYyBTdHJ1Y3R1cmVJRENoYWluKiBjYWNoZVByb3RvdHlwZUMKICAgICByZXR1cm4gc3RydWN0
dXJlSUQtPmNhY2hlZFByb3RvdHlwZUNoYWluKCk7CiB9CiAKLU5FVkVSX0lOTElORSB2b2lkIE1h
Y2hpbmU6OnRyeUNhY2hlUHV0QnlJRChFeGVjU3RhdGUqIGV4ZWMsIENvZGVCbG9jayogY29kZUJs
b2NrLCBJbnN0cnVjdGlvbiogdlBDLCBKU1ZhbHVlKiBiYXNlVmFsdWUsIGNvbnN0IFB1dFByb3Bl
cnR5U2xvdCYgc2xvdCkKK05FVkVSX0lOTElORSB2b2lkIE1hY2hpbmU6OnRyeUNhY2hlUHV0QnlJ
RChDYWxsRnJhbWUqIGNhbGxGcmFtZSwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEluc3RydWN0aW9u
KiB2UEMsIEpTVmFsdWUqIGJhc2VWYWx1ZSwgY29uc3QgUHV0UHJvcGVydHlTbG90JiBzbG90KQog
ewogICAgIC8vIFJlY3Vyc2l2ZSBpbnZvY2F0aW9uIG1heSBhbHJlYWR5IGhhdmUgc3BlY2lhbGl6
ZWQgdGhpcyBpbnN0cnVjdGlvbi4KICAgICBpZiAodlBDWzBdLnUub3Bjb2RlICE9IGdldE9wY29k
ZShvcF9wdXRfYnlfaWQpKQpAQCAtMTI4Niw3ICsxMjcxLDcgQEAgTkVWRVJfSU5MSU5FIHZvaWQg
TWFjaGluZTo6dHJ5Q2FjaGVQdXRCeQogICAgICAgICB2UENbNV0gPSBzdHJ1Y3R1cmVJRDsKICAg
ICAgICAgU3RydWN0dXJlSURDaGFpbiogY2hhaW4gPSBzdHJ1Y3R1cmVJRC0+Y2FjaGVkUHJvdG90
eXBlQ2hhaW4oKTsKICAgICAgICAgaWYgKCFjaGFpbikgewotICAgICAgICAgICAgY2hhaW4gPSBj
YWNoZVByb3RvdHlwZUNoYWluKGV4ZWMsIHN0cnVjdHVyZUlEKTsKKyAgICAgICAgICAgIGNoYWlu
ID0gY2FjaGVQcm90b3R5cGVDaGFpbihjYWxsRnJhbWUsIHN0cnVjdHVyZUlEKTsKICAgICAgICAg
ICAgIGlmICghY2hhaW4pIHsKICAgICAgICAgICAgICAgICAvLyBUaGlzIGhhcHBlbnMgaWYgc29t
ZW9uZSBoYXMgbWFudWFsbHkgaW5zZXJ0ZWQgbnVsbCBpbnRvIHRoZSBwcm90b3R5cGUgY2hhaW4K
ICAgICAgICAgICAgICAgICB2UENbMF0gPSBnZXRPcGNvZGUob3BfcHV0X2J5X2lkX2dlbmVyaWMp
OwpAQCAtMTMxMSw3ICsxMjk2LDcgQEAgTkVWRVJfSU5MSU5FIHZvaWQgTWFjaGluZTo6dW5jYWNo
ZVB1dEJ5SQogICAgIHZQQ1s0XSA9IDA7CiB9CiAKLU5FVkVSX0lOTElORSB2b2lkIE1hY2hpbmU6
OnRyeUNhY2hlR2V0QnlJRChFeGVjU3RhdGUqIGV4ZWMsIENvZGVCbG9jayogY29kZUJsb2NrLCBJ
bnN0cnVjdGlvbiogdlBDLCBKU1ZhbHVlKiBiYXNlVmFsdWUsIGNvbnN0IElkZW50aWZpZXImIHBy
b3BlcnR5TmFtZSwgY29uc3QgUHJvcGVydHlTbG90JiBzbG90KQorTkVWRVJfSU5MSU5FIHZvaWQg
TWFjaGluZTo6dHJ5Q2FjaGVHZXRCeUlEKENhbGxGcmFtZSogY2FsbEZyYW1lLCBDb2RlQmxvY2sq
IGNvZGVCbG9jaywgSW5zdHJ1Y3Rpb24qIHZQQywgSlNWYWx1ZSogYmFzZVZhbHVlLCBjb25zdCBJ
ZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIGNvbnN0IFByb3BlcnR5U2xvdCYgc2xvdCkKIHsKICAg
ICAvLyBSZWN1cnNpdmUgaW52b2NhdGlvbiBtYXkgYWxyZWFkeSBoYXZlIHNwZWNpYWxpemVkIHRo
aXMgaW5zdHJ1Y3Rpb24uCiAgICAgaWYgKHZQQ1swXS51Lm9wY29kZSAhPSBnZXRPcGNvZGUob3Bf
Z2V0X2J5X2lkKSkKQEAgLTEzMjMsMTIgKzEzMDgsMTIgQEAgTkVWRVJfSU5MSU5FIHZvaWQgTWFj
aGluZTo6dHJ5Q2FjaGVHZXRCeQogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgaWYgKGlz
SlNBcnJheShiYXNlVmFsdWUpICYmIHByb3BlcnR5TmFtZSA9PSBleGVjLT5wcm9wZXJ0eU5hbWVz
KCkubGVuZ3RoKSB7CisgICAgaWYgKGlzSlNBcnJheShiYXNlVmFsdWUpICYmIHByb3BlcnR5TmFt
ZSA9PSBjYWxsRnJhbWUtPnByb3BlcnR5TmFtZXMoKS5sZW5ndGgpIHsKICAgICAgICAgdlBDWzBd
ID0gZ2V0T3Bjb2RlKG9wX2dldF9hcnJheV9sZW5ndGgpOwogICAgICAgICByZXR1cm47CiAgICAg
fQogCi0gICAgaWYgKGlzSlNTdHJpbmcoYmFzZVZhbHVlKSAmJiBwcm9wZXJ0eU5hbWUgPT0gZXhl
Yy0+cHJvcGVydHlOYW1lcygpLmxlbmd0aCkgeworICAgIGlmIChpc0pTU3RyaW5nKGJhc2VWYWx1
ZSkgJiYgcHJvcGVydHlOYW1lID09IGNhbGxGcmFtZS0+cHJvcGVydHlOYW1lcygpLmxlbmd0aCkg
ewogICAgICAgICB2UENbMF0gPSBnZXRPcGNvZGUob3BfZ2V0X3N0cmluZ19sZW5ndGgpOwogICAg
ICAgICByZXR1cm47CiAgICAgfQpAQCAtMTM3MCw3ICsxMzU1LDcgQEAgTkVWRVJfSU5MSU5FIHZv
aWQgTWFjaGluZTo6dHJ5Q2FjaGVHZXRCeQogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAg
aWYgKHNsb3Quc2xvdEJhc2UoKSA9PSBzdHJ1Y3R1cmVJRC0+cHJvdG90eXBlRm9yTG9va3VwKGV4
ZWMpKSB7CisgICAgaWYgKHNsb3Quc2xvdEJhc2UoKSA9PSBzdHJ1Y3R1cmVJRC0+cHJvdG90eXBl
Rm9yTG9va3VwKGNhbGxGcmFtZSkpIHsKICAgICAgICAgQVNTRVJUKHNsb3Quc2xvdEJhc2UoKS0+
aXNPYmplY3QoKSk7CiAKICAgICAgICAgSlNPYmplY3QqIGJhc2VPYmplY3QgPSBzdGF0aWNfY2Fz
dDxKU09iamVjdCo+KHNsb3Quc2xvdEJhc2UoKSk7CkBAIC0xMzk0LDcgKzEzNzksNyBAQCBORVZF
Ul9JTkxJTkUgdm9pZCBNYWNoaW5lOjp0cnlDYWNoZUdldEJ5CiAgICAgc2l6ZV90IGNvdW50ID0g
MDsKICAgICBKU09iamVjdCogbyA9IHN0YXRpY19jYXN0PEpTT2JqZWN0Kj4oYmFzZVZhbHVlKTsK
ICAgICB3aGlsZSAoc2xvdC5zbG90QmFzZSgpICE9IG8pIHsKLSAgICAgICAgSlNWYWx1ZSogdiA9
IG8tPnN0cnVjdHVyZUlEKCktPnByb3RvdHlwZUZvckxvb2t1cChleGVjKTsKKyAgICAgICAgSlNW
YWx1ZSogdiA9IG8tPnN0cnVjdHVyZUlEKCktPnByb3RvdHlwZUZvckxvb2t1cChjYWxsRnJhbWUp
OwogCiAgICAgICAgIC8vIElmIHdlIGRpZG4ndCBmaW5kIGJhc2UgaW4gYmFzZVZhbHVlJ3MgcHJv
dG90eXBlIGNoYWluLCB0aGVuIGJhc2VWYWx1ZQogICAgICAgICAvLyBtdXN0IGJlIGEgcHJveHkg
Zm9yIGFub3RoZXIgb2JqZWN0LgpAQCAtMTQxOCw3ICsxNDAzLDcgQEAgTkVWRVJfSU5MSU5FIHZv
aWQgTWFjaGluZTo6dHJ5Q2FjaGVHZXRCeQogCiAgICAgU3RydWN0dXJlSURDaGFpbiogY2hhaW4g
PSBzdHJ1Y3R1cmVJRC0+Y2FjaGVkUHJvdG90eXBlQ2hhaW4oKTsKICAgICBpZiAoIWNoYWluKQot
ICAgICAgICBjaGFpbiA9IGNhY2hlUHJvdG90eXBlQ2hhaW4oZXhlYywgc3RydWN0dXJlSUQpOwor
ICAgICAgICBjaGFpbiA9IGNhY2hlUHJvdG90eXBlQ2hhaW4oY2FsbEZyYW1lLCBzdHJ1Y3R1cmVJ
RCk7CiAgICAgQVNTRVJUKGNoYWluKTsKIAogICAgIHZQQ1swXSA9IGdldE9wY29kZShvcF9nZXRf
YnlfaWRfY2hhaW4pOwpAQCAtMTQzNiw3ICsxNDIxLDcgQEAgTkVWRVJfSU5MSU5FIHZvaWQgTWFj
aGluZTo6dW5jYWNoZUdldEJ5SQogICAgIHZQQ1s0XSA9IDA7CiB9CiAKLUpTVmFsdWUqIE1hY2hp
bmU6OnByaXZhdGVFeGVjdXRlKEV4ZWN1dGlvbkZsYWcgZmxhZywgUmVnaXN0ZXJGaWxlKiByZWdp
c3RlckZpbGUsIFJlZ2lzdGVyKiByLCBKU1ZhbHVlKiogZXhjZXB0aW9uKQorSlNWYWx1ZSogTWFj
aGluZTo6cHJpdmF0ZUV4ZWN1dGUoRXhlY3V0aW9uRmxhZyBmbGFnLCBSZWdpc3RlckZpbGUqIHJl
Z2lzdGVyRmlsZSwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIEpTVmFsdWUqKiBleGNlcHRpb24pCiB7
CiAgICAgLy8gT25lLXRpbWUgaW5pdGlhbGl6YXRpb24gb2Ygb3VyIGFkZHJlc3MgdGFibGVzLiBX
ZSBoYXZlIHRvIHB1dCB0aGlzIGNvZGUKICAgICAvLyBoZXJlIGJlY2F1c2Ugb3VyIGxhYmVscyBh
cmUgb25seSBpbiBzY29wZSBpbnNpZGUgdGhpcyBmdW5jdGlvbi4KQEAgLTE0NjEsMTMgKzE0NDYs
MTEgQEAgSlNWYWx1ZSogTWFjaGluZTo6cHJpdmF0ZUV4ZWN1dGUoRXhlY3V0aQogICAgIEFTU0VS
VF9OT1RfUkVBQ0hFRCgpOwogI2VuZGlmCiAKLSNkZWZpbmUgZXhlYyBDYWxsRnJhbWU6OmNyZWF0
ZShyKQotCi0gICAgSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhID0gJmV4ZWMtPmdsb2JhbERhdGEo
KTsKKyAgICBKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEgPSAmY2FsbEZyYW1lLT5nbG9iYWxEYXRh
KCk7CiAgICAgSlNWYWx1ZSogZXhjZXB0aW9uVmFsdWUgPSAwOwogICAgIEluc3RydWN0aW9uKiBo
YW5kbGVyVlBDID0gMDsKIAotICAgIEluc3RydWN0aW9uKiB2UEMgPSB0aGlzLT5jb2RlQmxvY2so
ciktPmluc3RydWN0aW9ucy5iZWdpbigpOworICAgIEluc3RydWN0aW9uKiB2UEMgPSBjYWxsRnJh
bWUtPmNvZGVCbG9jaygpLT5pbnN0cnVjdGlvbnMuYmVnaW4oKTsKICAgICBQcm9maWxlcioqIGVu
YWJsZWRQcm9maWxlclJlZmVyZW5jZSA9IFByb2ZpbGVyOjplbmFibGVkUHJvZmlsZXJSZWZlcmVu
Y2UoKTsKICAgICB1bnNpZ25lZCB0aWNrQ291bnQgPSBtX3RpY2tzVW50aWxOZXh0VGltZW91dENo
ZWNrICsgMTsKIApAQCAtMTQ4NSwxMyArMTQ2OCwxMyBAQCBKU1ZhbHVlKiBNYWNoaW5lOjpwcml2
YXRlRXhlY3V0ZShFeGVjdXRpCiAKICNkZWZpbmUgQ0hFQ0tfRk9SX1RJTUVPVVQoKSBcCiAgICAg
aWYgKCEtLXRpY2tDb3VudCkgeyBcCi0gICAgICAgIGlmICgoZXhjZXB0aW9uVmFsdWUgPSBjaGVj
a1RpbWVvdXQoZXhlYy0+ZHluYW1pY0dsb2JhbE9iamVjdCgpKSkpIFwKKyAgICAgICAgaWYgKChl
eGNlcHRpb25WYWx1ZSA9IGNoZWNrVGltZW91dChjYWxsRnJhbWUtPmR5bmFtaWNHbG9iYWxPYmpl
Y3QoKSkpKSBcCiAgICAgICAgICAgICBnb3RvIHZtX3Rocm93OyBcCiAgICAgICAgIHRpY2tDb3Vu
dCA9IG1fdGlja3NVbnRpbE5leHRUaW1lb3V0Q2hlY2s7IFwKICAgICB9CiAKICNpZiBIQVZFKENP
TVBVVEVEX0dPVE8pCi0gICAgI2RlZmluZSBORVhUX09QQ09ERSBNQUNISU5FX1NBTVBMSU5HX3Nh
bXBsZSh0aGlzLT5jb2RlQmxvY2sociksIHZQQyk7IGdvdG8gKnZQQy0+dS5vcGNvZGUKKyAgICAj
ZGVmaW5lIE5FWFRfT1BDT0RFIE1BQ0hJTkVfU0FNUExJTkdfc2FtcGxlKGNhbGxGcmFtZS0+Y29k
ZUJsb2NrKCksIHZQQyk7IGdvdG8gKnZQQy0+dS5vcGNvZGUKICNpZiBEVU1QX09QQ09ERV9TVEFU
UwogICAgICNkZWZpbmUgQkVHSU5fT1BDT0RFKG9wY29kZSkgb3Bjb2RlOiBPcGNvZGVTdGF0czo6
cmVjb3JkSW5zdHJ1Y3Rpb24ob3Bjb2RlKTsKICNlbHNlCkBAIC0xNDk5LDcgKzE0ODIsNyBAQCBK
U1ZhbHVlKiBNYWNoaW5lOjpwcml2YXRlRXhlY3V0ZShFeGVjdXRpCiAjZW5kaWYKICAgICBORVhU
X09QQ09ERTsKICNlbHNlCi0gICAgI2RlZmluZSBORVhUX09QQ09ERSBNQUNISU5FX1NBTVBMSU5H
X3NhbXBsZSh0aGlzLT5jb2RlQmxvY2sociksIHZQQyk7IGNvbnRpbnVlCisgICAgI2RlZmluZSBO
RVhUX09QQ09ERSBNQUNISU5FX1NBTVBMSU5HX3NhbXBsZShjYWxsRnJhbWUtPmNvZGVCbG9jaygp
LCB2UEMpOyBjb250aW51ZQogI2lmIERVTVBfT1BDT0RFX1NUQVRTCiAgICAgI2RlZmluZSBCRUdJ
Tl9PUENPREUob3Bjb2RlKSBjYXNlIG9wY29kZTogT3Bjb2RlU3RhdHM6OnJlY29yZEluc3RydWN0
aW9uKG9wY29kZSk7CiAjZWxzZQpAQCAtMTUxNiw3ICsxNDk5LDcgQEAgSlNWYWx1ZSogTWFjaGlu
ZTo6cHJpdmF0ZUV4ZWN1dGUoRXhlY3V0aQogICAgICAgICAgICBjb25zdHJ1Y3RvciwgYW5kIHB1
dHMgdGhlIHJlc3VsdCBpbiByZWdpc3RlciBkc3QuCiAgICAgICAgICovCiAgICAgICAgIGludCBk
c3QgPSAoKyt2UEMpLT51Lm9wZXJhbmQ7Ci0gICAgICAgIHJbZHN0XSA9IGNvbnN0cnVjdEVtcHR5
T2JqZWN0KGV4ZWMpOworICAgICAgICBjYWxsRnJhbWUtPnJlZ2lzdGVycygpW2RzdF0gPSBjb25z
dHJ1Y3RFbXB0eU9iamVjdChjYWxsRnJhbWUpOwogCiAgICAgICAgICsrdlBDOwogICAgICAgICBO
RVhUX09QQ09ERTsKQEAgLTE1MzIsOCArMTUxNSw4IEBAIEpTVmFsdWUqIE1hY2hpbmU6OnByaXZh
dGVFeGVjdXRlKEV4ZWN1dGkKICAgICAgICAgaW50IGRzdCA9ICgrK3ZQQyktPnUub3BlcmFuZDsK
ICAgICAgICAgaW50IGZpcnN0QXJnID0gKCsrdlBDKS0+dS5vcGVyYW5kOwogICAgICAgICBpbnQg
YXJnQ291bnQgPSAoKyt2UEMpLT51Lm9wZXJhbmQ7Ci0gICAgICAgIEFyZ0xpc3QgYXJncyhyICsg
Zmlyc3RBcmcsIGFyZ0NvdW50KTsKLSAgICAgICAgcltkc3RdID0gY29uc3RydWN0QXJyYXkoZXhl
YywgYXJncyk7CisgICAgICAgIEFyZ0xpc3QgYXJncyhjYWxsRnJhbWUtPnJlZ2lzdGVycygpICsg
Zmlyc3RBcmcsIGFyZ0NvdW50KTsKKyAgICAgICAgY2FsbEZyYW1lLT5yZWdpc3RlcnMoKVtkc3Rd
ID0gY29uc3RydWN0QXJyYXkoY2FsbEZyYW1lLCBhcmdzKTsKIAogICAgICAgICArK3ZQQzsKICAg
ICAgICAgTkVYVF9PUENPREU7CkBAIC0xNTQ3LDcgKzE1MzAsNyBAQCBKU1ZhbHVlKiBNYWNoaW5l
Ojpwcml2YXRlRXhlY3V0ZShFeGVjdXRpCiAgICAgICAgICovCiAgICAgICAgIGludCBkc3QgPSAo
Kyt2UEMpLT51Lm9wZXJhbmQ7CiAgICAgICAgIGludCByZWdFeHAgPSAoKyt2UEMpLT51Lm9wZXJh
bmQ7Ci0gICAgICAgIHJbZHN0XSA9IG5ldyAoZ2xvYmFsRGF0YSkgUmVnRXhwT2JqZWN0KHNjb3Bl
Q2hhaW4ociktPmdsb2JhbE9iamVjdCgpLT5yZWdFeHBTdHJ1Y3R1cmUoKSwgY29kZUJsb2NrKHIp
LT5yZWdleHBzW3JlZ0V4cF0pOworICAgICAgICBjYWxsRnJhbWUtPnJlZ2lzdGVycygpW2RzdF0g
PSBuZXcgKGdsb2JhbERhdGEpIFJlZ0V4cE9iamVjdChjYWxsRnJhbWUtPnNjb3BlQ2hhaW4oKS0+
Z2xvYmFsT2JqZWN0KCktPnJlZ0V4cFN0cnVjdHVyZSgpLCBjYWxsRnJhbWUtPmNvZGVCbG9jaygp
LT5yZWdleHBzW3JlZ0V4cF0pOwogCiAgICAgICAgICsrdlBDOwogICAgICAgICBORVhUX09QQ09E
RTsKQEAgLTE1NTksNyArMTU0Miw3IEBAIEpTVmFsdWUqIE1hY2hpbmU6OnByaXZhdGVFeGVjdXRl
KEV4ZWN1dGkKICAgICAgICAgKi8KICAgICAgICAgaW50IGRzdCA9ICgrK3ZQQyktPnUub3BlcmFu
ZDsKICAgICAgICAgaW50IHNyYyA9ICgrK3ZQQyktPnUub3BlcmFuZDsKLSAgICAgICAgcltkc3Rd
ID0gcltzcmNdOworICAgICAgICBjYWxsRnJhbWUtPnJlZ2lzdGVycygpW2RzdF0gPSBjYWxsRnJh
bWUtPnJlZ2lzdGVycygpW3NyY107CiAKICAgICAgICAgKyt2UEM7CiAgICAgICAgIE5FWFRfT1BD
T0RFOwpAQCAtMTU3MiwxNCArMTU1NSwxNCBAQCBKU1ZhbHVlKiBNYWNoaW5lOjpwcml2YXRlRXhl
Y3V0ZShFeGVjdXRpCiAgICAgICAgICAgIGFzIGEgYm9vbGVhbiBpbiByZWdpc3RlciBkc3QuCiAg
ICAgICAgICovCiAgICAgICAgIGludCBkc3QgPSAoKyt2UEMpLT51Lm9wZXJhbmQ7Ci0gICAgICAg
IEpTVmFsdWUqIHNyYzEgPSByWygrK3ZQQyktPnUub3BlcmFuZF0uanNWYWx1ZShleGVjKTsKLSAg
ICAgICAgSlNWYWx1ZSogc3JjMiA9IHJbKCsrdlBDKS0+dS5vcGVyYW5kXS5qc1ZhbHVlKGV4ZWMp
OworICAgICAgICBKU1ZhbHVlKiBzcmMxID0gY2FsbEZyYW1lLT5yZWdpc3RlcnMoKVsoKyt2UEMp
LT51Lm9wZXJhbmRdLmpzVmFsdWUoY2FsbEZyYW1lKTsKKyAgICAgICAgSlNWYWx1ZSogc3JjMiA9
IGNhbGxGcmFtZS0+cmVnaXN0ZXJzKClbKCsrdlBDKS0+dS5vcGVyYW5kXS5qc1ZhbHVlKGNhbGxG
cmFtZSk7CiAgICAgICAgIGlmIChKU0ltbWVkaWF0ZTo6YXJlQm90aEltbWVkaWF0ZU51bWJlcnMo
c3JjMSwgc3JjMikpCi0gICAgICAgICAgICByW2RzdF0gPSBqc0Jvb2xlYW4ocmVpbnRlcnByZXRf
Y2FzdDxpbnRwdHJfdD4oc3JjMSkgPT0gcmVpbnRlcnByZXRfY2FzdDxpbnRwdHJfdD4oc3JjMikp
OworICAgICAgICAgICAgY2FsbEZyYW1lLT5yZWdpc3RlcnMoKVtkc3RdID0ganNCb29sZWFuKHJl
aW50ZXJwcmV0X2Nhc3Q8aW50cHRyX3Q+KHNyYzEpID09IHJlaW50ZXJwcmV0X2Nhc3Q8aW50cHRy
X3Q+KHNyYzIpKTsKICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBKU1ZhbHVlKiByZXN1bHQg
PSBqc0Jvb2xlYW4oZXF1YWxTbG93Q2FzZShleGVjLCBzcmMxLCBzcmMyKSk7CisgICAgICAgICAg
ICBKU1ZhbHVlKiByZXN1bHQgPSBqc0Jvb2xlYW4oZXF1YWxTbG93Q2FzZShjYWxsRnJhbWUsIHNy
YzEsIHNyYzIpKTsKICAgICAgICAgICAgIFZNX0NIRUNLX0VYQ0VQVElPTigpOwotICAgICAgICAg
ICAgcltkc3RdID0gcmVzdWx0OworICAgICAgICAgICAgY2FsbEZyYW1lLT5yZWdpc3RlcnMoKVtk
c3RdID0gcmVzdWx0OwogICAgICAgICB9CiAKICAgICAgICAgKyt2UEM7CkBAIC0xNTkyLDE1ICsx
NTc1LDE1IEBAIEpTVmFsdWUqIE1hY2hpbmU6OnByaXZhdGVFeGVjdXRlKEV4ZWN1dGkKICAgICAg
ICAgICAgb3BlcmF0b3IsIGFuZCBwdXRzIHRoZSByZXN1bHQgYXMgYSBib29sZWFuIGluIHJlZ2lz
dGVyIGRzdC4KICAgICAgICAgKi8KICAgICAgICAgaW50IGRzdCA9ICgrK3ZQQyktPnUub3BlcmFu
ZDsKLSAgICAgICAgSlNWYWx1ZSogc3JjID0gclsoKyt2UEMpLT51Lm9wZXJhbmRdLmpzVmFsdWUo
ZXhlYyk7CisgICAgICAgIEpTVmFsdWUqIHNyYyA9IGNhbGxGcmFtZS0+cmVnaXN0ZXJzKClbKCsr
dlBDKS0+dS5vcGVyYW5kXS5qc1ZhbHVlKGNhbGxGcmFtZSk7CiAKICAgICAgICAgaWYgKHNyYy0+
aXNVbmRlZmluZWRPck51bGwoKSkgewotICAgICAgICAgICAgcltkc3RdID0ganNCb29sZWFuKHRy
dWUpOworICAgICAgICAgICAgY2FsbEZyYW1lLT5yZWdpc3RlcnMoKVtkc3RdID0ganNCb29sZWFu
KHRydWUpOwogICAgICAgICAgICAgKyt2UEM7CiAgICAgICAgICAgICBORVhUX09QQ09ERTsKICAg
ICAgICAgfQogICAgICAgICAKLSAgICAgICAgcltkc3RdID0ganNCb29sZWFuKCFKU0ltbWVkaWF0
ZTo6aXNJbW1lZGlhdGUoc3JjKSAmJiBzcmMtPmFzQ2VsbCgpLT5zdHJ1Y3R1cmVJRCgpLT50eXBl
SW5mbygpLm1hc3F1ZXJhZGVzQXNVbmRlZmluZWQoKSk7CisgICAgICAgIGNhbGxGcmFtZS0+cmVn
aXN0ZXJzKClbZHN0XSA9IGpzQm9vbGVhbighSlNJbW1lZGlhdGU6OmlzSW1tZWRpYXRlKHNyYykg
JiYgc3JjLT5hc0NlbGwoKS0+c3RydWN0dXJlSUQoKS0+dHlwZUluZm8oKS5tYXNxdWVyYWRlc0Fz
VW5kZWZpbmVkKCkpOwogICAgICAgICArK3ZQQzsKICAgICAgICAgTkVYVF9PUENPREU7CiAgICAg
fQpAQCAtMTYxMiwxNCArMTU5NSwxNCBAQCBKU1ZhbHVlKiBNYWNoaW5lOjpwcml2YXRlRXhlY3V0
ZShFeGVjdXRpCiAgICAgICAgICAgIHJlc3VsdCBhcyBhIGJvb2xlYW4gaW4gcmVnaXN0ZXIgZHN0
LgogICAgICAgICAqLwogICAgICAgICBpbnQgZHN0ID0gKCsrdlBDKS0+dS5vcGVyYW5kOwotICAg
ICAgICBKU1ZhbHVlKiBzcmMxID0gclsoKyt2UEMpLT51Lm9wZXJhbmRdLmpzVmFsdWUoZXhlYyk7
Ci0gICAgICAgIEpTVmFsdWUqIHNyYzIgPSByWygrK3ZQQyktPnUub3BlcmFuZF0uanNWYWx1ZShl
eGVjKTsKKyAgICAgICAgSlNWYWx1ZSogc3JjMSA9IGNhbGxGcmFtZS0+cmVnaXN0ZXJzKClbKCsr
dlBDKS0+dS5vcGVyYW5kXS5qc1ZhbHVlKGNhbGxGcmFtZSk7CisgICAgICAgIEpTVmFsdWUqIHNy
YzIgPSBjYWxsRnJhbWUtPnJlZ2lzdGVycygpWygrK3ZQQyktPnUub3BlcmFuZF0uanNWYWx1ZShj
YWxsRnJhbWUpOwogICAgICAgICBpZiAoSlNJbW1lZGlhdGU6OmFyZUJvdGhJbW1lZGlhdGVOdW1i
ZXJzKHNyYzEsIHNyYzIpKQotICAgICAgICAgICAgcltkc3RdID0ganNCb29sZWFuKHNyYzEgIT0g
c3JjMik7CisgICAgICAgICAgICBjYWxsRnJhbWUtPnJlZ2lzdGVycygpW2RzdF0gPSBqc0Jvb2xl
YW4oc3JjMSAhPSBzcmMyKTsKICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBKU1ZhbHVlKiBy
ZXN1bHQgPSBqc0Jvb2xlYW4oIWVxdWFsU2xvd0Nhc2UoZXhlYywgc3JjMSwgc3JjMikpOworICAg
ICAgICAgICAgSlNWYWx1ZSogcmVzdWx0ID0ganNCb29sZWFuKCFlcXVhbFNsb3dDYXNlKGNhbGxG
cmFtZSwgc3JjMSwgc3JjMikpOwogICAgICAgICAgICAgVk1fQ0hFQ0tfRVhDRVBUSU9OKCk7Ci0g
ICAgICAgICAgICByW2RzdF0gPSByZXN1bHQ7CisgICAgICAgICAgICBjYWxsRnJhbWUtPnJlZ2lz
dGVycygpW2RzdF0gPSByZXN1bHQ7CiAgICAgICAgIH0KIAogICAgICAgICArK3ZQQzsKQEAgLTE2
MzIsMTUgKzE2MTUsMTUgQEAgSlNWYWx1ZSogTWFjaGluZTo6cHJpdmF0ZUV4ZWN1dGUoRXhlY3V0
aQogICAgICAgICAgICBvcGVyYXRvciwgYW5kIHB1dHMgdGhlIHJlc3VsdCBhcyBhIGJvb2xlYW4g
aW4gcmVnaXN0ZXIgZHN0LgogICAgICAgICAqLwogICAgICAgICBpbnQgZHN0ID0gKCsrdlBDKS0+
dS5vcGVyYW5kOwotICAgICAgICBKU1ZhbHVlKiBzcmMgPSByWygrK3ZQQyktPnUub3BlcmFuZF0u
anNWYWx1ZShleGVjKTsKKyAgICAgICAgSlNWYWx1ZSogc3JjID0gY2FsbEZyYW1lLT5yZWdpc3Rl
cnMoKVsoKyt2UEMpLT51Lm9wZXJhbmRdLmpzVmFsdWUoY2FsbEZyYW1lKTsKIAogICAgICAgICBp
ZiAoc3JjLT5pc1VuZGVmaW5lZE9yTnVsbCgpKSB7Ci0gICAgICAgICAgICByW2RzdF0gPSBqc0Jv
b2xlYW4oZmFsc2UpOworICAgICAgICAgICAgY2FsbEZyYW1lLT5yZWdpc3RlcnMoKVtkc3RdID0g
anNCb29sZWFuKGZhbHNlKTsKICAgICAgICAgICAgICsrdlBDOwogICAgICAgICAgICAgTkVYVF9P
UENPREU7CiAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIHJbZHN0XSA9IGpzQm9vbGVhbihK
U0ltbWVkaWF0ZTo6aXNJbW1lZGlhdGUoc3JjKSB8fCAhc3RhdGljX2Nhc3Q8SlNDZWxsKj4oc3Jj
KS0+YXNDZWxsKCktPnN0cnVjdHVyZUlEKCktPnR5cGVJbmZvKCkubWFzcXVlcmFkZXNBc1VuZGVm
aW5lZCgpKTsKKyAgICAgICAgY2FsbEZyYW1lLT5yZWdpc3RlcnMoKVtkc3RdID0ganNCb29sZWFu
KEpTSW1tZWRpYXRlOjppc0ltbWVkaWF0ZShzcmMpIHx8ICFzdGF0aWNfY2FzdDxKU0NlbGwqPihz
cmMpLT5hc0NlbGwoKS0+c3RydWN0dXJlSUQoKS0+dHlwZUluZm8oKS5tYXNxdWVyYWRlc0FzVW5k
ZWZpbmVkKCkpOwogICAgICAgICArK3ZQQzsKICAgICAgICAgTkVYVF9PUENPREU7CiAgICAgfQpA
QCAtMTY1MiwxNCArMTYzNSwxNCBAQCBKU1ZhbHVlKiBNYWNoaW5lOjpwcml2YXRlRXhlY3V0ZShF
eGVjdXRpCiAgICAgICAgICAgIHJlc3VsdCBhcyBhIGJvb2xlYW4gaW4gcmVnaXN0ZXIgZHN0Lgog
ICAgICAgICAqLwogICAgICAgICBpbnQgZHN0ID0gKCsrdlBDKS0+dS5vcGVyYW5kOwotICAgICAg
ICBKU1ZhbHVlKiBzcmMxID0gclsoKyt2UEMpLT51Lm9wZXJhbmRdLmpzVmFsdWUoZXhlYyk7Ci0g
ICAgICAgIEpTVmFsdWUqIHNyYzIgPSByWygrK3ZQQyktPnUub3BlcmFuZF0uanNWYWx1ZShleGVj
KTsKKyAgICAgICAgSlNWYWx1ZSogc3JjMSA9IGNhbGxGcmFtZS0+cmVnaXN0ZXJzKClbKCsrdlBD
KS0+dS5vcGVyYW5kXS5qc1ZhbHVlKGNhbGxGcmFtZSk7CisgICAgICAgIEpTVmFsdWUqIHNyYzIg
PSBjYWxsRnJhbWUtPnJlZ2lzdGVycygpWygrK3ZQQyktPnUub3BlcmFuZF0uanNWYWx1ZShjYWxs
RnJhbWUpOwogICAgICAgICBpZiAoSlNJbW1lZGlhdGU6OmFyZUJvdGhJbW1lZGlhdGUoc3JjMSwg
c3JjMikpCi0gICAgICAgICAgICByW2RzdF0gPSBqc0Jvb2xlYW4ocmVpbnRlcnByZXRfY2FzdDxp
bnRwdHJfdD4oc3JjMSkgPT0gcmVpbnRlcnByZXRfY2FzdDxpbnRwdHJfdD4oc3JjMikpOworICAg
ICAgICAgICAgY2FsbEZyYW1lLT5yZWdpc3RlcnMoKVtkc3RdID0ganNCb29sZWFuKHJlaW50ZXJw
cmV0X2Nhc3Q8aW50cHRyX3Q+KHNyYzEpID09IHJlaW50ZXJwcmV0X2Nhc3Q8aW50cHRyX3Q+KHNy
YzIpKTsKICAgICAgICAgZWxzZSBpZiAoSlNJbW1lZGlhdGU6OmlzRWl0aGVySW1tZWRpYXRlKHNy
YzEsIHNyYzIpICYgKHNyYzEgIT0gSlNJbW1lZGlhdGU6Onplcm9JbW1lZGlhdGUoKSkgJiAoc3Jj
MiAhPSBKU0ltbWVkaWF0ZTo6emVyb0ltbWVkaWF0ZSgpKSkKLSAgICAgICAgICAgIHJbZHN0XSA9
IGpzQm9vbGVhbihmYWxzZSk7CisgICAgICAgICAgICBjYWxsRnJhbWUtPnJlZ2lzdGVycygpW2Rz
dF0gPSBqc0Jvb2xlYW4oZmFsc2UpOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICByW2RzdF0g
PSBqc0Jvb2xlYW4oc3RyaWN0RXF1YWxTbG93Q2FzZShzcmMxLCBzcmMyKSk7CisgICAgICAgICAg
ICBjYWxsRnJhbWUtPnJlZ2lzdGVycygpW2RzdF0gPSBqc0Jvb2xlYW4oc3RyaWN0RXF1YWxTbG93
Q2FzZShzcmMxLCBzcmMyKSk7CiAKICAgICAgICAgKyt2UEM7CiAgICAgICAgIE5FWFRfT1BDT0RF
OwpAQCAtMTY3MiwxNSArMTY1NSwxNSBAQCBKU1ZhbHVlKiBNYWNoaW5lOjpwcml2YXRlRXhlY3V0
ZShFeGVjdXRpCiAgICAgICAgICAgIHB1dHMgdGhlIHJlc3VsdCBhcyBhIGJvb2xlYW4gaW4gcmVn
aXN0ZXIgZHN0LgogICAgICAgICAqLwogICAgICAgICBpbnQgZHN0ID0gKCsrdlBDKS0+dS5vcGVy
YW5kOwotICAgICAgICBKU1ZhbHVlKiBzcmMxID0gclsoKyt2UEMpLT51Lm9wZXJhbmRdLmpzVmFs
dWUoZXhlYyk7Ci0gICAgICAgIEpTVmFsdWUqIHNyYzIgPSByWygrK3ZQQyktPnUub3BlcmFuZF0u
anNWYWx1ZShleGVjKTsKKyAgICAgICAgSlNWYWx1ZSogc3JjMSA9IGNhbGxGcmFtZS0+cmVnaXN0
ZXJzKClbKCsrdlBDKS0+dS5vcGVyYW5kXS5qc1ZhbHVlKGNhbGxGcmFtZSk7CisgICAgICAgIEpT
VmFsdWUqIHNyYzIgPSBjYWxsRnJhbWUtPnJlZ2lzdGVycygpWygrK3ZQQyktPnUub3BlcmFuZF0u
anNWYWx1ZShjYWxsRnJhbWUpOwogCiAgICAgICAgIGlmIChKU0ltbWVkaWF0ZTo6YXJlQm90aElt
bWVkaWF0ZShzcmMxLCBzcmMyKSkKLSAgICAgICAgICAgIHJbZHN0XSA9IGpzQm9vbGVhbihyZWlu
dGVycHJldF9jYXN0PGludHB0cl90PihzcmMxKSAhPSByZWludGVycHJldF9jYXN0PGludHB0cl90
PihzcmMyKSk7CisgICAgICAgICAgICBjYWxsRnJhbWUtPnJlZ2lzdGVycygpW2RzdF0gPSBqc0Jv
b2xlYW4ocmVpbnRlcnByZXRfY2FzdDxpbnRwdHJfdD4oc3JjMSkgIT0gcmVpbnRlcnByZXRfY2Fz
dDxpbnRwdHJfdD4oc3JjMikpOwogICAgICAgICBlbHNlIGlmIChKU0ltbWVkaWF0ZTo6aXNFaXRo
ZXJJbW1lZGlhdGUoc3JjMSwgc3JjMikgJiAoc3JjMSAhPSBKU0ltbWVkaWF0ZTo6emVyb0ltbWVk
aWF0ZSgpKSAmIChzcmMyICE9IEpTSW1tZWRpYXRlOjp6ZXJvSW1tZWRpYXRlKCkpKQotICAgICAg
ICAgICAgcltkc3RdID0ganNCb29sZWFuKHRydWUpOworICAgICAgICAgICAgY2FsbEZyYW1lLT5y
ZWdpc3RlcnMoKVtkc3RdID0ganNCb29sZWFuKHRydWUpOwogICAgICAgICBlbHNlCi0gICAgICAg
ICAgICByW2RzdF0gPSBqc0Jvb2xlYW4oIXN0cmljdEVxdWFsU2xvd0Nhc2Uoc3JjMSwgc3JjMikp
OworICAgICAgICAgICAgY2FsbEZyYW1lLT5yZWdpc3RlcnMoKVtkc3RdID0ganNCb29sZWFuKCFz
dHJpY3RFcXVhbFNsb3dDYXNlKHNyYzEsIHNyYzIpKTsKIAogICAgICAgICArK3ZQQzsKICAgICAg
ICAgTkVYVF9PUENPREU7CkBAIC0xNjkzLDExICsxNjc2LDExIEBAIEpTVmFsdWUqIE1hY2hpbmU6
OnByaXZhdGVFeGVjdXRlKEV4ZWN1dGkKICAgICAgICAgICAgYSBib29sZWFuIGluIHJlZ2lzdGVy
IGRzdC4KICAgICAgICAgKi8KICAgICAgICAgaW50IGRzdCA9ICgrK3ZQQyktPnUub3BlcmFuZDsK
LSAgICAgICAgSlNWYWx1ZSogc3JjMSA9IHJbKCsrdlBDKS0+dS5vcGVyYW5kXS5qc1ZhbHVlKGV4
ZWMpOwotICAgICAgICBKU1ZhbHVlKiBzcmMyID0gclsoKyt2UEMpLT51Lm9wZXJhbmRdLmpzVmFs
dWUoZXhlYyk7Ci0gICAgICAgIEpTVmFsdWUqIHJlc3VsdCA9IGpzQm9vbGVhbihqc0xlc3MoZXhl
Yywgc3JjMSwgc3JjMikpOworICAgICAgICBKU1ZhbHVlKiBzcmMxID0gY2FsbEZyYW1lLT5yZWdp
c3RlcnMoKVsoKyt2UEMpLT51Lm9wZXJhbmRdLmpzVmFsdWUoY2FsbEZyYW1lKTsKKyAgICAgICAg
SlNWYWx1ZSogc3JjMiA9IGNhbGxGcmFtZS0+cmVnaXN0ZXJzKClbKCsrdlBDKS0+dS5vcGVyYW5k
XS5qc1ZhbHVlKGNhbGxGcmFtZSk7CisgICAgICAgIEpTVmFsdWUqIHJlc3VsdCA9IGpzQm9vbGVh
bihqc0xlc3MoY2FsbEZyYW1lLCBzcmMxLCBzcmMyKSk7CiAgICAgICAgIFZNX0NIRUNLX0VYQ0VQ
VElPTigpOwotICAgICAgICByW2RzdF0gPSByZXN1bHQ7CisgICAgICAgIGNhbGxGcmFtZS0+cmVn
aXN0ZXJzKClbZHN0XSA9IHJlc3VsdDsKIAogICAgICAgICArK3ZQQzsKICAgICAgICAgTkVYVF9P
UENPREU7CkBAIC0xNzEwLDExICsxNjkzLDExIEBAIEpTVmFsdWUqIE1hY2hpbmU6OnByaXZhdGVF
eGVjdXRlKEV4ZWN1dGkKICAgICAgICAgICAgcHV0cyB0aGUgcmVzdWx0IGFzIGEgYm9vbGVhbiBp
biByZWdpc3RlciBkc3QuCiAgICAgICAgICovCiAgICAgICAgIGludCBkc3QgPSAoKyt2UEMpLT51
Lm9wZXJhbmQ7Ci0gICAgICAgIEpTVmFsdWUqIHNyYzEgPSByWygrK3ZQQyktPnUub3BlcmFuZF0u
anNWYWx1ZShleGVjKTsKLSAgICAgICAgSlNWYWx1ZSogc3JjMiA9IHJbKCsrdlBDKS0+dS5vcGVy
YW5kXS5qc1ZhbHVlKGV4ZWMpOwotICAgICAgICBKU1ZhbHVlKiByZXN1bHQgPSBqc0Jvb2xlYW4o
anNMZXNzRXEoZXhlYywgc3JjMSwgc3JjMikpOworICAgICAgICBKU1ZhbHVlKiBzcmMxID0gY2Fs
bEZyYW1lLT5yZWdpc3RlcnMoKVsoKyt2UEMpLT51Lm9wZXJhbmRdLmpzVmFsdWUoY2FsbEZyYW1l
KTsKKyAgICAgICAgSlNWYWx1ZSogc3JjMiA9IGNhbGxGcmFtZS0+cmVnaXN0ZXJzKClbKCsrdlBD
KS0+dS5vcGVyYW5kXS5qc1ZhbHVlKGNhbGxGcmFtZSk7CisgICAgICAgIEpTVmFsdWUqIHJlc3Vs
dCA9IGpzQm9vbGVhbihqc0xlc3NFcShjYWxsRnJhbWUsIHNyYzEsIHNyYzIpKTsKICAgICAgICAg
Vk1fQ0hFQ0tfRVhDRVBUSU9OKCk7Ci0gICAgICAgIHJbZHN0XSA9IHJlc3VsdDsKKyAgICAgICAg
Y2FsbEZyYW1lLT5yZWdpc3RlcnMoKVtkc3RdID0gcmVzdWx0OwogCiAgICAgICAgICsrdlBDOwog
ICAgICAgICBORVhUX09QQ09ERTsKQEAgLTE3MjYsMTMgKzE3MDksMTMgQEAgSlNWYWx1ZSogTWFj
aGluZTo6cHJpdmF0ZUV4ZWN1dGUoRXhlY3V0aQogICAgICAgICAgICBiYWNrIGluIHJlZ2lzdGVy
IHNyY0RzdC4KICAgICAgICAgKi8KICAgICAgICAgaW50IHNyY0RzdCA9ICgrK3ZQQyktPnUub3Bl
cmFuZDsKLSAgICAgICAgSlNWYWx1ZSogdiA9IHJbc3JjRHN0XS5qc1ZhbHVlKGV4ZWMpOworICAg
ICAgICBKU1ZhbHVlKiB2ID0gY2FsbEZyYW1lLT5yZWdpc3RlcnMoKVtzcmNEc3RdLmpzVmFsdWUo
Y2FsbEZyYW1lKTsKICAgICAgICAgaWYgKEpTSW1tZWRpYXRlOjpjYW5Eb0Zhc3RBZGRpdGl2ZU9w
ZXJhdGlvbnModikpCi0gICAgICAgICAgICByW3NyY0RzdF0gPSBKU0ltbWVkaWF0ZTo6aW5jSW1t
ZWRpYXRlTnVtYmVyKHYpOworICAgICAgICAgICAgY2FsbEZyYW1lLT5yZWdpc3RlcnMoKVtzcmNE
c3RdID0gSlNJbW1lZGlhdGU6OmluY0ltbWVkaWF0ZU51bWJlcih2KTsKICAgICAgICAgZWxzZSB7
Ci0gICAgICAgICAgICBKU1ZhbHVlKiByZXN1bHQgPSBqc051bWJlcihleGVjLCB2LT50b051bWJl
cihleGVjKSArIDEpOworICAgICAgICAgICAgSlNWYWx1ZSogcmVzdWx0ID0ganNOdW1iZXIoY2Fs
bEZyYW1lLCB2LT50b051bWJlcihjYWxsRnJhbWUpICsgMSk7CiAgICAgICAgICAgICBWTV9DSEVD
S19FWENFUFRJT04oKTsKLSAgICAgICAgICAgIHJbc3JjRHN0XSA9IHJlc3VsdDsKKyAgICAgICAg
ICAgIGNhbGxGcmFtZS0+cmVnaXN0ZXJzKClbc3JjRHN0XSA9IHJlc3VsdDsKICAgICAgICAgfQog
CiAgICAgICAgICsrdlBDOwpAQCAtMTc0NSwxMyArMTcyOCwxMyBAQCBKU1ZhbHVlKiBNYWNoaW5l
Ojpwcml2YXRlRXhlY3V0ZShFeGVjdXRpCiAgICAgICAgICAgIGJhY2sgaW4gcmVnaXN0ZXIgc3Jj
RHN0LgogICAgICAgICAqLwogICAgICAgICBpbnQgc3JjRHN0ID0gKCsrdlBDKS0+dS5vcGVyYW5k
OwotICAgICAgICBKU1ZhbHVlKiB2ID0gcltzcmNEc3RdLmpzVmFsdWUoZXhlYyk7CisgICAgICAg
IEpTVmFsdWUqIHYgPSBjYWxsRnJhbWUtPnJlZ2lzdGVycygpW3NyY0RzdF0uanNWYWx1ZShjYWxs
RnJhbWUpOwogICAgICAgICBpZiAoSlNJbW1lZGlhdGU6OmNhbkRvRmFzdEFkZGl0aXZlT3BlcmF0
aW9ucyh2KSkKLSAgICAgICAgICAgIHJbc3JjRHN0XSA9IEpTSW1tZWRpYXRlOjpkZWNJbW1lZGlh
dGVOdW1iZXIodik7CisgICAgICAgICAgICBjYWxsRnJhbWUtPnJlZ2lzdGVycygpW3NyY0RzdF0g
PSBKU0ltbWVkaWF0ZTo6ZGVjSW1tZWRpYXRlTnVtYmVyKHYpOwogICAgICAgICBlbHNlIHsKLSAg
ICAgICAgICAgIEpTVmFsdWUqIHJlc3VsdCA9IGpzTnVtYmVyKGV4ZWMsIHYtPnRvTnVtYmVyKGV4
ZWMpIC0gMSk7CisgICAgICAgICAgICBKU1ZhbHVlKiByZXN1bHQgPSBqc051bWJlcihjYWxsRnJh
bWUsIHYtPnRvTnVtYmVyKGNhbGxGcmFtZSkgLSAxKTsKICAgICAgICAgICAgIFZNX0NIRUNLX0VY
Q0VQVElPTigpOwotICAgICAgICAgICAgcltzcmNEc3RdID0gcmVzdWx0OworICAgICAgICAgICAg
Y2FsbEZyYW1lLT5yZWdpc3RlcnMoKVtzcmNEc3RdID0gcmVzdWx0OwogICAgICAgICB9CiAKICAg
ICAgICAgKyt2UEM7CkBAIC0xNzY2LDE1ICsxNzQ5LDE1IEBAIEpTVmFsdWUqIE1hY2hpbmU6OnBy
aXZhdGVFeGVjdXRlKEV4ZWN1dGkKICAgICAgICAgKi8KICAgICAgICAgaW50IGRzdCA9ICgrK3ZQ
QyktPnUub3BlcmFuZDsKICAgICAgICAgaW50IHNyY0RzdCA9ICgrK3ZQQyktPnUub3BlcmFuZDsK
LSAgICAgICAgSlNWYWx1ZSogdiA9IHJbc3JjRHN0XS5qc1ZhbHVlKGV4ZWMpOworICAgICAgICBK
U1ZhbHVlKiB2ID0gY2FsbEZyYW1lLT5yZWdpc3RlcnMoKVtzcmNEc3RdLmpzVmFsdWUoY2FsbEZy
YW1lKTsKICAgICAgICAgaWYgKEpTSW1tZWRpYXRlOjpjYW5Eb0Zhc3RBZGRpdGl2ZU9wZXJhdGlv
bnModikpIHsKLSAgICAgICAgICAgIHJbZHN0XSA9IHY7Ci0gICAgICAgICAgICByW3NyY0RzdF0g
PSBKU0ltbWVkaWF0ZTo6aW5jSW1tZWRpYXRlTnVtYmVyKHYpOworICAgICAgICAgICAgY2FsbEZy
YW1lLT5yZWdpc3RlcnMoKVtkc3RdID0gdjsKKyAgICAgICAgICAgIGNhbGxGcmFtZS0+cmVnaXN0
ZXJzKClbc3JjRHN0XSA9IEpTSW1tZWRpYXRlOjppbmNJbW1lZGlhdGVOdW1iZXIodik7CiAgICAg
ICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBKU1ZhbHVlKiBudW1iZXIgPSByW3NyY0RzdF0uanNW
YWx1ZShleGVjKS0+dG9KU051bWJlcihleGVjKTsKKyAgICAgICAgICAgIEpTVmFsdWUqIG51bWJl
ciA9IGNhbGxGcmFtZS0+cmVnaXN0ZXJzKClbc3JjRHN0XS5qc1ZhbHVlKGNhbGxGcmFtZSktPnRv
SlNOdW1iZXIoY2FsbEZyYW1lKTsKICAgICAgICAgICAgIFZNX0NIRUNLX0VYQ0VQVElPTigpOwot
ICAgICAgICAgICAgcltkc3RdID0gbnVtYmVyOwotICAgICAgICAgICAgcltzcmNEc3RdID0ganNO
dW1iZXIoZXhlYywgbnVtYmVyLT51bmNoZWNrZWRHZXROdW1iZXIoKSArIDEpOworICAgICAgICAg
ICAgY2FsbEZyYW1lLT5yZWdpc3RlcnMoKVtkc3RdID0gbnVtYmVyOworICAgICAgICAgICAgY2Fs
bEZyYW1lLT5yZWdpc3RlcnMoKVtzcmNEc3RdID0ganNOdW1iZXIoY2FsbEZyYW1lLCBudW1iZXIt
PnVuY2hlY2tlZEdldE51bWJlcigpICsgMSk7CiAgICAgICAgIH0KIAogICAgICAgICArK3ZQQzsK
QEAgLTE3ODksMTUgKzE3NzIsMTUgQEAgSlNWYWx1ZSogTWFjaGluZTo6cHJpdmF0ZUV4ZWN1dGUo
RXhlY3V0aQogICAgICAgICAqLwogICAgICAgICBpbnQgZHN0ID0gKCsrdlBDKS0+dS5vcGVyYW5k
OwogICAgICAgICBpbnQgc3JjRHN0ID0gKCsrdlBDKS0+dS5vcGVyYW5kOwotICAgICAgICBKU1Zh
bHVlKiB2ID0gcltzcmNEc3RdLmpzVmFsdWUoZXhlYyk7CisgICAgICAgIEpTVmFsdWUqIHYgPSBj
YWxsRnJhbWUtPnJlZ2lzdGVycygpW3NyY0RzdF0uanNWYWx1ZShjYWxsRnJhbWUpOwogICAgICAg
ICBpZiAoSlNJbW1lZGlhdGU6OmNhbkRvRmFzdEFkZGl0aXZlT3BlcmF0aW9ucyh2KSkgewotICAg
ICAgICAgICAgcltkc3RdID0gdjsKLSAgICAgICAgICAgIHJbc3JjRHN0XSA9IEpTSW1tZWRpYXRl
OjpkZWNJbW1lZGlhdGVOdW1iZXIodik7CisgICAgICAgICAgICBjYWxsRnJhbWUtPnJlZ2lzdGVy
cygpW2RzdF0gPSB2OworICAgICAgICAgICAgY2FsbEZyYW1lLT5yZWdpc3RlcnMoKVtzcmNEc3Rd
ID0gSlNJbW1lZGlhdGU6OmRlY0ltbWVkaWF0ZU51bWJlcih2KTsKICAgICAgICAgfSBlbHNlIHsK
LSAgICAgICAgICAgIEpTVmFsdWUqIG51bWJlciA9IHJbc3JjRHN0XS5qc1ZhbHVlKGV4ZWMpLT50
b0pTTnVtYmVyKGV4ZWMpOworICAgICAgICAgICAgSlNWYWx1ZSogbnVtYmVyID0gY2FsbEZyYW1l
LT5yZWdpc3RlcnMoKVtzcmNEc3RdLmpzVmFsdWUoY2FsbEZyYW1lKS0+dG9KU051bWJlcihjYWxs
RnJhbWUpOwogICAgICAgICAgICAgVk1fQ0hFQ0tfRVhDRVBUSU9OKCk7Ci0gICAgICAgICAgICBy
W2RzdF0gPSBudW1iZXI7Ci0gICAgICAgICAgICByW3NyY0RzdF0gPSBqc051bWJlcihleGVjLCBu
dW1iZXItPnVuY2hlY2tlZEdldE51bWJlcigpIC0gMSk7CisgICAgICAgICAgICBjYWxsRnJhbWUt
PnJlZ2lzdGVycygpW2RzdF0gPSBudW1iZXI7CisgICAgICAgICAgICBjYWxsRnJhbWUtPnJlZ2lz
dGVycygpW3NyY0RzdF0gPSBqc051bWJlcihjYWxsRnJhbWUsIG51bWJlci0+dW5jaGVja2VkR2V0
TnVtYmVyKCkgLSAxKTsKICAgICAgICAgfQogCiAgICAgICAgICsrdlBDOwpAQCAtMTgxMSwxMCAr
MTc5NCwxMCBAQCBKU1ZhbHVlKiBNYWNoaW5lOjpwcml2YXRlRXhlY3V0ZShFeGVjdXRpCiAgICAg
ICAgICovCiAgICAgICAgIGludCBkc3QgPSAoKyt2UEMpLT51Lm9wZXJhbmQ7CiAgICAgICAgIGlu
dCBzcmMgPSAoKyt2UEMpLT51Lm9wZXJhbmQ7Ci0gICAgICAgIEpTVmFsdWUqIHJlc3VsdCA9IHJb
c3JjXS5qc1ZhbHVlKGV4ZWMpLT50b0pTTnVtYmVyKGV4ZWMpOworICAgICAgICBKU1ZhbHVlKiBy
ZXN1bHQgPSBjYWxsRnJhbWUtPnJlZ2lzdGVycygpW3NyY10uanNWYWx1ZShjYWxsRnJhbWUpLT50
b0pTTnVtYmVyKGNhbGxGcmFtZSk7CiAgICAgICAgIFZNX0NIRUNLX0VYQ0VQVElPTigpOwogCi0g
ICAgICAgIHJbZHN0XSA9IHJlc3VsdDsKKyAgICAgICAgY2FsbEZyYW1lLT5yZWdpc3RlcnMoKVtk
c3RdID0gcmVzdWx0OwogCiAgICAgICAgICsrdlBDOwogICAgICAgICBORVhUX09QQ09ERTsKQEAg
LTE4MjYsMTQgKzE4MDksMTQgQEAgSlNWYWx1ZSogTWFjaGluZTo6cHJpdmF0ZUV4ZWN1dGUoRXhl
Y3V0aQogICAgICAgICAgICByZXN1bHQgaW4gcmVnaXN0ZXIgZHN0LgogICAgICAgICAqLwogICAg
ICAgICBpbnQgZHN0ID0gKCsrdlBDKS0+dS5vcGVyYW5kOwotICAgICAgICBKU1ZhbHVlKiBzcmMg
PSByWygrK3ZQQyktPnUub3BlcmFuZF0uanNWYWx1ZShleGVjKTsKKyAgICAgICAgSlNWYWx1ZSog
c3JjID0gY2FsbEZyYW1lLT5yZWdpc3RlcnMoKVsoKyt2UEMpLT51Lm9wZXJhbmRdLmpzVmFsdWUo
Y2FsbEZyYW1lKTsKICAgICAgICAgZG91YmxlIHY7CiAgICAgICAgIGlmIChmYXN0SXNOdW1iZXIo
c3JjLCB2KSkKLSAgICAgICAgICAgIHJbZHN0XSA9IGpzTnVtYmVyKGV4ZWMsIC12KTsKKyAgICAg
ICAgICAgIGNhbGxGcmFtZS0+cmVnaXN0ZXJzKClbZHN0XSA9IGpzTnVtYmVyKGNhbGxGcmFtZSwg
LXYpOwogICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIEpTVmFsdWUqIHJlc3VsdCA9IGpzTnVt
YmVyKGV4ZWMsIC1zcmMtPnRvTnVtYmVyKGV4ZWMpKTsKKyAgICAgICAgICAgIEpTVmFsdWUqIHJl
c3VsdCA9IGpzTnVtYmVyKGNhbGxGcmFtZSwgLXNyYy0+dG9OdW1iZXIoY2FsbEZyYW1lKSk7CiAg
ICAgICAgICAgICBWTV9DSEVDS19FWENFUFRJT04oKTsKLSAgICAgICAgICAgIHJbZHN0XSA9IHJl
c3VsdDsKKyAgICAgICAgICAgIGNhbGxGcmFtZS0+cmVnaXN0ZXJzKClbZHN0XSA9IHJlc3VsdDsK
ICAgICAgICAgfQogCiAgICAgICAgICsrdlBDOwpAQCAtMTg0NywxNCArMTgzMCwxNCBAQCBKU1Zh
bHVlKiBNYWNoaW5lOjpwcml2YXRlRXhlY3V0ZShFeGVjdXRpCiAgICAgICAgICAgIG51bWVyaWMg
YWRkLCBkZXBlbmRpbmcgb24gdGhlIHR5cGVzIG9mIHRoZSBvcGVyYW5kcy4pCiAgICAgICAgICov
CiAgICAgICAgIGludCBkc3QgPSAoKyt2UEMpLT51Lm9wZXJhbmQ7Ci0gICAgICAgIEpTVmFsdWUq
IHNyYzEgPSByWygrK3ZQQyktPnUub3BlcmFuZF0uanNWYWx1ZShleGVjKTsKLSAgICAgICAgSlNW
YWx1ZSogc3JjMiA9IHJbKCsrdlBDKS0+dS5vcGVyYW5kXS5qc1ZhbHVlKGV4ZWMpOworICAgICAg
ICBKU1ZhbHVlKiBzcmMxID0gY2FsbEZyYW1lLT5yZWdpc3RlcnMoKVsoKyt2UEMpLT51Lm9wZXJh
bmRdLmpzVmFsdWUoY2FsbEZyYW1lKTsKKyAgICAgICAgSlNWYWx1ZSogc3JjMiA9IGNhbGxGcmFt
ZS0+cmVnaXN0ZXJzKClbKCsrdlBDKS0+dS5vcGVyYW5kXS5qc1ZhbHVlKGNhbGxGcmFtZSk7CiAg
ICAgICAgIGlmIChKU0ltbWVkaWF0ZTo6Y2FuRG9GYXN0QWRkaXRpdmVPcGVyYXRpb25zKHNyYzEp
ICYmIEpTSW1tZWRpYXRlOjpjYW5Eb0Zhc3RBZGRpdGl2ZU9wZXJhdGlvbnMoc3JjMikpCi0gICAg
ICAgICAgICByW2RzdF0gPSBKU0ltbWVkaWF0ZTo6YWRkSW1tZWRpYXRlTnVtYmVycyhzcmMxLCBz
cmMyKTsKKyAgICAgICAgICAgIGNhbGxGcmFtZS0+cmVnaXN0ZXJzKClbZHN0XSA9IEpTSW1tZWRp
YXRlOjphZGRJbW1lZGlhdGVOdW1iZXJzKHNyYzEsIHNyYzIpOwogICAgICAgICBlbHNlIHsKLSAg
ICAgICAgICAgIEpTVmFsdWUqIHJlc3VsdCA9IGpzQWRkKGV4ZWMsIHNyYzEsIHNyYzIpOworICAg
ICAgICAgICAgSlNWYWx1ZSogcmVzdWx0ID0ganNBZGQoY2FsbEZyYW1lLCBzcmMxLCBzcmMyKTsK
ICAgICAgICAgICAgIFZNX0NIRUNLX0VYQ0VQVElPTigpOwotICAgICAgICAgICAgcltkc3RdID0g
cmVzdWx0OworICAgICAgICAgICAgY2FsbEZyYW1lLT5yZWdpc3RlcnMoKVtkc3RdID0gcmVzdWx0
OwogICAgICAgICB9CiAgICAgICAgIHZQQyArPSAyOwogICAgICAgICBORVhUX09QQ09ERTsKQEAg
LTE4NjYsMTYgKzE4NDksMTYgQEAgSlNWYWx1ZSogTWFjaGluZTo6cHJpdmF0ZUV4ZWN1dGUoRXhl
Y3V0aQogICAgICAgICAgICBudW1iZXJzKSwgYW5kIHB1dHMgdGhlIHByb2R1Y3QgaW4gcmVnaXN0
ZXIgZHN0LgogICAgICAgICAqLwogICAgICAgICBpbnQgZHN0ID0gKCsrdlBDKS0+dS5vcGVyYW5k
OwotICAgICAgICBKU1ZhbHVlKiBzcmMxID0gclsoKyt2UEMpLT51Lm9wZXJhbmRdLmpzVmFsdWUo
ZXhlYyk7Ci0gICAgICAgIEpTVmFsdWUqIHNyYzIgPSByWygrK3ZQQyktPnUub3BlcmFuZF0uanNW
YWx1ZShleGVjKTsKKyAgICAgICAgSlNWYWx1ZSogc3JjMSA9IGNhbGxGcmFtZS0+cmVnaXN0ZXJz
KClbKCsrdlBDKS0+dS5vcGVyYW5kXS5qc1ZhbHVlKGNhbGxGcmFtZSk7CisgICAgICAgIEpTVmFs
dWUqIHNyYzIgPSBjYWxsRnJhbWUtPnJlZ2lzdGVycygpWygrK3ZQQyktPnUub3BlcmFuZF0uanNW
YWx1ZShjYWxsRnJhbWUpOwogICAgICAgICBkb3VibGUgbGVmdDsKICAgICAgICAgZG91YmxlIHJp
Z2h0OwogICAgICAgICBpZiAoZmFzdElzTnVtYmVyKHNyYzEsIGxlZnQpICYmIGZhc3RJc051bWJl
cihzcmMyLCByaWdodCkpCi0gICAgICAgICAgICByW2RzdF0gPSBqc051bWJlcihleGVjLCBsZWZ0
ICogcmlnaHQpOworICAgICAgICAgICAgY2FsbEZyYW1lLT5yZWdpc3RlcnMoKVtkc3RdID0ganNO
dW1iZXIoY2FsbEZyYW1lLCBsZWZ0ICogcmlnaHQpOwogICAgICAgICBlbHNlIHsKLSAgICAgICAg
ICAgIEpTVmFsdWUqIHJlc3VsdCA9IGpzTnVtYmVyKGV4ZWMsIHNyYzEtPnRvTnVtYmVyKGV4ZWMp
ICogc3JjMi0+dG9OdW1iZXIoZXhlYykpOworICAgICAgICAgICAgSlNWYWx1ZSogcmVzdWx0ID0g
anNOdW1iZXIoY2FsbEZyYW1lLCBzcmMxLT50b051bWJlcihjYWxsRnJhbWUpICogc3JjMi0+dG9O
dW1iZXIoY2FsbEZyYW1lKSk7CiAgICAgICAgICAgICBWTV9DSEVDS19FWENFUFRJT04oKTsKLSAg
ICAgICAgICAgIHJbZHN0XSA9IHJlc3VsdDsKKyAgICAgICAgICAgIGNhbGxGcmFtZS0+cmVnaXN0
ZXJzKClbZHN0XSA9IHJlc3VsdDsKICAgICAgICAgfQogCiAgICAgICAgIHZQQyArPSAyOwpAQCAt
MTg4OSwxNiArMTg3MiwxNiBAQCBKU1ZhbHVlKiBNYWNoaW5lOjpwcml2YXRlRXhlY3V0ZShFeGVj
dXRpCiAgICAgICAgICAgIHF1b3RpZW50IGluIHJlZ2lzdGVyIGRzdC4KICAgICAgICAgKi8KICAg
ICAgICAgaW50IGRzdCA9ICgrK3ZQQyktPnUub3BlcmFuZDsKLSAgICAgICAgSlNWYWx1ZSogZGl2
aWRlbmQgPSByWygrK3ZQQyktPnUub3BlcmFuZF0uanNWYWx1ZShleGVjKTsKLSAgICAgICAgSlNW
YWx1ZSogZGl2aXNvciA9IHJbKCsrdlBDKS0+dS5vcGVyYW5kXS5qc1ZhbHVlKGV4ZWMpOworICAg
ICAgICBKU1ZhbHVlKiBkaXZpZGVuZCA9IGNhbGxGcmFtZS0+cmVnaXN0ZXJzKClbKCsrdlBDKS0+
dS5vcGVyYW5kXS5qc1ZhbHVlKGNhbGxGcmFtZSk7CisgICAgICAgIEpTVmFsdWUqIGRpdmlzb3Ig
PSBjYWxsRnJhbWUtPnJlZ2lzdGVycygpWygrK3ZQQyktPnUub3BlcmFuZF0uanNWYWx1ZShjYWxs
RnJhbWUpOwogICAgICAgICBkb3VibGUgbGVmdDsKICAgICAgICAgZG91YmxlIHJpZ2h0OwogICAg
ICAgICBpZiAoZmFzdElzTnVtYmVyKGRpdmlkZW5kLCBsZWZ0KSAmJiBmYXN0SXNOdW1iZXIoZGl2
aXNvciwgcmlnaHQpKQotICAgICAgICAgICAgcltkc3RdID0ganNOdW1iZXIoZXhlYywgbGVmdCAv
IHJpZ2h0KTsKKyAgICAgICAgICAgIGNhbGxGcmFtZS0+cmVnaXN0ZXJzKClbZHN0XSA9IGpzTnVt
YmVyKGNhbGxGcmFtZSwgbGVmdCAvIHJpZ2h0KTsKICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAg
ICBKU1ZhbHVlKiByZXN1bHQgPSBqc051bWJlcihleGVjLCBkaXZpZGVuZC0+dG9OdW1iZXIoZXhl
YykgLyBkaXZpc29yLT50b051bWJlcihleGVjKSk7CisgICAgICAgICAgICBKU1ZhbHVlKiByZXN1
bHQgPSBqc051bWJlcihjYWxsRnJhbWUsIGRpdmlkZW5kLT50b051bWJlcihjYWxsRnJhbWUpIC8g
ZGl2aXNvci0+dG9OdW1iZXIoY2FsbEZyYW1lKSk7CiAgICAgICAgICAgICBWTV9DSEVDS19FWENF
UFRJT04oKTsKLSAgICAgICAgICAgIHJbZHN0XSA9IHJlc3VsdDsKKyAgICAgICAgICAgIGNhbGxG
cmFtZS0+cmVnaXN0ZXJzKClbZHN0XSA9IHJlc3VsdDsKICAgICAgICAgfQogICAgICAgICArK3ZQ
QzsKICAgICAgICAgTkVYVF9PUENPREU7CkBAIC0xOTE0LDE5ICsxODk3LDE5IEBAIEpTVmFsdWUq
IE1hY2hpbmU6OnByaXZhdGVFeGVjdXRlKEV4ZWN1dGkKICAgICAgICAgaW50IGRpdmlkZW5kID0g
KCsrdlBDKS0+dS5vcGVyYW5kOwogICAgICAgICBpbnQgZGl2aXNvciA9ICgrK3ZQQyktPnUub3Bl
cmFuZDsKIAotICAgICAgICBKU1ZhbHVlKiBkaXZpZGVuZFZhbHVlID0gcltkaXZpZGVuZF0uanNW
YWx1ZShleGVjKTsKLSAgICAgICAgSlNWYWx1ZSogZGl2aXNvclZhbHVlID0gcltkaXZpc29yXS5q
c1ZhbHVlKGV4ZWMpOworICAgICAgICBKU1ZhbHVlKiBkaXZpZGVuZFZhbHVlID0gY2FsbEZyYW1l
LT5yZWdpc3RlcnMoKVtkaXZpZGVuZF0uanNWYWx1ZShjYWxsRnJhbWUpOworICAgICAgICBKU1Zh
bHVlKiBkaXZpc29yVmFsdWUgPSBjYWxsRnJhbWUtPnJlZ2lzdGVycygpW2Rpdmlzb3JdLmpzVmFs
dWUoY2FsbEZyYW1lKTsKIAogICAgICAgICBpZiAoSlNJbW1lZGlhdGU6OmFyZUJvdGhJbW1lZGlh
dGVOdW1iZXJzKGRpdmlkZW5kVmFsdWUsIGRpdmlzb3JWYWx1ZSkgJiYgZGl2aXNvclZhbHVlICE9
IEpTSW1tZWRpYXRlOjpmcm9tKDApKSB7Ci0gICAgICAgICAgICByW2RzdF0gPSBKU0ltbWVkaWF0
ZTo6ZnJvbShKU0ltbWVkaWF0ZTo6Z2V0VHJ1bmNhdGVkSW50MzIoZGl2aWRlbmRWYWx1ZSkgJSBK
U0ltbWVkaWF0ZTo6Z2V0VHJ1bmNhdGVkSW50MzIoZGl2aXNvclZhbHVlKSk7CisgICAgICAgICAg
ICBjYWxsRnJhbWUtPnJlZ2lzdGVycygpW2RzdF0gPSBKU0ltbWVkaWF0ZTo6ZnJvbShKU0ltbWVk
aWF0ZTo6Z2V0VHJ1bmNhdGVkSW50MzIoZGl2aWRlbmRWYWx1ZSkgJSBKU0ltbWVkaWF0ZTo6Z2V0
VHJ1bmNhdGVkSW50MzIoZGl2aXNvclZhbHVlKSk7CiAgICAgICAgICAgICArK3ZQQzsKICAgICAg
ICAgICAgIE5FWFRfT1BDT0RFOwogICAgICAgICB9CiAKLSAgICAgICAgZG91YmxlIGQgPSBkaXZp
ZGVuZFZhbHVlLT50b051bWJlcihleGVjKTsKLSAgICAgICAgSlNWYWx1ZSogcmVzdWx0ID0ganNO
dW1iZXIoZXhlYywgZm1vZChkLCBkaXZpc29yVmFsdWUtPnRvTnVtYmVyKGV4ZWMpKSk7CisgICAg
ICAgIGRvdWJsZSBkID0gZGl2aWRlbmRWYWx1ZS0+dG9OdW1iZXIoY2FsbEZyYW1lKTsKKyAgICAg
ICAgSlNWYWx1ZSogcmVzdWx0ID0ganNOdW1iZXIoY2FsbEZyYW1lLCBmbW9kKGQsIGRpdmlzb3JW
YWx1ZS0+dG9OdW1iZXIoY2FsbEZyYW1lKSkpOwogICAgICAgICBWTV9DSEVDS19FWENFUFRJT04o
KTsKLSAgICAgICAgcltkc3RdID0gcmVzdWx0OworICAgICAgICBjYWxsRnJhbWUtPnJlZ2lzdGVy
cygpW2RzdF0gPSByZXN1bHQ7CiAgICAgICAgICsrdlBDOwogICAgICAgICBORVhUX09QQ09ERTsK
ICAgICB9CkBAIC0xOTM4LDE4ICsxOTIxLDE4IEBAIEpTVmFsdWUqIE1hY2hpbmU6OnByaXZhdGVF
eGVjdXRlKEV4ZWN1dGkKICAgICAgICAgICAgcmVnaXN0ZXIgZHN0LgogICAgICAgICAqLwogICAg
ICAgICBpbnQgZHN0ID0gKCsrdlBDKS0+dS5vcGVyYW5kOwotICAgICAgICBKU1ZhbHVlKiBzcmMx
ID0gclsoKyt2UEMpLT51Lm9wZXJhbmRdLmpzVmFsdWUoZXhlYyk7Ci0gICAgICAgIEpTVmFsdWUq
IHNyYzIgPSByWygrK3ZQQyktPnUub3BlcmFuZF0uanNWYWx1ZShleGVjKTsKKyAgICAgICAgSlNW
YWx1ZSogc3JjMSA9IGNhbGxGcmFtZS0+cmVnaXN0ZXJzKClbKCsrdlBDKS0+dS5vcGVyYW5kXS5q
c1ZhbHVlKGNhbGxGcmFtZSk7CisgICAgICAgIEpTVmFsdWUqIHNyYzIgPSBjYWxsRnJhbWUtPnJl
Z2lzdGVycygpWygrK3ZQQyktPnUub3BlcmFuZF0uanNWYWx1ZShjYWxsRnJhbWUpOwogICAgICAg
ICBkb3VibGUgbGVmdDsKICAgICAgICAgZG91YmxlIHJpZ2h0OwogICAgICAgICBpZiAoSlNJbW1l
ZGlhdGU6OmNhbkRvRmFzdEFkZGl0aXZlT3BlcmF0aW9ucyhzcmMxKSAmJiBKU0ltbWVkaWF0ZTo6
Y2FuRG9GYXN0QWRkaXRpdmVPcGVyYXRpb25zKHNyYzIpKQotICAgICAgICAgICAgcltkc3RdID0g
SlNJbW1lZGlhdGU6OnN1YkltbWVkaWF0ZU51bWJlcnMoc3JjMSwgc3JjMik7CisgICAgICAgICAg
ICBjYWxsRnJhbWUtPnJlZ2lzdGVycygpW2RzdF0gPSBKU0ltbWVkaWF0ZTo6c3ViSW1tZWRpYXRl
TnVtYmVycyhzcmMxLCBzcmMyKTsKICAgICAgICAgZWxzZSBpZiAoZmFzdElzTnVtYmVyKHNyYzEs
IGxlZnQpICYmIGZhc3RJc051bWJlcihzcmMyLCByaWdodCkpCi0gICAgICAgICAgICByW2RzdF0g
PSBqc051bWJlcihleGVjLCBsZWZ0IC0gcmlnaHQpOworICAgICAgICAgICAgY2FsbEZyYW1lLT5y
ZWdpc3RlcnMoKVtkc3RdID0ganNOdW1iZXIoY2FsbEZyYW1lLCBsZWZ0IC0gcmlnaHQpOwogICAg
ICAgICBlbHNlIHsKLSAgICAgICAgICAgIEpTVmFsdWUqIHJlc3VsdCA9IGpzTnVtYmVyKGV4ZWMs
IHNyYzEtPnRvTnVtYmVyKGV4ZWMpIC0gc3JjMi0+dG9OdW1iZXIoZXhlYykpOworICAgICAgICAg
ICAgSlNWYWx1ZSogcmVzdWx0ID0ganNOdW1iZXIoY2FsbEZyYW1lLCBzcmMxLT50b051bWJlcihj
YWxsRnJhbWUpIC0gc3JjMi0+dG9OdW1iZXIoY2FsbEZyYW1lKSk7CiAgICAgICAgICAgICBWTV9D
SEVDS19FWENFUFRJT04oKTsKLSAgICAgICAgICAgIHJbZHN0XSA9IHJlc3VsdDsKKyAgICAgICAg
ICAgIGNhbGxGcmFtZS0+cmVnaXN0ZXJzKClbZHN0XSA9IHJlc3VsdDsKICAgICAgICAgfQogICAg
ICAgICB2UEMgKz0gMjsKICAgICAgICAgTkVYVF9PUENPREU7CkBAIC0xOTYyLDE4ICsxOTQ1LDE4
IEBAIEpTVmFsdWUqIE1hY2hpbmU6OnByaXZhdGVFeGVjdXRlKEV4ZWN1dGkKICAgICAgICAgICAg
aW4gcmVnaXN0ZXIgZHN0LgogICAgICAgICAqLwogICAgICAgICBpbnQgZHN0ID0gKCsrdlBDKS0+
dS5vcGVyYW5kOwotICAgICAgICBKU1ZhbHVlKiB2YWwgPSByWygrK3ZQQyktPnUub3BlcmFuZF0u
anNWYWx1ZShleGVjKTsKLSAgICAgICAgSlNWYWx1ZSogc2hpZnQgPSByWygrK3ZQQyktPnUub3Bl
cmFuZF0uanNWYWx1ZShleGVjKTsKKyAgICAgICAgSlNWYWx1ZSogdmFsID0gY2FsbEZyYW1lLT5y
ZWdpc3RlcnMoKVsoKyt2UEMpLT51Lm9wZXJhbmRdLmpzVmFsdWUoY2FsbEZyYW1lKTsKKyAgICAg
ICAgSlNWYWx1ZSogc2hpZnQgPSBjYWxsRnJhbWUtPnJlZ2lzdGVycygpWygrK3ZQQyktPnUub3Bl
cmFuZF0uanNWYWx1ZShjYWxsRnJhbWUpOwogICAgICAgICBpbnQzMl90IGxlZnQ7CiAgICAgICAg
IHVpbnQzMl90IHJpZ2h0OwogICAgICAgICBpZiAoSlNJbW1lZGlhdGU6OmFyZUJvdGhJbW1lZGlh
dGVOdW1iZXJzKHZhbCwgc2hpZnQpKQotICAgICAgICAgICAgcltkc3RdID0ganNOdW1iZXIoZXhl
YywgSlNJbW1lZGlhdGU6OmdldFRydW5jYXRlZEludDMyKHZhbCkgPDwgKEpTSW1tZWRpYXRlOjpn
ZXRUcnVuY2F0ZWRVSW50MzIoc2hpZnQpICYgMHgxZikpOworICAgICAgICAgICAgY2FsbEZyYW1l
LT5yZWdpc3RlcnMoKVtkc3RdID0ganNOdW1iZXIoY2FsbEZyYW1lLCBKU0ltbWVkaWF0ZTo6Z2V0
VHJ1bmNhdGVkSW50MzIodmFsKSA8PCAoSlNJbW1lZGlhdGU6OmdldFRydW5jYXRlZFVJbnQzMihz
aGlmdCkgJiAweDFmKSk7CiAgICAgICAgIGVsc2UgaWYgKGZhc3RUb0ludDMyKHZhbCwgbGVmdCkg
JiYgZmFzdFRvVUludDMyKHNoaWZ0LCByaWdodCkpCi0gICAgICAgICAgICByW2RzdF0gPSBqc051
bWJlcihleGVjLCBsZWZ0IDw8IChyaWdodCAmIDB4MWYpKTsKKyAgICAgICAgICAgIGNhbGxGcmFt
ZS0+cmVnaXN0ZXJzKClbZHN0XSA9IGpzTnVtYmVyKGNhbGxGcmFtZSwgbGVmdCA8PCAocmlnaHQg
JiAweDFmKSk7CiAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgSlNWYWx1ZSogcmVzdWx0ID0g
anNOdW1iZXIoZXhlYywgKHZhbC0+dG9JbnQzMihleGVjKSkgPDwgKHNoaWZ0LT50b1VJbnQzMihl
eGVjKSAmIDB4MWYpKTsKKyAgICAgICAgICAgIEpTVmFsdWUqIHJlc3VsdCA9IGpzTnVtYmVyKGNh
bGxGcmFtZSwgKHZhbC0+dG9JbnQzMihjYWxsRnJhbWUpKSA8PCAoc2hpZnQtPnRvVUludDMyKGNh
bGxGcmFtZSkgJiAweDFmKSk7CiAgICAgICAgICAgICBWTV9DSEVDS19FWENFUFRJT04oKTsKLSAg
ICAgICAgICAgIHJbZHN0XSA9IHJlc3VsdDsKKyAgICAgICAgICAgIGNhbGxGcmFtZS0+cmVnaXN0
ZXJzKClbZHN0XSA9IHJlc3VsdDsKICAgICAgICAgfQogCiAgICAgICAgICsrdlBDOwpAQCAtMTk4
NywxOCArMTk3MCwxOCBAQCBKU1ZhbHVlKiBNYWNoaW5lOjpwcml2YXRlRXhlY3V0ZShFeGVjdXRp
CiAgICAgICAgICAgIHVpbnQzMiksIGFuZCBwdXRzIHRoZSByZXN1bHQgaW4gcmVnaXN0ZXIgZHN0
LgogICAgICAgICAqLwogICAgICAgICBpbnQgZHN0ID0gKCsrdlBDKS0+dS5vcGVyYW5kOwotICAg
ICAgICBKU1ZhbHVlKiB2YWwgPSByWygrK3ZQQyktPnUub3BlcmFuZF0uanNWYWx1ZShleGVjKTsK
LSAgICAgICAgSlNWYWx1ZSogc2hpZnQgPSByWygrK3ZQQyktPnUub3BlcmFuZF0uanNWYWx1ZShl
eGVjKTsKKyAgICAgICAgSlNWYWx1ZSogdmFsID0gY2FsbEZyYW1lLT5yZWdpc3RlcnMoKVsoKyt2
UEMpLT51Lm9wZXJhbmRdLmpzVmFsdWUoY2FsbEZyYW1lKTsKKyAgICAgICAgSlNWYWx1ZSogc2hp
ZnQgPSBjYWxsRnJhbWUtPnJlZ2lzdGVycygpWygrK3ZQQyktPnUub3BlcmFuZF0uanNWYWx1ZShj
YWxsRnJhbWUpOwogICAgICAgICBpbnQzMl90IGxlZnQ7CiAgICAgICAgIHVpbnQzMl90IHJpZ2h0
OwogICAgICAgICBpZiAoSlNJbW1lZGlhdGU6OmFyZUJvdGhJbW1lZGlhdGVOdW1iZXJzKHZhbCwg
c2hpZnQpKQotICAgICAgICAgICAgcltkc3RdID0gSlNJbW1lZGlhdGU6OnJpZ2h0U2hpZnRJbW1l
ZGlhdGVOdW1iZXJzKHZhbCwgc2hpZnQpOworICAgICAgICAgICAgY2FsbEZyYW1lLT5yZWdpc3Rl
cnMoKVtkc3RdID0gSlNJbW1lZGlhdGU6OnJpZ2h0U2hpZnRJbW1lZGlhdGVOdW1iZXJzKHZhbCwg
c2hpZnQpOwogICAgICAgICBlbHNlIGlmIChmYXN0VG9JbnQzMih2YWwsIGxlZnQpICYmIGZhc3RU
b1VJbnQzMihzaGlmdCwgcmlnaHQpKQotICAgICAgICAgICAgcltkc3RdID0ganNOdW1iZXIoZXhl
YywgbGVmdCA+PiAocmlnaHQgJiAweDFmKSk7CisgICAgICAgICAgICBjYWxsRnJhbWUtPnJlZ2lz
dGVycygpW2RzdF0gPSBqc051bWJlcihjYWxsRnJhbWUsIGxlZnQgPj4gKHJpZ2h0ICYgMHgxZikp
OwogICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIEpTVmFsdWUqIHJlc3VsdCA9IGpzTnVtYmVy
KGV4ZWMsICh2YWwtPnRvSW50MzIoZXhlYykpID4+IChzaGlmdC0+dG9VSW50MzIoZXhlYykgJiAw
eDFmKSk7CisgICAgICAgICAgICBKU1ZhbHVlKiByZXN1bHQgPSBqc051bWJlcihjYWxsRnJhbWUs
ICh2YWwtPnRvSW50MzIoY2FsbEZyYW1lKSkgPj4gKHNoaWZ0LT50b1VJbnQzMihjYWxsRnJhbWUp
ICYgMHgxZikpOwogICAgICAgICAgICAgVk1fQ0hFQ0tfRVhDRVBUSU9OKCk7Ci0gICAgICAgICAg
ICByW2RzdF0gPSByZXN1bHQ7CisgICAgICAgICAgICBjYWxsRnJhbWUtPnJlZ2lzdGVycygpW2Rz
dF0gPSByZXN1bHQ7CiAgICAgICAgIH0KIAogICAgICAgICArK3ZQQzsKQEAgLTIwMTIsMTQgKzE5
OTUsMTQgQEAgSlNWYWx1ZSogTWFjaGluZTo6cHJpdmF0ZUV4ZWN1dGUoRXhlY3V0aQogICAgICAg
ICAgICB1aW50MzIpLCBhbmQgcHV0cyB0aGUgcmVzdWx0IGluIHJlZ2lzdGVyIGRzdC4KICAgICAg
ICAgKi8KICAgICAgICAgaW50IGRzdCA9ICgrK3ZQQyktPnUub3BlcmFuZDsKLSAgICAgICAgSlNW
YWx1ZSogdmFsID0gclsoKyt2UEMpLT51Lm9wZXJhbmRdLmpzVmFsdWUoZXhlYyk7Ci0gICAgICAg
IEpTVmFsdWUqIHNoaWZ0ID0gclsoKyt2UEMpLT51Lm9wZXJhbmRdLmpzVmFsdWUoZXhlYyk7Cisg
ICAgICAgIEpTVmFsdWUqIHZhbCA9IGNhbGxGcmFtZS0+cmVnaXN0ZXJzKClbKCsrdlBDKS0+dS5v
cGVyYW5kXS5qc1ZhbHVlKGNhbGxGcmFtZSk7CisgICAgICAgIEpTVmFsdWUqIHNoaWZ0ID0gY2Fs
bEZyYW1lLT5yZWdpc3RlcnMoKVsoKyt2UEMpLT51Lm9wZXJhbmRdLmpzVmFsdWUoY2FsbEZyYW1l
KTsKICAgICAgICAgaWYgKEpTSW1tZWRpYXRlOjphcmVCb3RoSW1tZWRpYXRlTnVtYmVycyh2YWws
IHNoaWZ0KSAmJiAhSlNJbW1lZGlhdGU6OmlzTmVnYXRpdmUodmFsKSkKLSAgICAgICAgICAgIHJb
ZHN0XSA9IEpTSW1tZWRpYXRlOjpyaWdodFNoaWZ0SW1tZWRpYXRlTnVtYmVycyh2YWwsIHNoaWZ0
KTsKKyAgICAgICAgICAgIGNhbGxGcmFtZS0+cmVnaXN0ZXJzKClbZHN0XSA9IEpTSW1tZWRpYXRl
OjpyaWdodFNoaWZ0SW1tZWRpYXRlTnVtYmVycyh2YWwsIHNoaWZ0KTsKICAgICAgICAgZWxzZSB7
Ci0gICAgICAgICAgICBKU1ZhbHVlKiByZXN1bHQgPSBqc051bWJlcihleGVjLCAodmFsLT50b1VJ
bnQzMihleGVjKSkgPj4gKHNoaWZ0LT50b1VJbnQzMihleGVjKSAmIDB4MWYpKTsKKyAgICAgICAg
ICAgIEpTVmFsdWUqIHJlc3VsdCA9IGpzTnVtYmVyKGNhbGxGcmFtZSwgKHZhbC0+dG9VSW50MzIo
Y2FsbEZyYW1lKSkgPj4gKHNoaWZ0LT50b1VJbnQzMihjYWxsRnJhbWUpICYgMHgxZikpOwogICAg
ICAgICAgICAgVk1fQ0hFQ0tfRVhDRVBUSU9OKCk7Ci0gICAgICAgICAgICByW2RzdF0gPSByZXN1
bHQ7CisgICAgICAgICAgICBjYWxsRnJhbWUtPnJlZ2lzdGVycygpW2RzdF0gPSByZXN1bHQ7CiAg
ICAgICAgIH0KIAogICAgICAgICArK3ZQQzsKQEAgLTIwMzMsMTggKzIwMTYsMTggQEAgSlNWYWx1
ZSogTWFjaGluZTo6cHJpdmF0ZUV4ZWN1dGUoRXhlY3V0aQogICAgICAgICAgICBpbiByZWdpc3Rl
ciBkc3QuCiAgICAgICAgICovCiAgICAgICAgIGludCBkc3QgPSAoKyt2UEMpLT51Lm9wZXJhbmQ7
Ci0gICAgICAgIEpTVmFsdWUqIHNyYzEgPSByWygrK3ZQQyktPnUub3BlcmFuZF0uanNWYWx1ZShl
eGVjKTsKLSAgICAgICAgSlNWYWx1ZSogc3JjMiA9IHJbKCsrdlBDKS0+dS5vcGVyYW5kXS5qc1Zh
bHVlKGV4ZWMpOworICAgICAgICBKU1ZhbHVlKiBzcmMxID0gY2FsbEZyYW1lLT5yZWdpc3RlcnMo
KVsoKyt2UEMpLT51Lm9wZXJhbmRdLmpzVmFsdWUoY2FsbEZyYW1lKTsKKyAgICAgICAgSlNWYWx1
ZSogc3JjMiA9IGNhbGxGcmFtZS0+cmVnaXN0ZXJzKClbKCsrdlBDKS0+dS5vcGVyYW5kXS5qc1Zh
bHVlKGNhbGxGcmFtZSk7CiAgICAgICAgIGludDMyX3QgbGVmdDsKICAgICAgICAgaW50MzJfdCBy
aWdodDsKICAgICAgICAgaWYgKEpTSW1tZWRpYXRlOjphcmVCb3RoSW1tZWRpYXRlTnVtYmVycyhz
cmMxLCBzcmMyKSkKLSAgICAgICAgICAgIHJbZHN0XSA9IEpTSW1tZWRpYXRlOjphbmRJbW1lZGlh
dGVOdW1iZXJzKHNyYzEsIHNyYzIpOworICAgICAgICAgICAgY2FsbEZyYW1lLT5yZWdpc3RlcnMo
KVtkc3RdID0gSlNJbW1lZGlhdGU6OmFuZEltbWVkaWF0ZU51bWJlcnMoc3JjMSwgc3JjMik7CiAg
ICAgICAgIGVsc2UgaWYgKGZhc3RUb0ludDMyKHNyYzEsIGxlZnQpICYmIGZhc3RUb0ludDMyKHNy
YzIsIHJpZ2h0KSkKLSAgICAgICAgICAgIHJbZHN0XSA9IGpzTnVtYmVyKGV4ZWMsIGxlZnQgJiBy
aWdodCk7CisgICAgICAgICAgICBjYWxsRnJhbWUtPnJlZ2lzdGVycygpW2RzdF0gPSBqc051bWJl
cihjYWxsRnJhbWUsIGxlZnQgJiByaWdodCk7CiAgICAgICAgIGVsc2UgewotICAgICAgICAgICAg
SlNWYWx1ZSogcmVzdWx0ID0ganNOdW1iZXIoZXhlYywgc3JjMS0+dG9JbnQzMihleGVjKSAmIHNy
YzItPnRvSW50MzIoZXhlYykpOworICAgICAgICAgICAgSlNWYWx1ZSogcmVzdWx0ID0ganNOdW1i
ZXIoY2FsbEZyYW1lLCBzcmMxLT50b0ludDMyKGNhbGxGcmFtZSkgJiBzcmMyLT50b0ludDMyKGNh
bGxGcmFtZSkpOwogICAgICAgICAgICAgVk1fQ0hFQ0tfRVhDRVBUSU9OKCk7Ci0gICAgICAgICAg
ICByW2RzdF0gPSByZXN1bHQ7CisgICAgICAgICAgICBjYWxsRnJhbWUtPnJlZ2lzdGVycygpW2Rz
dF0gPSByZXN1bHQ7CiAgICAgICAgIH0KIAogICAgICAgICB2UEMgKz0gMjsKQEAgLTIwNTgsMTgg
KzIwNDEsMTggQEAgSlNWYWx1ZSogTWFjaGluZTo6cHJpdmF0ZUV4ZWN1dGUoRXhlY3V0aQogICAg
ICAgICAgICBpbiByZWdpc3RlciBkc3QuCiAgICAgICAgICovCiAgICAgICAgIGludCBkc3QgPSAo
Kyt2UEMpLT51Lm9wZXJhbmQ7Ci0gICAgICAgIEpTVmFsdWUqIHNyYzEgPSByWygrK3ZQQyktPnUu
b3BlcmFuZF0uanNWYWx1ZShleGVjKTsKLSAgICAgICAgSlNWYWx1ZSogc3JjMiA9IHJbKCsrdlBD
KS0+dS5vcGVyYW5kXS5qc1ZhbHVlKGV4ZWMpOworICAgICAgICBKU1ZhbHVlKiBzcmMxID0gY2Fs
bEZyYW1lLT5yZWdpc3RlcnMoKVsoKyt2UEMpLT51Lm9wZXJhbmRdLmpzVmFsdWUoY2FsbEZyYW1l
KTsKKyAgICAgICAgSlNWYWx1ZSogc3JjMiA9IGNhbGxGcmFtZS0+cmVnaXN0ZXJzKClbKCsrdlBD
KS0+dS5vcGVyYW5kXS5qc1ZhbHVlKGNhbGxGcmFtZSk7CiAgICAgICAgIGludDMyX3QgbGVmdDsK
ICAgICAgICAgaW50MzJfdCByaWdodDsKICAgICAgICAgaWYgKEpTSW1tZWRpYXRlOjphcmVCb3Ro
SW1tZWRpYXRlTnVtYmVycyhzcmMxLCBzcmMyKSkKLSAgICAgICAgICAgIHJbZHN0XSA9IEpTSW1t
ZWRpYXRlOjp4b3JJbW1lZGlhdGVOdW1iZXJzKHNyYzEsIHNyYzIpOworICAgICAgICAgICAgY2Fs
bEZyYW1lLT5yZWdpc3RlcnMoKVtkc3RdID0gSlNJbW1lZGlhdGU6OnhvckltbWVkaWF0ZU51bWJl
cnMoc3JjMSwgc3JjMik7CiAgICAgICAgIGVsc2UgaWYgKGZhc3RUb0ludDMyKHNyYzEsIGxlZnQp
ICYmIGZhc3RUb0ludDMyKHNyYzIsIHJpZ2h0KSkKLSAgICAgICAgICAgIHJbZHN0XSA9IGpzTnVt
YmVyKGV4ZWMsIGxlZnQgXiByaWdodCk7CisgICAgICAgICAgICBjYWxsRnJhbWUtPnJlZ2lzdGVy
cygpW2RzdF0gPSBqc051bWJlcihjYWxsRnJhbWUsIGxlZnQgXiByaWdodCk7CiAgICAgICAgIGVs
c2UgewotICAgICAgICAgICAgSlNWYWx1ZSogcmVzdWx0ID0ganNOdW1iZXIoZXhlYywgc3JjMS0+
dG9JbnQzMihleGVjKSBeIHNyYzItPnRvSW50MzIoZXhlYykpOworICAgICAgICAgICAgSlNWYWx1
ZSogcmVzdWx0ID0ganNOdW1iZXIoY2FsbEZyYW1lLCBzcmMxLT50b0ludDMyKGNhbGxGcmFtZSkg
XiBzcmMyLT50b0ludDMyKGNhbGxGcmFtZSkpOwogICAgICAgICAgICAgVk1fQ0hFQ0tfRVhDRVBU
SU9OKCk7Ci0gICAgICAgICAgICByW2RzdF0gPSByZXN1bHQ7CisgICAgICAgICAgICBjYWxsRnJh
bWUtPnJlZ2lzdGVycygpW2RzdF0gPSByZXN1bHQ7CiAgICAgICAgIH0KIAogICAgICAgICB2UEMg
Kz0gMjsKQEAgLTIwODMsMTggKzIwNjYsMTggQEAgSlNWYWx1ZSogTWFjaGluZTo6cHJpdmF0ZUV4
ZWN1dGUoRXhlY3V0aQogICAgICAgICAgICByZXN1bHQgaW4gcmVnaXN0ZXIgZHN0LgogICAgICAg
ICAqLwogICAgICAgICBpbnQgZHN0ID0gKCsrdlBDKS0+dS5vcGVyYW5kOwotICAgICAgICBKU1Zh
bHVlKiBzcmMxID0gclsoKyt2UEMpLT51Lm9wZXJhbmRdLmpzVmFsdWUoZXhlYyk7Ci0gICAgICAg
IEpTVmFsdWUqIHNyYzIgPSByWygrK3ZQQyktPnUub3BlcmFuZF0uanNWYWx1ZShleGVjKTsKKyAg
ICAgICAgSlNWYWx1ZSogc3JjMSA9IGNhbGxGcmFtZS0+cmVnaXN0ZXJzKClbKCsrdlBDKS0+dS5v
cGVyYW5kXS5qc1ZhbHVlKGNhbGxGcmFtZSk7CisgICAgICAgIEpTVmFsdWUqIHNyYzIgPSBjYWxs
RnJhbWUtPnJlZ2lzdGVycygpWygrK3ZQQyktPnUub3BlcmFuZF0uanNWYWx1ZShjYWxsRnJhbWUp
OwogICAgICAgICBpbnQzMl90IGxlZnQ7CiAgICAgICAgIGludDMyX3QgcmlnaHQ7CiAgICAgICAg
IGlmIChKU0ltbWVkaWF0ZTo6YXJlQm90aEltbWVkaWF0ZU51bWJlcnMoc3JjMSwgc3JjMikpCi0g
ICAgICAgICAgICByW2RzdF0gPSBKU0ltbWVkaWF0ZTo6b3JJbW1lZGlhdGVOdW1iZXJzKHNyYzEs
IHNyYzIpOworICAgICAgICAgICAgY2FsbEZyYW1lLT5yZWdpc3RlcnMoKVtkc3RdID0gSlNJbW1l
ZGlhdGU6Om9ySW1tZWRpYXRlTnVtYmVycyhzcmMxLCBzcmMyKTsKICAgICAgICAgZWxzZSBpZiAo
ZmFzdFRvSW50MzIoc3JjMSwgbGVmdCkgJiYgZmFzdFRvSW50MzIoc3JjMiwgcmlnaHQpKQotICAg
ICAgICAgICAgcltkc3RdID0ganNOdW1iZXIoZXhlYywgbGVmdCB8IHJpZ2h0KTsKKyAgICAgICAg
ICAgIGNhbGxGcmFtZS0+cmVnaXN0ZXJzKClbZHN0XSA9IGpzTnVtYmVyKGNhbGxGcmFtZSwgbGVm
dCB8IHJpZ2h0KTsKICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBKU1ZhbHVlKiByZXN1bHQg
PSBqc051bWJlcihleGVjLCBzcmMxLT50b0ludDMyKGV4ZWMpIHwgc3JjMi0+dG9JbnQzMihleGVj
KSk7CisgICAgICAgICAgICBKU1ZhbHVlKiByZXN1bHQgPSBqc051bWJlcihjYWxsRnJhbWUsIHNy
YzEtPnRvSW50MzIoY2FsbEZyYW1lKSB8IHNyYzItPnRvSW50MzIoY2FsbEZyYW1lKSk7CiAgICAg
ICAgICAgICBWTV9DSEVDS19FWENFUFRJT04oKTsKLSAgICAgICAgICAgIHJbZHN0XSA9IHJlc3Vs
dDsKKyAgICAgICAgICAgIGNhbGxGcmFtZS0+cmVnaXN0ZXJzKClbZHN0XSA9IHJlc3VsdDsKICAg
ICAgICAgfQogCiAgICAgICAgIHZQQyArPSAyOwpAQCAtMjEwNywxNCArMjA5MCwxNCBAQCBKU1Zh
bHVlKiBNYWNoaW5lOjpwcml2YXRlRXhlY3V0ZShFeGVjdXRpCiAgICAgICAgICAgIGFuZCBwdXRz
IHRoZSByZXN1bHQgaW4gcmVnaXN0ZXIgZHN0LgogICAgICAgICAqLwogICAgICAgICBpbnQgZHN0
ID0gKCsrdlBDKS0+dS5vcGVyYW5kOwotICAgICAgICBKU1ZhbHVlKiBzcmMgPSByWygrK3ZQQykt
PnUub3BlcmFuZF0uanNWYWx1ZShleGVjKTsKKyAgICAgICAgSlNWYWx1ZSogc3JjID0gY2FsbEZy
YW1lLT5yZWdpc3RlcnMoKVsoKyt2UEMpLT51Lm9wZXJhbmRdLmpzVmFsdWUoY2FsbEZyYW1lKTsK
ICAgICAgICAgaW50MzJfdCB2YWx1ZTsKICAgICAgICAgaWYgKGZhc3RUb0ludDMyKHNyYywgdmFs
dWUpKQotICAgICAgICAgICAgcltkc3RdID0ganNOdW1iZXIoZXhlYywgfnZhbHVlKTsKKyAgICAg
ICAgICAgIGNhbGxGcmFtZS0+cmVnaXN0ZXJzKClbZHN0XSA9IGpzTnVtYmVyKGNhbGxGcmFtZSwg
fnZhbHVlKTsKICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBKU1ZhbHVlKiByZXN1bHQgPSBq
c051bWJlcihleGVjLCB+c3JjLT50b0ludDMyKGV4ZWMpKTsKKyAgICAgICAgICAgIEpTVmFsdWUq
IHJlc3VsdCA9IGpzTnVtYmVyKGNhbGxGcmFtZSwgfnNyYy0+dG9JbnQzMihjYWxsRnJhbWUpKTsK
ICAgICAgICAgICAgIFZNX0NIRUNLX0VYQ0VQVElPTigpOwotICAgICAgICAgICAgcltkc3RdID0g
cmVzdWx0OworICAgICAgICAgICAgY2FsbEZyYW1lLT5yZWdpc3RlcnMoKVtkc3RdID0gcmVzdWx0
OwogICAgICAgICB9CiAgICAgICAgICsrdlBDOwogICAgICAgICBORVhUX09QQ09ERTsKQEAgLTIx
MjcsOSArMjExMCw5IEBAIEpTVmFsdWUqIE1hY2hpbmU6OnByaXZhdGVFeGVjdXRlKEV4ZWN1dGkK
ICAgICAgICAgKi8KICAgICAgICAgaW50IGRzdCA9ICgrK3ZQQyktPnUub3BlcmFuZDsKICAgICAg
ICAgaW50IHNyYyA9ICgrK3ZQQyktPnUub3BlcmFuZDsKLSAgICAgICAgSlNWYWx1ZSogcmVzdWx0
ID0ganNCb29sZWFuKCFyW3NyY10uanNWYWx1ZShleGVjKS0+dG9Cb29sZWFuKGV4ZWMpKTsKKyAg
ICAgICAgSlNWYWx1ZSogcmVzdWx0ID0ganNCb29sZWFuKCFjYWxsRnJhbWUtPnJlZ2lzdGVycygp
W3NyY10uanNWYWx1ZShjYWxsRnJhbWUpLT50b0Jvb2xlYW4oY2FsbEZyYW1lKSk7CiAgICAgICAg
IFZNX0NIRUNLX0VYQ0VQVElPTigpOwotICAgICAgICByW2RzdF0gPSByZXN1bHQ7CisgICAgICAg
IGNhbGxGcmFtZS0+cmVnaXN0ZXJzKClbZHN0XSA9IHJlc3VsdDsKIAogICAgICAgICArK3ZQQzsK
ICAgICAgICAgTkVYVF9PUENPREU7CkBAIC0yMTUyLDEzICsyMTM1LDEzIEBAIEpTVmFsdWUqIE1h
Y2hpbmU6OnByaXZhdGVFeGVjdXRlKEV4ZWN1dGkKICAgICAgICAgaW50IGJhc2UgPSAoKyt2UEMp
LT51Lm9wZXJhbmQ7CiAgICAgICAgIGludCBiYXNlUHJvdG8gPSAoKyt2UEMpLT51Lm9wZXJhbmQ7
CiAKLSAgICAgICAgSlNWYWx1ZSogYmFzZVZhbCA9IHJbYmFzZV0uanNWYWx1ZShleGVjKTsKKyAg
ICAgICAgSlNWYWx1ZSogYmFzZVZhbCA9IGNhbGxGcmFtZS0+cmVnaXN0ZXJzKClbYmFzZV0uanNW
YWx1ZShjYWxsRnJhbWUpOwogCi0gICAgICAgIGlmIChpc05vdE9iamVjdChleGVjLCB0cnVlLCBj
b2RlQmxvY2sociksIHZQQywgYmFzZVZhbCwgZXhjZXB0aW9uVmFsdWUpKQorICAgICAgICBpZiAo
aXNOb3RPYmplY3QoY2FsbEZyYW1lLCB0cnVlLCBjYWxsRnJhbWUtPmNvZGVCbG9jaygpLCB2UEMs
IGJhc2VWYWwsIGV4Y2VwdGlvblZhbHVlKSkKICAgICAgICAgICAgIGdvdG8gdm1fdGhyb3c7CiAK
ICAgICAgICAgSlNPYmplY3QqIGJhc2VPYmogPSBzdGF0aWNfY2FzdDxKU09iamVjdCo+KGJhc2VW
YWwpOwotICAgICAgICByW2RzdF0gPSBqc0Jvb2xlYW4oYmFzZU9iai0+c3RydWN0dXJlSUQoKS0+
dHlwZUluZm8oKS5pbXBsZW1lbnRzSGFzSW5zdGFuY2UoKSA/IGJhc2VPYmotPmhhc0luc3RhbmNl
KGV4ZWMsIHJbdmFsdWVdLmpzVmFsdWUoZXhlYyksIHJbYmFzZVByb3RvXS5qc1ZhbHVlKGV4ZWMp
KSA6IGZhbHNlKTsKKyAgICAgICAgY2FsbEZyYW1lLT5yZWdpc3RlcnMoKVtkc3RdID0ganNCb29s
ZWFuKGJhc2VPYmotPnN0cnVjdHVyZUlEKCktPnR5cGVJbmZvKCkuaW1wbGVtZW50c0hhc0luc3Rh
bmNlKCkgPyBiYXNlT2JqLT5oYXNJbnN0YW5jZShjYWxsRnJhbWUsIGNhbGxGcmFtZS0+cmVnaXN0
ZXJzKClbdmFsdWVdLmpzVmFsdWUoY2FsbEZyYW1lKSwgY2FsbEZyYW1lLT5yZWdpc3RlcnMoKVti
YXNlUHJvdG9dLmpzVmFsdWUoY2FsbEZyYW1lKSkgOiBmYWxzZSk7CiAKICAgICAgICAgKyt2UEM7
CiAgICAgICAgIE5FWFRfT1BDT0RFOwpAQCAtMjE3MSw3ICsyMTU0LDcgQEAgSlNWYWx1ZSogTWFj
aGluZTo6cHJpdmF0ZUV4ZWN1dGUoRXhlY3V0aQogICAgICAgICAqLwogICAgICAgICBpbnQgZHN0
ID0gKCsrdlBDKS0+dS5vcGVyYW5kOwogICAgICAgICBpbnQgc3JjID0gKCsrdlBDKS0+dS5vcGVy
YW5kOwotICAgICAgICByW2RzdF0gPSBqc1R5cGVTdHJpbmdGb3JWYWx1ZShleGVjLCByW3NyY10u
anNWYWx1ZShleGVjKSk7CisgICAgICAgIGNhbGxGcmFtZS0+cmVnaXN0ZXJzKClbZHN0XSA9IGpz
VHlwZVN0cmluZ0ZvclZhbHVlKGNhbGxGcmFtZSwgY2FsbEZyYW1lLT5yZWdpc3RlcnMoKVtzcmNd
LmpzVmFsdWUoY2FsbEZyYW1lKSk7CiAKICAgICAgICAgKyt2UEM7CiAgICAgICAgIE5FWFRfT1BD
T0RFOwpAQCAtMjE4NSw4ICsyMTY4LDggQEAgSlNWYWx1ZSogTWFjaGluZTo6cHJpdmF0ZUV4ZWN1
dGUoRXhlY3V0aQogICAgICAgICAqLwogICAgICAgICBpbnQgZHN0ID0gKCsrdlBDKS0+dS5vcGVy
YW5kOwogICAgICAgICBpbnQgc3JjID0gKCsrdlBDKS0+dS5vcGVyYW5kOwotICAgICAgICBKU1Zh
bHVlKiB2ID0gcltzcmNdLmpzVmFsdWUoZXhlYyk7Ci0gICAgICAgIHJbZHN0XSA9IGpzQm9vbGVh
bihKU0ltbWVkaWF0ZTo6aXNJbW1lZGlhdGUodikgPyB2LT5pc1VuZGVmaW5lZCgpIDogdi0+YXND
ZWxsKCktPnN0cnVjdHVyZUlEKCktPnR5cGVJbmZvKCkubWFzcXVlcmFkZXNBc1VuZGVmaW5lZCgp
KTsKKyAgICAgICAgSlNWYWx1ZSogdiA9IGNhbGxGcmFtZS0+cmVnaXN0ZXJzKClbc3JjXS5qc1Zh
bHVlKGNhbGxGcmFtZSk7CisgICAgICAgIGNhbGxGcmFtZS0+cmVnaXN0ZXJzKClbZHN0XSA9IGpz
Qm9vbGVhbihKU0ltbWVkaWF0ZTo6aXNJbW1lZGlhdGUodikgPyB2LT5pc1VuZGVmaW5lZCgpIDog
di0+YXNDZWxsKCktPnN0cnVjdHVyZUlEKCktPnR5cGVJbmZvKCkubWFzcXVlcmFkZXNBc1VuZGVm
aW5lZCgpKTsKIAogICAgICAgICArK3ZQQzsKICAgICAgICAgTkVYVF9PUENPREU7CkBAIC0yMjAw
LDcgKzIxODMsNyBAQCBKU1ZhbHVlKiBNYWNoaW5lOjpwcml2YXRlRXhlY3V0ZShFeGVjdXRpCiAg
ICAgICAgICovCiAgICAgICAgIGludCBkc3QgPSAoKyt2UEMpLT51Lm9wZXJhbmQ7CiAgICAgICAg
IGludCBzcmMgPSAoKyt2UEMpLT51Lm9wZXJhbmQ7Ci0gICAgICAgIHJbZHN0XSA9IGpzQm9vbGVh
bihyW3NyY10uanNWYWx1ZShleGVjKS0+aXNCb29sZWFuKCkpOworICAgICAgICBjYWxsRnJhbWUt
PnJlZ2lzdGVycygpW2RzdF0gPSBqc0Jvb2xlYW4oY2FsbEZyYW1lLT5yZWdpc3RlcnMoKVtzcmNd
LmpzVmFsdWUoY2FsbEZyYW1lKS0+aXNCb29sZWFuKCkpOwogCiAgICAgICAgICsrdlBDOwogICAg
ICAgICBORVhUX09QQ09ERTsKQEAgLTIyMTQsNyArMjE5Nyw3IEBAIEpTVmFsdWUqIE1hY2hpbmU6
OnByaXZhdGVFeGVjdXRlKEV4ZWN1dGkKICAgICAgICAgKi8KICAgICAgICAgaW50IGRzdCA9ICgr
K3ZQQyktPnUub3BlcmFuZDsKICAgICAgICAgaW50IHNyYyA9ICgrK3ZQQyktPnUub3BlcmFuZDsK
LSAgICAgICAgcltkc3RdID0ganNCb29sZWFuKHJbc3JjXS5qc1ZhbHVlKGV4ZWMpLT5pc051bWJl
cigpKTsKKyAgICAgICAgY2FsbEZyYW1lLT5yZWdpc3RlcnMoKVtkc3RdID0ganNCb29sZWFuKGNh
bGxGcmFtZS0+cmVnaXN0ZXJzKClbc3JjXS5qc1ZhbHVlKGNhbGxGcmFtZSktPmlzTnVtYmVyKCkp
OwogCiAgICAgICAgICsrdlBDOwogICAgICAgICBORVhUX09QQ09ERTsKQEAgLTIyMjgsNyArMjIx
MSw3IEBAIEpTVmFsdWUqIE1hY2hpbmU6OnByaXZhdGVFeGVjdXRlKEV4ZWN1dGkKICAgICAgICAg
Ki8KICAgICAgICAgaW50IGRzdCA9ICgrK3ZQQyktPnUub3BlcmFuZDsKICAgICAgICAgaW50IHNy
YyA9ICgrK3ZQQyktPnUub3BlcmFuZDsKLSAgICAgICAgcltkc3RdID0ganNCb29sZWFuKHJbc3Jj
XS5qc1ZhbHVlKGV4ZWMpLT5pc1N0cmluZygpKTsKKyAgICAgICAgY2FsbEZyYW1lLT5yZWdpc3Rl
cnMoKVtkc3RdID0ganNCb29sZWFuKGNhbGxGcmFtZS0+cmVnaXN0ZXJzKClbc3JjXS5qc1ZhbHVl
KGNhbGxGcmFtZSktPmlzU3RyaW5nKCkpOwogCiAgICAgICAgICsrdlBDOwogICAgICAgICBORVhU
X09QQ09ERTsKQEAgLTIyNDIsNyArMjIyNSw3IEBAIEpTVmFsdWUqIE1hY2hpbmU6OnByaXZhdGVF
eGVjdXRlKEV4ZWN1dGkKICAgICAgICAgKi8KICAgICAgICAgaW50IGRzdCA9ICgrK3ZQQyktPnUu
b3BlcmFuZDsKICAgICAgICAgaW50IHNyYyA9ICgrK3ZQQyktPnUub3BlcmFuZDsKLSAgICAgICAg
cltkc3RdID0ganNCb29sZWFuKGpzSXNPYmplY3RUeXBlKHJbc3JjXS5qc1ZhbHVlKGV4ZWMpKSk7
CisgICAgICAgIGNhbGxGcmFtZS0+cmVnaXN0ZXJzKClbZHN0XSA9IGpzQm9vbGVhbihqc0lzT2Jq
ZWN0VHlwZShjYWxsRnJhbWUtPnJlZ2lzdGVycygpW3NyY10uanNWYWx1ZShjYWxsRnJhbWUpKSk7
CiAKICAgICAgICAgKyt2UEM7CiAgICAgICAgIE5FWFRfT1BDT0RFOwpAQCAtMjI1Niw3ICsyMjM5
LDcgQEAgSlNWYWx1ZSogTWFjaGluZTo6cHJpdmF0ZUV4ZWN1dGUoRXhlY3V0aQogICAgICAgICAq
LwogICAgICAgICBpbnQgZHN0ID0gKCsrdlBDKS0+dS5vcGVyYW5kOwogICAgICAgICBpbnQgc3Jj
ID0gKCsrdlBDKS0+dS5vcGVyYW5kOwotICAgICAgICByW2RzdF0gPSBqc0Jvb2xlYW4oanNJc0Z1
bmN0aW9uVHlwZShyW3NyY10uanNWYWx1ZShleGVjKSkpOworICAgICAgICBjYWxsRnJhbWUtPnJl
Z2lzdGVycygpW2RzdF0gPSBqc0Jvb2xlYW4oanNJc0Z1bmN0aW9uVHlwZShjYWxsRnJhbWUtPnJl
Z2lzdGVycygpW3NyY10uanNWYWx1ZShjYWxsRnJhbWUpKSk7CiAKICAgICAgICAgKyt2UEM7CiAg
ICAgICAgIE5FWFRfT1BDT0RFOwpAQCAtMjI3NCwyMSArMjI1NywyMSBAQCBKU1ZhbHVlKiBNYWNo
aW5lOjpwcml2YXRlRXhlY3V0ZShFeGVjdXRpCiAgICAgICAgIGludCBwcm9wZXJ0eSA9ICgrK3ZQ
QyktPnUub3BlcmFuZDsKICAgICAgICAgaW50IGJhc2UgPSAoKyt2UEMpLT51Lm9wZXJhbmQ7CiAK
LSAgICAgICAgSlNWYWx1ZSogYmFzZVZhbCA9IHJbYmFzZV0uanNWYWx1ZShleGVjKTsKLSAgICAg
ICAgaWYgKGlzTm90T2JqZWN0KGV4ZWMsIGZhbHNlLCBjb2RlQmxvY2sociksIHZQQywgYmFzZVZh
bCwgZXhjZXB0aW9uVmFsdWUpKQorICAgICAgICBKU1ZhbHVlKiBiYXNlVmFsID0gY2FsbEZyYW1l
LT5yZWdpc3RlcnMoKVtiYXNlXS5qc1ZhbHVlKGNhbGxGcmFtZSk7CisgICAgICAgIGlmIChpc05v
dE9iamVjdChjYWxsRnJhbWUsIGZhbHNlLCBjYWxsRnJhbWUtPmNvZGVCbG9jaygpLCB2UEMsIGJh
c2VWYWwsIGV4Y2VwdGlvblZhbHVlKSkKICAgICAgICAgICAgIGdvdG8gdm1fdGhyb3c7CiAKICAg
ICAgICAgSlNPYmplY3QqIGJhc2VPYmogPSBzdGF0aWNfY2FzdDxKU09iamVjdCo+KGJhc2VWYWwp
OwogCi0gICAgICAgIEpTVmFsdWUqIHByb3BOYW1lID0gcltwcm9wZXJ0eV0uanNWYWx1ZShleGVj
KTsKKyAgICAgICAgSlNWYWx1ZSogcHJvcE5hbWUgPSBjYWxsRnJhbWUtPnJlZ2lzdGVycygpW3By
b3BlcnR5XS5qc1ZhbHVlKGNhbGxGcmFtZSk7CiAKICAgICAgICAgdWludDMyX3QgaTsKICAgICAg
ICAgaWYgKHByb3BOYW1lLT5nZXRVSW50MzIoaSkpCi0gICAgICAgICAgICByW2RzdF0gPSBqc0Jv
b2xlYW4oYmFzZU9iai0+aGFzUHJvcGVydHkoZXhlYywgaSkpOworICAgICAgICAgICAgY2FsbEZy
YW1lLT5yZWdpc3RlcnMoKVtkc3RdID0ganNCb29sZWFuKGJhc2VPYmotPmhhc1Byb3BlcnR5KGNh
bGxGcmFtZSwgaSkpOwogICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIElkZW50aWZpZXIgcHJv
cGVydHkoZXhlYywgcHJvcE5hbWUtPnRvU3RyaW5nKGV4ZWMpKTsKKyAgICAgICAgICAgIElkZW50
aWZpZXIgcHJvcGVydHkoY2FsbEZyYW1lLCBwcm9wTmFtZS0+dG9TdHJpbmcoY2FsbEZyYW1lKSk7
CiAgICAgICAgICAgICBWTV9DSEVDS19FWENFUFRJT04oKTsKLSAgICAgICAgICAgIHJbZHN0XSA9
IGpzQm9vbGVhbihiYXNlT2JqLT5oYXNQcm9wZXJ0eShleGVjLCBwcm9wZXJ0eSkpOworICAgICAg
ICAgICAgY2FsbEZyYW1lLT5yZWdpc3RlcnMoKVtkc3RdID0ganNCb29sZWFuKGJhc2VPYmotPmhh
c1Byb3BlcnR5KGNhbGxGcmFtZSwgcHJvcGVydHkpKTsKICAgICAgICAgfQogCiAgICAgICAgICsr
dlBDOwpAQCAtMjMwMSw3ICsyMjg0LDcgQEAgSlNWYWx1ZSogTWFjaGluZTo6cHJpdmF0ZUV4ZWN1
dGUoRXhlY3V0aQogICAgICAgICAgICBzY29wZSBjaGFpbiwgYW5kIHdyaXRlcyB0aGUgcmVzdWx0
aW5nIHZhbHVlIHRvIHJlZ2lzdGVyCiAgICAgICAgICAgIGRzdC4gSWYgdGhlIHByb3BlcnR5IGlz
IG5vdCBmb3VuZCwgcmFpc2VzIGFuIGV4Y2VwdGlvbi4KICAgICAgICAgKi8KLSAgICAgICAgaWYg
KFVOTElLRUxZKCFyZXNvbHZlKGV4ZWMsIHZQQywgciwgZXhjZXB0aW9uVmFsdWUpKSkKKyAgICAg
ICAgaWYgKFVOTElLRUxZKCFyZXNvbHZlKGNhbGxGcmFtZSwgdlBDLCBleGNlcHRpb25WYWx1ZSkp
KQogICAgICAgICAgICAgZ290byB2bV90aHJvdzsKIAogICAgICAgICB2UEMgKz0gMzsKQEAgLTIz
MTQsNyArMjI5Nyw3IEBAIEpTVmFsdWUqIE1hY2hpbmU6OnByaXZhdGVFeGVjdXRlKEV4ZWN1dGkK
ICAgICAgICAgIHNjb3BlIGNoYWluIHNraXBwaW5nIHRoZSB0b3AgJ3NraXAnIGxldmVscywgYW5k
IHdyaXRlcyB0aGUgcmVzdWx0aW5nCiAgICAgICAgICB2YWx1ZSB0byByZWdpc3RlciBkc3QuIElm
IHRoZSBwcm9wZXJ0eSBpcyBub3QgZm91bmQsIHJhaXNlcyBhbiBleGNlcHRpb24uCiAgICAgICAg
ICAqLwotICAgICAgICBpZiAoVU5MSUtFTFkoIXJlc29sdmVTa2lwKGV4ZWMsIHZQQywgciwgZXhj
ZXB0aW9uVmFsdWUpKSkKKyAgICAgICAgaWYgKFVOTElLRUxZKCFyZXNvbHZlU2tpcChjYWxsRnJh
bWUsIHZQQywgZXhjZXB0aW9uVmFsdWUpKSkKICAgICAgICAgICAgIGdvdG8gdm1fdGhyb3c7CiAK
ICAgICAgICAgdlBDICs9IDQ7CkBAIC0yMzI5LDcgKzIzMTIsNyBAQCBKU1ZhbHVlKiBNYWNoaW5l
Ojpwcml2YXRlRXhlY3V0ZShFeGVjdXRpCiAgICAgICAgICAgIGEgZmFzdCBsb29rdXAgdXNpbmcg
dGhlIGNhc2Ugb2Zmc2V0LCBvdGhlcndpc2UgZmFsbCBiYWNrIHRvIGEgZnVsbCByZXNvbHZlIGFu
ZAogICAgICAgICAgICBjYWNoZSB0aGUgbmV3IHN0cnVjdHVyZUlEIGFuZCBvZmZzZXQKICAgICAg
ICAgICovCi0gICAgICAgIGlmIChVTkxJS0VMWSghcmVzb2x2ZUdsb2JhbChleGVjLCB2UEMsIHIs
ICBleGNlcHRpb25WYWx1ZSkpKQorICAgICAgICBpZiAoVU5MSUtFTFkoIXJlc29sdmVHbG9iYWwo
Y2FsbEZyYW1lLCB2UEMsIGV4Y2VwdGlvblZhbHVlKSkpCiAgICAgICAgICAgICBnb3RvIHZtX3Ro
cm93OwogICAgICAgICAKICAgICAgICAgdlBDICs9IDY7CkBAIC0yMzQ2LDcgKzIzMjksNyBAQCBK
U1ZhbHVlKiBNYWNoaW5lOjpwcml2YXRlRXhlY3V0ZShFeGVjdXRpCiAgICAgICAgIEFTU0VSVChz
Y29wZS0+aXNHbG9iYWxPYmplY3QoKSk7CiAgICAgICAgIGludCBpbmRleCA9ICgrK3ZQQyktPnUu
b3BlcmFuZDsKIAotICAgICAgICByW2RzdF0gPSBzY29wZS0+cmVnaXN0ZXJBdChpbmRleCk7Cisg
ICAgICAgIGNhbGxGcmFtZS0+cmVnaXN0ZXJzKClbZHN0XSA9IHNjb3BlLT5yZWdpc3RlckF0KGlu
ZGV4KTsKICAgICAgICAgKyt2UEM7CiAgICAgICAgIE5FWFRfT1BDT0RFOwogICAgIH0KQEAgLTIz
NjAsNyArMjM0Myw3IEBAIEpTVmFsdWUqIE1hY2hpbmU6OnByaXZhdGVFeGVjdXRlKEV4ZWN1dGkK
ICAgICAgICAgaW50IGluZGV4ID0gKCsrdlBDKS0+dS5vcGVyYW5kOwogICAgICAgICBpbnQgdmFs
dWUgPSAoKyt2UEMpLT51Lm9wZXJhbmQ7CiAgICAgICAgIAotICAgICAgICBzY29wZS0+cmVnaXN0
ZXJBdChpbmRleCkgPSByW3ZhbHVlXS5qc1ZhbHVlKGV4ZWMpOworICAgICAgICBzY29wZS0+cmVn
aXN0ZXJBdChpbmRleCkgPSBjYWxsRnJhbWUtPnJlZ2lzdGVycygpW3ZhbHVlXS5qc1ZhbHVlKGNh
bGxGcmFtZSk7CiAgICAgICAgICsrdlBDOwogICAgICAgICBORVhUX09QQ09ERTsKICAgICB9ICAg
ICAgICAgICAgCkBAIC0yMzcyLDkgKzIzNTUsOSBAQCBKU1ZhbHVlKiBNYWNoaW5lOjpwcml2YXRl
RXhlY3V0ZShFeGVjdXRpCiAgICAgICAgICAqLwogICAgICAgICBpbnQgZHN0ID0gKCsrdlBDKS0+
dS5vcGVyYW5kOwogICAgICAgICBpbnQgaW5kZXggPSAoKyt2UEMpLT51Lm9wZXJhbmQ7Ci0gICAg
ICAgIGludCBza2lwID0gKCsrdlBDKS0+dS5vcGVyYW5kICsgY29kZUJsb2NrKHIpLT5uZWVkc0Z1
bGxTY29wZUNoYWluOworICAgICAgICBpbnQgc2tpcCA9ICgrK3ZQQyktPnUub3BlcmFuZCArIGNh
bGxGcmFtZS0+Y29kZUJsb2NrKCktPm5lZWRzRnVsbFNjb3BlQ2hhaW47CiAKLSAgICAgICAgU2Nv
cGVDaGFpbk5vZGUqIHNjb3BlQ2hhaW4gPSB0aGlzLT5zY29wZUNoYWluKHIpOworICAgICAgICBT
Y29wZUNoYWluTm9kZSogc2NvcGVDaGFpbiA9IGNhbGxGcmFtZS0+c2NvcGVDaGFpbigpOwogICAg
ICAgICBTY29wZUNoYWluSXRlcmF0b3IgaXRlciA9IHNjb3BlQ2hhaW4tPmJlZ2luKCk7CiAgICAg
ICAgIFNjb3BlQ2hhaW5JdGVyYXRvciBlbmQgPSBzY29wZUNoYWluLT5lbmQoKTsKICAgICAgICAg
QVNTRVJUKGl0ZXIgIT0gZW5kKTsKQEAgLTIzODUsNyArMjM2OCw3IEBAIEpTVmFsdWUqIE1hY2hp
bmU6OnByaXZhdGVFeGVjdXRlKEV4ZWN1dGkKIAogICAgICAgICBBU1NFUlQoKCppdGVyKS0+aXNW
YXJpYWJsZU9iamVjdCgpKTsKICAgICAgICAgSlNWYXJpYWJsZU9iamVjdCogc2NvcGUgPSBzdGF0
aWNfY2FzdDxKU1ZhcmlhYmxlT2JqZWN0Kj4oKml0ZXIpOwotICAgICAgICByW2RzdF0gPSBzY29w
ZS0+cmVnaXN0ZXJBdChpbmRleCk7CisgICAgICAgIGNhbGxGcmFtZS0+cmVnaXN0ZXJzKClbZHN0
XSA9IHNjb3BlLT5yZWdpc3RlckF0KGluZGV4KTsKICAgICAgICAgKyt2UEM7CiAgICAgICAgIE5F
WFRfT1BDT0RFOwogICAgIH0KQEAgLTIzOTQsMTAgKzIzNzcsMTAgQEAgSlNWYWx1ZSogTWFjaGlu
ZTo6cHJpdmF0ZUV4ZWN1dGUoRXhlY3V0aQogCiAgICAgICAgICAqLwogICAgICAgICBpbnQgaW5k
ZXggPSAoKyt2UEMpLT51Lm9wZXJhbmQ7Ci0gICAgICAgIGludCBza2lwID0gKCsrdlBDKS0+dS5v
cGVyYW5kICsgY29kZUJsb2NrKHIpLT5uZWVkc0Z1bGxTY29wZUNoYWluOworICAgICAgICBpbnQg
c2tpcCA9ICgrK3ZQQyktPnUub3BlcmFuZCArIGNhbGxGcmFtZS0+Y29kZUJsb2NrKCktPm5lZWRz
RnVsbFNjb3BlQ2hhaW47CiAgICAgICAgIGludCB2YWx1ZSA9ICgrK3ZQQyktPnUub3BlcmFuZDsK
IAotICAgICAgICBTY29wZUNoYWluTm9kZSogc2NvcGVDaGFpbiA9IHRoaXMtPnNjb3BlQ2hhaW4o
cik7CisgICAgICAgIFNjb3BlQ2hhaW5Ob2RlKiBzY29wZUNoYWluID0gY2FsbEZyYW1lLT5zY29w
ZUNoYWluKCk7CiAgICAgICAgIFNjb3BlQ2hhaW5JdGVyYXRvciBpdGVyID0gc2NvcGVDaGFpbi0+
YmVnaW4oKTsKICAgICAgICAgU2NvcGVDaGFpbkl0ZXJhdG9yIGVuZCA9IHNjb3BlQ2hhaW4tPmVu
ZCgpOwogICAgICAgICBBU1NFUlQoaXRlciAhPSBlbmQpOwpAQCAtMjQwOCw3ICsyMzkxLDcgQEAg
SlNWYWx1ZSogTWFjaGluZTo6cHJpdmF0ZUV4ZWN1dGUoRXhlY3V0aQogCiAgICAgICAgIEFTU0VS
VCgoKml0ZXIpLT5pc1ZhcmlhYmxlT2JqZWN0KCkpOwogICAgICAgICBKU1ZhcmlhYmxlT2JqZWN0
KiBzY29wZSA9IHN0YXRpY19jYXN0PEpTVmFyaWFibGVPYmplY3QqPigqaXRlcik7Ci0gICAgICAg
IHNjb3BlLT5yZWdpc3RlckF0KGluZGV4KSA9IHJbdmFsdWVdLmpzVmFsdWUoZXhlYyk7CisgICAg
ICAgIHNjb3BlLT5yZWdpc3RlckF0KGluZGV4KSA9IGNhbGxGcmFtZS0+cmVnaXN0ZXJzKClbdmFs
dWVdLmpzVmFsdWUoY2FsbEZyYW1lKTsKICAgICAgICAgKyt2UEM7CiAgICAgICAgIE5FWFRfT1BD
T0RFOwogICAgIH0KQEAgLTI0MjAsNyArMjQwMyw3IEBAIEpTVmFsdWUqIE1hY2hpbmU6OnByaXZh
dGVFeGVjdXRlKEV4ZWN1dGkKICAgICAgICAgICAgcmVnaXN0ZXIgZHN0LiBJZiBub25lIGlzIGZv
dW5kLCB0aGUgb3V0ZXJtb3N0IHNjb3BlICh3aGljaAogICAgICAgICAgICB3aWxsIGJlIHRoZSBn
bG9iYWwgb2JqZWN0KSBpcyBzdG9yZWQgaW4gcmVnaXN0ZXIgZHN0LgogICAgICAgICAqLwotICAg
ICAgICByZXNvbHZlQmFzZShleGVjLCB2UEMsIHIpOworICAgICAgICByZXNvbHZlQmFzZShjYWxs
RnJhbWUsIHZQQyk7CiAKICAgICAgICAgdlBDICs9IDM7CiAgICAgICAgIE5FWFRfT1BDT0RFOwpA
QCAtMjQzNyw3ICsyNDIwLDcgQEAgSlNWYWx1ZSogTWFjaGluZTo6cHJpdmF0ZUV4ZWN1dGUoRXhl
Y3V0aQogICAgICAgICAgICByZXNvbHZlLCBvciByZXNvbHZlX2Jhc2UgZm9sbG93ZWQgYnkgZ2V0
X2J5X2lkLCBhcyBpdAogICAgICAgICAgICBhdm9pZHMgZHVwbGljYXRlIGhhc2ggbG9va3Vwcy4K
ICAgICAgICAgKi8KLSAgICAgICAgaWYgKFVOTElLRUxZKCFyZXNvbHZlQmFzZUFuZFByb3BlcnR5
KGV4ZWMsIHZQQywgciwgZXhjZXB0aW9uVmFsdWUpKSkKKyAgICAgICAgaWYgKFVOTElLRUxZKCFy
ZXNvbHZlQmFzZUFuZFByb3BlcnR5KGNhbGxGcmFtZSwgdlBDLCBleGNlcHRpb25WYWx1ZSkpKQog
ICAgICAgICAgICAgZ290byB2bV90aHJvdzsKIAogICAgICAgICB2UEMgKz0gNDsKQEAgLTI0NTgs
NyArMjQ0MSw3IEBAIEpTVmFsdWUqIE1hY2hpbmU6OnByaXZhdGVFeGVjdXRlKEV4ZWN1dGkKICAg
ICAgICAgICAgdGhlIGdsb2JhbCBvYmplY3QsIHdoaWNoIGlzIHRoZSByaWdodCBiZWhhdmlvciBm
b3IgZnVuY3Rpb24KICAgICAgICAgICAgY2FsbHMgYnV0IG5vdCBmb3Igb3RoZXIgcHJvcGVydHkg
bG9va3VwLgogICAgICAgICAqLwotICAgICAgICBpZiAoVU5MSUtFTFkoIXJlc29sdmVCYXNlQW5k
RnVuYyhleGVjLCB2UEMsIHIsIGV4Y2VwdGlvblZhbHVlKSkpCisgICAgICAgIGlmIChVTkxJS0VM
WSghcmVzb2x2ZUJhc2VBbmRGdW5jKGNhbGxGcmFtZSwgdlBDLCBleGNlcHRpb25WYWx1ZSkpKQog
ICAgICAgICAgICAgZ290byB2bV90aHJvdzsKIAogICAgICAgICB2UEMgKz0gNDsKQEAgLTI0NzQs
MTYgKzI0NTcsMTYgQEAgSlNWYWx1ZSogTWFjaGluZTo6cHJpdmF0ZUV4ZWN1dGUoRXhlY3V0aQog
ICAgICAgICBpbnQgYmFzZSA9IHZQQ1syXS51Lm9wZXJhbmQ7CiAgICAgICAgIGludCBwcm9wZXJ0
eSA9IHZQQ1szXS51Lm9wZXJhbmQ7CiAKLSAgICAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSB0
aGlzLT5jb2RlQmxvY2socik7CisgICAgICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gY2FsbEZy
YW1lLT5jb2RlQmxvY2soKTsKICAgICAgICAgSWRlbnRpZmllciYgaWRlbnQgPSBjb2RlQmxvY2st
PmlkZW50aWZpZXJzW3Byb3BlcnR5XTsKLSAgICAgICAgSlNWYWx1ZSogYmFzZVZhbHVlID0gclti
YXNlXS5qc1ZhbHVlKGV4ZWMpOworICAgICAgICBKU1ZhbHVlKiBiYXNlVmFsdWUgPSBjYWxsRnJh
bWUtPnJlZ2lzdGVycygpW2Jhc2VdLmpzVmFsdWUoY2FsbEZyYW1lKTsKICAgICAgICAgUHJvcGVy
dHlTbG90IHNsb3QoYmFzZVZhbHVlKTsKLSAgICAgICAgSlNWYWx1ZSogcmVzdWx0ID0gYmFzZVZh
bHVlLT5nZXQoZXhlYywgaWRlbnQsIHNsb3QpOworICAgICAgICBKU1ZhbHVlKiByZXN1bHQgPSBi
YXNlVmFsdWUtPmdldChjYWxsRnJhbWUsIGlkZW50LCBzbG90KTsKICAgICAgICAgVk1fQ0hFQ0tf
RVhDRVBUSU9OKCk7CiAKLSAgICAgICAgdHJ5Q2FjaGVHZXRCeUlEKGV4ZWMsIGNvZGVCbG9jaywg
dlBDLCBiYXNlVmFsdWUsIGlkZW50LCBzbG90KTsKKyAgICAgICAgdHJ5Q2FjaGVHZXRCeUlEKGNh
bGxGcmFtZSwgY29kZUJsb2NrLCB2UEMsIGJhc2VWYWx1ZSwgaWRlbnQsIHNsb3QpOwogCi0gICAg
ICAgIHJbZHN0XSA9IHJlc3VsdDsKKyAgICAgICAgY2FsbEZyYW1lLT5yZWdpc3RlcnMoKVtkc3Rd
ID0gcmVzdWx0OwogICAgICAgICB2UEMgKz0gODsKICAgICAgICAgTkVYVF9PUENPREU7CiAgICAg
fQpAQCAtMjQ5NSw3ICsyNDc4LDcgQEAgSlNWYWx1ZSogTWFjaGluZTo6cHJpdmF0ZUV4ZWN1dGUo
RXhlY3V0aQogICAgICAgICAgICBvcF9nZXRfYnlfaWQuCiAgICAgICAgICovCiAgICAgICAgIGlu
dCBiYXNlID0gdlBDWzJdLnUub3BlcmFuZDsKLSAgICAgICAgSlNWYWx1ZSogYmFzZVZhbHVlID0g
cltiYXNlXS5qc1ZhbHVlKGV4ZWMpOworICAgICAgICBKU1ZhbHVlKiBiYXNlVmFsdWUgPSBjYWxs
RnJhbWUtPnJlZ2lzdGVycygpW2Jhc2VdLmpzVmFsdWUoY2FsbEZyYW1lKTsKIAogICAgICAgICBp
ZiAoTElLRUxZKCFKU0ltbWVkaWF0ZTo6aXNJbW1lZGlhdGUoYmFzZVZhbHVlKSkpIHsKICAgICAg
ICAgICAgIEpTQ2VsbCogYmFzZUNlbGwgPSBzdGF0aWNfY2FzdDxKU0NlbGwqPihiYXNlVmFsdWUp
OwpAQCAtMjUwNywxNSArMjQ5MCwxNSBAQCBKU1ZhbHVlKiBNYWNoaW5lOjpwcml2YXRlRXhlY3V0
ZShFeGVjdXRpCiAgICAgICAgICAgICAgICAgaW50IGRzdCA9IHZQQ1sxXS51Lm9wZXJhbmQ7CiAg
ICAgICAgICAgICAgICAgaW50IG9mZnNldCA9IHZQQ1s1XS51Lm9wZXJhbmQ7CiAKLSAgICAgICAg
ICAgICAgICBBU1NFUlQoYmFzZU9iamVjdC0+Z2V0KGV4ZWMsIGNvZGVCbG9jayhyKS0+aWRlbnRp
ZmllcnNbdlBDWzNdLnUub3BlcmFuZF0pID09IGJhc2VPYmplY3QtPmdldERpcmVjdE9mZnNldChv
ZmZzZXQpKTsKLSAgICAgICAgICAgICAgICByW2RzdF0gPSBiYXNlT2JqZWN0LT5nZXREaXJlY3RP
ZmZzZXQob2Zmc2V0KTsKKyAgICAgICAgICAgICAgICBBU1NFUlQoYmFzZU9iamVjdC0+Z2V0KGNh
bGxGcmFtZSwgY2FsbEZyYW1lLT5jb2RlQmxvY2soKS0+aWRlbnRpZmllcnNbdlBDWzNdLnUub3Bl
cmFuZF0pID09IGJhc2VPYmplY3QtPmdldERpcmVjdE9mZnNldChvZmZzZXQpKTsKKyAgICAgICAg
ICAgICAgICBjYWxsRnJhbWUtPnJlZ2lzdGVycygpW2RzdF0gPSBiYXNlT2JqZWN0LT5nZXREaXJl
Y3RPZmZzZXQob2Zmc2V0KTsKIAogICAgICAgICAgICAgICAgIHZQQyArPSA4OwogICAgICAgICAg
ICAgICAgIE5FWFRfT1BDT0RFOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAKLSAgICAgICAg
dW5jYWNoZUdldEJ5SUQoY29kZUJsb2NrKHIpLCB2UEMpOworICAgICAgICB1bmNhY2hlR2V0QnlJ
RChjYWxsRnJhbWUtPmNvZGVCbG9jaygpLCB2UEMpOwogICAgICAgICBORVhUX09QQ09ERTsKICAg
ICB9CiAgICAgQkVHSU5fT1BDT0RFKG9wX2dldF9ieV9pZF9wcm90bykgewpAQCAtMjUyNiwyMyAr
MjUwOSwyMyBAQCBKU1ZhbHVlKiBNYWNoaW5lOjpwcml2YXRlRXhlY3V0ZShFeGVjdXRpCiAgICAg
ICAgICAgIHJldmVydHMgdG8gb3BfZ2V0X2J5X2lkLgogICAgICAgICAqLwogICAgICAgICBpbnQg
YmFzZSA9IHZQQ1syXS51Lm9wZXJhbmQ7Ci0gICAgICAgIEpTVmFsdWUqIGJhc2VWYWx1ZSA9IHJb
YmFzZV0uanNWYWx1ZShleGVjKTsKKyAgICAgICAgSlNWYWx1ZSogYmFzZVZhbHVlID0gY2FsbEZy
YW1lLT5yZWdpc3RlcnMoKVtiYXNlXS5qc1ZhbHVlKGNhbGxGcmFtZSk7CiAKICAgICAgICAgaWYg
KExJS0VMWSghSlNJbW1lZGlhdGU6OmlzSW1tZWRpYXRlKGJhc2VWYWx1ZSkpKSB7CiAgICAgICAg
ICAgICBKU0NlbGwqIGJhc2VDZWxsID0gc3RhdGljX2Nhc3Q8SlNDZWxsKj4oYmFzZVZhbHVlKTsK
ICAgICAgICAgICAgIFN0cnVjdHVyZUlEKiBzdHJ1Y3R1cmVJRCA9IHZQQ1s0XS51LnN0cnVjdHVy
ZUlEOwogCiAgICAgICAgICAgICBpZiAoTElLRUxZKGJhc2VDZWxsLT5zdHJ1Y3R1cmVJRCgpID09
IHN0cnVjdHVyZUlEKSkgewotICAgICAgICAgICAgICAgIEFTU0VSVChzdHJ1Y3R1cmVJRC0+cHJv
dG90eXBlRm9yTG9va3VwKGV4ZWMpLT5pc09iamVjdCgpKTsKLSAgICAgICAgICAgICAgICBKU09i
amVjdCogcHJvdG9PYmplY3QgPSBzdGF0aWNfY2FzdDxKU09iamVjdCo+KHN0cnVjdHVyZUlELT5w
cm90b3R5cGVGb3JMb29rdXAoZXhlYykpOworICAgICAgICAgICAgICAgIEFTU0VSVChzdHJ1Y3R1
cmVJRC0+cHJvdG90eXBlRm9yTG9va3VwKGNhbGxGcmFtZSktPmlzT2JqZWN0KCkpOworICAgICAg
ICAgICAgICAgIEpTT2JqZWN0KiBwcm90b09iamVjdCA9IHN0YXRpY19jYXN0PEpTT2JqZWN0Kj4o
c3RydWN0dXJlSUQtPnByb3RvdHlwZUZvckxvb2t1cChjYWxsRnJhbWUpKTsKICAgICAgICAgICAg
ICAgICBTdHJ1Y3R1cmVJRCogcHJvdG9TdHJ1Y3R1cmVJRCA9IHZQQ1s1XS51LnN0cnVjdHVyZUlE
OwogCiAgICAgICAgICAgICAgICAgaWYgKExJS0VMWShwcm90b09iamVjdC0+c3RydWN0dXJlSUQo
KSA9PSBwcm90b1N0cnVjdHVyZUlEKSkgewogICAgICAgICAgICAgICAgICAgICBpbnQgZHN0ID0g
dlBDWzFdLnUub3BlcmFuZDsKICAgICAgICAgICAgICAgICAgICAgaW50IG9mZnNldCA9IHZQQ1s2
XS51Lm9wZXJhbmQ7CiAKLSAgICAgICAgICAgICAgICAgICAgQVNTRVJUKHByb3RvT2JqZWN0LT5n
ZXQoZXhlYywgY29kZUJsb2NrKHIpLT5pZGVudGlmaWVyc1t2UENbM10udS5vcGVyYW5kXSkgPT0g
cHJvdG9PYmplY3QtPmdldERpcmVjdE9mZnNldChvZmZzZXQpKTsKLSAgICAgICAgICAgICAgICAg
ICAgcltkc3RdID0gcHJvdG9PYmplY3QtPmdldERpcmVjdE9mZnNldChvZmZzZXQpOworICAgICAg
ICAgICAgICAgICAgICBBU1NFUlQocHJvdG9PYmplY3QtPmdldChjYWxsRnJhbWUsIGNhbGxGcmFt
ZS0+Y29kZUJsb2NrKCktPmlkZW50aWZpZXJzW3ZQQ1szXS51Lm9wZXJhbmRdKSA9PSBwcm90b09i
amVjdC0+Z2V0RGlyZWN0T2Zmc2V0KG9mZnNldCkpOworICAgICAgICAgICAgICAgICAgICBjYWxs
RnJhbWUtPnJlZ2lzdGVycygpW2RzdF0gPSBwcm90b09iamVjdC0+Z2V0RGlyZWN0T2Zmc2V0KG9m
ZnNldCk7CiAKICAgICAgICAgICAgICAgICAgICAgdlBDICs9IDg7CiAgICAgICAgICAgICAgICAg
ICAgIE5FWFRfT1BDT0RFOwpAQCAtMjU1MCw3ICsyNTMzLDcgQEAgSlNWYWx1ZSogTWFjaGluZTo6
cHJpdmF0ZUV4ZWN1dGUoRXhlY3V0aQogICAgICAgICAgICAgfQogICAgICAgICB9CiAKLSAgICAg
ICAgdW5jYWNoZUdldEJ5SUQoY29kZUJsb2NrKHIpLCB2UEMpOworICAgICAgICB1bmNhY2hlR2V0
QnlJRChjYWxsRnJhbWUtPmNvZGVCbG9jaygpLCB2UEMpOwogICAgICAgICBORVhUX09QQ09ERTsK
ICAgICB9CiAgICAgQkVHSU5fT1BDT0RFKG9wX2dldF9ieV9pZF9jaGFpbikgewpAQCAtMjU2MSw3
ICsyNTQ0LDcgQEAgSlNWYWx1ZSogTWFjaGluZTo6cHJpdmF0ZUV4ZWN1dGUoRXhlY3V0aQogICAg
ICAgICAgICByZXZlcnRzIHRvIG9wX2dldF9ieV9pZC4KICAgICAgICAgKi8KICAgICAgICAgaW50
IGJhc2UgPSB2UENbMl0udS5vcGVyYW5kOwotICAgICAgICBKU1ZhbHVlKiBiYXNlVmFsdWUgPSBy
W2Jhc2VdLmpzVmFsdWUoZXhlYyk7CisgICAgICAgIEpTVmFsdWUqIGJhc2VWYWx1ZSA9IGNhbGxG
cmFtZS0+cmVnaXN0ZXJzKClbYmFzZV0uanNWYWx1ZShjYWxsRnJhbWUpOwogCiAgICAgICAgIGlm
IChMSUtFTFkoIUpTSW1tZWRpYXRlOjppc0ltbWVkaWF0ZShiYXNlVmFsdWUpKSkgewogICAgICAg
ICAgICAgSlNDZWxsKiBiYXNlQ2VsbCA9IHN0YXRpY19jYXN0PEpTQ2VsbCo+KGJhc2VWYWx1ZSk7
CkBAIC0yNTc0LDcgKzI1NTcsNyBAQCBKU1ZhbHVlKiBNYWNoaW5lOjpwcml2YXRlRXhlY3V0ZShF
eGVjdXRpCiAKICAgICAgICAgICAgICAgICBKU09iamVjdCogYmFzZU9iamVjdCA9IHN0YXRpY19j
YXN0PEpTT2JqZWN0Kj4oYmFzZUNlbGwpOwogICAgICAgICAgICAgICAgIHdoaWxlICgxKSB7Ci0g
ICAgICAgICAgICAgICAgICAgIGJhc2VPYmplY3QgPSBzdGF0aWNfY2FzdDxKU09iamVjdCo+KGJh
c2VPYmplY3QtPnN0cnVjdHVyZUlEKCktPnByb3RvdHlwZUZvckxvb2t1cChleGVjKSk7CisgICAg
ICAgICAgICAgICAgICAgIGJhc2VPYmplY3QgPSBzdGF0aWNfY2FzdDxKU09iamVjdCo+KGJhc2VP
YmplY3QtPnN0cnVjdHVyZUlEKCktPnByb3RvdHlwZUZvckxvb2t1cChjYWxsRnJhbWUpKTsKICAg
ICAgICAgICAgICAgICAgICAgaWYgKFVOTElLRUxZKGJhc2VPYmplY3QtPnN0cnVjdHVyZUlEKCkg
IT0gKCppdCkuZ2V0KCkpKQogICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAKQEAgLTI1
ODIsOCArMjU2NSw4IEBAIEpTVmFsdWUqIE1hY2hpbmU6OnByaXZhdGVFeGVjdXRlKEV4ZWN1dGkK
ICAgICAgICAgICAgICAgICAgICAgICAgIGludCBkc3QgPSB2UENbMV0udS5vcGVyYW5kOwogICAg
ICAgICAgICAgICAgICAgICAgICAgaW50IG9mZnNldCA9IHZQQ1s3XS51Lm9wZXJhbmQ7CiAKLSAg
ICAgICAgICAgICAgICAgICAgICAgIEFTU0VSVChiYXNlT2JqZWN0LT5nZXQoZXhlYywgY29kZUJs
b2NrKHIpLT5pZGVudGlmaWVyc1t2UENbM10udS5vcGVyYW5kXSkgPT0gYmFzZU9iamVjdC0+Z2V0
RGlyZWN0T2Zmc2V0KG9mZnNldCkpOwotICAgICAgICAgICAgICAgICAgICAgICAgcltkc3RdID0g
YmFzZU9iamVjdC0+Z2V0RGlyZWN0T2Zmc2V0KG9mZnNldCk7CisgICAgICAgICAgICAgICAgICAg
ICAgICBBU1NFUlQoYmFzZU9iamVjdC0+Z2V0KGNhbGxGcmFtZSwgY2FsbEZyYW1lLT5jb2RlQmxv
Y2soKS0+aWRlbnRpZmllcnNbdlBDWzNdLnUub3BlcmFuZF0pID09IGJhc2VPYmplY3QtPmdldERp
cmVjdE9mZnNldChvZmZzZXQpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxGcmFtZS0+
cmVnaXN0ZXJzKClbZHN0XSA9IGJhc2VPYmplY3QtPmdldERpcmVjdE9mZnNldChvZmZzZXQpOwog
CiAgICAgICAgICAgICAgICAgICAgICAgICB2UEMgKz0gODsKICAgICAgICAgICAgICAgICAgICAg
ICAgIE5FWFRfT1BDT0RFOwpAQCAtMjU5Miw3ICsyNTc1LDcgQEAgSlNWYWx1ZSogTWFjaGluZTo6
cHJpdmF0ZUV4ZWN1dGUoRXhlY3V0aQogICAgICAgICAgICAgfQogICAgICAgICB9CiAKLSAgICAg
ICAgdW5jYWNoZUdldEJ5SUQoY29kZUJsb2NrKHIpLCB2UEMpOworICAgICAgICB1bmNhY2hlR2V0
QnlJRChjYWxsRnJhbWUtPmNvZGVCbG9jaygpLCB2UEMpOwogICAgICAgICBORVhUX09QQ09ERTsK
ICAgICB9CiAgICAgQkVHSU5fT1BDT0RFKG9wX2dldF9ieV9pZF9nZW5lcmljKSB7CkBAIC0yNjA1
LDEzICsyNTg4LDEzIEBAIEpTVmFsdWUqIE1hY2hpbmU6OnByaXZhdGVFeGVjdXRlKEV4ZWN1dGkK
ICAgICAgICAgaW50IGJhc2UgPSB2UENbMl0udS5vcGVyYW5kOwogICAgICAgICBpbnQgcHJvcGVy
dHkgPSB2UENbM10udS5vcGVyYW5kOwogCi0gICAgICAgIElkZW50aWZpZXImIGlkZW50ID0gY29k
ZUJsb2NrKHIpLT5pZGVudGlmaWVyc1twcm9wZXJ0eV07Ci0gICAgICAgIEpTVmFsdWUqIGJhc2VW
YWx1ZSA9IHJbYmFzZV0uanNWYWx1ZShleGVjKTsKKyAgICAgICAgSWRlbnRpZmllciYgaWRlbnQg
PSBjYWxsRnJhbWUtPmNvZGVCbG9jaygpLT5pZGVudGlmaWVyc1twcm9wZXJ0eV07CisgICAgICAg
IEpTVmFsdWUqIGJhc2VWYWx1ZSA9IGNhbGxGcmFtZS0+cmVnaXN0ZXJzKClbYmFzZV0uanNWYWx1
ZShjYWxsRnJhbWUpOwogICAgICAgICBQcm9wZXJ0eVNsb3Qgc2xvdChiYXNlVmFsdWUpOwotICAg
ICAgICBKU1ZhbHVlKiByZXN1bHQgPSBiYXNlVmFsdWUtPmdldChleGVjLCBpZGVudCwgc2xvdCk7
CisgICAgICAgIEpTVmFsdWUqIHJlc3VsdCA9IGJhc2VWYWx1ZS0+Z2V0KGNhbGxGcmFtZSwgaWRl
bnQsIHNsb3QpOwogICAgICAgICBWTV9DSEVDS19FWENFUFRJT04oKTsKIAotICAgICAgICByW2Rz
dF0gPSByZXN1bHQ7CisgICAgICAgIGNhbGxGcmFtZS0+cmVnaXN0ZXJzKClbZHN0XSA9IHJlc3Vs
dDsKICAgICAgICAgdlBDICs9IDg7CiAgICAgICAgIE5FWFRfT1BDT0RFOwogICAgIH0KQEAgLTI2
MjQsMTUgKzI2MDcsMTUgQEAgSlNWYWx1ZSogTWFjaGluZTo6cHJpdmF0ZUV4ZWN1dGUoRXhlY3V0
aQogICAgICAgICAqLwogCiAgICAgICAgIGludCBiYXNlID0gdlBDWzJdLnUub3BlcmFuZDsKLSAg
ICAgICAgSlNWYWx1ZSogYmFzZVZhbHVlID0gcltiYXNlXS5qc1ZhbHVlKGV4ZWMpOworICAgICAg
ICBKU1ZhbHVlKiBiYXNlVmFsdWUgPSBjYWxsRnJhbWUtPnJlZ2lzdGVycygpW2Jhc2VdLmpzVmFs
dWUoY2FsbEZyYW1lKTsKICAgICAgICAgaWYgKExJS0VMWShpc0pTQXJyYXkoYmFzZVZhbHVlKSkp
IHsKICAgICAgICAgICAgIGludCBkc3QgPSB2UENbMV0udS5vcGVyYW5kOwotICAgICAgICAgICAg
cltkc3RdID0ganNOdW1iZXIoZXhlYywgc3RhdGljX2Nhc3Q8SlNBcnJheSo+KGJhc2VWYWx1ZSkt
Pmxlbmd0aCgpKTsKKyAgICAgICAgICAgIGNhbGxGcmFtZS0+cmVnaXN0ZXJzKClbZHN0XSA9IGpz
TnVtYmVyKGNhbGxGcmFtZSwgc3RhdGljX2Nhc3Q8SlNBcnJheSo+KGJhc2VWYWx1ZSktPmxlbmd0
aCgpKTsKICAgICAgICAgICAgIHZQQyArPSA4OwogICAgICAgICAgICAgTkVYVF9PUENPREU7CiAg
ICAgICAgIH0KIAotICAgICAgICB1bmNhY2hlR2V0QnlJRChjb2RlQmxvY2sociksIHZQQyk7Cisg
ICAgICAgIHVuY2FjaGVHZXRCeUlEKGNhbGxGcmFtZS0+Y29kZUJsb2NrKCksIHZQQyk7CiAgICAg
ICAgIE5FWFRfT1BDT0RFOwogICAgIH0KICAgICBCRUdJTl9PUENPREUob3BfZ2V0X3N0cmluZ19s
ZW5ndGgpIHsKQEAgLTI2NDQsMTUgKzI2MjcsMTUgQEAgSlNWYWx1ZSogTWFjaGluZTo6cHJpdmF0
ZUV4ZWN1dGUoRXhlY3V0aQogICAgICAgICAqLwogCiAgICAgICAgIGludCBiYXNlID0gdlBDWzJd
LnUub3BlcmFuZDsKLSAgICAgICAgSlNWYWx1ZSogYmFzZVZhbHVlID0gcltiYXNlXS5qc1ZhbHVl
KGV4ZWMpOworICAgICAgICBKU1ZhbHVlKiBiYXNlVmFsdWUgPSBjYWxsRnJhbWUtPnJlZ2lzdGVy
cygpW2Jhc2VdLmpzVmFsdWUoY2FsbEZyYW1lKTsKICAgICAgICAgaWYgKExJS0VMWShpc0pTU3Ry
aW5nKGJhc2VWYWx1ZSkpKSB7CiAgICAgICAgICAgICBpbnQgZHN0ID0gdlBDWzFdLnUub3BlcmFu
ZDsKLSAgICAgICAgICAgIHJbZHN0XSA9IGpzTnVtYmVyKGV4ZWMsIHN0YXRpY19jYXN0PEpTU3Ry
aW5nKj4oYmFzZVZhbHVlKS0+dmFsdWUoKS5zaXplKCkpOworICAgICAgICAgICAgY2FsbEZyYW1l
LT5yZWdpc3RlcnMoKVtkc3RdID0ganNOdW1iZXIoY2FsbEZyYW1lLCBzdGF0aWNfY2FzdDxKU1N0
cmluZyo+KGJhc2VWYWx1ZSktPnZhbHVlKCkuc2l6ZSgpKTsKICAgICAgICAgICAgIHZQQyArPSA4
OwogICAgICAgICAgICAgTkVYVF9PUENPREU7CiAgICAgICAgIH0KIAotICAgICAgICB1bmNhY2hl
R2V0QnlJRChjb2RlQmxvY2sociksIHZQQyk7CisgICAgICAgIHVuY2FjaGVHZXRCeUlEKGNhbGxG
cmFtZS0+Y29kZUJsb2NrKCksIHZQQyk7CiAgICAgICAgIE5FWFRfT1BDT0RFOwogICAgIH0KICAg
ICBCRUdJTl9PUENPREUob3BfcHV0X2J5X2lkKSB7CkBAIC0yNjY5LDE0ICsyNjUyLDE0IEBAIEpT
VmFsdWUqIE1hY2hpbmU6OnByaXZhdGVFeGVjdXRlKEV4ZWN1dGkKICAgICAgICAgaW50IHByb3Bl
cnR5ID0gdlBDWzJdLnUub3BlcmFuZDsKICAgICAgICAgaW50IHZhbHVlID0gdlBDWzNdLnUub3Bl
cmFuZDsKIAotICAgICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IHRoaXMtPmNvZGVCbG9jayhy
KTsKLSAgICAgICAgSlNWYWx1ZSogYmFzZVZhbHVlID0gcltiYXNlXS5qc1ZhbHVlKGV4ZWMpOwor
ICAgICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IGNhbGxGcmFtZS0+Y29kZUJsb2NrKCk7Cisg
ICAgICAgIEpTVmFsdWUqIGJhc2VWYWx1ZSA9IGNhbGxGcmFtZS0+cmVnaXN0ZXJzKClbYmFzZV0u
anNWYWx1ZShjYWxsRnJhbWUpOwogICAgICAgICBJZGVudGlmaWVyJiBpZGVudCA9IGNvZGVCbG9j
ay0+aWRlbnRpZmllcnNbcHJvcGVydHldOwogICAgICAgICBQdXRQcm9wZXJ0eVNsb3Qgc2xvdDsK
LSAgICAgICAgYmFzZVZhbHVlLT5wdXQoZXhlYywgaWRlbnQsIHJbdmFsdWVdLmpzVmFsdWUoZXhl
YyksIHNsb3QpOworICAgICAgICBiYXNlVmFsdWUtPnB1dChjYWxsRnJhbWUsIGlkZW50LCBjYWxs
RnJhbWUtPnJlZ2lzdGVycygpW3ZhbHVlXS5qc1ZhbHVlKGNhbGxGcmFtZSksIHNsb3QpOwogICAg
ICAgICBWTV9DSEVDS19FWENFUFRJT04oKTsKIAotICAgICAgICB0cnlDYWNoZVB1dEJ5SUQoZXhl
YywgY29kZUJsb2NrLCB2UEMsIGJhc2VWYWx1ZSwgc2xvdCk7CisgICAgICAgIHRyeUNhY2hlUHV0
QnlJRChjYWxsRnJhbWUsIGNvZGVCbG9jaywgdlBDLCBiYXNlVmFsdWUsIHNsb3QpOwogCiAgICAg
ICAgIHZQQyArPSA4OwogICAgICAgICBORVhUX09QQ09ERTsKQEAgLTI2OTMsNyArMjY3Niw3IEBA
IEpTVmFsdWUqIE1hY2hpbmU6OnByaXZhdGVFeGVjdXRlKEV4ZWN1dGkKICAgICAgICAgICAgdGhl
IHJlZ2lzdGVyIGZpbGUuCiAgICAgICAgICAqLwogICAgICAgICBpbnQgYmFzZSA9IHZQQ1sxXS51
Lm9wZXJhbmQ7Ci0gICAgICAgIEpTVmFsdWUqIGJhc2VWYWx1ZSA9IHJbYmFzZV0uanNWYWx1ZShl
eGVjKTsKKyAgICAgICAgSlNWYWx1ZSogYmFzZVZhbHVlID0gY2FsbEZyYW1lLT5yZWdpc3RlcnMo
KVtiYXNlXS5qc1ZhbHVlKGNhbGxGcmFtZSk7CiAgICAgICAgIAogICAgICAgICBpZiAoTElLRUxZ
KCFKU0ltbWVkaWF0ZTo6aXNJbW1lZGlhdGUoYmFzZVZhbHVlKSkpIHsKICAgICAgICAgICAgIEpT
Q2VsbCogYmFzZUNlbGwgPSBzdGF0aWNfY2FzdDxKU0NlbGwqPihiYXNlVmFsdWUpOwpAQCAtMjcw
NiwxNCArMjY4OSwxNCBAQCBKU1ZhbHVlKiBNYWNoaW5lOjpwcml2YXRlRXhlY3V0ZShFeGVjdXRp
CiAKICAgICAgICAgICAgICAgICBSZWZQdHI8U3RydWN0dXJlSUQ+KiBpdCA9IHZQQ1s2XS51LnN0
cnVjdHVyZUlEQ2hhaW4tPmhlYWQoKTsKIAotICAgICAgICAgICAgICAgIEpTT2JqZWN0KiBwcm90
byA9IHN0YXRpY19jYXN0PEpTT2JqZWN0Kj4oYmFzZU9iamVjdC0+c3RydWN0dXJlSUQoKS0+cHJv
dG90eXBlRm9yTG9va3VwKGV4ZWMpKTsKKyAgICAgICAgICAgICAgICBKU09iamVjdCogcHJvdG8g
PSBzdGF0aWNfY2FzdDxKU09iamVjdCo+KGJhc2VPYmplY3QtPnN0cnVjdHVyZUlEKCktPnByb3Rv
dHlwZUZvckxvb2t1cChjYWxsRnJhbWUpKTsKICAgICAgICAgICAgICAgICB3aGlsZSAoIXByb3Rv
LT5pc051bGwoKSkgewogICAgICAgICAgICAgICAgICAgICBpZiAoVU5MSUtFTFkocHJvdG8tPnN0
cnVjdHVyZUlEKCkgIT0gKCppdCkuZ2V0KCkpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICB1
bmNhY2hlUHV0QnlJRChjb2RlQmxvY2sociksIHZQQyk7CisgICAgICAgICAgICAgICAgICAgICAg
ICB1bmNhY2hlUHV0QnlJRChjYWxsRnJhbWUtPmNvZGVCbG9jaygpLCB2UEMpOwogICAgICAgICAg
ICAgICAgICAgICAgICAgTkVYVF9PUENPREU7CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgICAgICAgICAgKytpdDsKLSAgICAgICAgICAgICAgICAgICAgcHJvdG8gPSBzdGF0aWNf
Y2FzdDxKU09iamVjdCo+KHByb3RvLT5zdHJ1Y3R1cmVJRCgpLT5wcm90b3R5cGVGb3JMb29rdXAo
ZXhlYykpOworICAgICAgICAgICAgICAgICAgICBwcm90byA9IHN0YXRpY19jYXN0PEpTT2JqZWN0
Kj4ocHJvdG8tPnN0cnVjdHVyZUlEKCktPnByb3RvdHlwZUZvckxvb2t1cChjYWxsRnJhbWUpKTsK
ICAgICAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgICAgICBiYXNlT2JqZWN0LT50cmFuc2l0
aW9uVG8obmV3U3RydWN0dXJlSUQpOwpAQCAtMjcyMiwxNSArMjcwNSwxNSBAQCBKU1ZhbHVlKiBN
YWNoaW5lOjpwcml2YXRlRXhlY3V0ZShFeGVjdXRpCiAKICAgICAgICAgICAgICAgICBpbnQgdmFs
dWUgPSB2UENbM10udS5vcGVyYW5kOwogICAgICAgICAgICAgICAgIHVuc2lnbmVkIG9mZnNldCA9
IHZQQ1s3XS51Lm9wZXJhbmQ7Ci0gICAgICAgICAgICAgICAgQVNTRVJUKGJhc2VPYmplY3QtPm9m
ZnNldEZvckxvY2F0aW9uKGJhc2VPYmplY3QtPmdldERpcmVjdExvY2F0aW9uKGNvZGVCbG9jayhy
KS0+aWRlbnRpZmllcnNbdlBDWzJdLnUub3BlcmFuZF0pKSA9PSBvZmZzZXQpOwotICAgICAgICAg
ICAgICAgIGJhc2VPYmplY3QtPnB1dERpcmVjdE9mZnNldChvZmZzZXQsIHJbdmFsdWVdLmpzVmFs
dWUoZXhlYykpOworICAgICAgICAgICAgICAgIEFTU0VSVChiYXNlT2JqZWN0LT5vZmZzZXRGb3JM
b2NhdGlvbihiYXNlT2JqZWN0LT5nZXREaXJlY3RMb2NhdGlvbihjYWxsRnJhbWUtPmNvZGVCbG9j
aygpLT5pZGVudGlmaWVyc1t2UENbMl0udS5vcGVyYW5kXSkpID09IG9mZnNldCk7CisgICAgICAg
ICAgICAgICAgYmFzZU9iamVjdC0+cHV0RGlyZWN0T2Zmc2V0KG9mZnNldCwgY2FsbEZyYW1lLT5y
ZWdpc3RlcnMoKVt2YWx1ZV0uanNWYWx1ZShjYWxsRnJhbWUpKTsKIAogICAgICAgICAgICAgICAg
IHZQQyArPSA4OwogICAgICAgICAgICAgICAgIE5FWFRfT1BDT0RFOwogICAgICAgICAgICAgfQog
ICAgICAgICB9CiAgICAgICAgIAotICAgICAgICB1bmNhY2hlUHV0QnlJRChjb2RlQmxvY2sociks
IHZQQyk7CisgICAgICAgIHVuY2FjaGVQdXRCeUlEKGNhbGxGcmFtZS0+Y29kZUJsb2NrKCksIHZQ
Qyk7CiAgICAgICAgIE5FWFRfT1BDT0RFOwogICAgIH0KICAgICBCRUdJTl9PUENPREUob3BfcHV0
X2J5X2lkX3JlcGxhY2UpIHsKQEAgLTI3NDUsNyArMjcyOCw3IEBAIEpTVmFsdWUqIE1hY2hpbmU6
OnByaXZhdGVFeGVjdXRlKEV4ZWN1dGkKICAgICAgICAgICAgdGhlIHJlZ2lzdGVyIGZpbGUuCiAg
ICAgICAgICovCiAgICAgICAgIGludCBiYXNlID0gdlBDWzFdLnUub3BlcmFuZDsKLSAgICAgICAg
SlNWYWx1ZSogYmFzZVZhbHVlID0gcltiYXNlXS5qc1ZhbHVlKGV4ZWMpOworICAgICAgICBKU1Zh
bHVlKiBiYXNlVmFsdWUgPSBjYWxsRnJhbWUtPnJlZ2lzdGVycygpW2Jhc2VdLmpzVmFsdWUoY2Fs
bEZyYW1lKTsKIAogICAgICAgICBpZiAoTElLRUxZKCFKU0ltbWVkaWF0ZTo6aXNJbW1lZGlhdGUo
YmFzZVZhbHVlKSkpIHsKICAgICAgICAgICAgIEpTQ2VsbCogYmFzZUNlbGwgPSBzdGF0aWNfY2Fz
dDxKU0NlbGwqPihiYXNlVmFsdWUpOwpAQCAtMjc1NywxNSArMjc0MCwxNSBAQCBKU1ZhbHVlKiBN
YWNoaW5lOjpwcml2YXRlRXhlY3V0ZShFeGVjdXRpCiAgICAgICAgICAgICAgICAgaW50IHZhbHVl
ID0gdlBDWzNdLnUub3BlcmFuZDsKICAgICAgICAgICAgICAgICB1bnNpZ25lZCBvZmZzZXQgPSB2
UENbNV0udS5vcGVyYW5kOwogICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIEFTU0VS
VChiYXNlT2JqZWN0LT5vZmZzZXRGb3JMb2NhdGlvbihiYXNlT2JqZWN0LT5nZXREaXJlY3RMb2Nh
dGlvbihjb2RlQmxvY2sociktPmlkZW50aWZpZXJzW3ZQQ1syXS51Lm9wZXJhbmRdKSkgPT0gb2Zm
c2V0KTsKLSAgICAgICAgICAgICAgICBiYXNlT2JqZWN0LT5wdXREaXJlY3RPZmZzZXQob2Zmc2V0
LCByW3ZhbHVlXS5qc1ZhbHVlKGV4ZWMpKTsKKyAgICAgICAgICAgICAgICBBU1NFUlQoYmFzZU9i
amVjdC0+b2Zmc2V0Rm9yTG9jYXRpb24oYmFzZU9iamVjdC0+Z2V0RGlyZWN0TG9jYXRpb24oY2Fs
bEZyYW1lLT5jb2RlQmxvY2soKS0+aWRlbnRpZmllcnNbdlBDWzJdLnUub3BlcmFuZF0pKSA9PSBv
ZmZzZXQpOworICAgICAgICAgICAgICAgIGJhc2VPYmplY3QtPnB1dERpcmVjdE9mZnNldChvZmZz
ZXQsIGNhbGxGcmFtZS0+cmVnaXN0ZXJzKClbdmFsdWVdLmpzVmFsdWUoY2FsbEZyYW1lKSk7CiAK
ICAgICAgICAgICAgICAgICB2UEMgKz0gODsKICAgICAgICAgICAgICAgICBORVhUX09QQ09ERTsK
ICAgICAgICAgICAgIH0KICAgICAgICAgfQogCi0gICAgICAgIHVuY2FjaGVQdXRCeUlEKGNvZGVC
bG9jayhyKSwgdlBDKTsKKyAgICAgICAgdW5jYWNoZVB1dEJ5SUQoY2FsbEZyYW1lLT5jb2RlQmxv
Y2soKSwgdlBDKTsKICAgICAgICAgTkVYVF9PUENPREU7CiAgICAgfQogICAgIEJFR0lOX09QQ09E
RShvcF9wdXRfYnlfaWRfZ2VuZXJpYykgewpAQCAtMjc4MSwxMCArMjc2NCwxMCBAQCBKU1ZhbHVl
KiBNYWNoaW5lOjpwcml2YXRlRXhlY3V0ZShFeGVjdXRpCiAgICAgICAgIGludCBwcm9wZXJ0eSA9
IHZQQ1syXS51Lm9wZXJhbmQ7CiAgICAgICAgIGludCB2YWx1ZSA9IHZQQ1szXS51Lm9wZXJhbmQ7
CiAKLSAgICAgICAgSlNWYWx1ZSogYmFzZVZhbHVlID0gcltiYXNlXS5qc1ZhbHVlKGV4ZWMpOwot
ICAgICAgICBJZGVudGlmaWVyJiBpZGVudCA9IGNvZGVCbG9jayhyKS0+aWRlbnRpZmllcnNbcHJv
cGVydHldOworICAgICAgICBKU1ZhbHVlKiBiYXNlVmFsdWUgPSBjYWxsRnJhbWUtPnJlZ2lzdGVy
cygpW2Jhc2VdLmpzVmFsdWUoY2FsbEZyYW1lKTsKKyAgICAgICAgSWRlbnRpZmllciYgaWRlbnQg
PSBjYWxsRnJhbWUtPmNvZGVCbG9jaygpLT5pZGVudGlmaWVyc1twcm9wZXJ0eV07CiAgICAgICAg
IFB1dFByb3BlcnR5U2xvdCBzbG90OwotICAgICAgICBiYXNlVmFsdWUtPnB1dChleGVjLCBpZGVu
dCwgclt2YWx1ZV0uanNWYWx1ZShleGVjKSwgc2xvdCk7CisgICAgICAgIGJhc2VWYWx1ZS0+cHV0
KGNhbGxGcmFtZSwgaWRlbnQsIGNhbGxGcmFtZS0+cmVnaXN0ZXJzKClbdmFsdWVdLmpzVmFsdWUo
Y2FsbEZyYW1lKSwgc2xvdCk7CiAgICAgICAgIFZNX0NIRUNLX0VYQ0VQVElPTigpOwogCiAgICAg
ICAgIHZQQyArPSA4OwpAQCAtMjgwMiwxMSArMjc4NSwxMSBAQCBKU1ZhbHVlKiBNYWNoaW5lOjpw
cml2YXRlRXhlY3V0ZShFeGVjdXRpCiAgICAgICAgIGludCBiYXNlID0gKCsrdlBDKS0+dS5vcGVy
YW5kOwogICAgICAgICBpbnQgcHJvcGVydHkgPSAoKyt2UEMpLT51Lm9wZXJhbmQ7CiAKLSAgICAg
ICAgSlNPYmplY3QqIGJhc2VPYmogPSByW2Jhc2VdLmpzVmFsdWUoZXhlYyktPnRvT2JqZWN0KGV4
ZWMpOwotICAgICAgICBJZGVudGlmaWVyJiBpZGVudCA9IGNvZGVCbG9jayhyKS0+aWRlbnRpZmll
cnNbcHJvcGVydHldOwotICAgICAgICBKU1ZhbHVlKiByZXN1bHQgPSBqc0Jvb2xlYW4oYmFzZU9i
ai0+ZGVsZXRlUHJvcGVydHkoZXhlYywgaWRlbnQpKTsKKyAgICAgICAgSlNPYmplY3QqIGJhc2VP
YmogPSBjYWxsRnJhbWUtPnJlZ2lzdGVycygpW2Jhc2VdLmpzVmFsdWUoY2FsbEZyYW1lKS0+dG9P
YmplY3QoY2FsbEZyYW1lKTsKKyAgICAgICAgSWRlbnRpZmllciYgaWRlbnQgPSBjYWxsRnJhbWUt
PmNvZGVCbG9jaygpLT5pZGVudGlmaWVyc1twcm9wZXJ0eV07CisgICAgICAgIEpTVmFsdWUqIHJl
c3VsdCA9IGpzQm9vbGVhbihiYXNlT2JqLT5kZWxldGVQcm9wZXJ0eShjYWxsRnJhbWUsIGlkZW50
KSk7CiAgICAgICAgIFZNX0NIRUNLX0VYQ0VQVElPTigpOwotICAgICAgICByW2RzdF0gPSByZXN1
bHQ7CisgICAgICAgIGNhbGxGcmFtZS0+cmVnaXN0ZXJzKClbZHN0XSA9IHJlc3VsdDsKICAgICAg
ICAgKyt2UEM7CiAgICAgICAgIE5FWFRfT1BDT0RFOwogICAgIH0KQEAgLTI4MjIsOCArMjgwNSw4
IEBAIEpTVmFsdWUqIE1hY2hpbmU6OnByaXZhdGVFeGVjdXRlKEV4ZWN1dGkKICAgICAgICAgaW50
IGJhc2UgPSAoKyt2UEMpLT51Lm9wZXJhbmQ7CiAgICAgICAgIGludCBwcm9wZXJ0eSA9ICgrK3ZQ
QyktPnUub3BlcmFuZDsKICAgICAgICAgCi0gICAgICAgIEpTVmFsdWUqIGJhc2VWYWx1ZSA9IHJb
YmFzZV0uanNWYWx1ZShleGVjKTsKLSAgICAgICAgSlNWYWx1ZSogc3Vic2NyaXB0ID0gcltwcm9w
ZXJ0eV0uanNWYWx1ZShleGVjKTsKKyAgICAgICAgSlNWYWx1ZSogYmFzZVZhbHVlID0gY2FsbEZy
YW1lLT5yZWdpc3RlcnMoKVtiYXNlXS5qc1ZhbHVlKGNhbGxGcmFtZSk7CisgICAgICAgIEpTVmFs
dWUqIHN1YnNjcmlwdCA9IGNhbGxGcmFtZS0+cmVnaXN0ZXJzKClbcHJvcGVydHldLmpzVmFsdWUo
Y2FsbEZyYW1lKTsKIAogICAgICAgICBKU1ZhbHVlKiByZXN1bHQ7CiAgICAgICAgIHVuc2lnbmVk
IGk7CkBAIC0yODM1LDE4ICsyODE4LDE4IEBAIEpTVmFsdWUqIE1hY2hpbmU6OnByaXZhdGVFeGVj
dXRlKEV4ZWN1dGkKICAgICAgICAgICAgICAgICBpZiAoanNBcnJheS0+Y2FuR2V0SW5kZXgoaSkp
CiAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IGpzQXJyYXktPmdldEluZGV4KGkpOwogICAg
ICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0ganNBcnJheS0+
SlNBcnJheTo6Z2V0KGV4ZWMsIGkpOworICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSBqc0Fy
cmF5LT5KU0FycmF5OjpnZXQoY2FsbEZyYW1lLCBpKTsKICAgICAgICAgICAgIH0gZWxzZSBpZiAo
aXNKU1N0cmluZyhiYXNlVmFsdWUpICYmIHN0YXRpY19jYXN0PEpTU3RyaW5nKj4oYmFzZVZhbHVl
KS0+Y2FuR2V0SW5kZXgoaSkpCi0gICAgICAgICAgICAgICAgcmVzdWx0ID0gc3RhdGljX2Nhc3Q8
SlNTdHJpbmcqPihiYXNlVmFsdWUpLT5nZXRJbmRleCgmZXhlYy0+Z2xvYmFsRGF0YSgpLCBpKTsK
KyAgICAgICAgICAgICAgICByZXN1bHQgPSBzdGF0aWNfY2FzdDxKU1N0cmluZyo+KGJhc2VWYWx1
ZSktPmdldEluZGV4KCZjYWxsRnJhbWUtPmdsb2JhbERhdGEoKSwgaSk7CiAgICAgICAgICAgICBl
bHNlCi0gICAgICAgICAgICAgICAgcmVzdWx0ID0gYmFzZVZhbHVlLT5nZXQoZXhlYywgaSk7Cisg
ICAgICAgICAgICAgICAgcmVzdWx0ID0gYmFzZVZhbHVlLT5nZXQoY2FsbEZyYW1lLCBpKTsKICAg
ICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIElkZW50aWZpZXIgcHJvcGVydHkoZXhlYywgc3Vi
c2NyaXB0LT50b1N0cmluZyhleGVjKSk7Ci0gICAgICAgICAgICByZXN1bHQgPSBiYXNlVmFsdWUt
PmdldChleGVjLCBwcm9wZXJ0eSk7CisgICAgICAgICAgICBJZGVudGlmaWVyIHByb3BlcnR5KGNh
bGxGcmFtZSwgc3Vic2NyaXB0LT50b1N0cmluZyhjYWxsRnJhbWUpKTsKKyAgICAgICAgICAgIHJl
c3VsdCA9IGJhc2VWYWx1ZS0+Z2V0KGNhbGxGcmFtZSwgcHJvcGVydHkpOwogICAgICAgICB9CiAK
ICAgICAgICAgVk1fQ0hFQ0tfRVhDRVBUSU9OKCk7Ci0gICAgICAgIHJbZHN0XSA9IHJlc3VsdDsK
KyAgICAgICAgY2FsbEZyYW1lLT5yZWdpc3RlcnMoKVtkc3RdID0gcmVzdWx0OwogICAgICAgICAr
K3ZQQzsKICAgICAgICAgTkVYVF9PUENPREU7CiAgICAgfQpAQCAtMjg2NSw4ICsyODQ4LDggQEAg
SlNWYWx1ZSogTWFjaGluZTo6cHJpdmF0ZUV4ZWN1dGUoRXhlY3V0aQogICAgICAgICBpbnQgcHJv
cGVydHkgPSAoKyt2UEMpLT51Lm9wZXJhbmQ7CiAgICAgICAgIGludCB2YWx1ZSA9ICgrK3ZQQykt
PnUub3BlcmFuZDsKIAotICAgICAgICBKU1ZhbHVlKiBiYXNlVmFsdWUgPSByW2Jhc2VdLmpzVmFs
dWUoZXhlYyk7Ci0gICAgICAgIEpTVmFsdWUqIHN1YnNjcmlwdCA9IHJbcHJvcGVydHldLmpzVmFs
dWUoZXhlYyk7CisgICAgICAgIEpTVmFsdWUqIGJhc2VWYWx1ZSA9IGNhbGxGcmFtZS0+cmVnaXN0
ZXJzKClbYmFzZV0uanNWYWx1ZShjYWxsRnJhbWUpOworICAgICAgICBKU1ZhbHVlKiBzdWJzY3Jp
cHQgPSBjYWxsRnJhbWUtPnJlZ2lzdGVycygpW3Byb3BlcnR5XS5qc1ZhbHVlKGNhbGxGcmFtZSk7
CiAKICAgICAgICAgdW5zaWduZWQgaTsKIApAQCAtMjg3NSwxNiArMjg1OCwxNiBAQCBKU1ZhbHVl
KiBNYWNoaW5lOjpwcml2YXRlRXhlY3V0ZShFeGVjdXRpCiAgICAgICAgICAgICBpZiAoaXNKU0Fy
cmF5KGJhc2VWYWx1ZSkpIHsKICAgICAgICAgICAgICAgICBKU0FycmF5KiBqc0FycmF5ID0gc3Rh
dGljX2Nhc3Q8SlNBcnJheSo+KGJhc2VWYWx1ZSk7CiAgICAgICAgICAgICAgICAgaWYgKGpzQXJy
YXktPmNhblNldEluZGV4KGkpKQotICAgICAgICAgICAgICAgICAgICBqc0FycmF5LT5zZXRJbmRl
eChpLCByW3ZhbHVlXS5qc1ZhbHVlKGV4ZWMpKTsKKyAgICAgICAgICAgICAgICAgICAganNBcnJh
eS0+c2V0SW5kZXgoaSwgY2FsbEZyYW1lLT5yZWdpc3RlcnMoKVt2YWx1ZV0uanNWYWx1ZShjYWxs
RnJhbWUpKTsKICAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgIGpzQXJy
YXktPkpTQXJyYXk6OnB1dChleGVjLCBpLCByW3ZhbHVlXS5qc1ZhbHVlKGV4ZWMpKTsKKyAgICAg
ICAgICAgICAgICAgICAganNBcnJheS0+SlNBcnJheTo6cHV0KGNhbGxGcmFtZSwgaSwgY2FsbEZy
YW1lLT5yZWdpc3RlcnMoKVt2YWx1ZV0uanNWYWx1ZShjYWxsRnJhbWUpKTsKICAgICAgICAgICAg
IH0gZWxzZQotICAgICAgICAgICAgICAgIGJhc2VWYWx1ZS0+cHV0KGV4ZWMsIGksIHJbdmFsdWVd
LmpzVmFsdWUoZXhlYykpOworICAgICAgICAgICAgICAgIGJhc2VWYWx1ZS0+cHV0KGNhbGxGcmFt
ZSwgaSwgY2FsbEZyYW1lLT5yZWdpc3RlcnMoKVt2YWx1ZV0uanNWYWx1ZShjYWxsRnJhbWUpKTsK
ICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIElkZW50aWZpZXIgcHJvcGVydHkoZXhlYywg
c3Vic2NyaXB0LT50b1N0cmluZyhleGVjKSk7Ci0gICAgICAgICAgICBpZiAoIWV4ZWMtPmhhZEV4
Y2VwdGlvbigpKSB7IC8vIERvbid0IHB1dCB0byBhbiBvYmplY3QgaWYgdG9TdHJpbmcgdGhyZXcg
YW4gZXhjZXB0aW9uLgorICAgICAgICAgICAgSWRlbnRpZmllciBwcm9wZXJ0eShjYWxsRnJhbWUs
IHN1YnNjcmlwdC0+dG9TdHJpbmcoY2FsbEZyYW1lKSk7CisgICAgICAgICAgICBpZiAoIWNhbGxG
cmFtZS0+aGFkRXhjZXB0aW9uKCkpIHsgLy8gRG9uJ3QgcHV0IHRvIGFuIG9iamVjdCBpZiB0b1N0
cmluZyB0aHJldyBhbiBleGNlcHRpb24uCiAgICAgICAgICAgICAgICAgUHV0UHJvcGVydHlTbG90
IHNsb3Q7Ci0gICAgICAgICAgICAgICAgYmFzZVZhbHVlLT5wdXQoZXhlYywgcHJvcGVydHksIHJb
dmFsdWVdLmpzVmFsdWUoZXhlYyksIHNsb3QpOworICAgICAgICAgICAgICAgIGJhc2VWYWx1ZS0+
cHV0KGNhbGxGcmFtZSwgcHJvcGVydHksIGNhbGxGcmFtZS0+cmVnaXN0ZXJzKClbdmFsdWVdLmpz
VmFsdWUoY2FsbEZyYW1lKSwgc2xvdCk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KIApAQCAt
MjkwNCwyMiArMjg4NywyMiBAQCBKU1ZhbHVlKiBNYWNoaW5lOjpwcml2YXRlRXhlY3V0ZShFeGVj
dXRpCiAgICAgICAgIGludCBiYXNlID0gKCsrdlBDKS0+dS5vcGVyYW5kOwogICAgICAgICBpbnQg
cHJvcGVydHkgPSAoKyt2UEMpLT51Lm9wZXJhbmQ7CiAKLSAgICAgICAgSlNPYmplY3QqIGJhc2VP
YmogPSByW2Jhc2VdLmpzVmFsdWUoZXhlYyktPnRvT2JqZWN0KGV4ZWMpOyAvLyBtYXkgdGhyb3cK
KyAgICAgICAgSlNPYmplY3QqIGJhc2VPYmogPSBjYWxsRnJhbWUtPnJlZ2lzdGVycygpW2Jhc2Vd
LmpzVmFsdWUoY2FsbEZyYW1lKS0+dG9PYmplY3QoY2FsbEZyYW1lKTsgLy8gbWF5IHRocm93CiAK
LSAgICAgICAgSlNWYWx1ZSogc3Vic2NyaXB0ID0gcltwcm9wZXJ0eV0uanNWYWx1ZShleGVjKTsK
KyAgICAgICAgSlNWYWx1ZSogc3Vic2NyaXB0ID0gY2FsbEZyYW1lLT5yZWdpc3RlcnMoKVtwcm9w
ZXJ0eV0uanNWYWx1ZShjYWxsRnJhbWUpOwogICAgICAgICBKU1ZhbHVlKiByZXN1bHQ7CiAgICAg
ICAgIHVpbnQzMl90IGk7CiAgICAgICAgIGlmIChzdWJzY3JpcHQtPmdldFVJbnQzMihpKSkKLSAg
ICAgICAgICAgIHJlc3VsdCA9IGpzQm9vbGVhbihiYXNlT2JqLT5kZWxldGVQcm9wZXJ0eShleGVj
LCBpKSk7CisgICAgICAgICAgICByZXN1bHQgPSBqc0Jvb2xlYW4oYmFzZU9iai0+ZGVsZXRlUHJv
cGVydHkoY2FsbEZyYW1lLCBpKSk7CiAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgVk1fQ0hF
Q0tfRVhDRVBUSU9OKCk7Ci0gICAgICAgICAgICBJZGVudGlmaWVyIHByb3BlcnR5KGV4ZWMsIHN1
YnNjcmlwdC0+dG9TdHJpbmcoZXhlYykpOworICAgICAgICAgICAgSWRlbnRpZmllciBwcm9wZXJ0
eShjYWxsRnJhbWUsIHN1YnNjcmlwdC0+dG9TdHJpbmcoY2FsbEZyYW1lKSk7CiAgICAgICAgICAg
ICBWTV9DSEVDS19FWENFUFRJT04oKTsKLSAgICAgICAgICAgIHJlc3VsdCA9IGpzQm9vbGVhbihi
YXNlT2JqLT5kZWxldGVQcm9wZXJ0eShleGVjLCBwcm9wZXJ0eSkpOworICAgICAgICAgICAgcmVz
dWx0ID0ganNCb29sZWFuKGJhc2VPYmotPmRlbGV0ZVByb3BlcnR5KGNhbGxGcmFtZSwgcHJvcGVy
dHkpKTsKICAgICAgICAgfQogCiAgICAgICAgIFZNX0NIRUNLX0VYQ0VQVElPTigpOwotICAgICAg
ICByW2RzdF0gPSByZXN1bHQ7CisgICAgICAgIGNhbGxGcmFtZS0+cmVnaXN0ZXJzKClbZHN0XSA9
IHJlc3VsdDsKICAgICAgICAgKyt2UEM7CiAgICAgICAgIE5FWFRfT1BDT0RFOwogICAgIH0KQEAg
LTI5MzksNyArMjkyMiw3IEBAIEpTVmFsdWUqIE1hY2hpbmU6OnByaXZhdGVFeGVjdXRlKEV4ZWN1
dGkKICAgICAgICAgdW5zaWduZWQgcHJvcGVydHkgPSAoKyt2UEMpLT51Lm9wZXJhbmQ7CiAgICAg
ICAgIGludCB2YWx1ZSA9ICgrK3ZQQyktPnUub3BlcmFuZDsKIAotICAgICAgICByW2Jhc2VdLmpz
VmFsdWUoZXhlYyktPnB1dChleGVjLCBwcm9wZXJ0eSwgclt2YWx1ZV0uanNWYWx1ZShleGVjKSk7
CisgICAgICAgIGNhbGxGcmFtZS0+cmVnaXN0ZXJzKClbYmFzZV0uanNWYWx1ZShjYWxsRnJhbWUp
LT5wdXQoY2FsbEZyYW1lLCBwcm9wZXJ0eSwgY2FsbEZyYW1lLT5yZWdpc3RlcnMoKVt2YWx1ZV0u
anNWYWx1ZShjYWxsRnJhbWUpKTsKIAogICAgICAgICArK3ZQQzsKICAgICAgICAgTkVYVF9PUENP
REU7CkBAIC0yOTg2LDcgKzI5NjksNyBAQCBKU1ZhbHVlKiBNYWNoaW5lOjpwcml2YXRlRXhlY3V0
ZShFeGVjdXRpCiAgICAgICAgICAqLwogICAgICAgICBpbnQgY29uZCA9ICgrK3ZQQyktPnUub3Bl
cmFuZDsKICAgICAgICAgaW50IHRhcmdldCA9ICgrK3ZQQyktPnUub3BlcmFuZDsKLSAgICAgICAg
aWYgKHJbY29uZF0uanNWYWx1ZShleGVjKS0+dG9Cb29sZWFuKGV4ZWMpKSB7CisgICAgICAgIGlm
IChjYWxsRnJhbWUtPnJlZ2lzdGVycygpW2NvbmRdLmpzVmFsdWUoY2FsbEZyYW1lKS0+dG9Cb29s
ZWFuKGNhbGxGcmFtZSkpIHsKICAgICAgICAgICAgIHZQQyArPSB0YXJnZXQ7CiAgICAgICAgICAg
ICBDSEVDS19GT1JfVElNRU9VVCgpOwogICAgICAgICAgICAgTkVYVF9PUENPREU7CkBAIC0zMDAz
LDcgKzI5ODYsNyBAQCBKU1ZhbHVlKiBNYWNoaW5lOjpwcml2YXRlRXhlY3V0ZShFeGVjdXRpCiAg
ICAgICAgICovCiAgICAgICAgIGludCBjb25kID0gKCsrdlBDKS0+dS5vcGVyYW5kOwogICAgICAg
ICBpbnQgdGFyZ2V0ID0gKCsrdlBDKS0+dS5vcGVyYW5kOwotICAgICAgICBpZiAocltjb25kXS5q
c1ZhbHVlKGV4ZWMpLT50b0Jvb2xlYW4oZXhlYykpIHsKKyAgICAgICAgaWYgKGNhbGxGcmFtZS0+
cmVnaXN0ZXJzKClbY29uZF0uanNWYWx1ZShjYWxsRnJhbWUpLT50b0Jvb2xlYW4oY2FsbEZyYW1l
KSkgewogICAgICAgICAgICAgdlBDICs9IHRhcmdldDsKICAgICAgICAgICAgIE5FWFRfT1BDT0RF
OwogICAgICAgICB9CkBAIC0zMDE5LDcgKzMwMDIsNyBAQCBKU1ZhbHVlKiBNYWNoaW5lOjpwcml2
YXRlRXhlY3V0ZShFeGVjdXRpCiAgICAgICAgICovCiAgICAgICAgIGludCBjb25kID0gKCsrdlBD
KS0+dS5vcGVyYW5kOwogICAgICAgICBpbnQgdGFyZ2V0ID0gKCsrdlBDKS0+dS5vcGVyYW5kOwot
ICAgICAgICBpZiAoIXJbY29uZF0uanNWYWx1ZShleGVjKS0+dG9Cb29sZWFuKGV4ZWMpKSB7Cisg
ICAgICAgIGlmICghY2FsbEZyYW1lLT5yZWdpc3RlcnMoKVtjb25kXS5qc1ZhbHVlKGNhbGxGcmFt
ZSktPnRvQm9vbGVhbihjYWxsRnJhbWUpKSB7CiAgICAgICAgICAgICB2UEMgKz0gdGFyZ2V0Owog
ICAgICAgICAgICAgTkVYVF9PUENPREU7CiAgICAgICAgIH0KQEAgLTMwMzgsMTEgKzMwMjEsMTEg
QEAgSlNWYWx1ZSogTWFjaGluZTo6cHJpdmF0ZUV4ZWN1dGUoRXhlY3V0aQogICAgICAgICAgICBB
ZGRpdGlvbmFsbHkgdGhpcyBsb29wIGluc3RydWN0aW9uIG1heSB0ZXJtaW5hdGUgSlMgZXhlY3V0
aW9uIGlzCiAgICAgICAgICAgIHRoZSBKUyB0aW1lb3V0IGlzIHJlYWNoZWQuCiAgICAgICAgICAq
LwotICAgICAgICBKU1ZhbHVlKiBzcmMxID0gclsoKyt2UEMpLT51Lm9wZXJhbmRdLmpzVmFsdWUo
ZXhlYyk7Ci0gICAgICAgIEpTVmFsdWUqIHNyYzIgPSByWygrK3ZQQyktPnUub3BlcmFuZF0uanNW
YWx1ZShleGVjKTsKKyAgICAgICAgSlNWYWx1ZSogc3JjMSA9IGNhbGxGcmFtZS0+cmVnaXN0ZXJz
KClbKCsrdlBDKS0+dS5vcGVyYW5kXS5qc1ZhbHVlKGNhbGxGcmFtZSk7CisgICAgICAgIEpTVmFs
dWUqIHNyYzIgPSBjYWxsRnJhbWUtPnJlZ2lzdGVycygpWygrK3ZQQyktPnUub3BlcmFuZF0uanNW
YWx1ZShjYWxsRnJhbWUpOwogICAgICAgICBpbnQgdGFyZ2V0ID0gKCsrdlBDKS0+dS5vcGVyYW5k
OwogICAgICAgICAKLSAgICAgICAgYm9vbCByZXN1bHQgPSBqc0xlc3MoZXhlYywgc3JjMSwgc3Jj
Mik7CisgICAgICAgIGJvb2wgcmVzdWx0ID0ganNMZXNzKGNhbGxGcmFtZSwgc3JjMSwgc3JjMik7
CiAgICAgICAgIFZNX0NIRUNLX0VYQ0VQVElPTigpOwogICAgICAgICAKICAgICAgICAgaWYgKHJl
c3VsdCkgewpAQCAtMzA2NSwxMSArMzA0OCwxMSBAQCBKU1ZhbHVlKiBNYWNoaW5lOjpwcml2YXRl
RXhlY3V0ZShFeGVjdXRpCiAgICAgICAgICAgIEFkZGl0aW9uYWxseSB0aGlzIGxvb3AgaW5zdHJ1
Y3Rpb24gbWF5IHRlcm1pbmF0ZSBKUyBleGVjdXRpb24gaXMKICAgICAgICAgICAgdGhlIEpTIHRp
bWVvdXQgaXMgcmVhY2hlZC4KICAgICAgICAgKi8KLSAgICAgICAgSlNWYWx1ZSogc3JjMSA9IHJb
KCsrdlBDKS0+dS5vcGVyYW5kXS5qc1ZhbHVlKGV4ZWMpOwotICAgICAgICBKU1ZhbHVlKiBzcmMy
ID0gclsoKyt2UEMpLT51Lm9wZXJhbmRdLmpzVmFsdWUoZXhlYyk7CisgICAgICAgIEpTVmFsdWUq
IHNyYzEgPSBjYWxsRnJhbWUtPnJlZ2lzdGVycygpWygrK3ZQQyktPnUub3BlcmFuZF0uanNWYWx1
ZShjYWxsRnJhbWUpOworICAgICAgICBKU1ZhbHVlKiBzcmMyID0gY2FsbEZyYW1lLT5yZWdpc3Rl
cnMoKVsoKyt2UEMpLT51Lm9wZXJhbmRdLmpzVmFsdWUoY2FsbEZyYW1lKTsKICAgICAgICAgaW50
IHRhcmdldCA9ICgrK3ZQQyktPnUub3BlcmFuZDsKICAgICAgICAgCi0gICAgICAgIGJvb2wgcmVz
dWx0ID0ganNMZXNzRXEoZXhlYywgc3JjMSwgc3JjMik7CisgICAgICAgIGJvb2wgcmVzdWx0ID0g
anNMZXNzRXEoY2FsbEZyYW1lLCBzcmMxLCBzcmMyKTsKICAgICAgICAgVk1fQ0hFQ0tfRVhDRVBU
SU9OKCk7CiAgICAgICAgIAogICAgICAgICBpZiAocmVzdWx0KSB7CkBAIC0zMDg5LDExICszMDcy
LDExIEBAIEpTVmFsdWUqIE1hY2hpbmU6OnByaXZhdGVFeGVjdXRlKEV4ZWN1dGkKICAgICAgICAg
ICAgdGFyZ2V0IGZyb20gdGhlIGN1cnJlbnQgaW5zdHJ1Y3Rpb24sIGlmIGFuZCBvbmx5IGlmIHRo
ZSAKICAgICAgICAgICAgcmVzdWx0IG9mIHRoZSBjb21wYXJpc29uIGlzIGZhbHNlLgogICAgICAg
ICAqLwotICAgICAgICBKU1ZhbHVlKiBzcmMxID0gclsoKyt2UEMpLT51Lm9wZXJhbmRdLmpzVmFs
dWUoZXhlYyk7Ci0gICAgICAgIEpTVmFsdWUqIHNyYzIgPSByWygrK3ZQQyktPnUub3BlcmFuZF0u
anNWYWx1ZShleGVjKTsKKyAgICAgICAgSlNWYWx1ZSogc3JjMSA9IGNhbGxGcmFtZS0+cmVnaXN0
ZXJzKClbKCsrdlBDKS0+dS5vcGVyYW5kXS5qc1ZhbHVlKGNhbGxGcmFtZSk7CisgICAgICAgIEpT
VmFsdWUqIHNyYzIgPSBjYWxsRnJhbWUtPnJlZ2lzdGVycygpWygrK3ZQQyktPnUub3BlcmFuZF0u
anNWYWx1ZShjYWxsRnJhbWUpOwogICAgICAgICBpbnQgdGFyZ2V0ID0gKCsrdlBDKS0+dS5vcGVy
YW5kOwogCi0gICAgICAgIGJvb2wgcmVzdWx0ID0ganNMZXNzKGV4ZWMsIHNyYzEsIHNyYzIpOwor
ICAgICAgICBib29sIHJlc3VsdCA9IGpzTGVzcyhjYWxsRnJhbWUsIHNyYzEsIHNyYzIpOwogICAg
ICAgICBWTV9DSEVDS19FWENFUFRJT04oKTsKICAgICAgICAgCiAgICAgICAgIGlmICghcmVzdWx0
KSB7CkBAIC0zMTE1LDEyICszMDk4LDEyIEBAIEpTVmFsdWUqIE1hY2hpbmU6OnByaXZhdGVFeGVj
dXRlKEV4ZWN1dGkKICAgICAgICAgICovCiAgICAgICAgIGludCB0YWJsZUluZGV4ID0gKCsrdlBD
KS0+dS5vcGVyYW5kOwogICAgICAgICBpbnQgZGVmYXVsdE9mZnNldCA9ICgrK3ZQQyktPnUub3Bl
cmFuZDsKLSAgICAgICAgSlNWYWx1ZSogc2NydXRpbmVlID0gclsoKyt2UEMpLT51Lm9wZXJhbmRd
LmpzVmFsdWUoZXhlYyk7CisgICAgICAgIEpTVmFsdWUqIHNjcnV0aW5lZSA9IGNhbGxGcmFtZS0+
cmVnaXN0ZXJzKClbKCsrdlBDKS0+dS5vcGVyYW5kXS5qc1ZhbHVlKGNhbGxGcmFtZSk7CiAgICAg
ICAgIGlmICghSlNJbW1lZGlhdGU6OmlzTnVtYmVyKHNjcnV0aW5lZSkpCiAgICAgICAgICAgICB2
UEMgKz0gZGVmYXVsdE9mZnNldDsKICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICBpbnQzMl90
IHZhbHVlID0gSlNJbW1lZGlhdGU6OmdldFRydW5jYXRlZEludDMyKHNjcnV0aW5lZSk7Ci0gICAg
ICAgICAgICB2UEMgKz0gY29kZUJsb2NrKHIpLT5pbW1lZGlhdGVTd2l0Y2hKdW1wVGFibGVzW3Rh
YmxlSW5kZXhdLm9mZnNldEZvclZhbHVlKHZhbHVlLCBkZWZhdWx0T2Zmc2V0KTsKKyAgICAgICAg
ICAgIHZQQyArPSBjYWxsRnJhbWUtPmNvZGVCbG9jaygpLT5pbW1lZGlhdGVTd2l0Y2hKdW1wVGFi
bGVzW3RhYmxlSW5kZXhdLm9mZnNldEZvclZhbHVlKHZhbHVlLCBkZWZhdWx0T2Zmc2V0KTsKICAg
ICAgICAgfQogICAgICAgICBORVhUX09QQ09ERTsKICAgICB9CkBAIC0zMTM1LDcgKzMxMTgsNyBA
QCBKU1ZhbHVlKiBNYWNoaW5lOjpwcml2YXRlRXhlY3V0ZShFeGVjdXRpCiAgICAgICAgICAqLwog
ICAgICAgICBpbnQgdGFibGVJbmRleCA9ICgrK3ZQQyktPnUub3BlcmFuZDsKICAgICAgICAgaW50
IGRlZmF1bHRPZmZzZXQgPSAoKyt2UEMpLT51Lm9wZXJhbmQ7Ci0gICAgICAgIEpTVmFsdWUqIHNj
cnV0aW5lZSA9IHJbKCsrdlBDKS0+dS5vcGVyYW5kXS5qc1ZhbHVlKGV4ZWMpOworICAgICAgICBK
U1ZhbHVlKiBzY3J1dGluZWUgPSBjYWxsRnJhbWUtPnJlZ2lzdGVycygpWygrK3ZQQyktPnUub3Bl
cmFuZF0uanNWYWx1ZShjYWxsRnJhbWUpOwogICAgICAgICBpZiAoIXNjcnV0aW5lZS0+aXNTdHJp
bmcoKSkKICAgICAgICAgICAgIHZQQyArPSBkZWZhdWx0T2Zmc2V0OwogICAgICAgICBlbHNlIHsK
QEAgLTMxNDMsNyArMzEyNiw3IEBAIEpTVmFsdWUqIE1hY2hpbmU6OnByaXZhdGVFeGVjdXRlKEV4
ZWN1dGkKICAgICAgICAgICAgIGlmICh2YWx1ZS0+c2l6ZSgpICE9IDEpCiAgICAgICAgICAgICAg
ICAgdlBDICs9IGRlZmF1bHRPZmZzZXQ7CiAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAg
ICAgdlBDICs9IGNvZGVCbG9jayhyKS0+Y2hhcmFjdGVyU3dpdGNoSnVtcFRhYmxlc1t0YWJsZUlu
ZGV4XS5vZmZzZXRGb3JWYWx1ZSh2YWx1ZS0+ZGF0YSgpWzBdLCBkZWZhdWx0T2Zmc2V0KTsKKyAg
ICAgICAgICAgICAgICB2UEMgKz0gY2FsbEZyYW1lLT5jb2RlQmxvY2soKS0+Y2hhcmFjdGVyU3dp
dGNoSnVtcFRhYmxlc1t0YWJsZUluZGV4XS5vZmZzZXRGb3JWYWx1ZSh2YWx1ZS0+ZGF0YSgpWzBd
LCBkZWZhdWx0T2Zmc2V0KTsKICAgICAgICAgfQogICAgICAgICBORVhUX09QQ09ERTsKICAgICB9
CkBAIC0zMTU4LDExICszMTQxLDExIEBAIEpTVmFsdWUqIE1hY2hpbmU6OnByaXZhdGVFeGVjdXRl
KEV4ZWN1dGkKICAgICAgICAgICovCiAgICAgICAgIGludCB0YWJsZUluZGV4ID0gKCsrdlBDKS0+
dS5vcGVyYW5kOwogICAgICAgICBpbnQgZGVmYXVsdE9mZnNldCA9ICgrK3ZQQyktPnUub3BlcmFu
ZDsKLSAgICAgICAgSlNWYWx1ZSogc2NydXRpbmVlID0gclsoKyt2UEMpLT51Lm9wZXJhbmRdLmpz
VmFsdWUoZXhlYyk7CisgICAgICAgIEpTVmFsdWUqIHNjcnV0aW5lZSA9IGNhbGxGcmFtZS0+cmVn
aXN0ZXJzKClbKCsrdlBDKS0+dS5vcGVyYW5kXS5qc1ZhbHVlKGNhbGxGcmFtZSk7CiAgICAgICAg
IGlmICghc2NydXRpbmVlLT5pc1N0cmluZygpKQogICAgICAgICAgICAgdlBDICs9IGRlZmF1bHRP
ZmZzZXQ7CiAgICAgICAgIGVsc2UgCi0gICAgICAgICAgICB2UEMgKz0gY29kZUJsb2NrKHIpLT5z
dHJpbmdTd2l0Y2hKdW1wVGFibGVzW3RhYmxlSW5kZXhdLm9mZnNldEZvclZhbHVlKHN0YXRpY19j
YXN0PEpTU3RyaW5nKj4oc2NydXRpbmVlKS0+dmFsdWUoKS5yZXAoKSwgZGVmYXVsdE9mZnNldCk7
CisgICAgICAgICAgICB2UEMgKz0gY2FsbEZyYW1lLT5jb2RlQmxvY2soKS0+c3RyaW5nU3dpdGNo
SnVtcFRhYmxlc1t0YWJsZUluZGV4XS5vZmZzZXRGb3JWYWx1ZShzdGF0aWNfY2FzdDxKU1N0cmlu
Zyo+KHNjcnV0aW5lZSktPnZhbHVlKCkucmVwKCksIGRlZmF1bHRPZmZzZXQpOwogICAgICAgICBO
RVhUX09QQ09ERTsKICAgICB9CiAgICAgQkVHSU5fT1BDT0RFKG9wX25ld19mdW5jKSB7CkBAIC0z
MTc2LDcgKzMxNTksNyBAQCBKU1ZhbHVlKiBNYWNoaW5lOjpwcml2YXRlRXhlY3V0ZShFeGVjdXRp
CiAgICAgICAgIGludCBkc3QgPSAoKyt2UEMpLT51Lm9wZXJhbmQ7CiAgICAgICAgIGludCBmdW5j
ID0gKCsrdlBDKS0+dS5vcGVyYW5kOwogCi0gICAgICAgIHJbZHN0XSA9IGNvZGVCbG9jayhyKS0+
ZnVuY3Rpb25zW2Z1bmNdLT5tYWtlRnVuY3Rpb24oZXhlYywgc2NvcGVDaGFpbihyKSk7CisgICAg
ICAgIGNhbGxGcmFtZS0+cmVnaXN0ZXJzKClbZHN0XSA9IGNhbGxGcmFtZS0+Y29kZUJsb2NrKCkt
PmZ1bmN0aW9uc1tmdW5jXS0+bWFrZUZ1bmN0aW9uKGNhbGxGcmFtZSwgY2FsbEZyYW1lLT5zY29w
ZUNoYWluKCkpOwogCiAgICAgICAgICsrdlBDOwogICAgICAgICBORVhUX09QQ09ERTsKQEAgLTMx
OTIsNyArMzE3NSw3IEBAIEpTVmFsdWUqIE1hY2hpbmU6OnByaXZhdGVFeGVjdXRlKEV4ZWN1dGkK
ICAgICAgICAgaW50IGRzdCA9ICgrK3ZQQyktPnUub3BlcmFuZDsKICAgICAgICAgaW50IGZ1bmMg
PSAoKyt2UEMpLT51Lm9wZXJhbmQ7CiAKLSAgICAgICAgcltkc3RdID0gY29kZUJsb2NrKHIpLT5m
dW5jdGlvbkV4cHJlc3Npb25zW2Z1bmNdLT5tYWtlRnVuY3Rpb24oZXhlYywgc2NvcGVDaGFpbihy
KSk7CisgICAgICAgIGNhbGxGcmFtZS0+cmVnaXN0ZXJzKClbZHN0XSA9IGNhbGxGcmFtZS0+Y29k
ZUJsb2NrKCktPmZ1bmN0aW9uRXhwcmVzc2lvbnNbZnVuY10tPm1ha2VGdW5jdGlvbihjYWxsRnJh
bWUsIGNhbGxGcmFtZS0+c2NvcGVDaGFpbigpKTsKIAogICAgICAgICArK3ZQQzsKICAgICAgICAg
TkVYVF9PUENPREU7CkBAIC0zMjE2LDE3ICszMTk5LDE3IEBAIEpTVmFsdWUqIE1hY2hpbmU6OnBy
aXZhdGVFeGVjdXRlKEV4ZWN1dGkKICAgICAgICAgaW50IGFyZ0NvdW50ID0gKCsrdlBDKS0+dS5v
cGVyYW5kOwogICAgICAgICArK3ZQQzsgLy8gcmVnaXN0ZXJPZmZzZXQKIAotICAgICAgICBKU1Zh
bHVlKiBmdW5jVmFsID0gcltmdW5jXS5qc1ZhbHVlKGV4ZWMpOwotICAgICAgICBKU1ZhbHVlKiBi
YXNlVmFsID0gclt0aGlzVmFsXS5qc1ZhbHVlKGV4ZWMpOworICAgICAgICBKU1ZhbHVlKiBmdW5j
VmFsID0gY2FsbEZyYW1lLT5yZWdpc3RlcnMoKVtmdW5jXS5qc1ZhbHVlKGNhbGxGcmFtZSk7Cisg
ICAgICAgIEpTVmFsdWUqIGJhc2VWYWwgPSBjYWxsRnJhbWUtPnJlZ2lzdGVycygpW3RoaXNWYWxd
LmpzVmFsdWUoY2FsbEZyYW1lKTsKIAotICAgICAgICBTY29wZUNoYWluTm9kZSogc2NvcGVDaGFp
biA9IHRoaXMtPnNjb3BlQ2hhaW4ocik7CisgICAgICAgIFNjb3BlQ2hhaW5Ob2RlKiBzY29wZUNo
YWluID0gY2FsbEZyYW1lLT5zY29wZUNoYWluKCk7CiAgICAgICAgIGlmIChiYXNlVmFsID09IHNj
b3BlQ2hhaW4tPmdsb2JhbE9iamVjdCgpICYmIGZ1bmNWYWwgPT0gc2NvcGVDaGFpbi0+Z2xvYmFs
T2JqZWN0KCktPmV2YWxGdW5jdGlvbigpKSB7Ci0gICAgICAgICAgICBKU09iamVjdCogdGhpc09i
amVjdCA9IHN0YXRpY19jYXN0PEpTT2JqZWN0Kj4ocltjb2RlQmxvY2sociktPnRoaXNSZWdpc3Rl
cl0uanNWYWx1ZShleGVjKSk7Ci0gICAgICAgICAgICBKU1ZhbHVlKiByZXN1bHQgPSBjYWxsRXZh
bChleGVjLCB0aGlzT2JqZWN0LCBzY29wZUNoYWluLCByZWdpc3RlckZpbGUsIHIsIGZpcnN0QXJn
LCBhcmdDb3VudCwgZXhjZXB0aW9uVmFsdWUpOworICAgICAgICAgICAgSlNPYmplY3QqIHRoaXNP
YmplY3QgPSBzdGF0aWNfY2FzdDxKU09iamVjdCo+KGNhbGxGcmFtZS0+cmVnaXN0ZXJzKClbY2Fs
bEZyYW1lLT5jb2RlQmxvY2soKS0+dGhpc1JlZ2lzdGVyXS5qc1ZhbHVlKGNhbGxGcmFtZSkpOwor
ICAgICAgICAgICAgSlNWYWx1ZSogcmVzdWx0ID0gY2FsbEV2YWwoY2FsbEZyYW1lLCB0aGlzT2Jq
ZWN0LCBzY29wZUNoYWluLCByZWdpc3RlckZpbGUsIGZpcnN0QXJnLCBhcmdDb3VudCwgZXhjZXB0
aW9uVmFsdWUpOwogICAgICAgICAgICAgaWYgKGV4Y2VwdGlvblZhbHVlKQogICAgICAgICAgICAg
ICAgIGdvdG8gdm1fdGhyb3c7CiAKLSAgICAgICAgICAgIHJbZHN0XSA9IHJlc3VsdDsKKyAgICAg
ICAgICAgIGNhbGxGcmFtZS0+cmVnaXN0ZXJzKClbZHN0XSA9IHJlc3VsdDsKIAogICAgICAgICAg
ICAgKyt2UEM7CiAgICAgICAgICAgICBORVhUX09QQ09ERTsKQEAgLTMyMzYsNyArMzIxOSw3IEBA
IEpTVmFsdWUqIE1hY2hpbmU6OnByaXZhdGVFeGVjdXRlKEV4ZWN1dGkKICAgICAgICAgLy8gdGhp
cyBpbnN0cnVjdGlvbiBhcyBhIG5vcm1hbCBmdW5jdGlvbiBjYWxsLCBzdXBwbHlpbmcgdGhlIHBy
b3BlciAndGhpcycKICAgICAgICAgLy8gdmFsdWUuCiAgICAgICAgIHZQQyAtPSA2OwotICAgICAg
ICByW3RoaXNWYWxdID0gYmFzZVZhbC0+dG9UaGlzT2JqZWN0KGV4ZWMpOworICAgICAgICBjYWxs
RnJhbWUtPnJlZ2lzdGVycygpW3RoaXNWYWxdID0gYmFzZVZhbC0+dG9UaGlzT2JqZWN0KGNhbGxG
cmFtZSk7CiAKICNpZiBIQVZFKENPTVBVVEVEX0dPVE8pCiAgICAgICAgIC8vIEhhY2sgYXJvdW5k
IGdjYyBwZXJmb3JtYW5jZSBxdWlyayBieSBwZXJmb3JtaW5nIGFuIGluZGlyZWN0IGdvdG8KQEAg
LTMyOTAsNyArMzI3Myw3IEBAIEpTVmFsdWUqIE1hY2hpbmU6OnByaXZhdGVFeGVjdXRlKEV4ZWN1
dGkKICAgICAgICAgaW50IGFyZ0NvdW50ID0gKCsrdlBDKS0+dS5vcGVyYW5kOwogICAgICAgICBp
bnQgcmVnaXN0ZXJPZmZzZXQgPSAoKyt2UEMpLT51Lm9wZXJhbmQ7CiAKLSAgICAgICAgSlNWYWx1
ZSogdiA9IHJbZnVuY10uanNWYWx1ZShleGVjKTsKKyAgICAgICAgSlNWYWx1ZSogdiA9IGNhbGxG
cmFtZS0+cmVnaXN0ZXJzKClbZnVuY10uanNWYWx1ZShjYWxsRnJhbWUpOwogCiAgICAgICAgIENh
bGxEYXRhIGNhbGxEYXRhOwogICAgICAgICBDYWxsVHlwZSBjYWxsVHlwZSA9IHYtPmdldENhbGxE
YXRhKGNhbGxEYXRhKTsKQEAgLTMzMDAsMjEgKzMyODMsMjEgQEAgSlNWYWx1ZSogTWFjaGluZTo6
cHJpdmF0ZUV4ZWN1dGUoRXhlY3V0aQogICAgICAgICAgICAgRnVuY3Rpb25Cb2R5Tm9kZSogZnVu
Y3Rpb25Cb2R5Tm9kZSA9IGNhbGxEYXRhLmpzLmZ1bmN0aW9uQm9keTsKICAgICAgICAgICAgIENv
ZGVCbG9jayogbmV3Q29kZUJsb2NrID0gJmZ1bmN0aW9uQm9keU5vZGUtPmJ5dGVDb2RlKGNhbGxE
YXRhU2NvcGVDaGFpbik7CiAKLSAgICAgICAgICAgIHJbZmlyc3RBcmddID0gdGhpc1ZhbCA9PSBt
aXNzaW5nVGhpc09iamVjdE1hcmtlcigpID8gZXhlYy0+Z2xvYmFsVGhpc1ZhbHVlKCkgOiByW3Ro
aXNWYWxdLmpzVmFsdWUoZXhlYyk7CisgICAgICAgICAgICBjYWxsRnJhbWUtPnJlZ2lzdGVycygp
W2ZpcnN0QXJnXSA9IHRoaXNWYWwgPT0gbWlzc2luZ1RoaXNPYmplY3RNYXJrZXIoKSA/IGNhbGxG
cmFtZS0+Z2xvYmFsVGhpc1ZhbHVlKCkgOiBjYWxsRnJhbWUtPnJlZ2lzdGVycygpW3RoaXNWYWxd
LmpzVmFsdWUoY2FsbEZyYW1lKTsKICAgICAgICAgICAgIAotICAgICAgICAgICAgUmVnaXN0ZXIq
IHNhdmVkUiA9IHI7CisgICAgICAgICAgICBDYWxsRnJhbWUqIHByZXZpb3VzQ2FsbEZyYW1lID0g
Y2FsbEZyYW1lOwogCi0gICAgICAgICAgICByID0gc2xpZGVSZWdpc3RlcldpbmRvd0ZvckNhbGwo
bmV3Q29kZUJsb2NrLCByZWdpc3RlckZpbGUsIHIsIHJlZ2lzdGVyT2Zmc2V0LCBhcmdDb3VudCk7
Ci0gICAgICAgICAgICBpZiAoVU5MSUtFTFkoIXIpKSB7Ci0gICAgICAgICAgICAgICAgciA9IHNh
dmVkUjsKLSAgICAgICAgICAgICAgICBleGNlcHRpb25WYWx1ZSA9IGNyZWF0ZVN0YWNrT3ZlcmZs
b3dFcnJvcihDYWxsRnJhbWU6OmNyZWF0ZShyKSk7CisgICAgICAgICAgICBjYWxsRnJhbWUgPSBz
bGlkZVJlZ2lzdGVyV2luZG93Rm9yQ2FsbChuZXdDb2RlQmxvY2ssIHJlZ2lzdGVyRmlsZSwgY2Fs
bEZyYW1lLCByZWdpc3Rlck9mZnNldCwgYXJnQ291bnQpOworICAgICAgICAgICAgaWYgKFVOTElL
RUxZKCFjYWxsRnJhbWUpKSB7CisgICAgICAgICAgICAgICAgY2FsbEZyYW1lID0gcHJldmlvdXND
YWxsRnJhbWU7CisgICAgICAgICAgICAgICAgZXhjZXB0aW9uVmFsdWUgPSBjcmVhdGVTdGFja092
ZXJmbG93RXJyb3IoY2FsbEZyYW1lKTsKICAgICAgICAgICAgICAgICBnb3RvIHZtX3Rocm93Owog
ICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBpbml0aWFsaXplQ2FsbEZyYW1lKHIsIG5ld0Nv
ZGVCbG9jaywgdlBDICsgMSwgY2FsbERhdGFTY29wZUNoYWluLCBzYXZlZFIsIGRzdCwgYXJnQ291
bnQsIHYpOworICAgICAgICAgICAgY2FsbEZyYW1lLT5pbml0KG5ld0NvZGVCbG9jaywgdlBDICsg
MSwgY2FsbERhdGFTY29wZUNoYWluLCBwcmV2aW91c0NhbGxGcmFtZSwgZHN0LCBhcmdDb3VudCwg
c3RhdGljX2Nhc3Q8SlNGdW5jdGlvbio+KHYpKTsKICAgICAKICAgICAgICAgICAgIGlmICgqZW5h
YmxlZFByb2ZpbGVyUmVmZXJlbmNlKQotICAgICAgICAgICAgICAgICgqZW5hYmxlZFByb2ZpbGVy
UmVmZXJlbmNlKS0+d2lsbEV4ZWN1dGUoZXhlYywgc3RhdGljX2Nhc3Q8SlNPYmplY3QqPih2KSk7
CisgICAgICAgICAgICAgICAgKCplbmFibGVkUHJvZmlsZXJSZWZlcmVuY2UpLT53aWxsRXhlY3V0
ZShjYWxsRnJhbWUsIHN0YXRpY19jYXN0PEpTT2JqZWN0Kj4odikpOwogCiAgICAgICAgICAgICB2
UEMgPSBuZXdDb2RlQmxvY2stPmluc3RydWN0aW9ucy5iZWdpbigpOwogCkBAIC0zMzI2LDI1ICsz
MzA5LDI1IEBAIEpTVmFsdWUqIE1hY2hpbmU6OnByaXZhdGVFeGVjdXRlKEV4ZWN1dGkKICAgICAg
ICAgfQogCiAgICAgICAgIGlmIChjYWxsVHlwZSA9PSBDYWxsVHlwZUhvc3QpIHsKLSAgICAgICAg
ICAgIEpTVmFsdWUqIHRoaXNWYWx1ZSA9IHRoaXNWYWwgPT0gbWlzc2luZ1RoaXNPYmplY3RNYXJr
ZXIoKSA/IGV4ZWMtPmdsb2JhbFRoaXNWYWx1ZSgpIDogclt0aGlzVmFsXS5qc1ZhbHVlKGV4ZWMp
OwotICAgICAgICAgICAgQXJnTGlzdCBhcmdzKHIgKyBmaXJzdEFyZyArIDEsIGFyZ0NvdW50IC0g
MSk7CisgICAgICAgICAgICBKU1ZhbHVlKiB0aGlzVmFsdWUgPSB0aGlzVmFsID09IG1pc3NpbmdU
aGlzT2JqZWN0TWFya2VyKCkgPyBjYWxsRnJhbWUtPmdsb2JhbFRoaXNWYWx1ZSgpIDogY2FsbEZy
YW1lLT5yZWdpc3RlcnMoKVt0aGlzVmFsXS5qc1ZhbHVlKGNhbGxGcmFtZSk7CisgICAgICAgICAg
ICBBcmdMaXN0IGFyZ3MoY2FsbEZyYW1lLT5yZWdpc3RlcnMoKSArIGZpcnN0QXJnICsgMSwgYXJn
Q291bnQgLSAxKTsKIAotICAgICAgICAgICAgU2NvcGVDaGFpbk5vZGUqIHNjb3BlQ2hhaW4gPSB0
aGlzLT5zY29wZUNoYWluKHIpOwotICAgICAgICAgICAgaW5pdGlhbGl6ZUNhbGxGcmFtZShyICsg
cmVnaXN0ZXJPZmZzZXQsIDAsIHZQQyArIDEsIHNjb3BlQ2hhaW4sIHIsIGRzdCwgYXJnQ291bnQs
IHYpOwotICAgICAgICAgICAgRXhlY1N0YXRlKiBjYWxsRnJhbWUgPSBDYWxsRnJhbWU6OmNyZWF0
ZShyICsgcmVnaXN0ZXJPZmZzZXQpOworICAgICAgICAgICAgU2NvcGVDaGFpbk5vZGUqIHNjb3Bl
Q2hhaW4gPSBjYWxsRnJhbWUtPnNjb3BlQ2hhaW4oKTsKKyAgICAgICAgICAgIENhbGxGcmFtZSog
bmV3Q2FsbEZyYW1lID0gQ2FsbEZyYW1lOjpjcmVhdGUoY2FsbEZyYW1lLT5yZWdpc3RlcnMoKSAr
IHJlZ2lzdGVyT2Zmc2V0KTsKKyAgICAgICAgICAgIG5ld0NhbGxGcmFtZS0+aW5pdCgwLCB2UEMg
KyAxLCBzY29wZUNoYWluLCBjYWxsRnJhbWUsIGRzdCwgYXJnQ291bnQsIHN0YXRpY19jYXN0PEpT
RnVuY3Rpb24qPih2KSk7CiAKICAgICAgICAgICAgIGlmICgqZW5hYmxlZFByb2ZpbGVyUmVmZXJl
bmNlKQotICAgICAgICAgICAgICAgICgqZW5hYmxlZFByb2ZpbGVyUmVmZXJlbmNlKS0+d2lsbEV4
ZWN1dGUoY2FsbEZyYW1lLCBzdGF0aWNfY2FzdDxKU09iamVjdCo+KHYpKTsKKyAgICAgICAgICAg
ICAgICAoKmVuYWJsZWRQcm9maWxlclJlZmVyZW5jZSktPndpbGxFeGVjdXRlKG5ld0NhbGxGcmFt
ZSwgc3RhdGljX2Nhc3Q8SlNGdW5jdGlvbio+KHYpKTsKIAogICAgICAgICAgICAgTUFDSElORV9T
QU1QTElOR19jYWxsaW5nSG9zdEZ1bmN0aW9uKCk7CiAKLSAgICAgICAgICAgIEpTVmFsdWUqIHJl
dHVyblZhbHVlID0gY2FsbERhdGEubmF0aXZlLmZ1bmN0aW9uKGNhbGxGcmFtZSwgc3RhdGljX2Nh
c3Q8SlNPYmplY3QqPih2KSwgdGhpc1ZhbHVlLCBhcmdzKTsKKyAgICAgICAgICAgIEpTVmFsdWUq
IHJldHVyblZhbHVlID0gY2FsbERhdGEubmF0aXZlLmZ1bmN0aW9uKG5ld0NhbGxGcmFtZSwgc3Rh
dGljX2Nhc3Q8SlNGdW5jdGlvbio+KHYpLCB0aGlzVmFsdWUsIGFyZ3MpOwogICAgICAgICAgICAg
Vk1fQ0hFQ0tfRVhDRVBUSU9OKCk7CiAKLSAgICAgICAgICAgIHJbZHN0XSA9IHJldHVyblZhbHVl
OworICAgICAgICAgICAgbmV3Q2FsbEZyYW1lLT5yZWdpc3RlcnMoKVtkc3RdID0gcmV0dXJuVmFs
dWU7CiAKICAgICAgICAgICAgIGlmICgqZW5hYmxlZFByb2ZpbGVyUmVmZXJlbmNlKQotICAgICAg
ICAgICAgICAgICgqZW5hYmxlZFByb2ZpbGVyUmVmZXJlbmNlKS0+ZGlkRXhlY3V0ZShDYWxsRnJh
bWU6OmNyZWF0ZShyKSwgc3RhdGljX2Nhc3Q8SlNPYmplY3QqPih2KSk7CisgICAgICAgICAgICAg
ICAgKCplbmFibGVkUHJvZmlsZXJSZWZlcmVuY2UpLT5kaWRFeGVjdXRlKGNhbGxGcmFtZSwgc3Rh
dGljX2Nhc3Q8SlNGdW5jdGlvbio+KHYpKTsKIAogICAgICAgICAgICAgKyt2UEM7CiAgICAgICAg
ICAgICBORVhUX09QQ09ERTsKQEAgLTMzNTIsMjcgKzMzMzUsMjEgQEAgSlNWYWx1ZSogTWFjaGlu
ZTo6cHJpdmF0ZUV4ZWN1dGUoRXhlY3V0aQogCiAgICAgICAgIEFTU0VSVChjYWxsVHlwZSA9PSBD
YWxsVHlwZU5vbmUpOwogCi0gICAgICAgIGV4Y2VwdGlvblZhbHVlID0gY3JlYXRlTm90QUZ1bmN0
aW9uRXJyb3IoZXhlYywgdiwgdlBDLCBjb2RlQmxvY2socikpOworICAgICAgICBleGNlcHRpb25W
YWx1ZSA9IGNyZWF0ZU5vdEFGdW5jdGlvbkVycm9yKGNhbGxGcmFtZSwgdiwgdlBDLCBjYWxsRnJh
bWUtPmNvZGVCbG9jaygpKTsKICAgICAgICAgZ290byB2bV90aHJvdzsKICAgICB9CiAgICAgQkVH
SU5fT1BDT0RFKG9wX3RlYXJfb2ZmX2FjdGl2YXRpb24pIHsKLSAgICAgICAgSlNBY3RpdmF0aW9u
KiBhY3RpdmF0aW9uID0gc3RhdGljX2Nhc3Q8SlNBY3RpdmF0aW9uKj4ocltSZWdpc3RlckZpbGU6
Ok9wdGlvbmFsQ2FsbGVlQWN0aXZhdGlvbl0uZ2V0SlNWYWx1ZSgpKTsKLSAgICAgICAgQVNTRVJU
KGNvZGVCbG9jayhyKS0+bmVlZHNGdWxsU2NvcGVDaGFpbik7Ci0gICAgICAgIEFTU0VSVChhY3Rp
dmF0aW9uLT5pc09iamVjdCgmSlNBY3RpdmF0aW9uOjppbmZvKSk7Ci0KLSAgICAgICAgQXJndW1l
bnRzKiBhcmd1bWVudHMgPSBzdGF0aWNfY2FzdDxBcmd1bWVudHMqPihyW1JlZ2lzdGVyRmlsZTo6
T3B0aW9uYWxDYWxsZWVBcmd1bWVudHNdLmdldEpTVmFsdWUoKSk7Ci0gICAgICAgIEFTU0VSVCgh
YXJndW1lbnRzIHx8IGFyZ3VtZW50cy0+aXNPYmplY3QoJkFyZ3VtZW50czo6aW5mbykpOwotICAg
ICAgICBhY3RpdmF0aW9uLT5jb3B5UmVnaXN0ZXJzKGFyZ3VtZW50cyk7CisgICAgICAgIEpTQWN0
aXZhdGlvbiogYWN0aXZhdGlvbiA9IGNhbGxGcmFtZS0+b3B0aW9uYWxDYWxsZWVBY3RpdmF0aW9u
KCk7CisgICAgICAgIEFTU0VSVChjYWxsRnJhbWUtPmNvZGVCbG9jaygpLT5uZWVkc0Z1bGxTY29w
ZUNoYWluKTsKKyAgICAgICAgYWN0aXZhdGlvbi0+Y29weVJlZ2lzdGVycyhjYWxsRnJhbWUtPm9w
dGlvbmFsQ2FsbGVlQXJndW1lbnRzKCkpOwogCiAgICAgICAgICsrdlBDOwogICAgICAgICBORVhU
X09QQ09ERTsKICAgICB9CiAgICAgQkVHSU5fT1BDT0RFKG9wX3RlYXJfb2ZmX2FyZ3VtZW50cykg
ewotICAgICAgICBBcmd1bWVudHMqIGFyZ3VtZW50cyA9IHN0YXRpY19jYXN0PEFyZ3VtZW50cyo+
KHJbUmVnaXN0ZXJGaWxlOjpPcHRpb25hbENhbGxlZUFyZ3VtZW50c10uZ2V0SlNWYWx1ZSgpKTsK
LSAgICAgICAgQVNTRVJUKGNvZGVCbG9jayhyKS0+dXNlc0FyZ3VtZW50cyAmJiAhY29kZUJsb2Nr
KHIpLT5uZWVkc0Z1bGxTY29wZUNoYWluKTsKLSAgICAgICAgQVNTRVJUKGFyZ3VtZW50cy0+aXNP
YmplY3QoJkFyZ3VtZW50czo6aW5mbykpOworICAgICAgICBBU1NFUlQoY2FsbEZyYW1lLT5jb2Rl
QmxvY2soKS0+dXNlc0FyZ3VtZW50cyAmJiAhY2FsbEZyYW1lLT5jb2RlQmxvY2soKS0+bmVlZHNG
dWxsU2NvcGVDaGFpbik7CiAKLSAgICAgICAgYXJndW1lbnRzLT5jb3B5UmVnaXN0ZXJzKCk7Cisg
ICAgICAgIGNhbGxGcmFtZS0+b3B0aW9uYWxDYWxsZWVBcmd1bWVudHMoKS0+Y29weVJlZ2lzdGVy
cygpOwogCiAgICAgICAgICsrdlBDOwogICAgICAgICBORVhUX09QQ09ERTsKQEAgLTMzOTAsMjEg
KzMzNjcsMjEgQEAgSlNWYWx1ZSogTWFjaGluZTo6cHJpdmF0ZUV4ZWN1dGUoRXhlY3V0aQogICAg
ICAgICBpbnQgcmVzdWx0ID0gKCsrdlBDKS0+dS5vcGVyYW5kOwogCiAgICAgICAgIGlmICgqZW5h
YmxlZFByb2ZpbGVyUmVmZXJlbmNlKQotICAgICAgICAgICAgKCplbmFibGVkUHJvZmlsZXJSZWZl
cmVuY2UpLT5kaWRFeGVjdXRlKGV4ZWMsIHN0YXRpY19jYXN0PEpTT2JqZWN0Kj4ocltSZWdpc3Rl
ckZpbGU6OkNhbGxlZV0uanNWYWx1ZShleGVjKSkpOworICAgICAgICAgICAgKCplbmFibGVkUHJv
ZmlsZXJSZWZlcmVuY2UpLT5kaWRFeGVjdXRlKGNhbGxGcmFtZSwgY2FsbEZyYW1lLT5jYWxsZWUo
KSk7CiAKLSAgICAgICAgaWYgKGNvZGVCbG9jayhyKS0+bmVlZHNGdWxsU2NvcGVDaGFpbikKLSAg
ICAgICAgICAgIHNjb3BlQ2hhaW4ociktPmRlcmVmKCk7CisgICAgICAgIGlmIChjYWxsRnJhbWUt
PmNvZGVCbG9jaygpLT5uZWVkc0Z1bGxTY29wZUNoYWluKQorICAgICAgICAgICAgY2FsbEZyYW1l
LT5zY29wZUNoYWluKCktPmRlcmVmKCk7CiAKLSAgICAgICAgSlNWYWx1ZSogcmV0dXJuVmFsdWUg
PSByW3Jlc3VsdF0uanNWYWx1ZShleGVjKTsKKyAgICAgICAgSlNWYWx1ZSogcmV0dXJuVmFsdWUg
PSBjYWxsRnJhbWUtPnJlZ2lzdGVycygpW3Jlc3VsdF0uanNWYWx1ZShjYWxsRnJhbWUpOwogCi0g
ICAgICAgIHZQQyA9IHJbUmVnaXN0ZXJGaWxlOjpSZXR1cm5QQ10udlBDKCk7Ci0gICAgICAgIGlu
dCBkc3QgPSByW1JlZ2lzdGVyRmlsZTo6UmV0dXJuVmFsdWVSZWdpc3Rlcl0uaSgpOwotICAgICAg
ICByID0gcltSZWdpc3RlckZpbGU6OkNhbGxlclJlZ2lzdGVyc10ucigpOworICAgICAgICB2UEMg
PSBjYWxsRnJhbWUtPnJldHVyblBDKCk7CisgICAgICAgIGludCBkc3QgPSBjYWxsRnJhbWUtPnJl
dHVyblZhbHVlUmVnaXN0ZXIoKTsKKyAgICAgICAgY2FsbEZyYW1lID0gY2FsbEZyYW1lLT5jYWxs
ZXJGcmFtZSgpOwogICAgICAgICAKLSAgICAgICAgaWYgKGlzSG9zdENhbGxGcmFtZShyKSkKKyAg
ICAgICAgaWYgKGNhbGxGcmFtZS0+aGFzSG9zdENhbGxGcmFtZUZsYWcoKSkKICAgICAgICAgICAg
IHJldHVybiByZXR1cm5WYWx1ZTsKIAotICAgICAgICByW2RzdF0gPSByZXR1cm5WYWx1ZTsKKyAg
ICAgICAgY2FsbEZyYW1lLT5yZWdpc3RlcnMoKVtkc3RdID0gcmV0dXJuVmFsdWU7CiAKICAgICAg
ICAgTkVYVF9PUENPREU7CiAgICAgfQpAQCAtMzQyMCwxMyArMzM5NywxMyBAQCBKU1ZhbHVlKiBN
YWNoaW5lOjpwcml2YXRlRXhlY3V0ZShFeGVjdXRpCiAgICAgICAgICovCiAKICAgICAgICAgc2l6
ZV90IGkgPSAwOwotICAgICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IHRoaXMtPmNvZGVCbG9j
ayhyKTsKKyAgICAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBjYWxsRnJhbWUtPmNvZGVCbG9j
aygpOwogICAgICAgICAKICAgICAgICAgZm9yIChzaXplX3QgY291bnQgPSBjb2RlQmxvY2stPm51
bVZhcnM7IGkgPCBjb3VudDsgKytpKQotICAgICAgICAgICAgcltpXSA9IGpzVW5kZWZpbmVkKCk7
CisgICAgICAgICAgICBjYWxsRnJhbWUtPnJlZ2lzdGVycygpW2ldID0ganNVbmRlZmluZWQoKTsK
IAogICAgICAgICBmb3IgKHNpemVfdCBjb3VudCA9IGNvZGVCbG9jay0+Y29uc3RhbnRSZWdpc3Rl
cnMuc2l6ZSgpLCBqID0gMDsgaiA8IGNvdW50OyArK2ksICsraikKLSAgICAgICAgICAgIHJbaV0g
PSBjb2RlQmxvY2stPmNvbnN0YW50UmVnaXN0ZXJzW2pdOworICAgICAgICAgICAgY2FsbEZyYW1l
LT5yZWdpc3RlcnMoKVtpXSA9IGNvZGVCbG9jay0+Y29uc3RhbnRSZWdpc3RlcnNbal07CiAKICAg
ICAgICAgKyt2UEM7CiAgICAgICAgIE5FWFRfT1BDT0RFOwpAQCAtMzQ0NiwyNiArMzQyMywyNiBA
QCBKU1ZhbHVlKiBNYWNoaW5lOjpwcml2YXRlRXhlY3V0ZShFeGVjdXRpCiAgICAgICAgICovCiAK
ICAgICAgICAgc2l6ZV90IGkgPSAwOwotICAgICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IHRo
aXMtPmNvZGVCbG9jayhyKTsKKyAgICAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBjYWxsRnJh
bWUtPmNvZGVCbG9jaygpOwogCiAgICAgICAgIGZvciAoc2l6ZV90IGNvdW50ID0gY29kZUJsb2Nr
LT5udW1WYXJzOyBpIDwgY291bnQ7ICsraSkKLSAgICAgICAgICAgIHJbaV0gPSBqc1VuZGVmaW5l
ZCgpOworICAgICAgICAgICAgY2FsbEZyYW1lLT5yZWdpc3RlcnMoKVtpXSA9IGpzVW5kZWZpbmVk
KCk7CiAKICAgICAgICAgZm9yIChzaXplX3QgY291bnQgPSBjb2RlQmxvY2stPmNvbnN0YW50UmVn
aXN0ZXJzLnNpemUoKSwgaiA9IDA7IGogPCBjb3VudDsgKytpLCArK2opCi0gICAgICAgICAgICBy
W2ldID0gY29kZUJsb2NrLT5jb25zdGFudFJlZ2lzdGVyc1tqXTsKKyAgICAgICAgICAgIGNhbGxG
cmFtZS0+cmVnaXN0ZXJzKClbaV0gPSBjb2RlQmxvY2stPmNvbnN0YW50UmVnaXN0ZXJzW2pdOwog
Ci0gICAgICAgIEpTQWN0aXZhdGlvbiogYWN0aXZhdGlvbiA9IG5ldyAoZ2xvYmFsRGF0YSkgSlNB
Y3RpdmF0aW9uKGV4ZWMsIHN0YXRpY19jYXN0PEZ1bmN0aW9uQm9keU5vZGUqPihjb2RlQmxvY2st
Pm93bmVyTm9kZSksIHIpOwotICAgICAgICByW1JlZ2lzdGVyRmlsZTo6T3B0aW9uYWxDYWxsZWVB
Y3RpdmF0aW9uXSA9IGFjdGl2YXRpb247Ci0gICAgICAgIHJbUmVnaXN0ZXJGaWxlOjpTY29wZUNo
YWluXSA9IHNjb3BlQ2hhaW4ociktPmNvcHkoKS0+cHVzaChhY3RpdmF0aW9uKTsKKyAgICAgICAg
SlNBY3RpdmF0aW9uKiBhY3RpdmF0aW9uID0gbmV3IChnbG9iYWxEYXRhKSBKU0FjdGl2YXRpb24o
Y2FsbEZyYW1lLCBzdGF0aWNfY2FzdDxGdW5jdGlvbkJvZHlOb2RlKj4oY29kZUJsb2NrLT5vd25l
ck5vZGUpKTsKKyAgICAgICAgY2FsbEZyYW1lLT5zZXRDYWxsZWVBY3RpdmF0aW9uKGFjdGl2YXRp
b24pOworICAgICAgICBjYWxsRnJhbWUtPnNldFNjb3BlQ2hhaW4oY2FsbEZyYW1lLT5zY29wZUNo
YWluKCktPmNvcHkoKS0+cHVzaChhY3RpdmF0aW9uKSk7CiAKICAgICAgICAgKyt2UEM7CiAgICAg
ICAgIE5FWFRfT1BDT0RFOwogICAgIH0KICAgICBCRUdJTl9PUENPREUob3BfY29udmVydF90aGlz
KSB7CiAgICAgICAgIGludCB0aGlzUmVnaXN0ZXIgPSAoKyt2UEMpLT51Lm9wZXJhbmQ7Ci0gICAg
ICAgIEpTVmFsdWUqIHRoaXNWYWwgPSByW3RoaXNSZWdpc3Rlcl0uZ2V0SlNWYWx1ZSgpOworICAg
ICAgICBKU1ZhbHVlKiB0aGlzVmFsID0gY2FsbEZyYW1lLT5yZWdpc3RlcnMoKVt0aGlzUmVnaXN0
ZXJdLmdldEpTVmFsdWUoKTsKICAgICAgICAgaWYgKHRoaXNWYWwtPm5lZWRzVGhpc0NvbnZlcnNp
b24oKSkKLSAgICAgICAgICAgIHJbdGhpc1JlZ2lzdGVyXSA9IHRoaXNWYWwtPnRvVGhpc09iamVj
dChleGVjKTsKKyAgICAgICAgICAgIGNhbGxGcmFtZS0+cmVnaXN0ZXJzKClbdGhpc1JlZ2lzdGVy
XSA9IHRoaXNWYWwtPnRvVGhpc09iamVjdChjYWxsRnJhbWUpOwogCiAgICAgICAgICsrdlBDOwog
ICAgICAgICBORVhUX09QQ09ERTsKQEAgLTM0ODEsOSArMzQ1OCw5IEBAIEpTVmFsdWUqIE1hY2hp
bmU6OnByaXZhdGVFeGVjdXRlKEV4ZWN1dGkKICAgICAgICAgICAgYmxvY2suCiAgICAgICAgICov
CiAKLSAgICAgICAgQXJndW1lbnRzKiBhcmd1bWVudHMgPSBuZXcgKGdsb2JhbERhdGEpIEFyZ3Vt
ZW50cyhleGVjLCByKTsKLSAgICAgICAgcltSZWdpc3RlckZpbGU6Ok9wdGlvbmFsQ2FsbGVlQXJn
dW1lbnRzXSA9IGFyZ3VtZW50czsKLSAgICAgICAgcltSZWdpc3RlckZpbGU6OkFyZ3VtZW50c1Jl
Z2lzdGVyXSA9IGFyZ3VtZW50czsKKyAgICAgICAgQXJndW1lbnRzKiBhcmd1bWVudHMgPSBuZXcg
KGdsb2JhbERhdGEpIEFyZ3VtZW50cyhjYWxsRnJhbWUpOworICAgICAgICBjYWxsRnJhbWUtPnNl
dENhbGxlZUFyZ3VtZW50cyhhcmd1bWVudHMpOworICAgICAgICBjYWxsRnJhbWUtPnJlZ2lzdGVy
cygpW1JlZ2lzdGVyRmlsZTo6QXJndW1lbnRzUmVnaXN0ZXJdID0gYXJndW1lbnRzOwogICAgICAg
ICAKICAgICAgICAgKyt2UEM7CiAgICAgICAgIE5FWFRfT1BDT0RFOwpAQCAtMzUxMCw0MiArMzQ4
Nyw0MiBAQCBKU1ZhbHVlKiBNYWNoaW5lOjpwcml2YXRlRXhlY3V0ZShFeGVjdXRpCiAgICAgICAg
IGludCBhcmdDb3VudCA9ICgrK3ZQQyktPnUub3BlcmFuZDsKICAgICAgICAgaW50IHJlZ2lzdGVy
T2Zmc2V0ID0gKCsrdlBDKS0+dS5vcGVyYW5kOwogCi0gICAgICAgIEpTVmFsdWUqIHYgPSByW2Nv
bnN0cl0uanNWYWx1ZShleGVjKTsKKyAgICAgICAgSlNWYWx1ZSogdiA9IGNhbGxGcmFtZS0+cmVn
aXN0ZXJzKClbY29uc3RyXS5qc1ZhbHVlKGNhbGxGcmFtZSk7CiAKICAgICAgICAgQ29uc3RydWN0
RGF0YSBjb25zdHJ1Y3REYXRhOwogICAgICAgICBDb25zdHJ1Y3RUeXBlIGNvbnN0cnVjdFR5cGUg
PSB2LT5nZXRDb25zdHJ1Y3REYXRhKGNvbnN0cnVjdERhdGEpOwogCiAgICAgICAgIGlmIChjb25z
dHJ1Y3RUeXBlID09IENvbnN0cnVjdFR5cGVKUykgewogICAgICAgICAgICAgaWYgKCplbmFibGVk
UHJvZmlsZXJSZWZlcmVuY2UpCi0gICAgICAgICAgICAgICAgKCplbmFibGVkUHJvZmlsZXJSZWZl
cmVuY2UpLT53aWxsRXhlY3V0ZShleGVjLCBzdGF0aWNfY2FzdDxKU09iamVjdCo+KHYpKTsKKyAg
ICAgICAgICAgICAgICAoKmVuYWJsZWRQcm9maWxlclJlZmVyZW5jZSktPndpbGxFeGVjdXRlKGNh
bGxGcmFtZSwgc3RhdGljX2Nhc3Q8SlNPYmplY3QqPih2KSk7CiAKICAgICAgICAgICAgIFNjb3Bl
Q2hhaW5Ob2RlKiBjYWxsRGF0YVNjb3BlQ2hhaW4gPSBjb25zdHJ1Y3REYXRhLmpzLnNjb3BlQ2hh
aW47CiAgICAgICAgICAgICBGdW5jdGlvbkJvZHlOb2RlKiBmdW5jdGlvbkJvZHlOb2RlID0gY29u
c3RydWN0RGF0YS5qcy5mdW5jdGlvbkJvZHk7CiAgICAgICAgICAgICBDb2RlQmxvY2sqIG5ld0Nv
ZGVCbG9jayA9ICZmdW5jdGlvbkJvZHlOb2RlLT5ieXRlQ29kZShjYWxsRGF0YVNjb3BlQ2hhaW4p
OwogCiAgICAgICAgICAgICBTdHJ1Y3R1cmVJRCogc3RydWN0dXJlOwotICAgICAgICAgICAgSlNW
YWx1ZSogcHJvdG90eXBlID0gcltjb25zdHJQcm90b10uanNWYWx1ZShleGVjKTsKKyAgICAgICAg
ICAgIEpTVmFsdWUqIHByb3RvdHlwZSA9IGNhbGxGcmFtZS0+cmVnaXN0ZXJzKClbY29uc3RyUHJv
dG9dLmpzVmFsdWUoY2FsbEZyYW1lKTsKICAgICAgICAgICAgIGlmIChwcm90b3R5cGUtPmlzT2Jq
ZWN0KCkpCiAgICAgICAgICAgICAgICAgc3RydWN0dXJlID0gc3RhdGljX2Nhc3Q8SlNPYmplY3Qq
Pihwcm90b3R5cGUpLT5pbmhlcml0b3JJRCgpOwogICAgICAgICAgICAgZWxzZQogICAgICAgICAg
ICAgICAgIHN0cnVjdHVyZSA9IGNhbGxEYXRhU2NvcGVDaGFpbi0+Z2xvYmFsT2JqZWN0KCktPmVt
cHR5T2JqZWN0U3RydWN0dXJlKCk7CiAgICAgICAgICAgICBKU09iamVjdCogbmV3T2JqZWN0ID0g
bmV3IChnbG9iYWxEYXRhKSBKU09iamVjdChzdHJ1Y3R1cmUpOwogCi0gICAgICAgICAgICByW2Zp
cnN0QXJnXSA9IG5ld09iamVjdDsgLy8gInRoaXMiIHZhbHVlCisgICAgICAgICAgICBjYWxsRnJh
bWUtPnJlZ2lzdGVycygpW2ZpcnN0QXJnXSA9IG5ld09iamVjdDsgLy8gInRoaXMiIHZhbHVlCiAK
LSAgICAgICAgICAgIFJlZ2lzdGVyKiBzYXZlZFIgPSByOworICAgICAgICAgICAgQ2FsbEZyYW1l
KiBwcmV2aW91c0NhbGxGcmFtZSA9IGNhbGxGcmFtZTsKIAotICAgICAgICAgICAgciA9IHNsaWRl
UmVnaXN0ZXJXaW5kb3dGb3JDYWxsKG5ld0NvZGVCbG9jaywgcmVnaXN0ZXJGaWxlLCByLCByZWdp
c3Rlck9mZnNldCwgYXJnQ291bnQpOwotICAgICAgICAgICAgaWYgKFVOTElLRUxZKCFyKSkgewot
ICAgICAgICAgICAgICAgIHIgPSBzYXZlZFI7Ci0gICAgICAgICAgICAgICAgZXhjZXB0aW9uVmFs
dWUgPSBjcmVhdGVTdGFja092ZXJmbG93RXJyb3IoQ2FsbEZyYW1lOjpjcmVhdGUocikpOworICAg
ICAgICAgICAgY2FsbEZyYW1lID0gc2xpZGVSZWdpc3RlcldpbmRvd0ZvckNhbGwobmV3Q29kZUJs
b2NrLCByZWdpc3RlckZpbGUsIGNhbGxGcmFtZSwgcmVnaXN0ZXJPZmZzZXQsIGFyZ0NvdW50KTsK
KyAgICAgICAgICAgIGlmIChVTkxJS0VMWSghY2FsbEZyYW1lKSkgeworICAgICAgICAgICAgICAg
IGNhbGxGcmFtZSA9IHByZXZpb3VzQ2FsbEZyYW1lOworICAgICAgICAgICAgICAgIGV4Y2VwdGlv
blZhbHVlID0gY3JlYXRlU3RhY2tPdmVyZmxvd0Vycm9yKGNhbGxGcmFtZSk7CiAgICAgICAgICAg
ICAgICAgZ290byB2bV90aHJvdzsKICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgaW5pdGlh
bGl6ZUNhbGxGcmFtZShyLCBuZXdDb2RlQmxvY2ssIHZQQyArIDEsIGNhbGxEYXRhU2NvcGVDaGFp
biwgc2F2ZWRSLCBkc3QsIGFyZ0NvdW50LCB2KTsKKyAgICAgICAgICAgIGNhbGxGcmFtZS0+aW5p
dChuZXdDb2RlQmxvY2ssIHZQQyArIDEsIGNhbGxEYXRhU2NvcGVDaGFpbiwgcHJldmlvdXNDYWxs
RnJhbWUsIGRzdCwgYXJnQ291bnQsIHN0YXRpY19jYXN0PEpTRnVuY3Rpb24qPih2KSk7CiAgICAg
CiAgICAgICAgICAgICBpZiAoKmVuYWJsZWRQcm9maWxlclJlZmVyZW5jZSkKLSAgICAgICAgICAg
ICAgICAoKmVuYWJsZWRQcm9maWxlclJlZmVyZW5jZSktPmRpZEV4ZWN1dGUoZXhlYywgc3RhdGlj
X2Nhc3Q8SlNPYmplY3QqPih2KSk7CisgICAgICAgICAgICAgICAgKCplbmFibGVkUHJvZmlsZXJS
ZWZlcmVuY2UpLT5kaWRFeGVjdXRlKGNhbGxGcmFtZSwgc3RhdGljX2Nhc3Q8SlNPYmplY3QqPih2
KSk7CiAKICAgICAgICAgICAgIHZQQyA9IG5ld0NvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zLmJlZ2lu
KCk7CiAKQEAgLTM1NTcsMjUgKzM1MzQsMjUgQEAgSlNWYWx1ZSogTWFjaGluZTo6cHJpdmF0ZUV4
ZWN1dGUoRXhlY3V0aQogICAgICAgICB9CiAKICAgICAgICAgaWYgKGNvbnN0cnVjdFR5cGUgPT0g
Q29uc3RydWN0VHlwZUhvc3QpIHsKLSAgICAgICAgICAgIEFyZ0xpc3QgYXJncyhyICsgZmlyc3RB
cmcgKyAxLCBhcmdDb3VudCAtIDEpOworICAgICAgICAgICAgQXJnTGlzdCBhcmdzKGNhbGxGcmFt
ZS0+cmVnaXN0ZXJzKCkgKyBmaXJzdEFyZyArIDEsIGFyZ0NvdW50IC0gMSk7CiAKLSAgICAgICAg
ICAgIFNjb3BlQ2hhaW5Ob2RlKiBzY29wZUNoYWluID0gdGhpcy0+c2NvcGVDaGFpbihyKTsKLSAg
ICAgICAgICAgIGluaXRpYWxpemVDYWxsRnJhbWUociArIHJlZ2lzdGVyT2Zmc2V0LCAwLCB2UEMg
KyAxLCBzY29wZUNoYWluLCByLCBkc3QsIGFyZ0NvdW50LCB2KTsKLSAgICAgICAgICAgIHIgKz0g
cmVnaXN0ZXJPZmZzZXQ7CisgICAgICAgICAgICBTY29wZUNoYWluTm9kZSogc2NvcGVDaGFpbiA9
IGNhbGxGcmFtZS0+c2NvcGVDaGFpbigpOworICAgICAgICAgICAgQ2FsbEZyYW1lOjpjcmVhdGUo
Y2FsbEZyYW1lLT5yZWdpc3RlcnMoKSArIHJlZ2lzdGVyT2Zmc2V0KS0+aW5pdCgwLCB2UEMgKyAx
LCBzY29wZUNoYWluLCBjYWxsRnJhbWUsIGRzdCwgYXJnQ291bnQsIHN0YXRpY19jYXN0PEpTRnVu
Y3Rpb24qPih2KSk7CisgICAgICAgICAgICBjYWxsRnJhbWUgPSBDYWxsRnJhbWU6OmNyZWF0ZShj
YWxsRnJhbWUtPnJlZ2lzdGVycygpICsgcmVnaXN0ZXJPZmZzZXQpOwogCiAgICAgICAgICAgICBp
ZiAoKmVuYWJsZWRQcm9maWxlclJlZmVyZW5jZSkKLSAgICAgICAgICAgICAgICAoKmVuYWJsZWRQ
cm9maWxlclJlZmVyZW5jZSktPndpbGxFeGVjdXRlKGV4ZWMsIHN0YXRpY19jYXN0PEpTT2JqZWN0
Kj4odikpOworICAgICAgICAgICAgICAgICgqZW5hYmxlZFByb2ZpbGVyUmVmZXJlbmNlKS0+d2ls
bEV4ZWN1dGUoY2FsbEZyYW1lLCBzdGF0aWNfY2FzdDxKU09iamVjdCo+KHYpKTsKIAogICAgICAg
ICAgICAgTUFDSElORV9TQU1QTElOR19jYWxsaW5nSG9zdEZ1bmN0aW9uKCk7CiAKLSAgICAgICAg
ICAgIEpTVmFsdWUqIHJldHVyblZhbHVlID0gY29uc3RydWN0RGF0YS5uYXRpdmUuZnVuY3Rpb24o
ZXhlYywgc3RhdGljX2Nhc3Q8SlNPYmplY3QqPih2KSwgYXJncyk7Ci0gICAgICAgICAgICByIC09
IHJlZ2lzdGVyT2Zmc2V0OworICAgICAgICAgICAgSlNWYWx1ZSogcmV0dXJuVmFsdWUgPSBjb25z
dHJ1Y3REYXRhLm5hdGl2ZS5mdW5jdGlvbihjYWxsRnJhbWUsIHN0YXRpY19jYXN0PEpTT2JqZWN0
Kj4odiksIGFyZ3MpOworICAgICAgICAgICAgY2FsbEZyYW1lID0gQ2FsbEZyYW1lOjpjcmVhdGUo
Y2FsbEZyYW1lLT5yZWdpc3RlcnMoKSAtIHJlZ2lzdGVyT2Zmc2V0KTsKIAogICAgICAgICAgICAg
Vk1fQ0hFQ0tfRVhDRVBUSU9OKCk7Ci0gICAgICAgICAgICByW2RzdF0gPSByZXR1cm5WYWx1ZTsK
KyAgICAgICAgICAgIGNhbGxGcmFtZS0+cmVnaXN0ZXJzKClbZHN0XSA9IHJldHVyblZhbHVlOwog
CiAgICAgICAgICAgICBpZiAoKmVuYWJsZWRQcm9maWxlclJlZmVyZW5jZSkKLSAgICAgICAgICAg
ICAgICAoKmVuYWJsZWRQcm9maWxlclJlZmVyZW5jZSktPmRpZEV4ZWN1dGUoZXhlYywgc3RhdGlj
X2Nhc3Q8SlNPYmplY3QqPih2KSk7CisgICAgICAgICAgICAgICAgKCplbmFibGVkUHJvZmlsZXJS
ZWZlcmVuY2UpLT5kaWRFeGVjdXRlKGNhbGxGcmFtZSwgc3RhdGljX2Nhc3Q8SlNPYmplY3QqPih2
KSk7CiAKICAgICAgICAgICAgICsrdlBDOwogICAgICAgICAgICAgTkVYVF9PUENPREU7CkBAIC0z
NTgzLDcgKzM1NjAsNyBAQCBKU1ZhbHVlKiBNYWNoaW5lOjpwcml2YXRlRXhlY3V0ZShFeGVjdXRp
CiAKICAgICAgICAgQVNTRVJUKGNvbnN0cnVjdFR5cGUgPT0gQ29uc3RydWN0VHlwZU5vbmUpOwog
Ci0gICAgICAgIGV4Y2VwdGlvblZhbHVlID0gY3JlYXRlTm90QUNvbnN0cnVjdG9yRXJyb3IoZXhl
YywgdiwgdlBDLCBjb2RlQmxvY2socikpOworICAgICAgICBleGNlcHRpb25WYWx1ZSA9IGNyZWF0
ZU5vdEFDb25zdHJ1Y3RvckVycm9yKGNhbGxGcmFtZSwgdiwgdlBDLCBjYWxsRnJhbWUtPmNvZGVC
bG9jaygpKTsKICAgICAgICAgZ290byB2bV90aHJvdzsKICAgICB9CiAgICAgQkVHSU5fT1BDT0RF
KG9wX2NvbnN0cnVjdF92ZXJpZnkpIHsKQEAgLTM1OTQsMTMgKzM1NzEsMTMgQEAgSlNWYWx1ZSog
TWFjaGluZTo6cHJpdmF0ZUV4ZWN1dGUoRXhlY3V0aQogICAgICAgICAqLwogCiAgICAgICAgIGlu
dCBkc3QgPSB2UENbMV0udS5vcGVyYW5kOzsKLSAgICAgICAgaWYgKExJS0VMWShyW2RzdF0uanNW
YWx1ZShleGVjKS0+aXNPYmplY3QoKSkpIHsKKyAgICAgICAgaWYgKExJS0VMWShjYWxsRnJhbWUt
PnJlZ2lzdGVycygpW2RzdF0uanNWYWx1ZShjYWxsRnJhbWUpLT5pc09iamVjdCgpKSkgewogICAg
ICAgICAgICAgdlBDICs9IDM7CiAgICAgICAgICAgICBORVhUX09QQ09ERTsKICAgICAgICAgfQog
CiAgICAgICAgIGludCBvdmVycmlkZSA9IHZQQ1syXS51Lm9wZXJhbmQ7Ci0gICAgICAgIHJbZHN0
XSA9IHJbb3ZlcnJpZGVdOworICAgICAgICBjYWxsRnJhbWUtPnJlZ2lzdGVycygpW2RzdF0gPSBj
YWxsRnJhbWUtPnJlZ2lzdGVycygpW292ZXJyaWRlXTsKIAogICAgICAgICB2UEMgKz0gMzsKICAg
ICAgICAgTkVYVF9PUENPREU7CkBAIC0zNjEyLDExICszNTg5LDExIEBAIEpTVmFsdWUqIE1hY2hp
bmU6OnByaXZhdGVFeGVjdXRlKEV4ZWN1dGkKICAgICAgICAgICAgb2YgdGhlIGN1cnJlbnQgc2Nv
cGUgY2hhaW4uCiAgICAgICAgICovCiAgICAgICAgIGludCBzY29wZSA9ICgrK3ZQQyktPnUub3Bl
cmFuZDsKLSAgICAgICAgSlNWYWx1ZSogdiA9IHJbc2NvcGVdLmpzVmFsdWUoZXhlYyk7Ci0gICAg
ICAgIEpTT2JqZWN0KiBvID0gdi0+dG9PYmplY3QoZXhlYyk7CisgICAgICAgIEpTVmFsdWUqIHYg
PSBjYWxsRnJhbWUtPnJlZ2lzdGVycygpW3Njb3BlXS5qc1ZhbHVlKGNhbGxGcmFtZSk7CisgICAg
ICAgIEpTT2JqZWN0KiBvID0gdi0+dG9PYmplY3QoY2FsbEZyYW1lKTsKICAgICAgICAgVk1fQ0hF
Q0tfRVhDRVBUSU9OKCk7CiAKLSAgICAgICAgcltSZWdpc3RlckZpbGU6OlNjb3BlQ2hhaW5dID0g
c2NvcGVDaGFpbihyKS0+cHVzaChvKTsKKyAgICAgICAgY2FsbEZyYW1lLT5zZXRTY29wZUNoYWlu
KGNhbGxGcmFtZS0+c2NvcGVDaGFpbigpLT5wdXNoKG8pKTsKIAogICAgICAgICArK3ZQQzsKICAg
ICAgICAgTkVYVF9PUENPREU7CkBAIC0zNjI2LDcgKzM2MDMsNyBAQCBKU1ZhbHVlKiBNYWNoaW5l
Ojpwcml2YXRlRXhlY3V0ZShFeGVjdXRpCiAKICAgICAgICAgICAgUmVtb3ZlcyB0aGUgdG9wIGl0
ZW0gZnJvbSB0aGUgY3VycmVudCBzY29wZSBjaGFpbi4KICAgICAgICAgKi8KLSAgICAgICAgcltS
ZWdpc3RlckZpbGU6OlNjb3BlQ2hhaW5dID0gc2NvcGVDaGFpbihyKS0+cG9wKCk7CisgICAgICAg
IGNhbGxGcmFtZS0+c2V0U2NvcGVDaGFpbihjYWxsRnJhbWUtPnNjb3BlQ2hhaW4oKS0+cG9wKCkp
OwogCiAgICAgICAgICsrdlBDOwogICAgICAgICBORVhUX09QQ09ERTsKQEAgLTM2NDIsNyArMzYx
OSw3IEBAIEpTVmFsdWUqIE1hY2hpbmU6OnByaXZhdGVFeGVjdXRlKEV4ZWN1dGkKICAgICAgICAg
aW50IGRzdCA9ICgrK3ZQQyktPnUub3BlcmFuZDsKICAgICAgICAgaW50IGJhc2UgPSAoKyt2UEMp
LT51Lm9wZXJhbmQ7CiAKLSAgICAgICAgcltkc3RdID0gSlNQcm9wZXJ0eU5hbWVJdGVyYXRvcjo6
Y3JlYXRlKGV4ZWMsIHJbYmFzZV0uanNWYWx1ZShleGVjKSk7CisgICAgICAgIGNhbGxGcmFtZS0+
cmVnaXN0ZXJzKClbZHN0XSA9IEpTUHJvcGVydHlOYW1lSXRlcmF0b3I6OmNyZWF0ZShjYWxsRnJh
bWUsIGNhbGxGcmFtZS0+cmVnaXN0ZXJzKClbYmFzZV0uanNWYWx1ZShjYWxsRnJhbWUpKTsKICAg
ICAgICAgKyt2UEM7CiAgICAgICAgIE5FWFRfT1BDT0RFOwogICAgIH0KQEAgLTM2NTksMTAgKzM2
MzYsMTAgQEAgSlNWYWx1ZSogTWFjaGluZTo6cHJpdmF0ZUV4ZWN1dGUoRXhlY3V0aQogICAgICAg
ICBpbnQgaXRlciA9ICgrK3ZQQyktPnUub3BlcmFuZDsKICAgICAgICAgaW50IHRhcmdldCA9ICgr
K3ZQQyktPnUub3BlcmFuZDsKIAotICAgICAgICBKU1Byb3BlcnR5TmFtZUl0ZXJhdG9yKiBpdCA9
IHJbaXRlcl0uanNQcm9wZXJ0eU5hbWVJdGVyYXRvcigpOwotICAgICAgICBpZiAoSlNWYWx1ZSog
dGVtcCA9IGl0LT5uZXh0KGV4ZWMpKSB7CisgICAgICAgIEpTUHJvcGVydHlOYW1lSXRlcmF0b3Iq
IGl0ID0gY2FsbEZyYW1lLT5yZWdpc3RlcnMoKVtpdGVyXS5wcm9wZXJ0eU5hbWVJdGVyYXRvcigp
OworICAgICAgICBpZiAoSlNWYWx1ZSogdGVtcCA9IGl0LT5uZXh0KGNhbGxGcmFtZSkpIHsKICAg
ICAgICAgICAgIENIRUNLX0ZPUl9USU1FT1VUKCk7Ci0gICAgICAgICAgICByW2RzdF0gPSB0ZW1w
OworICAgICAgICAgICAgY2FsbEZyYW1lLT5yZWdpc3RlcnMoKVtkc3RdID0gdGVtcDsKICAgICAg
ICAgICAgIHZQQyArPSB0YXJnZXQ7CiAgICAgICAgICAgICBORVhUX09QQ09ERTsKICAgICAgICAg
fQpAQCAtMzY4MSwxMCArMzY1OCwxMCBAQCBKU1ZhbHVlKiBNYWNoaW5lOjpwcml2YXRlRXhlY3V0
ZShFeGVjdXRpCiAgICAgICAgIGludCBjb3VudCA9ICgrK3ZQQyktPnUub3BlcmFuZDsKICAgICAg
ICAgaW50IHRhcmdldCA9ICgrK3ZQQyktPnUub3BlcmFuZDsKIAotICAgICAgICBTY29wZUNoYWlu
Tm9kZSogdG1wID0gc2NvcGVDaGFpbihyKTsKKyAgICAgICAgU2NvcGVDaGFpbk5vZGUqIHRtcCA9
IGNhbGxGcmFtZS0+c2NvcGVDaGFpbigpOwogICAgICAgICB3aGlsZSAoY291bnQtLSkKICAgICAg
ICAgICAgIHRtcCA9IHRtcC0+cG9wKCk7Ci0gICAgICAgIHJbUmVnaXN0ZXJGaWxlOjpTY29wZUNo
YWluXSA9IHRtcDsKKyAgICAgICAgY2FsbEZyYW1lLT5zZXRTY29wZUNoYWluKHRtcCk7CiAKICAg
ICAgICAgdlBDICs9IHRhcmdldDsKICAgICAgICAgTkVYVF9PUENPREU7CkBAIC0zNzAwLDcgKzM2
NzcsNyBAQCBKU1ZhbHVlKiBNYWNoaW5lOjpwcml2YXRlRXhlY3V0ZShFeGVjdXRpCiAgICAgICAg
ICAgIG9iamVjdCBpcyB0aGVuIHB1c2hlZCBvbnRvIHRoZSBTY29wZUNoYWluLiAgVGhlIHNjb3Bl
IG9iamVjdCBpcyB0aGVuIHN0b3JlZAogICAgICAgICAgICBpbiBkc3QgZm9yIEdDLgogICAgICAg
ICAgKi8KLSAgICAgICAgcltSZWdpc3RlckZpbGU6OlNjb3BlQ2hhaW5dID0gY3JlYXRlRXhjZXB0
aW9uU2NvcGUoZXhlYywgdlBDLCByKTsKKyAgICAgICAgY2FsbEZyYW1lLT5zZXRTY29wZUNoYWlu
KGNyZWF0ZUV4Y2VwdGlvblNjb3BlKGNhbGxGcmFtZSwgdlBDKSk7CiAKICAgICAgICAgdlBDICs9
IDQ7CiAgICAgICAgIE5FWFRfT1BDT0RFOwpAQCAtMzcxNiw5ICszNjkzLDkgQEAgSlNWYWx1ZSog
TWFjaGluZTo6cHJpdmF0ZUV4ZWN1dGUoRXhlY3V0aQogICAgICAgICAgICBhbmQgdXN1YWxseSBm
b3JtcyB0aGUgYmVnaW5uaW5nIG9mIGFuIGV4Y2VwdGlvbiBoYW5kbGVyLgogICAgICAgICAqLwog
ICAgICAgICBBU1NFUlQoZXhjZXB0aW9uVmFsdWUpOwotICAgICAgICBBU1NFUlQoIWV4ZWMtPmhh
ZEV4Y2VwdGlvbigpKTsKKyAgICAgICAgQVNTRVJUKCFjYWxsRnJhbWUtPmhhZEV4Y2VwdGlvbigp
KTsKICAgICAgICAgaW50IGV4ID0gKCsrdlBDKS0+dS5vcGVyYW5kOwotICAgICAgICByW2V4XSA9
IGV4Y2VwdGlvblZhbHVlOworICAgICAgICBjYWxsRnJhbWUtPnJlZ2lzdGVycygpW2V4XSA9IGV4
Y2VwdGlvblZhbHVlOwogICAgICAgICBleGNlcHRpb25WYWx1ZSA9IDA7CiAKICAgICAgICAgKyt2
UEM7CkBAIC0zNzM2LDkgKzM3MTMsOSBAQCBKU1ZhbHVlKiBNYWNoaW5lOjpwcml2YXRlRXhlY3V0
ZShFeGVjdXRpCiAgICAgICAgICovCiAKICAgICAgICAgaW50IGV4ID0gKCsrdlBDKS0+dS5vcGVy
YW5kOwotICAgICAgICBleGNlcHRpb25WYWx1ZSA9IHJbZXhdLmpzVmFsdWUoZXhlYyk7CisgICAg
ICAgIGV4Y2VwdGlvblZhbHVlID0gY2FsbEZyYW1lLT5yZWdpc3RlcnMoKVtleF0uanNWYWx1ZShj
YWxsRnJhbWUpOwogCi0gICAgICAgIGhhbmRsZXJWUEMgPSB0aHJvd0V4Y2VwdGlvbihleGVjLCBl
eGNlcHRpb25WYWx1ZSwgdlBDLCByLCB0cnVlKTsKKyAgICAgICAgaGFuZGxlclZQQyA9IHRocm93
RXhjZXB0aW9uKGNhbGxGcmFtZSwgZXhjZXB0aW9uVmFsdWUsIHZQQywgdHJ1ZSk7CiAgICAgICAg
IGlmICghaGFuZGxlclZQQykgewogICAgICAgICAgICAgKmV4Y2VwdGlvbiA9IGV4Y2VwdGlvblZh
bHVlOwogICAgICAgICAgICAgcmV0dXJuIGpzTnVsbCgpOwpAQCAtMzc2Myw3ICszNzQwLDcgQEAg
SlNWYWx1ZSogTWFjaGluZTo6cHJpdmF0ZUV4ZWN1dGUoRXhlY3V0aQogICAgICAgICAqLwogICAg
ICAgICBpbnQgZHN0ID0gKCsrdlBDKS0+dS5vcGVyYW5kOwogICAgICAgICBpbnQgc3JjID0gKCsr
dlBDKS0+dS5vcGVyYW5kOwotICAgICAgICByW2RzdF0gPSBjb2RlQmxvY2sociktPnVuZXhwZWN0
ZWRDb25zdGFudHNbc3JjXTsKKyAgICAgICAgY2FsbEZyYW1lLT5yZWdpc3RlcnMoKVtkc3RdID0g
Y2FsbEZyYW1lLT5jb2RlQmxvY2soKS0+dW5leHBlY3RlZENvbnN0YW50c1tzcmNdOwogCiAgICAg
ICAgICsrdlBDOwogICAgICAgICBORVhUX09QQ09ERTsKQEAgLTM3ODAsOCArMzc1Nyw4IEBAIEpT
VmFsdWUqIE1hY2hpbmU6OnByaXZhdGVFeGVjdXRlKEV4ZWN1dGkKICAgICAgICAgaW50IHR5cGUg
PSAoKyt2UEMpLT51Lm9wZXJhbmQ7CiAgICAgICAgIGludCBtZXNzYWdlID0gKCsrdlBDKS0+dS5v
cGVyYW5kOwogCi0gICAgICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gdGhpcy0+Y29kZUJsb2Nr
KHIpOwotICAgICAgICByW2RzdF0gPSBFcnJvcjo6Y3JlYXRlKGV4ZWMsIChFcnJvclR5cGUpdHlw
ZSwgY29kZUJsb2NrLT51bmV4cGVjdGVkQ29uc3RhbnRzW21lc3NhZ2VdLT50b1N0cmluZyhleGVj
KSwgY29kZUJsb2NrLT5saW5lTnVtYmVyRm9yVlBDKHZQQyksIGNvZGVCbG9jay0+b3duZXJOb2Rl
LT5zb3VyY2VJRCgpLCBjb2RlQmxvY2stPm93bmVyTm9kZS0+c291cmNlVVJMKCkpOworICAgICAg
ICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IGNhbGxGcmFtZS0+Y29kZUJsb2NrKCk7CisgICAgICAg
IGNhbGxGcmFtZS0+cmVnaXN0ZXJzKClbZHN0XSA9IEVycm9yOjpjcmVhdGUoY2FsbEZyYW1lLCAo
RXJyb3JUeXBlKXR5cGUsIGNvZGVCbG9jay0+dW5leHBlY3RlZENvbnN0YW50c1ttZXNzYWdlXS0+
dG9TdHJpbmcoY2FsbEZyYW1lKSwgY29kZUJsb2NrLT5saW5lTnVtYmVyRm9yVlBDKHZQQyksIGNv
ZGVCbG9jay0+b3duZXJOb2RlLT5zb3VyY2VJRCgpLCBjb2RlQmxvY2stPm93bmVyTm9kZS0+c291
cmNlVVJMKCkpOwogCiAgICAgICAgICsrdlBDOwogICAgICAgICBORVhUX09QQ09ERTsKQEAgLTM3
OTMsMTMgKzM3NzAsMTMgQEAgSlNWYWx1ZSogTWFjaGluZTo6cHJpdmF0ZUV4ZWN1dGUoRXhlY3V0
aQogICAgICAgICAgICBwcm9ncmFtLiBSZXR1cm4gY29udHJvbCB0byB0aGUgY2FsbGluZyBuYXRp
dmUgY29kZS4KICAgICAgICAgKi8KIAotICAgICAgICBpZiAoY29kZUJsb2NrKHIpLT5uZWVkc0Z1
bGxTY29wZUNoYWluKSB7Ci0gICAgICAgICAgICBTY29wZUNoYWluTm9kZSogc2NvcGVDaGFpbiA9
IHRoaXMtPnNjb3BlQ2hhaW4ocik7CisgICAgICAgIGlmIChjYWxsRnJhbWUtPmNvZGVCbG9jaygp
LT5uZWVkc0Z1bGxTY29wZUNoYWluKSB7CisgICAgICAgICAgICBTY29wZUNoYWluTm9kZSogc2Nv
cGVDaGFpbiA9IGNhbGxGcmFtZS0+c2NvcGVDaGFpbigpOwogICAgICAgICAgICAgQVNTRVJUKHNj
b3BlQ2hhaW4tPnJlZkNvdW50ID4gMSk7CiAgICAgICAgICAgICBzY29wZUNoYWluLT5kZXJlZigp
OwogICAgICAgICB9CiAgICAgICAgIGludCByZXN1bHQgPSAoKyt2UEMpLT51Lm9wZXJhbmQ7Ci0g
ICAgICAgIHJldHVybiByW3Jlc3VsdF0uanNWYWx1ZShleGVjKTsKKyAgICAgICAgcmV0dXJuIGNh
bGxGcmFtZS0+cmVnaXN0ZXJzKClbcmVzdWx0XS5qc1ZhbHVlKGNhbGxGcmFtZSk7CiAgICAgfQog
ICAgIEJFR0lOX09QQ09ERShvcF9wdXRfZ2V0dGVyKSB7CiAgICAgICAgIC8qIHB1dF9nZXR0ZXIg
YmFzZShyKSBwcm9wZXJ0eShpZCkgZnVuY3Rpb24ocikKQEAgLTM4MTYsMTEgKzM3OTMsMTEgQEAg
SlNWYWx1ZSogTWFjaGluZTo6cHJpdmF0ZUV4ZWN1dGUoRXhlY3V0aQogICAgICAgICBpbnQgcHJv
cGVydHkgPSAoKyt2UEMpLT51Lm9wZXJhbmQ7CiAgICAgICAgIGludCBmdW5jdGlvbiA9ICgrK3ZQ
QyktPnUub3BlcmFuZDsKIAotICAgICAgICBBU1NFUlQocltiYXNlXS5qc1ZhbHVlKGV4ZWMpLT5p
c09iamVjdCgpKTsKLSAgICAgICAgSlNPYmplY3QqIGJhc2VPYmogPSBzdGF0aWNfY2FzdDxKU09i
amVjdCo+KHJbYmFzZV0uanNWYWx1ZShleGVjKSk7Ci0gICAgICAgIElkZW50aWZpZXImIGlkZW50
ID0gY29kZUJsb2NrKHIpLT5pZGVudGlmaWVyc1twcm9wZXJ0eV07Ci0gICAgICAgIEFTU0VSVChy
W2Z1bmN0aW9uXS5qc1ZhbHVlKGV4ZWMpLT5pc09iamVjdCgpKTsKLSAgICAgICAgYmFzZU9iai0+
ZGVmaW5lR2V0dGVyKGV4ZWMsIGlkZW50LCBzdGF0aWNfY2FzdDxKU09iamVjdCo+KHJbZnVuY3Rp
b25dLmpzVmFsdWUoZXhlYykpKTsKKyAgICAgICAgQVNTRVJUKGNhbGxGcmFtZS0+cmVnaXN0ZXJz
KClbYmFzZV0uanNWYWx1ZShjYWxsRnJhbWUpLT5pc09iamVjdCgpKTsKKyAgICAgICAgSlNPYmpl
Y3QqIGJhc2VPYmogPSBzdGF0aWNfY2FzdDxKU09iamVjdCo+KGNhbGxGcmFtZS0+cmVnaXN0ZXJz
KClbYmFzZV0uanNWYWx1ZShjYWxsRnJhbWUpKTsKKyAgICAgICAgSWRlbnRpZmllciYgaWRlbnQg
PSBjYWxsRnJhbWUtPmNvZGVCbG9jaygpLT5pZGVudGlmaWVyc1twcm9wZXJ0eV07CisgICAgICAg
IEFTU0VSVChjYWxsRnJhbWUtPnJlZ2lzdGVycygpW2Z1bmN0aW9uXS5qc1ZhbHVlKGNhbGxGcmFt
ZSktPmlzT2JqZWN0KCkpOworICAgICAgICBiYXNlT2JqLT5kZWZpbmVHZXR0ZXIoY2FsbEZyYW1l
LCBpZGVudCwgc3RhdGljX2Nhc3Q8SlNPYmplY3QqPihjYWxsRnJhbWUtPnJlZ2lzdGVycygpW2Z1
bmN0aW9uXS5qc1ZhbHVlKGNhbGxGcmFtZSkpKTsKIAogICAgICAgICArK3ZQQzsKICAgICAgICAg
TkVYVF9PUENPREU7CkBAIC0zODQwLDExICszODE3LDExIEBAIEpTVmFsdWUqIE1hY2hpbmU6OnBy
aXZhdGVFeGVjdXRlKEV4ZWN1dGkKICAgICAgICAgaW50IHByb3BlcnR5ID0gKCsrdlBDKS0+dS5v
cGVyYW5kOwogICAgICAgICBpbnQgZnVuY3Rpb24gPSAoKyt2UEMpLT51Lm9wZXJhbmQ7CiAKLSAg
ICAgICAgQVNTRVJUKHJbYmFzZV0uanNWYWx1ZShleGVjKS0+aXNPYmplY3QoKSk7Ci0gICAgICAg
IEpTT2JqZWN0KiBiYXNlT2JqID0gc3RhdGljX2Nhc3Q8SlNPYmplY3QqPihyW2Jhc2VdLmpzVmFs
dWUoZXhlYykpOwotICAgICAgICBJZGVudGlmaWVyJiBpZGVudCA9IGNvZGVCbG9jayhyKS0+aWRl
bnRpZmllcnNbcHJvcGVydHldOwotICAgICAgICBBU1NFUlQocltmdW5jdGlvbl0uanNWYWx1ZShl
eGVjKS0+aXNPYmplY3QoKSk7Ci0gICAgICAgIGJhc2VPYmotPmRlZmluZVNldHRlcihleGVjLCBp
ZGVudCwgc3RhdGljX2Nhc3Q8SlNPYmplY3QqPihyW2Z1bmN0aW9uXS5qc1ZhbHVlKGV4ZWMpKSk7
CisgICAgICAgIEFTU0VSVChjYWxsRnJhbWUtPnJlZ2lzdGVycygpW2Jhc2VdLmpzVmFsdWUoY2Fs
bEZyYW1lKS0+aXNPYmplY3QoKSk7CisgICAgICAgIEpTT2JqZWN0KiBiYXNlT2JqID0gc3RhdGlj
X2Nhc3Q8SlNPYmplY3QqPihjYWxsRnJhbWUtPnJlZ2lzdGVycygpW2Jhc2VdLmpzVmFsdWUoY2Fs
bEZyYW1lKSk7CisgICAgICAgIElkZW50aWZpZXImIGlkZW50ID0gY2FsbEZyYW1lLT5jb2RlQmxv
Y2soKS0+aWRlbnRpZmllcnNbcHJvcGVydHldOworICAgICAgICBBU1NFUlQoY2FsbEZyYW1lLT5y
ZWdpc3RlcnMoKVtmdW5jdGlvbl0uanNWYWx1ZShjYWxsRnJhbWUpLT5pc09iamVjdCgpKTsKKyAg
ICAgICAgYmFzZU9iai0+ZGVmaW5lU2V0dGVyKGNhbGxGcmFtZSwgaWRlbnQsIHN0YXRpY19jYXN0
PEpTT2JqZWN0Kj4oY2FsbEZyYW1lLT5yZWdpc3RlcnMoKVtmdW5jdGlvbl0uanNWYWx1ZShjYWxs
RnJhbWUpKSk7CiAKICAgICAgICAgKyt2UEM7CiAgICAgICAgIE5FWFRfT1BDT0RFOwpAQCAtMzg1
Nyw3ICszODM0LDcgQEAgSlNWYWx1ZSogTWFjaGluZTo6cHJpdmF0ZUV4ZWN1dGUoRXhlY3V0aQog
ICAgICAgICAqLwogICAgICAgICBpbnQgcmV0QWRkckRzdCA9ICgrK3ZQQyktPnUub3BlcmFuZDsK
ICAgICAgICAgaW50IHRhcmdldCA9ICgrK3ZQQyktPnUub3BlcmFuZDsKLSAgICAgICAgcltyZXRB
ZGRyRHN0XSA9IHZQQyArIDE7CisgICAgICAgIGNhbGxGcmFtZS0+cmVnaXN0ZXJzKClbcmV0QWRk
ckRzdF0gPSB2UEMgKyAxOwogCiAgICAgICAgIHZQQyArPSB0YXJnZXQ7CiAgICAgICAgIE5FWFRf
T1BDT0RFOwpAQCAtMzg3MCw3ICszODQ3LDcgQEAgSlNWYWx1ZSogTWFjaGluZTo6cHJpdmF0ZUV4
ZWN1dGUoRXhlY3V0aQogICAgICAgICAgcmVnaXN0ZXIsIG5vdCBhcyBhbiBpbW1lZGlhdGUuCiAg
ICAgICAgICovCiAgICAgICAgIGludCByZXRBZGRyU3JjID0gKCsrdlBDKS0+dS5vcGVyYW5kOwot
ICAgICAgICB2UEMgPSByW3JldEFkZHJTcmNdLnZQQygpOworICAgICAgICB2UEMgPSBjYWxsRnJh
bWUtPnJlZ2lzdGVycygpW3JldEFkZHJTcmNdLnZQQygpOwogICAgICAgICBORVhUX09QQ09ERTsK
ICAgICB9CiAgICAgQkVHSU5fT1BDT0RFKG9wX2RlYnVnKSB7CkBAIC0zODgzLDcgKzM4NjAsNyBA
QCBKU1ZhbHVlKiBNYWNoaW5lOjpwcml2YXRlRXhlY3V0ZShFeGVjdXRpCiAgICAgICAgIGludCBm
aXJzdExpbmUgPSAoKyt2UEMpLT51Lm9wZXJhbmQ7CiAgICAgICAgIGludCBsYXN0TGluZSA9ICgr
K3ZQQyktPnUub3BlcmFuZDsKIAotICAgICAgICBkZWJ1ZyhleGVjLCByLCBzdGF0aWNfY2FzdDxE
ZWJ1Z0hvb2tJRD4oZGVidWdIb29rSUQpLCBmaXJzdExpbmUsIGxhc3RMaW5lKTsKKyAgICAgICAg
ZGVidWcoY2FsbEZyYW1lLCBzdGF0aWNfY2FzdDxEZWJ1Z0hvb2tJRD4oZGVidWdIb29rSUQpLCBm
aXJzdExpbmUsIGxhc3RMaW5lKTsKIAogICAgICAgICArK3ZQQzsKICAgICAgICAgTkVYVF9PUENP
REU7CkBAIC0zODk1LDcgKzM4NzIsNyBAQCBKU1ZhbHVlKiBNYWNoaW5lOjpwcml2YXRlRXhlY3V0
ZShFeGVjdXRpCiAgICAgICAgICAgICAvLyBjYW5ub3QgZmF0aG9tIGlmIHdlIGRvbid0IGFzc2ln
biB0byB0aGUgZXhjZXB0aW9uVmFsdWUgYmVmb3JlIGJyYW5jaGluZykKICAgICAgICAgICAgIGV4
Y2VwdGlvblZhbHVlID0gY3JlYXRlSW50ZXJydXB0ZWRFeGVjdXRpb25FeGNlcHRpb24oZ2xvYmFs
RGF0YSk7CiAgICAgICAgIH0KLSAgICAgICAgaGFuZGxlclZQQyA9IHRocm93RXhjZXB0aW9uKGV4
ZWMsIGV4Y2VwdGlvblZhbHVlLCB2UEMsIHIsIGZhbHNlKTsKKyAgICAgICAgaGFuZGxlclZQQyA9
IHRocm93RXhjZXB0aW9uKGNhbGxGcmFtZSwgZXhjZXB0aW9uVmFsdWUsIHZQQywgZmFsc2UpOwog
ICAgICAgICBpZiAoIWhhbmRsZXJWUEMpIHsKICAgICAgICAgICAgICpleGNlcHRpb24gPSBleGNl
cHRpb25WYWx1ZTsKICAgICAgICAgICAgIHJldHVybiBqc051bGwoKTsKQEAgLTM5MDgsOTkgKzM4
ODUsOTEgQEAgSlNWYWx1ZSogTWFjaGluZTo6cHJpdmF0ZUV4ZWN1dGUoRXhlY3V0aQogICAgICN1
bmRlZiBCRUdJTl9PUENPREUKICAgICAjdW5kZWYgVk1fQ0hFQ0tfRVhDRVBUSU9OCiAgICAgI3Vu
ZGVmIENIRUNLX0ZPUl9USU1FT1VUCi0gICAgI3VuZGVmIGV4ZWMKIH0KIAotSlNWYWx1ZSogTWFj
aGluZTo6cmV0cmlldmVBcmd1bWVudHMoRXhlY1N0YXRlKiBleGVjLCBKU0Z1bmN0aW9uKiBmdW5j
dGlvbikgY29uc3QKK0pTVmFsdWUqIE1hY2hpbmU6OnJldHJpZXZlQXJndW1lbnRzKENhbGxGcmFt
ZSogY2FsbEZyYW1lLCBKU0Z1bmN0aW9uKiBmdW5jdGlvbikgY29uc3QKIHsKLSAgICBSZWdpc3Rl
ciogciA9IHRoaXMtPmNhbGxGcmFtZShleGVjLCBmdW5jdGlvbik7Ci0gICAgaWYgKCFyKQorICAg
IENhbGxGcmFtZSogZnVuY3Rpb25DYWxsRnJhbWUgPSBmaW5kRnVuY3Rpb25DYWxsRnJhbWUoY2Fs
bEZyYW1lLCBmdW5jdGlvbik7CisgICAgaWYgKCFmdW5jdGlvbkNhbGxGcmFtZSkKICAgICAgICAg
cmV0dXJuIGpzTnVsbCgpOwogCi0gICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBNYWNoaW5lOjpj
b2RlQmxvY2socik7CisgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBmdW5jdGlvbkNhbGxGcmFt
ZS0+Y29kZUJsb2NrKCk7CiAgICAgaWYgKGNvZGVCbG9jay0+dXNlc0FyZ3VtZW50cykgewogICAg
ICAgICBBU1NFUlQoY29kZUJsb2NrLT5jb2RlVHlwZSA9PSBGdW5jdGlvbkNvZGUpOwogICAgICAg
ICBTeW1ib2xUYWJsZSYgc3ltYm9sVGFibGUgPSBzdGF0aWNfY2FzdDxGdW5jdGlvbkJvZHlOb2Rl
Kj4oY29kZUJsb2NrLT5vd25lck5vZGUpLT5zeW1ib2xUYWJsZSgpOwotICAgICAgICBpbnQgYXJn
dW1lbnRzSW5kZXggPSBzeW1ib2xUYWJsZS5nZXQoZXhlYy0+cHJvcGVydHlOYW1lcygpLmFyZ3Vt
ZW50cy51c3RyaW5nKCkucmVwKCkpLmdldEluZGV4KCk7Ci0gICAgICAgIHJldHVybiByW2FyZ3Vt
ZW50c0luZGV4XS5qc1ZhbHVlKGV4ZWMpOworICAgICAgICBpbnQgYXJndW1lbnRzSW5kZXggPSBz
eW1ib2xUYWJsZS5nZXQoZnVuY3Rpb25DYWxsRnJhbWUtPnByb3BlcnR5TmFtZXMoKS5hcmd1bWVu
dHMudXN0cmluZygpLnJlcCgpKS5nZXRJbmRleCgpOworICAgICAgICByZXR1cm4gZnVuY3Rpb25D
YWxsRnJhbWUtPnJlZ2lzdGVycygpW2FyZ3VtZW50c0luZGV4XS5qc1ZhbHVlKGNhbGxGcmFtZSk7
CiAgICAgfQogCi0gICAgQXJndW1lbnRzKiBhcmd1bWVudHMgPSBzdGF0aWNfY2FzdDxBcmd1bWVu
dHMqPihyW1JlZ2lzdGVyRmlsZTo6T3B0aW9uYWxDYWxsZWVBcmd1bWVudHNdLmdldEpTVmFsdWUo
KSk7CisgICAgQXJndW1lbnRzKiBhcmd1bWVudHMgPSBmdW5jdGlvbkNhbGxGcmFtZS0+b3B0aW9u
YWxDYWxsZWVBcmd1bWVudHMoKTsKICAgICBpZiAoIWFyZ3VtZW50cykgewotICAgICAgICBhcmd1
bWVudHMgPSBuZXcgKGV4ZWMpIEFyZ3VtZW50cyhleGVjLCByKTsKKyAgICAgICAgYXJndW1lbnRz
ID0gbmV3IChmdW5jdGlvbkNhbGxGcmFtZSkgQXJndW1lbnRzKGZ1bmN0aW9uQ2FsbEZyYW1lKTsK
ICAgICAgICAgYXJndW1lbnRzLT5jb3B5UmVnaXN0ZXJzKCk7Ci0gICAgICAgIHJbUmVnaXN0ZXJG
aWxlOjpPcHRpb25hbENhbGxlZUFyZ3VtZW50c10gPSBhcmd1bWVudHM7CisgICAgICAgIGNhbGxG
cmFtZS0+c2V0Q2FsbGVlQXJndW1lbnRzKGFyZ3VtZW50cyk7CiAgICAgfQotICAgIEFTU0VSVChh
cmd1bWVudHMtPmlzT2JqZWN0KCZBcmd1bWVudHM6OmluZm8pKTsKIAogICAgIHJldHVybiBhcmd1
bWVudHM7CiB9CiAKLUpTVmFsdWUqIE1hY2hpbmU6OnJldHJpZXZlQ2FsbGVyKEV4ZWNTdGF0ZSog
ZXhlYywgSW50ZXJuYWxGdW5jdGlvbiogZnVuY3Rpb24pIGNvbnN0CitKU1ZhbHVlKiBNYWNoaW5l
OjpyZXRyaWV2ZUNhbGxlcihDYWxsRnJhbWUqIGNhbGxGcmFtZSwgSW50ZXJuYWxGdW5jdGlvbiog
ZnVuY3Rpb24pIGNvbnN0CiB7Ci0gICAgUmVnaXN0ZXIqIHIgPSB0aGlzLT5jYWxsRnJhbWUoZXhl
YywgZnVuY3Rpb24pOwotICAgIGlmICghcikKKyAgICBDYWxsRnJhbWUqIGZ1bmN0aW9uQ2FsbEZy
YW1lID0gZmluZEZ1bmN0aW9uQ2FsbEZyYW1lKGNhbGxGcmFtZSwgZnVuY3Rpb24pOworICAgIGlm
ICghZnVuY3Rpb25DYWxsRnJhbWUpCiAgICAgICAgIHJldHVybiBqc051bGwoKTsKIAotICAgIFJl
Z2lzdGVyKiBjYWxsZXJSID0gcltSZWdpc3RlckZpbGU6OkNhbGxlclJlZ2lzdGVyc10ucigpOwot
ICAgIGlmIChpc0hvc3RDYWxsRnJhbWUoY2FsbGVyUikpCisgICAgQ2FsbEZyYW1lKiBjYWxsZXJG
cmFtZSA9IGZ1bmN0aW9uQ2FsbEZyYW1lLT5jYWxsZXJGcmFtZSgpOworICAgIGlmIChjYWxsZXJG
cmFtZS0+aGFzSG9zdENhbGxGcmFtZUZsYWcoKSkKICAgICAgICAgcmV0dXJuIGpzTnVsbCgpOwog
Ci0gICAgSlNWYWx1ZSogY2FsbGVyID0gY2FsbGVyUltSZWdpc3RlckZpbGU6OkNhbGxlZV0uanNW
YWx1ZShleGVjKTsKKyAgICBKU1ZhbHVlKiBjYWxsZXIgPSBjYWxsZXJGcmFtZS0+Y2FsbGVlKCk7
CiAgICAgaWYgKCFjYWxsZXIpCiAgICAgICAgIHJldHVybiBqc051bGwoKTsKIAogICAgIHJldHVy
biBjYWxsZXI7CiB9CiAKLXZvaWQgTWFjaGluZTo6cmV0cmlldmVMYXN0Q2FsbGVyKEV4ZWNTdGF0
ZSogZXhlYywgaW50JiBsaW5lTnVtYmVyLCBpbnRwdHJfdCYgc291cmNlSUQsIFVTdHJpbmcmIHNv
dXJjZVVSTCwgSlNWYWx1ZSomIGZ1bmN0aW9uKSBjb25zdAordm9pZCBNYWNoaW5lOjpyZXRyaWV2
ZUxhc3RDYWxsZXIoQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIGludCYgbGluZU51bWJlciwgaW50cHRy
X3QmIHNvdXJjZUlELCBVU3RyaW5nJiBzb3VyY2VVUkwsIEpTVmFsdWUqJiBmdW5jdGlvbikgY29u
c3QKIHsKICAgICBmdW5jdGlvbiA9IDA7CiAgICAgbGluZU51bWJlciA9IC0xOwogICAgIHNvdXJj
ZVVSTCA9IFVTdHJpbmcoKTsKIAotICAgIFJlZ2lzdGVyKiByID0gZXhlYy0+cmVnaXN0ZXJzKCk7
Ci0gICAgUmVnaXN0ZXIqIGNhbGxlclIgPSByW1JlZ2lzdGVyRmlsZTo6Q2FsbGVyUmVnaXN0ZXJz
XS5yKCk7Ci0gICAgaWYgKGlzSG9zdENhbGxGcmFtZShjYWxsZXJSKSkKKyAgICBDYWxsRnJhbWUq
IGNhbGxlckZyYW1lID0gY2FsbEZyYW1lLT5jYWxsZXJGcmFtZSgpOworICAgIGlmIChjYWxsZXJG
cmFtZS0+aGFzSG9zdENhbGxGcmFtZUZsYWcoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgQ29k
ZUJsb2NrKiBjYWxsZXJDb2RlQmxvY2sgPSBjb2RlQmxvY2soY2FsbGVyUik7CisgICAgQ29kZUJs
b2NrKiBjYWxsZXJDb2RlQmxvY2sgPSBjYWxsZXJGcmFtZS0+Y29kZUJsb2NrKCk7CiAgICAgaWYg
KCFjYWxsZXJDb2RlQmxvY2spCiAgICAgICAgIHJldHVybjsKIAotICAgIEluc3RydWN0aW9uKiB2
UEMgPSB2UENGb3JQQyhjYWxsZXJDb2RlQmxvY2ssIHJbUmVnaXN0ZXJGaWxlOjpSZXR1cm5QQ10u
digpKTsKKyAgICBJbnN0cnVjdGlvbiogdlBDID0gdlBDRm9yUEMoY2FsbGVyQ29kZUJsb2NrLCBj
YWxsRnJhbWUtPnJldHVyblBDKCkpOwogICAgIGxpbmVOdW1iZXIgPSBjYWxsZXJDb2RlQmxvY2st
PmxpbmVOdW1iZXJGb3JWUEModlBDIC0gMSk7CiAgICAgc291cmNlSUQgPSBjYWxsZXJDb2RlQmxv
Y2stPm93bmVyTm9kZS0+c291cmNlSUQoKTsKICAgICBzb3VyY2VVUkwgPSBjYWxsZXJDb2RlQmxv
Y2stPm93bmVyTm9kZS0+c291cmNlVVJMKCk7Ci0KLSAgICBKU1ZhbHVlKiBjYWxsZXIgPSBjYWxs
ZXJSW1JlZ2lzdGVyRmlsZTo6Q2FsbGVlXS5nZXRKU1ZhbHVlKCk7Ci0gICAgaWYgKCFjYWxsZXIp
Ci0gICAgICAgIHJldHVybjsKLQotICAgIGZ1bmN0aW9uID0gY2FsbGVyOworICAgIGZ1bmN0aW9u
ID0gY2FsbGVyRnJhbWUtPmNhbGxlZSgpOwogfQogCi1SZWdpc3RlciogTWFjaGluZTo6Y2FsbEZy
YW1lKEV4ZWNTdGF0ZSogZXhlYywgSW50ZXJuYWxGdW5jdGlvbiogZnVuY3Rpb24pIGNvbnN0CitD
YWxsRnJhbWUqIE1hY2hpbmU6OmZpbmRGdW5jdGlvbkNhbGxGcmFtZShDYWxsRnJhbWUqIGNhbGxG
cmFtZSwgSW50ZXJuYWxGdW5jdGlvbiogZnVuY3Rpb24pCiB7Ci0gICAgZm9yIChSZWdpc3Rlciog
ciA9IGV4ZWMtPnJlZ2lzdGVycygpOyByOyByID0gc3RyaXBIb3N0Q2FsbEZyYW1lQml0KHJbUmVn
aXN0ZXJGaWxlOjpDYWxsZXJSZWdpc3RlcnNdLnIoKSkpCi0gICAgICAgIGlmIChyW1JlZ2lzdGVy
RmlsZTo6Q2FsbGVlXS5nZXRKU1ZhbHVlKCkgPT0gZnVuY3Rpb24pCi0gICAgICAgICAgICByZXR1
cm4gcjsKKyAgICBmb3IgKENhbGxGcmFtZSogY2FuZGlkYXRlID0gY2FsbEZyYW1lOyBjYW5kaWRh
dGU7IGNhbmRpZGF0ZSA9IGNhbmRpZGF0ZS0+Y2FsbGVyRnJhbWUoKS0+cmVtb3ZlSG9zdENhbGxG
cmFtZUZsYWcoKSkgeworICAgICAgICBpZiAoY2FuZGlkYXRlLT5jYWxsZWUoKSA9PSBmdW5jdGlv
bikKKyAgICAgICAgICAgIHJldHVybiBjYW5kaWRhdGU7CisgICAgfQogICAgIHJldHVybiAwOwog
fQogCi12b2lkIE1hY2hpbmU6OmdldEFyZ3VtZW50c0RhdGEoUmVnaXN0ZXIqIGNhbGxGcmFtZSwg
SlNGdW5jdGlvbiomIGZ1bmN0aW9uLCBwdHJkaWZmX3QmIGZpcnN0UGFyYW1ldGVySW5kZXgsIFJl
Z2lzdGVyKiYgYXJndiwgaW50JiBhcmdjKQordm9pZCBNYWNoaW5lOjpnZXRBcmd1bWVudHNEYXRh
KENhbGxGcmFtZSogY2FsbEZyYW1lLCBKU0Z1bmN0aW9uKiYgZnVuY3Rpb24sIHB0cmRpZmZfdCYg
Zmlyc3RQYXJhbWV0ZXJJbmRleCwgUmVnaXN0ZXIqJiBhcmd2LCBpbnQmIGFyZ2MpCiB7Ci0gICAg
ZnVuY3Rpb24gPSBzdGF0aWNfY2FzdDxKU0Z1bmN0aW9uKj4oY2FsbEZyYW1lW1JlZ2lzdGVyRmls
ZTo6Q2FsbGVlXS5nZXRKU1ZhbHVlKCkpOwotICAgIEFTU0VSVChmdW5jdGlvbi0+aW5oZXJpdHMo
JkpTRnVuY3Rpb246OmluZm8pKTsKKyAgICBmdW5jdGlvbiA9IGNhbGxGcmFtZS0+Y2FsbGVlKCk7
CiAgICAgCiAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSAmZnVuY3Rpb24tPm1fYm9keS0+Z2Vu
ZXJhdGVkQnl0ZUNvZGUoKTsKICAgICBpbnQgbnVtUGFyYW1ldGVycyA9IGNvZGVCbG9jay0+bnVt
UGFyYW1ldGVyczsKLSAgICBhcmdjID0gY2FsbEZyYW1lW1JlZ2lzdGVyRmlsZTo6QXJndW1lbnRD
b3VudF0uaSgpOworICAgIGFyZ2MgPSBjYWxsRnJhbWUtPmFyZ3VtZW50Q291bnQoKTsKIAogICAg
IGlmIChhcmdjIDw9IG51bVBhcmFtZXRlcnMpCi0gICAgICAgIGFyZ3YgPSBjYWxsRnJhbWUgLSBS
ZWdpc3RlckZpbGU6OkNhbGxGcmFtZUhlYWRlclNpemUgLSBudW1QYXJhbWV0ZXJzICsgMTsgLy8g
KyAxIHRvIHNraXAgInRoaXMiCisgICAgICAgIGFyZ3YgPSBjYWxsRnJhbWUtPnJlZ2lzdGVycygp
IC0gUmVnaXN0ZXJGaWxlOjpDYWxsRnJhbWVIZWFkZXJTaXplIC0gbnVtUGFyYW1ldGVycyArIDE7
IC8vICsgMSB0byBza2lwICJ0aGlzIgogICAgIGVsc2UKLSAgICAgICAgYXJndiA9IGNhbGxGcmFt
ZSAtIFJlZ2lzdGVyRmlsZTo6Q2FsbEZyYW1lSGVhZGVyU2l6ZSAtIG51bVBhcmFtZXRlcnMgLSBh
cmdjICsgMTsgLy8gKyAxIHRvIHNraXAgInRoaXMiCisgICAgICAgIGFyZ3YgPSBjYWxsRnJhbWUt
PnJlZ2lzdGVycygpIC0gUmVnaXN0ZXJGaWxlOjpDYWxsRnJhbWVIZWFkZXJTaXplIC0gbnVtUGFy
YW1ldGVycyAtIGFyZ2MgKyAxOyAvLyArIDEgdG8gc2tpcCAidGhpcyIKIAogICAgIGFyZ2MgLT0g
MTsgLy8gLSAxIHRvIHNraXAgInRoaXMiCiAgICAgZmlyc3RQYXJhbWV0ZXJJbmRleCA9IC1SZWdp
c3RlckZpbGU6OkNhbGxGcmFtZUhlYWRlclNpemUgLSBudW1QYXJhbWV0ZXJzICsgMTsgLy8gKyAx
IHRvIHNraXAgInRoaXMiCkBAIC00MDEzLDcgKzM5ODIsNyBAQCBORVZFUl9JTkxJTkUgc3RhdGlj
IHZvaWQgZG9TZXRSZXR1cm5BZGRyCiAgICAgY3RpU2V0UmV0dXJuQWRkcmVzcyhyZXR1cm5BZGRy
ZXNzLCByZWludGVycHJldF9jYXN0PHZvaWQqPihjdGlWTVRocm93VHJhbXBvbGluZSkpOwogfQog
Ci1ORVZFUl9JTkxJTkUgdm9pZCBNYWNoaW5lOjp0cnlDVElDYWNoZVB1dEJ5SUQoRXhlY1N0YXRl
KiBleGVjLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgdm9pZCogcmV0dXJuQWRkcmVzcywgSlNWYWx1
ZSogYmFzZVZhbHVlLCBjb25zdCBQdXRQcm9wZXJ0eVNsb3QmIHNsb3QpCitORVZFUl9JTkxJTkUg
dm9pZCBNYWNoaW5lOjp0cnlDVElDYWNoZVB1dEJ5SUQoQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIENv
ZGVCbG9jayogY29kZUJsb2NrLCB2b2lkKiByZXR1cm5BZGRyZXNzLCBKU1ZhbHVlKiBiYXNlVmFs
dWUsIGNvbnN0IFB1dFByb3BlcnR5U2xvdCYgc2xvdCkKIHsKICAgICAvLyBUaGUgaW50ZXJwcmV0
ZXIgY2hlY2tzIGZvciByZWN1cnNpb24gaGVyZTsgSSBkbyBub3QgYmVsaWV2ZSB0aGlzIGNhbiBv
Y2N1ciBpbiBDVEkuCiAKQEAgLTQwNTUsNyArNDAyNCw3IEBAIE5FVkVSX0lOTElORSB2b2lkIE1h
Y2hpbmU6OnRyeUNUSUNhY2hlUHUKICAgICAgICAgdlBDWzVdID0gc3RydWN0dXJlSUQ7CiAgICAg
ICAgIFN0cnVjdHVyZUlEQ2hhaW4qIGNoYWluID0gc3RydWN0dXJlSUQtPmNhY2hlZFByb3RvdHlw
ZUNoYWluKCk7CiAgICAgICAgIGlmICghY2hhaW4pIHsKLSAgICAgICAgICAgIGNoYWluID0gY2Fj
aGVQcm90b3R5cGVDaGFpbihleGVjLCBzdHJ1Y3R1cmVJRCk7CisgICAgICAgICAgICBjaGFpbiA9
IGNhY2hlUHJvdG90eXBlQ2hhaW4oY2FsbEZyYW1lLCBzdHJ1Y3R1cmVJRCk7CiAgICAgICAgICAg
ICBpZiAoIWNoYWluKSB7CiAgICAgICAgICAgICAgICAgLy8gVGhpcyBoYXBwZW5zIGlmIHNvbWVv
bmUgaGFzIG1hbnVhbGx5IGluc2VydGVkIG51bGwgaW50byB0aGUgcHJvdG90eXBlIGNoYWluCiAg
ICAgICAgICAgICAgICAgdlBDWzBdID0gZ2V0T3Bjb2RlKG9wX3B1dF9ieV9pZF9nZW5lcmljKTsK
QEAgLTQwNjUsNyArNDAzNCw3IEBAIE5FVkVSX0lOTElORSB2b2lkIE1hY2hpbmU6OnRyeUNUSUNh
Y2hlUHUKICAgICAgICAgdlBDWzZdID0gY2hhaW47CiAgICAgICAgIHZQQ1s3XSA9IHNsb3QuY2Fj
aGVkT2Zmc2V0KCk7CiAgICAgICAgIGNvZGVCbG9jay0+cmVmU3RydWN0dXJlSURzKHZQQyk7Ci0g
ICAgICAgIENUSTo6Y29tcGlsZVB1dEJ5SWRUcmFuc2l0aW9uKHRoaXMsIGV4ZWMsIGNvZGVCbG9j
aywgc3RydWN0dXJlSUQtPnByZXZpb3VzSUQoKSwgc3RydWN0dXJlSUQsIHNsb3QuY2FjaGVkT2Zm
c2V0KCksIGNoYWluLCByZXR1cm5BZGRyZXNzKTsKKyAgICAgICAgQ1RJOjpjb21waWxlUHV0QnlJ
ZFRyYW5zaXRpb24odGhpcywgY2FsbEZyYW1lLCBjb2RlQmxvY2ssIHN0cnVjdHVyZUlELT5wcmV2
aW91c0lEKCksIHN0cnVjdHVyZUlELCBzbG90LmNhY2hlZE9mZnNldCgpLCBjaGFpbiwgcmV0dXJu
QWRkcmVzcyk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgCkBAIC00MDc1LDMwICs0MDQ0
LDMwIEBAIE5FVkVSX0lOTElORSB2b2lkIE1hY2hpbmU6OnRyeUNUSUNhY2hlUHUKICAgICBjb2Rl
QmxvY2stPnJlZlN0cnVjdHVyZUlEcyh2UEMpOwogCiAjaWYgVVNFKENUSV9SRVBBVENIX1BJQykK
LSAgICBVTlVTRURfUEFSQU0oZXhlYyk7CisgICAgVU5VU0VEX1BBUkFNKGNhbGxGcmFtZSk7CiAg
ICAgQ1RJOjpwYXRjaFB1dEJ5SWRSZXBsYWNlKGNvZGVCbG9jaywgc3RydWN0dXJlSUQsIHNsb3Qu
Y2FjaGVkT2Zmc2V0KCksIHJldHVybkFkZHJlc3MpOwogI2Vsc2UKLSAgICBDVEk6OmNvbXBpbGVQ
dXRCeUlkUmVwbGFjZSh0aGlzLCBleGVjLCBjb2RlQmxvY2ssIHN0cnVjdHVyZUlELCBzbG90LmNh
Y2hlZE9mZnNldCgpLCByZXR1cm5BZGRyZXNzKTsKKyAgICBDVEk6OmNvbXBpbGVQdXRCeUlkUmVw
bGFjZSh0aGlzLCBjYWxsRnJhbWUsIGNvZGVCbG9jaywgc3RydWN0dXJlSUQsIHNsb3QuY2FjaGVk
T2Zmc2V0KCksIHJldHVybkFkZHJlc3MpOwogI2VuZGlmCiB9CiAKLXZvaWQqIE1hY2hpbmU6Omdl
dENUSUFycmF5TGVuZ3RoVHJhbXBvbGluZShFeGVjU3RhdGUqIGV4ZWMsIENvZGVCbG9jayogY29k
ZUJsb2NrKQordm9pZCogTWFjaGluZTo6Z2V0Q1RJQXJyYXlMZW5ndGhUcmFtcG9saW5lKENhbGxG
cmFtZSogY2FsbEZyYW1lLCBDb2RlQmxvY2sqIGNvZGVCbG9jaykKIHsKICAgICBpZiAoIW1fY3Rp
QXJyYXlMZW5ndGhUcmFtcG9saW5lKQotICAgICAgICBtX2N0aUFycmF5TGVuZ3RoVHJhbXBvbGlu
ZSA9IENUSTo6Y29tcGlsZUFycmF5TGVuZ3RoVHJhbXBvbGluZSh0aGlzLCBleGVjLCBjb2RlQmxv
Y2spOworICAgICAgICBtX2N0aUFycmF5TGVuZ3RoVHJhbXBvbGluZSA9IENUSTo6Y29tcGlsZUFy
cmF5TGVuZ3RoVHJhbXBvbGluZSh0aGlzLCBjYWxsRnJhbWUsIGNvZGVCbG9jayk7CiAgICAgICAg
IAogICAgIHJldHVybiBtX2N0aUFycmF5TGVuZ3RoVHJhbXBvbGluZTsKIH0KIAotdm9pZCogTWFj
aGluZTo6Z2V0Q1RJU3RyaW5nTGVuZ3RoVHJhbXBvbGluZShFeGVjU3RhdGUqIGV4ZWMsIENvZGVC
bG9jayogY29kZUJsb2NrKQordm9pZCogTWFjaGluZTo6Z2V0Q1RJU3RyaW5nTGVuZ3RoVHJhbXBv
bGluZShDYWxsRnJhbWUqIGNhbGxGcmFtZSwgQ29kZUJsb2NrKiBjb2RlQmxvY2spCiB7CiAgICAg
aWYgKCFtX2N0aVN0cmluZ0xlbmd0aFRyYW1wb2xpbmUpCi0gICAgICAgIG1fY3RpU3RyaW5nTGVu
Z3RoVHJhbXBvbGluZSA9IENUSTo6Y29tcGlsZVN0cmluZ0xlbmd0aFRyYW1wb2xpbmUodGhpcywg
ZXhlYywgY29kZUJsb2NrKTsKKyAgICAgICAgbV9jdGlTdHJpbmdMZW5ndGhUcmFtcG9saW5lID0g
Q1RJOjpjb21waWxlU3RyaW5nTGVuZ3RoVHJhbXBvbGluZSh0aGlzLCBjYWxsRnJhbWUsIGNvZGVC
bG9jayk7CiAgICAgICAgIAogICAgIHJldHVybiBtX2N0aVN0cmluZ0xlbmd0aFRyYW1wb2xpbmU7
CiB9CiAKLU5FVkVSX0lOTElORSB2b2lkIE1hY2hpbmU6OnRyeUNUSUNhY2hlR2V0QnlJRChFeGVj
U3RhdGUqIGV4ZWMsIENvZGVCbG9jayogY29kZUJsb2NrLCB2b2lkKiByZXR1cm5BZGRyZXNzLCBK
U1ZhbHVlKiBiYXNlVmFsdWUsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgY29uc3Qg
UHJvcGVydHlTbG90JiBzbG90KQorTkVWRVJfSU5MSU5FIHZvaWQgTWFjaGluZTo6dHJ5Q1RJQ2Fj
aGVHZXRCeUlEKENhbGxGcmFtZSogY2FsbEZyYW1lLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgdm9p
ZCogcmV0dXJuQWRkcmVzcywgSlNWYWx1ZSogYmFzZVZhbHVlLCBjb25zdCBJZGVudGlmaWVyJiBw
cm9wZXJ0eU5hbWUsIGNvbnN0IFByb3BlcnR5U2xvdCYgc2xvdCkKIHsKICAgICAvLyBGSVhNRTog
V3JpdGUgYSB0ZXN0IHRoYXQgcHJvdmVzIHdlIG5lZWQgdG8gY2hlY2sgZm9yIHJlY3Vyc2lvbiBo
ZXJlIGp1c3QKICAgICAvLyBsaWtlIHRoZSBpbnRlcnByZXRlciBkb2VzLCB0aGVuIGFkZCBhIGNo
ZWNrIGZvciByZWN1cnNpb24uCkBAIC00MTA5LDE4ICs0MDc4LDE4IEBAIE5FVkVSX0lOTElORSB2
b2lkIE1hY2hpbmU6OnRyeUNUSUNhY2hlR2UKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAg
IGlmIChpc0pTQXJyYXkoYmFzZVZhbHVlKSAmJiBwcm9wZXJ0eU5hbWUgPT0gZXhlYy0+cHJvcGVy
dHlOYW1lcygpLmxlbmd0aCkgeworICAgIGlmIChpc0pTQXJyYXkoYmFzZVZhbHVlKSAmJiBwcm9w
ZXJ0eU5hbWUgPT0gY2FsbEZyYW1lLT5wcm9wZXJ0eU5hbWVzKCkubGVuZ3RoKSB7CiAjaWYgVVNF
KENUSV9SRVBBVENIX1BJQykKLSAgICAgICAgQ1RJOjpjb21waWxlUGF0Y2hHZXRBcnJheUxlbmd0
aCh0aGlzLCBleGVjLCBjb2RlQmxvY2ssIHJldHVybkFkZHJlc3MpOworICAgICAgICBDVEk6OmNv
bXBpbGVQYXRjaEdldEFycmF5TGVuZ3RoKHRoaXMsIGNhbGxGcmFtZSwgY29kZUJsb2NrLCByZXR1
cm5BZGRyZXNzKTsKICNlbHNlCi0gICAgICAgIGN0aVJlcGF0Y2hDYWxsQnlSZXR1cm5BZGRyZXNz
KHJldHVybkFkZHJlc3MsIGdldENUSUFycmF5TGVuZ3RoVHJhbXBvbGluZShleGVjLCBjb2RlQmxv
Y2spKTsKKyAgICAgICAgY3RpUmVwYXRjaENhbGxCeVJldHVybkFkZHJlc3MocmV0dXJuQWRkcmVz
cywgZ2V0Q1RJQXJyYXlMZW5ndGhUcmFtcG9saW5lKGNhbGxGcmFtZSwgY29kZUJsb2NrKSk7CiAj
ZW5kaWYKICAgICAgICAgcmV0dXJuOwogICAgIH0KLSAgICBpZiAoaXNKU1N0cmluZyhiYXNlVmFs
dWUpICYmIHByb3BlcnR5TmFtZSA9PSBleGVjLT5wcm9wZXJ0eU5hbWVzKCkubGVuZ3RoKSB7Cisg
ICAgaWYgKGlzSlNTdHJpbmcoYmFzZVZhbHVlKSAmJiBwcm9wZXJ0eU5hbWUgPT0gY2FsbEZyYW1l
LT5wcm9wZXJ0eU5hbWVzKCkubGVuZ3RoKSB7CiAgICAgICAgIC8vIFRoZSB0cmFkZW9mZiBvZiBj
b21waWxpbmcgYW4gcmVwYXRjaGVkIGlubGluZSBzdHJpbmcgbGVuZ3RoIGFjY2VzcyByb3V0aW5l
IGRvZXMgbm90IHNlZW0KICAgICAgICAgLy8gdG8gcGF5IG9mZiwgc28gd2UgY3VycmVudGx5IG9u
bHkgZG8gdGhpcyBmb3IgYXJyYXlzLgotICAgICAgICBjdGlSZXBhdGNoQ2FsbEJ5UmV0dXJuQWRk
cmVzcyhyZXR1cm5BZGRyZXNzLCBnZXRDVElTdHJpbmdMZW5ndGhUcmFtcG9saW5lKGV4ZWMsIGNv
ZGVCbG9jaykpOworICAgICAgICBjdGlSZXBhdGNoQ2FsbEJ5UmV0dXJuQWRkcmVzcyhyZXR1cm5B
ZGRyZXNzLCBnZXRDVElTdHJpbmdMZW5ndGhUcmFtcG9saW5lKGNhbGxGcmFtZSwgY29kZUJsb2Nr
KSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKQEAgLTQxNTYsMTIgKzQxMjUsMTIgQEAgTkVW
RVJfSU5MSU5FIHZvaWQgTWFjaGluZTo6dHJ5Q1RJQ2FjaGVHZQogI2lmIFVTRShDVElfUkVQQVRD
SF9QSUMpCiAgICAgICAgIENUSTo6cGF0Y2hHZXRCeUlkU2VsZihjb2RlQmxvY2ssIHN0cnVjdHVy
ZUlELCBzbG90LmNhY2hlZE9mZnNldCgpLCByZXR1cm5BZGRyZXNzKTsKICNlbHNlCi0gICAgICAg
IENUSTo6Y29tcGlsZUdldEJ5SWRTZWxmKHRoaXMsIGV4ZWMsIGNvZGVCbG9jaywgc3RydWN0dXJl
SUQsIHNsb3QuY2FjaGVkT2Zmc2V0KCksIHJldHVybkFkZHJlc3MpOworICAgICAgICBDVEk6OmNv
bXBpbGVHZXRCeUlkU2VsZih0aGlzLCBjYWxsRnJhbWUsIGNvZGVCbG9jaywgc3RydWN0dXJlSUQs
IHNsb3QuY2FjaGVkT2Zmc2V0KCksIHJldHVybkFkZHJlc3MpOwogI2VuZGlmCiAgICAgICAgIHJl
dHVybjsKICAgICB9CiAKLSAgICBpZiAoc2xvdC5zbG90QmFzZSgpID09IHN0cnVjdHVyZUlELT5w
cm90b3R5cGVGb3JMb29rdXAoZXhlYykpIHsKKyAgICBpZiAoc2xvdC5zbG90QmFzZSgpID09IHN0
cnVjdHVyZUlELT5wcm90b3R5cGVGb3JMb29rdXAoY2FsbEZyYW1lKSkgewogICAgICAgICBBU1NF
UlQoc2xvdC5zbG90QmFzZSgpLT5pc09iamVjdCgpKTsKIAogICAgICAgICBKU09iamVjdCogc2xv
dEJhc2VPYmplY3QgPSBzdGF0aWNfY2FzdDxKU09iamVjdCo+KHNsb3Quc2xvdEJhc2UoKSk7CkBA
IC00MTgwLDE0ICs0MTQ5LDE0IEBAIE5FVkVSX0lOTElORSB2b2lkIE1hY2hpbmU6OnRyeUNUSUNh
Y2hlR2UKICAgICAgICAgdlBDWzZdID0gc2xvdC5jYWNoZWRPZmZzZXQoKTsKICAgICAgICAgY29k
ZUJsb2NrLT5yZWZTdHJ1Y3R1cmVJRHModlBDKTsKIAotICAgICAgICBDVEk6OmNvbXBpbGVHZXRC
eUlkUHJvdG8odGhpcywgZXhlYywgY29kZUJsb2NrLCBzdHJ1Y3R1cmVJRCwgc2xvdEJhc2VPYmpl
Y3QtPnN0cnVjdHVyZUlEKCksIHNsb3QuY2FjaGVkT2Zmc2V0KCksIHJldHVybkFkZHJlc3MpOwor
ICAgICAgICBDVEk6OmNvbXBpbGVHZXRCeUlkUHJvdG8odGhpcywgY2FsbEZyYW1lLCBjb2RlQmxv
Y2ssIHN0cnVjdHVyZUlELCBzbG90QmFzZU9iamVjdC0+c3RydWN0dXJlSUQoKSwgc2xvdC5jYWNo
ZWRPZmZzZXQoKSwgcmV0dXJuQWRkcmVzcyk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKICAg
ICBzaXplX3QgY291bnQgPSAwOwogICAgIEpTT2JqZWN0KiBvID0gc3RhdGljX2Nhc3Q8SlNPYmpl
Y3QqPihiYXNlVmFsdWUpOwogICAgIHdoaWxlIChzbG90LnNsb3RCYXNlKCkgIT0gbykgewotICAg
ICAgICBKU1ZhbHVlKiB2ID0gby0+c3RydWN0dXJlSUQoKS0+cHJvdG90eXBlRm9yTG9va3VwKGV4
ZWMpOworICAgICAgICBKU1ZhbHVlKiB2ID0gby0+c3RydWN0dXJlSUQoKS0+cHJvdG90eXBlRm9y
TG9va3VwKGNhbGxGcmFtZSk7CiAKICAgICAgICAgLy8gSWYgd2UgZGlkbid0IGZpbmQgc2xvdEJh
c2UgaW4gYmFzZVZhbHVlJ3MgcHJvdG90eXBlIGNoYWluLCB0aGVuIGJhc2VWYWx1ZQogICAgICAg
ICAvLyBtdXN0IGJlIGEgcHJveHkgZm9yIGFub3RoZXIgb2JqZWN0LgpAQCAtNDIxMiw3ICs0MTgx
LDcgQEAgTkVWRVJfSU5MSU5FIHZvaWQgTWFjaGluZTo6dHJ5Q1RJQ2FjaGVHZQogCiAgICAgU3Ry
dWN0dXJlSURDaGFpbiogY2hhaW4gPSBzdHJ1Y3R1cmVJRC0+Y2FjaGVkUHJvdG90eXBlQ2hhaW4o
KTsKICAgICBpZiAoIWNoYWluKQotICAgICAgICBjaGFpbiA9IGNhY2hlUHJvdG90eXBlQ2hhaW4o
ZXhlYywgc3RydWN0dXJlSUQpOworICAgICAgICBjaGFpbiA9IGNhY2hlUHJvdG90eXBlQ2hhaW4o
Y2FsbEZyYW1lLCBzdHJ1Y3R1cmVJRCk7CiAKICAgICBBU1NFUlQoY2hhaW4pOwogICAgIHZQQ1sw
XSA9IGdldE9wY29kZShvcF9nZXRfYnlfaWRfY2hhaW4pOwpAQCAtNDIyMiw3ICs0MTkxLDcgQEAg
TkVWRVJfSU5MSU5FIHZvaWQgTWFjaGluZTo6dHJ5Q1RJQ2FjaGVHZQogICAgIHZQQ1s3XSA9IHNs
b3QuY2FjaGVkT2Zmc2V0KCk7CiAgICAgY29kZUJsb2NrLT5yZWZTdHJ1Y3R1cmVJRHModlBDKTsK
IAotICAgIENUSTo6Y29tcGlsZUdldEJ5SWRDaGFpbih0aGlzLCBleGVjLCBjb2RlQmxvY2ssIHN0
cnVjdHVyZUlELCBjaGFpbiwgY291bnQsIHNsb3QuY2FjaGVkT2Zmc2V0KCksIHJldHVybkFkZHJl
c3MpOworICAgIENUSTo6Y29tcGlsZUdldEJ5SWRDaGFpbih0aGlzLCBjYWxsRnJhbWUsIGNvZGVC
bG9jaywgc3RydWN0dXJlSUQsIGNoYWluLCBjb3VudCwgc2xvdC5jYWNoZWRPZmZzZXQoKSwgcmV0
dXJuQWRkcmVzcyk7CiB9CiAKICNkZWZpbmUgVk1fVEhST1dfRVhDRVBUSU9OKCkgXApAQCAtNDI2
NSwxNyArNDIzNCwxNiBAQCBORVZFUl9JTkxJTkUgdm9pZCBNYWNoaW5lOjp0cnlDVElDYWNoZUdl
CiBKU1ZhbHVlKiBNYWNoaW5lOjpjdGlfb3BfY29udmVydF90aGlzKENUSV9BUkdTKQogewogICAg
IEpTVmFsdWUqIHYxID0gQVJHX3NyYzE7Ci0gICAgRXhlY1N0YXRlKiBleGVjID0gQVJHX2V4ZWM7
CisgICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUgPSBBUkdfY2FsbEZyYW1lOwogCi0gICAgSlNPYmpl
Y3QqIHJlc3VsdCA9IHYxLT50b1RoaXNPYmplY3QoZXhlYyk7CisgICAgSlNPYmplY3QqIHJlc3Vs
dCA9IHYxLT50b1RoaXNPYmplY3QoY2FsbEZyYW1lKTsKICAgICBWTV9DSEVDS19FWENFUFRJT05f
QVRfRU5EKCk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAogdm9pZCBNYWNoaW5lOjpjdGlfb3Bf
ZW5kKENUSV9BUkdTKQogewotICAgIFJlZ2lzdGVyKiByID0gQVJHX3I7Ci0gICAgU2NvcGVDaGFp
bk5vZGUqIHNjb3BlQ2hhaW4gPSBNYWNoaW5lOjpzY29wZUNoYWluKHIpOworICAgIFNjb3BlQ2hh
aW5Ob2RlKiBzY29wZUNoYWluID0gQVJHX2NhbGxGcmFtZS0+c2NvcGVDaGFpbigpOwogICAgIEFT
U0VSVChzY29wZUNoYWluLT5yZWZDb3VudCA+IDEpOwogICAgIHNjb3BlQ2hhaW4tPmRlcmVmKCk7
CiB9CkBAIC00MjkyLDEzICs0MjYwLDEzIEBAIEpTVmFsdWUqIE1hY2hpbmU6OmN0aV9vcF9hZGQo
Q1RJX0FSR1MpCiAgICAgaWYgKHJpZ2h0SXNOdW1iZXIgJiYgZmFzdElzTnVtYmVyKHYxLCBsZWZ0
KSkKICAgICAgICAgcmV0dXJuIGpzTnVtYmVyKEFSR19nbG9iYWxEYXRhLCBsZWZ0ICsgcmlnaHQp
OwogICAgIAotICAgIEV4ZWNTdGF0ZSogZXhlYyA9IEFSR19leGVjOworICAgIENhbGxGcmFtZSog
Y2FsbEZyYW1lID0gQVJHX2NhbGxGcmFtZTsKIAogICAgIGJvb2wgbGVmdElzU3RyaW5nID0gdjEt
PmlzU3RyaW5nKCk7CiAgICAgaWYgKGxlZnRJc1N0cmluZyAmJiB2Mi0+aXNTdHJpbmcoKSkgewog
ICAgICAgICBSZWZQdHI8VVN0cmluZzo6UmVwPiB2YWx1ZSA9IGNvbmNhdGVuYXRlKHN0YXRpY19j
YXN0PEpTU3RyaW5nKj4odjEpLT52YWx1ZSgpLnJlcCgpLCBzdGF0aWNfY2FzdDxKU1N0cmluZyo+
KHYyKS0+dmFsdWUoKS5yZXAoKSk7CiAgICAgICAgIGlmIChVTkxJS0VMWSghdmFsdWUpKSB7Ci0g
ICAgICAgICAgICB0aHJvd091dE9mTWVtb3J5RXJyb3IoZXhlYyk7CisgICAgICAgICAgICB0aHJv
d091dE9mTWVtb3J5RXJyb3IoY2FsbEZyYW1lKTsKICAgICAgICAgICAgIFZNX1RIUk9XX0VYQ0VQ
VElPTigpOwogICAgICAgICB9CiAKQEAgLTQzMTEsMTQgKzQyNzksMTQgQEAgSlNWYWx1ZSogTWFj
aGluZTo6Y3RpX29wX2FkZChDVElfQVJHUykKICAgICAgICAgICAgIGNvbmNhdGVuYXRlKHN0YXRp
Y19jYXN0PEpTU3RyaW5nKj4odjEpLT52YWx1ZSgpLnJlcCgpLCByaWdodCk7CiAKICAgICAgICAg
aWYgKFVOTElLRUxZKCF2YWx1ZSkpIHsKLSAgICAgICAgICAgIHRocm93T3V0T2ZNZW1vcnlFcnJv
cihleGVjKTsKKyAgICAgICAgICAgIHRocm93T3V0T2ZNZW1vcnlFcnJvcihjYWxsRnJhbWUpOwog
ICAgICAgICAgICAgVk1fVEhST1dfRVhDRVBUSU9OKCk7CiAgICAgICAgIH0KICAgICAgICAgcmV0
dXJuIGpzU3RyaW5nKEFSR19nbG9iYWxEYXRhLCB2YWx1ZS5yZWxlYXNlKCkpOwogICAgIH0KIAog
ICAgIC8vIEFsbCBvdGhlciBjYXNlcyBhcmUgcHJldHR5IHVuY29tbW9uCi0gICAgSlNWYWx1ZSog
cmVzdWx0ID0ganNBZGRTbG93Q2FzZShleGVjLCB2MSwgdjIpOworICAgIEpTVmFsdWUqIHJlc3Vs
dCA9IGpzQWRkU2xvd0Nhc2UoY2FsbEZyYW1lLCB2MSwgdjIpOwogICAgIFZNX0NIRUNLX0VYQ0VQ
VElPTl9BVF9FTkQoKTsKICAgICByZXR1cm4gcmVzdWx0OwogfQpAQCAtNDMyNywxNSArNDI5NSwx
NSBAQCBKU1ZhbHVlKiBNYWNoaW5lOjpjdGlfb3BfcHJlX2luYyhDVElfQVJHCiB7CiAgICAgSlNW
YWx1ZSogdiA9IEFSR19zcmMxOwogCi0gICAgRXhlY1N0YXRlKiBleGVjID0gQVJHX2V4ZWM7Ci0g
ICAgSlNWYWx1ZSogcmVzdWx0ID0ganNOdW1iZXIoQVJHX2dsb2JhbERhdGEsIHYtPnRvTnVtYmVy
KGV4ZWMpICsgMSk7CisgICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUgPSBBUkdfY2FsbEZyYW1lOwor
ICAgIEpTVmFsdWUqIHJlc3VsdCA9IGpzTnVtYmVyKEFSR19nbG9iYWxEYXRhLCB2LT50b051bWJl
cihjYWxsRnJhbWUpICsgMSk7CiAgICAgVk1fQ0hFQ0tfRVhDRVBUSU9OX0FUX0VORCgpOwogICAg
IHJldHVybiByZXN1bHQ7CiB9CiAKIHZvaWQgTWFjaGluZTo6Y3RpX3RpbWVvdXRfY2hlY2soQ1RJ
X0FSR1MpCiB7Ci0gICAgaWYgKEFSR19nbG9iYWxEYXRhLT5tYWNoaW5lLT5jaGVja1RpbWVvdXQo
QVJHX2V4ZWMtPmR5bmFtaWNHbG9iYWxPYmplY3QoKSkpIHsKKyAgICBpZiAoQVJHX2dsb2JhbERh
dGEtPm1hY2hpbmUtPmNoZWNrVGltZW91dChBUkdfY2FsbEZyYW1lLT5keW5hbWljR2xvYmFsT2Jq
ZWN0KCkpKSB7CiAgICAgICAgIEFSR19nbG9iYWxEYXRhLT5leGNlcHRpb24gPSBjcmVhdGVJbnRl
cnJ1cHRlZEV4ZWN1dGlvbkV4Y2VwdGlvbihBUkdfZ2xvYmFsRGF0YSk7CiAgICAgICAgIFZNX1RI
Uk9XX0VYQ0VQVElPTl9BVF9FTkQoKTsKICAgICB9CkBAIC00MzQ1LDkgKzQzMTMsOSBAQCBpbnQg
TWFjaGluZTo6Y3RpX29wX2xvb3BfaWZfbGVzcyhDVElfQVJHCiB7CiAgICAgSlNWYWx1ZSogc3Jj
MSA9IEFSR19zcmMxOwogICAgIEpTVmFsdWUqIHNyYzIgPSBBUkdfc3JjMjsKLSAgICBFeGVjU3Rh
dGUqIGV4ZWMgPSBBUkdfZXhlYzsKKyAgICBDYWxsRnJhbWUqIGNhbGxGcmFtZSA9IEFSR19jYWxs
RnJhbWU7CiAKLSAgICBib29sIHJlc3VsdCA9IGpzTGVzcyhleGVjLCBzcmMxLCBzcmMyKTsKKyAg
ICBib29sIHJlc3VsdCA9IGpzTGVzcyhjYWxsRnJhbWUsIHNyYzEsIHNyYzIpOwogICAgIFZNX0NI
RUNLX0VYQ0VQVElPTl9BVF9FTkQoKTsKICAgICByZXR1cm4gcmVzdWx0OwogfQpAQCAtNDM1Niwy
NSArNDMyNCwyNSBAQCBpbnQgTWFjaGluZTo6Y3RpX29wX2xvb3BfaWZfbGVzc2VxKENUSV9BCiB7
CiAgICAgSlNWYWx1ZSogc3JjMSA9IEFSR19zcmMxOwogICAgIEpTVmFsdWUqIHNyYzIgPSBBUkdf
c3JjMjsKLSAgICBFeGVjU3RhdGUqIGV4ZWMgPSBBUkdfZXhlYzsKKyAgICBDYWxsRnJhbWUqIGNh
bGxGcmFtZSA9IEFSR19jYWxsRnJhbWU7CiAKLSAgICBib29sIHJlc3VsdCA9IGpzTGVzc0VxKGV4
ZWMsIHNyYzEsIHNyYzIpOworICAgIGJvb2wgcmVzdWx0ID0ganNMZXNzRXEoY2FsbEZyYW1lLCBz
cmMxLCBzcmMyKTsKICAgICBWTV9DSEVDS19FWENFUFRJT05fQVRfRU5EKCk7CiAgICAgcmV0dXJu
IHJlc3VsdDsKIH0KIAogSlNWYWx1ZSogTWFjaGluZTo6Y3RpX29wX25ld19vYmplY3QoQ1RJX0FS
R1MpCiB7Ci0gICAgcmV0dXJuIGNvbnN0cnVjdEVtcHR5T2JqZWN0KEFSR19leGVjKTs7CisgICAg
cmV0dXJuIGNvbnN0cnVjdEVtcHR5T2JqZWN0KEFSR19jYWxsRnJhbWUpOzsKIH0KIAogdm9pZCBN
YWNoaW5lOjpjdGlfb3BfcHV0X2J5X2lkKENUSV9BUkdTKQogewotICAgIEV4ZWNTdGF0ZSogZXhl
YyA9IEFSR19leGVjOworICAgIENhbGxGcmFtZSogY2FsbEZyYW1lID0gQVJHX2NhbGxGcmFtZTsK
ICAgICBJZGVudGlmaWVyJiBpZGVudCA9ICpBUkdfaWQyOwogCiAgICAgUHV0UHJvcGVydHlTbG90
IHNsb3Q7Ci0gICAgQVJHX3NyYzEtPnB1dChleGVjLCBpZGVudCwgQVJHX3NyYzMsIHNsb3QpOwor
ICAgIEFSR19zcmMxLT5wdXQoY2FsbEZyYW1lLCBpZGVudCwgQVJHX3NyYzMsIHNsb3QpOwogCiAg
ICAgY3RpUmVwYXRjaENhbGxCeVJldHVybkFkZHJlc3MoQ1RJX1JFVFVSTl9BRERSRVNTLCAodm9p
ZCopY3RpX29wX3B1dF9ieV9pZF9zZWNvbmQpOwogCkBAIC00MzgzLDM3ICs0MzUxLDI2IEBAIHZv
aWQgTWFjaGluZTo6Y3RpX29wX3B1dF9ieV9pZChDVElfQVJHUykKIAogdm9pZCBNYWNoaW5lOjpj
dGlfb3BfcHV0X2J5X2lkX3NlY29uZChDVElfQVJHUykKIHsKLSAgICBFeGVjU3RhdGUqIGV4ZWMg
PSBBUkdfZXhlYzsKLSAgICBJZGVudGlmaWVyJiBpZGVudCA9ICpBUkdfaWQyOwotCi0gICAgSlNW
YWx1ZSogYmFzZVZhbHVlID0gQVJHX3NyYzE7CiAgICAgUHV0UHJvcGVydHlTbG90IHNsb3Q7Ci0g
ICAgYmFzZVZhbHVlLT5wdXQoZXhlYywgaWRlbnQsIEFSR19zcmMzLCBzbG90KTsKLQotICAgIFJl
Z2lzdGVyKiByID0gQVJHX3I7Ci0gICAgQVJHX2dsb2JhbERhdGEtPm1hY2hpbmUtPnRyeUNUSUNh
Y2hlUHV0QnlJRChleGVjLCBjb2RlQmxvY2sociksIENUSV9SRVRVUk5fQUREUkVTUywgYmFzZVZh
bHVlLCBzbG90KTsKLQorICAgIEFSR19zcmMxLT5wdXQoQVJHX2NhbGxGcmFtZSwgKkFSR19pZDIs
IEFSR19zcmMzLCBzbG90KTsKKyAgICBBUkdfZ2xvYmFsRGF0YS0+bWFjaGluZS0+dHJ5Q1RJQ2Fj
aGVQdXRCeUlEKEFSR19jYWxsRnJhbWUsIEFSR19jYWxsRnJhbWUtPmNvZGVCbG9jaygpLCBDVElf
UkVUVVJOX0FERFJFU1MsIEFSR19zcmMxLCBzbG90KTsKICAgICBWTV9DSEVDS19FWENFUFRJT05f
QVRfRU5EKCk7CiB9CiAKIHZvaWQgTWFjaGluZTo6Y3RpX29wX3B1dF9ieV9pZF9nZW5lcmljKENU
SV9BUkdTKQogewotICAgIEV4ZWNTdGF0ZSogZXhlYyA9IEFSR19leGVjOwotICAgIElkZW50aWZp
ZXImIGlkZW50ID0gKkFSR19pZDI7Ci0KICAgICBQdXRQcm9wZXJ0eVNsb3Qgc2xvdDsKLSAgICBB
Ukdfc3JjMS0+cHV0KGV4ZWMsIGlkZW50LCBBUkdfc3JjMywgc2xvdCk7Ci0KKyAgICBBUkdfc3Jj
MS0+cHV0KEFSR19jYWxsRnJhbWUsICpBUkdfaWQyLCBBUkdfc3JjMywgc2xvdCk7CiAgICAgVk1f
Q0hFQ0tfRVhDRVBUSU9OX0FUX0VORCgpOwogfQogCiB2b2lkIE1hY2hpbmU6OmN0aV9vcF9wdXRf
YnlfaWRfZmFpbChDVElfQVJHUykKIHsKLSAgICBFeGVjU3RhdGUqIGV4ZWMgPSBBUkdfZXhlYzsK
KyAgICBDYWxsRnJhbWUqIGNhbGxGcmFtZSA9IEFSR19jYWxsRnJhbWU7CiAgICAgSWRlbnRpZmll
ciYgaWRlbnQgPSAqQVJHX2lkMjsKIAogICAgIFB1dFByb3BlcnR5U2xvdCBzbG90OwotICAgIEFS
R19zcmMxLT5wdXQoZXhlYywgaWRlbnQsIEFSR19zcmMzLCBzbG90KTsKKyAgICBBUkdfc3JjMS0+
cHV0KGNhbGxGcmFtZSwgaWRlbnQsIEFSR19zcmMzLCBzbG90KTsKIAogICAgIC8vIHNob3VsZCBw
cm9iYWJseSB1bmNhY2hlUHV0QnlJRCgpIC4uLiB0aGlzIHdvdWxkIG1lYW4gZG9pbmcgYSB2UEMg
bG9va3VwIC0gbWlnaHQgYmUgd29ydGgganVzdCBibGVlZGluZyB0aGlzIHVudGlsIHRoZSBlbmQu
CiAgICAgY3RpUmVwYXRjaENhbGxCeVJldHVybkFkZHJlc3MoQ1RJX1JFVFVSTl9BRERSRVNTLCAo
dm9pZCopY3RpX29wX3B1dF9ieV9pZF9nZW5lcmljKTsKQEAgLTQ0MjMsMTIgKzQzODAsMTIgQEAg
dm9pZCBNYWNoaW5lOjpjdGlfb3BfcHV0X2J5X2lkX2ZhaWwoQ1RJXwogCiBKU1ZhbHVlKiBNYWNo
aW5lOjpjdGlfb3BfZ2V0X2J5X2lkKENUSV9BUkdTKQogewotICAgIEV4ZWNTdGF0ZSogZXhlYyA9
IEFSR19leGVjOworICAgIENhbGxGcmFtZSogY2FsbEZyYW1lID0gQVJHX2NhbGxGcmFtZTsKICAg
ICBJZGVudGlmaWVyJiBpZGVudCA9ICpBUkdfaWQyOwogCiAgICAgSlNWYWx1ZSogYmFzZVZhbHVl
ID0gQVJHX3NyYzE7CiAgICAgUHJvcGVydHlTbG90IHNsb3QoYmFzZVZhbHVlKTsKLSAgICBKU1Zh
bHVlKiByZXN1bHQgPSBiYXNlVmFsdWUtPmdldChleGVjLCBpZGVudCwgc2xvdCk7CisgICAgSlNW
YWx1ZSogcmVzdWx0ID0gYmFzZVZhbHVlLT5nZXQoY2FsbEZyYW1lLCBpZGVudCwgc2xvdCk7CiAK
ICAgICBjdGlSZXBhdGNoQ2FsbEJ5UmV0dXJuQWRkcmVzcyhDVElfUkVUVVJOX0FERFJFU1MsICh2
b2lkKiljdGlfb3BfZ2V0X2J5X2lkX3NlY29uZCk7CiAKQEAgLTQ0MzgsMTUgKzQzOTUsMTQgQEAg
SlNWYWx1ZSogTWFjaGluZTo6Y3RpX29wX2dldF9ieV9pZChDVElfQQogCiBKU1ZhbHVlKiBNYWNo
aW5lOjpjdGlfb3BfZ2V0X2J5X2lkX3NlY29uZChDVElfQVJHUykKIHsKLSAgICBFeGVjU3RhdGUq
IGV4ZWMgPSBBUkdfZXhlYzsKKyAgICBDYWxsRnJhbWUqIGNhbGxGcmFtZSA9IEFSR19jYWxsRnJh
bWU7CiAgICAgSWRlbnRpZmllciYgaWRlbnQgPSAqQVJHX2lkMjsKIAogICAgIEpTVmFsdWUqIGJh
c2VWYWx1ZSA9IEFSR19zcmMxOwogICAgIFByb3BlcnR5U2xvdCBzbG90KGJhc2VWYWx1ZSk7Ci0g
ICAgSlNWYWx1ZSogcmVzdWx0ID0gYmFzZVZhbHVlLT5nZXQoZXhlYywgaWRlbnQsIHNsb3QpOwor
ICAgIEpTVmFsdWUqIHJlc3VsdCA9IGJhc2VWYWx1ZS0+Z2V0KGNhbGxGcmFtZSwgaWRlbnQsIHNs
b3QpOwogCi0gICAgUmVnaXN0ZXIqIHIgPSBBUkdfcjsKLSAgICBBUkdfZ2xvYmFsRGF0YS0+bWFj
aGluZS0+dHJ5Q1RJQ2FjaGVHZXRCeUlEKGV4ZWMsIGNvZGVCbG9jayhyKSwgQ1RJX1JFVFVSTl9B
RERSRVNTLCBiYXNlVmFsdWUsIGlkZW50LCBzbG90KTsKKyAgICBBUkdfZ2xvYmFsRGF0YS0+bWFj
aGluZS0+dHJ5Q1RJQ2FjaGVHZXRCeUlEKGNhbGxGcmFtZSwgY2FsbEZyYW1lLT5jb2RlQmxvY2so
KSwgQ1RJX1JFVFVSTl9BRERSRVNTLCBiYXNlVmFsdWUsIGlkZW50LCBzbG90KTsKIAogICAgIFZN
X0NIRUNLX0VYQ0VQVElPTl9BVF9FTkQoKTsKICAgICByZXR1cm4gcmVzdWx0OwpAQCAtNDQ1NCwx
MiArNDQxMCwxMiBAQCBKU1ZhbHVlKiBNYWNoaW5lOjpjdGlfb3BfZ2V0X2J5X2lkX3NlY29uCiAK
IEpTVmFsdWUqIE1hY2hpbmU6OmN0aV9vcF9nZXRfYnlfaWRfZ2VuZXJpYyhDVElfQVJHUykKIHsK
LSAgICBFeGVjU3RhdGUqIGV4ZWMgPSBBUkdfZXhlYzsKKyAgICBDYWxsRnJhbWUqIGNhbGxGcmFt
ZSA9IEFSR19jYWxsRnJhbWU7CiAgICAgSWRlbnRpZmllciYgaWRlbnQgPSAqQVJHX2lkMjsKIAog
ICAgIEpTVmFsdWUqIGJhc2VWYWx1ZSA9IEFSR19zcmMxOwogICAgIFByb3BlcnR5U2xvdCBzbG90
KGJhc2VWYWx1ZSk7Ci0gICAgSlNWYWx1ZSogcmVzdWx0ID0gYmFzZVZhbHVlLT5nZXQoZXhlYywg
aWRlbnQsIHNsb3QpOworICAgIEpTVmFsdWUqIHJlc3VsdCA9IGJhc2VWYWx1ZS0+Z2V0KGNhbGxG
cmFtZSwgaWRlbnQsIHNsb3QpOwogCiAgICAgVk1fQ0hFQ0tfRVhDRVBUSU9OX0FUX0VORCgpOwog
ICAgIHJldHVybiByZXN1bHQ7CkBAIC00NDY3LDEyICs0NDIzLDEyIEBAIEpTVmFsdWUqIE1hY2hp
bmU6OmN0aV9vcF9nZXRfYnlfaWRfZ2VuZXIKIAogSlNWYWx1ZSogTWFjaGluZTo6Y3RpX29wX2dl
dF9ieV9pZF9mYWlsKENUSV9BUkdTKQogewotICAgIEV4ZWNTdGF0ZSogZXhlYyA9IEFSR19leGVj
OworICAgIENhbGxGcmFtZSogY2FsbEZyYW1lID0gQVJHX2NhbGxGcmFtZTsKICAgICBJZGVudGlm
aWVyJiBpZGVudCA9ICpBUkdfaWQyOwogCiAgICAgSlNWYWx1ZSogYmFzZVZhbHVlID0gQVJHX3Ny
YzE7CiAgICAgUHJvcGVydHlTbG90IHNsb3QoYmFzZVZhbHVlKTsKLSAgICBKU1ZhbHVlKiByZXN1
bHQgPSBiYXNlVmFsdWUtPmdldChleGVjLCBpZGVudCwgc2xvdCk7CisgICAgSlNWYWx1ZSogcmVz
dWx0ID0gYmFzZVZhbHVlLT5nZXQoY2FsbEZyYW1lLCBpZGVudCwgc2xvdCk7CiAKICAgICAvLyBz
aG91bGQgcHJvYmFibHkgdW5jYWNoZUdldEJ5SUQoKSAuLi4gdGhpcyB3b3VsZCBtZWFuIGRvaW5n
IGEgdlBDIGxvb2t1cCAtIG1pZ2h0IGJlIHdvcnRoIGp1c3QgYmxlZWRpbmcgdGhpcyB1bnRpbCB0
aGUgZW5kLgogICAgIGN0aVJlcGF0Y2hDYWxsQnlSZXR1cm5BZGRyZXNzKENUSV9SRVRVUk5fQURE
UkVTUywgKHZvaWQqKWN0aV9vcF9nZXRfYnlfaWRfZ2VuZXJpYyk7CkBAIC00NDgzLDcgKzQ0Mzks
NyBAQCBKU1ZhbHVlKiBNYWNoaW5lOjpjdGlfb3BfZ2V0X2J5X2lkX2ZhaWwoCiAKIEpTVmFsdWUq
IE1hY2hpbmU6OmN0aV9vcF9pbnN0YW5jZW9mKENUSV9BUkdTKQogewotICAgIEV4ZWNTdGF0ZSog
ZXhlYyA9IEFSR19leGVjOworICAgIENhbGxGcmFtZSogY2FsbEZyYW1lID0gQVJHX2NhbGxGcmFt
ZTsKICAgICBKU1ZhbHVlKiB2YWx1ZSA9IEFSR19zcmMxOwogICAgIEpTVmFsdWUqIGJhc2VWYWwg
PSBBUkdfc3JjMjsKICAgICBKU1ZhbHVlKiBwcm90byA9IEFSR19zcmMzOwpAQCAtNDQ5NywxMSAr
NDQ1MywxMSBAQCBKU1ZhbHVlKiBNYWNoaW5lOjpjdGlfb3BfaW5zdGFuY2VvZihDVElfCiAgICAg
ICAgICAgIHx8IChiYXNlQ2VsbC0+c3RydWN0dXJlSUQoKS0+dHlwZUluZm8oKS5mbGFncygpICYg
KEltcGxlbWVudHNIYXNJbnN0YW5jZSB8IE92ZXJyaWRlc0hhc0luc3RhbmNlKSkgIT0gSW1wbGVt
ZW50c0hhc0luc3RhbmNlKTsKIAogICAgIGlmICghYmFzZVZhbC0+aXNPYmplY3QoKSkgewotICAg
ICAgICBSZWdpc3RlciogciA9IEFSR19yOwotICAgICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9
IE1hY2hpbmU6OmNvZGVCbG9jayhyKTsKKyAgICAgICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUgPSBB
UkdfY2FsbEZyYW1lOworICAgICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IGNhbGxGcmFtZS0+
Y29kZUJsb2NrKCk7CiAgICAgICAgIEFTU0VSVChjb2RlQmxvY2stPmN0aVJldHVybkFkZHJlc3NW
UENNYXAuY29udGFpbnMoQ1RJX1JFVFVSTl9BRERSRVNTKSk7CiAgICAgICAgIHVuc2lnbmVkIHZQ
Q0luZGV4ID0gY29kZUJsb2NrLT5jdGlSZXR1cm5BZGRyZXNzVlBDTWFwLmdldChDVElfUkVUVVJO
X0FERFJFU1MpOwotICAgICAgICBBUkdfZ2xvYmFsRGF0YS0+ZXhjZXB0aW9uID0gY3JlYXRlSW52
YWxpZFBhcmFtRXJyb3IoZXhlYywgImluc3RhbmNlb2YiLCBiYXNlVmFsLCBjb2RlQmxvY2stPmlu
c3RydWN0aW9ucy5iZWdpbigpICsgdlBDSW5kZXgsIGNvZGVCbG9jayk7CisgICAgICAgIEFSR19n
bG9iYWxEYXRhLT5leGNlcHRpb24gPSBjcmVhdGVJbnZhbGlkUGFyYW1FcnJvcihjYWxsRnJhbWUs
ICJpbnN0YW5jZW9mIiwgYmFzZVZhbCwgY29kZUJsb2NrLT5pbnN0cnVjdGlvbnMuYmVnaW4oKSAr
IHZQQ0luZGV4LCBjb2RlQmxvY2spOwogICAgICAgICBWTV9USFJPV19FWENFUFRJT04oKTsKICAg
ICB9CiAKQEAgLTQ1MDksMTQgKzQ0NjUsMTQgQEAgSlNWYWx1ZSogTWFjaGluZTo6Y3RpX29wX2lu
c3RhbmNlb2YoQ1RJXwogICAgICAgICByZXR1cm4ganNCb29sZWFuKGZhbHNlKTsKIAogICAgIGlm
ICghcHJvdG8tPmlzT2JqZWN0KCkpIHsKLSAgICAgICAgdGhyb3dFcnJvcihleGVjLCBUeXBlRXJy
b3IsICJpbnN0YW5jZW9mIGNhbGxlZCBvbiBhbiBvYmplY3Qgd2l0aCBhbiBpbnZhbGlkIHByb3Rv
dHlwZSBwcm9wZXJ0eS4iKTsKKyAgICAgICAgdGhyb3dFcnJvcihjYWxsRnJhbWUsIFR5cGVFcnJv
ciwgImluc3RhbmNlb2YgY2FsbGVkIG9uIGFuIG9iamVjdCB3aXRoIGFuIGludmFsaWQgcHJvdG90
eXBlIHByb3BlcnR5LiIpOwogICAgICAgICBWTV9USFJPV19FWENFUFRJT04oKTsKICAgICB9CiAg
ICAgICAgIAogICAgIGlmICghdmFsdWUtPmlzT2JqZWN0KCkpCiAgICAgICAgIHJldHVybiBqc0Jv
b2xlYW4oZmFsc2UpOwogCi0gICAgSlNWYWx1ZSogcmVzdWx0ID0ganNCb29sZWFuKHN0YXRpY19j
YXN0PEpTT2JqZWN0Kj4oYmFzZUNlbGwpLT5oYXNJbnN0YW5jZShleGVjLCB2YWx1ZUNlbGwsIHBy
b3RvQ2VsbCkpOworICAgIEpTVmFsdWUqIHJlc3VsdCA9IGpzQm9vbGVhbihzdGF0aWNfY2FzdDxK
U09iamVjdCo+KGJhc2VDZWxsKS0+aGFzSW5zdGFuY2UoY2FsbEZyYW1lLCB2YWx1ZUNlbGwsIHBy
b3RvQ2VsbCkpOwogICAgIFZNX0NIRUNLX0VYQ0VQVElPTl9BVF9FTkQoKTsKIAogICAgIHJldHVy
biByZXN1bHQ7CkBAIC00NTI0LDEyICs0NDgwLDEyIEBAIEpTVmFsdWUqIE1hY2hpbmU6OmN0aV9v
cF9pbnN0YW5jZW9mKENUSV8KIAogSlNWYWx1ZSogTWFjaGluZTo6Y3RpX29wX2RlbF9ieV9pZChD
VElfQVJHUykKIHsKLSAgICBFeGVjU3RhdGUqIGV4ZWMgPSBBUkdfZXhlYzsKKyAgICBDYWxsRnJh
bWUqIGNhbGxGcmFtZSA9IEFSR19jYWxsRnJhbWU7CiAgICAgSWRlbnRpZmllciYgaWRlbnQgPSAq
QVJHX2lkMjsKICAgICAKLSAgICBKU09iamVjdCogYmFzZU9iaiA9IEFSR19zcmMxLT50b09iamVj
dChleGVjKTsKKyAgICBKU09iamVjdCogYmFzZU9iaiA9IEFSR19zcmMxLT50b09iamVjdChjYWxs
RnJhbWUpOwogCi0gICAgSlNWYWx1ZSogcmVzdWx0ID0ganNCb29sZWFuKGJhc2VPYmotPmRlbGV0
ZVByb3BlcnR5KGV4ZWMsIGlkZW50KSk7CisgICAgSlNWYWx1ZSogcmVzdWx0ID0ganNCb29sZWFu
KGJhc2VPYmotPmRlbGV0ZVByb3BlcnR5KGNhbGxGcmFtZSwgaWRlbnQpKTsKICAgICBWTV9DSEVD
S19FWENFUFRJT05fQVRfRU5EKCk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KQEAgLTQ1NDQsMTUg
KzQ1MDAsMTUgQEAgSlNWYWx1ZSogTWFjaGluZTo6Y3RpX29wX211bChDVElfQVJHUykKICAgICBp
ZiAoZmFzdElzTnVtYmVyKHNyYzEsIGxlZnQpICYmIGZhc3RJc051bWJlcihzcmMyLCByaWdodCkp
CiAgICAgICAgIHJldHVybiBqc051bWJlcihBUkdfZ2xvYmFsRGF0YSwgbGVmdCAqIHJpZ2h0KTsK
IAotICAgIEV4ZWNTdGF0ZSogZXhlYyA9IEFSR19leGVjOwotICAgIEpTVmFsdWUqIHJlc3VsdCA9
IGpzTnVtYmVyKEFSR19nbG9iYWxEYXRhLCBzcmMxLT50b051bWJlcihleGVjKSAqIHNyYzItPnRv
TnVtYmVyKGV4ZWMpKTsKKyAgICBDYWxsRnJhbWUqIGNhbGxGcmFtZSA9IEFSR19jYWxsRnJhbWU7
CisgICAgSlNWYWx1ZSogcmVzdWx0ID0ganNOdW1iZXIoQVJHX2dsb2JhbERhdGEsIHNyYzEtPnRv
TnVtYmVyKGNhbGxGcmFtZSkgKiBzcmMyLT50b051bWJlcihjYWxsRnJhbWUpKTsKICAgICBWTV9D
SEVDS19FWENFUFRJT05fQVRfRU5EKCk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAogSlNWYWx1
ZSogTWFjaGluZTo6Y3RpX29wX25ld19mdW5jKENUSV9BUkdTKQogewotICAgIHJldHVybiBBUkdf
ZnVuYzEtPm1ha2VGdW5jdGlvbihBUkdfZXhlYywgTWFjaGluZTo6c2NvcGVDaGFpbihBUkdfcikp
OworICAgIHJldHVybiBBUkdfZnVuYzEtPm1ha2VGdW5jdGlvbihBUkdfY2FsbEZyYW1lLCBBUkdf
Y2FsbEZyYW1lLT5zY29wZUNoYWluKCkpOwogfQogCiB2b2lkKiBNYWNoaW5lOjpjdGlfb3BfY2Fs
bF9KU0Z1bmN0aW9uKENUSV9BUkdTKQpAQCAtNDU2Myw1MyArNDUxOSw1MiBAQCB2b2lkKiBNYWNo
aW5lOjpjdGlfb3BfY2FsbF9KU0Z1bmN0aW9uKENUCiAjZW5kaWYKIAogICAgIGlmIChVTkxJS0VM
WSgqQVJHX3Byb2ZpbGVyUmVmZXJlbmNlICE9IDApKQotICAgICAgICAoKkFSR19wcm9maWxlclJl
ZmVyZW5jZSktPndpbGxFeGVjdXRlKENhbGxGcmFtZTo6Y3JlYXRlKEFSR19yKSwgc3RhdGljX2Nh
c3Q8SlNPYmplY3QqPihBUkdfc3JjMSkpOworICAgICAgICAoKkFSR19wcm9maWxlclJlZmVyZW5j
ZSktPndpbGxFeGVjdXRlKEFSR19jYWxsRnJhbWUsIHN0YXRpY19jYXN0PEpTRnVuY3Rpb24qPihB
Ukdfc3JjMSkpOwogCiAgICAgU2NvcGVDaGFpbk5vZGUqIGNhbGxEYXRhU2NvcGVDaGFpbiA9IHN0
YXRpY19jYXN0PEpTRnVuY3Rpb24qPihBUkdfc3JjMSktPm1fc2NvcGVDaGFpbi5ub2RlKCk7CiAg
ICAgQ29kZUJsb2NrKiBuZXdDb2RlQmxvY2sgPSAmc3RhdGljX2Nhc3Q8SlNGdW5jdGlvbio+KEFS
R19zcmMxKS0+bV9ib2R5LT5ieXRlQ29kZShjYWxsRGF0YVNjb3BlQ2hhaW4pOwogCi0gICAgUmVn
aXN0ZXIqIHIgPSBzbGlkZVJlZ2lzdGVyV2luZG93Rm9yQ2FsbChuZXdDb2RlQmxvY2ssIEFSR19y
ZWdpc3RlckZpbGUsIEFSR19yLCBBUkdfaW50MiwgQVJHX2ludDMpOwotICAgIGlmIChVTkxJS0VM
WSghcikpIHsKLSAgICAgICAgQVJHX2dsb2JhbERhdGEtPmV4Y2VwdGlvbiA9IGNyZWF0ZVN0YWNr
T3ZlcmZsb3dFcnJvcihDYWxsRnJhbWU6OmNyZWF0ZShBUkdfcikpOworICAgIENhbGxGcmFtZSog
Y2FsbEZyYW1lID0gc2xpZGVSZWdpc3RlcldpbmRvd0ZvckNhbGwobmV3Q29kZUJsb2NrLCBBUkdf
cmVnaXN0ZXJGaWxlLCBBUkdfY2FsbEZyYW1lLCBBUkdfaW50MiwgQVJHX2ludDMpOworICAgIGlm
IChVTkxJS0VMWSghY2FsbEZyYW1lKSkgeworICAgICAgICBBUkdfZ2xvYmFsRGF0YS0+ZXhjZXB0
aW9uID0gY3JlYXRlU3RhY2tPdmVyZmxvd0Vycm9yKEFSR19jYWxsRnJhbWUpOwogICAgICAgICBW
TV9USFJPV19FWENFUFRJT04oKTsKICAgICB9CiAKLSAgICByW1JlZ2lzdGVyRmlsZTo6Q29kZUJs
b2NrXSA9IG5ld0NvZGVCbG9jazsKLSAgICByW1JlZ2lzdGVyRmlsZTo6U2NvcGVDaGFpbl0gPSBj
YWxsRGF0YVNjb3BlQ2hhaW47Ci0gICAgcltSZWdpc3RlckZpbGU6OkNhbGxlclJlZ2lzdGVyc10g
PSBBUkdfcjsKKyAgICBjYWxsRnJhbWUtPnNldENvZGVCbG9jayhuZXdDb2RlQmxvY2spOworICAg
IGNhbGxGcmFtZS0+c2V0U2NvcGVDaGFpbihjYWxsRGF0YVNjb3BlQ2hhaW4pOworICAgIGNhbGxG
cmFtZS0+c2V0Q2FsbGVyRnJhbWUoQVJHX2NhbGxGcmFtZSk7CiAgICAgLy8gUmVnaXN0ZXJGaWxl
OjpSZXR1cm5QQyBpcyBzZXQgYnkgY2FsbGVlCiAgICAgLy8gUmVnaXN0ZXJGaWxlOjpSZXR1cm5W
YWx1ZVJlZ2lzdGVyIGlzIHNldCBieSBjYWxsZXIKLSAgICByW1JlZ2lzdGVyRmlsZTo6QXJndW1l
bnRDb3VudF0gPSBBUkdfaW50MzsgLy8gb3JpZ2luYWwgYXJndW1lbnQgY291bnQgKGZvciB0aGUg
c2FrZSBvZiB0aGUgImFyZ3VtZW50cyIgb2JqZWN0KQotICAgIHJbUmVnaXN0ZXJGaWxlOjpDYWxs
ZWVdID0gQVJHX3NyYzE7Ci0gICAgcltSZWdpc3RlckZpbGU6Ok9wdGlvbmFsQ2FsbGVlQWN0aXZh
dGlvbl0gPSBudWxsSlNWYWx1ZTsKLSAgICByW1JlZ2lzdGVyRmlsZTo6T3B0aW9uYWxDYWxsZWVB
cmd1bWVudHNdID0gbnVsbEpTVmFsdWU7CisgICAgY2FsbEZyYW1lLT5zZXRBcmd1bWVudENvdW50
KEFSR19pbnQzKTsgLy8gb3JpZ2luYWwgYXJndW1lbnQgY291bnQgKGZvciB0aGUgc2FrZSBvZiB0
aGUgImFyZ3VtZW50cyIgb2JqZWN0KQorICAgIGNhbGxGcmFtZS0+c2V0Q2FsbGVlKHN0YXRpY19j
YXN0PEpTRnVuY3Rpb24qPihBUkdfc3JjMSkpOworICAgIGNhbGxGcmFtZS0+c2V0Q2FsbGVlQWN0
aXZhdGlvbigwKTsKKyAgICBjYWxsRnJhbWUtPnNldENhbGxlZUFyZ3VtZW50cygwKTsKIAotICAg
IEFSR19zZXRSKHIpOworICAgIEFSR19zZXRDYWxsRnJhbWUoY2FsbEZyYW1lKTsKIAogICAgIHJl
dHVybiBuZXdDb2RlQmxvY2stPmN0aUNvZGU7CiB9CiAKIHZvaWQqIE1hY2hpbmU6OmN0aV92bV9j
b21waWxlKENUSV9BUkdTKQogewotICAgIFJlZ2lzdGVyKiByID0gQVJHX3I7Ci0gICAgQ29kZUJs
b2NrKiBjb2RlQmxvY2sgPSBNYWNoaW5lOjpjb2RlQmxvY2socik7CisgICAgQ2FsbEZyYW1lKiBj
YWxsRnJhbWUgPSBBUkdfY2FsbEZyYW1lOworICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gY2Fs
bEZyYW1lLT5jb2RlQmxvY2soKTsKIAogICAgIGlmICghY29kZUJsb2NrLT5jdGlDb2RlKQotICAg
ICAgICBDVEk6OmNvbXBpbGUoQVJHX2dsb2JhbERhdGEtPm1hY2hpbmUsIENhbGxGcmFtZTo6Y3Jl
YXRlKHIpLCBjb2RlQmxvY2spOworICAgICAgICBDVEk6OmNvbXBpbGUoQVJHX2dsb2JhbERhdGEt
Pm1hY2hpbmUsIGNhbGxGcmFtZSwgY29kZUJsb2NrKTsKIAogICAgIHJldHVybiBjb2RlQmxvY2st
PmN0aUNvZGU7CiB9CiAKIHZvaWQgTWFjaGluZTo6Y3RpX29wX3B1c2hfYWN0aXZhdGlvbihDVElf
QVJHUykKIHsKLSAgICBFeGVjU3RhdGUqIGV4ZWMgPSBBUkdfZXhlYzsKLSAgICBSZWdpc3Rlciog
ciA9IEFSR19yOwotICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gTWFjaGluZTo6Y29kZUJsb2Nr
KHIpOwotICAgIFNjb3BlQ2hhaW5Ob2RlKiBzY29wZUNoYWluID0gTWFjaGluZTo6c2NvcGVDaGFp
bihyKTsKLQotICAgIEpTQWN0aXZhdGlvbiogYWN0aXZhdGlvbiA9IG5ldyAoQVJHX2dsb2JhbERh
dGEpIEpTQWN0aXZhdGlvbihleGVjLCBzdGF0aWNfY2FzdDxGdW5jdGlvbkJvZHlOb2RlKj4oY29k
ZUJsb2NrLT5vd25lck5vZGUpLCByKTsKLSAgICByW1JlZ2lzdGVyRmlsZTo6T3B0aW9uYWxDYWxs
ZWVBY3RpdmF0aW9uXSA9IGFjdGl2YXRpb247Ci0gICAgcltSZWdpc3RlckZpbGU6OlNjb3BlQ2hh
aW5dID0gc2NvcGVDaGFpbi0+Y29weSgpLT5wdXNoKGFjdGl2YXRpb24pOworICAgIENhbGxGcmFt
ZSogY2FsbEZyYW1lID0gQVJHX2NhbGxGcmFtZTsKKyAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9
IGNhbGxGcmFtZS0+Y29kZUJsb2NrKCk7CisgICAgU2NvcGVDaGFpbk5vZGUqIHNjb3BlQ2hhaW4g
PSBjYWxsRnJhbWUtPnNjb3BlQ2hhaW4oKTsKKworICAgIEpTQWN0aXZhdGlvbiogYWN0aXZhdGlv
biA9IG5ldyAoQVJHX2dsb2JhbERhdGEpIEpTQWN0aXZhdGlvbihjYWxsRnJhbWUsIHN0YXRpY19j
YXN0PEZ1bmN0aW9uQm9keU5vZGUqPihjb2RlQmxvY2stPm93bmVyTm9kZSkpOworICAgIGNhbGxG
cmFtZS0+c2V0Q2FsbGVlQWN0aXZhdGlvbihhY3RpdmF0aW9uKTsKKyAgICBjYWxsRnJhbWUtPnNl
dFNjb3BlQ2hhaW4oc2NvcGVDaGFpbi0+Y29weSgpLT5wdXNoKGFjdGl2YXRpb24pKTsKIH0KIAog
SlNWYWx1ZSogTWFjaGluZTo6Y3RpX29wX2NhbGxfTm90SlNGdW5jdGlvbihDVElfQVJHUykKQEAg
LTQ2MjQsOTcgKzQ1NzksNzggQEAgSlNWYWx1ZSogTWFjaGluZTo6Y3RpX29wX2NhbGxfTm90SlNG
dW5jdAogICAgIGlmIChjYWxsVHlwZSA9PSBDYWxsVHlwZUhvc3QpIHsKICAgICAgICAgaW50IHJl
Z2lzdGVyT2Zmc2V0ID0gQVJHX2ludDI7CiAgICAgICAgIGludCBhcmdDb3VudCA9IEFSR19pbnQz
OwotICAgICAgICBSZWdpc3Rlciogc2F2ZWRSID0gQVJHX3I7Ci0gICAgICAgIFJlZ2lzdGVyKiBy
ID0gc2F2ZWRSICsgcmVnaXN0ZXJPZmZzZXQ7CisgICAgICAgIENhbGxGcmFtZSogcHJldmlvdXND
YWxsRnJhbWUgPSBBUkdfY2FsbEZyYW1lOworICAgICAgICBDYWxsRnJhbWUqIGNhbGxGcmFtZSA9
IENhbGxGcmFtZTo6Y3JlYXRlKHByZXZpb3VzQ2FsbEZyYW1lLT5yZWdpc3RlcnMoKSArIHJlZ2lz
dGVyT2Zmc2V0KTsKIAotICAgICAgICBpbml0aWFsaXplQ2FsbEZyYW1lKHIsIDAsIEFSR19pbnN0
cjQgKyAxLCBzY29wZUNoYWluKHNhdmVkUiksIHNhdmVkUiwgMCwgYXJnQ291bnQsIGZ1bmNWYWwp
OwotICAgICAgICBBUkdfc2V0UihyKTsKKyAgICAgICAgY2FsbEZyYW1lLT5pbml0KDAsIEFSR19p
bnN0cjQgKyAxLCBwcmV2aW91c0NhbGxGcmFtZS0+c2NvcGVDaGFpbigpLCBwcmV2aW91c0NhbGxG
cmFtZSwgMCwgYXJnQ291bnQsIHN0YXRpY19jYXN0PEpTRnVuY3Rpb24qPihmdW5jVmFsKSk7Cisg
ICAgICAgIEFSR19zZXRDYWxsRnJhbWUoY2FsbEZyYW1lKTsKIAogICAgICAgICBpZiAoKkFSR19w
cm9maWxlclJlZmVyZW5jZSkKLSAgICAgICAgICAgICgqQVJHX3Byb2ZpbGVyUmVmZXJlbmNlKS0+
d2lsbEV4ZWN1dGUoQ2FsbEZyYW1lOjpjcmVhdGUociksIHN0YXRpY19jYXN0PEpTT2JqZWN0Kj4o
ZnVuY1ZhbCkpOworICAgICAgICAgICAgKCpBUkdfcHJvZmlsZXJSZWZlcmVuY2UpLT53aWxsRXhl
Y3V0ZShjYWxsRnJhbWUsIHN0YXRpY19jYXN0PEpTRnVuY3Rpb24qPihmdW5jVmFsKSk7CiAKLSAg
ICAgICAgUmVnaXN0ZXIqIGFyZ3YgPSByIC0gUmVnaXN0ZXJGaWxlOjpDYWxsRnJhbWVIZWFkZXJT
aXplIC0gYXJnQ291bnQ7CisgICAgICAgIFJlZ2lzdGVyKiBhcmd2ID0gQVJHX2NhbGxGcmFtZS0+
cmVnaXN0ZXJzKCkgLSBSZWdpc3RlckZpbGU6OkNhbGxGcmFtZUhlYWRlclNpemUgLSBhcmdDb3Vu
dDsKICAgICAgICAgQXJnTGlzdCBhcmdMaXN0KGFyZ3YgKyAxLCBhcmdDb3VudCAtIDEpOwogCiAg
ICAgICAgIENUSV9NQUNISU5FX1NBTVBMSU5HX2NhbGxpbmdIb3N0RnVuY3Rpb24oKTsKIAotICAg
ICAgICBKU1ZhbHVlKiByZXR1cm5WYWx1ZSA9IGNhbGxEYXRhLm5hdGl2ZS5mdW5jdGlvbihDYWxs
RnJhbWU6OmNyZWF0ZShyKSwgc3RhdGljX2Nhc3Q8SlNPYmplY3QqPihmdW5jVmFsKSwgYXJndlsw
XS5qc1ZhbHVlKENhbGxGcmFtZTo6Y3JlYXRlKHIpKSwgYXJnTGlzdCk7Ci0gICAgICAgIEFSR19z
ZXRSKHNhdmVkUik7CisgICAgICAgIEpTVmFsdWUqIHJldHVyblZhbHVlID0gY2FsbERhdGEubmF0
aXZlLmZ1bmN0aW9uKGNhbGxGcmFtZSwgc3RhdGljX2Nhc3Q8SlNGdW5jdGlvbio+KGZ1bmNWYWwp
LCBhcmd2WzBdLmpzVmFsdWUoY2FsbEZyYW1lKSwgYXJnTGlzdCk7CisgICAgICAgIEFSR19zZXRD
YWxsRnJhbWUocHJldmlvdXNDYWxsRnJhbWUpOwogICAgICAgICBWTV9DSEVDS19FWENFUFRJT04o
KTsKIAogICAgICAgICBpZiAoKkFSR19wcm9maWxlclJlZmVyZW5jZSkKLSAgICAgICAgICAgICgq
QVJHX3Byb2ZpbGVyUmVmZXJlbmNlKS0+ZGlkRXhlY3V0ZShDYWxsRnJhbWU6OmNyZWF0ZShzYXZl
ZFIpLCBzdGF0aWNfY2FzdDxKU09iamVjdCo+KGZ1bmNWYWwpKTsKKyAgICAgICAgICAgICgqQVJH
X3Byb2ZpbGVyUmVmZXJlbmNlKS0+ZGlkRXhlY3V0ZShwcmV2aW91c0NhbGxGcmFtZSwgc3RhdGlj
X2Nhc3Q8SlNGdW5jdGlvbio+KGZ1bmNWYWwpKTsKIAogICAgICAgICByZXR1cm4gcmV0dXJuVmFs
dWU7CiAgICAgfQogCiAgICAgQVNTRVJUKGNhbGxUeXBlID09IENhbGxUeXBlTm9uZSk7CiAKLSAg
ICBBUkdfZ2xvYmFsRGF0YS0+ZXhjZXB0aW9uID0gY3JlYXRlTm90QUZ1bmN0aW9uRXJyb3IoQ2Fs
bEZyYW1lOjpjcmVhdGUoQVJHX3IpLCBmdW5jVmFsLCBBUkdfaW5zdHI0LCBjb2RlQmxvY2soQVJH
X3IpKTsKKyAgICBBUkdfZ2xvYmFsRGF0YS0+ZXhjZXB0aW9uID0gY3JlYXRlTm90QUZ1bmN0aW9u
RXJyb3IoQVJHX2NhbGxGcmFtZSwgZnVuY1ZhbCwgQVJHX2luc3RyNCwgQVJHX2NhbGxGcmFtZS0+
Y29kZUJsb2NrKCkpOwogICAgIFZNX1RIUk9XX0VYQ0VQVElPTigpOwogfQogCiB2b2lkIE1hY2hp
bmU6OmN0aV9vcF9jcmVhdGVfYXJndW1lbnRzKENUSV9BUkdTKQogewotICAgIEV4ZWNTdGF0ZSog
ZXhlYyA9IEFSR19leGVjOwotICAgIFJlZ2lzdGVyKiByID0gQVJHX3I7Ci0KLSAgICBBcmd1bWVu
dHMqIGFyZ3VtZW50cyA9IG5ldyAoQVJHX2dsb2JhbERhdGEpIEFyZ3VtZW50cyhleGVjLCByKTsK
LSAgICByW1JlZ2lzdGVyRmlsZTo6T3B0aW9uYWxDYWxsZWVBcmd1bWVudHNdID0gYXJndW1lbnRz
OwotICAgIHJbUmVnaXN0ZXJGaWxlOjpBcmd1bWVudHNSZWdpc3Rlcl0gPSBhcmd1bWVudHM7Cisg
ICAgQXJndW1lbnRzKiBhcmd1bWVudHMgPSBuZXcgKEFSR19nbG9iYWxEYXRhKSBBcmd1bWVudHMo
QVJHX2NhbGxGcmFtZSk7CisgICAgQVJHX2NhbGxGcmFtZS0+c2V0Q2FsbGVlQXJndW1lbnRzKGFy
Z3VtZW50cyk7CisgICAgQVJHX2NhbGxGcmFtZS0+cmVnaXN0ZXJzKClbUmVnaXN0ZXJGaWxlOjpB
cmd1bWVudHNSZWdpc3Rlcl0gPSBhcmd1bWVudHM7CiB9CiAKIHZvaWQgTWFjaGluZTo6Y3RpX29w
X3RlYXJfb2ZmX2FjdGl2YXRpb24oQ1RJX0FSR1MpCiB7Ci0gICAgUmVnaXN0ZXIqIHIgPSBBUkdf
cjsKKyAgICBBU1NFUlQoQVJHX2NhbGxGcmFtZS0+Y29kZUJsb2NrKCktPm5lZWRzRnVsbFNjb3Bl
Q2hhaW4pOwogCi0gICAgSlNBY3RpdmF0aW9uKiBhY3RpdmF0aW9uID0gc3RhdGljX2Nhc3Q8SlNB
Y3RpdmF0aW9uKj4ocltSZWdpc3RlckZpbGU6Ok9wdGlvbmFsQ2FsbGVlQWN0aXZhdGlvbl0uZ2V0
SlNWYWx1ZSgpKTsKLSAgICBBU1NFUlQoY29kZUJsb2NrKHIpLT5uZWVkc0Z1bGxTY29wZUNoYWlu
KTsKLSAgICBBU1NFUlQoYWN0aXZhdGlvbi0+aXNPYmplY3QoJkpTQWN0aXZhdGlvbjo6aW5mbykp
OwotCi0gICAgQXJndW1lbnRzKiBhcmd1bWVudHMgPSBzdGF0aWNfY2FzdDxBcmd1bWVudHMqPihy
W1JlZ2lzdGVyRmlsZTo6T3B0aW9uYWxDYWxsZWVBcmd1bWVudHNdLmdldEpTVmFsdWUoKSk7Ci0g
ICAgQVNTRVJUKCFhcmd1bWVudHMgfHwgYXJndW1lbnRzLT5pc09iamVjdCgmQXJndW1lbnRzOjpp
bmZvKSk7Ci0gICAgYWN0aXZhdGlvbi0+Y29weVJlZ2lzdGVycyhhcmd1bWVudHMpOworICAgIEFS
R19jYWxsRnJhbWUtPm9wdGlvbmFsQ2FsbGVlQWN0aXZhdGlvbigpLT5jb3B5UmVnaXN0ZXJzKEFS
R19jYWxsRnJhbWUtPm9wdGlvbmFsQ2FsbGVlQXJndW1lbnRzKCkpOwogfQogCiB2b2lkIE1hY2hp
bmU6OmN0aV9vcF90ZWFyX29mZl9hcmd1bWVudHMoQ1RJX0FSR1MpCiB7Ci0gICAgUmVnaXN0ZXIq
IHIgPSBBUkdfcjsKLQotICAgIEFyZ3VtZW50cyogYXJndW1lbnRzID0gc3RhdGljX2Nhc3Q8QXJn
dW1lbnRzKj4ocltSZWdpc3RlckZpbGU6Ok9wdGlvbmFsQ2FsbGVlQXJndW1lbnRzXS5nZXRKU1Zh
bHVlKCkpOwotICAgIEFTU0VSVChjb2RlQmxvY2sociktPnVzZXNBcmd1bWVudHMgJiYgIWNvZGVC
bG9jayhyKS0+bmVlZHNGdWxsU2NvcGVDaGFpbik7Ci0gICAgQVNTRVJUKGFyZ3VtZW50cy0+aXNP
YmplY3QoJkFyZ3VtZW50czo6aW5mbykpOwotCi0gICAgYXJndW1lbnRzLT5jb3B5UmVnaXN0ZXJz
KCk7CisgICAgQVNTRVJUKEFSR19jYWxsRnJhbWUtPmNvZGVCbG9jaygpLT51c2VzQXJndW1lbnRz
ICYmICFBUkdfY2FsbEZyYW1lLT5jb2RlQmxvY2soKS0+bmVlZHNGdWxsU2NvcGVDaGFpbik7Cisg
ICAgQVJHX2NhbGxGcmFtZS0+b3B0aW9uYWxDYWxsZWVBcmd1bWVudHMoKS0+Y29weVJlZ2lzdGVy
cygpOwogfQogCiB2b2lkIE1hY2hpbmU6OmN0aV9vcF9yZXRfcHJvZmlsZXIoQ1RJX0FSR1MpCiB7
Ci0gICAgRXhlY1N0YXRlKiBleGVjID0gQVJHX2V4ZWM7Ci0KLSAgICBSZWdpc3RlciogciA9IEFS
R19yOwogICAgIEFTU0VSVCgqQVJHX3Byb2ZpbGVyUmVmZXJlbmNlKTsKLSAgICAoKkFSR19wcm9m
aWxlclJlZmVyZW5jZSktPmRpZEV4ZWN1dGUoZXhlYywgc3RhdGljX2Nhc3Q8SlNPYmplY3QqPihy
W1JlZ2lzdGVyRmlsZTo6Q2FsbGVlXS5qc1ZhbHVlKGV4ZWMpKSk7CisgICAgKCpBUkdfcHJvZmls
ZXJSZWZlcmVuY2UpLT5kaWRFeGVjdXRlKEFSR19jYWxsRnJhbWUsIEFSR19jYWxsRnJhbWUtPmNh
bGxlZSgpKTsKIH0KIAogdm9pZCBNYWNoaW5lOjpjdGlfb3BfcmV0X3Njb3BlQ2hhaW4oQ1RJX0FS
R1MpCiB7Ci0gICAgUmVnaXN0ZXIqIHIgPSBBUkdfcjsKLSAgICBBU1NFUlQoY29kZUJsb2NrKHIp
LT5uZWVkc0Z1bGxTY29wZUNoYWluKTsKLSAgICBzY29wZUNoYWluKHIpLT5kZXJlZigpOworICAg
IEFTU0VSVChBUkdfY2FsbEZyYW1lLT5jb2RlQmxvY2soKS0+bmVlZHNGdWxsU2NvcGVDaGFpbik7
CisgICAgQVJHX2NhbGxGcmFtZS0+c2NvcGVDaGFpbigpLT5kZXJlZigpOwogfQogCiBKU1ZhbHVl
KiBNYWNoaW5lOjpjdGlfb3BfbmV3X2FycmF5KENUSV9BUkdTKQogewotICAgIEFyZ0xpc3QgYXJn
c0xpc3QoQVJHX3JlZ2lzdGVyczEsIEFSR19pbnQyKTsKLSAgICByZXR1cm4gY29uc3RydWN0QXJy
YXkoQVJHX2V4ZWMsIGFyZ3NMaXN0KTsKKyAgICBBcmdMaXN0IGFyZ0xpc3QoQVJHX3JlZ2lzdGVy
czEsIEFSR19pbnQyKTsKKyAgICByZXR1cm4gY29uc3RydWN0QXJyYXkoQVJHX2NhbGxGcmFtZSwg
YXJnTGlzdCk7CiB9CiAKIEpTVmFsdWUqIE1hY2hpbmU6OmN0aV9vcF9yZXNvbHZlKENUSV9BUkdT
KQogewotICAgIEV4ZWNTdGF0ZSogZXhlYyA9IEFSR19leGVjOwotICAgIFJlZ2lzdGVyKiByID0g
QVJHX3I7Ci0gICAgU2NvcGVDaGFpbk5vZGUqIHNjb3BlQ2hhaW4gPSBNYWNoaW5lOjpzY29wZUNo
YWluKHIpOworICAgIENhbGxGcmFtZSogY2FsbEZyYW1lID0gQVJHX2NhbGxGcmFtZTsKKyAgICBT
Y29wZUNoYWluTm9kZSogc2NvcGVDaGFpbiA9IGNhbGxGcmFtZS0+c2NvcGVDaGFpbigpOwogCiAg
ICAgU2NvcGVDaGFpbkl0ZXJhdG9yIGl0ZXIgPSBzY29wZUNoYWluLT5iZWdpbigpOwogICAgIFNj
b3BlQ2hhaW5JdGVyYXRvciBlbmQgPSBzY29wZUNoYWluLT5lbmQoKTsKQEAgLTQ3MjQsMjQgKzQ2
NjAsMjQgQEAgSlNWYWx1ZSogTWFjaGluZTo6Y3RpX29wX3Jlc29sdmUoQ1RJX0FSRwogICAgIGRv
IHsKICAgICAgICAgSlNPYmplY3QqIG8gPSAqaXRlcjsKICAgICAgICAgUHJvcGVydHlTbG90IHNs
b3Qobyk7Ci0gICAgICAgIGlmIChvLT5nZXRQcm9wZXJ0eVNsb3QoZXhlYywgaWRlbnQsIHNsb3Qp
KSB7Ci0gICAgICAgICAgICBKU1ZhbHVlKiByZXN1bHQgPSBzbG90LmdldFZhbHVlKGV4ZWMsIGlk
ZW50KTsKKyAgICAgICAgaWYgKG8tPmdldFByb3BlcnR5U2xvdChjYWxsRnJhbWUsIGlkZW50LCBz
bG90KSkgeworICAgICAgICAgICAgSlNWYWx1ZSogcmVzdWx0ID0gc2xvdC5nZXRWYWx1ZShjYWxs
RnJhbWUsIGlkZW50KTsKICAgICAgICAgICAgIFZNX0NIRUNLX0VYQ0VQVElPTl9BVF9FTkQoKTsK
ICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgICAgIH0KICAgICB9IHdoaWxlICgrK2l0
ZXIgIT0gZW5kKTsKIAotICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gTWFjaGluZTo6Y29kZUJs
b2NrKHIpOworICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gY2FsbEZyYW1lLT5jb2RlQmxvY2so
KTsKICAgICBBU1NFUlQoY29kZUJsb2NrLT5jdGlSZXR1cm5BZGRyZXNzVlBDTWFwLmNvbnRhaW5z
KENUSV9SRVRVUk5fQUREUkVTUykpOwogICAgIHVuc2lnbmVkIHZQQ0luZGV4ID0gY29kZUJsb2Nr
LT5jdGlSZXR1cm5BZGRyZXNzVlBDTWFwLmdldChDVElfUkVUVVJOX0FERFJFU1MpOwotICAgIGV4
ZWMtPnNldEV4Y2VwdGlvbihjcmVhdGVVbmRlZmluZWRWYXJpYWJsZUVycm9yKGV4ZWMsIGlkZW50
LCBjb2RlQmxvY2stPmluc3RydWN0aW9ucy5iZWdpbigpICsgdlBDSW5kZXgsIGNvZGVCbG9jaykp
OworICAgIGNhbGxGcmFtZS0+c2V0RXhjZXB0aW9uKGNyZWF0ZVVuZGVmaW5lZFZhcmlhYmxlRXJy
b3IoY2FsbEZyYW1lLCBpZGVudCwgY29kZUJsb2NrLT5pbnN0cnVjdGlvbnMuYmVnaW4oKSArIHZQ
Q0luZGV4LCBjb2RlQmxvY2spKTsKICAgICBWTV9USFJPV19FWENFUFRJT04oKTsKIH0KIAogdm9p
ZCogTWFjaGluZTo6Y3RpX29wX2NvbnN0cnVjdF9KU0NvbnN0cnVjdChDVElfQVJHUykKIHsKICAg
ICBSZWdpc3RlckZpbGUqIHJlZ2lzdGVyRmlsZSA9IEFSR19yZWdpc3RlckZpbGU7Ci0gICAgUmVn
aXN0ZXIqIHIgPSBBUkdfcjsKKyAgICBDYWxsRnJhbWUqIGNhbGxGcmFtZSA9IEFSR19jYWxsRnJh
bWU7CiAKICAgICBKU1ZhbHVlKiBjb25zdHJWYWwgPSBBUkdfc3JjMTsKICAgICBKU1ZhbHVlKiBj
b25zdHJQcm90b1ZhbCA9IEFSR19zcmMyOwpAQCAtNDc1Nyw3ICs0NjkzLDcgQEAgdm9pZCogTWFj
aGluZTo6Y3RpX29wX2NvbnN0cnVjdF9KU0NvbnN0cgogICAgIEpTRnVuY3Rpb24qIGNvbnN0cnVj
dG9yID0gc3RhdGljX2Nhc3Q8SlNGdW5jdGlvbio+KGNvbnN0clZhbCk7CiAKICAgICBpZiAoKkFS
R19wcm9maWxlclJlZmVyZW5jZSkKLSAgICAgICAgKCpBUkdfcHJvZmlsZXJSZWZlcmVuY2UpLT53
aWxsRXhlY3V0ZShDYWxsRnJhbWU6OmNyZWF0ZShyKSwgY29uc3RydWN0b3IpOworICAgICAgICAo
KkFSR19wcm9maWxlclJlZmVyZW5jZSktPndpbGxFeGVjdXRlKGNhbGxGcmFtZSwgY29uc3RydWN0
b3IpOwogCiAgICAgU2NvcGVDaGFpbk5vZGUqIGNhbGxEYXRhU2NvcGVDaGFpbiA9IGNvbnN0cnVj
dG9yLT5tX3Njb3BlQ2hhaW4ubm9kZSgpOwogICAgIEZ1bmN0aW9uQm9keU5vZGUqIGZ1bmN0aW9u
Qm9keU5vZGUgPSBjb25zdHJ1Y3Rvci0+bV9ib2R5LmdldCgpOwpAQCAtNDc3MCwzMiArNDcwNiwz
MSBAQCB2b2lkKiBNYWNoaW5lOjpjdGlfb3BfY29uc3RydWN0X0pTQ29uc3RyCiAgICAgICAgIHN0
cnVjdHVyZSA9IGNhbGxEYXRhU2NvcGVDaGFpbi0+Z2xvYmFsT2JqZWN0KCktPmVtcHR5T2JqZWN0
U3RydWN0dXJlKCk7CiAgICAgSlNPYmplY3QqIG5ld09iamVjdCA9IG5ldyAoQVJHX2dsb2JhbERh
dGEpIEpTT2JqZWN0KHN0cnVjdHVyZSk7CiAKLSAgICByW2ZpcnN0QXJnXSA9IG5ld09iamVjdDsg
Ly8gInRoaXMiIHZhbHVlCisgICAgY2FsbEZyYW1lLT5yZWdpc3RlcnMoKVtmaXJzdEFyZ10gPSBu
ZXdPYmplY3Q7IC8vICJ0aGlzIiB2YWx1ZQogCi0gICAgciA9IHNsaWRlUmVnaXN0ZXJXaW5kb3dG
b3JDYWxsKG5ld0NvZGVCbG9jaywgcmVnaXN0ZXJGaWxlLCByLCByZWdpc3Rlck9mZnNldCwgYXJn
Q291bnQpOwotICAgIGlmIChVTkxJS0VMWSghcikpIHsKLSAgICAgICAgQVJHX2dsb2JhbERhdGEt
PmV4Y2VwdGlvbiA9IGNyZWF0ZVN0YWNrT3ZlcmZsb3dFcnJvcihDYWxsRnJhbWU6OmNyZWF0ZShB
UkdfcikpOworICAgIGNhbGxGcmFtZSA9IHNsaWRlUmVnaXN0ZXJXaW5kb3dGb3JDYWxsKG5ld0Nv
ZGVCbG9jaywgcmVnaXN0ZXJGaWxlLCBjYWxsRnJhbWUsIHJlZ2lzdGVyT2Zmc2V0LCBhcmdDb3Vu
dCk7CisgICAgaWYgKFVOTElLRUxZKCFjYWxsRnJhbWUpKSB7CisgICAgICAgIEFSR19nbG9iYWxE
YXRhLT5leGNlcHRpb24gPSBjcmVhdGVTdGFja092ZXJmbG93RXJyb3IoQVJHX2NhbGxGcmFtZSk7
CiAgICAgICAgIFZNX1RIUk9XX0VYQ0VQVElPTigpOwogICAgIH0KIAotICAgIHJbUmVnaXN0ZXJG
aWxlOjpDb2RlQmxvY2tdID0gbmV3Q29kZUJsb2NrOwotICAgIHJbUmVnaXN0ZXJGaWxlOjpTY29w
ZUNoYWluXSA9IGNhbGxEYXRhU2NvcGVDaGFpbjsKLSAgICByW1JlZ2lzdGVyRmlsZTo6Q2FsbGVy
UmVnaXN0ZXJzXSA9IEFSR19yOworICAgIGNhbGxGcmFtZS0+c2V0Q29kZUJsb2NrKG5ld0NvZGVC
bG9jayk7CisgICAgY2FsbEZyYW1lLT5zZXRTY29wZUNoYWluKGNhbGxEYXRhU2NvcGVDaGFpbik7
CisgICAgY2FsbEZyYW1lLT5zZXRDYWxsZXJGcmFtZShBUkdfY2FsbEZyYW1lKTsKICAgICAvLyBS
ZWdpc3RlckZpbGU6OlJldHVyblBDIGlzIHNldCBieSBjYWxsZWUKICAgICAvLyBSZWdpc3RlckZp
bGU6OlJldHVyblZhbHVlUmVnaXN0ZXIgaXMgc2V0IGJ5IGNhbGxlcgotICAgIHJbUmVnaXN0ZXJG
aWxlOjpBcmd1bWVudENvdW50XSA9IGFyZ0NvdW50OyAvLyBvcmlnaW5hbCBhcmd1bWVudCBjb3Vu
dCAoZm9yIHRoZSBzYWtlIG9mIHRoZSAiYXJndW1lbnRzIiBvYmplY3QpCi0gICAgcltSZWdpc3Rl
ckZpbGU6OkNhbGxlZV0gPSBjb25zdHJ1Y3RvcjsKLSAgICByW1JlZ2lzdGVyRmlsZTo6T3B0aW9u
YWxDYWxsZWVBY3RpdmF0aW9uXSA9IG51bGxKU1ZhbHVlOwotICAgIHJbUmVnaXN0ZXJGaWxlOjpP
cHRpb25hbENhbGxlZUFyZ3VtZW50c10gPSBudWxsSlNWYWx1ZTsKKyAgICBjYWxsRnJhbWUtPnNl
dEFyZ3VtZW50Q291bnQoYXJnQ291bnQpOyAvLyBvcmlnaW5hbCBhcmd1bWVudCBjb3VudCAoZm9y
IHRoZSBzYWtlIG9mIHRoZSAiYXJndW1lbnRzIiBvYmplY3QpCisgICAgY2FsbEZyYW1lLT5zZXRD
YWxsZWUoY29uc3RydWN0b3IpOworICAgIGNhbGxGcmFtZS0+c2V0Q2FsbGVlQWN0aXZhdGlvbigw
KTsKKyAgICBjYWxsRnJhbWUtPnNldENhbGxlZUFyZ3VtZW50cygwKTsKIAotICAgIEFSR19zZXRS
KHIpOworICAgIEFSR19zZXRDYWxsRnJhbWUoY2FsbEZyYW1lKTsKICAgICByZXR1cm4gbmV3Q29k
ZUJsb2NrLT5jdGlDb2RlOwogfQogCiBKU1ZhbHVlKiBNYWNoaW5lOjpjdGlfb3BfY29uc3RydWN0
X05vdEpTQ29uc3RydWN0KENUSV9BUkdTKQogewotICAgIEV4ZWNTdGF0ZSogZXhlYyA9IEFSR19l
eGVjOwotICAgIFJlZ2lzdGVyKiByID0gQVJHX3I7CisgICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUg
PSBBUkdfY2FsbEZyYW1lOwogCiAgICAgSlNWYWx1ZSogY29uc3RyVmFsID0gQVJHX3NyYzE7CiAg
ICAgaW50IGZpcnN0QXJnID0gQVJHX2ludDM7CkBAIC00ODA4LDMwICs0NzQzLDMwIEBAIEpTVmFs
dWUqIE1hY2hpbmU6OmN0aV9vcF9jb25zdHJ1Y3RfTm90SlMKIAogICAgIGlmIChjb25zdHJ1Y3RU
eXBlID09IENvbnN0cnVjdFR5cGVIb3N0KSB7CiAgICAgICAgIGlmICgqQVJHX3Byb2ZpbGVyUmVm
ZXJlbmNlKQotICAgICAgICAgICAgKCpBUkdfcHJvZmlsZXJSZWZlcmVuY2UpLT53aWxsRXhlY3V0
ZShleGVjLCBjb25zdHJ1Y3Rvcik7CisgICAgICAgICAgICAoKkFSR19wcm9maWxlclJlZmVyZW5j
ZSktPndpbGxFeGVjdXRlKGNhbGxGcmFtZSwgY29uc3RydWN0b3IpOwogCi0gICAgICAgIEFyZ0xp
c3QgYXJnTGlzdChyICsgZmlyc3RBcmcgKyAxLCBhcmdDb3VudCAtIDEpOworICAgICAgICBBcmdM
aXN0IGFyZ0xpc3QoY2FsbEZyYW1lLT5yZWdpc3RlcnMoKSArIGZpcnN0QXJnICsgMSwgYXJnQ291
bnQgLSAxKTsKIAogICAgICAgICBDVElfTUFDSElORV9TQU1QTElOR19jYWxsaW5nSG9zdEZ1bmN0
aW9uKCk7CiAKLSAgICAgICAgSlNWYWx1ZSogcmV0dXJuVmFsdWUgPSBjb25zdHJ1Y3REYXRhLm5h
dGl2ZS5mdW5jdGlvbihleGVjLCBjb25zdHJ1Y3RvciwgYXJnTGlzdCk7CisgICAgICAgIEpTVmFs
dWUqIHJldHVyblZhbHVlID0gY29uc3RydWN0RGF0YS5uYXRpdmUuZnVuY3Rpb24oY2FsbEZyYW1l
LCBjb25zdHJ1Y3RvciwgYXJnTGlzdCk7CiAgICAgICAgIFZNX0NIRUNLX0VYQ0VQVElPTigpOwog
CiAgICAgICAgIGlmICgqQVJHX3Byb2ZpbGVyUmVmZXJlbmNlKQotICAgICAgICAgICAgKCpBUkdf
cHJvZmlsZXJSZWZlcmVuY2UpLT5kaWRFeGVjdXRlKGV4ZWMsIGNvbnN0cnVjdG9yKTsKKyAgICAg
ICAgICAgICgqQVJHX3Byb2ZpbGVyUmVmZXJlbmNlKS0+ZGlkRXhlY3V0ZShjYWxsRnJhbWUsIGNv
bnN0cnVjdG9yKTsKIAogICAgICAgICByZXR1cm4gcmV0dXJuVmFsdWU7CiAgICAgfQogCiAgICAg
QVNTRVJUKGNvbnN0cnVjdFR5cGUgPT0gQ29uc3RydWN0VHlwZU5vbmUpOwogCi0gICAgZXhlYy0+
c2V0RXhjZXB0aW9uKGNyZWF0ZU5vdEFDb25zdHJ1Y3RvckVycm9yKGV4ZWMsIGNvbnN0clZhbCwg
QVJHX2luc3RyNiwgY29kZUJsb2NrKHIpKSk7CisgICAgY2FsbEZyYW1lLT5zZXRFeGNlcHRpb24o
Y3JlYXRlTm90QUNvbnN0cnVjdG9yRXJyb3IoY2FsbEZyYW1lLCBjb25zdHJWYWwsIEFSR19pbnN0
cjYsIGNhbGxGcmFtZS0+Y29kZUJsb2NrKCkpKTsKICAgICBWTV9USFJPV19FWENFUFRJT04oKTsK
IH0KIAogSlNWYWx1ZSogTWFjaGluZTo6Y3RpX29wX2dldF9ieV92YWwoQ1RJX0FSR1MpCiB7Ci0g
ICAgRXhlY1N0YXRlKiBleGVjID0gQVJHX2V4ZWM7CisgICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUg
PSBBUkdfY2FsbEZyYW1lOwogICAgIE1hY2hpbmUqIG1hY2hpbmUgPSBBUkdfZ2xvYmFsRGF0YS0+
bWFjaGluZTsKIAogICAgIEpTVmFsdWUqIGJhc2VWYWx1ZSA9IEFSR19zcmMxOwpAQCAtNDg0Nywx
NCArNDc4MiwxNCBAQCBKU1ZhbHVlKiBNYWNoaW5lOjpjdGlfb3BfZ2V0X2J5X3ZhbChDVElfCiAg
ICAgICAgICAgICBpZiAoanNBcnJheS0+Y2FuR2V0SW5kZXgoaSkpCiAgICAgICAgICAgICAgICAg
cmVzdWx0ID0ganNBcnJheS0+Z2V0SW5kZXgoaSk7CiAgICAgICAgICAgICBlbHNlCi0gICAgICAg
ICAgICAgICAgcmVzdWx0ID0ganNBcnJheS0+SlNBcnJheTo6Z2V0KGV4ZWMsIGkpOworICAgICAg
ICAgICAgICAgIHJlc3VsdCA9IGpzQXJyYXktPkpTQXJyYXk6OmdldChjYWxsRnJhbWUsIGkpOwog
ICAgICAgICB9IGVsc2UgaWYgKG1hY2hpbmUtPmlzSlNTdHJpbmcoYmFzZVZhbHVlKSAmJiBzdGF0
aWNfY2FzdDxKU1N0cmluZyo+KGJhc2VWYWx1ZSktPmNhbkdldEluZGV4KGkpKQogICAgICAgICAg
ICAgcmVzdWx0ID0gc3RhdGljX2Nhc3Q8SlNTdHJpbmcqPihiYXNlVmFsdWUpLT5nZXRJbmRleChB
UkdfZ2xvYmFsRGF0YSwgaSk7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHJlc3VsdCA9IGJh
c2VWYWx1ZS0+Z2V0KGV4ZWMsIGkpOworICAgICAgICAgICAgcmVzdWx0ID0gYmFzZVZhbHVlLT5n
ZXQoY2FsbEZyYW1lLCBpKTsKICAgICB9IGVsc2UgewotICAgICAgICBJZGVudGlmaWVyIHByb3Bl
cnR5KGV4ZWMsIHN1YnNjcmlwdC0+dG9TdHJpbmcoZXhlYykpOwotICAgICAgICByZXN1bHQgPSBi
YXNlVmFsdWUtPmdldChleGVjLCBwcm9wZXJ0eSk7CisgICAgICAgIElkZW50aWZpZXIgcHJvcGVy
dHkoY2FsbEZyYW1lLCBzdWJzY3JpcHQtPnRvU3RyaW5nKGNhbGxGcmFtZSkpOworICAgICAgICBy
ZXN1bHQgPSBiYXNlVmFsdWUtPmdldChjYWxsRnJhbWUsIHByb3BlcnR5KTsKICAgICB9CiAKICAg
ICBWTV9DSEVDS19FWENFUFRJT05fQVRfRU5EKCk7CkBAIC00ODYzLDkgKzQ3OTgsOCBAQCBKU1Zh
bHVlKiBNYWNoaW5lOjpjdGlfb3BfZ2V0X2J5X3ZhbChDVElfCiAKIEpTVmFsdWUqIE1hY2hpbmU6
OmN0aV9vcF9yZXNvbHZlX2Z1bmMoQ1RJX0FSR1MpCiB7Ci0gICAgRXhlY1N0YXRlKiBleGVjID0g
QVJHX2V4ZWM7Ci0gICAgUmVnaXN0ZXIqIHIgPSBBUkdfcjsKLSAgICBTY29wZUNoYWluTm9kZSog
c2NvcGVDaGFpbiA9IE1hY2hpbmU6OnNjb3BlQ2hhaW4ocik7CisgICAgQ2FsbEZyYW1lKiBjYWxs
RnJhbWUgPSBBUkdfY2FsbEZyYW1lOworICAgIFNjb3BlQ2hhaW5Ob2RlKiBzY29wZUNoYWluID0g
Y2FsbEZyYW1lLT5zY29wZUNoYWluKCk7CiAKICAgICBTY29wZUNoYWluSXRlcmF0b3IgaXRlciA9
IHNjb3BlQ2hhaW4tPmJlZ2luKCk7CiAgICAgU2NvcGVDaGFpbkl0ZXJhdG9yIGVuZCA9IHNjb3Bl
Q2hhaW4tPmVuZCgpOwpAQCAtNDg3OSw3ICs0ODEzLDcgQEAgSlNWYWx1ZSogTWFjaGluZTo6Y3Rp
X29wX3Jlc29sdmVfZnVuYyhDVAogICAgIGRvIHsKICAgICAgICAgYmFzZSA9ICppdGVyOwogICAg
ICAgICBQcm9wZXJ0eVNsb3Qgc2xvdChiYXNlKTsKLSAgICAgICAgaWYgKGJhc2UtPmdldFByb3Bl
cnR5U2xvdChleGVjLCBpZGVudCwgc2xvdCkpIHsgICAgICAgICAgICAKKyAgICAgICAgaWYgKGJh
c2UtPmdldFByb3BlcnR5U2xvdChjYWxsRnJhbWUsIGlkZW50LCBzbG90KSkgeyAgICAgICAgICAg
IAogICAgICAgICAgICAgLy8gRUNNQSAxMS4yLjMgc2F5cyB0aGF0IGlmIHdlIGhpdCBhbiBhY3Rp
dmF0aW9uIHRoZSB0aGlzIHZhbHVlIHNob3VsZCBiZSBudWxsLgogICAgICAgICAgICAgLy8gSG93
ZXZlciwgc2VjdGlvbiAxMC4yLjMgc2F5cyB0aGF0IGluIHRoZSBjYXNlIHdoZXJlIHRoZSB2YWx1
ZSBwcm92aWRlZAogICAgICAgICAgICAgLy8gYnkgdGhlIGNhbGxlciBpcyBudWxsLCB0aGUgZ2xv
YmFsIG9iamVjdCBzaG91bGQgYmUgdXNlZC4gSXQgYWxzbyBzYXlzCkBAIC00ODg3LDggKzQ4MjEs
OCBAQCBKU1ZhbHVlKiBNYWNoaW5lOjpjdGlfb3BfcmVzb2x2ZV9mdW5jKENUCiAgICAgICAgICAg
ICAvLyBvZiBpbXBsZW1lbnRhdGlvbiB3ZSB1c2UgdGhlIGdsb2JhbCBvYmplY3QgYW55d2F5IGhl
cmUuIFRoaXMgZ3VhcmFudGVlcwogICAgICAgICAgICAgLy8gdGhhdCBpbiBob3N0IG9iamVjdHMg
eW91IGFsd2F5cyBnZXQgYSB2YWxpZCBvYmplY3QgZm9yIHRoaXMuCiAgICAgICAgICAgICAvLyBX
ZSBhbHNvIGhhbmRsZSB3cmFwcGVyIHN1YnN0aXR1dGlvbiBmb3IgdGhlIGdsb2JhbCBvYmplY3Qg
YXQgdGhlIHNhbWUgdGltZS4KLSAgICAgICAgICAgIEpTT2JqZWN0KiB0aGlzT2JqID0gYmFzZS0+
dG9UaGlzT2JqZWN0KGV4ZWMpOwotICAgICAgICAgICAgSlNWYWx1ZSogcmVzdWx0ID0gc2xvdC5n
ZXRWYWx1ZShleGVjLCBpZGVudCk7CisgICAgICAgICAgICBKU09iamVjdCogdGhpc09iaiA9IGJh
c2UtPnRvVGhpc09iamVjdChjYWxsRnJhbWUpOworICAgICAgICAgICAgSlNWYWx1ZSogcmVzdWx0
ID0gc2xvdC5nZXRWYWx1ZShjYWxsRnJhbWUsIGlkZW50KTsKICAgICAgICAgICAgIFZNX0NIRUNL
X0VYQ0VQVElPTl9BVF9FTkQoKTsKIAogICAgICAgICAgICAgQVJHX3NldDJuZFJlc3VsdChyZXN1
bHQpOwpAQCAtNDg5NywxMCArNDgzMSwxMCBAQCBKU1ZhbHVlKiBNYWNoaW5lOjpjdGlfb3BfcmVz
b2x2ZV9mdW5jKENUCiAgICAgICAgICsraXRlcjsKICAgICB9IHdoaWxlIChpdGVyICE9IGVuZCk7
CiAKLSAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IE1hY2hpbmU6OmNvZGVCbG9jayhyKTsKKyAg
ICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IGNhbGxGcmFtZS0+Y29kZUJsb2NrKCk7CiAgICAgQVNT
RVJUKGNvZGVCbG9jay0+Y3RpUmV0dXJuQWRkcmVzc1ZQQ01hcC5jb250YWlucyhDVElfUkVUVVJO
X0FERFJFU1MpKTsKICAgICB1bnNpZ25lZCB2UENJbmRleCA9IGNvZGVCbG9jay0+Y3RpUmV0dXJu
QWRkcmVzc1ZQQ01hcC5nZXQoQ1RJX1JFVFVSTl9BRERSRVNTKTsKLSAgICBleGVjLT5zZXRFeGNl
cHRpb24oY3JlYXRlVW5kZWZpbmVkVmFyaWFibGVFcnJvcihleGVjLCBpZGVudCwgY29kZUJsb2Nr
LT5pbnN0cnVjdGlvbnMuYmVnaW4oKSArIHZQQ0luZGV4LCBjb2RlQmxvY2spKTsKKyAgICBjYWxs
RnJhbWUtPnNldEV4Y2VwdGlvbihjcmVhdGVVbmRlZmluZWRWYXJpYWJsZUVycm9yKGNhbGxGcmFt
ZSwgaWRlbnQsIGNvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zLmJlZ2luKCkgKyB2UENJbmRleCwgY29k
ZUJsb2NrKSk7CiAgICAgVk1fVEhST1dfRVhDRVBUSU9OKCk7CiB9CiAKQEAgLTQ5MTQsMTUgKzQ4
NDgsMTUgQEAgSlNWYWx1ZSogTWFjaGluZTo6Y3RpX29wX3N1YihDVElfQVJHUykKICAgICBpZiAo
ZmFzdElzTnVtYmVyKHNyYzEsIGxlZnQpICYmIGZhc3RJc051bWJlcihzcmMyLCByaWdodCkpCiAg
ICAgICAgIHJldHVybiBqc051bWJlcihBUkdfZ2xvYmFsRGF0YSwgbGVmdCAtIHJpZ2h0KTsKIAot
ICAgIEV4ZWNTdGF0ZSogZXhlYyA9IEFSR19leGVjOwotICAgIEpTVmFsdWUqIHJlc3VsdCA9IGpz
TnVtYmVyKEFSR19nbG9iYWxEYXRhLCBzcmMxLT50b051bWJlcihleGVjKSAtIHNyYzItPnRvTnVt
YmVyKGV4ZWMpKTsKKyAgICBDYWxsRnJhbWUqIGNhbGxGcmFtZSA9IEFSR19jYWxsRnJhbWU7Cisg
ICAgSlNWYWx1ZSogcmVzdWx0ID0ganNOdW1iZXIoQVJHX2dsb2JhbERhdGEsIHNyYzEtPnRvTnVt
YmVyKGNhbGxGcmFtZSkgLSBzcmMyLT50b051bWJlcihjYWxsRnJhbWUpKTsKICAgICBWTV9DSEVD
S19FWENFUFRJT05fQVRfRU5EKCk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAogdm9pZCBNYWNo
aW5lOjpjdGlfb3BfcHV0X2J5X3ZhbChDVElfQVJHUykKIHsKLSAgICBFeGVjU3RhdGUqIGV4ZWMg
PSBBUkdfZXhlYzsKKyAgICBDYWxsRnJhbWUqIGNhbGxGcmFtZSA9IEFSR19jYWxsRnJhbWU7CiAg
ICAgTWFjaGluZSogbWFjaGluZSA9IEFSR19nbG9iYWxEYXRhLT5tYWNoaW5lOwogCiAgICAgSlNW
YWx1ZSogYmFzZVZhbHVlID0gQVJHX3NyYzE7CkBAIC00OTM4LDE0ICs0ODcyLDE0IEBAIHZvaWQg
TWFjaGluZTo6Y3RpX29wX3B1dF9ieV92YWwoQ1RJX0FSR1MKICAgICAgICAgICAgIGlmIChqc0Fy
cmF5LT5jYW5TZXRJbmRleChpKSkKICAgICAgICAgICAgICAgICBqc0FycmF5LT5zZXRJbmRleChp
LCB2YWx1ZSk7CiAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAganNBcnJheS0+SlNB
cnJheTo6cHV0KGV4ZWMsIGksIHZhbHVlKTsKKyAgICAgICAgICAgICAgICBqc0FycmF5LT5KU0Fy
cmF5OjpwdXQoY2FsbEZyYW1lLCBpLCB2YWx1ZSk7CiAgICAgICAgIH0gZWxzZQotICAgICAgICAg
ICAgYmFzZVZhbHVlLT5wdXQoZXhlYywgaSwgdmFsdWUpOworICAgICAgICAgICAgYmFzZVZhbHVl
LT5wdXQoY2FsbEZyYW1lLCBpLCB2YWx1ZSk7CiAgICAgfSBlbHNlIHsKLSAgICAgICAgSWRlbnRp
ZmllciBwcm9wZXJ0eShleGVjLCBzdWJzY3JpcHQtPnRvU3RyaW5nKGV4ZWMpKTsKKyAgICAgICAg
SWRlbnRpZmllciBwcm9wZXJ0eShjYWxsRnJhbWUsIHN1YnNjcmlwdC0+dG9TdHJpbmcoY2FsbEZy
YW1lKSk7CiAgICAgICAgIGlmICghQVJHX2dsb2JhbERhdGEtPmV4Y2VwdGlvbikgeyAvLyBEb24n
dCBwdXQgdG8gYW4gb2JqZWN0IGlmIHRvU3RyaW5nIHRocmV3IGFuIGV4Y2VwdGlvbi4KICAgICAg
ICAgICAgIFB1dFByb3BlcnR5U2xvdCBzbG90OwotICAgICAgICAgICAgYmFzZVZhbHVlLT5wdXQo
ZXhlYywgcHJvcGVydHksIHZhbHVlLCBzbG90KTsKKyAgICAgICAgICAgIGJhc2VWYWx1ZS0+cHV0
KGNhbGxGcmFtZSwgcHJvcGVydHksIHZhbHVlLCBzbG90KTsKICAgICAgICAgfQogICAgIH0KIApA
QCAtNDk1NCw3ICs0ODg4LDcgQEAgdm9pZCBNYWNoaW5lOjpjdGlfb3BfcHV0X2J5X3ZhbChDVElf
QVJHUwogCiB2b2lkIE1hY2hpbmU6OmN0aV9vcF9wdXRfYnlfdmFsX2FycmF5KENUSV9BUkdTKQog
ewotICAgIEV4ZWNTdGF0ZSogZXhlYyA9IEFSR19leGVjOworICAgIENhbGxGcmFtZSogY2FsbEZy
YW1lID0gQVJHX2NhbGxGcmFtZTsKIAogICAgIEpTVmFsdWUqIGJhc2VWYWx1ZSA9IEFSR19zcmMx
OwogICAgIGludCBpID0gQVJHX2ludDI7CkBAIC00OTYzLDEzICs0ODk3LDEzIEBAIHZvaWQgTWFj
aGluZTo6Y3RpX29wX3B1dF9ieV92YWxfYXJyYXkoQ1QKICAgICBBU1NFUlQoQVJHX2dsb2JhbERh
dGEtPm1hY2hpbmUtPmlzSlNBcnJheShiYXNlVmFsdWUpKTsKIAogICAgIGlmIChMSUtFTFkoaSA+
PSAwKSkKLSAgICAgICAgc3RhdGljX2Nhc3Q8SlNBcnJheSo+KGJhc2VWYWx1ZSktPkpTQXJyYXk6
OnB1dChleGVjLCBpLCB2YWx1ZSk7CisgICAgICAgIHN0YXRpY19jYXN0PEpTQXJyYXkqPihiYXNl
VmFsdWUpLT5KU0FycmF5OjpwdXQoY2FsbEZyYW1lLCBpLCB2YWx1ZSk7CiAgICAgZWxzZSB7Ci0g
ICAgICAgIElkZW50aWZpZXIgcHJvcGVydHkoZXhlYywgSlNJbW1lZGlhdGU6OmZyb20oaSktPnRv
U3RyaW5nKGV4ZWMpKTsKKyAgICAgICAgSWRlbnRpZmllciBwcm9wZXJ0eShjYWxsRnJhbWUsIEpT
SW1tZWRpYXRlOjpmcm9tKGkpLT50b1N0cmluZyhjYWxsRnJhbWUpKTsKICAgICAgICAgLy8gRklY
TUU6IGNhbiB0b1N0cmluZyB0aHJvdyBhbiBleGNlcHRpb24gaGVyZT8KICAgICAgICAgaWYgKCFB
UkdfZ2xvYmFsRGF0YS0+ZXhjZXB0aW9uKSB7IC8vIERvbid0IHB1dCB0byBhbiBvYmplY3QgaWYg
dG9TdHJpbmcgdGhyZXcgYW4gZXhjZXB0aW9uLgogICAgICAgICAgICAgUHV0UHJvcGVydHlTbG90
IHNsb3Q7Ci0gICAgICAgICAgICBiYXNlVmFsdWUtPnB1dChleGVjLCBwcm9wZXJ0eSwgdmFsdWUs
IHNsb3QpOworICAgICAgICAgICAgYmFzZVZhbHVlLT5wdXQoY2FsbEZyYW1lLCBwcm9wZXJ0eSwg
dmFsdWUsIHNsb3QpOwogICAgICAgICB9CiAgICAgfQogCkBAIC00OTc4LDggKzQ5MTIsOCBAQCB2
b2lkIE1hY2hpbmU6OmN0aV9vcF9wdXRfYnlfdmFsX2FycmF5KENUCiAKIEpTVmFsdWUqIE1hY2hp
bmU6OmN0aV9vcF9sZXNzZXEoQ1RJX0FSR1MpCiB7Ci0gICAgRXhlY1N0YXRlKiBleGVjID0gQVJH
X2V4ZWM7Ci0gICAgSlNWYWx1ZSogcmVzdWx0ID0ganNCb29sZWFuKGpzTGVzc0VxKGV4ZWMsIEFS
R19zcmMxLCBBUkdfc3JjMikpOworICAgIENhbGxGcmFtZSogY2FsbEZyYW1lID0gQVJHX2NhbGxG
cmFtZTsKKyAgICBKU1ZhbHVlKiByZXN1bHQgPSBqc0Jvb2xlYW4oanNMZXNzRXEoY2FsbEZyYW1l
LCBBUkdfc3JjMSwgQVJHX3NyYzIpKTsKICAgICBWTV9DSEVDS19FWENFUFRJT05fQVRfRU5EKCk7
CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KQEAgLTQ5ODgsOSArNDkyMiw5IEBAIGludCBNYWNoaW5l
OjpjdGlfb3BfbG9vcF9pZl90cnVlKENUSV9BUkcKIHsKICAgICBKU1ZhbHVlKiBzcmMxID0gQVJH
X3NyYzE7CiAKLSAgICBFeGVjU3RhdGUqIGV4ZWMgPSBBUkdfZXhlYzsKKyAgICBDYWxsRnJhbWUq
IGNhbGxGcmFtZSA9IEFSR19jYWxsRnJhbWU7CiAKLSAgICBib29sIHJlc3VsdCA9IHNyYzEtPnRv
Qm9vbGVhbihleGVjKTsKKyAgICBib29sIHJlc3VsdCA9IHNyYzEtPnRvQm9vbGVhbihjYWxsRnJh
bWUpOwogICAgIFZNX0NIRUNLX0VYQ0VQVElPTl9BVF9FTkQoKTsKICAgICByZXR1cm4gcmVzdWx0
OwogfQpAQCAtNTAwMywyMiArNDkzNywyMSBAQCBKU1ZhbHVlKiBNYWNoaW5lOjpjdGlfb3BfbmVn
YXRlKENUSV9BUkdTCiAgICAgaWYgKGZhc3RJc051bWJlcihzcmMsIHYpKQogICAgICAgICByZXR1
cm4ganNOdW1iZXIoQVJHX2dsb2JhbERhdGEsIC12KTsKIAotICAgIEV4ZWNTdGF0ZSogZXhlYyA9
IEFSR19leGVjOwotICAgIEpTVmFsdWUqIHJlc3VsdCA9IGpzTnVtYmVyKEFSR19nbG9iYWxEYXRh
LCAtc3JjLT50b051bWJlcihleGVjKSk7CisgICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUgPSBBUkdf
Y2FsbEZyYW1lOworICAgIEpTVmFsdWUqIHJlc3VsdCA9IGpzTnVtYmVyKEFSR19nbG9iYWxEYXRh
LCAtc3JjLT50b051bWJlcihjYWxsRnJhbWUpKTsKICAgICBWTV9DSEVDS19FWENFUFRJT05fQVRf
RU5EKCk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAogSlNWYWx1ZSogTWFjaGluZTo6Y3RpX29w
X3Jlc29sdmVfYmFzZShDVElfQVJHUykKIHsKLSAgICByZXR1cm4gaW5saW5lUmVzb2x2ZUJhc2Uo
QVJHX2V4ZWMsICpBUkdfaWQxLCBzY29wZUNoYWluKEFSR19yKSk7CisgICAgcmV0dXJuIGlubGlu
ZVJlc29sdmVCYXNlKEFSR19jYWxsRnJhbWUsICpBUkdfaWQxLCBBUkdfY2FsbEZyYW1lLT5zY29w
ZUNoYWluKCkpOwogfQogCiBKU1ZhbHVlKiBNYWNoaW5lOjpjdGlfb3BfcmVzb2x2ZV9za2lwKENU
SV9BUkdTKQogewotICAgIEV4ZWNTdGF0ZSogZXhlYyA9IEFSR19leGVjOwotICAgIFJlZ2lzdGVy
KiByID0gQVJHX3I7Ci0gICAgU2NvcGVDaGFpbk5vZGUqIHNjb3BlQ2hhaW4gPSBNYWNoaW5lOjpz
Y29wZUNoYWluKHIpOworICAgIENhbGxGcmFtZSogY2FsbEZyYW1lID0gQVJHX2NhbGxGcmFtZTsK
KyAgICBTY29wZUNoYWluTm9kZSogc2NvcGVDaGFpbiA9IGNhbGxGcmFtZS0+c2NvcGVDaGFpbigp
OwogCiAgICAgaW50IHNraXAgPSBBUkdfaW50MjsKIApAQCAtNTAzMywzMSArNDk2NiwzMSBAQCBK
U1ZhbHVlKiBNYWNoaW5lOjpjdGlfb3BfcmVzb2x2ZV9za2lwKENUCiAgICAgZG8gewogICAgICAg
ICBKU09iamVjdCogbyA9ICppdGVyOwogICAgICAgICBQcm9wZXJ0eVNsb3Qgc2xvdChvKTsKLSAg
ICAgICAgaWYgKG8tPmdldFByb3BlcnR5U2xvdChleGVjLCBpZGVudCwgc2xvdCkpIHsKLSAgICAg
ICAgICAgIEpTVmFsdWUqIHJlc3VsdCA9IHNsb3QuZ2V0VmFsdWUoZXhlYywgaWRlbnQpOworICAg
ICAgICBpZiAoby0+Z2V0UHJvcGVydHlTbG90KGNhbGxGcmFtZSwgaWRlbnQsIHNsb3QpKSB7Cisg
ICAgICAgICAgICBKU1ZhbHVlKiByZXN1bHQgPSBzbG90LmdldFZhbHVlKGNhbGxGcmFtZSwgaWRl
bnQpOwogICAgICAgICAgICAgVk1fQ0hFQ0tfRVhDRVBUSU9OX0FUX0VORCgpOwogICAgICAgICAg
ICAgcmV0dXJuIHJlc3VsdDsKICAgICAgICAgfQogICAgIH0gd2hpbGUgKCsraXRlciAhPSBlbmQp
OwogCi0gICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBNYWNoaW5lOjpjb2RlQmxvY2socik7Cisg
ICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBjYWxsRnJhbWUtPmNvZGVCbG9jaygpOwogICAgIEFT
U0VSVChjb2RlQmxvY2stPmN0aVJldHVybkFkZHJlc3NWUENNYXAuY29udGFpbnMoQ1RJX1JFVFVS
Tl9BRERSRVNTKSk7CiAgICAgdW5zaWduZWQgdlBDSW5kZXggPSBjb2RlQmxvY2stPmN0aVJldHVy
bkFkZHJlc3NWUENNYXAuZ2V0KENUSV9SRVRVUk5fQUREUkVTUyk7Ci0gICAgZXhlYy0+c2V0RXhj
ZXB0aW9uKGNyZWF0ZVVuZGVmaW5lZFZhcmlhYmxlRXJyb3IoZXhlYywgaWRlbnQsIGNvZGVCbG9j
ay0+aW5zdHJ1Y3Rpb25zLmJlZ2luKCkgKyB2UENJbmRleCwgY29kZUJsb2NrKSk7CisgICAgY2Fs
bEZyYW1lLT5zZXRFeGNlcHRpb24oY3JlYXRlVW5kZWZpbmVkVmFyaWFibGVFcnJvcihjYWxsRnJh
bWUsIGlkZW50LCBjb2RlQmxvY2stPmluc3RydWN0aW9ucy5iZWdpbigpICsgdlBDSW5kZXgsIGNv
ZGVCbG9jaykpOwogICAgIFZNX1RIUk9XX0VYQ0VQVElPTigpOwogfQogCiBKU1ZhbHVlKiBNYWNo
aW5lOjpjdGlfb3BfcmVzb2x2ZV9nbG9iYWwoQ1RJX0FSR1MpCiB7Ci0gICAgRXhlY1N0YXRlKiBl
eGVjID0gQVJHX2V4ZWM7CisgICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUgPSBBUkdfY2FsbEZyYW1l
OwogICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBzdGF0aWNfY2FzdDxKU0dsb2Jh
bE9iamVjdCo+KEFSR19zcmMxKTsKICAgICBJZGVudGlmaWVyJiBpZGVudCA9ICpBUkdfaWQyOwog
ICAgIEluc3RydWN0aW9uKiB2UEMgPSBBUkdfaW5zdHIzOwogICAgIEFTU0VSVChnbG9iYWxPYmpl
Y3QtPmlzR2xvYmFsT2JqZWN0KCkpOwogCiAgICAgUHJvcGVydHlTbG90IHNsb3QoZ2xvYmFsT2Jq
ZWN0KTsKLSAgICBpZiAoZ2xvYmFsT2JqZWN0LT5nZXRQcm9wZXJ0eVNsb3QoZXhlYywgaWRlbnQs
IHNsb3QpKSB7Ci0gICAgICAgIEpTVmFsdWUqIHJlc3VsdCA9IHNsb3QuZ2V0VmFsdWUoZXhlYywg
aWRlbnQpOworICAgIGlmIChnbG9iYWxPYmplY3QtPmdldFByb3BlcnR5U2xvdChjYWxsRnJhbWUs
IGlkZW50LCBzbG90KSkgeworICAgICAgICBKU1ZhbHVlKiByZXN1bHQgPSBzbG90LmdldFZhbHVl
KGNhbGxGcmFtZSwgaWRlbnQpOwogICAgICAgICBpZiAoc2xvdC5pc0NhY2hlYWJsZSgpKSB7CiAg
ICAgICAgICAgICBpZiAodlBDWzRdLnUuc3RydWN0dXJlSUQpCiAgICAgICAgICAgICAgICAgdlBD
WzRdLnUuc3RydWN0dXJlSUQtPmRlcmVmKCk7CkBAIC01MDcxLDggKzUwMDQsNyBAQCBKU1ZhbHVl
KiBNYWNoaW5lOjpjdGlfb3BfcmVzb2x2ZV9nbG9iYWwoCiAgICAgICAgIHJldHVybiByZXN1bHQ7
CiAgICAgfQogICAgIAotICAgIFJlZ2lzdGVyKiByID0gQVJHX3I7Ci0gICAgZXhlYy0+c2V0RXhj
ZXB0aW9uKGNyZWF0ZVVuZGVmaW5lZFZhcmlhYmxlRXJyb3IoZXhlYywgaWRlbnQsIHZQQywgY29k
ZUJsb2NrKHIpKSk7ICAgIAorICAgIGNhbGxGcmFtZS0+c2V0RXhjZXB0aW9uKGNyZWF0ZVVuZGVm
aW5lZFZhcmlhYmxlRXJyb3IoY2FsbEZyYW1lLCBpZGVudCwgdlBDLCBjYWxsRnJhbWUtPmNvZGVC
bG9jaygpKSk7ICAgIAogICAgIFZNX1RIUk9XX0VYQ0VQVElPTigpOwogfQogCkBAIC01MDg2LDgg
KzUwMTgsOCBAQCBKU1ZhbHVlKiBNYWNoaW5lOjpjdGlfb3BfZGl2KENUSV9BUkdTKQogICAgIGlm
IChmYXN0SXNOdW1iZXIoc3JjMSwgbGVmdCkgJiYgZmFzdElzTnVtYmVyKHNyYzIsIHJpZ2h0KSkK
ICAgICAgICAgcmV0dXJuIGpzTnVtYmVyKEFSR19nbG9iYWxEYXRhLCBsZWZ0IC8gcmlnaHQpOwog
Ci0gICAgRXhlY1N0YXRlKiBleGVjID0gQVJHX2V4ZWM7Ci0gICAgSlNWYWx1ZSogcmVzdWx0ID0g
anNOdW1iZXIoQVJHX2dsb2JhbERhdGEsIHNyYzEtPnRvTnVtYmVyKGV4ZWMpIC8gc3JjMi0+dG9O
dW1iZXIoZXhlYykpOworICAgIENhbGxGcmFtZSogY2FsbEZyYW1lID0gQVJHX2NhbGxGcmFtZTsK
KyAgICBKU1ZhbHVlKiByZXN1bHQgPSBqc051bWJlcihBUkdfZ2xvYmFsRGF0YSwgc3JjMS0+dG9O
dW1iZXIoY2FsbEZyYW1lKSAvIHNyYzItPnRvTnVtYmVyKGNhbGxGcmFtZSkpOwogICAgIFZNX0NI
RUNLX0VYQ0VQVElPTl9BVF9FTkQoKTsKICAgICByZXR1cm4gcmVzdWx0OwogfQpAQCAtNTA5Niw4
ICs1MDI4LDggQEAgSlNWYWx1ZSogTWFjaGluZTo6Y3RpX29wX3ByZV9kZWMoQ1RJX0FSRwogewog
ICAgIEpTVmFsdWUqIHYgPSBBUkdfc3JjMTsKIAotICAgIEV4ZWNTdGF0ZSogZXhlYyA9IEFSR19l
eGVjOwotICAgIEpTVmFsdWUqIHJlc3VsdCA9IGpzTnVtYmVyKEFSR19nbG9iYWxEYXRhLCB2LT50
b051bWJlcihleGVjKSAtIDEpOworICAgIENhbGxGcmFtZSogY2FsbEZyYW1lID0gQVJHX2NhbGxG
cmFtZTsKKyAgICBKU1ZhbHVlKiByZXN1bHQgPSBqc051bWJlcihBUkdfZ2xvYmFsRGF0YSwgdi0+
dG9OdW1iZXIoY2FsbEZyYW1lKSAtIDEpOwogICAgIFZNX0NIRUNLX0VYQ0VQVElPTl9BVF9FTkQo
KTsKICAgICByZXR1cm4gcmVzdWx0OwogfQpAQCAtNTEwNiw5ICs1MDM4LDkgQEAgaW50IE1hY2hp
bmU6OmN0aV9vcF9qbGVzcyhDVElfQVJHUykKIHsKICAgICBKU1ZhbHVlKiBzcmMxID0gQVJHX3Ny
YzE7CiAgICAgSlNWYWx1ZSogc3JjMiA9IEFSR19zcmMyOwotICAgIEV4ZWNTdGF0ZSogZXhlYyA9
IEFSR19leGVjOworICAgIENhbGxGcmFtZSogY2FsbEZyYW1lID0gQVJHX2NhbGxGcmFtZTsKIAot
ICAgIGJvb2wgcmVzdWx0ID0ganNMZXNzKGV4ZWMsIHNyYzEsIHNyYzIpOworICAgIGJvb2wgcmVz
dWx0ID0ganNMZXNzKGNhbGxGcmFtZSwgc3JjMSwgc3JjMik7CiAgICAgVk1fQ0hFQ0tfRVhDRVBU
SU9OX0FUX0VORCgpOwogICAgIHJldHVybiByZXN1bHQ7CiB9CkBAIC01MTE3LDkgKzUwNDksOSBA
QCBKU1ZhbHVlKiBNYWNoaW5lOjpjdGlfb3Bfbm90KENUSV9BUkdTKQogewogICAgIEpTVmFsdWUq
IHNyYyA9IEFSR19zcmMxOwogCi0gICAgRXhlY1N0YXRlKiBleGVjID0gQVJHX2V4ZWM7CisgICAg
Q2FsbEZyYW1lKiBjYWxsRnJhbWUgPSBBUkdfY2FsbEZyYW1lOwogCi0gICAgSlNWYWx1ZSogcmVz
dWx0ID0ganNCb29sZWFuKCFzcmMtPnRvQm9vbGVhbihleGVjKSk7CisgICAgSlNWYWx1ZSogcmVz
dWx0ID0ganNCb29sZWFuKCFzcmMtPnRvQm9vbGVhbihjYWxsRnJhbWUpKTsKICAgICBWTV9DSEVD
S19FWENFUFRJT05fQVRfRU5EKCk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KQEAgLTUxMjgsOSAr
NTA2MCw5IEBAIGludCBTRlhfQ0FMTCBNYWNoaW5lOjpjdGlfb3BfanRydWUoQ1RJX0EKIHsKICAg
ICBKU1ZhbHVlKiBzcmMxID0gQVJHX3NyYzE7CiAKLSAgICBFeGVjU3RhdGUqIGV4ZWMgPSBBUkdf
ZXhlYzsKKyAgICBDYWxsRnJhbWUqIGNhbGxGcmFtZSA9IEFSR19jYWxsRnJhbWU7CiAKLSAgICBi
b29sIHJlc3VsdCA9IHNyYzEtPnRvQm9vbGVhbihleGVjKTsKKyAgICBib29sIHJlc3VsdCA9IHNy
YzEtPnRvQm9vbGVhbihjYWxsRnJhbWUpOwogICAgIFZNX0NIRUNLX0VYQ0VQVElPTl9BVF9FTkQo
KTsKICAgICByZXR1cm4gcmVzdWx0OwogfQpAQCAtNTEzOSw5ICs1MDcxLDkgQEAgSlNWYWx1ZSog
TWFjaGluZTo6Y3RpX29wX3Bvc3RfaW5jKENUSV9BUgogewogICAgIEpTVmFsdWUqIHYgPSBBUkdf
c3JjMTsKIAotICAgIEV4ZWNTdGF0ZSogZXhlYyA9IEFSR19leGVjOworICAgIENhbGxGcmFtZSog
Y2FsbEZyYW1lID0gQVJHX2NhbGxGcmFtZTsKIAotICAgIEpTVmFsdWUqIG51bWJlciA9IHYtPnRv
SlNOdW1iZXIoZXhlYyk7CisgICAgSlNWYWx1ZSogbnVtYmVyID0gdi0+dG9KU051bWJlcihjYWxs
RnJhbWUpOwogICAgIFZNX0NIRUNLX0VYQ0VQVElPTigpOwogICAgIEFSR19zZXQybmRSZXN1bHQo
anNOdW1iZXIoQVJHX2dsb2JhbERhdGEsIG51bWJlci0+dW5jaGVja2VkR2V0TnVtYmVyKCkgKyAx
KSk7CiAgICAgcmV0dXJuIG51bWJlcjsKQEAgLTUxNTIsMTAgKzUwODQsMTAgQEAgSlNWYWx1ZSog
TWFjaGluZTo6Y3RpX29wX2VxKENUSV9BUkdTKQogICAgIEpTVmFsdWUqIHNyYzEgPSBBUkdfc3Jj
MTsKICAgICBKU1ZhbHVlKiBzcmMyID0gQVJHX3NyYzI7CiAKLSAgICBFeGVjU3RhdGUqIGV4ZWMg
PSBBUkdfZXhlYzsKKyAgICBDYWxsRnJhbWUqIGNhbGxGcmFtZSA9IEFSR19jYWxsRnJhbWU7CiAK
ICAgICBBU1NFUlQoIUpTSW1tZWRpYXRlOjphcmVCb3RoSW1tZWRpYXRlTnVtYmVycyhzcmMxLCBz
cmMyKSk7Ci0gICAgSlNWYWx1ZSogcmVzdWx0ID0ganNCb29sZWFuKGVxdWFsU2xvd0Nhc2VJbmxp
bmUoZXhlYywgc3JjMSwgc3JjMikpOworICAgIEpTVmFsdWUqIHJlc3VsdCA9IGpzQm9vbGVhbihl
cXVhbFNsb3dDYXNlSW5saW5lKGNhbGxGcmFtZSwgc3JjMSwgc3JjMikpOwogICAgIFZNX0NIRUNL
X0VYQ0VQVElPTl9BVF9FTkQoKTsKICAgICByZXR1cm4gcmVzdWx0OwogfQpAQCAtNTE3Miw4ICs1
MTA0LDggQEAgSlNWYWx1ZSogTWFjaGluZTo6Y3RpX29wX2xzaGlmdChDVElfQVJHUwogICAgIGlm
IChmYXN0VG9JbnQzMih2YWwsIGxlZnQpICYmIGZhc3RUb1VJbnQzMihzaGlmdCwgcmlnaHQpKQog
ICAgICAgICByZXR1cm4ganNOdW1iZXIoQVJHX2dsb2JhbERhdGEsIGxlZnQgPDwgKHJpZ2h0ICYg
MHgxZikpOwogCi0gICAgRXhlY1N0YXRlKiBleGVjID0gQVJHX2V4ZWM7Ci0gICAgSlNWYWx1ZSog
cmVzdWx0ID0ganNOdW1iZXIoQVJHX2dsb2JhbERhdGEsICh2YWwtPnRvSW50MzIoZXhlYykpIDw8
IChzaGlmdC0+dG9VSW50MzIoZXhlYykgJiAweDFmKSk7CisgICAgQ2FsbEZyYW1lKiBjYWxsRnJh
bWUgPSBBUkdfY2FsbEZyYW1lOworICAgIEpTVmFsdWUqIHJlc3VsdCA9IGpzTnVtYmVyKEFSR19n
bG9iYWxEYXRhLCAodmFsLT50b0ludDMyKGNhbGxGcmFtZSkpIDw8IChzaGlmdC0+dG9VSW50MzIo
Y2FsbEZyYW1lKSAmIDB4MWYpKTsKICAgICBWTV9DSEVDS19FWENFUFRJT05fQVRfRU5EKCk7CiAg
ICAgcmV0dXJuIHJlc3VsdDsKIH0KQEAgLTUxODgsOCArNTEyMCw4IEBAIEpTVmFsdWUqIE1hY2hp
bmU6OmN0aV9vcF9iaXRhbmQoQ1RJX0FSR1MKICAgICBpZiAoZmFzdFRvSW50MzIoc3JjMSwgbGVm
dCkgJiYgZmFzdFRvSW50MzIoc3JjMiwgcmlnaHQpKQogICAgICAgICByZXR1cm4ganNOdW1iZXIo
QVJHX2dsb2JhbERhdGEsIGxlZnQgJiByaWdodCk7CiAKLSAgICBFeGVjU3RhdGUqIGV4ZWMgPSBB
UkdfZXhlYzsKLSAgICBKU1ZhbHVlKiByZXN1bHQgPSBqc051bWJlcihBUkdfZ2xvYmFsRGF0YSwg
c3JjMS0+dG9JbnQzMihleGVjKSAmIHNyYzItPnRvSW50MzIoZXhlYykpOworICAgIENhbGxGcmFt
ZSogY2FsbEZyYW1lID0gQVJHX2NhbGxGcmFtZTsKKyAgICBKU1ZhbHVlKiByZXN1bHQgPSBqc051
bWJlcihBUkdfZ2xvYmFsRGF0YSwgc3JjMS0+dG9JbnQzMihjYWxsRnJhbWUpICYgc3JjMi0+dG9J
bnQzMihjYWxsRnJhbWUpKTsKICAgICBWTV9DSEVDS19FWENFUFRJT05fQVRfRU5EKCk7CiAgICAg
cmV0dXJuIHJlc3VsdDsKIH0KQEAgLTUyMDYsOCArNTEzOCw4IEBAIEpTVmFsdWUqIE1hY2hpbmU6
OmN0aV9vcF9yc2hpZnQoQ1RJX0FSR1MKICAgICBpZiAoZmFzdFRvSW50MzIodmFsLCBsZWZ0KSAm
JiBmYXN0VG9VSW50MzIoc2hpZnQsIHJpZ2h0KSkKICAgICAgICAgcmV0dXJuIGpzTnVtYmVyKEFS
R19nbG9iYWxEYXRhLCBsZWZ0ID4+IChyaWdodCAmIDB4MWYpKTsKIAotICAgIEV4ZWNTdGF0ZSog
ZXhlYyA9IEFSR19leGVjOwotICAgIEpTVmFsdWUqIHJlc3VsdCA9IGpzTnVtYmVyKEFSR19nbG9i
YWxEYXRhLCAodmFsLT50b0ludDMyKGV4ZWMpKSA+PiAoc2hpZnQtPnRvVUludDMyKGV4ZWMpICYg
MHgxZikpOworICAgIENhbGxGcmFtZSogY2FsbEZyYW1lID0gQVJHX2NhbGxGcmFtZTsKKyAgICBK
U1ZhbHVlKiByZXN1bHQgPSBqc051bWJlcihBUkdfZ2xvYmFsRGF0YSwgKHZhbC0+dG9JbnQzMihj
YWxsRnJhbWUpKSA+PiAoc2hpZnQtPnRvVUludDMyKGNhbGxGcmFtZSkgJiAweDFmKSk7CiAgICAg
Vk1fQ0hFQ0tfRVhDRVBUSU9OX0FUX0VORCgpOwogICAgIHJldHVybiByZXN1bHQ7CiB9CkBAIC01
MjIwLDE3ICs1MTUyLDE2IEBAIEpTVmFsdWUqIE1hY2hpbmU6OmN0aV9vcF9iaXRub3QoQ1RJX0FS
R1MKICAgICBpZiAoZmFzdFRvSW50MzIoc3JjLCB2YWx1ZSkpCiAgICAgICAgIHJldHVybiBqc051
bWJlcihBUkdfZ2xvYmFsRGF0YSwgfnZhbHVlKTsKICAgICAgICAgICAgIAotICAgIEV4ZWNTdGF0
ZSogZXhlYyA9IEFSR19leGVjOwotICAgIEpTVmFsdWUqIHJlc3VsdCA9IGpzTnVtYmVyKEFSR19n
bG9iYWxEYXRhLCB+c3JjLT50b0ludDMyKGV4ZWMpKTsKKyAgICBDYWxsRnJhbWUqIGNhbGxGcmFt
ZSA9IEFSR19jYWxsRnJhbWU7CisgICAgSlNWYWx1ZSogcmVzdWx0ID0ganNOdW1iZXIoQVJHX2ds
b2JhbERhdGEsIH5zcmMtPnRvSW50MzIoY2FsbEZyYW1lKSk7CiAgICAgVk1fQ0hFQ0tfRVhDRVBU
SU9OX0FUX0VORCgpOwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKIEpTVmFsdWUqIE1hY2hpbmU6
OmN0aV9vcF9yZXNvbHZlX3dpdGhfYmFzZShDVElfQVJHUykKIHsKLSAgICBFeGVjU3RhdGUqIGV4
ZWMgPSBBUkdfZXhlYzsKLSAgICBSZWdpc3RlciogciA9IEFSR19yOwotICAgIFNjb3BlQ2hhaW5O
b2RlKiBzY29wZUNoYWluID0gTWFjaGluZTo6c2NvcGVDaGFpbihyKTsKKyAgICBDYWxsRnJhbWUq
IGNhbGxGcmFtZSA9IEFSR19jYWxsRnJhbWU7CisgICAgU2NvcGVDaGFpbk5vZGUqIHNjb3BlQ2hh
aW4gPSBjYWxsRnJhbWUtPnNjb3BlQ2hhaW4oKTsKIAogICAgIFNjb3BlQ2hhaW5JdGVyYXRvciBp
dGVyID0gc2NvcGVDaGFpbi0+YmVnaW4oKTsKICAgICBTY29wZUNoYWluSXRlcmF0b3IgZW5kID0g
c2NvcGVDaGFpbi0+ZW5kKCk7CkBAIC01MjQ0LDggKzUxNzUsOCBAQCBKU1ZhbHVlKiBNYWNoaW5l
OjpjdGlfb3BfcmVzb2x2ZV93aXRoX2JhCiAgICAgZG8gewogICAgICAgICBiYXNlID0gKml0ZXI7
CiAgICAgICAgIFByb3BlcnR5U2xvdCBzbG90KGJhc2UpOwotICAgICAgICBpZiAoYmFzZS0+Z2V0
UHJvcGVydHlTbG90KGV4ZWMsIGlkZW50LCBzbG90KSkgewotICAgICAgICAgICAgSlNWYWx1ZSog
cmVzdWx0ID0gc2xvdC5nZXRWYWx1ZShleGVjLCBpZGVudCk7CisgICAgICAgIGlmIChiYXNlLT5n
ZXRQcm9wZXJ0eVNsb3QoY2FsbEZyYW1lLCBpZGVudCwgc2xvdCkpIHsKKyAgICAgICAgICAgIEpT
VmFsdWUqIHJlc3VsdCA9IHNsb3QuZ2V0VmFsdWUoY2FsbEZyYW1lLCBpZGVudCk7CiAgICAgICAg
ICAgICBWTV9DSEVDS19FWENFUFRJT05fQVRfRU5EKCk7CiAgICAgICAgICAgICBBUkdfc2V0Mm5k
UmVzdWx0KHJlc3VsdCk7CiAgICAgICAgICAgICByZXR1cm4gYmFzZTsKQEAgLTUyNTMsMTYgKzUx
ODQsMTYgQEAgSlNWYWx1ZSogTWFjaGluZTo6Y3RpX29wX3Jlc29sdmVfd2l0aF9iYQogICAgICAg
ICArK2l0ZXI7CiAgICAgfSB3aGlsZSAoaXRlciAhPSBlbmQpOwogCi0gICAgQ29kZUJsb2NrKiBj
b2RlQmxvY2sgPSBNYWNoaW5lOjpjb2RlQmxvY2socik7CisgICAgQ29kZUJsb2NrKiBjb2RlQmxv
Y2sgPSBjYWxsRnJhbWUtPmNvZGVCbG9jaygpOwogICAgIEFTU0VSVChjb2RlQmxvY2stPmN0aVJl
dHVybkFkZHJlc3NWUENNYXAuY29udGFpbnMoQ1RJX1JFVFVSTl9BRERSRVNTKSk7CiAgICAgdW5z
aWduZWQgdlBDSW5kZXggPSBjb2RlQmxvY2stPmN0aVJldHVybkFkZHJlc3NWUENNYXAuZ2V0KENU
SV9SRVRVUk5fQUREUkVTUyk7Ci0gICAgZXhlYy0+c2V0RXhjZXB0aW9uKGNyZWF0ZVVuZGVmaW5l
ZFZhcmlhYmxlRXJyb3IoZXhlYywgaWRlbnQsIGNvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zLmJlZ2lu
KCkgKyB2UENJbmRleCwgY29kZUJsb2NrKSk7CisgICAgY2FsbEZyYW1lLT5zZXRFeGNlcHRpb24o
Y3JlYXRlVW5kZWZpbmVkVmFyaWFibGVFcnJvcihjYWxsRnJhbWUsIGlkZW50LCBjb2RlQmxvY2st
Pmluc3RydWN0aW9ucy5iZWdpbigpICsgdlBDSW5kZXgsIGNvZGVCbG9jaykpOwogICAgIFZNX1RI
Uk9XX0VYQ0VQVElPTigpOwogfQogCiBKU1ZhbHVlKiBNYWNoaW5lOjpjdGlfb3BfbmV3X2Z1bmNf
ZXhwKENUSV9BUkdTKQogewotICAgIHJldHVybiBBUkdfZnVuY2V4cDEtPm1ha2VGdW5jdGlvbihB
UkdfZXhlYywgc2NvcGVDaGFpbihBUkdfcikpOworICAgIHJldHVybiBBUkdfZnVuY2V4cDEtPm1h
a2VGdW5jdGlvbihBUkdfY2FsbEZyYW1lLCBBUkdfY2FsbEZyYW1lLT5zY29wZUNoYWluKCkpOwog
fQogCiBKU1ZhbHVlKiBNYWNoaW5lOjpjdGlfb3BfbW9kKENUSV9BUkdTKQpAQCAtNTI3MCwxNyAr
NTIwMSwxNyBAQCBKU1ZhbHVlKiBNYWNoaW5lOjpjdGlfb3BfbW9kKENUSV9BUkdTKQogICAgIEpT
VmFsdWUqIGRpdmlkZW5kVmFsdWUgPSBBUkdfc3JjMTsKICAgICBKU1ZhbHVlKiBkaXZpc29yVmFs
dWUgPSBBUkdfc3JjMjsKIAotICAgIEV4ZWNTdGF0ZSogZXhlYyA9IEFSR19leGVjOwotICAgIGRv
dWJsZSBkID0gZGl2aWRlbmRWYWx1ZS0+dG9OdW1iZXIoZXhlYyk7Ci0gICAgSlNWYWx1ZSogcmVz
dWx0ID0ganNOdW1iZXIoQVJHX2dsb2JhbERhdGEsIGZtb2QoZCwgZGl2aXNvclZhbHVlLT50b051
bWJlcihleGVjKSkpOworICAgIENhbGxGcmFtZSogY2FsbEZyYW1lID0gQVJHX2NhbGxGcmFtZTsK
KyAgICBkb3VibGUgZCA9IGRpdmlkZW5kVmFsdWUtPnRvTnVtYmVyKGNhbGxGcmFtZSk7CisgICAg
SlNWYWx1ZSogcmVzdWx0ID0ganNOdW1iZXIoQVJHX2dsb2JhbERhdGEsIGZtb2QoZCwgZGl2aXNv
clZhbHVlLT50b051bWJlcihjYWxsRnJhbWUpKSk7CiAgICAgVk1fQ0hFQ0tfRVhDRVBUSU9OX0FU
X0VORCgpOwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKIEpTVmFsdWUqIE1hY2hpbmU6OmN0aV9v
cF9sZXNzKENUSV9BUkdTKQogewotICAgIEV4ZWNTdGF0ZSogZXhlYyA9IEFSR19leGVjOwotICAg
IEpTVmFsdWUqIHJlc3VsdCA9IGpzQm9vbGVhbihqc0xlc3MoZXhlYywgQVJHX3NyYzEsIEFSR19z
cmMyKSk7CisgICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUgPSBBUkdfY2FsbEZyYW1lOworICAgIEpT
VmFsdWUqIHJlc3VsdCA9IGpzQm9vbGVhbihqc0xlc3MoY2FsbEZyYW1lLCBBUkdfc3JjMSwgQVJH
X3NyYzIpKTsKICAgICBWTV9DSEVDS19FWENFUFRJT05fQVRfRU5EKCk7CiAgICAgcmV0dXJuIHJl
c3VsdDsKIH0KQEAgLTUyOTIsOCArNTIyMyw4IEBAIEpTVmFsdWUqIE1hY2hpbmU6OmN0aV9vcF9u
ZXEoQ1RJX0FSR1MpCiAKICAgICBBU1NFUlQoIUpTSW1tZWRpYXRlOjphcmVCb3RoSW1tZWRpYXRl
TnVtYmVycyhzcmMxLCBzcmMyKSk7CiAKLSAgICBFeGVjU3RhdGUqIGV4ZWMgPSBBUkdfZXhlYzsK
LSAgICBKU1ZhbHVlKiByZXN1bHQgPSBqc0Jvb2xlYW4oIWVxdWFsU2xvd0Nhc2VJbmxpbmUoZXhl
Yywgc3JjMSwgc3JjMikpOworICAgIENhbGxGcmFtZSogY2FsbEZyYW1lID0gQVJHX2NhbGxGcmFt
ZTsKKyAgICBKU1ZhbHVlKiByZXN1bHQgPSBqc0Jvb2xlYW4oIWVxdWFsU2xvd0Nhc2VJbmxpbmUo
Y2FsbEZyYW1lLCBzcmMxLCBzcmMyKSk7CiAgICAgVk1fQ0hFQ0tfRVhDRVBUSU9OX0FUX0VORCgp
OwogICAgIHJldHVybiByZXN1bHQ7CiB9CkBAIC01MzAyLDkgKzUyMzMsOSBAQCBKU1ZhbHVlKiBN
YWNoaW5lOjpjdGlfb3BfcG9zdF9kZWMoQ1RJX0FSCiB7CiAgICAgSlNWYWx1ZSogdiA9IEFSR19z
cmMxOwogCi0gICAgRXhlY1N0YXRlKiBleGVjID0gQVJHX2V4ZWM7CisgICAgQ2FsbEZyYW1lKiBj
YWxsRnJhbWUgPSBBUkdfY2FsbEZyYW1lOwogCi0gICAgSlNWYWx1ZSogbnVtYmVyID0gdi0+dG9K
U051bWJlcihleGVjKTsKKyAgICBKU1ZhbHVlKiBudW1iZXIgPSB2LT50b0pTTnVtYmVyKGNhbGxG
cmFtZSk7CiAgICAgVk1fQ0hFQ0tfRVhDRVBUSU9OKCk7CiAKICAgICBBUkdfc2V0Mm5kUmVzdWx0
KGpzTnVtYmVyKEFSR19nbG9iYWxEYXRhLCBudW1iZXItPnVuY2hlY2tlZEdldE51bWJlcigpIC0g
MSkpOwpAQCAtNTMxNiwxMiArNTI0NywxMiBAQCBKU1ZhbHVlKiBNYWNoaW5lOjpjdGlfb3BfdXJz
aGlmdChDVElfQVJHCiAgICAgSlNWYWx1ZSogdmFsID0gQVJHX3NyYzE7CiAgICAgSlNWYWx1ZSog
c2hpZnQgPSBBUkdfc3JjMjsKIAotICAgIEV4ZWNTdGF0ZSogZXhlYyA9IEFSR19leGVjOworICAg
IENhbGxGcmFtZSogY2FsbEZyYW1lID0gQVJHX2NhbGxGcmFtZTsKIAogICAgIGlmIChKU0ltbWVk
aWF0ZTo6YXJlQm90aEltbWVkaWF0ZU51bWJlcnModmFsLCBzaGlmdCkgJiYgIUpTSW1tZWRpYXRl
Ojppc05lZ2F0aXZlKHZhbCkpCiAgICAgICAgIHJldHVybiBKU0ltbWVkaWF0ZTo6cmlnaHRTaGlm
dEltbWVkaWF0ZU51bWJlcnModmFsLCBzaGlmdCk7CiAgICAgZWxzZSB7Ci0gICAgICAgIEpTVmFs
dWUqIHJlc3VsdCA9IGpzTnVtYmVyKEFSR19nbG9iYWxEYXRhLCAodmFsLT50b1VJbnQzMihleGVj
KSkgPj4gKHNoaWZ0LT50b1VJbnQzMihleGVjKSAmIDB4MWYpKTsKKyAgICAgICAgSlNWYWx1ZSog
cmVzdWx0ID0ganNOdW1iZXIoQVJHX2dsb2JhbERhdGEsICh2YWwtPnRvVUludDMyKGNhbGxGcmFt
ZSkpID4+IChzaGlmdC0+dG9VSW50MzIoY2FsbEZyYW1lKSAmIDB4MWYpKTsKICAgICAgICAgVk1f
Q0hFQ0tfRVhDRVBUSU9OX0FUX0VORCgpOwogICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0K
QEAgLTUzMzIsMTYgKzUyNjMsMTYgQEAgSlNWYWx1ZSogTWFjaGluZTo6Y3RpX29wX2JpdHhvcihD
VElfQVJHUwogICAgIEpTVmFsdWUqIHNyYzEgPSBBUkdfc3JjMTsKICAgICBKU1ZhbHVlKiBzcmMy
ID0gQVJHX3NyYzI7CiAKLSAgICBFeGVjU3RhdGUqIGV4ZWMgPSBBUkdfZXhlYzsKKyAgICBDYWxs
RnJhbWUqIGNhbGxGcmFtZSA9IEFSR19jYWxsRnJhbWU7CiAKLSAgICBKU1ZhbHVlKiByZXN1bHQg
PSBqc051bWJlcihBUkdfZ2xvYmFsRGF0YSwgc3JjMS0+dG9JbnQzMihleGVjKSBeIHNyYzItPnRv
SW50MzIoZXhlYykpOworICAgIEpTVmFsdWUqIHJlc3VsdCA9IGpzTnVtYmVyKEFSR19nbG9iYWxE
YXRhLCBzcmMxLT50b0ludDMyKGNhbGxGcmFtZSkgXiBzcmMyLT50b0ludDMyKGNhbGxGcmFtZSkp
OwogICAgIFZNX0NIRUNLX0VYQ0VQVElPTl9BVF9FTkQoKTsKICAgICByZXR1cm4gcmVzdWx0Owog
fQogCiBKU1ZhbHVlKiBNYWNoaW5lOjpjdGlfb3BfbmV3X3JlZ2V4cChDVElfQVJHUykKIHsKLSAg
ICByZXR1cm4gbmV3IChBUkdfZ2xvYmFsRGF0YSkgUmVnRXhwT2JqZWN0KHNjb3BlQ2hhaW4oQVJH
X3IpLT5nbG9iYWxPYmplY3QoKS0+cmVnRXhwU3RydWN0dXJlKCksIEFSR19yZWdleHAxKTsKKyAg
ICByZXR1cm4gbmV3IChBUkdfZ2xvYmFsRGF0YSkgUmVnRXhwT2JqZWN0KEFSR19jYWxsRnJhbWUt
PmxleGljYWxHbG9iYWxPYmplY3QoKS0+cmVnRXhwU3RydWN0dXJlKCksIEFSR19yZWdleHAxKTsK
IH0KIAogSlNWYWx1ZSogTWFjaGluZTo6Y3RpX29wX2JpdG9yKENUSV9BUkdTKQpAQCAtNTM0OSwy
MCArNTI4MCwxOSBAQCBKU1ZhbHVlKiBNYWNoaW5lOjpjdGlfb3BfYml0b3IoQ1RJX0FSR1MpCiAg
ICAgSlNWYWx1ZSogc3JjMSA9IEFSR19zcmMxOwogICAgIEpTVmFsdWUqIHNyYzIgPSBBUkdfc3Jj
MjsKIAotICAgIEV4ZWNTdGF0ZSogZXhlYyA9IEFSR19leGVjOworICAgIENhbGxGcmFtZSogY2Fs
bEZyYW1lID0gQVJHX2NhbGxGcmFtZTsKIAotICAgIEpTVmFsdWUqIHJlc3VsdCA9IGpzTnVtYmVy
KEFSR19nbG9iYWxEYXRhLCBzcmMxLT50b0ludDMyKGV4ZWMpIHwgc3JjMi0+dG9JbnQzMihleGVj
KSk7CisgICAgSlNWYWx1ZSogcmVzdWx0ID0ganNOdW1iZXIoQVJHX2dsb2JhbERhdGEsIHNyYzEt
PnRvSW50MzIoY2FsbEZyYW1lKSB8IHNyYzItPnRvSW50MzIoY2FsbEZyYW1lKSk7CiAgICAgVk1f
Q0hFQ0tfRVhDRVBUSU9OX0FUX0VORCgpOwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKIEpTVmFs
dWUqIE1hY2hpbmU6OmN0aV9vcF9jYWxsX2V2YWwoQ1RJX0FSR1MpCiB7Ci0gICAgRXhlY1N0YXRl
KiBleGVjID0gQVJHX2V4ZWM7CisgICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUgPSBBUkdfY2FsbEZy
YW1lOwogICAgIFJlZ2lzdGVyRmlsZSogcmVnaXN0ZXJGaWxlID0gQVJHX3JlZ2lzdGVyRmlsZTsK
LSAgICBSZWdpc3RlciogciA9IEFSR19yOwotICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gTWFj
aGluZTo6Y29kZUJsb2NrKHIpOwotICAgIFNjb3BlQ2hhaW5Ob2RlKiBzY29wZUNoYWluID0gTWFj
aGluZTo6c2NvcGVDaGFpbihyKTsKKyAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IGNhbGxGcmFt
ZS0+Y29kZUJsb2NrKCk7CisgICAgU2NvcGVDaGFpbk5vZGUqIHNjb3BlQ2hhaW4gPSBjYWxsRnJh
bWUtPnNjb3BlQ2hhaW4oKTsKIAogICAgIE1hY2hpbmUqIG1hY2hpbmUgPSBBUkdfZ2xvYmFsRGF0
YS0+bWFjaGluZTsKICAgICAKQEAgLTUzNzIsOSArNTMwMiw5IEBAIEpTVmFsdWUqIE1hY2hpbmU6
OmN0aV9vcF9jYWxsX2V2YWwoQ1RJX0EKICAgICBKU1ZhbHVlKiBiYXNlVmFsID0gQVJHX3NyYzU7
CiAKICAgICBpZiAoYmFzZVZhbCA9PSBzY29wZUNoYWluLT5nbG9iYWxPYmplY3QoKSAmJiBmdW5j
VmFsID09IHNjb3BlQ2hhaW4tPmdsb2JhbE9iamVjdCgpLT5ldmFsRnVuY3Rpb24oKSkgewotICAg
ICAgICBKU09iamVjdCogdGhpc09iamVjdCA9IHN0YXRpY19jYXN0PEpTT2JqZWN0Kj4ocltjb2Rl
QmxvY2stPnRoaXNSZWdpc3Rlcl0uanNWYWx1ZShleGVjKSk7CisgICAgICAgIEpTT2JqZWN0KiB0
aGlzT2JqZWN0ID0gc3RhdGljX2Nhc3Q8SlNPYmplY3QqPihjYWxsRnJhbWUtPnJlZ2lzdGVycygp
W2NvZGVCbG9jay0+dGhpc1JlZ2lzdGVyXS5qc1ZhbHVlKGNhbGxGcmFtZSkpOwogICAgICAgICBK
U1ZhbHVlKiBleGNlcHRpb25WYWx1ZSA9IDA7Ci0gICAgICAgIEpTVmFsdWUqIHJlc3VsdCA9IG1h
Y2hpbmUtPmNhbGxFdmFsKGV4ZWMsIHRoaXNPYmplY3QsIHNjb3BlQ2hhaW4sIHJlZ2lzdGVyRmls
ZSwgIHIsIHJlZ2lzdGVyT2Zmc2V0IC0gUmVnaXN0ZXJGaWxlOjpDYWxsRnJhbWVIZWFkZXJTaXpl
IC0gYXJnQ291bnQsIGFyZ0NvdW50LCBleGNlcHRpb25WYWx1ZSk7CisgICAgICAgIEpTVmFsdWUq
IHJlc3VsdCA9IG1hY2hpbmUtPmNhbGxFdmFsKGNhbGxGcmFtZSwgdGhpc09iamVjdCwgc2NvcGVD
aGFpbiwgcmVnaXN0ZXJGaWxlLCByZWdpc3Rlck9mZnNldCAtIFJlZ2lzdGVyRmlsZTo6Q2FsbEZy
YW1lSGVhZGVyU2l6ZSAtIGFyZ0NvdW50LCBhcmdDb3VudCwgZXhjZXB0aW9uVmFsdWUpOwogICAg
ICAgICBWTV9DSEVDS19FWENFUFRJT05fQVJHKGV4Y2VwdGlvblZhbHVlKTsKICAgICAgICAgcmV0
dXJuIHJlc3VsdDsKICAgICB9CkBAIC01Mzg0LDkgKzUzMTQsOCBAQCBKU1ZhbHVlKiBNYWNoaW5l
OjpjdGlfb3BfY2FsbF9ldmFsKENUSV9BCiAKIHZvaWQqIE1hY2hpbmU6OmN0aV9vcF90aHJvdyhD
VElfQVJHUykKIHsKLSAgICBFeGVjU3RhdGUqIGV4ZWMgPSBBUkdfZXhlYzsKLSAgICBSZWdpc3Rl
ciogciA9IEFSR19yOwotICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gTWFjaGluZTo6Y29kZUJs
b2NrKHIpOworICAgIENhbGxGcmFtZSogY2FsbEZyYW1lID0gQVJHX2NhbGxGcmFtZTsKKyAgICBD
b2RlQmxvY2sqIGNvZGVCbG9jayA9IGNhbGxGcmFtZS0+Y29kZUJsb2NrKCk7CiAKICAgICBBU1NF
UlQoY29kZUJsb2NrLT5jdGlSZXR1cm5BZGRyZXNzVlBDTWFwLmNvbnRhaW5zKENUSV9SRVRVUk5f
QUREUkVTUykpOwogICAgIHVuc2lnbmVkIHZQQ0luZGV4ID0gY29kZUJsb2NrLT5jdGlSZXR1cm5B
ZGRyZXNzVlBDTWFwLmdldChDVElfUkVUVVJOX0FERFJFU1MpOwpAQCAtNTM5NCwxNSArNTMyMywx
NSBAQCB2b2lkKiBNYWNoaW5lOjpjdGlfb3BfdGhyb3coQ1RJX0FSR1MpCiAgICAgSlNWYWx1ZSog
ZXhjZXB0aW9uVmFsdWUgPSBBUkdfc3JjMTsKICAgICBBU1NFUlQoZXhjZXB0aW9uVmFsdWUpOwog
Ci0gICAgSW5zdHJ1Y3Rpb24qIGhhbmRsZXJWUEMgPSBBUkdfZ2xvYmFsRGF0YS0+bWFjaGluZS0+
dGhyb3dFeGNlcHRpb24oZXhlYywgZXhjZXB0aW9uVmFsdWUsIGNvZGVCbG9jay0+aW5zdHJ1Y3Rp
b25zLmJlZ2luKCkgKyB2UENJbmRleCwgciwgdHJ1ZSk7CisgICAgSW5zdHJ1Y3Rpb24qIGhhbmRs
ZXJWUEMgPSBBUkdfZ2xvYmFsRGF0YS0+bWFjaGluZS0+dGhyb3dFeGNlcHRpb24oY2FsbEZyYW1l
LCBleGNlcHRpb25WYWx1ZSwgY29kZUJsb2NrLT5pbnN0cnVjdGlvbnMuYmVnaW4oKSArIHZQQ0lu
ZGV4LCB0cnVlKTsKIAogICAgIGlmICghaGFuZGxlclZQQykgewogICAgICAgICAqQVJHX2V4Y2Vw
dGlvbiA9IGV4Y2VwdGlvblZhbHVlOwogICAgICAgICByZXR1cm4gSlNJbW1lZGlhdGU6Om51bGxJ
bW1lZGlhdGUoKTsKICAgICB9CiAKLSAgICBBUkdfc2V0UihyKTsKLSAgICB2b2lkKiBjYXRjaFJv
dXRpbmUgPSBNYWNoaW5lOjpjb2RlQmxvY2sociktPm5hdGl2ZUV4Y2VwdGlvbkNvZGVGb3JIYW5k
bGVyVlBDKGhhbmRsZXJWUEMpOworICAgIEFSR19zZXRDYWxsRnJhbWUoY2FsbEZyYW1lKTsKKyAg
ICB2b2lkKiBjYXRjaFJvdXRpbmUgPSBjYWxsRnJhbWUtPmNvZGVCbG9jaygpLT5uYXRpdmVFeGNl
cHRpb25Db2RlRm9ySGFuZGxlclZQQyhoYW5kbGVyVlBDKTsKICAgICBBU1NFUlQoY2F0Y2hSb3V0
aW5lKTsKICAgICBjdGlTZXRSZXR1cm5BZGRyZXNzKCZDVElfUkVUVVJOX0FERFJFU1MsIGNhdGNo
Um91dGluZSk7CiAgICAgcmV0dXJuIGV4Y2VwdGlvblZhbHVlOwpAQCAtNTQxMCwxMyArNTMzOSwx
MyBAQCB2b2lkKiBNYWNoaW5lOjpjdGlfb3BfdGhyb3coQ1RJX0FSR1MpCiAKIEpTUHJvcGVydHlO
YW1lSXRlcmF0b3IqIE1hY2hpbmU6OmN0aV9vcF9nZXRfcG5hbWVzKENUSV9BUkdTKQogewotICAg
IHJldHVybiBKU1Byb3BlcnR5TmFtZUl0ZXJhdG9yOjpjcmVhdGUoQVJHX2V4ZWMsIEFSR19zcmMx
KTsKKyAgICByZXR1cm4gSlNQcm9wZXJ0eU5hbWVJdGVyYXRvcjo6Y3JlYXRlKEFSR19jYWxsRnJh
bWUsIEFSR19zcmMxKTsKIH0KIAogSlNWYWx1ZSogTWFjaGluZTo6Y3RpX29wX25leHRfcG5hbWUo
Q1RJX0FSR1MpCiB7CiAgICAgSlNQcm9wZXJ0eU5hbWVJdGVyYXRvciogaXQgPSBBUkdfcG5pMTsK
LSAgICBKU1ZhbHVlKiB0ZW1wID0gaXQtPm5leHQoQVJHX2V4ZWMpOworICAgIEpTVmFsdWUqIHRl
bXAgPSBpdC0+bmV4dChBUkdfY2FsbEZyYW1lKTsKICAgICBpZiAoIXRlbXApCiAgICAgICAgIGl0
LT5pbnZhbGlkYXRlKCk7CiAgICAgcmV0dXJuIHRlbXA7CkBAIC01NDI0LDI1ICs1MzUzLDIwIEBA
IEpTVmFsdWUqIE1hY2hpbmU6OmN0aV9vcF9uZXh0X3BuYW1lKENUSV8KIAogdm9pZCBNYWNoaW5l
OjpjdGlfb3BfcHVzaF9zY29wZShDVElfQVJHUykKIHsKLSAgICBFeGVjU3RhdGUqIGV4ZWMgPSBB
UkdfZXhlYzsKLSAgICBKU1ZhbHVlKiB2ID0gQVJHX3NyYzE7Ci0KLSAgICBKU09iamVjdCogbyA9
IHYtPnRvT2JqZWN0KGV4ZWMpOworICAgIEpTT2JqZWN0KiBvID0gQVJHX3NyYzEtPnRvT2JqZWN0
KEFSR19jYWxsRnJhbWUpOwogICAgIFZNX0NIRUNLX0VYQ0VQVElPTl9WT0lEKCk7Ci0KLSAgICBS
ZWdpc3RlciogciA9IEFSR19yOwotICAgIHJbUmVnaXN0ZXJGaWxlOjpTY29wZUNoYWluXSA9IHNj
b3BlQ2hhaW4ociktPnB1c2gobyk7CisgICAgQVJHX2NhbGxGcmFtZS0+c2V0U2NvcGVDaGFpbihB
UkdfY2FsbEZyYW1lLT5zY29wZUNoYWluKCktPnB1c2gobykpOwogfQogCiB2b2lkIE1hY2hpbmU6
OmN0aV9vcF9wb3Bfc2NvcGUoQ1RJX0FSR1MpCiB7Ci0gICAgUmVnaXN0ZXIqIHIgPSBBUkdfcjsK
LSAgICByW1JlZ2lzdGVyRmlsZTo6U2NvcGVDaGFpbl0gPSBzY29wZUNoYWluKHIpLT5wb3AoKTsK
KyAgICBDYWxsRnJhbWUqIGNhbGxGcmFtZSA9IEFSR19jYWxsRnJhbWU7CisgICAgY2FsbEZyYW1l
LT5zZXRTY29wZUNoYWluKGNhbGxGcmFtZS0+c2NvcGVDaGFpbigpLT5wb3AoKSk7CiB9CiAKIEpT
VmFsdWUqIE1hY2hpbmU6OmN0aV9vcF90eXBlb2YoQ1RJX0FSR1MpCiB7Ci0gICAgcmV0dXJuIGpz
VHlwZVN0cmluZ0ZvclZhbHVlKEFSR19leGVjLCBBUkdfc3JjMSk7CisgICAgcmV0dXJuIGpzVHlw
ZVN0cmluZ0ZvclZhbHVlKEFSR19jYWxsRnJhbWUsIEFSR19zcmMxKTsKIH0KIAogSlNWYWx1ZSog
TWFjaGluZTo6Y3RpX29wX2lzX3VuZGVmaW5lZChDVElfQVJHUykKQEAgLTU1MDMsMjQgKzU0Mjcs
MjQgQEAgSlNWYWx1ZSogTWFjaGluZTo6Y3RpX29wX25zdHJpY3RlcShDVElfQQogSlNWYWx1ZSog
TWFjaGluZTo6Y3RpX29wX3RvX2pzbnVtYmVyKENUSV9BUkdTKQogewogICAgIEpTVmFsdWUqIHNy
YyA9IEFSR19zcmMxOwotICAgIEV4ZWNTdGF0ZSogZXhlYyA9IEFSR19leGVjOworICAgIENhbGxG
cmFtZSogY2FsbEZyYW1lID0gQVJHX2NhbGxGcmFtZTsKIAotICAgIEpTVmFsdWUqIHJlc3VsdCA9
IHNyYy0+dG9KU051bWJlcihleGVjKTsKKyAgICBKU1ZhbHVlKiByZXN1bHQgPSBzcmMtPnRvSlNO
dW1iZXIoY2FsbEZyYW1lKTsKICAgICBWTV9DSEVDS19FWENFUFRJT05fQVRfRU5EKCk7CiAgICAg
cmV0dXJuIHJlc3VsdDsKIH0KIAogSlNWYWx1ZSogTWFjaGluZTo6Y3RpX29wX2luKENUSV9BUkdT
KQogewotICAgIEV4ZWNTdGF0ZSogZXhlYyA9IEFSR19leGVjOworICAgIENhbGxGcmFtZSogY2Fs
bEZyYW1lID0gQVJHX2NhbGxGcmFtZTsKICAgICBKU1ZhbHVlKiBiYXNlVmFsID0gQVJHX3NyYzI7
CiAKICAgICBpZiAoIWJhc2VWYWwtPmlzT2JqZWN0KCkpIHsKLSAgICAgICAgUmVnaXN0ZXIqIHIg
PSBBUkdfcjsKLSAgICAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBNYWNoaW5lOjpjb2RlQmxv
Y2socik7CisgICAgICAgIENhbGxGcmFtZSogY2FsbEZyYW1lID0gQVJHX2NhbGxGcmFtZTsKKyAg
ICAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBjYWxsRnJhbWUtPmNvZGVCbG9jaygpOwogICAg
ICAgICBBU1NFUlQoY29kZUJsb2NrLT5jdGlSZXR1cm5BZGRyZXNzVlBDTWFwLmNvbnRhaW5zKENU
SV9SRVRVUk5fQUREUkVTUykpOwogICAgICAgICB1bnNpZ25lZCB2UENJbmRleCA9IGNvZGVCbG9j
ay0+Y3RpUmV0dXJuQWRkcmVzc1ZQQ01hcC5nZXQoQ1RJX1JFVFVSTl9BRERSRVNTKTsKLSAgICAg
ICAgZXhlYy0+c2V0RXhjZXB0aW9uKGNyZWF0ZUludmFsaWRQYXJhbUVycm9yKGV4ZWMsICJpbiIs
IGJhc2VWYWwsIGNvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zLmJlZ2luKCkgKyB2UENJbmRleCwgY29k
ZUJsb2NrKSk7CisgICAgICAgIGNhbGxGcmFtZS0+c2V0RXhjZXB0aW9uKGNyZWF0ZUludmFsaWRQ
YXJhbUVycm9yKGNhbGxGcmFtZSwgImluIiwgYmFzZVZhbCwgY29kZUJsb2NrLT5pbnN0cnVjdGlv
bnMuYmVnaW4oKSArIHZQQ0luZGV4LCBjb2RlQmxvY2spKTsKICAgICAgICAgVk1fVEhST1dfRVhD
RVBUSU9OKCk7CiAgICAgfQogCkBAIC01NTI5LDQ3ICs1NDUzLDQ3IEBAIEpTVmFsdWUqIE1hY2hp
bmU6OmN0aV9vcF9pbihDVElfQVJHUykKIAogICAgIHVpbnQzMl90IGk7CiAgICAgaWYgKHByb3BO
YW1lLT5nZXRVSW50MzIoaSkpCi0gICAgICAgIHJldHVybiBqc0Jvb2xlYW4oYmFzZU9iai0+aGFz
UHJvcGVydHkoZXhlYywgaSkpOworICAgICAgICByZXR1cm4ganNCb29sZWFuKGJhc2VPYmotPmhh
c1Byb3BlcnR5KGNhbGxGcmFtZSwgaSkpOwogCi0gICAgSWRlbnRpZmllciBwcm9wZXJ0eShleGVj
LCBwcm9wTmFtZS0+dG9TdHJpbmcoZXhlYykpOworICAgIElkZW50aWZpZXIgcHJvcGVydHkoY2Fs
bEZyYW1lLCBwcm9wTmFtZS0+dG9TdHJpbmcoY2FsbEZyYW1lKSk7CiAgICAgVk1fQ0hFQ0tfRVhD
RVBUSU9OKCk7Ci0gICAgcmV0dXJuIGpzQm9vbGVhbihiYXNlT2JqLT5oYXNQcm9wZXJ0eShleGVj
LCBwcm9wZXJ0eSkpOworICAgIHJldHVybiBqc0Jvb2xlYW4oYmFzZU9iai0+aGFzUHJvcGVydHko
Y2FsbEZyYW1lLCBwcm9wZXJ0eSkpOwogfQogCiBKU1ZhbHVlKiBNYWNoaW5lOjpjdGlfb3BfcHVz
aF9uZXdfc2NvcGUoQ1RJX0FSR1MpCiB7Ci0gICAgSlNPYmplY3QqIHNjb3BlID0gbmV3IChBUkdf
Z2xvYmFsRGF0YSkgSlNTdGF0aWNTY29wZU9iamVjdChBUkdfZXhlYywgKkFSR19pZDEsIEFSR19z
cmMyLCBEb250RGVsZXRlKTsKKyAgICBKU09iamVjdCogc2NvcGUgPSBuZXcgKEFSR19nbG9iYWxE
YXRhKSBKU1N0YXRpY1Njb3BlT2JqZWN0KEFSR19jYWxsRnJhbWUsICpBUkdfaWQxLCBBUkdfc3Jj
MiwgRG9udERlbGV0ZSk7CiAKLSAgICBSZWdpc3RlciogciA9IEFSR19yOwotICAgIHJbUmVnaXN0
ZXJGaWxlOjpTY29wZUNoYWluXSA9IHNjb3BlQ2hhaW4ociktPnB1c2goc2NvcGUpOworICAgIENh
bGxGcmFtZSogY2FsbEZyYW1lID0gQVJHX2NhbGxGcmFtZTsKKyAgICBjYWxsRnJhbWUtPnNldFNj
b3BlQ2hhaW4oY2FsbEZyYW1lLT5zY29wZUNoYWluKCktPnB1c2goc2NvcGUpKTsKICAgICByZXR1
cm4gc2NvcGU7CiB9CiAKIHZvaWQgTWFjaGluZTo6Y3RpX29wX2ptcF9zY29wZXMoQ1RJX0FSR1Mp
CiB7CiAgICAgdW5zaWduZWQgY291bnQgPSBBUkdfaW50MTsKLSAgICBSZWdpc3RlciogciA9IEFS
R19yOworICAgIENhbGxGcmFtZSogY2FsbEZyYW1lID0gQVJHX2NhbGxGcmFtZTsKIAotICAgIFNj
b3BlQ2hhaW5Ob2RlKiB0bXAgPSBzY29wZUNoYWluKHIpOworICAgIFNjb3BlQ2hhaW5Ob2RlKiB0
bXAgPSBjYWxsRnJhbWUtPnNjb3BlQ2hhaW4oKTsKICAgICB3aGlsZSAoY291bnQtLSkKICAgICAg
ICAgdG1wID0gdG1wLT5wb3AoKTsKLSAgICByW1JlZ2lzdGVyRmlsZTo6U2NvcGVDaGFpbl0gPSB0
bXA7CisgICAgY2FsbEZyYW1lLT5zZXRTY29wZUNoYWluKHRtcCk7CiB9CiAKIHZvaWQgTWFjaGlu
ZTo6Y3RpX29wX3B1dF9ieV9pbmRleChDVElfQVJHUykKIHsKLSAgICBFeGVjU3RhdGUqIGV4ZWMg
PSBBUkdfZXhlYzsKKyAgICBDYWxsRnJhbWUqIGNhbGxGcmFtZSA9IEFSR19jYWxsRnJhbWU7CiAg
ICAgdW5zaWduZWQgcHJvcGVydHkgPSBBUkdfaW50MjsKIAotICAgIEFSR19zcmMxLT5wdXQoZXhl
YywgcHJvcGVydHksIEFSR19zcmMzKTsKKyAgICBBUkdfc3JjMS0+cHV0KGNhbGxGcmFtZSwgcHJv
cGVydHksIEFSR19zcmMzKTsKIH0KIAogdm9pZCogTWFjaGluZTo6Y3RpX29wX3N3aXRjaF9pbW0o
Q1RJX0FSR1MpCiB7CiAgICAgSlNWYWx1ZSogc2NydXRpbmVlID0gQVJHX3NyYzE7CiAgICAgdW5z
aWduZWQgdGFibGVJbmRleCA9IEFSR19pbnQyOwotICAgIFJlZ2lzdGVyKiByID0gQVJHX3I7Ci0g
ICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBNYWNoaW5lOjpjb2RlQmxvY2socik7CisgICAgQ2Fs
bEZyYW1lKiBjYWxsRnJhbWUgPSBBUkdfY2FsbEZyYW1lOworICAgIENvZGVCbG9jayogY29kZUJs
b2NrID0gY2FsbEZyYW1lLT5jb2RlQmxvY2soKTsKIAogICAgIGlmIChKU0ltbWVkaWF0ZTo6aXNO
dW1iZXIoc2NydXRpbmVlKSkgewogICAgICAgICBpbnQzMl90IHZhbHVlID0gSlNJbW1lZGlhdGU6
OmdldFRydW5jYXRlZEludDMyKHNjcnV0aW5lZSk7CkBAIC01NTgzLDggKzU1MDcsOCBAQCB2b2lk
KiBNYWNoaW5lOjpjdGlfb3Bfc3dpdGNoX2NoYXIoQ1RJX0FSCiB7CiAgICAgSlNWYWx1ZSogc2Ny
dXRpbmVlID0gQVJHX3NyYzE7CiAgICAgdW5zaWduZWQgdGFibGVJbmRleCA9IEFSR19pbnQyOwot
ICAgIFJlZ2lzdGVyKiByID0gQVJHX3I7Ci0gICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBNYWNo
aW5lOjpjb2RlQmxvY2socik7CisgICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUgPSBBUkdfY2FsbEZy
YW1lOworICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gY2FsbEZyYW1lLT5jb2RlQmxvY2soKTsK
IAogICAgIHZvaWQqIHJlc3VsdCA9IGNvZGVCbG9jay0+Y2hhcmFjdGVyU3dpdGNoSnVtcFRhYmxl
c1t0YWJsZUluZGV4XS5jdGlEZWZhdWx0OwogCkBAIC01NjAxLDggKzU1MjUsOCBAQCB2b2lkKiBN
YWNoaW5lOjpjdGlfb3Bfc3dpdGNoX3N0cmluZyhDVElfCiB7CiAgICAgSlNWYWx1ZSogc2NydXRp
bmVlID0gQVJHX3NyYzE7CiAgICAgdW5zaWduZWQgdGFibGVJbmRleCA9IEFSR19pbnQyOwotICAg
IFJlZ2lzdGVyKiByID0gQVJHX3I7Ci0gICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBNYWNoaW5l
Ojpjb2RlQmxvY2socik7CisgICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUgPSBBUkdfY2FsbEZyYW1l
OworICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gY2FsbEZyYW1lLT5jb2RlQmxvY2soKTsKIAog
ICAgIHZvaWQqIHJlc3VsdCA9IGNvZGVCbG9jay0+c3RyaW5nU3dpdGNoSnVtcFRhYmxlc1t0YWJs
ZUluZGV4XS5jdGlEZWZhdWx0OwogCkBAIC01NjE2LDIxICs1NTQwLDIxIEBAIHZvaWQqIE1hY2hp
bmU6OmN0aV9vcF9zd2l0Y2hfc3RyaW5nKENUSV8KIAogSlNWYWx1ZSogTWFjaGluZTo6Y3RpX29w
X2RlbF9ieV92YWwoQ1RJX0FSR1MpCiB7Ci0gICAgRXhlY1N0YXRlKiBleGVjID0gQVJHX2V4ZWM7
CisgICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUgPSBBUkdfY2FsbEZyYW1lOwogCiAgICAgSlNWYWx1
ZSogYmFzZVZhbHVlID0gQVJHX3NyYzE7Ci0gICAgSlNPYmplY3QqIGJhc2VPYmogPSBiYXNlVmFs
dWUtPnRvT2JqZWN0KGV4ZWMpOyAvLyBtYXkgdGhyb3cKKyAgICBKU09iamVjdCogYmFzZU9iaiA9
IGJhc2VWYWx1ZS0+dG9PYmplY3QoY2FsbEZyYW1lKTsgLy8gbWF5IHRocm93CiAKICAgICBKU1Zh
bHVlKiBzdWJzY3JpcHQgPSBBUkdfc3JjMjsKICAgICBKU1ZhbHVlKiByZXN1bHQ7CiAgICAgdWlu
dDMyX3QgaTsKICAgICBpZiAoc3Vic2NyaXB0LT5nZXRVSW50MzIoaSkpCi0gICAgICAgIHJlc3Vs
dCA9IGpzQm9vbGVhbihiYXNlT2JqLT5kZWxldGVQcm9wZXJ0eShleGVjLCBpKSk7CisgICAgICAg
IHJlc3VsdCA9IGpzQm9vbGVhbihiYXNlT2JqLT5kZWxldGVQcm9wZXJ0eShjYWxsRnJhbWUsIGkp
KTsKICAgICBlbHNlIHsKICAgICAgICAgVk1fQ0hFQ0tfRVhDRVBUSU9OKCk7Ci0gICAgICAgIElk
ZW50aWZpZXIgcHJvcGVydHkoZXhlYywgc3Vic2NyaXB0LT50b1N0cmluZyhleGVjKSk7CisgICAg
ICAgIElkZW50aWZpZXIgcHJvcGVydHkoY2FsbEZyYW1lLCBzdWJzY3JpcHQtPnRvU3RyaW5nKGNh
bGxGcmFtZSkpOwogICAgICAgICBWTV9DSEVDS19FWENFUFRJT04oKTsKLSAgICAgICAgcmVzdWx0
ID0ganNCb29sZWFuKGJhc2VPYmotPmRlbGV0ZVByb3BlcnR5KGV4ZWMsIHByb3BlcnR5KSk7Cisg
ICAgICAgIHJlc3VsdCA9IGpzQm9vbGVhbihiYXNlT2JqLT5kZWxldGVQcm9wZXJ0eShjYWxsRnJh
bWUsIHByb3BlcnR5KSk7CiAgICAgfQogCiAgICAgVk1fQ0hFQ0tfRVhDRVBUSU9OX0FUX0VORCgp
OwpAQCAtNTYzOSw1NSArNTU2Myw1MiBAQCBKU1ZhbHVlKiBNYWNoaW5lOjpjdGlfb3BfZGVsX2J5
X3ZhbChDVElfCiAKIHZvaWQgTWFjaGluZTo6Y3RpX29wX3B1dF9nZXR0ZXIoQ1RJX0FSR1MpCiB7
Ci0gICAgRXhlY1N0YXRlKiBleGVjID0gQVJHX2V4ZWM7CisgICAgQ2FsbEZyYW1lKiBjYWxsRnJh
bWUgPSBBUkdfY2FsbEZyYW1lOwogCiAgICAgQVNTRVJUKEFSR19zcmMxLT5pc09iamVjdCgpKTsK
ICAgICBKU09iamVjdCogYmFzZU9iaiA9IHN0YXRpY19jYXN0PEpTT2JqZWN0Kj4oQVJHX3NyYzEp
OwogICAgIElkZW50aWZpZXImIGlkZW50ID0gKkFSR19pZDI7CiAgICAgQVNTRVJUKEFSR19zcmMz
LT5pc09iamVjdCgpKTsKLSAgICBiYXNlT2JqLT5kZWZpbmVHZXR0ZXIoZXhlYywgaWRlbnQsIHN0
YXRpY19jYXN0PEpTT2JqZWN0Kj4oQVJHX3NyYzMpKTsKKyAgICBiYXNlT2JqLT5kZWZpbmVHZXR0
ZXIoY2FsbEZyYW1lLCBpZGVudCwgc3RhdGljX2Nhc3Q8SlNPYmplY3QqPihBUkdfc3JjMykpOwog
fQogCiB2b2lkIE1hY2hpbmU6OmN0aV9vcF9wdXRfc2V0dGVyKENUSV9BUkdTKQogewotICAgIEV4
ZWNTdGF0ZSogZXhlYyA9IEFSR19leGVjOworICAgIENhbGxGcmFtZSogY2FsbEZyYW1lID0gQVJH
X2NhbGxGcmFtZTsKIAogICAgIEFTU0VSVChBUkdfc3JjMS0+aXNPYmplY3QoKSk7CiAgICAgSlNP
YmplY3QqIGJhc2VPYmogPSBzdGF0aWNfY2FzdDxKU09iamVjdCo+KEFSR19zcmMxKTsKICAgICBJ
ZGVudGlmaWVyJiBpZGVudCA9ICpBUkdfaWQyOwogICAgIEFTU0VSVChBUkdfc3JjMy0+aXNPYmpl
Y3QoKSk7Ci0gICAgYmFzZU9iai0+ZGVmaW5lU2V0dGVyKGV4ZWMsIGlkZW50LCBzdGF0aWNfY2Fz
dDxKU09iamVjdCo+KEFSR19zcmMzKSk7CisgICAgYmFzZU9iai0+ZGVmaW5lU2V0dGVyKGNhbGxG
cmFtZSwgaWRlbnQsIHN0YXRpY19jYXN0PEpTT2JqZWN0Kj4oQVJHX3NyYzMpKTsKIH0KIAogSlNW
YWx1ZSogTWFjaGluZTo6Y3RpX29wX25ld19lcnJvcihDVElfQVJHUykKIHsKLSAgICBFeGVjU3Rh
dGUqIGV4ZWMgPSBBUkdfZXhlYzsKLSAgICBSZWdpc3RlciogciA9IEFSR19yOwotICAgIENvZGVC
bG9jayogY29kZUJsb2NrID0gTWFjaGluZTo6Y29kZUJsb2NrKHIpOworICAgIENhbGxGcmFtZSog
Y2FsbEZyYW1lID0gQVJHX2NhbGxGcmFtZTsKKyAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IGNh
bGxGcmFtZS0+Y29kZUJsb2NrKCk7CiAgICAgdW5zaWduZWQgdHlwZSA9IEFSR19pbnQxOwogICAg
IEpTVmFsdWUqIG1lc3NhZ2UgPSBBUkdfc3JjMjsKICAgICB1bnNpZ25lZCBsaW5lTnVtYmVyID0g
QVJHX2ludDM7CiAKLSAgICByZXR1cm4gRXJyb3I6OmNyZWF0ZShleGVjLCBzdGF0aWNfY2FzdDxF
cnJvclR5cGU+KHR5cGUpLCBtZXNzYWdlLT50b1N0cmluZyhleGVjKSwgbGluZU51bWJlciwgY29k
ZUJsb2NrLT5vd25lck5vZGUtPnNvdXJjZUlEKCksIGNvZGVCbG9jay0+b3duZXJOb2RlLT5zb3Vy
Y2VVUkwoKSk7CisgICAgcmV0dXJuIEVycm9yOjpjcmVhdGUoY2FsbEZyYW1lLCBzdGF0aWNfY2Fz
dDxFcnJvclR5cGU+KHR5cGUpLCBtZXNzYWdlLT50b1N0cmluZyhjYWxsRnJhbWUpLCBsaW5lTnVt
YmVyLCBjb2RlQmxvY2stPm93bmVyTm9kZS0+c291cmNlSUQoKSwgY29kZUJsb2NrLT5vd25lck5v
ZGUtPnNvdXJjZVVSTCgpKTsKIH0KIAogdm9pZCBNYWNoaW5lOjpjdGlfb3BfZGVidWcoQ1RJX0FS
R1MpCiB7Ci0gICAgRXhlY1N0YXRlKiBleGVjID0gQVJHX2V4ZWM7Ci0gICAgUmVnaXN0ZXIqIHIg
PSBBUkdfcjsKKyAgICBDYWxsRnJhbWUqIGNhbGxGcmFtZSA9IEFSR19jYWxsRnJhbWU7CiAKICAg
ICBpbnQgZGVidWdIb29rSUQgPSBBUkdfaW50MTsKICAgICBpbnQgZmlyc3RMaW5lID0gQVJHX2lu
dDI7CiAgICAgaW50IGxhc3RMaW5lID0gQVJHX2ludDM7CiAKLSAgICBBUkdfZ2xvYmFsRGF0YS0+
bWFjaGluZS0+ZGVidWcoZXhlYywgciwgc3RhdGljX2Nhc3Q8RGVidWdIb29rSUQ+KGRlYnVnSG9v
a0lEKSwgZmlyc3RMaW5lLCBsYXN0TGluZSk7CisgICAgQVJHX2dsb2JhbERhdGEtPm1hY2hpbmUt
PmRlYnVnKGNhbGxGcmFtZSwgc3RhdGljX2Nhc3Q8RGVidWdIb29rSUQ+KGRlYnVnSG9va0lEKSwg
Zmlyc3RMaW5lLCBsYXN0TGluZSk7CiB9CiAKIHZvaWQqIE1hY2hpbmU6OmN0aV92bV90aHJvdyhD
VElfQVJHUykKIHsKLSAgICBFeGVjU3RhdGUqIGV4ZWMgPSBBUkdfZXhlYzsKLSAgICBSZWdpc3Rl
ciogciA9IEFSR19yOwotICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gTWFjaGluZTo6Y29kZUJs
b2NrKHIpOworICAgIENhbGxGcmFtZSogY2FsbEZyYW1lID0gQVJHX2NhbGxGcmFtZTsKKyAgICBD
b2RlQmxvY2sqIGNvZGVCbG9jayA9IGNhbGxGcmFtZS0+Y29kZUJsb2NrKCk7CiAKICAgICBBU1NF
UlQoY29kZUJsb2NrLT5jdGlSZXR1cm5BZGRyZXNzVlBDTWFwLmNvbnRhaW5zKEFSR19nbG9iYWxE
YXRhLT50aHJvd1JldHVybkFkZHJlc3MpKTsKICAgICB1bnNpZ25lZCB2UENJbmRleCA9IGNvZGVC
bG9jay0+Y3RpUmV0dXJuQWRkcmVzc1ZQQ01hcC5nZXQoQVJHX2dsb2JhbERhdGEtPnRocm93UmV0
dXJuQWRkcmVzcyk7CkBAIC01Njk2LDE1ICs1NjE3LDE1IEBAIHZvaWQqIE1hY2hpbmU6OmN0aV92
bV90aHJvdyhDVElfQVJHUykKICAgICBBU1NFUlQoZXhjZXB0aW9uVmFsdWUpOwogICAgIEFSR19n
bG9iYWxEYXRhLT5leGNlcHRpb24gPSAwOwogCi0gICAgSW5zdHJ1Y3Rpb24qIGhhbmRsZXJWUEMg
PSBBUkdfZ2xvYmFsRGF0YS0+bWFjaGluZS0+dGhyb3dFeGNlcHRpb24oZXhlYywgZXhjZXB0aW9u
VmFsdWUsIGNvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zLmJlZ2luKCkgKyB2UENJbmRleCwgciwgZmFs
c2UpOworICAgIEluc3RydWN0aW9uKiBoYW5kbGVyVlBDID0gQVJHX2dsb2JhbERhdGEtPm1hY2hp
bmUtPnRocm93RXhjZXB0aW9uKGNhbGxGcmFtZSwgZXhjZXB0aW9uVmFsdWUsIGNvZGVCbG9jay0+
aW5zdHJ1Y3Rpb25zLmJlZ2luKCkgKyB2UENJbmRleCwgZmFsc2UpOwogCiAgICAgaWYgKCFoYW5k
bGVyVlBDKSB7CiAgICAgICAgICpBUkdfZXhjZXB0aW9uID0gZXhjZXB0aW9uVmFsdWU7CiAgICAg
ICAgIHJldHVybiBKU0ltbWVkaWF0ZTo6bnVsbEltbWVkaWF0ZSgpOwogICAgIH0KIAotICAgIEFS
R19zZXRSKHIpOwotICAgIHZvaWQqIGNhdGNoUm91dGluZSA9IE1hY2hpbmU6OmNvZGVCbG9jayhy
KS0+bmF0aXZlRXhjZXB0aW9uQ29kZUZvckhhbmRsZXJWUEMoaGFuZGxlclZQQyk7CisgICAgQVJH
X3NldENhbGxGcmFtZShjYWxsRnJhbWUpOworICAgIHZvaWQqIGNhdGNoUm91dGluZSA9IGNhbGxG
cmFtZS0+Y29kZUJsb2NrKCktPm5hdGl2ZUV4Y2VwdGlvbkNvZGVGb3JIYW5kbGVyVlBDKGhhbmRs
ZXJWUEMpOwogICAgIEFTU0VSVChjYXRjaFJvdXRpbmUpOwogICAgIGN0aVNldFJldHVybkFkZHJl
c3MoJkNUSV9SRVRVUk5fQUREUkVTUywgY2F0Y2hSb3V0aW5lKTsKICAgICByZXR1cm4gZXhjZXB0
aW9uVmFsdWU7CkluZGV4OiBKYXZhU2NyaXB0Q29yZS9WTS9NYWNoaW5lLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gSmF2YVNjcmlwdENvcmUvVk0vTWFjaGluZS5oCShyZXZpc2lvbiAzNzMzMCkKKysrIEphdmFT
Y3JpcHRDb3JlL1ZNL01hY2hpbmUuaAkod29ya2luZyBjb3B5KQpAQCAtNDQsNyArNDQsNiBAQCBu
YW1lc3BhY2UgSlNDIHsKIAogICAgIGNsYXNzIENvZGVCbG9jazsKICAgICBjbGFzcyBFdmFsTm9k
ZTsKLSAgICBjbGFzcyBFeGVjU3RhdGU7CiAgICAgY2xhc3MgRnVuY3Rpb25Cb2R5Tm9kZTsKICAg
ICBjbGFzcyBJbnN0cnVjdGlvbjsKICAgICBjbGFzcyBJbnRlcm5hbEZ1bmN0aW9uOwpAQCAtOTUs
MTggKzk0LDE1IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgICAgIGJvb2wgaXNPcGNvZGUoT3Bj
b2RlIG9wY29kZSk7CiAgICAgICAgIAotICAgICAgICBKU1ZhbHVlKiBleGVjdXRlKFByb2dyYW1O
b2RlKiwgRXhlY1N0YXRlKiwgU2NvcGVDaGFpbk5vZGUqLCBKU09iamVjdCogdGhpc09iaiwgSlNW
YWx1ZSoqIGV4Y2VwdGlvbik7Ci0gICAgICAgIEpTVmFsdWUqIGV4ZWN1dGUoRnVuY3Rpb25Cb2R5
Tm9kZSosIEV4ZWNTdGF0ZSosIEpTRnVuY3Rpb24qLCBKU09iamVjdCogdGhpc09iaiwgY29uc3Qg
QXJnTGlzdCYgYXJncywgU2NvcGVDaGFpbk5vZGUqLCBKU1ZhbHVlKiogZXhjZXB0aW9uKTsKLSAg
ICAgICAgSlNWYWx1ZSogZXhlY3V0ZShFdmFsTm9kZSogZXZhbE5vZGUsIEV4ZWNTdGF0ZSogZXhl
YywgSlNPYmplY3QqIHRoaXNPYmosIFNjb3BlQ2hhaW5Ob2RlKiBzY29wZUNoYWluLCBKU1ZhbHVl
KiogZXhjZXB0aW9uKTsKLQotICAgICAgICBKU1ZhbHVlKiByZXRyaWV2ZUFyZ3VtZW50cyhFeGVj
U3RhdGUqLCBKU0Z1bmN0aW9uKikgY29uc3Q7Ci0gICAgICAgIEpTVmFsdWUqIHJldHJpZXZlQ2Fs
bGVyKEV4ZWNTdGF0ZSosIEludGVybmFsRnVuY3Rpb24qKSBjb25zdDsKLSAgICAgICAgdm9pZCBy
ZXRyaWV2ZUxhc3RDYWxsZXIoRXhlY1N0YXRlKiBleGVjLCBpbnQmIGxpbmVOdW1iZXIsIGludHB0
cl90JiBzb3VyY2VJRCwgVVN0cmluZyYgc291cmNlVVJMLCBKU1ZhbHVlKiYgZnVuY3Rpb24pIGNv
bnN0OworICAgICAgICBKU1ZhbHVlKiBleGVjdXRlKFByb2dyYW1Ob2RlKiwgQ2FsbEZyYW1lKiwg
U2NvcGVDaGFpbk5vZGUqLCBKU09iamVjdCogdGhpc09iaiwgSlNWYWx1ZSoqIGV4Y2VwdGlvbik7
CisgICAgICAgIEpTVmFsdWUqIGV4ZWN1dGUoRnVuY3Rpb25Cb2R5Tm9kZSosIENhbGxGcmFtZSos
IEpTRnVuY3Rpb24qLCBKU09iamVjdCogdGhpc09iaiwgY29uc3QgQXJnTGlzdCYgYXJncywgU2Nv
cGVDaGFpbk5vZGUqLCBKU1ZhbHVlKiogZXhjZXB0aW9uKTsKKyAgICAgICAgSlNWYWx1ZSogZXhl
Y3V0ZShFdmFsTm9kZSogZXZhbE5vZGUsIENhbGxGcmFtZSogZXhlYywgSlNPYmplY3QqIHRoaXNP
YmosIFNjb3BlQ2hhaW5Ob2RlKiBzY29wZUNoYWluLCBKU1ZhbHVlKiogZXhjZXB0aW9uKTsKKwor
ICAgICAgICBKU1ZhbHVlKiByZXRyaWV2ZUFyZ3VtZW50cyhDYWxsRnJhbWUqLCBKU0Z1bmN0aW9u
KikgY29uc3Q7CisgICAgICAgIEpTVmFsdWUqIHJldHJpZXZlQ2FsbGVyKENhbGxGcmFtZSosIElu
dGVybmFsRnVuY3Rpb24qKSBjb25zdDsKKyAgICAgICAgdm9pZCByZXRyaWV2ZUxhc3RDYWxsZXIo
Q2FsbEZyYW1lKiwgaW50JiBsaW5lTnVtYmVyLCBpbnRwdHJfdCYgc291cmNlSUQsIFVTdHJpbmcm
IHNvdXJjZVVSTCwgSlNWYWx1ZSomIGZ1bmN0aW9uKSBjb25zdDsKICAgICAgICAgCi0gICAgICAg
IHN0YXRpYyBTY29wZUNoYWluTm9kZSogc2NvcGVDaGFpbihjb25zdCBSZWdpc3RlciogcikgeyBy
ZXR1cm4gcltSZWdpc3RlckZpbGU6OlNjb3BlQ2hhaW5dLnNjb3BlQ2hhaW4oKTsgfQotICAgICAg
ICBzdGF0aWMgQ29kZUJsb2NrKiBjb2RlQmxvY2soY29uc3QgUmVnaXN0ZXIqIHIpIHsgcmV0dXJu
IHJbUmVnaXN0ZXJGaWxlOjpDb2RlQmxvY2tdLmNvZGVCbG9jaygpOyB9Ci0KLSAgICAgICAgdm9p
ZCBnZXRBcmd1bWVudHNEYXRhKFJlZ2lzdGVyKiBjYWxsRnJhbWUsIEpTRnVuY3Rpb24qJiwgcHRy
ZGlmZl90JiBmaXJzdFBhcmFtZXRlckluZGV4LCBSZWdpc3RlciomIGFyZ3YsIGludCYgYXJnYyk7
CisgICAgICAgIHZvaWQgZ2V0QXJndW1lbnRzRGF0YShDYWxsRnJhbWUqLCBKU0Z1bmN0aW9uKiYs
IHB0cmRpZmZfdCYgZmlyc3RQYXJhbWV0ZXJJbmRleCwgUmVnaXN0ZXIqJiBhcmd2LCBpbnQmIGFy
Z2MpOwogICAgICAgICB2b2lkIHNldFRpbWVvdXRUaW1lKHVuc2lnbmVkIHRpbWVvdXRUaW1lKSB7
IG1fdGltZW91dFRpbWUgPSB0aW1lb3V0VGltZTsgfQogICAgICAgICAKICAgICAgICAgdm9pZCBz
dGFydFRpbWVvdXRDaGVjaygpCkBAIC0yNDQsNDkgKzI0MCw0NyBAQCBuYW1lc3BhY2UgSlNDIHsK
IAogICAgICAgICBib29sIGlzSlNBcnJheShKU1ZhbHVlKiB2KSB7IHJldHVybiAhSlNJbW1lZGlh
dGU6OmlzSW1tZWRpYXRlKHYpICYmIHYtPmFzQ2VsbCgpLT52cHRyKCkgPT0gbV9qc0FycmF5VnB0
cjsgfQogICAgICAgICBib29sIGlzSlNTdHJpbmcoSlNWYWx1ZSogdikgeyByZXR1cm4gIUpTSW1t
ZWRpYXRlOjppc0ltbWVkaWF0ZSh2KSAmJiB2LT5hc0NlbGwoKS0+dnB0cigpID09IG1fanNTdHJp
bmdWcHRyOyB9Ci0gICAgICAgIAotICAgICAgICBBTFdBWVNfSU5MSU5FIHN0YXRpYyB2b2lkIGlu
aXRpYWxpemVDYWxsRnJhbWUoUmVnaXN0ZXIqIGNhbGxGcmFtZSwgQ29kZUJsb2NrKiwgSW5zdHJ1
Y3Rpb24qLCBTY29wZUNoYWluTm9kZSosIFJlZ2lzdGVyKiByLCBpbnQgcmV0dXJuVmFsdWVSZWdp
c3RlciwgaW50IGFyZ2MsIEpTVmFsdWUqIGZ1bmN0aW9uKTsKIAogICAgIHByaXZhdGU6CiAgICAg
ICAgIGVudW0gRXhlY3V0aW9uRmxhZyB7IE5vcm1hbCwgSW5pdGlhbGl6ZUFuZFJldHVybiB9Owog
Ci0gICAgICAgIE5FVkVSX0lOTElORSBKU1ZhbHVlKiBjYWxsRXZhbChFeGVjU3RhdGUqIGV4ZWMs
IEpTT2JqZWN0KiB0aGlzT2JqLCBTY29wZUNoYWluTm9kZSogc2NvcGVDaGFpbiwgUmVnaXN0ZXJG
aWxlKiwgUmVnaXN0ZXIqIHIsIGludCBhcmd2LCBpbnQgYXJnYywgSlNWYWx1ZSomIGV4Y2VwdGlv
blZhbHVlKTsKLSAgICAgICAgSlNWYWx1ZSogZXhlY3V0ZShFdmFsTm9kZSosIEV4ZWNTdGF0ZSos
IEpTT2JqZWN0KiB0aGlzT2JqLCBpbnQgcmVnaXN0ZXJPZmZzZXQsIFNjb3BlQ2hhaW5Ob2RlKiwg
SlNWYWx1ZSoqIGV4Y2VwdGlvbik7CisgICAgICAgIE5FVkVSX0lOTElORSBKU1ZhbHVlKiBjYWxs
RXZhbChDYWxsRnJhbWUqLCBKU09iamVjdCogdGhpc09iamVjdCwgU2NvcGVDaGFpbk5vZGUqLCBS
ZWdpc3RlckZpbGUqLCBpbnQgYXJndiwgaW50IGFyZ2MsIEpTVmFsdWUqJiBleGNlcHRpb25WYWx1
ZSk7CisgICAgICAgIEpTVmFsdWUqIGV4ZWN1dGUoRXZhbE5vZGUqLCBDYWxsRnJhbWUqLCBKU09i
amVjdCogdGhpc09iamVjdCwgaW50IHJlZ2lzdGVyT2Zmc2V0LCBTY29wZUNoYWluTm9kZSosIEpT
VmFsdWUqKiBleGNlcHRpb24pOwogCi0gICAgICAgIE5FVkVSX0lOTElORSB2b2lkIGRlYnVnKEV4
ZWNTdGF0ZSosIFJlZ2lzdGVyKiwgRGVidWdIb29rSUQsIGludCBmaXJzdExpbmUsIGludCBsYXN0
TGluZSk7CisgICAgICAgIE5FVkVSX0lOTElORSB2b2lkIGRlYnVnKENhbGxGcmFtZSosIERlYnVn
SG9va0lELCBpbnQgZmlyc3RMaW5lLCBpbnQgbGFzdExpbmUpOwogCi0gICAgICAgIE5FVkVSX0lO
TElORSBib29sIHJlc29sdmUoRXhlY1N0YXRlKiBleGVjLCBJbnN0cnVjdGlvbiogdlBDLCBSZWdp
c3RlciogciwgSlNWYWx1ZSomIGV4Y2VwdGlvblZhbHVlKTsKLSAgICAgICAgTkVWRVJfSU5MSU5F
IGJvb2wgcmVzb2x2ZVNraXAoRXhlY1N0YXRlKiBleGVjLCBJbnN0cnVjdGlvbiogdlBDLCBSZWdp
c3RlciogciwgSlNWYWx1ZSomIGV4Y2VwdGlvblZhbHVlKTsKLSAgICAgICAgTkVWRVJfSU5MSU5F
IGJvb2wgcmVzb2x2ZUdsb2JhbChFeGVjU3RhdGUqIGV4ZWMsIEluc3RydWN0aW9uKiB2UEMsIFJl
Z2lzdGVyKiByLCBKU1ZhbHVlKiYgZXhjZXB0aW9uVmFsdWUpOwotICAgICAgICBORVZFUl9JTkxJ
TkUgdm9pZCByZXNvbHZlQmFzZShFeGVjU3RhdGUqIGV4ZWMsIEluc3RydWN0aW9uKiB2UEMsIFJl
Z2lzdGVyKiByKTsKLSAgICAgICAgTkVWRVJfSU5MSU5FIGJvb2wgcmVzb2x2ZUJhc2VBbmRQcm9w
ZXJ0eShFeGVjU3RhdGUqIGV4ZWMsIEluc3RydWN0aW9uKiB2UEMsIFJlZ2lzdGVyKiByLCBKU1Zh
bHVlKiYgZXhjZXB0aW9uVmFsdWUpOwotICAgICAgICBORVZFUl9JTkxJTkUgU2NvcGVDaGFpbk5v
ZGUqIGNyZWF0ZUV4Y2VwdGlvblNjb3BlKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSW5zdHJ1Y3Rp
b24qIHZQQywgUmVnaXN0ZXIqIHIpOworICAgICAgICBORVZFUl9JTkxJTkUgYm9vbCByZXNvbHZl
KENhbGxGcmFtZSosIEluc3RydWN0aW9uKiwgSlNWYWx1ZSomIGV4Y2VwdGlvblZhbHVlKTsKKyAg
ICAgICAgTkVWRVJfSU5MSU5FIGJvb2wgcmVzb2x2ZVNraXAoQ2FsbEZyYW1lKiwgSW5zdHJ1Y3Rp
b24qLCBKU1ZhbHVlKiYgZXhjZXB0aW9uVmFsdWUpOworICAgICAgICBORVZFUl9JTkxJTkUgYm9v
bCByZXNvbHZlR2xvYmFsKENhbGxGcmFtZSosIEluc3RydWN0aW9uKiwgSlNWYWx1ZSomIGV4Y2Vw
dGlvblZhbHVlKTsKKyAgICAgICAgTkVWRVJfSU5MSU5FIHZvaWQgcmVzb2x2ZUJhc2UoQ2FsbEZy
YW1lKiwgSW5zdHJ1Y3Rpb24qIHZQQyk7CisgICAgICAgIE5FVkVSX0lOTElORSBib29sIHJlc29s
dmVCYXNlQW5kUHJvcGVydHkoQ2FsbEZyYW1lKiwgSW5zdHJ1Y3Rpb24qLCBKU1ZhbHVlKiYgZXhj
ZXB0aW9uVmFsdWUpOworICAgICAgICBORVZFUl9JTkxJTkUgU2NvcGVDaGFpbk5vZGUqIGNyZWF0
ZUV4Y2VwdGlvblNjb3BlKENhbGxGcmFtZSosIGNvbnN0IEluc3RydWN0aW9uKiB2UEMpOwogCi0g
ICAgICAgIE5FVkVSX0lOTElORSBib29sIHVud2luZENhbGxGcmFtZShFeGVjU3RhdGUqJiwgSlNW
YWx1ZSosIGNvbnN0IEluc3RydWN0aW9uKiYsIENvZGVCbG9jayomLCBSZWdpc3RlciomKTsKLSAg
ICAgICAgTkVWRVJfSU5MSU5FIEluc3RydWN0aW9uKiB0aHJvd0V4Y2VwdGlvbihFeGVjU3RhdGUq
LCBKU1ZhbHVlKiYsIGNvbnN0IEluc3RydWN0aW9uKiwgUmVnaXN0ZXIqJiwgYm9vbCk7Ci0gICAg
ICAgIE5FVkVSX0lOTElORSBib29sIHJlc29sdmVCYXNlQW5kRnVuYyhFeGVjU3RhdGUqIGV4ZWMs
IEluc3RydWN0aW9uKiB2UEMsIFJlZ2lzdGVyKiByLCBKU1ZhbHVlKiYgZXhjZXB0aW9uVmFsdWUp
OworICAgICAgICBORVZFUl9JTkxJTkUgYm9vbCB1bndpbmRDYWxsRnJhbWUoQ2FsbEZyYW1lKiYs
IEpTVmFsdWUqLCBjb25zdCBJbnN0cnVjdGlvbiomLCBDb2RlQmxvY2sqJik7CisgICAgICAgIE5F
VkVSX0lOTElORSBJbnN0cnVjdGlvbiogdGhyb3dFeGNlcHRpb24oQ2FsbEZyYW1lKiYsIEpTVmFs
dWUqJiwgY29uc3QgSW5zdHJ1Y3Rpb24qLCBib29sKTsKKyAgICAgICAgTkVWRVJfSU5MSU5FIGJv
b2wgcmVzb2x2ZUJhc2VBbmRGdW5jKENhbGxGcmFtZSosIEluc3RydWN0aW9uKiwgSlNWYWx1ZSom
IGV4Y2VwdGlvblZhbHVlKTsKIAotICAgICAgICBSZWdpc3RlciogY2FsbEZyYW1lKEV4ZWNTdGF0
ZSosIEludGVybmFsRnVuY3Rpb24qKSBjb25zdDsKKyAgICAgICAgc3RhdGljIENhbGxGcmFtZSog
ZmluZEZ1bmN0aW9uQ2FsbEZyYW1lKENhbGxGcmFtZSosIEludGVybmFsRnVuY3Rpb24qKTsKIAot
ICAgICAgICBKU1ZhbHVlKiBwcml2YXRlRXhlY3V0ZShFeGVjdXRpb25GbGFnLCBSZWdpc3RlckZp
bGUqLCBSZWdpc3RlciosIEpTVmFsdWUqKiBleGNlcHRpb24pOworICAgICAgICBKU1ZhbHVlKiBw
cml2YXRlRXhlY3V0ZShFeGVjdXRpb25GbGFnLCBSZWdpc3RlckZpbGUqLCBDYWxsRnJhbWUqLCBK
U1ZhbHVlKiogZXhjZXB0aW9uKTsKIAotICAgICAgICB2b2lkIGR1bXBDYWxsRnJhbWUoY29uc3Qg
UmVnaXN0ZXJGaWxlKiwgY29uc3QgUmVnaXN0ZXIqKTsKLSAgICAgICAgdm9pZCBkdW1wUmVnaXN0
ZXJzKGNvbnN0IFJlZ2lzdGVyRmlsZSosIGNvbnN0IFJlZ2lzdGVyKik7CisgICAgICAgIHZvaWQg
ZHVtcENhbGxGcmFtZShjb25zdCBSZWdpc3RlckZpbGUqLCBDYWxsRnJhbWUqKTsKKyAgICAgICAg
dm9pZCBkdW1wUmVnaXN0ZXJzKGNvbnN0IFJlZ2lzdGVyRmlsZSosIENhbGxGcmFtZSopOwogCiAg
ICAgICAgIEpTVmFsdWUqIGNoZWNrVGltZW91dChKU0dsb2JhbE9iamVjdCopOwogICAgICAgICB2
b2lkIHJlc2V0VGltZW91dENoZWNrKCk7CiAKLSAgICAgICAgdm9pZCB0cnlDYWNoZUdldEJ5SUQo
RXhlY1N0YXRlKiwgQ29kZUJsb2NrKiwgSW5zdHJ1Y3Rpb24qIHZQQywgSlNWYWx1ZSogYmFzZVZh
bHVlLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIGNvbnN0IFByb3BlcnR5U2xvdCYp
OworICAgICAgICB2b2lkIHRyeUNhY2hlR2V0QnlJRChDYWxsRnJhbWUqLCBDb2RlQmxvY2sqLCBJ
bnN0cnVjdGlvbiosIEpTVmFsdWUqIGJhc2VWYWx1ZSwgY29uc3QgSWRlbnRpZmllciYgcHJvcGVy
dHlOYW1lLCBjb25zdCBQcm9wZXJ0eVNsb3QmKTsKICAgICAgICAgdm9pZCB1bmNhY2hlR2V0QnlJ
RChDb2RlQmxvY2sqLCBJbnN0cnVjdGlvbiogdlBDKTsKLSAgICAgICAgdm9pZCB0cnlDYWNoZVB1
dEJ5SUQoRXhlY1N0YXRlKiBleGVjLCBDb2RlQmxvY2sqLCBJbnN0cnVjdGlvbiogdlBDLCBKU1Zh
bHVlKiBiYXNlVmFsdWUsIGNvbnN0IFB1dFByb3BlcnR5U2xvdCYpOworICAgICAgICB2b2lkIHRy
eUNhY2hlUHV0QnlJRChDYWxsRnJhbWUqLCBDb2RlQmxvY2sqLCBJbnN0cnVjdGlvbiosIEpTVmFs
dWUqIGJhc2VWYWx1ZSwgY29uc3QgUHV0UHJvcGVydHlTbG90Jik7CiAgICAgICAgIHZvaWQgdW5j
YWNoZVB1dEJ5SUQoQ29kZUJsb2NrKiwgSW5zdHJ1Y3Rpb24qIHZQQyk7CiAKICNpZiBFTkFCTEUo
Q1RJKQotICAgICAgICB2b2lkIHRyeUNUSUNhY2hlR2V0QnlJRChFeGVjU3RhdGUqLCBDb2RlQmxv
Y2sqLCB2b2lkKiByZXR1cm5BZGRyZXNzLCBKU1ZhbHVlKiBiYXNlVmFsdWUsIGNvbnN0IElkZW50
aWZpZXImIHByb3BlcnR5TmFtZSwgY29uc3QgUHJvcGVydHlTbG90Jik7Ci0gICAgICAgIHZvaWQg
dHJ5Q1RJQ2FjaGVQdXRCeUlEKEV4ZWNTdGF0ZSosIENvZGVCbG9jayosIHZvaWQqIHJldHVybkFk
ZHJlc3MsIEpTVmFsdWUqIGJhc2VWYWx1ZSwgY29uc3QgUHV0UHJvcGVydHlTbG90Jik7CisgICAg
ICAgIHZvaWQgdHJ5Q1RJQ2FjaGVHZXRCeUlEKENhbGxGcmFtZSosIENvZGVCbG9jayosIHZvaWQq
IHJldHVybkFkZHJlc3MsIEpTVmFsdWUqIGJhc2VWYWx1ZSwgY29uc3QgSWRlbnRpZmllciYgcHJv
cGVydHlOYW1lLCBjb25zdCBQcm9wZXJ0eVNsb3QmKTsKKyAgICAgICAgdm9pZCB0cnlDVElDYWNo
ZVB1dEJ5SUQoQ2FsbEZyYW1lKiwgQ29kZUJsb2NrKiwgdm9pZCogcmV0dXJuQWRkcmVzcywgSlNW
YWx1ZSogYmFzZVZhbHVlLCBjb25zdCBQdXRQcm9wZXJ0eVNsb3QmKTsKIAotICAgICAgICB2b2lk
KiBnZXRDVElBcnJheUxlbmd0aFRyYW1wb2xpbmUoRXhlY1N0YXRlKiwgQ29kZUJsb2NrKik7Ci0g
ICAgICAgIHZvaWQqIGdldENUSVN0cmluZ0xlbmd0aFRyYW1wb2xpbmUoRXhlY1N0YXRlKiwgQ29k
ZUJsb2NrKik7CisgICAgICAgIHZvaWQqIGdldENUSUFycmF5TGVuZ3RoVHJhbXBvbGluZShDYWxs
RnJhbWUqLCBDb2RlQmxvY2sqKTsKKyAgICAgICAgdm9pZCogZ2V0Q1RJU3RyaW5nTGVuZ3RoVHJh
bXBvbGluZShDYWxsRnJhbWUqLCBDb2RlQmxvY2sqKTsKIAogICAgICAgICB2b2lkKiBtX2N0aUFy
cmF5TGVuZ3RoVHJhbXBvbGluZTsKICAgICAgICAgdm9pZCogbV9jdGlTdHJpbmdMZW5ndGhUcmFt
cG9saW5lOwpAQCAtMzE0LDM3ICszMDgsNiBAQCBuYW1lc3BhY2UgSlNDIHsKICNlbmRpZgogICAg
IH07CiAKLSAgICBBTFdBWVNfSU5MSU5FIHZvaWQgTWFjaGluZTo6aW5pdGlhbGl6ZUNhbGxGcmFt
ZShSZWdpc3RlciogY2FsbEZyYW1lLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgSW5zdHJ1Y3Rpb24q
IHZQQywgU2NvcGVDaGFpbk5vZGUqIHNjb3BlQ2hhaW4sIFJlZ2lzdGVyKiByLCBpbnQgcmV0dXJu
VmFsdWVSZWdpc3RlciwgaW50IGFyZ2MsIEpTVmFsdWUqIGZ1bmN0aW9uKQotICAgIHsKLSAgICAg
ICAgQVNTRVJUKHIpOyAvLyB1c2UgbWFrZUhvc3RDYWxsRnJhbWVQb2ludGVyKDApIHRvIGNyZWF0
ZSBhIGhvc3QgY2FsbCBmcmFtZSBzZW50aW5lbC4KLSAgICAgICAgY2FsbEZyYW1lW1JlZ2lzdGVy
RmlsZTo6Q29kZUJsb2NrXSA9IGNvZGVCbG9jazsKLSAgICAgICAgY2FsbEZyYW1lW1JlZ2lzdGVy
RmlsZTo6U2NvcGVDaGFpbl0gPSBzY29wZUNoYWluOwotICAgICAgICBjYWxsRnJhbWVbUmVnaXN0
ZXJGaWxlOjpDYWxsZXJSZWdpc3RlcnNdID0gcjsKLSAgICAgICAgY2FsbEZyYW1lW1JlZ2lzdGVy
RmlsZTo6UmV0dXJuUENdID0gdlBDOwotICAgICAgICBjYWxsRnJhbWVbUmVnaXN0ZXJGaWxlOjpS
ZXR1cm5WYWx1ZVJlZ2lzdGVyXSA9IHJldHVyblZhbHVlUmVnaXN0ZXI7Ci0gICAgICAgIGNhbGxG
cmFtZVtSZWdpc3RlckZpbGU6OkFyZ3VtZW50Q291bnRdID0gYXJnYzsgLy8gb3JpZ2luYWwgYXJn
dW1lbnQgY291bnQgKGZvciB0aGUgc2FrZSBvZiB0aGUgImFyZ3VtZW50cyIgb2JqZWN0KQotICAg
ICAgICBjYWxsRnJhbWVbUmVnaXN0ZXJGaWxlOjpDYWxsZWVdID0gZnVuY3Rpb247Ci0gICAgICAg
IGNhbGxGcmFtZVtSZWdpc3RlckZpbGU6Ok9wdGlvbmFsQ2FsbGVlQWN0aXZhdGlvbl0gPSBudWxs
SlNWYWx1ZTsKLSAgICAgICAgY2FsbEZyYW1lW1JlZ2lzdGVyRmlsZTo6T3B0aW9uYWxDYWxsZWVB
cmd1bWVudHNdID0gbnVsbEpTVmFsdWU7Ci0gICAgfQotCi0gICAgY29uc3QgaW50cHRyX3QgSG9z
dENhbGxGcmFtZU1hc2sgPSAxOwotCi0gICAgaW5saW5lIFJlZ2lzdGVyKiBtYWtlSG9zdENhbGxG
cmFtZVBvaW50ZXIoUmVnaXN0ZXIqIGNhbGxGcmFtZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBy
ZWludGVycHJldF9jYXN0PFJlZ2lzdGVyKj4ocmVpbnRlcnByZXRfY2FzdDxpbnRwdHJfdD4oY2Fs
bEZyYW1lKSB8IEhvc3RDYWxsRnJhbWVNYXNrKTsKLSAgICB9Ci0KLSAgICBpbmxpbmUgYm9vbCBp
c0hvc3RDYWxsRnJhbWUoUmVnaXN0ZXIqIGNhbGxGcmFtZSkKLSAgICB7Ci0gICAgICAgIHJldHVy
biByZWludGVycHJldF9jYXN0PGludHB0cl90PihjYWxsRnJhbWUpICYgSG9zdENhbGxGcmFtZU1h
c2s7Ci0gICAgfQotCi0gICAgaW5saW5lIFJlZ2lzdGVyKiBzdHJpcEhvc3RDYWxsRnJhbWVCaXQo
UmVnaXN0ZXIqIGNhbGxGcmFtZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiByZWludGVycHJldF9j
YXN0PFJlZ2lzdGVyKj4ocmVpbnRlcnByZXRfY2FzdDxpbnRwdHJfdD4oY2FsbEZyYW1lKSAmIH5I
b3N0Q2FsbEZyYW1lTWFzayk7Ci0gICAgfQotCiB9IC8vIG5hbWVzcGFjZSBKU0MKIAogI2VuZGlm
IC8vIE1hY2hpbmVfaApJbmRleDogSmF2YVNjcmlwdENvcmUvVk0vUmVnaXN0ZXIuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9WTS9SZWdpc3Rlci5oCShyZXZpc2lvbiAzNzMzMCkKKysr
IEphdmFTY3JpcHRDb3JlL1ZNL1JlZ2lzdGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTM0LDEzICsz
NCwxOSBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAorICAgIGNsYXNzIEFyZ3VtZW50czsKICAgICBj
bGFzcyBDb2RlQmxvY2s7CiAgICAgY2xhc3MgRXhlY1N0YXRlOworICAgIGNsYXNzIEpTQWN0aXZh
dGlvbjsKKyAgICBjbGFzcyBKU0Z1bmN0aW9uOwogICAgIGNsYXNzIEpTUHJvcGVydHlOYW1lSXRl
cmF0b3I7CiAgICAgY2xhc3MgSlNWYWx1ZTsKICAgICBjbGFzcyBTY29wZUNoYWluTm9kZTsKKwog
ICAgIHN0cnVjdCBJbnN0cnVjdGlvbjsKLSAgICAKKworICAgIHR5cGVkZWYgRXhlY1N0YXRlIENh
bGxGcmFtZTsKKwogICAgIHN0YXRpYyBKU1ZhbHVlKiBjb25zdCBudWxsSlNWYWx1ZSA9IDA7CiAK
ICAgICBjbGFzcyBSZWdpc3RlciB7CkBAIC00OCw5NCArNTQsMTEzIEBAIG5hbWVzcGFjZSBKU0Mg
ewogICAgICAgICBSZWdpc3RlcigpOwogICAgICAgICBSZWdpc3RlcihKU1ZhbHVlKik7CiAKLSAg
ICAgICAgSlNWYWx1ZSoganNWYWx1ZShFeGVjU3RhdGUqKSBjb25zdDsKKyAgICAgICAgSlNWYWx1
ZSoganNWYWx1ZShDYWxsRnJhbWUqKSBjb25zdDsKICAgICAgICAgSlNWYWx1ZSogZ2V0SlNWYWx1
ZSgpIGNvbnN0OwogCiAgICAgICAgIGJvb2wgbWFya2VkKCkgY29uc3Q7CiAgICAgICAgIHZvaWQg
bWFyaygpOwogICAgICAgICAKICAgICBwcml2YXRlOgorICAgICAgICBmcmllbmQgY2xhc3MgRXhl
Y1N0YXRlOwogICAgICAgICBmcmllbmQgY2xhc3MgTWFjaGluZTsKIAotICAgICAgICAvLyBPbmx5
IHRoZSBNYWNoaW5lIHNob3VsZCB1c2UgdGhlc2UgZnVuY3Rpb25zLgorICAgICAgICAvLyBPbmx5
IENhbGxGcmFtZSBhbmQgTWFjaGluZSBzaG91bGQgdXNlIHRoZXNlIGZ1bmN0aW9ucy4KKworICAg
ICAgICBSZWdpc3RlcihpbnRwdHJfdCk7CiAKKyAgICAgICAgUmVnaXN0ZXIoSlNBY3RpdmF0aW9u
Kik7CisgICAgICAgIFJlZ2lzdGVyKEFyZ3VtZW50cyopOworICAgICAgICBSZWdpc3RlcihDYWxs
RnJhbWUqKTsKICAgICAgICAgUmVnaXN0ZXIoQ29kZUJsb2NrKik7CisgICAgICAgIFJlZ2lzdGVy
KEpTRnVuY3Rpb24qKTsKKyAgICAgICAgUmVnaXN0ZXIoSlNQcm9wZXJ0eU5hbWVJdGVyYXRvciop
OwogICAgICAgICBSZWdpc3RlcihTY29wZUNoYWluTm9kZSopOwotICAgICAgICBSZWdpc3Rlcihp
bnRwdHJfdCk7Ci0gICAgICAgIFJlZ2lzdGVyKFJlZ2lzdGVyKik7CiAgICAgICAgIFJlZ2lzdGVy
KEluc3RydWN0aW9uKik7Ci0gICAgICAgIFJlZ2lzdGVyKEpTUHJvcGVydHlOYW1lSXRlcmF0b3Iq
KTsKLSAgICAgICAgZXhwbGljaXQgUmVnaXN0ZXIodm9pZCopOwogCisgICAgICAgIGludHB0cl90
IGkoKSBjb25zdDsKKyAgICAgICAgdm9pZCogdigpIGNvbnN0OworCisgICAgICAgIEpTQWN0aXZh
dGlvbiogYWN0aXZhdGlvbigpIGNvbnN0OworICAgICAgICBBcmd1bWVudHMqIGFyZ3VtZW50cygp
IGNvbnN0OworICAgICAgICBDYWxsRnJhbWUqIGNhbGxGcmFtZSgpIGNvbnN0OwogICAgICAgICBD
b2RlQmxvY2sqIGNvZGVCbG9jaygpIGNvbnN0OworICAgICAgICBKU0Z1bmN0aW9uKiBmdW5jdGlv
bigpIGNvbnN0OworICAgICAgICBKU1Byb3BlcnR5TmFtZUl0ZXJhdG9yKiBwcm9wZXJ0eU5hbWVJ
dGVyYXRvcigpIGNvbnN0OwogICAgICAgICBTY29wZUNoYWluTm9kZSogc2NvcGVDaGFpbigpIGNv
bnN0OwotICAgICAgICBpbnRwdHJfdCBpKCkgY29uc3Q7Ci0gICAgICAgIFJlZ2lzdGVyKiByKCkg
Y29uc3Q7CiAgICAgICAgIEluc3RydWN0aW9uKiB2UEMoKSBjb25zdDsKLSAgICAgICAgSlNQcm9w
ZXJ0eU5hbWVJdGVyYXRvcioganNQcm9wZXJ0eU5hbWVJdGVyYXRvcigpIGNvbnN0OwotICAgICAg
ICB2b2lkKiB2KCkgY29uc3Q7CiAKICAgICAgICAgdW5pb24gewotICAgICAgICBwcml2YXRlOgot
ICAgICAgICAgICAgZnJpZW5kIGNsYXNzIFJlZ2lzdGVyOworICAgICAgICAgICAgaW50cHRyX3Qg
aTsKKyAgICAgICAgICAgIHZvaWQqIHY7CisgICAgICAgICAgICBKU1ZhbHVlKiB2YWx1ZTsKIAor
ICAgICAgICAgICAgSlNBY3RpdmF0aW9uKiBhY3RpdmF0aW9uOworICAgICAgICAgICAgQXJndW1l
bnRzKiBhcmd1bWVudHM7CisgICAgICAgICAgICBDYWxsRnJhbWUqIGNhbGxGcmFtZTsKICAgICAg
ICAgICAgIENvZGVCbG9jayogY29kZUJsb2NrOwotICAgICAgICAgICAgSW5zdHJ1Y3Rpb24qIHZQ
QzsKLSAgICAgICAgICAgIEpTVmFsdWUqIGpzVmFsdWU7CisgICAgICAgICAgICBKU0Z1bmN0aW9u
KiBmdW5jdGlvbjsKKyAgICAgICAgICAgIEpTUHJvcGVydHlOYW1lSXRlcmF0b3IqIHByb3BlcnR5
TmFtZUl0ZXJhdG9yOwogICAgICAgICAgICAgU2NvcGVDaGFpbk5vZGUqIHNjb3BlQ2hhaW47Ci0g
ICAgICAgICAgICBKU1Byb3BlcnR5TmFtZUl0ZXJhdG9yKiBqc1Byb3BlcnR5TmFtZUl0ZXJhdG9y
OwotICAgICAgICAgICAgUmVnaXN0ZXIqIHI7Ci0gICAgICAgICAgICB2b2lkKiB2OwotICAgICAg
ICAgICAgaW50cHRyX3QgaTsKKyAgICAgICAgICAgIEluc3RydWN0aW9uKiB2UEM7CiAgICAgICAg
IH0gdTsKIAogI2lmbmRlZiBOREVCVUcKICAgICAgICAgZW51bSB7Ci0gICAgICAgICAgICBDb2Rl
QmxvY2tUeXBlID0gMCwgCi0gICAgICAgICAgICBJbnN0cnVjdGlvblR5cGUsIAotICAgICAgICAg
ICAgSlNWYWx1ZVR5cGUsIAotICAgICAgICAgICAgU2NvcGVDaGFpbk5vZGVUeXBlLCAKLSAgICAg
ICAgICAgIEpTUHJvcGVydHlOYW1lSXRlcmF0b3JUeXBlLCAKLSAgICAgICAgICAgIFJlZ2lzdGVy
VHlwZSwgCi0gICAgICAgICAgICBJbnRUeXBlCisgICAgICAgICAgICBFbXB0eVR5cGUsCisKKyAg
ICAgICAgICAgIEludFR5cGUsCisgICAgICAgICAgICBWYWx1ZVR5cGUsCisKKyAgICAgICAgICAg
IEFjdGl2YXRpb25UeXBlLAorICAgICAgICAgICAgQXJndW1lbnRzVHlwZSwKKyAgICAgICAgICAg
IENhbGxGcmFtZVR5cGUsCisgICAgICAgICAgICBDb2RlQmxvY2tUeXBlLAorICAgICAgICAgICAg
RnVuY3Rpb25UeXBlLAorICAgICAgICAgICAgSW5zdHJ1Y3Rpb25UeXBlLAorICAgICAgICAgICAg
UHJvcGVydHlOYW1lSXRlcmF0b3JUeXBlLAorICAgICAgICAgICAgUmVnaXN0ZXJUeXBlLAorICAg
ICAgICAgICAgU2NvcGVDaGFpbk5vZGVUeXBlCiAgICAgICAgIH0gbV90eXBlOwogI2VuZGlmCi0K
LS8vIEZJWE1FOiBUaGUgY29tbWVudGVkIG91dCBBU1NFUlRzIGJlbG93IGFyZSB2YWxpZDsgTkRF
QlVHIENUSSBzaG91bGQgc2V0IHRoZXNlIHdoZW4gdXAgdG8gZGF0ZS4KLS8vICAgICAgICBzdGF0
aWMgaW5saW5lIHB0cmRpZmZfdCBvZmZzZXRPZl90eXBlKCkKLS8vICAgICAgICB7Ci0vLyAgICAg
ICAgICAgIHJldHVybiBPQkpFQ1RfT0ZGU0VUKFJlZ2lzdGVyLCBtX3R5cGUpOwotLy8gICAgICAg
IH0KICAgICB9OwogCisjaWZuZGVmIE5ERUJVRworICAgICNkZWZpbmUgU0VUX1RZUEUodHlwZSkg
bV90eXBlID0gKHR5cGUpCisgICAgLy8gRklYTUU6IFRoZSBDVEkgY29kZSB0byBwdXQgdmFsdWUg
aW50byByZWdpc3RlcnMgZG9lc24ndCBzZXQgbV90eXBlLgorICAgIC8vIE9uY2UgaXQgZG9lcywg
d2UgY2FuIHR1cm4gdGhpcyBhc3NlcnRpb24gYmFjayBvbi4KKyAgICAjZGVmaW5lIEFTU0VSVF9U
WVBFKHR5cGUpCisjZWxzZQorICAgICNkZWZpbmUgU0VUX1RZUEUodHlwZSkKKyAgICAjZGVmaW5l
IEFTU0VSVF9UWVBFKHR5cGUpCisjZW5kaWYKKwogICAgIEFMV0FZU19JTkxJTkUgUmVnaXN0ZXI6
OlJlZ2lzdGVyKCkKICAgICB7CiAjaWZuZGVmIE5ERUJVRworICAgICAgICBTRVRfVFlQRShFbXB0
eVR5cGUpOwogICAgICAgICAqdGhpcyA9IG51bGxKU1ZhbHVlOwogI2VuZGlmCiAgICAgfQogCiAg
ICAgQUxXQVlTX0lOTElORSBSZWdpc3Rlcjo6UmVnaXN0ZXIoSlNWYWx1ZSogdikKICAgICB7Ci0j
aWZuZGVmIE5ERUJVRwotICAgICAgICBtX3R5cGUgPSBKU1ZhbHVlVHlwZTsKLSNlbmRpZgotICAg
ICAgICB1LmpzVmFsdWUgPSB2OworICAgICAgICBTRVRfVFlQRShWYWx1ZVR5cGUpOworICAgICAg
ICB1LnZhbHVlID0gdjsKICAgICB9CiAgICAgCiAgICAgLy8gVGhpcyBmdW5jdGlvbiBpcyBzY2Fm
Zm9sZGluZyBmb3IgbGVnYWN5IGNsaWVudHMuIEl0IHdpbGwgZXZlbnR1YWxseSBnbyBhd2F5Lgot
ICAgIEFMV0FZU19JTkxJTkUgSlNWYWx1ZSogUmVnaXN0ZXI6OmpzVmFsdWUoRXhlY1N0YXRlKikg
Y29uc3QKKyAgICBBTFdBWVNfSU5MSU5FIEpTVmFsdWUqIFJlZ2lzdGVyOjpqc1ZhbHVlKENhbGxG
cmFtZSopIGNvbnN0CiAgICAgewogICAgICAgICAvLyBPbmNlIHJlZ2lzdGVycyBob2xkIGRvdWJs
ZXMsIHRoaXMgZnVuY3Rpb24gd2lsbCBhbGxvY2F0ZSBhIEpTVmFsdWUqCiAgICAgICAgIC8vIGlm
IHRoZSByZWdpc3RlciBkb2Vzbid0IGhvbGQgb25lIGFscmVhZHkuIAotLy8gICAgICAgIEFTU0VS
VChtX3R5cGUgPT0gSlNWYWx1ZVR5cGUpOwotICAgICAgICByZXR1cm4gdS5qc1ZhbHVlOworICAg
ICAgICBBU1NFUlRfVFlQRShWYWx1ZVR5cGUpOworICAgICAgICByZXR1cm4gdS52YWx1ZTsKICAg
ICB9CiAgICAgCiAgICAgQUxXQVlTX0lOTElORSBKU1ZhbHVlKiBSZWdpc3Rlcjo6Z2V0SlNWYWx1
ZSgpIGNvbnN0CiAgICAgewotLy8gICAgICAgIEFTU0VSVChtX3R5cGUgPT0gSlNWYWx1ZVR5cGUp
OwotICAgICAgICByZXR1cm4gdS5qc1ZhbHVlOworICAgICAgICBBU1NFUlRfVFlQRShKU1ZhbHVl
VHlwZSk7CisgICAgICAgIHJldHVybiB1LnZhbHVlOwogICAgIH0KICAgICAKICAgICBBTFdBWVNf
SU5MSU5FIGJvb2wgUmVnaXN0ZXI6Om1hcmtlZCgpIGNvbnN0CkBAIC0xNTAsMTAwICsxNzUsMTIy
IEBAIG5hbWVzcGFjZSBKU0MgewogICAgIAogICAgIC8vIE1hY2hpbmUgZnVuY3Rpb25zCiAKKyAg
ICBBTFdBWVNfSU5MSU5FIFJlZ2lzdGVyOjpSZWdpc3RlcihBcmd1bWVudHMqIGFyZ3VtZW50cykK
KyAgICB7CisgICAgICAgIFNFVF9UWVBFKEFyZ3VtZW50c1R5cGUpOworICAgICAgICB1LmFyZ3Vt
ZW50cyA9IGFyZ3VtZW50czsKKyAgICB9CisKKyAgICBBTFdBWVNfSU5MSU5FIFJlZ2lzdGVyOjpS
ZWdpc3RlcihKU0FjdGl2YXRpb24qIGFjdGl2YXRpb24pCisgICAgeworICAgICAgICBTRVRfVFlQ
RShBY3RpdmF0aW9uVHlwZSk7CisgICAgICAgIHUuYWN0aXZhdGlvbiA9IGFjdGl2YXRpb247Cisg
ICAgfQorCisgICAgQUxXQVlTX0lOTElORSBSZWdpc3Rlcjo6UmVnaXN0ZXIoQ2FsbEZyYW1lKiBj
YWxsRnJhbWUpCisgICAgeworICAgICAgICBTRVRfVFlQRShDYWxsRnJhbWVUeXBlKTsKKyAgICAg
ICAgdS5jYWxsRnJhbWUgPSBjYWxsRnJhbWU7CisgICAgfQorCiAgICAgQUxXQVlTX0lOTElORSBS
ZWdpc3Rlcjo6UmVnaXN0ZXIoQ29kZUJsb2NrKiBjb2RlQmxvY2spCiAgICAgewotI2lmbmRlZiBO
REVCVUcKLSAgICAgICAgbV90eXBlID0gQ29kZUJsb2NrVHlwZTsKLSNlbmRpZgorICAgICAgICBT
RVRfVFlQRShDb2RlQmxvY2tUeXBlKTsKICAgICAgICAgdS5jb2RlQmxvY2sgPSBjb2RlQmxvY2s7
CiAgICAgfQogCisgICAgQUxXQVlTX0lOTElORSBSZWdpc3Rlcjo6UmVnaXN0ZXIoSlNGdW5jdGlv
biogZnVuY3Rpb24pCisgICAgeworICAgICAgICBTRVRfVFlQRShGdW5jdGlvblR5cGUpOworICAg
ICAgICB1LmZ1bmN0aW9uID0gZnVuY3Rpb247CisgICAgfQorCiAgICAgQUxXQVlTX0lOTElORSBS
ZWdpc3Rlcjo6UmVnaXN0ZXIoSW5zdHJ1Y3Rpb24qIHZQQykKICAgICB7Ci0jaWZuZGVmIE5ERUJV
RwotICAgICAgICBtX3R5cGUgPSBJbnN0cnVjdGlvblR5cGU7Ci0jZW5kaWYKKyAgICAgICAgU0VU
X1RZUEUoSW5zdHJ1Y3Rpb25UeXBlKTsKICAgICAgICAgdS52UEMgPSB2UEM7CiAgICAgfQogCiAg
ICAgQUxXQVlTX0lOTElORSBSZWdpc3Rlcjo6UmVnaXN0ZXIoU2NvcGVDaGFpbk5vZGUqIHNjb3Bl
Q2hhaW4pCiAgICAgewotI2lmbmRlZiBOREVCVUcKLSAgICAgICAgbV90eXBlID0gU2NvcGVDaGFp
bk5vZGVUeXBlOwotI2VuZGlmCisgICAgICAgIFNFVF9UWVBFKFNjb3BlQ2hhaW5Ob2RlVHlwZSk7
CiAgICAgICAgIHUuc2NvcGVDaGFpbiA9IHNjb3BlQ2hhaW47CiAgICAgfQogCi0gICAgQUxXQVlT
X0lOTElORSBSZWdpc3Rlcjo6UmVnaXN0ZXIoSlNQcm9wZXJ0eU5hbWVJdGVyYXRvcioganNQcm9w
ZXJ0eU5hbWVJdGVyYXRvcikKKyAgICBBTFdBWVNfSU5MSU5FIFJlZ2lzdGVyOjpSZWdpc3RlcihK
U1Byb3BlcnR5TmFtZUl0ZXJhdG9yKiBwcm9wZXJ0eU5hbWVJdGVyYXRvcikKICAgICB7Ci0jaWZu
ZGVmIE5ERUJVRwotICAgICAgICBtX3R5cGUgPSBKU1Byb3BlcnR5TmFtZUl0ZXJhdG9yVHlwZTsK
LSNlbmRpZgotICAgICAgICB1LmpzUHJvcGVydHlOYW1lSXRlcmF0b3IgPSBqc1Byb3BlcnR5TmFt
ZUl0ZXJhdG9yOwotICAgIH0KLQotICAgIEFMV0FZU19JTkxJTkUgUmVnaXN0ZXI6OlJlZ2lzdGVy
KFJlZ2lzdGVyKiByKQotICAgIHsKLSNpZm5kZWYgTkRFQlVHCi0gICAgICAgIG1fdHlwZSA9IFJl
Z2lzdGVyVHlwZTsKLSNlbmRpZgotICAgICAgICB1LnIgPSByOworICAgICAgICBTRVRfVFlQRShQ
cm9wZXJ0eU5hbWVJdGVyYXRvclR5cGUpOworICAgICAgICB1LnByb3BlcnR5TmFtZUl0ZXJhdG9y
ID0gcHJvcGVydHlOYW1lSXRlcmF0b3I7CiAgICAgfQogCiAgICAgQUxXQVlTX0lOTElORSBSZWdp
c3Rlcjo6UmVnaXN0ZXIoaW50cHRyX3QgaSkKICAgICB7Ci0jaWZuZGVmIE5ERUJVRwotICAgICAg
ICBtX3R5cGUgPSBJbnRUeXBlOwotI2VuZGlmCisgICAgICAgIFNFVF9UWVBFKEludFR5cGUpOwog
ICAgICAgICB1LmkgPSBpOwogICAgIH0KIAotICAgIEFMV0FZU19JTkxJTkUgUmVnaXN0ZXI6OlJl
Z2lzdGVyKHZvaWQqIHYpCisgICAgQUxXQVlTX0lOTElORSBpbnRwdHJfdCBSZWdpc3Rlcjo6aSgp
IGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlRfVFlQRShJbnRUeXBlKTsKKyAgICAgICAgcmV0
dXJuIHUuaTsKKyAgICB9CisgICAgCisgICAgQUxXQVlTX0lOTElORSB2b2lkKiBSZWdpc3Rlcjo6
digpIGNvbnN0CiAgICAgewotICAgICAgICB1LnYgPSB2OworICAgICAgICByZXR1cm4gdS52Owog
ICAgIH0KIAotICAgIEFMV0FZU19JTkxJTkUgQ29kZUJsb2NrKiBSZWdpc3Rlcjo6Y29kZUJsb2Nr
KCkgY29uc3QKKyAgICBBTFdBWVNfSU5MSU5FIEpTQWN0aXZhdGlvbiogUmVnaXN0ZXI6OmFjdGl2
YXRpb24oKSBjb25zdAogICAgIHsKLS8vICAgICAgICBBU1NFUlQobV90eXBlID09IENvZGVCbG9j
a1R5cGUpOwotICAgICAgICByZXR1cm4gdS5jb2RlQmxvY2s7CisgICAgICAgIEFTU0VSVF9UWVBF
KEFjdGl2YXRpb25UeXBlKTsKKyAgICAgICAgcmV0dXJuIHUuYWN0aXZhdGlvbjsKICAgICB9CiAg
ICAgCi0gICAgQUxXQVlTX0lOTElORSBTY29wZUNoYWluTm9kZSogUmVnaXN0ZXI6OnNjb3BlQ2hh
aW4oKSBjb25zdAorICAgIEFMV0FZU19JTkxJTkUgQXJndW1lbnRzKiBSZWdpc3Rlcjo6YXJndW1l
bnRzKCkgY29uc3QKICAgICB7Ci0vLyAgICAgICAgQVNTRVJUKG1fdHlwZSA9PSBTY29wZUNoYWlu
Tm9kZVR5cGUpOwotICAgICAgICByZXR1cm4gdS5zY29wZUNoYWluOworICAgICAgICBBU1NFUlRf
VFlQRShBcmd1bWVudHNUeXBlKTsKKyAgICAgICAgcmV0dXJuIHUuYXJndW1lbnRzOwogICAgIH0K
ICAgICAKLSAgICBBTFdBWVNfSU5MSU5FIGludHB0cl90IFJlZ2lzdGVyOjppKCkgY29uc3QKKyAg
ICBBTFdBWVNfSU5MSU5FIENhbGxGcmFtZSogUmVnaXN0ZXI6OmNhbGxGcmFtZSgpIGNvbnN0CiAg
ICAgewotLy8gICAgICAgIEFTU0VSVChtX3R5cGUgPT0gSW50VHlwZSk7Ci0gICAgICAgIHJldHVy
biB1Lmk7CisgICAgICAgIEFTU0VSVF9UWVBFKENhbGxGcmFtZVR5cGUpOworICAgICAgICByZXR1
cm4gdS5jYWxsRnJhbWU7CiAgICAgfQogICAgIAotICAgIEFMV0FZU19JTkxJTkUgUmVnaXN0ZXIq
IFJlZ2lzdGVyOjpyKCkgY29uc3QKKyAgICBBTFdBWVNfSU5MSU5FIENvZGVCbG9jayogUmVnaXN0
ZXI6OmNvZGVCbG9jaygpIGNvbnN0CiAgICAgewotLy8gICAgICAgIEFTU0VSVChtX3R5cGUgPT0g
UmVnaXN0ZXJUeXBlKTsKLSAgICAgICAgcmV0dXJuIHUucjsKKyAgICAgICAgQVNTRVJUX1RZUEUo
Q29kZUJsb2NrVHlwZSk7CisgICAgICAgIHJldHVybiB1LmNvZGVCbG9jazsKICAgICB9CiAgICAg
Ci0gICAgQUxXQVlTX0lOTElORSBJbnN0cnVjdGlvbiogUmVnaXN0ZXI6OnZQQygpIGNvbnN0Cisg
ICAgQUxXQVlTX0lOTElORSBKU0Z1bmN0aW9uKiBSZWdpc3Rlcjo6ZnVuY3Rpb24oKSBjb25zdAog
ICAgIHsKLS8vICAgICAgICBBU1NFUlQobV90eXBlID09IEluc3RydWN0aW9uVHlwZSk7Ci0gICAg
ICAgIHJldHVybiB1LnZQQzsKKyAgICAgICAgQVNTRVJUX1RZUEUoRnVuY3Rpb25UeXBlKTsKKyAg
ICAgICAgcmV0dXJuIHUuZnVuY3Rpb247CiAgICAgfQogICAgIAotICAgIEFMV0FZU19JTkxJTkUg
SlNQcm9wZXJ0eU5hbWVJdGVyYXRvciogUmVnaXN0ZXI6OmpzUHJvcGVydHlOYW1lSXRlcmF0b3Io
KSBjb25zdAorICAgIEFMV0FZU19JTkxJTkUgSlNQcm9wZXJ0eU5hbWVJdGVyYXRvciogUmVnaXN0
ZXI6OnByb3BlcnR5TmFtZUl0ZXJhdG9yKCkgY29uc3QKICAgICB7Ci0vLyAgICAgICAgQVNTRVJU
KG1fdHlwZSA9PSBKU1Byb3BlcnR5TmFtZUl0ZXJhdG9yVHlwZSk7Ci0gICAgICAgIHJldHVybiB1
LmpzUHJvcGVydHlOYW1lSXRlcmF0b3I7CisgICAgICAgIEFTU0VSVF9UWVBFKFByb3BlcnR5TmFt
ZUl0ZXJhdG9yVHlwZSk7CisgICAgICAgIHJldHVybiB1LnByb3BlcnR5TmFtZUl0ZXJhdG9yOwog
ICAgIH0KICAgICAKLSAgICBBTFdBWVNfSU5MSU5FIHZvaWQqIFJlZ2lzdGVyOjp2KCkgY29uc3QK
KyAgICBBTFdBWVNfSU5MSU5FIFNjb3BlQ2hhaW5Ob2RlKiBSZWdpc3Rlcjo6c2NvcGVDaGFpbigp
IGNvbnN0CiAgICAgewotICAgICAgICByZXR1cm4gdS52OworICAgICAgICBBU1NFUlRfVFlQRShT
Y29wZUNoYWluTm9kZVR5cGUpOworICAgICAgICByZXR1cm4gdS5zY29wZUNoYWluOworICAgIH0K
KyAgICAKKyAgICBBTFdBWVNfSU5MSU5FIEluc3RydWN0aW9uKiBSZWdpc3Rlcjo6dlBDKCkgY29u
c3QKKyAgICB7CisgICAgICAgIEFTU0VSVF9UWVBFKEluc3RydWN0aW9uVHlwZSk7CisgICAgICAg
IHJldHVybiB1LnZQQzsKICAgICB9CiAKKyAgICAjdW5kZWYgU0VUX1RZUEUKKyAgICAjdW5kZWYg
QVNTRVJUX1RZUEUKKwogfSAvLyBuYW1lc3BhY2UgSlNDCiAKIG5hbWVzcGFjZSBXVEYgewpJbmRl
eDogSmF2YVNjcmlwdENvcmUvVk0vUmVnaXN0ZXJGaWxlLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNj
cmlwdENvcmUvVk0vUmVnaXN0ZXJGaWxlLmgJKHJldmlzaW9uIDM3MzMwKQorKysgSmF2YVNjcmlw
dENvcmUvVk0vUmVnaXN0ZXJGaWxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTk0LDcgKzk0LDcgQEAg
bmFtZXNwYWNlIEpTQyB7CiAKICAgICAgICAgICAgIENvZGVCbG9jayA9IC05LAogICAgICAgICAg
ICAgU2NvcGVDaGFpbiA9IC04LAotICAgICAgICAgICAgQ2FsbGVyUmVnaXN0ZXJzID0gLTcsCisg
ICAgICAgICAgICBDYWxsZXJGcmFtZSA9IC03LAogICAgICAgICAgICAgUmV0dXJuUEMgPSAtNiwK
ICAgICAgICAgICAgIFJldHVyblZhbHVlUmVnaXN0ZXIgPSAtNSwKICAgICAgICAgICAgIEFyZ3Vt
ZW50Q291bnQgPSAtNCwKSW5kZXg6IEphdmFTY3JpcHRDb3JlL2tqcy9Bcmd1bWVudHMuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9ranMvQXJndW1lbnRzLmgJKHJldmlzaW9uIDM3MzMw
KQorKysgSmF2YVNjcmlwdENvcmUva2pzL0FyZ3VtZW50cy5oCSh3b3JraW5nIGNvcHkpCkBAIC01
MSw3ICs1MSw3IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgY2xhc3MgQXJndW1lbnRzIDogcHVi
bGljIEpTT2JqZWN0IHsKICAgICBwdWJsaWM6Ci0gICAgICAgIEFyZ3VtZW50cyhFeGVjU3RhdGUq
LCBSZWdpc3RlciogY2FsbEZyYW1lKTsKKyAgICAgICAgQXJndW1lbnRzKENhbGxGcmFtZSopOwog
ICAgICAgICB2aXJ0dWFsIH5Bcmd1bWVudHMoKTsKIAogICAgICAgICBzdGF0aWMgY29uc3QgQ2xh
c3NJbmZvIGluZm87CkBAIC03NCwyNiArNzQsMjYgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICAg
ICAgdmlydHVhbCBjb25zdCBDbGFzc0luZm8qIGNsYXNzSW5mbygpIGNvbnN0IHsgcmV0dXJuICZp
bmZvOyB9CiAKLSAgICAgICAgdm9pZCBpbml0KEV4ZWNTdGF0ZSosIFJlZ2lzdGVyKiBjYWxsRnJh
bWUpOworICAgICAgICB2b2lkIGluaXQoQ2FsbEZyYW1lKik7CiAKICAgICAgICAgT3duUHRyPEFy
Z3VtZW50c0RhdGE+IGQ7CiAgICAgfTsKIAotICAgIGlubGluZSBBcmd1bWVudHM6OkFyZ3VtZW50
cyhFeGVjU3RhdGUqIGV4ZWMsIFJlZ2lzdGVyKiBjYWxsRnJhbWUpCi0gICAgICAgIDogSlNPYmpl
Y3QoZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5hcmd1bWVudHNTdHJ1Y3R1cmUoKSkKKyAg
ICBpbmxpbmUgQXJndW1lbnRzOjpBcmd1bWVudHMoQ2FsbEZyYW1lKiBjYWxsRnJhbWUpCisgICAg
ICAgIDogSlNPYmplY3QoY2FsbEZyYW1lLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCktPmFyZ3VtZW50
c1N0cnVjdHVyZSgpKQogICAgICAgICAsIGQobmV3IEFyZ3VtZW50c0RhdGEpCiAgICAgewogICAg
ICAgICBKU0Z1bmN0aW9uKiBjYWxsZWU7CiAgICAgICAgIHB0cmRpZmZfdCBmaXJzdFBhcmFtZXRl
ckluZGV4OwogICAgICAgICBSZWdpc3RlciogYXJndjsKICAgICAgICAgaW50IG51bUFyZ3VtZW50
czsKLSAgICAgICAgZXhlYy0+bWFjaGluZSgpLT5nZXRBcmd1bWVudHNEYXRhKGNhbGxGcmFtZSwg
Y2FsbGVlLCBmaXJzdFBhcmFtZXRlckluZGV4LCBhcmd2LCBudW1Bcmd1bWVudHMpOworICAgICAg
ICBjYWxsRnJhbWUtPm1hY2hpbmUoKS0+Z2V0QXJndW1lbnRzRGF0YShjYWxsRnJhbWUsIGNhbGxl
ZSwgZmlyc3RQYXJhbWV0ZXJJbmRleCwgYXJndiwgbnVtQXJndW1lbnRzKTsKIAogICAgICAgICBk
LT5udW1QYXJhbWV0ZXJzID0gY2FsbGVlLT5tX2JvZHktPnBhcmFtZXRlckNvdW50KCk7CiAgICAg
ICAgIGQtPmZpcnN0UGFyYW1ldGVySW5kZXggPSBmaXJzdFBhcmFtZXRlckluZGV4OwogICAgICAg
ICBkLT5udW1Bcmd1bWVudHMgPSBudW1Bcmd1bWVudHM7CiAKLSAgICAgICAgZC0+cmVnaXN0ZXJz
ID0gY2FsbEZyYW1lOworICAgICAgICBkLT5yZWdpc3RlcnMgPSBjYWxsRnJhbWUtPnJlZ2lzdGVy
cygpOwogCiAgICAgICAgIFJlZ2lzdGVyKiBleHRyYUFyZ3VtZW50czsKICAgICAgICAgaWYgKGQt
Pm51bUFyZ3VtZW50cyA8PSBkLT5udW1QYXJhbWV0ZXJzKQpJbmRleDogSmF2YVNjcmlwdENvcmUv
a2pzL0RlYnVnZ2VyQ2FsbEZyYW1lLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9r
anMvRGVidWdnZXJDYWxsRnJhbWUuY3BwCShyZXZpc2lvbiAzNzMzMCkKKysrIEphdmFTY3JpcHRD
b3JlL2tqcy9EZWJ1Z2dlckNhbGxGcmFtZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM4LDE4ICsz
OCwxOCBAQCBuYW1lc3BhY2UgSlNDIHsKIAogY29uc3QgVVN0cmluZyogRGVidWdnZXJDYWxsRnJh
bWU6OmZ1bmN0aW9uTmFtZSgpIGNvbnN0CiB7Ci0gICAgaWYgKCFtX2NvZGVCbG9jaykKKyAgICBp
ZiAoIW1fY2FsbEZyYW1lLT5jb2RlQmxvY2soKSkKICAgICAgICAgcmV0dXJuIDA7CiAKLSAgICBK
U0Z1bmN0aW9uKiBmdW5jdGlvbiA9IHN0YXRpY19jYXN0PEpTRnVuY3Rpb24qPihtX3JlZ2lzdGVy
c1tSZWdpc3RlckZpbGU6OkNhbGxlZV0uZ2V0SlNWYWx1ZSgpKTsKKyAgICBKU0Z1bmN0aW9uKiBm
dW5jdGlvbiA9IHN0YXRpY19jYXN0PEpTRnVuY3Rpb24qPihtX2NhbGxGcmFtZS0+Y2FsbGVlKCkp
OwogICAgIGlmICghZnVuY3Rpb24pCiAgICAgICAgIHJldHVybiAwOwotICAgIHJldHVybiAmZnVu
Y3Rpb24tPm5hbWUobV9zY29wZUNoYWluLT5nbG9iYWxEYXRhKTsKKyAgICByZXR1cm4gJmZ1bmN0
aW9uLT5uYW1lKCZtX2NhbGxGcmFtZS0+Z2xvYmFsRGF0YSgpKTsKIH0KIAogRGVidWdnZXJDYWxs
RnJhbWU6OlR5cGUgRGVidWdnZXJDYWxsRnJhbWU6OnR5cGUoKSBjb25zdAogewotICAgIGlmICht
X3JlZ2lzdGVyc1tSZWdpc3RlckZpbGU6OkNhbGxlZV0uZ2V0SlNWYWx1ZSgpKQorICAgIGlmICht
X2NhbGxGcmFtZS0+Y2FsbGVlKCkpCiAgICAgICAgIHJldHVybiBGdW5jdGlvblR5cGU7CiAKICAg
ICByZXR1cm4gUHJvZ3JhbVR5cGU7CkBAIC01NywyNSArNTcsMjUgQEAgRGVidWdnZXJDYWxsRnJh
bWU6OlR5cGUgRGVidWdnZXJDYWxsRnJhbQogCiBKU09iamVjdCogRGVidWdnZXJDYWxsRnJhbWU6
OnRoaXNPYmplY3QoKSBjb25zdAogewotICAgIGlmICghbV9jb2RlQmxvY2spCisgICAgaWYgKCFt
X2NhbGxGcmFtZS0+Y29kZUJsb2NrKCkpCiAgICAgICAgIHJldHVybiAwOwogCi0gICAgcmV0dXJu
IHN0YXRpY19jYXN0PEpTT2JqZWN0Kj4obV9yZWdpc3RlcnNbbV9jb2RlQmxvY2stPnRoaXNSZWdp
c3Rlcl0uZ2V0SlNWYWx1ZSgpKTsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8SlNPYmplY3QqPiht
X2NhbGxGcmFtZS0+cmVnaXN0ZXJzKClbbV9jYWxsRnJhbWUtPmNvZGVCbG9jaygpLT50aGlzUmVn
aXN0ZXJdLmdldEpTVmFsdWUoKSk7CiB9CiAKIEpTVmFsdWUqIERlYnVnZ2VyQ2FsbEZyYW1lOjpl
dmFsdWF0ZShjb25zdCBVU3RyaW5nJiBzY3JpcHQsIEpTVmFsdWUqJiBleGNlcHRpb24pIGNvbnN0
CiB7Ci0gICAgaWYgKCFtX2NvZGVCbG9jaykKKyAgICBpZiAoIW1fY2FsbEZyYW1lLT5jb2RlQmxv
Y2soKSkKICAgICAgICAgcmV0dXJuIDA7CiAKICAgICBpbnQgZXJyTGluZTsKICAgICBVU3RyaW5n
IGVyck1zZzsKICAgICBTb3VyY2VDb2RlIHNvdXJjZSA9IG1ha2VTb3VyY2Uoc2NyaXB0KTsKLSAg
ICBSZWZQdHI8RXZhbE5vZGU+IGV2YWxOb2RlID0gbV9zY29wZUNoYWluLT5nbG9iYWxEYXRhLT5w
YXJzZXItPnBhcnNlPEV2YWxOb2RlPihDYWxsRnJhbWU6OmNyZWF0ZShtX3JlZ2lzdGVycyksIHNv
dXJjZSwgJmVyckxpbmUsICZlcnJNc2cpOworICAgIFJlZlB0cjxFdmFsTm9kZT4gZXZhbE5vZGUg
PSBtX2NhbGxGcmFtZS0+c2NvcGVDaGFpbigpLT5nbG9iYWxEYXRhLT5wYXJzZXItPnBhcnNlPEV2
YWxOb2RlPihtX2NhbGxGcmFtZSwgc291cmNlLCAmZXJyTGluZSwgJmVyck1zZyk7CiAgICAgaWYg
KCFldmFsTm9kZSkKLSAgICAgICAgcmV0dXJuIEVycm9yOjpjcmVhdGUoQ2FsbEZyYW1lOjpjcmVh
dGUobV9yZWdpc3RlcnMpLCBTeW50YXhFcnJvciwgZXJyTXNnLCBlcnJMaW5lLCBzb3VyY2UucHJv
dmlkZXIoKS0+YXNJRCgpLCBzb3VyY2UucHJvdmlkZXIoKS0+dXJsKCkpOworICAgICAgICByZXR1
cm4gRXJyb3I6OmNyZWF0ZShtX2NhbGxGcmFtZSwgU3ludGF4RXJyb3IsIGVyck1zZywgZXJyTGlu
ZSwgc291cmNlLnByb3ZpZGVyKCktPmFzSUQoKSwgc291cmNlLnByb3ZpZGVyKCktPnVybCgpKTsK
IAotICAgIHJldHVybiBtX3Njb3BlQ2hhaW4tPmdsb2JhbERhdGEtPm1hY2hpbmUtPmV4ZWN1dGUo
ZXZhbE5vZGUuZ2V0KCksIENhbGxGcmFtZTo6Y3JlYXRlKG1fcmVnaXN0ZXJzKSwgdGhpc09iamVj
dCgpLCBtX3Njb3BlQ2hhaW4sICZleGNlcHRpb24pOworICAgIHJldHVybiBtX2NhbGxGcmFtZS0+
c2NvcGVDaGFpbigpLT5nbG9iYWxEYXRhLT5tYWNoaW5lLT5leGVjdXRlKGV2YWxOb2RlLmdldCgp
LCBtX2NhbGxGcmFtZSwgdGhpc09iamVjdCgpLCBtX2NhbGxGcmFtZS0+c2NvcGVDaGFpbigpLCAm
ZXhjZXB0aW9uKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBKYXZhU2NyaXB0Q29y
ZS9ranMvRGVidWdnZXJDYWxsRnJhbWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9r
anMvRGVidWdnZXJDYWxsRnJhbWUuaAkocmV2aXNpb24gMzczMzApCisrKyBKYXZhU2NyaXB0Q29y
ZS9ranMvRGVidWdnZXJDYWxsRnJhbWUuaAkod29ya2luZyBjb3B5KQpAQCAtMjksMzYgKzI5LDIy
IEBACiAjaWZuZGVmIERlYnVnZ2VyQ2FsbEZyYW1lX2gKICNkZWZpbmUgRGVidWdnZXJDYWxsRnJh
bWVfaAogCisjaW5jbHVkZSAiRXhlY1N0YXRlLmgiCisKIG5hbWVzcGFjZSBKU0MgewogICAgIAot
ICAgIGNsYXNzIENvZGVCbG9jazsKLSAgICBjbGFzcyBFeGVjU3RhdGU7Ci0gICAgY2xhc3MgSlNH
bG9iYWxPYmplY3Q7Ci0gICAgY2xhc3MgSlNPYmplY3Q7Ci0gICAgY2xhc3MgSlNWYWx1ZTsKLSAg
ICBjbGFzcyBNYWNoaW5lOwotICAgIGNsYXNzIFVTdHJpbmc7Ci0gICAgY2xhc3MgUmVnaXN0ZXI7
Ci0gICAgY2xhc3MgU2NvcGVDaGFpbk5vZGU7Ci0gICAgCiAgICAgY2xhc3MgRGVidWdnZXJDYWxs
RnJhbWUgewogICAgIHB1YmxpYzoKLSAgICAgICAgZW51bSBUeXBlIHsKLSAgICAgICAgICAgIFBy
b2dyYW1UeXBlLAotICAgICAgICAgICAgRnVuY3Rpb25UeXBlCi0gICAgICAgIH07Ci0KLSAgICAg
ICAgRGVidWdnZXJDYWxsRnJhbWUoSlNHbG9iYWxPYmplY3QqIGR5bmFtaWNHbG9iYWxPYmplY3Qs
IGNvbnN0IENvZGVCbG9jayogY29kZUJsb2NrLCBTY29wZUNoYWluTm9kZSogc2NvcGVDaGFpbiwg
UmVnaXN0ZXIqIHIsIEpTVmFsdWUqIGV4Y2VwdGlvbikKLSAgICAgICAgICAgIDogbV9keW5hbWlj
R2xvYmFsT2JqZWN0KGR5bmFtaWNHbG9iYWxPYmplY3QpCi0gICAgICAgICAgICAsIG1fY29kZUJs
b2NrKGNvZGVCbG9jaykKLSAgICAgICAgICAgICwgbV9zY29wZUNoYWluKHNjb3BlQ2hhaW4pCi0g
ICAgICAgICAgICAsIG1fcmVnaXN0ZXJzKHIpCisgICAgICAgIGVudW0gVHlwZSB7IFByb2dyYW1U
eXBlLCBGdW5jdGlvblR5cGUgfTsKKworICAgICAgICBEZWJ1Z2dlckNhbGxGcmFtZShDYWxsRnJh
bWUqIGNhbGxGcmFtZSwgSlNWYWx1ZSogZXhjZXB0aW9uKQorICAgICAgICAgICAgOiBtX2NhbGxG
cmFtZShjYWxsRnJhbWUpCiAgICAgICAgICAgICAsIG1fZXhjZXB0aW9uKGV4Y2VwdGlvbikKICAg
ICAgICAgewogICAgICAgICB9CiAKLSAgICAgICAgSlNHbG9iYWxPYmplY3QqIGR5bmFtaWNHbG9i
YWxPYmplY3QoKSBjb25zdCB7IHJldHVybiBtX2R5bmFtaWNHbG9iYWxPYmplY3Q7IH0KLSAgICAg
ICAgY29uc3QgU2NvcGVDaGFpbk5vZGUqIHNjb3BlQ2hhaW4oKSBjb25zdCB7IHJldHVybiBtX3Nj
b3BlQ2hhaW47IH0KKyAgICAgICAgSlNHbG9iYWxPYmplY3QqIGR5bmFtaWNHbG9iYWxPYmplY3Qo
KSBjb25zdCB7IHJldHVybiBtX2NhbGxGcmFtZS0+ZHluYW1pY0dsb2JhbE9iamVjdCgpOyB9Cisg
ICAgICAgIGNvbnN0IFNjb3BlQ2hhaW5Ob2RlKiBzY29wZUNoYWluKCkgY29uc3QgeyByZXR1cm4g
bV9jYWxsRnJhbWUtPnNjb3BlQ2hhaW4oKTsgfQogICAgICAgICBjb25zdCBVU3RyaW5nKiBmdW5j
dGlvbk5hbWUoKSBjb25zdDsKICAgICAgICAgVHlwZSB0eXBlKCkgY29uc3Q7CiAgICAgICAgIEpT
T2JqZWN0KiB0aGlzT2JqZWN0KCkgY29uc3Q7CkBAIC02NiwxMCArNTIsNyBAQCBuYW1lc3BhY2Ug
SlNDIHsKICAgICAgICAgSlNWYWx1ZSogZXhjZXB0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9leGNl
cHRpb247IH0KIAogICAgIHByaXZhdGU6Ci0gICAgICAgIEpTR2xvYmFsT2JqZWN0KiBtX2R5bmFt
aWNHbG9iYWxPYmplY3Q7Ci0gICAgICAgIGNvbnN0IENvZGVCbG9jayogbV9jb2RlQmxvY2s7Ci0g
ICAgICAgIFNjb3BlQ2hhaW5Ob2RlKiBtX3Njb3BlQ2hhaW47Ci0gICAgICAgIFJlZ2lzdGVyKiBt
X3JlZ2lzdGVyczsKKyAgICAgICAgQ2FsbEZyYW1lKiBtX2NhbGxGcmFtZTsKICAgICAgICAgSlNW
YWx1ZSogbV9leGNlcHRpb247CiAgICAgfTsKIApJbmRleDogSmF2YVNjcmlwdENvcmUva2pzL0V4
ZWNTdGF0ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL2tqcy9FeGVjU3RhdGUuaAko
cmV2aXNpb24gMzczMzApCisrKyBKYXZhU2NyaXB0Q29yZS9ranMvRXhlY1N0YXRlLmgJKHdvcmtp
bmcgY29weSkKQEAgLTIzLDE3ICsyMywxNiBAQAogI2lmbmRlZiBFeGVjU3RhdGVfaAogI2RlZmlu
ZSBFeGVjU3RhdGVfaAogCisvLyBGSVhNRTogUmVuYW1lIHRoaXMgZmlsZSB0byBDYWxsRnJhbWUu
aC4KKwogI2luY2x1ZGUgIkpTR2xvYmFsRGF0YS5oIgogI2luY2x1ZGUgIk1hY2hpbmUuaCIKICNp
bmNsdWRlICJTY29wZUNoYWluLmgiCiAKIG5hbWVzcGFjZSBKU0MgIHsKIAotICAgIGNsYXNzIEV4
ZWNTdGF0ZTsKLSAgICBjbGFzcyBKU1ZhbHVlOwotICAgIGNsYXNzIFJlZ2lzdGVyOwotCi0gICAg
dHlwZWRlZiBFeGVjU3RhdGUgQ2FsbEZyYW1lOworICAgIGNsYXNzIEFyZ3VtZW50czsKKyAgICBj
bGFzcyBKU0FjdGl2YXRpb247CiAKICAgICAvLyBSZXByZXNlbnRzIHRoZSBjdXJyZW50IHN0YXRl
IG9mIHNjcmlwdCBleGVjdXRpb24uCiAgICAgLy8gUGFzc2VkIGFzIHRoZSBmaXJzdCBhcmd1bWVu
dCB0byBtb3N0IGZ1bmN0aW9ucy4KQEAgLTQyLDQxICs0MSw4MyBAQCBuYW1lc3BhY2UgSlNDICB7
CiAgICAgICAgIHN0YXRpYyBDYWxsRnJhbWUqIGNyZWF0ZShSZWdpc3RlciogY2FsbEZyYW1lQmFz
ZSkgeyByZXR1cm4gc3RhdGljX2Nhc3Q8Q2FsbEZyYW1lKj4oY2FsbEZyYW1lQmFzZSk7IH0KICAg
ICAgICAgUmVnaXN0ZXIqIHJlZ2lzdGVycygpIHsgcmV0dXJuIHRoaXM7IH0KIAorICAgICAgICBp
bnQgYXJndW1lbnRDb3VudCgpIGNvbnN0IHsgcmV0dXJuIHRoaXNbUmVnaXN0ZXJGaWxlOjpBcmd1
bWVudENvdW50XS5pKCk7IH0KKyAgICAgICAgSlNGdW5jdGlvbiogY2FsbGVlKCkgY29uc3QgeyBy
ZXR1cm4gdGhpc1tSZWdpc3RlckZpbGU6OkNhbGxlZV0uZnVuY3Rpb24oKTsgfQorICAgICAgICBD
YWxsRnJhbWUqIGNhbGxlckZyYW1lKCkgY29uc3QgeyByZXR1cm4gdGhpc1tSZWdpc3RlckZpbGU6
OkNhbGxlckZyYW1lXS5jYWxsRnJhbWUoKTsgfQorICAgICAgICBDb2RlQmxvY2sqIGNvZGVCbG9j
aygpIGNvbnN0IHsgcmV0dXJuIHRoaXNbUmVnaXN0ZXJGaWxlOjpDb2RlQmxvY2tdLmNvZGVCbG9j
aygpOyB9CisgICAgICAgIEpTQWN0aXZhdGlvbiogb3B0aW9uYWxDYWxsZWVBY3RpdmF0aW9uKCkg
Y29uc3QgeyByZXR1cm4gdGhpc1tSZWdpc3RlckZpbGU6Ok9wdGlvbmFsQ2FsbGVlQWN0aXZhdGlv
bl0uYWN0aXZhdGlvbigpOyB9CisgICAgICAgIEFyZ3VtZW50cyogb3B0aW9uYWxDYWxsZWVBcmd1
bWVudHMoKSBjb25zdCB7IHJldHVybiB0aGlzW1JlZ2lzdGVyRmlsZTo6T3B0aW9uYWxDYWxsZWVB
cmd1bWVudHNdLmFyZ3VtZW50cygpOyB9CisgICAgICAgIEluc3RydWN0aW9uKiByZXR1cm5QQygp
IGNvbnN0IHsgcmV0dXJuIHRoaXNbUmVnaXN0ZXJGaWxlOjpSZXR1cm5QQ10udlBDKCk7IH0KKyAg
ICAgICAgaW50IHJldHVyblZhbHVlUmVnaXN0ZXIoKSBjb25zdCB7IHJldHVybiB0aGlzW1JlZ2lz
dGVyRmlsZTo6UmV0dXJuVmFsdWVSZWdpc3Rlcl0uaSgpOyB9CisgICAgICAgIFNjb3BlQ2hhaW5O
b2RlKiBzY29wZUNoYWluKCkgY29uc3QgeyByZXR1cm4gdGhpc1tSZWdpc3RlckZpbGU6OlNjb3Bl
Q2hhaW5dLnNjb3BlQ2hhaW4oKTsgfQorCisgICAgICAgIHZvaWQgc2V0QXJndW1lbnRDb3VudChp
bnQgY291bnQpIHsgcmVnaXN0ZXJzKClbUmVnaXN0ZXJGaWxlOjpBcmd1bWVudENvdW50XSA9IGNv
dW50OyB9CisgICAgICAgIHZvaWQgc2V0Q2FsbGVlKEpTRnVuY3Rpb24qIGNhbGxlZSkgeyByZWdp
c3RlcnMoKVtSZWdpc3RlckZpbGU6OkNhbGxlZV0gPSBjYWxsZWU7IH0KKyAgICAgICAgdm9pZCBz
ZXRDYWxsZWVBY3RpdmF0aW9uKEpTQWN0aXZhdGlvbiogYWN0aXZhdGlvbikgeyByZWdpc3RlcnMo
KVtSZWdpc3RlckZpbGU6Ok9wdGlvbmFsQ2FsbGVlQWN0aXZhdGlvbl0gPSBhY3RpdmF0aW9uOyB9
CisgICAgICAgIHZvaWQgc2V0Q2FsbGVlQXJndW1lbnRzKEFyZ3VtZW50cyogYXJndW1lbnRzKSB7
IHJlZ2lzdGVycygpW1JlZ2lzdGVyRmlsZTo6T3B0aW9uYWxDYWxsZWVBcmd1bWVudHNdID0gYXJn
dW1lbnRzOyB9CisgICAgICAgIHZvaWQgc2V0Q2FsbGVyRnJhbWUoQ2FsbEZyYW1lKiBjYWxsZXJG
cmFtZSkgeyByZWdpc3RlcnMoKVtSZWdpc3RlckZpbGU6OkNhbGxlckZyYW1lXSA9IGNhbGxlckZy
YW1lOyB9CisgICAgICAgIHZvaWQgc2V0Q29kZUJsb2NrKENvZGVCbG9jayogY29kZUJsb2NrKSB7
IHJlZ2lzdGVycygpW1JlZ2lzdGVyRmlsZTo6Q29kZUJsb2NrXSA9IGNvZGVCbG9jazsgfQorICAg
ICAgICB2b2lkIHNldFNjb3BlQ2hhaW4oU2NvcGVDaGFpbk5vZGUqIHNjb3BlQ2hhaW4pIHsgcmVn
aXN0ZXJzKClbUmVnaXN0ZXJGaWxlOjpTY29wZUNoYWluXSA9IHNjb3BlQ2hhaW47IH0KKworICAg
ICAgICBBTFdBWVNfSU5MSU5FIHZvaWQgaW5pdChDb2RlQmxvY2sqIGNvZGVCbG9jaywgSW5zdHJ1
Y3Rpb24qIHZQQywgU2NvcGVDaGFpbk5vZGUqIHNjb3BlQ2hhaW4sCisgICAgICAgICAgICBDYWxs
RnJhbWUqIGNhbGxlckZyYW1lLCBpbnQgcmV0dXJuVmFsdWVSZWdpc3RlciwgaW50IGFyZ2MsIEpT
RnVuY3Rpb24qIGZ1bmN0aW9uKQorICAgICAgICB7CisgICAgICAgICAgICBBU1NFUlQoY2FsbGVy
RnJhbWUpOyAvLyBVc2Ugbm9DYWxsZXIoKSByYXRoZXIgdGhhbiAwIGZvciB0aGUgb3V0ZXIgaG9z
dCBjYWxsIGZyYW1lIGNhbGxlci4KKworICAgICAgICAgICAgc2V0Q29kZUJsb2NrKGNvZGVCbG9j
ayk7CisgICAgICAgICAgICBzZXRTY29wZUNoYWluKHNjb3BlQ2hhaW4pOworICAgICAgICAgICAg
c2V0Q2FsbGVyRnJhbWUoY2FsbGVyRnJhbWUpOworICAgICAgICAgICAgcmVnaXN0ZXJzKClbUmVn
aXN0ZXJGaWxlOjpSZXR1cm5QQ10gPSB2UEM7CisgICAgICAgICAgICByZWdpc3RlcnMoKVtSZWdp
c3RlckZpbGU6OlJldHVyblZhbHVlUmVnaXN0ZXJdID0gcmV0dXJuVmFsdWVSZWdpc3RlcjsKKyAg
ICAgICAgICAgIHNldEFyZ3VtZW50Q291bnQoYXJnYyk7IC8vIG9yaWdpbmFsIGFyZ3VtZW50IGNv
dW50IChmb3IgdGhlIHNha2Ugb2YgdGhlICJhcmd1bWVudHMiIG9iamVjdCkKKyAgICAgICAgICAg
IHNldENhbGxlZShmdW5jdGlvbik7CisgICAgICAgICAgICBzZXRDYWxsZWVBY3RpdmF0aW9uKDAp
OworICAgICAgICAgICAgc2V0Q2FsbGVlQXJndW1lbnRzKDApOworICAgICAgICB9CisKKyAgICAg
ICAgc3RhdGljIENhbGxGcmFtZSogbm9DYWxsZXIoKSB7IHJldHVybiByZWludGVycHJldF9jYXN0
PENhbGxGcmFtZSo+KEhvc3RDYWxsRnJhbWVGbGFnKTsgfQorICAgICAgICBib29sIGhhc0hvc3RD
YWxsRnJhbWVGbGFnKCkgY29uc3QgeyByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxpbnRwdHJfdD4o
dGhpcykgJiBIb3N0Q2FsbEZyYW1lRmxhZzsgfQorICAgICAgICBDYWxsRnJhbWUqIGFkZEhvc3RD
YWxsRnJhbWVGbGFnKCkgY29uc3QgeyByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxDYWxsRnJhbWUq
PihyZWludGVycHJldF9jYXN0PGludHB0cl90Pih0aGlzKSB8IEhvc3RDYWxsRnJhbWVGbGFnKTsg
fQorICAgICAgICBDYWxsRnJhbWUqIHJlbW92ZUhvc3RDYWxsRnJhbWVGbGFnKCkgeyByZXR1cm4g
cmVpbnRlcnByZXRfY2FzdDxDYWxsRnJhbWUqPihyZWludGVycHJldF9jYXN0PGludHB0cl90Pih0
aGlzKSAmIH5Ib3N0Q2FsbEZyYW1lRmxhZyk7IH0KKwogICAgICAgICAvLyBHbG9iYWwgb2JqZWN0
IGluIHdoaWNoIGV4ZWN1dGlvbiBiZWdhbi4KICAgICAgICAgSlNHbG9iYWxPYmplY3QqIGR5bmFt
aWNHbG9iYWxPYmplY3QoKTsKIAogICAgICAgICAvLyBHbG9iYWwgb2JqZWN0IGluIHdoaWNoIHRo
ZSBjdXJyZW50bHkgZXhlY3V0aW5nIGNvZGUgd2FzIGRlZmluZWQuCiAgICAgICAgIC8vIERpZmZl
cnMgZnJvbSBkeW5hbWljR2xvYmFsT2JqZWN0KCkgZHVyaW5nIGZ1bmN0aW9uIGNhbGxzIGFjcm9z
cyB3ZWIgYnJvd3NlciBmcmFtZXMuCi0gICAgICAgIEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xv
YmFsT2JqZWN0KCkKKyAgICAgICAgSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3Qo
KSBjb25zdAogICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gTWFjaGluZTo6c2NvcGVDaGFp
bih0aGlzKS0+Z2xvYmFsT2JqZWN0KCk7CisgICAgICAgICAgICByZXR1cm4gc2NvcGVDaGFpbigp
LT5nbG9iYWxPYmplY3QoKTsKICAgICAgICAgfQogCiAgICAgICAgIC8vIERpZmZlcnMgZnJvbSBs
ZXhpY2FsR2xvYmFsT2JqZWN0IGJlY2F1c2UgdGhpcyB3aWxsIGhhdmUgRE9NIHdpbmRvdyBzaGVs
bCByYXRoZXIgdGhhbgogICAgICAgICAvLyB0aGUgYWN0dWFsIERPTSB3aW5kb3cuCi0gICAgICAg
IEpTT2JqZWN0KiBnbG9iYWxUaGlzVmFsdWUoKQorICAgICAgICBKU09iamVjdCogZ2xvYmFsVGhp
c1ZhbHVlKCkgY29uc3QKICAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIE1hY2hpbmU6OnNj
b3BlQ2hhaW4odGhpcyktPmdsb2JhbFRoaXNPYmplY3QoKTsKKyAgICAgICAgICAgIHJldHVybiBz
Y29wZUNoYWluKCktPmdsb2JhbFRoaXNPYmplY3QoKTsKICAgICAgICAgfQogCi0gICAgICAgIEpT
R2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSgpCisgICAgICAgIC8vIEZJWE1FOiBFbHNld2hlcmUsIHdl
IG5vcm1hbGx5IHVzZSBKU0dsb2JhbERhdGEqIHJhdGhlciB0aGFuIGEgcmVmZXJlbmNlLgorICAg
ICAgICAvLyBXZSBzaG91bGQgbWFrZSB0aGlzIG1vcmUgdW5pZm9ybSBhbmQgZWl0aGVyIHVzZSBh
IHJlZmVyZW5jZSBldmVyeXdoZXJlCisgICAgICAgIC8vIG9yIGEgcG9pbnRlciBldmVyeXdoZXJl
LgorICAgICAgICBKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEoKSBjb25zdAogICAgICAgICB7Ci0g
ICAgICAgICAgICByZXR1cm4gKk1hY2hpbmU6OnNjb3BlQ2hhaW4odGhpcyktPmdsb2JhbERhdGE7
CisgICAgICAgICAgICByZXR1cm4gKnNjb3BlQ2hhaW4oKS0+Z2xvYmFsRGF0YTsKICAgICAgICAg
fQogCiAgICAgICAgIC8vIENvbnZlbmllbmNlIGZ1bmN0aW9ucyBmb3IgYWNjZXNzIHRvIGdsb2Jh
bCBkYXRhLgorICAgICAgICAvLyBJdCB0YWtlcyBhIGZldyBtZW1vcnkgcmVmZXJlbmNlcyB0byBn
ZXQgZnJvbSBhIGNhbGwgZnJhbWUgdG8gdGhlIGdsb2JhbCBkYXRhCisgICAgICAgIC8vIHBvaW50
ZXIsIHNvIHRoZXNlIGFyZSBpbmVmZmljaWVudCwgYW5kIHNob3VsZCBiZSB1c2VkIHNwYXJpbmds
eSBpbiBuZXcgY29kZS4KKyAgICAgICAgLy8gQnV0IHRoZXkncmUgdXNlZCBpbiBtYW55IHBsYWNl
cyBpbiBsZWdhY3kgY29kZSwgc28gdGhleSdyZSBub3QgZ29pbmcgYXdheSBhbnkgdGltZSBzb29u
LgogCiAgICAgICAgIHZvaWQgc2V0RXhjZXB0aW9uKEpTVmFsdWUqIGV4Y2VwdGlvbikgeyBnbG9i
YWxEYXRhKCkuZXhjZXB0aW9uID0gZXhjZXB0aW9uOyB9CiAgICAgICAgIHZvaWQgY2xlYXJFeGNl
cHRpb24oKSB7IGdsb2JhbERhdGEoKS5leGNlcHRpb24gPSAwOyB9Ci0gICAgICAgIEpTVmFsdWUq
IGV4Y2VwdGlvbigpIHsgcmV0dXJuIGdsb2JhbERhdGEoKS5leGNlcHRpb247IH0KKyAgICAgICAg
SlNWYWx1ZSogZXhjZXB0aW9uKCkgY29uc3QgeyByZXR1cm4gZ2xvYmFsRGF0YSgpLmV4Y2VwdGlv
bjsgfQogICAgICAgICBKU1ZhbHVlKiogZXhjZXB0aW9uU2xvdCgpIHsgcmV0dXJuICZnbG9iYWxE
YXRhKCkuZXhjZXB0aW9uOyB9Ci0gICAgICAgIGJvb2wgaGFkRXhjZXB0aW9uKCkgeyByZXR1cm4g
ISFnbG9iYWxEYXRhKCkuZXhjZXB0aW9uOyB9CisgICAgICAgIGJvb2wgaGFkRXhjZXB0aW9uKCkg
Y29uc3QgeyByZXR1cm4gISFnbG9iYWxEYXRhKCkuZXhjZXB0aW9uOyB9CiAKLSAgICAgICAgSWRl
bnRpZmllclRhYmxlKiBpZGVudGlmaWVyVGFibGUoKSB7IHJldHVybiBnbG9iYWxEYXRhKCkuaWRl
bnRpZmllclRhYmxlOyB9Ci0gICAgICAgIGNvbnN0IENvbW1vbklkZW50aWZpZXJzJiBwcm9wZXJ0
eU5hbWVzKCkgeyByZXR1cm4gKmdsb2JhbERhdGEoKS5wcm9wZXJ0eU5hbWVzOyB9Ci0gICAgICAg
IGNvbnN0IEFyZ0xpc3QmIGVtcHR5TGlzdCgpIHsgcmV0dXJuICpnbG9iYWxEYXRhKCkuZW1wdHlM
aXN0OyB9Ci0gICAgICAgIExleGVyKiBsZXhlcigpIHsgcmV0dXJuIGdsb2JhbERhdGEoKS5sZXhl
cjsgfQotICAgICAgICBQYXJzZXIqIHBhcnNlcigpIHsgcmV0dXJuIGdsb2JhbERhdGEoKS5wYXJz
ZXI7IH0KKyAgICAgICAgY29uc3QgQ29tbW9uSWRlbnRpZmllcnMmIHByb3BlcnR5TmFtZXMoKSBj
b25zdCB7IHJldHVybiAqZ2xvYmFsRGF0YSgpLnByb3BlcnR5TmFtZXM7IH0KKyAgICAgICAgY29u
c3QgQXJnTGlzdCYgZW1wdHlMaXN0KCkgY29uc3QgeyByZXR1cm4gKmdsb2JhbERhdGEoKS5lbXB0
eUxpc3Q7IH0KICAgICAgICAgTWFjaGluZSogbWFjaGluZSgpIHsgcmV0dXJuIGdsb2JhbERhdGEo
KS5tYWNoaW5lOyB9CiAgICAgICAgIEhlYXAqIGhlYXAoKSB7IHJldHVybiAmZ2xvYmFsRGF0YSgp
LmhlYXA7IH0KIApAQCAtODksNiArMTMwLDggQEAgbmFtZXNwYWNlIEpTQyAgewogICAgICAgICBz
dGF0aWMgY29uc3QgSGFzaFRhYmxlKiBzdHJpbmdUYWJsZShDYWxsRnJhbWUqIGNhbGxGcmFtZSkg
eyByZXR1cm4gY2FsbEZyYW1lLT5nbG9iYWxEYXRhKCkuc3RyaW5nVGFibGU7IH0KIAogICAgIHBy
aXZhdGU6CisgICAgICAgIHN0YXRpYyBjb25zdCBpbnRwdHJfdCBIb3N0Q2FsbEZyYW1lRmxhZyA9
IDE7CisKICAgICAgICAgRXhlY1N0YXRlKCk7CiAgICAgICAgIH5FeGVjU3RhdGUoKTsKICAgICB9
OwpJbmRleDogSmF2YVNjcmlwdENvcmUva2pzL0Z1bmN0aW9uQ29uc3RydWN0b3IuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL2tqcy9GdW5jdGlvbkNvbnN0cnVjdG9yLmNwcAkocmV2
aXNpb24gMzczMzApCisrKyBKYXZhU2NyaXB0Q29yZS9ranMvRnVuY3Rpb25Db25zdHJ1Y3Rvci5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTg3LDcgKzg3LDcgQEAgSlNPYmplY3QqIGNvbnN0cnVjdEZ1
bmN0aW9uKEV4ZWNTdGF0ZSogZQogICAgIGludCBlcnJMaW5lOwogICAgIFVTdHJpbmcgZXJyTXNn
OwogICAgIFNvdXJjZUNvZGUgc291cmNlID0gbWFrZVNvdXJjZShib2R5LCBzb3VyY2VVUkwsIGxp
bmVOdW1iZXIpOwotICAgIFJlZlB0cjxGdW5jdGlvbkJvZHlOb2RlPiBmdW5jdGlvbkJvZHkgPSBl
eGVjLT5wYXJzZXIoKS0+cGFyc2U8RnVuY3Rpb25Cb2R5Tm9kZT4oZXhlYywgc291cmNlLCAmZXJy
TGluZSwgJmVyck1zZyk7CisgICAgUmVmUHRyPEZ1bmN0aW9uQm9keU5vZGU+IGZ1bmN0aW9uQm9k
eSA9IGV4ZWMtPmdsb2JhbERhdGEoKS5wYXJzZXItPnBhcnNlPEZ1bmN0aW9uQm9keU5vZGU+KGV4
ZWMsIHNvdXJjZSwgJmVyckxpbmUsICZlcnJNc2cpOwogCiAgICAgLy8gTm8gcHJvZ3JhbSBub2Rl
ID09IHN5bnRheCBlcnJvciAtIHRocm93IGEgc3ludGF4IGVycm9yCiAgICAgaWYgKCFmdW5jdGlv
bkJvZHkpCkluZGV4OiBKYXZhU2NyaXB0Q29yZS9ranMvSlNBY3RpdmF0aW9uLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9ranMvSlNBY3RpdmF0aW9uLmNwcAkocmV2aXNpb24gMzcz
MzApCisrKyBKYXZhU2NyaXB0Q29yZS9ranMvSlNBY3RpdmF0aW9uLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMzksOCArMzksOCBAQCBBU1NFUlRfQ0xBU1NfRklUU19JTl9DRUxMKEpTQWN0aXZhdGlv
bik7CiAKIGNvbnN0IENsYXNzSW5mbyBKU0FjdGl2YXRpb246OmluZm8gPSB7ICJKU0FjdGl2YXRp
b24iLCAwLCAwLCAwIH07CiAKLUpTQWN0aXZhdGlvbjo6SlNBY3RpdmF0aW9uKEV4ZWNTdGF0ZSog
ZXhlYywgUGFzc1JlZlB0cjxGdW5jdGlvbkJvZHlOb2RlPiBmdW5jdGlvbkJvZHksIFJlZ2lzdGVy
KiByZWdpc3RlcnMpCi0gICAgOiBCYXNlKGV4ZWMtPmdsb2JhbERhdGEoKS5hY3RpdmF0aW9uU3Ry
dWN0dXJlSUQsIG5ldyBKU0FjdGl2YXRpb25EYXRhKGZ1bmN0aW9uQm9keSwgcmVnaXN0ZXJzKSkK
K0pTQWN0aXZhdGlvbjo6SlNBY3RpdmF0aW9uKENhbGxGcmFtZSogY2FsbEZyYW1lLCBQYXNzUmVm
UHRyPEZ1bmN0aW9uQm9keU5vZGU+IGZ1bmN0aW9uQm9keSkKKyAgICA6IEJhc2UoY2FsbEZyYW1l
LT5nbG9iYWxEYXRhKCkuYWN0aXZhdGlvblN0cnVjdHVyZUlELCBuZXcgSlNBY3RpdmF0aW9uRGF0
YShmdW5jdGlvbkJvZHksIGNhbGxGcmFtZSkpCiB7CiB9CiAKQEAgLTE2Myw5ICsxNjMsOSBAQCBK
U1ZhbHVlKiBKU0FjdGl2YXRpb246OmFyZ3VtZW50c0dldHRlcihFCiAKICAgICBBcmd1bWVudHMq
IGFyZ3VtZW50cyA9IHN0YXRpY19jYXN0PEFyZ3VtZW50cyo+KHRoaXNPYmotPmQoKS0+cmVnaXN0
ZXJzW1JlZ2lzdGVyRmlsZTo6T3B0aW9uYWxDYWxsZWVBcmd1bWVudHNdLmdldEpTVmFsdWUoKSk7
CiAgICAgaWYgKCFhcmd1bWVudHMpIHsKLSAgICAgICAgYXJndW1lbnRzID0gbmV3IChleGVjKSBB
cmd1bWVudHMoZXhlYywgJnRoaXNPYmotPnJlZ2lzdGVyQXQoMCkpOworICAgICAgICBhcmd1bWVu
dHMgPSBuZXcgKGV4ZWMpIEFyZ3VtZW50cyhleGVjKTsKICAgICAgICAgYXJndW1lbnRzLT5jb3B5
UmVnaXN0ZXJzKCk7Ci0gICAgICAgIHRoaXNPYmotPmQoKS0+cmVnaXN0ZXJzW1JlZ2lzdGVyRmls
ZTo6T3B0aW9uYWxDYWxsZWVBcmd1bWVudHNdID0gYXJndW1lbnRzOworICAgICAgICBDYWxsRnJh
bWU6OmNyZWF0ZSh0aGlzT2JqLT5kKCktPnJlZ2lzdGVycyktPnNldENhbGxlZUFyZ3VtZW50cyhh
cmd1bWVudHMpOwogICAgIH0KICAgICBBU1NFUlQoYXJndW1lbnRzLT5pc09iamVjdCgmQXJndW1l
bnRzOjppbmZvKSk7CiAKSW5kZXg6IEphdmFTY3JpcHRDb3JlL2tqcy9KU0FjdGl2YXRpb24uaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9ranMvSlNBY3RpdmF0aW9uLmgJKHJldmlzaW9u
IDM3MzMwKQorKysgSmF2YVNjcmlwdENvcmUva2pzL0pTQWN0aXZhdGlvbi5oCSh3b3JraW5nIGNv
cHkpCkBAIC00Myw3ICs0Myw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgIGNsYXNzIEpTQWN0aXZh
dGlvbiA6IHB1YmxpYyBKU1ZhcmlhYmxlT2JqZWN0IHsKICAgICAgICAgdHlwZWRlZiBKU1Zhcmlh
YmxlT2JqZWN0IEJhc2U7CiAgICAgcHVibGljOgotICAgICAgICBKU0FjdGl2YXRpb24oRXhlY1N0
YXRlKiwgUGFzc1JlZlB0cjxGdW5jdGlvbkJvZHlOb2RlPiwgUmVnaXN0ZXIqKTsKKyAgICAgICAg
SlNBY3RpdmF0aW9uKENhbGxGcmFtZSosIFBhc3NSZWZQdHI8RnVuY3Rpb25Cb2R5Tm9kZT4pOwog
ICAgICAgICB2aXJ0dWFsIH5KU0FjdGl2YXRpb24oKTsKIAogICAgICAgICB2aXJ0dWFsIHZvaWQg
bWFyaygpOwpAQCAtNjgsOCArNjgsOCBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgIHByaXZhdGU6
CiAgICAgICAgIHN0cnVjdCBKU0FjdGl2YXRpb25EYXRhIDogcHVibGljIEpTVmFyaWFibGVPYmpl
Y3REYXRhIHsKLSAgICAgICAgICAgIEpTQWN0aXZhdGlvbkRhdGEoUGFzc1JlZlB0cjxGdW5jdGlv
bkJvZHlOb2RlPiBmdW5jdGlvbkJvZHksIFJlZ2lzdGVyKiByZWdpc3RlcnMpCi0gICAgICAgICAg
ICAgICAgOiBKU1ZhcmlhYmxlT2JqZWN0RGF0YSgmZnVuY3Rpb25Cb2R5LT5zeW1ib2xUYWJsZSgp
LCByZWdpc3RlcnMpCisgICAgICAgICAgICBKU0FjdGl2YXRpb25EYXRhKFBhc3NSZWZQdHI8RnVu
Y3Rpb25Cb2R5Tm9kZT4gZnVuY3Rpb25Cb2R5LCBDYWxsRnJhbWUqIGNhbGxGcmFtZSkKKyAgICAg
ICAgICAgICAgICA6IEpTVmFyaWFibGVPYmplY3REYXRhKCZmdW5jdGlvbkJvZHktPnN5bWJvbFRh
YmxlKCksIGNhbGxGcmFtZS0+cmVnaXN0ZXJzKCkpCiAgICAgICAgICAgICAgICAgLCBmdW5jdGlv
bkJvZHkoZnVuY3Rpb25Cb2R5KQogICAgICAgICAgICAgewogICAgICAgICAgICAgfQpJbmRleDog
SmF2YVNjcmlwdENvcmUva2pzL0pTR2xvYmFsT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZh
U2NyaXB0Q29yZS9ranMvSlNHbG9iYWxPYmplY3QuY3BwCShyZXZpc2lvbiAzNzMzMCkKKysrIEph
dmFTY3JpcHRDb3JlL2tqcy9KU0dsb2JhbE9iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEy
OSw3ICsxMjksNyBAQCB2b2lkIEpTR2xvYmFsT2JqZWN0Ojppbml0KEpTT2JqZWN0KiB0aGlzCiAg
ICAgZCgpLT5nbG9iYWxEYXRhID0gSGVhcDo6aGVhcCh0aGlzKS0+Z2xvYmFsRGF0YSgpOwogICAg
IGQoKS0+Z2xvYmFsU2NvcGVDaGFpbiA9IFNjb3BlQ2hhaW4odGhpcywgZCgpLT5nbG9iYWxEYXRh
LmdldCgpLCB0aGlzVmFsdWUpOwogCi0gICAgTWFjaGluZTo6aW5pdGlhbGl6ZUNhbGxGcmFtZShk
KCktPmdsb2JhbENhbGxGcmFtZSArIFJlZ2lzdGVyRmlsZTo6Q2FsbEZyYW1lSGVhZGVyU2l6ZSwg
MCwgMCwgZCgpLT5nbG9iYWxTY29wZUNoYWluLm5vZGUoKSwgbWFrZUhvc3RDYWxsRnJhbWVQb2lu
dGVyKDApLCAwLCAwLCAwKTsKKyAgICBKU0dsb2JhbE9iamVjdDo6Z2xvYmFsRXhlYygpLT5pbml0
KDAsIDAsIGQoKS0+Z2xvYmFsU2NvcGVDaGFpbi5ub2RlKCksIENhbGxGcmFtZTo6bm9DYWxsZXIo
KSwgMCwgMCwgMCk7CiAKICAgICBpZiAoSlNHbG9iYWxPYmplY3QqJiBoZWFkT2JqZWN0ID0gaGVh
ZCgpKSB7CiAgICAgICAgIGQoKS0+cHJldiA9IGhlYWRPYmplY3Q7CkluZGV4OiBKYXZhU2NyaXB0
Q29yZS9ranMvSlNHbG9iYWxPYmplY3RGdW5jdGlvbnMuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFT
Y3JpcHRDb3JlL2tqcy9KU0dsb2JhbE9iamVjdEZ1bmN0aW9ucy5jcHAJKHJldmlzaW9uIDM3MzMw
KQorKysgSmF2YVNjcmlwdENvcmUva2pzL0pTR2xvYmFsT2JqZWN0RnVuY3Rpb25zLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMjg2LDcgKzI4Niw3IEBAIEpTVmFsdWUqIGdsb2JhbEZ1bmNFdmFsKEV4
ZWNTdGF0ZSogZXhlYywKICAgICBVU3RyaW5nIGVyck1zZzsKIAogICAgIFNvdXJjZUNvZGUgc291
cmNlID0gbWFrZVNvdXJjZShzKTsKLSAgICBSZWZQdHI8RXZhbE5vZGU+IGV2YWxOb2RlID0gZXhl
Yy0+cGFyc2VyKCktPnBhcnNlPEV2YWxOb2RlPihleGVjLCBzb3VyY2UsICZlcnJMaW5lLCAmZXJy
TXNnKTsKKyAgICBSZWZQdHI8RXZhbE5vZGU+IGV2YWxOb2RlID0gZXhlYy0+Z2xvYmFsRGF0YSgp
LnBhcnNlci0+cGFyc2U8RXZhbE5vZGU+KGV4ZWMsIHNvdXJjZSwgJmVyckxpbmUsICZlcnJNc2cp
OwogCiAgICAgaWYgKCFldmFsTm9kZSkKICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoZXhlYywg
U3ludGF4RXJyb3IsIGVyck1zZywgZXJyTGluZSwgc291cmNlLnByb3ZpZGVyKCktPmFzSUQoKSwg
TlVMTCk7CkluZGV4OiBKYXZhU2NyaXB0Q29yZS9ranMvSlNWYXJpYWJsZU9iamVjdC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL2tqcy9KU1ZhcmlhYmxlT2JqZWN0LmgJKHJldmlzaW9u
IDM3MzMwKQorKysgSmF2YVNjcmlwdENvcmUva2pzL0pTVmFyaWFibGVPYmplY3QuaAkod29ya2lu
ZyBjb3B5KQpAQCAtNjEsMTEgKzYxLDExIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAvLyB3
aXRob3V0IGluY3JlYXNpbmcgdGhlaXIgb3duIHNpemUgKHNpbmNlIHRoZXJlJ3MgYSBoYXJkIGxp
bWl0IG9uIHRoZQogICAgICAgICAvLyBzaXplIG9mIGEgSlNDZWxsKS4KICAgICAgICAgc3RydWN0
IEpTVmFyaWFibGVPYmplY3REYXRhIHsKLSAgICAgICAgICAgIEpTVmFyaWFibGVPYmplY3REYXRh
KFN5bWJvbFRhYmxlKiBzeW1ib2xUYWJsZV8sIFJlZ2lzdGVyKiByZWdpc3RlcnNfKQotICAgICAg
ICAgICAgICAgIDogc3ltYm9sVGFibGUoc3ltYm9sVGFibGVfKQotICAgICAgICAgICAgICAgICwg
cmVnaXN0ZXJzKHJlZ2lzdGVyc18pCisgICAgICAgICAgICBKU1ZhcmlhYmxlT2JqZWN0RGF0YShT
eW1ib2xUYWJsZSogc3ltYm9sVGFibGUsIFJlZ2lzdGVyKiByZWdpc3RlcnMpCisgICAgICAgICAg
ICAgICAgOiBzeW1ib2xUYWJsZShzeW1ib2xUYWJsZSkKKyAgICAgICAgICAgICAgICAsIHJlZ2lz
dGVycyhyZWdpc3RlcnMpCiAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgQVNTRVJUKHN5
bWJvbFRhYmxlXyk7CisgICAgICAgICAgICAgICAgQVNTRVJUKHN5bWJvbFRhYmxlKTsKICAgICAg
ICAgICAgIH0KIAogICAgICAgICAgICAgU3ltYm9sVGFibGUqIHN5bWJvbFRhYmxlOyAvLyBNYXBz
IG5hbWUgLT4gb2Zmc2V0IGZyb20gInIiIGluIHJlZ2lzdGVyIGZpbGUuCkluZGV4OiBKYXZhU2Ny
aXB0Q29yZS9ranMvUGFyc2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9ranMv
UGFyc2VyLmNwcAkocmV2aXNpb24gMzczMzApCisrKyBKYXZhU2NyaXB0Q29yZS9ranMvUGFyc2Vy
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDcsNyArNDcsNyBAQCB2b2lkIFBhcnNlcjo6cGFyc2Uo
RXhlY1N0YXRlKiBleGVjLCBpbnQqCiAgICAgKmVyckxpbmUgPSAtMTsKICAgICAqZXJyTXNnID0g
MDsKIAotICAgIExleGVyJiBsZXhlciA9ICpleGVjLT5sZXhlcigpOworICAgIExleGVyJiBsZXhl
ciA9ICpleGVjLT5nbG9iYWxEYXRhKCkubGV4ZXI7CiAgICAgbGV4ZXIuc2V0Q29kZSgqbV9zb3Vy
Y2UpOwogCiAgICAgaW50IHBhcnNlRXJyb3IgPSBranN5eXBhcnNlKCZleGVjLT5nbG9iYWxEYXRh
KCkpOwpJbmRleDogSmF2YVNjcmlwdENvcmUva2pzL1JlZ0V4cENvbnN0cnVjdG9yLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9ranMvUmVnRXhwQ29uc3RydWN0b3IuY3BwCShyZXZp
c2lvbiAzNzMzMCkKKysrIEphdmFTY3JpcHRDb3JlL2tqcy9SZWdFeHBDb25zdHJ1Y3Rvci5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTMzMSw3ICszMzEsNyBAQCBKU09iamVjdCogY29uc3RydWN0UmVn
RXhwKEV4ZWNTdGF0ZSogZXhlCiAgICAgVVN0cmluZyBwYXR0ZXJuID0gYXJnMC0+aXNVbmRlZmlu
ZWQoKSA/IFVTdHJpbmcoIiIpIDogYXJnMC0+dG9TdHJpbmcoZXhlYyk7CiAgICAgVVN0cmluZyBm
bGFncyA9IGFyZzEtPmlzVW5kZWZpbmVkKCkgPyBVU3RyaW5nKCIiKSA6IGFyZzEtPnRvU3RyaW5n
KGV4ZWMpOwogCi0gICAgUmVmUHRyPFJlZ0V4cD4gcmVnRXhwID0gUmVnRXhwOjpjcmVhdGUoZXhl
YywgcGF0dGVybiwgZmxhZ3MpOworICAgIFJlZlB0cjxSZWdFeHA+IHJlZ0V4cCA9IFJlZ0V4cDo6
Y3JlYXRlKCZleGVjLT5nbG9iYWxEYXRhKCksIHBhdHRlcm4sIGZsYWdzKTsKICAgICBpZiAoIXJl
Z0V4cC0+aXNWYWxpZCgpKQogICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihleGVjLCBTeW50YXhF
cnJvciwgVVN0cmluZygiSW52YWxpZCByZWd1bGFyIGV4cHJlc3Npb246ICIpLmFwcGVuZChyZWdF
eHAtPmVycm9yTWVzc2FnZSgpKSk7CiAgICAgcmV0dXJuIG5ldyAoZXhlYykgUmVnRXhwT2JqZWN0
KGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKS0+cmVnRXhwU3RydWN0dXJlKCksIHJlZ0V4cC5y
ZWxlYXNlKCkpOwpJbmRleDogSmF2YVNjcmlwdENvcmUva2pzL1JlZ0V4cFByb3RvdHlwZS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUva2pzL1JlZ0V4cFByb3RvdHlwZS5jcHAJKHJl
dmlzaW9uIDM3MzMwKQorKysgSmF2YVNjcmlwdENvcmUva2pzL1JlZ0V4cFByb3RvdHlwZS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTg1LDcgKzg1LDcgQEAgSlNWYWx1ZSogcmVnRXhwUHJvdG9GdW5j
Q29tcGlsZShFeGVjU3RhdAogICAgIH0gZWxzZSB7CiAgICAgICAgIFVTdHJpbmcgcGF0dGVybiA9
IGFyZ3MuaXNFbXB0eSgpID8gVVN0cmluZygiIikgOiBhcmcwLT50b1N0cmluZyhleGVjKTsKICAg
ICAgICAgVVN0cmluZyBmbGFncyA9IGFyZzEtPmlzVW5kZWZpbmVkKCkgPyBVU3RyaW5nKCIiKSA6
IGFyZzEtPnRvU3RyaW5nKGV4ZWMpOwotICAgICAgICByZWdFeHAgPSBSZWdFeHA6OmNyZWF0ZShl
eGVjLCBwYXR0ZXJuLCBmbGFncyk7CisgICAgICAgIHJlZ0V4cCA9IFJlZ0V4cDo6Y3JlYXRlKCZl
eGVjLT5nbG9iYWxEYXRhKCksIHBhdHRlcm4sIGZsYWdzKTsKICAgICB9CiAKICAgICBpZiAoIXJl
Z0V4cC0+aXNWYWxpZCgpKQpJbmRleDogSmF2YVNjcmlwdENvcmUva2pzL1N0cmluZ1Byb3RvdHlw
ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUva2pzL1N0cmluZ1Byb3RvdHlwZS5j
cHAJKHJldmlzaW9uIDM3MzMwKQorKysgSmF2YVNjcmlwdENvcmUva2pzL1N0cmluZ1Byb3RvdHlw
ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQxMiw3ICs0MTIsNyBAQCBKU1ZhbHVlKiBzdHJpbmdQ
cm90b0Z1bmNNYXRjaChFeGVjU3RhdGUqCiAgICAgICAgICAqICBJZiByZWdleHAgaXMgbm90IGFu
IG9iamVjdCB3aG9zZSBbW0NsYXNzXV0gcHJvcGVydHkgaXMgIlJlZ0V4cCIsIGl0IGlzCiAgICAg
ICAgICAqICByZXBsYWNlZCB3aXRoIHRoZSByZXN1bHQgb2YgdGhlIGV4cHJlc3Npb24gbmV3IFJl
Z0V4cChyZWdleHApLgogICAgICAgICAgKi8KLSAgICAgICAgcmVnID0gUmVnRXhwOjpjcmVhdGUo
ZXhlYywgYTAtPnRvU3RyaW5nKGV4ZWMpKTsKKyAgICAgICAgcmVnID0gUmVnRXhwOjpjcmVhdGUo
JmV4ZWMtPmdsb2JhbERhdGEoKSwgYTAtPnRvU3RyaW5nKGV4ZWMpKTsKICAgICB9CiAgICAgUmVn
RXhwQ29uc3RydWN0b3IqIHJlZ0V4cE9iaiA9IGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKS0+
cmVnRXhwQ29uc3RydWN0b3IoKTsKICAgICBpbnQgcG9zOwpAQCAtNDYyLDcgKzQ2Miw3IEBAIEpT
VmFsdWUqIHN0cmluZ1Byb3RvRnVuY1NlYXJjaChFeGVjU3RhdGUKICAgICAgICAgICogIElmIHJl
Z2V4cCBpcyBub3QgYW4gb2JqZWN0IHdob3NlIFtbQ2xhc3NdXSBwcm9wZXJ0eSBpcyAiUmVnRXhw
IiwgaXQgaXMKICAgICAgICAgICogIHJlcGxhY2VkIHdpdGggdGhlIHJlc3VsdCBvZiB0aGUgZXhw
cmVzc2lvbiBuZXcgUmVnRXhwKHJlZ2V4cCkuCiAgICAgICAgICAqLwotICAgICAgICByZWcgPSBS
ZWdFeHA6OmNyZWF0ZShleGVjLCBhMC0+dG9TdHJpbmcoZXhlYykpOworICAgICAgICByZWcgPSBS
ZWdFeHA6OmNyZWF0ZSgmZXhlYy0+Z2xvYmFsRGF0YSgpLCBhMC0+dG9TdHJpbmcoZXhlYykpOwog
ICAgIH0KICAgICBSZWdFeHBDb25zdHJ1Y3RvciogcmVnRXhwT2JqID0gZXhlYy0+bGV4aWNhbEds
b2JhbE9iamVjdCgpLT5yZWdFeHBDb25zdHJ1Y3RvcigpOwogICAgIGludCBwb3M7CkluZGV4OiBK
YXZhU2NyaXB0Q29yZS9ranMvaWRlbnRpZmllci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlw
dENvcmUva2pzL2lkZW50aWZpZXIuY3BwCShyZXZpc2lvbiAzNzMzMCkKKysrIEphdmFTY3JpcHRD
b3JlL2tqcy9pZGVudGlmaWVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjQwLDcgKzI0MCw3IEBA
IHZvaWQgSWRlbnRpZmllcjo6cmVtb3ZlKFVTdHJpbmc6OlJlcCogcikKIAogdm9pZCBJZGVudGlm
aWVyOjpjaGVja1NhbWVJZGVudGlmaWVyVGFibGUoRXhlY1N0YXRlKiBleGVjLCBVU3RyaW5nOjpS
ZXAqIHJlcCkKIHsKLSAgICBBU1NFUlQocmVwLT5pZGVudGlmaWVyVGFibGUoKSA9PSBleGVjLT5p
ZGVudGlmaWVyVGFibGUoKSk7CisgICAgQVNTRVJUKHJlcC0+aWRlbnRpZmllclRhYmxlKCkgPT0g
ZXhlYy0+Z2xvYmFsRGF0YSgpLmlkZW50aWZpZXJUYWJsZSk7CiB9CiAKIHZvaWQgSWRlbnRpZmll
cjo6Y2hlY2tTYW1lSWRlbnRpZmllclRhYmxlKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgVVN0
cmluZzo6UmVwKiByZXApCkluZGV4OiBKYXZhU2NyaXB0Q29yZS9ranMvaW50ZXJwcmV0ZXIuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL2tqcy9pbnRlcnByZXRlci5jcHAJKHJldmlz
aW9uIDM3MzMwKQorKysgSmF2YVNjcmlwdENvcmUva2pzL2ludGVycHJldGVyLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNDYsNyArNDYsNyBAQCBDb21wbGV0aW9uIEludGVycHJldGVyOjpjaGVja1N5
bnRheChFeGVjCiAgICAgaW50IGVyckxpbmU7CiAgICAgVVN0cmluZyBlcnJNc2c7CiAKLSAgICBS
ZWZQdHI8UHJvZ3JhbU5vZGU+IHByb2dOb2RlID0gZXhlYy0+cGFyc2VyKCktPnBhcnNlPFByb2dy
YW1Ob2RlPihleGVjLCBzb3VyY2UsICZlcnJMaW5lLCAmZXJyTXNnKTsKKyAgICBSZWZQdHI8UHJv
Z3JhbU5vZGU+IHByb2dOb2RlID0gZXhlYy0+Z2xvYmFsRGF0YSgpLnBhcnNlci0+cGFyc2U8UHJv
Z3JhbU5vZGU+KGV4ZWMsIHNvdXJjZSwgJmVyckxpbmUsICZlcnJNc2cpOwogICAgIGlmICghcHJv
Z05vZGUpCiAgICAgICAgIHJldHVybiBDb21wbGV0aW9uKFRocm93LCBFcnJvcjo6Y3JlYXRlKGV4
ZWMsIFN5bnRheEVycm9yLCBlcnJNc2csIGVyckxpbmUsIHNvdXJjZS5wcm92aWRlcigpLT5hc0lE
KCksIHNvdXJjZS5wcm92aWRlcigpLT51cmwoKSkpOwogICAgIHJldHVybiBDb21wbGV0aW9uKE5v
cm1hbCk7CkBAIC01OCw3ICs1OCw3IEBAIENvbXBsZXRpb24gSW50ZXJwcmV0ZXI6OmV2YWx1YXRl
KEV4ZWNTdGEKICAgICAKICAgICBpbnQgZXJyTGluZTsKICAgICBVU3RyaW5nIGVyck1zZzsKLSAg
ICBSZWZQdHI8UHJvZ3JhbU5vZGU+IHByb2dyYW1Ob2RlID0gZXhlYy0+cGFyc2VyKCktPnBhcnNl
PFByb2dyYW1Ob2RlPihleGVjLCBzb3VyY2UsICZlcnJMaW5lLCAmZXJyTXNnKTsKKyAgICBSZWZQ
dHI8UHJvZ3JhbU5vZGU+IHByb2dyYW1Ob2RlID0gZXhlYy0+Z2xvYmFsRGF0YSgpLnBhcnNlci0+
cGFyc2U8UHJvZ3JhbU5vZGU+KGV4ZWMsIHNvdXJjZSwgJmVyckxpbmUsICZlcnJNc2cpOwogCiAg
ICAgaWYgKCFwcm9ncmFtTm9kZSkKICAgICAgICAgcmV0dXJuIENvbXBsZXRpb24oVGhyb3csIEVy
cm9yOjpjcmVhdGUoZXhlYywgU3ludGF4RXJyb3IsIGVyck1zZywgZXJyTGluZSwgc291cmNlLnBy
b3ZpZGVyKCktPmFzSUQoKSwgc291cmNlLnByb3ZpZGVyKCktPnVybCgpKSk7CkluZGV4OiBKYXZh
U2NyaXB0Q29yZS9ranMvbm9kZXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL2tq
cy9ub2Rlcy5jcHAJKHJldmlzaW9uIDM3MzMwKQorKysgSmF2YVNjcmlwdENvcmUva2pzL25vZGVz
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTU5LDcgKzE1OSw3IEBAIHN0YXRpYyB2b2lkIHN1YnN0
aXR1dGUoVVN0cmluZyYgc3RyaW5nLCAKIFJlZ2lzdGVySUQqIFRocm93YWJsZUV4cHJlc3Npb25E
YXRhOjplbWl0VGhyb3dFcnJvcihDb2RlR2VuZXJhdG9yJiBnZW5lcmF0b3IsIEVycm9yVHlwZSBl
LCBjb25zdCBjaGFyKiBtc2cpCiB7CiAgICAgZ2VuZXJhdG9yLmVtaXRFeHByZXNzaW9uSW5mbyht
X2Rpdm90LCBtX3N0YXJ0T2Zmc2V0LCBtX2VuZE9mZnNldCk7Ci0gICAgUmVnaXN0ZXJJRCogZXhj
ZXB0aW9uID0gZ2VuZXJhdG9yLmVtaXROZXdFcnJvcihnZW5lcmF0b3IubmV3VGVtcG9yYXJ5KCks
IGUsIGpzU3RyaW5nKGdlbmVyYXRvci5nbG9iYWxFeGVjKCksIG1zZykpOworICAgIFJlZ2lzdGVy
SUQqIGV4Y2VwdGlvbiA9IGdlbmVyYXRvci5lbWl0TmV3RXJyb3IoZ2VuZXJhdG9yLm5ld1RlbXBv
cmFyeSgpLCBlLCBqc1N0cmluZyhnZW5lcmF0b3IuZ2xvYmFsRGF0YSgpLCBtc2cpKTsKICAgICBn
ZW5lcmF0b3IuZW1pdFRocm93KGV4Y2VwdGlvbik7CiAgICAgcmV0dXJuIGV4Y2VwdGlvbjsKIH0K
QEAgLTE2OSw3ICsxNjksNyBAQCBSZWdpc3RlcklEKiBUaHJvd2FibGVFeHByZXNzaW9uRGF0YTo6
ZW1pCiAgICAgVVN0cmluZyBtZXNzYWdlID0gbXNnOwogICAgIHN1YnN0aXR1dGUobWVzc2FnZSwg
bGFiZWwudXN0cmluZygpKTsKICAgICBnZW5lcmF0b3IuZW1pdEV4cHJlc3Npb25JbmZvKG1fZGl2
b3QsIG1fc3RhcnRPZmZzZXQsIG1fZW5kT2Zmc2V0KTsKLSAgICBSZWdpc3RlcklEKiBleGNlcHRp
b24gPSBnZW5lcmF0b3IuZW1pdE5ld0Vycm9yKGdlbmVyYXRvci5uZXdUZW1wb3JhcnkoKSwgZSwg
anNTdHJpbmcoZ2VuZXJhdG9yLmdsb2JhbEV4ZWMoKSwgbWVzc2FnZSkpOworICAgIFJlZ2lzdGVy
SUQqIGV4Y2VwdGlvbiA9IGdlbmVyYXRvci5lbWl0TmV3RXJyb3IoZ2VuZXJhdG9yLm5ld1RlbXBv
cmFyeSgpLCBlLCBqc1N0cmluZyhnZW5lcmF0b3IuZ2xvYmFsRGF0YSgpLCBtZXNzYWdlKSk7CiAg
ICAgZ2VuZXJhdG9yLmVtaXRUaHJvdyhleGNlcHRpb24pOwogICAgIHJldHVybiBleGNlcHRpb247
CiB9CkBAIC0yMzgsNyArMjM4LDcgQEAgUmVnaXN0ZXJJRCogU3RyaW5nTm9kZTo6ZW1pdENvZGUo
Q29kZUdlbgogCiBSZWdpc3RlcklEKiBSZWdFeHBOb2RlOjplbWl0Q29kZShDb2RlR2VuZXJhdG9y
JiBnZW5lcmF0b3IsIFJlZ2lzdGVySUQqIGRzdCkKIHsKLSAgICBSZWZQdHI8UmVnRXhwPiByZWdF
eHAgPSBSZWdFeHA6OmNyZWF0ZShnZW5lcmF0b3IuZ2xvYmFsRXhlYygpLCBtX3BhdHRlcm4sIG1f
ZmxhZ3MpOworICAgIFJlZlB0cjxSZWdFeHA+IHJlZ0V4cCA9IFJlZ0V4cDo6Y3JlYXRlKGdlbmVy
YXRvci5nbG9iYWxEYXRhKCksIG1fcGF0dGVybiwgbV9mbGFncyk7CiAgICAgaWYgKCFyZWdFeHAt
PmlzVmFsaWQoKSkKICAgICAgICAgcmV0dXJuIGVtaXRUaHJvd0Vycm9yKGdlbmVyYXRvciwgU3lu
dGF4RXJyb3IsICgiSW52YWxpZCByZWd1bGFyIGV4cHJlc3Npb246ICIgKyBVU3RyaW5nKHJlZ0V4
cC0+ZXJyb3JNZXNzYWdlKCkpKS5VVEY4U3RyaW5nKCkuY19zdHIoKSk7CiAgICAgaWYgKGRzdCA9
PSBpZ25vcmVkUmVzdWx0KCkpCkBAIC0zMDAsNyArMzAwLDcgQEAgUmVnaXN0ZXJJRCogQXJyYXlO
b2RlOjplbWl0Q29kZShDb2RlR2VuZQogICAgIH0KIAogICAgIGlmIChtX2VsaXNpb24pIHsKLSAg
ICAgICAgUmVnaXN0ZXJJRCogdmFsdWUgPSBnZW5lcmF0b3IuZW1pdExvYWQoMCwganNOdW1iZXIo
Z2VuZXJhdG9yLmdsb2JhbEV4ZWMoKSwgbV9lbGlzaW9uICsgbGVuZ3RoKSk7CisgICAgICAgIFJl
Z2lzdGVySUQqIHZhbHVlID0gZ2VuZXJhdG9yLmVtaXRMb2FkKDAsIGpzTnVtYmVyKGdlbmVyYXRv
ci5nbG9iYWxEYXRhKCksIG1fZWxpc2lvbiArIGxlbmd0aCkpOwogICAgICAgICBnZW5lcmF0b3Iu
ZW1pdFB1dEJ5SWQoYXJyYXkuZ2V0KCksIGdlbmVyYXRvci5wcm9wZXJ0eU5hbWVzKCkubGVuZ3Ro
LCB2YWx1ZSk7CiAgICAgfQogCkBAIC03NzUsNyArNzc1LDcgQEAgUmVnaXN0ZXJJRCogSW5zdGFu
Y2VPZk5vZGU6OmVtaXRDb2RlKENvZAogICAgIFJlZlB0cjxSZWdpc3RlcklEPiBzcmMyID0gZ2Vu
ZXJhdG9yLmVtaXROb2RlKG1fZXhwcjIuZ2V0KCkpOwogCiAgICAgZ2VuZXJhdG9yLmVtaXRFeHBy
ZXNzaW9uSW5mbyhtX2Rpdm90LCBtX3N0YXJ0T2Zmc2V0LCBtX2VuZE9mZnNldCk7Ci0gICAgUmVn
aXN0ZXJJRCogc3JjMlByb3RvdHlwZSA9IGdlbmVyYXRvci5lbWl0R2V0QnlJZChnZW5lcmF0b3Iu
bmV3VGVtcG9yYXJ5KCksIHNyYzIuZ2V0KCksIGdlbmVyYXRvci5nbG9iYWxFeGVjKCktPnByb3Bl
cnR5TmFtZXMoKS5wcm90b3R5cGUpOworICAgIFJlZ2lzdGVySUQqIHNyYzJQcm90b3R5cGUgPSBn
ZW5lcmF0b3IuZW1pdEdldEJ5SWQoZ2VuZXJhdG9yLm5ld1RlbXBvcmFyeSgpLCBzcmMyLmdldCgp
LCBnZW5lcmF0b3IuZ2xvYmFsRGF0YSgpLT5wcm9wZXJ0eU5hbWVzLT5wcm90b3R5cGUpOwogCiAg
ICAgZ2VuZXJhdG9yLmVtaXRFeHByZXNzaW9uSW5mbyhtX2Rpdm90LCBtX3N0YXJ0T2Zmc2V0LCBt
X2VuZE9mZnNldCk7CiAgICAgcmV0dXJuIGdlbmVyYXRvci5lbWl0SW5zdGFuY2VPZihnZW5lcmF0
b3IuZmluYWxEZXN0aW5hdGlvbihkc3QsIHNyYzEuZ2V0KCkpLCBzcmMxLmdldCgpLCBzcmMyLmdl
dCgpLCBzcmMyUHJvdG90eXBlKTsKSW5kZXg6IEphdmFTY3JpcHRDb3JlL2tqcy9ub2Rlcy5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL2tqcy9ub2Rlcy5oCShyZXZpc2lvbiAzNzMzMCkK
KysrIEphdmFTY3JpcHRDb3JlL2tqcy9ub2Rlcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMTYsMjUg
KzExNiwxMiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgUHJlY0V4cHJlc3Npb24KICAgICB9
OwogCi0gICAgc3RydWN0IERlY2xhcmF0aW9uU3RhY2tzIHsKKyAgICBuYW1lc3BhY2UgRGVjbGFy
YXRpb25TdGFja3MgewogICAgICAgICB0eXBlZGVmIFZlY3RvcjxOb2RlKiwgMTY+IE5vZGVTdGFj
azsKLSAgICAgICAgZW51bSB7IElzQ29uc3RhbnQgPSAxLCBIYXNJbml0aWFsaXplciA9IDIgfSBW
YXJBdHRyczsKKyAgICAgICAgZW51bSBWYXJBdHRycyB7IElzQ29uc3RhbnQgPSAxLCBIYXNJbml0
aWFsaXplciA9IDIgfTsKICAgICAgICAgdHlwZWRlZiBWZWN0b3I8c3RkOjpwYWlyPElkZW50aWZp
ZXIsIHVuc2lnbmVkPiwgMTY+IFZhclN0YWNrOwogICAgICAgICB0eXBlZGVmIFZlY3RvcjxSZWZQ
dHI8RnVuY0RlY2xOb2RlPiwgMTY+IEZ1bmN0aW9uU3RhY2s7Ci0KLSAgICAgICAgRGVjbGFyYXRp
b25TdGFja3MoRXhlY1N0YXRlKiBlLCBOb2RlU3RhY2smIG4sIFZhclN0YWNrJiB2LCBGdW5jdGlv
blN0YWNrJiBmKQotICAgICAgICAgICAgOiBleGVjKGUpCi0gICAgICAgICAgICAsIG5vZGVTdGFj
ayhuKQotICAgICAgICAgICAgLCB2YXJTdGFjayh2KQotICAgICAgICAgICAgLCBmdW5jdGlvblN0
YWNrKGYpCi0gICAgICAgIHsKLSAgICAgICAgfQotCi0gICAgICAgIEV4ZWNTdGF0ZSogZXhlYzsK
LSAgICAgICAgTm9kZVN0YWNrJiBub2RlU3RhY2s7Ci0gICAgICAgIFZhclN0YWNrJiB2YXJTdGFj
azsKLSAgICAgICAgRnVuY3Rpb25TdGFjayYgZnVuY3Rpb25TdGFjazsKLSAgICB9OworICAgIH0K
IAogICAgIHN0cnVjdCBTd2l0Y2hJbmZvIHsKICAgICAgICAgZW51bSBTd2l0Y2hUeXBlIHsgU3dp
dGNoTm9uZSwgU3dpdGNoSW1tZWRpYXRlLCBTd2l0Y2hDaGFyYWN0ZXIsIFN3aXRjaFN0cmluZyB9
OwpJbmRleDogSmF2YVNjcmlwdENvcmUva2pzL3JlZ2V4cC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2
YVNjcmlwdENvcmUva2pzL3JlZ2V4cC5jcHAJKHJldmlzaW9uIDM3MzMwKQorKysgSmF2YVNjcmlw
dENvcmUva2pzL3JlZ2V4cC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMyLDkgKzMyLDcgQEAKIAog
bmFtZXNwYWNlIEpTQyB7CiAKLQotCi1pbmxpbmUgUmVnRXhwOjpSZWdFeHAoRXhlY1N0YXRlKiBl
eGVjLCBjb25zdCBVU3RyaW5nJiBwYXR0ZXJuKQoraW5saW5lIFJlZ0V4cDo6UmVnRXhwKEpTR2xv
YmFsRGF0YSogZ2xvYmFsRGF0YSwgY29uc3QgVVN0cmluZyYgcGF0dGVybikKICAgICA6IG1fcGF0
dGVybihwYXR0ZXJuKQogICAgICwgbV9mbGFnQml0cygwKQogICAgICwgbV9yZWdFeHAoMCkKQEAg
LTQyLDIyICs0MCwyMyBAQCBpbmxpbmUgUmVnRXhwOjpSZWdFeHAoRXhlY1N0YXRlKiBleGVjLCBj
CiAgICAgLCBtX251bVN1YnBhdHRlcm5zKDApCiB7CiAjaWYgRU5BQkxFKFdSRUMpCi0gICAgaWYg
KCEobV93cmVjRnVuY3Rpb24gPSAoV1JFQ0Z1bmN0aW9uKUNUSTo6Y29tcGlsZVJlZ0V4cChleGVj
LCBwYXR0ZXJuLCAmbV9udW1TdWJwYXR0ZXJucywgJm1fY29uc3RydWN0aW9uRXJyb3IpKSkKKyAg
ICBtX3dyZWNGdW5jdGlvbiA9IHJlaW50ZXJwcmV0X2Nhc3Q8V1JFQ0Z1bmN0aW9uPihDVEk6OmNv
bXBpbGVSZWdFeHAoZ2xvYmFsRGF0YS0+bWFjaGluZSwgcGF0dGVybiwgJm1fbnVtU3VicGF0dGVy
bnMsICZtX2NvbnN0cnVjdGlvbkVycm9yKSk7CisgICAgaWYgKG1fd3JlY0Z1bmN0aW9uKQorICAg
ICAgICByZXR1cm47CisgICAgLy8gRmFsbCB0aHJvdWdoIHRvIG5vbi1XUkVDIGNhc2UuCiAjZWxz
ZQotICAgIFVOVVNFRF9QQVJBTShleGVjKTsKKyAgICBVTlVTRURfUEFSQU0oZ2xvYmFsRGF0YSk7
CiAjZW5kaWYKLSAgICB7Ci0gICAgICAgIG1fcmVnRXhwID0ganNSZWdFeHBDb21waWxlKHJlaW50
ZXJwcmV0X2Nhc3Q8Y29uc3QgVUNoYXIqPihwYXR0ZXJuLmRhdGEoKSksIHBhdHRlcm4uc2l6ZSgp
LAotICAgICAgICAgICAgSlNSZWdFeHBEb05vdElnbm9yZUNhc2UsIEpTUmVnRXhwU2luZ2xlTGlu
ZSwgJm1fbnVtU3VicGF0dGVybnMsICZtX2NvbnN0cnVjdGlvbkVycm9yKTsKLSAgICB9CisgICAg
bV9yZWdFeHAgPSBqc1JlZ0V4cENvbXBpbGUocmVpbnRlcnByZXRfY2FzdDxjb25zdCBVQ2hhcio+
KHBhdHRlcm4uZGF0YSgpKSwgcGF0dGVybi5zaXplKCksCisgICAgICAgIEpTUmVnRXhwRG9Ob3RJ
Z25vcmVDYXNlLCBKU1JlZ0V4cFNpbmdsZUxpbmUsICZtX251bVN1YnBhdHRlcm5zLCAmbV9jb25z
dHJ1Y3Rpb25FcnJvcik7CiB9CiAKLVBhc3NSZWZQdHI8UmVnRXhwPiBSZWdFeHA6OmNyZWF0ZShF
eGVjU3RhdGUqIGV4ZWMsIGNvbnN0IFVTdHJpbmcmIHBhdHRlcm4pCitQYXNzUmVmUHRyPFJlZ0V4
cD4gUmVnRXhwOjpjcmVhdGUoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBjb25zdCBVU3RyaW5n
JiBwYXR0ZXJuKQogewotICAgIHJldHVybiBhZG9wdFJlZihuZXcgUmVnRXhwKGV4ZWMsIHBhdHRl
cm4pKTsKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3IFJlZ0V4cChnbG9iYWxEYXRhLCBwYXR0ZXJu
KSk7CiB9CiAKLWlubGluZSBSZWdFeHA6OlJlZ0V4cChFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IFVT
dHJpbmcmIHBhdHRlcm4sIGNvbnN0IFVTdHJpbmcmIGZsYWdzKQoraW5saW5lIFJlZ0V4cDo6UmVn
RXhwKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgY29uc3QgVVN0cmluZyYgcGF0dGVybiwgY29u
c3QgVVN0cmluZyYgZmxhZ3MpCiAgICAgOiBtX3BhdHRlcm4ocGF0dGVybikKICAgICAsIG1fZmxh
Z3MoZmxhZ3MpCiAgICAgLCBtX2ZsYWdCaXRzKDApCkBAIC04NCw3ICs4MywxMCBAQCBpbmxpbmUg
UmVnRXhwOjpSZWdFeHAoRXhlY1N0YXRlKiBleGVjLCBjCiAgICAgfQogCiAjaWYgRU5BQkxFKFdS
RUMpCi0gICAgaWYgKCEobV93cmVjRnVuY3Rpb24gPSAoV1JFQ0Z1bmN0aW9uKUNUSTo6Y29tcGls
ZVJlZ0V4cChleGVjLCBwYXR0ZXJuLCAmbV9udW1TdWJwYXR0ZXJucywgJm1fY29uc3RydWN0aW9u
RXJyb3IsIChtX2ZsYWdCaXRzICYgSWdub3JlQ2FzZSksIChtX2ZsYWdCaXRzICYgTXVsdGlsaW5l
KSkpKQorICAgIG1fd3JlY0Z1bmN0aW9uID0gcmVpbnRlcnByZXRfY2FzdDxXUkVDRnVuY3Rpb24+
KENUSTo6Y29tcGlsZVJlZ0V4cChnbG9iYWxEYXRhLT5tYWNoaW5lLCBwYXR0ZXJuLCAmbV9udW1T
dWJwYXR0ZXJucywgJm1fY29uc3RydWN0aW9uRXJyb3IsIChtX2ZsYWdCaXRzICYgSWdub3JlQ2Fz
ZSksIChtX2ZsYWdCaXRzICYgTXVsdGlsaW5lKSkpOworICAgIGlmIChtX3dyZWNGdW5jdGlvbikK
KyAgICAgICAgcmV0dXJuOworICAgIC8vIEZhbGwgdGhyb3VnaCB0byBub24tV1JFQyBjYXNlLgog
I2Vsc2UKICAgICBVTlVTRURfUEFSQU0oZXhlYyk7CiAjZW5kaWYKQEAgLTk0LDkgKzk2LDkgQEAg
aW5saW5lIFJlZ0V4cDo6UmVnRXhwKEV4ZWNTdGF0ZSogZXhlYywgYwogICAgIH0KIH0KIAotUGFz
c1JlZlB0cjxSZWdFeHA+IFJlZ0V4cDo6Y3JlYXRlKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgVVN0
cmluZyYgcGF0dGVybiwgY29uc3QgVVN0cmluZyYgZmxhZ3MpCitQYXNzUmVmUHRyPFJlZ0V4cD4g
UmVnRXhwOjpjcmVhdGUoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBjb25zdCBVU3RyaW5nJiBw
YXR0ZXJuLCBjb25zdCBVU3RyaW5nJiBmbGFncykKIHsKLSAgICByZXR1cm4gYWRvcHRSZWYobmV3
IFJlZ0V4cChleGVjLCBwYXR0ZXJuLCBmbGFncykpOworICAgIHJldHVybiBhZG9wdFJlZihuZXcg
UmVnRXhwKGdsb2JhbERhdGEsIHBhdHRlcm4sIGZsYWdzKSk7CiB9CiAKIFJlZ0V4cDo6flJlZ0V4
cCgpCkluZGV4OiBKYXZhU2NyaXB0Q29yZS9ranMvcmVnZXhwLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2
YVNjcmlwdENvcmUva2pzL3JlZ2V4cC5oCShyZXZpc2lvbiAzNzMzMCkKKysrIEphdmFTY3JpcHRD
b3JlL2tqcy9yZWdleHAuaAkod29ya2luZyBjb3B5KQpAQCAtMjIsNyArMjIsNiBAQAogI2RlZmlu
ZSBLSlNfUkVHRVhQX0gKIAogI2luY2x1ZGUgInVzdHJpbmcuaCIKLSNpbmNsdWRlICJFeGVjU3Rh
dGUuaCIKICNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgogI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVk
Lmg+CiAjaW5jbHVkZSA8d3JlYy9XUkVDLmg+CkBAIC0zMSwxMCArMzAsMTIgQEAgc3RydWN0IEpT
UmVnRXhwOwogCiBuYW1lc3BhY2UgSlNDIHsKIAorICAgIGNsYXNzIEpTR2xvYmFsRGF0YTsKKwog
ICAgIGNsYXNzIFJlZ0V4cCA6IHB1YmxpYyBSZWZDb3VudGVkPFJlZ0V4cD4gewogICAgIHB1Ymxp
YzoKLSAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8UmVnRXhwPiBjcmVhdGUoRXhlY1N0YXRlKiwg
Y29uc3QgVVN0cmluZyYgcGF0dGVybik7Ci0gICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPFJlZ0V4
cD4gY3JlYXRlKEV4ZWNTdGF0ZSosIGNvbnN0IFVTdHJpbmcmIHBhdHRlcm4sIGNvbnN0IFVTdHJp
bmcmIGZsYWdzKTsKKyAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8UmVnRXhwPiBjcmVhdGUoSlNH
bG9iYWxEYXRhKiwgY29uc3QgVVN0cmluZyYgcGF0dGVybik7CisgICAgICAgIHN0YXRpYyBQYXNz
UmVmUHRyPFJlZ0V4cD4gY3JlYXRlKEpTR2xvYmFsRGF0YSosIGNvbnN0IFVTdHJpbmcmIHBhdHRl
cm4sIGNvbnN0IFVTdHJpbmcmIGZsYWdzKTsKICAgICAgICAgflJlZ0V4cCgpOwogCiAgICAgICAg
IGJvb2wgZ2xvYmFsKCkgY29uc3QgeyByZXR1cm4gbV9mbGFnQml0cyAmIEdsb2JhbDsgfQpAQCAt
NTEsOCArNTIsOCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdW5zaWduZWQgbnVtU3VicGF0
dGVybnMoKSBjb25zdCB7IHJldHVybiBtX251bVN1YnBhdHRlcm5zOyB9CiAKICAgICBwcml2YXRl
OgotICAgICAgICBSZWdFeHAoRXhlY1N0YXRlKiwgY29uc3QgVVN0cmluZyYgcGF0dGVybik7Ci0g
ICAgICAgIFJlZ0V4cChFeGVjU3RhdGUqLCBjb25zdCBVU3RyaW5nJiBwYXR0ZXJuLCBjb25zdCBV
U3RyaW5nJiBmbGFncyk7CisgICAgICAgIFJlZ0V4cChKU0dsb2JhbERhdGEqLCBjb25zdCBVU3Ry
aW5nJiBwYXR0ZXJuKTsKKyAgICAgICAgUmVnRXhwKEpTR2xvYmFsRGF0YSosIGNvbnN0IFVTdHJp
bmcmIHBhdHRlcm4sIGNvbnN0IFVTdHJpbmcmIGZsYWdzKTsKIAogICAgICAgICB2b2lkIGNvbXBp
bGUoKTsKIApJbmRleDogSmF2YVNjcmlwdENvcmUvcHJvZmlsZXIvSGVhdnlQcm9maWxlLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvcHJvZmlsZXIvSGVhdnlQcm9maWxlLmgJKHJldmlz
aW9uIDM3MzMwKQorKysgSmF2YVNjcmlwdENvcmUvcHJvZmlsZXIvSGVhdnlQcm9maWxlLmgJKHdv
cmtpbmcgY29weSkKQEAgLTMyLDcgKzMyLDYgQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAKLSAgICBj
bGFzcyBFeGVjU3RhdGU7CiAgICAgY2xhc3MgVVN0cmluZzsKIAogICAgIGNsYXNzIEhlYXZ5UHJv
ZmlsZSA6IHB1YmxpYyBQcm9maWxlIHsKSW5kZXg6IEphdmFTY3JpcHRDb3JlL3Byb2ZpbGVyL1By
b2ZpbGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9wcm9maWxlci9Qcm9maWxlLmgJ
KHJldmlzaW9uIDM3MzMwKQorKysgSmF2YVNjcmlwdENvcmUvcHJvZmlsZXIvUHJvZmlsZS5oCSh3
b3JraW5nIGNvcHkpCkBAIC0zMyw4ICszMyw2IEBACiAKIG5hbWVzcGFjZSBKU0MgewogCi0gICAg
Y2xhc3MgRXhlY1N0YXRlOwotCiAgICAgY2xhc3MgUHJvZmlsZSA6IHB1YmxpYyBSZWZDb3VudGVk
PFByb2ZpbGU+IHsKICAgICBwdWJsaWM6CiAgICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPFByb2Zp
bGU+IGNyZWF0ZShjb25zdCBVU3RyaW5nJiB0aXRsZSwgdW5zaWduZWQgdWlkKTsKSW5kZXg6IEph
dmFTY3JpcHRDb3JlL3dyZWMvV1JFQy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUv
d3JlYy9XUkVDLmNwcAkocmV2aXNpb24gMzczMzApCisrKyBKYXZhU2NyaXB0Q29yZS93cmVjL1dS
RUMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw3ICsyOSw2IEBACiAjaWYgRU5BQkxFKFdSRUMp
CiAKICNpbmNsdWRlICJDaGFyYWN0ZXJDbGFzc0NvbnN0cnVjdG9yLmgiCi0jaW5jbHVkZSAiRXhl
Y1N0YXRlLmgiCiAjaW5jbHVkZSAiTWFjaGluZS5oIgogI2luY2x1ZGUgInBjcmVfaW50ZXJuYWwu
aCIKIApJbmRleDogSmF2YVNjcmlwdENvcmUvd3JlYy9XUkVDLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2
YVNjcmlwdENvcmUvd3JlYy9XUkVDLmgJKHJldmlzaW9uIDM3MzMwKQorKysgSmF2YVNjcmlwdENv
cmUvd3JlYy9XUkVDLmgJKHdvcmtpbmcgY29weSkKQEAgLTQzLDcgKzQzLDYgQEAgbmFtZXNwYWNl
IEpTQyB7CiAKICAgICB0eXBlZGVmIGludCAoKldSRUNGdW5jdGlvbikoY29uc3QgVUNoYXIqIGlu
cHV0LCB1bnNpZ25lZCBzdGFydCwgdW5zaWduZWQgbGVuZ3RoLCBpbnQqIG91dHB1dCkgV1JFQ19D
QUxMOwogCi0gICAgY2xhc3MgRXhlY1N0YXRlOwogICAgIGNsYXNzIEdlbmVyYXRlQXRvbUZ1bmN0
b3I7CiAgICAgc3RydWN0IENoYXJhY3RlckNsYXNzUmFuZ2U7CiAgICAgc3RydWN0IENoYXJhY3Rl
ckNsYXNzOwpJbmRleDogV2ViS2l0L21hYy9XZWJWaWV3L1dlYlNjcmlwdERlYnVnZ2VyLm1tCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYktpdC9tYWMvV2ViVmlldy9XZWJTY3JpcHREZWJ1Z2dlci5tbQkocmV2
aXNpb24gMzczMzApCisrKyBXZWJLaXQvbWFjL1dlYlZpZXcvV2ViU2NyaXB0RGVidWdnZXIubW0J
KHdvcmtpbmcgY29weSkKQEAgLTgwLDcgKzgwLDcgQEAgV2ViU2NyaXB0RGVidWdnZXI6OldlYlNj
cmlwdERlYnVnZ2VyKEpTRwogICAgIDogbV9jYWxsaW5nRGVsZWdhdGUoZmFsc2UpCiB7CiAgICAg
YXR0YWNoKGdsb2JhbE9iamVjdCk7Ci0gICAgRGVidWdnZXJDYWxsRnJhbWUgZ2xvYmFsQ2FsbEZy
YW1lKGdsb2JhbE9iamVjdCwgMCwgZ2xvYmFsT2JqZWN0LT5nbG9iYWxTY29wZUNoYWluKCkubm9k
ZSgpLCAwLCAwKTsKKyAgICBEZWJ1Z2dlckNhbGxGcmFtZSBnbG9iYWxDYWxsRnJhbWUoZ2xvYmFs
T2JqZWN0LT5nbG9iYWxFeGVjKCksIDApOwogICAgIGNhbGxFdmVudChnbG9iYWxDYWxsRnJhbWUs
IDAsIC0xKTsKIH0KIApJbmRleDogV2ViS2l0U2l0ZS9jb2RpbmcvUmVmUHRyLmh0bWwKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViS2l0U2l0ZS9jb2RpbmcvUmVmUHRyLmh0bWwJKHJldmlzaW9uIDM3MzMwKQor
KysgV2ViS2l0U2l0ZS9jb2RpbmcvUmVmUHRyLmh0bWwJKHdvcmtpbmcgY29weSkKQEAgLTExNyw3
ICsxMTcsNyBAQCB2b2lkIERvY3VtZW50OjpzZXRUaXRsZShUaXRsZSogdCkKICAKIFJlZlB0ciZs
dDtOb2RlJmd0OyBjcmVhdGVTcGVjaWFsTm9kZSgpCiB7Ci0gICAgUmVmUHRyJmx0O05vZGUmZ3Q7
IGEgPSBuZXcgTm9kZTsKKyAgICBSZWZQdHImbHQ7Tm9kZSZndDsgYSA9IGNyZWF0ZU5vZGUoKTsK
ICAgICBhLSZndDtzZXRTcGVjaWFsKHRydWUpOwogICAgIHJldHVybiBhOwogfQpAQCAtMTUwLDcg
KzE1MCw3IEBAIExldOKAmXMgdGFrZSBhIGxvb2sgYXQgYSBuZXcgdmVyc2lvbiBvZiAKIAogUGFz
c1JlZlB0ciZsdDtOb2RlJmd0OyBjcmVhdGVTcGVjaWFsTm9kZSgpCiB7Ci0gICAgUGFzc1JlZlB0
ciZsdDtOb2RlJmd0OyBhID0gbmV3IE5vZGU7CisgICAgUGFzc1JlZlB0ciZsdDtOb2RlJmd0OyBh
ID0gY3JlYXRlTm9kZSgpOwogICAgIGEtJmd0O3NldFNwZWNpYWwodHJ1ZSk7CiAgICAgcmV0dXJu
IGE7CiB9CkBAIC0yMDMsNyArMjAzLDcgQEAgY2hhbmdpbmcgcmVmZXJlbmNlIGNvdW50cy48L3A+
CiAKIDxwcmUgY2xhc3M9ImNvZGUiPlBhc3NSZWZQdHImbHQ7Tm9kZSZndDsgY3JlYXRlU3BlY2lh
bE5vZGUoKQogewotICAgIFJlZlB0ciZsdDtOb2RlJmd0OyBhID0gbmV3IE5vZGU7CisgICAgUmVm
UHRyJmx0O05vZGUmZ3Q7IGEgPSBjcmVhdGVOb2RlKCk7CiAgICAgYS0mZ3Q7c2V0Q3JlYXRlZCh0
cnVlKTsKICAgICByZXR1cm4gYS5yZWxlYXNlKCk7CiB9Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>24128</attachid>
            <date>2008-10-06 16:19:09 -0700</date>
            <delta_ts>2008-10-07 14:25:10 -0700</delta_ts>
            <desc>patch</desc>
            <filename>ExecStateCleanupPatch.txt</filename>
            <type>text/plain</type>
            <size>306862</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">SW5kZXg6IEphdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDM3MzUyKQorKysgSmF2YVNjcmlwdENvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjMwIEBACisyMDA4LTEwLTA2ICBEYXJpbiBB
ZGxlciAgPGRhcmluQGFwcGxlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICAtIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0yMTQwMworICAgICAgICAgIEJ1ZyAyMTQwMzogdXNlIG5ldyBDYWxsRnJhbWUgY2xhc3MgcmF0
aGVyIHRoYW4gUmVnaXN0ZXIqIGZvciBjYWxsIGZyYW1lIG1hbmlwdWxhdGlvbgorCisgICAgICAg
IEFkZCBDYWxsRnJhbWUgYXMgYSBzeW5vbnltIGZvciBFeGVjU3RhdGUuIFNvbWUgZGF5IHdlIHNo
b3VsZCBzd2l0Y2ggZXZlcnlvbmUgb3ZlciB0bworICAgICAgICB0aGUgbmV3IG5hbWUuCisKKyAg
ICAgICAgVXNlIENhbGxGcmFtZSogY29uc2lzdGVudGx5IHJhdGhlciB0aGFuIFJlZ2lzdGVyKiBv
ciBFeGVjU3RhdGUqIGluIGxvdy1sZXZlbCBjb2RlIHN1Y2gKKyAgICAgICAgYXMgTWFjaGluZS5j
cHAgYW5kIENUSS5jcHAuIFNpbWlsYXJseSwgdXNlIGNhbGxGcmFtZSByYXRoZXIgdGhhbiByIGFz
IGl0cyBuYW1lIGFuZCB1c2UKKyAgICAgICAgYWNjZXNzb3IgZnVuY3Rpb25zIHRvIGdldCBhdCB0
aGluZ3MgaW4gdGhlIGZyYW1lLgorCisgICAgICAgIEVsaW1pbmF0ZSBvdGhlciB1c2VzIG9mIEV4
ZWNTdGF0ZSogdGhhdCBhcmVuJ3QgbmVlZGVkLCByZXBsYWNpbmcgaW4gc29tZSBjYXNlcyB3aXRo
CisgICAgICAgIEpTR2xvYmFsRGF0YSogYW5kIGluIG90aGVyIGNhc2VzIGVsaW1pbmF0aW5nIHRo
ZW0gZW50aXJlbHkuCisKKyAgICAgICAgKiBBUEkvSlNPYmplY3RSZWYuY3BwOgorICAgICAgICAo
SlNPYmplY3RNYWtlRnVuY3Rpb25XaXRoQ2FsbGJhY2spOgorICAgICAgICAoSlNPYmplY3RNYWtl
RnVuY3Rpb24pOgorICAgICAgICAoSlNPYmplY3RIYXNQcm9wZXJ0eSk6CisgICAgICAgIChKU09i
amVjdEdldFByb3BlcnR5KToKKyAgICAgICAgKEpTT2JqZWN0U2V0UHJvcGVydHkpOgorICAgICAg
ICAoSlNPYmplY3REZWxldGVQcm9wZXJ0eSk6CisgICAgICAgICogQVBJL09wYXF1ZUpTU3RyaW5n
LmNwcDoKKyAgICAgICAgKiBBUEkvT3BhcXVlSlNTdHJpbmcuaDoKKyAgICAgICAgKiBWTS9DVEku
Y3BwOgorICAgICAgICAoSlNDOjpDVEk6OmdldENvbnN0YW50KToKKyAgICAgICAgKEpTQzo6Q1RJ
OjplbWl0R2V0QXJnKToKKyAgICAgICAgKEpTQzo6Q1RJOjplbWl0R2V0UHV0QXJnKToKKyAgICAg
ICAgKEpTQzo6Q1RJOjpnZXRDb25zdGFudEltbWVkaWF0ZU51bWVyaWNBcmcpOgorICAgICAgICAo
SlNDOjpDVEk6OnByaW50T3Bjb2RlT3BlcmFuZFR5cGVzKToKKyAgICAgICAgKEpTQzo6Q1RJOjpD
VEkpOgorICAgICAgICAoSlNDOjpDVEk6OmNvbXBpbGVPcENhbGwpOgorICAgICAgICAoSlNDOjpD
VEk6OmNvbXBpbGVCaW5hcnlBcml0aE9wKToKKyAgICAgICAgKEpTQzo6Q1RJOjpwcml2YXRlQ29t
cGlsZU1haW5QYXNzKToKKyAgICAgICAgKEpTQzo6Q1RJOjpwcml2YXRlQ29tcGlsZSk6CisgICAg
ICAgIChKU0M6OkNUSTo6cHJpdmF0ZUNvbXBpbGVHZXRCeUlkUHJvdG8pOgorICAgICAgICAoSlND
OjpDVEk6OnByaXZhdGVDb21waWxlR2V0QnlJZENoYWluKToKKyAgICAgICAgKEpTQzo6Q1RJOjpj
b21waWxlUmVnRXhwKToKKyAgICAgICAgKiBWTS9DVEkuaDoKKyAgICAgICAgKiBWTS9Db2RlQmxv
Y2suaDoKKyAgICAgICAgKiBWTS9Db2RlR2VuZXJhdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6Q29k
ZUdlbmVyYXRvcjo6ZW1pdEVxdWFsaXR5T3ApOgorICAgICAgICAoSlNDOjpDb2RlR2VuZXJhdG9y
OjplbWl0TG9hZCk6CisgICAgICAgIChKU0M6OkNvZGVHZW5lcmF0b3I6OmVtaXRVbmV4cGVjdGVk
TG9hZCk6CisgICAgICAgIChKU0M6OkNvZGVHZW5lcmF0b3I6OmVtaXRDb25zdHJ1Y3QpOgorICAg
ICAgICAqIFZNL0NvZGVHZW5lcmF0b3IuaDoKKyAgICAgICAgKiBWTS9NYWNoaW5lLmNwcDoKKyAg
ICAgICAgKEpTQzo6anNMZXNzKToKKyAgICAgICAgKEpTQzo6anNMZXNzRXEpOgorICAgICAgICAo
SlNDOjpqc0FkZFNsb3dDYXNlKToKKyAgICAgICAgKEpTQzo6anNBZGQpOgorICAgICAgICAoSlND
Ojpqc1R5cGVTdHJpbmdGb3JWYWx1ZSk6CisgICAgICAgIChKU0M6Ok1hY2hpbmU6OnJlc29sdmUp
OgorICAgICAgICAoSlNDOjpNYWNoaW5lOjpyZXNvbHZlU2tpcCk6CisgICAgICAgIChKU0M6Ok1h
Y2hpbmU6OnJlc29sdmVHbG9iYWwpOgorICAgICAgICAoSlNDOjppbmxpbmVSZXNvbHZlQmFzZSk6
CisgICAgICAgIChKU0M6Ok1hY2hpbmU6OnJlc29sdmVCYXNlKToKKyAgICAgICAgKEpTQzo6TWFj
aGluZTo6cmVzb2x2ZUJhc2VBbmRQcm9wZXJ0eSk6CisgICAgICAgIChKU0M6Ok1hY2hpbmU6OnJl
c29sdmVCYXNlQW5kRnVuYyk6CisgICAgICAgIChKU0M6Ok1hY2hpbmU6OnNsaWRlUmVnaXN0ZXJX
aW5kb3dGb3JDYWxsKToKKyAgICAgICAgKEpTQzo6aXNOb3RPYmplY3QpOgorICAgICAgICAoSlND
OjpNYWNoaW5lOjpjYWxsRXZhbCk6CisgICAgICAgIChKU0M6Ok1hY2hpbmU6OmR1bXBDYWxsRnJh
bWUpOgorICAgICAgICAoSlNDOjpNYWNoaW5lOjpkdW1wUmVnaXN0ZXJzKToKKyAgICAgICAgKEpT
Qzo6TWFjaGluZTo6dW53aW5kQ2FsbEZyYW1lKToKKyAgICAgICAgKEpTQzo6TWFjaGluZTo6dGhy
b3dFeGNlcHRpb24pOgorICAgICAgICAoSlNDOjpEeW5hbWljR2xvYmFsT2JqZWN0U2NvcGU6OkR5
bmFtaWNHbG9iYWxPYmplY3RTY29wZSk6CisgICAgICAgIChKU0M6OkR5bmFtaWNHbG9iYWxPYmpl
Y3RTY29wZTo6fkR5bmFtaWNHbG9iYWxPYmplY3RTY29wZSk6CisgICAgICAgIChKU0M6Ok1hY2hp
bmU6OmV4ZWN1dGUpOgorICAgICAgICAoSlNDOjpNYWNoaW5lOjpkZWJ1Zyk6CisgICAgICAgIChK
U0M6Ok1hY2hpbmU6OmNyZWF0ZUV4Y2VwdGlvblNjb3BlKToKKyAgICAgICAgKEpTQzo6Y2FjaGVQ
cm90b3R5cGVDaGFpbik6CisgICAgICAgIChKU0M6Ok1hY2hpbmU6OnRyeUNhY2hlUHV0QnlJRCk6
CisgICAgICAgIChKU0M6Ok1hY2hpbmU6OnRyeUNhY2hlR2V0QnlJRCk6CisgICAgICAgIChKU0M6
Ok1hY2hpbmU6OnByaXZhdGVFeGVjdXRlKToKKyAgICAgICAgKEpTQzo6TWFjaGluZTo6cmV0cmll
dmVBcmd1bWVudHMpOgorICAgICAgICAoSlNDOjpNYWNoaW5lOjpyZXRyaWV2ZUNhbGxlcik6Cisg
ICAgICAgIChKU0M6Ok1hY2hpbmU6OnJldHJpZXZlTGFzdENhbGxlcik6CisgICAgICAgIChKU0M6
Ok1hY2hpbmU6OmZpbmRGdW5jdGlvbkNhbGxGcmFtZSk6CisgICAgICAgIChKU0M6Ok1hY2hpbmU6
OmdldEFyZ3VtZW50c0RhdGEpOgorICAgICAgICAoSlNDOjpNYWNoaW5lOjp0cnlDVElDYWNoZVB1
dEJ5SUQpOgorICAgICAgICAoSlNDOjpNYWNoaW5lOjpnZXRDVElBcnJheUxlbmd0aFRyYW1wb2xp
bmUpOgorICAgICAgICAoSlNDOjpNYWNoaW5lOjpnZXRDVElTdHJpbmdMZW5ndGhUcmFtcG9saW5l
KToKKyAgICAgICAgKEpTQzo6TWFjaGluZTo6dHJ5Q1RJQ2FjaGVHZXRCeUlEKToKKyAgICAgICAg
KEpTQzo6TWFjaGluZTo6Y3RpX29wX2NvbnZlcnRfdGhpcyk6CisgICAgICAgIChKU0M6Ok1hY2hp
bmU6OmN0aV9vcF9lbmQpOgorICAgICAgICAoSlNDOjpNYWNoaW5lOjpjdGlfb3BfYWRkKToKKyAg
ICAgICAgKEpTQzo6TWFjaGluZTo6Y3RpX29wX3ByZV9pbmMpOgorICAgICAgICAoSlNDOjpNYWNo
aW5lOjpjdGlfdGltZW91dF9jaGVjayk6CisgICAgICAgIChKU0M6Ok1hY2hpbmU6OmN0aV9vcF9s
b29wX2lmX2xlc3MpOgorICAgICAgICAoSlNDOjpNYWNoaW5lOjpjdGlfb3BfbG9vcF9pZl9sZXNz
ZXEpOgorICAgICAgICAoSlNDOjpNYWNoaW5lOjpjdGlfb3BfbmV3X29iamVjdCk6CisgICAgICAg
IChKU0M6Ok1hY2hpbmU6OmN0aV9vcF9wdXRfYnlfaWQpOgorICAgICAgICAoSlNDOjpNYWNoaW5l
OjpjdGlfb3BfcHV0X2J5X2lkX3NlY29uZCk6CisgICAgICAgIChKU0M6Ok1hY2hpbmU6OmN0aV9v
cF9wdXRfYnlfaWRfZ2VuZXJpYyk6CisgICAgICAgIChKU0M6Ok1hY2hpbmU6OmN0aV9vcF9wdXRf
YnlfaWRfZmFpbCk6CisgICAgICAgIChKU0M6Ok1hY2hpbmU6OmN0aV9vcF9nZXRfYnlfaWQpOgor
ICAgICAgICAoSlNDOjpNYWNoaW5lOjpjdGlfb3BfZ2V0X2J5X2lkX3NlY29uZCk6CisgICAgICAg
IChKU0M6Ok1hY2hpbmU6OmN0aV9vcF9nZXRfYnlfaWRfZ2VuZXJpYyk6CisgICAgICAgIChKU0M6
Ok1hY2hpbmU6OmN0aV9vcF9nZXRfYnlfaWRfZmFpbCk6CisgICAgICAgIChKU0M6Ok1hY2hpbmU6
OmN0aV9vcF9pbnN0YW5jZW9mKToKKyAgICAgICAgKEpTQzo6TWFjaGluZTo6Y3RpX29wX2RlbF9i
eV9pZCk6CisgICAgICAgIChKU0M6Ok1hY2hpbmU6OmN0aV9vcF9tdWwpOgorICAgICAgICAoSlND
OjpNYWNoaW5lOjpjdGlfb3BfbmV3X2Z1bmMpOgorICAgICAgICAoSlNDOjpNYWNoaW5lOjpjdGlf
b3BfY2FsbF9KU0Z1bmN0aW9uKToKKyAgICAgICAgKEpTQzo6TWFjaGluZTo6Y3RpX3ZtX2NvbXBp
bGUpOgorICAgICAgICAoSlNDOjpNYWNoaW5lOjpjdGlfb3BfcHVzaF9hY3RpdmF0aW9uKToKKyAg
ICAgICAgKEpTQzo6TWFjaGluZTo6Y3RpX29wX2NhbGxfTm90SlNGdW5jdGlvbik6CisgICAgICAg
IChKU0M6Ok1hY2hpbmU6OmN0aV9vcF9jcmVhdGVfYXJndW1lbnRzKToKKyAgICAgICAgKEpTQzo6
TWFjaGluZTo6Y3RpX29wX3RlYXJfb2ZmX2FjdGl2YXRpb24pOgorICAgICAgICAoSlNDOjpNYWNo
aW5lOjpjdGlfb3BfdGVhcl9vZmZfYXJndW1lbnRzKToKKyAgICAgICAgKEpTQzo6TWFjaGluZTo6
Y3RpX29wX3JldF9wcm9maWxlcik6CisgICAgICAgIChKU0M6Ok1hY2hpbmU6OmN0aV9vcF9yZXRf
c2NvcGVDaGFpbik6CisgICAgICAgIChKU0M6Ok1hY2hpbmU6OmN0aV9vcF9uZXdfYXJyYXkpOgor
ICAgICAgICAoSlNDOjpNYWNoaW5lOjpjdGlfb3BfcmVzb2x2ZSk6CisgICAgICAgIChKU0M6Ok1h
Y2hpbmU6OmN0aV9vcF9jb25zdHJ1Y3RfSlNDb25zdHJ1Y3QpOgorICAgICAgICAoSlNDOjpNYWNo
aW5lOjpjdGlfb3BfY29uc3RydWN0X05vdEpTQ29uc3RydWN0KToKKyAgICAgICAgKEpTQzo6TWFj
aGluZTo6Y3RpX29wX2dldF9ieV92YWwpOgorICAgICAgICAoSlNDOjpNYWNoaW5lOjpjdGlfb3Bf
cmVzb2x2ZV9mdW5jKToKKyAgICAgICAgKEpTQzo6TWFjaGluZTo6Y3RpX29wX3N1Yik6CisgICAg
ICAgIChKU0M6Ok1hY2hpbmU6OmN0aV9vcF9wdXRfYnlfdmFsKToKKyAgICAgICAgKEpTQzo6TWFj
aGluZTo6Y3RpX29wX3B1dF9ieV92YWxfYXJyYXkpOgorICAgICAgICAoSlNDOjpNYWNoaW5lOjpj
dGlfb3BfbGVzc2VxKToKKyAgICAgICAgKEpTQzo6TWFjaGluZTo6Y3RpX29wX2xvb3BfaWZfdHJ1
ZSk6CisgICAgICAgIChKU0M6Ok1hY2hpbmU6OmN0aV9vcF9uZWdhdGUpOgorICAgICAgICAoSlND
OjpNYWNoaW5lOjpjdGlfb3BfcmVzb2x2ZV9iYXNlKToKKyAgICAgICAgKEpTQzo6TWFjaGluZTo6
Y3RpX29wX3Jlc29sdmVfc2tpcCk6CisgICAgICAgIChKU0M6Ok1hY2hpbmU6OmN0aV9vcF9yZXNv
bHZlX2dsb2JhbCk6CisgICAgICAgIChKU0M6Ok1hY2hpbmU6OmN0aV9vcF9kaXYpOgorICAgICAg
ICAoSlNDOjpNYWNoaW5lOjpjdGlfb3BfcHJlX2RlYyk6CisgICAgICAgIChKU0M6Ok1hY2hpbmU6
OmN0aV9vcF9qbGVzcyk6CisgICAgICAgIChKU0M6Ok1hY2hpbmU6OmN0aV9vcF9ub3QpOgorICAg
ICAgICAoSlNDOjpNYWNoaW5lOjpjdGlfb3BfanRydWUpOgorICAgICAgICAoSlNDOjpNYWNoaW5l
OjpjdGlfb3BfcG9zdF9pbmMpOgorICAgICAgICAoSlNDOjpNYWNoaW5lOjpjdGlfb3BfZXEpOgor
ICAgICAgICAoSlNDOjpNYWNoaW5lOjpjdGlfb3BfbHNoaWZ0KToKKyAgICAgICAgKEpTQzo6TWFj
aGluZTo6Y3RpX29wX2JpdGFuZCk6CisgICAgICAgIChKU0M6Ok1hY2hpbmU6OmN0aV9vcF9yc2hp
ZnQpOgorICAgICAgICAoSlNDOjpNYWNoaW5lOjpjdGlfb3BfYml0bm90KToKKyAgICAgICAgKEpT
Qzo6TWFjaGluZTo6Y3RpX29wX3Jlc29sdmVfd2l0aF9iYXNlKToKKyAgICAgICAgKEpTQzo6TWFj
aGluZTo6Y3RpX29wX25ld19mdW5jX2V4cCk6CisgICAgICAgIChKU0M6Ok1hY2hpbmU6OmN0aV9v
cF9tb2QpOgorICAgICAgICAoSlNDOjpNYWNoaW5lOjpjdGlfb3BfbGVzcyk6CisgICAgICAgIChK
U0M6Ok1hY2hpbmU6OmN0aV9vcF9uZXEpOgorICAgICAgICAoSlNDOjpNYWNoaW5lOjpjdGlfb3Bf
cG9zdF9kZWMpOgorICAgICAgICAoSlNDOjpNYWNoaW5lOjpjdGlfb3BfdXJzaGlmdCk6CisgICAg
ICAgIChKU0M6Ok1hY2hpbmU6OmN0aV9vcF9iaXR4b3IpOgorICAgICAgICAoSlNDOjpNYWNoaW5l
OjpjdGlfb3BfbmV3X3JlZ2V4cCk6CisgICAgICAgIChKU0M6Ok1hY2hpbmU6OmN0aV9vcF9iaXRv
cik6CisgICAgICAgIChKU0M6Ok1hY2hpbmU6OmN0aV9vcF9jYWxsX2V2YWwpOgorICAgICAgICAo
SlNDOjpNYWNoaW5lOjpjdGlfb3BfdGhyb3cpOgorICAgICAgICAoSlNDOjpNYWNoaW5lOjpjdGlf
b3BfZ2V0X3BuYW1lcyk6CisgICAgICAgIChKU0M6Ok1hY2hpbmU6OmN0aV9vcF9uZXh0X3BuYW1l
KToKKyAgICAgICAgKEpTQzo6TWFjaGluZTo6Y3RpX29wX3B1c2hfc2NvcGUpOgorICAgICAgICAo
SlNDOjpNYWNoaW5lOjpjdGlfb3BfcG9wX3Njb3BlKToKKyAgICAgICAgKEpTQzo6TWFjaGluZTo6
Y3RpX29wX3R5cGVvZik6CisgICAgICAgIChKU0M6Ok1hY2hpbmU6OmN0aV9vcF90b19qc251bWJl
cik6CisgICAgICAgIChKU0M6Ok1hY2hpbmU6OmN0aV9vcF9pbik6CisgICAgICAgIChKU0M6Ok1h
Y2hpbmU6OmN0aV9vcF9wdXNoX25ld19zY29wZSk6CisgICAgICAgIChKU0M6Ok1hY2hpbmU6OmN0
aV9vcF9qbXBfc2NvcGVzKToKKyAgICAgICAgKEpTQzo6TWFjaGluZTo6Y3RpX29wX3B1dF9ieV9p
bmRleCk6CisgICAgICAgIChKU0M6Ok1hY2hpbmU6OmN0aV9vcF9zd2l0Y2hfaW1tKToKKyAgICAg
ICAgKEpTQzo6TWFjaGluZTo6Y3RpX29wX3N3aXRjaF9jaGFyKToKKyAgICAgICAgKEpTQzo6TWFj
aGluZTo6Y3RpX29wX3N3aXRjaF9zdHJpbmcpOgorICAgICAgICAoSlNDOjpNYWNoaW5lOjpjdGlf
b3BfZGVsX2J5X3ZhbCk6CisgICAgICAgIChKU0M6Ok1hY2hpbmU6OmN0aV9vcF9wdXRfZ2V0dGVy
KToKKyAgICAgICAgKEpTQzo6TWFjaGluZTo6Y3RpX29wX3B1dF9zZXR0ZXIpOgorICAgICAgICAo
SlNDOjpNYWNoaW5lOjpjdGlfb3BfbmV3X2Vycm9yKToKKyAgICAgICAgKEpTQzo6TWFjaGluZTo6
Y3RpX29wX2RlYnVnKToKKyAgICAgICAgKEpTQzo6TWFjaGluZTo6Y3RpX3ZtX3Rocm93KToKKyAg
ICAgICAgKiBWTS9NYWNoaW5lLmg6CisgICAgICAgICogVk0vUmVnaXN0ZXIuaDoKKyAgICAgICAg
KiBWTS9SZWdpc3RlckZpbGUuaDoKKyAgICAgICAgKiBranMvQXJndW1lbnRzLmg6CisgICAgICAg
ICoga2pzL0RlYnVnZ2VyQ2FsbEZyYW1lLmNwcDoKKyAgICAgICAgKEpTQzo6RGVidWdnZXJDYWxs
RnJhbWU6OmZ1bmN0aW9uTmFtZSk6CisgICAgICAgIChKU0M6OkRlYnVnZ2VyQ2FsbEZyYW1lOjp0
eXBlKToKKyAgICAgICAgKEpTQzo6RGVidWdnZXJDYWxsRnJhbWU6OnRoaXNPYmplY3QpOgorICAg
ICAgICAoSlNDOjpEZWJ1Z2dlckNhbGxGcmFtZTo6ZXZhbHVhdGUpOgorICAgICAgICAqIGtqcy9E
ZWJ1Z2dlckNhbGxGcmFtZS5oOgorICAgICAgICAqIGtqcy9FeGVjU3RhdGUuY3BwOgorICAgICAg
ICAoSlNDOjpDYWxsRnJhbWU6OnRoaXNWYWx1ZSk6CisgICAgICAgICoga2pzL0V4ZWNTdGF0ZS5o
OgorICAgICAgICAqIGtqcy9GdW5jdGlvbkNvbnN0cnVjdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6
Y29uc3RydWN0RnVuY3Rpb24pOgorICAgICAgICAqIGtqcy9KU0FjdGl2YXRpb24uY3BwOgorICAg
ICAgICAoSlNDOjpKU0FjdGl2YXRpb246OkpTQWN0aXZhdGlvbik6CisgICAgICAgIChKU0M6OkpT
QWN0aXZhdGlvbjo6YXJndW1lbnRzR2V0dGVyKToKKyAgICAgICAgKiBranMvSlNBY3RpdmF0aW9u
Lmg6CisgICAgICAgICoga2pzL0pTR2xvYmFsT2JqZWN0LmNwcDoKKyAgICAgICAgKEpTQzo6SlNH
bG9iYWxPYmplY3Q6OmluaXQpOgorICAgICAgICAqIGtqcy9KU0dsb2JhbE9iamVjdEZ1bmN0aW9u
cy5jcHA6CisgICAgICAgIChKU0M6Omdsb2JhbEZ1bmNFdmFsKToKKyAgICAgICAgKiBranMvSlNW
YXJpYWJsZU9iamVjdC5oOgorICAgICAgICAqIGtqcy9QYXJzZXIuY3BwOgorICAgICAgICAoSlND
OjpQYXJzZXI6OnBhcnNlKToKKyAgICAgICAgKiBranMvUmVnRXhwQ29uc3RydWN0b3IuY3BwOgor
ICAgICAgICAoSlNDOjpjb25zdHJ1Y3RSZWdFeHApOgorICAgICAgICAqIGtqcy9SZWdFeHBQcm90
b3R5cGUuY3BwOgorICAgICAgICAoSlNDOjpyZWdFeHBQcm90b0Z1bmNDb21waWxlKToKKyAgICAg
ICAgKiBranMvU2hlbGwuY3BwOgorICAgICAgICAocHJldHR5UHJpbnRTY3JpcHQpOgorICAgICAg
ICAqIGtqcy9TdHJpbmdQcm90b3R5cGUuY3BwOgorICAgICAgICAoSlNDOjpzdHJpbmdQcm90b0Z1
bmNNYXRjaCk6CisgICAgICAgIChKU0M6OnN0cmluZ1Byb3RvRnVuY1NlYXJjaCk6CisgICAgICAg
ICoga2pzL2lkZW50aWZpZXIuY3BwOgorICAgICAgICAoSlNDOjpJZGVudGlmaWVyOjpjaGVja1Nh
bWVJZGVudGlmaWVyVGFibGUpOgorICAgICAgICAqIGtqcy9pbnRlcnByZXRlci5jcHA6CisgICAg
ICAgIChKU0M6OkludGVycHJldGVyOjpjaGVja1N5bnRheCk6CisgICAgICAgIChKU0M6OkludGVy
cHJldGVyOjpldmFsdWF0ZSk6CisgICAgICAgICoga2pzL25vZGVzLmNwcDoKKyAgICAgICAgKEpT
Qzo6VGhyb3dhYmxlRXhwcmVzc2lvbkRhdGE6OmVtaXRUaHJvd0Vycm9yKToKKyAgICAgICAgKEpT
Qzo6UmVnRXhwTm9kZTo6ZW1pdENvZGUpOgorICAgICAgICAoSlNDOjpBcnJheU5vZGU6OmVtaXRD
b2RlKToKKyAgICAgICAgKEpTQzo6SW5zdGFuY2VPZk5vZGU6OmVtaXRDb2RlKToKKyAgICAgICAg
KiBranMvbm9kZXMuaDoKKyAgICAgICAgKiBranMvcmVnZXhwLmNwcDoKKyAgICAgICAgKEpTQzo6
UmVnRXhwOjpSZWdFeHApOgorICAgICAgICAoSlNDOjpSZWdFeHA6OmNyZWF0ZSk6CisgICAgICAg
ICoga2pzL3JlZ2V4cC5oOgorICAgICAgICAqIHByb2ZpbGVyL0hlYXZ5UHJvZmlsZS5oOgorICAg
ICAgICAqIHByb2ZpbGVyL1Byb2ZpbGUuaDoKKyAgICAgICAgKiB3cmVjL1dSRUMuY3BwOgorICAg
ICAgICAqIHdyZWMvV1JFQy5oOgorCiAyMDA4LTEwLTA2ICBLZXZpbiBNY0N1bGxvdWdoICA8a21j
Y3VsbG91Z2hAYXBwbGUuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IFRpbSBIYXRjaGVyaSBh
bmQgT2xpdmVyIEh1bnQuCkluZGV4OiBKYXZhU2NyaXB0Q29yZS9BUEkvSlNPYmplY3RSZWYuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL0FQSS9KU09iamVjdFJlZi5jcHAJKHJldmlz
aW9uIDM3MzUyKQorKysgSmF2YVNjcmlwdENvcmUvQVBJL0pTT2JqZWN0UmVmLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtOTIsNyArOTIsNyBAQCBKU09iamVjdFJlZiBKU09iamVjdE1ha2VGdW5jdGlv
bldpdGhDYWxsCiAgICAgZXhlYy0+Z2xvYmFsRGF0YSgpLmhlYXAucmVnaXN0ZXJUaHJlYWQoKTsK
ICAgICBKU0xvY2sgbG9jayhleGVjKTsKIAotICAgIElkZW50aWZpZXIgbmFtZUlEID0gbmFtZSA/
IG5hbWUtPmlkZW50aWZpZXIoZXhlYykgOiBJZGVudGlmaWVyKGV4ZWMsICJhbm9ueW1vdXMiKTsK
KyAgICBJZGVudGlmaWVyIG5hbWVJRCA9IG5hbWUgPyBuYW1lLT5pZGVudGlmaWVyKCZleGVjLT5n
bG9iYWxEYXRhKCkpIDogSWRlbnRpZmllcihleGVjLCAiYW5vbnltb3VzIik7CiAgICAgCiAgICAg
cmV0dXJuIHRvUmVmKG5ldyAoZXhlYykgSlNDYWxsYmFja0Z1bmN0aW9uKGV4ZWMsIGNhbGxBc0Z1
bmN0aW9uLCBuYW1lSUQpKTsKIH0KQEAgLTExOCw3ICsxMTgsNyBAQCBKU09iamVjdFJlZiBKU09i
amVjdE1ha2VGdW5jdGlvbihKU0NvbnRlCiAgICAgZXhlYy0+Z2xvYmFsRGF0YSgpLmhlYXAucmVn
aXN0ZXJUaHJlYWQoKTsKICAgICBKU0xvY2sgbG9jayhleGVjKTsKIAotICAgIElkZW50aWZpZXIg
bmFtZUlEID0gbmFtZSA/IG5hbWUtPmlkZW50aWZpZXIoZXhlYykgOiBJZGVudGlmaWVyKGV4ZWMs
ICJhbm9ueW1vdXMiKTsKKyAgICBJZGVudGlmaWVyIG5hbWVJRCA9IG5hbWUgPyBuYW1lLT5pZGVu
dGlmaWVyKCZleGVjLT5nbG9iYWxEYXRhKCkpIDogSWRlbnRpZmllcihleGVjLCAiYW5vbnltb3Vz
Iik7CiAgICAgCiAgICAgQXJnTGlzdCBhcmdzOwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBwYXJhbWV0ZXJDb3VudDsgaSsrKQpAQCAtMjQ2LDcgKzI0Niw3IEBAIGJvb2wgSlNPYmplY3RI
YXNQcm9wZXJ0eShKU0NvbnRleHRSZWYgY3QKIAogICAgIEpTT2JqZWN0KiBqc09iamVjdCA9IHRv
SlMob2JqZWN0KTsKICAgICAKLSAgICByZXR1cm4ganNPYmplY3QtPmhhc1Byb3BlcnR5KGV4ZWMs
IHByb3BlcnR5TmFtZS0+aWRlbnRpZmllcihleGVjKSk7CisgICAgcmV0dXJuIGpzT2JqZWN0LT5o
YXNQcm9wZXJ0eShleGVjLCBwcm9wZXJ0eU5hbWUtPmlkZW50aWZpZXIoJmV4ZWMtPmdsb2JhbERh
dGEoKSkpOwogfQogCiBKU1ZhbHVlUmVmIEpTT2JqZWN0R2V0UHJvcGVydHkoSlNDb250ZXh0UmVm
IGN0eCwgSlNPYmplY3RSZWYgb2JqZWN0LCBKU1N0cmluZ1JlZiBwcm9wZXJ0eU5hbWUsIEpTVmFs
dWVSZWYqIGV4Y2VwdGlvbikKQEAgLTI1Nyw3ICsyNTcsNyBAQCBKU1ZhbHVlUmVmIEpTT2JqZWN0
R2V0UHJvcGVydHkoSlNDb250ZXh0CiAKICAgICBKU09iamVjdCoganNPYmplY3QgPSB0b0pTKG9i
amVjdCk7CiAKLSAgICBKU1ZhbHVlKiBqc1ZhbHVlID0ganNPYmplY3QtPmdldChleGVjLCBwcm9w
ZXJ0eU5hbWUtPmlkZW50aWZpZXIoZXhlYykpOworICAgIEpTVmFsdWUqIGpzVmFsdWUgPSBqc09i
amVjdC0+Z2V0KGV4ZWMsIHByb3BlcnR5TmFtZS0+aWRlbnRpZmllcigmZXhlYy0+Z2xvYmFsRGF0
YSgpKSk7CiAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKSB7CiAgICAgICAgIGlmIChleGNl
cHRpb24pCiAgICAgICAgICAgICAqZXhjZXB0aW9uID0gdG9SZWYoZXhlYy0+ZXhjZXB0aW9uKCkp
OwpAQCAtMjczLDcgKzI3Myw3IEBAIHZvaWQgSlNPYmplY3RTZXRQcm9wZXJ0eShKU0NvbnRleHRS
ZWYgY3QKICAgICBKU0xvY2sgbG9jayhleGVjKTsKIAogICAgIEpTT2JqZWN0KiBqc09iamVjdCA9
IHRvSlMob2JqZWN0KTsKLSAgICBJZGVudGlmaWVyIG5hbWUocHJvcGVydHlOYW1lLT5pZGVudGlm
aWVyKGV4ZWMpKTsKKyAgICBJZGVudGlmaWVyIG5hbWUocHJvcGVydHlOYW1lLT5pZGVudGlmaWVy
KCZleGVjLT5nbG9iYWxEYXRhKCkpKTsKICAgICBKU1ZhbHVlKiBqc1ZhbHVlID0gdG9KUyh2YWx1
ZSk7CiAKICAgICBpZiAoYXR0cmlidXRlcyAmJiAhanNPYmplY3QtPmhhc1Byb3BlcnR5KGV4ZWMs
IG5hbWUpKQpAQCAtMzMzLDcgKzMzMyw3IEBAIGJvb2wgSlNPYmplY3REZWxldGVQcm9wZXJ0eShK
U0NvbnRleHRSZWYKIAogICAgIEpTT2JqZWN0KiBqc09iamVjdCA9IHRvSlMob2JqZWN0KTsKIAot
ICAgIGJvb2wgcmVzdWx0ID0ganNPYmplY3QtPmRlbGV0ZVByb3BlcnR5KGV4ZWMsICBwcm9wZXJ0
eU5hbWUtPmlkZW50aWZpZXIoZXhlYykpOworICAgIGJvb2wgcmVzdWx0ID0ganNPYmplY3QtPmRl
bGV0ZVByb3BlcnR5KGV4ZWMsIHByb3BlcnR5TmFtZS0+aWRlbnRpZmllcigmZXhlYy0+Z2xvYmFs
RGF0YSgpKSk7CiAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKSB7CiAgICAgICAgIGlmIChl
eGNlcHRpb24pCiAgICAgICAgICAgICAqZXhjZXB0aW9uID0gdG9SZWYoZXhlYy0+ZXhjZXB0aW9u
KCkpOwpJbmRleDogSmF2YVNjcmlwdENvcmUvQVBJL09wYXF1ZUpTU3RyaW5nLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9BUEkvT3BhcXVlSlNTdHJpbmcuY3BwCShyZXZpc2lvbiAz
NzM1MikKKysrIEphdmFTY3JpcHRDb3JlL0FQSS9PcGFxdWVKU1N0cmluZy5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTQ2LDExICs0Niw2IEBAIFVTdHJpbmcgT3BhcXVlSlNTdHJpbmc6OnVzdHJpbmco
KSBjb25zdAogICAgIHJldHVybiBVU3RyaW5nOjpudWxsKCk7CiB9CiAKLUlkZW50aWZpZXIgT3Bh
cXVlSlNTdHJpbmc6OmlkZW50aWZpZXIoRXhlY1N0YXRlKiBleGVjKSBjb25zdAotewotICAgIHJl
dHVybiBpZGVudGlmaWVyKCZleGVjLT5nbG9iYWxEYXRhKCkpOwotfQotCiBJZGVudGlmaWVyIE9w
YXF1ZUpTU3RyaW5nOjppZGVudGlmaWVyKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSkgY29uc3QK
IHsKICAgICBpZiAoIXRoaXMgfHwgIW1fY2hhcmFjdGVycykKSW5kZXg6IEphdmFTY3JpcHRDb3Jl
L0FQSS9PcGFxdWVKU1N0cmluZy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL0FQSS9P
cGFxdWVKU1N0cmluZy5oCShyZXZpc2lvbiAzNzM1MikKKysrIEphdmFTY3JpcHRDb3JlL0FQSS9P
cGFxdWVKU1N0cmluZy5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOSwxMCArMjksOSBAQAogI2luY2x1
ZGUgPGtqcy91c3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBKU0MgewotICAgIGNsYXNzIEV4ZWNTdGF0
ZTsKICAgICBjbGFzcyBJZGVudGlmaWVyOwogICAgIGNsYXNzIEpTR2xvYmFsRGF0YTsKLX07Cit9
CiAKIHN0cnVjdCBPcGFxdWVKU1N0cmluZyA6IHB1YmxpYyBUaHJlYWRTYWZlU2hhcmVkPE9wYXF1
ZUpTU3RyaW5nPiB7CiAKQEAgLTUyLDggKzUxLDYgQEAgc3RydWN0IE9wYXF1ZUpTU3RyaW5nIDog
cHVibGljIFRocmVhZFNhZgogICAgIHVuc2lnbmVkIGxlbmd0aCgpIHsgcmV0dXJuIHRoaXMgPyBt
X2xlbmd0aCA6IDA7IH0KIAogICAgIEpTQzo6VVN0cmluZyB1c3RyaW5nKCkgY29uc3Q7Ci0KLSAg
ICBKU0M6OklkZW50aWZpZXIgaWRlbnRpZmllcihKU0M6OkV4ZWNTdGF0ZSopIGNvbnN0OwogICAg
IEpTQzo6SWRlbnRpZmllciBpZGVudGlmaWVyKEpTQzo6SlNHbG9iYWxEYXRhKikgY29uc3Q7CiAK
IHByaXZhdGU6CkluZGV4OiBKYXZhU2NyaXB0Q29yZS9WTS9DVEkuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IEphdmFTY3JpcHRDb3JlL1ZNL0NUSS5jcHAJKHJldmlzaW9uIDM3MzUyKQorKysgSmF2YVNjcmlw
dENvcmUvVk0vQ1RJLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzMsNiArMzMsNyBAQAogI2luY2x1
ZGUgIk1hY2hpbmUuaCIKICNpbmNsdWRlICJ3cmVjL1dSRUMuaCIKICNpbmNsdWRlICJSZXN1bHRU
eXBlLmgiCisKICNpZiBQTEFURk9STShNQUMpCiAjaW5jbHVkZSA8c3lzL3N5c2N0bC5oPgogI2Vu
ZGlmCkBAIC00MiwxMiArNDMsMTUgQEAgdXNpbmcgbmFtZXNwYWNlIHN0ZDsKIG5hbWVzcGFjZSBK
U0MgewogCiAjaWYgUExBVEZPUk0oTUFDKQotYm9vbCBpc1NTRTJQcmVzZW50KCkKKworc3RhdGlj
IGlubGluZSBib29sIGlzU1NFMlByZXNlbnQoKQogewogICAgIHJldHVybiB0cnVlOyAvLyBBbGwg
WDg2IE1hY3MgYXJlIGd1YXJhbnRlZWQgdG8gc3VwcG9ydCBhdCBsZWFzdCBTU0UyCiB9Ci0jZWxz
ZSBDT01QSUxFUihNU1ZDKQotYm9vbCBpc1NTRTJQcmVzZW50KCkKKworI2Vsc2UKKworc3RhdGlj
IGJvb2wgaXNTU0UyUHJlc2VudCgpCiB7CiAgICAgc3RhdGljIGNvbnN0IGludCBTU0UyRmVhdHVy
ZUJpdCA9IDEgPDwgMjY7CiAgICAgc3RydWN0IFNTRTJDaGVjayB7CkBAIC03MSw4ICs3NSwxMSBA
QCBib29sIGlzU1NFMlByZXNlbnQoKQogICAgIHN0YXRpYyBTU0UyQ2hlY2sgY2hlY2s7CiAgICAg
cmV0dXJuIGNoZWNrLnByZXNlbnQ7CiB9CisKICNlbmRpZgogCitDT01QSUxFX0FTU0VSVChDVElf
QVJHU19jb2RlID09IDB4QywgQ1RJX0FSR1NfY29kZV9pc19DKTsKKwogI2lmIENPTVBJTEVSKEdD
QykgJiYgUExBVEZPUk0oWDg2KQogCiBhc20oCkBAIC04Miw3ICs4OSw3IEBAIGFzbSgKICAgICAi
cHVzaGwgJWVkaSIgIlxuIgogICAgICJzdWJsICQweDI0LCAlZXNwIiAiXG4iCiAgICAgIm1vdmwg
JDUxMiwgJWVzaSIgIlxuIgotICAgICJjYWxsICoweDMwKCVlc3ApIiAiXG4iIC8vIE94MzAgPSAw
eDBDICogNCwgMHgwQyA9IENUSV9BUkdTX2NvZGUKKyAgICAiY2FsbCAqMHgzMCglZXNwKSIgIlxu
IiAvLyBPeDMwID0gMHgwQyAqIDQsIDB4MEMgPSBDVElfQVJHU19jb2RlIChzZWUgYXNzZXJ0aW9u
IGFib3ZlKQogICAgICJhZGRsICQweDI0LCAlZXNwIiAiXG4iCiAgICAgInBvcGwgJWVkaSIgIlxu
IgogICAgICJwb3BsICVlc2kiICJcbiIKQEAgLTExMSw3ICsxMTgsNyBAQCBleHRlcm4gIkMiIHsK
ICAgICAgICAgICAgIHN1YiBlc3AsIDB4MjQ7CiAgICAgICAgICAgICBtb3YgZXNpLCA1MTI7CiAg
ICAgICAgICAgICBtb3YgW2VzcF0sIGVzcDsKLSAgICAgICAgICAgIGNhbGwgW2VzcCArIDB4MzBd
OworICAgICAgICAgICAgY2FsbCBbZXNwICsgMHgzMF07IC8vIE94MzAgPSAweDBDICogNCwgMHgw
QyA9IENUSV9BUkdTX2NvZGUgKHNlZSBhc3NlcnRpb24gYWJvdmUpCiAgICAgICAgICAgICBhZGQg
ZXNwLCAweDI0OwogICAgICAgICAgICAgcG9wIGVkaTsKICAgICAgICAgICAgIHBvcCBlc2k7CkBA
IC0xMzUsMTUgKzE0MiwxNCBAQCBleHRlcm4gIkMiIHsKIAogI2VuZGlmCiAKLQogQUxXQVlTX0lO
TElORSBib29sIENUSTo6aXNDb25zdGFudChpbnQgc3JjKQogewogICAgIHJldHVybiBzcmMgPj0g
bV9jb2RlQmxvY2stPm51bVZhcnMgJiYgc3JjIDwgbV9jb2RlQmxvY2stPm51bVZhcnMgKyBtX2Nv
ZGVCbG9jay0+bnVtQ29uc3RhbnRzOwogfQogCi1BTFdBWVNfSU5MSU5FIEpTVmFsdWUqIENUSTo6
Z2V0Q29uc3RhbnQoRXhlY1N0YXRlKiBleGVjLCBpbnQgc3JjKQorQUxXQVlTX0lOTElORSBKU1Zh
bHVlKiBDVEk6OmdldENvbnN0YW50KENhbGxGcmFtZSogY2FsbEZyYW1lLCBpbnQgc3JjKQogewot
ICAgIHJldHVybiBtX2NvZGVCbG9jay0+Y29uc3RhbnRSZWdpc3RlcnNbc3JjIC0gbV9jb2RlQmxv
Y2stPm51bVZhcnNdLmpzVmFsdWUoZXhlYyk7CisgICAgcmV0dXJuIG1fY29kZUJsb2NrLT5jb25z
dGFudFJlZ2lzdGVyc1tzcmMgLSBtX2NvZGVCbG9jay0+bnVtVmFyc10uanNWYWx1ZShjYWxsRnJh
bWUpOwogfQogCiAvLyBnZXQgYXJnIHB1dHMgYW4gYXJnIGZyb20gdGhlIFNGIHJlZ2lzdGVyIGFy
cmF5IGludG8gYSBoL3cgcmVnaXN0ZXIKQEAgLTE1MSw3ICsxNTcsNyBAQCBBTFdBWVNfSU5MSU5F
IHZvaWQgQ1RJOjplbWl0R2V0QXJnKGludCBzCiB7CiAgICAgLy8gVE9ETzogd2Ugd2FudCB0byBy
ZXVzZSB2YWx1ZXMgdGhhdCBhcmUgYWxyZWFkeSBpbiByZWdpc3RlcnMgaWYgd2UgY2FuIC0gYWRk
IGEgcmVnaXN0ZXIgYWxsb2NhdG9yIQogICAgIGlmIChpc0NvbnN0YW50KHNyYykpIHsKLSAgICAg
ICAgSlNWYWx1ZSoganMgPSBnZXRDb25zdGFudChtX2V4ZWMsIHNyYyk7CisgICAgICAgIEpTVmFs
dWUqIGpzID0gZ2V0Q29uc3RhbnQobV9jYWxsRnJhbWUsIHNyYyk7CiAgICAgICAgIG1faml0Lm1v
dmxfaTMycihyZWludGVycHJldF9jYXN0PHVuc2lnbmVkPihqcyksIGRzdCk7CiAgICAgfSBlbHNl
CiAgICAgICAgIG1faml0Lm1vdmxfbXIoc3JjICogc2l6ZW9mKFJlZ2lzdGVyKSwgWDg2OjplZGks
IGRzdCk7CkBAIC0xNjEsNyArMTY3LDcgQEAgQUxXQVlTX0lOTElORSB2b2lkIENUSTo6ZW1pdEdl
dEFyZyhpbnQgcwogQUxXQVlTX0lOTElORSB2b2lkIENUSTo6ZW1pdEdldFB1dEFyZyh1bnNpZ25l
ZCBzcmMsIHVuc2lnbmVkIG9mZnNldCwgWDg2QXNzZW1ibGVyOjpSZWdpc3RlcklEIHNjcmF0Y2gp
CiB7CiAgICAgaWYgKGlzQ29uc3RhbnQoc3JjKSkgewotICAgICAgICBKU1ZhbHVlKiBqcyA9IGdl
dENvbnN0YW50KG1fZXhlYywgc3JjKTsKKyAgICAgICAgSlNWYWx1ZSoganMgPSBnZXRDb25zdGFu
dChtX2NhbGxGcmFtZSwgc3JjKTsKICAgICAgICAgbV9qaXQubW92bF9pMzJtKHJlaW50ZXJwcmV0
X2Nhc3Q8dW5zaWduZWQ+KGpzKSwgb2Zmc2V0ICsgc2l6ZW9mKHZvaWQqKSwgWDg2Ojplc3ApOwog
ICAgIH0gZWxzZSB7CiAgICAgICAgIG1faml0Lm1vdmxfbXIoc3JjICogc2l6ZW9mKFJlZ2lzdGVy
KSwgWDg2OjplZGksIHNjcmF0Y2gpOwpAQCAtMTgzLDcgKzE4OSw3IEBAIEFMV0FZU19JTkxJTkUg
dm9pZCBDVEk6OmVtaXRQdXRBcmdDb25zdGEKIEFMV0FZU19JTkxJTkUgSlNWYWx1ZSogQ1RJOjpn
ZXRDb25zdGFudEltbWVkaWF0ZU51bWVyaWNBcmcodW5zaWduZWQgc3JjKQogewogICAgIGlmIChp
c0NvbnN0YW50KHNyYykpIHsKLSAgICAgICAgSlNWYWx1ZSoganMgPSBnZXRDb25zdGFudChtX2V4
ZWMsIHNyYyk7CisgICAgICAgIEpTVmFsdWUqIGpzID0gZ2V0Q29uc3RhbnQobV9jYWxsRnJhbWUs
IHNyYyk7CiAgICAgICAgIHJldHVybiBKU0ltbWVkaWF0ZTo6aXNOdW1iZXIoanMpID8ganMgOiAw
OwogICAgIH0KICAgICByZXR1cm4gMDsKQEAgLTI0Niw3ICsyNTIsNyBAQCB2b2lkIENUSTo6cHJp
bnRPcGNvZGVPcGVyYW5kVHlwZXModW5zaWduCiB7CiAgICAgY2hhciB3aGljaDEgPSAnKic7CiAg
ICAgaWYgKGlzQ29uc3RhbnQoc3JjMSkpIHsKLSAgICAgICAgSlNWYWx1ZSoganMgPSBnZXRDb25z
dGFudChtX2V4ZWMsIHNyYzEpOworICAgICAgICBKU1ZhbHVlKiBqcyA9IGdldENvbnN0YW50KG1f
Y2FsbEZyYW1lLCBzcmMxKTsKICAgICAgICAgd2hpY2gxID0gCiAgICAgICAgICAgICBKU0ltbWVk
aWF0ZTo6aXNJbW1lZGlhdGUoanMpID8KICAgICAgICAgICAgICAgICAoSlNJbW1lZGlhdGU6Omlz
TnVtYmVyKGpzKSA/ICdpJyA6CkBAIC0yNjAsNyArMjY2LDcgQEAgdm9pZCBDVEk6OnByaW50T3Bj
b2RlT3BlcmFuZFR5cGVzKHVuc2lnbgogICAgIH0KICAgICBjaGFyIHdoaWNoMiA9ICcqJzsKICAg
ICBpZiAoaXNDb25zdGFudChzcmMyKSkgewotICAgICAgICBKU1ZhbHVlKiBqcyA9IGdldENvbnN0
YW50KG1fZXhlYywgc3JjMik7CisgICAgICAgIEpTVmFsdWUqIGpzID0gZ2V0Q29uc3RhbnQobV9j
YWxsRnJhbWUsIHNyYzIpOwogICAgICAgICB3aGljaDIgPSAKICAgICAgICAgICAgIEpTSW1tZWRp
YXRlOjppc0ltbWVkaWF0ZShqcykgPwogICAgICAgICAgICAgICAgIChKU0ltbWVkaWF0ZTo6aXNO
dW1iZXIoanMpID8gJ2knIDoKQEAgLTQyNywxMCArNDMzLDEwIEBAIEFMV0FZU19JTkxJTkUgdm9p
ZCBDVEk6OmVtaXRUYWdBc0Jvb2xJbW0KICAgICBtX2ppdC5vcmxfaTMycihKU0ltbWVkaWF0ZTo6
RnVsbFRhZ1R5cGVCb29sLCByZWcpOwogfQogCi1DVEk6OkNUSShNYWNoaW5lKiBtYWNoaW5lLCBF
eGVjU3RhdGUqIGV4ZWMsIENvZGVCbG9jayogY29kZUJsb2NrKQorQ1RJOjpDVEkoTWFjaGluZSog
bWFjaGluZSwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIENvZGVCbG9jayogY29kZUJsb2NrKQogICAg
IDogbV9qaXQobWFjaGluZS0+aml0Q29kZUJ1ZmZlcigpKQogICAgICwgbV9tYWNoaW5lKG1hY2hp
bmUpCi0gICAgLCBtX2V4ZWMoZXhlYykKKyAgICAsIG1fY2FsbEZyYW1lKGNhbGxGcmFtZSkKICAg
ICAsIG1fY29kZUJsb2NrKGNvZGVCbG9jaykKICAgICAsIG1fbGFiZWxzKGNvZGVCbG9jayA/IGNv
ZGVCbG9jay0+aW5zdHJ1Y3Rpb25zLnNpemUoKSA6IDApCiAgICAgLCBtX3N0cnVjdHVyZVN0dWJD
b21waWxhdGlvbkluZm8oY29kZUJsb2NrID8gY29kZUJsb2NrLT5zdHJ1Y3R1cmVJREluc3RydWN0
aW9ucy5zaXplKCkgOiAwKQpAQCAtNDgzLDggKzQ4OSw4IEBAIHZvaWQgQ1RJOjpjb21waWxlT3BD
YWxsKEluc3RydWN0aW9uKiBpbnMKIAogICAgICAgICBpbnQgdGhpc1ZhbCA9IGluc3RydWN0aW9u
W2kgKyAzXS51Lm9wZXJhbmQ7CiAgICAgICAgIGlmICh0aGlzVmFsID09IG1pc3NpbmdUaGlzT2Jq
ZWN0TWFya2VyKCkpIHsKLSAgICAgICAgICAgIC8vIEZJWE1FOiBzaG91bGQgdGhpcyBiZSBsb2Fk
ZWQgZHluYW1pY2FsbHkgb2ZmIG1fZXhlYz8KLSAgICAgICAgICAgIG1faml0Lm1vdmxfaTMybShy
ZWludGVycHJldF9jYXN0PHVuc2lnbmVkPihtX2V4ZWMtPmdsb2JhbFRoaXNWYWx1ZSgpKSwgZmly
c3RBcmcgKiBzaXplb2YoUmVnaXN0ZXIpLCBYODY6OmVkaSk7CisgICAgICAgICAgICAvLyBGSVhN
RTogc2hvdWxkIHRoaXMgYmUgbG9hZGVkIGR5bmFtaWNhbGx5IG9mZiBtX2NhbGxGcmFtZT8KKyAg
ICAgICAgICAgIG1faml0Lm1vdmxfaTMybShyZWludGVycHJldF9jYXN0PHVuc2lnbmVkPihtX2Nh
bGxGcmFtZS0+Z2xvYmFsVGhpc1ZhbHVlKCkpLCBmaXJzdEFyZyAqIHNpemVvZihSZWdpc3Rlciks
IFg4Njo6ZWRpKTsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIGVtaXRHZXRBcmcodGhp
c1ZhbCwgWDg2OjplY3gpOwogICAgICAgICAgICAgZW1pdFB1dFJlc3VsdChmaXJzdEFyZywgWDg2
OjplY3gpOwpAQCAtNDk2LDcgKzUwMiw3IEBAIHZvaWQgQ1RJOjpjb21waWxlT3BDYWxsKEluc3Ry
dWN0aW9uKiBpbnMKICAgICAgICAgZW1pdEdldFB1dEFyZyhpbnN0cnVjdGlvbltpICsgMl0udS5v
cGVyYW5kLCAwLCBYODY6OmVjeCk7CiAgICAgICAgIGVtaXRDYWxsKGksIE1hY2hpbmU6OmN0aV9v
cF9jYWxsX2V2YWwpOwogCi0gICAgICAgIGVtaXRHZXRDVElQYXJhbShDVElfQVJHU19yLCBYODY6
OmVkaSk7IC8vIGVkaSA6PSByCisgICAgICAgIGVtaXRHZXRDVElQYXJhbShDVElfQVJHU19jYWxs
RnJhbWUsIFg4Njo6ZWRpKTsgLy8gZWRpIDo9IHIKIAogICAgICAgICBtX2ppdC5jbXBsX2kzMnIo
cmVpbnRlcnByZXRfY2FzdDx1bnNpZ25lZD4oSlNJbW1lZGlhdGU6OmltcG9zc2libGVWYWx1ZSgp
KSwgWDg2OjplYXgpOwogICAgICAgICB3YXNFdmFsID0gbV9qaXQuZW1pdFVubGlua2VkSm5lKCk7
CkBAIC02NDYsNyArNjUyLDcgQEAgdm9pZCBDVEk6OnB1dERvdWJsZVJlc3VsdFRvSlNOdW1iZXJD
ZWxsTwogCiB2b2lkIENUSTo6Y29tcGlsZUJpbmFyeUFyaXRoT3AoT3Bjb2RlSUQgb3Bjb2RlSUQs
IHVuc2lnbmVkIGRzdCwgdW5zaWduZWQgc3JjMSwgdW5zaWduZWQgc3JjMiwgT3BlcmFuZFR5cGVz
IHR5cGVzLCB1bnNpZ25lZCBpKQogewotICAgIFN0cnVjdHVyZUlEKiBudW1iZXJTdHJ1Y3R1cmVJ
RCA9IG1fZXhlYy0+Z2xvYmFsRGF0YSgpLm51bWJlclN0cnVjdHVyZUlELmdldCgpOworICAgIFN0
cnVjdHVyZUlEKiBudW1iZXJTdHJ1Y3R1cmVJRCA9IG1fY2FsbEZyYW1lLT5nbG9iYWxEYXRhKCku
bnVtYmVyU3RydWN0dXJlSUQuZ2V0KCk7CiAgICAgWDg2QXNzZW1ibGVyOjpKbXBTcmMgd2FzSlNO
dW1iZXJDZWxsMSwgd2FzSlNOdW1iZXJDZWxsMWIsIHdhc0pTTnVtYmVyQ2VsbDIsIHdhc0pTTnVt
YmVyQ2VsbDJiOwogCiAgICAgZW1pdEdldEFyZyhzcmMxLCBYODY6OmVheCk7CkBAIC04MzksNyAr
ODQ1LDcgQEAgdm9pZCBDVEk6OnByaXZhdGVDb21waWxlTWFpblBhc3MoKQogICAgICAgICBjYXNl
IG9wX21vdjogewogICAgICAgICAgICAgdW5zaWduZWQgc3JjID0gaW5zdHJ1Y3Rpb25baSArIDJd
LnUub3BlcmFuZDsKICAgICAgICAgICAgIGlmIChpc0NvbnN0YW50KHNyYykpCi0gICAgICAgICAg
ICAgICAgbV9qaXQubW92bF9pMzJyKHJlaW50ZXJwcmV0X2Nhc3Q8dW5zaWduZWQ+KGdldENvbnN0
YW50KG1fZXhlYywgc3JjKSksIFg4Njo6ZWR4KTsKKyAgICAgICAgICAgICAgICBtX2ppdC5tb3Zs
X2kzMnIocmVpbnRlcnByZXRfY2FzdDx1bnNpZ25lZD4oZ2V0Q29uc3RhbnQobV9jYWxsRnJhbWUs
IHNyYykpLCBYODY6OmVkeCk7CiAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgZW1p
dEdldEFyZyhzcmMsIFg4Njo6ZWR4KTsKICAgICAgICAgICAgIGVtaXRQdXRSZXN1bHQoaW5zdHJ1
Y3Rpb25baSArIDFdLnUub3BlcmFuZCwgWDg2OjplZHgpOwpAQCAtMTE5OCw4ICsxMjA0LDggQEAg
dm9pZCBDVEk6OnByaXZhdGVDb21waWxlTWFpblBhc3MoKQogICAgICAgICAgICAgZW1pdEdldEFy
ZyhSZWdpc3RlckZpbGU6OlJldHVyblBDLCBYODY6OmVkeCk7CiAKICAgICAgICAgICAgIC8vIFJl
c3RvcmUgb3VyIGNhbGxlcidzICJyIi4KLSAgICAgICAgICAgIGVtaXRHZXRBcmcoUmVnaXN0ZXJG
aWxlOjpDYWxsZXJSZWdpc3RlcnMsIFg4Njo6ZWRpKTsKLSAgICAgICAgICAgIGVtaXRQdXRDVElQ
YXJhbShYODY6OmVkaSwgQ1RJX0FSR1Nfcik7CisgICAgICAgICAgICBlbWl0R2V0QXJnKFJlZ2lz
dGVyRmlsZTo6Q2FsbGVyRnJhbWUsIFg4Njo6ZWRpKTsKKyAgICAgICAgICAgIGVtaXRQdXRDVElQ
YXJhbShYODY6OmVkaSwgQ1RJX0FSR1NfY2FsbEZyYW1lKTsKIAogICAgICAgICAgICAgLy8gUmV0
dXJuLgogICAgICAgICAgICAgbV9qaXQucHVzaGxfcihYODY6OmVkeCk7CkBAIC0xNzUzLDcgKzE3
NTksNyBAQCB2b2lkIENUSTo6cHJpdmF0ZUNvbXBpbGVNYWluUGFzcygpCiAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgfQogICAgICAgICBjYXNlIG9wX2NhdGNoOiB7Ci0gICAgICAgICAgICBl
bWl0R2V0Q1RJUGFyYW0oQ1RJX0FSR1NfciwgWDg2OjplZGkpOyAvLyBlZGkgOj0gcgorICAgICAg
ICAgICAgZW1pdEdldENUSVBhcmFtKENUSV9BUkdTX2NhbGxGcmFtZSwgWDg2OjplZGkpOyAvLyBl
ZGkgOj0gcgogICAgICAgICAgICAgZW1pdFB1dFJlc3VsdChpbnN0cnVjdGlvbltpICsgMV0udS5v
cGVyYW5kKTsKICAgICAgICAgICAgIGkgKz0gMjsKICAgICAgICAgICAgIGJyZWFrOwpAQCAtMjQ5
Nyw3ICsyNTAzLDcgQEAgdm9pZCBDVEk6OnByaXZhdGVDb21waWxlKCkKIHsKICAgICAvLyBDb3Vs
ZCB1c2UgYSBwb3BsX20sIGJ1dCB3b3VsZCBuZWVkIHRvIG9mZnNldCB0aGUgZm9sbG93aW5nIGlu
c3RydWN0aW9uIGlmIHNvLgogICAgIG1faml0LnBvcGxfcihYODY6OmVjeCk7Ci0gICAgZW1pdEdl
dENUSVBhcmFtKENUSV9BUkdTX3IsIFg4Njo6ZWRpKTsgLy8gZWRpIDo9IHIKKyAgICBlbWl0R2V0
Q1RJUGFyYW0oQ1RJX0FSR1NfY2FsbEZyYW1lLCBYODY6OmVkaSk7IC8vIGVkaSA6PSByCiAgICAg
ZW1pdFB1dFRvQ2FsbEZyYW1lSGVhZGVyKFg4Njo6ZWN4LCBSZWdpc3RlckZpbGU6OlJldHVyblBD
KTsKIAogICAgIHByaXZhdGVDb21waWxlTWFpblBhc3MoKTsKQEAgLTI1OTMsNyArMjU5OSw3IEBA
IHZvaWQgQ1RJOjpwcml2YXRlQ29tcGlsZUdldEJ5SWRQcm90byhTdHIKIAogICAgIC8vIFRoZSBw
cm90b3R5cGUgb2JqZWN0IGRlZmluaXRlbHkgZXhpc3RzIChpZiB0aGlzIHN0dWIgZXhpc3RzIHRo
ZSBDb2RlQmxvY2sgaXMgcmVmZXJlbmNpbmcgYSBTdHJ1Y3R1cmVJRCB0aGF0IGlzCiAgICAgLy8g
cmVmZXJlbmNpbmcgdGhlIHByb3RvdHlwZSBvYmplY3QgLSBsZXQncyBzcGVjdWxhdGl2ZWx5IGxv
YWQgaXQncyB0YWJsZSBuaWNlIGFuZCBlYXJseSEpCi0gICAgSlNPYmplY3QqIHByb3RvT2JqZWN0
ID0gc3RhdGljX2Nhc3Q8SlNPYmplY3QqPihzdHJ1Y3R1cmVJRC0+cHJvdG90eXBlRm9yTG9va3Vw
KG1fZXhlYykpOworICAgIEpTT2JqZWN0KiBwcm90b09iamVjdCA9IHN0YXRpY19jYXN0PEpTT2Jq
ZWN0Kj4oc3RydWN0dXJlSUQtPnByb3RvdHlwZUZvckxvb2t1cChtX2NhbGxGcmFtZSkpOwogICAg
IFByb3BlcnR5U3RvcmFnZSogcHJvdG9Qcm9wZXJ0eVN0b3JhZ2UgPSAmcHJvdG9PYmplY3QtPm1f
cHJvcGVydHlTdG9yYWdlOwogICAgIG1faml0Lm1vdmxfbXIoc3RhdGljX2Nhc3Q8dm9pZCo+KHBy
b3RvUHJvcGVydHlTdG9yYWdlKSwgWDg2OjplZHgpOwogCkBAIC0yNjM2LDcgKzI2NDIsNyBAQCB2
b2lkIENUSTo6cHJpdmF0ZUNvbXBpbGVHZXRCeUlkUHJvdG8oU3RyCiAjZWxzZQogICAgIC8vIFRo
ZSBwcm90b3R5cGUgb2JqZWN0IGRlZmluaXRlbHkgZXhpc3RzIChpZiB0aGlzIHN0dWIgZXhpc3Rz
IHRoZSBDb2RlQmxvY2sgaXMgcmVmZXJlbmNpbmcgYSBTdHJ1Y3R1cmVJRCB0aGF0IGlzCiAgICAg
Ly8gcmVmZXJlbmNpbmcgdGhlIHByb3RvdHlwZSBvYmplY3QgLSBsZXQncyBzcGVjdWxhdGl2ZWx5
IGxvYWQgaXQncyB0YWJsZSBuaWNlIGFuZCBlYXJseSEpCi0gICAgSlNPYmplY3QqIHByb3RvT2Jq
ZWN0ID0gc3RhdGljX2Nhc3Q8SlNPYmplY3QqPihzdHJ1Y3R1cmVJRC0+cHJvdG90eXBlRm9yTG9v
a3VwKG1fZXhlYykpOworICAgIEpTT2JqZWN0KiBwcm90b09iamVjdCA9IHN0YXRpY19jYXN0PEpT
T2JqZWN0Kj4oc3RydWN0dXJlSUQtPnByb3RvdHlwZUZvckxvb2t1cChtX2NhbGxGcmFtZSkpOwog
ICAgIFByb3BlcnR5U3RvcmFnZSogcHJvdG9Qcm9wZXJ0eVN0b3JhZ2UgPSAmcHJvdG9PYmplY3Qt
Pm1fcHJvcGVydHlTdG9yYWdlOwogICAgIG1faml0Lm1vdmxfbXIoc3RhdGljX2Nhc3Q8dm9pZCo+
KHByb3RvUHJvcGVydHlTdG9yYWdlKSwgWDg2OjplZHgpOwogCkBAIC0yNjg1LDcgKzI2OTEsNyBA
QCB2b2lkIENUSTo6cHJpdmF0ZUNvbXBpbGVHZXRCeUlkQ2hhaW4oU3RyCiAgICAgUmVmUHRyPFN0
cnVjdHVyZUlEPiogY2hhaW5FbnRyaWVzID0gY2hhaW4tPmhlYWQoKTsKICAgICBKU09iamVjdCog
cHJvdG9PYmplY3QgPSAwOwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGk8Y291bnQ7ICsraSkg
ewotICAgICAgICBwcm90b09iamVjdCA9IHN0YXRpY19jYXN0PEpTT2JqZWN0Kj4oY3VyclN0cnVj
dHVyZUlELT5wcm90b3R5cGVGb3JMb29rdXAobV9leGVjKSk7CisgICAgICAgIHByb3RvT2JqZWN0
ID0gc3RhdGljX2Nhc3Q8SlNPYmplY3QqPihjdXJyU3RydWN0dXJlSUQtPnByb3RvdHlwZUZvckxv
b2t1cChtX2NhbGxGcmFtZSkpOwogICAgICAgICBjdXJyU3RydWN0dXJlSUQgPSBjaGFpbkVudHJp
ZXNbaV0uZ2V0KCk7CiAKICAgICAgICAgLy8gQ2hlY2sgdGhlIHByb3RvdHlwZSBvYmplY3QncyBT
dHJ1Y3R1cmVJRCBoYWQgbm90IGNoYW5nZWQuCkBAIC0yOTg3LDcgKzI5OTMsNyBAQCB2b2lkIENU
STo6ZW1pdFB1dFZhcmlhYmxlT2JqZWN0UmVnaXN0ZXIoCiAKICNpZiBFTkFCTEUoV1JFQykKIAot
dm9pZCogQ1RJOjpjb21waWxlUmVnRXhwKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgVVN0cmluZyYg
cGF0dGVybiwgdW5zaWduZWQqIG51bVN1YnBhdHRlcm5zX3B0ciwgY29uc3QgY2hhcioqIGVycm9y
X3B0ciwgYm9vbCBpZ25vcmVDYXNlLCBib29sIG11bHRpbGluZSkKK3ZvaWQqIENUSTo6Y29tcGls
ZVJlZ0V4cChNYWNoaW5lKiBtYWNoaW5lLCBjb25zdCBVU3RyaW5nJiBwYXR0ZXJuLCB1bnNpZ25l
ZCogbnVtU3VicGF0dGVybnNfcHRyLCBjb25zdCBjaGFyKiogZXJyb3JfcHRyLCBib29sIGlnbm9y
ZUNhc2UsIGJvb2wgbXVsdGlsaW5lKQogewogICAgIC8vIFRPRE86IGJldHRlciBlcnJvciBtZXNz
YWdlcwogICAgIGlmIChwYXR0ZXJuLnNpemUoKSA+IE1heFBhdHRlcm5TaXplKSB7CkBAIC0yOTk1
LDcgKzMwMDEsNyBAQCB2b2lkKiBDVEk6OmNvbXBpbGVSZWdFeHAoRXhlY1N0YXRlKiBleGVjCiAg
ICAgICAgIHJldHVybiAwOwogICAgIH0KIAotICAgIFg4NkFzc2VtYmxlciBqaXQoZXhlYy0+bWFj
aGluZSgpLT5qaXRDb2RlQnVmZmVyKCkpOworICAgIFg4NkFzc2VtYmxlciBqaXQobWFjaGluZS0+
aml0Q29kZUJ1ZmZlcigpKTsKICAgICBXUkVDUGFyc2VyIHBhcnNlcihwYXR0ZXJuLCBpZ25vcmVD
YXNlLCBtdWx0aWxpbmUsIGppdCk7CiAgICAgCiAgICAgaml0LmVtaXRDb252ZXJ0VG9GYXN0Q2Fs
bCgpOwpJbmRleDogSmF2YVNjcmlwdENvcmUvVk0vQ1RJLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNj
cmlwdENvcmUvVk0vQ1RJLmgJKHJldmlzaW9uIDM3MzUyKQorKysgSmF2YVNjcmlwdENvcmUvVk0v
Q1RJLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ5LDIwICs0OSwxOCBAQAogCiAjZGVmaW5lIENUSV9B
UkdTX2NvZGUgMHgwQwogI2RlZmluZSBDVElfQVJHU19yZWdpc3RlckZpbGUgMHgwRAotI2RlZmlu
ZSBDVElfQVJHU19yIDB4MEUKKyNkZWZpbmUgQ1RJX0FSR1NfY2FsbEZyYW1lIDB4MEUKICNkZWZp
bmUgQ1RJX0FSR1NfZXhjZXB0aW9uIDB4MEYKICNkZWZpbmUgQ1RJX0FSR1NfcHJvZmlsZXJSZWZl
cmVuY2UgMHgxMAogI2RlZmluZSBDVElfQVJHU19nbG9iYWxEYXRhIDB4MTEKICNkZWZpbmUgQVJH
X3JlZ2lzdGVyRmlsZSAoKFJlZ2lzdGVyRmlsZSopKEFSR1MpW0NUSV9BUkdTX3JlZ2lzdGVyRmls
ZV0pCi0jZGVmaW5lIEFSR19yICgoUmVnaXN0ZXIqKShBUkdTKVtDVElfQVJHU19yXSkKKyNkZWZp
bmUgQVJHX2NhbGxGcmFtZSAoKENhbGxGcmFtZSopKEFSR1MpW0NUSV9BUkdTX2NhbGxGcmFtZV0p
CiAjZGVmaW5lIEFSR19leGNlcHRpb24gKChKU1ZhbHVlKiopKEFSR1MpW0NUSV9BUkdTX2V4Y2Vw
dGlvbl0pCiAjZGVmaW5lIEFSR19wcm9maWxlclJlZmVyZW5jZSAoKFByb2ZpbGVyKiopKEFSR1Mp
W0NUSV9BUkdTX3Byb2ZpbGVyUmVmZXJlbmNlXSkKICNkZWZpbmUgQVJHX2dsb2JhbERhdGEgKChK
U0dsb2JhbERhdGEqKShBUkdTKVtDVElfQVJHU19nbG9iYWxEYXRhXSkKIAotI2RlZmluZSBBUkdf
ZXhlYyBDYWxsRnJhbWU6OmNyZWF0ZShBUkdfcikKLQotI2RlZmluZSBBUkdfc2V0UihuZXdSKSAo
KihSZWdpc3RlcioqKSYoQVJHUylbQ1RJX0FSR1Nfcl0gPSBuZXdSKQotI2RlZmluZSBBUkdfc2V0
Mm5kUmVzdWx0KG5ldzJuZFJlc3VsdCkgKCooSlNWYWx1ZSoqKSYoQVJHUylbQ1RJX0FSR1NfMm5k
UmVzdWx0XSA9IG5ldzJuZFJlc3VsdCkKKyNkZWZpbmUgQVJHX3NldENhbGxGcmFtZShuZXdDYWxs
RnJhbWUpICgqKENhbGxGcmFtZSoqKSYoQVJHUylbQ1RJX0FSR1NfY2FsbEZyYW1lXSA9IChuZXdD
YWxsRnJhbWUpKQorI2RlZmluZSBBUkdfc2V0Mm5kUmVzdWx0KG5ldzJuZFJlc3VsdCkgKCooSlNW
YWx1ZSoqKSYoQVJHUylbQ1RJX0FSR1NfMm5kUmVzdWx0XSA9IChuZXcybmRSZXN1bHQpKQogCiAj
ZGVmaW5lIEFSR19zcmMxICgoSlNWYWx1ZSopKChBUkdTKVsxXSkpCiAjZGVmaW5lIEFSR19zcmMy
ICgoSlNWYWx1ZSopKChBUkdTKVsyXSkpCkBAIC05NSw3ICs5Myw2IEBACiBuYW1lc3BhY2UgSlND
IHsKIAogICAgIGNsYXNzIENvZGVCbG9jazsKLSAgICBjbGFzcyBFeGVjU3RhdGU7CiAgICAgY2xh
c3MgSlNQcm9wZXJ0eU5hbWVJdGVyYXRvcjsKICAgICBjbGFzcyBKU1ZhbHVlOwogICAgIGNsYXNz
IE1hY2hpbmU7CkBAIC0yMzAsNyArMjI3LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgfTsKIAog
ICAgIGV4dGVybiAiQyIgewotICAgICAgICBKU1ZhbHVlKiBjdGlUcmFtcG9saW5lKHZvaWQqIGNv
ZGUsIFJlZ2lzdGVyRmlsZSosIFJlZ2lzdGVyKiBjYWxsRnJhbWUsIEpTVmFsdWUqKiBleGNlcHRp
b24sIFByb2ZpbGVyKiosIEpTR2xvYmFsRGF0YSopOworICAgICAgICBKU1ZhbHVlKiBjdGlUcmFt
cG9saW5lKHZvaWQqIGNvZGUsIFJlZ2lzdGVyRmlsZSosIENhbGxGcmFtZSosIEpTVmFsdWUqKiBl
eGNlcHRpb24sIFByb2ZpbGVyKiosIEpTR2xvYmFsRGF0YSopOwogICAgICAgICB2b2lkIGN0aVZN
VGhyb3dUcmFtcG9saW5lKCk7CiAgICAgfTsKIApAQCAtMjYyLDc3ICsyNTksNzcgQEAgbmFtZXNw
YWNlIEpTQyB7CiAjZW5kaWYKIAogICAgIHB1YmxpYzoKLSAgICAgICAgc3RhdGljIHZvaWQgY29t
cGlsZShNYWNoaW5lKiBtYWNoaW5lLCBFeGVjU3RhdGUqIGV4ZWMsIENvZGVCbG9jayogY29kZUJs
b2NrKQorICAgICAgICBzdGF0aWMgdm9pZCBjb21waWxlKE1hY2hpbmUqIG1hY2hpbmUsIENhbGxG
cmFtZSogY2FsbEZyYW1lLCBDb2RlQmxvY2sqIGNvZGVCbG9jaykKICAgICAgICAgewotICAgICAg
ICAgICAgQ1RJIGN0aShtYWNoaW5lLCBleGVjLCBjb2RlQmxvY2spOworICAgICAgICAgICAgQ1RJ
IGN0aShtYWNoaW5lLCBjYWxsRnJhbWUsIGNvZGVCbG9jayk7CiAgICAgICAgICAgICBjdGkucHJp
dmF0ZUNvbXBpbGUoKTsKICAgICAgICAgfQogCiAjaWYgRU5BQkxFKFdSRUMpCi0gICAgICAgIHN0
YXRpYyB2b2lkKiBjb21waWxlUmVnRXhwKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgVVN0cmluZyYg
cGF0dGVybiwgdW5zaWduZWQqIG51bVN1YnBhdHRlcm5zX3B0ciwgY29uc3QgY2hhcioqIGVycm9y
X3B0ciwgYm9vbCBpZ25vcmVDYXNlID0gZmFsc2UsIGJvb2wgbXVsdGlsaW5lID0gZmFsc2UpOwor
ICAgICAgICBzdGF0aWMgdm9pZCogY29tcGlsZVJlZ0V4cChNYWNoaW5lKiwgY29uc3QgVVN0cmlu
ZyYgcGF0dGVybiwgdW5zaWduZWQqIG51bVN1YnBhdHRlcm5zX3B0ciwgY29uc3QgY2hhcioqIGVy
cm9yX3B0ciwgYm9vbCBpZ25vcmVDYXNlID0gZmFsc2UsIGJvb2wgbXVsdGlsaW5lID0gZmFsc2Up
OwogI2VuZGlmCiAKLSAgICAgICAgc3RhdGljIHZvaWQgY29tcGlsZUdldEJ5SWRTZWxmKE1hY2hp
bmUqIG1hY2hpbmUsIEV4ZWNTdGF0ZSogZXhlYywgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIFN0cnVj
dHVyZUlEKiBzdHJ1Y3R1cmVJRCwgc2l6ZV90IGNhY2hlZE9mZnNldCwgdm9pZCogcmV0dXJuQWRk
cmVzcykKKyAgICAgICAgc3RhdGljIHZvaWQgY29tcGlsZUdldEJ5SWRTZWxmKE1hY2hpbmUqIG1h
Y2hpbmUsIENhbGxGcmFtZSogY2FsbEZyYW1lLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgU3RydWN0
dXJlSUQqIHN0cnVjdHVyZUlELCBzaXplX3QgY2FjaGVkT2Zmc2V0LCB2b2lkKiByZXR1cm5BZGRy
ZXNzKQogICAgICAgICB7Ci0gICAgICAgICAgICBDVEkgY3RpKG1hY2hpbmUsIGV4ZWMsIGNvZGVC
bG9jayk7CisgICAgICAgICAgICBDVEkgY3RpKG1hY2hpbmUsIGNhbGxGcmFtZSwgY29kZUJsb2Nr
KTsKICAgICAgICAgICAgIGN0aS5wcml2YXRlQ29tcGlsZUdldEJ5SWRTZWxmKHN0cnVjdHVyZUlE
LCBjYWNoZWRPZmZzZXQsIHJldHVybkFkZHJlc3MpOwogICAgICAgICB9CiAKLSAgICAgICAgc3Rh
dGljIHZvaWQgY29tcGlsZUdldEJ5SWRQcm90byhNYWNoaW5lKiBtYWNoaW5lLCBFeGVjU3RhdGUq
IGV4ZWMsIENvZGVCbG9jayogY29kZUJsb2NrLCBTdHJ1Y3R1cmVJRCogc3RydWN0dXJlSUQsIFN0
cnVjdHVyZUlEKiBwcm90b3R5cGVTdHJ1Y3R1cmVJRCwgc2l6ZV90IGNhY2hlZE9mZnNldCwgdm9p
ZCogcmV0dXJuQWRkcmVzcykKKyAgICAgICAgc3RhdGljIHZvaWQgY29tcGlsZUdldEJ5SWRQcm90
byhNYWNoaW5lKiBtYWNoaW5lLCBDYWxsRnJhbWUqIGNhbGxGcmFtZSwgQ29kZUJsb2NrKiBjb2Rl
QmxvY2ssIFN0cnVjdHVyZUlEKiBzdHJ1Y3R1cmVJRCwgU3RydWN0dXJlSUQqIHByb3RvdHlwZVN0
cnVjdHVyZUlELCBzaXplX3QgY2FjaGVkT2Zmc2V0LCB2b2lkKiByZXR1cm5BZGRyZXNzKQogICAg
ICAgICB7Ci0gICAgICAgICAgICBDVEkgY3RpKG1hY2hpbmUsIGV4ZWMsIGNvZGVCbG9jayk7Cisg
ICAgICAgICAgICBDVEkgY3RpKG1hY2hpbmUsIGNhbGxGcmFtZSwgY29kZUJsb2NrKTsKICAgICAg
ICAgICAgIGN0aS5wcml2YXRlQ29tcGlsZUdldEJ5SWRQcm90byhzdHJ1Y3R1cmVJRCwgcHJvdG90
eXBlU3RydWN0dXJlSUQsIGNhY2hlZE9mZnNldCwgcmV0dXJuQWRkcmVzcyk7CiAgICAgICAgIH0K
IAotICAgICAgICBzdGF0aWMgdm9pZCBjb21waWxlR2V0QnlJZENoYWluKE1hY2hpbmUqIG1hY2hp
bmUsIEV4ZWNTdGF0ZSogZXhlYywgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIFN0cnVjdHVyZUlEKiBz
dHJ1Y3R1cmVJRCwgU3RydWN0dXJlSURDaGFpbiogY2hhaW4sIHNpemVfdCBjb3VudCwgc2l6ZV90
IGNhY2hlZE9mZnNldCwgdm9pZCogcmV0dXJuQWRkcmVzcykKKyAgICAgICAgc3RhdGljIHZvaWQg
Y29tcGlsZUdldEJ5SWRDaGFpbihNYWNoaW5lKiBtYWNoaW5lLCBDYWxsRnJhbWUqIGNhbGxGcmFt
ZSwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIFN0cnVjdHVyZUlEKiBzdHJ1Y3R1cmVJRCwgU3RydWN0
dXJlSURDaGFpbiogY2hhaW4sIHNpemVfdCBjb3VudCwgc2l6ZV90IGNhY2hlZE9mZnNldCwgdm9p
ZCogcmV0dXJuQWRkcmVzcykKICAgICAgICAgewotICAgICAgICAgICAgQ1RJIGN0aShtYWNoaW5l
LCBleGVjLCBjb2RlQmxvY2spOworICAgICAgICAgICAgQ1RJIGN0aShtYWNoaW5lLCBjYWxsRnJh
bWUsIGNvZGVCbG9jayk7CiAgICAgICAgICAgICBjdGkucHJpdmF0ZUNvbXBpbGVHZXRCeUlkQ2hh
aW4oc3RydWN0dXJlSUQsIGNoYWluLCBjb3VudCwgY2FjaGVkT2Zmc2V0LCByZXR1cm5BZGRyZXNz
KTsKICAgICAgICAgfQogCi0gICAgICAgIHN0YXRpYyB2b2lkIGNvbXBpbGVQdXRCeUlkUmVwbGFj
ZShNYWNoaW5lKiBtYWNoaW5lLCBFeGVjU3RhdGUqIGV4ZWMsIENvZGVCbG9jayogY29kZUJsb2Nr
LCBTdHJ1Y3R1cmVJRCogc3RydWN0dXJlSUQsIHNpemVfdCBjYWNoZWRPZmZzZXQsIHZvaWQqIHJl
dHVybkFkZHJlc3MpCisgICAgICAgIHN0YXRpYyB2b2lkIGNvbXBpbGVQdXRCeUlkUmVwbGFjZShN
YWNoaW5lKiBtYWNoaW5lLCBDYWxsRnJhbWUqIGNhbGxGcmFtZSwgQ29kZUJsb2NrKiBjb2RlQmxv
Y2ssIFN0cnVjdHVyZUlEKiBzdHJ1Y3R1cmVJRCwgc2l6ZV90IGNhY2hlZE9mZnNldCwgdm9pZCog
cmV0dXJuQWRkcmVzcykKICAgICAgICAgewotICAgICAgICAgICAgQ1RJIGN0aShtYWNoaW5lLCBl
eGVjLCBjb2RlQmxvY2spOworICAgICAgICAgICAgQ1RJIGN0aShtYWNoaW5lLCBjYWxsRnJhbWUs
IGNvZGVCbG9jayk7CiAgICAgICAgICAgICBjdGkucHJpdmF0ZUNvbXBpbGVQdXRCeUlkUmVwbGFj
ZShzdHJ1Y3R1cmVJRCwgY2FjaGVkT2Zmc2V0LCByZXR1cm5BZGRyZXNzKTsKICAgICAgICAgfQog
ICAgICAgICAKLSAgICAgICAgc3RhdGljIHZvaWQgY29tcGlsZVB1dEJ5SWRUcmFuc2l0aW9uKE1h
Y2hpbmUqIG1hY2hpbmUsIEV4ZWNTdGF0ZSogZXhlYywgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIFN0
cnVjdHVyZUlEKiBvbGRTdHJ1Y3R1cmVJRCwgU3RydWN0dXJlSUQqIG5ld1N0cnVjdHVyZUlELCBz
aXplX3QgY2FjaGVkT2Zmc2V0LCBTdHJ1Y3R1cmVJRENoYWluKiBzSURDLCB2b2lkKiByZXR1cm5B
ZGRyZXNzKQorICAgICAgICBzdGF0aWMgdm9pZCBjb21waWxlUHV0QnlJZFRyYW5zaXRpb24oTWFj
aGluZSogbWFjaGluZSwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIENvZGVCbG9jayogY29kZUJsb2Nr
LCBTdHJ1Y3R1cmVJRCogb2xkU3RydWN0dXJlSUQsIFN0cnVjdHVyZUlEKiBuZXdTdHJ1Y3R1cmVJ
RCwgc2l6ZV90IGNhY2hlZE9mZnNldCwgU3RydWN0dXJlSURDaGFpbiogc0lEQywgdm9pZCogcmV0
dXJuQWRkcmVzcykKICAgICAgICAgewotICAgICAgICAgICAgQ1RJIGN0aShtYWNoaW5lLCBleGVj
LCBjb2RlQmxvY2spOworICAgICAgICAgICAgQ1RJIGN0aShtYWNoaW5lLCBjYWxsRnJhbWUsIGNv
ZGVCbG9jayk7CiAgICAgICAgICAgICBjdGkucHJpdmF0ZUNvbXBpbGVQdXRCeUlkVHJhbnNpdGlv
bihvbGRTdHJ1Y3R1cmVJRCwgbmV3U3RydWN0dXJlSUQsIGNhY2hlZE9mZnNldCwgc0lEQywgcmV0
dXJuQWRkcmVzcyk7CiAgICAgICAgIH0KIAotICAgICAgICBzdGF0aWMgdm9pZCogY29tcGlsZUFy
cmF5TGVuZ3RoVHJhbXBvbGluZShNYWNoaW5lKiBtYWNoaW5lLCBFeGVjU3RhdGUqIGV4ZWMsIENv
ZGVCbG9jayogY29kZUJsb2NrKQorICAgICAgICBzdGF0aWMgdm9pZCogY29tcGlsZUFycmF5TGVu
Z3RoVHJhbXBvbGluZShNYWNoaW5lKiBtYWNoaW5lLCBDYWxsRnJhbWUqIGNhbGxGcmFtZSwgQ29k
ZUJsb2NrKiBjb2RlQmxvY2spCiAgICAgICAgIHsKLSAgICAgICAgICAgIENUSSBjdGkobWFjaGlu
ZSwgZXhlYywgY29kZUJsb2NrKTsKKyAgICAgICAgICAgIENUSSBjdGkobWFjaGluZSwgY2FsbEZy
YW1lLCBjb2RlQmxvY2spOwogICAgICAgICAgICAgcmV0dXJuIGN0aS5wcml2YXRlQ29tcGlsZUFy
cmF5TGVuZ3RoVHJhbXBvbGluZSgpOwogICAgICAgICB9CiAKLSAgICAgICAgc3RhdGljIHZvaWQq
IGNvbXBpbGVTdHJpbmdMZW5ndGhUcmFtcG9saW5lKE1hY2hpbmUqIG1hY2hpbmUsIEV4ZWNTdGF0
ZSogZXhlYywgQ29kZUJsb2NrKiBjb2RlQmxvY2spCisgICAgICAgIHN0YXRpYyB2b2lkKiBjb21w
aWxlU3RyaW5nTGVuZ3RoVHJhbXBvbGluZShNYWNoaW5lKiBtYWNoaW5lLCBDYWxsRnJhbWUqIGNh
bGxGcmFtZSwgQ29kZUJsb2NrKiBjb2RlQmxvY2spCiAgICAgICAgIHsKLSAgICAgICAgICAgIENU
SSBjdGkobWFjaGluZSwgZXhlYywgY29kZUJsb2NrKTsKKyAgICAgICAgICAgIENUSSBjdGkobWFj
aGluZSwgY2FsbEZyYW1lLCBjb2RlQmxvY2spOwogICAgICAgICAgICAgcmV0dXJuIGN0aS5wcml2
YXRlQ29tcGlsZVN0cmluZ0xlbmd0aFRyYW1wb2xpbmUoKTsKICAgICAgICAgfQogCiAgICAgICAg
IHN0YXRpYyB2b2lkIHBhdGNoR2V0QnlJZFNlbGYoQ29kZUJsb2NrKiBjb2RlQmxvY2ssIFN0cnVj
dHVyZUlEKiBzdHJ1Y3R1cmVJRCwgc2l6ZV90IGNhY2hlZE9mZnNldCwgdm9pZCogcmV0dXJuQWRk
cmVzcyk7CiAgICAgICAgIHN0YXRpYyB2b2lkIHBhdGNoUHV0QnlJZFJlcGxhY2UoQ29kZUJsb2Nr
KiBjb2RlQmxvY2ssIFN0cnVjdHVyZUlEKiBzdHJ1Y3R1cmVJRCwgc2l6ZV90IGNhY2hlZE9mZnNl
dCwgdm9pZCogcmV0dXJuQWRkcmVzcyk7CiAKLSAgICAgICAgc3RhdGljIHZvaWQgY29tcGlsZVBh
dGNoR2V0QXJyYXlMZW5ndGgoTWFjaGluZSogbWFjaGluZSwgRXhlY1N0YXRlKiBleGVjLCBDb2Rl
QmxvY2sqIGNvZGVCbG9jaywgdm9pZCogcmV0dXJuQWRkcmVzcykKKyAgICAgICAgc3RhdGljIHZv
aWQgY29tcGlsZVBhdGNoR2V0QXJyYXlMZW5ndGgoTWFjaGluZSogbWFjaGluZSwgQ2FsbEZyYW1l
KiBjYWxsRnJhbWUsIENvZGVCbG9jayogY29kZUJsb2NrLCB2b2lkKiByZXR1cm5BZGRyZXNzKQog
ICAgICAgICB7Ci0gICAgICAgICAgICBDVEkgY3RpKG1hY2hpbmUsIGV4ZWMsIGNvZGVCbG9jayk7
CisgICAgICAgICAgICBDVEkgY3RpKG1hY2hpbmUsIGNhbGxGcmFtZSwgY29kZUJsb2NrKTsKICAg
ICAgICAgICAgIHJldHVybiBjdGkucHJpdmF0ZUNvbXBpbGVQYXRjaEdldEFycmF5TGVuZ3RoKHJl
dHVybkFkZHJlc3MpOwogICAgICAgICB9CiAKLSAgICAgICAgaW5saW5lIHN0YXRpYyBKU1ZhbHVl
KiBleGVjdXRlKHZvaWQqIGNvZGUsIFJlZ2lzdGVyRmlsZSogcmVnaXN0ZXJGaWxlLCBSZWdpc3Rl
ciogciwgSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBKU1ZhbHVlKiogZXhjZXB0aW9uKQorICAg
ICAgICBpbmxpbmUgc3RhdGljIEpTVmFsdWUqIGV4ZWN1dGUodm9pZCogY29kZSwgUmVnaXN0ZXJG
aWxlKiByZWdpc3RlckZpbGUsIENhbGxGcmFtZSogY2FsbEZyYW1lLCBKU0dsb2JhbERhdGEqIGds
b2JhbERhdGEsIEpTVmFsdWUqKiBleGNlcHRpb24pCiAgICAgICAgIHsKLSAgICAgICAgICAgIHJl
dHVybiBjdGlUcmFtcG9saW5lKGNvZGUsIHJlZ2lzdGVyRmlsZSwgciwgZXhjZXB0aW9uLCBQcm9m
aWxlcjo6ZW5hYmxlZFByb2ZpbGVyUmVmZXJlbmNlKCksIGdsb2JhbERhdGEpOworICAgICAgICAg
ICAgcmV0dXJuIGN0aVRyYW1wb2xpbmUoY29kZSwgcmVnaXN0ZXJGaWxlLCBjYWxsRnJhbWUsIGV4
Y2VwdGlvbiwgUHJvZmlsZXI6OmVuYWJsZWRQcm9maWxlclJlZmVyZW5jZSgpLCBnbG9iYWxEYXRh
KTsKICAgICAgICAgfQogCiAgICAgcHJpdmF0ZToKLSAgICAgICAgQ1RJKE1hY2hpbmUqLCBFeGVj
U3RhdGUqLCBDb2RlQmxvY2sqKTsKKyAgICAgICAgQ1RJKE1hY2hpbmUqLCBDYWxsRnJhbWUqLCBD
b2RlQmxvY2sqKTsKICAgICAgICAgCiAgICAgICAgIGJvb2wgaXNDb25zdGFudChpbnQgc3JjKTsK
LSAgICAgICAgSlNWYWx1ZSogZ2V0Q29uc3RhbnQoRXhlY1N0YXRlKiwgaW50IHNyYyk7CisgICAg
ICAgIEpTVmFsdWUqIGdldENvbnN0YW50KENhbGxGcmFtZSosIGludCBzcmMpOwogCiAgICAgICAg
IHZvaWQgcHJpdmF0ZUNvbXBpbGVNYWluUGFzcygpOwogICAgICAgICB2b2lkIHByaXZhdGVDb21w
aWxlTGlua1Bhc3MoKTsKQEAgLTQwNiw3ICs0MDMsNyBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAg
ICAgICBYODZBc3NlbWJsZXIgbV9qaXQ7CiAgICAgICAgIE1hY2hpbmUqIG1fbWFjaGluZTsKLSAg
ICAgICAgRXhlY1N0YXRlKiBtX2V4ZWM7CisgICAgICAgIENhbGxGcmFtZSogbV9jYWxsRnJhbWU7
CiAgICAgICAgIENvZGVCbG9jayogbV9jb2RlQmxvY2s7CiAKICAgICAgICAgVmVjdG9yPENhbGxS
ZWNvcmQ+IG1fY2FsbHM7CkluZGV4OiBKYXZhU2NyaXB0Q29yZS9WTS9Db2RlQmxvY2suaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9WTS9Db2RlQmxvY2suaAkocmV2aXNpb24gMzczNTIp
CisrKyBKYXZhU2NyaXB0Q29yZS9WTS9Db2RlQmxvY2suaAkod29ya2luZyBjb3B5KQpAQCAtMTYx
LDcgKzE2MSw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAgICAgICAgIFVTdHJpbmcgZXJy
TXNnOwogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIFNvdXJjZUNvZGUgc291cmNl
ID0gbWFrZVNvdXJjZShldmFsU291cmNlKTsKLSAgICAgICAgICAgICAgICBldmFsTm9kZSA9IGV4
ZWMtPnBhcnNlcigpLT5wYXJzZTxFdmFsTm9kZT4oZXhlYywgc291cmNlLCAmZXJyTGluZSwgJmVy
ck1zZyk7CisgICAgICAgICAgICAgICAgZXZhbE5vZGUgPSBleGVjLT5nbG9iYWxEYXRhKCkucGFy
c2VyLT5wYXJzZTxFdmFsTm9kZT4oZXhlYywgc291cmNlLCAmZXJyTGluZSwgJmVyck1zZyk7CiAg
ICAgICAgICAgICAgICAgaWYgKGV2YWxOb2RlKSB7CiAgICAgICAgICAgICAgICAgICAgIGlmIChl
dmFsU291cmNlLnNpemUoKSA8IG1heENhY2hlYWJsZVNvdXJjZUxlbmd0aCAmJiAoKnNjb3BlQ2hh
aW4tPmJlZ2luKCkpLT5pc1ZhcmlhYmxlT2JqZWN0KCkgJiYgY2FjaGVNYXAuc2l6ZSgpIDwgbWF4
Q2FjaGVFbnRyaWVzKQogICAgICAgICAgICAgICAgICAgICAgICAgY2FjaGVNYXAuc2V0KGV2YWxT
b3VyY2UucmVwKCksIGV2YWxOb2RlKTsKSW5kZXg6IEphdmFTY3JpcHRDb3JlL1ZNL0NvZGVHZW5l
cmF0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL1ZNL0NvZGVHZW5lcmF0b3Iu
Y3BwCShyZXZpc2lvbiAzNzM1MikKKysrIEphdmFTY3JpcHRDb3JlL1ZNL0NvZGVHZW5lcmF0b3Iu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC03MTMsOCArNzEzLDggQEAgUmVnaXN0ZXJJRCogQ29kZUdl
bmVyYXRvcjo6ZW1pdEVxdWFsaXR5TwogICAgICAgICBpZiAoc3JjMS0+aW5kZXgoKSA9PSBkc3RJ
bmRleAogICAgICAgICAgICAgJiYgc3JjMS0+aXNUZW1wb3JhcnkoKQogICAgICAgICAgICAgJiYg
c3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHNyYzItPmluZGV4KCkpIDwgbV9jb2RlQmxvY2stPmNvbnN0
YW50UmVnaXN0ZXJzLnNpemUoKQotICAgICAgICAgICAgJiYgbV9jb2RlQmxvY2stPmNvbnN0YW50
UmVnaXN0ZXJzW3NyYzItPmluZGV4KCldLmpzVmFsdWUoZ2xvYmFsRXhlYygpKS0+aXNTdHJpbmco
KSkgewotICAgICAgICAgICAgY29uc3QgVVN0cmluZyYgdmFsdWUgPSBzdGF0aWNfY2FzdDxKU1N0
cmluZyo+KG1fY29kZUJsb2NrLT5jb25zdGFudFJlZ2lzdGVyc1tzcmMyLT5pbmRleCgpXS5qc1Zh
bHVlKGdsb2JhbEV4ZWMoKSkpLT52YWx1ZSgpOworICAgICAgICAgICAgJiYgbV9jb2RlQmxvY2st
PmNvbnN0YW50UmVnaXN0ZXJzW3NyYzItPmluZGV4KCldLmpzVmFsdWUobV9zY29wZUNoYWluLT5n
bG9iYWxPYmplY3QoKS0+Z2xvYmFsRXhlYygpKS0+aXNTdHJpbmcoKSkgeworICAgICAgICAgICAg
Y29uc3QgVVN0cmluZyYgdmFsdWUgPSBzdGF0aWNfY2FzdDxKU1N0cmluZyo+KG1fY29kZUJsb2Nr
LT5jb25zdGFudFJlZ2lzdGVyc1tzcmMyLT5pbmRleCgpXS5qc1ZhbHVlKG1fc2NvcGVDaGFpbi0+
Z2xvYmFsT2JqZWN0KCktPmdsb2JhbEV4ZWMoKSkpLT52YWx1ZSgpOwogICAgICAgICAgICAgaWYg
KHZhbHVlID09ICJ1bmRlZmluZWQiKSB7CiAgICAgICAgICAgICAgICAgcmV3aW5kVW5hcnlPcCgp
OwogICAgICAgICAgICAgICAgIGVtaXRPcGNvZGUob3BfaXNfdW5kZWZpbmVkKTsKQEAgLTc3Nywx
MCArNzc3LDEwIEBAIFJlZ2lzdGVySUQqIENvZGVHZW5lcmF0b3I6OmVtaXRMb2FkKFJlZ2kKICAg
ICAvLyBGSVhNRTogT3VyIGhhc2ggdGFibGVzIHdvbid0IGhvbGQgaW5maW5pdHksIHNvIHdlIG1h
a2UgYSBuZXcgSlNOdW1iZXJDZWxsIGVhY2ggdGltZS4KICAgICAvLyBMYXRlciB3ZSBjYW4gZG8g
dGhlIGV4dHJhIHdvcmsgdG8gaGFuZGxlIHRoYXQgbGlrZSB0aGUgb3RoZXIgY2FzZXMuCiAgICAg
aWYgKG51bWJlciA9PSBIYXNoVHJhaXRzPGRvdWJsZT46OmVtcHR5VmFsdWUoKSB8fCBIYXNoVHJh
aXRzPGRvdWJsZT46OmlzRGVsZXRlZFZhbHVlKG51bWJlcikpCi0gICAgICAgIHJldHVybiBlbWl0
TG9hZChkc3QsIGpzTnVtYmVyKGdsb2JhbEV4ZWMoKSwgbnVtYmVyKSk7CisgICAgICAgIHJldHVy
biBlbWl0TG9hZChkc3QsIGpzTnVtYmVyKGdsb2JhbERhdGEoKSwgbnVtYmVyKSk7CiAgICAgSlNW
YWx1ZSomIHZhbHVlSW5NYXAgPSBtX251bWJlck1hcC5hZGQobnVtYmVyLCAwKS5maXJzdC0+c2Vj
b25kOwogICAgIGlmICghdmFsdWVJbk1hcCkKLSAgICAgICAgdmFsdWVJbk1hcCA9IGpzTnVtYmVy
KGdsb2JhbEV4ZWMoKSwgbnVtYmVyKTsKKyAgICAgICAgdmFsdWVJbk1hcCA9IGpzTnVtYmVyKGds
b2JhbERhdGEoKSwgbnVtYmVyKTsKICAgICByZXR1cm4gZW1pdExvYWQoZHN0LCB2YWx1ZUluTWFw
KTsKIH0KIApAQCAtNzg4LDcgKzc4OCw3IEBAIFJlZ2lzdGVySUQqIENvZGVHZW5lcmF0b3I6OmVt
aXRMb2FkKFJlZ2kKIHsKICAgICBKU1N0cmluZyomIHZhbHVlSW5NYXAgPSBtX3N0cmluZ01hcC5h
ZGQoaWRlbnRpZmllci51c3RyaW5nKCkucmVwKCksIDApLmZpcnN0LT5zZWNvbmQ7CiAgICAgaWYg
KCF2YWx1ZUluTWFwKQotICAgICAgICB2YWx1ZUluTWFwID0ganNPd25lZFN0cmluZyhnbG9iYWxF
eGVjKCksIGlkZW50aWZpZXIudXN0cmluZygpKTsKKyAgICAgICAgdmFsdWVJbk1hcCA9IGpzT3du
ZWRTdHJpbmcoZ2xvYmFsRGF0YSgpLCBpZGVudGlmaWVyLnVzdHJpbmcoKSk7CiAgICAgcmV0dXJu
IGVtaXRMb2FkKGRzdCwgdmFsdWVJbk1hcCk7CiB9CiAKQEAgLTgxMiw3ICs4MTIsNyBAQCBSZWdp
c3RlcklEKiBDb2RlR2VuZXJhdG9yOjplbWl0VW5leHBlY3RlCiB7CiAgICAgZW1pdE9wY29kZShv
cF91bmV4cGVjdGVkX2xvYWQpOwogICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChkc3QtPmluZGV4
KCkpOwotICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChhZGRVbmV4cGVjdGVkQ29uc3RhbnQoanNO
dW1iZXIoZ2xvYmFsRXhlYygpLCBkKSkpOworICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChhZGRV
bmV4cGVjdGVkQ29uc3RhbnQoanNOdW1iZXIoZ2xvYmFsRGF0YSgpLCBkKSkpOwogICAgIHJldHVy
biBkc3Q7CiB9CiAKQEAgLTExODIsNyArMTE4Miw3IEBAIFJlZ2lzdGVySUQqIENvZGVHZW5lcmF0
b3I6OmVtaXRDb25zdHJ1Y3QKICAgICAvLyBMb2FkIHByb3RvdHlwZS4KICAgICBlbWl0RXhwcmVz
c2lvbkluZm8oZGl2b3QsIHN0YXJ0T2Zmc2V0LCBlbmRPZmZzZXQpOwogICAgIFJlZlB0cjxSZWdp
c3RlcklEPiBmdW5jUHJvdG8gPSBuZXdUZW1wb3JhcnkoKTsKLSAgICBlbWl0R2V0QnlJZChmdW5j
UHJvdG8uZ2V0KCksIGZ1bmMsIGdsb2JhbEV4ZWMoKS0+cHJvcGVydHlOYW1lcygpLnByb3RvdHlw
ZSk7CisgICAgZW1pdEdldEJ5SWQoZnVuY1Byb3RvLmdldCgpLCBmdW5jLCBnbG9iYWxEYXRhKCkt
PnByb3BlcnR5TmFtZXMtPnByb3RvdHlwZSk7CiAKICAgICAvLyBHZW5lcmF0ZSBjb2RlIGZvciBh
cmd1bWVudHMuCiAgICAgVmVjdG9yPFJlZlB0cjxSZWdpc3RlcklEPiwgMTY+IGFyZ3Y7CkluZGV4
OiBKYXZhU2NyaXB0Q29yZS9WTS9Db2RlR2VuZXJhdG9yLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNj
cmlwdENvcmUvVk0vQ29kZUdlbmVyYXRvci5oCShyZXZpc2lvbiAzNzM1MikKKysrIEphdmFTY3Jp
cHRDb3JlL1ZNL0NvZGVHZW5lcmF0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMzIwLDggKzMyMCw2
IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgICAgIENvZGVUeXBlIGNvZGVUeXBlKCkgY29uc3Qg
eyByZXR1cm4gbV9jb2RlVHlwZTsgfQogCi0gICAgICAgIEV4ZWNTdGF0ZSogZ2xvYmFsRXhlYygp
IHsgcmV0dXJuIG1fc2NvcGVDaGFpbi0+Z2xvYmFsT2JqZWN0KCktPmdsb2JhbEV4ZWMoKTsgfQot
CiAgICAgcHJpdmF0ZToKICAgICAgICAgdm9pZCBlbWl0T3Bjb2RlKE9wY29kZUlEKTsKICAgICAg
ICAgdm9pZCByZXRyaWV2ZUxhc3RCaW5hcnlPcChpbnQmIGRzdEluZGV4LCBpbnQmIHNyYzFJbmRl
eCwgaW50JiBzcmMySW5kZXgpOwpJbmRleDogSmF2YVNjcmlwdENvcmUvVk0vTWFjaGluZS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvVk0vTWFjaGluZS5jcHAJKHJldmlzaW9uIDM3
MzUyKQorKysgSmF2YVNjcmlwdENvcmUvVk0vTWFjaGluZS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTE2Miw3ICsxNjIsNyBAQCBzdGF0aWMgQUxXQVlTX0lOTElORSBib29sIGZhc3RUb1VJbnQzMihK
CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXN0YXRpYyBpbmxpbmUgYm9vbCBqc0xlc3MoRXhlY1N0
YXRlKiBleGVjLCBKU1ZhbHVlKiB2MSwgSlNWYWx1ZSogdjIpCitzdGF0aWMgaW5saW5lIGJvb2wg
anNMZXNzKENhbGxGcmFtZSogY2FsbEZyYW1lLCBKU1ZhbHVlKiB2MSwgSlNWYWx1ZSogdjIpCiB7
CiAgICAgaWYgKEpTSW1tZWRpYXRlOjphcmVCb3RoSW1tZWRpYXRlTnVtYmVycyh2MSwgdjIpKQog
ICAgICAgICByZXR1cm4gSlNJbW1lZGlhdGU6OmdldFRydW5jYXRlZEludDMyKHYxKSA8IEpTSW1t
ZWRpYXRlOjpnZXRUcnVuY2F0ZWRJbnQzMih2Mik7CkBAIC0xNzIsMTQgKzE3MiwxNCBAQCBzdGF0
aWMgaW5saW5lIGJvb2wganNMZXNzKEV4ZWNTdGF0ZSogZXhlCiAgICAgaWYgKGZhc3RJc051bWJl
cih2MSwgbjEpICYmIGZhc3RJc051bWJlcih2MiwgbjIpKQogICAgICAgICByZXR1cm4gbjEgPCBu
MjsKIAotICAgIE1hY2hpbmUqIG1hY2hpbmUgPSBleGVjLT5tYWNoaW5lKCk7CisgICAgTWFjaGlu
ZSogbWFjaGluZSA9IGNhbGxGcmFtZS0+bWFjaGluZSgpOwogICAgIGlmIChtYWNoaW5lLT5pc0pT
U3RyaW5nKHYxKSAmJiBtYWNoaW5lLT5pc0pTU3RyaW5nKHYyKSkKICAgICAgICAgcmV0dXJuIHN0
YXRpY19jYXN0PGNvbnN0IEpTU3RyaW5nKj4odjEpLT52YWx1ZSgpIDwgc3RhdGljX2Nhc3Q8Y29u
c3QgSlNTdHJpbmcqPih2MiktPnZhbHVlKCk7CiAKICAgICBKU1ZhbHVlKiBwMTsKICAgICBKU1Zh
bHVlKiBwMjsKLSAgICBib29sIHdhc05vdFN0cmluZzEgPSB2MS0+Z2V0UHJpbWl0aXZlTnVtYmVy
KGV4ZWMsIG4xLCBwMSk7Ci0gICAgYm9vbCB3YXNOb3RTdHJpbmcyID0gdjItPmdldFByaW1pdGl2
ZU51bWJlcihleGVjLCBuMiwgcDIpOworICAgIGJvb2wgd2FzTm90U3RyaW5nMSA9IHYxLT5nZXRQ
cmltaXRpdmVOdW1iZXIoY2FsbEZyYW1lLCBuMSwgcDEpOworICAgIGJvb2wgd2FzTm90U3RyaW5n
MiA9IHYyLT5nZXRQcmltaXRpdmVOdW1iZXIoY2FsbEZyYW1lLCBuMiwgcDIpOwogCiAgICAgaWYg
KHdhc05vdFN0cmluZzEgfCB3YXNOb3RTdHJpbmcyKQogICAgICAgICByZXR1cm4gbjEgPCBuMjsK
QEAgLTE4Nyw3ICsxODcsNyBAQCBzdGF0aWMgaW5saW5lIGJvb2wganNMZXNzKEV4ZWNTdGF0ZSog
ZXhlCiAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGNvbnN0IEpTU3RyaW5nKj4ocDEpLT52YWx1ZSgp
IDwgc3RhdGljX2Nhc3Q8Y29uc3QgSlNTdHJpbmcqPihwMiktPnZhbHVlKCk7CiB9CiAKLXN0YXRp
YyBpbmxpbmUgYm9vbCBqc0xlc3NFcShFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUqIHYxLCBKU1Zh
bHVlKiB2MikKK3N0YXRpYyBpbmxpbmUgYm9vbCBqc0xlc3NFcShDYWxsRnJhbWUqIGNhbGxGcmFt
ZSwgSlNWYWx1ZSogdjEsIEpTVmFsdWUqIHYyKQogewogICAgIGlmIChKU0ltbWVkaWF0ZTo6YXJl
Qm90aEltbWVkaWF0ZU51bWJlcnModjEsIHYyKSkKICAgICAgICAgcmV0dXJuIEpTSW1tZWRpYXRl
OjpnZXRUcnVuY2F0ZWRJbnQzMih2MSkgPD0gSlNJbW1lZGlhdGU6OmdldFRydW5jYXRlZEludDMy
KHYyKTsKQEAgLTE5NywxNCArMTk3LDE0IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBqc0xlc3NFcShF
eGVjU3RhdGUqIGUKICAgICBpZiAoZmFzdElzTnVtYmVyKHYxLCBuMSkgJiYgZmFzdElzTnVtYmVy
KHYyLCBuMikpCiAgICAgICAgIHJldHVybiBuMSA8PSBuMjsKIAotICAgIE1hY2hpbmUqIG1hY2hp
bmUgPSBleGVjLT5tYWNoaW5lKCk7CisgICAgTWFjaGluZSogbWFjaGluZSA9IGNhbGxGcmFtZS0+
bWFjaGluZSgpOwogICAgIGlmIChtYWNoaW5lLT5pc0pTU3RyaW5nKHYxKSAmJiBtYWNoaW5lLT5p
c0pTU3RyaW5nKHYyKSkKICAgICAgICAgcmV0dXJuICEoc3RhdGljX2Nhc3Q8Y29uc3QgSlNTdHJp
bmcqPih2MiktPnZhbHVlKCkgPCBzdGF0aWNfY2FzdDxjb25zdCBKU1N0cmluZyo+KHYxKS0+dmFs
dWUoKSk7CiAKICAgICBKU1ZhbHVlKiBwMTsKICAgICBKU1ZhbHVlKiBwMjsKLSAgICBib29sIHdh
c05vdFN0cmluZzEgPSB2MS0+Z2V0UHJpbWl0aXZlTnVtYmVyKGV4ZWMsIG4xLCBwMSk7Ci0gICAg
Ym9vbCB3YXNOb3RTdHJpbmcyID0gdjItPmdldFByaW1pdGl2ZU51bWJlcihleGVjLCBuMiwgcDIp
OworICAgIGJvb2wgd2FzTm90U3RyaW5nMSA9IHYxLT5nZXRQcmltaXRpdmVOdW1iZXIoY2FsbEZy
YW1lLCBuMSwgcDEpOworICAgIGJvb2wgd2FzTm90U3RyaW5nMiA9IHYyLT5nZXRQcmltaXRpdmVO
dW1iZXIoY2FsbEZyYW1lLCBuMiwgcDIpOwogCiAgICAgaWYgKHdhc05vdFN0cmluZzEgfCB3YXNO
b3RTdHJpbmcyKQogICAgICAgICByZXR1cm4gbjEgPD0gbjI7CkBAIC0yMTIsMjAgKzIxMiwyMCBA
QCBzdGF0aWMgaW5saW5lIGJvb2wganNMZXNzRXEoRXhlY1N0YXRlKiBlCiAgICAgcmV0dXJuICEo
c3RhdGljX2Nhc3Q8Y29uc3QgSlNTdHJpbmcqPihwMiktPnZhbHVlKCkgPCBzdGF0aWNfY2FzdDxj
b25zdCBKU1N0cmluZyo+KHAxKS0+dmFsdWUoKSk7CiB9CiAKLXN0YXRpYyBORVZFUl9JTkxJTkUg
SlNWYWx1ZSoganNBZGRTbG93Q2FzZShFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUqIHYxLCBKU1Zh
bHVlKiB2MikKK3N0YXRpYyBORVZFUl9JTkxJTkUgSlNWYWx1ZSoganNBZGRTbG93Q2FzZShDYWxs
RnJhbWUqIGNhbGxGcmFtZSwgSlNWYWx1ZSogdjEsIEpTVmFsdWUqIHYyKQogewogICAgIC8vIGV4
Y2VwdGlvbiBmb3IgdGhlIERhdGUgZXhjZXB0aW9uIGluIGRlZmF1bHRWYWx1ZSgpCi0gICAgSlNW
YWx1ZSogcDEgPSB2MS0+dG9QcmltaXRpdmUoZXhlYyk7Ci0gICAgSlNWYWx1ZSogcDIgPSB2Mi0+
dG9QcmltaXRpdmUoZXhlYyk7CisgICAgSlNWYWx1ZSogcDEgPSB2MS0+dG9QcmltaXRpdmUoY2Fs
bEZyYW1lKTsKKyAgICBKU1ZhbHVlKiBwMiA9IHYyLT50b1ByaW1pdGl2ZShjYWxsRnJhbWUpOwog
CiAgICAgaWYgKHAxLT5pc1N0cmluZygpIHx8IHAyLT5pc1N0cmluZygpKSB7Ci0gICAgICAgIFJl
ZlB0cjxVU3RyaW5nOjpSZXA+IHZhbHVlID0gY29uY2F0ZW5hdGUocDEtPnRvU3RyaW5nKGV4ZWMp
LnJlcCgpLCBwMi0+dG9TdHJpbmcoZXhlYykucmVwKCkpOworICAgICAgICBSZWZQdHI8VVN0cmlu
Zzo6UmVwPiB2YWx1ZSA9IGNvbmNhdGVuYXRlKHAxLT50b1N0cmluZyhjYWxsRnJhbWUpLnJlcCgp
LCBwMi0+dG9TdHJpbmcoY2FsbEZyYW1lKS5yZXAoKSk7CiAgICAgICAgIGlmICghdmFsdWUpCi0g
ICAgICAgICAgICByZXR1cm4gdGhyb3dPdXRPZk1lbW9yeUVycm9yKGV4ZWMpOwotICAgICAgICBy
ZXR1cm4ganNTdHJpbmcoZXhlYywgdmFsdWUucmVsZWFzZSgpKTsKKyAgICAgICAgICAgIHJldHVy
biB0aHJvd091dE9mTWVtb3J5RXJyb3IoY2FsbEZyYW1lKTsKKyAgICAgICAgcmV0dXJuIGpzU3Ry
aW5nKGNhbGxGcmFtZSwgdmFsdWUucmVsZWFzZSgpKTsKICAgICB9CiAKLSAgICByZXR1cm4ganNO
dW1iZXIoZXhlYywgcDEtPnRvTnVtYmVyKGV4ZWMpICsgcDItPnRvTnVtYmVyKGV4ZWMpKTsKKyAg
ICByZXR1cm4ganNOdW1iZXIoY2FsbEZyYW1lLCBwMS0+dG9OdW1iZXIoY2FsbEZyYW1lKSArIHAy
LT50b051bWJlcihjYWxsRnJhbWUpKTsKIH0KIAogLy8gRmFzdC1wYXRoIGNob2ljZXMgaGVyZSBh
cmUgYmFzZWQgb24gZnJlcXVlbmN5IGRhdGEgZnJvbSBTdW5TcGlkZXI6CkBAIC0yMzcsMjEgKzIz
NywyMSBAQCBzdGF0aWMgTkVWRVJfSU5MSU5FIEpTVmFsdWUqIGpzQWRkU2xvd0NhCiAvLyAgICAx
Mzk2MiAgIEFkZCBjYXNlOiA1IDMKIC8vICAgIDQwMDAgICAgQWRkIGNhc2U6IDMgNQogCi1zdGF0
aWMgQUxXQVlTX0lOTElORSBKU1ZhbHVlKiBqc0FkZChFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUq
IHYxLCBKU1ZhbHVlKiB2MikKK3N0YXRpYyBBTFdBWVNfSU5MSU5FIEpTVmFsdWUqIGpzQWRkKENh
bGxGcmFtZSogY2FsbEZyYW1lLCBKU1ZhbHVlKiB2MSwgSlNWYWx1ZSogdjIpCiB7CiAgICAgZG91
YmxlIGxlZnQ7CiAgICAgZG91YmxlIHJpZ2h0ID0gMC4wOwogCiAgICAgYm9vbCByaWdodElzTnVt
YmVyID0gZmFzdElzTnVtYmVyKHYyLCByaWdodCk7CiAgICAgaWYgKHJpZ2h0SXNOdW1iZXIgJiYg
ZmFzdElzTnVtYmVyKHYxLCBsZWZ0KSkKLSAgICAgICAgcmV0dXJuIGpzTnVtYmVyKGV4ZWMsIGxl
ZnQgKyByaWdodCk7CisgICAgICAgIHJldHVybiBqc051bWJlcihjYWxsRnJhbWUsIGxlZnQgKyBy
aWdodCk7CiAgICAgCiAgICAgYm9vbCBsZWZ0SXNTdHJpbmcgPSB2MS0+aXNTdHJpbmcoKTsKICAg
ICBpZiAobGVmdElzU3RyaW5nICYmIHYyLT5pc1N0cmluZygpKSB7CiAgICAgICAgIFJlZlB0cjxV
U3RyaW5nOjpSZXA+IHZhbHVlID0gY29uY2F0ZW5hdGUoc3RhdGljX2Nhc3Q8SlNTdHJpbmcqPih2
MSktPnZhbHVlKCkucmVwKCksIHN0YXRpY19jYXN0PEpTU3RyaW5nKj4odjIpLT52YWx1ZSgpLnJl
cCgpKTsKICAgICAgICAgaWYgKCF2YWx1ZSkKLSAgICAgICAgICAgIHJldHVybiB0aHJvd091dE9m
TWVtb3J5RXJyb3IoZXhlYyk7Ci0gICAgICAgIHJldHVybiBqc1N0cmluZyhleGVjLCB2YWx1ZS5y
ZWxlYXNlKCkpOworICAgICAgICAgICAgcmV0dXJuIHRocm93T3V0T2ZNZW1vcnlFcnJvcihjYWxs
RnJhbWUpOworICAgICAgICByZXR1cm4ganNTdHJpbmcoY2FsbEZyYW1lLCB2YWx1ZS5yZWxlYXNl
KCkpOwogICAgIH0KIAogICAgIGlmIChyaWdodElzTnVtYmVyICYgbGVmdElzU3RyaW5nKSB7CkBA
IC0yNjAsMzQgKzI2MCwzNCBAQCBzdGF0aWMgQUxXQVlTX0lOTElORSBKU1ZhbHVlKiBqc0FkZChF
eGVjCiAgICAgICAgICAgICBjb25jYXRlbmF0ZShzdGF0aWNfY2FzdDxKU1N0cmluZyo+KHYxKS0+
dmFsdWUoKS5yZXAoKSwgcmlnaHQpOwogCiAgICAgICAgIGlmICghdmFsdWUpCi0gICAgICAgICAg
ICByZXR1cm4gdGhyb3dPdXRPZk1lbW9yeUVycm9yKGV4ZWMpOwotICAgICAgICByZXR1cm4ganNT
dHJpbmcoZXhlYywgdmFsdWUucmVsZWFzZSgpKTsKKyAgICAgICAgICAgIHJldHVybiB0aHJvd091
dE9mTWVtb3J5RXJyb3IoY2FsbEZyYW1lKTsKKyAgICAgICAgcmV0dXJuIGpzU3RyaW5nKGNhbGxG
cmFtZSwgdmFsdWUucmVsZWFzZSgpKTsKICAgICB9CiAKICAgICAvLyBBbGwgb3RoZXIgY2FzZXMg
YXJlIHByZXR0eSB1bmNvbW1vbgotICAgIHJldHVybiBqc0FkZFNsb3dDYXNlKGV4ZWMsIHYxLCB2
Mik7CisgICAgcmV0dXJuIGpzQWRkU2xvd0Nhc2UoY2FsbEZyYW1lLCB2MSwgdjIpOwogfQogCi1z
dGF0aWMgSlNWYWx1ZSoganNUeXBlU3RyaW5nRm9yVmFsdWUoRXhlY1N0YXRlKiBleGVjLCBKU1Zh
bHVlKiB2KQorc3RhdGljIEpTVmFsdWUqIGpzVHlwZVN0cmluZ0ZvclZhbHVlKENhbGxGcmFtZSog
Y2FsbEZyYW1lLCBKU1ZhbHVlKiB2KQogewogICAgIGlmICh2LT5pc1VuZGVmaW5lZCgpKQotICAg
ICAgICByZXR1cm4ganNOb250cml2aWFsU3RyaW5nKGV4ZWMsICJ1bmRlZmluZWQiKTsKKyAgICAg
ICAgcmV0dXJuIGpzTm9udHJpdmlhbFN0cmluZyhjYWxsRnJhbWUsICJ1bmRlZmluZWQiKTsKICAg
ICBpZiAodi0+aXNCb29sZWFuKCkpCi0gICAgICAgIHJldHVybiBqc05vbnRyaXZpYWxTdHJpbmco
ZXhlYywgImJvb2xlYW4iKTsKKyAgICAgICAgcmV0dXJuIGpzTm9udHJpdmlhbFN0cmluZyhjYWxs
RnJhbWUsICJib29sZWFuIik7CiAgICAgaWYgKHYtPmlzTnVtYmVyKCkpCi0gICAgICAgIHJldHVy
biBqc05vbnRyaXZpYWxTdHJpbmcoZXhlYywgIm51bWJlciIpOworICAgICAgICByZXR1cm4ganNO
b250cml2aWFsU3RyaW5nKGNhbGxGcmFtZSwgIm51bWJlciIpOwogICAgIGlmICh2LT5pc1N0cmlu
ZygpKQotICAgICAgICByZXR1cm4ganNOb250cml2aWFsU3RyaW5nKGV4ZWMsICJzdHJpbmciKTsK
KyAgICAgICAgcmV0dXJuIGpzTm9udHJpdmlhbFN0cmluZyhjYWxsRnJhbWUsICJzdHJpbmciKTsK
ICAgICBpZiAodi0+aXNPYmplY3QoKSkgewogICAgICAgICAvLyBSZXR1cm4gInVuZGVmaW5lZCIg
Zm9yIG9iamVjdHMgdGhhdCBzaG91bGQgYmUgdHJlYXRlZAogICAgICAgICAvLyBhcyBudWxsIHdo
ZW4gZG9pbmcgY29tcGFyaXNvbnMuCiAgICAgICAgIGlmIChzdGF0aWNfY2FzdDxKU09iamVjdCo+
KHYpLT5zdHJ1Y3R1cmVJRCgpLT50eXBlSW5mbygpLm1hc3F1ZXJhZGVzQXNVbmRlZmluZWQoKSkK
LSAgICAgICAgICAgIHJldHVybiBqc05vbnRyaXZpYWxTdHJpbmcoZXhlYywgInVuZGVmaW5lZCIp
OworICAgICAgICAgICAgcmV0dXJuIGpzTm9udHJpdmlhbFN0cmluZyhjYWxsRnJhbWUsICJ1bmRl
ZmluZWQiKTsKICAgICAgICAgQ2FsbERhdGEgY2FsbERhdGE7CiAgICAgICAgIGlmIChzdGF0aWNf
Y2FzdDxKU09iamVjdCo+KHYpLT5nZXRDYWxsRGF0YShjYWxsRGF0YSkgIT0gQ2FsbFR5cGVOb25l
KQotICAgICAgICAgICAgcmV0dXJuIGpzTm9udHJpdmlhbFN0cmluZyhleGVjLCAiZnVuY3Rpb24i
KTsKKyAgICAgICAgICAgIHJldHVybiBqc05vbnRyaXZpYWxTdHJpbmcoY2FsbEZyYW1lLCAiZnVu
Y3Rpb24iKTsKICAgICB9Ci0gICAgcmV0dXJuIGpzTm9udHJpdmlhbFN0cmluZyhleGVjLCAib2Jq
ZWN0Iik7CisgICAgcmV0dXJuIGpzTm9udHJpdmlhbFN0cmluZyhjYWxsRnJhbWUsICJvYmplY3Qi
KTsKIH0KIAogc3RhdGljIGJvb2wganNJc09iamVjdFR5cGUoSlNWYWx1ZSogdikKQEAgLTMxOCw0
MyArMzE4LDQzIEBAIHN0YXRpYyBib29sIGpzSXNGdW5jdGlvblR5cGUoSlNWYWx1ZSogdikKICAg
ICByZXR1cm4gZmFsc2U7CiB9CiAKLU5FVkVSX0lOTElORSBib29sIE1hY2hpbmU6OnJlc29sdmUo
RXhlY1N0YXRlKiBleGVjLCBJbnN0cnVjdGlvbiogdlBDLCBSZWdpc3RlciogciwgSlNWYWx1ZSom
IGV4Y2VwdGlvblZhbHVlKQorTkVWRVJfSU5MSU5FIGJvb2wgTWFjaGluZTo6cmVzb2x2ZShDYWxs
RnJhbWUqIGNhbGxGcmFtZSwgSW5zdHJ1Y3Rpb24qIHZQQywgSlNWYWx1ZSomIGV4Y2VwdGlvblZh
bHVlKQogewogICAgIGludCBkc3QgPSAodlBDICsgMSktPnUub3BlcmFuZDsKICAgICBpbnQgcHJv
cGVydHkgPSAodlBDICsgMiktPnUub3BlcmFuZDsKIAotICAgIFNjb3BlQ2hhaW5Ob2RlKiBzY29w
ZUNoYWluID0gdGhpcy0+c2NvcGVDaGFpbihyKTsKKyAgICBTY29wZUNoYWluTm9kZSogc2NvcGVD
aGFpbiA9IGNhbGxGcmFtZS0+c2NvcGVDaGFpbigpOwogICAgIFNjb3BlQ2hhaW5JdGVyYXRvciBp
dGVyID0gc2NvcGVDaGFpbi0+YmVnaW4oKTsKICAgICBTY29wZUNoYWluSXRlcmF0b3IgZW5kID0g
c2NvcGVDaGFpbi0+ZW5kKCk7CiAgICAgQVNTRVJUKGl0ZXIgIT0gZW5kKTsKIAotICAgIENvZGVC
bG9jayogY29kZUJsb2NrID0gdGhpcy0+Y29kZUJsb2NrKHIpOworICAgIENvZGVCbG9jayogY29k
ZUJsb2NrID0gY2FsbEZyYW1lLT5jb2RlQmxvY2soKTsKICAgICBJZGVudGlmaWVyJiBpZGVudCA9
IGNvZGVCbG9jay0+aWRlbnRpZmllcnNbcHJvcGVydHldOwogICAgIGRvIHsKICAgICAgICAgSlNP
YmplY3QqIG8gPSAqaXRlcjsKICAgICAgICAgUHJvcGVydHlTbG90IHNsb3Qobyk7Ci0gICAgICAg
IGlmIChvLT5nZXRQcm9wZXJ0eVNsb3QoZXhlYywgaWRlbnQsIHNsb3QpKSB7Ci0gICAgICAgICAg
ICBKU1ZhbHVlKiByZXN1bHQgPSBzbG90LmdldFZhbHVlKGV4ZWMsIGlkZW50KTsKLSAgICAgICAg
ICAgIGV4Y2VwdGlvblZhbHVlID0gZXhlYy0+ZXhjZXB0aW9uKCk7CisgICAgICAgIGlmIChvLT5n
ZXRQcm9wZXJ0eVNsb3QoY2FsbEZyYW1lLCBpZGVudCwgc2xvdCkpIHsKKyAgICAgICAgICAgIEpT
VmFsdWUqIHJlc3VsdCA9IHNsb3QuZ2V0VmFsdWUoY2FsbEZyYW1lLCBpZGVudCk7CisgICAgICAg
ICAgICBleGNlcHRpb25WYWx1ZSA9IGNhbGxGcmFtZS0+Z2xvYmFsRGF0YSgpLmV4Y2VwdGlvbjsK
ICAgICAgICAgICAgIGlmIChleGNlcHRpb25WYWx1ZSkKICAgICAgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgICAgICAgICByW2RzdF0gPSByZXN1bHQ7CisgICAgICAgICAgICBjYWxsRnJh
bWVbZHN0XSA9IHJlc3VsdDsKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9CiAg
ICAgfSB3aGlsZSAoKytpdGVyICE9IGVuZCk7Ci0gICAgZXhjZXB0aW9uVmFsdWUgPSBjcmVhdGVV
bmRlZmluZWRWYXJpYWJsZUVycm9yKGV4ZWMsIGlkZW50LCB2UEMsIGNvZGVCbG9jayk7CisgICAg
ZXhjZXB0aW9uVmFsdWUgPSBjcmVhdGVVbmRlZmluZWRWYXJpYWJsZUVycm9yKGNhbGxGcmFtZSwg
aWRlbnQsIHZQQywgY29kZUJsb2NrKTsKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLU5FVkVSX0lO
TElORSBib29sIE1hY2hpbmU6OnJlc29sdmVTa2lwKEV4ZWNTdGF0ZSogZXhlYywgSW5zdHJ1Y3Rp
b24qIHZQQywgUmVnaXN0ZXIqIHIsIEpTVmFsdWUqJiBleGNlcHRpb25WYWx1ZSkKK05FVkVSX0lO
TElORSBib29sIE1hY2hpbmU6OnJlc29sdmVTa2lwKENhbGxGcmFtZSogY2FsbEZyYW1lLCBJbnN0
cnVjdGlvbiogdlBDLCBKU1ZhbHVlKiYgZXhjZXB0aW9uVmFsdWUpCiB7Ci0gICAgQ29kZUJsb2Nr
KiBjb2RlQmxvY2sgPSB0aGlzLT5jb2RlQmxvY2socik7CisgICAgQ29kZUJsb2NrKiBjb2RlQmxv
Y2sgPSBjYWxsRnJhbWUtPmNvZGVCbG9jaygpOwogCiAgICAgaW50IGRzdCA9ICh2UEMgKyAxKS0+
dS5vcGVyYW5kOwogICAgIGludCBwcm9wZXJ0eSA9ICh2UEMgKyAyKS0+dS5vcGVyYW5kOwogICAg
IGludCBza2lwID0gKHZQQyArIDMpLT51Lm9wZXJhbmQgKyBjb2RlQmxvY2stPm5lZWRzRnVsbFNj
b3BlQ2hhaW47CiAKLSAgICBTY29wZUNoYWluTm9kZSogc2NvcGVDaGFpbiA9IHRoaXMtPnNjb3Bl
Q2hhaW4ocik7CisgICAgU2NvcGVDaGFpbk5vZGUqIHNjb3BlQ2hhaW4gPSBjYWxsRnJhbWUtPnNj
b3BlQ2hhaW4oKTsKICAgICBTY29wZUNoYWluSXRlcmF0b3IgaXRlciA9IHNjb3BlQ2hhaW4tPmJl
Z2luKCk7CiAgICAgU2NvcGVDaGFpbkl0ZXJhdG9yIGVuZCA9IHNjb3BlQ2hhaW4tPmVuZCgpOwog
ICAgIEFTU0VSVChpdGVyICE9IGVuZCk7CkBAIC0zNjYsMjAgKzM2NiwyMCBAQCBORVZFUl9JTkxJ
TkUgYm9vbCBNYWNoaW5lOjpyZXNvbHZlU2tpcChFCiAgICAgZG8gewogICAgICAgICBKU09iamVj
dCogbyA9ICppdGVyOwogICAgICAgICBQcm9wZXJ0eVNsb3Qgc2xvdChvKTsKLSAgICAgICAgaWYg
KG8tPmdldFByb3BlcnR5U2xvdChleGVjLCBpZGVudCwgc2xvdCkpIHsKLSAgICAgICAgICAgIEpT
VmFsdWUqIHJlc3VsdCA9IHNsb3QuZ2V0VmFsdWUoZXhlYywgaWRlbnQpOwotICAgICAgICAgICAg
ZXhjZXB0aW9uVmFsdWUgPSBleGVjLT5leGNlcHRpb24oKTsKKyAgICAgICAgaWYgKG8tPmdldFBy
b3BlcnR5U2xvdChjYWxsRnJhbWUsIGlkZW50LCBzbG90KSkgeworICAgICAgICAgICAgSlNWYWx1
ZSogcmVzdWx0ID0gc2xvdC5nZXRWYWx1ZShjYWxsRnJhbWUsIGlkZW50KTsKKyAgICAgICAgICAg
IGV4Y2VwdGlvblZhbHVlID0gY2FsbEZyYW1lLT5nbG9iYWxEYXRhKCkuZXhjZXB0aW9uOwogICAg
ICAgICAgICAgaWYgKGV4Y2VwdGlvblZhbHVlKQogICAgICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICAgICAgICAgIHJbZHN0XSA9IHJlc3VsdDsKKyAgICAgICAgICAgIGNhbGxGcmFtZVtk
c3RdID0gcmVzdWx0OwogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0KICAgICB9
IHdoaWxlICgrK2l0ZXIgIT0gZW5kKTsKLSAgICBleGNlcHRpb25WYWx1ZSA9IGNyZWF0ZVVuZGVm
aW5lZFZhcmlhYmxlRXJyb3IoZXhlYywgaWRlbnQsIHZQQywgY29kZUJsb2NrKTsKKyAgICBleGNl
cHRpb25WYWx1ZSA9IGNyZWF0ZVVuZGVmaW5lZFZhcmlhYmxlRXJyb3IoY2FsbEZyYW1lLCBpZGVu
dCwgdlBDLCBjb2RlQmxvY2spOwogICAgIHJldHVybiBmYWxzZTsKIH0KIAotTkVWRVJfSU5MSU5F
IGJvb2wgTWFjaGluZTo6cmVzb2x2ZUdsb2JhbChFeGVjU3RhdGUqIGV4ZWMsIEluc3RydWN0aW9u
KiB2UEMsIFJlZ2lzdGVyKiByLCBKU1ZhbHVlKiYgZXhjZXB0aW9uVmFsdWUpCitORVZFUl9JTkxJ
TkUgYm9vbCBNYWNoaW5lOjpyZXNvbHZlR2xvYmFsKENhbGxGcmFtZSogY2FsbEZyYW1lLCBJbnN0
cnVjdGlvbiogdlBDLCBKU1ZhbHVlKiYgZXhjZXB0aW9uVmFsdWUpCiB7CiAgICAgaW50IGRzdCA9
ICh2UEMgKyAxKS0+dS5vcGVyYW5kOwogICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qg
PSBzdGF0aWNfY2FzdDxKU0dsb2JhbE9iamVjdCo+KCh2UEMgKyAyKS0+dS5qc0NlbGwpOwpAQCAt
Mzg5LDM3ICszODksMzcgQEAgTkVWRVJfSU5MSU5FIGJvb2wgTWFjaGluZTo6cmVzb2x2ZUdsb2Jh
bAogICAgIGludCBvZmZzZXQgPSAodlBDICsgNSktPnUub3BlcmFuZDsKIAogICAgIGlmIChzdHJ1
Y3R1cmVJRCA9PSBnbG9iYWxPYmplY3QtPnN0cnVjdHVyZUlEKCkpIHsKLSAgICAgICAgcltkc3Rd
ID0gZ2xvYmFsT2JqZWN0LT5nZXREaXJlY3RPZmZzZXQob2Zmc2V0KTsKKyAgICAgICAgY2FsbEZy
YW1lW2RzdF0gPSBnbG9iYWxPYmplY3QtPmdldERpcmVjdE9mZnNldChvZmZzZXQpOwogICAgICAg
ICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKLSAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IHRoaXMt
PmNvZGVCbG9jayhyKTsKKyAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IGNhbGxGcmFtZS0+Y29k
ZUJsb2NrKCk7CiAgICAgSWRlbnRpZmllciYgaWRlbnQgPSBjb2RlQmxvY2stPmlkZW50aWZpZXJz
W3Byb3BlcnR5XTsKICAgICBQcm9wZXJ0eVNsb3Qgc2xvdChnbG9iYWxPYmplY3QpOwotICAgIGlm
IChnbG9iYWxPYmplY3QtPmdldFByb3BlcnR5U2xvdChleGVjLCBpZGVudCwgc2xvdCkpIHsKLSAg
ICAgICAgSlNWYWx1ZSogcmVzdWx0ID0gc2xvdC5nZXRWYWx1ZShleGVjLCBpZGVudCk7CisgICAg
aWYgKGdsb2JhbE9iamVjdC0+Z2V0UHJvcGVydHlTbG90KGNhbGxGcmFtZSwgaWRlbnQsIHNsb3Qp
KSB7CisgICAgICAgIEpTVmFsdWUqIHJlc3VsdCA9IHNsb3QuZ2V0VmFsdWUoY2FsbEZyYW1lLCBp
ZGVudCk7CiAgICAgICAgIGlmIChzbG90LmlzQ2FjaGVhYmxlKCkpIHsKICAgICAgICAgICAgIGlm
ICh2UENbNF0udS5zdHJ1Y3R1cmVJRCkKICAgICAgICAgICAgICAgICB2UENbNF0udS5zdHJ1Y3R1
cmVJRC0+ZGVyZWYoKTsKICAgICAgICAgICAgIGdsb2JhbE9iamVjdC0+c3RydWN0dXJlSUQoKS0+
cmVmKCk7CiAgICAgICAgICAgICB2UENbNF0gPSBnbG9iYWxPYmplY3QtPnN0cnVjdHVyZUlEKCk7
CiAgICAgICAgICAgICB2UENbNV0gPSBzbG90LmNhY2hlZE9mZnNldCgpOwotICAgICAgICAgICAg
cltkc3RdID0gcmVzdWx0OworICAgICAgICAgICAgY2FsbEZyYW1lW2RzdF0gPSByZXN1bHQ7CiAg
ICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfQogCi0gICAgICAgIGV4Y2VwdGlvblZh
bHVlID0gZXhlYy0+ZXhjZXB0aW9uKCk7CisgICAgICAgIGV4Y2VwdGlvblZhbHVlID0gY2FsbEZy
YW1lLT5nbG9iYWxEYXRhKCkuZXhjZXB0aW9uOwogICAgICAgICBpZiAoZXhjZXB0aW9uVmFsdWUp
CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIHJbZHN0XSA9IHJlc3VsdDsKKyAg
ICAgICAgY2FsbEZyYW1lW2RzdF0gPSByZXN1bHQ7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAg
IH0KIAotICAgIGV4Y2VwdGlvblZhbHVlID0gY3JlYXRlVW5kZWZpbmVkVmFyaWFibGVFcnJvcihl
eGVjLCBpZGVudCwgdlBDLCBjb2RlQmxvY2spOworICAgIGV4Y2VwdGlvblZhbHVlID0gY3JlYXRl
VW5kZWZpbmVkVmFyaWFibGVFcnJvcihjYWxsRnJhbWUsIGlkZW50LCB2UEMsIGNvZGVCbG9jayk7
CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1BTFdBWVNfSU5MSU5FIHN0YXRpYyBKU1ZhbHVlKiBp
bmxpbmVSZXNvbHZlQmFzZShFeGVjU3RhdGUqIGV4ZWMsIElkZW50aWZpZXImIHByb3BlcnR5LCBT
Y29wZUNoYWluTm9kZSogc2NvcGVDaGFpbikKK0FMV0FZU19JTkxJTkUgc3RhdGljIEpTVmFsdWUq
IGlubGluZVJlc29sdmVCYXNlKENhbGxGcmFtZSogY2FsbEZyYW1lLCBJZGVudGlmaWVyJiBwcm9w
ZXJ0eSwgU2NvcGVDaGFpbk5vZGUqIHNjb3BlQ2hhaW4pCiB7CiAgICAgU2NvcGVDaGFpbkl0ZXJh
dG9yIGl0ZXIgPSBzY29wZUNoYWluLT5iZWdpbigpOwogICAgIFNjb3BlQ2hhaW5JdGVyYXRvciBu
ZXh0ID0gaXRlcjsKQEAgLTQzMSw3ICs0MzEsNyBAQCBBTFdBWVNfSU5MSU5FIHN0YXRpYyBKU1Zh
bHVlKiBpbmxpbmVSZXNvCiAgICAgSlNPYmplY3QqIGJhc2U7CiAgICAgd2hpbGUgKHRydWUpIHsK
ICAgICAgICAgYmFzZSA9ICppdGVyOwotICAgICAgICBpZiAobmV4dCA9PSBlbmQgfHwgYmFzZS0+
Z2V0UHJvcGVydHlTbG90KGV4ZWMsIHByb3BlcnR5LCBzbG90KSkKKyAgICAgICAgaWYgKG5leHQg
PT0gZW5kIHx8IGJhc2UtPmdldFByb3BlcnR5U2xvdChjYWxsRnJhbWUsIHByb3BlcnR5LCBzbG90
KSkKICAgICAgICAgICAgIHJldHVybiBiYXNlOwogCiAgICAgICAgIGl0ZXIgPSBuZXh0OwpAQCAt
NDQyLDIyICs0NDIsMjAgQEAgQUxXQVlTX0lOTElORSBzdGF0aWMgSlNWYWx1ZSogaW5saW5lUmVz
bwogICAgIHJldHVybiAwOwogfQogCi1ORVZFUl9JTkxJTkUgdm9pZCBNYWNoaW5lOjpyZXNvbHZl
QmFzZShFeGVjU3RhdGUqIGV4ZWMsIEluc3RydWN0aW9uKiB2UEMsIFJlZ2lzdGVyKiByKQorTkVW
RVJfSU5MSU5FIHZvaWQgTWFjaGluZTo6cmVzb2x2ZUJhc2UoQ2FsbEZyYW1lKiBjYWxsRnJhbWUs
IEluc3RydWN0aW9uKiB2UEMpCiB7CiAgICAgaW50IGRzdCA9ICh2UEMgKyAxKS0+dS5vcGVyYW5k
OwogICAgIGludCBwcm9wZXJ0eSA9ICh2UEMgKyAyKS0+dS5vcGVyYW5kOwotICAgIENvZGVCbG9j
ayogY29kZUJsb2NrID0gdGhpcy0+Y29kZUJsb2NrKHIpOwotICAgIFNjb3BlQ2hhaW5Ob2RlKiBz
Y29wZUNoYWluID0gdGhpcy0+c2NvcGVDaGFpbihyKTsKLSAgICByW2RzdF0gPSBpbmxpbmVSZXNv
bHZlQmFzZShleGVjLCBjb2RlQmxvY2stPmlkZW50aWZpZXJzW3Byb3BlcnR5XSwgc2NvcGVDaGFp
bik7CisgICAgY2FsbEZyYW1lW2RzdF0gPSBpbmxpbmVSZXNvbHZlQmFzZShjYWxsRnJhbWUsIGNh
bGxGcmFtZS0+Y29kZUJsb2NrKCktPmlkZW50aWZpZXJzW3Byb3BlcnR5XSwgY2FsbEZyYW1lLT5z
Y29wZUNoYWluKCkpOwogfQogCi1ORVZFUl9JTkxJTkUgYm9vbCBNYWNoaW5lOjpyZXNvbHZlQmFz
ZUFuZFByb3BlcnR5KEV4ZWNTdGF0ZSogZXhlYywgSW5zdHJ1Y3Rpb24qIHZQQywgUmVnaXN0ZXIq
IHIsIEpTVmFsdWUqJiBleGNlcHRpb25WYWx1ZSkKK05FVkVSX0lOTElORSBib29sIE1hY2hpbmU6
OnJlc29sdmVCYXNlQW5kUHJvcGVydHkoQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIEluc3RydWN0aW9u
KiB2UEMsIEpTVmFsdWUqJiBleGNlcHRpb25WYWx1ZSkKIHsKICAgICBpbnQgYmFzZURzdCA9ICh2
UEMgKyAxKS0+dS5vcGVyYW5kOwogICAgIGludCBwcm9wRHN0ID0gKHZQQyArIDIpLT51Lm9wZXJh
bmQ7CiAgICAgaW50IHByb3BlcnR5ID0gKHZQQyArIDMpLT51Lm9wZXJhbmQ7CiAKLSAgICBTY29w
ZUNoYWluTm9kZSogc2NvcGVDaGFpbiA9IHRoaXMtPnNjb3BlQ2hhaW4ocik7CisgICAgU2NvcGVD
aGFpbk5vZGUqIHNjb3BlQ2hhaW4gPSBjYWxsRnJhbWUtPnNjb3BlQ2hhaW4oKTsKICAgICBTY29w
ZUNoYWluSXRlcmF0b3IgaXRlciA9IHNjb3BlQ2hhaW4tPmJlZ2luKCk7CiAgICAgU2NvcGVDaGFp
bkl0ZXJhdG9yIGVuZCA9IHNjb3BlQ2hhaW4tPmVuZCgpOwogCkBAIC00NjUsMzUgKzQ2MywzNSBA
QCBORVZFUl9JTkxJTkUgYm9vbCBNYWNoaW5lOjpyZXNvbHZlQmFzZUFuCiAKICAgICBBU1NFUlQo
aXRlciAhPSBlbmQpOwogCi0gICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSB0aGlzLT5jb2RlQmxv
Y2socik7CisgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBjYWxsRnJhbWUtPmNvZGVCbG9jaygp
OwogICAgIElkZW50aWZpZXImIGlkZW50ID0gY29kZUJsb2NrLT5pZGVudGlmaWVyc1twcm9wZXJ0
eV07CiAgICAgSlNPYmplY3QqIGJhc2U7CiAgICAgZG8gewogICAgICAgICBiYXNlID0gKml0ZXI7
CiAgICAgICAgIFByb3BlcnR5U2xvdCBzbG90KGJhc2UpOwotICAgICAgICBpZiAoYmFzZS0+Z2V0
UHJvcGVydHlTbG90KGV4ZWMsIGlkZW50LCBzbG90KSkgewotICAgICAgICAgICAgSlNWYWx1ZSog
cmVzdWx0ID0gc2xvdC5nZXRWYWx1ZShleGVjLCBpZGVudCk7Ci0gICAgICAgICAgICBleGNlcHRp
b25WYWx1ZSA9IGV4ZWMtPmV4Y2VwdGlvbigpOworICAgICAgICBpZiAoYmFzZS0+Z2V0UHJvcGVy
dHlTbG90KGNhbGxGcmFtZSwgaWRlbnQsIHNsb3QpKSB7CisgICAgICAgICAgICBKU1ZhbHVlKiBy
ZXN1bHQgPSBzbG90LmdldFZhbHVlKGNhbGxGcmFtZSwgaWRlbnQpOworICAgICAgICAgICAgZXhj
ZXB0aW9uVmFsdWUgPSBjYWxsRnJhbWUtPmdsb2JhbERhdGEoKS5leGNlcHRpb247CiAgICAgICAg
ICAgICBpZiAoZXhjZXB0aW9uVmFsdWUpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgICAgICAgICAgcltwcm9wRHN0XSA9IHJlc3VsdDsKLSAgICAgICAgICAgIHJbYmFzZURzdF0g
PSBiYXNlOworICAgICAgICAgICAgY2FsbEZyYW1lW3Byb3BEc3RdID0gcmVzdWx0OworICAgICAg
ICAgICAgY2FsbEZyYW1lW2Jhc2VEc3RdID0gYmFzZTsKICAgICAgICAgICAgIHJldHVybiB0cnVl
OwogICAgICAgICB9CiAgICAgICAgICsraXRlcjsKICAgICB9IHdoaWxlIChpdGVyICE9IGVuZCk7
CiAKLSAgICBleGNlcHRpb25WYWx1ZSA9IGNyZWF0ZVVuZGVmaW5lZFZhcmlhYmxlRXJyb3IoZXhl
YywgaWRlbnQsIHZQQywgY29kZUJsb2NrKTsKKyAgICBleGNlcHRpb25WYWx1ZSA9IGNyZWF0ZVVu
ZGVmaW5lZFZhcmlhYmxlRXJyb3IoY2FsbEZyYW1lLCBpZGVudCwgdlBDLCBjb2RlQmxvY2spOwog
ICAgIHJldHVybiBmYWxzZTsKIH0KIAotTkVWRVJfSU5MSU5FIGJvb2wgTWFjaGluZTo6cmVzb2x2
ZUJhc2VBbmRGdW5jKEV4ZWNTdGF0ZSogZXhlYywgSW5zdHJ1Y3Rpb24qIHZQQywgUmVnaXN0ZXIq
IHIsIEpTVmFsdWUqJiBleGNlcHRpb25WYWx1ZSkKK05FVkVSX0lOTElORSBib29sIE1hY2hpbmU6
OnJlc29sdmVCYXNlQW5kRnVuYyhDYWxsRnJhbWUqIGNhbGxGcmFtZSwgSW5zdHJ1Y3Rpb24qIHZQ
QywgSlNWYWx1ZSomIGV4Y2VwdGlvblZhbHVlKQogewogICAgIGludCBiYXNlRHN0ID0gKHZQQyAr
IDEpLT51Lm9wZXJhbmQ7CiAgICAgaW50IGZ1bmNEc3QgPSAodlBDICsgMiktPnUub3BlcmFuZDsK
ICAgICBpbnQgcHJvcGVydHkgPSAodlBDICsgMyktPnUub3BlcmFuZDsKIAotICAgIFNjb3BlQ2hh
aW5Ob2RlKiBzY29wZUNoYWluID0gdGhpcy0+c2NvcGVDaGFpbihyKTsKKyAgICBTY29wZUNoYWlu
Tm9kZSogc2NvcGVDaGFpbiA9IGNhbGxGcmFtZS0+c2NvcGVDaGFpbigpOwogICAgIFNjb3BlQ2hh
aW5JdGVyYXRvciBpdGVyID0gc2NvcGVDaGFpbi0+YmVnaW4oKTsKICAgICBTY29wZUNoYWluSXRl
cmF0b3IgZW5kID0gc2NvcGVDaGFpbi0+ZW5kKCk7CiAKQEAgLTUwMSwxMyArNDk5LDEzIEBAIE5F
VkVSX0lOTElORSBib29sIE1hY2hpbmU6OnJlc29sdmVCYXNlQW4KIAogICAgIEFTU0VSVChpdGVy
ICE9IGVuZCk7CiAKLSAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IHRoaXMtPmNvZGVCbG9jayhy
KTsKKyAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IGNhbGxGcmFtZS0+Y29kZUJsb2NrKCk7CiAg
ICAgSWRlbnRpZmllciYgaWRlbnQgPSBjb2RlQmxvY2stPmlkZW50aWZpZXJzW3Byb3BlcnR5XTsK
ICAgICBKU09iamVjdCogYmFzZTsKICAgICBkbyB7CiAgICAgICAgIGJhc2UgPSAqaXRlcjsKICAg
ICAgICAgUHJvcGVydHlTbG90IHNsb3QoYmFzZSk7Ci0gICAgICAgIGlmIChiYXNlLT5nZXRQcm9w
ZXJ0eVNsb3QoZXhlYywgaWRlbnQsIHNsb3QpKSB7ICAgICAgICAgICAgCisgICAgICAgIGlmIChi
YXNlLT5nZXRQcm9wZXJ0eVNsb3QoY2FsbEZyYW1lLCBpZGVudCwgc2xvdCkpIHsgICAgICAgICAg
ICAKICAgICAgICAgICAgIC8vIEVDTUEgMTEuMi4zIHNheXMgdGhhdCBpZiB3ZSBoaXQgYW4gYWN0
aXZhdGlvbiB0aGUgdGhpcyB2YWx1ZSBzaG91bGQgYmUgbnVsbC4KICAgICAgICAgICAgIC8vIEhv
d2V2ZXIsIHNlY3Rpb24gMTAuMi4zIHNheXMgdGhhdCBpbiB0aGUgY2FzZSB3aGVyZSB0aGUgdmFs
dWUgcHJvdmlkZWQKICAgICAgICAgICAgIC8vIGJ5IHRoZSBjYWxsZXIgaXMgbnVsbCwgdGhlIGds
b2JhbCBvYmplY3Qgc2hvdWxkIGJlIHVzZWQuIEl0IGFsc28gc2F5cwpAQCAtNTE1LDI1ICs1MTMs
MjYgQEAgTkVWRVJfSU5MSU5FIGJvb2wgTWFjaGluZTo6cmVzb2x2ZUJhc2VBbgogICAgICAgICAg
ICAgLy8gb2YgaW1wbGVtZW50YXRpb24gd2UgdXNlIHRoZSBnbG9iYWwgb2JqZWN0IGFueXdheSBo
ZXJlLiBUaGlzIGd1YXJhbnRlZXMKICAgICAgICAgICAgIC8vIHRoYXQgaW4gaG9zdCBvYmplY3Rz
IHlvdSBhbHdheXMgZ2V0IGEgdmFsaWQgb2JqZWN0IGZvciB0aGlzLgogICAgICAgICAgICAgLy8g
V2UgYWxzbyBoYW5kbGUgd3JhcHBlciBzdWJzdGl0dXRpb24gZm9yIHRoZSBnbG9iYWwgb2JqZWN0
IGF0IHRoZSBzYW1lIHRpbWUuCi0gICAgICAgICAgICBKU09iamVjdCogdGhpc09iaiA9IGJhc2Ut
PnRvVGhpc09iamVjdChleGVjKTsKLSAgICAgICAgICAgIEpTVmFsdWUqIHJlc3VsdCA9IHNsb3Qu
Z2V0VmFsdWUoZXhlYywgaWRlbnQpOwotICAgICAgICAgICAgZXhjZXB0aW9uVmFsdWUgPSBleGVj
LT5leGNlcHRpb24oKTsKKyAgICAgICAgICAgIEpTT2JqZWN0KiB0aGlzT2JqID0gYmFzZS0+dG9U
aGlzT2JqZWN0KGNhbGxGcmFtZSk7CisgICAgICAgICAgICBKU1ZhbHVlKiByZXN1bHQgPSBzbG90
LmdldFZhbHVlKGNhbGxGcmFtZSwgaWRlbnQpOworICAgICAgICAgICAgZXhjZXB0aW9uVmFsdWUg
PSBjYWxsRnJhbWUtPmdsb2JhbERhdGEoKS5leGNlcHRpb247CiAgICAgICAgICAgICBpZiAoZXhj
ZXB0aW9uVmFsdWUpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgICAgICAg
ICByW2Jhc2VEc3RdID0gdGhpc09iajsKLSAgICAgICAgICAgIHJbZnVuY0RzdF0gPSByZXN1bHQ7
CisgICAgICAgICAgICBjYWxsRnJhbWVbYmFzZURzdF0gPSB0aGlzT2JqOworICAgICAgICAgICAg
Y2FsbEZyYW1lW2Z1bmNEc3RdID0gcmVzdWx0OwogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAg
ICAgICAgIH0KICAgICAgICAgKytpdGVyOwogICAgIH0gd2hpbGUgKGl0ZXIgIT0gZW5kKTsKIAot
ICAgIGV4Y2VwdGlvblZhbHVlID0gY3JlYXRlVW5kZWZpbmVkVmFyaWFibGVFcnJvcihleGVjLCBp
ZGVudCwgdlBDLCBjb2RlQmxvY2spOworICAgIGV4Y2VwdGlvblZhbHVlID0gY3JlYXRlVW5kZWZp
bmVkVmFyaWFibGVFcnJvcihjYWxsRnJhbWUsIGlkZW50LCB2UEMsIGNvZGVCbG9jayk7CiAgICAg
cmV0dXJuIGZhbHNlOwogfQogCi1BTFdBWVNfSU5MSU5FIFJlZ2lzdGVyKiBzbGlkZVJlZ2lzdGVy
V2luZG93Rm9yQ2FsbChDb2RlQmxvY2sqIG5ld0NvZGVCbG9jaywgUmVnaXN0ZXJGaWxlKiByZWdp
c3RlckZpbGUsIFJlZ2lzdGVyKiByLCBzaXplX3QgcmVnaXN0ZXJPZmZzZXQsIGludCBhcmdjKQor
QUxXQVlTX0lOTElORSBDYWxsRnJhbWUqIE1hY2hpbmU6OnNsaWRlUmVnaXN0ZXJXaW5kb3dGb3JD
YWxsKENvZGVCbG9jayogbmV3Q29kZUJsb2NrLCBSZWdpc3RlckZpbGUqIHJlZ2lzdGVyRmlsZSwg
Q2FsbEZyYW1lKiBjYWxsRnJhbWUsIHNpemVfdCByZWdpc3Rlck9mZnNldCwgaW50IGFyZ2MpCiB7
CisgICAgUmVnaXN0ZXIqIHIgPSBjYWxsRnJhbWUtPnJlZ2lzdGVycygpOwogICAgIFJlZ2lzdGVy
KiBuZXdFbmQgPSByICsgcmVnaXN0ZXJPZmZzZXQgKyBuZXdDb2RlQmxvY2stPm51bUNhbGxlZVJl
Z2lzdGVyczsKIAogICAgIGlmIChMSUtFTFkoYXJnYyA9PSBuZXdDb2RlQmxvY2stPm51bVBhcmFt
ZXRlcnMpKSB7IC8vIGNvcnJlY3QgbnVtYmVyIG9mIGFyZ3VtZW50cwpAQCAtNTY1LDQyICs1NjQs
NDIgQEAgQUxXQVlTX0lOTElORSBSZWdpc3Rlciogc2xpZGVSZWdpc3RlcldpbgogICAgICAgICAg
ICAgYXJndltpICsgYXJnY10gPSBhcmd2W2ldOwogICAgIH0KIAotICAgIHJldHVybiByOworICAg
IHJldHVybiBjYWxsRnJhbWU7CiB9CiAKLXN0YXRpYyBORVZFUl9JTkxJTkUgYm9vbCBpc05vdE9i
amVjdChFeGVjU3RhdGUqIGV4ZWMsIGJvb2wgZm9ySW5zdGFuY2VPZiwgQ29kZUJsb2NrKiBjb2Rl
QmxvY2ssIGNvbnN0IEluc3RydWN0aW9uKiB2UEMsIEpTVmFsdWUqIHZhbHVlLCBKU1ZhbHVlKiYg
ZXhjZXB0aW9uRGF0YSkKK3N0YXRpYyBORVZFUl9JTkxJTkUgYm9vbCBpc05vdE9iamVjdChDYWxs
RnJhbWUqIGNhbGxGcmFtZSwgYm9vbCBmb3JJbnN0YW5jZU9mLCBDb2RlQmxvY2sqIGNvZGVCbG9j
aywgY29uc3QgSW5zdHJ1Y3Rpb24qIHZQQywgSlNWYWx1ZSogdmFsdWUsIEpTVmFsdWUqJiBleGNl
cHRpb25EYXRhKQogewogICAgIGlmICh2YWx1ZS0+aXNPYmplY3QoKSkKICAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgIGV4Y2VwdGlvbkRhdGEgPSBjcmVhdGVJbnZhbGlkUGFyYW1FcnJvcihleGVj
LCBmb3JJbnN0YW5jZU9mID8gImluc3RhbmNlb2YiIDogImluIiAsIHZhbHVlLCB2UEMsIGNvZGVC
bG9jayk7CisgICAgZXhjZXB0aW9uRGF0YSA9IGNyZWF0ZUludmFsaWRQYXJhbUVycm9yKGNhbGxG
cmFtZSwgZm9ySW5zdGFuY2VPZiA/ICJpbnN0YW5jZW9mIiA6ICJpbiIgLCB2YWx1ZSwgdlBDLCBj
b2RlQmxvY2spOwogICAgIHJldHVybiB0cnVlOwogfQogCi1ORVZFUl9JTkxJTkUgSlNWYWx1ZSog
TWFjaGluZTo6Y2FsbEV2YWwoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogdGhpc09iaiwgU2Nv
cGVDaGFpbk5vZGUqIHNjb3BlQ2hhaW4sIFJlZ2lzdGVyRmlsZSogcmVnaXN0ZXJGaWxlLCBSZWdp
c3RlciogciwgaW50IGFyZ3YsIGludCBhcmdjLCBKU1ZhbHVlKiYgZXhjZXB0aW9uVmFsdWUpCitO
RVZFUl9JTkxJTkUgSlNWYWx1ZSogTWFjaGluZTo6Y2FsbEV2YWwoQ2FsbEZyYW1lKiBjYWxsRnJh
bWUsIEpTT2JqZWN0KiB0aGlzT2JqLCBTY29wZUNoYWluTm9kZSogc2NvcGVDaGFpbiwgUmVnaXN0
ZXJGaWxlKiByZWdpc3RlckZpbGUsIGludCBhcmd2LCBpbnQgYXJnYywgSlNWYWx1ZSomIGV4Y2Vw
dGlvblZhbHVlKQogewogICAgIGlmIChhcmdjIDwgMikKICAgICAgICAgcmV0dXJuIGpzVW5kZWZp
bmVkKCk7CiAKLSAgICBKU1ZhbHVlKiBwcm9ncmFtID0gclthcmd2ICsgMV0uanNWYWx1ZShleGVj
KTsKKyAgICBKU1ZhbHVlKiBwcm9ncmFtID0gY2FsbEZyYW1lW2FyZ3YgKyAxXS5qc1ZhbHVlKGNh
bGxGcmFtZSk7CiAKICAgICBpZiAoIXByb2dyYW0tPmlzU3RyaW5nKCkpCiAgICAgICAgIHJldHVy
biBwcm9ncmFtOwogCiAgICAgUHJvZmlsZXIqKiBwcm9maWxlciA9IFByb2ZpbGVyOjplbmFibGVk
UHJvZmlsZXJSZWZlcmVuY2UoKTsKICAgICBpZiAoKnByb2ZpbGVyKQotICAgICAgICAoKnByb2Zp
bGVyKS0+d2lsbEV4ZWN1dGUoZXhlYywgc2NvcGVDaGFpbi0+Z2xvYmFsT2JqZWN0KCktPmV2YWxG
dW5jdGlvbigpKTsKKyAgICAgICAgKCpwcm9maWxlciktPndpbGxFeGVjdXRlKGNhbGxGcmFtZSwg
c2NvcGVDaGFpbi0+Z2xvYmFsT2JqZWN0KCktPmV2YWxGdW5jdGlvbigpKTsKIAogICAgIFVTdHJp
bmcgcHJvZ3JhbVNvdXJjZSA9IHN0YXRpY19jYXN0PEpTU3RyaW5nKj4ocHJvZ3JhbSktPnZhbHVl
KCk7CiAKLSAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IHRoaXMtPmNvZGVCbG9jayhyKTsKLSAg
ICBSZWZQdHI8RXZhbE5vZGU+IGV2YWxOb2RlID0gY29kZUJsb2NrLT5ldmFsQ29kZUNhY2hlLmdl
dChleGVjLCBwcm9ncmFtU291cmNlLCBzY29wZUNoYWluLCBleGNlcHRpb25WYWx1ZSk7CisgICAg
Q29kZUJsb2NrKiBjb2RlQmxvY2sgPSBjYWxsRnJhbWUtPmNvZGVCbG9jaygpOworICAgIFJlZlB0
cjxFdmFsTm9kZT4gZXZhbE5vZGUgPSBjb2RlQmxvY2stPmV2YWxDb2RlQ2FjaGUuZ2V0KGNhbGxG
cmFtZSwgcHJvZ3JhbVNvdXJjZSwgc2NvcGVDaGFpbiwgZXhjZXB0aW9uVmFsdWUpOwogCiAgICAg
SlNWYWx1ZSogcmVzdWx0ID0gMDsKICAgICBpZiAoZXZhbE5vZGUpCi0gICAgICAgIHJlc3VsdCA9
IGV4ZWMtPmdsb2JhbERhdGEoKS5tYWNoaW5lLT5leGVjdXRlKGV2YWxOb2RlLmdldCgpLCBleGVj
LCB0aGlzT2JqLCByIC0gcmVnaXN0ZXJGaWxlLT5zdGFydCgpICsgYXJndiArIDEgKyBSZWdpc3Rl
ckZpbGU6OkNhbGxGcmFtZUhlYWRlclNpemUsIHNjb3BlQ2hhaW4sICZleGNlcHRpb25WYWx1ZSk7
CisgICAgICAgIHJlc3VsdCA9IGNhbGxGcmFtZS0+Z2xvYmFsRGF0YSgpLm1hY2hpbmUtPmV4ZWN1
dGUoZXZhbE5vZGUuZ2V0KCksIGNhbGxGcmFtZSwgdGhpc09iaiwgY2FsbEZyYW1lLT5yZWdpc3Rl
cnMoKSAtIHJlZ2lzdGVyRmlsZS0+c3RhcnQoKSArIGFyZ3YgKyAxICsgUmVnaXN0ZXJGaWxlOjpD
YWxsRnJhbWVIZWFkZXJTaXplLCBzY29wZUNoYWluLCAmZXhjZXB0aW9uVmFsdWUpOwogCiAgICAg
aWYgKCpwcm9maWxlcikKLSAgICAgICAgKCpwcm9maWxlciktPmRpZEV4ZWN1dGUoZXhlYywgc2Nv
cGVDaGFpbi0+Z2xvYmFsT2JqZWN0KCktPmV2YWxGdW5jdGlvbigpKTsKKyAgICAgICAgKCpwcm9m
aWxlciktPmRpZEV4ZWN1dGUoY2FsbEZyYW1lLCBzY29wZUNoYWluLT5nbG9iYWxPYmplY3QoKS0+
ZXZhbEZ1bmN0aW9uKCkpOwogCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KQEAgLTY1MiwyNCArNjUx
LDI0IEBAIE1hY2hpbmU6On5NYWNoaW5lKCkKIAogI2lmbmRlZiBOREVCVUcKIAotdm9pZCBNYWNo
aW5lOjpkdW1wQ2FsbEZyYW1lKGNvbnN0IFJlZ2lzdGVyRmlsZSogcmVnaXN0ZXJGaWxlLCBjb25z
dCBSZWdpc3RlciogcikKK3ZvaWQgTWFjaGluZTo6ZHVtcENhbGxGcmFtZShjb25zdCBSZWdpc3Rl
ckZpbGUqIHJlZ2lzdGVyRmlsZSwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUpCiB7Ci0gICAgSlNHbG9i
YWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IHNjb3BlQ2hhaW4ociktPmdsb2JhbE9iamVjdCgpOwor
ICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBjYWxsRnJhbWUtPnNjb3BlQ2hhaW4o
KS0+Z2xvYmFsT2JqZWN0KCk7CiAKLSAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IHRoaXMtPmNv
ZGVCbG9jayhyKTsKKyAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IGNhbGxGcmFtZS0+Y29kZUJs
b2NrKCk7CiAgICAgY29kZUJsb2NrLT5kdW1wKGdsb2JhbE9iamVjdC0+Z2xvYmFsRXhlYygpKTsK
IAotICAgIGR1bXBSZWdpc3RlcnMocmVnaXN0ZXJGaWxlLCByKTsKKyAgICBkdW1wUmVnaXN0ZXJz
KHJlZ2lzdGVyRmlsZSwgY2FsbEZyYW1lKTsKIH0KIAotdm9pZCBNYWNoaW5lOjpkdW1wUmVnaXN0
ZXJzKGNvbnN0IFJlZ2lzdGVyRmlsZSogcmVnaXN0ZXJGaWxlLCBjb25zdCBSZWdpc3RlciogcikK
K3ZvaWQgTWFjaGluZTo6ZHVtcFJlZ2lzdGVycyhjb25zdCBSZWdpc3RlckZpbGUqIHJlZ2lzdGVy
RmlsZSwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUpCiB7CiAgICAgcHJpbnRmKCJSZWdpc3RlciBmcmFt
ZTogXG5cbiIpOwogICAgIHByaW50ZigiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLVxuIik7CiAgICAgcHJpbnRmKCIgICAgICAgICAgICB1c2UgICAg
ICAgICAgICB8ICAgYWRkcmVzcyAgfCAgIHZhbHVlICAgXG4iKTsKICAgICBwcmludGYoIi0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiIpOwogCi0g
ICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSB0aGlzLT5jb2RlQmxvY2socik7CisgICAgQ29kZUJs
b2NrKiBjb2RlQmxvY2sgPSBjYWxsRnJhbWUtPmNvZGVCbG9jaygpOwogICAgIGNvbnN0IFJlZ2lz
dGVyKiBpdDsKICAgICBjb25zdCBSZWdpc3RlciogZW5kOwogCkBAIC02ODMsNyArNjgyLDcgQEAg
dm9pZCBNYWNoaW5lOjpkdW1wUmVnaXN0ZXJzKGNvbnN0IFJlZ2lzdAogICAgICAgICBwcmludGYo
Ii0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiIp
OwogICAgIH0KICAgICAKLSAgICBpdCA9IHIgLSBSZWdpc3RlckZpbGU6OkNhbGxGcmFtZUhlYWRl
clNpemUgLSBjb2RlQmxvY2stPm51bVBhcmFtZXRlcnM7CisgICAgaXQgPSBjYWxsRnJhbWUtPnJl
Z2lzdGVycygpIC0gUmVnaXN0ZXJGaWxlOjpDYWxsRnJhbWVIZWFkZXJTaXplIC0gY29kZUJsb2Nr
LT5udW1QYXJhbWV0ZXJzOwogICAgIHByaW50ZigiW3RoaXNdICAgICAgICAgICAgICAgICAgICAg
fCAlMTBwIHwgJTEwcCBcbiIsIGl0LCAoKml0KS52KCkpOyArK2l0OwogICAgIGVuZCA9IGl0ICsg
bWF4KGNvZGVCbG9jay0+bnVtUGFyYW1ldGVycyAtIDEsIDApOyAvLyAtIDEgdG8gc2tpcCAidGhp
cyIKICAgICBpZiAoaXQgIT0gZW5kKSB7CkBAIC03NDAsOCArNzM5LDYgQEAgdm9pZCBNYWNoaW5l
OjpkdW1wUmVnaXN0ZXJzKGNvbnN0IFJlZ2lzdAogCiAjZW5kaWYKIAotLy8jaWYgIWRlZmluZWQo
TkRFQlVHKSB8fCBFTkFCTEUoU0FNUExJTkdfVE9PTCkKLQogYm9vbCBNYWNoaW5lOjppc09wY29k
ZShPcGNvZGUgb3Bjb2RlKQogewogI2lmIEhBVkUoQ09NUFVURURfR09UTykKQEAgLTc1Myw5MCAr
NzUwLDgzIEBAIGJvb2wgTWFjaGluZTo6aXNPcGNvZGUoT3Bjb2RlIG9wY29kZSkKICNlbmRpZgog
fQogCi0vLyNlbmRpZgotCi1ORVZFUl9JTkxJTkUgYm9vbCBNYWNoaW5lOjp1bndpbmRDYWxsRnJh
bWUoRXhlY1N0YXRlKiYgZXhlYywgSlNWYWx1ZSogZXhjZXB0aW9uVmFsdWUsIGNvbnN0IEluc3Ry
dWN0aW9uKiYgdlBDLCBDb2RlQmxvY2sqJiBjb2RlQmxvY2ssIFJlZ2lzdGVyKiYgcikKK05FVkVS
X0lOTElORSBib29sIE1hY2hpbmU6OnVud2luZENhbGxGcmFtZShDYWxsRnJhbWUqJiBjYWxsRnJh
bWUsIEpTVmFsdWUqIGV4Y2VwdGlvblZhbHVlLCBjb25zdCBJbnN0cnVjdGlvbiomIHZQQywgQ29k
ZUJsb2NrKiYgY29kZUJsb2NrKQogewogICAgIENvZGVCbG9jayogb2xkQ29kZUJsb2NrID0gY29k
ZUJsb2NrOwotICAgIFNjb3BlQ2hhaW5Ob2RlKiBzY29wZUNoYWluID0gdGhpcy0+c2NvcGVDaGFp
bihyKTsKKyAgICBTY29wZUNoYWluTm9kZSogc2NvcGVDaGFpbiA9IGNhbGxGcmFtZS0+c2NvcGVD
aGFpbigpOwogCi0gICAgaWYgKERlYnVnZ2VyKiBkZWJ1Z2dlciA9IGV4ZWMtPmR5bmFtaWNHbG9i
YWxPYmplY3QoKS0+ZGVidWdnZXIoKSkgewotICAgICAgICBEZWJ1Z2dlckNhbGxGcmFtZSBkZWJ1
Z2dlckNhbGxGcmFtZShleGVjLT5keW5hbWljR2xvYmFsT2JqZWN0KCksIGNvZGVCbG9jaywgc2Nv
cGVDaGFpbiwgciwgZXhjZXB0aW9uVmFsdWUpOwotICAgICAgICBpZiAocltSZWdpc3RlckZpbGU6
OkNhbGxlZV0uanNWYWx1ZShleGVjKSkKKyAgICBpZiAoRGVidWdnZXIqIGRlYnVnZ2VyID0gY2Fs
bEZyYW1lLT5keW5hbWljR2xvYmFsT2JqZWN0KCktPmRlYnVnZ2VyKCkpIHsKKyAgICAgICAgRGVi
dWdnZXJDYWxsRnJhbWUgZGVidWdnZXJDYWxsRnJhbWUoY2FsbEZyYW1lLCBleGNlcHRpb25WYWx1
ZSk7CisgICAgICAgIGlmIChjYWxsRnJhbWUtPmNhbGxlZSgpKQogICAgICAgICAgICAgZGVidWdn
ZXItPnJldHVybkV2ZW50KGRlYnVnZ2VyQ2FsbEZyYW1lLCBjb2RlQmxvY2stPm93bmVyTm9kZS0+
c291cmNlSUQoKSwgY29kZUJsb2NrLT5vd25lck5vZGUtPmxhc3RMaW5lKCkpOwogICAgICAgICBl
bHNlCiAgICAgICAgICAgICBkZWJ1Z2dlci0+ZGlkRXhlY3V0ZVByb2dyYW0oZGVidWdnZXJDYWxs
RnJhbWUsIGNvZGVCbG9jay0+b3duZXJOb2RlLT5zb3VyY2VJRCgpLCBjb2RlQmxvY2stPm93bmVy
Tm9kZS0+bGFzdExpbmUoKSk7CiAgICAgfQogCiAgICAgaWYgKFByb2ZpbGVyKiBwcm9maWxlciA9
ICpQcm9maWxlcjo6ZW5hYmxlZFByb2ZpbGVyUmVmZXJlbmNlKCkpIHsKLSAgICAgICAgaWYgKHJb
UmVnaXN0ZXJGaWxlOjpDYWxsZWVdLmpzVmFsdWUoZXhlYykpCi0gICAgICAgICAgICBwcm9maWxl
ci0+ZGlkRXhlY3V0ZShleGVjLCBzdGF0aWNfY2FzdDxKU09iamVjdCo+KHJbUmVnaXN0ZXJGaWxl
OjpDYWxsZWVdLmpzVmFsdWUoZXhlYykpKTsKKyAgICAgICAgaWYgKGNhbGxGcmFtZS0+Y2FsbGVl
KCkpCisgICAgICAgICAgICBwcm9maWxlci0+ZGlkRXhlY3V0ZShjYWxsRnJhbWUsIGNhbGxGcmFt
ZS0+Y2FsbGVlKCkpOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICBwcm9maWxlci0+ZGlkRXhl
Y3V0ZShleGVjLCBjb2RlQmxvY2stPm93bmVyTm9kZS0+c291cmNlVVJMKCksIGNvZGVCbG9jay0+
b3duZXJOb2RlLT5saW5lTm8oKSk7CisgICAgICAgICAgICBwcm9maWxlci0+ZGlkRXhlY3V0ZShj
YWxsRnJhbWUsIGNvZGVCbG9jay0+b3duZXJOb2RlLT5zb3VyY2VVUkwoKSwgY29kZUJsb2NrLT5v
d25lck5vZGUtPmxpbmVObygpKTsKICAgICB9CiAKICAgICBpZiAob2xkQ29kZUJsb2NrLT5uZWVk
c0Z1bGxTY29wZUNoYWluKQogICAgICAgICBzY29wZUNoYWluLT5kZXJlZigpOwogCiAgICAgLy8g
SWYgdGhpcyBjYWxsIGZyYW1lIGNyZWF0ZWQgYW4gYWN0aXZhdGlvbiBvciBhbiAnYXJndW1lbnRz
JyBvYmplY3QsIHRlYXIgaXQgb2ZmLgotICAgIGlmIChKU0FjdGl2YXRpb24qIGFjdGl2YXRpb24g
PSBzdGF0aWNfY2FzdDxKU0FjdGl2YXRpb24qPihyW1JlZ2lzdGVyRmlsZTo6T3B0aW9uYWxDYWxs
ZWVBY3RpdmF0aW9uXS5nZXRKU1ZhbHVlKCkpKSB7Ci0gICAgICAgIEFTU0VSVChhY3RpdmF0aW9u
LT5pc09iamVjdCgmSlNBY3RpdmF0aW9uOjppbmZvKSk7Ci0gICAgICAgIEFyZ3VtZW50cyogYXJn
dW1lbnRzID0gc3RhdGljX2Nhc3Q8QXJndW1lbnRzKj4ocltSZWdpc3RlckZpbGU6Ok9wdGlvbmFs
Q2FsbGVlQXJndW1lbnRzXS5nZXRKU1ZhbHVlKCkpOwotICAgICAgICBBU1NFUlQoIWFyZ3VtZW50
cyB8fCBhcmd1bWVudHMtPmlzT2JqZWN0KCZBcmd1bWVudHM6OmluZm8pKTsKLSAgICAgICAgYWN0
aXZhdGlvbi0+Y29weVJlZ2lzdGVycyhhcmd1bWVudHMpOwotICAgIH0gZWxzZSBpZiAoQXJndW1l
bnRzKiBhcmd1bWVudHMgPSBzdGF0aWNfY2FzdDxBcmd1bWVudHMqPihyW1JlZ2lzdGVyRmlsZTo6
T3B0aW9uYWxDYWxsZWVBcmd1bWVudHNdLmdldEpTVmFsdWUoKSkpIHsKLSAgICAgICAgQVNTRVJU
KGFyZ3VtZW50cy0+aXNPYmplY3QoJkFyZ3VtZW50czo6aW5mbykpOworICAgIGlmIChKU0FjdGl2
YXRpb24qIGFjdGl2YXRpb24gPSBjYWxsRnJhbWUtPm9wdGlvbmFsQ2FsbGVlQWN0aXZhdGlvbigp
KQorICAgICAgICBhY3RpdmF0aW9uLT5jb3B5UmVnaXN0ZXJzKGNhbGxGcmFtZS0+b3B0aW9uYWxD
YWxsZWVBcmd1bWVudHMoKSk7CisgICAgZWxzZSBpZiAoQXJndW1lbnRzKiBhcmd1bWVudHMgPSBj
YWxsRnJhbWUtPm9wdGlvbmFsQ2FsbGVlQXJndW1lbnRzKCkpIHsKICAgICAgICAgaWYgKCFhcmd1
bWVudHMtPmlzVG9ybk9mZigpKQogICAgICAgICAgICAgYXJndW1lbnRzLT5jb3B5UmVnaXN0ZXJz
KCk7CiAgICAgfQogICAgIAotICAgIHZvaWQqIHJldHVyblBDID0gcltSZWdpc3RlckZpbGU6OlJl
dHVyblBDXS52KCk7Ci0gICAgciA9IHJbUmVnaXN0ZXJGaWxlOjpDYWxsZXJSZWdpc3RlcnNdLnIo
KTsKLSAgICBleGVjID0gQ2FsbEZyYW1lOjpjcmVhdGUocik7Ci0gICAgaWYgKGlzSG9zdENhbGxG
cmFtZShyKSkKKyAgICB2b2lkKiByZXR1cm5QQyA9IGNhbGxGcmFtZS0+cmV0dXJuUEMoKTsKKyAg
ICBjYWxsRnJhbWUgPSBjYWxsRnJhbWUtPmNhbGxlckZyYW1lKCk7CisgICAgaWYgKGNhbGxGcmFt
ZS0+aGFzSG9zdENhbGxGcmFtZUZsYWcoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAg
Y29kZUJsb2NrID0gdGhpcy0+Y29kZUJsb2NrKHIpOworICAgIGNvZGVCbG9jayA9IGNhbGxGcmFt
ZS0+Y29kZUJsb2NrKCk7CiAgICAgdlBDID0gdlBDRm9yUEMoY29kZUJsb2NrLCByZXR1cm5QQyk7
CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLU5FVkVSX0lOTElORSBJbnN0cnVjdGlvbiogTWFjaGlu
ZTo6dGhyb3dFeGNlcHRpb24oRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlKiYgZXhjZXB0aW9uVmFs
dWUsIGNvbnN0IEluc3RydWN0aW9uKiB2UEMsIFJlZ2lzdGVyKiYgciwgYm9vbCBleHBsaWNpdFRo
cm93KQorTkVWRVJfSU5MSU5FIEluc3RydWN0aW9uKiBNYWNoaW5lOjp0aHJvd0V4Y2VwdGlvbihD
YWxsRnJhbWUqJiBjYWxsRnJhbWUsIEpTVmFsdWUqJiBleGNlcHRpb25WYWx1ZSwgY29uc3QgSW5z
dHJ1Y3Rpb24qIHZQQywgYm9vbCBleHBsaWNpdFRocm93KQogewogICAgIC8vIFNldCB1cCB0aGUg
ZXhjZXB0aW9uIG9iamVjdAogICAgIAotICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gdGhpcy0+
Y29kZUJsb2NrKHIpOworICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gY2FsbEZyYW1lLT5jb2Rl
QmxvY2soKTsKICAgICBpZiAoZXhjZXB0aW9uVmFsdWUtPmlzT2JqZWN0KCkpIHsKICAgICAgICAg
SlNPYmplY3QqIGV4Y2VwdGlvbiA9IHN0YXRpY19jYXN0PEpTT2JqZWN0Kj4oZXhjZXB0aW9uVmFs
dWUpOwogICAgICAgICBpZiAoZXhjZXB0aW9uLT5pc05vdEFuT2JqZWN0RXJyb3JTdHViKCkpIHsK
LSAgICAgICAgICAgIGV4Y2VwdGlvbiA9IGNyZWF0ZU5vdEFuT2JqZWN0RXJyb3IoZXhlYywgc3Rh
dGljX2Nhc3Q8SlNOb3RBbk9iamVjdEVycm9yU3R1Yio+KGV4Y2VwdGlvbiksIHZQQywgY29kZUJs
b2NrKTsKKyAgICAgICAgICAgIGV4Y2VwdGlvbiA9IGNyZWF0ZU5vdEFuT2JqZWN0RXJyb3IoY2Fs
bEZyYW1lLCBzdGF0aWNfY2FzdDxKU05vdEFuT2JqZWN0RXJyb3JTdHViKj4oZXhjZXB0aW9uKSwg
dlBDLCBjb2RlQmxvY2spOwogICAgICAgICAgICAgZXhjZXB0aW9uVmFsdWUgPSBleGNlcHRpb247
CiAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBpZiAoIWV4Y2VwdGlvbi0+aGFzUHJvcGVy
dHkoZXhlYywgSWRlbnRpZmllcihleGVjLCAibGluZSIpKSAmJiAKLSAgICAgICAgICAgICAgICAh
ZXhjZXB0aW9uLT5oYXNQcm9wZXJ0eShleGVjLCBJZGVudGlmaWVyKGV4ZWMsICJzb3VyY2VJZCIp
KSAmJiAKLSAgICAgICAgICAgICAgICAhZXhjZXB0aW9uLT5oYXNQcm9wZXJ0eShleGVjLCBJZGVu
dGlmaWVyKGV4ZWMsICJzb3VyY2VVUkwiKSkgJiYgCi0gICAgICAgICAgICAgICAgIWV4Y2VwdGlv
bi0+aGFzUHJvcGVydHkoZXhlYywgSWRlbnRpZmllcihleGVjLCBleHByZXNzaW9uQmVnaW5PZmZz
ZXRQcm9wZXJ0eU5hbWUpKSAmJiAKLSAgICAgICAgICAgICAgICAhZXhjZXB0aW9uLT5oYXNQcm9w
ZXJ0eShleGVjLCBJZGVudGlmaWVyKGV4ZWMsIGV4cHJlc3Npb25DYXJldE9mZnNldFByb3BlcnR5
TmFtZSkpICYmIAotICAgICAgICAgICAgICAgICFleGNlcHRpb24tPmhhc1Byb3BlcnR5KGV4ZWMs
IElkZW50aWZpZXIoZXhlYywgZXhwcmVzc2lvbkVuZE9mZnNldFByb3BlcnR5TmFtZSkpKSB7Cisg
ICAgICAgICAgICBpZiAoIWV4Y2VwdGlvbi0+aGFzUHJvcGVydHkoY2FsbEZyYW1lLCBJZGVudGlm
aWVyKGNhbGxGcmFtZSwgImxpbmUiKSkgJiYgCisgICAgICAgICAgICAgICAgIWV4Y2VwdGlvbi0+
aGFzUHJvcGVydHkoY2FsbEZyYW1lLCBJZGVudGlmaWVyKGNhbGxGcmFtZSwgInNvdXJjZUlkIikp
ICYmIAorICAgICAgICAgICAgICAgICFleGNlcHRpb24tPmhhc1Byb3BlcnR5KGNhbGxGcmFtZSwg
SWRlbnRpZmllcihjYWxsRnJhbWUsICJzb3VyY2VVUkwiKSkgJiYgCisgICAgICAgICAgICAgICAg
IWV4Y2VwdGlvbi0+aGFzUHJvcGVydHkoY2FsbEZyYW1lLCBJZGVudGlmaWVyKGNhbGxGcmFtZSwg
ZXhwcmVzc2lvbkJlZ2luT2Zmc2V0UHJvcGVydHlOYW1lKSkgJiYgCisgICAgICAgICAgICAgICAg
IWV4Y2VwdGlvbi0+aGFzUHJvcGVydHkoY2FsbEZyYW1lLCBJZGVudGlmaWVyKGNhbGxGcmFtZSwg
ZXhwcmVzc2lvbkNhcmV0T2Zmc2V0UHJvcGVydHlOYW1lKSkgJiYgCisgICAgICAgICAgICAgICAg
IWV4Y2VwdGlvbi0+aGFzUHJvcGVydHkoY2FsbEZyYW1lLCBJZGVudGlmaWVyKGNhbGxGcmFtZSwg
ZXhwcmVzc2lvbkVuZE9mZnNldFByb3BlcnR5TmFtZSkpKSB7CiAgICAgICAgICAgICAgICAgaWYg
KGV4cGxpY2l0VGhyb3cpIHsKICAgICAgICAgICAgICAgICAgICAgaW50IHN0YXJ0T2Zmc2V0ID0g
MDsKICAgICAgICAgICAgICAgICAgICAgaW50IGVuZE9mZnNldCA9IDA7CiAgICAgICAgICAgICAg
ICAgICAgIGludCBkaXZvdFBvaW50ID0gMDsKICAgICAgICAgICAgICAgICAgICAgaW50IGxpbmUg
PSBjb2RlQmxvY2stPmV4cHJlc3Npb25SYW5nZUZvclZQQyh2UEMsIGRpdm90UG9pbnQsIHN0YXJ0
T2Zmc2V0LCBlbmRPZmZzZXQpOwotICAgICAgICAgICAgICAgICAgICBleGNlcHRpb24tPnB1dFdp
dGhBdHRyaWJ1dGVzKGV4ZWMsIElkZW50aWZpZXIoZXhlYywgImxpbmUiKSwganNOdW1iZXIoZXhl
YywgbGluZSksIFJlYWRPbmx5IHwgRG9udERlbGV0ZSk7CisgICAgICAgICAgICAgICAgICAgIGV4
Y2VwdGlvbi0+cHV0V2l0aEF0dHJpYnV0ZXMoY2FsbEZyYW1lLCBJZGVudGlmaWVyKGNhbGxGcmFt
ZSwgImxpbmUiKSwganNOdW1iZXIoY2FsbEZyYW1lLCBsaW5lKSwgUmVhZE9ubHkgfCBEb250RGVs
ZXRlKTsKICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgIC8vIFdlIG9u
bHkgaGl0IHRoaXMgcGF0aCBmb3IgZXJyb3IgbWVzc2FnZXMgYW5kIHRocm93IHN0YXRlbWVudHMs
IHdoaWNoIGRvbid0IGhhdmUgYSBzcGVjaWZpYyBmYWlsdXJlIHBvc2l0aW9uCiAgICAgICAgICAg
ICAgICAgICAgIC8vIFNvIHdlIGp1c3QgZ2l2ZSB0aGUgZnVsbCByYW5nZSBvZiB0aGUgZXJyb3Iv
dGhyb3cgc3RhdGVtZW50LgotICAgICAgICAgICAgICAgICAgICBleGNlcHRpb24tPnB1dFdpdGhB
dHRyaWJ1dGVzKGV4ZWMsIElkZW50aWZpZXIoZXhlYywgZXhwcmVzc2lvbkJlZ2luT2Zmc2V0UHJv
cGVydHlOYW1lKSwganNOdW1iZXIoZXhlYywgZGl2b3RQb2ludCAtIHN0YXJ0T2Zmc2V0KSwgUmVh
ZE9ubHkgfCBEb250RGVsZXRlKTsKLSAgICAgICAgICAgICAgICAgICAgZXhjZXB0aW9uLT5wdXRX
aXRoQXR0cmlidXRlcyhleGVjLCBJZGVudGlmaWVyKGV4ZWMsIGV4cHJlc3Npb25FbmRPZmZzZXRQ
cm9wZXJ0eU5hbWUpLCBqc051bWJlcihleGVjLCBkaXZvdFBvaW50ICsgZW5kT2Zmc2V0KSwgUmVh
ZE9ubHkgfCBEb250RGVsZXRlKTsKKyAgICAgICAgICAgICAgICAgICAgZXhjZXB0aW9uLT5wdXRX
aXRoQXR0cmlidXRlcyhjYWxsRnJhbWUsIElkZW50aWZpZXIoY2FsbEZyYW1lLCBleHByZXNzaW9u
QmVnaW5PZmZzZXRQcm9wZXJ0eU5hbWUpLCBqc051bWJlcihjYWxsRnJhbWUsIGRpdm90UG9pbnQg
LSBzdGFydE9mZnNldCksIFJlYWRPbmx5IHwgRG9udERlbGV0ZSk7CisgICAgICAgICAgICAgICAg
ICAgIGV4Y2VwdGlvbi0+cHV0V2l0aEF0dHJpYnV0ZXMoY2FsbEZyYW1lLCBJZGVudGlmaWVyKGNh
bGxGcmFtZSwgZXhwcmVzc2lvbkVuZE9mZnNldFByb3BlcnR5TmFtZSksIGpzTnVtYmVyKGNhbGxG
cmFtZSwgZGl2b3RQb2ludCArIGVuZE9mZnNldCksIFJlYWRPbmx5IHwgRG9udERlbGV0ZSk7CiAg
ICAgICAgICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICAgICAgICAgIGV4Y2VwdGlvbi0+cHV0
V2l0aEF0dHJpYnV0ZXMoZXhlYywgSWRlbnRpZmllcihleGVjLCAibGluZSIpLCBqc051bWJlcihl
eGVjLCBjb2RlQmxvY2stPmxpbmVOdW1iZXJGb3JWUEModlBDKSksIFJlYWRPbmx5IHwgRG9udERl
bGV0ZSk7Ci0gICAgICAgICAgICAgICAgZXhjZXB0aW9uLT5wdXRXaXRoQXR0cmlidXRlcyhleGVj
LCBJZGVudGlmaWVyKGV4ZWMsICJzb3VyY2VJZCIpLCBqc051bWJlcihleGVjLCBjb2RlQmxvY2st
Pm93bmVyTm9kZS0+c291cmNlSUQoKSksIFJlYWRPbmx5IHwgRG9udERlbGV0ZSk7Ci0gICAgICAg
ICAgICAgICAgZXhjZXB0aW9uLT5wdXRXaXRoQXR0cmlidXRlcyhleGVjLCBJZGVudGlmaWVyKGV4
ZWMsICJzb3VyY2VVUkwiKSwganNPd25lZFN0cmluZyhleGVjLCBjb2RlQmxvY2stPm93bmVyTm9k
ZS0+c291cmNlVVJMKCkpLCBSZWFkT25seSB8IERvbnREZWxldGUpOworICAgICAgICAgICAgICAg
ICAgICBleGNlcHRpb24tPnB1dFdpdGhBdHRyaWJ1dGVzKGNhbGxGcmFtZSwgSWRlbnRpZmllcihj
YWxsRnJhbWUsICJsaW5lIiksIGpzTnVtYmVyKGNhbGxGcmFtZSwgY29kZUJsb2NrLT5saW5lTnVt
YmVyRm9yVlBDKHZQQykpLCBSZWFkT25seSB8IERvbnREZWxldGUpOworICAgICAgICAgICAgICAg
IGV4Y2VwdGlvbi0+cHV0V2l0aEF0dHJpYnV0ZXMoY2FsbEZyYW1lLCBJZGVudGlmaWVyKGNhbGxG
cmFtZSwgInNvdXJjZUlkIiksIGpzTnVtYmVyKGNhbGxGcmFtZSwgY29kZUJsb2NrLT5vd25lck5v
ZGUtPnNvdXJjZUlEKCkpLCBSZWFkT25seSB8IERvbnREZWxldGUpOworICAgICAgICAgICAgICAg
IGV4Y2VwdGlvbi0+cHV0V2l0aEF0dHJpYnV0ZXMoY2FsbEZyYW1lLCBJZGVudGlmaWVyKGNhbGxG
cmFtZSwgInNvdXJjZVVSTCIpLCBqc093bmVkU3RyaW5nKGNhbGxGcmFtZSwgY29kZUJsb2NrLT5v
d25lck5vZGUtPnNvdXJjZVVSTCgpKSwgUmVhZE9ubHkgfCBEb250RGVsZXRlKTsKICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgIAogICAgICAgICAgICAgaWYgKGV4Y2VwdGlvbi0+aXNXYXRjaGRv
Z0V4Y2VwdGlvbigpKSB7Ci0gICAgICAgICAgICAgICAgd2hpbGUgKHVud2luZENhbGxGcmFtZShl
eGVjLCBleGNlcHRpb25WYWx1ZSwgdlBDLCBjb2RlQmxvY2ssIHIpKSB7CisgICAgICAgICAgICAg
ICAgd2hpbGUgKHVud2luZENhbGxGcmFtZShjYWxsRnJhbWUsIGV4Y2VwdGlvblZhbHVlLCB2UEMs
IGNvZGVCbG9jaykpIHsKICAgICAgICAgICAgICAgICAgICAgLy8gRG9uJ3QgbmVlZCBoYW5kbGVy
IGNoZWNrcyBvciBhbnl0aGluZywgd2UganVzdCB3YW50IHRvIHVucm9sbCBhbGwgdGhlIEpTIGNh
bGxmcmFtZXMgcG9zc2libGUuCiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIHJl
dHVybiAwOwpAQCAtODQ0LDkgKzgzNCw4IEBAIE5FVkVSX0lOTElORSBJbnN0cnVjdGlvbiogTWFj
aGluZTo6dGhyb3cKICAgICAgICAgfQogICAgIH0KIAotICAgIGlmIChEZWJ1Z2dlciogZGVidWdn
ZXIgPSBleGVjLT5keW5hbWljR2xvYmFsT2JqZWN0KCktPmRlYnVnZ2VyKCkpIHsKLSAgICAgICAg
U2NvcGVDaGFpbk5vZGUqIHNjb3BlQ2hhaW4gPSB0aGlzLT5zY29wZUNoYWluKHIpOwotICAgICAg
ICBEZWJ1Z2dlckNhbGxGcmFtZSBkZWJ1Z2dlckNhbGxGcmFtZShleGVjLT5keW5hbWljR2xvYmFs
T2JqZWN0KCksIGNvZGVCbG9jaywgc2NvcGVDaGFpbiwgciwgZXhjZXB0aW9uVmFsdWUpOworICAg
IGlmIChEZWJ1Z2dlciogZGVidWdnZXIgPSBjYWxsRnJhbWUtPmR5bmFtaWNHbG9iYWxPYmplY3Qo
KS0+ZGVidWdnZXIoKSkgeworICAgICAgICBEZWJ1Z2dlckNhbGxGcmFtZSBkZWJ1Z2dlckNhbGxG
cmFtZShjYWxsRnJhbWUsIGV4Y2VwdGlvblZhbHVlKTsKICAgICAgICAgZGVidWdnZXItPmV4Y2Vw
dGlvbihkZWJ1Z2dlckNhbGxGcmFtZSwgY29kZUJsb2NrLT5vd25lck5vZGUtPnNvdXJjZUlEKCks
IGNvZGVCbG9jay0+bGluZU51bWJlckZvclZQQyh2UEMpKTsKICAgICB9CiAKQEAgLTg1Niw0NyAr
ODQ1LDQ3IEBAIE5FVkVSX0lOTElORSBJbnN0cnVjdGlvbiogTWFjaGluZTo6dGhyb3cKICAgICBJ
bnN0cnVjdGlvbiogaGFuZGxlclZQQzsKIAogICAgIHdoaWxlICghY29kZUJsb2NrLT5nZXRIYW5k
bGVyRm9yVlBDKHZQQywgaGFuZGxlclZQQywgc2NvcGVEZXB0aCkpIHsKLSAgICAgICAgaWYgKCF1
bndpbmRDYWxsRnJhbWUoZXhlYywgZXhjZXB0aW9uVmFsdWUsIHZQQywgY29kZUJsb2NrLCByKSkK
KyAgICAgICAgaWYgKCF1bndpbmRDYWxsRnJhbWUoY2FsbEZyYW1lLCBleGNlcHRpb25WYWx1ZSwg
dlBDLCBjb2RlQmxvY2spKQogICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQogCiAgICAgLy8g
Tm93IHVud2luZCB0aGUgc2NvcGUgY2hhaW4gd2l0aGluIHRoZSBleGNlcHRpb24gaGFuZGxlcidz
IGNhbGwgZnJhbWUuCiAKLSAgICBTY29wZUNoYWluIHNjKHRoaXMtPnNjb3BlQ2hhaW4ocikpOwor
ICAgIFNjb3BlQ2hhaW4gc2MoY2FsbEZyYW1lLT5zY29wZUNoYWluKCkpOwogICAgIGludCBzY29w
ZURlbHRhID0gZGVwdGgoY29kZUJsb2NrLCBzYykgLSBzY29wZURlcHRoOwogICAgIEFTU0VSVChz
Y29wZURlbHRhID49IDApOwogICAgIHdoaWxlIChzY29wZURlbHRhLS0pCiAgICAgICAgIHNjLnBv
cCgpOwotICAgIHJbUmVnaXN0ZXJGaWxlOjpTY29wZUNoYWluXSA9IHNjLm5vZGUoKTsKKyAgICBj
YWxsRnJhbWUtPnNldFNjb3BlQ2hhaW4oc2Mubm9kZSgpKTsKIAogICAgIHJldHVybiBoYW5kbGVy
VlBDOwogfQogCi1jbGFzcyBEeW5hbWljR2xvYmFsT2JqZWN0U2NvcGUgeworY2xhc3MgRHluYW1p
Y0dsb2JhbE9iamVjdFNjb3BlIDogTm9uY29weWFibGUgewogcHVibGljOgotICAgIER5bmFtaWNH
bG9iYWxPYmplY3RTY29wZShFeGVjU3RhdGUqIGV4ZWMsIEpTR2xvYmFsT2JqZWN0KiBkeW5hbWlj
R2xvYmFsT2JqZWN0KSAKLSAgICAgICAgOiBtX2V4ZWMoZXhlYykKLSAgICAgICAgLCBtX3NhdmVk
R2xvYmFsT2JqZWN0KGV4ZWMtPmdsb2JhbERhdGEoKS5keW5hbWljR2xvYmFsT2JqZWN0KQorICAg
IER5bmFtaWNHbG9iYWxPYmplY3RTY29wZShDYWxsRnJhbWUqIGNhbGxGcmFtZSwgSlNHbG9iYWxP
YmplY3QqIGR5bmFtaWNHbG9iYWxPYmplY3QpIAorICAgICAgICA6IG1fZHluYW1pY0dsb2JhbE9i
amVjdFNsb3QoY2FsbEZyYW1lLT5nbG9iYWxEYXRhKCkuZHluYW1pY0dsb2JhbE9iamVjdCkKKyAg
ICAgICAgLCBtX3NhdmVkRHluYW1pY0dsb2JhbE9iamVjdChtX2R5bmFtaWNHbG9iYWxPYmplY3RT
bG90KQogICAgIHsKLSAgICAgICAgZXhlYy0+Z2xvYmFsRGF0YSgpLmR5bmFtaWNHbG9iYWxPYmpl
Y3QgPSBkeW5hbWljR2xvYmFsT2JqZWN0OworICAgICAgICBtX2R5bmFtaWNHbG9iYWxPYmplY3RT
bG90ID0gZHluYW1pY0dsb2JhbE9iamVjdDsKICAgICB9CiAKICAgICB+RHluYW1pY0dsb2JhbE9i
amVjdFNjb3BlKCkKICAgICB7Ci0gICAgICAgIG1fZXhlYy0+Z2xvYmFsRGF0YSgpLmR5bmFtaWNH
bG9iYWxPYmplY3QgPSBtX3NhdmVkR2xvYmFsT2JqZWN0OworICAgICAgICBtX2R5bmFtaWNHbG9i
YWxPYmplY3RTbG90ID0gbV9zYXZlZER5bmFtaWNHbG9iYWxPYmplY3Q7CiAgICAgfQogCiBwcml2
YXRlOgotICAgIEV4ZWNTdGF0ZSogbV9leGVjOwotICAgIEpTR2xvYmFsT2JqZWN0KiBtX3NhdmVk
R2xvYmFsT2JqZWN0OworICAgIEpTR2xvYmFsT2JqZWN0KiYgbV9keW5hbWljR2xvYmFsT2JqZWN0
U2xvdDsKKyAgICBKU0dsb2JhbE9iamVjdCogbV9zYXZlZER5bmFtaWNHbG9iYWxPYmplY3Q7CiB9
OwogCi1KU1ZhbHVlKiBNYWNoaW5lOjpleGVjdXRlKFByb2dyYW1Ob2RlKiBwcm9ncmFtTm9kZSwg
RXhlY1N0YXRlKiBleGVjLCBTY29wZUNoYWluTm9kZSogc2NvcGVDaGFpbiwgSlNPYmplY3QqIHRo
aXNPYmosIEpTVmFsdWUqKiBleGNlcHRpb24pCitKU1ZhbHVlKiBNYWNoaW5lOjpleGVjdXRlKFBy
b2dyYW1Ob2RlKiBwcm9ncmFtTm9kZSwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIFNjb3BlQ2hhaW5O
b2RlKiBzY29wZUNoYWluLCBKU09iamVjdCogdGhpc09iaiwgSlNWYWx1ZSoqIGV4Y2VwdGlvbikK
IHsKLSAgICBBU1NFUlQoIWV4ZWMtPmhhZEV4Y2VwdGlvbigpKTsKKyAgICBBU1NFUlQoIXNjb3Bl
Q2hhaW4tPmdsb2JhbERhdGEtPmV4Y2VwdGlvbik7CiAKICAgICBpZiAobV9yZWVudHJ5RGVwdGgg
Pj0gTWF4UmVlbnRyeURlcHRoKSB7Ci0gICAgICAgICpleGNlcHRpb24gPSBjcmVhdGVTdGFja092
ZXJmbG93RXJyb3IoZXhlYyk7CisgICAgICAgICpleGNlcHRpb24gPSBjcmVhdGVTdGFja092ZXJm
bG93RXJyb3IoY2FsbEZyYW1lKTsKICAgICAgICAgcmV0dXJuIGpzTnVsbCgpOwogICAgIH0KIApA
QCAtOTA1LDQxICs4OTQsNDEgQEAgSlNWYWx1ZSogTWFjaGluZTo6ZXhlY3V0ZShQcm9ncmFtTm9k
ZSogcAogICAgIFJlZ2lzdGVyKiBvbGRFbmQgPSBtX3JlZ2lzdGVyRmlsZS5lbmQoKTsKICAgICBS
ZWdpc3RlciogbmV3RW5kID0gb2xkRW5kICsgY29kZUJsb2NrLT5udW1QYXJhbWV0ZXJzICsgUmVn
aXN0ZXJGaWxlOjpDYWxsRnJhbWVIZWFkZXJTaXplICsgY29kZUJsb2NrLT5udW1DYWxsZWVSZWdp
c3RlcnM7CiAgICAgaWYgKCFtX3JlZ2lzdGVyRmlsZS5ncm93KG5ld0VuZCkpIHsKLSAgICAgICAg
KmV4Y2VwdGlvbiA9IGNyZWF0ZVN0YWNrT3ZlcmZsb3dFcnJvcihleGVjKTsKKyAgICAgICAgKmV4
Y2VwdGlvbiA9IGNyZWF0ZVN0YWNrT3ZlcmZsb3dFcnJvcihjYWxsRnJhbWUpOwogICAgICAgICBy
ZXR1cm4ganNOdWxsKCk7CiAgICAgfQogCi0gICAgRHluYW1pY0dsb2JhbE9iamVjdFNjb3BlIGds
b2JhbE9iamVjdFNjb3BlKGV4ZWMsIHNjb3BlQ2hhaW4tPmdsb2JhbE9iamVjdCgpKTsKKyAgICBE
eW5hbWljR2xvYmFsT2JqZWN0U2NvcGUgZ2xvYmFsT2JqZWN0U2NvcGUoY2FsbEZyYW1lLCBzY29w
ZUNoYWluLT5nbG9iYWxPYmplY3QoKSk7CiAKICAgICBKU0dsb2JhbE9iamVjdCogbGFzdEdsb2Jh
bE9iamVjdCA9IG1fcmVnaXN0ZXJGaWxlLmdsb2JhbE9iamVjdCgpOwotICAgIEpTR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QgPSBleGVjLT5keW5hbWljR2xvYmFsT2JqZWN0KCk7CisgICAgSlNH
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IGNhbGxGcmFtZS0+ZHluYW1pY0dsb2JhbE9iamVj
dCgpOwogICAgIGdsb2JhbE9iamVjdC0+Y29weUdsb2JhbHNUbyhtX3JlZ2lzdGVyRmlsZSk7CiAK
LSAgICBSZWdpc3RlciogciA9IG9sZEVuZCArIGNvZGVCbG9jay0+bnVtUGFyYW1ldGVycyArIFJl
Z2lzdGVyRmlsZTo6Q2FsbEZyYW1lSGVhZGVyU2l6ZTsKLSAgICByW2NvZGVCbG9jay0+dGhpc1Jl
Z2lzdGVyXSA9IHRoaXNPYmo7Ci0gICAgaW5pdGlhbGl6ZUNhbGxGcmFtZShyLCBjb2RlQmxvY2ss
IDAsIHNjb3BlQ2hhaW4sIG1ha2VIb3N0Q2FsbEZyYW1lUG9pbnRlcigwKSwgMCwgMCwgMCk7Cisg
ICAgQ2FsbEZyYW1lKiBuZXdDYWxsRnJhbWUgPSBDYWxsRnJhbWU6OmNyZWF0ZShvbGRFbmQgKyBj
b2RlQmxvY2stPm51bVBhcmFtZXRlcnMgKyBSZWdpc3RlckZpbGU6OkNhbGxGcmFtZUhlYWRlclNp
emUpOworICAgIG5ld0NhbGxGcmFtZVtjb2RlQmxvY2stPnRoaXNSZWdpc3Rlcl0gPSB0aGlzT2Jq
OworICAgIG5ld0NhbGxGcmFtZS0+aW5pdChjb2RlQmxvY2ssIDAsIHNjb3BlQ2hhaW4sIENhbGxG
cmFtZTo6bm9DYWxsZXIoKSwgMCwgMCwgMCk7CiAKICAgICBpZiAoY29kZUJsb2NrLT5uZWVkc0Z1
bGxTY29wZUNoYWluKQogICAgICAgICBzY29wZUNoYWluID0gc2NvcGVDaGFpbi0+Y29weSgpOwog
CiAgICAgUHJvZmlsZXIqKiBwcm9maWxlciA9IFByb2ZpbGVyOjplbmFibGVkUHJvZmlsZXJSZWZl
cmVuY2UoKTsKICAgICBpZiAoKnByb2ZpbGVyKQotICAgICAgICAoKnByb2ZpbGVyKS0+d2lsbEV4
ZWN1dGUoZXhlYywgcHJvZ3JhbU5vZGUtPnNvdXJjZVVSTCgpLCBwcm9ncmFtTm9kZS0+bGluZU5v
KCkpOworICAgICAgICAoKnByb2ZpbGVyKS0+d2lsbEV4ZWN1dGUoY2FsbEZyYW1lLCBwcm9ncmFt
Tm9kZS0+c291cmNlVVJMKCksIHByb2dyYW1Ob2RlLT5saW5lTm8oKSk7CiAKICAgICBtX3JlZW50
cnlEZXB0aCsrOwogI2lmIEVOQUJMRShDVEkpCiAgICAgaWYgKCFjb2RlQmxvY2stPmN0aUNvZGUp
Ci0gICAgICAgIENUSTo6Y29tcGlsZSh0aGlzLCBleGVjLCBjb2RlQmxvY2spOwotICAgIEpTVmFs
dWUqIHJlc3VsdCA9IENUSTo6ZXhlY3V0ZShjb2RlQmxvY2stPmN0aUNvZGUsICZtX3JlZ2lzdGVy
RmlsZSwgciwgc2NvcGVDaGFpbi0+Z2xvYmFsRGF0YSwgZXhjZXB0aW9uKTsKKyAgICAgICAgQ1RJ
Ojpjb21waWxlKHRoaXMsIGNhbGxGcmFtZSwgY29kZUJsb2NrKTsKKyAgICBKU1ZhbHVlKiByZXN1
bHQgPSBDVEk6OmV4ZWN1dGUoY29kZUJsb2NrLT5jdGlDb2RlLCAmbV9yZWdpc3RlckZpbGUsIGNh
bGxGcmFtZSwgc2NvcGVDaGFpbi0+Z2xvYmFsRGF0YSwgZXhjZXB0aW9uKTsKICNlbHNlCi0gICAg
SlNWYWx1ZSogcmVzdWx0ID0gcHJpdmF0ZUV4ZWN1dGUoTm9ybWFsLCAmbV9yZWdpc3RlckZpbGUs
IHIsIGV4Y2VwdGlvbik7CisgICAgSlNWYWx1ZSogcmVzdWx0ID0gcHJpdmF0ZUV4ZWN1dGUoTm9y
bWFsLCAmbV9yZWdpc3RlckZpbGUsIGNhbGxGcmFtZSwgZXhjZXB0aW9uKTsKICNlbmRpZgogICAg
IG1fcmVlbnRyeURlcHRoLS07CiAKICAgICBNQUNISU5FX1NBTVBMSU5HX3ByaXZhdGVFeGVjdXRl
UmV0dXJuZWQoKTsKIAogICAgIGlmICgqcHJvZmlsZXIpCi0gICAgICAgICgqcHJvZmlsZXIpLT5k
aWRFeGVjdXRlKGV4ZWMsIHByb2dyYW1Ob2RlLT5zb3VyY2VVUkwoKSwgcHJvZ3JhbU5vZGUtPmxp
bmVObygpKTsKKyAgICAgICAgKCpwcm9maWxlciktPmRpZEV4ZWN1dGUoY2FsbEZyYW1lLCBwcm9n
cmFtTm9kZS0+c291cmNlVVJMKCksIHByb2dyYW1Ob2RlLT5saW5lTm8oKSk7CiAKICAgICBpZiAo
bV9yZWVudHJ5RGVwdGggJiYgbGFzdEdsb2JhbE9iamVjdCAmJiBnbG9iYWxPYmplY3QgIT0gbGFz
dEdsb2JhbE9iamVjdCkKICAgICAgICAgbGFzdEdsb2JhbE9iamVjdC0+Y29weUdsb2JhbHNUbyht
X3JlZ2lzdGVyRmlsZSk7CkBAIC05NDksMTIgKzkzOCwxMiBAQCBKU1ZhbHVlKiBNYWNoaW5lOjpl
eGVjdXRlKFByb2dyYW1Ob2RlKiBwCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotSlNWYWx1ZSog
TWFjaGluZTo6ZXhlY3V0ZShGdW5jdGlvbkJvZHlOb2RlKiBmdW5jdGlvbkJvZHlOb2RlLCBFeGVj
U3RhdGUqIGV4ZWMsIEpTRnVuY3Rpb24qIGZ1bmN0aW9uLCBKU09iamVjdCogdGhpc09iaiwgY29u
c3QgQXJnTGlzdCYgYXJncywgU2NvcGVDaGFpbk5vZGUqIHNjb3BlQ2hhaW4sIEpTVmFsdWUqKiBl
eGNlcHRpb24pCitKU1ZhbHVlKiBNYWNoaW5lOjpleGVjdXRlKEZ1bmN0aW9uQm9keU5vZGUqIGZ1
bmN0aW9uQm9keU5vZGUsIENhbGxGcmFtZSogY2FsbEZyYW1lLCBKU0Z1bmN0aW9uKiBmdW5jdGlv
biwgSlNPYmplY3QqIHRoaXNPYmosIGNvbnN0IEFyZ0xpc3QmIGFyZ3MsIFNjb3BlQ2hhaW5Ob2Rl
KiBzY29wZUNoYWluLCBKU1ZhbHVlKiogZXhjZXB0aW9uKQogewotICAgIEFTU0VSVCghZXhlYy0+
aGFkRXhjZXB0aW9uKCkpOworICAgIEFTU0VSVCghc2NvcGVDaGFpbi0+Z2xvYmFsRGF0YS0+ZXhj
ZXB0aW9uKTsKIAogICAgIGlmIChtX3JlZW50cnlEZXB0aCA+PSBNYXhSZWVudHJ5RGVwdGgpIHsK
LSAgICAgICAgKmV4Y2VwdGlvbiA9IGNyZWF0ZVN0YWNrT3ZlcmZsb3dFcnJvcihleGVjKTsKKyAg
ICAgICAgKmV4Y2VwdGlvbiA9IGNyZWF0ZVN0YWNrT3ZlcmZsb3dFcnJvcihjYWxsRnJhbWUpOwog
ICAgICAgICByZXR1cm4ganNOdWxsKCk7CiAgICAgfQogCkBAIC05NjIsNDEgKzk1MSw0MCBAQCBK
U1ZhbHVlKiBNYWNoaW5lOjpleGVjdXRlKEZ1bmN0aW9uQm9keU5vCiAgICAgaW50IGFyZ2MgPSAx
ICsgYXJncy5zaXplKCk7IC8vIGltcGxpY2l0ICJ0aGlzIiBwYXJhbWV0ZXIKIAogICAgIGlmICgh
bV9yZWdpc3RlckZpbGUuZ3JvdyhvbGRFbmQgKyBhcmdjKSkgewotICAgICAgICAqZXhjZXB0aW9u
ID0gY3JlYXRlU3RhY2tPdmVyZmxvd0Vycm9yKGV4ZWMpOworICAgICAgICAqZXhjZXB0aW9uID0g
Y3JlYXRlU3RhY2tPdmVyZmxvd0Vycm9yKGNhbGxGcmFtZSk7CiAgICAgICAgIHJldHVybiBqc051
bGwoKTsKICAgICB9CiAKLSAgICBEeW5hbWljR2xvYmFsT2JqZWN0U2NvcGUgZ2xvYmFsT2JqZWN0
U2NvcGUoZXhlYywgZXhlYy0+Z2xvYmFsRGF0YSgpLmR5bmFtaWNHbG9iYWxPYmplY3QgPyBleGVj
LT5nbG9iYWxEYXRhKCkuZHluYW1pY0dsb2JhbE9iamVjdCA6IHNjb3BlQ2hhaW4tPmdsb2JhbE9i
amVjdCgpKTsKKyAgICBEeW5hbWljR2xvYmFsT2JqZWN0U2NvcGUgZ2xvYmFsT2JqZWN0U2NvcGUo
Y2FsbEZyYW1lLCBjYWxsRnJhbWUtPmdsb2JhbERhdGEoKS5keW5hbWljR2xvYmFsT2JqZWN0ID8g
Y2FsbEZyYW1lLT5nbG9iYWxEYXRhKCkuZHluYW1pY0dsb2JhbE9iamVjdCA6IHNjb3BlQ2hhaW4t
Pmdsb2JhbE9iamVjdCgpKTsKIAotICAgIFJlZ2lzdGVyKiBhcmd2ID0gb2xkRW5kOworICAgIENh
bGxGcmFtZSogbmV3Q2FsbEZyYW1lID0gQ2FsbEZyYW1lOjpjcmVhdGUob2xkRW5kKTsKICAgICBz
aXplX3QgZHN0ID0gMDsKLSAgICBhcmd2W2RzdF0gPSB0aGlzT2JqOwotCisgICAgbmV3Q2FsbEZy
YW1lWzBdID0gdGhpc09iajsKICAgICBBcmdMaXN0Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBhcmdz
LmVuZCgpOwogICAgIGZvciAoQXJnTGlzdDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBhcmdzLmJlZ2lu
KCk7IGl0ICE9IGVuZDsgKytpdCkKLSAgICAgICAgYXJndlsrK2RzdF0gPSAqaXQ7CisgICAgICAg
IG5ld0NhbGxGcmFtZVsrK2RzdF0gPSAqaXQ7CiAKICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9
ICZmdW5jdGlvbkJvZHlOb2RlLT5ieXRlQ29kZShzY29wZUNoYWluKTsKLSAgICBSZWdpc3Rlciog
ciA9IHNsaWRlUmVnaXN0ZXJXaW5kb3dGb3JDYWxsKGNvZGVCbG9jaywgJm1fcmVnaXN0ZXJGaWxl
LCBhcmd2LCBhcmdjICsgUmVnaXN0ZXJGaWxlOjpDYWxsRnJhbWVIZWFkZXJTaXplLCBhcmdjKTsK
LSAgICBpZiAoVU5MSUtFTFkoIXIpKSB7Ci0gICAgICAgICpleGNlcHRpb24gPSBjcmVhdGVTdGFj
a092ZXJmbG93RXJyb3IoZXhlYyk7CisgICAgY2FsbEZyYW1lID0gc2xpZGVSZWdpc3RlcldpbmRv
d0ZvckNhbGwoY29kZUJsb2NrLCAmbV9yZWdpc3RlckZpbGUsIG5ld0NhbGxGcmFtZSwgYXJnYyAr
IFJlZ2lzdGVyRmlsZTo6Q2FsbEZyYW1lSGVhZGVyU2l6ZSwgYXJnYyk7CisgICAgaWYgKFVOTElL
RUxZKCFjYWxsRnJhbWUpKSB7CisgICAgICAgICpleGNlcHRpb24gPSBjcmVhdGVTdGFja092ZXJm
bG93RXJyb3IoY2FsbEZyYW1lKTsKICAgICAgICAgbV9yZWdpc3RlckZpbGUuc2hyaW5rKG9sZEVu
ZCk7CiAgICAgICAgIHJldHVybiBqc051bGwoKTsKICAgICB9CiAgICAgLy8gYSAwIGNvZGVCbG9j
ayBpbmRpY2F0ZXMgYSBidWlsdC1pbiBjYWxsZXIKLSAgICBpbml0aWFsaXplQ2FsbEZyYW1lKHIs
IGNvZGVCbG9jaywgMCwgc2NvcGVDaGFpbiwgbWFrZUhvc3RDYWxsRnJhbWVQb2ludGVyKGV4ZWMt
PnJlZ2lzdGVycygpKSwgMCwgYXJnYywgZnVuY3Rpb24pOworICAgIGNhbGxGcmFtZS0+aW5pdChj
b2RlQmxvY2ssIDAsIHNjb3BlQ2hhaW4sIG5ld0NhbGxGcmFtZS0+YWRkSG9zdENhbGxGcmFtZUZs
YWcoKSwgMCwgYXJnYywgZnVuY3Rpb24pOwogCiAgICAgUHJvZmlsZXIqKiBwcm9maWxlciA9IFBy
b2ZpbGVyOjplbmFibGVkUHJvZmlsZXJSZWZlcmVuY2UoKTsKICAgICBpZiAoKnByb2ZpbGVyKQot
ICAgICAgICAoKnByb2ZpbGVyKS0+d2lsbEV4ZWN1dGUoZXhlYywgZnVuY3Rpb24pOworICAgICAg
ICAoKnByb2ZpbGVyKS0+d2lsbEV4ZWN1dGUoY2FsbEZyYW1lLCBmdW5jdGlvbik7CiAKICAgICBt
X3JlZW50cnlEZXB0aCsrOwogI2lmIEVOQUJMRShDVEkpCiAgICAgaWYgKCFjb2RlQmxvY2stPmN0
aUNvZGUpCi0gICAgICAgIENUSTo6Y29tcGlsZSh0aGlzLCBleGVjLCBjb2RlQmxvY2spOwotICAg
IEpTVmFsdWUqIHJlc3VsdCA9IENUSTo6ZXhlY3V0ZShjb2RlQmxvY2stPmN0aUNvZGUsICZtX3Jl
Z2lzdGVyRmlsZSwgciwgc2NvcGVDaGFpbi0+Z2xvYmFsRGF0YSwgZXhjZXB0aW9uKTsKKyAgICAg
ICAgQ1RJOjpjb21waWxlKHRoaXMsIGNhbGxGcmFtZSwgY29kZUJsb2NrKTsKKyAgICBKU1ZhbHVl
KiByZXN1bHQgPSBDVEk6OmV4ZWN1dGUoY29kZUJsb2NrLT5jdGlDb2RlLCAmbV9yZWdpc3RlckZp
bGUsIGNhbGxGcmFtZSwgc2NvcGVDaGFpbi0+Z2xvYmFsRGF0YSwgZXhjZXB0aW9uKTsKICNlbHNl
Ci0gICAgSlNWYWx1ZSogcmVzdWx0ID0gcHJpdmF0ZUV4ZWN1dGUoTm9ybWFsLCAmbV9yZWdpc3Rl
ckZpbGUsIHIsIGV4Y2VwdGlvbik7CisgICAgSlNWYWx1ZSogcmVzdWx0ID0gcHJpdmF0ZUV4ZWN1
dGUoTm9ybWFsLCAmbV9yZWdpc3RlckZpbGUsIGNhbGxGcmFtZSwgZXhjZXB0aW9uKTsKICNlbmRp
ZgogICAgIG1fcmVlbnRyeURlcHRoLS07CiAKQEAgLTEwMDYsMjEgKzk5NCwyMSBAQCBKU1ZhbHVl
KiBNYWNoaW5lOjpleGVjdXRlKEZ1bmN0aW9uQm9keU5vCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0K
IAotSlNWYWx1ZSogTWFjaGluZTo6ZXhlY3V0ZShFdmFsTm9kZSogZXZhbE5vZGUsIEV4ZWNTdGF0
ZSogZXhlYywgSlNPYmplY3QqIHRoaXNPYmosIFNjb3BlQ2hhaW5Ob2RlKiBzY29wZUNoYWluLCBK
U1ZhbHVlKiogZXhjZXB0aW9uKQorSlNWYWx1ZSogTWFjaGluZTo6ZXhlY3V0ZShFdmFsTm9kZSog
ZXZhbE5vZGUsIENhbGxGcmFtZSogY2FsbEZyYW1lLCBKU09iamVjdCogdGhpc09iaiwgU2NvcGVD
aGFpbk5vZGUqIHNjb3BlQ2hhaW4sIEpTVmFsdWUqKiBleGNlcHRpb24pCiB7Ci0gICAgcmV0dXJu
IGV4ZWN1dGUoZXZhbE5vZGUsIGV4ZWMsIHRoaXNPYmosIG1fcmVnaXN0ZXJGaWxlLnNpemUoKSAr
IGV2YWxOb2RlLT5ieXRlQ29kZShzY29wZUNoYWluKS5udW1QYXJhbWV0ZXJzICsgUmVnaXN0ZXJG
aWxlOjpDYWxsRnJhbWVIZWFkZXJTaXplLCBzY29wZUNoYWluLCBleGNlcHRpb24pOworICAgIHJl
dHVybiBleGVjdXRlKGV2YWxOb2RlLCBjYWxsRnJhbWUsIHRoaXNPYmosIG1fcmVnaXN0ZXJGaWxl
LnNpemUoKSArIGV2YWxOb2RlLT5ieXRlQ29kZShzY29wZUNoYWluKS5udW1QYXJhbWV0ZXJzICsg
UmVnaXN0ZXJGaWxlOjpDYWxsRnJhbWVIZWFkZXJTaXplLCBzY29wZUNoYWluLCBleGNlcHRpb24p
OwogfQogCi1KU1ZhbHVlKiBNYWNoaW5lOjpleGVjdXRlKEV2YWxOb2RlKiBldmFsTm9kZSwgRXhl
Y1N0YXRlKiBleGVjLCBKU09iamVjdCogdGhpc09iaiwgaW50IHJlZ2lzdGVyT2Zmc2V0LCBTY29w
ZUNoYWluTm9kZSogc2NvcGVDaGFpbiwgSlNWYWx1ZSoqIGV4Y2VwdGlvbikKK0pTVmFsdWUqIE1h
Y2hpbmU6OmV4ZWN1dGUoRXZhbE5vZGUqIGV2YWxOb2RlLCBDYWxsRnJhbWUqIGNhbGxGcmFtZSwg
SlNPYmplY3QqIHRoaXNPYmosIGludCByZWdpc3Rlck9mZnNldCwgU2NvcGVDaGFpbk5vZGUqIHNj
b3BlQ2hhaW4sIEpTVmFsdWUqKiBleGNlcHRpb24pCiB7Ci0gICAgQVNTRVJUKCFleGVjLT5oYWRF
eGNlcHRpb24oKSk7CisgICAgQVNTRVJUKCFzY29wZUNoYWluLT5nbG9iYWxEYXRhLT5leGNlcHRp
b24pOwogCiAgICAgaWYgKG1fcmVlbnRyeURlcHRoID49IE1heFJlZW50cnlEZXB0aCkgewotICAg
ICAgICAqZXhjZXB0aW9uID0gY3JlYXRlU3RhY2tPdmVyZmxvd0Vycm9yKGV4ZWMpOworICAgICAg
ICAqZXhjZXB0aW9uID0gY3JlYXRlU3RhY2tPdmVyZmxvd0Vycm9yKGNhbGxGcmFtZSk7CiAgICAg
ICAgIHJldHVybiBqc051bGwoKTsKICAgICB9CiAKLSAgICBEeW5hbWljR2xvYmFsT2JqZWN0U2Nv
cGUgZ2xvYmFsT2JqZWN0U2NvcGUoZXhlYywgZXhlYy0+Z2xvYmFsRGF0YSgpLmR5bmFtaWNHbG9i
YWxPYmplY3QgPyBleGVjLT5nbG9iYWxEYXRhKCkuZHluYW1pY0dsb2JhbE9iamVjdCA6IHNjb3Bl
Q2hhaW4tPmdsb2JhbE9iamVjdCgpKTsKKyAgICBEeW5hbWljR2xvYmFsT2JqZWN0U2NvcGUgZ2xv
YmFsT2JqZWN0U2NvcGUoY2FsbEZyYW1lLCBjYWxsRnJhbWUtPmdsb2JhbERhdGEoKS5keW5hbWlj
R2xvYmFsT2JqZWN0ID8gY2FsbEZyYW1lLT5nbG9iYWxEYXRhKCkuZHluYW1pY0dsb2JhbE9iamVj
dCA6IHNjb3BlQ2hhaW4tPmdsb2JhbE9iamVjdCgpKTsKIAogICAgIEV2YWxDb2RlQmxvY2sqIGNv
ZGVCbG9jayA9ICZldmFsTm9kZS0+Ynl0ZUNvZGUoc2NvcGVDaGFpbik7CiAKQEAgLTEwNDEsOSAr
MTAyOSw5IEBAIEpTVmFsdWUqIE1hY2hpbmU6OmV4ZWN1dGUoRXZhbE5vZGUqIGV2YWwKICAgICAg
ICAgTm9kZTo6VmFyU3RhY2s6OmNvbnN0X2l0ZXJhdG9yIHZhclN0YWNrRW5kID0gdmFyU3RhY2su
ZW5kKCk7CiAgICAgICAgIGZvciAoTm9kZTo6VmFyU3RhY2s6OmNvbnN0X2l0ZXJhdG9yIGl0ID0g
dmFyU3RhY2suYmVnaW4oKTsgaXQgIT0gdmFyU3RhY2tFbmQ7ICsraXQpIHsKICAgICAgICAgICAg
IGNvbnN0IElkZW50aWZpZXImIGlkZW50ID0gKCppdCkuZmlyc3Q7Ci0gICAgICAgICAgICBpZiAo
IXZhcmlhYmxlT2JqZWN0LT5oYXNQcm9wZXJ0eShleGVjLCBpZGVudCkpIHsKKyAgICAgICAgICAg
IGlmICghdmFyaWFibGVPYmplY3QtPmhhc1Byb3BlcnR5KGNhbGxGcmFtZSwgaWRlbnQpKSB7CiAg
ICAgICAgICAgICAgICAgUHV0UHJvcGVydHlTbG90IHNsb3Q7Ci0gICAgICAgICAgICAgICAgdmFy
aWFibGVPYmplY3QtPnB1dChleGVjLCBpZGVudCwganNVbmRlZmluZWQoKSwgc2xvdCk7CisgICAg
ICAgICAgICAgICAgdmFyaWFibGVPYmplY3QtPnB1dChjYWxsRnJhbWUsIGlkZW50LCBqc1VuZGVm
aW5lZCgpLCBzbG90KTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogCkBAIC0xMDUxLDcgKzEw
MzksNyBAQCBKU1ZhbHVlKiBNYWNoaW5lOjpleGVjdXRlKEV2YWxOb2RlKiBldmFsCiAgICAgICAg
IE5vZGU6OkZ1bmN0aW9uU3RhY2s6OmNvbnN0X2l0ZXJhdG9yIGZ1bmN0aW9uU3RhY2tFbmQgPSBm
dW5jdGlvblN0YWNrLmVuZCgpOwogICAgICAgICBmb3IgKE5vZGU6OkZ1bmN0aW9uU3RhY2s6OmNv
bnN0X2l0ZXJhdG9yIGl0ID0gZnVuY3Rpb25TdGFjay5iZWdpbigpOyBpdCAhPSBmdW5jdGlvblN0
YWNrRW5kOyArK2l0KSB7CiAgICAgICAgICAgICBQdXRQcm9wZXJ0eVNsb3Qgc2xvdDsKLSAgICAg
ICAgICAgIHZhcmlhYmxlT2JqZWN0LT5wdXQoZXhlYywgKCppdCktPm1faWRlbnQsICgqaXQpLT5t
YWtlRnVuY3Rpb24oZXhlYywgc2NvcGVDaGFpbiksIHNsb3QpOworICAgICAgICAgICAgdmFyaWFi
bGVPYmplY3QtPnB1dChjYWxsRnJhbWUsICgqaXQpLT5tX2lkZW50LCAoKml0KS0+bWFrZUZ1bmN0
aW9uKGNhbGxGcmFtZSwgc2NvcGVDaGFpbiksIHNsb3QpOwogICAgICAgICB9CiAKICAgICB9CkBA
IC0xMDU5LDcwICsxMDQ3LDY2IEBAIEpTVmFsdWUqIE1hY2hpbmU6OmV4ZWN1dGUoRXZhbE5vZGUq
IGV2YWwKICAgICBSZWdpc3Rlciogb2xkRW5kID0gbV9yZWdpc3RlckZpbGUuZW5kKCk7CiAgICAg
UmVnaXN0ZXIqIG5ld0VuZCA9IG1fcmVnaXN0ZXJGaWxlLnN0YXJ0KCkgKyByZWdpc3Rlck9mZnNl
dCArIGNvZGVCbG9jay0+bnVtQ2FsbGVlUmVnaXN0ZXJzOwogICAgIGlmICghbV9yZWdpc3RlckZp
bGUuZ3JvdyhuZXdFbmQpKSB7Ci0gICAgICAgICpleGNlcHRpb24gPSBjcmVhdGVTdGFja092ZXJm
bG93RXJyb3IoZXhlYyk7CisgICAgICAgICpleGNlcHRpb24gPSBjcmVhdGVTdGFja092ZXJmbG93
RXJyb3IoY2FsbEZyYW1lKTsKICAgICAgICAgcmV0dXJuIGpzTnVsbCgpOwogICAgIH0KIAotICAg
IFJlZ2lzdGVyKiByID0gbV9yZWdpc3RlckZpbGUuc3RhcnQoKSArIHJlZ2lzdGVyT2Zmc2V0Owor
ICAgIENhbGxGcmFtZSogbmV3Q2FsbEZyYW1lID0gQ2FsbEZyYW1lOjpjcmVhdGUobV9yZWdpc3Rl
ckZpbGUuc3RhcnQoKSArIHJlZ2lzdGVyT2Zmc2V0KTsKIAogICAgIC8vIGEgMCBjb2RlQmxvY2sg
aW5kaWNhdGVzIGEgYnVpbHQtaW4gY2FsbGVyCi0gICAgcltjb2RlQmxvY2stPnRoaXNSZWdpc3Rl
cl0gPSB0aGlzT2JqOwotICAgIGluaXRpYWxpemVDYWxsRnJhbWUociwgY29kZUJsb2NrLCAwLCBz
Y29wZUNoYWluLCBtYWtlSG9zdENhbGxGcmFtZVBvaW50ZXIoZXhlYy0+cmVnaXN0ZXJzKCkpLCAw
LCAwLCAwKTsKKyAgICBuZXdDYWxsRnJhbWVbY29kZUJsb2NrLT50aGlzUmVnaXN0ZXJdID0gdGhp
c09iajsKKyAgICBuZXdDYWxsRnJhbWUtPmluaXQoY29kZUJsb2NrLCAwLCBzY29wZUNoYWluLCBj
YWxsRnJhbWUtPmFkZEhvc3RDYWxsRnJhbWVGbGFnKCksIDAsIDAsIDApOwogCiAgICAgaWYgKGNv
ZGVCbG9jay0+bmVlZHNGdWxsU2NvcGVDaGFpbikKICAgICAgICAgc2NvcGVDaGFpbiA9IHNjb3Bl
Q2hhaW4tPmNvcHkoKTsKIAogICAgIFByb2ZpbGVyKiogcHJvZmlsZXIgPSBQcm9maWxlcjo6ZW5h
YmxlZFByb2ZpbGVyUmVmZXJlbmNlKCk7CiAgICAgaWYgKCpwcm9maWxlcikKLSAgICAgICAgKCpw
cm9maWxlciktPndpbGxFeGVjdXRlKGV4ZWMsIGV2YWxOb2RlLT5zb3VyY2VVUkwoKSwgZXZhbE5v
ZGUtPmxpbmVObygpKTsKKyAgICAgICAgKCpwcm9maWxlciktPndpbGxFeGVjdXRlKG5ld0NhbGxG
cmFtZSwgZXZhbE5vZGUtPnNvdXJjZVVSTCgpLCBldmFsTm9kZS0+bGluZU5vKCkpOwogCiAgICAg
bV9yZWVudHJ5RGVwdGgrKzsKICNpZiBFTkFCTEUoQ1RJKQogICAgIGlmICghY29kZUJsb2NrLT5j
dGlDb2RlKQotICAgICAgICBDVEk6OmNvbXBpbGUodGhpcywgZXhlYywgY29kZUJsb2NrKTsKLSAg
ICBKU1ZhbHVlKiByZXN1bHQgPSBDVEk6OmV4ZWN1dGUoY29kZUJsb2NrLT5jdGlDb2RlLCAmbV9y
ZWdpc3RlckZpbGUsIHIsIHNjb3BlQ2hhaW4tPmdsb2JhbERhdGEsIGV4Y2VwdGlvbik7CisgICAg
ICAgIENUSTo6Y29tcGlsZSh0aGlzLCBuZXdDYWxsRnJhbWUsIGNvZGVCbG9jayk7CisgICAgSlNW
YWx1ZSogcmVzdWx0ID0gQ1RJOjpleGVjdXRlKGNvZGVCbG9jay0+Y3RpQ29kZSwgJm1fcmVnaXN0
ZXJGaWxlLCBuZXdDYWxsRnJhbWUsIHNjb3BlQ2hhaW4tPmdsb2JhbERhdGEsIGV4Y2VwdGlvbik7
CiAjZWxzZQotICAgIEpTVmFsdWUqIHJlc3VsdCA9IHByaXZhdGVFeGVjdXRlKE5vcm1hbCwgJm1f
cmVnaXN0ZXJGaWxlLCByLCBleGNlcHRpb24pOworICAgIEpTVmFsdWUqIHJlc3VsdCA9IHByaXZh
dGVFeGVjdXRlKE5vcm1hbCwgJm1fcmVnaXN0ZXJGaWxlLCBuZXdDYWxsRnJhbWUsIGV4Y2VwdGlv
bik7CiAjZW5kaWYKICAgICBtX3JlZW50cnlEZXB0aC0tOwogCiAgICAgTUFDSElORV9TQU1QTElO
R19wcml2YXRlRXhlY3V0ZVJldHVybmVkKCk7CiAKICAgICBpZiAoKnByb2ZpbGVyKQotICAgICAg
ICAoKnByb2ZpbGVyKS0+ZGlkRXhlY3V0ZShleGVjLCBldmFsTm9kZS0+c291cmNlVVJMKCksIGV2
YWxOb2RlLT5saW5lTm8oKSk7CisgICAgICAgICgqcHJvZmlsZXIpLT5kaWRFeGVjdXRlKGNhbGxG
cmFtZSwgZXZhbE5vZGUtPnNvdXJjZVVSTCgpLCBldmFsTm9kZS0+bGluZU5vKCkpOwogCiAgICAg
bV9yZWdpc3RlckZpbGUuc2hyaW5rKG9sZEVuZCk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAot
TkVWRVJfSU5MSU5FIHZvaWQgTWFjaGluZTo6ZGVidWcoRXhlY1N0YXRlKiBleGVjLCBSZWdpc3Rl
ciogciwgRGVidWdIb29rSUQgZGVidWdIb29rSUQsIGludCBmaXJzdExpbmUsIGludCBsYXN0TGlu
ZSkKK05FVkVSX0lOTElORSB2b2lkIE1hY2hpbmU6OmRlYnVnKENhbGxGcmFtZSogY2FsbEZyYW1l
LCBEZWJ1Z0hvb2tJRCBkZWJ1Z0hvb2tJRCwgaW50IGZpcnN0TGluZSwgaW50IGxhc3RMaW5lKQog
ewotICAgIERlYnVnZ2VyKiBkZWJ1Z2dlciA9IGV4ZWMtPmR5bmFtaWNHbG9iYWxPYmplY3QoKS0+
ZGVidWdnZXIoKTsKKyAgICBEZWJ1Z2dlciogZGVidWdnZXIgPSBjYWxsRnJhbWUtPmR5bmFtaWNH
bG9iYWxPYmplY3QoKS0+ZGVidWdnZXIoKTsKICAgICBpZiAoIWRlYnVnZ2VyKQogICAgICAgICBy
ZXR1cm47CiAKLSAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IHRoaXMtPmNvZGVCbG9jayhyKTsK
LSAgICBTY29wZUNoYWluTm9kZSogc2NvcGVDaGFpbiA9IHRoaXMtPnNjb3BlQ2hhaW4ocik7Ci0g
ICAgRGVidWdnZXJDYWxsRnJhbWUgZGVidWdnZXJDYWxsRnJhbWUoZXhlYy0+ZHluYW1pY0dsb2Jh
bE9iamVjdCgpLCBjb2RlQmxvY2ssIHNjb3BlQ2hhaW4sIHIsIDApOwotCiAgICAgc3dpdGNoIChk
ZWJ1Z0hvb2tJRCkgewogICAgICAgICBjYXNlIERpZEVudGVyQ2FsbEZyYW1lOgotICAgICAgICAg
ICAgZGVidWdnZXItPmNhbGxFdmVudChkZWJ1Z2dlckNhbGxGcmFtZSwgY29kZUJsb2NrLT5vd25l
ck5vZGUtPnNvdXJjZUlEKCksIGZpcnN0TGluZSk7CisgICAgICAgICAgICBkZWJ1Z2dlci0+Y2Fs
bEV2ZW50KERlYnVnZ2VyQ2FsbEZyYW1lKGNhbGxGcmFtZSwgMCksIGNhbGxGcmFtZS0+Y29kZUJs
b2NrKCktPm93bmVyTm9kZS0+c291cmNlSUQoKSwgZmlyc3RMaW5lKTsKICAgICAgICAgICAgIHJl
dHVybjsKICAgICAgICAgY2FzZSBXaWxsTGVhdmVDYWxsRnJhbWU6Ci0gICAgICAgICAgICBkZWJ1
Z2dlci0+cmV0dXJuRXZlbnQoZGVidWdnZXJDYWxsRnJhbWUsIGNvZGVCbG9jay0+b3duZXJOb2Rl
LT5zb3VyY2VJRCgpLCBsYXN0TGluZSk7CisgICAgICAgICAgICBkZWJ1Z2dlci0+cmV0dXJuRXZl
bnQoRGVidWdnZXJDYWxsRnJhbWUoY2FsbEZyYW1lLCAwKSwgY2FsbEZyYW1lLT5jb2RlQmxvY2so
KS0+b3duZXJOb2RlLT5zb3VyY2VJRCgpLCBsYXN0TGluZSk7CiAgICAgICAgICAgICByZXR1cm47
CiAgICAgICAgIGNhc2UgV2lsbEV4ZWN1dGVTdGF0ZW1lbnQ6Ci0gICAgICAgICAgICBkZWJ1Z2dl
ci0+YXRTdGF0ZW1lbnQoZGVidWdnZXJDYWxsRnJhbWUsIGNvZGVCbG9jay0+b3duZXJOb2RlLT5z
b3VyY2VJRCgpLCBmaXJzdExpbmUpOworICAgICAgICAgICAgZGVidWdnZXItPmF0U3RhdGVtZW50
KERlYnVnZ2VyQ2FsbEZyYW1lKGNhbGxGcmFtZSwgMCksIGNhbGxGcmFtZS0+Y29kZUJsb2NrKCkt
Pm93bmVyTm9kZS0+c291cmNlSUQoKSwgZmlyc3RMaW5lKTsKICAgICAgICAgICAgIHJldHVybjsK
ICAgICAgICAgY2FzZSBXaWxsRXhlY3V0ZVByb2dyYW06Ci0gICAgICAgICAgICBkZWJ1Z2dlci0+
d2lsbEV4ZWN1dGVQcm9ncmFtKGRlYnVnZ2VyQ2FsbEZyYW1lLCBjb2RlQmxvY2stPm93bmVyTm9k
ZS0+c291cmNlSUQoKSwgZmlyc3RMaW5lKTsKKyAgICAgICAgICAgIGRlYnVnZ2VyLT53aWxsRXhl
Y3V0ZVByb2dyYW0oRGVidWdnZXJDYWxsRnJhbWUoY2FsbEZyYW1lLCAwKSwgY2FsbEZyYW1lLT5j
b2RlQmxvY2soKS0+b3duZXJOb2RlLT5zb3VyY2VJRCgpLCBmaXJzdExpbmUpOwogICAgICAgICAg
ICAgcmV0dXJuOwogICAgICAgICBjYXNlIERpZEV4ZWN1dGVQcm9ncmFtOgotICAgICAgICAgICAg
ZGVidWdnZXItPmRpZEV4ZWN1dGVQcm9ncmFtKGRlYnVnZ2VyQ2FsbEZyYW1lLCBjb2RlQmxvY2st
Pm93bmVyTm9kZS0+c291cmNlSUQoKSwgbGFzdExpbmUpOworICAgICAgICAgICAgZGVidWdnZXIt
PmRpZEV4ZWN1dGVQcm9ncmFtKERlYnVnZ2VyQ2FsbEZyYW1lKGNhbGxGcmFtZSwgMCksIGNhbGxG
cmFtZS0+Y29kZUJsb2NrKCktPm93bmVyTm9kZS0+c291cmNlSUQoKSwgbGFzdExpbmUpOwogICAg
ICAgICAgICAgcmV0dXJuOwogICAgICAgICBjYXNlIERpZFJlYWNoQnJlYWtwb2ludDoKLSAgICAg
ICAgICAgIGRlYnVnZ2VyLT5kaWRSZWFjaEJyZWFrcG9pbnQoZGVidWdnZXJDYWxsRnJhbWUsIGNv
ZGVCbG9jay0+b3duZXJOb2RlLT5zb3VyY2VJRCgpLCBsYXN0TGluZSk7CisgICAgICAgICAgICBk
ZWJ1Z2dlci0+ZGlkUmVhY2hCcmVha3BvaW50KERlYnVnZ2VyQ2FsbEZyYW1lKGNhbGxGcmFtZSwg
MCksIGNhbGxGcmFtZS0+Y29kZUJsb2NrKCktPm93bmVyTm9kZS0+c291cmNlSUQoKSwgbGFzdExp
bmUpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgIH0KIH0KQEAgLTEyMTIsMjEgKzExOTYsMjEg
QEAgQUxXQVlTX0lOTElORSBKU1ZhbHVlKiBNYWNoaW5lOjpjaGVja1RpbQogICAgIHJldHVybiAw
OwogfQogCi1ORVZFUl9JTkxJTkUgU2NvcGVDaGFpbk5vZGUqIE1hY2hpbmU6OmNyZWF0ZUV4Y2Vw
dGlvblNjb3BlKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSW5zdHJ1Y3Rpb24qIHZQQywgUmVnaXN0
ZXIqIHIpCitORVZFUl9JTkxJTkUgU2NvcGVDaGFpbk5vZGUqIE1hY2hpbmU6OmNyZWF0ZUV4Y2Vw
dGlvblNjb3BlKENhbGxGcmFtZSogY2FsbEZyYW1lLCBjb25zdCBJbnN0cnVjdGlvbiogdlBDKQog
ewogICAgIGludCBkc3QgPSAoKyt2UEMpLT51Lm9wZXJhbmQ7Ci0gICAgQ29kZUJsb2NrKiBjb2Rl
QmxvY2sgPSB0aGlzLT5jb2RlQmxvY2socik7CisgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBj
YWxsRnJhbWUtPmNvZGVCbG9jaygpOwogICAgIElkZW50aWZpZXImIHByb3BlcnR5ID0gY29kZUJs
b2NrLT5pZGVudGlmaWVyc1soKyt2UEMpLT51Lm9wZXJhbmRdOwotICAgIEpTVmFsdWUqIHZhbHVl
ID0gclsoKyt2UEMpLT51Lm9wZXJhbmRdLmpzVmFsdWUoZXhlYyk7Ci0gICAgSlNPYmplY3QqIHNj
b3BlID0gbmV3IChleGVjKSBKU1N0YXRpY1Njb3BlT2JqZWN0KGV4ZWMsIHByb3BlcnR5LCB2YWx1
ZSwgRG9udERlbGV0ZSk7Ci0gICAgcltkc3RdID0gc2NvcGU7CisgICAgSlNWYWx1ZSogdmFsdWUg
PSBjYWxsRnJhbWVbKCsrdlBDKS0+dS5vcGVyYW5kXS5qc1ZhbHVlKGNhbGxGcmFtZSk7CisgICAg
SlNPYmplY3QqIHNjb3BlID0gbmV3IChjYWxsRnJhbWUpIEpTU3RhdGljU2NvcGVPYmplY3QoY2Fs
bEZyYW1lLCBwcm9wZXJ0eSwgdmFsdWUsIERvbnREZWxldGUpOworICAgIGNhbGxGcmFtZVtkc3Rd
ID0gc2NvcGU7CiAKLSAgICByZXR1cm4gc2NvcGVDaGFpbihyKS0+cHVzaChzY29wZSk7CisgICAg
cmV0dXJuIGNhbGxGcmFtZS0+c2NvcGVDaGFpbigpLT5wdXNoKHNjb3BlKTsKIH0KIAotc3RhdGlj
IFN0cnVjdHVyZUlEQ2hhaW4qIGNhY2hlUHJvdG90eXBlQ2hhaW4oRXhlY1N0YXRlKiBleGVjLCBT
dHJ1Y3R1cmVJRCogc3RydWN0dXJlSUQpCitzdGF0aWMgU3RydWN0dXJlSURDaGFpbiogY2FjaGVQ
cm90b3R5cGVDaGFpbihDYWxsRnJhbWUqIGNhbGxGcmFtZSwgU3RydWN0dXJlSUQqIHN0cnVjdHVy
ZUlEKQogewotICAgIEpTVmFsdWUqIHByb3RvdHlwZSA9IHN0cnVjdHVyZUlELT5wcm90b3R5cGVG
b3JMb29rdXAoZXhlYyk7CisgICAgSlNWYWx1ZSogcHJvdG90eXBlID0gc3RydWN0dXJlSUQtPnBy
b3RvdHlwZUZvckxvb2t1cChjYWxsRnJhbWUpOwogICAgIGlmIChKU0ltbWVkaWF0ZTo6aXNJbW1l
ZGlhdGUocHJvdG90eXBlKSkKICAgICAgICAgcmV0dXJuIDA7CiAgICAgUmVmUHRyPFN0cnVjdHVy
ZUlEQ2hhaW4+IGNoYWluID0gU3RydWN0dXJlSURDaGFpbjo6Y3JlYXRlKHN0YXRpY19jYXN0PEpT
T2JqZWN0Kj4ocHJvdG90eXBlKS0+c3RydWN0dXJlSUQoKSk7CkBAIC0xMjM0LDcgKzEyMTgsNyBA
QCBzdGF0aWMgU3RydWN0dXJlSURDaGFpbiogY2FjaGVQcm90b3R5cGVDCiAgICAgcmV0dXJuIHN0
cnVjdHVyZUlELT5jYWNoZWRQcm90b3R5cGVDaGFpbigpOwogfQogCi1ORVZFUl9JTkxJTkUgdm9p
ZCBNYWNoaW5lOjp0cnlDYWNoZVB1dEJ5SUQoRXhlY1N0YXRlKiBleGVjLCBDb2RlQmxvY2sqIGNv
ZGVCbG9jaywgSW5zdHJ1Y3Rpb24qIHZQQywgSlNWYWx1ZSogYmFzZVZhbHVlLCBjb25zdCBQdXRQ
cm9wZXJ0eVNsb3QmIHNsb3QpCitORVZFUl9JTkxJTkUgdm9pZCBNYWNoaW5lOjp0cnlDYWNoZVB1
dEJ5SUQoQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIENvZGVCbG9jayogY29kZUJsb2NrLCBJbnN0cnVj
dGlvbiogdlBDLCBKU1ZhbHVlKiBiYXNlVmFsdWUsIGNvbnN0IFB1dFByb3BlcnR5U2xvdCYgc2xv
dCkKIHsKICAgICAvLyBSZWN1cnNpdmUgaW52b2NhdGlvbiBtYXkgYWxyZWFkeSBoYXZlIHNwZWNp
YWxpemVkIHRoaXMgaW5zdHJ1Y3Rpb24uCiAgICAgaWYgKHZQQ1swXS51Lm9wY29kZSAhPSBnZXRP
cGNvZGUob3BfcHV0X2J5X2lkKSkKQEAgLTEyODYsNyArMTI3MCw3IEBAIE5FVkVSX0lOTElORSB2
b2lkIE1hY2hpbmU6OnRyeUNhY2hlUHV0QnkKICAgICAgICAgdlBDWzVdID0gc3RydWN0dXJlSUQ7
CiAgICAgICAgIFN0cnVjdHVyZUlEQ2hhaW4qIGNoYWluID0gc3RydWN0dXJlSUQtPmNhY2hlZFBy
b3RvdHlwZUNoYWluKCk7CiAgICAgICAgIGlmICghY2hhaW4pIHsKLSAgICAgICAgICAgIGNoYWlu
ID0gY2FjaGVQcm90b3R5cGVDaGFpbihleGVjLCBzdHJ1Y3R1cmVJRCk7CisgICAgICAgICAgICBj
aGFpbiA9IGNhY2hlUHJvdG90eXBlQ2hhaW4oY2FsbEZyYW1lLCBzdHJ1Y3R1cmVJRCk7CiAgICAg
ICAgICAgICBpZiAoIWNoYWluKSB7CiAgICAgICAgICAgICAgICAgLy8gVGhpcyBoYXBwZW5zIGlm
IHNvbWVvbmUgaGFzIG1hbnVhbGx5IGluc2VydGVkIG51bGwgaW50byB0aGUgcHJvdG90eXBlIGNo
YWluCiAgICAgICAgICAgICAgICAgdlBDWzBdID0gZ2V0T3Bjb2RlKG9wX3B1dF9ieV9pZF9nZW5l
cmljKTsKQEAgLTEzMTEsNyArMTI5NSw3IEBAIE5FVkVSX0lOTElORSB2b2lkIE1hY2hpbmU6OnVu
Y2FjaGVQdXRCeUkKICAgICB2UENbNF0gPSAwOwogfQogCi1ORVZFUl9JTkxJTkUgdm9pZCBNYWNo
aW5lOjp0cnlDYWNoZUdldEJ5SUQoRXhlY1N0YXRlKiBleGVjLCBDb2RlQmxvY2sqIGNvZGVCbG9j
aywgSW5zdHJ1Y3Rpb24qIHZQQywgSlNWYWx1ZSogYmFzZVZhbHVlLCBjb25zdCBJZGVudGlmaWVy
JiBwcm9wZXJ0eU5hbWUsIGNvbnN0IFByb3BlcnR5U2xvdCYgc2xvdCkKK05FVkVSX0lOTElORSB2
b2lkIE1hY2hpbmU6OnRyeUNhY2hlR2V0QnlJRChDYWxsRnJhbWUqIGNhbGxGcmFtZSwgQ29kZUJs
b2NrKiBjb2RlQmxvY2ssIEluc3RydWN0aW9uKiB2UEMsIEpTVmFsdWUqIGJhc2VWYWx1ZSwgY29u
c3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3QpCiB7
CiAgICAgLy8gUmVjdXJzaXZlIGludm9jYXRpb24gbWF5IGFscmVhZHkgaGF2ZSBzcGVjaWFsaXpl
ZCB0aGlzIGluc3RydWN0aW9uLgogICAgIGlmICh2UENbMF0udS5vcGNvZGUgIT0gZ2V0T3Bjb2Rl
KG9wX2dldF9ieV9pZCkpCkBAIC0xMzIzLDEyICsxMzA3LDEyIEBAIE5FVkVSX0lOTElORSB2b2lk
IE1hY2hpbmU6OnRyeUNhY2hlR2V0QnkKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGlm
IChpc0pTQXJyYXkoYmFzZVZhbHVlKSAmJiBwcm9wZXJ0eU5hbWUgPT0gZXhlYy0+cHJvcGVydHlO
YW1lcygpLmxlbmd0aCkgeworICAgIGlmIChpc0pTQXJyYXkoYmFzZVZhbHVlKSAmJiBwcm9wZXJ0
eU5hbWUgPT0gY2FsbEZyYW1lLT5wcm9wZXJ0eU5hbWVzKCkubGVuZ3RoKSB7CiAgICAgICAgIHZQ
Q1swXSA9IGdldE9wY29kZShvcF9nZXRfYXJyYXlfbGVuZ3RoKTsKICAgICAgICAgcmV0dXJuOwog
ICAgIH0KIAotICAgIGlmIChpc0pTU3RyaW5nKGJhc2VWYWx1ZSkgJiYgcHJvcGVydHlOYW1lID09
IGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5sZW5ndGgpIHsKKyAgICBpZiAoaXNKU1N0cmluZyhiYXNl
VmFsdWUpICYmIHByb3BlcnR5TmFtZSA9PSBjYWxsRnJhbWUtPnByb3BlcnR5TmFtZXMoKS5sZW5n
dGgpIHsKICAgICAgICAgdlBDWzBdID0gZ2V0T3Bjb2RlKG9wX2dldF9zdHJpbmdfbGVuZ3RoKTsK
ICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTEzNzAsNyArMTM1NCw3IEBAIE5FVkVSX0lOTElO
RSB2b2lkIE1hY2hpbmU6OnRyeUNhY2hlR2V0QnkKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAot
ICAgIGlmIChzbG90LnNsb3RCYXNlKCkgPT0gc3RydWN0dXJlSUQtPnByb3RvdHlwZUZvckxvb2t1
cChleGVjKSkgeworICAgIGlmIChzbG90LnNsb3RCYXNlKCkgPT0gc3RydWN0dXJlSUQtPnByb3Rv
dHlwZUZvckxvb2t1cChjYWxsRnJhbWUpKSB7CiAgICAgICAgIEFTU0VSVChzbG90LnNsb3RCYXNl
KCktPmlzT2JqZWN0KCkpOwogCiAgICAgICAgIEpTT2JqZWN0KiBiYXNlT2JqZWN0ID0gc3RhdGlj
X2Nhc3Q8SlNPYmplY3QqPihzbG90LnNsb3RCYXNlKCkpOwpAQCAtMTM5NCw3ICsxMzc4LDcgQEAg
TkVWRVJfSU5MSU5FIHZvaWQgTWFjaGluZTo6dHJ5Q2FjaGVHZXRCeQogICAgIHNpemVfdCBjb3Vu
dCA9IDA7CiAgICAgSlNPYmplY3QqIG8gPSBzdGF0aWNfY2FzdDxKU09iamVjdCo+KGJhc2VWYWx1
ZSk7CiAgICAgd2hpbGUgKHNsb3Quc2xvdEJhc2UoKSAhPSBvKSB7Ci0gICAgICAgIEpTVmFsdWUq
IHYgPSBvLT5zdHJ1Y3R1cmVJRCgpLT5wcm90b3R5cGVGb3JMb29rdXAoZXhlYyk7CisgICAgICAg
IEpTVmFsdWUqIHYgPSBvLT5zdHJ1Y3R1cmVJRCgpLT5wcm90b3R5cGVGb3JMb29rdXAoY2FsbEZy
YW1lKTsKIAogICAgICAgICAvLyBJZiB3ZSBkaWRuJ3QgZmluZCBiYXNlIGluIGJhc2VWYWx1ZSdz
IHByb3RvdHlwZSBjaGFpbiwgdGhlbiBiYXNlVmFsdWUKICAgICAgICAgLy8gbXVzdCBiZSBhIHBy
b3h5IGZvciBhbm90aGVyIG9iamVjdC4KQEAgLTE0MTgsNyArMTQwMiw3IEBAIE5FVkVSX0lOTElO
RSB2b2lkIE1hY2hpbmU6OnRyeUNhY2hlR2V0QnkKIAogICAgIFN0cnVjdHVyZUlEQ2hhaW4qIGNo
YWluID0gc3RydWN0dXJlSUQtPmNhY2hlZFByb3RvdHlwZUNoYWluKCk7CiAgICAgaWYgKCFjaGFp
bikKLSAgICAgICAgY2hhaW4gPSBjYWNoZVByb3RvdHlwZUNoYWluKGV4ZWMsIHN0cnVjdHVyZUlE
KTsKKyAgICAgICAgY2hhaW4gPSBjYWNoZVByb3RvdHlwZUNoYWluKGNhbGxGcmFtZSwgc3RydWN0
dXJlSUQpOwogICAgIEFTU0VSVChjaGFpbik7CiAKICAgICB2UENbMF0gPSBnZXRPcGNvZGUob3Bf
Z2V0X2J5X2lkX2NoYWluKTsKQEAgLTE0MzYsNyArMTQyMCw3IEBAIE5FVkVSX0lOTElORSB2b2lk
IE1hY2hpbmU6OnVuY2FjaGVHZXRCeUkKICAgICB2UENbNF0gPSAwOwogfQogCi1KU1ZhbHVlKiBN
YWNoaW5lOjpwcml2YXRlRXhlY3V0ZShFeGVjdXRpb25GbGFnIGZsYWcsIFJlZ2lzdGVyRmlsZSog
cmVnaXN0ZXJGaWxlLCBSZWdpc3RlciogciwgSlNWYWx1ZSoqIGV4Y2VwdGlvbikKK0pTVmFsdWUq
IE1hY2hpbmU6OnByaXZhdGVFeGVjdXRlKEV4ZWN1dGlvbkZsYWcgZmxhZywgUmVnaXN0ZXJGaWxl
KiByZWdpc3RlckZpbGUsIENhbGxGcmFtZSogY2FsbEZyYW1lLCBKU1ZhbHVlKiogZXhjZXB0aW9u
KQogewogICAgIC8vIE9uZS10aW1lIGluaXRpYWxpemF0aW9uIG9mIG91ciBhZGRyZXNzIHRhYmxl
cy4gV2UgaGF2ZSB0byBwdXQgdGhpcyBjb2RlCiAgICAgLy8gaGVyZSBiZWNhdXNlIG91ciBsYWJl
bHMgYXJlIG9ubHkgaW4gc2NvcGUgaW5zaWRlIHRoaXMgZnVuY3Rpb24uCkBAIC0xNDYxLDEzICsx
NDQ1LDExIEBAIEpTVmFsdWUqIE1hY2hpbmU6OnByaXZhdGVFeGVjdXRlKEV4ZWN1dGkKICAgICBB
U1NFUlRfTk9UX1JFQUNIRUQoKTsKICNlbmRpZgogCi0jZGVmaW5lIGV4ZWMgQ2FsbEZyYW1lOjpj
cmVhdGUocikKLQotICAgIEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSA9ICZleGVjLT5nbG9iYWxE
YXRhKCk7CisgICAgSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhID0gJmNhbGxGcmFtZS0+Z2xvYmFs
RGF0YSgpOwogICAgIEpTVmFsdWUqIGV4Y2VwdGlvblZhbHVlID0gMDsKICAgICBJbnN0cnVjdGlv
biogaGFuZGxlclZQQyA9IDA7CiAKLSAgICBJbnN0cnVjdGlvbiogdlBDID0gdGhpcy0+Y29kZUJs
b2NrKHIpLT5pbnN0cnVjdGlvbnMuYmVnaW4oKTsKKyAgICBJbnN0cnVjdGlvbiogdlBDID0gY2Fs
bEZyYW1lLT5jb2RlQmxvY2soKS0+aW5zdHJ1Y3Rpb25zLmJlZ2luKCk7CiAgICAgUHJvZmlsZXIq
KiBlbmFibGVkUHJvZmlsZXJSZWZlcmVuY2UgPSBQcm9maWxlcjo6ZW5hYmxlZFByb2ZpbGVyUmVm
ZXJlbmNlKCk7CiAgICAgdW5zaWduZWQgdGlja0NvdW50ID0gbV90aWNrc1VudGlsTmV4dFRpbWVv
dXRDaGVjayArIDE7CiAKQEAgLTE0ODUsMTMgKzE0NjcsMTMgQEAgSlNWYWx1ZSogTWFjaGluZTo6
cHJpdmF0ZUV4ZWN1dGUoRXhlY3V0aQogCiAjZGVmaW5lIENIRUNLX0ZPUl9USU1FT1VUKCkgXAog
ICAgIGlmICghLS10aWNrQ291bnQpIHsgXAotICAgICAgICBpZiAoKGV4Y2VwdGlvblZhbHVlID0g
Y2hlY2tUaW1lb3V0KGV4ZWMtPmR5bmFtaWNHbG9iYWxPYmplY3QoKSkpKSBcCisgICAgICAgIGlm
ICgoZXhjZXB0aW9uVmFsdWUgPSBjaGVja1RpbWVvdXQoY2FsbEZyYW1lLT5keW5hbWljR2xvYmFs
T2JqZWN0KCkpKSkgXAogICAgICAgICAgICAgZ290byB2bV90aHJvdzsgXAogICAgICAgICB0aWNr
Q291bnQgPSBtX3RpY2tzVW50aWxOZXh0VGltZW91dENoZWNrOyBcCiAgICAgfQogCiAjaWYgSEFW
RShDT01QVVRFRF9HT1RPKQotICAgICNkZWZpbmUgTkVYVF9PUENPREUgTUFDSElORV9TQU1QTElO
R19zYW1wbGUodGhpcy0+Y29kZUJsb2NrKHIpLCB2UEMpOyBnb3RvICp2UEMtPnUub3Bjb2RlCisg
ICAgI2RlZmluZSBORVhUX09QQ09ERSBNQUNISU5FX1NBTVBMSU5HX3NhbXBsZShjYWxsRnJhbWUt
PmNvZGVCbG9jaygpLCB2UEMpOyBnb3RvICp2UEMtPnUub3Bjb2RlCiAjaWYgRFVNUF9PUENPREVf
U1RBVFMKICAgICAjZGVmaW5lIEJFR0lOX09QQ09ERShvcGNvZGUpIG9wY29kZTogT3Bjb2RlU3Rh
dHM6OnJlY29yZEluc3RydWN0aW9uKG9wY29kZSk7CiAjZWxzZQpAQCAtMTQ5OSw3ICsxNDgxLDcg
QEAgSlNWYWx1ZSogTWFjaGluZTo6cHJpdmF0ZUV4ZWN1dGUoRXhlY3V0aQogI2VuZGlmCiAgICAg
TkVYVF9PUENPREU7CiAjZWxzZQotICAgICNkZWZpbmUgTkVYVF9PUENPREUgTUFDSElORV9TQU1Q
TElOR19zYW1wbGUodGhpcy0+Y29kZUJsb2NrKHIpLCB2UEMpOyBjb250aW51ZQorICAgICNkZWZp
bmUgTkVYVF9PUENPREUgTUFDSElORV9TQU1QTElOR19zYW1wbGUoY2FsbEZyYW1lLT5jb2RlQmxv
Y2soKSwgdlBDKTsgY29udGludWUKICNpZiBEVU1QX09QQ09ERV9TVEFUUwogICAgICNkZWZpbmUg
QkVHSU5fT1BDT0RFKG9wY29kZSkgY2FzZSBvcGNvZGU6IE9wY29kZVN0YXRzOjpyZWNvcmRJbnN0
cnVjdGlvbihvcGNvZGUpOwogI2Vsc2UKQEAgLTE1MTYsNyArMTQ5OCw3IEBAIEpTVmFsdWUqIE1h
Y2hpbmU6OnByaXZhdGVFeGVjdXRlKEV4ZWN1dGkKICAgICAgICAgICAgY29uc3RydWN0b3IsIGFu
ZCBwdXRzIHRoZSByZXN1bHQgaW4gcmVnaXN0ZXIgZHN0LgogICAgICAgICAqLwogICAgICAgICBp
bnQgZHN0ID0gKCsrdlBDKS0+dS5vcGVyYW5kOwotICAgICAgICByW2RzdF0gPSBjb25zdHJ1Y3RF
bXB0eU9iamVjdChleGVjKTsKKyAgICAgICAgY2FsbEZyYW1lW2RzdF0gPSBjb25zdHJ1Y3RFbXB0
eU9iamVjdChjYWxsRnJhbWUpOwogCiAgICAgICAgICsrdlBDOwogICAgICAgICBORVhUX09QQ09E
RTsKQEAgLTE1MzIsOCArMTUxNCw4IEBAIEpTVmFsdWUqIE1hY2hpbmU6OnByaXZhdGVFeGVjdXRl
KEV4ZWN1dGkKICAgICAgICAgaW50IGRzdCA9ICgrK3ZQQyktPnUub3BlcmFuZDsKICAgICAgICAg
aW50IGZpcnN0QXJnID0gKCsrdlBDKS0+dS5vcGVyYW5kOwogICAgICAgICBpbnQgYXJnQ291bnQg
PSAoKyt2UEMpLT51Lm9wZXJhbmQ7Ci0gICAgICAgIEFyZ0xpc3QgYXJncyhyICsgZmlyc3RBcmcs
IGFyZ0NvdW50KTsKLSAgICAgICAgcltkc3RdID0gY29uc3RydWN0QXJyYXkoZXhlYywgYXJncyk7
CisgICAgICAgIEFyZ0xpc3QgYXJncyhjYWxsRnJhbWUtPnJlZ2lzdGVycygpICsgZmlyc3RBcmcs
IGFyZ0NvdW50KTsKKyAgICAgICAgY2FsbEZyYW1lW2RzdF0gPSBjb25zdHJ1Y3RBcnJheShjYWxs
RnJhbWUsIGFyZ3MpOwogCiAgICAgICAgICsrdlBDOwogICAgICAgICBORVhUX09QQ09ERTsKQEAg
LTE1NDcsNyArMTUyOSw3IEBAIEpTVmFsdWUqIE1hY2hpbmU6OnByaXZhdGVFeGVjdXRlKEV4ZWN1
dGkKICAgICAgICAgKi8KICAgICAgICAgaW50IGRzdCA9ICgrK3ZQQyktPnUub3BlcmFuZDsKICAg
ICAgICAgaW50IHJlZ0V4cCA9ICgrK3ZQQyktPnUub3BlcmFuZDsKLSAgICAgICAgcltkc3RdID0g
bmV3IChnbG9iYWxEYXRhKSBSZWdFeHBPYmplY3Qoc2NvcGVDaGFpbihyKS0+Z2xvYmFsT2JqZWN0
KCktPnJlZ0V4cFN0cnVjdHVyZSgpLCBjb2RlQmxvY2sociktPnJlZ2V4cHNbcmVnRXhwXSk7Cisg
ICAgICAgIGNhbGxGcmFtZVtkc3RdID0gbmV3IChnbG9iYWxEYXRhKSBSZWdFeHBPYmplY3QoY2Fs
bEZyYW1lLT5zY29wZUNoYWluKCktPmdsb2JhbE9iamVjdCgpLT5yZWdFeHBTdHJ1Y3R1cmUoKSwg
Y2FsbEZyYW1lLT5jb2RlQmxvY2soKS0+cmVnZXhwc1tyZWdFeHBdKTsKIAogICAgICAgICArK3ZQ
QzsKICAgICAgICAgTkVYVF9PUENPREU7CkBAIC0xNTU5LDcgKzE1NDEsNyBAQCBKU1ZhbHVlKiBN
YWNoaW5lOjpwcml2YXRlRXhlY3V0ZShFeGVjdXRpCiAgICAgICAgICovCiAgICAgICAgIGludCBk
c3QgPSAoKyt2UEMpLT51Lm9wZXJhbmQ7CiAgICAgICAgIGludCBzcmMgPSAoKyt2UEMpLT51Lm9w
ZXJhbmQ7Ci0gICAgICAgIHJbZHN0XSA9IHJbc3JjXTsKKyAgICAgICAgY2FsbEZyYW1lW2RzdF0g
PSBjYWxsRnJhbWVbc3JjXTsKIAogICAgICAgICArK3ZQQzsKICAgICAgICAgTkVYVF9PUENPREU7
CkBAIC0xNTcyLDE0ICsxNTU0LDE0IEBAIEpTVmFsdWUqIE1hY2hpbmU6OnByaXZhdGVFeGVjdXRl
KEV4ZWN1dGkKICAgICAgICAgICAgYXMgYSBib29sZWFuIGluIHJlZ2lzdGVyIGRzdC4KICAgICAg
ICAgKi8KICAgICAgICAgaW50IGRzdCA9ICgrK3ZQQyktPnUub3BlcmFuZDsKLSAgICAgICAgSlNW
YWx1ZSogc3JjMSA9IHJbKCsrdlBDKS0+dS5vcGVyYW5kXS5qc1ZhbHVlKGV4ZWMpOwotICAgICAg
ICBKU1ZhbHVlKiBzcmMyID0gclsoKyt2UEMpLT51Lm9wZXJhbmRdLmpzVmFsdWUoZXhlYyk7Cisg
ICAgICAgIEpTVmFsdWUqIHNyYzEgPSBjYWxsRnJhbWVbKCsrdlBDKS0+dS5vcGVyYW5kXS5qc1Zh
bHVlKGNhbGxGcmFtZSk7CisgICAgICAgIEpTVmFsdWUqIHNyYzIgPSBjYWxsRnJhbWVbKCsrdlBD
KS0+dS5vcGVyYW5kXS5qc1ZhbHVlKGNhbGxGcmFtZSk7CiAgICAgICAgIGlmIChKU0ltbWVkaWF0
ZTo6YXJlQm90aEltbWVkaWF0ZU51bWJlcnMoc3JjMSwgc3JjMikpCi0gICAgICAgICAgICByW2Rz
dF0gPSBqc0Jvb2xlYW4ocmVpbnRlcnByZXRfY2FzdDxpbnRwdHJfdD4oc3JjMSkgPT0gcmVpbnRl
cnByZXRfY2FzdDxpbnRwdHJfdD4oc3JjMikpOworICAgICAgICAgICAgY2FsbEZyYW1lW2RzdF0g
PSBqc0Jvb2xlYW4ocmVpbnRlcnByZXRfY2FzdDxpbnRwdHJfdD4oc3JjMSkgPT0gcmVpbnRlcnBy
ZXRfY2FzdDxpbnRwdHJfdD4oc3JjMikpOwogICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIEpT
VmFsdWUqIHJlc3VsdCA9IGpzQm9vbGVhbihlcXVhbFNsb3dDYXNlKGV4ZWMsIHNyYzEsIHNyYzIp
KTsKKyAgICAgICAgICAgIEpTVmFsdWUqIHJlc3VsdCA9IGpzQm9vbGVhbihlcXVhbFNsb3dDYXNl
KGNhbGxGcmFtZSwgc3JjMSwgc3JjMikpOwogICAgICAgICAgICAgVk1fQ0hFQ0tfRVhDRVBUSU9O
KCk7Ci0gICAgICAgICAgICByW2RzdF0gPSByZXN1bHQ7CisgICAgICAgICAgICBjYWxsRnJhbWVb
ZHN0XSA9IHJlc3VsdDsKICAgICAgICAgfQogCiAgICAgICAgICsrdlBDOwpAQCAtMTU5MiwxNSAr
MTU3NCwxNSBAQCBKU1ZhbHVlKiBNYWNoaW5lOjpwcml2YXRlRXhlY3V0ZShFeGVjdXRpCiAgICAg
ICAgICAgIG9wZXJhdG9yLCBhbmQgcHV0cyB0aGUgcmVzdWx0IGFzIGEgYm9vbGVhbiBpbiByZWdp
c3RlciBkc3QuCiAgICAgICAgICovCiAgICAgICAgIGludCBkc3QgPSAoKyt2UEMpLT51Lm9wZXJh
bmQ7Ci0gICAgICAgIEpTVmFsdWUqIHNyYyA9IHJbKCsrdlBDKS0+dS5vcGVyYW5kXS5qc1ZhbHVl
KGV4ZWMpOworICAgICAgICBKU1ZhbHVlKiBzcmMgPSBjYWxsRnJhbWVbKCsrdlBDKS0+dS5vcGVy
YW5kXS5qc1ZhbHVlKGNhbGxGcmFtZSk7CiAKICAgICAgICAgaWYgKHNyYy0+aXNVbmRlZmluZWRP
ck51bGwoKSkgewotICAgICAgICAgICAgcltkc3RdID0ganNCb29sZWFuKHRydWUpOworICAgICAg
ICAgICAgY2FsbEZyYW1lW2RzdF0gPSBqc0Jvb2xlYW4odHJ1ZSk7CiAgICAgICAgICAgICArK3ZQ
QzsKICAgICAgICAgICAgIE5FWFRfT1BDT0RFOwogICAgICAgICB9CiAgICAgICAgIAotICAgICAg
ICByW2RzdF0gPSBqc0Jvb2xlYW4oIUpTSW1tZWRpYXRlOjppc0ltbWVkaWF0ZShzcmMpICYmIHNy
Yy0+YXNDZWxsKCktPnN0cnVjdHVyZUlEKCktPnR5cGVJbmZvKCkubWFzcXVlcmFkZXNBc1VuZGVm
aW5lZCgpKTsKKyAgICAgICAgY2FsbEZyYW1lW2RzdF0gPSBqc0Jvb2xlYW4oIUpTSW1tZWRpYXRl
Ojppc0ltbWVkaWF0ZShzcmMpICYmIHNyYy0+YXNDZWxsKCktPnN0cnVjdHVyZUlEKCktPnR5cGVJ
bmZvKCkubWFzcXVlcmFkZXNBc1VuZGVmaW5lZCgpKTsKICAgICAgICAgKyt2UEM7CiAgICAgICAg
IE5FWFRfT1BDT0RFOwogICAgIH0KQEAgLTE2MTIsMTQgKzE1OTQsMTQgQEAgSlNWYWx1ZSogTWFj
aGluZTo6cHJpdmF0ZUV4ZWN1dGUoRXhlY3V0aQogICAgICAgICAgICByZXN1bHQgYXMgYSBib29s
ZWFuIGluIHJlZ2lzdGVyIGRzdC4KICAgICAgICAgKi8KICAgICAgICAgaW50IGRzdCA9ICgrK3ZQ
QyktPnUub3BlcmFuZDsKLSAgICAgICAgSlNWYWx1ZSogc3JjMSA9IHJbKCsrdlBDKS0+dS5vcGVy
YW5kXS5qc1ZhbHVlKGV4ZWMpOwotICAgICAgICBKU1ZhbHVlKiBzcmMyID0gclsoKyt2UEMpLT51
Lm9wZXJhbmRdLmpzVmFsdWUoZXhlYyk7CisgICAgICAgIEpTVmFsdWUqIHNyYzEgPSBjYWxsRnJh
bWVbKCsrdlBDKS0+dS5vcGVyYW5kXS5qc1ZhbHVlKGNhbGxGcmFtZSk7CisgICAgICAgIEpTVmFs
dWUqIHNyYzIgPSBjYWxsRnJhbWVbKCsrdlBDKS0+dS5vcGVyYW5kXS5qc1ZhbHVlKGNhbGxGcmFt
ZSk7CiAgICAgICAgIGlmIChKU0ltbWVkaWF0ZTo6YXJlQm90aEltbWVkaWF0ZU51bWJlcnMoc3Jj
MSwgc3JjMikpCi0gICAgICAgICAgICByW2RzdF0gPSBqc0Jvb2xlYW4oc3JjMSAhPSBzcmMyKTsK
KyAgICAgICAgICAgIGNhbGxGcmFtZVtkc3RdID0ganNCb29sZWFuKHNyYzEgIT0gc3JjMik7CiAg
ICAgICAgIGVsc2UgewotICAgICAgICAgICAgSlNWYWx1ZSogcmVzdWx0ID0ganNCb29sZWFuKCFl
cXVhbFNsb3dDYXNlKGV4ZWMsIHNyYzEsIHNyYzIpKTsKKyAgICAgICAgICAgIEpTVmFsdWUqIHJl
c3VsdCA9IGpzQm9vbGVhbighZXF1YWxTbG93Q2FzZShjYWxsRnJhbWUsIHNyYzEsIHNyYzIpKTsK
ICAgICAgICAgICAgIFZNX0NIRUNLX0VYQ0VQVElPTigpOwotICAgICAgICAgICAgcltkc3RdID0g
cmVzdWx0OworICAgICAgICAgICAgY2FsbEZyYW1lW2RzdF0gPSByZXN1bHQ7CiAgICAgICAgIH0K
IAogICAgICAgICArK3ZQQzsKQEAgLTE2MzIsMTUgKzE2MTQsMTUgQEAgSlNWYWx1ZSogTWFjaGlu
ZTo6cHJpdmF0ZUV4ZWN1dGUoRXhlY3V0aQogICAgICAgICAgICBvcGVyYXRvciwgYW5kIHB1dHMg
dGhlIHJlc3VsdCBhcyBhIGJvb2xlYW4gaW4gcmVnaXN0ZXIgZHN0LgogICAgICAgICAqLwogICAg
ICAgICBpbnQgZHN0ID0gKCsrdlBDKS0+dS5vcGVyYW5kOwotICAgICAgICBKU1ZhbHVlKiBzcmMg
PSByWygrK3ZQQyktPnUub3BlcmFuZF0uanNWYWx1ZShleGVjKTsKKyAgICAgICAgSlNWYWx1ZSog
c3JjID0gY2FsbEZyYW1lWygrK3ZQQyktPnUub3BlcmFuZF0uanNWYWx1ZShjYWxsRnJhbWUpOwog
CiAgICAgICAgIGlmIChzcmMtPmlzVW5kZWZpbmVkT3JOdWxsKCkpIHsKLSAgICAgICAgICAgIHJb
ZHN0XSA9IGpzQm9vbGVhbihmYWxzZSk7CisgICAgICAgICAgICBjYWxsRnJhbWVbZHN0XSA9IGpz
Qm9vbGVhbihmYWxzZSk7CiAgICAgICAgICAgICArK3ZQQzsKICAgICAgICAgICAgIE5FWFRfT1BD
T0RFOwogICAgICAgICB9CiAgICAgICAgIAotICAgICAgICByW2RzdF0gPSBqc0Jvb2xlYW4oSlNJ
bW1lZGlhdGU6OmlzSW1tZWRpYXRlKHNyYykgfHwgIXN0YXRpY19jYXN0PEpTQ2VsbCo+KHNyYykt
PmFzQ2VsbCgpLT5zdHJ1Y3R1cmVJRCgpLT50eXBlSW5mbygpLm1hc3F1ZXJhZGVzQXNVbmRlZmlu
ZWQoKSk7CisgICAgICAgIGNhbGxGcmFtZVtkc3RdID0ganNCb29sZWFuKEpTSW1tZWRpYXRlOjpp
c0ltbWVkaWF0ZShzcmMpIHx8ICFzdGF0aWNfY2FzdDxKU0NlbGwqPihzcmMpLT5hc0NlbGwoKS0+
c3RydWN0dXJlSUQoKS0+dHlwZUluZm8oKS5tYXNxdWVyYWRlc0FzVW5kZWZpbmVkKCkpOwogICAg
ICAgICArK3ZQQzsKICAgICAgICAgTkVYVF9PUENPREU7CiAgICAgfQpAQCAtMTY1MiwxNCArMTYz
NCwxNCBAQCBKU1ZhbHVlKiBNYWNoaW5lOjpwcml2YXRlRXhlY3V0ZShFeGVjdXRpCiAgICAgICAg
ICAgIHJlc3VsdCBhcyBhIGJvb2xlYW4gaW4gcmVnaXN0ZXIgZHN0LgogICAgICAgICAqLwogICAg
ICAgICBpbnQgZHN0ID0gKCsrdlBDKS0+dS5vcGVyYW5kOwotICAgICAgICBKU1ZhbHVlKiBzcmMx
ID0gclsoKyt2UEMpLT51Lm9wZXJhbmRdLmpzVmFsdWUoZXhlYyk7Ci0gICAgICAgIEpTVmFsdWUq
IHNyYzIgPSByWygrK3ZQQyktPnUub3BlcmFuZF0uanNWYWx1ZShleGVjKTsKKyAgICAgICAgSlNW
YWx1ZSogc3JjMSA9IGNhbGxGcmFtZVsoKyt2UEMpLT51Lm9wZXJhbmRdLmpzVmFsdWUoY2FsbEZy
YW1lKTsKKyAgICAgICAgSlNWYWx1ZSogc3JjMiA9IGNhbGxGcmFtZVsoKyt2UEMpLT51Lm9wZXJh
bmRdLmpzVmFsdWUoY2FsbEZyYW1lKTsKICAgICAgICAgaWYgKEpTSW1tZWRpYXRlOjphcmVCb3Ro
SW1tZWRpYXRlKHNyYzEsIHNyYzIpKQotICAgICAgICAgICAgcltkc3RdID0ganNCb29sZWFuKHJl
aW50ZXJwcmV0X2Nhc3Q8aW50cHRyX3Q+KHNyYzEpID09IHJlaW50ZXJwcmV0X2Nhc3Q8aW50cHRy
X3Q+KHNyYzIpKTsKKyAgICAgICAgICAgIGNhbGxGcmFtZVtkc3RdID0ganNCb29sZWFuKHJlaW50
ZXJwcmV0X2Nhc3Q8aW50cHRyX3Q+KHNyYzEpID09IHJlaW50ZXJwcmV0X2Nhc3Q8aW50cHRyX3Q+
KHNyYzIpKTsKICAgICAgICAgZWxzZSBpZiAoSlNJbW1lZGlhdGU6OmlzRWl0aGVySW1tZWRpYXRl
KHNyYzEsIHNyYzIpICYgKHNyYzEgIT0gSlNJbW1lZGlhdGU6Onplcm9JbW1lZGlhdGUoKSkgJiAo
c3JjMiAhPSBKU0ltbWVkaWF0ZTo6emVyb0ltbWVkaWF0ZSgpKSkKLSAgICAgICAgICAgIHJbZHN0
XSA9IGpzQm9vbGVhbihmYWxzZSk7CisgICAgICAgICAgICBjYWxsRnJhbWVbZHN0XSA9IGpzQm9v
bGVhbihmYWxzZSk7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHJbZHN0XSA9IGpzQm9vbGVh
bihzdHJpY3RFcXVhbFNsb3dDYXNlKHNyYzEsIHNyYzIpKTsKKyAgICAgICAgICAgIGNhbGxGcmFt
ZVtkc3RdID0ganNCb29sZWFuKHN0cmljdEVxdWFsU2xvd0Nhc2Uoc3JjMSwgc3JjMikpOwogCiAg
ICAgICAgICsrdlBDOwogICAgICAgICBORVhUX09QQ09ERTsKQEAgLTE2NzIsMTUgKzE2NTQsMTUg
QEAgSlNWYWx1ZSogTWFjaGluZTo6cHJpdmF0ZUV4ZWN1dGUoRXhlY3V0aQogICAgICAgICAgICBw
dXRzIHRoZSByZXN1bHQgYXMgYSBib29sZWFuIGluIHJlZ2lzdGVyIGRzdC4KICAgICAgICAgKi8K
ICAgICAgICAgaW50IGRzdCA9ICgrK3ZQQyktPnUub3BlcmFuZDsKLSAgICAgICAgSlNWYWx1ZSog
c3JjMSA9IHJbKCsrdlBDKS0+dS5vcGVyYW5kXS5qc1ZhbHVlKGV4ZWMpOwotICAgICAgICBKU1Zh
bHVlKiBzcmMyID0gclsoKyt2UEMpLT51Lm9wZXJhbmRdLmpzVmFsdWUoZXhlYyk7CisgICAgICAg
IEpTVmFsdWUqIHNyYzEgPSBjYWxsRnJhbWVbKCsrdlBDKS0+dS5vcGVyYW5kXS5qc1ZhbHVlKGNh
bGxGcmFtZSk7CisgICAgICAgIEpTVmFsdWUqIHNyYzIgPSBjYWxsRnJhbWVbKCsrdlBDKS0+dS5v
cGVyYW5kXS5qc1ZhbHVlKGNhbGxGcmFtZSk7CiAKICAgICAgICAgaWYgKEpTSW1tZWRpYXRlOjph
cmVCb3RoSW1tZWRpYXRlKHNyYzEsIHNyYzIpKQotICAgICAgICAgICAgcltkc3RdID0ganNCb29s
ZWFuKHJlaW50ZXJwcmV0X2Nhc3Q8aW50cHRyX3Q+KHNyYzEpICE9IHJlaW50ZXJwcmV0X2Nhc3Q8
aW50cHRyX3Q+KHNyYzIpKTsKKyAgICAgICAgICAgIGNhbGxGcmFtZVtkc3RdID0ganNCb29sZWFu
KHJlaW50ZXJwcmV0X2Nhc3Q8aW50cHRyX3Q+KHNyYzEpICE9IHJlaW50ZXJwcmV0X2Nhc3Q8aW50
cHRyX3Q+KHNyYzIpKTsKICAgICAgICAgZWxzZSBpZiAoSlNJbW1lZGlhdGU6OmlzRWl0aGVySW1t
ZWRpYXRlKHNyYzEsIHNyYzIpICYgKHNyYzEgIT0gSlNJbW1lZGlhdGU6Onplcm9JbW1lZGlhdGUo
KSkgJiAoc3JjMiAhPSBKU0ltbWVkaWF0ZTo6emVyb0ltbWVkaWF0ZSgpKSkKLSAgICAgICAgICAg
IHJbZHN0XSA9IGpzQm9vbGVhbih0cnVlKTsKKyAgICAgICAgICAgIGNhbGxGcmFtZVtkc3RdID0g
anNCb29sZWFuKHRydWUpOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICByW2RzdF0gPSBqc0Jv
b2xlYW4oIXN0cmljdEVxdWFsU2xvd0Nhc2Uoc3JjMSwgc3JjMikpOworICAgICAgICAgICAgY2Fs
bEZyYW1lW2RzdF0gPSBqc0Jvb2xlYW4oIXN0cmljdEVxdWFsU2xvd0Nhc2Uoc3JjMSwgc3JjMikp
OwogCiAgICAgICAgICsrdlBDOwogICAgICAgICBORVhUX09QQ09ERTsKQEAgLTE2OTMsMTEgKzE2
NzUsMTEgQEAgSlNWYWx1ZSogTWFjaGluZTo6cHJpdmF0ZUV4ZWN1dGUoRXhlY3V0aQogICAgICAg
ICAgICBhIGJvb2xlYW4gaW4gcmVnaXN0ZXIgZHN0LgogICAgICAgICAqLwogICAgICAgICBpbnQg
ZHN0ID0gKCsrdlBDKS0+dS5vcGVyYW5kOwotICAgICAgICBKU1ZhbHVlKiBzcmMxID0gclsoKyt2
UEMpLT51Lm9wZXJhbmRdLmpzVmFsdWUoZXhlYyk7Ci0gICAgICAgIEpTVmFsdWUqIHNyYzIgPSBy
WygrK3ZQQyktPnUub3BlcmFuZF0uanNWYWx1ZShleGVjKTsKLSAgICAgICAgSlNWYWx1ZSogcmVz
dWx0ID0ganNCb29sZWFuKGpzTGVzcyhleGVjLCBzcmMxLCBzcmMyKSk7CisgICAgICAgIEpTVmFs
dWUqIHNyYzEgPSBjYWxsRnJhbWVbKCsrdlBDKS0+dS5vcGVyYW5kXS5qc1ZhbHVlKGNhbGxGcmFt
ZSk7CisgICAgICAgIEpTVmFsdWUqIHNyYzIgPSBjYWxsRnJhbWVbKCsrdlBDKS0+dS5vcGVyYW5k
XS5qc1ZhbHVlKGNhbGxGcmFtZSk7CisgICAgICAgIEpTVmFsdWUqIHJlc3VsdCA9IGpzQm9vbGVh
bihqc0xlc3MoY2FsbEZyYW1lLCBzcmMxLCBzcmMyKSk7CiAgICAgICAgIFZNX0NIRUNLX0VYQ0VQ
VElPTigpOwotICAgICAgICByW2RzdF0gPSByZXN1bHQ7CisgICAgICAgIGNhbGxGcmFtZVtkc3Rd
ID0gcmVzdWx0OwogCiAgICAgICAgICsrdlBDOwogICAgICAgICBORVhUX09QQ09ERTsKQEAgLTE3
MTAsMTEgKzE2OTIsMTEgQEAgSlNWYWx1ZSogTWFjaGluZTo6cHJpdmF0ZUV4ZWN1dGUoRXhlY3V0
aQogICAgICAgICAgICBwdXRzIHRoZSByZXN1bHQgYXMgYSBib29sZWFuIGluIHJlZ2lzdGVyIGRz
dC4KICAgICAgICAgKi8KICAgICAgICAgaW50IGRzdCA9ICgrK3ZQQyktPnUub3BlcmFuZDsKLSAg
ICAgICAgSlNWYWx1ZSogc3JjMSA9IHJbKCsrdlBDKS0+dS5vcGVyYW5kXS5qc1ZhbHVlKGV4ZWMp
OwotICAgICAgICBKU1ZhbHVlKiBzcmMyID0gclsoKyt2UEMpLT51Lm9wZXJhbmRdLmpzVmFsdWUo
ZXhlYyk7Ci0gICAgICAgIEpTVmFsdWUqIHJlc3VsdCA9IGpzQm9vbGVhbihqc0xlc3NFcShleGVj
LCBzcmMxLCBzcmMyKSk7CisgICAgICAgIEpTVmFsdWUqIHNyYzEgPSBjYWxsRnJhbWVbKCsrdlBD
KS0+dS5vcGVyYW5kXS5qc1ZhbHVlKGNhbGxGcmFtZSk7CisgICAgICAgIEpTVmFsdWUqIHNyYzIg
PSBjYWxsRnJhbWVbKCsrdlBDKS0+dS5vcGVyYW5kXS5qc1ZhbHVlKGNhbGxGcmFtZSk7CisgICAg
ICAgIEpTVmFsdWUqIHJlc3VsdCA9IGpzQm9vbGVhbihqc0xlc3NFcShjYWxsRnJhbWUsIHNyYzEs
IHNyYzIpKTsKICAgICAgICAgVk1fQ0hFQ0tfRVhDRVBUSU9OKCk7Ci0gICAgICAgIHJbZHN0XSA9
IHJlc3VsdDsKKyAgICAgICAgY2FsbEZyYW1lW2RzdF0gPSByZXN1bHQ7CiAKICAgICAgICAgKyt2
UEM7CiAgICAgICAgIE5FWFRfT1BDT0RFOwpAQCAtMTcyNiwxMyArMTcwOCwxMyBAQCBKU1ZhbHVl
KiBNYWNoaW5lOjpwcml2YXRlRXhlY3V0ZShFeGVjdXRpCiAgICAgICAgICAgIGJhY2sgaW4gcmVn
aXN0ZXIgc3JjRHN0LgogICAgICAgICAqLwogICAgICAgICBpbnQgc3JjRHN0ID0gKCsrdlBDKS0+
dS5vcGVyYW5kOwotICAgICAgICBKU1ZhbHVlKiB2ID0gcltzcmNEc3RdLmpzVmFsdWUoZXhlYyk7
CisgICAgICAgIEpTVmFsdWUqIHYgPSBjYWxsRnJhbWVbc3JjRHN0XS5qc1ZhbHVlKGNhbGxGcmFt
ZSk7CiAgICAgICAgIGlmIChKU0ltbWVkaWF0ZTo6Y2FuRG9GYXN0QWRkaXRpdmVPcGVyYXRpb25z
KHYpKQotICAgICAgICAgICAgcltzcmNEc3RdID0gSlNJbW1lZGlhdGU6OmluY0ltbWVkaWF0ZU51
bWJlcih2KTsKKyAgICAgICAgICAgIGNhbGxGcmFtZVtzcmNEc3RdID0gSlNJbW1lZGlhdGU6Omlu
Y0ltbWVkaWF0ZU51bWJlcih2KTsKICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBKU1ZhbHVl
KiByZXN1bHQgPSBqc051bWJlcihleGVjLCB2LT50b051bWJlcihleGVjKSArIDEpOworICAgICAg
ICAgICAgSlNWYWx1ZSogcmVzdWx0ID0ganNOdW1iZXIoY2FsbEZyYW1lLCB2LT50b051bWJlcihj
YWxsRnJhbWUpICsgMSk7CiAgICAgICAgICAgICBWTV9DSEVDS19FWENFUFRJT04oKTsKLSAgICAg
ICAgICAgIHJbc3JjRHN0XSA9IHJlc3VsdDsKKyAgICAgICAgICAgIGNhbGxGcmFtZVtzcmNEc3Rd
ID0gcmVzdWx0OwogICAgICAgICB9CiAKICAgICAgICAgKyt2UEM7CkBAIC0xNzQ1LDEzICsxNzI3
LDEzIEBAIEpTVmFsdWUqIE1hY2hpbmU6OnByaXZhdGVFeGVjdXRlKEV4ZWN1dGkKICAgICAgICAg
ICAgYmFjayBpbiByZWdpc3RlciBzcmNEc3QuCiAgICAgICAgICovCiAgICAgICAgIGludCBzcmNE
c3QgPSAoKyt2UEMpLT51Lm9wZXJhbmQ7Ci0gICAgICAgIEpTVmFsdWUqIHYgPSByW3NyY0RzdF0u
anNWYWx1ZShleGVjKTsKKyAgICAgICAgSlNWYWx1ZSogdiA9IGNhbGxGcmFtZVtzcmNEc3RdLmpz
VmFsdWUoY2FsbEZyYW1lKTsKICAgICAgICAgaWYgKEpTSW1tZWRpYXRlOjpjYW5Eb0Zhc3RBZGRp
dGl2ZU9wZXJhdGlvbnModikpCi0gICAgICAgICAgICByW3NyY0RzdF0gPSBKU0ltbWVkaWF0ZTo6
ZGVjSW1tZWRpYXRlTnVtYmVyKHYpOworICAgICAgICAgICAgY2FsbEZyYW1lW3NyY0RzdF0gPSBK
U0ltbWVkaWF0ZTo6ZGVjSW1tZWRpYXRlTnVtYmVyKHYpOwogICAgICAgICBlbHNlIHsKLSAgICAg
ICAgICAgIEpTVmFsdWUqIHJlc3VsdCA9IGpzTnVtYmVyKGV4ZWMsIHYtPnRvTnVtYmVyKGV4ZWMp
IC0gMSk7CisgICAgICAgICAgICBKU1ZhbHVlKiByZXN1bHQgPSBqc051bWJlcihjYWxsRnJhbWUs
IHYtPnRvTnVtYmVyKGNhbGxGcmFtZSkgLSAxKTsKICAgICAgICAgICAgIFZNX0NIRUNLX0VYQ0VQ
VElPTigpOwotICAgICAgICAgICAgcltzcmNEc3RdID0gcmVzdWx0OworICAgICAgICAgICAgY2Fs
bEZyYW1lW3NyY0RzdF0gPSByZXN1bHQ7CiAgICAgICAgIH0KIAogICAgICAgICArK3ZQQzsKQEAg
LTE3NjYsMTUgKzE3NDgsMTUgQEAgSlNWYWx1ZSogTWFjaGluZTo6cHJpdmF0ZUV4ZWN1dGUoRXhl
Y3V0aQogICAgICAgICAqLwogICAgICAgICBpbnQgZHN0ID0gKCsrdlBDKS0+dS5vcGVyYW5kOwog
ICAgICAgICBpbnQgc3JjRHN0ID0gKCsrdlBDKS0+dS5vcGVyYW5kOwotICAgICAgICBKU1ZhbHVl
KiB2ID0gcltzcmNEc3RdLmpzVmFsdWUoZXhlYyk7CisgICAgICAgIEpTVmFsdWUqIHYgPSBjYWxs
RnJhbWVbc3JjRHN0XS5qc1ZhbHVlKGNhbGxGcmFtZSk7CiAgICAgICAgIGlmIChKU0ltbWVkaWF0
ZTo6Y2FuRG9GYXN0QWRkaXRpdmVPcGVyYXRpb25zKHYpKSB7Ci0gICAgICAgICAgICByW2RzdF0g
PSB2OwotICAgICAgICAgICAgcltzcmNEc3RdID0gSlNJbW1lZGlhdGU6OmluY0ltbWVkaWF0ZU51
bWJlcih2KTsKKyAgICAgICAgICAgIGNhbGxGcmFtZVtkc3RdID0gdjsKKyAgICAgICAgICAgIGNh
bGxGcmFtZVtzcmNEc3RdID0gSlNJbW1lZGlhdGU6OmluY0ltbWVkaWF0ZU51bWJlcih2KTsKICAg
ICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIEpTVmFsdWUqIG51bWJlciA9IHJbc3JjRHN0XS5q
c1ZhbHVlKGV4ZWMpLT50b0pTTnVtYmVyKGV4ZWMpOworICAgICAgICAgICAgSlNWYWx1ZSogbnVt
YmVyID0gY2FsbEZyYW1lW3NyY0RzdF0uanNWYWx1ZShjYWxsRnJhbWUpLT50b0pTTnVtYmVyKGNh
bGxGcmFtZSk7CiAgICAgICAgICAgICBWTV9DSEVDS19FWENFUFRJT04oKTsKLSAgICAgICAgICAg
IHJbZHN0XSA9IG51bWJlcjsKLSAgICAgICAgICAgIHJbc3JjRHN0XSA9IGpzTnVtYmVyKGV4ZWMs
IG51bWJlci0+dW5jaGVja2VkR2V0TnVtYmVyKCkgKyAxKTsKKyAgICAgICAgICAgIGNhbGxGcmFt
ZVtkc3RdID0gbnVtYmVyOworICAgICAgICAgICAgY2FsbEZyYW1lW3NyY0RzdF0gPSBqc051bWJl
cihjYWxsRnJhbWUsIG51bWJlci0+dW5jaGVja2VkR2V0TnVtYmVyKCkgKyAxKTsKICAgICAgICAg
fQogCiAgICAgICAgICsrdlBDOwpAQCAtMTc4OSwxNSArMTc3MSwxNSBAQCBKU1ZhbHVlKiBNYWNo
aW5lOjpwcml2YXRlRXhlY3V0ZShFeGVjdXRpCiAgICAgICAgICovCiAgICAgICAgIGludCBkc3Qg
PSAoKyt2UEMpLT51Lm9wZXJhbmQ7CiAgICAgICAgIGludCBzcmNEc3QgPSAoKyt2UEMpLT51Lm9w
ZXJhbmQ7Ci0gICAgICAgIEpTVmFsdWUqIHYgPSByW3NyY0RzdF0uanNWYWx1ZShleGVjKTsKKyAg
ICAgICAgSlNWYWx1ZSogdiA9IGNhbGxGcmFtZVtzcmNEc3RdLmpzVmFsdWUoY2FsbEZyYW1lKTsK
ICAgICAgICAgaWYgKEpTSW1tZWRpYXRlOjpjYW5Eb0Zhc3RBZGRpdGl2ZU9wZXJhdGlvbnModikp
IHsKLSAgICAgICAgICAgIHJbZHN0XSA9IHY7Ci0gICAgICAgICAgICByW3NyY0RzdF0gPSBKU0lt
bWVkaWF0ZTo6ZGVjSW1tZWRpYXRlTnVtYmVyKHYpOworICAgICAgICAgICAgY2FsbEZyYW1lW2Rz
dF0gPSB2OworICAgICAgICAgICAgY2FsbEZyYW1lW3NyY0RzdF0gPSBKU0ltbWVkaWF0ZTo6ZGVj
SW1tZWRpYXRlTnVtYmVyKHYpOwogICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgSlNWYWx1
ZSogbnVtYmVyID0gcltzcmNEc3RdLmpzVmFsdWUoZXhlYyktPnRvSlNOdW1iZXIoZXhlYyk7Cisg
ICAgICAgICAgICBKU1ZhbHVlKiBudW1iZXIgPSBjYWxsRnJhbWVbc3JjRHN0XS5qc1ZhbHVlKGNh
bGxGcmFtZSktPnRvSlNOdW1iZXIoY2FsbEZyYW1lKTsKICAgICAgICAgICAgIFZNX0NIRUNLX0VY
Q0VQVElPTigpOwotICAgICAgICAgICAgcltkc3RdID0gbnVtYmVyOwotICAgICAgICAgICAgcltz
cmNEc3RdID0ganNOdW1iZXIoZXhlYywgbnVtYmVyLT51bmNoZWNrZWRHZXROdW1iZXIoKSAtIDEp
OworICAgICAgICAgICAgY2FsbEZyYW1lW2RzdF0gPSBudW1iZXI7CisgICAgICAgICAgICBjYWxs
RnJhbWVbc3JjRHN0XSA9IGpzTnVtYmVyKGNhbGxGcmFtZSwgbnVtYmVyLT51bmNoZWNrZWRHZXRO
dW1iZXIoKSAtIDEpOwogICAgICAgICB9CiAKICAgICAgICAgKyt2UEM7CkBAIC0xODExLDEwICsx
NzkzLDEwIEBAIEpTVmFsdWUqIE1hY2hpbmU6OnByaXZhdGVFeGVjdXRlKEV4ZWN1dGkKICAgICAg
ICAgKi8KICAgICAgICAgaW50IGRzdCA9ICgrK3ZQQyktPnUub3BlcmFuZDsKICAgICAgICAgaW50
IHNyYyA9ICgrK3ZQQyktPnUub3BlcmFuZDsKLSAgICAgICAgSlNWYWx1ZSogcmVzdWx0ID0gcltz
cmNdLmpzVmFsdWUoZXhlYyktPnRvSlNOdW1iZXIoZXhlYyk7CisgICAgICAgIEpTVmFsdWUqIHJl
c3VsdCA9IGNhbGxGcmFtZVtzcmNdLmpzVmFsdWUoY2FsbEZyYW1lKS0+dG9KU051bWJlcihjYWxs
RnJhbWUpOwogICAgICAgICBWTV9DSEVDS19FWENFUFRJT04oKTsKIAotICAgICAgICByW2RzdF0g
PSByZXN1bHQ7CisgICAgICAgIGNhbGxGcmFtZVtkc3RdID0gcmVzdWx0OwogCiAgICAgICAgICsr
dlBDOwogICAgICAgICBORVhUX09QQ09ERTsKQEAgLTE4MjYsMTQgKzE4MDgsMTQgQEAgSlNWYWx1
ZSogTWFjaGluZTo6cHJpdmF0ZUV4ZWN1dGUoRXhlY3V0aQogICAgICAgICAgICByZXN1bHQgaW4g
cmVnaXN0ZXIgZHN0LgogICAgICAgICAqLwogICAgICAgICBpbnQgZHN0ID0gKCsrdlBDKS0+dS5v
cGVyYW5kOwotICAgICAgICBKU1ZhbHVlKiBzcmMgPSByWygrK3ZQQyktPnUub3BlcmFuZF0uanNW
YWx1ZShleGVjKTsKKyAgICAgICAgSlNWYWx1ZSogc3JjID0gY2FsbEZyYW1lWygrK3ZQQyktPnUu
b3BlcmFuZF0uanNWYWx1ZShjYWxsRnJhbWUpOwogICAgICAgICBkb3VibGUgdjsKICAgICAgICAg
aWYgKGZhc3RJc051bWJlcihzcmMsIHYpKQotICAgICAgICAgICAgcltkc3RdID0ganNOdW1iZXIo
ZXhlYywgLXYpOworICAgICAgICAgICAgY2FsbEZyYW1lW2RzdF0gPSBqc051bWJlcihjYWxsRnJh
bWUsIC12KTsKICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBKU1ZhbHVlKiByZXN1bHQgPSBq
c051bWJlcihleGVjLCAtc3JjLT50b051bWJlcihleGVjKSk7CisgICAgICAgICAgICBKU1ZhbHVl
KiByZXN1bHQgPSBqc051bWJlcihjYWxsRnJhbWUsIC1zcmMtPnRvTnVtYmVyKGNhbGxGcmFtZSkp
OwogICAgICAgICAgICAgVk1fQ0hFQ0tfRVhDRVBUSU9OKCk7Ci0gICAgICAgICAgICByW2RzdF0g
PSByZXN1bHQ7CisgICAgICAgICAgICBjYWxsRnJhbWVbZHN0XSA9IHJlc3VsdDsKICAgICAgICAg
fQogCiAgICAgICAgICsrdlBDOwpAQCAtMTg0NywxNCArMTgyOSwxNCBAQCBKU1ZhbHVlKiBNYWNo
aW5lOjpwcml2YXRlRXhlY3V0ZShFeGVjdXRpCiAgICAgICAgICAgIG51bWVyaWMgYWRkLCBkZXBl
bmRpbmcgb24gdGhlIHR5cGVzIG9mIHRoZSBvcGVyYW5kcy4pCiAgICAgICAgICovCiAgICAgICAg
IGludCBkc3QgPSAoKyt2UEMpLT51Lm9wZXJhbmQ7Ci0gICAgICAgIEpTVmFsdWUqIHNyYzEgPSBy
WygrK3ZQQyktPnUub3BlcmFuZF0uanNWYWx1ZShleGVjKTsKLSAgICAgICAgSlNWYWx1ZSogc3Jj
MiA9IHJbKCsrdlBDKS0+dS5vcGVyYW5kXS5qc1ZhbHVlKGV4ZWMpOworICAgICAgICBKU1ZhbHVl
KiBzcmMxID0gY2FsbEZyYW1lWygrK3ZQQyktPnUub3BlcmFuZF0uanNWYWx1ZShjYWxsRnJhbWUp
OworICAgICAgICBKU1ZhbHVlKiBzcmMyID0gY2FsbEZyYW1lWygrK3ZQQyktPnUub3BlcmFuZF0u
anNWYWx1ZShjYWxsRnJhbWUpOwogICAgICAgICBpZiAoSlNJbW1lZGlhdGU6OmNhbkRvRmFzdEFk
ZGl0aXZlT3BlcmF0aW9ucyhzcmMxKSAmJiBKU0ltbWVkaWF0ZTo6Y2FuRG9GYXN0QWRkaXRpdmVP
cGVyYXRpb25zKHNyYzIpKQotICAgICAgICAgICAgcltkc3RdID0gSlNJbW1lZGlhdGU6OmFkZElt
bWVkaWF0ZU51bWJlcnMoc3JjMSwgc3JjMik7CisgICAgICAgICAgICBjYWxsRnJhbWVbZHN0XSA9
IEpTSW1tZWRpYXRlOjphZGRJbW1lZGlhdGVOdW1iZXJzKHNyYzEsIHNyYzIpOwogICAgICAgICBl
bHNlIHsKLSAgICAgICAgICAgIEpTVmFsdWUqIHJlc3VsdCA9IGpzQWRkKGV4ZWMsIHNyYzEsIHNy
YzIpOworICAgICAgICAgICAgSlNWYWx1ZSogcmVzdWx0ID0ganNBZGQoY2FsbEZyYW1lLCBzcmMx
LCBzcmMyKTsKICAgICAgICAgICAgIFZNX0NIRUNLX0VYQ0VQVElPTigpOwotICAgICAgICAgICAg
cltkc3RdID0gcmVzdWx0OworICAgICAgICAgICAgY2FsbEZyYW1lW2RzdF0gPSByZXN1bHQ7CiAg
ICAgICAgIH0KICAgICAgICAgdlBDICs9IDI7CiAgICAgICAgIE5FWFRfT1BDT0RFOwpAQCAtMTg2
NiwxNiArMTg0OCwxNiBAQCBKU1ZhbHVlKiBNYWNoaW5lOjpwcml2YXRlRXhlY3V0ZShFeGVjdXRp
CiAgICAgICAgICAgIG51bWJlcnMpLCBhbmQgcHV0cyB0aGUgcHJvZHVjdCBpbiByZWdpc3RlciBk
c3QuCiAgICAgICAgICovCiAgICAgICAgIGludCBkc3QgPSAoKyt2UEMpLT51Lm9wZXJhbmQ7Ci0g
ICAgICAgIEpTVmFsdWUqIHNyYzEgPSByWygrK3ZQQyktPnUub3BlcmFuZF0uanNWYWx1ZShleGVj
KTsKLSAgICAgICAgSlNWYWx1ZSogc3JjMiA9IHJbKCsrdlBDKS0+dS5vcGVyYW5kXS5qc1ZhbHVl
KGV4ZWMpOworICAgICAgICBKU1ZhbHVlKiBzcmMxID0gY2FsbEZyYW1lWygrK3ZQQyktPnUub3Bl
cmFuZF0uanNWYWx1ZShjYWxsRnJhbWUpOworICAgICAgICBKU1ZhbHVlKiBzcmMyID0gY2FsbEZy
YW1lWygrK3ZQQyktPnUub3BlcmFuZF0uanNWYWx1ZShjYWxsRnJhbWUpOwogICAgICAgICBkb3Vi
bGUgbGVmdDsKICAgICAgICAgZG91YmxlIHJpZ2h0OwogICAgICAgICBpZiAoZmFzdElzTnVtYmVy
KHNyYzEsIGxlZnQpICYmIGZhc3RJc051bWJlcihzcmMyLCByaWdodCkpCi0gICAgICAgICAgICBy
W2RzdF0gPSBqc051bWJlcihleGVjLCBsZWZ0ICogcmlnaHQpOworICAgICAgICAgICAgY2FsbEZy
YW1lW2RzdF0gPSBqc051bWJlcihjYWxsRnJhbWUsIGxlZnQgKiByaWdodCk7CiAgICAgICAgIGVs
c2UgewotICAgICAgICAgICAgSlNWYWx1ZSogcmVzdWx0ID0ganNOdW1iZXIoZXhlYywgc3JjMS0+
dG9OdW1iZXIoZXhlYykgKiBzcmMyLT50b051bWJlcihleGVjKSk7CisgICAgICAgICAgICBKU1Zh
bHVlKiByZXN1bHQgPSBqc051bWJlcihjYWxsRnJhbWUsIHNyYzEtPnRvTnVtYmVyKGNhbGxGcmFt
ZSkgKiBzcmMyLT50b051bWJlcihjYWxsRnJhbWUpKTsKICAgICAgICAgICAgIFZNX0NIRUNLX0VY
Q0VQVElPTigpOwotICAgICAgICAgICAgcltkc3RdID0gcmVzdWx0OworICAgICAgICAgICAgY2Fs
bEZyYW1lW2RzdF0gPSByZXN1bHQ7CiAgICAgICAgIH0KIAogICAgICAgICB2UEMgKz0gMjsKQEAg
LTE4ODksMTYgKzE4NzEsMTYgQEAgSlNWYWx1ZSogTWFjaGluZTo6cHJpdmF0ZUV4ZWN1dGUoRXhl
Y3V0aQogICAgICAgICAgICBxdW90aWVudCBpbiByZWdpc3RlciBkc3QuCiAgICAgICAgICovCiAg
ICAgICAgIGludCBkc3QgPSAoKyt2UEMpLT51Lm9wZXJhbmQ7Ci0gICAgICAgIEpTVmFsdWUqIGRp
dmlkZW5kID0gclsoKyt2UEMpLT51Lm9wZXJhbmRdLmpzVmFsdWUoZXhlYyk7Ci0gICAgICAgIEpT
VmFsdWUqIGRpdmlzb3IgPSByWygrK3ZQQyktPnUub3BlcmFuZF0uanNWYWx1ZShleGVjKTsKKyAg
ICAgICAgSlNWYWx1ZSogZGl2aWRlbmQgPSBjYWxsRnJhbWVbKCsrdlBDKS0+dS5vcGVyYW5kXS5q
c1ZhbHVlKGNhbGxGcmFtZSk7CisgICAgICAgIEpTVmFsdWUqIGRpdmlzb3IgPSBjYWxsRnJhbWVb
KCsrdlBDKS0+dS5vcGVyYW5kXS5qc1ZhbHVlKGNhbGxGcmFtZSk7CiAgICAgICAgIGRvdWJsZSBs
ZWZ0OwogICAgICAgICBkb3VibGUgcmlnaHQ7CiAgICAgICAgIGlmIChmYXN0SXNOdW1iZXIoZGl2
aWRlbmQsIGxlZnQpICYmIGZhc3RJc051bWJlcihkaXZpc29yLCByaWdodCkpCi0gICAgICAgICAg
ICByW2RzdF0gPSBqc051bWJlcihleGVjLCBsZWZ0IC8gcmlnaHQpOworICAgICAgICAgICAgY2Fs
bEZyYW1lW2RzdF0gPSBqc051bWJlcihjYWxsRnJhbWUsIGxlZnQgLyByaWdodCk7CiAgICAgICAg
IGVsc2UgewotICAgICAgICAgICAgSlNWYWx1ZSogcmVzdWx0ID0ganNOdW1iZXIoZXhlYywgZGl2
aWRlbmQtPnRvTnVtYmVyKGV4ZWMpIC8gZGl2aXNvci0+dG9OdW1iZXIoZXhlYykpOworICAgICAg
ICAgICAgSlNWYWx1ZSogcmVzdWx0ID0ganNOdW1iZXIoY2FsbEZyYW1lLCBkaXZpZGVuZC0+dG9O
dW1iZXIoY2FsbEZyYW1lKSAvIGRpdmlzb3ItPnRvTnVtYmVyKGNhbGxGcmFtZSkpOwogICAgICAg
ICAgICAgVk1fQ0hFQ0tfRVhDRVBUSU9OKCk7Ci0gICAgICAgICAgICByW2RzdF0gPSByZXN1bHQ7
CisgICAgICAgICAgICBjYWxsRnJhbWVbZHN0XSA9IHJlc3VsdDsKICAgICAgICAgfQogICAgICAg
ICArK3ZQQzsKICAgICAgICAgTkVYVF9PUENPREU7CkBAIC0xOTE0LDE5ICsxODk2LDE5IEBAIEpT
VmFsdWUqIE1hY2hpbmU6OnByaXZhdGVFeGVjdXRlKEV4ZWN1dGkKICAgICAgICAgaW50IGRpdmlk
ZW5kID0gKCsrdlBDKS0+dS5vcGVyYW5kOwogICAgICAgICBpbnQgZGl2aXNvciA9ICgrK3ZQQykt
PnUub3BlcmFuZDsKIAotICAgICAgICBKU1ZhbHVlKiBkaXZpZGVuZFZhbHVlID0gcltkaXZpZGVu
ZF0uanNWYWx1ZShleGVjKTsKLSAgICAgICAgSlNWYWx1ZSogZGl2aXNvclZhbHVlID0gcltkaXZp
c29yXS5qc1ZhbHVlKGV4ZWMpOworICAgICAgICBKU1ZhbHVlKiBkaXZpZGVuZFZhbHVlID0gY2Fs
bEZyYW1lW2RpdmlkZW5kXS5qc1ZhbHVlKGNhbGxGcmFtZSk7CisgICAgICAgIEpTVmFsdWUqIGRp
dmlzb3JWYWx1ZSA9IGNhbGxGcmFtZVtkaXZpc29yXS5qc1ZhbHVlKGNhbGxGcmFtZSk7CiAKICAg
ICAgICAgaWYgKEpTSW1tZWRpYXRlOjphcmVCb3RoSW1tZWRpYXRlTnVtYmVycyhkaXZpZGVuZFZh
bHVlLCBkaXZpc29yVmFsdWUpICYmIGRpdmlzb3JWYWx1ZSAhPSBKU0ltbWVkaWF0ZTo6ZnJvbSgw
KSkgewotICAgICAgICAgICAgcltkc3RdID0gSlNJbW1lZGlhdGU6OmZyb20oSlNJbW1lZGlhdGU6
OmdldFRydW5jYXRlZEludDMyKGRpdmlkZW5kVmFsdWUpICUgSlNJbW1lZGlhdGU6OmdldFRydW5j
YXRlZEludDMyKGRpdmlzb3JWYWx1ZSkpOworICAgICAgICAgICAgY2FsbEZyYW1lW2RzdF0gPSBK
U0ltbWVkaWF0ZTo6ZnJvbShKU0ltbWVkaWF0ZTo6Z2V0VHJ1bmNhdGVkSW50MzIoZGl2aWRlbmRW
YWx1ZSkgJSBKU0ltbWVkaWF0ZTo6Z2V0VHJ1bmNhdGVkSW50MzIoZGl2aXNvclZhbHVlKSk7CiAg
ICAgICAgICAgICArK3ZQQzsKICAgICAgICAgICAgIE5FWFRfT1BDT0RFOwogICAgICAgICB9CiAK
LSAgICAgICAgZG91YmxlIGQgPSBkaXZpZGVuZFZhbHVlLT50b051bWJlcihleGVjKTsKLSAgICAg
ICAgSlNWYWx1ZSogcmVzdWx0ID0ganNOdW1iZXIoZXhlYywgZm1vZChkLCBkaXZpc29yVmFsdWUt
PnRvTnVtYmVyKGV4ZWMpKSk7CisgICAgICAgIGRvdWJsZSBkID0gZGl2aWRlbmRWYWx1ZS0+dG9O
dW1iZXIoY2FsbEZyYW1lKTsKKyAgICAgICAgSlNWYWx1ZSogcmVzdWx0ID0ganNOdW1iZXIoY2Fs
bEZyYW1lLCBmbW9kKGQsIGRpdmlzb3JWYWx1ZS0+dG9OdW1iZXIoY2FsbEZyYW1lKSkpOwogICAg
ICAgICBWTV9DSEVDS19FWENFUFRJT04oKTsKLSAgICAgICAgcltkc3RdID0gcmVzdWx0OworICAg
ICAgICBjYWxsRnJhbWVbZHN0XSA9IHJlc3VsdDsKICAgICAgICAgKyt2UEM7CiAgICAgICAgIE5F
WFRfT1BDT0RFOwogICAgIH0KQEAgLTE5MzgsMTggKzE5MjAsMTggQEAgSlNWYWx1ZSogTWFjaGlu
ZTo6cHJpdmF0ZUV4ZWN1dGUoRXhlY3V0aQogICAgICAgICAgICByZWdpc3RlciBkc3QuCiAgICAg
ICAgICovCiAgICAgICAgIGludCBkc3QgPSAoKyt2UEMpLT51Lm9wZXJhbmQ7Ci0gICAgICAgIEpT
VmFsdWUqIHNyYzEgPSByWygrK3ZQQyktPnUub3BlcmFuZF0uanNWYWx1ZShleGVjKTsKLSAgICAg
ICAgSlNWYWx1ZSogc3JjMiA9IHJbKCsrdlBDKS0+dS5vcGVyYW5kXS5qc1ZhbHVlKGV4ZWMpOwor
ICAgICAgICBKU1ZhbHVlKiBzcmMxID0gY2FsbEZyYW1lWygrK3ZQQyktPnUub3BlcmFuZF0uanNW
YWx1ZShjYWxsRnJhbWUpOworICAgICAgICBKU1ZhbHVlKiBzcmMyID0gY2FsbEZyYW1lWygrK3ZQ
QyktPnUub3BlcmFuZF0uanNWYWx1ZShjYWxsRnJhbWUpOwogICAgICAgICBkb3VibGUgbGVmdDsK
ICAgICAgICAgZG91YmxlIHJpZ2h0OwogICAgICAgICBpZiAoSlNJbW1lZGlhdGU6OmNhbkRvRmFz
dEFkZGl0aXZlT3BlcmF0aW9ucyhzcmMxKSAmJiBKU0ltbWVkaWF0ZTo6Y2FuRG9GYXN0QWRkaXRp
dmVPcGVyYXRpb25zKHNyYzIpKQotICAgICAgICAgICAgcltkc3RdID0gSlNJbW1lZGlhdGU6OnN1
YkltbWVkaWF0ZU51bWJlcnMoc3JjMSwgc3JjMik7CisgICAgICAgICAgICBjYWxsRnJhbWVbZHN0
XSA9IEpTSW1tZWRpYXRlOjpzdWJJbW1lZGlhdGVOdW1iZXJzKHNyYzEsIHNyYzIpOwogICAgICAg
ICBlbHNlIGlmIChmYXN0SXNOdW1iZXIoc3JjMSwgbGVmdCkgJiYgZmFzdElzTnVtYmVyKHNyYzIs
IHJpZ2h0KSkKLSAgICAgICAgICAgIHJbZHN0XSA9IGpzTnVtYmVyKGV4ZWMsIGxlZnQgLSByaWdo
dCk7CisgICAgICAgICAgICBjYWxsRnJhbWVbZHN0XSA9IGpzTnVtYmVyKGNhbGxGcmFtZSwgbGVm
dCAtIHJpZ2h0KTsKICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBKU1ZhbHVlKiByZXN1bHQg
PSBqc051bWJlcihleGVjLCBzcmMxLT50b051bWJlcihleGVjKSAtIHNyYzItPnRvTnVtYmVyKGV4
ZWMpKTsKKyAgICAgICAgICAgIEpTVmFsdWUqIHJlc3VsdCA9IGpzTnVtYmVyKGNhbGxGcmFtZSwg
c3JjMS0+dG9OdW1iZXIoY2FsbEZyYW1lKSAtIHNyYzItPnRvTnVtYmVyKGNhbGxGcmFtZSkpOwog
ICAgICAgICAgICAgVk1fQ0hFQ0tfRVhDRVBUSU9OKCk7Ci0gICAgICAgICAgICByW2RzdF0gPSBy
ZXN1bHQ7CisgICAgICAgICAgICBjYWxsRnJhbWVbZHN0XSA9IHJlc3VsdDsKICAgICAgICAgfQog
ICAgICAgICB2UEMgKz0gMjsKICAgICAgICAgTkVYVF9PUENPREU7CkBAIC0xOTYyLDE4ICsxOTQ0
LDE4IEBAIEpTVmFsdWUqIE1hY2hpbmU6OnByaXZhdGVFeGVjdXRlKEV4ZWN1dGkKICAgICAgICAg
ICAgaW4gcmVnaXN0ZXIgZHN0LgogICAgICAgICAqLwogICAgICAgICBpbnQgZHN0ID0gKCsrdlBD
KS0+dS5vcGVyYW5kOwotICAgICAgICBKU1ZhbHVlKiB2YWwgPSByWygrK3ZQQyktPnUub3BlcmFu
ZF0uanNWYWx1ZShleGVjKTsKLSAgICAgICAgSlNWYWx1ZSogc2hpZnQgPSByWygrK3ZQQyktPnUu
b3BlcmFuZF0uanNWYWx1ZShleGVjKTsKKyAgICAgICAgSlNWYWx1ZSogdmFsID0gY2FsbEZyYW1l
WygrK3ZQQyktPnUub3BlcmFuZF0uanNWYWx1ZShjYWxsRnJhbWUpOworICAgICAgICBKU1ZhbHVl
KiBzaGlmdCA9IGNhbGxGcmFtZVsoKyt2UEMpLT51Lm9wZXJhbmRdLmpzVmFsdWUoY2FsbEZyYW1l
KTsKICAgICAgICAgaW50MzJfdCBsZWZ0OwogICAgICAgICB1aW50MzJfdCByaWdodDsKICAgICAg
ICAgaWYgKEpTSW1tZWRpYXRlOjphcmVCb3RoSW1tZWRpYXRlTnVtYmVycyh2YWwsIHNoaWZ0KSkK
LSAgICAgICAgICAgIHJbZHN0XSA9IGpzTnVtYmVyKGV4ZWMsIEpTSW1tZWRpYXRlOjpnZXRUcnVu
Y2F0ZWRJbnQzMih2YWwpIDw8IChKU0ltbWVkaWF0ZTo6Z2V0VHJ1bmNhdGVkVUludDMyKHNoaWZ0
KSAmIDB4MWYpKTsKKyAgICAgICAgICAgIGNhbGxGcmFtZVtkc3RdID0ganNOdW1iZXIoY2FsbEZy
YW1lLCBKU0ltbWVkaWF0ZTo6Z2V0VHJ1bmNhdGVkSW50MzIodmFsKSA8PCAoSlNJbW1lZGlhdGU6
OmdldFRydW5jYXRlZFVJbnQzMihzaGlmdCkgJiAweDFmKSk7CiAgICAgICAgIGVsc2UgaWYgKGZh
c3RUb0ludDMyKHZhbCwgbGVmdCkgJiYgZmFzdFRvVUludDMyKHNoaWZ0LCByaWdodCkpCi0gICAg
ICAgICAgICByW2RzdF0gPSBqc051bWJlcihleGVjLCBsZWZ0IDw8IChyaWdodCAmIDB4MWYpKTsK
KyAgICAgICAgICAgIGNhbGxGcmFtZVtkc3RdID0ganNOdW1iZXIoY2FsbEZyYW1lLCBsZWZ0IDw8
IChyaWdodCAmIDB4MWYpKTsKICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBKU1ZhbHVlKiBy
ZXN1bHQgPSBqc051bWJlcihleGVjLCAodmFsLT50b0ludDMyKGV4ZWMpKSA8PCAoc2hpZnQtPnRv
VUludDMyKGV4ZWMpICYgMHgxZikpOworICAgICAgICAgICAgSlNWYWx1ZSogcmVzdWx0ID0ganNO
dW1iZXIoY2FsbEZyYW1lLCAodmFsLT50b0ludDMyKGNhbGxGcmFtZSkpIDw8IChzaGlmdC0+dG9V
SW50MzIoY2FsbEZyYW1lKSAmIDB4MWYpKTsKICAgICAgICAgICAgIFZNX0NIRUNLX0VYQ0VQVElP
TigpOwotICAgICAgICAgICAgcltkc3RdID0gcmVzdWx0OworICAgICAgICAgICAgY2FsbEZyYW1l
W2RzdF0gPSByZXN1bHQ7CiAgICAgICAgIH0KIAogICAgICAgICArK3ZQQzsKQEAgLTE5ODcsMTgg
KzE5NjksMTggQEAgSlNWYWx1ZSogTWFjaGluZTo6cHJpdmF0ZUV4ZWN1dGUoRXhlY3V0aQogICAg
ICAgICAgICB1aW50MzIpLCBhbmQgcHV0cyB0aGUgcmVzdWx0IGluIHJlZ2lzdGVyIGRzdC4KICAg
ICAgICAgKi8KICAgICAgICAgaW50IGRzdCA9ICgrK3ZQQyktPnUub3BlcmFuZDsKLSAgICAgICAg
SlNWYWx1ZSogdmFsID0gclsoKyt2UEMpLT51Lm9wZXJhbmRdLmpzVmFsdWUoZXhlYyk7Ci0gICAg
ICAgIEpTVmFsdWUqIHNoaWZ0ID0gclsoKyt2UEMpLT51Lm9wZXJhbmRdLmpzVmFsdWUoZXhlYyk7
CisgICAgICAgIEpTVmFsdWUqIHZhbCA9IGNhbGxGcmFtZVsoKyt2UEMpLT51Lm9wZXJhbmRdLmpz
VmFsdWUoY2FsbEZyYW1lKTsKKyAgICAgICAgSlNWYWx1ZSogc2hpZnQgPSBjYWxsRnJhbWVbKCsr
dlBDKS0+dS5vcGVyYW5kXS5qc1ZhbHVlKGNhbGxGcmFtZSk7CiAgICAgICAgIGludDMyX3QgbGVm
dDsKICAgICAgICAgdWludDMyX3QgcmlnaHQ7CiAgICAgICAgIGlmIChKU0ltbWVkaWF0ZTo6YXJl
Qm90aEltbWVkaWF0ZU51bWJlcnModmFsLCBzaGlmdCkpCi0gICAgICAgICAgICByW2RzdF0gPSBK
U0ltbWVkaWF0ZTo6cmlnaHRTaGlmdEltbWVkaWF0ZU51bWJlcnModmFsLCBzaGlmdCk7CisgICAg
ICAgICAgICBjYWxsRnJhbWVbZHN0XSA9IEpTSW1tZWRpYXRlOjpyaWdodFNoaWZ0SW1tZWRpYXRl
TnVtYmVycyh2YWwsIHNoaWZ0KTsKICAgICAgICAgZWxzZSBpZiAoZmFzdFRvSW50MzIodmFsLCBs
ZWZ0KSAmJiBmYXN0VG9VSW50MzIoc2hpZnQsIHJpZ2h0KSkKLSAgICAgICAgICAgIHJbZHN0XSA9
IGpzTnVtYmVyKGV4ZWMsIGxlZnQgPj4gKHJpZ2h0ICYgMHgxZikpOworICAgICAgICAgICAgY2Fs
bEZyYW1lW2RzdF0gPSBqc051bWJlcihjYWxsRnJhbWUsIGxlZnQgPj4gKHJpZ2h0ICYgMHgxZikp
OwogICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIEpTVmFsdWUqIHJlc3VsdCA9IGpzTnVtYmVy
KGV4ZWMsICh2YWwtPnRvSW50MzIoZXhlYykpID4+IChzaGlmdC0+dG9VSW50MzIoZXhlYykgJiAw
eDFmKSk7CisgICAgICAgICAgICBKU1ZhbHVlKiByZXN1bHQgPSBqc051bWJlcihjYWxsRnJhbWUs
ICh2YWwtPnRvSW50MzIoY2FsbEZyYW1lKSkgPj4gKHNoaWZ0LT50b1VJbnQzMihjYWxsRnJhbWUp
ICYgMHgxZikpOwogICAgICAgICAgICAgVk1fQ0hFQ0tfRVhDRVBUSU9OKCk7Ci0gICAgICAgICAg
ICByW2RzdF0gPSByZXN1bHQ7CisgICAgICAgICAgICBjYWxsRnJhbWVbZHN0XSA9IHJlc3VsdDsK
ICAgICAgICAgfQogCiAgICAgICAgICsrdlBDOwpAQCAtMjAxMiwxNCArMTk5NCwxNCBAQCBKU1Zh
bHVlKiBNYWNoaW5lOjpwcml2YXRlRXhlY3V0ZShFeGVjdXRpCiAgICAgICAgICAgIHVpbnQzMiks
IGFuZCBwdXRzIHRoZSByZXN1bHQgaW4gcmVnaXN0ZXIgZHN0LgogICAgICAgICAqLwogICAgICAg
ICBpbnQgZHN0ID0gKCsrdlBDKS0+dS5vcGVyYW5kOwotICAgICAgICBKU1ZhbHVlKiB2YWwgPSBy
WygrK3ZQQyktPnUub3BlcmFuZF0uanNWYWx1ZShleGVjKTsKLSAgICAgICAgSlNWYWx1ZSogc2hp
ZnQgPSByWygrK3ZQQyktPnUub3BlcmFuZF0uanNWYWx1ZShleGVjKTsKKyAgICAgICAgSlNWYWx1
ZSogdmFsID0gY2FsbEZyYW1lWygrK3ZQQyktPnUub3BlcmFuZF0uanNWYWx1ZShjYWxsRnJhbWUp
OworICAgICAgICBKU1ZhbHVlKiBzaGlmdCA9IGNhbGxGcmFtZVsoKyt2UEMpLT51Lm9wZXJhbmRd
LmpzVmFsdWUoY2FsbEZyYW1lKTsKICAgICAgICAgaWYgKEpTSW1tZWRpYXRlOjphcmVCb3RoSW1t
ZWRpYXRlTnVtYmVycyh2YWwsIHNoaWZ0KSAmJiAhSlNJbW1lZGlhdGU6OmlzTmVnYXRpdmUodmFs
KSkKLSAgICAgICAgICAgIHJbZHN0XSA9IEpTSW1tZWRpYXRlOjpyaWdodFNoaWZ0SW1tZWRpYXRl
TnVtYmVycyh2YWwsIHNoaWZ0KTsKKyAgICAgICAgICAgIGNhbGxGcmFtZVtkc3RdID0gSlNJbW1l
ZGlhdGU6OnJpZ2h0U2hpZnRJbW1lZGlhdGVOdW1iZXJzKHZhbCwgc2hpZnQpOwogICAgICAgICBl
bHNlIHsKLSAgICAgICAgICAgIEpTVmFsdWUqIHJlc3VsdCA9IGpzTnVtYmVyKGV4ZWMsICh2YWwt
PnRvVUludDMyKGV4ZWMpKSA+PiAoc2hpZnQtPnRvVUludDMyKGV4ZWMpICYgMHgxZikpOworICAg
ICAgICAgICAgSlNWYWx1ZSogcmVzdWx0ID0ganNOdW1iZXIoY2FsbEZyYW1lLCAodmFsLT50b1VJ
bnQzMihjYWxsRnJhbWUpKSA+PiAoc2hpZnQtPnRvVUludDMyKGNhbGxGcmFtZSkgJiAweDFmKSk7
CiAgICAgICAgICAgICBWTV9DSEVDS19FWENFUFRJT04oKTsKLSAgICAgICAgICAgIHJbZHN0XSA9
IHJlc3VsdDsKKyAgICAgICAgICAgIGNhbGxGcmFtZVtkc3RdID0gcmVzdWx0OwogICAgICAgICB9
CiAKICAgICAgICAgKyt2UEM7CkBAIC0yMDMzLDE4ICsyMDE1LDE4IEBAIEpTVmFsdWUqIE1hY2hp
bmU6OnByaXZhdGVFeGVjdXRlKEV4ZWN1dGkKICAgICAgICAgICAgaW4gcmVnaXN0ZXIgZHN0Lgog
ICAgICAgICAqLwogICAgICAgICBpbnQgZHN0ID0gKCsrdlBDKS0+dS5vcGVyYW5kOwotICAgICAg
ICBKU1ZhbHVlKiBzcmMxID0gclsoKyt2UEMpLT51Lm9wZXJhbmRdLmpzVmFsdWUoZXhlYyk7Ci0g
ICAgICAgIEpTVmFsdWUqIHNyYzIgPSByWygrK3ZQQyktPnUub3BlcmFuZF0uanNWYWx1ZShleGVj
KTsKKyAgICAgICAgSlNWYWx1ZSogc3JjMSA9IGNhbGxGcmFtZVsoKyt2UEMpLT51Lm9wZXJhbmRd
LmpzVmFsdWUoY2FsbEZyYW1lKTsKKyAgICAgICAgSlNWYWx1ZSogc3JjMiA9IGNhbGxGcmFtZVso
Kyt2UEMpLT51Lm9wZXJhbmRdLmpzVmFsdWUoY2FsbEZyYW1lKTsKICAgICAgICAgaW50MzJfdCBs
ZWZ0OwogICAgICAgICBpbnQzMl90IHJpZ2h0OwogICAgICAgICBpZiAoSlNJbW1lZGlhdGU6OmFy
ZUJvdGhJbW1lZGlhdGVOdW1iZXJzKHNyYzEsIHNyYzIpKQotICAgICAgICAgICAgcltkc3RdID0g
SlNJbW1lZGlhdGU6OmFuZEltbWVkaWF0ZU51bWJlcnMoc3JjMSwgc3JjMik7CisgICAgICAgICAg
ICBjYWxsRnJhbWVbZHN0XSA9IEpTSW1tZWRpYXRlOjphbmRJbW1lZGlhdGVOdW1iZXJzKHNyYzEs
IHNyYzIpOwogICAgICAgICBlbHNlIGlmIChmYXN0VG9JbnQzMihzcmMxLCBsZWZ0KSAmJiBmYXN0
VG9JbnQzMihzcmMyLCByaWdodCkpCi0gICAgICAgICAgICByW2RzdF0gPSBqc051bWJlcihleGVj
LCBsZWZ0ICYgcmlnaHQpOworICAgICAgICAgICAgY2FsbEZyYW1lW2RzdF0gPSBqc051bWJlcihj
YWxsRnJhbWUsIGxlZnQgJiByaWdodCk7CiAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgSlNW
YWx1ZSogcmVzdWx0ID0ganNOdW1iZXIoZXhlYywgc3JjMS0+dG9JbnQzMihleGVjKSAmIHNyYzIt
PnRvSW50MzIoZXhlYykpOworICAgICAgICAgICAgSlNWYWx1ZSogcmVzdWx0ID0ganNOdW1iZXIo
Y2FsbEZyYW1lLCBzcmMxLT50b0ludDMyKGNhbGxGcmFtZSkgJiBzcmMyLT50b0ludDMyKGNhbGxG
cmFtZSkpOwogICAgICAgICAgICAgVk1fQ0hFQ0tfRVhDRVBUSU9OKCk7Ci0gICAgICAgICAgICBy
W2RzdF0gPSByZXN1bHQ7CisgICAgICAgICAgICBjYWxsRnJhbWVbZHN0XSA9IHJlc3VsdDsKICAg
ICAgICAgfQogCiAgICAgICAgIHZQQyArPSAyOwpAQCAtMjA1OCwxOCArMjA0MCwxOCBAQCBKU1Zh
bHVlKiBNYWNoaW5lOjpwcml2YXRlRXhlY3V0ZShFeGVjdXRpCiAgICAgICAgICAgIGluIHJlZ2lz
dGVyIGRzdC4KICAgICAgICAgKi8KICAgICAgICAgaW50IGRzdCA9ICgrK3ZQQyktPnUub3BlcmFu
ZDsKLSAgICAgICAgSlNWYWx1ZSogc3JjMSA9IHJbKCsrdlBDKS0+dS5vcGVyYW5kXS5qc1ZhbHVl
KGV4ZWMpOwotICAgICAgICBKU1ZhbHVlKiBzcmMyID0gclsoKyt2UEMpLT51Lm9wZXJhbmRdLmpz
VmFsdWUoZXhlYyk7CisgICAgICAgIEpTVmFsdWUqIHNyYzEgPSBjYWxsRnJhbWVbKCsrdlBDKS0+
dS5vcGVyYW5kXS5qc1ZhbHVlKGNhbGxGcmFtZSk7CisgICAgICAgIEpTVmFsdWUqIHNyYzIgPSBj
YWxsRnJhbWVbKCsrdlBDKS0+dS5vcGVyYW5kXS5qc1ZhbHVlKGNhbGxGcmFtZSk7CiAgICAgICAg
IGludDMyX3QgbGVmdDsKICAgICAgICAgaW50MzJfdCByaWdodDsKICAgICAgICAgaWYgKEpTSW1t
ZWRpYXRlOjphcmVCb3RoSW1tZWRpYXRlTnVtYmVycyhzcmMxLCBzcmMyKSkKLSAgICAgICAgICAg
IHJbZHN0XSA9IEpTSW1tZWRpYXRlOjp4b3JJbW1lZGlhdGVOdW1iZXJzKHNyYzEsIHNyYzIpOwor
ICAgICAgICAgICAgY2FsbEZyYW1lW2RzdF0gPSBKU0ltbWVkaWF0ZTo6eG9ySW1tZWRpYXRlTnVt
YmVycyhzcmMxLCBzcmMyKTsKICAgICAgICAgZWxzZSBpZiAoZmFzdFRvSW50MzIoc3JjMSwgbGVm
dCkgJiYgZmFzdFRvSW50MzIoc3JjMiwgcmlnaHQpKQotICAgICAgICAgICAgcltkc3RdID0ganNO
dW1iZXIoZXhlYywgbGVmdCBeIHJpZ2h0KTsKKyAgICAgICAgICAgIGNhbGxGcmFtZVtkc3RdID0g
anNOdW1iZXIoY2FsbEZyYW1lLCBsZWZ0IF4gcmlnaHQpOwogICAgICAgICBlbHNlIHsKLSAgICAg
ICAgICAgIEpTVmFsdWUqIHJlc3VsdCA9IGpzTnVtYmVyKGV4ZWMsIHNyYzEtPnRvSW50MzIoZXhl
YykgXiBzcmMyLT50b0ludDMyKGV4ZWMpKTsKKyAgICAgICAgICAgIEpTVmFsdWUqIHJlc3VsdCA9
IGpzTnVtYmVyKGNhbGxGcmFtZSwgc3JjMS0+dG9JbnQzMihjYWxsRnJhbWUpIF4gc3JjMi0+dG9J
bnQzMihjYWxsRnJhbWUpKTsKICAgICAgICAgICAgIFZNX0NIRUNLX0VYQ0VQVElPTigpOwotICAg
ICAgICAgICAgcltkc3RdID0gcmVzdWx0OworICAgICAgICAgICAgY2FsbEZyYW1lW2RzdF0gPSBy
ZXN1bHQ7CiAgICAgICAgIH0KIAogICAgICAgICB2UEMgKz0gMjsKQEAgLTIwODMsMTggKzIwNjUs
MTggQEAgSlNWYWx1ZSogTWFjaGluZTo6cHJpdmF0ZUV4ZWN1dGUoRXhlY3V0aQogICAgICAgICAg
ICByZXN1bHQgaW4gcmVnaXN0ZXIgZHN0LgogICAgICAgICAqLwogICAgICAgICBpbnQgZHN0ID0g
KCsrdlBDKS0+dS5vcGVyYW5kOwotICAgICAgICBKU1ZhbHVlKiBzcmMxID0gclsoKyt2UEMpLT51
Lm9wZXJhbmRdLmpzVmFsdWUoZXhlYyk7Ci0gICAgICAgIEpTVmFsdWUqIHNyYzIgPSByWygrK3ZQ
QyktPnUub3BlcmFuZF0uanNWYWx1ZShleGVjKTsKKyAgICAgICAgSlNWYWx1ZSogc3JjMSA9IGNh
bGxGcmFtZVsoKyt2UEMpLT51Lm9wZXJhbmRdLmpzVmFsdWUoY2FsbEZyYW1lKTsKKyAgICAgICAg
SlNWYWx1ZSogc3JjMiA9IGNhbGxGcmFtZVsoKyt2UEMpLT51Lm9wZXJhbmRdLmpzVmFsdWUoY2Fs
bEZyYW1lKTsKICAgICAgICAgaW50MzJfdCBsZWZ0OwogICAgICAgICBpbnQzMl90IHJpZ2h0Owog
ICAgICAgICBpZiAoSlNJbW1lZGlhdGU6OmFyZUJvdGhJbW1lZGlhdGVOdW1iZXJzKHNyYzEsIHNy
YzIpKQotICAgICAgICAgICAgcltkc3RdID0gSlNJbW1lZGlhdGU6Om9ySW1tZWRpYXRlTnVtYmVy
cyhzcmMxLCBzcmMyKTsKKyAgICAgICAgICAgIGNhbGxGcmFtZVtkc3RdID0gSlNJbW1lZGlhdGU6
Om9ySW1tZWRpYXRlTnVtYmVycyhzcmMxLCBzcmMyKTsKICAgICAgICAgZWxzZSBpZiAoZmFzdFRv
SW50MzIoc3JjMSwgbGVmdCkgJiYgZmFzdFRvSW50MzIoc3JjMiwgcmlnaHQpKQotICAgICAgICAg
ICAgcltkc3RdID0ganNOdW1iZXIoZXhlYywgbGVmdCB8IHJpZ2h0KTsKKyAgICAgICAgICAgIGNh
bGxGcmFtZVtkc3RdID0ganNOdW1iZXIoY2FsbEZyYW1lLCBsZWZ0IHwgcmlnaHQpOwogICAgICAg
ICBlbHNlIHsKLSAgICAgICAgICAgIEpTVmFsdWUqIHJlc3VsdCA9IGpzTnVtYmVyKGV4ZWMsIHNy
YzEtPnRvSW50MzIoZXhlYykgfCBzcmMyLT50b0ludDMyKGV4ZWMpKTsKKyAgICAgICAgICAgIEpT
VmFsdWUqIHJlc3VsdCA9IGpzTnVtYmVyKGNhbGxGcmFtZSwgc3JjMS0+dG9JbnQzMihjYWxsRnJh
bWUpIHwgc3JjMi0+dG9JbnQzMihjYWxsRnJhbWUpKTsKICAgICAgICAgICAgIFZNX0NIRUNLX0VY
Q0VQVElPTigpOwotICAgICAgICAgICAgcltkc3RdID0gcmVzdWx0OworICAgICAgICAgICAgY2Fs
bEZyYW1lW2RzdF0gPSByZXN1bHQ7CiAgICAgICAgIH0KIAogICAgICAgICB2UEMgKz0gMjsKQEAg
LTIxMDcsMTQgKzIwODksMTQgQEAgSlNWYWx1ZSogTWFjaGluZTo6cHJpdmF0ZUV4ZWN1dGUoRXhl
Y3V0aQogICAgICAgICAgICBhbmQgcHV0cyB0aGUgcmVzdWx0IGluIHJlZ2lzdGVyIGRzdC4KICAg
ICAgICAgKi8KICAgICAgICAgaW50IGRzdCA9ICgrK3ZQQyktPnUub3BlcmFuZDsKLSAgICAgICAg
SlNWYWx1ZSogc3JjID0gclsoKyt2UEMpLT51Lm9wZXJhbmRdLmpzVmFsdWUoZXhlYyk7CisgICAg
ICAgIEpTVmFsdWUqIHNyYyA9IGNhbGxGcmFtZVsoKyt2UEMpLT51Lm9wZXJhbmRdLmpzVmFsdWUo
Y2FsbEZyYW1lKTsKICAgICAgICAgaW50MzJfdCB2YWx1ZTsKICAgICAgICAgaWYgKGZhc3RUb0lu
dDMyKHNyYywgdmFsdWUpKQotICAgICAgICAgICAgcltkc3RdID0ganNOdW1iZXIoZXhlYywgfnZh
bHVlKTsKKyAgICAgICAgICAgIGNhbGxGcmFtZVtkc3RdID0ganNOdW1iZXIoY2FsbEZyYW1lLCB+
dmFsdWUpOwogICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIEpTVmFsdWUqIHJlc3VsdCA9IGpz
TnVtYmVyKGV4ZWMsIH5zcmMtPnRvSW50MzIoZXhlYykpOworICAgICAgICAgICAgSlNWYWx1ZSog
cmVzdWx0ID0ganNOdW1iZXIoY2FsbEZyYW1lLCB+c3JjLT50b0ludDMyKGNhbGxGcmFtZSkpOwog
ICAgICAgICAgICAgVk1fQ0hFQ0tfRVhDRVBUSU9OKCk7Ci0gICAgICAgICAgICByW2RzdF0gPSBy
ZXN1bHQ7CisgICAgICAgICAgICBjYWxsRnJhbWVbZHN0XSA9IHJlc3VsdDsKICAgICAgICAgfQog
ICAgICAgICArK3ZQQzsKICAgICAgICAgTkVYVF9PUENPREU7CkBAIC0yMTI3LDkgKzIxMDksOSBA
QCBKU1ZhbHVlKiBNYWNoaW5lOjpwcml2YXRlRXhlY3V0ZShFeGVjdXRpCiAgICAgICAgICovCiAg
ICAgICAgIGludCBkc3QgPSAoKyt2UEMpLT51Lm9wZXJhbmQ7CiAgICAgICAgIGludCBzcmMgPSAo
Kyt2UEMpLT51Lm9wZXJhbmQ7Ci0gICAgICAgIEpTVmFsdWUqIHJlc3VsdCA9IGpzQm9vbGVhbigh
cltzcmNdLmpzVmFsdWUoZXhlYyktPnRvQm9vbGVhbihleGVjKSk7CisgICAgICAgIEpTVmFsdWUq
IHJlc3VsdCA9IGpzQm9vbGVhbighY2FsbEZyYW1lW3NyY10uanNWYWx1ZShjYWxsRnJhbWUpLT50
b0Jvb2xlYW4oY2FsbEZyYW1lKSk7CiAgICAgICAgIFZNX0NIRUNLX0VYQ0VQVElPTigpOwotICAg
ICAgICByW2RzdF0gPSByZXN1bHQ7CisgICAgICAgIGNhbGxGcmFtZVtkc3RdID0gcmVzdWx0Owog
CiAgICAgICAgICsrdlBDOwogICAgICAgICBORVhUX09QQ09ERTsKQEAgLTIxNTIsMTMgKzIxMzQs
MTMgQEAgSlNWYWx1ZSogTWFjaGluZTo6cHJpdmF0ZUV4ZWN1dGUoRXhlY3V0aQogICAgICAgICBp
bnQgYmFzZSA9ICgrK3ZQQyktPnUub3BlcmFuZDsKICAgICAgICAgaW50IGJhc2VQcm90byA9ICgr
K3ZQQyktPnUub3BlcmFuZDsKIAotICAgICAgICBKU1ZhbHVlKiBiYXNlVmFsID0gcltiYXNlXS5q
c1ZhbHVlKGV4ZWMpOworICAgICAgICBKU1ZhbHVlKiBiYXNlVmFsID0gY2FsbEZyYW1lW2Jhc2Vd
LmpzVmFsdWUoY2FsbEZyYW1lKTsKIAotICAgICAgICBpZiAoaXNOb3RPYmplY3QoZXhlYywgdHJ1
ZSwgY29kZUJsb2NrKHIpLCB2UEMsIGJhc2VWYWwsIGV4Y2VwdGlvblZhbHVlKSkKKyAgICAgICAg
aWYgKGlzTm90T2JqZWN0KGNhbGxGcmFtZSwgdHJ1ZSwgY2FsbEZyYW1lLT5jb2RlQmxvY2soKSwg
dlBDLCBiYXNlVmFsLCBleGNlcHRpb25WYWx1ZSkpCiAgICAgICAgICAgICBnb3RvIHZtX3Rocm93
OwogCiAgICAgICAgIEpTT2JqZWN0KiBiYXNlT2JqID0gc3RhdGljX2Nhc3Q8SlNPYmplY3QqPihi
YXNlVmFsKTsKLSAgICAgICAgcltkc3RdID0ganNCb29sZWFuKGJhc2VPYmotPnN0cnVjdHVyZUlE
KCktPnR5cGVJbmZvKCkuaW1wbGVtZW50c0hhc0luc3RhbmNlKCkgPyBiYXNlT2JqLT5oYXNJbnN0
YW5jZShleGVjLCByW3ZhbHVlXS5qc1ZhbHVlKGV4ZWMpLCByW2Jhc2VQcm90b10uanNWYWx1ZShl
eGVjKSkgOiBmYWxzZSk7CisgICAgICAgIGNhbGxGcmFtZVtkc3RdID0ganNCb29sZWFuKGJhc2VP
YmotPnN0cnVjdHVyZUlEKCktPnR5cGVJbmZvKCkuaW1wbGVtZW50c0hhc0luc3RhbmNlKCkgPyBi
YXNlT2JqLT5oYXNJbnN0YW5jZShjYWxsRnJhbWUsIGNhbGxGcmFtZVt2YWx1ZV0uanNWYWx1ZShj
YWxsRnJhbWUpLCBjYWxsRnJhbWVbYmFzZVByb3RvXS5qc1ZhbHVlKGNhbGxGcmFtZSkpIDogZmFs
c2UpOwogCiAgICAgICAgICsrdlBDOwogICAgICAgICBORVhUX09QQ09ERTsKQEAgLTIxNzEsNyAr
MjE1Myw3IEBAIEpTVmFsdWUqIE1hY2hpbmU6OnByaXZhdGVFeGVjdXRlKEV4ZWN1dGkKICAgICAg
ICAgKi8KICAgICAgICAgaW50IGRzdCA9ICgrK3ZQQyktPnUub3BlcmFuZDsKICAgICAgICAgaW50
IHNyYyA9ICgrK3ZQQyktPnUub3BlcmFuZDsKLSAgICAgICAgcltkc3RdID0ganNUeXBlU3RyaW5n
Rm9yVmFsdWUoZXhlYywgcltzcmNdLmpzVmFsdWUoZXhlYykpOworICAgICAgICBjYWxsRnJhbWVb
ZHN0XSA9IGpzVHlwZVN0cmluZ0ZvclZhbHVlKGNhbGxGcmFtZSwgY2FsbEZyYW1lW3NyY10uanNW
YWx1ZShjYWxsRnJhbWUpKTsKIAogICAgICAgICArK3ZQQzsKICAgICAgICAgTkVYVF9PUENPREU7
CkBAIC0yMTg1LDggKzIxNjcsOCBAQCBKU1ZhbHVlKiBNYWNoaW5lOjpwcml2YXRlRXhlY3V0ZShF
eGVjdXRpCiAgICAgICAgICovCiAgICAgICAgIGludCBkc3QgPSAoKyt2UEMpLT51Lm9wZXJhbmQ7
CiAgICAgICAgIGludCBzcmMgPSAoKyt2UEMpLT51Lm9wZXJhbmQ7Ci0gICAgICAgIEpTVmFsdWUq
IHYgPSByW3NyY10uanNWYWx1ZShleGVjKTsKLSAgICAgICAgcltkc3RdID0ganNCb29sZWFuKEpT
SW1tZWRpYXRlOjppc0ltbWVkaWF0ZSh2KSA/IHYtPmlzVW5kZWZpbmVkKCkgOiB2LT5hc0NlbGwo
KS0+c3RydWN0dXJlSUQoKS0+dHlwZUluZm8oKS5tYXNxdWVyYWRlc0FzVW5kZWZpbmVkKCkpOwor
ICAgICAgICBKU1ZhbHVlKiB2ID0gY2FsbEZyYW1lW3NyY10uanNWYWx1ZShjYWxsRnJhbWUpOwor
ICAgICAgICBjYWxsRnJhbWVbZHN0XSA9IGpzQm9vbGVhbihKU0ltbWVkaWF0ZTo6aXNJbW1lZGlh
dGUodikgPyB2LT5pc1VuZGVmaW5lZCgpIDogdi0+YXNDZWxsKCktPnN0cnVjdHVyZUlEKCktPnR5
cGVJbmZvKCkubWFzcXVlcmFkZXNBc1VuZGVmaW5lZCgpKTsKIAogICAgICAgICArK3ZQQzsKICAg
ICAgICAgTkVYVF9PUENPREU7CkBAIC0yMjAwLDcgKzIxODIsNyBAQCBKU1ZhbHVlKiBNYWNoaW5l
Ojpwcml2YXRlRXhlY3V0ZShFeGVjdXRpCiAgICAgICAgICovCiAgICAgICAgIGludCBkc3QgPSAo
Kyt2UEMpLT51Lm9wZXJhbmQ7CiAgICAgICAgIGludCBzcmMgPSAoKyt2UEMpLT51Lm9wZXJhbmQ7
Ci0gICAgICAgIHJbZHN0XSA9IGpzQm9vbGVhbihyW3NyY10uanNWYWx1ZShleGVjKS0+aXNCb29s
ZWFuKCkpOworICAgICAgICBjYWxsRnJhbWVbZHN0XSA9IGpzQm9vbGVhbihjYWxsRnJhbWVbc3Jj
XS5qc1ZhbHVlKGNhbGxGcmFtZSktPmlzQm9vbGVhbigpKTsKIAogICAgICAgICArK3ZQQzsKICAg
ICAgICAgTkVYVF9PUENPREU7CkBAIC0yMjE0LDcgKzIxOTYsNyBAQCBKU1ZhbHVlKiBNYWNoaW5l
Ojpwcml2YXRlRXhlY3V0ZShFeGVjdXRpCiAgICAgICAgICovCiAgICAgICAgIGludCBkc3QgPSAo
Kyt2UEMpLT51Lm9wZXJhbmQ7CiAgICAgICAgIGludCBzcmMgPSAoKyt2UEMpLT51Lm9wZXJhbmQ7
Ci0gICAgICAgIHJbZHN0XSA9IGpzQm9vbGVhbihyW3NyY10uanNWYWx1ZShleGVjKS0+aXNOdW1i
ZXIoKSk7CisgICAgICAgIGNhbGxGcmFtZVtkc3RdID0ganNCb29sZWFuKGNhbGxGcmFtZVtzcmNd
LmpzVmFsdWUoY2FsbEZyYW1lKS0+aXNOdW1iZXIoKSk7CiAKICAgICAgICAgKyt2UEM7CiAgICAg
ICAgIE5FWFRfT1BDT0RFOwpAQCAtMjIyOCw3ICsyMjEwLDcgQEAgSlNWYWx1ZSogTWFjaGluZTo6
cHJpdmF0ZUV4ZWN1dGUoRXhlY3V0aQogICAgICAgICAqLwogICAgICAgICBpbnQgZHN0ID0gKCsr
dlBDKS0+dS5vcGVyYW5kOwogICAgICAgICBpbnQgc3JjID0gKCsrdlBDKS0+dS5vcGVyYW5kOwot
ICAgICAgICByW2RzdF0gPSBqc0Jvb2xlYW4ocltzcmNdLmpzVmFsdWUoZXhlYyktPmlzU3RyaW5n
KCkpOworICAgICAgICBjYWxsRnJhbWVbZHN0XSA9IGpzQm9vbGVhbihjYWxsRnJhbWVbc3JjXS5q
c1ZhbHVlKGNhbGxGcmFtZSktPmlzU3RyaW5nKCkpOwogCiAgICAgICAgICsrdlBDOwogICAgICAg
ICBORVhUX09QQ09ERTsKQEAgLTIyNDIsNyArMjIyNCw3IEBAIEpTVmFsdWUqIE1hY2hpbmU6OnBy
aXZhdGVFeGVjdXRlKEV4ZWN1dGkKICAgICAgICAgKi8KICAgICAgICAgaW50IGRzdCA9ICgrK3ZQ
QyktPnUub3BlcmFuZDsKICAgICAgICAgaW50IHNyYyA9ICgrK3ZQQyktPnUub3BlcmFuZDsKLSAg
ICAgICAgcltkc3RdID0ganNCb29sZWFuKGpzSXNPYmplY3RUeXBlKHJbc3JjXS5qc1ZhbHVlKGV4
ZWMpKSk7CisgICAgICAgIGNhbGxGcmFtZVtkc3RdID0ganNCb29sZWFuKGpzSXNPYmplY3RUeXBl
KGNhbGxGcmFtZVtzcmNdLmpzVmFsdWUoY2FsbEZyYW1lKSkpOwogCiAgICAgICAgICsrdlBDOwog
ICAgICAgICBORVhUX09QQ09ERTsKQEAgLTIyNTYsNyArMjIzOCw3IEBAIEpTVmFsdWUqIE1hY2hp
bmU6OnByaXZhdGVFeGVjdXRlKEV4ZWN1dGkKICAgICAgICAgKi8KICAgICAgICAgaW50IGRzdCA9
ICgrK3ZQQyktPnUub3BlcmFuZDsKICAgICAgICAgaW50IHNyYyA9ICgrK3ZQQyktPnUub3BlcmFu
ZDsKLSAgICAgICAgcltkc3RdID0ganNCb29sZWFuKGpzSXNGdW5jdGlvblR5cGUocltzcmNdLmpz
VmFsdWUoZXhlYykpKTsKKyAgICAgICAgY2FsbEZyYW1lW2RzdF0gPSBqc0Jvb2xlYW4oanNJc0Z1
bmN0aW9uVHlwZShjYWxsRnJhbWVbc3JjXS5qc1ZhbHVlKGNhbGxGcmFtZSkpKTsKIAogICAgICAg
ICArK3ZQQzsKICAgICAgICAgTkVYVF9PUENPREU7CkBAIC0yMjc0LDIxICsyMjU2LDIxIEBAIEpT
VmFsdWUqIE1hY2hpbmU6OnByaXZhdGVFeGVjdXRlKEV4ZWN1dGkKICAgICAgICAgaW50IHByb3Bl
cnR5ID0gKCsrdlBDKS0+dS5vcGVyYW5kOwogICAgICAgICBpbnQgYmFzZSA9ICgrK3ZQQyktPnUu
b3BlcmFuZDsKIAotICAgICAgICBKU1ZhbHVlKiBiYXNlVmFsID0gcltiYXNlXS5qc1ZhbHVlKGV4
ZWMpOwotICAgICAgICBpZiAoaXNOb3RPYmplY3QoZXhlYywgZmFsc2UsIGNvZGVCbG9jayhyKSwg
dlBDLCBiYXNlVmFsLCBleGNlcHRpb25WYWx1ZSkpCisgICAgICAgIEpTVmFsdWUqIGJhc2VWYWwg
PSBjYWxsRnJhbWVbYmFzZV0uanNWYWx1ZShjYWxsRnJhbWUpOworICAgICAgICBpZiAoaXNOb3RP
YmplY3QoY2FsbEZyYW1lLCBmYWxzZSwgY2FsbEZyYW1lLT5jb2RlQmxvY2soKSwgdlBDLCBiYXNl
VmFsLCBleGNlcHRpb25WYWx1ZSkpCiAgICAgICAgICAgICBnb3RvIHZtX3Rocm93OwogCiAgICAg
ICAgIEpTT2JqZWN0KiBiYXNlT2JqID0gc3RhdGljX2Nhc3Q8SlNPYmplY3QqPihiYXNlVmFsKTsK
IAotICAgICAgICBKU1ZhbHVlKiBwcm9wTmFtZSA9IHJbcHJvcGVydHldLmpzVmFsdWUoZXhlYyk7
CisgICAgICAgIEpTVmFsdWUqIHByb3BOYW1lID0gY2FsbEZyYW1lW3Byb3BlcnR5XS5qc1ZhbHVl
KGNhbGxGcmFtZSk7CiAKICAgICAgICAgdWludDMyX3QgaTsKICAgICAgICAgaWYgKHByb3BOYW1l
LT5nZXRVSW50MzIoaSkpCi0gICAgICAgICAgICByW2RzdF0gPSBqc0Jvb2xlYW4oYmFzZU9iai0+
aGFzUHJvcGVydHkoZXhlYywgaSkpOworICAgICAgICAgICAgY2FsbEZyYW1lW2RzdF0gPSBqc0Jv
b2xlYW4oYmFzZU9iai0+aGFzUHJvcGVydHkoY2FsbEZyYW1lLCBpKSk7CiAgICAgICAgIGVsc2Ug
ewotICAgICAgICAgICAgSWRlbnRpZmllciBwcm9wZXJ0eShleGVjLCBwcm9wTmFtZS0+dG9TdHJp
bmcoZXhlYykpOworICAgICAgICAgICAgSWRlbnRpZmllciBwcm9wZXJ0eShjYWxsRnJhbWUsIHBy
b3BOYW1lLT50b1N0cmluZyhjYWxsRnJhbWUpKTsKICAgICAgICAgICAgIFZNX0NIRUNLX0VYQ0VQ
VElPTigpOwotICAgICAgICAgICAgcltkc3RdID0ganNCb29sZWFuKGJhc2VPYmotPmhhc1Byb3Bl
cnR5KGV4ZWMsIHByb3BlcnR5KSk7CisgICAgICAgICAgICBjYWxsRnJhbWVbZHN0XSA9IGpzQm9v
bGVhbihiYXNlT2JqLT5oYXNQcm9wZXJ0eShjYWxsRnJhbWUsIHByb3BlcnR5KSk7CiAgICAgICAg
IH0KIAogICAgICAgICArK3ZQQzsKQEAgLTIzMDEsNyArMjI4Myw3IEBAIEpTVmFsdWUqIE1hY2hp
bmU6OnByaXZhdGVFeGVjdXRlKEV4ZWN1dGkKICAgICAgICAgICAgc2NvcGUgY2hhaW4sIGFuZCB3
cml0ZXMgdGhlIHJlc3VsdGluZyB2YWx1ZSB0byByZWdpc3RlcgogICAgICAgICAgICBkc3QuIElm
IHRoZSBwcm9wZXJ0eSBpcyBub3QgZm91bmQsIHJhaXNlcyBhbiBleGNlcHRpb24uCiAgICAgICAg
ICovCi0gICAgICAgIGlmIChVTkxJS0VMWSghcmVzb2x2ZShleGVjLCB2UEMsIHIsIGV4Y2VwdGlv
blZhbHVlKSkpCisgICAgICAgIGlmIChVTkxJS0VMWSghcmVzb2x2ZShjYWxsRnJhbWUsIHZQQywg
ZXhjZXB0aW9uVmFsdWUpKSkKICAgICAgICAgICAgIGdvdG8gdm1fdGhyb3c7CiAKICAgICAgICAg
dlBDICs9IDM7CkBAIC0yMzE0LDcgKzIyOTYsNyBAQCBKU1ZhbHVlKiBNYWNoaW5lOjpwcml2YXRl
RXhlY3V0ZShFeGVjdXRpCiAgICAgICAgICBzY29wZSBjaGFpbiBza2lwcGluZyB0aGUgdG9wICdz
a2lwJyBsZXZlbHMsIGFuZCB3cml0ZXMgdGhlIHJlc3VsdGluZwogICAgICAgICAgdmFsdWUgdG8g
cmVnaXN0ZXIgZHN0LiBJZiB0aGUgcHJvcGVydHkgaXMgbm90IGZvdW5kLCByYWlzZXMgYW4gZXhj
ZXB0aW9uLgogICAgICAgICAgKi8KLSAgICAgICAgaWYgKFVOTElLRUxZKCFyZXNvbHZlU2tpcChl
eGVjLCB2UEMsIHIsIGV4Y2VwdGlvblZhbHVlKSkpCisgICAgICAgIGlmIChVTkxJS0VMWSghcmVz
b2x2ZVNraXAoY2FsbEZyYW1lLCB2UEMsIGV4Y2VwdGlvblZhbHVlKSkpCiAgICAgICAgICAgICBn
b3RvIHZtX3Rocm93OwogCiAgICAgICAgIHZQQyArPSA0OwpAQCAtMjMyOSw3ICsyMzExLDcgQEAg
SlNWYWx1ZSogTWFjaGluZTo6cHJpdmF0ZUV4ZWN1dGUoRXhlY3V0aQogICAgICAgICAgICBhIGZh
c3QgbG9va3VwIHVzaW5nIHRoZSBjYXNlIG9mZnNldCwgb3RoZXJ3aXNlIGZhbGwgYmFjayB0byBh
IGZ1bGwgcmVzb2x2ZSBhbmQKICAgICAgICAgICAgY2FjaGUgdGhlIG5ldyBzdHJ1Y3R1cmVJRCBh
bmQgb2Zmc2V0CiAgICAgICAgICAqLwotICAgICAgICBpZiAoVU5MSUtFTFkoIXJlc29sdmVHbG9i
YWwoZXhlYywgdlBDLCByLCAgZXhjZXB0aW9uVmFsdWUpKSkKKyAgICAgICAgaWYgKFVOTElLRUxZ
KCFyZXNvbHZlR2xvYmFsKGNhbGxGcmFtZSwgdlBDLCBleGNlcHRpb25WYWx1ZSkpKQogICAgICAg
ICAgICAgZ290byB2bV90aHJvdzsKICAgICAgICAgCiAgICAgICAgIHZQQyArPSA2OwpAQCAtMjM0
Niw3ICsyMzI4LDcgQEAgSlNWYWx1ZSogTWFjaGluZTo6cHJpdmF0ZUV4ZWN1dGUoRXhlY3V0aQog
ICAgICAgICBBU1NFUlQoc2NvcGUtPmlzR2xvYmFsT2JqZWN0KCkpOwogICAgICAgICBpbnQgaW5k
ZXggPSAoKyt2UEMpLT51Lm9wZXJhbmQ7CiAKLSAgICAgICAgcltkc3RdID0gc2NvcGUtPnJlZ2lz
dGVyQXQoaW5kZXgpOworICAgICAgICBjYWxsRnJhbWVbZHN0XSA9IHNjb3BlLT5yZWdpc3RlckF0
KGluZGV4KTsKICAgICAgICAgKyt2UEM7CiAgICAgICAgIE5FWFRfT1BDT0RFOwogICAgIH0KQEAg
LTIzNjAsNyArMjM0Miw3IEBAIEpTVmFsdWUqIE1hY2hpbmU6OnByaXZhdGVFeGVjdXRlKEV4ZWN1
dGkKICAgICAgICAgaW50IGluZGV4ID0gKCsrdlBDKS0+dS5vcGVyYW5kOwogICAgICAgICBpbnQg
dmFsdWUgPSAoKyt2UEMpLT51Lm9wZXJhbmQ7CiAgICAgICAgIAotICAgICAgICBzY29wZS0+cmVn
aXN0ZXJBdChpbmRleCkgPSByW3ZhbHVlXS5qc1ZhbHVlKGV4ZWMpOworICAgICAgICBzY29wZS0+
cmVnaXN0ZXJBdChpbmRleCkgPSBjYWxsRnJhbWVbdmFsdWVdLmpzVmFsdWUoY2FsbEZyYW1lKTsK
ICAgICAgICAgKyt2UEM7CiAgICAgICAgIE5FWFRfT1BDT0RFOwogICAgIH0gICAgICAgICAgICAK
QEAgLTIzNzIsOSArMjM1NCw5IEBAIEpTVmFsdWUqIE1hY2hpbmU6OnByaXZhdGVFeGVjdXRlKEV4
ZWN1dGkKICAgICAgICAgICovCiAgICAgICAgIGludCBkc3QgPSAoKyt2UEMpLT51Lm9wZXJhbmQ7
CiAgICAgICAgIGludCBpbmRleCA9ICgrK3ZQQyktPnUub3BlcmFuZDsKLSAgICAgICAgaW50IHNr
aXAgPSAoKyt2UEMpLT51Lm9wZXJhbmQgKyBjb2RlQmxvY2sociktPm5lZWRzRnVsbFNjb3BlQ2hh
aW47CisgICAgICAgIGludCBza2lwID0gKCsrdlBDKS0+dS5vcGVyYW5kICsgY2FsbEZyYW1lLT5j
b2RlQmxvY2soKS0+bmVlZHNGdWxsU2NvcGVDaGFpbjsKIAotICAgICAgICBTY29wZUNoYWluTm9k
ZSogc2NvcGVDaGFpbiA9IHRoaXMtPnNjb3BlQ2hhaW4ocik7CisgICAgICAgIFNjb3BlQ2hhaW5O
b2RlKiBzY29wZUNoYWluID0gY2FsbEZyYW1lLT5zY29wZUNoYWluKCk7CiAgICAgICAgIFNjb3Bl
Q2hhaW5JdGVyYXRvciBpdGVyID0gc2NvcGVDaGFpbi0+YmVnaW4oKTsKICAgICAgICAgU2NvcGVD
aGFpbkl0ZXJhdG9yIGVuZCA9IHNjb3BlQ2hhaW4tPmVuZCgpOwogICAgICAgICBBU1NFUlQoaXRl
ciAhPSBlbmQpOwpAQCAtMjM4NSw3ICsyMzY3LDcgQEAgSlNWYWx1ZSogTWFjaGluZTo6cHJpdmF0
ZUV4ZWN1dGUoRXhlY3V0aQogCiAgICAgICAgIEFTU0VSVCgoKml0ZXIpLT5pc1ZhcmlhYmxlT2Jq
ZWN0KCkpOwogICAgICAgICBKU1ZhcmlhYmxlT2JqZWN0KiBzY29wZSA9IHN0YXRpY19jYXN0PEpT
VmFyaWFibGVPYmplY3QqPigqaXRlcik7Ci0gICAgICAgIHJbZHN0XSA9IHNjb3BlLT5yZWdpc3Rl
ckF0KGluZGV4KTsKKyAgICAgICAgY2FsbEZyYW1lW2RzdF0gPSBzY29wZS0+cmVnaXN0ZXJBdChp
bmRleCk7CiAgICAgICAgICsrdlBDOwogICAgICAgICBORVhUX09QQ09ERTsKICAgICB9CkBAIC0y
Mzk0LDEwICsyMzc2LDEwIEBAIEpTVmFsdWUqIE1hY2hpbmU6OnByaXZhdGVFeGVjdXRlKEV4ZWN1
dGkKIAogICAgICAgICAgKi8KICAgICAgICAgaW50IGluZGV4ID0gKCsrdlBDKS0+dS5vcGVyYW5k
OwotICAgICAgICBpbnQgc2tpcCA9ICgrK3ZQQyktPnUub3BlcmFuZCArIGNvZGVCbG9jayhyKS0+
bmVlZHNGdWxsU2NvcGVDaGFpbjsKKyAgICAgICAgaW50IHNraXAgPSAoKyt2UEMpLT51Lm9wZXJh
bmQgKyBjYWxsRnJhbWUtPmNvZGVCbG9jaygpLT5uZWVkc0Z1bGxTY29wZUNoYWluOwogICAgICAg
ICBpbnQgdmFsdWUgPSAoKyt2UEMpLT51Lm9wZXJhbmQ7CiAKLSAgICAgICAgU2NvcGVDaGFpbk5v
ZGUqIHNjb3BlQ2hhaW4gPSB0aGlzLT5zY29wZUNoYWluKHIpOworICAgICAgICBTY29wZUNoYWlu
Tm9kZSogc2NvcGVDaGFpbiA9IGNhbGxGcmFtZS0+c2NvcGVDaGFpbigpOwogICAgICAgICBTY29w
ZUNoYWluSXRlcmF0b3IgaXRlciA9IHNjb3BlQ2hhaW4tPmJlZ2luKCk7CiAgICAgICAgIFNjb3Bl
Q2hhaW5JdGVyYXRvciBlbmQgPSBzY29wZUNoYWluLT5lbmQoKTsKICAgICAgICAgQVNTRVJUKGl0
ZXIgIT0gZW5kKTsKQEAgLTI0MDgsNyArMjM5MCw3IEBAIEpTVmFsdWUqIE1hY2hpbmU6OnByaXZh
dGVFeGVjdXRlKEV4ZWN1dGkKIAogICAgICAgICBBU1NFUlQoKCppdGVyKS0+aXNWYXJpYWJsZU9i
amVjdCgpKTsKICAgICAgICAgSlNWYXJpYWJsZU9iamVjdCogc2NvcGUgPSBzdGF0aWNfY2FzdDxK
U1ZhcmlhYmxlT2JqZWN0Kj4oKml0ZXIpOwotICAgICAgICBzY29wZS0+cmVnaXN0ZXJBdChpbmRl
eCkgPSByW3ZhbHVlXS5qc1ZhbHVlKGV4ZWMpOworICAgICAgICBzY29wZS0+cmVnaXN0ZXJBdChp
bmRleCkgPSBjYWxsRnJhbWVbdmFsdWVdLmpzVmFsdWUoY2FsbEZyYW1lKTsKICAgICAgICAgKyt2
UEM7CiAgICAgICAgIE5FWFRfT1BDT0RFOwogICAgIH0KQEAgLTI0MjAsNyArMjQwMiw3IEBAIEpT
VmFsdWUqIE1hY2hpbmU6OnByaXZhdGVFeGVjdXRlKEV4ZWN1dGkKICAgICAgICAgICAgcmVnaXN0
ZXIgZHN0LiBJZiBub25lIGlzIGZvdW5kLCB0aGUgb3V0ZXJtb3N0IHNjb3BlICh3aGljaAogICAg
ICAgICAgICB3aWxsIGJlIHRoZSBnbG9iYWwgb2JqZWN0KSBpcyBzdG9yZWQgaW4gcmVnaXN0ZXIg
ZHN0LgogICAgICAgICAqLwotICAgICAgICByZXNvbHZlQmFzZShleGVjLCB2UEMsIHIpOworICAg
ICAgICByZXNvbHZlQmFzZShjYWxsRnJhbWUsIHZQQyk7CiAKICAgICAgICAgdlBDICs9IDM7CiAg
ICAgICAgIE5FWFRfT1BDT0RFOwpAQCAtMjQzNyw3ICsyNDE5LDcgQEAgSlNWYWx1ZSogTWFjaGlu
ZTo6cHJpdmF0ZUV4ZWN1dGUoRXhlY3V0aQogICAgICAgICAgICByZXNvbHZlLCBvciByZXNvbHZl
X2Jhc2UgZm9sbG93ZWQgYnkgZ2V0X2J5X2lkLCBhcyBpdAogICAgICAgICAgICBhdm9pZHMgZHVw
bGljYXRlIGhhc2ggbG9va3Vwcy4KICAgICAgICAgKi8KLSAgICAgICAgaWYgKFVOTElLRUxZKCFy
ZXNvbHZlQmFzZUFuZFByb3BlcnR5KGV4ZWMsIHZQQywgciwgZXhjZXB0aW9uVmFsdWUpKSkKKyAg
ICAgICAgaWYgKFVOTElLRUxZKCFyZXNvbHZlQmFzZUFuZFByb3BlcnR5KGNhbGxGcmFtZSwgdlBD
LCBleGNlcHRpb25WYWx1ZSkpKQogICAgICAgICAgICAgZ290byB2bV90aHJvdzsKIAogICAgICAg
ICB2UEMgKz0gNDsKQEAgLTI0NTgsNyArMjQ0MCw3IEBAIEpTVmFsdWUqIE1hY2hpbmU6OnByaXZh
dGVFeGVjdXRlKEV4ZWN1dGkKICAgICAgICAgICAgdGhlIGdsb2JhbCBvYmplY3QsIHdoaWNoIGlz
IHRoZSByaWdodCBiZWhhdmlvciBmb3IgZnVuY3Rpb24KICAgICAgICAgICAgY2FsbHMgYnV0IG5v
dCBmb3Igb3RoZXIgcHJvcGVydHkgbG9va3VwLgogICAgICAgICAqLwotICAgICAgICBpZiAoVU5M
SUtFTFkoIXJlc29sdmVCYXNlQW5kRnVuYyhleGVjLCB2UEMsIHIsIGV4Y2VwdGlvblZhbHVlKSkp
CisgICAgICAgIGlmIChVTkxJS0VMWSghcmVzb2x2ZUJhc2VBbmRGdW5jKGNhbGxGcmFtZSwgdlBD
LCBleGNlcHRpb25WYWx1ZSkpKQogICAgICAgICAgICAgZ290byB2bV90aHJvdzsKIAogICAgICAg
ICB2UEMgKz0gNDsKQEAgLTI0NzQsMTYgKzI0NTYsMTYgQEAgSlNWYWx1ZSogTWFjaGluZTo6cHJp
dmF0ZUV4ZWN1dGUoRXhlY3V0aQogICAgICAgICBpbnQgYmFzZSA9IHZQQ1syXS51Lm9wZXJhbmQ7
CiAgICAgICAgIGludCBwcm9wZXJ0eSA9IHZQQ1szXS51Lm9wZXJhbmQ7CiAKLSAgICAgICAgQ29k
ZUJsb2NrKiBjb2RlQmxvY2sgPSB0aGlzLT5jb2RlQmxvY2socik7CisgICAgICAgIENvZGVCbG9j
ayogY29kZUJsb2NrID0gY2FsbEZyYW1lLT5jb2RlQmxvY2soKTsKICAgICAgICAgSWRlbnRpZmll
ciYgaWRlbnQgPSBjb2RlQmxvY2stPmlkZW50aWZpZXJzW3Byb3BlcnR5XTsKLSAgICAgICAgSlNW
YWx1ZSogYmFzZVZhbHVlID0gcltiYXNlXS5qc1ZhbHVlKGV4ZWMpOworICAgICAgICBKU1ZhbHVl
KiBiYXNlVmFsdWUgPSBjYWxsRnJhbWVbYmFzZV0uanNWYWx1ZShjYWxsRnJhbWUpOwogICAgICAg
ICBQcm9wZXJ0eVNsb3Qgc2xvdChiYXNlVmFsdWUpOwotICAgICAgICBKU1ZhbHVlKiByZXN1bHQg
PSBiYXNlVmFsdWUtPmdldChleGVjLCBpZGVudCwgc2xvdCk7CisgICAgICAgIEpTVmFsdWUqIHJl
c3VsdCA9IGJhc2VWYWx1ZS0+Z2V0KGNhbGxGcmFtZSwgaWRlbnQsIHNsb3QpOwogICAgICAgICBW
TV9DSEVDS19FWENFUFRJT04oKTsKIAotICAgICAgICB0cnlDYWNoZUdldEJ5SUQoZXhlYywgY29k
ZUJsb2NrLCB2UEMsIGJhc2VWYWx1ZSwgaWRlbnQsIHNsb3QpOworICAgICAgICB0cnlDYWNoZUdl
dEJ5SUQoY2FsbEZyYW1lLCBjb2RlQmxvY2ssIHZQQywgYmFzZVZhbHVlLCBpZGVudCwgc2xvdCk7
CiAKLSAgICAgICAgcltkc3RdID0gcmVzdWx0OworICAgICAgICBjYWxsRnJhbWVbZHN0XSA9IHJl
c3VsdDsKICAgICAgICAgdlBDICs9IDg7CiAgICAgICAgIE5FWFRfT1BDT0RFOwogICAgIH0KQEAg
LTI0OTUsNyArMjQ3Nyw3IEBAIEpTVmFsdWUqIE1hY2hpbmU6OnByaXZhdGVFeGVjdXRlKEV4ZWN1
dGkKICAgICAgICAgICAgb3BfZ2V0X2J5X2lkLgogICAgICAgICAqLwogICAgICAgICBpbnQgYmFz
ZSA9IHZQQ1syXS51Lm9wZXJhbmQ7Ci0gICAgICAgIEpTVmFsdWUqIGJhc2VWYWx1ZSA9IHJbYmFz
ZV0uanNWYWx1ZShleGVjKTsKKyAgICAgICAgSlNWYWx1ZSogYmFzZVZhbHVlID0gY2FsbEZyYW1l
W2Jhc2VdLmpzVmFsdWUoY2FsbEZyYW1lKTsKIAogICAgICAgICBpZiAoTElLRUxZKCFKU0ltbWVk
aWF0ZTo6aXNJbW1lZGlhdGUoYmFzZVZhbHVlKSkpIHsKICAgICAgICAgICAgIEpTQ2VsbCogYmFz
ZUNlbGwgPSBzdGF0aWNfY2FzdDxKU0NlbGwqPihiYXNlVmFsdWUpOwpAQCAtMjUwNywxNSArMjQ4
OSwxNSBAQCBKU1ZhbHVlKiBNYWNoaW5lOjpwcml2YXRlRXhlY3V0ZShFeGVjdXRpCiAgICAgICAg
ICAgICAgICAgaW50IGRzdCA9IHZQQ1sxXS51Lm9wZXJhbmQ7CiAgICAgICAgICAgICAgICAgaW50
IG9mZnNldCA9IHZQQ1s1XS51Lm9wZXJhbmQ7CiAKLSAgICAgICAgICAgICAgICBBU1NFUlQoYmFz
ZU9iamVjdC0+Z2V0KGV4ZWMsIGNvZGVCbG9jayhyKS0+aWRlbnRpZmllcnNbdlBDWzNdLnUub3Bl
cmFuZF0pID09IGJhc2VPYmplY3QtPmdldERpcmVjdE9mZnNldChvZmZzZXQpKTsKLSAgICAgICAg
ICAgICAgICByW2RzdF0gPSBiYXNlT2JqZWN0LT5nZXREaXJlY3RPZmZzZXQob2Zmc2V0KTsKKyAg
ICAgICAgICAgICAgICBBU1NFUlQoYmFzZU9iamVjdC0+Z2V0KGNhbGxGcmFtZSwgY2FsbEZyYW1l
LT5jb2RlQmxvY2soKS0+aWRlbnRpZmllcnNbdlBDWzNdLnUub3BlcmFuZF0pID09IGJhc2VPYmpl
Y3QtPmdldERpcmVjdE9mZnNldChvZmZzZXQpKTsKKyAgICAgICAgICAgICAgICBjYWxsRnJhbWVb
ZHN0XSA9IGJhc2VPYmplY3QtPmdldERpcmVjdE9mZnNldChvZmZzZXQpOwogCiAgICAgICAgICAg
ICAgICAgdlBDICs9IDg7CiAgICAgICAgICAgICAgICAgTkVYVF9PUENPREU7CiAgICAgICAgICAg
ICB9CiAgICAgICAgIH0KIAotICAgICAgICB1bmNhY2hlR2V0QnlJRChjb2RlQmxvY2sociksIHZQ
Qyk7CisgICAgICAgIHVuY2FjaGVHZXRCeUlEKGNhbGxGcmFtZS0+Y29kZUJsb2NrKCksIHZQQyk7
CiAgICAgICAgIE5FWFRfT1BDT0RFOwogICAgIH0KICAgICBCRUdJTl9PUENPREUob3BfZ2V0X2J5
X2lkX3Byb3RvKSB7CkBAIC0yNTI2LDIzICsyNTA4LDIzIEBAIEpTVmFsdWUqIE1hY2hpbmU6OnBy
aXZhdGVFeGVjdXRlKEV4ZWN1dGkKICAgICAgICAgICAgcmV2ZXJ0cyB0byBvcF9nZXRfYnlfaWQu
CiAgICAgICAgICovCiAgICAgICAgIGludCBiYXNlID0gdlBDWzJdLnUub3BlcmFuZDsKLSAgICAg
ICAgSlNWYWx1ZSogYmFzZVZhbHVlID0gcltiYXNlXS5qc1ZhbHVlKGV4ZWMpOworICAgICAgICBK
U1ZhbHVlKiBiYXNlVmFsdWUgPSBjYWxsRnJhbWVbYmFzZV0uanNWYWx1ZShjYWxsRnJhbWUpOwog
CiAgICAgICAgIGlmIChMSUtFTFkoIUpTSW1tZWRpYXRlOjppc0ltbWVkaWF0ZShiYXNlVmFsdWUp
KSkgewogICAgICAgICAgICAgSlNDZWxsKiBiYXNlQ2VsbCA9IHN0YXRpY19jYXN0PEpTQ2VsbCo+
KGJhc2VWYWx1ZSk7CiAgICAgICAgICAgICBTdHJ1Y3R1cmVJRCogc3RydWN0dXJlSUQgPSB2UENb
NF0udS5zdHJ1Y3R1cmVJRDsKIAogICAgICAgICAgICAgaWYgKExJS0VMWShiYXNlQ2VsbC0+c3Ry
dWN0dXJlSUQoKSA9PSBzdHJ1Y3R1cmVJRCkpIHsKLSAgICAgICAgICAgICAgICBBU1NFUlQoc3Ry
dWN0dXJlSUQtPnByb3RvdHlwZUZvckxvb2t1cChleGVjKS0+aXNPYmplY3QoKSk7Ci0gICAgICAg
ICAgICAgICAgSlNPYmplY3QqIHByb3RvT2JqZWN0ID0gc3RhdGljX2Nhc3Q8SlNPYmplY3QqPihz
dHJ1Y3R1cmVJRC0+cHJvdG90eXBlRm9yTG9va3VwKGV4ZWMpKTsKKyAgICAgICAgICAgICAgICBB
U1NFUlQoc3RydWN0dXJlSUQtPnByb3RvdHlwZUZvckxvb2t1cChjYWxsRnJhbWUpLT5pc09iamVj
dCgpKTsKKyAgICAgICAgICAgICAgICBKU09iamVjdCogcHJvdG9PYmplY3QgPSBzdGF0aWNfY2Fz
dDxKU09iamVjdCo+KHN0cnVjdHVyZUlELT5wcm90b3R5cGVGb3JMb29rdXAoY2FsbEZyYW1lKSk7
CiAgICAgICAgICAgICAgICAgU3RydWN0dXJlSUQqIHByb3RvU3RydWN0dXJlSUQgPSB2UENbNV0u
dS5zdHJ1Y3R1cmVJRDsKIAogICAgICAgICAgICAgICAgIGlmIChMSUtFTFkocHJvdG9PYmplY3Qt
PnN0cnVjdHVyZUlEKCkgPT0gcHJvdG9TdHJ1Y3R1cmVJRCkpIHsKICAgICAgICAgICAgICAgICAg
ICAgaW50IGRzdCA9IHZQQ1sxXS51Lm9wZXJhbmQ7CiAgICAgICAgICAgICAgICAgICAgIGludCBv
ZmZzZXQgPSB2UENbNl0udS5vcGVyYW5kOwogCi0gICAgICAgICAgICAgICAgICAgIEFTU0VSVChw
cm90b09iamVjdC0+Z2V0KGV4ZWMsIGNvZGVCbG9jayhyKS0+aWRlbnRpZmllcnNbdlBDWzNdLnUu
b3BlcmFuZF0pID09IHByb3RvT2JqZWN0LT5nZXREaXJlY3RPZmZzZXQob2Zmc2V0KSk7Ci0gICAg
ICAgICAgICAgICAgICAgIHJbZHN0XSA9IHByb3RvT2JqZWN0LT5nZXREaXJlY3RPZmZzZXQob2Zm
c2V0KTsKKyAgICAgICAgICAgICAgICAgICAgQVNTRVJUKHByb3RvT2JqZWN0LT5nZXQoY2FsbEZy
YW1lLCBjYWxsRnJhbWUtPmNvZGVCbG9jaygpLT5pZGVudGlmaWVyc1t2UENbM10udS5vcGVyYW5k
XSkgPT0gcHJvdG9PYmplY3QtPmdldERpcmVjdE9mZnNldChvZmZzZXQpKTsKKyAgICAgICAgICAg
ICAgICAgICAgY2FsbEZyYW1lW2RzdF0gPSBwcm90b09iamVjdC0+Z2V0RGlyZWN0T2Zmc2V0KG9m
ZnNldCk7CiAKICAgICAgICAgICAgICAgICAgICAgdlBDICs9IDg7CiAgICAgICAgICAgICAgICAg
ICAgIE5FWFRfT1BDT0RFOwpAQCAtMjU1MCw3ICsyNTMyLDcgQEAgSlNWYWx1ZSogTWFjaGluZTo6
cHJpdmF0ZUV4ZWN1dGUoRXhlY3V0aQogICAgICAgICAgICAgfQogICAgICAgICB9CiAKLSAgICAg
ICAgdW5jYWNoZUdldEJ5SUQoY29kZUJsb2NrKHIpLCB2UEMpOworICAgICAgICB1bmNhY2hlR2V0
QnlJRChjYWxsRnJhbWUtPmNvZGVCbG9jaygpLCB2UEMpOwogICAgICAgICBORVhUX09QQ09ERTsK
ICAgICB9CiAgICAgQkVHSU5fT1BDT0RFKG9wX2dldF9ieV9pZF9jaGFpbikgewpAQCAtMjU2MSw3
ICsyNTQzLDcgQEAgSlNWYWx1ZSogTWFjaGluZTo6cHJpdmF0ZUV4ZWN1dGUoRXhlY3V0aQogICAg
ICAgICAgICByZXZlcnRzIHRvIG9wX2dldF9ieV9pZC4KICAgICAgICAgKi8KICAgICAgICAgaW50
IGJhc2UgPSB2UENbMl0udS5vcGVyYW5kOwotICAgICAgICBKU1ZhbHVlKiBiYXNlVmFsdWUgPSBy
W2Jhc2VdLmpzVmFsdWUoZXhlYyk7CisgICAgICAgIEpTVmFsdWUqIGJhc2VWYWx1ZSA9IGNhbGxG
cmFtZVtiYXNlXS5qc1ZhbHVlKGNhbGxGcmFtZSk7CiAKICAgICAgICAgaWYgKExJS0VMWSghSlNJ
bW1lZGlhdGU6OmlzSW1tZWRpYXRlKGJhc2VWYWx1ZSkpKSB7CiAgICAgICAgICAgICBKU0NlbGwq
IGJhc2VDZWxsID0gc3RhdGljX2Nhc3Q8SlNDZWxsKj4oYmFzZVZhbHVlKTsKQEAgLTI1NzQsNyAr
MjU1Niw3IEBAIEpTVmFsdWUqIE1hY2hpbmU6OnByaXZhdGVFeGVjdXRlKEV4ZWN1dGkKIAogICAg
ICAgICAgICAgICAgIEpTT2JqZWN0KiBiYXNlT2JqZWN0ID0gc3RhdGljX2Nhc3Q8SlNPYmplY3Qq
PihiYXNlQ2VsbCk7CiAgICAgICAgICAgICAgICAgd2hpbGUgKDEpIHsKLSAgICAgICAgICAgICAg
ICAgICAgYmFzZU9iamVjdCA9IHN0YXRpY19jYXN0PEpTT2JqZWN0Kj4oYmFzZU9iamVjdC0+c3Ry
dWN0dXJlSUQoKS0+cHJvdG90eXBlRm9yTG9va3VwKGV4ZWMpKTsKKyAgICAgICAgICAgICAgICAg
ICAgYmFzZU9iamVjdCA9IHN0YXRpY19jYXN0PEpTT2JqZWN0Kj4oYmFzZU9iamVjdC0+c3RydWN0
dXJlSUQoKS0+cHJvdG90eXBlRm9yTG9va3VwKGNhbGxGcmFtZSkpOwogICAgICAgICAgICAgICAg
ICAgICBpZiAoVU5MSUtFTFkoYmFzZU9iamVjdC0+c3RydWN0dXJlSUQoKSAhPSAoKml0KS5nZXQo
KSkpCiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKIApAQCAtMjU4Miw4ICsyNTY0LDgg
QEAgSlNWYWx1ZSogTWFjaGluZTo6cHJpdmF0ZUV4ZWN1dGUoRXhlY3V0aQogICAgICAgICAgICAg
ICAgICAgICAgICAgaW50IGRzdCA9IHZQQ1sxXS51Lm9wZXJhbmQ7CiAgICAgICAgICAgICAgICAg
ICAgICAgICBpbnQgb2Zmc2V0ID0gdlBDWzddLnUub3BlcmFuZDsKIAotICAgICAgICAgICAgICAg
ICAgICAgICAgQVNTRVJUKGJhc2VPYmplY3QtPmdldChleGVjLCBjb2RlQmxvY2sociktPmlkZW50
aWZpZXJzW3ZQQ1szXS51Lm9wZXJhbmRdKSA9PSBiYXNlT2JqZWN0LT5nZXREaXJlY3RPZmZzZXQo
b2Zmc2V0KSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICByW2RzdF0gPSBiYXNlT2JqZWN0LT5n
ZXREaXJlY3RPZmZzZXQob2Zmc2V0KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIEFTU0VSVChi
YXNlT2JqZWN0LT5nZXQoY2FsbEZyYW1lLCBjYWxsRnJhbWUtPmNvZGVCbG9jaygpLT5pZGVudGlm
aWVyc1t2UENbM10udS5vcGVyYW5kXSkgPT0gYmFzZU9iamVjdC0+Z2V0RGlyZWN0T2Zmc2V0KG9m
ZnNldCkpOworICAgICAgICAgICAgICAgICAgICAgICAgY2FsbEZyYW1lW2RzdF0gPSBiYXNlT2Jq
ZWN0LT5nZXREaXJlY3RPZmZzZXQob2Zmc2V0KTsKIAogICAgICAgICAgICAgICAgICAgICAgICAg
dlBDICs9IDg7CiAgICAgICAgICAgICAgICAgICAgICAgICBORVhUX09QQ09ERTsKQEAgLTI1OTIs
NyArMjU3NCw3IEBAIEpTVmFsdWUqIE1hY2hpbmU6OnByaXZhdGVFeGVjdXRlKEV4ZWN1dGkKICAg
ICAgICAgICAgIH0KICAgICAgICAgfQogCi0gICAgICAgIHVuY2FjaGVHZXRCeUlEKGNvZGVCbG9j
ayhyKSwgdlBDKTsKKyAgICAgICAgdW5jYWNoZUdldEJ5SUQoY2FsbEZyYW1lLT5jb2RlQmxvY2so
KSwgdlBDKTsKICAgICAgICAgTkVYVF9PUENPREU7CiAgICAgfQogICAgIEJFR0lOX09QQ09ERShv
cF9nZXRfYnlfaWRfZ2VuZXJpYykgewpAQCAtMjYwNSwxMyArMjU4NywxMyBAQCBKU1ZhbHVlKiBN
YWNoaW5lOjpwcml2YXRlRXhlY3V0ZShFeGVjdXRpCiAgICAgICAgIGludCBiYXNlID0gdlBDWzJd
LnUub3BlcmFuZDsKICAgICAgICAgaW50IHByb3BlcnR5ID0gdlBDWzNdLnUub3BlcmFuZDsKIAot
ICAgICAgICBJZGVudGlmaWVyJiBpZGVudCA9IGNvZGVCbG9jayhyKS0+aWRlbnRpZmllcnNbcHJv
cGVydHldOwotICAgICAgICBKU1ZhbHVlKiBiYXNlVmFsdWUgPSByW2Jhc2VdLmpzVmFsdWUoZXhl
Yyk7CisgICAgICAgIElkZW50aWZpZXImIGlkZW50ID0gY2FsbEZyYW1lLT5jb2RlQmxvY2soKS0+
aWRlbnRpZmllcnNbcHJvcGVydHldOworICAgICAgICBKU1ZhbHVlKiBiYXNlVmFsdWUgPSBjYWxs
RnJhbWVbYmFzZV0uanNWYWx1ZShjYWxsRnJhbWUpOwogICAgICAgICBQcm9wZXJ0eVNsb3Qgc2xv
dChiYXNlVmFsdWUpOwotICAgICAgICBKU1ZhbHVlKiByZXN1bHQgPSBiYXNlVmFsdWUtPmdldChl
eGVjLCBpZGVudCwgc2xvdCk7CisgICAgICAgIEpTVmFsdWUqIHJlc3VsdCA9IGJhc2VWYWx1ZS0+
Z2V0KGNhbGxGcmFtZSwgaWRlbnQsIHNsb3QpOwogICAgICAgICBWTV9DSEVDS19FWENFUFRJT04o
KTsKIAotICAgICAgICByW2RzdF0gPSByZXN1bHQ7CisgICAgICAgIGNhbGxGcmFtZVtkc3RdID0g
cmVzdWx0OwogICAgICAgICB2UEMgKz0gODsKICAgICAgICAgTkVYVF9PUENPREU7CiAgICAgfQpA
QCAtMjYyNCwxNSArMjYwNiwxNSBAQCBKU1ZhbHVlKiBNYWNoaW5lOjpwcml2YXRlRXhlY3V0ZShF
eGVjdXRpCiAgICAgICAgICovCiAKICAgICAgICAgaW50IGJhc2UgPSB2UENbMl0udS5vcGVyYW5k
OwotICAgICAgICBKU1ZhbHVlKiBiYXNlVmFsdWUgPSByW2Jhc2VdLmpzVmFsdWUoZXhlYyk7Cisg
ICAgICAgIEpTVmFsdWUqIGJhc2VWYWx1ZSA9IGNhbGxGcmFtZVtiYXNlXS5qc1ZhbHVlKGNhbGxG
cmFtZSk7CiAgICAgICAgIGlmIChMSUtFTFkoaXNKU0FycmF5KGJhc2VWYWx1ZSkpKSB7CiAgICAg
ICAgICAgICBpbnQgZHN0ID0gdlBDWzFdLnUub3BlcmFuZDsKLSAgICAgICAgICAgIHJbZHN0XSA9
IGpzTnVtYmVyKGV4ZWMsIHN0YXRpY19jYXN0PEpTQXJyYXkqPihiYXNlVmFsdWUpLT5sZW5ndGgo
KSk7CisgICAgICAgICAgICBjYWxsRnJhbWVbZHN0XSA9IGpzTnVtYmVyKGNhbGxGcmFtZSwgc3Rh
dGljX2Nhc3Q8SlNBcnJheSo+KGJhc2VWYWx1ZSktPmxlbmd0aCgpKTsKICAgICAgICAgICAgIHZQ
QyArPSA4OwogICAgICAgICAgICAgTkVYVF9PUENPREU7CiAgICAgICAgIH0KIAotICAgICAgICB1
bmNhY2hlR2V0QnlJRChjb2RlQmxvY2sociksIHZQQyk7CisgICAgICAgIHVuY2FjaGVHZXRCeUlE
KGNhbGxGcmFtZS0+Y29kZUJsb2NrKCksIHZQQyk7CiAgICAgICAgIE5FWFRfT1BDT0RFOwogICAg
IH0KICAgICBCRUdJTl9PUENPREUob3BfZ2V0X3N0cmluZ19sZW5ndGgpIHsKQEAgLTI2NDQsMTUg
KzI2MjYsMTUgQEAgSlNWYWx1ZSogTWFjaGluZTo6cHJpdmF0ZUV4ZWN1dGUoRXhlY3V0aQogICAg
ICAgICAqLwogCiAgICAgICAgIGludCBiYXNlID0gdlBDWzJdLnUub3BlcmFuZDsKLSAgICAgICAg
SlNWYWx1ZSogYmFzZVZhbHVlID0gcltiYXNlXS5qc1ZhbHVlKGV4ZWMpOworICAgICAgICBKU1Zh
bHVlKiBiYXNlVmFsdWUgPSBjYWxsRnJhbWVbYmFzZV0uanNWYWx1ZShjYWxsRnJhbWUpOwogICAg
ICAgICBpZiAoTElLRUxZKGlzSlNTdHJpbmcoYmFzZVZhbHVlKSkpIHsKICAgICAgICAgICAgIGlu
dCBkc3QgPSB2UENbMV0udS5vcGVyYW5kOwotICAgICAgICAgICAgcltkc3RdID0ganNOdW1iZXIo
ZXhlYywgc3RhdGljX2Nhc3Q8SlNTdHJpbmcqPihiYXNlVmFsdWUpLT52YWx1ZSgpLnNpemUoKSk7
CisgICAgICAgICAgICBjYWxsRnJhbWVbZHN0XSA9IGpzTnVtYmVyKGNhbGxGcmFtZSwgc3RhdGlj
X2Nhc3Q8SlNTdHJpbmcqPihiYXNlVmFsdWUpLT52YWx1ZSgpLnNpemUoKSk7CiAgICAgICAgICAg
ICB2UEMgKz0gODsKICAgICAgICAgICAgIE5FWFRfT1BDT0RFOwogICAgICAgICB9CiAKLSAgICAg
ICAgdW5jYWNoZUdldEJ5SUQoY29kZUJsb2NrKHIpLCB2UEMpOworICAgICAgICB1bmNhY2hlR2V0
QnlJRChjYWxsRnJhbWUtPmNvZGVCbG9jaygpLCB2UEMpOwogICAgICAgICBORVhUX09QQ09ERTsK
ICAgICB9CiAgICAgQkVHSU5fT1BDT0RFKG9wX3B1dF9ieV9pZCkgewpAQCAtMjY2OSwxNCArMjY1
MSwxNCBAQCBKU1ZhbHVlKiBNYWNoaW5lOjpwcml2YXRlRXhlY3V0ZShFeGVjdXRpCiAgICAgICAg
IGludCBwcm9wZXJ0eSA9IHZQQ1syXS51Lm9wZXJhbmQ7CiAgICAgICAgIGludCB2YWx1ZSA9IHZQ
Q1szXS51Lm9wZXJhbmQ7CiAKLSAgICAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSB0aGlzLT5j
b2RlQmxvY2socik7Ci0gICAgICAgIEpTVmFsdWUqIGJhc2VWYWx1ZSA9IHJbYmFzZV0uanNWYWx1
ZShleGVjKTsKKyAgICAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBjYWxsRnJhbWUtPmNvZGVC
bG9jaygpOworICAgICAgICBKU1ZhbHVlKiBiYXNlVmFsdWUgPSBjYWxsRnJhbWVbYmFzZV0uanNW
YWx1ZShjYWxsRnJhbWUpOwogICAgICAgICBJZGVudGlmaWVyJiBpZGVudCA9IGNvZGVCbG9jay0+
aWRlbnRpZmllcnNbcHJvcGVydHldOwogICAgICAgICBQdXRQcm9wZXJ0eVNsb3Qgc2xvdDsKLSAg
ICAgICAgYmFzZVZhbHVlLT5wdXQoZXhlYywgaWRlbnQsIHJbdmFsdWVdLmpzVmFsdWUoZXhlYyks
IHNsb3QpOworICAgICAgICBiYXNlVmFsdWUtPnB1dChjYWxsRnJhbWUsIGlkZW50LCBjYWxsRnJh
bWVbdmFsdWVdLmpzVmFsdWUoY2FsbEZyYW1lKSwgc2xvdCk7CiAgICAgICAgIFZNX0NIRUNLX0VY
Q0VQVElPTigpOwogCi0gICAgICAgIHRyeUNhY2hlUHV0QnlJRChleGVjLCBjb2RlQmxvY2ssIHZQ
QywgYmFzZVZhbHVlLCBzbG90KTsKKyAgICAgICAgdHJ5Q2FjaGVQdXRCeUlEKGNhbGxGcmFtZSwg
Y29kZUJsb2NrLCB2UEMsIGJhc2VWYWx1ZSwgc2xvdCk7CiAKICAgICAgICAgdlBDICs9IDg7CiAg
ICAgICAgIE5FWFRfT1BDT0RFOwpAQCAtMjY5Myw3ICsyNjc1LDcgQEAgSlNWYWx1ZSogTWFjaGlu
ZTo6cHJpdmF0ZUV4ZWN1dGUoRXhlY3V0aQogICAgICAgICAgICB0aGUgcmVnaXN0ZXIgZmlsZS4K
ICAgICAgICAgICovCiAgICAgICAgIGludCBiYXNlID0gdlBDWzFdLnUub3BlcmFuZDsKLSAgICAg
ICAgSlNWYWx1ZSogYmFzZVZhbHVlID0gcltiYXNlXS5qc1ZhbHVlKGV4ZWMpOworICAgICAgICBK
U1ZhbHVlKiBiYXNlVmFsdWUgPSBjYWxsRnJhbWVbYmFzZV0uanNWYWx1ZShjYWxsRnJhbWUpOwog
ICAgICAgICAKICAgICAgICAgaWYgKExJS0VMWSghSlNJbW1lZGlhdGU6OmlzSW1tZWRpYXRlKGJh
c2VWYWx1ZSkpKSB7CiAgICAgICAgICAgICBKU0NlbGwqIGJhc2VDZWxsID0gc3RhdGljX2Nhc3Q8
SlNDZWxsKj4oYmFzZVZhbHVlKTsKQEAgLTI3MDYsMTQgKzI2ODgsMTQgQEAgSlNWYWx1ZSogTWFj
aGluZTo6cHJpdmF0ZUV4ZWN1dGUoRXhlY3V0aQogCiAgICAgICAgICAgICAgICAgUmVmUHRyPFN0
cnVjdHVyZUlEPiogaXQgPSB2UENbNl0udS5zdHJ1Y3R1cmVJRENoYWluLT5oZWFkKCk7CiAKLSAg
ICAgICAgICAgICAgICBKU09iamVjdCogcHJvdG8gPSBzdGF0aWNfY2FzdDxKU09iamVjdCo+KGJh
c2VPYmplY3QtPnN0cnVjdHVyZUlEKCktPnByb3RvdHlwZUZvckxvb2t1cChleGVjKSk7CisgICAg
ICAgICAgICAgICAgSlNPYmplY3QqIHByb3RvID0gc3RhdGljX2Nhc3Q8SlNPYmplY3QqPihiYXNl
T2JqZWN0LT5zdHJ1Y3R1cmVJRCgpLT5wcm90b3R5cGVGb3JMb29rdXAoY2FsbEZyYW1lKSk7CiAg
ICAgICAgICAgICAgICAgd2hpbGUgKCFwcm90by0+aXNOdWxsKCkpIHsKICAgICAgICAgICAgICAg
ICAgICAgaWYgKFVOTElLRUxZKHByb3RvLT5zdHJ1Y3R1cmVJRCgpICE9ICgqaXQpLmdldCgpKSkg
ewotICAgICAgICAgICAgICAgICAgICAgICAgdW5jYWNoZVB1dEJ5SUQoY29kZUJsb2NrKHIpLCB2
UEMpOworICAgICAgICAgICAgICAgICAgICAgICAgdW5jYWNoZVB1dEJ5SUQoY2FsbEZyYW1lLT5j
b2RlQmxvY2soKSwgdlBDKTsKICAgICAgICAgICAgICAgICAgICAgICAgIE5FWFRfT1BDT0RFOwog
ICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICsraXQ7Ci0gICAgICAg
ICAgICAgICAgICAgIHByb3RvID0gc3RhdGljX2Nhc3Q8SlNPYmplY3QqPihwcm90by0+c3RydWN0
dXJlSUQoKS0+cHJvdG90eXBlRm9yTG9va3VwKGV4ZWMpKTsKKyAgICAgICAgICAgICAgICAgICAg
cHJvdG8gPSBzdGF0aWNfY2FzdDxKU09iamVjdCo+KHByb3RvLT5zdHJ1Y3R1cmVJRCgpLT5wcm90
b3R5cGVGb3JMb29rdXAoY2FsbEZyYW1lKSk7CiAgICAgICAgICAgICAgICAgfQogCiAgICAgICAg
ICAgICAgICAgYmFzZU9iamVjdC0+dHJhbnNpdGlvblRvKG5ld1N0cnVjdHVyZUlEKTsKQEAgLTI3
MjIsMTUgKzI3MDQsMTUgQEAgSlNWYWx1ZSogTWFjaGluZTo6cHJpdmF0ZUV4ZWN1dGUoRXhlY3V0
aQogCiAgICAgICAgICAgICAgICAgaW50IHZhbHVlID0gdlBDWzNdLnUub3BlcmFuZDsKICAgICAg
ICAgICAgICAgICB1bnNpZ25lZCBvZmZzZXQgPSB2UENbN10udS5vcGVyYW5kOwotICAgICAgICAg
ICAgICAgIEFTU0VSVChiYXNlT2JqZWN0LT5vZmZzZXRGb3JMb2NhdGlvbihiYXNlT2JqZWN0LT5n
ZXREaXJlY3RMb2NhdGlvbihjb2RlQmxvY2sociktPmlkZW50aWZpZXJzW3ZQQ1syXS51Lm9wZXJh
bmRdKSkgPT0gb2Zmc2V0KTsKLSAgICAgICAgICAgICAgICBiYXNlT2JqZWN0LT5wdXREaXJlY3RP
ZmZzZXQob2Zmc2V0LCByW3ZhbHVlXS5qc1ZhbHVlKGV4ZWMpKTsKKyAgICAgICAgICAgICAgICBB
U1NFUlQoYmFzZU9iamVjdC0+b2Zmc2V0Rm9yTG9jYXRpb24oYmFzZU9iamVjdC0+Z2V0RGlyZWN0
TG9jYXRpb24oY2FsbEZyYW1lLT5jb2RlQmxvY2soKS0+aWRlbnRpZmllcnNbdlBDWzJdLnUub3Bl
cmFuZF0pKSA9PSBvZmZzZXQpOworICAgICAgICAgICAgICAgIGJhc2VPYmplY3QtPnB1dERpcmVj
dE9mZnNldChvZmZzZXQsIGNhbGxGcmFtZVt2YWx1ZV0uanNWYWx1ZShjYWxsRnJhbWUpKTsKIAog
ICAgICAgICAgICAgICAgIHZQQyArPSA4OwogICAgICAgICAgICAgICAgIE5FWFRfT1BDT0RFOwog
ICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgICAgIAotICAgICAgICB1bmNhY2hlUHV0QnlJ
RChjb2RlQmxvY2sociksIHZQQyk7CisgICAgICAgIHVuY2FjaGVQdXRCeUlEKGNhbGxGcmFtZS0+
Y29kZUJsb2NrKCksIHZQQyk7CiAgICAgICAgIE5FWFRfT1BDT0RFOwogICAgIH0KICAgICBCRUdJ
Tl9PUENPREUob3BfcHV0X2J5X2lkX3JlcGxhY2UpIHsKQEAgLTI3NDUsNyArMjcyNyw3IEBAIEpT
VmFsdWUqIE1hY2hpbmU6OnByaXZhdGVFeGVjdXRlKEV4ZWN1dGkKICAgICAgICAgICAgdGhlIHJl
Z2lzdGVyIGZpbGUuCiAgICAgICAgICovCiAgICAgICAgIGludCBiYXNlID0gdlBDWzFdLnUub3Bl
cmFuZDsKLSAgICAgICAgSlNWYWx1ZSogYmFzZVZhbHVlID0gcltiYXNlXS5qc1ZhbHVlKGV4ZWMp
OworICAgICAgICBKU1ZhbHVlKiBiYXNlVmFsdWUgPSBjYWxsRnJhbWVbYmFzZV0uanNWYWx1ZShj
YWxsRnJhbWUpOwogCiAgICAgICAgIGlmIChMSUtFTFkoIUpTSW1tZWRpYXRlOjppc0ltbWVkaWF0
ZShiYXNlVmFsdWUpKSkgewogICAgICAgICAgICAgSlNDZWxsKiBiYXNlQ2VsbCA9IHN0YXRpY19j
YXN0PEpTQ2VsbCo+KGJhc2VWYWx1ZSk7CkBAIC0yNzU3LDE1ICsyNzM5LDE1IEBAIEpTVmFsdWUq
IE1hY2hpbmU6OnByaXZhdGVFeGVjdXRlKEV4ZWN1dGkKICAgICAgICAgICAgICAgICBpbnQgdmFs
dWUgPSB2UENbM10udS5vcGVyYW5kOwogICAgICAgICAgICAgICAgIHVuc2lnbmVkIG9mZnNldCA9
IHZQQ1s1XS51Lm9wZXJhbmQ7CiAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgQVNT
RVJUKGJhc2VPYmplY3QtPm9mZnNldEZvckxvY2F0aW9uKGJhc2VPYmplY3QtPmdldERpcmVjdExv
Y2F0aW9uKGNvZGVCbG9jayhyKS0+aWRlbnRpZmllcnNbdlBDWzJdLnUub3BlcmFuZF0pKSA9PSBv
ZmZzZXQpOwotICAgICAgICAgICAgICAgIGJhc2VPYmplY3QtPnB1dERpcmVjdE9mZnNldChvZmZz
ZXQsIHJbdmFsdWVdLmpzVmFsdWUoZXhlYykpOworICAgICAgICAgICAgICAgIEFTU0VSVChiYXNl
T2JqZWN0LT5vZmZzZXRGb3JMb2NhdGlvbihiYXNlT2JqZWN0LT5nZXREaXJlY3RMb2NhdGlvbihj
YWxsRnJhbWUtPmNvZGVCbG9jaygpLT5pZGVudGlmaWVyc1t2UENbMl0udS5vcGVyYW5kXSkpID09
IG9mZnNldCk7CisgICAgICAgICAgICAgICAgYmFzZU9iamVjdC0+cHV0RGlyZWN0T2Zmc2V0KG9m
ZnNldCwgY2FsbEZyYW1lW3ZhbHVlXS5qc1ZhbHVlKGNhbGxGcmFtZSkpOwogCiAgICAgICAgICAg
ICAgICAgdlBDICs9IDg7CiAgICAgICAgICAgICAgICAgTkVYVF9PUENPREU7CiAgICAgICAgICAg
ICB9CiAgICAgICAgIH0KIAotICAgICAgICB1bmNhY2hlUHV0QnlJRChjb2RlQmxvY2sociksIHZQ
Qyk7CisgICAgICAgIHVuY2FjaGVQdXRCeUlEKGNhbGxGcmFtZS0+Y29kZUJsb2NrKCksIHZQQyk7
CiAgICAgICAgIE5FWFRfT1BDT0RFOwogICAgIH0KICAgICBCRUdJTl9PUENPREUob3BfcHV0X2J5
X2lkX2dlbmVyaWMpIHsKQEAgLTI3ODEsMTAgKzI3NjMsMTAgQEAgSlNWYWx1ZSogTWFjaGluZTo6
cHJpdmF0ZUV4ZWN1dGUoRXhlY3V0aQogICAgICAgICBpbnQgcHJvcGVydHkgPSB2UENbMl0udS5v
cGVyYW5kOwogICAgICAgICBpbnQgdmFsdWUgPSB2UENbM10udS5vcGVyYW5kOwogCi0gICAgICAg
IEpTVmFsdWUqIGJhc2VWYWx1ZSA9IHJbYmFzZV0uanNWYWx1ZShleGVjKTsKLSAgICAgICAgSWRl
bnRpZmllciYgaWRlbnQgPSBjb2RlQmxvY2sociktPmlkZW50aWZpZXJzW3Byb3BlcnR5XTsKKyAg
ICAgICAgSlNWYWx1ZSogYmFzZVZhbHVlID0gY2FsbEZyYW1lW2Jhc2VdLmpzVmFsdWUoY2FsbEZy
YW1lKTsKKyAgICAgICAgSWRlbnRpZmllciYgaWRlbnQgPSBjYWxsRnJhbWUtPmNvZGVCbG9jaygp
LT5pZGVudGlmaWVyc1twcm9wZXJ0eV07CiAgICAgICAgIFB1dFByb3BlcnR5U2xvdCBzbG90Owot
ICAgICAgICBiYXNlVmFsdWUtPnB1dChleGVjLCBpZGVudCwgclt2YWx1ZV0uanNWYWx1ZShleGVj
KSwgc2xvdCk7CisgICAgICAgIGJhc2VWYWx1ZS0+cHV0KGNhbGxGcmFtZSwgaWRlbnQsIGNhbGxG
cmFtZVt2YWx1ZV0uanNWYWx1ZShjYWxsRnJhbWUpLCBzbG90KTsKICAgICAgICAgVk1fQ0hFQ0tf
RVhDRVBUSU9OKCk7CiAKICAgICAgICAgdlBDICs9IDg7CkBAIC0yODAyLDExICsyNzg0LDExIEBA
IEpTVmFsdWUqIE1hY2hpbmU6OnByaXZhdGVFeGVjdXRlKEV4ZWN1dGkKICAgICAgICAgaW50IGJh
c2UgPSAoKyt2UEMpLT51Lm9wZXJhbmQ7CiAgICAgICAgIGludCBwcm9wZXJ0eSA9ICgrK3ZQQykt
PnUub3BlcmFuZDsKIAotICAgICAgICBKU09iamVjdCogYmFzZU9iaiA9IHJbYmFzZV0uanNWYWx1
ZShleGVjKS0+dG9PYmplY3QoZXhlYyk7Ci0gICAgICAgIElkZW50aWZpZXImIGlkZW50ID0gY29k
ZUJsb2NrKHIpLT5pZGVudGlmaWVyc1twcm9wZXJ0eV07Ci0gICAgICAgIEpTVmFsdWUqIHJlc3Vs
dCA9IGpzQm9vbGVhbihiYXNlT2JqLT5kZWxldGVQcm9wZXJ0eShleGVjLCBpZGVudCkpOworICAg
ICAgICBKU09iamVjdCogYmFzZU9iaiA9IGNhbGxGcmFtZVtiYXNlXS5qc1ZhbHVlKGNhbGxGcmFt
ZSktPnRvT2JqZWN0KGNhbGxGcmFtZSk7CisgICAgICAgIElkZW50aWZpZXImIGlkZW50ID0gY2Fs
bEZyYW1lLT5jb2RlQmxvY2soKS0+aWRlbnRpZmllcnNbcHJvcGVydHldOworICAgICAgICBKU1Zh
bHVlKiByZXN1bHQgPSBqc0Jvb2xlYW4oYmFzZU9iai0+ZGVsZXRlUHJvcGVydHkoY2FsbEZyYW1l
LCBpZGVudCkpOwogICAgICAgICBWTV9DSEVDS19FWENFUFRJT04oKTsKLSAgICAgICAgcltkc3Rd
ID0gcmVzdWx0OworICAgICAgICBjYWxsRnJhbWVbZHN0XSA9IHJlc3VsdDsKICAgICAgICAgKyt2
UEM7CiAgICAgICAgIE5FWFRfT1BDT0RFOwogICAgIH0KQEAgLTI4MjIsOCArMjgwNCw4IEBAIEpT
VmFsdWUqIE1hY2hpbmU6OnByaXZhdGVFeGVjdXRlKEV4ZWN1dGkKICAgICAgICAgaW50IGJhc2Ug
PSAoKyt2UEMpLT51Lm9wZXJhbmQ7CiAgICAgICAgIGludCBwcm9wZXJ0eSA9ICgrK3ZQQyktPnUu
b3BlcmFuZDsKICAgICAgICAgCi0gICAgICAgIEpTVmFsdWUqIGJhc2VWYWx1ZSA9IHJbYmFzZV0u
anNWYWx1ZShleGVjKTsKLSAgICAgICAgSlNWYWx1ZSogc3Vic2NyaXB0ID0gcltwcm9wZXJ0eV0u
anNWYWx1ZShleGVjKTsKKyAgICAgICAgSlNWYWx1ZSogYmFzZVZhbHVlID0gY2FsbEZyYW1lW2Jh
c2VdLmpzVmFsdWUoY2FsbEZyYW1lKTsKKyAgICAgICAgSlNWYWx1ZSogc3Vic2NyaXB0ID0gY2Fs
bEZyYW1lW3Byb3BlcnR5XS5qc1ZhbHVlKGNhbGxGcmFtZSk7CiAKICAgICAgICAgSlNWYWx1ZSog
cmVzdWx0OwogICAgICAgICB1bnNpZ25lZCBpOwpAQCAtMjgzNSwxOCArMjgxNywxOCBAQCBKU1Zh
bHVlKiBNYWNoaW5lOjpwcml2YXRlRXhlY3V0ZShFeGVjdXRpCiAgICAgICAgICAgICAgICAgaWYg
KGpzQXJyYXktPmNhbkdldEluZGV4KGkpKQogICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSBq
c0FycmF5LT5nZXRJbmRleChpKTsKICAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAg
ICAgICAgIHJlc3VsdCA9IGpzQXJyYXktPkpTQXJyYXk6OmdldChleGVjLCBpKTsKKyAgICAgICAg
ICAgICAgICAgICAgcmVzdWx0ID0ganNBcnJheS0+SlNBcnJheTo6Z2V0KGNhbGxGcmFtZSwgaSk7
CiAgICAgICAgICAgICB9IGVsc2UgaWYgKGlzSlNTdHJpbmcoYmFzZVZhbHVlKSAmJiBzdGF0aWNf
Y2FzdDxKU1N0cmluZyo+KGJhc2VWYWx1ZSktPmNhbkdldEluZGV4KGkpKQotICAgICAgICAgICAg
ICAgIHJlc3VsdCA9IHN0YXRpY19jYXN0PEpTU3RyaW5nKj4oYmFzZVZhbHVlKS0+Z2V0SW5kZXgo
JmV4ZWMtPmdsb2JhbERhdGEoKSwgaSk7CisgICAgICAgICAgICAgICAgcmVzdWx0ID0gc3RhdGlj
X2Nhc3Q8SlNTdHJpbmcqPihiYXNlVmFsdWUpLT5nZXRJbmRleCgmY2FsbEZyYW1lLT5nbG9iYWxE
YXRhKCksIGkpOwogICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHJlc3VsdCA9IGJh
c2VWYWx1ZS0+Z2V0KGV4ZWMsIGkpOworICAgICAgICAgICAgICAgIHJlc3VsdCA9IGJhc2VWYWx1
ZS0+Z2V0KGNhbGxGcmFtZSwgaSk7CiAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBJZGVu
dGlmaWVyIHByb3BlcnR5KGV4ZWMsIHN1YnNjcmlwdC0+dG9TdHJpbmcoZXhlYykpOwotICAgICAg
ICAgICAgcmVzdWx0ID0gYmFzZVZhbHVlLT5nZXQoZXhlYywgcHJvcGVydHkpOworICAgICAgICAg
ICAgSWRlbnRpZmllciBwcm9wZXJ0eShjYWxsRnJhbWUsIHN1YnNjcmlwdC0+dG9TdHJpbmcoY2Fs
bEZyYW1lKSk7CisgICAgICAgICAgICByZXN1bHQgPSBiYXNlVmFsdWUtPmdldChjYWxsRnJhbWUs
IHByb3BlcnR5KTsKICAgICAgICAgfQogCiAgICAgICAgIFZNX0NIRUNLX0VYQ0VQVElPTigpOwot
ICAgICAgICByW2RzdF0gPSByZXN1bHQ7CisgICAgICAgIGNhbGxGcmFtZVtkc3RdID0gcmVzdWx0
OwogICAgICAgICArK3ZQQzsKICAgICAgICAgTkVYVF9PUENPREU7CiAgICAgfQpAQCAtMjg2NSw4
ICsyODQ3LDggQEAgSlNWYWx1ZSogTWFjaGluZTo6cHJpdmF0ZUV4ZWN1dGUoRXhlY3V0aQogICAg
ICAgICBpbnQgcHJvcGVydHkgPSAoKyt2UEMpLT51Lm9wZXJhbmQ7CiAgICAgICAgIGludCB2YWx1
ZSA9ICgrK3ZQQyktPnUub3BlcmFuZDsKIAotICAgICAgICBKU1ZhbHVlKiBiYXNlVmFsdWUgPSBy
W2Jhc2VdLmpzVmFsdWUoZXhlYyk7Ci0gICAgICAgIEpTVmFsdWUqIHN1YnNjcmlwdCA9IHJbcHJv
cGVydHldLmpzVmFsdWUoZXhlYyk7CisgICAgICAgIEpTVmFsdWUqIGJhc2VWYWx1ZSA9IGNhbGxG
cmFtZVtiYXNlXS5qc1ZhbHVlKGNhbGxGcmFtZSk7CisgICAgICAgIEpTVmFsdWUqIHN1YnNjcmlw
dCA9IGNhbGxGcmFtZVtwcm9wZXJ0eV0uanNWYWx1ZShjYWxsRnJhbWUpOwogCiAgICAgICAgIHVu
c2lnbmVkIGk7CiAKQEAgLTI4NzUsMTYgKzI4NTcsMTYgQEAgSlNWYWx1ZSogTWFjaGluZTo6cHJp
dmF0ZUV4ZWN1dGUoRXhlY3V0aQogICAgICAgICAgICAgaWYgKGlzSlNBcnJheShiYXNlVmFsdWUp
KSB7CiAgICAgICAgICAgICAgICAgSlNBcnJheSoganNBcnJheSA9IHN0YXRpY19jYXN0PEpTQXJy
YXkqPihiYXNlVmFsdWUpOwogICAgICAgICAgICAgICAgIGlmIChqc0FycmF5LT5jYW5TZXRJbmRl
eChpKSkKLSAgICAgICAgICAgICAgICAgICAganNBcnJheS0+c2V0SW5kZXgoaSwgclt2YWx1ZV0u
anNWYWx1ZShleGVjKSk7CisgICAgICAgICAgICAgICAgICAgIGpzQXJyYXktPnNldEluZGV4KGks
IGNhbGxGcmFtZVt2YWx1ZV0uanNWYWx1ZShjYWxsRnJhbWUpKTsKICAgICAgICAgICAgICAgICBl
bHNlCi0gICAgICAgICAgICAgICAgICAgIGpzQXJyYXktPkpTQXJyYXk6OnB1dChleGVjLCBpLCBy
W3ZhbHVlXS5qc1ZhbHVlKGV4ZWMpKTsKKyAgICAgICAgICAgICAgICAgICAganNBcnJheS0+SlNB
cnJheTo6cHV0KGNhbGxGcmFtZSwgaSwgY2FsbEZyYW1lW3ZhbHVlXS5qc1ZhbHVlKGNhbGxGcmFt
ZSkpOwogICAgICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICAgICAgYmFzZVZhbHVlLT5wdXQo
ZXhlYywgaSwgclt2YWx1ZV0uanNWYWx1ZShleGVjKSk7CisgICAgICAgICAgICAgICAgYmFzZVZh
bHVlLT5wdXQoY2FsbEZyYW1lLCBpLCBjYWxsRnJhbWVbdmFsdWVdLmpzVmFsdWUoY2FsbEZyYW1l
KSk7CiAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBJZGVudGlmaWVyIHByb3BlcnR5KGV4
ZWMsIHN1YnNjcmlwdC0+dG9TdHJpbmcoZXhlYykpOwotICAgICAgICAgICAgaWYgKCFleGVjLT5o
YWRFeGNlcHRpb24oKSkgeyAvLyBEb24ndCBwdXQgdG8gYW4gb2JqZWN0IGlmIHRvU3RyaW5nIHRo
cmV3IGFuIGV4Y2VwdGlvbi4KKyAgICAgICAgICAgIElkZW50aWZpZXIgcHJvcGVydHkoY2FsbEZy
YW1lLCBzdWJzY3JpcHQtPnRvU3RyaW5nKGNhbGxGcmFtZSkpOworICAgICAgICAgICAgaWYgKCFn
bG9iYWxEYXRhLT5leGNlcHRpb24pIHsgLy8gRG9uJ3QgcHV0IHRvIGFuIG9iamVjdCBpZiB0b1N0
cmluZyB0aHJldyBhbiBleGNlcHRpb24uCiAgICAgICAgICAgICAgICAgUHV0UHJvcGVydHlTbG90
IHNsb3Q7Ci0gICAgICAgICAgICAgICAgYmFzZVZhbHVlLT5wdXQoZXhlYywgcHJvcGVydHksIHJb
dmFsdWVdLmpzVmFsdWUoZXhlYyksIHNsb3QpOworICAgICAgICAgICAgICAgIGJhc2VWYWx1ZS0+
cHV0KGNhbGxGcmFtZSwgcHJvcGVydHksIGNhbGxGcmFtZVt2YWx1ZV0uanNWYWx1ZShjYWxsRnJh
bWUpLCBzbG90KTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogCkBAIC0yOTA0LDIyICsyODg2
LDIyIEBAIEpTVmFsdWUqIE1hY2hpbmU6OnByaXZhdGVFeGVjdXRlKEV4ZWN1dGkKICAgICAgICAg
aW50IGJhc2UgPSAoKyt2UEMpLT51Lm9wZXJhbmQ7CiAgICAgICAgIGludCBwcm9wZXJ0eSA9ICgr
K3ZQQyktPnUub3BlcmFuZDsKIAotICAgICAgICBKU09iamVjdCogYmFzZU9iaiA9IHJbYmFzZV0u
anNWYWx1ZShleGVjKS0+dG9PYmplY3QoZXhlYyk7IC8vIG1heSB0aHJvdworICAgICAgICBKU09i
amVjdCogYmFzZU9iaiA9IGNhbGxGcmFtZVtiYXNlXS5qc1ZhbHVlKGNhbGxGcmFtZSktPnRvT2Jq
ZWN0KGNhbGxGcmFtZSk7IC8vIG1heSB0aHJvdwogCi0gICAgICAgIEpTVmFsdWUqIHN1YnNjcmlw
dCA9IHJbcHJvcGVydHldLmpzVmFsdWUoZXhlYyk7CisgICAgICAgIEpTVmFsdWUqIHN1YnNjcmlw
dCA9IGNhbGxGcmFtZVtwcm9wZXJ0eV0uanNWYWx1ZShjYWxsRnJhbWUpOwogICAgICAgICBKU1Zh
bHVlKiByZXN1bHQ7CiAgICAgICAgIHVpbnQzMl90IGk7CiAgICAgICAgIGlmIChzdWJzY3JpcHQt
PmdldFVJbnQzMihpKSkKLSAgICAgICAgICAgIHJlc3VsdCA9IGpzQm9vbGVhbihiYXNlT2JqLT5k
ZWxldGVQcm9wZXJ0eShleGVjLCBpKSk7CisgICAgICAgICAgICByZXN1bHQgPSBqc0Jvb2xlYW4o
YmFzZU9iai0+ZGVsZXRlUHJvcGVydHkoY2FsbEZyYW1lLCBpKSk7CiAgICAgICAgIGVsc2Ugewog
ICAgICAgICAgICAgVk1fQ0hFQ0tfRVhDRVBUSU9OKCk7Ci0gICAgICAgICAgICBJZGVudGlmaWVy
IHByb3BlcnR5KGV4ZWMsIHN1YnNjcmlwdC0+dG9TdHJpbmcoZXhlYykpOworICAgICAgICAgICAg
SWRlbnRpZmllciBwcm9wZXJ0eShjYWxsRnJhbWUsIHN1YnNjcmlwdC0+dG9TdHJpbmcoY2FsbEZy
YW1lKSk7CiAgICAgICAgICAgICBWTV9DSEVDS19FWENFUFRJT04oKTsKLSAgICAgICAgICAgIHJl
c3VsdCA9IGpzQm9vbGVhbihiYXNlT2JqLT5kZWxldGVQcm9wZXJ0eShleGVjLCBwcm9wZXJ0eSkp
OworICAgICAgICAgICAgcmVzdWx0ID0ganNCb29sZWFuKGJhc2VPYmotPmRlbGV0ZVByb3BlcnR5
KGNhbGxGcmFtZSwgcHJvcGVydHkpKTsKICAgICAgICAgfQogCiAgICAgICAgIFZNX0NIRUNLX0VY
Q0VQVElPTigpOwotICAgICAgICByW2RzdF0gPSByZXN1bHQ7CisgICAgICAgIGNhbGxGcmFtZVtk
c3RdID0gcmVzdWx0OwogICAgICAgICArK3ZQQzsKICAgICAgICAgTkVYVF9PUENPREU7CiAgICAg
fQpAQCAtMjkzOSw3ICsyOTIxLDcgQEAgSlNWYWx1ZSogTWFjaGluZTo6cHJpdmF0ZUV4ZWN1dGUo
RXhlY3V0aQogICAgICAgICB1bnNpZ25lZCBwcm9wZXJ0eSA9ICgrK3ZQQyktPnUub3BlcmFuZDsK
ICAgICAgICAgaW50IHZhbHVlID0gKCsrdlBDKS0+dS5vcGVyYW5kOwogCi0gICAgICAgIHJbYmFz
ZV0uanNWYWx1ZShleGVjKS0+cHV0KGV4ZWMsIHByb3BlcnR5LCByW3ZhbHVlXS5qc1ZhbHVlKGV4
ZWMpKTsKKyAgICAgICAgY2FsbEZyYW1lW2Jhc2VdLmpzVmFsdWUoY2FsbEZyYW1lKS0+cHV0KGNh
bGxGcmFtZSwgcHJvcGVydHksIGNhbGxGcmFtZVt2YWx1ZV0uanNWYWx1ZShjYWxsRnJhbWUpKTsK
IAogICAgICAgICArK3ZQQzsKICAgICAgICAgTkVYVF9PUENPREU7CkBAIC0yOTg2LDcgKzI5Njgs
NyBAQCBKU1ZhbHVlKiBNYWNoaW5lOjpwcml2YXRlRXhlY3V0ZShFeGVjdXRpCiAgICAgICAgICAq
LwogICAgICAgICBpbnQgY29uZCA9ICgrK3ZQQyktPnUub3BlcmFuZDsKICAgICAgICAgaW50IHRh
cmdldCA9ICgrK3ZQQyktPnUub3BlcmFuZDsKLSAgICAgICAgaWYgKHJbY29uZF0uanNWYWx1ZShl
eGVjKS0+dG9Cb29sZWFuKGV4ZWMpKSB7CisgICAgICAgIGlmIChjYWxsRnJhbWVbY29uZF0uanNW
YWx1ZShjYWxsRnJhbWUpLT50b0Jvb2xlYW4oY2FsbEZyYW1lKSkgewogICAgICAgICAgICAgdlBD
ICs9IHRhcmdldDsKICAgICAgICAgICAgIENIRUNLX0ZPUl9USU1FT1VUKCk7CiAgICAgICAgICAg
ICBORVhUX09QQ09ERTsKQEAgLTMwMDMsNyArMjk4NSw3IEBAIEpTVmFsdWUqIE1hY2hpbmU6OnBy
aXZhdGVFeGVjdXRlKEV4ZWN1dGkKICAgICAgICAgKi8KICAgICAgICAgaW50IGNvbmQgPSAoKyt2
UEMpLT51Lm9wZXJhbmQ7CiAgICAgICAgIGludCB0YXJnZXQgPSAoKyt2UEMpLT51Lm9wZXJhbmQ7
Ci0gICAgICAgIGlmIChyW2NvbmRdLmpzVmFsdWUoZXhlYyktPnRvQm9vbGVhbihleGVjKSkgewor
ICAgICAgICBpZiAoY2FsbEZyYW1lW2NvbmRdLmpzVmFsdWUoY2FsbEZyYW1lKS0+dG9Cb29sZWFu
KGNhbGxGcmFtZSkpIHsKICAgICAgICAgICAgIHZQQyArPSB0YXJnZXQ7CiAgICAgICAgICAgICBO
RVhUX09QQ09ERTsKICAgICAgICAgfQpAQCAtMzAxOSw3ICszMDAxLDcgQEAgSlNWYWx1ZSogTWFj
aGluZTo6cHJpdmF0ZUV4ZWN1dGUoRXhlY3V0aQogICAgICAgICAqLwogICAgICAgICBpbnQgY29u
ZCA9ICgrK3ZQQyktPnUub3BlcmFuZDsKICAgICAgICAgaW50IHRhcmdldCA9ICgrK3ZQQyktPnUu
b3BlcmFuZDsKLSAgICAgICAgaWYgKCFyW2NvbmRdLmpzVmFsdWUoZXhlYyktPnRvQm9vbGVhbihl
eGVjKSkgeworICAgICAgICBpZiAoIWNhbGxGcmFtZVtjb25kXS5qc1ZhbHVlKGNhbGxGcmFtZSkt
PnRvQm9vbGVhbihjYWxsRnJhbWUpKSB7CiAgICAgICAgICAgICB2UEMgKz0gdGFyZ2V0OwogICAg
ICAgICAgICAgTkVYVF9PUENPREU7CiAgICAgICAgIH0KQEAgLTMwMzgsMTEgKzMwMjAsMTEgQEAg
SlNWYWx1ZSogTWFjaGluZTo6cHJpdmF0ZUV4ZWN1dGUoRXhlY3V0aQogICAgICAgICAgICBBZGRp
dGlvbmFsbHkgdGhpcyBsb29wIGluc3RydWN0aW9uIG1heSB0ZXJtaW5hdGUgSlMgZXhlY3V0aW9u
IGlzCiAgICAgICAgICAgIHRoZSBKUyB0aW1lb3V0IGlzIHJlYWNoZWQuCiAgICAgICAgICAqLwot
ICAgICAgICBKU1ZhbHVlKiBzcmMxID0gclsoKyt2UEMpLT51Lm9wZXJhbmRdLmpzVmFsdWUoZXhl
Yyk7Ci0gICAgICAgIEpTVmFsdWUqIHNyYzIgPSByWygrK3ZQQyktPnUub3BlcmFuZF0uanNWYWx1
ZShleGVjKTsKKyAgICAgICAgSlNWYWx1ZSogc3JjMSA9IGNhbGxGcmFtZVsoKyt2UEMpLT51Lm9w
ZXJhbmRdLmpzVmFsdWUoY2FsbEZyYW1lKTsKKyAgICAgICAgSlNWYWx1ZSogc3JjMiA9IGNhbGxG
cmFtZVsoKyt2UEMpLT51Lm9wZXJhbmRdLmpzVmFsdWUoY2FsbEZyYW1lKTsKICAgICAgICAgaW50
IHRhcmdldCA9ICgrK3ZQQyktPnUub3BlcmFuZDsKICAgICAgICAgCi0gICAgICAgIGJvb2wgcmVz
dWx0ID0ganNMZXNzKGV4ZWMsIHNyYzEsIHNyYzIpOworICAgICAgICBib29sIHJlc3VsdCA9IGpz
TGVzcyhjYWxsRnJhbWUsIHNyYzEsIHNyYzIpOwogICAgICAgICBWTV9DSEVDS19FWENFUFRJT04o
KTsKICAgICAgICAgCiAgICAgICAgIGlmIChyZXN1bHQpIHsKQEAgLTMwNjUsMTEgKzMwNDcsMTEg
QEAgSlNWYWx1ZSogTWFjaGluZTo6cHJpdmF0ZUV4ZWN1dGUoRXhlY3V0aQogICAgICAgICAgICBB
ZGRpdGlvbmFsbHkgdGhpcyBsb29wIGluc3RydWN0aW9uIG1heSB0ZXJtaW5hdGUgSlMgZXhlY3V0
aW9uIGlzCiAgICAgICAgICAgIHRoZSBKUyB0aW1lb3V0IGlzIHJlYWNoZWQuCiAgICAgICAgICov
Ci0gICAgICAgIEpTVmFsdWUqIHNyYzEgPSByWygrK3ZQQyktPnUub3BlcmFuZF0uanNWYWx1ZShl
eGVjKTsKLSAgICAgICAgSlNWYWx1ZSogc3JjMiA9IHJbKCsrdlBDKS0+dS5vcGVyYW5kXS5qc1Zh
bHVlKGV4ZWMpOworICAgICAgICBKU1ZhbHVlKiBzcmMxID0gY2FsbEZyYW1lWygrK3ZQQyktPnUu
b3BlcmFuZF0uanNWYWx1ZShjYWxsRnJhbWUpOworICAgICAgICBKU1ZhbHVlKiBzcmMyID0gY2Fs
bEZyYW1lWygrK3ZQQyktPnUub3BlcmFuZF0uanNWYWx1ZShjYWxsRnJhbWUpOwogICAgICAgICBp
bnQgdGFyZ2V0ID0gKCsrdlBDKS0+dS5vcGVyYW5kOwogICAgICAgICAKLSAgICAgICAgYm9vbCBy
ZXN1bHQgPSBqc0xlc3NFcShleGVjLCBzcmMxLCBzcmMyKTsKKyAgICAgICAgYm9vbCByZXN1bHQg
PSBqc0xlc3NFcShjYWxsRnJhbWUsIHNyYzEsIHNyYzIpOwogICAgICAgICBWTV9DSEVDS19FWENF
UFRJT04oKTsKICAgICAgICAgCiAgICAgICAgIGlmIChyZXN1bHQpIHsKQEAgLTMwODksMTEgKzMw
NzEsMTEgQEAgSlNWYWx1ZSogTWFjaGluZTo6cHJpdmF0ZUV4ZWN1dGUoRXhlY3V0aQogICAgICAg
ICAgICB0YXJnZXQgZnJvbSB0aGUgY3VycmVudCBpbnN0cnVjdGlvbiwgaWYgYW5kIG9ubHkgaWYg
dGhlIAogICAgICAgICAgICByZXN1bHQgb2YgdGhlIGNvbXBhcmlzb24gaXMgZmFsc2UuCiAgICAg
ICAgICovCi0gICAgICAgIEpTVmFsdWUqIHNyYzEgPSByWygrK3ZQQyktPnUub3BlcmFuZF0uanNW
YWx1ZShleGVjKTsKLSAgICAgICAgSlNWYWx1ZSogc3JjMiA9IHJbKCsrdlBDKS0+dS5vcGVyYW5k
XS5qc1ZhbHVlKGV4ZWMpOworICAgICAgICBKU1ZhbHVlKiBzcmMxID0gY2FsbEZyYW1lWygrK3ZQ
QyktPnUub3BlcmFuZF0uanNWYWx1ZShjYWxsRnJhbWUpOworICAgICAgICBKU1ZhbHVlKiBzcmMy
ID0gY2FsbEZyYW1lWygrK3ZQQyktPnUub3BlcmFuZF0uanNWYWx1ZShjYWxsRnJhbWUpOwogICAg
ICAgICBpbnQgdGFyZ2V0ID0gKCsrdlBDKS0+dS5vcGVyYW5kOwogCi0gICAgICAgIGJvb2wgcmVz
dWx0ID0ganNMZXNzKGV4ZWMsIHNyYzEsIHNyYzIpOworICAgICAgICBib29sIHJlc3VsdCA9IGpz
TGVzcyhjYWxsRnJhbWUsIHNyYzEsIHNyYzIpOwogICAgICAgICBWTV9DSEVDS19FWENFUFRJT04o
KTsKICAgICAgICAgCiAgICAgICAgIGlmICghcmVzdWx0KSB7CkBAIC0zMTE1LDEyICszMDk3LDEy
IEBAIEpTVmFsdWUqIE1hY2hpbmU6OnByaXZhdGVFeGVjdXRlKEV4ZWN1dGkKICAgICAgICAgICov
CiAgICAgICAgIGludCB0YWJsZUluZGV4ID0gKCsrdlBDKS0+dS5vcGVyYW5kOwogICAgICAgICBp
bnQgZGVmYXVsdE9mZnNldCA9ICgrK3ZQQyktPnUub3BlcmFuZDsKLSAgICAgICAgSlNWYWx1ZSog
c2NydXRpbmVlID0gclsoKyt2UEMpLT51Lm9wZXJhbmRdLmpzVmFsdWUoZXhlYyk7CisgICAgICAg
IEpTVmFsdWUqIHNjcnV0aW5lZSA9IGNhbGxGcmFtZVsoKyt2UEMpLT51Lm9wZXJhbmRdLmpzVmFs
dWUoY2FsbEZyYW1lKTsKICAgICAgICAgaWYgKCFKU0ltbWVkaWF0ZTo6aXNOdW1iZXIoc2NydXRp
bmVlKSkKICAgICAgICAgICAgIHZQQyArPSBkZWZhdWx0T2Zmc2V0OwogICAgICAgICBlbHNlIHsK
ICAgICAgICAgICAgIGludDMyX3QgdmFsdWUgPSBKU0ltbWVkaWF0ZTo6Z2V0VHJ1bmNhdGVkSW50
MzIoc2NydXRpbmVlKTsKLSAgICAgICAgICAgIHZQQyArPSBjb2RlQmxvY2sociktPmltbWVkaWF0
ZVN3aXRjaEp1bXBUYWJsZXNbdGFibGVJbmRleF0ub2Zmc2V0Rm9yVmFsdWUodmFsdWUsIGRlZmF1
bHRPZmZzZXQpOworICAgICAgICAgICAgdlBDICs9IGNhbGxGcmFtZS0+Y29kZUJsb2NrKCktPmlt
bWVkaWF0ZVN3aXRjaEp1bXBUYWJsZXNbdGFibGVJbmRleF0ub2Zmc2V0Rm9yVmFsdWUodmFsdWUs
IGRlZmF1bHRPZmZzZXQpOwogICAgICAgICB9CiAgICAgICAgIE5FWFRfT1BDT0RFOwogICAgIH0K
QEAgLTMxMzUsNyArMzExNyw3IEBAIEpTVmFsdWUqIE1hY2hpbmU6OnByaXZhdGVFeGVjdXRlKEV4
ZWN1dGkKICAgICAgICAgICovCiAgICAgICAgIGludCB0YWJsZUluZGV4ID0gKCsrdlBDKS0+dS5v
cGVyYW5kOwogICAgICAgICBpbnQgZGVmYXVsdE9mZnNldCA9ICgrK3ZQQyktPnUub3BlcmFuZDsK
LSAgICAgICAgSlNWYWx1ZSogc2NydXRpbmVlID0gclsoKyt2UEMpLT51Lm9wZXJhbmRdLmpzVmFs
dWUoZXhlYyk7CisgICAgICAgIEpTVmFsdWUqIHNjcnV0aW5lZSA9IGNhbGxGcmFtZVsoKyt2UEMp
LT51Lm9wZXJhbmRdLmpzVmFsdWUoY2FsbEZyYW1lKTsKICAgICAgICAgaWYgKCFzY3J1dGluZWUt
PmlzU3RyaW5nKCkpCiAgICAgICAgICAgICB2UEMgKz0gZGVmYXVsdE9mZnNldDsKICAgICAgICAg
ZWxzZSB7CkBAIC0zMTQzLDcgKzMxMjUsNyBAQCBKU1ZhbHVlKiBNYWNoaW5lOjpwcml2YXRlRXhl
Y3V0ZShFeGVjdXRpCiAgICAgICAgICAgICBpZiAodmFsdWUtPnNpemUoKSAhPSAxKQogICAgICAg
ICAgICAgICAgIHZQQyArPSBkZWZhdWx0T2Zmc2V0OwogICAgICAgICAgICAgZWxzZQotICAgICAg
ICAgICAgICAgIHZQQyArPSBjb2RlQmxvY2sociktPmNoYXJhY3RlclN3aXRjaEp1bXBUYWJsZXNb
dGFibGVJbmRleF0ub2Zmc2V0Rm9yVmFsdWUodmFsdWUtPmRhdGEoKVswXSwgZGVmYXVsdE9mZnNl
dCk7CisgICAgICAgICAgICAgICAgdlBDICs9IGNhbGxGcmFtZS0+Y29kZUJsb2NrKCktPmNoYXJh
Y3RlclN3aXRjaEp1bXBUYWJsZXNbdGFibGVJbmRleF0ub2Zmc2V0Rm9yVmFsdWUodmFsdWUtPmRh
dGEoKVswXSwgZGVmYXVsdE9mZnNldCk7CiAgICAgICAgIH0KICAgICAgICAgTkVYVF9PUENPREU7
CiAgICAgfQpAQCAtMzE1OCwxMSArMzE0MCwxMSBAQCBKU1ZhbHVlKiBNYWNoaW5lOjpwcml2YXRl
RXhlY3V0ZShFeGVjdXRpCiAgICAgICAgICAqLwogICAgICAgICBpbnQgdGFibGVJbmRleCA9ICgr
K3ZQQyktPnUub3BlcmFuZDsKICAgICAgICAgaW50IGRlZmF1bHRPZmZzZXQgPSAoKyt2UEMpLT51
Lm9wZXJhbmQ7Ci0gICAgICAgIEpTVmFsdWUqIHNjcnV0aW5lZSA9IHJbKCsrdlBDKS0+dS5vcGVy
YW5kXS5qc1ZhbHVlKGV4ZWMpOworICAgICAgICBKU1ZhbHVlKiBzY3J1dGluZWUgPSBjYWxsRnJh
bWVbKCsrdlBDKS0+dS5vcGVyYW5kXS5qc1ZhbHVlKGNhbGxGcmFtZSk7CiAgICAgICAgIGlmICgh
c2NydXRpbmVlLT5pc1N0cmluZygpKQogICAgICAgICAgICAgdlBDICs9IGRlZmF1bHRPZmZzZXQ7
CiAgICAgICAgIGVsc2UgCi0gICAgICAgICAgICB2UEMgKz0gY29kZUJsb2NrKHIpLT5zdHJpbmdT
d2l0Y2hKdW1wVGFibGVzW3RhYmxlSW5kZXhdLm9mZnNldEZvclZhbHVlKHN0YXRpY19jYXN0PEpT
U3RyaW5nKj4oc2NydXRpbmVlKS0+dmFsdWUoKS5yZXAoKSwgZGVmYXVsdE9mZnNldCk7CisgICAg
ICAgICAgICB2UEMgKz0gY2FsbEZyYW1lLT5jb2RlQmxvY2soKS0+c3RyaW5nU3dpdGNoSnVtcFRh
Ymxlc1t0YWJsZUluZGV4XS5vZmZzZXRGb3JWYWx1ZShzdGF0aWNfY2FzdDxKU1N0cmluZyo+KHNj
cnV0aW5lZSktPnZhbHVlKCkucmVwKCksIGRlZmF1bHRPZmZzZXQpOwogICAgICAgICBORVhUX09Q
Q09ERTsKICAgICB9CiAgICAgQkVHSU5fT1BDT0RFKG9wX25ld19mdW5jKSB7CkBAIC0zMTc2LDcg
KzMxNTgsNyBAQCBKU1ZhbHVlKiBNYWNoaW5lOjpwcml2YXRlRXhlY3V0ZShFeGVjdXRpCiAgICAg
ICAgIGludCBkc3QgPSAoKyt2UEMpLT51Lm9wZXJhbmQ7CiAgICAgICAgIGludCBmdW5jID0gKCsr
dlBDKS0+dS5vcGVyYW5kOwogCi0gICAgICAgIHJbZHN0XSA9IGNvZGVCbG9jayhyKS0+ZnVuY3Rp
b25zW2Z1bmNdLT5tYWtlRnVuY3Rpb24oZXhlYywgc2NvcGVDaGFpbihyKSk7CisgICAgICAgIGNh
bGxGcmFtZVtkc3RdID0gY2FsbEZyYW1lLT5jb2RlQmxvY2soKS0+ZnVuY3Rpb25zW2Z1bmNdLT5t
YWtlRnVuY3Rpb24oY2FsbEZyYW1lLCBjYWxsRnJhbWUtPnNjb3BlQ2hhaW4oKSk7CiAKICAgICAg
ICAgKyt2UEM7CiAgICAgICAgIE5FWFRfT1BDT0RFOwpAQCAtMzE5Miw3ICszMTc0LDcgQEAgSlNW
YWx1ZSogTWFjaGluZTo6cHJpdmF0ZUV4ZWN1dGUoRXhlY3V0aQogICAgICAgICBpbnQgZHN0ID0g
KCsrdlBDKS0+dS5vcGVyYW5kOwogICAgICAgICBpbnQgZnVuYyA9ICgrK3ZQQyktPnUub3BlcmFu
ZDsKIAotICAgICAgICByW2RzdF0gPSBjb2RlQmxvY2sociktPmZ1bmN0aW9uRXhwcmVzc2lvbnNb
ZnVuY10tPm1ha2VGdW5jdGlvbihleGVjLCBzY29wZUNoYWluKHIpKTsKKyAgICAgICAgY2FsbEZy
YW1lW2RzdF0gPSBjYWxsRnJhbWUtPmNvZGVCbG9jaygpLT5mdW5jdGlvbkV4cHJlc3Npb25zW2Z1
bmNdLT5tYWtlRnVuY3Rpb24oY2FsbEZyYW1lLCBjYWxsRnJhbWUtPnNjb3BlQ2hhaW4oKSk7CiAK
ICAgICAgICAgKyt2UEM7CiAgICAgICAgIE5FWFRfT1BDT0RFOwpAQCAtMzIxNiwxNyArMzE5OCwx
NyBAQCBKU1ZhbHVlKiBNYWNoaW5lOjpwcml2YXRlRXhlY3V0ZShFeGVjdXRpCiAgICAgICAgIGlu
dCBhcmdDb3VudCA9ICgrK3ZQQyktPnUub3BlcmFuZDsKICAgICAgICAgKyt2UEM7IC8vIHJlZ2lz
dGVyT2Zmc2V0CiAKLSAgICAgICAgSlNWYWx1ZSogZnVuY1ZhbCA9IHJbZnVuY10uanNWYWx1ZShl
eGVjKTsKLSAgICAgICAgSlNWYWx1ZSogYmFzZVZhbCA9IHJbdGhpc1ZhbF0uanNWYWx1ZShleGVj
KTsKKyAgICAgICAgSlNWYWx1ZSogZnVuY1ZhbCA9IGNhbGxGcmFtZVtmdW5jXS5qc1ZhbHVlKGNh
bGxGcmFtZSk7CisgICAgICAgIEpTVmFsdWUqIGJhc2VWYWwgPSBjYWxsRnJhbWVbdGhpc1ZhbF0u
anNWYWx1ZShjYWxsRnJhbWUpOwogCi0gICAgICAgIFNjb3BlQ2hhaW5Ob2RlKiBzY29wZUNoYWlu
ID0gdGhpcy0+c2NvcGVDaGFpbihyKTsKKyAgICAgICAgU2NvcGVDaGFpbk5vZGUqIHNjb3BlQ2hh
aW4gPSBjYWxsRnJhbWUtPnNjb3BlQ2hhaW4oKTsKICAgICAgICAgaWYgKGJhc2VWYWwgPT0gc2Nv
cGVDaGFpbi0+Z2xvYmFsT2JqZWN0KCkgJiYgZnVuY1ZhbCA9PSBzY29wZUNoYWluLT5nbG9iYWxP
YmplY3QoKS0+ZXZhbEZ1bmN0aW9uKCkpIHsKLSAgICAgICAgICAgIEpTT2JqZWN0KiB0aGlzT2Jq
ZWN0ID0gc3RhdGljX2Nhc3Q8SlNPYmplY3QqPihyW2NvZGVCbG9jayhyKS0+dGhpc1JlZ2lzdGVy
XS5qc1ZhbHVlKGV4ZWMpKTsKLSAgICAgICAgICAgIEpTVmFsdWUqIHJlc3VsdCA9IGNhbGxFdmFs
KGV4ZWMsIHRoaXNPYmplY3QsIHNjb3BlQ2hhaW4sIHJlZ2lzdGVyRmlsZSwgciwgZmlyc3RBcmcs
IGFyZ0NvdW50LCBleGNlcHRpb25WYWx1ZSk7CisgICAgICAgICAgICBKU09iamVjdCogdGhpc09i
amVjdCA9IHN0YXRpY19jYXN0PEpTT2JqZWN0Kj4oY2FsbEZyYW1lW2NhbGxGcmFtZS0+Y29kZUJs
b2NrKCktPnRoaXNSZWdpc3Rlcl0uanNWYWx1ZShjYWxsRnJhbWUpKTsKKyAgICAgICAgICAgIEpT
VmFsdWUqIHJlc3VsdCA9IGNhbGxFdmFsKGNhbGxGcmFtZSwgdGhpc09iamVjdCwgc2NvcGVDaGFp
biwgcmVnaXN0ZXJGaWxlLCBmaXJzdEFyZywgYXJnQ291bnQsIGV4Y2VwdGlvblZhbHVlKTsKICAg
ICAgICAgICAgIGlmIChleGNlcHRpb25WYWx1ZSkKICAgICAgICAgICAgICAgICBnb3RvIHZtX3Ro
cm93OwogCi0gICAgICAgICAgICByW2RzdF0gPSByZXN1bHQ7CisgICAgICAgICAgICBjYWxsRnJh
bWVbZHN0XSA9IHJlc3VsdDsKIAogICAgICAgICAgICAgKyt2UEM7CiAgICAgICAgICAgICBORVhU
X09QQ09ERTsKQEAgLTMyMzYsNyArMzIxOCw3IEBAIEpTVmFsdWUqIE1hY2hpbmU6OnByaXZhdGVF
eGVjdXRlKEV4ZWN1dGkKICAgICAgICAgLy8gdGhpcyBpbnN0cnVjdGlvbiBhcyBhIG5vcm1hbCBm
dW5jdGlvbiBjYWxsLCBzdXBwbHlpbmcgdGhlIHByb3BlciAndGhpcycKICAgICAgICAgLy8gdmFs
dWUuCiAgICAgICAgIHZQQyAtPSA2OwotICAgICAgICByW3RoaXNWYWxdID0gYmFzZVZhbC0+dG9U
aGlzT2JqZWN0KGV4ZWMpOworICAgICAgICBjYWxsRnJhbWVbdGhpc1ZhbF0gPSBiYXNlVmFsLT50
b1RoaXNPYmplY3QoY2FsbEZyYW1lKTsKIAogI2lmIEhBVkUoQ09NUFVURURfR09UTykKICAgICAg
ICAgLy8gSGFjayBhcm91bmQgZ2NjIHBlcmZvcm1hbmNlIHF1aXJrIGJ5IHBlcmZvcm1pbmcgYW4g
aW5kaXJlY3QgZ290bwpAQCAtMzI5MCw3ICszMjcyLDcgQEAgSlNWYWx1ZSogTWFjaGluZTo6cHJp
dmF0ZUV4ZWN1dGUoRXhlY3V0aQogICAgICAgICBpbnQgYXJnQ291bnQgPSAoKyt2UEMpLT51Lm9w
ZXJhbmQ7CiAgICAgICAgIGludCByZWdpc3Rlck9mZnNldCA9ICgrK3ZQQyktPnUub3BlcmFuZDsK
IAotICAgICAgICBKU1ZhbHVlKiB2ID0gcltmdW5jXS5qc1ZhbHVlKGV4ZWMpOworICAgICAgICBK
U1ZhbHVlKiB2ID0gY2FsbEZyYW1lW2Z1bmNdLmpzVmFsdWUoY2FsbEZyYW1lKTsKIAogICAgICAg
ICBDYWxsRGF0YSBjYWxsRGF0YTsKICAgICAgICAgQ2FsbFR5cGUgY2FsbFR5cGUgPSB2LT5nZXRD
YWxsRGF0YShjYWxsRGF0YSk7CkBAIC0zMzAwLDIxICszMjgyLDIxIEBAIEpTVmFsdWUqIE1hY2hp
bmU6OnByaXZhdGVFeGVjdXRlKEV4ZWN1dGkKICAgICAgICAgICAgIEZ1bmN0aW9uQm9keU5vZGUq
IGZ1bmN0aW9uQm9keU5vZGUgPSBjYWxsRGF0YS5qcy5mdW5jdGlvbkJvZHk7CiAgICAgICAgICAg
ICBDb2RlQmxvY2sqIG5ld0NvZGVCbG9jayA9ICZmdW5jdGlvbkJvZHlOb2RlLT5ieXRlQ29kZShj
YWxsRGF0YVNjb3BlQ2hhaW4pOwogCi0gICAgICAgICAgICByW2ZpcnN0QXJnXSA9IHRoaXNWYWwg
PT0gbWlzc2luZ1RoaXNPYmplY3RNYXJrZXIoKSA/IGV4ZWMtPmdsb2JhbFRoaXNWYWx1ZSgpIDog
clt0aGlzVmFsXS5qc1ZhbHVlKGV4ZWMpOworICAgICAgICAgICAgY2FsbEZyYW1lW2ZpcnN0QXJn
XSA9IHRoaXNWYWwgPT0gbWlzc2luZ1RoaXNPYmplY3RNYXJrZXIoKSA/IGNhbGxGcmFtZS0+Z2xv
YmFsVGhpc1ZhbHVlKCkgOiBjYWxsRnJhbWVbdGhpc1ZhbF0uanNWYWx1ZShjYWxsRnJhbWUpOwog
ICAgICAgICAgICAgCi0gICAgICAgICAgICBSZWdpc3Rlciogc2F2ZWRSID0gcjsKKyAgICAgICAg
ICAgIENhbGxGcmFtZSogcHJldmlvdXNDYWxsRnJhbWUgPSBjYWxsRnJhbWU7CiAKLSAgICAgICAg
ICAgIHIgPSBzbGlkZVJlZ2lzdGVyV2luZG93Rm9yQ2FsbChuZXdDb2RlQmxvY2ssIHJlZ2lzdGVy
RmlsZSwgciwgcmVnaXN0ZXJPZmZzZXQsIGFyZ0NvdW50KTsKLSAgICAgICAgICAgIGlmIChVTkxJ
S0VMWSghcikpIHsKLSAgICAgICAgICAgICAgICByID0gc2F2ZWRSOwotICAgICAgICAgICAgICAg
IGV4Y2VwdGlvblZhbHVlID0gY3JlYXRlU3RhY2tPdmVyZmxvd0Vycm9yKENhbGxGcmFtZTo6Y3Jl
YXRlKHIpKTsKKyAgICAgICAgICAgIGNhbGxGcmFtZSA9IHNsaWRlUmVnaXN0ZXJXaW5kb3dGb3JD
YWxsKG5ld0NvZGVCbG9jaywgcmVnaXN0ZXJGaWxlLCBjYWxsRnJhbWUsIHJlZ2lzdGVyT2Zmc2V0
LCBhcmdDb3VudCk7CisgICAgICAgICAgICBpZiAoVU5MSUtFTFkoIWNhbGxGcmFtZSkpIHsKKyAg
ICAgICAgICAgICAgICBjYWxsRnJhbWUgPSBwcmV2aW91c0NhbGxGcmFtZTsKKyAgICAgICAgICAg
ICAgICBleGNlcHRpb25WYWx1ZSA9IGNyZWF0ZVN0YWNrT3ZlcmZsb3dFcnJvcihjYWxsRnJhbWUp
OwogICAgICAgICAgICAgICAgIGdvdG8gdm1fdGhyb3c7CiAgICAgICAgICAgICB9CiAKLSAgICAg
ICAgICAgIGluaXRpYWxpemVDYWxsRnJhbWUociwgbmV3Q29kZUJsb2NrLCB2UEMgKyAxLCBjYWxs
RGF0YVNjb3BlQ2hhaW4sIHNhdmVkUiwgZHN0LCBhcmdDb3VudCwgdik7CisgICAgICAgICAgICBj
YWxsRnJhbWUtPmluaXQobmV3Q29kZUJsb2NrLCB2UEMgKyAxLCBjYWxsRGF0YVNjb3BlQ2hhaW4s
IHByZXZpb3VzQ2FsbEZyYW1lLCBkc3QsIGFyZ0NvdW50LCBzdGF0aWNfY2FzdDxKU0Z1bmN0aW9u
Kj4odikpOwogICAgIAogICAgICAgICAgICAgaWYgKCplbmFibGVkUHJvZmlsZXJSZWZlcmVuY2Up
Ci0gICAgICAgICAgICAgICAgKCplbmFibGVkUHJvZmlsZXJSZWZlcmVuY2UpLT53aWxsRXhlY3V0
ZShleGVjLCBzdGF0aWNfY2FzdDxKU09iamVjdCo+KHYpKTsKKyAgICAgICAgICAgICAgICAoKmVu
YWJsZWRQcm9maWxlclJlZmVyZW5jZSktPndpbGxFeGVjdXRlKGNhbGxGcmFtZSwgc3RhdGljX2Nh
c3Q8SlNPYmplY3QqPih2KSk7CiAKICAgICAgICAgICAgIHZQQyA9IG5ld0NvZGVCbG9jay0+aW5z
dHJ1Y3Rpb25zLmJlZ2luKCk7CiAKQEAgLTMzMjYsMjUgKzMzMDgsMjUgQEAgSlNWYWx1ZSogTWFj
aGluZTo6cHJpdmF0ZUV4ZWN1dGUoRXhlY3V0aQogICAgICAgICB9CiAKICAgICAgICAgaWYgKGNh
bGxUeXBlID09IENhbGxUeXBlSG9zdCkgewotICAgICAgICAgICAgSlNWYWx1ZSogdGhpc1ZhbHVl
ID0gdGhpc1ZhbCA9PSBtaXNzaW5nVGhpc09iamVjdE1hcmtlcigpID8gZXhlYy0+Z2xvYmFsVGhp
c1ZhbHVlKCkgOiByW3RoaXNWYWxdLmpzVmFsdWUoZXhlYyk7Ci0gICAgICAgICAgICBBcmdMaXN0
IGFyZ3MociArIGZpcnN0QXJnICsgMSwgYXJnQ291bnQgLSAxKTsKKyAgICAgICAgICAgIEpTVmFs
dWUqIHRoaXNWYWx1ZSA9IHRoaXNWYWwgPT0gbWlzc2luZ1RoaXNPYmplY3RNYXJrZXIoKSA/IGNh
bGxGcmFtZS0+Z2xvYmFsVGhpc1ZhbHVlKCkgOiBjYWxsRnJhbWVbdGhpc1ZhbF0uanNWYWx1ZShj
YWxsRnJhbWUpOworICAgICAgICAgICAgQXJnTGlzdCBhcmdzKGNhbGxGcmFtZS0+cmVnaXN0ZXJz
KCkgKyBmaXJzdEFyZyArIDEsIGFyZ0NvdW50IC0gMSk7CiAKLSAgICAgICAgICAgIFNjb3BlQ2hh
aW5Ob2RlKiBzY29wZUNoYWluID0gdGhpcy0+c2NvcGVDaGFpbihyKTsKLSAgICAgICAgICAgIGlu
aXRpYWxpemVDYWxsRnJhbWUociArIHJlZ2lzdGVyT2Zmc2V0LCAwLCB2UEMgKyAxLCBzY29wZUNo
YWluLCByLCBkc3QsIGFyZ0NvdW50LCB2KTsKLSAgICAgICAgICAgIEV4ZWNTdGF0ZSogY2FsbEZy
YW1lID0gQ2FsbEZyYW1lOjpjcmVhdGUociArIHJlZ2lzdGVyT2Zmc2V0KTsKKyAgICAgICAgICAg
IFNjb3BlQ2hhaW5Ob2RlKiBzY29wZUNoYWluID0gY2FsbEZyYW1lLT5zY29wZUNoYWluKCk7Cisg
ICAgICAgICAgICBDYWxsRnJhbWUqIG5ld0NhbGxGcmFtZSA9IENhbGxGcmFtZTo6Y3JlYXRlKGNh
bGxGcmFtZS0+cmVnaXN0ZXJzKCkgKyByZWdpc3Rlck9mZnNldCk7CisgICAgICAgICAgICBuZXdD
YWxsRnJhbWUtPmluaXQoMCwgdlBDICsgMSwgc2NvcGVDaGFpbiwgY2FsbEZyYW1lLCBkc3QsIGFy
Z0NvdW50LCBzdGF0aWNfY2FzdDxKU0Z1bmN0aW9uKj4odikpOwogCiAgICAgICAgICAgICBpZiAo
KmVuYWJsZWRQcm9maWxlclJlZmVyZW5jZSkKLSAgICAgICAgICAgICAgICAoKmVuYWJsZWRQcm9m
aWxlclJlZmVyZW5jZSktPndpbGxFeGVjdXRlKGNhbGxGcmFtZSwgc3RhdGljX2Nhc3Q8SlNPYmpl
Y3QqPih2KSk7CisgICAgICAgICAgICAgICAgKCplbmFibGVkUHJvZmlsZXJSZWZlcmVuY2UpLT53
aWxsRXhlY3V0ZShuZXdDYWxsRnJhbWUsIHN0YXRpY19jYXN0PEpTRnVuY3Rpb24qPih2KSk7CiAK
ICAgICAgICAgICAgIE1BQ0hJTkVfU0FNUExJTkdfY2FsbGluZ0hvc3RGdW5jdGlvbigpOwogCi0g
ICAgICAgICAgICBKU1ZhbHVlKiByZXR1cm5WYWx1ZSA9IGNhbGxEYXRhLm5hdGl2ZS5mdW5jdGlv
bihjYWxsRnJhbWUsIHN0YXRpY19jYXN0PEpTT2JqZWN0Kj4odiksIHRoaXNWYWx1ZSwgYXJncyk7
CisgICAgICAgICAgICBKU1ZhbHVlKiByZXR1cm5WYWx1ZSA9IGNhbGxEYXRhLm5hdGl2ZS5mdW5j
dGlvbihuZXdDYWxsRnJhbWUsIHN0YXRpY19jYXN0PEpTRnVuY3Rpb24qPih2KSwgdGhpc1ZhbHVl
LCBhcmdzKTsKICAgICAgICAgICAgIFZNX0NIRUNLX0VYQ0VQVElPTigpOwogCi0gICAgICAgICAg
ICByW2RzdF0gPSByZXR1cm5WYWx1ZTsKKyAgICAgICAgICAgIG5ld0NhbGxGcmFtZVtkc3RdID0g
cmV0dXJuVmFsdWU7CiAKICAgICAgICAgICAgIGlmICgqZW5hYmxlZFByb2ZpbGVyUmVmZXJlbmNl
KQotICAgICAgICAgICAgICAgICgqZW5hYmxlZFByb2ZpbGVyUmVmZXJlbmNlKS0+ZGlkRXhlY3V0
ZShDYWxsRnJhbWU6OmNyZWF0ZShyKSwgc3RhdGljX2Nhc3Q8SlNPYmplY3QqPih2KSk7CisgICAg
ICAgICAgICAgICAgKCplbmFibGVkUHJvZmlsZXJSZWZlcmVuY2UpLT5kaWRFeGVjdXRlKGNhbGxG
cmFtZSwgc3RhdGljX2Nhc3Q8SlNGdW5jdGlvbio+KHYpKTsKIAogICAgICAgICAgICAgKyt2UEM7
CiAgICAgICAgICAgICBORVhUX09QQ09ERTsKQEAgLTMzNTIsMjcgKzMzMzQsMjEgQEAgSlNWYWx1
ZSogTWFjaGluZTo6cHJpdmF0ZUV4ZWN1dGUoRXhlY3V0aQogCiAgICAgICAgIEFTU0VSVChjYWxs
VHlwZSA9PSBDYWxsVHlwZU5vbmUpOwogCi0gICAgICAgIGV4Y2VwdGlvblZhbHVlID0gY3JlYXRl
Tm90QUZ1bmN0aW9uRXJyb3IoZXhlYywgdiwgdlBDLCBjb2RlQmxvY2socikpOworICAgICAgICBl
eGNlcHRpb25WYWx1ZSA9IGNyZWF0ZU5vdEFGdW5jdGlvbkVycm9yKGNhbGxGcmFtZSwgdiwgdlBD
LCBjYWxsRnJhbWUtPmNvZGVCbG9jaygpKTsKICAgICAgICAgZ290byB2bV90aHJvdzsKICAgICB9
CiAgICAgQkVHSU5fT1BDT0RFKG9wX3RlYXJfb2ZmX2FjdGl2YXRpb24pIHsKLSAgICAgICAgSlNB
Y3RpdmF0aW9uKiBhY3RpdmF0aW9uID0gc3RhdGljX2Nhc3Q8SlNBY3RpdmF0aW9uKj4ocltSZWdp
c3RlckZpbGU6Ok9wdGlvbmFsQ2FsbGVlQWN0aXZhdGlvbl0uZ2V0SlNWYWx1ZSgpKTsKLSAgICAg
ICAgQVNTRVJUKGNvZGVCbG9jayhyKS0+bmVlZHNGdWxsU2NvcGVDaGFpbik7Ci0gICAgICAgIEFT
U0VSVChhY3RpdmF0aW9uLT5pc09iamVjdCgmSlNBY3RpdmF0aW9uOjppbmZvKSk7Ci0KLSAgICAg
ICAgQXJndW1lbnRzKiBhcmd1bWVudHMgPSBzdGF0aWNfY2FzdDxBcmd1bWVudHMqPihyW1JlZ2lz
dGVyRmlsZTo6T3B0aW9uYWxDYWxsZWVBcmd1bWVudHNdLmdldEpTVmFsdWUoKSk7Ci0gICAgICAg
IEFTU0VSVCghYXJndW1lbnRzIHx8IGFyZ3VtZW50cy0+aXNPYmplY3QoJkFyZ3VtZW50czo6aW5m
bykpOwotICAgICAgICBhY3RpdmF0aW9uLT5jb3B5UmVnaXN0ZXJzKGFyZ3VtZW50cyk7CisgICAg
ICAgIEpTQWN0aXZhdGlvbiogYWN0aXZhdGlvbiA9IGNhbGxGcmFtZS0+b3B0aW9uYWxDYWxsZWVB
Y3RpdmF0aW9uKCk7CisgICAgICAgIEFTU0VSVChjYWxsRnJhbWUtPmNvZGVCbG9jaygpLT5uZWVk
c0Z1bGxTY29wZUNoYWluKTsKKyAgICAgICAgYWN0aXZhdGlvbi0+Y29weVJlZ2lzdGVycyhjYWxs
RnJhbWUtPm9wdGlvbmFsQ2FsbGVlQXJndW1lbnRzKCkpOwogCiAgICAgICAgICsrdlBDOwogICAg
ICAgICBORVhUX09QQ09ERTsKICAgICB9CiAgICAgQkVHSU5fT1BDT0RFKG9wX3RlYXJfb2ZmX2Fy
Z3VtZW50cykgewotICAgICAgICBBcmd1bWVudHMqIGFyZ3VtZW50cyA9IHN0YXRpY19jYXN0PEFy
Z3VtZW50cyo+KHJbUmVnaXN0ZXJGaWxlOjpPcHRpb25hbENhbGxlZUFyZ3VtZW50c10uZ2V0SlNW
YWx1ZSgpKTsKLSAgICAgICAgQVNTRVJUKGNvZGVCbG9jayhyKS0+dXNlc0FyZ3VtZW50cyAmJiAh
Y29kZUJsb2NrKHIpLT5uZWVkc0Z1bGxTY29wZUNoYWluKTsKLSAgICAgICAgQVNTRVJUKGFyZ3Vt
ZW50cy0+aXNPYmplY3QoJkFyZ3VtZW50czo6aW5mbykpOworICAgICAgICBBU1NFUlQoY2FsbEZy
YW1lLT5jb2RlQmxvY2soKS0+dXNlc0FyZ3VtZW50cyAmJiAhY2FsbEZyYW1lLT5jb2RlQmxvY2so
KS0+bmVlZHNGdWxsU2NvcGVDaGFpbik7CiAKLSAgICAgICAgYXJndW1lbnRzLT5jb3B5UmVnaXN0
ZXJzKCk7CisgICAgICAgIGNhbGxGcmFtZS0+b3B0aW9uYWxDYWxsZWVBcmd1bWVudHMoKS0+Y29w
eVJlZ2lzdGVycygpOwogCiAgICAgICAgICsrdlBDOwogICAgICAgICBORVhUX09QQ09ERTsKQEAg
LTMzOTAsMjEgKzMzNjYsMjEgQEAgSlNWYWx1ZSogTWFjaGluZTo6cHJpdmF0ZUV4ZWN1dGUoRXhl
Y3V0aQogICAgICAgICBpbnQgcmVzdWx0ID0gKCsrdlBDKS0+dS5vcGVyYW5kOwogCiAgICAgICAg
IGlmICgqZW5hYmxlZFByb2ZpbGVyUmVmZXJlbmNlKQotICAgICAgICAgICAgKCplbmFibGVkUHJv
ZmlsZXJSZWZlcmVuY2UpLT5kaWRFeGVjdXRlKGV4ZWMsIHN0YXRpY19jYXN0PEpTT2JqZWN0Kj4o
cltSZWdpc3RlckZpbGU6OkNhbGxlZV0uanNWYWx1ZShleGVjKSkpOworICAgICAgICAgICAgKCpl
bmFibGVkUHJvZmlsZXJSZWZlcmVuY2UpLT5kaWRFeGVjdXRlKGNhbGxGcmFtZSwgY2FsbEZyYW1l
LT5jYWxsZWUoKSk7CiAKLSAgICAgICAgaWYgKGNvZGVCbG9jayhyKS0+bmVlZHNGdWxsU2NvcGVD
aGFpbikKLSAgICAgICAgICAgIHNjb3BlQ2hhaW4ociktPmRlcmVmKCk7CisgICAgICAgIGlmIChj
YWxsRnJhbWUtPmNvZGVCbG9jaygpLT5uZWVkc0Z1bGxTY29wZUNoYWluKQorICAgICAgICAgICAg
Y2FsbEZyYW1lLT5zY29wZUNoYWluKCktPmRlcmVmKCk7CiAKLSAgICAgICAgSlNWYWx1ZSogcmV0
dXJuVmFsdWUgPSByW3Jlc3VsdF0uanNWYWx1ZShleGVjKTsKKyAgICAgICAgSlNWYWx1ZSogcmV0
dXJuVmFsdWUgPSBjYWxsRnJhbWVbcmVzdWx0XS5qc1ZhbHVlKGNhbGxGcmFtZSk7CiAKLSAgICAg
ICAgdlBDID0gcltSZWdpc3RlckZpbGU6OlJldHVyblBDXS52UEMoKTsKLSAgICAgICAgaW50IGRz
dCA9IHJbUmVnaXN0ZXJGaWxlOjpSZXR1cm5WYWx1ZVJlZ2lzdGVyXS5pKCk7Ci0gICAgICAgIHIg
PSByW1JlZ2lzdGVyRmlsZTo6Q2FsbGVyUmVnaXN0ZXJzXS5yKCk7CisgICAgICAgIHZQQyA9IGNh
bGxGcmFtZS0+cmV0dXJuUEMoKTsKKyAgICAgICAgaW50IGRzdCA9IGNhbGxGcmFtZS0+cmV0dXJu
VmFsdWVSZWdpc3RlcigpOworICAgICAgICBjYWxsRnJhbWUgPSBjYWxsRnJhbWUtPmNhbGxlckZy
YW1lKCk7CiAgICAgICAgIAotICAgICAgICBpZiAoaXNIb3N0Q2FsbEZyYW1lKHIpKQorICAgICAg
ICBpZiAoY2FsbEZyYW1lLT5oYXNIb3N0Q2FsbEZyYW1lRmxhZygpKQogICAgICAgICAgICAgcmV0
dXJuIHJldHVyblZhbHVlOwogCi0gICAgICAgIHJbZHN0XSA9IHJldHVyblZhbHVlOworICAgICAg
ICBjYWxsRnJhbWVbZHN0XSA9IHJldHVyblZhbHVlOwogCiAgICAgICAgIE5FWFRfT1BDT0RFOwog
ICAgIH0KQEAgLTM0MjAsMTMgKzMzOTYsMTMgQEAgSlNWYWx1ZSogTWFjaGluZTo6cHJpdmF0ZUV4
ZWN1dGUoRXhlY3V0aQogICAgICAgICAqLwogCiAgICAgICAgIHNpemVfdCBpID0gMDsKLSAgICAg
ICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSB0aGlzLT5jb2RlQmxvY2socik7CisgICAgICAgIENv
ZGVCbG9jayogY29kZUJsb2NrID0gY2FsbEZyYW1lLT5jb2RlQmxvY2soKTsKICAgICAgICAgCiAg
ICAgICAgIGZvciAoc2l6ZV90IGNvdW50ID0gY29kZUJsb2NrLT5udW1WYXJzOyBpIDwgY291bnQ7
ICsraSkKLSAgICAgICAgICAgIHJbaV0gPSBqc1VuZGVmaW5lZCgpOworICAgICAgICAgICAgY2Fs
bEZyYW1lW2ldID0ganNVbmRlZmluZWQoKTsKIAogICAgICAgICBmb3IgKHNpemVfdCBjb3VudCA9
IGNvZGVCbG9jay0+Y29uc3RhbnRSZWdpc3RlcnMuc2l6ZSgpLCBqID0gMDsgaiA8IGNvdW50OyAr
K2ksICsraikKLSAgICAgICAgICAgIHJbaV0gPSBjb2RlQmxvY2stPmNvbnN0YW50UmVnaXN0ZXJz
W2pdOworICAgICAgICAgICAgY2FsbEZyYW1lW2ldID0gY29kZUJsb2NrLT5jb25zdGFudFJlZ2lz
dGVyc1tqXTsKIAogICAgICAgICArK3ZQQzsKICAgICAgICAgTkVYVF9PUENPREU7CkBAIC0zNDQ2
LDI2ICszNDIyLDI2IEBAIEpTVmFsdWUqIE1hY2hpbmU6OnByaXZhdGVFeGVjdXRlKEV4ZWN1dGkK
ICAgICAgICAgKi8KIAogICAgICAgICBzaXplX3QgaSA9IDA7Ci0gICAgICAgIENvZGVCbG9jayog
Y29kZUJsb2NrID0gdGhpcy0+Y29kZUJsb2NrKHIpOworICAgICAgICBDb2RlQmxvY2sqIGNvZGVC
bG9jayA9IGNhbGxGcmFtZS0+Y29kZUJsb2NrKCk7CiAKICAgICAgICAgZm9yIChzaXplX3QgY291
bnQgPSBjb2RlQmxvY2stPm51bVZhcnM7IGkgPCBjb3VudDsgKytpKQotICAgICAgICAgICAgcltp
XSA9IGpzVW5kZWZpbmVkKCk7CisgICAgICAgICAgICBjYWxsRnJhbWVbaV0gPSBqc1VuZGVmaW5l
ZCgpOwogCiAgICAgICAgIGZvciAoc2l6ZV90IGNvdW50ID0gY29kZUJsb2NrLT5jb25zdGFudFJl
Z2lzdGVycy5zaXplKCksIGogPSAwOyBqIDwgY291bnQ7ICsraSwgKytqKQotICAgICAgICAgICAg
cltpXSA9IGNvZGVCbG9jay0+Y29uc3RhbnRSZWdpc3RlcnNbal07CisgICAgICAgICAgICBjYWxs
RnJhbWVbaV0gPSBjb2RlQmxvY2stPmNvbnN0YW50UmVnaXN0ZXJzW2pdOwogCi0gICAgICAgIEpT
QWN0aXZhdGlvbiogYWN0aXZhdGlvbiA9IG5ldyAoZ2xvYmFsRGF0YSkgSlNBY3RpdmF0aW9uKGV4
ZWMsIHN0YXRpY19jYXN0PEZ1bmN0aW9uQm9keU5vZGUqPihjb2RlQmxvY2stPm93bmVyTm9kZSks
IHIpOwotICAgICAgICByW1JlZ2lzdGVyRmlsZTo6T3B0aW9uYWxDYWxsZWVBY3RpdmF0aW9uXSA9
IGFjdGl2YXRpb247Ci0gICAgICAgIHJbUmVnaXN0ZXJGaWxlOjpTY29wZUNoYWluXSA9IHNjb3Bl
Q2hhaW4ociktPmNvcHkoKS0+cHVzaChhY3RpdmF0aW9uKTsKKyAgICAgICAgSlNBY3RpdmF0aW9u
KiBhY3RpdmF0aW9uID0gbmV3IChnbG9iYWxEYXRhKSBKU0FjdGl2YXRpb24oY2FsbEZyYW1lLCBz
dGF0aWNfY2FzdDxGdW5jdGlvbkJvZHlOb2RlKj4oY29kZUJsb2NrLT5vd25lck5vZGUpKTsKKyAg
ICAgICAgY2FsbEZyYW1lLT5zZXRDYWxsZWVBY3RpdmF0aW9uKGFjdGl2YXRpb24pOworICAgICAg
ICBjYWxsRnJhbWUtPnNldFNjb3BlQ2hhaW4oY2FsbEZyYW1lLT5zY29wZUNoYWluKCktPmNvcHko
KS0+cHVzaChhY3RpdmF0aW9uKSk7CiAKICAgICAgICAgKyt2UEM7CiAgICAgICAgIE5FWFRfT1BD
T0RFOwogICAgIH0KICAgICBCRUdJTl9PUENPREUob3BfY29udmVydF90aGlzKSB7CiAgICAgICAg
IGludCB0aGlzUmVnaXN0ZXIgPSAoKyt2UEMpLT51Lm9wZXJhbmQ7Ci0gICAgICAgIEpTVmFsdWUq
IHRoaXNWYWwgPSByW3RoaXNSZWdpc3Rlcl0uZ2V0SlNWYWx1ZSgpOworICAgICAgICBKU1ZhbHVl
KiB0aGlzVmFsID0gY2FsbEZyYW1lW3RoaXNSZWdpc3Rlcl0uZ2V0SlNWYWx1ZSgpOwogICAgICAg
ICBpZiAodGhpc1ZhbC0+bmVlZHNUaGlzQ29udmVyc2lvbigpKQotICAgICAgICAgICAgclt0aGlz
UmVnaXN0ZXJdID0gdGhpc1ZhbC0+dG9UaGlzT2JqZWN0KGV4ZWMpOworICAgICAgICAgICAgY2Fs
bEZyYW1lW3RoaXNSZWdpc3Rlcl0gPSB0aGlzVmFsLT50b1RoaXNPYmplY3QoY2FsbEZyYW1lKTsK
IAogICAgICAgICArK3ZQQzsKICAgICAgICAgTkVYVF9PUENPREU7CkBAIC0zNDgxLDkgKzM0NTcs
OSBAQCBKU1ZhbHVlKiBNYWNoaW5lOjpwcml2YXRlRXhlY3V0ZShFeGVjdXRpCiAgICAgICAgICAg
IGJsb2NrLgogICAgICAgICAqLwogCi0gICAgICAgIEFyZ3VtZW50cyogYXJndW1lbnRzID0gbmV3
IChnbG9iYWxEYXRhKSBBcmd1bWVudHMoZXhlYywgcik7Ci0gICAgICAgIHJbUmVnaXN0ZXJGaWxl
OjpPcHRpb25hbENhbGxlZUFyZ3VtZW50c10gPSBhcmd1bWVudHM7Ci0gICAgICAgIHJbUmVnaXN0
ZXJGaWxlOjpBcmd1bWVudHNSZWdpc3Rlcl0gPSBhcmd1bWVudHM7CisgICAgICAgIEFyZ3VtZW50
cyogYXJndW1lbnRzID0gbmV3IChnbG9iYWxEYXRhKSBBcmd1bWVudHMoY2FsbEZyYW1lKTsKKyAg
ICAgICAgY2FsbEZyYW1lLT5zZXRDYWxsZWVBcmd1bWVudHMoYXJndW1lbnRzKTsKKyAgICAgICAg
Y2FsbEZyYW1lW1JlZ2lzdGVyRmlsZTo6QXJndW1lbnRzUmVnaXN0ZXJdID0gYXJndW1lbnRzOwog
ICAgICAgICAKICAgICAgICAgKyt2UEM7CiAgICAgICAgIE5FWFRfT1BDT0RFOwpAQCAtMzUxMCw0
MiArMzQ4Niw0MiBAQCBKU1ZhbHVlKiBNYWNoaW5lOjpwcml2YXRlRXhlY3V0ZShFeGVjdXRpCiAg
ICAgICAgIGludCBhcmdDb3VudCA9ICgrK3ZQQyktPnUub3BlcmFuZDsKICAgICAgICAgaW50IHJl
Z2lzdGVyT2Zmc2V0ID0gKCsrdlBDKS0+dS5vcGVyYW5kOwogCi0gICAgICAgIEpTVmFsdWUqIHYg
PSByW2NvbnN0cl0uanNWYWx1ZShleGVjKTsKKyAgICAgICAgSlNWYWx1ZSogdiA9IGNhbGxGcmFt
ZVtjb25zdHJdLmpzVmFsdWUoY2FsbEZyYW1lKTsKIAogICAgICAgICBDb25zdHJ1Y3REYXRhIGNv
bnN0cnVjdERhdGE7CiAgICAgICAgIENvbnN0cnVjdFR5cGUgY29uc3RydWN0VHlwZSA9IHYtPmdl
dENvbnN0cnVjdERhdGEoY29uc3RydWN0RGF0YSk7CiAKICAgICAgICAgaWYgKGNvbnN0cnVjdFR5
cGUgPT0gQ29uc3RydWN0VHlwZUpTKSB7CiAgICAgICAgICAgICBpZiAoKmVuYWJsZWRQcm9maWxl
clJlZmVyZW5jZSkKLSAgICAgICAgICAgICAgICAoKmVuYWJsZWRQcm9maWxlclJlZmVyZW5jZSkt
PndpbGxFeGVjdXRlKGV4ZWMsIHN0YXRpY19jYXN0PEpTT2JqZWN0Kj4odikpOworICAgICAgICAg
ICAgICAgICgqZW5hYmxlZFByb2ZpbGVyUmVmZXJlbmNlKS0+d2lsbEV4ZWN1dGUoY2FsbEZyYW1l
LCBzdGF0aWNfY2FzdDxKU09iamVjdCo+KHYpKTsKIAogICAgICAgICAgICAgU2NvcGVDaGFpbk5v
ZGUqIGNhbGxEYXRhU2NvcGVDaGFpbiA9IGNvbnN0cnVjdERhdGEuanMuc2NvcGVDaGFpbjsKICAg
ICAgICAgICAgIEZ1bmN0aW9uQm9keU5vZGUqIGZ1bmN0aW9uQm9keU5vZGUgPSBjb25zdHJ1Y3RE
YXRhLmpzLmZ1bmN0aW9uQm9keTsKICAgICAgICAgICAgIENvZGVCbG9jayogbmV3Q29kZUJsb2Nr
ID0gJmZ1bmN0aW9uQm9keU5vZGUtPmJ5dGVDb2RlKGNhbGxEYXRhU2NvcGVDaGFpbik7CiAKICAg
ICAgICAgICAgIFN0cnVjdHVyZUlEKiBzdHJ1Y3R1cmU7Ci0gICAgICAgICAgICBKU1ZhbHVlKiBw
cm90b3R5cGUgPSByW2NvbnN0clByb3RvXS5qc1ZhbHVlKGV4ZWMpOworICAgICAgICAgICAgSlNW
YWx1ZSogcHJvdG90eXBlID0gY2FsbEZyYW1lW2NvbnN0clByb3RvXS5qc1ZhbHVlKGNhbGxGcmFt
ZSk7CiAgICAgICAgICAgICBpZiAocHJvdG90eXBlLT5pc09iamVjdCgpKQogICAgICAgICAgICAg
ICAgIHN0cnVjdHVyZSA9IHN0YXRpY19jYXN0PEpTT2JqZWN0Kj4ocHJvdG90eXBlKS0+aW5oZXJp
dG9ySUQoKTsKICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICBzdHJ1Y3R1cmUgPSBj
YWxsRGF0YVNjb3BlQ2hhaW4tPmdsb2JhbE9iamVjdCgpLT5lbXB0eU9iamVjdFN0cnVjdHVyZSgp
OwogICAgICAgICAgICAgSlNPYmplY3QqIG5ld09iamVjdCA9IG5ldyAoZ2xvYmFsRGF0YSkgSlNP
YmplY3Qoc3RydWN0dXJlKTsKIAotICAgICAgICAgICAgcltmaXJzdEFyZ10gPSBuZXdPYmplY3Q7
IC8vICJ0aGlzIiB2YWx1ZQorICAgICAgICAgICAgY2FsbEZyYW1lW2ZpcnN0QXJnXSA9IG5ld09i
amVjdDsgLy8gInRoaXMiIHZhbHVlCiAKLSAgICAgICAgICAgIFJlZ2lzdGVyKiBzYXZlZFIgPSBy
OworICAgICAgICAgICAgQ2FsbEZyYW1lKiBwcmV2aW91c0NhbGxGcmFtZSA9IGNhbGxGcmFtZTsK
IAotICAgICAgICAgICAgciA9IHNsaWRlUmVnaXN0ZXJXaW5kb3dGb3JDYWxsKG5ld0NvZGVCbG9j
aywgcmVnaXN0ZXJGaWxlLCByLCByZWdpc3Rlck9mZnNldCwgYXJnQ291bnQpOwotICAgICAgICAg
ICAgaWYgKFVOTElLRUxZKCFyKSkgewotICAgICAgICAgICAgICAgIHIgPSBzYXZlZFI7Ci0gICAg
ICAgICAgICAgICAgZXhjZXB0aW9uVmFsdWUgPSBjcmVhdGVTdGFja092ZXJmbG93RXJyb3IoQ2Fs
bEZyYW1lOjpjcmVhdGUocikpOworICAgICAgICAgICAgY2FsbEZyYW1lID0gc2xpZGVSZWdpc3Rl
cldpbmRvd0ZvckNhbGwobmV3Q29kZUJsb2NrLCByZWdpc3RlckZpbGUsIGNhbGxGcmFtZSwgcmVn
aXN0ZXJPZmZzZXQsIGFyZ0NvdW50KTsKKyAgICAgICAgICAgIGlmIChVTkxJS0VMWSghY2FsbEZy
YW1lKSkgeworICAgICAgICAgICAgICAgIGNhbGxGcmFtZSA9IHByZXZpb3VzQ2FsbEZyYW1lOwor
ICAgICAgICAgICAgICAgIGV4Y2VwdGlvblZhbHVlID0gY3JlYXRlU3RhY2tPdmVyZmxvd0Vycm9y
KGNhbGxGcmFtZSk7CiAgICAgICAgICAgICAgICAgZ290byB2bV90aHJvdzsKICAgICAgICAgICAg
IH0KIAotICAgICAgICAgICAgaW5pdGlhbGl6ZUNhbGxGcmFtZShyLCBuZXdDb2RlQmxvY2ssIHZQ
QyArIDEsIGNhbGxEYXRhU2NvcGVDaGFpbiwgc2F2ZWRSLCBkc3QsIGFyZ0NvdW50LCB2KTsKKyAg
ICAgICAgICAgIGNhbGxGcmFtZS0+aW5pdChuZXdDb2RlQmxvY2ssIHZQQyArIDEsIGNhbGxEYXRh
U2NvcGVDaGFpbiwgcHJldmlvdXNDYWxsRnJhbWUsIGRzdCwgYXJnQ291bnQsIHN0YXRpY19jYXN0
PEpTRnVuY3Rpb24qPih2KSk7CiAgICAgCiAgICAgICAgICAgICBpZiAoKmVuYWJsZWRQcm9maWxl
clJlZmVyZW5jZSkKLSAgICAgICAgICAgICAgICAoKmVuYWJsZWRQcm9maWxlclJlZmVyZW5jZSkt
PmRpZEV4ZWN1dGUoZXhlYywgc3RhdGljX2Nhc3Q8SlNPYmplY3QqPih2KSk7CisgICAgICAgICAg
ICAgICAgKCplbmFibGVkUHJvZmlsZXJSZWZlcmVuY2UpLT5kaWRFeGVjdXRlKGNhbGxGcmFtZSwg
c3RhdGljX2Nhc3Q8SlNPYmplY3QqPih2KSk7CiAKICAgICAgICAgICAgIHZQQyA9IG5ld0NvZGVC
bG9jay0+aW5zdHJ1Y3Rpb25zLmJlZ2luKCk7CiAKQEAgLTM1NTcsMjUgKzM1MzMsMjUgQEAgSlNW
YWx1ZSogTWFjaGluZTo6cHJpdmF0ZUV4ZWN1dGUoRXhlY3V0aQogICAgICAgICB9CiAKICAgICAg
ICAgaWYgKGNvbnN0cnVjdFR5cGUgPT0gQ29uc3RydWN0VHlwZUhvc3QpIHsKLSAgICAgICAgICAg
IEFyZ0xpc3QgYXJncyhyICsgZmlyc3RBcmcgKyAxLCBhcmdDb3VudCAtIDEpOworICAgICAgICAg
ICAgQXJnTGlzdCBhcmdzKGNhbGxGcmFtZS0+cmVnaXN0ZXJzKCkgKyBmaXJzdEFyZyArIDEsIGFy
Z0NvdW50IC0gMSk7CiAKLSAgICAgICAgICAgIFNjb3BlQ2hhaW5Ob2RlKiBzY29wZUNoYWluID0g
dGhpcy0+c2NvcGVDaGFpbihyKTsKLSAgICAgICAgICAgIGluaXRpYWxpemVDYWxsRnJhbWUociAr
IHJlZ2lzdGVyT2Zmc2V0LCAwLCB2UEMgKyAxLCBzY29wZUNoYWluLCByLCBkc3QsIGFyZ0NvdW50
LCB2KTsKLSAgICAgICAgICAgIHIgKz0gcmVnaXN0ZXJPZmZzZXQ7CisgICAgICAgICAgICBTY29w
ZUNoYWluTm9kZSogc2NvcGVDaGFpbiA9IGNhbGxGcmFtZS0+c2NvcGVDaGFpbigpOworICAgICAg
ICAgICAgQ2FsbEZyYW1lOjpjcmVhdGUoY2FsbEZyYW1lLT5yZWdpc3RlcnMoKSArIHJlZ2lzdGVy
T2Zmc2V0KS0+aW5pdCgwLCB2UEMgKyAxLCBzY29wZUNoYWluLCBjYWxsRnJhbWUsIGRzdCwgYXJn
Q291bnQsIHN0YXRpY19jYXN0PEpTRnVuY3Rpb24qPih2KSk7CisgICAgICAgICAgICBjYWxsRnJh
bWUgPSBDYWxsRnJhbWU6OmNyZWF0ZShjYWxsRnJhbWUtPnJlZ2lzdGVycygpICsgcmVnaXN0ZXJP
ZmZzZXQpOwogCiAgICAgICAgICAgICBpZiAoKmVuYWJsZWRQcm9maWxlclJlZmVyZW5jZSkKLSAg
ICAgICAgICAgICAgICAoKmVuYWJsZWRQcm9maWxlclJlZmVyZW5jZSktPndpbGxFeGVjdXRlKGV4
ZWMsIHN0YXRpY19jYXN0PEpTT2JqZWN0Kj4odikpOworICAgICAgICAgICAgICAgICgqZW5hYmxl
ZFByb2ZpbGVyUmVmZXJlbmNlKS0+d2lsbEV4ZWN1dGUoY2FsbEZyYW1lLCBzdGF0aWNfY2FzdDxK
U09iamVjdCo+KHYpKTsKIAogICAgICAgICAgICAgTUFDSElORV9TQU1QTElOR19jYWxsaW5nSG9z
dEZ1bmN0aW9uKCk7CiAKLSAgICAgICAgICAgIEpTVmFsdWUqIHJldHVyblZhbHVlID0gY29uc3Ry
dWN0RGF0YS5uYXRpdmUuZnVuY3Rpb24oZXhlYywgc3RhdGljX2Nhc3Q8SlNPYmplY3QqPih2KSwg
YXJncyk7Ci0gICAgICAgICAgICByIC09IHJlZ2lzdGVyT2Zmc2V0OworICAgICAgICAgICAgSlNW
YWx1ZSogcmV0dXJuVmFsdWUgPSBjb25zdHJ1Y3REYXRhLm5hdGl2ZS5mdW5jdGlvbihjYWxsRnJh
bWUsIHN0YXRpY19jYXN0PEpTT2JqZWN0Kj4odiksIGFyZ3MpOworICAgICAgICAgICAgY2FsbEZy
YW1lID0gQ2FsbEZyYW1lOjpjcmVhdGUoY2FsbEZyYW1lLT5yZWdpc3RlcnMoKSAtIHJlZ2lzdGVy
T2Zmc2V0KTsKIAogICAgICAgICAgICAgVk1fQ0hFQ0tfRVhDRVBUSU9OKCk7Ci0gICAgICAgICAg
ICByW2RzdF0gPSByZXR1cm5WYWx1ZTsKKyAgICAgICAgICAgIGNhbGxGcmFtZVtkc3RdID0gcmV0
dXJuVmFsdWU7CiAKICAgICAgICAgICAgIGlmICgqZW5hYmxlZFByb2ZpbGVyUmVmZXJlbmNlKQot
ICAgICAgICAgICAgICAgICgqZW5hYmxlZFByb2ZpbGVyUmVmZXJlbmNlKS0+ZGlkRXhlY3V0ZShl
eGVjLCBzdGF0aWNfY2FzdDxKU09iamVjdCo+KHYpKTsKKyAgICAgICAgICAgICAgICAoKmVuYWJs
ZWRQcm9maWxlclJlZmVyZW5jZSktPmRpZEV4ZWN1dGUoY2FsbEZyYW1lLCBzdGF0aWNfY2FzdDxK
U09iamVjdCo+KHYpKTsKIAogICAgICAgICAgICAgKyt2UEM7CiAgICAgICAgICAgICBORVhUX09Q
Q09ERTsKQEAgLTM1ODMsNyArMzU1OSw3IEBAIEpTVmFsdWUqIE1hY2hpbmU6OnByaXZhdGVFeGVj
dXRlKEV4ZWN1dGkKIAogICAgICAgICBBU1NFUlQoY29uc3RydWN0VHlwZSA9PSBDb25zdHJ1Y3RU
eXBlTm9uZSk7CiAKLSAgICAgICAgZXhjZXB0aW9uVmFsdWUgPSBjcmVhdGVOb3RBQ29uc3RydWN0
b3JFcnJvcihleGVjLCB2LCB2UEMsIGNvZGVCbG9jayhyKSk7CisgICAgICAgIGV4Y2VwdGlvblZh
bHVlID0gY3JlYXRlTm90QUNvbnN0cnVjdG9yRXJyb3IoY2FsbEZyYW1lLCB2LCB2UEMsIGNhbGxG
cmFtZS0+Y29kZUJsb2NrKCkpOwogICAgICAgICBnb3RvIHZtX3Rocm93OwogICAgIH0KICAgICBC
RUdJTl9PUENPREUob3BfY29uc3RydWN0X3ZlcmlmeSkgewpAQCAtMzU5NCwxMyArMzU3MCwxMyBA
QCBKU1ZhbHVlKiBNYWNoaW5lOjpwcml2YXRlRXhlY3V0ZShFeGVjdXRpCiAgICAgICAgICovCiAK
ICAgICAgICAgaW50IGRzdCA9IHZQQ1sxXS51Lm9wZXJhbmQ7OwotICAgICAgICBpZiAoTElLRUxZ
KHJbZHN0XS5qc1ZhbHVlKGV4ZWMpLT5pc09iamVjdCgpKSkgeworICAgICAgICBpZiAoTElLRUxZ
KGNhbGxGcmFtZVtkc3RdLmpzVmFsdWUoY2FsbEZyYW1lKS0+aXNPYmplY3QoKSkpIHsKICAgICAg
ICAgICAgIHZQQyArPSAzOwogICAgICAgICAgICAgTkVYVF9PUENPREU7CiAgICAgICAgIH0KIAog
ICAgICAgICBpbnQgb3ZlcnJpZGUgPSB2UENbMl0udS5vcGVyYW5kOwotICAgICAgICByW2RzdF0g
PSByW292ZXJyaWRlXTsKKyAgICAgICAgY2FsbEZyYW1lW2RzdF0gPSBjYWxsRnJhbWVbb3ZlcnJp
ZGVdOwogCiAgICAgICAgIHZQQyArPSAzOwogICAgICAgICBORVhUX09QQ09ERTsKQEAgLTM2MTIs
MTEgKzM1ODgsMTEgQEAgSlNWYWx1ZSogTWFjaGluZTo6cHJpdmF0ZUV4ZWN1dGUoRXhlY3V0aQog
ICAgICAgICAgICBvZiB0aGUgY3VycmVudCBzY29wZSBjaGFpbi4KICAgICAgICAgKi8KICAgICAg
ICAgaW50IHNjb3BlID0gKCsrdlBDKS0+dS5vcGVyYW5kOwotICAgICAgICBKU1ZhbHVlKiB2ID0g
cltzY29wZV0uanNWYWx1ZShleGVjKTsKLSAgICAgICAgSlNPYmplY3QqIG8gPSB2LT50b09iamVj
dChleGVjKTsKKyAgICAgICAgSlNWYWx1ZSogdiA9IGNhbGxGcmFtZVtzY29wZV0uanNWYWx1ZShj
YWxsRnJhbWUpOworICAgICAgICBKU09iamVjdCogbyA9IHYtPnRvT2JqZWN0KGNhbGxGcmFtZSk7
CiAgICAgICAgIFZNX0NIRUNLX0VYQ0VQVElPTigpOwogCi0gICAgICAgIHJbUmVnaXN0ZXJGaWxl
OjpTY29wZUNoYWluXSA9IHNjb3BlQ2hhaW4ociktPnB1c2gobyk7CisgICAgICAgIGNhbGxGcmFt
ZS0+c2V0U2NvcGVDaGFpbihjYWxsRnJhbWUtPnNjb3BlQ2hhaW4oKS0+cHVzaChvKSk7CiAKICAg
ICAgICAgKyt2UEM7CiAgICAgICAgIE5FWFRfT1BDT0RFOwpAQCAtMzYyNiw3ICszNjAyLDcgQEAg
SlNWYWx1ZSogTWFjaGluZTo6cHJpdmF0ZUV4ZWN1dGUoRXhlY3V0aQogCiAgICAgICAgICAgIFJl
bW92ZXMgdGhlIHRvcCBpdGVtIGZyb20gdGhlIGN1cnJlbnQgc2NvcGUgY2hhaW4uCiAgICAgICAg
ICovCi0gICAgICAgIHJbUmVnaXN0ZXJGaWxlOjpTY29wZUNoYWluXSA9IHNjb3BlQ2hhaW4ocikt
PnBvcCgpOworICAgICAgICBjYWxsRnJhbWUtPnNldFNjb3BlQ2hhaW4oY2FsbEZyYW1lLT5zY29w
ZUNoYWluKCktPnBvcCgpKTsKIAogICAgICAgICArK3ZQQzsKICAgICAgICAgTkVYVF9PUENPREU7
CkBAIC0zNjQyLDcgKzM2MTgsNyBAQCBKU1ZhbHVlKiBNYWNoaW5lOjpwcml2YXRlRXhlY3V0ZShF
eGVjdXRpCiAgICAgICAgIGludCBkc3QgPSAoKyt2UEMpLT51Lm9wZXJhbmQ7CiAgICAgICAgIGlu
dCBiYXNlID0gKCsrdlBDKS0+dS5vcGVyYW5kOwogCi0gICAgICAgIHJbZHN0XSA9IEpTUHJvcGVy
dHlOYW1lSXRlcmF0b3I6OmNyZWF0ZShleGVjLCByW2Jhc2VdLmpzVmFsdWUoZXhlYykpOworICAg
ICAgICBjYWxsRnJhbWVbZHN0XSA9IEpTUHJvcGVydHlOYW1lSXRlcmF0b3I6OmNyZWF0ZShjYWxs
RnJhbWUsIGNhbGxGcmFtZVtiYXNlXS5qc1ZhbHVlKGNhbGxGcmFtZSkpOwogICAgICAgICArK3ZQ
QzsKICAgICAgICAgTkVYVF9PUENPREU7CiAgICAgfQpAQCAtMzY1OSwxMCArMzYzNSwxMCBAQCBK
U1ZhbHVlKiBNYWNoaW5lOjpwcml2YXRlRXhlY3V0ZShFeGVjdXRpCiAgICAgICAgIGludCBpdGVy
ID0gKCsrdlBDKS0+dS5vcGVyYW5kOwogICAgICAgICBpbnQgdGFyZ2V0ID0gKCsrdlBDKS0+dS5v
cGVyYW5kOwogCi0gICAgICAgIEpTUHJvcGVydHlOYW1lSXRlcmF0b3IqIGl0ID0gcltpdGVyXS5q
c1Byb3BlcnR5TmFtZUl0ZXJhdG9yKCk7Ci0gICAgICAgIGlmIChKU1ZhbHVlKiB0ZW1wID0gaXQt
Pm5leHQoZXhlYykpIHsKKyAgICAgICAgSlNQcm9wZXJ0eU5hbWVJdGVyYXRvciogaXQgPSBjYWxs
RnJhbWVbaXRlcl0ucHJvcGVydHlOYW1lSXRlcmF0b3IoKTsKKyAgICAgICAgaWYgKEpTVmFsdWUq
IHRlbXAgPSBpdC0+bmV4dChjYWxsRnJhbWUpKSB7CiAgICAgICAgICAgICBDSEVDS19GT1JfVElN
RU9VVCgpOwotICAgICAgICAgICAgcltkc3RdID0gdGVtcDsKKyAgICAgICAgICAgIGNhbGxGcmFt
ZVtkc3RdID0gdGVtcDsKICAgICAgICAgICAgIHZQQyArPSB0YXJnZXQ7CiAgICAgICAgICAgICBO
RVhUX09QQ09ERTsKICAgICAgICAgfQpAQCAtMzY4MSwxMCArMzY1NywxMCBAQCBKU1ZhbHVlKiBN
YWNoaW5lOjpwcml2YXRlRXhlY3V0ZShFeGVjdXRpCiAgICAgICAgIGludCBjb3VudCA9ICgrK3ZQ
QyktPnUub3BlcmFuZDsKICAgICAgICAgaW50IHRhcmdldCA9ICgrK3ZQQyktPnUub3BlcmFuZDsK
IAotICAgICAgICBTY29wZUNoYWluTm9kZSogdG1wID0gc2NvcGVDaGFpbihyKTsKKyAgICAgICAg
U2NvcGVDaGFpbk5vZGUqIHRtcCA9IGNhbGxGcmFtZS0+c2NvcGVDaGFpbigpOwogICAgICAgICB3
aGlsZSAoY291bnQtLSkKICAgICAgICAgICAgIHRtcCA9IHRtcC0+cG9wKCk7Ci0gICAgICAgIHJb
UmVnaXN0ZXJGaWxlOjpTY29wZUNoYWluXSA9IHRtcDsKKyAgICAgICAgY2FsbEZyYW1lLT5zZXRT
Y29wZUNoYWluKHRtcCk7CiAKICAgICAgICAgdlBDICs9IHRhcmdldDsKICAgICAgICAgTkVYVF9P
UENPREU7CkBAIC0zNzAwLDcgKzM2NzYsNyBAQCBKU1ZhbHVlKiBNYWNoaW5lOjpwcml2YXRlRXhl
Y3V0ZShFeGVjdXRpCiAgICAgICAgICAgIG9iamVjdCBpcyB0aGVuIHB1c2hlZCBvbnRvIHRoZSBT
Y29wZUNoYWluLiAgVGhlIHNjb3BlIG9iamVjdCBpcyB0aGVuIHN0b3JlZAogICAgICAgICAgICBp
biBkc3QgZm9yIEdDLgogICAgICAgICAgKi8KLSAgICAgICAgcltSZWdpc3RlckZpbGU6OlNjb3Bl
Q2hhaW5dID0gY3JlYXRlRXhjZXB0aW9uU2NvcGUoZXhlYywgdlBDLCByKTsKKyAgICAgICAgY2Fs
bEZyYW1lLT5zZXRTY29wZUNoYWluKGNyZWF0ZUV4Y2VwdGlvblNjb3BlKGNhbGxGcmFtZSwgdlBD
KSk7CiAKICAgICAgICAgdlBDICs9IDQ7CiAgICAgICAgIE5FWFRfT1BDT0RFOwpAQCAtMzcxNiw5
ICszNjkyLDkgQEAgSlNWYWx1ZSogTWFjaGluZTo6cHJpdmF0ZUV4ZWN1dGUoRXhlY3V0aQogICAg
ICAgICAgICBhbmQgdXN1YWxseSBmb3JtcyB0aGUgYmVnaW5uaW5nIG9mIGFuIGV4Y2VwdGlvbiBo
YW5kbGVyLgogICAgICAgICAqLwogICAgICAgICBBU1NFUlQoZXhjZXB0aW9uVmFsdWUpOwotICAg
ICAgICBBU1NFUlQoIWV4ZWMtPmhhZEV4Y2VwdGlvbigpKTsKKyAgICAgICAgQVNTRVJUKCFnbG9i
YWxEYXRhLT5leGNlcHRpb24pOwogICAgICAgICBpbnQgZXggPSAoKyt2UEMpLT51Lm9wZXJhbmQ7
Ci0gICAgICAgIHJbZXhdID0gZXhjZXB0aW9uVmFsdWU7CisgICAgICAgIGNhbGxGcmFtZVtleF0g
PSBleGNlcHRpb25WYWx1ZTsKICAgICAgICAgZXhjZXB0aW9uVmFsdWUgPSAwOwogCiAgICAgICAg
ICsrdlBDOwpAQCAtMzczNiw5ICszNzEyLDkgQEAgSlNWYWx1ZSogTWFjaGluZTo6cHJpdmF0ZUV4
ZWN1dGUoRXhlY3V0aQogICAgICAgICAqLwogCiAgICAgICAgIGludCBleCA9ICgrK3ZQQyktPnUu
b3BlcmFuZDsKLSAgICAgICAgZXhjZXB0aW9uVmFsdWUgPSByW2V4XS5qc1ZhbHVlKGV4ZWMpOwor
ICAgICAgICBleGNlcHRpb25WYWx1ZSA9IGNhbGxGcmFtZVtleF0uanNWYWx1ZShjYWxsRnJhbWUp
OwogCi0gICAgICAgIGhhbmRsZXJWUEMgPSB0aHJvd0V4Y2VwdGlvbihleGVjLCBleGNlcHRpb25W
YWx1ZSwgdlBDLCByLCB0cnVlKTsKKyAgICAgICAgaGFuZGxlclZQQyA9IHRocm93RXhjZXB0aW9u
KGNhbGxGcmFtZSwgZXhjZXB0aW9uVmFsdWUsIHZQQywgdHJ1ZSk7CiAgICAgICAgIGlmICghaGFu
ZGxlclZQQykgewogICAgICAgICAgICAgKmV4Y2VwdGlvbiA9IGV4Y2VwdGlvblZhbHVlOwogICAg
ICAgICAgICAgcmV0dXJuIGpzTnVsbCgpOwpAQCAtMzc2Myw3ICszNzM5LDcgQEAgSlNWYWx1ZSog
TWFjaGluZTo6cHJpdmF0ZUV4ZWN1dGUoRXhlY3V0aQogICAgICAgICAqLwogICAgICAgICBpbnQg
ZHN0ID0gKCsrdlBDKS0+dS5vcGVyYW5kOwogICAgICAgICBpbnQgc3JjID0gKCsrdlBDKS0+dS5v
cGVyYW5kOwotICAgICAgICByW2RzdF0gPSBjb2RlQmxvY2sociktPnVuZXhwZWN0ZWRDb25zdGFu
dHNbc3JjXTsKKyAgICAgICAgY2FsbEZyYW1lW2RzdF0gPSBjYWxsRnJhbWUtPmNvZGVCbG9jaygp
LT51bmV4cGVjdGVkQ29uc3RhbnRzW3NyY107CiAKICAgICAgICAgKyt2UEM7CiAgICAgICAgIE5F
WFRfT1BDT0RFOwpAQCAtMzc4MCw4ICszNzU2LDggQEAgSlNWYWx1ZSogTWFjaGluZTo6cHJpdmF0
ZUV4ZWN1dGUoRXhlY3V0aQogICAgICAgICBpbnQgdHlwZSA9ICgrK3ZQQyktPnUub3BlcmFuZDsK
ICAgICAgICAgaW50IG1lc3NhZ2UgPSAoKyt2UEMpLT51Lm9wZXJhbmQ7CiAKLSAgICAgICAgQ29k
ZUJsb2NrKiBjb2RlQmxvY2sgPSB0aGlzLT5jb2RlQmxvY2socik7Ci0gICAgICAgIHJbZHN0XSA9
IEVycm9yOjpjcmVhdGUoZXhlYywgKEVycm9yVHlwZSl0eXBlLCBjb2RlQmxvY2stPnVuZXhwZWN0
ZWRDb25zdGFudHNbbWVzc2FnZV0tPnRvU3RyaW5nKGV4ZWMpLCBjb2RlQmxvY2stPmxpbmVOdW1i
ZXJGb3JWUEModlBDKSwgY29kZUJsb2NrLT5vd25lck5vZGUtPnNvdXJjZUlEKCksIGNvZGVCbG9j
ay0+b3duZXJOb2RlLT5zb3VyY2VVUkwoKSk7CisgICAgICAgIENvZGVCbG9jayogY29kZUJsb2Nr
ID0gY2FsbEZyYW1lLT5jb2RlQmxvY2soKTsKKyAgICAgICAgY2FsbEZyYW1lW2RzdF0gPSBFcnJv
cjo6Y3JlYXRlKGNhbGxGcmFtZSwgKEVycm9yVHlwZSl0eXBlLCBjb2RlQmxvY2stPnVuZXhwZWN0
ZWRDb25zdGFudHNbbWVzc2FnZV0tPnRvU3RyaW5nKGNhbGxGcmFtZSksIGNvZGVCbG9jay0+bGlu
ZU51bWJlckZvclZQQyh2UEMpLCBjb2RlQmxvY2stPm93bmVyTm9kZS0+c291cmNlSUQoKSwgY29k
ZUJsb2NrLT5vd25lck5vZGUtPnNvdXJjZVVSTCgpKTsKIAogICAgICAgICArK3ZQQzsKICAgICAg
ICAgTkVYVF9PUENPREU7CkBAIC0zNzkzLDEzICszNzY5LDEzIEBAIEpTVmFsdWUqIE1hY2hpbmU6
OnByaXZhdGVFeGVjdXRlKEV4ZWN1dGkKICAgICAgICAgICAgcHJvZ3JhbS4gUmV0dXJuIGNvbnRy
b2wgdG8gdGhlIGNhbGxpbmcgbmF0aXZlIGNvZGUuCiAgICAgICAgICovCiAKLSAgICAgICAgaWYg
KGNvZGVCbG9jayhyKS0+bmVlZHNGdWxsU2NvcGVDaGFpbikgewotICAgICAgICAgICAgU2NvcGVD
aGFpbk5vZGUqIHNjb3BlQ2hhaW4gPSB0aGlzLT5zY29wZUNoYWluKHIpOworICAgICAgICBpZiAo
Y2FsbEZyYW1lLT5jb2RlQmxvY2soKS0+bmVlZHNGdWxsU2NvcGVDaGFpbikgeworICAgICAgICAg
ICAgU2NvcGVDaGFpbk5vZGUqIHNjb3BlQ2hhaW4gPSBjYWxsRnJhbWUtPnNjb3BlQ2hhaW4oKTsK
ICAgICAgICAgICAgIEFTU0VSVChzY29wZUNoYWluLT5yZWZDb3VudCA+IDEpOwogICAgICAgICAg
ICAgc2NvcGVDaGFpbi0+ZGVyZWYoKTsKICAgICAgICAgfQogICAgICAgICBpbnQgcmVzdWx0ID0g
KCsrdlBDKS0+dS5vcGVyYW5kOwotICAgICAgICByZXR1cm4gcltyZXN1bHRdLmpzVmFsdWUoZXhl
Yyk7CisgICAgICAgIHJldHVybiBjYWxsRnJhbWVbcmVzdWx0XS5qc1ZhbHVlKGNhbGxGcmFtZSk7
CiAgICAgfQogICAgIEJFR0lOX09QQ09ERShvcF9wdXRfZ2V0dGVyKSB7CiAgICAgICAgIC8qIHB1
dF9nZXR0ZXIgYmFzZShyKSBwcm9wZXJ0eShpZCkgZnVuY3Rpb24ocikKQEAgLTM4MTYsMTEgKzM3
OTIsMTEgQEAgSlNWYWx1ZSogTWFjaGluZTo6cHJpdmF0ZUV4ZWN1dGUoRXhlY3V0aQogICAgICAg
ICBpbnQgcHJvcGVydHkgPSAoKyt2UEMpLT51Lm9wZXJhbmQ7CiAgICAgICAgIGludCBmdW5jdGlv
biA9ICgrK3ZQQyktPnUub3BlcmFuZDsKIAotICAgICAgICBBU1NFUlQocltiYXNlXS5qc1ZhbHVl
KGV4ZWMpLT5pc09iamVjdCgpKTsKLSAgICAgICAgSlNPYmplY3QqIGJhc2VPYmogPSBzdGF0aWNf
Y2FzdDxKU09iamVjdCo+KHJbYmFzZV0uanNWYWx1ZShleGVjKSk7Ci0gICAgICAgIElkZW50aWZp
ZXImIGlkZW50ID0gY29kZUJsb2NrKHIpLT5pZGVudGlmaWVyc1twcm9wZXJ0eV07Ci0gICAgICAg
IEFTU0VSVChyW2Z1bmN0aW9uXS5qc1ZhbHVlKGV4ZWMpLT5pc09iamVjdCgpKTsKLSAgICAgICAg
YmFzZU9iai0+ZGVmaW5lR2V0dGVyKGV4ZWMsIGlkZW50LCBzdGF0aWNfY2FzdDxKU09iamVjdCo+
KHJbZnVuY3Rpb25dLmpzVmFsdWUoZXhlYykpKTsKKyAgICAgICAgQVNTRVJUKGNhbGxGcmFtZVti
YXNlXS5qc1ZhbHVlKGNhbGxGcmFtZSktPmlzT2JqZWN0KCkpOworICAgICAgICBKU09iamVjdCog
YmFzZU9iaiA9IHN0YXRpY19jYXN0PEpTT2JqZWN0Kj4oY2FsbEZyYW1lW2Jhc2VdLmpzVmFsdWUo
Y2FsbEZyYW1lKSk7CisgICAgICAgIElkZW50aWZpZXImIGlkZW50ID0gY2FsbEZyYW1lLT5jb2Rl
QmxvY2soKS0+aWRlbnRpZmllcnNbcHJvcGVydHldOworICAgICAgICBBU1NFUlQoY2FsbEZyYW1l
W2Z1bmN0aW9uXS5qc1ZhbHVlKGNhbGxGcmFtZSktPmlzT2JqZWN0KCkpOworICAgICAgICBiYXNl
T2JqLT5kZWZpbmVHZXR0ZXIoY2FsbEZyYW1lLCBpZGVudCwgc3RhdGljX2Nhc3Q8SlNPYmplY3Qq
PihjYWxsRnJhbWVbZnVuY3Rpb25dLmpzVmFsdWUoY2FsbEZyYW1lKSkpOwogCiAgICAgICAgICsr
dlBDOwogICAgICAgICBORVhUX09QQ09ERTsKQEAgLTM4NDAsMTEgKzM4MTYsMTEgQEAgSlNWYWx1
ZSogTWFjaGluZTo6cHJpdmF0ZUV4ZWN1dGUoRXhlY3V0aQogICAgICAgICBpbnQgcHJvcGVydHkg
PSAoKyt2UEMpLT51Lm9wZXJhbmQ7CiAgICAgICAgIGludCBmdW5jdGlvbiA9ICgrK3ZQQyktPnUu
b3BlcmFuZDsKIAotICAgICAgICBBU1NFUlQocltiYXNlXS5qc1ZhbHVlKGV4ZWMpLT5pc09iamVj
dCgpKTsKLSAgICAgICAgSlNPYmplY3QqIGJhc2VPYmogPSBzdGF0aWNfY2FzdDxKU09iamVjdCo+
KHJbYmFzZV0uanNWYWx1ZShleGVjKSk7Ci0gICAgICAgIElkZW50aWZpZXImIGlkZW50ID0gY29k
ZUJsb2NrKHIpLT5pZGVudGlmaWVyc1twcm9wZXJ0eV07Ci0gICAgICAgIEFTU0VSVChyW2Z1bmN0
aW9uXS5qc1ZhbHVlKGV4ZWMpLT5pc09iamVjdCgpKTsKLSAgICAgICAgYmFzZU9iai0+ZGVmaW5l
U2V0dGVyKGV4ZWMsIGlkZW50LCBzdGF0aWNfY2FzdDxKU09iamVjdCo+KHJbZnVuY3Rpb25dLmpz
VmFsdWUoZXhlYykpKTsKKyAgICAgICAgQVNTRVJUKGNhbGxGcmFtZVtiYXNlXS5qc1ZhbHVlKGNh
bGxGcmFtZSktPmlzT2JqZWN0KCkpOworICAgICAgICBKU09iamVjdCogYmFzZU9iaiA9IHN0YXRp
Y19jYXN0PEpTT2JqZWN0Kj4oY2FsbEZyYW1lW2Jhc2VdLmpzVmFsdWUoY2FsbEZyYW1lKSk7Cisg
ICAgICAgIElkZW50aWZpZXImIGlkZW50ID0gY2FsbEZyYW1lLT5jb2RlQmxvY2soKS0+aWRlbnRp
ZmllcnNbcHJvcGVydHldOworICAgICAgICBBU1NFUlQoY2FsbEZyYW1lW2Z1bmN0aW9uXS5qc1Zh
bHVlKGNhbGxGcmFtZSktPmlzT2JqZWN0KCkpOworICAgICAgICBiYXNlT2JqLT5kZWZpbmVTZXR0
ZXIoY2FsbEZyYW1lLCBpZGVudCwgc3RhdGljX2Nhc3Q8SlNPYmplY3QqPihjYWxsRnJhbWVbZnVu
Y3Rpb25dLmpzVmFsdWUoY2FsbEZyYW1lKSkpOwogCiAgICAgICAgICsrdlBDOwogICAgICAgICBO
RVhUX09QQ09ERTsKQEAgLTM4NTcsNyArMzgzMyw3IEBAIEpTVmFsdWUqIE1hY2hpbmU6OnByaXZh
dGVFeGVjdXRlKEV4ZWN1dGkKICAgICAgICAgKi8KICAgICAgICAgaW50IHJldEFkZHJEc3QgPSAo
Kyt2UEMpLT51Lm9wZXJhbmQ7CiAgICAgICAgIGludCB0YXJnZXQgPSAoKyt2UEMpLT51Lm9wZXJh
bmQ7Ci0gICAgICAgIHJbcmV0QWRkckRzdF0gPSB2UEMgKyAxOworICAgICAgICBjYWxsRnJhbWVb
cmV0QWRkckRzdF0gPSB2UEMgKyAxOwogCiAgICAgICAgIHZQQyArPSB0YXJnZXQ7CiAgICAgICAg
IE5FWFRfT1BDT0RFOwpAQCAtMzg3MCw3ICszODQ2LDcgQEAgSlNWYWx1ZSogTWFjaGluZTo6cHJp
dmF0ZUV4ZWN1dGUoRXhlY3V0aQogICAgICAgICAgcmVnaXN0ZXIsIG5vdCBhcyBhbiBpbW1lZGlh
dGUuCiAgICAgICAgICovCiAgICAgICAgIGludCByZXRBZGRyU3JjID0gKCsrdlBDKS0+dS5vcGVy
YW5kOwotICAgICAgICB2UEMgPSByW3JldEFkZHJTcmNdLnZQQygpOworICAgICAgICB2UEMgPSBj
YWxsRnJhbWVbcmV0QWRkclNyY10udlBDKCk7CiAgICAgICAgIE5FWFRfT1BDT0RFOwogICAgIH0K
ICAgICBCRUdJTl9PUENPREUob3BfZGVidWcpIHsKQEAgLTM4ODMsNyArMzg1OSw3IEBAIEpTVmFs
dWUqIE1hY2hpbmU6OnByaXZhdGVFeGVjdXRlKEV4ZWN1dGkKICAgICAgICAgaW50IGZpcnN0TGlu
ZSA9ICgrK3ZQQyktPnUub3BlcmFuZDsKICAgICAgICAgaW50IGxhc3RMaW5lID0gKCsrdlBDKS0+
dS5vcGVyYW5kOwogCi0gICAgICAgIGRlYnVnKGV4ZWMsIHIsIHN0YXRpY19jYXN0PERlYnVnSG9v
a0lEPihkZWJ1Z0hvb2tJRCksIGZpcnN0TGluZSwgbGFzdExpbmUpOworICAgICAgICBkZWJ1Zyhj
YWxsRnJhbWUsIHN0YXRpY19jYXN0PERlYnVnSG9va0lEPihkZWJ1Z0hvb2tJRCksIGZpcnN0TGlu
ZSwgbGFzdExpbmUpOwogCiAgICAgICAgICsrdlBDOwogICAgICAgICBORVhUX09QQ09ERTsKQEAg
LTM4OTUsNyArMzg3MSw3IEBAIEpTVmFsdWUqIE1hY2hpbmU6OnByaXZhdGVFeGVjdXRlKEV4ZWN1
dGkKICAgICAgICAgICAgIC8vIGNhbm5vdCBmYXRob20gaWYgd2UgZG9uJ3QgYXNzaWduIHRvIHRo
ZSBleGNlcHRpb25WYWx1ZSBiZWZvcmUgYnJhbmNoaW5nKQogICAgICAgICAgICAgZXhjZXB0aW9u
VmFsdWUgPSBjcmVhdGVJbnRlcnJ1cHRlZEV4ZWN1dGlvbkV4Y2VwdGlvbihnbG9iYWxEYXRhKTsK
ICAgICAgICAgfQotICAgICAgICBoYW5kbGVyVlBDID0gdGhyb3dFeGNlcHRpb24oZXhlYywgZXhj
ZXB0aW9uVmFsdWUsIHZQQywgciwgZmFsc2UpOworICAgICAgICBoYW5kbGVyVlBDID0gdGhyb3dF
eGNlcHRpb24oY2FsbEZyYW1lLCBleGNlcHRpb25WYWx1ZSwgdlBDLCBmYWxzZSk7CiAgICAgICAg
IGlmICghaGFuZGxlclZQQykgewogICAgICAgICAgICAgKmV4Y2VwdGlvbiA9IGV4Y2VwdGlvblZh
bHVlOwogICAgICAgICAgICAgcmV0dXJuIGpzTnVsbCgpOwpAQCAtMzkwOCw5OSArMzg4NCw5MSBA
QCBKU1ZhbHVlKiBNYWNoaW5lOjpwcml2YXRlRXhlY3V0ZShFeGVjdXRpCiAgICAgI3VuZGVmIEJF
R0lOX09QQ09ERQogICAgICN1bmRlZiBWTV9DSEVDS19FWENFUFRJT04KICAgICAjdW5kZWYgQ0hF
Q0tfRk9SX1RJTUVPVVQKLSAgICAjdW5kZWYgZXhlYwogfQogCi1KU1ZhbHVlKiBNYWNoaW5lOjpy
ZXRyaWV2ZUFyZ3VtZW50cyhFeGVjU3RhdGUqIGV4ZWMsIEpTRnVuY3Rpb24qIGZ1bmN0aW9uKSBj
b25zdAorSlNWYWx1ZSogTWFjaGluZTo6cmV0cmlldmVBcmd1bWVudHMoQ2FsbEZyYW1lKiBjYWxs
RnJhbWUsIEpTRnVuY3Rpb24qIGZ1bmN0aW9uKSBjb25zdAogewotICAgIFJlZ2lzdGVyKiByID0g
dGhpcy0+Y2FsbEZyYW1lKGV4ZWMsIGZ1bmN0aW9uKTsKLSAgICBpZiAoIXIpCisgICAgQ2FsbEZy
YW1lKiBmdW5jdGlvbkNhbGxGcmFtZSA9IGZpbmRGdW5jdGlvbkNhbGxGcmFtZShjYWxsRnJhbWUs
IGZ1bmN0aW9uKTsKKyAgICBpZiAoIWZ1bmN0aW9uQ2FsbEZyYW1lKQogICAgICAgICByZXR1cm4g
anNOdWxsKCk7CiAKLSAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IE1hY2hpbmU6OmNvZGVCbG9j
ayhyKTsKKyAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IGZ1bmN0aW9uQ2FsbEZyYW1lLT5jb2Rl
QmxvY2soKTsKICAgICBpZiAoY29kZUJsb2NrLT51c2VzQXJndW1lbnRzKSB7CiAgICAgICAgIEFT
U0VSVChjb2RlQmxvY2stPmNvZGVUeXBlID09IEZ1bmN0aW9uQ29kZSk7CiAgICAgICAgIFN5bWJv
bFRhYmxlJiBzeW1ib2xUYWJsZSA9IHN0YXRpY19jYXN0PEZ1bmN0aW9uQm9keU5vZGUqPihjb2Rl
QmxvY2stPm93bmVyTm9kZSktPnN5bWJvbFRhYmxlKCk7Ci0gICAgICAgIGludCBhcmd1bWVudHNJ
bmRleCA9IHN5bWJvbFRhYmxlLmdldChleGVjLT5wcm9wZXJ0eU5hbWVzKCkuYXJndW1lbnRzLnVz
dHJpbmcoKS5yZXAoKSkuZ2V0SW5kZXgoKTsKLSAgICAgICAgcmV0dXJuIHJbYXJndW1lbnRzSW5k
ZXhdLmpzVmFsdWUoZXhlYyk7CisgICAgICAgIGludCBhcmd1bWVudHNJbmRleCA9IHN5bWJvbFRh
YmxlLmdldChmdW5jdGlvbkNhbGxGcmFtZS0+cHJvcGVydHlOYW1lcygpLmFyZ3VtZW50cy51c3Ry
aW5nKCkucmVwKCkpLmdldEluZGV4KCk7CisgICAgICAgIHJldHVybiBmdW5jdGlvbkNhbGxGcmFt
ZVthcmd1bWVudHNJbmRleF0uanNWYWx1ZShjYWxsRnJhbWUpOwogICAgIH0KIAotICAgIEFyZ3Vt
ZW50cyogYXJndW1lbnRzID0gc3RhdGljX2Nhc3Q8QXJndW1lbnRzKj4ocltSZWdpc3RlckZpbGU6
Ok9wdGlvbmFsQ2FsbGVlQXJndW1lbnRzXS5nZXRKU1ZhbHVlKCkpOworICAgIEFyZ3VtZW50cyog
YXJndW1lbnRzID0gZnVuY3Rpb25DYWxsRnJhbWUtPm9wdGlvbmFsQ2FsbGVlQXJndW1lbnRzKCk7
CiAgICAgaWYgKCFhcmd1bWVudHMpIHsKLSAgICAgICAgYXJndW1lbnRzID0gbmV3IChleGVjKSBB
cmd1bWVudHMoZXhlYywgcik7CisgICAgICAgIGFyZ3VtZW50cyA9IG5ldyAoZnVuY3Rpb25DYWxs
RnJhbWUpIEFyZ3VtZW50cyhmdW5jdGlvbkNhbGxGcmFtZSk7CiAgICAgICAgIGFyZ3VtZW50cy0+
Y29weVJlZ2lzdGVycygpOwotICAgICAgICByW1JlZ2lzdGVyRmlsZTo6T3B0aW9uYWxDYWxsZWVB
cmd1bWVudHNdID0gYXJndW1lbnRzOworICAgICAgICBjYWxsRnJhbWUtPnNldENhbGxlZUFyZ3Vt
ZW50cyhhcmd1bWVudHMpOwogICAgIH0KLSAgICBBU1NFUlQoYXJndW1lbnRzLT5pc09iamVjdCgm
QXJndW1lbnRzOjppbmZvKSk7CiAKICAgICByZXR1cm4gYXJndW1lbnRzOwogfQogCi1KU1ZhbHVl
KiBNYWNoaW5lOjpyZXRyaWV2ZUNhbGxlcihFeGVjU3RhdGUqIGV4ZWMsIEludGVybmFsRnVuY3Rp
b24qIGZ1bmN0aW9uKSBjb25zdAorSlNWYWx1ZSogTWFjaGluZTo6cmV0cmlldmVDYWxsZXIoQ2Fs
bEZyYW1lKiBjYWxsRnJhbWUsIEludGVybmFsRnVuY3Rpb24qIGZ1bmN0aW9uKSBjb25zdAogewot
ICAgIFJlZ2lzdGVyKiByID0gdGhpcy0+Y2FsbEZyYW1lKGV4ZWMsIGZ1bmN0aW9uKTsKLSAgICBp
ZiAoIXIpCisgICAgQ2FsbEZyYW1lKiBmdW5jdGlvbkNhbGxGcmFtZSA9IGZpbmRGdW5jdGlvbkNh
bGxGcmFtZShjYWxsRnJhbWUsIGZ1bmN0aW9uKTsKKyAgICBpZiAoIWZ1bmN0aW9uQ2FsbEZyYW1l
KQogICAgICAgICByZXR1cm4ganNOdWxsKCk7CiAKLSAgICBSZWdpc3RlciogY2FsbGVyUiA9IHJb
UmVnaXN0ZXJGaWxlOjpDYWxsZXJSZWdpc3RlcnNdLnIoKTsKLSAgICBpZiAoaXNIb3N0Q2FsbEZy
YW1lKGNhbGxlclIpKQorICAgIENhbGxGcmFtZSogY2FsbGVyRnJhbWUgPSBmdW5jdGlvbkNhbGxG
cmFtZS0+Y2FsbGVyRnJhbWUoKTsKKyAgICBpZiAoY2FsbGVyRnJhbWUtPmhhc0hvc3RDYWxsRnJh
bWVGbGFnKCkpCiAgICAgICAgIHJldHVybiBqc051bGwoKTsKIAotICAgIEpTVmFsdWUqIGNhbGxl
ciA9IGNhbGxlclJbUmVnaXN0ZXJGaWxlOjpDYWxsZWVdLmpzVmFsdWUoZXhlYyk7CisgICAgSlNW
YWx1ZSogY2FsbGVyID0gY2FsbGVyRnJhbWUtPmNhbGxlZSgpOwogICAgIGlmICghY2FsbGVyKQog
ICAgICAgICByZXR1cm4ganNOdWxsKCk7CiAKICAgICByZXR1cm4gY2FsbGVyOwogfQogCi12b2lk
IE1hY2hpbmU6OnJldHJpZXZlTGFzdENhbGxlcihFeGVjU3RhdGUqIGV4ZWMsIGludCYgbGluZU51
bWJlciwgaW50cHRyX3QmIHNvdXJjZUlELCBVU3RyaW5nJiBzb3VyY2VVUkwsIEpTVmFsdWUqJiBm
dW5jdGlvbikgY29uc3QKK3ZvaWQgTWFjaGluZTo6cmV0cmlldmVMYXN0Q2FsbGVyKENhbGxGcmFt
ZSogY2FsbEZyYW1lLCBpbnQmIGxpbmVOdW1iZXIsIGludHB0cl90JiBzb3VyY2VJRCwgVVN0cmlu
ZyYgc291cmNlVVJMLCBKU1ZhbHVlKiYgZnVuY3Rpb24pIGNvbnN0CiB7CiAgICAgZnVuY3Rpb24g
PSAwOwogICAgIGxpbmVOdW1iZXIgPSAtMTsKICAgICBzb3VyY2VVUkwgPSBVU3RyaW5nKCk7CiAK
LSAgICBSZWdpc3RlciogciA9IGV4ZWMtPnJlZ2lzdGVycygpOwotICAgIFJlZ2lzdGVyKiBjYWxs
ZXJSID0gcltSZWdpc3RlckZpbGU6OkNhbGxlclJlZ2lzdGVyc10ucigpOwotICAgIGlmIChpc0hv
c3RDYWxsRnJhbWUoY2FsbGVyUikpCisgICAgQ2FsbEZyYW1lKiBjYWxsZXJGcmFtZSA9IGNhbGxG
cmFtZS0+Y2FsbGVyRnJhbWUoKTsKKyAgICBpZiAoY2FsbGVyRnJhbWUtPmhhc0hvc3RDYWxsRnJh
bWVGbGFnKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIENvZGVCbG9jayogY2FsbGVyQ29kZUJs
b2NrID0gY29kZUJsb2NrKGNhbGxlclIpOworICAgIENvZGVCbG9jayogY2FsbGVyQ29kZUJsb2Nr
ID0gY2FsbGVyRnJhbWUtPmNvZGVCbG9jaygpOwogICAgIGlmICghY2FsbGVyQ29kZUJsb2NrKQog
ICAgICAgICByZXR1cm47CiAKLSAgICBJbnN0cnVjdGlvbiogdlBDID0gdlBDRm9yUEMoY2FsbGVy
Q29kZUJsb2NrLCByW1JlZ2lzdGVyRmlsZTo6UmV0dXJuUENdLnYoKSk7CisgICAgSW5zdHJ1Y3Rp
b24qIHZQQyA9IHZQQ0ZvclBDKGNhbGxlckNvZGVCbG9jaywgY2FsbEZyYW1lLT5yZXR1cm5QQygp
KTsKICAgICBsaW5lTnVtYmVyID0gY2FsbGVyQ29kZUJsb2NrLT5saW5lTnVtYmVyRm9yVlBDKHZQ
QyAtIDEpOwogICAgIHNvdXJjZUlEID0gY2FsbGVyQ29kZUJsb2NrLT5vd25lck5vZGUtPnNvdXJj
ZUlEKCk7CiAgICAgc291cmNlVVJMID0gY2FsbGVyQ29kZUJsb2NrLT5vd25lck5vZGUtPnNvdXJj
ZVVSTCgpOwotCi0gICAgSlNWYWx1ZSogY2FsbGVyID0gY2FsbGVyUltSZWdpc3RlckZpbGU6OkNh
bGxlZV0uZ2V0SlNWYWx1ZSgpOwotICAgIGlmICghY2FsbGVyKQotICAgICAgICByZXR1cm47Ci0K
LSAgICBmdW5jdGlvbiA9IGNhbGxlcjsKKyAgICBmdW5jdGlvbiA9IGNhbGxlckZyYW1lLT5jYWxs
ZWUoKTsKIH0KIAotUmVnaXN0ZXIqIE1hY2hpbmU6OmNhbGxGcmFtZShFeGVjU3RhdGUqIGV4ZWMs
IEludGVybmFsRnVuY3Rpb24qIGZ1bmN0aW9uKSBjb25zdAorQ2FsbEZyYW1lKiBNYWNoaW5lOjpm
aW5kRnVuY3Rpb25DYWxsRnJhbWUoQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIEludGVybmFsRnVuY3Rp
b24qIGZ1bmN0aW9uKQogewotICAgIGZvciAoUmVnaXN0ZXIqIHIgPSBleGVjLT5yZWdpc3RlcnMo
KTsgcjsgciA9IHN0cmlwSG9zdENhbGxGcmFtZUJpdChyW1JlZ2lzdGVyRmlsZTo6Q2FsbGVyUmVn
aXN0ZXJzXS5yKCkpKQotICAgICAgICBpZiAocltSZWdpc3RlckZpbGU6OkNhbGxlZV0uZ2V0SlNW
YWx1ZSgpID09IGZ1bmN0aW9uKQotICAgICAgICAgICAgcmV0dXJuIHI7CisgICAgZm9yIChDYWxs
RnJhbWUqIGNhbmRpZGF0ZSA9IGNhbGxGcmFtZTsgY2FuZGlkYXRlOyBjYW5kaWRhdGUgPSBjYW5k
aWRhdGUtPmNhbGxlckZyYW1lKCktPnJlbW92ZUhvc3RDYWxsRnJhbWVGbGFnKCkpIHsKKyAgICAg
ICAgaWYgKGNhbmRpZGF0ZS0+Y2FsbGVlKCkgPT0gZnVuY3Rpb24pCisgICAgICAgICAgICByZXR1
cm4gY2FuZGlkYXRlOworICAgIH0KICAgICByZXR1cm4gMDsKIH0KIAotdm9pZCBNYWNoaW5lOjpn
ZXRBcmd1bWVudHNEYXRhKFJlZ2lzdGVyKiBjYWxsRnJhbWUsIEpTRnVuY3Rpb24qJiBmdW5jdGlv
biwgcHRyZGlmZl90JiBmaXJzdFBhcmFtZXRlckluZGV4LCBSZWdpc3RlciomIGFyZ3YsIGludCYg
YXJnYykKK3ZvaWQgTWFjaGluZTo6Z2V0QXJndW1lbnRzRGF0YShDYWxsRnJhbWUqIGNhbGxGcmFt
ZSwgSlNGdW5jdGlvbiomIGZ1bmN0aW9uLCBwdHJkaWZmX3QmIGZpcnN0UGFyYW1ldGVySW5kZXgs
IFJlZ2lzdGVyKiYgYXJndiwgaW50JiBhcmdjKQogewotICAgIGZ1bmN0aW9uID0gc3RhdGljX2Nh
c3Q8SlNGdW5jdGlvbio+KGNhbGxGcmFtZVtSZWdpc3RlckZpbGU6OkNhbGxlZV0uZ2V0SlNWYWx1
ZSgpKTsKLSAgICBBU1NFUlQoZnVuY3Rpb24tPmluaGVyaXRzKCZKU0Z1bmN0aW9uOjppbmZvKSk7
CisgICAgZnVuY3Rpb24gPSBjYWxsRnJhbWUtPmNhbGxlZSgpOwogICAgIAogICAgIENvZGVCbG9j
ayogY29kZUJsb2NrID0gJmZ1bmN0aW9uLT5tX2JvZHktPmdlbmVyYXRlZEJ5dGVDb2RlKCk7CiAg
ICAgaW50IG51bVBhcmFtZXRlcnMgPSBjb2RlQmxvY2stPm51bVBhcmFtZXRlcnM7Ci0gICAgYXJn
YyA9IGNhbGxGcmFtZVtSZWdpc3RlckZpbGU6OkFyZ3VtZW50Q291bnRdLmkoKTsKKyAgICBhcmdj
ID0gY2FsbEZyYW1lLT5hcmd1bWVudENvdW50KCk7CiAKICAgICBpZiAoYXJnYyA8PSBudW1QYXJh
bWV0ZXJzKQotICAgICAgICBhcmd2ID0gY2FsbEZyYW1lIC0gUmVnaXN0ZXJGaWxlOjpDYWxsRnJh
bWVIZWFkZXJTaXplIC0gbnVtUGFyYW1ldGVycyArIDE7IC8vICsgMSB0byBza2lwICJ0aGlzIgor
ICAgICAgICBhcmd2ID0gY2FsbEZyYW1lLT5yZWdpc3RlcnMoKSAtIFJlZ2lzdGVyRmlsZTo6Q2Fs
bEZyYW1lSGVhZGVyU2l6ZSAtIG51bVBhcmFtZXRlcnMgKyAxOyAvLyArIDEgdG8gc2tpcCAidGhp
cyIKICAgICBlbHNlCi0gICAgICAgIGFyZ3YgPSBjYWxsRnJhbWUgLSBSZWdpc3RlckZpbGU6OkNh
bGxGcmFtZUhlYWRlclNpemUgLSBudW1QYXJhbWV0ZXJzIC0gYXJnYyArIDE7IC8vICsgMSB0byBz
a2lwICJ0aGlzIgorICAgICAgICBhcmd2ID0gY2FsbEZyYW1lLT5yZWdpc3RlcnMoKSAtIFJlZ2lz
dGVyRmlsZTo6Q2FsbEZyYW1lSGVhZGVyU2l6ZSAtIG51bVBhcmFtZXRlcnMgLSBhcmdjICsgMTsg
Ly8gKyAxIHRvIHNraXAgInRoaXMiCiAKICAgICBhcmdjIC09IDE7IC8vIC0gMSB0byBza2lwICJ0
aGlzIgogICAgIGZpcnN0UGFyYW1ldGVySW5kZXggPSAtUmVnaXN0ZXJGaWxlOjpDYWxsRnJhbWVI
ZWFkZXJTaXplIC0gbnVtUGFyYW1ldGVycyArIDE7IC8vICsgMSB0byBza2lwICJ0aGlzIgpAQCAt
NDAxMyw3ICszOTgxLDcgQEAgTkVWRVJfSU5MSU5FIHN0YXRpYyB2b2lkIGRvU2V0UmV0dXJuQWRk
cgogICAgIGN0aVNldFJldHVybkFkZHJlc3MocmV0dXJuQWRkcmVzcywgcmVpbnRlcnByZXRfY2Fz
dDx2b2lkKj4oY3RpVk1UaHJvd1RyYW1wb2xpbmUpKTsKIH0KIAotTkVWRVJfSU5MSU5FIHZvaWQg
TWFjaGluZTo6dHJ5Q1RJQ2FjaGVQdXRCeUlEKEV4ZWNTdGF0ZSogZXhlYywgQ29kZUJsb2NrKiBj
b2RlQmxvY2ssIHZvaWQqIHJldHVybkFkZHJlc3MsIEpTVmFsdWUqIGJhc2VWYWx1ZSwgY29uc3Qg
UHV0UHJvcGVydHlTbG90JiBzbG90KQorTkVWRVJfSU5MSU5FIHZvaWQgTWFjaGluZTo6dHJ5Q1RJ
Q2FjaGVQdXRCeUlEKENhbGxGcmFtZSogY2FsbEZyYW1lLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywg
dm9pZCogcmV0dXJuQWRkcmVzcywgSlNWYWx1ZSogYmFzZVZhbHVlLCBjb25zdCBQdXRQcm9wZXJ0
eVNsb3QmIHNsb3QpCiB7CiAgICAgLy8gVGhlIGludGVycHJldGVyIGNoZWNrcyBmb3IgcmVjdXJz
aW9uIGhlcmU7IEkgZG8gbm90IGJlbGlldmUgdGhpcyBjYW4gb2NjdXIgaW4gQ1RJLgogCkBAIC00
MDU1LDcgKzQwMjMsNyBAQCBORVZFUl9JTkxJTkUgdm9pZCBNYWNoaW5lOjp0cnlDVElDYWNoZVB1
CiAgICAgICAgIHZQQ1s1XSA9IHN0cnVjdHVyZUlEOwogICAgICAgICBTdHJ1Y3R1cmVJRENoYWlu
KiBjaGFpbiA9IHN0cnVjdHVyZUlELT5jYWNoZWRQcm90b3R5cGVDaGFpbigpOwogICAgICAgICBp
ZiAoIWNoYWluKSB7Ci0gICAgICAgICAgICBjaGFpbiA9IGNhY2hlUHJvdG90eXBlQ2hhaW4oZXhl
Yywgc3RydWN0dXJlSUQpOworICAgICAgICAgICAgY2hhaW4gPSBjYWNoZVByb3RvdHlwZUNoYWlu
KGNhbGxGcmFtZSwgc3RydWN0dXJlSUQpOwogICAgICAgICAgICAgaWYgKCFjaGFpbikgewogICAg
ICAgICAgICAgICAgIC8vIFRoaXMgaGFwcGVucyBpZiBzb21lb25lIGhhcyBtYW51YWxseSBpbnNl
cnRlZCBudWxsIGludG8gdGhlIHByb3RvdHlwZSBjaGFpbgogICAgICAgICAgICAgICAgIHZQQ1sw
XSA9IGdldE9wY29kZShvcF9wdXRfYnlfaWRfZ2VuZXJpYyk7CkBAIC00MDY1LDcgKzQwMzMsNyBA
QCBORVZFUl9JTkxJTkUgdm9pZCBNYWNoaW5lOjp0cnlDVElDYWNoZVB1CiAgICAgICAgIHZQQ1s2
XSA9IGNoYWluOwogICAgICAgICB2UENbN10gPSBzbG90LmNhY2hlZE9mZnNldCgpOwogICAgICAg
ICBjb2RlQmxvY2stPnJlZlN0cnVjdHVyZUlEcyh2UEMpOwotICAgICAgICBDVEk6OmNvbXBpbGVQ
dXRCeUlkVHJhbnNpdGlvbih0aGlzLCBleGVjLCBjb2RlQmxvY2ssIHN0cnVjdHVyZUlELT5wcmV2
aW91c0lEKCksIHN0cnVjdHVyZUlELCBzbG90LmNhY2hlZE9mZnNldCgpLCBjaGFpbiwgcmV0dXJu
QWRkcmVzcyk7CisgICAgICAgIENUSTo6Y29tcGlsZVB1dEJ5SWRUcmFuc2l0aW9uKHRoaXMsIGNh
bGxGcmFtZSwgY29kZUJsb2NrLCBzdHJ1Y3R1cmVJRC0+cHJldmlvdXNJRCgpLCBzdHJ1Y3R1cmVJ
RCwgc2xvdC5jYWNoZWRPZmZzZXQoKSwgY2hhaW4sIHJldHVybkFkZHJlc3MpOwogICAgICAgICBy
ZXR1cm47CiAgICAgfQogICAgIApAQCAtNDA3NSwzMCArNDA0MywzMCBAQCBORVZFUl9JTkxJTkUg
dm9pZCBNYWNoaW5lOjp0cnlDVElDYWNoZVB1CiAgICAgY29kZUJsb2NrLT5yZWZTdHJ1Y3R1cmVJ
RHModlBDKTsKIAogI2lmIFVTRShDVElfUkVQQVRDSF9QSUMpCi0gICAgVU5VU0VEX1BBUkFNKGV4
ZWMpOworICAgIFVOVVNFRF9QQVJBTShjYWxsRnJhbWUpOwogICAgIENUSTo6cGF0Y2hQdXRCeUlk
UmVwbGFjZShjb2RlQmxvY2ssIHN0cnVjdHVyZUlELCBzbG90LmNhY2hlZE9mZnNldCgpLCByZXR1
cm5BZGRyZXNzKTsKICNlbHNlCi0gICAgQ1RJOjpjb21waWxlUHV0QnlJZFJlcGxhY2UodGhpcywg
ZXhlYywgY29kZUJsb2NrLCBzdHJ1Y3R1cmVJRCwgc2xvdC5jYWNoZWRPZmZzZXQoKSwgcmV0dXJu
QWRkcmVzcyk7CisgICAgQ1RJOjpjb21waWxlUHV0QnlJZFJlcGxhY2UodGhpcywgY2FsbEZyYW1l
LCBjb2RlQmxvY2ssIHN0cnVjdHVyZUlELCBzbG90LmNhY2hlZE9mZnNldCgpLCByZXR1cm5BZGRy
ZXNzKTsKICNlbmRpZgogfQogCi12b2lkKiBNYWNoaW5lOjpnZXRDVElBcnJheUxlbmd0aFRyYW1w
b2xpbmUoRXhlY1N0YXRlKiBleGVjLCBDb2RlQmxvY2sqIGNvZGVCbG9jaykKK3ZvaWQqIE1hY2hp
bmU6OmdldENUSUFycmF5TGVuZ3RoVHJhbXBvbGluZShDYWxsRnJhbWUqIGNhbGxGcmFtZSwgQ29k
ZUJsb2NrKiBjb2RlQmxvY2spCiB7CiAgICAgaWYgKCFtX2N0aUFycmF5TGVuZ3RoVHJhbXBvbGlu
ZSkKLSAgICAgICAgbV9jdGlBcnJheUxlbmd0aFRyYW1wb2xpbmUgPSBDVEk6OmNvbXBpbGVBcnJh
eUxlbmd0aFRyYW1wb2xpbmUodGhpcywgZXhlYywgY29kZUJsb2NrKTsKKyAgICAgICAgbV9jdGlB
cnJheUxlbmd0aFRyYW1wb2xpbmUgPSBDVEk6OmNvbXBpbGVBcnJheUxlbmd0aFRyYW1wb2xpbmUo
dGhpcywgY2FsbEZyYW1lLCBjb2RlQmxvY2spOwogICAgICAgICAKICAgICByZXR1cm4gbV9jdGlB
cnJheUxlbmd0aFRyYW1wb2xpbmU7CiB9CiAKLXZvaWQqIE1hY2hpbmU6OmdldENUSVN0cmluZ0xl
bmd0aFRyYW1wb2xpbmUoRXhlY1N0YXRlKiBleGVjLCBDb2RlQmxvY2sqIGNvZGVCbG9jaykKK3Zv
aWQqIE1hY2hpbmU6OmdldENUSVN0cmluZ0xlbmd0aFRyYW1wb2xpbmUoQ2FsbEZyYW1lKiBjYWxs
RnJhbWUsIENvZGVCbG9jayogY29kZUJsb2NrKQogewogICAgIGlmICghbV9jdGlTdHJpbmdMZW5n
dGhUcmFtcG9saW5lKQotICAgICAgICBtX2N0aVN0cmluZ0xlbmd0aFRyYW1wb2xpbmUgPSBDVEk6
OmNvbXBpbGVTdHJpbmdMZW5ndGhUcmFtcG9saW5lKHRoaXMsIGV4ZWMsIGNvZGVCbG9jayk7Cisg
ICAgICAgIG1fY3RpU3RyaW5nTGVuZ3RoVHJhbXBvbGluZSA9IENUSTo6Y29tcGlsZVN0cmluZ0xl
bmd0aFRyYW1wb2xpbmUodGhpcywgY2FsbEZyYW1lLCBjb2RlQmxvY2spOwogICAgICAgICAKICAg
ICByZXR1cm4gbV9jdGlTdHJpbmdMZW5ndGhUcmFtcG9saW5lOwogfQogCi1ORVZFUl9JTkxJTkUg
dm9pZCBNYWNoaW5lOjp0cnlDVElDYWNoZUdldEJ5SUQoRXhlY1N0YXRlKiBleGVjLCBDb2RlQmxv
Y2sqIGNvZGVCbG9jaywgdm9pZCogcmV0dXJuQWRkcmVzcywgSlNWYWx1ZSogYmFzZVZhbHVlLCBj
b25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIGNvbnN0IFByb3BlcnR5U2xvdCYgc2xvdCkK
K05FVkVSX0lOTElORSB2b2lkIE1hY2hpbmU6OnRyeUNUSUNhY2hlR2V0QnlJRChDYWxsRnJhbWUq
IGNhbGxGcmFtZSwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIHZvaWQqIHJldHVybkFkZHJlc3MsIEpT
VmFsdWUqIGJhc2VWYWx1ZSwgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBjb25zdCBQ
cm9wZXJ0eVNsb3QmIHNsb3QpCiB7CiAgICAgLy8gRklYTUU6IFdyaXRlIGEgdGVzdCB0aGF0IHBy
b3ZlcyB3ZSBuZWVkIHRvIGNoZWNrIGZvciByZWN1cnNpb24gaGVyZSBqdXN0CiAgICAgLy8gbGlr
ZSB0aGUgaW50ZXJwcmV0ZXIgZG9lcywgdGhlbiBhZGQgYSBjaGVjayBmb3IgcmVjdXJzaW9uLgpA
QCAtNDEwOSwxOCArNDA3NywxOCBAQCBORVZFUl9JTkxJTkUgdm9pZCBNYWNoaW5lOjp0cnlDVElD
YWNoZUdlCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBpZiAoaXNKU0FycmF5KGJhc2VW
YWx1ZSkgJiYgcHJvcGVydHlOYW1lID09IGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5sZW5ndGgpIHsK
KyAgICBpZiAoaXNKU0FycmF5KGJhc2VWYWx1ZSkgJiYgcHJvcGVydHlOYW1lID09IGNhbGxGcmFt
ZS0+cHJvcGVydHlOYW1lcygpLmxlbmd0aCkgewogI2lmIFVTRShDVElfUkVQQVRDSF9QSUMpCi0g
ICAgICAgIENUSTo6Y29tcGlsZVBhdGNoR2V0QXJyYXlMZW5ndGgodGhpcywgZXhlYywgY29kZUJs
b2NrLCByZXR1cm5BZGRyZXNzKTsKKyAgICAgICAgQ1RJOjpjb21waWxlUGF0Y2hHZXRBcnJheUxl
bmd0aCh0aGlzLCBjYWxsRnJhbWUsIGNvZGVCbG9jaywgcmV0dXJuQWRkcmVzcyk7CiAjZWxzZQot
ICAgICAgICBjdGlSZXBhdGNoQ2FsbEJ5UmV0dXJuQWRkcmVzcyhyZXR1cm5BZGRyZXNzLCBnZXRD
VElBcnJheUxlbmd0aFRyYW1wb2xpbmUoZXhlYywgY29kZUJsb2NrKSk7CisgICAgICAgIGN0aVJl
cGF0Y2hDYWxsQnlSZXR1cm5BZGRyZXNzKHJldHVybkFkZHJlc3MsIGdldENUSUFycmF5TGVuZ3Ro
VHJhbXBvbGluZShjYWxsRnJhbWUsIGNvZGVCbG9jaykpOwogI2VuZGlmCiAgICAgICAgIHJldHVy
bjsKICAgICB9Ci0gICAgaWYgKGlzSlNTdHJpbmcoYmFzZVZhbHVlKSAmJiBwcm9wZXJ0eU5hbWUg
PT0gZXhlYy0+cHJvcGVydHlOYW1lcygpLmxlbmd0aCkgeworICAgIGlmIChpc0pTU3RyaW5nKGJh
c2VWYWx1ZSkgJiYgcHJvcGVydHlOYW1lID09IGNhbGxGcmFtZS0+cHJvcGVydHlOYW1lcygpLmxl
bmd0aCkgewogICAgICAgICAvLyBUaGUgdHJhZGVvZmYgb2YgY29tcGlsaW5nIGFuIHJlcGF0Y2hl
ZCBpbmxpbmUgc3RyaW5nIGxlbmd0aCBhY2Nlc3Mgcm91dGluZSBkb2VzIG5vdCBzZWVtCiAgICAg
ICAgIC8vIHRvIHBheSBvZmYsIHNvIHdlIGN1cnJlbnRseSBvbmx5IGRvIHRoaXMgZm9yIGFycmF5
cy4KLSAgICAgICAgY3RpUmVwYXRjaENhbGxCeVJldHVybkFkZHJlc3MocmV0dXJuQWRkcmVzcywg
Z2V0Q1RJU3RyaW5nTGVuZ3RoVHJhbXBvbGluZShleGVjLCBjb2RlQmxvY2spKTsKKyAgICAgICAg
Y3RpUmVwYXRjaENhbGxCeVJldHVybkFkZHJlc3MocmV0dXJuQWRkcmVzcywgZ2V0Q1RJU3RyaW5n
TGVuZ3RoVHJhbXBvbGluZShjYWxsRnJhbWUsIGNvZGVCbG9jaykpOwogICAgICAgICByZXR1cm47
CiAgICAgfQogCkBAIC00MTU2LDEyICs0MTI0LDEyIEBAIE5FVkVSX0lOTElORSB2b2lkIE1hY2hp
bmU6OnRyeUNUSUNhY2hlR2UKICNpZiBVU0UoQ1RJX1JFUEFUQ0hfUElDKQogICAgICAgICBDVEk6
OnBhdGNoR2V0QnlJZFNlbGYoY29kZUJsb2NrLCBzdHJ1Y3R1cmVJRCwgc2xvdC5jYWNoZWRPZmZz
ZXQoKSwgcmV0dXJuQWRkcmVzcyk7CiAjZWxzZQotICAgICAgICBDVEk6OmNvbXBpbGVHZXRCeUlk
U2VsZih0aGlzLCBleGVjLCBjb2RlQmxvY2ssIHN0cnVjdHVyZUlELCBzbG90LmNhY2hlZE9mZnNl
dCgpLCByZXR1cm5BZGRyZXNzKTsKKyAgICAgICAgQ1RJOjpjb21waWxlR2V0QnlJZFNlbGYodGhp
cywgY2FsbEZyYW1lLCBjb2RlQmxvY2ssIHN0cnVjdHVyZUlELCBzbG90LmNhY2hlZE9mZnNldCgp
LCByZXR1cm5BZGRyZXNzKTsKICNlbmRpZgogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAg
aWYgKHNsb3Quc2xvdEJhc2UoKSA9PSBzdHJ1Y3R1cmVJRC0+cHJvdG90eXBlRm9yTG9va3VwKGV4
ZWMpKSB7CisgICAgaWYgKHNsb3Quc2xvdEJhc2UoKSA9PSBzdHJ1Y3R1cmVJRC0+cHJvdG90eXBl
Rm9yTG9va3VwKGNhbGxGcmFtZSkpIHsKICAgICAgICAgQVNTRVJUKHNsb3Quc2xvdEJhc2UoKS0+
aXNPYmplY3QoKSk7CiAKICAgICAgICAgSlNPYmplY3QqIHNsb3RCYXNlT2JqZWN0ID0gc3RhdGlj
X2Nhc3Q8SlNPYmplY3QqPihzbG90LnNsb3RCYXNlKCkpOwpAQCAtNDE4MCwxNCArNDE0OCwxNCBA
QCBORVZFUl9JTkxJTkUgdm9pZCBNYWNoaW5lOjp0cnlDVElDYWNoZUdlCiAgICAgICAgIHZQQ1s2
XSA9IHNsb3QuY2FjaGVkT2Zmc2V0KCk7CiAgICAgICAgIGNvZGVCbG9jay0+cmVmU3RydWN0dXJl
SURzKHZQQyk7CiAKLSAgICAgICAgQ1RJOjpjb21waWxlR2V0QnlJZFByb3RvKHRoaXMsIGV4ZWMs
IGNvZGVCbG9jaywgc3RydWN0dXJlSUQsIHNsb3RCYXNlT2JqZWN0LT5zdHJ1Y3R1cmVJRCgpLCBz
bG90LmNhY2hlZE9mZnNldCgpLCByZXR1cm5BZGRyZXNzKTsKKyAgICAgICAgQ1RJOjpjb21waWxl
R2V0QnlJZFByb3RvKHRoaXMsIGNhbGxGcmFtZSwgY29kZUJsb2NrLCBzdHJ1Y3R1cmVJRCwgc2xv
dEJhc2VPYmplY3QtPnN0cnVjdHVyZUlEKCksIHNsb3QuY2FjaGVkT2Zmc2V0KCksIHJldHVybkFk
ZHJlc3MpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCiAgICAgc2l6ZV90IGNvdW50ID0gMDsK
ICAgICBKU09iamVjdCogbyA9IHN0YXRpY19jYXN0PEpTT2JqZWN0Kj4oYmFzZVZhbHVlKTsKICAg
ICB3aGlsZSAoc2xvdC5zbG90QmFzZSgpICE9IG8pIHsKLSAgICAgICAgSlNWYWx1ZSogdiA9IG8t
PnN0cnVjdHVyZUlEKCktPnByb3RvdHlwZUZvckxvb2t1cChleGVjKTsKKyAgICAgICAgSlNWYWx1
ZSogdiA9IG8tPnN0cnVjdHVyZUlEKCktPnByb3RvdHlwZUZvckxvb2t1cChjYWxsRnJhbWUpOwog
CiAgICAgICAgIC8vIElmIHdlIGRpZG4ndCBmaW5kIHNsb3RCYXNlIGluIGJhc2VWYWx1ZSdzIHBy
b3RvdHlwZSBjaGFpbiwgdGhlbiBiYXNlVmFsdWUKICAgICAgICAgLy8gbXVzdCBiZSBhIHByb3h5
IGZvciBhbm90aGVyIG9iamVjdC4KQEAgLTQyMTIsNyArNDE4MCw3IEBAIE5FVkVSX0lOTElORSB2
b2lkIE1hY2hpbmU6OnRyeUNUSUNhY2hlR2UKIAogICAgIFN0cnVjdHVyZUlEQ2hhaW4qIGNoYWlu
ID0gc3RydWN0dXJlSUQtPmNhY2hlZFByb3RvdHlwZUNoYWluKCk7CiAgICAgaWYgKCFjaGFpbikK
LSAgICAgICAgY2hhaW4gPSBjYWNoZVByb3RvdHlwZUNoYWluKGV4ZWMsIHN0cnVjdHVyZUlEKTsK
KyAgICAgICAgY2hhaW4gPSBjYWNoZVByb3RvdHlwZUNoYWluKGNhbGxGcmFtZSwgc3RydWN0dXJl
SUQpOwogCiAgICAgQVNTRVJUKGNoYWluKTsKICAgICB2UENbMF0gPSBnZXRPcGNvZGUob3BfZ2V0
X2J5X2lkX2NoYWluKTsKQEAgLTQyMjIsNyArNDE5MCw3IEBAIE5FVkVSX0lOTElORSB2b2lkIE1h
Y2hpbmU6OnRyeUNUSUNhY2hlR2UKICAgICB2UENbN10gPSBzbG90LmNhY2hlZE9mZnNldCgpOwog
ICAgIGNvZGVCbG9jay0+cmVmU3RydWN0dXJlSURzKHZQQyk7CiAKLSAgICBDVEk6OmNvbXBpbGVH
ZXRCeUlkQ2hhaW4odGhpcywgZXhlYywgY29kZUJsb2NrLCBzdHJ1Y3R1cmVJRCwgY2hhaW4sIGNv
dW50LCBzbG90LmNhY2hlZE9mZnNldCgpLCByZXR1cm5BZGRyZXNzKTsKKyAgICBDVEk6OmNvbXBp
bGVHZXRCeUlkQ2hhaW4odGhpcywgY2FsbEZyYW1lLCBjb2RlQmxvY2ssIHN0cnVjdHVyZUlELCBj
aGFpbiwgY291bnQsIHNsb3QuY2FjaGVkT2Zmc2V0KCksIHJldHVybkFkZHJlc3MpOwogfQogCiAj
ZGVmaW5lIFZNX1RIUk9XX0VYQ0VQVElPTigpIFwKQEAgLTQyNjUsMTcgKzQyMzMsMTYgQEAgTkVW
RVJfSU5MSU5FIHZvaWQgTWFjaGluZTo6dHJ5Q1RJQ2FjaGVHZQogSlNWYWx1ZSogTWFjaGluZTo6
Y3RpX29wX2NvbnZlcnRfdGhpcyhDVElfQVJHUykKIHsKICAgICBKU1ZhbHVlKiB2MSA9IEFSR19z
cmMxOwotICAgIEV4ZWNTdGF0ZSogZXhlYyA9IEFSR19leGVjOworICAgIENhbGxGcmFtZSogY2Fs
bEZyYW1lID0gQVJHX2NhbGxGcmFtZTsKIAotICAgIEpTT2JqZWN0KiByZXN1bHQgPSB2MS0+dG9U
aGlzT2JqZWN0KGV4ZWMpOworICAgIEpTT2JqZWN0KiByZXN1bHQgPSB2MS0+dG9UaGlzT2JqZWN0
KGNhbGxGcmFtZSk7CiAgICAgVk1fQ0hFQ0tfRVhDRVBUSU9OX0FUX0VORCgpOwogICAgIHJldHVy
biByZXN1bHQ7CiB9CiAKIHZvaWQgTWFjaGluZTo6Y3RpX29wX2VuZChDVElfQVJHUykKIHsKLSAg
ICBSZWdpc3RlciogciA9IEFSR19yOwotICAgIFNjb3BlQ2hhaW5Ob2RlKiBzY29wZUNoYWluID0g
TWFjaGluZTo6c2NvcGVDaGFpbihyKTsKKyAgICBTY29wZUNoYWluTm9kZSogc2NvcGVDaGFpbiA9
IEFSR19jYWxsRnJhbWUtPnNjb3BlQ2hhaW4oKTsKICAgICBBU1NFUlQoc2NvcGVDaGFpbi0+cmVm
Q291bnQgPiAxKTsKICAgICBzY29wZUNoYWluLT5kZXJlZigpOwogfQpAQCAtNDI5MiwxMyArNDI1
OSwxMyBAQCBKU1ZhbHVlKiBNYWNoaW5lOjpjdGlfb3BfYWRkKENUSV9BUkdTKQogICAgIGlmIChy
aWdodElzTnVtYmVyICYmIGZhc3RJc051bWJlcih2MSwgbGVmdCkpCiAgICAgICAgIHJldHVybiBq
c051bWJlcihBUkdfZ2xvYmFsRGF0YSwgbGVmdCArIHJpZ2h0KTsKICAgICAKLSAgICBFeGVjU3Rh
dGUqIGV4ZWMgPSBBUkdfZXhlYzsKKyAgICBDYWxsRnJhbWUqIGNhbGxGcmFtZSA9IEFSR19jYWxs
RnJhbWU7CiAKICAgICBib29sIGxlZnRJc1N0cmluZyA9IHYxLT5pc1N0cmluZygpOwogICAgIGlm
IChsZWZ0SXNTdHJpbmcgJiYgdjItPmlzU3RyaW5nKCkpIHsKICAgICAgICAgUmVmUHRyPFVTdHJp
bmc6OlJlcD4gdmFsdWUgPSBjb25jYXRlbmF0ZShzdGF0aWNfY2FzdDxKU1N0cmluZyo+KHYxKS0+
dmFsdWUoKS5yZXAoKSwgc3RhdGljX2Nhc3Q8SlNTdHJpbmcqPih2MiktPnZhbHVlKCkucmVwKCkp
OwogICAgICAgICBpZiAoVU5MSUtFTFkoIXZhbHVlKSkgewotICAgICAgICAgICAgdGhyb3dPdXRP
Zk1lbW9yeUVycm9yKGV4ZWMpOworICAgICAgICAgICAgdGhyb3dPdXRPZk1lbW9yeUVycm9yKGNh
bGxGcmFtZSk7CiAgICAgICAgICAgICBWTV9USFJPV19FWENFUFRJT04oKTsKICAgICAgICAgfQog
CkBAIC00MzExLDE0ICs0Mjc4LDE0IEBAIEpTVmFsdWUqIE1hY2hpbmU6OmN0aV9vcF9hZGQoQ1RJ
X0FSR1MpCiAgICAgICAgICAgICBjb25jYXRlbmF0ZShzdGF0aWNfY2FzdDxKU1N0cmluZyo+KHYx
KS0+dmFsdWUoKS5yZXAoKSwgcmlnaHQpOwogCiAgICAgICAgIGlmIChVTkxJS0VMWSghdmFsdWUp
KSB7Ci0gICAgICAgICAgICB0aHJvd091dE9mTWVtb3J5RXJyb3IoZXhlYyk7CisgICAgICAgICAg
ICB0aHJvd091dE9mTWVtb3J5RXJyb3IoY2FsbEZyYW1lKTsKICAgICAgICAgICAgIFZNX1RIUk9X
X0VYQ0VQVElPTigpOwogICAgICAgICB9CiAgICAgICAgIHJldHVybiBqc1N0cmluZyhBUkdfZ2xv
YmFsRGF0YSwgdmFsdWUucmVsZWFzZSgpKTsKICAgICB9CiAKICAgICAvLyBBbGwgb3RoZXIgY2Fz
ZXMgYXJlIHByZXR0eSB1bmNvbW1vbgotICAgIEpTVmFsdWUqIHJlc3VsdCA9IGpzQWRkU2xvd0Nh
c2UoZXhlYywgdjEsIHYyKTsKKyAgICBKU1ZhbHVlKiByZXN1bHQgPSBqc0FkZFNsb3dDYXNlKGNh
bGxGcmFtZSwgdjEsIHYyKTsKICAgICBWTV9DSEVDS19FWENFUFRJT05fQVRfRU5EKCk7CiAgICAg
cmV0dXJuIHJlc3VsdDsKIH0KQEAgLTQzMjcsMTUgKzQyOTQsMTUgQEAgSlNWYWx1ZSogTWFjaGlu
ZTo6Y3RpX29wX3ByZV9pbmMoQ1RJX0FSRwogewogICAgIEpTVmFsdWUqIHYgPSBBUkdfc3JjMTsK
IAotICAgIEV4ZWNTdGF0ZSogZXhlYyA9IEFSR19leGVjOwotICAgIEpTVmFsdWUqIHJlc3VsdCA9
IGpzTnVtYmVyKEFSR19nbG9iYWxEYXRhLCB2LT50b051bWJlcihleGVjKSArIDEpOworICAgIENh
bGxGcmFtZSogY2FsbEZyYW1lID0gQVJHX2NhbGxGcmFtZTsKKyAgICBKU1ZhbHVlKiByZXN1bHQg
PSBqc051bWJlcihBUkdfZ2xvYmFsRGF0YSwgdi0+dG9OdW1iZXIoY2FsbEZyYW1lKSArIDEpOwog
ICAgIFZNX0NIRUNLX0VYQ0VQVElPTl9BVF9FTkQoKTsKICAgICByZXR1cm4gcmVzdWx0OwogfQog
CiB2b2lkIE1hY2hpbmU6OmN0aV90aW1lb3V0X2NoZWNrKENUSV9BUkdTKQogewotICAgIGlmIChB
UkdfZ2xvYmFsRGF0YS0+bWFjaGluZS0+Y2hlY2tUaW1lb3V0KEFSR19leGVjLT5keW5hbWljR2xv
YmFsT2JqZWN0KCkpKSB7CisgICAgaWYgKEFSR19nbG9iYWxEYXRhLT5tYWNoaW5lLT5jaGVja1Rp
bWVvdXQoQVJHX2NhbGxGcmFtZS0+ZHluYW1pY0dsb2JhbE9iamVjdCgpKSkgewogICAgICAgICBB
UkdfZ2xvYmFsRGF0YS0+ZXhjZXB0aW9uID0gY3JlYXRlSW50ZXJydXB0ZWRFeGVjdXRpb25FeGNl
cHRpb24oQVJHX2dsb2JhbERhdGEpOwogICAgICAgICBWTV9USFJPV19FWENFUFRJT05fQVRfRU5E
KCk7CiAgICAgfQpAQCAtNDM0NSw5ICs0MzEyLDkgQEAgaW50IE1hY2hpbmU6OmN0aV9vcF9sb29w
X2lmX2xlc3MoQ1RJX0FSRwogewogICAgIEpTVmFsdWUqIHNyYzEgPSBBUkdfc3JjMTsKICAgICBK
U1ZhbHVlKiBzcmMyID0gQVJHX3NyYzI7Ci0gICAgRXhlY1N0YXRlKiBleGVjID0gQVJHX2V4ZWM7
CisgICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUgPSBBUkdfY2FsbEZyYW1lOwogCi0gICAgYm9vbCBy
ZXN1bHQgPSBqc0xlc3MoZXhlYywgc3JjMSwgc3JjMik7CisgICAgYm9vbCByZXN1bHQgPSBqc0xl
c3MoY2FsbEZyYW1lLCBzcmMxLCBzcmMyKTsKICAgICBWTV9DSEVDS19FWENFUFRJT05fQVRfRU5E
KCk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KQEAgLTQzNTYsMjUgKzQzMjMsMjUgQEAgaW50IE1h
Y2hpbmU6OmN0aV9vcF9sb29wX2lmX2xlc3NlcShDVElfQQogewogICAgIEpTVmFsdWUqIHNyYzEg
PSBBUkdfc3JjMTsKICAgICBKU1ZhbHVlKiBzcmMyID0gQVJHX3NyYzI7Ci0gICAgRXhlY1N0YXRl
KiBleGVjID0gQVJHX2V4ZWM7CisgICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUgPSBBUkdfY2FsbEZy
YW1lOwogCi0gICAgYm9vbCByZXN1bHQgPSBqc0xlc3NFcShleGVjLCBzcmMxLCBzcmMyKTsKKyAg
ICBib29sIHJlc3VsdCA9IGpzTGVzc0VxKGNhbGxGcmFtZSwgc3JjMSwgc3JjMik7CiAgICAgVk1f
Q0hFQ0tfRVhDRVBUSU9OX0FUX0VORCgpOwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKIEpTVmFs
dWUqIE1hY2hpbmU6OmN0aV9vcF9uZXdfb2JqZWN0KENUSV9BUkdTKQogewotICAgIHJldHVybiBj
b25zdHJ1Y3RFbXB0eU9iamVjdChBUkdfZXhlYyk7OworICAgIHJldHVybiBjb25zdHJ1Y3RFbXB0
eU9iamVjdChBUkdfY2FsbEZyYW1lKTs7CiB9CiAKIHZvaWQgTWFjaGluZTo6Y3RpX29wX3B1dF9i
eV9pZChDVElfQVJHUykKIHsKLSAgICBFeGVjU3RhdGUqIGV4ZWMgPSBBUkdfZXhlYzsKKyAgICBD
YWxsRnJhbWUqIGNhbGxGcmFtZSA9IEFSR19jYWxsRnJhbWU7CiAgICAgSWRlbnRpZmllciYgaWRl
bnQgPSAqQVJHX2lkMjsKIAogICAgIFB1dFByb3BlcnR5U2xvdCBzbG90OwotICAgIEFSR19zcmMx
LT5wdXQoZXhlYywgaWRlbnQsIEFSR19zcmMzLCBzbG90KTsKKyAgICBBUkdfc3JjMS0+cHV0KGNh
bGxGcmFtZSwgaWRlbnQsIEFSR19zcmMzLCBzbG90KTsKIAogICAgIGN0aVJlcGF0Y2hDYWxsQnlS
ZXR1cm5BZGRyZXNzKENUSV9SRVRVUk5fQUREUkVTUywgKHZvaWQqKWN0aV9vcF9wdXRfYnlfaWRf
c2Vjb25kKTsKIApAQCAtNDM4MywzNyArNDM1MCwyNiBAQCB2b2lkIE1hY2hpbmU6OmN0aV9vcF9w
dXRfYnlfaWQoQ1RJX0FSR1MpCiAKIHZvaWQgTWFjaGluZTo6Y3RpX29wX3B1dF9ieV9pZF9zZWNv
bmQoQ1RJX0FSR1MpCiB7Ci0gICAgRXhlY1N0YXRlKiBleGVjID0gQVJHX2V4ZWM7Ci0gICAgSWRl
bnRpZmllciYgaWRlbnQgPSAqQVJHX2lkMjsKLQotICAgIEpTVmFsdWUqIGJhc2VWYWx1ZSA9IEFS
R19zcmMxOwogICAgIFB1dFByb3BlcnR5U2xvdCBzbG90OwotICAgIGJhc2VWYWx1ZS0+cHV0KGV4
ZWMsIGlkZW50LCBBUkdfc3JjMywgc2xvdCk7Ci0KLSAgICBSZWdpc3RlciogciA9IEFSR19yOwot
ICAgIEFSR19nbG9iYWxEYXRhLT5tYWNoaW5lLT50cnlDVElDYWNoZVB1dEJ5SUQoZXhlYywgY29k
ZUJsb2NrKHIpLCBDVElfUkVUVVJOX0FERFJFU1MsIGJhc2VWYWx1ZSwgc2xvdCk7Ci0KKyAgICBB
Ukdfc3JjMS0+cHV0KEFSR19jYWxsRnJhbWUsICpBUkdfaWQyLCBBUkdfc3JjMywgc2xvdCk7Cisg
ICAgQVJHX2dsb2JhbERhdGEtPm1hY2hpbmUtPnRyeUNUSUNhY2hlUHV0QnlJRChBUkdfY2FsbEZy
YW1lLCBBUkdfY2FsbEZyYW1lLT5jb2RlQmxvY2soKSwgQ1RJX1JFVFVSTl9BRERSRVNTLCBBUkdf
c3JjMSwgc2xvdCk7CiAgICAgVk1fQ0hFQ0tfRVhDRVBUSU9OX0FUX0VORCgpOwogfQogCiB2b2lk
IE1hY2hpbmU6OmN0aV9vcF9wdXRfYnlfaWRfZ2VuZXJpYyhDVElfQVJHUykKIHsKLSAgICBFeGVj
U3RhdGUqIGV4ZWMgPSBBUkdfZXhlYzsKLSAgICBJZGVudGlmaWVyJiBpZGVudCA9ICpBUkdfaWQy
OwotCiAgICAgUHV0UHJvcGVydHlTbG90IHNsb3Q7Ci0gICAgQVJHX3NyYzEtPnB1dChleGVjLCBp
ZGVudCwgQVJHX3NyYzMsIHNsb3QpOwotCisgICAgQVJHX3NyYzEtPnB1dChBUkdfY2FsbEZyYW1l
LCAqQVJHX2lkMiwgQVJHX3NyYzMsIHNsb3QpOwogICAgIFZNX0NIRUNLX0VYQ0VQVElPTl9BVF9F
TkQoKTsKIH0KIAogdm9pZCBNYWNoaW5lOjpjdGlfb3BfcHV0X2J5X2lkX2ZhaWwoQ1RJX0FSR1Mp
CiB7Ci0gICAgRXhlY1N0YXRlKiBleGVjID0gQVJHX2V4ZWM7CisgICAgQ2FsbEZyYW1lKiBjYWxs
RnJhbWUgPSBBUkdfY2FsbEZyYW1lOwogICAgIElkZW50aWZpZXImIGlkZW50ID0gKkFSR19pZDI7
CiAKICAgICBQdXRQcm9wZXJ0eVNsb3Qgc2xvdDsKLSAgICBBUkdfc3JjMS0+cHV0KGV4ZWMsIGlk
ZW50LCBBUkdfc3JjMywgc2xvdCk7CisgICAgQVJHX3NyYzEtPnB1dChjYWxsRnJhbWUsIGlkZW50
LCBBUkdfc3JjMywgc2xvdCk7CiAKICAgICAvLyBzaG91bGQgcHJvYmFibHkgdW5jYWNoZVB1dEJ5
SUQoKSAuLi4gdGhpcyB3b3VsZCBtZWFuIGRvaW5nIGEgdlBDIGxvb2t1cCAtIG1pZ2h0IGJlIHdv
cnRoIGp1c3QgYmxlZWRpbmcgdGhpcyB1bnRpbCB0aGUgZW5kLgogICAgIGN0aVJlcGF0Y2hDYWxs
QnlSZXR1cm5BZGRyZXNzKENUSV9SRVRVUk5fQUREUkVTUywgKHZvaWQqKWN0aV9vcF9wdXRfYnlf
aWRfZ2VuZXJpYyk7CkBAIC00NDIzLDEyICs0Mzc5LDEyIEBAIHZvaWQgTWFjaGluZTo6Y3RpX29w
X3B1dF9ieV9pZF9mYWlsKENUSV8KIAogSlNWYWx1ZSogTWFjaGluZTo6Y3RpX29wX2dldF9ieV9p
ZChDVElfQVJHUykKIHsKLSAgICBFeGVjU3RhdGUqIGV4ZWMgPSBBUkdfZXhlYzsKKyAgICBDYWxs
RnJhbWUqIGNhbGxGcmFtZSA9IEFSR19jYWxsRnJhbWU7CiAgICAgSWRlbnRpZmllciYgaWRlbnQg
PSAqQVJHX2lkMjsKIAogICAgIEpTVmFsdWUqIGJhc2VWYWx1ZSA9IEFSR19zcmMxOwogICAgIFBy
b3BlcnR5U2xvdCBzbG90KGJhc2VWYWx1ZSk7Ci0gICAgSlNWYWx1ZSogcmVzdWx0ID0gYmFzZVZh
bHVlLT5nZXQoZXhlYywgaWRlbnQsIHNsb3QpOworICAgIEpTVmFsdWUqIHJlc3VsdCA9IGJhc2VW
YWx1ZS0+Z2V0KGNhbGxGcmFtZSwgaWRlbnQsIHNsb3QpOwogCiAgICAgY3RpUmVwYXRjaENhbGxC
eVJldHVybkFkZHJlc3MoQ1RJX1JFVFVSTl9BRERSRVNTLCAodm9pZCopY3RpX29wX2dldF9ieV9p
ZF9zZWNvbmQpOwogCkBAIC00NDM4LDE1ICs0Mzk0LDE0IEBAIEpTVmFsdWUqIE1hY2hpbmU6OmN0
aV9vcF9nZXRfYnlfaWQoQ1RJX0EKIAogSlNWYWx1ZSogTWFjaGluZTo6Y3RpX29wX2dldF9ieV9p
ZF9zZWNvbmQoQ1RJX0FSR1MpCiB7Ci0gICAgRXhlY1N0YXRlKiBleGVjID0gQVJHX2V4ZWM7Cisg
ICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUgPSBBUkdfY2FsbEZyYW1lOwogICAgIElkZW50aWZpZXIm
IGlkZW50ID0gKkFSR19pZDI7CiAKICAgICBKU1ZhbHVlKiBiYXNlVmFsdWUgPSBBUkdfc3JjMTsK
ICAgICBQcm9wZXJ0eVNsb3Qgc2xvdChiYXNlVmFsdWUpOwotICAgIEpTVmFsdWUqIHJlc3VsdCA9
IGJhc2VWYWx1ZS0+Z2V0KGV4ZWMsIGlkZW50LCBzbG90KTsKKyAgICBKU1ZhbHVlKiByZXN1bHQg
PSBiYXNlVmFsdWUtPmdldChjYWxsRnJhbWUsIGlkZW50LCBzbG90KTsKIAotICAgIFJlZ2lzdGVy
KiByID0gQVJHX3I7Ci0gICAgQVJHX2dsb2JhbERhdGEtPm1hY2hpbmUtPnRyeUNUSUNhY2hlR2V0
QnlJRChleGVjLCBjb2RlQmxvY2sociksIENUSV9SRVRVUk5fQUREUkVTUywgYmFzZVZhbHVlLCBp
ZGVudCwgc2xvdCk7CisgICAgQVJHX2dsb2JhbERhdGEtPm1hY2hpbmUtPnRyeUNUSUNhY2hlR2V0
QnlJRChjYWxsRnJhbWUsIGNhbGxGcmFtZS0+Y29kZUJsb2NrKCksIENUSV9SRVRVUk5fQUREUkVT
UywgYmFzZVZhbHVlLCBpZGVudCwgc2xvdCk7CiAKICAgICBWTV9DSEVDS19FWENFUFRJT05fQVRf
RU5EKCk7CiAgICAgcmV0dXJuIHJlc3VsdDsKQEAgLTQ0NTQsMTIgKzQ0MDksMTIgQEAgSlNWYWx1
ZSogTWFjaGluZTo6Y3RpX29wX2dldF9ieV9pZF9zZWNvbgogCiBKU1ZhbHVlKiBNYWNoaW5lOjpj
dGlfb3BfZ2V0X2J5X2lkX2dlbmVyaWMoQ1RJX0FSR1MpCiB7Ci0gICAgRXhlY1N0YXRlKiBleGVj
ID0gQVJHX2V4ZWM7CisgICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUgPSBBUkdfY2FsbEZyYW1lOwog
ICAgIElkZW50aWZpZXImIGlkZW50ID0gKkFSR19pZDI7CiAKICAgICBKU1ZhbHVlKiBiYXNlVmFs
dWUgPSBBUkdfc3JjMTsKICAgICBQcm9wZXJ0eVNsb3Qgc2xvdChiYXNlVmFsdWUpOwotICAgIEpT
VmFsdWUqIHJlc3VsdCA9IGJhc2VWYWx1ZS0+Z2V0KGV4ZWMsIGlkZW50LCBzbG90KTsKKyAgICBK
U1ZhbHVlKiByZXN1bHQgPSBiYXNlVmFsdWUtPmdldChjYWxsRnJhbWUsIGlkZW50LCBzbG90KTsK
IAogICAgIFZNX0NIRUNLX0VYQ0VQVElPTl9BVF9FTkQoKTsKICAgICByZXR1cm4gcmVzdWx0OwpA
QCAtNDQ2NywxMiArNDQyMiwxMiBAQCBKU1ZhbHVlKiBNYWNoaW5lOjpjdGlfb3BfZ2V0X2J5X2lk
X2dlbmVyCiAKIEpTVmFsdWUqIE1hY2hpbmU6OmN0aV9vcF9nZXRfYnlfaWRfZmFpbChDVElfQVJH
UykKIHsKLSAgICBFeGVjU3RhdGUqIGV4ZWMgPSBBUkdfZXhlYzsKKyAgICBDYWxsRnJhbWUqIGNh
bGxGcmFtZSA9IEFSR19jYWxsRnJhbWU7CiAgICAgSWRlbnRpZmllciYgaWRlbnQgPSAqQVJHX2lk
MjsKIAogICAgIEpTVmFsdWUqIGJhc2VWYWx1ZSA9IEFSR19zcmMxOwogICAgIFByb3BlcnR5U2xv
dCBzbG90KGJhc2VWYWx1ZSk7Ci0gICAgSlNWYWx1ZSogcmVzdWx0ID0gYmFzZVZhbHVlLT5nZXQo
ZXhlYywgaWRlbnQsIHNsb3QpOworICAgIEpTVmFsdWUqIHJlc3VsdCA9IGJhc2VWYWx1ZS0+Z2V0
KGNhbGxGcmFtZSwgaWRlbnQsIHNsb3QpOwogCiAgICAgLy8gc2hvdWxkIHByb2JhYmx5IHVuY2Fj
aGVHZXRCeUlEKCkgLi4uIHRoaXMgd291bGQgbWVhbiBkb2luZyBhIHZQQyBsb29rdXAgLSBtaWdo
dCBiZSB3b3J0aCBqdXN0IGJsZWVkaW5nIHRoaXMgdW50aWwgdGhlIGVuZC4KICAgICBjdGlSZXBh
dGNoQ2FsbEJ5UmV0dXJuQWRkcmVzcyhDVElfUkVUVVJOX0FERFJFU1MsICh2b2lkKiljdGlfb3Bf
Z2V0X2J5X2lkX2dlbmVyaWMpOwpAQCAtNDQ4Myw3ICs0NDM4LDcgQEAgSlNWYWx1ZSogTWFjaGlu
ZTo6Y3RpX29wX2dldF9ieV9pZF9mYWlsKAogCiBKU1ZhbHVlKiBNYWNoaW5lOjpjdGlfb3BfaW5z
dGFuY2VvZihDVElfQVJHUykKIHsKLSAgICBFeGVjU3RhdGUqIGV4ZWMgPSBBUkdfZXhlYzsKKyAg
ICBDYWxsRnJhbWUqIGNhbGxGcmFtZSA9IEFSR19jYWxsRnJhbWU7CiAgICAgSlNWYWx1ZSogdmFs
dWUgPSBBUkdfc3JjMTsKICAgICBKU1ZhbHVlKiBiYXNlVmFsID0gQVJHX3NyYzI7CiAgICAgSlNW
YWx1ZSogcHJvdG8gPSBBUkdfc3JjMzsKQEAgLTQ0OTcsMTEgKzQ0NTIsMTEgQEAgSlNWYWx1ZSog
TWFjaGluZTo6Y3RpX29wX2luc3RhbmNlb2YoQ1RJXwogICAgICAgICAgICB8fCAoYmFzZUNlbGwt
PnN0cnVjdHVyZUlEKCktPnR5cGVJbmZvKCkuZmxhZ3MoKSAmIChJbXBsZW1lbnRzSGFzSW5zdGFu
Y2UgfCBPdmVycmlkZXNIYXNJbnN0YW5jZSkpICE9IEltcGxlbWVudHNIYXNJbnN0YW5jZSk7CiAK
ICAgICBpZiAoIWJhc2VWYWwtPmlzT2JqZWN0KCkpIHsKLSAgICAgICAgUmVnaXN0ZXIqIHIgPSBB
UkdfcjsKLSAgICAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBNYWNoaW5lOjpjb2RlQmxvY2so
cik7CisgICAgICAgIENhbGxGcmFtZSogY2FsbEZyYW1lID0gQVJHX2NhbGxGcmFtZTsKKyAgICAg
ICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBjYWxsRnJhbWUtPmNvZGVCbG9jaygpOwogICAgICAg
ICBBU1NFUlQoY29kZUJsb2NrLT5jdGlSZXR1cm5BZGRyZXNzVlBDTWFwLmNvbnRhaW5zKENUSV9S
RVRVUk5fQUREUkVTUykpOwogICAgICAgICB1bnNpZ25lZCB2UENJbmRleCA9IGNvZGVCbG9jay0+
Y3RpUmV0dXJuQWRkcmVzc1ZQQ01hcC5nZXQoQ1RJX1JFVFVSTl9BRERSRVNTKTsKLSAgICAgICAg
QVJHX2dsb2JhbERhdGEtPmV4Y2VwdGlvbiA9IGNyZWF0ZUludmFsaWRQYXJhbUVycm9yKGV4ZWMs
ICJpbnN0YW5jZW9mIiwgYmFzZVZhbCwgY29kZUJsb2NrLT5pbnN0cnVjdGlvbnMuYmVnaW4oKSAr
IHZQQ0luZGV4LCBjb2RlQmxvY2spOworICAgICAgICBBUkdfZ2xvYmFsRGF0YS0+ZXhjZXB0aW9u
ID0gY3JlYXRlSW52YWxpZFBhcmFtRXJyb3IoY2FsbEZyYW1lLCAiaW5zdGFuY2VvZiIsIGJhc2VW
YWwsIGNvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zLmJlZ2luKCkgKyB2UENJbmRleCwgY29kZUJsb2Nr
KTsKICAgICAgICAgVk1fVEhST1dfRVhDRVBUSU9OKCk7CiAgICAgfQogCkBAIC00NTA5LDE0ICs0
NDY0LDE0IEBAIEpTVmFsdWUqIE1hY2hpbmU6OmN0aV9vcF9pbnN0YW5jZW9mKENUSV8KICAgICAg
ICAgcmV0dXJuIGpzQm9vbGVhbihmYWxzZSk7CiAKICAgICBpZiAoIXByb3RvLT5pc09iamVjdCgp
KSB7Ci0gICAgICAgIHRocm93RXJyb3IoZXhlYywgVHlwZUVycm9yLCAiaW5zdGFuY2VvZiBjYWxs
ZWQgb24gYW4gb2JqZWN0IHdpdGggYW4gaW52YWxpZCBwcm90b3R5cGUgcHJvcGVydHkuIik7Cisg
ICAgICAgIHRocm93RXJyb3IoY2FsbEZyYW1lLCBUeXBlRXJyb3IsICJpbnN0YW5jZW9mIGNhbGxl
ZCBvbiBhbiBvYmplY3Qgd2l0aCBhbiBpbnZhbGlkIHByb3RvdHlwZSBwcm9wZXJ0eS4iKTsKICAg
ICAgICAgVk1fVEhST1dfRVhDRVBUSU9OKCk7CiAgICAgfQogICAgICAgICAKICAgICBpZiAoIXZh
bHVlLT5pc09iamVjdCgpKQogICAgICAgICByZXR1cm4ganNCb29sZWFuKGZhbHNlKTsKIAotICAg
IEpTVmFsdWUqIHJlc3VsdCA9IGpzQm9vbGVhbihzdGF0aWNfY2FzdDxKU09iamVjdCo+KGJhc2VD
ZWxsKS0+aGFzSW5zdGFuY2UoZXhlYywgdmFsdWVDZWxsLCBwcm90b0NlbGwpKTsKKyAgICBKU1Zh
bHVlKiByZXN1bHQgPSBqc0Jvb2xlYW4oc3RhdGljX2Nhc3Q8SlNPYmplY3QqPihiYXNlQ2VsbCkt
Pmhhc0luc3RhbmNlKGNhbGxGcmFtZSwgdmFsdWVDZWxsLCBwcm90b0NlbGwpKTsKICAgICBWTV9D
SEVDS19FWENFUFRJT05fQVRfRU5EKCk7CiAKICAgICByZXR1cm4gcmVzdWx0OwpAQCAtNDUyNCwx
MiArNDQ3OSwxMiBAQCBKU1ZhbHVlKiBNYWNoaW5lOjpjdGlfb3BfaW5zdGFuY2VvZihDVElfCiAK
IEpTVmFsdWUqIE1hY2hpbmU6OmN0aV9vcF9kZWxfYnlfaWQoQ1RJX0FSR1MpCiB7Ci0gICAgRXhl
Y1N0YXRlKiBleGVjID0gQVJHX2V4ZWM7CisgICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUgPSBBUkdf
Y2FsbEZyYW1lOwogICAgIElkZW50aWZpZXImIGlkZW50ID0gKkFSR19pZDI7CiAgICAgCi0gICAg
SlNPYmplY3QqIGJhc2VPYmogPSBBUkdfc3JjMS0+dG9PYmplY3QoZXhlYyk7CisgICAgSlNPYmpl
Y3QqIGJhc2VPYmogPSBBUkdfc3JjMS0+dG9PYmplY3QoY2FsbEZyYW1lKTsKIAotICAgIEpTVmFs
dWUqIHJlc3VsdCA9IGpzQm9vbGVhbihiYXNlT2JqLT5kZWxldGVQcm9wZXJ0eShleGVjLCBpZGVu
dCkpOworICAgIEpTVmFsdWUqIHJlc3VsdCA9IGpzQm9vbGVhbihiYXNlT2JqLT5kZWxldGVQcm9w
ZXJ0eShjYWxsRnJhbWUsIGlkZW50KSk7CiAgICAgVk1fQ0hFQ0tfRVhDRVBUSU9OX0FUX0VORCgp
OwogICAgIHJldHVybiByZXN1bHQ7CiB9CkBAIC00NTQ0LDE1ICs0NDk5LDE1IEBAIEpTVmFsdWUq
IE1hY2hpbmU6OmN0aV9vcF9tdWwoQ1RJX0FSR1MpCiAgICAgaWYgKGZhc3RJc051bWJlcihzcmMx
LCBsZWZ0KSAmJiBmYXN0SXNOdW1iZXIoc3JjMiwgcmlnaHQpKQogICAgICAgICByZXR1cm4ganNO
dW1iZXIoQVJHX2dsb2JhbERhdGEsIGxlZnQgKiByaWdodCk7CiAKLSAgICBFeGVjU3RhdGUqIGV4
ZWMgPSBBUkdfZXhlYzsKLSAgICBKU1ZhbHVlKiByZXN1bHQgPSBqc051bWJlcihBUkdfZ2xvYmFs
RGF0YSwgc3JjMS0+dG9OdW1iZXIoZXhlYykgKiBzcmMyLT50b051bWJlcihleGVjKSk7CisgICAg
Q2FsbEZyYW1lKiBjYWxsRnJhbWUgPSBBUkdfY2FsbEZyYW1lOworICAgIEpTVmFsdWUqIHJlc3Vs
dCA9IGpzTnVtYmVyKEFSR19nbG9iYWxEYXRhLCBzcmMxLT50b051bWJlcihjYWxsRnJhbWUpICog
c3JjMi0+dG9OdW1iZXIoY2FsbEZyYW1lKSk7CiAgICAgVk1fQ0hFQ0tfRVhDRVBUSU9OX0FUX0VO
RCgpOwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKIEpTVmFsdWUqIE1hY2hpbmU6OmN0aV9vcF9u
ZXdfZnVuYyhDVElfQVJHUykKIHsKLSAgICByZXR1cm4gQVJHX2Z1bmMxLT5tYWtlRnVuY3Rpb24o
QVJHX2V4ZWMsIE1hY2hpbmU6OnNjb3BlQ2hhaW4oQVJHX3IpKTsKKyAgICByZXR1cm4gQVJHX2Z1
bmMxLT5tYWtlRnVuY3Rpb24oQVJHX2NhbGxGcmFtZSwgQVJHX2NhbGxGcmFtZS0+c2NvcGVDaGFp
bigpKTsKIH0KIAogdm9pZCogTWFjaGluZTo6Y3RpX29wX2NhbGxfSlNGdW5jdGlvbihDVElfQVJH
UykKQEAgLTQ1NjMsNTMgKzQ1MTgsNTIgQEAgdm9pZCogTWFjaGluZTo6Y3RpX29wX2NhbGxfSlNG
dW5jdGlvbihDVAogI2VuZGlmCiAKICAgICBpZiAoVU5MSUtFTFkoKkFSR19wcm9maWxlclJlZmVy
ZW5jZSAhPSAwKSkKLSAgICAgICAgKCpBUkdfcHJvZmlsZXJSZWZlcmVuY2UpLT53aWxsRXhlY3V0
ZShDYWxsRnJhbWU6OmNyZWF0ZShBUkdfciksIHN0YXRpY19jYXN0PEpTT2JqZWN0Kj4oQVJHX3Ny
YzEpKTsKKyAgICAgICAgKCpBUkdfcHJvZmlsZXJSZWZlcmVuY2UpLT53aWxsRXhlY3V0ZShBUkdf
Y2FsbEZyYW1lLCBzdGF0aWNfY2FzdDxKU0Z1bmN0aW9uKj4oQVJHX3NyYzEpKTsKIAogICAgIFNj
b3BlQ2hhaW5Ob2RlKiBjYWxsRGF0YVNjb3BlQ2hhaW4gPSBzdGF0aWNfY2FzdDxKU0Z1bmN0aW9u
Kj4oQVJHX3NyYzEpLT5tX3Njb3BlQ2hhaW4ubm9kZSgpOwogICAgIENvZGVCbG9jayogbmV3Q29k
ZUJsb2NrID0gJnN0YXRpY19jYXN0PEpTRnVuY3Rpb24qPihBUkdfc3JjMSktPm1fYm9keS0+Ynl0
ZUNvZGUoY2FsbERhdGFTY29wZUNoYWluKTsKIAotICAgIFJlZ2lzdGVyKiByID0gc2xpZGVSZWdp
c3RlcldpbmRvd0ZvckNhbGwobmV3Q29kZUJsb2NrLCBBUkdfcmVnaXN0ZXJGaWxlLCBBUkdfciwg
QVJHX2ludDIsIEFSR19pbnQzKTsKLSAgICBpZiAoVU5MSUtFTFkoIXIpKSB7Ci0gICAgICAgIEFS
R19nbG9iYWxEYXRhLT5leGNlcHRpb24gPSBjcmVhdGVTdGFja092ZXJmbG93RXJyb3IoQ2FsbEZy
YW1lOjpjcmVhdGUoQVJHX3IpKTsKKyAgICBDYWxsRnJhbWUqIGNhbGxGcmFtZSA9IHNsaWRlUmVn
aXN0ZXJXaW5kb3dGb3JDYWxsKG5ld0NvZGVCbG9jaywgQVJHX3JlZ2lzdGVyRmlsZSwgQVJHX2Nh
bGxGcmFtZSwgQVJHX2ludDIsIEFSR19pbnQzKTsKKyAgICBpZiAoVU5MSUtFTFkoIWNhbGxGcmFt
ZSkpIHsKKyAgICAgICAgQVJHX2dsb2JhbERhdGEtPmV4Y2VwdGlvbiA9IGNyZWF0ZVN0YWNrT3Zl
cmZsb3dFcnJvcihBUkdfY2FsbEZyYW1lKTsKICAgICAgICAgVk1fVEhST1dfRVhDRVBUSU9OKCk7
CiAgICAgfQogCi0gICAgcltSZWdpc3RlckZpbGU6OkNvZGVCbG9ja10gPSBuZXdDb2RlQmxvY2s7
Ci0gICAgcltSZWdpc3RlckZpbGU6OlNjb3BlQ2hhaW5dID0gY2FsbERhdGFTY29wZUNoYWluOwot
ICAgIHJbUmVnaXN0ZXJGaWxlOjpDYWxsZXJSZWdpc3RlcnNdID0gQVJHX3I7CisgICAgY2FsbEZy
YW1lLT5zZXRDb2RlQmxvY2sobmV3Q29kZUJsb2NrKTsKKyAgICBjYWxsRnJhbWUtPnNldFNjb3Bl
Q2hhaW4oY2FsbERhdGFTY29wZUNoYWluKTsKKyAgICBjYWxsRnJhbWUtPnNldENhbGxlckZyYW1l
KEFSR19jYWxsRnJhbWUpOwogICAgIC8vIFJlZ2lzdGVyRmlsZTo6UmV0dXJuUEMgaXMgc2V0IGJ5
IGNhbGxlZQogICAgIC8vIFJlZ2lzdGVyRmlsZTo6UmV0dXJuVmFsdWVSZWdpc3RlciBpcyBzZXQg
YnkgY2FsbGVyCi0gICAgcltSZWdpc3RlckZpbGU6OkFyZ3VtZW50Q291bnRdID0gQVJHX2ludDM7
IC8vIG9yaWdpbmFsIGFyZ3VtZW50IGNvdW50IChmb3IgdGhlIHNha2Ugb2YgdGhlICJhcmd1bWVu
dHMiIG9iamVjdCkKLSAgICByW1JlZ2lzdGVyRmlsZTo6Q2FsbGVlXSA9IEFSR19zcmMxOwotICAg
IHJbUmVnaXN0ZXJGaWxlOjpPcHRpb25hbENhbGxlZUFjdGl2YXRpb25dID0gbnVsbEpTVmFsdWU7
Ci0gICAgcltSZWdpc3RlckZpbGU6Ok9wdGlvbmFsQ2FsbGVlQXJndW1lbnRzXSA9IG51bGxKU1Zh
bHVlOworICAgIGNhbGxGcmFtZS0+c2V0QXJndW1lbnRDb3VudChBUkdfaW50Myk7IC8vIG9yaWdp
bmFsIGFyZ3VtZW50IGNvdW50IChmb3IgdGhlIHNha2Ugb2YgdGhlICJhcmd1bWVudHMiIG9iamVj
dCkKKyAgICBjYWxsRnJhbWUtPnNldENhbGxlZShzdGF0aWNfY2FzdDxKU0Z1bmN0aW9uKj4oQVJH
X3NyYzEpKTsKKyAgICBjYWxsRnJhbWUtPnNldENhbGxlZUFjdGl2YXRpb24oMCk7CisgICAgY2Fs
bEZyYW1lLT5zZXRDYWxsZWVBcmd1bWVudHMoMCk7CiAKLSAgICBBUkdfc2V0UihyKTsKKyAgICBB
Ukdfc2V0Q2FsbEZyYW1lKGNhbGxGcmFtZSk7CiAKICAgICByZXR1cm4gbmV3Q29kZUJsb2NrLT5j
dGlDb2RlOwogfQogCiB2b2lkKiBNYWNoaW5lOjpjdGlfdm1fY29tcGlsZShDVElfQVJHUykKIHsK
LSAgICBSZWdpc3RlciogciA9IEFSR19yOwotICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gTWFj
aGluZTo6Y29kZUJsb2NrKHIpOworICAgIENhbGxGcmFtZSogY2FsbEZyYW1lID0gQVJHX2NhbGxG
cmFtZTsKKyAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IGNhbGxGcmFtZS0+Y29kZUJsb2NrKCk7
CiAKICAgICBpZiAoIWNvZGVCbG9jay0+Y3RpQ29kZSkKLSAgICAgICAgQ1RJOjpjb21waWxlKEFS
R19nbG9iYWxEYXRhLT5tYWNoaW5lLCBDYWxsRnJhbWU6OmNyZWF0ZShyKSwgY29kZUJsb2NrKTsK
KyAgICAgICAgQ1RJOjpjb21waWxlKEFSR19nbG9iYWxEYXRhLT5tYWNoaW5lLCBjYWxsRnJhbWUs
IGNvZGVCbG9jayk7CiAKICAgICByZXR1cm4gY29kZUJsb2NrLT5jdGlDb2RlOwogfQogCiB2b2lk
IE1hY2hpbmU6OmN0aV9vcF9wdXNoX2FjdGl2YXRpb24oQ1RJX0FSR1MpCiB7Ci0gICAgRXhlY1N0
YXRlKiBleGVjID0gQVJHX2V4ZWM7Ci0gICAgUmVnaXN0ZXIqIHIgPSBBUkdfcjsKLSAgICBDb2Rl
QmxvY2sqIGNvZGVCbG9jayA9IE1hY2hpbmU6OmNvZGVCbG9jayhyKTsKLSAgICBTY29wZUNoYWlu
Tm9kZSogc2NvcGVDaGFpbiA9IE1hY2hpbmU6OnNjb3BlQ2hhaW4ocik7Ci0KLSAgICBKU0FjdGl2
YXRpb24qIGFjdGl2YXRpb24gPSBuZXcgKEFSR19nbG9iYWxEYXRhKSBKU0FjdGl2YXRpb24oZXhl
Yywgc3RhdGljX2Nhc3Q8RnVuY3Rpb25Cb2R5Tm9kZSo+KGNvZGVCbG9jay0+b3duZXJOb2RlKSwg
cik7Ci0gICAgcltSZWdpc3RlckZpbGU6Ok9wdGlvbmFsQ2FsbGVlQWN0aXZhdGlvbl0gPSBhY3Rp
dmF0aW9uOwotICAgIHJbUmVnaXN0ZXJGaWxlOjpTY29wZUNoYWluXSA9IHNjb3BlQ2hhaW4tPmNv
cHkoKS0+cHVzaChhY3RpdmF0aW9uKTsKKyAgICBDYWxsRnJhbWUqIGNhbGxGcmFtZSA9IEFSR19j
YWxsRnJhbWU7CisgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBjYWxsRnJhbWUtPmNvZGVCbG9j
aygpOworICAgIFNjb3BlQ2hhaW5Ob2RlKiBzY29wZUNoYWluID0gY2FsbEZyYW1lLT5zY29wZUNo
YWluKCk7CisKKyAgICBKU0FjdGl2YXRpb24qIGFjdGl2YXRpb24gPSBuZXcgKEFSR19nbG9iYWxE
YXRhKSBKU0FjdGl2YXRpb24oY2FsbEZyYW1lLCBzdGF0aWNfY2FzdDxGdW5jdGlvbkJvZHlOb2Rl
Kj4oY29kZUJsb2NrLT5vd25lck5vZGUpKTsKKyAgICBjYWxsRnJhbWUtPnNldENhbGxlZUFjdGl2
YXRpb24oYWN0aXZhdGlvbik7CisgICAgY2FsbEZyYW1lLT5zZXRTY29wZUNoYWluKHNjb3BlQ2hh
aW4tPmNvcHkoKS0+cHVzaChhY3RpdmF0aW9uKSk7CiB9CiAKIEpTVmFsdWUqIE1hY2hpbmU6OmN0
aV9vcF9jYWxsX05vdEpTRnVuY3Rpb24oQ1RJX0FSR1MpCkBAIC00NjI0LDk3ICs0NTc4LDc4IEBA
IEpTVmFsdWUqIE1hY2hpbmU6OmN0aV9vcF9jYWxsX05vdEpTRnVuY3QKICAgICBpZiAoY2FsbFR5
cGUgPT0gQ2FsbFR5cGVIb3N0KSB7CiAgICAgICAgIGludCByZWdpc3Rlck9mZnNldCA9IEFSR19p
bnQyOwogICAgICAgICBpbnQgYXJnQ291bnQgPSBBUkdfaW50MzsKLSAgICAgICAgUmVnaXN0ZXIq
IHNhdmVkUiA9IEFSR19yOwotICAgICAgICBSZWdpc3RlciogciA9IHNhdmVkUiArIHJlZ2lzdGVy
T2Zmc2V0OworICAgICAgICBDYWxsRnJhbWUqIHByZXZpb3VzQ2FsbEZyYW1lID0gQVJHX2NhbGxG
cmFtZTsKKyAgICAgICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUgPSBDYWxsRnJhbWU6OmNyZWF0ZShw
cmV2aW91c0NhbGxGcmFtZS0+cmVnaXN0ZXJzKCkgKyByZWdpc3Rlck9mZnNldCk7CiAKLSAgICAg
ICAgaW5pdGlhbGl6ZUNhbGxGcmFtZShyLCAwLCBBUkdfaW5zdHI0ICsgMSwgc2NvcGVDaGFpbihz
YXZlZFIpLCBzYXZlZFIsIDAsIGFyZ0NvdW50LCBmdW5jVmFsKTsKLSAgICAgICAgQVJHX3NldFIo
cik7CisgICAgICAgIGNhbGxGcmFtZS0+aW5pdCgwLCBBUkdfaW5zdHI0ICsgMSwgcHJldmlvdXND
YWxsRnJhbWUtPnNjb3BlQ2hhaW4oKSwgcHJldmlvdXNDYWxsRnJhbWUsIDAsIGFyZ0NvdW50LCBz
dGF0aWNfY2FzdDxKU0Z1bmN0aW9uKj4oZnVuY1ZhbCkpOworICAgICAgICBBUkdfc2V0Q2FsbEZy
YW1lKGNhbGxGcmFtZSk7CiAKICAgICAgICAgaWYgKCpBUkdfcHJvZmlsZXJSZWZlcmVuY2UpCi0g
ICAgICAgICAgICAoKkFSR19wcm9maWxlclJlZmVyZW5jZSktPndpbGxFeGVjdXRlKENhbGxGcmFt
ZTo6Y3JlYXRlKHIpLCBzdGF0aWNfY2FzdDxKU09iamVjdCo+KGZ1bmNWYWwpKTsKKyAgICAgICAg
ICAgICgqQVJHX3Byb2ZpbGVyUmVmZXJlbmNlKS0+d2lsbEV4ZWN1dGUoY2FsbEZyYW1lLCBzdGF0
aWNfY2FzdDxKU0Z1bmN0aW9uKj4oZnVuY1ZhbCkpOwogCi0gICAgICAgIFJlZ2lzdGVyKiBhcmd2
ID0gciAtIFJlZ2lzdGVyRmlsZTo6Q2FsbEZyYW1lSGVhZGVyU2l6ZSAtIGFyZ0NvdW50OworICAg
ICAgICBSZWdpc3RlciogYXJndiA9IEFSR19jYWxsRnJhbWUtPnJlZ2lzdGVycygpIC0gUmVnaXN0
ZXJGaWxlOjpDYWxsRnJhbWVIZWFkZXJTaXplIC0gYXJnQ291bnQ7CiAgICAgICAgIEFyZ0xpc3Qg
YXJnTGlzdChhcmd2ICsgMSwgYXJnQ291bnQgLSAxKTsKIAogICAgICAgICBDVElfTUFDSElORV9T
QU1QTElOR19jYWxsaW5nSG9zdEZ1bmN0aW9uKCk7CiAKLSAgICAgICAgSlNWYWx1ZSogcmV0dXJu
VmFsdWUgPSBjYWxsRGF0YS5uYXRpdmUuZnVuY3Rpb24oQ2FsbEZyYW1lOjpjcmVhdGUociksIHN0
YXRpY19jYXN0PEpTT2JqZWN0Kj4oZnVuY1ZhbCksIGFyZ3ZbMF0uanNWYWx1ZShDYWxsRnJhbWU6
OmNyZWF0ZShyKSksIGFyZ0xpc3QpOwotICAgICAgICBBUkdfc2V0UihzYXZlZFIpOworICAgICAg
ICBKU1ZhbHVlKiByZXR1cm5WYWx1ZSA9IGNhbGxEYXRhLm5hdGl2ZS5mdW5jdGlvbihjYWxsRnJh
bWUsIHN0YXRpY19jYXN0PEpTRnVuY3Rpb24qPihmdW5jVmFsKSwgYXJndlswXS5qc1ZhbHVlKGNh
bGxGcmFtZSksIGFyZ0xpc3QpOworICAgICAgICBBUkdfc2V0Q2FsbEZyYW1lKHByZXZpb3VzQ2Fs
bEZyYW1lKTsKICAgICAgICAgVk1fQ0hFQ0tfRVhDRVBUSU9OKCk7CiAKICAgICAgICAgaWYgKCpB
UkdfcHJvZmlsZXJSZWZlcmVuY2UpCi0gICAgICAgICAgICAoKkFSR19wcm9maWxlclJlZmVyZW5j
ZSktPmRpZEV4ZWN1dGUoQ2FsbEZyYW1lOjpjcmVhdGUoc2F2ZWRSKSwgc3RhdGljX2Nhc3Q8SlNP
YmplY3QqPihmdW5jVmFsKSk7CisgICAgICAgICAgICAoKkFSR19wcm9maWxlclJlZmVyZW5jZSkt
PmRpZEV4ZWN1dGUocHJldmlvdXNDYWxsRnJhbWUsIHN0YXRpY19jYXN0PEpTRnVuY3Rpb24qPihm
dW5jVmFsKSk7CiAKICAgICAgICAgcmV0dXJuIHJldHVyblZhbHVlOwogICAgIH0KIAogICAgIEFT
U0VSVChjYWxsVHlwZSA9PSBDYWxsVHlwZU5vbmUpOwogCi0gICAgQVJHX2dsb2JhbERhdGEtPmV4
Y2VwdGlvbiA9IGNyZWF0ZU5vdEFGdW5jdGlvbkVycm9yKENhbGxGcmFtZTo6Y3JlYXRlKEFSR19y
KSwgZnVuY1ZhbCwgQVJHX2luc3RyNCwgY29kZUJsb2NrKEFSR19yKSk7CisgICAgQVJHX2dsb2Jh
bERhdGEtPmV4Y2VwdGlvbiA9IGNyZWF0ZU5vdEFGdW5jdGlvbkVycm9yKEFSR19jYWxsRnJhbWUs
IGZ1bmNWYWwsIEFSR19pbnN0cjQsIEFSR19jYWxsRnJhbWUtPmNvZGVCbG9jaygpKTsKICAgICBW
TV9USFJPV19FWENFUFRJT04oKTsKIH0KIAogdm9pZCBNYWNoaW5lOjpjdGlfb3BfY3JlYXRlX2Fy
Z3VtZW50cyhDVElfQVJHUykKIHsKLSAgICBFeGVjU3RhdGUqIGV4ZWMgPSBBUkdfZXhlYzsKLSAg
ICBSZWdpc3RlciogciA9IEFSR19yOwotCi0gICAgQXJndW1lbnRzKiBhcmd1bWVudHMgPSBuZXcg
KEFSR19nbG9iYWxEYXRhKSBBcmd1bWVudHMoZXhlYywgcik7Ci0gICAgcltSZWdpc3RlckZpbGU6
Ok9wdGlvbmFsQ2FsbGVlQXJndW1lbnRzXSA9IGFyZ3VtZW50czsKLSAgICByW1JlZ2lzdGVyRmls
ZTo6QXJndW1lbnRzUmVnaXN0ZXJdID0gYXJndW1lbnRzOworICAgIEFyZ3VtZW50cyogYXJndW1l
bnRzID0gbmV3IChBUkdfZ2xvYmFsRGF0YSkgQXJndW1lbnRzKEFSR19jYWxsRnJhbWUpOworICAg
IEFSR19jYWxsRnJhbWUtPnNldENhbGxlZUFyZ3VtZW50cyhhcmd1bWVudHMpOworICAgIEFSR19j
YWxsRnJhbWVbUmVnaXN0ZXJGaWxlOjpBcmd1bWVudHNSZWdpc3Rlcl0gPSBhcmd1bWVudHM7CiB9
CiAKIHZvaWQgTWFjaGluZTo6Y3RpX29wX3RlYXJfb2ZmX2FjdGl2YXRpb24oQ1RJX0FSR1MpCiB7
Ci0gICAgUmVnaXN0ZXIqIHIgPSBBUkdfcjsKKyAgICBBU1NFUlQoQVJHX2NhbGxGcmFtZS0+Y29k
ZUJsb2NrKCktPm5lZWRzRnVsbFNjb3BlQ2hhaW4pOwogCi0gICAgSlNBY3RpdmF0aW9uKiBhY3Rp
dmF0aW9uID0gc3RhdGljX2Nhc3Q8SlNBY3RpdmF0aW9uKj4ocltSZWdpc3RlckZpbGU6Ok9wdGlv
bmFsQ2FsbGVlQWN0aXZhdGlvbl0uZ2V0SlNWYWx1ZSgpKTsKLSAgICBBU1NFUlQoY29kZUJsb2Nr
KHIpLT5uZWVkc0Z1bGxTY29wZUNoYWluKTsKLSAgICBBU1NFUlQoYWN0aXZhdGlvbi0+aXNPYmpl
Y3QoJkpTQWN0aXZhdGlvbjo6aW5mbykpOwotCi0gICAgQXJndW1lbnRzKiBhcmd1bWVudHMgPSBz
dGF0aWNfY2FzdDxBcmd1bWVudHMqPihyW1JlZ2lzdGVyRmlsZTo6T3B0aW9uYWxDYWxsZWVBcmd1
bWVudHNdLmdldEpTVmFsdWUoKSk7Ci0gICAgQVNTRVJUKCFhcmd1bWVudHMgfHwgYXJndW1lbnRz
LT5pc09iamVjdCgmQXJndW1lbnRzOjppbmZvKSk7Ci0gICAgYWN0aXZhdGlvbi0+Y29weVJlZ2lz
dGVycyhhcmd1bWVudHMpOworICAgIEFSR19jYWxsRnJhbWUtPm9wdGlvbmFsQ2FsbGVlQWN0aXZh
dGlvbigpLT5jb3B5UmVnaXN0ZXJzKEFSR19jYWxsRnJhbWUtPm9wdGlvbmFsQ2FsbGVlQXJndW1l
bnRzKCkpOwogfQogCiB2b2lkIE1hY2hpbmU6OmN0aV9vcF90ZWFyX29mZl9hcmd1bWVudHMoQ1RJ
X0FSR1MpCiB7Ci0gICAgUmVnaXN0ZXIqIHIgPSBBUkdfcjsKLQotICAgIEFyZ3VtZW50cyogYXJn
dW1lbnRzID0gc3RhdGljX2Nhc3Q8QXJndW1lbnRzKj4ocltSZWdpc3RlckZpbGU6Ok9wdGlvbmFs
Q2FsbGVlQXJndW1lbnRzXS5nZXRKU1ZhbHVlKCkpOwotICAgIEFTU0VSVChjb2RlQmxvY2socikt
PnVzZXNBcmd1bWVudHMgJiYgIWNvZGVCbG9jayhyKS0+bmVlZHNGdWxsU2NvcGVDaGFpbik7Ci0g
ICAgQVNTRVJUKGFyZ3VtZW50cy0+aXNPYmplY3QoJkFyZ3VtZW50czo6aW5mbykpOwotCi0gICAg
YXJndW1lbnRzLT5jb3B5UmVnaXN0ZXJzKCk7CisgICAgQVNTRVJUKEFSR19jYWxsRnJhbWUtPmNv
ZGVCbG9jaygpLT51c2VzQXJndW1lbnRzICYmICFBUkdfY2FsbEZyYW1lLT5jb2RlQmxvY2soKS0+
bmVlZHNGdWxsU2NvcGVDaGFpbik7CisgICAgQVJHX2NhbGxGcmFtZS0+b3B0aW9uYWxDYWxsZWVB
cmd1bWVudHMoKS0+Y29weVJlZ2lzdGVycygpOwogfQogCiB2b2lkIE1hY2hpbmU6OmN0aV9vcF9y
ZXRfcHJvZmlsZXIoQ1RJX0FSR1MpCiB7Ci0gICAgRXhlY1N0YXRlKiBleGVjID0gQVJHX2V4ZWM7
Ci0KLSAgICBSZWdpc3RlciogciA9IEFSR19yOwogICAgIEFTU0VSVCgqQVJHX3Byb2ZpbGVyUmVm
ZXJlbmNlKTsKLSAgICAoKkFSR19wcm9maWxlclJlZmVyZW5jZSktPmRpZEV4ZWN1dGUoZXhlYywg
c3RhdGljX2Nhc3Q8SlNPYmplY3QqPihyW1JlZ2lzdGVyRmlsZTo6Q2FsbGVlXS5qc1ZhbHVlKGV4
ZWMpKSk7CisgICAgKCpBUkdfcHJvZmlsZXJSZWZlcmVuY2UpLT5kaWRFeGVjdXRlKEFSR19jYWxs
RnJhbWUsIEFSR19jYWxsRnJhbWUtPmNhbGxlZSgpKTsKIH0KIAogdm9pZCBNYWNoaW5lOjpjdGlf
b3BfcmV0X3Njb3BlQ2hhaW4oQ1RJX0FSR1MpCiB7Ci0gICAgUmVnaXN0ZXIqIHIgPSBBUkdfcjsK
LSAgICBBU1NFUlQoY29kZUJsb2NrKHIpLT5uZWVkc0Z1bGxTY29wZUNoYWluKTsKLSAgICBzY29w
ZUNoYWluKHIpLT5kZXJlZigpOworICAgIEFTU0VSVChBUkdfY2FsbEZyYW1lLT5jb2RlQmxvY2so
KS0+bmVlZHNGdWxsU2NvcGVDaGFpbik7CisgICAgQVJHX2NhbGxGcmFtZS0+c2NvcGVDaGFpbigp
LT5kZXJlZigpOwogfQogCiBKU1ZhbHVlKiBNYWNoaW5lOjpjdGlfb3BfbmV3X2FycmF5KENUSV9B
UkdTKQogewotICAgIEFyZ0xpc3QgYXJnc0xpc3QoQVJHX3JlZ2lzdGVyczEsIEFSR19pbnQyKTsK
LSAgICByZXR1cm4gY29uc3RydWN0QXJyYXkoQVJHX2V4ZWMsIGFyZ3NMaXN0KTsKKyAgICBBcmdM
aXN0IGFyZ0xpc3QoQVJHX3JlZ2lzdGVyczEsIEFSR19pbnQyKTsKKyAgICByZXR1cm4gY29uc3Ry
dWN0QXJyYXkoQVJHX2NhbGxGcmFtZSwgYXJnTGlzdCk7CiB9CiAKIEpTVmFsdWUqIE1hY2hpbmU6
OmN0aV9vcF9yZXNvbHZlKENUSV9BUkdTKQogewotICAgIEV4ZWNTdGF0ZSogZXhlYyA9IEFSR19l
eGVjOwotICAgIFJlZ2lzdGVyKiByID0gQVJHX3I7Ci0gICAgU2NvcGVDaGFpbk5vZGUqIHNjb3Bl
Q2hhaW4gPSBNYWNoaW5lOjpzY29wZUNoYWluKHIpOworICAgIENhbGxGcmFtZSogY2FsbEZyYW1l
ID0gQVJHX2NhbGxGcmFtZTsKKyAgICBTY29wZUNoYWluTm9kZSogc2NvcGVDaGFpbiA9IGNhbGxG
cmFtZS0+c2NvcGVDaGFpbigpOwogCiAgICAgU2NvcGVDaGFpbkl0ZXJhdG9yIGl0ZXIgPSBzY29w
ZUNoYWluLT5iZWdpbigpOwogICAgIFNjb3BlQ2hhaW5JdGVyYXRvciBlbmQgPSBzY29wZUNoYWlu
LT5lbmQoKTsKQEAgLTQ3MjQsMjQgKzQ2NTksMjQgQEAgSlNWYWx1ZSogTWFjaGluZTo6Y3RpX29w
X3Jlc29sdmUoQ1RJX0FSRwogICAgIGRvIHsKICAgICAgICAgSlNPYmplY3QqIG8gPSAqaXRlcjsK
ICAgICAgICAgUHJvcGVydHlTbG90IHNsb3Qobyk7Ci0gICAgICAgIGlmIChvLT5nZXRQcm9wZXJ0
eVNsb3QoZXhlYywgaWRlbnQsIHNsb3QpKSB7Ci0gICAgICAgICAgICBKU1ZhbHVlKiByZXN1bHQg
PSBzbG90LmdldFZhbHVlKGV4ZWMsIGlkZW50KTsKKyAgICAgICAgaWYgKG8tPmdldFByb3BlcnR5
U2xvdChjYWxsRnJhbWUsIGlkZW50LCBzbG90KSkgeworICAgICAgICAgICAgSlNWYWx1ZSogcmVz
dWx0ID0gc2xvdC5nZXRWYWx1ZShjYWxsRnJhbWUsIGlkZW50KTsKICAgICAgICAgICAgIFZNX0NI
RUNLX0VYQ0VQVElPTl9BVF9FTkQoKTsKICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAg
ICAgIH0KICAgICB9IHdoaWxlICgrK2l0ZXIgIT0gZW5kKTsKIAotICAgIENvZGVCbG9jayogY29k
ZUJsb2NrID0gTWFjaGluZTo6Y29kZUJsb2NrKHIpOworICAgIENvZGVCbG9jayogY29kZUJsb2Nr
ID0gY2FsbEZyYW1lLT5jb2RlQmxvY2soKTsKICAgICBBU1NFUlQoY29kZUJsb2NrLT5jdGlSZXR1
cm5BZGRyZXNzVlBDTWFwLmNvbnRhaW5zKENUSV9SRVRVUk5fQUREUkVTUykpOwogICAgIHVuc2ln
bmVkIHZQQ0luZGV4ID0gY29kZUJsb2NrLT5jdGlSZXR1cm5BZGRyZXNzVlBDTWFwLmdldChDVElf
UkVUVVJOX0FERFJFU1MpOwotICAgIGV4ZWMtPnNldEV4Y2VwdGlvbihjcmVhdGVVbmRlZmluZWRW
YXJpYWJsZUVycm9yKGV4ZWMsIGlkZW50LCBjb2RlQmxvY2stPmluc3RydWN0aW9ucy5iZWdpbigp
ICsgdlBDSW5kZXgsIGNvZGVCbG9jaykpOworICAgIEFSR19nbG9iYWxEYXRhLT5leGNlcHRpb24g
PSBjcmVhdGVVbmRlZmluZWRWYXJpYWJsZUVycm9yKGNhbGxGcmFtZSwgaWRlbnQsIGNvZGVCbG9j
ay0+aW5zdHJ1Y3Rpb25zLmJlZ2luKCkgKyB2UENJbmRleCwgY29kZUJsb2NrKTsKICAgICBWTV9U
SFJPV19FWENFUFRJT04oKTsKIH0KIAogdm9pZCogTWFjaGluZTo6Y3RpX29wX2NvbnN0cnVjdF9K
U0NvbnN0cnVjdChDVElfQVJHUykKIHsKICAgICBSZWdpc3RlckZpbGUqIHJlZ2lzdGVyRmlsZSA9
IEFSR19yZWdpc3RlckZpbGU7Ci0gICAgUmVnaXN0ZXIqIHIgPSBBUkdfcjsKKyAgICBDYWxsRnJh
bWUqIGNhbGxGcmFtZSA9IEFSR19jYWxsRnJhbWU7CiAKICAgICBKU1ZhbHVlKiBjb25zdHJWYWwg
PSBBUkdfc3JjMTsKICAgICBKU1ZhbHVlKiBjb25zdHJQcm90b1ZhbCA9IEFSR19zcmMyOwpAQCAt
NDc1Nyw3ICs0NjkyLDcgQEAgdm9pZCogTWFjaGluZTo6Y3RpX29wX2NvbnN0cnVjdF9KU0NvbnN0
cgogICAgIEpTRnVuY3Rpb24qIGNvbnN0cnVjdG9yID0gc3RhdGljX2Nhc3Q8SlNGdW5jdGlvbio+
KGNvbnN0clZhbCk7CiAKICAgICBpZiAoKkFSR19wcm9maWxlclJlZmVyZW5jZSkKLSAgICAgICAg
KCpBUkdfcHJvZmlsZXJSZWZlcmVuY2UpLT53aWxsRXhlY3V0ZShDYWxsRnJhbWU6OmNyZWF0ZShy
KSwgY29uc3RydWN0b3IpOworICAgICAgICAoKkFSR19wcm9maWxlclJlZmVyZW5jZSktPndpbGxF
eGVjdXRlKGNhbGxGcmFtZSwgY29uc3RydWN0b3IpOwogCiAgICAgU2NvcGVDaGFpbk5vZGUqIGNh
bGxEYXRhU2NvcGVDaGFpbiA9IGNvbnN0cnVjdG9yLT5tX3Njb3BlQ2hhaW4ubm9kZSgpOwogICAg
IEZ1bmN0aW9uQm9keU5vZGUqIGZ1bmN0aW9uQm9keU5vZGUgPSBjb25zdHJ1Y3Rvci0+bV9ib2R5
LmdldCgpOwpAQCAtNDc3MCwzMiArNDcwNSwzMSBAQCB2b2lkKiBNYWNoaW5lOjpjdGlfb3BfY29u
c3RydWN0X0pTQ29uc3RyCiAgICAgICAgIHN0cnVjdHVyZSA9IGNhbGxEYXRhU2NvcGVDaGFpbi0+
Z2xvYmFsT2JqZWN0KCktPmVtcHR5T2JqZWN0U3RydWN0dXJlKCk7CiAgICAgSlNPYmplY3QqIG5l
d09iamVjdCA9IG5ldyAoQVJHX2dsb2JhbERhdGEpIEpTT2JqZWN0KHN0cnVjdHVyZSk7CiAKLSAg
ICByW2ZpcnN0QXJnXSA9IG5ld09iamVjdDsgLy8gInRoaXMiIHZhbHVlCisgICAgY2FsbEZyYW1l
W2ZpcnN0QXJnXSA9IG5ld09iamVjdDsgLy8gInRoaXMiIHZhbHVlCiAKLSAgICByID0gc2xpZGVS
ZWdpc3RlcldpbmRvd0ZvckNhbGwobmV3Q29kZUJsb2NrLCByZWdpc3RlckZpbGUsIHIsIHJlZ2lz
dGVyT2Zmc2V0LCBhcmdDb3VudCk7Ci0gICAgaWYgKFVOTElLRUxZKCFyKSkgewotICAgICAgICBB
UkdfZ2xvYmFsRGF0YS0+ZXhjZXB0aW9uID0gY3JlYXRlU3RhY2tPdmVyZmxvd0Vycm9yKENhbGxG
cmFtZTo6Y3JlYXRlKEFSR19yKSk7CisgICAgY2FsbEZyYW1lID0gc2xpZGVSZWdpc3RlcldpbmRv
d0ZvckNhbGwobmV3Q29kZUJsb2NrLCByZWdpc3RlckZpbGUsIGNhbGxGcmFtZSwgcmVnaXN0ZXJP
ZmZzZXQsIGFyZ0NvdW50KTsKKyAgICBpZiAoVU5MSUtFTFkoIWNhbGxGcmFtZSkpIHsKKyAgICAg
ICAgQVJHX2dsb2JhbERhdGEtPmV4Y2VwdGlvbiA9IGNyZWF0ZVN0YWNrT3ZlcmZsb3dFcnJvcihB
UkdfY2FsbEZyYW1lKTsKICAgICAgICAgVk1fVEhST1dfRVhDRVBUSU9OKCk7CiAgICAgfQogCi0g
ICAgcltSZWdpc3RlckZpbGU6OkNvZGVCbG9ja10gPSBuZXdDb2RlQmxvY2s7Ci0gICAgcltSZWdp
c3RlckZpbGU6OlNjb3BlQ2hhaW5dID0gY2FsbERhdGFTY29wZUNoYWluOwotICAgIHJbUmVnaXN0
ZXJGaWxlOjpDYWxsZXJSZWdpc3RlcnNdID0gQVJHX3I7CisgICAgY2FsbEZyYW1lLT5zZXRDb2Rl
QmxvY2sobmV3Q29kZUJsb2NrKTsKKyAgICBjYWxsRnJhbWUtPnNldFNjb3BlQ2hhaW4oY2FsbERh
dGFTY29wZUNoYWluKTsKKyAgICBjYWxsRnJhbWUtPnNldENhbGxlckZyYW1lKEFSR19jYWxsRnJh
bWUpOwogICAgIC8vIFJlZ2lzdGVyRmlsZTo6UmV0dXJuUEMgaXMgc2V0IGJ5IGNhbGxlZQogICAg
IC8vIFJlZ2lzdGVyRmlsZTo6UmV0dXJuVmFsdWVSZWdpc3RlciBpcyBzZXQgYnkgY2FsbGVyCi0g
ICAgcltSZWdpc3RlckZpbGU6OkFyZ3VtZW50Q291bnRdID0gYXJnQ291bnQ7IC8vIG9yaWdpbmFs
IGFyZ3VtZW50IGNvdW50IChmb3IgdGhlIHNha2Ugb2YgdGhlICJhcmd1bWVudHMiIG9iamVjdCkK
LSAgICByW1JlZ2lzdGVyRmlsZTo6Q2FsbGVlXSA9IGNvbnN0cnVjdG9yOwotICAgIHJbUmVnaXN0
ZXJGaWxlOjpPcHRpb25hbENhbGxlZUFjdGl2YXRpb25dID0gbnVsbEpTVmFsdWU7Ci0gICAgcltS
ZWdpc3RlckZpbGU6Ok9wdGlvbmFsQ2FsbGVlQXJndW1lbnRzXSA9IG51bGxKU1ZhbHVlOworICAg
IGNhbGxGcmFtZS0+c2V0QXJndW1lbnRDb3VudChhcmdDb3VudCk7IC8vIG9yaWdpbmFsIGFyZ3Vt
ZW50IGNvdW50IChmb3IgdGhlIHNha2Ugb2YgdGhlICJhcmd1bWVudHMiIG9iamVjdCkKKyAgICBj
YWxsRnJhbWUtPnNldENhbGxlZShjb25zdHJ1Y3Rvcik7CisgICAgY2FsbEZyYW1lLT5zZXRDYWxs
ZWVBY3RpdmF0aW9uKDApOworICAgIGNhbGxGcmFtZS0+c2V0Q2FsbGVlQXJndW1lbnRzKDApOwog
Ci0gICAgQVJHX3NldFIocik7CisgICAgQVJHX3NldENhbGxGcmFtZShjYWxsRnJhbWUpOwogICAg
IHJldHVybiBuZXdDb2RlQmxvY2stPmN0aUNvZGU7CiB9CiAKIEpTVmFsdWUqIE1hY2hpbmU6OmN0
aV9vcF9jb25zdHJ1Y3RfTm90SlNDb25zdHJ1Y3QoQ1RJX0FSR1MpCiB7Ci0gICAgRXhlY1N0YXRl
KiBleGVjID0gQVJHX2V4ZWM7Ci0gICAgUmVnaXN0ZXIqIHIgPSBBUkdfcjsKKyAgICBDYWxsRnJh
bWUqIGNhbGxGcmFtZSA9IEFSR19jYWxsRnJhbWU7CiAKICAgICBKU1ZhbHVlKiBjb25zdHJWYWwg
PSBBUkdfc3JjMTsKICAgICBpbnQgZmlyc3RBcmcgPSBBUkdfaW50MzsKQEAgLTQ4MDgsMzAgKzQ3
NDIsMzAgQEAgSlNWYWx1ZSogTWFjaGluZTo6Y3RpX29wX2NvbnN0cnVjdF9Ob3RKUwogCiAgICAg
aWYgKGNvbnN0cnVjdFR5cGUgPT0gQ29uc3RydWN0VHlwZUhvc3QpIHsKICAgICAgICAgaWYgKCpB
UkdfcHJvZmlsZXJSZWZlcmVuY2UpCi0gICAgICAgICAgICAoKkFSR19wcm9maWxlclJlZmVyZW5j
ZSktPndpbGxFeGVjdXRlKGV4ZWMsIGNvbnN0cnVjdG9yKTsKKyAgICAgICAgICAgICgqQVJHX3By
b2ZpbGVyUmVmZXJlbmNlKS0+d2lsbEV4ZWN1dGUoY2FsbEZyYW1lLCBjb25zdHJ1Y3Rvcik7CiAK
LSAgICAgICAgQXJnTGlzdCBhcmdMaXN0KHIgKyBmaXJzdEFyZyArIDEsIGFyZ0NvdW50IC0gMSk7
CisgICAgICAgIEFyZ0xpc3QgYXJnTGlzdChjYWxsRnJhbWUtPnJlZ2lzdGVycygpICsgZmlyc3RB
cmcgKyAxLCBhcmdDb3VudCAtIDEpOwogCiAgICAgICAgIENUSV9NQUNISU5FX1NBTVBMSU5HX2Nh
bGxpbmdIb3N0RnVuY3Rpb24oKTsKIAotICAgICAgICBKU1ZhbHVlKiByZXR1cm5WYWx1ZSA9IGNv
bnN0cnVjdERhdGEubmF0aXZlLmZ1bmN0aW9uKGV4ZWMsIGNvbnN0cnVjdG9yLCBhcmdMaXN0KTsK
KyAgICAgICAgSlNWYWx1ZSogcmV0dXJuVmFsdWUgPSBjb25zdHJ1Y3REYXRhLm5hdGl2ZS5mdW5j
dGlvbihjYWxsRnJhbWUsIGNvbnN0cnVjdG9yLCBhcmdMaXN0KTsKICAgICAgICAgVk1fQ0hFQ0tf
RVhDRVBUSU9OKCk7CiAKICAgICAgICAgaWYgKCpBUkdfcHJvZmlsZXJSZWZlcmVuY2UpCi0gICAg
ICAgICAgICAoKkFSR19wcm9maWxlclJlZmVyZW5jZSktPmRpZEV4ZWN1dGUoZXhlYywgY29uc3Ry
dWN0b3IpOworICAgICAgICAgICAgKCpBUkdfcHJvZmlsZXJSZWZlcmVuY2UpLT5kaWRFeGVjdXRl
KGNhbGxGcmFtZSwgY29uc3RydWN0b3IpOwogCiAgICAgICAgIHJldHVybiByZXR1cm5WYWx1ZTsK
ICAgICB9CiAKICAgICBBU1NFUlQoY29uc3RydWN0VHlwZSA9PSBDb25zdHJ1Y3RUeXBlTm9uZSk7
CiAKLSAgICBleGVjLT5zZXRFeGNlcHRpb24oY3JlYXRlTm90QUNvbnN0cnVjdG9yRXJyb3IoZXhl
YywgY29uc3RyVmFsLCBBUkdfaW5zdHI2LCBjb2RlQmxvY2socikpKTsKKyAgICBBUkdfZ2xvYmFs
RGF0YS0+ZXhjZXB0aW9uID0gY3JlYXRlTm90QUNvbnN0cnVjdG9yRXJyb3IoY2FsbEZyYW1lLCBj
b25zdHJWYWwsIEFSR19pbnN0cjYsIGNhbGxGcmFtZS0+Y29kZUJsb2NrKCkpOwogICAgIFZNX1RI
Uk9XX0VYQ0VQVElPTigpOwogfQogCiBKU1ZhbHVlKiBNYWNoaW5lOjpjdGlfb3BfZ2V0X2J5X3Zh
bChDVElfQVJHUykKIHsKLSAgICBFeGVjU3RhdGUqIGV4ZWMgPSBBUkdfZXhlYzsKKyAgICBDYWxs
RnJhbWUqIGNhbGxGcmFtZSA9IEFSR19jYWxsRnJhbWU7CiAgICAgTWFjaGluZSogbWFjaGluZSA9
IEFSR19nbG9iYWxEYXRhLT5tYWNoaW5lOwogCiAgICAgSlNWYWx1ZSogYmFzZVZhbHVlID0gQVJH
X3NyYzE7CkBAIC00ODQ3LDE0ICs0NzgxLDE0IEBAIEpTVmFsdWUqIE1hY2hpbmU6OmN0aV9vcF9n
ZXRfYnlfdmFsKENUSV8KICAgICAgICAgICAgIGlmIChqc0FycmF5LT5jYW5HZXRJbmRleChpKSkK
ICAgICAgICAgICAgICAgICByZXN1bHQgPSBqc0FycmF5LT5nZXRJbmRleChpKTsKICAgICAgICAg
ICAgIGVsc2UKLSAgICAgICAgICAgICAgICByZXN1bHQgPSBqc0FycmF5LT5KU0FycmF5OjpnZXQo
ZXhlYywgaSk7CisgICAgICAgICAgICAgICAgcmVzdWx0ID0ganNBcnJheS0+SlNBcnJheTo6Z2V0
KGNhbGxGcmFtZSwgaSk7CiAgICAgICAgIH0gZWxzZSBpZiAobWFjaGluZS0+aXNKU1N0cmluZyhi
YXNlVmFsdWUpICYmIHN0YXRpY19jYXN0PEpTU3RyaW5nKj4oYmFzZVZhbHVlKS0+Y2FuR2V0SW5k
ZXgoaSkpCiAgICAgICAgICAgICByZXN1bHQgPSBzdGF0aWNfY2FzdDxKU1N0cmluZyo+KGJhc2VW
YWx1ZSktPmdldEluZGV4KEFSR19nbG9iYWxEYXRhLCBpKTsKICAgICAgICAgZWxzZQotICAgICAg
ICAgICAgcmVzdWx0ID0gYmFzZVZhbHVlLT5nZXQoZXhlYywgaSk7CisgICAgICAgICAgICByZXN1
bHQgPSBiYXNlVmFsdWUtPmdldChjYWxsRnJhbWUsIGkpOwogICAgIH0gZWxzZSB7Ci0gICAgICAg
IElkZW50aWZpZXIgcHJvcGVydHkoZXhlYywgc3Vic2NyaXB0LT50b1N0cmluZyhleGVjKSk7Ci0g
ICAgICAgIHJlc3VsdCA9IGJhc2VWYWx1ZS0+Z2V0KGV4ZWMsIHByb3BlcnR5KTsKKyAgICAgICAg
SWRlbnRpZmllciBwcm9wZXJ0eShjYWxsRnJhbWUsIHN1YnNjcmlwdC0+dG9TdHJpbmcoY2FsbEZy
YW1lKSk7CisgICAgICAgIHJlc3VsdCA9IGJhc2VWYWx1ZS0+Z2V0KGNhbGxGcmFtZSwgcHJvcGVy
dHkpOwogICAgIH0KIAogICAgIFZNX0NIRUNLX0VYQ0VQVElPTl9BVF9FTkQoKTsKQEAgLTQ4NjMs
OSArNDc5Nyw4IEBAIEpTVmFsdWUqIE1hY2hpbmU6OmN0aV9vcF9nZXRfYnlfdmFsKENUSV8KIAog
SlNWYWx1ZSogTWFjaGluZTo6Y3RpX29wX3Jlc29sdmVfZnVuYyhDVElfQVJHUykKIHsKLSAgICBF
eGVjU3RhdGUqIGV4ZWMgPSBBUkdfZXhlYzsKLSAgICBSZWdpc3RlciogciA9IEFSR19yOwotICAg
IFNjb3BlQ2hhaW5Ob2RlKiBzY29wZUNoYWluID0gTWFjaGluZTo6c2NvcGVDaGFpbihyKTsKKyAg
ICBDYWxsRnJhbWUqIGNhbGxGcmFtZSA9IEFSR19jYWxsRnJhbWU7CisgICAgU2NvcGVDaGFpbk5v
ZGUqIHNjb3BlQ2hhaW4gPSBjYWxsRnJhbWUtPnNjb3BlQ2hhaW4oKTsKIAogICAgIFNjb3BlQ2hh
aW5JdGVyYXRvciBpdGVyID0gc2NvcGVDaGFpbi0+YmVnaW4oKTsKICAgICBTY29wZUNoYWluSXRl
cmF0b3IgZW5kID0gc2NvcGVDaGFpbi0+ZW5kKCk7CkBAIC00ODc5LDcgKzQ4MTIsNyBAQCBKU1Zh
bHVlKiBNYWNoaW5lOjpjdGlfb3BfcmVzb2x2ZV9mdW5jKENUCiAgICAgZG8gewogICAgICAgICBi
YXNlID0gKml0ZXI7CiAgICAgICAgIFByb3BlcnR5U2xvdCBzbG90KGJhc2UpOwotICAgICAgICBp
ZiAoYmFzZS0+Z2V0UHJvcGVydHlTbG90KGV4ZWMsIGlkZW50LCBzbG90KSkgeyAgICAgICAgICAg
IAorICAgICAgICBpZiAoYmFzZS0+Z2V0UHJvcGVydHlTbG90KGNhbGxGcmFtZSwgaWRlbnQsIHNs
b3QpKSB7ICAgICAgICAgICAgCiAgICAgICAgICAgICAvLyBFQ01BIDExLjIuMyBzYXlzIHRoYXQg
aWYgd2UgaGl0IGFuIGFjdGl2YXRpb24gdGhlIHRoaXMgdmFsdWUgc2hvdWxkIGJlIG51bGwuCiAg
ICAgICAgICAgICAvLyBIb3dldmVyLCBzZWN0aW9uIDEwLjIuMyBzYXlzIHRoYXQgaW4gdGhlIGNh
c2Ugd2hlcmUgdGhlIHZhbHVlIHByb3ZpZGVkCiAgICAgICAgICAgICAvLyBieSB0aGUgY2FsbGVy
IGlzIG51bGwsIHRoZSBnbG9iYWwgb2JqZWN0IHNob3VsZCBiZSB1c2VkLiBJdCBhbHNvIHNheXMK
QEAgLTQ4ODcsOCArNDgyMCw4IEBAIEpTVmFsdWUqIE1hY2hpbmU6OmN0aV9vcF9yZXNvbHZlX2Z1
bmMoQ1QKICAgICAgICAgICAgIC8vIG9mIGltcGxlbWVudGF0aW9uIHdlIHVzZSB0aGUgZ2xvYmFs
IG9iamVjdCBhbnl3YXkgaGVyZS4gVGhpcyBndWFyYW50ZWVzCiAgICAgICAgICAgICAvLyB0aGF0
IGluIGhvc3Qgb2JqZWN0cyB5b3UgYWx3YXlzIGdldCBhIHZhbGlkIG9iamVjdCBmb3IgdGhpcy4K
ICAgICAgICAgICAgIC8vIFdlIGFsc28gaGFuZGxlIHdyYXBwZXIgc3Vic3RpdHV0aW9uIGZvciB0
aGUgZ2xvYmFsIG9iamVjdCBhdCB0aGUgc2FtZSB0aW1lLgotICAgICAgICAgICAgSlNPYmplY3Qq
IHRoaXNPYmogPSBiYXNlLT50b1RoaXNPYmplY3QoZXhlYyk7Ci0gICAgICAgICAgICBKU1ZhbHVl
KiByZXN1bHQgPSBzbG90LmdldFZhbHVlKGV4ZWMsIGlkZW50KTsKKyAgICAgICAgICAgIEpTT2Jq
ZWN0KiB0aGlzT2JqID0gYmFzZS0+dG9UaGlzT2JqZWN0KGNhbGxGcmFtZSk7CisgICAgICAgICAg
ICBKU1ZhbHVlKiByZXN1bHQgPSBzbG90LmdldFZhbHVlKGNhbGxGcmFtZSwgaWRlbnQpOwogICAg
ICAgICAgICAgVk1fQ0hFQ0tfRVhDRVBUSU9OX0FUX0VORCgpOwogCiAgICAgICAgICAgICBBUkdf
c2V0Mm5kUmVzdWx0KHJlc3VsdCk7CkBAIC00ODk3LDEwICs0ODMwLDEwIEBAIEpTVmFsdWUqIE1h
Y2hpbmU6OmN0aV9vcF9yZXNvbHZlX2Z1bmMoQ1QKICAgICAgICAgKytpdGVyOwogICAgIH0gd2hp
bGUgKGl0ZXIgIT0gZW5kKTsKIAotICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gTWFjaGluZTo6
Y29kZUJsb2NrKHIpOworICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gY2FsbEZyYW1lLT5jb2Rl
QmxvY2soKTsKICAgICBBU1NFUlQoY29kZUJsb2NrLT5jdGlSZXR1cm5BZGRyZXNzVlBDTWFwLmNv
bnRhaW5zKENUSV9SRVRVUk5fQUREUkVTUykpOwogICAgIHVuc2lnbmVkIHZQQ0luZGV4ID0gY29k
ZUJsb2NrLT5jdGlSZXR1cm5BZGRyZXNzVlBDTWFwLmdldChDVElfUkVUVVJOX0FERFJFU1MpOwot
ICAgIGV4ZWMtPnNldEV4Y2VwdGlvbihjcmVhdGVVbmRlZmluZWRWYXJpYWJsZUVycm9yKGV4ZWMs
IGlkZW50LCBjb2RlQmxvY2stPmluc3RydWN0aW9ucy5iZWdpbigpICsgdlBDSW5kZXgsIGNvZGVC
bG9jaykpOworICAgIEFSR19nbG9iYWxEYXRhLT5leGNlcHRpb24gPSBjcmVhdGVVbmRlZmluZWRW
YXJpYWJsZUVycm9yKGNhbGxGcmFtZSwgaWRlbnQsIGNvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zLmJl
Z2luKCkgKyB2UENJbmRleCwgY29kZUJsb2NrKTsKICAgICBWTV9USFJPV19FWENFUFRJT04oKTsK
IH0KIApAQCAtNDkxNCwxNSArNDg0NywxNSBAQCBKU1ZhbHVlKiBNYWNoaW5lOjpjdGlfb3Bfc3Vi
KENUSV9BUkdTKQogICAgIGlmIChmYXN0SXNOdW1iZXIoc3JjMSwgbGVmdCkgJiYgZmFzdElzTnVt
YmVyKHNyYzIsIHJpZ2h0KSkKICAgICAgICAgcmV0dXJuIGpzTnVtYmVyKEFSR19nbG9iYWxEYXRh
LCBsZWZ0IC0gcmlnaHQpOwogCi0gICAgRXhlY1N0YXRlKiBleGVjID0gQVJHX2V4ZWM7Ci0gICAg
SlNWYWx1ZSogcmVzdWx0ID0ganNOdW1iZXIoQVJHX2dsb2JhbERhdGEsIHNyYzEtPnRvTnVtYmVy
KGV4ZWMpIC0gc3JjMi0+dG9OdW1iZXIoZXhlYykpOworICAgIENhbGxGcmFtZSogY2FsbEZyYW1l
ID0gQVJHX2NhbGxGcmFtZTsKKyAgICBKU1ZhbHVlKiByZXN1bHQgPSBqc051bWJlcihBUkdfZ2xv
YmFsRGF0YSwgc3JjMS0+dG9OdW1iZXIoY2FsbEZyYW1lKSAtIHNyYzItPnRvTnVtYmVyKGNhbGxG
cmFtZSkpOwogICAgIFZNX0NIRUNLX0VYQ0VQVElPTl9BVF9FTkQoKTsKICAgICByZXR1cm4gcmVz
dWx0OwogfQogCiB2b2lkIE1hY2hpbmU6OmN0aV9vcF9wdXRfYnlfdmFsKENUSV9BUkdTKQogewot
ICAgIEV4ZWNTdGF0ZSogZXhlYyA9IEFSR19leGVjOworICAgIENhbGxGcmFtZSogY2FsbEZyYW1l
ID0gQVJHX2NhbGxGcmFtZTsKICAgICBNYWNoaW5lKiBtYWNoaW5lID0gQVJHX2dsb2JhbERhdGEt
Pm1hY2hpbmU7CiAKICAgICBKU1ZhbHVlKiBiYXNlVmFsdWUgPSBBUkdfc3JjMTsKQEAgLTQ5Mzgs
MTQgKzQ4NzEsMTQgQEAgdm9pZCBNYWNoaW5lOjpjdGlfb3BfcHV0X2J5X3ZhbChDVElfQVJHUwog
ICAgICAgICAgICAgaWYgKGpzQXJyYXktPmNhblNldEluZGV4KGkpKQogICAgICAgICAgICAgICAg
IGpzQXJyYXktPnNldEluZGV4KGksIHZhbHVlKTsKICAgICAgICAgICAgIGVsc2UKLSAgICAgICAg
ICAgICAgICBqc0FycmF5LT5KU0FycmF5OjpwdXQoZXhlYywgaSwgdmFsdWUpOworICAgICAgICAg
ICAgICAgIGpzQXJyYXktPkpTQXJyYXk6OnB1dChjYWxsRnJhbWUsIGksIHZhbHVlKTsKICAgICAg
ICAgfSBlbHNlCi0gICAgICAgICAgICBiYXNlVmFsdWUtPnB1dChleGVjLCBpLCB2YWx1ZSk7Cisg
ICAgICAgICAgICBiYXNlVmFsdWUtPnB1dChjYWxsRnJhbWUsIGksIHZhbHVlKTsKICAgICB9IGVs
c2UgewotICAgICAgICBJZGVudGlmaWVyIHByb3BlcnR5KGV4ZWMsIHN1YnNjcmlwdC0+dG9TdHJp
bmcoZXhlYykpOworICAgICAgICBJZGVudGlmaWVyIHByb3BlcnR5KGNhbGxGcmFtZSwgc3Vic2Ny
aXB0LT50b1N0cmluZyhjYWxsRnJhbWUpKTsKICAgICAgICAgaWYgKCFBUkdfZ2xvYmFsRGF0YS0+
ZXhjZXB0aW9uKSB7IC8vIERvbid0IHB1dCB0byBhbiBvYmplY3QgaWYgdG9TdHJpbmcgdGhyZXcg
YW4gZXhjZXB0aW9uLgogICAgICAgICAgICAgUHV0UHJvcGVydHlTbG90IHNsb3Q7Ci0gICAgICAg
ICAgICBiYXNlVmFsdWUtPnB1dChleGVjLCBwcm9wZXJ0eSwgdmFsdWUsIHNsb3QpOworICAgICAg
ICAgICAgYmFzZVZhbHVlLT5wdXQoY2FsbEZyYW1lLCBwcm9wZXJ0eSwgdmFsdWUsIHNsb3QpOwog
ICAgICAgICB9CiAgICAgfQogCkBAIC00OTU0LDcgKzQ4ODcsNyBAQCB2b2lkIE1hY2hpbmU6OmN0
aV9vcF9wdXRfYnlfdmFsKENUSV9BUkdTCiAKIHZvaWQgTWFjaGluZTo6Y3RpX29wX3B1dF9ieV92
YWxfYXJyYXkoQ1RJX0FSR1MpCiB7Ci0gICAgRXhlY1N0YXRlKiBleGVjID0gQVJHX2V4ZWM7Cisg
ICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUgPSBBUkdfY2FsbEZyYW1lOwogCiAgICAgSlNWYWx1ZSog
YmFzZVZhbHVlID0gQVJHX3NyYzE7CiAgICAgaW50IGkgPSBBUkdfaW50MjsKQEAgLTQ5NjMsMTMg
KzQ4OTYsMTMgQEAgdm9pZCBNYWNoaW5lOjpjdGlfb3BfcHV0X2J5X3ZhbF9hcnJheShDVAogICAg
IEFTU0VSVChBUkdfZ2xvYmFsRGF0YS0+bWFjaGluZS0+aXNKU0FycmF5KGJhc2VWYWx1ZSkpOwog
CiAgICAgaWYgKExJS0VMWShpID49IDApKQotICAgICAgICBzdGF0aWNfY2FzdDxKU0FycmF5Kj4o
YmFzZVZhbHVlKS0+SlNBcnJheTo6cHV0KGV4ZWMsIGksIHZhbHVlKTsKKyAgICAgICAgc3RhdGlj
X2Nhc3Q8SlNBcnJheSo+KGJhc2VWYWx1ZSktPkpTQXJyYXk6OnB1dChjYWxsRnJhbWUsIGksIHZh
bHVlKTsKICAgICBlbHNlIHsKLSAgICAgICAgSWRlbnRpZmllciBwcm9wZXJ0eShleGVjLCBKU0lt
bWVkaWF0ZTo6ZnJvbShpKS0+dG9TdHJpbmcoZXhlYykpOworICAgICAgICBJZGVudGlmaWVyIHBy
b3BlcnR5KGNhbGxGcmFtZSwgSlNJbW1lZGlhdGU6OmZyb20oaSktPnRvU3RyaW5nKGNhbGxGcmFt
ZSkpOwogICAgICAgICAvLyBGSVhNRTogY2FuIHRvU3RyaW5nIHRocm93IGFuIGV4Y2VwdGlvbiBo
ZXJlPwogICAgICAgICBpZiAoIUFSR19nbG9iYWxEYXRhLT5leGNlcHRpb24pIHsgLy8gRG9uJ3Qg
cHV0IHRvIGFuIG9iamVjdCBpZiB0b1N0cmluZyB0aHJldyBhbiBleGNlcHRpb24uCiAgICAgICAg
ICAgICBQdXRQcm9wZXJ0eVNsb3Qgc2xvdDsKLSAgICAgICAgICAgIGJhc2VWYWx1ZS0+cHV0KGV4
ZWMsIHByb3BlcnR5LCB2YWx1ZSwgc2xvdCk7CisgICAgICAgICAgICBiYXNlVmFsdWUtPnB1dChj
YWxsRnJhbWUsIHByb3BlcnR5LCB2YWx1ZSwgc2xvdCk7CiAgICAgICAgIH0KICAgICB9CiAKQEAg
LTQ5NzgsOCArNDkxMSw4IEBAIHZvaWQgTWFjaGluZTo6Y3RpX29wX3B1dF9ieV92YWxfYXJyYXko
Q1QKIAogSlNWYWx1ZSogTWFjaGluZTo6Y3RpX29wX2xlc3NlcShDVElfQVJHUykKIHsKLSAgICBF
eGVjU3RhdGUqIGV4ZWMgPSBBUkdfZXhlYzsKLSAgICBKU1ZhbHVlKiByZXN1bHQgPSBqc0Jvb2xl
YW4oanNMZXNzRXEoZXhlYywgQVJHX3NyYzEsIEFSR19zcmMyKSk7CisgICAgQ2FsbEZyYW1lKiBj
YWxsRnJhbWUgPSBBUkdfY2FsbEZyYW1lOworICAgIEpTVmFsdWUqIHJlc3VsdCA9IGpzQm9vbGVh
bihqc0xlc3NFcShjYWxsRnJhbWUsIEFSR19zcmMxLCBBUkdfc3JjMikpOwogICAgIFZNX0NIRUNL
X0VYQ0VQVElPTl9BVF9FTkQoKTsKICAgICByZXR1cm4gcmVzdWx0OwogfQpAQCAtNDk4OCw5ICs0
OTIxLDkgQEAgaW50IE1hY2hpbmU6OmN0aV9vcF9sb29wX2lmX3RydWUoQ1RJX0FSRwogewogICAg
IEpTVmFsdWUqIHNyYzEgPSBBUkdfc3JjMTsKIAotICAgIEV4ZWNTdGF0ZSogZXhlYyA9IEFSR19l
eGVjOworICAgIENhbGxGcmFtZSogY2FsbEZyYW1lID0gQVJHX2NhbGxGcmFtZTsKIAotICAgIGJv
b2wgcmVzdWx0ID0gc3JjMS0+dG9Cb29sZWFuKGV4ZWMpOworICAgIGJvb2wgcmVzdWx0ID0gc3Jj
MS0+dG9Cb29sZWFuKGNhbGxGcmFtZSk7CiAgICAgVk1fQ0hFQ0tfRVhDRVBUSU9OX0FUX0VORCgp
OwogICAgIHJldHVybiByZXN1bHQ7CiB9CkBAIC01MDAzLDIyICs0OTM2LDIxIEBAIEpTVmFsdWUq
IE1hY2hpbmU6OmN0aV9vcF9uZWdhdGUoQ1RJX0FSR1MKICAgICBpZiAoZmFzdElzTnVtYmVyKHNy
YywgdikpCiAgICAgICAgIHJldHVybiBqc051bWJlcihBUkdfZ2xvYmFsRGF0YSwgLXYpOwogCi0g
ICAgRXhlY1N0YXRlKiBleGVjID0gQVJHX2V4ZWM7Ci0gICAgSlNWYWx1ZSogcmVzdWx0ID0ganNO
dW1iZXIoQVJHX2dsb2JhbERhdGEsIC1zcmMtPnRvTnVtYmVyKGV4ZWMpKTsKKyAgICBDYWxsRnJh
bWUqIGNhbGxGcmFtZSA9IEFSR19jYWxsRnJhbWU7CisgICAgSlNWYWx1ZSogcmVzdWx0ID0ganNO
dW1iZXIoQVJHX2dsb2JhbERhdGEsIC1zcmMtPnRvTnVtYmVyKGNhbGxGcmFtZSkpOwogICAgIFZN
X0NIRUNLX0VYQ0VQVElPTl9BVF9FTkQoKTsKICAgICByZXR1cm4gcmVzdWx0OwogfQogCiBKU1Zh
bHVlKiBNYWNoaW5lOjpjdGlfb3BfcmVzb2x2ZV9iYXNlKENUSV9BUkdTKQogewotICAgIHJldHVy
biBpbmxpbmVSZXNvbHZlQmFzZShBUkdfZXhlYywgKkFSR19pZDEsIHNjb3BlQ2hhaW4oQVJHX3Ip
KTsKKyAgICByZXR1cm4gaW5saW5lUmVzb2x2ZUJhc2UoQVJHX2NhbGxGcmFtZSwgKkFSR19pZDEs
IEFSR19jYWxsRnJhbWUtPnNjb3BlQ2hhaW4oKSk7CiB9CiAKIEpTVmFsdWUqIE1hY2hpbmU6OmN0
aV9vcF9yZXNvbHZlX3NraXAoQ1RJX0FSR1MpCiB7Ci0gICAgRXhlY1N0YXRlKiBleGVjID0gQVJH
X2V4ZWM7Ci0gICAgUmVnaXN0ZXIqIHIgPSBBUkdfcjsKLSAgICBTY29wZUNoYWluTm9kZSogc2Nv
cGVDaGFpbiA9IE1hY2hpbmU6OnNjb3BlQ2hhaW4ocik7CisgICAgQ2FsbEZyYW1lKiBjYWxsRnJh
bWUgPSBBUkdfY2FsbEZyYW1lOworICAgIFNjb3BlQ2hhaW5Ob2RlKiBzY29wZUNoYWluID0gY2Fs
bEZyYW1lLT5zY29wZUNoYWluKCk7CiAKICAgICBpbnQgc2tpcCA9IEFSR19pbnQyOwogCkBAIC01
MDMzLDMxICs0OTY1LDMxIEBAIEpTVmFsdWUqIE1hY2hpbmU6OmN0aV9vcF9yZXNvbHZlX3NraXAo
Q1QKICAgICBkbyB7CiAgICAgICAgIEpTT2JqZWN0KiBvID0gKml0ZXI7CiAgICAgICAgIFByb3Bl
cnR5U2xvdCBzbG90KG8pOwotICAgICAgICBpZiAoby0+Z2V0UHJvcGVydHlTbG90KGV4ZWMsIGlk
ZW50LCBzbG90KSkgewotICAgICAgICAgICAgSlNWYWx1ZSogcmVzdWx0ID0gc2xvdC5nZXRWYWx1
ZShleGVjLCBpZGVudCk7CisgICAgICAgIGlmIChvLT5nZXRQcm9wZXJ0eVNsb3QoY2FsbEZyYW1l
LCBpZGVudCwgc2xvdCkpIHsKKyAgICAgICAgICAgIEpTVmFsdWUqIHJlc3VsdCA9IHNsb3QuZ2V0
VmFsdWUoY2FsbEZyYW1lLCBpZGVudCk7CiAgICAgICAgICAgICBWTV9DSEVDS19FWENFUFRJT05f
QVRfRU5EKCk7CiAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgICAgICB9CiAgICAgfSB3
aGlsZSAoKytpdGVyICE9IGVuZCk7CiAKLSAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IE1hY2hp
bmU6OmNvZGVCbG9jayhyKTsKKyAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IGNhbGxGcmFtZS0+
Y29kZUJsb2NrKCk7CiAgICAgQVNTRVJUKGNvZGVCbG9jay0+Y3RpUmV0dXJuQWRkcmVzc1ZQQ01h
cC5jb250YWlucyhDVElfUkVUVVJOX0FERFJFU1MpKTsKICAgICB1bnNpZ25lZCB2UENJbmRleCA9
IGNvZGVCbG9jay0+Y3RpUmV0dXJuQWRkcmVzc1ZQQ01hcC5nZXQoQ1RJX1JFVFVSTl9BRERSRVNT
KTsKLSAgICBleGVjLT5zZXRFeGNlcHRpb24oY3JlYXRlVW5kZWZpbmVkVmFyaWFibGVFcnJvcihl
eGVjLCBpZGVudCwgY29kZUJsb2NrLT5pbnN0cnVjdGlvbnMuYmVnaW4oKSArIHZQQ0luZGV4LCBj
b2RlQmxvY2spKTsKKyAgICBBUkdfZ2xvYmFsRGF0YS0+ZXhjZXB0aW9uID0gY3JlYXRlVW5kZWZp
bmVkVmFyaWFibGVFcnJvcihjYWxsRnJhbWUsIGlkZW50LCBjb2RlQmxvY2stPmluc3RydWN0aW9u
cy5iZWdpbigpICsgdlBDSW5kZXgsIGNvZGVCbG9jayk7CiAgICAgVk1fVEhST1dfRVhDRVBUSU9O
KCk7CiB9CiAKIEpTVmFsdWUqIE1hY2hpbmU6OmN0aV9vcF9yZXNvbHZlX2dsb2JhbChDVElfQVJH
UykKIHsKLSAgICBFeGVjU3RhdGUqIGV4ZWMgPSBBUkdfZXhlYzsKKyAgICBDYWxsRnJhbWUqIGNh
bGxGcmFtZSA9IEFSR19jYWxsRnJhbWU7CiAgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dCA9IHN0YXRpY19jYXN0PEpTR2xvYmFsT2JqZWN0Kj4oQVJHX3NyYzEpOwogICAgIElkZW50aWZp
ZXImIGlkZW50ID0gKkFSR19pZDI7CiAgICAgSW5zdHJ1Y3Rpb24qIHZQQyA9IEFSR19pbnN0cjM7
CiAgICAgQVNTRVJUKGdsb2JhbE9iamVjdC0+aXNHbG9iYWxPYmplY3QoKSk7CiAKICAgICBQcm9w
ZXJ0eVNsb3Qgc2xvdChnbG9iYWxPYmplY3QpOwotICAgIGlmIChnbG9iYWxPYmplY3QtPmdldFBy
b3BlcnR5U2xvdChleGVjLCBpZGVudCwgc2xvdCkpIHsKLSAgICAgICAgSlNWYWx1ZSogcmVzdWx0
ID0gc2xvdC5nZXRWYWx1ZShleGVjLCBpZGVudCk7CisgICAgaWYgKGdsb2JhbE9iamVjdC0+Z2V0
UHJvcGVydHlTbG90KGNhbGxGcmFtZSwgaWRlbnQsIHNsb3QpKSB7CisgICAgICAgIEpTVmFsdWUq
IHJlc3VsdCA9IHNsb3QuZ2V0VmFsdWUoY2FsbEZyYW1lLCBpZGVudCk7CiAgICAgICAgIGlmIChz
bG90LmlzQ2FjaGVhYmxlKCkpIHsKICAgICAgICAgICAgIGlmICh2UENbNF0udS5zdHJ1Y3R1cmVJ
RCkKICAgICAgICAgICAgICAgICB2UENbNF0udS5zdHJ1Y3R1cmVJRC0+ZGVyZWYoKTsKQEAgLTUw
NzEsOCArNTAwMyw3IEBAIEpTVmFsdWUqIE1hY2hpbmU6OmN0aV9vcF9yZXNvbHZlX2dsb2JhbCgK
ICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CiAgICAgCi0gICAgUmVnaXN0ZXIqIHIgPSBB
UkdfcjsKLSAgICBleGVjLT5zZXRFeGNlcHRpb24oY3JlYXRlVW5kZWZpbmVkVmFyaWFibGVFcnJv
cihleGVjLCBpZGVudCwgdlBDLCBjb2RlQmxvY2socikpKTsgICAgCisgICAgQVJHX2dsb2JhbERh
dGEtPmV4Y2VwdGlvbiA9IGNyZWF0ZVVuZGVmaW5lZFZhcmlhYmxlRXJyb3IoY2FsbEZyYW1lLCBp
ZGVudCwgdlBDLCBjYWxsRnJhbWUtPmNvZGVCbG9jaygpKTsKICAgICBWTV9USFJPV19FWENFUFRJ
T04oKTsKIH0KIApAQCAtNTA4Niw4ICs1MDE3LDggQEAgSlNWYWx1ZSogTWFjaGluZTo6Y3RpX29w
X2RpdihDVElfQVJHUykKICAgICBpZiAoZmFzdElzTnVtYmVyKHNyYzEsIGxlZnQpICYmIGZhc3RJ
c051bWJlcihzcmMyLCByaWdodCkpCiAgICAgICAgIHJldHVybiBqc051bWJlcihBUkdfZ2xvYmFs
RGF0YSwgbGVmdCAvIHJpZ2h0KTsKIAotICAgIEV4ZWNTdGF0ZSogZXhlYyA9IEFSR19leGVjOwot
ICAgIEpTVmFsdWUqIHJlc3VsdCA9IGpzTnVtYmVyKEFSR19nbG9iYWxEYXRhLCBzcmMxLT50b051
bWJlcihleGVjKSAvIHNyYzItPnRvTnVtYmVyKGV4ZWMpKTsKKyAgICBDYWxsRnJhbWUqIGNhbGxG
cmFtZSA9IEFSR19jYWxsRnJhbWU7CisgICAgSlNWYWx1ZSogcmVzdWx0ID0ganNOdW1iZXIoQVJH
X2dsb2JhbERhdGEsIHNyYzEtPnRvTnVtYmVyKGNhbGxGcmFtZSkgLyBzcmMyLT50b051bWJlcihj
YWxsRnJhbWUpKTsKICAgICBWTV9DSEVDS19FWENFUFRJT05fQVRfRU5EKCk7CiAgICAgcmV0dXJu
IHJlc3VsdDsKIH0KQEAgLTUwOTYsOCArNTAyNyw4IEBAIEpTVmFsdWUqIE1hY2hpbmU6OmN0aV9v
cF9wcmVfZGVjKENUSV9BUkcKIHsKICAgICBKU1ZhbHVlKiB2ID0gQVJHX3NyYzE7CiAKLSAgICBF
eGVjU3RhdGUqIGV4ZWMgPSBBUkdfZXhlYzsKLSAgICBKU1ZhbHVlKiByZXN1bHQgPSBqc051bWJl
cihBUkdfZ2xvYmFsRGF0YSwgdi0+dG9OdW1iZXIoZXhlYykgLSAxKTsKKyAgICBDYWxsRnJhbWUq
IGNhbGxGcmFtZSA9IEFSR19jYWxsRnJhbWU7CisgICAgSlNWYWx1ZSogcmVzdWx0ID0ganNOdW1i
ZXIoQVJHX2dsb2JhbERhdGEsIHYtPnRvTnVtYmVyKGNhbGxGcmFtZSkgLSAxKTsKICAgICBWTV9D
SEVDS19FWENFUFRJT05fQVRfRU5EKCk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KQEAgLTUxMDYs
OSArNTAzNyw5IEBAIGludCBNYWNoaW5lOjpjdGlfb3Bfamxlc3MoQ1RJX0FSR1MpCiB7CiAgICAg
SlNWYWx1ZSogc3JjMSA9IEFSR19zcmMxOwogICAgIEpTVmFsdWUqIHNyYzIgPSBBUkdfc3JjMjsK
LSAgICBFeGVjU3RhdGUqIGV4ZWMgPSBBUkdfZXhlYzsKKyAgICBDYWxsRnJhbWUqIGNhbGxGcmFt
ZSA9IEFSR19jYWxsRnJhbWU7CiAKLSAgICBib29sIHJlc3VsdCA9IGpzTGVzcyhleGVjLCBzcmMx
LCBzcmMyKTsKKyAgICBib29sIHJlc3VsdCA9IGpzTGVzcyhjYWxsRnJhbWUsIHNyYzEsIHNyYzIp
OwogICAgIFZNX0NIRUNLX0VYQ0VQVElPTl9BVF9FTkQoKTsKICAgICByZXR1cm4gcmVzdWx0Owog
fQpAQCAtNTExNyw5ICs1MDQ4LDkgQEAgSlNWYWx1ZSogTWFjaGluZTo6Y3RpX29wX25vdChDVElf
QVJHUykKIHsKICAgICBKU1ZhbHVlKiBzcmMgPSBBUkdfc3JjMTsKIAotICAgIEV4ZWNTdGF0ZSog
ZXhlYyA9IEFSR19leGVjOworICAgIENhbGxGcmFtZSogY2FsbEZyYW1lID0gQVJHX2NhbGxGcmFt
ZTsKIAotICAgIEpTVmFsdWUqIHJlc3VsdCA9IGpzQm9vbGVhbighc3JjLT50b0Jvb2xlYW4oZXhl
YykpOworICAgIEpTVmFsdWUqIHJlc3VsdCA9IGpzQm9vbGVhbighc3JjLT50b0Jvb2xlYW4oY2Fs
bEZyYW1lKSk7CiAgICAgVk1fQ0hFQ0tfRVhDRVBUSU9OX0FUX0VORCgpOwogICAgIHJldHVybiBy
ZXN1bHQ7CiB9CkBAIC01MTI4LDkgKzUwNTksOSBAQCBpbnQgU0ZYX0NBTEwgTWFjaGluZTo6Y3Rp
X29wX2p0cnVlKENUSV9BCiB7CiAgICAgSlNWYWx1ZSogc3JjMSA9IEFSR19zcmMxOwogCi0gICAg
RXhlY1N0YXRlKiBleGVjID0gQVJHX2V4ZWM7CisgICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUgPSBB
UkdfY2FsbEZyYW1lOwogCi0gICAgYm9vbCByZXN1bHQgPSBzcmMxLT50b0Jvb2xlYW4oZXhlYyk7
CisgICAgYm9vbCByZXN1bHQgPSBzcmMxLT50b0Jvb2xlYW4oY2FsbEZyYW1lKTsKICAgICBWTV9D
SEVDS19FWENFUFRJT05fQVRfRU5EKCk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KQEAgLTUxMzks
OSArNTA3MCw5IEBAIEpTVmFsdWUqIE1hY2hpbmU6OmN0aV9vcF9wb3N0X2luYyhDVElfQVIKIHsK
ICAgICBKU1ZhbHVlKiB2ID0gQVJHX3NyYzE7CiAKLSAgICBFeGVjU3RhdGUqIGV4ZWMgPSBBUkdf
ZXhlYzsKKyAgICBDYWxsRnJhbWUqIGNhbGxGcmFtZSA9IEFSR19jYWxsRnJhbWU7CiAKLSAgICBK
U1ZhbHVlKiBudW1iZXIgPSB2LT50b0pTTnVtYmVyKGV4ZWMpOworICAgIEpTVmFsdWUqIG51bWJl
ciA9IHYtPnRvSlNOdW1iZXIoY2FsbEZyYW1lKTsKICAgICBWTV9DSEVDS19FWENFUFRJT04oKTsK
ICAgICBBUkdfc2V0Mm5kUmVzdWx0KGpzTnVtYmVyKEFSR19nbG9iYWxEYXRhLCBudW1iZXItPnVu
Y2hlY2tlZEdldE51bWJlcigpICsgMSkpOwogICAgIHJldHVybiBudW1iZXI7CkBAIC01MTUyLDEw
ICs1MDgzLDEwIEBAIEpTVmFsdWUqIE1hY2hpbmU6OmN0aV9vcF9lcShDVElfQVJHUykKICAgICBK
U1ZhbHVlKiBzcmMxID0gQVJHX3NyYzE7CiAgICAgSlNWYWx1ZSogc3JjMiA9IEFSR19zcmMyOwog
Ci0gICAgRXhlY1N0YXRlKiBleGVjID0gQVJHX2V4ZWM7CisgICAgQ2FsbEZyYW1lKiBjYWxsRnJh
bWUgPSBBUkdfY2FsbEZyYW1lOwogCiAgICAgQVNTRVJUKCFKU0ltbWVkaWF0ZTo6YXJlQm90aElt
bWVkaWF0ZU51bWJlcnMoc3JjMSwgc3JjMikpOwotICAgIEpTVmFsdWUqIHJlc3VsdCA9IGpzQm9v
bGVhbihlcXVhbFNsb3dDYXNlSW5saW5lKGV4ZWMsIHNyYzEsIHNyYzIpKTsKKyAgICBKU1ZhbHVl
KiByZXN1bHQgPSBqc0Jvb2xlYW4oZXF1YWxTbG93Q2FzZUlubGluZShjYWxsRnJhbWUsIHNyYzEs
IHNyYzIpKTsKICAgICBWTV9DSEVDS19FWENFUFRJT05fQVRfRU5EKCk7CiAgICAgcmV0dXJuIHJl
c3VsdDsKIH0KQEAgLTUxNzIsOCArNTEwMyw4IEBAIEpTVmFsdWUqIE1hY2hpbmU6OmN0aV9vcF9s
c2hpZnQoQ1RJX0FSR1MKICAgICBpZiAoZmFzdFRvSW50MzIodmFsLCBsZWZ0KSAmJiBmYXN0VG9V
SW50MzIoc2hpZnQsIHJpZ2h0KSkKICAgICAgICAgcmV0dXJuIGpzTnVtYmVyKEFSR19nbG9iYWxE
YXRhLCBsZWZ0IDw8IChyaWdodCAmIDB4MWYpKTsKIAotICAgIEV4ZWNTdGF0ZSogZXhlYyA9IEFS
R19leGVjOwotICAgIEpTVmFsdWUqIHJlc3VsdCA9IGpzTnVtYmVyKEFSR19nbG9iYWxEYXRhLCAo
dmFsLT50b0ludDMyKGV4ZWMpKSA8PCAoc2hpZnQtPnRvVUludDMyKGV4ZWMpICYgMHgxZikpOwor
ICAgIENhbGxGcmFtZSogY2FsbEZyYW1lID0gQVJHX2NhbGxGcmFtZTsKKyAgICBKU1ZhbHVlKiBy
ZXN1bHQgPSBqc051bWJlcihBUkdfZ2xvYmFsRGF0YSwgKHZhbC0+dG9JbnQzMihjYWxsRnJhbWUp
KSA8PCAoc2hpZnQtPnRvVUludDMyKGNhbGxGcmFtZSkgJiAweDFmKSk7CiAgICAgVk1fQ0hFQ0tf
RVhDRVBUSU9OX0FUX0VORCgpOwogICAgIHJldHVybiByZXN1bHQ7CiB9CkBAIC01MTg4LDggKzUx
MTksOCBAQCBKU1ZhbHVlKiBNYWNoaW5lOjpjdGlfb3BfYml0YW5kKENUSV9BUkdTCiAgICAgaWYg
KGZhc3RUb0ludDMyKHNyYzEsIGxlZnQpICYmIGZhc3RUb0ludDMyKHNyYzIsIHJpZ2h0KSkKICAg
ICAgICAgcmV0dXJuIGpzTnVtYmVyKEFSR19nbG9iYWxEYXRhLCBsZWZ0ICYgcmlnaHQpOwogCi0g
ICAgRXhlY1N0YXRlKiBleGVjID0gQVJHX2V4ZWM7Ci0gICAgSlNWYWx1ZSogcmVzdWx0ID0ganNO
dW1iZXIoQVJHX2dsb2JhbERhdGEsIHNyYzEtPnRvSW50MzIoZXhlYykgJiBzcmMyLT50b0ludDMy
KGV4ZWMpKTsKKyAgICBDYWxsRnJhbWUqIGNhbGxGcmFtZSA9IEFSR19jYWxsRnJhbWU7CisgICAg
SlNWYWx1ZSogcmVzdWx0ID0ganNOdW1iZXIoQVJHX2dsb2JhbERhdGEsIHNyYzEtPnRvSW50MzIo
Y2FsbEZyYW1lKSAmIHNyYzItPnRvSW50MzIoY2FsbEZyYW1lKSk7CiAgICAgVk1fQ0hFQ0tfRVhD
RVBUSU9OX0FUX0VORCgpOwogICAgIHJldHVybiByZXN1bHQ7CiB9CkBAIC01MjA2LDggKzUxMzcs
OCBAQCBKU1ZhbHVlKiBNYWNoaW5lOjpjdGlfb3BfcnNoaWZ0KENUSV9BUkdTCiAgICAgaWYgKGZh
c3RUb0ludDMyKHZhbCwgbGVmdCkgJiYgZmFzdFRvVUludDMyKHNoaWZ0LCByaWdodCkpCiAgICAg
ICAgIHJldHVybiBqc051bWJlcihBUkdfZ2xvYmFsRGF0YSwgbGVmdCA+PiAocmlnaHQgJiAweDFm
KSk7CiAKLSAgICBFeGVjU3RhdGUqIGV4ZWMgPSBBUkdfZXhlYzsKLSAgICBKU1ZhbHVlKiByZXN1
bHQgPSBqc051bWJlcihBUkdfZ2xvYmFsRGF0YSwgKHZhbC0+dG9JbnQzMihleGVjKSkgPj4gKHNo
aWZ0LT50b1VJbnQzMihleGVjKSAmIDB4MWYpKTsKKyAgICBDYWxsRnJhbWUqIGNhbGxGcmFtZSA9
IEFSR19jYWxsRnJhbWU7CisgICAgSlNWYWx1ZSogcmVzdWx0ID0ganNOdW1iZXIoQVJHX2dsb2Jh
bERhdGEsICh2YWwtPnRvSW50MzIoY2FsbEZyYW1lKSkgPj4gKHNoaWZ0LT50b1VJbnQzMihjYWxs
RnJhbWUpICYgMHgxZikpOwogICAgIFZNX0NIRUNLX0VYQ0VQVElPTl9BVF9FTkQoKTsKICAgICBy
ZXR1cm4gcmVzdWx0OwogfQpAQCAtNTIyMCwxNyArNTE1MSwxNiBAQCBKU1ZhbHVlKiBNYWNoaW5l
OjpjdGlfb3BfYml0bm90KENUSV9BUkdTCiAgICAgaWYgKGZhc3RUb0ludDMyKHNyYywgdmFsdWUp
KQogICAgICAgICByZXR1cm4ganNOdW1iZXIoQVJHX2dsb2JhbERhdGEsIH52YWx1ZSk7CiAgICAg
ICAgICAgICAKLSAgICBFeGVjU3RhdGUqIGV4ZWMgPSBBUkdfZXhlYzsKLSAgICBKU1ZhbHVlKiBy
ZXN1bHQgPSBqc051bWJlcihBUkdfZ2xvYmFsRGF0YSwgfnNyYy0+dG9JbnQzMihleGVjKSk7Cisg
ICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUgPSBBUkdfY2FsbEZyYW1lOworICAgIEpTVmFsdWUqIHJl
c3VsdCA9IGpzTnVtYmVyKEFSR19nbG9iYWxEYXRhLCB+c3JjLT50b0ludDMyKGNhbGxGcmFtZSkp
OwogICAgIFZNX0NIRUNLX0VYQ0VQVElPTl9BVF9FTkQoKTsKICAgICByZXR1cm4gcmVzdWx0Owog
fQogCiBKU1ZhbHVlKiBNYWNoaW5lOjpjdGlfb3BfcmVzb2x2ZV93aXRoX2Jhc2UoQ1RJX0FSR1Mp
CiB7Ci0gICAgRXhlY1N0YXRlKiBleGVjID0gQVJHX2V4ZWM7Ci0gICAgUmVnaXN0ZXIqIHIgPSBB
UkdfcjsKLSAgICBTY29wZUNoYWluTm9kZSogc2NvcGVDaGFpbiA9IE1hY2hpbmU6OnNjb3BlQ2hh
aW4ocik7CisgICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUgPSBBUkdfY2FsbEZyYW1lOworICAgIFNj
b3BlQ2hhaW5Ob2RlKiBzY29wZUNoYWluID0gY2FsbEZyYW1lLT5zY29wZUNoYWluKCk7CiAKICAg
ICBTY29wZUNoYWluSXRlcmF0b3IgaXRlciA9IHNjb3BlQ2hhaW4tPmJlZ2luKCk7CiAgICAgU2Nv
cGVDaGFpbkl0ZXJhdG9yIGVuZCA9IHNjb3BlQ2hhaW4tPmVuZCgpOwpAQCAtNTI0NCw4ICs1MTc0
LDggQEAgSlNWYWx1ZSogTWFjaGluZTo6Y3RpX29wX3Jlc29sdmVfd2l0aF9iYQogICAgIGRvIHsK
ICAgICAgICAgYmFzZSA9ICppdGVyOwogICAgICAgICBQcm9wZXJ0eVNsb3Qgc2xvdChiYXNlKTsK
LSAgICAgICAgaWYgKGJhc2UtPmdldFByb3BlcnR5U2xvdChleGVjLCBpZGVudCwgc2xvdCkpIHsK
LSAgICAgICAgICAgIEpTVmFsdWUqIHJlc3VsdCA9IHNsb3QuZ2V0VmFsdWUoZXhlYywgaWRlbnQp
OworICAgICAgICBpZiAoYmFzZS0+Z2V0UHJvcGVydHlTbG90KGNhbGxGcmFtZSwgaWRlbnQsIHNs
b3QpKSB7CisgICAgICAgICAgICBKU1ZhbHVlKiByZXN1bHQgPSBzbG90LmdldFZhbHVlKGNhbGxG
cmFtZSwgaWRlbnQpOwogICAgICAgICAgICAgVk1fQ0hFQ0tfRVhDRVBUSU9OX0FUX0VORCgpOwog
ICAgICAgICAgICAgQVJHX3NldDJuZFJlc3VsdChyZXN1bHQpOwogICAgICAgICAgICAgcmV0dXJu
IGJhc2U7CkBAIC01MjUzLDE2ICs1MTgzLDE2IEBAIEpTVmFsdWUqIE1hY2hpbmU6OmN0aV9vcF9y
ZXNvbHZlX3dpdGhfYmEKICAgICAgICAgKytpdGVyOwogICAgIH0gd2hpbGUgKGl0ZXIgIT0gZW5k
KTsKIAotICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gTWFjaGluZTo6Y29kZUJsb2NrKHIpOwor
ICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gY2FsbEZyYW1lLT5jb2RlQmxvY2soKTsKICAgICBB
U1NFUlQoY29kZUJsb2NrLT5jdGlSZXR1cm5BZGRyZXNzVlBDTWFwLmNvbnRhaW5zKENUSV9SRVRV
Uk5fQUREUkVTUykpOwogICAgIHVuc2lnbmVkIHZQQ0luZGV4ID0gY29kZUJsb2NrLT5jdGlSZXR1
cm5BZGRyZXNzVlBDTWFwLmdldChDVElfUkVUVVJOX0FERFJFU1MpOwotICAgIGV4ZWMtPnNldEV4
Y2VwdGlvbihjcmVhdGVVbmRlZmluZWRWYXJpYWJsZUVycm9yKGV4ZWMsIGlkZW50LCBjb2RlQmxv
Y2stPmluc3RydWN0aW9ucy5iZWdpbigpICsgdlBDSW5kZXgsIGNvZGVCbG9jaykpOworICAgIEFS
R19nbG9iYWxEYXRhLT5leGNlcHRpb24gPSBjcmVhdGVVbmRlZmluZWRWYXJpYWJsZUVycm9yKGNh
bGxGcmFtZSwgaWRlbnQsIGNvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zLmJlZ2luKCkgKyB2UENJbmRl
eCwgY29kZUJsb2NrKTsKICAgICBWTV9USFJPV19FWENFUFRJT04oKTsKIH0KIAogSlNWYWx1ZSog
TWFjaGluZTo6Y3RpX29wX25ld19mdW5jX2V4cChDVElfQVJHUykKIHsKLSAgICByZXR1cm4gQVJH
X2Z1bmNleHAxLT5tYWtlRnVuY3Rpb24oQVJHX2V4ZWMsIHNjb3BlQ2hhaW4oQVJHX3IpKTsKKyAg
ICByZXR1cm4gQVJHX2Z1bmNleHAxLT5tYWtlRnVuY3Rpb24oQVJHX2NhbGxGcmFtZSwgQVJHX2Nh
bGxGcmFtZS0+c2NvcGVDaGFpbigpKTsKIH0KIAogSlNWYWx1ZSogTWFjaGluZTo6Y3RpX29wX21v
ZChDVElfQVJHUykKQEAgLTUyNzAsMTcgKzUyMDAsMTcgQEAgSlNWYWx1ZSogTWFjaGluZTo6Y3Rp
X29wX21vZChDVElfQVJHUykKICAgICBKU1ZhbHVlKiBkaXZpZGVuZFZhbHVlID0gQVJHX3NyYzE7
CiAgICAgSlNWYWx1ZSogZGl2aXNvclZhbHVlID0gQVJHX3NyYzI7CiAKLSAgICBFeGVjU3RhdGUq
IGV4ZWMgPSBBUkdfZXhlYzsKLSAgICBkb3VibGUgZCA9IGRpdmlkZW5kVmFsdWUtPnRvTnVtYmVy
KGV4ZWMpOwotICAgIEpTVmFsdWUqIHJlc3VsdCA9IGpzTnVtYmVyKEFSR19nbG9iYWxEYXRhLCBm
bW9kKGQsIGRpdmlzb3JWYWx1ZS0+dG9OdW1iZXIoZXhlYykpKTsKKyAgICBDYWxsRnJhbWUqIGNh
bGxGcmFtZSA9IEFSR19jYWxsRnJhbWU7CisgICAgZG91YmxlIGQgPSBkaXZpZGVuZFZhbHVlLT50
b051bWJlcihjYWxsRnJhbWUpOworICAgIEpTVmFsdWUqIHJlc3VsdCA9IGpzTnVtYmVyKEFSR19n
bG9iYWxEYXRhLCBmbW9kKGQsIGRpdmlzb3JWYWx1ZS0+dG9OdW1iZXIoY2FsbEZyYW1lKSkpOwog
ICAgIFZNX0NIRUNLX0VYQ0VQVElPTl9BVF9FTkQoKTsKICAgICByZXR1cm4gcmVzdWx0OwogfQog
CiBKU1ZhbHVlKiBNYWNoaW5lOjpjdGlfb3BfbGVzcyhDVElfQVJHUykKIHsKLSAgICBFeGVjU3Rh
dGUqIGV4ZWMgPSBBUkdfZXhlYzsKLSAgICBKU1ZhbHVlKiByZXN1bHQgPSBqc0Jvb2xlYW4oanNM
ZXNzKGV4ZWMsIEFSR19zcmMxLCBBUkdfc3JjMikpOworICAgIENhbGxGcmFtZSogY2FsbEZyYW1l
ID0gQVJHX2NhbGxGcmFtZTsKKyAgICBKU1ZhbHVlKiByZXN1bHQgPSBqc0Jvb2xlYW4oanNMZXNz
KGNhbGxGcmFtZSwgQVJHX3NyYzEsIEFSR19zcmMyKSk7CiAgICAgVk1fQ0hFQ0tfRVhDRVBUSU9O
X0FUX0VORCgpOwogICAgIHJldHVybiByZXN1bHQ7CiB9CkBAIC01MjkyLDggKzUyMjIsOCBAQCBK
U1ZhbHVlKiBNYWNoaW5lOjpjdGlfb3BfbmVxKENUSV9BUkdTKQogCiAgICAgQVNTRVJUKCFKU0lt
bWVkaWF0ZTo6YXJlQm90aEltbWVkaWF0ZU51bWJlcnMoc3JjMSwgc3JjMikpOwogCi0gICAgRXhl
Y1N0YXRlKiBleGVjID0gQVJHX2V4ZWM7Ci0gICAgSlNWYWx1ZSogcmVzdWx0ID0ganNCb29sZWFu
KCFlcXVhbFNsb3dDYXNlSW5saW5lKGV4ZWMsIHNyYzEsIHNyYzIpKTsKKyAgICBDYWxsRnJhbWUq
IGNhbGxGcmFtZSA9IEFSR19jYWxsRnJhbWU7CisgICAgSlNWYWx1ZSogcmVzdWx0ID0ganNCb29s
ZWFuKCFlcXVhbFNsb3dDYXNlSW5saW5lKGNhbGxGcmFtZSwgc3JjMSwgc3JjMikpOwogICAgIFZN
X0NIRUNLX0VYQ0VQVElPTl9BVF9FTkQoKTsKICAgICByZXR1cm4gcmVzdWx0OwogfQpAQCAtNTMw
Miw5ICs1MjMyLDkgQEAgSlNWYWx1ZSogTWFjaGluZTo6Y3RpX29wX3Bvc3RfZGVjKENUSV9BUgog
ewogICAgIEpTVmFsdWUqIHYgPSBBUkdfc3JjMTsKIAotICAgIEV4ZWNTdGF0ZSogZXhlYyA9IEFS
R19leGVjOworICAgIENhbGxGcmFtZSogY2FsbEZyYW1lID0gQVJHX2NhbGxGcmFtZTsKIAotICAg
IEpTVmFsdWUqIG51bWJlciA9IHYtPnRvSlNOdW1iZXIoZXhlYyk7CisgICAgSlNWYWx1ZSogbnVt
YmVyID0gdi0+dG9KU051bWJlcihjYWxsRnJhbWUpOwogICAgIFZNX0NIRUNLX0VYQ0VQVElPTigp
OwogCiAgICAgQVJHX3NldDJuZFJlc3VsdChqc051bWJlcihBUkdfZ2xvYmFsRGF0YSwgbnVtYmVy
LT51bmNoZWNrZWRHZXROdW1iZXIoKSAtIDEpKTsKQEAgLTUzMTYsMTIgKzUyNDYsMTIgQEAgSlNW
YWx1ZSogTWFjaGluZTo6Y3RpX29wX3Vyc2hpZnQoQ1RJX0FSRwogICAgIEpTVmFsdWUqIHZhbCA9
IEFSR19zcmMxOwogICAgIEpTVmFsdWUqIHNoaWZ0ID0gQVJHX3NyYzI7CiAKLSAgICBFeGVjU3Rh
dGUqIGV4ZWMgPSBBUkdfZXhlYzsKKyAgICBDYWxsRnJhbWUqIGNhbGxGcmFtZSA9IEFSR19jYWxs
RnJhbWU7CiAKICAgICBpZiAoSlNJbW1lZGlhdGU6OmFyZUJvdGhJbW1lZGlhdGVOdW1iZXJzKHZh
bCwgc2hpZnQpICYmICFKU0ltbWVkaWF0ZTo6aXNOZWdhdGl2ZSh2YWwpKQogICAgICAgICByZXR1
cm4gSlNJbW1lZGlhdGU6OnJpZ2h0U2hpZnRJbW1lZGlhdGVOdW1iZXJzKHZhbCwgc2hpZnQpOwog
ICAgIGVsc2UgewotICAgICAgICBKU1ZhbHVlKiByZXN1bHQgPSBqc051bWJlcihBUkdfZ2xvYmFs
RGF0YSwgKHZhbC0+dG9VSW50MzIoZXhlYykpID4+IChzaGlmdC0+dG9VSW50MzIoZXhlYykgJiAw
eDFmKSk7CisgICAgICAgIEpTVmFsdWUqIHJlc3VsdCA9IGpzTnVtYmVyKEFSR19nbG9iYWxEYXRh
LCAodmFsLT50b1VJbnQzMihjYWxsRnJhbWUpKSA+PiAoc2hpZnQtPnRvVUludDMyKGNhbGxGcmFt
ZSkgJiAweDFmKSk7CiAgICAgICAgIFZNX0NIRUNLX0VYQ0VQVElPTl9BVF9FTkQoKTsKICAgICAg
ICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CkBAIC01MzMyLDE2ICs1MjYyLDE2IEBAIEpTVmFsdWUq
IE1hY2hpbmU6OmN0aV9vcF9iaXR4b3IoQ1RJX0FSR1MKICAgICBKU1ZhbHVlKiBzcmMxID0gQVJH
X3NyYzE7CiAgICAgSlNWYWx1ZSogc3JjMiA9IEFSR19zcmMyOwogCi0gICAgRXhlY1N0YXRlKiBl
eGVjID0gQVJHX2V4ZWM7CisgICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUgPSBBUkdfY2FsbEZyYW1l
OwogCi0gICAgSlNWYWx1ZSogcmVzdWx0ID0ganNOdW1iZXIoQVJHX2dsb2JhbERhdGEsIHNyYzEt
PnRvSW50MzIoZXhlYykgXiBzcmMyLT50b0ludDMyKGV4ZWMpKTsKKyAgICBKU1ZhbHVlKiByZXN1
bHQgPSBqc051bWJlcihBUkdfZ2xvYmFsRGF0YSwgc3JjMS0+dG9JbnQzMihjYWxsRnJhbWUpIF4g
c3JjMi0+dG9JbnQzMihjYWxsRnJhbWUpKTsKICAgICBWTV9DSEVDS19FWENFUFRJT05fQVRfRU5E
KCk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAogSlNWYWx1ZSogTWFjaGluZTo6Y3RpX29wX25l
d19yZWdleHAoQ1RJX0FSR1MpCiB7Ci0gICAgcmV0dXJuIG5ldyAoQVJHX2dsb2JhbERhdGEpIFJl
Z0V4cE9iamVjdChzY29wZUNoYWluKEFSR19yKS0+Z2xvYmFsT2JqZWN0KCktPnJlZ0V4cFN0cnVj
dHVyZSgpLCBBUkdfcmVnZXhwMSk7CisgICAgcmV0dXJuIG5ldyAoQVJHX2dsb2JhbERhdGEpIFJl
Z0V4cE9iamVjdChBUkdfY2FsbEZyYW1lLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCktPnJlZ0V4cFN0
cnVjdHVyZSgpLCBBUkdfcmVnZXhwMSk7CiB9CiAKIEpTVmFsdWUqIE1hY2hpbmU6OmN0aV9vcF9i
aXRvcihDVElfQVJHUykKQEAgLTUzNDksMjAgKzUyNzksMTkgQEAgSlNWYWx1ZSogTWFjaGluZTo6
Y3RpX29wX2JpdG9yKENUSV9BUkdTKQogICAgIEpTVmFsdWUqIHNyYzEgPSBBUkdfc3JjMTsKICAg
ICBKU1ZhbHVlKiBzcmMyID0gQVJHX3NyYzI7CiAKLSAgICBFeGVjU3RhdGUqIGV4ZWMgPSBBUkdf
ZXhlYzsKKyAgICBDYWxsRnJhbWUqIGNhbGxGcmFtZSA9IEFSR19jYWxsRnJhbWU7CiAKLSAgICBK
U1ZhbHVlKiByZXN1bHQgPSBqc051bWJlcihBUkdfZ2xvYmFsRGF0YSwgc3JjMS0+dG9JbnQzMihl
eGVjKSB8IHNyYzItPnRvSW50MzIoZXhlYykpOworICAgIEpTVmFsdWUqIHJlc3VsdCA9IGpzTnVt
YmVyKEFSR19nbG9iYWxEYXRhLCBzcmMxLT50b0ludDMyKGNhbGxGcmFtZSkgfCBzcmMyLT50b0lu
dDMyKGNhbGxGcmFtZSkpOwogICAgIFZNX0NIRUNLX0VYQ0VQVElPTl9BVF9FTkQoKTsKICAgICBy
ZXR1cm4gcmVzdWx0OwogfQogCiBKU1ZhbHVlKiBNYWNoaW5lOjpjdGlfb3BfY2FsbF9ldmFsKENU
SV9BUkdTKQogewotICAgIEV4ZWNTdGF0ZSogZXhlYyA9IEFSR19leGVjOworICAgIENhbGxGcmFt
ZSogY2FsbEZyYW1lID0gQVJHX2NhbGxGcmFtZTsKICAgICBSZWdpc3RlckZpbGUqIHJlZ2lzdGVy
RmlsZSA9IEFSR19yZWdpc3RlckZpbGU7Ci0gICAgUmVnaXN0ZXIqIHIgPSBBUkdfcjsKLSAgICBD
b2RlQmxvY2sqIGNvZGVCbG9jayA9IE1hY2hpbmU6OmNvZGVCbG9jayhyKTsKLSAgICBTY29wZUNo
YWluTm9kZSogc2NvcGVDaGFpbiA9IE1hY2hpbmU6OnNjb3BlQ2hhaW4ocik7CisgICAgQ29kZUJs
b2NrKiBjb2RlQmxvY2sgPSBjYWxsRnJhbWUtPmNvZGVCbG9jaygpOworICAgIFNjb3BlQ2hhaW5O
b2RlKiBzY29wZUNoYWluID0gY2FsbEZyYW1lLT5zY29wZUNoYWluKCk7CiAKICAgICBNYWNoaW5l
KiBtYWNoaW5lID0gQVJHX2dsb2JhbERhdGEtPm1hY2hpbmU7CiAgICAgCkBAIC01MzcyLDkgKzUz
MDEsOSBAQCBKU1ZhbHVlKiBNYWNoaW5lOjpjdGlfb3BfY2FsbF9ldmFsKENUSV9BCiAgICAgSlNW
YWx1ZSogYmFzZVZhbCA9IEFSR19zcmM1OwogCiAgICAgaWYgKGJhc2VWYWwgPT0gc2NvcGVDaGFp
bi0+Z2xvYmFsT2JqZWN0KCkgJiYgZnVuY1ZhbCA9PSBzY29wZUNoYWluLT5nbG9iYWxPYmplY3Qo
KS0+ZXZhbEZ1bmN0aW9uKCkpIHsKLSAgICAgICAgSlNPYmplY3QqIHRoaXNPYmplY3QgPSBzdGF0
aWNfY2FzdDxKU09iamVjdCo+KHJbY29kZUJsb2NrLT50aGlzUmVnaXN0ZXJdLmpzVmFsdWUoZXhl
YykpOworICAgICAgICBKU09iamVjdCogdGhpc09iamVjdCA9IHN0YXRpY19jYXN0PEpTT2JqZWN0
Kj4oY2FsbEZyYW1lW2NvZGVCbG9jay0+dGhpc1JlZ2lzdGVyXS5qc1ZhbHVlKGNhbGxGcmFtZSkp
OwogICAgICAgICBKU1ZhbHVlKiBleGNlcHRpb25WYWx1ZSA9IDA7Ci0gICAgICAgIEpTVmFsdWUq
IHJlc3VsdCA9IG1hY2hpbmUtPmNhbGxFdmFsKGV4ZWMsIHRoaXNPYmplY3QsIHNjb3BlQ2hhaW4s
IHJlZ2lzdGVyRmlsZSwgIHIsIHJlZ2lzdGVyT2Zmc2V0IC0gUmVnaXN0ZXJGaWxlOjpDYWxsRnJh
bWVIZWFkZXJTaXplIC0gYXJnQ291bnQsIGFyZ0NvdW50LCBleGNlcHRpb25WYWx1ZSk7CisgICAg
ICAgIEpTVmFsdWUqIHJlc3VsdCA9IG1hY2hpbmUtPmNhbGxFdmFsKGNhbGxGcmFtZSwgdGhpc09i
amVjdCwgc2NvcGVDaGFpbiwgcmVnaXN0ZXJGaWxlLCByZWdpc3Rlck9mZnNldCAtIFJlZ2lzdGVy
RmlsZTo6Q2FsbEZyYW1lSGVhZGVyU2l6ZSAtIGFyZ0NvdW50LCBhcmdDb3VudCwgZXhjZXB0aW9u
VmFsdWUpOwogICAgICAgICBWTV9DSEVDS19FWENFUFRJT05fQVJHKGV4Y2VwdGlvblZhbHVlKTsK
ICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CkBAIC01Mzg0LDkgKzUzMTMsOCBAQCBKU1Zh
bHVlKiBNYWNoaW5lOjpjdGlfb3BfY2FsbF9ldmFsKENUSV9BCiAKIHZvaWQqIE1hY2hpbmU6OmN0
aV9vcF90aHJvdyhDVElfQVJHUykKIHsKLSAgICBFeGVjU3RhdGUqIGV4ZWMgPSBBUkdfZXhlYzsK
LSAgICBSZWdpc3RlciogciA9IEFSR19yOwotICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gTWFj
aGluZTo6Y29kZUJsb2NrKHIpOworICAgIENhbGxGcmFtZSogY2FsbEZyYW1lID0gQVJHX2NhbGxG
cmFtZTsKKyAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IGNhbGxGcmFtZS0+Y29kZUJsb2NrKCk7
CiAKICAgICBBU1NFUlQoY29kZUJsb2NrLT5jdGlSZXR1cm5BZGRyZXNzVlBDTWFwLmNvbnRhaW5z
KENUSV9SRVRVUk5fQUREUkVTUykpOwogICAgIHVuc2lnbmVkIHZQQ0luZGV4ID0gY29kZUJsb2Nr
LT5jdGlSZXR1cm5BZGRyZXNzVlBDTWFwLmdldChDVElfUkVUVVJOX0FERFJFU1MpOwpAQCAtNTM5
NCwxNSArNTMyMiwxNSBAQCB2b2lkKiBNYWNoaW5lOjpjdGlfb3BfdGhyb3coQ1RJX0FSR1MpCiAg
ICAgSlNWYWx1ZSogZXhjZXB0aW9uVmFsdWUgPSBBUkdfc3JjMTsKICAgICBBU1NFUlQoZXhjZXB0
aW9uVmFsdWUpOwogCi0gICAgSW5zdHJ1Y3Rpb24qIGhhbmRsZXJWUEMgPSBBUkdfZ2xvYmFsRGF0
YS0+bWFjaGluZS0+dGhyb3dFeGNlcHRpb24oZXhlYywgZXhjZXB0aW9uVmFsdWUsIGNvZGVCbG9j
ay0+aW5zdHJ1Y3Rpb25zLmJlZ2luKCkgKyB2UENJbmRleCwgciwgdHJ1ZSk7CisgICAgSW5zdHJ1
Y3Rpb24qIGhhbmRsZXJWUEMgPSBBUkdfZ2xvYmFsRGF0YS0+bWFjaGluZS0+dGhyb3dFeGNlcHRp
b24oY2FsbEZyYW1lLCBleGNlcHRpb25WYWx1ZSwgY29kZUJsb2NrLT5pbnN0cnVjdGlvbnMuYmVn
aW4oKSArIHZQQ0luZGV4LCB0cnVlKTsKIAogICAgIGlmICghaGFuZGxlclZQQykgewogICAgICAg
ICAqQVJHX2V4Y2VwdGlvbiA9IGV4Y2VwdGlvblZhbHVlOwogICAgICAgICByZXR1cm4gSlNJbW1l
ZGlhdGU6Om51bGxJbW1lZGlhdGUoKTsKICAgICB9CiAKLSAgICBBUkdfc2V0UihyKTsKLSAgICB2
b2lkKiBjYXRjaFJvdXRpbmUgPSBNYWNoaW5lOjpjb2RlQmxvY2sociktPm5hdGl2ZUV4Y2VwdGlv
bkNvZGVGb3JIYW5kbGVyVlBDKGhhbmRsZXJWUEMpOworICAgIEFSR19zZXRDYWxsRnJhbWUoY2Fs
bEZyYW1lKTsKKyAgICB2b2lkKiBjYXRjaFJvdXRpbmUgPSBjYWxsRnJhbWUtPmNvZGVCbG9jaygp
LT5uYXRpdmVFeGNlcHRpb25Db2RlRm9ySGFuZGxlclZQQyhoYW5kbGVyVlBDKTsKICAgICBBU1NF
UlQoY2F0Y2hSb3V0aW5lKTsKICAgICBjdGlTZXRSZXR1cm5BZGRyZXNzKCZDVElfUkVUVVJOX0FE
RFJFU1MsIGNhdGNoUm91dGluZSk7CiAgICAgcmV0dXJuIGV4Y2VwdGlvblZhbHVlOwpAQCAtNTQx
MCwxMyArNTMzOCwxMyBAQCB2b2lkKiBNYWNoaW5lOjpjdGlfb3BfdGhyb3coQ1RJX0FSR1MpCiAK
IEpTUHJvcGVydHlOYW1lSXRlcmF0b3IqIE1hY2hpbmU6OmN0aV9vcF9nZXRfcG5hbWVzKENUSV9B
UkdTKQogewotICAgIHJldHVybiBKU1Byb3BlcnR5TmFtZUl0ZXJhdG9yOjpjcmVhdGUoQVJHX2V4
ZWMsIEFSR19zcmMxKTsKKyAgICByZXR1cm4gSlNQcm9wZXJ0eU5hbWVJdGVyYXRvcjo6Y3JlYXRl
KEFSR19jYWxsRnJhbWUsIEFSR19zcmMxKTsKIH0KIAogSlNWYWx1ZSogTWFjaGluZTo6Y3RpX29w
X25leHRfcG5hbWUoQ1RJX0FSR1MpCiB7CiAgICAgSlNQcm9wZXJ0eU5hbWVJdGVyYXRvciogaXQg
PSBBUkdfcG5pMTsKLSAgICBKU1ZhbHVlKiB0ZW1wID0gaXQtPm5leHQoQVJHX2V4ZWMpOworICAg
IEpTVmFsdWUqIHRlbXAgPSBpdC0+bmV4dChBUkdfY2FsbEZyYW1lKTsKICAgICBpZiAoIXRlbXAp
CiAgICAgICAgIGl0LT5pbnZhbGlkYXRlKCk7CiAgICAgcmV0dXJuIHRlbXA7CkBAIC01NDI0LDI1
ICs1MzUyLDIwIEBAIEpTVmFsdWUqIE1hY2hpbmU6OmN0aV9vcF9uZXh0X3BuYW1lKENUSV8KIAog
dm9pZCBNYWNoaW5lOjpjdGlfb3BfcHVzaF9zY29wZShDVElfQVJHUykKIHsKLSAgICBFeGVjU3Rh
dGUqIGV4ZWMgPSBBUkdfZXhlYzsKLSAgICBKU1ZhbHVlKiB2ID0gQVJHX3NyYzE7Ci0KLSAgICBK
U09iamVjdCogbyA9IHYtPnRvT2JqZWN0KGV4ZWMpOworICAgIEpTT2JqZWN0KiBvID0gQVJHX3Ny
YzEtPnRvT2JqZWN0KEFSR19jYWxsRnJhbWUpOwogICAgIFZNX0NIRUNLX0VYQ0VQVElPTl9WT0lE
KCk7Ci0KLSAgICBSZWdpc3RlciogciA9IEFSR19yOwotICAgIHJbUmVnaXN0ZXJGaWxlOjpTY29w
ZUNoYWluXSA9IHNjb3BlQ2hhaW4ociktPnB1c2gobyk7CisgICAgQVJHX2NhbGxGcmFtZS0+c2V0
U2NvcGVDaGFpbihBUkdfY2FsbEZyYW1lLT5zY29wZUNoYWluKCktPnB1c2gobykpOwogfQogCiB2
b2lkIE1hY2hpbmU6OmN0aV9vcF9wb3Bfc2NvcGUoQ1RJX0FSR1MpCiB7Ci0gICAgUmVnaXN0ZXIq
IHIgPSBBUkdfcjsKLSAgICByW1JlZ2lzdGVyRmlsZTo6U2NvcGVDaGFpbl0gPSBzY29wZUNoYWlu
KHIpLT5wb3AoKTsKKyAgICBDYWxsRnJhbWUqIGNhbGxGcmFtZSA9IEFSR19jYWxsRnJhbWU7Cisg
ICAgY2FsbEZyYW1lLT5zZXRTY29wZUNoYWluKGNhbGxGcmFtZS0+c2NvcGVDaGFpbigpLT5wb3Ao
KSk7CiB9CiAKIEpTVmFsdWUqIE1hY2hpbmU6OmN0aV9vcF90eXBlb2YoQ1RJX0FSR1MpCiB7Ci0g
ICAgcmV0dXJuIGpzVHlwZVN0cmluZ0ZvclZhbHVlKEFSR19leGVjLCBBUkdfc3JjMSk7CisgICAg
cmV0dXJuIGpzVHlwZVN0cmluZ0ZvclZhbHVlKEFSR19jYWxsRnJhbWUsIEFSR19zcmMxKTsKIH0K
IAogSlNWYWx1ZSogTWFjaGluZTo6Y3RpX29wX2lzX3VuZGVmaW5lZChDVElfQVJHUykKQEAgLTU1
MDMsMjQgKzU0MjYsMjQgQEAgSlNWYWx1ZSogTWFjaGluZTo6Y3RpX29wX25zdHJpY3RlcShDVElf
QQogSlNWYWx1ZSogTWFjaGluZTo6Y3RpX29wX3RvX2pzbnVtYmVyKENUSV9BUkdTKQogewogICAg
IEpTVmFsdWUqIHNyYyA9IEFSR19zcmMxOwotICAgIEV4ZWNTdGF0ZSogZXhlYyA9IEFSR19leGVj
OworICAgIENhbGxGcmFtZSogY2FsbEZyYW1lID0gQVJHX2NhbGxGcmFtZTsKIAotICAgIEpTVmFs
dWUqIHJlc3VsdCA9IHNyYy0+dG9KU051bWJlcihleGVjKTsKKyAgICBKU1ZhbHVlKiByZXN1bHQg
PSBzcmMtPnRvSlNOdW1iZXIoY2FsbEZyYW1lKTsKICAgICBWTV9DSEVDS19FWENFUFRJT05fQVRf
RU5EKCk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAogSlNWYWx1ZSogTWFjaGluZTo6Y3RpX29w
X2luKENUSV9BUkdTKQogewotICAgIEV4ZWNTdGF0ZSogZXhlYyA9IEFSR19leGVjOworICAgIENh
bGxGcmFtZSogY2FsbEZyYW1lID0gQVJHX2NhbGxGcmFtZTsKICAgICBKU1ZhbHVlKiBiYXNlVmFs
ID0gQVJHX3NyYzI7CiAKICAgICBpZiAoIWJhc2VWYWwtPmlzT2JqZWN0KCkpIHsKLSAgICAgICAg
UmVnaXN0ZXIqIHIgPSBBUkdfcjsKLSAgICAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBNYWNo
aW5lOjpjb2RlQmxvY2socik7CisgICAgICAgIENhbGxGcmFtZSogY2FsbEZyYW1lID0gQVJHX2Nh
bGxGcmFtZTsKKyAgICAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBjYWxsRnJhbWUtPmNvZGVC
bG9jaygpOwogICAgICAgICBBU1NFUlQoY29kZUJsb2NrLT5jdGlSZXR1cm5BZGRyZXNzVlBDTWFw
LmNvbnRhaW5zKENUSV9SRVRVUk5fQUREUkVTUykpOwogICAgICAgICB1bnNpZ25lZCB2UENJbmRl
eCA9IGNvZGVCbG9jay0+Y3RpUmV0dXJuQWRkcmVzc1ZQQ01hcC5nZXQoQ1RJX1JFVFVSTl9BRERS
RVNTKTsKLSAgICAgICAgZXhlYy0+c2V0RXhjZXB0aW9uKGNyZWF0ZUludmFsaWRQYXJhbUVycm9y
KGV4ZWMsICJpbiIsIGJhc2VWYWwsIGNvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zLmJlZ2luKCkgKyB2
UENJbmRleCwgY29kZUJsb2NrKSk7CisgICAgICAgIEFSR19nbG9iYWxEYXRhLT5leGNlcHRpb24g
PSBjcmVhdGVJbnZhbGlkUGFyYW1FcnJvcihjYWxsRnJhbWUsICJpbiIsIGJhc2VWYWwsIGNvZGVC
bG9jay0+aW5zdHJ1Y3Rpb25zLmJlZ2luKCkgKyB2UENJbmRleCwgY29kZUJsb2NrKTsKICAgICAg
ICAgVk1fVEhST1dfRVhDRVBUSU9OKCk7CiAgICAgfQogCkBAIC01NTI5LDQ3ICs1NDUyLDQ3IEBA
IEpTVmFsdWUqIE1hY2hpbmU6OmN0aV9vcF9pbihDVElfQVJHUykKIAogICAgIHVpbnQzMl90IGk7
CiAgICAgaWYgKHByb3BOYW1lLT5nZXRVSW50MzIoaSkpCi0gICAgICAgIHJldHVybiBqc0Jvb2xl
YW4oYmFzZU9iai0+aGFzUHJvcGVydHkoZXhlYywgaSkpOworICAgICAgICByZXR1cm4ganNCb29s
ZWFuKGJhc2VPYmotPmhhc1Byb3BlcnR5KGNhbGxGcmFtZSwgaSkpOwogCi0gICAgSWRlbnRpZmll
ciBwcm9wZXJ0eShleGVjLCBwcm9wTmFtZS0+dG9TdHJpbmcoZXhlYykpOworICAgIElkZW50aWZp
ZXIgcHJvcGVydHkoY2FsbEZyYW1lLCBwcm9wTmFtZS0+dG9TdHJpbmcoY2FsbEZyYW1lKSk7CiAg
ICAgVk1fQ0hFQ0tfRVhDRVBUSU9OKCk7Ci0gICAgcmV0dXJuIGpzQm9vbGVhbihiYXNlT2JqLT5o
YXNQcm9wZXJ0eShleGVjLCBwcm9wZXJ0eSkpOworICAgIHJldHVybiBqc0Jvb2xlYW4oYmFzZU9i
ai0+aGFzUHJvcGVydHkoY2FsbEZyYW1lLCBwcm9wZXJ0eSkpOwogfQogCiBKU1ZhbHVlKiBNYWNo
aW5lOjpjdGlfb3BfcHVzaF9uZXdfc2NvcGUoQ1RJX0FSR1MpCiB7Ci0gICAgSlNPYmplY3QqIHNj
b3BlID0gbmV3IChBUkdfZ2xvYmFsRGF0YSkgSlNTdGF0aWNTY29wZU9iamVjdChBUkdfZXhlYywg
KkFSR19pZDEsIEFSR19zcmMyLCBEb250RGVsZXRlKTsKKyAgICBKU09iamVjdCogc2NvcGUgPSBu
ZXcgKEFSR19nbG9iYWxEYXRhKSBKU1N0YXRpY1Njb3BlT2JqZWN0KEFSR19jYWxsRnJhbWUsICpB
UkdfaWQxLCBBUkdfc3JjMiwgRG9udERlbGV0ZSk7CiAKLSAgICBSZWdpc3RlciogciA9IEFSR19y
OwotICAgIHJbUmVnaXN0ZXJGaWxlOjpTY29wZUNoYWluXSA9IHNjb3BlQ2hhaW4ociktPnB1c2go
c2NvcGUpOworICAgIENhbGxGcmFtZSogY2FsbEZyYW1lID0gQVJHX2NhbGxGcmFtZTsKKyAgICBj
YWxsRnJhbWUtPnNldFNjb3BlQ2hhaW4oY2FsbEZyYW1lLT5zY29wZUNoYWluKCktPnB1c2goc2Nv
cGUpKTsKICAgICByZXR1cm4gc2NvcGU7CiB9CiAKIHZvaWQgTWFjaGluZTo6Y3RpX29wX2ptcF9z
Y29wZXMoQ1RJX0FSR1MpCiB7CiAgICAgdW5zaWduZWQgY291bnQgPSBBUkdfaW50MTsKLSAgICBS
ZWdpc3RlciogciA9IEFSR19yOworICAgIENhbGxGcmFtZSogY2FsbEZyYW1lID0gQVJHX2NhbGxG
cmFtZTsKIAotICAgIFNjb3BlQ2hhaW5Ob2RlKiB0bXAgPSBzY29wZUNoYWluKHIpOworICAgIFNj
b3BlQ2hhaW5Ob2RlKiB0bXAgPSBjYWxsRnJhbWUtPnNjb3BlQ2hhaW4oKTsKICAgICB3aGlsZSAo
Y291bnQtLSkKICAgICAgICAgdG1wID0gdG1wLT5wb3AoKTsKLSAgICByW1JlZ2lzdGVyRmlsZTo6
U2NvcGVDaGFpbl0gPSB0bXA7CisgICAgY2FsbEZyYW1lLT5zZXRTY29wZUNoYWluKHRtcCk7CiB9
CiAKIHZvaWQgTWFjaGluZTo6Y3RpX29wX3B1dF9ieV9pbmRleChDVElfQVJHUykKIHsKLSAgICBF
eGVjU3RhdGUqIGV4ZWMgPSBBUkdfZXhlYzsKKyAgICBDYWxsRnJhbWUqIGNhbGxGcmFtZSA9IEFS
R19jYWxsRnJhbWU7CiAgICAgdW5zaWduZWQgcHJvcGVydHkgPSBBUkdfaW50MjsKIAotICAgIEFS
R19zcmMxLT5wdXQoZXhlYywgcHJvcGVydHksIEFSR19zcmMzKTsKKyAgICBBUkdfc3JjMS0+cHV0
KGNhbGxGcmFtZSwgcHJvcGVydHksIEFSR19zcmMzKTsKIH0KIAogdm9pZCogTWFjaGluZTo6Y3Rp
X29wX3N3aXRjaF9pbW0oQ1RJX0FSR1MpCiB7CiAgICAgSlNWYWx1ZSogc2NydXRpbmVlID0gQVJH
X3NyYzE7CiAgICAgdW5zaWduZWQgdGFibGVJbmRleCA9IEFSR19pbnQyOwotICAgIFJlZ2lzdGVy
KiByID0gQVJHX3I7Ci0gICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBNYWNoaW5lOjpjb2RlQmxv
Y2socik7CisgICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUgPSBBUkdfY2FsbEZyYW1lOworICAgIENv
ZGVCbG9jayogY29kZUJsb2NrID0gY2FsbEZyYW1lLT5jb2RlQmxvY2soKTsKIAogICAgIGlmIChK
U0ltbWVkaWF0ZTo6aXNOdW1iZXIoc2NydXRpbmVlKSkgewogICAgICAgICBpbnQzMl90IHZhbHVl
ID0gSlNJbW1lZGlhdGU6OmdldFRydW5jYXRlZEludDMyKHNjcnV0aW5lZSk7CkBAIC01NTgzLDgg
KzU1MDYsOCBAQCB2b2lkKiBNYWNoaW5lOjpjdGlfb3Bfc3dpdGNoX2NoYXIoQ1RJX0FSCiB7CiAg
ICAgSlNWYWx1ZSogc2NydXRpbmVlID0gQVJHX3NyYzE7CiAgICAgdW5zaWduZWQgdGFibGVJbmRl
eCA9IEFSR19pbnQyOwotICAgIFJlZ2lzdGVyKiByID0gQVJHX3I7Ci0gICAgQ29kZUJsb2NrKiBj
b2RlQmxvY2sgPSBNYWNoaW5lOjpjb2RlQmxvY2socik7CisgICAgQ2FsbEZyYW1lKiBjYWxsRnJh
bWUgPSBBUkdfY2FsbEZyYW1lOworICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gY2FsbEZyYW1l
LT5jb2RlQmxvY2soKTsKIAogICAgIHZvaWQqIHJlc3VsdCA9IGNvZGVCbG9jay0+Y2hhcmFjdGVy
U3dpdGNoSnVtcFRhYmxlc1t0YWJsZUluZGV4XS5jdGlEZWZhdWx0OwogCkBAIC01NjAxLDggKzU1
MjQsOCBAQCB2b2lkKiBNYWNoaW5lOjpjdGlfb3Bfc3dpdGNoX3N0cmluZyhDVElfCiB7CiAgICAg
SlNWYWx1ZSogc2NydXRpbmVlID0gQVJHX3NyYzE7CiAgICAgdW5zaWduZWQgdGFibGVJbmRleCA9
IEFSR19pbnQyOwotICAgIFJlZ2lzdGVyKiByID0gQVJHX3I7Ci0gICAgQ29kZUJsb2NrKiBjb2Rl
QmxvY2sgPSBNYWNoaW5lOjpjb2RlQmxvY2socik7CisgICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUg
PSBBUkdfY2FsbEZyYW1lOworICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gY2FsbEZyYW1lLT5j
b2RlQmxvY2soKTsKIAogICAgIHZvaWQqIHJlc3VsdCA9IGNvZGVCbG9jay0+c3RyaW5nU3dpdGNo
SnVtcFRhYmxlc1t0YWJsZUluZGV4XS5jdGlEZWZhdWx0OwogCkBAIC01NjE2LDIxICs1NTM5LDIx
IEBAIHZvaWQqIE1hY2hpbmU6OmN0aV9vcF9zd2l0Y2hfc3RyaW5nKENUSV8KIAogSlNWYWx1ZSog
TWFjaGluZTo6Y3RpX29wX2RlbF9ieV92YWwoQ1RJX0FSR1MpCiB7Ci0gICAgRXhlY1N0YXRlKiBl
eGVjID0gQVJHX2V4ZWM7CisgICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUgPSBBUkdfY2FsbEZyYW1l
OwogCiAgICAgSlNWYWx1ZSogYmFzZVZhbHVlID0gQVJHX3NyYzE7Ci0gICAgSlNPYmplY3QqIGJh
c2VPYmogPSBiYXNlVmFsdWUtPnRvT2JqZWN0KGV4ZWMpOyAvLyBtYXkgdGhyb3cKKyAgICBKU09i
amVjdCogYmFzZU9iaiA9IGJhc2VWYWx1ZS0+dG9PYmplY3QoY2FsbEZyYW1lKTsgLy8gbWF5IHRo
cm93CiAKICAgICBKU1ZhbHVlKiBzdWJzY3JpcHQgPSBBUkdfc3JjMjsKICAgICBKU1ZhbHVlKiBy
ZXN1bHQ7CiAgICAgdWludDMyX3QgaTsKICAgICBpZiAoc3Vic2NyaXB0LT5nZXRVSW50MzIoaSkp
Ci0gICAgICAgIHJlc3VsdCA9IGpzQm9vbGVhbihiYXNlT2JqLT5kZWxldGVQcm9wZXJ0eShleGVj
LCBpKSk7CisgICAgICAgIHJlc3VsdCA9IGpzQm9vbGVhbihiYXNlT2JqLT5kZWxldGVQcm9wZXJ0
eShjYWxsRnJhbWUsIGkpKTsKICAgICBlbHNlIHsKICAgICAgICAgVk1fQ0hFQ0tfRVhDRVBUSU9O
KCk7Ci0gICAgICAgIElkZW50aWZpZXIgcHJvcGVydHkoZXhlYywgc3Vic2NyaXB0LT50b1N0cmlu
ZyhleGVjKSk7CisgICAgICAgIElkZW50aWZpZXIgcHJvcGVydHkoY2FsbEZyYW1lLCBzdWJzY3Jp
cHQtPnRvU3RyaW5nKGNhbGxGcmFtZSkpOwogICAgICAgICBWTV9DSEVDS19FWENFUFRJT04oKTsK
LSAgICAgICAgcmVzdWx0ID0ganNCb29sZWFuKGJhc2VPYmotPmRlbGV0ZVByb3BlcnR5KGV4ZWMs
IHByb3BlcnR5KSk7CisgICAgICAgIHJlc3VsdCA9IGpzQm9vbGVhbihiYXNlT2JqLT5kZWxldGVQ
cm9wZXJ0eShjYWxsRnJhbWUsIHByb3BlcnR5KSk7CiAgICAgfQogCiAgICAgVk1fQ0hFQ0tfRVhD
RVBUSU9OX0FUX0VORCgpOwpAQCAtNTYzOSw1NSArNTU2Miw1MiBAQCBKU1ZhbHVlKiBNYWNoaW5l
OjpjdGlfb3BfZGVsX2J5X3ZhbChDVElfCiAKIHZvaWQgTWFjaGluZTo6Y3RpX29wX3B1dF9nZXR0
ZXIoQ1RJX0FSR1MpCiB7Ci0gICAgRXhlY1N0YXRlKiBleGVjID0gQVJHX2V4ZWM7CisgICAgQ2Fs
bEZyYW1lKiBjYWxsRnJhbWUgPSBBUkdfY2FsbEZyYW1lOwogCiAgICAgQVNTRVJUKEFSR19zcmMx
LT5pc09iamVjdCgpKTsKICAgICBKU09iamVjdCogYmFzZU9iaiA9IHN0YXRpY19jYXN0PEpTT2Jq
ZWN0Kj4oQVJHX3NyYzEpOwogICAgIElkZW50aWZpZXImIGlkZW50ID0gKkFSR19pZDI7CiAgICAg
QVNTRVJUKEFSR19zcmMzLT5pc09iamVjdCgpKTsKLSAgICBiYXNlT2JqLT5kZWZpbmVHZXR0ZXIo
ZXhlYywgaWRlbnQsIHN0YXRpY19jYXN0PEpTT2JqZWN0Kj4oQVJHX3NyYzMpKTsKKyAgICBiYXNl
T2JqLT5kZWZpbmVHZXR0ZXIoY2FsbEZyYW1lLCBpZGVudCwgc3RhdGljX2Nhc3Q8SlNPYmplY3Qq
PihBUkdfc3JjMykpOwogfQogCiB2b2lkIE1hY2hpbmU6OmN0aV9vcF9wdXRfc2V0dGVyKENUSV9B
UkdTKQogewotICAgIEV4ZWNTdGF0ZSogZXhlYyA9IEFSR19leGVjOworICAgIENhbGxGcmFtZSog
Y2FsbEZyYW1lID0gQVJHX2NhbGxGcmFtZTsKIAogICAgIEFTU0VSVChBUkdfc3JjMS0+aXNPYmpl
Y3QoKSk7CiAgICAgSlNPYmplY3QqIGJhc2VPYmogPSBzdGF0aWNfY2FzdDxKU09iamVjdCo+KEFS
R19zcmMxKTsKICAgICBJZGVudGlmaWVyJiBpZGVudCA9ICpBUkdfaWQyOwogICAgIEFTU0VSVChB
Ukdfc3JjMy0+aXNPYmplY3QoKSk7Ci0gICAgYmFzZU9iai0+ZGVmaW5lU2V0dGVyKGV4ZWMsIGlk
ZW50LCBzdGF0aWNfY2FzdDxKU09iamVjdCo+KEFSR19zcmMzKSk7CisgICAgYmFzZU9iai0+ZGVm
aW5lU2V0dGVyKGNhbGxGcmFtZSwgaWRlbnQsIHN0YXRpY19jYXN0PEpTT2JqZWN0Kj4oQVJHX3Ny
YzMpKTsKIH0KIAogSlNWYWx1ZSogTWFjaGluZTo6Y3RpX29wX25ld19lcnJvcihDVElfQVJHUykK
IHsKLSAgICBFeGVjU3RhdGUqIGV4ZWMgPSBBUkdfZXhlYzsKLSAgICBSZWdpc3RlciogciA9IEFS
R19yOwotICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gTWFjaGluZTo6Y29kZUJsb2NrKHIpOwor
ICAgIENhbGxGcmFtZSogY2FsbEZyYW1lID0gQVJHX2NhbGxGcmFtZTsKKyAgICBDb2RlQmxvY2sq
IGNvZGVCbG9jayA9IGNhbGxGcmFtZS0+Y29kZUJsb2NrKCk7CiAgICAgdW5zaWduZWQgdHlwZSA9
IEFSR19pbnQxOwogICAgIEpTVmFsdWUqIG1lc3NhZ2UgPSBBUkdfc3JjMjsKICAgICB1bnNpZ25l
ZCBsaW5lTnVtYmVyID0gQVJHX2ludDM7CiAKLSAgICByZXR1cm4gRXJyb3I6OmNyZWF0ZShleGVj
LCBzdGF0aWNfY2FzdDxFcnJvclR5cGU+KHR5cGUpLCBtZXNzYWdlLT50b1N0cmluZyhleGVjKSwg
bGluZU51bWJlciwgY29kZUJsb2NrLT5vd25lck5vZGUtPnNvdXJjZUlEKCksIGNvZGVCbG9jay0+
b3duZXJOb2RlLT5zb3VyY2VVUkwoKSk7CisgICAgcmV0dXJuIEVycm9yOjpjcmVhdGUoY2FsbEZy
YW1lLCBzdGF0aWNfY2FzdDxFcnJvclR5cGU+KHR5cGUpLCBtZXNzYWdlLT50b1N0cmluZyhjYWxs
RnJhbWUpLCBsaW5lTnVtYmVyLCBjb2RlQmxvY2stPm93bmVyTm9kZS0+c291cmNlSUQoKSwgY29k
ZUJsb2NrLT5vd25lck5vZGUtPnNvdXJjZVVSTCgpKTsKIH0KIAogdm9pZCBNYWNoaW5lOjpjdGlf
b3BfZGVidWcoQ1RJX0FSR1MpCiB7Ci0gICAgRXhlY1N0YXRlKiBleGVjID0gQVJHX2V4ZWM7Ci0g
ICAgUmVnaXN0ZXIqIHIgPSBBUkdfcjsKKyAgICBDYWxsRnJhbWUqIGNhbGxGcmFtZSA9IEFSR19j
YWxsRnJhbWU7CiAKICAgICBpbnQgZGVidWdIb29rSUQgPSBBUkdfaW50MTsKICAgICBpbnQgZmly
c3RMaW5lID0gQVJHX2ludDI7CiAgICAgaW50IGxhc3RMaW5lID0gQVJHX2ludDM7CiAKLSAgICBB
UkdfZ2xvYmFsRGF0YS0+bWFjaGluZS0+ZGVidWcoZXhlYywgciwgc3RhdGljX2Nhc3Q8RGVidWdI
b29rSUQ+KGRlYnVnSG9va0lEKSwgZmlyc3RMaW5lLCBsYXN0TGluZSk7CisgICAgQVJHX2dsb2Jh
bERhdGEtPm1hY2hpbmUtPmRlYnVnKGNhbGxGcmFtZSwgc3RhdGljX2Nhc3Q8RGVidWdIb29rSUQ+
KGRlYnVnSG9va0lEKSwgZmlyc3RMaW5lLCBsYXN0TGluZSk7CiB9CiAKIHZvaWQqIE1hY2hpbmU6
OmN0aV92bV90aHJvdyhDVElfQVJHUykKIHsKLSAgICBFeGVjU3RhdGUqIGV4ZWMgPSBBUkdfZXhl
YzsKLSAgICBSZWdpc3RlciogciA9IEFSR19yOwotICAgIENvZGVCbG9jayogY29kZUJsb2NrID0g
TWFjaGluZTo6Y29kZUJsb2NrKHIpOworICAgIENhbGxGcmFtZSogY2FsbEZyYW1lID0gQVJHX2Nh
bGxGcmFtZTsKKyAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IGNhbGxGcmFtZS0+Y29kZUJsb2Nr
KCk7CiAKICAgICBBU1NFUlQoY29kZUJsb2NrLT5jdGlSZXR1cm5BZGRyZXNzVlBDTWFwLmNvbnRh
aW5zKEFSR19nbG9iYWxEYXRhLT50aHJvd1JldHVybkFkZHJlc3MpKTsKICAgICB1bnNpZ25lZCB2
UENJbmRleCA9IGNvZGVCbG9jay0+Y3RpUmV0dXJuQWRkcmVzc1ZQQ01hcC5nZXQoQVJHX2dsb2Jh
bERhdGEtPnRocm93UmV0dXJuQWRkcmVzcyk7CkBAIC01Njk2LDE1ICs1NjE2LDE1IEBAIHZvaWQq
IE1hY2hpbmU6OmN0aV92bV90aHJvdyhDVElfQVJHUykKICAgICBBU1NFUlQoZXhjZXB0aW9uVmFs
dWUpOwogICAgIEFSR19nbG9iYWxEYXRhLT5leGNlcHRpb24gPSAwOwogCi0gICAgSW5zdHJ1Y3Rp
b24qIGhhbmRsZXJWUEMgPSBBUkdfZ2xvYmFsRGF0YS0+bWFjaGluZS0+dGhyb3dFeGNlcHRpb24o
ZXhlYywgZXhjZXB0aW9uVmFsdWUsIGNvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zLmJlZ2luKCkgKyB2
UENJbmRleCwgciwgZmFsc2UpOworICAgIEluc3RydWN0aW9uKiBoYW5kbGVyVlBDID0gQVJHX2ds
b2JhbERhdGEtPm1hY2hpbmUtPnRocm93RXhjZXB0aW9uKGNhbGxGcmFtZSwgZXhjZXB0aW9uVmFs
dWUsIGNvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zLmJlZ2luKCkgKyB2UENJbmRleCwgZmFsc2UpOwog
CiAgICAgaWYgKCFoYW5kbGVyVlBDKSB7CiAgICAgICAgICpBUkdfZXhjZXB0aW9uID0gZXhjZXB0
aW9uVmFsdWU7CiAgICAgICAgIHJldHVybiBKU0ltbWVkaWF0ZTo6bnVsbEltbWVkaWF0ZSgpOwog
ICAgIH0KIAotICAgIEFSR19zZXRSKHIpOwotICAgIHZvaWQqIGNhdGNoUm91dGluZSA9IE1hY2hp
bmU6OmNvZGVCbG9jayhyKS0+bmF0aXZlRXhjZXB0aW9uQ29kZUZvckhhbmRsZXJWUEMoaGFuZGxl
clZQQyk7CisgICAgQVJHX3NldENhbGxGcmFtZShjYWxsRnJhbWUpOworICAgIHZvaWQqIGNhdGNo
Um91dGluZSA9IGNhbGxGcmFtZS0+Y29kZUJsb2NrKCktPm5hdGl2ZUV4Y2VwdGlvbkNvZGVGb3JI
YW5kbGVyVlBDKGhhbmRsZXJWUEMpOwogICAgIEFTU0VSVChjYXRjaFJvdXRpbmUpOwogICAgIGN0
aVNldFJldHVybkFkZHJlc3MoJkNUSV9SRVRVUk5fQUREUkVTUywgY2F0Y2hSb3V0aW5lKTsKICAg
ICByZXR1cm4gZXhjZXB0aW9uVmFsdWU7CkluZGV4OiBKYXZhU2NyaXB0Q29yZS9WTS9NYWNoaW5l
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvVk0vTWFjaGluZS5oCShyZXZpc2lvbiAz
NzM1MikKKysrIEphdmFTY3JpcHRDb3JlL1ZNL01hY2hpbmUuaAkod29ya2luZyBjb3B5KQpAQCAt
NDQsNyArNDQsNiBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgIGNsYXNzIENvZGVCbG9jazsKICAg
ICBjbGFzcyBFdmFsTm9kZTsKLSAgICBjbGFzcyBFeGVjU3RhdGU7CiAgICAgY2xhc3MgRnVuY3Rp
b25Cb2R5Tm9kZTsKICAgICBjbGFzcyBJbnN0cnVjdGlvbjsKICAgICBjbGFzcyBJbnRlcm5hbEZ1
bmN0aW9uOwpAQCAtOTUsMTggKzk0LDE1IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgICAgIGJv
b2wgaXNPcGNvZGUoT3Bjb2RlIG9wY29kZSk7CiAgICAgICAgIAotICAgICAgICBKU1ZhbHVlKiBl
eGVjdXRlKFByb2dyYW1Ob2RlKiwgRXhlY1N0YXRlKiwgU2NvcGVDaGFpbk5vZGUqLCBKU09iamVj
dCogdGhpc09iaiwgSlNWYWx1ZSoqIGV4Y2VwdGlvbik7Ci0gICAgICAgIEpTVmFsdWUqIGV4ZWN1
dGUoRnVuY3Rpb25Cb2R5Tm9kZSosIEV4ZWNTdGF0ZSosIEpTRnVuY3Rpb24qLCBKU09iamVjdCog
dGhpc09iaiwgY29uc3QgQXJnTGlzdCYgYXJncywgU2NvcGVDaGFpbk5vZGUqLCBKU1ZhbHVlKiog
ZXhjZXB0aW9uKTsKLSAgICAgICAgSlNWYWx1ZSogZXhlY3V0ZShFdmFsTm9kZSogZXZhbE5vZGUs
IEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIHRoaXNPYmosIFNjb3BlQ2hhaW5Ob2RlKiBzY29w
ZUNoYWluLCBKU1ZhbHVlKiogZXhjZXB0aW9uKTsKLQotICAgICAgICBKU1ZhbHVlKiByZXRyaWV2
ZUFyZ3VtZW50cyhFeGVjU3RhdGUqLCBKU0Z1bmN0aW9uKikgY29uc3Q7Ci0gICAgICAgIEpTVmFs
dWUqIHJldHJpZXZlQ2FsbGVyKEV4ZWNTdGF0ZSosIEludGVybmFsRnVuY3Rpb24qKSBjb25zdDsK
LSAgICAgICAgdm9pZCByZXRyaWV2ZUxhc3RDYWxsZXIoRXhlY1N0YXRlKiBleGVjLCBpbnQmIGxp
bmVOdW1iZXIsIGludHB0cl90JiBzb3VyY2VJRCwgVVN0cmluZyYgc291cmNlVVJMLCBKU1ZhbHVl
KiYgZnVuY3Rpb24pIGNvbnN0OworICAgICAgICBKU1ZhbHVlKiBleGVjdXRlKFByb2dyYW1Ob2Rl
KiwgQ2FsbEZyYW1lKiwgU2NvcGVDaGFpbk5vZGUqLCBKU09iamVjdCogdGhpc09iaiwgSlNWYWx1
ZSoqIGV4Y2VwdGlvbik7CisgICAgICAgIEpTVmFsdWUqIGV4ZWN1dGUoRnVuY3Rpb25Cb2R5Tm9k
ZSosIENhbGxGcmFtZSosIEpTRnVuY3Rpb24qLCBKU09iamVjdCogdGhpc09iaiwgY29uc3QgQXJn
TGlzdCYgYXJncywgU2NvcGVDaGFpbk5vZGUqLCBKU1ZhbHVlKiogZXhjZXB0aW9uKTsKKyAgICAg
ICAgSlNWYWx1ZSogZXhlY3V0ZShFdmFsTm9kZSogZXZhbE5vZGUsIENhbGxGcmFtZSogZXhlYywg
SlNPYmplY3QqIHRoaXNPYmosIFNjb3BlQ2hhaW5Ob2RlKiBzY29wZUNoYWluLCBKU1ZhbHVlKiog
ZXhjZXB0aW9uKTsKKworICAgICAgICBKU1ZhbHVlKiByZXRyaWV2ZUFyZ3VtZW50cyhDYWxsRnJh
bWUqLCBKU0Z1bmN0aW9uKikgY29uc3Q7CisgICAgICAgIEpTVmFsdWUqIHJldHJpZXZlQ2FsbGVy
KENhbGxGcmFtZSosIEludGVybmFsRnVuY3Rpb24qKSBjb25zdDsKKyAgICAgICAgdm9pZCByZXRy
aWV2ZUxhc3RDYWxsZXIoQ2FsbEZyYW1lKiwgaW50JiBsaW5lTnVtYmVyLCBpbnRwdHJfdCYgc291
cmNlSUQsIFVTdHJpbmcmIHNvdXJjZVVSTCwgSlNWYWx1ZSomIGZ1bmN0aW9uKSBjb25zdDsKICAg
ICAgICAgCi0gICAgICAgIHN0YXRpYyBTY29wZUNoYWluTm9kZSogc2NvcGVDaGFpbihjb25zdCBS
ZWdpc3RlciogcikgeyByZXR1cm4gcltSZWdpc3RlckZpbGU6OlNjb3BlQ2hhaW5dLnNjb3BlQ2hh
aW4oKTsgfQotICAgICAgICBzdGF0aWMgQ29kZUJsb2NrKiBjb2RlQmxvY2soY29uc3QgUmVnaXN0
ZXIqIHIpIHsgcmV0dXJuIHJbUmVnaXN0ZXJGaWxlOjpDb2RlQmxvY2tdLmNvZGVCbG9jaygpOyB9
Ci0KLSAgICAgICAgdm9pZCBnZXRBcmd1bWVudHNEYXRhKFJlZ2lzdGVyKiBjYWxsRnJhbWUsIEpT
RnVuY3Rpb24qJiwgcHRyZGlmZl90JiBmaXJzdFBhcmFtZXRlckluZGV4LCBSZWdpc3RlciomIGFy
Z3YsIGludCYgYXJnYyk7CisgICAgICAgIHZvaWQgZ2V0QXJndW1lbnRzRGF0YShDYWxsRnJhbWUq
LCBKU0Z1bmN0aW9uKiYsIHB0cmRpZmZfdCYgZmlyc3RQYXJhbWV0ZXJJbmRleCwgUmVnaXN0ZXIq
JiBhcmd2LCBpbnQmIGFyZ2MpOwogICAgICAgICB2b2lkIHNldFRpbWVvdXRUaW1lKHVuc2lnbmVk
IHRpbWVvdXRUaW1lKSB7IG1fdGltZW91dFRpbWUgPSB0aW1lb3V0VGltZTsgfQogICAgICAgICAK
ICAgICAgICAgdm9pZCBzdGFydFRpbWVvdXRDaGVjaygpCkBAIC0yNDQsNDkgKzI0MCw0OSBAQCBu
YW1lc3BhY2UgSlNDIHsKIAogICAgICAgICBib29sIGlzSlNBcnJheShKU1ZhbHVlKiB2KSB7IHJl
dHVybiAhSlNJbW1lZGlhdGU6OmlzSW1tZWRpYXRlKHYpICYmIHYtPmFzQ2VsbCgpLT52cHRyKCkg
PT0gbV9qc0FycmF5VnB0cjsgfQogICAgICAgICBib29sIGlzSlNTdHJpbmcoSlNWYWx1ZSogdikg
eyByZXR1cm4gIUpTSW1tZWRpYXRlOjppc0ltbWVkaWF0ZSh2KSAmJiB2LT5hc0NlbGwoKS0+dnB0
cigpID09IG1fanNTdHJpbmdWcHRyOyB9Ci0gICAgICAgIAotICAgICAgICBBTFdBWVNfSU5MSU5F
IHN0YXRpYyB2b2lkIGluaXRpYWxpemVDYWxsRnJhbWUoUmVnaXN0ZXIqIGNhbGxGcmFtZSwgQ29k
ZUJsb2NrKiwgSW5zdHJ1Y3Rpb24qLCBTY29wZUNoYWluTm9kZSosIFJlZ2lzdGVyKiByLCBpbnQg
cmV0dXJuVmFsdWVSZWdpc3RlciwgaW50IGFyZ2MsIEpTVmFsdWUqIGZ1bmN0aW9uKTsKIAogICAg
IHByaXZhdGU6CiAgICAgICAgIGVudW0gRXhlY3V0aW9uRmxhZyB7IE5vcm1hbCwgSW5pdGlhbGl6
ZUFuZFJldHVybiB9OwogCi0gICAgICAgIE5FVkVSX0lOTElORSBKU1ZhbHVlKiBjYWxsRXZhbChF
eGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiB0aGlzT2JqLCBTY29wZUNoYWluTm9kZSogc2NvcGVD
aGFpbiwgUmVnaXN0ZXJGaWxlKiwgUmVnaXN0ZXIqIHIsIGludCBhcmd2LCBpbnQgYXJnYywgSlNW
YWx1ZSomIGV4Y2VwdGlvblZhbHVlKTsKLSAgICAgICAgSlNWYWx1ZSogZXhlY3V0ZShFdmFsTm9k
ZSosIEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiB0aGlzT2JqLCBpbnQgcmVnaXN0ZXJPZmZzZXQsIFNj
b3BlQ2hhaW5Ob2RlKiwgSlNWYWx1ZSoqIGV4Y2VwdGlvbik7CisgICAgICAgIE5FVkVSX0lOTElO
RSBKU1ZhbHVlKiBjYWxsRXZhbChDYWxsRnJhbWUqLCBKU09iamVjdCogdGhpc09iamVjdCwgU2Nv
cGVDaGFpbk5vZGUqLCBSZWdpc3RlckZpbGUqLCBpbnQgYXJndiwgaW50IGFyZ2MsIEpTVmFsdWUq
JiBleGNlcHRpb25WYWx1ZSk7CisgICAgICAgIEpTVmFsdWUqIGV4ZWN1dGUoRXZhbE5vZGUqLCBD
YWxsRnJhbWUqLCBKU09iamVjdCogdGhpc09iamVjdCwgaW50IHJlZ2lzdGVyT2Zmc2V0LCBTY29w
ZUNoYWluTm9kZSosIEpTVmFsdWUqKiBleGNlcHRpb24pOwogCi0gICAgICAgIE5FVkVSX0lOTElO
RSB2b2lkIGRlYnVnKEV4ZWNTdGF0ZSosIFJlZ2lzdGVyKiwgRGVidWdIb29rSUQsIGludCBmaXJz
dExpbmUsIGludCBsYXN0TGluZSk7CisgICAgICAgIE5FVkVSX0lOTElORSB2b2lkIGRlYnVnKENh
bGxGcmFtZSosIERlYnVnSG9va0lELCBpbnQgZmlyc3RMaW5lLCBpbnQgbGFzdExpbmUpOwogCi0g
ICAgICAgIE5FVkVSX0lOTElORSBib29sIHJlc29sdmUoRXhlY1N0YXRlKiBleGVjLCBJbnN0cnVj
dGlvbiogdlBDLCBSZWdpc3RlciogciwgSlNWYWx1ZSomIGV4Y2VwdGlvblZhbHVlKTsKLSAgICAg
ICAgTkVWRVJfSU5MSU5FIGJvb2wgcmVzb2x2ZVNraXAoRXhlY1N0YXRlKiBleGVjLCBJbnN0cnVj
dGlvbiogdlBDLCBSZWdpc3RlciogciwgSlNWYWx1ZSomIGV4Y2VwdGlvblZhbHVlKTsKLSAgICAg
ICAgTkVWRVJfSU5MSU5FIGJvb2wgcmVzb2x2ZUdsb2JhbChFeGVjU3RhdGUqIGV4ZWMsIEluc3Ry
dWN0aW9uKiB2UEMsIFJlZ2lzdGVyKiByLCBKU1ZhbHVlKiYgZXhjZXB0aW9uVmFsdWUpOwotICAg
ICAgICBORVZFUl9JTkxJTkUgdm9pZCByZXNvbHZlQmFzZShFeGVjU3RhdGUqIGV4ZWMsIEluc3Ry
dWN0aW9uKiB2UEMsIFJlZ2lzdGVyKiByKTsKLSAgICAgICAgTkVWRVJfSU5MSU5FIGJvb2wgcmVz
b2x2ZUJhc2VBbmRQcm9wZXJ0eShFeGVjU3RhdGUqIGV4ZWMsIEluc3RydWN0aW9uKiB2UEMsIFJl
Z2lzdGVyKiByLCBKU1ZhbHVlKiYgZXhjZXB0aW9uVmFsdWUpOwotICAgICAgICBORVZFUl9JTkxJ
TkUgU2NvcGVDaGFpbk5vZGUqIGNyZWF0ZUV4Y2VwdGlvblNjb3BlKEV4ZWNTdGF0ZSogZXhlYywg
Y29uc3QgSW5zdHJ1Y3Rpb24qIHZQQywgUmVnaXN0ZXIqIHIpOworICAgICAgICBORVZFUl9JTkxJ
TkUgYm9vbCByZXNvbHZlKENhbGxGcmFtZSosIEluc3RydWN0aW9uKiwgSlNWYWx1ZSomIGV4Y2Vw
dGlvblZhbHVlKTsKKyAgICAgICAgTkVWRVJfSU5MSU5FIGJvb2wgcmVzb2x2ZVNraXAoQ2FsbEZy
YW1lKiwgSW5zdHJ1Y3Rpb24qLCBKU1ZhbHVlKiYgZXhjZXB0aW9uVmFsdWUpOworICAgICAgICBO
RVZFUl9JTkxJTkUgYm9vbCByZXNvbHZlR2xvYmFsKENhbGxGcmFtZSosIEluc3RydWN0aW9uKiwg
SlNWYWx1ZSomIGV4Y2VwdGlvblZhbHVlKTsKKyAgICAgICAgTkVWRVJfSU5MSU5FIHZvaWQgcmVz
b2x2ZUJhc2UoQ2FsbEZyYW1lKiwgSW5zdHJ1Y3Rpb24qIHZQQyk7CisgICAgICAgIE5FVkVSX0lO
TElORSBib29sIHJlc29sdmVCYXNlQW5kUHJvcGVydHkoQ2FsbEZyYW1lKiwgSW5zdHJ1Y3Rpb24q
LCBKU1ZhbHVlKiYgZXhjZXB0aW9uVmFsdWUpOworICAgICAgICBORVZFUl9JTkxJTkUgU2NvcGVD
aGFpbk5vZGUqIGNyZWF0ZUV4Y2VwdGlvblNjb3BlKENhbGxGcmFtZSosIGNvbnN0IEluc3RydWN0
aW9uKiB2UEMpOwogCi0gICAgICAgIE5FVkVSX0lOTElORSBib29sIHVud2luZENhbGxGcmFtZShF
eGVjU3RhdGUqJiwgSlNWYWx1ZSosIGNvbnN0IEluc3RydWN0aW9uKiYsIENvZGVCbG9jayomLCBS
ZWdpc3RlciomKTsKLSAgICAgICAgTkVWRVJfSU5MSU5FIEluc3RydWN0aW9uKiB0aHJvd0V4Y2Vw
dGlvbihFeGVjU3RhdGUqLCBKU1ZhbHVlKiYsIGNvbnN0IEluc3RydWN0aW9uKiwgUmVnaXN0ZXIq
JiwgYm9vbCk7Ci0gICAgICAgIE5FVkVSX0lOTElORSBib29sIHJlc29sdmVCYXNlQW5kRnVuYyhF
eGVjU3RhdGUqIGV4ZWMsIEluc3RydWN0aW9uKiB2UEMsIFJlZ2lzdGVyKiByLCBKU1ZhbHVlKiYg
ZXhjZXB0aW9uVmFsdWUpOworICAgICAgICBORVZFUl9JTkxJTkUgYm9vbCB1bndpbmRDYWxsRnJh
bWUoQ2FsbEZyYW1lKiYsIEpTVmFsdWUqLCBjb25zdCBJbnN0cnVjdGlvbiomLCBDb2RlQmxvY2sq
Jik7CisgICAgICAgIE5FVkVSX0lOTElORSBJbnN0cnVjdGlvbiogdGhyb3dFeGNlcHRpb24oQ2Fs
bEZyYW1lKiYsIEpTVmFsdWUqJiwgY29uc3QgSW5zdHJ1Y3Rpb24qLCBib29sKTsKKyAgICAgICAg
TkVWRVJfSU5MSU5FIGJvb2wgcmVzb2x2ZUJhc2VBbmRGdW5jKENhbGxGcmFtZSosIEluc3RydWN0
aW9uKiwgSlNWYWx1ZSomIGV4Y2VwdGlvblZhbHVlKTsKIAotICAgICAgICBSZWdpc3RlciogY2Fs
bEZyYW1lKEV4ZWNTdGF0ZSosIEludGVybmFsRnVuY3Rpb24qKSBjb25zdDsKKyAgICAgICAgc3Rh
dGljIEFMV0FZU19JTkxJTkUgQ2FsbEZyYW1lKiBzbGlkZVJlZ2lzdGVyV2luZG93Rm9yQ2FsbChD
b2RlQmxvY2sqLCBSZWdpc3RlckZpbGUqLCBDYWxsRnJhbWUqLCBzaXplX3QgcmVnaXN0ZXJPZmZz
ZXQsIGludCBhcmdjKTsKIAotICAgICAgICBKU1ZhbHVlKiBwcml2YXRlRXhlY3V0ZShFeGVjdXRp
b25GbGFnLCBSZWdpc3RlckZpbGUqLCBSZWdpc3RlciosIEpTVmFsdWUqKiBleGNlcHRpb24pOwor
ICAgICAgICBzdGF0aWMgQ2FsbEZyYW1lKiBmaW5kRnVuY3Rpb25DYWxsRnJhbWUoQ2FsbEZyYW1l
KiwgSW50ZXJuYWxGdW5jdGlvbiopOwogCi0gICAgICAgIHZvaWQgZHVtcENhbGxGcmFtZShjb25z
dCBSZWdpc3RlckZpbGUqLCBjb25zdCBSZWdpc3RlciopOwotICAgICAgICB2b2lkIGR1bXBSZWdp
c3RlcnMoY29uc3QgUmVnaXN0ZXJGaWxlKiwgY29uc3QgUmVnaXN0ZXIqKTsKKyAgICAgICAgSlNW
YWx1ZSogcHJpdmF0ZUV4ZWN1dGUoRXhlY3V0aW9uRmxhZywgUmVnaXN0ZXJGaWxlKiwgQ2FsbEZy
YW1lKiwgSlNWYWx1ZSoqIGV4Y2VwdGlvbik7CisKKyAgICAgICAgdm9pZCBkdW1wQ2FsbEZyYW1l
KGNvbnN0IFJlZ2lzdGVyRmlsZSosIENhbGxGcmFtZSopOworICAgICAgICB2b2lkIGR1bXBSZWdp
c3RlcnMoY29uc3QgUmVnaXN0ZXJGaWxlKiwgQ2FsbEZyYW1lKik7CiAKICAgICAgICAgSlNWYWx1
ZSogY2hlY2tUaW1lb3V0KEpTR2xvYmFsT2JqZWN0Kik7CiAgICAgICAgIHZvaWQgcmVzZXRUaW1l
b3V0Q2hlY2soKTsKIAotICAgICAgICB2b2lkIHRyeUNhY2hlR2V0QnlJRChFeGVjU3RhdGUqLCBD
b2RlQmxvY2sqLCBJbnN0cnVjdGlvbiogdlBDLCBKU1ZhbHVlKiBiYXNlVmFsdWUsIGNvbnN0IElk
ZW50aWZpZXImIHByb3BlcnR5TmFtZSwgY29uc3QgUHJvcGVydHlTbG90Jik7CisgICAgICAgIHZv
aWQgdHJ5Q2FjaGVHZXRCeUlEKENhbGxGcmFtZSosIENvZGVCbG9jayosIEluc3RydWN0aW9uKiwg
SlNWYWx1ZSogYmFzZVZhbHVlLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIGNvbnN0
IFByb3BlcnR5U2xvdCYpOwogICAgICAgICB2b2lkIHVuY2FjaGVHZXRCeUlEKENvZGVCbG9jayos
IEluc3RydWN0aW9uKiB2UEMpOwotICAgICAgICB2b2lkIHRyeUNhY2hlUHV0QnlJRChFeGVjU3Rh
dGUqIGV4ZWMsIENvZGVCbG9jayosIEluc3RydWN0aW9uKiB2UEMsIEpTVmFsdWUqIGJhc2VWYWx1
ZSwgY29uc3QgUHV0UHJvcGVydHlTbG90Jik7CisgICAgICAgIHZvaWQgdHJ5Q2FjaGVQdXRCeUlE
KENhbGxGcmFtZSosIENvZGVCbG9jayosIEluc3RydWN0aW9uKiwgSlNWYWx1ZSogYmFzZVZhbHVl
LCBjb25zdCBQdXRQcm9wZXJ0eVNsb3QmKTsKICAgICAgICAgdm9pZCB1bmNhY2hlUHV0QnlJRChD
b2RlQmxvY2sqLCBJbnN0cnVjdGlvbiogdlBDKTsKIAogI2lmIEVOQUJMRShDVEkpCi0gICAgICAg
IHZvaWQgdHJ5Q1RJQ2FjaGVHZXRCeUlEKEV4ZWNTdGF0ZSosIENvZGVCbG9jayosIHZvaWQqIHJl
dHVybkFkZHJlc3MsIEpTVmFsdWUqIGJhc2VWYWx1ZSwgY29uc3QgSWRlbnRpZmllciYgcHJvcGVy
dHlOYW1lLCBjb25zdCBQcm9wZXJ0eVNsb3QmKTsKLSAgICAgICAgdm9pZCB0cnlDVElDYWNoZVB1
dEJ5SUQoRXhlY1N0YXRlKiwgQ29kZUJsb2NrKiwgdm9pZCogcmV0dXJuQWRkcmVzcywgSlNWYWx1
ZSogYmFzZVZhbHVlLCBjb25zdCBQdXRQcm9wZXJ0eVNsb3QmKTsKKyAgICAgICAgdm9pZCB0cnlD
VElDYWNoZUdldEJ5SUQoQ2FsbEZyYW1lKiwgQ29kZUJsb2NrKiwgdm9pZCogcmV0dXJuQWRkcmVz
cywgSlNWYWx1ZSogYmFzZVZhbHVlLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIGNv
bnN0IFByb3BlcnR5U2xvdCYpOworICAgICAgICB2b2lkIHRyeUNUSUNhY2hlUHV0QnlJRChDYWxs
RnJhbWUqLCBDb2RlQmxvY2sqLCB2b2lkKiByZXR1cm5BZGRyZXNzLCBKU1ZhbHVlKiBiYXNlVmFs
dWUsIGNvbnN0IFB1dFByb3BlcnR5U2xvdCYpOwogCi0gICAgICAgIHZvaWQqIGdldENUSUFycmF5
TGVuZ3RoVHJhbXBvbGluZShFeGVjU3RhdGUqLCBDb2RlQmxvY2sqKTsKLSAgICAgICAgdm9pZCog
Z2V0Q1RJU3RyaW5nTGVuZ3RoVHJhbXBvbGluZShFeGVjU3RhdGUqLCBDb2RlQmxvY2sqKTsKKyAg
ICAgICAgdm9pZCogZ2V0Q1RJQXJyYXlMZW5ndGhUcmFtcG9saW5lKENhbGxGcmFtZSosIENvZGVC
bG9jayopOworICAgICAgICB2b2lkKiBnZXRDVElTdHJpbmdMZW5ndGhUcmFtcG9saW5lKENhbGxG
cmFtZSosIENvZGVCbG9jayopOwogCiAgICAgICAgIHZvaWQqIG1fY3RpQXJyYXlMZW5ndGhUcmFt
cG9saW5lOwogICAgICAgICB2b2lkKiBtX2N0aVN0cmluZ0xlbmd0aFRyYW1wb2xpbmU7CkBAIC0z
MTQsMzcgKzMxMCw2IEBAIG5hbWVzcGFjZSBKU0MgewogI2VuZGlmCiAgICAgfTsKIAotICAgIEFM
V0FZU19JTkxJTkUgdm9pZCBNYWNoaW5lOjppbml0aWFsaXplQ2FsbEZyYW1lKFJlZ2lzdGVyKiBj
YWxsRnJhbWUsIENvZGVCbG9jayogY29kZUJsb2NrLCBJbnN0cnVjdGlvbiogdlBDLCBTY29wZUNo
YWluTm9kZSogc2NvcGVDaGFpbiwgUmVnaXN0ZXIqIHIsIGludCByZXR1cm5WYWx1ZVJlZ2lzdGVy
LCBpbnQgYXJnYywgSlNWYWx1ZSogZnVuY3Rpb24pCi0gICAgewotICAgICAgICBBU1NFUlQocik7
IC8vIHVzZSBtYWtlSG9zdENhbGxGcmFtZVBvaW50ZXIoMCkgdG8gY3JlYXRlIGEgaG9zdCBjYWxs
IGZyYW1lIHNlbnRpbmVsLgotICAgICAgICBjYWxsRnJhbWVbUmVnaXN0ZXJGaWxlOjpDb2RlQmxv
Y2tdID0gY29kZUJsb2NrOwotICAgICAgICBjYWxsRnJhbWVbUmVnaXN0ZXJGaWxlOjpTY29wZUNo
YWluXSA9IHNjb3BlQ2hhaW47Ci0gICAgICAgIGNhbGxGcmFtZVtSZWdpc3RlckZpbGU6OkNhbGxl
clJlZ2lzdGVyc10gPSByOwotICAgICAgICBjYWxsRnJhbWVbUmVnaXN0ZXJGaWxlOjpSZXR1cm5Q
Q10gPSB2UEM7Ci0gICAgICAgIGNhbGxGcmFtZVtSZWdpc3RlckZpbGU6OlJldHVyblZhbHVlUmVn
aXN0ZXJdID0gcmV0dXJuVmFsdWVSZWdpc3RlcjsKLSAgICAgICAgY2FsbEZyYW1lW1JlZ2lzdGVy
RmlsZTo6QXJndW1lbnRDb3VudF0gPSBhcmdjOyAvLyBvcmlnaW5hbCBhcmd1bWVudCBjb3VudCAo
Zm9yIHRoZSBzYWtlIG9mIHRoZSAiYXJndW1lbnRzIiBvYmplY3QpCi0gICAgICAgIGNhbGxGcmFt
ZVtSZWdpc3RlckZpbGU6OkNhbGxlZV0gPSBmdW5jdGlvbjsKLSAgICAgICAgY2FsbEZyYW1lW1Jl
Z2lzdGVyRmlsZTo6T3B0aW9uYWxDYWxsZWVBY3RpdmF0aW9uXSA9IG51bGxKU1ZhbHVlOwotICAg
ICAgICBjYWxsRnJhbWVbUmVnaXN0ZXJGaWxlOjpPcHRpb25hbENhbGxlZUFyZ3VtZW50c10gPSBu
dWxsSlNWYWx1ZTsKLSAgICB9Ci0KLSAgICBjb25zdCBpbnRwdHJfdCBIb3N0Q2FsbEZyYW1lTWFz
ayA9IDE7Ci0KLSAgICBpbmxpbmUgUmVnaXN0ZXIqIG1ha2VIb3N0Q2FsbEZyYW1lUG9pbnRlcihS
ZWdpc3RlciogY2FsbEZyYW1lKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nh
c3Q8UmVnaXN0ZXIqPihyZWludGVycHJldF9jYXN0PGludHB0cl90PihjYWxsRnJhbWUpIHwgSG9z
dENhbGxGcmFtZU1hc2spOwotICAgIH0KLQotICAgIGlubGluZSBib29sIGlzSG9zdENhbGxGcmFt
ZShSZWdpc3RlciogY2FsbEZyYW1lKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0
X2Nhc3Q8aW50cHRyX3Q+KGNhbGxGcmFtZSkgJiBIb3N0Q2FsbEZyYW1lTWFzazsKLSAgICB9Ci0K
LSAgICBpbmxpbmUgUmVnaXN0ZXIqIHN0cmlwSG9zdENhbGxGcmFtZUJpdChSZWdpc3RlciogY2Fs
bEZyYW1lKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8UmVnaXN0ZXIq
PihyZWludGVycHJldF9jYXN0PGludHB0cl90PihjYWxsRnJhbWUpICYgfkhvc3RDYWxsRnJhbWVN
YXNrKTsKLSAgICB9Ci0KIH0gLy8gbmFtZXNwYWNlIEpTQwogCiAjZW5kaWYgLy8gTWFjaGluZV9o
CkluZGV4OiBKYXZhU2NyaXB0Q29yZS9WTS9SZWdpc3Rlci5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFT
Y3JpcHRDb3JlL1ZNL1JlZ2lzdGVyLmgJKHJldmlzaW9uIDM3MzUyKQorKysgSmF2YVNjcmlwdENv
cmUvVk0vUmVnaXN0ZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMzQsMTMgKzM0LDE5IEBACiAKIG5h
bWVzcGFjZSBKU0MgewogCisgICAgY2xhc3MgQXJndW1lbnRzOwogICAgIGNsYXNzIENvZGVCbG9j
azsKICAgICBjbGFzcyBFeGVjU3RhdGU7CisgICAgY2xhc3MgSlNBY3RpdmF0aW9uOworICAgIGNs
YXNzIEpTRnVuY3Rpb247CiAgICAgY2xhc3MgSlNQcm9wZXJ0eU5hbWVJdGVyYXRvcjsKICAgICBj
bGFzcyBKU1ZhbHVlOwogICAgIGNsYXNzIFNjb3BlQ2hhaW5Ob2RlOworCiAgICAgc3RydWN0IElu
c3RydWN0aW9uOwotICAgIAorCisgICAgdHlwZWRlZiBFeGVjU3RhdGUgQ2FsbEZyYW1lOworCiAg
ICAgc3RhdGljIEpTVmFsdWUqIGNvbnN0IG51bGxKU1ZhbHVlID0gMDsKIAogICAgIGNsYXNzIFJl
Z2lzdGVyIHsKQEAgLTQ4LDk0ICs1NCwxMTMgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIFJl
Z2lzdGVyKCk7CiAgICAgICAgIFJlZ2lzdGVyKEpTVmFsdWUqKTsKIAotICAgICAgICBKU1ZhbHVl
KiBqc1ZhbHVlKEV4ZWNTdGF0ZSopIGNvbnN0OworICAgICAgICBKU1ZhbHVlKiBqc1ZhbHVlKENh
bGxGcmFtZSopIGNvbnN0OwogICAgICAgICBKU1ZhbHVlKiBnZXRKU1ZhbHVlKCkgY29uc3Q7CiAK
ICAgICAgICAgYm9vbCBtYXJrZWQoKSBjb25zdDsKICAgICAgICAgdm9pZCBtYXJrKCk7CiAgICAg
ICAgIAogICAgIHByaXZhdGU6CisgICAgICAgIGZyaWVuZCBjbGFzcyBFeGVjU3RhdGU7CiAgICAg
ICAgIGZyaWVuZCBjbGFzcyBNYWNoaW5lOwogCi0gICAgICAgIC8vIE9ubHkgdGhlIE1hY2hpbmUg
c2hvdWxkIHVzZSB0aGVzZSBmdW5jdGlvbnMuCisgICAgICAgIC8vIE9ubHkgQ2FsbEZyYW1lIGFu
ZCBNYWNoaW5lIHNob3VsZCB1c2UgdGhlc2UgZnVuY3Rpb25zLgorCisgICAgICAgIFJlZ2lzdGVy
KGludHB0cl90KTsKIAorICAgICAgICBSZWdpc3RlcihKU0FjdGl2YXRpb24qKTsKKyAgICAgICAg
UmVnaXN0ZXIoQXJndW1lbnRzKik7CisgICAgICAgIFJlZ2lzdGVyKENhbGxGcmFtZSopOwogICAg
ICAgICBSZWdpc3RlcihDb2RlQmxvY2sqKTsKKyAgICAgICAgUmVnaXN0ZXIoSlNGdW5jdGlvbiop
OworICAgICAgICBSZWdpc3RlcihKU1Byb3BlcnR5TmFtZUl0ZXJhdG9yKik7CiAgICAgICAgIFJl
Z2lzdGVyKFNjb3BlQ2hhaW5Ob2RlKik7Ci0gICAgICAgIFJlZ2lzdGVyKGludHB0cl90KTsKLSAg
ICAgICAgUmVnaXN0ZXIoUmVnaXN0ZXIqKTsKICAgICAgICAgUmVnaXN0ZXIoSW5zdHJ1Y3Rpb24q
KTsKLSAgICAgICAgUmVnaXN0ZXIoSlNQcm9wZXJ0eU5hbWVJdGVyYXRvciopOwotICAgICAgICBl
eHBsaWNpdCBSZWdpc3Rlcih2b2lkKik7CiAKKyAgICAgICAgaW50cHRyX3QgaSgpIGNvbnN0Owor
ICAgICAgICB2b2lkKiB2KCkgY29uc3Q7CisKKyAgICAgICAgSlNBY3RpdmF0aW9uKiBhY3RpdmF0
aW9uKCkgY29uc3Q7CisgICAgICAgIEFyZ3VtZW50cyogYXJndW1lbnRzKCkgY29uc3Q7CisgICAg
ICAgIENhbGxGcmFtZSogY2FsbEZyYW1lKCkgY29uc3Q7CiAgICAgICAgIENvZGVCbG9jayogY29k
ZUJsb2NrKCkgY29uc3Q7CisgICAgICAgIEpTRnVuY3Rpb24qIGZ1bmN0aW9uKCkgY29uc3Q7Cisg
ICAgICAgIEpTUHJvcGVydHlOYW1lSXRlcmF0b3IqIHByb3BlcnR5TmFtZUl0ZXJhdG9yKCkgY29u
c3Q7CiAgICAgICAgIFNjb3BlQ2hhaW5Ob2RlKiBzY29wZUNoYWluKCkgY29uc3Q7Ci0gICAgICAg
IGludHB0cl90IGkoKSBjb25zdDsKLSAgICAgICAgUmVnaXN0ZXIqIHIoKSBjb25zdDsKICAgICAg
ICAgSW5zdHJ1Y3Rpb24qIHZQQygpIGNvbnN0OwotICAgICAgICBKU1Byb3BlcnR5TmFtZUl0ZXJh
dG9yKiBqc1Byb3BlcnR5TmFtZUl0ZXJhdG9yKCkgY29uc3Q7Ci0gICAgICAgIHZvaWQqIHYoKSBj
b25zdDsKIAogICAgICAgICB1bmlvbiB7Ci0gICAgICAgIHByaXZhdGU6Ci0gICAgICAgICAgICBm
cmllbmQgY2xhc3MgUmVnaXN0ZXI7CisgICAgICAgICAgICBpbnRwdHJfdCBpOworICAgICAgICAg
ICAgdm9pZCogdjsKKyAgICAgICAgICAgIEpTVmFsdWUqIHZhbHVlOwogCisgICAgICAgICAgICBK
U0FjdGl2YXRpb24qIGFjdGl2YXRpb247CisgICAgICAgICAgICBBcmd1bWVudHMqIGFyZ3VtZW50
czsKKyAgICAgICAgICAgIENhbGxGcmFtZSogY2FsbEZyYW1lOwogICAgICAgICAgICAgQ29kZUJs
b2NrKiBjb2RlQmxvY2s7Ci0gICAgICAgICAgICBJbnN0cnVjdGlvbiogdlBDOwotICAgICAgICAg
ICAgSlNWYWx1ZSoganNWYWx1ZTsKKyAgICAgICAgICAgIEpTRnVuY3Rpb24qIGZ1bmN0aW9uOwor
ICAgICAgICAgICAgSlNQcm9wZXJ0eU5hbWVJdGVyYXRvciogcHJvcGVydHlOYW1lSXRlcmF0b3I7
CiAgICAgICAgICAgICBTY29wZUNoYWluTm9kZSogc2NvcGVDaGFpbjsKLSAgICAgICAgICAgIEpT
UHJvcGVydHlOYW1lSXRlcmF0b3IqIGpzUHJvcGVydHlOYW1lSXRlcmF0b3I7Ci0gICAgICAgICAg
ICBSZWdpc3RlciogcjsKLSAgICAgICAgICAgIHZvaWQqIHY7Ci0gICAgICAgICAgICBpbnRwdHJf
dCBpOworICAgICAgICAgICAgSW5zdHJ1Y3Rpb24qIHZQQzsKICAgICAgICAgfSB1OwogCiAjaWZu
ZGVmIE5ERUJVRwogICAgICAgICBlbnVtIHsKLSAgICAgICAgICAgIENvZGVCbG9ja1R5cGUgPSAw
LCAKLSAgICAgICAgICAgIEluc3RydWN0aW9uVHlwZSwgCi0gICAgICAgICAgICBKU1ZhbHVlVHlw
ZSwgCi0gICAgICAgICAgICBTY29wZUNoYWluTm9kZVR5cGUsIAotICAgICAgICAgICAgSlNQcm9w
ZXJ0eU5hbWVJdGVyYXRvclR5cGUsIAotICAgICAgICAgICAgUmVnaXN0ZXJUeXBlLCAKLSAgICAg
ICAgICAgIEludFR5cGUKKyAgICAgICAgICAgIEVtcHR5VHlwZSwKKworICAgICAgICAgICAgSW50
VHlwZSwKKyAgICAgICAgICAgIFZhbHVlVHlwZSwKKworICAgICAgICAgICAgQWN0aXZhdGlvblR5
cGUsCisgICAgICAgICAgICBBcmd1bWVudHNUeXBlLAorICAgICAgICAgICAgQ2FsbEZyYW1lVHlw
ZSwKKyAgICAgICAgICAgIENvZGVCbG9ja1R5cGUsCisgICAgICAgICAgICBGdW5jdGlvblR5cGUs
CisgICAgICAgICAgICBJbnN0cnVjdGlvblR5cGUsCisgICAgICAgICAgICBQcm9wZXJ0eU5hbWVJ
dGVyYXRvclR5cGUsCisgICAgICAgICAgICBSZWdpc3RlclR5cGUsCisgICAgICAgICAgICBTY29w
ZUNoYWluTm9kZVR5cGUKICAgICAgICAgfSBtX3R5cGU7CiAjZW5kaWYKLQotLy8gRklYTUU6IFRo
ZSBjb21tZW50ZWQgb3V0IEFTU0VSVHMgYmVsb3cgYXJlIHZhbGlkOyBOREVCVUcgQ1RJIHNob3Vs
ZCBzZXQgdGhlc2Ugd2hlbiB1cCB0byBkYXRlLgotLy8gICAgICAgIHN0YXRpYyBpbmxpbmUgcHRy
ZGlmZl90IG9mZnNldE9mX3R5cGUoKQotLy8gICAgICAgIHsKLS8vICAgICAgICAgICAgcmV0dXJu
IE9CSkVDVF9PRkZTRVQoUmVnaXN0ZXIsIG1fdHlwZSk7Ci0vLyAgICAgICAgfQogICAgIH07CiAK
KyNpZm5kZWYgTkRFQlVHCisgICAgI2RlZmluZSBTRVRfVFlQRSh0eXBlKSBtX3R5cGUgPSAodHlw
ZSkKKyAgICAvLyBGSVhNRTogVGhlIENUSSBjb2RlIHRvIHB1dCB2YWx1ZSBpbnRvIHJlZ2lzdGVy
cyBkb2Vzbid0IHNldCBtX3R5cGUuCisgICAgLy8gT25jZSBpdCBkb2VzLCB3ZSBjYW4gdHVybiB0
aGlzIGFzc2VydGlvbiBiYWNrIG9uLgorICAgICNkZWZpbmUgQVNTRVJUX1RZUEUodHlwZSkKKyNl
bHNlCisgICAgI2RlZmluZSBTRVRfVFlQRSh0eXBlKQorICAgICNkZWZpbmUgQVNTRVJUX1RZUEUo
dHlwZSkKKyNlbmRpZgorCiAgICAgQUxXQVlTX0lOTElORSBSZWdpc3Rlcjo6UmVnaXN0ZXIoKQog
ICAgIHsKICNpZm5kZWYgTkRFQlVHCisgICAgICAgIFNFVF9UWVBFKEVtcHR5VHlwZSk7CiAgICAg
ICAgICp0aGlzID0gbnVsbEpTVmFsdWU7CiAjZW5kaWYKICAgICB9CiAKICAgICBBTFdBWVNfSU5M
SU5FIFJlZ2lzdGVyOjpSZWdpc3RlcihKU1ZhbHVlKiB2KQogICAgIHsKLSNpZm5kZWYgTkRFQlVH
Ci0gICAgICAgIG1fdHlwZSA9IEpTVmFsdWVUeXBlOwotI2VuZGlmCi0gICAgICAgIHUuanNWYWx1
ZSA9IHY7CisgICAgICAgIFNFVF9UWVBFKFZhbHVlVHlwZSk7CisgICAgICAgIHUudmFsdWUgPSB2
OwogICAgIH0KICAgICAKICAgICAvLyBUaGlzIGZ1bmN0aW9uIGlzIHNjYWZmb2xkaW5nIGZvciBs
ZWdhY3kgY2xpZW50cy4gSXQgd2lsbCBldmVudHVhbGx5IGdvIGF3YXkuCi0gICAgQUxXQVlTX0lO
TElORSBKU1ZhbHVlKiBSZWdpc3Rlcjo6anNWYWx1ZShFeGVjU3RhdGUqKSBjb25zdAorICAgIEFM
V0FZU19JTkxJTkUgSlNWYWx1ZSogUmVnaXN0ZXI6OmpzVmFsdWUoQ2FsbEZyYW1lKikgY29uc3QK
ICAgICB7CiAgICAgICAgIC8vIE9uY2UgcmVnaXN0ZXJzIGhvbGQgZG91YmxlcywgdGhpcyBmdW5j
dGlvbiB3aWxsIGFsbG9jYXRlIGEgSlNWYWx1ZSoKICAgICAgICAgLy8gaWYgdGhlIHJlZ2lzdGVy
IGRvZXNuJ3QgaG9sZCBvbmUgYWxyZWFkeS4gCi0vLyAgICAgICAgQVNTRVJUKG1fdHlwZSA9PSBK
U1ZhbHVlVHlwZSk7Ci0gICAgICAgIHJldHVybiB1LmpzVmFsdWU7CisgICAgICAgIEFTU0VSVF9U
WVBFKFZhbHVlVHlwZSk7CisgICAgICAgIHJldHVybiB1LnZhbHVlOwogICAgIH0KICAgICAKICAg
ICBBTFdBWVNfSU5MSU5FIEpTVmFsdWUqIFJlZ2lzdGVyOjpnZXRKU1ZhbHVlKCkgY29uc3QKICAg
ICB7Ci0vLyAgICAgICAgQVNTRVJUKG1fdHlwZSA9PSBKU1ZhbHVlVHlwZSk7Ci0gICAgICAgIHJl
dHVybiB1LmpzVmFsdWU7CisgICAgICAgIEFTU0VSVF9UWVBFKEpTVmFsdWVUeXBlKTsKKyAgICAg
ICAgcmV0dXJuIHUudmFsdWU7CiAgICAgfQogICAgIAogICAgIEFMV0FZU19JTkxJTkUgYm9vbCBS
ZWdpc3Rlcjo6bWFya2VkKCkgY29uc3QKQEAgLTE1MCwxMDAgKzE3NSwxMjIgQEAgbmFtZXNwYWNl
IEpTQyB7CiAgICAgCiAgICAgLy8gTWFjaGluZSBmdW5jdGlvbnMKIAorICAgIEFMV0FZU19JTkxJ
TkUgUmVnaXN0ZXI6OlJlZ2lzdGVyKEFyZ3VtZW50cyogYXJndW1lbnRzKQorICAgIHsKKyAgICAg
ICAgU0VUX1RZUEUoQXJndW1lbnRzVHlwZSk7CisgICAgICAgIHUuYXJndW1lbnRzID0gYXJndW1l
bnRzOworICAgIH0KKworICAgIEFMV0FZU19JTkxJTkUgUmVnaXN0ZXI6OlJlZ2lzdGVyKEpTQWN0
aXZhdGlvbiogYWN0aXZhdGlvbikKKyAgICB7CisgICAgICAgIFNFVF9UWVBFKEFjdGl2YXRpb25U
eXBlKTsKKyAgICAgICAgdS5hY3RpdmF0aW9uID0gYWN0aXZhdGlvbjsKKyAgICB9CisKKyAgICBB
TFdBWVNfSU5MSU5FIFJlZ2lzdGVyOjpSZWdpc3RlcihDYWxsRnJhbWUqIGNhbGxGcmFtZSkKKyAg
ICB7CisgICAgICAgIFNFVF9UWVBFKENhbGxGcmFtZVR5cGUpOworICAgICAgICB1LmNhbGxGcmFt
ZSA9IGNhbGxGcmFtZTsKKyAgICB9CisKICAgICBBTFdBWVNfSU5MSU5FIFJlZ2lzdGVyOjpSZWdp
c3RlcihDb2RlQmxvY2sqIGNvZGVCbG9jaykKICAgICB7Ci0jaWZuZGVmIE5ERUJVRwotICAgICAg
ICBtX3R5cGUgPSBDb2RlQmxvY2tUeXBlOwotI2VuZGlmCisgICAgICAgIFNFVF9UWVBFKENvZGVC
bG9ja1R5cGUpOwogICAgICAgICB1LmNvZGVCbG9jayA9IGNvZGVCbG9jazsKICAgICB9CiAKKyAg
ICBBTFdBWVNfSU5MSU5FIFJlZ2lzdGVyOjpSZWdpc3RlcihKU0Z1bmN0aW9uKiBmdW5jdGlvbikK
KyAgICB7CisgICAgICAgIFNFVF9UWVBFKEZ1bmN0aW9uVHlwZSk7CisgICAgICAgIHUuZnVuY3Rp
b24gPSBmdW5jdGlvbjsKKyAgICB9CisKICAgICBBTFdBWVNfSU5MSU5FIFJlZ2lzdGVyOjpSZWdp
c3RlcihJbnN0cnVjdGlvbiogdlBDKQogICAgIHsKLSNpZm5kZWYgTkRFQlVHCi0gICAgICAgIG1f
dHlwZSA9IEluc3RydWN0aW9uVHlwZTsKLSNlbmRpZgorICAgICAgICBTRVRfVFlQRShJbnN0cnVj
dGlvblR5cGUpOwogICAgICAgICB1LnZQQyA9IHZQQzsKICAgICB9CiAKICAgICBBTFdBWVNfSU5M
SU5FIFJlZ2lzdGVyOjpSZWdpc3RlcihTY29wZUNoYWluTm9kZSogc2NvcGVDaGFpbikKICAgICB7
Ci0jaWZuZGVmIE5ERUJVRwotICAgICAgICBtX3R5cGUgPSBTY29wZUNoYWluTm9kZVR5cGU7Ci0j
ZW5kaWYKKyAgICAgICAgU0VUX1RZUEUoU2NvcGVDaGFpbk5vZGVUeXBlKTsKICAgICAgICAgdS5z
Y29wZUNoYWluID0gc2NvcGVDaGFpbjsKICAgICB9CiAKLSAgICBBTFdBWVNfSU5MSU5FIFJlZ2lz
dGVyOjpSZWdpc3RlcihKU1Byb3BlcnR5TmFtZUl0ZXJhdG9yKiBqc1Byb3BlcnR5TmFtZUl0ZXJh
dG9yKQorICAgIEFMV0FZU19JTkxJTkUgUmVnaXN0ZXI6OlJlZ2lzdGVyKEpTUHJvcGVydHlOYW1l
SXRlcmF0b3IqIHByb3BlcnR5TmFtZUl0ZXJhdG9yKQogICAgIHsKLSNpZm5kZWYgTkRFQlVHCi0g
ICAgICAgIG1fdHlwZSA9IEpTUHJvcGVydHlOYW1lSXRlcmF0b3JUeXBlOwotI2VuZGlmCi0gICAg
ICAgIHUuanNQcm9wZXJ0eU5hbWVJdGVyYXRvciA9IGpzUHJvcGVydHlOYW1lSXRlcmF0b3I7Ci0g
ICAgfQotCi0gICAgQUxXQVlTX0lOTElORSBSZWdpc3Rlcjo6UmVnaXN0ZXIoUmVnaXN0ZXIqIHIp
Ci0gICAgewotI2lmbmRlZiBOREVCVUcKLSAgICAgICAgbV90eXBlID0gUmVnaXN0ZXJUeXBlOwot
I2VuZGlmCi0gICAgICAgIHUuciA9IHI7CisgICAgICAgIFNFVF9UWVBFKFByb3BlcnR5TmFtZUl0
ZXJhdG9yVHlwZSk7CisgICAgICAgIHUucHJvcGVydHlOYW1lSXRlcmF0b3IgPSBwcm9wZXJ0eU5h
bWVJdGVyYXRvcjsKICAgICB9CiAKICAgICBBTFdBWVNfSU5MSU5FIFJlZ2lzdGVyOjpSZWdpc3Rl
cihpbnRwdHJfdCBpKQogICAgIHsKLSNpZm5kZWYgTkRFQlVHCi0gICAgICAgIG1fdHlwZSA9IElu
dFR5cGU7Ci0jZW5kaWYKKyAgICAgICAgU0VUX1RZUEUoSW50VHlwZSk7CiAgICAgICAgIHUuaSA9
IGk7CiAgICAgfQogCi0gICAgQUxXQVlTX0lOTElORSBSZWdpc3Rlcjo6UmVnaXN0ZXIodm9pZCog
dikKKyAgICBBTFdBWVNfSU5MSU5FIGludHB0cl90IFJlZ2lzdGVyOjppKCkgY29uc3QKKyAgICB7
CisgICAgICAgIEFTU0VSVF9UWVBFKEludFR5cGUpOworICAgICAgICByZXR1cm4gdS5pOworICAg
IH0KKyAgICAKKyAgICBBTFdBWVNfSU5MSU5FIHZvaWQqIFJlZ2lzdGVyOjp2KCkgY29uc3QKICAg
ICB7Ci0gICAgICAgIHUudiA9IHY7CisgICAgICAgIHJldHVybiB1LnY7CiAgICAgfQogCi0gICAg
QUxXQVlTX0lOTElORSBDb2RlQmxvY2sqIFJlZ2lzdGVyOjpjb2RlQmxvY2soKSBjb25zdAorICAg
IEFMV0FZU19JTkxJTkUgSlNBY3RpdmF0aW9uKiBSZWdpc3Rlcjo6YWN0aXZhdGlvbigpIGNvbnN0
CiAgICAgewotLy8gICAgICAgIEFTU0VSVChtX3R5cGUgPT0gQ29kZUJsb2NrVHlwZSk7Ci0gICAg
ICAgIHJldHVybiB1LmNvZGVCbG9jazsKKyAgICAgICAgQVNTRVJUX1RZUEUoQWN0aXZhdGlvblR5
cGUpOworICAgICAgICByZXR1cm4gdS5hY3RpdmF0aW9uOwogICAgIH0KICAgICAKLSAgICBBTFdB
WVNfSU5MSU5FIFNjb3BlQ2hhaW5Ob2RlKiBSZWdpc3Rlcjo6c2NvcGVDaGFpbigpIGNvbnN0Cisg
ICAgQUxXQVlTX0lOTElORSBBcmd1bWVudHMqIFJlZ2lzdGVyOjphcmd1bWVudHMoKSBjb25zdAog
ICAgIHsKLS8vICAgICAgICBBU1NFUlQobV90eXBlID09IFNjb3BlQ2hhaW5Ob2RlVHlwZSk7Ci0g
ICAgICAgIHJldHVybiB1LnNjb3BlQ2hhaW47CisgICAgICAgIEFTU0VSVF9UWVBFKEFyZ3VtZW50
c1R5cGUpOworICAgICAgICByZXR1cm4gdS5hcmd1bWVudHM7CiAgICAgfQogICAgIAotICAgIEFM
V0FZU19JTkxJTkUgaW50cHRyX3QgUmVnaXN0ZXI6OmkoKSBjb25zdAorICAgIEFMV0FZU19JTkxJ
TkUgQ2FsbEZyYW1lKiBSZWdpc3Rlcjo6Y2FsbEZyYW1lKCkgY29uc3QKICAgICB7Ci0vLyAgICAg
ICAgQVNTRVJUKG1fdHlwZSA9PSBJbnRUeXBlKTsKLSAgICAgICAgcmV0dXJuIHUuaTsKKyAgICAg
ICAgQVNTRVJUX1RZUEUoQ2FsbEZyYW1lVHlwZSk7CisgICAgICAgIHJldHVybiB1LmNhbGxGcmFt
ZTsKICAgICB9CiAgICAgCi0gICAgQUxXQVlTX0lOTElORSBSZWdpc3RlciogUmVnaXN0ZXI6OnIo
KSBjb25zdAorICAgIEFMV0FZU19JTkxJTkUgQ29kZUJsb2NrKiBSZWdpc3Rlcjo6Y29kZUJsb2Nr
KCkgY29uc3QKICAgICB7Ci0vLyAgICAgICAgQVNTRVJUKG1fdHlwZSA9PSBSZWdpc3RlclR5cGUp
OwotICAgICAgICByZXR1cm4gdS5yOworICAgICAgICBBU1NFUlRfVFlQRShDb2RlQmxvY2tUeXBl
KTsKKyAgICAgICAgcmV0dXJuIHUuY29kZUJsb2NrOwogICAgIH0KICAgICAKLSAgICBBTFdBWVNf
SU5MSU5FIEluc3RydWN0aW9uKiBSZWdpc3Rlcjo6dlBDKCkgY29uc3QKKyAgICBBTFdBWVNfSU5M
SU5FIEpTRnVuY3Rpb24qIFJlZ2lzdGVyOjpmdW5jdGlvbigpIGNvbnN0CiAgICAgewotLy8gICAg
ICAgIEFTU0VSVChtX3R5cGUgPT0gSW5zdHJ1Y3Rpb25UeXBlKTsKLSAgICAgICAgcmV0dXJuIHUu
dlBDOworICAgICAgICBBU1NFUlRfVFlQRShGdW5jdGlvblR5cGUpOworICAgICAgICByZXR1cm4g
dS5mdW5jdGlvbjsKICAgICB9CiAgICAgCi0gICAgQUxXQVlTX0lOTElORSBKU1Byb3BlcnR5TmFt
ZUl0ZXJhdG9yKiBSZWdpc3Rlcjo6anNQcm9wZXJ0eU5hbWVJdGVyYXRvcigpIGNvbnN0CisgICAg
QUxXQVlTX0lOTElORSBKU1Byb3BlcnR5TmFtZUl0ZXJhdG9yKiBSZWdpc3Rlcjo6cHJvcGVydHlO
YW1lSXRlcmF0b3IoKSBjb25zdAogICAgIHsKLS8vICAgICAgICBBU1NFUlQobV90eXBlID09IEpT
UHJvcGVydHlOYW1lSXRlcmF0b3JUeXBlKTsKLSAgICAgICAgcmV0dXJuIHUuanNQcm9wZXJ0eU5h
bWVJdGVyYXRvcjsKKyAgICAgICAgQVNTRVJUX1RZUEUoUHJvcGVydHlOYW1lSXRlcmF0b3JUeXBl
KTsKKyAgICAgICAgcmV0dXJuIHUucHJvcGVydHlOYW1lSXRlcmF0b3I7CiAgICAgfQogICAgIAot
ICAgIEFMV0FZU19JTkxJTkUgdm9pZCogUmVnaXN0ZXI6OnYoKSBjb25zdAorICAgIEFMV0FZU19J
TkxJTkUgU2NvcGVDaGFpbk5vZGUqIFJlZ2lzdGVyOjpzY29wZUNoYWluKCkgY29uc3QKICAgICB7
Ci0gICAgICAgIHJldHVybiB1LnY7CisgICAgICAgIEFTU0VSVF9UWVBFKFNjb3BlQ2hhaW5Ob2Rl
VHlwZSk7CisgICAgICAgIHJldHVybiB1LnNjb3BlQ2hhaW47CisgICAgfQorICAgIAorICAgIEFM
V0FZU19JTkxJTkUgSW5zdHJ1Y3Rpb24qIFJlZ2lzdGVyOjp2UEMoKSBjb25zdAorICAgIHsKKyAg
ICAgICAgQVNTRVJUX1RZUEUoSW5zdHJ1Y3Rpb25UeXBlKTsKKyAgICAgICAgcmV0dXJuIHUudlBD
OwogICAgIH0KIAorICAgICN1bmRlZiBTRVRfVFlQRQorICAgICN1bmRlZiBBU1NFUlRfVFlQRQor
CiB9IC8vIG5hbWVzcGFjZSBKU0MKIAogbmFtZXNwYWNlIFdURiB7CkluZGV4OiBKYXZhU2NyaXB0
Q29yZS9WTS9SZWdpc3RlckZpbGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9WTS9S
ZWdpc3RlckZpbGUuaAkocmV2aXNpb24gMzczNTIpCisrKyBKYXZhU2NyaXB0Q29yZS9WTS9SZWdp
c3RlckZpbGUuaAkod29ya2luZyBjb3B5KQpAQCAtOTQsNyArOTQsNyBAQCBuYW1lc3BhY2UgSlND
IHsKIAogICAgICAgICAgICAgQ29kZUJsb2NrID0gLTksCiAgICAgICAgICAgICBTY29wZUNoYWlu
ID0gLTgsCi0gICAgICAgICAgICBDYWxsZXJSZWdpc3RlcnMgPSAtNywKKyAgICAgICAgICAgIENh
bGxlckZyYW1lID0gLTcsCiAgICAgICAgICAgICBSZXR1cm5QQyA9IC02LAogICAgICAgICAgICAg
UmV0dXJuVmFsdWVSZWdpc3RlciA9IC01LAogICAgICAgICAgICAgQXJndW1lbnRDb3VudCA9IC00
LApJbmRleDogSmF2YVNjcmlwdENvcmUva2pzL0FyZ3VtZW50cy5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEph
dmFTY3JpcHRDb3JlL2tqcy9Bcmd1bWVudHMuaAkocmV2aXNpb24gMzczNTIpCisrKyBKYXZhU2Ny
aXB0Q29yZS9ranMvQXJndW1lbnRzLmgJKHdvcmtpbmcgY29weSkKQEAgLTUxLDcgKzUxLDcgQEAg
bmFtZXNwYWNlIEpTQyB7CiAKICAgICBjbGFzcyBBcmd1bWVudHMgOiBwdWJsaWMgSlNPYmplY3Qg
ewogICAgIHB1YmxpYzoKLSAgICAgICAgQXJndW1lbnRzKEV4ZWNTdGF0ZSosIFJlZ2lzdGVyKiBj
YWxsRnJhbWUpOworICAgICAgICBBcmd1bWVudHMoQ2FsbEZyYW1lKik7CiAgICAgICAgIHZpcnR1
YWwgfkFyZ3VtZW50cygpOwogCiAgICAgICAgIHN0YXRpYyBjb25zdCBDbGFzc0luZm8gaW5mbzsK
QEAgLTc0LDI2ICs3NCwyNiBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgICAgICB2aXJ0dWFsIGNv
bnN0IENsYXNzSW5mbyogY2xhc3NJbmZvKCkgY29uc3QgeyByZXR1cm4gJmluZm87IH0KIAotICAg
ICAgICB2b2lkIGluaXQoRXhlY1N0YXRlKiwgUmVnaXN0ZXIqIGNhbGxGcmFtZSk7CisgICAgICAg
IHZvaWQgaW5pdChDYWxsRnJhbWUqKTsKIAogICAgICAgICBPd25QdHI8QXJndW1lbnRzRGF0YT4g
ZDsKICAgICB9OwogCi0gICAgaW5saW5lIEFyZ3VtZW50czo6QXJndW1lbnRzKEV4ZWNTdGF0ZSog
ZXhlYywgUmVnaXN0ZXIqIGNhbGxGcmFtZSkKLSAgICAgICAgOiBKU09iamVjdChleGVjLT5sZXhp
Y2FsR2xvYmFsT2JqZWN0KCktPmFyZ3VtZW50c1N0cnVjdHVyZSgpKQorICAgIGlubGluZSBBcmd1
bWVudHM6OkFyZ3VtZW50cyhDYWxsRnJhbWUqIGNhbGxGcmFtZSkKKyAgICAgICAgOiBKU09iamVj
dChjYWxsRnJhbWUtPmxleGljYWxHbG9iYWxPYmplY3QoKS0+YXJndW1lbnRzU3RydWN0dXJlKCkp
CiAgICAgICAgICwgZChuZXcgQXJndW1lbnRzRGF0YSkKICAgICB7CiAgICAgICAgIEpTRnVuY3Rp
b24qIGNhbGxlZTsKICAgICAgICAgcHRyZGlmZl90IGZpcnN0UGFyYW1ldGVySW5kZXg7CiAgICAg
ICAgIFJlZ2lzdGVyKiBhcmd2OwogICAgICAgICBpbnQgbnVtQXJndW1lbnRzOwotICAgICAgICBl
eGVjLT5tYWNoaW5lKCktPmdldEFyZ3VtZW50c0RhdGEoY2FsbEZyYW1lLCBjYWxsZWUsIGZpcnN0
UGFyYW1ldGVySW5kZXgsIGFyZ3YsIG51bUFyZ3VtZW50cyk7CisgICAgICAgIGNhbGxGcmFtZS0+
bWFjaGluZSgpLT5nZXRBcmd1bWVudHNEYXRhKGNhbGxGcmFtZSwgY2FsbGVlLCBmaXJzdFBhcmFt
ZXRlckluZGV4LCBhcmd2LCBudW1Bcmd1bWVudHMpOwogCiAgICAgICAgIGQtPm51bVBhcmFtZXRl
cnMgPSBjYWxsZWUtPm1fYm9keS0+cGFyYW1ldGVyQ291bnQoKTsKICAgICAgICAgZC0+Zmlyc3RQ
YXJhbWV0ZXJJbmRleCA9IGZpcnN0UGFyYW1ldGVySW5kZXg7CiAgICAgICAgIGQtPm51bUFyZ3Vt
ZW50cyA9IG51bUFyZ3VtZW50czsKIAotICAgICAgICBkLT5yZWdpc3RlcnMgPSBjYWxsRnJhbWU7
CisgICAgICAgIGQtPnJlZ2lzdGVycyA9IGNhbGxGcmFtZS0+cmVnaXN0ZXJzKCk7CiAKICAgICAg
ICAgUmVnaXN0ZXIqIGV4dHJhQXJndW1lbnRzOwogICAgICAgICBpZiAoZC0+bnVtQXJndW1lbnRz
IDw9IGQtPm51bVBhcmFtZXRlcnMpCkluZGV4OiBKYXZhU2NyaXB0Q29yZS9ranMvRGVidWdnZXJD
YWxsRnJhbWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL2tqcy9EZWJ1Z2dlckNh
bGxGcmFtZS5jcHAJKHJldmlzaW9uIDM3MzUyKQorKysgSmF2YVNjcmlwdENvcmUva2pzL0RlYnVn
Z2VyQ2FsbEZyYW1lLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzgsMTggKzM4LDE4IEBAIG5hbWVz
cGFjZSBKU0MgewogCiBjb25zdCBVU3RyaW5nKiBEZWJ1Z2dlckNhbGxGcmFtZTo6ZnVuY3Rpb25O
YW1lKCkgY29uc3QKIHsKLSAgICBpZiAoIW1fY29kZUJsb2NrKQorICAgIGlmICghbV9jYWxsRnJh
bWUtPmNvZGVCbG9jaygpKQogICAgICAgICByZXR1cm4gMDsKIAotICAgIEpTRnVuY3Rpb24qIGZ1
bmN0aW9uID0gc3RhdGljX2Nhc3Q8SlNGdW5jdGlvbio+KG1fcmVnaXN0ZXJzW1JlZ2lzdGVyRmls
ZTo6Q2FsbGVlXS5nZXRKU1ZhbHVlKCkpOworICAgIEpTRnVuY3Rpb24qIGZ1bmN0aW9uID0gc3Rh
dGljX2Nhc3Q8SlNGdW5jdGlvbio+KG1fY2FsbEZyYW1lLT5jYWxsZWUoKSk7CiAgICAgaWYgKCFm
dW5jdGlvbikKICAgICAgICAgcmV0dXJuIDA7Ci0gICAgcmV0dXJuICZmdW5jdGlvbi0+bmFtZSht
X3Njb3BlQ2hhaW4tPmdsb2JhbERhdGEpOworICAgIHJldHVybiAmZnVuY3Rpb24tPm5hbWUoJm1f
Y2FsbEZyYW1lLT5nbG9iYWxEYXRhKCkpOwogfQogCiBEZWJ1Z2dlckNhbGxGcmFtZTo6VHlwZSBE
ZWJ1Z2dlckNhbGxGcmFtZTo6dHlwZSgpIGNvbnN0CiB7Ci0gICAgaWYgKG1fcmVnaXN0ZXJzW1Jl
Z2lzdGVyRmlsZTo6Q2FsbGVlXS5nZXRKU1ZhbHVlKCkpCisgICAgaWYgKG1fY2FsbEZyYW1lLT5j
YWxsZWUoKSkKICAgICAgICAgcmV0dXJuIEZ1bmN0aW9uVHlwZTsKIAogICAgIHJldHVybiBQcm9n
cmFtVHlwZTsKQEAgLTU3LDI1ICs1NywyNiBAQCBEZWJ1Z2dlckNhbGxGcmFtZTo6VHlwZSBEZWJ1
Z2dlckNhbGxGcmFtCiAKIEpTT2JqZWN0KiBEZWJ1Z2dlckNhbGxGcmFtZTo6dGhpc09iamVjdCgp
IGNvbnN0CiB7Ci0gICAgaWYgKCFtX2NvZGVCbG9jaykKKyAgICBpZiAoIW1fY2FsbEZyYW1lLT5j
b2RlQmxvY2soKSkKICAgICAgICAgcmV0dXJuIDA7CiAKLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8
SlNPYmplY3QqPihtX3JlZ2lzdGVyc1ttX2NvZGVCbG9jay0+dGhpc1JlZ2lzdGVyXS5nZXRKU1Zh
bHVlKCkpOworICAgIC8vIEZJWE1FOiBXaHkgaXMgaXQgc2FmZSB0byBjYXN0IHRoaXMgdG8gSlNP
YmplY3Q/CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PEpTT2JqZWN0Kj4obV9jYWxsRnJhbWUtPnRo
aXNWYWx1ZSgpKTsKIH0KIAogSlNWYWx1ZSogRGVidWdnZXJDYWxsRnJhbWU6OmV2YWx1YXRlKGNv
bnN0IFVTdHJpbmcmIHNjcmlwdCwgSlNWYWx1ZSomIGV4Y2VwdGlvbikgY29uc3QKIHsKLSAgICBp
ZiAoIW1fY29kZUJsb2NrKQorICAgIGlmICghbV9jYWxsRnJhbWUtPmNvZGVCbG9jaygpKQogICAg
ICAgICByZXR1cm4gMDsKIAogICAgIGludCBlcnJMaW5lOwogICAgIFVTdHJpbmcgZXJyTXNnOwog
ICAgIFNvdXJjZUNvZGUgc291cmNlID0gbWFrZVNvdXJjZShzY3JpcHQpOwotICAgIFJlZlB0cjxF
dmFsTm9kZT4gZXZhbE5vZGUgPSBtX3Njb3BlQ2hhaW4tPmdsb2JhbERhdGEtPnBhcnNlci0+cGFy
c2U8RXZhbE5vZGU+KENhbGxGcmFtZTo6Y3JlYXRlKG1fcmVnaXN0ZXJzKSwgc291cmNlLCAmZXJy
TGluZSwgJmVyck1zZyk7CisgICAgUmVmUHRyPEV2YWxOb2RlPiBldmFsTm9kZSA9IG1fY2FsbEZy
YW1lLT5zY29wZUNoYWluKCktPmdsb2JhbERhdGEtPnBhcnNlci0+cGFyc2U8RXZhbE5vZGU+KG1f
Y2FsbEZyYW1lLCBzb3VyY2UsICZlcnJMaW5lLCAmZXJyTXNnKTsKICAgICBpZiAoIWV2YWxOb2Rl
KQotICAgICAgICByZXR1cm4gRXJyb3I6OmNyZWF0ZShDYWxsRnJhbWU6OmNyZWF0ZShtX3JlZ2lz
dGVycyksIFN5bnRheEVycm9yLCBlcnJNc2csIGVyckxpbmUsIHNvdXJjZS5wcm92aWRlcigpLT5h
c0lEKCksIHNvdXJjZS5wcm92aWRlcigpLT51cmwoKSk7CisgICAgICAgIHJldHVybiBFcnJvcjo6
Y3JlYXRlKG1fY2FsbEZyYW1lLCBTeW50YXhFcnJvciwgZXJyTXNnLCBlcnJMaW5lLCBzb3VyY2Uu
cHJvdmlkZXIoKS0+YXNJRCgpLCBzb3VyY2UucHJvdmlkZXIoKS0+dXJsKCkpOwogCi0gICAgcmV0
dXJuIG1fc2NvcGVDaGFpbi0+Z2xvYmFsRGF0YS0+bWFjaGluZS0+ZXhlY3V0ZShldmFsTm9kZS5n
ZXQoKSwgQ2FsbEZyYW1lOjpjcmVhdGUobV9yZWdpc3RlcnMpLCB0aGlzT2JqZWN0KCksIG1fc2Nv
cGVDaGFpbiwgJmV4Y2VwdGlvbik7CisgICAgcmV0dXJuIG1fY2FsbEZyYW1lLT5zY29wZUNoYWlu
KCktPmdsb2JhbERhdGEtPm1hY2hpbmUtPmV4ZWN1dGUoZXZhbE5vZGUuZ2V0KCksIG1fY2FsbEZy
YW1lLCB0aGlzT2JqZWN0KCksIG1fY2FsbEZyYW1lLT5zY29wZUNoYWluKCksICZleGNlcHRpb24p
OwogfQogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IEphdmFTY3JpcHRDb3JlL2tqcy9EZWJ1
Z2dlckNhbGxGcmFtZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL2tqcy9EZWJ1Z2dl
ckNhbGxGcmFtZS5oCShyZXZpc2lvbiAzNzM1MikKKysrIEphdmFTY3JpcHRDb3JlL2tqcy9EZWJ1
Z2dlckNhbGxGcmFtZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOSwzNiArMjksMjIgQEAKICNpZm5k
ZWYgRGVidWdnZXJDYWxsRnJhbWVfaAogI2RlZmluZSBEZWJ1Z2dlckNhbGxGcmFtZV9oCiAKKyNp
bmNsdWRlICJFeGVjU3RhdGUuaCIKKwogbmFtZXNwYWNlIEpTQyB7CiAgICAgCi0gICAgY2xhc3Mg
Q29kZUJsb2NrOwotICAgIGNsYXNzIEV4ZWNTdGF0ZTsKLSAgICBjbGFzcyBKU0dsb2JhbE9iamVj
dDsKLSAgICBjbGFzcyBKU09iamVjdDsKLSAgICBjbGFzcyBKU1ZhbHVlOwotICAgIGNsYXNzIE1h
Y2hpbmU7Ci0gICAgY2xhc3MgVVN0cmluZzsKLSAgICBjbGFzcyBSZWdpc3RlcjsKLSAgICBjbGFz
cyBTY29wZUNoYWluTm9kZTsKLSAgICAKICAgICBjbGFzcyBEZWJ1Z2dlckNhbGxGcmFtZSB7CiAg
ICAgcHVibGljOgotICAgICAgICBlbnVtIFR5cGUgewotICAgICAgICAgICAgUHJvZ3JhbVR5cGUs
Ci0gICAgICAgICAgICBGdW5jdGlvblR5cGUKLSAgICAgICAgfTsKLQotICAgICAgICBEZWJ1Z2dl
ckNhbGxGcmFtZShKU0dsb2JhbE9iamVjdCogZHluYW1pY0dsb2JhbE9iamVjdCwgY29uc3QgQ29k
ZUJsb2NrKiBjb2RlQmxvY2ssIFNjb3BlQ2hhaW5Ob2RlKiBzY29wZUNoYWluLCBSZWdpc3Rlciog
ciwgSlNWYWx1ZSogZXhjZXB0aW9uKQotICAgICAgICAgICAgOiBtX2R5bmFtaWNHbG9iYWxPYmpl
Y3QoZHluYW1pY0dsb2JhbE9iamVjdCkKLSAgICAgICAgICAgICwgbV9jb2RlQmxvY2soY29kZUJs
b2NrKQotICAgICAgICAgICAgLCBtX3Njb3BlQ2hhaW4oc2NvcGVDaGFpbikKLSAgICAgICAgICAg
ICwgbV9yZWdpc3RlcnMocikKKyAgICAgICAgZW51bSBUeXBlIHsgUHJvZ3JhbVR5cGUsIEZ1bmN0
aW9uVHlwZSB9OworCisgICAgICAgIERlYnVnZ2VyQ2FsbEZyYW1lKENhbGxGcmFtZSogY2FsbEZy
YW1lLCBKU1ZhbHVlKiBleGNlcHRpb24pCisgICAgICAgICAgICA6IG1fY2FsbEZyYW1lKGNhbGxG
cmFtZSkKICAgICAgICAgICAgICwgbV9leGNlcHRpb24oZXhjZXB0aW9uKQogICAgICAgICB7CiAg
ICAgICAgIH0KIAotICAgICAgICBKU0dsb2JhbE9iamVjdCogZHluYW1pY0dsb2JhbE9iamVjdCgp
IGNvbnN0IHsgcmV0dXJuIG1fZHluYW1pY0dsb2JhbE9iamVjdDsgfQotICAgICAgICBjb25zdCBT
Y29wZUNoYWluTm9kZSogc2NvcGVDaGFpbigpIGNvbnN0IHsgcmV0dXJuIG1fc2NvcGVDaGFpbjsg
fQorICAgICAgICBKU0dsb2JhbE9iamVjdCogZHluYW1pY0dsb2JhbE9iamVjdCgpIGNvbnN0IHsg
cmV0dXJuIG1fY2FsbEZyYW1lLT5keW5hbWljR2xvYmFsT2JqZWN0KCk7IH0KKyAgICAgICAgY29u
c3QgU2NvcGVDaGFpbk5vZGUqIHNjb3BlQ2hhaW4oKSBjb25zdCB7IHJldHVybiBtX2NhbGxGcmFt
ZS0+c2NvcGVDaGFpbigpOyB9CiAgICAgICAgIGNvbnN0IFVTdHJpbmcqIGZ1bmN0aW9uTmFtZSgp
IGNvbnN0OwogICAgICAgICBUeXBlIHR5cGUoKSBjb25zdDsKICAgICAgICAgSlNPYmplY3QqIHRo
aXNPYmplY3QoKSBjb25zdDsKQEAgLTY2LDEwICs1Miw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAg
ICAgICBKU1ZhbHVlKiBleGNlcHRpb24oKSBjb25zdCB7IHJldHVybiBtX2V4Y2VwdGlvbjsgfQog
CiAgICAgcHJpdmF0ZToKLSAgICAgICAgSlNHbG9iYWxPYmplY3QqIG1fZHluYW1pY0dsb2JhbE9i
amVjdDsKLSAgICAgICAgY29uc3QgQ29kZUJsb2NrKiBtX2NvZGVCbG9jazsKLSAgICAgICAgU2Nv
cGVDaGFpbk5vZGUqIG1fc2NvcGVDaGFpbjsKLSAgICAgICAgUmVnaXN0ZXIqIG1fcmVnaXN0ZXJz
OworICAgICAgICBDYWxsRnJhbWUqIG1fY2FsbEZyYW1lOwogICAgICAgICBKU1ZhbHVlKiBtX2V4
Y2VwdGlvbjsKICAgICB9OwogCkluZGV4OiBKYXZhU2NyaXB0Q29yZS9ranMvRXhlY1N0YXRlLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9ranMvRXhlY1N0YXRlLmNwcAkocmV2aXNp
b24gMzczNTIpCisrKyBKYXZhU2NyaXB0Q29yZS9ranMvRXhlY1N0YXRlLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMSArMSwzMyBAQAotLyogZGVsZXRlIG1lICovCisvKgorICogIENvcHlyaWdodCAo
QykgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogIFRoaXMgbGli
cmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAq
ICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIg
b3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3Ry
aWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhP
VVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAq
ICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBT
ZWUgdGhlIEdOVQorICogIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBk
ZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIGxp
YnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqICB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZp
ZnRoIEZsb29yLAorICogIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICoKKyAqLworCisj
aW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiRXhlY1N0YXRlLmgiCisKKyNpbmNsdWRlICJD
b2RlQmxvY2suaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK0pTVmFsdWUqIENhbGxGcmFtZTo6dGhp
c1ZhbHVlKCkKK3sKKyAgICByZXR1cm4gdGhpc1tjb2RlQmxvY2soKS0+dGhpc1JlZ2lzdGVyXS5q
c1ZhbHVlKHRoaXMpOworfQorCit9CkluZGV4OiBKYXZhU2NyaXB0Q29yZS9ranMvRXhlY1N0YXRl
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUva2pzL0V4ZWNTdGF0ZS5oCShyZXZpc2lv
biAzNzM1MikKKysrIEphdmFTY3JpcHRDb3JlL2tqcy9FeGVjU3RhdGUuaAkod29ya2luZyBjb3B5
KQpAQCAtMjMsNjAgKzIzLDY1IEBACiAjaWZuZGVmIEV4ZWNTdGF0ZV9oCiAjZGVmaW5lIEV4ZWNT
dGF0ZV9oCiAKKy8vIEZJWE1FOiBSZW5hbWUgdGhpcyBmaWxlIHRvIENhbGxGcmFtZS5oLgorCiAj
aW5jbHVkZSAiSlNHbG9iYWxEYXRhLmgiCiAjaW5jbHVkZSAiTWFjaGluZS5oIgogI2luY2x1ZGUg
IlNjb3BlQ2hhaW4uaCIKIAogbmFtZXNwYWNlIEpTQyAgewogCi0gICAgY2xhc3MgRXhlY1N0YXRl
OwotICAgIGNsYXNzIEpTVmFsdWU7Ci0gICAgY2xhc3MgUmVnaXN0ZXI7Ci0KLSAgICB0eXBlZGVm
IEV4ZWNTdGF0ZSBDYWxsRnJhbWU7CisgICAgY2xhc3MgQXJndW1lbnRzOworICAgIGNsYXNzIEpT
QWN0aXZhdGlvbjsKIAogICAgIC8vIFJlcHJlc2VudHMgdGhlIGN1cnJlbnQgc3RhdGUgb2Ygc2Ny
aXB0IGV4ZWN1dGlvbi4KICAgICAvLyBQYXNzZWQgYXMgdGhlIGZpcnN0IGFyZ3VtZW50IHRvIG1v
c3QgZnVuY3Rpb25zLgotICAgIGNsYXNzIEV4ZWNTdGF0ZSA6IHByaXZhdGUgUmVnaXN0ZXIsIE5v
bmNvcHlhYmxlIHsKKyAgICBjbGFzcyBFeGVjU3RhdGUgOiBwcml2YXRlIFJlZ2lzdGVyIHsKICAg
ICBwdWJsaWM6Ci0gICAgICAgIHN0YXRpYyBDYWxsRnJhbWUqIGNyZWF0ZShSZWdpc3RlciogY2Fs
bEZyYW1lQmFzZSkgeyByZXR1cm4gc3RhdGljX2Nhc3Q8Q2FsbEZyYW1lKj4oY2FsbEZyYW1lQmFz
ZSk7IH0KLSAgICAgICAgUmVnaXN0ZXIqIHJlZ2lzdGVycygpIHsgcmV0dXJuIHRoaXM7IH0KKyAg
ICAgICAgSlNGdW5jdGlvbiogY2FsbGVlKCkgY29uc3QgeyByZXR1cm4gdGhpc1tSZWdpc3RlckZp
bGU6OkNhbGxlZV0uZnVuY3Rpb24oKTsgfQorICAgICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jaygp
IGNvbnN0IHsgcmV0dXJuIHRoaXNbUmVnaXN0ZXJGaWxlOjpDb2RlQmxvY2tdLmNvZGVCbG9jaygp
OyB9CisgICAgICAgIFNjb3BlQ2hhaW5Ob2RlKiBzY29wZUNoYWluKCkgY29uc3QgeyByZXR1cm4g
dGhpc1tSZWdpc3RlckZpbGU6OlNjb3BlQ2hhaW5dLnNjb3BlQ2hhaW4oKTsgfQorCisgICAgICAg
IEpTVmFsdWUqIHRoaXNWYWx1ZSgpOwogCiAgICAgICAgIC8vIEdsb2JhbCBvYmplY3QgaW4gd2hp
Y2ggZXhlY3V0aW9uIGJlZ2FuLgogICAgICAgICBKU0dsb2JhbE9iamVjdCogZHluYW1pY0dsb2Jh
bE9iamVjdCgpOwogCiAgICAgICAgIC8vIEdsb2JhbCBvYmplY3QgaW4gd2hpY2ggdGhlIGN1cnJl
bnRseSBleGVjdXRpbmcgY29kZSB3YXMgZGVmaW5lZC4KICAgICAgICAgLy8gRGlmZmVycyBmcm9t
IGR5bmFtaWNHbG9iYWxPYmplY3QoKSBkdXJpbmcgZnVuY3Rpb24gY2FsbHMgYWNyb3NzIHdlYiBi
cm93c2VyIGZyYW1lcy4KLSAgICAgICAgSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmpl
Y3QoKQorICAgICAgICBKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCgpIGNvbnN0
CiAgICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBNYWNoaW5lOjpzY29wZUNoYWluKHRoaXMp
LT5nbG9iYWxPYmplY3QoKTsKKyAgICAgICAgICAgIHJldHVybiBzY29wZUNoYWluKCktPmdsb2Jh
bE9iamVjdCgpOwogICAgICAgICB9CiAKICAgICAgICAgLy8gRGlmZmVycyBmcm9tIGxleGljYWxH
bG9iYWxPYmplY3QgYmVjYXVzZSB0aGlzIHdpbGwgaGF2ZSBET00gd2luZG93IHNoZWxsIHJhdGhl
ciB0aGFuCi0gICAgICAgIC8vIHRoZSBhY3R1YWwgRE9NIHdpbmRvdy4KLSAgICAgICAgSlNPYmpl
Y3QqIGdsb2JhbFRoaXNWYWx1ZSgpCisgICAgICAgIC8vIHRoZSBhY3R1YWwgRE9NIHdpbmRvdywg
d2hpY2ggY2FuJ3QgYmUgInRoaXMiIGZvciBzZWN1cml0eSByZWFzb25zLgorICAgICAgICBKU09i
amVjdCogZ2xvYmFsVGhpc1ZhbHVlKCkgY29uc3QKICAgICAgICAgewotICAgICAgICAgICAgcmV0
dXJuIE1hY2hpbmU6OnNjb3BlQ2hhaW4odGhpcyktPmdsb2JhbFRoaXNPYmplY3QoKTsKKyAgICAg
ICAgICAgIHJldHVybiBzY29wZUNoYWluKCktPmdsb2JhbFRoaXNPYmplY3QoKTsKICAgICAgICAg
fQogCi0gICAgICAgIEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSgpCisgICAgICAgIC8vIEZJWE1F
OiBFbHNld2hlcmUsIHdlIHVzZSBKU0dsb2JhbERhdGEqIHJhdGhlciB0aGFuIEpTR2xvYmFsRGF0
YSYuCisgICAgICAgIC8vIFdlIHNob3VsZCBtYWtlIHRoaXMgbW9yZSB1bmlmb3JtIGFuZCBlaXRo
ZXIgdXNlIGEgcmVmZXJlbmNlIGV2ZXJ5d2hlcmUKKyAgICAgICAgLy8gb3IgYSBwb2ludGVyIGV2
ZXJ5d2hlcmUuCisgICAgICAgIEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSgpIGNvbnN0CiAgICAg
ICAgIHsKLSAgICAgICAgICAgIHJldHVybiAqTWFjaGluZTo6c2NvcGVDaGFpbih0aGlzKS0+Z2xv
YmFsRGF0YTsKKyAgICAgICAgICAgIHJldHVybiAqc2NvcGVDaGFpbigpLT5nbG9iYWxEYXRhOwog
ICAgICAgICB9CiAKICAgICAgICAgLy8gQ29udmVuaWVuY2UgZnVuY3Rpb25zIGZvciBhY2Nlc3Mg
dG8gZ2xvYmFsIGRhdGEuCisgICAgICAgIC8vIEl0IHRha2VzIGEgZmV3IG1lbW9yeSByZWZlcmVu
Y2VzIHRvIGdldCBmcm9tIGEgY2FsbCBmcmFtZSB0byB0aGUgZ2xvYmFsIGRhdGEKKyAgICAgICAg
Ly8gcG9pbnRlciwgc28gdGhlc2UgYXJlIGluZWZmaWNpZW50LCBhbmQgc2hvdWxkIGJlIHVzZWQg
c3BhcmluZ2x5IGluIG5ldyBjb2RlLgorICAgICAgICAvLyBCdXQgdGhleSdyZSB1c2VkIGluIG1h
bnkgcGxhY2VzIGluIGxlZ2FjeSBjb2RlLCBzbyB0aGV5J3JlIG5vdCBnb2luZyBhd2F5IGFueSB0
aW1lIHNvb24uCiAKICAgICAgICAgdm9pZCBzZXRFeGNlcHRpb24oSlNWYWx1ZSogZXhjZXB0aW9u
KSB7IGdsb2JhbERhdGEoKS5leGNlcHRpb24gPSBleGNlcHRpb247IH0KICAgICAgICAgdm9pZCBj
bGVhckV4Y2VwdGlvbigpIHsgZ2xvYmFsRGF0YSgpLmV4Y2VwdGlvbiA9IDA7IH0KLSAgICAgICAg
SlNWYWx1ZSogZXhjZXB0aW9uKCkgeyByZXR1cm4gZ2xvYmFsRGF0YSgpLmV4Y2VwdGlvbjsgfQor
ICAgICAgICBKU1ZhbHVlKiBleGNlcHRpb24oKSBjb25zdCB7IHJldHVybiBnbG9iYWxEYXRhKCku
ZXhjZXB0aW9uOyB9CiAgICAgICAgIEpTVmFsdWUqKiBleGNlcHRpb25TbG90KCkgeyByZXR1cm4g
Jmdsb2JhbERhdGEoKS5leGNlcHRpb247IH0KLSAgICAgICAgYm9vbCBoYWRFeGNlcHRpb24oKSB7
IHJldHVybiAhIWdsb2JhbERhdGEoKS5leGNlcHRpb247IH0KKyAgICAgICAgYm9vbCBoYWRFeGNl
cHRpb24oKSBjb25zdCB7IHJldHVybiAhIWdsb2JhbERhdGEoKS5leGNlcHRpb247IH0KIAotICAg
ICAgICBJZGVudGlmaWVyVGFibGUqIGlkZW50aWZpZXJUYWJsZSgpIHsgcmV0dXJuIGdsb2JhbERh
dGEoKS5pZGVudGlmaWVyVGFibGU7IH0KLSAgICAgICAgY29uc3QgQ29tbW9uSWRlbnRpZmllcnMm
IHByb3BlcnR5TmFtZXMoKSB7IHJldHVybiAqZ2xvYmFsRGF0YSgpLnByb3BlcnR5TmFtZXM7IH0K
LSAgICAgICAgY29uc3QgQXJnTGlzdCYgZW1wdHlMaXN0KCkgeyByZXR1cm4gKmdsb2JhbERhdGEo
KS5lbXB0eUxpc3Q7IH0KLSAgICAgICAgTGV4ZXIqIGxleGVyKCkgeyByZXR1cm4gZ2xvYmFsRGF0
YSgpLmxleGVyOyB9Ci0gICAgICAgIFBhcnNlciogcGFyc2VyKCkgeyByZXR1cm4gZ2xvYmFsRGF0
YSgpLnBhcnNlcjsgfQorICAgICAgICBjb25zdCBDb21tb25JZGVudGlmaWVycyYgcHJvcGVydHlO
YW1lcygpIGNvbnN0IHsgcmV0dXJuICpnbG9iYWxEYXRhKCkucHJvcGVydHlOYW1lczsgfQorICAg
ICAgICBjb25zdCBBcmdMaXN0JiBlbXB0eUxpc3QoKSBjb25zdCB7IHJldHVybiAqZ2xvYmFsRGF0
YSgpLmVtcHR5TGlzdDsgfQogICAgICAgICBNYWNoaW5lKiBtYWNoaW5lKCkgeyByZXR1cm4gZ2xv
YmFsRGF0YSgpLm1hY2hpbmU7IH0KICAgICAgICAgSGVhcCogaGVhcCgpIHsgcmV0dXJuICZnbG9i
YWxEYXRhKCkuaGVhcDsgfQogCkBAIC04OSw2ICs5NCw1NCBAQCBuYW1lc3BhY2UgSlNDICB7CiAg
ICAgICAgIHN0YXRpYyBjb25zdCBIYXNoVGFibGUqIHN0cmluZ1RhYmxlKENhbGxGcmFtZSogY2Fs
bEZyYW1lKSB7IHJldHVybiBjYWxsRnJhbWUtPmdsb2JhbERhdGEoKS5zdHJpbmdUYWJsZTsgfQog
CiAgICAgcHJpdmF0ZToKKyAgICAgICAgZnJpZW5kIGNsYXNzIEFyZ3VtZW50czsKKyAgICAgICAg
ZnJpZW5kIGNsYXNzIEpTQWN0aXZhdGlvbjsKKyAgICAgICAgZnJpZW5kIGNsYXNzIEpTR2xvYmFs
T2JqZWN0OworICAgICAgICBmcmllbmQgY2xhc3MgTWFjaGluZTsKKworICAgICAgICBzdGF0aWMg
Q2FsbEZyYW1lKiBjcmVhdGUoUmVnaXN0ZXIqIGNhbGxGcmFtZUJhc2UpIHsgcmV0dXJuIHN0YXRp
Y19jYXN0PENhbGxGcmFtZSo+KGNhbGxGcmFtZUJhc2UpOyB9CisgICAgICAgIFJlZ2lzdGVyKiBy
ZWdpc3RlcnMoKSB7IHJldHVybiB0aGlzOyB9CisKKyAgICAgICAgQ2FsbEZyYW1lJiBvcGVyYXRv
cj0oY29uc3QgUmVnaXN0ZXImIHIpIHsgKnN0YXRpY19jYXN0PFJlZ2lzdGVyKj4odGhpcykgPSBy
OyByZXR1cm4gKnRoaXM7IH0KKworICAgICAgICBpbnQgYXJndW1lbnRDb3VudCgpIGNvbnN0IHsg
cmV0dXJuIHRoaXNbUmVnaXN0ZXJGaWxlOjpBcmd1bWVudENvdW50XS5pKCk7IH0KKyAgICAgICAg
Q2FsbEZyYW1lKiBjYWxsZXJGcmFtZSgpIGNvbnN0IHsgcmV0dXJuIHRoaXNbUmVnaXN0ZXJGaWxl
OjpDYWxsZXJGcmFtZV0uY2FsbEZyYW1lKCk7IH0KKyAgICAgICAgSlNBY3RpdmF0aW9uKiBvcHRp
b25hbENhbGxlZUFjdGl2YXRpb24oKSBjb25zdCB7IHJldHVybiB0aGlzW1JlZ2lzdGVyRmlsZTo6
T3B0aW9uYWxDYWxsZWVBY3RpdmF0aW9uXS5hY3RpdmF0aW9uKCk7IH0KKyAgICAgICAgQXJndW1l
bnRzKiBvcHRpb25hbENhbGxlZUFyZ3VtZW50cygpIGNvbnN0IHsgcmV0dXJuIHRoaXNbUmVnaXN0
ZXJGaWxlOjpPcHRpb25hbENhbGxlZUFyZ3VtZW50c10uYXJndW1lbnRzKCk7IH0KKyAgICAgICAg
SW5zdHJ1Y3Rpb24qIHJldHVyblBDKCkgY29uc3QgeyByZXR1cm4gdGhpc1tSZWdpc3RlckZpbGU6
OlJldHVyblBDXS52UEMoKTsgfQorICAgICAgICBpbnQgcmV0dXJuVmFsdWVSZWdpc3RlcigpIGNv
bnN0IHsgcmV0dXJuIHRoaXNbUmVnaXN0ZXJGaWxlOjpSZXR1cm5WYWx1ZVJlZ2lzdGVyXS5pKCk7
IH0KKworICAgICAgICB2b2lkIHNldEFyZ3VtZW50Q291bnQoaW50IGNvdW50KSB7IHRoaXNbUmVn
aXN0ZXJGaWxlOjpBcmd1bWVudENvdW50XSA9IGNvdW50OyB9CisgICAgICAgIHZvaWQgc2V0Q2Fs
bGVlKEpTRnVuY3Rpb24qIGNhbGxlZSkgeyB0aGlzW1JlZ2lzdGVyRmlsZTo6Q2FsbGVlXSA9IGNh
bGxlZTsgfQorICAgICAgICB2b2lkIHNldENhbGxlZUFjdGl2YXRpb24oSlNBY3RpdmF0aW9uKiBh
Y3RpdmF0aW9uKSB7IHRoaXNbUmVnaXN0ZXJGaWxlOjpPcHRpb25hbENhbGxlZUFjdGl2YXRpb25d
ID0gYWN0aXZhdGlvbjsgfQorICAgICAgICB2b2lkIHNldENhbGxlZUFyZ3VtZW50cyhBcmd1bWVu
dHMqIGFyZ3VtZW50cykgeyB0aGlzW1JlZ2lzdGVyRmlsZTo6T3B0aW9uYWxDYWxsZWVBcmd1bWVu
dHNdID0gYXJndW1lbnRzOyB9CisgICAgICAgIHZvaWQgc2V0Q2FsbGVyRnJhbWUoQ2FsbEZyYW1l
KiBjYWxsZXJGcmFtZSkgeyB0aGlzW1JlZ2lzdGVyRmlsZTo6Q2FsbGVyRnJhbWVdID0gY2FsbGVy
RnJhbWU7IH0KKyAgICAgICAgdm9pZCBzZXRDb2RlQmxvY2soQ29kZUJsb2NrKiBjb2RlQmxvY2sp
IHsgdGhpc1tSZWdpc3RlckZpbGU6OkNvZGVCbG9ja10gPSBjb2RlQmxvY2s7IH0KKyAgICAgICAg
dm9pZCBzZXRTY29wZUNoYWluKFNjb3BlQ2hhaW5Ob2RlKiBzY29wZUNoYWluKSB7IHRoaXNbUmVn
aXN0ZXJGaWxlOjpTY29wZUNoYWluXSA9IHNjb3BlQ2hhaW47IH0KKworICAgICAgICBBTFdBWVNf
SU5MSU5FIHZvaWQgaW5pdChDb2RlQmxvY2sqIGNvZGVCbG9jaywgSW5zdHJ1Y3Rpb24qIHZQQywg
U2NvcGVDaGFpbk5vZGUqIHNjb3BlQ2hhaW4sCisgICAgICAgICAgICBDYWxsRnJhbWUqIGNhbGxl
ckZyYW1lLCBpbnQgcmV0dXJuVmFsdWVSZWdpc3RlciwgaW50IGFyZ2MsIEpTRnVuY3Rpb24qIGZ1
bmN0aW9uKQorICAgICAgICB7CisgICAgICAgICAgICBBU1NFUlQoY2FsbGVyRnJhbWUpOyAvLyBV
c2Ugbm9DYWxsZXIoKSByYXRoZXIgdGhhbiAwIGZvciB0aGUgb3V0ZXIgaG9zdCBjYWxsIGZyYW1l
IGNhbGxlci4KKworICAgICAgICAgICAgc2V0Q29kZUJsb2NrKGNvZGVCbG9jayk7CisgICAgICAg
ICAgICBzZXRTY29wZUNoYWluKHNjb3BlQ2hhaW4pOworICAgICAgICAgICAgc2V0Q2FsbGVyRnJh
bWUoY2FsbGVyRnJhbWUpOworICAgICAgICAgICAgdGhpc1tSZWdpc3RlckZpbGU6OlJldHVyblBD
XSA9IHZQQzsKKyAgICAgICAgICAgIHRoaXNbUmVnaXN0ZXJGaWxlOjpSZXR1cm5WYWx1ZVJlZ2lz
dGVyXSA9IHJldHVyblZhbHVlUmVnaXN0ZXI7CisgICAgICAgICAgICBzZXRBcmd1bWVudENvdW50
KGFyZ2MpOyAvLyBvcmlnaW5hbCBhcmd1bWVudCBjb3VudCAoZm9yIHRoZSBzYWtlIG9mIHRoZSAi
YXJndW1lbnRzIiBvYmplY3QpCisgICAgICAgICAgICBzZXRDYWxsZWUoZnVuY3Rpb24pOworICAg
ICAgICAgICAgc2V0Q2FsbGVlQWN0aXZhdGlvbigwKTsKKyAgICAgICAgICAgIHNldENhbGxlZUFy
Z3VtZW50cygwKTsKKyAgICAgICAgfQorCisgICAgICAgIHN0YXRpYyBjb25zdCBpbnRwdHJfdCBI
b3N0Q2FsbEZyYW1lRmxhZyA9IDE7CisKKyAgICAgICAgc3RhdGljIENhbGxGcmFtZSogbm9DYWxs
ZXIoKSB7IHJldHVybiByZWludGVycHJldF9jYXN0PENhbGxGcmFtZSo+KEhvc3RDYWxsRnJhbWVG
bGFnKTsgfQorICAgICAgICBib29sIGhhc0hvc3RDYWxsRnJhbWVGbGFnKCkgY29uc3QgeyByZXR1
cm4gcmVpbnRlcnByZXRfY2FzdDxpbnRwdHJfdD4odGhpcykgJiBIb3N0Q2FsbEZyYW1lRmxhZzsg
fQorICAgICAgICBDYWxsRnJhbWUqIGFkZEhvc3RDYWxsRnJhbWVGbGFnKCkgY29uc3QgeyByZXR1
cm4gcmVpbnRlcnByZXRfY2FzdDxDYWxsRnJhbWUqPihyZWludGVycHJldF9jYXN0PGludHB0cl90
Pih0aGlzKSB8IEhvc3RDYWxsRnJhbWVGbGFnKTsgfQorICAgICAgICBDYWxsRnJhbWUqIHJlbW92
ZUhvc3RDYWxsRnJhbWVGbGFnKCkgeyByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxDYWxsRnJhbWUq
PihyZWludGVycHJldF9jYXN0PGludHB0cl90Pih0aGlzKSAmIH5Ib3N0Q2FsbEZyYW1lRmxhZyk7
IH0KKwogICAgICAgICBFeGVjU3RhdGUoKTsKICAgICAgICAgfkV4ZWNTdGF0ZSgpOwogICAgIH07
CkluZGV4OiBKYXZhU2NyaXB0Q29yZS9ranMvRnVuY3Rpb25Db25zdHJ1Y3Rvci5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gSmF2YVNjcmlwdENvcmUva2pzL0Z1bmN0aW9uQ29uc3RydWN0b3IuY3BwCShyZXZp
c2lvbiAzNzM1MikKKysrIEphdmFTY3JpcHRDb3JlL2tqcy9GdW5jdGlvbkNvbnN0cnVjdG9yLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtODcsNyArODcsNyBAQCBKU09iamVjdCogY29uc3RydWN0RnVu
Y3Rpb24oRXhlY1N0YXRlKiBlCiAgICAgaW50IGVyckxpbmU7CiAgICAgVVN0cmluZyBlcnJNc2c7
CiAgICAgU291cmNlQ29kZSBzb3VyY2UgPSBtYWtlU291cmNlKGJvZHksIHNvdXJjZVVSTCwgbGlu
ZU51bWJlcik7Ci0gICAgUmVmUHRyPEZ1bmN0aW9uQm9keU5vZGU+IGZ1bmN0aW9uQm9keSA9IGV4
ZWMtPnBhcnNlcigpLT5wYXJzZTxGdW5jdGlvbkJvZHlOb2RlPihleGVjLCBzb3VyY2UsICZlcnJM
aW5lLCAmZXJyTXNnKTsKKyAgICBSZWZQdHI8RnVuY3Rpb25Cb2R5Tm9kZT4gZnVuY3Rpb25Cb2R5
ID0gZXhlYy0+Z2xvYmFsRGF0YSgpLnBhcnNlci0+cGFyc2U8RnVuY3Rpb25Cb2R5Tm9kZT4oZXhl
Yywgc291cmNlLCAmZXJyTGluZSwgJmVyck1zZyk7CiAKICAgICAvLyBObyBwcm9ncmFtIG5vZGUg
PT0gc3ludGF4IGVycm9yIC0gdGhyb3cgYSBzeW50YXggZXJyb3IKICAgICBpZiAoIWZ1bmN0aW9u
Qm9keSkKSW5kZXg6IEphdmFTY3JpcHRDb3JlL2tqcy9KU0FjdGl2YXRpb24uY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIEphdmFTY3JpcHRDb3JlL2tqcy9KU0FjdGl2YXRpb24uY3BwCShyZXZpc2lvbiAzNzM1
MikKKysrIEphdmFTY3JpcHRDb3JlL2tqcy9KU0FjdGl2YXRpb24uY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0zOSw4ICszOSw4IEBAIEFTU0VSVF9DTEFTU19GSVRTX0lOX0NFTEwoSlNBY3RpdmF0aW9u
KTsKIAogY29uc3QgQ2xhc3NJbmZvIEpTQWN0aXZhdGlvbjo6aW5mbyA9IHsgIkpTQWN0aXZhdGlv
biIsIDAsIDAsIDAgfTsKIAotSlNBY3RpdmF0aW9uOjpKU0FjdGl2YXRpb24oRXhlY1N0YXRlKiBl
eGVjLCBQYXNzUmVmUHRyPEZ1bmN0aW9uQm9keU5vZGU+IGZ1bmN0aW9uQm9keSwgUmVnaXN0ZXIq
IHJlZ2lzdGVycykKLSAgICA6IEJhc2UoZXhlYy0+Z2xvYmFsRGF0YSgpLmFjdGl2YXRpb25TdHJ1
Y3R1cmVJRCwgbmV3IEpTQWN0aXZhdGlvbkRhdGEoZnVuY3Rpb25Cb2R5LCByZWdpc3RlcnMpKQor
SlNBY3RpdmF0aW9uOjpKU0FjdGl2YXRpb24oQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIFBhc3NSZWZQ
dHI8RnVuY3Rpb25Cb2R5Tm9kZT4gZnVuY3Rpb25Cb2R5KQorICAgIDogQmFzZShjYWxsRnJhbWUt
Pmdsb2JhbERhdGEoKS5hY3RpdmF0aW9uU3RydWN0dXJlSUQsIG5ldyBKU0FjdGl2YXRpb25EYXRh
KGZ1bmN0aW9uQm9keSwgY2FsbEZyYW1lKSkKIHsKIH0KIApAQCAtMTUzLDE5ICsxNTMsMjAgQEAg
Ym9vbCBKU0FjdGl2YXRpb246OmlzRHluYW1pY1Njb3BlKCkgY29ucwogCiBKU1ZhbHVlKiBKU0Fj
dGl2YXRpb246OmFyZ3VtZW50c0dldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IElkZW50aWZp
ZXImLCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3QpCiB7Ci0gICAgSlNBY3RpdmF0aW9uKiB0aGlz
T2JqID0gc3RhdGljX2Nhc3Q8SlNBY3RpdmF0aW9uKj4oc2xvdC5zbG90QmFzZSgpKTsKKyAgICBK
U0FjdGl2YXRpb24qIGFjdGl2YXRpb24gPSBzdGF0aWNfY2FzdDxKU0FjdGl2YXRpb24qPihzbG90
LnNsb3RCYXNlKCkpOwogCi0gICAgaWYgKHRoaXNPYmotPmQoKS0+ZnVuY3Rpb25Cb2R5LT51c2Vz
QXJndW1lbnRzKCkpIHsKKyAgICBpZiAoYWN0aXZhdGlvbi0+ZCgpLT5mdW5jdGlvbkJvZHktPnVz
ZXNBcmd1bWVudHMoKSkgewogICAgICAgICBQcm9wZXJ0eVNsb3Qgc2xvdDsKLSAgICAgICAgdGhp
c09iai0+c3ltYm9sVGFibGVHZXQoZXhlYy0+cHJvcGVydHlOYW1lcygpLmFyZ3VtZW50cywgc2xv
dCk7CisgICAgICAgIGFjdGl2YXRpb24tPnN5bWJvbFRhYmxlR2V0KGV4ZWMtPnByb3BlcnR5TmFt
ZXMoKS5hcmd1bWVudHMsIHNsb3QpOwogICAgICAgICByZXR1cm4gc2xvdC5nZXRWYWx1ZShleGVj
LCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkuYXJndW1lbnRzKTsKICAgICB9CiAKLSAgICBBcmd1bWVu
dHMqIGFyZ3VtZW50cyA9IHN0YXRpY19jYXN0PEFyZ3VtZW50cyo+KHRoaXNPYmotPmQoKS0+cmVn
aXN0ZXJzW1JlZ2lzdGVyRmlsZTo6T3B0aW9uYWxDYWxsZWVBcmd1bWVudHNdLmdldEpTVmFsdWUo
KSk7CisgICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUgPSBDYWxsRnJhbWU6OmNyZWF0ZShhY3RpdmF0
aW9uLT5kKCktPnJlZ2lzdGVycyk7CisgICAgQXJndW1lbnRzKiBhcmd1bWVudHMgPSBjYWxsRnJh
bWUtPm9wdGlvbmFsQ2FsbGVlQXJndW1lbnRzKCk7CiAgICAgaWYgKCFhcmd1bWVudHMpIHsKLSAg
ICAgICAgYXJndW1lbnRzID0gbmV3IChleGVjKSBBcmd1bWVudHMoZXhlYywgJnRoaXNPYmotPnJl
Z2lzdGVyQXQoMCkpOworICAgICAgICBhcmd1bWVudHMgPSBuZXcgKGV4ZWMpIEFyZ3VtZW50cyhl
eGVjKTsKICAgICAgICAgYXJndW1lbnRzLT5jb3B5UmVnaXN0ZXJzKCk7Ci0gICAgICAgIHRoaXNP
YmotPmQoKS0+cmVnaXN0ZXJzW1JlZ2lzdGVyRmlsZTo6T3B0aW9uYWxDYWxsZWVBcmd1bWVudHNd
ID0gYXJndW1lbnRzOworICAgICAgICBjYWxsRnJhbWUtPnNldENhbGxlZUFyZ3VtZW50cyhhcmd1
bWVudHMpOwogICAgIH0KICAgICBBU1NFUlQoYXJndW1lbnRzLT5pc09iamVjdCgmQXJndW1lbnRz
OjppbmZvKSk7CiAKSW5kZXg6IEphdmFTY3JpcHRDb3JlL2tqcy9KU0FjdGl2YXRpb24uaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9ranMvSlNBY3RpdmF0aW9uLmgJKHJldmlzaW9uIDM3
MzUyKQorKysgSmF2YVNjcmlwdENvcmUva2pzL0pTQWN0aXZhdGlvbi5oCSh3b3JraW5nIGNvcHkp
CkBAIC00Myw3ICs0Myw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgIGNsYXNzIEpTQWN0aXZhdGlv
biA6IHB1YmxpYyBKU1ZhcmlhYmxlT2JqZWN0IHsKICAgICAgICAgdHlwZWRlZiBKU1ZhcmlhYmxl
T2JqZWN0IEJhc2U7CiAgICAgcHVibGljOgotICAgICAgICBKU0FjdGl2YXRpb24oRXhlY1N0YXRl
KiwgUGFzc1JlZlB0cjxGdW5jdGlvbkJvZHlOb2RlPiwgUmVnaXN0ZXIqKTsKKyAgICAgICAgSlNB
Y3RpdmF0aW9uKENhbGxGcmFtZSosIFBhc3NSZWZQdHI8RnVuY3Rpb25Cb2R5Tm9kZT4pOwogICAg
ICAgICB2aXJ0dWFsIH5KU0FjdGl2YXRpb24oKTsKIAogICAgICAgICB2aXJ0dWFsIHZvaWQgbWFy
aygpOwpJbmRleDogSmF2YVNjcmlwdENvcmUva2pzL0pTR2xvYmFsT2JqZWN0LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9ranMvSlNHbG9iYWxPYmplY3QuY3BwCShyZXZpc2lvbiAz
NzM1MikKKysrIEphdmFTY3JpcHRDb3JlL2tqcy9KU0dsb2JhbE9iamVjdC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTEyOSw3ICsxMjksNyBAQCB2b2lkIEpTR2xvYmFsT2JqZWN0Ojppbml0KEpTT2Jq
ZWN0KiB0aGlzCiAgICAgZCgpLT5nbG9iYWxEYXRhID0gSGVhcDo6aGVhcCh0aGlzKS0+Z2xvYmFs
RGF0YSgpOwogICAgIGQoKS0+Z2xvYmFsU2NvcGVDaGFpbiA9IFNjb3BlQ2hhaW4odGhpcywgZCgp
LT5nbG9iYWxEYXRhLmdldCgpLCB0aGlzVmFsdWUpOwogCi0gICAgTWFjaGluZTo6aW5pdGlhbGl6
ZUNhbGxGcmFtZShkKCktPmdsb2JhbENhbGxGcmFtZSArIFJlZ2lzdGVyRmlsZTo6Q2FsbEZyYW1l
SGVhZGVyU2l6ZSwgMCwgMCwgZCgpLT5nbG9iYWxTY29wZUNoYWluLm5vZGUoKSwgbWFrZUhvc3RD
YWxsRnJhbWVQb2ludGVyKDApLCAwLCAwLCAwKTsKKyAgICBKU0dsb2JhbE9iamVjdDo6Z2xvYmFs
RXhlYygpLT5pbml0KDAsIDAsIGQoKS0+Z2xvYmFsU2NvcGVDaGFpbi5ub2RlKCksIENhbGxGcmFt
ZTo6bm9DYWxsZXIoKSwgMCwgMCwgMCk7CiAKICAgICBpZiAoSlNHbG9iYWxPYmplY3QqJiBoZWFk
T2JqZWN0ID0gaGVhZCgpKSB7CiAgICAgICAgIGQoKS0+cHJldiA9IGhlYWRPYmplY3Q7CkluZGV4
OiBKYXZhU2NyaXB0Q29yZS9ranMvSlNHbG9iYWxPYmplY3RGdW5jdGlvbnMuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIEphdmFTY3JpcHRDb3JlL2tqcy9KU0dsb2JhbE9iamVjdEZ1bmN0aW9ucy5jcHAJKHJl
dmlzaW9uIDM3MzUyKQorKysgSmF2YVNjcmlwdENvcmUva2pzL0pTR2xvYmFsT2JqZWN0RnVuY3Rp
b25zLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjg2LDcgKzI4Niw3IEBAIEpTVmFsdWUqIGdsb2Jh
bEZ1bmNFdmFsKEV4ZWNTdGF0ZSogZXhlYywKICAgICBVU3RyaW5nIGVyck1zZzsKIAogICAgIFNv
dXJjZUNvZGUgc291cmNlID0gbWFrZVNvdXJjZShzKTsKLSAgICBSZWZQdHI8RXZhbE5vZGU+IGV2
YWxOb2RlID0gZXhlYy0+cGFyc2VyKCktPnBhcnNlPEV2YWxOb2RlPihleGVjLCBzb3VyY2UsICZl
cnJMaW5lLCAmZXJyTXNnKTsKKyAgICBSZWZQdHI8RXZhbE5vZGU+IGV2YWxOb2RlID0gZXhlYy0+
Z2xvYmFsRGF0YSgpLnBhcnNlci0+cGFyc2U8RXZhbE5vZGU+KGV4ZWMsIHNvdXJjZSwgJmVyckxp
bmUsICZlcnJNc2cpOwogCiAgICAgaWYgKCFldmFsTm9kZSkKICAgICAgICAgcmV0dXJuIHRocm93
RXJyb3IoZXhlYywgU3ludGF4RXJyb3IsIGVyck1zZywgZXJyTGluZSwgc291cmNlLnByb3ZpZGVy
KCktPmFzSUQoKSwgTlVMTCk7CkluZGV4OiBKYXZhU2NyaXB0Q29yZS9ranMvSlNWYXJpYWJsZU9i
amVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL2tqcy9KU1ZhcmlhYmxlT2JqZWN0
LmgJKHJldmlzaW9uIDM3MzUyKQorKysgSmF2YVNjcmlwdENvcmUva2pzL0pTVmFyaWFibGVPYmpl
Y3QuaAkod29ya2luZyBjb3B5KQpAQCAtNjEsMTEgKzYxLDExIEBAIG5hbWVzcGFjZSBKU0Mgewog
ICAgICAgICAvLyB3aXRob3V0IGluY3JlYXNpbmcgdGhlaXIgb3duIHNpemUgKHNpbmNlIHRoZXJl
J3MgYSBoYXJkIGxpbWl0IG9uIHRoZQogICAgICAgICAvLyBzaXplIG9mIGEgSlNDZWxsKS4KICAg
ICAgICAgc3RydWN0IEpTVmFyaWFibGVPYmplY3REYXRhIHsKLSAgICAgICAgICAgIEpTVmFyaWFi
bGVPYmplY3REYXRhKFN5bWJvbFRhYmxlKiBzeW1ib2xUYWJsZV8sIFJlZ2lzdGVyKiByZWdpc3Rl
cnNfKQotICAgICAgICAgICAgICAgIDogc3ltYm9sVGFibGUoc3ltYm9sVGFibGVfKQotICAgICAg
ICAgICAgICAgICwgcmVnaXN0ZXJzKHJlZ2lzdGVyc18pCisgICAgICAgICAgICBKU1ZhcmlhYmxl
T2JqZWN0RGF0YShTeW1ib2xUYWJsZSogc3ltYm9sVGFibGUsIFJlZ2lzdGVyKiByZWdpc3RlcnMp
CisgICAgICAgICAgICAgICAgOiBzeW1ib2xUYWJsZShzeW1ib2xUYWJsZSkKKyAgICAgICAgICAg
ICAgICAsIHJlZ2lzdGVycyhyZWdpc3RlcnMpCiAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAg
ICAgQVNTRVJUKHN5bWJvbFRhYmxlXyk7CisgICAgICAgICAgICAgICAgQVNTRVJUKHN5bWJvbFRh
YmxlKTsKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgU3ltYm9sVGFibGUqIHN5bWJvbFRh
YmxlOyAvLyBNYXBzIG5hbWUgLT4gb2Zmc2V0IGZyb20gInIiIGluIHJlZ2lzdGVyIGZpbGUuCklu
ZGV4OiBKYXZhU2NyaXB0Q29yZS9ranMvUGFyc2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2Ny
aXB0Q29yZS9ranMvUGFyc2VyLmNwcAkocmV2aXNpb24gMzczNTIpCisrKyBKYXZhU2NyaXB0Q29y
ZS9ranMvUGFyc2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDcsNyArNDcsNyBAQCB2b2lkIFBh
cnNlcjo6cGFyc2UoRXhlY1N0YXRlKiBleGVjLCBpbnQqCiAgICAgKmVyckxpbmUgPSAtMTsKICAg
ICAqZXJyTXNnID0gMDsKIAotICAgIExleGVyJiBsZXhlciA9ICpleGVjLT5sZXhlcigpOworICAg
IExleGVyJiBsZXhlciA9ICpleGVjLT5nbG9iYWxEYXRhKCkubGV4ZXI7CiAgICAgbGV4ZXIuc2V0
Q29kZSgqbV9zb3VyY2UpOwogCiAgICAgaW50IHBhcnNlRXJyb3IgPSBranN5eXBhcnNlKCZleGVj
LT5nbG9iYWxEYXRhKCkpOwpJbmRleDogSmF2YVNjcmlwdENvcmUva2pzL1JlZ0V4cENvbnN0cnVj
dG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9ranMvUmVnRXhwQ29uc3RydWN0
b3IuY3BwCShyZXZpc2lvbiAzNzM1MikKKysrIEphdmFTY3JpcHRDb3JlL2tqcy9SZWdFeHBDb25z
dHJ1Y3Rvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMzMSw3ICszMzEsNyBAQCBKU09iamVjdCog
Y29uc3RydWN0UmVnRXhwKEV4ZWNTdGF0ZSogZXhlCiAgICAgVVN0cmluZyBwYXR0ZXJuID0gYXJn
MC0+aXNVbmRlZmluZWQoKSA/IFVTdHJpbmcoIiIpIDogYXJnMC0+dG9TdHJpbmcoZXhlYyk7CiAg
ICAgVVN0cmluZyBmbGFncyA9IGFyZzEtPmlzVW5kZWZpbmVkKCkgPyBVU3RyaW5nKCIiKSA6IGFy
ZzEtPnRvU3RyaW5nKGV4ZWMpOwogCi0gICAgUmVmUHRyPFJlZ0V4cD4gcmVnRXhwID0gUmVnRXhw
OjpjcmVhdGUoZXhlYywgcGF0dGVybiwgZmxhZ3MpOworICAgIFJlZlB0cjxSZWdFeHA+IHJlZ0V4
cCA9IFJlZ0V4cDo6Y3JlYXRlKCZleGVjLT5nbG9iYWxEYXRhKCksIHBhdHRlcm4sIGZsYWdzKTsK
ICAgICBpZiAoIXJlZ0V4cC0+aXNWYWxpZCgpKQogICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihl
eGVjLCBTeW50YXhFcnJvciwgVVN0cmluZygiSW52YWxpZCByZWd1bGFyIGV4cHJlc3Npb246ICIp
LmFwcGVuZChyZWdFeHAtPmVycm9yTWVzc2FnZSgpKSk7CiAgICAgcmV0dXJuIG5ldyAoZXhlYykg
UmVnRXhwT2JqZWN0KGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKS0+cmVnRXhwU3RydWN0dXJl
KCksIHJlZ0V4cC5yZWxlYXNlKCkpOwpJbmRleDogSmF2YVNjcmlwdENvcmUva2pzL1JlZ0V4cFBy
b3RvdHlwZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUva2pzL1JlZ0V4cFByb3Rv
dHlwZS5jcHAJKHJldmlzaW9uIDM3MzUyKQorKysgSmF2YVNjcmlwdENvcmUva2pzL1JlZ0V4cFBy
b3RvdHlwZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg1LDcgKzg1LDcgQEAgSlNWYWx1ZSogcmVn
RXhwUHJvdG9GdW5jQ29tcGlsZShFeGVjU3RhdAogICAgIH0gZWxzZSB7CiAgICAgICAgIFVTdHJp
bmcgcGF0dGVybiA9IGFyZ3MuaXNFbXB0eSgpID8gVVN0cmluZygiIikgOiBhcmcwLT50b1N0cmlu
ZyhleGVjKTsKICAgICAgICAgVVN0cmluZyBmbGFncyA9IGFyZzEtPmlzVW5kZWZpbmVkKCkgPyBV
U3RyaW5nKCIiKSA6IGFyZzEtPnRvU3RyaW5nKGV4ZWMpOwotICAgICAgICByZWdFeHAgPSBSZWdF
eHA6OmNyZWF0ZShleGVjLCBwYXR0ZXJuLCBmbGFncyk7CisgICAgICAgIHJlZ0V4cCA9IFJlZ0V4
cDo6Y3JlYXRlKCZleGVjLT5nbG9iYWxEYXRhKCksIHBhdHRlcm4sIGZsYWdzKTsKICAgICB9CiAK
ICAgICBpZiAoIXJlZ0V4cC0+aXNWYWxpZCgpKQpJbmRleDogSmF2YVNjcmlwdENvcmUva2pzL1No
ZWxsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9ranMvU2hlbGwuY3BwCShyZXZp
c2lvbiAzNzM1MikKKysrIEphdmFTY3JpcHRDb3JlL2tqcy9TaGVsbC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTMwNSw3ICszMDUsNyBAQCBzdGF0aWMgYm9vbCBwcmV0dHlQcmludFNjcmlwdChFeGVj
U3RhdGUqCiB7CiAgICAgaW50IGVyckxpbmUgPSAwOwogICAgIFVTdHJpbmcgZXJyTXNnOwotICAg
IFJlZlB0cjxQcm9ncmFtTm9kZT4gcHJvZ3JhbU5vZGUgPSBleGVjLT5wYXJzZXIoKS0+cGFyc2U8
UHJvZ3JhbU5vZGU+KGV4ZWMsIG1ha2VTb3VyY2Uoc2NyaXB0LmRhdGEoKSwgZmlsZU5hbWUpLCAm
ZXJyTGluZSwgJmVyck1zZyk7CisgICAgUmVmUHRyPFByb2dyYW1Ob2RlPiBwcm9ncmFtTm9kZSA9
IGV4ZWMtPmdsb2JhbERhdGEoKS5wYXJzZXItPnBhcnNlPFByb2dyYW1Ob2RlPihleGVjLCBtYWtl
U291cmNlKHNjcmlwdC5kYXRhKCksIGZpbGVOYW1lKSwgJmVyckxpbmUsICZlcnJNc2cpOwogICAg
IGlmICghcHJvZ3JhbU5vZGUpIHsKICAgICAgICAgZnByaW50ZihzdGRlcnIsICIlczolZDogJXMu
XG4iLCBmaWxlTmFtZS5VVEY4U3RyaW5nKCkuY19zdHIoKSwgZXJyTGluZSwgZXJyTXNnLlVURjhT
dHJpbmcoKS5jX3N0cigpKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwpJbmRleDogSmF2YVNjcmlw
dENvcmUva2pzL1N0cmluZ1Byb3RvdHlwZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENv
cmUva2pzL1N0cmluZ1Byb3RvdHlwZS5jcHAJKHJldmlzaW9uIDM3MzUyKQorKysgSmF2YVNjcmlw
dENvcmUva2pzL1N0cmluZ1Byb3RvdHlwZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQxMiw3ICs0
MTIsNyBAQCBKU1ZhbHVlKiBzdHJpbmdQcm90b0Z1bmNNYXRjaChFeGVjU3RhdGUqCiAgICAgICAg
ICAqICBJZiByZWdleHAgaXMgbm90IGFuIG9iamVjdCB3aG9zZSBbW0NsYXNzXV0gcHJvcGVydHkg
aXMgIlJlZ0V4cCIsIGl0IGlzCiAgICAgICAgICAqICByZXBsYWNlZCB3aXRoIHRoZSByZXN1bHQg
b2YgdGhlIGV4cHJlc3Npb24gbmV3IFJlZ0V4cChyZWdleHApLgogICAgICAgICAgKi8KLSAgICAg
ICAgcmVnID0gUmVnRXhwOjpjcmVhdGUoZXhlYywgYTAtPnRvU3RyaW5nKGV4ZWMpKTsKKyAgICAg
ICAgcmVnID0gUmVnRXhwOjpjcmVhdGUoJmV4ZWMtPmdsb2JhbERhdGEoKSwgYTAtPnRvU3RyaW5n
KGV4ZWMpKTsKICAgICB9CiAgICAgUmVnRXhwQ29uc3RydWN0b3IqIHJlZ0V4cE9iaiA9IGV4ZWMt
PmxleGljYWxHbG9iYWxPYmplY3QoKS0+cmVnRXhwQ29uc3RydWN0b3IoKTsKICAgICBpbnQgcG9z
OwpAQCAtNDYyLDcgKzQ2Miw3IEBAIEpTVmFsdWUqIHN0cmluZ1Byb3RvRnVuY1NlYXJjaChFeGVj
U3RhdGUKICAgICAgICAgICogIElmIHJlZ2V4cCBpcyBub3QgYW4gb2JqZWN0IHdob3NlIFtbQ2xh
c3NdXSBwcm9wZXJ0eSBpcyAiUmVnRXhwIiwgaXQgaXMKICAgICAgICAgICogIHJlcGxhY2VkIHdp
dGggdGhlIHJlc3VsdCBvZiB0aGUgZXhwcmVzc2lvbiBuZXcgUmVnRXhwKHJlZ2V4cCkuCiAgICAg
ICAgICAqLwotICAgICAgICByZWcgPSBSZWdFeHA6OmNyZWF0ZShleGVjLCBhMC0+dG9TdHJpbmco
ZXhlYykpOworICAgICAgICByZWcgPSBSZWdFeHA6OmNyZWF0ZSgmZXhlYy0+Z2xvYmFsRGF0YSgp
LCBhMC0+dG9TdHJpbmcoZXhlYykpOwogICAgIH0KICAgICBSZWdFeHBDb25zdHJ1Y3RvciogcmVn
RXhwT2JqID0gZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5yZWdFeHBDb25zdHJ1Y3Rvcigp
OwogICAgIGludCBwb3M7CkluZGV4OiBKYXZhU2NyaXB0Q29yZS9ranMvaWRlbnRpZmllci5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUva2pzL2lkZW50aWZpZXIuY3BwCShyZXZpc2lv
biAzNzM1MikKKysrIEphdmFTY3JpcHRDb3JlL2tqcy9pZGVudGlmaWVyLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMjQwLDcgKzI0MCw3IEBAIHZvaWQgSWRlbnRpZmllcjo6cmVtb3ZlKFVTdHJpbmc6
OlJlcCogcikKIAogdm9pZCBJZGVudGlmaWVyOjpjaGVja1NhbWVJZGVudGlmaWVyVGFibGUoRXhl
Y1N0YXRlKiBleGVjLCBVU3RyaW5nOjpSZXAqIHJlcCkKIHsKLSAgICBBU1NFUlQocmVwLT5pZGVu
dGlmaWVyVGFibGUoKSA9PSBleGVjLT5pZGVudGlmaWVyVGFibGUoKSk7CisgICAgQVNTRVJUKHJl
cC0+aWRlbnRpZmllclRhYmxlKCkgPT0gZXhlYy0+Z2xvYmFsRGF0YSgpLmlkZW50aWZpZXJUYWJs
ZSk7CiB9CiAKIHZvaWQgSWRlbnRpZmllcjo6Y2hlY2tTYW1lSWRlbnRpZmllclRhYmxlKEpTR2xv
YmFsRGF0YSogZ2xvYmFsRGF0YSwgVVN0cmluZzo6UmVwKiByZXApCkluZGV4OiBKYXZhU2NyaXB0
Q29yZS9ranMvaW50ZXJwcmV0ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL2tq
cy9pbnRlcnByZXRlci5jcHAJKHJldmlzaW9uIDM3MzUyKQorKysgSmF2YVNjcmlwdENvcmUva2pz
L2ludGVycHJldGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDYsNyArNDYsNyBAQCBDb21wbGV0
aW9uIEludGVycHJldGVyOjpjaGVja1N5bnRheChFeGVjCiAgICAgaW50IGVyckxpbmU7CiAgICAg
VVN0cmluZyBlcnJNc2c7CiAKLSAgICBSZWZQdHI8UHJvZ3JhbU5vZGU+IHByb2dOb2RlID0gZXhl
Yy0+cGFyc2VyKCktPnBhcnNlPFByb2dyYW1Ob2RlPihleGVjLCBzb3VyY2UsICZlcnJMaW5lLCAm
ZXJyTXNnKTsKKyAgICBSZWZQdHI8UHJvZ3JhbU5vZGU+IHByb2dOb2RlID0gZXhlYy0+Z2xvYmFs
RGF0YSgpLnBhcnNlci0+cGFyc2U8UHJvZ3JhbU5vZGU+KGV4ZWMsIHNvdXJjZSwgJmVyckxpbmUs
ICZlcnJNc2cpOwogICAgIGlmICghcHJvZ05vZGUpCiAgICAgICAgIHJldHVybiBDb21wbGV0aW9u
KFRocm93LCBFcnJvcjo6Y3JlYXRlKGV4ZWMsIFN5bnRheEVycm9yLCBlcnJNc2csIGVyckxpbmUs
IHNvdXJjZS5wcm92aWRlcigpLT5hc0lEKCksIHNvdXJjZS5wcm92aWRlcigpLT51cmwoKSkpOwog
ICAgIHJldHVybiBDb21wbGV0aW9uKE5vcm1hbCk7CkBAIC01OCw3ICs1OCw3IEBAIENvbXBsZXRp
b24gSW50ZXJwcmV0ZXI6OmV2YWx1YXRlKEV4ZWNTdGEKICAgICAKICAgICBpbnQgZXJyTGluZTsK
ICAgICBVU3RyaW5nIGVyck1zZzsKLSAgICBSZWZQdHI8UHJvZ3JhbU5vZGU+IHByb2dyYW1Ob2Rl
ID0gZXhlYy0+cGFyc2VyKCktPnBhcnNlPFByb2dyYW1Ob2RlPihleGVjLCBzb3VyY2UsICZlcnJM
aW5lLCAmZXJyTXNnKTsKKyAgICBSZWZQdHI8UHJvZ3JhbU5vZGU+IHByb2dyYW1Ob2RlID0gZXhl
Yy0+Z2xvYmFsRGF0YSgpLnBhcnNlci0+cGFyc2U8UHJvZ3JhbU5vZGU+KGV4ZWMsIHNvdXJjZSwg
JmVyckxpbmUsICZlcnJNc2cpOwogCiAgICAgaWYgKCFwcm9ncmFtTm9kZSkKICAgICAgICAgcmV0
dXJuIENvbXBsZXRpb24oVGhyb3csIEVycm9yOjpjcmVhdGUoZXhlYywgU3ludGF4RXJyb3IsIGVy
ck1zZywgZXJyTGluZSwgc291cmNlLnByb3ZpZGVyKCktPmFzSUQoKSwgc291cmNlLnByb3ZpZGVy
KCktPnVybCgpKSk7CkluZGV4OiBKYXZhU2NyaXB0Q29yZS9ranMvbm9kZXMuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIEphdmFTY3JpcHRDb3JlL2tqcy9ub2Rlcy5jcHAJKHJldmlzaW9uIDM3MzUyKQorKysg
SmF2YVNjcmlwdENvcmUva2pzL25vZGVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTU5LDcgKzE1
OSw3IEBAIHN0YXRpYyB2b2lkIHN1YnN0aXR1dGUoVVN0cmluZyYgc3RyaW5nLCAKIFJlZ2lzdGVy
SUQqIFRocm93YWJsZUV4cHJlc3Npb25EYXRhOjplbWl0VGhyb3dFcnJvcihDb2RlR2VuZXJhdG9y
JiBnZW5lcmF0b3IsIEVycm9yVHlwZSBlLCBjb25zdCBjaGFyKiBtc2cpCiB7CiAgICAgZ2VuZXJh
dG9yLmVtaXRFeHByZXNzaW9uSW5mbyhtX2Rpdm90LCBtX3N0YXJ0T2Zmc2V0LCBtX2VuZE9mZnNl
dCk7Ci0gICAgUmVnaXN0ZXJJRCogZXhjZXB0aW9uID0gZ2VuZXJhdG9yLmVtaXROZXdFcnJvcihn
ZW5lcmF0b3IubmV3VGVtcG9yYXJ5KCksIGUsIGpzU3RyaW5nKGdlbmVyYXRvci5nbG9iYWxFeGVj
KCksIG1zZykpOworICAgIFJlZ2lzdGVySUQqIGV4Y2VwdGlvbiA9IGdlbmVyYXRvci5lbWl0TmV3
RXJyb3IoZ2VuZXJhdG9yLm5ld1RlbXBvcmFyeSgpLCBlLCBqc1N0cmluZyhnZW5lcmF0b3IuZ2xv
YmFsRGF0YSgpLCBtc2cpKTsKICAgICBnZW5lcmF0b3IuZW1pdFRocm93KGV4Y2VwdGlvbik7CiAg
ICAgcmV0dXJuIGV4Y2VwdGlvbjsKIH0KQEAgLTE2OSw3ICsxNjksNyBAQCBSZWdpc3RlcklEKiBU
aHJvd2FibGVFeHByZXNzaW9uRGF0YTo6ZW1pCiAgICAgVVN0cmluZyBtZXNzYWdlID0gbXNnOwog
ICAgIHN1YnN0aXR1dGUobWVzc2FnZSwgbGFiZWwudXN0cmluZygpKTsKICAgICBnZW5lcmF0b3Iu
ZW1pdEV4cHJlc3Npb25JbmZvKG1fZGl2b3QsIG1fc3RhcnRPZmZzZXQsIG1fZW5kT2Zmc2V0KTsK
LSAgICBSZWdpc3RlcklEKiBleGNlcHRpb24gPSBnZW5lcmF0b3IuZW1pdE5ld0Vycm9yKGdlbmVy
YXRvci5uZXdUZW1wb3JhcnkoKSwgZSwganNTdHJpbmcoZ2VuZXJhdG9yLmdsb2JhbEV4ZWMoKSwg
bWVzc2FnZSkpOworICAgIFJlZ2lzdGVySUQqIGV4Y2VwdGlvbiA9IGdlbmVyYXRvci5lbWl0TmV3
RXJyb3IoZ2VuZXJhdG9yLm5ld1RlbXBvcmFyeSgpLCBlLCBqc1N0cmluZyhnZW5lcmF0b3IuZ2xv
YmFsRGF0YSgpLCBtZXNzYWdlKSk7CiAgICAgZ2VuZXJhdG9yLmVtaXRUaHJvdyhleGNlcHRpb24p
OwogICAgIHJldHVybiBleGNlcHRpb247CiB9CkBAIC0yMzgsNyArMjM4LDcgQEAgUmVnaXN0ZXJJ
RCogU3RyaW5nTm9kZTo6ZW1pdENvZGUoQ29kZUdlbgogCiBSZWdpc3RlcklEKiBSZWdFeHBOb2Rl
OjplbWl0Q29kZShDb2RlR2VuZXJhdG9yJiBnZW5lcmF0b3IsIFJlZ2lzdGVySUQqIGRzdCkKIHsK
LSAgICBSZWZQdHI8UmVnRXhwPiByZWdFeHAgPSBSZWdFeHA6OmNyZWF0ZShnZW5lcmF0b3IuZ2xv
YmFsRXhlYygpLCBtX3BhdHRlcm4sIG1fZmxhZ3MpOworICAgIFJlZlB0cjxSZWdFeHA+IHJlZ0V4
cCA9IFJlZ0V4cDo6Y3JlYXRlKGdlbmVyYXRvci5nbG9iYWxEYXRhKCksIG1fcGF0dGVybiwgbV9m
bGFncyk7CiAgICAgaWYgKCFyZWdFeHAtPmlzVmFsaWQoKSkKICAgICAgICAgcmV0dXJuIGVtaXRU
aHJvd0Vycm9yKGdlbmVyYXRvciwgU3ludGF4RXJyb3IsICgiSW52YWxpZCByZWd1bGFyIGV4cHJl
c3Npb246ICIgKyBVU3RyaW5nKHJlZ0V4cC0+ZXJyb3JNZXNzYWdlKCkpKS5VVEY4U3RyaW5nKCku
Y19zdHIoKSk7CiAgICAgaWYgKGRzdCA9PSBpZ25vcmVkUmVzdWx0KCkpCkBAIC0zMDAsNyArMzAw
LDcgQEAgUmVnaXN0ZXJJRCogQXJyYXlOb2RlOjplbWl0Q29kZShDb2RlR2VuZQogICAgIH0KIAog
ICAgIGlmIChtX2VsaXNpb24pIHsKLSAgICAgICAgUmVnaXN0ZXJJRCogdmFsdWUgPSBnZW5lcmF0
b3IuZW1pdExvYWQoMCwganNOdW1iZXIoZ2VuZXJhdG9yLmdsb2JhbEV4ZWMoKSwgbV9lbGlzaW9u
ICsgbGVuZ3RoKSk7CisgICAgICAgIFJlZ2lzdGVySUQqIHZhbHVlID0gZ2VuZXJhdG9yLmVtaXRM
b2FkKDAsIGpzTnVtYmVyKGdlbmVyYXRvci5nbG9iYWxEYXRhKCksIG1fZWxpc2lvbiArIGxlbmd0
aCkpOwogICAgICAgICBnZW5lcmF0b3IuZW1pdFB1dEJ5SWQoYXJyYXkuZ2V0KCksIGdlbmVyYXRv
ci5wcm9wZXJ0eU5hbWVzKCkubGVuZ3RoLCB2YWx1ZSk7CiAgICAgfQogCkBAIC03NzUsNyArNzc1
LDcgQEAgUmVnaXN0ZXJJRCogSW5zdGFuY2VPZk5vZGU6OmVtaXRDb2RlKENvZAogICAgIFJlZlB0
cjxSZWdpc3RlcklEPiBzcmMyID0gZ2VuZXJhdG9yLmVtaXROb2RlKG1fZXhwcjIuZ2V0KCkpOwog
CiAgICAgZ2VuZXJhdG9yLmVtaXRFeHByZXNzaW9uSW5mbyhtX2Rpdm90LCBtX3N0YXJ0T2Zmc2V0
LCBtX2VuZE9mZnNldCk7Ci0gICAgUmVnaXN0ZXJJRCogc3JjMlByb3RvdHlwZSA9IGdlbmVyYXRv
ci5lbWl0R2V0QnlJZChnZW5lcmF0b3IubmV3VGVtcG9yYXJ5KCksIHNyYzIuZ2V0KCksIGdlbmVy
YXRvci5nbG9iYWxFeGVjKCktPnByb3BlcnR5TmFtZXMoKS5wcm90b3R5cGUpOworICAgIFJlZ2lz
dGVySUQqIHNyYzJQcm90b3R5cGUgPSBnZW5lcmF0b3IuZW1pdEdldEJ5SWQoZ2VuZXJhdG9yLm5l
d1RlbXBvcmFyeSgpLCBzcmMyLmdldCgpLCBnZW5lcmF0b3IuZ2xvYmFsRGF0YSgpLT5wcm9wZXJ0
eU5hbWVzLT5wcm90b3R5cGUpOwogCiAgICAgZ2VuZXJhdG9yLmVtaXRFeHByZXNzaW9uSW5mbyht
X2Rpdm90LCBtX3N0YXJ0T2Zmc2V0LCBtX2VuZE9mZnNldCk7CiAgICAgcmV0dXJuIGdlbmVyYXRv
ci5lbWl0SW5zdGFuY2VPZihnZW5lcmF0b3IuZmluYWxEZXN0aW5hdGlvbihkc3QsIHNyYzEuZ2V0
KCkpLCBzcmMxLmdldCgpLCBzcmMyLmdldCgpLCBzcmMyUHJvdG90eXBlKTsKSW5kZXg6IEphdmFT
Y3JpcHRDb3JlL2tqcy9ub2Rlcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL2tqcy9u
b2Rlcy5oCShyZXZpc2lvbiAzNzM1MikKKysrIEphdmFTY3JpcHRDb3JlL2tqcy9ub2Rlcy5oCSh3
b3JraW5nIGNvcHkpCkBAIC0xMTYsMjUgKzExNiwxMiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAg
ICAgUHJlY0V4cHJlc3Npb24KICAgICB9OwogCi0gICAgc3RydWN0IERlY2xhcmF0aW9uU3RhY2tz
IHsKKyAgICBuYW1lc3BhY2UgRGVjbGFyYXRpb25TdGFja3MgewogICAgICAgICB0eXBlZGVmIFZl
Y3RvcjxOb2RlKiwgMTY+IE5vZGVTdGFjazsKLSAgICAgICAgZW51bSB7IElzQ29uc3RhbnQgPSAx
LCBIYXNJbml0aWFsaXplciA9IDIgfSBWYXJBdHRyczsKKyAgICAgICAgZW51bSBWYXJBdHRycyB7
IElzQ29uc3RhbnQgPSAxLCBIYXNJbml0aWFsaXplciA9IDIgfTsKICAgICAgICAgdHlwZWRlZiBW
ZWN0b3I8c3RkOjpwYWlyPElkZW50aWZpZXIsIHVuc2lnbmVkPiwgMTY+IFZhclN0YWNrOwogICAg
ICAgICB0eXBlZGVmIFZlY3RvcjxSZWZQdHI8RnVuY0RlY2xOb2RlPiwgMTY+IEZ1bmN0aW9uU3Rh
Y2s7Ci0KLSAgICAgICAgRGVjbGFyYXRpb25TdGFja3MoRXhlY1N0YXRlKiBlLCBOb2RlU3RhY2sm
IG4sIFZhclN0YWNrJiB2LCBGdW5jdGlvblN0YWNrJiBmKQotICAgICAgICAgICAgOiBleGVjKGUp
Ci0gICAgICAgICAgICAsIG5vZGVTdGFjayhuKQotICAgICAgICAgICAgLCB2YXJTdGFjayh2KQot
ICAgICAgICAgICAgLCBmdW5jdGlvblN0YWNrKGYpCi0gICAgICAgIHsKLSAgICAgICAgfQotCi0g
ICAgICAgIEV4ZWNTdGF0ZSogZXhlYzsKLSAgICAgICAgTm9kZVN0YWNrJiBub2RlU3RhY2s7Ci0g
ICAgICAgIFZhclN0YWNrJiB2YXJTdGFjazsKLSAgICAgICAgRnVuY3Rpb25TdGFjayYgZnVuY3Rp
b25TdGFjazsKLSAgICB9OworICAgIH0KIAogICAgIHN0cnVjdCBTd2l0Y2hJbmZvIHsKICAgICAg
ICAgZW51bSBTd2l0Y2hUeXBlIHsgU3dpdGNoTm9uZSwgU3dpdGNoSW1tZWRpYXRlLCBTd2l0Y2hD
aGFyYWN0ZXIsIFN3aXRjaFN0cmluZyB9OwpJbmRleDogSmF2YVNjcmlwdENvcmUva2pzL3JlZ2V4
cC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUva2pzL3JlZ2V4cC5jcHAJKHJldmlz
aW9uIDM3MzUyKQorKysgSmF2YVNjcmlwdENvcmUva2pzL3JlZ2V4cC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTMyLDkgKzMyLDcgQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAKLQotCi1pbmxpbmUgUmVn
RXhwOjpSZWdFeHAoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBVU3RyaW5nJiBwYXR0ZXJuKQoraW5s
aW5lIFJlZ0V4cDo6UmVnRXhwKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgY29uc3QgVVN0cmlu
ZyYgcGF0dGVybikKICAgICA6IG1fcGF0dGVybihwYXR0ZXJuKQogICAgICwgbV9mbGFnQml0cygw
KQogICAgICwgbV9yZWdFeHAoMCkKQEAgLTQyLDIyICs0MCwyMyBAQCBpbmxpbmUgUmVnRXhwOjpS
ZWdFeHAoRXhlY1N0YXRlKiBleGVjLCBjCiAgICAgLCBtX251bVN1YnBhdHRlcm5zKDApCiB7CiAj
aWYgRU5BQkxFKFdSRUMpCi0gICAgaWYgKCEobV93cmVjRnVuY3Rpb24gPSAoV1JFQ0Z1bmN0aW9u
KUNUSTo6Y29tcGlsZVJlZ0V4cChleGVjLCBwYXR0ZXJuLCAmbV9udW1TdWJwYXR0ZXJucywgJm1f
Y29uc3RydWN0aW9uRXJyb3IpKSkKKyAgICBtX3dyZWNGdW5jdGlvbiA9IHJlaW50ZXJwcmV0X2Nh
c3Q8V1JFQ0Z1bmN0aW9uPihDVEk6OmNvbXBpbGVSZWdFeHAoZ2xvYmFsRGF0YS0+bWFjaGluZSwg
cGF0dGVybiwgJm1fbnVtU3VicGF0dGVybnMsICZtX2NvbnN0cnVjdGlvbkVycm9yKSk7CisgICAg
aWYgKG1fd3JlY0Z1bmN0aW9uKQorICAgICAgICByZXR1cm47CisgICAgLy8gRmFsbCB0aHJvdWdo
IHRvIG5vbi1XUkVDIGNhc2UuCiAjZWxzZQotICAgIFVOVVNFRF9QQVJBTShleGVjKTsKKyAgICBV
TlVTRURfUEFSQU0oZ2xvYmFsRGF0YSk7CiAjZW5kaWYKLSAgICB7Ci0gICAgICAgIG1fcmVnRXhw
ID0ganNSZWdFeHBDb21waWxlKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgVUNoYXIqPihwYXR0ZXJu
LmRhdGEoKSksIHBhdHRlcm4uc2l6ZSgpLAotICAgICAgICAgICAgSlNSZWdFeHBEb05vdElnbm9y
ZUNhc2UsIEpTUmVnRXhwU2luZ2xlTGluZSwgJm1fbnVtU3VicGF0dGVybnMsICZtX2NvbnN0cnVj
dGlvbkVycm9yKTsKLSAgICB9CisgICAgbV9yZWdFeHAgPSBqc1JlZ0V4cENvbXBpbGUocmVpbnRl
cnByZXRfY2FzdDxjb25zdCBVQ2hhcio+KHBhdHRlcm4uZGF0YSgpKSwgcGF0dGVybi5zaXplKCks
CisgICAgICAgIEpTUmVnRXhwRG9Ob3RJZ25vcmVDYXNlLCBKU1JlZ0V4cFNpbmdsZUxpbmUsICZt
X251bVN1YnBhdHRlcm5zLCAmbV9jb25zdHJ1Y3Rpb25FcnJvcik7CiB9CiAKLVBhc3NSZWZQdHI8
UmVnRXhwPiBSZWdFeHA6OmNyZWF0ZShFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IFVTdHJpbmcmIHBh
dHRlcm4pCitQYXNzUmVmUHRyPFJlZ0V4cD4gUmVnRXhwOjpjcmVhdGUoSlNHbG9iYWxEYXRhKiBn
bG9iYWxEYXRhLCBjb25zdCBVU3RyaW5nJiBwYXR0ZXJuKQogewotICAgIHJldHVybiBhZG9wdFJl
ZihuZXcgUmVnRXhwKGV4ZWMsIHBhdHRlcm4pKTsKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3IFJl
Z0V4cChnbG9iYWxEYXRhLCBwYXR0ZXJuKSk7CiB9CiAKLWlubGluZSBSZWdFeHA6OlJlZ0V4cChF
eGVjU3RhdGUqIGV4ZWMsIGNvbnN0IFVTdHJpbmcmIHBhdHRlcm4sIGNvbnN0IFVTdHJpbmcmIGZs
YWdzKQoraW5saW5lIFJlZ0V4cDo6UmVnRXhwKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgY29u
c3QgVVN0cmluZyYgcGF0dGVybiwgY29uc3QgVVN0cmluZyYgZmxhZ3MpCiAgICAgOiBtX3BhdHRl
cm4ocGF0dGVybikKICAgICAsIG1fZmxhZ3MoZmxhZ3MpCiAgICAgLCBtX2ZsYWdCaXRzKDApCkBA
IC04NCwxOSArODMsMjAgQEAgaW5saW5lIFJlZ0V4cDo6UmVnRXhwKEV4ZWNTdGF0ZSogZXhlYywg
YwogICAgIH0KIAogI2lmIEVOQUJMRShXUkVDKQotICAgIGlmICghKG1fd3JlY0Z1bmN0aW9uID0g
KFdSRUNGdW5jdGlvbilDVEk6OmNvbXBpbGVSZWdFeHAoZXhlYywgcGF0dGVybiwgJm1fbnVtU3Vi
cGF0dGVybnMsICZtX2NvbnN0cnVjdGlvbkVycm9yLCAobV9mbGFnQml0cyAmIElnbm9yZUNhc2Up
LCAobV9mbGFnQml0cyAmIE11bHRpbGluZSkpKSkKKyAgICBtX3dyZWNGdW5jdGlvbiA9IHJlaW50
ZXJwcmV0X2Nhc3Q8V1JFQ0Z1bmN0aW9uPihDVEk6OmNvbXBpbGVSZWdFeHAoZ2xvYmFsRGF0YS0+
bWFjaGluZSwgcGF0dGVybiwgJm1fbnVtU3VicGF0dGVybnMsICZtX2NvbnN0cnVjdGlvbkVycm9y
LCAobV9mbGFnQml0cyAmIElnbm9yZUNhc2UpLCAobV9mbGFnQml0cyAmIE11bHRpbGluZSkpKTsK
KyAgICBpZiAobV93cmVjRnVuY3Rpb24pCisgICAgICAgIHJldHVybjsKKyAgICAvLyBGYWxsIHRo
cm91Z2ggdG8gbm9uLVdSRUMgY2FzZS4KICNlbHNlCi0gICAgVU5VU0VEX1BBUkFNKGV4ZWMpOwor
ICAgIFVOVVNFRF9QQVJBTShnbG9iYWxEYXRhKTsKICNlbmRpZgotICAgIHsKLSAgICAgICAgbV9y
ZWdFeHAgPSBqc1JlZ0V4cENvbXBpbGUocmVpbnRlcnByZXRfY2FzdDxjb25zdCBVQ2hhcio+KHBh
dHRlcm4uZGF0YSgpKSwgcGF0dGVybi5zaXplKCksCi0gICAgICAgICAgICBpZ25vcmVDYXNlT3B0
aW9uLCBtdWx0aWxpbmVPcHRpb24sICZtX251bVN1YnBhdHRlcm5zLCAmbV9jb25zdHJ1Y3Rpb25F
cnJvcik7Ci0gICAgfQorICAgIG1fcmVnRXhwID0ganNSZWdFeHBDb21waWxlKHJlaW50ZXJwcmV0
X2Nhc3Q8Y29uc3QgVUNoYXIqPihwYXR0ZXJuLmRhdGEoKSksIHBhdHRlcm4uc2l6ZSgpLAorICAg
ICAgICBpZ25vcmVDYXNlT3B0aW9uLCBtdWx0aWxpbmVPcHRpb24sICZtX251bVN1YnBhdHRlcm5z
LCAmbV9jb25zdHJ1Y3Rpb25FcnJvcik7CiB9CiAKLVBhc3NSZWZQdHI8UmVnRXhwPiBSZWdFeHA6
OmNyZWF0ZShFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IFVTdHJpbmcmIHBhdHRlcm4sIGNvbnN0IFVT
dHJpbmcmIGZsYWdzKQorUGFzc1JlZlB0cjxSZWdFeHA+IFJlZ0V4cDo6Y3JlYXRlKEpTR2xvYmFs
RGF0YSogZ2xvYmFsRGF0YSwgY29uc3QgVVN0cmluZyYgcGF0dGVybiwgY29uc3QgVVN0cmluZyYg
ZmxhZ3MpCiB7Ci0gICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBSZWdFeHAoZXhlYywgcGF0dGVybiwg
ZmxhZ3MpKTsKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3IFJlZ0V4cChnbG9iYWxEYXRhLCBwYXR0
ZXJuLCBmbGFncykpOwogfQogCiBSZWdFeHA6On5SZWdFeHAoKQpJbmRleDogSmF2YVNjcmlwdENv
cmUva2pzL3JlZ2V4cC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL2tqcy9yZWdleHAu
aAkocmV2aXNpb24gMzczNTIpCisrKyBKYXZhU2NyaXB0Q29yZS9ranMvcmVnZXhwLmgJKHdvcmtp
bmcgY29weSkKQEAgLTIyLDcgKzIyLDYgQEAKICNkZWZpbmUgS0pTX1JFR0VYUF9ICiAKICNpbmNs
dWRlICJ1c3RyaW5nLmgiCi0jaW5jbHVkZSAiRXhlY1N0YXRlLmgiCiAjaW5jbHVkZSA8d3RmL0Zv
cndhcmQuaD4KICNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgogI2luY2x1ZGUgPHdyZWMvV1JF
Qy5oPgpAQCAtMzEsMTAgKzMwLDEyIEBAIHN0cnVjdCBKU1JlZ0V4cDsKIAogbmFtZXNwYWNlIEpT
QyB7CiAKKyAgICBjbGFzcyBKU0dsb2JhbERhdGE7CisKICAgICBjbGFzcyBSZWdFeHAgOiBwdWJs
aWMgUmVmQ291bnRlZDxSZWdFeHA+IHsKICAgICBwdWJsaWM6Ci0gICAgICAgIHN0YXRpYyBQYXNz
UmVmUHRyPFJlZ0V4cD4gY3JlYXRlKEV4ZWNTdGF0ZSosIGNvbnN0IFVTdHJpbmcmIHBhdHRlcm4p
OwotICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxSZWdFeHA+IGNyZWF0ZShFeGVjU3RhdGUqLCBj
b25zdCBVU3RyaW5nJiBwYXR0ZXJuLCBjb25zdCBVU3RyaW5nJiBmbGFncyk7CisgICAgICAgIHN0
YXRpYyBQYXNzUmVmUHRyPFJlZ0V4cD4gY3JlYXRlKEpTR2xvYmFsRGF0YSosIGNvbnN0IFVTdHJp
bmcmIHBhdHRlcm4pOworICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxSZWdFeHA+IGNyZWF0ZShK
U0dsb2JhbERhdGEqLCBjb25zdCBVU3RyaW5nJiBwYXR0ZXJuLCBjb25zdCBVU3RyaW5nJiBmbGFn
cyk7CiAgICAgICAgIH5SZWdFeHAoKTsKIAogICAgICAgICBib29sIGdsb2JhbCgpIGNvbnN0IHsg
cmV0dXJuIG1fZmxhZ0JpdHMgJiBHbG9iYWw7IH0KQEAgLTUxLDggKzUyLDggQEAgbmFtZXNwYWNl
IEpTQyB7CiAgICAgICAgIHVuc2lnbmVkIG51bVN1YnBhdHRlcm5zKCkgY29uc3QgeyByZXR1cm4g
bV9udW1TdWJwYXR0ZXJuczsgfQogCiAgICAgcHJpdmF0ZToKLSAgICAgICAgUmVnRXhwKEV4ZWNT
dGF0ZSosIGNvbnN0IFVTdHJpbmcmIHBhdHRlcm4pOwotICAgICAgICBSZWdFeHAoRXhlY1N0YXRl
KiwgY29uc3QgVVN0cmluZyYgcGF0dGVybiwgY29uc3QgVVN0cmluZyYgZmxhZ3MpOworICAgICAg
ICBSZWdFeHAoSlNHbG9iYWxEYXRhKiwgY29uc3QgVVN0cmluZyYgcGF0dGVybik7CisgICAgICAg
IFJlZ0V4cChKU0dsb2JhbERhdGEqLCBjb25zdCBVU3RyaW5nJiBwYXR0ZXJuLCBjb25zdCBVU3Ry
aW5nJiBmbGFncyk7CiAKICAgICAgICAgdm9pZCBjb21waWxlKCk7CiAKSW5kZXg6IEphdmFTY3Jp
cHRDb3JlL3Byb2ZpbGVyL0hlYXZ5UHJvZmlsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRD
b3JlL3Byb2ZpbGVyL0hlYXZ5UHJvZmlsZS5oCShyZXZpc2lvbiAzNzM1MikKKysrIEphdmFTY3Jp
cHRDb3JlL3Byb2ZpbGVyL0hlYXZ5UHJvZmlsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw3ICsz
Miw2IEBACiAKIG5hbWVzcGFjZSBKU0MgewogCi0gICAgY2xhc3MgRXhlY1N0YXRlOwogICAgIGNs
YXNzIFVTdHJpbmc7CiAKICAgICBjbGFzcyBIZWF2eVByb2ZpbGUgOiBwdWJsaWMgUHJvZmlsZSB7
CkluZGV4OiBKYXZhU2NyaXB0Q29yZS9wcm9maWxlci9Qcm9maWxlLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
SmF2YVNjcmlwdENvcmUvcHJvZmlsZXIvUHJvZmlsZS5oCShyZXZpc2lvbiAzNzM1MikKKysrIEph
dmFTY3JpcHRDb3JlL3Byb2ZpbGVyL1Byb2ZpbGUuaAkod29ya2luZyBjb3B5KQpAQCAtMzMsOCAr
MzMsNiBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAotICAgIGNsYXNzIEV4ZWNTdGF0ZTsKLQogICAg
IGNsYXNzIFByb2ZpbGUgOiBwdWJsaWMgUmVmQ291bnRlZDxQcm9maWxlPiB7CiAgICAgcHVibGlj
OgogICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxQcm9maWxlPiBjcmVhdGUoY29uc3QgVVN0cmlu
ZyYgdGl0bGUsIHVuc2lnbmVkIHVpZCk7CkluZGV4OiBKYXZhU2NyaXB0Q29yZS93cmVjL1dSRUMu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL3dyZWMvV1JFQy5jcHAJKHJldmlzaW9u
IDM3MzUyKQorKysgSmF2YVNjcmlwdENvcmUvd3JlYy9XUkVDLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMjksNyArMjksNiBAQAogI2lmIEVOQUJMRShXUkVDKQogCiAjaW5jbHVkZSAiQ2hhcmFjdGVy
Q2xhc3NDb25zdHJ1Y3Rvci5oIgotI2luY2x1ZGUgIkV4ZWNTdGF0ZS5oIgogI2luY2x1ZGUgIk1h
Y2hpbmUuaCIKICNpbmNsdWRlICJwY3JlX2ludGVybmFsLmgiCiAKSW5kZXg6IEphdmFTY3JpcHRD
b3JlL3dyZWMvV1JFQy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL3dyZWMvV1JFQy5o
CShyZXZpc2lvbiAzNzM1MikKKysrIEphdmFTY3JpcHRDb3JlL3dyZWMvV1JFQy5oCSh3b3JraW5n
IGNvcHkpCkBAIC00Myw3ICs0Myw2IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgdHlwZWRlZiBp
bnQgKCpXUkVDRnVuY3Rpb24pKGNvbnN0IFVDaGFyKiBpbnB1dCwgdW5zaWduZWQgc3RhcnQsIHVu
c2lnbmVkIGxlbmd0aCwgaW50KiBvdXRwdXQpIFdSRUNfQ0FMTDsKIAotICAgIGNsYXNzIEV4ZWNT
dGF0ZTsKICAgICBjbGFzcyBHZW5lcmF0ZUF0b21GdW5jdG9yOwogICAgIHN0cnVjdCBDaGFyYWN0
ZXJDbGFzc1JhbmdlOwogICAgIHN0cnVjdCBDaGFyYWN0ZXJDbGFzczsKSW5kZXg6IFdlYktpdC9t
YWMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9tYWMvQ2hhbmdlTG9nCShyZXZpc2lv
biAzNzM1MikKKysrIFdlYktpdC9tYWMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMg
KzEsMTMgQEAKKzIwMDgtMTAtMDYgIERhcmluIEFkbGVyICA8ZGFyaW5AYXBwbGUuY29tPgorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIC0gaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIxNDAzCisgICAgICAgICAgQnVnIDIxNDAz
OiB1c2UgbmV3IENhbGxGcmFtZSBjbGFzcyByYXRoZXIgdGhhbiBSZWdpc3RlciogZm9yIGNhbGwg
ZnJhbWUgbWFuaXB1bGF0aW9uCisKKyAgICAgICAgKiBXZWJWaWV3L1dlYlNjcmlwdERlYnVnZ2Vy
Lm1tOgorICAgICAgICAoV2ViU2NyaXB0RGVidWdnZXI6OldlYlNjcmlwdERlYnVnZ2VyKTogVXBk
YXRlIHNpbmNlIERlYnVnZ2VyQ2FsbEZyYW1lIGlzIHNpbXBsZXIgbm93LgorCiAyMDA4LTEwLTA2
ICBLZXZpbiBEZWNrZXIgIDxrZGVja2VyQGFwcGxlLmNvbT4KIAogICAgICAgICBSdWJiZXItc3Rh
bXBlZCBieSBBbmRlcnMgQ2FybHNzb24uCkluZGV4OiBXZWJLaXQvbWFjL1dlYlZpZXcvV2ViU2Ny
aXB0RGVidWdnZXIubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L21hYy9XZWJWaWV3L1dlYlNjcmlw
dERlYnVnZ2VyLm1tCShyZXZpc2lvbiAzNzM1MikKKysrIFdlYktpdC9tYWMvV2ViVmlldy9XZWJT
Y3JpcHREZWJ1Z2dlci5tbQkod29ya2luZyBjb3B5KQpAQCAtODAsNyArODAsNyBAQCBXZWJTY3Jp
cHREZWJ1Z2dlcjo6V2ViU2NyaXB0RGVidWdnZXIoSlNHCiAgICAgOiBtX2NhbGxpbmdEZWxlZ2F0
ZShmYWxzZSkKIHsKICAgICBhdHRhY2goZ2xvYmFsT2JqZWN0KTsKLSAgICBEZWJ1Z2dlckNhbGxG
cmFtZSBnbG9iYWxDYWxsRnJhbWUoZ2xvYmFsT2JqZWN0LCAwLCBnbG9iYWxPYmplY3QtPmdsb2Jh
bFNjb3BlQ2hhaW4oKS5ub2RlKCksIDAsIDApOworICAgIERlYnVnZ2VyQ2FsbEZyYW1lIGdsb2Jh
bENhbGxGcmFtZShnbG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMoKSwgMCk7CiAgICAgY2FsbEV2ZW50
KGdsb2JhbENhbGxGcmFtZSwgMCwgLTEpOwogfQogCg==
</data>
<flag name="review"
          id="10951"
          type_id="1"
          status="+"
          setter="zwarich"
    />
          </attachment>
      

    </bug>

</bugzilla>