<?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>207251</bug_id>
          
          <creation_ts>2020-02-05 00:19:24 -0800</creation_ts>
          <short_desc>Use linear probing from the beginning of small HashTables</short_desc>
          <delta_ts>2020-02-05 09:48:29 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>NEW</bug_status>
          <resolution></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>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Alex Christensen">achristensen</reporter>
          <assigned_to name="Alex Christensen">achristensen</assigned_to>
          <cc>benjamin</cc>
    
    <cc>cdumez</cc>
    
    <cc>cmarcelo</cc>
    
    <cc>dbates</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>glenn</cc>
    
    <cc>kangil.han</cc>
    
    <cc>keith_miller</cc>
    
    <cc>kondapallykalyan</cc>
    
    <cc>mark.lam</cc>
    
    <cc>msaboff</cc>
    
    <cc>pdr</cc>
    
    <cc>saam</cc>
    
    <cc>tzagallo</cc>
    
    <cc>ysuzuki</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1614960</commentid>
    <comment_count>0</comment_count>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2020-02-05 00:19:24 -0800</bug_when>
    <thetext>Use linear probing from the beginning of small HashTables</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1614961</commentid>
    <comment_count>1</comment_count>
      <attachid>389778</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2020-02-05 00:23:04 -0800</bug_when>
    <thetext>Created attachment 389778
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1615067</commentid>
    <comment_count>2</comment_count>
      <attachid>389778</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2020-02-05 09:03:12 -0800</bug_when>
    <thetext>Comment on attachment 389778
Patch

Lots of red bots.  Are there parts of the JIT that needs to be changed to go with this change?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1615092</commentid>
    <comment_count>3</comment_count>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2020-02-05 09:48:29 -0800</bug_when>
    <thetext>Nope, those are tests with expectations that rely on the deterministic order of HashTable iteration, which changes with this change.  They just need rebasing.

I can browse the web with asan enabled with this change, so the jit is fine.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>389778</attachid>
            <date>2020-02-05 00:23:04 -0800</date>
            <delta_ts>2020-02-05 09:03:12 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-207251-20200205002303.patch</filename>
            <type>text/plain</type>
            <size>35235</size>
            <attacher name="Alex Christensen">achristensen</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjU1Nzg4KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE0IEBA
CisyMDIwLTAyLTA1ICBBbGV4IENocmlzdGVuc2VuICA8YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+
CisKKyAgICAgICAgVXNlIGxpbmVhciBwcm9iaW5nIGZyb20gdGhlIGJlZ2lubmluZyBvZiBzbWFs
bCBIYXNoVGFibGVzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0yMDcyNTEKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICAqIGRmZy9ERkdDU0VQaGFzZS5jcHA6CisgICAgICAgICogd2FzbS9XYXNtU2lnbmF0dXJl
LmNwcDoKKyAgICAgICAgKEpTQzo6V2FzbTo6UGFyYW1ldGVyVHlwZXM6OnRyYW5zbGF0ZSk6CisK
IDIwMjAtMDItMDQgIFl1c3VrZSBTdXp1a2kgIDx5c3V6dWtpQGFwcGxlLmNvbT4KIAogICAgICAg
ICBbSlNDXSBTdHJ1Y3R1cmU6OnNldE1heE9mZnNldCBhbmQgc2V0VHJhbnNpdGlvbk9mZnNldCBh
cmUgcmFjeQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDU0VQaGFzZS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDU0VQaGFzZS5jcHAJ
KHJldmlzaW9uIDI1NTc3NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ1NFUGhh
c2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01NSwxOSArNTUsMTUgQEAgY2xhc3MgSW1wdXJlRGF0
YVNsb3QgewogICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKEltcHVyZURhdGFTbG90KTsKICAgICBX
VEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKLSAgICBJbXB1cmVEYXRhU2xvdChIZWFw
TG9jYXRpb24ga2V5LCBMYXp5Tm9kZSB2YWx1ZSwgdW5zaWduZWQgaGFzaCkKLSAgICAgICAgOiBr
ZXkoa2V5KSwgdmFsdWUodmFsdWUpLCBoYXNoKGhhc2gpCi0gICAgeyB9Ci0KICAgICBIZWFwTG9j
YXRpb24ga2V5OwogICAgIExhenlOb2RlIHZhbHVlOwotICAgIHVuc2lnbmVkIGhhc2g7CisgICAg
T3B0aW9uYWw8dW5zaWduZWQ+IGhhc2g7CiB9OwogCiBzdHJ1Y3QgSW1wdXJlRGF0YVNsb3RIYXNo
IDogcHVibGljIERlZmF1bHRIYXNoPHN0ZDo6dW5pcXVlX3B0cjxJbXB1cmVEYXRhU2xvdD4+OjpI
YXNoIHsKICAgICBzdGF0aWMgdW5zaWduZWQgaGFzaChjb25zdCBzdGQ6OnVuaXF1ZV9wdHI8SW1w
dXJlRGF0YVNsb3Q+JiBrZXkpCiAgICAgewotICAgICAgICByZXR1cm4ga2V5LT5oYXNoOworICAg
ICAgICByZXR1cm4ga2V5LT5oYXNoID8gKmtleS0+aGFzaCA6IGtleS0+a2V5Lmhhc2goKTsKICAg
ICB9CiAKICAgICBzdGF0aWMgYm9vbCBlcXVhbChjb25zdCBzdGQ6OnVuaXF1ZV9wdHI8SW1wdXJl
RGF0YVNsb3Q+JiBhLCBjb25zdCBzdGQ6OnVuaXF1ZV9wdHI8SW1wdXJlRGF0YVNsb3Q+JiBiKQpA
QCAtOTQsNyArOTAsNyBAQCBzdHJ1Y3QgSW1wdXJlRGF0YVRyYW5zbGF0b3IgewogICAgICAgICBy
ZXR1cm4gc2xvdC0+a2V5ID09IGtleTsKICAgICB9CiAKLSAgICBzdGF0aWMgdm9pZCB0cmFuc2xh
dGUoc3RkOjp1bmlxdWVfcHRyPEltcHVyZURhdGFTbG90PiYgc2xvdCwgY29uc3QgSGVhcExvY2F0
aW9uJiBrZXksIHVuc2lnbmVkIGhhc2hDb2RlKQorICAgIHN0YXRpYyB2b2lkIHRyYW5zbGF0ZShz
dGQ6OnVuaXF1ZV9wdHI8SW1wdXJlRGF0YVNsb3Q+JiBzbG90LCBjb25zdCBIZWFwTG9jYXRpb24m
IGtleSwgT3B0aW9uYWw8dW5zaWduZWQ+IGhhc2hDb2RlKQogICAgIHsKICAgICAgICAgbmV3IChO
b3ROdWxsLCBzdGQ6OmFkZHJlc3NvZihzbG90KSkgc3RkOjp1bmlxdWVfcHRyPEltcHVyZURhdGFT
bG90PihuZXcgSW1wdXJlRGF0YVNsb3Qge2tleSwgTGF6eU5vZGUoKSwgaGFzaENvZGV9KTsKICAg
ICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtU2lnbmF0dXJlLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtU2lnbmF0dXJlLmNw
cAkocmV2aXNpb24gMjU1Nzc3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVNp
Z25hdHVyZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE1MSw3ICsxNTEsNyBAQCBzdHJ1Y3QgUGFy
YW1ldGVyVHlwZXMgewogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKLSAgICBzdGF0aWMg
dm9pZCB0cmFuc2xhdGUoU2lnbmF0dXJlSGFzaCYgZW50cnksIGNvbnN0IFBhcmFtZXRlclR5cGVz
JiBwYXJhbXMsIHVuc2lnbmVkKQorICAgIHN0YXRpYyB2b2lkIHRyYW5zbGF0ZShTaWduYXR1cmVI
YXNoJiBlbnRyeSwgY29uc3QgUGFyYW1ldGVyVHlwZXMmIHBhcmFtcywgT3B0aW9uYWw8dW5zaWdu
ZWQ+KQogICAgIHsKICAgICAgICAgUmVmUHRyPFNpZ25hdHVyZT4gc2lnbmF0dXJlID0gU2lnbmF0
dXJlOjp0cnlDcmVhdGUocGFyYW1zLnJldHVyblR5cGVzLnNpemUoKSwgcGFyYW1zLmFyZ3VtZW50
VHlwZXMuc2l6ZSgpKTsKICAgICAgICAgUkVMRUFTRV9BU1NFUlQoc2lnbmF0dXJlKTsKSW5kZXg6
IFNvdXJjZS9XVEYvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvQ2hhbmdlTG9n
CShyZXZpc2lvbiAyNTU3NzcpCisrKyBTb3VyY2UvV1RGL0NoYW5nZUxvZwkod29ya2luZyBjb3B5
KQpAQCAtMSwzICsxLDQxIEBACisyMDIwLTAyLTA1ICBBbGV4IENocmlzdGVuc2VuICA8YWNocmlz
dGVuc2VuQHdlYmtpdC5vcmc+CisKKyAgICAgICAgVXNlIGxpbmVhciBwcm9iaW5nIGZyb20gdGhl
IGJlZ2lubmluZyBvZiBzbWFsbCBIYXNoVGFibGVzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDcyNTEKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICBUaGUgaGlzdG9ncmFtIG9mIEhhc2hUYWJsZSBtYXggc2l6
ZSBkcm9wcyBvZmYgcXVpY2tseSBzdGFydGluZyBhdCAxLCBzbyBmb3IgdGhlIHByaWNlIG9mIG9u
ZSBicmFuY2gKKyAgICAgICAgZHVyaW5nIGV4cGVuc2l2ZSBIYXNoVGFibGUgb3BlcmF0aW9ucyB3
ZSBjYW4ganVzdCBzdGFydCBhdCBvZmZzZXQgMCBhbmQgaW5jcmVhc2UgYnkgMSBpbnN0ZWFkIG9m
CisgICAgICAgIGhhc2hpbmcgZWFjaCBlbGVtZW50IHRoZW4gZG91YmxlIGhhc2hpbmcgdG8gZ2V0
IHRoZSBuZXh0IG9mZnNldC4gIFdpdGggdGhpcyBjaGFuZ2UsIHdlIG9mdGVuIG5ldmVyCisgICAg
ICAgIGV2ZW4gY2FsbCB0aGUgaGFzaCBmdW5jdGlvbi4KKworICAgICAgICAqIHd0Zi9IYXNoTWFw
Lmg6CisgICAgICAgIChXVEY6Okhhc2hNYXBUcmFuc2xhdG9yQWRhcHRlcjo6dHJhbnNsYXRlKToK
KyAgICAgICAgKiB3dGYvSGFzaFNldC5oOgorICAgICAgICAoV1RGOjpIYXNoU2V0VHJhbnNsYXRv
ckFkYXB0ZXI6OnRyYW5zbGF0ZSk6CisgICAgICAgICogd3RmL0hhc2hUYWJsZS5oOgorICAgICAg
ICAoV1RGOjpLZXlUcmFpdHM+OjpjaGVja0tleSk6CisgICAgICAgIChXVEY6OktleVRyYWl0cz46
OmlubGluZUxvb2t1cCk6CisgICAgICAgIChXVEY6OktleVRyYWl0cz46Omxvb2t1cEZvcldyaXRp
bmcpOgorICAgICAgICAoV1RGOjpLZXlUcmFpdHM+OjpmdWxsTG9va3VwRm9yV3JpdGluZyk6Cisg
ICAgICAgIChXVEY6OktleVRyYWl0cz46OmFkZFVuaXF1ZUZvckluaXRpYWxpemF0aW9uKToKKyAg
ICAgICAgKFdURjo6S2V5VHJhaXRzPjo6YWRkKToKKyAgICAgICAgKFdURjo6S2V5VHJhaXRzPjo6
YWRkUGFzc2luZ0hhc2hDb2RlKToKKyAgICAgICAgKFdURjo6S2V5VHJhaXRzPjo6cmVpbnNlcnQp
OgorICAgICAgICAoV1RGOjpLZXlUcmFpdHM+OjpIYXNoVGFibGUpOgorICAgICAgICAoV1RGOjpL
ZXlUcmFpdHM+OjppbnZhbGlkYXRlSXRlcmF0b3JzKToKKyAgICAgICAgKFdURjo6YWRkSXRlcmF0
b3IpOgorICAgICAgICAoV1RGOjpyZW1vdmVJdGVyYXRvcik6CisgICAgICAgIChXVEY6Okhhc2hU
YWJsZTo6bWFrZUxvb2t1cFJlc3VsdCk6IERlbGV0ZWQuCisgICAgICAgICogd3RmL3RleHQvQXRv
bVN0cmluZ0ltcGwuY3BwOgorICAgICAgICAoV1RGOjpDU3RyaW5nVHJhbnNsYXRvcjo6dHJhbnNs
YXRlKToKKyAgICAgICAgKFdURjo6VUNoYXJCdWZmZXJUcmFuc2xhdG9yOjp0cmFuc2xhdGUpOgor
ICAgICAgICAoV1RGOjpIYXNoQW5kVVRGOENoYXJhY3RlcnNUcmFuc2xhdG9yOjp0cmFuc2xhdGUp
OgorICAgICAgICAoV1RGOjpTdWJzdHJpbmdUcmFuc2xhdG9yOjp0cmFuc2xhdGUpOgorICAgICAg
ICAoV1RGOjpMQ2hhckJ1ZmZlclRyYW5zbGF0b3I6OnRyYW5zbGF0ZSk6CisgICAgICAgIChXVEY6
OkJ1ZmZlckZyb21TdGF0aWNEYXRhVHJhbnNsYXRvcjo6dHJhbnNsYXRlKToKKwogMjAyMC0wMi0w
NCAgQWRyaWFuIFBlcmV6IGRlIENhc3RybyAgPGFwZXJlekBpZ2FsaWEuY29tPgogCiAgICAgICAg
IE5vbi11bmlmaWVkIGJ1aWxkIGZpeGVzIGVhcmx5IEZlYnJ1YXJ5IDIwMjAgZWRpdGlvbgpJbmRl
eDogU291cmNlL1dURi93dGYvSGFzaE1hcC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3Rm
L0hhc2hNYXAuaAkocmV2aXNpb24gMjU1Nzc3KQorKysgU291cmNlL1dURi93dGYvSGFzaE1hcC5o
CSh3b3JraW5nIGNvcHkpCkBAIC0yMjUsNyArMjI1LDcgQEAgdGVtcGxhdGU8dHlwZW5hbWUgVmFs
dWVUcmFpdHMsIHR5cGVuYW1lIAogc3RydWN0IEhhc2hNYXBUcmFuc2xhdG9yQWRhcHRlciB7CiAg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RhdGljIHVuc2lnbmVkIGhhc2goY29uc3QgVCYga2V5
KSB7IHJldHVybiBUcmFuc2xhdG9yOjpoYXNoKGtleSk7IH0KICAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBULCB0eXBlbmFtZSBVPiBzdGF0aWMgYm9vbCBlcXVhbChjb25zdCBUJiBhLCBjb25zdCBVJiBi
KSB7IHJldHVybiBUcmFuc2xhdG9yOjplcXVhbChhLCBiKTsgfQotICAgIHRlbXBsYXRlPHR5cGVu
YW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFY+IHN0YXRpYyB2b2lkIHRyYW5zbGF0ZShUJiBs
b2NhdGlvbiwgVSYmIGtleSwgViYmIG1hcHBlZCwgdW5zaWduZWQgaGFzaENvZGUpCisgICAgdGVt
cGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgVj4gc3RhdGljIHZvaWQgdHJh
bnNsYXRlKFQmIGxvY2F0aW9uLCBVJiYga2V5LCBWJiYgbWFwcGVkLCBPcHRpb25hbDx1bnNpZ25l
ZD4gaGFzaENvZGUpCiAgICAgewogICAgICAgICBUcmFuc2xhdG9yOjp0cmFuc2xhdGUobG9jYXRp
b24ua2V5LCBrZXksIGhhc2hDb2RlKTsKICAgICAgICAgbG9jYXRpb24udmFsdWUgPSBzdGQ6OmZv
cndhcmQ8Vj4obWFwcGVkKTsKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL0hhc2hTZXQuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9IYXNoU2V0LmgJKHJldmlzaW9uIDI1NTc3NykKKysrIFNv
dXJjZS9XVEYvd3RmL0hhc2hTZXQuaAkod29ya2luZyBjb3B5KQpAQCAtMTYxLDcgKzE2MSw3IEBA
IHRlbXBsYXRlPHR5cGVuYW1lIFRyYW5zbGF0b3I+CiBzdHJ1Y3QgSGFzaFNldFRyYW5zbGF0b3JB
ZGFwdGVyIHsKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdGF0aWMgdW5zaWduZWQgaGFzaChj
b25zdCBUJiBrZXkpIHsgcmV0dXJuIFRyYW5zbGF0b3I6Omhhc2goa2V5KTsgfQogICAgIHRlbXBs
YXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+IHN0YXRpYyBib29sIGVxdWFsKGNvbnN0IFQmIGEs
IGNvbnN0IFUmIGIpIHsgcmV0dXJuIFRyYW5zbGF0b3I6OmVxdWFsKGEsIGIpOyB9Ci0gICAgdGVt
cGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4gc3RhdGljIHZvaWQgdHJhbnNsYXRlKFQmIGxv
Y2F0aW9uLCBjb25zdCBVJiBrZXksIGNvbnN0IFUmLCB1bnNpZ25lZCBoYXNoQ29kZSkKKyAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVPiBzdGF0aWMgdm9pZCB0cmFuc2xhdGUoVCYg
bG9jYXRpb24sIGNvbnN0IFUmIGtleSwgY29uc3QgVSYsIE9wdGlvbmFsPHVuc2lnbmVkPiBoYXNo
Q29kZSkKICAgICB7CiAgICAgICAgIFRyYW5zbGF0b3I6OnRyYW5zbGF0ZShsb2NhdGlvbiwga2V5
LCBoYXNoQ29kZSk7CiAgICAgfQpJbmRleDogU291cmNlL1dURi93dGYvSGFzaFRhYmxlLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dURi93dGYvSGFzaFRhYmxlLmgJKHJldmlzaW9uIDI1NTc3NykK
KysrIFNvdXJjZS9XVEYvd3RmL0hhc2hUYWJsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC00NzEsOCAr
NDcxLDE2IEBAIERFQ0xBUkVfQUxMT0NBVE9SX1dJVEhfSEVBUF9JREVOVElGSUVSKEgKICAgICAg
ICAgc3RhdGljIFZhbHVlVHlwZSogYWxsb2NhdGVUYWJsZSh1bnNpZ25lZCBzaXplKTsKICAgICAg
ICAgc3RhdGljIHZvaWQgZGVhbGxvY2F0ZVRhYmxlKFZhbHVlVHlwZSogdGFibGUpOwogCi0gICAg
ICAgIHR5cGVkZWYgc3RkOjpwYWlyPFZhbHVlVHlwZSosIGJvb2w+IExvb2t1cFR5cGU7Ci0gICAg
ICAgIHR5cGVkZWYgc3RkOjpwYWlyPExvb2t1cFR5cGUsIHVuc2lnbmVkPiBGdWxsTG9va3VwVHlw
ZTsKKyAgICAgICAgZW51bSBjbGFzcyBFbGVtZW50Rm91bmQgOiBib29sIHsgTm8sIFllcyB9Owor
ICAgICAgICBzdHJ1Y3QgTG9va3VwVHlwZSB7CisgICAgICAgICAgICBWYWx1ZVR5cGUqIGVudHJ5
OworICAgICAgICAgICAgRWxlbWVudEZvdW5kIGVsZW1lbnRGb3VuZDsKKyAgICAgICAgfTsKKyAg
ICAgICAgc3RydWN0IEZ1bGxMb29rdXBUeXBlIHsKKyAgICAgICAgICAgIFZhbHVlVHlwZSogZW50
cnk7CisgICAgICAgICAgICBFbGVtZW50Rm91bmQgZWxlbWVudEZvdW5kOworICAgICAgICAgICAg
T3B0aW9uYWw8dW5zaWduZWQ+IGhhc2g7CisgICAgICAgIH07CiAKICAgICAgICAgTG9va3VwVHlw
ZSBsb29rdXBGb3JXcml0aW5nKGNvbnN0IEtleSYga2V5KSB7IHJldHVybiBsb29rdXBGb3JXcml0
aW5nPElkZW50aXR5VHJhbnNsYXRvclR5cGU+KGtleSk7IH07CiAgICAgICAgIHRlbXBsYXRlPHR5
cGVuYW1lIEhhc2hUcmFuc2xhdG9yLCB0eXBlbmFtZSBUPiBGdWxsTG9va3VwVHlwZSBmdWxsTG9v
a3VwRm9yV3JpdGluZyhjb25zdCBUJik7CkBAIC01MDIsOSArNTEwLDYgQEAgREVDTEFSRV9BTExP
Q0FUT1JfV0lUSF9IRUFQX0lERU5USUZJRVIoSAogICAgICAgICBzdGF0aWMgdm9pZCBpbml0aWFs
aXplQnVja2V0KFZhbHVlVHlwZSYgYnVja2V0KTsKICAgICAgICAgc3RhdGljIHZvaWQgZGVsZXRl
QnVja2V0KFZhbHVlVHlwZSYgYnVja2V0KSB7IGhhc2hUcmFpdHNEZWxldGVCdWNrZXQ8VHJhaXRz
PihidWNrZXQpOyB9CiAKLSAgICAgICAgRnVsbExvb2t1cFR5cGUgbWFrZUxvb2t1cFJlc3VsdChW
YWx1ZVR5cGUqIHBvc2l0aW9uLCBib29sIGZvdW5kLCB1bnNpZ25lZCBoYXNoKQotICAgICAgICAg
ICAgeyByZXR1cm4gRnVsbExvb2t1cFR5cGUoTG9va3VwVHlwZShwb3NpdGlvbiwgZm91bmQpLCBo
YXNoKTsgfQotCiAgICAgICAgIGl0ZXJhdG9yIG1ha2VJdGVyYXRvcihWYWx1ZVR5cGUqIHBvcykg
eyByZXR1cm4gaXRlcmF0b3IodGhpcywgcG9zLCBtX3RhYmxlICsgdGFibGVTaXplKCkpOyB9CiAg
ICAgICAgIGNvbnN0X2l0ZXJhdG9yIG1ha2VDb25zdEl0ZXJhdG9yKFZhbHVlVHlwZSogcG9zKSBj
b25zdCB7IHJldHVybiBjb25zdF9pdGVyYXRvcih0aGlzLCBwb3MsIG1fdGFibGUgKyB0YWJsZVNp
emUoKSk7IH0KICAgICAgICAgaXRlcmF0b3IgbWFrZUtub3duR29vZEl0ZXJhdG9yKFZhbHVlVHlw
ZSogcG9zKSB7IHJldHVybiBpdGVyYXRvcih0aGlzLCBwb3MsIG1fdGFibGUgKyB0YWJsZVNpemUo
KSwgSGFzaEl0ZW1Lbm93bkdvb2QpOyB9CkBAIC01MzAsNiArNTM1LDcgQEAgREVDTEFSRV9BTExP
Q0FUT1JfV0lUSF9IRUFQX0lERU5USUZJRVIoSAogICAgICAgICBzdGF0aWMgY29uc3RleHByIGlu
dCBrZXlDb3VudE9mZnNldCA9IC0zOwogICAgICAgICBzdGF0aWMgY29uc3RleHByIGludCBkZWxl
dGVkQ291bnRPZmZzZXQgPSAtNDsKICAgICAgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBt
ZXRhZGF0YVNpemUgPSA0ICogc2l6ZW9mKHVuc2lnbmVkKTsKKyAgICAgICAgc3RhdGljIGNvbnN0
ZXhwciB1bnNpZ25lZCBtYXhVbmhhc2hlZFNpemUgPSA4OwogCiAgICAgICAgIHVuc2lnbmVkIHRh
YmxlU2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fdGFibGUgPyByZWludGVycHJldF9jYXN0PHVuc2ln
bmVkKj4obV90YWJsZSlbdGFibGVTaXplT2Zmc2V0XSA6IDA7IH0KICAgICAgICAgdm9pZCBzZXRU
YWJsZVNpemUodW5zaWduZWQgc2l6ZSkgY29uc3QgeyBBU1NFUlQobV90YWJsZSk7IHJlaW50ZXJw
cmV0X2Nhc3Q8dW5zaWduZWQqPihtX3RhYmxlKVt0YWJsZVNpemVPZmZzZXRdID0gc2l6ZTsgfQpA
QCAtNjMxLDcgKzYzNyw3IEBAIERFQ0xBUkVfQUxMT0NBVE9SX1dJVEhfSEVBUF9JREVOVElGSUVS
KEgKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBIYXNoVHJhbnNsYXRvciwgdHlwZW5hbWUgVD4KICAg
ICB2b2lkIEhhc2hUYWJsZTxLZXksIFZhbHVlLCBFeHRyYWN0b3IsIEhhc2hGdW5jdGlvbnMsIFRy
YWl0cywgS2V5VHJhaXRzPjo6Y2hlY2tLZXkoY29uc3QgVCYga2V5KQogICAgIHsKLSAgICAgICAg
aWYgKCFIYXNoRnVuY3Rpb25zOjpzYWZlVG9Db21wYXJlVG9FbXB0eU9yRGVsZXRlZCkKKyAgICAg
ICAgaWYgY29uc3RleHByICghSGFzaEZ1bmN0aW9uczo6c2FmZVRvQ29tcGFyZVRvRW1wdHlPckRl
bGV0ZWQpCiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIEFTU0VSVCghSGFzaFRyYW5zbGF0
b3I6OmVxdWFsKEtleVRyYWl0czo6ZW1wdHlWYWx1ZSgpLCBrZXkpKTsKICAgICAgICAgdHlwZW5h
bWUgc3RkOjphbGlnbmVkX3N0b3JhZ2U8c2l6ZW9mKFZhbHVlVHlwZSksIHN0ZDo6YWxpZ25tZW50
X29mPFZhbHVlVHlwZT46OnZhbHVlPjo6dHlwZSBkZWxldGVkVmFsdWVCdWZmZXI7CkBAIC02NjIs
NiArNjY4LDIxIEBAIERFQ0xBUkVfQUxMT0NBVE9SX1dJVEhfSEVBUF9JREVOVElGSUVSKEgKICAg
ICAgICAgICAgIHJldHVybiBudWxscHRyOwogCiAgICAgICAgIHVuc2lnbmVkIHNpemVNYXNrID0g
dGFibGVTaXplTWFzaygpOworICAgICAgICBpZiAoc2l6ZU1hc2sgPCBtYXhVbmhhc2hlZFNpemUp
IHsKKyAgICAgICAgICAgIGZvciAoVmFsdWVUeXBlKiBlbnRyeSA9IHRhYmxlOyB0cnVlOyArK2Vu
dHJ5KSB7CisgICAgICAgICAgICAgICAgaWYgY29uc3RleHByIChIYXNoRnVuY3Rpb25zOjpzYWZl
VG9Db21wYXJlVG9FbXB0eU9yRGVsZXRlZCkgeworICAgICAgICAgICAgICAgICAgICBpZiAoSGFz
aFRyYW5zbGF0b3I6OmVxdWFsKEV4dHJhY3Rvcjo6ZXh0cmFjdCgqZW50cnkpLCBrZXkpKQorICAg
ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVudHJ5OworICAgICAgICAgICAgICAgICAgICBp
ZiAoaXNFbXB0eUJ1Y2tldCgqZW50cnkpKQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IG51bGxwdHI7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAg
aWYgKGlzRW1wdHlCdWNrZXQoKmVudHJ5KSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVy
biBudWxscHRyOworICAgICAgICAgICAgICAgICAgICBpZiAoIWlzRGVsZXRlZEJ1Y2tldCgqZW50
cnkpICYmIEhhc2hUcmFuc2xhdG9yOjplcXVhbChFeHRyYWN0b3I6OmV4dHJhY3QoKmVudHJ5KSwg
a2V5KSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBlbnRyeTsKKyAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KICAgICAgICAgdW5zaWduZWQgaCA9IEhh
c2hUcmFuc2xhdG9yOjpoYXNoKGtleSk7CiAgICAgICAgIHVuc2lnbmVkIGkgPSBoICYgc2l6ZU1h
c2s7CiAKQEAgLTY3NiwxOCArNjk3LDE0IEBAIERFQ0xBUkVfQUxMT0NBVE9SX1dJVEhfSEVBUF9J
REVOVElGSUVSKEgKIAogICAgICAgICB3aGlsZSAoMSkgewogICAgICAgICAgICAgVmFsdWVUeXBl
KiBlbnRyeSA9IHRhYmxlICsgaTsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgIC8vIHdl
IGNvdW50IG9uIHRoZSBjb21waWxlciB0byBvcHRpbWl6ZSBvdXQgdGhpcyBicmFuY2gKLSAgICAg
ICAgICAgIGlmIChIYXNoRnVuY3Rpb25zOjpzYWZlVG9Db21wYXJlVG9FbXB0eU9yRGVsZXRlZCkg
eworICAgICAgICAgICAgaWYgY29uc3RleHByIChIYXNoRnVuY3Rpb25zOjpzYWZlVG9Db21wYXJl
VG9FbXB0eU9yRGVsZXRlZCkgewogICAgICAgICAgICAgICAgIGlmIChIYXNoVHJhbnNsYXRvcjo6
ZXF1YWwoRXh0cmFjdG9yOjpleHRyYWN0KCplbnRyeSksIGtleSkpCiAgICAgICAgICAgICAgICAg
ICAgIHJldHVybiBlbnRyeTsKLSAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBpZiAo
aXNFbXB0eUJ1Y2tldCgqZW50cnkpKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgICAgICAgICB9IGVsc2Ugewog
ICAgICAgICAgICAgICAgIGlmIChpc0VtcHR5QnVja2V0KCplbnRyeSkpCi0gICAgICAgICAgICAg
ICAgICAgIHJldHVybiAwOwotICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKICAgICAgICAgICAgICAgICBpZiAoIWlzRGVsZXRlZEJ1Y2tldCgqZW50
cnkpICYmIEhhc2hUcmFuc2xhdG9yOjplcXVhbChFeHRyYWN0b3I6OmV4dHJhY3QoKmVudHJ5KSwg
a2V5KSkKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVudHJ5OwogICAgICAgICAgICAgfQpA
QCAtNzEzLDkgKzczMCwyOSBAQCBERUNMQVJFX0FMTE9DQVRPUl9XSVRIX0hFQVBfSURFTlRJRklF
UihICiAgICAgICAgIEFTU0VSVChtX3RhYmxlKTsKICAgICAgICAgY2hlY2tLZXk8SGFzaFRyYW5z
bGF0b3I+KGtleSk7CiAKLSAgICAgICAgdW5zaWduZWQgayA9IDA7CisgICAgICAgIFZhbHVlVHlw
ZSogZGVsZXRlZEVudHJ5ID0gbnVsbHB0cjsKICAgICAgICAgVmFsdWVUeXBlKiB0YWJsZSA9IG1f
dGFibGU7CiAgICAgICAgIHVuc2lnbmVkIHNpemVNYXNrID0gdGFibGVTaXplTWFzaygpOworICAg
ICAgICBpZiAoc2l6ZU1hc2sgPCBtYXhVbmhhc2hlZFNpemUpIHsKKyAgICAgICAgICAgIGZvciAo
VmFsdWVUeXBlKiBlbnRyeSA9IHRhYmxlOyB0cnVlOyArK2VudHJ5KSB7CisgICAgICAgICAgICAg
ICAgaWYgY29uc3RleHByIChIYXNoRnVuY3Rpb25zOjpzYWZlVG9Db21wYXJlVG9FbXB0eU9yRGVs
ZXRlZCkgeworICAgICAgICAgICAgICAgICAgICBpZiAoaXNFbXB0eUJ1Y2tldCgqZW50cnkpKQor
ICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHsgZGVsZXRlZEVudHJ5ID8gZGVsZXRlZEVu
dHJ5IDogZW50cnksIEVsZW1lbnRGb3VuZDo6Tm8gfTsKKyAgICAgICAgICAgICAgICAgICAgaWYg
KEhhc2hUcmFuc2xhdG9yOjplcXVhbChFeHRyYWN0b3I6OmV4dHJhY3QoKmVudHJ5KSwga2V5KSkK
KyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7IGVudHJ5LCBFbGVtZW50Rm91bmQ6Olll
cyB9OworICAgICAgICAgICAgICAgICAgICBpZiAoaXNEZWxldGVkQnVja2V0KCplbnRyeSkpCisg
ICAgICAgICAgICAgICAgICAgICAgICBkZWxldGVkRW50cnkgPSBlbnRyeTsKKyAgICAgICAgICAg
ICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBpZiAoaXNFbXB0eUJ1Y2tldCgqZW50
cnkpKQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHsgZGVsZXRlZEVudHJ5ID8gZGVs
ZXRlZEVudHJ5IDogZW50cnksIEVsZW1lbnRGb3VuZDo6Tm8gfTsKKyAgICAgICAgICAgICAgICAg
ICAgaWYgKGlzRGVsZXRlZEJ1Y2tldCgqZW50cnkpKQorICAgICAgICAgICAgICAgICAgICAgICAg
ZGVsZXRlZEVudHJ5ID0gZW50cnk7CisgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKEhhc2hU
cmFuc2xhdG9yOjplcXVhbChFeHRyYWN0b3I6OmV4dHJhY3QoKmVudHJ5KSwga2V5KSkKKyAgICAg
ICAgICAgICAgICAgICAgICAgIHJldHVybiB7IGVudHJ5LCBFbGVtZW50Rm91bmQ6OlllcyB9Owor
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICB1bnNp
Z25lZCBrID0gMDsKICAgICAgICAgdW5zaWduZWQgaCA9IEhhc2hUcmFuc2xhdG9yOjpoYXNoKGtl
eSk7CiAgICAgICAgIHVuc2lnbmVkIGkgPSBoICYgc2l6ZU1hc2s7CiAKQEAgLTcyOCwyOSArNzY1
LDIyIEBAIERFQ0xBUkVfQUxMT0NBVE9SX1dJVEhfSEVBUF9JREVOVElGSUVSKEgKICAgICAgICAg
KyttX3N0YXRzLT5udW1BY2Nlc3NlczsKICNlbmRpZgogCi0gICAgICAgIFZhbHVlVHlwZSogZGVs
ZXRlZEVudHJ5ID0gMDsKLQogICAgICAgICB3aGlsZSAoMSkgewogICAgICAgICAgICAgVmFsdWVU
eXBlKiBlbnRyeSA9IHRhYmxlICsgaTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgLy8gd2Ug
Y291bnQgb24gdGhlIGNvbXBpbGVyIHRvIG9wdGltaXplIG91dCB0aGlzIGJyYW5jaAotICAgICAg
ICAgICAgaWYgKEhhc2hGdW5jdGlvbnM6OnNhZmVUb0NvbXBhcmVUb0VtcHR5T3JEZWxldGVkKSB7
CisgICAgICAgICAgICBpZiBjb25zdGV4cHIgKEhhc2hGdW5jdGlvbnM6OnNhZmVUb0NvbXBhcmVU
b0VtcHR5T3JEZWxldGVkKSB7CiAgICAgICAgICAgICAgICAgaWYgKGlzRW1wdHlCdWNrZXQoKmVu
dHJ5KSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIExvb2t1cFR5cGUoZGVsZXRlZEVudHJ5
ID8gZGVsZXRlZEVudHJ5IDogZW50cnksIGZhbHNlKTsKLSAgICAgICAgICAgICAgICAKKyAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIHsgZGVsZXRlZEVudHJ5ID8gZGVsZXRlZEVudHJ5IDogZW50
cnksIEVsZW1lbnRGb3VuZDo6Tm8gfTsKICAgICAgICAgICAgICAgICBpZiAoSGFzaFRyYW5zbGF0
b3I6OmVxdWFsKEV4dHJhY3Rvcjo6ZXh0cmFjdCgqZW50cnkpLCBrZXkpKQotICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gTG9va3VwVHlwZShlbnRyeSwgdHJ1ZSk7Ci0gICAgICAgICAgICAgICAg
CisgICAgICAgICAgICAgICAgICAgIHJldHVybiB7IGVudHJ5LCBFbGVtZW50Rm91bmQ6OlllcyB9
OwogICAgICAgICAgICAgICAgIGlmIChpc0RlbGV0ZWRCdWNrZXQoKmVudHJ5KSkKICAgICAgICAg
ICAgICAgICAgICAgZGVsZXRlZEVudHJ5ID0gZW50cnk7CiAgICAgICAgICAgICB9IGVsc2Ugewog
ICAgICAgICAgICAgICAgIGlmIChpc0VtcHR5QnVja2V0KCplbnRyeSkpCi0gICAgICAgICAgICAg
ICAgICAgIHJldHVybiBMb29rdXBUeXBlKGRlbGV0ZWRFbnRyeSA/IGRlbGV0ZWRFbnRyeSA6IGVu
dHJ5LCBmYWxzZSk7Ci0gICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHsg
ZGVsZXRlZEVudHJ5ID8gZGVsZXRlZEVudHJ5IDogZW50cnksIEVsZW1lbnRGb3VuZDo6Tm8gfTsK
ICAgICAgICAgICAgICAgICBpZiAoaXNEZWxldGVkQnVja2V0KCplbnRyeSkpCiAgICAgICAgICAg
ICAgICAgICAgIGRlbGV0ZWRFbnRyeSA9IGVudHJ5OwogICAgICAgICAgICAgICAgIGVsc2UgaWYg
KEhhc2hUcmFuc2xhdG9yOjplcXVhbChFeHRyYWN0b3I6OmV4dHJhY3QoKmVudHJ5KSwga2V5KSkK
LSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIExvb2t1cFR5cGUoZW50cnksIHRydWUpOworICAg
ICAgICAgICAgICAgICAgICByZXR1cm4geyBlbnRyeSwgRWxlbWVudEZvdW5kOjpZZXMgfTsKICAg
ICAgICAgICAgIH0KICNpZiBEVU1QX0hBU0hUQUJMRV9TVEFUUwogICAgICAgICAgICAgKytwcm9i
ZUNvdW50OwpAQCAtNzc0LDExICs4MDQsMzEgQEAgREVDTEFSRV9BTExPQ0FUT1JfV0lUSF9IRUFQ
X0lERU5USUZJRVIoSAogICAgICAgICBBU1NFUlQobV90YWJsZSk7CiAgICAgICAgIGNoZWNrS2V5
PEhhc2hUcmFuc2xhdG9yPihrZXkpOwogCi0gICAgICAgIHVuc2lnbmVkIGsgPSAwOwogICAgICAg
ICBWYWx1ZVR5cGUqIHRhYmxlID0gbV90YWJsZTsKICAgICAgICAgdW5zaWduZWQgc2l6ZU1hc2sg
PSB0YWJsZVNpemVNYXNrKCk7CisgICAgICAgIFZhbHVlVHlwZSogZGVsZXRlZEVudHJ5ID0gbnVs
bHB0cjsKKyAgICAgICAgaWYgKHNpemVNYXNrIDwgbWF4VW5oYXNoZWRTaXplKSB7CisgICAgICAg
ICAgICBmb3IgKFZhbHVlVHlwZSogZW50cnkgPSB0YWJsZTsgdHJ1ZTsgKytlbnRyeSkgeworICAg
ICAgICAgICAgICAgIGlmIGNvbnN0ZXhwciAoSGFzaEZ1bmN0aW9uczo6c2FmZVRvQ29tcGFyZVRv
RW1wdHlPckRlbGV0ZWQpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGlzRW1wdHlCdWNrZXQo
KmVudHJ5KSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7IGRlbGV0ZWRFbnRyeSA/
IGRlbGV0ZWRFbnRyeSA6IGVudHJ5LCBFbGVtZW50Rm91bmQ6Ok5vLCBXVEY6Om51bGxvcHQgfTsK
KyAgICAgICAgICAgICAgICAgICAgaWYgKEhhc2hUcmFuc2xhdG9yOjplcXVhbChFeHRyYWN0b3I6
OmV4dHJhY3QoKmVudHJ5KSwga2V5KSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7
IGVudHJ5LCBFbGVtZW50Rm91bmQ6OlllcywgV1RGOjpudWxsb3B0IH07CisgICAgICAgICAgICAg
ICAgICAgIGlmIChpc0RlbGV0ZWRCdWNrZXQoKmVudHJ5KSkKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGRlbGV0ZWRFbnRyeSA9IGVudHJ5OworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAg
ICAgICAgICAgICAgICAgIGlmIChpc0VtcHR5QnVja2V0KCplbnRyeSkpCisgICAgICAgICAgICAg
ICAgICAgICAgICByZXR1cm4geyBkZWxldGVkRW50cnkgPyBkZWxldGVkRW50cnkgOiBlbnRyeSwg
RWxlbWVudEZvdW5kOjpObywgV1RGOjpudWxsb3B0IH07CisgICAgICAgICAgICAgICAgICAgIGlm
IChpc0RlbGV0ZWRCdWNrZXQoKmVudHJ5KSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGRlbGV0
ZWRFbnRyeSA9IGVudHJ5OworICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChIYXNoVHJhbnNs
YXRvcjo6ZXF1YWwoRXh0cmFjdG9yOjpleHRyYWN0KCplbnRyeSksIGtleSkpCisgICAgICAgICAg
ICAgICAgICAgICAgICByZXR1cm4geyBlbnRyeSwgRWxlbWVudEZvdW5kOjpZZXMsIFdURjo6bnVs
bG9wdCB9OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQogICAg
ICAgICB1bnNpZ25lZCBoID0gSGFzaFRyYW5zbGF0b3I6Omhhc2goa2V5KTsKICAgICAgICAgdW5z
aWduZWQgaSA9IGggJiBzaXplTWFzazsKKyAgICAgICAgdW5zaWduZWQgayA9IDA7CiAKICNpZiBE
VU1QX0hBU0hUQUJMRV9TVEFUUwogICAgICAgICArK0hhc2hUYWJsZVN0YXRzOjpudW1BY2Nlc3Nl
czsKQEAgLTc4OSwyOSArODM5LDIyIEBAIERFQ0xBUkVfQUxMT0NBVE9SX1dJVEhfSEVBUF9JREVO
VElGSUVSKEgKICAgICAgICAgKyttX3N0YXRzLT5udW1BY2Nlc3NlczsKICNlbmRpZgogCi0gICAg
ICAgIFZhbHVlVHlwZSogZGVsZXRlZEVudHJ5ID0gMDsKLQogICAgICAgICB3aGlsZSAoMSkgewog
ICAgICAgICAgICAgVmFsdWVUeXBlKiBlbnRyeSA9IHRhYmxlICsgaTsKLSAgICAgICAgICAgIAot
ICAgICAgICAgICAgLy8gd2UgY291bnQgb24gdGhlIGNvbXBpbGVyIHRvIG9wdGltaXplIG91dCB0
aGlzIGJyYW5jaAotICAgICAgICAgICAgaWYgKEhhc2hGdW5jdGlvbnM6OnNhZmVUb0NvbXBhcmVU
b0VtcHR5T3JEZWxldGVkKSB7CisgICAgICAgICAgICBpZiBjb25zdGV4cHIgKEhhc2hGdW5jdGlv
bnM6OnNhZmVUb0NvbXBhcmVUb0VtcHR5T3JEZWxldGVkKSB7CiAgICAgICAgICAgICAgICAgaWYg
KGlzRW1wdHlCdWNrZXQoKmVudHJ5KSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG1ha2VM
b29rdXBSZXN1bHQoZGVsZXRlZEVudHJ5ID8gZGVsZXRlZEVudHJ5IDogZW50cnksIGZhbHNlLCBo
KTsKLSAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHsgZGVsZXRl
ZEVudHJ5ID8gZGVsZXRlZEVudHJ5IDogZW50cnksIEVsZW1lbnRGb3VuZDo6Tm8sIGggfTsKICAg
ICAgICAgICAgICAgICBpZiAoSGFzaFRyYW5zbGF0b3I6OmVxdWFsKEV4dHJhY3Rvcjo6ZXh0cmFj
dCgqZW50cnkpLCBrZXkpKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gbWFrZUxvb2t1cFJl
c3VsdChlbnRyeSwgdHJ1ZSwgaCk7Ci0gICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAg
ICAgIHJldHVybiB7IGVudHJ5LCBFbGVtZW50Rm91bmQ6OlllcywgaCB9OwogICAgICAgICAgICAg
ICAgIGlmIChpc0RlbGV0ZWRCdWNrZXQoKmVudHJ5KSkKICAgICAgICAgICAgICAgICAgICAgZGVs
ZXRlZEVudHJ5ID0gZW50cnk7CiAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAg
IGlmIChpc0VtcHR5QnVja2V0KCplbnRyeSkpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBt
YWtlTG9va3VwUmVzdWx0KGRlbGV0ZWRFbnRyeSA/IGRlbGV0ZWRFbnRyeSA6IGVudHJ5LCBmYWxz
ZSwgaCk7Ci0gICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHsgZGVsZXRl
ZEVudHJ5ID8gZGVsZXRlZEVudHJ5IDogZW50cnksIEVsZW1lbnRGb3VuZDo6Tm8sIGggfTsKICAg
ICAgICAgICAgICAgICBpZiAoaXNEZWxldGVkQnVja2V0KCplbnRyeSkpCiAgICAgICAgICAgICAg
ICAgICAgIGRlbGV0ZWRFbnRyeSA9IGVudHJ5OwogICAgICAgICAgICAgICAgIGVsc2UgaWYgKEhh
c2hUcmFuc2xhdG9yOjplcXVhbChFeHRyYWN0b3I6OmV4dHJhY3QoKmVudHJ5KSwga2V5KSkKLSAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIG1ha2VMb29rdXBSZXN1bHQoZW50cnksIHRydWUsIGgp
OworICAgICAgICAgICAgICAgICAgICByZXR1cm4geyBlbnRyeSwgRWxlbWVudEZvdW5kOjpZZXMs
IGggfTsKICAgICAgICAgICAgIH0KICNpZiBEVU1QX0hBU0hUQUJMRV9TVEFUUwogICAgICAgICAg
ICAgKytwcm9iZUNvdW50OwpAQCAtODQwLDExICs4ODMsMTIgQEAgREVDTEFSRV9BTExPQ0FUT1Jf
V0lUSF9IRUFQX0lERU5USUZJRVIoSAogCiAgICAgICAgIGludGVybmFsQ2hlY2tUYWJsZUNvbnNp
c3RlbmN5KCk7CiAKLSAgICAgICAgdW5zaWduZWQgayA9IDA7CiAgICAgICAgIFZhbHVlVHlwZSog
dGFibGUgPSBtX3RhYmxlOwogICAgICAgICB1bnNpZ25lZCBzaXplTWFzayA9IHRhYmxlU2l6ZU1h
c2soKTsKKyAgICAgICAgQVNTRVJUKHNpemVNYXNrID49IG1heFVuaGFzaGVkU2l6ZSk7CiAgICAg
ICAgIHVuc2lnbmVkIGggPSBIYXNoVHJhbnNsYXRvcjo6aGFzaChrZXkpOwogICAgICAgICB1bnNp
Z25lZCBpID0gaCAmIHNpemVNYXNrOworICAgICAgICB1bnNpZ25lZCBrID0gMDsKIAogI2lmIERV
TVBfSEFTSFRBQkxFX1NUQVRTCiAgICAgICAgICsrSGFzaFRhYmxlU3RhdHM6Om51bUFjY2Vzc2Vz
OwpAQCAtOTIxLDU3ICs5NjUsNzMgQEAgREVDTEFSRV9BTExPQ0FUT1JfV0lUSF9IRUFQX0lERU5U
SUZJRVIoSAogCiAgICAgICAgIEFTU0VSVChtX3RhYmxlKTsKIAotICAgICAgICB1bnNpZ25lZCBr
ID0gMDsKKyAgICAgICAgVmFsdWVUeXBlKiBkZWxldGVkRW50cnkgPSBudWxscHRyOworICAgICAg
ICBWYWx1ZVR5cGUqIGVudHJ5OwogICAgICAgICBWYWx1ZVR5cGUqIHRhYmxlID0gbV90YWJsZTsK
ICAgICAgICAgdW5zaWduZWQgc2l6ZU1hc2sgPSB0YWJsZVNpemVNYXNrKCk7Ci0gICAgICAgIHVu
c2lnbmVkIGggPSBIYXNoVHJhbnNsYXRvcjo6aGFzaChrZXkpOwotICAgICAgICB1bnNpZ25lZCBp
ID0gaCAmIHNpemVNYXNrOworICAgICAgICBpZiAoc2l6ZU1hc2sgPCBtYXhVbmhhc2hlZFNpemUp
IHsKKyAgICAgICAgICAgIGZvciAoZW50cnkgPSB0YWJsZTsgdHJ1ZTsgKytlbnRyeSkgeworICAg
ICAgICAgICAgICAgIGlmIGNvbnN0ZXhwciAoSGFzaEZ1bmN0aW9uczo6c2FmZVRvQ29tcGFyZVRv
RW1wdHlPckRlbGV0ZWQpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGlzRW1wdHlCdWNrZXQo
KmVudHJ5KSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAg
ICAgICBpZiAoSGFzaFRyYW5zbGF0b3I6OmVxdWFsKEV4dHJhY3Rvcjo6ZXh0cmFjdCgqZW50cnkp
LCBrZXkpKQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEFkZFJlc3VsdChtYWtlS25v
d25Hb29kSXRlcmF0b3IoZW50cnkpLCBmYWxzZSk7CisgICAgICAgICAgICAgICAgICAgIGlmIChp
c0RlbGV0ZWRCdWNrZXQoKmVudHJ5KSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGRlbGV0ZWRF
bnRyeSA9IGVudHJ5OworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAg
ICAgIGlmIChpc0VtcHR5QnVja2V0KCplbnRyeSkpCisgICAgICAgICAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGlzRGVsZXRlZEJ1Y2tldCgqZW50cnkpKQor
ICAgICAgICAgICAgICAgICAgICAgICAgZGVsZXRlZEVudHJ5ID0gZW50cnk7CisgICAgICAgICAg
ICAgICAgICAgIGVsc2UgaWYgKEhhc2hUcmFuc2xhdG9yOjplcXVhbChFeHRyYWN0b3I6OmV4dHJh
Y3QoKmVudHJ5KSwga2V5KSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBBZGRSZXN1
bHQobWFrZUtub3duR29vZEl0ZXJhdG9yKGVudHJ5KSwgZmFsc2UpOworICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHVuc2lnbmVk
IGggPSBIYXNoVHJhbnNsYXRvcjo6aGFzaChrZXkpOworICAgICAgICAgICAgdW5zaWduZWQgaSA9
IGggJiBzaXplTWFzazsKKyAgICAgICAgICAgIHVuc2lnbmVkIGsgPSAwOwogCiAjaWYgRFVNUF9I
QVNIVEFCTEVfU1RBVFMKLSAgICAgICAgKytIYXNoVGFibGVTdGF0czo6bnVtQWNjZXNzZXM7Ci0g
ICAgICAgIHVuc2lnbmVkIHByb2JlQ291bnQgPSAwOworICAgICAgICAgICAgKytIYXNoVGFibGVT
dGF0czo6bnVtQWNjZXNzZXM7CisgICAgICAgICAgICB1bnNpZ25lZCBwcm9iZUNvdW50ID0gMDsK
ICNlbmRpZgogCiAjaWYgRFVNUF9IQVNIVEFCTEVfU1RBVFNfUEVSX1RBQkxFCi0gICAgICAgICsr
bV9zdGF0cy0+bnVtQWNjZXNzZXM7CisgICAgICAgICAgICArK21fc3RhdHMtPm51bUFjY2Vzc2Vz
OwogI2VuZGlmCiAKLSAgICAgICAgVmFsdWVUeXBlKiBkZWxldGVkRW50cnkgPSAwOwotICAgICAg
ICBWYWx1ZVR5cGUqIGVudHJ5OwotICAgICAgICB3aGlsZSAoMSkgewotICAgICAgICAgICAgZW50
cnkgPSB0YWJsZSArIGk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIC8vIHdlIGNvdW50IG9u
IHRoZSBjb21waWxlciB0byBvcHRpbWl6ZSBvdXQgdGhpcyBicmFuY2gKLSAgICAgICAgICAgIGlm
IChIYXNoRnVuY3Rpb25zOjpzYWZlVG9Db21wYXJlVG9FbXB0eU9yRGVsZXRlZCkgewotICAgICAg
ICAgICAgICAgIGlmIChpc0VtcHR5QnVja2V0KCplbnRyeSkpCi0gICAgICAgICAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIGlmIChIYXNoVHJhbnNs
YXRvcjo6ZXF1YWwoRXh0cmFjdG9yOjpleHRyYWN0KCplbnRyeSksIGtleSkpCi0gICAgICAgICAg
ICAgICAgICAgIHJldHVybiBBZGRSZXN1bHQobWFrZUtub3duR29vZEl0ZXJhdG9yKGVudHJ5KSwg
ZmFsc2UpOwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIGlmIChpc0RlbGV0ZWRC
dWNrZXQoKmVudHJ5KSkKLSAgICAgICAgICAgICAgICAgICAgZGVsZXRlZEVudHJ5ID0gZW50cnk7
Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIGlmIChpc0VtcHR5QnVja2V0
KCplbnRyeSkpCi0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgCi0gICAg
ICAgICAgICAgICAgaWYgKGlzRGVsZXRlZEJ1Y2tldCgqZW50cnkpKQotICAgICAgICAgICAgICAg
ICAgICBkZWxldGVkRW50cnkgPSBlbnRyeTsKLSAgICAgICAgICAgICAgICBlbHNlIGlmIChIYXNo
VHJhbnNsYXRvcjo6ZXF1YWwoRXh0cmFjdG9yOjpleHRyYWN0KCplbnRyeSksIGtleSkpCi0gICAg
ICAgICAgICAgICAgICAgIHJldHVybiBBZGRSZXN1bHQobWFrZUtub3duR29vZEl0ZXJhdG9yKGVu
dHJ5KSwgZmFsc2UpOwotICAgICAgICAgICAgfQorICAgICAgICAgICAgd2hpbGUgKDEpIHsKKyAg
ICAgICAgICAgICAgICBlbnRyeSA9IHRhYmxlICsgaTsKKyAgICAgICAgICAgICAgICBpZiBjb25z
dGV4cHIgKEhhc2hGdW5jdGlvbnM6OnNhZmVUb0NvbXBhcmVUb0VtcHR5T3JEZWxldGVkKSB7Cisg
ICAgICAgICAgICAgICAgICAgIGlmIChpc0VtcHR5QnVja2V0KCplbnRyeSkpCisgICAgICAgICAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgaWYgKEhhc2hUcmFuc2xh
dG9yOjplcXVhbChFeHRyYWN0b3I6OmV4dHJhY3QoKmVudHJ5KSwga2V5KSkKKyAgICAgICAgICAg
ICAgICAgICAgICAgIHJldHVybiBBZGRSZXN1bHQobWFrZUtub3duR29vZEl0ZXJhdG9yKGVudHJ5
KSwgZmFsc2UpOworICAgICAgICAgICAgICAgICAgICBpZiAoaXNEZWxldGVkQnVja2V0KCplbnRy
eSkpCisgICAgICAgICAgICAgICAgICAgICAgICBkZWxldGVkRW50cnkgPSBlbnRyeTsKKyAgICAg
ICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBpZiAoaXNFbXB0eUJ1Y2tl
dCgqZW50cnkpKQorICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAg
ICAgICAgIGlmIChpc0RlbGV0ZWRCdWNrZXQoKmVudHJ5KSkKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGRlbGV0ZWRFbnRyeSA9IGVudHJ5OworICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChI
YXNoVHJhbnNsYXRvcjo6ZXF1YWwoRXh0cmFjdG9yOjpleHRyYWN0KCplbnRyeSksIGtleSkpCisg
ICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gQWRkUmVzdWx0KG1ha2VLbm93bkdvb2RJdGVy
YXRvcihlbnRyeSksIGZhbHNlKTsKKyAgICAgICAgICAgICAgICB9CisKICNpZiBEVU1QX0hBU0hU
QUJMRV9TVEFUUwotICAgICAgICAgICAgKytwcm9iZUNvdW50OwotICAgICAgICAgICAgSGFzaFRh
YmxlU3RhdHM6OnJlY29yZENvbGxpc2lvbkF0Q291bnQocHJvYmVDb3VudCk7CisgICAgICAgICAg
ICAgICAgKytwcm9iZUNvdW50OworICAgICAgICAgICAgICAgIEhhc2hUYWJsZVN0YXRzOjpyZWNv
cmRDb2xsaXNpb25BdENvdW50KHByb2JlQ291bnQpOwogI2VuZGlmCiAKICNpZiBEVU1QX0hBU0hU
QUJMRV9TVEFUU19QRVJfVEFCTEUKLSAgICAgICAgICAgIG1fc3RhdHMtPnJlY29yZENvbGxpc2lv
bkF0Q291bnQocHJvYmVDb3VudCk7CisgICAgICAgICAgICAgICAgbV9zdGF0cy0+cmVjb3JkQ29s
bGlzaW9uQXRDb3VudChwcm9iZUNvdW50KTsKICNlbmRpZgogCi0gICAgICAgICAgICBpZiAoayA9
PSAwKQotICAgICAgICAgICAgICAgIGsgPSAxIHwgZG91YmxlSGFzaChoKTsKLSAgICAgICAgICAg
IGkgPSAoaSArIGspICYgc2l6ZU1hc2s7CisgICAgICAgICAgICAgICAgaWYgKCFrKQorICAgICAg
ICAgICAgICAgICAgICBrID0gMSB8IGRvdWJsZUhhc2goaCk7CisgICAgICAgICAgICAgICAgaSA9
IChpICsgaykgJiBzaXplTWFzazsKKyAgICAgICAgICAgIH0KICAgICAgICAgfQogCiAgICAgICAg
IGlmIChkZWxldGVkRW50cnkpIHsKQEAgLTEwMDYsMTEgKzEwNjYsOSBAQCBERUNMQVJFX0FMTE9D
QVRPUl9XSVRIX0hFQVBfSURFTlRJRklFUihICiAKICAgICAgICAgRnVsbExvb2t1cFR5cGUgbG9v
a3VwUmVzdWx0ID0gZnVsbExvb2t1cEZvcldyaXRpbmc8SGFzaFRyYW5zbGF0b3I+KGtleSk7CiAK
LSAgICAgICAgVmFsdWVUeXBlKiBlbnRyeSA9IGxvb2t1cFJlc3VsdC5maXJzdC5maXJzdDsKLSAg
ICAgICAgYm9vbCBmb3VuZCA9IGxvb2t1cFJlc3VsdC5maXJzdC5zZWNvbmQ7Ci0gICAgICAgIHVu
c2lnbmVkIGggPSBsb29rdXBSZXN1bHQuc2Vjb25kOworICAgICAgICBWYWx1ZVR5cGUqIGVudHJ5
ID0gbG9va3VwUmVzdWx0LmVudHJ5OwogICAgICAgICAKLSAgICAgICAgaWYgKGZvdW5kKQorICAg
ICAgICBpZiAobG9va3VwUmVzdWx0LmVsZW1lbnRGb3VuZCA9PSBFbGVtZW50Rm91bmQ6OlllcykK
ICAgICAgICAgICAgIHJldHVybiBBZGRSZXN1bHQobWFrZUtub3duR29vZEl0ZXJhdG9yKGVudHJ5
KSwgZmFsc2UpOwogICAgICAgICAKICAgICAgICAgaWYgKGlzRGVsZXRlZEJ1Y2tldCgqZW50cnkp
KSB7CkBAIC0xMDE4LDcgKzEwNzYsNyBAQCBERUNMQVJFX0FMTE9DQVRPUl9XSVRIX0hFQVBfSURF
TlRJRklFUihICiAgICAgICAgICAgICBzZXREZWxldGVkQ291bnQoZGVsZXRlZENvdW50KCkgLSAx
KTsKICAgICAgICAgfQogCi0gICAgICAgIEhhc2hUcmFuc2xhdG9yOjp0cmFuc2xhdGUoKmVudHJ5
LCBzdGQ6OmZvcndhcmQ8VD4oa2V5KSwgc3RkOjpmb3J3YXJkPEV4dHJhPihleHRyYSksIGgpOwor
ICAgICAgICBIYXNoVHJhbnNsYXRvcjo6dHJhbnNsYXRlKCplbnRyeSwgc3RkOjpmb3J3YXJkPFQ+
KGtleSksIHN0ZDo6Zm9yd2FyZDxFeHRyYT4oZXh0cmEpLCBsb29rdXBSZXN1bHQuaGFzaCk7CiAg
ICAgICAgIHNldEtleUNvdW50KGtleUNvdW50KCkgKyAxKTsKIAogICAgICAgICBpZiAoc2hvdWxk
RXhwYW5kKCkpCkBAIC0xMDMzLDggKzEwOTEsOCBAQCBERUNMQVJFX0FMTE9DQVRPUl9XSVRIX0hF
QVBfSURFTlRJRklFUihICiAgICAgaW5saW5lIGF1dG8gSGFzaFRhYmxlPEtleSwgVmFsdWUsIEV4
dHJhY3RvciwgSGFzaEZ1bmN0aW9ucywgVHJhaXRzLCBLZXlUcmFpdHM+OjpyZWluc2VydChWYWx1
ZVR5cGUmJiBlbnRyeSkgLT4gVmFsdWVUeXBlKgogICAgIHsKICAgICAgICAgQVNTRVJUKG1fdGFi
bGUpOwotICAgICAgICBBU1NFUlQoIWxvb2t1cEZvcldyaXRpbmcoRXh0cmFjdG9yOjpleHRyYWN0
KGVudHJ5KSkuc2Vjb25kKTsKLSAgICAgICAgQVNTRVJUKCFpc0RlbGV0ZWRCdWNrZXQoKihsb29r
dXBGb3JXcml0aW5nKEV4dHJhY3Rvcjo6ZXh0cmFjdChlbnRyeSkpLmZpcnN0KSkpOworICAgICAg
ICBBU1NFUlQobG9va3VwRm9yV3JpdGluZyhFeHRyYWN0b3I6OmV4dHJhY3QoZW50cnkpKS5lbGVt
ZW50Rm91bmQgPT0gRWxlbWVudEZvdW5kOjpObyk7CisgICAgICAgIEFTU0VSVCghaXNEZWxldGVk
QnVja2V0KCoobG9va3VwRm9yV3JpdGluZyhFeHRyYWN0b3I6OmV4dHJhY3QoZW50cnkpKS5lbnRy
eSkpKTsKICNpZiBEVU1QX0hBU0hUQUJMRV9TVEFUUwogICAgICAgICArK0hhc2hUYWJsZVN0YXRz
OjpudW1SZWluc2VydHM7CiAjZW5kaWYKQEAgLTEwNDIsNyArMTEwMCw3IEBAIERFQ0xBUkVfQUxM
T0NBVE9SX1dJVEhfSEVBUF9JREVOVElGSUVSKEgKICAgICAgICAgKyttX3N0YXRzLT5udW1SZWlu
c2VydHM7CiAjZW5kaWYKIAotICAgICAgICBWYWx1ZSogbmV3RW50cnkgPSBsb29rdXBGb3JXcml0
aW5nKEV4dHJhY3Rvcjo6ZXh0cmFjdChlbnRyeSkpLmZpcnN0OworICAgICAgICBWYWx1ZSogbmV3
RW50cnkgPSBsb29rdXBGb3JXcml0aW5nKEV4dHJhY3Rvcjo6ZXh0cmFjdChlbnRyeSkpLmVudHJ5
OwogICAgICAgICBuZXdFbnRyeS0+flZhbHVlKCk7CiAgICAgICAgIG5ldyAoTm90TnVsbCwgbmV3
RW50cnkpIFZhbHVlVHlwZShXVEZNb3ZlKGVudHJ5KSk7CiAKQEAgLTEzNjQsNiArMTQyMiwxNCBA
QCBERUNMQVJFX0FMTE9DQVRPUl9XSVRIX0hFQVBfSURFTlRJRklFUihICiAgICAgICAgIHNldEtl
eUNvdW50KG90aGVyS2V5Q291bnQpOwogICAgICAgICBzZXREZWxldGVkQ291bnQoMCk7CiAKKyAg
ICAgICAgaWYgKG90aGVyLnRhYmxlU2l6ZU1hc2soKSA8IG1heFVuaGFzaGVkU2l6ZSkgeworICAg
ICAgICAgICAgLy8gRklYTUU6IFdlIGNvdWxkIGFsbG9jYXRlIHRoZSB0YWJsZSB3aXRob3V0IGlu
aXRpYWxpemF0aW9uIGluIHRoaXMgY2FzZSBhbmQgZmluaXNoIHRoZSBpbml0aWFsaXphdGlvbiBh
ZnRlciB0aGlzIGxvb3AuCisgICAgICAgICAgICB1bnNpZ25lZCBpID0gMDsKKyAgICAgICAgICAg
IGZvciAoY29uc3QgYXV0byYgb3RoZXJWYWx1ZSA6IG90aGVyKQorICAgICAgICAgICAgICAgIElk
ZW50aXR5VHJhbnNsYXRvclR5cGU6OnRyYW5zbGF0ZShtX3RhYmxlW2krK10sIEV4dHJhY3Rvcjo6
ZXh0cmFjdChvdGhlclZhbHVlKSwgb3RoZXJWYWx1ZSk7CisgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgIH0KKyAgICAgICAgCiAgICAgICAgIGZvciAoY29uc3QgYXV0byYgb3RoZXJWYWx1ZSA6
IG90aGVyKQogICAgICAgICAgICAgYWRkVW5pcXVlRm9ySW5pdGlhbGl6YXRpb248SWRlbnRpdHlU
cmFuc2xhdG9yVHlwZT4oRXh0cmFjdG9yOjpleHRyYWN0KG90aGVyVmFsdWUpLCBvdGhlclZhbHVl
KTsKICAgICB9CkBAIC0xNDY5LDExICsxNTM1LDExIEBAIERFQ0xBUkVfQUxMT0NBVE9SX1dJVEhf
SEVBUF9JREVOVElGSUVSKEgKICAgICAgICAgY29uc3RfaXRlcmF0b3IqIG5leHQ7CiAgICAgICAg
IGZvciAoY29uc3RfaXRlcmF0b3IqIHAgPSBtX2l0ZXJhdG9yczsgcDsgcCA9IG5leHQpIHsKICAg
ICAgICAgICAgIG5leHQgPSBwLT5tX25leHQ7Ci0gICAgICAgICAgICBwLT5tX3RhYmxlID0gMDsK
LSAgICAgICAgICAgIHAtPm1fbmV4dCA9IDA7Ci0gICAgICAgICAgICBwLT5tX3ByZXZpb3VzID0g
MDsKKyAgICAgICAgICAgIHAtPm1fdGFibGUgPSBudWxscHRyOworICAgICAgICAgICAgcC0+bV9u
ZXh0ID0gbnVsbHB0cjsKKyAgICAgICAgICAgIHAtPm1fcHJldmlvdXMgPSBudWxscHRyOwogICAg
ICAgICB9Ci0gICAgICAgIG1faXRlcmF0b3JzID0gMDsKKyAgICAgICAgbV9pdGVyYXRvcnMgPSBu
dWxscHRyOwogICAgIH0KIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIEtleSwgdHlwZW5hbWUgVmFs
dWUsIHR5cGVuYW1lIEV4dHJhY3RvciwgdHlwZW5hbWUgSGFzaEZ1bmN0aW9ucywgdHlwZW5hbWUg
VHJhaXRzLCB0eXBlbmFtZSBLZXlUcmFpdHM+CkBAIC0xNDgxLDExICsxNTQ3LDExIEBAIERFQ0xB
UkVfQUxMT0NBVE9SX1dJVEhfSEVBUF9JREVOVElGSUVSKEgKICAgICAgICAgSGFzaFRhYmxlQ29u
c3RJdGVyYXRvcjxLZXksIFZhbHVlLCBFeHRyYWN0b3IsIEhhc2hGdW5jdGlvbnMsIFRyYWl0cywg
S2V5VHJhaXRzPiogaXQpCiAgICAgewogICAgICAgICBpdC0+bV90YWJsZSA9IHRhYmxlOwotICAg
ICAgICBpdC0+bV9wcmV2aW91cyA9IDA7CisgICAgICAgIGl0LT5tX3ByZXZpb3VzID0gbnVsbHB0
cjsKIAogICAgICAgICAvLyBJbnNlcnQgaXRlcmF0b3IgYXQgaGVhZCBvZiBkb3VibHktbGlua2Vk
IGxpc3Qgb2YgaXRlcmF0b3JzLgogICAgICAgICBpZiAoIXRhYmxlKSB7Ci0gICAgICAgICAgICBp
dC0+bV9uZXh0ID0gMDsKKyAgICAgICAgICAgIGl0LT5tX25leHQgPSBudWxscHRyOwogICAgICAg
ICB9IGVsc2UgewogICAgICAgICAgICAgc3RkOjpsb2NrX2d1YXJkPExvY2s+IGxvY2soKnRhYmxl
LT5tX211dGV4KTsKICAgICAgICAgICAgIEFTU0VSVCh0YWJsZS0+bV9pdGVyYXRvcnMgIT0gaXQp
OwpAQCAtMTUyMSw5ICsxNTg3LDkgQEAgREVDTEFSRV9BTExPQ0FUT1JfV0lUSF9IRUFQX0lERU5U
SUZJRVIoSAogICAgICAgICAgICAgfQogICAgICAgICB9CiAKLSAgICAgICAgaXQtPm1fdGFibGUg
PSAwOwotICAgICAgICBpdC0+bV9uZXh0ID0gMDsKLSAgICAgICAgaXQtPm1fcHJldmlvdXMgPSAw
OworICAgICAgICBpdC0+bV90YWJsZSA9IG51bGxwdHI7CisgICAgICAgIGl0LT5tX25leHQgPSBu
dWxscHRyOworICAgICAgICBpdC0+bV9wcmV2aW91cyA9IG51bGxwdHI7CiAgICAgfQogCiAjZW5k
aWYgLy8gQ0hFQ0tfSEFTSFRBQkxFX0lURVJBVE9SUwpJbmRleDogU291cmNlL1dURi93dGYvdGV4
dC9BdG9tU3RyaW5nSW1wbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvdGV4dC9B
dG9tU3RyaW5nSW1wbC5jcHAJKHJldmlzaW9uIDI1NTc3NykKKysrIFNvdXJjZS9XVEYvd3RmL3Rl
eHQvQXRvbVN0cmluZ0ltcGwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDQsMTAgKzEwNCwxMSBA
QCBzdHJ1Y3QgQ1N0cmluZ1RyYW5zbGF0b3IgewogICAgICAgICByZXR1cm4gV1RGOjplcXVhbChz
dHIuZ2V0KCksIGNoYXJhY3RlcnMpOwogICAgIH0KIAotICAgIHN0YXRpYyB2b2lkIHRyYW5zbGF0
ZShQYWNrZWRQdHI8U3RyaW5nSW1wbD4mIGxvY2F0aW9uLCBjb25zdCBMQ2hhciogY29uc3QmIGNo
YXJhY3RlcnMsIHVuc2lnbmVkIGhhc2gpCisgICAgc3RhdGljIHZvaWQgdHJhbnNsYXRlKFBhY2tl
ZFB0cjxTdHJpbmdJbXBsPiYgbG9jYXRpb24sIGNvbnN0IExDaGFyKiBjb25zdCYgY2hhcmFjdGVy
cywgT3B0aW9uYWw8dW5zaWduZWQ+IGhhc2gpCiAgICAgewogICAgICAgICBhdXRvKiBwb2ludGVy
ID0gJlN0cmluZ0ltcGw6OmNyZWF0ZShjaGFyYWN0ZXJzKS5sZWFrUmVmKCk7Ci0gICAgICAgIHBv
aW50ZXItPnNldEhhc2goaGFzaCk7CisgICAgICAgIGlmIChoYXNoKQorICAgICAgICAgICAgcG9p
bnRlci0+c2V0SGFzaCgqaGFzaCk7CiAgICAgICAgIHBvaW50ZXItPnNldElzQXRvbSh0cnVlKTsK
ICAgICAgICAgbG9jYXRpb24gPSBwb2ludGVyOwogICAgIH0KQEAgLTE1NiwxMCArMTU3LDExIEBA
IHN0cnVjdCBVQ2hhckJ1ZmZlclRyYW5zbGF0b3IgewogICAgICAgICByZXR1cm4gV1RGOjplcXVh
bChzdHIuZ2V0KCksIGJ1Zi5jaGFyYWN0ZXJzLCBidWYubGVuZ3RoKTsKICAgICB9CiAKLSAgICBz
dGF0aWMgdm9pZCB0cmFuc2xhdGUoUGFja2VkUHRyPFN0cmluZ0ltcGw+JiBsb2NhdGlvbiwgY29u
c3QgVUNoYXJCdWZmZXImIGJ1ZiwgdW5zaWduZWQgaGFzaCkKKyAgICBzdGF0aWMgdm9pZCB0cmFu
c2xhdGUoUGFja2VkUHRyPFN0cmluZ0ltcGw+JiBsb2NhdGlvbiwgY29uc3QgVUNoYXJCdWZmZXIm
IGJ1ZiwgT3B0aW9uYWw8dW5zaWduZWQ+IGhhc2gpCiAgICAgewogICAgICAgICBhdXRvKiBwb2lu
dGVyID0gJlN0cmluZ0ltcGw6OmNyZWF0ZThCaXRJZlBvc3NpYmxlKGJ1Zi5jaGFyYWN0ZXJzLCBi
dWYubGVuZ3RoKS5sZWFrUmVmKCk7Ci0gICAgICAgIHBvaW50ZXItPnNldEhhc2goaGFzaCk7Cisg
ICAgICAgIGlmIChoYXNoKQorICAgICAgICAgICAgcG9pbnRlci0+c2V0SGFzaCgqaGFzaCk7CiAg
ICAgICAgIHBvaW50ZXItPnNldElzQXRvbSh0cnVlKTsKICAgICAgICAgbG9jYXRpb24gPSBwb2lu
dGVyOwogICAgIH0KQEAgLTIxNSw3ICsyMTcsNyBAQCBzdHJ1Y3QgSGFzaEFuZFVURjhDaGFyYWN0
ZXJzVHJhbnNsYXRvciB7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIAotICAgIHN0YXRp
YyB2b2lkIHRyYW5zbGF0ZShQYWNrZWRQdHI8U3RyaW5nSW1wbD4mIGxvY2F0aW9uLCBjb25zdCBI
YXNoQW5kVVRGOENoYXJhY3RlcnMmIGJ1ZmZlciwgdW5zaWduZWQgaGFzaCkKKyAgICBzdGF0aWMg
dm9pZCB0cmFuc2xhdGUoUGFja2VkUHRyPFN0cmluZ0ltcGw+JiBsb2NhdGlvbiwgY29uc3QgSGFz
aEFuZFVURjhDaGFyYWN0ZXJzJiBidWZmZXIsIE9wdGlvbmFsPHVuc2lnbmVkPiBoYXNoKQogICAg
IHsKICAgICAgICAgVUNoYXIqIHRhcmdldDsKICAgICAgICAgYXV0byBuZXdTdHJpbmcgPSBTdHJp
bmdJbXBsOjpjcmVhdGVVbmluaXRpYWxpemVkKGJ1ZmZlci51dGYxNkxlbmd0aCwgdGFyZ2V0KTsK
QEAgLTIyOSw3ICsyMzEsOCBAQCBzdHJ1Y3QgSGFzaEFuZFVURjhDaGFyYWN0ZXJzVHJhbnNsYXRv
ciB7CiAgICAgICAgICAgICBuZXdTdHJpbmcgPSBTdHJpbmdJbXBsOjpjcmVhdGUoYnVmZmVyLmNo
YXJhY3RlcnMsIGJ1ZmZlci5sZW5ndGgpOwogCiAgICAgICAgIGF1dG8qIHBvaW50ZXIgPSAmbmV3
U3RyaW5nLmxlYWtSZWYoKTsKLSAgICAgICAgcG9pbnRlci0+c2V0SGFzaChoYXNoKTsKKyAgICAg
ICAgaWYgKGhhc2gpCisgICAgICAgICAgICBwb2ludGVyLT5zZXRIYXNoKCpoYXNoKTsKICAgICAg
ICAgcG9pbnRlci0+c2V0SXNBdG9tKHRydWUpOwogICAgICAgICBsb2NhdGlvbiA9IHBvaW50ZXI7
CiAgICAgfQpAQCAtMjcwLDEwICsyNzMsMTEgQEAgc3RydWN0IFN1YnN0cmluZ0xvY2F0aW9uIHsK
IH07CiAKIHN0cnVjdCBTdWJzdHJpbmdUcmFuc2xhdG9yIHsKLSAgICBzdGF0aWMgdm9pZCB0cmFu
c2xhdGUoUGFja2VkUHRyPFN0cmluZ0ltcGw+JiBsb2NhdGlvbiwgY29uc3QgU3Vic3RyaW5nTG9j
YXRpb24mIGJ1ZmZlciwgdW5zaWduZWQgaGFzaCkKKyAgICBzdGF0aWMgdm9pZCB0cmFuc2xhdGUo
UGFja2VkUHRyPFN0cmluZ0ltcGw+JiBsb2NhdGlvbiwgY29uc3QgU3Vic3RyaW5nTG9jYXRpb24m
IGJ1ZmZlciwgT3B0aW9uYWw8dW5zaWduZWQ+IGhhc2gpCiAgICAgewogICAgICAgICBhdXRvKiBw
b2ludGVyID0gJlN0cmluZ0ltcGw6OmNyZWF0ZVN1YnN0cmluZ1NoYXJpbmdJbXBsKCpidWZmZXIu
YmFzZVN0cmluZywgYnVmZmVyLnN0YXJ0LCBidWZmZXIubGVuZ3RoKS5sZWFrUmVmKCk7Ci0gICAg
ICAgIHBvaW50ZXItPnNldEhhc2goaGFzaCk7CisgICAgICAgIGlmIChoYXNoKQorICAgICAgICAg
ICAgcG9pbnRlci0+c2V0SGFzaCgqaGFzaCk7CiAgICAgICAgIHBvaW50ZXItPnNldElzQXRvbSh0
cnVlKTsKICAgICAgICAgbG9jYXRpb24gPSBwb2ludGVyOwogICAgIH0KQEAgLTMzNiwxMCArMzQw
LDExIEBAIHN0cnVjdCBMQ2hhckJ1ZmZlclRyYW5zbGF0b3IgewogICAgICAgICByZXR1cm4gV1RG
OjplcXVhbChzdHIuZ2V0KCksIGJ1Zi5jaGFyYWN0ZXJzLCBidWYubGVuZ3RoKTsKICAgICB9CiAK
LSAgICBzdGF0aWMgdm9pZCB0cmFuc2xhdGUoUGFja2VkUHRyPFN0cmluZ0ltcGw+JiBsb2NhdGlv
biwgY29uc3QgTENoYXJCdWZmZXImIGJ1ZiwgdW5zaWduZWQgaGFzaCkKKyAgICBzdGF0aWMgdm9p
ZCB0cmFuc2xhdGUoUGFja2VkUHRyPFN0cmluZ0ltcGw+JiBsb2NhdGlvbiwgY29uc3QgTENoYXJC
dWZmZXImIGJ1ZiwgT3B0aW9uYWw8dW5zaWduZWQ+IGhhc2gpCiAgICAgewogICAgICAgICBhdXRv
KiBwb2ludGVyID0gJlN0cmluZ0ltcGw6OmNyZWF0ZShidWYuY2hhcmFjdGVycywgYnVmLmxlbmd0
aCkubGVha1JlZigpOwotICAgICAgICBwb2ludGVyLT5zZXRIYXNoKGhhc2gpOworICAgICAgICBp
ZiAoaGFzaCkKKyAgICAgICAgICAgIHBvaW50ZXItPnNldEhhc2goKmhhc2gpOwogICAgICAgICBw
b2ludGVyLT5zZXRJc0F0b20odHJ1ZSk7CiAgICAgICAgIGxvY2F0aW9uID0gcG9pbnRlcjsKICAg
ICB9CkBAIC0zNTgsMTAgKzM2MywxMSBAQCBzdHJ1Y3QgQnVmZmVyRnJvbVN0YXRpY0RhdGFUcmFu
c2xhdG9yIHsKICAgICAgICAgcmV0dXJuIFdURjo6ZXF1YWwoc3RyLmdldCgpLCBidWYuY2hhcmFj
dGVycywgYnVmLmxlbmd0aCk7CiAgICAgfQogCi0gICAgc3RhdGljIHZvaWQgdHJhbnNsYXRlKFBh
Y2tlZFB0cjxTdHJpbmdJbXBsPiYgbG9jYXRpb24sIGNvbnN0IEJ1ZmZlciYgYnVmLCB1bnNpZ25l
ZCBoYXNoKQorICAgIHN0YXRpYyB2b2lkIHRyYW5zbGF0ZShQYWNrZWRQdHI8U3RyaW5nSW1wbD4m
IGxvY2F0aW9uLCBjb25zdCBCdWZmZXImIGJ1ZiwgT3B0aW9uYWw8dW5zaWduZWQ+IGhhc2gpCiAg
ICAgewogICAgICAgICBhdXRvKiBwb2ludGVyID0gJlN0cmluZ0ltcGw6OmNyZWF0ZVdpdGhvdXRD
b3B5aW5nKGJ1Zi5jaGFyYWN0ZXJzLCBidWYubGVuZ3RoKS5sZWFrUmVmKCk7Ci0gICAgICAgIHBv
aW50ZXItPnNldEhhc2goaGFzaCk7CisgICAgICAgIGlmIChoYXNoKQorICAgICAgICAgICAgcG9p
bnRlci0+c2V0SGFzaCgqaGFzaCk7CiAgICAgICAgIHBvaW50ZXItPnNldElzQXRvbSh0cnVlKTsK
ICAgICAgICAgbG9jYXRpb24gPSBwb2ludGVyOwogICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cJKHJldmlz
aW9uIDI1NTc3OSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpA
QCAtMSwzICsxLDIxIEBACisyMDIwLTAyLTA1ICBBbGV4IENocmlzdGVuc2VuICA8YWNocmlzdGVu
c2VuQHdlYmtpdC5vcmc+CisKKyAgICAgICAgVXNlIGxpbmVhciBwcm9iaW5nIGZyb20gdGhlIGJl
Z2lubmluZyBvZiBzbWFsbCBIYXNoVGFibGVzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0yMDcyNTEKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICAqIGNvbnRlbnRleHRlbnNpb25zL0NvbWJpbmVkRmlsdGVyc0Fs
cGhhYmV0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRFeHRlbnNpb25zOjpUZXJtQ3Jl
YXRvclRyYW5zbGF0b3I6OnRyYW5zbGF0ZSk6CisgICAgICAgICogY29udGVudGV4dGVuc2lvbnMv
TkZBVG9ERkEuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudEV4dGVuc2lvbnM6Ok5vZGVJ
ZFNldFRvVW5pcXVlTm9kZUlkU2V0VHJhbnNsYXRvcjo6dHJhbnNsYXRlKToKKyAgICAgICAgKiBk
b20vUXVhbGlmaWVkTmFtZUNhY2hlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlFOYW1lQ29tcG9u
ZW50c1RyYW5zbGF0b3I6OnRyYW5zbGF0ZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2cvU3ViaW1hZ2VDYWNoZVdpdGhUaW1lci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTdWJpbWFn
ZUNhY2hlQWRkZXI6OnRyYW5zbGF0ZSk6CisgICAgICAgICogcmVuZGVyaW5nL1RleHRBdXRvU2l6
aW5nLmg6CisgICAgICAgIChXZWJDb3JlOjpUZXh0QXV0b1NpemluZ0hhc2hUcmFuc2xhdG9yOjp0
cmFuc2xhdGUpOgorCiAyMDIwLTAyLTA0ICBBbGV4IENocmlzdGVuc2VuICA8YWNocmlzdGVuc2Vu
QHdlYmtpdC5vcmc+CiAKICAgICAgICAgRml4IGludGVybmFsIGJ1aWxkIGFmdGVyIHIyNTU3MDkK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2NvbnRlbnRleHRlbnNpb25zL0NvbWJpbmVkRmlsdGVyc0Fs
cGhhYmV0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9u
cy9Db21iaW5lZEZpbHRlcnNBbHBoYWJldC5jcHAJKHJldmlzaW9uIDI1NTc3NykKKysrIFNvdXJj
ZS9XZWJDb3JlL2NvbnRlbnRleHRlbnNpb25zL0NvbWJpbmVkRmlsdGVyc0FscGhhYmV0LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNDgsNyArNDgsNyBAQCBzdHJ1Y3QgVGVybUNyZWF0b3JUcmFuc2xh
dG9yIHsKICAgICAgICAgcmV0dXJuICp0ZXJtID09IGlucHV0LnRlcm07CiAgICAgfQogCi0gICAg
c3RhdGljIHZvaWQgdHJhbnNsYXRlKGNvbnN0IFRlcm0qJiBsb2NhdGlvbiwgY29uc3QgVGVybUNy
ZWF0b3JJbnB1dCYgaW5wdXQsIHVuc2lnbmVkKQorICAgIHN0YXRpYyB2b2lkIHRyYW5zbGF0ZShj
b25zdCBUZXJtKiYgbG9jYXRpb24sIGNvbnN0IFRlcm1DcmVhdG9ySW5wdXQmIGlucHV0LCBPcHRp
b25hbDx1bnNpZ25lZD4pCiAgICAgewogICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8VGVybT4gbmV3
VW5pcXVlVGVybShuZXcgVGVybShpbnB1dC50ZXJtKSk7CiAgICAgICAgIGxvY2F0aW9uID0gbmV3
VW5pcXVlVGVybS5nZXQoKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2NvbnRlbnRleHRlbnNpb25z
L05GQVRvREZBLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5z
aW9ucy9ORkFUb0RGQS5jcHAJKHJldmlzaW9uIDI1NTc3NykKKysrIFNvdXJjZS9XZWJDb3JlL2Nv
bnRlbnRleHRlbnNpb25zL05GQVRvREZBLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjQzLDcgKzI0
Myw3IEBAIHN0cnVjdCBOb2RlSWRTZXRUb1VuaXF1ZU5vZGVJZFNldFRyYW5zbGEKICAgICAgICAg
cmV0dXJuIGEgPT0gYi5ub2RlSWRTZXQ7CiAgICAgfQogCi0gICAgc3RhdGljIHZvaWQgdHJhbnNs
YXRlKFVuaXF1ZU5vZGVJZFNldCYgbG9jYXRpb24sIGNvbnN0IE5vZGVJZFNldFRvVW5pcXVlTm9k
ZUlkU2V0U291cmNlJiBzb3VyY2UsIHVuc2lnbmVkIGhhc2gpCisgICAgc3RhdGljIHZvaWQgdHJh
bnNsYXRlKFVuaXF1ZU5vZGVJZFNldCYgbG9jYXRpb24sIGNvbnN0IE5vZGVJZFNldFRvVW5pcXVl
Tm9kZUlkU2V0U291cmNlJiBzb3VyY2UsIE9wdGlvbmFsPHVuc2lnbmVkPiBoYXNoKQogICAgIHsK
ICAgICAgICAgREZBTm9kZSBuZXdERkFOb2RlOwogCkBAIC0yNjUsNyArMjY1LDcgQEAgc3RydWN0
IE5vZGVJZFNldFRvVW5pcXVlTm9kZUlkU2V0VHJhbnNsYQogCiAgICAgICAgIHVuc2lnbmVkIGRm
YU5vZGVJZCA9IHNvdXJjZS5kZmEubm9kZXMuc2l6ZSgpOwogICAgICAgICBzb3VyY2UuZGZhLm5v
ZGVzLmFwcGVuZChuZXdERkFOb2RlKTsKLSAgICAgICAgbmV3IChOb3ROdWxsLCAmbG9jYXRpb24p
IFVuaXF1ZU5vZGVJZFNldChzb3VyY2Uubm9kZUlkU2V0LCBoYXNoLCBkZmFOb2RlSWQpOworICAg
ICAgICBuZXcgKE5vdE51bGwsICZsb2NhdGlvbikgVW5pcXVlTm9kZUlkU2V0KHNvdXJjZS5ub2Rl
SWRTZXQsIGhhc2ggPyAqaGFzaCA6IHNvdXJjZS5oYXNoLCBkZmFOb2RlSWQpOwogCiAgICAgICAg
IEFTU0VSVChsb2NhdGlvbi5pbXBsKCkpOwogICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Rv
bS9RdWFsaWZpZWROYW1lQ2FjaGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Rv
bS9RdWFsaWZpZWROYW1lQ2FjaGUuY3BwCShyZXZpc2lvbiAyNTU3NzcpCisrKyBTb3VyY2UvV2Vi
Q29yZS9kb20vUXVhbGlmaWVkTmFtZUNhY2hlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzgsNyAr
MzgsNyBAQCBzdHJ1Y3QgUU5hbWVDb21wb25lbnRzVHJhbnNsYXRvciB7CiAgICAgewogICAgICAg
ICByZXR1cm4gYy5tX3ByZWZpeCA9PSBuYW1lLT5tX3ByZWZpeC5pbXBsKCkgJiYgYy5tX2xvY2Fs
TmFtZSA9PSBuYW1lLT5tX2xvY2FsTmFtZS5pbXBsKCkgJiYgYy5tX25hbWVzcGFjZSA9PSBuYW1l
LT5tX25hbWVzcGFjZS5pbXBsKCk7CiAgICAgfQotICAgIHN0YXRpYyB2b2lkIHRyYW5zbGF0ZShR
dWFsaWZpZWROYW1lOjpRdWFsaWZpZWROYW1lSW1wbComIGxvY2F0aW9uLCBjb25zdCBRdWFsaWZp
ZWROYW1lQ29tcG9uZW50cyYgY29tcG9uZW50cywgdW5zaWduZWQpCisgICAgc3RhdGljIHZvaWQg
dHJhbnNsYXRlKFF1YWxpZmllZE5hbWU6OlF1YWxpZmllZE5hbWVJbXBsKiYgbG9jYXRpb24sIGNv
bnN0IFF1YWxpZmllZE5hbWVDb21wb25lbnRzJiBjb21wb25lbnRzLCBPcHRpb25hbDx1bnNpZ25l
ZD4pCiAgICAgewogICAgICAgICBsb2NhdGlvbiA9ICZRdWFsaWZpZWROYW1lOjpRdWFsaWZpZWRO
YW1lSW1wbDo6Y3JlYXRlKGNvbXBvbmVudHMubV9wcmVmaXgsIGNvbXBvbmVudHMubV9sb2NhbE5h
bWUsIGNvbXBvbmVudHMubV9uYW1lc3BhY2UpLmxlYWtSZWYoKTsKICAgICB9CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9TdWJpbWFnZUNhY2hlV2l0aFRpbWVyLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9TdWJp
bWFnZUNhY2hlV2l0aFRpbWVyLmNwcAkocmV2aXNpb24gMjU1Nzc3KQorKysgU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvU3ViaW1hZ2VDYWNoZVdpdGhUaW1lci5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTY3LDcgKzY3LDcgQEAgc3RydWN0IFN1YmltYWdlQ2FjaGVBZGRlciB7CiAg
ICAgICAgIHJldHVybiBhLmltYWdlID09IGIuaW1hZ2UgJiYgYS5yZWN0ID09IGIucmVjdDsKICAg
ICB9CiAKLSAgICBzdGF0aWMgdm9pZCB0cmFuc2xhdGUoU3ViaW1hZ2VDYWNoZVdpdGhUaW1lcjo6
U3ViaW1hZ2VDYWNoZUVudHJ5JiBlbnRyeSwgY29uc3QgU3ViaW1hZ2VSZXF1ZXN0JiByZXF1ZXN0
LCB1bnNpZ25lZCAvKmhhc2hDb2RlKi8pCisgICAgc3RhdGljIHZvaWQgdHJhbnNsYXRlKFN1Ymlt
YWdlQ2FjaGVXaXRoVGltZXI6OlN1YmltYWdlQ2FjaGVFbnRyeSYgZW50cnksIGNvbnN0IFN1Ymlt
YWdlUmVxdWVzdCYgcmVxdWVzdCwgT3B0aW9uYWw8dW5zaWduZWQ+KQogICAgIHsKICAgICAgICAg
ZW50cnkuaW1hZ2UgPSByZXF1ZXN0LmltYWdlOwogICAgICAgICBlbnRyeS5yZWN0ID0gcmVxdWVz
dC5yZWN0OwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1RleHRBdXRvU2l6aW5nLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1RleHRBdXRvU2l6aW5nLmgJ
KHJldmlzaW9uIDI1NTc3NykKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9UZXh0QXV0b1Np
emluZy5oCSh3b3JraW5nIGNvcHkpCkBAIC04NSw5ICs4NSw5IEBAIHN0cnVjdCBUZXh0QXV0b1Np
emluZ0hhc2hUcmFuc2xhdG9yIHsKICAgICAgICAgcmV0dXJuIGtleS5zdHlsZSgpLT5lcXVhbEZv
clRleHRBdXRvc2l6aW5nKHN0eWxlKTsKICAgICB9CiAKLSAgICBzdGF0aWMgdm9pZCB0cmFuc2xh
dGUoVGV4dEF1dG9TaXppbmdLZXkmIGtleSwgY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlLCB1bnNp
Z25lZCBoYXNoKQorICAgIHN0YXRpYyB2b2lkIHRyYW5zbGF0ZShUZXh0QXV0b1NpemluZ0tleSYg
a2V5LCBjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUsIE9wdGlvbmFsPHVuc2lnbmVkPiBoYXNoKQog
ICAgIHsKLSAgICAgICAga2V5ID0geyBzdHlsZSwgaGFzaCB9OworICAgICAgICBrZXkgPSB7IHN0
eWxlLCBoYXNoID8gKmhhc2ggOiBzdHlsZS5oYXNoRm9yVGV4dEF1dG9zaXppbmcoKSB9OwogICAg
IH0KIH07CiAK
</data>
<flag name="review"
          id="405431"
          type_id="1"
          status="-"
          setter="mark.lam"
    />
          </attachment>
      

    </bug>

</bugzilla>