<?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>130644</bug_id>
          
          <creation_ts>2014-03-22 13:00:56 -0700</creation_ts>
          <short_desc>Call linking slow paths should be passed a CallLinkInfo* directly so that you can create a call IC without adding it to any CodeBlocks</short_desc>
          <delta_ts>2014-03-24 08:30:11 -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>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>130670</dependson>
          <blocked>129589</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Filip Pizlo">fpizlo</reporter>
          <assigned_to name="Filip Pizlo">fpizlo</assigned_to>
          <cc>barraclough</cc>
    
    <cc>ggaren</cc>
    
    <cc>mark.lam</cc>
    
    <cc>mhahnenberg</cc>
    
    <cc>msaboff</cc>
    
    <cc>nrotem</cc>
    
    <cc>oliver</cc>
    
    <cc>ossy</cc>
    
    <cc>sam</cc>
    
    <cc>simon.fraser</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>993546</commentid>
    <comment_count>0</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2014-03-22 13:00:56 -0700</bug_when>
    <thetext>Patch forthcoming.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>993547</commentid>
    <comment_count>1</comment_count>
      <attachid>227564</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2014-03-22 13:01:43 -0700</bug_when>
    <thetext>Created attachment 227564
less than half way there</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>993573</commentid>
    <comment_count>2</comment_count>
      <attachid>227574</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2014-03-22 14:35:24 -0700</bug_when>
    <thetext>Created attachment 227574
it builds on 64-bit

It even appears to pass testapi, but I&apos;m sure it has many, many bugs.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>993578</commentid>
    <comment_count>3</comment_count>
      <attachid>227576</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2014-03-22 15:45:56 -0700</bug_when>
    <thetext>Created attachment 227576
starting to work on 64-bit x86</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>993618</commentid>
    <comment_count>4</comment_count>
      <attachid>227595</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2014-03-22 20:06:05 -0700</bug_when>
    <thetext>Created attachment 227595
the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>993624</commentid>
    <comment_count>5</comment_count>
      <attachid>227595</attachid>
    <who name="Andreas Kling">kling</who>
    <bug_when>2014-03-22 21:26:19 -0700</bug_when>
    <thetext>Comment on attachment 227595
the patch

r=me

I&apos;d suggest using &quot;auto&quot; instead of Bag&lt;T&gt;::iterator, since you seem to like short lines. ;)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>993627</commentid>
    <comment_count>6</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2014-03-22 21:35:10 -0700</bug_when>
    <thetext>(In reply to comment #5)
&gt; (From update of attachment 227595 [details])
&gt; r=me
&gt; 
&gt; I&apos;d suggest using &quot;auto&quot; instead of Bag&lt;T&gt;::iterator, since you seem to like short lines. ;)

I did it!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>993628</commentid>
    <comment_count>7</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2014-03-22 21:35:34 -0700</bug_when>
    <thetext>Landed in http://trac.webkit.org/changeset/166135</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>993664</commentid>
    <comment_count>8</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2014-03-23 09:49:54 -0700</bug_when>
    <thetext>This broke the CLOOP build.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>993812</commentid>
    <comment_count>9</comment_count>
    <who name="Csaba Osztrogonác">ossy</who>
    <bug_when>2014-03-24 08:30:11 -0700</bug_when>
    <thetext>(In reply to comment #8)
&gt; This broke the CLOOP build.

new bug report for fixing the build: https://bugs.webkit.org/show_bug.cgi?id=130670</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>227564</attachid>
            <date>2014-03-22 13:01:43 -0700</date>
            <delta_ts>2014-03-22 14:35:24 -0700</delta_ts>
            <desc>less than half way there</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>38593</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9DYWxsTGlua0luZm8uaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ2FsbExpbmtJbmZvLmgJ
KHJldmlzaW9uIDE2NjEwOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9DYWxs
TGlua0luZm8uaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDEyLCAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtOTksMTUgKzk5LDE3IEBAIHN0cnVjdCBDYWxsTGlu
a0luZm8gOiBwdWJsaWMgQmFzaWNSYXdTZW4KICAgICB9CiB9OwogCi1pbmxpbmUgdm9pZCogZ2V0
Q2FsbExpbmtJbmZvUmV0dXJuTG9jYXRpb24oQ2FsbExpbmtJbmZvKiBjYWxsTGlua0luZm8pCitp
bmxpbmUgQ29kZU9yaWdpbiBnZXRDYWxsTGlua0luZm9Db2RlT3JpZ2luKENhbGxMaW5rSW5mbyYg
Y2FsbExpbmtJbmZvKQogewotICAgIHJldHVybiBjYWxsTGlua0luZm8tPmNhbGxSZXR1cm5Mb2Nh
dGlvbi5leGVjdXRhYmxlQWRkcmVzcygpOworICAgIHJldHVybiBjYWxsTGlua0luZm8uY29kZU9y
aWdpbjsKIH0KIAotaW5saW5lIHVuc2lnbmVkIGdldENhbGxMaW5rSW5mb0J5dGVjb2RlSW5kZXgo
Q2FsbExpbmtJbmZvKiBjYWxsTGlua0luZm8pCi17Ci0gICAgcmV0dXJuIGNhbGxMaW5rSW5mby0+
Y29kZU9yaWdpbi5ieXRlY29kZUluZGV4OwotfQordHlwZWRlZiBIYXNoTWFwPENvZGVPcmlnaW4s
IENhbGxMaW5rSW5mbyosIENvZGVPcmlnaW5BcHByb3hpbWF0ZUhhc2g+IENhbGxMaW5rSW5mb01h
cDsKKworI2Vsc2UgLy8gRU5BQkxFKEpJVCkKKwordHlwZWRlZiBIYXNoTWFwPGludCwgdm9pZCo+
IENhbGxMaW5rSW5mb01hcDsKKwogI2VuZGlmIC8vIEVOQUJMRShKSVQpCiAKIH0gLy8gbmFtZXNw
YWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9j
ay5jcHAJKHJldmlzaW9uIDE2NjEwOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9Db2RlQmxvY2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00ODMsMTIgKzQ4MywxNCBAQCB2b2lk
IENvZGVCbG9jazo6ZHVtcEJ5dGVjb2RlKFByaW50U3RyZWFtCiAgICAgb3V0LnByaW50ZigiXG4i
KTsKICAgICAKICAgICBTdHViSW5mb01hcCBzdHViSW5mb3M7CisgICAgQ2FsbExpbmtJbmZvTWFw
IGNhbGxMaW5rSW5mb3M7CiAgICAgZ2V0U3R1YkluZm9NYXAoc3R1YkluZm9zKTsKKyAgICBnZXRD
YWxsTGlua0luZm9NYXAoY2FsbExpbmtJbmZvcyk7CiAgICAgCiAgICAgY29uc3QgSW5zdHJ1Y3Rp
b24qIGJlZ2luID0gaW5zdHJ1Y3Rpb25zKCkuYmVnaW4oKTsKICAgICBjb25zdCBJbnN0cnVjdGlv
biogZW5kID0gaW5zdHJ1Y3Rpb25zKCkuZW5kKCk7CiAgICAgZm9yIChjb25zdCBJbnN0cnVjdGlv
biogaXQgPSBiZWdpbjsgaXQgIT0gZW5kOyArK2l0KQotICAgICAgICBkdW1wQnl0ZWNvZGUob3V0
LCBleGVjLCBiZWdpbiwgaXQsIHN0dWJJbmZvcyk7CisgICAgICAgIGR1bXBCeXRlY29kZShvdXQs
IGV4ZWMsIGJlZ2luLCBpdCwgc3R1YkluZm9zLCBjYWxsTGlua0luZm9zKTsKICAgICAKICAgICBp
ZiAobnVtYmVyT2ZJZGVudGlmaWVycygpKSB7CiAgICAgICAgIG91dC5wcmludGYoIlxuSWRlbnRp
ZmllcnM6XG4iKTsKQEAgLTYxNiw3ICs2MTgsOSBAQCB2b2lkIENvZGVCbG9jazo6cHJpbnRMb2Nh
dGlvbk9wQW5kUmVnaXN0CiAgICAgb3V0LnByaW50ZigiJXMiLCByZWdpc3Rlck5hbWUob3BlcmFu
ZCkuZGF0YSgpKTsKIH0KIAotdm9pZCBDb2RlQmxvY2s6OmR1bXBCeXRlY29kZShQcmludFN0cmVh
bSYgb3V0LCBFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEluc3RydWN0aW9uKiBiZWdpbiwgY29uc3Qg
SW5zdHJ1Y3Rpb24qJiBpdCwgY29uc3QgU3R1YkluZm9NYXAmIG1hcCkKK3ZvaWQgQ29kZUJsb2Nr
OjpkdW1wQnl0ZWNvZGUoCisgICAgUHJpbnRTdHJlYW0mIG91dCwgRXhlY1N0YXRlKiBleGVjLCBj
b25zdCBJbnN0cnVjdGlvbiogYmVnaW4sIGNvbnN0IEluc3RydWN0aW9uKiYgaXQsCisgICAgY29u
c3QgU3R1YkluZm9NYXAmIHN0dWJJbmZvcywgY29uc3QgQ2FsbExpbmtJbmZvTWFwJiBjYWxsTGlu
a0luZm9zKQogewogICAgIGludCBsb2NhdGlvbiA9IGl0IC0gYmVnaW47CiAgICAgYm9vbCBoYXNQ
cmludGVkUHJvZmlsaW5nID0gZmFsc2U7CkBAIC05MTMsNyArOTE3LDcgQEAgdm9pZCBDb2RlQmxv
Y2s6OmR1bXBCeXRlY29kZShQcmludFN0cmVhbQogICAgICAgICBjYXNlIG9wX2dldF9ieV9pZF9v
dXRfb2ZfbGluZToKICAgICAgICAgY2FzZSBvcF9nZXRfYXJyYXlfbGVuZ3RoOiB7CiAgICAgICAg
ICAgICBwcmludEdldEJ5SWRPcChvdXQsIGV4ZWMsIGxvY2F0aW9uLCBpdCk7Ci0gICAgICAgICAg
ICBwcmludEdldEJ5SWRDYWNoZVN0YXR1cyhvdXQsIGV4ZWMsIGxvY2F0aW9uLCBtYXApOworICAg
ICAgICAgICAgcHJpbnRHZXRCeUlkQ2FjaGVTdGF0dXMob3V0LCBleGVjLCBsb2NhdGlvbiwgc3R1
YkluZm9zKTsKICAgICAgICAgICAgIGR1bXBWYWx1ZVByb2ZpbGluZyhvdXQsIGl0LCBoYXNQcmlu
dGVkUHJvZmlsaW5nKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CkBAIC0xMzgwLDcg
KzEzODQsOSBAQCB2b2lkIENvZGVCbG9jazo6ZHVtcEJ5dGVjb2RlKFByaW50U3RyZWFtCiAgICAg
b3V0LnByaW50KCJcbiIpOwogfQogCi12b2lkIENvZGVCbG9jazo6ZHVtcEJ5dGVjb2RlKFByaW50
U3RyZWFtJiBvdXQsIHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0LCBjb25zdCBTdHViSW5mb01hcCYg
bWFwKQordm9pZCBDb2RlQmxvY2s6OmR1bXBCeXRlY29kZSgKKyAgICBQcmludFN0cmVhbSYgb3V0
LCB1bnNpZ25lZCBieXRlY29kZU9mZnNldCwKKyAgICBjb25zdCBTdHViSW5mb01hcCYgc3R1Yklu
Zm9zLCBjb25zdCBDYWxsTGlua0luZm9NYXAmIGNhbGxMaW5rSW5mb3MpCiB7CiAgICAgRXhlY1N0
YXRlKiBleGVjID0gbV9nbG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMoKTsKICAgICBjb25zdCBJbnN0
cnVjdGlvbiogaXQgPSBpbnN0cnVjdGlvbnMoKS5iZWdpbigpICsgYnl0ZWNvZGVPZmZzZXQ7CkBA
IC0yMjg4LDYgKzIyOTQsMjEgQEAgdm9pZCBDb2RlQmxvY2s6OmdldFN0dWJJbmZvTWFwKFN0dWJJ
bmZvTQogICAgIGdldFN0dWJJbmZvTWFwKGxvY2tlciwgcmVzdWx0KTsKIH0KIAordm9pZCBDb2Rl
QmxvY2s6OmdldENhbGxMaW5rSW5mb01hcChjb25zdCBDb25jdXJyZW50SklUTG9ja2VyJiwgQ2Fs
bExpbmtJbmZvTWFwJiByZXN1bHQpCit7CisjaWYgRU5BQkxFKEpJVCkKKyAgICB0b0hhc2hNYXAo
bV9jYWxsTGlua0luZm9zLCBnZXRDYWxsTGlua0luZm9Db2RlT3JpZ2luLCByZXN1bHQpOworI2Vs
c2UKKyAgICBVTlVTRURfUEFSQU0ocmVzdWx0KTsKKyNlbmRpZgorfQorCit2b2lkIENvZGVCbG9j
azo6Z2V0Q2FsbExpbmtJbmZvTWFwKENhbGxMaW5rSW5mb01hcCYgcmVzdWx0KQoreworICAgIENv
bmN1cnJlbnRKSVRMb2NrZXIgbG9ja2VyKG1fbG9jayk7CisgICAgZ2V0Q2FsbExpbmtJbmZvTWFw
KGxvY2tlciwgcmVzdWx0KTsKK30KKwogI2lmIEVOQUJMRShKSVQpCiBTdHJ1Y3R1cmVTdHViSW5m
byogQ29kZUJsb2NrOjphZGRTdHViSW5mbygpCiB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCShyZXZpc2lvbiAxNjYxMDkpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTE0Nyw3
ICsxNDcsOSBAQCBwdWJsaWM6CiAgICAgdm9pZCB2aXNpdEFnZ3JlZ2F0ZShTbG90VmlzaXRvciYp
OwogCiAgICAgdm9pZCBkdW1wQnl0ZWNvZGUoUHJpbnRTdHJlYW0mID0gV1RGOjpkYXRhRmlsZSgp
KTsKLSAgICB2b2lkIGR1bXBCeXRlY29kZShQcmludFN0cmVhbSYsIHVuc2lnbmVkIGJ5dGVjb2Rl
T2Zmc2V0LCBjb25zdCBTdHViSW5mb01hcCYgPSBTdHViSW5mb01hcCgpKTsKKyAgICB2b2lkIGR1
bXBCeXRlY29kZSgKKyAgICAgICAgUHJpbnRTdHJlYW0mLCB1bnNpZ25lZCBieXRlY29kZU9mZnNl
dCwKKyAgICAgICAgY29uc3QgU3R1YkluZm9NYXAmID0gU3R1YkluZm9NYXAoKSwgY29uc3QgQ2Fs
bExpbmtJbmZvTWFwJiA9IENhbGxMaW5rSW5mb01hcCgpKTsKICAgICB2b2lkIHByaW50U3RydWN0
dXJlcyhQcmludFN0cmVhbSYsIGNvbnN0IEluc3RydWN0aW9uKik7CiAgICAgdm9pZCBwcmludFN0
cnVjdHVyZShQcmludFN0cmVhbSYsIGNvbnN0IGNoYXIqIG5hbWUsIGNvbnN0IEluc3RydWN0aW9u
KiwgaW50IG9wZXJhbmQpOwogCkBAIC0xNzgsMTEgKzE4MCwxNCBAQCBwdWJsaWM6CiAKICAgICB2
b2lkIGdldFN0dWJJbmZvTWFwKGNvbnN0IENvbmN1cnJlbnRKSVRMb2NrZXImLCBTdHViSW5mb01h
cCYgcmVzdWx0KTsKICAgICB2b2lkIGdldFN0dWJJbmZvTWFwKFN0dWJJbmZvTWFwJiByZXN1bHQp
OworICAgIAorICAgIHZvaWQgZ2V0Q2FsbExpbmtJbmZvTWFwKGNvbnN0IENvbmN1cnJlbnRKSVRM
b2NrZXImLCBDYWxsTGlua0luZm9NYXAmIHJlc3VsdCk7CisgICAgdm9pZCBnZXRDYWxsTGlua0lu
Zm9NYXAoQ2FsbExpbmtJbmZvTWFwJiByZXN1bHQpOwogCiAjaWYgRU5BQkxFKEpJVCkKICAgICBT
dHJ1Y3R1cmVTdHViSW5mbyogYWRkU3R1YkluZm8oKTsKLSAgICBCYWc8U3RydWN0dXJlU3R1Yklu
Zm8+OjppdGVyYXRvciBiZWdpbigpIHsgcmV0dXJuIG1fc3R1YkluZm9zLmJlZ2luKCk7IH0KLSAg
ICBCYWc8U3RydWN0dXJlU3R1YkluZm8+OjppdGVyYXRvciBlbmQoKSB7IHJldHVybiBtX3N0dWJJ
bmZvcy5lbmQoKTsgfQorICAgIEJhZzxTdHJ1Y3R1cmVTdHViSW5mbz46Oml0ZXJhdG9yIHN0dWJJ
bmZvQmVnaW4oKSB7IHJldHVybiBtX3N0dWJJbmZvcy5iZWdpbigpOyB9CisgICAgQmFnPFN0cnVj
dHVyZVN0dWJJbmZvPjo6aXRlcmF0b3Igc3R1YkluZm9FbmQoKSB7IHJldHVybiBtX3N0dWJJbmZv
cy5lbmQoKTsgfQogCiAgICAgdm9pZCByZXNldFN0dWIoU3RydWN0dXJlU3R1YkluZm8mKTsKICAg
ICAKQEAgLTE5MSwxNiArMTk2LDkgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gKihiaW5hcnlT
ZWFyY2g8QnlWYWxJbmZvLCB1bnNpZ25lZD4obV9ieVZhbEluZm9zLCBtX2J5VmFsSW5mb3Muc2l6
ZSgpLCBieXRlY29kZUluZGV4LCBnZXRCeVZhbEluZm9CeXRlY29kZUluZGV4KSk7CiAgICAgfQog
Ci0gICAgQ2FsbExpbmtJbmZvJiBnZXRDYWxsTGlua0luZm8oUmV0dXJuQWRkcmVzc1B0ciByZXR1
cm5BZGRyZXNzKQotICAgIHsKLSAgICAgICAgcmV0dXJuICooYmluYXJ5U2VhcmNoPENhbGxMaW5r
SW5mbywgdm9pZCo+KG1fY2FsbExpbmtJbmZvcywgbV9jYWxsTGlua0luZm9zLnNpemUoKSwgcmV0
dXJuQWRkcmVzcy52YWx1ZSgpLCBnZXRDYWxsTGlua0luZm9SZXR1cm5Mb2NhdGlvbikpOwotICAg
IH0KLQotICAgIENhbGxMaW5rSW5mbyYgZ2V0Q2FsbExpbmtJbmZvKHVuc2lnbmVkIGJ5dGVjb2Rl
SW5kZXgpCi0gICAgewotICAgICAgICBBU1NFUlQoIUpJVENvZGU6OmlzT3B0aW1pemluZ0pJVChq
aXRUeXBlKCkpKTsKLSAgICAgICAgcmV0dXJuICooYmluYXJ5U2VhcmNoPENhbGxMaW5rSW5mbywg
dW5zaWduZWQ+KG1fY2FsbExpbmtJbmZvcywgbV9jYWxsTGlua0luZm9zLnNpemUoKSwgYnl0ZWNv
ZGVJbmRleCwgZ2V0Q2FsbExpbmtJbmZvQnl0ZWNvZGVJbmRleCkpOwotICAgIH0KKyAgICBDYWxs
TGlua0luZm8qIGFkZENhbGxMaW5rSW5mbygpOworICAgIEJhZzxDYWxsTGlua0luZm8+OjppdGVy
YXRvciBjYWxsTGlua0luZm9zQmVnaW4oKSB7IHJldHVybiBtX2NhbGxMaW5rSW5mb3MuYmVnaW4o
KTsgfQorICAgIEJhZzxDYWxsTGlua0luZm8+OjppdGVyYXRvciBjYWxsTGlua0luZm9zRW5kKCkg
eyByZXR1cm4gbV9jYWxsTGlua0luZm9zLmVuZCgpOyB9CiAjZW5kaWYgLy8gRU5BQkxFKEpJVCkK
IAogICAgIHZvaWQgdW5saW5rSW5jb21pbmdDYWxscygpOwpAQCAtMzk5LDEwICszOTcsNiBAQCBw
dWJsaWM6CiAgICAgdm9pZCBzZXROdW1iZXJPZkJ5VmFsSW5mb3Moc2l6ZV90IHNpemUpIHsgbV9i
eVZhbEluZm9zLnJlc2l6ZVRvRml0KHNpemUpOyB9CiAgICAgc2l6ZV90IG51bWJlck9mQnlWYWxJ
bmZvcygpIGNvbnN0IHsgcmV0dXJuIG1fYnlWYWxJbmZvcy5zaXplKCk7IH0KICAgICBCeVZhbElu
Zm8mIGJ5VmFsSW5mbyhzaXplX3QgaW5kZXgpIHsgcmV0dXJuIG1fYnlWYWxJbmZvc1tpbmRleF07
IH0KLQotICAgIHZvaWQgc2V0TnVtYmVyT2ZDYWxsTGlua0luZm9zKHNpemVfdCBzaXplKSB7IG1f
Y2FsbExpbmtJbmZvcy5yZXNpemVUb0ZpdChzaXplKTsgfQotICAgIHNpemVfdCBudW1iZXJPZkNh
bGxMaW5rSW5mb3MoKSBjb25zdCB7IHJldHVybiBtX2NhbGxMaW5rSW5mb3Muc2l6ZSgpOyB9Ci0g
ICAgQ2FsbExpbmtJbmZvJiBjYWxsTGlua0luZm8oaW50IGluZGV4KSB7IHJldHVybiBtX2NhbGxM
aW5rSW5mb3NbaW5kZXhdOyB9CiAjZW5kaWYKIAogICAgIHVuc2lnbmVkIG51bWJlck9mQXJndW1l
bnRWYWx1ZVByb2ZpbGVzKCkKQEAgLTk2OCw3ICs5NjIsOSBAQCBwcml2YXRlOgogICAgICAgICAg
ICAgbV9jb25zdGFudFJlZ2lzdGVyc1tpXS5zZXQoKm1fdm0sIG93bmVyRXhlY3V0YWJsZSgpLCBj
b25zdGFudHNbaV0uZ2V0KCkpOwogICAgIH0KIAotICAgIHZvaWQgZHVtcEJ5dGVjb2RlKFByaW50
U3RyZWFtJiwgRXhlY1N0YXRlKiwgY29uc3QgSW5zdHJ1Y3Rpb24qIGJlZ2luLCBjb25zdCBJbnN0
cnVjdGlvbiomLCBjb25zdCBTdHViSW5mb01hcCYgPSBTdHViSW5mb01hcCgpKTsKKyAgICB2b2lk
IGR1bXBCeXRlY29kZSgKKyAgICAgICAgUHJpbnRTdHJlYW0mLCBFeGVjU3RhdGUqLCBjb25zdCBJ
bnN0cnVjdGlvbiogYmVnaW4sIGNvbnN0IEluc3RydWN0aW9uKiYsCisgICAgICAgIGNvbnN0IFN0
dWJJbmZvTWFwJiA9IFN0dWJJbmZvTWFwKCksIGNvbnN0IENhbGxMaW5rSW5mb01hcCYgPSBDYWxs
TGlua0luZm9NYXAoKSk7CiAKICAgICBDU3RyaW5nIHJlZ2lzdGVyTmFtZShpbnQgcikgY29uc3Q7
CiAgICAgdm9pZCBwcmludFVuYXJ5T3AoUHJpbnRTdHJlYW0mLCBFeGVjU3RhdGUqLCBpbnQgbG9j
YXRpb24sIGNvbnN0IEluc3RydWN0aW9uKiYsIGNvbnN0IGNoYXIqIG9wKTsKQEAgLTk3Nyw3ICs5
NzMsNyBAQCBwcml2YXRlOgogICAgIHZvaWQgcHJpbnRHZXRCeUlkT3AoUHJpbnRTdHJlYW0mLCBF
eGVjU3RhdGUqLCBpbnQgbG9jYXRpb24sIGNvbnN0IEluc3RydWN0aW9uKiYpOwogICAgIHZvaWQg
cHJpbnRHZXRCeUlkQ2FjaGVTdGF0dXMoUHJpbnRTdHJlYW0mLCBFeGVjU3RhdGUqLCBpbnQgbG9j
YXRpb24sIGNvbnN0IFN0dWJJbmZvTWFwJik7CiAgICAgZW51bSBDYWNoZUR1bXBNb2RlIHsgRHVt
cENhY2hlcywgRG9udER1bXBDYWNoZXMgfTsKLSAgICB2b2lkIHByaW50Q2FsbE9wKFByaW50U3Ry
ZWFtJiwgRXhlY1N0YXRlKiwgaW50IGxvY2F0aW9uLCBjb25zdCBJbnN0cnVjdGlvbiomLCBjb25z
dCBjaGFyKiBvcCwgQ2FjaGVEdW1wTW9kZSwgYm9vbCYgaGFzUHJpbnRlZFByb2ZpbGluZyk7Cisg
ICAgdm9pZCBwcmludENhbGxPcChQcmludFN0cmVhbSYsIEV4ZWNTdGF0ZSosIGludCBsb2NhdGlv
biwgY29uc3QgSW5zdHJ1Y3Rpb24qJiwgY29uc3QgY2hhciogb3AsIENhY2hlRHVtcE1vZGUsIGJv
b2wmIGhhc1ByaW50ZWRQcm9maWxpbmcsIGNvbnN0IENhbGxMaW5rSW5mb01hcCYpOwogICAgIHZv
aWQgcHJpbnRQdXRCeUlkT3AoUHJpbnRTdHJlYW0mLCBFeGVjU3RhdGUqLCBpbnQgbG9jYXRpb24s
IGNvbnN0IEluc3RydWN0aW9uKiYsIGNvbnN0IGNoYXIqIG9wKTsKICAgICB2b2lkIHByaW50TG9j
YXRpb25BbmRPcChQcmludFN0cmVhbSYsIEV4ZWNTdGF0ZSosIGludCBsb2NhdGlvbiwgY29uc3Qg
SW5zdHJ1Y3Rpb24qJiwgY29uc3QgY2hhciogb3ApOwogICAgIHZvaWQgcHJpbnRMb2NhdGlvbk9w
QW5kUmVnaXN0ZXJPcGVyYW5kKFByaW50U3RyZWFtJiwgRXhlY1N0YXRlKiwgaW50IGxvY2F0aW9u
LCBjb25zdCBJbnN0cnVjdGlvbiomIGl0LCBjb25zdCBjaGFyKiBvcCwgaW50IG9wZXJhbmQpOwpA
QCAtMTA2NCw3ICsxMDYwLDcgQEAgcHJpdmF0ZToKICNpZiBFTkFCTEUoSklUKQogICAgIEJhZzxT
dHJ1Y3R1cmVTdHViSW5mbz4gbV9zdHViSW5mb3M7CiAgICAgVmVjdG9yPEJ5VmFsSW5mbz4gbV9i
eVZhbEluZm9zOwotICAgIFZlY3RvcjxDYWxsTGlua0luZm8+IG1fY2FsbExpbmtJbmZvczsKKyAg
ICBCYWc8Q2FsbExpbmtJbmZvPiBtX2NhbGxMaW5rSW5mb3M7CiAgICAgU2VudGluZWxMaW5rZWRM
aXN0PENhbGxMaW5rSW5mbywgQmFzaWNSYXdTZW50aW5lbE5vZGU8Q2FsbExpbmtJbmZvPj4gbV9p
bmNvbWluZ0NhbGxzOwogI2VuZGlmCiAgICAgT3duUHRyPENvbXBhY3RKSVRDb2RlTWFwPiBtX2pp
dENvZGVNYXA7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVy
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBp
bGVyLmNwcAkocmV2aXNpb24gMTY2MTA5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdKSVRDb21waWxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIzNCwxOSArMjM0LDE2IEBAIHZv
aWQgSklUQ29tcGlsZXI6OmxpbmsoTGlua0J1ZmZlciYgbGlua0IKICAgICB9CiAgICAgCiAgICAg
UkVMRUFTRV9BU1NFUlQoIW1fZ3JhcGgubV9wbGFuLndpbGxUcnlUb1RpZXJVcCB8fCBtX2ppdENv
ZGUtPnNsb3dQYXRoQ2FsbHMuc2l6ZSgpID49IG1fanNDYWxscy5zaXplKCkpOwotICAgIG1fY29k
ZUJsb2NrLT5zZXROdW1iZXJPZkNhbGxMaW5rSW5mb3MobV9qc0NhbGxzLnNpemUoKSk7CiAgICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fanNDYWxscy5zaXplKCk7ICsraSkgewotICAgICAg
ICBDYWxsTGlua0luZm8mIGluZm8gPSBtX2NvZGVCbG9jay0+Y2FsbExpbmtJbmZvKGkpOwotICAg
ICAgICBpbmZvLmNhbGxUeXBlID0gbV9qc0NhbGxzW2ldLm1fY2FsbFR5cGU7Ci0gICAgICAgIGlu
Zm8uY29kZU9yaWdpbiA9IG1fanNDYWxsc1tpXS5tX2NvZGVPcmlnaW47CisgICAgICAgIEpTQ2Fs
bFJlY29yZCYgcmVjb3JkID0gbV9qc0NhbGxzW2ldOworICAgICAgICBDYWxsTGlua0luZm8mIGlu
Zm8gPSByZWNvcmQubV9pbmZvOwogICAgICAgICBUaHVua0dlbmVyYXRvciBnZW5lcmF0b3IgPSBs
aW5rVGh1bmtHZW5lcmF0b3JGb3IoCiAgICAgICAgICAgICBpbmZvLmNhbGxUeXBlID09IENhbGxM
aW5rSW5mbzo6Q29uc3RydWN0ID8gQ29kZUZvckNvbnN0cnVjdCA6IENvZGVGb3JDYWxsLAogICAg
ICAgICAgICAgUmVnaXN0ZXJQcmVzZXJ2YXRpb25Ob3RSZXF1aXJlZCk7Ci0gICAgICAgIGxpbmtC
dWZmZXIubGluayhtX2pzQ2FsbHNbaV0ubV9zbG93Q2FsbCwgRnVuY3Rpb25QdHIobV92bS0+Z2V0
Q1RJU3R1YihnZW5lcmF0b3IpLmNvZGUoKS5leGVjdXRhYmxlQWRkcmVzcygpKSk7Ci0gICAgICAg
IGluZm8uY2FsbFJldHVybkxvY2F0aW9uID0gbGlua0J1ZmZlci5sb2NhdGlvbk9mTmVhckNhbGwo
bV9qc0NhbGxzW2ldLm1fc2xvd0NhbGwpOwotICAgICAgICBpbmZvLmhvdFBhdGhCZWdpbiA9IGxp
bmtCdWZmZXIubG9jYXRpb25PZihtX2pzQ2FsbHNbaV0ubV90YXJnZXRUb0NoZWNrKTsKLSAgICAg
ICAgaW5mby5ob3RQYXRoT3RoZXIgPSBsaW5rQnVmZmVyLmxvY2F0aW9uT2ZOZWFyQ2FsbChtX2pz
Q2FsbHNbaV0ubV9mYXN0Q2FsbCk7Ci0gICAgICAgIGluZm8uY2FsbGVlR1BSID0gc3RhdGljX2Nh
c3Q8dW5zaWduZWQ+KG1fanNDYWxsc1tpXS5tX2NhbGxlZSk7CisgICAgICAgIGxpbmtCdWZmZXIu
bGluayhyZWNvcmQubV9zbG93Q2FsbCwgRnVuY3Rpb25QdHIobV92bS0+Z2V0Q1RJU3R1YihnZW5l
cmF0b3IpLmNvZGUoKS5leGVjdXRhYmxlQWRkcmVzcygpKSk7CisgICAgICAgIGluZm8uY2FsbFJl
dHVybkxvY2F0aW9uID0gbGlua0J1ZmZlci5sb2NhdGlvbk9mTmVhckNhbGwocmVjb3JkLm1fc2xv
d0NhbGwpOworICAgICAgICBpbmZvLmhvdFBhdGhCZWdpbiA9IGxpbmtCdWZmZXIubG9jYXRpb25P
ZihyZWNvcmQubV90YXJnZXRUb0NoZWNrKTsKKyAgICAgICAgaW5mby5ob3RQYXRoT3RoZXIgPSBs
aW5rQnVmZmVyLmxvY2F0aW9uT2ZOZWFyQ2FsbChyZWNvcmQubV9mYXN0Q2FsbCk7CiAgICAgfQog
ICAgIAogICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBvc3JFeGl0VGh1bmsgPSB2bSgpLT5nZXRD
VElTdHViKG9zckV4aXRHZW5lcmF0aW9uVGh1bmtHZW5lcmF0b3IpOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb21waWxlci5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuaAkocmV2aXNpb24gMTY2MTA5KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb21waWxlci5oCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSwgMjAxMyBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEsIDIwMTMsIDIw
MTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCkBAIC0yMjYsOSArMjI2LDkgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gbV9q
c0NhbGxzLnNpemUoKTsKICAgICB9CiAKLSAgICB2b2lkIGFkZEpTQ2FsbChDYWxsIGZhc3RDYWxs
LCBDYWxsIHNsb3dDYWxsLCBEYXRhTGFiZWxQdHIgdGFyZ2V0VG9DaGVjaywgQ2FsbExpbmtJbmZv
OjpDYWxsVHlwZSBjYWxsVHlwZSwgR1BSUmVnIGNhbGxlZSwgQ29kZU9yaWdpbiBjb2RlT3JpZ2lu
KQorICAgIHZvaWQgYWRkSlNDYWxsKENhbGwgZmFzdENhbGwsIENhbGwgc2xvd0NhbGwsIERhdGFM
YWJlbFB0ciB0YXJnZXRUb0NoZWNrLCBDYWxsTGlua0luZm8qIGluZm8pCiAgICAgewotICAgICAg
ICBtX2pzQ2FsbHMuYXBwZW5kKEpTQ2FsbFJlY29yZChmYXN0Q2FsbCwgc2xvd0NhbGwsIHRhcmdl
dFRvQ2hlY2ssIGNhbGxUeXBlLCBjYWxsZWUsIGNvZGVPcmlnaW4pKTsKKyAgICAgICAgbV9qc0Nh
bGxzLmFwcGVuZChKU0NhbGxSZWNvcmQoZmFzdENhbGwsIHNsb3dDYWxsLCB0YXJnZXRUb0NoZWNr
LCBpbmZvKSk7CiAgICAgfQogICAgIAogICAgIHZvaWQgYWRkV2Vha1JlZmVyZW5jZShKU0NlbGwq
IHRhcmdldCkKQEAgLTM1MywyMiArMzUzLDE4IEBAIHByaXZhdGU6CiAgICAgVmVjdG9yPExhYmVs
PiBtX2Jsb2NrSGVhZHM7CiAKICAgICBzdHJ1Y3QgSlNDYWxsUmVjb3JkIHsKLSAgICAgICAgSlND
YWxsUmVjb3JkKENhbGwgZmFzdENhbGwsIENhbGwgc2xvd0NhbGwsIERhdGFMYWJlbFB0ciB0YXJn
ZXRUb0NoZWNrLCBDYWxsTGlua0luZm86OkNhbGxUeXBlIGNhbGxUeXBlLCBHUFJSZWcgY2FsbGVl
LCBDb2RlT3JpZ2luIGNvZGVPcmlnaW4pCisgICAgICAgIEpTQ2FsbFJlY29yZChDYWxsIGZhc3RD
YWxsLCBDYWxsIHNsb3dDYWxsLCBEYXRhTGFiZWxQdHIgdGFyZ2V0VG9DaGVjaywgQ2FsbExpbmtJ
bmZvKiBpbmZvKQogICAgICAgICAgICAgOiBtX2Zhc3RDYWxsKGZhc3RDYWxsKQogICAgICAgICAg
ICAgLCBtX3Nsb3dDYWxsKHNsb3dDYWxsKQogICAgICAgICAgICAgLCBtX3RhcmdldFRvQ2hlY2so
dGFyZ2V0VG9DaGVjaykKLSAgICAgICAgICAgICwgbV9jYWxsVHlwZShjYWxsVHlwZSkKLSAgICAg
ICAgICAgICwgbV9jYWxsZWUoY2FsbGVlKQotICAgICAgICAgICAgLCBtX2NvZGVPcmlnaW4oY29k
ZU9yaWdpbikKKyAgICAgICAgICAgICwgbV9pbmZvKGluZm8pCiAgICAgICAgIHsKICAgICAgICAg
fQogICAgICAgICAKICAgICAgICAgQ2FsbCBtX2Zhc3RDYWxsOwogICAgICAgICBDYWxsIG1fc2xv
d0NhbGw7CiAgICAgICAgIERhdGFMYWJlbFB0ciBtX3RhcmdldFRvQ2hlY2s7Ci0gICAgICAgIENh
bGxMaW5rSW5mbzo6Q2FsbFR5cGUgbV9jYWxsVHlwZTsKLSAgICAgICAgR1BSUmVnIG1fY2FsbGVl
OwotICAgICAgICBDb2RlT3JpZ2luIG1fY29kZU9yaWdpbjsKKyAgICAgICAgQ2FsbExpbmtJbmZv
KiBtX2luZm87CiAgICAgfTsKICAgICAKICAgICBWZWN0b3I8SW5saW5lQ2FjaGVXcmFwcGVyPEpJ
VEdldEJ5SWRHZW5lcmF0b3I+LCA0PiBtX2dldEJ5SWRzOwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCShyZXZpc2lvbiAxNjYx
MDkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC03MjksNiArNzI5LDggQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6
ZW1pdENhbGwoTm9kZSogbm9kZQogICAgIH0KICAgICAKICAgICBtX2ppdC5tb3ZlKGNhbGxlZUdQ
UiwgR1BSSW5mbzo6cmVnVDApOyAvLyBDYWxsZWUgbmVlZHMgdG8gYmUgaW4gcmVnVDAKKyAgICBD
YWxsTGlua0luZm8qIGNhbGxMaW5rSW5mbyA9IG1faml0LmNvZGVCbG9jaygpLT5hZGRDYWxsTGlu
a0luZm8oKTsKKyAgICBtX2ppdC5tb3ZlKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKGNh
bGxMaW5rSW5mbyksIEdQUkluZm86OnJlZ1QyKTsgLy8gTGluayBpbmZvIG5lZWRzIHRvIGJlIGlu
IHJlZ1QyCiAgICAgSklUQ29tcGlsZXI6OkNhbGwgc2xvd0NhbGwgPSBtX2ppdC5uZWFyQ2FsbCgp
OwogICAgIAogICAgIGRvbmUubGluaygmbV9qaXQpOwpAQCAtNzM3LDcgKzczOSwxMSBAQCB2b2lk
IFNwZWN1bGF0aXZlSklUOjplbWl0Q2FsbChOb2RlKiBub2RlCiAgICAgCiAgICAganNWYWx1ZVJl
c3VsdChyZXN1bHRHUFIsIG1fY3VycmVudE5vZGUsIERhdGFGb3JtYXRKUywgVXNlQ2hpbGRyZW5D
YWxsZWRFeHBsaWNpdGx5KTsKICAgICAKLSAgICBtX2ppdC5hZGRKU0NhbGwoZmFzdENhbGwsIHNs
b3dDYWxsLCB0YXJnZXRUb0NoZWNrLCBjYWxsVHlwZSwgY2FsbGVlR1BSLCBtX2N1cnJlbnROb2Rl
LT5vcmlnaW4uc2VtYW50aWMpOworICAgIGNhbGxMaW5rSW5mby0+Y2FsbFR5cGUgPSBjYWxsVHlw
ZTsKKyAgICBjYWxsTGlua0luZm8tPmNvZGVPcmlnaW4gPSBtX2N1cnJlbnROb2RlLT5vcmlnaW4u
c2VtYW50aWM7CisgICAgY2FsbExpbmtJbmZvLT5jYWxsZWVHUFIgPSBjYWxsZWVHUFI7CisgICAg
CisgICAgbV9qaXQuYWRkSlNDYWxsKGZhc3RDYWxsLCBzbG93Q2FsbCwgdGFyZ2V0VG9DaGVjaywg
Y2FsbExpbmtJbmZvKTsKIH0KIAogLy8gQ2xhbmcgc2hvdWxkIGFsbG93IHVucmVhY2hhYmxlIFtb
Y2xhbmc6OmZhbGx0aHJvdWdoXV0gaW4gdGVtcGxhdGUgZnVuY3Rpb25zIGlmIGFueSB0ZW1wbGF0
ZSBleHBhbnNpb24gdXNlcyBpdApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExD
b21waWxlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTENv
bXBpbGUuY3BwCShyZXZpc2lvbiAxNjYxMDkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRs
L0ZUTENvbXBpbGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MDIsNyArNDAyLDYgQEAgc3RhdGlj
IHZvaWQgZml4RnVuY3Rpb25CYXNlZE9uU3RhY2tNYXBzKAogICAgIAogICAgIHN0ZDo6c29ydChz
dGF0ZS5qc0NhbGxzLmJlZ2luKCksIHN0YXRlLmpzQ2FsbHMuZW5kKCkpOwogICAgIAotICAgIGNv
ZGVCbG9jay0+c2V0TnVtYmVyT2ZDYWxsTGlua0luZm9zKHN0YXRlLmpzQ2FsbHMuc2l6ZSgpKTsK
ICAgICBmb3IgKHVuc2lnbmVkIGkgPSBzdGF0ZS5qc0NhbGxzLnNpemUoKTsgaS0tOykgewogICAg
ICAgICBKU0NhbGwmIGNhbGwgPSBzdGF0ZS5qc0NhbGxzW2ldOwogCkBAIC00MTcsOCArNDE2LDcg
QEAgc3RhdGljIHZvaWQgZml4RnVuY3Rpb25CYXNlZE9uU3RhY2tNYXBzKAogICAgICAgICBNYWNy
b0Fzc2VtYmxlcjo6QXNzZW1ibGVyVHlwZV9UOjpmaWxsTm9wcygKICAgICAgICAgICAgIHN0YXJ0
T2ZJQyArIGxpbmtCdWZmZXIuc2l6ZSgpLCBzaXplT2ZDYWxsKCkgLSBsaW5rQnVmZmVyLnNpemUo
KSk7CiAgICAgICAgIAotICAgICAgICBDYWxsTGlua0luZm8mIGluZm8gPSBjb2RlQmxvY2stPmNh
bGxMaW5rSW5mbyhpKTsKLSAgICAgICAgY2FsbC5saW5rKHZtLCBsaW5rQnVmZmVyLCBpbmZvKTsK
KyAgICAgICAgY2FsbC5saW5rKHZtLCBsaW5rQnVmZmVyKTsKICAgICB9CiAgICAgCiAgICAgUmVw
YXRjaEJ1ZmZlciByZXBhdGNoQnVmZmVyKGNvZGVCbG9jayk7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZnRsL0ZUTEpTQ2FsbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2Z0bC9GVExKU0NhbGwuY3BwCShyZXZpc2lvbiAxNjYxMDkpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZnRsL0ZUTEpTQ2FsbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM0LDggKzM0
LDkgQEAgbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBGVEwgewogCiBKU0NhbGw6OkpTQ2FsbCgp
CiAgICAgOiBtX3N0YWNrbWFwSUQoVUlOVF9NQVgpCi0gICAgLCBtX25vZGUoMCkKKyAgICAsIG1f
bm9kZShudWxscHRyKQogICAgICwgbV9pbnN0cnVjdGlvbk9mZnNldChVSU5UX01BWCkKKyAgICAs
IG1fY2FsbExpbmtJbmZvKG51bGxwdHIpCiB7CiB9CiAKQEAgLTQzLDExICs0NCwxNCBAQCBKU0Nh
bGw6OkpTQ2FsbCh1bnNpZ25lZCBzdGFja21hcElELCBERkc6CiAgICAgOiBtX3N0YWNrbWFwSUQo
c3RhY2ttYXBJRCkKICAgICAsIG1fbm9kZShub2RlKQogICAgICwgbV9pbnN0cnVjdGlvbk9mZnNl
dCgwKQorICAgICwgbV9jYWxsTGlua0luZm8obnVsbHB0cikKIHsKIH0KIAogdm9pZCBKU0NhbGw6
OmVtaXQoQ0NhbGxIZWxwZXJzJiBqaXQpCiB7CisgICAgbV9jYWxsTGlua0luZm8gPSBqaXQuY29k
ZUJsb2NrKCktPmFkZENhbGxMaW5rSW5mbygpOworICAgIAogICAgIENDYWxsSGVscGVyczo6SnVt
cCBzbG93UGF0aCA9IGppdC5icmFuY2hQdHJXaXRoUGF0Y2goCiAgICAgICAgIENDYWxsSGVscGVy
czo6Tm90RXF1YWwsIEdQUkluZm86OnJlZ1QwLCBtX3RhcmdldFRvQ2hlY2ssCiAgICAgICAgIEND
YWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cigwKSk7CkBAIC02NSwxMiArNjksMTQgQEAgdm9pZCBK
U0NhbGw6OmVtaXQoQ0NhbGxIZWxwZXJzJiBqaXQpCiAgICAgQ0NhbGxIZWxwZXJzOjpKdW1wIGRv
bmUgPSBqaXQuanVtcCgpOwogICAgIAogICAgIHNsb3dQYXRoLmxpbmsoJmppdCk7CisgICAgCisg
ICAgaml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKG1fY2FsbExpbmtJbmZvKSwg
R1BSSW5mbzo6cmVnVDIpOwogICAgIG1fc2xvd0NhbGwgPSBqaXQubmVhckNhbGwoKTsKICAgICAK
ICAgICBkb25lLmxpbmsoJmppdCk7CiB9CiAKLXZvaWQgSlNDYWxsOjpsaW5rKFZNJiB2bSwgTGlu
a0J1ZmZlciYgbGlua0J1ZmZlciwgQ2FsbExpbmtJbmZvJiBjYWxsSW5mbykKK3ZvaWQgSlNDYWxs
OjpsaW5rKFZNJiB2bSwgTGlua0J1ZmZlciYgbGlua0J1ZmZlcikKIHsKICAgICBUaHVua0dlbmVy
YXRvciBnZW5lcmF0b3IgPSBsaW5rVGh1bmtHZW5lcmF0b3JGb3IoCiAgICAgICAgIG1fbm9kZS0+
b3AoKSA9PSBERkc6OkNvbnN0cnVjdCA/IENvZGVGb3JDb25zdHJ1Y3QgOiBDb2RlRm9yQ2FsbCwK
QEAgLTc5LDEzICs4NSwxMyBAQCB2b2lkIEpTQ2FsbDo6bGluayhWTSYgdm0sIExpbmtCdWZmZXIm
IGxpCiAgICAgbGlua0J1ZmZlci5saW5rKAogICAgICAgICBtX3Nsb3dDYWxsLCBGdW5jdGlvblB0
cih2bS5nZXRDVElTdHViKGdlbmVyYXRvcikuY29kZSgpLmV4ZWN1dGFibGVBZGRyZXNzKCkpKTsK
ICAgICAKLSAgICBjYWxsSW5mby5pc0ZUTCA9IHRydWU7Ci0gICAgY2FsbEluZm8uY2FsbFR5cGUg
PSBtX25vZGUtPm9wKCkgPT0gREZHOjpDb25zdHJ1Y3QgPyBDYWxsTGlua0luZm86OkNvbnN0cnVj
dCA6IENhbGxMaW5rSW5mbzo6Q2FsbDsKLSAgICBjYWxsSW5mby5jb2RlT3JpZ2luID0gbV9ub2Rl
LT5vcmlnaW4uc2VtYW50aWM7Ci0gICAgY2FsbEluZm8uY2FsbFJldHVybkxvY2F0aW9uID0gbGlu
a0J1ZmZlci5sb2NhdGlvbk9mTmVhckNhbGwobV9zbG93Q2FsbCk7Ci0gICAgY2FsbEluZm8uaG90
UGF0aEJlZ2luID0gbGlua0J1ZmZlci5sb2NhdGlvbk9mKG1fdGFyZ2V0VG9DaGVjayk7Ci0gICAg
Y2FsbEluZm8uaG90UGF0aE90aGVyID0gbGlua0J1ZmZlci5sb2NhdGlvbk9mTmVhckNhbGwobV9m
YXN0Q2FsbCk7Ci0gICAgY2FsbEluZm8uY2FsbGVlR1BSID0gR1BSSW5mbzo6cmVnVDA7CisgICAg
bV9jYWxsTGlua0luZm8tPmlzRlRMID0gdHJ1ZTsKKyAgICBtX2NhbGxMaW5rSW5mby0+Y2FsbFR5
cGUgPSBtX25vZGUtPm9wKCkgPT0gREZHOjpDb25zdHJ1Y3QgPyBDYWxsTGlua0luZm86OkNvbnN0
cnVjdCA6IENhbGxMaW5rSW5mbzo6Q2FsbDsKKyAgICBtX2NhbGxMaW5rSW5mby0+Y29kZU9yaWdp
biA9IG1fbm9kZS0+b3JpZ2luLnNlbWFudGljOworICAgIG1fY2FsbExpbmtJbmZvLT5jYWxsUmV0
dXJuTG9jYXRpb24gPSBsaW5rQnVmZmVyLmxvY2F0aW9uT2ZOZWFyQ2FsbChtX3Nsb3dDYWxsKTsK
KyAgICBtX2NhbGxMaW5rSW5mby0+aG90UGF0aEJlZ2luID0gbGlua0J1ZmZlci5sb2NhdGlvbk9m
KG1fdGFyZ2V0VG9DaGVjayk7CisgICAgbV9jYWxsTGlua0luZm8tPmhvdFBhdGhPdGhlciA9IGxp
bmtCdWZmZXIubG9jYXRpb25PZk5lYXJDYWxsKG1fZmFzdENhbGwpOworICAgIG1fY2FsbExpbmtJ
bmZvLT5jYWxsZWVHUFIgPSBHUFJJbmZvOjpyZWdUMDsKIH0KIAogfSB9IC8vIG5hbWVzcGFjZSBK
U0M6OkZUTApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExKU0NhbGwuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEpTQ2FsbC5oCShyZXZpc2lv
biAxNjYxMDkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEpTQ2FsbC5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC00Nyw3ICs0Nyw3IEBAIHB1YmxpYzoKICAgICBKU0NhbGwodW5zaWduZWQg
c3RhY2ttYXBJRCwgREZHOjpOb2RlKik7CiAgICAgCiAgICAgdm9pZCBlbWl0KENDYWxsSGVscGVy
cyYpOwotICAgIHZvaWQgbGluayhWTSYsIExpbmtCdWZmZXImLCBDYWxsTGlua0luZm8mKTsKKyAg
ICB2b2lkIGxpbmsoVk0mLCBMaW5rQnVmZmVyJik7CiAgICAgCiAgICAgdW5zaWduZWQgc3RhY2tt
YXBJRCgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhY2ttYXBJRDsgfQogICAgIApAQCAtNjIsNiArNjIs
NyBAQCBwcml2YXRlOgogICAgIENDYWxsSGVscGVyczo6RGF0YUxhYmVsUHRyIG1fdGFyZ2V0VG9D
aGVjazsKICAgICBDQ2FsbEhlbHBlcnM6OkNhbGwgbV9mYXN0Q2FsbDsKICAgICBDQ2FsbEhlbHBl
cnM6OkNhbGwgbV9zbG93Q2FsbDsKKyAgICBDYWxsTGlua0luZm8qIG1fY2FsbExpbmtJbmZvOwog
CiBwdWJsaWM6CiAgICAgdWludDMyX3QgbV9pbnN0cnVjdGlvbk9mZnNldDsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0pJVC5jcHAJKHJldmlzaW9uIDE2NjEwOSkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklULmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDI1LDcgKzQyNSw3IEBAIHZv
aWQgSklUOjpwcml2YXRlQ29tcGlsZVNsb3dDYXNlcygpCiAKICAgICBSRUxFQVNFX0FTU0VSVCht
X2dldEJ5SWRJbmRleCA9PSBtX2dldEJ5SWRzLnNpemUoKSk7CiAgICAgUkVMRUFTRV9BU1NFUlQo
bV9wdXRCeUlkSW5kZXggPT0gbV9wdXRCeUlkcy5zaXplKCkpOwotICAgIFJFTEVBU0VfQVNTRVJU
KG1fY2FsbExpbmtJbmZvSW5kZXggPT0gbV9jYWxsU3RydWN0dXJlU3R1YkNvbXBpbGF0aW9uSW5m
by5zaXplKCkpOworICAgIFJFTEVBU0VfQVNTRVJUKG1fY2FsbExpbmtJbmZvSW5kZXggPT0gbV9j
YWxsQ29tcGlsYXRpb25JbmZvLnNpemUoKSk7CiAgICAgUkVMRUFTRV9BU1NFUlQobnVtYmVyT2ZW
YWx1ZVByb2ZpbGVzID09IG1fY29kZUJsb2NrLT5udW1iZXJPZlZhbHVlUHJvZmlsZXMoKSk7CiAK
ICNpZm5kZWYgTkRFQlVHCkBAIC02NDMsMTUgKzY0MywxMyBAQCBDb21waWxhdGlvblJlc3VsdCBK
SVQ6OnByaXZhdGVDb21waWxlKEpJCiAgICAgICAgICAgICBkaWZmZXJlbmNlQmV0d2VlbkNvZGVQ
dHIoYmFkVHlwZUp1bXAsIGRvbmVUYXJnZXQpLAogICAgICAgICAgICAgZGlmZmVyZW5jZUJldHdl
ZW5Db2RlUHRyKHJldHVybkFkZHJlc3MsIHNsb3dQYXRoVGFyZ2V0KSk7CiAgICAgfQotICAgIG1f
Y29kZUJsb2NrLT5zZXROdW1iZXJPZkNhbGxMaW5rSW5mb3MobV9jYWxsU3RydWN0dXJlU3R1YkNv
bXBpbGF0aW9uSW5mby5zaXplKCkpOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX2Nv
ZGVCbG9jay0+bnVtYmVyT2ZDYWxsTGlua0luZm9zKCk7ICsraSkgewotICAgICAgICBDYWxsTGlu
a0luZm8mIGluZm8gPSBtX2NvZGVCbG9jay0+Y2FsbExpbmtJbmZvKGkpOwotICAgICAgICBpbmZv
LmNhbGxUeXBlID0gbV9jYWxsU3RydWN0dXJlU3R1YkNvbXBpbGF0aW9uSW5mb1tpXS5jYWxsVHlw
ZTsKLSAgICAgICAgaW5mby5jb2RlT3JpZ2luID0gQ29kZU9yaWdpbihtX2NhbGxTdHJ1Y3R1cmVT
dHViQ29tcGlsYXRpb25JbmZvW2ldLmJ5dGVjb2RlSW5kZXgpOwotICAgICAgICBpbmZvLmNhbGxS
ZXR1cm5Mb2NhdGlvbiA9IHBhdGNoQnVmZmVyLmxvY2F0aW9uT2ZOZWFyQ2FsbChtX2NhbGxTdHJ1
Y3R1cmVTdHViQ29tcGlsYXRpb25JbmZvW2ldLmNhbGxSZXR1cm5Mb2NhdGlvbik7Ci0gICAgICAg
IGluZm8uaG90UGF0aEJlZ2luID0gcGF0Y2hCdWZmZXIubG9jYXRpb25PZihtX2NhbGxTdHJ1Y3R1
cmVTdHViQ29tcGlsYXRpb25JbmZvW2ldLmhvdFBhdGhCZWdpbik7Ci0gICAgICAgIGluZm8uaG90
UGF0aE90aGVyID0gcGF0Y2hCdWZmZXIubG9jYXRpb25PZk5lYXJDYWxsKG1fY2FsbFN0cnVjdHVy
ZVN0dWJDb21waWxhdGlvbkluZm9baV0uaG90UGF0aE90aGVyKTsKLSAgICAgICAgaW5mby5jYWxs
ZWVHUFIgPSByZWdUMDsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9jYWxsQ29tcGls
YXRpb25JbmZvLnNpemUoKTsgKytpKSB7CisgICAgICAgIENhbGxDb21waWxhdGlvbkluZm8mIGNv
bXBpbGF0aW9uSW5mbyA9IG1fY2FsbENvbXBpbGF0aW9uSW5mb1tpXTsKKyAgICAgICAgQ2FsbExp
bmtJbmZvJiBpbmZvID0gKmNvbXBpbGF0aW9uSW5mby5jYWxsTGlua0luZm87CisgICAgICAgIGlu
Zm8uY2FsbFR5cGUgPSBjb21waWxhdGlvbkluZm8uY2FsbFR5cGU7CisgICAgICAgIGluZm8uY2Fs
bFJldHVybkxvY2F0aW9uID0gcGF0Y2hCdWZmZXIubG9jYXRpb25PZk5lYXJDYWxsKGNvbXBpbGF0
aW9uSW5mby5jYWxsUmV0dXJuTG9jYXRpb24pOworICAgICAgICBpbmZvLmhvdFBhdGhCZWdpbiA9
IHBhdGNoQnVmZmVyLmxvY2F0aW9uT2YoY29tcGlsYXRpb25JbmZvLmhvdFBhdGhCZWdpbik7Cisg
ICAgICAgIGluZm8uaG90UGF0aE90aGVyID0gcGF0Y2hCdWZmZXIubG9jYXRpb25PZk5lYXJDYWxs
KGNvbXBpbGF0aW9uSW5mby5ob3RQYXRoT3RoZXIpOwogICAgIH0KIAogICAgIENvbXBhY3RKSVRD
b2RlTWFwOjpFbmNvZGVyIGppdENvZGVNYXBFbmNvZGVyOwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9KSVQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0pJVC5oCShyZXZpc2lvbiAxNjYxMDkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykg
MjAwOCwgMjAxMiwgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMDgsIDIwMTIsIDIwMTMsIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0xNjcsMTIgKzE2Nywx
MSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgcmV0dXJu
QWRkcmVzczsKICAgICB9OwogCi0gICAgc3RydWN0IFN0cnVjdHVyZVN0dWJDb21waWxhdGlvbklu
Zm8geworICAgIHN0cnVjdCBDYWxsQ29tcGlsYXRpb25JbmZvIHsKICAgICAgICAgTWFjcm9Bc3Nl
bWJsZXI6OkRhdGFMYWJlbFB0ciBob3RQYXRoQmVnaW47CiAgICAgICAgIE1hY3JvQXNzZW1ibGVy
OjpDYWxsIGhvdFBhdGhPdGhlcjsKICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgY2FsbFJl
dHVybkxvY2F0aW9uOwotICAgICAgICBDYWxsTGlua0luZm86OkNhbGxUeXBlIGNhbGxUeXBlOwot
ICAgICAgICB1bnNpZ25lZCBieXRlY29kZUluZGV4OworICAgICAgICBDYWxsTGlua0luZm8qIGNh
bGxMaW5rSW5mbzsKICAgICB9OwogCiAgICAgLy8gTmVhciBjYWxscyBjYW4gb25seSBiZSBwYXRj
aGVkIHRvIG90aGVyIEpJVCBjb2RlLCByZWd1bGFyIGNhbGxzIGNhbiBiZSBwYXRjaGVkIHRvIEpJ
VCBjb2RlIG9yIHJlbGlua2VkIHRvIHN0dWIgZnVuY3Rpb25zLgpAQCAtNzk1LDcgKzc5NCw3IEBA
IG5hbWVzcGFjZSBKU0MgewogICAgICAgICBWZWN0b3I8SklUR2V0QnlJZEdlbmVyYXRvcj4gbV9n
ZXRCeUlkczsKICAgICAgICAgVmVjdG9yPEpJVFB1dEJ5SWRHZW5lcmF0b3I+IG1fcHV0QnlJZHM7
CiAgICAgICAgIFZlY3RvcjxCeVZhbENvbXBpbGF0aW9uSW5mbz4gbV9ieVZhbENvbXBpbGF0aW9u
SW5mbzsKLSAgICAgICAgVmVjdG9yPFN0cnVjdHVyZVN0dWJDb21waWxhdGlvbkluZm8+IG1fY2Fs
bFN0cnVjdHVyZVN0dWJDb21waWxhdGlvbkluZm87CisgICAgICAgIFZlY3RvcjxDYWxsQ29tcGls
YXRpb25JbmZvPiBtX2NhbGxDb21waWxhdGlvbkluZm87CiAgICAgICAgIFZlY3RvcjxKdW1wVGFi
bGU+IG1fam1wVGFibGU7CiAKICAgICAgICAgdW5zaWduZWQgbV9ieXRlY29kZU9mZnNldDsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ2FsbC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDYWxsLmNwcAkocmV2aXNpb24gMTY2MTA5KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDYWxsLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMjIwLDEwICsyMjAsMTMgQEAgdm9pZCBKSVQ6OmNvbXBpbGVPcENhbGwoT3Bjb2RlSUQgb3Bj
b2RlSQogICAgIGFkZFNsb3dDYXNlKHNsb3dDYXNlKTsKIAogICAgIEFTU0VSVChtX2NhbGxTdHJ1
Y3R1cmVTdHViQ29tcGlsYXRpb25JbmZvLnNpemUoKSA9PSBjYWxsTGlua0luZm9JbmRleCk7Ci0g
ICAgbV9jYWxsU3RydWN0dXJlU3R1YkNvbXBpbGF0aW9uSW5mby5hcHBlbmQoU3RydWN0dXJlU3R1
YkNvbXBpbGF0aW9uSW5mbygpKTsKLSAgICBtX2NhbGxTdHJ1Y3R1cmVTdHViQ29tcGlsYXRpb25J
bmZvW2NhbGxMaW5rSW5mb0luZGV4XS5ob3RQYXRoQmVnaW4gPSBhZGRyZXNzT2ZMaW5rZWRGdW5j
dGlvbkNoZWNrOwotICAgIG1fY2FsbFN0cnVjdHVyZVN0dWJDb21waWxhdGlvbkluZm9bY2FsbExp
bmtJbmZvSW5kZXhdLmNhbGxUeXBlID0gQ2FsbExpbmtJbmZvOjpjYWxsVHlwZUZvcihvcGNvZGVJ
RCk7Ci0gICAgbV9jYWxsU3RydWN0dXJlU3R1YkNvbXBpbGF0aW9uSW5mb1tjYWxsTGlua0luZm9J
bmRleF0uYnl0ZWNvZGVJbmRleCA9IG1fYnl0ZWNvZGVPZmZzZXQ7CisgICAgQ2FsbExpbmtJbmZv
KiBpbmZvID0gbV9jb2RlQmxvY2stPmFkZENhbGxMaW5rSW5mbygpOworICAgIGluZm8tPmNhbGxU
eXBlID0gQ2FsbExpbmtJbmZvOjpjYWxsVHlwZUZvcihvcGNvZGVJRCk7CisgICAgaW5mby0+Y29k
ZU9yaWdpbiA9IENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KTsKKyAgICBpbmZvLT5jYWxsZWVH
UFIgPSByZWdUMDsKKyAgICBtX2NhbGxDb21waWxhdGlvbkluZm8uYXBwZW5kKENhbGxDb21waWxh
dGlvbkluZm8oKSk7CisgICAgbV9jYWxsQ29tcGlsYXRpb25JbmZvW2NhbGxMaW5rSW5mb0luZGV4
XS5ob3RQYXRoQmVnaW4gPSBhZGRyZXNzT2ZMaW5rZWRGdW5jdGlvbkNoZWNrOworICAgIG1fY2Fs
bENvbXBpbGF0aW9uSW5mb1tjYWxsTGlua0luZm9JbmRleF0uY2FsbExpbmtJbmZvID0gaW5mbzsK
IAogICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgT0JKRUNUX09GRlNFVE9GKEpTRnVuY3Rpb24s
IG1fc2NvcGUpKSwgcmVnVDIpOwogICAgIHN0b3JlNjQocmVnVDIsIEFkZHJlc3MoTWFjcm9Bc3Nl
bWJsZXI6OnN0YWNrUG9pbnRlclJlZ2lzdGVyLCBKU1N0YWNrOjpTY29wZUNoYWluICogc2l6ZW9m
KFJlZ2lzdGVyKSAtIHNpemVvZihDYWxsZXJGcmFtZUFuZFBDKSkpOwpAQCAtMjUxLDcgKzI1NCw4
IEBAIHZvaWQgSklUOjpjb21waWxlT3BDYWxsU2xvd0Nhc2UoT3Bjb2RlSUQKICAgICAgICAgb3Bj
b2RlSUQgPT0gb3BfY29uc3RydWN0ID8gQ29kZUZvckNvbnN0cnVjdCA6IENvZGVGb3JDYWxsLAog
ICAgICAgICBSZWdpc3RlclByZXNlcnZhdGlvbk5vdFJlcXVpcmVkKTsKICAgICAKLSAgICBtX2Nh
bGxTdHJ1Y3R1cmVTdHViQ29tcGlsYXRpb25JbmZvW2NhbGxMaW5rSW5mb0luZGV4XS5jYWxsUmV0
dXJuTG9jYXRpb24gPSBlbWl0TmFrZWRDYWxsKG1fdm0tPmdldENUSVN0dWIoZ2VuZXJhdG9yKS5j
b2RlKCkpOworICAgIG1vdmUoVHJ1c3RlZEltbVB0cihtX2NhbGxDb21waWxhdGlvbkluZm9bY2Fs
bExpbmtJbmZvSW5kZXhdLmNhbGxMaW5rSW5mbyksIHJlZ1QyKTsKKyAgICBtX2NhbGxDb21waWxh
dGlvbkluZm9bY2FsbExpbmtJbmZvSW5kZXhdLmNhbGxSZXR1cm5Mb2NhdGlvbiA9IGVtaXROYWtl
ZENhbGwobV92bS0+Z2V0Q1RJU3R1YihnZW5lcmF0b3IpLmNvZGUoKSk7CiAKICAgICBhZGRQdHIo
VHJ1c3RlZEltbTMyKHN0YWNrUG9pbnRlck9mZnNldEZvcihtX2NvZGVCbG9jaykgKiBzaXplb2Yo
UmVnaXN0ZXIpKSwgY2FsbEZyYW1lUmVnaXN0ZXIsIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKICAg
ICBjaGVja1N0YWNrUG9pbnRlckFsaWdubWVudCgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVRPcGVyYXRpb25zLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVE9wZXJhdGlvbnMuY3BwCShyZXZpc2lvbiAxNjYxMDkpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02
NzQsNyArNjc0LDggQEAgc3RhdGljIHZvaWQqIGhhbmRsZUhvc3RDYWxsKEV4ZWNTdGF0ZSogZQog
fQogCiBpbmxpbmUgY2hhciogbGlua0ZvcigKLSAgICBFeGVjU3RhdGUqIGV4ZWNDYWxsZWUsIENv
ZGVTcGVjaWFsaXphdGlvbktpbmQga2luZCwgUmVnaXN0ZXJQcmVzZXJ2YXRpb25Nb2RlIHJlZ2lz
dGVycykKKyAgICBFeGVjU3RhdGUqIGV4ZWNDYWxsZWUsIENhbGxMaW5rSW5mbyogY2FsbExpbmtJ
bmZvLCBDb2RlU3BlY2lhbGl6YXRpb25LaW5kIGtpbmQsCisgICAgUmVnaXN0ZXJQcmVzZXJ2YXRp
b25Nb2RlIHJlZ2lzdGVycykKIHsKICAgICBFeGVjU3RhdGUqIGV4ZWMgPSBleGVjQ2FsbGVlLT5j
YWxsZXJGcmFtZSgpOwogICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOwpAQCAtNjkyLDcgKzY5Myw2
IEBAIGlubGluZSBjaGFyKiBsaW5rRm9yKAogCiAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIGNv
ZGVQdHI7CiAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSAwOwotICAgIENhbGxMaW5rSW5mbyYg
Y2FsbExpbmtJbmZvID0gZXhlYy0+Y29kZUJsb2NrKCktPmdldENhbGxMaW5rSW5mbyhleGVjQ2Fs
bGVlLT5yZXR1cm5QQygpKTsKICAgICBpZiAoZXhlY3V0YWJsZS0+aXNIb3N0RnVuY3Rpb24oKSkK
ICAgICAgICAgY29kZVB0ciA9IGV4ZWN1dGFibGUtPmVudHJ5cG9pbnRGb3IoKnZtLCBraW5kLCBN
dXN0Q2hlY2tBcml0eSwgcmVnaXN0ZXJzKTsKICAgICBlbHNlIHsKQEAgLTcwNSwzNyArNzA1LDM3
IEBAIGlubGluZSBjaGFyKiBsaW5rRm9yKAogICAgICAgICB9CiAgICAgICAgIGNvZGVCbG9jayA9
IGZ1bmN0aW9uRXhlY3V0YWJsZS0+Y29kZUJsb2NrRm9yKGtpbmQpOwogICAgICAgICBBcml0eUNo
ZWNrTW9kZSBhcml0eTsKLSAgICAgICAgaWYgKGV4ZWNDYWxsZWUtPmFyZ3VtZW50Q291bnRJbmNs
dWRpbmdUaGlzKCkgPCBzdGF0aWNfY2FzdDxzaXplX3Q+KGNvZGVCbG9jay0+bnVtUGFyYW1ldGVy
cygpKSB8fCBjYWxsTGlua0luZm8uY2FsbFR5cGUgPT0gQ2FsbExpbmtJbmZvOjpDYWxsVmFyYXJn
cykKKyAgICAgICAgaWYgKGV4ZWNDYWxsZWUtPmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKCkg
PCBzdGF0aWNfY2FzdDxzaXplX3Q+KGNvZGVCbG9jay0+bnVtUGFyYW1ldGVycygpKSB8fCBjYWxs
TGlua0luZm8tPmNhbGxUeXBlID09IENhbGxMaW5rSW5mbzo6Q2FsbFZhcmFyZ3MpCiAgICAgICAg
ICAgICBhcml0eSA9IE11c3RDaGVja0FyaXR5OwogICAgICAgICBlbHNlCiAgICAgICAgICAgICBh
cml0eSA9IEFyaXR5Q2hlY2tOb3RSZXF1aXJlZDsKICAgICAgICAgY29kZVB0ciA9IGZ1bmN0aW9u
RXhlY3V0YWJsZS0+ZW50cnlwb2ludEZvcigqdm0sIGtpbmQsIGFyaXR5LCByZWdpc3RlcnMpOwog
ICAgIH0KLSAgICBpZiAoIWNhbGxMaW5rSW5mby5zZWVuT25jZSgpKQotICAgICAgICBjYWxsTGlu
a0luZm8uc2V0U2VlbigpOworICAgIGlmICghY2FsbExpbmtJbmZvLT5zZWVuT25jZSgpKQorICAg
ICAgICBjYWxsTGlua0luZm8tPnNldFNlZW4oKTsKICAgICBlbHNlCi0gICAgICAgIGxpbmtGb3Io
ZXhlY0NhbGxlZSwgY2FsbExpbmtJbmZvLCBjb2RlQmxvY2ssIGNhbGxlZSwgY29kZVB0ciwga2lu
ZCwgcmVnaXN0ZXJzKTsKKyAgICAgICAgbGlua0ZvcihleGVjQ2FsbGVlLCAqY2FsbExpbmtJbmZv
LCBjb2RlQmxvY2ssIGNhbGxlZSwgY29kZVB0ciwga2luZCwgcmVnaXN0ZXJzKTsKICAgICByZXR1
cm4gcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oY29kZVB0ci5leGVjdXRhYmxlQWRkcmVzcygpKTsK
IH0KIAotY2hhciogSklUX09QRVJBVElPTiBvcGVyYXRpb25MaW5rQ2FsbChFeGVjU3RhdGUqIGV4
ZWNDYWxsZWUpCitjaGFyKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkxpbmtDYWxsKEV4ZWNTdGF0
ZSogZXhlY0NhbGxlZSwgQ2FsbExpbmtJbmZvKiBjYWxsTGlua0luZm8pCiB7Ci0gICAgcmV0dXJu
IGxpbmtGb3IoZXhlY0NhbGxlZSwgQ29kZUZvckNhbGwsIFJlZ2lzdGVyUHJlc2VydmF0aW9uTm90
UmVxdWlyZWQpOworICAgIHJldHVybiBsaW5rRm9yKGV4ZWNDYWxsZWUsIGNhbGxMaW5rSW5mbywg
Q29kZUZvckNhbGwsIFJlZ2lzdGVyUHJlc2VydmF0aW9uTm90UmVxdWlyZWQpOwogfQogCi1jaGFy
KiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkxpbmtDb25zdHJ1Y3QoRXhlY1N0YXRlKiBleGVjQ2Fs
bGVlKQorY2hhciogSklUX09QRVJBVElPTiBvcGVyYXRpb25MaW5rQ29uc3RydWN0KEV4ZWNTdGF0
ZSogZXhlY0NhbGxlZSwgQ2FsbExpbmtJbmZvKiBjYWxsTGlua0luZm8pCiB7Ci0gICAgcmV0dXJu
IGxpbmtGb3IoZXhlY0NhbGxlZSwgQ29kZUZvckNvbnN0cnVjdCwgUmVnaXN0ZXJQcmVzZXJ2YXRp
b25Ob3RSZXF1aXJlZCk7CisgICAgcmV0dXJuIGxpbmtGb3IoZXhlY0NhbGxlZSwgY2FsbExpbmtJ
bmZvLCBDb2RlRm9yQ29uc3RydWN0LCBSZWdpc3RlclByZXNlcnZhdGlvbk5vdFJlcXVpcmVkKTsK
IH0KIAotY2hhciogSklUX09QRVJBVElPTiBvcGVyYXRpb25MaW5rQ2FsbFRoYXRQcmVzZXJ2ZXNS
ZWdzKEV4ZWNTdGF0ZSogZXhlY0NhbGxlZSkKK2NoYXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9u
TGlua0NhbGxUaGF0UHJlc2VydmVzUmVncyhFeGVjU3RhdGUqIGV4ZWNDYWxsZWUsIENhbGxMaW5r
SW5mbyogY2FsbExpbmtJbmZvKQogewotICAgIHJldHVybiBsaW5rRm9yKGV4ZWNDYWxsZWUsIENv
ZGVGb3JDYWxsLCBNdXN0UHJlc2VydmVSZWdpc3RlcnMpOworICAgIHJldHVybiBsaW5rRm9yKGV4
ZWNDYWxsZWUsIGNhbGxMaW5rSW5mbywgQ29kZUZvckNhbGwsIE11c3RQcmVzZXJ2ZVJlZ2lzdGVy
cyk7CiB9CiAKLWNoYXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uTGlua0NvbnN0cnVjdFRoYXRQ
cmVzZXJ2ZXNSZWdzKEV4ZWNTdGF0ZSogZXhlY0NhbGxlZSkKK2NoYXIqIEpJVF9PUEVSQVRJT04g
b3BlcmF0aW9uTGlua0NvbnN0cnVjdFRoYXRQcmVzZXJ2ZXNSZWdzKEV4ZWNTdGF0ZSogZXhlY0Nh
bGxlZSwgQ2FsbExpbmtJbmZvKiBjYWxsTGlua0luZm8pCiB7Ci0gICAgcmV0dXJuIGxpbmtGb3Io
ZXhlY0NhbGxlZSwgQ29kZUZvckNvbnN0cnVjdCwgTXVzdFByZXNlcnZlUmVnaXN0ZXJzKTsKKyAg
ICByZXR1cm4gbGlua0ZvcihleGVjQ2FsbGVlLCBjYWxsTGlua0luZm8sIENvZGVGb3JDb25zdHJ1
Y3QsIE11c3RQcmVzZXJ2ZVJlZ2lzdGVycyk7CiB9CiAKIGlubGluZSBjaGFyKiB2aXJ0dWFsRm9y
V2l0aEZ1bmN0aW9uKApAQCAtODEzLDQ2ICs4MTMsNDQgQEAgc3RhdGljIGJvb2wgYXR0ZW1wdFRv
T3B0aW1pemVDbG9zdXJlQ2FsbAogICAgIHJldHVybiB0cnVlOwogfQogCi1jaGFyKiBKSVRfT1BF
UkFUSU9OIG9wZXJhdGlvbkxpbmtDbG9zdXJlQ2FsbChFeGVjU3RhdGUqIGV4ZWNDYWxsZWUpCitj
aGFyKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkxpbmtDbG9zdXJlQ2FsbChFeGVjU3RhdGUqIGV4
ZWNDYWxsZWUsIENhbGxMaW5rSW5mbyogY2FsbExpbmtJbmZvKQogewogICAgIEpTQ2VsbCogY2Fs
bGVlQXNGdW5jdGlvbkNlbGw7CiAgICAgY2hhciogcmVzdWx0ID0gdmlydHVhbEZvcldpdGhGdW5j
dGlvbihleGVjQ2FsbGVlLCBDb2RlRm9yQ2FsbCwgUmVnaXN0ZXJQcmVzZXJ2YXRpb25Ob3RSZXF1
aXJlZCwgY2FsbGVlQXNGdW5jdGlvbkNlbGwpOwotICAgIENhbGxMaW5rSW5mbyYgY2FsbExpbmtJ
bmZvID0gZXhlY0NhbGxlZS0+Y2FsbGVyRnJhbWUoKS0+Y29kZUJsb2NrKCktPmdldENhbGxMaW5r
SW5mbyhleGVjQ2FsbGVlLT5yZXR1cm5QQygpKTsKIAotICAgIGlmICghYXR0ZW1wdFRvT3B0aW1p
emVDbG9zdXJlQ2FsbChleGVjQ2FsbGVlLCBSZWdpc3RlclByZXNlcnZhdGlvbk5vdFJlcXVpcmVk
LCBjYWxsZWVBc0Z1bmN0aW9uQ2VsbCwgY2FsbExpbmtJbmZvKSkKKyAgICBpZiAoIWF0dGVtcHRU
b09wdGltaXplQ2xvc3VyZUNhbGwoZXhlY0NhbGxlZSwgUmVnaXN0ZXJQcmVzZXJ2YXRpb25Ob3RS
ZXF1aXJlZCwgY2FsbGVlQXNGdW5jdGlvbkNlbGwsICpjYWxsTGlua0luZm8pKQogICAgICAgICBs
aW5rU2xvd0ZvcihleGVjQ2FsbGVlLCBjYWxsTGlua0luZm8sIENvZGVGb3JDYWxsLCBSZWdpc3Rl
clByZXNlcnZhdGlvbk5vdFJlcXVpcmVkKTsKICAgICAKICAgICByZXR1cm4gcmVzdWx0OwogfQog
Ci1jaGFyKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblZpcnR1YWxDYWxsKEV4ZWNTdGF0ZSogZXhl
Y0NhbGxlZSkKK2NoYXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uVmlydHVhbENhbGwoRXhlY1N0
YXRlKiBleGVjQ2FsbGVlLCBDYWxsTGlua0luZm8qKQogeyAgICAKICAgICByZXR1cm4gdmlydHVh
bEZvcihleGVjQ2FsbGVlLCBDb2RlRm9yQ2FsbCwgUmVnaXN0ZXJQcmVzZXJ2YXRpb25Ob3RSZXF1
aXJlZCk7CiB9CiAKLWNoYXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uVmlydHVhbENvbnN0cnVj
dChFeGVjU3RhdGUqIGV4ZWNDYWxsZWUpCitjaGFyKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblZp
cnR1YWxDb25zdHJ1Y3QoRXhlY1N0YXRlKiBleGVjQ2FsbGVlLCBDYWxsTGlua0luZm8qKQogewog
ICAgIHJldHVybiB2aXJ0dWFsRm9yKGV4ZWNDYWxsZWUsIENvZGVGb3JDb25zdHJ1Y3QsIFJlZ2lz
dGVyUHJlc2VydmF0aW9uTm90UmVxdWlyZWQpOwogfQogCi1jaGFyKiBKSVRfT1BFUkFUSU9OIG9w
ZXJhdGlvbkxpbmtDbG9zdXJlQ2FsbFRoYXRQcmVzZXJ2ZXNSZWdzKEV4ZWNTdGF0ZSogZXhlY0Nh
bGxlZSkKK2NoYXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uTGlua0Nsb3N1cmVDYWxsVGhhdFBy
ZXNlcnZlc1JlZ3MoRXhlY1N0YXRlKiBleGVjQ2FsbGVlLCBDYWxsTGlua0luZm8qIGNhbGxMaW5r
SW5mbykKIHsKICAgICBKU0NlbGwqIGNhbGxlZUFzRnVuY3Rpb25DZWxsOwogICAgIGNoYXIqIHJl
c3VsdCA9IHZpcnR1YWxGb3JXaXRoRnVuY3Rpb24oZXhlY0NhbGxlZSwgQ29kZUZvckNhbGwsIE11
c3RQcmVzZXJ2ZVJlZ2lzdGVycywgY2FsbGVlQXNGdW5jdGlvbkNlbGwpOwotICAgIENhbGxMaW5r
SW5mbyYgY2FsbExpbmtJbmZvID0gZXhlY0NhbGxlZS0+Y2FsbGVyRnJhbWUoKS0+Y29kZUJsb2Nr
KCktPmdldENhbGxMaW5rSW5mbyhleGVjQ2FsbGVlLT5yZXR1cm5QQygpKTsKIAotICAgIGlmICgh
YXR0ZW1wdFRvT3B0aW1pemVDbG9zdXJlQ2FsbChleGVjQ2FsbGVlLCBNdXN0UHJlc2VydmVSZWdp
c3RlcnMsIGNhbGxlZUFzRnVuY3Rpb25DZWxsLCBjYWxsTGlua0luZm8pKQorICAgIGlmICghYXR0
ZW1wdFRvT3B0aW1pemVDbG9zdXJlQ2FsbChleGVjQ2FsbGVlLCBNdXN0UHJlc2VydmVSZWdpc3Rl
cnMsIGNhbGxlZUFzRnVuY3Rpb25DZWxsLCAqY2FsbExpbmtJbmZvKSkKICAgICAgICAgbGlua1Ns
b3dGb3IoZXhlY0NhbGxlZSwgY2FsbExpbmtJbmZvLCBDb2RlRm9yQ2FsbCwgTXVzdFByZXNlcnZl
UmVnaXN0ZXJzKTsKICAgICAKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi1jaGFyKiBKSVRfT1BF
UkFUSU9OIG9wZXJhdGlvblZpcnR1YWxDYWxsVGhhdFByZXNlcnZlc1JlZ3MoRXhlY1N0YXRlKiBl
eGVjQ2FsbGVlKQorY2hhciogSklUX09QRVJBVElPTiBvcGVyYXRpb25WaXJ0dWFsQ2FsbFRoYXRQ
cmVzZXJ2ZXNSZWdzKEV4ZWNTdGF0ZSogZXhlY0NhbGxlZSwgQ2FsbExpbmtJbmZvKikKIHsgICAg
CiAgICAgcmV0dXJuIHZpcnR1YWxGb3IoZXhlY0NhbGxlZSwgQ29kZUZvckNhbGwsIE11c3RQcmVz
ZXJ2ZVJlZ2lzdGVycyk7CiB9CiAKLWNoYXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uVmlydHVh
bENvbnN0cnVjdFRoYXRQcmVzZXJ2ZXNSZWdzKEV4ZWNTdGF0ZSogZXhlY0NhbGxlZSkKK2NoYXIq
IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uVmlydHVhbENvbnN0cnVjdFRoYXRQcmVzZXJ2ZXNSZWdz
KEV4ZWNTdGF0ZSogZXhlY0NhbGxlZSwgQ2FsbExpbmtJbmZvKikKIHsKICAgICByZXR1cm4gdmly
dHVhbEZvcihleGVjQ2FsbGVlLCBDb2RlRm9yQ29uc3RydWN0LCBNdXN0UHJlc2VydmVSZWdpc3Rl
cnMpOwogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmgJ
KHJldmlzaW9uIDE2NjEwOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0
aW9ucy5oCSh3b3JraW5nIGNvcHkpCkBAIC02MCw2ICs2MCw3IEBAIGV4dGVybiAiQyIgewogICAg
IEFhcDogQXJyYXlBbGxvY2F0aW9uUHJvZmlsZSoKICAgICBDOiBKU0NlbGwqCiAgICAgQ2I6IENv
ZGVCbG9jayoKKyAgICBDbGk6IENhbGxMaW5rSW5mbyoKICAgICBEOiBkb3VibGUKICAgICBFOiBF
eGVjU3RhdGUqCiAgICAgRjogQ2FsbEZyYW1lKgpAQCAtMTY4LDYgKzE2OSw3IEBAIHR5cGVkZWYg
dm9pZCBKSVRfT1BFUkFUSU9OICgqVl9KSVRPcGVyYXQKIHR5cGVkZWYgdm9pZCBKSVRfT1BFUkFU
SU9OICgqVl9KSVRPcGVyYXRpb25fRVZtKShFeGVjU3RhdGUqLCBWTSopOwogdHlwZWRlZiBjaGFy
KiBKSVRfT1BFUkFUSU9OICgqUF9KSVRPcGVyYXRpb25fRSkoRXhlY1N0YXRlKik7CiB0eXBlZGVm
IGNoYXIqIEpJVF9PUEVSQVRJT04gKCpQX0pJVE9wZXJhdGlvbl9FQykoRXhlY1N0YXRlKiwgSlND
ZWxsKik7Cit0eXBlZGVmIGNoYXIqIEpJVF9PUEVSQVRJT04gKCpQX0pJVE9wZXJhdGlvbl9FQ2xp
KShFeGVjU3RhdGUqLCBDYWxsTGlua0luZm8qKTsKIHR5cGVkZWYgY2hhciogSklUX09QRVJBVElP
TiAoKlBfSklUT3BlcmF0aW9uX0VKUykoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUsIHNpemVf
dCk7CiB0eXBlZGVmIGNoYXIqIEpJVF9PUEVSQVRJT04gKCpQX0pJVE9wZXJhdGlvbl9FTykoRXhl
Y1N0YXRlKiwgSlNPYmplY3QqKTsKIHR5cGVkZWYgY2hhciogSklUX09QRVJBVElPTiAoKlBfSklU
T3BlcmF0aW9uX0VPUykoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBzaXplX3QpOwpAQCAtMjE4LDE2
ICsyMjAsMTYgQEAgdm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkRpcmVjdFB1dEJ5Vgogdm9p
ZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5VmFsR2VuZXJpYyhFeGVjU3RhdGUqLCBFbmNv
ZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVlKSBXVEZfSU5URVJOQUw7
CiB2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uRGlyZWN0UHV0QnlWYWxHZW5lcmljKEV4ZWNT
dGF0ZSosIEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUpIFdU
Rl9JTlRFUk5BTDsKIEVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uQ2FsbEV2
YWwoRXhlY1N0YXRlKiwgRXhlY1N0YXRlKikgV1RGX0lOVEVSTkFMOwotY2hhciogSklUX09QRVJB
VElPTiBvcGVyYXRpb25MaW5rQ2FsbChFeGVjU3RhdGUqKSBXVEZfSU5URVJOQUw7Ci1jaGFyKiBK
SVRfT1BFUkFUSU9OIG9wZXJhdGlvbkxpbmtDbG9zdXJlQ2FsbChFeGVjU3RhdGUqKSBXVEZfSU5U
RVJOQUw7Ci1jaGFyKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblZpcnR1YWxDYWxsKEV4ZWNTdGF0
ZSopIFdURl9JTlRFUk5BTDsKLWNoYXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uVmlydHVhbENv
bnN0cnVjdChFeGVjU3RhdGUqKSBXVEZfSU5URVJOQUw7Ci1jaGFyKiBKSVRfT1BFUkFUSU9OIG9w
ZXJhdGlvbkxpbmtDb25zdHJ1Y3QoRXhlY1N0YXRlKikgV1RGX0lOVEVSTkFMOwotY2hhciogSklU
X09QRVJBVElPTiBvcGVyYXRpb25MaW5rQ2FsbFRoYXRQcmVzZXJ2ZXNSZWdzKEV4ZWNTdGF0ZSop
IFdURl9JTlRFUk5BTDsKLWNoYXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uTGlua0Nsb3N1cmVD
YWxsVGhhdFByZXNlcnZlc1JlZ3MoRXhlY1N0YXRlKikgV1RGX0lOVEVSTkFMOwotY2hhciogSklU
X09QRVJBVElPTiBvcGVyYXRpb25WaXJ0dWFsQ2FsbFRoYXRQcmVzZXJ2ZXNSZWdzKEV4ZWNTdGF0
ZSopIFdURl9JTlRFUk5BTDsKLWNoYXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uVmlydHVhbENv
bnN0cnVjdFRoYXRQcmVzZXJ2ZXNSZWdzKEV4ZWNTdGF0ZSopIFdURl9JTlRFUk5BTDsKLWNoYXIq
IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uTGlua0NvbnN0cnVjdFRoYXRQcmVzZXJ2ZXNSZWdzKEV4
ZWNTdGF0ZSopIFdURl9JTlRFUk5BTDsKK2NoYXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uTGlu
a0NhbGwoRXhlY1N0YXRlKiwgQ2FsbExpbmtJbmZvKikgV1RGX0lOVEVSTkFMOworY2hhciogSklU
X09QRVJBVElPTiBvcGVyYXRpb25MaW5rQ2xvc3VyZUNhbGwoRXhlY1N0YXRlKiwgQ2FsbExpbmtJ
bmZvKikgV1RGX0lOVEVSTkFMOworY2hhciogSklUX09QRVJBVElPTiBvcGVyYXRpb25WaXJ0dWFs
Q2FsbChFeGVjU3RhdGUqLCBDYWxsTGlua0luZm8qKSBXVEZfSU5URVJOQUw7CitjaGFyKiBKSVRf
T1BFUkFUSU9OIG9wZXJhdGlvblZpcnR1YWxDb25zdHJ1Y3QoRXhlY1N0YXRlKiwgQ2FsbExpbmtJ
bmZvKikgV1RGX0lOVEVSTkFMOworY2hhciogSklUX09QRVJBVElPTiBvcGVyYXRpb25MaW5rQ29u
c3RydWN0KEV4ZWNTdGF0ZSosIENhbGxMaW5rSW5mbyopIFdURl9JTlRFUk5BTDsKK2NoYXIqIEpJ
VF9PUEVSQVRJT04gb3BlcmF0aW9uTGlua0NhbGxUaGF0UHJlc2VydmVzUmVncyhFeGVjU3RhdGUq
LCBDYWxsTGlua0luZm8qKSBXVEZfSU5URVJOQUw7CitjaGFyKiBKSVRfT1BFUkFUSU9OIG9wZXJh
dGlvbkxpbmtDbG9zdXJlQ2FsbFRoYXRQcmVzZXJ2ZXNSZWdzKEV4ZWNTdGF0ZSosIENhbGxMaW5r
SW5mbyopIFdURl9JTlRFUk5BTDsKK2NoYXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uVmlydHVh
bENhbGxUaGF0UHJlc2VydmVzUmVncyhFeGVjU3RhdGUqLCBDYWxsTGlua0luZm8qKSBXVEZfSU5U
RVJOQUw7CitjaGFyKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblZpcnR1YWxDb25zdHJ1Y3RUaGF0
UHJlc2VydmVzUmVncyhFeGVjU3RhdGUqLCBDYWxsTGlua0luZm8qKSBXVEZfSU5URVJOQUw7Citj
aGFyKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkxpbmtDb25zdHJ1Y3RUaGF0UHJlc2VydmVzUmVn
cyhFeGVjU3RhdGUqLCBDYWxsTGlua0luZm8qKSBXVEZfSU5URVJOQUw7CiAKIHNpemVfdCBKSVRf
T1BFUkFUSU9OIG9wZXJhdGlvbkNvbXBhcmVMZXNzKEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVl
LCBFbmNvZGVkSlNWYWx1ZSkgV1RGX0lOVEVSTkFMOwogc2l6ZV90IEpJVF9PUEVSQVRJT04gb3Bl
cmF0aW9uQ29tcGFyZUxlc3NFcShFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpT
VmFsdWUpIFdURl9JTlRFUk5BTDsKQEAgLTI5Nyw3ICsyOTksNyBAQCB2b2lkIEpJVF9PUEVSQVRJ
T04gb3BlcmF0aW9uSW5pdEdsb2JhbENvCiAKIH0gLy8gZXh0ZXJuICJDIgogCi1pbmxpbmUgUF9K
SVRPcGVyYXRpb25fRSBvcGVyYXRpb25MaW5rRm9yKAoraW5saW5lIFBfSklUT3BlcmF0aW9uX0VD
bGkgb3BlcmF0aW9uTGlua0ZvcigKICAgICBDb2RlU3BlY2lhbGl6YXRpb25LaW5kIGtpbmQsIFJl
Z2lzdGVyUHJlc2VydmF0aW9uTW9kZSByZWdpc3RlcnMpCiB7CiAgICAgc3dpdGNoIChraW5kKSB7
CkBAIC0zMjIsNyArMzI0LDcgQEAgaW5saW5lIFBfSklUT3BlcmF0aW9uX0Ugb3BlcmF0aW9uTGlu
a0ZvcgogICAgIHJldHVybiAwOwogfQogCi1pbmxpbmUgUF9KSVRPcGVyYXRpb25fRSBvcGVyYXRp
b25WaXJ0dWFsRm9yKAoraW5saW5lIFBfSklUT3BlcmF0aW9uX0VDbGkgb3BlcmF0aW9uVmlydHVh
bEZvcigKICAgICBDb2RlU3BlY2lhbGl6YXRpb25LaW5kIGtpbmQsIFJlZ2lzdGVyUHJlc2VydmF0
aW9uTW9kZSByZWdpc3RlcnMpCiB7CiAgICAgc3dpdGNoIChraW5kKSB7CkBAIC0zNDcsNyArMzQ5
LDcgQEAgaW5saW5lIFBfSklUT3BlcmF0aW9uX0Ugb3BlcmF0aW9uVmlydHVhbAogICAgIHJldHVy
biAwOwogfQogCi1pbmxpbmUgUF9KSVRPcGVyYXRpb25fRSBvcGVyYXRpb25MaW5rQ2xvc3VyZUNh
bGxGb3IoUmVnaXN0ZXJQcmVzZXJ2YXRpb25Nb2RlIHJlZ2lzdGVycykKK2lubGluZSBQX0pJVE9w
ZXJhdGlvbl9FQ2xpIG9wZXJhdGlvbkxpbmtDbG9zdXJlQ2FsbEZvcihSZWdpc3RlclByZXNlcnZh
dGlvbk1vZGUgcmVnaXN0ZXJzKQogewogICAgIHN3aXRjaCAocmVnaXN0ZXJzKSB7CiAgICAgY2Fz
ZSBSZWdpc3RlclByZXNlcnZhdGlvbk5vdFJlcXVpcmVkOgpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9SZXBhdGNoLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L1JlcGF0Y2guY3BwCShyZXZpc2lvbiAxNjYxMDkpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L1JlcGF0Y2guY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNDUyLDkgKzE0NTIsMTAg
QEAgdm9pZCBsaW5rQ2xvc3VyZUNhbGwoCiAjaWYgVVNFKEpTVkFMVUUzMl82NCkKICAgICBzdHVi
Sml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6Q2VsbFRhZyksIEdQ
UkluZm86OnJlZ1QxKTsKICNlbmRpZgotICAgIHN0dWJKaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRy
dXN0ZWRJbW1QdHIoY2FsbExpbmtJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5leGVjdXRhYmxlQWRk
cmVzcygpKSwgR1BSSW5mbzo6cmVnVDIpOworICAgIHN0dWJKaXQubW92ZShDQ2FsbEhlbHBlcnM6
OlRydXN0ZWRJbW1QdHIoJmNhbGxMaW5rSW5mbyksIEdQUkluZm86OnJlZ1QyKTsKKyAgICBzdHVi
Sml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKGNhbGxMaW5rSW5mby5jYWxsUmV0
dXJuTG9jYXRpb24uZXhlY3V0YWJsZUFkZHJlc3MoKSksIEdQUkluZm86OnJlZ1Q0KTsKICAgICAK
LSAgICBzdHViSml0LnJlc3RvcmVSZXR1cm5BZGRyZXNzQmVmb3JlUmV0dXJuKEdQUkluZm86OnJl
Z1QyKTsKKyAgICBzdHViSml0LnJlc3RvcmVSZXR1cm5BZGRyZXNzQmVmb3JlUmV0dXJuKEdQUklu
Zm86OnJlZ1Q0KTsKICAgICBBc3NlbWJseUhlbHBlcnM6Okp1bXAgc2xvdyA9IHN0dWJKaXQuanVt
cCgpOwogICAgIAogICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoKnZtLCAmc3R1YkppdCwgY2Fs
bGVyQ29kZUJsb2NrKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvVGh1bmtHZW5l
cmF0b3JzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1RodW5r
R2VuZXJhdG9ycy5jcHAJKHJldmlzaW9uIDE2NjEwOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvVGh1bmtHZW5lcmF0b3JzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODUsNyArODUsNyBA
QCBzdGF0aWMgdm9pZCBzbG93UGF0aEZvcigKICAgICBqaXQuc3RvcmVQdHIoR1BSSW5mbzo6Y2Fs
bEZyYW1lUmVnaXN0ZXIsICZ2bS0+dG9wQ2FsbEZyYW1lKTsKICAgICBpZiAobWF4RnJhbWVFeHRl
bnRGb3JTbG93UGF0aENhbGwpCiAgICAgICAgIGppdC5hZGRQdHIoQ0NhbGxIZWxwZXJzOjpUcnVz
dGVkSW1tMzIoLW1heEZyYW1lRXh0ZW50Rm9yU2xvd1BhdGhDYWxsKSwgQ0NhbGxIZWxwZXJzOjpz
dGFja1BvaW50ZXJSZWdpc3Rlcik7Ci0gICAgaml0LnNldHVwQXJndW1lbnRzRXhlY1N0YXRlKCk7
CisgICAgaml0LnNldHVwQXJndW1lbnRzRXhlY1N0YXRlKEdQUkluZm86OnJlZ1QxKTsKICAgICBq
aXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoYml0d2lzZV9jYXN0PHZvaWQqPihz
bG93UGF0aEZ1bmN0aW9uKSksIEdQUkluZm86Om5vbkFyZ0dQUjApOwogICAgIGVtaXRQb2ludGVy
VmFsaWRhdGlvbihqaXQsIEdQUkluZm86Om5vbkFyZ0dQUjApOwogICAgIGppdC5jYWxsKEdQUklu
Zm86Om5vbkFyZ0dQUjApOwpAQCAtMTc5LDM0ICsxNzksMzQgQEAgc3RhdGljIE1hY3JvQXNzZW1i
bGVyQ29kZVJlZiB2aXJ0dWFsRm9yVAogICAgIC8vIHRoZSBERkcga25vd3MgdGhhdCB0aGUgdmFs
dWUgaXMgZGVmaW5pdGVseSBhIGNlbGwsIG9yIGRlZmluaXRlbHkgYSBmdW5jdGlvbi4KICAgICAK
ICNpZiBVU0UoSlNWQUxVRTY0KQotICAgIGppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZElt
bTY0KFRhZ01hc2spLCBHUFJJbmZvOjpyZWdUMik7CisgICAgaml0Lm1vdmUoQ0NhbGxIZWxwZXJz
OjpUcnVzdGVkSW1tNjQoVGFnTWFzayksIEdQUkluZm86OnJlZ1Q0KTsKICAgICAKICAgICBzbG93
Q2FzZS5hcHBlbmQoCiAgICAgICAgIGppdC5icmFuY2hUZXN0NjQoCi0gICAgICAgICAgICBDQ2Fs
bEhlbHBlcnM6Ok5vblplcm8sIEdQUkluZm86OnJlZ1QwLCBHUFJJbmZvOjpyZWdUMikpOworICAg
ICAgICAgICAgQ0NhbGxIZWxwZXJzOjpOb25aZXJvLCBHUFJJbmZvOjpyZWdUMCwgR1BSSW5mbzo6
cmVnVDQpKTsKICNlbHNlCiAgICAgc2xvd0Nhc2UuYXBwZW5kKAogICAgICAgICBqaXQuYnJhbmNo
MzIoCiAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6Ok5vdEVxdWFsLCBHUFJJbmZvOjpyZWdUMSwK
ICAgICAgICAgICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKEpTVmFsdWU6OkNlbGxUYWcp
KSk7CiAjZW5kaWYKLSAgICBBc3NlbWJseUhlbHBlcnM6OmVtaXRMb2FkU3RydWN0dXJlKGppdCwg
R1BSSW5mbzo6cmVnVDAsIEdQUkluZm86OnJlZ1QyLCBHUFJJbmZvOjpyZWdUMSk7CisgICAgQXNz
ZW1ibHlIZWxwZXJzOjplbWl0TG9hZFN0cnVjdHVyZShqaXQsIEdQUkluZm86OnJlZ1QwLCBHUFJJ
bmZvOjpyZWdUNCwgR1BSSW5mbzo6cmVnVDEpOwogICAgIHNsb3dDYXNlLmFwcGVuZCgKICAgICAg
ICAgaml0LmJyYW5jaFB0cigKICAgICAgICAgICAgIENDYWxsSGVscGVyczo6Tm90RXF1YWwsCi0g
ICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoR1BSSW5mbzo6cmVnVDIsIFN0cnVjdHVy
ZTo6Y2xhc3NJbmZvT2Zmc2V0KCkpLAorICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpBZGRyZXNz
KEdQUkluZm86OnJlZ1Q0LCBTdHJ1Y3R1cmU6OmNsYXNzSW5mb09mZnNldCgpKSwKICAgICAgICAg
ICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihKU0Z1bmN0aW9uOjppbmZvKCkpKSk7CiAg
ICAgCiAgICAgLy8gTm93IHdlIGtub3cgd2UgaGF2ZSBhIEpTRnVuY3Rpb24uCiAgICAgCiAgICAg
aml0LmxvYWRQdHIoCiAgICAgICAgIENDYWxsSGVscGVyczo6QWRkcmVzcyhHUFJJbmZvOjpyZWdU
MCwgSlNGdW5jdGlvbjo6b2Zmc2V0T2ZFeGVjdXRhYmxlKCkpLAotICAgICAgICBHUFJJbmZvOjpy
ZWdUMik7CisgICAgICAgIEdQUkluZm86OnJlZ1Q0KTsKICAgICBqaXQubG9hZFB0cigKICAgICAg
ICAgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKAotICAgICAgICAgICAgR1BSSW5mbzo6cmVnVDIsIEV4
ZWN1dGFibGVCYXNlOjpvZmZzZXRPZkpJVENvZGVXaXRoQXJpdHlDaGVja0ZvcihraW5kLCByZWdp
c3RlcnMpKSwKLSAgICAgICAgR1BSSW5mbzo6cmVnVDIpOwotICAgIHNsb3dDYXNlLmFwcGVuZChq
aXQuYnJhbmNoVGVzdFB0cihDQ2FsbEhlbHBlcnM6Olplcm8sIEdQUkluZm86OnJlZ1QyKSk7Cisg
ICAgICAgICAgICBHUFJJbmZvOjpyZWdUNCwgRXhlY3V0YWJsZUJhc2U6Om9mZnNldE9mSklUQ29k
ZVdpdGhBcml0eUNoZWNrRm9yKGtpbmQsIHJlZ2lzdGVycykpLAorICAgICAgICBHUFJJbmZvOjpy
ZWdUNCk7CisgICAgc2xvd0Nhc2UuYXBwZW5kKGppdC5icmFuY2hUZXN0UHRyKENDYWxsSGVscGVy
czo6WmVybywgR1BSSW5mbzo6cmVnVDQpKTsKICAgICAKICAgICAvLyBOb3cgd2Uga25vdyB0aGF0
IHdlIGhhdmUgYSBDb2RlQmxvY2ssIGFuZCB3ZSdyZSBjb21taXR0ZWQgdG8gbWFraW5nIGEgZmFz
dAogICAgIC8vIGNhbGwuCkBAIC0yMjMsOCArMjIzLDggQEAgc3RhdGljIE1hY3JvQXNzZW1ibGVy
Q29kZVJlZiB2aXJ0dWFsRm9yVAogI2VuZGlmCiAgICAgCiAgICAgLy8gTWFrZSBhIHRhaWwgY2Fs
bC4gVGhpcyB3aWxsIHJldHVybiBiYWNrIHRvIEpJVCBjb2RlLgotICAgIGVtaXRQb2ludGVyVmFs
aWRhdGlvbihqaXQsIEdQUkluZm86OnJlZ1QyKTsKLSAgICBqaXQuanVtcChHUFJJbmZvOjpyZWdU
Mik7CisgICAgZW1pdFBvaW50ZXJWYWxpZGF0aW9uKGppdCwgR1BSSW5mbzo6cmVnVDQpOworICAg
IGppdC5qdW1wKEdQUkluZm86OnJlZ1Q0KTsKIAogICAgIHNsb3dDYXNlLmxpbmsoJmppdCk7CiAg
ICAgCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>227574</attachid>
            <date>2014-03-22 14:35:24 -0700</date>
            <delta_ts>2014-03-22 15:45:56 -0700</delta_ts>
            <desc>it builds on 64-bit</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>58142</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9DYWxsTGlua0luZm8uaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ2FsbExpbmtJbmZvLmgJ
KHJldmlzaW9uIDE2NjEwOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9DYWxs
TGlua0luZm8uaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDEyLCAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtODMsNiArODMsNyBAQCBzdHJ1Y3QgQ2FsbExpbmtJ
bmZvIDogcHVibGljIEJhc2ljUmF3U2VuCiAgICAgYm9vbCBoYXNTZWVuQ2xvc3VyZSA6IDE7CiAg
ICAgdW5zaWduZWQgY2FsbFR5cGUgOiA1OyAvLyBDYWxsVHlwZQogICAgIHVuc2lnbmVkIGNhbGxl
ZUdQUiA6IDg7CisgICAgdW5zaWduZWQgc2xvd1BhdGhDb3VudDsKICAgICBDb2RlT3JpZ2luIGNv
ZGVPcmlnaW47CiAKICAgICBib29sIGlzTGlua2VkKCkgeyByZXR1cm4gc3R1YiB8fCBjYWxsZWU7
IH0KQEAgLTk5LDE1ICsxMDAsMTcgQEAgc3RydWN0IENhbGxMaW5rSW5mbyA6IHB1YmxpYyBCYXNp
Y1Jhd1NlbgogICAgIH0KIH07CiAKLWlubGluZSB2b2lkKiBnZXRDYWxsTGlua0luZm9SZXR1cm5M
b2NhdGlvbihDYWxsTGlua0luZm8qIGNhbGxMaW5rSW5mbykKK2lubGluZSBDb2RlT3JpZ2luIGdl
dENhbGxMaW5rSW5mb0NvZGVPcmlnaW4oQ2FsbExpbmtJbmZvJiBjYWxsTGlua0luZm8pCiB7Ci0g
ICAgcmV0dXJuIGNhbGxMaW5rSW5mby0+Y2FsbFJldHVybkxvY2F0aW9uLmV4ZWN1dGFibGVBZGRy
ZXNzKCk7CisgICAgcmV0dXJuIGNhbGxMaW5rSW5mby5jb2RlT3JpZ2luOwogfQogCi1pbmxpbmUg
dW5zaWduZWQgZ2V0Q2FsbExpbmtJbmZvQnl0ZWNvZGVJbmRleChDYWxsTGlua0luZm8qIGNhbGxM
aW5rSW5mbykKLXsKLSAgICByZXR1cm4gY2FsbExpbmtJbmZvLT5jb2RlT3JpZ2luLmJ5dGVjb2Rl
SW5kZXg7Ci19Cit0eXBlZGVmIEhhc2hNYXA8Q29kZU9yaWdpbiwgQ2FsbExpbmtJbmZvKiwgQ29k
ZU9yaWdpbkFwcHJveGltYXRlSGFzaD4gQ2FsbExpbmtJbmZvTWFwOworCisjZWxzZSAvLyBFTkFC
TEUoSklUKQorCit0eXBlZGVmIEhhc2hNYXA8aW50LCB2b2lkKj4gQ2FsbExpbmtJbmZvTWFwOwor
CiAjZW5kaWYgLy8gRU5BQkxFKEpJVCkKIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ2FsbExpbmtTdGF0dXMuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9DYWxsTGlua1N0YXR1cy5jcHAJKHJl
dmlzaW9uIDE2NjEwOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9DYWxsTGlu
a1N0YXR1cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExNSw3ICsxMTUsOCBAQCBDYWxsTGlua1N0
YXR1cyBDYWxsTGlua1N0YXR1czo6Y29tcHV0ZUZyCiAjZW5kaWYKIH0KIAotQ2FsbExpbmtTdGF0
dXMgQ2FsbExpbmtTdGF0dXM6OmNvbXB1dGVGb3IoQ29kZUJsb2NrKiBwcm9maWxlZEJsb2NrLCB1
bnNpZ25lZCBieXRlY29kZUluZGV4KQorQ2FsbExpbmtTdGF0dXMgQ2FsbExpbmtTdGF0dXM6OmNv
bXB1dGVGb3IoCisgICAgQ29kZUJsb2NrKiBwcm9maWxlZEJsb2NrLCB1bnNpZ25lZCBieXRlY29k
ZUluZGV4LCBjb25zdCBDYWxsTGlua0luZm9NYXAmIG1hcCkKIHsKICAgICBDb25jdXJyZW50SklU
TG9ja2VyIGxvY2tlcihwcm9maWxlZEJsb2NrLT5tX2xvY2spOwogICAgIApAQCAtMTI3LDE1ICsx
MjgsMTEgQEAgQ2FsbExpbmtTdGF0dXMgQ2FsbExpbmtTdGF0dXM6OmNvbXB1dGVGbwogICAgICAg
ICB8fCBwcm9maWxlZEJsb2NrLT5oYXNFeGl0U2l0ZShsb2NrZXIsIERGRzo6RnJlcXVlbnRFeGl0
U2l0ZShieXRlY29kZUluZGV4LCBCYWRFeGVjdXRhYmxlKSkpCiAgICAgICAgIHJldHVybiB0YWtl
c1Nsb3dQYXRoKCk7CiAgICAgCi0gICAgaWYgKCFwcm9maWxlZEJsb2NrLT5oYXNCYXNlbGluZUpJ
VFByb2ZpbGluZygpKQorICAgIENhbGxMaW5rSW5mbyogY2FsbExpbmtJbmZvID0gbWFwLmdldChD
b2RlT3JpZ2luKGJ5dGVjb2RlSW5kZXgpKTsKKyAgICBpZiAoIWNhbGxMaW5rSW5mbykKICAgICAg
ICAgcmV0dXJuIGNvbXB1dGVGcm9tTExJbnQobG9ja2VyLCBwcm9maWxlZEJsb2NrLCBieXRlY29k
ZUluZGV4KTsKICAgICAKLSAgICBpZiAocHJvZmlsZWRCbG9jay0+Y291bGRUYWtlU2xvd0Nhc2Uo
Ynl0ZWNvZGVJbmRleCkpCi0gICAgICAgIHJldHVybiB0YWtlc1Nsb3dQYXRoKCk7Ci0gICAgCi0g
ICAgQ2FsbExpbmtJbmZvJiBjYWxsTGlua0luZm8gPSBwcm9maWxlZEJsb2NrLT5nZXRDYWxsTGlu
a0luZm8oYnl0ZWNvZGVJbmRleCk7Ci0gICAgCi0gICAgQ2FsbExpbmtTdGF0dXMgcmVzdWx0ID0g
Y29tcHV0ZUZvcihsb2NrZXIsIGNhbGxMaW5rSW5mbyk7CisgICAgQ2FsbExpbmtTdGF0dXMgcmVz
dWx0ID0gY29tcHV0ZUZvcihsb2NrZXIsICpjYWxsTGlua0luZm8pOwogICAgIGlmICghcmVzdWx0
KQogICAgICAgICByZXR1cm4gY29tcHV0ZUZyb21MTEludChsb2NrZXIsIHByb2ZpbGVkQmxvY2ss
IGJ5dGVjb2RlSW5kZXgpOwogICAgIApAQCAtMTUxLDYgKzE0OCw5IEBAIENhbGxMaW5rU3RhdHVz
IENhbGxMaW5rU3RhdHVzOjpjb21wdXRlRm8KICNpZiBFTkFCTEUoSklUKQogQ2FsbExpbmtTdGF0
dXMgQ2FsbExpbmtTdGF0dXM6OmNvbXB1dGVGb3IoY29uc3QgQ29uY3VycmVudEpJVExvY2tlciYs
IENhbGxMaW5rSW5mbyYgY2FsbExpbmtJbmZvKQogeworICAgIGlmIChjYWxsTGlua0luZm8uc2xv
d1BhdGhDb3VudCA+PSBPcHRpb25zOjpjb3VsZFRha2VTbG93Q2FzZU1pbmltdW1Db3VudCgpKQor
ICAgICAgICByZXR1cm4gdGFrZXNTbG93UGF0aCgpOworICAgIAogICAgIGlmIChjYWxsTGlua0lu
Zm8uc3R1YikKICAgICAgICAgcmV0dXJuIENhbGxMaW5rU3RhdHVzKGNhbGxMaW5rSW5mby5zdHVi
LT5leGVjdXRhYmxlKCksIGNhbGxMaW5rSW5mby5zdHViLT5zdHJ1Y3R1cmUoKSk7CiAgICAgCkBA
IC0xNzEsMTEgKzE3MSw4IEBAIHZvaWQgQ2FsbExpbmtTdGF0dXM6OmNvbXB1dGVERkdTdGF0dXNl
cygKICNpZiBFTkFCTEUoREZHX0pJVCkKICAgICBSRUxFQVNFX0FTU0VSVChkZmdDb2RlQmxvY2st
PmppdFR5cGUoKSA9PSBKSVRDb2RlOjpERkdKSVQpOwogICAgIENvZGVCbG9jayogYmFzZWxpbmVD
b2RlQmxvY2sgPSBkZmdDb2RlQmxvY2stPmFsdGVybmF0aXZlKCk7Ci0gICAgREZHOjpKSVRDb2Rl
KiBqaXRDb2RlID0gZGZnQ29kZUJsb2NrLT5qaXRDb2RlKCktPmRmZygpOwotICAgIFJFTEVBU0Vf
QVNTRVJUKGRmZ0NvZGVCbG9jay0+bnVtYmVyT2ZDYWxsTGlua0luZm9zKCkgPD0gaml0Q29kZS0+
c2xvd1BhdGhDYWxscy5zaXplKCkpOwotICAgIAotICAgIGZvciAoc2l6ZV90IGkgPSBkZmdDb2Rl
QmxvY2stPm51bWJlck9mQ2FsbExpbmtJbmZvcygpOyBpLS07KSB7Ci0gICAgICAgIENhbGxMaW5r
SW5mbyYgaW5mbyA9IGRmZ0NvZGVCbG9jay0+Y2FsbExpbmtJbmZvKGkpOworICAgIGZvciAoQmFn
PENhbGxMaW5rSW5mbz46Oml0ZXJhdG9yIGl0ZXIgPSBkZmdDb2RlQmxvY2stPmNhbGxMaW5rSW5m
b3NCZWdpbigpOyAhIWl0ZXI7ICsraXRlcikgeworICAgICAgICBDYWxsTGlua0luZm8mIGluZm8g
PSAqKml0ZXI7CiAgICAgICAgIENvZGVPcmlnaW4gY29kZU9yaWdpbiA9IGluZm8uY29kZU9yaWdp
bjsKICAgICAgICAgCiAgICAgICAgIGJvb2wgdGFrZVNsb3dQYXRoOwpAQCAtMjAyLDcgKzE5OSw3
IEBAIHZvaWQgQ2FsbExpbmtTdGF0dXM6OmNvbXB1dGVERkdTdGF0dXNlcygKICAgICAgICAgCiAg
ICAgICAgIHsKICAgICAgICAgICAgIENvbmN1cnJlbnRKSVRMb2NrZXIgbG9ja2VyKGRmZ0NvZGVC
bG9jay0+bV9sb2NrKTsKLSAgICAgICAgICAgIGlmICh0YWtlU2xvd1BhdGggfHwgaml0Q29kZS0+
c2xvd1BhdGhDYWxsc1tpXSA+PSBPcHRpb25zOjpjb3VsZFRha2VTbG93Q2FzZU1pbmltdW1Db3Vu
dCgpKQorICAgICAgICAgICAgaWYgKHRha2VTbG93UGF0aCkKICAgICAgICAgICAgICAgICBtYXAu
YWRkKGluZm8uY29kZU9yaWdpbiwgdGFrZXNTbG93UGF0aCgpKTsKICAgICAgICAgICAgIGVsc2Ug
ewogICAgICAgICAgICAgICAgIENhbGxMaW5rU3RhdHVzIHN0YXR1cyA9IGNvbXB1dGVGb3IobG9j
a2VyLCBpbmZvKTsKQEAgLTIzMCwxMyArMjI3LDE0IEBAIHZvaWQgQ2FsbExpbmtTdGF0dXM6OmNv
bXB1dGVERkdTdGF0dXNlcygKIH0KIAogQ2FsbExpbmtTdGF0dXMgQ2FsbExpbmtTdGF0dXM6OmNv
bXB1dGVGb3IoCi0gICAgQ29kZUJsb2NrKiBwcm9maWxlZEJsb2NrLCBDb2RlT3JpZ2luIGNvZGVP
cmlnaW4sIGNvbnN0IENhbGxMaW5rU3RhdHVzOjpDb250ZXh0TWFwJiBtYXApCisgICAgQ29kZUJs
b2NrKiBwcm9maWxlZEJsb2NrLCBDb2RlT3JpZ2luIGNvZGVPcmlnaW4sCisgICAgY29uc3QgQ2Fs
bExpbmtJbmZvTWFwJiBiYXNlbGluZU1hcCwgY29uc3QgQ2FsbExpbmtTdGF0dXM6OkNvbnRleHRN
YXAmIGRmZ01hcCkKIHsKLSAgICBDb250ZXh0TWFwOjpjb25zdF9pdGVyYXRvciBpdGVyID0gbWFw
LmZpbmQoY29kZU9yaWdpbik7Ci0gICAgaWYgKGl0ZXIgIT0gbWFwLmVuZCgpKQorICAgIENvbnRl
eHRNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ZXIgPSBkZmdNYXAuZmluZChjb2RlT3JpZ2luKTsKKyAg
ICBpZiAoaXRlciAhPSBkZmdNYXAuZW5kKCkpCiAgICAgICAgIHJldHVybiBpdGVyLT52YWx1ZTsK
ICAgICAKLSAgICByZXR1cm4gY29tcHV0ZUZvcihwcm9maWxlZEJsb2NrLCBjb2RlT3JpZ2luLmJ5
dGVjb2RlSW5kZXgpOworICAgIHJldHVybiBjb21wdXRlRm9yKHByb2ZpbGVkQmxvY2ssIGNvZGVP
cmlnaW4uYnl0ZWNvZGVJbmRleCwgYmFzZWxpbmVNYXApOwogfQogCiB2b2lkIENhbGxMaW5rU3Rh
dHVzOjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvQ2FsbExpbmtTdGF0dXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ2FsbExpbmtTdGF0dXMuaAkocmV2aXNpb24gMTY2MTA5KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NhbGxMaW5rU3RhdHVzLmgJKHdvcmtp
bmcgY29weSkKQEAgLTI2LDYgKzI2LDcgQEAKICNpZm5kZWYgQ2FsbExpbmtTdGF0dXNfaAogI2Rl
ZmluZSBDYWxsTGlua1N0YXR1c19oCiAKKyNpbmNsdWRlICJDYWxsTGlua0luZm8uaCIKICNpbmNs
dWRlICJDb2RlT3JpZ2luLmgiCiAjaW5jbHVkZSAiQ29kZVNwZWNpYWxpemF0aW9uS2luZC5oIgog
I2luY2x1ZGUgIkNvbmN1cnJlbnRKSVRMb2NrLmgiCkBAIC03NSw3ICs3Niw4IEBAIHB1YmxpYzoK
ICAgICAgICAgcmV0dXJuICp0aGlzOwogICAgIH0KICAgICAKLSAgICBzdGF0aWMgQ2FsbExpbmtT
dGF0dXMgY29tcHV0ZUZvcihDb2RlQmxvY2sqLCB1bnNpZ25lZCBieXRlY29kZUluZGV4KTsKKyAg
ICBzdGF0aWMgQ2FsbExpbmtTdGF0dXMgY29tcHV0ZUZvcigKKyAgICAgICAgQ29kZUJsb2NrKiwg
dW5zaWduZWQgYnl0ZWNvZGVJbmRleCwgY29uc3QgQ2FsbExpbmtJbmZvTWFwJik7CiAKICNpZiBF
TkFCTEUoSklUKQogICAgIC8vIENvbXB1dGVzIHRoZSBzdGF0dXMgYXNzdW1pbmcgdGhhdCB3ZSBu
ZXZlciB0b29rIHNsb3cgcGF0aCBhbmQgbmV2ZXIgcHJldmlvdXNseQpAQCAtOTEsNyArOTMsOCBA
QCBwdWJsaWM6CiAgICAgc3RhdGljIHZvaWQgY29tcHV0ZURGR1N0YXR1c2VzKENvZGVCbG9jayog
ZGZnQ29kZUJsb2NrLCBDb250ZXh0TWFwJik7CiAgICAgCiAgICAgLy8gSGVscGVyIHRoYXQgZmly
c3QgY29uc3VsdHMgdGhlIENvbnRleHRNYXAgYW5kIHRoZW4gZG9lcyBjb21wdXRlRm9yKCkuCi0g
ICAgc3RhdGljIENhbGxMaW5rU3RhdHVzIGNvbXB1dGVGb3IoQ29kZUJsb2NrKiwgQ29kZU9yaWdp
biwgY29uc3QgQ29udGV4dE1hcCYpOworICAgIHN0YXRpYyBDYWxsTGlua1N0YXR1cyBjb21wdXRl
Rm9yKAorICAgICAgICBDb2RlQmxvY2sqLCBDb2RlT3JpZ2luLCBjb25zdCBDYWxsTGlua0luZm9N
YXAmLCBjb25zdCBDb250ZXh0TWFwJik7CiAgICAgCiAgICAgYm9vbCBpc1NldCgpIGNvbnN0IHsg
cmV0dXJuIG1fY2FsbFRhcmdldCB8fCBtX2V4ZWN1dGFibGUgfHwgbV9jb3VsZFRha2VTbG93UGF0
aDsgfQogICAgIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9j
ay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVC
bG9jay5jcHAJKHJldmlzaW9uIDE2NjEwOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9Db2RlQmxvY2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MDcsNyArNDA3LDcgQEAgdm9p
ZCBDb2RlQmxvY2s6OnByaW50R2V0QnlJZENhY2hlU3RhdHVzKAogI2VuZGlmCiB9CiAKLXZvaWQg
Q29kZUJsb2NrOjpwcmludENhbGxPcChQcmludFN0cmVhbSYgb3V0LCBFeGVjU3RhdGUqIGV4ZWMs
IGludCBsb2NhdGlvbiwgY29uc3QgSW5zdHJ1Y3Rpb24qJiBpdCwgY29uc3QgY2hhciogb3AsIENh
Y2hlRHVtcE1vZGUgY2FjaGVEdW1wTW9kZSwgYm9vbCYgaGFzUHJpbnRlZFByb2ZpbGluZykKK3Zv
aWQgQ29kZUJsb2NrOjpwcmludENhbGxPcChQcmludFN0cmVhbSYgb3V0LCBFeGVjU3RhdGUqIGV4
ZWMsIGludCBsb2NhdGlvbiwgY29uc3QgSW5zdHJ1Y3Rpb24qJiBpdCwgY29uc3QgY2hhciogb3As
IENhY2hlRHVtcE1vZGUgY2FjaGVEdW1wTW9kZSwgYm9vbCYgaGFzUHJpbnRlZFByb2ZpbGluZywg
Y29uc3QgQ2FsbExpbmtJbmZvTWFwJiBtYXApCiB7CiAgICAgaW50IGRzdCA9ICgrK2l0KS0+dS5v
cGVyYW5kOwogICAgIGludCBmdW5jID0gKCsraXQpLT51Lm9wZXJhbmQ7CkBAIC00MjYsMTIgKzQy
NiwxMiBAQCB2b2lkIENvZGVCbG9jazo6cHJpbnRDYWxsT3AoUHJpbnRTdHJlYW0mCiAgICAgICAg
IH0KICNlbmRpZgogI2lmIEVOQUJMRShKSVQpCi0gICAgICAgIGlmIChudW1iZXJPZkNhbGxMaW5r
SW5mb3MoKSkgewotICAgICAgICAgICAgSlNGdW5jdGlvbiogdGFyZ2V0ID0gZ2V0Q2FsbExpbmtJ
bmZvKGxvY2F0aW9uKS5sYXN0U2VlbkNhbGxlZS5nZXQoKTsKKyAgICAgICAgaWYgKENhbGxMaW5r
SW5mbyogaW5mbyA9IG1hcC5nZXQoQ29kZU9yaWdpbihsb2NhdGlvbikpKSB7CisgICAgICAgICAg
ICBKU0Z1bmN0aW9uKiB0YXJnZXQgPSBpbmZvLT5sYXN0U2VlbkNhbGxlZS5nZXQoKTsKICAgICAg
ICAgICAgIGlmICh0YXJnZXQpCiAgICAgICAgICAgICAgICAgb3V0LnByaW50ZigiIGppdCglcCwg
ZXhlYyAlcCkiLCB0YXJnZXQsIHRhcmdldC0+ZXhlY3V0YWJsZSgpKTsKICAgICAgICAgfQotICAg
ICAgICBvdXQucHJpbnQoIiBzdGF0dXMoIiwgQ2FsbExpbmtTdGF0dXM6OmNvbXB1dGVGb3IodGhp
cywgbG9jYXRpb24pLCAiKSIpOworICAgICAgICBvdXQucHJpbnQoIiBzdGF0dXMoIiwgQ2FsbExp
bmtTdGF0dXM6OmNvbXB1dGVGb3IodGhpcywgbG9jYXRpb24sIG1hcCksICIpIik7CiAjZW5kaWYK
ICAgICB9CiAgICAgKytpdDsKQEAgLTQ4MywxMiArNDgzLDE0IEBAIHZvaWQgQ29kZUJsb2NrOjpk
dW1wQnl0ZWNvZGUoUHJpbnRTdHJlYW0KICAgICBvdXQucHJpbnRmKCJcbiIpOwogICAgIAogICAg
IFN0dWJJbmZvTWFwIHN0dWJJbmZvczsKKyAgICBDYWxsTGlua0luZm9NYXAgY2FsbExpbmtJbmZv
czsKICAgICBnZXRTdHViSW5mb01hcChzdHViSW5mb3MpOworICAgIGdldENhbGxMaW5rSW5mb01h
cChjYWxsTGlua0luZm9zKTsKICAgICAKICAgICBjb25zdCBJbnN0cnVjdGlvbiogYmVnaW4gPSBp
bnN0cnVjdGlvbnMoKS5iZWdpbigpOwogICAgIGNvbnN0IEluc3RydWN0aW9uKiBlbmQgPSBpbnN0
cnVjdGlvbnMoKS5lbmQoKTsKICAgICBmb3IgKGNvbnN0IEluc3RydWN0aW9uKiBpdCA9IGJlZ2lu
OyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAgIGR1bXBCeXRlY29kZShvdXQsIGV4ZWMsIGJlZ2lu
LCBpdCwgc3R1YkluZm9zKTsKKyAgICAgICAgZHVtcEJ5dGVjb2RlKG91dCwgZXhlYywgYmVnaW4s
IGl0LCBzdHViSW5mb3MsIGNhbGxMaW5rSW5mb3MpOwogICAgIAogICAgIGlmIChudW1iZXJPZklk
ZW50aWZpZXJzKCkpIHsKICAgICAgICAgb3V0LnByaW50ZigiXG5JZGVudGlmaWVyczpcbiIpOwpA
QCAtNjE2LDcgKzYxOCw5IEBAIHZvaWQgQ29kZUJsb2NrOjpwcmludExvY2F0aW9uT3BBbmRSZWdp
c3QKICAgICBvdXQucHJpbnRmKCIlcyIsIHJlZ2lzdGVyTmFtZShvcGVyYW5kKS5kYXRhKCkpOwog
fQogCi12b2lkIENvZGVCbG9jazo6ZHVtcEJ5dGVjb2RlKFByaW50U3RyZWFtJiBvdXQsIEV4ZWNT
dGF0ZSogZXhlYywgY29uc3QgSW5zdHJ1Y3Rpb24qIGJlZ2luLCBjb25zdCBJbnN0cnVjdGlvbiom
IGl0LCBjb25zdCBTdHViSW5mb01hcCYgbWFwKQordm9pZCBDb2RlQmxvY2s6OmR1bXBCeXRlY29k
ZSgKKyAgICBQcmludFN0cmVhbSYgb3V0LCBFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEluc3RydWN0
aW9uKiBiZWdpbiwgY29uc3QgSW5zdHJ1Y3Rpb24qJiBpdCwKKyAgICBjb25zdCBTdHViSW5mb01h
cCYgc3R1YkluZm9zLCBjb25zdCBDYWxsTGlua0luZm9NYXAmIGNhbGxMaW5rSW5mb3MpCiB7CiAg
ICAgaW50IGxvY2F0aW9uID0gaXQgLSBiZWdpbjsKICAgICBib29sIGhhc1ByaW50ZWRQcm9maWxp
bmcgPSBmYWxzZTsKQEAgLTkxMyw3ICs5MTcsNyBAQCB2b2lkIENvZGVCbG9jazo6ZHVtcEJ5dGVj
b2RlKFByaW50U3RyZWFtCiAgICAgICAgIGNhc2Ugb3BfZ2V0X2J5X2lkX291dF9vZl9saW5lOgog
ICAgICAgICBjYXNlIG9wX2dldF9hcnJheV9sZW5ndGg6IHsKICAgICAgICAgICAgIHByaW50R2V0
QnlJZE9wKG91dCwgZXhlYywgbG9jYXRpb24sIGl0KTsKLSAgICAgICAgICAgIHByaW50R2V0QnlJ
ZENhY2hlU3RhdHVzKG91dCwgZXhlYywgbG9jYXRpb24sIG1hcCk7CisgICAgICAgICAgICBwcmlu
dEdldEJ5SWRDYWNoZVN0YXR1cyhvdXQsIGV4ZWMsIGxvY2F0aW9uLCBzdHViSW5mb3MpOwogICAg
ICAgICAgICAgZHVtcFZhbHVlUHJvZmlsaW5nKG91dCwgaXQsIGhhc1ByaW50ZWRQcm9maWxpbmcp
OwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KQEAgLTExNzQsMTEgKzExNzgsMTEgQEAg
dm9pZCBDb2RlQmxvY2s6OmR1bXBCeXRlY29kZShQcmludFN0cmVhbQogICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBvcF9jYWxsOiB7Ci0gICAgICAgICAgICBwcmlu
dENhbGxPcChvdXQsIGV4ZWMsIGxvY2F0aW9uLCBpdCwgImNhbGwiLCBEdW1wQ2FjaGVzLCBoYXNQ
cmludGVkUHJvZmlsaW5nKTsKKyAgICAgICAgICAgIHByaW50Q2FsbE9wKG91dCwgZXhlYywgbG9j
YXRpb24sIGl0LCAiY2FsbCIsIER1bXBDYWNoZXMsIGhhc1ByaW50ZWRQcm9maWxpbmcsIGNhbGxM
aW5rSW5mb3MpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBv
cF9jYWxsX2V2YWw6IHsKLSAgICAgICAgICAgIHByaW50Q2FsbE9wKG91dCwgZXhlYywgbG9jYXRp
b24sIGl0LCAiY2FsbF9ldmFsIiwgRG9udER1bXBDYWNoZXMsIGhhc1ByaW50ZWRQcm9maWxpbmcp
OworICAgICAgICAgICAgcHJpbnRDYWxsT3Aob3V0LCBleGVjLCBsb2NhdGlvbiwgaXQsICJjYWxs
X2V2YWwiLCBEb250RHVtcENhY2hlcywgaGFzUHJpbnRlZFByb2ZpbGluZywgY2FsbExpbmtJbmZv
cyk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBjYXNlIG9wX2NhbGxf
dmFyYXJnczogewpAQCAtMTIxOSw3ICsxMjIzLDcgQEAgdm9pZCBDb2RlQmxvY2s6OmR1bXBCeXRl
Y29kZShQcmludFN0cmVhbQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAg
Y2FzZSBvcF9jb25zdHJ1Y3Q6IHsKLSAgICAgICAgICAgIHByaW50Q2FsbE9wKG91dCwgZXhlYywg
bG9jYXRpb24sIGl0LCAiY29uc3RydWN0IiwgRHVtcENhY2hlcywgaGFzUHJpbnRlZFByb2ZpbGlu
Zyk7CisgICAgICAgICAgICBwcmludENhbGxPcChvdXQsIGV4ZWMsIGxvY2F0aW9uLCBpdCwgImNv
bnN0cnVjdCIsIER1bXBDYWNoZXMsIGhhc1ByaW50ZWRQcm9maWxpbmcsIGNhbGxMaW5rSW5mb3Mp
OwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBvcF9zdHJjYXQ6
IHsKQEAgLTEzODAsMTEgKzEzODQsMTMgQEAgdm9pZCBDb2RlQmxvY2s6OmR1bXBCeXRlY29kZShQ
cmludFN0cmVhbQogICAgIG91dC5wcmludCgiXG4iKTsKIH0KIAotdm9pZCBDb2RlQmxvY2s6OmR1
bXBCeXRlY29kZShQcmludFN0cmVhbSYgb3V0LCB1bnNpZ25lZCBieXRlY29kZU9mZnNldCwgY29u
c3QgU3R1YkluZm9NYXAmIG1hcCkKK3ZvaWQgQ29kZUJsb2NrOjpkdW1wQnl0ZWNvZGUoCisgICAg
UHJpbnRTdHJlYW0mIG91dCwgdW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQsCisgICAgY29uc3QgU3R1
YkluZm9NYXAmIHN0dWJJbmZvcywgY29uc3QgQ2FsbExpbmtJbmZvTWFwJiBjYWxsTGlua0luZm9z
KQogewogICAgIEV4ZWNTdGF0ZSogZXhlYyA9IG1fZ2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVjKCk7
CiAgICAgY29uc3QgSW5zdHJ1Y3Rpb24qIGl0ID0gaW5zdHJ1Y3Rpb25zKCkuYmVnaW4oKSArIGJ5
dGVjb2RlT2Zmc2V0OwotICAgIGR1bXBCeXRlY29kZShvdXQsIGV4ZWMsIGluc3RydWN0aW9ucygp
LmJlZ2luKCksIGl0LCBtYXApOworICAgIGR1bXBCeXRlY29kZShvdXQsIGV4ZWMsIGluc3RydWN0
aW9ucygpLmJlZ2luKCksIGl0LCBzdHViSW5mb3MsIGNhbGxMaW5rSW5mb3MpOwogfQogCiAjZGVm
aW5lIEZPUl9FQUNIX01FTUJFUl9WRUNUT1IobWFjcm8pIFwKQEAgLTIyMzIsMzQgKzIyMzgsMzQg
QEAgdm9pZCBDb2RlQmxvY2s6OmZpbmFsaXplVW5jb25kaXRpb25hbGx5KAogICAgIC8vIEhhbmRs
ZSBpbmxpbmUgY2FjaGVzLgogICAgIGlmICghIWppdENvZGUoKSkgewogICAgICAgICBSZXBhdGNo
QnVmZmVyIHJlcGF0Y2hCdWZmZXIodGhpcyk7Ci0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCBudW1iZXJPZkNhbGxMaW5rSW5mb3MoKTsgKytpKSB7Ci0gICAgICAgICAgICBpZiAoY2Fs
bExpbmtJbmZvKGkpLmlzTGlua2VkKCkpIHsKLSAgICAgICAgICAgICAgICBpZiAoQ2xvc3VyZUNh
bGxTdHViUm91dGluZSogc3R1YiA9IGNhbGxMaW5rSW5mbyhpKS5zdHViLmdldCgpKSB7CisgICAg
ICAgIGZvciAoQmFnPENhbGxMaW5rSW5mbz46Oml0ZXJhdG9yIGl0ZXIgPSBjYWxsTGlua0luZm9z
QmVnaW4oKTsgISFpdGVyOyArK2l0ZXIpIHsKKyAgICAgICAgICAgIENhbGxMaW5rSW5mbyYgaW5m
byA9ICoqaXRlcjsKKyAgICAgICAgICAgIGlmIChpbmZvLmlzTGlua2VkKCkpIHsKKyAgICAgICAg
ICAgICAgICBpZiAoQ2xvc3VyZUNhbGxTdHViUm91dGluZSogc3R1YiA9IGluZm8uc3R1Yi5nZXQo
KSkgewogICAgICAgICAgICAgICAgICAgICBpZiAoIUhlYXA6OmlzTWFya2VkKHN0dWItPnN0cnVj
dHVyZSgpKQogICAgICAgICAgICAgICAgICAgICAgICAgfHwgIUhlYXA6OmlzTWFya2VkKHN0dWIt
PmV4ZWN1dGFibGUoKSkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChPcHRpb25zOjp2
ZXJib3NlT1NSKCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiQ2xlYXJpbmcgY2xvc3VyZSBjYWxsIGZyb20g
IiwgKnRoaXMsICIgdG8gIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3R1Yi0+
ZXhlY3V0YWJsZSgpLT5oYXNoRm9yKGNhbGxMaW5rSW5mbyhpKS5zcGVjaWFsaXphdGlvbktpbmQo
KSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0dWItPmV4ZWN1dGFibGUoKS0+
aGFzaEZvcihpbmZvLnNwZWNpYWxpemF0aW9uS2luZCgpKSwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIiwgc3R1YiByb3V0aW5lICIsIFJhd1BvaW50ZXIoc3R1YiksICIuXG4iKTsK
ICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxM
aW5rSW5mbyhpKS51bmxpbmsoKm1fdm0sIHJlcGF0Y2hCdWZmZXIpOworICAgICAgICAgICAgICAg
ICAgICAgICAgaW5mby51bmxpbmsoKm1fdm0sIHJlcGF0Y2hCdWZmZXIpOwogICAgICAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfSBlbHNlIGlmICghSGVhcDo6aXNNYXJrZWQoY2Fs
bExpbmtJbmZvKGkpLmNhbGxlZS5nZXQoKSkpIHsKKyAgICAgICAgICAgICAgICB9IGVsc2UgaWYg
KCFIZWFwOjppc01hcmtlZChpbmZvLmNhbGxlZS5nZXQoKSkpIHsKICAgICAgICAgICAgICAgICAg
ICAgaWYgKE9wdGlvbnM6OnZlcmJvc2VPU1IoKSkgewogICAgICAgICAgICAgICAgICAgICAgICAg
ZGF0YUxvZygKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiQ2xlYXJpbmcgY2FsbCBmcm9t
ICIsICp0aGlzLCAiIHRvICIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgUmF3UG9pbnRl
cihjYWxsTGlua0luZm8oaSkuY2FsbGVlLmdldCgpKSwgIiAoIiwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjYWxsTGlua0luZm8oaSkuY2FsbGVlLmdldCgpLT5leGVjdXRhYmxlKCktPmhh
c2hGb3IoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxMaW5rSW5mbyhpKS5z
cGVjaWFsaXphdGlvbktpbmQoKSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmF3UG9p
bnRlcihpbmZvLmNhbGxlZS5nZXQoKSksICIgKCIsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaW5mby5jYWxsZWUuZ2V0KCktPmV4ZWN1dGFibGUoKS0+aGFzaEZvcihpbmZvLnNwZWNpYWxp
emF0aW9uS2luZCgpKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiKS5cbiIpOwogICAg
ICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGNhbGxMaW5rSW5mbyhpKS51
bmxpbmsoKm1fdm0sIHJlcGF0Y2hCdWZmZXIpOworICAgICAgICAgICAgICAgICAgICBpbmZvLnVu
bGluaygqbV92bSwgcmVwYXRjaEJ1ZmZlcik7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAg
ICAgfQotICAgICAgICAgICAgaWYgKCEhY2FsbExpbmtJbmZvKGkpLmxhc3RTZWVuQ2FsbGVlCi0g
ICAgICAgICAgICAgICAgJiYgIUhlYXA6OmlzTWFya2VkKGNhbGxMaW5rSW5mbyhpKS5sYXN0U2Vl
bkNhbGxlZS5nZXQoKSkpCi0gICAgICAgICAgICAgICAgY2FsbExpbmtJbmZvKGkpLmxhc3RTZWVu
Q2FsbGVlLmNsZWFyKCk7CisgICAgICAgICAgICBpZiAoISFpbmZvLmxhc3RTZWVuQ2FsbGVlCisg
ICAgICAgICAgICAgICAgJiYgIUhlYXA6OmlzTWFya2VkKGluZm8ubGFzdFNlZW5DYWxsZWUuZ2V0
KCkpKQorICAgICAgICAgICAgICAgIGluZm8ubGFzdFNlZW5DYWxsZWUuY2xlYXIoKTsKICAgICAg
ICAgfQogICAgICAgICBmb3IgKEJhZzxTdHJ1Y3R1cmVTdHViSW5mbz46Oml0ZXJhdG9yIGl0ZXIg
PSBtX3N0dWJJbmZvcy5iZWdpbigpOyAhIWl0ZXI7ICsraXRlcikgewogICAgICAgICAgICAgU3Ry
dWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvID0gKippdGVyOwpAQCAtMjI4OCw2ICsyMjk0LDM0IEBA
IHZvaWQgQ29kZUJsb2NrOjpnZXRTdHViSW5mb01hcChTdHViSW5mb00KICAgICBnZXRTdHViSW5m
b01hcChsb2NrZXIsIHJlc3VsdCk7CiB9CiAKK3ZvaWQgQ29kZUJsb2NrOjpnZXRDYWxsTGlua0lu
Zm9NYXAoY29uc3QgQ29uY3VycmVudEpJVExvY2tlciYsIENhbGxMaW5rSW5mb01hcCYgcmVzdWx0
KQoreworI2lmIEVOQUJMRShKSVQpCisgICAgdG9IYXNoTWFwKG1fY2FsbExpbmtJbmZvcywgZ2V0
Q2FsbExpbmtJbmZvQ29kZU9yaWdpbiwgcmVzdWx0KTsKKyNlbHNlCisgICAgVU5VU0VEX1BBUkFN
KHJlc3VsdCk7CisjZW5kaWYKK30KKwordm9pZCBDb2RlQmxvY2s6OmdldENhbGxMaW5rSW5mb01h
cChDYWxsTGlua0luZm9NYXAmIHJlc3VsdCkKK3sKKyAgICBDb25jdXJyZW50SklUTG9ja2VyIGxv
Y2tlcihtX2xvY2spOworICAgIGdldENhbGxMaW5rSW5mb01hcChsb2NrZXIsIHJlc3VsdCk7Cit9
CisKK0NhbGxMaW5rSW5mbyogQ29kZUJsb2NrOjpnZXRDYWxsTGlua0luZm9Gb3JCeXRlY29kZUlu
ZGV4KHVuc2lnbmVkIGluZGV4KQoreworI2lmIEVOQUJMRShKSVQpCisgICAgZm9yIChCYWc8Q2Fs
bExpbmtJbmZvPjo6aXRlcmF0b3IgaXRlciA9IG1fY2FsbExpbmtJbmZvcy5iZWdpbigpOyAhIWl0
ZXI7ICsraXRlcikgeworICAgICAgICBpZiAoKCppdGVyKS0+Y29kZU9yaWdpbiA9PSBDb2RlT3Jp
Z2luKGluZGV4KSkKKyAgICAgICAgICAgIHJldHVybiAqaXRlcjsKKyAgICB9CisjZWxzZQorICAg
IFVOVVNFRF9QQVJBTShpbmRleCk7CisjZW5kaWYKKyAgICByZXR1cm4gbnVsbHB0cjsKK30KKwog
I2lmIEVOQUJMRShKSVQpCiBTdHJ1Y3R1cmVTdHViSW5mbyogQ29kZUJsb2NrOjphZGRTdHViSW5m
bygpCiB7CkBAIC0yMjk1LDYgKzIzMjksMTIgQEAgU3RydWN0dXJlU3R1YkluZm8qIENvZGVCbG9j
azo6YWRkU3R1YkluZgogICAgIHJldHVybiBtX3N0dWJJbmZvcy5hZGQoKTsKIH0KIAorQ2FsbExp
bmtJbmZvKiBDb2RlQmxvY2s6OmFkZENhbGxMaW5rSW5mbygpCit7CisgICAgQ29uY3VycmVudEpJ
VExvY2tlciBsb2NrZXIobV9sb2NrKTsKKyAgICByZXR1cm4gbV9jYWxsTGlua0luZm9zLmFkZCgp
OworfQorCiB2b2lkIENvZGVCbG9jazo6cmVzZXRTdHViKFN0cnVjdHVyZVN0dWJJbmZvJiBzdHVi
SW5mbykKIHsKICAgICBpZiAoc3R1YkluZm8uYWNjZXNzVHlwZSA9PSBhY2Nlc3NfdW5zZXQpCkBA
IC0yNTkxLDE1ICsyNjMxLDE2IEBAIHZvaWQgQ29kZUJsb2NrOjp1bmxpbmtDYWxscygpCiAgICAg
ICAgICAgICBtX2xsaW50Q2FsbExpbmtJbmZvc1tpXS51bmxpbmsoKTsKICAgICB9CiAjZW5kaWYK
LSAgICBpZiAoIW1fY2FsbExpbmtJbmZvcy5zaXplKCkpCisgICAgaWYgKG1fY2FsbExpbmtJbmZv
cy5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybjsKICAgICBpZiAoIW1fdm0tPmNhblVzZUpJVCgp
KQogICAgICAgICByZXR1cm47CiAgICAgUmVwYXRjaEJ1ZmZlciByZXBhdGNoQnVmZmVyKHRoaXMp
OwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9jYWxsTGlua0luZm9zLnNpemUoKTsgaSsr
KSB7Ci0gICAgICAgIGlmICghbV9jYWxsTGlua0luZm9zW2ldLmlzTGlua2VkKCkpCisgICAgZm9y
IChCYWc8Q2FsbExpbmtJbmZvPjo6aXRlcmF0b3IgaXRlciA9IG1fY2FsbExpbmtJbmZvcy5iZWdp
bigpOyAhIWl0ZXI7ICsraXRlcikgeworICAgICAgICBDYWxsTGlua0luZm8mIGluZm8gPSAqKml0
ZXI7CisgICAgICAgIGlmICghaW5mby5pc0xpbmtlZCgpKQogICAgICAgICAgICAgY29udGludWU7
Ci0gICAgICAgIG1fY2FsbExpbmtJbmZvc1tpXS51bmxpbmsoKm1fdm0sIHJlcGF0Y2hCdWZmZXIp
OworICAgICAgICBpbmZvLnVubGluaygqbV92bSwgcmVwYXRjaEJ1ZmZlcik7CiAgICAgfQogfQog
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCShyZXZp
c2lvbiAxNjYxMDkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2Nr
LmgJKHdvcmtpbmcgY29weSkKQEAgLTE0Nyw3ICsxNDcsOSBAQCBwdWJsaWM6CiAgICAgdm9pZCB2
aXNpdEFnZ3JlZ2F0ZShTbG90VmlzaXRvciYpOwogCiAgICAgdm9pZCBkdW1wQnl0ZWNvZGUoUHJp
bnRTdHJlYW0mID0gV1RGOjpkYXRhRmlsZSgpKTsKLSAgICB2b2lkIGR1bXBCeXRlY29kZShQcmlu
dFN0cmVhbSYsIHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0LCBjb25zdCBTdHViSW5mb01hcCYgPSBT
dHViSW5mb01hcCgpKTsKKyAgICB2b2lkIGR1bXBCeXRlY29kZSgKKyAgICAgICAgUHJpbnRTdHJl
YW0mLCB1bnNpZ25lZCBieXRlY29kZU9mZnNldCwKKyAgICAgICAgY29uc3QgU3R1YkluZm9NYXAm
ID0gU3R1YkluZm9NYXAoKSwgY29uc3QgQ2FsbExpbmtJbmZvTWFwJiA9IENhbGxMaW5rSW5mb01h
cCgpKTsKICAgICB2b2lkIHByaW50U3RydWN0dXJlcyhQcmludFN0cmVhbSYsIGNvbnN0IEluc3Ry
dWN0aW9uKik7CiAgICAgdm9pZCBwcmludFN0cnVjdHVyZShQcmludFN0cmVhbSYsIGNvbnN0IGNo
YXIqIG5hbWUsIGNvbnN0IEluc3RydWN0aW9uKiwgaW50IG9wZXJhbmQpOwogCkBAIC0xNzgsMTEg
KzE4MCwxOCBAQCBwdWJsaWM6CiAKICAgICB2b2lkIGdldFN0dWJJbmZvTWFwKGNvbnN0IENvbmN1
cnJlbnRKSVRMb2NrZXImLCBTdHViSW5mb01hcCYgcmVzdWx0KTsKICAgICB2b2lkIGdldFN0dWJJ
bmZvTWFwKFN0dWJJbmZvTWFwJiByZXN1bHQpOwotCisgICAgCisgICAgdm9pZCBnZXRDYWxsTGlu
a0luZm9NYXAoY29uc3QgQ29uY3VycmVudEpJVExvY2tlciYsIENhbGxMaW5rSW5mb01hcCYgcmVz
dWx0KTsKKyAgICB2b2lkIGdldENhbGxMaW5rSW5mb01hcChDYWxsTGlua0luZm9NYXAmIHJlc3Vs
dCk7CisgICAgCisgICAgLy8gVGhpcyBpcyBhIHNsb3cgZnVuY3Rpb24gY2FsbCB1c2VkIHByaW1h
cmlseSBmb3IgY29tcGlsaW5nIE9TUiBleGl0cyBpbiB0aGUgY2FzZQorICAgIC8vIHRoYXQgdGhl
cmUgaGFkIGJlZW4gaW5saW5pbmcuIENoYW5jZXMgYXJlIGlmIHlvdSB3YW50IHRvIHVzZSB0aGlz
LCB5b3UncmUgcmVhbGx5CisgICAgLy8gbG9va2luZyBmb3IgYSBDYWxsTGlua0luZm9NYXAgdG8g
YW1vcnRpemUgdGhlIGNvc3Qgb2YgY2FsbGluZyB0aGlzLgorICAgIENhbGxMaW5rSW5mbyogZ2V0
Q2FsbExpbmtJbmZvRm9yQnl0ZWNvZGVJbmRleCh1bnNpZ25lZCBieXRlY29kZUluZGV4KTsKICNp
ZiBFTkFCTEUoSklUKQogICAgIFN0cnVjdHVyZVN0dWJJbmZvKiBhZGRTdHViSW5mbygpOwotICAg
IEJhZzxTdHJ1Y3R1cmVTdHViSW5mbz46Oml0ZXJhdG9yIGJlZ2luKCkgeyByZXR1cm4gbV9zdHVi
SW5mb3MuYmVnaW4oKTsgfQotICAgIEJhZzxTdHJ1Y3R1cmVTdHViSW5mbz46Oml0ZXJhdG9yIGVu
ZCgpIHsgcmV0dXJuIG1fc3R1YkluZm9zLmVuZCgpOyB9CisgICAgQmFnPFN0cnVjdHVyZVN0dWJJ
bmZvPjo6aXRlcmF0b3Igc3R1YkluZm9CZWdpbigpIHsgcmV0dXJuIG1fc3R1YkluZm9zLmJlZ2lu
KCk7IH0KKyAgICBCYWc8U3RydWN0dXJlU3R1YkluZm8+OjppdGVyYXRvciBzdHViSW5mb0VuZCgp
IHsgcmV0dXJuIG1fc3R1YkluZm9zLmVuZCgpOyB9CiAKICAgICB2b2lkIHJlc2V0U3R1YihTdHJ1
Y3R1cmVTdHViSW5mbyYpOwogICAgIApAQCAtMTkxLDE2ICsyMDAsOSBAQCBwdWJsaWM6CiAgICAg
ICAgIHJldHVybiAqKGJpbmFyeVNlYXJjaDxCeVZhbEluZm8sIHVuc2lnbmVkPihtX2J5VmFsSW5m
b3MsIG1fYnlWYWxJbmZvcy5zaXplKCksIGJ5dGVjb2RlSW5kZXgsIGdldEJ5VmFsSW5mb0J5dGVj
b2RlSW5kZXgpKTsKICAgICB9CiAKLSAgICBDYWxsTGlua0luZm8mIGdldENhbGxMaW5rSW5mbyhS
ZXR1cm5BZGRyZXNzUHRyIHJldHVybkFkZHJlc3MpCi0gICAgewotICAgICAgICByZXR1cm4gKihi
aW5hcnlTZWFyY2g8Q2FsbExpbmtJbmZvLCB2b2lkKj4obV9jYWxsTGlua0luZm9zLCBtX2NhbGxM
aW5rSW5mb3Muc2l6ZSgpLCByZXR1cm5BZGRyZXNzLnZhbHVlKCksIGdldENhbGxMaW5rSW5mb1Jl
dHVybkxvY2F0aW9uKSk7Ci0gICAgfQotCi0gICAgQ2FsbExpbmtJbmZvJiBnZXRDYWxsTGlua0lu
Zm8odW5zaWduZWQgYnl0ZWNvZGVJbmRleCkKLSAgICB7Ci0gICAgICAgIEFTU0VSVCghSklUQ29k
ZTo6aXNPcHRpbWl6aW5nSklUKGppdFR5cGUoKSkpOwotICAgICAgICByZXR1cm4gKihiaW5hcnlT
ZWFyY2g8Q2FsbExpbmtJbmZvLCB1bnNpZ25lZD4obV9jYWxsTGlua0luZm9zLCBtX2NhbGxMaW5r
SW5mb3Muc2l6ZSgpLCBieXRlY29kZUluZGV4LCBnZXRDYWxsTGlua0luZm9CeXRlY29kZUluZGV4
KSk7Ci0gICAgfQorICAgIENhbGxMaW5rSW5mbyogYWRkQ2FsbExpbmtJbmZvKCk7CisgICAgQmFn
PENhbGxMaW5rSW5mbz46Oml0ZXJhdG9yIGNhbGxMaW5rSW5mb3NCZWdpbigpIHsgcmV0dXJuIG1f
Y2FsbExpbmtJbmZvcy5iZWdpbigpOyB9CisgICAgQmFnPENhbGxMaW5rSW5mbz46Oml0ZXJhdG9y
IGNhbGxMaW5rSW5mb3NFbmQoKSB7IHJldHVybiBtX2NhbGxMaW5rSW5mb3MuZW5kKCk7IH0KICNl
bmRpZiAvLyBFTkFCTEUoSklUKQogCiAgICAgdm9pZCB1bmxpbmtJbmNvbWluZ0NhbGxzKCk7CkBA
IC0zOTksMTAgKzQwMSw2IEBAIHB1YmxpYzoKICAgICB2b2lkIHNldE51bWJlck9mQnlWYWxJbmZv
cyhzaXplX3Qgc2l6ZSkgeyBtX2J5VmFsSW5mb3MucmVzaXplVG9GaXQoc2l6ZSk7IH0KICAgICBz
aXplX3QgbnVtYmVyT2ZCeVZhbEluZm9zKCkgY29uc3QgeyByZXR1cm4gbV9ieVZhbEluZm9zLnNp
emUoKTsgfQogICAgIEJ5VmFsSW5mbyYgYnlWYWxJbmZvKHNpemVfdCBpbmRleCkgeyByZXR1cm4g
bV9ieVZhbEluZm9zW2luZGV4XTsgfQotCi0gICAgdm9pZCBzZXROdW1iZXJPZkNhbGxMaW5rSW5m
b3Moc2l6ZV90IHNpemUpIHsgbV9jYWxsTGlua0luZm9zLnJlc2l6ZVRvRml0KHNpemUpOyB9Ci0g
ICAgc2l6ZV90IG51bWJlck9mQ2FsbExpbmtJbmZvcygpIGNvbnN0IHsgcmV0dXJuIG1fY2FsbExp
bmtJbmZvcy5zaXplKCk7IH0KLSAgICBDYWxsTGlua0luZm8mIGNhbGxMaW5rSW5mbyhpbnQgaW5k
ZXgpIHsgcmV0dXJuIG1fY2FsbExpbmtJbmZvc1tpbmRleF07IH0KICNlbmRpZgogCiAgICAgdW5z
aWduZWQgbnVtYmVyT2ZBcmd1bWVudFZhbHVlUHJvZmlsZXMoKQpAQCAtOTY4LDcgKzk2Niw5IEBA
IHByaXZhdGU6CiAgICAgICAgICAgICBtX2NvbnN0YW50UmVnaXN0ZXJzW2ldLnNldCgqbV92bSwg
b3duZXJFeGVjdXRhYmxlKCksIGNvbnN0YW50c1tpXS5nZXQoKSk7CiAgICAgfQogCi0gICAgdm9p
ZCBkdW1wQnl0ZWNvZGUoUHJpbnRTdHJlYW0mLCBFeGVjU3RhdGUqLCBjb25zdCBJbnN0cnVjdGlv
biogYmVnaW4sIGNvbnN0IEluc3RydWN0aW9uKiYsIGNvbnN0IFN0dWJJbmZvTWFwJiA9IFN0dWJJ
bmZvTWFwKCkpOworICAgIHZvaWQgZHVtcEJ5dGVjb2RlKAorICAgICAgICBQcmludFN0cmVhbSYs
IEV4ZWNTdGF0ZSosIGNvbnN0IEluc3RydWN0aW9uKiBiZWdpbiwgY29uc3QgSW5zdHJ1Y3Rpb24q
JiwKKyAgICAgICAgY29uc3QgU3R1YkluZm9NYXAmID0gU3R1YkluZm9NYXAoKSwgY29uc3QgQ2Fs
bExpbmtJbmZvTWFwJiA9IENhbGxMaW5rSW5mb01hcCgpKTsKIAogICAgIENTdHJpbmcgcmVnaXN0
ZXJOYW1lKGludCByKSBjb25zdDsKICAgICB2b2lkIHByaW50VW5hcnlPcChQcmludFN0cmVhbSYs
IEV4ZWNTdGF0ZSosIGludCBsb2NhdGlvbiwgY29uc3QgSW5zdHJ1Y3Rpb24qJiwgY29uc3QgY2hh
ciogb3ApOwpAQCAtOTc3LDcgKzk3Nyw3IEBAIHByaXZhdGU6CiAgICAgdm9pZCBwcmludEdldEJ5
SWRPcChQcmludFN0cmVhbSYsIEV4ZWNTdGF0ZSosIGludCBsb2NhdGlvbiwgY29uc3QgSW5zdHJ1
Y3Rpb24qJik7CiAgICAgdm9pZCBwcmludEdldEJ5SWRDYWNoZVN0YXR1cyhQcmludFN0cmVhbSYs
IEV4ZWNTdGF0ZSosIGludCBsb2NhdGlvbiwgY29uc3QgU3R1YkluZm9NYXAmKTsKICAgICBlbnVt
IENhY2hlRHVtcE1vZGUgeyBEdW1wQ2FjaGVzLCBEb250RHVtcENhY2hlcyB9OwotICAgIHZvaWQg
cHJpbnRDYWxsT3AoUHJpbnRTdHJlYW0mLCBFeGVjU3RhdGUqLCBpbnQgbG9jYXRpb24sIGNvbnN0
IEluc3RydWN0aW9uKiYsIGNvbnN0IGNoYXIqIG9wLCBDYWNoZUR1bXBNb2RlLCBib29sJiBoYXNQ
cmludGVkUHJvZmlsaW5nKTsKKyAgICB2b2lkIHByaW50Q2FsbE9wKFByaW50U3RyZWFtJiwgRXhl
Y1N0YXRlKiwgaW50IGxvY2F0aW9uLCBjb25zdCBJbnN0cnVjdGlvbiomLCBjb25zdCBjaGFyKiBv
cCwgQ2FjaGVEdW1wTW9kZSwgYm9vbCYgaGFzUHJpbnRlZFByb2ZpbGluZywgY29uc3QgQ2FsbExp
bmtJbmZvTWFwJik7CiAgICAgdm9pZCBwcmludFB1dEJ5SWRPcChQcmludFN0cmVhbSYsIEV4ZWNT
dGF0ZSosIGludCBsb2NhdGlvbiwgY29uc3QgSW5zdHJ1Y3Rpb24qJiwgY29uc3QgY2hhciogb3Ap
OwogICAgIHZvaWQgcHJpbnRMb2NhdGlvbkFuZE9wKFByaW50U3RyZWFtJiwgRXhlY1N0YXRlKiwg
aW50IGxvY2F0aW9uLCBjb25zdCBJbnN0cnVjdGlvbiomLCBjb25zdCBjaGFyKiBvcCk7CiAgICAg
dm9pZCBwcmludExvY2F0aW9uT3BBbmRSZWdpc3Rlck9wZXJhbmQoUHJpbnRTdHJlYW0mLCBFeGVj
U3RhdGUqLCBpbnQgbG9jYXRpb24sIGNvbnN0IEluc3RydWN0aW9uKiYgaXQsIGNvbnN0IGNoYXIq
IG9wLCBpbnQgb3BlcmFuZCk7CkBAIC0xMDY0LDcgKzEwNjQsNyBAQCBwcml2YXRlOgogI2lmIEVO
QUJMRShKSVQpCiAgICAgQmFnPFN0cnVjdHVyZVN0dWJJbmZvPiBtX3N0dWJJbmZvczsKICAgICBW
ZWN0b3I8QnlWYWxJbmZvPiBtX2J5VmFsSW5mb3M7Ci0gICAgVmVjdG9yPENhbGxMaW5rSW5mbz4g
bV9jYWxsTGlua0luZm9zOworICAgIEJhZzxDYWxsTGlua0luZm8+IG1fY2FsbExpbmtJbmZvczsK
ICAgICBTZW50aW5lbExpbmtlZExpc3Q8Q2FsbExpbmtJbmZvLCBCYXNpY1Jhd1NlbnRpbmVsTm9k
ZTxDYWxsTGlua0luZm8+PiBtX2luY29taW5nQ2FsbHM7CiAjZW5kaWYKICAgICBPd25QdHI8Q29t
cGFjdEpJVENvZGVNYXA+IG1faml0Q29kZU1hcDsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCShyZXZpc2lvbiAxNjYxMDkpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMTA2Myw2ICsxMDYzLDcgQEAgcHJpdmF0ZToKICAgICAgICAgLy8gY29kZSBibG9j
ayBoYWQgZ2F0aGVyZWQuCiAgICAgICAgIExhenlPcGVyYW5kVmFsdWVQcm9maWxlUGFyc2VyIG1f
bGF6eU9wZXJhbmRzOwogICAgICAgICAKKyAgICAgICAgQ2FsbExpbmtJbmZvTWFwIG1fY2FsbExp
bmtJbmZvczsKICAgICAgICAgU3R1YkluZm9NYXAgbV9zdHViSW5mb3M7CiAgICAgICAgIAogICAg
ICAgICAvLyBEaWQgd2Ugc2VlIGFueSByZXR1cm5zPyBXZSBuZWVkIHRvIGhhbmRsZSB0aGUgKHVu
Y29tbW9uIGJ1dCBuZWNlc3NhcnkpCkBAIC0xMTgwLDcgKzExODEsOCBAQCB2b2lkIEJ5dGVDb2Rl
UGFyc2VyOjpoYW5kbGVDYWxsKAogICAgICAgICAgICAgbV9ncmFwaC52YWx1ZU9mSlNDb25zdGFu
dChjYWxsVGFyZ2V0KSkuc2V0SXNQcm92ZWQodHJ1ZSk7CiAgICAgfSBlbHNlIHsKICAgICAgICAg
Y2FsbExpbmtTdGF0dXMgPSBDYWxsTGlua1N0YXR1czo6Y29tcHV0ZUZvcigKLSAgICAgICAgICAg
IG1faW5saW5lU3RhY2tUb3AtPm1fcHJvZmlsZWRCbG9jaywgY3VycmVudENvZGVPcmlnaW4oKSwg
bV9jYWxsQ29udGV4dE1hcCk7CisgICAgICAgICAgICBtX2lubGluZVN0YWNrVG9wLT5tX3Byb2Zp
bGVkQmxvY2ssIGN1cnJlbnRDb2RlT3JpZ2luKCksCisgICAgICAgICAgICBtX2lubGluZVN0YWNr
VG9wLT5tX2NhbGxMaW5rSW5mb3MsIG1fY2FsbENvbnRleHRNYXApOwogICAgIH0KICAgICAKICAg
ICBpZiAoIWNhbGxMaW5rU3RhdHVzLmNhbk9wdGltaXplKCkpIHsKQEAgLTMzMzMsOCArMzMzNSwx
MCBAQCBCeXRlQ29kZVBhcnNlcjo6SW5saW5lU3RhY2tFbnRyeTo6SW5saW5lCiAgICAgICAgIC8v
IFdlIGRvIHRoaXMgd2hpbGUgaG9sZGluZyB0aGUgbG9jayBiZWNhdXNlIHdlIHdhbnQgdG8gZW5j
b3VyYWdlIFN0cnVjdHVyZVN0dWJJbmZvJ3MKICAgICAgICAgLy8gdG8gYmUgcG90ZW50aWFsbHkg
YWRkZWQgdG8gb3BlcmF0aW9ucyBhbmQgYmVjYXVzZSB0aGUgcHJvZmlsZWQgYmxvY2sgY291bGQg
YmUgaW4gdGhlCiAgICAgICAgIC8vIG1pZGRsZSBvZiBMTEludC0+SklUIHRpZXItdXAgaW4gd2hp
Y2ggY2FzZSB3ZSB3b3VsZCBiZSBhZGRpbmcgdGhlIGluZm8ncyByaWdodCBub3cuCi0gICAgICAg
IGlmIChtX3Byb2ZpbGVkQmxvY2stPmhhc0Jhc2VsaW5lSklUUHJvZmlsaW5nKCkpCisgICAgICAg
IGlmIChtX3Byb2ZpbGVkQmxvY2stPmhhc0Jhc2VsaW5lSklUUHJvZmlsaW5nKCkpIHsKICAgICAg
ICAgICAgIG1fcHJvZmlsZWRCbG9jay0+Z2V0U3R1YkluZm9NYXAobG9ja2VyLCBtX3N0dWJJbmZv
cyk7CisgICAgICAgICAgICBtX3Byb2ZpbGVkQmxvY2stPmdldENhbGxMaW5rSW5mb01hcChsb2Nr
ZXIsIG1fY2FsbExpbmtJbmZvcyk7CisgICAgICAgIH0KICAgICB9CiAgICAgCiAgICAgbV9hcmd1
bWVudFBvc2l0aW9ucy5yZXNpemUoYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMpOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb2RlLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb2RlLmgJKHJldmlzaW9uIDE2NjEwOSkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29kZS5oCSh3b3JraW5nIGNvcHkpCkBA
IC0xMTcsNyArMTE3LDYgQEAgcHVibGljOgogICAgIFZlY3RvcjxERkc6Ok9TUkVudHJ5RGF0YT4g
b3NyRW50cnk7CiAgICAgU2VnbWVudGVkVmVjdG9yPERGRzo6T1NSRXhpdCwgOD4gb3NyRXhpdDsK
ICAgICBWZWN0b3I8REZHOjpTcGVjdWxhdGlvblJlY292ZXJ5PiBzcGVjdWxhdGlvblJlY292ZXJ5
OwotICAgIFZlY3Rvcjx1bnNpZ25lZD4gc2xvd1BhdGhDYWxsczsKICAgICBERkc6OlZhcmlhYmxl
RXZlbnRTdHJlYW0gdmFyaWFibGVFdmVudFN0cmVhbTsKICAgICBERkc6Ok1pbmlmaWVkR3JhcGgg
bWluaWZpZWRERkc7CiAjaWYgRU5BQkxFKEZUTF9KSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmNwcAkocmV2aXNpb24gMTY2MTA5KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb21waWxlci5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTIzMywyMCArMjMzLDE2IEBAIHZvaWQgSklUQ29tcGlsZXI6OmxpbmsoTGlua0J1ZmZlciYg
bGlua0IKICAgICAgICAgaW5mby5wYXRjaC5kZWx0YUNhbGxUb1Nsb3dDYXNlID0gZGlmZmVyZW5j
ZUJldHdlZW5Db2RlUHRyKGNhbGxSZXR1cm5Mb2NhdGlvbiwgbGlua0J1ZmZlci5sb2NhdGlvbk9m
KG1faW5zW2ldLm1fc2xvd1BhdGhHZW5lcmF0b3ItPmxhYmVsKCkpKTsKICAgICB9CiAgICAgCi0g
ICAgUkVMRUFTRV9BU1NFUlQoIW1fZ3JhcGgubV9wbGFuLndpbGxUcnlUb1RpZXJVcCB8fCBtX2pp
dENvZGUtPnNsb3dQYXRoQ2FsbHMuc2l6ZSgpID49IG1fanNDYWxscy5zaXplKCkpOwotICAgIG1f
Y29kZUJsb2NrLT5zZXROdW1iZXJPZkNhbGxMaW5rSW5mb3MobV9qc0NhbGxzLnNpemUoKSk7CiAg
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fanNDYWxscy5zaXplKCk7ICsraSkgewotICAg
ICAgICBDYWxsTGlua0luZm8mIGluZm8gPSBtX2NvZGVCbG9jay0+Y2FsbExpbmtJbmZvKGkpOwot
ICAgICAgICBpbmZvLmNhbGxUeXBlID0gbV9qc0NhbGxzW2ldLm1fY2FsbFR5cGU7Ci0gICAgICAg
IGluZm8uY29kZU9yaWdpbiA9IG1fanNDYWxsc1tpXS5tX2NvZGVPcmlnaW47CisgICAgICAgIEpT
Q2FsbFJlY29yZCYgcmVjb3JkID0gbV9qc0NhbGxzW2ldOworICAgICAgICBDYWxsTGlua0luZm8m
IGluZm8gPSAqcmVjb3JkLm1faW5mbzsKICAgICAgICAgVGh1bmtHZW5lcmF0b3IgZ2VuZXJhdG9y
ID0gbGlua1RodW5rR2VuZXJhdG9yRm9yKAogICAgICAgICAgICAgaW5mby5jYWxsVHlwZSA9PSBD
YWxsTGlua0luZm86OkNvbnN0cnVjdCA/IENvZGVGb3JDb25zdHJ1Y3QgOiBDb2RlRm9yQ2FsbCwK
ICAgICAgICAgICAgIFJlZ2lzdGVyUHJlc2VydmF0aW9uTm90UmVxdWlyZWQpOwotICAgICAgICBs
aW5rQnVmZmVyLmxpbmsobV9qc0NhbGxzW2ldLm1fc2xvd0NhbGwsIEZ1bmN0aW9uUHRyKG1fdm0t
PmdldENUSVN0dWIoZ2VuZXJhdG9yKS5jb2RlKCkuZXhlY3V0YWJsZUFkZHJlc3MoKSkpOwotICAg
ICAgICBpbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbiA9IGxpbmtCdWZmZXIubG9jYXRpb25PZk5lYXJD
YWxsKG1fanNDYWxsc1tpXS5tX3Nsb3dDYWxsKTsKLSAgICAgICAgaW5mby5ob3RQYXRoQmVnaW4g
PSBsaW5rQnVmZmVyLmxvY2F0aW9uT2YobV9qc0NhbGxzW2ldLm1fdGFyZ2V0VG9DaGVjayk7Ci0g
ICAgICAgIGluZm8uaG90UGF0aE90aGVyID0gbGlua0J1ZmZlci5sb2NhdGlvbk9mTmVhckNhbGwo
bV9qc0NhbGxzW2ldLm1fZmFzdENhbGwpOwotICAgICAgICBpbmZvLmNhbGxlZUdQUiA9IHN0YXRp
Y19jYXN0PHVuc2lnbmVkPihtX2pzQ2FsbHNbaV0ubV9jYWxsZWUpOworICAgICAgICBsaW5rQnVm
ZmVyLmxpbmsocmVjb3JkLm1fc2xvd0NhbGwsIEZ1bmN0aW9uUHRyKG1fdm0tPmdldENUSVN0dWIo
Z2VuZXJhdG9yKS5jb2RlKCkuZXhlY3V0YWJsZUFkZHJlc3MoKSkpOworICAgICAgICBpbmZvLmNh
bGxSZXR1cm5Mb2NhdGlvbiA9IGxpbmtCdWZmZXIubG9jYXRpb25PZk5lYXJDYWxsKHJlY29yZC5t
X3Nsb3dDYWxsKTsKKyAgICAgICAgaW5mby5ob3RQYXRoQmVnaW4gPSBsaW5rQnVmZmVyLmxvY2F0
aW9uT2YocmVjb3JkLm1fdGFyZ2V0VG9DaGVjayk7CisgICAgICAgIGluZm8uaG90UGF0aE90aGVy
ID0gbGlua0J1ZmZlci5sb2NhdGlvbk9mTmVhckNhbGwocmVjb3JkLm1fZmFzdENhbGwpOwogICAg
IH0KICAgICAKICAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgb3NyRXhpdFRodW5rID0gdm0oKS0+
Z2V0Q1RJU3R1Yihvc3JFeGl0R2VuZXJhdGlvblRodW5rR2VuZXJhdG9yKTsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmgJKHJldmlzaW9uIDE2NjEwOSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuaAkod29ya2luZyBj
b3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEsIDIwMTMgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDExLCAyMDEz
LCAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
ICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwpAQCAtMjI2LDkgKzIyNiw5IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJu
IG1fanNDYWxscy5zaXplKCk7CiAgICAgfQogCi0gICAgdm9pZCBhZGRKU0NhbGwoQ2FsbCBmYXN0
Q2FsbCwgQ2FsbCBzbG93Q2FsbCwgRGF0YUxhYmVsUHRyIHRhcmdldFRvQ2hlY2ssIENhbGxMaW5r
SW5mbzo6Q2FsbFR5cGUgY2FsbFR5cGUsIEdQUlJlZyBjYWxsZWUsIENvZGVPcmlnaW4gY29kZU9y
aWdpbikKKyAgICB2b2lkIGFkZEpTQ2FsbChDYWxsIGZhc3RDYWxsLCBDYWxsIHNsb3dDYWxsLCBE
YXRhTGFiZWxQdHIgdGFyZ2V0VG9DaGVjaywgQ2FsbExpbmtJbmZvKiBpbmZvKQogICAgIHsKLSAg
ICAgICAgbV9qc0NhbGxzLmFwcGVuZChKU0NhbGxSZWNvcmQoZmFzdENhbGwsIHNsb3dDYWxsLCB0
YXJnZXRUb0NoZWNrLCBjYWxsVHlwZSwgY2FsbGVlLCBjb2RlT3JpZ2luKSk7CisgICAgICAgIG1f
anNDYWxscy5hcHBlbmQoSlNDYWxsUmVjb3JkKGZhc3RDYWxsLCBzbG93Q2FsbCwgdGFyZ2V0VG9D
aGVjaywgaW5mbykpOwogICAgIH0KICAgICAKICAgICB2b2lkIGFkZFdlYWtSZWZlcmVuY2UoSlND
ZWxsKiB0YXJnZXQpCkBAIC0zNTMsMjIgKzM1MywxOCBAQCBwcml2YXRlOgogICAgIFZlY3RvcjxM
YWJlbD4gbV9ibG9ja0hlYWRzOwogCiAgICAgc3RydWN0IEpTQ2FsbFJlY29yZCB7Ci0gICAgICAg
IEpTQ2FsbFJlY29yZChDYWxsIGZhc3RDYWxsLCBDYWxsIHNsb3dDYWxsLCBEYXRhTGFiZWxQdHIg
dGFyZ2V0VG9DaGVjaywgQ2FsbExpbmtJbmZvOjpDYWxsVHlwZSBjYWxsVHlwZSwgR1BSUmVnIGNh
bGxlZSwgQ29kZU9yaWdpbiBjb2RlT3JpZ2luKQorICAgICAgICBKU0NhbGxSZWNvcmQoQ2FsbCBm
YXN0Q2FsbCwgQ2FsbCBzbG93Q2FsbCwgRGF0YUxhYmVsUHRyIHRhcmdldFRvQ2hlY2ssIENhbGxM
aW5rSW5mbyogaW5mbykKICAgICAgICAgICAgIDogbV9mYXN0Q2FsbChmYXN0Q2FsbCkKICAgICAg
ICAgICAgICwgbV9zbG93Q2FsbChzbG93Q2FsbCkKICAgICAgICAgICAgICwgbV90YXJnZXRUb0No
ZWNrKHRhcmdldFRvQ2hlY2spCi0gICAgICAgICAgICAsIG1fY2FsbFR5cGUoY2FsbFR5cGUpCi0g
ICAgICAgICAgICAsIG1fY2FsbGVlKGNhbGxlZSkKLSAgICAgICAgICAgICwgbV9jb2RlT3JpZ2lu
KGNvZGVPcmlnaW4pCisgICAgICAgICAgICAsIG1faW5mbyhpbmZvKQogICAgICAgICB7CiAgICAg
ICAgIH0KICAgICAgICAgCiAgICAgICAgIENhbGwgbV9mYXN0Q2FsbDsKICAgICAgICAgQ2FsbCBt
X3Nsb3dDYWxsOwogICAgICAgICBEYXRhTGFiZWxQdHIgbV90YXJnZXRUb0NoZWNrOwotICAgICAg
ICBDYWxsTGlua0luZm86OkNhbGxUeXBlIG1fY2FsbFR5cGU7Ci0gICAgICAgIEdQUlJlZyBtX2Nh
bGxlZTsKLSAgICAgICAgQ29kZU9yaWdpbiBtX2NvZGVPcmlnaW47CisgICAgICAgIENhbGxMaW5r
SW5mbyogbV9pbmZvOwogICAgIH07CiAgICAgCiAgICAgVmVjdG9yPElubGluZUNhY2hlV3JhcHBl
cjxKSVRHZXRCeUlkR2VuZXJhdG9yPiwgND4gbV9nZXRCeUlkczsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdENvbXBpbGVyQ29tbW9uLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXRDb21waWxlckNvbW1vbi5jcHAJ
KHJldmlzaW9uIDE2NjEwOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhp
dENvbXBpbGVyQ29tbW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTgsOSArOTgsMTEgQEAgdm9p
ZCByZWlmeUlubGluZWRDYWxsRnJhbWVzKENDYWxsSGVscGVycwogICAgICAgICBDb2RlQmxvY2sq
IGJhc2VsaW5lQ29kZUJsb2NrID0gaml0LmJhc2VsaW5lQ29kZUJsb2NrRm9yKGNvZGVPcmlnaW4p
OwogICAgICAgICBDb2RlQmxvY2sqIGJhc2VsaW5lQ29kZUJsb2NrRm9yQ2FsbGVyID0gaml0LmJh
c2VsaW5lQ29kZUJsb2NrRm9yKGlubGluZUNhbGxGcmFtZS0+Y2FsbGVyKTsKICAgICAgICAgdW5z
aWduZWQgY2FsbEJ5dGVjb2RlSW5kZXggPSBpbmxpbmVDYWxsRnJhbWUtPmNhbGxlci5ieXRlY29k
ZUluZGV4OwotICAgICAgICBDYWxsTGlua0luZm8mIGNhbGxMaW5rSW5mbyA9IGJhc2VsaW5lQ29k
ZUJsb2NrRm9yQ2FsbGVyLT5nZXRDYWxsTGlua0luZm8oY2FsbEJ5dGVjb2RlSW5kZXgpOworICAg
ICAgICBDYWxsTGlua0luZm8qIGNhbGxMaW5rSW5mbyA9CisgICAgICAgICAgICBiYXNlbGluZUNv
ZGVCbG9ja0ZvckNhbGxlci0+Z2V0Q2FsbExpbmtJbmZvRm9yQnl0ZWNvZGVJbmRleChjYWxsQnl0
ZWNvZGVJbmRleCk7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKGNhbGxMaW5rSW5mbyk7CiAgICAg
ICAgIAotICAgICAgICB2b2lkKiBqdW1wVGFyZ2V0ID0gY2FsbExpbmtJbmZvLmNhbGxSZXR1cm5M
b2NhdGlvbi5leGVjdXRhYmxlQWRkcmVzcygpOworICAgICAgICB2b2lkKiBqdW1wVGFyZ2V0ID0g
Y2FsbExpbmtJbmZvLT5jYWxsUmV0dXJuTG9jYXRpb24uZXhlY3V0YWJsZUFkZHJlc3MoKTsKIAog
ICAgICAgICBHUFJSZWcgY2FsbGVyRnJhbWVHUFI7CiAgICAgICAgIGlmIChpbmxpbmVDYWxsRnJh
bWUtPmNhbGxlci5pbmxpbmVDYWxsRnJhbWUpIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAkocmV2aXNpb24gMTY2MTA5KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNzIxLDE0ICs3MjEsOSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjplbWl0
Q2FsbChOb2RlKiBub2RlCiAgICAgCiAgICAgc2xvd1BhdGgubGluaygmbV9qaXQpOwogICAgIAot
ICAgIGlmIChtX2ppdC5ncmFwaCgpLm1fcGxhbi53aWxsVHJ5VG9UaWVyVXApIHsKLSAgICAgICAg
bV9qaXQuYWRkMzIoCi0gICAgICAgICAgICBUcnVzdGVkSW1tMzIoMSksCi0gICAgICAgICAgICBN
YWNyb0Fzc2VtYmxlcjo6QWJzb2x1dGVBZGRyZXNzKAotICAgICAgICAgICAgICAgIG1faml0Lmpp
dENvZGUoKS0+c2xvd1BhdGhDYWxscy5iZWdpbigpICsgbV9qaXQuY3VycmVudEpTQ2FsbEluZGV4
KCkpKTsKLSAgICB9Ci0gICAgCiAgICAgbV9qaXQubW92ZShjYWxsZWVHUFIsIEdQUkluZm86OnJl
Z1QwKTsgLy8gQ2FsbGVlIG5lZWRzIHRvIGJlIGluIHJlZ1QwCisgICAgQ2FsbExpbmtJbmZvKiBj
YWxsTGlua0luZm8gPSBtX2ppdC5jb2RlQmxvY2soKS0+YWRkQ2FsbExpbmtJbmZvKCk7CisgICAg
bV9qaXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihjYWxsTGlua0luZm8pLCBH
UFJJbmZvOjpyZWdUMik7IC8vIExpbmsgaW5mbyBuZWVkcyB0byBiZSBpbiByZWdUMgogICAgIEpJ
VENvbXBpbGVyOjpDYWxsIHNsb3dDYWxsID0gbV9qaXQubmVhckNhbGwoKTsKICAgICAKICAgICBk
b25lLmxpbmsoJm1faml0KTsKQEAgLTczNyw3ICs3MzIsMTEgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJ
VDo6ZW1pdENhbGwoTm9kZSogbm9kZQogICAgIAogICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0R1BS
LCBtX2N1cnJlbnROb2RlLCBEYXRhRm9ybWF0SlMsIFVzZUNoaWxkcmVuQ2FsbGVkRXhwbGljaXRs
eSk7CiAgICAgCi0gICAgbV9qaXQuYWRkSlNDYWxsKGZhc3RDYWxsLCBzbG93Q2FsbCwgdGFyZ2V0
VG9DaGVjaywgY2FsbFR5cGUsIGNhbGxlZUdQUiwgbV9jdXJyZW50Tm9kZS0+b3JpZ2luLnNlbWFu
dGljKTsKKyAgICBjYWxsTGlua0luZm8tPmNhbGxUeXBlID0gY2FsbFR5cGU7CisgICAgY2FsbExp
bmtJbmZvLT5jb2RlT3JpZ2luID0gbV9jdXJyZW50Tm9kZS0+b3JpZ2luLnNlbWFudGljOworICAg
IGNhbGxMaW5rSW5mby0+Y2FsbGVlR1BSID0gY2FsbGVlR1BSOworICAgIAorICAgIG1faml0LmFk
ZEpTQ2FsbChmYXN0Q2FsbCwgc2xvd0NhbGwsIHRhcmdldFRvQ2hlY2ssIGNhbGxMaW5rSW5mbyk7
CiB9CiAKIC8vIENsYW5nIHNob3VsZCBhbGxvdyB1bnJlYWNoYWJsZSBbW2NsYW5nOjpmYWxsdGhy
b3VnaF1dIGluIHRlbXBsYXRlIGZ1bmN0aW9ucyBpZiBhbnkgdGVtcGxhdGUgZXhwYW5zaW9uIHVz
ZXMgaXQKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRp
dmVKSVQuY3BwCShyZXZpc2lvbiAxNjYxMDkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1NwZWN1bGF0aXZlSklULmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTUzMiw0MCArMTUzMiwx
MCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjaGVja0FyZ3VtZW50VHlwZXMoCiAgICAgbV9pc0No
ZWNraW5nQXJndW1lbnRUeXBlcyA9IGZhbHNlOwogfQogCi12b2lkIFNwZWN1bGF0aXZlSklUOjpw
cmVwYXJlSklUQ29kZUZvclRpZXJVcCgpCi17Ci0gICAgdW5zaWduZWQgbnVtYmVyT2ZDYWxscyA9
IDA7Ci0gICAgCi0gICAgZm9yIChCbG9ja0luZGV4IGJsb2NrSW5kZXggPSBtX2ppdC5ncmFwaCgp
Lm51bUJsb2NrcygpOyBibG9ja0luZGV4LS07KSB7Ci0gICAgICAgIEJhc2ljQmxvY2sqIGJsb2Nr
ID0gbV9qaXQuZ3JhcGgoKS5ibG9jayhibG9ja0luZGV4KTsKLSAgICAgICAgaWYgKCFibG9jaykK
LSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAKLSAgICAgICAgZm9yICh1bnNpZ25lZCBu
b2RlSW5kZXggPSBibG9jay0+c2l6ZSgpOyBub2RlSW5kZXgtLTspIHsKLSAgICAgICAgICAgIE5v
ZGUqIG5vZGUgPSBibG9jay0+YXQobm9kZUluZGV4KTsKLSAgICAgICAgICAgIAotICAgICAgICAg
ICAgc3dpdGNoIChub2RlLT5vcCgpKSB7Ci0gICAgICAgICAgICBjYXNlIENhbGw6Ci0gICAgICAg
ICAgICBjYXNlIENvbnN0cnVjdDoKLSAgICAgICAgICAgICAgICBudW1iZXJPZkNhbGxzKys7Ci0g
ICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICBkZWZh
dWx0OgotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0g
ICAgfQotICAgIAotICAgIG1faml0LmppdENvZGUoKS0+c2xvd1BhdGhDYWxscy5maWxsKDAsIG51
bWJlck9mQ2FsbHMpOwotfQotCiBib29sIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKCkKIHsKICAg
ICBjaGVja0FyZ3VtZW50VHlwZXMoKTsKICAgICAKLSAgICBpZiAobV9qaXQuZ3JhcGgoKS5tX3Bs
YW4ud2lsbFRyeVRvVGllclVwKQotICAgICAgICBwcmVwYXJlSklUQ29kZUZvclRpZXJVcCgpOwot
ICAgIAogICAgIEFTU0VSVCghbV9jdXJyZW50Tm9kZSk7CiAgICAgZm9yIChCbG9ja0luZGV4IGJs
b2NrSW5kZXggPSAwOyBibG9ja0luZGV4IDwgbV9qaXQuZ3JhcGgoKS5udW1CbG9ja3MoKTsgKyti
bG9ja0luZGV4KSB7CiAgICAgICAgIG1faml0LnNldEZvckJsb2NrSW5kZXgoYmxvY2tJbmRleCk7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5o
CShyZXZpc2lvbiAxNjYxMDkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1
bGF0aXZlSklULmgJKHdvcmtpbmcgY29weSkKQEAgLTEyMCw4ICsxMjAsNiBAQCBwdWJsaWM6CiAK
ICAgICBib29sIGNvbXBpbGUoKTsKICAgICAKLSAgICB2b2lkIHByZXBhcmVKSVRDb2RlRm9yVGll
clVwKCk7Ci0gICAgCiAgICAgdm9pZCBjcmVhdGVPU1JFbnRyaWVzKCk7CiAgICAgdm9pZCBsaW5r
T1NSRW50cmllcyhMaW5rQnVmZmVyJik7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9m
dGwvRlRMQ29tcGlsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0
bC9GVExDb21waWxlLmNwcAkocmV2aXNpb24gMTY2MTA5KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2Z0bC9GVExDb21waWxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDAyLDcgKzQwMiw2IEBA
IHN0YXRpYyB2b2lkIGZpeEZ1bmN0aW9uQmFzZWRPblN0YWNrTWFwcygKICAgICAKICAgICBzdGQ6
OnNvcnQoc3RhdGUuanNDYWxscy5iZWdpbigpLCBzdGF0ZS5qc0NhbGxzLmVuZCgpKTsKICAgICAK
LSAgICBjb2RlQmxvY2stPnNldE51bWJlck9mQ2FsbExpbmtJbmZvcyhzdGF0ZS5qc0NhbGxzLnNp
emUoKSk7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gc3RhdGUuanNDYWxscy5zaXplKCk7IGktLTsp
IHsKICAgICAgICAgSlNDYWxsJiBjYWxsID0gc3RhdGUuanNDYWxsc1tpXTsKIApAQCAtNDE3LDgg
KzQxNiw3IEBAIHN0YXRpYyB2b2lkIGZpeEZ1bmN0aW9uQmFzZWRPblN0YWNrTWFwcygKICAgICAg
ICAgTWFjcm9Bc3NlbWJsZXI6OkFzc2VtYmxlclR5cGVfVDo6ZmlsbE5vcHMoCiAgICAgICAgICAg
ICBzdGFydE9mSUMgKyBsaW5rQnVmZmVyLnNpemUoKSwgc2l6ZU9mQ2FsbCgpIC0gbGlua0J1ZmZl
ci5zaXplKCkpOwogICAgICAgICAKLSAgICAgICAgQ2FsbExpbmtJbmZvJiBpbmZvID0gY29kZUJs
b2NrLT5jYWxsTGlua0luZm8oaSk7Ci0gICAgICAgIGNhbGwubGluayh2bSwgbGlua0J1ZmZlciwg
aW5mbyk7CisgICAgICAgIGNhbGwubGluayh2bSwgbGlua0J1ZmZlcik7CiAgICAgfQogICAgIAog
ICAgIFJlcGF0Y2hCdWZmZXIgcmVwYXRjaEJ1ZmZlcihjb2RlQmxvY2spOwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2Z0bC9GVExKU0NhbGwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9mdGwvRlRMSlNDYWxsLmNwcAkocmV2aXNpb24gMTY2MTA5KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExKU0NhbGwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0z
NCw3ICszNCw4IEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgRlRMIHsKIAogSlNDYWxsOjpK
U0NhbGwoKQogICAgIDogbV9zdGFja21hcElEKFVJTlRfTUFYKQotICAgICwgbV9ub2RlKDApCisg
ICAgLCBtX25vZGUobnVsbHB0cikKKyAgICAsIG1fY2FsbExpbmtJbmZvKG51bGxwdHIpCiAgICAg
LCBtX2luc3RydWN0aW9uT2Zmc2V0KFVJTlRfTUFYKQogewogfQpAQCAtNDIsMTIgKzQzLDE1IEBA
IEpTQ2FsbDo6SlNDYWxsKCkKIEpTQ2FsbDo6SlNDYWxsKHVuc2lnbmVkIHN0YWNrbWFwSUQsIERG
Rzo6Tm9kZSogbm9kZSkKICAgICA6IG1fc3RhY2ttYXBJRChzdGFja21hcElEKQogICAgICwgbV9u
b2RlKG5vZGUpCisgICAgLCBtX2NhbGxMaW5rSW5mbyhudWxscHRyKQogICAgICwgbV9pbnN0cnVj
dGlvbk9mZnNldCgwKQogewogfQogCiB2b2lkIEpTQ2FsbDo6ZW1pdChDQ2FsbEhlbHBlcnMmIGpp
dCkKIHsKKyAgICBtX2NhbGxMaW5rSW5mbyA9IGppdC5jb2RlQmxvY2soKS0+YWRkQ2FsbExpbmtJ
bmZvKCk7CisgICAgCiAgICAgQ0NhbGxIZWxwZXJzOjpKdW1wIHNsb3dQYXRoID0gaml0LmJyYW5j
aFB0cldpdGhQYXRjaCgKICAgICAgICAgQ0NhbGxIZWxwZXJzOjpOb3RFcXVhbCwgR1BSSW5mbzo6
cmVnVDAsIG1fdGFyZ2V0VG9DaGVjaywKICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1t
UHRyKDApKTsKQEAgLTY1LDEyICs2OSwxNCBAQCB2b2lkIEpTQ2FsbDo6ZW1pdChDQ2FsbEhlbHBl
cnMmIGppdCkKICAgICBDQ2FsbEhlbHBlcnM6Okp1bXAgZG9uZSA9IGppdC5qdW1wKCk7CiAgICAg
CiAgICAgc2xvd1BhdGgubGluaygmaml0KTsKKyAgICAKKyAgICBqaXQubW92ZShDQ2FsbEhlbHBl
cnM6OlRydXN0ZWRJbW1QdHIobV9jYWxsTGlua0luZm8pLCBHUFJJbmZvOjpyZWdUMik7CiAgICAg
bV9zbG93Q2FsbCA9IGppdC5uZWFyQ2FsbCgpOwogICAgIAogICAgIGRvbmUubGluaygmaml0KTsK
IH0KIAotdm9pZCBKU0NhbGw6OmxpbmsoVk0mIHZtLCBMaW5rQnVmZmVyJiBsaW5rQnVmZmVyLCBD
YWxsTGlua0luZm8mIGNhbGxJbmZvKQordm9pZCBKU0NhbGw6OmxpbmsoVk0mIHZtLCBMaW5rQnVm
ZmVyJiBsaW5rQnVmZmVyKQogewogICAgIFRodW5rR2VuZXJhdG9yIGdlbmVyYXRvciA9IGxpbmtU
aHVua0dlbmVyYXRvckZvcigKICAgICAgICAgbV9ub2RlLT5vcCgpID09IERGRzo6Q29uc3RydWN0
ID8gQ29kZUZvckNvbnN0cnVjdCA6IENvZGVGb3JDYWxsLApAQCAtNzksMTMgKzg1LDEzIEBAIHZv
aWQgSlNDYWxsOjpsaW5rKFZNJiB2bSwgTGlua0J1ZmZlciYgbGkKICAgICBsaW5rQnVmZmVyLmxp
bmsoCiAgICAgICAgIG1fc2xvd0NhbGwsIEZ1bmN0aW9uUHRyKHZtLmdldENUSVN0dWIoZ2VuZXJh
dG9yKS5jb2RlKCkuZXhlY3V0YWJsZUFkZHJlc3MoKSkpOwogICAgIAotICAgIGNhbGxJbmZvLmlz
RlRMID0gdHJ1ZTsKLSAgICBjYWxsSW5mby5jYWxsVHlwZSA9IG1fbm9kZS0+b3AoKSA9PSBERkc6
OkNvbnN0cnVjdCA/IENhbGxMaW5rSW5mbzo6Q29uc3RydWN0IDogQ2FsbExpbmtJbmZvOjpDYWxs
OwotICAgIGNhbGxJbmZvLmNvZGVPcmlnaW4gPSBtX25vZGUtPm9yaWdpbi5zZW1hbnRpYzsKLSAg
ICBjYWxsSW5mby5jYWxsUmV0dXJuTG9jYXRpb24gPSBsaW5rQnVmZmVyLmxvY2F0aW9uT2ZOZWFy
Q2FsbChtX3Nsb3dDYWxsKTsKLSAgICBjYWxsSW5mby5ob3RQYXRoQmVnaW4gPSBsaW5rQnVmZmVy
LmxvY2F0aW9uT2YobV90YXJnZXRUb0NoZWNrKTsKLSAgICBjYWxsSW5mby5ob3RQYXRoT3RoZXIg
PSBsaW5rQnVmZmVyLmxvY2F0aW9uT2ZOZWFyQ2FsbChtX2Zhc3RDYWxsKTsKLSAgICBjYWxsSW5m
by5jYWxsZWVHUFIgPSBHUFJJbmZvOjpyZWdUMDsKKyAgICBtX2NhbGxMaW5rSW5mby0+aXNGVEwg
PSB0cnVlOworICAgIG1fY2FsbExpbmtJbmZvLT5jYWxsVHlwZSA9IG1fbm9kZS0+b3AoKSA9PSBE
Rkc6OkNvbnN0cnVjdCA/IENhbGxMaW5rSW5mbzo6Q29uc3RydWN0IDogQ2FsbExpbmtJbmZvOjpD
YWxsOworICAgIG1fY2FsbExpbmtJbmZvLT5jb2RlT3JpZ2luID0gbV9ub2RlLT5vcmlnaW4uc2Vt
YW50aWM7CisgICAgbV9jYWxsTGlua0luZm8tPmNhbGxSZXR1cm5Mb2NhdGlvbiA9IGxpbmtCdWZm
ZXIubG9jYXRpb25PZk5lYXJDYWxsKG1fc2xvd0NhbGwpOworICAgIG1fY2FsbExpbmtJbmZvLT5o
b3RQYXRoQmVnaW4gPSBsaW5rQnVmZmVyLmxvY2F0aW9uT2YobV90YXJnZXRUb0NoZWNrKTsKKyAg
ICBtX2NhbGxMaW5rSW5mby0+aG90UGF0aE90aGVyID0gbGlua0J1ZmZlci5sb2NhdGlvbk9mTmVh
ckNhbGwobV9mYXN0Q2FsbCk7CisgICAgbV9jYWxsTGlua0luZm8tPmNhbGxlZUdQUiA9IEdQUklu
Zm86OnJlZ1QwOwogfQogCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6RlRMCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZnRsL0ZUTEpTQ2FsbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9mdGwvRlRMSlNDYWxsLmgJKHJldmlzaW9uIDE2NjEwOSkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9mdGwvRlRMSlNDYWxsLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ3LDcgKzQ3
LDcgQEAgcHVibGljOgogICAgIEpTQ2FsbCh1bnNpZ25lZCBzdGFja21hcElELCBERkc6Ok5vZGUq
KTsKICAgICAKICAgICB2b2lkIGVtaXQoQ0NhbGxIZWxwZXJzJik7Ci0gICAgdm9pZCBsaW5rKFZN
JiwgTGlua0J1ZmZlciYsIENhbGxMaW5rSW5mbyYpOworICAgIHZvaWQgbGluayhWTSYsIExpbmtC
dWZmZXImKTsKICAgICAKICAgICB1bnNpZ25lZCBzdGFja21hcElEKCkgY29uc3QgeyByZXR1cm4g
bV9zdGFja21hcElEOyB9CiAgICAgCkBAIC02Miw2ICs2Miw3IEBAIHByaXZhdGU6CiAgICAgQ0Nh
bGxIZWxwZXJzOjpEYXRhTGFiZWxQdHIgbV90YXJnZXRUb0NoZWNrOwogICAgIENDYWxsSGVscGVy
czo6Q2FsbCBtX2Zhc3RDYWxsOwogICAgIENDYWxsSGVscGVyczo6Q2FsbCBtX3Nsb3dDYWxsOwor
ICAgIENhbGxMaW5rSW5mbyogbV9jYWxsTGlua0luZm87CiAKIHB1YmxpYzoKICAgICB1aW50MzJf
dCBtX2luc3RydWN0aW9uT2Zmc2V0OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9K
SVQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcAko
cmV2aXNpb24gMTY2MTA5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0yOTQsNyArMjk0LDcgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxl
TWFpblBhc3MoKQogICAgICAgICB9CiAgICAgfQogCi0gICAgUkVMRUFTRV9BU1NFUlQobV9jYWxs
TGlua0luZm9JbmRleCA9PSBtX2NhbGxTdHJ1Y3R1cmVTdHViQ29tcGlsYXRpb25JbmZvLnNpemUo
KSk7CisgICAgUkVMRUFTRV9BU1NFUlQobV9jYWxsTGlua0luZm9JbmRleCA9PSBtX2NhbGxDb21w
aWxhdGlvbkluZm8uc2l6ZSgpKTsKIAogI2lmbmRlZiBOREVCVUcKICAgICAvLyBSZXNldCB0aGlz
LCBpbiBvcmRlciB0byBndWFyZCBpdHMgdXNlIHdpdGggQVNTRVJUcy4KQEAgLTQyNSw3ICs0MjUs
NyBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVTbG93Q2FzZXMoKQogCiAgICAgUkVMRUFTRV9B
U1NFUlQobV9nZXRCeUlkSW5kZXggPT0gbV9nZXRCeUlkcy5zaXplKCkpOwogICAgIFJFTEVBU0Vf
QVNTRVJUKG1fcHV0QnlJZEluZGV4ID09IG1fcHV0QnlJZHMuc2l6ZSgpKTsKLSAgICBSRUxFQVNF
X0FTU0VSVChtX2NhbGxMaW5rSW5mb0luZGV4ID09IG1fY2FsbFN0cnVjdHVyZVN0dWJDb21waWxh
dGlvbkluZm8uc2l6ZSgpKTsKKyAgICBSRUxFQVNFX0FTU0VSVChtX2NhbGxMaW5rSW5mb0luZGV4
ID09IG1fY2FsbENvbXBpbGF0aW9uSW5mby5zaXplKCkpOwogICAgIFJFTEVBU0VfQVNTRVJUKG51
bWJlck9mVmFsdWVQcm9maWxlcyA9PSBtX2NvZGVCbG9jay0+bnVtYmVyT2ZWYWx1ZVByb2ZpbGVz
KCkpOwogCiAjaWZuZGVmIE5ERUJVRwpAQCAtNjQzLDE1ICs2NDMsMTIgQEAgQ29tcGlsYXRpb25S
ZXN1bHQgSklUOjpwcml2YXRlQ29tcGlsZShKSQogICAgICAgICAgICAgZGlmZmVyZW5jZUJldHdl
ZW5Db2RlUHRyKGJhZFR5cGVKdW1wLCBkb25lVGFyZ2V0KSwKICAgICAgICAgICAgIGRpZmZlcmVu
Y2VCZXR3ZWVuQ29kZVB0cihyZXR1cm5BZGRyZXNzLCBzbG93UGF0aFRhcmdldCkpOwogICAgIH0K
LSAgICBtX2NvZGVCbG9jay0+c2V0TnVtYmVyT2ZDYWxsTGlua0luZm9zKG1fY2FsbFN0cnVjdHVy
ZVN0dWJDb21waWxhdGlvbkluZm8uc2l6ZSgpKTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgbV9jb2RlQmxvY2stPm51bWJlck9mQ2FsbExpbmtJbmZvcygpOyArK2kpIHsKLSAgICAgICAg
Q2FsbExpbmtJbmZvJiBpbmZvID0gbV9jb2RlQmxvY2stPmNhbGxMaW5rSW5mbyhpKTsKLSAgICAg
ICAgaW5mby5jYWxsVHlwZSA9IG1fY2FsbFN0cnVjdHVyZVN0dWJDb21waWxhdGlvbkluZm9baV0u
Y2FsbFR5cGU7Ci0gICAgICAgIGluZm8uY29kZU9yaWdpbiA9IENvZGVPcmlnaW4obV9jYWxsU3Ry
dWN0dXJlU3R1YkNvbXBpbGF0aW9uSW5mb1tpXS5ieXRlY29kZUluZGV4KTsKLSAgICAgICAgaW5m
by5jYWxsUmV0dXJuTG9jYXRpb24gPSBwYXRjaEJ1ZmZlci5sb2NhdGlvbk9mTmVhckNhbGwobV9j
YWxsU3RydWN0dXJlU3R1YkNvbXBpbGF0aW9uSW5mb1tpXS5jYWxsUmV0dXJuTG9jYXRpb24pOwot
ICAgICAgICBpbmZvLmhvdFBhdGhCZWdpbiA9IHBhdGNoQnVmZmVyLmxvY2F0aW9uT2YobV9jYWxs
U3RydWN0dXJlU3R1YkNvbXBpbGF0aW9uSW5mb1tpXS5ob3RQYXRoQmVnaW4pOwotICAgICAgICBp
bmZvLmhvdFBhdGhPdGhlciA9IHBhdGNoQnVmZmVyLmxvY2F0aW9uT2ZOZWFyQ2FsbChtX2NhbGxT
dHJ1Y3R1cmVTdHViQ29tcGlsYXRpb25JbmZvW2ldLmhvdFBhdGhPdGhlcik7Ci0gICAgICAgIGlu
Zm8uY2FsbGVlR1BSID0gcmVnVDA7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fY2Fs
bENvbXBpbGF0aW9uSW5mby5zaXplKCk7ICsraSkgeworICAgICAgICBDYWxsQ29tcGlsYXRpb25J
bmZvJiBjb21waWxhdGlvbkluZm8gPSBtX2NhbGxDb21waWxhdGlvbkluZm9baV07CisgICAgICAg
IENhbGxMaW5rSW5mbyYgaW5mbyA9ICpjb21waWxhdGlvbkluZm8uY2FsbExpbmtJbmZvOworICAg
ICAgICBpbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbiA9IHBhdGNoQnVmZmVyLmxvY2F0aW9uT2ZOZWFy
Q2FsbChjb21waWxhdGlvbkluZm8uY2FsbFJldHVybkxvY2F0aW9uKTsKKyAgICAgICAgaW5mby5o
b3RQYXRoQmVnaW4gPSBwYXRjaEJ1ZmZlci5sb2NhdGlvbk9mKGNvbXBpbGF0aW9uSW5mby5ob3RQ
YXRoQmVnaW4pOworICAgICAgICBpbmZvLmhvdFBhdGhPdGhlciA9IHBhdGNoQnVmZmVyLmxvY2F0
aW9uT2ZOZWFyQ2FsbChjb21waWxhdGlvbkluZm8uaG90UGF0aE90aGVyKTsKICAgICB9CiAKICAg
ICBDb21wYWN0SklUQ29kZU1hcDo6RW5jb2RlciBqaXRDb2RlTWFwRW5jb2RlcjsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVQuaAkocmV2aXNpb24gMTY2MTA5KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9KSVQuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMDgsIDIwMTIsIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4LCAyMDEyLCAyMDEzLCAyMDE0IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAt
MTY3LDEyICsxNjcsMTEgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIE1hY3JvQXNzZW1ibGVy
OjpDYWxsIHJldHVybkFkZHJlc3M7CiAgICAgfTsKIAotICAgIHN0cnVjdCBTdHJ1Y3R1cmVTdHVi
Q29tcGlsYXRpb25JbmZvIHsKKyAgICBzdHJ1Y3QgQ2FsbENvbXBpbGF0aW9uSW5mbyB7CiAgICAg
ICAgIE1hY3JvQXNzZW1ibGVyOjpEYXRhTGFiZWxQdHIgaG90UGF0aEJlZ2luOwogICAgICAgICBN
YWNyb0Fzc2VtYmxlcjo6Q2FsbCBob3RQYXRoT3RoZXI7CiAgICAgICAgIE1hY3JvQXNzZW1ibGVy
OjpDYWxsIGNhbGxSZXR1cm5Mb2NhdGlvbjsKLSAgICAgICAgQ2FsbExpbmtJbmZvOjpDYWxsVHlw
ZSBjYWxsVHlwZTsKLSAgICAgICAgdW5zaWduZWQgYnl0ZWNvZGVJbmRleDsKKyAgICAgICAgQ2Fs
bExpbmtJbmZvKiBjYWxsTGlua0luZm87CiAgICAgfTsKIAogICAgIC8vIE5lYXIgY2FsbHMgY2Fu
IG9ubHkgYmUgcGF0Y2hlZCB0byBvdGhlciBKSVQgY29kZSwgcmVndWxhciBjYWxscyBjYW4gYmUg
cGF0Y2hlZCB0byBKSVQgY29kZSBvciByZWxpbmtlZCB0byBzdHViIGZ1bmN0aW9ucy4KQEAgLTc5
NSw3ICs3OTQsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgVmVjdG9yPEpJVEdldEJ5SWRH
ZW5lcmF0b3I+IG1fZ2V0QnlJZHM7CiAgICAgICAgIFZlY3RvcjxKSVRQdXRCeUlkR2VuZXJhdG9y
PiBtX3B1dEJ5SWRzOwogICAgICAgICBWZWN0b3I8QnlWYWxDb21waWxhdGlvbkluZm8+IG1fYnlW
YWxDb21waWxhdGlvbkluZm87Ci0gICAgICAgIFZlY3RvcjxTdHJ1Y3R1cmVTdHViQ29tcGlsYXRp
b25JbmZvPiBtX2NhbGxTdHJ1Y3R1cmVTdHViQ29tcGlsYXRpb25JbmZvOworICAgICAgICBWZWN0
b3I8Q2FsbENvbXBpbGF0aW9uSW5mbz4gbV9jYWxsQ29tcGlsYXRpb25JbmZvOwogICAgICAgICBW
ZWN0b3I8SnVtcFRhYmxlPiBtX2ptcFRhYmxlOwogCiAgICAgICAgIHVuc2lnbmVkIG1fYnl0ZWNv
ZGVPZmZzZXQ7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENhbGwuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ2FsbC5jcHAJKHJldmlz
aW9uIDE2NjEwOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ2FsbC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTIxOSwxNiArMjE5LDE5IEBAIHZvaWQgSklUOjpjb21waWxlT3BDYWxs
KE9wY29kZUlEIG9wY29kZUkKICAgICBKdW1wIHNsb3dDYXNlID0gYnJhbmNoUHRyV2l0aFBhdGNo
KE5vdEVxdWFsLCByZWdUMCwgYWRkcmVzc09mTGlua2VkRnVuY3Rpb25DaGVjaywgVHJ1c3RlZElt
bVB0cigwKSk7CiAgICAgYWRkU2xvd0Nhc2Uoc2xvd0Nhc2UpOwogCi0gICAgQVNTRVJUKG1fY2Fs
bFN0cnVjdHVyZVN0dWJDb21waWxhdGlvbkluZm8uc2l6ZSgpID09IGNhbGxMaW5rSW5mb0luZGV4
KTsKLSAgICBtX2NhbGxTdHJ1Y3R1cmVTdHViQ29tcGlsYXRpb25JbmZvLmFwcGVuZChTdHJ1Y3R1
cmVTdHViQ29tcGlsYXRpb25JbmZvKCkpOwotICAgIG1fY2FsbFN0cnVjdHVyZVN0dWJDb21waWxh
dGlvbkluZm9bY2FsbExpbmtJbmZvSW5kZXhdLmhvdFBhdGhCZWdpbiA9IGFkZHJlc3NPZkxpbmtl
ZEZ1bmN0aW9uQ2hlY2s7Ci0gICAgbV9jYWxsU3RydWN0dXJlU3R1YkNvbXBpbGF0aW9uSW5mb1tj
YWxsTGlua0luZm9JbmRleF0uY2FsbFR5cGUgPSBDYWxsTGlua0luZm86OmNhbGxUeXBlRm9yKG9w
Y29kZUlEKTsKLSAgICBtX2NhbGxTdHJ1Y3R1cmVTdHViQ29tcGlsYXRpb25JbmZvW2NhbGxMaW5r
SW5mb0luZGV4XS5ieXRlY29kZUluZGV4ID0gbV9ieXRlY29kZU9mZnNldDsKKyAgICBBU1NFUlQo
bV9jYWxsQ29tcGlsYXRpb25JbmZvLnNpemUoKSA9PSBjYWxsTGlua0luZm9JbmRleCk7CisgICAg
Q2FsbExpbmtJbmZvKiBpbmZvID0gbV9jb2RlQmxvY2stPmFkZENhbGxMaW5rSW5mbygpOworICAg
IGluZm8tPmNhbGxUeXBlID0gQ2FsbExpbmtJbmZvOjpjYWxsVHlwZUZvcihvcGNvZGVJRCk7Cisg
ICAgaW5mby0+Y29kZU9yaWdpbiA9IENvZGVPcmlnaW4obV9ieXRlY29kZU9mZnNldCk7CisgICAg
aW5mby0+Y2FsbGVlR1BSID0gcmVnVDA7CisgICAgbV9jYWxsQ29tcGlsYXRpb25JbmZvLmFwcGVu
ZChDYWxsQ29tcGlsYXRpb25JbmZvKCkpOworICAgIG1fY2FsbENvbXBpbGF0aW9uSW5mb1tjYWxs
TGlua0luZm9JbmRleF0uaG90UGF0aEJlZ2luID0gYWRkcmVzc09mTGlua2VkRnVuY3Rpb25DaGVj
azsKKyAgICBtX2NhbGxDb21waWxhdGlvbkluZm9bY2FsbExpbmtJbmZvSW5kZXhdLmNhbGxMaW5r
SW5mbyA9IGluZm87CiAKICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIE9CSkVDVF9PRkZTRVRP
RihKU0Z1bmN0aW9uLCBtX3Njb3BlKSksIHJlZ1QyKTsKICAgICBzdG9yZTY0KHJlZ1QyLCBBZGRy
ZXNzKE1hY3JvQXNzZW1ibGVyOjpzdGFja1BvaW50ZXJSZWdpc3RlciwgSlNTdGFjazo6U2NvcGVD
aGFpbiAqIHNpemVvZihSZWdpc3RlcikgLSBzaXplb2YoQ2FsbGVyRnJhbWVBbmRQQykpKTsKIAot
ICAgIG1fY2FsbFN0cnVjdHVyZVN0dWJDb21waWxhdGlvbkluZm9bY2FsbExpbmtJbmZvSW5kZXhd
LmhvdFBhdGhPdGhlciA9IGVtaXROYWtlZENhbGwoKTsKKyAgICBtX2NhbGxDb21waWxhdGlvbklu
Zm9bY2FsbExpbmtJbmZvSW5kZXhdLmhvdFBhdGhPdGhlciA9IGVtaXROYWtlZENhbGwoKTsKIAog
ICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoc3RhY2tQb2ludGVyT2Zmc2V0Rm9yKG1fY29kZUJsb2Nr
KSAqIHNpemVvZihSZWdpc3RlcikpLCBjYWxsRnJhbWVSZWdpc3Rlciwgc3RhY2tQb2ludGVyUmVn
aXN0ZXIpOwogICAgIGNoZWNrU3RhY2tQb2ludGVyQWxpZ25tZW50KCk7CkBAIC0yNTEsNyArMjU0
LDggQEAgdm9pZCBKSVQ6OmNvbXBpbGVPcENhbGxTbG93Q2FzZShPcGNvZGVJRAogICAgICAgICBv
cGNvZGVJRCA9PSBvcF9jb25zdHJ1Y3QgPyBDb2RlRm9yQ29uc3RydWN0IDogQ29kZUZvckNhbGws
CiAgICAgICAgIFJlZ2lzdGVyUHJlc2VydmF0aW9uTm90UmVxdWlyZWQpOwogICAgIAotICAgIG1f
Y2FsbFN0cnVjdHVyZVN0dWJDb21waWxhdGlvbkluZm9bY2FsbExpbmtJbmZvSW5kZXhdLmNhbGxS
ZXR1cm5Mb2NhdGlvbiA9IGVtaXROYWtlZENhbGwobV92bS0+Z2V0Q1RJU3R1YihnZW5lcmF0b3Ip
LmNvZGUoKSk7CisgICAgbW92ZShUcnVzdGVkSW1tUHRyKG1fY2FsbENvbXBpbGF0aW9uSW5mb1tj
YWxsTGlua0luZm9JbmRleF0uY2FsbExpbmtJbmZvKSwgcmVnVDIpOworICAgIG1fY2FsbENvbXBp
bGF0aW9uSW5mb1tjYWxsTGlua0luZm9JbmRleF0uY2FsbFJldHVybkxvY2F0aW9uID0gZW1pdE5h
a2VkQ2FsbChtX3ZtLT5nZXRDVElTdHViKGdlbmVyYXRvcikuY29kZSgpKTsKIAogICAgIGFkZFB0
cihUcnVzdGVkSW1tMzIoc3RhY2tQb2ludGVyT2Zmc2V0Rm9yKG1fY29kZUJsb2NrKSAqIHNpemVv
ZihSZWdpc3RlcikpLCBjYWxsRnJhbWVSZWdpc3Rlciwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOwog
ICAgIGNoZWNrU3RhY2tQb2ludGVyQWxpZ25tZW50KCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVE9wZXJhdGlvbnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5jcHAJKHJldmlzaW9uIDE2NjEwOSkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTY3NCw3ICs2NzQsOCBAQCBzdGF0aWMgdm9pZCogaGFuZGxlSG9zdENhbGwoRXhlY1N0YXRlKiBl
CiB9CiAKIGlubGluZSBjaGFyKiBsaW5rRm9yKAotICAgIEV4ZWNTdGF0ZSogZXhlY0NhbGxlZSwg
Q29kZVNwZWNpYWxpemF0aW9uS2luZCBraW5kLCBSZWdpc3RlclByZXNlcnZhdGlvbk1vZGUgcmVn
aXN0ZXJzKQorICAgIEV4ZWNTdGF0ZSogZXhlY0NhbGxlZSwgQ2FsbExpbmtJbmZvKiBjYWxsTGlu
a0luZm8sIENvZGVTcGVjaWFsaXphdGlvbktpbmQga2luZCwKKyAgICBSZWdpc3RlclByZXNlcnZh
dGlvbk1vZGUgcmVnaXN0ZXJzKQogewogICAgIEV4ZWNTdGF0ZSogZXhlYyA9IGV4ZWNDYWxsZWUt
PmNhbGxlckZyYW1lKCk7CiAgICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7CkBAIC02OTIsNyArNjkz
LDYgQEAgaW5saW5lIGNoYXIqIGxpbmtGb3IoCiAKICAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHIg
Y29kZVB0cjsKICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IDA7Ci0gICAgQ2FsbExpbmtJbmZv
JiBjYWxsTGlua0luZm8gPSBleGVjLT5jb2RlQmxvY2soKS0+Z2V0Q2FsbExpbmtJbmZvKGV4ZWND
YWxsZWUtPnJldHVyblBDKCkpOwogICAgIGlmIChleGVjdXRhYmxlLT5pc0hvc3RGdW5jdGlvbigp
KQogICAgICAgICBjb2RlUHRyID0gZXhlY3V0YWJsZS0+ZW50cnlwb2ludEZvcigqdm0sIGtpbmQs
IE11c3RDaGVja0FyaXR5LCByZWdpc3RlcnMpOwogICAgIGVsc2UgewpAQCAtNzA1LDM3ICs3MDUs
MzcgQEAgaW5saW5lIGNoYXIqIGxpbmtGb3IoCiAgICAgICAgIH0KICAgICAgICAgY29kZUJsb2Nr
ID0gZnVuY3Rpb25FeGVjdXRhYmxlLT5jb2RlQmxvY2tGb3Ioa2luZCk7CiAgICAgICAgIEFyaXR5
Q2hlY2tNb2RlIGFyaXR5OwotICAgICAgICBpZiAoZXhlY0NhbGxlZS0+YXJndW1lbnRDb3VudElu
Y2x1ZGluZ1RoaXMoKSA8IHN0YXRpY19jYXN0PHNpemVfdD4oY29kZUJsb2NrLT5udW1QYXJhbWV0
ZXJzKCkpIHx8IGNhbGxMaW5rSW5mby5jYWxsVHlwZSA9PSBDYWxsTGlua0luZm86OkNhbGxWYXJh
cmdzKQorICAgICAgICBpZiAoZXhlY0NhbGxlZS0+YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMo
KSA8IHN0YXRpY19jYXN0PHNpemVfdD4oY29kZUJsb2NrLT5udW1QYXJhbWV0ZXJzKCkpIHx8IGNh
bGxMaW5rSW5mby0+Y2FsbFR5cGUgPT0gQ2FsbExpbmtJbmZvOjpDYWxsVmFyYXJncykKICAgICAg
ICAgICAgIGFyaXR5ID0gTXVzdENoZWNrQXJpdHk7CiAgICAgICAgIGVsc2UKICAgICAgICAgICAg
IGFyaXR5ID0gQXJpdHlDaGVja05vdFJlcXVpcmVkOwogICAgICAgICBjb2RlUHRyID0gZnVuY3Rp
b25FeGVjdXRhYmxlLT5lbnRyeXBvaW50Rm9yKCp2bSwga2luZCwgYXJpdHksIHJlZ2lzdGVycyk7
CiAgICAgfQotICAgIGlmICghY2FsbExpbmtJbmZvLnNlZW5PbmNlKCkpCi0gICAgICAgIGNhbGxM
aW5rSW5mby5zZXRTZWVuKCk7CisgICAgaWYgKCFjYWxsTGlua0luZm8tPnNlZW5PbmNlKCkpCisg
ICAgICAgIGNhbGxMaW5rSW5mby0+c2V0U2VlbigpOwogICAgIGVsc2UKLSAgICAgICAgbGlua0Zv
cihleGVjQ2FsbGVlLCBjYWxsTGlua0luZm8sIGNvZGVCbG9jaywgY2FsbGVlLCBjb2RlUHRyLCBr
aW5kLCByZWdpc3RlcnMpOworICAgICAgICBsaW5rRm9yKGV4ZWNDYWxsZWUsICpjYWxsTGlua0lu
Zm8sIGNvZGVCbG9jaywgY2FsbGVlLCBjb2RlUHRyLCBraW5kLCByZWdpc3RlcnMpOwogICAgIHJl
dHVybiByZWludGVycHJldF9jYXN0PGNoYXIqPihjb2RlUHRyLmV4ZWN1dGFibGVBZGRyZXNzKCkp
OwogfQogCi1jaGFyKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkxpbmtDYWxsKEV4ZWNTdGF0ZSog
ZXhlY0NhbGxlZSkKK2NoYXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uTGlua0NhbGwoRXhlY1N0
YXRlKiBleGVjQ2FsbGVlLCBDYWxsTGlua0luZm8qIGNhbGxMaW5rSW5mbykKIHsKLSAgICByZXR1
cm4gbGlua0ZvcihleGVjQ2FsbGVlLCBDb2RlRm9yQ2FsbCwgUmVnaXN0ZXJQcmVzZXJ2YXRpb25O
b3RSZXF1aXJlZCk7CisgICAgcmV0dXJuIGxpbmtGb3IoZXhlY0NhbGxlZSwgY2FsbExpbmtJbmZv
LCBDb2RlRm9yQ2FsbCwgUmVnaXN0ZXJQcmVzZXJ2YXRpb25Ob3RSZXF1aXJlZCk7CiB9CiAKLWNo
YXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uTGlua0NvbnN0cnVjdChFeGVjU3RhdGUqIGV4ZWND
YWxsZWUpCitjaGFyKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkxpbmtDb25zdHJ1Y3QoRXhlY1N0
YXRlKiBleGVjQ2FsbGVlLCBDYWxsTGlua0luZm8qIGNhbGxMaW5rSW5mbykKIHsKLSAgICByZXR1
cm4gbGlua0ZvcihleGVjQ2FsbGVlLCBDb2RlRm9yQ29uc3RydWN0LCBSZWdpc3RlclByZXNlcnZh
dGlvbk5vdFJlcXVpcmVkKTsKKyAgICByZXR1cm4gbGlua0ZvcihleGVjQ2FsbGVlLCBjYWxsTGlu
a0luZm8sIENvZGVGb3JDb25zdHJ1Y3QsIFJlZ2lzdGVyUHJlc2VydmF0aW9uTm90UmVxdWlyZWQp
OwogfQogCi1jaGFyKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkxpbmtDYWxsVGhhdFByZXNlcnZl
c1JlZ3MoRXhlY1N0YXRlKiBleGVjQ2FsbGVlKQorY2hhciogSklUX09QRVJBVElPTiBvcGVyYXRp
b25MaW5rQ2FsbFRoYXRQcmVzZXJ2ZXNSZWdzKEV4ZWNTdGF0ZSogZXhlY0NhbGxlZSwgQ2FsbExp
bmtJbmZvKiBjYWxsTGlua0luZm8pCiB7Ci0gICAgcmV0dXJuIGxpbmtGb3IoZXhlY0NhbGxlZSwg
Q29kZUZvckNhbGwsIE11c3RQcmVzZXJ2ZVJlZ2lzdGVycyk7CisgICAgcmV0dXJuIGxpbmtGb3Io
ZXhlY0NhbGxlZSwgY2FsbExpbmtJbmZvLCBDb2RlRm9yQ2FsbCwgTXVzdFByZXNlcnZlUmVnaXN0
ZXJzKTsKIH0KIAotY2hhciogSklUX09QRVJBVElPTiBvcGVyYXRpb25MaW5rQ29uc3RydWN0VGhh
dFByZXNlcnZlc1JlZ3MoRXhlY1N0YXRlKiBleGVjQ2FsbGVlKQorY2hhciogSklUX09QRVJBVElP
TiBvcGVyYXRpb25MaW5rQ29uc3RydWN0VGhhdFByZXNlcnZlc1JlZ3MoRXhlY1N0YXRlKiBleGVj
Q2FsbGVlLCBDYWxsTGlua0luZm8qIGNhbGxMaW5rSW5mbykKIHsKLSAgICByZXR1cm4gbGlua0Zv
cihleGVjQ2FsbGVlLCBDb2RlRm9yQ29uc3RydWN0LCBNdXN0UHJlc2VydmVSZWdpc3RlcnMpOwor
ICAgIHJldHVybiBsaW5rRm9yKGV4ZWNDYWxsZWUsIGNhbGxMaW5rSW5mbywgQ29kZUZvckNvbnN0
cnVjdCwgTXVzdFByZXNlcnZlUmVnaXN0ZXJzKTsKIH0KIAogaW5saW5lIGNoYXIqIHZpcnR1YWxG
b3JXaXRoRnVuY3Rpb24oCkBAIC04MTMsNDYgKzgxMyw0NCBAQCBzdGF0aWMgYm9vbCBhdHRlbXB0
VG9PcHRpbWl6ZUNsb3N1cmVDYWxsCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLWNoYXIqIEpJVF9P
UEVSQVRJT04gb3BlcmF0aW9uTGlua0Nsb3N1cmVDYWxsKEV4ZWNTdGF0ZSogZXhlY0NhbGxlZSkK
K2NoYXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uTGlua0Nsb3N1cmVDYWxsKEV4ZWNTdGF0ZSog
ZXhlY0NhbGxlZSwgQ2FsbExpbmtJbmZvKiBjYWxsTGlua0luZm8pCiB7CiAgICAgSlNDZWxsKiBj
YWxsZWVBc0Z1bmN0aW9uQ2VsbDsKICAgICBjaGFyKiByZXN1bHQgPSB2aXJ0dWFsRm9yV2l0aEZ1
bmN0aW9uKGV4ZWNDYWxsZWUsIENvZGVGb3JDYWxsLCBSZWdpc3RlclByZXNlcnZhdGlvbk5vdFJl
cXVpcmVkLCBjYWxsZWVBc0Z1bmN0aW9uQ2VsbCk7Ci0gICAgQ2FsbExpbmtJbmZvJiBjYWxsTGlu
a0luZm8gPSBleGVjQ2FsbGVlLT5jYWxsZXJGcmFtZSgpLT5jb2RlQmxvY2soKS0+Z2V0Q2FsbExp
bmtJbmZvKGV4ZWNDYWxsZWUtPnJldHVyblBDKCkpOwogCi0gICAgaWYgKCFhdHRlbXB0VG9PcHRp
bWl6ZUNsb3N1cmVDYWxsKGV4ZWNDYWxsZWUsIFJlZ2lzdGVyUHJlc2VydmF0aW9uTm90UmVxdWly
ZWQsIGNhbGxlZUFzRnVuY3Rpb25DZWxsLCBjYWxsTGlua0luZm8pKQotICAgICAgICBsaW5rU2xv
d0ZvcihleGVjQ2FsbGVlLCBjYWxsTGlua0luZm8sIENvZGVGb3JDYWxsLCBSZWdpc3RlclByZXNl
cnZhdGlvbk5vdFJlcXVpcmVkKTsKKyAgICBpZiAoIWF0dGVtcHRUb09wdGltaXplQ2xvc3VyZUNh
bGwoZXhlY0NhbGxlZSwgUmVnaXN0ZXJQcmVzZXJ2YXRpb25Ob3RSZXF1aXJlZCwgY2FsbGVlQXNG
dW5jdGlvbkNlbGwsICpjYWxsTGlua0luZm8pKQorICAgICAgICBsaW5rU2xvd0ZvcihleGVjQ2Fs
bGVlLCAqY2FsbExpbmtJbmZvLCBDb2RlRm9yQ2FsbCwgUmVnaXN0ZXJQcmVzZXJ2YXRpb25Ob3RS
ZXF1aXJlZCk7CiAgICAgCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotY2hhciogSklUX09QRVJB
VElPTiBvcGVyYXRpb25WaXJ0dWFsQ2FsbChFeGVjU3RhdGUqIGV4ZWNDYWxsZWUpCitjaGFyKiBK
SVRfT1BFUkFUSU9OIG9wZXJhdGlvblZpcnR1YWxDYWxsKEV4ZWNTdGF0ZSogZXhlY0NhbGxlZSwg
Q2FsbExpbmtJbmZvKikKIHsgICAgCiAgICAgcmV0dXJuIHZpcnR1YWxGb3IoZXhlY0NhbGxlZSwg
Q29kZUZvckNhbGwsIFJlZ2lzdGVyUHJlc2VydmF0aW9uTm90UmVxdWlyZWQpOwogfQogCi1jaGFy
KiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblZpcnR1YWxDb25zdHJ1Y3QoRXhlY1N0YXRlKiBleGVj
Q2FsbGVlKQorY2hhciogSklUX09QRVJBVElPTiBvcGVyYXRpb25WaXJ0dWFsQ29uc3RydWN0KEV4
ZWNTdGF0ZSogZXhlY0NhbGxlZSwgQ2FsbExpbmtJbmZvKikKIHsKICAgICByZXR1cm4gdmlydHVh
bEZvcihleGVjQ2FsbGVlLCBDb2RlRm9yQ29uc3RydWN0LCBSZWdpc3RlclByZXNlcnZhdGlvbk5v
dFJlcXVpcmVkKTsKIH0KIAotY2hhciogSklUX09QRVJBVElPTiBvcGVyYXRpb25MaW5rQ2xvc3Vy
ZUNhbGxUaGF0UHJlc2VydmVzUmVncyhFeGVjU3RhdGUqIGV4ZWNDYWxsZWUpCitjaGFyKiBKSVRf
T1BFUkFUSU9OIG9wZXJhdGlvbkxpbmtDbG9zdXJlQ2FsbFRoYXRQcmVzZXJ2ZXNSZWdzKEV4ZWNT
dGF0ZSogZXhlY0NhbGxlZSwgQ2FsbExpbmtJbmZvKiBjYWxsTGlua0luZm8pCiB7CiAgICAgSlND
ZWxsKiBjYWxsZWVBc0Z1bmN0aW9uQ2VsbDsKICAgICBjaGFyKiByZXN1bHQgPSB2aXJ0dWFsRm9y
V2l0aEZ1bmN0aW9uKGV4ZWNDYWxsZWUsIENvZGVGb3JDYWxsLCBNdXN0UHJlc2VydmVSZWdpc3Rl
cnMsIGNhbGxlZUFzRnVuY3Rpb25DZWxsKTsKLSAgICBDYWxsTGlua0luZm8mIGNhbGxMaW5rSW5m
byA9IGV4ZWNDYWxsZWUtPmNhbGxlckZyYW1lKCktPmNvZGVCbG9jaygpLT5nZXRDYWxsTGlua0lu
Zm8oZXhlY0NhbGxlZS0+cmV0dXJuUEMoKSk7CiAKLSAgICBpZiAoIWF0dGVtcHRUb09wdGltaXpl
Q2xvc3VyZUNhbGwoZXhlY0NhbGxlZSwgTXVzdFByZXNlcnZlUmVnaXN0ZXJzLCBjYWxsZWVBc0Z1
bmN0aW9uQ2VsbCwgY2FsbExpbmtJbmZvKSkKLSAgICAgICAgbGlua1Nsb3dGb3IoZXhlY0NhbGxl
ZSwgY2FsbExpbmtJbmZvLCBDb2RlRm9yQ2FsbCwgTXVzdFByZXNlcnZlUmVnaXN0ZXJzKTsKKyAg
ICBpZiAoIWF0dGVtcHRUb09wdGltaXplQ2xvc3VyZUNhbGwoZXhlY0NhbGxlZSwgTXVzdFByZXNl
cnZlUmVnaXN0ZXJzLCBjYWxsZWVBc0Z1bmN0aW9uQ2VsbCwgKmNhbGxMaW5rSW5mbykpCisgICAg
ICAgIGxpbmtTbG93Rm9yKGV4ZWNDYWxsZWUsICpjYWxsTGlua0luZm8sIENvZGVGb3JDYWxsLCBN
dXN0UHJlc2VydmVSZWdpc3RlcnMpOwogICAgIAogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLWNo
YXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uVmlydHVhbENhbGxUaGF0UHJlc2VydmVzUmVncyhF
eGVjU3RhdGUqIGV4ZWNDYWxsZWUpCitjaGFyKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblZpcnR1
YWxDYWxsVGhhdFByZXNlcnZlc1JlZ3MoRXhlY1N0YXRlKiBleGVjQ2FsbGVlLCBDYWxsTGlua0lu
Zm8qKQogeyAgICAKICAgICByZXR1cm4gdmlydHVhbEZvcihleGVjQ2FsbGVlLCBDb2RlRm9yQ2Fs
bCwgTXVzdFByZXNlcnZlUmVnaXN0ZXJzKTsKIH0KIAotY2hhciogSklUX09QRVJBVElPTiBvcGVy
YXRpb25WaXJ0dWFsQ29uc3RydWN0VGhhdFByZXNlcnZlc1JlZ3MoRXhlY1N0YXRlKiBleGVjQ2Fs
bGVlKQorY2hhciogSklUX09QRVJBVElPTiBvcGVyYXRpb25WaXJ0dWFsQ29uc3RydWN0VGhhdFBy
ZXNlcnZlc1JlZ3MoRXhlY1N0YXRlKiBleGVjQ2FsbGVlLCBDYWxsTGlua0luZm8qKQogewogICAg
IHJldHVybiB2aXJ0dWFsRm9yKGV4ZWNDYWxsZWUsIENvZGVGb3JDb25zdHJ1Y3QsIE11c3RQcmVz
ZXJ2ZVJlZ2lzdGVycyk7CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9w
ZXJhdGlvbnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9w
ZXJhdGlvbnMuaAkocmV2aXNpb24gMTY2MTA5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9KSVRPcGVyYXRpb25zLmgJKHdvcmtpbmcgY29weSkKQEAgLTYwLDYgKzYwLDcgQEAgZXh0ZXJu
ICJDIiB7CiAgICAgQWFwOiBBcnJheUFsbG9jYXRpb25Qcm9maWxlKgogICAgIEM6IEpTQ2VsbCoK
ICAgICBDYjogQ29kZUJsb2NrKgorICAgIENsaTogQ2FsbExpbmtJbmZvKgogICAgIEQ6IGRvdWJs
ZQogICAgIEU6IEV4ZWNTdGF0ZSoKICAgICBGOiBDYWxsRnJhbWUqCkBAIC0xNjgsNiArMTY5LDcg
QEAgdHlwZWRlZiB2b2lkIEpJVF9PUEVSQVRJT04gKCpWX0pJVE9wZXJhdAogdHlwZWRlZiB2b2lk
IEpJVF9PUEVSQVRJT04gKCpWX0pJVE9wZXJhdGlvbl9FVm0pKEV4ZWNTdGF0ZSosIFZNKik7CiB0
eXBlZGVmIGNoYXIqIEpJVF9PUEVSQVRJT04gKCpQX0pJVE9wZXJhdGlvbl9FKShFeGVjU3RhdGUq
KTsKIHR5cGVkZWYgY2hhciogSklUX09QRVJBVElPTiAoKlBfSklUT3BlcmF0aW9uX0VDKShFeGVj
U3RhdGUqLCBKU0NlbGwqKTsKK3R5cGVkZWYgY2hhciogSklUX09QRVJBVElPTiAoKlBfSklUT3Bl
cmF0aW9uX0VDbGkpKEV4ZWNTdGF0ZSosIENhbGxMaW5rSW5mbyopOwogdHlwZWRlZiBjaGFyKiBK
SVRfT1BFUkFUSU9OICgqUF9KSVRPcGVyYXRpb25fRUpTKShFeGVjU3RhdGUqLCBFbmNvZGVkSlNW
YWx1ZSwgc2l6ZV90KTsKIHR5cGVkZWYgY2hhciogSklUX09QRVJBVElPTiAoKlBfSklUT3BlcmF0
aW9uX0VPKShFeGVjU3RhdGUqLCBKU09iamVjdCopOwogdHlwZWRlZiBjaGFyKiBKSVRfT1BFUkFU
SU9OICgqUF9KSVRPcGVyYXRpb25fRU9TKShFeGVjU3RhdGUqLCBKU09iamVjdCosIHNpemVfdCk7
CkBAIC0yMTgsMTYgKzIyMCwxNiBAQCB2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uRGlyZWN0
UHV0QnlWCiB2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlWYWxHZW5lcmljKEV4ZWNT
dGF0ZSosIEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUpIFdU
Rl9JTlRFUk5BTDsKIHZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25EaXJlY3RQdXRCeVZhbEdl
bmVyaWMoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVk
SlNWYWx1ZSkgV1RGX0lOVEVSTkFMOwogRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVy
YXRpb25DYWxsRXZhbChFeGVjU3RhdGUqLCBFeGVjU3RhdGUqKSBXVEZfSU5URVJOQUw7Ci1jaGFy
KiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkxpbmtDYWxsKEV4ZWNTdGF0ZSopIFdURl9JTlRFUk5B
TDsKLWNoYXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uTGlua0Nsb3N1cmVDYWxsKEV4ZWNTdGF0
ZSopIFdURl9JTlRFUk5BTDsKLWNoYXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uVmlydHVhbENh
bGwoRXhlY1N0YXRlKikgV1RGX0lOVEVSTkFMOwotY2hhciogSklUX09QRVJBVElPTiBvcGVyYXRp
b25WaXJ0dWFsQ29uc3RydWN0KEV4ZWNTdGF0ZSopIFdURl9JTlRFUk5BTDsKLWNoYXIqIEpJVF9P
UEVSQVRJT04gb3BlcmF0aW9uTGlua0NvbnN0cnVjdChFeGVjU3RhdGUqKSBXVEZfSU5URVJOQUw7
Ci1jaGFyKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkxpbmtDYWxsVGhhdFByZXNlcnZlc1JlZ3Mo
RXhlY1N0YXRlKikgV1RGX0lOVEVSTkFMOwotY2hhciogSklUX09QRVJBVElPTiBvcGVyYXRpb25M
aW5rQ2xvc3VyZUNhbGxUaGF0UHJlc2VydmVzUmVncyhFeGVjU3RhdGUqKSBXVEZfSU5URVJOQUw7
Ci1jaGFyKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblZpcnR1YWxDYWxsVGhhdFByZXNlcnZlc1Jl
Z3MoRXhlY1N0YXRlKikgV1RGX0lOVEVSTkFMOwotY2hhciogSklUX09QRVJBVElPTiBvcGVyYXRp
b25WaXJ0dWFsQ29uc3RydWN0VGhhdFByZXNlcnZlc1JlZ3MoRXhlY1N0YXRlKikgV1RGX0lOVEVS
TkFMOwotY2hhciogSklUX09QRVJBVElPTiBvcGVyYXRpb25MaW5rQ29uc3RydWN0VGhhdFByZXNl
cnZlc1JlZ3MoRXhlY1N0YXRlKikgV1RGX0lOVEVSTkFMOworY2hhciogSklUX09QRVJBVElPTiBv
cGVyYXRpb25MaW5rQ2FsbChFeGVjU3RhdGUqLCBDYWxsTGlua0luZm8qKSBXVEZfSU5URVJOQUw7
CitjaGFyKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkxpbmtDbG9zdXJlQ2FsbChFeGVjU3RhdGUq
LCBDYWxsTGlua0luZm8qKSBXVEZfSU5URVJOQUw7CitjaGFyKiBKSVRfT1BFUkFUSU9OIG9wZXJh
dGlvblZpcnR1YWxDYWxsKEV4ZWNTdGF0ZSosIENhbGxMaW5rSW5mbyopIFdURl9JTlRFUk5BTDsK
K2NoYXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uVmlydHVhbENvbnN0cnVjdChFeGVjU3RhdGUq
LCBDYWxsTGlua0luZm8qKSBXVEZfSU5URVJOQUw7CitjaGFyKiBKSVRfT1BFUkFUSU9OIG9wZXJh
dGlvbkxpbmtDb25zdHJ1Y3QoRXhlY1N0YXRlKiwgQ2FsbExpbmtJbmZvKikgV1RGX0lOVEVSTkFM
OworY2hhciogSklUX09QRVJBVElPTiBvcGVyYXRpb25MaW5rQ2FsbFRoYXRQcmVzZXJ2ZXNSZWdz
KEV4ZWNTdGF0ZSosIENhbGxMaW5rSW5mbyopIFdURl9JTlRFUk5BTDsKK2NoYXIqIEpJVF9PUEVS
QVRJT04gb3BlcmF0aW9uTGlua0Nsb3N1cmVDYWxsVGhhdFByZXNlcnZlc1JlZ3MoRXhlY1N0YXRl
KiwgQ2FsbExpbmtJbmZvKikgV1RGX0lOVEVSTkFMOworY2hhciogSklUX09QRVJBVElPTiBvcGVy
YXRpb25WaXJ0dWFsQ2FsbFRoYXRQcmVzZXJ2ZXNSZWdzKEV4ZWNTdGF0ZSosIENhbGxMaW5rSW5m
byopIFdURl9JTlRFUk5BTDsKK2NoYXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uVmlydHVhbENv
bnN0cnVjdFRoYXRQcmVzZXJ2ZXNSZWdzKEV4ZWNTdGF0ZSosIENhbGxMaW5rSW5mbyopIFdURl9J
TlRFUk5BTDsKK2NoYXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uTGlua0NvbnN0cnVjdFRoYXRQ
cmVzZXJ2ZXNSZWdzKEV4ZWNTdGF0ZSosIENhbGxMaW5rSW5mbyopIFdURl9JTlRFUk5BTDsKIAog
c2l6ZV90IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uQ29tcGFyZUxlc3MoRXhlY1N0YXRlKiwgRW5j
b2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVlKSBXVEZfSU5URVJOQUw7CiBzaXplX3QgSklUX09Q
RVJBVElPTiBvcGVyYXRpb25Db21wYXJlTGVzc0VxKEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVl
LCBFbmNvZGVkSlNWYWx1ZSkgV1RGX0lOVEVSTkFMOwpAQCAtMjk3LDcgKzI5OSw3IEBAIHZvaWQg
SklUX09QRVJBVElPTiBvcGVyYXRpb25Jbml0R2xvYmFsQ28KIAogfSAvLyBleHRlcm4gIkMiCiAK
LWlubGluZSBQX0pJVE9wZXJhdGlvbl9FIG9wZXJhdGlvbkxpbmtGb3IoCitpbmxpbmUgUF9KSVRP
cGVyYXRpb25fRUNsaSBvcGVyYXRpb25MaW5rRm9yKAogICAgIENvZGVTcGVjaWFsaXphdGlvbktp
bmQga2luZCwgUmVnaXN0ZXJQcmVzZXJ2YXRpb25Nb2RlIHJlZ2lzdGVycykKIHsKICAgICBzd2l0
Y2ggKGtpbmQpIHsKQEAgLTMyMiw3ICszMjQsNyBAQCBpbmxpbmUgUF9KSVRPcGVyYXRpb25fRSBv
cGVyYXRpb25MaW5rRm9yCiAgICAgcmV0dXJuIDA7CiB9CiAKLWlubGluZSBQX0pJVE9wZXJhdGlv
bl9FIG9wZXJhdGlvblZpcnR1YWxGb3IoCitpbmxpbmUgUF9KSVRPcGVyYXRpb25fRUNsaSBvcGVy
YXRpb25WaXJ0dWFsRm9yKAogICAgIENvZGVTcGVjaWFsaXphdGlvbktpbmQga2luZCwgUmVnaXN0
ZXJQcmVzZXJ2YXRpb25Nb2RlIHJlZ2lzdGVycykKIHsKICAgICBzd2l0Y2ggKGtpbmQpIHsKQEAg
LTM0Nyw3ICszNDksNyBAQCBpbmxpbmUgUF9KSVRPcGVyYXRpb25fRSBvcGVyYXRpb25WaXJ0dWFs
CiAgICAgcmV0dXJuIDA7CiB9CiAKLWlubGluZSBQX0pJVE9wZXJhdGlvbl9FIG9wZXJhdGlvbkxp
bmtDbG9zdXJlQ2FsbEZvcihSZWdpc3RlclByZXNlcnZhdGlvbk1vZGUgcmVnaXN0ZXJzKQoraW5s
aW5lIFBfSklUT3BlcmF0aW9uX0VDbGkgb3BlcmF0aW9uTGlua0Nsb3N1cmVDYWxsRm9yKFJlZ2lz
dGVyUHJlc2VydmF0aW9uTW9kZSByZWdpc3RlcnMpCiB7CiAgICAgc3dpdGNoIChyZWdpc3RlcnMp
IHsKICAgICBjYXNlIFJlZ2lzdGVyUHJlc2VydmF0aW9uTm90UmVxdWlyZWQ6CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L1JlcGF0Y2guY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvUmVwYXRjaC5jcHAJKHJldmlzaW9uIDE2NjEwOSkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVwYXRjaC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE0NTIs
OSArMTQ1MiwxMCBAQCB2b2lkIGxpbmtDbG9zdXJlQ2FsbCgKICNpZiBVU0UoSlNWQUxVRTMyXzY0
KQogICAgIHN0dWJKaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihKU1ZhbHVlOjpD
ZWxsVGFnKSwgR1BSSW5mbzo6cmVnVDEpOwogI2VuZGlmCi0gICAgc3R1YkppdC5tb3ZlKENDYWxs
SGVscGVyczo6VHJ1c3RlZEltbVB0cihjYWxsTGlua0luZm8uY2FsbFJldHVybkxvY2F0aW9uLmV4
ZWN1dGFibGVBZGRyZXNzKCkpLCBHUFJJbmZvOjpyZWdUMik7CisgICAgc3R1YkppdC5tb3ZlKEND
YWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cigmY2FsbExpbmtJbmZvKSwgR1BSSW5mbzo6cmVnVDIp
OworICAgIHN0dWJKaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoY2FsbExpbmtJ
bmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5leGVjdXRhYmxlQWRkcmVzcygpKSwgR1BSSW5mbzo6cmVn
VDQpOwogICAgIAotICAgIHN0dWJKaXQucmVzdG9yZVJldHVybkFkZHJlc3NCZWZvcmVSZXR1cm4o
R1BSSW5mbzo6cmVnVDIpOworICAgIHN0dWJKaXQucmVzdG9yZVJldHVybkFkZHJlc3NCZWZvcmVS
ZXR1cm4oR1BSSW5mbzo6cmVnVDQpOwogICAgIEFzc2VtYmx5SGVscGVyczo6SnVtcCBzbG93ID0g
c3R1YkppdC5qdW1wKCk7CiAgICAgCiAgICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcigqdm0sICZz
dHViSml0LCBjYWxsZXJDb2RlQmxvY2spOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9UaHVua0dlbmVyYXRvcnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvVGh1bmtHZW5lcmF0b3JzLmNwcAkocmV2aXNpb24gMTY2MTA5KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9UaHVua0dlbmVyYXRvcnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03
OSwxMyArNzksMTMgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIHRocm93RXhjZXB0aW9uRnJvbQog
fQogCiBzdGF0aWMgdm9pZCBzbG93UGF0aEZvcigKLSAgICBDQ2FsbEhlbHBlcnMmIGppdCwgVk0q
IHZtLCBQX0pJVE9wZXJhdGlvbl9FIHNsb3dQYXRoRnVuY3Rpb24pCisgICAgQ0NhbGxIZWxwZXJz
JiBqaXQsIFZNKiB2bSwgUF9KSVRPcGVyYXRpb25fRUNsaSBzbG93UGF0aEZ1bmN0aW9uKQogewog
ICAgIGppdC5lbWl0RnVuY3Rpb25Qcm9sb2d1ZSgpOwogICAgIGppdC5zdG9yZVB0cihHUFJJbmZv
OjpjYWxsRnJhbWVSZWdpc3RlciwgJnZtLT50b3BDYWxsRnJhbWUpOwogICAgIGlmIChtYXhGcmFt
ZUV4dGVudEZvclNsb3dQYXRoQ2FsbCkKICAgICAgICAgaml0LmFkZFB0cihDQ2FsbEhlbHBlcnM6
OlRydXN0ZWRJbW0zMigtbWF4RnJhbWVFeHRlbnRGb3JTbG93UGF0aENhbGwpLCBDQ2FsbEhlbHBl
cnM6OnN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKLSAgICBqaXQuc2V0dXBBcmd1bWVudHNFeGVjU3Rh
dGUoKTsKKyAgICBqaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKEdQUkluZm86OnJlZ1Qy
KTsKICAgICBqaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoYml0d2lzZV9jYXN0
PHZvaWQqPihzbG93UGF0aEZ1bmN0aW9uKSksIEdQUkluZm86Om5vbkFyZ0dQUjApOwogICAgIGVt
aXRQb2ludGVyVmFsaWRhdGlvbihqaXQsIEdQUkluZm86Om5vbkFyZ0dQUjApOwogICAgIGppdC5j
YWxsKEdQUkluZm86Om5vbkFyZ0dQUjApOwpAQCAtMTc0LDM5ICsxNzQsNDUgQEAgc3RhdGljIE1h
Y3JvQXNzZW1ibGVyQ29kZVJlZiB2aXJ0dWFsRm9yVAogICAgIENDYWxsSGVscGVycyBqaXQodm0p
OwogICAgIAogICAgIENDYWxsSGVscGVyczo6SnVtcExpc3Qgc2xvd0Nhc2U7CisgICAgCisgICAg
Ly8gVGhpcyBpcyBhIHNsb3cgcGF0aCBleGVjdXRpb24sIGFuZCByZWdUMiBjb250YWlucyB0aGUg
Q2FsbExpbmtJbmZvLiBDb3VudCB0aGUKKyAgICAvLyBzbG93IHBhdGggZXhlY3V0aW9uIGZvciB0
aGUgcHJvZmlsZXIuCisgICAgaml0LmFkZDMyKAorICAgICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0
ZWRJbW0zMigxKSwKKyAgICAgICAgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKEdQUkluZm86OnJlZ1Qy
LCBPQkpFQ1RfT0ZGU0VUT0YoQ2FsbExpbmtJbmZvLCBzbG93UGF0aENvdW50KSkpOwogCiAgICAg
Ly8gRklYTUU6IHdlIHNob3VsZCBoYXZlIGEgc3RvcnkgZm9yIGVsaW1pbmF0aW5nIHRoZXNlIGNo
ZWNrcy4gSW4gbWFueSBjYXNlcywKICAgICAvLyB0aGUgREZHIGtub3dzIHRoYXQgdGhlIHZhbHVl
IGlzIGRlZmluaXRlbHkgYSBjZWxsLCBvciBkZWZpbml0ZWx5IGEgZnVuY3Rpb24uCiAgICAgCiAj
aWYgVVNFKEpTVkFMVUU2NCkKLSAgICBqaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW02
NChUYWdNYXNrKSwgR1BSSW5mbzo6cmVnVDIpOworICAgIGppdC5tb3ZlKENDYWxsSGVscGVyczo6
VHJ1c3RlZEltbTY0KFRhZ01hc2spLCBHUFJJbmZvOjpyZWdUNCk7CiAgICAgCiAgICAgc2xvd0Nh
c2UuYXBwZW5kKAogICAgICAgICBqaXQuYnJhbmNoVGVzdDY0KAotICAgICAgICAgICAgQ0NhbGxI
ZWxwZXJzOjpOb25aZXJvLCBHUFJJbmZvOjpyZWdUMCwgR1BSSW5mbzo6cmVnVDIpKTsKKyAgICAg
ICAgICAgIENDYWxsSGVscGVyczo6Tm9uWmVybywgR1BSSW5mbzo6cmVnVDAsIEdQUkluZm86OnJl
Z1Q0KSk7CiAjZWxzZQogICAgIHNsb3dDYXNlLmFwcGVuZCgKICAgICAgICAgaml0LmJyYW5jaDMy
KAogICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpOb3RFcXVhbCwgR1BSSW5mbzo6cmVnVDEsCiAg
ICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihKU1ZhbHVlOjpDZWxsVGFnKSkp
OwogI2VuZGlmCi0gICAgQXNzZW1ibHlIZWxwZXJzOjplbWl0TG9hZFN0cnVjdHVyZShqaXQsIEdQ
UkluZm86OnJlZ1QwLCBHUFJJbmZvOjpyZWdUMiwgR1BSSW5mbzo6cmVnVDEpOworICAgIEFzc2Vt
Ymx5SGVscGVyczo6ZW1pdExvYWRTdHJ1Y3R1cmUoaml0LCBHUFJJbmZvOjpyZWdUMCwgR1BSSW5m
bzo6cmVnVDQsIEdQUkluZm86OnJlZ1QxKTsKICAgICBzbG93Q2FzZS5hcHBlbmQoCiAgICAgICAg
IGppdC5icmFuY2hQdHIoCiAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6Ok5vdEVxdWFsLAotICAg
ICAgICAgICAgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKEdQUkluZm86OnJlZ1QyLCBTdHJ1Y3R1cmU6
OmNsYXNzSW5mb09mZnNldCgpKSwKKyAgICAgICAgICAgIENDYWxsSGVscGVyczo6QWRkcmVzcyhH
UFJJbmZvOjpyZWdUNCwgU3RydWN0dXJlOjpjbGFzc0luZm9PZmZzZXQoKSksCiAgICAgICAgICAg
ICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoSlNGdW5jdGlvbjo6aW5mbygpKSkpOwogICAg
IAogICAgIC8vIE5vdyB3ZSBrbm93IHdlIGhhdmUgYSBKU0Z1bmN0aW9uLgogICAgIAogICAgIGpp
dC5sb2FkUHRyKAogICAgICAgICBDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoR1BSSW5mbzo6cmVnVDAs
IEpTRnVuY3Rpb246Om9mZnNldE9mRXhlY3V0YWJsZSgpKSwKLSAgICAgICAgR1BSSW5mbzo6cmVn
VDIpOworICAgICAgICBHUFJJbmZvOjpyZWdUNCk7CiAgICAgaml0LmxvYWRQdHIoCiAgICAgICAg
IENDYWxsSGVscGVyczo6QWRkcmVzcygKLSAgICAgICAgICAgIEdQUkluZm86OnJlZ1QyLCBFeGVj
dXRhYmxlQmFzZTo6b2Zmc2V0T2ZKSVRDb2RlV2l0aEFyaXR5Q2hlY2tGb3Ioa2luZCwgcmVnaXN0
ZXJzKSksCi0gICAgICAgIEdQUkluZm86OnJlZ1QyKTsKLSAgICBzbG93Q2FzZS5hcHBlbmQoaml0
LmJyYW5jaFRlc3RQdHIoQ0NhbGxIZWxwZXJzOjpaZXJvLCBHUFJJbmZvOjpyZWdUMikpOworICAg
ICAgICAgICAgR1BSSW5mbzo6cmVnVDQsIEV4ZWN1dGFibGVCYXNlOjpvZmZzZXRPZkpJVENvZGVX
aXRoQXJpdHlDaGVja0ZvcihraW5kLCByZWdpc3RlcnMpKSwKKyAgICAgICAgR1BSSW5mbzo6cmVn
VDQpOworICAgIHNsb3dDYXNlLmFwcGVuZChqaXQuYnJhbmNoVGVzdFB0cihDQ2FsbEhlbHBlcnM6
Olplcm8sIEdQUkluZm86OnJlZ1Q0KSk7CiAgICAgCiAgICAgLy8gTm93IHdlIGtub3cgdGhhdCB3
ZSBoYXZlIGEgQ29kZUJsb2NrLCBhbmQgd2UncmUgY29tbWl0dGVkIHRvIG1ha2luZyBhIGZhc3QK
ICAgICAvLyBjYWxsLgpAQCAtMjIzLDggKzIyOSw4IEBAIHN0YXRpYyBNYWNyb0Fzc2VtYmxlckNv
ZGVSZWYgdmlydHVhbEZvclQKICNlbmRpZgogICAgIAogICAgIC8vIE1ha2UgYSB0YWlsIGNhbGwu
IFRoaXMgd2lsbCByZXR1cm4gYmFjayB0byBKSVQgY29kZS4KLSAgICBlbWl0UG9pbnRlclZhbGlk
YXRpb24oaml0LCBHUFJJbmZvOjpyZWdUMik7Ci0gICAgaml0Lmp1bXAoR1BSSW5mbzo6cmVnVDIp
OworICAgIGVtaXRQb2ludGVyVmFsaWRhdGlvbihqaXQsIEdQUkluZm86OnJlZ1Q0KTsKKyAgICBq
aXQuanVtcChHUFJJbmZvOjpyZWdUNCk7CiAKICAgICBzbG93Q2FzZS5saW5rKCZqaXQpOwogICAg
IAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>227576</attachid>
            <date>2014-03-22 15:45:56 -0700</date>
            <delta_ts>2014-03-22 20:06:05 -0700</delta_ts>
            <desc>starting to work on 64-bit x86</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>62775</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTY2MTI1KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDg2IEBA
CisyMDE0LTAzLTIyICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
Q2FsbCBsaW5raW5nIHNsb3cgcGF0aHMgc2hvdWxkIGJlIHBhc3NlZCBhIENhbGxMaW5rSW5mbyog
ZGlyZWN0bHkgc28gdGhhdCB5b3UgY2FuIGNyZWF0ZSBhIGNhbGwgSUMgd2l0aG91dCBhZGRpbmcg
aXQgdG8gYW55IENvZGVCbG9ja3MKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTEzMDY0NAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorICAgICAgICAKKyAgICAgICAgVGhpcyBpcyBjb25jZXB0dWFsbHkgYSByZWFsbHkgc2ltcGxl
IGNoYW5nZSBidXQgaXQgaW52b2x2ZXMgdGhlIGZvbGxvd2luZzoKKyAgICAgICAgCisgICAgICAg
IC0gVGhlIGlubGluZSBwYXJ0IG9mIHRoZSBjYWxsIElDIHN0dWZmcyBhIHBvaW50ZXIgdG8gdGhl
IENhbGxMaW5rSW5mbyBpbnRvIHJlZ1QyLgorICAgICAgICAKKyAgICAgICAgLSBDb2RlQmxvY2sg
dXNlcyBhIEJhZyBvZiBDYWxsTGlua0luZm9zIGluc3RlYWQgb2YgYSBWZWN0b3IuCisgICAgICAg
IAorICAgICAgICAtIFJlbW92ZSB0aGUgc2lnbmlmaWNhbmNlIG9mIGEgQ2FsbExpbmtJbmZvJ3Mg
aW5kZXguIFRoaXMgbWVhbnMgdGhhdCBERkc6OkpJVENvZGUgbm8KKyAgICAgICAgICBsb25nZXIg
aGFzIGEgdmVjdG9yIG9mIHNsb3cgcGF0aCBjb3VudHMgdGhhdCBzaGFkb3dzIHRoZSBDYWxsTGlu
a0luZm8gdmVjdG9yLgorICAgICAgICAKKyAgICAgICAgLSBNYWtlIENhbGxMaW5rSW5mbyBoYXZl
IGl0cyBvd24gc2xvd1BhdGhDb3VudCwgd2hpY2ggY291bnRzIGFjdHVhbCBzbG93IHBhdGggZXhl
Y3V0aW9ucworICAgICAgICAgIGFuZCBub3QgYWxsIHJlbGlua2luZy4KKworICAgICAgICAqIGJ5
dGVjb2RlL0NhbGxMaW5rSW5mby5oOgorICAgICAgICAoSlNDOjpnZXRDYWxsTGlua0luZm9Db2Rl
T3JpZ2luKToKKyAgICAgICAgKiBieXRlY29kZS9DYWxsTGlua1N0YXR1cy5jcHA6CisgICAgICAg
IChKU0M6OkNhbGxMaW5rU3RhdHVzOjpjb21wdXRlRm9yKToKKyAgICAgICAgKEpTQzo6Q2FsbExp
bmtTdGF0dXM6OmNvbXB1dGVERkdTdGF0dXNlcyk6CisgICAgICAgICogYnl0ZWNvZGUvQ2FsbExp
bmtTdGF0dXMuaDoKKyAgICAgICAgKiBieXRlY29kZS9Db2RlQmxvY2suY3BwOgorICAgICAgICAo
SlNDOjpDb2RlQmxvY2s6OnByaW50Q2FsbE9wKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpk
dW1wQnl0ZWNvZGUpOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmZpbmFsaXplVW5jb25kaXRp
b25hbGx5KToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpnZXRDYWxsTGlua0luZm9NYXApOgor
ICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmdldENhbGxMaW5rSW5mb0ZvckJ5dGVjb2RlSW5kZXgp
OgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmFkZENhbGxMaW5rSW5mbyk6CisgICAgICAgIChK
U0M6OkNvZGVCbG9jazo6dW5saW5rQ2FsbHMpOgorICAgICAgICAqIGJ5dGVjb2RlL0NvZGVCbG9j
ay5oOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OnN0dWJJbmZvQmVnaW4pOgorICAgICAgICAo
SlNDOjpDb2RlQmxvY2s6OnN0dWJJbmZvRW5kKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpj
YWxsTGlua0luZm9zQmVnaW4pOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmNhbGxMaW5rSW5m
b3NFbmQpOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmJ5VmFsSW5mbyk6CisgICAgICAgICog
ZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBh
cnNlcjo6aGFuZGxlQ2FsbCk6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6Oklu
bGluZVN0YWNrRW50cnk6OklubGluZVN0YWNrRW50cnkpOgorICAgICAgICAqIGRmZy9ERkdKSVRD
b2RlLmg6CisgICAgICAgICogZGZnL0RGR0pJVENvbXBpbGVyLmNwcDoKKyAgICAgICAgKEpTQzo6
REZHOjpKSVRDb21waWxlcjo6bGluayk6CisgICAgICAgICogZGZnL0RGR0pJVENvbXBpbGVyLmg6
CisgICAgICAgIChKU0M6OkRGRzo6SklUQ29tcGlsZXI6OmFkZEpTQ2FsbCk6CisgICAgICAgIChK
U0M6OkRGRzo6SklUQ29tcGlsZXI6OkpTQ2FsbFJlY29yZDo6SlNDYWxsUmVjb3JkKToKKyAgICAg
ICAgKiBkZmcvREZHT1NSRXhpdENvbXBpbGVyQ29tbW9uLmNwcDoKKyAgICAgICAgKEpTQzo6REZH
OjpyZWlmeUlubGluZWRDYWxsRnJhbWVzKToKKyAgICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVK
SVQuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlKToKKyAg
ICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVKSVQuaDoKKyAgICAgICAgKiBkZmcvREZHU3BlY3Vs
YXRpdmVKSVQ2NC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmVtaXRD
YWxsKToKKyAgICAgICAgKiBmdGwvRlRMQ29tcGlsZS5jcHA6CisgICAgICAgIChKU0M6OkZUTDo6
Zml4RnVuY3Rpb25CYXNlZE9uU3RhY2tNYXBzKToKKyAgICAgICAgKiBmdGwvRlRMSW5saW5lQ2Fj
aGVTaXplLmNwcDoKKyAgICAgICAgKEpTQzo6RlRMOjpzaXplT2ZDYWxsKToKKyAgICAgICAgKiBm
dGwvRlRMSlNDYWxsLmNwcDoKKyAgICAgICAgKEpTQzo6RlRMOjpKU0NhbGw6OkpTQ2FsbCk6Cisg
ICAgICAgIChKU0M6OkZUTDo6SlNDYWxsOjplbWl0KToKKyAgICAgICAgKEpTQzo6RlRMOjpKU0Nh
bGw6OmxpbmspOgorICAgICAgICAqIGZ0bC9GVExKU0NhbGwuaDoKKyAgICAgICAgKiBqaXQvSklU
LmNwcDoKKyAgICAgICAgKEpTQzo6SklUOjpwcml2YXRlQ29tcGlsZU1haW5QYXNzKToKKyAgICAg
ICAgKEpTQzo6SklUOjpwcml2YXRlQ29tcGlsZVNsb3dDYXNlcyk6CisgICAgICAgIChKU0M6OkpJ
VDo6cHJpdmF0ZUNvbXBpbGUpOgorICAgICAgICAqIGppdC9KSVQuaDoKKyAgICAgICAgKiBqaXQv
SklUQ2FsbC5jcHA6CisgICAgICAgIChKU0M6OkpJVDo6Y29tcGlsZU9wQ2FsbCk6CisgICAgICAg
IChKU0M6OkpJVDo6Y29tcGlsZU9wQ2FsbFNsb3dDYXNlKToKKyAgICAgICAgKiBqaXQvSklUT3Bl
cmF0aW9ucy5jcHA6CisgICAgICAgICogaml0L0pJVE9wZXJhdGlvbnMuaDoKKyAgICAgICAgKEpT
Qzo6b3BlcmF0aW9uTGlua0Zvcik6CisgICAgICAgIChKU0M6Om9wZXJhdGlvblZpcnR1YWxGb3Ip
OgorICAgICAgICAoSlNDOjpvcGVyYXRpb25MaW5rQ2xvc3VyZUNhbGxGb3IpOgorICAgICAgICAq
IGppdC9SZXBhdGNoLmNwcDoKKyAgICAgICAgKEpTQzo6bGlua0Nsb3N1cmVDYWxsKToKKyAgICAg
ICAgKiBqaXQvVGh1bmtHZW5lcmF0b3JzLmNwcDoKKyAgICAgICAgKEpTQzo6c2xvd1BhdGhGb3Ip
OgorICAgICAgICAoSlNDOjp2aXJ0dWFsRm9yVGh1bmtHZW5lcmF0b3IpOgorCiAyMDE0LTAzLTIy
ICBBbmRyZWFzIEtsaW5nICA8YWtsaW5nQGFwcGxlLmNvbT4KIAogICAgICAgICBGaXggZGVidWcg
YnVpbGQuCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ2FsbExpbmtJbmZv
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NhbGxMaW5r
SW5mby5oCShyZXZpc2lvbiAxNjYxMDkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvQ2FsbExpbmtJbmZvLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICog
Q29weXJpZ2h0IChDKSAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAxMiwgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAg
KgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTgzLDYgKzgzLDcgQEAgc3RydWN0IENh
bGxMaW5rSW5mbyA6IHB1YmxpYyBCYXNpY1Jhd1NlbgogICAgIGJvb2wgaGFzU2VlbkNsb3N1cmUg
OiAxOwogICAgIHVuc2lnbmVkIGNhbGxUeXBlIDogNTsgLy8gQ2FsbFR5cGUKICAgICB1bnNpZ25l
ZCBjYWxsZWVHUFIgOiA4OworICAgIHVuc2lnbmVkIHNsb3dQYXRoQ291bnQ7CiAgICAgQ29kZU9y
aWdpbiBjb2RlT3JpZ2luOwogCiAgICAgYm9vbCBpc0xpbmtlZCgpIHsgcmV0dXJuIHN0dWIgfHwg
Y2FsbGVlOyB9CkBAIC05OSwxNSArMTAwLDE3IEBAIHN0cnVjdCBDYWxsTGlua0luZm8gOiBwdWJs
aWMgQmFzaWNSYXdTZW4KICAgICB9CiB9OwogCi1pbmxpbmUgdm9pZCogZ2V0Q2FsbExpbmtJbmZv
UmV0dXJuTG9jYXRpb24oQ2FsbExpbmtJbmZvKiBjYWxsTGlua0luZm8pCitpbmxpbmUgQ29kZU9y
aWdpbiBnZXRDYWxsTGlua0luZm9Db2RlT3JpZ2luKENhbGxMaW5rSW5mbyYgY2FsbExpbmtJbmZv
KQogewotICAgIHJldHVybiBjYWxsTGlua0luZm8tPmNhbGxSZXR1cm5Mb2NhdGlvbi5leGVjdXRh
YmxlQWRkcmVzcygpOworICAgIHJldHVybiBjYWxsTGlua0luZm8uY29kZU9yaWdpbjsKIH0KIAot
aW5saW5lIHVuc2lnbmVkIGdldENhbGxMaW5rSW5mb0J5dGVjb2RlSW5kZXgoQ2FsbExpbmtJbmZv
KiBjYWxsTGlua0luZm8pCi17Ci0gICAgcmV0dXJuIGNhbGxMaW5rSW5mby0+Y29kZU9yaWdpbi5i
eXRlY29kZUluZGV4OwotfQordHlwZWRlZiBIYXNoTWFwPENvZGVPcmlnaW4sIENhbGxMaW5rSW5m
byosIENvZGVPcmlnaW5BcHByb3hpbWF0ZUhhc2g+IENhbGxMaW5rSW5mb01hcDsKKworI2Vsc2Ug
Ly8gRU5BQkxFKEpJVCkKKwordHlwZWRlZiBIYXNoTWFwPGludCwgdm9pZCo+IENhbGxMaW5rSW5m
b01hcDsKKwogI2VuZGlmIC8vIEVOQUJMRShKSVQpCiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NhbGxMaW5rU3RhdHVzLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ2FsbExpbmtTdGF0dXMu
Y3BwCShyZXZpc2lvbiAxNjYxMDkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
Q2FsbExpbmtTdGF0dXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTUsNyArMTE1LDggQEAgQ2Fs
bExpbmtTdGF0dXMgQ2FsbExpbmtTdGF0dXM6OmNvbXB1dGVGcgogI2VuZGlmCiB9CiAKLUNhbGxM
aW5rU3RhdHVzIENhbGxMaW5rU3RhdHVzOjpjb21wdXRlRm9yKENvZGVCbG9jayogcHJvZmlsZWRC
bG9jaywgdW5zaWduZWQgYnl0ZWNvZGVJbmRleCkKK0NhbGxMaW5rU3RhdHVzIENhbGxMaW5rU3Rh
dHVzOjpjb21wdXRlRm9yKAorICAgIENvZGVCbG9jayogcHJvZmlsZWRCbG9jaywgdW5zaWduZWQg
Ynl0ZWNvZGVJbmRleCwgY29uc3QgQ2FsbExpbmtJbmZvTWFwJiBtYXApCiB7CiAgICAgQ29uY3Vy
cmVudEpJVExvY2tlciBsb2NrZXIocHJvZmlsZWRCbG9jay0+bV9sb2NrKTsKICAgICAKQEAgLTEy
NywxNSArMTI4LDExIEBAIENhbGxMaW5rU3RhdHVzIENhbGxMaW5rU3RhdHVzOjpjb21wdXRlRm8K
ICAgICAgICAgfHwgcHJvZmlsZWRCbG9jay0+aGFzRXhpdFNpdGUobG9ja2VyLCBERkc6OkZyZXF1
ZW50RXhpdFNpdGUoYnl0ZWNvZGVJbmRleCwgQmFkRXhlY3V0YWJsZSkpKQogICAgICAgICByZXR1
cm4gdGFrZXNTbG93UGF0aCgpOwogICAgIAotICAgIGlmICghcHJvZmlsZWRCbG9jay0+aGFzQmFz
ZWxpbmVKSVRQcm9maWxpbmcoKSkKKyAgICBDYWxsTGlua0luZm8qIGNhbGxMaW5rSW5mbyA9IG1h
cC5nZXQoQ29kZU9yaWdpbihieXRlY29kZUluZGV4KSk7CisgICAgaWYgKCFjYWxsTGlua0luZm8p
CiAgICAgICAgIHJldHVybiBjb21wdXRlRnJvbUxMSW50KGxvY2tlciwgcHJvZmlsZWRCbG9jaywg
Ynl0ZWNvZGVJbmRleCk7CiAgICAgCi0gICAgaWYgKHByb2ZpbGVkQmxvY2stPmNvdWxkVGFrZVNs
b3dDYXNlKGJ5dGVjb2RlSW5kZXgpKQotICAgICAgICByZXR1cm4gdGFrZXNTbG93UGF0aCgpOwot
ICAgIAotICAgIENhbGxMaW5rSW5mbyYgY2FsbExpbmtJbmZvID0gcHJvZmlsZWRCbG9jay0+Z2V0
Q2FsbExpbmtJbmZvKGJ5dGVjb2RlSW5kZXgpOwotICAgIAotICAgIENhbGxMaW5rU3RhdHVzIHJl
c3VsdCA9IGNvbXB1dGVGb3IobG9ja2VyLCBjYWxsTGlua0luZm8pOworICAgIENhbGxMaW5rU3Rh
dHVzIHJlc3VsdCA9IGNvbXB1dGVGb3IobG9ja2VyLCAqY2FsbExpbmtJbmZvKTsKICAgICBpZiAo
IXJlc3VsdCkKICAgICAgICAgcmV0dXJuIGNvbXB1dGVGcm9tTExJbnQobG9ja2VyLCBwcm9maWxl
ZEJsb2NrLCBieXRlY29kZUluZGV4KTsKICAgICAKQEAgLTE1MSw2ICsxNDgsOSBAQCBDYWxsTGlu
a1N0YXR1cyBDYWxsTGlua1N0YXR1czo6Y29tcHV0ZUZvCiAjaWYgRU5BQkxFKEpJVCkKIENhbGxM
aW5rU3RhdHVzIENhbGxMaW5rU3RhdHVzOjpjb21wdXRlRm9yKGNvbnN0IENvbmN1cnJlbnRKSVRM
b2NrZXImLCBDYWxsTGlua0luZm8mIGNhbGxMaW5rSW5mbykKIHsKKyAgICBpZiAoY2FsbExpbmtJ
bmZvLnNsb3dQYXRoQ291bnQgPj0gT3B0aW9uczo6Y291bGRUYWtlU2xvd0Nhc2VNaW5pbXVtQ291
bnQoKSkKKyAgICAgICAgcmV0dXJuIHRha2VzU2xvd1BhdGgoKTsKKyAgICAKICAgICBpZiAoY2Fs
bExpbmtJbmZvLnN0dWIpCiAgICAgICAgIHJldHVybiBDYWxsTGlua1N0YXR1cyhjYWxsTGlua0lu
Zm8uc3R1Yi0+ZXhlY3V0YWJsZSgpLCBjYWxsTGlua0luZm8uc3R1Yi0+c3RydWN0dXJlKCkpOwog
ICAgIApAQCAtMTcxLDExICsxNzEsOCBAQCB2b2lkIENhbGxMaW5rU3RhdHVzOjpjb21wdXRlREZH
U3RhdHVzZXMoCiAjaWYgRU5BQkxFKERGR19KSVQpCiAgICAgUkVMRUFTRV9BU1NFUlQoZGZnQ29k
ZUJsb2NrLT5qaXRUeXBlKCkgPT0gSklUQ29kZTo6REZHSklUKTsKICAgICBDb2RlQmxvY2sqIGJh
c2VsaW5lQ29kZUJsb2NrID0gZGZnQ29kZUJsb2NrLT5hbHRlcm5hdGl2ZSgpOwotICAgIERGRzo6
SklUQ29kZSogaml0Q29kZSA9IGRmZ0NvZGVCbG9jay0+aml0Q29kZSgpLT5kZmcoKTsKLSAgICBS
RUxFQVNFX0FTU0VSVChkZmdDb2RlQmxvY2stPm51bWJlck9mQ2FsbExpbmtJbmZvcygpIDw9IGpp
dENvZGUtPnNsb3dQYXRoQ2FsbHMuc2l6ZSgpKTsKLSAgICAKLSAgICBmb3IgKHNpemVfdCBpID0g
ZGZnQ29kZUJsb2NrLT5udW1iZXJPZkNhbGxMaW5rSW5mb3MoKTsgaS0tOykgewotICAgICAgICBD
YWxsTGlua0luZm8mIGluZm8gPSBkZmdDb2RlQmxvY2stPmNhbGxMaW5rSW5mbyhpKTsKKyAgICBm
b3IgKEJhZzxDYWxsTGlua0luZm8+OjppdGVyYXRvciBpdGVyID0gZGZnQ29kZUJsb2NrLT5jYWxs
TGlua0luZm9zQmVnaW4oKTsgISFpdGVyOyArK2l0ZXIpIHsKKyAgICAgICAgQ2FsbExpbmtJbmZv
JiBpbmZvID0gKippdGVyOwogICAgICAgICBDb2RlT3JpZ2luIGNvZGVPcmlnaW4gPSBpbmZvLmNv
ZGVPcmlnaW47CiAgICAgICAgIAogICAgICAgICBib29sIHRha2VTbG93UGF0aDsKQEAgLTIwMiw3
ICsxOTksNyBAQCB2b2lkIENhbGxMaW5rU3RhdHVzOjpjb21wdXRlREZHU3RhdHVzZXMoCiAgICAg
ICAgIAogICAgICAgICB7CiAgICAgICAgICAgICBDb25jdXJyZW50SklUTG9ja2VyIGxvY2tlcihk
ZmdDb2RlQmxvY2stPm1fbG9jayk7Ci0gICAgICAgICAgICBpZiAodGFrZVNsb3dQYXRoIHx8IGpp
dENvZGUtPnNsb3dQYXRoQ2FsbHNbaV0gPj0gT3B0aW9uczo6Y291bGRUYWtlU2xvd0Nhc2VNaW5p
bXVtQ291bnQoKSkKKyAgICAgICAgICAgIGlmICh0YWtlU2xvd1BhdGgpCiAgICAgICAgICAgICAg
ICAgbWFwLmFkZChpbmZvLmNvZGVPcmlnaW4sIHRha2VzU2xvd1BhdGgoKSk7CiAgICAgICAgICAg
ICBlbHNlIHsKICAgICAgICAgICAgICAgICBDYWxsTGlua1N0YXR1cyBzdGF0dXMgPSBjb21wdXRl
Rm9yKGxvY2tlciwgaW5mbyk7CkBAIC0yMzAsMTMgKzIyNywxNCBAQCB2b2lkIENhbGxMaW5rU3Rh
dHVzOjpjb21wdXRlREZHU3RhdHVzZXMoCiB9CiAKIENhbGxMaW5rU3RhdHVzIENhbGxMaW5rU3Rh
dHVzOjpjb21wdXRlRm9yKAotICAgIENvZGVCbG9jayogcHJvZmlsZWRCbG9jaywgQ29kZU9yaWdp
biBjb2RlT3JpZ2luLCBjb25zdCBDYWxsTGlua1N0YXR1czo6Q29udGV4dE1hcCYgbWFwKQorICAg
IENvZGVCbG9jayogcHJvZmlsZWRCbG9jaywgQ29kZU9yaWdpbiBjb2RlT3JpZ2luLAorICAgIGNv
bnN0IENhbGxMaW5rSW5mb01hcCYgYmFzZWxpbmVNYXAsIGNvbnN0IENhbGxMaW5rU3RhdHVzOjpD
b250ZXh0TWFwJiBkZmdNYXApCiB7Ci0gICAgQ29udGV4dE1hcDo6Y29uc3RfaXRlcmF0b3IgaXRl
ciA9IG1hcC5maW5kKGNvZGVPcmlnaW4pOwotICAgIGlmIChpdGVyICE9IG1hcC5lbmQoKSkKKyAg
ICBDb250ZXh0TWFwOjpjb25zdF9pdGVyYXRvciBpdGVyID0gZGZnTWFwLmZpbmQoY29kZU9yaWdp
bik7CisgICAgaWYgKGl0ZXIgIT0gZGZnTWFwLmVuZCgpKQogICAgICAgICByZXR1cm4gaXRlci0+
dmFsdWU7CiAgICAgCi0gICAgcmV0dXJuIGNvbXB1dGVGb3IocHJvZmlsZWRCbG9jaywgY29kZU9y
aWdpbi5ieXRlY29kZUluZGV4KTsKKyAgICByZXR1cm4gY29tcHV0ZUZvcihwcm9maWxlZEJsb2Nr
LCBjb2RlT3JpZ2luLmJ5dGVjb2RlSW5kZXgsIGJhc2VsaW5lTWFwKTsKIH0KIAogdm9pZCBDYWxs
TGlua1N0YXR1czo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdApJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NhbGxMaW5rU3RhdHVzLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NhbGxMaW5rU3RhdHVzLmgJKHJldmlzaW9uIDE2
NjEwOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9DYWxsTGlua1N0YXR1cy5o
CSh3b3JraW5nIGNvcHkpCkBAIC0yNiw2ICsyNiw3IEBACiAjaWZuZGVmIENhbGxMaW5rU3RhdHVz
X2gKICNkZWZpbmUgQ2FsbExpbmtTdGF0dXNfaAogCisjaW5jbHVkZSAiQ2FsbExpbmtJbmZvLmgi
CiAjaW5jbHVkZSAiQ29kZU9yaWdpbi5oIgogI2luY2x1ZGUgIkNvZGVTcGVjaWFsaXphdGlvbktp
bmQuaCIKICNpbmNsdWRlICJDb25jdXJyZW50SklUTG9jay5oIgpAQCAtNzUsNyArNzYsOCBAQCBw
dWJsaWM6CiAgICAgICAgIHJldHVybiAqdGhpczsKICAgICB9CiAgICAgCi0gICAgc3RhdGljIENh
bGxMaW5rU3RhdHVzIGNvbXB1dGVGb3IoQ29kZUJsb2NrKiwgdW5zaWduZWQgYnl0ZWNvZGVJbmRl
eCk7CisgICAgc3RhdGljIENhbGxMaW5rU3RhdHVzIGNvbXB1dGVGb3IoCisgICAgICAgIENvZGVC
bG9jayosIHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXgsIGNvbnN0IENhbGxMaW5rSW5mb01hcCYpOwog
CiAjaWYgRU5BQkxFKEpJVCkKICAgICAvLyBDb21wdXRlcyB0aGUgc3RhdHVzIGFzc3VtaW5nIHRo
YXQgd2UgbmV2ZXIgdG9vayBzbG93IHBhdGggYW5kIG5ldmVyIHByZXZpb3VzbHkKQEAgLTkxLDcg
KzkzLDggQEAgcHVibGljOgogICAgIHN0YXRpYyB2b2lkIGNvbXB1dGVERkdTdGF0dXNlcyhDb2Rl
QmxvY2sqIGRmZ0NvZGVCbG9jaywgQ29udGV4dE1hcCYpOwogICAgIAogICAgIC8vIEhlbHBlciB0
aGF0IGZpcnN0IGNvbnN1bHRzIHRoZSBDb250ZXh0TWFwIGFuZCB0aGVuIGRvZXMgY29tcHV0ZUZv
cigpLgotICAgIHN0YXRpYyBDYWxsTGlua1N0YXR1cyBjb21wdXRlRm9yKENvZGVCbG9jayosIENv
ZGVPcmlnaW4sIGNvbnN0IENvbnRleHRNYXAmKTsKKyAgICBzdGF0aWMgQ2FsbExpbmtTdGF0dXMg
Y29tcHV0ZUZvcigKKyAgICAgICAgQ29kZUJsb2NrKiwgQ29kZU9yaWdpbiwgY29uc3QgQ2FsbExp
bmtJbmZvTWFwJiwgY29uc3QgQ29udGV4dE1hcCYpOwogICAgIAogICAgIGJvb2wgaXNTZXQoKSBj
b25zdCB7IHJldHVybiBtX2NhbGxUYXJnZXQgfHwgbV9leGVjdXRhYmxlIHx8IG1fY291bGRUYWtl
U2xvd1BhdGg7IH0KICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9D
b2RlQmxvY2suY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9Db2RlQmxvY2suY3BwCShyZXZpc2lvbiAxNjYxMDkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDA3LDcgKzQwNyw3
IEBAIHZvaWQgQ29kZUJsb2NrOjpwcmludEdldEJ5SWRDYWNoZVN0YXR1cygKICNlbmRpZgogfQog
Ci12b2lkIENvZGVCbG9jazo6cHJpbnRDYWxsT3AoUHJpbnRTdHJlYW0mIG91dCwgRXhlY1N0YXRl
KiBleGVjLCBpbnQgbG9jYXRpb24sIGNvbnN0IEluc3RydWN0aW9uKiYgaXQsIGNvbnN0IGNoYXIq
IG9wLCBDYWNoZUR1bXBNb2RlIGNhY2hlRHVtcE1vZGUsIGJvb2wmIGhhc1ByaW50ZWRQcm9maWxp
bmcpCit2b2lkIENvZGVCbG9jazo6cHJpbnRDYWxsT3AoUHJpbnRTdHJlYW0mIG91dCwgRXhlY1N0
YXRlKiBleGVjLCBpbnQgbG9jYXRpb24sIGNvbnN0IEluc3RydWN0aW9uKiYgaXQsIGNvbnN0IGNo
YXIqIG9wLCBDYWNoZUR1bXBNb2RlIGNhY2hlRHVtcE1vZGUsIGJvb2wmIGhhc1ByaW50ZWRQcm9m
aWxpbmcsIGNvbnN0IENhbGxMaW5rSW5mb01hcCYgbWFwKQogewogICAgIGludCBkc3QgPSAoKytp
dCktPnUub3BlcmFuZDsKICAgICBpbnQgZnVuYyA9ICgrK2l0KS0+dS5vcGVyYW5kOwpAQCAtNDI2
LDEyICs0MjYsMTIgQEAgdm9pZCBDb2RlQmxvY2s6OnByaW50Q2FsbE9wKFByaW50U3RyZWFtJgog
ICAgICAgICB9CiAjZW5kaWYKICNpZiBFTkFCTEUoSklUKQotICAgICAgICBpZiAobnVtYmVyT2ZD
YWxsTGlua0luZm9zKCkpIHsKLSAgICAgICAgICAgIEpTRnVuY3Rpb24qIHRhcmdldCA9IGdldENh
bGxMaW5rSW5mbyhsb2NhdGlvbikubGFzdFNlZW5DYWxsZWUuZ2V0KCk7CisgICAgICAgIGlmIChD
YWxsTGlua0luZm8qIGluZm8gPSBtYXAuZ2V0KENvZGVPcmlnaW4obG9jYXRpb24pKSkgeworICAg
ICAgICAgICAgSlNGdW5jdGlvbiogdGFyZ2V0ID0gaW5mby0+bGFzdFNlZW5DYWxsZWUuZ2V0KCk7
CiAgICAgICAgICAgICBpZiAodGFyZ2V0KQogICAgICAgICAgICAgICAgIG91dC5wcmludGYoIiBq
aXQoJXAsIGV4ZWMgJXApIiwgdGFyZ2V0LCB0YXJnZXQtPmV4ZWN1dGFibGUoKSk7CiAgICAgICAg
IH0KLSAgICAgICAgb3V0LnByaW50KCIgc3RhdHVzKCIsIENhbGxMaW5rU3RhdHVzOjpjb21wdXRl
Rm9yKHRoaXMsIGxvY2F0aW9uKSwgIikiKTsKKyAgICAgICAgb3V0LnByaW50KCIgc3RhdHVzKCIs
IENhbGxMaW5rU3RhdHVzOjpjb21wdXRlRm9yKHRoaXMsIGxvY2F0aW9uLCBtYXApLCAiKSIpOwog
I2VuZGlmCiAgICAgfQogICAgICsraXQ7CkBAIC00ODMsMTIgKzQ4MywxNCBAQCB2b2lkIENvZGVC
bG9jazo6ZHVtcEJ5dGVjb2RlKFByaW50U3RyZWFtCiAgICAgb3V0LnByaW50ZigiXG4iKTsKICAg
ICAKICAgICBTdHViSW5mb01hcCBzdHViSW5mb3M7CisgICAgQ2FsbExpbmtJbmZvTWFwIGNhbGxM
aW5rSW5mb3M7CiAgICAgZ2V0U3R1YkluZm9NYXAoc3R1YkluZm9zKTsKKyAgICBnZXRDYWxsTGlu
a0luZm9NYXAoY2FsbExpbmtJbmZvcyk7CiAgICAgCiAgICAgY29uc3QgSW5zdHJ1Y3Rpb24qIGJl
Z2luID0gaW5zdHJ1Y3Rpb25zKCkuYmVnaW4oKTsKICAgICBjb25zdCBJbnN0cnVjdGlvbiogZW5k
ID0gaW5zdHJ1Y3Rpb25zKCkuZW5kKCk7CiAgICAgZm9yIChjb25zdCBJbnN0cnVjdGlvbiogaXQg
PSBiZWdpbjsgaXQgIT0gZW5kOyArK2l0KQotICAgICAgICBkdW1wQnl0ZWNvZGUob3V0LCBleGVj
LCBiZWdpbiwgaXQsIHN0dWJJbmZvcyk7CisgICAgICAgIGR1bXBCeXRlY29kZShvdXQsIGV4ZWMs
IGJlZ2luLCBpdCwgc3R1YkluZm9zLCBjYWxsTGlua0luZm9zKTsKICAgICAKICAgICBpZiAobnVt
YmVyT2ZJZGVudGlmaWVycygpKSB7CiAgICAgICAgIG91dC5wcmludGYoIlxuSWRlbnRpZmllcnM6
XG4iKTsKQEAgLTYxNiw3ICs2MTgsOSBAQCB2b2lkIENvZGVCbG9jazo6cHJpbnRMb2NhdGlvbk9w
QW5kUmVnaXN0CiAgICAgb3V0LnByaW50ZigiJXMiLCByZWdpc3Rlck5hbWUob3BlcmFuZCkuZGF0
YSgpKTsKIH0KIAotdm9pZCBDb2RlQmxvY2s6OmR1bXBCeXRlY29kZShQcmludFN0cmVhbSYgb3V0
LCBFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEluc3RydWN0aW9uKiBiZWdpbiwgY29uc3QgSW5zdHJ1
Y3Rpb24qJiBpdCwgY29uc3QgU3R1YkluZm9NYXAmIG1hcCkKK3ZvaWQgQ29kZUJsb2NrOjpkdW1w
Qnl0ZWNvZGUoCisgICAgUHJpbnRTdHJlYW0mIG91dCwgRXhlY1N0YXRlKiBleGVjLCBjb25zdCBJ
bnN0cnVjdGlvbiogYmVnaW4sIGNvbnN0IEluc3RydWN0aW9uKiYgaXQsCisgICAgY29uc3QgU3R1
YkluZm9NYXAmIHN0dWJJbmZvcywgY29uc3QgQ2FsbExpbmtJbmZvTWFwJiBjYWxsTGlua0luZm9z
KQogewogICAgIGludCBsb2NhdGlvbiA9IGl0IC0gYmVnaW47CiAgICAgYm9vbCBoYXNQcmludGVk
UHJvZmlsaW5nID0gZmFsc2U7CkBAIC05MTMsNyArOTE3LDcgQEAgdm9pZCBDb2RlQmxvY2s6OmR1
bXBCeXRlY29kZShQcmludFN0cmVhbQogICAgICAgICBjYXNlIG9wX2dldF9ieV9pZF9vdXRfb2Zf
bGluZToKICAgICAgICAgY2FzZSBvcF9nZXRfYXJyYXlfbGVuZ3RoOiB7CiAgICAgICAgICAgICBw
cmludEdldEJ5SWRPcChvdXQsIGV4ZWMsIGxvY2F0aW9uLCBpdCk7Ci0gICAgICAgICAgICBwcmlu
dEdldEJ5SWRDYWNoZVN0YXR1cyhvdXQsIGV4ZWMsIGxvY2F0aW9uLCBtYXApOworICAgICAgICAg
ICAgcHJpbnRHZXRCeUlkQ2FjaGVTdGF0dXMob3V0LCBleGVjLCBsb2NhdGlvbiwgc3R1YkluZm9z
KTsKICAgICAgICAgICAgIGR1bXBWYWx1ZVByb2ZpbGluZyhvdXQsIGl0LCBoYXNQcmludGVkUHJv
ZmlsaW5nKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CkBAIC0xMTc0LDExICsxMTc4
LDExIEBAIHZvaWQgQ29kZUJsb2NrOjpkdW1wQnl0ZWNvZGUoUHJpbnRTdHJlYW0KICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIGNhc2Ugb3BfY2FsbDogewotICAgICAgICAg
ICAgcHJpbnRDYWxsT3Aob3V0LCBleGVjLCBsb2NhdGlvbiwgaXQsICJjYWxsIiwgRHVtcENhY2hl
cywgaGFzUHJpbnRlZFByb2ZpbGluZyk7CisgICAgICAgICAgICBwcmludENhbGxPcChvdXQsIGV4
ZWMsIGxvY2F0aW9uLCBpdCwgImNhbGwiLCBEdW1wQ2FjaGVzLCBoYXNQcmludGVkUHJvZmlsaW5n
LCBjYWxsTGlua0luZm9zKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAg
IGNhc2Ugb3BfY2FsbF9ldmFsOiB7Ci0gICAgICAgICAgICBwcmludENhbGxPcChvdXQsIGV4ZWMs
IGxvY2F0aW9uLCBpdCwgImNhbGxfZXZhbCIsIERvbnREdW1wQ2FjaGVzLCBoYXNQcmludGVkUHJv
ZmlsaW5nKTsKKyAgICAgICAgICAgIHByaW50Q2FsbE9wKG91dCwgZXhlYywgbG9jYXRpb24sIGl0
LCAiY2FsbF9ldmFsIiwgRG9udER1bXBDYWNoZXMsIGhhc1ByaW50ZWRQcm9maWxpbmcsIGNhbGxM
aW5rSW5mb3MpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBv
cF9jYWxsX3ZhcmFyZ3M6IHsKQEAgLTEyMTksNyArMTIyMyw3IEBAIHZvaWQgQ29kZUJsb2NrOjpk
dW1wQnl0ZWNvZGUoUHJpbnRTdHJlYW0KICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAg
ICAgICAgIGNhc2Ugb3BfY29uc3RydWN0OiB7Ci0gICAgICAgICAgICBwcmludENhbGxPcChvdXQs
IGV4ZWMsIGxvY2F0aW9uLCBpdCwgImNvbnN0cnVjdCIsIER1bXBDYWNoZXMsIGhhc1ByaW50ZWRQ
cm9maWxpbmcpOworICAgICAgICAgICAgcHJpbnRDYWxsT3Aob3V0LCBleGVjLCBsb2NhdGlvbiwg
aXQsICJjb25zdHJ1Y3QiLCBEdW1wQ2FjaGVzLCBoYXNQcmludGVkUHJvZmlsaW5nLCBjYWxsTGlu
a0luZm9zKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIGNhc2Ugb3Bf
c3RyY2F0OiB7CkBAIC0xMzgwLDExICsxMzg0LDEzIEBAIHZvaWQgQ29kZUJsb2NrOjpkdW1wQnl0
ZWNvZGUoUHJpbnRTdHJlYW0KICAgICBvdXQucHJpbnQoIlxuIik7CiB9CiAKLXZvaWQgQ29kZUJs
b2NrOjpkdW1wQnl0ZWNvZGUoUHJpbnRTdHJlYW0mIG91dCwgdW5zaWduZWQgYnl0ZWNvZGVPZmZz
ZXQsIGNvbnN0IFN0dWJJbmZvTWFwJiBtYXApCit2b2lkIENvZGVCbG9jazo6ZHVtcEJ5dGVjb2Rl
KAorICAgIFByaW50U3RyZWFtJiBvdXQsIHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0LAorICAgIGNv
bnN0IFN0dWJJbmZvTWFwJiBzdHViSW5mb3MsIGNvbnN0IENhbGxMaW5rSW5mb01hcCYgY2FsbExp
bmtJbmZvcykKIHsKICAgICBFeGVjU3RhdGUqIGV4ZWMgPSBtX2dsb2JhbE9iamVjdC0+Z2xvYmFs
RXhlYygpOwogICAgIGNvbnN0IEluc3RydWN0aW9uKiBpdCA9IGluc3RydWN0aW9ucygpLmJlZ2lu
KCkgKyBieXRlY29kZU9mZnNldDsKLSAgICBkdW1wQnl0ZWNvZGUob3V0LCBleGVjLCBpbnN0cnVj
dGlvbnMoKS5iZWdpbigpLCBpdCwgbWFwKTsKKyAgICBkdW1wQnl0ZWNvZGUob3V0LCBleGVjLCBp
bnN0cnVjdGlvbnMoKS5iZWdpbigpLCBpdCwgc3R1YkluZm9zLCBjYWxsTGlua0luZm9zKTsKIH0K
IAogI2RlZmluZSBGT1JfRUFDSF9NRU1CRVJfVkVDVE9SKG1hY3JvKSBcCkBAIC0yMjMyLDM0ICsy
MjM4LDM0IEBAIHZvaWQgQ29kZUJsb2NrOjpmaW5hbGl6ZVVuY29uZGl0aW9uYWxseSgKICAgICAv
LyBIYW5kbGUgaW5saW5lIGNhY2hlcy4KICAgICBpZiAoISFqaXRDb2RlKCkpIHsKICAgICAgICAg
UmVwYXRjaEJ1ZmZlciByZXBhdGNoQnVmZmVyKHRoaXMpOwotICAgICAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgbnVtYmVyT2ZDYWxsTGlua0luZm9zKCk7ICsraSkgewotICAgICAgICAgICAg
aWYgKGNhbGxMaW5rSW5mbyhpKS5pc0xpbmtlZCgpKSB7Ci0gICAgICAgICAgICAgICAgaWYgKENs
b3N1cmVDYWxsU3R1YlJvdXRpbmUqIHN0dWIgPSBjYWxsTGlua0luZm8oaSkuc3R1Yi5nZXQoKSkg
eworICAgICAgICBmb3IgKEJhZzxDYWxsTGlua0luZm8+OjppdGVyYXRvciBpdGVyID0gY2FsbExp
bmtJbmZvc0JlZ2luKCk7ICEhaXRlcjsgKytpdGVyKSB7CisgICAgICAgICAgICBDYWxsTGlua0lu
Zm8mIGluZm8gPSAqKml0ZXI7CisgICAgICAgICAgICBpZiAoaW5mby5pc0xpbmtlZCgpKSB7Cisg
ICAgICAgICAgICAgICAgaWYgKENsb3N1cmVDYWxsU3R1YlJvdXRpbmUqIHN0dWIgPSBpbmZvLnN0
dWIuZ2V0KCkpIHsKICAgICAgICAgICAgICAgICAgICAgaWYgKCFIZWFwOjppc01hcmtlZChzdHVi
LT5zdHJ1Y3R1cmUoKSkKICAgICAgICAgICAgICAgICAgICAgICAgIHx8ICFIZWFwOjppc01hcmtl
ZChzdHViLT5leGVjdXRhYmxlKCkpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoT3B0
aW9uczo6dmVyYm9zZU9TUigpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YUxv
ZygKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkNsZWFyaW5nIGNsb3N1cmUgY2Fs
bCBmcm9tICIsICp0aGlzLCAiIHRvICIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHN0dWItPmV4ZWN1dGFibGUoKS0+aGFzaEZvcihjYWxsTGlua0luZm8oaSkuc3BlY2lhbGl6YXRp
b25LaW5kKCkpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHViLT5leGVjdXRh
YmxlKCktPmhhc2hGb3IoaW5mby5zcGVjaWFsaXphdGlvbktpbmQoKSksCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICIsIHN0dWIgcm91dGluZSAiLCBSYXdQb2ludGVyKHN0dWIpLCAi
LlxuIik7CiAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAg
ICBjYWxsTGlua0luZm8oaSkudW5saW5rKCptX3ZtLCByZXBhdGNoQnVmZmVyKTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGluZm8udW5saW5rKCptX3ZtLCByZXBhdGNoQnVmZmVyKTsKICAgICAg
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoIUhlYXA6OmlzTWFy
a2VkKGNhbGxMaW5rSW5mbyhpKS5jYWxsZWUuZ2V0KCkpKSB7CisgICAgICAgICAgICAgICAgfSBl
bHNlIGlmICghSGVhcDo6aXNNYXJrZWQoaW5mby5jYWxsZWUuZ2V0KCkpKSB7CiAgICAgICAgICAg
ICAgICAgICAgIGlmIChPcHRpb25zOjp2ZXJib3NlT1NSKCkpIHsKICAgICAgICAgICAgICAgICAg
ICAgICAgIGRhdGFMb2coCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkNsZWFyaW5nIGNh
bGwgZnJvbSAiLCAqdGhpcywgIiB0byAiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJh
d1BvaW50ZXIoY2FsbExpbmtJbmZvKGkpLmNhbGxlZS5nZXQoKSksICIgKCIsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY2FsbExpbmtJbmZvKGkpLmNhbGxlZS5nZXQoKS0+ZXhlY3V0YWJs
ZSgpLT5oYXNoRm9yKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWxsTGlua0lu
Zm8oaSkuc3BlY2lhbGl6YXRpb25LaW5kKCkpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFJhd1BvaW50ZXIoaW5mby5jYWxsZWUuZ2V0KCkpLCAiICgiLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGluZm8uY2FsbGVlLmdldCgpLT5leGVjdXRhYmxlKCktPmhhc2hGb3IoaW5mby5z
cGVjaWFsaXphdGlvbktpbmQoKSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIikuXG4i
KTsKICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBjYWxsTGlua0lu
Zm8oaSkudW5saW5rKCptX3ZtLCByZXBhdGNoQnVmZmVyKTsKKyAgICAgICAgICAgICAgICAgICAg
aW5mby51bmxpbmsoKm1fdm0sIHJlcGF0Y2hCdWZmZXIpOwogICAgICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmICghIWNhbGxMaW5rSW5mbyhpKS5sYXN0U2VlbkNh
bGxlZQotICAgICAgICAgICAgICAgICYmICFIZWFwOjppc01hcmtlZChjYWxsTGlua0luZm8oaSku
bGFzdFNlZW5DYWxsZWUuZ2V0KCkpKQotICAgICAgICAgICAgICAgIGNhbGxMaW5rSW5mbyhpKS5s
YXN0U2VlbkNhbGxlZS5jbGVhcigpOworICAgICAgICAgICAgaWYgKCEhaW5mby5sYXN0U2VlbkNh
bGxlZQorICAgICAgICAgICAgICAgICYmICFIZWFwOjppc01hcmtlZChpbmZvLmxhc3RTZWVuQ2Fs
bGVlLmdldCgpKSkKKyAgICAgICAgICAgICAgICBpbmZvLmxhc3RTZWVuQ2FsbGVlLmNsZWFyKCk7
CiAgICAgICAgIH0KICAgICAgICAgZm9yIChCYWc8U3RydWN0dXJlU3R1YkluZm8+OjppdGVyYXRv
ciBpdGVyID0gbV9zdHViSW5mb3MuYmVnaW4oKTsgISFpdGVyOyArK2l0ZXIpIHsKICAgICAgICAg
ICAgIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbyA9ICoqaXRlcjsKQEAgLTIyODgsNiArMjI5
NCwzNCBAQCB2b2lkIENvZGVCbG9jazo6Z2V0U3R1YkluZm9NYXAoU3R1YkluZm9NCiAgICAgZ2V0
U3R1YkluZm9NYXAobG9ja2VyLCByZXN1bHQpOwogfQogCit2b2lkIENvZGVCbG9jazo6Z2V0Q2Fs
bExpbmtJbmZvTWFwKGNvbnN0IENvbmN1cnJlbnRKSVRMb2NrZXImLCBDYWxsTGlua0luZm9NYXAm
IHJlc3VsdCkKK3sKKyNpZiBFTkFCTEUoSklUKQorICAgIHRvSGFzaE1hcChtX2NhbGxMaW5rSW5m
b3MsIGdldENhbGxMaW5rSW5mb0NvZGVPcmlnaW4sIHJlc3VsdCk7CisjZWxzZQorICAgIFVOVVNF
RF9QQVJBTShyZXN1bHQpOworI2VuZGlmCit9CisKK3ZvaWQgQ29kZUJsb2NrOjpnZXRDYWxsTGlu
a0luZm9NYXAoQ2FsbExpbmtJbmZvTWFwJiByZXN1bHQpCit7CisgICAgQ29uY3VycmVudEpJVExv
Y2tlciBsb2NrZXIobV9sb2NrKTsKKyAgICBnZXRDYWxsTGlua0luZm9NYXAobG9ja2VyLCByZXN1
bHQpOworfQorCitDYWxsTGlua0luZm8qIENvZGVCbG9jazo6Z2V0Q2FsbExpbmtJbmZvRm9yQnl0
ZWNvZGVJbmRleCh1bnNpZ25lZCBpbmRleCkKK3sKKyNpZiBFTkFCTEUoSklUKQorICAgIGZvciAo
QmFnPENhbGxMaW5rSW5mbz46Oml0ZXJhdG9yIGl0ZXIgPSBtX2NhbGxMaW5rSW5mb3MuYmVnaW4o
KTsgISFpdGVyOyArK2l0ZXIpIHsKKyAgICAgICAgaWYgKCgqaXRlciktPmNvZGVPcmlnaW4gPT0g
Q29kZU9yaWdpbihpbmRleCkpCisgICAgICAgICAgICByZXR1cm4gKml0ZXI7CisgICAgfQorI2Vs
c2UKKyAgICBVTlVTRURfUEFSQU0oaW5kZXgpOworI2VuZGlmCisgICAgcmV0dXJuIG51bGxwdHI7
Cit9CisKICNpZiBFTkFCTEUoSklUKQogU3RydWN0dXJlU3R1YkluZm8qIENvZGVCbG9jazo6YWRk
U3R1YkluZm8oKQogewpAQCAtMjI5NSw2ICsyMzI5LDEyIEBAIFN0cnVjdHVyZVN0dWJJbmZvKiBD
b2RlQmxvY2s6OmFkZFN0dWJJbmYKICAgICByZXR1cm4gbV9zdHViSW5mb3MuYWRkKCk7CiB9CiAK
K0NhbGxMaW5rSW5mbyogQ29kZUJsb2NrOjphZGRDYWxsTGlua0luZm8oKQoreworICAgIENvbmN1
cnJlbnRKSVRMb2NrZXIgbG9ja2VyKG1fbG9jayk7CisgICAgcmV0dXJuIG1fY2FsbExpbmtJbmZv
cy5hZGQoKTsKK30KKwogdm9pZCBDb2RlQmxvY2s6OnJlc2V0U3R1YihTdHJ1Y3R1cmVTdHViSW5m
byYgc3R1YkluZm8pCiB7CiAgICAgaWYgKHN0dWJJbmZvLmFjY2Vzc1R5cGUgPT0gYWNjZXNzX3Vu
c2V0KQpAQCAtMjU5MSwxNSArMjYzMSwxNiBAQCB2b2lkIENvZGVCbG9jazo6dW5saW5rQ2FsbHMo
KQogICAgICAgICAgICAgbV9sbGludENhbGxMaW5rSW5mb3NbaV0udW5saW5rKCk7CiAgICAgfQog
I2VuZGlmCi0gICAgaWYgKCFtX2NhbGxMaW5rSW5mb3Muc2l6ZSgpKQorICAgIGlmIChtX2NhbGxM
aW5rSW5mb3MuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm47CiAgICAgaWYgKCFtX3ZtLT5jYW5V
c2VKSVQoKSkKICAgICAgICAgcmV0dXJuOwogICAgIFJlcGF0Y2hCdWZmZXIgcmVwYXRjaEJ1ZmZl
cih0aGlzKTsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fY2FsbExpbmtJbmZvcy5zaXpl
KCk7IGkrKykgewotICAgICAgICBpZiAoIW1fY2FsbExpbmtJbmZvc1tpXS5pc0xpbmtlZCgpKQor
ICAgIGZvciAoQmFnPENhbGxMaW5rSW5mbz46Oml0ZXJhdG9yIGl0ZXIgPSBtX2NhbGxMaW5rSW5m
b3MuYmVnaW4oKTsgISFpdGVyOyArK2l0ZXIpIHsKKyAgICAgICAgQ2FsbExpbmtJbmZvJiBpbmZv
ID0gKippdGVyOworICAgICAgICBpZiAoIWluZm8uaXNMaW5rZWQoKSkKICAgICAgICAgICAgIGNv
bnRpbnVlOwotICAgICAgICBtX2NhbGxMaW5rSW5mb3NbaV0udW5saW5rKCptX3ZtLCByZXBhdGNo
QnVmZmVyKTsKKyAgICAgICAgaW5mby51bmxpbmsoKm1fdm0sIHJlcGF0Y2hCdWZmZXIpOwogICAg
IH0KIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2su
aAkocmV2aXNpb24gMTY2MTA5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0Nv
ZGVCbG9jay5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNDcsNyArMTQ3LDkgQEAgcHVibGljOgogICAg
IHZvaWQgdmlzaXRBZ2dyZWdhdGUoU2xvdFZpc2l0b3ImKTsKIAogICAgIHZvaWQgZHVtcEJ5dGVj
b2RlKFByaW50U3RyZWFtJiA9IFdURjo6ZGF0YUZpbGUoKSk7Ci0gICAgdm9pZCBkdW1wQnl0ZWNv
ZGUoUHJpbnRTdHJlYW0mLCB1bnNpZ25lZCBieXRlY29kZU9mZnNldCwgY29uc3QgU3R1YkluZm9N
YXAmID0gU3R1YkluZm9NYXAoKSk7CisgICAgdm9pZCBkdW1wQnl0ZWNvZGUoCisgICAgICAgIFBy
aW50U3RyZWFtJiwgdW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQsCisgICAgICAgIGNvbnN0IFN0dWJJ
bmZvTWFwJiA9IFN0dWJJbmZvTWFwKCksIGNvbnN0IENhbGxMaW5rSW5mb01hcCYgPSBDYWxsTGlu
a0luZm9NYXAoKSk7CiAgICAgdm9pZCBwcmludFN0cnVjdHVyZXMoUHJpbnRTdHJlYW0mLCBjb25z
dCBJbnN0cnVjdGlvbiopOwogICAgIHZvaWQgcHJpbnRTdHJ1Y3R1cmUoUHJpbnRTdHJlYW0mLCBj
b25zdCBjaGFyKiBuYW1lLCBjb25zdCBJbnN0cnVjdGlvbiosIGludCBvcGVyYW5kKTsKIApAQCAt
MTc4LDExICsxODAsMTggQEAgcHVibGljOgogCiAgICAgdm9pZCBnZXRTdHViSW5mb01hcChjb25z
dCBDb25jdXJyZW50SklUTG9ja2VyJiwgU3R1YkluZm9NYXAmIHJlc3VsdCk7CiAgICAgdm9pZCBn
ZXRTdHViSW5mb01hcChTdHViSW5mb01hcCYgcmVzdWx0KTsKLQorICAgIAorICAgIHZvaWQgZ2V0
Q2FsbExpbmtJbmZvTWFwKGNvbnN0IENvbmN1cnJlbnRKSVRMb2NrZXImLCBDYWxsTGlua0luZm9N
YXAmIHJlc3VsdCk7CisgICAgdm9pZCBnZXRDYWxsTGlua0luZm9NYXAoQ2FsbExpbmtJbmZvTWFw
JiByZXN1bHQpOworICAgIAorICAgIC8vIFRoaXMgaXMgYSBzbG93IGZ1bmN0aW9uIGNhbGwgdXNl
ZCBwcmltYXJpbHkgZm9yIGNvbXBpbGluZyBPU1IgZXhpdHMgaW4gdGhlIGNhc2UKKyAgICAvLyB0
aGF0IHRoZXJlIGhhZCBiZWVuIGlubGluaW5nLiBDaGFuY2VzIGFyZSBpZiB5b3Ugd2FudCB0byB1
c2UgdGhpcywgeW91J3JlIHJlYWxseQorICAgIC8vIGxvb2tpbmcgZm9yIGEgQ2FsbExpbmtJbmZv
TWFwIHRvIGFtb3J0aXplIHRoZSBjb3N0IG9mIGNhbGxpbmcgdGhpcy4KKyAgICBDYWxsTGlua0lu
Zm8qIGdldENhbGxMaW5rSW5mb0ZvckJ5dGVjb2RlSW5kZXgodW5zaWduZWQgYnl0ZWNvZGVJbmRl
eCk7CiAjaWYgRU5BQkxFKEpJVCkKICAgICBTdHJ1Y3R1cmVTdHViSW5mbyogYWRkU3R1YkluZm8o
KTsKLSAgICBCYWc8U3RydWN0dXJlU3R1YkluZm8+OjppdGVyYXRvciBiZWdpbigpIHsgcmV0dXJu
IG1fc3R1YkluZm9zLmJlZ2luKCk7IH0KLSAgICBCYWc8U3RydWN0dXJlU3R1YkluZm8+OjppdGVy
YXRvciBlbmQoKSB7IHJldHVybiBtX3N0dWJJbmZvcy5lbmQoKTsgfQorICAgIEJhZzxTdHJ1Y3R1
cmVTdHViSW5mbz46Oml0ZXJhdG9yIHN0dWJJbmZvQmVnaW4oKSB7IHJldHVybiBtX3N0dWJJbmZv
cy5iZWdpbigpOyB9CisgICAgQmFnPFN0cnVjdHVyZVN0dWJJbmZvPjo6aXRlcmF0b3Igc3R1Yklu
Zm9FbmQoKSB7IHJldHVybiBtX3N0dWJJbmZvcy5lbmQoKTsgfQogCiAgICAgdm9pZCByZXNldFN0
dWIoU3RydWN0dXJlU3R1YkluZm8mKTsKICAgICAKQEAgLTE5MSwxNiArMjAwLDkgQEAgcHVibGlj
OgogICAgICAgICByZXR1cm4gKihiaW5hcnlTZWFyY2g8QnlWYWxJbmZvLCB1bnNpZ25lZD4obV9i
eVZhbEluZm9zLCBtX2J5VmFsSW5mb3Muc2l6ZSgpLCBieXRlY29kZUluZGV4LCBnZXRCeVZhbElu
Zm9CeXRlY29kZUluZGV4KSk7CiAgICAgfQogCi0gICAgQ2FsbExpbmtJbmZvJiBnZXRDYWxsTGlu
a0luZm8oUmV0dXJuQWRkcmVzc1B0ciByZXR1cm5BZGRyZXNzKQotICAgIHsKLSAgICAgICAgcmV0
dXJuICooYmluYXJ5U2VhcmNoPENhbGxMaW5rSW5mbywgdm9pZCo+KG1fY2FsbExpbmtJbmZvcywg
bV9jYWxsTGlua0luZm9zLnNpemUoKSwgcmV0dXJuQWRkcmVzcy52YWx1ZSgpLCBnZXRDYWxsTGlu
a0luZm9SZXR1cm5Mb2NhdGlvbikpOwotICAgIH0KLQotICAgIENhbGxMaW5rSW5mbyYgZ2V0Q2Fs
bExpbmtJbmZvKHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXgpCi0gICAgewotICAgICAgICBBU1NFUlQo
IUpJVENvZGU6OmlzT3B0aW1pemluZ0pJVChqaXRUeXBlKCkpKTsKLSAgICAgICAgcmV0dXJuICoo
YmluYXJ5U2VhcmNoPENhbGxMaW5rSW5mbywgdW5zaWduZWQ+KG1fY2FsbExpbmtJbmZvcywgbV9j
YWxsTGlua0luZm9zLnNpemUoKSwgYnl0ZWNvZGVJbmRleCwgZ2V0Q2FsbExpbmtJbmZvQnl0ZWNv
ZGVJbmRleCkpOwotICAgIH0KKyAgICBDYWxsTGlua0luZm8qIGFkZENhbGxMaW5rSW5mbygpOwor
ICAgIEJhZzxDYWxsTGlua0luZm8+OjppdGVyYXRvciBjYWxsTGlua0luZm9zQmVnaW4oKSB7IHJl
dHVybiBtX2NhbGxMaW5rSW5mb3MuYmVnaW4oKTsgfQorICAgIEJhZzxDYWxsTGlua0luZm8+Ojpp
dGVyYXRvciBjYWxsTGlua0luZm9zRW5kKCkgeyByZXR1cm4gbV9jYWxsTGlua0luZm9zLmVuZCgp
OyB9CiAjZW5kaWYgLy8gRU5BQkxFKEpJVCkKIAogICAgIHZvaWQgdW5saW5rSW5jb21pbmdDYWxs
cygpOwpAQCAtMzk5LDEwICs0MDEsNiBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXROdW1iZXJPZkJ5
VmFsSW5mb3Moc2l6ZV90IHNpemUpIHsgbV9ieVZhbEluZm9zLnJlc2l6ZVRvRml0KHNpemUpOyB9
CiAgICAgc2l6ZV90IG51bWJlck9mQnlWYWxJbmZvcygpIGNvbnN0IHsgcmV0dXJuIG1fYnlWYWxJ
bmZvcy5zaXplKCk7IH0KICAgICBCeVZhbEluZm8mIGJ5VmFsSW5mbyhzaXplX3QgaW5kZXgpIHsg
cmV0dXJuIG1fYnlWYWxJbmZvc1tpbmRleF07IH0KLQotICAgIHZvaWQgc2V0TnVtYmVyT2ZDYWxs
TGlua0luZm9zKHNpemVfdCBzaXplKSB7IG1fY2FsbExpbmtJbmZvcy5yZXNpemVUb0ZpdChzaXpl
KTsgfQotICAgIHNpemVfdCBudW1iZXJPZkNhbGxMaW5rSW5mb3MoKSBjb25zdCB7IHJldHVybiBt
X2NhbGxMaW5rSW5mb3Muc2l6ZSgpOyB9Ci0gICAgQ2FsbExpbmtJbmZvJiBjYWxsTGlua0luZm8o
aW50IGluZGV4KSB7IHJldHVybiBtX2NhbGxMaW5rSW5mb3NbaW5kZXhdOyB9CiAjZW5kaWYKIAog
ICAgIHVuc2lnbmVkIG51bWJlck9mQXJndW1lbnRWYWx1ZVByb2ZpbGVzKCkKQEAgLTk2OCw3ICs5
NjYsOSBAQCBwcml2YXRlOgogICAgICAgICAgICAgbV9jb25zdGFudFJlZ2lzdGVyc1tpXS5zZXQo
Km1fdm0sIG93bmVyRXhlY3V0YWJsZSgpLCBjb25zdGFudHNbaV0uZ2V0KCkpOwogICAgIH0KIAot
ICAgIHZvaWQgZHVtcEJ5dGVjb2RlKFByaW50U3RyZWFtJiwgRXhlY1N0YXRlKiwgY29uc3QgSW5z
dHJ1Y3Rpb24qIGJlZ2luLCBjb25zdCBJbnN0cnVjdGlvbiomLCBjb25zdCBTdHViSW5mb01hcCYg
PSBTdHViSW5mb01hcCgpKTsKKyAgICB2b2lkIGR1bXBCeXRlY29kZSgKKyAgICAgICAgUHJpbnRT
dHJlYW0mLCBFeGVjU3RhdGUqLCBjb25zdCBJbnN0cnVjdGlvbiogYmVnaW4sIGNvbnN0IEluc3Ry
dWN0aW9uKiYsCisgICAgICAgIGNvbnN0IFN0dWJJbmZvTWFwJiA9IFN0dWJJbmZvTWFwKCksIGNv
bnN0IENhbGxMaW5rSW5mb01hcCYgPSBDYWxsTGlua0luZm9NYXAoKSk7CiAKICAgICBDU3RyaW5n
IHJlZ2lzdGVyTmFtZShpbnQgcikgY29uc3Q7CiAgICAgdm9pZCBwcmludFVuYXJ5T3AoUHJpbnRT
dHJlYW0mLCBFeGVjU3RhdGUqLCBpbnQgbG9jYXRpb24sIGNvbnN0IEluc3RydWN0aW9uKiYsIGNv
bnN0IGNoYXIqIG9wKTsKQEAgLTk3Nyw3ICs5NzcsNyBAQCBwcml2YXRlOgogICAgIHZvaWQgcHJp
bnRHZXRCeUlkT3AoUHJpbnRTdHJlYW0mLCBFeGVjU3RhdGUqLCBpbnQgbG9jYXRpb24sIGNvbnN0
IEluc3RydWN0aW9uKiYpOwogICAgIHZvaWQgcHJpbnRHZXRCeUlkQ2FjaGVTdGF0dXMoUHJpbnRT
dHJlYW0mLCBFeGVjU3RhdGUqLCBpbnQgbG9jYXRpb24sIGNvbnN0IFN0dWJJbmZvTWFwJik7CiAg
ICAgZW51bSBDYWNoZUR1bXBNb2RlIHsgRHVtcENhY2hlcywgRG9udER1bXBDYWNoZXMgfTsKLSAg
ICB2b2lkIHByaW50Q2FsbE9wKFByaW50U3RyZWFtJiwgRXhlY1N0YXRlKiwgaW50IGxvY2F0aW9u
LCBjb25zdCBJbnN0cnVjdGlvbiomLCBjb25zdCBjaGFyKiBvcCwgQ2FjaGVEdW1wTW9kZSwgYm9v
bCYgaGFzUHJpbnRlZFByb2ZpbGluZyk7CisgICAgdm9pZCBwcmludENhbGxPcChQcmludFN0cmVh
bSYsIEV4ZWNTdGF0ZSosIGludCBsb2NhdGlvbiwgY29uc3QgSW5zdHJ1Y3Rpb24qJiwgY29uc3Qg
Y2hhciogb3AsIENhY2hlRHVtcE1vZGUsIGJvb2wmIGhhc1ByaW50ZWRQcm9maWxpbmcsIGNvbnN0
IENhbGxMaW5rSW5mb01hcCYpOwogICAgIHZvaWQgcHJpbnRQdXRCeUlkT3AoUHJpbnRTdHJlYW0m
LCBFeGVjU3RhdGUqLCBpbnQgbG9jYXRpb24sIGNvbnN0IEluc3RydWN0aW9uKiYsIGNvbnN0IGNo
YXIqIG9wKTsKICAgICB2b2lkIHByaW50TG9jYXRpb25BbmRPcChQcmludFN0cmVhbSYsIEV4ZWNT
dGF0ZSosIGludCBsb2NhdGlvbiwgY29uc3QgSW5zdHJ1Y3Rpb24qJiwgY29uc3QgY2hhciogb3Ap
OwogICAgIHZvaWQgcHJpbnRMb2NhdGlvbk9wQW5kUmVnaXN0ZXJPcGVyYW5kKFByaW50U3RyZWFt
JiwgRXhlY1N0YXRlKiwgaW50IGxvY2F0aW9uLCBjb25zdCBJbnN0cnVjdGlvbiomIGl0LCBjb25z
dCBjaGFyKiBvcCwgaW50IG9wZXJhbmQpOwpAQCAtMTA2NCw3ICsxMDY0LDcgQEAgcHJpdmF0ZToK
ICNpZiBFTkFCTEUoSklUKQogICAgIEJhZzxTdHJ1Y3R1cmVTdHViSW5mbz4gbV9zdHViSW5mb3M7
CiAgICAgVmVjdG9yPEJ5VmFsSW5mbz4gbV9ieVZhbEluZm9zOwotICAgIFZlY3RvcjxDYWxsTGlu
a0luZm8+IG1fY2FsbExpbmtJbmZvczsKKyAgICBCYWc8Q2FsbExpbmtJbmZvPiBtX2NhbGxMaW5r
SW5mb3M7CiAgICAgU2VudGluZWxMaW5rZWRMaXN0PENhbGxMaW5rSW5mbywgQmFzaWNSYXdTZW50
aW5lbE5vZGU8Q2FsbExpbmtJbmZvPj4gbV9pbmNvbWluZ0NhbGxzOwogI2VuZGlmCiAgICAgT3du
UHRyPENvbXBhY3RKSVRDb2RlTWFwPiBtX2ppdENvZGVNYXA7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAkocmV2aXNpb24gMTY2MTA5
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTEwNjMsNiArMTA2Myw3IEBAIHByaXZhdGU6CiAgICAgICAgIC8vIGNv
ZGUgYmxvY2sgaGFkIGdhdGhlcmVkLgogICAgICAgICBMYXp5T3BlcmFuZFZhbHVlUHJvZmlsZVBh
cnNlciBtX2xhenlPcGVyYW5kczsKICAgICAgICAgCisgICAgICAgIENhbGxMaW5rSW5mb01hcCBt
X2NhbGxMaW5rSW5mb3M7CiAgICAgICAgIFN0dWJJbmZvTWFwIG1fc3R1YkluZm9zOwogICAgICAg
ICAKICAgICAgICAgLy8gRGlkIHdlIHNlZSBhbnkgcmV0dXJucz8gV2UgbmVlZCB0byBoYW5kbGUg
dGhlICh1bmNvbW1vbiBidXQgbmVjZXNzYXJ5KQpAQCAtMTE4MCw3ICsxMTgxLDggQEAgdm9pZCBC
eXRlQ29kZVBhcnNlcjo6aGFuZGxlQ2FsbCgKICAgICAgICAgICAgIG1fZ3JhcGgudmFsdWVPZkpT
Q29uc3RhbnQoY2FsbFRhcmdldCkpLnNldElzUHJvdmVkKHRydWUpOwogICAgIH0gZWxzZSB7CiAg
ICAgICAgIGNhbGxMaW5rU3RhdHVzID0gQ2FsbExpbmtTdGF0dXM6OmNvbXB1dGVGb3IoCi0gICAg
ICAgICAgICBtX2lubGluZVN0YWNrVG9wLT5tX3Byb2ZpbGVkQmxvY2ssIGN1cnJlbnRDb2RlT3Jp
Z2luKCksIG1fY2FsbENvbnRleHRNYXApOworICAgICAgICAgICAgbV9pbmxpbmVTdGFja1RvcC0+
bV9wcm9maWxlZEJsb2NrLCBjdXJyZW50Q29kZU9yaWdpbigpLAorICAgICAgICAgICAgbV9pbmxp
bmVTdGFja1RvcC0+bV9jYWxsTGlua0luZm9zLCBtX2NhbGxDb250ZXh0TWFwKTsKICAgICB9CiAg
ICAgCiAgICAgaWYgKCFjYWxsTGlua1N0YXR1cy5jYW5PcHRpbWl6ZSgpKSB7CkBAIC0zMzMzLDgg
KzMzMzUsMTAgQEAgQnl0ZUNvZGVQYXJzZXI6OklubGluZVN0YWNrRW50cnk6OklubGluZQogICAg
ICAgICAvLyBXZSBkbyB0aGlzIHdoaWxlIGhvbGRpbmcgdGhlIGxvY2sgYmVjYXVzZSB3ZSB3YW50
IHRvIGVuY291cmFnZSBTdHJ1Y3R1cmVTdHViSW5mbydzCiAgICAgICAgIC8vIHRvIGJlIHBvdGVu
dGlhbGx5IGFkZGVkIHRvIG9wZXJhdGlvbnMgYW5kIGJlY2F1c2UgdGhlIHByb2ZpbGVkIGJsb2Nr
IGNvdWxkIGJlIGluIHRoZQogICAgICAgICAvLyBtaWRkbGUgb2YgTExJbnQtPkpJVCB0aWVyLXVw
IGluIHdoaWNoIGNhc2Ugd2Ugd291bGQgYmUgYWRkaW5nIHRoZSBpbmZvJ3MgcmlnaHQgbm93Lgot
ICAgICAgICBpZiAobV9wcm9maWxlZEJsb2NrLT5oYXNCYXNlbGluZUpJVFByb2ZpbGluZygpKQor
ICAgICAgICBpZiAobV9wcm9maWxlZEJsb2NrLT5oYXNCYXNlbGluZUpJVFByb2ZpbGluZygpKSB7
CiAgICAgICAgICAgICBtX3Byb2ZpbGVkQmxvY2stPmdldFN0dWJJbmZvTWFwKGxvY2tlciwgbV9z
dHViSW5mb3MpOworICAgICAgICAgICAgbV9wcm9maWxlZEJsb2NrLT5nZXRDYWxsTGlua0luZm9N
YXAobG9ja2VyLCBtX2NhbGxMaW5rSW5mb3MpOworICAgICAgICB9CiAgICAgfQogICAgIAogICAg
IG1fYXJndW1lbnRQb3NpdGlvbnMucmVzaXplKGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKTsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29kZS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29kZS5oCShyZXZpc2lvbiAxNjYx
MDkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvZGUuaAkod29ya2luZyBj
b3B5KQpAQCAtMTE3LDcgKzExNyw2IEBAIHB1YmxpYzoKICAgICBWZWN0b3I8REZHOjpPU1JFbnRy
eURhdGE+IG9zckVudHJ5OwogICAgIFNlZ21lbnRlZFZlY3RvcjxERkc6Ok9TUkV4aXQsIDg+IG9z
ckV4aXQ7CiAgICAgVmVjdG9yPERGRzo6U3BlY3VsYXRpb25SZWNvdmVyeT4gc3BlY3VsYXRpb25S
ZWNvdmVyeTsKLSAgICBWZWN0b3I8dW5zaWduZWQ+IHNsb3dQYXRoQ2FsbHM7CiAgICAgREZHOjpW
YXJpYWJsZUV2ZW50U3RyZWFtIHZhcmlhYmxlRXZlbnRTdHJlYW07CiAgICAgREZHOjpNaW5pZmll
ZEdyYXBoIG1pbmlmaWVkREZHOwogI2lmIEVOQUJMRShGVExfSklUKQpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb21waWxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb21waWxlci5jcHAJKHJldmlzaW9uIDE2NjEwOSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0yMzMsMjAgKzIzMywxNiBAQCB2b2lkIEpJVENvbXBpbGVyOjpsaW5rKExpbmtC
dWZmZXImIGxpbmtCCiAgICAgICAgIGluZm8ucGF0Y2guZGVsdGFDYWxsVG9TbG93Q2FzZSA9IGRp
ZmZlcmVuY2VCZXR3ZWVuQ29kZVB0cihjYWxsUmV0dXJuTG9jYXRpb24sIGxpbmtCdWZmZXIubG9j
YXRpb25PZihtX2luc1tpXS5tX3Nsb3dQYXRoR2VuZXJhdG9yLT5sYWJlbCgpKSk7CiAgICAgfQog
ICAgIAotICAgIFJFTEVBU0VfQVNTRVJUKCFtX2dyYXBoLm1fcGxhbi53aWxsVHJ5VG9UaWVyVXAg
fHwgbV9qaXRDb2RlLT5zbG93UGF0aENhbGxzLnNpemUoKSA+PSBtX2pzQ2FsbHMuc2l6ZSgpKTsK
LSAgICBtX2NvZGVCbG9jay0+c2V0TnVtYmVyT2ZDYWxsTGlua0luZm9zKG1fanNDYWxscy5zaXpl
KCkpOwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX2pzQ2FsbHMuc2l6ZSgpOyArK2kp
IHsKLSAgICAgICAgQ2FsbExpbmtJbmZvJiBpbmZvID0gbV9jb2RlQmxvY2stPmNhbGxMaW5rSW5m
byhpKTsKLSAgICAgICAgaW5mby5jYWxsVHlwZSA9IG1fanNDYWxsc1tpXS5tX2NhbGxUeXBlOwot
ICAgICAgICBpbmZvLmNvZGVPcmlnaW4gPSBtX2pzQ2FsbHNbaV0ubV9jb2RlT3JpZ2luOworICAg
ICAgICBKU0NhbGxSZWNvcmQmIHJlY29yZCA9IG1fanNDYWxsc1tpXTsKKyAgICAgICAgQ2FsbExp
bmtJbmZvJiBpbmZvID0gKnJlY29yZC5tX2luZm87CiAgICAgICAgIFRodW5rR2VuZXJhdG9yIGdl
bmVyYXRvciA9IGxpbmtUaHVua0dlbmVyYXRvckZvcigKICAgICAgICAgICAgIGluZm8uY2FsbFR5
cGUgPT0gQ2FsbExpbmtJbmZvOjpDb25zdHJ1Y3QgPyBDb2RlRm9yQ29uc3RydWN0IDogQ29kZUZv
ckNhbGwsCiAgICAgICAgICAgICBSZWdpc3RlclByZXNlcnZhdGlvbk5vdFJlcXVpcmVkKTsKLSAg
ICAgICAgbGlua0J1ZmZlci5saW5rKG1fanNDYWxsc1tpXS5tX3Nsb3dDYWxsLCBGdW5jdGlvblB0
cihtX3ZtLT5nZXRDVElTdHViKGdlbmVyYXRvcikuY29kZSgpLmV4ZWN1dGFibGVBZGRyZXNzKCkp
KTsKLSAgICAgICAgaW5mby5jYWxsUmV0dXJuTG9jYXRpb24gPSBsaW5rQnVmZmVyLmxvY2F0aW9u
T2ZOZWFyQ2FsbChtX2pzQ2FsbHNbaV0ubV9zbG93Q2FsbCk7Ci0gICAgICAgIGluZm8uaG90UGF0
aEJlZ2luID0gbGlua0J1ZmZlci5sb2NhdGlvbk9mKG1fanNDYWxsc1tpXS5tX3RhcmdldFRvQ2hl
Y2spOwotICAgICAgICBpbmZvLmhvdFBhdGhPdGhlciA9IGxpbmtCdWZmZXIubG9jYXRpb25PZk5l
YXJDYWxsKG1fanNDYWxsc1tpXS5tX2Zhc3RDYWxsKTsKLSAgICAgICAgaW5mby5jYWxsZWVHUFIg
PSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4obV9qc0NhbGxzW2ldLm1fY2FsbGVlKTsKKyAgICAgICAg
bGlua0J1ZmZlci5saW5rKHJlY29yZC5tX3Nsb3dDYWxsLCBGdW5jdGlvblB0cihtX3ZtLT5nZXRD
VElTdHViKGdlbmVyYXRvcikuY29kZSgpLmV4ZWN1dGFibGVBZGRyZXNzKCkpKTsKKyAgICAgICAg
aW5mby5jYWxsUmV0dXJuTG9jYXRpb24gPSBsaW5rQnVmZmVyLmxvY2F0aW9uT2ZOZWFyQ2FsbChy
ZWNvcmQubV9zbG93Q2FsbCk7CisgICAgICAgIGluZm8uaG90UGF0aEJlZ2luID0gbGlua0J1ZmZl
ci5sb2NhdGlvbk9mKHJlY29yZC5tX3RhcmdldFRvQ2hlY2spOworICAgICAgICBpbmZvLmhvdFBh
dGhPdGhlciA9IGxpbmtCdWZmZXIubG9jYXRpb25PZk5lYXJDYWxsKHJlY29yZC5tX2Zhc3RDYWxs
KTsKICAgICB9CiAgICAgCiAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIG9zckV4aXRUaHVuayA9
IHZtKCktPmdldENUSVN0dWIob3NyRXhpdEdlbmVyYXRpb25UaHVua0dlbmVyYXRvcik7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb21waWxlci5oCShyZXZpc2lvbiAx
NjYxMDkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmgJKHdv
cmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDExLCAy
MDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAx
MSwgMjAxMywgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTIyNiw5ICsyMjYsOSBAQCBwdWJsaWM6CiAgICAgICAg
IHJldHVybiBtX2pzQ2FsbHMuc2l6ZSgpOwogICAgIH0KIAotICAgIHZvaWQgYWRkSlNDYWxsKENh
bGwgZmFzdENhbGwsIENhbGwgc2xvd0NhbGwsIERhdGFMYWJlbFB0ciB0YXJnZXRUb0NoZWNrLCBD
YWxsTGlua0luZm86OkNhbGxUeXBlIGNhbGxUeXBlLCBHUFJSZWcgY2FsbGVlLCBDb2RlT3JpZ2lu
IGNvZGVPcmlnaW4pCisgICAgdm9pZCBhZGRKU0NhbGwoQ2FsbCBmYXN0Q2FsbCwgQ2FsbCBzbG93
Q2FsbCwgRGF0YUxhYmVsUHRyIHRhcmdldFRvQ2hlY2ssIENhbGxMaW5rSW5mbyogaW5mbykKICAg
ICB7Ci0gICAgICAgIG1fanNDYWxscy5hcHBlbmQoSlNDYWxsUmVjb3JkKGZhc3RDYWxsLCBzbG93
Q2FsbCwgdGFyZ2V0VG9DaGVjaywgY2FsbFR5cGUsIGNhbGxlZSwgY29kZU9yaWdpbikpOworICAg
ICAgICBtX2pzQ2FsbHMuYXBwZW5kKEpTQ2FsbFJlY29yZChmYXN0Q2FsbCwgc2xvd0NhbGwsIHRh
cmdldFRvQ2hlY2ssIGluZm8pKTsKICAgICB9CiAgICAgCiAgICAgdm9pZCBhZGRXZWFrUmVmZXJl
bmNlKEpTQ2VsbCogdGFyZ2V0KQpAQCAtMzUzLDIyICszNTMsMTggQEAgcHJpdmF0ZToKICAgICBW
ZWN0b3I8TGFiZWw+IG1fYmxvY2tIZWFkczsKIAogICAgIHN0cnVjdCBKU0NhbGxSZWNvcmQgewot
ICAgICAgICBKU0NhbGxSZWNvcmQoQ2FsbCBmYXN0Q2FsbCwgQ2FsbCBzbG93Q2FsbCwgRGF0YUxh
YmVsUHRyIHRhcmdldFRvQ2hlY2ssIENhbGxMaW5rSW5mbzo6Q2FsbFR5cGUgY2FsbFR5cGUsIEdQ
UlJlZyBjYWxsZWUsIENvZGVPcmlnaW4gY29kZU9yaWdpbikKKyAgICAgICAgSlNDYWxsUmVjb3Jk
KENhbGwgZmFzdENhbGwsIENhbGwgc2xvd0NhbGwsIERhdGFMYWJlbFB0ciB0YXJnZXRUb0NoZWNr
LCBDYWxsTGlua0luZm8qIGluZm8pCiAgICAgICAgICAgICA6IG1fZmFzdENhbGwoZmFzdENhbGwp
CiAgICAgICAgICAgICAsIG1fc2xvd0NhbGwoc2xvd0NhbGwpCiAgICAgICAgICAgICAsIG1fdGFy
Z2V0VG9DaGVjayh0YXJnZXRUb0NoZWNrKQotICAgICAgICAgICAgLCBtX2NhbGxUeXBlKGNhbGxU
eXBlKQotICAgICAgICAgICAgLCBtX2NhbGxlZShjYWxsZWUpCi0gICAgICAgICAgICAsIG1fY29k
ZU9yaWdpbihjb2RlT3JpZ2luKQorICAgICAgICAgICAgLCBtX2luZm8oaW5mbykKICAgICAgICAg
ewogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICBDYWxsIG1fZmFzdENhbGw7CiAgICAgICAg
IENhbGwgbV9zbG93Q2FsbDsKICAgICAgICAgRGF0YUxhYmVsUHRyIG1fdGFyZ2V0VG9DaGVjazsK
LSAgICAgICAgQ2FsbExpbmtJbmZvOjpDYWxsVHlwZSBtX2NhbGxUeXBlOwotICAgICAgICBHUFJS
ZWcgbV9jYWxsZWU7Ci0gICAgICAgIENvZGVPcmlnaW4gbV9jb2RlT3JpZ2luOworICAgICAgICBD
YWxsTGlua0luZm8qIG1faW5mbzsKICAgICB9OwogICAgIAogICAgIFZlY3RvcjxJbmxpbmVDYWNo
ZVdyYXBwZXI8SklUR2V0QnlJZEdlbmVyYXRvcj4sIDQ+IG1fZ2V0QnlJZHM7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXRDb21waWxlckNvbW1vbi5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0Q29tcGlsZXJDb21t
b24uY3BwCShyZXZpc2lvbiAxNjYxMDkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R09TUkV4aXRDb21waWxlckNvbW1vbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTk4LDkgKzk4LDEx
IEBAIHZvaWQgcmVpZnlJbmxpbmVkQ2FsbEZyYW1lcyhDQ2FsbEhlbHBlcnMKICAgICAgICAgQ29k
ZUJsb2NrKiBiYXNlbGluZUNvZGVCbG9jayA9IGppdC5iYXNlbGluZUNvZGVCbG9ja0Zvcihjb2Rl
T3JpZ2luKTsKICAgICAgICAgQ29kZUJsb2NrKiBiYXNlbGluZUNvZGVCbG9ja0ZvckNhbGxlciA9
IGppdC5iYXNlbGluZUNvZGVCbG9ja0ZvcihpbmxpbmVDYWxsRnJhbWUtPmNhbGxlcik7CiAgICAg
ICAgIHVuc2lnbmVkIGNhbGxCeXRlY29kZUluZGV4ID0gaW5saW5lQ2FsbEZyYW1lLT5jYWxsZXIu
Ynl0ZWNvZGVJbmRleDsKLSAgICAgICAgQ2FsbExpbmtJbmZvJiBjYWxsTGlua0luZm8gPSBiYXNl
bGluZUNvZGVCbG9ja0ZvckNhbGxlci0+Z2V0Q2FsbExpbmtJbmZvKGNhbGxCeXRlY29kZUluZGV4
KTsKKyAgICAgICAgQ2FsbExpbmtJbmZvKiBjYWxsTGlua0luZm8gPQorICAgICAgICAgICAgYmFz
ZWxpbmVDb2RlQmxvY2tGb3JDYWxsZXItPmdldENhbGxMaW5rSW5mb0ZvckJ5dGVjb2RlSW5kZXgo
Y2FsbEJ5dGVjb2RlSW5kZXgpOworICAgICAgICBSRUxFQVNFX0FTU0VSVChjYWxsTGlua0luZm8p
OwogICAgICAgICAKLSAgICAgICAgdm9pZCoganVtcFRhcmdldCA9IGNhbGxMaW5rSW5mby5jYWxs
UmV0dXJuTG9jYXRpb24uZXhlY3V0YWJsZUFkZHJlc3MoKTsKKyAgICAgICAgdm9pZCoganVtcFRh
cmdldCA9IGNhbGxMaW5rSW5mby0+Y2FsbFJldHVybkxvY2F0aW9uLmV4ZWN1dGFibGVBZGRyZXNz
KCk7CiAKICAgICAgICAgR1BSUmVnIGNhbGxlckZyYW1lR1BSOwogICAgICAgICBpZiAoaW5saW5l
Q2FsbEZyYW1lLT5jYWxsZXIuaW5saW5lQ2FsbEZyYW1lKSB7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAJKHJldmlzaW9uIDE2
NjEwOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTcyMSwxNCArNzIxLDkgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJ
VDo6ZW1pdENhbGwoTm9kZSogbm9kZQogICAgIAogICAgIHNsb3dQYXRoLmxpbmsoJm1faml0KTsK
ICAgICAKLSAgICBpZiAobV9qaXQuZ3JhcGgoKS5tX3BsYW4ud2lsbFRyeVRvVGllclVwKSB7Ci0g
ICAgICAgIG1faml0LmFkZDMyKAotICAgICAgICAgICAgVHJ1c3RlZEltbTMyKDEpLAotICAgICAg
ICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFic29sdXRlQWRkcmVzcygKLSAgICAgICAgICAgICAgICBt
X2ppdC5qaXRDb2RlKCktPnNsb3dQYXRoQ2FsbHMuYmVnaW4oKSArIG1faml0LmN1cnJlbnRKU0Nh
bGxJbmRleCgpKSk7Ci0gICAgfQotICAgIAogICAgIG1faml0Lm1vdmUoY2FsbGVlR1BSLCBHUFJJ
bmZvOjpyZWdUMCk7IC8vIENhbGxlZSBuZWVkcyB0byBiZSBpbiByZWdUMAorICAgIENhbGxMaW5r
SW5mbyogY2FsbExpbmtJbmZvID0gbV9qaXQuY29kZUJsb2NrKCktPmFkZENhbGxMaW5rSW5mbygp
OworICAgIG1faml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIoY2FsbExpbmtJ
bmZvKSwgR1BSSW5mbzo6cmVnVDIpOyAvLyBMaW5rIGluZm8gbmVlZHMgdG8gYmUgaW4gcmVnVDIK
ICAgICBKSVRDb21waWxlcjo6Q2FsbCBzbG93Q2FsbCA9IG1faml0Lm5lYXJDYWxsKCk7CiAgICAg
CiAgICAgZG9uZS5saW5rKCZtX2ppdCk7CkBAIC03MzcsNyArNzMyLDExIEBAIHZvaWQgU3BlY3Vs
YXRpdmVKSVQ6OmVtaXRDYWxsKE5vZGUqIG5vZGUKICAgICAKICAgICBqc1ZhbHVlUmVzdWx0KHJl
c3VsdEdQUiwgbV9jdXJyZW50Tm9kZSwgRGF0YUZvcm1hdEpTLCBVc2VDaGlsZHJlbkNhbGxlZEV4
cGxpY2l0bHkpOwogICAgIAotICAgIG1faml0LmFkZEpTQ2FsbChmYXN0Q2FsbCwgc2xvd0NhbGws
IHRhcmdldFRvQ2hlY2ssIGNhbGxUeXBlLCBjYWxsZWVHUFIsIG1fY3VycmVudE5vZGUtPm9yaWdp
bi5zZW1hbnRpYyk7CisgICAgY2FsbExpbmtJbmZvLT5jYWxsVHlwZSA9IGNhbGxUeXBlOworICAg
IGNhbGxMaW5rSW5mby0+Y29kZU9yaWdpbiA9IG1fY3VycmVudE5vZGUtPm9yaWdpbi5zZW1hbnRp
YzsKKyAgICBjYWxsTGlua0luZm8tPmNhbGxlZUdQUiA9IGNhbGxlZUdQUjsKKyAgICAKKyAgICBt
X2ppdC5hZGRKU0NhbGwoZmFzdENhbGwsIHNsb3dDYWxsLCB0YXJnZXRUb0NoZWNrLCBjYWxsTGlu
a0luZm8pOwogfQogCiAvLyBDbGFuZyBzaG91bGQgYWxsb3cgdW5yZWFjaGFibGUgW1tjbGFuZzo6
ZmFsbHRocm91Z2hdXSBpbiB0ZW1wbGF0ZSBmdW5jdGlvbnMgaWYgYW55IHRlbXBsYXRlIGV4cGFu
c2lvbiB1c2VzIGl0CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0
aXZlSklULmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Nw
ZWN1bGF0aXZlSklULmNwcAkocmV2aXNpb24gMTY2MTA5KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE1MzIsNDAg
KzE1MzIsMTAgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y2hlY2tBcmd1bWVudFR5cGVzKAogICAg
IG1faXNDaGVja2luZ0FyZ3VtZW50VHlwZXMgPSBmYWxzZTsKIH0KIAotdm9pZCBTcGVjdWxhdGl2
ZUpJVDo6cHJlcGFyZUpJVENvZGVGb3JUaWVyVXAoKQotewotICAgIHVuc2lnbmVkIG51bWJlck9m
Q2FsbHMgPSAwOwotICAgIAotICAgIGZvciAoQmxvY2tJbmRleCBibG9ja0luZGV4ID0gbV9qaXQu
Z3JhcGgoKS5udW1CbG9ja3MoKTsgYmxvY2tJbmRleC0tOykgewotICAgICAgICBCYXNpY0Jsb2Nr
KiBibG9jayA9IG1faml0LmdyYXBoKCkuYmxvY2soYmxvY2tJbmRleCk7Ci0gICAgICAgIGlmICgh
YmxvY2spCi0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgCi0gICAgICAgIGZvciAodW5z
aWduZWQgbm9kZUluZGV4ID0gYmxvY2stPnNpemUoKTsgbm9kZUluZGV4LS07KSB7Ci0gICAgICAg
ICAgICBOb2RlKiBub2RlID0gYmxvY2stPmF0KG5vZGVJbmRleCk7Ci0gICAgICAgICAgICAKLSAg
ICAgICAgICAgIHN3aXRjaCAobm9kZS0+b3AoKSkgewotICAgICAgICAgICAgY2FzZSBDYWxsOgot
ICAgICAgICAgICAgY2FzZSBDb25zdHJ1Y3Q6Ci0gICAgICAgICAgICAgICAgbnVtYmVyT2ZDYWxs
cysrOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIAotICAgICAgICAg
ICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAg
ICAgfQotICAgIH0KLSAgICAKLSAgICBtX2ppdC5qaXRDb2RlKCktPnNsb3dQYXRoQ2FsbHMuZmls
bCgwLCBudW1iZXJPZkNhbGxzKTsKLX0KLQogYm9vbCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZSgp
CiB7CiAgICAgY2hlY2tBcmd1bWVudFR5cGVzKCk7CiAgICAgCi0gICAgaWYgKG1faml0LmdyYXBo
KCkubV9wbGFuLndpbGxUcnlUb1RpZXJVcCkKLSAgICAgICAgcHJlcGFyZUpJVENvZGVGb3JUaWVy
VXAoKTsKLSAgICAKICAgICBBU1NFUlQoIW1fY3VycmVudE5vZGUpOwogICAgIGZvciAoQmxvY2tJ
bmRleCBibG9ja0luZGV4ID0gMDsgYmxvY2tJbmRleCA8IG1faml0LmdyYXBoKCkubnVtQmxvY2tz
KCk7ICsrYmxvY2tJbmRleCkgewogICAgICAgICBtX2ppdC5zZXRGb3JCbG9ja0luZGV4KGJsb2Nr
SW5kZXgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJ
VC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRp
dmVKSVQuaAkocmV2aXNpb24gMTY2MTA5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdTcGVjdWxhdGl2ZUpJVC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMjAsOCArMTIwLDYgQEAgcHVi
bGljOgogCiAgICAgYm9vbCBjb21waWxlKCk7CiAgICAgCi0gICAgdm9pZCBwcmVwYXJlSklUQ29k
ZUZvclRpZXJVcCgpOwotICAgIAogICAgIHZvaWQgY3JlYXRlT1NSRW50cmllcygpOwogICAgIHZv
aWQgbGlua09TUkVudHJpZXMoTGlua0J1ZmZlciYpOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZnRsL0ZUTENvbXBpbGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9mdGwvRlRMQ29tcGlsZS5jcHAJKHJldmlzaW9uIDE2NjEwOSkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9mdGwvRlRMQ29tcGlsZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQwMiw3ICs0
MDIsNiBAQCBzdGF0aWMgdm9pZCBmaXhGdW5jdGlvbkJhc2VkT25TdGFja01hcHMoCiAgICAgCiAg
ICAgc3RkOjpzb3J0KHN0YXRlLmpzQ2FsbHMuYmVnaW4oKSwgc3RhdGUuanNDYWxscy5lbmQoKSk7
CiAgICAgCi0gICAgY29kZUJsb2NrLT5zZXROdW1iZXJPZkNhbGxMaW5rSW5mb3Moc3RhdGUuanND
YWxscy5zaXplKCkpOwogICAgIGZvciAodW5zaWduZWQgaSA9IHN0YXRlLmpzQ2FsbHMuc2l6ZSgp
OyBpLS07KSB7CiAgICAgICAgIEpTQ2FsbCYgY2FsbCA9IHN0YXRlLmpzQ2FsbHNbaV07CiAKQEAg
LTQxMiwxMyArNDExLDE1IEBAIHN0YXRpYyB2b2lkIGZpeEZ1bmN0aW9uQmFzZWRPblN0YWNrTWFw
cygKICAgICAgICAgY2hhciogc3RhcnRPZklDID0gYml0d2lzZV9jYXN0PGNoYXIqPihnZW5lcmF0
ZWRGdW5jdGlvbikgKyBjYWxsLm1faW5zdHJ1Y3Rpb25PZmZzZXQ7CiAgICAgICAgIAogICAgICAg
ICBMaW5rQnVmZmVyIGxpbmtCdWZmZXIodm0sICZmYXN0UGF0aEpJVCwgc3RhcnRPZklDLCBzaXpl
T2ZDYWxsKCkpOwotICAgICAgICBSRUxFQVNFX0FTU0VSVChsaW5rQnVmZmVyLmlzVmFsaWQoKSk7
CisgICAgICAgIGlmICghbGlua0J1ZmZlci5pc1ZhbGlkKCkpIHsKKyAgICAgICAgICAgIGRhdGFM
b2coIkZhaWxlZCB0byBpbnNlcnQgaW5saW5lIGNhY2hlIGZvciBjYWxsIGJlY2F1c2Ugd2UgdGhv
dWdodCB0aGUgc2l6ZSB3b3VsZCBiZSAiLCBzaXplT2ZDYWxsKCksICIgYnV0IGl0IGVuZGVkIHVw
IGJlaW5nICIsIGZhc3RQYXRoSklULm1fYXNzZW1ibGVyLmNvZGVTaXplKCksICIgcHJpb3IgdG8g
Y29tcGFjdGlvbi5cbiIpOworICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQo
KTsKKyAgICAgICAgfQogICAgICAgICAKICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFzc2VtYmxl
clR5cGVfVDo6ZmlsbE5vcHMoCiAgICAgICAgICAgICBzdGFydE9mSUMgKyBsaW5rQnVmZmVyLnNp
emUoKSwgc2l6ZU9mQ2FsbCgpIC0gbGlua0J1ZmZlci5zaXplKCkpOwogICAgICAgICAKLSAgICAg
ICAgQ2FsbExpbmtJbmZvJiBpbmZvID0gY29kZUJsb2NrLT5jYWxsTGlua0luZm8oaSk7Ci0gICAg
ICAgIGNhbGwubGluayh2bSwgbGlua0J1ZmZlciwgaW5mbyk7CisgICAgICAgIGNhbGwubGluayh2
bSwgbGlua0J1ZmZlcik7CiAgICAgfQogICAgIAogICAgIFJlcGF0Y2hCdWZmZXIgcmVwYXRjaEJ1
ZmZlcihjb2RlQmxvY2spOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExJbmxp
bmVDYWNoZVNpemUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwv
RlRMSW5saW5lQ2FjaGVTaXplLmNwcAkocmV2aXNpb24gMTY2MTA5KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2Z0bC9GVExJbmxpbmVDYWNoZVNpemUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02
Niw3ICs2Niw3IEBAIHNpemVfdCBzaXplT2ZDYWxsKCkKICNpZiBDUFUoQVJNNjQpCiAgICAgcmV0
dXJuIDQ0OwogI2Vsc2UKLSAgICByZXR1cm4gNDM7CisgICAgcmV0dXJuIDUzOwogI2VuZGlmCiB9
CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMSlNDYWxsLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEpTQ2FsbC5jcHAJKHJldmlzaW9u
IDE2NjEwOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMSlNDYWxsLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMzQsNyArMzQsOCBAQCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEZU
TCB7CiAKIEpTQ2FsbDo6SlNDYWxsKCkKICAgICA6IG1fc3RhY2ttYXBJRChVSU5UX01BWCkKLSAg
ICAsIG1fbm9kZSgwKQorICAgICwgbV9ub2RlKG51bGxwdHIpCisgICAgLCBtX2NhbGxMaW5rSW5m
byhudWxscHRyKQogICAgICwgbV9pbnN0cnVjdGlvbk9mZnNldChVSU5UX01BWCkKIHsKIH0KQEAg
LTQyLDEyICs0MywxNSBAQCBKU0NhbGw6OkpTQ2FsbCgpCiBKU0NhbGw6OkpTQ2FsbCh1bnNpZ25l
ZCBzdGFja21hcElELCBERkc6Ok5vZGUqIG5vZGUpCiAgICAgOiBtX3N0YWNrbWFwSUQoc3RhY2tt
YXBJRCkKICAgICAsIG1fbm9kZShub2RlKQorICAgICwgbV9jYWxsTGlua0luZm8obnVsbHB0cikK
ICAgICAsIG1faW5zdHJ1Y3Rpb25PZmZzZXQoMCkKIHsKIH0KIAogdm9pZCBKU0NhbGw6OmVtaXQo
Q0NhbGxIZWxwZXJzJiBqaXQpCiB7CisgICAgbV9jYWxsTGlua0luZm8gPSBqaXQuY29kZUJsb2Nr
KCktPmFkZENhbGxMaW5rSW5mbygpOworICAgIAogICAgIENDYWxsSGVscGVyczo6SnVtcCBzbG93
UGF0aCA9IGppdC5icmFuY2hQdHJXaXRoUGF0Y2goCiAgICAgICAgIENDYWxsSGVscGVyczo6Tm90
RXF1YWwsIEdQUkluZm86OnJlZ1QwLCBtX3RhcmdldFRvQ2hlY2ssCiAgICAgICAgIENDYWxsSGVs
cGVyczo6VHJ1c3RlZEltbVB0cigwKSk7CkBAIC02NSwxMiArNjksMTQgQEAgdm9pZCBKU0NhbGw6
OmVtaXQoQ0NhbGxIZWxwZXJzJiBqaXQpCiAgICAgQ0NhbGxIZWxwZXJzOjpKdW1wIGRvbmUgPSBq
aXQuanVtcCgpOwogICAgIAogICAgIHNsb3dQYXRoLmxpbmsoJmppdCk7CisgICAgCisgICAgaml0
Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKG1fY2FsbExpbmtJbmZvKSwgR1BSSW5m
bzo6cmVnVDIpOwogICAgIG1fc2xvd0NhbGwgPSBqaXQubmVhckNhbGwoKTsKICAgICAKICAgICBk
b25lLmxpbmsoJmppdCk7CiB9CiAKLXZvaWQgSlNDYWxsOjpsaW5rKFZNJiB2bSwgTGlua0J1ZmZl
ciYgbGlua0J1ZmZlciwgQ2FsbExpbmtJbmZvJiBjYWxsSW5mbykKK3ZvaWQgSlNDYWxsOjpsaW5r
KFZNJiB2bSwgTGlua0J1ZmZlciYgbGlua0J1ZmZlcikKIHsKICAgICBUaHVua0dlbmVyYXRvciBn
ZW5lcmF0b3IgPSBsaW5rVGh1bmtHZW5lcmF0b3JGb3IoCiAgICAgICAgIG1fbm9kZS0+b3AoKSA9
PSBERkc6OkNvbnN0cnVjdCA/IENvZGVGb3JDb25zdHJ1Y3QgOiBDb2RlRm9yQ2FsbCwKQEAgLTc5
LDEzICs4NSwxMyBAQCB2b2lkIEpTQ2FsbDo6bGluayhWTSYgdm0sIExpbmtCdWZmZXImIGxpCiAg
ICAgbGlua0J1ZmZlci5saW5rKAogICAgICAgICBtX3Nsb3dDYWxsLCBGdW5jdGlvblB0cih2bS5n
ZXRDVElTdHViKGdlbmVyYXRvcikuY29kZSgpLmV4ZWN1dGFibGVBZGRyZXNzKCkpKTsKICAgICAK
LSAgICBjYWxsSW5mby5pc0ZUTCA9IHRydWU7Ci0gICAgY2FsbEluZm8uY2FsbFR5cGUgPSBtX25v
ZGUtPm9wKCkgPT0gREZHOjpDb25zdHJ1Y3QgPyBDYWxsTGlua0luZm86OkNvbnN0cnVjdCA6IENh
bGxMaW5rSW5mbzo6Q2FsbDsKLSAgICBjYWxsSW5mby5jb2RlT3JpZ2luID0gbV9ub2RlLT5vcmln
aW4uc2VtYW50aWM7Ci0gICAgY2FsbEluZm8uY2FsbFJldHVybkxvY2F0aW9uID0gbGlua0J1ZmZl
ci5sb2NhdGlvbk9mTmVhckNhbGwobV9zbG93Q2FsbCk7Ci0gICAgY2FsbEluZm8uaG90UGF0aEJl
Z2luID0gbGlua0J1ZmZlci5sb2NhdGlvbk9mKG1fdGFyZ2V0VG9DaGVjayk7Ci0gICAgY2FsbElu
Zm8uaG90UGF0aE90aGVyID0gbGlua0J1ZmZlci5sb2NhdGlvbk9mTmVhckNhbGwobV9mYXN0Q2Fs
bCk7Ci0gICAgY2FsbEluZm8uY2FsbGVlR1BSID0gR1BSSW5mbzo6cmVnVDA7CisgICAgbV9jYWxs
TGlua0luZm8tPmlzRlRMID0gdHJ1ZTsKKyAgICBtX2NhbGxMaW5rSW5mby0+Y2FsbFR5cGUgPSBt
X25vZGUtPm9wKCkgPT0gREZHOjpDb25zdHJ1Y3QgPyBDYWxsTGlua0luZm86OkNvbnN0cnVjdCA6
IENhbGxMaW5rSW5mbzo6Q2FsbDsKKyAgICBtX2NhbGxMaW5rSW5mby0+Y29kZU9yaWdpbiA9IG1f
bm9kZS0+b3JpZ2luLnNlbWFudGljOworICAgIG1fY2FsbExpbmtJbmZvLT5jYWxsUmV0dXJuTG9j
YXRpb24gPSBsaW5rQnVmZmVyLmxvY2F0aW9uT2ZOZWFyQ2FsbChtX3Nsb3dDYWxsKTsKKyAgICBt
X2NhbGxMaW5rSW5mby0+aG90UGF0aEJlZ2luID0gbGlua0J1ZmZlci5sb2NhdGlvbk9mKG1fdGFy
Z2V0VG9DaGVjayk7CisgICAgbV9jYWxsTGlua0luZm8tPmhvdFBhdGhPdGhlciA9IGxpbmtCdWZm
ZXIubG9jYXRpb25PZk5lYXJDYWxsKG1fZmFzdENhbGwpOworICAgIG1fY2FsbExpbmtJbmZvLT5j
YWxsZWVHUFIgPSBHUFJJbmZvOjpyZWdUMDsKIH0KIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkZU
TApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExKU0NhbGwuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEpTQ2FsbC5oCShyZXZpc2lvbiAxNjYx
MDkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEpTQ2FsbC5oCSh3b3JraW5nIGNv
cHkpCkBAIC00Nyw3ICs0Nyw3IEBAIHB1YmxpYzoKICAgICBKU0NhbGwodW5zaWduZWQgc3RhY2tt
YXBJRCwgREZHOjpOb2RlKik7CiAgICAgCiAgICAgdm9pZCBlbWl0KENDYWxsSGVscGVycyYpOwot
ICAgIHZvaWQgbGluayhWTSYsIExpbmtCdWZmZXImLCBDYWxsTGlua0luZm8mKTsKKyAgICB2b2lk
IGxpbmsoVk0mLCBMaW5rQnVmZmVyJik7CiAgICAgCiAgICAgdW5zaWduZWQgc3RhY2ttYXBJRCgp
IGNvbnN0IHsgcmV0dXJuIG1fc3RhY2ttYXBJRDsgfQogICAgIApAQCAtNjIsNiArNjIsNyBAQCBw
cml2YXRlOgogICAgIENDYWxsSGVscGVyczo6RGF0YUxhYmVsUHRyIG1fdGFyZ2V0VG9DaGVjazsK
ICAgICBDQ2FsbEhlbHBlcnM6OkNhbGwgbV9mYXN0Q2FsbDsKICAgICBDQ2FsbEhlbHBlcnM6OkNh
bGwgbV9zbG93Q2FsbDsKKyAgICBDYWxsTGlua0luZm8qIG1fY2FsbExpbmtJbmZvOwogCiBwdWJs
aWM6CiAgICAgdWludDMyX3QgbV9pbnN0cnVjdGlvbk9mZnNldDsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvSklULmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0pJVC5jcHAJKHJldmlzaW9uIDE2NjEwOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvSklULmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjk0LDcgKzI5NCw3IEBAIHZvaWQgSklU
Ojpwcml2YXRlQ29tcGlsZU1haW5QYXNzKCkKICAgICAgICAgfQogICAgIH0KIAotICAgIFJFTEVB
U0VfQVNTRVJUKG1fY2FsbExpbmtJbmZvSW5kZXggPT0gbV9jYWxsU3RydWN0dXJlU3R1YkNvbXBp
bGF0aW9uSW5mby5zaXplKCkpOworICAgIFJFTEVBU0VfQVNTRVJUKG1fY2FsbExpbmtJbmZvSW5k
ZXggPT0gbV9jYWxsQ29tcGlsYXRpb25JbmZvLnNpemUoKSk7CiAKICNpZm5kZWYgTkRFQlVHCiAg
ICAgLy8gUmVzZXQgdGhpcywgaW4gb3JkZXIgdG8gZ3VhcmQgaXRzIHVzZSB3aXRoIEFTU0VSVHMu
CkBAIC00MjUsNyArNDI1LDcgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlU2xvd0Nhc2VzKCkK
IAogICAgIFJFTEVBU0VfQVNTRVJUKG1fZ2V0QnlJZEluZGV4ID09IG1fZ2V0QnlJZHMuc2l6ZSgp
KTsKICAgICBSRUxFQVNFX0FTU0VSVChtX3B1dEJ5SWRJbmRleCA9PSBtX3B1dEJ5SWRzLnNpemUo
KSk7Ci0gICAgUkVMRUFTRV9BU1NFUlQobV9jYWxsTGlua0luZm9JbmRleCA9PSBtX2NhbGxTdHJ1
Y3R1cmVTdHViQ29tcGlsYXRpb25JbmZvLnNpemUoKSk7CisgICAgUkVMRUFTRV9BU1NFUlQobV9j
YWxsTGlua0luZm9JbmRleCA9PSBtX2NhbGxDb21waWxhdGlvbkluZm8uc2l6ZSgpKTsKICAgICBS
RUxFQVNFX0FTU0VSVChudW1iZXJPZlZhbHVlUHJvZmlsZXMgPT0gbV9jb2RlQmxvY2stPm51bWJl
ck9mVmFsdWVQcm9maWxlcygpKTsKIAogI2lmbmRlZiBOREVCVUcKQEAgLTY0MywxNSArNjQzLDEy
IEBAIENvbXBpbGF0aW9uUmVzdWx0IEpJVDo6cHJpdmF0ZUNvbXBpbGUoSkkKICAgICAgICAgICAg
IGRpZmZlcmVuY2VCZXR3ZWVuQ29kZVB0cihiYWRUeXBlSnVtcCwgZG9uZVRhcmdldCksCiAgICAg
ICAgICAgICBkaWZmZXJlbmNlQmV0d2VlbkNvZGVQdHIocmV0dXJuQWRkcmVzcywgc2xvd1BhdGhU
YXJnZXQpKTsKICAgICB9Ci0gICAgbV9jb2RlQmxvY2stPnNldE51bWJlck9mQ2FsbExpbmtJbmZv
cyhtX2NhbGxTdHJ1Y3R1cmVTdHViQ29tcGlsYXRpb25JbmZvLnNpemUoKSk7Ci0gICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IG1fY29kZUJsb2NrLT5udW1iZXJPZkNhbGxMaW5rSW5mb3MoKTsg
KytpKSB7Ci0gICAgICAgIENhbGxMaW5rSW5mbyYgaW5mbyA9IG1fY29kZUJsb2NrLT5jYWxsTGlu
a0luZm8oaSk7Ci0gICAgICAgIGluZm8uY2FsbFR5cGUgPSBtX2NhbGxTdHJ1Y3R1cmVTdHViQ29t
cGlsYXRpb25JbmZvW2ldLmNhbGxUeXBlOwotICAgICAgICBpbmZvLmNvZGVPcmlnaW4gPSBDb2Rl
T3JpZ2luKG1fY2FsbFN0cnVjdHVyZVN0dWJDb21waWxhdGlvbkluZm9baV0uYnl0ZWNvZGVJbmRl
eCk7Ci0gICAgICAgIGluZm8uY2FsbFJldHVybkxvY2F0aW9uID0gcGF0Y2hCdWZmZXIubG9jYXRp
b25PZk5lYXJDYWxsKG1fY2FsbFN0cnVjdHVyZVN0dWJDb21waWxhdGlvbkluZm9baV0uY2FsbFJl
dHVybkxvY2F0aW9uKTsKLSAgICAgICAgaW5mby5ob3RQYXRoQmVnaW4gPSBwYXRjaEJ1ZmZlci5s
b2NhdGlvbk9mKG1fY2FsbFN0cnVjdHVyZVN0dWJDb21waWxhdGlvbkluZm9baV0uaG90UGF0aEJl
Z2luKTsKLSAgICAgICAgaW5mby5ob3RQYXRoT3RoZXIgPSBwYXRjaEJ1ZmZlci5sb2NhdGlvbk9m
TmVhckNhbGwobV9jYWxsU3RydWN0dXJlU3R1YkNvbXBpbGF0aW9uSW5mb1tpXS5ob3RQYXRoT3Ro
ZXIpOwotICAgICAgICBpbmZvLmNhbGxlZUdQUiA9IHJlZ1QwOworICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCBtX2NhbGxDb21waWxhdGlvbkluZm8uc2l6ZSgpOyArK2kpIHsKKyAgICAgICAg
Q2FsbENvbXBpbGF0aW9uSW5mbyYgY29tcGlsYXRpb25JbmZvID0gbV9jYWxsQ29tcGlsYXRpb25J
bmZvW2ldOworICAgICAgICBDYWxsTGlua0luZm8mIGluZm8gPSAqY29tcGlsYXRpb25JbmZvLmNh
bGxMaW5rSW5mbzsKKyAgICAgICAgaW5mby5jYWxsUmV0dXJuTG9jYXRpb24gPSBwYXRjaEJ1ZmZl
ci5sb2NhdGlvbk9mTmVhckNhbGwoY29tcGlsYXRpb25JbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbik7
CisgICAgICAgIGluZm8uaG90UGF0aEJlZ2luID0gcGF0Y2hCdWZmZXIubG9jYXRpb25PZihjb21w
aWxhdGlvbkluZm8uaG90UGF0aEJlZ2luKTsKKyAgICAgICAgaW5mby5ob3RQYXRoT3RoZXIgPSBw
YXRjaEJ1ZmZlci5sb2NhdGlvbk9mTmVhckNhbGwoY29tcGlsYXRpb25JbmZvLmhvdFBhdGhPdGhl
cik7CiAgICAgfQogCiAgICAgQ29tcGFjdEpJVENvZGVNYXA6OkVuY29kZXIgaml0Q29kZU1hcEVu
Y29kZXI7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmgJKHJldmlzaW9uIDE2NjEwOSkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSAr
MSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA4LCAyMDEyLCAyMDEzIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOCwgMjAxMiwgMjAxMywg
MjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKQEAgLTE2NywxMiArMTY3LDExIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAg
ICBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCByZXR1cm5BZGRyZXNzOwogICAgIH07CiAKLSAgICBzdHJ1
Y3QgU3RydWN0dXJlU3R1YkNvbXBpbGF0aW9uSW5mbyB7CisgICAgc3RydWN0IENhbGxDb21waWxh
dGlvbkluZm8gewogICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6RGF0YUxhYmVsUHRyIGhvdFBhdGhC
ZWdpbjsKICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgaG90UGF0aE90aGVyOwogICAgICAg
ICBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBjYWxsUmV0dXJuTG9jYXRpb247Ci0gICAgICAgIENhbGxM
aW5rSW5mbzo6Q2FsbFR5cGUgY2FsbFR5cGU7Ci0gICAgICAgIHVuc2lnbmVkIGJ5dGVjb2RlSW5k
ZXg7CisgICAgICAgIENhbGxMaW5rSW5mbyogY2FsbExpbmtJbmZvOwogICAgIH07CiAKICAgICAv
LyBOZWFyIGNhbGxzIGNhbiBvbmx5IGJlIHBhdGNoZWQgdG8gb3RoZXIgSklUIGNvZGUsIHJlZ3Vs
YXIgY2FsbHMgY2FuIGJlIHBhdGNoZWQgdG8gSklUIGNvZGUgb3IgcmVsaW5rZWQgdG8gc3R1YiBm
dW5jdGlvbnMuCkBAIC03OTUsNyArNzk0LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIFZl
Y3RvcjxKSVRHZXRCeUlkR2VuZXJhdG9yPiBtX2dldEJ5SWRzOwogICAgICAgICBWZWN0b3I8SklU
UHV0QnlJZEdlbmVyYXRvcj4gbV9wdXRCeUlkczsKICAgICAgICAgVmVjdG9yPEJ5VmFsQ29tcGls
YXRpb25JbmZvPiBtX2J5VmFsQ29tcGlsYXRpb25JbmZvOwotICAgICAgICBWZWN0b3I8U3RydWN0
dXJlU3R1YkNvbXBpbGF0aW9uSW5mbz4gbV9jYWxsU3RydWN0dXJlU3R1YkNvbXBpbGF0aW9uSW5m
bzsKKyAgICAgICAgVmVjdG9yPENhbGxDb21waWxhdGlvbkluZm8+IG1fY2FsbENvbXBpbGF0aW9u
SW5mbzsKICAgICAgICAgVmVjdG9yPEp1bXBUYWJsZT4gbV9qbXBUYWJsZTsKIAogICAgICAgICB1
bnNpZ25lZCBtX2J5dGVjb2RlT2Zmc2V0OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9KSVRDYWxsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VENhbGwuY3BwCShyZXZpc2lvbiAxNjYxMDkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0pJVENhbGwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMTksMTYgKzIxOSwxOSBAQCB2b2lkIEpJ
VDo6Y29tcGlsZU9wQ2FsbChPcGNvZGVJRCBvcGNvZGVJCiAgICAgSnVtcCBzbG93Q2FzZSA9IGJy
YW5jaFB0cldpdGhQYXRjaChOb3RFcXVhbCwgcmVnVDAsIGFkZHJlc3NPZkxpbmtlZEZ1bmN0aW9u
Q2hlY2ssIFRydXN0ZWRJbW1QdHIoMCkpOwogICAgIGFkZFNsb3dDYXNlKHNsb3dDYXNlKTsKIAot
ICAgIEFTU0VSVChtX2NhbGxTdHJ1Y3R1cmVTdHViQ29tcGlsYXRpb25JbmZvLnNpemUoKSA9PSBj
YWxsTGlua0luZm9JbmRleCk7Ci0gICAgbV9jYWxsU3RydWN0dXJlU3R1YkNvbXBpbGF0aW9uSW5m
by5hcHBlbmQoU3RydWN0dXJlU3R1YkNvbXBpbGF0aW9uSW5mbygpKTsKLSAgICBtX2NhbGxTdHJ1
Y3R1cmVTdHViQ29tcGlsYXRpb25JbmZvW2NhbGxMaW5rSW5mb0luZGV4XS5ob3RQYXRoQmVnaW4g
PSBhZGRyZXNzT2ZMaW5rZWRGdW5jdGlvbkNoZWNrOwotICAgIG1fY2FsbFN0cnVjdHVyZVN0dWJD
b21waWxhdGlvbkluZm9bY2FsbExpbmtJbmZvSW5kZXhdLmNhbGxUeXBlID0gQ2FsbExpbmtJbmZv
OjpjYWxsVHlwZUZvcihvcGNvZGVJRCk7Ci0gICAgbV9jYWxsU3RydWN0dXJlU3R1YkNvbXBpbGF0
aW9uSW5mb1tjYWxsTGlua0luZm9JbmRleF0uYnl0ZWNvZGVJbmRleCA9IG1fYnl0ZWNvZGVPZmZz
ZXQ7CisgICAgQVNTRVJUKG1fY2FsbENvbXBpbGF0aW9uSW5mby5zaXplKCkgPT0gY2FsbExpbmtJ
bmZvSW5kZXgpOworICAgIENhbGxMaW5rSW5mbyogaW5mbyA9IG1fY29kZUJsb2NrLT5hZGRDYWxs
TGlua0luZm8oKTsKKyAgICBpbmZvLT5jYWxsVHlwZSA9IENhbGxMaW5rSW5mbzo6Y2FsbFR5cGVG
b3Iob3Bjb2RlSUQpOworICAgIGluZm8tPmNvZGVPcmlnaW4gPSBDb2RlT3JpZ2luKG1fYnl0ZWNv
ZGVPZmZzZXQpOworICAgIGluZm8tPmNhbGxlZUdQUiA9IHJlZ1QwOworICAgIG1fY2FsbENvbXBp
bGF0aW9uSW5mby5hcHBlbmQoQ2FsbENvbXBpbGF0aW9uSW5mbygpKTsKKyAgICBtX2NhbGxDb21w
aWxhdGlvbkluZm9bY2FsbExpbmtJbmZvSW5kZXhdLmhvdFBhdGhCZWdpbiA9IGFkZHJlc3NPZkxp
bmtlZEZ1bmN0aW9uQ2hlY2s7CisgICAgbV9jYWxsQ29tcGlsYXRpb25JbmZvW2NhbGxMaW5rSW5m
b0luZGV4XS5jYWxsTGlua0luZm8gPSBpbmZvOwogCiAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1Qw
LCBPQkpFQ1RfT0ZGU0VUT0YoSlNGdW5jdGlvbiwgbV9zY29wZSkpLCByZWdUMik7CiAgICAgc3Rv
cmU2NChyZWdUMiwgQWRkcmVzcyhNYWNyb0Fzc2VtYmxlcjo6c3RhY2tQb2ludGVyUmVnaXN0ZXIs
IEpTU3RhY2s6OlNjb3BlQ2hhaW4gKiBzaXplb2YoUmVnaXN0ZXIpIC0gc2l6ZW9mKENhbGxlckZy
YW1lQW5kUEMpKSk7CiAKLSAgICBtX2NhbGxTdHJ1Y3R1cmVTdHViQ29tcGlsYXRpb25JbmZvW2Nh
bGxMaW5rSW5mb0luZGV4XS5ob3RQYXRoT3RoZXIgPSBlbWl0TmFrZWRDYWxsKCk7CisgICAgbV9j
YWxsQ29tcGlsYXRpb25JbmZvW2NhbGxMaW5rSW5mb0luZGV4XS5ob3RQYXRoT3RoZXIgPSBlbWl0
TmFrZWRDYWxsKCk7CiAKICAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKHN0YWNrUG9pbnRlck9mZnNl
dEZvcihtX2NvZGVCbG9jaykgKiBzaXplb2YoUmVnaXN0ZXIpKSwgY2FsbEZyYW1lUmVnaXN0ZXIs
IHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKICAgICBjaGVja1N0YWNrUG9pbnRlckFsaWdubWVudCgp
OwpAQCAtMjUxLDcgKzI1NCw4IEBAIHZvaWQgSklUOjpjb21waWxlT3BDYWxsU2xvd0Nhc2UoT3Bj
b2RlSUQKICAgICAgICAgb3Bjb2RlSUQgPT0gb3BfY29uc3RydWN0ID8gQ29kZUZvckNvbnN0cnVj
dCA6IENvZGVGb3JDYWxsLAogICAgICAgICBSZWdpc3RlclByZXNlcnZhdGlvbk5vdFJlcXVpcmVk
KTsKICAgICAKLSAgICBtX2NhbGxTdHJ1Y3R1cmVTdHViQ29tcGlsYXRpb25JbmZvW2NhbGxMaW5r
SW5mb0luZGV4XS5jYWxsUmV0dXJuTG9jYXRpb24gPSBlbWl0TmFrZWRDYWxsKG1fdm0tPmdldENU
SVN0dWIoZ2VuZXJhdG9yKS5jb2RlKCkpOworICAgIG1vdmUoVHJ1c3RlZEltbVB0cihtX2NhbGxD
b21waWxhdGlvbkluZm9bY2FsbExpbmtJbmZvSW5kZXhdLmNhbGxMaW5rSW5mbyksIHJlZ1QyKTsK
KyAgICBtX2NhbGxDb21waWxhdGlvbkluZm9bY2FsbExpbmtJbmZvSW5kZXhdLmNhbGxSZXR1cm5M
b2NhdGlvbiA9IGVtaXROYWtlZENhbGwobV92bS0+Z2V0Q1RJU3R1YihnZW5lcmF0b3IpLmNvZGUo
KSk7CiAKICAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKHN0YWNrUG9pbnRlck9mZnNldEZvcihtX2Nv
ZGVCbG9jaykgKiBzaXplb2YoUmVnaXN0ZXIpKSwgY2FsbEZyYW1lUmVnaXN0ZXIsIHN0YWNrUG9p
bnRlclJlZ2lzdGVyKTsKICAgICBjaGVja1N0YWNrUG9pbnRlckFsaWdubWVudCgpOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuY3BwCShyZXZpc2lvbiAx
NjYxMDkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC02NzQsNyArNjc0LDggQEAgc3RhdGljIHZvaWQqIGhhbmRsZUhvc3RD
YWxsKEV4ZWNTdGF0ZSogZQogfQogCiBpbmxpbmUgY2hhciogbGlua0ZvcigKLSAgICBFeGVjU3Rh
dGUqIGV4ZWNDYWxsZWUsIENvZGVTcGVjaWFsaXphdGlvbktpbmQga2luZCwgUmVnaXN0ZXJQcmVz
ZXJ2YXRpb25Nb2RlIHJlZ2lzdGVycykKKyAgICBFeGVjU3RhdGUqIGV4ZWNDYWxsZWUsIENhbGxM
aW5rSW5mbyogY2FsbExpbmtJbmZvLCBDb2RlU3BlY2lhbGl6YXRpb25LaW5kIGtpbmQsCisgICAg
UmVnaXN0ZXJQcmVzZXJ2YXRpb25Nb2RlIHJlZ2lzdGVycykKIHsKICAgICBFeGVjU3RhdGUqIGV4
ZWMgPSBleGVjQ2FsbGVlLT5jYWxsZXJGcmFtZSgpOwogICAgIFZNKiB2bSA9ICZleGVjLT52bSgp
OwpAQCAtNjkyLDcgKzY5Myw2IEBAIGlubGluZSBjaGFyKiBsaW5rRm9yKAogCiAgICAgTWFjcm9B
c3NlbWJsZXJDb2RlUHRyIGNvZGVQdHI7CiAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSAwOwot
ICAgIENhbGxMaW5rSW5mbyYgY2FsbExpbmtJbmZvID0gZXhlYy0+Y29kZUJsb2NrKCktPmdldENh
bGxMaW5rSW5mbyhleGVjQ2FsbGVlLT5yZXR1cm5QQygpKTsKICAgICBpZiAoZXhlY3V0YWJsZS0+
aXNIb3N0RnVuY3Rpb24oKSkKICAgICAgICAgY29kZVB0ciA9IGV4ZWN1dGFibGUtPmVudHJ5cG9p
bnRGb3IoKnZtLCBraW5kLCBNdXN0Q2hlY2tBcml0eSwgcmVnaXN0ZXJzKTsKICAgICBlbHNlIHsK
QEAgLTcwNSwzNyArNzA1LDM3IEBAIGlubGluZSBjaGFyKiBsaW5rRm9yKAogICAgICAgICB9CiAg
ICAgICAgIGNvZGVCbG9jayA9IGZ1bmN0aW9uRXhlY3V0YWJsZS0+Y29kZUJsb2NrRm9yKGtpbmQp
OwogICAgICAgICBBcml0eUNoZWNrTW9kZSBhcml0eTsKLSAgICAgICAgaWYgKGV4ZWNDYWxsZWUt
PmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKCkgPCBzdGF0aWNfY2FzdDxzaXplX3Q+KGNvZGVC
bG9jay0+bnVtUGFyYW1ldGVycygpKSB8fCBjYWxsTGlua0luZm8uY2FsbFR5cGUgPT0gQ2FsbExp
bmtJbmZvOjpDYWxsVmFyYXJncykKKyAgICAgICAgaWYgKGV4ZWNDYWxsZWUtPmFyZ3VtZW50Q291
bnRJbmNsdWRpbmdUaGlzKCkgPCBzdGF0aWNfY2FzdDxzaXplX3Q+KGNvZGVCbG9jay0+bnVtUGFy
YW1ldGVycygpKSB8fCBjYWxsTGlua0luZm8tPmNhbGxUeXBlID09IENhbGxMaW5rSW5mbzo6Q2Fs
bFZhcmFyZ3MpCiAgICAgICAgICAgICBhcml0eSA9IE11c3RDaGVja0FyaXR5OwogICAgICAgICBl
bHNlCiAgICAgICAgICAgICBhcml0eSA9IEFyaXR5Q2hlY2tOb3RSZXF1aXJlZDsKICAgICAgICAg
Y29kZVB0ciA9IGZ1bmN0aW9uRXhlY3V0YWJsZS0+ZW50cnlwb2ludEZvcigqdm0sIGtpbmQsIGFy
aXR5LCByZWdpc3RlcnMpOwogICAgIH0KLSAgICBpZiAoIWNhbGxMaW5rSW5mby5zZWVuT25jZSgp
KQotICAgICAgICBjYWxsTGlua0luZm8uc2V0U2VlbigpOworICAgIGlmICghY2FsbExpbmtJbmZv
LT5zZWVuT25jZSgpKQorICAgICAgICBjYWxsTGlua0luZm8tPnNldFNlZW4oKTsKICAgICBlbHNl
Ci0gICAgICAgIGxpbmtGb3IoZXhlY0NhbGxlZSwgY2FsbExpbmtJbmZvLCBjb2RlQmxvY2ssIGNh
bGxlZSwgY29kZVB0ciwga2luZCwgcmVnaXN0ZXJzKTsKKyAgICAgICAgbGlua0ZvcihleGVjQ2Fs
bGVlLCAqY2FsbExpbmtJbmZvLCBjb2RlQmxvY2ssIGNhbGxlZSwgY29kZVB0ciwga2luZCwgcmVn
aXN0ZXJzKTsKICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oY29kZVB0ci5leGVj
dXRhYmxlQWRkcmVzcygpKTsKIH0KIAotY2hhciogSklUX09QRVJBVElPTiBvcGVyYXRpb25MaW5r
Q2FsbChFeGVjU3RhdGUqIGV4ZWNDYWxsZWUpCitjaGFyKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlv
bkxpbmtDYWxsKEV4ZWNTdGF0ZSogZXhlY0NhbGxlZSwgQ2FsbExpbmtJbmZvKiBjYWxsTGlua0lu
Zm8pCiB7Ci0gICAgcmV0dXJuIGxpbmtGb3IoZXhlY0NhbGxlZSwgQ29kZUZvckNhbGwsIFJlZ2lz
dGVyUHJlc2VydmF0aW9uTm90UmVxdWlyZWQpOworICAgIHJldHVybiBsaW5rRm9yKGV4ZWNDYWxs
ZWUsIGNhbGxMaW5rSW5mbywgQ29kZUZvckNhbGwsIFJlZ2lzdGVyUHJlc2VydmF0aW9uTm90UmVx
dWlyZWQpOwogfQogCi1jaGFyKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkxpbmtDb25zdHJ1Y3Qo
RXhlY1N0YXRlKiBleGVjQ2FsbGVlKQorY2hhciogSklUX09QRVJBVElPTiBvcGVyYXRpb25MaW5r
Q29uc3RydWN0KEV4ZWNTdGF0ZSogZXhlY0NhbGxlZSwgQ2FsbExpbmtJbmZvKiBjYWxsTGlua0lu
Zm8pCiB7Ci0gICAgcmV0dXJuIGxpbmtGb3IoZXhlY0NhbGxlZSwgQ29kZUZvckNvbnN0cnVjdCwg
UmVnaXN0ZXJQcmVzZXJ2YXRpb25Ob3RSZXF1aXJlZCk7CisgICAgcmV0dXJuIGxpbmtGb3IoZXhl
Y0NhbGxlZSwgY2FsbExpbmtJbmZvLCBDb2RlRm9yQ29uc3RydWN0LCBSZWdpc3RlclByZXNlcnZh
dGlvbk5vdFJlcXVpcmVkKTsKIH0KIAotY2hhciogSklUX09QRVJBVElPTiBvcGVyYXRpb25MaW5r
Q2FsbFRoYXRQcmVzZXJ2ZXNSZWdzKEV4ZWNTdGF0ZSogZXhlY0NhbGxlZSkKK2NoYXIqIEpJVF9P
UEVSQVRJT04gb3BlcmF0aW9uTGlua0NhbGxUaGF0UHJlc2VydmVzUmVncyhFeGVjU3RhdGUqIGV4
ZWNDYWxsZWUsIENhbGxMaW5rSW5mbyogY2FsbExpbmtJbmZvKQogewotICAgIHJldHVybiBsaW5r
Rm9yKGV4ZWNDYWxsZWUsIENvZGVGb3JDYWxsLCBNdXN0UHJlc2VydmVSZWdpc3RlcnMpOworICAg
IHJldHVybiBsaW5rRm9yKGV4ZWNDYWxsZWUsIGNhbGxMaW5rSW5mbywgQ29kZUZvckNhbGwsIE11
c3RQcmVzZXJ2ZVJlZ2lzdGVycyk7CiB9CiAKLWNoYXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9u
TGlua0NvbnN0cnVjdFRoYXRQcmVzZXJ2ZXNSZWdzKEV4ZWNTdGF0ZSogZXhlY0NhbGxlZSkKK2No
YXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uTGlua0NvbnN0cnVjdFRoYXRQcmVzZXJ2ZXNSZWdz
KEV4ZWNTdGF0ZSogZXhlY0NhbGxlZSwgQ2FsbExpbmtJbmZvKiBjYWxsTGlua0luZm8pCiB7Ci0g
ICAgcmV0dXJuIGxpbmtGb3IoZXhlY0NhbGxlZSwgQ29kZUZvckNvbnN0cnVjdCwgTXVzdFByZXNl
cnZlUmVnaXN0ZXJzKTsKKyAgICByZXR1cm4gbGlua0ZvcihleGVjQ2FsbGVlLCBjYWxsTGlua0lu
Zm8sIENvZGVGb3JDb25zdHJ1Y3QsIE11c3RQcmVzZXJ2ZVJlZ2lzdGVycyk7CiB9CiAKIGlubGlu
ZSBjaGFyKiB2aXJ0dWFsRm9yV2l0aEZ1bmN0aW9uKApAQCAtODEzLDQ2ICs4MTMsNDQgQEAgc3Rh
dGljIGJvb2wgYXR0ZW1wdFRvT3B0aW1pemVDbG9zdXJlQ2FsbAogICAgIHJldHVybiB0cnVlOwog
fQogCi1jaGFyKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkxpbmtDbG9zdXJlQ2FsbChFeGVjU3Rh
dGUqIGV4ZWNDYWxsZWUpCitjaGFyKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkxpbmtDbG9zdXJl
Q2FsbChFeGVjU3RhdGUqIGV4ZWNDYWxsZWUsIENhbGxMaW5rSW5mbyogY2FsbExpbmtJbmZvKQog
ewogICAgIEpTQ2VsbCogY2FsbGVlQXNGdW5jdGlvbkNlbGw7CiAgICAgY2hhciogcmVzdWx0ID0g
dmlydHVhbEZvcldpdGhGdW5jdGlvbihleGVjQ2FsbGVlLCBDb2RlRm9yQ2FsbCwgUmVnaXN0ZXJQ
cmVzZXJ2YXRpb25Ob3RSZXF1aXJlZCwgY2FsbGVlQXNGdW5jdGlvbkNlbGwpOwotICAgIENhbGxM
aW5rSW5mbyYgY2FsbExpbmtJbmZvID0gZXhlY0NhbGxlZS0+Y2FsbGVyRnJhbWUoKS0+Y29kZUJs
b2NrKCktPmdldENhbGxMaW5rSW5mbyhleGVjQ2FsbGVlLT5yZXR1cm5QQygpKTsKIAotICAgIGlm
ICghYXR0ZW1wdFRvT3B0aW1pemVDbG9zdXJlQ2FsbChleGVjQ2FsbGVlLCBSZWdpc3RlclByZXNl
cnZhdGlvbk5vdFJlcXVpcmVkLCBjYWxsZWVBc0Z1bmN0aW9uQ2VsbCwgY2FsbExpbmtJbmZvKSkK
LSAgICAgICAgbGlua1Nsb3dGb3IoZXhlY0NhbGxlZSwgY2FsbExpbmtJbmZvLCBDb2RlRm9yQ2Fs
bCwgUmVnaXN0ZXJQcmVzZXJ2YXRpb25Ob3RSZXF1aXJlZCk7CisgICAgaWYgKCFhdHRlbXB0VG9P
cHRpbWl6ZUNsb3N1cmVDYWxsKGV4ZWNDYWxsZWUsIFJlZ2lzdGVyUHJlc2VydmF0aW9uTm90UmVx
dWlyZWQsIGNhbGxlZUFzRnVuY3Rpb25DZWxsLCAqY2FsbExpbmtJbmZvKSkKKyAgICAgICAgbGlu
a1Nsb3dGb3IoZXhlY0NhbGxlZSwgKmNhbGxMaW5rSW5mbywgQ29kZUZvckNhbGwsIFJlZ2lzdGVy
UHJlc2VydmF0aW9uTm90UmVxdWlyZWQpOwogICAgIAogICAgIHJldHVybiByZXN1bHQ7CiB9CiAK
LWNoYXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uVmlydHVhbENhbGwoRXhlY1N0YXRlKiBleGVj
Q2FsbGVlKQorY2hhciogSklUX09QRVJBVElPTiBvcGVyYXRpb25WaXJ0dWFsQ2FsbChFeGVjU3Rh
dGUqIGV4ZWNDYWxsZWUsIENhbGxMaW5rSW5mbyopCiB7ICAgIAogICAgIHJldHVybiB2aXJ0dWFs
Rm9yKGV4ZWNDYWxsZWUsIENvZGVGb3JDYWxsLCBSZWdpc3RlclByZXNlcnZhdGlvbk5vdFJlcXVp
cmVkKTsKIH0KIAotY2hhciogSklUX09QRVJBVElPTiBvcGVyYXRpb25WaXJ0dWFsQ29uc3RydWN0
KEV4ZWNTdGF0ZSogZXhlY0NhbGxlZSkKK2NoYXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uVmly
dHVhbENvbnN0cnVjdChFeGVjU3RhdGUqIGV4ZWNDYWxsZWUsIENhbGxMaW5rSW5mbyopCiB7CiAg
ICAgcmV0dXJuIHZpcnR1YWxGb3IoZXhlY0NhbGxlZSwgQ29kZUZvckNvbnN0cnVjdCwgUmVnaXN0
ZXJQcmVzZXJ2YXRpb25Ob3RSZXF1aXJlZCk7CiB9CiAKLWNoYXIqIEpJVF9PUEVSQVRJT04gb3Bl
cmF0aW9uTGlua0Nsb3N1cmVDYWxsVGhhdFByZXNlcnZlc1JlZ3MoRXhlY1N0YXRlKiBleGVjQ2Fs
bGVlKQorY2hhciogSklUX09QRVJBVElPTiBvcGVyYXRpb25MaW5rQ2xvc3VyZUNhbGxUaGF0UHJl
c2VydmVzUmVncyhFeGVjU3RhdGUqIGV4ZWNDYWxsZWUsIENhbGxMaW5rSW5mbyogY2FsbExpbmtJ
bmZvKQogewogICAgIEpTQ2VsbCogY2FsbGVlQXNGdW5jdGlvbkNlbGw7CiAgICAgY2hhciogcmVz
dWx0ID0gdmlydHVhbEZvcldpdGhGdW5jdGlvbihleGVjQ2FsbGVlLCBDb2RlRm9yQ2FsbCwgTXVz
dFByZXNlcnZlUmVnaXN0ZXJzLCBjYWxsZWVBc0Z1bmN0aW9uQ2VsbCk7Ci0gICAgQ2FsbExpbmtJ
bmZvJiBjYWxsTGlua0luZm8gPSBleGVjQ2FsbGVlLT5jYWxsZXJGcmFtZSgpLT5jb2RlQmxvY2so
KS0+Z2V0Q2FsbExpbmtJbmZvKGV4ZWNDYWxsZWUtPnJldHVyblBDKCkpOwogCi0gICAgaWYgKCFh
dHRlbXB0VG9PcHRpbWl6ZUNsb3N1cmVDYWxsKGV4ZWNDYWxsZWUsIE11c3RQcmVzZXJ2ZVJlZ2lz
dGVycywgY2FsbGVlQXNGdW5jdGlvbkNlbGwsIGNhbGxMaW5rSW5mbykpCi0gICAgICAgIGxpbmtT
bG93Rm9yKGV4ZWNDYWxsZWUsIGNhbGxMaW5rSW5mbywgQ29kZUZvckNhbGwsIE11c3RQcmVzZXJ2
ZVJlZ2lzdGVycyk7CisgICAgaWYgKCFhdHRlbXB0VG9PcHRpbWl6ZUNsb3N1cmVDYWxsKGV4ZWND
YWxsZWUsIE11c3RQcmVzZXJ2ZVJlZ2lzdGVycywgY2FsbGVlQXNGdW5jdGlvbkNlbGwsICpjYWxs
TGlua0luZm8pKQorICAgICAgICBsaW5rU2xvd0ZvcihleGVjQ2FsbGVlLCAqY2FsbExpbmtJbmZv
LCBDb2RlRm9yQ2FsbCwgTXVzdFByZXNlcnZlUmVnaXN0ZXJzKTsKICAgICAKICAgICByZXR1cm4g
cmVzdWx0OwogfQogCi1jaGFyKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblZpcnR1YWxDYWxsVGhh
dFByZXNlcnZlc1JlZ3MoRXhlY1N0YXRlKiBleGVjQ2FsbGVlKQorY2hhciogSklUX09QRVJBVElP
TiBvcGVyYXRpb25WaXJ0dWFsQ2FsbFRoYXRQcmVzZXJ2ZXNSZWdzKEV4ZWNTdGF0ZSogZXhlY0Nh
bGxlZSwgQ2FsbExpbmtJbmZvKikKIHsgICAgCiAgICAgcmV0dXJuIHZpcnR1YWxGb3IoZXhlY0Nh
bGxlZSwgQ29kZUZvckNhbGwsIE11c3RQcmVzZXJ2ZVJlZ2lzdGVycyk7CiB9CiAKLWNoYXIqIEpJ
VF9PUEVSQVRJT04gb3BlcmF0aW9uVmlydHVhbENvbnN0cnVjdFRoYXRQcmVzZXJ2ZXNSZWdzKEV4
ZWNTdGF0ZSogZXhlY0NhbGxlZSkKK2NoYXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uVmlydHVh
bENvbnN0cnVjdFRoYXRQcmVzZXJ2ZXNSZWdzKEV4ZWNTdGF0ZSogZXhlY0NhbGxlZSwgQ2FsbExp
bmtJbmZvKikKIHsKICAgICByZXR1cm4gdmlydHVhbEZvcihleGVjQ2FsbGVlLCBDb2RlRm9yQ29u
c3RydWN0LCBNdXN0UHJlc2VydmVSZWdpc3RlcnMpOwogfQpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmgJKHJldmlzaW9uIDE2NjEwOSkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5oCSh3b3JraW5nIGNvcHkpCkBAIC02MCw2
ICs2MCw3IEBAIGV4dGVybiAiQyIgewogICAgIEFhcDogQXJyYXlBbGxvY2F0aW9uUHJvZmlsZSoK
ICAgICBDOiBKU0NlbGwqCiAgICAgQ2I6IENvZGVCbG9jayoKKyAgICBDbGk6IENhbGxMaW5rSW5m
byoKICAgICBEOiBkb3VibGUKICAgICBFOiBFeGVjU3RhdGUqCiAgICAgRjogQ2FsbEZyYW1lKgpA
QCAtMTY4LDYgKzE2OSw3IEBAIHR5cGVkZWYgdm9pZCBKSVRfT1BFUkFUSU9OICgqVl9KSVRPcGVy
YXQKIHR5cGVkZWYgdm9pZCBKSVRfT1BFUkFUSU9OICgqVl9KSVRPcGVyYXRpb25fRVZtKShFeGVj
U3RhdGUqLCBWTSopOwogdHlwZWRlZiBjaGFyKiBKSVRfT1BFUkFUSU9OICgqUF9KSVRPcGVyYXRp
b25fRSkoRXhlY1N0YXRlKik7CiB0eXBlZGVmIGNoYXIqIEpJVF9PUEVSQVRJT04gKCpQX0pJVE9w
ZXJhdGlvbl9FQykoRXhlY1N0YXRlKiwgSlNDZWxsKik7Cit0eXBlZGVmIGNoYXIqIEpJVF9PUEVS
QVRJT04gKCpQX0pJVE9wZXJhdGlvbl9FQ2xpKShFeGVjU3RhdGUqLCBDYWxsTGlua0luZm8qKTsK
IHR5cGVkZWYgY2hhciogSklUX09QRVJBVElPTiAoKlBfSklUT3BlcmF0aW9uX0VKUykoRXhlY1N0
YXRlKiwgRW5jb2RlZEpTVmFsdWUsIHNpemVfdCk7CiB0eXBlZGVmIGNoYXIqIEpJVF9PUEVSQVRJ
T04gKCpQX0pJVE9wZXJhdGlvbl9FTykoRXhlY1N0YXRlKiwgSlNPYmplY3QqKTsKIHR5cGVkZWYg
Y2hhciogSklUX09QRVJBVElPTiAoKlBfSklUT3BlcmF0aW9uX0VPUykoRXhlY1N0YXRlKiwgSlNP
YmplY3QqLCBzaXplX3QpOwpAQCAtMjE4LDE2ICsyMjAsMTYgQEAgdm9pZCBKSVRfT1BFUkFUSU9O
IG9wZXJhdGlvbkRpcmVjdFB1dEJ5Vgogdm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5
VmFsR2VuZXJpYyhFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUsIEVu
Y29kZWRKU1ZhbHVlKSBXVEZfSU5URVJOQUw7CiB2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9u
RGlyZWN0UHV0QnlWYWxHZW5lcmljKEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVk
SlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUpIFdURl9JTlRFUk5BTDsKIEVuY29kZWRKU1ZhbHVlIEpJ
VF9PUEVSQVRJT04gb3BlcmF0aW9uQ2FsbEV2YWwoRXhlY1N0YXRlKiwgRXhlY1N0YXRlKikgV1RG
X0lOVEVSTkFMOwotY2hhciogSklUX09QRVJBVElPTiBvcGVyYXRpb25MaW5rQ2FsbChFeGVjU3Rh
dGUqKSBXVEZfSU5URVJOQUw7Ci1jaGFyKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkxpbmtDbG9z
dXJlQ2FsbChFeGVjU3RhdGUqKSBXVEZfSU5URVJOQUw7Ci1jaGFyKiBKSVRfT1BFUkFUSU9OIG9w
ZXJhdGlvblZpcnR1YWxDYWxsKEV4ZWNTdGF0ZSopIFdURl9JTlRFUk5BTDsKLWNoYXIqIEpJVF9P
UEVSQVRJT04gb3BlcmF0aW9uVmlydHVhbENvbnN0cnVjdChFeGVjU3RhdGUqKSBXVEZfSU5URVJO
QUw7Ci1jaGFyKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkxpbmtDb25zdHJ1Y3QoRXhlY1N0YXRl
KikgV1RGX0lOVEVSTkFMOwotY2hhciogSklUX09QRVJBVElPTiBvcGVyYXRpb25MaW5rQ2FsbFRo
YXRQcmVzZXJ2ZXNSZWdzKEV4ZWNTdGF0ZSopIFdURl9JTlRFUk5BTDsKLWNoYXIqIEpJVF9PUEVS
QVRJT04gb3BlcmF0aW9uTGlua0Nsb3N1cmVDYWxsVGhhdFByZXNlcnZlc1JlZ3MoRXhlY1N0YXRl
KikgV1RGX0lOVEVSTkFMOwotY2hhciogSklUX09QRVJBVElPTiBvcGVyYXRpb25WaXJ0dWFsQ2Fs
bFRoYXRQcmVzZXJ2ZXNSZWdzKEV4ZWNTdGF0ZSopIFdURl9JTlRFUk5BTDsKLWNoYXIqIEpJVF9P
UEVSQVRJT04gb3BlcmF0aW9uVmlydHVhbENvbnN0cnVjdFRoYXRQcmVzZXJ2ZXNSZWdzKEV4ZWNT
dGF0ZSopIFdURl9JTlRFUk5BTDsKLWNoYXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uTGlua0Nv
bnN0cnVjdFRoYXRQcmVzZXJ2ZXNSZWdzKEV4ZWNTdGF0ZSopIFdURl9JTlRFUk5BTDsKK2NoYXIq
IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uTGlua0NhbGwoRXhlY1N0YXRlKiwgQ2FsbExpbmtJbmZv
KikgV1RGX0lOVEVSTkFMOworY2hhciogSklUX09QRVJBVElPTiBvcGVyYXRpb25MaW5rQ2xvc3Vy
ZUNhbGwoRXhlY1N0YXRlKiwgQ2FsbExpbmtJbmZvKikgV1RGX0lOVEVSTkFMOworY2hhciogSklU
X09QRVJBVElPTiBvcGVyYXRpb25WaXJ0dWFsQ2FsbChFeGVjU3RhdGUqLCBDYWxsTGlua0luZm8q
KSBXVEZfSU5URVJOQUw7CitjaGFyKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblZpcnR1YWxDb25z
dHJ1Y3QoRXhlY1N0YXRlKiwgQ2FsbExpbmtJbmZvKikgV1RGX0lOVEVSTkFMOworY2hhciogSklU
X09QRVJBVElPTiBvcGVyYXRpb25MaW5rQ29uc3RydWN0KEV4ZWNTdGF0ZSosIENhbGxMaW5rSW5m
byopIFdURl9JTlRFUk5BTDsKK2NoYXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uTGlua0NhbGxU
aGF0UHJlc2VydmVzUmVncyhFeGVjU3RhdGUqLCBDYWxsTGlua0luZm8qKSBXVEZfSU5URVJOQUw7
CitjaGFyKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkxpbmtDbG9zdXJlQ2FsbFRoYXRQcmVzZXJ2
ZXNSZWdzKEV4ZWNTdGF0ZSosIENhbGxMaW5rSW5mbyopIFdURl9JTlRFUk5BTDsKK2NoYXIqIEpJ
VF9PUEVSQVRJT04gb3BlcmF0aW9uVmlydHVhbENhbGxUaGF0UHJlc2VydmVzUmVncyhFeGVjU3Rh
dGUqLCBDYWxsTGlua0luZm8qKSBXVEZfSU5URVJOQUw7CitjaGFyKiBKSVRfT1BFUkFUSU9OIG9w
ZXJhdGlvblZpcnR1YWxDb25zdHJ1Y3RUaGF0UHJlc2VydmVzUmVncyhFeGVjU3RhdGUqLCBDYWxs
TGlua0luZm8qKSBXVEZfSU5URVJOQUw7CitjaGFyKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkxp
bmtDb25zdHJ1Y3RUaGF0UHJlc2VydmVzUmVncyhFeGVjU3RhdGUqLCBDYWxsTGlua0luZm8qKSBX
VEZfSU5URVJOQUw7CiAKIHNpemVfdCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkNvbXBhcmVMZXNz
KEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSkgV1RGX0lOVEVSTkFM
Owogc2l6ZV90IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uQ29tcGFyZUxlc3NFcShFeGVjU3RhdGUq
LCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUpIFdURl9JTlRFUk5BTDsKQEAgLTI5Nyw3
ICsyOTksNyBAQCB2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uSW5pdEdsb2JhbENvCiAKIH0g
Ly8gZXh0ZXJuICJDIgogCi1pbmxpbmUgUF9KSVRPcGVyYXRpb25fRSBvcGVyYXRpb25MaW5rRm9y
KAoraW5saW5lIFBfSklUT3BlcmF0aW9uX0VDbGkgb3BlcmF0aW9uTGlua0ZvcigKICAgICBDb2Rl
U3BlY2lhbGl6YXRpb25LaW5kIGtpbmQsIFJlZ2lzdGVyUHJlc2VydmF0aW9uTW9kZSByZWdpc3Rl
cnMpCiB7CiAgICAgc3dpdGNoIChraW5kKSB7CkBAIC0zMjIsNyArMzI0LDcgQEAgaW5saW5lIFBf
SklUT3BlcmF0aW9uX0Ugb3BlcmF0aW9uTGlua0ZvcgogICAgIHJldHVybiAwOwogfQogCi1pbmxp
bmUgUF9KSVRPcGVyYXRpb25fRSBvcGVyYXRpb25WaXJ0dWFsRm9yKAoraW5saW5lIFBfSklUT3Bl
cmF0aW9uX0VDbGkgb3BlcmF0aW9uVmlydHVhbEZvcigKICAgICBDb2RlU3BlY2lhbGl6YXRpb25L
aW5kIGtpbmQsIFJlZ2lzdGVyUHJlc2VydmF0aW9uTW9kZSByZWdpc3RlcnMpCiB7CiAgICAgc3dp
dGNoIChraW5kKSB7CkBAIC0zNDcsNyArMzQ5LDcgQEAgaW5saW5lIFBfSklUT3BlcmF0aW9uX0Ug
b3BlcmF0aW9uVmlydHVhbAogICAgIHJldHVybiAwOwogfQogCi1pbmxpbmUgUF9KSVRPcGVyYXRp
b25fRSBvcGVyYXRpb25MaW5rQ2xvc3VyZUNhbGxGb3IoUmVnaXN0ZXJQcmVzZXJ2YXRpb25Nb2Rl
IHJlZ2lzdGVycykKK2lubGluZSBQX0pJVE9wZXJhdGlvbl9FQ2xpIG9wZXJhdGlvbkxpbmtDbG9z
dXJlQ2FsbEZvcihSZWdpc3RlclByZXNlcnZhdGlvbk1vZGUgcmVnaXN0ZXJzKQogewogICAgIHN3
aXRjaCAocmVnaXN0ZXJzKSB7CiAgICAgY2FzZSBSZWdpc3RlclByZXNlcnZhdGlvbk5vdFJlcXVp
cmVkOgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZXBhdGNoLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlcGF0Y2guY3BwCShyZXZpc2lvbiAx
NjYxMDkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlcGF0Y2guY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xNDUyLDkgKzE0NTIsMTAgQEAgdm9pZCBsaW5rQ2xvc3VyZUNhbGwoCiAjaWYg
VVNFKEpTVkFMVUUzMl82NCkKICAgICBzdHViSml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVk
SW1tMzIoSlNWYWx1ZTo6Q2VsbFRhZyksIEdQUkluZm86OnJlZ1QxKTsKICNlbmRpZgotICAgIHN0
dWJKaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoY2FsbExpbmtJbmZvLmNhbGxS
ZXR1cm5Mb2NhdGlvbi5leGVjdXRhYmxlQWRkcmVzcygpKSwgR1BSSW5mbzo6cmVnVDIpOworICAg
IHN0dWJKaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoJmNhbGxMaW5rSW5mbyks
IEdQUkluZm86OnJlZ1QyKTsKKyAgICBzdHViSml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVk
SW1tUHRyKGNhbGxMaW5rSW5mby5jYWxsUmV0dXJuTG9jYXRpb24uZXhlY3V0YWJsZUFkZHJlc3Mo
KSksIEdQUkluZm86OnJlZ1Q0KTsKICAgICAKLSAgICBzdHViSml0LnJlc3RvcmVSZXR1cm5BZGRy
ZXNzQmVmb3JlUmV0dXJuKEdQUkluZm86OnJlZ1QyKTsKKyAgICBzdHViSml0LnJlc3RvcmVSZXR1
cm5BZGRyZXNzQmVmb3JlUmV0dXJuKEdQUkluZm86OnJlZ1Q0KTsKICAgICBBc3NlbWJseUhlbHBl
cnM6Okp1bXAgc2xvdyA9IHN0dWJKaXQuanVtcCgpOwogICAgIAogICAgIExpbmtCdWZmZXIgcGF0
Y2hCdWZmZXIoKnZtLCAmc3R1YkppdCwgY2FsbGVyQ29kZUJsb2NrKTsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvVGh1bmtHZW5lcmF0b3JzLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L1RodW5rR2VuZXJhdG9ycy5jcHAJKHJldmlzaW9uIDE2NjEw
OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvVGh1bmtHZW5lcmF0b3JzLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNzksMTMgKzc5LDEzIEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiB0aHJv
d0V4Y2VwdGlvbkZyb20KIH0KIAogc3RhdGljIHZvaWQgc2xvd1BhdGhGb3IoCi0gICAgQ0NhbGxI
ZWxwZXJzJiBqaXQsIFZNKiB2bSwgUF9KSVRPcGVyYXRpb25fRSBzbG93UGF0aEZ1bmN0aW9uKQor
ICAgIENDYWxsSGVscGVycyYgaml0LCBWTSogdm0sIFBfSklUT3BlcmF0aW9uX0VDbGkgc2xvd1Bh
dGhGdW5jdGlvbikKIHsKICAgICBqaXQuZW1pdEZ1bmN0aW9uUHJvbG9ndWUoKTsKICAgICBqaXQu
c3RvcmVQdHIoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsICZ2bS0+dG9wQ2FsbEZyYW1lKTsK
ICAgICBpZiAobWF4RnJhbWVFeHRlbnRGb3JTbG93UGF0aENhbGwpCiAgICAgICAgIGppdC5hZGRQ
dHIoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoLW1heEZyYW1lRXh0ZW50Rm9yU2xvd1BhdGhD
YWxsKSwgQ0NhbGxIZWxwZXJzOjpzdGFja1BvaW50ZXJSZWdpc3Rlcik7Ci0gICAgaml0LnNldHVw
QXJndW1lbnRzRXhlY1N0YXRlKCk7CisgICAgaml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0
ZShHUFJJbmZvOjpyZWdUMik7CiAgICAgaml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1t
UHRyKGJpdHdpc2VfY2FzdDx2b2lkKj4oc2xvd1BhdGhGdW5jdGlvbikpLCBHUFJJbmZvOjpub25B
cmdHUFIwKTsKICAgICBlbWl0UG9pbnRlclZhbGlkYXRpb24oaml0LCBHUFJJbmZvOjpub25BcmdH
UFIwKTsKICAgICBqaXQuY2FsbChHUFJJbmZvOjpub25BcmdHUFIwKTsKQEAgLTE3NCwzOSArMTc0
LDQ1IEBAIHN0YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgdmlydHVhbEZvclQKICAgICBDQ2Fs
bEhlbHBlcnMgaml0KHZtKTsKICAgICAKICAgICBDQ2FsbEhlbHBlcnM6Okp1bXBMaXN0IHNsb3dD
YXNlOworICAgIAorICAgIC8vIFRoaXMgaXMgYSBzbG93IHBhdGggZXhlY3V0aW9uLCBhbmQgcmVn
VDIgY29udGFpbnMgdGhlIENhbGxMaW5rSW5mby4gQ291bnQgdGhlCisgICAgLy8gc2xvdyBwYXRo
IGV4ZWN1dGlvbiBmb3IgdGhlIHByb2ZpbGVyLgorICAgIGppdC5hZGQzMigKKyAgICAgICAgQ0Nh
bGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoMSksCisgICAgICAgIENDYWxsSGVscGVyczo6QWRkcmVz
cyhHUFJJbmZvOjpyZWdUMiwgT0JKRUNUX09GRlNFVE9GKENhbGxMaW5rSW5mbywgc2xvd1BhdGhD
b3VudCkpKTsKIAogICAgIC8vIEZJWE1FOiB3ZSBzaG91bGQgaGF2ZSBhIHN0b3J5IGZvciBlbGlt
aW5hdGluZyB0aGVzZSBjaGVja3MuIEluIG1hbnkgY2FzZXMsCiAgICAgLy8gdGhlIERGRyBrbm93
cyB0aGF0IHRoZSB2YWx1ZSBpcyBkZWZpbml0ZWx5IGEgY2VsbCwgb3IgZGVmaW5pdGVseSBhIGZ1
bmN0aW9uLgogICAgIAogI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgaml0Lm1vdmUoQ0NhbGxIZWxw
ZXJzOjpUcnVzdGVkSW1tNjQoVGFnTWFzayksIEdQUkluZm86OnJlZ1QyKTsKKyAgICBqaXQubW92
ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW02NChUYWdNYXNrKSwgR1BSSW5mbzo6cmVnVDQpOwog
ICAgIAogICAgIHNsb3dDYXNlLmFwcGVuZCgKICAgICAgICAgaml0LmJyYW5jaFRlc3Q2NCgKLSAg
ICAgICAgICAgIENDYWxsSGVscGVyczo6Tm9uWmVybywgR1BSSW5mbzo6cmVnVDAsIEdQUkluZm86
OnJlZ1QyKSk7CisgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6Ok5vblplcm8sIEdQUkluZm86OnJl
Z1QwLCBHUFJJbmZvOjpyZWdUNCkpOwogI2Vsc2UKICAgICBzbG93Q2FzZS5hcHBlbmQoCiAgICAg
ICAgIGppdC5icmFuY2gzMigKICAgICAgICAgICAgIENDYWxsSGVscGVyczo6Tm90RXF1YWwsIEdQ
UkluZm86OnJlZ1QxLAogICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoSlNW
YWx1ZTo6Q2VsbFRhZykpKTsKICNlbmRpZgotICAgIEFzc2VtYmx5SGVscGVyczo6ZW1pdExvYWRT
dHJ1Y3R1cmUoaml0LCBHUFJJbmZvOjpyZWdUMCwgR1BSSW5mbzo6cmVnVDIsIEdQUkluZm86OnJl
Z1QxKTsKKyAgICBBc3NlbWJseUhlbHBlcnM6OmVtaXRMb2FkU3RydWN0dXJlKGppdCwgR1BSSW5m
bzo6cmVnVDAsIEdQUkluZm86OnJlZ1Q0LCBHUFJJbmZvOjpyZWdUMSk7CiAgICAgc2xvd0Nhc2Uu
YXBwZW5kKAogICAgICAgICBqaXQuYnJhbmNoUHRyKAogICAgICAgICAgICAgQ0NhbGxIZWxwZXJz
OjpOb3RFcXVhbCwKLSAgICAgICAgICAgIENDYWxsSGVscGVyczo6QWRkcmVzcyhHUFJJbmZvOjpy
ZWdUMiwgU3RydWN0dXJlOjpjbGFzc0luZm9PZmZzZXQoKSksCisgICAgICAgICAgICBDQ2FsbEhl
bHBlcnM6OkFkZHJlc3MoR1BSSW5mbzo6cmVnVDQsIFN0cnVjdHVyZTo6Y2xhc3NJbmZvT2Zmc2V0
KCkpLAogICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKEpTRnVuY3Rpb246
OmluZm8oKSkpKTsKICAgICAKICAgICAvLyBOb3cgd2Uga25vdyB3ZSBoYXZlIGEgSlNGdW5jdGlv
bi4KICAgICAKICAgICBqaXQubG9hZFB0cigKICAgICAgICAgQ0NhbGxIZWxwZXJzOjpBZGRyZXNz
KEdQUkluZm86OnJlZ1QwLCBKU0Z1bmN0aW9uOjpvZmZzZXRPZkV4ZWN1dGFibGUoKSksCi0gICAg
ICAgIEdQUkluZm86OnJlZ1QyKTsKKyAgICAgICAgR1BSSW5mbzo6cmVnVDQpOwogICAgIGppdC5s
b2FkUHRyKAogICAgICAgICBDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoCi0gICAgICAgICAgICBHUFJJ
bmZvOjpyZWdUMiwgRXhlY3V0YWJsZUJhc2U6Om9mZnNldE9mSklUQ29kZVdpdGhBcml0eUNoZWNr
Rm9yKGtpbmQsIHJlZ2lzdGVycykpLAotICAgICAgICBHUFJJbmZvOjpyZWdUMik7Ci0gICAgc2xv
d0Nhc2UuYXBwZW5kKGppdC5icmFuY2hUZXN0UHRyKENDYWxsSGVscGVyczo6WmVybywgR1BSSW5m
bzo6cmVnVDIpKTsKKyAgICAgICAgICAgIEdQUkluZm86OnJlZ1Q0LCBFeGVjdXRhYmxlQmFzZTo6
b2Zmc2V0T2ZKSVRDb2RlV2l0aEFyaXR5Q2hlY2tGb3Ioa2luZCwgcmVnaXN0ZXJzKSksCisgICAg
ICAgIEdQUkluZm86OnJlZ1Q0KTsKKyAgICBzbG93Q2FzZS5hcHBlbmQoaml0LmJyYW5jaFRlc3RQ
dHIoQ0NhbGxIZWxwZXJzOjpaZXJvLCBHUFJJbmZvOjpyZWdUNCkpOwogICAgIAogICAgIC8vIE5v
dyB3ZSBrbm93IHRoYXQgd2UgaGF2ZSBhIENvZGVCbG9jaywgYW5kIHdlJ3JlIGNvbW1pdHRlZCB0
byBtYWtpbmcgYSBmYXN0CiAgICAgLy8gY2FsbC4KQEAgLTIyMyw4ICsyMjksOCBAQCBzdGF0aWMg
TWFjcm9Bc3NlbWJsZXJDb2RlUmVmIHZpcnR1YWxGb3JUCiAjZW5kaWYKICAgICAKICAgICAvLyBN
YWtlIGEgdGFpbCBjYWxsLiBUaGlzIHdpbGwgcmV0dXJuIGJhY2sgdG8gSklUIGNvZGUuCi0gICAg
ZW1pdFBvaW50ZXJWYWxpZGF0aW9uKGppdCwgR1BSSW5mbzo6cmVnVDIpOwotICAgIGppdC5qdW1w
KEdQUkluZm86OnJlZ1QyKTsKKyAgICBlbWl0UG9pbnRlclZhbGlkYXRpb24oaml0LCBHUFJJbmZv
OjpyZWdUNCk7CisgICAgaml0Lmp1bXAoR1BSSW5mbzo6cmVnVDQpOwogCiAgICAgc2xvd0Nhc2Uu
bGluaygmaml0KTsKICAgICAK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>227595</attachid>
            <date>2014-03-22 20:06:05 -0700</date>
            <delta_ts>2014-03-22 21:26:19 -0700</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>70362</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTY2MTI3KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDk3IEBA
CisyMDE0LTAzLTIyICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
Q2FsbCBsaW5raW5nIHNsb3cgcGF0aHMgc2hvdWxkIGJlIHBhc3NlZCBhIENhbGxMaW5rSW5mbyog
ZGlyZWN0bHkgc28gdGhhdCB5b3UgY2FuIGNyZWF0ZSBhIGNhbGwgSUMgd2l0aG91dCBhZGRpbmcg
aXQgdG8gYW55IENvZGVCbG9ja3MKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTEzMDY0NAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorICAgICAgICAKKyAgICAgICAgVGhpcyBpcyBjb25jZXB0dWFsbHkgYSByZWFsbHkgc2ltcGxl
IGNoYW5nZSBidXQgaXQgaW52b2x2ZXMgdGhlIGZvbGxvd2luZzoKKyAgICAgICAgCisgICAgICAg
IC0gVGhlIGlubGluZSBwYXJ0IG9mIHRoZSBjYWxsIElDIHN0dWZmcyBhIHBvaW50ZXIgdG8gdGhl
IENhbGxMaW5rSW5mbyBpbnRvIHJlZ1QyLgorICAgICAgICAKKyAgICAgICAgLSBDb2RlQmxvY2sg
dXNlcyBhIEJhZyBvZiBDYWxsTGlua0luZm9zIGluc3RlYWQgb2YgYSBWZWN0b3IuCisgICAgICAg
IAorICAgICAgICAtIFJlbW92ZSB0aGUgc2lnbmlmaWNhbmNlIG9mIGEgQ2FsbExpbmtJbmZvJ3Mg
aW5kZXguIFRoaXMgbWVhbnMgdGhhdCBERkc6OkpJVENvZGUgbm8KKyAgICAgICAgICBsb25nZXIg
aGFzIGEgdmVjdG9yIG9mIHNsb3cgcGF0aCBjb3VudHMgdGhhdCBzaGFkb3dzIHRoZSBDYWxsTGlu
a0luZm8gdmVjdG9yLgorICAgICAgICAKKyAgICAgICAgLSBNYWtlIENhbGxMaW5rSW5mbyBoYXZl
IGl0cyBvd24gc2xvd1BhdGhDb3VudCwgd2hpY2ggY291bnRzIGFjdHVhbCBzbG93IHBhdGggZXhl
Y3V0aW9ucworICAgICAgICAgIGFuZCBub3QgYWxsIHJlbGlua2luZy4KKyAgICAgICAgCisgICAg
ICAgIFRoaXMgbWFrZXMgcGxhbmluZyBKUy0+SlMgY2FsbHMgaW5zaWRlIG90aGVyIGlubGluZSBj
YWNoZXMgb3Igc3R1YnMgYSBsb3QgZWFzaWVyLCBzaW5jZQorICAgICAgICB0aGUgQ2FsbExpbmtJ
bmZvIGFuZCB0aGUgY2FsbCBJQyBzbG93IHBhdGhzIG5vIGxvbmdlciByZWx5IG9uIHRoZSBjYWxs
IGJlaW5nIGFzc29jaWF0ZWQKKyAgICAgICAgd2l0aCBhIG9wX2NhbGwvb3BfY29uc3RydWN0IGlu
c3RydWN0aW9uIGFuZCBhIG1hY2hpbmUgY29kZSByZXR1cm4gUEMgd2l0aGluIHN1Y2ggYW4KKyAg
ICAgICAgaW5zdHJ1Y3Rpb24uCisKKyAgICAgICAgKiBieXRlY29kZS9DYWxsTGlua0luZm8uaDoK
KyAgICAgICAgKEpTQzo6Z2V0Q2FsbExpbmtJbmZvQ29kZU9yaWdpbik6CisgICAgICAgICogYnl0
ZWNvZGUvQ2FsbExpbmtTdGF0dXMuY3BwOgorICAgICAgICAoSlNDOjpDYWxsTGlua1N0YXR1czo6
Y29tcHV0ZUZvcik6CisgICAgICAgIChKU0M6OkNhbGxMaW5rU3RhdHVzOjpjb21wdXRlREZHU3Rh
dHVzZXMpOgorICAgICAgICAqIGJ5dGVjb2RlL0NhbGxMaW5rU3RhdHVzLmg6CisgICAgICAgICog
Ynl0ZWNvZGUvQ29kZUJsb2NrLmNwcDoKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpwcmludENh
bGxPcCk6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6ZHVtcEJ5dGVjb2RlKToKKyAgICAgICAg
KEpTQzo6Q29kZUJsb2NrOjpmaW5hbGl6ZVVuY29uZGl0aW9uYWxseSk6CisgICAgICAgIChKU0M6
OkNvZGVCbG9jazo6Z2V0Q2FsbExpbmtJbmZvTWFwKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2Nr
OjpnZXRDYWxsTGlua0luZm9Gb3JCeXRlY29kZUluZGV4KToKKyAgICAgICAgKEpTQzo6Q29kZUJs
b2NrOjphZGRDYWxsTGlua0luZm8pOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OnVubGlua0Nh
bGxzKToKKyAgICAgICAgKiBieXRlY29kZS9Db2RlQmxvY2suaDoKKyAgICAgICAgKEpTQzo6Q29k
ZUJsb2NrOjpzdHViSW5mb0JlZ2luKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpzdHViSW5m
b0VuZCk6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6Y2FsbExpbmtJbmZvc0JlZ2luKToKKyAg
ICAgICAgKEpTQzo6Q29kZUJsb2NrOjpjYWxsTGlua0luZm9zRW5kKToKKyAgICAgICAgKEpTQzo6
Q29kZUJsb2NrOjpieVZhbEluZm8pOgorICAgICAgICAqIGRmZy9ERkdCeXRlQ29kZVBhcnNlci5j
cHA6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUNhbGwpOgorICAg
ICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpJbmxpbmVTdGFja0VudHJ5OjpJbmxpbmVT
dGFja0VudHJ5KToKKyAgICAgICAgKiBkZmcvREZHSklUQ29kZS5oOgorICAgICAgICAqIGRmZy9E
RkdKSVRDb21waWxlci5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6SklUQ29tcGlsZXI6Omxpbmsp
OgorICAgICAgICAqIGRmZy9ERkdKSVRDb21waWxlci5oOgorICAgICAgICAoSlNDOjpERkc6OkpJ
VENvbXBpbGVyOjphZGRKU0NhbGwpOgorICAgICAgICAoSlNDOjpERkc6OkpJVENvbXBpbGVyOjpK
U0NhbGxSZWNvcmQ6OkpTQ2FsbFJlY29yZCk6CisgICAgICAgICogZGZnL0RGR09TUkV4aXRDb21w
aWxlckNvbW1vbi5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6cmVpZnlJbmxpbmVkQ2FsbEZyYW1l
cyk6CisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcDoKKyAgICAgICAgKEpTQzo6
REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZSk6CisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0
aXZlSklULmg6CisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwOgorICAg
ICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjplbWl0Q2FsbCk6CisgICAgICAgICogZGZn
L0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZl
SklUOjplbWl0Q2FsbCk6CisgICAgICAgICogZnRsL0ZUTENvbXBpbGUuY3BwOgorICAgICAgICAo
SlNDOjpGVEw6OmZpeEZ1bmN0aW9uQmFzZWRPblN0YWNrTWFwcyk6CisgICAgICAgICogZnRsL0ZU
TElubGluZUNhY2hlU2l6ZS5jcHA6CisgICAgICAgIChKU0M6OkZUTDo6c2l6ZU9mQ2FsbCk6Cisg
ICAgICAgICogZnRsL0ZUTEpTQ2FsbC5jcHA6CisgICAgICAgIChKU0M6OkZUTDo6SlNDYWxsOjpK
U0NhbGwpOgorICAgICAgICAoSlNDOjpGVEw6OkpTQ2FsbDo6ZW1pdCk6CisgICAgICAgIChKU0M6
OkZUTDo6SlNDYWxsOjpsaW5rKToKKyAgICAgICAgKiBmdGwvRlRMSlNDYWxsLmg6CisgICAgICAg
ICogaml0L0pJVC5jcHA6CisgICAgICAgIChKU0M6OkpJVDo6cHJpdmF0ZUNvbXBpbGVNYWluUGFz
cyk6CisgICAgICAgIChKU0M6OkpJVDo6cHJpdmF0ZUNvbXBpbGVTbG93Q2FzZXMpOgorICAgICAg
ICAoSlNDOjpKSVQ6OnByaXZhdGVDb21waWxlKToKKyAgICAgICAgKiBqaXQvSklULmg6CisgICAg
ICAgICogaml0L0pJVENhbGwuY3BwOgorICAgICAgICAoSlNDOjpKSVQ6OmNvbXBpbGVPcENhbGwp
OgorICAgICAgICAoSlNDOjpKSVQ6OmNvbXBpbGVPcENhbGxTbG93Q2FzZSk6CisgICAgICAgICog
aml0L0pJVENhbGwzMl82NC5jcHA6CisgICAgICAgIChKU0M6OkpJVDo6Y29tcGlsZU9wQ2FsbCk6
CisgICAgICAgIChKU0M6OkpJVDo6Y29tcGlsZU9wQ2FsbFNsb3dDYXNlKToKKyAgICAgICAgKiBq
aXQvSklUT3BlcmF0aW9ucy5jcHA6CisgICAgICAgICogaml0L0pJVE9wZXJhdGlvbnMuaDoKKyAg
ICAgICAgKEpTQzo6b3BlcmF0aW9uTGlua0Zvcik6CisgICAgICAgIChKU0M6Om9wZXJhdGlvblZp
cnR1YWxGb3IpOgorICAgICAgICAoSlNDOjpvcGVyYXRpb25MaW5rQ2xvc3VyZUNhbGxGb3IpOgor
ICAgICAgICAqIGppdC9SZXBhdGNoLmNwcDoKKyAgICAgICAgKEpTQzo6bGlua0Nsb3N1cmVDYWxs
KToKKyAgICAgICAgKiBqaXQvVGh1bmtHZW5lcmF0b3JzLmNwcDoKKyAgICAgICAgKEpTQzo6c2xv
d1BhdGhGb3IpOgorICAgICAgICAoSlNDOjp2aXJ0dWFsRm9yVGh1bmtHZW5lcmF0b3IpOgorICAg
ICAgICAqIHRlc3RzL3N0cmVzcy9ldmFsLXRoYXQtaXMtbm90LWV2YWwuanM6IEFkZGVkLgorCiAy
MDE0LTAzLTIyICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CiAKICAgICAgICAgVW5y
ZXZpZXdlZCwgZml4IEZUTCBidWlsZC4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9DYWxsTGlua0luZm8uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9DYWxsTGlua0luZm8uY3BwCShyZXZpc2lvbiAxNjYxMjcpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ2FsbExpbmtJbmZvLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMzAsNiArMzAsNyBAQAogI2luY2x1ZGUgIkRGR1RodW5rcy5oIgogI2luY2x1ZGUgIkpTQ0lu
bGluZXMuaCIKICNpbmNsdWRlICJSZXBhdGNoQnVmZmVyLmgiCisjaW5jbHVkZSA8d3RmL05ldmVy
RGVzdHJveWVkLmg+CiAKICNpZiBFTkFCTEUoSklUKQogbmFtZXNwYWNlIEpTQyB7CkBAIC01Niw2
ICs1NywxMiBAQCB2b2lkIENhbGxMaW5rSW5mbzo6dW5saW5rKFZNJiB2bSwgUmVwYXRjCiAgICAg
ICAgIHJlbW92ZSgpOwogfQogCitDYWxsTGlua0luZm8mIENhbGxMaW5rSW5mbzo6ZHVtbXkoKQor
eworICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxDYWxsTGlua0luZm8+IGR1bW15OworICAgIHJl
dHVybiBkdW1teTsKK30KKwogfSAvLyBuYW1lc3BhY2UgSlNDCiAjZW5kaWYgLy8gRU5BQkxFKEpJ
VCkKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NhbGxMaW5rSW5mby5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9DYWxsTGlua0lu
Zm8uaAkocmV2aXNpb24gMTY2MTI3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L0NhbGxMaW5rSW5mby5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTIsIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoK
ICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC01OCw2ICs1OCw3IEBAIHN0cnVjdCBDYWxs
TGlua0luZm8gOiBwdWJsaWMgQmFzaWNSYXdTZW4KICAgICAgICAgLCBoYXNTZWVuU2hvdWxkUmVw
YXRjaChmYWxzZSkKICAgICAgICAgLCBoYXNTZWVuQ2xvc3VyZShmYWxzZSkKICAgICAgICAgLCBj
YWxsVHlwZShOb25lKQorICAgICAgICAsIHNsb3dQYXRoQ291bnQoMCkKICAgICB7CiAgICAgfQog
ICAgICAgICAKQEAgLTgzLDYgKzg0LDcgQEAgc3RydWN0IENhbGxMaW5rSW5mbyA6IHB1YmxpYyBC
YXNpY1Jhd1NlbgogICAgIGJvb2wgaGFzU2VlbkNsb3N1cmUgOiAxOwogICAgIHVuc2lnbmVkIGNh
bGxUeXBlIDogNTsgLy8gQ2FsbFR5cGUKICAgICB1bnNpZ25lZCBjYWxsZWVHUFIgOiA4OworICAg
IHVuc2lnbmVkIHNsb3dQYXRoQ291bnQ7CiAgICAgQ29kZU9yaWdpbiBjb2RlT3JpZ2luOwogCiAg
ICAgYm9vbCBpc0xpbmtlZCgpIHsgcmV0dXJuIHN0dWIgfHwgY2FsbGVlOyB9CkBAIC05NywxNyAr
OTksMjEgQEAgc3RydWN0IENhbGxMaW5rSW5mbyA6IHB1YmxpYyBCYXNpY1Jhd1NlbgogICAgIHsK
ICAgICAgICAgaGFzU2VlblNob3VsZFJlcGF0Y2ggPSB0cnVlOwogICAgIH0KKyAgICAKKyAgICBz
dGF0aWMgQ2FsbExpbmtJbmZvJiBkdW1teSgpOwogfTsKIAotaW5saW5lIHZvaWQqIGdldENhbGxM
aW5rSW5mb1JldHVybkxvY2F0aW9uKENhbGxMaW5rSW5mbyogY2FsbExpbmtJbmZvKQoraW5saW5l
IENvZGVPcmlnaW4gZ2V0Q2FsbExpbmtJbmZvQ29kZU9yaWdpbihDYWxsTGlua0luZm8mIGNhbGxM
aW5rSW5mbykKIHsKLSAgICByZXR1cm4gY2FsbExpbmtJbmZvLT5jYWxsUmV0dXJuTG9jYXRpb24u
ZXhlY3V0YWJsZUFkZHJlc3MoKTsKKyAgICByZXR1cm4gY2FsbExpbmtJbmZvLmNvZGVPcmlnaW47
CiB9CiAKLWlubGluZSB1bnNpZ25lZCBnZXRDYWxsTGlua0luZm9CeXRlY29kZUluZGV4KENhbGxM
aW5rSW5mbyogY2FsbExpbmtJbmZvKQotewotICAgIHJldHVybiBjYWxsTGlua0luZm8tPmNvZGVP
cmlnaW4uYnl0ZWNvZGVJbmRleDsKLX0KK3R5cGVkZWYgSGFzaE1hcDxDb2RlT3JpZ2luLCBDYWxs
TGlua0luZm8qLCBDb2RlT3JpZ2luQXBwcm94aW1hdGVIYXNoPiBDYWxsTGlua0luZm9NYXA7CisK
KyNlbHNlIC8vIEVOQUJMRShKSVQpCisKK3R5cGVkZWYgSGFzaE1hcDxpbnQsIHZvaWQqPiBDYWxs
TGlua0luZm9NYXA7CisKICNlbmRpZiAvLyBFTkFCTEUoSklUKQogCiB9IC8vIG5hbWVzcGFjZSBK
U0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9DYWxsTGlua1N0YXR1cy5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NhbGxMaW5r
U3RhdHVzLmNwcAkocmV2aXNpb24gMTY2MTI3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL0NhbGxMaW5rU3RhdHVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTE1LDcgKzExNSw4
IEBAIENhbGxMaW5rU3RhdHVzIENhbGxMaW5rU3RhdHVzOjpjb21wdXRlRnIKICNlbmRpZgogfQog
Ci1DYWxsTGlua1N0YXR1cyBDYWxsTGlua1N0YXR1czo6Y29tcHV0ZUZvcihDb2RlQmxvY2sqIHBy
b2ZpbGVkQmxvY2ssIHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXgpCitDYWxsTGlua1N0YXR1cyBDYWxs
TGlua1N0YXR1czo6Y29tcHV0ZUZvcigKKyAgICBDb2RlQmxvY2sqIHByb2ZpbGVkQmxvY2ssIHVu
c2lnbmVkIGJ5dGVjb2RlSW5kZXgsIGNvbnN0IENhbGxMaW5rSW5mb01hcCYgbWFwKQogewogICAg
IENvbmN1cnJlbnRKSVRMb2NrZXIgbG9ja2VyKHByb2ZpbGVkQmxvY2stPm1fbG9jayk7CiAgICAg
CkBAIC0xMjcsMTUgKzEyOCwxMSBAQCBDYWxsTGlua1N0YXR1cyBDYWxsTGlua1N0YXR1czo6Y29t
cHV0ZUZvCiAgICAgICAgIHx8IHByb2ZpbGVkQmxvY2stPmhhc0V4aXRTaXRlKGxvY2tlciwgREZH
OjpGcmVxdWVudEV4aXRTaXRlKGJ5dGVjb2RlSW5kZXgsIEJhZEV4ZWN1dGFibGUpKSkKICAgICAg
ICAgcmV0dXJuIHRha2VzU2xvd1BhdGgoKTsKICAgICAKLSAgICBpZiAoIXByb2ZpbGVkQmxvY2st
Pmhhc0Jhc2VsaW5lSklUUHJvZmlsaW5nKCkpCisgICAgQ2FsbExpbmtJbmZvKiBjYWxsTGlua0lu
Zm8gPSBtYXAuZ2V0KENvZGVPcmlnaW4oYnl0ZWNvZGVJbmRleCkpOworICAgIGlmICghY2FsbExp
bmtJbmZvKQogICAgICAgICByZXR1cm4gY29tcHV0ZUZyb21MTEludChsb2NrZXIsIHByb2ZpbGVk
QmxvY2ssIGJ5dGVjb2RlSW5kZXgpOwogICAgIAotICAgIGlmIChwcm9maWxlZEJsb2NrLT5jb3Vs
ZFRha2VTbG93Q2FzZShieXRlY29kZUluZGV4KSkKLSAgICAgICAgcmV0dXJuIHRha2VzU2xvd1Bh
dGgoKTsKLSAgICAKLSAgICBDYWxsTGlua0luZm8mIGNhbGxMaW5rSW5mbyA9IHByb2ZpbGVkQmxv
Y2stPmdldENhbGxMaW5rSW5mbyhieXRlY29kZUluZGV4KTsKLSAgICAKLSAgICBDYWxsTGlua1N0
YXR1cyByZXN1bHQgPSBjb21wdXRlRm9yKGxvY2tlciwgY2FsbExpbmtJbmZvKTsKKyAgICBDYWxs
TGlua1N0YXR1cyByZXN1bHQgPSBjb21wdXRlRm9yKGxvY2tlciwgKmNhbGxMaW5rSW5mbyk7CiAg
ICAgaWYgKCFyZXN1bHQpCiAgICAgICAgIHJldHVybiBjb21wdXRlRnJvbUxMSW50KGxvY2tlciwg
cHJvZmlsZWRCbG9jaywgYnl0ZWNvZGVJbmRleCk7CiAgICAgCkBAIC0xNTEsNiArMTQ4LDkgQEAg
Q2FsbExpbmtTdGF0dXMgQ2FsbExpbmtTdGF0dXM6OmNvbXB1dGVGbwogI2lmIEVOQUJMRShKSVQp
CiBDYWxsTGlua1N0YXR1cyBDYWxsTGlua1N0YXR1czo6Y29tcHV0ZUZvcihjb25zdCBDb25jdXJy
ZW50SklUTG9ja2VyJiwgQ2FsbExpbmtJbmZvJiBjYWxsTGlua0luZm8pCiB7CisgICAgaWYgKGNh
bGxMaW5rSW5mby5zbG93UGF0aENvdW50ID49IE9wdGlvbnM6OmNvdWxkVGFrZVNsb3dDYXNlTWlu
aW11bUNvdW50KCkpCisgICAgICAgIHJldHVybiB0YWtlc1Nsb3dQYXRoKCk7CisgICAgCiAgICAg
aWYgKGNhbGxMaW5rSW5mby5zdHViKQogICAgICAgICByZXR1cm4gQ2FsbExpbmtTdGF0dXMoY2Fs
bExpbmtJbmZvLnN0dWItPmV4ZWN1dGFibGUoKSwgY2FsbExpbmtJbmZvLnN0dWItPnN0cnVjdHVy
ZSgpKTsKICAgICAKQEAgLTE3MSwxMSArMTcxLDggQEAgdm9pZCBDYWxsTGlua1N0YXR1czo6Y29t
cHV0ZURGR1N0YXR1c2VzKAogI2lmIEVOQUJMRShERkdfSklUKQogICAgIFJFTEVBU0VfQVNTRVJU
KGRmZ0NvZGVCbG9jay0+aml0VHlwZSgpID09IEpJVENvZGU6OkRGR0pJVCk7CiAgICAgQ29kZUJs
b2NrKiBiYXNlbGluZUNvZGVCbG9jayA9IGRmZ0NvZGVCbG9jay0+YWx0ZXJuYXRpdmUoKTsKLSAg
ICBERkc6OkpJVENvZGUqIGppdENvZGUgPSBkZmdDb2RlQmxvY2stPmppdENvZGUoKS0+ZGZnKCk7
Ci0gICAgUkVMRUFTRV9BU1NFUlQoZGZnQ29kZUJsb2NrLT5udW1iZXJPZkNhbGxMaW5rSW5mb3Mo
KSA8PSBqaXRDb2RlLT5zbG93UGF0aENhbGxzLnNpemUoKSk7Ci0gICAgCi0gICAgZm9yIChzaXpl
X3QgaSA9IGRmZ0NvZGVCbG9jay0+bnVtYmVyT2ZDYWxsTGlua0luZm9zKCk7IGktLTspIHsKLSAg
ICAgICAgQ2FsbExpbmtJbmZvJiBpbmZvID0gZGZnQ29kZUJsb2NrLT5jYWxsTGlua0luZm8oaSk7
CisgICAgZm9yIChCYWc8Q2FsbExpbmtJbmZvPjo6aXRlcmF0b3IgaXRlciA9IGRmZ0NvZGVCbG9j
ay0+Y2FsbExpbmtJbmZvc0JlZ2luKCk7ICEhaXRlcjsgKytpdGVyKSB7CisgICAgICAgIENhbGxM
aW5rSW5mbyYgaW5mbyA9ICoqaXRlcjsKICAgICAgICAgQ29kZU9yaWdpbiBjb2RlT3JpZ2luID0g
aW5mby5jb2RlT3JpZ2luOwogICAgICAgICAKICAgICAgICAgYm9vbCB0YWtlU2xvd1BhdGg7CkBA
IC0yMDIsNyArMTk5LDcgQEAgdm9pZCBDYWxsTGlua1N0YXR1czo6Y29tcHV0ZURGR1N0YXR1c2Vz
KAogICAgICAgICAKICAgICAgICAgewogICAgICAgICAgICAgQ29uY3VycmVudEpJVExvY2tlciBs
b2NrZXIoZGZnQ29kZUJsb2NrLT5tX2xvY2spOwotICAgICAgICAgICAgaWYgKHRha2VTbG93UGF0
aCB8fCBqaXRDb2RlLT5zbG93UGF0aENhbGxzW2ldID49IE9wdGlvbnM6OmNvdWxkVGFrZVNsb3dD
YXNlTWluaW11bUNvdW50KCkpCisgICAgICAgICAgICBpZiAodGFrZVNsb3dQYXRoKQogICAgICAg
ICAgICAgICAgIG1hcC5hZGQoaW5mby5jb2RlT3JpZ2luLCB0YWtlc1Nsb3dQYXRoKCkpOwogICAg
ICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgQ2FsbExpbmtTdGF0dXMgc3RhdHVzID0g
Y29tcHV0ZUZvcihsb2NrZXIsIGluZm8pOwpAQCAtMjMwLDEzICsyMjcsMTQgQEAgdm9pZCBDYWxs
TGlua1N0YXR1czo6Y29tcHV0ZURGR1N0YXR1c2VzKAogfQogCiBDYWxsTGlua1N0YXR1cyBDYWxs
TGlua1N0YXR1czo6Y29tcHV0ZUZvcigKLSAgICBDb2RlQmxvY2sqIHByb2ZpbGVkQmxvY2ssIENv
ZGVPcmlnaW4gY29kZU9yaWdpbiwgY29uc3QgQ2FsbExpbmtTdGF0dXM6OkNvbnRleHRNYXAmIG1h
cCkKKyAgICBDb2RlQmxvY2sqIHByb2ZpbGVkQmxvY2ssIENvZGVPcmlnaW4gY29kZU9yaWdpbiwK
KyAgICBjb25zdCBDYWxsTGlua0luZm9NYXAmIGJhc2VsaW5lTWFwLCBjb25zdCBDYWxsTGlua1N0
YXR1czo6Q29udGV4dE1hcCYgZGZnTWFwKQogewotICAgIENvbnRleHRNYXA6OmNvbnN0X2l0ZXJh
dG9yIGl0ZXIgPSBtYXAuZmluZChjb2RlT3JpZ2luKTsKLSAgICBpZiAoaXRlciAhPSBtYXAuZW5k
KCkpCisgICAgQ29udGV4dE1hcDo6Y29uc3RfaXRlcmF0b3IgaXRlciA9IGRmZ01hcC5maW5kKGNv
ZGVPcmlnaW4pOworICAgIGlmIChpdGVyICE9IGRmZ01hcC5lbmQoKSkKICAgICAgICAgcmV0dXJu
IGl0ZXItPnZhbHVlOwogICAgIAotICAgIHJldHVybiBjb21wdXRlRm9yKHByb2ZpbGVkQmxvY2ss
IGNvZGVPcmlnaW4uYnl0ZWNvZGVJbmRleCk7CisgICAgcmV0dXJuIGNvbXB1dGVGb3IocHJvZmls
ZWRCbG9jaywgY29kZU9yaWdpbi5ieXRlY29kZUluZGV4LCBiYXNlbGluZU1hcCk7CiB9CiAKIHZv
aWQgQ2FsbExpbmtTdGF0dXM6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9DYWxsTGlua1N0YXR1cy5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9DYWxsTGlua1N0YXR1cy5oCShyZXZp
c2lvbiAxNjYxMjcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ2FsbExpbmtT
dGF0dXMuaAkod29ya2luZyBjb3B5KQpAQCAtMjYsNiArMjYsNyBAQAogI2lmbmRlZiBDYWxsTGlu
a1N0YXR1c19oCiAjZGVmaW5lIENhbGxMaW5rU3RhdHVzX2gKIAorI2luY2x1ZGUgIkNhbGxMaW5r
SW5mby5oIgogI2luY2x1ZGUgIkNvZGVPcmlnaW4uaCIKICNpbmNsdWRlICJDb2RlU3BlY2lhbGl6
YXRpb25LaW5kLmgiCiAjaW5jbHVkZSAiQ29uY3VycmVudEpJVExvY2suaCIKQEAgLTc1LDcgKzc2
LDggQEAgcHVibGljOgogICAgICAgICByZXR1cm4gKnRoaXM7CiAgICAgfQogICAgIAotICAgIHN0
YXRpYyBDYWxsTGlua1N0YXR1cyBjb21wdXRlRm9yKENvZGVCbG9jayosIHVuc2lnbmVkIGJ5dGVj
b2RlSW5kZXgpOworICAgIHN0YXRpYyBDYWxsTGlua1N0YXR1cyBjb21wdXRlRm9yKAorICAgICAg
ICBDb2RlQmxvY2sqLCB1bnNpZ25lZCBieXRlY29kZUluZGV4LCBjb25zdCBDYWxsTGlua0luZm9N
YXAmKTsKIAogI2lmIEVOQUJMRShKSVQpCiAgICAgLy8gQ29tcHV0ZXMgdGhlIHN0YXR1cyBhc3N1
bWluZyB0aGF0IHdlIG5ldmVyIHRvb2sgc2xvdyBwYXRoIGFuZCBuZXZlciBwcmV2aW91c2x5CkBA
IC05MSw3ICs5Myw4IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgdm9pZCBjb21wdXRlREZHU3RhdHVz
ZXMoQ29kZUJsb2NrKiBkZmdDb2RlQmxvY2ssIENvbnRleHRNYXAmKTsKICAgICAKICAgICAvLyBI
ZWxwZXIgdGhhdCBmaXJzdCBjb25zdWx0cyB0aGUgQ29udGV4dE1hcCBhbmQgdGhlbiBkb2VzIGNv
bXB1dGVGb3IoKS4KLSAgICBzdGF0aWMgQ2FsbExpbmtTdGF0dXMgY29tcHV0ZUZvcihDb2RlQmxv
Y2sqLCBDb2RlT3JpZ2luLCBjb25zdCBDb250ZXh0TWFwJik7CisgICAgc3RhdGljIENhbGxMaW5r
U3RhdHVzIGNvbXB1dGVGb3IoCisgICAgICAgIENvZGVCbG9jayosIENvZGVPcmlnaW4sIGNvbnN0
IENhbGxMaW5rSW5mb01hcCYsIGNvbnN0IENvbnRleHRNYXAmKTsKICAgICAKICAgICBib29sIGlz
U2V0KCkgY29uc3QgeyByZXR1cm4gbV9jYWxsVGFyZ2V0IHx8IG1fZXhlY3V0YWJsZSB8fCBtX2Nv
dWxkVGFrZVNsb3dQYXRoOyB9CiAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvQ29kZUJsb2NrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvQ29kZUJsb2NrLmNwcAkocmV2aXNpb24gMTY2MTI3KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQwOCw3
ICs0MDgsNyBAQCB2b2lkIENvZGVCbG9jazo6cHJpbnRHZXRCeUlkQ2FjaGVTdGF0dXMoCiAjZW5k
aWYKIH0KIAotdm9pZCBDb2RlQmxvY2s6OnByaW50Q2FsbE9wKFByaW50U3RyZWFtJiBvdXQsIEV4
ZWNTdGF0ZSogZXhlYywgaW50IGxvY2F0aW9uLCBjb25zdCBJbnN0cnVjdGlvbiomIGl0LCBjb25z
dCBjaGFyKiBvcCwgQ2FjaGVEdW1wTW9kZSBjYWNoZUR1bXBNb2RlLCBib29sJiBoYXNQcmludGVk
UHJvZmlsaW5nKQordm9pZCBDb2RlQmxvY2s6OnByaW50Q2FsbE9wKFByaW50U3RyZWFtJiBvdXQs
IEV4ZWNTdGF0ZSogZXhlYywgaW50IGxvY2F0aW9uLCBjb25zdCBJbnN0cnVjdGlvbiomIGl0LCBj
b25zdCBjaGFyKiBvcCwgQ2FjaGVEdW1wTW9kZSBjYWNoZUR1bXBNb2RlLCBib29sJiBoYXNQcmlu
dGVkUHJvZmlsaW5nLCBjb25zdCBDYWxsTGlua0luZm9NYXAmIG1hcCkKIHsKICAgICBpbnQgZHN0
ID0gKCsraXQpLT51Lm9wZXJhbmQ7CiAgICAgaW50IGZ1bmMgPSAoKytpdCktPnUub3BlcmFuZDsK
QEAgLTQyNywxMiArNDI3LDEyIEBAIHZvaWQgQ29kZUJsb2NrOjpwcmludENhbGxPcChQcmludFN0
cmVhbSYKICAgICAgICAgfQogI2VuZGlmCiAjaWYgRU5BQkxFKEpJVCkKLSAgICAgICAgaWYgKG51
bWJlck9mQ2FsbExpbmtJbmZvcygpKSB7Ci0gICAgICAgICAgICBKU0Z1bmN0aW9uKiB0YXJnZXQg
PSBnZXRDYWxsTGlua0luZm8obG9jYXRpb24pLmxhc3RTZWVuQ2FsbGVlLmdldCgpOworICAgICAg
ICBpZiAoQ2FsbExpbmtJbmZvKiBpbmZvID0gbWFwLmdldChDb2RlT3JpZ2luKGxvY2F0aW9uKSkp
IHsKKyAgICAgICAgICAgIEpTRnVuY3Rpb24qIHRhcmdldCA9IGluZm8tPmxhc3RTZWVuQ2FsbGVl
LmdldCgpOwogICAgICAgICAgICAgaWYgKHRhcmdldCkKICAgICAgICAgICAgICAgICBvdXQucHJp
bnRmKCIgaml0KCVwLCBleGVjICVwKSIsIHRhcmdldCwgdGFyZ2V0LT5leGVjdXRhYmxlKCkpOwog
ICAgICAgICB9Ci0gICAgICAgIG91dC5wcmludCgiIHN0YXR1cygiLCBDYWxsTGlua1N0YXR1czo6
Y29tcHV0ZUZvcih0aGlzLCBsb2NhdGlvbiksICIpIik7CisgICAgICAgIG91dC5wcmludCgiIHN0
YXR1cygiLCBDYWxsTGlua1N0YXR1czo6Y29tcHV0ZUZvcih0aGlzLCBsb2NhdGlvbiwgbWFwKSwg
IikiKTsKICNlbmRpZgogICAgIH0KICAgICArK2l0OwpAQCAtNDg0LDEyICs0ODQsMTQgQEAgdm9p
ZCBDb2RlQmxvY2s6OmR1bXBCeXRlY29kZShQcmludFN0cmVhbQogICAgIG91dC5wcmludGYoIlxu
Iik7CiAgICAgCiAgICAgU3R1YkluZm9NYXAgc3R1YkluZm9zOworICAgIENhbGxMaW5rSW5mb01h
cCBjYWxsTGlua0luZm9zOwogICAgIGdldFN0dWJJbmZvTWFwKHN0dWJJbmZvcyk7CisgICAgZ2V0
Q2FsbExpbmtJbmZvTWFwKGNhbGxMaW5rSW5mb3MpOwogICAgIAogICAgIGNvbnN0IEluc3RydWN0
aW9uKiBiZWdpbiA9IGluc3RydWN0aW9ucygpLmJlZ2luKCk7CiAgICAgY29uc3QgSW5zdHJ1Y3Rp
b24qIGVuZCA9IGluc3RydWN0aW9ucygpLmVuZCgpOwogICAgIGZvciAoY29uc3QgSW5zdHJ1Y3Rp
b24qIGl0ID0gYmVnaW47IGl0ICE9IGVuZDsgKytpdCkKLSAgICAgICAgZHVtcEJ5dGVjb2RlKG91
dCwgZXhlYywgYmVnaW4sIGl0LCBzdHViSW5mb3MpOworICAgICAgICBkdW1wQnl0ZWNvZGUob3V0
LCBleGVjLCBiZWdpbiwgaXQsIHN0dWJJbmZvcywgY2FsbExpbmtJbmZvcyk7CiAgICAgCiAgICAg
aWYgKG51bWJlck9mSWRlbnRpZmllcnMoKSkgewogICAgICAgICBvdXQucHJpbnRmKCJcbklkZW50
aWZpZXJzOlxuIik7CkBAIC02MTcsNyArNjE5LDkgQEAgdm9pZCBDb2RlQmxvY2s6OnByaW50TG9j
YXRpb25PcEFuZFJlZ2lzdAogICAgIG91dC5wcmludGYoIiVzIiwgcmVnaXN0ZXJOYW1lKG9wZXJh
bmQpLmRhdGEoKSk7CiB9CiAKLXZvaWQgQ29kZUJsb2NrOjpkdW1wQnl0ZWNvZGUoUHJpbnRTdHJl
YW0mIG91dCwgRXhlY1N0YXRlKiBleGVjLCBjb25zdCBJbnN0cnVjdGlvbiogYmVnaW4sIGNvbnN0
IEluc3RydWN0aW9uKiYgaXQsIGNvbnN0IFN0dWJJbmZvTWFwJiBtYXApCit2b2lkIENvZGVCbG9j
azo6ZHVtcEJ5dGVjb2RlKAorICAgIFByaW50U3RyZWFtJiBvdXQsIEV4ZWNTdGF0ZSogZXhlYywg
Y29uc3QgSW5zdHJ1Y3Rpb24qIGJlZ2luLCBjb25zdCBJbnN0cnVjdGlvbiomIGl0LAorICAgIGNv
bnN0IFN0dWJJbmZvTWFwJiBzdHViSW5mb3MsIGNvbnN0IENhbGxMaW5rSW5mb01hcCYgY2FsbExp
bmtJbmZvcykKIHsKICAgICBpbnQgbG9jYXRpb24gPSBpdCAtIGJlZ2luOwogICAgIGJvb2wgaGFz
UHJpbnRlZFByb2ZpbGluZyA9IGZhbHNlOwpAQCAtOTE0LDcgKzkxOCw3IEBAIHZvaWQgQ29kZUJs
b2NrOjpkdW1wQnl0ZWNvZGUoUHJpbnRTdHJlYW0KICAgICAgICAgY2FzZSBvcF9nZXRfYnlfaWRf
b3V0X29mX2xpbmU6CiAgICAgICAgIGNhc2Ugb3BfZ2V0X2FycmF5X2xlbmd0aDogewogICAgICAg
ICAgICAgcHJpbnRHZXRCeUlkT3Aob3V0LCBleGVjLCBsb2NhdGlvbiwgaXQpOwotICAgICAgICAg
ICAgcHJpbnRHZXRCeUlkQ2FjaGVTdGF0dXMob3V0LCBleGVjLCBsb2NhdGlvbiwgbWFwKTsKKyAg
ICAgICAgICAgIHByaW50R2V0QnlJZENhY2hlU3RhdHVzKG91dCwgZXhlYywgbG9jYXRpb24sIHN0
dWJJbmZvcyk7CiAgICAgICAgICAgICBkdW1wVmFsdWVQcm9maWxpbmcob3V0LCBpdCwgaGFzUHJp
bnRlZFByb2ZpbGluZyk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQpAQCAtMTE3NSwx
MSArMTE3OSwxMSBAQCB2b2lkIENvZGVCbG9jazo6ZHVtcEJ5dGVjb2RlKFByaW50U3RyZWFtCiAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBjYXNlIG9wX2NhbGw6IHsKLSAg
ICAgICAgICAgIHByaW50Q2FsbE9wKG91dCwgZXhlYywgbG9jYXRpb24sIGl0LCAiY2FsbCIsIER1
bXBDYWNoZXMsIGhhc1ByaW50ZWRQcm9maWxpbmcpOworICAgICAgICAgICAgcHJpbnRDYWxsT3Ao
b3V0LCBleGVjLCBsb2NhdGlvbiwgaXQsICJjYWxsIiwgRHVtcENhY2hlcywgaGFzUHJpbnRlZFBy
b2ZpbGluZywgY2FsbExpbmtJbmZvcyk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQog
ICAgICAgICBjYXNlIG9wX2NhbGxfZXZhbDogewotICAgICAgICAgICAgcHJpbnRDYWxsT3Aob3V0
LCBleGVjLCBsb2NhdGlvbiwgaXQsICJjYWxsX2V2YWwiLCBEb250RHVtcENhY2hlcywgaGFzUHJp
bnRlZFByb2ZpbGluZyk7CisgICAgICAgICAgICBwcmludENhbGxPcChvdXQsIGV4ZWMsIGxvY2F0
aW9uLCBpdCwgImNhbGxfZXZhbCIsIERvbnREdW1wQ2FjaGVzLCBoYXNQcmludGVkUHJvZmlsaW5n
LCBjYWxsTGlua0luZm9zKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAg
IGNhc2Ugb3BfY2FsbF92YXJhcmdzOiB7CkBAIC0xMjIwLDcgKzEyMjQsNyBAQCB2b2lkIENvZGVC
bG9jazo6ZHVtcEJ5dGVjb2RlKFByaW50U3RyZWFtCiAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgfQogICAgICAgICBjYXNlIG9wX2NvbnN0cnVjdDogewotICAgICAgICAgICAgcHJpbnRDYWxs
T3Aob3V0LCBleGVjLCBsb2NhdGlvbiwgaXQsICJjb25zdHJ1Y3QiLCBEdW1wQ2FjaGVzLCBoYXNQ
cmludGVkUHJvZmlsaW5nKTsKKyAgICAgICAgICAgIHByaW50Q2FsbE9wKG91dCwgZXhlYywgbG9j
YXRpb24sIGl0LCAiY29uc3RydWN0IiwgRHVtcENhY2hlcywgaGFzUHJpbnRlZFByb2ZpbGluZywg
Y2FsbExpbmtJbmZvcyk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBj
YXNlIG9wX3N0cmNhdDogewpAQCAtMTM4MSwxMSArMTM4NSwxMyBAQCB2b2lkIENvZGVCbG9jazo6
ZHVtcEJ5dGVjb2RlKFByaW50U3RyZWFtCiAgICAgb3V0LnByaW50KCJcbiIpOwogfQogCi12b2lk
IENvZGVCbG9jazo6ZHVtcEJ5dGVjb2RlKFByaW50U3RyZWFtJiBvdXQsIHVuc2lnbmVkIGJ5dGVj
b2RlT2Zmc2V0LCBjb25zdCBTdHViSW5mb01hcCYgbWFwKQordm9pZCBDb2RlQmxvY2s6OmR1bXBC
eXRlY29kZSgKKyAgICBQcmludFN0cmVhbSYgb3V0LCB1bnNpZ25lZCBieXRlY29kZU9mZnNldCwK
KyAgICBjb25zdCBTdHViSW5mb01hcCYgc3R1YkluZm9zLCBjb25zdCBDYWxsTGlua0luZm9NYXAm
IGNhbGxMaW5rSW5mb3MpCiB7CiAgICAgRXhlY1N0YXRlKiBleGVjID0gbV9nbG9iYWxPYmplY3Qt
Pmdsb2JhbEV4ZWMoKTsKICAgICBjb25zdCBJbnN0cnVjdGlvbiogaXQgPSBpbnN0cnVjdGlvbnMo
KS5iZWdpbigpICsgYnl0ZWNvZGVPZmZzZXQ7Ci0gICAgZHVtcEJ5dGVjb2RlKG91dCwgZXhlYywg
aW5zdHJ1Y3Rpb25zKCkuYmVnaW4oKSwgaXQsIG1hcCk7CisgICAgZHVtcEJ5dGVjb2RlKG91dCwg
ZXhlYywgaW5zdHJ1Y3Rpb25zKCkuYmVnaW4oKSwgaXQsIHN0dWJJbmZvcywgY2FsbExpbmtJbmZv
cyk7CiB9CiAKICNkZWZpbmUgRk9SX0VBQ0hfTUVNQkVSX1ZFQ1RPUihtYWNybykgXApAQCAtMjIz
MywzNCArMjIzOSwzNCBAQCB2b2lkIENvZGVCbG9jazo6ZmluYWxpemVVbmNvbmRpdGlvbmFsbHko
CiAgICAgLy8gSGFuZGxlIGlubGluZSBjYWNoZXMuCiAgICAgaWYgKCEhaml0Q29kZSgpKSB7CiAg
ICAgICAgIFJlcGF0Y2hCdWZmZXIgcmVwYXRjaEJ1ZmZlcih0aGlzKTsKLSAgICAgICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IG51bWJlck9mQ2FsbExpbmtJbmZvcygpOyArK2kpIHsKLSAgICAg
ICAgICAgIGlmIChjYWxsTGlua0luZm8oaSkuaXNMaW5rZWQoKSkgewotICAgICAgICAgICAgICAg
IGlmIChDbG9zdXJlQ2FsbFN0dWJSb3V0aW5lKiBzdHViID0gY2FsbExpbmtJbmZvKGkpLnN0dWIu
Z2V0KCkpIHsKKyAgICAgICAgZm9yIChCYWc8Q2FsbExpbmtJbmZvPjo6aXRlcmF0b3IgaXRlciA9
IGNhbGxMaW5rSW5mb3NCZWdpbigpOyAhIWl0ZXI7ICsraXRlcikgeworICAgICAgICAgICAgQ2Fs
bExpbmtJbmZvJiBpbmZvID0gKippdGVyOworICAgICAgICAgICAgaWYgKGluZm8uaXNMaW5rZWQo
KSkgeworICAgICAgICAgICAgICAgIGlmIChDbG9zdXJlQ2FsbFN0dWJSb3V0aW5lKiBzdHViID0g
aW5mby5zdHViLmdldCgpKSB7CiAgICAgICAgICAgICAgICAgICAgIGlmICghSGVhcDo6aXNNYXJr
ZWQoc3R1Yi0+c3RydWN0dXJlKCkpCiAgICAgICAgICAgICAgICAgICAgICAgICB8fCAhSGVhcDo6
aXNNYXJrZWQoc3R1Yi0+ZXhlY3V0YWJsZSgpKSkgewogICAgICAgICAgICAgICAgICAgICAgICAg
aWYgKE9wdGlvbnM6OnZlcmJvc2VPU1IoKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGRhdGFMb2coCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJDbGVhcmluZyBjbG9z
dXJlIGNhbGwgZnJvbSAiLCAqdGhpcywgIiB0byAiLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBzdHViLT5leGVjdXRhYmxlKCktPmhhc2hGb3IoY2FsbExpbmtJbmZvKGkpLnNwZWNp
YWxpemF0aW9uS2luZCgpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3R1Yi0+
ZXhlY3V0YWJsZSgpLT5oYXNoRm9yKGluZm8uc3BlY2lhbGl6YXRpb25LaW5kKCkpLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAiLCBzdHViIHJvdXRpbmUgIiwgUmF3UG9pbnRlcihz
dHViKSwgIi5cbiIpOwogICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAg
ICAgICAgICAgY2FsbExpbmtJbmZvKGkpLnVubGluaygqbV92bSwgcmVwYXRjaEJ1ZmZlcik7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBpbmZvLnVubGluaygqbV92bSwgcmVwYXRjaEJ1ZmZlcik7
CiAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCFIZWFw
Ojppc01hcmtlZChjYWxsTGlua0luZm8oaSkuY2FsbGVlLmdldCgpKSkgeworICAgICAgICAgICAg
ICAgIH0gZWxzZSBpZiAoIUhlYXA6OmlzTWFya2VkKGluZm8uY2FsbGVlLmdldCgpKSkgewogICAg
ICAgICAgICAgICAgICAgICBpZiAoT3B0aW9uczo6dmVyYm9zZU9TUigpKSB7CiAgICAgICAgICAg
ICAgICAgICAgICAgICBkYXRhTG9nKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICJDbGVh
cmluZyBjYWxsIGZyb20gIiwgKnRoaXMsICIgdG8gIiwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBSYXdQb2ludGVyKGNhbGxMaW5rSW5mbyhpKS5jYWxsZWUuZ2V0KCkpLCAiICgiLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxMaW5rSW5mbyhpKS5jYWxsZWUuZ2V0KCktPmV4
ZWN1dGFibGUoKS0+aGFzaEZvcigKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2Fs
bExpbmtJbmZvKGkpLnNwZWNpYWxpemF0aW9uS2luZCgpKSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBSYXdQb2ludGVyKGluZm8uY2FsbGVlLmdldCgpKSwgIiAoIiwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBpbmZvLmNhbGxlZS5nZXQoKS0+ZXhlY3V0YWJsZSgpLT5oYXNoRm9y
KGluZm8uc3BlY2lhbGl6YXRpb25LaW5kKCkpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICIpLlxuIik7CiAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgY2Fs
bExpbmtJbmZvKGkpLnVubGluaygqbV92bSwgcmVwYXRjaEJ1ZmZlcik7CisgICAgICAgICAgICAg
ICAgICAgIGluZm8udW5saW5rKCptX3ZtLCByZXBhdGNoQnVmZmVyKTsKICAgICAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoISFjYWxsTGlua0luZm8oaSkubGFz
dFNlZW5DYWxsZWUKLSAgICAgICAgICAgICAgICAmJiAhSGVhcDo6aXNNYXJrZWQoY2FsbExpbmtJ
bmZvKGkpLmxhc3RTZWVuQ2FsbGVlLmdldCgpKSkKLSAgICAgICAgICAgICAgICBjYWxsTGlua0lu
Zm8oaSkubGFzdFNlZW5DYWxsZWUuY2xlYXIoKTsKKyAgICAgICAgICAgIGlmICghIWluZm8ubGFz
dFNlZW5DYWxsZWUKKyAgICAgICAgICAgICAgICAmJiAhSGVhcDo6aXNNYXJrZWQoaW5mby5sYXN0
U2VlbkNhbGxlZS5nZXQoKSkpCisgICAgICAgICAgICAgICAgaW5mby5sYXN0U2VlbkNhbGxlZS5j
bGVhcigpOwogICAgICAgICB9CiAgICAgICAgIGZvciAoQmFnPFN0cnVjdHVyZVN0dWJJbmZvPjo6
aXRlcmF0b3IgaXRlciA9IG1fc3R1YkluZm9zLmJlZ2luKCk7ICEhaXRlcjsgKytpdGVyKSB7CiAg
ICAgICAgICAgICBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8gPSAqKml0ZXI7CkBAIC0yMjg5
LDYgKzIyOTUsMzQgQEAgdm9pZCBDb2RlQmxvY2s6OmdldFN0dWJJbmZvTWFwKFN0dWJJbmZvTQog
ICAgIGdldFN0dWJJbmZvTWFwKGxvY2tlciwgcmVzdWx0KTsKIH0KIAordm9pZCBDb2RlQmxvY2s6
OmdldENhbGxMaW5rSW5mb01hcChjb25zdCBDb25jdXJyZW50SklUTG9ja2VyJiwgQ2FsbExpbmtJ
bmZvTWFwJiByZXN1bHQpCit7CisjaWYgRU5BQkxFKEpJVCkKKyAgICB0b0hhc2hNYXAobV9jYWxs
TGlua0luZm9zLCBnZXRDYWxsTGlua0luZm9Db2RlT3JpZ2luLCByZXN1bHQpOworI2Vsc2UKKyAg
ICBVTlVTRURfUEFSQU0ocmVzdWx0KTsKKyNlbmRpZgorfQorCit2b2lkIENvZGVCbG9jazo6Z2V0
Q2FsbExpbmtJbmZvTWFwKENhbGxMaW5rSW5mb01hcCYgcmVzdWx0KQoreworICAgIENvbmN1cnJl
bnRKSVRMb2NrZXIgbG9ja2VyKG1fbG9jayk7CisgICAgZ2V0Q2FsbExpbmtJbmZvTWFwKGxvY2tl
ciwgcmVzdWx0KTsKK30KKworQ2FsbExpbmtJbmZvKiBDb2RlQmxvY2s6OmdldENhbGxMaW5rSW5m
b0ZvckJ5dGVjb2RlSW5kZXgodW5zaWduZWQgaW5kZXgpCit7CisjaWYgRU5BQkxFKEpJVCkKKyAg
ICBmb3IgKEJhZzxDYWxsTGlua0luZm8+OjppdGVyYXRvciBpdGVyID0gbV9jYWxsTGlua0luZm9z
LmJlZ2luKCk7ICEhaXRlcjsgKytpdGVyKSB7CisgICAgICAgIGlmICgoKml0ZXIpLT5jb2RlT3Jp
Z2luID09IENvZGVPcmlnaW4oaW5kZXgpKQorICAgICAgICAgICAgcmV0dXJuICppdGVyOworICAg
IH0KKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKGluZGV4KTsKKyNlbmRpZgorICAgIHJldHVybiBu
dWxscHRyOworfQorCiAjaWYgRU5BQkxFKEpJVCkKIFN0cnVjdHVyZVN0dWJJbmZvKiBDb2RlQmxv
Y2s6OmFkZFN0dWJJbmZvKCkKIHsKQEAgLTIyOTYsNiArMjMzMCwxMiBAQCBTdHJ1Y3R1cmVTdHVi
SW5mbyogQ29kZUJsb2NrOjphZGRTdHViSW5mCiAgICAgcmV0dXJuIG1fc3R1YkluZm9zLmFkZCgp
OwogfQogCitDYWxsTGlua0luZm8qIENvZGVCbG9jazo6YWRkQ2FsbExpbmtJbmZvKCkKK3sKKyAg
ICBDb25jdXJyZW50SklUTG9ja2VyIGxvY2tlcihtX2xvY2spOworICAgIHJldHVybiBtX2NhbGxM
aW5rSW5mb3MuYWRkKCk7Cit9CisKIHZvaWQgQ29kZUJsb2NrOjpyZXNldFN0dWIoU3RydWN0dXJl
U3R1YkluZm8mIHN0dWJJbmZvKQogewogICAgIGlmIChzdHViSW5mby5hY2Nlc3NUeXBlID09IGFj
Y2Vzc191bnNldCkKQEAgLTI1OTIsMTUgKzI2MzIsMTYgQEAgdm9pZCBDb2RlQmxvY2s6OnVubGlu
a0NhbGxzKCkKICAgICAgICAgICAgIG1fbGxpbnRDYWxsTGlua0luZm9zW2ldLnVubGluaygpOwog
ICAgIH0KICNlbmRpZgotICAgIGlmICghbV9jYWxsTGlua0luZm9zLnNpemUoKSkKKyAgICBpZiAo
bV9jYWxsTGlua0luZm9zLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwogICAgIGlmICghbV92
bS0+Y2FuVXNlSklUKCkpCiAgICAgICAgIHJldHVybjsKICAgICBSZXBhdGNoQnVmZmVyIHJlcGF0
Y2hCdWZmZXIodGhpcyk7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2NhbGxMaW5rSW5m
b3Muc2l6ZSgpOyBpKyspIHsKLSAgICAgICAgaWYgKCFtX2NhbGxMaW5rSW5mb3NbaV0uaXNMaW5r
ZWQoKSkKKyAgICBmb3IgKEJhZzxDYWxsTGlua0luZm8+OjppdGVyYXRvciBpdGVyID0gbV9jYWxs
TGlua0luZm9zLmJlZ2luKCk7ICEhaXRlcjsgKytpdGVyKSB7CisgICAgICAgIENhbGxMaW5rSW5m
byYgaW5mbyA9ICoqaXRlcjsKKyAgICAgICAgaWYgKCFpbmZvLmlzTGlua2VkKCkpCiAgICAgICAg
ICAgICBjb250aW51ZTsKLSAgICAgICAgbV9jYWxsTGlua0luZm9zW2ldLnVubGluaygqbV92bSwg
cmVwYXRjaEJ1ZmZlcik7CisgICAgICAgIGluZm8udW5saW5rKCptX3ZtLCByZXBhdGNoQnVmZmVy
KTsKICAgICB9CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2Rl
QmxvY2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29k
ZUJsb2NrLmgJKHJldmlzaW9uIDE2NjEyNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9Db2RlQmxvY2suaAkod29ya2luZyBjb3B5KQpAQCAtMTQ3LDcgKzE0Nyw5IEBAIHB1Ymxp
YzoKICAgICB2b2lkIHZpc2l0QWdncmVnYXRlKFNsb3RWaXNpdG9yJik7CiAKICAgICB2b2lkIGR1
bXBCeXRlY29kZShQcmludFN0cmVhbSYgPSBXVEY6OmRhdGFGaWxlKCkpOwotICAgIHZvaWQgZHVt
cEJ5dGVjb2RlKFByaW50U3RyZWFtJiwgdW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQsIGNvbnN0IFN0
dWJJbmZvTWFwJiA9IFN0dWJJbmZvTWFwKCkpOworICAgIHZvaWQgZHVtcEJ5dGVjb2RlKAorICAg
ICAgICBQcmludFN0cmVhbSYsIHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0LAorICAgICAgICBjb25z
dCBTdHViSW5mb01hcCYgPSBTdHViSW5mb01hcCgpLCBjb25zdCBDYWxsTGlua0luZm9NYXAmID0g
Q2FsbExpbmtJbmZvTWFwKCkpOwogICAgIHZvaWQgcHJpbnRTdHJ1Y3R1cmVzKFByaW50U3RyZWFt
JiwgY29uc3QgSW5zdHJ1Y3Rpb24qKTsKICAgICB2b2lkIHByaW50U3RydWN0dXJlKFByaW50U3Ry
ZWFtJiwgY29uc3QgY2hhciogbmFtZSwgY29uc3QgSW5zdHJ1Y3Rpb24qLCBpbnQgb3BlcmFuZCk7
CiAKQEAgLTE3OCwxMSArMTgwLDE4IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgZ2V0U3R1YkluZm9N
YXAoY29uc3QgQ29uY3VycmVudEpJVExvY2tlciYsIFN0dWJJbmZvTWFwJiByZXN1bHQpOwogICAg
IHZvaWQgZ2V0U3R1YkluZm9NYXAoU3R1YkluZm9NYXAmIHJlc3VsdCk7Ci0KKyAgICAKKyAgICB2
b2lkIGdldENhbGxMaW5rSW5mb01hcChjb25zdCBDb25jdXJyZW50SklUTG9ja2VyJiwgQ2FsbExp
bmtJbmZvTWFwJiByZXN1bHQpOworICAgIHZvaWQgZ2V0Q2FsbExpbmtJbmZvTWFwKENhbGxMaW5r
SW5mb01hcCYgcmVzdWx0KTsKKyAgICAKKyAgICAvLyBUaGlzIGlzIGEgc2xvdyBmdW5jdGlvbiBj
YWxsIHVzZWQgcHJpbWFyaWx5IGZvciBjb21waWxpbmcgT1NSIGV4aXRzIGluIHRoZSBjYXNlCisg
ICAgLy8gdGhhdCB0aGVyZSBoYWQgYmVlbiBpbmxpbmluZy4gQ2hhbmNlcyBhcmUgaWYgeW91IHdh
bnQgdG8gdXNlIHRoaXMsIHlvdSdyZSByZWFsbHkKKyAgICAvLyBsb29raW5nIGZvciBhIENhbGxM
aW5rSW5mb01hcCB0byBhbW9ydGl6ZSB0aGUgY29zdCBvZiBjYWxsaW5nIHRoaXMuCisgICAgQ2Fs
bExpbmtJbmZvKiBnZXRDYWxsTGlua0luZm9Gb3JCeXRlY29kZUluZGV4KHVuc2lnbmVkIGJ5dGVj
b2RlSW5kZXgpOwogI2lmIEVOQUJMRShKSVQpCiAgICAgU3RydWN0dXJlU3R1YkluZm8qIGFkZFN0
dWJJbmZvKCk7Ci0gICAgQmFnPFN0cnVjdHVyZVN0dWJJbmZvPjo6aXRlcmF0b3IgYmVnaW4oKSB7
IHJldHVybiBtX3N0dWJJbmZvcy5iZWdpbigpOyB9Ci0gICAgQmFnPFN0cnVjdHVyZVN0dWJJbmZv
Pjo6aXRlcmF0b3IgZW5kKCkgeyByZXR1cm4gbV9zdHViSW5mb3MuZW5kKCk7IH0KKyAgICBCYWc8
U3RydWN0dXJlU3R1YkluZm8+OjppdGVyYXRvciBzdHViSW5mb0JlZ2luKCkgeyByZXR1cm4gbV9z
dHViSW5mb3MuYmVnaW4oKTsgfQorICAgIEJhZzxTdHJ1Y3R1cmVTdHViSW5mbz46Oml0ZXJhdG9y
IHN0dWJJbmZvRW5kKCkgeyByZXR1cm4gbV9zdHViSW5mb3MuZW5kKCk7IH0KIAogICAgIHZvaWQg
cmVzZXRTdHViKFN0cnVjdHVyZVN0dWJJbmZvJik7CiAgICAgCkBAIC0xOTEsMTYgKzIwMCw5IEBA
IHB1YmxpYzoKICAgICAgICAgcmV0dXJuICooYmluYXJ5U2VhcmNoPEJ5VmFsSW5mbywgdW5zaWdu
ZWQ+KG1fYnlWYWxJbmZvcywgbV9ieVZhbEluZm9zLnNpemUoKSwgYnl0ZWNvZGVJbmRleCwgZ2V0
QnlWYWxJbmZvQnl0ZWNvZGVJbmRleCkpOwogICAgIH0KIAotICAgIENhbGxMaW5rSW5mbyYgZ2V0
Q2FsbExpbmtJbmZvKFJldHVybkFkZHJlc3NQdHIgcmV0dXJuQWRkcmVzcykKLSAgICB7Ci0gICAg
ICAgIHJldHVybiAqKGJpbmFyeVNlYXJjaDxDYWxsTGlua0luZm8sIHZvaWQqPihtX2NhbGxMaW5r
SW5mb3MsIG1fY2FsbExpbmtJbmZvcy5zaXplKCksIHJldHVybkFkZHJlc3MudmFsdWUoKSwgZ2V0
Q2FsbExpbmtJbmZvUmV0dXJuTG9jYXRpb24pKTsKLSAgICB9Ci0KLSAgICBDYWxsTGlua0luZm8m
IGdldENhbGxMaW5rSW5mbyh1bnNpZ25lZCBieXRlY29kZUluZGV4KQotICAgIHsKLSAgICAgICAg
QVNTRVJUKCFKSVRDb2RlOjppc09wdGltaXppbmdKSVQoaml0VHlwZSgpKSk7Ci0gICAgICAgIHJl
dHVybiAqKGJpbmFyeVNlYXJjaDxDYWxsTGlua0luZm8sIHVuc2lnbmVkPihtX2NhbGxMaW5rSW5m
b3MsIG1fY2FsbExpbmtJbmZvcy5zaXplKCksIGJ5dGVjb2RlSW5kZXgsIGdldENhbGxMaW5rSW5m
b0J5dGVjb2RlSW5kZXgpKTsKLSAgICB9CisgICAgQ2FsbExpbmtJbmZvKiBhZGRDYWxsTGlua0lu
Zm8oKTsKKyAgICBCYWc8Q2FsbExpbmtJbmZvPjo6aXRlcmF0b3IgY2FsbExpbmtJbmZvc0JlZ2lu
KCkgeyByZXR1cm4gbV9jYWxsTGlua0luZm9zLmJlZ2luKCk7IH0KKyAgICBCYWc8Q2FsbExpbmtJ
bmZvPjo6aXRlcmF0b3IgY2FsbExpbmtJbmZvc0VuZCgpIHsgcmV0dXJuIG1fY2FsbExpbmtJbmZv
cy5lbmQoKTsgfQogI2VuZGlmIC8vIEVOQUJMRShKSVQpCiAKICAgICB2b2lkIHVubGlua0luY29t
aW5nQ2FsbHMoKTsKQEAgLTM5OSwxMCArNDAxLDYgQEAgcHVibGljOgogICAgIHZvaWQgc2V0TnVt
YmVyT2ZCeVZhbEluZm9zKHNpemVfdCBzaXplKSB7IG1fYnlWYWxJbmZvcy5yZXNpemVUb0ZpdChz
aXplKTsgfQogICAgIHNpemVfdCBudW1iZXJPZkJ5VmFsSW5mb3MoKSBjb25zdCB7IHJldHVybiBt
X2J5VmFsSW5mb3Muc2l6ZSgpOyB9CiAgICAgQnlWYWxJbmZvJiBieVZhbEluZm8oc2l6ZV90IGlu
ZGV4KSB7IHJldHVybiBtX2J5VmFsSW5mb3NbaW5kZXhdOyB9Ci0KLSAgICB2b2lkIHNldE51bWJl
ck9mQ2FsbExpbmtJbmZvcyhzaXplX3Qgc2l6ZSkgeyBtX2NhbGxMaW5rSW5mb3MucmVzaXplVG9G
aXQoc2l6ZSk7IH0KLSAgICBzaXplX3QgbnVtYmVyT2ZDYWxsTGlua0luZm9zKCkgY29uc3QgeyBy
ZXR1cm4gbV9jYWxsTGlua0luZm9zLnNpemUoKTsgfQotICAgIENhbGxMaW5rSW5mbyYgY2FsbExp
bmtJbmZvKGludCBpbmRleCkgeyByZXR1cm4gbV9jYWxsTGlua0luZm9zW2luZGV4XTsgfQogI2Vu
ZGlmCiAKICAgICB1bnNpZ25lZCBudW1iZXJPZkFyZ3VtZW50VmFsdWVQcm9maWxlcygpCkBAIC05
NjgsNyArOTY2LDkgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIG1fY29uc3RhbnRSZWdpc3RlcnNb
aV0uc2V0KCptX3ZtLCBvd25lckV4ZWN1dGFibGUoKSwgY29uc3RhbnRzW2ldLmdldCgpKTsKICAg
ICB9CiAKLSAgICB2b2lkIGR1bXBCeXRlY29kZShQcmludFN0cmVhbSYsIEV4ZWNTdGF0ZSosIGNv
bnN0IEluc3RydWN0aW9uKiBiZWdpbiwgY29uc3QgSW5zdHJ1Y3Rpb24qJiwgY29uc3QgU3R1Yklu
Zm9NYXAmID0gU3R1YkluZm9NYXAoKSk7CisgICAgdm9pZCBkdW1wQnl0ZWNvZGUoCisgICAgICAg
IFByaW50U3RyZWFtJiwgRXhlY1N0YXRlKiwgY29uc3QgSW5zdHJ1Y3Rpb24qIGJlZ2luLCBjb25z
dCBJbnN0cnVjdGlvbiomLAorICAgICAgICBjb25zdCBTdHViSW5mb01hcCYgPSBTdHViSW5mb01h
cCgpLCBjb25zdCBDYWxsTGlua0luZm9NYXAmID0gQ2FsbExpbmtJbmZvTWFwKCkpOwogCiAgICAg
Q1N0cmluZyByZWdpc3Rlck5hbWUoaW50IHIpIGNvbnN0OwogICAgIHZvaWQgcHJpbnRVbmFyeU9w
KFByaW50U3RyZWFtJiwgRXhlY1N0YXRlKiwgaW50IGxvY2F0aW9uLCBjb25zdCBJbnN0cnVjdGlv
biomLCBjb25zdCBjaGFyKiBvcCk7CkBAIC05NzcsNyArOTc3LDcgQEAgcHJpdmF0ZToKICAgICB2
b2lkIHByaW50R2V0QnlJZE9wKFByaW50U3RyZWFtJiwgRXhlY1N0YXRlKiwgaW50IGxvY2F0aW9u
LCBjb25zdCBJbnN0cnVjdGlvbiomKTsKICAgICB2b2lkIHByaW50R2V0QnlJZENhY2hlU3RhdHVz
KFByaW50U3RyZWFtJiwgRXhlY1N0YXRlKiwgaW50IGxvY2F0aW9uLCBjb25zdCBTdHViSW5mb01h
cCYpOwogICAgIGVudW0gQ2FjaGVEdW1wTW9kZSB7IER1bXBDYWNoZXMsIERvbnREdW1wQ2FjaGVz
IH07Ci0gICAgdm9pZCBwcmludENhbGxPcChQcmludFN0cmVhbSYsIEV4ZWNTdGF0ZSosIGludCBs
b2NhdGlvbiwgY29uc3QgSW5zdHJ1Y3Rpb24qJiwgY29uc3QgY2hhciogb3AsIENhY2hlRHVtcE1v
ZGUsIGJvb2wmIGhhc1ByaW50ZWRQcm9maWxpbmcpOworICAgIHZvaWQgcHJpbnRDYWxsT3AoUHJp
bnRTdHJlYW0mLCBFeGVjU3RhdGUqLCBpbnQgbG9jYXRpb24sIGNvbnN0IEluc3RydWN0aW9uKiYs
IGNvbnN0IGNoYXIqIG9wLCBDYWNoZUR1bXBNb2RlLCBib29sJiBoYXNQcmludGVkUHJvZmlsaW5n
LCBjb25zdCBDYWxsTGlua0luZm9NYXAmKTsKICAgICB2b2lkIHByaW50UHV0QnlJZE9wKFByaW50
U3RyZWFtJiwgRXhlY1N0YXRlKiwgaW50IGxvY2F0aW9uLCBjb25zdCBJbnN0cnVjdGlvbiomLCBj
b25zdCBjaGFyKiBvcCk7CiAgICAgdm9pZCBwcmludExvY2F0aW9uQW5kT3AoUHJpbnRTdHJlYW0m
LCBFeGVjU3RhdGUqLCBpbnQgbG9jYXRpb24sIGNvbnN0IEluc3RydWN0aW9uKiYsIGNvbnN0IGNo
YXIqIG9wKTsKICAgICB2b2lkIHByaW50TG9jYXRpb25PcEFuZFJlZ2lzdGVyT3BlcmFuZChQcmlu
dFN0cmVhbSYsIEV4ZWNTdGF0ZSosIGludCBsb2NhdGlvbiwgY29uc3QgSW5zdHJ1Y3Rpb24qJiBp
dCwgY29uc3QgY2hhciogb3AsIGludCBvcGVyYW5kKTsKQEAgLTEwNjQsNyArMTA2NCw3IEBAIHBy
aXZhdGU6CiAjaWYgRU5BQkxFKEpJVCkKICAgICBCYWc8U3RydWN0dXJlU3R1YkluZm8+IG1fc3R1
YkluZm9zOwogICAgIFZlY3RvcjxCeVZhbEluZm8+IG1fYnlWYWxJbmZvczsKLSAgICBWZWN0b3I8
Q2FsbExpbmtJbmZvPiBtX2NhbGxMaW5rSW5mb3M7CisgICAgQmFnPENhbGxMaW5rSW5mbz4gbV9j
YWxsTGlua0luZm9zOwogICAgIFNlbnRpbmVsTGlua2VkTGlzdDxDYWxsTGlua0luZm8sIEJhc2lj
UmF3U2VudGluZWxOb2RlPENhbGxMaW5rSW5mbz4+IG1faW5jb21pbmdDYWxsczsKICNlbmRpZgog
ICAgIE93blB0cjxDb21wYWN0SklUQ29kZU1hcD4gbV9qaXRDb2RlTWFwOwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAJKHJldmlzaW9u
IDE2NjEyNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDYzLDYgKzEwNjMsNyBAQCBwcml2YXRlOgogICAgICAg
ICAvLyBjb2RlIGJsb2NrIGhhZCBnYXRoZXJlZC4KICAgICAgICAgTGF6eU9wZXJhbmRWYWx1ZVBy
b2ZpbGVQYXJzZXIgbV9sYXp5T3BlcmFuZHM7CiAgICAgICAgIAorICAgICAgICBDYWxsTGlua0lu
Zm9NYXAgbV9jYWxsTGlua0luZm9zOwogICAgICAgICBTdHViSW5mb01hcCBtX3N0dWJJbmZvczsK
ICAgICAgICAgCiAgICAgICAgIC8vIERpZCB3ZSBzZWUgYW55IHJldHVybnM/IFdlIG5lZWQgdG8g
aGFuZGxlIHRoZSAodW5jb21tb24gYnV0IG5lY2Vzc2FyeSkKQEAgLTExODAsNyArMTE4MSw4IEBA
IHZvaWQgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUNhbGwoCiAgICAgICAgICAgICBtX2dyYXBoLnZh
bHVlT2ZKU0NvbnN0YW50KGNhbGxUYXJnZXQpKS5zZXRJc1Byb3ZlZCh0cnVlKTsKICAgICB9IGVs
c2UgewogICAgICAgICBjYWxsTGlua1N0YXR1cyA9IENhbGxMaW5rU3RhdHVzOjpjb21wdXRlRm9y
KAotICAgICAgICAgICAgbV9pbmxpbmVTdGFja1RvcC0+bV9wcm9maWxlZEJsb2NrLCBjdXJyZW50
Q29kZU9yaWdpbigpLCBtX2NhbGxDb250ZXh0TWFwKTsKKyAgICAgICAgICAgIG1faW5saW5lU3Rh
Y2tUb3AtPm1fcHJvZmlsZWRCbG9jaywgY3VycmVudENvZGVPcmlnaW4oKSwKKyAgICAgICAgICAg
IG1faW5saW5lU3RhY2tUb3AtPm1fY2FsbExpbmtJbmZvcywgbV9jYWxsQ29udGV4dE1hcCk7CiAg
ICAgfQogICAgIAogICAgIGlmICghY2FsbExpbmtTdGF0dXMuY2FuT3B0aW1pemUoKSkgewpAQCAt
MzMzMyw4ICszMzM1LDEwIEBAIEJ5dGVDb2RlUGFyc2VyOjpJbmxpbmVTdGFja0VudHJ5OjpJbmxp
bmUKICAgICAgICAgLy8gV2UgZG8gdGhpcyB3aGlsZSBob2xkaW5nIHRoZSBsb2NrIGJlY2F1c2Ug
d2Ugd2FudCB0byBlbmNvdXJhZ2UgU3RydWN0dXJlU3R1YkluZm8ncwogICAgICAgICAvLyB0byBi
ZSBwb3RlbnRpYWxseSBhZGRlZCB0byBvcGVyYXRpb25zIGFuZCBiZWNhdXNlIHRoZSBwcm9maWxl
ZCBibG9jayBjb3VsZCBiZSBpbiB0aGUKICAgICAgICAgLy8gbWlkZGxlIG9mIExMSW50LT5KSVQg
dGllci11cCBpbiB3aGljaCBjYXNlIHdlIHdvdWxkIGJlIGFkZGluZyB0aGUgaW5mbydzIHJpZ2h0
IG5vdy4KLSAgICAgICAgaWYgKG1fcHJvZmlsZWRCbG9jay0+aGFzQmFzZWxpbmVKSVRQcm9maWxp
bmcoKSkKKyAgICAgICAgaWYgKG1fcHJvZmlsZWRCbG9jay0+aGFzQmFzZWxpbmVKSVRQcm9maWxp
bmcoKSkgewogICAgICAgICAgICAgbV9wcm9maWxlZEJsb2NrLT5nZXRTdHViSW5mb01hcChsb2Nr
ZXIsIG1fc3R1YkluZm9zKTsKKyAgICAgICAgICAgIG1fcHJvZmlsZWRCbG9jay0+Z2V0Q2FsbExp
bmtJbmZvTWFwKGxvY2tlciwgbV9jYWxsTGlua0luZm9zKTsKKyAgICAgICAgfQogICAgIH0KICAg
ICAKICAgICBtX2FyZ3VtZW50UG9zaXRpb25zLnJlc2l6ZShhcmd1bWVudENvdW50SW5jbHVkaW5n
VGhpcyk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvZGUuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvZGUuaAkocmV2aXNp
b24gMTY2MTI3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb2RlLmgJKHdv
cmtpbmcgY29weSkKQEAgLTExNyw3ICsxMTcsNiBAQCBwdWJsaWM6CiAgICAgVmVjdG9yPERGRzo6
T1NSRW50cnlEYXRhPiBvc3JFbnRyeTsKICAgICBTZWdtZW50ZWRWZWN0b3I8REZHOjpPU1JFeGl0
LCA4PiBvc3JFeGl0OwogICAgIFZlY3RvcjxERkc6OlNwZWN1bGF0aW9uUmVjb3Zlcnk+IHNwZWN1
bGF0aW9uUmVjb3Zlcnk7Ci0gICAgVmVjdG9yPHVuc2lnbmVkPiBzbG93UGF0aENhbGxzOwogICAg
IERGRzo6VmFyaWFibGVFdmVudFN0cmVhbSB2YXJpYWJsZUV2ZW50U3RyZWFtOwogICAgIERGRzo6
TWluaWZpZWRHcmFwaCBtaW5pZmllZERGRzsKICNpZiBFTkFCTEUoRlRMX0pJVCkKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuY3BwCShyZXZpc2lvbiAx
NjYxMjcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMjMzLDIwICsyMzMsMTYgQEAgdm9pZCBKSVRDb21waWxlcjo6bGlu
ayhMaW5rQnVmZmVyJiBsaW5rQgogICAgICAgICBpbmZvLnBhdGNoLmRlbHRhQ2FsbFRvU2xvd0Nh
c2UgPSBkaWZmZXJlbmNlQmV0d2VlbkNvZGVQdHIoY2FsbFJldHVybkxvY2F0aW9uLCBsaW5rQnVm
ZmVyLmxvY2F0aW9uT2YobV9pbnNbaV0ubV9zbG93UGF0aEdlbmVyYXRvci0+bGFiZWwoKSkpOwog
ICAgIH0KICAgICAKLSAgICBSRUxFQVNFX0FTU0VSVCghbV9ncmFwaC5tX3BsYW4ud2lsbFRyeVRv
VGllclVwIHx8IG1faml0Q29kZS0+c2xvd1BhdGhDYWxscy5zaXplKCkgPj0gbV9qc0NhbGxzLnNp
emUoKSk7Ci0gICAgbV9jb2RlQmxvY2stPnNldE51bWJlck9mQ2FsbExpbmtJbmZvcyhtX2pzQ2Fs
bHMuc2l6ZSgpKTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9qc0NhbGxzLnNpemUo
KTsgKytpKSB7Ci0gICAgICAgIENhbGxMaW5rSW5mbyYgaW5mbyA9IG1fY29kZUJsb2NrLT5jYWxs
TGlua0luZm8oaSk7Ci0gICAgICAgIGluZm8uY2FsbFR5cGUgPSBtX2pzQ2FsbHNbaV0ubV9jYWxs
VHlwZTsKLSAgICAgICAgaW5mby5jb2RlT3JpZ2luID0gbV9qc0NhbGxzW2ldLm1fY29kZU9yaWdp
bjsKKyAgICAgICAgSlNDYWxsUmVjb3JkJiByZWNvcmQgPSBtX2pzQ2FsbHNbaV07CisgICAgICAg
IENhbGxMaW5rSW5mbyYgaW5mbyA9ICpyZWNvcmQubV9pbmZvOwogICAgICAgICBUaHVua0dlbmVy
YXRvciBnZW5lcmF0b3IgPSBsaW5rVGh1bmtHZW5lcmF0b3JGb3IoCiAgICAgICAgICAgICBpbmZv
LmNhbGxUeXBlID09IENhbGxMaW5rSW5mbzo6Q29uc3RydWN0ID8gQ29kZUZvckNvbnN0cnVjdCA6
IENvZGVGb3JDYWxsLAogICAgICAgICAgICAgUmVnaXN0ZXJQcmVzZXJ2YXRpb25Ob3RSZXF1aXJl
ZCk7Ci0gICAgICAgIGxpbmtCdWZmZXIubGluayhtX2pzQ2FsbHNbaV0ubV9zbG93Q2FsbCwgRnVu
Y3Rpb25QdHIobV92bS0+Z2V0Q1RJU3R1YihnZW5lcmF0b3IpLmNvZGUoKS5leGVjdXRhYmxlQWRk
cmVzcygpKSk7Ci0gICAgICAgIGluZm8uY2FsbFJldHVybkxvY2F0aW9uID0gbGlua0J1ZmZlci5s
b2NhdGlvbk9mTmVhckNhbGwobV9qc0NhbGxzW2ldLm1fc2xvd0NhbGwpOwotICAgICAgICBpbmZv
LmhvdFBhdGhCZWdpbiA9IGxpbmtCdWZmZXIubG9jYXRpb25PZihtX2pzQ2FsbHNbaV0ubV90YXJn
ZXRUb0NoZWNrKTsKLSAgICAgICAgaW5mby5ob3RQYXRoT3RoZXIgPSBsaW5rQnVmZmVyLmxvY2F0
aW9uT2ZOZWFyQ2FsbChtX2pzQ2FsbHNbaV0ubV9mYXN0Q2FsbCk7Ci0gICAgICAgIGluZm8uY2Fs
bGVlR1BSID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KG1fanNDYWxsc1tpXS5tX2NhbGxlZSk7Cisg
ICAgICAgIGxpbmtCdWZmZXIubGluayhyZWNvcmQubV9zbG93Q2FsbCwgRnVuY3Rpb25QdHIobV92
bS0+Z2V0Q1RJU3R1YihnZW5lcmF0b3IpLmNvZGUoKS5leGVjdXRhYmxlQWRkcmVzcygpKSk7Cisg
ICAgICAgIGluZm8uY2FsbFJldHVybkxvY2F0aW9uID0gbGlua0J1ZmZlci5sb2NhdGlvbk9mTmVh
ckNhbGwocmVjb3JkLm1fc2xvd0NhbGwpOworICAgICAgICBpbmZvLmhvdFBhdGhCZWdpbiA9IGxp
bmtCdWZmZXIubG9jYXRpb25PZihyZWNvcmQubV90YXJnZXRUb0NoZWNrKTsKKyAgICAgICAgaW5m
by5ob3RQYXRoT3RoZXIgPSBsaW5rQnVmZmVyLmxvY2F0aW9uT2ZOZWFyQ2FsbChyZWNvcmQubV9m
YXN0Q2FsbCk7CiAgICAgfQogICAgIAogICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBvc3JFeGl0
VGh1bmsgPSB2bSgpLT5nZXRDVElTdHViKG9zckV4aXRHZW5lcmF0aW9uVGh1bmtHZW5lcmF0b3Ip
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb21waWxlci5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuaAkocmV2
aXNpb24gMTY2MTI3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb21waWxl
ci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxMSwgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTEsIDIwMTMsIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoK
ICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yMjYsOSArMjI2LDkgQEAgcHVibGljOgog
ICAgICAgICByZXR1cm4gbV9qc0NhbGxzLnNpemUoKTsKICAgICB9CiAKLSAgICB2b2lkIGFkZEpT
Q2FsbChDYWxsIGZhc3RDYWxsLCBDYWxsIHNsb3dDYWxsLCBEYXRhTGFiZWxQdHIgdGFyZ2V0VG9D
aGVjaywgQ2FsbExpbmtJbmZvOjpDYWxsVHlwZSBjYWxsVHlwZSwgR1BSUmVnIGNhbGxlZSwgQ29k
ZU9yaWdpbiBjb2RlT3JpZ2luKQorICAgIHZvaWQgYWRkSlNDYWxsKENhbGwgZmFzdENhbGwsIENh
bGwgc2xvd0NhbGwsIERhdGFMYWJlbFB0ciB0YXJnZXRUb0NoZWNrLCBDYWxsTGlua0luZm8qIGlu
Zm8pCiAgICAgewotICAgICAgICBtX2pzQ2FsbHMuYXBwZW5kKEpTQ2FsbFJlY29yZChmYXN0Q2Fs
bCwgc2xvd0NhbGwsIHRhcmdldFRvQ2hlY2ssIGNhbGxUeXBlLCBjYWxsZWUsIGNvZGVPcmlnaW4p
KTsKKyAgICAgICAgbV9qc0NhbGxzLmFwcGVuZChKU0NhbGxSZWNvcmQoZmFzdENhbGwsIHNsb3dD
YWxsLCB0YXJnZXRUb0NoZWNrLCBpbmZvKSk7CiAgICAgfQogICAgIAogICAgIHZvaWQgYWRkV2Vh
a1JlZmVyZW5jZShKU0NlbGwqIHRhcmdldCkKQEAgLTM1MywyMiArMzUzLDE4IEBAIHByaXZhdGU6
CiAgICAgVmVjdG9yPExhYmVsPiBtX2Jsb2NrSGVhZHM7CiAKICAgICBzdHJ1Y3QgSlNDYWxsUmVj
b3JkIHsKLSAgICAgICAgSlNDYWxsUmVjb3JkKENhbGwgZmFzdENhbGwsIENhbGwgc2xvd0NhbGws
IERhdGFMYWJlbFB0ciB0YXJnZXRUb0NoZWNrLCBDYWxsTGlua0luZm86OkNhbGxUeXBlIGNhbGxU
eXBlLCBHUFJSZWcgY2FsbGVlLCBDb2RlT3JpZ2luIGNvZGVPcmlnaW4pCisgICAgICAgIEpTQ2Fs
bFJlY29yZChDYWxsIGZhc3RDYWxsLCBDYWxsIHNsb3dDYWxsLCBEYXRhTGFiZWxQdHIgdGFyZ2V0
VG9DaGVjaywgQ2FsbExpbmtJbmZvKiBpbmZvKQogICAgICAgICAgICAgOiBtX2Zhc3RDYWxsKGZh
c3RDYWxsKQogICAgICAgICAgICAgLCBtX3Nsb3dDYWxsKHNsb3dDYWxsKQogICAgICAgICAgICAg
LCBtX3RhcmdldFRvQ2hlY2sodGFyZ2V0VG9DaGVjaykKLSAgICAgICAgICAgICwgbV9jYWxsVHlw
ZShjYWxsVHlwZSkKLSAgICAgICAgICAgICwgbV9jYWxsZWUoY2FsbGVlKQotICAgICAgICAgICAg
LCBtX2NvZGVPcmlnaW4oY29kZU9yaWdpbikKKyAgICAgICAgICAgICwgbV9pbmZvKGluZm8pCiAg
ICAgICAgIHsKICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgQ2FsbCBtX2Zhc3RDYWxsOwog
ICAgICAgICBDYWxsIG1fc2xvd0NhbGw7CiAgICAgICAgIERhdGFMYWJlbFB0ciBtX3RhcmdldFRv
Q2hlY2s7Ci0gICAgICAgIENhbGxMaW5rSW5mbzo6Q2FsbFR5cGUgbV9jYWxsVHlwZTsKLSAgICAg
ICAgR1BSUmVnIG1fY2FsbGVlOwotICAgICAgICBDb2RlT3JpZ2luIG1fY29kZU9yaWdpbjsKKyAg
ICAgICAgQ2FsbExpbmtJbmZvKiBtX2luZm87CiAgICAgfTsKICAgICAKICAgICBWZWN0b3I8SW5s
aW5lQ2FjaGVXcmFwcGVyPEpJVEdldEJ5SWRHZW5lcmF0b3I+LCA0PiBtX2dldEJ5SWRzOwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0Q29tcGlsZXJDb21tb24uY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdENvbXBp
bGVyQ29tbW9uLmNwcAkocmV2aXNpb24gMTY2MTI3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdPU1JFeGl0Q29tcGlsZXJDb21tb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05OCw5
ICs5OCwxMSBAQCB2b2lkIHJlaWZ5SW5saW5lZENhbGxGcmFtZXMoQ0NhbGxIZWxwZXJzCiAgICAg
ICAgIENvZGVCbG9jayogYmFzZWxpbmVDb2RlQmxvY2sgPSBqaXQuYmFzZWxpbmVDb2RlQmxvY2tG
b3IoY29kZU9yaWdpbik7CiAgICAgICAgIENvZGVCbG9jayogYmFzZWxpbmVDb2RlQmxvY2tGb3JD
YWxsZXIgPSBqaXQuYmFzZWxpbmVDb2RlQmxvY2tGb3IoaW5saW5lQ2FsbEZyYW1lLT5jYWxsZXIp
OwogICAgICAgICB1bnNpZ25lZCBjYWxsQnl0ZWNvZGVJbmRleCA9IGlubGluZUNhbGxGcmFtZS0+
Y2FsbGVyLmJ5dGVjb2RlSW5kZXg7Ci0gICAgICAgIENhbGxMaW5rSW5mbyYgY2FsbExpbmtJbmZv
ID0gYmFzZWxpbmVDb2RlQmxvY2tGb3JDYWxsZXItPmdldENhbGxMaW5rSW5mbyhjYWxsQnl0ZWNv
ZGVJbmRleCk7CisgICAgICAgIENhbGxMaW5rSW5mbyogY2FsbExpbmtJbmZvID0KKyAgICAgICAg
ICAgIGJhc2VsaW5lQ29kZUJsb2NrRm9yQ2FsbGVyLT5nZXRDYWxsTGlua0luZm9Gb3JCeXRlY29k
ZUluZGV4KGNhbGxCeXRlY29kZUluZGV4KTsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoY2FsbExp
bmtJbmZvKTsKICAgICAgICAgCi0gICAgICAgIHZvaWQqIGp1bXBUYXJnZXQgPSBjYWxsTGlua0lu
Zm8uY2FsbFJldHVybkxvY2F0aW9uLmV4ZWN1dGFibGVBZGRyZXNzKCk7CisgICAgICAgIHZvaWQq
IGp1bXBUYXJnZXQgPSBjYWxsTGlua0luZm8tPmNhbGxSZXR1cm5Mb2NhdGlvbi5leGVjdXRhYmxl
QWRkcmVzcygpOwogCiAgICAgICAgIEdQUlJlZyBjYWxsZXJGcmFtZUdQUjsKICAgICAgICAgaWYg
KGlubGluZUNhbGxGcmFtZS0+Y2FsbGVyLmlubGluZUNhbGxGcmFtZSkgewpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3Bw
CShyZXZpc2lvbiAxNjYxMjcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1
bGF0aXZlSklUMzJfNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03MjIsNiArNzIyLDggQEAgdm9p
ZCBTcGVjdWxhdGl2ZUpJVDo6ZW1pdENhbGwoTm9kZSogbm9kZQogICAgICAgICBtX2ppdC5tb3Zl
KGNhbGxlZVBheWxvYWRHUFIsIEdQUkluZm86OnJlZ1QwKTsKICAgICAgICAgbV9qaXQubW92ZShj
YWxsZWVUYWdHUFIsIEdQUkluZm86OnJlZ1QxKTsKICAgICB9CisgICAgQ2FsbExpbmtJbmZvKiBp
bmZvID0gbV9qaXQuY29kZUJsb2NrKCktPmFkZENhbGxMaW5rSW5mbygpOworICAgIG1faml0Lm1v
dmUoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIoaW5mbyksIEdQUkluZm86OnJlZ1QyKTsK
ICAgICBKSVRDb21waWxlcjo6Q2FsbCBzbG93Q2FsbCA9IG1faml0Lm5lYXJDYWxsKCk7CiAKICAg
ICBkb25lLmxpbmsoJm1faml0KTsKQEAgLTczMCw3ICs3MzIsMTAgQEAgdm9pZCBTcGVjdWxhdGl2
ZUpJVDo6ZW1pdENhbGwoTm9kZSogbm9kZQogCiAgICAganNWYWx1ZVJlc3VsdChyZXN1bHRUYWdH
UFIsIHJlc3VsdFBheWxvYWRHUFIsIG5vZGUsIERhdGFGb3JtYXRKUywgVXNlQ2hpbGRyZW5DYWxs
ZWRFeHBsaWNpdGx5KTsKIAotICAgIG1faml0LmFkZEpTQ2FsbChmYXN0Q2FsbCwgc2xvd0NhbGws
IHRhcmdldFRvQ2hlY2ssIGNhbGxUeXBlLCBjYWxsZWVQYXlsb2FkR1BSLCBub2RlLT5vcmlnaW4u
c2VtYW50aWMpOworICAgIGluZm8tPmNhbGxUeXBlID0gY2FsbFR5cGU7CisgICAgaW5mby0+Y29k
ZU9yaWdpbiA9IG5vZGUtPm9yaWdpbi5zZW1hbnRpYzsKKyAgICBpbmZvLT5jYWxsZWVHUFIgPSBj
YWxsZWVHUFI7CisgICAgbV9qaXQuYWRkSlNDYWxsKGZhc3RDYWxsLCBzbG93Q2FsbCwgdGFyZ2V0
VG9DaGVjaywgaW5mbyk7CiB9CiAKIHRlbXBsYXRlPGJvb2wgc3RyaWN0PgpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCShyZXZp
c2lvbiAxNjYxMjcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZl
SklUNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03MjEsMTQgKzcyMSw5IEBAIHZvaWQgU3BlY3Vs
YXRpdmVKSVQ6OmVtaXRDYWxsKE5vZGUqIG5vZGUKICAgICAKICAgICBzbG93UGF0aC5saW5rKCZt
X2ppdCk7CiAgICAgCi0gICAgaWYgKG1faml0LmdyYXBoKCkubV9wbGFuLndpbGxUcnlUb1RpZXJV
cCkgewotICAgICAgICBtX2ppdC5hZGQzMigKLSAgICAgICAgICAgIFRydXN0ZWRJbW0zMigxKSwK
LSAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBYnNvbHV0ZUFkZHJlc3MoCi0gICAgICAgICAg
ICAgICAgbV9qaXQuaml0Q29kZSgpLT5zbG93UGF0aENhbGxzLmJlZ2luKCkgKyBtX2ppdC5jdXJy
ZW50SlNDYWxsSW5kZXgoKSkpOwotICAgIH0KLSAgICAKICAgICBtX2ppdC5tb3ZlKGNhbGxlZUdQ
UiwgR1BSSW5mbzo6cmVnVDApOyAvLyBDYWxsZWUgbmVlZHMgdG8gYmUgaW4gcmVnVDAKKyAgICBD
YWxsTGlua0luZm8qIGNhbGxMaW5rSW5mbyA9IG1faml0LmNvZGVCbG9jaygpLT5hZGRDYWxsTGlu
a0luZm8oKTsKKyAgICBtX2ppdC5tb3ZlKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKGNh
bGxMaW5rSW5mbyksIEdQUkluZm86OnJlZ1QyKTsgLy8gTGluayBpbmZvIG5lZWRzIHRvIGJlIGlu
IHJlZ1QyCiAgICAgSklUQ29tcGlsZXI6OkNhbGwgc2xvd0NhbGwgPSBtX2ppdC5uZWFyQ2FsbCgp
OwogICAgIAogICAgIGRvbmUubGluaygmbV9qaXQpOwpAQCAtNzM3LDcgKzczMiwxMSBAQCB2b2lk
IFNwZWN1bGF0aXZlSklUOjplbWl0Q2FsbChOb2RlKiBub2RlCiAgICAgCiAgICAganNWYWx1ZVJl
c3VsdChyZXN1bHRHUFIsIG1fY3VycmVudE5vZGUsIERhdGFGb3JtYXRKUywgVXNlQ2hpbGRyZW5D
YWxsZWRFeHBsaWNpdGx5KTsKICAgICAKLSAgICBtX2ppdC5hZGRKU0NhbGwoZmFzdENhbGwsIHNs
b3dDYWxsLCB0YXJnZXRUb0NoZWNrLCBjYWxsVHlwZSwgY2FsbGVlR1BSLCBtX2N1cnJlbnROb2Rl
LT5vcmlnaW4uc2VtYW50aWMpOworICAgIGNhbGxMaW5rSW5mby0+Y2FsbFR5cGUgPSBjYWxsVHlw
ZTsKKyAgICBjYWxsTGlua0luZm8tPmNvZGVPcmlnaW4gPSBtX2N1cnJlbnROb2RlLT5vcmlnaW4u
c2VtYW50aWM7CisgICAgY2FsbExpbmtJbmZvLT5jYWxsZWVHUFIgPSBjYWxsZWVHUFI7CisgICAg
CisgICAgbV9qaXQuYWRkSlNDYWxsKGZhc3RDYWxsLCBzbG93Q2FsbCwgdGFyZ2V0VG9DaGVjaywg
Y2FsbExpbmtJbmZvKTsKIH0KIAogLy8gQ2xhbmcgc2hvdWxkIGFsbG93IHVucmVhY2hhYmxlIFtb
Y2xhbmc6OmZhbGx0aHJvdWdoXV0gaW4gdGVtcGxhdGUgZnVuY3Rpb25zIGlmIGFueSB0ZW1wbGF0
ZSBleHBhbnNpb24gdXNlcyBpdApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdT
cGVjdWxhdGl2ZUpJVC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAJKHJldmlzaW9uIDE2NjEyNykKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
NTMyLDQwICsxNTMyLDEwIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNoZWNrQXJndW1lbnRUeXBl
cygKICAgICBtX2lzQ2hlY2tpbmdBcmd1bWVudFR5cGVzID0gZmFsc2U7CiB9CiAKLXZvaWQgU3Bl
Y3VsYXRpdmVKSVQ6OnByZXBhcmVKSVRDb2RlRm9yVGllclVwKCkKLXsKLSAgICB1bnNpZ25lZCBu
dW1iZXJPZkNhbGxzID0gMDsKLSAgICAKLSAgICBmb3IgKEJsb2NrSW5kZXggYmxvY2tJbmRleCA9
IG1faml0LmdyYXBoKCkubnVtQmxvY2tzKCk7IGJsb2NrSW5kZXgtLTspIHsKLSAgICAgICAgQmFz
aWNCbG9jayogYmxvY2sgPSBtX2ppdC5ncmFwaCgpLmJsb2NrKGJsb2NrSW5kZXgpOwotICAgICAg
ICBpZiAoIWJsb2NrKQotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIAotICAgICAgICBm
b3IgKHVuc2lnbmVkIG5vZGVJbmRleCA9IGJsb2NrLT5zaXplKCk7IG5vZGVJbmRleC0tOykgewot
ICAgICAgICAgICAgTm9kZSogbm9kZSA9IGJsb2NrLT5hdChub2RlSW5kZXgpOwotICAgICAgICAg
ICAgCi0gICAgICAgICAgICBzd2l0Y2ggKG5vZGUtPm9wKCkpIHsKLSAgICAgICAgICAgIGNhc2Ug
Q2FsbDoKLSAgICAgICAgICAgIGNhc2UgQ29uc3RydWN0OgotICAgICAgICAgICAgICAgIG51bWJl
ck9mQ2FsbHMrKzsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAKLSAg
ICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9
Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgCi0gICAgbV9qaXQuaml0Q29kZSgpLT5zbG93UGF0aENh
bGxzLmZpbGwoMCwgbnVtYmVyT2ZDYWxscyk7Ci19Ci0KIGJvb2wgU3BlY3VsYXRpdmVKSVQ6OmNv
bXBpbGUoKQogewogICAgIGNoZWNrQXJndW1lbnRUeXBlcygpOwogICAgIAotICAgIGlmIChtX2pp
dC5ncmFwaCgpLm1fcGxhbi53aWxsVHJ5VG9UaWVyVXApCi0gICAgICAgIHByZXBhcmVKSVRDb2Rl
Rm9yVGllclVwKCk7Ci0gICAgCiAgICAgQVNTRVJUKCFtX2N1cnJlbnROb2RlKTsKICAgICBmb3Ig
KEJsb2NrSW5kZXggYmxvY2tJbmRleCA9IDA7IGJsb2NrSW5kZXggPCBtX2ppdC5ncmFwaCgpLm51
bUJsb2NrcygpOyArK2Jsb2NrSW5kZXgpIHsKICAgICAgICAgbV9qaXQuc2V0Rm9yQmxvY2tJbmRl
eChibG9ja0luZGV4KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3Vs
YXRpdmVKSVQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Nw
ZWN1bGF0aXZlSklULmgJKHJldmlzaW9uIDE2NjEyNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuaAkod29ya2luZyBjb3B5KQpAQCAtMTIwLDggKzEyMCw2
IEBAIHB1YmxpYzoKIAogICAgIGJvb2wgY29tcGlsZSgpOwogICAgIAotICAgIHZvaWQgcHJlcGFy
ZUpJVENvZGVGb3JUaWVyVXAoKTsKLSAgICAKICAgICB2b2lkIGNyZWF0ZU9TUkVudHJpZXMoKTsK
ICAgICB2b2lkIGxpbmtPU1JFbnRyaWVzKExpbmtCdWZmZXImKTsKIApJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2Z0bC9GVExDb21waWxlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZnRsL0ZUTENvbXBpbGUuY3BwCShyZXZpc2lvbiAxNjYxMjcpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTENvbXBpbGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00
MDIsNyArNDAyLDYgQEAgc3RhdGljIHZvaWQgZml4RnVuY3Rpb25CYXNlZE9uU3RhY2tNYXBzKAog
ICAgIAogICAgIHN0ZDo6c29ydChzdGF0ZS5qc0NhbGxzLmJlZ2luKCksIHN0YXRlLmpzQ2FsbHMu
ZW5kKCkpOwogICAgIAotICAgIGNvZGVCbG9jay0+c2V0TnVtYmVyT2ZDYWxsTGlua0luZm9zKHN0
YXRlLmpzQ2FsbHMuc2l6ZSgpKTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSBzdGF0ZS5qc0NhbGxz
LnNpemUoKTsgaS0tOykgewogICAgICAgICBKU0NhbGwmIGNhbGwgPSBzdGF0ZS5qc0NhbGxzW2ld
OwogCkBAIC00MTIsMTMgKzQxMSwxNSBAQCBzdGF0aWMgdm9pZCBmaXhGdW5jdGlvbkJhc2VkT25T
dGFja01hcHMoCiAgICAgICAgIGNoYXIqIHN0YXJ0T2ZJQyA9IGJpdHdpc2VfY2FzdDxjaGFyKj4o
Z2VuZXJhdGVkRnVuY3Rpb24pICsgY2FsbC5tX2luc3RydWN0aW9uT2Zmc2V0OwogICAgICAgICAK
ICAgICAgICAgTGlua0J1ZmZlciBsaW5rQnVmZmVyKHZtLCAmZmFzdFBhdGhKSVQsIHN0YXJ0T2ZJ
Qywgc2l6ZU9mQ2FsbCgpKTsKLSAgICAgICAgUkVMRUFTRV9BU1NFUlQobGlua0J1ZmZlci5pc1Zh
bGlkKCkpOworICAgICAgICBpZiAoIWxpbmtCdWZmZXIuaXNWYWxpZCgpKSB7CisgICAgICAgICAg
ICBkYXRhTG9nKCJGYWlsZWQgdG8gaW5zZXJ0IGlubGluZSBjYWNoZSBmb3IgY2FsbCBiZWNhdXNl
IHdlIHRob3VnaHQgdGhlIHNpemUgd291bGQgYmUgIiwgc2l6ZU9mQ2FsbCgpLCAiIGJ1dCBpdCBl
bmRlZCB1cCBiZWluZyAiLCBmYXN0UGF0aEpJVC5tX2Fzc2VtYmxlci5jb2RlU2l6ZSgpLCAiIHBy
aW9yIHRvIGNvbXBhY3Rpb24uXG4iKTsKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9S
RUFDSEVEKCk7CisgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpB
c3NlbWJsZXJUeXBlX1Q6OmZpbGxOb3BzKAogICAgICAgICAgICAgc3RhcnRPZklDICsgbGlua0J1
ZmZlci5zaXplKCksIHNpemVPZkNhbGwoKSAtIGxpbmtCdWZmZXIuc2l6ZSgpKTsKICAgICAgICAg
Ci0gICAgICAgIENhbGxMaW5rSW5mbyYgaW5mbyA9IGNvZGVCbG9jay0+Y2FsbExpbmtJbmZvKGkp
OwotICAgICAgICBjYWxsLmxpbmsodm0sIGxpbmtCdWZmZXIsIGluZm8pOworICAgICAgICBjYWxs
Lmxpbmsodm0sIGxpbmtCdWZmZXIpOwogICAgIH0KICAgICAKICAgICBSZXBhdGNoQnVmZmVyIHJl
cGF0Y2hCdWZmZXIoY29kZUJsb2NrKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwv
RlRMSW5saW5lQ2FjaGVTaXplLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZnRsL0ZUTElubGluZUNhY2hlU2l6ZS5jcHAJKHJldmlzaW9uIDE2NjEyNykKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMSW5saW5lQ2FjaGVTaXplLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNjYsNyArNjYsNyBAQCBzaXplX3Qgc2l6ZU9mQ2FsbCgpCiAjaWYgQ1BVKEFSTTY0KQog
ICAgIHJldHVybiA0NDsKICNlbHNlCi0gICAgcmV0dXJuIDQzOworICAgIHJldHVybiA1MzsKICNl
bmRpZgogfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEpTQ2FsbC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExKU0NhbGwuY3BwCShy
ZXZpc2lvbiAxNjYxMjcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEpTQ2FsbC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTM0LDcgKzM0LDggQEAgbmFtZXNwYWNlIEpTQyB7IG5hbWVz
cGFjZSBGVEwgewogCiBKU0NhbGw6OkpTQ2FsbCgpCiAgICAgOiBtX3N0YWNrbWFwSUQoVUlOVF9N
QVgpCi0gICAgLCBtX25vZGUoMCkKKyAgICAsIG1fbm9kZShudWxscHRyKQorICAgICwgbV9jYWxs
TGlua0luZm8obnVsbHB0cikKICAgICAsIG1faW5zdHJ1Y3Rpb25PZmZzZXQoVUlOVF9NQVgpCiB7
CiB9CkBAIC00MiwxMiArNDMsMTUgQEAgSlNDYWxsOjpKU0NhbGwoKQogSlNDYWxsOjpKU0NhbGwo
dW5zaWduZWQgc3RhY2ttYXBJRCwgREZHOjpOb2RlKiBub2RlKQogICAgIDogbV9zdGFja21hcElE
KHN0YWNrbWFwSUQpCiAgICAgLCBtX25vZGUobm9kZSkKKyAgICAsIG1fY2FsbExpbmtJbmZvKG51
bGxwdHIpCiAgICAgLCBtX2luc3RydWN0aW9uT2Zmc2V0KDApCiB7CiB9CiAKIHZvaWQgSlNDYWxs
OjplbWl0KENDYWxsSGVscGVycyYgaml0KQogeworICAgIG1fY2FsbExpbmtJbmZvID0gaml0LmNv
ZGVCbG9jaygpLT5hZGRDYWxsTGlua0luZm8oKTsKKyAgICAKICAgICBDQ2FsbEhlbHBlcnM6Okp1
bXAgc2xvd1BhdGggPSBqaXQuYnJhbmNoUHRyV2l0aFBhdGNoKAogICAgICAgICBDQ2FsbEhlbHBl
cnM6Ok5vdEVxdWFsLCBHUFJJbmZvOjpyZWdUMCwgbV90YXJnZXRUb0NoZWNrLAogICAgICAgICBD
Q2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoMCkpOwpAQCAtNjUsMTIgKzY5LDE0IEBAIHZvaWQg
SlNDYWxsOjplbWl0KENDYWxsSGVscGVycyYgaml0KQogICAgIENDYWxsSGVscGVyczo6SnVtcCBk
b25lID0gaml0Lmp1bXAoKTsKICAgICAKICAgICBzbG93UGF0aC5saW5rKCZqaXQpOworICAgIAor
ICAgIGppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihtX2NhbGxMaW5rSW5mbyks
IEdQUkluZm86OnJlZ1QyKTsKICAgICBtX3Nsb3dDYWxsID0gaml0Lm5lYXJDYWxsKCk7CiAgICAg
CiAgICAgZG9uZS5saW5rKCZqaXQpOwogfQogCi12b2lkIEpTQ2FsbDo6bGluayhWTSYgdm0sIExp
bmtCdWZmZXImIGxpbmtCdWZmZXIsIENhbGxMaW5rSW5mbyYgY2FsbEluZm8pCit2b2lkIEpTQ2Fs
bDo6bGluayhWTSYgdm0sIExpbmtCdWZmZXImIGxpbmtCdWZmZXIpCiB7CiAgICAgVGh1bmtHZW5l
cmF0b3IgZ2VuZXJhdG9yID0gbGlua1RodW5rR2VuZXJhdG9yRm9yKAogICAgICAgICBtX25vZGUt
Pm9wKCkgPT0gREZHOjpDb25zdHJ1Y3QgPyBDb2RlRm9yQ29uc3RydWN0IDogQ29kZUZvckNhbGws
CkBAIC03OSwxMyArODUsMTMgQEAgdm9pZCBKU0NhbGw6OmxpbmsoVk0mIHZtLCBMaW5rQnVmZmVy
JiBsaQogICAgIGxpbmtCdWZmZXIubGluaygKICAgICAgICAgbV9zbG93Q2FsbCwgRnVuY3Rpb25Q
dHIodm0uZ2V0Q1RJU3R1YihnZW5lcmF0b3IpLmNvZGUoKS5leGVjdXRhYmxlQWRkcmVzcygpKSk7
CiAgICAgCi0gICAgY2FsbEluZm8uaXNGVEwgPSB0cnVlOwotICAgIGNhbGxJbmZvLmNhbGxUeXBl
ID0gbV9ub2RlLT5vcCgpID09IERGRzo6Q29uc3RydWN0ID8gQ2FsbExpbmtJbmZvOjpDb25zdHJ1
Y3QgOiBDYWxsTGlua0luZm86OkNhbGw7Ci0gICAgY2FsbEluZm8uY29kZU9yaWdpbiA9IG1fbm9k
ZS0+b3JpZ2luLnNlbWFudGljOwotICAgIGNhbGxJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbiA9IGxp
bmtCdWZmZXIubG9jYXRpb25PZk5lYXJDYWxsKG1fc2xvd0NhbGwpOwotICAgIGNhbGxJbmZvLmhv
dFBhdGhCZWdpbiA9IGxpbmtCdWZmZXIubG9jYXRpb25PZihtX3RhcmdldFRvQ2hlY2spOwotICAg
IGNhbGxJbmZvLmhvdFBhdGhPdGhlciA9IGxpbmtCdWZmZXIubG9jYXRpb25PZk5lYXJDYWxsKG1f
ZmFzdENhbGwpOwotICAgIGNhbGxJbmZvLmNhbGxlZUdQUiA9IEdQUkluZm86OnJlZ1QwOworICAg
IG1fY2FsbExpbmtJbmZvLT5pc0ZUTCA9IHRydWU7CisgICAgbV9jYWxsTGlua0luZm8tPmNhbGxU
eXBlID0gbV9ub2RlLT5vcCgpID09IERGRzo6Q29uc3RydWN0ID8gQ2FsbExpbmtJbmZvOjpDb25z
dHJ1Y3QgOiBDYWxsTGlua0luZm86OkNhbGw7CisgICAgbV9jYWxsTGlua0luZm8tPmNvZGVPcmln
aW4gPSBtX25vZGUtPm9yaWdpbi5zZW1hbnRpYzsKKyAgICBtX2NhbGxMaW5rSW5mby0+Y2FsbFJl
dHVybkxvY2F0aW9uID0gbGlua0J1ZmZlci5sb2NhdGlvbk9mTmVhckNhbGwobV9zbG93Q2FsbCk7
CisgICAgbV9jYWxsTGlua0luZm8tPmhvdFBhdGhCZWdpbiA9IGxpbmtCdWZmZXIubG9jYXRpb25P
ZihtX3RhcmdldFRvQ2hlY2spOworICAgIG1fY2FsbExpbmtJbmZvLT5ob3RQYXRoT3RoZXIgPSBs
aW5rQnVmZmVyLmxvY2F0aW9uT2ZOZWFyQ2FsbChtX2Zhc3RDYWxsKTsKKyAgICBtX2NhbGxMaW5r
SW5mby0+Y2FsbGVlR1BSID0gR1BSSW5mbzo6cmVnVDA7CiB9CiAKIH0gfSAvLyBuYW1lc3BhY2Ug
SlNDOjpGVEwKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMSlNDYWxsLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExKU0NhbGwuaAkocmV2aXNp
b24gMTY2MTI3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExKU0NhbGwuaAkod29y
a2luZyBjb3B5KQpAQCAtNDcsNyArNDcsNyBAQCBwdWJsaWM6CiAgICAgSlNDYWxsKHVuc2lnbmVk
IHN0YWNrbWFwSUQsIERGRzo6Tm9kZSopOwogICAgIAogICAgIHZvaWQgZW1pdChDQ2FsbEhlbHBl
cnMmKTsKLSAgICB2b2lkIGxpbmsoVk0mLCBMaW5rQnVmZmVyJiwgQ2FsbExpbmtJbmZvJik7Cisg
ICAgdm9pZCBsaW5rKFZNJiwgTGlua0J1ZmZlciYpOwogICAgIAogICAgIHVuc2lnbmVkIHN0YWNr
bWFwSUQoKSBjb25zdCB7IHJldHVybiBtX3N0YWNrbWFwSUQ7IH0KICAgICAKQEAgLTYyLDYgKzYy
LDcgQEAgcHJpdmF0ZToKICAgICBDQ2FsbEhlbHBlcnM6OkRhdGFMYWJlbFB0ciBtX3RhcmdldFRv
Q2hlY2s7CiAgICAgQ0NhbGxIZWxwZXJzOjpDYWxsIG1fZmFzdENhbGw7CiAgICAgQ0NhbGxIZWxw
ZXJzOjpDYWxsIG1fc2xvd0NhbGw7CisgICAgQ2FsbExpbmtJbmZvKiBtX2NhbGxMaW5rSW5mbzsK
IAogcHVibGljOgogICAgIHVpbnQzMl90IG1faW5zdHJ1Y3Rpb25PZmZzZXQ7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVQuY3BwCShyZXZpc2lvbiAxNjYxMjcpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0pJVC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgot
ICogQ29weXJpZ2h0IChDKSAyMDA4LCAyMDA5LCAyMDEyLCAyMDEzIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOCwgMjAwOSwgMjAxMiwgMjAxMywg
MjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKQEAgLTI5NCw3ICsyOTQsNyBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVN
YWluUGFzcygpCiAgICAgICAgIH0KICAgICB9CiAKLSAgICBSRUxFQVNFX0FTU0VSVChtX2NhbGxM
aW5rSW5mb0luZGV4ID09IG1fY2FsbFN0cnVjdHVyZVN0dWJDb21waWxhdGlvbkluZm8uc2l6ZSgp
KTsKKyAgICBSRUxFQVNFX0FTU0VSVChtX2NhbGxMaW5rSW5mb0luZGV4ID09IG1fY2FsbENvbXBp
bGF0aW9uSW5mby5zaXplKCkpOwogCiAjaWZuZGVmIE5ERUJVRwogICAgIC8vIFJlc2V0IHRoaXMs
IGluIG9yZGVyIHRvIGd1YXJkIGl0cyB1c2Ugd2l0aCBBU1NFUlRzLgpAQCAtNDI1LDcgKzQyNSw3
IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZVNsb3dDYXNlcygpCiAKICAgICBSRUxFQVNFX0FT
U0VSVChtX2dldEJ5SWRJbmRleCA9PSBtX2dldEJ5SWRzLnNpemUoKSk7CiAgICAgUkVMRUFTRV9B
U1NFUlQobV9wdXRCeUlkSW5kZXggPT0gbV9wdXRCeUlkcy5zaXplKCkpOwotICAgIFJFTEVBU0Vf
QVNTRVJUKG1fY2FsbExpbmtJbmZvSW5kZXggPT0gbV9jYWxsU3RydWN0dXJlU3R1YkNvbXBpbGF0
aW9uSW5mby5zaXplKCkpOworICAgIFJFTEVBU0VfQVNTRVJUKG1fY2FsbExpbmtJbmZvSW5kZXgg
PT0gbV9jYWxsQ29tcGlsYXRpb25JbmZvLnNpemUoKSk7CiAgICAgUkVMRUFTRV9BU1NFUlQobnVt
YmVyT2ZWYWx1ZVByb2ZpbGVzID09IG1fY29kZUJsb2NrLT5udW1iZXJPZlZhbHVlUHJvZmlsZXMo
KSk7CiAKICNpZm5kZWYgTkRFQlVHCkBAIC02NDMsMTUgKzY0MywxMiBAQCBDb21waWxhdGlvblJl
c3VsdCBKSVQ6OnByaXZhdGVDb21waWxlKEpJCiAgICAgICAgICAgICBkaWZmZXJlbmNlQmV0d2Vl
bkNvZGVQdHIoYmFkVHlwZUp1bXAsIGRvbmVUYXJnZXQpLAogICAgICAgICAgICAgZGlmZmVyZW5j
ZUJldHdlZW5Db2RlUHRyKHJldHVybkFkZHJlc3MsIHNsb3dQYXRoVGFyZ2V0KSk7CiAgICAgfQot
ICAgIG1fY29kZUJsb2NrLT5zZXROdW1iZXJPZkNhbGxMaW5rSW5mb3MobV9jYWxsU3RydWN0dXJl
U3R1YkNvbXBpbGF0aW9uSW5mby5zaXplKCkpOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBtX2NvZGVCbG9jay0+bnVtYmVyT2ZDYWxsTGlua0luZm9zKCk7ICsraSkgewotICAgICAgICBD
YWxsTGlua0luZm8mIGluZm8gPSBtX2NvZGVCbG9jay0+Y2FsbExpbmtJbmZvKGkpOwotICAgICAg
ICBpbmZvLmNhbGxUeXBlID0gbV9jYWxsU3RydWN0dXJlU3R1YkNvbXBpbGF0aW9uSW5mb1tpXS5j
YWxsVHlwZTsKLSAgICAgICAgaW5mby5jb2RlT3JpZ2luID0gQ29kZU9yaWdpbihtX2NhbGxTdHJ1
Y3R1cmVTdHViQ29tcGlsYXRpb25JbmZvW2ldLmJ5dGVjb2RlSW5kZXgpOwotICAgICAgICBpbmZv
LmNhbGxSZXR1cm5Mb2NhdGlvbiA9IHBhdGNoQnVmZmVyLmxvY2F0aW9uT2ZOZWFyQ2FsbChtX2Nh
bGxTdHJ1Y3R1cmVTdHViQ29tcGlsYXRpb25JbmZvW2ldLmNhbGxSZXR1cm5Mb2NhdGlvbik7Ci0g
ICAgICAgIGluZm8uaG90UGF0aEJlZ2luID0gcGF0Y2hCdWZmZXIubG9jYXRpb25PZihtX2NhbGxT
dHJ1Y3R1cmVTdHViQ29tcGlsYXRpb25JbmZvW2ldLmhvdFBhdGhCZWdpbik7Ci0gICAgICAgIGlu
Zm8uaG90UGF0aE90aGVyID0gcGF0Y2hCdWZmZXIubG9jYXRpb25PZk5lYXJDYWxsKG1fY2FsbFN0
cnVjdHVyZVN0dWJDb21waWxhdGlvbkluZm9baV0uaG90UGF0aE90aGVyKTsKLSAgICAgICAgaW5m
by5jYWxsZWVHUFIgPSByZWdUMDsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9jYWxs
Q29tcGlsYXRpb25JbmZvLnNpemUoKTsgKytpKSB7CisgICAgICAgIENhbGxDb21waWxhdGlvbklu
Zm8mIGNvbXBpbGF0aW9uSW5mbyA9IG1fY2FsbENvbXBpbGF0aW9uSW5mb1tpXTsKKyAgICAgICAg
Q2FsbExpbmtJbmZvJiBpbmZvID0gKmNvbXBpbGF0aW9uSW5mby5jYWxsTGlua0luZm87CisgICAg
ICAgIGluZm8uY2FsbFJldHVybkxvY2F0aW9uID0gcGF0Y2hCdWZmZXIubG9jYXRpb25PZk5lYXJD
YWxsKGNvbXBpbGF0aW9uSW5mby5jYWxsUmV0dXJuTG9jYXRpb24pOworICAgICAgICBpbmZvLmhv
dFBhdGhCZWdpbiA9IHBhdGNoQnVmZmVyLmxvY2F0aW9uT2YoY29tcGlsYXRpb25JbmZvLmhvdFBh
dGhCZWdpbik7CisgICAgICAgIGluZm8uaG90UGF0aE90aGVyID0gcGF0Y2hCdWZmZXIubG9jYXRp
b25PZk5lYXJDYWxsKGNvbXBpbGF0aW9uSW5mby5ob3RQYXRoT3RoZXIpOwogICAgIH0KIAogICAg
IENvbXBhY3RKSVRDb2RlTWFwOjpFbmNvZGVyIGppdENvZGVNYXBFbmNvZGVyOwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0pJVC5oCShyZXZpc2lvbiAxNjYxMjcpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENv
cHlyaWdodCAoQykgMjAwOCwgMjAxMiwgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMTIsIDIwMTMsIDIwMTQgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0x
NjcsMTIgKzE2NywxMSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6
OkNhbGwgcmV0dXJuQWRkcmVzczsKICAgICB9OwogCi0gICAgc3RydWN0IFN0cnVjdHVyZVN0dWJD
b21waWxhdGlvbkluZm8geworICAgIHN0cnVjdCBDYWxsQ29tcGlsYXRpb25JbmZvIHsKICAgICAg
ICAgTWFjcm9Bc3NlbWJsZXI6OkRhdGFMYWJlbFB0ciBob3RQYXRoQmVnaW47CiAgICAgICAgIE1h
Y3JvQXNzZW1ibGVyOjpDYWxsIGhvdFBhdGhPdGhlcjsKICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6
OkNhbGwgY2FsbFJldHVybkxvY2F0aW9uOwotICAgICAgICBDYWxsTGlua0luZm86OkNhbGxUeXBl
IGNhbGxUeXBlOwotICAgICAgICB1bnNpZ25lZCBieXRlY29kZUluZGV4OworICAgICAgICBDYWxs
TGlua0luZm8qIGNhbGxMaW5rSW5mbzsKICAgICB9OwogCiAgICAgLy8gTmVhciBjYWxscyBjYW4g
b25seSBiZSBwYXRjaGVkIHRvIG90aGVyIEpJVCBjb2RlLCByZWd1bGFyIGNhbGxzIGNhbiBiZSBw
YXRjaGVkIHRvIEpJVCBjb2RlIG9yIHJlbGlua2VkIHRvIHN0dWIgZnVuY3Rpb25zLgpAQCAtNzk1
LDcgKzc5NCw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBWZWN0b3I8SklUR2V0QnlJZEdl
bmVyYXRvcj4gbV9nZXRCeUlkczsKICAgICAgICAgVmVjdG9yPEpJVFB1dEJ5SWRHZW5lcmF0b3I+
IG1fcHV0QnlJZHM7CiAgICAgICAgIFZlY3RvcjxCeVZhbENvbXBpbGF0aW9uSW5mbz4gbV9ieVZh
bENvbXBpbGF0aW9uSW5mbzsKLSAgICAgICAgVmVjdG9yPFN0cnVjdHVyZVN0dWJDb21waWxhdGlv
bkluZm8+IG1fY2FsbFN0cnVjdHVyZVN0dWJDb21waWxhdGlvbkluZm87CisgICAgICAgIFZlY3Rv
cjxDYWxsQ29tcGlsYXRpb25JbmZvPiBtX2NhbGxDb21waWxhdGlvbkluZm87CiAgICAgICAgIFZl
Y3RvcjxKdW1wVGFibGU+IG1fam1wVGFibGU7CiAKICAgICAgICAgdW5zaWduZWQgbV9ieXRlY29k
ZU9mZnNldDsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ2FsbDMyXzY0LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENhbGwzMl82NC5j
cHAJKHJldmlzaW9uIDE2NjEyNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ2Fs
bDMyXzY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjMzLDYgKzIzMyw3IEBAIHZvaWQgSklUOjpj
b21waWxlQ2FsbEV2YWxTbG93Q2FzZShJbnN0cnUKIAogICAgIGxvYWRQdHIoQWRkcmVzcyhzdGFj
a1BvaW50ZXJSZWdpc3Rlciwgc2l6ZW9mKFJlZ2lzdGVyKSAqIEpTU3RhY2s6OkNhbGxlZSAtIHNp
emVvZihDYWxsZXJGcmFtZUFuZFBDKSksIHJlZ1QwKTsKICAgICBsb2FkUHRyKEFkZHJlc3Moc3Rh
Y2tQb2ludGVyUmVnaXN0ZXIsIHNpemVvZihSZWdpc3RlcikgKiBKU1N0YWNrOjpDYWxsZWUgLSBz
aXplb2YoQ2FsbGVyRnJhbWVBbmRQQykpLCByZWdUMSk7CisgICAgbW92ZShUcnVzdGVkSW1tUHRy
KCZDYWxsTGlua0luZm86OmR1bW15KCkpLCByZWdUMik7CiAKICAgICBlbWl0TG9hZChKU1N0YWNr
OjpDYWxsZWUsIHJlZ1QxLCByZWdUMCk7CiAgICAgZW1pdE5ha2VkQ2FsbChtX3ZtLT5nZXRDVElT
dHViKHZpcnR1YWxDYWxsVGh1bmtHZW5lcmF0b3IpLmNvZGUoKSk7CkBAIC0yOTksMTggKzMwMCwy
MSBAQCB2b2lkIEpJVDo6Y29tcGlsZU9wQ2FsbChPcGNvZGVJRCBvcGNvZGVJCiAgICAgYWRkU2xv
d0Nhc2Uoc2xvd0Nhc2UpOwogICAgIGFkZFNsb3dDYXNlKGJyYW5jaDMyKE5vdEVxdWFsLCByZWdU
MSwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkNlbGxUYWcpKSk7CiAKLSAgICBBU1NFUlQobV9jYWxs
U3RydWN0dXJlU3R1YkNvbXBpbGF0aW9uSW5mby5zaXplKCkgPT0gY2FsbExpbmtJbmZvSW5kZXgp
OwotICAgIG1fY2FsbFN0cnVjdHVyZVN0dWJDb21waWxhdGlvbkluZm8uYXBwZW5kKFN0cnVjdHVy
ZVN0dWJDb21waWxhdGlvbkluZm8oKSk7Ci0gICAgbV9jYWxsU3RydWN0dXJlU3R1YkNvbXBpbGF0
aW9uSW5mb1tjYWxsTGlua0luZm9JbmRleF0uaG90UGF0aEJlZ2luID0gYWRkcmVzc09mTGlua2Vk
RnVuY3Rpb25DaGVjazsKLSAgICBtX2NhbGxTdHJ1Y3R1cmVTdHViQ29tcGlsYXRpb25JbmZvW2Nh
bGxMaW5rSW5mb0luZGV4XS5jYWxsVHlwZSA9IENhbGxMaW5rSW5mbzo6Y2FsbFR5cGVGb3Iob3Bj
b2RlSUQpOwotICAgIG1fY2FsbFN0cnVjdHVyZVN0dWJDb21waWxhdGlvbkluZm9bY2FsbExpbmtJ
bmZvSW5kZXhdLmJ5dGVjb2RlSW5kZXggPSBtX2J5dGVjb2RlT2Zmc2V0OworICAgIEFTU0VSVCht
X2NhbGxDb21waWxhdGlvbkluZm8uc2l6ZSgpID09IGNhbGxMaW5rSW5mb0luZGV4KTsKKyAgICBD
YWxsTGlua0luZm8qIGluZm8gPSBtX2NvZGVCbG9jay0+YWRkQ2FsbExpbmtJbmZvKCk7CisgICAg
aW5mby0+Y2FsbFR5cGUgPSBDYWxsTGlua0luZm86OmNhbGxUeXBlRm9yKG9wY29kZUlEKTsKKyAg
ICBpbmZvLT5jb2RlT3JpZ2luID0gQ29kZU9yaWdpbihtX2J5dGVjb2RlT2Zmc2V0KTsKKyAgICBp
bmZvLT5jYWxsZWVHUFIgPSByZWdUMDsKKyAgICBtX2NhbGxDb21waWxhdGlvbkluZm8uYXBwZW5k
KENhbGxDb21waWxhdGlvbkluZm8oKSk7CisgICAgbV9jYWxsQ29tcGlsYXRpb25JbmZvW2NhbGxM
aW5rSW5mb0luZGV4XS5ob3RQYXRoQmVnaW4gPSBhZGRyZXNzT2ZMaW5rZWRGdW5jdGlvbkNoZWNr
OworICAgIG1fY2FsbENvbXBpbGF0aW9uSW5mb1tjYWxsTGlua0luZm9JbmRleF0uY2FsbExpbmtJ
bmZvID0gaW5mbzsKIAogICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgT0JKRUNUX09GRlNFVE9G
KEpTRnVuY3Rpb24sIG1fc2NvcGUpKSwgcmVnVDIpOwogICAgIHN0b3JlMzIocmVnVDIsIEFkZHJl
c3MoTWFjcm9Bc3NlbWJsZXI6OnN0YWNrUG9pbnRlclJlZ2lzdGVyLCBKU1N0YWNrOjpTY29wZUNo
YWluICogc2l6ZW9mKFJlZ2lzdGVyKSArIFBheWxvYWRPZmZzZXQgLSBzaXplb2YoQ2FsbGVyRnJh
bWVBbmRQQykpKTsKICAgICBzdG9yZTMyKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpDZWxsVGFnKSwg
QWRkcmVzcyhzdGFja1BvaW50ZXJSZWdpc3RlciwgSlNTdGFjazo6U2NvcGVDaGFpbiAqIHNpemVv
ZihSZWdpc3RlcikgKyBUYWdPZmZzZXQgLSBzaXplb2YoQ2FsbGVyRnJhbWVBbmRQQykpKTsKIAog
ICAgIGNoZWNrU3RhY2tQb2ludGVyQWxpZ25tZW50KCk7Ci0gICAgbV9jYWxsU3RydWN0dXJlU3R1
YkNvbXBpbGF0aW9uSW5mb1tjYWxsTGlua0luZm9JbmRleF0uaG90UGF0aE90aGVyID0gZW1pdE5h
a2VkQ2FsbCgpOworICAgIG1fY2FsbENvbXBpbGF0aW9uSW5mb1tjYWxsTGlua0luZm9JbmRleF0u
aG90UGF0aE90aGVyID0gZW1pdE5ha2VkQ2FsbCgpOwogCiAgICAgYWRkUHRyKFRydXN0ZWRJbW0z
MihzdGFja1BvaW50ZXJPZmZzZXRGb3IobV9jb2RlQmxvY2spICogc2l6ZW9mKFJlZ2lzdGVyKSks
IGNhbGxGcmFtZVJlZ2lzdGVyLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CiAgICAgY2hlY2tTdGFj
a1BvaW50ZXJBbGlnbm1lbnQoKTsKQEAgLTMzMyw3ICszMzcsOCBAQCB2b2lkIEpJVDo6Y29tcGls
ZU9wQ2FsbFNsb3dDYXNlKE9wY29kZUlECiAgICAgICAgIG9wY29kZUlEID09IG9wX2NvbnN0cnVj
dCA/IENvZGVGb3JDb25zdHJ1Y3QgOiBDb2RlRm9yQ2FsbCwKICAgICAgICAgUmVnaXN0ZXJQcmVz
ZXJ2YXRpb25Ob3RSZXF1aXJlZCk7CiAgICAgCi0gICAgbV9jYWxsU3RydWN0dXJlU3R1YkNvbXBp
bGF0aW9uSW5mb1tjYWxsTGlua0luZm9JbmRleF0uY2FsbFJldHVybkxvY2F0aW9uID0gZW1pdE5h
a2VkQ2FsbChtX3ZtLT5nZXRDVElTdHViKGdlbmVyYXRvcikuY29kZSgpKTsKKyAgICBtb3ZlKFRy
dXN0ZWRJbW1QdHIobV9jYWxsQ29tcGlsYXRpb25JbmZvW2NhbGxMaW5rSW5mb0luZGV4XS5jYWxs
TGlua0luZm8pLCByZWdUMik7CisgICAgbV9jYWxsQ29tcGlsYXRpb25JbmZvW2NhbGxMaW5rSW5m
b0luZGV4XS5jYWxsUmV0dXJuTG9jYXRpb24gPSBlbWl0TmFrZWRDYWxsKG1fdm0tPmdldENUSVN0
dWIoZ2VuZXJhdG9yKS5jb2RlKCkpOwogCiAgICAgYWRkUHRyKFRydXN0ZWRJbW0zMihzdGFja1Bv
aW50ZXJPZmZzZXRGb3IobV9jb2RlQmxvY2spICogc2l6ZW9mKFJlZ2lzdGVyKSksIGNhbGxGcmFt
ZVJlZ2lzdGVyLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CiAgICAgY2hlY2tTdGFja1BvaW50ZXJB
bGlnbm1lbnQoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ2FsbC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDYWxsLmNwcAkocmV2
aXNpb24gMTY2MTI3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDYWxsLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDgs
IDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDA4LCAyMDEzLCAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMTU3LDYgKzE1Nyw3IEBAIHZvaWQgSklUOjpjb21w
aWxlQ2FsbEV2YWxTbG93Q2FzZShJbnN0cnUKICAgICBsaW5rU2xvd0Nhc2UoaXRlcik7CiAKICAg
ICBsb2FkNjQoQWRkcmVzcyhzdGFja1BvaW50ZXJSZWdpc3Rlciwgc2l6ZW9mKFJlZ2lzdGVyKSAq
IEpTU3RhY2s6OkNhbGxlZSAtIHNpemVvZihDYWxsZXJGcmFtZUFuZFBDKSksIHJlZ1QwKTsKKyAg
ICBtb3ZlKFRydXN0ZWRJbW1QdHIoJkNhbGxMaW5rSW5mbzo6ZHVtbXkoKSksIHJlZ1QyKTsKICAg
ICBlbWl0TmFrZWRDYWxsKG1fdm0tPmdldENUSVN0dWIodmlydHVhbENhbGxUaHVua0dlbmVyYXRv
cikuY29kZSgpKTsKICAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKHN0YWNrUG9pbnRlck9mZnNldEZv
cihtX2NvZGVCbG9jaykgKiBzaXplb2YoUmVnaXN0ZXIpKSwgY2FsbEZyYW1lUmVnaXN0ZXIsIHN0
YWNrUG9pbnRlclJlZ2lzdGVyKTsKICAgICBjaGVja1N0YWNrUG9pbnRlckFsaWdubWVudCgpOwpA
QCAtMjE5LDE2ICsyMjAsMTkgQEAgdm9pZCBKSVQ6OmNvbXBpbGVPcENhbGwoT3Bjb2RlSUQgb3Bj
b2RlSQogICAgIEp1bXAgc2xvd0Nhc2UgPSBicmFuY2hQdHJXaXRoUGF0Y2goTm90RXF1YWwsIHJl
Z1QwLCBhZGRyZXNzT2ZMaW5rZWRGdW5jdGlvbkNoZWNrLCBUcnVzdGVkSW1tUHRyKDApKTsKICAg
ICBhZGRTbG93Q2FzZShzbG93Q2FzZSk7CiAKLSAgICBBU1NFUlQobV9jYWxsU3RydWN0dXJlU3R1
YkNvbXBpbGF0aW9uSW5mby5zaXplKCkgPT0gY2FsbExpbmtJbmZvSW5kZXgpOwotICAgIG1fY2Fs
bFN0cnVjdHVyZVN0dWJDb21waWxhdGlvbkluZm8uYXBwZW5kKFN0cnVjdHVyZVN0dWJDb21waWxh
dGlvbkluZm8oKSk7Ci0gICAgbV9jYWxsU3RydWN0dXJlU3R1YkNvbXBpbGF0aW9uSW5mb1tjYWxs
TGlua0luZm9JbmRleF0uaG90UGF0aEJlZ2luID0gYWRkcmVzc09mTGlua2VkRnVuY3Rpb25DaGVj
azsKLSAgICBtX2NhbGxTdHJ1Y3R1cmVTdHViQ29tcGlsYXRpb25JbmZvW2NhbGxMaW5rSW5mb0lu
ZGV4XS5jYWxsVHlwZSA9IENhbGxMaW5rSW5mbzo6Y2FsbFR5cGVGb3Iob3Bjb2RlSUQpOwotICAg
IG1fY2FsbFN0cnVjdHVyZVN0dWJDb21waWxhdGlvbkluZm9bY2FsbExpbmtJbmZvSW5kZXhdLmJ5
dGVjb2RlSW5kZXggPSBtX2J5dGVjb2RlT2Zmc2V0OworICAgIEFTU0VSVChtX2NhbGxDb21waWxh
dGlvbkluZm8uc2l6ZSgpID09IGNhbGxMaW5rSW5mb0luZGV4KTsKKyAgICBDYWxsTGlua0luZm8q
IGluZm8gPSBtX2NvZGVCbG9jay0+YWRkQ2FsbExpbmtJbmZvKCk7CisgICAgaW5mby0+Y2FsbFR5
cGUgPSBDYWxsTGlua0luZm86OmNhbGxUeXBlRm9yKG9wY29kZUlEKTsKKyAgICBpbmZvLT5jb2Rl
T3JpZ2luID0gQ29kZU9yaWdpbihtX2J5dGVjb2RlT2Zmc2V0KTsKKyAgICBpbmZvLT5jYWxsZWVH
UFIgPSByZWdUMDsKKyAgICBtX2NhbGxDb21waWxhdGlvbkluZm8uYXBwZW5kKENhbGxDb21waWxh
dGlvbkluZm8oKSk7CisgICAgbV9jYWxsQ29tcGlsYXRpb25JbmZvW2NhbGxMaW5rSW5mb0luZGV4
XS5ob3RQYXRoQmVnaW4gPSBhZGRyZXNzT2ZMaW5rZWRGdW5jdGlvbkNoZWNrOworICAgIG1fY2Fs
bENvbXBpbGF0aW9uSW5mb1tjYWxsTGlua0luZm9JbmRleF0uY2FsbExpbmtJbmZvID0gaW5mbzsK
IAogICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgT0JKRUNUX09GRlNFVE9GKEpTRnVuY3Rpb24s
IG1fc2NvcGUpKSwgcmVnVDIpOwogICAgIHN0b3JlNjQocmVnVDIsIEFkZHJlc3MoTWFjcm9Bc3Nl
bWJsZXI6OnN0YWNrUG9pbnRlclJlZ2lzdGVyLCBKU1N0YWNrOjpTY29wZUNoYWluICogc2l6ZW9m
KFJlZ2lzdGVyKSAtIHNpemVvZihDYWxsZXJGcmFtZUFuZFBDKSkpOwogCi0gICAgbV9jYWxsU3Ry
dWN0dXJlU3R1YkNvbXBpbGF0aW9uSW5mb1tjYWxsTGlua0luZm9JbmRleF0uaG90UGF0aE90aGVy
ID0gZW1pdE5ha2VkQ2FsbCgpOworICAgIG1fY2FsbENvbXBpbGF0aW9uSW5mb1tjYWxsTGlua0lu
Zm9JbmRleF0uaG90UGF0aE90aGVyID0gZW1pdE5ha2VkQ2FsbCgpOwogCiAgICAgYWRkUHRyKFRy
dXN0ZWRJbW0zMihzdGFja1BvaW50ZXJPZmZzZXRGb3IobV9jb2RlQmxvY2spICogc2l6ZW9mKFJl
Z2lzdGVyKSksIGNhbGxGcmFtZVJlZ2lzdGVyLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CiAgICAg
Y2hlY2tTdGFja1BvaW50ZXJBbGlnbm1lbnQoKTsKQEAgLTI1MSw3ICsyNTUsOCBAQCB2b2lkIEpJ
VDo6Y29tcGlsZU9wQ2FsbFNsb3dDYXNlKE9wY29kZUlECiAgICAgICAgIG9wY29kZUlEID09IG9w
X2NvbnN0cnVjdCA/IENvZGVGb3JDb25zdHJ1Y3QgOiBDb2RlRm9yQ2FsbCwKICAgICAgICAgUmVn
aXN0ZXJQcmVzZXJ2YXRpb25Ob3RSZXF1aXJlZCk7CiAgICAgCi0gICAgbV9jYWxsU3RydWN0dXJl
U3R1YkNvbXBpbGF0aW9uSW5mb1tjYWxsTGlua0luZm9JbmRleF0uY2FsbFJldHVybkxvY2F0aW9u
ID0gZW1pdE5ha2VkQ2FsbChtX3ZtLT5nZXRDVElTdHViKGdlbmVyYXRvcikuY29kZSgpKTsKKyAg
ICBtb3ZlKFRydXN0ZWRJbW1QdHIobV9jYWxsQ29tcGlsYXRpb25JbmZvW2NhbGxMaW5rSW5mb0lu
ZGV4XS5jYWxsTGlua0luZm8pLCByZWdUMik7CisgICAgbV9jYWxsQ29tcGlsYXRpb25JbmZvW2Nh
bGxMaW5rSW5mb0luZGV4XS5jYWxsUmV0dXJuTG9jYXRpb24gPSBlbWl0TmFrZWRDYWxsKG1fdm0t
PmdldENUSVN0dWIoZ2VuZXJhdG9yKS5jb2RlKCkpOwogCiAgICAgYWRkUHRyKFRydXN0ZWRJbW0z
MihzdGFja1BvaW50ZXJPZmZzZXRGb3IobV9jb2RlQmxvY2spICogc2l6ZW9mKFJlZ2lzdGVyKSks
IGNhbGxGcmFtZVJlZ2lzdGVyLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CiAgICAgY2hlY2tTdGFj
a1BvaW50ZXJBbGlnbm1lbnQoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklU
T3BlcmF0aW9ucy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9K
SVRPcGVyYXRpb25zLmNwcAkocmV2aXNpb24gMTY2MTI3KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVRPcGVyYXRpb25zLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjc0LDcgKzY3NCw4
IEBAIHN0YXRpYyB2b2lkKiBoYW5kbGVIb3N0Q2FsbChFeGVjU3RhdGUqIGUKIH0KIAogaW5saW5l
IGNoYXIqIGxpbmtGb3IoCi0gICAgRXhlY1N0YXRlKiBleGVjQ2FsbGVlLCBDb2RlU3BlY2lhbGl6
YXRpb25LaW5kIGtpbmQsIFJlZ2lzdGVyUHJlc2VydmF0aW9uTW9kZSByZWdpc3RlcnMpCisgICAg
RXhlY1N0YXRlKiBleGVjQ2FsbGVlLCBDYWxsTGlua0luZm8qIGNhbGxMaW5rSW5mbywgQ29kZVNw
ZWNpYWxpemF0aW9uS2luZCBraW5kLAorICAgIFJlZ2lzdGVyUHJlc2VydmF0aW9uTW9kZSByZWdp
c3RlcnMpCiB7CiAgICAgRXhlY1N0YXRlKiBleGVjID0gZXhlY0NhbGxlZS0+Y2FsbGVyRnJhbWUo
KTsKICAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKQEAgLTY5Miw3ICs2OTMsNiBAQCBpbmxpbmUg
Y2hhciogbGlua0ZvcigKIAogICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciBjb2RlUHRyOwogICAg
IENvZGVCbG9jayogY29kZUJsb2NrID0gMDsKLSAgICBDYWxsTGlua0luZm8mIGNhbGxMaW5rSW5m
byA9IGV4ZWMtPmNvZGVCbG9jaygpLT5nZXRDYWxsTGlua0luZm8oZXhlY0NhbGxlZS0+cmV0dXJu
UEMoKSk7CiAgICAgaWYgKGV4ZWN1dGFibGUtPmlzSG9zdEZ1bmN0aW9uKCkpCiAgICAgICAgIGNv
ZGVQdHIgPSBleGVjdXRhYmxlLT5lbnRyeXBvaW50Rm9yKCp2bSwga2luZCwgTXVzdENoZWNrQXJp
dHksIHJlZ2lzdGVycyk7CiAgICAgZWxzZSB7CkBAIC03MDUsMzcgKzcwNSwzNyBAQCBpbmxpbmUg
Y2hhciogbGlua0ZvcigKICAgICAgICAgfQogICAgICAgICBjb2RlQmxvY2sgPSBmdW5jdGlvbkV4
ZWN1dGFibGUtPmNvZGVCbG9ja0ZvcihraW5kKTsKICAgICAgICAgQXJpdHlDaGVja01vZGUgYXJp
dHk7Ci0gICAgICAgIGlmIChleGVjQ2FsbGVlLT5hcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcygp
IDwgc3RhdGljX2Nhc3Q8c2l6ZV90Pihjb2RlQmxvY2stPm51bVBhcmFtZXRlcnMoKSkgfHwgY2Fs
bExpbmtJbmZvLmNhbGxUeXBlID09IENhbGxMaW5rSW5mbzo6Q2FsbFZhcmFyZ3MpCisgICAgICAg
IGlmIChleGVjQ2FsbGVlLT5hcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcygpIDwgc3RhdGljX2Nh
c3Q8c2l6ZV90Pihjb2RlQmxvY2stPm51bVBhcmFtZXRlcnMoKSkgfHwgY2FsbExpbmtJbmZvLT5j
YWxsVHlwZSA9PSBDYWxsTGlua0luZm86OkNhbGxWYXJhcmdzKQogICAgICAgICAgICAgYXJpdHkg
PSBNdXN0Q2hlY2tBcml0eTsKICAgICAgICAgZWxzZQogICAgICAgICAgICAgYXJpdHkgPSBBcml0
eUNoZWNrTm90UmVxdWlyZWQ7CiAgICAgICAgIGNvZGVQdHIgPSBmdW5jdGlvbkV4ZWN1dGFibGUt
PmVudHJ5cG9pbnRGb3IoKnZtLCBraW5kLCBhcml0eSwgcmVnaXN0ZXJzKTsKICAgICB9Ci0gICAg
aWYgKCFjYWxsTGlua0luZm8uc2Vlbk9uY2UoKSkKLSAgICAgICAgY2FsbExpbmtJbmZvLnNldFNl
ZW4oKTsKKyAgICBpZiAoIWNhbGxMaW5rSW5mby0+c2Vlbk9uY2UoKSkKKyAgICAgICAgY2FsbExp
bmtJbmZvLT5zZXRTZWVuKCk7CiAgICAgZWxzZQotICAgICAgICBsaW5rRm9yKGV4ZWNDYWxsZWUs
IGNhbGxMaW5rSW5mbywgY29kZUJsb2NrLCBjYWxsZWUsIGNvZGVQdHIsIGtpbmQsIHJlZ2lzdGVy
cyk7CisgICAgICAgIGxpbmtGb3IoZXhlY0NhbGxlZSwgKmNhbGxMaW5rSW5mbywgY29kZUJsb2Nr
LCBjYWxsZWUsIGNvZGVQdHIsIGtpbmQsIHJlZ2lzdGVycyk7CiAgICAgcmV0dXJuIHJlaW50ZXJw
cmV0X2Nhc3Q8Y2hhcio+KGNvZGVQdHIuZXhlY3V0YWJsZUFkZHJlc3MoKSk7CiB9CiAKLWNoYXIq
IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uTGlua0NhbGwoRXhlY1N0YXRlKiBleGVjQ2FsbGVlKQor
Y2hhciogSklUX09QRVJBVElPTiBvcGVyYXRpb25MaW5rQ2FsbChFeGVjU3RhdGUqIGV4ZWNDYWxs
ZWUsIENhbGxMaW5rSW5mbyogY2FsbExpbmtJbmZvKQogewotICAgIHJldHVybiBsaW5rRm9yKGV4
ZWNDYWxsZWUsIENvZGVGb3JDYWxsLCBSZWdpc3RlclByZXNlcnZhdGlvbk5vdFJlcXVpcmVkKTsK
KyAgICByZXR1cm4gbGlua0ZvcihleGVjQ2FsbGVlLCBjYWxsTGlua0luZm8sIENvZGVGb3JDYWxs
LCBSZWdpc3RlclByZXNlcnZhdGlvbk5vdFJlcXVpcmVkKTsKIH0KIAotY2hhciogSklUX09QRVJB
VElPTiBvcGVyYXRpb25MaW5rQ29uc3RydWN0KEV4ZWNTdGF0ZSogZXhlY0NhbGxlZSkKK2NoYXIq
IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uTGlua0NvbnN0cnVjdChFeGVjU3RhdGUqIGV4ZWNDYWxs
ZWUsIENhbGxMaW5rSW5mbyogY2FsbExpbmtJbmZvKQogewotICAgIHJldHVybiBsaW5rRm9yKGV4
ZWNDYWxsZWUsIENvZGVGb3JDb25zdHJ1Y3QsIFJlZ2lzdGVyUHJlc2VydmF0aW9uTm90UmVxdWly
ZWQpOworICAgIHJldHVybiBsaW5rRm9yKGV4ZWNDYWxsZWUsIGNhbGxMaW5rSW5mbywgQ29kZUZv
ckNvbnN0cnVjdCwgUmVnaXN0ZXJQcmVzZXJ2YXRpb25Ob3RSZXF1aXJlZCk7CiB9CiAKLWNoYXIq
IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uTGlua0NhbGxUaGF0UHJlc2VydmVzUmVncyhFeGVjU3Rh
dGUqIGV4ZWNDYWxsZWUpCitjaGFyKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkxpbmtDYWxsVGhh
dFByZXNlcnZlc1JlZ3MoRXhlY1N0YXRlKiBleGVjQ2FsbGVlLCBDYWxsTGlua0luZm8qIGNhbGxM
aW5rSW5mbykKIHsKLSAgICByZXR1cm4gbGlua0ZvcihleGVjQ2FsbGVlLCBDb2RlRm9yQ2FsbCwg
TXVzdFByZXNlcnZlUmVnaXN0ZXJzKTsKKyAgICByZXR1cm4gbGlua0ZvcihleGVjQ2FsbGVlLCBj
YWxsTGlua0luZm8sIENvZGVGb3JDYWxsLCBNdXN0UHJlc2VydmVSZWdpc3RlcnMpOwogfQogCi1j
aGFyKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkxpbmtDb25zdHJ1Y3RUaGF0UHJlc2VydmVzUmVn
cyhFeGVjU3RhdGUqIGV4ZWNDYWxsZWUpCitjaGFyKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkxp
bmtDb25zdHJ1Y3RUaGF0UHJlc2VydmVzUmVncyhFeGVjU3RhdGUqIGV4ZWNDYWxsZWUsIENhbGxM
aW5rSW5mbyogY2FsbExpbmtJbmZvKQogewotICAgIHJldHVybiBsaW5rRm9yKGV4ZWNDYWxsZWUs
IENvZGVGb3JDb25zdHJ1Y3QsIE11c3RQcmVzZXJ2ZVJlZ2lzdGVycyk7CisgICAgcmV0dXJuIGxp
bmtGb3IoZXhlY0NhbGxlZSwgY2FsbExpbmtJbmZvLCBDb2RlRm9yQ29uc3RydWN0LCBNdXN0UHJl
c2VydmVSZWdpc3RlcnMpOwogfQogCiBpbmxpbmUgY2hhciogdmlydHVhbEZvcldpdGhGdW5jdGlv
bigKQEAgLTgxMyw0NiArODEzLDQ0IEBAIHN0YXRpYyBib29sIGF0dGVtcHRUb09wdGltaXplQ2xv
c3VyZUNhbGwKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotY2hhciogSklUX09QRVJBVElPTiBvcGVy
YXRpb25MaW5rQ2xvc3VyZUNhbGwoRXhlY1N0YXRlKiBleGVjQ2FsbGVlKQorY2hhciogSklUX09Q
RVJBVElPTiBvcGVyYXRpb25MaW5rQ2xvc3VyZUNhbGwoRXhlY1N0YXRlKiBleGVjQ2FsbGVlLCBD
YWxsTGlua0luZm8qIGNhbGxMaW5rSW5mbykKIHsKICAgICBKU0NlbGwqIGNhbGxlZUFzRnVuY3Rp
b25DZWxsOwogICAgIGNoYXIqIHJlc3VsdCA9IHZpcnR1YWxGb3JXaXRoRnVuY3Rpb24oZXhlY0Nh
bGxlZSwgQ29kZUZvckNhbGwsIFJlZ2lzdGVyUHJlc2VydmF0aW9uTm90UmVxdWlyZWQsIGNhbGxl
ZUFzRnVuY3Rpb25DZWxsKTsKLSAgICBDYWxsTGlua0luZm8mIGNhbGxMaW5rSW5mbyA9IGV4ZWND
YWxsZWUtPmNhbGxlckZyYW1lKCktPmNvZGVCbG9jaygpLT5nZXRDYWxsTGlua0luZm8oZXhlY0Nh
bGxlZS0+cmV0dXJuUEMoKSk7CiAKLSAgICBpZiAoIWF0dGVtcHRUb09wdGltaXplQ2xvc3VyZUNh
bGwoZXhlY0NhbGxlZSwgUmVnaXN0ZXJQcmVzZXJ2YXRpb25Ob3RSZXF1aXJlZCwgY2FsbGVlQXNG
dW5jdGlvbkNlbGwsIGNhbGxMaW5rSW5mbykpCi0gICAgICAgIGxpbmtTbG93Rm9yKGV4ZWNDYWxs
ZWUsIGNhbGxMaW5rSW5mbywgQ29kZUZvckNhbGwsIFJlZ2lzdGVyUHJlc2VydmF0aW9uTm90UmVx
dWlyZWQpOworICAgIGlmICghYXR0ZW1wdFRvT3B0aW1pemVDbG9zdXJlQ2FsbChleGVjQ2FsbGVl
LCBSZWdpc3RlclByZXNlcnZhdGlvbk5vdFJlcXVpcmVkLCBjYWxsZWVBc0Z1bmN0aW9uQ2VsbCwg
KmNhbGxMaW5rSW5mbykpCisgICAgICAgIGxpbmtTbG93Rm9yKGV4ZWNDYWxsZWUsICpjYWxsTGlu
a0luZm8sIENvZGVGb3JDYWxsLCBSZWdpc3RlclByZXNlcnZhdGlvbk5vdFJlcXVpcmVkKTsKICAg
ICAKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi1jaGFyKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlv
blZpcnR1YWxDYWxsKEV4ZWNTdGF0ZSogZXhlY0NhbGxlZSkKK2NoYXIqIEpJVF9PUEVSQVRJT04g
b3BlcmF0aW9uVmlydHVhbENhbGwoRXhlY1N0YXRlKiBleGVjQ2FsbGVlLCBDYWxsTGlua0luZm8q
KQogeyAgICAKICAgICByZXR1cm4gdmlydHVhbEZvcihleGVjQ2FsbGVlLCBDb2RlRm9yQ2FsbCwg
UmVnaXN0ZXJQcmVzZXJ2YXRpb25Ob3RSZXF1aXJlZCk7CiB9CiAKLWNoYXIqIEpJVF9PUEVSQVRJ
T04gb3BlcmF0aW9uVmlydHVhbENvbnN0cnVjdChFeGVjU3RhdGUqIGV4ZWNDYWxsZWUpCitjaGFy
KiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblZpcnR1YWxDb25zdHJ1Y3QoRXhlY1N0YXRlKiBleGVj
Q2FsbGVlLCBDYWxsTGlua0luZm8qKQogewogICAgIHJldHVybiB2aXJ0dWFsRm9yKGV4ZWNDYWxs
ZWUsIENvZGVGb3JDb25zdHJ1Y3QsIFJlZ2lzdGVyUHJlc2VydmF0aW9uTm90UmVxdWlyZWQpOwog
fQogCi1jaGFyKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkxpbmtDbG9zdXJlQ2FsbFRoYXRQcmVz
ZXJ2ZXNSZWdzKEV4ZWNTdGF0ZSogZXhlY0NhbGxlZSkKK2NoYXIqIEpJVF9PUEVSQVRJT04gb3Bl
cmF0aW9uTGlua0Nsb3N1cmVDYWxsVGhhdFByZXNlcnZlc1JlZ3MoRXhlY1N0YXRlKiBleGVjQ2Fs
bGVlLCBDYWxsTGlua0luZm8qIGNhbGxMaW5rSW5mbykKIHsKICAgICBKU0NlbGwqIGNhbGxlZUFz
RnVuY3Rpb25DZWxsOwogICAgIGNoYXIqIHJlc3VsdCA9IHZpcnR1YWxGb3JXaXRoRnVuY3Rpb24o
ZXhlY0NhbGxlZSwgQ29kZUZvckNhbGwsIE11c3RQcmVzZXJ2ZVJlZ2lzdGVycywgY2FsbGVlQXNG
dW5jdGlvbkNlbGwpOwotICAgIENhbGxMaW5rSW5mbyYgY2FsbExpbmtJbmZvID0gZXhlY0NhbGxl
ZS0+Y2FsbGVyRnJhbWUoKS0+Y29kZUJsb2NrKCktPmdldENhbGxMaW5rSW5mbyhleGVjQ2FsbGVl
LT5yZXR1cm5QQygpKTsKIAotICAgIGlmICghYXR0ZW1wdFRvT3B0aW1pemVDbG9zdXJlQ2FsbChl
eGVjQ2FsbGVlLCBNdXN0UHJlc2VydmVSZWdpc3RlcnMsIGNhbGxlZUFzRnVuY3Rpb25DZWxsLCBj
YWxsTGlua0luZm8pKQotICAgICAgICBsaW5rU2xvd0ZvcihleGVjQ2FsbGVlLCBjYWxsTGlua0lu
Zm8sIENvZGVGb3JDYWxsLCBNdXN0UHJlc2VydmVSZWdpc3RlcnMpOworICAgIGlmICghYXR0ZW1w
dFRvT3B0aW1pemVDbG9zdXJlQ2FsbChleGVjQ2FsbGVlLCBNdXN0UHJlc2VydmVSZWdpc3RlcnMs
IGNhbGxlZUFzRnVuY3Rpb25DZWxsLCAqY2FsbExpbmtJbmZvKSkKKyAgICAgICAgbGlua1Nsb3dG
b3IoZXhlY0NhbGxlZSwgKmNhbGxMaW5rSW5mbywgQ29kZUZvckNhbGwsIE11c3RQcmVzZXJ2ZVJl
Z2lzdGVycyk7CiAgICAgCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotY2hhciogSklUX09QRVJB
VElPTiBvcGVyYXRpb25WaXJ0dWFsQ2FsbFRoYXRQcmVzZXJ2ZXNSZWdzKEV4ZWNTdGF0ZSogZXhl
Y0NhbGxlZSkKK2NoYXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uVmlydHVhbENhbGxUaGF0UHJl
c2VydmVzUmVncyhFeGVjU3RhdGUqIGV4ZWNDYWxsZWUsIENhbGxMaW5rSW5mbyopCiB7ICAgIAog
ICAgIHJldHVybiB2aXJ0dWFsRm9yKGV4ZWNDYWxsZWUsIENvZGVGb3JDYWxsLCBNdXN0UHJlc2Vy
dmVSZWdpc3RlcnMpOwogfQogCi1jaGFyKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblZpcnR1YWxD
b25zdHJ1Y3RUaGF0UHJlc2VydmVzUmVncyhFeGVjU3RhdGUqIGV4ZWNDYWxsZWUpCitjaGFyKiBK
SVRfT1BFUkFUSU9OIG9wZXJhdGlvblZpcnR1YWxDb25zdHJ1Y3RUaGF0UHJlc2VydmVzUmVncyhF
eGVjU3RhdGUqIGV4ZWNDYWxsZWUsIENhbGxMaW5rSW5mbyopCiB7CiAgICAgcmV0dXJuIHZpcnR1
YWxGb3IoZXhlY0NhbGxlZSwgQ29kZUZvckNvbnN0cnVjdCwgTXVzdFByZXNlcnZlUmVnaXN0ZXJz
KTsKIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5oCShy
ZXZpc2lvbiAxNjYxMjcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlv
bnMuaAkod29ya2luZyBjb3B5KQpAQCAtNjAsNiArNjAsNyBAQCBleHRlcm4gIkMiIHsKICAgICBB
YXA6IEFycmF5QWxsb2NhdGlvblByb2ZpbGUqCiAgICAgQzogSlNDZWxsKgogICAgIENiOiBDb2Rl
QmxvY2sqCisgICAgQ2xpOiBDYWxsTGlua0luZm8qCiAgICAgRDogZG91YmxlCiAgICAgRTogRXhl
Y1N0YXRlKgogICAgIEY6IENhbGxGcmFtZSoKQEAgLTE2OCw2ICsxNjksNyBAQCB0eXBlZGVmIHZv
aWQgSklUX09QRVJBVElPTiAoKlZfSklUT3BlcmF0CiB0eXBlZGVmIHZvaWQgSklUX09QRVJBVElP
TiAoKlZfSklUT3BlcmF0aW9uX0VWbSkoRXhlY1N0YXRlKiwgVk0qKTsKIHR5cGVkZWYgY2hhciog
SklUX09QRVJBVElPTiAoKlBfSklUT3BlcmF0aW9uX0UpKEV4ZWNTdGF0ZSopOwogdHlwZWRlZiBj
aGFyKiBKSVRfT1BFUkFUSU9OICgqUF9KSVRPcGVyYXRpb25fRUMpKEV4ZWNTdGF0ZSosIEpTQ2Vs
bCopOwordHlwZWRlZiBjaGFyKiBKSVRfT1BFUkFUSU9OICgqUF9KSVRPcGVyYXRpb25fRUNsaSko
RXhlY1N0YXRlKiwgQ2FsbExpbmtJbmZvKik7CiB0eXBlZGVmIGNoYXIqIEpJVF9PUEVSQVRJT04g
KCpQX0pJVE9wZXJhdGlvbl9FSlMpKEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlLCBzaXplX3Qp
OwogdHlwZWRlZiBjaGFyKiBKSVRfT1BFUkFUSU9OICgqUF9KSVRPcGVyYXRpb25fRU8pKEV4ZWNT
dGF0ZSosIEpTT2JqZWN0Kik7CiB0eXBlZGVmIGNoYXIqIEpJVF9PUEVSQVRJT04gKCpQX0pJVE9w
ZXJhdGlvbl9FT1MpKEV4ZWNTdGF0ZSosIEpTT2JqZWN0Kiwgc2l6ZV90KTsKQEAgLTIxOCwxNiAr
MjIwLDE2IEBAIHZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25EaXJlY3RQdXRCeVYKIHZvaWQg
SklUX09QRVJBVElPTiBvcGVyYXRpb25QdXRCeVZhbEdlbmVyaWMoRXhlY1N0YXRlKiwgRW5jb2Rl
ZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSkgV1RGX0lOVEVSTkFMOwog
dm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkRpcmVjdFB1dEJ5VmFsR2VuZXJpYyhFeGVjU3Rh
dGUqLCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVlKSBXVEZf
SU5URVJOQUw7CiBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkNhbGxFdmFs
KEV4ZWNTdGF0ZSosIEV4ZWNTdGF0ZSopIFdURl9JTlRFUk5BTDsKLWNoYXIqIEpJVF9PUEVSQVRJ
T04gb3BlcmF0aW9uTGlua0NhbGwoRXhlY1N0YXRlKikgV1RGX0lOVEVSTkFMOwotY2hhciogSklU
X09QRVJBVElPTiBvcGVyYXRpb25MaW5rQ2xvc3VyZUNhbGwoRXhlY1N0YXRlKikgV1RGX0lOVEVS
TkFMOwotY2hhciogSklUX09QRVJBVElPTiBvcGVyYXRpb25WaXJ0dWFsQ2FsbChFeGVjU3RhdGUq
KSBXVEZfSU5URVJOQUw7Ci1jaGFyKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblZpcnR1YWxDb25z
dHJ1Y3QoRXhlY1N0YXRlKikgV1RGX0lOVEVSTkFMOwotY2hhciogSklUX09QRVJBVElPTiBvcGVy
YXRpb25MaW5rQ29uc3RydWN0KEV4ZWNTdGF0ZSopIFdURl9JTlRFUk5BTDsKLWNoYXIqIEpJVF9P
UEVSQVRJT04gb3BlcmF0aW9uTGlua0NhbGxUaGF0UHJlc2VydmVzUmVncyhFeGVjU3RhdGUqKSBX
VEZfSU5URVJOQUw7Ci1jaGFyKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkxpbmtDbG9zdXJlQ2Fs
bFRoYXRQcmVzZXJ2ZXNSZWdzKEV4ZWNTdGF0ZSopIFdURl9JTlRFUk5BTDsKLWNoYXIqIEpJVF9P
UEVSQVRJT04gb3BlcmF0aW9uVmlydHVhbENhbGxUaGF0UHJlc2VydmVzUmVncyhFeGVjU3RhdGUq
KSBXVEZfSU5URVJOQUw7Ci1jaGFyKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblZpcnR1YWxDb25z
dHJ1Y3RUaGF0UHJlc2VydmVzUmVncyhFeGVjU3RhdGUqKSBXVEZfSU5URVJOQUw7Ci1jaGFyKiBK
SVRfT1BFUkFUSU9OIG9wZXJhdGlvbkxpbmtDb25zdHJ1Y3RUaGF0UHJlc2VydmVzUmVncyhFeGVj
U3RhdGUqKSBXVEZfSU5URVJOQUw7CitjaGFyKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkxpbmtD
YWxsKEV4ZWNTdGF0ZSosIENhbGxMaW5rSW5mbyopIFdURl9JTlRFUk5BTDsKK2NoYXIqIEpJVF9P
UEVSQVRJT04gb3BlcmF0aW9uTGlua0Nsb3N1cmVDYWxsKEV4ZWNTdGF0ZSosIENhbGxMaW5rSW5m
byopIFdURl9JTlRFUk5BTDsKK2NoYXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uVmlydHVhbENh
bGwoRXhlY1N0YXRlKiwgQ2FsbExpbmtJbmZvKikgV1RGX0lOVEVSTkFMOworY2hhciogSklUX09Q
RVJBVElPTiBvcGVyYXRpb25WaXJ0dWFsQ29uc3RydWN0KEV4ZWNTdGF0ZSosIENhbGxMaW5rSW5m
byopIFdURl9JTlRFUk5BTDsKK2NoYXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uTGlua0NvbnN0
cnVjdChFeGVjU3RhdGUqLCBDYWxsTGlua0luZm8qKSBXVEZfSU5URVJOQUw7CitjaGFyKiBKSVRf
T1BFUkFUSU9OIG9wZXJhdGlvbkxpbmtDYWxsVGhhdFByZXNlcnZlc1JlZ3MoRXhlY1N0YXRlKiwg
Q2FsbExpbmtJbmZvKikgV1RGX0lOVEVSTkFMOworY2hhciogSklUX09QRVJBVElPTiBvcGVyYXRp
b25MaW5rQ2xvc3VyZUNhbGxUaGF0UHJlc2VydmVzUmVncyhFeGVjU3RhdGUqLCBDYWxsTGlua0lu
Zm8qKSBXVEZfSU5URVJOQUw7CitjaGFyKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblZpcnR1YWxD
YWxsVGhhdFByZXNlcnZlc1JlZ3MoRXhlY1N0YXRlKiwgQ2FsbExpbmtJbmZvKikgV1RGX0lOVEVS
TkFMOworY2hhciogSklUX09QRVJBVElPTiBvcGVyYXRpb25WaXJ0dWFsQ29uc3RydWN0VGhhdFBy
ZXNlcnZlc1JlZ3MoRXhlY1N0YXRlKiwgQ2FsbExpbmtJbmZvKikgV1RGX0lOVEVSTkFMOworY2hh
ciogSklUX09QRVJBVElPTiBvcGVyYXRpb25MaW5rQ29uc3RydWN0VGhhdFByZXNlcnZlc1JlZ3Mo
RXhlY1N0YXRlKiwgQ2FsbExpbmtJbmZvKikgV1RGX0lOVEVSTkFMOwogCiBzaXplX3QgSklUX09Q
RVJBVElPTiBvcGVyYXRpb25Db21wYXJlTGVzcyhFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSwg
RW5jb2RlZEpTVmFsdWUpIFdURl9JTlRFUk5BTDsKIHNpemVfdCBKSVRfT1BFUkFUSU9OIG9wZXJh
dGlvbkNvbXBhcmVMZXNzRXEoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUsIEVuY29kZWRKU1Zh
bHVlKSBXVEZfSU5URVJOQUw7CkBAIC0yOTcsNyArMjk5LDcgQEAgdm9pZCBKSVRfT1BFUkFUSU9O
IG9wZXJhdGlvbkluaXRHbG9iYWxDbwogCiB9IC8vIGV4dGVybiAiQyIKIAotaW5saW5lIFBfSklU
T3BlcmF0aW9uX0Ugb3BlcmF0aW9uTGlua0ZvcigKK2lubGluZSBQX0pJVE9wZXJhdGlvbl9FQ2xp
IG9wZXJhdGlvbkxpbmtGb3IoCiAgICAgQ29kZVNwZWNpYWxpemF0aW9uS2luZCBraW5kLCBSZWdp
c3RlclByZXNlcnZhdGlvbk1vZGUgcmVnaXN0ZXJzKQogewogICAgIHN3aXRjaCAoa2luZCkgewpA
QCAtMzIyLDcgKzMyNCw3IEBAIGlubGluZSBQX0pJVE9wZXJhdGlvbl9FIG9wZXJhdGlvbkxpbmtG
b3IKICAgICByZXR1cm4gMDsKIH0KIAotaW5saW5lIFBfSklUT3BlcmF0aW9uX0Ugb3BlcmF0aW9u
VmlydHVhbEZvcigKK2lubGluZSBQX0pJVE9wZXJhdGlvbl9FQ2xpIG9wZXJhdGlvblZpcnR1YWxG
b3IoCiAgICAgQ29kZVNwZWNpYWxpemF0aW9uS2luZCBraW5kLCBSZWdpc3RlclByZXNlcnZhdGlv
bk1vZGUgcmVnaXN0ZXJzKQogewogICAgIHN3aXRjaCAoa2luZCkgewpAQCAtMzQ3LDcgKzM0OSw3
IEBAIGlubGluZSBQX0pJVE9wZXJhdGlvbl9FIG9wZXJhdGlvblZpcnR1YWwKICAgICByZXR1cm4g
MDsKIH0KIAotaW5saW5lIFBfSklUT3BlcmF0aW9uX0Ugb3BlcmF0aW9uTGlua0Nsb3N1cmVDYWxs
Rm9yKFJlZ2lzdGVyUHJlc2VydmF0aW9uTW9kZSByZWdpc3RlcnMpCitpbmxpbmUgUF9KSVRPcGVy
YXRpb25fRUNsaSBvcGVyYXRpb25MaW5rQ2xvc3VyZUNhbGxGb3IoUmVnaXN0ZXJQcmVzZXJ2YXRp
b25Nb2RlIHJlZ2lzdGVycykKIHsKICAgICBzd2l0Y2ggKHJlZ2lzdGVycykgewogICAgIGNhc2Ug
UmVnaXN0ZXJQcmVzZXJ2YXRpb25Ob3RSZXF1aXJlZDoKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvUmVwYXRjaC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9SZXBhdGNoLmNwcAkocmV2aXNpb24gMTY2MTI3KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9SZXBhdGNoLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTQ1Miw5ICsxNDUyLDEwIEBA
IHZvaWQgbGlua0Nsb3N1cmVDYWxsKAogI2lmIFVTRShKU1ZBTFVFMzJfNjQpCiAgICAgc3R1Ykpp
dC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKEpTVmFsdWU6OkNlbGxUYWcpLCBHUFJJ
bmZvOjpyZWdUMSk7CiAjZW5kaWYKLSAgICBzdHViSml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVz
dGVkSW1tUHRyKGNhbGxMaW5rSW5mby5jYWxsUmV0dXJuTG9jYXRpb24uZXhlY3V0YWJsZUFkZHJl
c3MoKSksIEdQUkluZm86OnJlZ1QyKTsKKyAgICBzdHViSml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpU
cnVzdGVkSW1tUHRyKCZjYWxsTGlua0luZm8pLCBHUFJJbmZvOjpyZWdUMik7CisgICAgc3R1Ykpp
dC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihjYWxsTGlua0luZm8uY2FsbFJldHVy
bkxvY2F0aW9uLmV4ZWN1dGFibGVBZGRyZXNzKCkpLCBHUFJJbmZvOjpyZWdUNCk7CiAgICAgCi0g
ICAgc3R1YkppdC5yZXN0b3JlUmV0dXJuQWRkcmVzc0JlZm9yZVJldHVybihHUFJJbmZvOjpyZWdU
Mik7CisgICAgc3R1YkppdC5yZXN0b3JlUmV0dXJuQWRkcmVzc0JlZm9yZVJldHVybihHUFJJbmZv
OjpyZWdUNCk7CiAgICAgQXNzZW1ibHlIZWxwZXJzOjpKdW1wIHNsb3cgPSBzdHViSml0Lmp1bXAo
KTsKICAgICAKICAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKCp2bSwgJnN0dWJKaXQsIGNhbGxl
ckNvZGVCbG9jayk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1RodW5rR2VuZXJh
dG9ycy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9UaHVua0dl
bmVyYXRvcnMuY3BwCShyZXZpc2lvbiAxNjYxMjcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L1RodW5rR2VuZXJhdG9ycy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc5LDEzICs3OSwxMyBA
QCBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgdGhyb3dFeGNlcHRpb25Gcm9tCiB9CiAKIHN0YXRpYyB2
b2lkIHNsb3dQYXRoRm9yKAotICAgIENDYWxsSGVscGVycyYgaml0LCBWTSogdm0sIFBfSklUT3Bl
cmF0aW9uX0Ugc2xvd1BhdGhGdW5jdGlvbikKKyAgICBDQ2FsbEhlbHBlcnMmIGppdCwgVk0qIHZt
LCBQX0pJVE9wZXJhdGlvbl9FQ2xpIHNsb3dQYXRoRnVuY3Rpb24pCiB7CiAgICAgaml0LmVtaXRG
dW5jdGlvblByb2xvZ3VlKCk7CiAgICAgaml0LnN0b3JlUHRyKEdQUkluZm86OmNhbGxGcmFtZVJl
Z2lzdGVyLCAmdm0tPnRvcENhbGxGcmFtZSk7CiAgICAgaWYgKG1heEZyYW1lRXh0ZW50Rm9yU2xv
d1BhdGhDYWxsKQogICAgICAgICBqaXQuYWRkUHRyKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMy
KC1tYXhGcmFtZUV4dGVudEZvclNsb3dQYXRoQ2FsbCksIENDYWxsSGVscGVyczo6c3RhY2tQb2lu
dGVyUmVnaXN0ZXIpOwotICAgIGppdC5zZXR1cEFyZ3VtZW50c0V4ZWNTdGF0ZSgpOworICAgIGpp
dC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoR1BSSW5mbzo6cmVnVDIpOwogICAgIGppdC5t
b3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihiaXR3aXNlX2Nhc3Q8dm9pZCo+KHNsb3dQ
YXRoRnVuY3Rpb24pKSwgR1BSSW5mbzo6bm9uQXJnR1BSMCk7CiAgICAgZW1pdFBvaW50ZXJWYWxp
ZGF0aW9uKGppdCwgR1BSSW5mbzo6bm9uQXJnR1BSMCk7CiAgICAgaml0LmNhbGwoR1BSSW5mbzo6
bm9uQXJnR1BSMCk7CkBAIC0xNzQsMzkgKzE3NCw0NSBAQCBzdGF0aWMgTWFjcm9Bc3NlbWJsZXJD
b2RlUmVmIHZpcnR1YWxGb3JUCiAgICAgQ0NhbGxIZWxwZXJzIGppdCh2bSk7CiAgICAgCiAgICAg
Q0NhbGxIZWxwZXJzOjpKdW1wTGlzdCBzbG93Q2FzZTsKKyAgICAKKyAgICAvLyBUaGlzIGlzIGEg
c2xvdyBwYXRoIGV4ZWN1dGlvbiwgYW5kIHJlZ1QyIGNvbnRhaW5zIHRoZSBDYWxsTGlua0luZm8u
IENvdW50IHRoZQorICAgIC8vIHNsb3cgcGF0aCBleGVjdXRpb24gZm9yIHRoZSBwcm9maWxlci4K
KyAgICBqaXQuYWRkMzIoCisgICAgICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKDEpLAor
ICAgICAgICBDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoR1BSSW5mbzo6cmVnVDIsIE9CSkVDVF9PRkZT
RVRPRihDYWxsTGlua0luZm8sIHNsb3dQYXRoQ291bnQpKSk7CiAKICAgICAvLyBGSVhNRTogd2Ug
c2hvdWxkIGhhdmUgYSBzdG9yeSBmb3IgZWxpbWluYXRpbmcgdGhlc2UgY2hlY2tzLiBJbiBtYW55
IGNhc2VzLAogICAgIC8vIHRoZSBERkcga25vd3MgdGhhdCB0aGUgdmFsdWUgaXMgZGVmaW5pdGVs
eSBhIGNlbGwsIG9yIGRlZmluaXRlbHkgYSBmdW5jdGlvbi4KICAgICAKICNpZiBVU0UoSlNWQUxV
RTY0KQotICAgIGppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTY0KFRhZ01hc2spLCBH
UFJJbmZvOjpyZWdUMik7CisgICAgaml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tNjQo
VGFnTWFzayksIEdQUkluZm86OnJlZ1Q0KTsKICAgICAKICAgICBzbG93Q2FzZS5hcHBlbmQoCiAg
ICAgICAgIGppdC5icmFuY2hUZXN0NjQoCi0gICAgICAgICAgICBDQ2FsbEhlbHBlcnM6Ok5vblpl
cm8sIEdQUkluZm86OnJlZ1QwLCBHUFJJbmZvOjpyZWdUMikpOworICAgICAgICAgICAgQ0NhbGxI
ZWxwZXJzOjpOb25aZXJvLCBHUFJJbmZvOjpyZWdUMCwgR1BSSW5mbzo6cmVnVDQpKTsKICNlbHNl
CiAgICAgc2xvd0Nhc2UuYXBwZW5kKAogICAgICAgICBqaXQuYnJhbmNoMzIoCiAgICAgICAgICAg
ICBDQ2FsbEhlbHBlcnM6Ok5vdEVxdWFsLCBHUFJJbmZvOjpyZWdUMSwKICAgICAgICAgICAgIEND
YWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKEpTVmFsdWU6OkNlbGxUYWcpKSk7CiAjZW5kaWYKLSAg
ICBBc3NlbWJseUhlbHBlcnM6OmVtaXRMb2FkU3RydWN0dXJlKGppdCwgR1BSSW5mbzo6cmVnVDAs
IEdQUkluZm86OnJlZ1QyLCBHUFJJbmZvOjpyZWdUMSk7CisgICAgQXNzZW1ibHlIZWxwZXJzOjpl
bWl0TG9hZFN0cnVjdHVyZShqaXQsIEdQUkluZm86OnJlZ1QwLCBHUFJJbmZvOjpyZWdUNCwgR1BS
SW5mbzo6cmVnVDEpOwogICAgIHNsb3dDYXNlLmFwcGVuZCgKICAgICAgICAgaml0LmJyYW5jaFB0
cigKICAgICAgICAgICAgIENDYWxsSGVscGVyczo6Tm90RXF1YWwsCi0gICAgICAgICAgICBDQ2Fs
bEhlbHBlcnM6OkFkZHJlc3MoR1BSSW5mbzo6cmVnVDIsIFN0cnVjdHVyZTo6Y2xhc3NJbmZvT2Zm
c2V0KCkpLAorICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKEdQUkluZm86OnJlZ1Q0
LCBTdHJ1Y3R1cmU6OmNsYXNzSW5mb09mZnNldCgpKSwKICAgICAgICAgICAgIENDYWxsSGVscGVy
czo6VHJ1c3RlZEltbVB0cihKU0Z1bmN0aW9uOjppbmZvKCkpKSk7CiAgICAgCiAgICAgLy8gTm93
IHdlIGtub3cgd2UgaGF2ZSBhIEpTRnVuY3Rpb24uCiAgICAgCiAgICAgaml0LmxvYWRQdHIoCiAg
ICAgICAgIENDYWxsSGVscGVyczo6QWRkcmVzcyhHUFJJbmZvOjpyZWdUMCwgSlNGdW5jdGlvbjo6
b2Zmc2V0T2ZFeGVjdXRhYmxlKCkpLAotICAgICAgICBHUFJJbmZvOjpyZWdUMik7CisgICAgICAg
IEdQUkluZm86OnJlZ1Q0KTsKICAgICBqaXQubG9hZFB0cigKICAgICAgICAgQ0NhbGxIZWxwZXJz
OjpBZGRyZXNzKAotICAgICAgICAgICAgR1BSSW5mbzo6cmVnVDIsIEV4ZWN1dGFibGVCYXNlOjpv
ZmZzZXRPZkpJVENvZGVXaXRoQXJpdHlDaGVja0ZvcihraW5kLCByZWdpc3RlcnMpKSwKLSAgICAg
ICAgR1BSSW5mbzo6cmVnVDIpOwotICAgIHNsb3dDYXNlLmFwcGVuZChqaXQuYnJhbmNoVGVzdFB0
cihDQ2FsbEhlbHBlcnM6Olplcm8sIEdQUkluZm86OnJlZ1QyKSk7CisgICAgICAgICAgICBHUFJJ
bmZvOjpyZWdUNCwgRXhlY3V0YWJsZUJhc2U6Om9mZnNldE9mSklUQ29kZVdpdGhBcml0eUNoZWNr
Rm9yKGtpbmQsIHJlZ2lzdGVycykpLAorICAgICAgICBHUFJJbmZvOjpyZWdUNCk7CisgICAgc2xv
d0Nhc2UuYXBwZW5kKGppdC5icmFuY2hUZXN0UHRyKENDYWxsSGVscGVyczo6WmVybywgR1BSSW5m
bzo6cmVnVDQpKTsKICAgICAKICAgICAvLyBOb3cgd2Uga25vdyB0aGF0IHdlIGhhdmUgYSBDb2Rl
QmxvY2ssIGFuZCB3ZSdyZSBjb21taXR0ZWQgdG8gbWFraW5nIGEgZmFzdAogICAgIC8vIGNhbGwu
CkBAIC0yMjMsOCArMjI5LDggQEAgc3RhdGljIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiB2aXJ0dWFs
Rm9yVAogI2VuZGlmCiAgICAgCiAgICAgLy8gTWFrZSBhIHRhaWwgY2FsbC4gVGhpcyB3aWxsIHJl
dHVybiBiYWNrIHRvIEpJVCBjb2RlLgotICAgIGVtaXRQb2ludGVyVmFsaWRhdGlvbihqaXQsIEdQ
UkluZm86OnJlZ1QyKTsKLSAgICBqaXQuanVtcChHUFJJbmZvOjpyZWdUMik7CisgICAgZW1pdFBv
aW50ZXJWYWxpZGF0aW9uKGppdCwgR1BSSW5mbzo6cmVnVDQpOworICAgIGppdC5qdW1wKEdQUklu
Zm86OnJlZ1Q0KTsKIAogICAgIHNsb3dDYXNlLmxpbmsoJmppdCk7CiAgICAgCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvc3RyZXNzL2V2YWwtdGhhdC1pcy1ub3QtZXZhbC5qcwo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvc3RyZXNzL2V2YWwtdGhh
dC1pcy1ub3QtZXZhbC5qcwkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90
ZXN0cy9zdHJlc3MvZXZhbC10aGF0LWlzLW5vdC1ldmFsLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0w
LDAgKzEsMTQgQEAKK2Z1bmN0aW9uIGZvbyhhKSB7CisgICAgcmV0dXJuIGV2YWwoYSk7Cit9CisK
K25vSW5saW5lKGZvbyk7CisKK2V2YWwgPSBmdW5jdGlvbihhKSB7IHJldHVybiBhICsgMTsgfQor
Citmb3IgKHZhciBpID0gMDsgaSA8IDEwMDAwOyArK2kpIHsKKyAgICB2YXIgcmVzdWx0ID0gZm9v
KDQyKTsKKyAgICBpZiAocmVzdWx0ICE9IDQzKQorICAgICAgICB0aHJvdyAiRXJyb3I6IGJhZCBy
ZXN1bHQ6ICIgKyByZXN1bHQ7Cit9CisK
</data>
<flag name="review"
          id="251835"
          type_id="1"
          status="+"
          setter="kling"
    />
          </attachment>
      

    </bug>

</bugzilla>